Imported Upstream version 7.4 upstream/7.4
authorJacek Bukarewicz <j.bukarewicz@samsung.com>
Thu, 16 Jan 2014 13:09:28 +0000 (14:09 +0100)
committerJacek Bukarewicz <j.bukarewicz@samsung.com>
Thu, 16 Jan 2014 13:09:28 +0000 (14:09 +0100)
1073 files changed:
Contents
Filelist
Makefile
README.txt
README_ami.txt
README_amibin.txt
README_amisrc.txt
README_bindos.txt
README_dos.txt
README_extra.txt
README_mac.txt
README_ole.txt
README_os2.txt
README_os390.txt
README_src.txt
README_srcdos.txt
README_unix.txt
README_vms.txt
README_w32s.txt
nsis/gvim.nsi
runtime/autoload/ada.vim
runtime/autoload/ccomplete.vim
runtime/autoload/clojurecomplete.vim [new file with mode: 0644]
runtime/autoload/getscript.vim
runtime/autoload/htmlcomplete.vim
runtime/autoload/netrw.vim
runtime/autoload/netrwFileHandlers.vim
runtime/autoload/netrwSettings.vim
runtime/autoload/phpcomplete.vim
runtime/autoload/rubycomplete.vim
runtime/autoload/spellfile.vim
runtime/autoload/sqlcomplete.vim
runtime/autoload/syntaxcomplete.vim
runtime/autoload/tar.vim
runtime/autoload/tohtml.vim
runtime/autoload/vimball.vim
runtime/autoload/xmlcomplete.vim
runtime/autoload/zip.vim
runtime/colors/koehler.vim
runtime/colors/ron.vim
runtime/compiler/checkstyle.vim
runtime/compiler/cs.vim
runtime/compiler/decada.vim
runtime/compiler/erlang.vim [new file with mode: 0644]
runtime/compiler/eruby.vim
runtime/compiler/g95.vim [new file with mode: 0644]
runtime/compiler/gcc.vim
runtime/compiler/gfortran.vim [new file with mode: 0644]
runtime/compiler/gnat.vim
runtime/compiler/haml.vim [new file with mode: 0644]
runtime/compiler/hp_acc.vim
runtime/compiler/ifort.vim [new file with mode: 0644]
runtime/compiler/intel.vim
runtime/compiler/irix5_c.vim
runtime/compiler/irix5_cpp.vim
runtime/compiler/javac.vim
runtime/compiler/mcs.vim
runtime/compiler/mips_c.vim
runtime/compiler/mipspro_c89.vim
runtime/compiler/mipspro_cpp.vim
runtime/compiler/msbuild.vim [new file with mode: 0644]
runtime/compiler/ocaml.vim [new file with mode: 0644]
runtime/compiler/php.vim
runtime/compiler/rake.vim [new file with mode: 0644]
runtime/compiler/rspec.vim
runtime/compiler/rst.vim
runtime/compiler/ruby.vim
runtime/compiler/rubyunit.vim
runtime/compiler/sass.vim [new file with mode: 0644]
runtime/compiler/se.vim
runtime/compiler/tcl.vim
runtime/compiler/tex.vim
runtime/compiler/tidy.vim
runtime/compiler/xbuild.vim [new file with mode: 0644]
runtime/compiler/xmllint.vim
runtime/doc/arabic.txt
runtime/doc/autocmd.txt
runtime/doc/change.txt
runtime/doc/cmdline.txt
runtime/doc/debug.txt
runtime/doc/debugger.txt
runtime/doc/develop.txt
runtime/doc/diff.txt
runtime/doc/digraph.txt
runtime/doc/editing.txt
runtime/doc/eval.txt
runtime/doc/evim-fr.1
runtime/doc/evim-fr.UTF-8.1
runtime/doc/evim-ja.UTF-8.1 [new file with mode: 0644]
runtime/doc/farsi.txt
runtime/doc/filetype.txt
runtime/doc/fold.txt
runtime/doc/ft_ada.txt
runtime/doc/ft_sql.txt
runtime/doc/gui.txt
runtime/doc/gui_w16.txt
runtime/doc/gui_w32.txt
runtime/doc/gui_x11.txt
runtime/doc/hangulin.txt
runtime/doc/hebrew.txt
runtime/doc/help.txt
runtime/doc/helphelp.txt
runtime/doc/howto.txt
runtime/doc/if_cscop.txt
runtime/doc/if_lua.txt
runtime/doc/if_mzsch.txt
runtime/doc/if_ole.txt
runtime/doc/if_perl.txt
runtime/doc/if_pyth.txt
runtime/doc/if_ruby.txt
runtime/doc/if_sniff.txt
runtime/doc/if_tcl.txt
runtime/doc/indent.txt
runtime/doc/index.txt
runtime/doc/insert.txt
runtime/doc/intro.txt
runtime/doc/map.txt
runtime/doc/mbyte.txt
runtime/doc/message.txt
runtime/doc/mlang.txt
runtime/doc/motion.txt
runtime/doc/netbeans.txt
runtime/doc/options.txt
runtime/doc/os_390.txt
runtime/doc/os_amiga.txt
runtime/doc/os_beos.txt
runtime/doc/os_dos.txt
runtime/doc/os_mac.txt
runtime/doc/os_mint.txt
runtime/doc/os_msdos.txt
runtime/doc/os_os2.txt
runtime/doc/os_qnx.txt
runtime/doc/os_risc.txt
runtime/doc/os_unix.txt
runtime/doc/os_vms.txt
runtime/doc/os_win32.txt
runtime/doc/pattern.txt
runtime/doc/pi_getscript.txt
runtime/doc/pi_gzip.txt
runtime/doc/pi_netrw.txt
runtime/doc/pi_paren.txt
runtime/doc/pi_spec.txt
runtime/doc/pi_tar.txt
runtime/doc/pi_vimball.txt
runtime/doc/pi_zip.txt
runtime/doc/print.txt
runtime/doc/quickfix.txt
runtime/doc/quickref.txt
runtime/doc/quotes.txt
runtime/doc/recover.txt
runtime/doc/remote.txt
runtime/doc/repeat.txt
runtime/doc/rileft.txt
runtime/doc/russian.txt
runtime/doc/scroll.txt
runtime/doc/sign.txt
runtime/doc/spell.txt
runtime/doc/sponsor.txt
runtime/doc/starting.txt
runtime/doc/syntax.txt
runtime/doc/tabpage.txt
runtime/doc/tags
runtime/doc/tagsrch.txt
runtime/doc/term.txt
runtime/doc/tips.txt
runtime/doc/todo.txt
runtime/doc/uganda.txt
runtime/doc/undo.txt
runtime/doc/usr_01.txt
runtime/doc/usr_02.txt
runtime/doc/usr_03.txt
runtime/doc/usr_04.txt
runtime/doc/usr_05.txt
runtime/doc/usr_06.txt
runtime/doc/usr_07.txt
runtime/doc/usr_08.txt
runtime/doc/usr_09.txt
runtime/doc/usr_10.txt
runtime/doc/usr_11.txt
runtime/doc/usr_12.txt
runtime/doc/usr_20.txt
runtime/doc/usr_21.txt
runtime/doc/usr_22.txt
runtime/doc/usr_23.txt
runtime/doc/usr_24.txt
runtime/doc/usr_25.txt
runtime/doc/usr_26.txt
runtime/doc/usr_27.txt
runtime/doc/usr_28.txt
runtime/doc/usr_29.txt
runtime/doc/usr_30.txt
runtime/doc/usr_31.txt
runtime/doc/usr_32.txt
runtime/doc/usr_40.txt
runtime/doc/usr_41.txt
runtime/doc/usr_42.txt
runtime/doc/usr_43.txt
runtime/doc/usr_44.txt
runtime/doc/usr_45.txt
runtime/doc/usr_90.txt
runtime/doc/usr_toc.txt
runtime/doc/various.txt
runtime/doc/version4.txt
runtime/doc/version5.txt
runtime/doc/version6.txt
runtime/doc/version7.txt
runtime/doc/vi_diff.txt
runtime/doc/vim-de.1 [new file with mode: 0644]
runtime/doc/vim-de.UTF-8.1 [new file with mode: 0644]
runtime/doc/vim-fr.1
runtime/doc/vim-fr.UTF-8.1
runtime/doc/vim-ja.UTF-8.1 [new file with mode: 0644]
runtime/doc/vim2html.pl
runtime/doc/vimdiff-fr.1
runtime/doc/vimdiff-fr.UTF-8.1
runtime/doc/vimdiff-ja.UTF-8.1 [new file with mode: 0644]
runtime/doc/vimtutor-fr.1
runtime/doc/vimtutor-fr.UTF-8.1
runtime/doc/vimtutor-ja.UTF-8.1 [new file with mode: 0644]
runtime/doc/visual.txt
runtime/doc/windows.txt
runtime/doc/workshop.txt
runtime/doc/xxd-fr.1
runtime/doc/xxd-fr.UTF-8.1
runtime/doc/xxd-ja.UTF-8.1 [new file with mode: 0644]
runtime/filetype.vim
runtime/ftplugin/aap.vim
runtime/ftplugin/abap.vim [new file with mode: 0644]
runtime/ftplugin/abaqus.vim
runtime/ftplugin/ada.vim
runtime/ftplugin/ant.vim
runtime/ftplugin/art.vim
runtime/ftplugin/aspvbs.vim
runtime/ftplugin/c.vim
runtime/ftplugin/changelog.vim
runtime/ftplugin/clojure.vim [new file with mode: 0644]
runtime/ftplugin/config.vim
runtime/ftplugin/cs.vim
runtime/ftplugin/csc.vim
runtime/ftplugin/csh.vim
runtime/ftplugin/cucumber.vim
runtime/ftplugin/debchangelog.vim
runtime/ftplugin/docbk.vim [new file with mode: 0644]
runtime/ftplugin/dosbatch.vim
runtime/ftplugin/dtd.vim
runtime/ftplugin/erlang.vim [new file with mode: 0644]
runtime/ftplugin/eruby.vim
runtime/ftplugin/falcon.vim [new file with mode: 0644]
runtime/ftplugin/fortran.vim
runtime/ftplugin/git.vim
runtime/ftplugin/gitcommit.vim
runtime/ftplugin/gprof.vim [new file with mode: 0644]
runtime/ftplugin/haml.vim
runtime/ftplugin/hamster.vim
runtime/ftplugin/help.vim
runtime/ftplugin/html.vim
runtime/ftplugin/initex.vim
runtime/ftplugin/ishd.vim
runtime/ftplugin/java.vim
runtime/ftplugin/jsp.vim
runtime/ftplugin/kwt.vim
runtime/ftplugin/lisp.vim
runtime/ftplugin/logcheck.vim
runtime/ftplugin/lua.vim
runtime/ftplugin/mail.vim
runtime/ftplugin/make.vim
runtime/ftplugin/man.vim
runtime/ftplugin/markdown.vim
runtime/ftplugin/matlab.vim
runtime/ftplugin/ocaml.vim
runtime/ftplugin/occam.vim
runtime/ftplugin/pascal.vim
runtime/ftplugin/perl.vim
runtime/ftplugin/perl6.vim
runtime/ftplugin/php.vim
runtime/ftplugin/plaintex.vim
runtime/ftplugin/postscr.vim
runtime/ftplugin/pyrex.vim
runtime/ftplugin/python.vim
runtime/ftplugin/qf.vim
runtime/ftplugin/rpl.vim
runtime/ftplugin/ruby.vim
runtime/ftplugin/scheme.vim
runtime/ftplugin/sgml.vim
runtime/ftplugin/sh.vim
runtime/ftplugin/spec.vim
runtime/ftplugin/sql.vim
runtime/ftplugin/svg.vim
runtime/ftplugin/tcl.vim
runtime/ftplugin/tcsh.vim
runtime/ftplugin/tex.vim
runtime/ftplugin/treetop.vim [new file with mode: 0644]
runtime/ftplugin/tt2html.vim [new file with mode: 0644]
runtime/ftplugin/vhdl.vim
runtime/ftplugin/vim.vim
runtime/ftplugin/xhtml.vim
runtime/ftplugin/xml.vim
runtime/ftplugin/xs.vim
runtime/ftplugin/xsd.vim
runtime/ftplugin/zimbu.vim [new file with mode: 0644]
runtime/ftplugin/zsh.vim
runtime/ftplugof.vim
runtime/indent/ada.vim
runtime/indent/awk.vim
runtime/indent/clojure.vim [new file with mode: 0644]
runtime/indent/cmake.vim
runtime/indent/css.vim
runtime/indent/cucumber.vim
runtime/indent/dtd.vim
runtime/indent/eiffel.vim
runtime/indent/erlang.vim
runtime/indent/eruby.vim
runtime/indent/falcon.vim [new file with mode: 0644]
runtime/indent/fortran.vim
runtime/indent/gitconfig.vim
runtime/indent/gitolite.vim [new file with mode: 0644]
runtime/indent/haml.vim
runtime/indent/html.vim
runtime/indent/idlang.vim
runtime/indent/java.vim
runtime/indent/liquid.vim
runtime/indent/lisp.vim
runtime/indent/mp.vim
runtime/indent/ocaml.vim
runtime/indent/occam.vim
runtime/indent/pascal.vim
runtime/indent/perl.vim
runtime/indent/perl6.vim
runtime/indent/php.vim
runtime/indent/python.vim
runtime/indent/r.vim [new file with mode: 0644]
runtime/indent/rst.vim
runtime/indent/ruby.vim
runtime/indent/sass.vim
runtime/indent/sdl.vim
runtime/indent/sqlanywhere.vim
runtime/indent/tcsh.vim
runtime/indent/tex.vim [new file with mode: 0644]
runtime/indent/treetop.vim [new file with mode: 0644]
runtime/indent/verilog.vim
runtime/indent/vhdl.vim
runtime/indent/vim.vim
runtime/indent/xinetd.vim
runtime/indent/xml.vim
runtime/indent/yaml.vim [new file with mode: 0644]
runtime/indent/zimbu.vim [new file with mode: 0644]
runtime/keymap/belarusian-jcuken.vim [new file with mode: 0644]
runtime/lang/menu_af_af.latin1.vim
runtime/lang/menu_ca_es.latin1.vim
runtime/lang/menu_chinese_gb.936.vim
runtime/lang/menu_chinese_taiwan.950.vim
runtime/lang/menu_cs_cz.iso_8859-2.vim
runtime/lang/menu_cs_cz.latin1.vim
runtime/lang/menu_cs_cz.utf-8.vim [new file with mode: 0644]
runtime/lang/menu_czech_czech_republic.1250.vim
runtime/lang/menu_czech_czech_republic.ascii.vim
runtime/lang/menu_de_de.latin1.vim
runtime/lang/menu_eo.utf-8.vim
runtime/lang/menu_es_es.latin1.vim
runtime/lang/menu_fi_fi.latin1.vim
runtime/lang/menu_fr_fr.latin1.vim
runtime/lang/menu_hu_hu.iso_8859-2.vim
runtime/lang/menu_hu_hu.utf-8.vim
runtime/lang/menu_it_it.latin1.vim
runtime/lang/menu_ja.cp932.vim
runtime/lang/menu_ja.euc-jp.vim
runtime/lang/menu_ja.eucjp.vim
runtime/lang/menu_ja.ujis.vim
runtime/lang/menu_ja_jp.cp932.vim
runtime/lang/menu_ja_jp.euc-jp.vim
runtime/lang/menu_ja_jp.eucjp.vim
runtime/lang/menu_ja_jp.ujis.vim
runtime/lang/menu_ja_jp.utf-8.vim
runtime/lang/menu_japanese_japan.932.vim
runtime/lang/menu_ko_kr.euckr.vim
runtime/lang/menu_ko_kr.utf-8.vim
runtime/lang/menu_nl_nl.latin1.vim
runtime/lang/menu_no_no.latin1.vim
runtime/lang/menu_pl_pl.iso_8859-2.vim
runtime/lang/menu_pl_pl.utf-8.vim
runtime/lang/menu_polish_poland.1250.vim
runtime/lang/menu_pt_br.vim
runtime/lang/menu_pt_pt.vim
runtime/lang/menu_ru_ru.koi8-r.vim
runtime/lang/menu_ru_ru.vim
runtime/lang/menu_sk_sk.iso_8859-2.vim
runtime/lang/menu_sl_si.cp1250.vim
runtime/lang/menu_sl_si.latin2.vim
runtime/lang/menu_sl_si.utf-8.vim
runtime/lang/menu_slovak_slovak_republic.1250.vim
runtime/lang/menu_sr_rs.ascii.vim
runtime/lang/menu_sr_rs.iso_8859-2.vim
runtime/lang/menu_sr_rs.iso_8859-5.vim
runtime/lang/menu_sr_rs.utf-8.vim
runtime/lang/menu_sv_se.latin1.vim
runtime/lang/menu_uk_ua.cp1251.vim
runtime/lang/menu_uk_ua.koi8-u.vim
runtime/lang/menu_vi_vn.vim
runtime/lang/menu_zh_cn.gb2312.vim
runtime/lang/menu_zh_cn.utf-8.vim
runtime/lang/menu_zh_tw.utf-8.vim
runtime/macros/editexisting.vim
runtime/macros/justify.vim
runtime/macros/less.bat [new file with mode: 0644]
runtime/macros/less.sh
runtime/macros/less.vim
runtime/macros/matchit.vim
runtime/makemenu.vim
runtime/menu.vim
runtime/mswin.vim
runtime/optwin.vim
runtime/plugin/getscriptPlugin.vim
runtime/plugin/matchparen.vim
runtime/plugin/netrwPlugin.vim
runtime/plugin/tarPlugin.vim
runtime/plugin/tohtml.vim
runtime/plugin/vimballPlugin.vim
runtime/plugin/zipPlugin.vim
runtime/scripts.vim
runtime/spell/br/br_FR.diff
runtime/spell/br/main.aap
runtime/spell/en.utf-8.spl
runtime/spell/en.utf-8.sug
runtime/spell/ga/ga_IE.diff
runtime/spell/gd/gd_GB.diff
runtime/spell/hu/main.aap
runtime/spell/spell.vim [new file with mode: 0644]
runtime/spell/sv/sv_SE.diff
runtime/synmenu.vim
runtime/syntax/2html.vim
runtime/syntax/abap.vim
runtime/syntax/abel.vim
runtime/syntax/ada.vim
runtime/syntax/aptconf.vim [new file with mode: 0644]
runtime/syntax/art.vim
runtime/syntax/asciidoc.vim [new file with mode: 0644]
runtime/syntax/asm.vim
runtime/syntax/asn.vim
runtime/syntax/autoit.vim
runtime/syntax/automake.vim
runtime/syntax/awk.vim
runtime/syntax/ayacc.vim
runtime/syntax/basic.vim
runtime/syntax/bc.vim
runtime/syntax/bib.vim
runtime/syntax/bindzone.vim
runtime/syntax/blank.vim
runtime/syntax/bzr.vim
runtime/syntax/c.vim
runtime/syntax/cfg.vim
runtime/syntax/cl.vim
runtime/syntax/clean.vim
runtime/syntax/clipper.vim
runtime/syntax/clojure.vim [new file with mode: 0644]
runtime/syntax/cmake.vim
runtime/syntax/cpp.vim
runtime/syntax/crontab.vim
runtime/syntax/csc.vim
runtime/syntax/csdl.vim [new file with mode: 0644]
runtime/syntax/css.vim
runtime/syntax/cucumber.vim
runtime/syntax/cupl.vim
runtime/syntax/cweb.vim
runtime/syntax/d.vim
runtime/syntax/datascript.vim
runtime/syntax/debchangelog.vim
runtime/syntax/debcontrol.vim
runtime/syntax/debsources.vim
runtime/syntax/diff.vim
runtime/syntax/dircolors.vim
runtime/syntax/dirpager.vim [new file with mode: 0644]
runtime/syntax/django.vim
runtime/syntax/dnsmasq.vim [new file with mode: 0644]
runtime/syntax/docbk.vim
runtime/syntax/dosini.vim
runtime/syntax/dot.vim
runtime/syntax/doxygen.vim
runtime/syntax/dtd.vim
runtime/syntax/dts.vim [new file with mode: 0644]
runtime/syntax/eiffel.vim
runtime/syntax/erlang.vim
runtime/syntax/eruby.vim
runtime/syntax/esmtprc.vim
runtime/syntax/expect.vim
runtime/syntax/falcon.vim [new file with mode: 0644]
runtime/syntax/fasm.vim
runtime/syntax/forth.vim
runtime/syntax/fortran.vim
runtime/syntax/fstab.vim
runtime/syntax/fvwm.vim
runtime/syntax/gdb.vim
runtime/syntax/gdmo.vim
runtime/syntax/gitcommit.vim
runtime/syntax/gitolite.vim [new file with mode: 0644]
runtime/syntax/gitrebase.vim
runtime/syntax/gnash.vim [new file with mode: 0644]
runtime/syntax/gp.vim
runtime/syntax/gpg.vim
runtime/syntax/gprof.vim [new file with mode: 0644]
runtime/syntax/groovy.vim
runtime/syntax/group.vim
runtime/syntax/gsp.vim
runtime/syntax/hb.vim
runtime/syntax/help.vim
runtime/syntax/hgcommit.vim [new file with mode: 0644]
runtime/syntax/hostsaccess.vim [new file with mode: 0644]
runtime/syntax/html.vim
runtime/syntax/idl.vim
runtime/syntax/idlang.vim
runtime/syntax/ist.vim
runtime/syntax/jam.vim
runtime/syntax/java.vim
runtime/syntax/javacc.vim
runtime/syntax/javascript.vim
runtime/syntax/jovial.vim [new file with mode: 0644]
runtime/syntax/kwt.vim
runtime/syntax/lex.vim
runtime/syntax/liquid.vim
runtime/syntax/lisp.vim
runtime/syntax/logindefs.vim
runtime/syntax/logtalk.vim
runtime/syntax/lout.vim
runtime/syntax/lpc.vim
runtime/syntax/lsl.vim
runtime/syntax/lua.vim
runtime/syntax/lynx.vim
runtime/syntax/mail.vim
runtime/syntax/mailcap.vim
runtime/syntax/make.vim
runtime/syntax/mallard.vim [new file with mode: 0644]
runtime/syntax/markdown.vim
runtime/syntax/masm.vim
runtime/syntax/matlab.vim
runtime/syntax/mma.vim
runtime/syntax/mmix.vim
runtime/syntax/monk.vim
runtime/syntax/mrxvtrc.vim
runtime/syntax/msidl.vim
runtime/syntax/muttrc.vim
runtime/syntax/nasm.vim
runtime/syntax/natural.vim
runtime/syntax/netrw.vim
runtime/syntax/ninja.vim [new file with mode: 0644]
runtime/syntax/nroff.vim
runtime/syntax/objc.vim
runtime/syntax/ocaml.vim
runtime/syntax/opl.vim
runtime/syntax/pamconf.vim
runtime/syntax/perl.vim
runtime/syntax/perl6.vim
runtime/syntax/pf.vim
runtime/syntax/pfmain.vim
runtime/syntax/php.vim
runtime/syntax/pine.vim
runtime/syntax/pli.vim [new file with mode: 0644]
runtime/syntax/po.vim
runtime/syntax/pod.vim
runtime/syntax/pov.vim
runtime/syntax/povini.vim
runtime/syntax/progress.vim
runtime/syntax/prolog.vim
runtime/syntax/proto.vim [new file with mode: 0644]
runtime/syntax/python.vim
runtime/syntax/r.vim
runtime/syntax/ratpoison.vim
runtime/syntax/rcs.vim
runtime/syntax/readline.vim
runtime/syntax/redif.vim [new file with mode: 0644]
runtime/syntax/resolv.vim
runtime/syntax/reva.vim
runtime/syntax/rexx.vim
runtime/syntax/rhelp.vim
runtime/syntax/rng.vim [new file with mode: 0644]
runtime/syntax/rpl.vim
runtime/syntax/rst.vim
runtime/syntax/ruby.vim
runtime/syntax/sas.vim
runtime/syntax/sass.vim
runtime/syntax/scheme.vim
runtime/syntax/sd.vim
runtime/syntax/sdl.vim
runtime/syntax/sendpr.vim
runtime/syntax/sgmldecl.vim
runtime/syntax/sgmllnx.vim
runtime/syntax/sh.vim
runtime/syntax/sisu.vim
runtime/syntax/slice.vim
runtime/syntax/smil.vim
runtime/syntax/snnspat.vim
runtime/syntax/spice.vim
runtime/syntax/spup.vim
runtime/syntax/sqlanywhere.vim
runtime/syntax/sqlhana.vim [new file with mode: 0644]
runtime/syntax/sqr.vim
runtime/syntax/sshconfig.vim
runtime/syntax/sshdconfig.vim
runtime/syntax/st.vim
runtime/syntax/sudoers.vim
runtime/syntax/svn.vim
runtime/syntax/synload.vim
runtime/syntax/sysctl.vim
runtime/syntax/taskdata.vim
runtime/syntax/taskedit.vim
runtime/syntax/tasm.vim
runtime/syntax/tex.vim
runtime/syntax/tidy.vim
runtime/syntax/treetop.vim [new file with mode: 0644]
runtime/syntax/tsalt.vim
runtime/syntax/tt2.vim [new file with mode: 0644]
runtime/syntax/tt2html.vim [new file with mode: 0644]
runtime/syntax/tt2js.vim [new file with mode: 0644]
runtime/syntax/uil.vim
runtime/syntax/upstart.vim [new file with mode: 0644]
runtime/syntax/upstreamdat.vim [new file with mode: 0644]
runtime/syntax/upstreaminstalllog.vim [new file with mode: 0644]
runtime/syntax/upstreamlog.vim [new file with mode: 0644]
runtime/syntax/usserverlog.vim [new file with mode: 0644]
runtime/syntax/usw2kagtlog.vim [new file with mode: 0644]
runtime/syntax/valgrind.vim
runtime/syntax/verilog.vim
runtime/syntax/vhdl.vim
runtime/syntax/vim.vim
runtime/syntax/viminfo.vim
runtime/syntax/wget.vim
runtime/syntax/xdefaults.vim
runtime/syntax/xf86conf.vim
runtime/syntax/xml.vim
runtime/syntax/xpm2.vim
runtime/syntax/xquery.vim
runtime/syntax/xs.vim
runtime/syntax/yacc.vim
runtime/syntax/yaml.vim
runtime/syntax/zimbu.vim [new file with mode: 0644]
runtime/tools/ccfilter_README.txt
runtime/tools/efm_perl.pl
runtime/tools/vim_vs_net.cmd
runtime/tutor/Makefile
runtime/tutor/tutor
runtime/tutor/tutor.bar [moved from runtime/tutor/tutor.bj with 80% similarity]
runtime/tutor/tutor.bar.utf-8 [moved from runtime/tutor/tutor.bj.utf-8 with 81% similarity]
runtime/tutor/tutor.de
runtime/tutor/tutor.de.utf-8
runtime/tutor/tutor.eo
runtime/tutor/tutor.eo.utf-8
runtime/tutor/tutor.fr
runtime/tutor/tutor.fr.utf-8
runtime/tutor/tutor.hr
runtime/tutor/tutor.hr.cp1250
runtime/tutor/tutor.hr.utf-8
runtime/tutor/tutor.hu
runtime/tutor/tutor.hu.cp1250
runtime/tutor/tutor.hu.utf-8
runtime/tutor/tutor.ja.euc
runtime/tutor/tutor.ja.sjis
runtime/tutor/tutor.ja.utf-8
runtime/tutor/tutor.ko.euc
runtime/tutor/tutor.ko.utf-8
runtime/tutor/tutor.nb
runtime/tutor/tutor.nb.utf-8
runtime/tutor/tutor.nl [new file with mode: 0644]
runtime/tutor/tutor.nl.utf-8 [new file with mode: 0644]
runtime/tutor/tutor.no
runtime/tutor/tutor.no.utf-8
runtime/tutor/tutor.sk
runtime/tutor/tutor.sk.cp1250
runtime/tutor/tutor.sk.utf-8
runtime/tutor/tutor.utf-8
runtime/tutor/tutor.vim
runtime/tutor/tutor.zh.euc
runtime/tutor/tutor.zh_cn.utf-8 [new file with mode: 0644]
runtime/tutor/tutor.zh_tw.utf-8 [new file with mode: 0644]
runtime/vimrc_example.vim
src/GvimExt/GvimExt.reg
src/GvimExt/Make_cyg.mak [new file with mode: 0644]
src/GvimExt/Make_ming.mak
src/GvimExt/Makefile
src/GvimExt/gvimext.cpp
src/GvimExt/gvimext.def
src/GvimExt/gvimext_ming.def
src/INSTALL
src/INSTALLpc.txt
src/INSTALLvms.txt
src/Make_bc5.mak
src/Make_cyg.mak
src/Make_ivc.mak
src/Make_ming.mak
src/Make_mvc.mak
src/Make_ro.mak [deleted file]
src/Make_sas.mak
src/Make_vms.mms
src/Make_w16.mak
src/Makefile
src/VisVim/Commands.cpp
src/VisVim/OleAut.cpp
src/VisVim/README_VisVim.txt
src/arabic.c
src/ascii.h
src/auto/configure
src/bigvim.bat
src/bigvim64.bat [new file with mode: 0644]
src/blowfish.c
src/buffer.c
src/charset.c
src/config.h.in
src/config.mk.in
src/configure.in
src/dehqx.py
src/diff.c
src/digraph.c
src/dosinst.c
src/edit.c
src/eval.c
src/ex_cmds.c
src/ex_cmds.h
src/ex_cmds2.c
src/ex_docmd.c
src/ex_eval.c
src/ex_getln.c
src/farsi.c
src/feature.h
src/fileio.c
src/fold.c
src/getchar.c
src/glbl_ime.cpp
src/globals.h
src/gui.c
src/gui.h
src/gui_at_fs.c
src/gui_athena.c
src/gui_beval.c
src/gui_gtk.c
src/gui_gtk_x11.c
src/gui_mac.c
src/gui_motif.c
src/gui_photon.c
src/gui_riscos.c [deleted file]
src/gui_riscos.h [deleted file]
src/gui_w16.c
src/gui_w32.c
src/gui_w48.c
src/gui_x11.c
src/gui_xmdlg.c
src/gui_xmebw.c
src/gui_xmebwp.h
src/gvim.exe.mnf
src/hardcopy.c
src/hashtab.c
src/if_cscope.c
src/if_lua.c
src/if_mzsch.c
src/if_mzsch.h
src/if_ole.cpp
src/if_ole.h
src/if_perl.xs
src/if_py_both.h
src/if_python.c
src/if_python3.c
src/if_ruby.c
src/if_sniff.c
src/if_tcl.c
src/if_xcmdsrv.c
src/integration.c
src/keymap.h
src/link.sh
src/macros.h
src/main.aap
src/main.c
src/mark.c
src/mbyte.c
src/memfile.c
src/memfile_test.c [new file with mode: 0644]
src/memline.c
src/menu.c
src/message.c
src/misc1.c
src/misc2.c
src/move.c
src/msvc2008.bat
src/msvc2010.bat [new file with mode: 0644]
src/nbdebug.c
src/netbeans.c
src/normal.c
src/ops.c
src/option.c
src/option.h
src/os_amiga.c
src/os_amiga.h
src/os_beos.c
src/os_beos.h
src/os_dos.h
src/os_mac.h
src/os_mac_conv.c
src/os_macosx.m
src/os_msdos.c
src/os_msdos.h
src/os_mswin.c
src/os_qnx.c
src/os_riscos.c [deleted file]
src/os_riscos.h [deleted file]
src/os_unix.c
src/os_unix.h
src/os_win16.c
src/os_win16.h
src/os_win32.c
src/os_win32.h
src/po/Makefile
src/po/README.txt
src/po/af.po
src/po/ca.po
src/po/de.po
src/po/en_GB.po
src/po/eo.po
src/po/es.po
src/po/fi.po
src/po/fr.po
src/po/ga.po
src/po/it.po
src/po/ja.euc-jp.po [new file with mode: 0644]
src/po/ja.po
src/po/ja.sjis.po
src/po/ko.UTF-8.po
src/po/ko.po
src/po/nb.po
src/po/nl.po [new file with mode: 0644]
src/po/no.po
src/po/pl.UTF-8.po
src/po/pl.cp1250.po
src/po/pl.po
src/po/pt_BR.po
src/po/ru.cp1251.po
src/po/ru.po
src/po/sjiscorr.c
src/po/sk.cp1250.po
src/po/sk.po
src/po/sv.po
src/po/uk.cp1251.po
src/po/uk.po
src/po/vi.po
src/po/zh_CN.UTF-8.po
src/po/zh_CN.cp936.po
src/po/zh_CN.po
src/po/zh_TW.UTF-8.po
src/po/zh_TW.po
src/popupmnu.c
src/proto.h
src/proto/buffer.pro
src/proto/charset.pro
src/proto/digraph.pro
src/proto/edit.pro
src/proto/eval.pro
src/proto/ex_cmds.pro
src/proto/ex_cmds2.pro
src/proto/ex_docmd.pro
src/proto/ex_getln.pro
src/proto/fileio.pro
src/proto/fold.pro
src/proto/getchar.pro
src/proto/gui_athena.pro
src/proto/gui_gtk.pro
src/proto/gui_gtk_x11.pro
src/proto/gui_mac.pro
src/proto/gui_motif.pro
src/proto/gui_photon.pro
src/proto/gui_riscos.pro [deleted file]
src/proto/gui_w16.pro
src/proto/gui_w32.pro
src/proto/if_lua.pro
src/proto/if_mzsch.pro
src/proto/if_python.pro
src/proto/if_python3.pro
src/proto/if_ruby.pro
src/proto/mark.pro
src/proto/mbyte.pro
src/proto/message.pro
src/proto/misc1.pro
src/proto/misc2.pro
src/proto/move.pro
src/proto/ops.pro
src/proto/option.pro
src/proto/os_beos.pro [new file with mode: 0644]
src/proto/os_mswin.pro
src/proto/os_riscos.pro [deleted file]
src/proto/os_win32.pro
src/proto/regexp.pro
src/proto/screen.pro
src/proto/search.pro
src/proto/sha256.pro
src/proto/syntax.pro
src/proto/term.pro
src/proto/ui.pro
src/proto/version.pro
src/proto/winclip.pro [new file with mode: 0644]
src/proto/window.pro
src/pty.c
src/quickfix.c
src/regexp.c
src/regexp.h
src/regexp_nfa.c [new file with mode: 0644]
src/screen.c
src/search.c
src/sha256.c
src/spell.c
src/structs.h
src/syntax.c
src/tag.c
src/term.c
src/term.h
src/termlib.c
src/testdir/Make_amiga.mak
src/testdir/Make_dos.mak
src/testdir/Make_ming.mak
src/testdir/Make_os2.mak
src/testdir/Make_vms.mms
src/testdir/Makefile
src/testdir/main.aap
src/testdir/python2/module.py [new file with mode: 0644]
src/testdir/python3/module.py [new file with mode: 0644]
src/testdir/python_after/after.py [new file with mode: 0644]
src/testdir/python_before/before.py [new file with mode: 0644]
src/testdir/python_before/before_1.py [new file with mode: 0644]
src/testdir/python_before/before_2.py [new file with mode: 0644]
src/testdir/pythonx/failing.py [new file with mode: 0644]
src/testdir/pythonx/failing_import.py [new file with mode: 0644]
src/testdir/pythonx/module.py [new file with mode: 0644]
src/testdir/pythonx/modulex.py [new file with mode: 0644]
src/testdir/pythonx/topmodule/__init__.py [new file with mode: 0644]
src/testdir/pythonx/topmodule/submodule/__init__.py [new file with mode: 0644]
src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py [new file with mode: 0644]
src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py [new file with mode: 0644]
src/testdir/test1.in
src/testdir/test10.in
src/testdir/test10.ok
src/testdir/test14.in
src/testdir/test14.ok
src/testdir/test16.in
src/testdir/test17.in
src/testdir/test17.ok
src/testdir/test19.in
src/testdir/test19.ok
src/testdir/test24.in
src/testdir/test24.ok
src/testdir/test29.in
src/testdir/test29.ok
src/testdir/test3.in
src/testdir/test3.ok
src/testdir/test31.in
src/testdir/test31.ok
src/testdir/test34.in
src/testdir/test34.ok
src/testdir/test36.in
src/testdir/test36.ok
src/testdir/test40.in
src/testdir/test43.in
src/testdir/test43.ok
src/testdir/test44.in
src/testdir/test44.ok
src/testdir/test47.in
src/testdir/test47.ok
src/testdir/test48.in
src/testdir/test48.ok
src/testdir/test49.ok
src/testdir/test49.vim
src/testdir/test50.in
src/testdir/test53.in
src/testdir/test53.ok
src/testdir/test55.in
src/testdir/test55.ok
src/testdir/test57.in
src/testdir/test57.ok
src/testdir/test58.in
src/testdir/test61.in
src/testdir/test61.ok
src/testdir/test62.in
src/testdir/test62.ok
src/testdir/test64.in
src/testdir/test64.ok
src/testdir/test65.in
src/testdir/test65.ok
src/testdir/test66.in
src/testdir/test66.ok
src/testdir/test68.in
src/testdir/test68.ok
src/testdir/test69.in
src/testdir/test69.ok
src/testdir/test70.in
src/testdir/test70.ok
src/testdir/test71.in
src/testdir/test71a.in [new file with mode: 0644]
src/testdir/test72.in
src/testdir/test72.ok
src/testdir/test73.in
src/testdir/test73.ok
src/testdir/test74.in [new file with mode: 0644]
src/testdir/test74.ok [new file with mode: 0644]
src/testdir/test75.in [new file with mode: 0644]
src/testdir/test75.ok [new file with mode: 0644]
src/testdir/test76.in [new file with mode: 0644]
src/testdir/test76.ok [new file with mode: 0644]
src/testdir/test77.in [new file with mode: 0644]
src/testdir/test77.ok [new file with mode: 0644]
src/testdir/test78.in [new file with mode: 0644]
src/testdir/test78.ok [new file with mode: 0644]
src/testdir/test79.in [new file with mode: 0644]
src/testdir/test79.ok [new file with mode: 0644]
src/testdir/test8.in
src/testdir/test8.ok
src/testdir/test80.in [new file with mode: 0644]
src/testdir/test80.ok [new file with mode: 0644]
src/testdir/test81.in [new file with mode: 0644]
src/testdir/test81.ok [new file with mode: 0644]
src/testdir/test82.in [new file with mode: 0644]
src/testdir/test82.ok [new file with mode: 0644]
src/testdir/test83-tags2 [new file with mode: 0644]
src/testdir/test83-tags3 [new file with mode: 0644]
src/testdir/test83.in [new file with mode: 0644]
src/testdir/test83.ok [new file with mode: 0644]
src/testdir/test84.in [new file with mode: 0644]
src/testdir/test84.ok [new file with mode: 0644]
src/testdir/test85.in [new file with mode: 0644]
src/testdir/test85.ok [new file with mode: 0644]
src/testdir/test86.in [new file with mode: 0644]
src/testdir/test86.ok [new file with mode: 0644]
src/testdir/test87.in [new file with mode: 0644]
src/testdir/test87.ok [new file with mode: 0644]
src/testdir/test88.in [new file with mode: 0644]
src/testdir/test88.ok [new file with mode: 0644]
src/testdir/test89.in [new file with mode: 0644]
src/testdir/test89.ok [new file with mode: 0644]
src/testdir/test90.in [new file with mode: 0644]
src/testdir/test90.ok [new file with mode: 0644]
src/testdir/test91.in [new file with mode: 0644]
src/testdir/test91.ok [new file with mode: 0644]
src/testdir/test92.in [new file with mode: 0644]
src/testdir/test92.ok [new file with mode: 0644]
src/testdir/test93.in [new file with mode: 0644]
src/testdir/test93.ok [new file with mode: 0644]
src/testdir/test94.in [new file with mode: 0644]
src/testdir/test94.ok [new file with mode: 0644]
src/testdir/test95.in [new file with mode: 0644]
src/testdir/test95.ok [new file with mode: 0644]
src/testdir/test96.in [new file with mode: 0644]
src/testdir/test96.ok [new file with mode: 0644]
src/testdir/test97.in [new file with mode: 0644]
src/testdir/test97.ok [new file with mode: 0644]
src/testdir/test98.in [new file with mode: 0644]
src/testdir/test98.ok [new file with mode: 0644]
src/typemap
src/ui.c
src/undo.c
src/version.c
src/version.h
src/vim.def
src/vim.h
src/vim.rc
src/vim16.def
src/vim16.rc
src/vimio.h
src/winclip.c [new file with mode: 0644]
src/window.c
src/workshop.c
src/xpm/COPYRIGHT [new file with mode: 0644]
src/xpm/README.txt [new file with mode: 0644]
src/xpm/include/simx.h [new file with mode: 0644]
src/xpm/include/xpm.h [new file with mode: 0644]
src/xpm/x64/lib/libXpm.a [new file with mode: 0644]
src/xpm/x64/lib/libXpm.lib [new file with mode: 0644]
src/xpm/x86/lib/libXpm.a [new file with mode: 0644]
src/xpm/x86/lib/libXpm.lib [new file with mode: 0644]
src/xpm_w32.c
src/xxd/Make_ming.mak [new file with mode: 0644]
src/xxd/xxd.c
uninstal.txt
vimtutor.com

index eff854a..e34ae25 100644 (file)
--- a/Contents
+++ b/Contents
@@ -9,10 +9,10 @@ Vim           Vi IMproved.  A clone of the UNIX text editor Vi.  Very useful
                messages, shows current file name in window title, on-line
                help, rectangular cut/paste, etc., etc., etc...
 
-               Version 7.3.  Also runs under UNIX, MSDOS and other systems.
-               vim73rt.tgz  contains the documentation and syntax files.
-               vim73bin.tgz contains the binaries.
-               vim73src.tgz contains the sources.
+               Version 7.4.  Also runs under UNIX, MSDOS and other systems.
+               vim74rt.tgz  contains the documentation and syntax files.
+               vim74bin.tgz contains the binaries.
+               vim74src.tgz contains the sources.
                Author: Bram Moolenaar et al.
 
 
index 549eecc..b324933 100644 (file)
--- a/Filelist
+++ b/Filelist
@@ -39,6 +39,7 @@ SRC_ALL =     \
                src/mark.c \
                src/mbyte.c \
                src/memfile.c \
+               src/memfile_test.c \
                src/memline.c \
                src/menu.c \
                src/message.c \
@@ -56,6 +57,7 @@ SRC_ALL =     \
                src/popupmnu.c \
                src/quickfix.c \
                src/regexp.c \
+               src/regexp_nfa.c \
                src/regexp.h \
                src/screen.c \
                src/search.c \
@@ -72,6 +74,7 @@ SRC_ALL =     \
                src/version.c \
                src/version.h \
                src/vim.h \
+               src/winclip.c \
                src/window.c \
                src/xxd/xxd.c \
                src/main.aap \
@@ -80,6 +83,16 @@ SRC_ALL =    \
                src/testdir/test[0-9]*.ok \
                src/testdir/test49.vim \
                src/testdir/test60.vim \
+               src/testdir/test83-tags? \
+               src/testdir/python2/*.py \
+               src/testdir/python3/*.py \
+               src/testdir/pythonx/*.py \
+               src/testdir/pythonx/topmodule/__init__.py \
+               src/testdir/pythonx/topmodule/submodule/__init__.py \
+               src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py \
+               src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py \
+               src/testdir/python_after/*.py \
+               src/testdir/python_before/*.py \
                src/proto.h \
                src/proto/blowfish.pro \
                src/proto/buffer.pro \
@@ -128,6 +141,7 @@ SRC_ALL =   \
                src/proto/ui.pro \
                src/proto/undo.pro \
                src/proto/version.pro \
+               src/proto/winclip.pro \
                src/proto/window.pro \
 
 
@@ -259,8 +273,10 @@ SRC_DOS =  \
                src/Make_mvc.mak \
                src/Make_w16.mak \
                src/bigvim.bat \
+               src/bigvim64.bat \
                src/msvcsetup.bat \
                src/msvc2008.bat \
+               src/msvc2010.bat \
                src/dimm.idl \
                src/dlldata.c \
                src/dosinst.c \
@@ -311,6 +327,7 @@ SRC_DOS =   \
                src/xxd/Make_bc5.mak \
                src/xxd/Make_cyg.mak \
                src/xxd/Make_djg.mak \
+               src/xxd/Make_ming.mak \
                src/xxd/Make_mvc.mak \
                nsis/gvim.nsi \
                nsis/README.txt \
@@ -345,6 +362,13 @@ SRC_DOS_BIN =      \
                src/vim*.ico \
                src/vim.tlb \
                src/vimtbar.lib \
+               src/xpm/COPYRIGHT \
+               src/xpm/README.txt \
+               src/xpm/include/*.h \
+               src/xpm/x64/lib/libXpm.a \
+               src/xpm/x64/lib/libXpm.lib \
+               src/xpm/x86/lib/libXpm.a \
+               src/xpm/x86/lib/libXpm.lib \
                src/vimtbar.dll \
                nsis/icons/*.bmp \
                nsis/icons/*.ico \
@@ -426,20 +450,14 @@ SRC_EXTRA =       \
                $(SRC_VMS) \
                README_os390.txt \
                src/Make_mint.mak \
-               src/Make_ro.mak \
-               src/gui_riscos.c \
-               src/gui_riscos.h \
                src/if_sniff.c \
                src/infplist.xml \
                src/link.390 \
                src/os_beos.c \
                src/os_beos.h \
                src/os_beos.rsrc \
+               src/proto/os_beos.pro \
                src/os_mint.h \
-               src/os_riscos.c \
-               src/os_riscos.h \
-               src/proto/gui_riscos.pro \
-               src/proto/os_riscos.pro \
                src/os_vms_fix.com \
                src/toolbar.phi \
 
@@ -466,6 +484,7 @@ RT_ALL =    \
                runtime/macros/hanoi/hanoi.vim \
                runtime/macros/hanoi/poster \
                runtime/macros/justify.vim \
+               runtime/macros/less.bat \
                runtime/macros/less.sh \
                runtime/macros/less.vim \
                runtime/macros/life/click.me \
@@ -669,10 +688,13 @@ EXTRA =           \
 
 # generic language files
 LANG_GEN = \
+               runtime/doc/*-de.1 \
+               runtime/doc/*-de.UTF-8.1 \
                runtime/doc/*-fr.1 \
                runtime/doc/*-fr.UTF-8.1 \
                runtime/doc/*-it.1 \
                runtime/doc/*-it.UTF-8.1 \
+               runtime/doc/*-ja.UTF-8.1 \
                runtime/doc/*-pl.1 \
                runtime/doc/*-pl.UTF-8.1 \
                runtime/doc/*-ru.1 \
@@ -685,7 +707,17 @@ LANG_GEN = \
                runtime/tutor/Makefile \
                runtime/tutor/tutor.utf-8 \
                runtime/tutor/tutor.?? \
-               runtime/tutor/tutor.??.* \
+               runtime/tutor/tutor.??.utf-8 \
+               runtime/tutor/tutor.??.euc \
+               runtime/tutor/tutor.??.sjis \
+               runtime/tutor/tutor.??.iso9 \
+               runtime/tutor/tutor.??.big5 \
+               runtime/tutor/tutor.??.cp1250 \
+               runtime/tutor/tutor.??.cp1251 \
+               runtime/tutor/tutor.??.cp737 \
+               runtime/tutor/tutor.??_??.utf-8 \
+               runtime/tutor/tutor.bar \
+               runtime/tutor/tutor.bar.utf-8 \
                runtime/spell/README.txt \
                runtime/spell/??/*.diff \
                runtime/spell/??/main.aap \
index bf2b309..3565357 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -23,6 +23,9 @@
 # has run can result in compiling with $(CC) empty.
 
 first:
+       @if test ! -f src/auto/config.mk; then \
+               cp src/config.mk.dist src/auto/config.mk; \
+       fi
        @echo "Starting make in the src directory."
        @echo "If there are problems, cd to the src directory and run make there"
        cd src && $(MAKE) $@
@@ -30,6 +33,9 @@ first:
 # Some make programs use the last target for the $@ default; put the other
 # targets separately to always let $@ expand to "first" by default.
 all install uninstall tools config configure reconfig proto depend lint tags types test testclean clean distclean:
+       @if test ! -f src/auto/config.mk; then \
+               cp src/config.mk.dist src/auto/config.mk; \
+       fi
        @echo "Starting make in the src directory."
        @echo "If there are problems, cd to the src directory and run make there"
        cd src && $(MAKE) $@
@@ -68,14 +74,17 @@ all install uninstall tools config configure reconfig proto depend lint tags typ
 #    Before creating an archive first delete all backup files, *.orig, etc.
 
 MAJOR = 7
-MINOR = 3
+MINOR = 4
 
 # Uncomment this line if the Win32s version is to be included.
-DOSBIN_S =  dosbin_s
+DOSBIN_S =  dosbin_s
 
 # Uncomment this line if the 16 bit DOS version is to be included.
 # DOSBIN_D16 = dosbin_d16
 
+# Uncomment this line if the 32 bit DOS version is to be included.
+# DOSBIN_D32 = dosbin_d32
+
 # CHECKLIST for creating a new version:
 #
 # - Update Vim version number.  For a test version in: src/version.h, Contents,
@@ -83,8 +92,6 @@ DOSBIN_S =  dosbin_s
 #   runtime/doc/*.txt and nsis/gvim.nsi. Other things in README_os2.txt.  For a
 #   minor/major version: src/GvimExt/GvimExt.reg, src/vim.def, src/vim16.def,
 #   src/gvim.exe.mnf.
-# - Adjust the date and other info in src/version.h.
-# - Correct included_patches[] in src/version.c.
 # - Compile Vim with GTK, Perl, Python, Python3, TCL, Ruby, MZscheme, Lua (if
 #   you can make it all work), Cscope and "huge" features.  Exclude workshop
 #   and SNiFF.
@@ -93,8 +100,14 @@ DOSBIN_S =  dosbin_s
 # - With these features: "make depend" (works best with gcc).
 # - If you have a lint program: "make lint" and check the output (ignore GTK
 #   warnings).
-# - Enable the efence library in "src/Makefile" and run "make test".  Disable
-#   Python and Ruby to avoid trouble with threads (efence is not threadsafe).
+# - If you have valgrind, enable it in src/testdir/Makefile and run "make
+#   test".  Enable EXITFREE, disable GUI, scheme and tcl to avoid false alarms.
+#   Check the valgrind output.
+# - If you have the efence library, enable it in "src/Makefile" and run "make
+#   test".  Disable Python and Ruby to avoid trouble with threads (efence is
+#   not threadsafe).
+# - Adjust the date and other info in src/version.h.
+# - Correct included_patches[] in src/version.c.
 # - Check for missing entries in runtime/makemenu.vim (with checkmenu script).
 # - Check for missing options in runtime/optwin.vim et al. (with check.vim).
 # - Do "make menu" to update the runtime/synmenu.vim file.
@@ -102,8 +115,8 @@ DOSBIN_S =  dosbin_s
 # - Check that runtime/doc/help.txt doesn't contain entries in "LOCAL
 #   ADDITIONS".
 # - In runtime/doc run "make" and "make html" to check for errors.
-# - Check if src/Makefile and src/feature.h don't contain any personal
-#   preferences or the GTK, Perl, etc. mentioned above.
+# - Check if src/Makefile, src/testdir/Makefile and src/feature.h don't contain
+#   any personal preferences or the changes mentioned above.
 # - Check file protections to be "644" for text and "755" for executables (run
 #   the "check" script).
 # - Check compiling on Amiga, MS-DOS and MS-Windows.
@@ -122,36 +135,20 @@ DOSBIN_S =  dosbin_s
 # PC:
 # - Run make on Unix to update the ".mo" files.
 # - "make dossrc" and "make dosrt".  Unpack the archives on a PC.
-# 16 bit DOS version: (OBSOLETE, 16 bit version doesn't build)
-# - Set environment for compiling with Borland C++ 3.1.
-# - "bmake -f Make_bc3.mak BOR=E:\borlandc" (compiling xxd might fail, in that
-#   case set environment for compiling with Borland C++ 4.0 and do
-#   "make -f make_bc3.mak BOR=E:\BC4 xxd/xxd.exe").
-#   NOTE: this currently fails because Vim is too big.
-# - "make test" and check the output.
-# - Rename the executables to "vimd16.exe", "xxdd16.exe", "installd16.exe" and
-#   "uninstald16.exe".
-# 32 bit DOS version:
-# - Set environment for compiling with DJGPP; "gmake -f Make_djg.mak".
-# - "rm testdir/*.out", "gmake -f Make_djg.mak test" and check the output for
-#   "ALL DONE".
-# - Rename the executables to "vimd32.exe", "xxdd32.exe", "installd32.exe" and
-#   "uninstald32.exe".
 # Win32 console version:
-# - Set environment for Visual C++ 2008, e.g.:
-#   "E:\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat".  Or, when using the
-#   Visual C++ Toolkit 2003: "msvcsetup.bat" (adjust the paths when necessary).
-#   For Windows 98/ME the 2003 version is required, but then it won't work on
-#   Windows 7 and 64 bit.
-# - "nmake -f Make_mvc.mak"
+# - Set environment for Visual C++ 2008, e.g.: "msvc2008.bat"  Or:
+#   "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat".
+#   Or, when using the Visual C++ Toolkit 2003: "msvcsetup.bat" (adjust the
+#   paths when necessary).
+#   For Windows 98/ME the 2003 version is required, but then the executable
+#   won't work on Windows 7 and 64 bit systems.
+# - "nmake -f Make_mvc.mak"  (use the same path as for vcvars32.bat)
 # - "rm testdir/*.out", "nmake -f Make_mvc.mak test" and check the output.
-# - Rename the executables to "vimw32.exe", "xxdw32.exe".
+# - Rename vim.exe to vimw32.exe, xxd/xxd.exe to xxdw32.exe.
 # - Rename vim.pdb to vimw32.pdb.
-# - When building the Win32s version later, delete vimrun.exe, install.exe and
-#   uninstal.exe.  Otherwise rename executables to installw32.exe and
-#   uninstalw32.exe.
+# - Rename install.exe to installw32.exe and uninstal.exe to uninstalw32.exe.
 # Win32 GUI version:
-# - "nmake -f Make_mvc.mak GUI=yes.
+# - "nmake -f Make_mvc.mak GUI=yes"
 # - move "gvim.exe" to here (otherwise the OLE version will overwrite it).
 # - Move gvim.pdb to here.
 # - Delete vimrun.exe, install.exe and uninstal.exe.
@@ -161,23 +158,13 @@ DOSBIN_S =  dosbin_s
 # - Rename "gvim.exe" to "gvim_ole.exe".
 # - Rename gvim.pdb to "gvim_ole.pdb".
 # - Delete install.exe and uninstal.exe.
-# - If building the Win32s version delete vimrun.exe.
-# Win32s GUI version:
-# - Set environment for Visual C++ 4.1 (requires a new console window):
-#   "vcvars32.bat" (use the path for VC 4.1 e:\msdev\bin)
-# - "nmake -f Make_mvc.mak GUI=yes INTL=no clean" (use the path for VC 4.1)
-# - "nmake -f Make_mvc.mak GUI=yes INTL=no" (use the path for VC 4.1)
-# - Rename "gvim.exe" to "gvim_w32s.exe".
-# - Rename "install.exe" to "installw32.exe"
-# - Rename "uninstal.exe" to "uninstalw32.exe"
-# - The produced uninstalw32.exe and vimrun.exe are used.
 # Create the archives:
 # - Copy all the "*.exe" files to where this Makefile is.
 # - Copy all the "*.pdb" files to where this Makefile is.
 # - "make dosbin".
 # NSIS self installing exe:
 # - To get NSIS see http://nsis.sourceforge.net
-# - Make sure gvim_ole.exe, vimd32.exe, vimw32.exe, installw32.exe,
+# - Make sure gvim_ole.exe, vimw32.exe, installw32.exe,
 #   uninstalw32.exe and xxdw32.exe have been build as mentioned above.
 # - copy these files (get them from a binary archive or build them):
 #      gvimext.dll in src/GvimExt
@@ -190,7 +177,44 @@ DOSBIN_S =  dosbin_s
 # - go to ../nsis and do "makensis gvim.nsi" (takes a few minutes).
 # - Copy gvim##.exe to the dist directory.
 #
-# OS/2: (OBSOLETE, OS/2 version is no longer distributed)
+# 64 bit builds (these are not in the normal distribution, the 32 bit build
+# works just fine on 64 bit systems).
+# Like the console and GUI version, but first run vcvars64.bat or
+#   "..\VC\vcvarsall.bat x86_amd64".
+# - "nmake -f Make_mvc.mak"
+# - "nmake -f Make_mvc.mak GUI=yes"
+# Or run src/bigvim64.bat for an OLE version.
+#
+# OBSOLETE systems: You can build this if you have an appropriate system.
+#
+# 16 bit DOS version: (doesn't build anywhere)
+# - Set environment for compiling with Borland C++ 3.1.
+# - "bmake -f Make_bc3.mak BOR=E:\borlandc" (compiling xxd might fail, in that
+#   case set environment for compiling with Borland C++ 4.0 and do
+#   "make -f make_bc3.mak BOR=E:\BC4 xxd/xxd.exe").
+#   NOTE: this currently fails because Vim is too big.
+# - "make test" and check the output.
+# - Rename the executables to "vimd16.exe", "xxdd16.exe", "installd16.exe" and
+#   "uninstald16.exe".
+#
+# 32 bit DOS version: (requires Windows XP or earlier)
+# - Set environment for compiling with DJGPP; "gmake -f Make_djg.mak".
+# - "rm testdir/*.out", "gmake -f Make_djg.mak test" and check the output for
+#   "ALL DONE".
+# - Rename the executables to "vimd32.exe", "xxdd32.exe", "installd32.exe" and
+#   "uninstald32.exe".
+#
+# Win32s GUI version: (requires very old compiler)
+# - Set environment for Visual C++ 4.1 (requires a new console window):
+#   "vcvars32.bat" (use the path for VC 4.1 e:\msdev\bin)
+# - "nmake -f Make_mvc.mak GUI=yes INTL=no clean" (use the path for VC 4.1)
+# - "nmake -f Make_mvc.mak GUI=yes INTL=no" (use the path for VC 4.1)
+# - Rename "gvim.exe" to "gvim_w32s.exe".
+# - Rename "install.exe" to "installw32.exe"
+# - Rename "uninstal.exe" to "uninstalw32.exe"
+# - The produced uninstalw32.exe and vimrun.exe are used.
+#
+# OS/2: (requires an OS/2 system)
 # - Unpack the Unix archive.
 # - "make -f Make_os2.mak".
 # - Rename the executables to vimos2.exe, xxdos2.exe and teeos2.exe and copy
@@ -289,6 +313,8 @@ unixall: dist prepare
                $(LANG_SRC) \
                | (cd dist/$(VIMRTDIR); tar xf -)
 # Need to use a "distclean" config.mk file
+# Note: this file is not included in the repository to avoid problems, but it's
+# OK to put it in the archive.
        cp -f src/config.mk.dist dist/$(VIMRTDIR)/src/auto/config.mk
 # Create an empty config.h file, make dependencies require it
        touch dist/$(VIMRTDIR)/src/auto/config.h
@@ -444,7 +470,7 @@ runtime_unix2dos: dosrt_unix2dos
        cd dist/vim/$(VIMRTDIR); tar cf - * \
                | (cd ../../../runtime/dos; tar xf -)
 
-dosbin: prepare dosbin_gvim dosbin_w32 dosbin_d32 dosbin_ole $(DOSBIN_S) $(DOSBIN_D16)
+dosbin: prepare dosbin_gvim dosbin_w32 $(DOSBIN_D32) dosbin_ole $(DOSBIN_S) $(DOSBIN_D16)
 
 # make Win32 gvim
 dosbin_gvim: dist no_title.vim dist/$(COMMENT_GVIM)
index cf462db..c2fc2a9 100644 (file)
@@ -1,4 +1,4 @@
-README.txt for version 7.3 of Vim: Vi IMproved.
+README.txt for version 7.4 of Vim: Vi IMproved.
 
 
 WHAT IS VIM
@@ -97,10 +97,12 @@ The latest news about Vim can be found on the Vim home page:
 If you have problems, have a look at the Vim FAQ:
        http://vimdoc.sf.net/vimfaq.html
 
-Send bug reports to:
-       Bram Moolenaar <Bram@vim.org>
+If you still have problems or any other questions, use one of the mailing
+lists to discuss them with Vim users and developers:
+       http://www.vim.org/maillist.php
 
-There are several mailing lists for Vim, see http://www.vim.org/maillist.php.
+If nothing else works, report bugs directly:
+       Bram Moolenaar <Bram@vim.org>
 
 
 MAIN AUTHOR
index bfc5cc8..03cb6e2 100644 (file)
@@ -1,4 +1,4 @@
-README_ami.txt for version 7.3 of Vim: Vi IMproved.
+README_ami.txt for version 7.4 of Vim: Vi IMproved.
 
 This file explains the installation of Vim on Amiga systems.
 See README.txt for general information about Vim.
index b1ca624..fbf5ba4 100644 (file)
@@ -1,4 +1,4 @@
-README_amibin.txt for version 7.3 of Vim: Vi IMproved.
+README_amibin.txt for version 7.4 of Vim: Vi IMproved.
 
 See "README.txt" for general information about Vim.
 See "README_ami.txt" for installation instructions for the Amiga.
index 1a787fb..ddc58be 100644 (file)
@@ -1,4 +1,4 @@
-README_amisrc.txt for version 7.3 of Vim: Vi IMproved.
+README_amisrc.txt for version 7.4 of Vim: Vi IMproved.
 
 See "README.txt" for general information about Vim.
 See "README_ami.txt" for installation instructions for the Amiga.
index db49d50..03c7c19 100644 (file)
@@ -1,19 +1,16 @@
-README_bindos.txt for version 7.3 of Vim: Vi IMproved.
+README_bindos.txt for version 7.4 of Vim: Vi IMproved.
 
 See "README.txt" for general information about Vim.
 See "README_dos.txt" for installation instructions for MS-DOS and MS-Windows.
-These files are in the runtime archive (vim73rt.zip).
+These files are in the runtime archive (vim74rt.zip).
 
 
 There are several binary distributions of Vim for the PC.  You would normally
 pick only one of them, but it's also possible to install several.
 These ones are available (the version number may differ):
-       vim73d16.zip    16 bit DOS version
-       vim73d32.zip    32 bit DOS version
-       vim73w32.zip    Windows 95/98/NT/etc. console version
-       gvim73.zip      Windows 95/98/NT/etc. GUI version
-       gvim73ole.zip   Windows 95/98/NT/etc. GUI version with OLE
-       gvim73_s.zip    Windows 3.1 GUI version
+       vim74w32.zip    Windows 95/98/NT/etc. console version
+       gvim74.zip      Windows 95/98/NT/etc. GUI version
+       gvim74ole.zip   Windows 95/98/NT/etc. GUI version with OLE
 
-You MUST also get the runtime archive (vim73rt.zip).
-The sources are also available (vim73src.zip).
+You MUST also get the runtime archive (vim74rt.zip).
+The sources are also available (vim74src.zip).
index ca735f1..662a7e7 100644 (file)
@@ -1,4 +1,4 @@
-README_dos.txt for version 7.3 of Vim: Vi IMproved.
+README_dos.txt for version 7.4 of Vim: Vi IMproved.
 
 This file explains the installation of Vim on MS-DOS and MS-Windows systems.
 See "README.txt" for general information about Vim.
@@ -47,13 +47,13 @@ These are the normal steps to install Vim from the .zip archives:
    Binary and runtime Vim archives are normally unpacked in the same location,
    on top of each other.
 
-2. Unpack the zip archives.  This will create a new directory "vim\vim73",
+2. Unpack the zip archives.  This will create a new directory "vim\vim74",
    in which all the distributed Vim files are placed.  Since the directory
    name includes the version number, it is unlikely that you overwrite
    existing files.
    Examples:
-       pkunzip -d gvim73.zip
-       unzip vim73w32.zip
+       pkunzip -d gvim74.zip
+       unzip vim74w32.zip
 
    You need to unpack the runtime archive and at least one of the binary
    archives.  When using more than one binary version, be careful not to
@@ -69,7 +69,7 @@ These are the normal steps to install Vim from the .zip archives:
    archive and follow the instructions in the documentation.
 
 3. Change to the new directory:
-       cd vim\vim73
+       cd vim\vim74
    Run the "install.exe" program.  It will ask you a number of questions about
    how you would like to have your Vim setup.  Among these are:
    - You can tell it to write a "_vimrc" file with your preferences in the
@@ -80,8 +80,8 @@ These are the normal steps to install Vim from the .zip archives:
      console or in a shell.  You can select one of the directories in your
      $PATH.  If you skip this, you can add Vim to the search path manually:
      The simplest is to add a line to your autoexec.bat.  Examples:
-       set path=%path%;C:\vim\vim73
-       set path=%path%;D:\editors\vim\vim73
+       set path=%path%;C:\vim\vim74
+       set path=%path%;D:\editors\vim\vim74
    - Create entries for Vim on the desktop and in the Start menu.
 
 That's it!
@@ -93,8 +93,8 @@ Remarks:
   won't show a menubar.  Then you need to set the $VIM environment variable to
   point to the top directory of your Vim files.  Example:
     set VIM=C:\editors\vim
-  Vim version 7.3 will look for your vimrc file in $VIM, and for the runtime
-  files in $VIM/vim73.  See ":help $VIM" for more information.
+  Vim version 7.4 will look for your vimrc file in $VIM, and for the runtime
+  files in $VIM/vim74.  See ":help $VIM" for more information.
 
 - To avoid confusion between distributed files of different versions and your
   own modified vim scripts, it is recommended to use this directory layout:
@@ -105,14 +105,14 @@ Remarks:
        C:\vim\vimfiles\ftplugin\*.vim  Filetype plugins
        C:\vim\...                      Other files you made.
   Distributed files:
-       C:\vim\vim73\vim.exe            The Vim version 7.3 executable.
-       C:\vim\vim73\doc\*.txt          The version 7.3 documentation files.
-       C:\vim\vim73\bugreport.vim      A Vim version 7.3 script.
-       C:\vim\vim73\...                Other version 7.3 distributed files.
+       C:\vim\vim74\vim.exe            The Vim version 7.4 executable.
+       C:\vim\vim74\doc\*.txt          The version 7.4 documentation files.
+       C:\vim\vim74\bugreport.vim      A Vim version 7.4 script.
+       C:\vim\vim74\...                Other version 7.4 distributed files.
   In this case the $VIM environment variable would be set like this:
        set VIM=C:\vim
-  Then $VIMRUNTIME will automatically be set to "$VIM\vim73".  Don't add
-  "vim73" to $VIM, that won't work.
+  Then $VIMRUNTIME will automatically be set to "$VIM\vim74".  Don't add
+  "vim74" to $VIM, that won't work.
 
 - You can put your Vim executable anywhere else.  If the executable is not
   with the other Vim files, you should set $VIM. The simplest is to add a line
@@ -136,8 +136,8 @@ Remarks:
      Select Properties.
   5. In the Program tab, change the "Cmdline" to add "/c" and the name of the
      Vim executable.  Examples:
-       C:\command.com /c C:\vim\vim73\vim.exe
-       C:\command.com /c D:\editors\vim\vim73\vim.exe
+       C:\command.com /c C:\vim\vim74\vim.exe
+       C:\command.com /c D:\editors\vim\vim74\vim.exe
   6. Select the font, window size, etc. that you like.  If this isn't
      possible, select "Advanced" in the Program tab, and deselect "MS-DOS
      mode".
index 68eebef..e496912 100644 (file)
@@ -1,4 +1,4 @@
-README_extra.txt for version 7.3 of Vim: Vi IMproved.
+README_extra.txt for version 7.4 of Vim: Vi IMproved.
 
 These extra files of Vim are for special purposes.  This README explains what
 the files are for.  For general information about Vim, see the "README.txt"
@@ -13,9 +13,6 @@ src/if_sniff.*                Interface to SNiFF.  If you don't know what SNiFF is,
 
 src/os_amiga.*         Files for the Amiga port.
 
-src/gui_riscos.*
-src/os_riscos.*                Files for the RISC OS port.
-
 src/gui_beos.*
 src/os_beos.*          Files for the BeOS port.
 
index 4dcebf6..08888d9 100644 (file)
@@ -1,4 +1,4 @@
-README_mac.txt for version 7.3 of Vim: Vi IMproved.
+README_mac.txt for version 7.4 of Vim: Vi IMproved.
 
 This file explains the installation of Vim on Macintosh systems.
 See "README.txt" for general information about Vim.
index d7e70af..233c053 100644 (file)
@@ -1,4 +1,4 @@
-README_ole.txt for version 7.3 of Vim: Vi IMproved.
+README_ole.txt for version 7.4 of Vim: Vi IMproved.
 
 This archive contains gvim.exe with OLE interface and VisVim.
 This version of gvim.exe can also load a number of interface dynamically (you
index 866c7a0..5602706 100644 (file)
@@ -1,32 +1,32 @@
-README_os2.txt for version 7.3 of Vim: Vi IMproved.
+README_os2.txt for version 7.4 of Vim: Vi IMproved.
 
 This file explains the installation of Vim on OS/2 systems.
 See "README.txt" for general information about Vim.
 
 
 NOTE: You will need two archives:
-  vim73rt.zip  contains the runtime files (same as for the PC version)
-  vim73os2.zip contains the OS/2 executables
+  vim74rt.zip  contains the runtime files (same as for the PC version)
+  vim74os2.zip contains the OS/2 executables
 
 1. Go to the directory where you want to put the Vim files.  Examples:
        cd C:\
        cd D:\editors
 
-2. Unpack the zip archives.  This will create a new directory "vim/vim73",
+2. Unpack the zip archives.  This will create a new directory "vim/vim74",
    in which all the distributed Vim files are placed.  Since the directory
    name includes the version number, it is unlikely that you overwrite
    existing files.
    Examples:
-       pkunzip -d vim73os2.zip
-       unzip vim73os2.zip
+       pkunzip -d vim74os2.zip
+       unzip vim74os2.zip
 
    After you unpacked the files, you can still move the whole directory tree
    to another location.
 
 3. Add the directory where vim.exe is to your path.  The simplest is to add a
    line to your autoexec.bat.  Examples:
-       set path=%path%;C:\vim\vim73
-       set path=%path%;D:\editors\vim\vim73
+       set path=%path%;C:\vim\vim74
+       set path=%path%;D:\editors\vim\vim74
 
 That's it!
 
@@ -41,10 +41,10 @@ Extra remarks:
        C:\vim\_viminfo                 Dynamic info for 'viminfo'.
        C:\vim\...                      Other files you made.
   Distributed files:
-       C:\vim\vim73\vim.exe            The Vim version 7.3 executable.
-       C:\vim\vim73\doc\*.txt          The version 7.3 documentation files.
-       C:\vim\vim73\bugreport.vim      A Vim version 7.3 script.
-       C:\vim\vim73\...                Other version 7.3 distributed files.
+       C:\vim\vim74\vim.exe            The Vim version 7.4 executable.
+       C:\vim\vim74\doc\*.txt          The version 7.4 documentation files.
+       C:\vim\vim74\bugreport.vim      A Vim version 7.4 script.
+       C:\vim\vim74\...                Other version 7.4 distributed files.
   In this case the $VIM environment variable would be set like this:
        set VIM=C:\vim
 
index 17abc59..502b6f8 100644 (file)
@@ -1,4 +1,4 @@
-README_zOS.txt for version 7.3 of Vim: Vi IMproved.
+README_zOS.txt for version 7.4 of Vim: Vi IMproved.
 
 This readme explains how to build Vim on z/OS.  Formerly called OS/390.
 See "README.txt" for general information about Vim.
@@ -29,7 +29,7 @@ console version).
 Compiling:
 ==========
 
-Vim can be compiled with or without GUI support. For 7.3 only the compilation
+Vim can be compiled with or without GUI support. For 7.4 only the compilation
 without GUI was tested. Below is a section about compiling with X11 but this
 is from an earlier version of Vim.
 
@@ -78,7 +78,7 @@ Change to the vim directory and do:
 With X11:
 ---------
 
-WARNING: This instruction was not tested with Vim 7.3.
+WARNING: This instruction was not tested with Vim 7.4.
 
 There are two ways for building VIM with X11 support. The first way is simple
 and results in a big executable (~13 Mb), the second needs a few additional
index c2ccdc0..3af95f2 100644 (file)
@@ -1,10 +1,8 @@
-README_src.txt for version 7.3 of Vim: Vi IMproved.
+README_src.txt for version 7.4 of Vim: Vi IMproved.
 
 The source archive contains the files needed to compile Vim on Unix systems.
-It is packed for Unix systems (NL line separator).  It is also used for other
-systems in combination with the extra archive (vim-7.3-extra.tar.gz, in the
-"extra" directory of ftp.vim.org).
+It is packed for Unix systems (NL line separator).
 
 For more information, see the README.txt file that comes with the runtime
-archive (vim-7.3-rt.tar.gz).  To be able to run Vim you MUST get the runtime
+archive (vim-7.4-rt.tar.gz).  To be able to run Vim you MUST get the runtime
 archive too!
index 1ce563c..1b7cbcf 100644 (file)
@@ -1,8 +1,8 @@
-README_srcdos.txt for version 7.3 of Vim: Vi IMproved.
+README_srcdos.txt for version 7.4 of Vim: Vi IMproved.
 
 See "README.txt" for general information about Vim.
 See "README_dos.txt" for installation instructions for MS-DOS and MS-Windows.
-These files are in the runtime archive (vim73rt.zip).
+These files are in the runtime archive (vim74rt.zip).
 
 
 The DOS source archive contains the files needed to compile Vim on MS-DOS or
index 5c1e79b..7aff642 100644 (file)
@@ -1,4 +1,4 @@
-README_unix.txt for version 7.3 of Vim: Vi IMproved.
+README_unix.txt for version 7.4 of Vim: Vi IMproved.
 
 This file explains the installation of Vim on Unix systems.
 See "README.txt" for general information about Vim.
index 5acc92c..53364a1 100644 (file)
@@ -1,4 +1,4 @@
-README_vms.txt for version 7.3 of Vim: Vi IMproved.
+README_vms.txt for version 7.4 of Vim: Vi IMproved.
 
 This file explains the installation of Vim on VMS systems.
 See "README.txt" in the runtime archive for information about Vim.
index 3595b18..0b5d1ae 100644 (file)
@@ -1,4 +1,4 @@
-README_w32s.txt for version 7.3 of Vim: Vi IMproved.
+README_w32s.txt for version 7.4 of Vim: Vi IMproved.
 
 This archive contains the gvim.exe that was specifically compiled for use in
 the Win32s subsystem in MS-Windows 3.1 and 3.11.
index a2940eb..7b69e7d 100644 (file)
@@ -5,7 +5,7 @@
 # WARNING: if you make changes to this script, look out for $0 to be valid,
 # because uninstall deletes most files in $0.
 
-# Location of gvim_ole.exe, vimd32.exe, GvimExt/*, etc.
+# Location of gvim_ole.exe, vimw32.exe, GvimExt/*, etc.
 !define VIMSRC "..\src"
 
 # Location of runtime files
@@ -22,7 +22,7 @@
 !define HAVE_NLS
 
 !define VER_MAJOR 7
-!define VER_MINOR 3
+!define VER_MINOR 4
 
 # ----------- No configurable settings below this line -----------
 
@@ -40,7 +40,7 @@ RequestExecutionLevel highest
 ComponentText "This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer."
 DirText "Choose a directory to install Vim (must end in 'vim')"
 Icon icons\vim_16c.ico
-# NSIS2 uses a different strategy with six diferent images in a strip...
+# NSIS2 uses a different strategy with six different images in a strip...
 #EnabledBitmap icons\enabled.bmp
 #DisabledBitmap icons\disabled.bmp
 UninstallText "This will uninstall Vim ${VER_MAJOR}.${VER_MINOR} from your system."
@@ -56,6 +56,9 @@ LicenseData ${VIMRT}\doc\uganda.nsis.txt
   !packhdr temp.dat "upx --best --compress-icons=1 temp.dat"
 !endif
 
+SetCompressor /SOLID lzma
+XPStyle on
+
 # This adds '\vim' to the user choice automagically.  The actual value is
 # obtained below with ReadINIStr.
 InstallDir "$PROGRAMFILES\Vim"
@@ -247,11 +250,10 @@ Section "Vim console program (vim.exe)"
        ReadRegStr $R0 HKLM \
           "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
        IfErrors 0 lbl_winnt
-           # Windows 95/98/ME
-           File /oname=vim.exe ${VIMSRC}\vimd32.exe
+           # Windows 95/98/ME: not supported
            Goto lbl_done
        lbl_winnt:
-           # Windows NT/2000/XT
+           # Windows NT/2000/XP and later
            File /oname=vim.exe ${VIMSRC}\vimw32.exe
        lbl_done:
        StrCpy $2 "$2 vim view vimdiff"
index 8f525f4..1f8234a 100644 (file)
@@ -29,6 +29,8 @@
 if version < 700
    finish
 endif 
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Section: Constants {{{1
 "
@@ -619,6 +621,9 @@ lockvar  g:ada#Comment
 lockvar! g:ada#Keywords
 lockvar! g:ada#Ctags_Kinds
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
index 12fc92d..d5bfa07 100644 (file)
@@ -1,8 +1,10 @@
 " Vim completion script
 " Language:    C
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2010 Mar 23
+" Last Change: 2012 Jun 20
 
+let s:cpo_save = &cpo
+set cpo&vim
 
 " This function is used for the 'omnifunc' option.
 function! ccomplete#Complete(findstart, base)
@@ -498,7 +500,7 @@ function! s:StructMembers(typename, items, all)
   endif
   if !cached
     while 1
-      exe 'silent! ' . n . 'vimgrep /\t' . typename . '\(\t\|$\)/j ' . fnames
+      exe 'silent! keepj noautocmd ' . n . 'vimgrep /\t' . typename . '\(\t\|$\)/j ' . fnames
 
       let qflist = getqflist()
       if len(qflist) > 0 || match(typename, "::") < 0
@@ -603,3 +605,6 @@ function! s:SearchMembers(matches, items, all)
   endfor
   return res
 endfunc
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/autoload/clojurecomplete.vim b/runtime/autoload/clojurecomplete.vim
new file mode 100644 (file)
index 0000000..704ea07
--- /dev/null
@@ -0,0 +1,20 @@
+" Vim completion script
+" Language:     Clojure
+" Maintainer:   Sung Pae <self@sungpae.com>
+" URL:          https://github.com/guns/vim-clojure-static
+" License:      Same as Vim
+" Last Change:  05 February 2013
+
+" Special forms and public vars in clojure.core
+" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-002/vim_clojure_static.clj
+" Clojure 1.5.0-RC6
+let s:words = ["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-readably*","*read-eval*","*read-whitelist*","*source-path*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods",".","..","/","<","<=","=","==",">",">=","EMPTY-NODE","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc!","assoc","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","booleans","bound-fn","bound-fn*","bound?","butlast","byte","byte-array","bytes","case","cast","catch","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","concat","cond","cond->","cond->>","condp","conj!","conj","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","def","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj!","disj","dissoc!","dissoc","distinct","distinct?","do","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","doubles","drop","drop-last","drop-while","empty","empty?","ensure","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","finally","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","hash","hash-combine","hash-map","hash-set","identical?","identity","if","if-let","if-not","ifn?","import","in-ns","inc","inc'","init-proxy","instance?","int","int-array","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mod","monitor-enter","monitor-exit","munge","name","namespace","namespace-munge","neg?","new","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop!","pop","pop-thread-bindings","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","quot","quote","rand","rand-int","rand-nth","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","realized?","recur","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seque","sequence","sequential?","set!","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","slurp","some","some->","some->>","some-fn","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","symbol","symbol?","sync","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","throw","time","to-array","to-array-2d","trampoline","transient","tree-seq","true?","try","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","update-in","update-proxy","use","val","vals","var","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","when","when-first","when-let","when-not","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"]
+
+" Simple word completion omnifunc
+function! clojurecomplete#Complete(findstart, base)
+    if a:findstart
+        return searchpos('\<', 'bnW', line('.'))[1] - 1
+    else
+        return { 'words': filter(copy(s:words), 'v:val =~ "\\V\\^' . a:base . '"') }
+    endif
+endfunction
index 6e01976..6b74d37 100644 (file)
@@ -1,8 +1,8 @@
 " ---------------------------------------------------------------------
 " getscript.vim
-"  Author:     Charles E. Campbell, Jr.
-"  Date:       Dec 28, 2009
-"  Version:    32
+"  Author:     Charles E. Campbell
+"  Date:       Apr 17, 2013
+"  Version:    35
 "  Installing: :help glvs-install
 "  Usage:      :help glvs
 "
@@ -15,7 +15,7 @@
 if exists("g:loaded_getscript")
  finish
 endif
-let g:loaded_getscript= "v32"
+let g:loaded_getscript= "v35"
 if &cp
  echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
  finish
@@ -74,6 +74,11 @@ if !exists("g:GetLatestVimScripts_allowautoinstall")
  let g:GetLatestVimScripts_allowautoinstall= 1
 endif
 
+" set up default scriptaddr address
+if !exists("g:GetLatestVimScripts_scriptaddr")
+ let g:GetLatestVimScripts_scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='
+endif
+
 "" For debugging:
 "let g:GetLatestVimScripts_wget    = "echo"
 "let g:GetLatestVimScripts_options = "options"
@@ -314,7 +319,7 @@ fun! getscript#GetLatestVimScripts()
   if &mod
    silent! w!
   endif
-  q
+  q!
 
   " restore events and current directory
   exe "cd ".fnameescape(substitute(origdir,'\','/','ge'))
@@ -415,7 +420,7 @@ fun! s:GetOneScript(...)
   echo 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid
 
   " grab a copy of the plugin's vim.sourceforge.net webpage
-  let scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='.scriptid
+  let scriptaddr = g:GetLatestVimScripts_scriptaddr.scriptid
   let tmpfile    = tempname()
   let v:errmsg   = ""
 
@@ -519,6 +524,7 @@ fun! s:GetOneScript(...)
    " --------------------------------------------------------------------------
    " AutoInstall: only if doautoinstall has been requested by the plugin itself
    " --------------------------------------------------------------------------
+"   call Decho("checking if plugin requested autoinstall: doautoinstall=".doautoinstall)
    if doautoinstall
 "    call Decho(" ")
 "    call Decho("Autoinstall: getcwd<".getcwd()."> filereadable(".sname.")=".filereadable(sname))
@@ -526,7 +532,7 @@ fun! s:GetOneScript(...)
 "     call Decho("<".sname."> is readable")
 "     call Decho("exe silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall))
      exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall)
-     let curdir    = escape(substitute(getcwd(),'\','/','ge'),"|[]*'\" #")
+     let curdir    = fnameescape(substitute(getcwd(),'\','/','ge'))
      let installdir= curdir."/Installed"
      if !isdirectory(installdir)
       call mkdir(installdir)
@@ -549,25 +555,42 @@ fun! s:GetOneScript(...)
      " decompress
      if sname =~ '\.bz2$'
 "      call Decho("decompress: attempt to bunzip2 ".sname)
-      exe "silent !bunzip2 ".shellescape(sname)
+      exe "sil !bunzip2 ".shellescape(sname)
       let sname= substitute(sname,'\.bz2$','','')
 "      call Decho("decompress: new sname<".sname."> after bunzip2")
      elseif sname =~ '\.gz$'
 "      call Decho("decompress: attempt to gunzip ".sname)
-      exe "silent !gunzip ".shellescape(sname)
+      exe "sil !gunzip ".shellescape(sname)
       let sname= substitute(sname,'\.gz$','','')
 "      call Decho("decompress: new sname<".sname."> after gunzip")
+     elseif sname =~ '\.xz$'
+"      call Decho("decompress: attempt to unxz ".sname)
+      exe "sil !unxz ".shellescape(sname)
+      let sname= substitute(sname,'\.xz$','','')
+"      call Decho("decompress: new sname<".sname."> after unxz")
      else
 "      call Decho("no decompression needed")
      endif
      
-     " distribute archive(.zip, .tar, .vba) contents
+     " distribute archive(.zip, .tar, .vba, ...) contents
      if sname =~ '\.zip$'
 "      call Decho("dearchive: attempt to unzip ".sname)
       exe "silent !unzip -o ".shellescape(sname)
      elseif sname =~ '\.tar$'
 "      call Decho("dearchive: attempt to untar ".sname)
       exe "silent !tar -xvf ".shellescape(sname)
+     elseif sname =~ '\.tgz$'
+"      call Decho("dearchive: attempt to untar+gunzip ".sname)
+      exe "silent !tar -zxvf ".shellescape(sname)
+     elseif sname =~ '\.taz$'
+"      call Decho("dearchive: attempt to untar+uncompress ".sname)
+      exe "silent !tar -Zxvf ".shellescape(sname)
+     elseif sname =~ '\.tbz$'
+"      call Decho("dearchive: attempt to untar+bunzip2 ".sname)
+      exe "silent !tar -jxvf ".shellescape(sname)
+     elseif sname =~ '\.txz$'
+"      call Decho("dearchive: attempt to untar+xz ".sname)
+      exe "silent !tar -Jxvf ".shellescape(sname)
      elseif sname =~ '\.vba$'
 "      call Decho("dearchive: attempt to handle a vimball: ".sname)
       silent 1split
index 5420321..b2f1aee 100644 (file)
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:    HTML and XHTML
 " Maintainer:  Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change: 2006 Oct 19
+" Last Change: 2011 Apr 28
 
 function! htmlcomplete#CompleteTags(findstart, base)
   if a:findstart
@@ -285,6 +285,7 @@ function! htmlcomplete#CompleteTags(findstart, base)
                                let cssfiles = styletable + secimportfiles
                                let classes = []
                                for file in cssfiles
+                                       let classlines = []
                                        if filereadable(file)
                                                let stylesheet = readfile(file)
                                                let stylefile = join(stylesheet, ' ')
index 6d1c37f..b077bb7 100644 (file)
@@ -1,10 +1,10 @@
 " netrw.vim: Handles file transfer and remote directory listing across
 "            AUTOLOAD SECTION
-" Date:                Jul 27, 2010
-" Version:     140
-" Maintainer:  Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:                May 18, 2013
+" Version:     149
+" Maintainer:  Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2010 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
 if &cp || exists("g:loaded_netrw")
   finish
 endif
-let g:loaded_netrw = "v140"
-if v:version < 702
+let g:loaded_netrw = "v149"
+if v:version < 703 || (v:version == 703 && !has("patch465"))
  echohl WarningMsg
- echo "***warning*** this version of netrw needs vim 7.2"
+ echo "***warning*** this version of netrw needs vim 7.3.465 or later"
  echohl Normal
  finish
 endif
@@ -35,14 +35,8 @@ if !exists("s:NOTE")
  let s:ERROR   = 2
 endif
 
-" sanity checks
-if v:version < 700
- call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1)
- finish
-endif
-
 let s:keepcpo= &cpo
-setlocal cpo&vim
+set cpo&vim
 "DechoTabOn
 "call Decho("doing autoload/netrw.vim version ".g:loaded_netrw)
 
@@ -51,12 +45,95 @@ setlocal cpo&vim
 " ======================
 
 " ---------------------------------------------------------------------
+" netrw#ErrorMsg: {{{2
+"   0=note     = s:NOTE
+"   1=warning  = s:WARNING
+"   2=error    = s:ERROR
+"  May 01, 2013 : max errnum currently is 93
+fun! netrw#ErrorMsg(level,msg,errnum)
+"  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
+
+  if a:level < g:netrw_errorlvl
+"   call Dret("netrw#ErrorMsg : suppressing level=".a:level." since g:netrw_errorlvl=".g:netrw_errorlvl)
+   return
+  endif
+
+  if a:level == 1
+   let level= "**warning** (netrw) "
+  elseif a:level == 2
+   let level= "**error** (netrw) "
+  else
+   let level= "**note** (netrw) "
+  endif
+"  call Decho("level=".level)
+
+  if g:netrw_use_errorwindow
+   " (default) netrw creates a one-line window to show error/warning
+   " messages (reliably displayed)
+
+   " record current window number for NetrwRestorePosn()'s benefit
+   let s:winBeforeErr= winnr()
+"   call Decho("s:winBeforeErr=".s:winBeforeErr)
+
+   " getting messages out reliably is just plain difficult!
+   " This attempt splits the current window, creating a one line window.
+   if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
+"    call Decho("write to NetrwMessage buffer")
+    exe bufwinnr("NetrwMessage")."wincmd w"
+"    call Decho("setl ma noro")
+    setl ma noro
+    keepj call setline(line("$")+1,level.a:msg)
+    keepj $
+   else
+"    call Decho("create a NetrwMessage buffer window")
+    bo 1split
+    sil! call s:NetrwEnew()
+    sil! keepj call s:NetrwSafeOptions()
+    setl bt=nofile
+    keepj file NetrwMessage
+"    call Decho("setl ma noro")
+    setl ma noro
+    call setline(line("$"),level.a:msg)
+   endif
+"   call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr())
+   if &fo !~ '[ta]'
+    syn clear
+    syn match netrwMesgNote    "^\*\*note\*\*"
+    syn match netrwMesgWarning "^\*\*warning\*\*"
+    syn match netrwMesgError   "^\*\*error\*\*"
+    hi link netrwMesgWarning WarningMsg
+    hi link netrwMesgError   Error
+   endif
+"   call Decho("(ErrorMsg) setl noma ro bh=wipe")
+   setl noma ro bh=wipe
+
+  else
+   " (optional) netrw will show messages using echomsg.  Even if the
+   " message doesn't appear, at least it'll be recallable via :messages
+"   redraw!
+   if a:level == s:WARNING
+    echohl WarningMsg
+   elseif a:level == s:ERROR
+    echohl Error
+   endif
+   echomsg level.a:msg
+"   call Decho("echomsg ***netrw*** ".a:msg)
+   echohl None
+  endif
+
+"  call Dret("netrw#ErrorMsg")
+endfun
+
+" ---------------------------------------------------------------------
 " NetrwInit: initializes variables if they haven't been defined {{{2
 "            Loosely,  varname = value.
 fun s:NetrwInit(varname,value)
+" call Decho("varname<".a:varname."> value=".a:value)
   if !exists(a:varname)
    if type(a:value) == 0
     exe "let ".a:varname."=".a:value
+   elseif type(a:value) == 1 && a:value =~ '^[{[]'
+    exe "let ".a:varname."=".a:value
    elseif type(a:value) == 1
     exe "let ".a:varname."="."'".a:value."'"
    else
@@ -78,6 +155,8 @@ endif
 
 " ---------------------------------------------------------------------
 " Default values for netrw's global protocol variables {{{2
+call s:NetrwInit("g:netrw_use_errorwindow",1)
+
 if !exists("g:netrw_dav_cmd")
  if executable("cadaver")
   let g:netrw_dav_cmd  = "cadaver"
@@ -97,6 +176,10 @@ endif
 if !exists("g:netrw_ftp_cmd")
   let g:netrw_ftp_cmd  = "ftp"
 endif
+let s:netrw_ftp_cmd= g:netrw_ftp_cmd
+if !exists("g:netrw_ftp_options")
+ let g:netrw_ftp_options= "-i -n"
+endif
 if !exists("g:netrw_http_cmd")
  if executable("elinks")
   let g:netrw_http_cmd = "elinks"
@@ -119,7 +202,20 @@ if !exists("g:netrw_http_cmd")
 endif
 call s:NetrwInit("g:netrw_rcp_cmd"  , "rcp")
 call s:NetrwInit("g:netrw_rsync_cmd", "rsync")
-call s:NetrwInit("g:netrw_scp_cmd"  , "scp -q")
+if !exists("g:netrw_scp_cmd")
+ if executable("scp")
+  call s:NetrwInit("g:netrw_scp_cmd" , "scp -q")
+ elseif executable("pscp")
+  if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable('c:\private.ppk')
+   call s:NetrwInit("g:netrw_scp_cmd", 'pscp -i c:\private.ppk')
+  else
+   call s:NetrwInit("g:netrw_scp_cmd", 'pscp -q')
+  endif
+ else
+  call s:NetrwInit("g:netrw_scp_cmd" , "scp -q")
+ endif
+endif
+
 call s:NetrwInit("g:netrw_sftp_cmd" , "sftp")
 call s:NetrwInit("g:netrw_ssh_cmd"  , "ssh")
 
@@ -139,7 +235,7 @@ endif
 " Cygwin Detection ------- {{{3
 if !exists("g:netrw_cygwin")
  if has("win32") || has("win95") || has("win64") || has("win16")
-  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
+  if  has("win32unix") && &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
    let g:netrw_cygwin= 1
   else
    let g:netrw_cygwin= 0
@@ -157,15 +253,19 @@ call s:NetrwInit("g:netrw_bufsettings" , "noma nomod nonu nobl nowrap ro")
 call s:NetrwInit("g:netrw_chgwin"      , -1)
 call s:NetrwInit("g:netrw_compress"    , "gzip")
 call s:NetrwInit("g:netrw_ctags"       , "ctags")
-if !exists("g:netrw_cursorline")
- let g:netrw_cursorline= 1
- let s:netrw_usercul   = &cursorline
- let s:netrw_usercuc   = &cursorcolumn
+if exists("g:netrw_cursorline") && !exists("g:netrw_cursor")
+ call netrw#ErrorMsg(s:NOTE,'g:netrw_cursorline is deprecated; use g:netrw_cursor instead',77)
+ let g:netrw_cursor= g:netrw_cursorline
 endif
+call s:NetrwInit("g:netrw_cursor"      , 2)
+let s:netrw_usercul = &cursorline
+let s:netrw_usercuc = &cursorcolumn
 " Default values - d-g ---------- {{{3
+call s:NetrwInit("s:didstarstar",0)
 call s:NetrwInit("g:netrw_dirhist_cnt"      , 0)
 call s:NetrwInit("g:netrw_decompress"       , '{ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf", ".xz" : "unxz" }')
 call s:NetrwInit("g:netrw_dirhistmax"       , 10)
+call s:NetrwInit("g:netrw_errorlvl"  , s:NOTE)
 call s:NetrwInit("g:netrw_fastbrowse"       , 1)
 call s:NetrwInit("g:netrw_ftp_browse_reject", '^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$')
 if !exists("g:netrw_ftp_list_cmd")
@@ -191,28 +291,39 @@ if !exists("g:netrw_ignorenetrc")
 endif
 call s:NetrwInit("g:netrw_keepdir",1)
 if !exists("g:netrw_list_cmd")
+
  if g:netrw_scp_cmd =~ '^pscp' && executable("pscp")
-  " provide a 'pscp' listing command
   if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable("c:\\private.ppk")
+   " provide a pscp-based listing command
    let g:netrw_scp_cmd ="pscp -i C:\\private.ppk"
   endif
   let g:netrw_list_cmd= g:netrw_scp_cmd." -ls USEPORT HOSTNAME:"
+
  elseif executable(g:netrw_ssh_cmd)
-  " provide a default listing command
+  " provide a scp-based default listing command
   let g:netrw_list_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME ls -FLa"
+
  else
 "  call Decho(g:netrw_ssh_cmd." is not executable")
   let g:netrw_list_cmd= ""
  endif
+
 endif
 call s:NetrwInit("g:netrw_list_hide","")
 " Default values - lh-lz ---------- {{{3
+if exists("g:netrw_local_copycmd")
+ let g:netrw_localcopycmd= g:netrw_local_copycmd
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_copycmd is deprecated in favor of g:netrw_localcopycmd",84)
+endif
+if !exists("g:netrw_localcmdshell")
+ let g:netrw_localcmdshell= ""
+endif
 if !exists("g:netrw_localcopycmd")
  if has("win32") || has("win95") || has("win64") || has("win16")
   if g:netrw_cygwin
    let g:netrw_localcopycmd= "cp"
   else
-   let g:netrw_localcopycmd= "copy"
+   let g:netrw_localcopycmd= "cmd /c copy"
   endif
  elseif has("unix") || has("macunix")
   let g:netrw_localcopycmd= "cp"
@@ -220,13 +331,22 @@ if !exists("g:netrw_localcopycmd")
   let g:netrw_localcopycmd= ""
  endif
 endif
-call s:NetrwInit("g:netrw_local_mkdir","mkdir")
+if exists("g:netrw_local_mkdir")
+ let g:netrw_localmkdir= g:netrw_local_mkdir
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_mkdir is deprecated in favor of g:netrw_localmkdir",87)
+endif
+call s:NetrwInit("g:netrw_localmkdir","mkdir")
+call s:NetrwInit("g:netrw_remote_mkdir","mkdir")
+if exists("g:netrw_local_movecmd")
+ let g:netrw_localmovecmd= g:netrw_local_movecmd
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_movecmd is deprecated in favor of g:netrw_localmovecmd",88)
+endif
 if !exists("g:netrw_localmovecmd")
  if has("win32") || has("win95") || has("win64") || has("win16")
   if g:netrw_cygwin
    let g:netrw_localmovecmd= "mv"
   else
-   let g:netrw_localmovecmd= "move"
+   let g:netrw_localmovecmd= "cmd /c move"
   endif
  elseif has("unix") || has("macunix")
   let g:netrw_localmovecmd= "mv"
@@ -234,7 +354,11 @@ if !exists("g:netrw_localmovecmd")
   let g:netrw_localmovecmd= ""
  endif
 endif
-call s:NetrwInit("g:netrw_local_rmdir", "rmdir")
+call s:NetrwInit("g:netrw_localrmdir", "rmdir")
+if exists("g:netrw_local_rmdir")
+ let g:netrw_localrmdir= g:netrw_local_rmdir
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_rmdir is deprecated in favor of g:netrw_localrmdir",86)
+endif
 call s:NetrwInit("g:netrw_liststyle"  , s:THINLIST)
 " sanity checks
 if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST
@@ -248,7 +372,7 @@ call s:NetrwInit("g:netrw_markfileesc"   , '*./[\~')
 call s:NetrwInit("g:netrw_maxfilenamelen", 32)
 call s:NetrwInit("g:netrw_menu"          , 1)
 call s:NetrwInit("g:netrw_mkdir_cmd"     , g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir")
-call s:NetrwInit("g:netrw_mousemaps"     , (exists("&mouse") && &mouse =~ '[anh]'))
+call s:NetrwInit("g:netrw_mousemaps"     , (exists("+mouse") && &mouse =~ '[anh]'))
 call s:NetrwInit("g:netrw_retmap"        , 0)
 if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
  call s:NetrwInit("g:netrw_chgperm"       , "chmod PERM FILENAME")
@@ -267,13 +391,13 @@ call s:NetrwInit("g:netrw_rmf_cmd"       , g:netrw_ssh_cmd." USEPORT HOSTNAME rm
 " Default values - s ---------- {{{3
 " g:netrw_sepchr: picking a character that doesn't appear in filenames that can be used to separate priority from filename
 call s:NetrwInit("g:netrw_sepchr"        , (&enc == "euc-jp")? "\<Char-0x01>" : "\<Char-0xff>")
-call s:NetrwInit("s:netrw_silentxfer"    , (exists("g:netrw_silent") && g:netrw_silent != 0)? "silent keepj " : "keepj ")
+call s:NetrwInit("s:netrw_silentxfer"    , (exists("g:netrw_silent") && g:netrw_silent != 0)? "sil keepj " : "keepj ")
 call s:NetrwInit("g:netrw_sort_by"       , "name") " alternatives: date                                      , size
 call s:NetrwInit("g:netrw_sort_options"  , "")
 call s:NetrwInit("g:netrw_sort_direction", "normal") " alternative: reverse  (z y x ...)
 if !exists("g:netrw_sort_sequence")
  if has("unix")
-  let g:netrw_sort_sequence= '[\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
+  let g:netrw_sort_sequence= '[\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
  else
   let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
  endif
@@ -283,20 +407,31 @@ call s:NetrwInit("g:netrw_ssh_browse_reject", '^total\s\+\d\+$')
 call s:NetrwInit("g:netrw_use_noswf"        , 0)
 " Default values - t-w ---------- {{{3
 call s:NetrwInit("g:netrw_timefmt","%c")
-call s:NetrwInit("g:netrw_xstrlen",0)
+if !exists("g:netrw_xstrlen")
+ if exists("g:Align_xstrlen")
+  let g:netrw_xstrlen= g:Align_xstrlen
+ elseif exists("g:drawit_xstrlen")
+  let g:netrw_xstrlen= g:drawit_xstrlen
+ elseif &enc == "latin1" || !has("multi_byte")
+  let g:netrw_xstrlen= 0
+ else
+  let g:netrw_xstrlen= 1
+ endif
+endif
 call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.")
-call s:NetrwInit("g:netrw_use_errorwindow",1)
 call s:NetrwInit("g:netrw_win95ftp",1)
-call s:NetrwInit("g:netrw_winsize",25)
+call s:NetrwInit("g:netrw_winsize",50)
+if g:netrw_winsize ==  0|let g:netrw_winsize=  -1|endif
+if g:netrw_winsize > 100|let g:netrw_winsize= 100|endif
 " ---------------------------------------------------------------------
 " Default values for netrw's script variables: {{{2
 call s:NetrwInit("g:netrw_fname_escape",' ?&;%')
 if has("win32") || has("win95") || has("win64") || has("win16")
- call s:NetrwInit("g:netrw_glob_escape",'[]*?`{$')
+ call s:NetrwInit("g:netrw_glob_escape",'*?`{[]$')
 else
- call s:NetrwInit("g:netrw_glob_escape",'[]*?`{~$\')
+ call s:NetrwInit("g:netrw_glob_escape",'*[]?`{~$\')
 endif
-call s:NetrwInit("g:netrw_menu_escape",'./&? \')
+call s:NetrwInit("g:netrw_menu_escape",'.&? \')
 call s:NetrwInit("g:netrw_tmpfile_escape",' &;')
 call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"")
 
@@ -305,84 +440,152 @@ call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"")
 "  files read by network transfer aren't appropriately highlighted.
 "let g:decho_bufenter = 1      "Decho
 
+" ======================
+"  Netrw Initialization: {{{1
+" ======================
+if v:version >= 700 && has("balloon_eval") && !exists("s:initbeval") && !exists("g:netrw_nobeval") && has("syntax") && exists("g:syntax_on")
+ let s:initbeval = &beval
+" let s:initbexpr = &l:bexpr
+ let &l:bexpr    = "netrw#NetrwBalloonHelp()"
+ set beval
+ au BufWinEnter,WinEnter *     if &ft == "netrw"|set beval|else|let &beval= s:initbeval|endif
+endif
+au WinEnter *  if &ft == "netrw"|call s:NetrwInsureWinVars()|endif
+
 " ==============================
 "  Netrw Utility Functions: {{{1
 " ==============================
 
+" ---------------------------------------------------------------------
+" netrw#NetrwBalloonHelp: {{{2
+if v:version >= 700 && has("balloon_eval") && &beval == 1 && has("syntax") && exists("g:syntax_on")
+  fun! netrw#NetrwBalloonHelp()
+    if !exists("w:netrw_bannercnt") || v:beval_lnum >= w:netrw_bannercnt || (exists("g:netrw_nobeval") && g:netrw_nobeval)
+     let mesg= ""
+    elseif     v:beval_text == "Netrw" || v:beval_text == "Directory" || v:beval_text == "Listing"
+     let mesg = "i: thin-long-wide-tree  gh: quick hide/unhide of dot-files   qf: quick file info  %:open new file"
+    elseif     getline(v:beval_lnum) =~ '^"\s*/'
+     let mesg = "<cr>: edit/enter   o: edit/enter in horiz window   t: edit/enter in new tab   v:edit/enter in vert window"
+    elseif     v:beval_text == "Sorted" || v:beval_text == "by"
+     let mesg = 's: sort by name, time, or file size   r: reverse sorting order   mt: mark target'
+    elseif v:beval_text == "Sort"   || v:beval_text == "sequence"
+     let mesg = "S: edit sorting sequence"
+    elseif v:beval_text == "Hiding" || v:beval_text == "Showing"
+     let mesg = "a: hiding-showing-all   ctrl-h: editing hiding list   mh: hide/show by suffix"
+    elseif v:beval_text == "Quick" || v:beval_text == "Help"
+     let mesg = "Help: press <F1>"
+    elseif v:beval_text == "Copy/Move" || v:beval_text == "Tgt"
+     let mesg = "mt: mark target   mc: copy marked file to target   mm: move marked file to target"
+    else
+     let mesg= ""
+    endif
+    return mesg
+  endfun
+endif
+
 " ------------------------------------------------------------------------
-" s:NetrwOptionSave: save options and set to "standard" form {{{2
+" s:NetrwOptionSave: save options prior to setting to "netrw-buffer-standard" form {{{2
 "  06/08/07 : removed call to NetrwSafeOptions(), either placed
 "             immediately after NetrwOptionSave() calls in NetRead
 "             and NetWrite, or after the s:NetrwEnew() call in
 "             NetrwBrowse.
 "             vt: normally its "w:" or "s:" (a variable type)
 fun! s:NetrwOptionSave(vt)
-"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$"))
-
+"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$")." mod=".&mod." ma=".&ma)
 "  call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist"))
+
   if !exists("{a:vt}netrw_optionsave")
    let {a:vt}netrw_optionsave= 1
   else
 "   call Dret("s:NetrwOptionSave : options already saved")
    return
   endif
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff)
+"  call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff)
 
   " Save current settings and current directory
+"  call Decho("saving current settings and current directory")
   let s:yykeep          = @@
-  if exists("&l:acd")
-   let {a:vt}netrw_acdkeep  = &l:acd
-  endif
+  if exists("&l:acd")|let {a:vt}netrw_acdkeep  = &l:acd|endif
   let {a:vt}netrw_aikeep    = &l:ai
   let {a:vt}netrw_awkeep    = &l:aw
+  let {a:vt}netrw_bhkeep    = &l:bh
+  let {a:vt}netrw_blkeep    = &l:bl
+  let {a:vt}netrw_btkeep    = &l:bt
   let {a:vt}netrw_bombkeep  = &l:bomb
+  let {a:vt}netrw_cedit     = &cedit
   let {a:vt}netrw_cikeep    = &l:ci
   let {a:vt}netrw_cinkeep   = &l:cin
   let {a:vt}netrw_cinokeep  = &l:cino
   let {a:vt}netrw_comkeep   = &l:com
   let {a:vt}netrw_cpokeep   = &l:cpo
   let {a:vt}netrw_diffkeep  = &l:diff
-  if g:netrw_keepdir
-   let {a:vt}netrw_dirkeep  = getcwd()
-  endif
+  let {a:vt}netrw_fenkeep   = &l:fen
+  let {a:vt}netrw_ffkeep    = &l:ff
   let {a:vt}netrw_fokeep    = &l:fo           " formatoptions
   let {a:vt}netrw_gdkeep    = &l:gd           " gdefault
   let {a:vt}netrw_hidkeep   = &l:hidden
   let {a:vt}netrw_imkeep    = &l:im
+  let {a:vt}netrw_iskkeep   = &l:isk
+  let {a:vt}netrw_lskeep    = &l:ls
+  let {a:vt}netrw_makeep    = &l:ma
   let {a:vt}netrw_magickeep = &l:magic
+  let {a:vt}netrw_modkeep   = &l:mod
+  let {a:vt}netrw_nukeep    = &l:nu
   let {a:vt}netrw_repkeep   = &l:report
+  let {a:vt}netrw_rokeep    = &l:ro
   let {a:vt}netrw_selkeep   = &l:sel
   let {a:vt}netrw_spellkeep = &l:spell
+  let {a:vt}netrw_tskeep    = &l:ts
   let {a:vt}netrw_twkeep    = &l:tw           " textwidth
   let {a:vt}netrw_wigkeep   = &l:wig          " wildignore
+  let {a:vt}netrw_wrapkeep  = &l:wrap
+  let {a:vt}netrw_writekeep = &l:write
+  if g:netrw_use_noswf && has("win32") && !has("win95")
+   let {a:vt}netrw_swfkeep   = &l:swf
+  endif
+
+  " save a few selected netrw-related variables
+"  call Decho("saving a few selected netrw-related variables")
+  if g:netrw_keepdir
+   let {a:vt}netrw_dirkeep  = getcwd()
+  endif
   if has("win32") && !has("win95")
    let {a:vt}netrw_swfkeep  = &l:swf          " swapfile
   endif
-  if &go =~ 'a' | silent! let {a:vt}netrw_regstar = @* | endif
-  silent! let {a:vt}netrw_regslash= @/
+  if &go =~# 'a' | sil! let {a:vt}netrw_regstar = @* | endif
+  sil! let {a:vt}netrw_regslash= @/
 
-"  call Dret("s:NetrwOptionSave : win#".winnr()." buf#".bufnr("%"))
+"  call Dret("s:NetrwOptionSave : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 endfun
 
 " ------------------------------------------------------------------------
 " s:NetrwOptionRestore: restore options {{{2
 fun! s:NetrwOptionRestore(vt)
-"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")." winnr($)=".winnr("$"))
+"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$"))
   if !exists("{a:vt}netrw_optionsave")
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+   if exists("s:nbcd_curpos_{bufnr('%')}")
+"    call Decho("(NetrwOptionRestore) restoring previous position  (s:nbcd_curpos_".bufnr('%')." exists)")
+    keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
+"    call Decho("(NetrwOptionRestore) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$"))
+"    call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%'))
+    unlet s:nbcd_curpos_{bufnr('%')}
+   else
+"    call Decho("(NetrwOptionRestore) no previous position")
+   endif
+"   call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 "   call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist")
    return
   endif
   unlet {a:vt}netrw_optionsave
 
-  if exists("&acd")
+  if exists("+acd")
    if exists("{a:vt}netrw_acdkeep")
-"    call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+"    call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
     let curdir = getcwd()
     let &l:acd = {a:vt}netrw_acdkeep
     unlet {a:vt}netrw_acdkeep
     if &l:acd
-"     call Decho("exe keepjumps lcd ".fnameescape(curdir))  " NOTE: was g:netrw_fname_escape for some reason
+"     call Decho("exe keepj lcd ".fnameescape(curdir))  " NOTE: was g:netrw_fname_escape for some reason
      try
       if !exists("&l:acd") && !&l:acd
        exe 'keepj lcd '.fnameescape(curdir)
@@ -395,27 +598,41 @@ fun! s:NetrwOptionRestore(vt)
   endif
   if exists("{a:vt}netrw_aikeep")   |let &l:ai     = {a:vt}netrw_aikeep      |unlet {a:vt}netrw_aikeep   |endif
   if exists("{a:vt}netrw_awkeep")   |let &l:aw     = {a:vt}netrw_awkeep      |unlet {a:vt}netrw_awkeep   |endif
+  if g:netrw_liststyle != s:TREELIST
+   if exists("{a:vt}netrw_bhkeep")  |let &l:bh     = {a:vt}netrw_bhkeep      |unlet {a:vt}netrw_bhkeep   |endif
+  endif
+  if exists("{a:vt}netrw_blkeep")   |let &l:bl     = {a:vt}netrw_blkeep      |unlet {a:vt}netrw_blkeep   |endif
+  if exists("{a:vt}netrw_btkeep")   |let &l:bt     = {a:vt}netrw_btkeep      |unlet {a:vt}netrw_btkeep   |endif
   if exists("{a:vt}netrw_bombkeep") |let &l:bomb   = {a:vt}netrw_bombkeep    |unlet {a:vt}netrw_bombkeep |endif
+  if exists("{a:vt}netrw_cedit")    |let &cedit    = {a:vt}netrw_cedit       |unlet {a:vt}netrw_cedit    |endif
   if exists("{a:vt}netrw_cikeep")   |let &l:ci     = {a:vt}netrw_cikeep      |unlet {a:vt}netrw_cikeep   |endif
   if exists("{a:vt}netrw_cinkeep")  |let &l:cin    = {a:vt}netrw_cinkeep     |unlet {a:vt}netrw_cinkeep  |endif
   if exists("{a:vt}netrw_cinokeep") |let &l:cino   = {a:vt}netrw_cinokeep    |unlet {a:vt}netrw_cinokeep |endif
   if exists("{a:vt}netrw_comkeep")  |let &l:com    = {a:vt}netrw_comkeep     |unlet {a:vt}netrw_comkeep  |endif
   if exists("{a:vt}netrw_cpokeep")  |let &l:cpo    = {a:vt}netrw_cpokeep     |unlet {a:vt}netrw_cpokeep  |endif
   if exists("{a:vt}netrw_diffkeep") |let &l:diff   = {a:vt}netrw_diffkeep    |unlet {a:vt}netrw_diffkeep |endif
-  if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir
-   let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g')
-   if exists("{a:vt}netrw_dirkeep")  |exe "keepjumps lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep  |endif
-  endif
+  if exists("{a:vt}netrw_fenkeep")  |let &l:fen    = {a:vt}netrw_fenkeep     |unlet {a:vt}netrw_fenkeep  |endif
+  if exists("{a:vt}netrw_ffkeep")   |let &l:ff     = {a:vt}netrw_ffkeep      |unlet {a:vt}netrw_ffkeep   |endif
   if exists("{a:vt}netrw_fokeep")   |let &l:fo     = {a:vt}netrw_fokeep      |unlet {a:vt}netrw_fokeep   |endif
   if exists("{a:vt}netrw_gdkeep")   |let &l:gd     = {a:vt}netrw_gdkeep      |unlet {a:vt}netrw_gdkeep   |endif
   if exists("{a:vt}netrw_hidkeep")  |let &l:hidden = {a:vt}netrw_hidkeep     |unlet {a:vt}netrw_hidkeep  |endif
   if exists("{a:vt}netrw_imkeep")   |let &l:im     = {a:vt}netrw_imkeep      |unlet {a:vt}netrw_imkeep   |endif
-  if exists("{a:vt}netrw_magic")    |let &l:magic  = {a:vt}netrw_magic       |unlet {a:vt}netrw_magic    |endif
+  if exists("{a:vt}netrw_iskkeep")  |let &l:isk    = {a:vt}netrw_iskkeep     |unlet {a:vt}netrw_iskkeep  |endif
+  if exists("{a:vt}netrw_lskeep")   |let &l:ls     = {a:vt}netrw_lskeep      |unlet {a:vt}netrw_lskeep   |endif
+  if exists("{a:vt}netrw_makeep")   |let &l:ma     = {a:vt}netrw_makeep      |unlet {a:vt}netrw_makeep   |endif
+  if exists("{a:vt}netrw_magickeep")|let &l:magic  = {a:vt}netrw_magickeep   |unlet {a:vt}netrw_magickeep|endif
+  if exists("{a:vt}netrw_modkeep")  |let &l:mod    = {a:vt}netrw_modkeep     |unlet {a:vt}netrw_modkeep  |endif
+  if exists("{a:vt}netrw_nukeep")   |let &l:nu     = {a:vt}netrw_nukeep      |unlet {a:vt}netrw_nukeep   |endif
   if exists("{a:vt}netrw_repkeep")  |let &l:report = {a:vt}netrw_repkeep     |unlet {a:vt}netrw_repkeep  |endif
+  if exists("{a:vt}netrw_rokeep")   |let &l:ro     = {a:vt}netrw_rokeep      |unlet {a:vt}netrw_rokeep   |endif
   if exists("{a:vt}netrw_selkeep")  |let &l:sel    = {a:vt}netrw_selkeep     |unlet {a:vt}netrw_selkeep  |endif
   if exists("{a:vt}netrw_spellkeep")|let &l:spell  = {a:vt}netrw_spellkeep   |unlet {a:vt}netrw_spellkeep|endif
+  " Problem: start with liststyle=0; press <i> : result, following line resets l:ts.
+"  if exists("{a:vt}netrw_tskeep")   |let &l:ts     = {a:vt}netrw_tskeep      |unlet {a:vt}netrw_tskeep   |endif
   if exists("{a:vt}netrw_twkeep")   |let &l:tw     = {a:vt}netrw_twkeep      |unlet {a:vt}netrw_twkeep   |endif
   if exists("{a:vt}netrw_wigkeep")  |let &l:wig    = {a:vt}netrw_wigkeep     |unlet {a:vt}netrw_wigkeep  |endif
+  if exists("{a:vt}netrw_wrapkeep") |let &l:wrap   = {a:vt}netrw_wrapkeep    |unlet {a:vt}netrw_wrapkeep |endif
+  if exists("{a:vt}netrw_writekeep")|let &l:write  = {a:vt}netrw_writekeep   |unlet {a:vt}netrw_writekeep|endif
   if exists("s:yykeep")             |let  @@       = s:yykeep                |unlet s:yykeep             |endif
   if exists("{a:vt}netrw_swfkeep")
    if &directory == ""
@@ -423,3512 +640,4201 @@ fun! s:NetrwOptionRestore(vt)
     " netrw will temporarily set the swapfile directory
     " to the current directory as returned by getcwd().
     let &l:directory   = getcwd()
-    silent! let &l:swf = {a:vt}netrw_swfkeep
-    setlocal directory=
+    sil! let &l:swf = {a:vt}netrw_swfkeep
+    setl directory=
     unlet {a:vt}netrw_swfkeep
    elseif &l:swf != {a:vt}netrw_swfkeep
     " following line causes a Press ENTER in windows -- can't seem to work around it!!!
-    silent! let &l:swf= {a:vt}netrw_swfkeep
+    sil! let &l:swf= {a:vt}netrw_swfkeep
     unlet {a:vt}netrw_swfkeep
    endif
   endif
-  if exists("{a:vt}netrw_regstar") |silent! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif
-  if exists("{a:vt}netrw_regslash")|silent! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif
-
-"  call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"  call Decho("diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist"))
-"  call Dret("s:NetrwOptionRestore : win#".winnr()." buf#".bufnr("%"))
+  if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir
+   let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g')
+   if exists("{a:vt}netrw_dirkeep")  |exe "keepj lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep  |endif
+  endif
+  if exists("{a:vt}netrw_regstar") |sil! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif
+  if exists("{a:vt}netrw_regslash")|sil! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif
+  if exists("s:nbcd_curpos_{bufnr('%')}")
+"   call Decho("(NetrwOptionRestore) restoring previous position  (s:nbcd_curpos_".bufnr('%')." exists)")
+   keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
+"   call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%'))
+   unlet s:nbcd_curpos_{bufnr('%')}
+  else
+"   call Decho("no previous position")
+  endif
+
+"  call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+"  call Decho("(NetrwOptionRestore) fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist"))
+"  call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"  call Decho("(NetrwOptionRestore) diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist"))
+"  call Decho("(NetrwOptionRestore) ts=".&l:ts)
+  " Moved the filetype detect here from NetrwGetFile() because remote files
+  " were having their filetype detect-generated settings overwritten by
+  " NetrwOptionRestore.
+  if &ft != "netrw"
+"   call Decho("(NetrwOptionRestore) filetype detect  (ft=".&ft.")")
+   filetype detect
+  endif
+"  call Dret("s:NetrwOptionRestore : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 endfun
 
 " ---------------------------------------------------------------------
 " s:NetrwSafeOptions: sets options to help netrw do its job {{{2
+"                     Use  s:NetrwSaveOptions() to save user settings
+"                     Use  s:NetrwOptionRestore() to restore user settings
 fun! s:NetrwSafeOptions()
 "  call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$"))
 "  call Decho("win#".winnr()."'s ft=".&ft)
-  setlocal cino=
-  setlocal com=
-  setlocal cpo-=aA
-  if exists("&acd") | setlocal noacd | endif
-  setlocal nocin noai nobomb noci magic nospell nohid wig= noaw noim
-  setlocal fo=nroql2
-  setlocal tw=0
-  setlocal report=10000
-  setlocal isk+=@ isk+=* isk+=/
-  setlocal sel=inclusive
+  if exists("+acd") | setl noacd | endif
+  setl noai
+  setl noaw
+  setl nobomb
+  setl noci
+  setl nocin
+  if g:netrw_liststyle == s:TREELIST
+   setl bh=hide
+  endif
+  setl cino=
+  setl com=
+  setl cpo-=a
+  setl cpo-=A
+  setl fo=nroql2
+   setl nohid
+  setl noim
+  setl isk+=@ isk+=* isk+=/
+  setl magic
+  setl report=10000
+  setl sel=inclusive
+  setl nospell
+  setl tw=0
+  setl wig=
+  set  cedit&
   if g:netrw_use_noswf && has("win32") && !has("win95")
-   setlocal noswf
+   setl noswf
   endif
-  call s:NetrwCursorline()
+  call s:NetrwCursor()
 
   " allow the user to override safe options
 "  call Decho("ft<".&ft."> ei=".&ei)
   if &ft == "netrw"
-"   call Decho("do any netrw FileType autocmds")
-   silent keepalt keepjumps doau FileType netrw
+"   call Decho("do any netrw FileType autocmds (doau FileType netrw)")
+   sil! keepalt keepj doau FileType netrw
   endif
 
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
+"  call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." bh=".&l:bh)
 "  call Dret("s:NetrwSafeOptions")
 endfun
 
 " ---------------------------------------------------------------------
-" netrw#NetrwClean: remove netrw {{{2
-" supports :NetrwClean  -- remove netrw from first directory on runtimepath
-"          :NetrwClean! -- remove netrw from all directories on runtimepath
-fun! netrw#NetrwClean(sys)
-"  call Dfunc("netrw#NetrwClean(sys=".a:sys.")")
-
-  if a:sys
-   let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No")
-  else
-   let choice= confirm("Remove personal copy of netrw?","&Yes\n&No")
-  endif
-"  call Decho("choice=".choice)
-  let diddel= 0
-  let diddir= ""
-
-  if choice == 1
-   for dir in split(&rtp,',')
-    if filereadable(dir."/plugin/netrwPlugin.vim")
-"     call Decho("removing netrw-related files from ".dir)
-     if s:NetrwDelete(dir."/plugin/netrwPlugin.vim")        |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55)        |endif
-     if s:NetrwDelete(dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif
-     if s:NetrwDelete(dir."/autoload/netrwSettings.vim")    |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55)    |endif
-     if s:NetrwDelete(dir."/autoload/netrw.vim")            |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55)            |endif
-     if s:NetrwDelete(dir."/syntax/netrw.vim")              |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55)              |endif
-     if s:NetrwDelete(dir."/syntax/netrwlist.vim")          |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55)          |endif
-     let diddir= dir
-     let diddel= diddel + 1
-     if !a:sys|break|endif
-    endif
-   endfor
+" netrw#Explore: launch the local browser in the directory of the current file {{{2
+"          indx:  == -1: Nexplore
+"                 == -2: Pexplore
+"                 ==  +: this is overloaded:
+"                      * If Nexplore/Pexplore is in use, then this refers to the
+"                        indx'th item in the w:netrw_explore_list[] of items which
+"                        matched the */pattern **/pattern *//pattern **//pattern
+"                      * If Hexplore or Vexplore, then this will override
+"                        g:netrw_winsize to specify the qty of rows or columns the
+"                        newly split window should have.
+"          dosplit==0: the window will be split iff the current file has been modified
+"          dosplit==1: the window will be split before running the local browser
+"          style == 0: Explore     style == 1: Explore!
+"                == 2: Hexplore    style == 3: Hexplore!
+"                == 4: Vexplore    style == 5: Vexplore!
+"                == 6: Texplore
+fun! netrw#Explore(indx,dosplit,style,...)
+"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." modifiable=".&modifiable." a:0=".a:0." win#".winnr()." buf#".bufnr("%"))
+  if !exists("b:netrw_curdir")
+   let b:netrw_curdir= getcwd()
+   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+    let b:netrw_curdir= substitute(b:netrw_curdir,'\','/','g')
+   endif
+"   call Decho("(Explore) set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
   endif
-
-   echohl WarningMsg
-  if diddel == 0
-   echomsg "netrw is either not installed or not removable"
-  elseif diddel == 1
-   echomsg "removed one copy of netrw from <".diddir.">"
-  else
-   echomsg "removed ".diddel." copies of netrw"
+  let curdir     = simplify(b:netrw_curdir)
+  let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
+  if !exists("g:netrw_cygwin") && (has("win32") || has("win95") || has("win64") || has("win16"))
+   let curdir= substitute(curdir,'\','/','g')
   endif
-   echohl None
+"  call Decho("(Explore) curdir<".curdir.">  curfiledir<".curfiledir.">")
 
-"  call Dret("netrw#NetrwClean")
-endfun
+  " save registers
+  sil! let keepregstar = @*
+  sil! let keepregplus = @+
+  sil! let keepregslash= @/
 
-" ---------------------------------------------------------------------
-" netrw#Nread: {{{2
-fun! netrw#Nread(mode,fname)
-"  call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)")
-  call netrw#NetrwSavePosn()
-  call netrw#NetRead(a:mode,a:fname)
-  call netrw#NetrwRestorePosn()
-"  call Dret("netrw#Nread")
-endfun
+  " if dosplit or file has been modified
+  if a:dosplit || &modified || a:style == 6
+"   call Decho("(Explore) case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified")
+   call s:SaveWinVars()
+   let winsz= g:netrw_winsize
+   if a:indx > 0
+    let winsz= a:indx
+   endif
 
-" ------------------------------------------------------------------------
-"  Netrw Transfer Functions: {{{1
-" ===============================
+   if a:style == 0      " Explore, Sexplore
+"    call Decho("(Explore) style=0: Explore or Sexplore")
+    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
+    exe winsz."wincmd s"
 
-" ------------------------------------------------------------------------
-" netrw#NetRead: responsible for reading a file over the net {{{2
-"   mode: =0 read remote file and insert before current line
-"         =1 read remote file and insert after current line
-"         =2 replace with remote file
-"         =3 obtain file, but leave in temporary format
-fun! netrw#NetRead(mode,...)
-"  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw)
+   elseif a:style == 1  "Explore!, Sexplore!
+"    call Decho("(Explore) style=1: Explore! or Sexplore!")
+    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
+    exe "keepalt ".winsz."wincmd v"
 
-  " NetRead: save options {{{3
-  call s:NetrwOptionSave("w:")
-  call s:NetrwSafeOptions()
-  call s:RestoreCursorline()
+   elseif a:style == 2  " Hexplore
+"    call Decho("(Explore) style=2: Hexplore")
+    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
+    exe "keepalt bel ".winsz."wincmd s"
 
-  " NetRead: interpret mode into a readcmd {{{3
-  if     a:mode == 0 " read remote file before current line
-   let readcmd = "0r"
-  elseif a:mode == 1 " read file after current line
-   let readcmd = "r"
-  elseif a:mode == 2 " replace with remote file
-   let readcmd = "%r"
-  elseif a:mode == 3 " skip read of file (leave as temporary)
-   let readcmd = "t"
-  else
-   exe a:mode
-   let readcmd = "r"
-  endif
-  let ichoice = (a:0 == 0)? 0 : 1
-"  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
+   elseif a:style == 3  " Hexplore!
+"    call Decho("(Explore) style=3: Hexplore!")
+    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
+    exe "keepalt abo ".winsz."wincmd s"
 
-  " NetRead: get temporary filename {{{3
-  let tmpfile= s:GetTempfile("")
-  if tmpfile == ""
-"   call Dret("netrw#NetRead : unable to get a tempfile!")
-   return
-  endif
+   elseif a:style == 4  " Vexplore
+"    call Decho("(Explore) style=4: Vexplore")
+    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
+    exe "keepalt lefta ".winsz."wincmd v"
 
-  while ichoice <= a:0
+   elseif a:style == 5  " Vexplore!
+"    call Decho("(Explore) style=5: Vexplore!")
+    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
+    exe "keepalt rightb ".winsz."wincmd v"
 
-   " attempt to repeat with previous host-file-etc
-   if exists("b:netrw_lastfile") && a:0 == 0
-"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
-    let choice = b:netrw_lastfile
-    let ichoice= ichoice + 1
+   elseif a:style == 6  " Texplore
+    call s:SaveBufVars()
+"    call Decho("(Explore) style  = 6: Texplore")
+    exe "keepalt tabnew ".fnameescape(curdir)
+    call s:RestoreBufVars()
+   endif
+   call s:RestoreWinVars()
+"  else " Decho
+"   call Decho("(Explore) case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6")
+  endif
+  keepj norm! 0
 
+  if a:0 > 0
+"   call Decho("(Explore) case [a:0=".a:0."] > 0: a:1<".a:1.">")
+   if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
+"    call Decho("(Explore) ..case a:1<".a:1.">: starts with ~ and unix or cygwin")
+    let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
+"    call Decho("(Explore) ..using dirname<".dirname.">  (case: ~ && unix||cygwin)")
+   elseif a:1 == '.'
+"    call Decho("(Explore) ..case a:1<".a:1.">: matches .")
+    let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd())
+    if dirname !~ '/$'
+     let dirname= dirname."/"
+    endif
+"    call Decho("(Explore) ..using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
+   elseif a:1 =~ '\$'
+"    call Decho("(Explore) ..case a:1<".a:1.">: matches ending $")
+    let dirname= simplify(expand(a:1))
+"    call Decho("(Explore) ..using user-specified dirname<".dirname."> with $env-var")
+   elseif a:1 !~ '^\*\{1,2}/' && a:1 !~ '^\a\{3,}://'
+"    call Decho("(Explore) ..case a:1<".a:1.">: other, not pattern or filepattern")
+    let dirname= simplify(a:1)
+"    call Decho("(Explore) ..using user-specified dirname<".dirname.">")
    else
-    exe "let choice= a:" . ichoice
-"    call Decho("no lastfile: choice<" . choice . ">")
+"    call Decho("(Explore) ..case a:1: pattern or filepattern")
+    let dirname= a:1
+   endif
+  else
+   " clear explore
+"   call Decho("(Explore) case a:0=".a:0.": clearing Explore list")
+   call s:NetrwClearExplore()
+"   call Dret("netrw#Explore : cleared list")
+   return
+  endif
 
-    if match(choice,"?") == 0
-     " give help
-     echomsg 'NetRead Usage:'
-     echomsg ':Nread machine:path                         uses rcp'
-     echomsg ':Nread "machine path"                       uses ftp   with <.netrc>'
-     echomsg ':Nread "machine id password path"           uses ftp'
-     echomsg ':Nread dav://machine[:port]/path            uses cadaver'
-     echomsg ':Nread fetch://machine/path                 uses fetch'
-     echomsg ':Nread ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
-     echomsg ':Nread http://[user@]machine/path           uses http  wget'
-     echomsg ':Nread rcp://[user@]machine/path            uses rcp'
-     echomsg ':Nread rsync://machine[:port]/path          uses rsync'
-     echomsg ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
-     echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
-     sleep 4
-     break
+"  call Decho("(Explore) dirname<".dirname.">")
+  if dirname =~ '\.\./\=$'
+   let dirname= simplify(fnamemodify(dirname,':p:h'))
+  elseif dirname =~ '\.\.' || dirname == '.'
+   let dirname= simplify(fnamemodify(dirname,':p'))
+  endif
+"  call Decho("(Explore) dirname<".dirname.">  (after simplify)")
 
-    elseif match(choice,'^"') != -1
-     " Reconstruct Choice if choice starts with '"'
-"     call Decho("reconstructing choice")
-     if match(choice,'"$') != -1
-      " case "..."
-      let choice=strpart(choice,1,strlen(choice)-2)
-     else
-       "  case "... ... ..."
-      let choice      = strpart(choice,1,strlen(choice)-1)
-      let wholechoice = ""
+  if dirname =~ '^\*//'
+   " starpat=1: Explore *//pattern   (current directory only search for files containing pattern)
+"   call Decho("(Explore) case starpat=1: Explore *//pattern")
+   let pattern= substitute(dirname,'^\*//\(.*\)$','\1','')
+   let starpat= 1
+"   call Decho("(Explore) ..Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
 
-      while match(choice,'"$') == -1
-       let wholechoice = wholechoice . " " . choice
-       let ichoice     = ichoice + 1
-       if ichoice > a:0
-               if !exists("g:netrw_quiet")
-        call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3)
-       endif
-"        call Dret("netrw#NetRead :2 getcwd<".getcwd().">")
-        return
-       endif
-       let choice= a:{ichoice}
-      endwhile
-      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
-     endif
-    endif
+  elseif dirname =~ '^\*\*//'
+   " starpat=2: Explore **//pattern  (recursive descent search for files containing pattern)
+"   call Decho("(Explore) case starpat=2: Explore **//pattern")
+   let pattern= substitute(dirname,'^\*\*//','','')
+   let starpat= 2
+"   call Decho("(Explore) ..Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+
+  elseif dirname =~ '/\*\*/'
+   " handle .../**/.../filepat
+"   call Decho("(Explore) case starpat=4: Explore .../**/.../filepat")
+   let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','')
+   if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16")))
+    let b:netrw_curdir = prefixdir
+   else
+    let b:netrw_curdir= getcwd().'/'.prefixdir
    endif
+   let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','')
+   let starpat= 4
+"   call Decho("(Explore) ..pwd<".getcwd()."> dirname<".dirname.">")
+"   call Decho("(Explore) ..case Explore ../**/../filepat (starpat=".starpat.")")
 
-"   call Decho("choice<" . choice . ">")
-   let ichoice= ichoice + 1
+  elseif dirname =~ '^\*/'
+   " case starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+   let starpat= 3
+"   call Decho("(Explore) case starpat=3: Explore */filepat (starpat=".starpat.")")
 
-   " NetRead: Determine method of read (ftp, rcp, etc) {{{3
-   call s:NetrwMethod(choice)
-   if !exists("b:netrw_method") || b:netrw_method < 0
-"    call Dfunc("netrw#NetRead : unsupported method")
-    return
-   endif
-   let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
+  elseif dirname=~ '^\*\*/'
+   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+   let starpat= 4
+"   call Decho("(Explore) case starpat=4: Explore **/filepat (starpat=".starpat.")")
 
-   " Check if NetrwBrowse() should be handling this request
-"   call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
-   if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://'
-"    call Decho("yes, choice matches '^.*[\/]$'")
-    keepj call s:NetrwBrowse(0,choice)
-"    call Dret("netrw#NetRead :3 getcwd<".getcwd().">")
-    return
-   endif
+  else
+   let starpat= 0
+"   call Decho("(Explore) case starpat=0: default")
+  endif
 
-   " ============
-   " NetRead: Perform Protocol-Based Read {{{3
-   " ===========================
-   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
-    echo "(netrw) Processing your read request..."
+  if starpat == 0 && a:indx >= 0
+   " [Explore Hexplore Vexplore Sexplore] [dirname]
+"   call Decho("(Explore) case starpat==0 && a:indx=".a:indx.": dirname<".dirname.">, handles Explore Hexplore Vexplore Sexplore")
+   if dirname == ""
+    let dirname= curfiledir
+"    call Decho("(Explore) ..empty dirname, using current file's directory<".dirname.">")
    endif
-
-   ".........................................
-   " NetRead: (rcp)  NetRead Method #1 {{{3
-   if  b:netrw_method == 1 " read with rcp
-"    call Decho("read via rcp (method #1)")
-   " ER: nothing done with g:netrw_uid yet?
-   " ER: on Win2K" rcp machine[.user]:file tmpfile
-   " ER: if machine contains '.' adding .user is required (use $USERNAME)
-   " ER: the tmpfile is full path: rcp sees C:\... as host C
-   if s:netrw_has_nt_rcp == 1
-    if exists("g:netrw_uid") &&        ( g:netrw_uid != "" )
-     let uid_machine = g:netrw_machine .'.'. g:netrw_uid
-    else
-     " Any way needed it machine contains a '.'
-     let uid_machine = g:netrw_machine .'.'. $USERNAME
-    endif
+   if dirname =~ '^scp://' || dirname =~ '^ftp://'
+    call netrw#Nread(2,dirname)
+    "call s:NetrwBrowse(0,dirname)
    else
-    if exists("g:netrw_uid") &&        ( g:netrw_uid != "" )
-     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-    else
-     let uid_machine = g:netrw_machine
+    if dirname == ""
+     let dirname= getcwd()
+    elseif (has("win32") || has("win95") || has("win64") || has("win16")) && !g:netrw_cygwin
+     if dirname !~ '^[a-zA-Z]:'
+      let dirname= b:netrw_curdir."/".dirname
+     endif
+    elseif dirname !~ '^/'
+     let dirname= b:netrw_curdir."/".dirname
     endif
+"    call Decho("(Explore) ..calling LocalBrowseCheck(dirname<".dirname.">)")
+    call netrw#LocalBrowseCheck(dirname)
+"    call Decho("(Explore) win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+   endif
+   if exists("w:netrw_bannercnt")
+    " done to handle P08-Ingelrest. :Explore will _Always_ go to the line just after the banner.
+    " If one wants to return the same place in the netrw window, use :Rex instead.
+    exe w:netrw_bannercnt
    endif
-"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
-   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
-   let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-   let b:netrw_lastfile = choice
 
-   ".........................................
-   " NetRead: (ftp + <.netrc>)  NetRead Method #2 {{{3
-   elseif b:netrw_method  == 2         " read with ftp + <.netrc>
-"     call Decho("read via ftp+.netrc (method #2)")
-     let netrw_fname= b:netrw_fname
-     call s:SaveBufVars()|new|call s:RestoreBufVars()
-     let filtbuf= bufnr("%")
-     setlocal ff=unix
-     keepj put =g:netrw_ftpmode
-"     call Decho("filter input: ".getline(line("$")))
-     if exists("g:netrw_ftpextracmd")
-      keepj put =g:netrw_ftpextracmd
-"      call Decho("filter input: ".getline(line("$")))
-     endif
-     call setline(line("$")+1,'get "'.netrw_fname.'" '.tmpfile)
-"     call Decho("filter input: ".getline(line("$")))
-     if exists("g:netrw_port") && g:netrw_port != ""
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1)
-     else
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
-     endif
-     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
-      let debugkeep = &debug
-      setlocal debug=msg
-      call netrw#ErrorMsg(s:ERROR,getline(1),4)
-      let &debug    = debugkeep
-     endif
-     call s:SaveBufVars()
-     bd!
-     if bufname("%") == "" && getline("$") == "" && line('$') == 1
-      " needed when one sources a file in a nolbl setting window via ftp
-      q!
-     endif
-     call s:RestoreBufVars()
-     let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-     let b:netrw_lastfile = choice
+"   call Decho("(Explore) curdir<".curdir.">")
+   " ---------------------------------------------------------------------
+   " Jan 24, 2013: not sure why the following was present.  See P08-Ingelrest
+"   if has("win32") || has("win95") || has("win64") || has("win16")
+"    keepj call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
+"   else
+"    keepj call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
+"   endif
+   " ---------------------------------------------------------------------
 
-   ".........................................
-   " NetRead: (ftp + machine,id,passwd,filename)  NetRead Method #3 {{{3
-   elseif b:netrw_method == 3          " read with ftp + machine, id, passwd, and fname
-    " Construct execution string (four lines) which will be passed through filter
-"    call Decho("read via ftp+mipf (method #3)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    call s:SaveBufVars()|new|call s:RestoreBufVars()
-    let filtbuf= bufnr("%")
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho("filter input: ".getline('.'))
-    else
-     keepj put ='open '.g:netrw_machine
-"     call Decho("filter input: ".getline('.'))
-    endif
+  " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
+  " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
+  " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+  " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+  elseif a:indx <= 0
+   " Nexplore, Pexplore, Explore: handle starpat
+"   call Decho("(Explore) case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx)
+   if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
+"    call Decho("(Explore) ..set up <s-up> and <s-down> maps")
+    let s:didstarstar= 1
+    nnoremap <buffer> <silent> <s-up>  :Pexplore<cr>
+    nnoremap <buffer> <silent> <s-down>        :Nexplore<cr>
+   endif
 
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     keepj put =g:netrw_uid
-"     call Decho("filter input: ".getline('.'))
-     keepj put ='\"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('.'))
-    else
-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('.'))
+   if has("path_extra")
+"    call Decho("(Explore) ..starpat=".starpat.": has +path_extra")
+    if !exists("w:netrw_explore_indx")
+     let w:netrw_explore_indx= 0
     endif
 
-    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-     keepj put =g:netrw_ftpmode
-"     call Decho("filter input: ".getline('.'))
-    endif
-    if exists("g:netrw_ftpextracmd")
-     put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline('.'))
-    endif
-    keepj put ='get \"'.netrw_fname.'\" '.tmpfile
-"    call Decho("filter input: ".getline('.'))
+    let indx = a:indx
+"    call Decho("(Explore) ..starpat=".starpat.": set indx= [a:indx=".indx."]")
 
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-    norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
-    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-    if getline(1) !~ "^$"
-"     call Decho("error<".getline(1).">")
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),5)
+    if indx == -1
+     " Nexplore
+"     call Decho("(Explore) ..case Nexplore with starpat=".starpat.": (indx=".indx.")")
+     if !exists("w:netrw_explore_list") " sanity check
+      keepj call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
+"      call Dret("netrw#Explore")
+      return
      endif
-    endif
-    call s:SaveBufVars()|bd!|call s:RestoreBufVars()
-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
+     let indx= w:netrw_explore_indx
+     if indx < 0                        | let indx= 0                           | endif
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+     let curfile= w:netrw_explore_list[indx]
+"     call Decho("(Explore) ....indx=".indx." curfile<".curfile.">")
+     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
+      let indx= indx + 1
+"      call Decho("(Explore) ....indx=".indx." (Nexplore while loop)")
+     endwhile
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+"     call Decho("(Explore) ....Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
 
-   ".........................................
-   " NetRead: (scp) NetRead Method #4 {{{3
-   elseif     b:netrw_method  == 4     " read with scp
-"    call Decho("read via scp (method #4)")
-    if exists("g:netrw_port") && g:netrw_port != ""
-     let useport= " ".g:netrw_scpport." ".g:netrw_port
-    else
-     let useport= ""
-    endif
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
-    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " NetRead: (http) NetRead Method #5 (wget) {{{3
-   elseif     b:netrw_method  == 5
-"    call Decho("read via http (method #5)")
-    if g:netrw_http_cmd == ""
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6)
+    elseif indx == -2
+     " Pexplore
+"     call Decho("(Explore) case Pexplore with starpat=".starpat.": (indx=".indx.")")
+     if !exists("w:netrw_explore_list") " sanity check
+      keepj call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
+"      call Dret("netrw#Explore")
+      return
      endif
-"     call Dret("netrw#NetRead :4 getcwd<".getcwd().">")
-     return
-    endif
+     let indx= w:netrw_explore_indx
+     if indx < 0                        | let indx= 0                           | endif
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+     let curfile= w:netrw_explore_list[indx]
+"     call Decho("(Explore) ....indx=".indx." curfile<".curfile.">")
+     while indx >= 0 && curfile == w:netrw_explore_list[indx]
+      let indx= indx - 1
+"      call Decho("(Explore) ....indx=".indx." (Pexplore while loop)")
+     endwhile
+     if indx < 0                        | let indx= 0                           | endif
+"     call Decho("(Explore) ....Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
 
-    if match(b:netrw_fname,"#") == -1 || exists("g:netrw_http_xcmd")
-     " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch)
-"     call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)")
-     if exists("g:netrw_http_xcmd")
-"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1))
-      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)
-     else
-"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1))
-      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)
+    else
+     " Explore -- initialize
+     " build list of files to Explore with Nexplore/Pexplore
+"     call Decho("(Explore) ..starpat=".starpat.": case Explore: initialize (indx=".indx.")")
+     keepj keepalt call s:NetrwClearExplore()
+     let w:netrw_explore_indx= 0
+     if !exists("b:netrw_curdir")
+      let b:netrw_curdir= getcwd()
      endif
-     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+"     call Decho("(Explore) ....starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">")
 
-    else
-     " wget/curl/fetch plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
-"     call Decho(("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)")
-     let netrw_html= substitute(b:netrw_fname,"#.*$","","")
-     let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
-"     call Decho("netrw_html<".netrw_html.">")
-"     call Decho("netrw_tag <".netrw_tag.">")
-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1))
-     exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)
-     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-"     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
-     exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
-    endif
-    let b:netrw_lastfile = choice
-    setlocal ro
+     " switch on starpat to build the w:netrw_explore_list of files
+     if starpat == 1
+      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
+"      call Decho("(Explore) ..case starpat=".starpat.": build *//pattern list  (curdir-only srch for files containing pattern)  &hls=".&hls)
+"      call Decho("(Explore) ....pattern<".pattern.">")
+      try
+       exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
+      catch /^Vim\%((\a\+)\)\=:E480/
+       keepalt call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
+"       call Dret("netrw#Explore : unable to find pattern<".pattern.">")
+       return
+      endtry
+      let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)'))
+      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
 
-   ".........................................
-   " NetRead: (dav) NetRead Method #6 {{{3
-   elseif     b:netrw_method  == 6
-"    call Decho("read via cadaver (method #6)")
+     elseif starpat == 2
+      " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
+"      call Decho("(Explore) ..case starpat=".starpat.": build **//pattern list  (recursive descent files containing pattern)")
+"      call Decho("(Explore) ....pattern<".pattern.">")
+      try
+       exe "sil keepj noautocmd keepalt vimgrep /".pattern."/gj "."**/*"
+      catch /^Vim\%((\a\+)\)\=:E480/
+       keepalt call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
+       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+       sil! let @* = keepregstar
+       sil! let @+ = keepregstar
+       sil! let @/ = keepregslash
+"       call Dret("netrw#Explore : no files matched pattern")
+       return
+      endtry
+      let s:netrw_curdir       = b:netrw_curdir
+      let w:netrw_explore_list = getqflist()
+      let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)'))
+      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
 
-    if !executable(g:netrw_dav_cmd)
-     call netrw#ErrorMsg(s:ERROR,g:netrw_dav_cmd." is not executable",73)
-"     call Dret("netrw#NetRead : ".g:netrw_dav_cmd." not executable")
-     return
-    endif
-    if g:netrw_dav_cmd =~ "curl"
-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1))
-     exe s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1)
-    else
-     " Construct execution string (four lines) which will be passed through filter
-     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-     new
-     setlocal ff=unix
-     if exists("g:netrw_port") && g:netrw_port != ""
-      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-     else
-      keepj put ='open '.g:netrw_machine
-     endif
-     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
-     keepj put ='get '.netrw_fname.' '.tmpfile
-     keepj put ='quit'
+     elseif starpat == 3
+      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+"      call Decho("(Explore) ..case starpat=".starpat.": build */filepat list  (curdir-only srch filenames matching filepat)  &hls=".&hls)
+      let filepat= substitute(dirname,'^\*/','','')
+      let filepat= substitute(filepat,'^[%#<]','\\&','')
+"      call Decho("(Explore) ....b:netrw_curdir<".b:netrw_curdir.">")
+"      call Decho("(Explore) ....filepat<".filepat.">")
+      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n'))
+      if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif
 
-     " perform cadaver operation:
-     keepj norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_dav_cmd)
-     exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
-     bd!
-    endif
-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
+     elseif starpat == 4
+      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+"      call Decho("(Explore) ..case starpat=".starpat.": build **/filepat list  (recursive descent srch filenames matching filepat)  &hls=".&hls)
+      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n'))
+      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
+     endif " switch on starpat to build w:netrw_explore_list
 
-   ".........................................
-   " NetRead: (rsync) NetRead Method #7 {{{3
-   elseif     b:netrw_method  == 7
-"    call Decho("read via rsync (method #7)")
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
-    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
-    let result          = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
+     let w:netrw_explore_listlen = len(w:netrw_explore_list)
+"     call Decho("(Explore) ....w:netrw_explore_list<".string(w:netrw_explore_list).">")
+"     call Decho("(Explore) ....w:netrw_explore_listlen=".w:netrw_explore_listlen)
 
-   ".........................................
-   " NetRead: (fetch) NetRead Method #8 {{{3
-   "    fetch://[user@]host[:http]/path
-   elseif     b:netrw_method  == 8
-"    call Decho("read via fetch (method #8)")
-    if g:netrw_fetch_cmd == ""
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
+     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
+      keepalt keepj call netrw#ErrorMsg(s:WARNING,"no files matched",42)
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
+"      call Dret("netrw#Explore : no files matched")
+      return
      endif
-"     call Dret("NetRead")
-    endif
-    if exists("g:netrw_option") && g:netrw_option == ":http"
-     let netrw_option= "http"
-    else
-     let netrw_option= "ftp"
-    endif
-"    call Decho("read via fetch for ".netrw_option)
+    endif  " if indx ... endif
 
-    if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != ""
-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1))
-     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1)
-    else
-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1))
-     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1)
+    " NetrwStatusLine support - for exploring support
+    let w:netrw_explore_indx= indx
+"    call Decho("(Explore) ....w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
+
+    " wrap the indx around, but issue a note
+    if indx >= w:netrw_explore_listlen || indx < 0
+"     call Decho("(Explore) ....wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
+     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
+     let w:netrw_explore_indx= indx
+     keepalt keepj call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
     endif
 
-    let result         = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
-    setlocal ro
+    exe "let dirfile= w:netrw_explore_list[".indx."]"
+"    call Decho("(Explore) ....dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
+    let newdir= substitute(dirfile,'/[^/]*$','','e')
+"    call Decho("(Explore) ....newdir<".newdir.">")
 
-   ".........................................
-   " NetRead: (sftp) NetRead Method #9 {{{3
-   elseif     b:netrw_method  == 9
-"    call Decho("read via sftp (method #9)")
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
-    exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile
-    let result         = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
+"    call Decho("(Explore) ....calling LocalBrowseCheck(newdir<".newdir.">)")
+    call netrw#LocalBrowseCheck(newdir)
+    if !exists("w:netrw_liststyle")
+     let w:netrw_liststyle= g:netrw_liststyle
+    endif
+    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
+     keepalt keepj call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
+    else
+     keepalt keepj call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
+    endif
+    let w:netrw_explore_mtchcnt = indx + 1
+    let w:netrw_explore_bufnr   = bufnr("%")
+    let w:netrw_explore_line    = line(".")
+    keepalt keepj call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
+"    call Decho("(Explore) ....explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
 
-   ".........................................
-   " NetRead: Complain {{{3
    else
-    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
+"    call Decho("(Explore) ..your vim does not have +path_extra")
+    if !exists("g:netrw_quiet")
+     keepalt keepj call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
+    endif
+    sil! let @* = keepregstar
+    sil! let @+ = keepregstar
+    sil! let @/ = keepregslash
+"    call Dret("netrw#Explore : missing +path_extra")
+    return
    endif
-  endwhile
-
-  " NetRead: cleanup {{{3
-  if exists("b:netrw_method")
-"   call Decho("cleanup b:netrw_method and b:netrw_fname")
-   unlet b:netrw_method
-   unlet b:netrw_fname
-  endif
-  if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' && tmpfile !~ '.tar.xz$' && tmpfile !~ '.txz'
-"   call Decho("cleanup by deleting tmpfile<".tmpfile.">")
-   call s:NetrwDelete(tmpfile)
-  endif
-  call s:NetrwOptionRestore("w:")
-
-"  call Dret("netrw#NetRead :5 getcwd<".getcwd().">")
-endfun
-
-" ------------------------------------------------------------------------
-" netrw#NetWrite: responsible for writing a file over the net {{{2
-fun! netrw#NetWrite(...) range
-"  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
-
-  " NetWrite: option handling {{{3
-  let mod= 0
-  call s:NetrwOptionSave("w:")
-  call s:NetrwSafeOptions()
-
-  " NetWrite: Get Temporary Filename {{{3
-  let tmpfile= s:GetTempfile("")
-  if tmpfile == ""
-"   call Dret("netrw#NetWrite : unable to get a tempfile!")
-   return
-  endif
 
-  if a:0 == 0
-   let ichoice = 0
   else
-   let ichoice = 1
+"   call Decho("(Explore) ..default case: Explore newdir<".dirname.">")
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
+    sil! unlet w:netrw_treedict
+    sil! unlet w:netrw_treetop
+   endif
+   let newdir= dirname
+   if !exists("b:netrw_curdir")
+    keepj call netrw#LocalBrowseCheck(getcwd())
+   else
+    keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
+   endif
   endif
 
-  let curbufname= expand("%")
-"  call Decho("curbufname<".curbufname.">")
-  if &binary
-   " For binary writes, always write entire file.
-   " (line numbers don't really make sense for that).
-   " Also supports the writing of tar and zip files.
-"   call Decho("(write entire file) silent exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
-   exe "silent keepj w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
-  elseif g:netrw_cygwin
-   " write (selected portion of) file to temporary
-   let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
-"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile))
-   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)
+  " visual display of **/ **// */ Exploration files
+"  call Decho("(Explore) w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist"))
+"  call Decho("(Explore) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">")
+  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
+"   call Decho("(Explore) s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-"))
+   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
+    " only update match list if current directory isn't the same as before
+"    call Decho("(Explore) only update match list if current directory not the same as before")
+    let s:explore_prvdir = b:netrw_curdir
+    let s:explore_match  = ""
+    let dirlen           = s:Strlen(b:netrw_curdir)
+    if b:netrw_curdir !~ '/$'
+     let dirlen= dirlen + 1
+    endif
+    let prvfname= ""
+    for fname in w:netrw_explore_list
+"     call Decho("(Explore) fname<".fname.">")
+     if fname =~ '^'.b:netrw_curdir
+      if s:explore_match == ""
+       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
+      else
+       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
+      endif
+     elseif fname !~ '^/' && fname != prvfname
+      if s:explore_match == ""
+       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>'
+      else
+       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>'
+      endif
+     endif
+     let prvfname= fname
+    endfor
+"    call Decho("(Explore) explore_match<".s:explore_match.">")
+    exe "2match netrwMarkFile /".s:explore_match."/"
+   endif
+   echo "<s-up>==Pexplore  <s-down>==Nexplore"
   else
-   " write (selected portion of) file to temporary
-"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
-   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+   2match none
+   if exists("s:explore_match")  | unlet s:explore_match  | endif
+   if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif
+   echo " "
+"   call Decho("(Explore) cleared explore match list")
   endif
 
-  if curbufname == ""
-   " if the file is [No Name], and one attempts to Nwrite it, the buffer takes
-   " on the temporary file's name.  Deletion of the temporary file during
-   " cleanup then causes an error message.
-   0file!
+  sil! let @* = keepregstar
+  sil! let @+ = keepregstar
+  sil! let @/ = keepregslash
+"  call Dret("netrw#Explore : @/<".@/.">")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#NetrwMakeTgt: make a target out of the directory name provided {{{2
+fun! netrw#NetrwMakeTgt(dname)
+"  call Dfunc("netrw#NetrwMakeTgt(dname<".a:dname.">)")
+   " simplify the target (eg. /abc/def/../ghi -> /abc/ghi)
+  let svpos               = netrw#NetrwSavePosn()
+  let s:netrwmftgt_islocal= (a:dname !~ '^\a\+://')
+"  call Decho("s:netrwmftgt_islocal=".s:netrwmftgt_islocal)
+  if s:netrwmftgt_islocal
+   let netrwmftgt= simplify(a:dname)
+  else
+   let netrwmftgt= a:dname
+  endif
+  if exists("s:netrwmftgt") && netrwmftgt == s:netrwmftgt
+   " re-selected target, so just clear it
+   unlet s:netrwmftgt s:netrwmftgt_islocal
+  else
+   let s:netrwmftgt= netrwmftgt
+  endif
+  if g:netrw_fastbrowse <= 1
+   call s:NetrwRefresh((b:netrw_curdir !~ '\a\+://'),b:netrw_curdir)
   endif
+  call netrw#NetrwRestorePosn(svpos)
+"  call Dret("netrw#NetrwMakeTgt")
+endfun
 
-  " NetWrite: while choice loop: {{{3
-  while ichoice <= a:0
+" ---------------------------------------------------------------------
+" netrw#NetrwClean: remove netrw {{{2
+" supports :NetrwClean  -- remove netrw from first directory on runtimepath
+"          :NetrwClean! -- remove netrw from all directories on runtimepath
+fun! netrw#NetrwClean(sys)
+"  call Dfunc("netrw#NetrwClean(sys=".a:sys.")")
 
-   " Process arguments: {{{4
-   " attempt to repeat with previous host-file-etc
-   if exists("b:netrw_lastfile") && a:0 == 0
-"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
-    let choice = b:netrw_lastfile
-    let ichoice= ichoice + 1
-   else
-    exe "let choice= a:" . ichoice
+  if a:sys
+   let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No")
+  else
+   let choice= confirm("Remove personal copy of netrw?","&Yes\n&No")
+  endif
+"  call Decho("choice=".choice)
+  let diddel= 0
+  let diddir= ""
 
-    " Reconstruct Choice if choice starts with '"'
-    if match(choice,"?") == 0
-     echomsg 'NetWrite Usage:"'
-     echomsg ':Nwrite machine:path                        uses rcp'
-     echomsg ':Nwrite "machine path"                      uses ftp with <.netrc>'
-     echomsg ':Nwrite "machine id password path"          uses ftp'
-     echomsg ':Nwrite dav://[user@]machine/path           uses cadaver'
-     echomsg ':Nwrite fetch://[user@]machine/path         uses fetch'
-     echomsg ':Nwrite ftp://machine[#port]/path           uses ftp  (autodetects <.netrc>)'
-     echomsg ':Nwrite rcp://machine/path                  uses rcp'
-     echomsg ':Nwrite rsync://[user@]machine/path         uses rsync'
-     echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
-     echomsg ':Nwrite sftp://[user@]machine/path          uses sftp'
-     sleep 4
-     break
+  if choice == 1
+   for dir in split(&rtp,',')
+    if filereadable(dir."/plugin/netrwPlugin.vim")
+"     call Decho("removing netrw-related files from ".dir)
+     if s:NetrwDelete(dir."/plugin/netrwPlugin.vim")        |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55)        |endif
+     if s:NetrwDelete(dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif
+     if s:NetrwDelete(dir."/autoload/netrwSettings.vim")    |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55)    |endif
+     if s:NetrwDelete(dir."/autoload/netrw.vim")            |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55)            |endif
+     if s:NetrwDelete(dir."/syntax/netrw.vim")              |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55)              |endif
+     if s:NetrwDelete(dir."/syntax/netrwlist.vim")          |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55)          |endif
+     let diddir= dir
+     let diddel= diddel + 1
+     if !a:sys|break|endif
+    endif
+   endfor
+  endif
 
-    elseif match(choice,"^\"") != -1
-     if match(choice,"\"$") != -1
-       " case "..."
-      let choice=strpart(choice,1,strlen(choice)-2)
-     else
-      "  case "... ... ..."
-      let choice      = strpart(choice,1,strlen(choice)-1)
-      let wholechoice = ""
+   echohl WarningMsg
+  if diddel == 0
+   echomsg "netrw is either not installed or not removable"
+  elseif diddel == 1
+   echomsg "removed one copy of netrw from <".diddir.">"
+  else
+   echomsg "removed ".diddel." copies of netrw"
+  endif
+   echohl None
 
-      while match(choice,"\"$") == -1
-       let wholechoice= wholechoice . " " . choice
-       let ichoice    = ichoice + 1
-       if choice > a:0
-               if !exists("g:netrw_quiet")
-        call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13)
-       endif
-"        call Dret("netrw#NetWrite")
-        return
-       endif
-       let choice= a:{ichoice}
-      endwhile
-      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
-     endif
-    endif
-   endif
-   let ichoice= ichoice + 1
-"   call Decho("choice<" . choice . "> ichoice=".ichoice)
+"  call Dret("netrw#NetrwClean")
+endfun
 
-   " Determine method of write (ftp, rcp, etc) {{{4
-   call s:NetrwMethod(choice)
-   if !exists("b:netrw_method") || b:netrw_method < 0
-"    call Dfunc("netrw#NetWrite : unsupported method")
-    return
-   endif
+" ---------------------------------------------------------------------
+" netrw#Nread: {{{2
+fun! netrw#Nread(mode,fname)
+"  call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)")
+  call netrw#NetrwSavePosn()
+  call netrw#NetRead(a:mode,a:fname)
+  call netrw#NetrwRestorePosn()
+"  call Dret("netrw#Nread")
+endfun
 
-   " =============
-   " NetWrite: Perform Protocol-Based Write {{{3
-   " ============================
-   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
-    echo "(netrw) Processing your write request..."
-"    call Decho("(netrw) Processing your write request...")
-   endif
+" ------------------------------------------------------------------------
+" netrw#NetrwObtain: {{{2
+"   netrw#NetrwObtain(islocal,fname[,tgtdirectory])
+"     islocal=0  obtain from remote source
+"            =1  obtain from local source
+"     fname  :   a filename or a list of filenames
+"     tgtdir :   optional place where files are to go  (not present, uses getcwd())
+fun! netrw#NetrwObtain(islocal,fname,...)
+"  call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0)
+  " NetrwStatusLine support - for obtaining support
 
-   ".........................................
-   " NetWrite: (rcp) NetWrite Method #1 {{{3
-   if  b:netrw_method == 1
-"    call Decho("write via rcp (method #1)")
-    if s:netrw_has_nt_rcp == 1
-     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-      let uid_machine = g:netrw_machine .'.'. g:netrw_uid
-     else
-      let uid_machine = g:netrw_machine .'.'. $USERNAME
-     endif
+  if type(a:fname) == 1
+   let fnamelist= [ a:fname ]
+  elseif type(a:fname) == 3
+   let fnamelist= a:fname
+  else
+   call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62)
+"   call Dret("netrw#NetrwObtain")
+   return
+  endif
+"  call Decho("fnamelist<".string(fnamelist).">")
+  if a:0 > 0
+   let tgtdir= a:1
+  else
+   let tgtdir= getcwd()
+  endif
+"  call Decho("tgtdir<".tgtdir.">")
+
+  if exists("b:netrw_islocal") && b:netrw_islocal
+   " obtain a file from local b:netrw_curdir to (local) tgtdir
+"   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
+   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
+    let topath= s:ComposePath(tgtdir,"")
+    if (has("win32") || has("win95") || has("win64") || has("win16"))
+     " transfer files one at time
+"     call Decho("transfer files one at a time")
+     for fname in fnamelist
+"      call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")")
+      call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
+      if v:shell_error != 0
+       call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
+"       call Dret("s:NetrwObtain 0 : failed: ".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
+       return
+      endif
+     endfor
     else
-     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-     else
-      let uid_machine = g:netrw_machine
+     " transfer files with one command
+"     call Decho("transfer files with one command")
+     let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)"))
+"     call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")")
+     call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
+     if v:shell_error != 0
+      call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
+"      call Dret("s:NetrwObtain 0 : failed: ".g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
+      return
      endif
     endif
-"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1))
-    exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1)
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " NetWrite: (ftp + <.netrc>) NetWrite Method #2 {{{3
-   elseif b:netrw_method == 2
-"    call Decho("write via ftp+.netrc (method #2)")
-    let netrw_fname = b:netrw_fname
+   elseif !exists("b:netrw_curdir")
+    call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
+   else
+    call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37)
+   endif
 
-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
-    let bhkeep      = &l:bh
-    let curbuf      = bufnr("%")
-    setlocal bh=hide
-    enew
+  else
+   " obtain files from remote b:netrw_curdir to local tgtdir
+"   call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir)
+   if type(a:fname) == 1
+    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname)
+   endif
+   call s:NetrwMethod(b:netrw_curdir)
 
-"    call Decho("filter input window#".winnr())
-    setlocal ff=unix
-    keepj put =g:netrw_ftpmode
-"    call Decho("filter input: ".getline('$'))
-    if exists("g:netrw_ftpextracmd")
-     keepj put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline("$"))
-    endif
-    call setline(line("$")+1,'put "'.tmpfile.'" "'.netrw_fname.'"')
-"    call Decho("filter input: ".getline("$"))
+   if b:netrw_method == 4
+    " obtain file using scp
+"    call Decho("obtain via scp (method#4)")
     if exists("g:netrw_port") && g:netrw_port != ""
-"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
-     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+     let useport= " ".g:netrw_scpport." ".g:netrw_port
     else
-"     call Decho("filter input window#".winnr())
-"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+     let useport= ""
     endif
-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-    if getline(1) !~ "^$"
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),14)
-     endif
-     let mod=1
+    if b:netrw_fname =~ '/'
+     let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','')
+    else
+     let path= ""
     endif
+    let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)'))
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)
 
-    " remove enew buffer (quietly)
-    let filtbuf= bufnr("%")
-    exe curbuf."b!"
-    let &l:bh            = bhkeep
-    exe filtbuf."bw!"
+   elseif b:netrw_method == 2
+    " obtain file using ftp + .netrc
+"     call Decho("obtain via ftp+.netrc (method #2)")
+     call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars()
+     let tmpbufnr= bufnr("%")
+     setl ff=unix
+     if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+      keepj put =g:netrw_ftpmode
+"      call Decho("filter input: ".getline('$'))
+     endif
 
-    let b:netrw_lastfile = choice
+     if exists("b:netrw_fname") && b:netrw_fname != ""
+      call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+"      call Decho("filter input: ".getline('$'))
+     endif
 
-   ".........................................
-   " NetWrite: (ftp + machine, id, passwd, filename) NetWrite Method #3 {{{3
-   elseif b:netrw_method == 3
-    " Construct execution string (three or more lines) which will be passed through filter
-"    call Decho("read via ftp+mipf (method #3)")
-    let netrw_fname = b:netrw_fname
-    let bhkeep      = &l:bh
+     if exists("g:netrw_ftpextracmd")
+      keepj put =g:netrw_ftpextracmd
+"      call Decho("filter input: ".getline('$'))
+     endif
+     for fname in fnamelist
+      call setline(line("$")+1,'get "'.fname.'"')
+"      call Decho("filter input: ".getline('$'))
+     endfor
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+     else
+"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+     endif
+     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+      let debugkeep= &debug
+      setl debug=msg
+      call netrw#ErrorMsg(s:ERROR,getline(1),4)
+      let &debug= debugkeep
+     endif
 
-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
-    let curbuf      = bufnr("%")
-    setlocal bh=hide
-    enew
-    setlocal ff=unix
+   elseif b:netrw_method == 3
+    " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc)
+"    call Decho("obtain via ftp+mipf (method #3)")
+    call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars()
+    let tmpbufnr= bufnr("%")
+    setl ff=unix
 
     if exists("g:netrw_port") && g:netrw_port != ""
      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho("filter input: ".getline('.'))
+"     call Decho("filter input: ".getline('$'))
     else
      keepj put ='open '.g:netrw_machine
-"     call Decho("filter input: ".getline('.'))
+"     call Decho("filter input: ".getline('$'))
     endif
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     keepj put =g:netrw_uid
-"     call Decho("filter input: ".getline('.'))
-     keepj put ='\"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('.'))
-    else
-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('.'))
+
+    if exists("g:netrw_uid") && g:netrw_uid != ""
+     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+      keepj put =g:netrw_uid
+"      call Decho("filter input: ".getline('$'))
+      if exists("s:netrw_passwd") && s:netrw_passwd != ""
+       keepj put ='\"'.s:netrw_passwd.'\"'
+      endif
+"      call Decho("filter input: ".getline('$'))
+     elseif exists("s:netrw_passwd")
+      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"      call Decho("filter input: ".getline('$'))
+     endif
     endif
-    keepj put =g:netrw_ftpmode
-"    call Decho("filter input: ".getline('$'))
+
+    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+     keepj put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("b:netrw_fname") && b:netrw_fname != ""
+     keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+"     call Decho("filter input: ".getline('$'))
+    endif
+
     if exists("g:netrw_ftpextracmd")
      keepj put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline("$"))
+"     call Decho("filter input: ".getline('$'))
     endif
-    keepj put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
-"    call Decho("filter input: ".getline('.'))
-    " save choice/id/password for future use
-    let b:netrw_lastfile = choice
+
+    if exists("g:netrw_ftpextracmd")
+     keepj put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline('$'))
+    endif
+    for fname in fnamelist
+     keepj call setline(line("$")+1,'get "'.fname.'"')
+    endfor
+"    call Decho("filter input: ".getline('$'))
 
     " perform ftp:
     " -i       : turns off interactive prompting from ftp
     " -n  unix : DON'T use <.netrc>, even though it exists
     " -n  win32: quit being obnoxious about password
     keepj norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
-    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
     if getline(1) !~ "^$"
-     if  !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),15)
+"     call Decho("error<".getline(1).">")
+     if !exists("g:netrw_quiet")
+      keepj call netrw#ErrorMsg(s:ERROR,getline(1),5)
      endif
-     let mod=1
     endif
+   elseif !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetrwObtain : unsupported method")
+    return
+   endif
 
-    " remove enew buffer (quietly)
-    let filtbuf= bufnr("%")
-    exe curbuf."b!"
-    let &l:bh= bhkeep
-    exe filtbuf."bw!"
-
-   ".........................................
-   " NetWrite: (scp) NetWrite Method #4 {{{3
-   elseif     b:netrw_method == 4
-"    call Decho("write via scp (method #4)")
-    if exists("g:netrw_port") && g:netrw_port != ""
-     let useport= " ".g:netrw_scpport." ".fnameescape(g:netrw_port)
-    else
-     let useport= ""
-    endif
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
-    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
-    let b:netrw_lastfile = choice
+   " restore status line
+   if type(a:fname) == 1 && exists("s:netrw_users_stl")
+    keepj call s:SetupNetrwStatusLine(s:netrw_users_stl)
+   endif
 
-   ".........................................
-   " NetWrite: (http) NetWrite Method #5 {{{3
-   elseif     b:netrw_method == 5
-"    call Decho("write via http (method #5)")
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:ERROR,"currently <netrw.vim> does not support writing using http:",16)
-    endif
+  endif
 
-   ".........................................
-   " NetWrite: (dav) NetWrite Method #6 (cadaver) {{{3
-   elseif     b:netrw_method == 6
-"    call Decho("write via cadaver (method #6)")
+  " cleanup
+  if exists("tmpbufnr")
+   if bufnr("%") != tmpbufnr
+    exe tmpbufnr."bw!"
+   else
+    q!
+   endif
+  endif
 
-    " Construct execution string (four lines) which will be passed through filter
-    let netrw_fname = escape(b:netrw_fname,g:netrw_fname_escape)
-    let bhkeep      = &l:bh
+"  call Dret("netrw#NetrwObtain")
+endfun
 
-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
-    let curbuf      = bufnr("%")
-    setlocal bh=hide
-    enew
+" ---------------------------------------------------------------------
+" NetrwStatusLine: {{{2
+fun! NetrwStatusLine()
 
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-    else
-     keepj put ='open '.g:netrw_machine
-    endif
-    if exists("g:netrw_uid") && exists("s:netrw_passwd")
-     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
-    endif
-    keepj put ='put '.tmpfile.' '.netrw_fname
+" vvv NetrwStatusLine() debugging vvv
+"  let g:stlmsg=""
+"  if !exists("w:netrw_explore_bufnr")
+"   let g:stlmsg="!X<explore_bufnr>"
+"  elseif w:netrw_explore_bufnr != bufnr("%")
+"   let g:stlmsg="explore_bufnr!=".bufnr("%")
+"  endif
+"  if !exists("w:netrw_explore_line")
+"   let g:stlmsg=" !X<explore_line>"
+"  elseif w:netrw_explore_line != line(".")
+"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
+"  endif
+"  if !exists("w:netrw_explore_list")
+"   let g:stlmsg=" !X<explore_list>"
+"  endif
+" ^^^ NetrwStatusLine() debugging ^^^
 
-    " perform cadaver operation:
-    keepj norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_dav_cmd)
-    exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
+  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
+   " restore user's status line
+   let &stl        = s:netrw_users_stl
+   let &laststatus = s:netrw_users_ls
+   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
+   if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif
+   return ""
+  else
+   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
+  endif
+endfun
 
-    " remove enew buffer (quietly)
-    let filtbuf= bufnr("%")
-    exe curbuf."b!"
-    let &l:bh            = bhkeep
-    exe filtbuf."bw!"
+" ---------------------------------------------------------------------
+"  Netrw Transfer Functions: {{{1
+" ===============================
 
-    let b:netrw_lastfile = choice
+" ------------------------------------------------------------------------
+" netrw#NetRead: responsible for reading a file over the net {{{2
+"   mode: =0 read remote file and insert before current line
+"         =1 read remote file and insert after current line
+"         =2 replace with remote file
+"         =3 obtain file, but leave in temporary format
+fun! netrw#NetRead(mode,...)
+"  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw.((a:0 > 0)? " a:1<".a:1.">" : ""))
 
-   ".........................................
-   " NetWrite: (rsync) NetWrite Method #7 {{{3
-   elseif     b:netrw_method == 7
-"    call Decho("write via rsync (method #7)")
-"    call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
-    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
-    let b:netrw_lastfile = choice
+  " NetRead: save options {{{3
+  call s:NetrwOptionSave("w:")
+  call s:NetrwSafeOptions()
+  call s:RestoreCursorline()
 
-   ".........................................
-   " NetWrite: (sftp) NetWrite Method #9 {{{3
-   elseif     b:netrw_method == 9
-"    call Decho("read via sftp (method #9)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-    else
-     let uid_machine = g:netrw_machine
-    endif
-
-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
-    let bhkeep = &l:bh
-    let curbuf = bufnr("%")
-    setlocal bh=hide
-    enew
-
-    setlocal ff=unix
-    call setline(1,'put "'.escape(tmpfile,'\').'" '.netrw_fname)
-"    call Decho("filter input: ".getline('.'))
-"    call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
-    exe s:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1)
-    let filtbuf= bufnr("%")
-    exe curbuf."b!"
-    let &l:bh            = bhkeep
-    exe filtbuf."bw!"
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " NetWrite: Complain {{{3
-   else
-    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
-   endif
-  endwhile
-
-  " NetWrite: Cleanup: {{{3
-"  call Decho("cleanup")
-  if s:FileReadable(tmpfile)
-"   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
-   call s:NetrwDelete(tmpfile)
-  endif
-  call s:NetrwOptionRestore("w:")
-
-  if a:firstline == 1 && a:lastline == line("$")
-   " restore modifiability; usually equivalent to set nomod
-   let &mod= mod
-  endif
-
-  " restore equalalways
-"  call Dret("netrw#NetWrite")
-endfun
-
-" ---------------------------------------------------------------------
-" netrw#NetSource: source a remotely hosted vim script {{{2
-" uses NetRead to get a copy of the file into a temporarily file,
-"              then sources that file,
-"              then removes that file.
-fun! netrw#NetSource(...)
-"  call Dfunc("netrw#NetSource() a:0=".a:0)
-  if a:0 > 0 && a:1 == '?'
-   " give help
-   echomsg 'NetSource Usage:'
-   echomsg ':Nsource dav://machine[:port]/path            uses cadaver'
-   echomsg ':Nsource fetch://machine/path                 uses fetch'
-   echomsg ':Nsource ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
-   echomsg ':Nsource http://[user@]machine/path           uses http  wget'
-   echomsg ':Nsource rcp://[user@]machine/path            uses rcp'
-   echomsg ':Nsource rsync://machine[:port]/path          uses rsync'
-   echomsg ':Nsource scp://[user@]machine[[:#]port]/path  uses scp'
-   echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp'
-   sleep 4
+  " NetRead: interpret mode into a readcmd {{{3
+  if     a:mode == 0 " read remote file before current line
+   let readcmd = "0r"
+  elseif a:mode == 1 " read file after current line
+   let readcmd = "r"
+  elseif a:mode == 2 " replace with remote file
+   let readcmd = "%r"
+  elseif a:mode == 3 " skip read of file (leave as temporary)
+   let readcmd = "t"
   else
-   let i= 1
-   while i <= a:0
-    call netrw#NetRead(3,a:{i})
-"    call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">")
-    if s:FileReadable(s:netrw_tmpfile)
-"     call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile))
-     exe "so ".fnameescape(s:netrw_tmpfile)
-"     call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")")
-     call delete(s:netrw_tmpfile)
-     unlet s:netrw_tmpfile
-    else
-     call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48)
-    endif
-    let i= i + 1
-   endwhile
+   exe a:mode
+   let readcmd = "r"
   endif
-"  call Dret("netrw#NetSource")
-endfun
-
-" ===========================================
-" s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
-"    readcmd == %r : replace buffer with newly read file
-"            == 0r : read file at top of buffer
-"            == r  : read file after current line
-"            == t  : leave file in temporary form (ie. don't read into buffer)
-fun! s:NetrwGetFile(readcmd, tfile, method)
-"  call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
+  let ichoice = (a:0 == 0)? 0 : 1
+"  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
 
-  " readcmd=='t': simply do nothing
-  if a:readcmd == 't'
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"   call Dret("NetrwGetFile : skip read of <".a:tfile.">")
+  " NetRead: get temporary filename {{{3
+  let tmpfile= s:GetTempfile("")
+  if tmpfile == ""
+"   call Dret("netrw#NetRead : unable to get a tempfile!")
    return
   endif
 
-  " get name of remote filename (ie. url and all)
-  let rfile= bufname("%")
-"  call Decho("rfile<".rfile.">")
-
-  if exists("*NetReadFixup")
-   " for the use of NetReadFixup (not otherwise used internally)
-   let line2= line("$")
-  endif
-
-  if a:readcmd[0] == '%'
-  " get file into buffer
-"   call Decho("get file into buffer")
+  while ichoice <= a:0
 
-   " rename the current buffer to the temp file (ie. tfile)
-   if g:netrw_cygwin
-    let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','')
-   else
-    let tfile= a:tfile
-   endif
-"   call Decho("exe sil! keepalt file ".fnameescape(tfile))
-   exe "sil! keepalt file ".fnameescape(tfile)
+   " attempt to repeat with previous host-file-etc
+   if exists("b:netrw_lastfile") && a:0 == 0
+"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+    let choice = b:netrw_lastfile
+    let ichoice= ichoice + 1
 
-   " edit temporary file (ie. read the temporary file in)
-   if     rfile =~ '\.zip$'
-"    call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)")
-    call zip#Browse(tfile)
-   elseif rfile =~ '\.tar$'
-"    call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)")
-    call tar#Browse(tfile)
-   elseif rfile =~ '\.tar\.gz$'
-"    call Decho("handling remote gzip-compressed tar file")
-    call tar#Browse(tfile)
-   elseif rfile =~ '\.tar\.bz2$'
-"    call Decho("handling remote bz2-compressed tar file")
-    call tar#Browse(tfile)
-   elseif rfile =~ '\.tar\.xz$'
-"    call Decho("handling remote xz-compressed tar file")
-    call tar#Browse(tfile)
-   elseif rfile =~ '\.txz$'
-"    call Decho("handling remote xz-compressed tar file (.txz)")
-    call tar#Browse(tfile)
    else
-"    call Decho("edit temporary file")
-    e!
-   endif
-
-   " rename buffer back to remote filename
-"   call Decho("exe sil! keepalt file ".fnameescape(rfile))
-   exe "sil! keepalt file ".fnameescape(rfile)
-   filetype detect
-"   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
-   let line1 = 1
-   let line2 = line("$")
+    exe "let choice= a:" . ichoice
+"    call Decho("no lastfile: choice<" . choice . ">")
 
-  elseif s:FileReadable(a:tfile)
-   " read file after current line
-"   call Decho("read file<".a:tfile."> after current line")
-   let curline = line(".")
-   let lastline= line("$")
-"   call Decho("exe<".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile).">  line#".curline)
-   exe a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)
-   let line1= curline + 1
-   let line2= line("$") - lastline + 1
+    if match(choice,"?") == 0
+     " give help
+     echomsg 'NetRead Usage:'
+     echomsg ':Nread machine:path                         uses rcp'
+     echomsg ':Nread "machine path"                       uses ftp   with <.netrc>'
+     echomsg ':Nread "machine id password path"           uses ftp'
+     echomsg ':Nread dav://machine[:port]/path            uses cadaver'
+     echomsg ':Nread fetch://machine/path                 uses fetch'
+     echomsg ':Nread ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
+     echomsg ':Nread http://[user@]machine/path           uses http  wget'
+     echomsg ':Nread rcp://[user@]machine/path            uses rcp'
+     echomsg ':Nread rsync://machine[:port]/path          uses rsync'
+     echomsg ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
+     echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
+     sleep 4
+     break
 
-  else
-   " not readable
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"   call Decho("tfile<".a:tfile."> not readable")
-   call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
-"   call Dret("NetrwGetFile : tfile<".a:tfile."> not readable")
-   return
-  endif
+    elseif match(choice,'^"') != -1
+     " Reconstruct Choice if choice starts with '"'
+"     call Decho("reconstructing choice")
+     if match(choice,'"$') != -1
+      " case "..."
+      let choice= strpart(choice,1,strlen(choice)-2)
+     else
+       "  case "... ... ..."
+      let choice      = strpart(choice,1,strlen(choice)-1)
+      let wholechoice = ""
 
-  " User-provided (ie. optional) fix-it-up command
-  if exists("*NetReadFixup")
-"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
-   call NetReadFixup(a:method, line1, line2)
-"  else " Decho
-"   call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
-  endif
+      while match(choice,'"$') == -1
+       let wholechoice = wholechoice . " " . choice
+       let ichoice     = ichoice + 1
+       if ichoice > a:0
+               if !exists("g:netrw_quiet")
+        call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3)
+       endif
+"        call Dret("netrw#NetRead :2 getcwd<".getcwd().">")
+        return
+       endif
+       let choice= a:{ichoice}
+      endwhile
+      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+     endif
+    endif
+   endif
 
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
-   " update the Buffers menu
-   call s:UpdateBuffersMenu()
-  endif
+"   call Decho("choice<" . choice . ">")
+   let ichoice= ichoice + 1
 
-"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile))
+   " NetRead: Determine method of read (ftp, rcp, etc) {{{3
+   call s:NetrwMethod(choice)
+   if !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetRead : unsupported method")
+    return
+   endif
+   let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
 
- " make sure file is being displayed
-"  redraw!
+   " Check if NetrwBrowse() should be handling this request
+"   call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
+   if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^https\=://'
+"    call Decho("yes, choice matches '^.*[\/]$'")
+    keepj call s:NetrwBrowse(0,choice)
+"    call Dret("netrw#NetRead :3 getcwd<".getcwd().">")
+    return
+   endif
 
-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"  call Dret("NetrwGetFile")
-endfun
+   " ============
+   " NetRead: Perform Protocol-Based Read {{{3
+   " ===========================
+   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
+    echo "(netrw) Processing your read request..."
+   endif
 
-" ------------------------------------------------------------------------
-" s:NetrwMethod:  determine method of transfer {{{2
-" Input:
-"   choice = url   [protocol:]//[userid@]hostname[:port]/[path-to-file]
-" Output:
-"  b:netrw_method= 1: rcp                                             
-"                  2: ftp + <.netrc>                                  
-"                 3: ftp + machine, id, password, and [path]filename 
-"                 4: scp                                             
-"                 5: http (wget)                                     
-"                 6: dav
-"                 7: rsync                                           
-"                 8: fetch                                           
-"                 9: sftp                                            
-"  g:netrw_machine= hostname
-"  b:netrw_fname  = filename
-"  g:netrw_port   = optional port number (for ftp)
-"  g:netrw_choice = copy of input url (choice)
-fun! s:NetrwMethod(choice)
-"   call Dfunc("NetrwMethod(a:choice<".a:choice.">)")
-
-   " record current g:netrw_machine, if any
-   " curmachine used if protocol == ftp and no .netrc
-   if exists("g:netrw_machine")
-    let curmachine= g:netrw_machine
-"    call Decho("curmachine<".curmachine.">")
+   ".........................................
+   " NetRead: (rcp)  NetRead Method #1 {{{3
+   if  b:netrw_method == 1 " read with rcp
+"    call Decho("read via rcp (method #1)")
+   " ER: nothing done with g:netrw_uid yet?
+   " ER: on Win2K" rcp machine[.user]:file tmpfile
+   " ER: if machine contains '.' adding .user is required (use $USERNAME)
+   " ER: the tmpfile is full path: rcp sees C:\... as host C
+   if s:netrw_has_nt_rcp == 1
+    if exists("g:netrw_uid") &&        ( g:netrw_uid != "" )
+     let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+    else
+     " Any way needed it machine contains a '.'
+     let uid_machine = g:netrw_machine .'.'. $USERNAME
+    endif
    else
-    let curmachine= "N O T A HOST"
+    if exists("g:netrw_uid") &&        ( g:netrw_uid != "" )
+     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+    else
+     let uid_machine = g:netrw_machine
+    endif
    endif
+"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+   let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+   let b:netrw_lastfile = choice
 
-  " initialization
-  let b:netrw_method  = 0
-  let g:netrw_machine = ""
-  let b:netrw_fname   = ""
-  let g:netrw_port    = ""
-  let g:netrw_choice  = a:choice
-
-  " Patterns:
-  " mipf     : a:machine a:id password filename             Use ftp
-  " mf     : a:machine filename                     Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
-  " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
-  " rcpurm   : rcp://[user@]host/filename           Use rcp
-  " rcphf    : [user@]host:filename                 Use rcp
-  " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
-  " httpurm  : http://[user@]host/filename          Use wget
-  " davurm   : dav[s]://host[:port]/path             Use cadaver/curl
-  " rsyncurm : rsync://host[:port]/path              Use rsync
-  " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
-  " sftpurm  : sftp://[user@]host/filename  Use scp
-  let mipf     = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
-  let mf       = '^\(\S\+\)\s\+\(\S\+\)$'
-  let ftpurm   = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
-  let rcpurm   = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
-  let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
-  let scpurm   = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$'
-  let httpurm  = '^http://\([^/]\{-}\)\(/.*\)\=$'
-  let davurm   = '^davs\=://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
-  let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
-  let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
-  let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
-
-"  call Decho("determine method:")
-  " Determine Method
-  " rcp://user@hostname/...path-to-file
-  if match(a:choice,rcpurm) == 0
-"   call Decho("rcp://...")
-   let b:netrw_method  = 1
-   let userid          = substitute(a:choice,rcpurm,'\1',"")
-   let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
-   let b:netrw_fname   = substitute(a:choice,rcpurm,'\3',"")
-   if userid != ""
-    let g:netrw_uid= userid
-   endif
+   ".........................................
+   " NetRead: (ftp + <.netrc>)  NetRead Method #2 {{{3
+   elseif b:netrw_method  == 2         " read with ftp + <.netrc>
+"     call Decho("read via ftp+.netrc (method #2)")
+     let netrw_fname= b:netrw_fname
+     keepj call s:SaveBufVars()|new|keepj call s:RestoreBufVars()
+     let filtbuf= bufnr("%")
+     setl ff=unix
+     keepj put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline(line("$")))
+     if exists("g:netrw_ftpextracmd")
+      keepj put =g:netrw_ftpextracmd
+"      call Decho("filter input: ".getline(line("$")))
+     endif
+     call setline(line("$")+1,'get "'.netrw_fname.'" '.tmpfile)
+"     call Decho("filter input: ".getline(line("$")))
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+     else
+"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+     endif
+     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+      let debugkeep = &debug
+      setl debug=msg
+      keepj call netrw#ErrorMsg(s:ERROR,getline(1),4)
+      let &debug    = debugkeep
+     endif
+     call s:SaveBufVars()
+     bd!
+     if bufname("%") == "" && getline("$") == "" && line('$') == 1
+      " needed when one sources a file in a nolbl setting window via ftp
+      q!
+     endif
+     call s:RestoreBufVars()
+     let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+     let b:netrw_lastfile = choice
 
-  " scp://user@hostname/...path-to-file
-  elseif match(a:choice,scpurm) == 0
-"   call Decho("scp://...")
-   let b:netrw_method  = 4
-   let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
-   let g:netrw_port    = substitute(a:choice,scpurm,'\2',"")
-   let b:netrw_fname   = substitute(a:choice,scpurm,'\3',"")
+   ".........................................
+   " NetRead: (ftp + machine,id,passwd,filename)  NetRead Method #3 {{{3
+   elseif b:netrw_method == 3          " read with ftp + machine, id, passwd, and fname
+    " Construct execution string (four lines) which will be passed through filter
+"    call Decho("read via ftp+mipf (method #3)")
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+    keepj call s:SaveBufVars()|new|keepj call s:RestoreBufVars()
+    let filtbuf= bufnr("%")
+    setl ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+"     call Decho("filter input: ".getline('.'))
+    else
+     keepj put ='open '.g:netrw_machine
+"     call Decho("filter input: ".getline('.'))
+    endif
 
-  " http://user@hostname/...path-to-file
-  elseif match(a:choice,httpurm) == 0
-"   call Decho("http://...")
-   let b:netrw_method = 5
-   let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
-   let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
+    if exists("g:netrw_uid") && g:netrw_uid != ""
+     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+      keepj put =g:netrw_uid
+"       call Decho("filter input: ".getline('.'))
+      if exists("s:netrw_passwd")
+       keepj put ='\"'.s:netrw_passwd.'\"'
+      endif
+"      call Decho("filter input: ".getline('.'))
+     elseif exists("s:netrw_passwd")
+      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"      call Decho("filter input: ".getline('.'))
+     endif
+    endif
 
-  " dav://hostname[:port]/..path-to-file..
-  elseif match(a:choice,davurm) == 0
-"   call Decho("dav://...")
-   let b:netrw_method= 6
-   if a:choice =~ '^s'
-    let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
-   else
-    let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
-   endif
-   let b:netrw_fname  = substitute(a:choice,davurm,'\3',"")
+    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+     keepj put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline('.'))
+    endif
+    if exists("g:netrw_ftpextracmd")
+     keepj put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline('.'))
+    endif
+    keepj put ='get \"'.netrw_fname.'\" '.tmpfile
+"    call Decho("filter input: ".getline('.'))
 
-  " rsync://user@hostname/...path-to-file
-  elseif match(a:choice,rsyncurm) == 0
-"   call Decho("rsync://...")
-   let b:netrw_method = 7
-   let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
-   let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+    keepj norm! 1Gdd
+"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+"     call Decho("error<".getline(1).">")
+     if !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,getline(1),5)
+     endif
+    endif
+    call s:SaveBufVars()|bd!|call s:RestoreBufVars()
+    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
 
-  " ftp://[user@]hostname[[:#]port]/...path-to-file
-  elseif match(a:choice,ftpurm) == 0
-"   call Decho("ftp://...")
-   let userid        = substitute(a:choice,ftpurm,'\2',"")
-   let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
-   let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
-   let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
-"   call Decho("g:netrw_machine<".g:netrw_machine.">")
-   if userid != ""
-    let g:netrw_uid= userid
-   endif
-   if exists("s:netrw_passwd") && curmachine != g:netrw_machine
-    " if there's a change in hostname, require password re-entry
-    unlet s:netrw_passwd
-   endif
-   if exists("g:netrw_uid") && exists("s:netrw_passwd")
-    let b:netrw_method = 3
-   else
-    if s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc
-     let b:netrw_method= 2
+   ".........................................
+   " NetRead: (scp) NetRead Method #4 {{{3
+   elseif     b:netrw_method  == 4     " read with scp
+"    call Decho("read via scp (method #4)")
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " ".g:netrw_scpport." ".g:netrw_port
     else
-     if !exists("g:netrw_uid") || g:netrw_uid == ""
-      call NetUserPass()
-     elseif !exists("s:netrw_passwd") || s:netrw_passwd == ""
-      call NetUserPass(g:netrw_uid)
-    " else just use current g:netrw_uid and s:netrw_passwd
-     endif
-     let b:netrw_method= 3
+     let useport= ""
     endif
-   endif
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
 
-  elseif match(a:choice,fetchurm) == 0
-"   call Decho("fetch://...")
-   let b:netrw_method = 8
-   let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
-   let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
-   let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
-   let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
+   ".........................................
+   " NetRead: (http) NetRead Method #5 (wget) {{{3
+   elseif     b:netrw_method  == 5
+"    call Decho("read via http (method #5)")
+    if g:netrw_http_cmd == ""
+     if !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6)
+     endif
+"     call Dret("netrw#NetRead :4 getcwd<".getcwd().">")
+     return
+    endif
 
-  " Issue an ftp : "machine id password [path/]filename"
-  elseif match(a:choice,mipf) == 0
-"   call Decho("(ftp) host id pass file")
-   let b:netrw_method  = 3
-   let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
-   let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
-   let s:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
-   let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
+    if match(b:netrw_fname,"#") == -1 || exists("g:netrw_http_xcmd")
+     " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch)
+"     call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)")
+     if exists("g:netrw_http_xcmd")
+"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1))
+      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)
+     else
+"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1))
+      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)
+     endif
+     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
 
-  " Issue an ftp: "hostname [path/]filename"
-  elseif match(a:choice,mf) == 0
-"   call Decho("(ftp) host file")
-   if exists("g:netrw_uid") && exists("s:netrw_passwd")
-    let b:netrw_method  = 3
-    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
-    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
+    else
+     " wget/curl/fetch plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
+"     call Decho("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)")
+     let netrw_html= substitute(b:netrw_fname,"#.*$","","")
+     let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
+"     call Decho("netrw_html<".netrw_html.">")
+"     call Decho("netrw_tag <".netrw_tag.">")
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1))
+     exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)
+     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+"     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
+     exe 'keepj norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
+    endif
+    let b:netrw_lastfile = choice
+"    call Decho("(NetRead) setl ro")
+    setl ro
 
-   elseif s:FileReadable(expand("$HOME/.netrc"))
-    let b:netrw_method  = 2
-    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
-    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
-   endif
+   ".........................................
+   " NetRead: (dav) NetRead Method #6 {{{3
+   elseif     b:netrw_method  == 6
+"    call Decho("read via cadaver (method #6)")
 
-  " sftp://user@hostname/...path-to-file
-  elseif match(a:choice,sftpurm) == 0
-"   call Decho("sftp://...")
-   let b:netrw_method = 9
-   let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
-   let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
+    if !executable(g:netrw_dav_cmd)
+     call netrw#ErrorMsg(s:ERROR,g:netrw_dav_cmd." is not executable",73)
+"     call Dret("netrw#NetRead : ".g:netrw_dav_cmd." not executable")
+     return
+    endif
+    if g:netrw_dav_cmd =~ "curl"
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1))
+     exe s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1)
+    else
+     " Construct execution string (four lines) which will be passed through filter
+     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+     new
+     setl ff=unix
+     if exists("g:netrw_port") && g:netrw_port != ""
+      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+     else
+      keepj put ='open '.g:netrw_machine
+     endif
+     if exists("g:netrw_uid") && exists("s:netrw_passwd") && g:netrw_uid != ""
+      keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
+     endif
+     keepj put ='get '.netrw_fname.' '.tmpfile
+     keepj put ='quit'
 
-  " Issue an rcp: hostname:filename"  (this one should be last)
-  elseif match(a:choice,rcphf) == 0
-"   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
-   let b:netrw_method  = 1
-   let userid          = substitute(a:choice,rcphf,'\2',"")
-   let g:netrw_machine = substitute(a:choice,rcphf,'\3',"")
-   let b:netrw_fname   = substitute(a:choice,rcphf,'\4',"")
-"   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
-"   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
-"   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
-"   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
-   if userid != ""
-    let g:netrw_uid= userid
-   endif
+     " perform cadaver operation:
+     keepj norm! 1Gdd
+"    call Decho("executing: %!".g:netrw_dav_cmd)
+     exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
+     bd!
+    endif
+    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
 
-  else
-   if !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45)
+   ".........................................
+   " NetRead: (rsync) NetRead Method #7 {{{3
+   elseif     b:netrw_method  == 7
+"    call Decho("read via rsync (method #7)")
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+    let result          = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetRead: (fetch) NetRead Method #8 {{{3
+   "    fetch://[user@]host[:http]/path
+   elseif     b:netrw_method  == 8
+"    call Decho("read via fetch (method #8)")
+    if g:netrw_fetch_cmd == ""
+     if !exists("g:netrw_quiet")
+      keepj call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
+     endif
+"     call Dret("NetRead")
+     return
+    endif
+    if exists("g:netrw_option") && g:netrw_option == ":https\="
+     let netrw_option= "http"
+    else
+     let netrw_option= "ftp"
+    endif
+"    call Decho("read via fetch for ".netrw_option)
+
+    if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != ""
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1))
+     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1)
+    else
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1))
+     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1)
+    endif
+
+    let result         = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+"    call Decho("(NetRead) setl ro")
+    setl ro
+
+   ".........................................
+   " NetRead: (sftp) NetRead Method #9 {{{3
+   elseif     b:netrw_method  == 9
+"    call Decho("read via sftp (method #9)")
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
+    exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile
+    let result         = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetRead: Complain {{{3
+   else
+    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
    endif
-   let b:netrw_method  = -1
-  endif
+  endwhile
 
-  " remove any leading [:#] from port number
-  if g:netrw_port != ""
-    let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
+  " NetRead: cleanup {{{3
+  if exists("b:netrw_method")
+"   call Decho("cleanup b:netrw_method and b:netrw_fname")
+   unlet b:netrw_method
+   unlet b:netrw_fname
+  endif
+  if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' && tmpfile !~ '.tar.xz$' && tmpfile !~ '.txz'
+"   call Decho("cleanup by deleting tmpfile<".tmpfile.">")
+   keepj call s:NetrwDelete(tmpfile)
   endif
+  keepj call s:NetrwOptionRestore("w:")
 
-"  call Decho("a:choice       <".a:choice.">")
-"  call Decho("b:netrw_method <".b:netrw_method.">")
-"  call Decho("g:netrw_machine<".g:netrw_machine.">")
-"  call Decho("g:netrw_port   <".g:netrw_port.">")
-"  if exists("g:netrw_uid")            "Decho
-"   call Decho("g:netrw_uid    <".g:netrw_uid.">")
-"  endif                                       "Decho
-"  if exists("s:netrw_passwd")         "Decho
-"   call Decho("s:netrw_passwd <".s:netrw_passwd.">")
-"  endif                                       "Decho
-"  call Decho("b:netrw_fname  <".b:netrw_fname.">")
-"  call Dret("NetrwMethod : b:netrw_method=".b:netrw_method)
+"  call Dret("netrw#NetRead :5 getcwd<".getcwd().">")
 endfun
 
 " ------------------------------------------------------------------------
-" NetReadFixup: this sort of function is typically written by the user {{{2
-"               to handle extra junk that their system's ftp dumps
-"               into the transfer.  This function is provided as an
-"               example and as a fix for a Windows 95 problem: in my
-"               experience, win95's ftp always dumped four blank lines
-"               at the end of the transfer.
-if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
- fun! NetReadFixup(method, line1, line2)
-"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
+" netrw#NetWrite: responsible for writing a file over the net {{{2
+fun! netrw#NetWrite(...) range
+"  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
 
-   " sanity checks -- attempt to convert inputs to integers
-   let method = a:method + 0
-   let line1  = a:line1 + 0
-   let line2  = a:line2 + 0
-   if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0
-"    call Dret("NetReadFixup")
-    return
-   endif
+  " NetWrite: option handling {{{3
+  let mod= 0
+  call s:NetrwOptionSave("w:")
+  call s:NetrwSafeOptions()
 
-   if method == 3   " ftp (no <.netrc>)
-    let fourblanklines= line2 - 3
-    if fourblanklines >= line1
-     exe "sil keepj ".fourblanklines.",".line2."g/^\s*$/d"
-     call histdel("/",-1)
-    endif
-   endif
+  " NetWrite: Get Temporary Filename {{{3
+  let tmpfile= s:GetTempfile("")
+  if tmpfile == ""
+"   call Dret("netrw#NetWrite : unable to get a tempfile!")
+   return
+  endif
 
-"   call Dret("NetReadFixup")
- endfun
-endif
+  if a:0 == 0
+   let ichoice = 0
+  else
+   let ichoice = 1
+  endif
 
-" ---------------------------------------------------------------------
-" NetUserPass: set username and password for subsequent ftp transfer {{{2
-"   Usage:  :call NetUserPass()                        -- will prompt for userid and password
-"          :call NetUserPass("uid")            -- will prompt for password
-"          :call NetUserPass("uid","password") -- sets global userid and password
-fun! NetUserPass(...)
+  let curbufname= expand("%")
+"  call Decho("curbufname<".curbufname.">")
+  if &binary
+   " For binary writes, always write entire file.
+   " (line numbers don't really make sense for that).
+   " Also supports the writing of tar and zip files.
+"   call Decho("(write entire file) sil exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
+   exe "sil keepj w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+  elseif g:netrw_cygwin
+   " write (selected portion of) file to temporary
+   let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
+"   call Decho("(write selected portion) sil exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile))
+   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)
+  else
+   " write (selected portion of) file to temporary
+"   call Decho("(write selected portion) sil exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
+   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+  endif
 
- " get/set userid
- if a:0 == 0
-"  call Dfunc("NetUserPass(a:0<".a:0.">)")
-  if !exists("g:netrw_uid") || g:netrw_uid == ""
-   " via prompt
-   let g:netrw_uid= input('Enter username: ')
+  if curbufname == ""
+   " if the file is [No Name], and one attempts to Nwrite it, the buffer takes
+   " on the temporary file's name.  Deletion of the temporary file during
+   " cleanup then causes an error message.
+   0file!
   endif
- else  " from command line
-"  call Dfunc("NetUserPass(a:1<".a:1.">)")
-  let g:netrw_uid= a:1
- endif
 
- " get password
- if a:0 <= 1 " via prompt
-"  call Decho("a:0=".a:0." case <=1:")
-  let s:netrw_passwd= inputsecret("Enter Password: ")
- else " from command line
-"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
-  let s:netrw_passwd=a:2
- endif
+  " NetWrite: while choice loop: {{{3
+  while ichoice <= a:0
 
-"  call Dret("NetUserPass")
-endfun
+   " Process arguments: {{{4
+   " attempt to repeat with previous host-file-etc
+   if exists("b:netrw_lastfile") && a:0 == 0
+"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+    let choice = b:netrw_lastfile
+    let ichoice= ichoice + 1
+   else
+    exe "let choice= a:" . ichoice
 
-" ===========================================
-"  Shared Browsing Support:    {{{1
-" ===========================================
+    " Reconstruct Choice if choice starts with '"'
+    if match(choice,"?") == 0
+     echomsg 'NetWrite Usage:"'
+     echomsg ':Nwrite machine:path                        uses rcp'
+     echomsg ':Nwrite "machine path"                      uses ftp with <.netrc>'
+     echomsg ':Nwrite "machine id password path"          uses ftp'
+     echomsg ':Nwrite dav://[user@]machine/path           uses cadaver'
+     echomsg ':Nwrite fetch://[user@]machine/path         uses fetch'
+     echomsg ':Nwrite ftp://machine[#port]/path           uses ftp  (autodetects <.netrc>)'
+     echomsg ':Nwrite rcp://machine/path                  uses rcp'
+     echomsg ':Nwrite rsync://[user@]machine/path         uses rsync'
+     echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
+     echomsg ':Nwrite sftp://[user@]machine/path          uses sftp'
+     sleep 4
+     break
 
-" ---------------------------------------------------------------------
-" s:BrowserMaps: {{{2
-fun! s:BrowserMaps(islocal)
-"  call Dfunc("s:BrowserMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
-  if a:islocal
-"   call Decho("make local maps")
-   nnoremap <buffer> <silent> <cr>     :call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
-   nnoremap <buffer> <silent> -                :exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
-   nnoremap <buffer> <silent> a                :call <SID>NetrwHide(1)<cr>
-   nnoremap <buffer> <silent> mb       :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mc       :<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
-   nnoremap <buffer> <silent> md       :<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
-   nnoremap <buffer> <silent> me       :<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
-   nnoremap <buffer> <silent> mf       :<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> mg       :<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
-   nnoremap <buffer> <silent> mh       :<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
-   nnoremap <buffer> <silent> mm       :<c-u>call <SID>NetrwMarkFileMove(1)<cr>
-   nnoremap <buffer> <silent> mp       :<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
-   nnoremap <buffer> <silent> mr       :<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
-   nnoremap <buffer> <silent> ms       :<c-u>call <SID>NetrwMarkFileSource(1)<cr>
-   nnoremap <buffer> <silent> mT       :<c-u>call <SID>NetrwMarkFileTag(1)<cr>
-   nnoremap <buffer> <silent> mt       :<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
-   nnoremap <buffer> <silent> mu       :<c-u>call <SID>NetrwUnMarkFile(1)<cr>
-   nnoremap <buffer> <silent> mx       :<c-u>call <SID>NetrwMarkFileExe(1)<cr>
-   nnoremap <buffer> <silent> mz       :<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
-   nnoremap <buffer> <silent> gb       :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> gh       :<c-u>call <SID>NetrwHidden(1)<cr>
-   nnoremap <buffer> <silent> gp       :<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> c                :exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> C                :let g:netrw_chgwin= winnr()<cr>
-   nnoremap <buffer> <silent> d                :call <SID>NetrwMakeDir("")<cr>
-   nnoremap <buffer> <silent> i                :call <SID>NetrwListStyle(1)<cr>
-   nnoremap <buffer> <silent> I                :call <SID>NetrwBannerCtrl(1)<cr>
-   nnoremap <buffer> <silent> o                :call <SID>NetrwSplit(3)<cr>
-   nnoremap <buffer> <silent> O                :call <SID>NetrwObtain(1)<cr>
-   nnoremap <buffer> <silent> p                :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
-   nnoremap <buffer> <silent> P                :call <SID>NetrwPrevWinOpen(1)<cr>
-   nnoremap <buffer> <silent> qb       :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mB       :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> qf       :<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> r                :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
-   nnoremap <buffer> <silent> s                :call <SID>NetrwSortStyle(1)<cr>
-   nnoremap <buffer> <silent> S                :call <SID>NetSortSequence(1)<cr>
-   nnoremap <buffer> <silent> t                :call <SID>NetrwSplit(4)<cr>
-   nnoremap <buffer> <silent> T                :call <SID>NetrwSplit(4)<bar>norm! gT<cr>
-   nnoremap <buffer> <silent> u                :<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
-   nnoremap <buffer> <silent> U                :<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
-   nnoremap <buffer> <silent> v                :call <SID>NetrwSplit(5)<cr>
-   nnoremap <buffer> <silent> x                :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
-   nnoremap <buffer> <silent> %                :call <SID>NetrwOpenFile(1)<cr>
-   inoremap <buffer> <silent> <cr>     <c-o>:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
-   inoremap <buffer> <silent> -                <c-o>:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
-   inoremap <buffer> <silent> a                <c-o>:call <SID>NetrwHide(1)<cr>
-   inoremap <buffer> <silent> mb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> mc       <c-o>:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
-   inoremap <buffer> <silent> md       <c-o>:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
-   inoremap <buffer> <silent> me       <c-o>:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
-   inoremap <buffer> <silent> mf       <c-o>:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
-   inoremap <buffer> <silent> mg       <c-o>:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
-   inoremap <buffer> <silent> mh       <c-o>:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
-   inoremap <buffer> <silent> mm       <c-o>:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
-   inoremap <buffer> <silent> mp       <c-o>:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
-   inoremap <buffer> <silent> mr       <c-o>:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
-   inoremap <buffer> <silent> ms       <c-o>:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
-   inoremap <buffer> <silent> mT       <c-o>:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
-   inoremap <buffer> <silent> mt       <c-o>:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
-   inoremap <buffer> <silent> mu       <c-o>:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
-   inoremap <buffer> <silent> mx       <c-o>:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
-   inoremap <buffer> <silent> mz       <c-o>:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
-   inoremap <buffer> <silent> gb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> gh       <c-o>:<c-u>call <SID>NetrwHidden(1)<cr>
-   inoremap <buffer> <silent> gp       <c-o>:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> c                <c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> C                <c-o>:let g:netrw_chgwin= winnr()<cr>
-   inoremap <buffer> <silent> d                <c-o>:call <SID>NetrwMakeDir("")<cr>
-   inoremap <buffer> <silent> i                <c-o>:call <SID>NetrwListStyle(1)<cr>
-   inoremap <buffer> <silent> I                <c-o>:call <SID>NetrwBannerCtrl(1)<cr>
-   inoremap <buffer> <silent> o                <c-o>:call <SID>NetrwSplit(3)<cr>
-   inoremap <buffer> <silent> O                <c-o>:call <SID>NetrwObtain(1)<cr>
-   inoremap <buffer> <silent> p                <c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
-   inoremap <buffer> <silent> P                <c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
-   inoremap <buffer> <silent> qb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> mB       <c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> qf       <c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
-   inoremap <buffer> <silent> r                <c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
-   inoremap <buffer> <silent> s                <c-o>:call <SID>NetrwSortStyle(1)<cr>
-   inoremap <buffer> <silent> S                <c-o>:call <SID>NetSortSequence(1)<cr>
-   inoremap <buffer> <silent> t                <c-o>:call <SID>NetrwSplit(4)<cr>
-   inoremap <buffer> <silent> T                <c-o>:call <SID>NetrwSplit(4)<bar>norm! gT<cr>
-   inoremap <buffer> <silent> u                <c-o>:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
-   inoremap <buffer> <silent> U                <c-o>:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
-   inoremap <buffer> <silent> v                <c-o>:call <SID>NetrwSplit(5)<cr>
-   inoremap <buffer> <silent> x                <c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
-   inoremap <buffer> <silent> %                <c-o>:call <SID>NetrwOpenFile(1)<cr>
-   if !hasmapto('<Plug>NetrwHideEdit')
-    nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
-    imap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
-   endif
-   nnoremap <buffer> <silent> <Plug>NetrwHideEdit      :call <SID>NetrwHideEdit(1)<cr>
-   if !hasmapto('<Plug>NetrwRefresh')
-    nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
-    imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
+    elseif match(choice,"^\"") != -1
+     if match(choice,"\"$") != -1
+       " case "..."
+      let choice=strpart(choice,1,strlen(choice)-2)
+     else
+      "  case "... ... ..."
+      let choice      = strpart(choice,1,strlen(choice)-1)
+      let wholechoice = ""
+
+      while match(choice,"\"$") == -1
+       let wholechoice= wholechoice . " " . choice
+       let ichoice    = ichoice + 1
+       if choice > a:0
+               if !exists("g:netrw_quiet")
+        call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13)
+       endif
+"        call Dret("netrw#NetWrite")
+        return
+       endif
+       let choice= a:{ichoice}
+      endwhile
+      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+     endif
+    endif
    endif
-   nnoremap <buffer> <silent> <Plug>NetrwRefresh               :call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
-   if s:didstarstar || !mapcheck("<s-down>","n")
-    nnoremap <buffer> <silent> <s-down>        :Nexplore<cr>
-    inoremap <buffer> <silent> <s-down>        :Nexplore<cr>
+   let ichoice= ichoice + 1
+"   call Decho("choice<" . choice . "> ichoice=".ichoice)
+
+   " Determine method of write (ftp, rcp, etc) {{{4
+   keepj call s:NetrwMethod(choice)
+   if !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetWrite : unsupported method")
+    return
    endif
-   if s:didstarstar || !mapcheck("<s-up>","n")
-    nnoremap <buffer> <silent> <s-up>  :Pexplore<cr>
-    inoremap <buffer> <silent> <s-up>  :Pexplore<cr>
+
+   " =============
+   " NetWrite: Perform Protocol-Based Write {{{3
+   " ============================
+   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
+    echo "(netrw) Processing your write request..."
+"    call Decho("(netrw) Processing your write request...")
    endif
-   let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape)
-   if g:netrw_mousemaps == 1
-    nnoremap <buffer> <silent> <leftmouse>   <leftmouse>:call <SID>NetrwLeftmouse(1)<cr>
-    nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr>
-    nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
-    exe 'nnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-    exe 'vnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-    inoremap <buffer> <silent> <leftmouse>   <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(1)<cr>
-    inoremap <buffer> <silent> <middlemouse> <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
-    inoremap <buffer> <silent> <s-leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
-    exe 'inoremap <buffer> <silent> <rightmouse>  <c-o><leftmouse><c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+
+   ".........................................
+   " NetWrite: (rcp) NetWrite Method #1 {{{3
+   if  b:netrw_method == 1
+"    call Decho("write via rcp (method #1)")
+    if s:netrw_has_nt_rcp == 1
+     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+      let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+     else
+      let uid_machine = g:netrw_machine .'.'. $USERNAME
+     endif
+    else
+     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+     else
+      let uid_machine = g:netrw_machine
+     endif
+    endif
+"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1))
+    exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: (ftp + <.netrc>) NetWrite Method #2 {{{3
+   elseif b:netrw_method == 2
+"    call Decho("write via ftp+.netrc (method #2)")
+    let netrw_fname = b:netrw_fname
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let bhkeep      = &l:bh
+    let curbuf      = bufnr("%")
+    setl bh=hide
+    keepalt enew
+
+"    call Decho("filter input window#".winnr())
+    setl ff=unix
+    keepj put =g:netrw_ftpmode
+"    call Decho("filter input: ".getline('$'))
+    if exists("g:netrw_ftpextracmd")
+     keepj put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline("$"))
+    endif
+    keepj call setline(line("$")+1,'put "'.tmpfile.'" "'.netrw_fname.'"')
+"    call Decho("filter input: ".getline("$"))
+    if exists("g:netrw_port") && g:netrw_port != ""
+"     call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+     exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+    else
+"     call Decho("filter input window#".winnr())
+"     call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+     exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+    endif
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+     if !exists("g:netrw_quiet")
+      keepj call netrw#ErrorMsg(s:ERROR,getline(1),14)
+     endif
+     let mod=1
+    endif
+
+    " remove enew buffer (quietly)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh            = bhkeep
+    exe filtbuf."bw!"
+
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: (ftp + machine, id, passwd, filename) NetWrite Method #3 {{{3
+   elseif b:netrw_method == 3
+    " Construct execution string (three or more lines) which will be passed through filter
+"    call Decho("read via ftp+mipf (method #3)")
+    let netrw_fname = b:netrw_fname
+    let bhkeep      = &l:bh
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let curbuf      = bufnr("%")
+    setl bh=hide
+    keepalt enew
+    setl ff=unix
+
+    if exists("g:netrw_port") && g:netrw_port != ""
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+"     call Decho("filter input: ".getline('.'))
+    else
+     keepj put ='open '.g:netrw_machine
+"     call Decho("filter input: ".getline('.'))
+    endif
+    if exists("g:netrw_uid") && g:netrw_uid != ""
+     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+      keepj put =g:netrw_uid
+"      call Decho("filter input: ".getline('.'))
+      if exists("s:netrw_passwd") && s:netrw_passwd != ""
+       keepj put ='\"'.s:netrw_passwd.'\"'
+      endif
+"      call Decho("filter input: ".getline('.'))
+     elseif exists("s:netrw_passwd") && s:netrw_passwd != ""
+      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"      call Decho("filter input: ".getline('.'))
+     endif
+    endif
+    keepj put =g:netrw_ftpmode
+"    call Decho("filter input: ".getline('$'))
+    if exists("g:netrw_ftpextracmd")
+     keepj put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline("$"))
+    endif
+    keepj put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
+"    call Decho("filter input: ".getline('.'))
+    " save choice/id/password for future use
+    let b:netrw_lastfile = choice
+
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+    keepj norm! 1Gdd
+"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+     if  !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,getline(1),15)
+     endif
+     let mod=1
+    endif
+
+    " remove enew buffer (quietly)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh= bhkeep
+    exe filtbuf."bw!"
+
+   ".........................................
+   " NetWrite: (scp) NetWrite Method #4 {{{3
+   elseif     b:netrw_method == 4
+"    call Decho("write via scp (method #4)")
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " ".g:netrw_scpport." ".fnameescape(g:netrw_port)
+    else
+     let useport= ""
+    endif
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: (http) NetWrite Method #5 {{{3
+   elseif     b:netrw_method == 5
+"    call Decho("write via http (method #5)")
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:ERROR,"currently <netrw.vim> does not support writing using http:",16)
+    endif
+
+   ".........................................
+   " NetWrite: (dav) NetWrite Method #6 (cadaver) {{{3
+   elseif     b:netrw_method == 6
+"    call Decho("write via cadaver (method #6)")
+
+    " Construct execution string (four lines) which will be passed through filter
+    let netrw_fname = escape(b:netrw_fname,g:netrw_fname_escape)
+    let bhkeep      = &l:bh
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let curbuf      = bufnr("%")
+    setl bh=hide
+    keepalt enew
+
+    setl ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+    else
+     keepj put ='open '.g:netrw_machine
+    endif
+    if exists("g:netrw_uid") && exists("s:netrw_passwd") && g:netrw_uid != ""
+     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
+    endif
+    keepj put ='put '.tmpfile.' '.netrw_fname
+
+    " perform cadaver operation:
+    keepj norm! 1Gdd
+"    call Decho("executing: %!".g:netrw_dav_cmd)
+    exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
+
+    " remove enew buffer (quietly)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh            = bhkeep
+    exe filtbuf."bw!"
+
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: (rsync) NetWrite Method #7 {{{3
+   elseif     b:netrw_method == 7
+"    call Decho("write via rsync (method #7)")
+"    call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
+    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: (sftp) NetWrite Method #9 {{{3
+   elseif     b:netrw_method == 9
+"    call Decho("write via sftp (method #9)")
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+    if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+    else
+     let uid_machine = g:netrw_machine
+    endif
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let bhkeep = &l:bh
+    let curbuf = bufnr("%")
+    setl bh=hide
+    keepalt enew
+
+    setl ff=unix
+    call setline(1,'put "'.escape(tmpfile,'\').'" '.netrw_fname)
+"    call Decho("filter input: ".getline('.'))
+"    call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
+    let sftpcmd= substitute(g:netrw_sftp_cmd,"%TEMPFILE%",escape(tmpfile,'\'),"g")
+    exe s:netrw_silentxfer."%!".sftpcmd.' '.shellescape(uid_machine,1)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh            = bhkeep
+    exe filtbuf."bw!"
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: Complain {{{3
+   else
+    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
+    let leavemod= 1
    endif
-   exe 'nnoremap <buffer> <silent> <del>       :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> D           :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> R           :call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> <Leader>m   :call <SID>NetrwMakeDir("")<cr>'
-   exe 'vnoremap <buffer> <silent> <del>       :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'vnoremap <buffer> <silent> D           :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'vnoremap <buffer> <silent> R           :call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
-   exe 'inoremap <buffer> <silent> <del>       <c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'inoremap <buffer> <silent> D           <c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'inoremap <buffer> <silent> R           <c-o>:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
-   exe 'inoremap <buffer> <silent> <Leader>m   <c-o>:call <SID>NetrwMakeDir("")<cr>'
-   nnoremap <buffer> <F1>              :he netrw-quickhelp<cr>
+  endwhile
 
-  else " remote
-"   call Decho("make remote maps")
-   call s:RemotePathAnalysis(b:netrw_curdir)
-   nnoremap <buffer> <silent> <cr>     :call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
-   nnoremap <buffer> <silent> <c-l>    :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   nnoremap <buffer> <silent> -                :exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
-   nnoremap <buffer> <silent> a                :call <SID>NetrwHide(0)<cr>
-   nnoremap <buffer> <silent> mb       :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mc       :<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
-   nnoremap <buffer> <silent> md       :<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
-   nnoremap <buffer> <silent> me       :<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
-   nnoremap <buffer> <silent> mf       :<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> mg       :<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
-   nnoremap <buffer> <silent> mh       :<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
-   nnoremap <buffer> <silent> mm       :<c-u>call <SID>NetrwMarkFileMove(0)<cr>
-   nnoremap <buffer> <silent> mp       :<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
-   nnoremap <buffer> <silent> mr       :<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
-   nnoremap <buffer> <silent> ms       :<c-u>call <SID>NetrwMarkFileSource(0)<cr>
-   nnoremap <buffer> <silent> mT       :<c-u>call <SID>NetrwMarkFileTag(0)<cr>
-   nnoremap <buffer> <silent> mt       :<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
-   nnoremap <buffer> <silent> mu       :<c-u>call <SID>NetrwUnMarkFile(0)<cr>
-   nnoremap <buffer> <silent> mx       :<c-u>call <SID>NetrwMarkFileExe(0)<cr>
-   nnoremap <buffer> <silent> mz       :<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
-   nnoremap <buffer> <silent> gb       :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
-   nnoremap <buffer> <silent> gh       :<c-u>call <SID>NetrwHidden(0)<cr>
-   nnoremap <buffer> <silent> gp       :<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> C                :let g:netrw_chgwin= winnr()<cr>
-   nnoremap <buffer> <silent> i                :call <SID>NetrwListStyle(0)<cr>
-   nnoremap <buffer> <silent> I                :call <SID>NetrwBannerCtrl(1)<cr>
-   nnoremap <buffer> <silent> o                :call <SID>NetrwSplit(0)<cr>
-   nnoremap <buffer> <silent> O                :call <SID>NetrwObtain(0)<cr>
-   nnoremap <buffer> <silent> p                :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
-   nnoremap <buffer> <silent> P                :call <SID>NetrwPrevWinOpen(0)<cr>
-   nnoremap <buffer> <silent> qb       :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mB       :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> qf       :<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> r                :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   nnoremap <buffer> <silent> s                :call <SID>NetrwSortStyle(0)<cr>
-   nnoremap <buffer> <silent> S                :call <SID>NetSortSequence(0)<cr>
-   nnoremap <buffer> <silent> t                :call <SID>NetrwSplit(1)<cr>
-   nnoremap <buffer> <silent> T                :call <SID>NetrwSplit(1)<bar>norm! gT<cr>
-   nnoremap <buffer> <silent> u                :<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> U                :<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> v                :call <SID>NetrwSplit(2)<cr>
-   nnoremap <buffer> <silent> x                :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
-   nnoremap <buffer> <silent> %                :call <SID>NetrwOpenFile(0)<cr>
-   inoremap <buffer> <silent> <cr>     <c-o>:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
-   inoremap <buffer> <silent> <c-l>    <c-o>:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   inoremap <buffer> <silent> -                <c-o>:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
-   inoremap <buffer> <silent> a                <c-o>:call <SID>NetrwHide(0)<cr>
-   inoremap <buffer> <silent> mb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> mc       <c-o>:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
-   inoremap <buffer> <silent> md       <c-o>:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
-   inoremap <buffer> <silent> me       <c-o>:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
-   inoremap <buffer> <silent> mf       <c-o>:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
-   inoremap <buffer> <silent> mg       <c-o>:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
-   inoremap <buffer> <silent> mh       <c-o>:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
-   inoremap <buffer> <silent> mm       <c-o>:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
-   inoremap <buffer> <silent> mp       <c-o>:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
-   inoremap <buffer> <silent> mr       <c-o>:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
-   inoremap <buffer> <silent> ms       <c-o>:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
-   inoremap <buffer> <silent> mT       <c-o>:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
-   inoremap <buffer> <silent> mt       <c-o>:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
-   inoremap <buffer> <silent> mu       <c-o>:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
-   inoremap <buffer> <silent> mx       <c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
-   inoremap <buffer> <silent> mz       <c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
-   inoremap <buffer> <silent> gb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
-   inoremap <buffer> <silent> gh       <c-o>:<c-u>call <SID>NetrwHidden(0)<cr>
-   inoremap <buffer> <silent> gp       <c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> C                <c-o>:let g:netrw_chgwin= winnr()<cr>
-   inoremap <buffer> <silent> i                <c-o>:call <SID>NetrwListStyle(0)<cr>
-   inoremap <buffer> <silent> I                <c-o>:call <SID>NetrwBannerCtrl(1)<cr>
-   inoremap <buffer> <silent> o                <c-o>:call <SID>NetrwSplit(0)<cr>
-   inoremap <buffer> <silent> O                <c-o>:call <SID>NetrwObtain(0)<cr>
-   inoremap <buffer> <silent> p                <c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
-   inoremap <buffer> <silent> P                <c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
-   inoremap <buffer> <silent> qb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> mB       <c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> qf       <c-o>:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
-   inoremap <buffer> <silent> r                <c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   inoremap <buffer> <silent> s                <c-o>:call <SID>NetrwSortStyle(0)<cr>
-   inoremap <buffer> <silent> S                <c-o>:call <SID>NetSortSequence(0)<cr>
-   inoremap <buffer> <silent> t                <c-o>:call <SID>NetrwSplit(1)<cr>
-   inoremap <buffer> <silent> T                <c-o>:call <SID>NetrwSplit(1)<bar>norm! gT<cr>
-   inoremap <buffer> <silent> u                <c-o>:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> U                <c-o>:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> v                <c-o>:call <SID>NetrwSplit(2)<cr>
-   inoremap <buffer> <silent> x                <c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
-   inoremap <buffer> <silent> %                <c-o>:call <SID>NetrwOpenFile(0)<cr>
-   if !hasmapto('<Plug>NetrwHideEdit')
-    nmap <buffer> <c-h> <Plug>NetrwHideEdit
-    imap <buffer> <c-h> <Plug>NetrwHideEdit
+  " NetWrite: Cleanup: {{{3
+"  call Decho("cleanup")
+  if s:FileReadable(tmpfile)
+"   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
+   call s:NetrwDelete(tmpfile)
+  endif
+  call s:NetrwOptionRestore("w:")
+
+  if a:firstline == 1 && a:lastline == line("$")
+   " restore modifiability; usually equivalent to set nomod
+   let &mod= mod
+"   call Decho("(NetWrite)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+  elseif !exists("leavemod")
+   " indicate that the buffer has not been modified since last written
+"   call Decho("(NetWrite) set nomod")
+   set nomod
+"   call Decho("(NetWrite)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+  endif
+
+"  call Dret("netrw#NetWrite")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#NetSource: source a remotely hosted vim script {{{2
+" uses NetRead to get a copy of the file into a temporarily file,
+"              then sources that file,
+"              then removes that file.
+fun! netrw#NetSource(...)
+"  call Dfunc("netrw#NetSource() a:0=".a:0)
+  if a:0 > 0 && a:1 == '?'
+   " give help
+   echomsg 'NetSource Usage:'
+   echomsg ':Nsource dav://machine[:port]/path            uses cadaver'
+   echomsg ':Nsource fetch://machine/path                 uses fetch'
+   echomsg ':Nsource ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
+   echomsg ':Nsource http[s]://[user@]machine/path        uses http  wget'
+   echomsg ':Nsource rcp://[user@]machine/path            uses rcp'
+   echomsg ':Nsource rsync://machine[:port]/path          uses rsync'
+   echomsg ':Nsource scp://[user@]machine[[:#]port]/path  uses scp'
+   echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp'
+   sleep 4
+  else
+   let i= 1
+   while i <= a:0
+    call netrw#NetRead(3,a:{i})
+"    call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">")
+    if s:FileReadable(s:netrw_tmpfile)
+"     call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile))
+     exe "so ".fnameescape(s:netrw_tmpfile)
+"     call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")")
+     call delete(s:netrw_tmpfile)
+     unlet s:netrw_tmpfile
+    else
+     call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48)
+    endif
+    let i= i + 1
+   endwhile
+  endif
+"  call Dret("netrw#NetSource")
+endfun
+
+" ===========================================
+" s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
+"    readcmd == %r : replace buffer with newly read file
+"            == 0r : read file at top of buffer
+"            == r  : read file after current line
+"            == t  : leave file in temporary form (ie. don't read into buffer)
+fun! s:NetrwGetFile(readcmd, tfile, method)
+"  call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
+
+  " readcmd=='t': simply do nothing
+  if a:readcmd == 't'
+"   call Decho("(NetrwGetFile)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"   call Dret("NetrwGetFile : skip read of <".a:tfile.">")
+   return
+  endif
+
+  " get name of remote filename (ie. url and all)
+  let rfile= bufname("%")
+"  call Decho("rfile<".rfile.">")
+
+  if exists("*NetReadFixup")
+   " for the use of NetReadFixup (not otherwise used internally)
+   let line2= line("$")
+  endif
+
+  if a:readcmd[0] == '%'
+  " get file into buffer
+"   call Decho("get file into buffer")
+
+   " rename the current buffer to the temp file (ie. tfile)
+   if g:netrw_cygwin
+    let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','')
+   else
+    let tfile= a:tfile
    endif
-   nnoremap <buffer> <silent> <Plug>NetrwHideEdit      :call <SID>NetrwHideEdit(0)<cr>
-   if !hasmapto('<Plug>NetrwRefresh')
-    nmap <buffer> <c-l> <Plug>NetrwRefresh
-    imap <buffer> <c-l> <Plug>NetrwRefresh
+"   call Decho("exe sil! keepalt file ".fnameescape(tfile))
+   exe "sil! keepalt file ".fnameescape(tfile)
+
+   " edit temporary file (ie. read the temporary file in)
+   if     rfile =~ '\.zip$'
+"    call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)")
+    call zip#Browse(tfile)
+   elseif rfile =~ '\.tar$'
+"    call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.tar\.gz$'
+"    call Decho("handling remote gzip-compressed tar file")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.tar\.bz2$'
+"    call Decho("handling remote bz2-compressed tar file")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.tar\.xz$'
+"    call Decho("handling remote xz-compressed tar file")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.txz$'
+"    call Decho("handling remote xz-compressed tar file (.txz)")
+    call tar#Browse(tfile)
+   else
+"    call Decho("edit temporary file")
+    e!
    endif
 
-   let mapsafepath     = escape(s:path, s:netrw_map_escape)
-   let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape)
+   " rename buffer back to remote filename
+"   call Decho("exe sil! keepalt file ".fnameescape(rfile))
+   exe "sil! keepj keepalt file ".fnameescape(rfile)
+
+   " Detect filetype of local version of remote file.
+   " Note that isk must not include a "/" for scripts.vim
+   " to process this detection correctly.
+"   call Decho("detect filetype of local version of remote file")
+   let iskkeep= &l:isk
+   setl isk-=/
+   let &l:isk= iskkeep
+"   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
+   let line1 = 1
+   let line2 = line("$")
 
-   nnoremap <buffer> <silent> <Plug>NetrwRefresh               :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   if g:netrw_mousemaps == 1
-    nnoremap <buffer> <silent> <leftmouse>   <leftmouse>:call <SID>NetrwLeftmouse(0)<cr>
-    nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr>
-    nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
-    exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-    exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-    inoremap <buffer> <silent> <leftmouse>   <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(0)<cr>
-    inoremap <buffer> <silent> <middlemouse> <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
-    inoremap <buffer> <silent> <s-leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
-    exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   endif
-   exe 'nnoremap <buffer> <silent> <del>       :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'nnoremap <buffer> <silent> d           :call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
-   exe 'nnoremap <buffer> <silent> D           :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'nnoremap <buffer> <silent> R           :call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'vnoremap <buffer> <silent> <del>       :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'vnoremap <buffer> <silent> D           :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'vnoremap <buffer> <silent> R           :call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'inoremap <buffer> <silent> <del>       <c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'inoremap <buffer> <silent> d           <c-o>:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
-   exe 'inoremap <buffer> <silent> D           <c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'inoremap <buffer> <silent> R           <c-o>:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   nnoremap <buffer> <F1>                      :he netrw-quickhelp<cr>
-   inoremap <buffer> <F1>                      <c-o>:he netrw-quickhelp<cr>
+  elseif s:FileReadable(a:tfile)
+   " read file after current line
+"   call Decho("read file<".a:tfile."> after current line")
+   let curline = line(".")
+   let lastline= line("$")
+"   call Decho("exe<".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile).">  line#".curline)
+   exe "keepj ".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)
+   let line1= curline + 1
+   let line2= line("$") - lastline + 1
+
+  else
+   " not readable
+"   call Decho("(NetrwGetFile)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"   call Decho("tfile<".a:tfile."> not readable")
+   keepj call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
+"   call Dret("NetrwGetFile : tfile<".a:tfile."> not readable")
+   return
   endif
-  call s:SetRexDir(a:islocal,b:netrw_curdir)
-"  call Dret("s:BrowserMaps")
-endfun
 
-" ---------------------------------------------------------------------
-" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2
-fun! s:ExplorePatHls(pattern)
-"  call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)")
-  let repat= substitute(a:pattern,'^**/\{1,2}','','')
-"  call Decho("repat<".repat.">")
-  let repat= escape(repat,'][.\')
-"  call Decho("repat<".repat.">")
-  let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>'
-"  call Dret("s:ExplorePatHls repat<".repat.">")
-  return repat
+  " User-provided (ie. optional) fix-it-up command
+  if exists("*NetReadFixup")
+"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
+   keepj call NetReadFixup(a:method, line1, line2)
+"  else " Decho
+"   call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
+  endif
+
+  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
+   " update the Buffers menu
+   keepj call s:UpdateBuffersMenu()
+  endif
+
+"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile))
+
+ " make sure file is being displayed
+"  redraw!
+
+"  call Decho("(NetrwGetFile)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"  call Dret("NetrwGetFile")
 endfun
 
-" ---------------------------------------------------------------------
-"  s:NetrwBookHistHandler: {{{2
-"    0: (user: <mb>)   bookmark current directory
-"    1: (user: <gb>)   change to the bookmarked directory
-"    2: (user: <qb>)   list bookmarks
-"    3: (browsing)     record current directory history
-"    4: (user: <u>)    go up   (previous) bookmark
-"    5: (user: <U>)    go down (next)     bookmark
-"    6: (user: <mB>)   delete bookmark
-fun! s:NetrwBookHistHandler(chg,curdir)
-"  call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
+" ------------------------------------------------------------------------
+" s:NetrwMethod:  determine method of transfer {{{2
+" Input:
+"   choice = url   [protocol:]//[userid@]hostname[:port]/[path-to-file]
+" Output:
+"  b:netrw_method= 1: rcp                                             
+"                  2: ftp + <.netrc>                                  
+"                 3: ftp + machine, id, password, and [path]filename 
+"                 4: scp                                             
+"                 5: http[s] (wget)                                     
+"                 6: dav
+"                 7: rsync                                           
+"                 8: fetch                                           
+"                 9: sftp                                            
+"  g:netrw_machine= hostname
+"  b:netrw_fname  = filename
+"  g:netrw_port   = optional port number (for ftp)
+"  g:netrw_choice = copy of input url (choice)
+fun! s:NetrwMethod(choice)
+"   call Dfunc("NetrwMethod(a:choice<".a:choice.">)")
 
-  if a:chg == 0
-   " bookmark the current directory
-"   call Decho("(user: <b>) bookmark the current directory")
-   if !exists("g:netrw_bookmarklist")
-    let g:netrw_bookmarklist= []
-   endif
-   if index(g:netrw_bookmarklist,a:curdir) == -1
-    " curdir not currently in g:netrw_bookmarklist, so include it
-    call add(g:netrw_bookmarklist,a:curdir)
-    call sort(g:netrw_bookmarklist)
+   " sanity check: choice should have at least three slashes in it
+   if strlen(substitute(a:choice,'[^/]','','g')) < 3
+    call netrw#ErrorMsg(s:ERROR,"not a netrw-style url; netrw uses protocol://[user@]hostname[:port]/[path])",78)
+    let b:netrw_method = -1
+"    call Dret("NetrwMethod : incorrect url format<".a:choice.">")
+    return
    endif
-   echo "bookmarked the current directory"
 
-  elseif a:chg == 1
-   " change to the bookmarked directory
-"   call Decho("(user: <".v:count."mb>) change to the bookmarked directory")
-   if exists("g:netrw_bookmarklist[v:count-1]")
-    exe "e ".fnameescape(g:netrw_bookmarklist[v:count-1])
+   " record current g:netrw_machine, if any
+   " curmachine used if protocol == ftp and no .netrc
+   if exists("g:netrw_machine")
+    let curmachine= g:netrw_machine
+"    call Decho("curmachine<".curmachine.">")
    else
-    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
+    let curmachine= "N O T A HOST"
    endif
-
-  elseif a:chg == 2
-"   redraw!
-   let didwork= 0
-   " list user's bookmarks
-"   call Decho("(user: <q>) list user's bookmarks")
-   if exists("g:netrw_bookmarklist")
-"    call Decho('list '.len(g:netrw_bookmarklist).' bookmarks')
-    let cnt= 1
-    for bmd in g:netrw_bookmarklist
-"     call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1])
-     echo "Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1]
-     let didwork = 1
-     let cnt     = cnt + 1
-    endfor
+   if exists("g:netrw_port")
+    let netrw_port= g:netrw_port
    endif
 
-   " list directory history
-   let cnt     = g:netrw_dirhist_cnt
-   let first   = 1
-   let histcnt = 0
-   while ( first || cnt != g:netrw_dirhist_cnt )
-"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt)
-    let histcnt= histcnt + 1
-    if exists("g:netrw_dirhist_{cnt}")
-"     call Decho("Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt})
-     echo "Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt}
-     let didwork= 1
-    endif
-    let first = 0
-    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
-    if cnt < 0
-     let cnt= cnt + g:netrw_dirhistmax
-    endif
-   endwhile
-   if didwork
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   " insure that netrw_ftp_cmd starts off every method determination
+   " with the current g:netrw_ftp_cmd
+   let s:netrw_ftp_cmd= g:netrw_ftp_cmd
+
+  " initialization
+  let b:netrw_method  = 0
+  let g:netrw_machine = ""
+  let b:netrw_fname   = ""
+  let g:netrw_port    = ""
+  let g:netrw_choice  = a:choice
+
+  " Patterns:
+  " mipf     : a:machine a:id password filename             Use ftp
+  " mf     : a:machine filename                     Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
+  " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
+  " rcpurm   : rcp://[user@]host/filename           Use rcp
+  " rcphf    : [user@]host:filename                 Use rcp
+  " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
+  " httpurm  : http[s]://[user@]host/filename       Use wget
+  " davurm   : dav[s]://host[:port]/path             Use cadaver/curl
+  " rsyncurm : rsync://host[:port]/path              Use rsync
+  " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
+  " sftpurm  : sftp://[user@]host/filename  Use scp
+  let mipf     = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
+  let mf       = '^\(\S\+\)\s\+\(\S\+\)$'
+"  let ftpurm   = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
+"  let rcpurm   = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
+"  let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
+  let ftpurm   = '^ftp://\(\([^/]*\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
+  let rcpurm   = '^rcp://\%(\([^/]*\)@\)\=\([^/]\{-}\)/\(.*\)$'
+  let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
+  let scpurm   = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$'
+  let httpurm  = '^https\=://\([^/]\{-}\)\(/.*\)\=$'
+  let davurm   = '^davs\=://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
+  let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
+  let fetchurm = '^fetch://\(\([^/]*\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
+  let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
+
+"  call Decho("determine method:")
+  " Determine Method
+  " Method#1: rcp://user@hostname/...path-to-file {{{3
+  if match(a:choice,rcpurm) == 0
+"   call Decho("rcp://...")
+   let b:netrw_method  = 1
+   let userid          = substitute(a:choice,rcpurm,'\1',"")
+   let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
+   let b:netrw_fname   = substitute(a:choice,rcpurm,'\3',"")
+   if userid != ""
+    let g:netrw_uid= userid
    endif
 
-  elseif a:chg == 3
-   " saves most recently visited directories (when they differ)
-"   call Decho("(browsing) record curdir history")
-   if !exists("g:netrw_dirhist_cnt") || !exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") || g:netrw_dirhist_{g:netrw_dirhist_cnt} != a:curdir
-    let g:netrw_dirhist_cnt                   = ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
-    let g:netrw_dirhist_{g:netrw_dirhist_cnt} = a:curdir
-"    call Decho("save dirhist#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
+  " Method#4: scp://user@hostname/...path-to-file {{{3
+  elseif match(a:choice,scpurm) == 0
+"   call Decho("scp://...")
+   let b:netrw_method  = 4
+   let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
+   let g:netrw_port    = substitute(a:choice,scpurm,'\2',"")
+   let b:netrw_fname   = substitute(a:choice,scpurm,'\3',"")
+
+  " Method#5: http[s]://user@hostname/...path-to-file {{{3
+  elseif match(a:choice,httpurm) == 0
+"   call Decho("http://...")
+   let b:netrw_method = 5
+   let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
+
+  " Method#6: dav://hostname[:port]/..path-to-file.. {{{3
+  elseif match(a:choice,davurm) == 0
+"   call Decho("dav://...")
+   let b:netrw_method= 6
+   if a:choice =~ 'davs:'
+    let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
+   else
+    let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
    endif
+   let b:netrw_fname  = substitute(a:choice,davurm,'\3',"")
 
-  elseif a:chg == 4
-   " u: change to the previous directory stored on the history list
-"   call Decho("(user: <u>) chg to prev dir from history")
-   let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
-   if g:netrw_dirhist_cnt < 0
-    let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
-   endif
-   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
-"    call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
-    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
-     setlocal ma noro
-"     call Decho("setlocal ma noro")
-     keepj %d
-     setlocal nomod
-"     call Decho("setlocal nomod")
-    endif
-"    "    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
-    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
-   else
-    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
-    echo "Sorry, no predecessor directory exists yet"
+   " Method#7: rsync://user@hostname/...path-to-file {{{3
+  elseif match(a:choice,rsyncurm) == 0
+"   call Decho("rsync://...")
+   let b:netrw_method = 7
+   let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
+
+   " Methods 2,3: ftp://[user@]hostname[[:#]port]/...path-to-file {{{3
+  elseif match(a:choice,ftpurm) == 0
+"   call Decho("ftp://...")
+   let userid        = substitute(a:choice,ftpurm,'\2',"")
+   let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
+   let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
+   let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
+"   call Decho("g:netrw_machine<".g:netrw_machine.">")
+   if userid != ""
+    let g:netrw_uid= userid
    endif
 
-  elseif a:chg == 5
-   " U: change to the subsequent directory stored on the history list
-"   call Decho("(user: <U>) chg to next dir from history")
-   let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
-   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
-"    call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
-    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
-     setlocal ma noro
-"     call Decho("setlocal ma noro")
-     keepj %d
-"     call Decho("removed all lines from buffer (%d)")
-     setlocal nomod
-"     call Decho("setlocal nomod")
+   if curmachine != g:netrw_machine
+    if exists("s:netwr_hup[".g:netrw_machine."]")
+     call NetUserPass("ftp:".g:netrw_machine)
+    elseif exists("s:netrw_passwd")
+     " if there's a change in hostname, require password re-entry
+     unlet s:netrw_passwd
     endif
-"    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
-    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
-   else
-    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
-    if g:netrw_dirhist_cnt < 0
-     let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
+    if exists("netrw_port")
+     unlet netrw_port
     endif
-    echo "Sorry, no successor directory exists yet"
-   endif
-
-  elseif a:chg == 6
-   " delete the v:count'th bookmark
-"   call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">")
-   let savefile= s:NetrwHome()."/.netrwbook"
-   if filereadable(savefile)
-    call s:NetrwBookHistSave() " done here to merge bookmarks first
-    call delete(savefile)
    endif
-   call remove(g:netrw_bookmarklist,v:count-1)
-  endif
-  call s:NetrwBookmarkMenu()
-"  call Dret("s:NetrwBookHistHandler")
-endfun
 
-" ---------------------------------------------------------------------
-" s:NetrwBookHistRead: this function reads bookmarks and history {{{2
-"                      Sister function: s:NetrwBookHistSave()
-fun! s:NetrwBookHistRead()
-"  call Dfunc("s:NetrwBookHistRead()")
-  if !exists("s:netrw_initbookhist")
-   let home    = s:NetrwHome()
-   let savefile= home."/.netrwbook"
-   if filereadable(savefile)
-"    call Decho("sourcing .netrwbook")
-    exe "so ".savefile
-   endif
-   let savefile= home."/.netrwhist"
-   if filereadable(savefile)
-"    call Decho("sourcing .netrwhist")
-    exe "so ".savefile
+   if exists("g:netrw_uid") && exists("s:netrw_passwd")
+    let b:netrw_method = 3
+   else
+    let host= substitute(g:netrw_machine,'\..*$','','')
+    if exists("s:netrw_hup[host]")
+     call NetUserPass("ftp:".host)
+
+    elseif (has("win32") || has("win95") || has("win64") || has("win16")) && s:netrw_ftp_cmd =~ '-[sS]:'
+"     call Decho("has -s: : s:netrw_ftp_cmd<".s:netrw_ftp_cmd.">")
+"     call Decho("          g:netrw_ftp_cmd<".g:netrw_ftp_cmd.">")
+     if g:netrw_ftp_cmd =~ '-[sS]:\S*MACHINE\>'
+      let s:netrw_ftp_cmd= substitute(g:netrw_ftp_cmd,'\<MACHINE\>',g:netrw_machine,'')
+"      call Decho("s:netrw_ftp_cmd<".s:netrw_ftp_cmd.">")
+     endif
+     let b:netrw_method= 2
+    elseif s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc
+"     call Decho("using <".expand("$HOME/.netrc")."> (readable)")
+     let b:netrw_method= 2
+    else
+     if !exists("g:netrw_uid") || g:netrw_uid == ""
+      call NetUserPass()
+     elseif !exists("s:netrw_passwd") || s:netrw_passwd == ""
+      call NetUserPass(g:netrw_uid)
+    " else just use current g:netrw_uid and s:netrw_passwd
+     endif
+     let b:netrw_method= 3
+    endif
    endif
-   let s:netrw_initbookhist= 1
-   au VimLeave * call s:NetrwBookHistSave()
-  endif
-"  call Dret("s:NetrwBookHistRead")
-endfun
 
-" ---------------------------------------------------------------------
-" s:NetrwBookHistSave: this function saves bookmarks and history {{{2
-"                      Sister function: s:NetrwBookHistRead()
-"                      I used to do this via viminfo but that appears to
-"                      be unreliable for long-term storage
-"                      COMBAK: does $HOME work under windows???
-fun! s:NetrwBookHistSave()
-"  call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax)
-  let savefile= s:NetrwHome()."/.netrwhist"
-  1split
-  call s:NetrwEnew()
-  setlocal cino= com= cpo-=aA fo=nroql2 tw=0 report=10000 noswf
-  setlocal nocin noai noci magic nospell nohid wig= noaw
-  setlocal ma noro write
-  if exists("&acd") | setlocal noacd | endif
-  silent %d
+  " Method#8: fetch {{{3
+  elseif match(a:choice,fetchurm) == 0
+"   call Decho("fetch://...")
+   let b:netrw_method = 8
+   let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
+   let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
+   let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
+   let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
 
-  " save .netrwhist -- no attempt to merge
-  silent! file .netrwhist
-  call setline(1,"let g:netrw_dirhistmax  =".g:netrw_dirhistmax)
-  call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt)
-  let lastline = line("$")
-  let cnt      = 1
-  while cnt <= g:netrw_dirhist_cnt
-   call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'")
-   let cnt= cnt + 1
-  endwhile
-  exe "sil! w! ".savefile
+   " Method#3: Issue an ftp : "machine id password [path/]filename" {{{3
+  elseif match(a:choice,mipf) == 0
+"   call Decho("(ftp) host id pass file")
+   let b:netrw_method  = 3
+   let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
+   let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
+   let s:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
+   let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
+   call NetUserPass(g:netrw_machine,g:netrw_uid,s:netrw_passwd)
 
-  sil keepj %d
-  if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
-   " merge and write .netrwbook
-   let savefile= s:NetrwHome()."/.netrwbook"
+  " Method#3: Issue an ftp: "hostname [path/]filename" {{{3
+  elseif match(a:choice,mf) == 0
+"   call Decho("(ftp) host file")
+   if exists("g:netrw_uid") && exists("s:netrw_passwd")
+    let b:netrw_method  = 3
+    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
+    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
 
-   if filereadable(savefile)
-    let booklist= deepcopy(g:netrw_bookmarklist)
-    exe "sil keepj so ".savefile
-    for bdm in booklist
-     if index(g:netrw_bookmarklist,bdm) == -1
-      call add(g:netrw_bookmarklist,bdm)
-     endif
-    endfor
-    call sort(g:netrw_bookmarklist)
-    exe "sil! w! ".savefile
+   elseif s:FileReadable(expand("$HOME/.netrc"))
+    let b:netrw_method  = 2
+    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
+    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
    endif
 
-   " construct and save .netrwbook
-   call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist))
-   exe "sil! w! ".savefile
-  endif
-  let bgone= bufnr("%")
-  q!
-  exe bgone."bwipe!"
-
-"  call Dret("s:NetrwBookHistSave")
-endfun
+  " Method#9: sftp://user@hostname/...path-to-file {{{3
+  elseif match(a:choice,sftpurm) == 0
+"   call Decho("sftp://...")
+   let b:netrw_method = 9
+   let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
 
-" ---------------------------------------------------------------------
-" s:NetrwBrowse: This function uses the command in g:netrw_list_cmd to provide a {{{2
-"  list of the contents of a local or remote directory.  It is assumed that the
-"  g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted
-"  with the requested remote hostname first.
-fun! s:NetrwBrowse(islocal,dirname)
-  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
-"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr())
-"  call Decho("tab#".tabpagenr()." win#".winnr())
-"  call Dredir("ls!")
-  if !exists("s:netrw_initbookhist")
-   call s:NetrwBookHistRead()
-  endif
+  " Method#1: Issue an rcp: hostname:filename"  (this one should be last) {{{3
+  elseif match(a:choice,rcphf) == 0
+"   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
+   let b:netrw_method  = 1
+   let userid          = substitute(a:choice,rcphf,'\2',"")
+   let g:netrw_machine = substitute(a:choice,rcphf,'\3',"")
+   let b:netrw_fname   = substitute(a:choice,rcphf,'\4',"")
+"   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
+"   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
+"   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
+"   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
+   if userid != ""
+    let g:netrw_uid= userid
+   endif
 
-  " simplify the dirname (especially for ".."s in dirnames)
-  if a:dirname !~ '^\a\+://'
-   let dirname= simplify(a:dirname)
+  " Cannot Determine Method {{{3
   else
-   let dirname= a:dirname
-  endif
-
-  if exists("s:netrw_skipbrowse")
-   unlet s:netrw_skipbrowse
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"   call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
-   return
-  endif
-  if !exists("*shellescape")
-   call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69)
-"   call Dret("s:NetrwBrowse : missing shellescape()")
-   return
-  endif
-  if !exists("*fnameescape")
-   call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing fnameescape()",70)
-"   call Dret("s:NetrwBrowse : missing fnameescape()")
-   return
+   if !exists("g:netrw_quiet")
+    call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45)
+   endif
+   let b:netrw_method  = -1
   endif
+  "}}}3
 
-  call s:NetrwOptionSave("w:")                                                                                                            
-
-  " re-instate any marked files
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-"   call Decho("clearing marked files")
-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
+  if g:netrw_port != ""
+   " remove any leading [:#] from port number
+   let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
+  elseif exists("netrw_port")
+   " retain port number as implicit for subsequent ftp operations
+   let g:netrw_port= netrw_port
   endif
 
-  if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
-"   call Decho("handle w:netrw_acdkeep:")
-"   call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
-   exe 'keepj lcd '.fnameescape(dirname)
-   call s:NetrwSafeOptions()
-"   call Decho("getcwd<".getcwd().">")
-
-  elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"'
-   " looks like a regular file, attempt transfer
-"   call Decho("attempt transfer as regular file<".dirname.">")
+"  call Decho("a:choice       <".a:choice.">")
+"  call Decho("b:netrw_method <".b:netrw_method.">")
+"  call Decho("g:netrw_machine<".g:netrw_machine.">")
+"  call Decho("g:netrw_port   <".g:netrw_port.">")
+"  if exists("g:netrw_uid")            "Decho
+"   call Decho("g:netrw_uid    <".g:netrw_uid.">")
+"  endif                                       "Decho
+"  if exists("s:netrw_passwd")         "Decho
+"   call Decho("s:netrw_passwd <".s:netrw_passwd.">")
+"  endif                                       "Decho
+"  call Decho("b:netrw_fname  <".b:netrw_fname.">")
+"  call Dret("NetrwMethod : b:netrw_method=".b:netrw_method." g:netrw_port=".g:netrw_port)
+endfun
 
-   " remove any filetype indicator from end of dirname, except for the {{{3
-   " "this is a directory" indicator (/).
-   " There shouldn't be one of those here, anyway.
-   let path= substitute(dirname,'[*=@|]\r\=$','','e')
-"   call Decho("new path<".path.">")
-   call s:RemotePathAnalysis(dirname)
+" ------------------------------------------------------------------------
+" NetReadFixup: this sort of function is typically written by the user {{{2
+"               to handle extra junk that their system's ftp dumps
+"               into the transfer.  This function is provided as an
+"               example and as a fix for a Windows 95 problem: in my
+"               experience, win95's ftp always dumped four blank lines
+"               at the end of the transfer.
+if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
+ fun! NetReadFixup(method, line1, line2)
+"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
 
-   " remote-read the requested file into current buffer {{{3
-   keepj mark '
-   call s:NetrwEnew(dirname)
-   call s:NetrwSafeOptions()
-   setlocal ma noro
-"   call Decho("setlocal ma noro")
-   let b:netrw_curdir= dirname
-"   call Decho("exe sil! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)." (bt=".&bt.")")
-   exe "sil! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)
-   exe "sil! keepalt doau BufReadPre ".fnameescape(s:fname)
-   silent call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path)
-   if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' && s:path !~ '.tar.xz' && s:path !~ '.txz'
-    " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error
-    exe "sil keepalt doau BufReadPost ".fnameescape(s:fname)
+   " sanity checks -- attempt to convert inputs to integers
+   let method = a:method + 0
+   let line1  = a:line1 + 0
+   let line2  = a:line2 + 0
+   if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0
+"    call Dret("NetReadFixup")
+    return
    endif
 
-   " save certain window-oriented variables into buffer-oriented variables {{{3
-   call s:SetBufWinVars()
-   call s:NetrwOptionRestore("w:")
-   setlocal ma nomod
+   if method == 3   " ftp (no <.netrc>)
+    let fourblanklines= line2 - 3
+    if fourblanklines >= line1
+     exe "sil keepj ".fourblanklines.",".line2."g/^\s*$/d"
+     call histdel("/",-1)
+    endif
+   endif
 
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"   call Dret("s:NetrwBrowse : file<".s:fname.">")
-   return
-  endif
+"   call Dret("NetReadFixup")
+ endfun
+endif
 
-  " use buffer-oriented WinVars if buffer ones exist but window ones don't {{{3
-  call s:UseBufWinVars()
+" ---------------------------------------------------------------------
+" NetUserPass: set username and password for subsequent ftp transfer {{{2
+"   Usage:  :call NetUserPass()                               -- will prompt for userid and password
+"          :call NetUserPass("uid")                   -- will prompt for password
+"          :call NetUserPass("uid","password")        -- sets global userid and password
+"          :call NetUserPass("ftp:host")              -- looks up userid and password using hup dictionary
+"          :call NetUserPass("host","uid","password") -- sets hup dictionary with host, userid, password
+fun! NetUserPass(...)
 
-  " set up some variables {{{3
-  let b:netrw_browser_active = 1
-  let dirname                = dirname
-  let s:last_sort_by         = g:netrw_sort_by
+" call Dfunc("NetUserPass() a:0=".a:0)
 
-  " set up menu {{{3
-  call s:NetrwMenu(1)
+ if !exists('s:netrw_hup')
+  let s:netrw_hup= {}
+ endif
 
-  " set up buffer {{{3
-  let reusing= s:NetrwGetBuffer(a:islocal,dirname)
-  " maintain markfile highlighting
-  if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
-"   call Decho("bufnr(%)=".bufnr('%'))
-"   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
-  else
-"   call Decho("2match none")
-   2match none
-  endif
-  if reusing
-   call s:NetrwOptionRestore("w:")
-   setlocal noma nomod nowrap
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"   call Dret("s:NetrwBrowse : re-using buffer")
-   return
-  endif
+ if a:0 == 0
+  " case: no input arguments
 
-  " set b:netrw_curdir to the new directory name {{{3
-"  call Decho("set b:netrw_curdir to the new directory name:  (buf#".bufnr("%").")")
-  let b:netrw_curdir= dirname
-  if b:netrw_curdir =~ '[/\\]$'
-   let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
-  endif
-  if b:netrw_curdir == ''
-   if has("amiga")
-    " On the Amiga, the empty string connotes the current directory
-    let b:netrw_curdir= getcwd()
-   else
-    " under unix, when the root directory is encountered, the result
-    " from the preceding substitute is an empty string.
-    let b:netrw_curdir= '/'
-   endif
+  " change host and username if not previously entered; get new password
+  if !exists("g:netrw_machine")
+   let g:netrw_machine= input('Enter hostname: ')
   endif
-  if !a:islocal && b:netrw_curdir !~ '/$'
-   let b:netrw_curdir= b:netrw_curdir.'/'
+  if !exists("g:netrw_uid") || g:netrw_uid == ""
+   " get username (user-id) via prompt
+   let g:netrw_uid= input('Enter username: ')
   endif
-"  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
-
-  " ------------
-  " (local only) {{{3
-  " ------------
-  if a:islocal
-"   call Decho("local only:")
-
-   " Set up ShellCmdPost handling.  Append current buffer to browselist
-   call s:LocalFastBrowser()
+  " get password via prompting
+  let s:netrw_passwd= inputsecret("Enter Password: ")
 
-  " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3
-   if !g:netrw_keepdir
-"    call Decho("handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
-"    call Decho("l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist"))
-    if !exists("&l:acd") || !&l:acd
-"     call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir))
-     try
-      exe 'keepj lcd '.fnameescape(b:netrw_curdir)
-     catch /^Vim\%((\a\+)\)\=:E472/
-      call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61)
-      if exists("w:netrw_prvdir")
-       let b:netrw_curdir= w:netrw_prvdir
-      else
-       call s:NetrwOptionRestore("w:")
-       setlocal noma nomod nowrap
-       let b:netrw_curdir= dirname
-"       call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"       call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
-       return
-      endif
-     endtry
-    endif
+  " set up hup database
+  let host = substitute(g:netrw_machine,'\..*$','','')
+  if !exists('s:netrw_hup[host]')
+   let s:netrw_hup[host]= {}
+  endif
+  let s:netrw_hup[host].uid    = g:netrw_uid
+  let s:netrw_hup[host].passwd = s:netrw_passwd
+
+ elseif a:0 == 1
+  " case: one input argument
+
+  if a:1 =~ '^ftp:'
+   " get host from ftp:... url
+   " access userid and password from hup (host-user-passwd) dictionary
+   let host = substitute(a:1,'^ftp:','','')
+   let host = substitute(host,'\..*','','')
+   if exists("s:netrw_hup[host]")
+    let g:netrw_uid    = s:netrw_hup[host].uid
+    let s:netrw_passwd = s:netrw_hup[host].passwd
+"    call Decho("get s:netrw_hup[".host."].uid   <".s:netrw_hup[host].uid.">")
+"    call Decho("get s:netrw_hup[".host."].passwd<".s:netrw_hup[host].passwd.">")
+   else
+    let g:netrw_uid    = input("Enter UserId: ")
+    let s:netrw_passwd = inputsecret("Enter Password: ")
    endif
 
-  " --------------------------------
-  " remote handling: {{{3
-  " --------------------------------
   else
-"   call Decho("remote only:")
-
-   " analyze dirname and g:netrw_list_cmd {{{4
-"   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
-   if dirname =~ "^NetrwTreeListing\>"
-    let dirname= b:netrw_curdir
-"    call Decho("(dirname was ".dirname.") dirname<".dirname.">")
-   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
-    let dirname= substitute(b:netrw_curdir,'\\','/','g')
-    if dirname !~ '/$'
-     let dirname= dirname.'/'
-    endif
-    let b:netrw_curdir = dirname
-"    call Decho("(liststyle is TREELIST) dirname<".dirname.">")
+   " case: one input argument, not an url.  Using it as a new user-id.
+   if exists("g:netrw_machine")
+    let host= substitute(g:netrw_machine,'\..*$','','')
    else
-    let dirname = substitute(dirname,'\\','/','g')
-"    call Decho("(normal) dirname<".dirname.">")
+    let g:netrw_machine= input('Enter hostname: ')
+   endif
+   let g:netrw_uid = a:1
+"   call Decho("set g:netrw_uid= <".g:netrw_uid.">")
+   if exists("g:netrw_passwd")
+    " ask for password if one not previously entered
+    let s:netrw_passwd= g:netrw_passwd
+   else
+    let s:netrw_passwd = inputsecret("Enter Password: ")
    endif
+  endif
 
-   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
-   if dirname !~ dirpat
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
-    endif
-    call s:NetrwOptionRestore("w:")
-    setlocal noma nomod nowrap
-"    call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"    call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">")
-    return
+"  call Decho("host<".host.">")
+  if exists("host")
+   if !exists('s:netrw_hup[host]')
+    let s:netrw_hup[host]= {}
    endif
-   let b:netrw_curdir= dirname
-"   call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)")
-  endif  " (additional remote handling)
+   let s:netrw_hup[host].uid    = g:netrw_uid
+   let s:netrw_hup[host].passwd = s:netrw_passwd
+  endif
 
-  " -----------------------
-  " Directory Listing: {{{3
-  " -----------------------
-  call s:BrowserMaps(a:islocal)
-  call s:PerformListing(a:islocal)
+ elseif a:0 == 2
+  let g:netrw_uid    = a:1
+  let s:netrw_passwd = a:2
 
-  " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd
-  " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed).
-  " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting
-  " the variable below avoids that second refresh of the screen.  The s:LocalBrowseShellCmdRefresh()
-  " function gets called due to that autocmd; it notices that the following variable is set
-  " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008
-  let s:locbrowseshellcmd= 1
+ elseif a:0 == 3
+  " enter hostname, user-id, and password into the hup dictionary
+  let host = substitute(a:1,'^\a\+:','','')
+  let host = substitute(host,'\..*$','','')
+  if !exists('s:netrw_hup[host]')
+   let s:netrw_hup[host]= {}
+  endif
+  let s:netrw_hup[host].uid    = a:2
+  let s:netrw_hup[host].passwd = a:3
+  let g:netrw_uid              = s:netrw_hup[host].uid
+  let s:netrw_passwd           = s:netrw_hup[host].passwd
+"  call Decho("set s:netrw_hup[".host."].uid   <".s:netrw_hup[host].uid.">")
+"  call Decho("set s:netrw_hup[".host."].passwd<".s:netrw_hup[host].passwd.">")
+ endif
 
-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"  call Dret("s:NetrwBrowse : did PerformListing")
-  return
+" call Dret("NetUserPass : uid<".g:netrw_uid."> passwd<".s:netrw_passwd.">")
 endfun
 
+" ===========================================
+"  Shared Browsing Support:    {{{1
+" ===========================================
+
 " ---------------------------------------------------------------------
-" s:NetrwFileInfo: supports qf (query for file information) {{{2
-fun! s:NetrwFileInfo(islocal,fname)
-"  call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)")
-  if a:islocal
-   if (has("unix") || has("macunix")) && executable("/bin/ls")
-    if exists("b:netrw_curdir")
-"     call Decho('using ls with b:netrw_curdir<'.b:netrw_curdir.'>')
-     if b:netrw_curdir =~ '/$'
-      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname))
-     else
-      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname))
-     endif
-    else
-"     call Decho('using ls '.a:fname." using cwd<".getcwd().">")
-     echo system("/bin/ls -lsad ".shellescape(a:fname))
-    endif
-   else
-    " use vim functions to return information about file below cursor
-"    call Decho("using vim functions to query for file info")
-    if !isdirectory(a:fname) && !filereadable(a:fname) && a:fname =~ '[*@/]'
-     let fname= substitute(a:fname,".$","","")
-    else
-     let fname= a:fname
+" s:NetrwMaps: {{{2
+fun! s:NetrwMaps(islocal)
+"  call Dfunc("s:NetrwMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
+
+  " set up Rexplore and [ 2-leftmouse-click -or- c-leftmouse ]
+"  call Decho("(NetrwMaps) set up Rexplore command")
+  com! Rexplore if exists("w:netrw_rexlocal")|call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".")|else|call netrw#ErrorMsg(s:WARNING,"not a former netrw window",79)|endif
+  if g:netrw_mousemaps && g:netrw_retmap
+"   call Decho("(NetrwMaps) set up Rexplore 2-leftmouse")
+   if !hasmapto("<Plug>NetrwReturn")
+    if maparg("<2-leftmouse>","n") == "" || maparg("<2-leftmouse>","n") =~ '^-$'
+"     call Decho("(NetrwMaps) making map for 2-leftmouse")
+     nmap <unique> <silent> <2-leftmouse>      <Plug>NetrwReturn
+    elseif maparg("<c-leftmouse>","n") == ""
+"     call Decho("(NetrwMaps) making map for c-leftmouse")
+     nmap <unique> <silent> <c-leftmouse>      <Plug>NetrwReturn
     endif
-    let t  = getftime(fname)
-    let sz = getfsize(fname)
-    echo a:fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname))
-"    call Decho(fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname)))
    endif
-  else
-   echo "sorry, \"qf\" not supported yet for remote files"
+   nno <silent> <Plug>NetrwReturn      :Rexplore<cr>
+"   call Decho("(NetrwMaps) made <Plug>NetrwReturn map")
   endif
-"  call Dret("s:NetrwFileInfo")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwGetBuffer: {{{2
-"   returns 0=cleared buffer
-"           1=re-used buffer
-fun! s:NetrwGetBuffer(islocal,dirname)
-"  call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle)
-  let dirname= a:dirname
 
-  " re-use buffer if possible {{{3
-"  call Decho("--re-use a buffer if possible--")
-  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-   " find NetrwTreeList buffer if there is one
-"   call Decho("find NetrwTreeList buffer if there is one")
-   if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
-"    call Decho("  re-use w:netrw_treebufnr=".w:netrw_treebufnr)
-    let eikeep= &ei
-    set ei=all
-    exe "sil! b ".w:netrw_treebufnr
-    let &ei= eikeep
-"    call Dret("s:NetrwGetBuffer : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
-    return
+  if a:islocal
+"   call Decho("(NetrwMaps) make local maps")
+   " local normal-mode maps
+   nnoremap <buffer> <silent> a                :call <SID>NetrwHide(1)<cr>
+   nnoremap <buffer> <silent> %                :call <SID>NetrwOpenFile(1)<cr>
+   nnoremap <buffer> <silent> c                :exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> C                :let g:netrw_chgwin= winnr()<cr>
+   nnoremap <buffer> <silent> <cr>     :call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
+   nnoremap <buffer> <silent> d                :call <SID>NetrwMakeDir("")<cr>
+   nnoremap <buffer> <silent> -                :exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
+   nnoremap <buffer> <silent> gb       :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> gd       :<c-u>call <SID>NetrwForceChgDir(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> gf       :<c-u>call <SID>NetrwForceFile(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> gh       :<c-u>call <SID>NetrwHidden(1)<cr>
+   nnoremap <buffer> <silent> gp       :<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> I                :call <SID>NetrwBannerCtrl(1)<cr>
+   nnoremap <buffer> <silent> i                :call <SID>NetrwListStyle(1)<cr>
+   nnoremap <buffer> <silent> mb       :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mB       :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mc       :<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
+   nnoremap <buffer> <silent> md       :<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
+   nnoremap <buffer> <silent> me       :<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
+   nnoremap <buffer> <silent> mf       :<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> mF       :<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mg       :<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
+   nnoremap <buffer> <silent> mh       :<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
+   nnoremap <buffer> <silent> mm       :<c-u>call <SID>NetrwMarkFileMove(1)<cr>
+   nnoremap <buffer> <silent> mp       :<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
+   nnoremap <buffer> <silent> mr       :<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
+   nnoremap <buffer> <silent> ms       :<c-u>call <SID>NetrwMarkFileSource(1)<cr>
+   nnoremap <buffer> <silent> mt       :<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
+   nnoremap <buffer> <silent> mT       :<c-u>call <SID>NetrwMarkFileTag(1)<cr>
+   nnoremap <buffer> <silent> mu       :<c-u>call <SID>NetrwUnMarkFile(1)<cr>
+   nnoremap <buffer> <silent> mx       :<c-u>call <SID>NetrwMarkFileExe(1)<cr>
+   nnoremap <buffer> <silent> mX       :<c-u>call <SID>NetrwMarkFileVimCmd(1)<cr>
+   nnoremap <buffer> <silent> mz       :<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
+   nnoremap <buffer> <silent> O                :call <SID>NetrwObtain(1)<cr>
+   nnoremap <buffer> <silent> o                :call <SID>NetrwSplit(3)<cr>
+   nnoremap <buffer> <silent> p                :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   nnoremap <buffer> <silent> P                :call <SID>NetrwPrevWinOpen(1)<cr>
+   nnoremap <buffer> <silent> qb       :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> qf       :<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> qF       :<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr>
+   nnoremap <buffer> <silent> r                :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+   nnoremap <buffer> <silent> s                :call <SID>NetrwSortStyle(1)<cr>
+   nnoremap <buffer> <silent> S                :call <SID>NetSortSequence(1)<cr>
+   nnoremap <buffer> <silent> t                :call <SID>NetrwSplit(4)<cr>
+   nnoremap <buffer> <silent> Tb       :<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   nnoremap <buffer> <silent> Th       :<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
+   nnoremap <buffer> <silent> u                :<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
+   nnoremap <buffer> <silent> U                :<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
+   nnoremap <buffer> <silent> v                :call <SID>NetrwSplit(5)<cr>
+   nnoremap <buffer> <silent> x                :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
+   nnoremap <buffer> <silent> X                :call <SID>NetrwLocalExecute(expand("<cword>"))"<cr>
+   " local insert-mode maps
+   inoremap <buffer> <silent> a                <c-o>:call <SID>NetrwHide(1)<cr>
+   inoremap <buffer> <silent> c                <c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> C                <c-o>:let g:netrw_chgwin= winnr()<cr>
+   inoremap <buffer> <silent> %                <c-o>:call <SID>NetrwOpenFile(1)<cr>
+   inoremap <buffer> <silent> -                <c-o>:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
+   inoremap <buffer> <silent> <cr>     <c-o>:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
+   inoremap <buffer> <silent> d                <c-o>:call <SID>NetrwMakeDir("")<cr>
+   inoremap <buffer> <silent> gb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> gh       <c-o>:<c-u>call <SID>NetrwHidden(1)<cr>
+   inoremap <buffer> <silent> gp       <c-o>:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> I                <c-o>:call <SID>NetrwBannerCtrl(1)<cr>
+   inoremap <buffer> <silent> i                <c-o>:call <SID>NetrwListStyle(1)<cr>
+   inoremap <buffer> <silent> mb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mB       <c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mc       <c-o>:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
+   inoremap <buffer> <silent> md       <c-o>:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
+   inoremap <buffer> <silent> me       <c-o>:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
+   inoremap <buffer> <silent> mf       <c-o>:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> mg       <c-o>:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
+   inoremap <buffer> <silent> mh       <c-o>:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
+   inoremap <buffer> <silent> mm       <c-o>:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
+   inoremap <buffer> <silent> mp       <c-o>:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
+   inoremap <buffer> <silent> mr       <c-o>:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
+   inoremap <buffer> <silent> ms       <c-o>:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
+   inoremap <buffer> <silent> mT       <c-o>:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
+   inoremap <buffer> <silent> mt       <c-o>:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
+   inoremap <buffer> <silent> mu       <c-o>:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
+   inoremap <buffer> <silent> mx       <c-o>:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
+   inoremap <buffer> <silent> mX       <c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(1)<cr>
+   inoremap <buffer> <silent> mz       <c-o>:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
+   inoremap <buffer> <silent> O                <c-o>:call <SID>NetrwObtain(1)<cr>
+   inoremap <buffer> <silent> o                <c-o>:call <SID>NetrwSplit(3)<cr>
+   inoremap <buffer> <silent> p                <c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   inoremap <buffer> <silent> P                <c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
+   inoremap <buffer> <silent> qb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> qf       <c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> qF       :<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr>
+   inoremap <buffer> <silent> r                <c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+   inoremap <buffer> <silent> s                <c-o>:call <SID>NetrwSortStyle(1)<cr>
+   inoremap <buffer> <silent> S                <c-o>:call <SID>NetSortSequence(1)<cr>
+   inoremap <buffer> <silent> t                <c-o>:call <SID>NetrwSplit(4)<cr>
+   inoremap <buffer> <silent> Tb       <c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   inoremap <buffer> <silent> Th       <c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
+   inoremap <buffer> <silent> u                <c-o>:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
+   inoremap <buffer> <silent> U                <c-o>:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
+   inoremap <buffer> <silent> v                <c-o>:call <SID>NetrwSplit(5)<cr>
+   inoremap <buffer> <silent> x                <c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
+   if !hasmapto('<Plug>NetrwHideEdit')
+    nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
+    imap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
    endif
-   let bufnum= -1
-"   call Decho("  liststyle=TREE but w:netrw_treebufnr doesn't exist")
-
-  else
-   " find buffer number of buffer named precisely the same as dirname {{{3
-"   call Decho("--find buffer numnber of buffer named precisely the same as dirname--")
-"   call Dredir("ls!")
-
-   " get dirname and associated buffer number
-   let bufnum  = bufnr(escape(dirname,'\'))
-"   call Decho("  find buffer<".dirname.">'s number ")
-"   call Decho("  bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
-
-   if bufnum < 0 && dirname !~ '/$'
-    " try appending a trailing /
-"    call Decho("  try appending a trailing / to dirname<".dirname.">")
-    let bufnum= bufnr(escape(dirname.'/','\'))
-    if bufnum > 0
-     let dirname= dirname.'/'
-    endif
+   nnoremap <buffer> <silent> <Plug>NetrwHideEdit      :call <SID>NetrwHideEdit(1)<cr>
+   if !hasmapto('<Plug>NetrwRefresh')
+    nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
+    imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
    endif
-
-   if bufnum < 0 && dirname =~ '/$'
-    " try removing a trailing /
-"    call Decho("  try removing a trailing / from dirname<".dirname.">")
-    let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\'))
-    if bufnum > 0
-     let dirname= substitute(dirname,'/$','','')
-    endif
+   nnoremap <buffer> <silent> <Plug>NetrwRefresh               :call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+   if s:didstarstar || !mapcheck("<s-down>","n")
+    nnoremap <buffer> <silent> <s-down>        :Nexplore<cr>
+    inoremap <buffer> <silent> <s-down>        :Nexplore<cr>
    endif
-
-"   call Decho("  findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
-   " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
-   if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
-    " handle approximate matches
-"    call Decho("  handling approx match: bufnum#".bufnum."<".bufname(bufnum)."> approx-dirname<".dirname.">")
-    let ibuf    = 1
-    let buflast = bufnr("$")
-"    call Decho("  findbuf2: buflast=bufnr($)=".buflast)
-    while ibuf <= buflast
-     let bname= substitute(bufname(ibuf),'\\','/','g')
-     let bname= substitute(bname,'.\zs/$','','')
-"     call Decho("  findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">")
-     if bname != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/'
-      " bname is not empty
-      " dirname ends with bname,
-      " dirname doesn't start with /, so its not a absolute path
-"      call Decho("  findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/')
-      break
-     endif
-     if bname =~ '^'.dirname.'/\=$'
-      " bname begins with dirname
-"      call Decho('  findbuf3b: passes test 2 : bname<'.bname.'>=~^'.dirname.'/\=$')
-      break
-     endif
-     if dirname =~ '^'.bname.'/$'
-"      call Decho('  findbuf3c: passes test 3 : dirname<'.dirname.'>=~^'.bname.'/$')
-      break
-     endif
-     if bname != '' && dirname =~ '/'.bname.'$' && bname == bufname("%") && line("$") == 1
-"      call Decho('  findbuf3d: passes test 4 : dirname<'.dirname.'>=~ /'.bname.'$')
-      break
-     endif
-     let ibuf= ibuf + 1
-    endwhile
-    if ibuf > buflast
-     let bufnum= -1
-    else
-     let bufnum= ibuf
-    endif
-"    call Decho("  findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")")
+   if s:didstarstar || !mapcheck("<s-up>","n")
+    nnoremap <buffer> <silent> <s-up>  :Pexplore<cr>
+    inoremap <buffer> <silent> <s-up>  :Pexplore<cr>
    endif
-  endif
-
-  " get enew buffer and name it -or- re-use buffer {{{3
-  sil! keepj mark '
-  if bufnum < 0 || !bufexists(bufnum)
-"   call Decho("--get enew buffer and name it (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")")
-   call s:NetrwEnew(dirname)
-"   call Decho("  got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
-   " name the buffer
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-    " Got enew buffer; transform into a NetrwTreeListing
-"    call Decho("--transform enew buffer#".bufnr("%")." into a NetrwTreeListing --")
-    if !exists("s:netrw_treelistnum")
-     let s:netrw_treelistnum= 1
-    else
-     let s:netrw_treelistnum= s:netrw_treelistnum + 1
-    endif
-    let w:netrw_treebufnr= bufnr("%")
-"    call Decho("  exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
-    exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
-    set bt=nofile noswf
-    nnoremap <silent> <buffer> [       :silent call <SID>TreeListMove('[')<cr>
-    nnoremap <silent> <buffer> ]       :silent call <SID>TreeListMove(']')<cr>
-    nnoremap <silent> <buffer> [[       :silent call <SID>TreeListMove('[')<cr>
-    nnoremap <silent> <buffer> ]]       :silent call <SID>TreeListMove(']')<cr>
-"    call Decho("  tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
-   else
-"    let v:errmsg= "" " Decho
-    let escdirname= fnameescape(dirname)
-"    call Decho("  errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">")
-"    call Decho('  exe sil! keepalt file '.escdirname)
-"    let v:errmsg= "" " Decho
-    exe 'sil! keepalt file '.escdirname
-"    call Decho("  errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
+   let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape)
+   if g:netrw_mousemaps == 1
+    nmap <buffer> <leftmouse>   <Plug>NetrwLeftmouse
+    nno  <buffer> <silent>     <Plug>NetrwLeftmouse    <leftmouse>:call <SID>NetrwLeftmouse(1)<cr>
+    nmap <buffer> <s-rightdrag>        <Plug>NetrwRightdrag
+    nno  <buffer> <silent>     <Plug>NetrwRightdrag    <leftmouse>:call <SID>NetrwRightdrag(1)<cr>
+    nmap <buffer> <middlemouse>        <Plug>NetrwMiddlemouse
+    nno  <buffer> <silent>     <Plug>NetrwMiddlemouse  <leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr>
+    nmap <buffer> <s-leftmouse>        <Plug>NetrwSLeftmouse
+    nno  <buffer> <silent>     <Plug>NetrwSLeftmouse   <leftmouse>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+    nmap <buffer> <2-leftmouse>        <Plug>Netrw2Leftmouse
+    nmap <buffer> <silent>     <Plug>Netrw2Leftmouse   -
+    imap <buffer> <leftmouse>  <Plug>ILeftmouse
+    ino  <buffer> <silent>     <Plug>ILeftmouse        <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(1)<cr>
+    imap <buffer> <middlemouse>        <Plug>IMiddlemouse
+    ino  <buffer> <silent>     <Plug>IMiddlemouse      <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
+    imap <buffer> <s-leftmouse>        <Plug>ISLeftmouse
+    ino  <buffer> <silent>     <Plug>ISLeftmouse       <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+    exe 'nnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+    exe 'vnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+    exe 'inoremap <buffer> <silent> <rightmouse>  <c-o><leftmouse><c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
    endif
-"   call Decho("  named enew buffer#".bufnr("%")."<".bufname("%").">")
+   exe 'nnoremap <buffer> <silent> <del>       :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> D           :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> R           :call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> <Leader>m   :call <SID>NetrwMakeDir("")<cr>'
+   exe 'vnoremap <buffer> <silent> <del>       :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> D           :call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> R           :call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> <del>       <c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> D           <c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> R           <c-o>:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> <Leader>m   <c-o>:call <SID>NetrwMakeDir("")<cr>'
+   nnoremap <buffer> <F1>              :he netrw-quickhelp<cr>
 
-  else " Re-use the buffer
-"   call Decho("--re-use buffer#".bufnum." (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")")
-   let eikeep= &ei
-   set ei=all
-   if getline(2) =~ '^" Netrw Directory Listing'
-"    call Decho("  re-use buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  keepalt b ".bufnum)
-    exe "sil! keepalt b ".bufnum
-   else
-"    call Decho("  reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  b ".bufnum)
-    exe "sil! b ".bufnum
-   endif
-   if bufname("%") == '.'
-"    call Decho("exe sil! keepalt file ".fnameescape(getcwd()))
-    exe "sil! keepalt file ".fnameescape(getcwd())
+  else " remote
+"   call Decho("(NetrwMaps) make remote maps")
+   call s:RemotePathAnalysis(b:netrw_curdir)
+   " remote normal-mode maps
+   nnoremap <buffer> <silent> <cr>     :call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
+   nnoremap <buffer> <silent> <c-l>    :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   nnoremap <buffer> <silent> -                :exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
+   nnoremap <buffer> <silent> a                :call <SID>NetrwHide(0)<cr>
+   nnoremap <buffer> <silent> mb       :<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mc       :<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
+   nnoremap <buffer> <silent> md       :<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
+   nnoremap <buffer> <silent> me       :<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
+   nnoremap <buffer> <silent> mf       :<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> mF       :<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mg       :<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
+   nnoremap <buffer> <silent> mh       :<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
+   nnoremap <buffer> <silent> mm       :<c-u>call <SID>NetrwMarkFileMove(0)<cr>
+   nnoremap <buffer> <silent> mp       :<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
+   nnoremap <buffer> <silent> mr       :<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
+   nnoremap <buffer> <silent> ms       :<c-u>call <SID>NetrwMarkFileSource(0)<cr>
+   nnoremap <buffer> <silent> mt       :<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
+   nnoremap <buffer> <silent> mT       :<c-u>call <SID>NetrwMarkFileTag(0)<cr>
+   nnoremap <buffer> <silent> mu       :<c-u>call <SID>NetrwUnMarkFile(0)<cr>
+   nnoremap <buffer> <silent> mx       :<c-u>call <SID>NetrwMarkFileExe(0)<cr>
+   nnoremap <buffer> <silent> mX       :<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr>
+   nnoremap <buffer> <silent> mz       :<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
+   nnoremap <buffer> <silent> gb       :<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> gd       :<c-u>call <SID>NetrwForceChgDir(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> gf       :<c-u>call <SID>NetrwForceFile(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> gh       :<c-u>call <SID>NetrwHidden(0)<cr>
+   nnoremap <buffer> <silent> gp       :<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> C                :let g:netrw_chgwin= winnr()<cr>
+   nnoremap <buffer> <silent> i                :call <SID>NetrwListStyle(0)<cr>
+   nnoremap <buffer> <silent> I                :call <SID>NetrwBannerCtrl(1)<cr>
+   nnoremap <buffer> <silent> o                :call <SID>NetrwSplit(0)<cr>
+   nnoremap <buffer> <silent> O                :call <SID>NetrwObtain(0)<cr>
+   nnoremap <buffer> <silent> p                :call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   nnoremap <buffer> <silent> P                :call <SID>NetrwPrevWinOpen(0)<cr>
+   nnoremap <buffer> <silent> qb       :<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mB       :<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> qf       :<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> qF       :<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr>
+   nnoremap <buffer> <silent> r                :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   nnoremap <buffer> <silent> s                :call <SID>NetrwSortStyle(0)<cr>
+   nnoremap <buffer> <silent> S                :call <SID>NetSortSequence(0)<cr>
+   nnoremap <buffer> <silent> t                :call <SID>NetrwSplit(1)<cr>
+   nnoremap <buffer> <silent> Tb       :<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   nnoremap <buffer> <silent> Th       :<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
+   nnoremap <buffer> <silent> u                :<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> U                :<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> v                :call <SID>NetrwSplit(2)<cr>
+   nnoremap <buffer> <silent> x                :call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
+   nnoremap <buffer> <silent> %                :call <SID>NetrwOpenFile(0)<cr>
+   " remote insert-mode maps
+   inoremap <buffer> <silent> <cr>     <c-o>:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
+   inoremap <buffer> <silent> <c-l>    <c-o>:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   inoremap <buffer> <silent> -                <c-o>:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
+   inoremap <buffer> <silent> a                <c-o>:call <SID>NetrwHide(0)<cr>
+   inoremap <buffer> <silent> mb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mc       <c-o>:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
+   inoremap <buffer> <silent> md       <c-o>:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
+   inoremap <buffer> <silent> me       <c-o>:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
+   inoremap <buffer> <silent> mf       <c-o>:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> mg       <c-o>:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
+   inoremap <buffer> <silent> mh       <c-o>:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
+   inoremap <buffer> <silent> mm       <c-o>:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
+   inoremap <buffer> <silent> mp       <c-o>:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
+   inoremap <buffer> <silent> mr       <c-o>:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
+   inoremap <buffer> <silent> ms       <c-o>:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
+   inoremap <buffer> <silent> mt       <c-o>:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
+   inoremap <buffer> <silent> mT       <c-o>:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
+   inoremap <buffer> <silent> mu       <c-o>:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
+   inoremap <buffer> <silent> mx       <c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
+   inoremap <buffer> <silent> mX       <c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr>
+   inoremap <buffer> <silent> mz       <c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
+   inoremap <buffer> <silent> gb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> gh       <c-o>:<c-u>call <SID>NetrwHidden(0)<cr>
+   inoremap <buffer> <silent> gp       <c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> C                <c-o>:let g:netrw_chgwin= winnr()<cr>
+   inoremap <buffer> <silent> i                <c-o>:call <SID>NetrwListStyle(0)<cr>
+   inoremap <buffer> <silent> I                <c-o>:call <SID>NetrwBannerCtrl(1)<cr>
+   inoremap <buffer> <silent> o                <c-o>:call <SID>NetrwSplit(0)<cr>
+   inoremap <buffer> <silent> O                <c-o>:call <SID>NetrwObtain(0)<cr>
+   inoremap <buffer> <silent> p                <c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   inoremap <buffer> <silent> P                <c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
+   inoremap <buffer> <silent> qb       <c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mB       <c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> qf       <c-o>:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> qF       :<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr>
+   inoremap <buffer> <silent> r                <c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   inoremap <buffer> <silent> s                <c-o>:call <SID>NetrwSortStyle(0)<cr>
+   inoremap <buffer> <silent> S                <c-o>:call <SID>NetSortSequence(0)<cr>
+   inoremap <buffer> <silent> t                <c-o>:call <SID>NetrwSplit(1)<cr>
+   inoremap <buffer> <silent> Tb       <c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   inoremap <buffer> <silent> Th       <c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
+   inoremap <buffer> <silent> u                <c-o>:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> U                <c-o>:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> v                <c-o>:call <SID>NetrwSplit(2)<cr>
+   inoremap <buffer> <silent> x                <c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
+   inoremap <buffer> <silent> %                <c-o>:call <SID>NetrwOpenFile(0)<cr>
+   if !hasmapto('<Plug>NetrwHideEdit')
+    nmap <buffer> <c-h> <Plug>NetrwHideEdit
+    imap <buffer> <c-h> <Plug>NetrwHideEdit
    endif
-   let &ei= eikeep
-   if line("$") <= 1
-    call s:NetrwListSettings(a:islocal)
-"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it")
-    return 0
-   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-"    call Decho("--re-use tree listing--")
-"    call Decho("  clear buffer<".expand("%")."> with :%d")
-    sil keepj %d
-    call s:NetrwListSettings(a:islocal)
-"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
-    return 0
-   else
-"    call Dret("s:NetrwGetBuffer 1 : buf#".bufnr("%"))
-    return 1
+   nnoremap <buffer> <silent> <Plug>NetrwHideEdit      :call <SID>NetrwHideEdit(0)<cr>
+   if !hasmapto('<Plug>NetrwRefresh')
+    nmap <buffer> <c-l> <Plug>NetrwRefresh
+    imap <buffer> <c-l> <Plug>NetrwRefresh
    endif
-  endif
-
-  " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3
-  "     fastbrowse  Local  Remote   Hiding a buffer implies it may be re-used (fast)
-  "  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
-  "  med    1         D      H
-  "  fast   2         H      H
-"  call Decho("--do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--")
-  let fname= expand("%")
-  call s:NetrwListSettings(a:islocal)
-"  call Decho("exe sil! keepalt file ".fnameescape(fname))
-  exe "sil! keepalt file ".fnameescape(fname)
-
-  " delete all lines from buffer {{{3
-"  call Decho("--delete all lines from buffer--")
-"  call Decho("  clear buffer<".expand("%")."> with :%d")
-  sil! keepalt keepj %d
-
-"  call Dret("s:NetrwGetBuffer 0 : buf#".bufnr("%"))
-  return 0
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwGetcwd: get the current directory. {{{2
-"   Change backslashes to forward slashes, if any.
-"   If doesc is true, escape certain troublesome characters
-fun! s:NetrwGetcwd(doesc)
-"  call Dfunc("NetrwGetcwd(doesc=".a:doesc.")")
-  let curdir= substitute(getcwd(),'\\','/','ge')
-  if curdir !~ '[\/]$'
-   let curdir= curdir.'/'
-  endif
-  if a:doesc
-   let curdir= fnameescape(curdir)
-  endif
-"  call Dret("NetrwGetcwd <".curdir.">")
-  return curdir
-endfun
 
-" ---------------------------------------------------------------------
-"  s:NetrwGetWord: it gets the directory/file named under the cursor {{{2
-fun! s:NetrwGetWord()
-"  call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol("."))
-  call s:UseBufWinVars()
+   let mapsafepath     = escape(s:path, s:netrw_map_escape)
+   let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape)
 
-  " insure that w:netrw_liststyle is set up
-  if !exists("w:netrw_liststyle")
-   if exists("g:netrw_liststyle")
-    let w:netrw_liststyle= g:netrw_liststyle
-   else
-    let w:netrw_liststyle= s:THINLIST
+   nnoremap <buffer> <silent> <Plug>NetrwRefresh       :call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   if g:netrw_mousemaps == 1
+    nmap <leftmouse>           <Plug>NetrwLeftmouse
+    nno <buffer> <silent>      <Plug>NetrwLeftmouse    <leftmouse>:call <SID>NetrwLeftmouse(0)<cr>
+    nmap <buffer> <leftdrag>   <Plug>NetrwLeftdrag
+    nno  <buffer> <silent>     <Plug>NetrwLeftdrag     :call <SID>NetrwLeftdrag(0)<cr>
+    nmap <middlemouse>         <Plug>NetrwMiddlemouse
+    nno  <buffer> <silent>     <middlemouse>           <Plug>NetrwMiddlemouse <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr>
+    nmap <buffer> <s-leftmouse>        <Plug>NetrwSLeftmouse
+    nno  <buffer> <silent>     <Plug>NetrwSLeftmouse   <leftmouse>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+    nmap <buffer> <2-leftmouse>        <Plug>Netrw2Leftmouse
+    nmap <buffer> <silent>     <Plug>Netrw2Leftmouse   -
+    imap <buffer> <leftmouse>  <Plug>ILeftmouse
+    ino  <buffer> <silent>     <Plug>ILeftmouse        <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(0)<cr>
+    imap <buffer> <middlemouse>        <Plug>IMiddlemouse
+    ino  <buffer> <silent>     <Plug>IMiddlemouse      <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
+    imap <buffer> <s-leftmouse>        <Plug>ISLeftmouse
+    ino  <buffer> <silent>     <Plug>ISLeftmouse       <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+    exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+    exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+    exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
    endif
-"   call Decho("w:netrw_liststyle=".w:netrw_liststyle)
+   exe 'nnoremap <buffer> <silent> <del>       :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'nnoremap <buffer> <silent> d           :call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
+   exe 'nnoremap <buffer> <silent> D           :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'nnoremap <buffer> <silent> R           :call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> <del>       :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> D           :call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> R           :call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'inoremap <buffer> <silent> <del>       <c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'inoremap <buffer> <silent> d           <c-o>:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
+   exe 'inoremap <buffer> <silent> D           <c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'inoremap <buffer> <silent> R           <c-o>:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   nnoremap <buffer> <F1>                      :he netrw-quickhelp<cr>
+   inoremap <buffer> <F1>                      <c-o>:he netrw-quickhelp<cr>
   endif
 
-  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
-   " Active Banner support
-"   call Decho("active banner handling")
-   keepj norm! 0
-   let dirname= "./"
-   let curline= getline('.')
-
-   if curline =~ '"\s*Sorted by\s'
-    keepj norm s
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "s" also works'
+  keepj call s:SetRexDir(a:islocal,b:netrw_curdir)
 
-   elseif curline =~ '"\s*Sort sequence:'
-    let s:netrw_skipbrowse= 1
-    echo 'Press "S" to edit sorting sequence'
+"  call Dret("s:NetrwMaps")
+endfun
 
-   elseif curline =~ '"\s*Quick Help:'
-    keepj norm ?
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "?" also works'
+" ---------------------------------------------------------------------
+" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2
+fun! s:ExplorePatHls(pattern)
+"  call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)")
+  let repat= substitute(a:pattern,'^**/\{1,2}','','')
+"  call Decho("repat<".repat.">")
+  let repat= escape(repat,'][.\')
+"  call Decho("repat<".repat.">")
+  let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>'
+"  call Dret("s:ExplorePatHls repat<".repat.">")
+  return repat
+endfun
 
-   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
-    keepj norm a
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "a" also works'
+" ---------------------------------------------------------------------
+"  s:NetrwBookHistHandler: {{{2
+"    0: (user: <mb>)   bookmark current directory
+"    1: (user: <gb>)   change to the bookmarked directory
+"    2: (user: <qb>)   list bookmarks
+"    3: (browsing)     record current directory history
+"    4: (user: <u>)    go up   (previous) bookmark
+"    5: (user: <U>)    go down (next)     bookmark
+"    6: (user: <mB>)   delete bookmark
+fun! s:NetrwBookHistHandler(chg,curdir)
+"  call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
+  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
+"   "  call Dret("s:NetrwBookHistHandler - suppressed due to g:netrw_dirhistmax")
+   return
+  endif
 
-   elseif line("$") > w:netrw_bannercnt
-    exe 'sil keepj '.w:netrw_bannercnt
+  let ykeep= @@
+  if a:chg == 0
+   " bookmark the current directory
+"   call Decho("(user: <b>) bookmark the current directory")
+   if !exists("g:netrw_bookmarklist")
+    let g:netrw_bookmarklist= []
    endif
+   if index(g:netrw_bookmarklist,a:curdir) == -1
+    " curdir not currently in g:netrw_bookmarklist, so include it
+    call add(g:netrw_bookmarklist,a:curdir)
+    call sort(g:netrw_bookmarklist)
+   endif
+   echo "bookmarked the current directory"
 
-  elseif w:netrw_liststyle == s:THINLIST
-"   call Decho("thin column handling")
-   keepj norm! 0
-   let dirname= getline('.')
-
-  elseif w:netrw_liststyle == s:LONGLIST
-"   call Decho("long column handling")
-   keepj norm! 0
-   let dirname= substitute(getline('.'),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e')
+  elseif a:chg == 1
+   " change to the bookmarked directory
+"   call Decho("(user: <".v:count."gb>) change to the bookmarked directory")
+   if exists("g:netrw_bookmarklist[v:count-1]")
+"    call Decho("(user: <".v:count."gb>) bookmarklist=".string(g:netrw_bookmarklist))
+    exe "keepj e ".fnameescape(g:netrw_bookmarklist[v:count-1])
+   else
+    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
+   endif
 
-  elseif w:netrw_liststyle == s:TREELIST
-"   call Decho("treelist handling")
-   let dirname= substitute(getline('.'),'^\(| \)*','','e')
+  elseif a:chg == 2
+"   redraw!
+   let didwork= 0
+   " list user's bookmarks
+"   call Decho("(user: <q>) list user's bookmarks")
+   if exists("g:netrw_bookmarklist")
+"    call Decho('list '.len(g:netrw_bookmarklist).' bookmarks')
+    let cnt= 1
+    for bmd in g:netrw_bookmarklist
+"     call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1])
+     echo printf("Netrw Bookmark#%-2d: %s",cnt,g:netrw_bookmarklist[cnt-1])
+     let didwork = 1
+     let cnt     = cnt + 1
+    endfor
+   endif
 
-  else
-"   call Decho("obtain word from wide listing")
-   let dirname= getline('.')
+   " list directory history
+   let cnt     = g:netrw_dirhist_cnt
+   let first   = 1
+   let histcnt = 0
+   if g:netrw_dirhistmax > 0
+    while ( first || cnt != g:netrw_dirhist_cnt )
+"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt)
+     if exists("g:netrw_dirhist_{cnt}")
+"     call Decho("Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt})
+      echo printf("Netrw  History#%-2d: %s",histcnt,g:netrw_dirhist_{cnt})
+      let didwork= 1
+     endif
+     let histcnt = histcnt + 1
+     let first   = 0
+     let cnt     = ( cnt - 1 ) % g:netrw_dirhistmax
+     if cnt < 0
+      let cnt= cnt + g:netrw_dirhistmax
+     endif
+    endwhile
+   else
+    let g:netrw_dirhist_cnt= 0
+   endif
+   if didwork
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   endif
 
-   if !exists("b:netrw_cpf")
-    let b:netrw_cpf= 0
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
-    call histdel("/",-1)
-"   call Decho("computed cpf=".b:netrw_cpf)
+  elseif a:chg == 3
+   " saves most recently visited directories (when they differ)
+"   call Decho("(browsing) record curdir history")
+   if !exists("g:netrw_dirhist_cnt") || !exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") || g:netrw_dirhist_{g:netrw_dirhist_cnt} != a:curdir
+    if g:netrw_dirhistmax > 0
+     let g:netrw_dirhist_cnt                   = ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
+     let g:netrw_dirhist_{g:netrw_dirhist_cnt} = a:curdir
+    endif
+"    call Decho("save dirhist#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
    endif
 
-"   call Decho("buf#".bufnr("%")."<".bufname("%").">")
-   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
-"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
-"   call Decho("1: dirname<".dirname.">")
-   if filestart == 0
-    keepj norm! 0ma
+  elseif a:chg == 4
+   " u: change to the previous directory stored on the history list
+"   call Decho("(user: <u>) chg to prev dir from history")
+   if g:netrw_dirhistmax > 0
+    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - v:count1 ) % g:netrw_dirhistmax
+    if g:netrw_dirhist_cnt < 0
+     let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
+    endif
    else
-    call cursor(line("."),filestart+1)
-    keepj norm! ma
+    let g:netrw_dirhist_cnt= 0
    endif
-   let rega= @a
-   let eofname= filestart + b:netrw_cpf + 1
-   if eofname <= col("$")
-    call cursor(line("."),filestart+b:netrw_cpf+1)
-    keepj norm! "ay`a
+   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
+"    call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
+    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+     setl ma noro
+"     call Decho("(NetrwBookHistHandler) setl ma noro")
+     sil! keepj %d
+     setl nomod
+"     call Decho("(NetrwBookHistHandler) setl nomod")
+"     call Decho("(NetrwBookHistHandler)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+    endif
+"    "    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
+    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
    else
-    keepj norm! "ay$
+    if g:netrw_dirhistmax > 0
+     let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + v:count1 ) % g:netrw_dirhistmax
+    else
+     let g:netrw_dirhist_cnt= 0
+    endif
+    echo "Sorry, no predecessor directory exists yet"
    endif
-   let dirname = @a
-   let @a      = rega
-"   call Decho("2: dirname<".dirname.">")
-   let dirname= substitute(dirname,'\s\+$','','e')
-"   call Decho("3: dirname<".dirname.">")
-  endif
-
-  " symlinks are indicated by a trailing "@".  Remove it before further processing.
-  let dirname= substitute(dirname,"@$","","")
-
-  " executables are indicated by a trailing "*".  Remove it before further processing.
-  let dirname= substitute(dirname,"\*$","","")
 
-"  call Dret("s:NetrwGetWord <".dirname.">")
-  return dirname
-endfun
+  elseif a:chg == 5
+   " U: change to the subsequent directory stored on the history list
+"   call Decho("(user: <U>) chg to next dir from history")
+   if g:netrw_dirhistmax > 0
+    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
+    if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
+"    call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
+     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+"      call Decho("(NetrwBookHistHandler) setl ma noro")
+      setl ma noro
+      sil! keepj %d
+"      call Decho("removed all lines from buffer (%d)")
+"      call Decho("(NetrwBookHistHandler) setl nomod")
+      setl nomod
+"      call Decho("(set nomod)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+     endif
+"    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
+     exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
+    else
+     let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
+     if g:netrw_dirhist_cnt < 0
+      let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
+     endif
+     echo "Sorry, no successor directory exists yet"
+    endif
+   else
+    let g:netrw_dirhist_cnt= 0
+    echo "Sorry, no successor directory exists yet (g:netrw_dirhistmax is ".g:netrw_dirhistmax.")"
+   endif
 
-" ---------------------------------------------------------------------
-" s:NetrwListSettings: make standard settings for a netrw listing {{{2
-fun! s:NetrwListSettings(islocal)
-"  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
-  let fname= bufname("%")
-"  call Decho("setlocal bt=nofile nobl ma nonu nowrap noro")
-  setlocal bt=nofile nobl ma nonu nowrap noro
-"  call Decho("exe sil! keepalt file ".fnameescape(fname))
-  exe "sil! keepalt file ".fnameescape(fname)
-  if g:netrw_use_noswf
-   setlocal noswf
-  endif
-"  call Dredir("ls!")
-"  call Decho("exe setlocal ts=".g:netrw_maxfilenamelen)
-  exe "setlocal ts=".g:netrw_maxfilenamelen
-  setlocal isk+=.,~,-
-  if g:netrw_fastbrowse > a:islocal
-   setlocal bh=hide
-  else
-   setlocal bh=delete
+  elseif a:chg == 6
+   " delete the v:count'th bookmark
+"   call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">")
+   let savefile= s:NetrwHome()."/.netrwbook"
+   if filereadable(savefile)
+"    call Decho("merge bookmarks (active and file)")
+    keepj call s:NetrwBookHistSave() " done here to merge bookmarks first
+"    call Decho("bookmark delete savefile<".savefile.">")
+    keepj call delete(savefile)
+   endif
+"   call Decho("remove g:netrw_bookmarklist[".(v:count-1)."]")
+   keepj call remove(g:netrw_bookmarklist,v:count-1)
+"   call Decho("resulting g:netrw_bookmarklist=".string(g:netrw_bookmarklist))
   endif
-"  call Dret("s:NetrwListSettings")
+  call s:NetrwBookmarkMenu()
+  call s:NetrwTgtMenu()
+  let @@= ykeep
+"  call Dret("s:NetrwBookHistHandler")
 endfun
 
 " ---------------------------------------------------------------------
-"  s:NetrwListStyle: {{{2
-"  islocal=0: remote browsing
-"         =1: local browsing
-fun! s:NetrwListStyle(islocal)
-"  call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle)
-  let fname             = s:NetrwGetWord()
-  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
-  let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST
-"  call Decho("fname<".fname.">")
-"  call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle)
-"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">")
-
-  if w:netrw_liststyle == s:THINLIST
-   " use one column listing
-"   call Decho("use one column list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
-
-  elseif w:netrw_liststyle == s:LONGLIST
-   " use long list
-"   call Decho("use long list")
-   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
+" s:NetrwBookHistRead: this function reads bookmarks and history {{{2
+"                      Sister function: s:NetrwBookHistSave()
+fun! s:NetrwBookHistRead()
+"  call Dfunc("s:NetrwBookHistRead()")
+  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
+"   "  call Dret("s:NetrwBookHistRead - suppressed due to g:netrw_dirhistmax")
+   return
+  endif
+  let ykeep= @@
+  if !exists("s:netrw_initbookhist")
+   let home    = s:NetrwHome()
+   let savefile= home."/.netrwbook"
+   if filereadable(savefile)
+"    call Decho("sourcing .netrwbook")
+    exe "keepalt keepj so ".savefile
+   endif
+   if g:netrw_dirhistmax > 0
+    let savefile= home."/.netrwhist"
+    if filereadable(savefile)
+"    call Decho("sourcing .netrwhist")
+     exe "keepalt keepj so ".savefile
+    endif
+    let s:netrw_initbookhist= 1
+    au VimLeave * call s:NetrwBookHistSave()
+   endif
+  endif
+  let @@= ykeep
+"  call Dret("s:NetrwBookHistRead")
+endfun
 
-  elseif w:netrw_liststyle == s:WIDELIST
-   " give wide list
-"   call Decho("use wide list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+" ---------------------------------------------------------------------
+" s:NetrwBookHistSave: this function saves bookmarks and history {{{2
+"                      Sister function: s:NetrwBookHistRead()
+"                      I used to do this via viminfo but that appears to
+"                      be unreliable for long-term storage
+fun! s:NetrwBookHistSave()
+"  call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax)
+  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
+"   call Dret("s:NetrwBookHistSave : dirhistmax=".g:netrw_dirhistmax)
+   return
+  endif
 
-  elseif w:netrw_liststyle == s:TREELIST
-"   call Decho("use tree list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+  let savefile= s:NetrwHome()."/.netrwhist"
+  1split
+  call s:NetrwEnew()
+  setl cino= com= cpo-=a cpo-=A fo=nroql2 tw=0 report=10000 noswf
+  setl nocin noai noci magic nospell nohid wig= noaw
+  setl ma noro write
+  if exists("+acd") | setl noacd | endif
+  sil! keepj keepalt %d
 
-  else
-   call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46)
-   let g:netrw_liststyle = s:THINLIST
-   let w:netrw_liststyle = g:netrw_liststyle
-   let g:netrw_list_cmd  = substitute(g:netrw_list_cmd,' -l','','ge')
-  endif
-  setlocal ma noro
-"  call Decho("setlocal ma noro")
+  " save .netrwhist -- no attempt to merge
+  sil! keepalt file .netrwhist
+  call setline(1,"let g:netrw_dirhistmax  =".g:netrw_dirhistmax)
+  call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt)
+  let lastline = line("$")
+  let cnt      = 1
+  while cnt <= g:netrw_dirhist_cnt
+   call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'")
+   let cnt= cnt + 1
+  endwhile
+  exe "sil! w! ".savefile
 
-  " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh
-"  call Decho("clear buffer<".expand("%")."> with :%d")
-  sil! keepj %d
-  " following prevents tree listing buffer from being marked "modified"
-  setlocal nomod
+  sil keepj %d
+  if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
+   " merge and write .netrwbook
+   let savefile= s:NetrwHome()."/.netrwbook"
 
-  " refresh the listing
-"  call Decho("refresh the listing")
-  let svpos= netrw#NetrwSavePosn()
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-  call s:NetrwCursorline()
+   if filereadable(savefile)
+    let booklist= deepcopy(g:netrw_bookmarklist)
+    exe "sil keepj keepalt so ".savefile
+    for bdm in booklist
+     if index(g:netrw_bookmarklist,bdm) == -1
+      call add(g:netrw_bookmarklist,bdm)
+     endif
+    endfor
+    call sort(g:netrw_bookmarklist)
+    exe "sil! w! ".savefile
+   endif
 
-  " keep cursor on the filename
-  sil! keepj $
-  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
-"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
-  if result <= 0 && exists("w:netrw_bannercnt")
-   exe "sil! keepj ".w:netrw_bannercnt
+   " construct and save .netrwbook
+   call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist))
+   exe "sil! w! ".savefile
   endif
+  let bgone= bufnr("%")
+  q!
+  exe "keepalt ".bgone."bwipe!"
 
-"  call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
+"  call Dret("s:NetrwBookHistSave")
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwBannerCtrl: toggles the display of the banner {{{2
-fun! s:NetrwBannerCtrl(islocal)
-"  call Dfunc("s:NetrwBannerCtrl(islocal=".a:islocal.") g:netrw_banner=".g:netrw_banner)
-
-  " toggle the banner (enable/suppress)
-  let g:netrw_banner= !g:netrw_banner
+" s:NetrwBrowse: This function uses the command in g:netrw_list_cmd to provide a {{{2
+"  list of the contents of a local or remote directory.  It is assumed that the
+"  g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted
+"  with the requested remote hostname first.
+fun! s:NetrwBrowse(islocal,dirname)
+  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
+"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr())
+"  call Decho("(NetrwBrowse) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+  " s:NetrwBrowse: initialize history {{{3
+  if !exists("s:netrw_initbookhist")
+   keepj call s:NetrwBookHistRead()
+  endif
 
-  " refresh the listing
-  let svpos= netrw#NetrwSavePosn()
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  " s:NetrwBrowse: simplify the dirname (especially for ".."s in dirnames) {{{3
+  if a:dirname !~ '^\a\+://'
+   let dirname= simplify(a:dirname)
+  else
+   let dirname= a:dirname
+  endif
 
-  " keep cursor on the filename
-  let fname= s:NetrwGetWord()
-  sil keepj $
-  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
-"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
-  if result <= 0 && exists("w:netrw_bannercnt")
-   exe "keepj ".w:netrw_bannercnt
+  if exists("s:netrw_skipbrowse")
+   unlet s:netrw_skipbrowse
+"   call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"   call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
+   return
   endif
-"  call Dret("s:NetrwBannerCtrl : g:netrw_banner=".g:netrw_banner)
-endfun
 
-" ---------------------------------------------------------------------
-" s:NetrwBookmarkMenu: Uses menu priorities {{{2
-"                      .2.[cnt] for bookmarks, and
-"                      .3.[cnt] for history
-"                      (see s:NetrwMenu())
-fun! s:NetrwBookmarkMenu()
-  if !exists("s:netrw_menucnt")
+  " s:NetrwBrowse: sanity checks: {{{3
+  if !exists("*shellescape")
+   keepj call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69)
+"   call Dret("s:NetrwBrowse : missing shellescape()")
+   return
+  endif
+  if !exists("*fnameescape")
+   keepj call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing fnameescape()",70)
+"   call Dret("s:NetrwBrowse : missing fnameescape()")
    return
   endif
-"  call Dfunc("NetrwBookmarkMenu()  histcnt=".g:netrw_dirhist_cnt." menucnt=".s:netrw_menucnt)
 
-  " the following test assures that gvim is running, has menus available, and has menus enabled.
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
-   if exists("g:NetrwTopLvlMenu")
-"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
-    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
-    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete'
-   endif
-   if !exists("s:netrw_initbookhist")
-    call s:NetrwBookHistRead()
-   endif
+  " s:NetrwBrowse: save options: {{{3
+  call s:NetrwOptionSave("w:")                                                                                                            
 
-   " show bookmarked places
-   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
-    let cnt= 1
-    for bmd in g:netrw_bookmarklist
-"     call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmd.' :e '.bmd)
-     let bmd= escape(bmd,g:netrw_menu_escape)
+  " s:NetrwBrowse: re-instate any marked files {{{3
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+"   call Decho("(NetrwBrowse) clearing marked files")
+   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
+  endif
 
-     " show bookmarks for goto menu
-     exe 'sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmd.'   :e '.bmd."\<cr>"
+  if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
+   " s:NetrwBrowse: set up "safe" options for local directory/file {{{3
+"   call Decho("(NetrwBrowse) handle w:netrw_acdkeep:")
+"   call Decho("(NetrwBrowse) keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
+   exe 'keepj lcd '.fnameescape(dirname)
+   call s:NetrwSafeOptions()
+"   call Decho("(NetrwBrowse) getcwd<".getcwd().">")
 
-     " show bookmarks for deletion menu
-     exe 'sil! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.bmd.'  '.cnt."mB"
-     let cnt= cnt + 1
-    endfor
+  elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"'
+   " s:NetrwBrowse: looks like a remote regular file, attempt transfer {{{3
+"   call Decho("(NetrwBrowse) attempt transfer as regular file<".dirname.">")
+
+   " remove any filetype indicator from end of dirname, except for the
+   " "this is a directory" indicator (/).
+   " There shouldn't be one of those here, anyway.
+   let path= substitute(dirname,'[*=@|]\r\=$','','e')
+"   call Decho("(NetrwBrowse) new path<".path.">")
+   call s:RemotePathAnalysis(dirname)
 
+   " s:NetrwBrowse: remote-read the requested file into current buffer {{{3
+   keepj mark '
+   call s:NetrwEnew(dirname)
+   call s:NetrwSafeOptions()
+   setl ma noro
+"   call Decho("(NetrwBrowse) setl ma noro")
+   let b:netrw_curdir = dirname
+   let url            = s:method."://".s:user.s:machine.(s:port ? ":".s:port : "")."/".s:path
+"   call Decho("(NetrwBrowse) exe sil! keepalt file ".fnameescape(url)." (bt=".&bt.")")
+   exe "sil! keepj keepalt file ".fnameescape(url)
+   exe "sil! keepj keepalt doau BufReadPre ".fnameescape(s:fname)
+   sil call netrw#NetRead(2,url)
+   if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' && s:path !~ '.tar.xz' && s:path !~ '.txz'
+    " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error
+    exe "sil keepj keepalt doau BufReadPost ".fnameescape(s:fname)
    endif
 
-   " show directory browsing history
-   let cnt     = g:netrw_dirhist_cnt
-   let first   = 1
-   let histcnt = 0
-   while ( first || cnt != g:netrw_dirhist_cnt )
-    let histcnt  = histcnt + 1
-    let priority = g:netrw_dirhist_cnt + histcnt
-    if exists("g:netrw_dirhist_{cnt}")
-     let histdir= escape(g:netrw_dirhist_{cnt},g:netrw_menu_escape)
-"     call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.' :e '.histdir)
-     exe 'sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'    :e '.histdir."\<cr>"
-    endif
-    let first = 0
-    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
-    if cnt < 0
-     let cnt= cnt + g:netrw_dirhistmax
-    endif
-   endwhile
+   " s:NetrwBrowse: save certain window-oriented variables into buffer-oriented variables {{{3
+   call s:SetBufWinVars()
+   call s:NetrwOptionRestore("w:")
+"   call Decho("(NetrwBrowse) setl ma nomod")
+   setl ma nomod
+"   call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 
+"   call Dret("s:NetrwBrowse : file<".s:fname.">")
+   return
   endif
-"  call Dret("NetrwBookmarkMenu")
-endfun
 
-" ---------------------------------------------------------------------
-"  s:NetrwBrowseChgDir: constructs a new directory based on the current {{{2
-"                       directory and a new directory name.  Also, if the
-"                       "new directory name" is actually a file,
-"                       NetrwBrowseChgDir() edits the file.
-fun! s:NetrwBrowseChgDir(islocal,newdir,...)
-"  call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">")
+  " use buffer-oriented WinVars if buffer variables exist but associated window variables don't {{{3
+  call s:UseBufWinVars()
 
-  if !exists("b:netrw_curdir")
-   " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called
-   " and the current window is the NetrwMessage window.
-"   call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!")
-"   call Decho("getcwd<".getcwd().">")
-"   call Dredir("ls!")
-"   call Dret("s:NetrwBrowseChgDir")
-   return
-  endif
+  " set up some variables {{{3
+  let b:netrw_browser_active = 1
+  let dirname                = dirname
+  let s:last_sort_by         = g:netrw_sort_by
 
-  call s:NetrwOptionSave("s:")
-  call s:NetrwSafeOptions()
-  let nbcd_curpos                = netrw#NetrwSavePosn()
-  let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos
-  if (has("win32") || has("win95") || has("win64") || has("win16"))
-   let dirname                   = substitute(b:netrw_curdir,'\\','/','ge')
-  else
-   let dirname= b:netrw_curdir
-  endif
-  let newdir    = a:newdir
-  let dolockout = 0
+  " set up menu {{{3
+  keepj call s:NetrwMenu(1)
 
-  " set up o/s-dependent directory recognition pattern
-  if has("amiga")
-   let dirpat= '[\/:]$'
+  " get/set-up buffer {{{3
+  let reusing= s:NetrwGetBuffer(a:islocal,dirname)
+  " maintain markfile highlighting
+  if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
+"   call Decho("(NetrwBrowse) bufnr(%)=".bufnr('%'))
+"   call Decho("(NetrwBrowse) exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
+   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
   else
-   let dirpat= '[\/]$'
+"   call Decho("(NetrwBrowse) 2match none")
+   2match none
   endif
-"  call Decho("dirname<".dirname.">  dirpat<".dirpat.">")
-
-  if dirname !~ dirpat
-   " apparently vim is "recognizing" that it is in a directory and
-   " is removing the trailing "/".  Bad idea, so I put it back.
-   let dirname= dirname.'/'
-"   call Decho("adjusting dirname<".dirname.">")
+  if reusing && line("$") > 1
+   call s:NetrwOptionRestore("w:")
+"   call Decho("(NetrwBrowse) setl noma nomod nowrap")
+   setl noma nomod nowrap
+"   call Decho("(NetrwBrowse) (set noma nomod nowrap)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"   call Dret("s:NetrwBrowse : re-using buffer")
+   return
   endif
 
-  if newdir !~ dirpat
-   " ------------
-   " edit a file:
-   " ------------
-"   call Decho('case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
-    let dirname= s:NetrwTreeDir()
-    if dirname =~ '/$'
-     let dirname= dirname.newdir
-    else
-     let dirname= s:NetrwTreeDir()."/".newdir
-    endif
-"    call Decho("dirname<".dirname.">")
-"    call Decho("tree listing")
-   elseif newdir =~ '^\(/\|\a:\)'
-    let dirname= newdir
+  " set b:netrw_curdir to the new directory name {{{3
+"  call Decho("(NetrwBrowse) set b:netrw_curdir to the new directory name:  (buf#".bufnr("%").")")
+  let b:netrw_curdir= dirname
+  if b:netrw_curdir =~ '[/\\]$'
+   let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
+  endif
+  if b:netrw_curdir == ''
+   if has("amiga")
+    " On the Amiga, the empty string connotes the current directory
+    let b:netrw_curdir= getcwd()
    else
-    let dirname= s:ComposePath(dirname,newdir)
+    " under unix, when the root directory is encountered, the result
+    " from the preceding substitute is an empty string.
+    let b:netrw_curdir= '/'
    endif
-"   call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")")
-   " this lets NetrwBrowseX avoid the edit
-   if a:0 < 1
-"    call Decho("set up windows for editing<".fnameescape(dirname).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
-    call s:NetrwOptionRestore("s:")
-    if !exists("s:didsplit")
-     if     g:netrw_browse_split == 1
-      new
-      if !&ea
-       wincmd _
-      endif
-     elseif g:netrw_browse_split == 2
-      rightb vert new
-      if !&ea
-       wincmd |
-      endif
-     elseif g:netrw_browse_split == 3
-      tabnew
-     elseif g:netrw_browse_split == 4
-      if s:NetrwPrevWinOpen(2) == 3
-"       call Dret("s:NetrwBrowseChgDir")
+  endif
+  if !a:islocal && b:netrw_curdir !~ '/$'
+   let b:netrw_curdir= b:netrw_curdir.'/'
+  endif
+"  call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir.">")
+
+  " ------------
+  " (local only) {{{3
+  " ------------
+  if a:islocal
+"   call Decho("(NetrwBrowse) local only:")
+
+   " Set up ShellCmdPost handling.  Append current buffer to browselist
+   call s:LocalFastBrowser()
+
+  " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3
+   if !g:netrw_keepdir
+"    call Decho("(NetrwBrowse) handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+"    call Decho("(NetrwBrowse) l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist"))
+    if !exists("&l:acd") || !&l:acd
+"     call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir))
+     try
+      exe 'keepj lcd '.fnameescape(b:netrw_curdir)
+     catch /^Vim\%((\a\+)\)\=:E472/
+      call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61)
+      if exists("w:netrw_prvdir")
+       let b:netrw_curdir= w:netrw_prvdir
+      else
+       call s:NetrwOptionRestore("w:")
+"       call Decho("(NetrwBrowse) setl noma nomod nowrap")
+       setl noma nomod nowrap
+"       call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+       let b:netrw_curdir= dirname
+"       call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
        return
       endif
-     else
-      " handling a file, didn't split, so remove menu
-"      call Decho("handling a file+didn't split, so remove menu")
-      call s:NetrwMenu(0)
-      " optional change to window
-      if g:netrw_chgwin >= 1
-       exe "keepjumps ".g:netrw_chgwin."wincmd w"
-      endif
-     endif
+     endtry
     endif
+   endif
 
-    " the point where netrw actually edits the (local) file
-    " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
-    if a:islocal
-"     call Decho("edit local file: exe e! ".fnameescape(dirname))
-     exe "e! ".fnameescape(dirname)
-    else
-"     call Decho("remote file: NetrwBrowse will edit it")
-    endif
-    let dolockout= 1
+  " --------------------------------
+  " remote handling: {{{3
+  " --------------------------------
+  else
+"   call Decho("(NetrwBrowse) remote only:")
 
-    " handle g:Netrw_funcref -- call external-to-netrw functions
-    "   This code will handle g:Netrw_funcref as an individual function reference
-    "   or as a list of function references.  It will ignore anything that's not
-    "   a function reference.  See  :help Funcref  for information about function references.
-    if exists("g:Netrw_funcref")
-"     call Decho("handle optional Funcrefs")
-     if type(g:Netrw_funcref) == 2
-"      call Decho("handling a g:Netrw_funcref")
-      call g:Netrw_funcref()
-     elseif type(g:Netrw_funcref) == 3
-"      call Decho("handling a list of g:Netrw_funcrefs")
-      for Fncref in g:Netrw_funcref
-       if type(FncRef) == 2
-        call FncRef()
-       endif
-      endfor
-     endif
+   " analyze dirname and g:netrw_list_cmd {{{3
+"   call Decho("(NetrwBrowse) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
+   if dirname =~ "^NetrwTreeListing\>"
+    let dirname= b:netrw_curdir
+"    call Decho("(NetrwBrowse) (dirname was <NetrwTreeListing>) dirname<".dirname.">")
+   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+    let dirname= substitute(b:netrw_curdir,'\\','/','g')
+    if dirname !~ '/$'
+     let dirname= dirname.'/'
     endif
+    let b:netrw_curdir = dirname
+"    call Decho("(NetrwBrowse) (liststyle is TREELIST) dirname<".dirname.">")
+   else
+    let dirname = substitute(dirname,'\\','/','g')
+"    call Decho("(NetrwBrowse) (normal) dirname<".dirname.">")
    endif
 
-  elseif newdir =~ '^/'
-   " ---------------------------------
-   " just go to the new directory spec
-   " ---------------------------------
-"   call Decho('case "just go to new directory spec": newdir<'.newdir.'>')
-   let dirname= newdir
-   call s:SetRexDir(a:islocal,dirname)
-   call s:NetrwOptionRestore("s:")
+   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
+   if dirname !~ dirpat
+    if !exists("g:netrw_quiet")
+     keepj call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
+    endif
+    keepj call s:NetrwOptionRestore("w:")
+"    call Decho("(NetrwBrowse) setl noma nomod nowrap")
+    setl noma nomod nowrap
+"    call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"    call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">")
+    return
+   endif
+   let b:netrw_curdir= dirname
+"   call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir."> (remote)")
+  endif  " (additional remote handling)
 
-  elseif newdir == './'
-   " --------------------------
-   " refresh the directory list
-   " --------------------------
-"   call Decho('case "refresh directory listing": newdir == "./"')
-   call s:SetRexDir(a:islocal,dirname)
+  " -----------------------
+  " Directory Listing: {{{3
+  " -----------------------
+  keepj call s:NetrwMaps(a:islocal)
+  keepj call s:PerformListing(a:islocal)
+  if v:version >= 700 && has("balloon_eval") && &beval == 0 && &l:bexpr == "" && !exists("g:netrw_nobeval")
+   let &l:bexpr= "netrw#NetrwBalloonHelp()"
+"   call Decho("(NetrwBrowse) set up balloon help: l:bexpr=".&l:bexpr)
+   set beval
+  endif
+  call s:NetrwOptionRestore("w:")
 
-  elseif newdir == '../'
-   " -------------------
-   " go up one directory
-   " -------------------
-"   call Decho('case "go up one directory": newdir == "../"')
+  " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd
+  " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed).
+  " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting
+  " the variable below avoids that second refresh of the screen.  The s:LocalBrowseShellCmdRefresh()
+  " function gets called due to that autocmd; it notices that the following variable is set
+  " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008
+  let s:locbrowseshellcmd= 1
 
-   if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
-    " force a refresh
-"    call Decho("clear buffer<".expand("%")."> with :%d")
-    setlocal noro ma
-"    call Decho("setlocal noro ma")
-    keepj %d
-   endif
+"  call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"  call Dret("s:NetrwBrowse : did PerformListing  ft<".&ft.">")
+  return
+endfun
 
-   if has("amiga")
-    " amiga
-"    call Decho('case "go up one directory": newdir == "../" and amiga')
-    if a:islocal
-     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
-     let dirname= substitute(dirname,'/$','','')
+" ---------------------------------------------------------------------
+" s:NetrwFileInfo: supports qf (query for file information) {{{2
+fun! s:NetrwFileInfo(islocal,fname)
+"  call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)")
+  let ykeep= @@
+  if a:islocal
+   if (has("unix") || has("macunix")) && executable("/bin/ls")
+    if exists("b:netrw_curdir")
+"     call Decho('using ls with b:netrw_curdir<'.b:netrw_curdir.'>')
+     if b:netrw_curdir =~ '/$'
+      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname))
+     else
+      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname))
+     endif
     else
-     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
+"     call Decho('using ls '.a:fname." using cwd<".getcwd().">")
+     echo system("/bin/ls -lsad ".shellescape(a:fname))
     endif
-"    call Decho("amiga: dirname<".dirname."> (go up one dir)")
-
    else
-    " unix or cygwin
-"    call Decho('case "go up one directory": newdir == "../" and unix or cygwin')
-    if a:islocal
-     let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
-     if dirname == ""
-      let dirname= '/'
-     endif
+    " use vim functions to return information about file below cursor
+"    call Decho("using vim functions to query for file info")
+    if !isdirectory(a:fname) && !filereadable(a:fname) && a:fname =~ '[*@/]'
+     let fname= substitute(a:fname,".$","","")
     else
-     let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
+     let fname= a:fname
     endif
-"    call Decho("unix: dirname<".dirname."> (go up one dir)")
+    let t  = getftime(fname)
+    let sz = getfsize(fname)
+    echo a:fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname))
+"    call Decho(fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname)))
    endif
-   call s:SetRexDir(a:islocal,dirname)
+  else
+   echo "sorry, \"qf\" not supported yet for remote files"
+  endif
+  let @@= ykeep
+"  call Dret("s:NetrwFileInfo")
+endfun
 
-  elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
-"   call Decho('case liststyle is TREELIST and w:netrw_treedict exists')
-   " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
-   setlocal noro ma
-"   call Decho("setlocal noro ma")
-   if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
-"    call Decho("clear buffer<".expand("%")."> with :%d")
-    keepj %d
+" ---------------------------------------------------------------------
+" s:NetrwGetBuffer: {{{2
+"   returns 0=cleared buffer
+"           1=re-used buffer
+fun! s:NetrwGetBuffer(islocal,dirname)
+"  call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle)
+"  call Decho("(NetrwGetBuffer) modiable=".&mod." modifiable=".&ma." readonly=".&ro)
+  let dirname= a:dirname
+
+  " re-use buffer if possible {{{3
+"  call Decho("(NetrwGetBuffer) --re-use a buffer if possible--")
+  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+   " find NetrwTreeList buffer if there is one
+"   call Decho("(NetrwGetBuffer) case liststyle=treelist: find NetrwTreeList buffer if there is one")
+   if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
+"    call Decho("(NetrwGetBuffer)   re-using w:netrw_treebufnr=".w:netrw_treebufnr)
+    setl mod
+    sil! keepj %d
+    let eikeep= &ei
+    set ei=all
+    exe "sil! keepalt b ".w:netrw_treebufnr
+    let &ei= eikeep
+"    call Dret("s:NetrwGetBuffer 0<buffer cleared> : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
+    return 0
    endif
-   let treedir      = s:NetrwTreeDir()
-   let s:treecurpos = nbcd_curpos
-   let haskey= 0
-"   call Decho("w:netrw_treedict<".string(w:netrw_treedict).">")
+   let bufnum= -1
+"   call Decho("(NetrwGetBuffer)   liststyle=TREE but w:netrw_treebufnr doesn't exist")
 
-   " search treedict for tree dir as-is
-   if has_key(w:netrw_treedict,treedir)
-"    call Decho('....searched for treedir<'.treedir.'> : found it!')
-    let haskey= 1
-   else
-"    call Decho('....searched for treedir<'.treedir.'> : not found')
+  else
+   " find buffer number of buffer named precisely the same as dirname {{{3
+"   call Decho("(NetrwGetBuffer) case listtyle not treelist: find buffer numnber of buffer named precisely the same as dirname--")
+
+   " get dirname and associated buffer number
+   let bufnum  = bufnr(escape(dirname,'\'))
+"   call Decho("(NetrwGetBuffer)   find buffer<".dirname.">'s number ")
+"   call Decho("(NetrwGetBuffer)   bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
+
+   if bufnum < 0 && dirname !~ '/$'
+    " try appending a trailing /
+"    call Decho("(NetrwGetBuffer)   try appending a trailing / to dirname<".dirname.">")
+    let bufnum= bufnr(escape(dirname.'/','\'))
+    if bufnum > 0
+     let dirname= dirname.'/'
+    endif
    endif
 
-   " search treedict for treedir with a / appended
-   if !haskey && treedir !~ '/$'
-    if has_key(w:netrw_treedict,treedir."/")
-     let treedir= treedir."/"
-"     call Decho('....searched.for treedir<'.treedir.'> found it!')
-     let haskey = 1
+   if bufnum < 0 && dirname =~ '/$'
+    " try removing a trailing /
+"    call Decho("(NetrwGetBuffer)   try removing a trailing / from dirname<".dirname.">")
+    let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\'))
+    if bufnum > 0
+     let dirname= substitute(dirname,'/$','','')
+    endif
+   endif
+
+"   call Decho("(NetrwGetBuffer)   findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
+   " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
+   if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
+    " handle approximate matches
+"    call Decho("(NetrwGetBuffer)   handling approx match: bufnum#".bufnum.">0 AND bufname<".bufname(bufnum).">!=dirname<".dirname."> AND bufname(".bufnum.")!='.'")
+    let ibuf    = 1
+    let buflast = bufnr("$")
+"    call Decho("(NetrwGetBuffer)   findbuf2: buflast=bufnr($)=".buflast)
+    while ibuf <= buflast
+     let bname= substitute(bufname(ibuf),'\\','/','g')
+     let bname= substitute(bname,'.\zs/$','','')
+"     call Decho("(NetrwGetBuffer)   findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">")
+     if bname != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/'
+      " bname is not empty
+      " dirname ends with bname,
+      " dirname doesn't start with /, so its not a absolute path
+"      call Decho("(NetrwGetBuffer)   findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/')
+      break
+     endif
+     if bname =~ '^'.dirname.'/\=$'
+      " bname begins with dirname
+"      call Decho('  findbuf3b: passes test 2 : bname<'.bname.'>=~^'.dirname.'/\=$')
+      break
+     endif
+     if dirname =~ '^'.bname.'/$'
+"      call Decho('  findbuf3c: passes test 3 : dirname<'.dirname.'>=~^'.bname.'/$')
+      break
+     endif
+     if bname != '' && dirname =~ '/'.bname.'$' && bname == bufname("%") && line("$") == 1
+"      call Decho('  findbuf3d: passes test 4 : dirname<'.dirname.'>=~ /'.bname.'$')
+      break
+     endif
+     let ibuf= ibuf + 1
+    endwhile
+    if ibuf > buflast
+     let bufnum= -1
     else
-"     call Decho('....searched for treedir<'.treedir.'/> : not found')
+     let bufnum= ibuf
     endif
+"    call Decho("(NetrwGetBuffer)   findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")")
    endif
+  endif
 
-   " search treedict for treedir with any trailing / elided
-   if !haskey && treedir =~ '/$'
-    let treedir= substitute(treedir,'/$','','')
-    if has_key(w:netrw_treedict,treedir)
-"     call Decho('....searched.for treedir<'.treedir.'> found it!')
-     let haskey = 1
+  " get enew buffer and name it -or- re-use buffer {{{3
+"  call Decho("(NetrwGetBuffer)   get enew buffer and name it OR re-use buffer")
+  sil! keepj keepalt mark '
+  if bufnum < 0 || !bufexists(bufnum)
+"   call Decho("(NetrwGetBuffer) --get enew buffer and name it  (bufnum#".bufnum."<0 OR bufexists(".bufnum.")=".bufexists(bufnum)."==0)")
+   call s:NetrwEnew(dirname)
+"   call Decho("(NetrwGetBuffer)   got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
+   " name the buffer
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+    " Got enew buffer; transform into a NetrwTreeListing
+"    call Decho("(NetrwGetBuffer) --transform enew buffer#".bufnr("%")." into a NetrwTreeListing --")
+    if !exists("s:netrw_treelistnum")
+     let s:netrw_treelistnum= 1
     else
-"     call Decho('....searched for treedir<'.treedir.'> : not found')
+     let s:netrw_treelistnum= s:netrw_treelistnum + 1
     endif
+    let w:netrw_treebufnr= bufnr("%")
+"    call Decho("(NetrwGetBuffer)   exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
+    exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
+    set bt=nofile noswf
+    nnoremap <silent> <buffer> [       :sil call <SID>TreeListMove('[')<cr>
+    nnoremap <silent> <buffer> ]       :sil call <SID>TreeListMove(']')<cr>
+    nnoremap <silent> <buffer> [[       :sil call <SID>TreeListMove('[')<cr>
+    nnoremap <silent> <buffer> ]]       :sil call <SID>TreeListMove(']')<cr>
+"    call Decho("(NetrwGetBuffer)   tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
+   else
+"    let v:errmsg= "" " Decho
+    let escdirname= fnameescape(dirname)
+"    call Decho("(NetrwGetBuffer)   errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">")
+"    call Decho('  exe sil! keepalt file '.escdirname)
+"    let v:errmsg= "" " Decho
+    exe 'sil! keepalt file '.escdirname
+"    call Decho("(NetrwGetBuffer)   errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
    endif
+"   call Decho("(NetrwGetBuffer)   named enew buffer#".bufnr("%")."<".bufname("%").">")
 
-   if haskey
-    " close tree listing for selected subdirectory
-"    call Decho("closing selected subdirectory<".dirname.">")
-    call remove(w:netrw_treedict,treedir)
-"    call Decho("removed     entry<".treedir."> from treedict")
-"    call Decho("yielding treedict<".string(w:netrw_treedict).">")
-    let dirname= w:netrw_treetop
+  else " Re-use the buffer
+"   call Decho("(NetrwGetBuffer) --re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)")
+   let eikeep= &ei
+   set ei=all
+   if getline(2) =~ '^" Netrw Directory Listing'
+"    call Decho("(NetrwGetBuffer)   getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum)
+    exe "sil! keepalt b ".bufnum
    else
-    " go down one directory
-    let dirname= substitute(treedir,'/*$','/','')
-"    call Decho("go down one dir: treedir<".treedir.">")
+"    call Decho("(NetrwGetBuffer)   getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum)
+    exe "sil! keepalt b ".bufnum
    endif
-   call s:SetRexDir(a:islocal,dirname)
-   let s:treeforceredraw = 1
-
-  else
-   " go down one directory
-   let dirname= s:ComposePath(dirname,newdir)
-"   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
-   call s:SetRexDir(a:islocal,dirname)
-  endif
-
-  call s:NetrwOptionRestore("s:")
-  if dolockout
-"   call Decho("filewritable(dirname<".dirname.">)=".filewritable(dirname))
-   if filewritable(dirname)
-"    call Decho("doing modification lockout settings: ma nomod noro")
-    setlocal ma nomod noro
+   if bufname("%") == '.'
+"    call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(getcwd()))
+    exe "sil! keepalt file ".fnameescape(getcwd())
+   endif
+   let &ei= eikeep
+   if line("$") <= 1
+    keepj call s:NetrwListSettings(a:islocal)
+"    call Dret("s:NetrwGetBuffer 0<buffer empty> : re-using buffer#".bufnr("%").", but its empty, so refresh it")
+    return 0
+   elseif g:netrw_fastbrowse == 0 || (a:islocal && g:netrw_fastbrowse == 1)
+    keepj call s:NetrwListSettings(a:islocal)
+    sil keepj %d
+"    call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but refreshing due to g:netrw_fastbrowse=".g:netrw_fastbrowse)
+    return 0
+   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+"    call Decho("(NetrwGetBuffer) --re-use tree listing--")
+"    call Decho("(NetrwGetBuffer)   clear buffer<".expand("%")."> with :%d")
+    sil keepj %d
+    keepj call s:NetrwListSettings(a:islocal)
+"    call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
+    return 0
    else
-"    call Decho("doing modification lockout settings: ma nomod ro")
-    setlocal ma nomod ro
+"    call Dret("s:NetrwGetBuffer 1<buffer not cleared> : buf#".bufnr("%"))
+    return 1
    endif
-"   call Decho("setlocal ma nomod noro")
   endif
 
-"  call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
-  return dirname
+  " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3
+  "     fastbrowse  Local  Remote   Hiding a buffer implies it may be re-used (fast)
+  "  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
+  "  med    1         D      H
+  "  fast   2         H      H
+"  call Decho("(NetrwGetBuffer) --do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--")
+  let fname= expand("%")
+  keepj call s:NetrwListSettings(a:islocal)
+"  call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(fname))
+  exe "sil! keepj keepalt file ".fnameescape(fname)
+
+  " delete all lines from buffer {{{3
+"  call Decho("(NetrwGetBuffer) --delete all lines from buffer--")
+"  call Decho("(NetrwGetBuffer)   clear buffer<".expand("%")."> with :%d")
+  sil! keepalt keepj %d
+
+"  call Dret("s:NetrwGetBuffer 0<cleared buffer> : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+  return 0
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwBrowseX:  (implements "x") executes a special "viewer" script or program for the {{{2
-"              given filename; typically this means given their extension.
-"              0=local, 1=remote
-fun! netrw#NetrwBrowseX(fname,remote)
-"  call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")")
-
-  " special core dump handler
-  if a:fname =~ '/core\(\.\d\+\)\=$'
-   if exists("g:Netrw_corehandler")
-    if type(g:Netrw_corehandler) == 2
-     " g:Netrw_corehandler is a function reference (see :help Funcref)
-"     call Decho("g:Netrw_corehandler is a funcref")
-     call g:Netrw_corehandler(a:fname)
-    elseif type(g:netrw_corehandler) == 3)
-     " g:Netrw_corehandler is a List of function references (see :help Funcref)
-"     call Decho("g:Netrw_corehandler is a List")
-     for Fncref in g:Netrw_corehandler
-      if type(FncRef) == 2
-       call FncRef(a:fname)
-      endif
-     endfor
-    endif
-"    call Dret("NetrwBrowseX : coredump handler invoked")
-    return
-   endif
+" s:NetrwGetcwd: get the current directory. {{{2
+"   Change backslashes to forward slashes, if any.
+"   If doesc is true, escape certain troublesome characters
+fun! s:NetrwGetcwd(doesc)
+"  call Dfunc("NetrwGetcwd(doesc=".a:doesc.")")
+  let curdir= substitute(getcwd(),'\\','/','ge')
+  if curdir !~ '[\/]$'
+   let curdir= curdir.'/'
   endif
-
-  " set up the filename
-  " (lower case the extension, make a local copy of a remote file)
-  let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
-  if has("win32") || has("win95") || has("win64") || has("win16")
-   let exten= substitute(exten,'^.*$','\L&\E','')
+  if a:doesc
+   let curdir= fnameescape(curdir)
   endif
-"  call Decho("exten<".exten.">")
+"  call Dret("NetrwGetcwd <".curdir.">")
+  return curdir
+endfun
 
-  " seems kde systems often have gnome-open due to dependencies, even though
-  " gnome-open's subsidiary display tools are largely absent.  Kde systems
-  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
-  if !exists("s:haskdeinit")
-   if has("unix")
-    let s:haskdeinit= system("ps -e") =~ 'kdeinit' 
-    if v:shell_error
-     let s:haskdeinit = 0
-    endif
+" ---------------------------------------------------------------------
+"  s:NetrwGetWord: it gets the directory/file named under the cursor {{{2
+fun! s:NetrwGetWord()
+"  call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol("."))
+  call s:UseBufWinVars()
+
+  " insure that w:netrw_liststyle is set up
+  if !exists("w:netrw_liststyle")
+   if exists("g:netrw_liststyle")
+    let w:netrw_liststyle= g:netrw_liststyle
    else
-    let s:haskdeinit= 0
+    let w:netrw_liststyle= s:THINLIST
    endif
-"   call Decho("setting s:haskdeinit=".s:haskdeinit)
+"   call Decho("w:netrw_liststyle=".w:netrw_liststyle)
   endif
 
-  if a:remote == 1
-   " create a local copy
-"   call Decho("a:remote=".a:remote.": create a local copy of <".a:fname.">")
-   setlocal bh=delete
-   call netrw#NetRead(3,a:fname)
-   " attempt to rename tempfile
-   let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
-   let newname= substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
-"   call Decho("basename<".basename.">")
-"   call Decho("newname <".newname.">")
-   if rename(s:netrw_tmpfile,newname) == 0
-    " renaming succeeded
-    let fname= newname
-   else
-    " renaming failed
-    let fname= s:netrw_tmpfile
+  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
+   " Active Banner support
+"   call Decho("active banner handling")
+   keepj norm! 0
+   let dirname= "./"
+   let curline= getline('.')
+
+   if curline =~ '"\s*Sorted by\s'
+    keepj norm s
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "s" also works'
+
+   elseif curline =~ '"\s*Sort sequence:'
+    let s:netrw_skipbrowse= 1
+    echo 'Press "S" to edit sorting sequence'
+
+   elseif curline =~ '"\s*Quick Help:'
+    keepj norm ?
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "?" also works'
+
+   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
+    keepj norm a
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "a" also works'
+
+   elseif line("$") > w:netrw_bannercnt
+    exe 'sil keepj '.w:netrw_bannercnt
    endif
+
+  elseif w:netrw_liststyle == s:THINLIST
+"   call Decho("thin column handling")
+   keepj norm! 0
+   let dirname= getline('.')
+
+  elseif w:netrw_liststyle == s:LONGLIST
+"   call Decho("long column handling")
+   keepj norm! 0
+   let dirname= substitute(getline('.'),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e')
+
+  elseif w:netrw_liststyle == s:TREELIST
+"   call Decho("treelist handling")
+   let dirname= substitute(getline('.'),'^\(| \)*','','e')
+
   else
-   let fname= a:fname
-   " special ~ handler for local
-   if fname =~ '^\~' && expand("$HOME") != ""
-"    call Decho('invoking special ~ handler')
-    let fname= substitute(fname,'^\~',expand("$HOME"),'')
+"   call Decho("obtain word from wide listing")
+   let dirname= getline('.')
+
+   if !exists("b:netrw_cpf")
+    let b:netrw_cpf= 0
+    exe 'sil keepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+    call histdel("/",-1)
+"   call Decho("computed cpf=".b:netrw_cpf)
    endif
-  endif
-"  call Decho("fname<".fname.">")
-"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
 
-  " set up redirection
-  if &srr =~ "%s"
-   if (has("win32") || has("win95") || has("win64") || has("win16"))
-    let redir= substitute(&srr,"%s","nul","")
+"   call Decho("buf#".bufnr("%")."<".bufname("%").">")
+   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
+"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
+"   call Decho("1: dirname<".dirname.">")
+   if filestart == 0
+    keepj norm! 0ma
    else
-    let redir= substitute(&srr,"%s","/dev/null","")
+    call cursor(line("."),filestart+1)
+    keepj norm! ma
    endif
-  elseif (has("win32") || has("win95") || has("win64") || has("win16"))
-   let redir= &srr . "nul"
-  else
-   let redir= &srr . "/dev/null"
-  endif
-"  call Decho("redir{".redir."} srr{".&srr."}")
-
-  " extract any viewing options.  Assumes that they're set apart by quotes.
-  if exists("g:netrw_browsex_viewer")
-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
-   if g:netrw_browsex_viewer =~ '\s'
-    let viewer  = substitute(g:netrw_browsex_viewer,'\s.*$','','')
-    let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." "
-    let oviewer = ''
-    let cnt     = 1
-    while !executable(viewer) && viewer != oviewer
-     let viewer  = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\1','')
-     let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." "
-     let cnt     = cnt + 1
-     let oviewer = viewer
-"     call Decho("!exe: viewer<".viewer.">  viewopt<".viewopt.">")
-    endwhile
+   let rega= @a
+   let eofname= filestart + b:netrw_cpf + 1
+   if eofname <= col("$")
+    call cursor(line("."),filestart+b:netrw_cpf+1)
+    keepj norm! "ay`a
    else
-    let viewer  = g:netrw_browsex_viewer
-    let viewopt = ""
+    keepj norm! "ay$
    endif
-"   call Decho("viewer<".viewer.">  viewopt<".viewopt.">")
+   let dirname = @a
+   let @a      = rega
+"   call Decho("2: dirname<".dirname.">")
+   let dirname= substitute(dirname,'\s\+$','','e')
+"   call Decho("3: dirname<".dirname.">")
   endif
 
-  " execute the file handler
-  if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-'
-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
-   let ret= netrwFileHandlers#Invoke(exten,fname)
+  " symlinks are indicated by a trailing "@".  Remove it before further processing.
+  let dirname= substitute(dirname,"@$","","")
 
-  elseif exists("g:netrw_browsex_viewer") && executable(viewer)
-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
-"   call Decho("exe silent !".viewer." ".viewopt.shellescape(fname,1).redir)
-   exe "silent !".viewer." ".viewopt.shellescape(fname,1).redir
-   let ret= v:shell_error
+  " executables are indicated by a trailing "*".  Remove it before further processing.
+  let dirname= substitute(dirname,"\*$","","")
+
+"  call Dret("s:NetrwGetWord <".dirname.">")
+  return dirname
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwListSettings: make standard settings for a netrw listing {{{2
+fun! s:NetrwListSettings(islocal)
+"  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
+  let fname= bufname("%")
+"  call Decho("(NetrwListSettings) setl bt=nofile nobl ma nonu nowrap noro")
+  setl bt=nofile nobl ma nonu nowrap noro
+"  call Decho("(NetrwListSettings) exe sil! keepalt file ".fnameescape(fname))
+  exe "sil! keepalt file ".fnameescape(fname)
+  if g:netrw_use_noswf
+   setl noswf
+  endif
+"  call Decho("(NetrwListSettings) exe setl ts=".(g:netrw_maxfilenamelen+1))
+  exe "setl ts=".(g:netrw_maxfilenamelen+1)
+  setl isk+=.,~,-
+  if g:netrw_fastbrowse > a:islocal
+   setl bh=hide
+  else
+   setl bh=delete
+  endif
+"  call Dret("s:NetrwListSettings")
+endfun
+
+" ---------------------------------------------------------------------
+"  s:NetrwListStyle: {{{2
+"  islocal=0: remote browsing
+"         =1: local browsing
+fun! s:NetrwListStyle(islocal)
+"  call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle)
+  let ykeep             = @@
+  let fname             = s:NetrwGetWord()
+  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
+  let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST
+"  call Decho("fname<".fname.">")
+"  call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle)
+"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">")
 
-  elseif has("win32") || has("win64")
-   if executable("start")
-"    call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
-    exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
-   elseif executable("rundll32")
-"    call Decho('exe silent !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
-    exe 'silent !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
-   else
-    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
-   endif
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   let ret= v:shell_error
+  if w:netrw_liststyle == s:THINLIST
+   " use one column listing
+"   call Decho("use one column list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
 
-  elseif has("unix") && executable("gnome-open") && !s:haskdeinit
-"   call Decho("exe silent !gnome-open ".shellescape(fname,1)." ".redir)
-   exe "sil !gnome-open ".shellescape(fname,1).redir
-   let ret= v:shell_error
+  elseif w:netrw_liststyle == s:LONGLIST
+   " use long list
+"   call Decho("use long list")
+   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
 
-  elseif has("unix") && executable("kfmclient") && s:haskdeinit
-"   call Decho("exe silent !kfmclient exec ".shellescape(fname,1)." ".redir)
-   exe "sil !kfmclient exec ".shellescape(fname,1)." ".redir
-   let ret= v:shell_error
+  elseif w:netrw_liststyle == s:WIDELIST
+   " give wide list
+"   call Decho("use wide list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
 
-  elseif has("macunix") && executable("open")
-"   call Decho("exe silent !open ".shellescape(fname,1)." ".redir)
-   exe "sil !open ".shellescape(fname,1)." ".redir
-   let ret= v:shell_error
+  elseif w:netrw_liststyle == s:TREELIST
+"   call Decho("use tree list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
 
   else
-   " netrwFileHandlers#Invoke() always returns 0
-   let ret= netrwFileHandlers#Invoke(exten,fname)
-  endif
-
-  " if unsuccessful, attempt netrwFileHandlers#Invoke()
-  if ret
-   let ret= netrwFileHandlers#Invoke(exten,fname)
+   keepj call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46)
+   let g:netrw_liststyle = s:THINLIST
+   let w:netrw_liststyle = g:netrw_liststyle
+   let g:netrw_list_cmd  = substitute(g:netrw_list_cmd,' -l','','ge')
   endif
+  setl ma noro
+"  call Decho("setl ma noro")
 
-  " restoring redraw! after external file handlers
-  redraw!
+  " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh
+"  call Decho("clear buffer<".expand("%")."> with :%d")
+  sil! keepj %d
+  " following prevents tree listing buffer from being marked "modified"
+"  call Decho("(NetrwListStyle) setl nomod")
+  setl nomod
+"  call Decho("(NetrwListStyle) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 
-  " cleanup: remove temporary file,
-  "          delete current buffer if success with handler,
-  "          return to prior buffer (directory listing)
-  "          Feb 12, 2008: had to de-activiate removal of
-  "          temporary file because it wasn't getting seen.
-"  if a:remote == 1 && fname != a:fname
-"   call Decho("deleting temporary file<".fname.">")
-"   call s:NetrwDelete(fname)
-"  endif
+  " refresh the listing
+"  call Decho("(NetrwListStyle) refresh the listing")
+  let svpos= netrw#NetrwSavePosn()
+  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwCursor()
 
-  if a:remote == 1
-   setlocal bh=delete bt=nofile
-   if g:netrw_use_noswf
-    setlocal noswf
-   endif
-   exe "keepj norm! \<c-o>"
-"   redraw!
+  " keep cursor on the filename
+  sil! keepj $
+  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
+"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
+  if result <= 0 && exists("w:netrw_bannercnt")
+   exe "sil! keepj ".w:netrw_bannercnt
   endif
+  let @@= ykeep
 
-"  call Dret("NetrwBrowseX")
+"  call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwChgPerm: (implements "gp") change file permission {{{2
-fun! s:NetrwChgPerm(islocal,curdir)
-"  call Dfunc("s:NetrwChgPerm(islocal=".a:islocal." curdir<".a:curdir.">)")
-  call inputsave()
-  let newperm= input("Enter new permission: ")
-  call inputrestore()
-  let chgperm= substitute(g:netrw_chgperm,'\<FILENAME\>',shellescape(expand("<cfile>")),'')
-  let chgperm= substitute(chgperm,'\<PERM\>',shellescape(newperm),'')
-"  call Decho("chgperm<".chgperm.">")
-  call system(chgperm)
-  if v:shell_error != 0
-   call netrw#ErrorMsg(1,"changing permission on file<".expand("<cfile>")."> seems to have failed",75)
-  endif
-  if a:islocal
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  endif
-"  call Dret("s:NetrwChgPerm")
-endfun
+" s:NetrwBannerCtrl: toggles the display of the banner {{{2
+fun! s:NetrwBannerCtrl(islocal)
+"  call Dfunc("s:NetrwBannerCtrl(islocal=".a:islocal.") g:netrw_banner=".g:netrw_banner)
 
-" ---------------------------------------------------------------------
-" s:NetrwClearExplore: clear explore variables (if any) {{{2
-fun! s:NetrwClearExplore()
-"  call Dfunc("s:NetrwClearExplore()")
-  2match none
-  if exists("s:explore_match")        |unlet s:explore_match        |endif
-  if exists("s:explore_indx")         |unlet s:explore_indx         |endif
-  if exists("s:netrw_explore_prvdir") |unlet s:netrw_explore_prvdir |endif
-  if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
-  if exists("s:explore_prvdir")       |unlet s:explore_prvdir       |endif
-  if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
-  if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
-  if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
-  if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
-"   redraw!
-  echo " "
-  echo " "
-"  call Dret("s:NetrwClearExplore")
+  let ykeep= @@
+  " toggle the banner (enable/suppress)
+  let g:netrw_banner= !g:netrw_banner
+
+  " refresh the listing
+  let svpos= netrw#NetrwSavePosn()
+  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+
+  " keep cursor on the filename
+  let fname= s:NetrwGetWord()
+  sil keepj $
+  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
+"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
+  if result <= 0 && exists("w:netrw_bannercnt")
+   exe "keepj ".w:netrw_bannercnt
+  endif
+  let @@= ykeep
+"  call Dret("s:NetrwBannerCtrl : g:netrw_banner=".g:netrw_banner)
 endfun
 
 " ---------------------------------------------------------------------
-" netrw#Explore: launch the local browser in the directory of the current file {{{2
-"          indx:  == -1: Nexplore
-"                 == -2: Pexplore
-"                 ==  +: this is overloaded:
-"                      * If Nexplore/Pexplore is in use, then this refers to the
-"                        indx'th item in the w:netrw_explore_list[] of items which
-"                        matched the */pattern **/pattern *//pattern **//pattern
-"                      * If Hexplore or Vexplore, then this will override
-"                        g:netrw_winsize to specify the qty of rows or columns the
-"                        newly split window should have.
-"          dosplit==0: the window will be split iff the current file has been modified
-"          dosplit==1: the window will be split before running the local browser
-"          style == 0: Explore     style == 1: Explore!
-"                == 2: Hexplore    style == 3: Hexplore!
-"                == 4: Vexplore    style == 5: Vexplore!
-"                == 6: Texplore
-fun! netrw#Explore(indx,dosplit,style,...)
-"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." a:0=".a:0)
-  if !exists("b:netrw_curdir")
-   let b:netrw_curdir= getcwd()
-"   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
+" s:NetrwBookmarkMenu: Uses menu priorities {{{2
+"                      .2.[cnt] for bookmarks, and
+"                      .3.[cnt] for history
+"                      (see s:NetrwMenu())
+fun! s:NetrwBookmarkMenu()
+  if !exists("s:netrw_menucnt")
+   return
   endif
-  let curdir     = simplify(b:netrw_curdir)
-  let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
-"  call Decho("curdir<".curdir.">  curfiledir<".curfiledir.">")
-
-  " save registers
-  sil! let keepregstar = @*
-  sil! let keepregplus = @+
-  sil! let keepregslash= @/
+"  call Dfunc("NetrwBookmarkMenu()  histcnt=".g:netrw_dirhist_cnt." menucnt=".s:netrw_menucnt)
 
-  " if dosplit or file has been modified
-  if a:dosplit || &modified || a:style == 6
-"   call Decho("case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified")
-   call s:SaveWinVars()
-   let winsize= g:netrw_winsize
-   if a:indx > 0
-    let winsize= a:indx
+  " the following test assures that gvim is running, has menus available, and has menus enabled.
+  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
+   if exists("g:NetrwTopLvlMenu")
+"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
+    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
+    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete'
+   endif
+   if !exists("s:netrw_initbookhist")
+    call s:NetrwBookHistRead()
    endif
 
-   if a:style == 0      " Explore, Sexplore
-"    call Decho("style=0: Explore or Sexplore")
-    exe winsize."wincmd s"
+   " show bookmarked places
+   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] && g:netrw_dirhistmax > 0
+    let cnt= 1
+    for bmd in g:netrw_bookmarklist
+     let ebmd= escape(bmd,g:netrw_menu_escape)
+"     call Decho('sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.ebmd.'   :e '.bmd)
 
-   elseif a:style == 1  "Explore!, Sexplore!
-"    call Decho("style=1: Explore! or Sexplore!")
-    exe winsize."wincmd v"
+     " show bookmarks for goto menu
+     exe 'sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.ebmd.'  :e '.bmd."\<cr>"
 
-   elseif a:style == 2  " Hexplore
-"    call Decho("style=2: Hexplore")
-    exe "bel ".winsize."wincmd s"
+     " show bookmarks for deletion menu
+     exe 'sil! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.ebmd.' '.cnt."mB"
+     let cnt= cnt + 1
+    endfor
 
-   elseif a:style == 3  " Hexplore!
-"    call Decho("style=3: Hexplore!")
-    exe "abo ".winsize."wincmd s"
+   endif
 
-   elseif a:style == 4  " Vexplore
-"    call Decho("style=4: Vexplore")
-    exe "lefta ".winsize."wincmd v"
+   " show directory browsing history
+   if g:netrw_dirhistmax > 0
+    let cnt     = g:netrw_dirhist_cnt
+    let first   = 1
+    let histcnt = 0
+    while ( first || cnt != g:netrw_dirhist_cnt )
+     let histcnt  = histcnt + 1
+     let priority = g:netrw_dirhist_cnt + histcnt
+     if exists("g:netrw_dirhist_{cnt}")
+      let histdir= escape(g:netrw_dirhist_{cnt},g:netrw_menu_escape)
+"     call Decho('sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'    :e '.histdir)
+      exe 'sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'   :e '.histdir."\<cr>"
+     endif
+     let first = 0
+     let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
+     if cnt < 0
+      let cnt= cnt + g:netrw_dirhistmax
+     endif
+    endwhile
+   endif
 
-   elseif a:style == 5  " Vexplore!
-"    call Decho("style=5: Vexplore!")
-    exe "rightb ".winsize."wincmd v"
+  endif
+"  call Dret("NetrwBookmarkMenu")
+endfun
 
-   elseif a:style == 6  " Texplore
-    call s:SaveBufVars()
-"    call Decho("style  = 6: Texplore")
-    tabnew
-    call s:RestoreBufVars()
-   endif
-   call s:RestoreWinVars()
-"  else " Decho
-"   call Decho("case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6")
+" ---------------------------------------------------------------------
+"  s:NetrwBrowseChgDir: constructs a new directory based on the current {{{2
+"                       directory and a new directory name.  Also, if the
+"                       "new directory name" is actually a file,
+"                       NetrwBrowseChgDir() edits the file.
+fun! s:NetrwBrowseChgDir(islocal,newdir,...)
+"  call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">")
+
+  let ykeep= @@
+  if !exists("b:netrw_curdir")
+   " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called
+   " and the current window is the NetrwMessage window.
+   let @@= ykeep
+"   call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!")
+"   call Decho("(NetrwBrowseChgDir) getcwd<".getcwd().">")
+"   call Dret("s:NetrwBrowseChgDir")
+   return
   endif
-  keepj norm! 0
 
-  if a:0 > 0
-"   call Decho("case [a:0=".a:0."] > 0: a:1<".a:1.">")
-   if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
-"    call Decho("case a:1: ~ and unix or cygwin")
-    let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
-"    call Decho("using dirname<".dirname.">  (case: ~ && unix||cygwin)")
-   elseif a:1 == '.'
-"    call Decho("case a:1: .")
-    let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd())
-    if dirname !~ '/$'
-     let dirname= dirname."/"
-    endif
-"    call Decho("using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
-   elseif a:1 =~ '\$'
-"    call Decho("case a:1: $")
-    let dirname= simplify(expand(a:1))
-"    call Decho("using user-specified dirname<".dirname."> with $env-var")
-   elseif a:1 !~ '^\*/'
-"    call Decho("case a:1: other, not pattern or filepattern")
-    let dirname= simplify(a:1)
-"    call Decho("using user-specified dirname<".dirname.">")
-   else
-"    call Decho("case a:1: pattern or filepattern")
-    let dirname= a:1
-   endif
+  " NetrwBrowseChgDir: save options and initialize {{{3
+  keepj call s:NetrwOptionSave("s:")
+  keepj call s:NetrwSafeOptions()
+  let nbcd_curpos                = netrw#NetrwSavePosn()
+  let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos
+"  call Decho("(NetrwBrowseChgDir) setting s:nbcd_curpos_".bufnr('%')." to SavePosn")
+  if (has("win32") || has("win95") || has("win64") || has("win16"))
+   let dirname                   = substitute(b:netrw_curdir,'\\','/','ge')
   else
-   " clear explore
-"   call Decho("case a:0=".a:0.": clearing Explore list")
-   call s:NetrwClearExplore()
-"   call Dret("netrw#Explore : cleared list")
-   return
+   let dirname= b:netrw_curdir
+  endif
+  let newdir    = a:newdir
+  let dolockout = 0
+
+  " set up o/s-dependent directory recognition pattern
+  if has("amiga")
+   let dirpat= '[\/:]$'
+  else
+   let dirpat= '[\/]$'
   endif
+"  call Decho("(NetrwBrowseChgDir) dirname<".dirname.">  dirpat<".dirpat.">")
 
-"  call Decho("dirname<".dirname.">")
-  if dirname =~ '\.\./\=$'
-   let dirname= simplify(fnamemodify(dirname,':p:h'))
-  elseif dirname =~ '\.\.' || dirname == '.'
-   let dirname= simplify(fnamemodify(dirname,':p'))
+  if dirname !~ dirpat
+   " apparently vim is "recognizing" that it is in a directory and
+   " is removing the trailing "/".  Bad idea, so let's put it back.
+   let dirname= dirname.'/'
+"   call Decho("(NetrwBrowseChgDir) adjusting dirname<".dirname.">")
   endif
-"  call Decho("dirname<".dirname.">  (after simplify)")
 
-  if dirname =~ '/\*\*/'
-   " handle .../**/.../filepat
-"   call Decho("case Explore .../**/.../filepat")
-   let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','')
-   if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16")))
-    let b:netrw_curdir = prefixdir
+  if newdir !~ dirpat
+   " ------------------------------
+   " NetrwBrowseChgDir: edit a file {{{3
+   " ------------------------------
+"   call Decho('(NetrwBrowseChgDir:edit-a-file) case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
+
+   " save position for benefit of Rexplore
+   let s:rexposn_{bufnr("%")}= netrw#NetrwSavePosn()
+
+"   call Decho("(NetrwBrowseChgDir:edit-a-file) setting s:rexposn_".bufnr("%")." to SavePosn")
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
+    let dirname= s:NetrwTreeDir()
+    if dirname =~ '/$'
+     let dirname= dirname.newdir
+    else
+     let dirname= s:NetrwTreeDir()."/".newdir
+    endif
+"    call Decho("(NetrwBrowseChgDir:edit-a-file) dirname<".dirname.">")
+"    call Decho("(NetrwBrowseChgDir:edit-a-file) tree listing")
+   elseif newdir =~ '^\(/\|\a:\)'
+    let dirname= newdir
    else
-    let b:netrw_curdir= getcwd().'/'.prefixdir
+    let dirname= s:ComposePath(dirname,newdir)
    endif
-   let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','')
-   let starpat= 4;
-"   call Decho("pwd<".getcwd()."> dirname<".dirname.">")
-"   call Decho("case Explore ../**/../filepat (starpat=".starpat.")")
+"   call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file: dirname<".dirname."> (a:0=".a:0.")")
+   " this lets NetrwBrowseX avoid the edit
+   if a:0 < 1
+"    call Decho("(NetrwBrowseChgDir:edit-a-file) set up windows for editing<".fnameescape(dirname).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
+    keepj call s:NetrwOptionRestore("s:")
+    if !exists("s:didsplit")
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) s:didsplit does not exist; g:netrw_browse_split=".g:netrw_browse_split." win#".winnr())
+     if     g:netrw_browse_split == 1
+      " horizontally splitting the window first
+      keepalt new
+      if !&ea
+       keepalt wincmd _
+      endif
+     elseif g:netrw_browse_split == 2
+      " vertically splitting the window first
+      keepalt rightb vert new
+      if !&ea
+       keepalt wincmd |
+      endif
+     elseif g:netrw_browse_split == 3
+      " open file in new tab
+      keepalt tabnew
+     elseif g:netrw_browse_split == 4
+      " act like "P" (ie. open previous window)
+      if s:NetrwPrevWinOpen(2) == 3
+       let @@= ykeep
+"       call Dret("s:NetrwBrowseChgDir")
+       return
+      endif
+     else
+      " handling a file, didn't split, so remove menu
+"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file+didn't split, so remove menu")
+      call s:NetrwMenu(0)
+      " optional change to window
+      if g:netrw_chgwin >= 1
+       exe "keepj keepalt ".g:netrw_chgwin."wincmd w"
+      endif
+     endif
+    endif
 
-  elseif dirname =~ '^\*//'
-   " starpat=1: Explore *//pattern   (current directory only search for files containing pattern)
-"   call Decho("case Explore *//pattern")
-   let pattern= substitute(dirname,'^\*//\(.*\)$','\1','')
-   let starpat= 1
-"   call Decho("Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
-   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+    " the point where netrw actually edits the (local) file
+    " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
+    if a:islocal
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) edit local file: exe e! ".fnameescape(dirname))
+     exe "keepj keepalt e! ".fnameescape(dirname)
+     call s:NetrwCursor()
+    else
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) remote file: NetrwBrowse will edit it")
+    endif
+    let dolockout= 1
 
-  elseif dirname =~ '^\*\*//'
-   " starpat=2: Explore **//pattern  (recursive descent search for files containing pattern)
-"   call Decho("case Explore **//pattern")
-   let pattern= substitute(dirname,'^\*\*//','','')
-   let starpat= 2
-"   call Decho("Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+    " handle g:Netrw_funcref -- call external-to-netrw functions
+    "   This code will handle g:Netrw_funcref as an individual function reference
+    "   or as a list of function references.  It will ignore anything that's not
+    "   a function reference.  See  :help Funcref  for information about function references.
+    if exists("g:Netrw_funcref")
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) handle optional Funcrefs")
+     if type(g:Netrw_funcref) == 2
+"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a g:Netrw_funcref")
+      keepj call g:Netrw_funcref()
+     elseif type(g:Netrw_funcref) == 3
+"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a list of g:Netrw_funcrefs")
+      for Fncref in g:Netrw_funcref
+       if type(FncRef) == 2
+        keepj call FncRef()
+       endif
+      endfor
+     endif
+    endif
+   endif
 
-  elseif dirname =~ '^\*/'
-   " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-   let starpat= 3
-"   call Decho("case Explore */filepat (starpat=".starpat.")")
+  elseif newdir =~ '^/'
+   " ----------------------------------------------------
+   " NetrwBrowseChgDir: just go to the new directory spec {{{3
+   " ----------------------------------------------------
+"   call Decho('(NetrwBrowseChgDir:goto-newdir) case "just go to new directory spec": newdir<'.newdir.'>')
+   let dirname    = newdir
+   keepj call s:SetRexDir(a:islocal,dirname)
+   keepj call s:NetrwOptionRestore("s:")
 
-  elseif dirname=~ '^\*\*/'
-   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-   let starpat= 4
-"   call Decho("case Explore **/filepat (starpat=".starpat.")")
+  elseif newdir == './'
+   " ---------------------------------------------
+   " NetrwBrowseChgDir: refresh the directory list {{{3
+   " ---------------------------------------------
+"   call Decho('(NetrwBrowseChgDir:refresh-dirlist) case "refresh directory listing": newdir == "./"')
+   keepj call s:SetRexDir(a:islocal,dirname)
 
-  else
-   let starpat= 0
-"   call Decho("default case: starpat=".starpat)
-  endif
+  elseif newdir == '../'
+   " --------------------------------------
+   " NetrwBrowseChgDir: go up one directory {{{3
+   " --------------------------------------
+"   call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../"')
 
-  if starpat == 0 && a:indx >= 0
-   " [Explore Hexplore Vexplore Sexplore] [dirname]
-"   call Decho("case starpat==0 && a:indx=".a:indx.": dirname<".dirname."> Explore Hexplore Vexplore Sexplore")
-   if dirname == ""
-    let dirname= curfiledir
-"    call Decho("empty dirname, using current file's directory<".dirname.">")
+   if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+    " force a refresh
+"    call Decho("(NetrwBrowseChgDir:go-up) clear buffer<".expand("%")."> with :%d")
+"    call Decho("(NetrwBrowseChgDir:go-up) setl noro ma")
+    setl noro ma
+    keepj %d
    endif
-   if dirname =~ '^scp:' || dirname =~ '^ftp:'
-"    call Decho("calling NetrwBrowse(0,dirname<".dirname.">)")
-    call s:NetrwBrowse(0,dirname)
+
+   if has("amiga")
+    " amiga
+"    call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and amiga')
+    if a:islocal
+     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
+     let dirname= substitute(dirname,'/$','','')
+    else
+     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
+    endif
+"    call Decho("(NetrwBrowseChgDir:go-up) amiga: dirname<".dirname."> (go up one dir)")
+
    else
-    if dirname == ""|let dirname= getcwd()|endif
-"    call Decho("calling LocalBrowseCheck(dirname<".dirname.">)")
-    call netrw#LocalBrowseCheck(dirname)
+    " unix or cygwin
+"    call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and unix or cygwin')
+    if a:islocal
+     let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
+     if dirname == ""
+      let dirname= '/'
+     endif
+    else
+     let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
+    endif
+"    call Decho("(NetrwBrowseChgDir:go-up) unix: dirname<".dirname."> (go up one dir)")
    endif
+   keepj call s:SetRexDir(a:islocal,dirname)
 
-"   call Decho("curdir<".curdir.">")
-   if has("win32") || has("win95") || has("win64") || has("win16")
-    keepj call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
-   else
-    keepj call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
+  elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+   " --------------------------------------
+   " NetrwBrowseChgDir: Handle Tree Listing {{{3
+   " --------------------------------------
+"   call Decho('(NetrwBrowseChgDir:tree-list) case liststyle is TREELIST and w:netrw_treedict exists')
+   " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
+"   call Decho("(NetrwBrowseChgDir) (treelist) setl noro ma")
+   setl noro ma
+   if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
+"    call Decho("(NetrwBrowseChgDir) clear buffer<".expand("%")."> with :%d")
+    keepj %d
    endif
+   let treedir      = s:NetrwTreeDir()
+   let s:treecurpos = nbcd_curpos
+   let haskey= 0
+"   call Decho("(NetrwBrowseChgDir:tree-list) w:netrw_treedict<".string(w:netrw_treedict).">")
 
-  " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
-  " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
-  " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-  " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-  elseif a:indx <= 0
-   " Nexplore, Pexplore, Explore: handle starpat
-"   call Decho("case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx)
-   if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
-"    call Decho("set up <s-up> and <s-down> maps")
-    let s:didstarstar= 1
-    nnoremap <buffer> <silent> <s-up>  :Pexplore<cr>
-    nnoremap <buffer> <silent> <s-down>        :Nexplore<cr>
+   " search treedict for tree dir as-is
+   if has_key(w:netrw_treedict,treedir)
+"    call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : found it!')
+    let haskey= 1
+   else
+"    call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found')
    endif
 
-   if has("path_extra")
-"    call Decho("starpat=".starpat.": has +path_extra")
-    if !exists("w:netrw_explore_indx")
-     let w:netrw_explore_indx= 0
+   " search treedict for treedir with a / appended
+   if !haskey && treedir !~ '/$'
+    if has_key(w:netrw_treedict,treedir."/")
+     let treedir= treedir."/"
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!')
+     let haskey = 1
+    else
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'/> : not found')
     endif
+   endif
 
-    let indx = a:indx
-"    call Decho("starpat=".starpat.": set indx= [a:indx=".indx."]")
-
-    if indx == -1
-     " Nexplore
-"     call Decho("case Nexplore with starpat=".starpat.": (indx=".indx.")")
-     if !exists("w:netrw_explore_list") " sanity check
-      call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
-      sil! let @* = keepregstar
-      sil! let @+ = keepregstar
-      sil! let @/ = keepregslash
-"      call Dret("netrw#Explore")
-      return
-     endif
-     let indx= w:netrw_explore_indx
-     if indx < 0                        | let indx= 0                           | endif
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-     let curfile= w:netrw_explore_list[indx]
-"     call Decho("indx=".indx." curfile<".curfile.">")
-     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
-      let indx= indx + 1
-"      call Decho("indx=".indx." (Nexplore while loop)")
-     endwhile
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-"     call Decho("Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
-
-    elseif indx == -2
-     " Pexplore
-"     call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")")
-     if !exists("w:netrw_explore_list") " sanity check
-      call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
-      sil! let @* = keepregstar
-      sil! let @+ = keepregstar
-      sil! let @/ = keepregslash
-"      call Dret("netrw#Explore")
-      return
-     endif
-     let indx= w:netrw_explore_indx
-     if indx < 0                        | let indx= 0                           | endif
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-     let curfile= w:netrw_explore_list[indx]
-"     call Decho("indx=".indx." curfile<".curfile.">")
-     while indx >= 0 && curfile == w:netrw_explore_list[indx]
-      let indx= indx - 1
-"      call Decho("indx=".indx." (Pexplore while loop)")
-     endwhile
-     if indx < 0                        | let indx= 0                           | endif
-"     call Decho("Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
-
+   " search treedict for treedir with any trailing / elided
+   if !haskey && treedir =~ '/$'
+    let treedir= substitute(treedir,'/$','','')
+    if has_key(w:netrw_treedict,treedir)
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!')
+     let haskey = 1
     else
-     " Explore -- initialize
-     " build list of files to Explore with Nexplore/Pexplore
-"     call Decho("starpat=".starpat.": case Explore: initialize (indx=".indx.")")
-     call s:NetrwClearExplore()
-     let w:netrw_explore_indx= 0
-     if !exists("b:netrw_curdir")
-      let b:netrw_curdir= getcwd()
-     endif
-"     call Decho("starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">")
-
-     " switch on starpat to build the w:netrw_explore_list of files
-     if starpat == 1
-      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
-"      call Decho("starpat=".starpat.": build *//pattern list")
-"      call Decho("pattern<".pattern.">")
-      try
-       exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
-      catch /^Vim\%((\a\+)\)\=:E480/
-       call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
-"       call Dret("netrw#Explore : unable to find pattern<".pattern.">")
-       return
-      endtry
-      let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)'))
-      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
-
-     elseif starpat == 2
-      " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
-"      call Decho("starpat=".starpat.": build **//pattern list")
-      try
-       exe "sil keepj noautocmd vimgrep /".pattern."/gj "."**/*"
-      catch /^Vim\%((\a\+)\)\=:E480/
-       call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
-       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
-       silent! let @* = keepregstar
-       silent! let @+ = keepregstar
-       silent! let @/ = keepregslash
-"       call Dret("netrw#Explore : no files matched pattern")
-       return
-      endtry
-      let s:netrw_curdir       = b:netrw_curdir
-      let w:netrw_explore_list = getqflist()
-      let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)'))
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found')
+    endif
+   endif
 
-     elseif starpat == 3
-      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-"      call Decho("starpat=".starpat.": build */filepat list")
-      let filepat= substitute(dirname,'^\*/','','')
-      let filepat= substitute(filepat,'^[%#<]','\\&','')
-"      call Decho("b:netrw_curdir<".b:netrw_curdir.">")
-"      call Decho("filepat<".filepat.">")
-      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n'))
-      if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif
+   if haskey
+    " close tree listing for selected subdirectory
+"    call Decho("(NetrwBrowseChgDir:tree-list) closing selected subdirectory<".dirname.">")
+    call remove(w:netrw_treedict,treedir)
+"    call Decho("(NetrwBrowseChgDir) removed     entry<".treedir."> from treedict")
+"    call Decho("(NetrwBrowseChgDir) yielding treedict<".string(w:netrw_treedict).">")
+    let dirname= w:netrw_treetop
+   else
+    " go down one directory
+    let dirname= substitute(treedir,'/*$','/','')
+"    call Decho("(NetrwBrowseChgDir:tree-list) go down one dir: treedir<".treedir.">")
+   endif
+   keepj call s:SetRexDir(a:islocal,dirname)
+   let s:treeforceredraw = 1
 
-     elseif starpat == 4
-      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-"      call Decho("starpat=".starpat.": build **/filepat list")
-      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n'))
-      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
-     endif " switch on starpat to build w:netrw_explore_list
+  else
+   " ----------------------------------------
+   " NetrwBrowseChgDir: Go down one directory {{{3
+   " ----------------------------------------
+   let dirname    = s:ComposePath(dirname,newdir)
+"   call Decho("(NetrwBrowseChgDir:go-down) go down one dir: dirname<".dirname."> newdir<".newdir.">")
+   keepj call s:SetRexDir(a:islocal,dirname)
+  endif
+
+ " --------------------------------------
+ " NetrwBrowseChgDir: Restore and Cleanup {{{3
+ " --------------------------------------
+  keepj call s:NetrwOptionRestore("s:")
+  if dolockout
+"   call Decho("(NetrwBrowseChgDir:restore) filewritable(dirname<".dirname.">)=".filewritable(dirname))
+   if filewritable(dirname)
+"    call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod noro")
+"    call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro")
+    setl ma nomod noro
+"    call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+   else
+"    call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod ro")
+"    call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro")
+    setl ma nomod ro
+"    call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+   endif
+  endif
+  let @@= ykeep
 
-     let w:netrw_explore_listlen = len(w:netrw_explore_list)
-"     call Decho("w:netrw_explore_list<".string(w:netrw_explore_list).">")
-"     call Decho("w:netrw_explore_listlen=".w:netrw_explore_listlen)
+"  call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
+  return dirname
+endfun
 
-     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
-      call netrw#ErrorMsg(s:WARNING,"no files matched",42)
-      sil! let @* = keepregstar
-      sil! let @+ = keepregstar
-      sil! let @/ = keepregslash
-"      call Dret("netrw#Explore : no files matched")
-      return
-     endif
-    endif  " if indx ... endif
+" ---------------------------------------------------------------------
+" s:NetrwBrowseX:  (implements "x") executes a special "viewer" script or program for the {{{2
+"              given filename; typically this means given their extension.
+"              0=local, 1=remote
+fun! netrw#NetrwBrowseX(fname,remote)
+"  call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")")
 
-    " NetrwStatusLine support - for exploring support
-    let w:netrw_explore_indx= indx
-"    call Decho("w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
+  let ykeep      = @@
+  let screenposn = netrw#NetrwSavePosn()
 
-    " wrap the indx around, but issue a note
-    if indx >= w:netrw_explore_listlen || indx < 0
-"     call Decho("wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
-     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
-     let w:netrw_explore_indx= indx
-     call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
+  " special core dump handler
+  if a:fname =~ '/core\(\.\d\+\)\=$'
+   if exists("g:Netrw_corehandler")
+    if type(g:Netrw_corehandler) == 2
+     " g:Netrw_corehandler is a function reference (see :help Funcref)
+"     call Decho("g:Netrw_corehandler is a funcref")
+     call g:Netrw_corehandler(a:fname)
+    elseif type(g:Netrw_corehandler) == 3
+     " g:Netrw_corehandler is a List of function references (see :help Funcref)
+"     call Decho("g:Netrw_corehandler is a List")
+     for Fncref in g:Netrw_corehandler
+      if type(FncRef) == 2
+       call FncRef(a:fname)
+      endif
+     endfor
     endif
+    call netrw#NetrwRestorePosn(screenposn)
+    let @@= ykeep
+"    call Dret("NetrwBrowseX : coredump handler invoked")
+    return
+   endif
+  endif
 
-    exe "let dirfile= w:netrw_explore_list[".indx."]"
-"    call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
-    let newdir= substitute(dirfile,'/[^/]*$','','e')
-"    call Decho("newdir<".newdir.">")
+  " set up the filename
+  " (lower case the extension, make a local copy of a remote file)
+  let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
+  if has("win32") || has("win95") || has("win64") || has("win16")
+   let exten= substitute(exten,'^.*$','\L&\E','')
+  endif
+"  call Decho("exten<".exten.">")
 
-"    call Decho("calling LocalBrowseCheck(newdir<".newdir.">)")
-    call netrw#LocalBrowseCheck(newdir)
-    if !exists("w:netrw_liststyle")
-     let w:netrw_liststyle= g:netrw_liststyle
-    endif
-    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
-     keepj call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
-    else
-     keepj call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
+  " seems kde systems often have gnome-open due to dependencies, even though
+  " gnome-open's subsidiary display tools are largely absent.  Kde systems
+  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
+  if !exists("s:haskdeinit")
+   if has("unix") && executable("ps") && !has("win32unix")
+    let s:haskdeinit= system("ps -e") =~ 'kdeinit' 
+    if v:shell_error
+     let s:haskdeinit = 0
     endif
-    let w:netrw_explore_mtchcnt = indx + 1
-    let w:netrw_explore_bufnr   = bufnr("%")
-    let w:netrw_explore_line    = line(".")
-    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
-"    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
-
    else
-"    call Decho("your vim does not have +path_extra")
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
-    endif
-    sil! let @* = keepregstar
-    sil! let @+ = keepregstar
-    sil! let @/ = keepregslash
-"    call Dret("netrw#Explore : missing +path_extra")
-    return
+    let s:haskdeinit= 0
    endif
+"   call Decho("setting s:haskdeinit=".s:haskdeinit)
+  endif
 
+  if a:remote == 1
+   " create a local copy
+"   call Decho("(remote) a:remote=".a:remote.": create a local copy of <".a:fname.">")
+   setl bh=delete
+   call netrw#NetRead(3,a:fname)
+   " attempt to rename tempfile
+   let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
+   let newname = substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
+"   call Decho("basename<".basename.">")
+"   call Decho("newname <".newname.">")
+   if rename(s:netrw_tmpfile,newname) == 0
+    " renaming succeeded
+    let fname= newname
+   else
+    " renaming failed
+    let fname= s:netrw_tmpfile
+   endif
   else
-"   call Decho("default case: Explore newdir<".dirname.">")
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
-    sil! unlet w:netrw_treedict
-    sil! unlet w:netrw_treetop
+"   call Decho("(local) a:remote=".a:remote.": handling local copy of <".a:fname.">")
+   let fname= a:fname
+   " special ~ handler for local
+   if fname =~ '^\~' && expand("$HOME") != ""
+"    call Decho('invoking special ~ handler')
+    let fname= substitute(fname,'^\~',expand("$HOME"),'')
    endif
-   let newdir= dirname
-   if !exists("b:netrw_curdir")
-    call netrw#LocalBrowseCheck(getcwd())
+  endif
+"  call Decho("fname<".fname.">")
+"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
+
+  " set up redirection
+  if &srr =~ "%s"
+   if (has("win32") || has("win95") || has("win64") || has("win16"))
+    let redir= substitute(&srr,"%s","nul","")
    else
-    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
+    let redir= substitute(&srr,"%s","/dev/null","")
    endif
+  elseif (has("win32") || has("win95") || has("win64") || has("win16"))
+   let redir= &srr . "nul"
+  else
+   let redir= &srr . "/dev/null"
   endif
+"  call Decho("set up redirection: redir{".redir."} srr{".&srr."}")
 
-  " visual display of **/ **// */ Exploration files
-"  call Decho("w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist"))
-"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">")
-  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
-"   call Decho("s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-"))
-   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
-    " only update match list if current directory isn't the same as before
-"    call Decho("only update match list if current directory not the same as before")
-    let s:explore_prvdir = b:netrw_curdir
-    let s:explore_match  = ""
-    let dirlen           = s:Strlen(b:netrw_curdir)
-    if b:netrw_curdir !~ '/$'
-     let dirlen= dirlen + 1
-    endif
-    let prvfname= ""
-    for fname in w:netrw_explore_list
-"     call Decho("fname<".fname.">")
-     if fname =~ '^'.b:netrw_curdir
-      if s:explore_match == ""
-       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
-      else
-       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
-      endif
-     elseif fname !~ '^/' && fname != prvfname
-      if s:explore_match == ""
-       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>'
-      else
-       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>'
-      endif
-     endif
-     let prvfname= fname
-    endfor
-"    call Decho("explore_match<".s:explore_match.">")
-    exe "2match netrwMarkFile /".s:explore_match."/"
+  " extract any viewing options.  Assumes that they're set apart by quotes.
+"  call Decho("extract any viewing options")
+  if exists("g:netrw_browsex_viewer")
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+   if g:netrw_browsex_viewer =~ '\s'
+    let viewer  = substitute(g:netrw_browsex_viewer,'\s.*$','','')
+    let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." "
+    let oviewer = ''
+    let cnt     = 1
+    while !executable(viewer) && viewer != oviewer
+     let viewer  = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\1','')
+     let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." "
+     let cnt     = cnt + 1
+     let oviewer = viewer
+"     call Decho("!exe: viewer<".viewer.">  viewopt<".viewopt.">")
+    endwhile
+   else
+    let viewer  = g:netrw_browsex_viewer
+    let viewopt = ""
    endif
-   echo "<s-up>==Pexplore  <s-down>==Nexplore"
+"   call Decho("viewer<".viewer.">  viewopt<".viewopt.">")
+  endif
+
+  " execute the file handler
+"  call Decho("execute the file handler (if any)")
+  if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-'
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+
+  elseif exists("g:netrw_browsex_viewer") && executable(viewer)
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+"   call Decho("exe sil !".viewer." ".viewopt.shellescape(fname,1).redir)
+   exe "sil !".viewer." ".viewopt.shellescape(fname,1).redir
+   let ret= v:shell_error
+
+  elseif has("win32") || has("win64")
+"   call Decho("windows")
+   if executable("start")
+"    call Decho('exe sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
+    exe 'sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
+   elseif executable("rundll32")
+"    call Decho('exe sil !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
+    exe 'sil !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
+   else
+    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
+   endif
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   let ret= v:shell_error
+
+  elseif has("win32unix")
+   let winfname= 'c:\cygwin'.substitute(fname,'/','\\','g')
+"   call Decho("cygwin: winfname<".shellescape(winfname,1).">")
+   if executable("start")
+"    call Decho('exe sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1))
+    exe 'sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1)
+   elseif executable("rundll32")
+"    call Decho('exe sil !rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1))
+    exe 'sil !rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1)
+   else
+    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
+   endif
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   let ret= v:shell_error
+
+  elseif has("unix") && executable("xdg-open") && !s:haskdeinit
+"   call Decho("unix and xdg-open")
+"   call Decho("exe sil !xdg-open ".shellescape(fname,1)." ".redir)
+   exe "sil !xdg-open ".shellescape(fname,1).redir
+   let ret= v:shell_error
+
+  elseif has("unix") && executable("kfmclient") && s:haskdeinit
+"   call Decho("unix and kfmclient")
+"   call Decho("exe sil !kfmclient exec ".shellescape(fname,1)." ".redir)
+   exe "sil !kfmclient exec ".shellescape(fname,1)." ".redir
+   let ret= v:shell_error
+
+  elseif has("macunix") && executable("open")
+"   call Decho("macunix and open")
+"   call Decho("exe sil !open ".shellescape(fname,1)." ".redir)
+   exe "sil !open ".shellescape(fname,1)." ".redir
+   let ret= v:shell_error
+
   else
-   2match none
-   if exists("s:explore_match")  | unlet s:explore_match  | endif
-   if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif
-   echo " "
-"   call Decho("cleared explore match list")
+   " netrwFileHandlers#Invoke() always returns 0
+   let ret= netrwFileHandlers#Invoke(exten,fname)
   endif
 
-  sil! let @* = keepregstar
-  sil! let @+ = keepregstar
-  sil! let @/ = keepregslash
-"  call Dret("netrw#Explore : @/<".@/.">")
+  " if unsuccessful, attempt netrwFileHandlers#Invoke()
+  if ret
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+  endif
+
+  " restoring redraw! after external file handlers
+  redraw!
+
+  " cleanup: remove temporary file,
+  "          delete current buffer if success with handler,
+  "          return to prior buffer (directory listing)
+  "          Feb 12, 2008: had to de-activiate removal of
+  "          temporary file because it wasn't getting seen.
+"  if a:remote == 1 && fname != a:fname
+""   call Decho("deleting temporary file<".fname.">")
+"   call s:NetrwDelete(fname)
+"  endif
+
+  if a:remote == 1
+   setl bh=delete bt=nofile
+   if g:netrw_use_noswf
+    setl noswf
+   endif
+   exe "sil! keepj norm! \<c-o>"
+"   redraw!
+  endif
+  call netrw#NetrwRestorePosn(screenposn)
+  let @@= ykeep
+
+"  call Dret("NetrwBrowseX")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwChgPerm: (implements "gp") change file permission {{{2
+fun! s:NetrwChgPerm(islocal,curdir)
+"  call Dfunc("s:NetrwChgPerm(islocal=".a:islocal." curdir<".a:curdir.">)")
+  let ykeep  = @@
+  call inputsave()
+  let newperm= input("Enter new permission: ")
+  call inputrestore()
+  let chgperm= substitute(g:netrw_chgperm,'\<FILENAME\>',shellescape(expand("<cfile>")),'')
+  let chgperm= substitute(chgperm,'\<PERM\>',shellescape(newperm),'')
+"  call Decho("chgperm<".chgperm.">")
+  call system(chgperm)
+  if v:shell_error != 0
+   keepj call netrw#ErrorMsg(1,"changing permission on file<".expand("<cfile>")."> seems to have failed",75)
+  endif
+  if a:islocal
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  endif
+  let @@= ykeep
+"  call Dret("s:NetrwChgPerm")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwClearExplore: clear explore variables (if any) {{{2
+fun! s:NetrwClearExplore()
+"  call Dfunc("s:NetrwClearExplore()")
+  2match none
+  if exists("s:explore_match")        |unlet s:explore_match        |endif
+  if exists("s:explore_indx")         |unlet s:explore_indx         |endif
+  if exists("s:netrw_explore_prvdir") |unlet s:netrw_explore_prvdir |endif
+  if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
+  if exists("s:explore_prvdir")       |unlet s:explore_prvdir       |endif
+  if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
+  if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
+  if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
+  if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
+"   redraw!
+  echo " "
+  echo " "
+"  call Dret("s:NetrwClearExplore")
 endfun
 
 " ---------------------------------------------------------------------
 " s:NetrwExploreListUniq: {{{2
 fun! s:NetrwExploreListUniq(explist)
-"  call Dfunc("s:NetrwExploreListUniq(explist)")
+"  call Dfunc("s:NetrwExploreListUniq(explist<".string(a:explist).">)")
 
   " this assumes that the list is already sorted
   let newexplist= []
@@ -3939,11 +4845,53 @@ fun! s:NetrwExploreListUniq(explist)
    endif
   endfor
 
-"  call Dret("s:NetrwExploreListUniq")
+"  call Dret("s:NetrwExploreListUniq newexplist<".string(newexplist).">")
   return newexplist
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwForceChgDir: (gd support) Force treatment as a directory {{{2
+fun! s:NetrwForceChgDir(islocal,newdir)
+"  call Dfunc("s:NetrwForceChgDir(islocal=".a:islocal." newdir<".a:newdir.">)")
+  let ykeep= @@
+  if a:newdir !~ '/$'
+   " ok, looks like force is needed to get directory-style treatment
+   if a:newdir =~ '@$'
+    let newdir= substitute(a:newdir,'@$','/','')
+   elseif a:newdir =~ '[*=|\\]$'
+    let newdir= substitute(a:newdir,'.$','/','')
+   else
+    let newdir= a:newdir.'/'
+   endif
+"   call Decho("adjusting newdir<".newdir."> due to gd")
+  else
+   " should already be getting treatment as a directory
+   let newdir= a:newdir
+  endif
+  let newdir= s:NetrwBrowseChgDir(a:islocal,newdir)
+  call s:NetrwBrowse(a:islocal,newdir)
+  let @@= ykeep
+"  call Dret("s:NetrwForceChgDir")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwForceFile: (gf support) Force treatment as a file {{{2
+fun! s:NetrwForceFile(islocal,newfile)
+"  call Dfunc("s:NetrwForceFile(islocal=".a:islocal." newdir<".a:newfile.">)")
+  if a:newfile =~ '[/@*=|\\]$'
+   let newfile= substitute(a:newfile,'.$','','')
+  else
+   let newfile= a:newfile
+  endif
+  if a:islocal
+   call s:NetrwBrowseChgDir(a:islocal,newfile)
+  else
+   call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,newfile))
+  endif
+"  call Dret("s:NetrwForceFile")
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwHide: this function is invoked by the "a" map for browsing {{{2
 "          and switches the hiding mode.  The actual hiding is done by
 "          s:NetrwListHide().
@@ -3952,6 +4900,7 @@ endfun
 "                           2: show hidden files only
 fun! s:NetrwHide(islocal)
 "  call Dfunc("NetrwHide(islocal=".a:islocal.") g:netrw_hide=".g:netrw_hide)
+  let ykeep= @@
   let svpos= netrw#NetrwSavePosn()
 
   if exists("s:netrwmarkfilelist_{bufnr('%')}")
@@ -3960,7 +4909,7 @@ fun! s:NetrwHide(islocal)
 
    " hide the files in the markfile list
    for fname in s:netrwmarkfilelist_{bufnr("%")}
-"    call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." isk=".&isk)
+"    call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." l:isk=".&l:isk)
     if match(g:netrw_list_hide,'\<'.fname.'\>') != -1
      " remove fname from hiding list
      let g:netrw_list_hide= substitute(g:netrw_list_hide,'..\<'.escape(fname,g:netrw_fname_escape).'\>..','','')
@@ -3977,7 +4926,7 @@ fun! s:NetrwHide(islocal)
 "     call Decho("hide: g:netrw_list_hide<".g:netrw_list_hide.">")
     endif
    endfor
-   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
+   keepj call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
    let g:netrw_hide= 1
 
   else
@@ -3986,14 +4935,16 @@ fun! s:NetrwHide(islocal)
    let g:netrw_hide=(g:netrw_hide+1)%3
    exe "keepj norm! 0"
    if g:netrw_hide && g:netrw_list_hide == ""
-    call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
+    keepj call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
+    let @@= ykeep
 "    call Dret("NetrwHide")
     return
    endif
   endif
 
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 "  call Dret("NetrwHide")
 endfun
 
@@ -4001,6 +4952,7 @@ endfun
 " s:NetrwHidden: invoked by "gh" {{{2
 fun! s:NetrwHidden(islocal)
 "  call Dfunc("s:NetrwHidden()")
+  let ykeep= @@
   "  save current position
   let svpos= netrw#NetrwSavePosn()
 
@@ -4014,8 +4966,9 @@ fun! s:NetrwHidden(islocal)
   endif
 
   " refresh screen and return to saved position
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 "  call Dret("s:NetrwHidden")
 endfun
 
@@ -4043,7 +4996,7 @@ fun! s:NetrwHome()
    endif
   endif
   " insure that the home directory exists
-  if !isdirectory(home)
+  if g:netrw_dirhistmax > 0 && !isdirectory(home)
    if exists("g:netrw_mkdir")
     call system(g:netrw_mkdir." ".shellescape(home))
    else
@@ -4057,11 +5010,18 @@ endfun
 " ---------------------------------------------------------------------
 " s:NetrwLeftmouse: handles the <leftmouse> when in a netrw browsing window {{{2
 fun! s:NetrwLeftmouse(islocal)
+  if exists("s:netrwdrag")
+   return
+  endif
 "  call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")")
 
+  let ykeep= @@
   " check if the status bar was clicked on instead of a file/directory name
+  while getchar(0) != 0
+   "clear the input stream
+  endwhile
   call feedkeys("\<LeftMouse>")
-  let c= getchar()
+  let c          = getchar()
   let mouse_lnum = v:mouse_lnum
   let wlastline  = line('w$')
   let lastline   = line('$')
@@ -4069,31 +5029,76 @@ fun! s:NetrwLeftmouse(islocal)
 "  call Decho("v:mouse_col =".v:mouse_col."     col=".col(".")."  wincol =".wincol()." winwidth   =".winwidth(0))
   if mouse_lnum >= wlastline + 1 || v:mouse_win != winnr()
    " appears to be a status bar leftmouse click
+   let @@= ykeep
 "   call Dret("s:NetrwLeftmouse : detected a status bar leftmouse click")
    return
   endif
   if v:mouse_col != col('.')
+   let @@= ykeep
 "   call Dret("s:NetrwLeftmouse : detected a vertical separator bar leftmouse click")
    return
   endif
 
   if a:islocal
    if exists("b:netrw_curdir")
-    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+    keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
    endif
   else
    if exists("b:netrw_curdir")
-    call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+    keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
    endif
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwLeftmouse")
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwRightdrag: {{{2
+"DechoTabOn
+fun! s:NetrwRightdrag(islocal)
+"  call Dfunc("s:NetrwRightdrag(islocal=".a:islocal.")")
+  if !exists("s:netrwdrag")
+   let s:netrwdrag     = winnr()
+   call s:NetrwMarkFile(a:islocal,s:NetrwGetWord())
+   if a:islocal
+    nno <silent> <s-rightrelease> <leftmouse>:<c-u>call <SID>NetrwRightrelease(1)<cr>
+   else
+    nno <silent> <s-rightrelease> <leftmouse>:<c-u>call <SID>NetrwRightrelease(0)<cr>
+   endif
+  endif
+"  call Dret("s:NetrwRightdrag : s:netrwdrag=".s:netrwdrag." buf#".bufnr("%"))
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwRightrelease: {{{2
+fun! s:NetrwRightrelease(islocal)
+"  call Dfunc("s:NetrwRightrelease(islocal=".a:islocal.") s:netrwdrag=".s:netrwdrag." buf#".bufnr("%"))
+  if exists("s:netrwdrag")
+   nunmap <s-rightrelease>
+   let tgt = s:NetrwGetWord()
+"   call Decho("target#1: ".tgt)
+   if tgt =~ '/$' && tgt !~ '^\./$'
+    let tgt = b:netrw_curdir."/".tgt
+   else
+    let tgt= b:netrw_curdir
+   endif
+"   call Decho("target#2: ".tgt)
+   call netrw#NetrwMakeTgt(tgt)
+   let curwin= winnr()
+   exe s:netrwdrag."wincmd w"
+   call s:NetrwMarkFileMove(a:islocal)
+   exe curwin."wincmd w"
+   unlet s:netrwdrag
+  endif
+"  call Dret("s:NetrwRightrelease")
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
 " separated patterns given in g:netrw_list_hide
 fun! s:NetrwListHide()
-"  call Dfunc("NetrwListHide() hide=".g:netrw_hide." listhide<".g:netrw_list_hide.">")
+"  call Dfunc("NetrwListHide() g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
+  let ykeep= @@
 
   " find a character not in the "hide" string to use as a separator for :g and :v commands
   " How-it-works: take the hiding command, convert it into a range.  Duplicate
@@ -4115,17 +5120,22 @@ fun! s:NetrwListHide()
    " Prune the list by hiding any files which match
    if g:netrw_hide == 1
 "    call Decho("hiding<".hide."> listhide<".listhide.">")
-    exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
+    exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
    elseif g:netrw_hide == 2
 "    call Decho("showing<".hide."> listhide<".listhide.">")
-    exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
+    exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
    endif
   endwhile
   if g:netrw_hide == 2
-   exe 'sil keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
-   exe 'sil keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
+   exe 'sil! keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
+   exe 'sil! keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
   endif
 
+  " remove any blank lines that have somehow remained.
+  " This seems to happen under Windows.
+  exe 'sil! keepj 1,$g@^\s*$@d'
+
+  let @@= ykeep
 "  call Dret("NetrwListHide")
 endfun
 
@@ -4134,6 +5144,7 @@ endfun
 fun! s:NetrwHideEdit(islocal)
 "  call Dfunc("NetrwHideEdit(islocal=".a:islocal.")")
 
+  let ykeep= @@
   " save current cursor position
   let svpos= netrw#NetrwSavePosn()
 
@@ -4145,10 +5156,11 @@ fun! s:NetrwHideEdit(islocal)
 "  call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">")
 
   " refresh the listing
-  silent keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./"))
+  sil keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./"))
 
   " restore cursor position
   call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 
 "  call Dret("NetrwHideEdit")
 endfun
@@ -4158,6 +5170,7 @@ endfun
 fun! s:NetSortSequence(islocal)
 "  call Dfunc("NetSortSequence(islocal=".a:islocal.")")
 
+  let ykeep= @@
   let svpos= netrw#NetrwSavePosn()
   call inputsave()
   let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
@@ -4165,8 +5178,9 @@ fun! s:NetSortSequence(islocal)
 
   " refresh the listing
   let g:netrw_sort_sequence= newsortseq
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 
 "  call Dret("NetSortSequence")
 endfun
@@ -4176,6 +5190,7 @@ endfun
 fun! s:NetrwMakeDir(usrhost)
 "  call Dfunc("NetrwMakeDir(usrhost<".a:usrhost.">)")
 
+  let ykeep= @@
   " get name of new directory from user.  A bare <CR> will skip.
   " if its currently a directory, also request will be skipped, but with
   " a message.
@@ -4185,6 +5200,7 @@ fun! s:NetrwMakeDir(usrhost)
 "  call Decho("newdirname<".newdirname.">")
 
   if newdirname == ""
+   let @@= ykeep
 "   call Dret("NetrwMakeDir : user aborted with bare <cr>")
    return
   endif
@@ -4198,15 +5214,17 @@ fun! s:NetrwMakeDir(usrhost)
 "   call Decho("fullnewdir<".fullnewdir.">")
    if isdirectory(fullnewdir)
     if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24)
+     keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24)
     endif
+    let @@= ykeep
 "    call Dret("NetrwMakeDir : directory<".newdirname."> exists previously")
     return
    endif
    if s:FileReadable(fullnewdir)
     if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25)
+     keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25)
     endif
+    let @@= ykeep
 "    call Dret("NetrwMakeDir : file<".newdirname."> exists previously")
     return
    endif
@@ -4219,8 +5237,14 @@ fun! s:NetrwMakeDir(usrhost)
     let netrw_origdir= s:NetrwGetcwd(1)
     exe 'keepj lcd '.fnameescape(b:netrw_curdir)
 "    call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">")
-"    call Decho("exe silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1))
-    exe "sil! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1)
+"    call Decho("exe sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1))
+    exe "sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)
+    if v:shell_error != 0
+     let @@= ykeep
+     call netrw#ErrorMsg(s:ERROR,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80)
+"     call Dret("NetrwMakeDir : failed: sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1))
+     return
+    endif
     if !g:netrw_keepdir
      exe 'keepj lcd '.fnameescape(netrw_origdir)
 "     call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">")
@@ -4243,26 +5267,31 @@ fun! s:NetrwMakeDir(usrhost)
 "   call Decho("remote mkdir")
    let mkdircmd  = s:MakeSshCmd(g:netrw_mkdir_cmd)
    let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname
-"   call Decho("exe silent! !".mkdircmd." ".shellescape(newdirname,1))
+"   call Decho("exe sil! !".mkdircmd." ".shellescape(newdirname,1))
    exe "sil! !".mkdircmd." ".shellescape(newdirname,1)
    if v:shell_error == 0
     " refresh listing
     let svpos= netrw#NetrwSavePosn()
-    call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
-    call netrw#NetrwRestorePosn(svpos)
+    keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+    keepj call netrw#NetrwRestorePosn(svpos)
    elseif !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27)
+    keepj call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27)
    endif
 "   redraw!
 
   elseif b:netrw_method == 2
-   " COMBAK -- future work
-   call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68)
+   let svpos= netrw#NetrwSavePosn()
+   call s:NetrwRemoteFtpCmd("",g:netrw_remote_mkdir.' "'.newdirname.'"')
+   keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   elseif b:netrw_method == 3
-   " COMBAK -- future work
-   call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68)
+   let svpos= netrw#NetrwSavePosn()
+   call s:NetrwRemoteFtpCmd("",g:netrw_remote_mkdir.' "'.newdirname.'"')
+   keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   endif
 
+  let @@= ykeep
 "  call Dret("NetrwMakeDir")
 endfun
 
@@ -4283,14 +5312,22 @@ endfun
 "
 "  Creates a buffer version of islocal
 "    b:netrw_islocal
-"
 fun! s:NetrwMarkFile(islocal,fname)
 "  call Dfunc("s:NetrwMarkFile(islocal=".a:islocal." fname<".a:fname.">)")
+
+  " sanity check
+  if empty(a:fname)
+"   call Dret("s:NetrwMarkFile : emtpy fname")
+   return
+  endif
+
+  let ykeep   = @@
   let curbufnr= bufnr("%")
   let curdir  = b:netrw_curdir
-  let trailer = '[@=|\/\*]\=\>'
+  let trailer = '[@=|\/\*]\=\ze\%(  \|\t\|$\)'
+
   if exists("s:netrwmarkfilelist_{curbufnr}")
-   " markfile list exists
+   " markfile list pre-exists
 "   call Decho("starting s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">")
 "   call Decho("starting s:netrwmarkfilemtch_{curbufnr}<".s:netrwmarkfilemtch_{curbufnr}.">")
    let b:netrw_islocal= a:islocal
@@ -4322,8 +5359,7 @@ fun! s:NetrwMarkFile(islocal,fname)
       endif
       let first= 0
      endfor
-"     call Decho("ending s:netrwmarkfilelist_"curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
-"     call Decho("ending s:netrwmarkfilemtch_"curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">")
+"     call Decho("ending s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
     endif
    endif
 
@@ -4377,7 +5413,8 @@ fun! s:NetrwMarkFile(islocal,fname)
 "   call Decho("2match none")
    2match none
   endif
-"  call Dret("s:NetrwMarkFile : netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">")
+  let @@= ykeep
+"  call Dret("s:NetrwMarkFile : s:netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">")
 endfun
 
 " ---------------------------------------------------------------------
@@ -4394,34 +5431,44 @@ fun! s:NetrwMarkFileCompress(islocal)
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
 
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileCompress")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist_{curbufnr}") && exists("g:netrw_compress") && exists("g:netrw_decompress")
+
+   " for every filename in the marked list
    for fname in s:netrwmarkfilelist_{curbufnr}
-    " for every filename in the marked list
-    for sfx in sort(keys(g:netrw_decompress))
-     if fname =~ '\'.sfx.'$'
-      " fname has a suffix indicating that its compressed; apply associated decompression routine
-      let exe= netrw#WinPath(g:netrw_decompress[sfx])
-"      call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
-      if a:islocal
-       if g:netrw_keepdir
-        let fname= shellescape(s:ComposePath(curdir,fname))
-       endif
-      else
-       let fname= shellescape(b:netrw_curdir.fname,1)
+    let sfx= substitute(fname,'^.\{-}\(\.\a\+\)$','\1','')
+"    call Decho("extracted sfx<".sfx.">")
+    if exists("g:netrw_decompress['".sfx."']")
+     " fname has a suffix indicating that its compressed; apply associated decompression routine
+     let exe= g:netrw_decompress[sfx]
+"     call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
+     let exe= netrw#WinPath(exe)
+     if a:islocal
+      if g:netrw_keepdir
+       let fname= shellescape(s:ComposePath(curdir,fname))
       endif
-      if executable(exe)
-       if a:islocal
-       call system(exe." ".fname)
-       else
-        call s:RemoteSystem(exe." ".fname)
-       endif
+     else
+      let fname= shellescape(b:netrw_curdir.fname,1)
+     endif
+     if executable(exe)
+      if a:islocal
+       call system(exe." ".fname)
       else
-       call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50)
+       keepj call s:RemoteSystem(exe." ".fname)
       endif
-      break
+     else
+      keepj call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50)
      endif
-     unlet sfx
-    endfor
+    endif
+    unlet sfx
+
     if exists("exe")
      unlet exe
     elseif a:islocal
@@ -4429,12 +5476,13 @@ fun! s:NetrwMarkFileCompress(islocal)
      call system(netrw#WinPath(g:netrw_compress)." ".shellescape(s:ComposePath(b:netrw_curdir,fname)))
     else
      " fname not a compressed file, so compress it
-     call s:RemoteSystem(netrw#WinPath(g:netrw_compress)." ".shellescape(fname))
+     keepj call s:RemoteSystem(netrw#WinPath(g:netrw_compress)." ".shellescape(fname))
     endif
-   endfor
+   endfor      " for every file in the marked list
+
    call s:NetrwUnmarkList(curbufnr,curdir)
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   endif
 "  call Dret("s:NetrwMarkFileCompress")
 endfun
@@ -4446,42 +5494,112 @@ endfun
 "                      directories.  Uses the local-buffer marked file list.
 "                      Returns 1=success  (used by NetrwMarkFileMove())
 "                              0=failure
-fun! s:NetrwMarkFileCopy(islocal)
-"  call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---').">")
+fun! s:NetrwMarkFileCopy(islocal,...)
+"  call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---')."> a:0=".a:0)
 
-  " sanity checks
-  if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')})
-   call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
-"   call Dret("s:NetrwMarkFileCopy 0")
-   return 0
+  if !exists("b:netrw_curdir")
+   let b:netrw_curdir= getcwd()
+"   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
   endif
-"  call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')}))
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileCopy")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if !exists("s:netrwmftgt")
-   call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
+   keepj call netrw#ErrorMsg(s:ERROR,"your marked file target is empty! (:help netrw-mt)",67)
 "   call Dret("s:NetrwMarkFileCopy 0")
    return 0
   endif
 "  call Decho("sanity chk passed: s:netrwmftgt<".s:netrwmftgt.">")
-  let curdir   = b:netrw_curdir
-  let curbufnr = bufnr("%")
 
   if      a:islocal &&  s:netrwmftgt_islocal
    " Copy marked files, local directory to local directory
 "   call Decho("copy from local to local")
-   let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)"))
-"   call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")")
-   call system(netrw#WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt))
+   if !executable(g:netrw_localcopycmd) && g:netrw_localcopycmd !~ '\<cmd\s'
+    call netrw#ErrorMsg(s:ERROR,"g:netrw_localcopycmd<".g:netrw_localcopycmd."> not executable on your system, aborting",91)
+"    call Dfunc("s:NetrwMarkFileMove : g:netrw_localcopycmd<".g:netrw_localcopycmd."> n/a!")
+    return
+   endif
+
+   " copy marked files while within the same directory (ie. allow renaming)
+   if simplify(s:netrwmftgt) == simplify(b:netrw_curdir)
+    if len(s:netrwmarkfilelist_{bufnr('%')}) == 1
+     " only one marked file
+     let args    = shellescape(b:netrw_curdir."/".s:netrwmarkfilelist_{bufnr('%')}[0])
+     let oldname = s:netrwmarkfilelist_{bufnr('%')}[0]
+    elseif a:0 == 1
+     " this happens when the next case was used to recursively call s:NetrwMarkFileCopy()
+     let args    = shellescape(b:netrw_curdir."/".a:1)
+     let oldname = a:1
+    else
+     " copy multiple marked files inside the same directory
+     let s:recursive= 1
+     for oldname in s:netrwmarkfilelist_{bufnr("%")}
+      let ret= s:NetrwMarkFileCopy(a:islocal,oldname)
+      if ret == 0
+       break
+      endif
+     endfor
+     unlet s:recursive
+     call s:NetrwUnmarkList(curbufnr,curdir)
+"     call Dret("s:NetrwMarkFileCopy ".ret)
+     return ret
+    endif
+
+    call inputsave()
+    let newname= input("Copy ".oldname." to : ",oldname,"file")
+    call inputrestore()
+    if newname == ""
+"     call Dret("s:NetrwMarkFileCopy 0")
+     return 0
+    endif
+    let args= shellescape(oldname)
+    let tgt = shellescape(s:netrwmftgt.'/'.newname)
+   else
+    let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)"))
+    let tgt = shellescape(s:netrwmftgt)
+   endif
+   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+    let args= substitute(args,'/','\\','g')
+    let tgt = substitute(tgt, '/','\\','g')
+   endif
+   if g:netrw_localcopycmd =~ '\s'
+    let copycmd     = substitute(g:netrw_localcopycmd,'\s.*$','','')
+    let copycmdargs = substitute(g:netrw_localcopycmd,'^.\{-}\(\s.*\)$','\1','')
+    let copycmd     = netrw#WinPath(copycmd).copycmdargs
+   else
+    let copycmd = netrw#WinPath(g:netrw_localcopycmd)
+   endif
+"   call Decho("args   <".args.">")
+"   call Decho("tgt    <".tgt.">")
+"   call Decho("copycmd<".copycmd.">")
+"   call Decho("system(".copycmd." ".args." ".tgt.")")
+   call system(copycmd." ".args." ".tgt)
+   if v:shell_error != 0
+    call netrw#ErrorMsg(s:ERROR,"tried using g:netrw_localcopycmd<".g:netrw_localcopycmd.">; it doesn't work!",80)
+"    call Dret("s:NetrwMarkFileCopy 0 : failed: system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt))
+    return 0
+   endif
 
   elseif  a:islocal && !s:netrwmftgt_islocal
    " Copy marked files, local directory to remote directory
 "   call Decho("copy from local to remote")
-   call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
+   keepj call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
 
   elseif !a:islocal &&  s:netrwmftgt_islocal
+   " Copy marked files, remote directory to local directory
 "   call Decho("copy from remote to local")
-   call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
+   keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
 
   elseif !a:islocal && !s:netrwmftgt_islocal
+   " Copy marked files, remote directory to remote directory
 "   call Decho("copy from remote to remote")
    let curdir = getcwd()
    let tmpdir = s:GetTempfile("")
@@ -4491,19 +5609,29 @@ fun! s:NetrwMarkFileCopy(islocal)
    if exists("*mkdir")
     call mkdir(tmpdir)
    else
-    exe "sil! !".g:netrw_local_mkdir.' '.shellescape(tmpdir,1)
+    exe "sil! !".g:netrw_localmkdir.' '.shellescape(tmpdir,1)
+    if v:shell_error != 0
+     call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80)
+"     call Dret("s:NetrwMarkFileCopy : failed: sil! !".g:netrw_localmkdir.' '.shellescape(tmpdir,1) )
+     return
+    endif
    endif
    if isdirectory(tmpdir)
     exe "keepj lcd ".fnameescape(tmpdir)
-    call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir)
+    keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir)
     let localfiles= map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")')
-    call s:NetrwUpload(localfiles,s:netrwmftgt)
+    keepj call s:NetrwUpload(localfiles,s:netrwmftgt)
     if getcwd() == tmpdir
      for fname in s:netrwmarkfilelist_{bufnr('%')}
-      call s:NetrwDelete(fname)
+      keepj call s:NetrwDelete(fname)
      endfor
      exe "keepj lcd ".fnameescape(curdir)
-     exe "sil !".g:netrw_local_rmdir." ".shellescape(tmpdir,1)
+     exe "sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1)
+     if v:shell_error != 0
+      call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localrmdir<".g:netrw_localrmdir."> to something that works",80)
+"      call Dret("s:NetrwMarkFileCopy : failed: sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1) )
+      return
+     endif
     else
      exe "keepj lcd ".fnameescape(curdir)
     endif
@@ -4513,20 +5641,21 @@ fun! s:NetrwMarkFileCopy(islocal)
   " -------
   " cleanup
   " -------
-"  call Decho("cleanup")
-
-  " remove markings from local buffer
-  call s:NetrwUnmarkList(curbufnr,curdir)
+"   call Decho("cleanup")
+  if !exists("s:recursive")
+   " remove markings from local buffer
+   call s:NetrwUnmarkList(curbufnr,curdir)
+  endif
 
   " refresh buffers
   if !s:netrwmftgt_islocal
    call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
   endif
   if a:islocal
-   call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
+   keepj call s:NetrwRefreshDir(a:islocal,curdir)
   endif
   if g:netrw_fastbrowse <= 1
-   call s:LocalBrowseShellCmdRefresh()
+   keepj call s:LocalBrowseShellCmdRefresh()
   endif
   
 "  call Dret("s:NetrwMarkFileCopy 1")
@@ -4542,7 +5671,15 @@ fun! s:NetrwMarkFileDiff(islocal)
 "  call Dfunc("s:NetrwMarkFileDiff(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
   let curbufnr= bufnr("%")
 
-  if exists("s:netrwmarkfilelist_{curbufnr}")
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileDiff")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
+  if exists("s:netrwmarkfilelist_{."curbufnr}")
    let cnt    = 0
    let curdir = b:netrw_curdir
    for fname in s:netrwmarkfilelist
@@ -4575,21 +5712,62 @@ fun! s:NetrwMarkFileEdit(islocal)
 
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileEdit")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist_{curbufnr}")
    call s:SetRexDir(a:islocal,curdir)
    let flist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)"))
    " unmark markedfile list
 "   call s:NetrwUnmarkList(curbufnr,curdir)
    call s:NetrwUnmarkAll()
-"   call Decho("exe silent args ".flist)
-   exe "silent args ".flist
+"   call Decho("exe sil args ".flist)
+   exe "sil args ".flist
   endif
+  echo "(use :bn, :bp to navigate files; :Rex to return)"
   
 "  call Dret("s:NetrwMarkFileEdit")
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwMarkFileExe: (invoked by mx) execute arbitrary command on marked files, one at a time {{{2
+" s:NetrwMarkFileQFEL: convert a quickfix-error list into a marked file list {{{2
+fun! s:NetrwMarkFileQFEL(islocal,qfel)
+"  call Dfunc("s:NetrwMarkFileQFEL(islocal=".a:islocal.",qfel)")
+  call s:NetrwUnmarkAll()
+  let curbufnr= bufnr("%")
+
+  if !empty(a:qfel)
+   for entry in a:qfel
+    let bufnmbr= entry["bufnr"]
+"    call Decho("bufname(".bufnmbr.")<".bufname(bufnmbr)."> line#".entry["lnum"]." text=".entry["text"])
+    if !exists("s:netrwmarkfilelist_{curbufnr}")
+"     call Decho("case: no marked file list")
+     call s:NetrwMarkFile(a:islocal,bufname(bufnmbr))
+    elseif index(s:netrwmarkfilelist_{curbufnr},bufname(bufnmbr)) == -1
+     " s:NetrwMarkFile will remove duplicate entries from the marked file list.
+     " So, this test lets two or more hits on the same pattern to be ignored.
+"     call Decho("case: ".bufname(bufnmbr)." not currently in marked file list")
+     call s:NetrwMarkFile(a:islocal,bufname(bufnmbr))
+    else
+"     call Decho("case: ".bufname(bufnmbr)." already in marked file list")
+    endif
+   endfor
+   echo "(use me to edit marked files)"
+  else
+   call netrw#ErrorMsg(s:WARNING,"can't convert quickfix error list; its empty!",92)
+  endif
+
+"  call Dret("s:NetrwMarkFileQFEL")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileExe: (invoked by mx) execute arbitrary system command on marked files, one at a time {{{2
 "                     Uses the local marked-file list.
 fun! s:NetrwMarkFileExe(islocal)
 "  call Dfunc("s:NetrwMarkFileExe(islocal=".a:islocal.")")
@@ -4597,40 +5775,166 @@ fun! s:NetrwMarkFileExe(islocal)
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
 
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileExe")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist_{curbufnr}")
    " get the command
    call inputsave()
    let cmd= input("Enter command: ","","file")
    call inputrestore()
 "   call Decho("cmd<".cmd.">")
+   if cmd == ""
+"    "   call Dret("s:NetrwMarkFileExe : early exit, empty command")
+    return
+   endif
+
+   " apply command to marked files.  Substitute: filename -> %
+   " If no %, then append a space and the filename to the command
+   for fname in s:netrwmarkfilelist_{curbufnr}
+    if a:islocal
+     if g:netrw_keepdir
+      let fname= shellescape(netrw#WinPath(s:ComposePath(curdir,fname)))
+     endif
+    else
+     let fname= shellescape(netrw#WinPath(b:netrw_curdir.fname))
+    endif
+    if cmd =~ '%'
+     let xcmd= substitute(cmd,'%',fname,'g')
+    else
+     let xcmd= cmd.' '.fname
+    endif
+    if a:islocal
+"     call Decho("local: xcmd<".xcmd.">")
+     let ret= system(xcmd)
+    else
+"     call Decho("remote: xcmd<".xcmd.">")
+     let ret= s:RemoteSystem(xcmd)
+    endif
+    if v:shell_error < 0
+     keepj call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54)
+     break
+    else
+     echo ret
+    endif
+   endfor
+
+   " unmark marked file list
+   call s:NetrwUnmarkList(curbufnr,curdir)
+
+   " refresh the listing
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
+  else
+   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+  endif
+  
+"  call Dret("s:NetrwMarkFileExe")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkHideSfx: (invoked by mh) (un)hide files having same suffix
+"                  as the marked file(s) (toggles suffix presence)
+"                  Uses the local marked file list.
+fun! s:NetrwMarkHideSfx(islocal)
+"  call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")")
+  let svpos    = netrw#NetrwSavePosn()
+  let curbufnr = bufnr("%")
+
+  " s:netrwmarkfilelist_{curbufnr}: the List of marked files
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+
+   for fname in s:netrwmarkfilelist_{curbufnr}
+"     call Decho("s:NetrwMarkFileCopy: fname<".fname.">")
+     " construct suffix pattern
+     if fname =~ '\.'
+      let sfxpat= "^.*".substitute(fname,'^.*\(\.[^. ]\+\)$','\1','')
+     else
+      let sfxpat= '^\%(\%(\.\)\@!.\)*$'
+     endif
+     " determine if its in the hiding list or not
+     let inhidelist= 0
+     if g:netrw_list_hide != ""
+      let itemnum = 0
+      let hidelist= split(g:netrw_list_hide,',')
+      for hidepat in hidelist
+       if sfxpat == hidepat
+        let inhidelist= 1
+        break
+       endif
+       let itemnum= itemnum + 1
+      endfor
+     endif
+"     call Decho("fname<".fname."> inhidelist=".inhidelist." sfxpat<".sfxpat.">")
+     if inhidelist
+      " remove sfxpat from list
+      call remove(hidelist,itemnum)
+      let g:netrw_list_hide= join(hidelist,",")
+     elseif g:netrw_list_hide != ""
+      " append sfxpat to non-empty list
+      let g:netrw_list_hide= g:netrw_list_hide.",".sfxpat
+     else
+      " set hiding list to sfxpat
+      let g:netrw_list_hide= sfxpat
+     endif
+    endfor
+
+   " refresh the listing
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
+  else
+   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+  endif
+
+"  call Dret("s:NetrwMarkHideSfx")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileVimCmd: (invoked by mX) execute arbitrary vim command on marked files, one at a time {{{2
+"                     Uses the local marked-file list.
+fun! s:NetrwMarkFileVimCmd(islocal)
+"  call Dfunc("s:NetrwMarkFileVimCmd(islocal=".a:islocal.")")
+  let svpos    = netrw#NetrwSavePosn()
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileVimCmd")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+   " get the command
+   call inputsave()
+   let cmd= input("Enter vim command: ","","file")
+   call inputrestore()
+"   call Decho("cmd<".cmd.">")
+   if cmd == ""
+"    "   call Dret("s:NetrwMarkFileVimCmd : early exit, empty command")
+    return
+   endif
 
    " apply command to marked files.  Substitute: filename -> %
    " If no %, then append a space and the filename to the command
    for fname in s:netrwmarkfilelist_{curbufnr}
+"    call Decho("fname<".fname.">")
     if a:islocal
-     if g:netrw_keepdir
-      let fname= shellescape(netrw#WinPath(s:ComposePath(curdir,fname)))
-     endif
-    else
-     let fname= shellescape(netrw#WinPath(b:netrw_curdir.fname))
-    endif
-    if cmd =~ '%'
-     let xcmd= substitute(cmd,'%',fname,'g')
-    else
-     let xcmd= cmd.' '.fname
-    endif
-    if a:islocal
-"     call Decho("local: xcmd<".xcmd.">")
-     let ret= system(xcmd)
-    else
-"     call Decho("remote: xcmd<".xcmd.">")
-     let ret= s:RemoteSystem(xcmd)
-    endif
-    if v:shell_error < 0
-     call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54)
-     break
+     1split
+     exe "sil! keepalt e ".fnameescape(fname)
+"     call Decho("local<".fname.">: exe ".cmd)
+     exe cmd
+     exe "sil! keepalt wq!"
     else
-     echo ret
+"     call Decho("remote<".fname.">: exe ".cmd." : NOT SUPPORTED YET")
+     echo "sorry, \"mX\" not supported yet for remote files"
     endif
    endfor
 
@@ -4638,13 +5942,13 @@ fun! s:NetrwMarkFileExe(islocal)
    call s:NetrwUnmarkList(curbufnr,curdir)
 
    " refresh the listing
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   else
-   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
   endif
   
-"  call Dret("s:NetrwMarkFileExe")
+"  call Dret("s:NetrwMarkFileVimCmd")
 endfun
 
 " ---------------------------------------------------------------------
@@ -4695,10 +5999,10 @@ fun! s:NetrwMarkHideSfx(islocal)
     endfor
 
    " refresh the listing
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   else
-   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
   endif
 
 "  call Dret("s:NetrwMarkHideSfx")
@@ -4716,30 +6020,47 @@ fun! s:NetrwMarkFileGrep(islocal)
 "  call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
    let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)"))
    call s:NetrwUnmarkAll()
+  else
+"   call Decho('no marked files, using "*"')
+   let netrwmarkfilelist= "*"
+  endif
 
-   " ask user for pattern
-   call inputsave()
-   let pat= input("Enter pattern: ","")
-   call inputrestore()
-   if pat !~ '^\s'
-    if pat !~ '^/'
-     let pat= '/'.pat.'/'
-    endif
-    let pat= " ".pat
-   endif
+  " ask user for pattern
+  call inputsave()
+  let pat= input("Enter pattern: ","")
+  call inputrestore()
+  let patbang = ""
+  if pat =~ '^!'
+   let patbang = "!"
+   let pat= strpart(pat,2)
+  endif
+  if pat =~ '^\i'
+   let pat    = escape(pat,'/')
+   let pat    = '/'.pat.'/'
+  else
+   let nonisi = pat[0]
+  endif
 
-   " use vimgrep for both local and remote
-"   call Decho("exe vimgrep".pat." ".netrwmarkfilelist)
-   try
-    exe "keepj noautocmd vimgrep".pat." ".netrwmarkfilelist
-    catch /^Vim\%((\a\+)\)\=:E480/
-     call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
-"     call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pattern.">")
-     return
-   endtry
+  " use vimgrep for both local and remote
+"  call Decho("exe vimgrep".patbang." ".pat." ".netrwmarkfilelist)
+  try
+   exe "keepj noautocmd vimgrep".patbang." ".pat." ".netrwmarkfilelist
+  catch /^Vim\%((\a\+)\)\=:E480/
+   keepj call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pat.">",76)
+"   call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pat.">")
+   return
+  endtry
+  echo "(use :cn, :cp to navigate, :Rex to return)"
 
-   2match none
-   call netrw#NetrwRestorePosn(svpos)
+  2match none
+  keepj call netrw#NetrwRestorePosn(svpos)
+
+  if exists("nonisi")
+   " original, user-supplied pattern did not begin with a character from isident
+"   call Decho("looking for trailing nonisi<".nonisi."> followed by a j, gj, or jg")
+   if pat =~ nonisi.'j$\|'.nonisi.'gj$\|'.nonisi.'jg$'
+    call s:NetrwMarkFileQFEL(a:islocal,getqflist())
+   endif
   endif
 
 "  call Dret("s:NetrwMarkFileGrep")
@@ -4756,14 +6077,15 @@ fun! s:NetrwMarkFileMove(islocal)
   let curbufnr = bufnr("%")
 
   " sanity check
-  if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')})
-   call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
 "   call Dret("s:NetrwMarkFileMove")
    return
   endif
-"  call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')}))
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if !exists("s:netrwmftgt")
-   call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
+   keepj call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
 "   call Dret("s:NetrwMarkFileCopy 0")
    return 0
   endif
@@ -4773,25 +6095,47 @@ fun! s:NetrwMarkFileMove(islocal)
    " move: local -> local
 "   call Decho("move from local to local")
 "   call Decho("(s:NetrwMarkFileMove) local to local move")
-   if executable(g:netrw_localmovecmd)
-    for fname in s:netrwmarkfilelist_{bufnr("%")}
-"     call Decho("system(".g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt).")")
-     let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt))
-     if v:shell_error < 0
-      call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> failed, aborting",54)
-      break
-     endif
-    endfor
+   if !executable(g:netrw_localmovecmd) && g:netrw_localmovecmd !~ '\<cmd\s'
+    call netrw#ErrorMsg(s:ERROR,"g:netrw_localmovecmd<".g:netrw_localmovecmd."> not executable on your system, aborting",90)
+"    call Dfunc("s:NetrwMarkFileMove : g:netrw_localmovecmd<".g:netrw_localmovecmd."> n/a!")
+    return
+   endif
+   let tgt         = shellescape(s:netrwmftgt)
+"   call Decho("tgt<".tgt.">")
+   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+    let tgt         = substitute(tgt, '/','\\','g')
+"    call Decho("windows exception: tgt<".tgt.">")
+    if g:netrw_localmovecmd =~ '\s'
+     let movecmd     = substitute(g:netrw_localmovecmd,'\s.*$','','')
+     let movecmdargs = substitute(g:netrw_localmovecmd,'^.\{-}\(\s.*\)$','\1','')
+     let movecmd     = netrw#WinPath(movecmd).movecmdargs
+"     call Decho("windows exception: movecmd<".movecmd."> (#1: had a space)")
+    else
+     let movecmd = netrw#WinPath(movecmd)
+"     call Decho("windows exception: movecmd<".movecmd."> (#2: no space)")
+    endif
    else
-    call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> is not executable!",57)
+    let movecmd = netrw#WinPath(g:netrw_localmovecmd)
+"    call Decho("movecmd<".movecmd."> (#3 linux or cygwin)")
    endif
+   for fname in s:netrwmarkfilelist_{bufnr("%")}
+"    call Decho("system(".movecmd." ".shellescape(fname)." ".tgt.")")
+    if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+     let fname= substitute(fname,'/','\\','g')
+    endif
+    let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".tgt)
+    if v:shell_error != 0
+     call netrw#ErrorMsg(s:ERROR,"tried using g:netrw_localmovecmd<".g:netrw_localmovecmd.">; it doesn't work!",54)
+     break
+    endif
+   endfor
 
   elseif  a:islocal && !s:netrwmftgt_islocal
    " move: local -> remote
 "   call Decho("move from local to remote")
 "   call Decho("copy")
    let mflist= s:netrwmarkfilelist_{bufnr("%")}
-   call s:NetrwMarkFileCopy(a:islocal)
+   keepj call s:NetrwMarkFileCopy(a:islocal)
 "   call Decho("remove")
    for fname in mflist
     let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
@@ -4804,7 +6148,7 @@ fun! s:NetrwMarkFileMove(islocal)
 "   call Decho("move from remote to local")
 "   call Decho("copy")
    let mflist= s:netrwmarkfilelist_{bufnr("%")}
-   call s:NetrwMarkFileCopy(a:islocal)
+   keepj call s:NetrwMarkFileCopy(a:islocal)
 "   call Decho("remove")
    for fname in mflist
     let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
@@ -4817,7 +6161,7 @@ fun! s:NetrwMarkFileMove(islocal)
 "   call Decho("move from remote to remote")
 "   call Decho("copy")
    let mflist= s:netrwmarkfilelist_{bufnr("%")}
-   call s:NetrwMarkFileCopy(a:islocal)
+   keepj call s:NetrwMarkFileCopy(a:islocal)
 "   call Decho("remove")
    for fname in mflist
     let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
@@ -4836,13 +6180,16 @@ fun! s:NetrwMarkFileMove(islocal)
 
   " refresh buffers
   if !s:netrwmftgt_islocal
-   call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
+"   call Decho("refresh netrwmftgt<".s:netrwmftgt.">")
+   keepj call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
   endif
   if a:islocal
-   call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
+"   call Decho("refresh b:netrw_curdir<".b:netrw_curdir.">")
+   keepj call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
   endif
   if g:netrw_fastbrowse <= 1
-   call s:LocalBrowseShellCmdRefresh()
+"   call Decho("since g:netrw_fastbrowse=".g:netrw_fastbrowse.", perform shell cmd refresh")
+   keepj call s:LocalBrowseShellCmdRefresh()
   endif
   
 "  call Dret("s:NetrwMarkFileMove")
@@ -4854,6 +6201,14 @@ endfun
 fun! s:NetrwMarkFilePrint(islocal)
 "  call Dfunc("s:NetrwMarkFilePrint(islocal=".a:islocal.")")
   let curbufnr= bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFilePrint")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
   if exists("s:netrwmarkfilelist_{curbufnr}")
    let netrwmarkfilelist = s:netrwmarkfilelist_{curbufnr}
    let curdir            = b:netrw_curdir
@@ -4868,8 +6223,8 @@ fun! s:NetrwMarkFilePrint(islocal)
     endif
     1split
     " the autocmds will handle both local and remote files
-"    call Decho("exe silent e ".escape(fname,' '))
-    exe "silent e ".fnameescape(fname)
+"    call Decho("exe sil e ".escape(fname,' '))
+    exe "sil e ".fnameescape(fname)
 "    call Decho("hardcopy")
     hardcopy
     q
@@ -4882,7 +6237,7 @@ endfun
 " ---------------------------------------------------------------------
 " s:NetrwMarkFileRegexp: (invoked by mr) This function is used to mark {{{2
 "                        files when given a regexp (for which a prompt is
-"                        issued).
+"                        issued) (matches to name of files).
 fun! s:NetrwMarkFileRegexp(islocal)
 "  call Dfunc("s:NetrwMarkFileRegexp(islocal=".a:islocal.")")
 
@@ -4894,15 +6249,15 @@ fun! s:NetrwMarkFileRegexp(islocal)
   if a:islocal
    " get the matching list of files using local glob()
 "   call Decho("handle local regexp")
-   let dirname  = escape(b:netrw_curdir,g:netrw_glob_escape)
-   let files = glob(s:ComposePath(dirname,regexp))
+   let dirname = escape(b:netrw_curdir,g:netrw_glob_escape)
+   let files   = glob(s:ComposePath(dirname,regexp))
 "   call Decho("files<".files.">")
    let filelist= split(files,"\n")
 
   " mark the list of files
   for fname in filelist
 "   call Decho("fname<".fname.">")
-   call s:NetrwMarkFile(a:islocal,substitute(fname,'^.*/','',''))
+   keepj call s:NetrwMarkFile(a:islocal,substitute(fname,'^.*/','',''))
   endfor
 
   else
@@ -4915,8 +6270,8 @@ fun! s:NetrwMarkFileRegexp(islocal)
    set ei=all ma
 "   call Decho("set ei=all ma")
    1split
-   call s:NetrwEnew()
-   call s:NetrwSafeOptions()
+   keepj call s:NetrwEnew()
+   keepj call s:NetrwSafeOptions()
    sil keepj norm! "ap
    keepj 2
    let bannercnt= search('^" =====','W')
@@ -4942,12 +6297,13 @@ fun! s:NetrwMarkFileRegexp(islocal)
    let filelist= getline(1,line("$"))
    q!
    for filename in filelist
-    call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
+    keepj call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
    endfor
    unlet filelist
    let @a  = areg
    let &ei = eikeep
   endif
+  echo "  (use me to edit marked files)"
 
 "  call Dret("s:NetrwMarkFileRegexp")
 endfun
@@ -4958,6 +6314,14 @@ endfun
 fun! s:NetrwMarkFileSource(islocal)
 "  call Dfunc("s:NetrwMarkFileSource(islocal=".a:islocal.")")
   let curbufnr= bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileSource")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
   if exists("s:netrwmarkfilelist_{curbufnr}")
    let netrwmarkfilelist = s:netrwmarkfilelist_{bufnr("%")}
    let curdir            = b:netrw_curdir
@@ -4988,6 +6352,14 @@ fun! s:NetrwMarkFileTag(islocal)
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
 
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileTag")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist")
 "   call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
    let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "shellescape(v:val,".!a:islocal.")"))
@@ -5023,9 +6395,9 @@ endfun
 " ---------------------------------------------------------------------
 " s:NetrwMarkFileTgt:  (invoked by mt) This function sets up a marked file target {{{2
 "   Sets up two variables, 
-"     s:netrwmftgt : holds the target directory
+"     s:netrwmftgt         : holds the target directory
 "     s:netrwmftgt_islocal : 0=target directory is remote
-"                    1=target directory is local
+"                            1=target directory is local
 fun! s:NetrwMarkFileTgt(islocal)
 "  call Dfunc("s:NetrwMarkFileTgt(islocal=".a:islocal.")")
   let svpos  = netrw#NetrwSavePosn()
@@ -5037,9 +6409,21 @@ fun! s:NetrwMarkFileTgt(islocal)
 
   " set up target
   if line(".") < w:netrw_bannercnt
-   " if cursor in banner region, use b:netrw_curdir for the target
-   let s:netrwmftgt= b:netrw_curdir
-"   call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">")
+   " if cursor in banner region, use b:netrw_curdir for the target unless its already the target
+   if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal") && s:netrwmftgt == b:netrw_curdir
+"    call Decho("cursor in banner region, and target already is <".b:netrw_curdir.">: removing target")
+    unlet s:netrwmftgt s:netrwmftgt_islocal
+    if g:netrw_fastbrowse <= 1
+     call s:LocalBrowseShellCmdRefresh()
+    endif
+    call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+    call netrw#NetrwRestorePosn(svpos)
+"    call Dret("s:NetrwMarkFileTgt : removed target")
+    return
+   else
+    let s:netrwmftgt= b:netrw_curdir
+"    call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">")
+   endif
 
   else
    " get word under cursor.
@@ -5085,6 +6469,7 @@ endfun
 " s:NetrwOpenFile: query user for a filename and open it {{{2
 fun! s:NetrwOpenFile(islocal)
 "  call Dfunc("s:NetrwOpenFile(islocal=".a:islocal.")")
+  let ykeep= @@
   call inputsave()
   let fname= input("Enter filename: ")
   call inputrestore()
@@ -5108,11 +6493,14 @@ fun! s:NetrwOpenFile(islocal)
   else
    exe "e ".fnameescape(fname)
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwOpenFile")
 endfun
 
 " ---------------------------------------------------------------------
 " s:NetrwUnmarkList: delete local marked file lists and remove their contents from the global marked-file list {{{2
+"   User access provided by the <mu> mapping. (see :help netrw-mu)
+"   Used by many MarkFile functions.
 fun! s:NetrwUnmarkList(curbufnr,curdir)
 "  call Dfunc("s:NetrwUnmarkList(curbufnr=".a:curbufnr." curdir<".a:curdir.">)")
 
@@ -5144,13 +6532,13 @@ fun! s:NetrwUnmarkAll()
   if exists("s:netrwmarkfilelist")
    unlet s:netrwmarkfilelist
   endif
-  silent call s:NetrwUnmarkAll2()
+  sil call s:NetrwUnmarkAll2()
   2match none
 "  call Dret("s:NetrwUnmarkAll")
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwUnmarkAll2: {{{2
+" s:NetrwUnmarkAll2: unmark all files from all buffers {{{2
 fun! s:NetrwUnmarkAll2()
 "  call Dfunc("s:NetrwUnmarkAll2()")
   redir => netrwmarkfilelist_let
@@ -5184,315 +6572,130 @@ fun! s:NetrwUnMarkFile(islocal)
    2match none
   endif
 
-"  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-"  call Dret("s:NetrwUnMarkFile")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMenu: generates the menu for gvim and netrw {{{2
-fun! s:NetrwMenu(domenu)
-
-  if !exists("g:NetrwMenuPriority")
-   let g:NetrwMenuPriority= 80
-  endif
-
-  if has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
-"   call Dfunc("NetrwMenu(domenu=".a:domenu.")")
-
-   if !exists("s:netrw_menu_enabled") && a:domenu
-"    call Decho("initialize menu")
-    let s:netrw_menu_enabled= 1
-    exe 'sil! menu '.g:NetrwMenuPriority.'.1     '.g:NetrwTopLvlMenu.'Help<tab><F1>    <F1>'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.5     '.g:NetrwTopLvlMenu.'-Sep1-   :'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.6     '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-  -'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.7     '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x     x'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb      mb'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u u'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U U'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb      qb'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."       \<c-h>'"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.2   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S  S'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.3   '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh       gh"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>       \<c-l>"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.5   '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings    '.":NetrwSettings\<cr>"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.10    '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D     D'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Create\ New\ File<tab>%   %'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>      '."\<cr>"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.2  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p     p'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.3  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P        P'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.4  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o     o'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.5  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v   v'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.1  '.g:NetrwTopLvlMenu.'Explore.Directory\ Name  :Explore '
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */    :Explore */'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/       :Explore **/'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.3  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (curdir\ only)<tab>:Explore\ *//     :Explore *//'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (+subdirs)<tab>:Explore\ **//        :Explore **//'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore        :Nexplore<cr>'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore        :Pexplore<cr>'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.13    '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d d'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.1  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf  mf'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.2  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr     mr'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.3  '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a      a'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.4  '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc    mc'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.5  '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D       D'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.6  '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md        md'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.7  '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me        me'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.8  '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx    mx'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.9  '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm    mm'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.10 '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O       O'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.11 '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp       mp'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.12 '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R      R'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.13 '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt mt'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.14 '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT mT'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.15 '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz       mz'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.15    '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O       O'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1  '.g:NetrwTopLvlMenu.'Style.Listing\ Style\ (thin-long-wide-tree)<tab>i        i'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2  '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show<tab>a     a'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.3  '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r   r"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4  '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)<tab>s    s'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.17    '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R     R'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.18    '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c    c'
-    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4, 8.2.x
-    let s:netrw_menucnt= 28
-
-   elseif !a:domenu
-    let s:netrwcnt = 0
-    let curwin     = winnr()
-    windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
-    exe curwin."wincmd w"
-
-    if s:netrwcnt <= 1
-"     call Decho("clear menus")
-     exe 'sil! unmenu '.g:NetrwTopLvlMenu
-"     call Decho('exe silent! unmenu '.g:NetrwTopLvlMenu.'*')
-     sil! unlet s:netrw_menu_enabled
-    endif
-   endif
-"   call Dret("NetrwMenu")
-  endif
-
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwObtain: obtain file under cursor or from markfile list {{{2
-"                Used by the O maps (as <SID>NetrwObtain())
-fun! s:NetrwObtain(islocal)
-"  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
-
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-   let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://'
-   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')})
-   call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir)
-  else
-   call netrw#NetrwObtain(a:islocal,expand("<cWORD>"))
-  endif
-
-"  call Dret("NetrwObtain")
-endfun
-
-" ---------------------------------------------------------------------
-" netrw#NetrwObtain: {{{2
-"   netrw#NetrwObtain(islocal,fname[,tgtdirectory])
-"     islocal=0  obtain from remote source
-"            =1  obtain from local source
-"     fname  :   a filename or a list of filenames
-"     tgtdir :   optional place where files are to go  (not present, uses getcwd())
-fun! netrw#NetrwObtain(islocal,fname,...)
-"  call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0)
-  " NetrwStatusLine support - for obtaining support
-
-  if type(a:fname) == 1
-   let fnamelist= [ a:fname ]
-  elseif type(a:fname) == 3
-   let fnamelist= a:fname
-  else
-   call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62)
-"   call Dret("netrw#NetrwObtain")
-   return
-  endif
-"  call Decho("fnamelist<".string(fnamelist).">")
-  if a:0 > 0
-   let tgtdir= a:1
-  else
-   let tgtdir= getcwd()
-  endif
-"  call Decho("tgtdir<".tgtdir.">")
-
-  if exists("b:netrw_islocal") && b:netrw_islocal
-   " obtain a file from local b:netrw_curdir to (local) tgtdir
-"   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
-   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
-    let topath= s:ComposePath(tgtdir,"")
-    if (has("win32") || has("win95") || has("win64") || has("win16"))
-     " transfer files one at time
-"     call Decho("transfer files one at a time")
-     for fname in fnamelist
-"      call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")")
-      call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
-     endfor
-    else
-     " transfer files with one command
-"     call Decho("transfer files with one command")
-     let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)"))
-"     call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")")
-     call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
-    endif
-   elseif !exists("b:netrw_curdir")
-    call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
-   else
-    call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37)
-   endif
-
-  else
-   " obtain files from remote b:netrw_curdir to local tgtdir
-"   call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir)
-   if type(a:fname) == 1
-    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname)
-   endif
-   call s:NetrwMethod(b:netrw_curdir)
-
-   if b:netrw_method == 4
-    " obtain file using scp
-"    call Decho("obtain via scp (method#4)")
-    if exists("g:netrw_port") && g:netrw_port != ""
-     let useport= " ".g:netrw_scpport." ".g:netrw_port
-    else
-     let useport= ""
-    endif
-    if b:netrw_fname =~ '/'
-     let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','')
-    else
-     let path= ""
-    endif
-    let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)'))
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1))
-    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)
-
-   elseif b:netrw_method == 2
-    " obtain file using ftp + .netrc
-"     call Decho("obtain via ftp+.netrc (method #2)")
-     call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
-     let tmpbufnr= bufnr("%")
-     setlocal ff=unix
-     if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-      keepj put =g:netrw_ftpmode
-"      call Decho("filter input: ".getline('$'))
-     endif
-
-     if exists("b:netrw_fname") && b:netrw_fname != ""
-      call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
-"      call Decho("filter input: ".getline('$'))
-     endif
-
-     if exists("g:netrw_ftpextracmd")
-      keepj put =g:netrw_ftpextracmd
-"      call Decho("filter input: ".getline('$'))
-     endif
-     for fname in fnamelist
-      call setline(line("$")+1,'get "'.fname.'"')
-"      call Decho("filter input: ".getline('$'))
-     endfor
-     if exists("g:netrw_port") && g:netrw_port != ""
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
-     else
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
-     endif
-     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
-      let debugkeep= &debug
-      setlocal debug=msg
-      call netrw#ErrorMsg(s:ERROR,getline(1),4)
-      let &debug= debugkeep
-     endif
-
-   elseif b:netrw_method == 3
-    " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc)
-"    call Decho("obtain via ftp+mipf (method #3)")
-    call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
-    let tmpbufnr= bufnr("%")
-    setlocal ff=unix
-
-    if exists("g:netrw_port") && g:netrw_port != ""
-     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho("filter input: ".getline('$'))
-    else
-     keepj put ='open '.g:netrw_machine
-"     call Decho("filter input: ".getline('$'))
-    endif
+"  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+"  call Dret("s:NetrwUnMarkFile")
+endfun
 
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     keepj put =g:netrw_uid
-"     call Decho("filter input: ".getline('$'))
-     keepj put ='\"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('$'))
-    else
-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('$'))
-    endif
+" ---------------------------------------------------------------------
+" s:NetrwMenu: generates the menu for gvim and netrw {{{2
+fun! s:NetrwMenu(domenu)
 
-    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-     keepj put =g:netrw_ftpmode
-"     call Decho("filter input: ".getline('$'))
-    endif
+  if !exists("g:NetrwMenuPriority")
+   let g:NetrwMenuPriority= 80
+  endif
 
-    if exists("b:netrw_fname") && b:netrw_fname != ""
-     keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
-"     call Decho("filter input: ".getline('$'))
-    endif
+  if has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
+"   call Dfunc("NetrwMenu(domenu=".a:domenu.")")
 
-    if exists("g:netrw_ftpextracmd")
-     keepj put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline('$'))
-    endif
+   if !exists("s:netrw_menu_enabled") && a:domenu
+"    call Decho("initialize menu")
+    let s:netrw_menu_enabled= 1
+    exe 'sil! menu '.g:NetrwMenuPriority.'.1      '.g:NetrwTopLvlMenu.'Help<tab><F1>   <F1>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.5      '.g:NetrwTopLvlMenu.'-Sep1-  :'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.6      '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>- -'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.7      '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x    x'
+    if g:netrw_dirhistmax > 0
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb     mb'
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u        u'
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U        U'
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb     qb'
+    else
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8     '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History :echo "(disabled)"'."\<cr>"
+    endif
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.1    '.g:NetrwTopLvlMenu.'Browsing\ Control.Horizontal\ Split<tab>o       o'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.2    '.g:NetrwTopLvlMenu.'Browsing\ Control.Vertical\ Split<tab>v v'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.3    '.g:NetrwTopLvlMenu.'Browsing\ Control.New\ Tab<tab>t        t'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.4    '.g:NetrwTopLvlMenu.'Browsing\ Control.Preview<tab>p p'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.5    '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."      \<c-h>'"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.6    '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S S'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.7    '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh      gh"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.8    '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>      \<c-l>"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.9    '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings   '.":NetrwSettings\<cr>"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.10     '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D    D'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Create\ New\ File<tab>%  %'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>     '."\<cr>"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.2   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p    p'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.3   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P       P'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.4   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o    o'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.5   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v  v'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.1   '.g:NetrwTopLvlMenu.'Explore.Directory\ Name :Explore '
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2   '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */   :Explore */'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2   '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/      :Explore **/'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.3   '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (curdir\ only)<tab>:Explore\ *//    :Explore *//'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4   '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (+subdirs)<tab>:Explore\ **//       :Explore **//'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4   '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore       :Nexplore<cr>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4   '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore       :Pexplore<cr>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.13     '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d        d'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.1   '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf mf'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.2   '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr    mr'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.3   '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a     a'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.4   '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc   mc'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.5   '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D      D'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.6   '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md       md'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.7   '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me       me'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.8   '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx   mx'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.9   '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm   mm'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.10  '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O      O'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.11  '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp      mp'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.12  '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R     R'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.13  '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt        mt'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.14  '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT        mT'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.15  '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz      mz'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.15     '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O      O'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.thin<tab>i        :let w:netrw_liststyle=0<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.long<tab>i        :let w:netrw_liststyle=1<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.wide<tab>i        :let w:netrw_liststyle=2<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.tree<tab>i        :let w:netrw_liststyle=3<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.1 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Show\ All<tab>a  :let g:netrw_hide=0<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.3 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Normal<tab>a     :let g:netrw_hide=1<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.2 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Hidden\ Only<tab>a       :let g:netrw_hide=2<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.3   '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r  r"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.1 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Name<tab>s       :let g:netrw_sort_by="name"<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.2 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Time<tab>s       :let g:netrw_sort_by="time"<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.3 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Size<tab>s       :let g:netrw_sort_by="size"<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.17     '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R    R'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.18     '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c   c'
+    let s:netrw_menucnt= 28
+    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4, 8.2.x
+    call s:NetrwTgtMenu()      " let bookmarks and history be easy targets
 
-    if exists("g:netrw_ftpextracmd")
-     keepj put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline('$'))
-    endif
-    for fname in fnamelist
-     keepj call setline(line("$")+1,'get "'.fname.'"')
-    endfor
-"    call Decho("filter input: ".getline('$'))
+   elseif !a:domenu
+    let s:netrwcnt = 0
+    let curwin     = winnr()
+    windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
+    exe curwin."wincmd w"
 
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-    keepj norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
-    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-    if getline(1) !~ "^$"
-"     call Decho("error<".getline(1).">")
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),5)
-     endif
+    if s:netrwcnt <= 1
+"     call Decho("clear menus")
+     exe 'sil! unmenu '.g:NetrwTopLvlMenu
+"     call Decho('exe sil! unmenu '.g:NetrwTopLvlMenu.'*')
+     sil! unlet s:netrw_menu_enabled
     endif
-   elseif !exists("b:netrw_method") || b:netrw_method < 0
-"    call Dfunc("netrw#NetrwObtain : unsupported method")
-    return
    endif
+"   call Dret("NetrwMenu")
+   return
+  endif
 
-   " restore status line
-   if type(a:fname) == 1 && exists("s:netrw_users_stl")
-    call s:SetupNetrwStatusLine(s:netrw_users_stl)
-   endif
+endfun
 
-  endif
+" ---------------------------------------------------------------------
+" s:NetrwObtain: obtain file under cursor or from markfile list {{{2
+"                Used by the O maps (as <SID>NetrwObtain())
+fun! s:NetrwObtain(islocal)
+"  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
 
-  " cleanup
-  if exists("tmpbufnr")
-   if bufnr("%") != tmpbufnr
-    exe tmpbufnr."bw!"
-   else
-    q!
-   endif
+  let ykeep= @@
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+   let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://'
+   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')})
+   call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir)
+  else
+   call netrw#NetrwObtain(a:islocal,expand("<cWORD>"))
   endif
+  let @@= ykeep
 
-"  call Dret("netrw#NetrwObtain")
+"  call Dret("NetrwObtain")
 endfun
 
 " ---------------------------------------------------------------------
@@ -5506,6 +6709,7 @@ endfun
 fun! s:NetrwPrevWinOpen(islocal)
 "  call Dfunc("NetrwPrevWinOpen(islocal=".a:islocal.")")
 
+  let ykeep= @@
   " grab a copy of the b:netrw_curdir to pass it along to newly split windows
   let curdir    = b:netrw_curdir
 
@@ -5520,19 +6724,21 @@ fun! s:NetrwPrevWinOpen(islocal)
    " if only one window, open a new one first
 "   call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")")
    if g:netrw_preview
-"    call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s")
-    exe (g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s"
+    let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize
+"    call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".winsz."wincmd s")
+    exe (g:netrw_alto? "top " : "bot ")."vert ".winsz."wincmd s"
    else
-"    call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
-    exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+    let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
+"    call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s")
+    exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s"
    endif
    let didsplit  = 1
 
   else
-   call s:SaveBufVars()
+   keepj call s:SaveBufVars()
 "   call Decho("wincmd p")
    wincmd p
-   call s:RestoreBufVars()
+   keepj call s:RestoreBufVars()
    " if the previous window's buffer has been changed (is modified),
    " and it doesn't appear in any other extant window, then ask the
    " user if s/he wants to abandon modifications therein.
@@ -5554,7 +6760,7 @@ fun! s:NetrwPrevWinOpen(islocal)
      if choice == 1
       " Yes -- write file & then browse
       let v:errmsg= ""
-      silent w
+      sil w
       if v:errmsg != ""
        call netrw#ErrorMsg(s:ERROR,"unable to write <".bufname.">!",30)
        if didsplit
@@ -5562,14 +6768,17 @@ fun! s:NetrwPrevWinOpen(islocal)
        else
                wincmd p
        endif
+       let @@= ykeep
 "       call Dret("NetrwPrevWinOpen ".choice." : unable to write <".bufname.">")
        return choice
       endif
 
      elseif choice == 2
       " No -- don't worry about changed file, just browse anyway
-      setlocal nomod
-      call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31)
+"      call Decho("(NetrwPrevWinOpen) setl nomod")
+      setl nomod
+"      call Decho("(NetrwPrevWinOpen) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+      keepj call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31)
       wincmd p
 
      else
@@ -5579,6 +6788,7 @@ fun! s:NetrwPrevWinOpen(islocal)
       else
        wincmd p
       endif
+      let @@= ykeep
 "      call Dret("NetrwPrevWinOpen ".choice." : cancelled")
       return choice
      endif
@@ -5595,6 +6805,7 @@ fun! s:NetrwPrevWinOpen(islocal)
     call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,curword))
    endif
   endif
+  let @@= ykeep
 "  call Dret("NetrwPrevWinOpen ".choice)
   return choice
 endfun
@@ -5644,7 +6855,7 @@ fun! s:NetrwUpload(fname,tgt,...)
 "   call Decho("handle uploading a list of files via scp")
    let curdir= getcwd()
    if a:tgt =~ '^scp:'
-    exe "keepjumps silent lcd ".fnameescape(fromdir)
+    exe "keepjumps sil lcd ".fnameescape(fromdir)
     let filelist= deepcopy(s:netrwmarkfilelist_{bufnr('%')})
     let args    = join(map(filelist,"shellescape(v:val, 1)"))
     if exists("g:netrw_port") && g:netrw_port != ""
@@ -5656,7 +6867,7 @@ fun! s:NetrwUpload(fname,tgt,...)
     let tgt     = substitute(a:tgt,'^scp://[^/]\+/\(.*\)$','\1','')
 "    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1))
     exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1)
-    exe "keepjumps silent lcd ".fnameescape(curdir)
+    exe "keepjumps sil lcd ".fnameescape(curdir)
 
    elseif a:tgt =~ '^ftp:'
     call s:NetrwMethod(a:tgt)
@@ -5678,6 +6889,9 @@ fun! s:NetrwUpload(fname,tgt,...)
      keepj call setline(line("$")+1,'lcd "'.fromdir.'"')
 "     call Decho("filter input: ".getline('$'))
 
+     if tgtdir == ""
+      let tgtdir= '/'
+     endif
      keepj call setline(line("$")+1,'cd "'.tgtdir.'"')
 "     call Decho("filter input: ".getline('$'))
 
@@ -5687,12 +6901,12 @@ fun! s:NetrwUpload(fname,tgt,...)
      endfor
 
      if exists("g:netrw_port") && g:netrw_port != ""
-"      call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+"      call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
      else
 "      call Decho("filter input window#".winnr())
-"      call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+"      call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
      endif
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
      sil keepj g/Local directory now/d
@@ -5706,9 +6920,9 @@ fun! s:NetrwUpload(fname,tgt,...)
     elseif b:netrw_method == 3
      " upload with ftp + machine, id, passwd, and fname (ie. no .netrc)
      let netrw_fname= b:netrw_fname
-     call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
+     keepj call s:SaveBufVars()|sil keepj new|keepj call s:RestoreBufVars()
      let tmpbufnr= bufnr("%")
-     setlocal ff=unix
+     setl ff=unix
 
      if exists("g:netrw_port") && g:netrw_port != ""
       keepj put ='open '.g:netrw_machine.' '.g:netrw_port
@@ -5718,14 +6932,18 @@ fun! s:NetrwUpload(fname,tgt,...)
 "      call Decho("filter input: ".getline('$'))
      endif
 
-     if exists("g:netrw_ftp") && g:netrw_ftp == 1
-      keepj put =g:netrw_uid
-"      call Decho("filter input: ".getline('$'))
-      keepj call setline(line("$")+1,'"'.s:netrw_passwd.'"')
-"      call Decho("filter input: ".getline('$'))
-     else
-      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"      call Decho("filter input: ".getline('$'))
+     if exists("g:netrw_uid") && g:netrw_uid != ""
+      if exists("g:netrw_ftp") && g:netrw_ftp == 1
+       keepj put =g:netrw_uid
+"       call Decho("filter input: ".getline('$'))
+       if exists("s:netrw_passwd")
+        keepj call setline(line("$")+1,'"'.s:netrw_passwd.'"')
+       endif
+"       call Decho("filter input: ".getline('$'))
+      elseif exists("s:netrw_passwd")
+       keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"       call Decho("filter input: ".getline('$'))
+      endif
      endif
 
      keepj call setline(line("$")+1,'lcd "'.fromdir.'"')
@@ -5751,14 +6969,14 @@ fun! s:NetrwUpload(fname,tgt,...)
      " -n  unix : DON'T use <.netrc>, even though it exists
      " -n  win32: quit being obnoxious about password
      keepj norm! 1Gdd
-"     call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n")
-     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+"     call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+     exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
      sil keepj g/Local directory now/d
      call histdel("/",-1)
      if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
       let debugkeep= &debug
-      setlocal debug=msg
+      setl debug=msg
       call netrw#ErrorMsg(s:ERROR,getline(1),15)
       let &debug = debugkeep
       let mod    = 1
@@ -5781,25 +6999,28 @@ endfun
 " s:NetrwPreview: {{{2
 fun! s:NetrwPreview(path) range
 "  call Dfunc("NetrwPreview(path<".a:path.">)")
-  call s:NetrwOptionSave("s:")
-  call s:NetrwSafeOptions()
+  let ykeep= @@
+  keepj call s:NetrwOptionSave("s:")
+  keepj call s:NetrwSafeOptions()
   if has("quickfix")
    if !isdirectory(a:path)
     if g:netrw_preview && !g:netrw_alto
-     let pvhkeep= &pvh
-     let &pvh   = winwidth(0) - g:netrw_winsize
+     let pvhkeep = &pvh
+     let winsz   = (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
+     let &pvh    = winwidth(0) - winsz
     endif
     exe (g:netrw_alto? "top " : "bot ").(g:netrw_preview? "vert " : "")."pedit ".fnameescape(a:path)
     if exists("pvhkeep")
      let &pvh= pvhkeep
     endif
    elseif !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38)
+    keepj call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38)
    endif
   elseif !exists("g:netrw_quiet")
-   call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39)
+   keepj call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39)
   endif
-  call s:NetrwOptionRestore("s:")
+  keepj call s:NetrwOptionRestore("s:")
+  let @@= ykeep
 "  call Dret("NetrwPreview")
 endfun
 
@@ -5808,18 +7029,21 @@ endfun
 fun! s:NetrwRefresh(islocal,dirname)
 "  call Dfunc("NetrwRefresh(islocal<".a:islocal.">,dirname=".a:dirname.") hide=".g:netrw_hide." sortdir=".g:netrw_sort_direction)
   " at the current time (Mar 19, 2007) all calls to NetrwRefresh() call NetrwBrowseChgDir() first.
-  " NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here.
-  " Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself.
-  setlocal ma noro
-"  call Decho("setlocal ma noro")
+  " (defunct) NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here.
+  " (defunct) Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself.
+  setl ma noro
+"  call Decho("setl ma noro")
 "  call Decho("clear buffer<".expand("%")."> with :%d")
+  let ykeep      = @@
+  let screenposn = netrw#NetrwSavePosn()
+"  call Decho("clearing buffer prior to refresh")
   sil! keepj %d
   if a:islocal
-   call netrw#LocalBrowseCheck(a:dirname)
+   keepj call netrw#LocalBrowseCheck(a:dirname)
   else
-   call s:NetrwBrowse(a:islocal,a:dirname)
+   keepj call s:NetrwBrowse(a:islocal,a:dirname)
   endif
-  call netrw#NetrwRestorePosn()
+  keepj call netrw#NetrwRestorePosn(screenposn)
 
   " restore file marks
   if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
@@ -5830,7 +7054,8 @@ fun! s:NetrwRefresh(islocal,dirname)
    2match none
   endif
 
-"  redraw!
+"  restore
+  let @@= ykeep
 "  call Dret("NetrwRefresh")
 endfun
 
@@ -5839,7 +7064,7 @@ endfun
 "                    Called by NetrwMarkFileCopy()
 "                    Interfaces to s:NetrwRefresh() and s:LocalBrowseShellCmdRefresh()
 fun! s:NetrwRefreshDir(islocal,dirname)
-"  call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) fastbrowse=".g:netrw_fastbrowse)
+"  call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) g:netrw_fastbrowse=".g:netrw_fastbrowse)
   if g:netrw_fastbrowse == 0
    " slowest mode (keep buffers refreshed, local or remote)
 "   call Decho("slowest mode: keep buffers refreshed, local or remote")
@@ -5851,18 +7076,18 @@ fun! s:NetrwRefreshDir(islocal,dirname)
     let curwin= winnr()
 "    call Decho("refresh tgtwin#".tgtwin." (curwin#".curwin.")")
     exe tgtwin."wincmd w"
-    call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) 
+    keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) 
     exe curwin."wincmd w"
 
    elseif bufnr(a:dirname) > 0
     let bn= bufnr(a:dirname)
 "    call Decho("bd bufnr(".a:dirname.")=".bn)
-    exe "silent bd ".bn
+    exe "sil bd ".bn
    endif
 
   elseif g:netrw_fastbrowse <= 1
 "   call Decho("medium-speed mode: refresh local buffers only")
-   call s:LocalBrowseShellCmdRefresh()
+   keepj call s:LocalBrowseShellCmdRefresh()
   endif
 "  call Dret("s:NetrwRefreshDir")
 endfun
@@ -5875,6 +7100,7 @@ endfun
 "          front.  An "*" pattern handles the default priority.
 fun! s:NetrwSetSort()
 "  call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
+  let ykeep= @@
   if w:netrw_liststyle == s:LONGLIST
    let seqlist  = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
   else
@@ -5918,13 +7144,13 @@ fun! s:NetrwSetSort()
     " sometimes multiple sorting patterns will match the same file or directory.
     " The following substitute is intended to remove the excess matches.
     exe 'sil keepj '.w:netrw_bannercnt.',$g/^\d\{3}'.g:netrw_sepchr.'\d\{3}\//s/^\d\{3}'.g:netrw_sepchr.'\(\d\{3}\/\).\@=/\1/e'
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
    endif
    let priority = priority + 1
   endwhile
   if exists("starpriority")
    exe 'sil keepj '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/'
-   call histdel("/",-1)
+   keepj call histdel("/",-1)
   endif
 
   " Following line associated with priority -- items that satisfy a priority
@@ -5934,22 +7160,54 @@ fun! s:NetrwSetSort()
   " priority prefixes need to be removed, but not directories that happen to
   " be just digits themselves.
   exe 'sil keepj '.w:netrw_bannercnt.',$s/^\(\d\{3}'.g:netrw_sepchr.'\)\%(\d\{3}'.g:netrw_sepchr.'\)\+\ze./\1/e'
-  call histdel("/",-1)
+  keepj call histdel("/",-1)
+  let @@= ykeep
 
 "  call Dret("SetSort")
 endfun
 
+" ---------------------------------------------------------------------
+" s:NetrwSetTgt: sets the target to the specified choice index {{{2
+"    Implements [count]Tb  (bookhist<b>)
+"               [count]Th  (bookhist<h>)
+"               See :help netrw-qb for how to make the choice.
+fun! s:NetrwSetTgt(bookhist,choice)
+"  call Dfunc("s:NetrwSetTgt(bookhist<".a:bookhist."> choice#".a:choice.")")
+
+  if     a:bookhist == 'b'
+   " supports choosing a bookmark as a target using a qb-generated list
+   let choice= a:choice - 1
+   if exists("g:netrw_bookmarklist[".choice."]")
+    call netrw#NetrwMakeTgt(g:netrw_bookmarklist[choice])
+   else
+    echomsg "Sorry, bookmark#".a:choice." doesn't exist!"
+   endif
+
+  elseif a:bookhist == 'h'
+   " supports choosing a history stack entry as a target using a qb-generated list
+   let choice= (a:choice % g:netrw_dirhistmax) + 1
+   if exists("g:netrw_dirhist_".choice)
+    let histentry = g:netrw_dirhist_{choice}
+    call netrw#NetrwMakeTgt(histentry)
+   else
+    echomsg "Sorry, history#".a:choice." not available!"
+   endif
+  endif
+
+"  call Dret("s:NetrwSetTgt")
+endfun
+
 " =====================================================================
 " s:NetrwSortStyle: change sorting style (name - time - size) and refresh display {{{2
 fun! s:NetrwSortStyle(islocal)
 "  call Dfunc("s:NetrwSortStyle(islocal=".a:islocal.") netrw_sort_by<".g:netrw_sort_by.">")
-  call s:NetrwSaveWordPosn()
+  keepj call s:NetrwSaveWordPosn()
   let svpos= netrw#NetrwSavePosn()
 
   let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'
   keepj norm! 0
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
 
 "  call Dret("s:NetrwSortStyle : netrw_sort_by<".g:netrw_sort_by.">")
 endfun
@@ -5965,15 +7223,17 @@ endfun
 fun! s:NetrwSplit(mode)
 "  call Dfunc("s:NetrwSplit(mode=".a:mode.") alto=".g:netrw_alto." altv=".g:netrw_altv)
 
+  let ykeep= @@
   call s:SaveWinVars()
 
   if a:mode == 0
    " remote and o
-"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize
+"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s")
+   exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s"
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+   keepj call s:RestoreWinVars()
+   keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
    unlet s:didsplit
 
   elseif a:mode == 1
@@ -5982,26 +7242,28 @@ fun! s:NetrwSplit(mode)
 "   call Decho("tabnew")
    tabnew
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call s:NetrwBrowse(0,newdir)
+   keepj call s:RestoreWinVars()
+   keepj call s:NetrwBrowse(0,newdir)
    unlet s:didsplit
 
   elseif a:mode == 2
    " remote and v
-"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v")
-   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
+"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v")
+   exe (g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v"
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+   keepj call s:RestoreWinVars()
+   keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
    unlet s:didsplit
 
   elseif a:mode == 3
    " local and o
-"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize
+"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s")
+   exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s"
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+   keepj call s:RestoreWinVars()
+   keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
    unlet s:didsplit
 
   elseif a:mode == 4
@@ -6012,57 +7274,76 @@ fun! s:NetrwSplit(mode)
    tabnew
    let b:netrw_curdir= netrw_curdir
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword))
+   keepj call s:RestoreWinVars()
+   keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword))
    unlet s:didsplit
 
   elseif a:mode == 5
    " local and v
-"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v")
-   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
+"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v")
+   exe (g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v"
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+   keepj call s:RestoreWinVars()
+   keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
    unlet s:didsplit
 
   else
-   call netrw#ErrorMsg(s:ERROR,"(NetrwSplit) unsupported mode=".a:mode,45)
+   keepj call netrw#ErrorMsg(s:ERROR,"(NetrwSplit) unsupported mode=".a:mode,45)
   endif
 
+  let @@= ykeep
 "  call Dret("s:NetrwSplit")
 endfun
 
 " ---------------------------------------------------------------------
-" NetrwStatusLine: {{{2
-fun! NetrwStatusLine()
+" s:NetrwTgtMenu: {{{2
+fun! s:NetrwTgtMenu()
+  if !exists("s:netrw_menucnt")
+   return
+  endif
+"  call Dfunc("s:NetrwTgtMenu()")
 
-" vvv NetrwStatusLine() debugging vvv
-"  let g:stlmsg=""
-"  if !exists("w:netrw_explore_bufnr")
-"   let g:stlmsg="!X<explore_bufnr>"
-"  elseif w:netrw_explore_bufnr != bufnr("%")
-"   let g:stlmsg="explore_bufnr!=".bufnr("%")
-"  endif
-"  if !exists("w:netrw_explore_line")
-"   let g:stlmsg=" !X<explore_line>"
-"  elseif w:netrw_explore_line != line(".")
-"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
-"  endif
-"  if !exists("w:netrw_explore_list")
-"   let g:stlmsg=" !X<explore_list>"
-"  endif
-" ^^^ NetrwStatusLine() debugging ^^^
+  " the following test assures that gvim is running, has menus available, and has menus enabled.
+  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
+   if exists("g:NetrwTopLvlMenu")
+"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
+    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Targets'
+   endif
+   if !exists("s:netrw_initbookhist")
+    call s:NetrwBookHistRead()
+   endif
 
-  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
-   " restore user's status line
-   let &stl        = s:netrw_users_stl
-   let &laststatus = s:netrw_users_ls
-   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
-   if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif
-   return ""
-  else
-   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
+   " target bookmarked places
+   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] && g:netrw_dirhistmax > 0
+"    call Decho("installing bookmarks as easy targets")
+    let cnt= 1
+    for bmd in g:netrw_bookmarklist
+     let ebmd= escape(bmd,g:netrw_menu_escape)
+     " show bookmarks for goto menu
+"     call Decho("menu: Targets: ".bmd)
+     exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.1.".cnt." ".g:NetrwTopLvlMenu.'Targets.'.ebmd."        :call netrw#NetrwMakeTgt('".bmd."')\<cr>"
+     let cnt= cnt + 1
+    endfor
+   endif
+
+   " target directory browsing history
+   if exists("g:netrw_dirhistmax") && g:netrw_dirhistmax > 0
+"    call Decho("installing history as easy targets (histmax=".g:netrw_dirhistmax.")")
+    let histcnt = 1
+    while histcnt <= g:netrw_dirhistmax
+     let priority = g:netrw_dirhist_cnt + histcnt
+     if exists("g:netrw_dirhist_{histcnt}")
+      let histentry  = g:netrw_dirhist_{histcnt}
+      let ehistentry = escape(histentry,g:netrw_menu_escape)
+"      call Decho("menu: Targets: ".histentry)
+      exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.2.".priority." ".g:NetrwTopLvlMenu.'Targets.'.ehistentry."    :call netrw#NetrwMakeTgt('".histentry."')\<cr>"
+     endif
+     let histcnt = histcnt + 1
+    endwhile
+   endif
   endif
+"  call Dret("s:NetrwTgtMenu")
 endfun
 
 " ---------------------------------------------------------------------
@@ -6072,12 +7353,12 @@ fun! s:NetrwTreeDir()
 "  call Dfunc("NetrwTreeDir() curline#".line(".")."<".getline('.')."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">")
 
   let treedir= b:netrw_curdir
-"  call Decho("set initial treedir<".treedir.">")
+"  call Decho("(NetrwTreeDir) set initial treedir<".treedir.">")
   let s:treecurpos= netrw#NetrwSavePosn()
 
   if w:netrw_liststyle == s:TREELIST
-"   call Decho("w:netrrw_liststyle is TREELIST:")
-"   call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
+"   call Decho("(NetrwTreeDir) w:netrw_liststyle is TREELIST:")
+"   call Decho("(NetrwTreeDir) line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
 
    " extract tree directory if on a line specifying a subdirectory (ie. ends with "/")
    if getline('.') =~ '/$'
@@ -6085,13 +7366,13 @@ fun! s:NetrwTreeDir()
    else
     let treedir= ""
    endif
-"   call Decho("treedir<".treedir.">")
+"   call Decho("(NetrwTreeDir) treedir<".treedir.">")
 
    " detect user attempting to close treeroot
    if getline('.') !~ '|' && getline('.') != '..'
 "    call Decho("user attempted to close treeroot")
     " now force a refresh
-"    call Decho("clear buffer<".expand("%")."> with :%d")
+"    call Decho("(NetrwTreeDir) clear buffer<".expand("%")."> with :%d")
     sil! keepj %d
 "    call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
     return b:netrw_curdir
@@ -6099,26 +7380,26 @@ fun! s:NetrwTreeDir()
 
    " elide all non-depth information
    let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e')
-"   call Decho("depth<".depth."> 1st subst (non-depth info removed)")
+"   call Decho("(NetrwTreeDir) depth<".depth."> 1st subst (non-depth info removed)")
 
    " elide first depth
    let depth = substitute(depth,'^| ','','')
-"   call Decho("depth<".depth."> 2nd subst (first depth removed)")
+"   call Decho("(NetrwTreeDir) depth<".depth."> 2nd subst (first depth removed)")
 
    " construct treedir by searching backwards at correct depth
-"   call Decho("constructing treedir<".treedir."> depth<".depth.">")
+"   call Decho("(NetrwTreeDir) constructing treedir<".treedir."> depth<".depth.">")
    while depth != "" && search('^'.depth.'[^|].\{-}/$','bW')
     let dirname= substitute(getline('.'),'^\(| \)*','','e')
     let treedir= dirname.treedir
     let depth  = substitute(depth,'^| ','','')
-"    call Decho("constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
+"    call Decho("(NetrwTreeDir) constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
    endwhile
    if w:netrw_treetop =~ '/$'
     let treedir= w:netrw_treetop.treedir
    else
     let treedir= w:netrw_treetop.'/'.treedir
    endif
-"   call Decho("bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line("."))
+"   call Decho("(NetrwTreeDir) bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line("."))
   endif
   let treedir= substitute(treedir,'//$','/','')
 
@@ -6132,7 +7413,7 @@ fun! s:NetrwTreeDisplay(dir,depth)
 "  call Dfunc("NetrwTreeDisplay(dir<".a:dir."> depth<".a:depth.">)")
 
   " insure that there are no folds
-  setlocal nofen
+  setl nofen
 
   " install ../ and shortdir
   if a:depth == ""
@@ -6167,10 +7448,10 @@ fun! s:NetrwTreeDisplay(dir,depth)
 "   call Decho("dir<".dir."> entry<".entry."> direntry<".direntry.">")
    if entry =~ '/$' && has_key(w:netrw_treedict,direntry)
 "    call Decho("<".direntry."> is a key in treedict - display subtree for it")
-    call s:NetrwTreeDisplay(direntry,depth)
+    keepj call s:NetrwTreeDisplay(direntry,depth)
    elseif entry =~ '/$' && has_key(w:netrw_treedict,direntry.'/')
 "    call Decho("<".direntry."/> is a key in treedict - display subtree for it")
-    call s:NetrwTreeDisplay(direntry.'/',depth)
+    keepj call s:NetrwTreeDisplay(direntry.'/',depth)
    else
 "    call Decho("<".entry."> is not a key in treedict (no subtree)")
     sil! keepj call setline(line("$")+1,depth.entry)
@@ -6219,9 +7500,10 @@ fun! s:NetrwTreeListing(dirname)
 "   call Decho("fname<".fname.">")
 
    " display from treetop on down
-   call s:NetrwTreeDisplay(w:netrw_treetop,"")
+   keepj call s:NetrwTreeDisplay(w:netrw_treetop,"")
 
 "   call Dret("NetrwTreeListing : bufname<".expand("%").">")
+   return
   endif
 endfun
 
@@ -6235,12 +7517,12 @@ fun! s:NetrwWideListing()
    " cpf: characters per filename
    " fpl: filenames per line
    " fpc: filenames per column
-   setlocal ma noro
-"   call Decho("setlocal ma noro")
+   setl ma noro
+"   call Decho("setl ma noro")
    let b:netrw_cpf= 0
    if line("$") >= w:netrw_bannercnt
     exe 'sil keepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
    else
 "    call Dret("NetrwWideListing")
     return
@@ -6257,7 +7539,7 @@ fun! s:NetrwWideListing()
 
    " make wide display
    exe 'sil keepj '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/'
-   call histdel("/",-1)
+   keepj call histdel("/",-1)
    let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
    let newcolstart = w:netrw_bannercnt + fpc
    let newcolend   = newcolstart + fpc - 1
@@ -6275,11 +7557,23 @@ fun! s:NetrwWideListing()
     exe "sil! keepj ".newcolstart.','.newcolend.'d'
     exe 'sil! keepj '.w:netrw_bannercnt
    endwhile
-   silent! let @*= keepregstar
+   sil! let @*= keepregstar
    exe "sil! keepj ".w:netrw_bannercnt.',$s/\s\+$//e'
-   call histdel("/",-1)
-   setlocal noma nomod ro
+   keepj call histdel("/",-1)
+   exe "nmap <buffer> <silent> w       /^\\\\|\\s\\s\\zs\\S/\<cr>"
+   exe "nmap <buffer> <silent> b       ?^\\\\|\\s\\s\\zs\\S?\<cr>"
+"   call Decho("NetrwWideListing) setl noma nomod ro")
+   setl noma nomod ro
+"   call Decho("(NetrwWideListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 "   call Dret("NetrwWideListing")
+   return
+  else
+   if hasmapto("w","n")
+    sil! nunmap <buffer> w
+   endif
+   if hasmapto("b","n")
+    sil! nunmap <buffer> b
+   endif
   endif
 
 endfun
@@ -6289,33 +7583,47 @@ endfun
 fun! s:PerformListing(islocal)
 "  call Dfunc("s:PerformListing(islocal=".a:islocal.") bufnr(%)=".bufnr("%")."<".bufname("%").">")
 
-  call s:NetrwSafeOptions()
-  setlocal noro ma
-"  call Decho("setlocal noro ma")
+  " set up syntax highlighting {{{3
+"  call Decho("(PerformListing) set up syntax highlighting")
+  if has("syntax")
+   if !exists("g:syntax_on") || !g:syntax_on
+"    call Decho("(PerformListing) but g:syntax_on".(exists("g:syntax_on")? "=".g:syntax_on : "<doesn't exist>"))
+    setl ft=
+   elseif &ft != "netrw"
+    setl ft=netrw
+   endif
+  endif
+
+  keepj call s:NetrwSafeOptions()
+  set noro ma
+"  call Decho("(PerformListing) setl noro ma bh=".&bh)
 
 "  if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1      " Decho
-"   call Decho("(netrw) Processing your browsing request...")
+"   call Decho("(PerformListing) (netrw) Processing your browsing request...")
 "  endif                                                               " Decho
 
 "  call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a'))
   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
    " force a refresh for tree listings
-"   call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
+"   call Decho("(PerformListing) force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
    sil! keepj %d
   endif
 
   " save current directory on directory history list
-  call s:NetrwBookHistHandler(3,b:netrw_curdir)
+  keepj call s:NetrwBookHistHandler(3,b:netrw_curdir)
 
   " Set up the banner {{{3
   if g:netrw_banner
-"   call Decho("set up banner")
-   keepj put ='\" ============================================================================'
-   keepj put ='\" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')'
-   keepj put ='\"   '.b:netrw_curdir
-   keepj 1d
+"   call Decho("(PerformListing) set up banner")
+   keepj call setline(1,'" ============================================================================')
+   keepj call setline(2,'" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')')
+   if exists("g:netrw_bannerbackslash") && g:netrw_bannerbackslash
+    keepj call setline(3,'"   '.substitute(b:netrw_curdir,'/','\\','g'))
+   else
+    keepj call setline(3,'"   '.b:netrw_curdir)
+   endif
    let w:netrw_bannercnt= 3
-   exe "sil! keepj ".w:netrw_bannercnt
+   keepj exe "sil! keepj ".w:netrw_bannercnt
   else
    keepj 1
    let w:netrw_bannercnt= 1
@@ -6328,15 +7636,15 @@ fun! s:PerformListing(islocal)
 
   " Sorted by... {{{3
   if g:netrw_banner
-"   call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
+"   call Decho("(PerformListing) handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
    if g:netrw_sort_by =~ "^n"
-"   call Decho("directories will be sorted by name")
+"   call Decho("(PerformListing) directories will be sorted by name")
     " sorted by name
     keepj put ='\"   Sorted by      '.sortby
     keepj put ='\"   Sort sequence: '.g:netrw_sort_sequence
     let w:netrw_bannercnt= w:netrw_bannercnt + 2
    else
-"   call Decho("directories will be sorted by size or time")
+"   call Decho("(PerformListing) directories will be sorted by size or time")
     " sorted by size or date
     keepj put ='\"   Sorted by '.sortby
     let w:netrw_bannercnt= w:netrw_bannercnt + 1
@@ -6347,7 +7655,7 @@ fun! s:PerformListing(islocal)
   " show copy/move target, if any
   if g:netrw_banner
    if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal")
-"    call Decho("show copy/move target<".s:netrwmftgt.">")
+"    call Decho("(PerformListing) show copy/move target<".s:netrwmftgt.">")
     keepj put =''
     if s:netrwmftgt_islocal
      sil! keepj call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (local)')
@@ -6356,14 +7664,14 @@ fun! s:PerformListing(islocal)
     endif
     let w:netrw_bannercnt= w:netrw_bannercnt + 1
    else
-"    call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt")
+"    call Decho("(PerformListing) s:netrwmftgt does not exist, don't make Copy/Move Tgt")
    endif
    exe "sil! keepj ".w:netrw_bannercnt
   endif
 
   " Hiding...  -or-  Showing... {{{3
   if g:netrw_banner
-"   call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
+"   call Decho("(PerformListing) handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
    if g:netrw_list_hide != "" && g:netrw_hide
     if g:netrw_hide == 1
      keepj put ='\"   Hiding:        '.g:netrw_list_hide
@@ -6382,43 +7690,38 @@ fun! s:PerformListing(islocal)
   if g:netrw_banner
    let w:netrw_bannercnt= w:netrw_bannercnt + 1
    exe "sil! keepj ".w:netrw_bannercnt
-"   call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
-  endif
-
-  " set up syntax highlighting {{{3
-"  call Decho("set up syntax highlighting")
-  if has("syntax")
-   setf netrw
-   if !exists("g:syntax_on") || !g:syntax_on
-    setlocal ft=
-   endif
+"   call Decho("(PerformListing) w:netrw_bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
   endif
 
   " get list of files
-"  call Decho("Get list of files - islocal=".a:islocal)
+"  call Decho("(PerformListing) Get list of files - islocal=".a:islocal)
   if a:islocal
-   call s:LocalListing()
+   keepj call s:LocalListing()
   else " remote
-   call s:NetrwRemoteListing()
+   keepj call s:NetrwRemoteListing()
   endif
-"  call Decho("g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
 
   " manipulate the directory listing (hide, sort) {{{3
+  if !exists("w:netrw_bannercnt")
+   let w:netrw_bannercnt= 0
+  endif
+"  call Decho("(PerformListing) g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
+
   if !g:netrw_banner || line("$") >= w:netrw_bannercnt
-"   call Decho("manipulate directory listing (hide)")
-"   call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
+"   call Decho("(PerformListing) manipulate directory listing (hide)")
+"   call Decho("(PerformListing) g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
    if g:netrw_hide && g:netrw_list_hide != ""
-    call s:NetrwListHide()
+    keepj call s:NetrwListHide()
    endif
    if !g:netrw_banner || line("$") >= w:netrw_bannercnt
-"    call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
+"    call Decho("(PerformListing) manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
 
     if g:netrw_sort_by =~ "^n"
      " sort by name
-     call s:NetrwSetSort()
+     keepj call s:NetrwSetSort()
 
      if !g:netrw_banner || w:netrw_bannercnt < line("$")
-"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
+"      call Decho("(PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
       if g:netrw_sort_direction =~ 'n'
        " normal direction sorting
        exe 'sil keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
@@ -6428,22 +7731,22 @@ fun! s:PerformListing(islocal)
       endif
      endif
      " remove priority pattern prefix
-"     call Decho("remove priority pattern prefix")
+"     call Decho("(PerformListing) remove priority pattern prefix")
      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e'
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
 
     elseif a:islocal
      if !g:netrw_banner || w:netrw_bannercnt < line("$")
-"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction)
+"      call Decho("(PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction)
       if g:netrw_sort_direction =~ 'n'
-"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort')
+"       call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort')
        exe 'sil! keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
       else
-"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!')
+"       call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort!')
        exe 'sil! keepj '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
       endif
      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
      endif
     endif
 
@@ -6457,31 +7760,35 @@ fun! s:PerformListing(islocal)
   endif
 
   " convert to wide/tree listing {{{3
-"  call Decho("modify display if wide/tree listing style")
-  call s:NetrwWideListing()
-  call s:NetrwTreeListing(b:netrw_curdir)
+"  call Decho("(PerformListing) modify display if wide/tree listing style")
+  keepj call s:NetrwWideListing()
+  keepj call s:NetrwTreeListing(b:netrw_curdir)
 
   if exists("w:netrw_bannercnt") && (line("$") > w:netrw_bannercnt || !g:netrw_banner)
    " place cursor on the top-left corner of the file listing
-"   call Decho("place cursor on top-left corner of file listing")
+"   call Decho("(PerformListing) place cursor on top-left corner of file listing")
    exe 'sil! keepj '.w:netrw_bannercnt
    sil! keepj norm! 0
   endif
 
   " record previous current directory
   let w:netrw_prvdir= b:netrw_curdir
-"  call Decho("record netrw_prvdir<".w:netrw_prvdir.">")
+"  call Decho("(PerformListing) record netrw_prvdir<".w:netrw_prvdir.">")
 
   " save certain window-oriented variables into buffer-oriented variables {{{3
-  call s:SetBufWinVars()
-  call s:NetrwOptionRestore("w:")
+  keepj call s:SetBufWinVars()
+  keepj call s:NetrwOptionRestore("w:")
 
   " set display to netrw display settings
-"  call Decho("set display to netrw display settings (noma nomod etc)")
+"  call Decho("(PerformListing) set display to netrw display settings (".g:netrw_bufsettings.")")
   exe "setl ".g:netrw_bufsettings
+  if g:netrw_liststyle == s:LONGLIST
+"   call Decho("(PerformListing) exe setl ts=".(g:netrw_maxfilenamelen+1))
+   exe "setl ts=".(g:netrw_maxfilenamelen+1)
+  endif
   if exists("s:treecurpos")
 
-   call netrw#NetrwRestorePosn(s:treecurpos)
+   keepj call netrw#NetrwRestorePosn(s:treecurpos)
    unlet s:treecurpos
   endif
 
@@ -6524,7 +7831,7 @@ fun! s:SetupNetrwStatusLine(statline)
   " insure that windows have a statusline
   " make sure statusline is displayed
   let &stl=a:statline
-  setlocal laststatus=2
+  setl laststatus=2
 "  call Decho("stl=".&stl)
   redraw
 
@@ -6541,10 +7848,18 @@ fun! s:NetrwRemoteListing()
 "  call Dfunc("s:NetrwRemoteListing() b:netrw_curdir<".b:netrw_curdir.">)")
 
   call s:RemotePathAnalysis(b:netrw_curdir)
+"  call Decho("b:netrw_method#".(exists("b:netrw_method")? b:netrw_method : 'n/a'))
+"  call Decho("g:netrw_list_cmd<".(exists("g:netrw_list_cmd")? g:netrw_list_cmd : 'n/a').">")
+"  call Decho("ssh  is ".(executable("ssh")?  "" : "not ")."executable")
+"  call Decho("ftp  is ".(executable("ftp")?  "" : "not ")."executable")
+"  call Decho("sftp is ".(executable("sftp")? "" : "not ")."executable")
 
   " sanity check:
   if exists("b:netrw_method") && b:netrw_method =~ '[235]'
-"   call Decho("b:netrw_method=".b:netrw_method)
+   " b:netrw_method = 2: ftp+.netrc
+   " b:netrw_method = 3: ftp+machine,id,p/w,filename (ie. no .netrc)
+   " b:netrw_method = 5: wget (http)
+"   call Decho("b:netrw_method=".b:netrw_method." (for ".s:method.")")
    if !executable("ftp")
     if !exists("g:netrw_quiet")
      call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ftp",18)
@@ -6554,30 +7869,31 @@ fun! s:NetrwRemoteListing()
     return
    endif
 
-  elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
+  elseif s:method == "scp" && (!exists("g:netrw_list_cmd") || g:netrw_list_cmd == '')
+"   call Decho("g:netrw_list_cmd<".(exists("g:netrw_list_cmd")? g:netrw_list_cmd : 'n/a').">")
    if !exists("g:netrw_quiet")
-    if g:netrw_list_cmd == ""
-     call netrw#ErrorMsg(s:ERROR,g:netrw_ssh_cmd." is not executable on your system",47)
+    if !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ""
+     keepj call netrw#ErrorMsg(s:ERROR,"neither ssh nor ftp"." is executable on your system",47)
     else
-     call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19)
+     keepj call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19)
     endif
    endif
 
-   call s:NetrwOptionRestore("w:")
+   keepj call s:NetrwOptionRestore("w:")
 "   call Dret("s:NetrwRemoteListing")
    return
   endif  " (remote handling sanity check)
 
   if exists("b:netrw_method")
-"   call Decho("setting w:netrw_method<".b:netrw_method.">")
+"   call Decho("setting w:netrw_method to b:netrw_method<".b:netrw_method.">")
    let w:netrw_method= b:netrw_method
   endif
 
   if s:method == "ftp"
-   " use ftp to get remote file listing
+   " use ftp to get remote file listing {{{3
 "   call Decho("use ftp to get remote file listing")
-   let s:method  = "ftp"
-   let listcmd = g:netrw_ftp_list_cmd
+   let s:method = "ftp"
+   let listcmd  = g:netrw_ftp_list_cmd
    if g:netrw_sort_by =~ '^t'
     let listcmd= g:netrw_ftp_timelist_cmd
    elseif g:netrw_sort_by =~ '^s'
@@ -6595,19 +7911,19 @@ fun! s:NetrwRemoteListing()
     " cleanup
     if g:netrw_ftp_browse_reject != ""
      exe "sil! keepalt keepj g/".g:netrw_ftp_browse_reject."/keepj d"
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
     endif
     sil! keepj %s/\r$//e
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
 
-    " if there's no ../ listed, then put ./ and ../ in
+    " if there's no ../ listed, then put ../ in
     let line1= line(".")
     exe "sil! keepj ".w:netrw_bannercnt
-    let line2= search('^\.\.\/\%(\s\|$\)','cnW')
+    let line2= search('\.\.\/\%(\s\|$\)','cnW')
+"    call Decho("search(".'\.\.\/\%(\s\|$\)'."','cnW')=".line2."  w:netrw_bannercnt=".w:netrw_bannercnt)
     if line2 == 0
-"     call Decho("netrw is putting ./ and ../ into listing")
+"     call Decho("netrw is putting ../ into listing")
      sil! keepj put='../'
-     sil! keepj put='./'
     endif
     exe "sil! keepj ".line1
     sil! keepj norm! 0
@@ -6616,15 +7932,15 @@ fun! s:NetrwRemoteListing()
     if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
 "     call Decho("M$ ftp cleanup")
      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+//'
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
     else " normal ftp cleanup
 "     call Decho("normal ftp cleanup")
      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
      exe "sil! keepj ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
      exe "sil! keepj ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
-     call histdel("/",-1)
-     call histdel("/",-1)
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
+     keepj call histdel("/",-1)
+     keepj call histdel("/",-1)
     endif
    endif
 
@@ -6634,35 +7950,35 @@ fun! s:NetrwRemoteListing()
    let listcmd= s:MakeSshCmd(g:netrw_list_cmd)
 "   call Decho("listcmd<".listcmd."> (using g:netrw_list_cmd)")
    if g:netrw_scp_cmd =~ '^pscp'
-"    call Decho("1: exe silent r! ".shellescape(listcmd.s:path, 1))
+"    call Decho("1: exe sil r! ".shellescape(listcmd.s:path, 1))
     exe "sil! keepj r! ".listcmd.shellescape(s:path, 1)
     " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like
     sil! keepj g/^Listing directory/keepj d
     sil! keepj g/^d[-rwx][-rwx][-rwx]/keepj s+$+/+e
     sil! keepj g/^l[-rwx][-rwx][-rwx]/keepj s+$+@+e
-    call histdel("/",-1)
-    call histdel("/",-1)
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
+    keepj call histdel("/",-1)
+    keepj call histdel("/",-1)
     if g:netrw_liststyle != s:LONGLIST
      sil! keepj g/^[dlsp-][-rwx][-rwx][-rwx]/keepj s/^.*\s\(\S\+\)$/\1/e
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
     endif
    else
     if s:path == ""
-"     call Decho("2: exe silent r! ".listcmd)
-     exe "sil! keepalt r! ".listcmd
+"     call Decho("2: exe sil r! ".listcmd)
+     exe "sil! keepj keepalt r! ".listcmd
     else
-"     call Decho("3: exe silent r! ".listcmd.' '.shellescape(s:path,1))
-     exe "sil! keepalt r! ".listcmd.' '.shellescape(s:path,1)
+"     call Decho("3: exe sil r! ".listcmd.' '.shellescape(fnameescape(s:path),1))
+     exe "sil! keepj keepalt r! ".listcmd.' '.shellescape(fnameescape(s:path),1)
 "     call Decho("listcmd<".listcmd."> path<".s:path.">")
     endif
    endif
 
    " cleanup
    if g:netrw_ftp_browse_reject != ""
-"    call Decho("(cleanup) exe silent! g/".g:netrw_ssh_browse_reject."/keepjumps d")
+"    call Decho("(cleanup) exe sil! g/".g:netrw_ssh_browse_reject."/keepjumps d")
     exe "sil! g/".g:netrw_ssh_browse_reject."/keepj d"
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
    endif
   endif
 
@@ -6676,13 +7992,12 @@ fun! s:NetrwRemoteListing()
     while getline('.') =~ g:netrw_ftp_browse_reject
      sil! keepj d
     endwhile
-    " if there's no ../ listed, then put ./ and ../ in
+    " if there's no ../ listed, then put ../ in
     let line1= line(".")
     sil! keepj 1
     sil! keepj call search('^\.\.\/\%(\s\|$\)','W')
     let line2= line(".")
     if line2 == 0
-     exe 'sil! keepj '.w:netrw_bannercnt."put='./'"
      if b:netrw_curdir != '/'
       exe 'sil! keepj '.w:netrw_bannercnt."put='../'"
      endif
@@ -6699,9 +8014,9 @@ fun! s:NetrwRemoteListing()
     exe 'sil keepj '.w:netrw_bannercnt.',$s/ -> .*$//e'
     exe 'sil keepj '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
     exe 'sil keepj '.w:netrw_bannercnt
-    call histdel("/",-1)
-    call histdel("/",-1)
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
+    keepj call histdel("/",-1)
+    keepj call histdel("/",-1)
    endif
   endif
 
@@ -6741,7 +8056,7 @@ fun! s:NetrwRemoteRm(usrhost,path) range
 
    " remove multiple files and directories
    while ctr <= a:lastline
-    exe ctr
+    exe "keepj ".ctr
     let ok= s:NetrwRemoteRmFile(a:path,s:NetrwGetWord(),all)
     if ok =~ 'q\%[uit]'
      break
@@ -6754,8 +8069,8 @@ fun! s:NetrwRemoteRm(usrhost,path) range
 
   " refresh the (remote) directory listing
 "  call Decho("refresh remote directory listing")
-  call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
 
 "  call Dret("s:NetrwRemoteRm")
 endfun
@@ -6802,7 +8117,7 @@ fun! s:NetrwRemoteRmFile(path,rmfile,all)
      let netrw_rm_cmd= s:MakeSshCmd(g:netrw_rm_cmd)
 "     call Decho("netrw_rm_cmd<".netrw_rm_cmd.">")
      if !exists("b:netrw_curdir")
-      call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
+      keepj call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
       let ok="q"
      else
       let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
@@ -6817,14 +8132,13 @@ fun! s:NetrwRemoteRmFile(path,rmfile,all)
 "      call Decho("call system(".netrw_rm_cmd.")")
       let ret= system(netrw_rm_cmd)
       if ret != 0
-       call netrw#ErrorMsg(s:WARNING,"cmd<".netrw_rm_cmd."> failed",60)
+       keepj call netrw#ErrorMsg(s:WARNING,"cmd<".netrw_rm_cmd."> failed",60)
       endif
 "      call Decho("returned=".ret." errcode=".v:shell_error)
      endif
     endif
    elseif ok =~ 'q\%[uit]'
 "    call Decho("ok==".ok)
-    break
    endif
 
   else
@@ -6845,7 +8159,7 @@ fun! s:NetrwRemoteRmFile(path,rmfile,all)
 
    if all || ok =~ 'y\%[es]' || ok == ""
     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-     call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile)
+     keepj call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile)
     else
      let rmfile          = substitute(a:path.a:rmfile,'/$','','')
      let netrw_rmdir_cmd = s:MakeSshCmd(netrw#WinPath(g:netrw_rmdir_cmd)).' '.shellescape(netrw#WinPath(rmfile))
@@ -6861,13 +8175,13 @@ fun! s:NetrwRemoteRmFile(path,rmfile,all)
 "      call Decho("returned=".ret." errcode=".v:shell_error)
 
       if v:shell_error != 0 && !exists("g:netrw_quiet")
-       call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22)
+       keepj call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22)
       endif
      endif
     endif
 
    elseif ok =~ 'q\%[uit]'
-    break
+"    call Decho("ok==".ok)
    endif
   endif
 
@@ -6881,18 +8195,27 @@ endfun
 "  and reverse sorts will be requested of the server but not otherwise
 "  enforced here.
 fun! s:NetrwRemoteFtpCmd(path,listcmd)
-"  call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) netrw_method=".w:netrw_method)
-"  call Decho("line($)=".line("$")." bannercnt=".w:netrw_bannercnt)
+"  call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) w:netrw_method=".(exists("w:netrw_method")? w:netrw_method : (exists("b:netrw_method")? b:netrw_method : "???")))
+"  call Decho("line($)=".line("$")." w:netrw_bannercnt=".w:netrw_bannercnt)
+  if !exists("w:netrw_method")
+   if exists("b:netrw_method")
+    let w:netrw_method= b:netrw_method
+   else
+    call netrw#ErrorMsg(2,"(s:NetrwRemoteFtpCmd) internal netrw error",93)
+"    call Dret("NetrwRemoteFtpCmd")
+    return
+   endif
+  endif
 
   " because WinXX ftp uses unix style input
   let ffkeep= &ff
-  setlocal ma ff=unix noro
-"  call Decho("setlocal ma ff=unix noro")
+  setl ma ff=unix noro
+"  call Decho("setl ma ff=unix noro")
 
   " clear off any older non-banner lines
   " note that w:netrw_bannercnt indexes the line after the banner
-"  call Decho('exe silent! keepjumps '.w:netrw_bannercnt.",$d  (clear off old non-banner lines)")
-  exe "silent! keepjumps ".w:netrw_bannercnt.",$d"
+"  call Decho('exe sil! keepjumps '.w:netrw_bannercnt.",$d  (clear off old non-banner lines)")
+  exe "sil! keepjumps ".w:netrw_bannercnt.",$d"
 
   ".........................................
   if w:netrw_method == 2 || w:netrw_method == 5
@@ -6904,31 +8227,41 @@ fun! s:NetrwRemoteFtpCmd(path,listcmd)
     keepj put =g:netrw_ftpextracmd
 "    call Decho("filter input: ".getline('.'))
    endif
-   call setline(line("$")+1,a:listcmd)
+   keepj call setline(line("$")+1,a:listcmd)
 "   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
    if exists("g:netrw_port") && g:netrw_port != ""
-"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
-    exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+    exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
    else
-"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-    exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+    exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
    endif
 
    ".........................................
   elseif w:netrw_method == 3
    " ftp + machine,id,passwd,filename:  Method #3
-    setlocal ff=unix
+    setl ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
     else
      keepj put ='open '.g:netrw_machine
     endif
 
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     keepj put =g:netrw_uid
-     keepj put ='\"'.s:netrw_passwd.'\"'
-    else
-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+    " handle userid and password
+    let host= substitute(g:netrw_machine,'\..*$','','')
+"    call Decho("host<".host.">")
+    if exists("s:netrw_hup") && exists("s:netrw_hup[host]")
+     call NetUserPass("ftp:".host)
+    endif
+    if exists("g:netrw_uid") && g:netrw_uid != ""
+     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+      keepj put =g:netrw_uid
+      if exists("s:netrw_passwd") && s:netrw_passwd != ""
+       keepj put ='\"'.s:netrw_passwd.'\"'
+      endif
+     elseif exists("s:netrw_passwd")
+      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+     endif
     endif
 
    if a:path != ""
@@ -6945,28 +8278,28 @@ fun! s:NetrwRemoteFtpCmd(path,listcmd)
     " -n  unix : DON'T use <.netrc>, even though it exists
     " -n  win32: quit being obnoxious about password
 "    exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
-"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n")
-    exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n"
+"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+    exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
 
    ".........................................
   else
-   call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23)
+   keepj call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23)
   endif
 
   " cleanup for Windows
   if has("win32") || has("win95") || has("win64") || has("win16")
    sil! keepj %s/\r$//e
-   call histdel("/",-1)
+   keepj call histdel("/",-1)
   endif
   if a:listcmd == "dir"
    " infer directory/link based on the file permission string
    sil! keepj g/d\%([-r][-w][-x]\)\{3}/keepj s@$@/@
    sil! keepj g/l\%([-r][-w][-x]\)\{3}/keepj s/$/@/
-   call histdel("/",-1)
-   call histdel("/",-1)
+   keepj call histdel("/",-1)
+   keepj call histdel("/",-1)
    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
     exe "sil! keepj ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e'
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
    endif
   endif
 
@@ -7015,7 +8348,7 @@ fun! s:NetrwRemoteRename(usrhost,path) range
     endif
    
     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-     call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
+     keepj call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
     else
      let oldname= shellescape(a:path.oldname)
      let newname= shellescape(a:path.newname)
@@ -7053,17 +8386,67 @@ fun! s:NetrwRemoteRename(usrhost,path) range
   endif
 
   " refresh the directory
-  call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
 
 "  call Dret("NetrwRemoteRename")
 endfun
 
 " ---------------------------------------------------------------------
-"  Local Directory Browsing Support:    {{{1
-" ==========================================
-
-" ---------------------------------------------------------------------
+"  Local Directory Browsing Support:    {{{1
+" ==========================================
+
+" ---------------------------------------------------------------------
+" netrw#FileUrlRead: handles reading file://* files {{{2
+"   Should accept:   file://localhost/etc/fstab
+"                    file:///etc/fstab
+"                    file:///c:/WINDOWS/clock.avi
+"                    file:///c|/WINDOWS/clock.avi
+"                    file://localhost/c:/WINDOWS/clock.avi
+"                    file://localhost/c|/WINDOWS/clock.avi
+"                    file://c:/foo.txt
+"                    file:///c:/foo.txt
+" and %XX (where X is [0-9a-fA-F] is converted into a character with the given hexadecimal value
+fun! netrw#FileUrlRead(fname)
+"  call Dfunc("netrw#FileUrlRead(fname<".a:fname.">)")
+  let fname = a:fname
+  if fname =~ '^file://localhost/'
+"   call Decho('converting file://localhost/   -to-  file:///')
+   let fname= substitute(fname,'^file://localhost/','file:///','')
+"   call Decho("fname<".fname.">")
+  endif
+  if (has("win32") || has("win95") || has("win64") || has("win16"))
+   if fname  =~ '^file:///\=\a[|:]/'
+"    call Decho('converting file:///\a|/   -to-  file://\a:/')
+    let fname = substitute(fname,'^file:///\=\(\a\)[|:]/','file://\1:/','')
+"    call Decho("fname<".fname.">")
+   endif
+  endif
+  let fname2396 = netrw#RFC2396(fname)
+  let fname2396e= fnameescape(fname2396)
+  let plainfname= substitute(fname2396,'file://\(.*\)','\1',"")
+  if (has("win32") || has("win95") || has("win64") || has("win16"))
+"   call Decho("windows exception for plainfname")
+   if plainfname =~ '^/\+\a:'
+"    call Decho('removing leading "/"s')
+    let plainfname= substitute(plainfname,'^/\+\(\a:\)','\1','')
+   endif
+  endif
+"  call Decho("fname2396<".fname2396.">")
+"  call Decho("plainfname<".plainfname.">")
+  exe "sil doau BufReadPre ".fname2396e
+  exe 'keepj r '.plainfname
+  exe 'sil! bdelete '.plainfname
+  exe 'keepalt file! '.plainfname
+  keepj 1d
+"  call Decho("(FileUrlRead) setl nomod")
+  setl nomod
+"  call Decho("(FileUrlRead) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"  call Dret("netrw#FileUrlRead")
+  exe "sil doau BufReadPost ".fname2396e
+endfun
+
+" ---------------------------------------------------------------------
 " netrw#LocalBrowseCheck: {{{2
 fun! netrw#LocalBrowseCheck(dirname)
   " unfortunate interaction -- split window debugging can't be
@@ -7073,18 +8456,38 @@ fun! netrw#LocalBrowseCheck(dirname)
   " The &ft == "netrw" test was installed because the BufEnter event
   " would hit when re-entering netrw windows, creating unexpected
   " refreshes (and would do so in the middle of NetrwSaveOptions(), too)
-"  call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : "")))
+"  call Decho("(LocalBrowseCheck) isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : "")))
+"  call Dredir("LocalBrowseCheck","ls!")|redraw!|sleep 3
+  let ykeep= @@
   if isdirectory(a:dirname)
-"   call Decho(" ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$"))
-   if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname)
-    silent! call s:NetrwBrowse(1,a:dirname)
+"   call Decho("(LocalBrowseCheck) is-directory ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")." ft<".&ft."> g:netrw_fastbrowse=".g:netrw_fastbrowse)
+   let svposn= netrw#NetrwSavePosn()
+   if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname) || g:netrw_fastbrowse <= 1
+    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
+    keepalt call netrw#NetrwRestorePosn(svposn)
    elseif &ft == "netrw" && line("$") == 1
-    silent! call s:NetrwBrowse(1,a:dirname)
+    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
+    keepalt call netrw#NetrwRestorePosn(svposn)
    elseif exists("s:treeforceredraw")
     unlet s:treeforceredraw
-    silent! call s:NetrwBrowse(1,a:dirname)
+    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
+    keepalt call netrw#NetrwRestorePosn(svposn)
    endif
   endif
+  " following code wipes out currently unused netrw buffers
+  "       IF g:netrw_fastbrowse is zero (ie. slow browsing selected)
+  "   AND IF the listing style is not a tree listing
+  if exists("g:netrw_fastbrowse") && g:netrw_fastbrowse == 0 && g:netrw_liststyle != s:TREELIST
+   let ibuf    = 1
+   let buflast = bufnr("$")
+   while ibuf <= buflast
+    if bufwinnr(ibuf) == -1 && isdirectory(bufname(ibuf))
+     exe "sil! keepalt ".ibuf."bw!"
+    endif
+    let ibuf= ibuf + 1
+   endwhile
+  endif
+  let @@= ykeep
   " not a directory, ignore it
 endfun
 
@@ -7092,101 +8495,68 @@ endfun
 "  s:LocalListing: does the job of "ls" for local directories {{{2
 fun! s:LocalListing()
 "  call Dfunc("s:LocalListing()")
-"  call Decho("&ma=".&ma)
-"  call Decho("&mod=".&mod)
-"  call Decho("&ro=".&ro)
-"  call Decho("bufname(%)<".bufname("%").">")
+"  call Decho("(LocalListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"  call Decho("(LocalListing) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 
-"  if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("b:netrw_curdir doesn't exist") |endif
-"  if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif
+"  if exists("b:netrw_curdir") |call Decho('(LocalListing) b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("(LocalListing) b:netrw_curdir doesn't exist") |endif
+"  if exists("g:netrw_sort_by")|call Decho('(LocalListing) g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("(LocalListing) g:netrw_sort_by doesn't exist")|endif
 
   " get the list of files contained in the current directory
-  let dirname    = escape(b:netrw_curdir,g:netrw_glob_escape)
+  let dirname    = b:netrw_curdir
   let dirnamelen = s:Strlen(b:netrw_curdir)
-  let filelist   = glob(s:ComposePath(dirname,"*"))
-"  call Decho("glob(dirname<".dirname."/*>)=".filelist)
-  if filelist != ""
-   let filelist= filelist."\n"
-  endif
-  let filelist= filelist.glob(s:ComposePath(dirname,".*"))
-"  call Decho("glob(dirname<".dirname."/.*>)=".filelist)
-
-  " Coding choice: either   elide   ./ if present
-  "                or       include ./ if not present
-  if filelist =~ '[\\/]\.[\\/]\=\(\n\|$\)'
-   " elide /path/. from glob() entries if present
-"   call Decho("elide /path/. from glob entries if present")
-   let filelist = substitute(filelist,'\n','\t','g')
-   let filelist = substitute(filelist,'^[^\t]\+[/\\]\.\t','','')
-   let filelist = substitute(filelist,'[^\t]\+[/\\]\.$','','')
-   let filelist = substitute(filelist,'\t\zs[^\t]\+[/\\]\.\t','','')
-   let filelist = substitute(filelist,'\t','\n','g')
-  endif
-"  call Decho("filelist<".filelist.">")
-  if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
+  let filelist   = glob(s:ComposePath(dirname,"*"),0,1)
+  let filelist   = filelist + glob(s:ComposePath(dirname,".*"),0,1)
+"  call Decho("(LocalListing) filelist=".filelist)
+
+  if g:netrw_cygwin == 0 && (has("win32") || has("win95") || has("win64") || has("win16"))
+"   call Decho("(LocalListing) filelist=".string(filelist))
+  elseif index(filelist,'..') == -1 && b:netrw_curdir !~ '/'
     " include ../ in the glob() entry if its missing
-"   call Decho("forcibly tacking on ..")
-   let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"../")
-"   call Decho("filelist<".filelist.">")
-  endif
-  if b:netrw_curdir == '/'
-   " remove .. from filelist when current directory is root directory
-"   call Decho("remove .. from filelist")
-   let filelist= substitute(filelist,'/\.\.\n','','')
-  endif
-  " remove multiple contiguous newlines
-  let filelist= substitute(filelist,'\n\{2,}','\n','ge')
-  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
-   " change all \s to /s
-"   call Decho('change all \s to /s')
-   let filelist= substitute(filelist,'\','/','g')
-  else
-   " escape all \s to \\
-"   call Decho('escape all \s to \\')
-   let filelist= substitute(filelist,'\','\\','g')
+"   call Decho("(LocalListing) forcibly including on \"..\"")
+   let filelist= filelist+[s:ComposePath(b:netrw_curdir,"../")]
+"   call Decho("(LocalListing) filelist=".string(filelist))
   endif
 
-"  call Decho("(before while) dirname<".dirname.">")
-"  call Decho("(before while) dirnamelen<".dirnamelen.">")
-"  call Decho("(before while) filelist<".filelist.">")
+"  call Decho("(LocalListing) (before while) dirname<".dirname.">")
+"  call Decho("(LocalListing) (before while) dirnamelen<".dirnamelen.">")
+"  call Decho("(LocalListing) (before while) filelist=".string(filelist))
 
-  while filelist != ""
-   if filelist =~ '\n'
-    let filename = substitute(filelist,'\n.*$','','e')
-    let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
-   else
-    let filename = filelist
-    let filelist = ""
-   endif
-"   call Decho(" ")
-"   call Decho("(while) filelist<".filelist.">")
-"   call Decho("(while) filename<".filename.">")
+  if get(g:, 'netrw_dynamic_maxfilenamelen', 0)
+   let filelistcopy           = map(deepcopy(filelist),'fnamemodify(v:val, ":t")')
+   let g:netrw_maxfilenamelen = max(map(filelistcopy,'len(v:val)')) + 1
+"   call Decho("(LocalListing) dynamic_maxfilenamelen: filenames             =".string(filelistcopy))
+"   call Decho("(LocalListing) dynamic_maxfilenamelen: g:netrw_maxfilenamelen=".g:netrw_maxfilenamelen)
+  endif
+
+  for filename in filelist
+"   call Decho("(LocalListing)  ")
+"   call Decho("(LocalListing) (while) filename<".filename.">")
 
    if getftype(filename) == "link"
     " indicate a symbolic link
-"    call Decho("indicate <".filename."> is a symbolic link with trailing @")
+"    call Decho("(LocalListing) indicate <".filename."> is a symbolic link with trailing @")
     let pfile= filename."@"
 
    elseif getftype(filename) == "socket"
     " indicate a socket
-"    call Decho("indicate <".filename."> is a socket with trailing =")
+"    call Decho("(LocalListing) indicate <".filename."> is a socket with trailing =")
     let pfile= filename."="
 
    elseif getftype(filename) == "fifo"
     " indicate a fifo
-"    call Decho("indicate <".filename."> is a fifo with trailing |")
+"    call Decho("(LocalListing) indicate <".filename."> is a fifo with trailing |")
     let pfile= filename."|"
 
    elseif isdirectory(filename)
     " indicate a directory
-"    call Decho("indicate <".filename."> is a directory with trailing /")
+"    call Decho("(LocalListing) indicate <".filename."> is a directory with trailing /")
     let pfile= filename."/"
 
    elseif exists("b:netrw_curdir") && b:netrw_curdir !~ '^.*://' && !isdirectory(filename)
     if (has("win32") || has("win95") || has("win64") || has("win16"))
      if filename =~ '\.[eE][xX][eE]$' || filename =~ '\.[cC][oO][mM]$' || filename =~ '\.[bB][aA][tT]$'
       " indicate an executable
-"      call Decho("indicate <".filename."> is executable with trailing *")
+"      call Decho("(LocalListing) indicate <".filename."> is executable with trailing *")
       let pfile= filename."*"
      else
       " normal file
@@ -7194,7 +8564,7 @@ fun! s:LocalListing()
      endif
     elseif executable(filename)
      " indicate an executable
-"     call Decho("indicate <".filename."> is executable with trailing *")
+"     call Decho("(LocalListing) indicate <".filename."> is executable with trailing *")
      let pfile= filename."*"
     else
      " normal file
@@ -7205,55 +8575,55 @@ fun! s:LocalListing()
     " normal file
     let pfile= filename
    endif
-"   call Decho("pfile<".pfile."> (after *@/ appending)")
+"   call Decho("(LocalListing) pfile<".pfile."> (after *@/ appending)")
 
    if pfile =~ '//$'
     let pfile= substitute(pfile,'//$','/','e')
-"    call Decho("change // to /: pfile<".pfile.">")
+"    call Decho("(LocalListing) change // to /: pfile<".pfile.">")
    endif
    let pfile= strpart(pfile,dirnamelen)
    let pfile= substitute(pfile,'^[/\\]','','e')
-"   call Decho("filename<".filename.">")
-"   call Decho("pfile   <".pfile.">")
+"   call Decho("(LocalListing) filename<".filename.">")
+"   call Decho("(LocalListing) pfile   <".pfile.">")
 
    if w:netrw_liststyle == s:LONGLIST
     let sz   = getfsize(filename)
     let fsz  = strpart("               ",1,15-strlen(sz)).sz
     let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
-"    call Decho("sz=".sz." fsz=".fsz)
+"    call Decho("(LocalListing) sz=".sz." fsz=".fsz)
    endif
 
    if     g:netrw_sort_by =~ "^t"
     " sort by time (handles time up to 1 quintillion seconds, US)
-"    call Decho("getftime(".filename.")=".getftime(filename))
+"    call Decho("(LocalListing) getftime(".filename.")=".getftime(filename))
     let t  = getftime(filename)
     let ft = strpart("000000000000000000",1,18-strlen(t)).t
-"    call Decho("exe keepjumps put ='".ft.'/'.filename."'")
+"    call Decho("(LocalListing) exe keepjumps put ='".ft.'/'.filename."'")
     let ftpfile= ft.'/'.pfile
     sil! keepj put=ftpfile
 
    elseif g:netrw_sort_by =~ "^s"
     " sort by size (handles file sizes up to 1 quintillion bytes, US)
-"    call Decho("getfsize(".filename.")=".getfsize(filename))
+"    call Decho("(LocalListing) getfsize(".filename.")=".getfsize(filename))
     let sz   = getfsize(filename)
     let fsz  = strpart("000000000000000000",1,18-strlen(sz)).sz
-"    call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
+"    call Decho("(LocalListing) exe keepj put ='".fsz.'/'.filename."'")
     let fszpfile= fsz.'/'.pfile
     sil! keepj put =fszpfile
 
    else
     " sort by name
-"    call Decho("exe keepjumps put ='".pfile."'")
+"    call Decho("(LocalListing) exe keepjumps put ='".pfile."'")
     sil! keepj put=pfile
    endif
-  endwhile
+  endfor
 
   " cleanup any windows mess at end-of-line
   sil! keepj g/^$/d
   sil! keepj %s/\r$//e
   call histdel("/",-1)
-  exe "setlocal ts=".g:netrw_maxfilenamelen
-"  call Decho("setlocal ts=".g:netrw_maxfilenamelen)
+"  call Decho("(LocalListing) exe setl ts=".(g:netrw_maxfilenamelen+1))
+  exe "setl ts=".(g:netrw_maxfilenamelen+1)
 
 "  call Dret("s:LocalListing")
 endfun
@@ -7284,47 +8654,214 @@ fun! s:LocalBrowseShellCmdRefresh()
   endif
   let itab       = 1
   let buftablist = []
+  let ykeep      = @@
   while itab <= tabpagenr("$")
    let buftablist = buftablist + tabpagebuflist()
    let itab       = itab + 1
    tabn
   endwhile
-"  call Decho("buftablist".string(buftablist))
-"  call Decho("s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">")
+"  call Decho("(LocalBrowseShellCmdRefresh) buftablist".string(buftablist))
+"  call Decho("(LocalBrowseShellCmdRefresh) s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">")
   "  GO through all buffers on netrw_browselist (ie. just local-netrw buffers):
   "   | refresh any netrw window
   "   | wipe out any non-displaying netrw buffer
   let curwin = winnr()
   let ibl    = 0
   for ibuf in s:netrw_browselist
-"   call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
+"   call Decho("(LocalBrowseShellCmdRefresh) bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
    if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1
     " wipe out any non-displaying netrw buffer
-"    call Decho("wiping  buf#".ibuf,"<".bufname(ibuf).">")
+"    call Decho("(LocalBrowseShellCmdRefresh) wiping  buf#".ibuf,"<".bufname(ibuf).">")
     exe "sil! bd ".fnameescape(ibuf)
     call remove(s:netrw_browselist,ibl)
-"    call Decho("browselist=".string(s:netrw_browselist))
+"    call Decho("(LocalBrowseShellCmdRefresh) browselist=".string(s:netrw_browselist))
     continue
    elseif index(tabpagebuflist(),ibuf) != -1
     " refresh any netrw buffer
-"    call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
+"    call Decho("(LocalBrowseShellCmdRefresh) refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
     exe bufwinnr(ibuf)."wincmd w"
-    call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+    keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
    endif
    let ibl= ibl + 1
   endfor
   exe curwin."wincmd w"
+  let @@= ykeep
 
 "  call Dret("LocalBrowseShellCmdRefresh")
 endfun
 
 " ---------------------------------------------------------------------
+" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2
+"
+"     g:netrw_    Directory Is
+"     fastbrowse  Local  Remote   
+"  slow   0         D      D      D=Deleting a buffer implies it will not be re-used (slow)
+"  med    1         D      H      H=Hiding a buffer implies it may be re-used        (fast)
+"  fast   2         H      H      
+"
+"  Deleting a buffer means that it will be re-loaded when examined, hence "slow".
+"  Hiding   a buffer means that it will be re-used   when examined, hence "fast".
+"           (re-using a buffer may not be as accurate)
+fun! s:LocalFastBrowser()
+"    call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse."  s:netrw_browser_shellcmd ".(exists("s:netrw_browser_shellcmd")? "exists" : "does not exist"))
+
+  " initialize browselist, a list of buffer numbers that the local browser has used
+  if !exists("s:netrw_browselist")
+"   call Decho("(LocalFastBrowser) initialize s:netrw_browselist")
+   let s:netrw_browselist= []
+  endif
+
+  " append current buffer to fastbrowse list
+  if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1]
+"   call Decho("(LocalFastBrowser) appendng current buffer to browselist")
+   call add(s:netrw_browselist,bufnr("%"))
+"   call Decho("(LocalFastBrowser) browselist=".string(s:netrw_browselist))
+  endif
+
+  " enable autocmd events to handle refreshing/removing local browser buffers
+  "    If local browse buffer is currently showing: refresh it
+  "    If local browse buffer is currently hidden : wipe it
+  "    g:netrw_fastbrowse=0 : slow   speed, never re-use directory listing
+  "                      =1 : medium speed, re-use directory listing for remote only
+  "                      =2 : fast   speed, always re-use directory listing when possible
+  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
+"   call Decho("(LocalFastBrowser) setting up local-browser shell command refresh")
+   let s:netrw_browser_shellcmd= 1
+   augroup AuNetrwShellCmd
+    au!
+    if (has("win32") || has("win95") || has("win64") || has("win16"))
+"     call Decho("(LocalFastBrowser) autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
+     au ShellCmdPost                   *       call s:LocalBrowseShellCmdRefresh()
+    else
+     au ShellCmdPost,FocusGained       *       call s:LocalBrowseShellCmdRefresh()
+"     call Decho("(LocalFastBrowser) autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
+    endif
+   augroup END
+  endif
+
+  " user must have changed fastbrowse to its fast setting, so remove
+  " the associated autocmd events
+  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
+"   call Decho("(LocalFastBrowser) remove AuNetrwShellCmd autcmd group")
+   unlet s:netrw_browser_shellcmd
+   augroup AuNetrwShellCmd
+    au!
+   augroup END
+   augroup! AuNetrwShellCmd
+  endif
+
+"  call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwLocalExecute: uses system() to execute command under cursor ("X" command support) {{{2
+fun! s:NetrwLocalExecute(cmd)
+"  call Dfunc("s:NetrwLocalExecute(cmd<".a:cmd.">)")
+  let ykeep= @@
+  " sanity check
+  if !executable(a:cmd)
+   call netrw#ErrorMsg(s:ERROR,"the file<".a:cmd."> is not executable!",89)
+   let @@= ykeep
+"   call Dret("s:NetrwLocalExecute")
+   return
+  endif
+
+  let optargs= input(":!".a:cmd,"","file")
+"  call Decho("optargs<".optargs.">")
+  let result= system(a:cmd.optargs)
+"  call Decho(result)
+
+  " strip any ansi escape sequences off
+  let result = substitute(result,"\e\\[[0-9;]*m","","g")
+
+  " show user the result(s)
+  echomsg result
+  let @@= ykeep
+
+"  call Dret("s:NetrwLocalExecute")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwLocalRename: rename a remote file or directory {{{2
+fun! s:NetrwLocalRename(path) range
+"  call Dfunc("NetrwLocalRename(path<".a:path.">)")
+
+  " preparation for removing multiple files/directories
+  let ykeep = @@
+  let ctr   = a:firstline
+  let svpos = netrw#NetrwSavePosn()
+
+  " rename files given by the markfilelist
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+   for oldname in s:netrwmarkfilelist_{bufnr("%")}
+"    call Decho("oldname<".oldname.">")
+    if exists("subfrom")
+     let newname= substitute(oldname,subfrom,subto,'')
+"     call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
+    else
+     call inputsave()
+     let newname= input("Moving ".oldname." to : ",oldname)
+     call inputrestore()
+     if newname =~ '^s/'
+      let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','')
+      let subto   = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','')
+"      call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
+      let newname = substitute(oldname,subfrom,subto,'')
+     endif
+    endif
+    call rename(oldname,newname)
+   endfor
+   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
+  
+  else
+
+   " attempt to rename files/directories
+   while ctr <= a:lastline
+    exe "keepj ".ctr
+
+    " sanity checks
+    if line(".") < w:netrw_bannercnt
+     let ctr= ctr + 1
+     continue
+    endif
+    let curword= s:NetrwGetWord()
+    if curword == "./" || curword == "../"
+     let ctr= ctr + 1
+     continue
+    endif
+
+    keepj norm! 0
+    let oldname= s:ComposePath(a:path,curword)
+"   call Decho("oldname<".oldname.">")
+
+    call inputsave()
+    let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
+    call inputrestore()
+
+    call rename(oldname,newname)
+"   call Decho("renaming <".oldname."> to <".newname.">")
+
+    let ctr= ctr + 1
+   endwhile
+  endif
+
+  " refresh the directory
+"  call Decho("refresh the directory listing")
+  keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
+
+"  call Dret("NetrwLocalRename")
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwLocalRm: {{{2
 fun! s:NetrwLocalRm(path) range
 "  call Dfunc("s:NetrwLocalRm(path<".a:path.">)")
 "  call Decho("firstline=".a:firstline." lastline=".a:lastline)
 
   " preparation for removing multiple files/directories
+  let ykeep = @@
   let ret   = 0
   let all   = 0
   let svpos = netrw#NetrwSavePosn()
@@ -7373,9 +8910,10 @@ fun! s:NetrwLocalRm(path) range
   " refresh the directory
 "  call Decho("bufname<".bufname("%").">")
   if bufname("%") != "NetrwMessage"
-   call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
-   call netrw#NetrwRestorePosn(svpos)
+   keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   endif
+  let @@= ykeep
 
 "  call Dret("s:NetrwLocalRm")
 endfun
@@ -7397,280 +8935,95 @@ fun! s:NetrwLocalRmFile(path,fname,all)
 "   call Decho("attempt to remove file<".rmfile.">")
    if !all
     echohl Statement
-    call inputsave()
-    let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-    call inputrestore()
-    echohl NONE
-    if ok == ""
-     let ok="no"
-    endif
-"    call Decho("response: ok<".ok.">")
-    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-"    call Decho("response: ok<".ok."> (after sub)")
-    if ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-   endif
-
-   if all || ok =~ 'y\%[es]' || ok == ""
-    let ret= s:NetrwDelete(rmfile)
-"    call Decho("errcode=".v:shell_error." ret=".ret)
-   endif
-
-  else
-   " attempt to remove directory
-   if !all
-    echohl Statement
-    call inputsave()
-    let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-    call inputrestore()
-    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-    if ok == ""
-     let ok="no"
-    endif
-    if ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-   endif
-   let rmfile= substitute(rmfile,'[\/]$','','e')
-
-   if all || ok =~ 'y\%[es]' || ok == ""
-"    call Decho("1st attempt: system(netrw#WinPath(".g:netrw_local_rmdir.') '.shellescape(rmfile).')')
-    call system(netrw#WinPath(g:netrw_local_rmdir).' '.shellescape(rmfile))
-"    call Decho("v:shell_error=".v:shell_error)
-
-    if v:shell_error != 0
-"     call Decho("2nd attempt to remove directory<".rmfile.">")
-     let errcode= s:NetrwDelete(rmfile)
-"     call Decho("errcode=".errcode)
-
-     if errcode != 0
-      if has("unix")
-"       call Decho("3rd attempt to remove directory<".rmfile.">")
-       call system("rm ".shellescape(rmfile))
-       if v:shell_error != 0 && !exists("g:netrw_quiet")
-        call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34)
-       let ok="no"
-       endif
-      elseif !exists("g:netrw_quiet")
-       call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35)
-       let ok="no"
-      endif
-     endif
-    endif
-   endif
-  endif
-
-"  call Dret("s:NetrwLocalRmFile ".ok)
-  return ok
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwLocalRename: rename a remote file or directory {{{2
-fun! s:NetrwLocalRename(path) range
-"  call Dfunc("NetrwLocalRename(path<".a:path.">)")
-
-  " preparation for removing multiple files/directories
-  let ctr  = a:firstline
-  let svpos= netrw#NetrwSavePosn()
-
-  " rename files given by the markfilelist
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-   for oldname in s:netrwmarkfilelist_{bufnr("%")}
-"    call Decho("oldname<".oldname.">")
-    if exists("subfrom")
-     let newname= substitute(oldname,subfrom,subto,'')
-"     call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
-    else
-     call inputsave()
-     let newname= input("Moving ".oldname." to : ",oldname)
-     call inputrestore()
-     if newname =~ '^s/'
-      let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','')
-      let subto   = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','')
-"      call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
-      let newname = substitute(oldname,subfrom,subto,'')
-     endif
-    endif
-    call rename(oldname,newname)
-   endfor
-   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
-  
-  else
-
-   " attempt to rename files/directories
-   while ctr <= a:lastline
-    exe "keepj ".ctr
-
-    " sanity checks
-    if line(".") < w:netrw_bannercnt
-     let ctr= ctr + 1
-     continue
+    call inputsave()
+    let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+    call inputrestore()
+    echohl NONE
+    if ok == ""
+     let ok="no"
     endif
-    let curword= s:NetrwGetWord()
-    if curword == "./" || curword == "../"
-     let ctr= ctr + 1
-     continue
+"    call Decho("response: ok<".ok.">")
+    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+"    call Decho("response: ok<".ok."> (after sub)")
+    if ok =~ 'a\%[ll]'
+     let all= 1
     endif
+   endif
 
-    keepj norm! 0
-    let oldname= s:ComposePath(a:path,curword)
-"   call Decho("oldname<".oldname.">")
+   if all || ok =~ 'y\%[es]' || ok == ""
+    let ret= s:NetrwDelete(rmfile)
+"    call Decho("errcode=".v:shell_error." ret=".ret)
+   endif
 
+  else
+   " attempt to remove directory
+   if !all
+    echohl Statement
     call inputsave()
-    let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
+    let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
     call inputrestore()
+    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+    if ok == ""
+     let ok="no"
+    endif
+    if ok =~ 'a\%[ll]'
+     let all= 1
+    endif
+   endif
+   let rmfile= substitute(rmfile,'[\/]$','','e')
 
-    call rename(oldname,newname)
-"   call Decho("renaming <".oldname."> to <".newname.">")
-
-    let ctr= ctr + 1
-   endwhile
-  endif
-
-  " refresh the directory
-"  call Decho("refresh the directory listing")
-  call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-
-"  call Dret("NetrwLocalRename")
-endfun
-
-" ---------------------------------------------------------------------
-" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2
-"
-"     g:netrw_    Directory Is
-"     fastbrowse  Local  Remote   
-"  slow   0         D      D      D=Deleting a buffer implies it will not be re-used (slow)
-"  med    1         D      H      H=Hiding a buffer implies it may be re-used        (fast)
-"  fast   2         H      H      
-"
-"  Deleting a buffer means that it will be re-loaded when examined, hence "slow".
-"  Hiding   a buffer means that it will be re-used   when examined, hence "fast".
-"           (re-using a buffer may not be as accurate)
-fun! s:LocalFastBrowser()
-"  call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse)
-
-  " initialize browselist, a list of buffer numbers that the local browser has used
-  if !exists("s:netrw_browselist")
-"   call Decho("initialize s:netrw_browselist")
-   let s:netrw_browselist= []
-  endif
+   if all || ok =~ 'y\%[es]' || ok == ""
+"    call Decho("1st attempt: system(netrw#WinPath(".g:netrw_localrmdir.') '.shellescape(rmfile).')')
+    call system(netrw#WinPath(g:netrw_localrmdir).' '.shellescape(rmfile))
+"    call Decho("v:shell_error=".v:shell_error)
 
-  " append current buffer to fastbrowse list
-  if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1]
-"   call Decho("appendng current buffer to browselist")
-   call add(s:netrw_browselist,bufnr("%"))
-"   call Decho("browselist=".string(s:netrw_browselist))
-  endif
+    if v:shell_error != 0
+"     call Decho("2nd attempt to remove directory<".rmfile.">")
+     let errcode= s:NetrwDelete(rmfile)
+"     call Decho("errcode=".errcode)
 
-  " enable autocmd events to handle refreshing/removing local browser buffers
-  "    If local browse buffer is currently showing: refresh it
-  "    If local browse buffer is currently hidden : wipe it
-  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
-"   call Decho("setting up local-browser shell command refresh")
-   let s:netrw_browser_shellcmd= 1
-   augroup AuNetrwShellCmd
-    au!
-    if (has("win32") || has("win95") || has("win64") || has("win16"))
-"     call Decho("autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
-     au ShellCmdPost                   *       call s:LocalBrowseShellCmdRefresh()
-    else
-     au ShellCmdPost,FocusGained       *       call s:LocalBrowseShellCmdRefresh()
-"     call Decho("autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
+     if errcode != 0
+      if has("unix")
+"       call Decho("3rd attempt to remove directory<".rmfile.">")
+       call system("rm ".shellescape(rmfile))
+       if v:shell_error != 0 && !exists("g:netrw_quiet")
+        call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34)
+       let ok="no"
+       endif
+      elseif !exists("g:netrw_quiet")
+       call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35)
+       let ok="no"
+      endif
+     endif
     endif
-   augroup END
-  endif
-
-  " user must have changed fastbrowse to its fast setting, so remove
-  " the associated autocmd events
-  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
-"   call Decho("remove AuNetrwShellCmd autcmd group")
-   unlet s:netrw_browser_shellcmd
-   augroup AuNetrwShellCmd
-    au!
-   augroup END
-   augroup! AuNetrwShellCmd
+   endif
   endif
 
-"  call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">")
+"  call Dret("s:NetrwLocalRmFile ".ok)
+  return ok
 endfun
 
 " ---------------------------------------------------------------------
 " Support Functions: {{{1
 
 " ---------------------------------------------------------------------
-" netrw#ErrorMsg: {{{2
-"   0=note     = s:NOTE
-"   1=warning  = s:WARNING
-"   2=error    = s:ERROR
-"  Dec 03, 2009 : max errnum currently is 76
-fun! netrw#ErrorMsg(level,msg,errnum)
-"  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
-
-  if a:level == 1
-   let level= "**warning** (netrw) "
-  elseif a:level == 2
-   let level= "**error** (netrw) "
-  else
-   let level= "**note** (netrw) "
-  endif
-"  call Decho("level=".level)
-
-  if g:netrw_use_errorwindow
-   " (default) netrw creates a one-line window to show error/warning
-   " messages (reliably displayed)
-
-   " record current window number for NetrwRestorePosn()'s benefit
-   let s:winBeforeErr= winnr()
-"   call Decho("s:winBeforeErr=".s:winBeforeErr)
-
-   " getting messages out reliably is just plain difficult!
-   " This attempt splits the current window, creating a one line window.
-   if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
-"    call Decho("write to NetrwMessage buffer")
-    exe bufwinnr("NetrwMessage")."wincmd w"
-"    call Decho("setlocal ma noro")
-    setlocal ma noro
-    call setline(line("$")+1,level.a:msg)
-    keepj $
-   else
-"    call Decho("create a NetrwMessage buffer window")
-    bo 1split
-    call s:NetrwEnew()
-    call s:NetrwSafeOptions()
-    setlocal bt=nofile
-    file NetrwMessage
-"    call Decho("setlocal ma noro")
-    setlocal ma noro
-    call setline(line("$"),level.a:msg)
-   endif
-"   call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr())
-   if &fo !~ '[ta]'
-    syn clear
-    syn match netrwMesgNote    "^\*\*note\*\*"
-    syn match netrwMesgWarning "^\*\*warning\*\*"
-    syn match netrwMesgError   "^\*\*error\*\*"
-    hi link netrwMesgWarning WarningMsg
-    hi link netrwMesgError   Error
-   endif
-   setlocal noma ro bh=wipe
-
+" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2
+fun! netrw#WinPath(path)
+"  call Dfunc("netrw#WinPath(path<".a:path.">)")
+  if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16"))
+   " remove cygdrive prefix, if present
+   let path = substitute(a:path,'/cygdrive/\(.\)','\1:','')
+   " remove trailing slash (Win95)
+   let path = substitute(path, '\(\\\|/\)$', '', 'g')
+   " remove escaped spaces
+   let path = substitute(path, '\ ', ' ', 'g')
+   " convert slashes to backslashes
+   let path = substitute(path, '/', '\', 'g')
   else
-   " (optional) netrw will show messages using echomsg.  Even if the
-   " message doesn't appear, at least it'll be recallable via :messages
-"   redraw!
-   if a:level == s:WARNING
-    echohl WarningMsg
-   elseif a:level == s:ERROR
-    echohl Error
-   endif
-   echomsg level.a:msg
-"   call Decho("echomsg ***netrw*** ".a:msg)
-   echohl None
+   let path= a:path
   endif
-
-"  call Dret("netrw#ErrorMsg")
+"  call Dret("netrw#WinPath <".path.">")
+  return path
 endfun
 
 " ---------------------------------------------------------------------
@@ -7680,16 +9033,18 @@ fun! netrw#NetrwRestorePosn(...)
   let eikeep= &ei
   set ei=all
   if expand("%") == "NetrwMessage"
-   exe s:winBeforeErr."wincmd w"
+   if exists("s:winBeforeErr")
+    exe s:winBeforeErr."wincmd w"
+   endif
   endif
 
   if a:0 > 0
-   exe a:1
+   exe "keepj ".a:1
   endif
 
   " restore window
   if exists("w:netrw_winnr")
-"   call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
+"   call Decho("(NetrwRestorePosn) restore window: exe sil! ".w:netrw_winnr."wincmd w")
    exe "sil! ".w:netrw_winnr."wincmd w"
   endif
   if v:shell_error == 0
@@ -7700,29 +9055,29 @@ fun! netrw#NetrwRestorePosn(...)
 
   " restore top-of-screen line
   if exists("w:netrw_hline")
-"   call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
+"   call Decho("(NetrwRestorePosn) restore topofscreen: exe keepj norm! ".w:netrw_hline."G0z")
    exe "keepj norm! ".w:netrw_hline."G0z\<CR>"
   endif
 
   " restore position
   if exists("w:netrw_line") && exists("w:netrw_col")
-"   call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
+"   call Decho("(NetrwRestorePosn) restore posn: exe keepj norm! ".w:netrw_line."G0".w:netrw_col."|")
    exe "keepj norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
   endif
 
   let &ei= eikeep
-"  call Dret("netrw#NetrwRestorePosn")
+"  call Dret("netrw#NetrwRestorePosn : line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol())
 endfun
 
 " ---------------------------------------------------------------------
 " netrw#NetrwSavePosn: saves position of cursor on screen {{{2
 fun! netrw#NetrwSavePosn()
-"  call Dfunc("netrw#NetrwSavePosn()")
+"  call Dfunc("netrw#NetrwSavePosn() line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol())
   " Save current line and column
   let w:netrw_winnr= winnr()
   let w:netrw_line = line(".")
   let w:netrw_col  = virtcol(".")
-"  call Decho("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
+"  call Decho("(NetrwSavePosn) currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
 
   " Save top-of-screen line
   keepj norm! H0
@@ -7731,11 +9086,26 @@ fun! netrw#NetrwSavePosn()
   " set up string holding position parameters
   let ret          = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline
 
-  call netrw#NetrwRestorePosn()
+  keepj call netrw#NetrwRestorePosn()
 "  call Dret("netrw#NetrwSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
   return ret
 endfun
 
+" ---------------------------------------------------------------------
+" netrw#NetrwAccess: intended to provide access to variable values for netrw's test suite {{{2
+"   0: marked file list of current buffer
+"   1: marked file target
+fun! netrw#NetrwAccess(ilist)
+  if     a:ilist == 0
+   if exists("s:netrwmarkfilelist_".bufnr('%'))
+    return s:netrwmarkfilelist_{bufnr('%')}
+   else
+    return "no-list-buf#".bufnr('%')
+   endif
+  elseif a:ilist == 1
+   return s:netrwmftgt
+endfun
+
 " ------------------------------------------------------------------------
 "  netrw#RFC2396: converts %xx into characters {{{2
 fun! netrw#RFC2396(fname)
@@ -7750,7 +9120,7 @@ endfun
 fun! s:ComposePath(base,subdir)
 "  call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)")
 
-  if(has("amiga"))
+  if has("amiga")
 "   call Decho("amiga")
    let ec = a:base[s:Strlen(a:base)-1]
    if ec != '/' && ec != ':'
@@ -7835,8 +9205,8 @@ fun! s:GetTempfile(fname)
 
    " sanity check -- does the temporary file's directory exist?
    if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
-"    call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-    call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
+"    call Decho("(GetTempfile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+    keepj call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
 "    call Dret("s:GetTempfile getcwd<".getcwd().">")
     return ""
    endif
@@ -7883,7 +9253,7 @@ fun! s:GetTempfile(fname)
    endif
   endif
 
-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"  call Decho("(GetTempFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 "  call Dret("s:GetTempfile <".tmpfile.">")
   return tmpfile
 endfun
@@ -7918,7 +9288,7 @@ fun! s:NetrwBMShow()
    if bmshowfuncs != []
     let bmshowfunc = substitute(bmshowfuncs[0],'^.*:\(call.*BMShow()\).*$','\1','')
     if bmshowfunc =~ '^call.*BMShow()'
-     exe "sil! ".bmshowfunc
+     exe "sil! keepj ".bmshowfunc
     endif
    endif
   endif
@@ -7926,43 +9296,78 @@ fun! s:NetrwBMShow()
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwCursorline: {{{2
-fun! s:NetrwCursorline()
+" s:NetrwCursor: responsible for setting cursorline/cursorcolumn based upon g:netrw_cursor {{{2
+fun! s:NetrwCursor()
   if !exists("w:netrw_liststyle")
    let w:netrw_liststyle= g:netrw_liststyle
   endif
-"  call Dfunc("s:NetrwCursorline() liststyle=".w:netrw_liststyle." g:netrw_cursorline=".g:netrw_cursorline." s:netrw_usercuc=".s:netrw_usercuc." s:netrw_usercul=".s:netrw_usercul)
-  "
-  if w:netrw_liststyle != s:WIDELIST
-   " thin-long-tree listings
-   if g:netrw_cursorline == 2
-    setlocal cursorline
-    let &l:cursorcolumn= s:netrw_usercuc
-"    call Decho("setlocal cursorline  (cursorcolumn is ".((s:netrw_usercuc)? "on" : "off").")")
-   elseif g:netrw_cursorline
-    setlocal cursorline
-"    call Decho("setlocal cursorline")
+"  call Dfunc("s:NetrwCursor() ft<".&ft."> liststyle=".w:netrw_liststyle." g:netrw_cursor=".g:netrw_cursor." s:netrw_usercuc=".s:netrw_usercuc." s:netrw_usercul=".s:netrw_usercul)
+
+  if &ft != "netrw"
+   " if the current window isn't a netrw directory listing window, then use user cursorline/column
+   " settings.  Affects when netrw is used to read/write a file using scp/ftp/etc.
+"   call Decho("case ft!=netrw: use user cul,cuc")
+   let &l:cursorline   = s:netrw_usercul
+   let &l:cursorcolumn = s:netrw_usercuc
+
+  elseif g:netrw_cursor == 4
+   " all styles: cursorline, cursorcolumn
+"   call Decho("case g:netrw_cursor==4: setl cul cuc")
+   setl cursorline
+   setl cursorcolumn
+
+  elseif g:netrw_cursor == 3
+   " thin-long-tree: cursorline, user's cursorcolumn
+   " wide          : cursorline, cursorcolumn
+   if w:netrw_liststyle == s:WIDELIST
+"    call Decho("case g:netrw_cursor==3 and wide: setl cul cuc")
+    setl cursorline
+    setl cursorcolumn
+   else
+"    call Decho("case g:netrw_cursor==3 and not wide: setl cul (use user's cuc)")
+    setl cursorline
+    let &l:cursorcolumn   = s:netrw_usercuc
+   endif
+
+  elseif g:netrw_cursor == 2
+   " thin-long-tree: cursorline, user's cursorcolumn
+   " wide          : cursorline, user's cursorcolumn
+"   call Decho("case g:netrw_cursor==2: setl cuc (use user's cul)")
+   let &l:cursorcolumn = s:netrw_usercuc
+   setl cursorline
+
+  elseif g:netrw_cursor == 1
+   " thin-long-tree: user's cursorline, user's cursorcolumn
+   " wide          : cursorline,        user's cursorcolumn
+   let &l:cursorcolumn = s:netrw_usercuc
+   if w:netrw_liststyle == s:WIDELIST
+"    call Decho("case g:netrw_cursor==2 and wide: setl cul (use user's cuc)")
+    set cursorline
+   else
+"    call Decho("case g:netrw_cursor==2 and not wide: (use user's cul,cuc)")
+    let &l:cursorline   = s:netrw_usercul
    endif
 
   else
-   " wide listings
-   if g:netrw_cursorline == 2
-    setlocal cursorline cursorcolumn
-"    call Decho("setlocal cursorline cursorcolumn")
-   elseif g:netrw_cursorline
-    let &l:cursorline= s:netrw_usercul
-"    call Decho("cursorline is ".((s:netrw_usercul)? "on" : "off").")")
-   endif
+   " all styles: user's cursorline, user's cursorcolumn
+"   call Decho("default: (use user's cul,cuc)")
+   let &l:cursorline   = s:netrw_usercul
+   let &l:cursorcolumn = s:netrw_usercuc
   endif
-"  call Dret("s:NetrwCursorline : l:cursorline=".&l:cursorline." l:cursorcolumn=".&l:cursorcolumn)
+
+"  call Dret("s:NetrwCursor : l:cursorline=".&l:cursorline." l:cursorcolumn=".&l:cursorcolumn)
 endfun
 
 " ---------------------------------------------------------------------
 " s:RestoreCursorline: restores cursorline/cursorcolumn to original user settings {{{2
 fun! s:RestoreCursorline()
-"  call Dfunc("s:RestoreCursorline() currently, cul=".&l:cursorline." cuc=".&l:cursorcolumn." win#".winnr()." buf#".bufnr("%"))
-  let &l:cursorline   = s:netrw_usercul
-  let &l:cursorcolumn = s:netrw_usercuc
+"  call Dfunc("s:RestoreCursorline() currently, cul=".&l:cursorline." cuc=".&l:cursorcolumn." win#".winnr()." buf#".bufnr("%")." mod=".&mod)
+  if exists("s:netrw_usercul")
+   let &l:cursorline   = s:netrw_usercul
+  endif
+  if exists("s:netrw_usercuc")
+   let &l:cursorcolumn = s:netrw_usercuc
+  endif
 "  call Dret("s:RestoreCursorline : restored cul=".&l:cursorline." cuc=".&l:cursorcolumn)
 endfun
 
@@ -7978,7 +9383,7 @@ fun! s:NetrwDelete(path)
   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
    if exists("+shellslash")
     let sskeep= &shellslash
-    setlocal noshellslash
+    setl noshellslash
     let result      = delete(path)
     let &shellslash = sskeep
    else
@@ -7990,7 +9395,7 @@ fun! s:NetrwDelete(path)
    let result= delete(path)
   endif
   if result < 0
-   call netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
+   keepj call netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
   endif
 
 "  call Dret("s:NetrwDelete ".result)
@@ -8022,13 +9427,13 @@ fun! s:NetrwEnew(...)
   if exists("b:netrw_option")         |let netrw_option          = b:netrw_option         |endif
   if exists("b:netrw_prvdir")         |let netrw_prvdir          = b:netrw_prvdir         |endif
 
-  call s:NetrwOptionRestore("w:")
+  keepj call s:NetrwOptionRestore("w:")
 "  call Decho("generate a buffer with keepjumps keepalt enew!")
   let netrw_keepdiff= &l:diff
   keepj keepalt enew!
   let &l:diff= netrw_keepdiff
 "  call Decho("bufnr($)=".bufnr("$"))
-  call s:NetrwOptionSave("w:")
+  keepj call s:NetrwOptionSave("w:")
 
   " copy function-local-variables to buffer variable equivalents
 "  call Decho("copy function-local variables back to buffer netrw variables")
@@ -8054,16 +9459,44 @@ fun! s:NetrwEnew(...)
    if b:netrw_curdir =~ '/$'
     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
      file NetrwTreeListing
-     set bt=nowrite noswf
-     nno <silent> <buffer> [   :silent call <SID>TreeListMove('[')<cr>
-     nno <silent> <buffer> ]   :silent call <SID>TreeListMove(']')<cr>
+     set bt=nowrite noswf bh=hide
+     nno <silent> <buffer> [   :sil call <SID>TreeListMove('[')<cr>
+     nno <silent> <buffer> ]   :sil call <SID>TreeListMove(']')<cr>
     else
      exe "sil! keepalt file ".fnameescape(b:netrw_curdir)
     endif
    endif
   endif
 
-"  call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">")
+"  call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#")."> bh=".&bh)
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwInsureWinVars: insure that a netrw buffer has its w: variables in spite of a wincmd v or s {{{2
+fun! s:NetrwInsureWinVars()
+"  call Dfunc("s:NetrwInsureWinVars() win#".winnr())
+  if !exists("w:netrw_liststyle")
+   let curbuf = bufnr("%")
+   let curwin = winnr()
+   let iwin   = 1
+   while iwin <= winnr("$")
+    exe iwin."wincmd w"
+    if winnr() != curwin && bufnr("%") == curbuf && exists("w:netrw_liststyle")
+     " looks like ctrl-w_s or ctrl-w_v was used to split a netrw buffer
+     let winvars= w:
+     break
+    endif
+    let iwin= iwin + 1
+   endwhile
+   exe "keepalt ".curwin."wincmd w"
+   if exists("winvars")
+"    call Decho("copying w#".iwin." window variables to w#".curwin)
+    for k in keys(winvars)
+     let w:{k}= winvars[k]
+    endfor
+   endif
+  endif
+"  call Dret("s:NetrwInsureWinVars win#".winnr())
 endfun
 
 " ------------------------------------------------------------------------
@@ -8080,7 +9513,7 @@ endfun
 "  changed sorting, etc.  Also see s:NetrwSaveWordPosn().
 fun! s:NetrwRestoreWordPosn()
 "  call Dfunc("NetrwRestoreWordPosn()")
-  silent! call search(s:netrw_saveword,'w')
+  sil! call search(s:netrw_saveword,'w')
 "  call Dret("NetrwRestoreWordPosn")
 endfun
 
@@ -8102,7 +9535,7 @@ endfun
 " ---------------------------------------------------------------------
 " s:RemotePathAnalysis: {{{2
 fun! s:RemotePathAnalysis(dirname)
-"  call Dfunc("s:RemotePathAnalysis()")
+"  call Dfunc("s:RemotePathAnalysis(a:dirname<".a:dirname.">)")
 
   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$'
   let s:method  = substitute(a:dirname,dirpat,'\1','')
@@ -8131,9 +9564,9 @@ endfun
 fun! s:RemoteSystem(cmd)
 "  call Dfunc("s:RemoteSystem(cmd<".a:cmd.">)")
   if !executable(g:netrw_ssh_cmd)
-   call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52)
+   keepj call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52)
   elseif !exists("b:netrw_curdir")
-   call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
+   keepj call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
   else
    let cmd      = s:MakeSshCmd(g:netrw_ssh_cmd." USEPORT HOSTNAME")
    let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
@@ -8183,15 +9616,28 @@ endfun
 "
 "             s:nbcd_curpos_{bufnr('%')} is set up by s:NetrwBrowseChgDir()
 fun! s:NetrwRexplore(islocal,dirname)
-"  call Dfunc("s:NetrwRexplore(islocal=".a:islocal." dirname<".a:dirname.">)")
-  if a:islocal
-   call netrw#LocalBrowseCheck(a:dirname)
+  if exists("s:netrwdrag")
+   return
+  endif
+"  call Dfunc("s:NetrwRexplore() w:netrw_rexlocal=".w:netrw_rexlocal." w:netrw_rexdir<".w:netrw_rexdir.">")
+  if !exists("w:netrw_rexlocal")
+"   "   call Dret("s:NetrwRexplore() w:netrw_rexlocal doesn't exist")
+   return
+  endif
+  if w:netrw_rexlocal
+   keepj call netrw#LocalBrowseCheck(w:netrw_rexdir)
   else
-   call s:NetrwBrowse(0,a:dirname)
+   keepj call s:NetrwBrowse(0,w:netrw_rexdir)
   endif
-  if exists("s:nbcd_curpos_{bufnr('%')}")
-   call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
-   unlet s:nbcd_curpos_{bufnr('%')}
+  if exists("s:initbeval")
+   set beval
+  endif
+  if exists("s:rexposn_".bufnr("%"))
+"   call Decho("(NetrwRexplore) restore posn, then unlet s:rexposn_".bufnr('%'))
+   keepj call netrw#NetrwRestorePosn(s:rexposn_{bufnr('%')})
+   unlet s:rexposn_{bufnr('%')}
+  else
+"   call Decho("(NetrwRexplore) s:rexposn_".bufnr('%')." doesn't exist")
   endif
   if exists("s:explore_match")
    exe "2match netrwMarkFile /".s:explore_match."/"
@@ -8265,32 +9711,14 @@ endfun
 " s:SetRexDir: set directory for :Rexplore {{{2
 fun! s:SetRexDir(islocal,dirname)
 "  call Dfunc("s:SetRexDir(islocal=".a:islocal." dirname<".a:dirname.">)")
-  " set up Rex and leftmouse-double-click
-  if a:islocal
-   exe 'com! Rexplore call s:NetrwRexplore(1,"'.escape(a:dirname,'"\').'")'
-   if g:netrw_retmap
-    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
-     nmap <unique> <silent> <2-leftmouse>      <Plug>NetrwReturn
-    endif
-    let dir = escape(a:dirname, s:netrw_map_escape)
-    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(1,"'.dir.'")<cr>'
-   endif
-  else
-   exe 'com! Rexplore call s:NetrwRexplore(0,"'.escape(a:dirname,'"\').'")'
-   if g:netrw_retmap
-    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
-     nmap <unique> <silent> <2-leftmouse>      <Plug>NetrwReturn
-    endif
-    let dir = escape(a:dirname, s:netrw_map_escape)
-    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(0,"'.dir.'")<cr>'
-   endif
-  endif
-"  call Dret("s:SetRexDir")
+  let w:netrw_rexdir   = a:dirname
+  let w:netrw_rexlocal = a:islocal
+"  call Dret("s:SetRexDir : win#".winnr()." ".(a:islocal? "local" : "remote")." dir: ".a:dirname)
 endfun
 
 " ---------------------------------------------------------------------
 " s:Strlen: this function returns the length of a string, even if its {{{2
-"           using two-byte etc characters.
+"           using multiple-byte characters.
 "           Solution from Nicolai Weibull, vim docs (:help strlen()), Tony Mechelynck,
 "           and a bit from me.
 "           if g:netrw_xstrlen is zero (default), then the builtin strlen() function is used.
@@ -8317,6 +9745,7 @@ fun! s:Strlen(x)
    call setline(line("."),a:x)
    let ret= virtcol("$") - 1
    keepj d
+   keepj norm! k
    let &mod= modkeep
 
   else
@@ -8390,12 +9819,12 @@ endfun
 "                      Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway.
 fun! s:UpdateBuffersMenu()
 "  call Dfunc("s:UpdateBuffersMenu()")
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
+  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
    try
-    silent emenu Buffers.Refresh\ menu
+    sil emenu Buffers.Refresh\ menu
    catch /^Vim\%((\a\+)\)\=:E/
     let v:errmsg= ""
-    silent call s:NetrwBMShow()
+    sil keepj call s:NetrwBMShow()
    endtry
   endif
 "  call Dret("s:UpdateBuffersMenu")
@@ -8403,7 +9832,7 @@ endfun
 
 " ---------------------------------------------------------------------
 " s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2
-"              Matching function to BufferWinVars()
+"              Matching function to s:SetBufWinVars()
 fun! s:UseBufWinVars()
 "  call Dfunc("s:UseBufWinVars()")
   if exists("b:netrw_liststyle")       && !exists("w:netrw_liststyle")      |let w:netrw_liststyle       = b:netrw_liststyle      |endif
@@ -8420,27 +9849,7 @@ fun! s:UseBufWinVars()
 endfun
 
 " ---------------------------------------------------------------------
-" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2
-fun! netrw#WinPath(path)
-"  call Dfunc("netrw#WinPath(path<".a:path.">)")
-  if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16"))
-   " remove cygdrive prefix, if present
-   let path = substitute(a:path,'/cygdrive/\(.\)','\1:','')
-   " remove trailing slash (Win95)
-   let path = substitute(path, '\(\\\|/\)$', '', 'g')
-   " remove escaped spaces
-   let path = substitute(path, '\ ', ' ', 'g')
-   " convert slashes to backslashes
-   let path = substitute(path, '/', '\', 'g')
-  else
-   let path= a:path
-  endif
-"  call Dret("netrw#WinPath <".path.">")
-  return path
-endfun
-
-" ---------------------------------------------------------------------
-" Settings Restoration: {{{2
+" Settings Restoration: {{{1
 let &cpo= s:keepcpo
 unlet s:keepcpo
 
index 1515b00..ed31e29 100644 (file)
@@ -1,9 +1,9 @@
 " netrwFileHandlers: contains various extension-based file handlers for
 "                    netrw's browsers' x command ("eXecute launcher")
-" Author:      Charles E. Campbell, Jr.
-" Date:                Sep 30, 2008
-" Version:     10
-" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
+" Author:      Charles E. Campbell
+" Date:                May 03, 2013
+" Version:     11b     ASTRO-ONLY
+" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -20,7 +20,7 @@
 if exists("g:loaded_netrwFileHandlers") || &cp
  finish
 endif
-let g:loaded_netrwFileHandlers= "v10"
+let g:loaded_netrwFileHandlers= "v11b"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of netrwFileHandlers needs vim 7.2"
@@ -34,10 +34,10 @@ set cpo&vim
 " netrwFileHandlers#Invoke: {{{1
 fun! netrwFileHandlers#Invoke(exten,fname)
 "  call Dfunc("netrwFileHandlers#Invoke(exten<".a:exten."> fname<".a:fname.">)")
-  let fname= a:fname
+  let exten= a:exten
   " list of supported special characters.  Consider rcs,v --- that can be
   " supported with a NFH_rcsCOMMAv() handler
-  if a:fname =~ '[@:,$!=\-+%?;~]'
+  if exten =~ '[@:,$!=\-+%?;~]'
    let specials= {
 \   '@' : 'AT',
 \   ':' : 'COLON',
@@ -51,20 +51,20 @@ fun! netrwFileHandlers#Invoke(exten,fname)
 \   '?' : 'QUESTION',
 \   ';' : 'SEMICOLON',
 \   '~' : 'TILDE'}
-   let fname= substitute(a:fname,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
+   let exten= substitute(a:exten,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
 "   call Decho('fname<'.fname.'> done with dictionary')
   endif
 
-  if a:exten != "" && exists("*NFH_".a:exten)
+  if a:exten != "" && exists("*NFH_".exten)
    " support user NFH_*() functions
 "   call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
-   exe "let ret= NFH_".a:exten.'("'.fname.'")'
-  elseif a:exten != "" && exists("*s:NFH_".a:exten)
+   exe "let ret= NFH_".exten.'("'.a:fname.'")'
+  elseif a:exten != "" && exists("*s:NFH_".exten)
    " use builtin-NFH_*() functions
 "   call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
-   exe "let ret= s:NFH_".a:exten.'("'.fname.'")'
+   exe "let ret= s:NFH_".a:exten.'("'.a:fname.'")'
   endif
-  
+
 "  call Dret("netrwFileHandlers#Invoke 0 : ret=".ret)
   return 0
 endfun
@@ -356,6 +356,7 @@ fun! s:NFH_obj(obj)
 endfun
 
 let &cpo= s:keepcpo
+unlet s:keepcpo
 " ---------------------------------------------------------------------
 "  Modelines: {{{1
 "  vim: fdm=marker
index 38f7299..ee43059 100644 (file)
@@ -1,8 +1,8 @@
 " netrwSettings.vim: makes netrw settings simpler
-" Date:                Sep 03, 2008
-" Maintainer:  Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:     13
-" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
+" Date:                May 03, 2013
+" Maintainer:  Charles E Campbell <drchipNOSPAM at campbellfamily dot biz>
+" Version:     14a     ASTRO-ONLY
+" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -19,7 +19,7 @@
 if exists("g:loaded_netrwSettings") || &cp
   finish
 endif
-let g:loaded_netrwSettings = "v13"
+let g:loaded_netrwSettings = "v14a"
 if v:version < 700
  echohl WarningMsg
  echo "***warning*** this version of netrwSettings needs vim 7.0"
@@ -63,7 +63,7 @@ fun! netrwSettings#NetrwSettings()
   endif
 
   put ='+ ---------------------------------------------'
-  put ='+  NetrwSettings:  by Charles E. Campbell, Jr.'
+  put ='+  NetrwSettings:  by Charles E. Campbell'
   put ='+ Press <F1> with cursor atop any line for help'
   put ='+ ---------------------------------------------'
   let s:netrw_settings_stop= line(".")
@@ -88,6 +88,7 @@ fun! netrwSettings#NetrwSettings()
   put = 'let g:netrw_ftpmode           = '.g:netrw_ftpmode
   put = 'let g:netrw_ignorenetrc       = '.g:netrw_ignorenetrc
   put = 'let g:netrw_sshport           = '.g:netrw_sshport
+  put = 'let g:netrw_silent            = '.g:netrw_silent
   put = 'let g:netrw_use_nt_rcp        = '.g:netrw_use_nt_rcp
   put = 'let g:netrw_win95ftp          = '.g:netrw_win95ftp
   let s:netrw_xfer_stop= line(".")
@@ -99,51 +100,81 @@ fun! netrwSettings#NetrwSettings()
   put ='+ Netrw Browser Control'
   put = 'let g:netrw_alto              = '.g:netrw_alto
   put = 'let g:netrw_altv              = '.g:netrw_altv
+  put = 'let g:netrw_banner            = '.g:netrw_banner
+  if exists("g:netrw_bannerbackslash")
+   put = 'let g:netrw_bannerbackslash   = '.g:netrw_bannerbackslash
+  else
+   put = '\" let g:netrw_bannerbackslash   = (not defined)'
+  endif
   put = 'let g:netrw_browse_split      = '.g:netrw_browse_split
   if exists("g:netrw_browsex_viewer")
-   put = 'let g:netrw_browsex_viewer    = '.g:netrw_browsex_viewer
+   put = 'let g:netrw_browsex_viewer   = '.g:netrw_browsex_viewer
   else
-   put = 'let g:netrw_browsex_viewer    = (not defined)'
+   put = '\" let g:netrw_browsex_viewer   = (not defined)'
   endif
   put = 'let g:netrw_compress          = '.g:netrw_compress
-  put = 'let g:netrw_cursorline        = '.g:netrw_cursorline
+  if exists("g:Netrw_corehandler")
+   put = 'let g:Netrw_corehandler      = '.g:Netrw_corehandler
+  else
+   put = '\" let g:Netrw_corehandler      = (not defined)'
+  endif
+  put = 'let g:netrw_ctags             = '.g:netrw_ctags
+  put = 'let g:netrw_cursor            = '.g:netrw_cursor
   let decompressline= line("$")
-  put ='let g:netrw_decompress...'
+  put = 'let g:netrw_decompress        = '.string(g:netrw_decompress)
+  if exists("g:netrw_dynamic_maxfilenamelen")
+   put = 'let g:netrw_dynamic_maxfilenamelen='.g:netrw_dynamic_maxfilenamelen
+  else
+   put = '\" let g:netrw_dynamic_maxfilenamelen= (not defined)'
+  endif
   put = 'let g:netrw_dirhistmax        = '.g:netrw_dirhistmax
+  put = 'let g:netrw_errorlvl          = '.g:netrw_errorlvl
   put = 'let g:netrw_fastbrowse        = '.g:netrw_fastbrowse
   let fnameescline= line("$")
-  put = 'let g:netrw_fname_escape...'
+  put = 'let g:netrw_fname_escape      = '.string(g:netrw_fname_escape)
   put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject
   put = 'let g:netrw_ftp_list_cmd      = '.g:netrw_ftp_list_cmd
   put = 'let g:netrw_ftp_sizelist_cmd  = '.g:netrw_ftp_sizelist_cmd
   put = 'let g:netrw_ftp_timelist_cmd  = '.g:netrw_ftp_timelist_cmd
   let globescline= line("$")
-  put ='let g:netrw_glob_escape...'
+  put = 'let g:netrw_glob_escape       = '.string(g:netrw_glob_escape)
   put = 'let g:netrw_hide              = '.g:netrw_hide
+  if exists("g:netrw_home")
+   put = 'let g:netrw_home              = '.g:netrw_home
+  else
+   put = '\" let g:netrw_home              = (not defined)'
+  endif
   put = 'let g:netrw_keepdir           = '.g:netrw_keepdir
   put = 'let g:netrw_list_cmd          = '.g:netrw_list_cmd
   put = 'let g:netrw_list_hide         = '.g:netrw_list_hide
   put = 'let g:netrw_liststyle         = '.g:netrw_liststyle
   put = 'let g:netrw_localcopycmd      = '.g:netrw_localcopycmd
-  put = 'let g:netrw_local_mkdir       = '.g:netrw_local_mkdir
+  put = 'let g:netrw_localmkdir        = '.g:netrw_localmkdir
   put = 'let g:netrw_localmovecmd      = '.g:netrw_localmovecmd
-  put = 'let g:netrw_local_rmdir       = '.g:netrw_local_rmdir
+  put = 'let g:netrw_localrmdir        = '.g:netrw_localrmdir
   put = 'let g:netrw_maxfilenamelen    = '.g:netrw_maxfilenamelen
   put = 'let g:netrw_menu              = '.g:netrw_menu
+  put = 'let g:netrw_mousemaps         = '.g:netrw_mousemaps
   put = 'let g:netrw_mkdir_cmd         = '.g:netrw_mkdir_cmd
+  if exists("g:netrw_nobeval")
+   put = 'let g:netrw_nobeval           = '.g:netrw_nobeval
+  else
+   put = '\" let g:netrw_nobeval           = (not defined)'
+  endif
+  put = 'let g:netrw_remote_mkdir      = '.g:netrw_remote_mkdir
   put = 'let g:netrw_preview           = '.g:netrw_preview
   put = 'let g:netrw_rename_cmd        = '.g:netrw_rename_cmd
   put = 'let g:netrw_retmap            = '.g:netrw_retmap
   put = 'let g:netrw_rm_cmd            = '.g:netrw_rm_cmd
   put = 'let g:netrw_rmdir_cmd         = '.g:netrw_rmdir_cmd
   put = 'let g:netrw_rmf_cmd           = '.g:netrw_rmf_cmd
-  put = 'let g:netrw_silent            = '.g:netrw_silent
   put = 'let g:netrw_sort_by           = '.g:netrw_sort_by
   put = 'let g:netrw_sort_direction    = '.g:netrw_sort_direction
   put = 'let g:netrw_sort_options      = '.g:netrw_sort_options
   put = 'let g:netrw_sort_sequence     = '.g:netrw_sort_sequence
   put = 'let g:netrw_special_syntax    = '.g:netrw_special_syntax
   put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject
+  put = 'let g:netrw_ssh_cmd           = '.g:netrw_ssh_cmd
   put = 'let g:netrw_scpport           = '.g:netrw_scpport
   put = 'let g:netrw_sepchr            = '.g:netrw_sepchr
   put = 'let g:netrw_sshport           = '.g:netrw_sshport
index e5d910e..0756555 100644 (file)
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:    PHP
 " Maintainer:  Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change: 2006 May 9
+" Last Change: 2011 Dec 08
 "
 "   TODO:
 "   - Class aware completion:
@@ -650,6 +650,7 @@ function! phpcomplete#GetClassContents(file, name) " {{{
        " this is the most efficient way. The other way
        " is to go through the looong string looking for
        " matching {}
+       let original_window = winnr()
        below 1new
        0put =cfile
        call search('class\s\+'.a:name)
@@ -667,6 +668,9 @@ function! phpcomplete#GetClassContents(file, name) " {{{
        let classcontent = join(classc, "\n")
 
        bw! %
+       " go back to where we started
+       exe original_window.'wincmd w'
+
        if extends_class != ''
                let classlocation = phpcomplete#GetClassLocation(extends_class)
                if filereadable(classlocation)
index f89be52..e1064c8 100644 (file)
@@ -1,9 +1,7 @@
 " Vim completion script
 " Language:             Ruby
 " Maintainer:           Mark Guzman <segfault@hasno.info>
-" Last Change:          2009 Sep 28
-" URL:                  http://vim-ruby.rubyforge.org
-" Anon CVS:             See above site
+" URL:                  https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:  Doug Kearns <dougkearns@gmail.com>
 " Maintainer Version:   0.8.1
 " ----------------------------------------------------------------------------
 " ----------------------------------------------------------------------------
 
 " {{{ requirement checks
+
+function! s:ErrMsg(msg)
+    echohl ErrorMsg
+    echo a:msg
+    echohl None
+endfunction
+
 if !has('ruby')
-    s:ErrMsg( "Error: Rubycomplete requires vim compiled with +ruby" )
-    s:ErrMsg( "Error: falling back to syntax completion" )
+    call s:ErrMsg( "Error: Rubycomplete requires vim compiled with +ruby" )
+    call s:ErrMsg( "Error: falling back to syntax completion" )
     " lets fall back to syntax completion
     setlocal omnifunc=syntaxcomplete#Complete
     finish
 endif
 
 if version < 700
-    s:ErrMsg( "Error: Required vim >= 7.0" )
+    call s:ErrMsg( "Error: Required vim >= 7.0" )
     finish
 endif
 " }}} requirement checks
@@ -51,12 +56,6 @@ endif
 " {{{ vim-side support functions
 let s:rubycomplete_debug = 0
 
-function! s:ErrMsg(msg)
-    echohl ErrorMsg
-    echo a:msg
-    echohl None
-endfunction
-
 function! s:dprint(msg)
     if s:rubycomplete_debug == 1
         echom a:msg
@@ -133,7 +132,7 @@ function! s:GetRubyVarType(v)
     let stopline = 1
     let vtp = ''
     let pos = getpos('.')
-    let sstr = '^\s*#\s*@var\s*'.a:v.'\>\s\+[^ \t]\+\s*$'
+    let sstr = '^\s*#\s*@var\s*'.escape(a:v, '*').'\>\s\+[^ \t]\+\s*$'
     let [lnum,lcol] = searchpos(sstr,'nb',stopline)
     if lnum != 0 && lcol != 0
         call setpos('.',pos)
@@ -275,7 +274,7 @@ class VimRubyCompletion
     pare = /^\s*class\s*(.*)\s*<\s*(.*)\s*\n/.match( classdef )
     load_buffer_class( $2 ) if pare != nil  && $2 != name # load parent class if needed
 
-    mixre = /.*\n\s*include\s*(.*)\s*\n/.match( classdef )
+    mixre = /.*\n\s*(include|prepend)\s*(.*)\s*\n/.match( classdef )
     load_buffer_module( $2 ) if mixre != nil && $2 != name # load mixins if needed
 
     begin
@@ -364,6 +363,10 @@ class VimRubyCompletion
     print txt if @@debug
   end
 
+  def escape_vim_singlequote_string(str)
+    str.to_s.gsub(/'/,"\\'")
+  end
+
   def get_buffer_entity_list( type )
     # this will be a little expensive.
     loading_allowed = VIM::evaluate("exists('g:rubycomplete_buffer_loading') && g:rubycomplete_buffer_loading")
@@ -526,9 +529,9 @@ class VimRubyCompletion
   end
 
   def clean_sel(sel, msg)
-    sel.delete_if { |x| x == nil }
-    sel.uniq!
-    sel.grep(/^#{Regexp.quote(msg)}/) if msg != nil
+    ret = sel.reject{|x|x.nil?}.uniq
+    ret = ret.grep(/^#{Regexp.quote(msg)}/) if msg != nil
+    ret
   end
 
   def get_rails_view_methods
@@ -767,10 +770,10 @@ class VimRubyCompletion
     constants = clean_sel( constants, message )
 
     valid = []
-    valid += methods.collect { |m| { :name => m, :type => 'm' } }
-    valid += variables.collect { |v| { :name => v, :type => 'v' } }
-    valid += classes.collect { |c| { :name => c, :type => 't' } }
-    valid += constants.collect { |d| { :name => d, :type => 'd' } }
+    valid += methods.collect { |m| { :name => m.to_s, :type => 'm' } }
+    valid += variables.collect { |v| { :name => v.to_s, :type => 'v' } }
+    valid += classes.collect { |c| { :name => c.to_s, :type => 't' } }
+    valid += constants.collect { |d| { :name => d.to_s, :type => 'd' } }
     valid.sort! { |x,y| x[:name] <=> y[:name] }
 
     outp = ""
@@ -779,7 +782,7 @@ class VimRubyCompletion
     rg.step(150) do |x|
       stpos = 0+x
       enpos = 150+x
-      valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s','kind':'%s'}," % [ c[:name], c[:name], c[:type] ] }
+      valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s','kind':'%s'}," % [ c[:name], c[:name], c[:type] ].map{|x|escape_vim_singlequote_string(x)} }
       outp.sub!(/,$/, '')
 
       VIM::command("call extend(g:rubycomplete_completions, [%s])" % outp)
index 534acc6..e7fd1d8 100644 (file)
@@ -1,6 +1,6 @@
 " Vim script to download a missing spell file
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2008 Nov 29
+" Last Change: 2012 Jan 08
 
 if !exists('g:spellfile_URL')
   " Prefer using http:// when netrw should be able to use it, since
@@ -70,7 +70,7 @@ function! spellfile#LoadFile(lang)
     " Remember the buffer number, we check it below.
     new
     let newbufnr = winbufnr(0)
-    setlocal bin
+    setlocal bin fenc=
     echo 'Downloading ' . fname . '...'
     call spellfile#Nread(fname)
     if getline(2) !~ 'VIMspell'
@@ -83,7 +83,7 @@ function! spellfile#LoadFile(lang)
          " Our buffer has vanished!?  Open a new window.
          echomsg "download buffer disappeared, opening a new one"
          new
-         setlocal bin
+         setlocal bin fenc=
        else
          exe winnr . "wincmd w"
        endif
@@ -120,6 +120,7 @@ function! spellfile#LoadFile(lang)
       else
        let dirname = escape(dirlist[dirchoice], ' ')
       endif
+      setlocal fenc=
       exe "write " . dirname . '/' . fname
 
       " Also download the .sug file, if the user wants to.
index 5599c0d..9326c15 100644 (file)
@@ -1,16 +1,63 @@
 " Vim OMNI completion script for SQL
 " Language:    SQL
 " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
-" Version:     10.0
-" Last Change: 2010 Jun 11
+" Version:     15.0
+" Last Change: 2013 May 13
+" Homepage:    http://www.vim.org/scripts/script.php?script_id=1572
 " Usage:       For detailed help
-"              ":help sql.txt" 
-"              or ":help ft-sql-omni" 
+"              ":help sql.txt"
+"              or ":help ft-sql-omni"
 "              or read $VIMRUNTIME/doc/sql.txt
 
 " History
+"
+" TODO
+"     - Jonas Enberg - if no table is found when using column completion
+"       look backwards to a FROM clause and find the first table
+"       and complete it.
+"
+" Version 15.0 (May 2013)
+"     - NF: Changed the SQL precached syntax items, omni_sql_precache_syntax_groups,
+"           to use regular expressions to pick up extended syntax group names.
+"           This requires an updated SyntaxComplete plugin version 13.0.
+"           If the required versions have not been installed, previous
+"           behaviour will not be impacted.
+"
+" Version 14.0 (Dec 2012)
+"     - BF: Added check for cpo
+"
+" Version 13.0 (Dec 2012)
+"     - NF: When completing column lists or drilling into a table
+"           and g:omni_sql_include_owner is enabled, the
+"           only the table name would be replaced with the column
+"           list instead of the table name and owner (if specified).
+"     - NF: When completing column lists using table aliases
+"           and g:omni_sql_include_owner is enabled, account
+"           for the owner name when looking up the table
+"           list instead of the table name and owner (if specified).
+"     - BF: When completing column lists or drilling into a table
+"           and g:omni_sql_include_owner is enabled, the
+"           column list could often not be found for the table.
+"     - BF: When OMNI popped up, possibly the wrong word
+"           would be replaced for column and column list options.
+"
+" Version 12.0 (Feb 2012)
+"     - Partial column name completion did not work when a table
+"       name or table alias was provided (Jonas Enberg).
+"     - Improved the handling of column completion.  First we match any
+"       columns from a previous completion.  If not matches are found, we
+"       consider the partial name to be a table or table alias for the
+"       query and attempt to match on it.
+"
+" Version 11.0 (Jan 2012)
+"     Added g:omni_sql_default_compl_type variable
+"         - You can specify which type of completion to default to
+"           when pressing <C-X><C-O>.  The entire list of available
+"           choices can be found in the calls to sqlcomplete#Map in:
+"               ftplugin/sql.vim
+"
 " Version 10.0
-"     Updated PreCacheSyntax() 
+"     Updated PreCacheSyntax()
 "         - Now returns a List of the syntax items it finds.
 "           This allows other plugins / scripts to use this list for their own
 "           purposes.  In this case XPTemplate can use them for a Choose list.
 "           warning if not.
 "         - Verifies the parameters are the correct type and displays a
 "           warning if not.
-"     Updated SQLCWarningMsg() 
+"     Updated SQLCWarningMsg()
 "         - Prepends warning message with SQLComplete so you know who issued
 "           the warning.
-"     Updated SQLCErrorMsg() 
+"     Updated SQLCErrorMsg()
 "         - Prepends error message with SQLComplete so you know who issued
 "           the error.
-"     
-" Version 9.0
+"
+" Version 9.0 (May 2010)
 "     This change removes some of the support for tables with spaces in their
-"     names in order to simplify the regexes used to pull out query table 
+"     names in order to simplify the regexes used to pull out query table
 "     aliases for more robust table name and column name code completion.
 "     Full support for "table names with spaces" can be added in again
 "     after 7.3.
 "
 " Version 8.0
-"     Incorrectly re-executed the g:ftplugin_sql_omni_key_right and g:ftplugin_sql_omni_key_left 
+"     Incorrectly re-executed the g:ftplugin_sql_omni_key_right and g:ftplugin_sql_omni_key_left
 "     when drilling in and out of a column list for a table.
 "
-" Version 7.0
+" Version 7.0 (Jan 2010)
 "     Better handling of object names
 "
-" Version 6.0
+" Version 6.0 (Apr 2008)
 "     Supports object names with spaces "my table name"
 "
 " Set completion with CTRL-X CTRL-O to autoloaded function.
 " This check is in place in case this script is
-" sourced directly instead of using the autoload feature. 
+" sourced directly instead of using the autoload feature.
 if exists('&omnifunc')
     " Do not set the option if already set since this
     " results in an E117 warning.
@@ -54,9 +101,11 @@ if exists('&omnifunc')
 endif
 
 if exists('g:loaded_sql_completion')
-    finish 
+    finish
 endif
-let g:loaded_sql_completion = 100
+let g:loaded_sql_completion = 150
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Maintains filename of dictionary
 let s:sql_file_table        = ""
@@ -69,17 +118,19 @@ let s:tbl_alias             = []
 let s:tbl_cols              = []
 let s:syn_list              = []
 let s:syn_value             = []
+
 " Used in conjunction with the syntaxcomplete plugin
 let s:save_inc              = ""
 let s:save_exc              = ""
-if exists('g:omni_syntax_group_include_sql')
-    let s:save_inc = g:omni_syntax_group_include_sql
+if !exists('g:omni_syntax_group_include_sql')
+    let g:omni_syntax_group_include_sql = ''
 endif
-if exists('g:omni_syntax_group_exclude_sql')
-    let s:save_exc = g:omni_syntax_group_exclude_sql
+if !exists('g:omni_syntax_group_exclude_sql')
+    let g:omni_syntax_group_exclude_sql = ''
 endif
+let s:save_inc = g:omni_syntax_group_include_sql
+let s:save_exc = g:omni_syntax_group_exclude_sql
+
 " Used with the column list
 let s:save_prev_table       = ""
 
@@ -90,12 +141,12 @@ endif
 " Default syntax items to precache
 if !exists('g:omni_sql_precache_syntax_groups')
     let g:omni_sql_precache_syntax_groups = [
-                \ 'syntax',
-                \ 'sqlKeyword',
-                \ 'sqlFunction',
-                \ 'sqlOption',
-                \ 'sqlType',
-                \ 'sqlStatement'
+                \ 'syntax\w*',
+                \ 'sqlKeyword\w*',
+                \ 'sqlFunction\w*',
+                \ 'sqlOption\w*',
+                \ 'sqlType\w*',
+                \ 'sqlStatement\w*'
                 \ ]
 endif
 " Set ignorecase to the ftplugin standard
@@ -110,14 +161,25 @@ if !exists('g:omni_sql_include_owner')
         if g:loaded_dbext >= 300
             " New to dbext 3.00, by default the table lists include the owner
             " name of the table.  This is used when determining how much of
-            " whatever has been typed should be replaced as part of the 
+            " whatever has been typed should be replaced as part of the
             " code replacement.
             let g:omni_sql_include_owner = 1
         endif
     endif
 endif
+" Default type of completion used when <C-X><C-O> is pressed
+if !exists('g:omni_sql_default_compl_type')
+    let g:omni_sql_default_compl_type = 'table'
+endif
 
 " This function is used for the 'omnifunc' option.
+" It is called twice by omni and it is responsible
+" for returning the completion list of items.
+" But it must also determine context of what to complete
+" and what to "replace" with the completion.
+" The a:base, is replaced directly with what the user
+" chooses from the choices.
+" The s:prepend provides context for the completion.
 function! sqlcomplete#Complete(findstart, base)
 
     " Default to table name completion
@@ -126,6 +188,7 @@ function! sqlcomplete#Complete(findstart, base)
     if exists('b:sql_compl_type')
         let compl_type = b:sql_compl_type
     endif
+    let begindot = 0
 
     " First pass through this function determines how much of the line should
     " be replaced by whatever is chosen from the completion list
@@ -134,13 +197,12 @@ function! sqlcomplete#Complete(findstart, base)
         let line     = getline('.')
         let start    = col('.') - 1
         let lastword = -1
-        let begindot = 0
         " Check if the first character is a ".", for column completion
         if line[start - 1] == '.'
             let begindot = 1
         endif
         while start > 0
-            " Additional code was required to handle objects which 
+            " Additional code was required to handle objects which
             " can contain spaces like "my table name".
             if line[start - 1] !~ '\(\w\|\.\)'
                 " If the previous character is not a period or word character
@@ -150,7 +212,7 @@ function! sqlcomplete#Complete(findstart, base)
             elseif line[start - 1] =~ '\w'
                 " If the previous character is word character continue back
                 let start -= 1
-            elseif line[start - 1] =~ '\.' && 
+            elseif line[start - 1] =~ '\.' &&
                         \ compl_type =~ 'column\|table\|view\|procedure'
                 " If the previous character is a period and we are completing
                 " an object which can be specified with a period like this:
@@ -160,7 +222,10 @@ function! sqlcomplete#Complete(findstart, base)
                 " If lastword has already been set for column completion
                 " break from the loop, since we do not also want to pickup
                 " a table name if it was also supplied.
-                if lastword != -1 && compl_type == 'column' 
+                " Unless g:omni_sql_include_owner == 1, then we can
+                " include the ownername.
+                if lastword != -1 && compl_type == 'column'
+                            \ && g:omni_sql_include_owner == 0
                     break
                 endif
                 " If column completion was specified stop at the "." if
@@ -171,8 +236,8 @@ function! sqlcomplete#Complete(findstart, base)
                 endif
                 " If omni_sql_include_owner = 0, do not include the table
                 " name as part of the substitution, so break here
-                if lastword == -1 && 
-                            \ compl_type =~ 'table\|view\|procedure\column_csv' && 
+                if lastword == -1 &&
+                            \ compl_type =~ '\<\(table\|view\|procedure\|column\|column_csv\)\>' &&
                             \ g:omni_sql_include_owner == 0
                     let lastword = start
                     break
@@ -202,7 +267,7 @@ function! sqlcomplete#Complete(findstart, base)
     let compl_list = []
 
     " Default to table name completion
-    let compl_type = 'table'
+    let compl_type = g:omni_sql_default_compl_type
     " Allow maps to specify what type of object completion they want
     if exists('b:sql_compl_type')
         let compl_type = b:sql_compl_type
@@ -216,7 +281,7 @@ function! sqlcomplete#Complete(findstart, base)
 
     if compl_type == 'table' ||
                 \ compl_type == 'procedure' ||
-                \ compl_type == 'view' 
+                \ compl_type == 'view'
 
         " This type of completion relies upon the dbext.vim plugin
         if s:SQLCCheck4dbext() == -1
@@ -254,7 +319,7 @@ function! sqlcomplete#Complete(findstart, base)
 
         if base == ""
             " The last time we displayed a column list we stored
-            " the table name.  If the user selects a column list 
+            " the table name.  If the user selects a column list
             " without a table name of alias present, assume they want
             " the previous column list displayed.
             let base = s:save_prev_table
@@ -269,20 +334,26 @@ function! sqlcomplete#Complete(findstart, base)
             let table  = matchstr( base, '^\(.*\.\)\?\zs.*\ze\..*' )
             let column = matchstr( base, '.*\.\zs.*' )
 
+            if g:omni_sql_include_owner == 1 && owner == '' && table != '' && column != ''
+                let owner  = table
+                let table  = column
+                let column = ''
+            endif
+
             " It is pretty well impossible to determine if the user
             " has entered:
             "    owner.table
             "    table.column_prefix
-            " So there are a couple of things we can do to mitigate 
+            " So there are a couple of things we can do to mitigate
             " this issue.
             "    1.  Check if the dbext plugin has the option turned
             "        on to even allow owners
             "    2.  Based on 1, if the user is showing a table list
-            "        and the DrillIntoTable (using <Right>) then 
+            "        and the DrillIntoTable (using <Right>) then
             "        this will be owner.table.  In this case, we can
-            "        check to see the table.column exists in the 
+            "        check to see the table.column exists in the
             "        cached table list.  If it does, then we have
-            "        determined the user has actually chosen 
+            "        determined the user has actually chosen
             "        owner.table, not table.column_prefix.
             let found = -1
             if g:omni_sql_include_owner == 1 && owner == ''
@@ -297,17 +368,46 @@ function! sqlcomplete#Complete(findstart, base)
             " If the user has indicated not to use table owners at all and
             " the base ends in a '.' we know they are not providing a column
             " name, so we can shift the items appropriately.
-            if found != -1 || (g:omni_sql_include_owner == 0 && base !~ '\.$')
-                let owner  = table
-                let table  = column
-                let column = ''
-            endif
+            if found != -1 || (g:omni_sql_include_owner == 0 && base !~ '\.$')
+                let owner  = table
+                let table  = column
+                let column = ''
+            endif
         else
+            " If no "." was provided and the user asked for
+            " column level completion, first attempt the match
+            " on any previous column lists.  If the user asked
+            " for a list of columns comma separated, continue as usual.
+            if compl_type == 'column' && s:save_prev_table != ''
+                " The last time we displayed a column list we stored
+                " the table name.  If the user selects a column list
+                " without a table name of alias present, assume they want
+                " the previous column list displayed.
+                let table     = s:save_prev_table
+                let list_type = ''
+
+                let compl_list  = s:SQLCGetColumns(table, list_type)
+                if ! empty(compl_list)
+                    " If no column prefix has been provided and the table
+                    " name was provided, append it to each of the items
+                    " returned.
+                    let compl_list = filter(deepcopy(compl_list), 'v:val=~"^'.base.'"' )
+
+                    " If not empty, we have a match on columns
+                    " return the list
+                    if ! empty(compl_list)
+                        return compl_list
+                    endif
+                endif
+            endif
+            " Since no columns were found to match the base supplied
+            " assume the user is trying to complete the column list
+            " for a table (and or an alias to a table).
             let table  = base
         endif
 
         " Get anything after the . and consider this the table name
-        " If an owner has been specified, then we must consider the 
+        " If an owner has been specified, then we must consider the
         " base to be a partial column name
         " let base  = matchstr( base, '^\(.*\.\)\?\zs.*' )
 
@@ -322,16 +422,25 @@ function! sqlcomplete#Complete(findstart, base)
                 let list_type     = 'csv'
             endif
 
-            let compl_list  = s:SQLCGetColumns(table, list_type)
+            " If we are including the OWNER for the objects, then for
+            " table completion, if we have it, it should be included
+            " as there can be the same table names in a database yet
+            " with different owner names.
+            if g:omni_sql_include_owner == 1 && owner != '' && table != ''
+                let compl_list  = s:SQLCGetColumns(owner.'.'.table, list_type)
+            else
+                let compl_list  = s:SQLCGetColumns(table, list_type)
+            endif
+
             if column != ''
                 " If no column prefix has been provided and the table
                 " name was provided, append it to each of the items
                 " returned.
-                let compl_list = map(compl_list, "table.'.'.v:val")
+                let compl_list = map(compl_list, 'table.".".v:val')
                 if owner != ''
                     " If an owner has been provided append it to each of the
                     " items returned.
-                    let compl_list = map(compl_list, "owner.'.'.v:val")
+                    let compl_list = map(compl_list, 'owner.".".v:val')
                 endif
             else
                 let base = ''
@@ -345,11 +454,14 @@ function! sqlcomplete#Complete(findstart, base)
         endif
     elseif compl_type == 'resetCache'
         " Reset all cached items
-        let s:tbl_name  = []
-        let s:tbl_alias = []
-        let s:tbl_cols  = []
-        let s:syn_list  = []
-        let s:syn_value = []
+        let s:tbl_name           = []
+        let s:tbl_alias          = []
+        let s:tbl_cols           = []
+        let s:syn_list           = []
+        let s:syn_value          = []
+        let s:sql_file_table     = ""
+        let s:sql_file_procedure = ""
+        let s:sql_file_view      = ""
 
         let msg = "All SQL cached items have been removed."
         call s:SQLCWarningMsg(msg)
@@ -361,22 +473,41 @@ function! sqlcomplete#Complete(findstart, base)
 
     if base != ''
         " Filter the list based on the first few characters the user entered.
-        " Check if the text matches at the beginning 
-        " or 
+        " Check if the text matches at the beginning
+        "         \\(^.base.'\\)
+        " or
         " Match to a owner.table or alias.column type match
+        "         ^\\(\\w\\+\\.\\)\\?'.base.'\\)
         " or
         " Handle names with spaces "my table name"
+        "         "\\(^'.base.'\\|^\\(\\w\\+\\.\\)\\?'.base.'\\)"'
+        "
         let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|^\\(\\w\\+\\.\\)\\?'.base.'\\)"'
         " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\)"'
         " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\(\\.\\)\\?'.base.'\\)"'
         " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\([^.]*\\)\\?'.base.'\\)"'
         let compl_list = filter(deepcopy(compl_list), expr)
+
+        if empty(compl_list) && compl_type == 'table' && base =~ '\.$'
+            " It is possible we could be looking for column name completion
+            " and the user simply hit C-X C-O to lets try it as well
+            " since we had no hits with the tables.
+            " If the base ends with a . it is hard to know if we are
+            " completing table names or column names.
+            let list_type = ''
+
+            let compl_list  = s:SQLCGetColumns(base, list_type)
+        endif
     endif
 
     if exists('b:sql_compl_savefunc') && b:sql_compl_savefunc != ""
         let &omnifunc = b:sql_compl_savefunc
     endif
 
+    if empty(compl_list)
+        call s:SQLCWarningMsg( 'Could not find type['.compl_type.'] using prepend[.'.s:prepended.'] base['.a:base.']' )
+    endif
+
     return compl_list
 endfunc
 
@@ -384,7 +515,7 @@ function! sqlcomplete#PreCacheSyntax(...)
     let syn_group_arr = []
     let syn_items     = []
 
-    if a:0 > 0 
+    if a:0 > 0
         if type(a:1) != 3
             call s:SQLCWarningMsg("Parameter is not a list. Example:['syntaxGroup1', 'syntaxGroup2']")
             return ''
@@ -407,7 +538,7 @@ endfunction
 function! sqlcomplete#ResetCacheSyntax(...)
     let syn_group_arr = []
 
-    if a:0 > 0 
+    if a:0 > 0
         if type(a:1) != 3
             call s:SQLCWarningMsg("Parameter is not a list. Example:['syntaxGroup1', 'syntaxGroup2']")
             return ''
@@ -458,7 +589,7 @@ function! sqlcomplete#DrillIntoTable()
        " If the popup is not visible, simple perform the normal
        " key behaviour.
        " Must use exec since they key must be preceeded by "\"
-       " or feedkeys will simply push each character of the string 
+       " or feedkeys will simply push each character of the string
        " rather than the "key press".
         exec 'call feedkeys("\'.g:ftplugin_sql_omni_key_right.'", "n")'
     endif
@@ -475,7 +606,7 @@ function! sqlcomplete#DrillOutOfColumns()
        " If the popup is not visible, simple perform the normal
        " key behaviour.
        " Must use exec since they key must be preceeded by "\"
-       " or feedkeys will simply push each character of the string 
+       " or feedkeys will simply push each character of the string
        " rather than the "key press".
         exec 'call feedkeys("\'.g:ftplugin_sql_omni_key_left.'", "n")'
     endif
@@ -484,16 +615,16 @@ endfunction
 
 function! s:SQLCWarningMsg(msg)
     echohl WarningMsg
-    echomsg 'SQLComplete:'.a:msg 
+    echomsg 'SQLComplete:'.a:msg
     echohl None
 endfunction
-      
+
 function! s:SQLCErrorMsg(msg)
     echohl ErrorMsg
-    echomsg 'SQLComplete:'.a:msg 
+    echomsg 'SQLComplete:'.a:msg
     echohl None
 endfunction
-      
+
 function! s:SQLCGetSyntaxList(syn_group)
     let syn_group  = a:syn_group
     let compl_list = []
@@ -504,19 +635,23 @@ function! s:SQLCGetSyntaxList(syn_group)
         " Return previously cached value
         let compl_list = s:syn_value[list_idx]
     else
-        " Request the syntax list items from the 
+        let s:save_inc = g:omni_syntax_group_include_sql
+        let s:save_exc = g:omni_syntax_group_exclude_sql
+        let g:omni_syntax_group_include_sql = ''
+        let g:omni_syntax_group_exclude_sql = ''
+
+        " Request the syntax list items from the
         " syntax completion plugin
         if syn_group == 'syntax'
             " Handle this special case.  This allows the user
             " to indicate they want all the syntax items available,
             " so do not specify a specific include list.
-            let g:omni_syntax_group_include_sql = ''
+            let syn_value                       = syntaxcomplete#OmniSyntaxList()
         else
             " The user has specified a specific syntax group
             let g:omni_syntax_group_include_sql = syn_group
+            let syn_value                       = syntaxcomplete#OmniSyntaxList(syn_group)
         endif
-        let g:omni_syntax_group_exclude_sql = ''
-        let syn_value                       = syntaxcomplete#OmniSyntaxList()
         let g:omni_syntax_group_include_sql = s:save_inc
         let g:omni_syntax_group_exclude_sql = s:save_exc
         " Cache these values for later use
@@ -552,7 +687,7 @@ function! s:SQLCAddAlias(table_name, table_alias, cols)
     let table_alias = a:table_alias
     let cols        = a:cols
 
-    if g:omni_sql_use_tbl_alias != 'n' 
+    if g:omni_sql_use_tbl_alias != 'n'
         if table_alias == ''
             if 'da' =~? g:omni_sql_use_tbl_alias
                 if table_name =~ '_'
@@ -562,13 +697,13 @@ function! s:SQLCAddAlias(table_name, table_alias, cols)
                     setlocal iskeyword-=_
 
                     " Get the first letter of each word
-                    " [[:alpha:]] is used instead of \w 
+                    " [[:alpha:]] is used instead of \w
                     " to catch extended accented characters
                     "
-                    let table_alias = substitute( 
-                                \ table_name, 
-                                \ '\<[[:alpha:]]\+\>_\?', 
-                                \ '\=strpart(submatch(0), 0, 1)', 
+                    let table_alias = substitute(
+                                \ table_name,
+                                \ '\<[[:alpha:]]\+\>_\?',
+                                \ '\=strpart(submatch(0), 0, 1)',
                                 \ 'g'
                                 \ )
                     " Restore original value
@@ -596,7 +731,7 @@ function! s:SQLCAddAlias(table_name, table_alias, cols)
     return cols
 endfunction
 
-function! s:SQLCGetObjectOwner(object) 
+function! s:SQLCGetObjectOwner(object)
     " The owner regex matches a word at the start of the string which is
     " followed by a dot, but doesn't include the dot in the result.
     " ^           - from beginning of line
@@ -609,11 +744,29 @@ function! s:SQLCGetObjectOwner(object)
     " let owner = matchstr( a:object, '^\s*\zs.*\ze\.' )
     let owner = matchstr( a:object, '^\("\|\[\)\?\zs\.\{-}\ze\("\|\]\)\?\.' )
     return owner
-endfunction 
+endfunction
 
 function! s:SQLCGetColumns(table_name, list_type)
+    if a:table_name =~ '\.'
+        " Check if the owner/creator has been specified
+        let owner  = matchstr( a:table_name, '^\zs.*\ze\..*\..*' )
+        let table  = matchstr( a:table_name, '^\(.*\.\)\?\zs.*\ze\..*' )
+        let column = matchstr( a:table_name, '.*\.\zs.*' )
+
+        if g:omni_sql_include_owner == 1 && owner == '' && table != '' && column != ''
+            let owner  = table
+            let table  = column
+            let column = ''
+        endif
+    else
+        let owner  = ''
+        let table  = matchstr(a:table_name, '^["\[\]a-zA-Z0-9_ ]\+\ze\.\?')
+        let column = ''
+    endif
+
     " Check if the table name was provided as part of the column name
-    let table_name   = matchstr(a:table_name, '^["\[\]a-zA-Z0-9_ ]\+\ze\.\?')
+    " let table_name   = matchstr(a:table_name, '^["\[\]a-zA-Z0-9_ ]\+\ze\.\?')
+    let table_name   = table
     let table_cols   = []
     let table_alias  = ''
     let move_to_top  = 1
@@ -636,7 +789,7 @@ function! s:SQLCGetColumns(table_name, list_type)
     if list_idx > -1
         let table_cols = split(s:tbl_cols[list_idx], '\n')
     else
-        " Check if we have already cached the column list for this table 
+        " Check if we have already cached the column list for this table
         " by its alias, assuming the table_name provided was actually
         " the alias for the table instead
         "     select *
@@ -654,7 +807,7 @@ function! s:SQLCGetColumns(table_name, list_type)
     " And the table ends in a "." or we are looking for a column list
     " if list_idx == -1 && (a:table_name =~ '\.' || b:sql_compl_type =~ 'column')
     " if list_idx == -1 && (a:table_name =~ '\.' || a:list_type =~ 'csv')
-    if list_idx == -1 
+    if list_idx == -1
          let saveY      = @y
          let saveSearch = @/
          let saveWScan  = &wrapscan
@@ -665,7 +818,7 @@ function! s:SQLCGetColumns(table_name, list_type)
          setlocal nowrapscan
          " If . was entered, look at the word just before the .
          " We are looking for something like this:
-         "    select * 
+         "    select *
          "      from customer c
          "     where c.
          " So when . is pressed, we need to find 'c'
@@ -692,15 +845,15 @@ function! s:SQLCGetColumns(table_name, list_type)
          " if query =~? '^\c\(select\)'
          if query =~? '^\(select\|update\|delete\)'
              let found = 1
-             "  \(\(\<\w\+\>\)\.\)\?   - 
+             "  \(\(\<\w\+\>\)\.\)\?   -
              " '\c\(from\|join\|,\).\{-}'  - Starting at the from clause (case insensitive)
              " '\zs\(\(\<\w\+\>\)\.\)\?' - Get the owner name (optional)
-             " '\<\w\+\>\ze' - Get the table name 
+             " '\<\w\+\>\ze' - Get the table name
              " '\s\+\<'.table_name.'\>' - Followed by the alias
              " '\s*\.\@!.*'  - Cannot be followed by a .
              " '\(\<where\>\|$\)' - Must be followed by a WHERE clause
              " '.*'  - Exclude the rest of the line in the match
-             " let table_name_new = matchstr(@y, 
+             " let table_name_new = matchstr(@y,
              "             \ '\c\(from\|join\|,\).\{-}'.
              "             \ '\zs\(\("\|\[\)\?.\{-}\("\|\]\)\.\)\?'.
              "             \ '\("\|\[\)\?.\{-}\("\|\]\)\?\ze'.
@@ -711,7 +864,16 @@ function! s:SQLCGetColumns(table_name, list_type)
              "             \ '\(\<where\>\|$\)'.
              "             \ '.*'
              "             \ )
-             let table_name_new = matchstr(@y, 
+             "
+             "
+             " ''\c\(\<from\>\|\<join\>\|,\)\s*'  - Starting at the from clause (case insensitive)
+             " '\zs\(\("\|\[\)\?\w\+\("\|\]\)\?\.\)\?' - Get the owner name (optional)
+             " '\("\|\[\)\?\w\+\("\|\]\)\?\ze' - Get the table name
+             " '\s\+\%(as\s\+\)\?\<'.matchstr(table_name, '.\{-}\ze\.\?$').'\>' - Followed by the alias
+             " '\s*\.\@!.*'  - Cannot be followed by a .
+             " '\(\<where\>\|$\)' - Must be followed by a WHERE clause
+             " '.*'  - Exclude the rest of the line in the match
+             let table_name_new = matchstr(@y,
                          \ '\c\(\<from\>\|\<join\>\|,\)\s*'.
                          \ '\zs\(\("\|\[\)\?\w\+\("\|\]\)\?\.\)\?'.
                          \ '\("\|\[\)\?\w\+\("\|\]\)\?\ze'.
@@ -725,7 +887,12 @@ function! s:SQLCGetColumns(table_name, list_type)
 
              if table_name_new != ''
                  let table_alias = table_name
-                 let table_name  = matchstr( table_name_new, '^\(.*\.\)\?\zs.*\ze' )
+                 if g:omni_sql_include_owner == 1
+                    let table_name  = matchstr( table_name_new, '^\zs\(.\{-}\.\)\?\(.\{-}\.\)\?.*\ze' )
+                 else
+                     " let table_name  = matchstr( table_name_new, '^\(.*\.\)\?\zs.*\ze' )
+                    let table_name  = matchstr( table_name_new, '^\(.\{-}\.\)\?\zs\(.\{-}\.\)\?.*\ze' )
+                 endif
 
                  let list_idx = index(s:tbl_name, table_name, 0, &ignorecase)
                  if list_idx > -1
@@ -753,7 +920,7 @@ function! s:SQLCGetColumns(table_name, list_type)
 
          " Return to previous location
          call cursor(curline, curcol)
-         
+
          if found == 0
              if g:loaded_dbext > 300
                  exec 'DBSetOption use_tbl_alias='.saveSettingAlias
@@ -762,12 +929,13 @@ function! s:SQLCGetColumns(table_name, list_type)
              " Not a SQL statement, do not display a list
              return []
          endif
-    endif 
+    endif
 
     if empty(table_cols)
         " Specify silent mode, no messages to the user (tbl, 1)
         " Specify do not comma separate (tbl, 1, 1)
-        let table_cols_str = DB_getListColumn(table_name, 1, 1)
+        " let table_cols_str = DB_getListColumn(table_name, 1, 1)
+        let table_cols_str = DB_getListColumn((owner!=''?owner.'.':'').table_name, 1, 1)
 
         if table_cols_str != ""
             let s:tbl_name  = add( s:tbl_name,  table_name )
@@ -793,3 +961,7 @@ function! s:SQLCGetColumns(table_name, list_type)
 
     return table_cols
 endfunction
+"  Restore:
+let &cpo= s:keepcpo
+unlet s:keepcpo
+" vim: ts=4 fdm=marker
index 7b96bfd..a18c3c3 100644 (file)
@@ -1,38 +1,80 @@
 " Vim completion script
 " Language:    All languages, uses existing syntax highlighting rules
 " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
-" Version:     7.0
-" Last Change: 2010 Jul 29
-" Usage:       For detailed help, ":help ft-syntax-omni" 
+" Version:     13.0
+" Last Change: 2013 May 14
+" Usage:       For detailed help, ":help ft-syntax-omni"
 
 " History
 "
+" Version 13.0
+"   - Extended the option omni_syntax_group_include_{filetype}
+"     to accept a comma separated list of regex's rather than
+"     string.  For example, for the javascript filetype you could
+"     use:
+"        let g:omni_syntax_group_include_javascript = 'javascript\w\+,jquery\w\+'
+"   - Some syntax files (perl.vim) use the match // syntax as a mechanism
+"     to identify keywords.  This update attempts to parse the
+"     match syntax and pull out syntax items which are at least
+"     3 words or more.
+"
+" Version 12.0
+"   - It is possible to have '-' as part of iskeyword, when
+"     checking for character ranges, tighten up the regex.
+"     E688: More targets than List items.
+"
+" Version 11.0
+"   - Corrected which characters required escaping during
+"     substitution calls.
+"
+" Version 10.0
+"   - Cycle through all the character ranges specified in the
+"     iskeyword option and build a list of valid word separators.
+"     Prior to this change, only actual characters were used,
+"     where for example ASCII "45" == "-".  If "45" were used
+"     in iskeyword the hyphen would not be picked up.
+"     This introduces a new option, since the character ranges
+"     specified could be multibyte:
+"         let g:omni_syntax_use_single_byte = 1
+"   - This by default will only allow single byte ASCII
+"     characters to be added and an additional check to ensure
+"     the charater is printable (see documentation for isprint).
+"
+" Version 9.0
+"   - Add the check for cpo.
+"
+" Version 8.0
+"   - Updated SyntaxCSyntaxGroupItems()
+"         - Some additional syntax items were also allowed
+"           on nextgroup= lines which were ignored by default.
+"           Now these lines are processed independently.
+"
 " Version 7.0
-"     Updated syntaxcomplete#OmniSyntaxList()
+"   - Updated syntaxcomplete#OmniSyntaxList()
 "         - Looking up the syntax groups defined from a syntax file
-"           looked for only 1 format of {filetype}GroupName, but some 
+"           looked for only 1 format of {filetype}GroupName, but some
 "           syntax writers use this format as well:
 "               {b:current_syntax}GroupName
-"           OmniSyntaxList() will now check for both if the first
+"   -       OmniSyntaxList() will now check for both if the first
 "           method does not find a match.
 "
 " Version 6.0
-"     Added syntaxcomplete#OmniSyntaxList()
-"         - Allows other plugins to use this for their own 
+"   - Added syntaxcomplete#OmniSyntaxList()
+"         - Allows other plugins to use this for their own
 "           purposes.
 "         - It will return a List of all syntax items for the
-"           syntax group name passed in.  
-"         - XPTemplate for SQL will use this function via the 
+"           syntax group name passed in.
+"         - XPTemplate for SQL will use this function via the
 "           sqlcomplete plugin to populate a Choose box.
 "
 " Version 5.0
-"     Updated SyntaxCSyntaxGroupItems()
+"   - Updated SyntaxCSyntaxGroupItems()
 "         - When processing a list of syntax groups, the final group
 "           was missed in function SyntaxCSyntaxGroupItems.
 "
 " Set completion with CTRL-X CTRL-O to autoloaded function.
 " This check is in place in case this script is
-" sourced directly instead of using the autoload feature. 
+" sourced directly instead of using the autoload feature.
 if exists('+omnifunc')
     " Do not set the option if already set since this
     " results in an E117 warning.
@@ -42,9 +84,13 @@ if exists('+omnifunc')
 endif
 
 if exists('g:loaded_syntax_completion')
-    finish 
+    finish
 endif
-let g:loaded_syntax_completion = 70
+let g:loaded_syntax_completion = 130
+
+" Turn on support for line continuations when creating the script
+let s:cpo_save = &cpo
+set cpo&vim
 
 " Set ignorecase to the ftplugin standard
 " This is the default setting, but if you define a buffer local
@@ -61,6 +107,18 @@ if !exists('g:omni_syntax_use_iskeyword')
     let g:omni_syntax_use_iskeyword = 1
 endif
 
+" When using iskeyword, this setting controls whether the characters
+" should be limited to single byte characters.
+if !exists('g:omni_syntax_use_single_byte')
+    let g:omni_syntax_use_single_byte = 1
+endif
+
+" When using iskeyword, this setting controls whether the characters
+" should be limited to single byte characters.
+if !exists('g:omni_syntax_use_iskeyword_numeric')
+    let g:omni_syntax_use_iskeyword_numeric = 1
+endif
+
 " Only display items in the completion window that are at least
 " this many characters in length.
 " This is the default setting, but if you define a buffer local
@@ -71,8 +129,10 @@ endif
 
 " This script will build a completion list based on the syntax
 " elements defined by the files in $VIMRUNTIME/syntax.
-let s:syn_remove_words = 'match,matchgroup=,contains,'.
-            \ 'links to,start=,end=,nextgroup='
+" let s:syn_remove_words = 'match,matchgroup=,contains,'.
+let s:syn_remove_words = 'matchgroup=,contains,'.
+            \ 'links to,start=,end='
+            " \ 'links to,start=,end=,nextgroup='
 
 let s:cache_name = []
 let s:cache_list = []
@@ -151,7 +211,7 @@ endfunc
 function! syntaxcomplete#OmniSyntaxList(...)
     if a:0 > 0
         let parms = []
-        if 3 == type(a:1) 
+        if 3 == type(a:1)
             let parms = a:1
         elseif 1 == type(a:1)
             let parms = split(a:1, ',')
@@ -165,7 +225,7 @@ endfunc
 function! OmniSyntaxList(...)
     let list_parms = []
     if a:0 > 0
-        if 3 == type(a:1) 
+        if 3 == type(a:1)
             let list_parms = a:1
         elseif 1 == type(a:1)
             let list_parms = split(a:1, ',')
@@ -201,18 +261,18 @@ function! OmniSyntaxList(...)
 
     let saveL = @l
     let filetype = substitute(&filetype, '\.', '_', 'g')
-    
+
     if empty(list_parms)
         " Default the include group to include the requested syntax group
         let syntax_group_include_{filetype} = ''
         " Check if there are any overrides specified for this filetype
         if exists('g:omni_syntax_group_include_'.filetype)
             let syntax_group_include_{filetype} =
-                        \ substitute( g:omni_syntax_group_include_{filetype},'\s\+','','g') 
+                        \ substitute( g:omni_syntax_group_include_{filetype},'\s\+','','g')
             let list_parms = split(g:omni_syntax_group_include_{filetype}, ',')
             if syntax_group_include_{filetype} =~ '\w'
-                let syntax_group_include_{filetype} = 
-                            \ substitute( syntax_group_include_{filetype}, 
+                let syntax_group_include_{filetype} =
+                            \ substitute( syntax_group_include_{filetype},
                             \ '\s*,\s*', '\\|', 'g'
                             \ )
             endif
@@ -222,24 +282,34 @@ function! OmniSyntaxList(...)
     endif
 
     " Loop through all the syntax groupnames, and build a
-    " syntax file which contains these names.  This can 
+    " syntax file which contains these names.  This can
     " work generically for any filetype that does not already
     " have a plugin defined.
     " This ASSUMES the syntax groupname BEGINS with the name
-    " of the filetype.  From my casual viewing of the vim7\syntax 
+    " of the filetype.  From my casual viewing of the vim7\syntax
     " directory this is true for almost all syntax definitions.
     " As an example, the SQL syntax groups have this pattern:
     "     sqlType
     "     sqlOperators
     "     sqlKeyword ...
-    redir @l
-    silent! exec 'syntax list '.join(list_parms)
-    redir END
+    if !empty(list_parms) && empty(substitute(join(list_parms), '[a-zA-Z ]', '', 'g'))
+        " If list_parms only includes word characters, use it to limit
+        " the syntax elements.
+        " If using regex syntax list will fail to find those items, so
+        " simply grab the who syntax list.
+        redir @l
+        silent! exec 'syntax list '.join(list_parms)
+        redir END
+    else
+        redir @l
+        silent! exec 'syntax list'
+        redir END
+    endif
 
     let syntax_full = "\n".@l
     let @l = saveL
 
-    if syntax_full =~ 'E28' 
+    if syntax_full =~ 'E28'
                 \ || syntax_full =~ 'E411'
                 \ || syntax_full =~ 'E415'
                 \ || syntax_full =~ 'No Syntax items'
@@ -249,7 +319,7 @@ function! OmniSyntaxList(...)
     let filetype = substitute(&filetype, '\.', '_', 'g')
 
     let list_exclude_groups = []
-    if a:0 > 0 
+    if a:0 > 0
         " Do nothing since we have specific a specific list of groups
     else
         " Default the exclude group to nothing
@@ -257,93 +327,178 @@ function! OmniSyntaxList(...)
         " Check if there are any overrides specified for this filetype
         if exists('g:omni_syntax_group_exclude_'.filetype)
             let syntax_group_exclude_{filetype} =
-                        \ substitute( g:omni_syntax_group_exclude_{filetype},'\s\+','','g') 
+                        \ substitute( g:omni_syntax_group_exclude_{filetype},'\s\+','','g')
             let list_exclude_groups = split(g:omni_syntax_group_exclude_{filetype}, ',')
-            if syntax_group_exclude_{filetype} =~ '\w' 
-                let syntax_group_exclude_{filetype} = 
-                            \ substitute( syntax_group_exclude_{filetype}, 
+            if syntax_group_exclude_{filetype} =~ '\w'
+                let syntax_group_exclude_{filetype} =
+                            \ substitute( syntax_group_exclude_{filetype},
                             \ '\s*,\s*', '\\|', 'g'
                             \ )
             endif
         endif
     endif
 
-    " Sometimes filetypes can be composite names, like c.doxygen
-    " Loop through each individual part looking for the syntax
-    " items specific to each individual filetype.
+    if empty(list_parms)
+        let list_parms = [&filetype.'\w\+']
+    endif
+
     let syn_list = ''
-    let ftindex  = 0
-    let ftindex  = match(&filetype, '\w\+', ftindex)
-
-    while ftindex > -1
-        let ft_part_name = matchstr( &filetype, '\w\+', ftindex )
-
-        " Syntax rules can contain items for more than just the current 
-        " filetype.  They can contain additional items added by the user
-        " via autocmds or their vimrc.
-        " Some syntax files can be combined (html, php, jsp).
-        " We want only items that begin with the filetype we are interested in.
-        let next_group_regex = '\n' .
-                    \ '\zs'.ft_part_name.'\w\+\ze'.
-                    \ '\s\+xxx\s\+' 
-        let index    = 0
-        let index    = match(syntax_full, next_group_regex, index)
-
-        if index == -1 && exists('b:current_syntax') && ft_part_name != b:current_syntax
-            " There appears to be two standards when writing syntax files.
-            " Either items begin as:
-            "     syn keyword {filetype}Keyword         values ...
-            "     let b:current_syntax = "sql"
-            "     let b:current_syntax = "sqlanywhere"
-            " Or
-            "     syn keyword {syntax_filename}Keyword  values ...
-            "     let b:current_syntax = "mysql"
-            " So, we will make the format of finding the syntax group names
-            " a bit more flexible and look for both if the first fails to 
-            " find a match.
+    let index    = 0
+    for group_regex in list_parms
+        " Sometimes filetypes can be composite names, like c.doxygen
+        " Loop through each individual part looking for the syntax
+        " items specific to each individual filetype.
+        " let ftindex  = 0
+        " let ftindex  = match(syntax_full, group_regex, ftindex)
+
+        " while ftindex > -1
+            " let ft_part_name = matchstr( syntax_full, '\w\+', ftindex )
+
+            " Syntax rules can contain items for more than just the current
+            " filetype.  They can contain additional items added by the user
+            " via autocmds or their vimrc.
+            " Some syntax files can be combined (html, php, jsp).
+            " We want only items that begin with the filetype we are interested in.
             let next_group_regex = '\n' .
-                        \ '\zs'.b:current_syntax.'\w\+\ze'.
-                        \ '\s\+xxx\s\+' 
-            let index    = 0
+                        \ '\zs'.group_regex.'\ze'.
+                        \ '\s\+xxx\s\+'
             let index    = match(syntax_full, next_group_regex, index)
-        endif
 
-        while index > -1
-            let group_name = matchstr( syntax_full, '\w\+', index )
-
-            let get_syn_list = 1
-            for exclude_group_name in list_exclude_groups
-                if '\<'.exclude_group_name.'\>' =~ '\<'.group_name.'\>'
-                    let get_syn_list = 0
-                endif
-            endfor
-        
-            " This code is no longer needed in version 6.0 since we have
-            " augmented the syntax list command to only retrieve the syntax 
-            " groups we are interested in.
-            "
-            " if get_syn_list == 1
-            "     if syntax_group_include_{filetype} != ''
-            "         if '\<'.syntax_group_include_{filetype}.'\>' !~ '\<'.group_name.'\>'
-            "             let get_syn_list = 0
-            "         endif
-            "     endif
-            " endif
-
-            if get_syn_list == 1
-                " Pass in the full syntax listing, plus the group name we 
-                " are interested in.
-                let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
-                let syn_list = syn_list . extra_syn_list . "\n"
+            " For the matched group name, strip off any of the regex special
+            " characters and see if we get a match with the current syntax
+            if index == -1 && exists('b:current_syntax') && substitute(group_regex, '[^a-zA-Z ]\+.*', '', 'g') !~ '^'.b:current_syntax
+                " There appears to be two standards when writing syntax files.
+                " Either items begin as:
+                "     syn keyword {filetype}Keyword         values ...
+                "     let b:current_syntax = "sql"
+                "     let b:current_syntax = "sqlanywhere"
+                " Or
+                "     syn keyword {syntax_filename}Keyword  values ...
+                "     let b:current_syntax = "mysql"
+                " So, we will make the format of finding the syntax group names
+                " a bit more flexible and look for both if the first fails to
+                " find a match.
+                let next_group_regex = '\n' .
+                            \ '\zs'.b:current_syntax.'\w\+\ze'.
+                            \ '\s\+xxx\s\+'
+                let index    = 0
+                let index    = match(syntax_full, next_group_regex, index)
             endif
 
-            let index = index + strlen(group_name)
-            let index = match(syntax_full, next_group_regex, index)
-        endwhile
+            while index > -1
+                let group_name = matchstr( syntax_full, '\w\+', index )
+
+                let get_syn_list = 1
+                for exclude_group_name in list_exclude_groups
+                    if '\<'.exclude_group_name.'\>' =~ '\<'.group_name.'\>'
+                        let get_syn_list = 0
+                    endif
+                endfor
+
+                " This code is no longer needed in version 6.0 since we have
+                " augmented the syntax list command to only retrieve the syntax
+                " groups we are interested in.
+                "
+                " if get_syn_list == 1
+                "     if syntax_group_include_{filetype} != ''
+                "         if '\<'.syntax_group_include_{filetype}.'\>' !~ '\<'.group_name.'\>'
+                "             let get_syn_list = 0
+                "         endif
+                "     endif
+                " endif
+
+                if get_syn_list == 1
+                    " Pass in the full syntax listing, plus the group name we
+                    " are interested in.
+                    let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
+                    let syn_list = syn_list . extra_syn_list . "\n"
+                endif
 
-        let ftindex  = ftindex + len(ft_part_name)
-        let ftindex  = match( &filetype, '\w\+', ftindex )
-    endwhile
+                let index = index + strlen(group_name)
+                let index = match(syntax_full, next_group_regex, index)
+            endwhile
+
+            " let ftindex  = ftindex + len(ft_part_name)
+            " let ftindex  = match( syntax_full, group_regex, ftindex )
+        " endwhile
+    endfor
+
+"   " Sometimes filetypes can be composite names, like c.doxygen
+"   " Loop through each individual part looking for the syntax
+"   " items specific to each individual filetype.
+"   let syn_list = ''
+"   let ftindex  = 0
+"   let ftindex  = match(&filetype, '\w\+', ftindex)
+
+"   while ftindex > -1
+"       let ft_part_name = matchstr( &filetype, '\w\+', ftindex )
+
+"       " Syntax rules can contain items for more than just the current
+"       " filetype.  They can contain additional items added by the user
+"       " via autocmds or their vimrc.
+"       " Some syntax files can be combined (html, php, jsp).
+"       " We want only items that begin with the filetype we are interested in.
+"       let next_group_regex = '\n' .
+"                   \ '\zs'.ft_part_name.'\w\+\ze'.
+"                   \ '\s\+xxx\s\+'
+"       let index    = 0
+"       let index    = match(syntax_full, next_group_regex, index)
+
+"       if index == -1 && exists('b:current_syntax') && ft_part_name != b:current_syntax
+"           " There appears to be two standards when writing syntax files.
+"           " Either items begin as:
+"           "     syn keyword {filetype}Keyword         values ...
+"           "     let b:current_syntax = "sql"
+"           "     let b:current_syntax = "sqlanywhere"
+"           " Or
+"           "     syn keyword {syntax_filename}Keyword  values ...
+"           "     let b:current_syntax = "mysql"
+"           " So, we will make the format of finding the syntax group names
+"           " a bit more flexible and look for both if the first fails to
+"           " find a match.
+"           let next_group_regex = '\n' .
+"                       \ '\zs'.b:current_syntax.'\w\+\ze'.
+"                       \ '\s\+xxx\s\+'
+"           let index    = 0
+"           let index    = match(syntax_full, next_group_regex, index)
+"       endif
+
+"       while index > -1
+"           let group_name = matchstr( syntax_full, '\w\+', index )
+
+"           let get_syn_list = 1
+"           for exclude_group_name in list_exclude_groups
+"               if '\<'.exclude_group_name.'\>' =~ '\<'.group_name.'\>'
+"                   let get_syn_list = 0
+"               endif
+"           endfor
+
+"           " This code is no longer needed in version 6.0 since we have
+"           " augmented the syntax list command to only retrieve the syntax
+"           " groups we are interested in.
+"           "
+"           " if get_syn_list == 1
+"           "     if syntax_group_include_{filetype} != ''
+"           "         if '\<'.syntax_group_include_{filetype}.'\>' !~ '\<'.group_name.'\>'
+"           "             let get_syn_list = 0
+"           "         endif
+"           "     endif
+"           " endif
+
+"           if get_syn_list == 1
+"               " Pass in the full syntax listing, plus the group name we
+"               " are interested in.
+"               let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
+"               let syn_list = syn_list . extra_syn_list . "\n"
+"           endif
+
+"           let index = index + strlen(group_name)
+"           let index = match(syntax_full, next_group_regex, index)
+"       endwhile
+
+"       let ftindex  = ftindex + len(ft_part_name)
+"       let ftindex  = match( &filetype, '\w\+', ftindex )
+"   endwhile
 
     " Convert the string to a List and sort it.
     let compl_list = sort(split(syn_list))
@@ -385,7 +540,7 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
     "     \|           - 2nd potential match
     "     \%$          - matches end of the file or string
     "     \)           - end a group
-    let syntax_group = matchstr(a:syntax_full, 
+    let syntax_group = matchstr(a:syntax_full,
                 \ "\n".a:group_name.'\s\+xxx\s\+\zs.\{-}\ze\(\n\w\|\%$\)'
                 \ )
 
@@ -395,26 +550,97 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
 
         " We only want the words for the lines begining with
         " containedin, but there could be other items.
-        
+
         " Tried to remove all lines that do not begin with contained
         " but this does not work in all cases since you can have
         "    contained nextgroup=...
         " So this will strip off the ending of lines with known
         " keywords.
-        let syn_list = substitute( 
+        let syn_list = substitute(
                     \    syntax_group, '\<\('.
                     \    substitute(
                     \      escape(s:syn_remove_words, '\\/.*$^~[]')
                     \      , ',', '\\|', 'g'
                     \    ).
                     \    '\).\{-}\%($\|'."\n".'\)'
-                    \    , "\n", 'g' 
+                    \    , "\n", 'g'
                     \  )
 
-        " Now strip off the newline + blank space + contained
-        let syn_list = substitute( 
-                    \    syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\)'
-                    \    , "", 'g' 
+        " Attempt to deal with lines using the match syntax
+        " javaScriptDocTags xxx match /@\(param\|argument\|requires\|file\)\>/
+        " Though it can use any types of regex, so this plugin will attempt
+        " to restrict it
+        " 1.  Only use \( or \%( constructs remove all else
+        " 2   Remove and []s
+        " 3.  Account for match //constructs
+        "                       \%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?
+        " 4.  Hope for the best
+        "
+        "
+        let syn_list_old = syn_list
+        while syn_list =~ '\<match\>\s\+\/'
+            if syn_list =~ 'perlElseIfError'
+                let syn_list = syn_list
+            endif
+            " Check if the match has words at least 3 characters long
+            if syn_list =~ '\<match \/\zs.\{-}\<\w\{3,}\>.\{-}\ze\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+'
+                " Remove everything after / and before the first \(
+                let syn_list = substitute( syn_list, '\<match \/\zs.\{-}\ze\\%\?(.\{-}\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
+                " Remove everything after \) and up to the ending /
+                let syn_list = substitute( syn_list, '\<match \/.\{-}\\)\zs.\{-}\ze\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
+
+                " Remove any character classes
+                " let syn_list = substitute( syn_list, '\<match /\zs.\{-}\[[^]]*\].\{-}\ze\/ ', '', 'g' )
+                let syn_list = substitute( syn_list, '\%(\<match \/[^/]\{-}\)\@<=\[[^]]*\]\ze.\{-}\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?', '', 'g' )
+                " Remove any words < 3 characters
+                let syn_list = substitute( syn_list, '\%(\<match \/[^/]\{-}\)\@<=\<\w\{1,2}\>\ze.\{-}\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
+                " Remove all non-word characters
+                " let syn_list = substitute( syn_list, '\<match /\zs.\{-}\<\W\+\>.\{-}\ze\/ ', "", 'g' )
+                " let syn_list = substitute( syn_list, '\%(\<match \/[^/]\{-}\)\@<=\W\+\ze.\{-}\/ ', ' ', 'g' )
+                " Do this by using the outer substitue() call to gather all
+                " text between the match /.../ tags.
+                " The inner substitute() call operates on the text selected
+                " and replaces all non-word characters.
+                let syn_list = substitute( syn_list, '\<match \/\zs\(.\{-}\)\ze\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+'
+                            \ , '\=substitute(submatch(1), "\\W\\+", " ", "g")'
+                            \ , 'g' )
+                " Remove the match / / syntax
+                let syn_list = substitute( syn_list, '\<match \/\(.\{-}\)\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '\1', 'g' )
+            else
+                " No words long enough, remove the match
+                " Remove the match syntax
+                " let syn_list = substitute( syn_list, '\<match \/[^\/]*\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
+                let syn_list = substitute( syn_list, '\<match \/\%(.\{-}\)\?\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
+            endif
+            if syn_list =~ '\<match\>\s\+\/'
+                " Problem removing the match / / tags
+                let syn_list = ''
+            endif
+        endwhile
+
+
+        " Now strip off the newline + blank space + contained.
+        " Also include lines with nextgroup=@someName skip_key_words syntax_element
+                    " \    syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\|nextgroup=\)'
+                    " \    syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\|nextgroup=[@a-zA-Z,]*\)'
+        let syn_list = substitute(
+                    \    syn_list, '\<\(contained\|nextgroup=[@a-zA-Z,]*\)'
+                    \    , "", 'g'
+                    \ )
+
+        " This can leave lines like this
+        "     =@vimMenuList  skipwhite onoremenu
+        " Strip the special option keywords first
+        "     :h :syn-skipwhite*
+        let syn_list = substitute(
+                    \    syn_list, '\<\(skipwhite\|skipnl\|skipempty\)\>'
+                    \    , "", 'g'
+                    \ )
+
+        " Now remove the remainder of the nextgroup=@someName lines
+        let syn_list = substitute(
+                    \    syn_list, '\%(^\|\n\)\@<=\s*\(@\w\+\)'
+                    \    , "", 'g'
                     \ )
 
         if b:omni_syntax_use_iskeyword == 0
@@ -423,19 +649,74 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
             " This will replace non-word characters with spaces.
             let syn_list = substitute( syn_list, '[^0-9A-Za-z_ ]', ' ', 'g' )
         else
-            let accept_chars = ','.&iskeyword.','
-            " Remove all character ranges
-            " let accept_chars = substitute(accept_chars, ',[^,]\+-[^,]\+,', ',', 'g')
-            let accept_chars = substitute(accept_chars, ',\@<=[^,]\+-[^,]\+,', '', 'g')
-            " Remove all numeric specifications
-            " let accept_chars = substitute(accept_chars, ',\d\{-},', ',', 'g')
-            let accept_chars = substitute(accept_chars, ',\@<=\d\{-},', '', 'g')
-            " Remove all commas
-            let accept_chars = substitute(accept_chars, ',', '', 'g')
-            " Escape special regex characters
-            let accept_chars = escape(accept_chars, '\\/.*$^~[]' )
-            " Remove all characters that are not acceptable
-            let syn_list = substitute( syn_list, '[^0-9A-Za-z_ '.accept_chars.']', ' ', 'g' )
+            if g:omni_syntax_use_iskeyword_numeric == 1
+                " iskeyword can contain value like this
+                " 38,42,43,45,47-58,60-62,64-90,97-122,_,+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
+                " Numeric values convert to their ASCII equivalent using the
+                " nr2char() function.
+                "     &       38
+                "     *       42
+                "     +       43
+                "     -       45
+                "     ^       94
+                " Iterate through all numeric specifications and convert those
+                " to their ascii equivalent ensuring the character is printable.
+                " If so, add it to the list.
+                let accepted_chars = ''
+                for item in split(&iskeyword, ',')
+                    if item =~ '\d-\d'
+                        " This is a character range (ie 47-58),
+                        " cycle through each character within the range
+                        let [b:start, b:end] = split(item, '-')
+                        for range_item in range( b:start, b:end )
+                            if range_item <= 127 || g:omni_syntax_use_single_byte == 0
+                                if nr2char(range_item) =~ '\p'
+                                    let accepted_chars = accepted_chars . nr2char(range_item)
+                                endif
+                            endif
+                        endfor
+                    elseif item =~ '^\d\+$'
+                        " Only numeric, translate to a character
+                        if item < 127 || g:omni_syntax_use_single_byte == 0
+                            if nr2char(item) =~ '\p'
+                                let accepted_chars = accepted_chars . nr2char(item)
+                            endif
+                        endif
+                    else
+                        if char2nr(item) < 127 || g:omni_syntax_use_single_byte == 0
+                            if item =~ '\p'
+                                let accepted_chars = accepted_chars . item
+                            endif
+                        endif
+                    endif
+                endfor
+                " Escape special regex characters
+                " Looks like the wrong chars are escaped.  In a collection,
+                "      :h /[]
+                "      only `]', `\', `-' and `^' are special:
+                " let accepted_chars = escape(accepted_chars, '\\/.*$^~[]' )
+                let accepted_chars = escape(accepted_chars, ']\-^' )
+                " Remove all characters that are not acceptable
+                let syn_list = substitute( syn_list, '[^A-Za-z'.accepted_chars.']', ' ', 'g' )
+            else
+                let accept_chars = ','.&iskeyword.','
+                " Remove all character ranges
+                " let accept_chars = substitute(accept_chars, ',[^,]\+-[^,]\+,', ',', 'g')
+                let accept_chars = substitute(accept_chars, ',\@<=[^,]\+-[^,]\+,', '', 'g')
+                " Remove all numeric specifications
+                " let accept_chars = substitute(accept_chars, ',\d\{-},', ',', 'g')
+                let accept_chars = substitute(accept_chars, ',\@<=\d\{-},', '', 'g')
+                " Remove all commas
+                let accept_chars = substitute(accept_chars, ',', '', 'g')
+                " Escape special regex characters
+                " Looks like the wrong chars are escaped.  In a collection,
+                "      :h /[]
+                "      only `]', `\', `-' and `^' are special:
+                " let accept_chars = escape(accept_chars, '\\/.*$^~[]' )
+                let accept_chars = escape(accept_chars, ']\-^' )
+                " Remove all characters that are not acceptable
+                let syn_list = substitute( syn_list, '[^0-9A-Za-z_'.accept_chars.']', ' ', 'g' )
+            endif
         endif
 
         if b:omni_syntax_minimum_length > 0
@@ -448,3 +729,27 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full )
 
     return syn_list
 endfunction
+
+function! OmniSyntaxShowChars(spec)
+  let result = []
+  for item in split(a:spec, ',')
+    if len(item) > 1
+      if item == '@-@'
+        call add(result, char2nr(item))
+      else
+        call extend(result, call('range', split(item, '-')))
+      endif
+    else
+      if item == '@'  " assume this is [A-Za-z]
+        for [c1, c2] in [['A', 'Z'], ['a', 'z']]
+          call extend(result, range(char2nr(c1), char2nr(c2)))
+        endfor
+      else
+        call add(result, char2nr(item))
+      endif
+    endif
+  endfor
+  return join(map(result, 'nr2char(v:val)'), ', ')
+endfunction
+let &cpo = s:cpo_save
+unlet s:cpo_save
index becb790..5e76870 100644 (file)
@@ -1,13 +1,13 @@
 " tar.vim: Handles browsing tarfiles
 "            AUTOLOAD PORTION
-" Date:                        Aug 09, 2010
-" Version:             26
-" Maintainer:  Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:                        Apr 17, 2013
+" Version:             29
+" Maintainer:  Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:             Vim License  (see vim's :help license)
 "
 "      Contains many ideas from Michael Toren's <tar.vim>
 "
-" Copyright:    Copyright (C) 2005-2009 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2011 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -22,7 +22,7 @@
 if &cp || exists("g:loaded_tar")
  finish
 endif
-let g:loaded_tar= "v26"
+let g:loaded_tar= "v29"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of tar needs vim 7.2"
@@ -31,6 +31,7 @@ if v:version < 702
 endif
 let s:keepcpo= &cpo
 set cpo&vim
+"DechoTabOn
 "call Decho("loading autoload/tar.vim")
 
 " ---------------------------------------------------------------------
@@ -47,6 +48,17 @@ endif
 if !exists("g:tar_writeoptions")
  let g:tar_writeoptions= "uf"
 endif
+if !exists("g:netrw_cygwin")
+ if has("win32") || has("win95") || has("win64") || has("win16")
+  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
+   let g:netrw_cygwin= 1
+  else
+   let g:netrw_cygwin= 0
+  endif
+ else
+  let g:netrw_cygwin= 0
+ endif
+endif
 if !exists("g:tar_copycmd")
  if !exists("g:netrw_localcopycmd")
   if has("win32") || has("win95") || has("win64") || has("win16")
@@ -63,24 +75,13 @@ if !exists("g:tar_copycmd")
  endif
  let g:tar_copycmd= g:netrw_localcopycmd
 endif
-if !exists("g:netrw_cygwin")
- if has("win32") || has("win95") || has("win64") || has("win16")
-  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
-   let g:netrw_cygwin= 1
-  else
-   let g:netrw_cygwin= 0
-  endif
- else
-  let g:netrw_cygwin= 0
- endif
-endif
 if !exists("g:tar_extractcmd")
  let g:tar_extractcmd= "tar -xf"
 endif
 
 " set up shell quoting character
 if !exists("g:tar_shq")
- if exists("&shq") && &shq != ""
+ if exists("+shq") && exists("&shq") && &shq != ""
   let g:tar_shq= &shq
  elseif has("win32") || has("win95") || has("win64") || has("win16")
   if exists("g:netrw_cygwin") && g:netrw_cygwin
@@ -142,38 +143,38 @@ fun! tar#Browse(tarfile)
   call setline(lastline+1,'" tar.vim version '.g:loaded_tar)
   call setline(lastline+2,'" Browsing tarfile '.a:tarfile)
   call setline(lastline+3,'" Select a file with cursor and press ENTER')
-  $put =''
-  0d
-  $
+  keepj $put =''
+  keepj sil! 0d
+  keepj $
 
   let tarfile= a:tarfile
-  if has("win32") && executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    " assuming cygwin
    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
   let curlast= line("$")
   if tarfile =~# '\.\(gz\|tgz\)$'
 "   call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+   exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
   elseif tarfile =~# '\.lrp'
 "   call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
-  elseif tarfile =~# '\.bz2$'
+   exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
+  elseif tarfile =~# '\.\(bz2\|tbz\|tb2\)$'
 "   call Decho("3: exe silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
-  elseif tarfile =~# '\.lzma$'
+   exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+  elseif tarfile =~# '\.\(lzma\|tlz\)$'
 "   call Decho("3: exe silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+   exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
   elseif tarfile =~# '\.\(xz\|txz\)$'
 "   call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+   exe "sil! r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
   else
    if tarfile =~ '^\s*-'
     " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
     let tarfile = substitute(tarfile, '-', './-', '')
    endif
 "   call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,0))
-   exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,1)
+   exe "sil! r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,1)
   endif
   if v:shell_error != 0
    redraw!
@@ -184,12 +185,12 @@ fun! tar#Browse(tarfile)
   if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~ '\c\%(warning\|error\|inappropriate\|unrecognized\)')
    redraw!
    echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
-   silent %d
+   keepj sil! %d
    let eikeep= &ei
    set ei=BufReadCmd,FileReadCmd
    exe "r ".fnameescape(a:tarfile)
    let &ei= eikeep
-   1d
+   keepj sil! 1d
 "   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
    return
   endif
@@ -227,7 +228,7 @@ fun! s:TarBrowseSelect()
   " about to make a new window, need to use b:tarfile
   let tarfile= b:tarfile
   let curfile= expand("%")
-  if has("win32") && executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    " assuming cygwin
    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
@@ -239,6 +240,8 @@ fun! s:TarBrowseSelect()
   let s:tblfile_{winnr()}= curfile
   call tar#Read("tarfile:".tarfile.'::'.fname,1)
   filetype detect
+  set nomod
+  exe 'com! -buffer -nargs=? -complete=file TarDiff    :call tar#Diff(<q-args>,"'.fnameescape(fname).'")'
 
   let &report= repkeep
 "  call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
@@ -252,7 +255,7 @@ fun! tar#Read(fname,mode)
   set report=10
   let tarfile = substitute(a:fname,'tarfile:\(.\{-}\)::.*$','\1','')
   let fname   = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','')
-  if has("win32") && executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    " assuming cygwin
    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
@@ -286,19 +289,19 @@ fun! tar#Read(fname,mode)
   endif
   if tarfile =~# '\.bz2$'
 "   call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
-   exe "silent r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   elseif tarfile =~# '\.\(gz\|tgz\)$'
 "   call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
-   exe "silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   elseif tarfile =~# '\.lrp$'
 "   call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
-   exe "silent r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   elseif tarfile =~# '\.lzma$'
 "   call Decho("7: exe silent r! lzma -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
-   exe "silent r! lzma -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   elseif tarfile =~# '\.\(xz\|txz\)$'
 "   call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
-   exe "silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   exe "sil! r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   else
    if tarfile =~ '^\s*-'
     " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
@@ -317,7 +320,7 @@ fun! tar#Read(fname,mode)
   exe "file tarfile::".fnameescape(fname)
 
   " cleanup
-  0d
+  keepj sil! 0d
   set nomod
 
   let &report= repkeep
@@ -425,7 +428,7 @@ fun! tar#Write(fname)
  
    if fname =~ '/'
     let dirpath = substitute(fname,'/[^/]\+$','','e')
-    if executable("cygpath")
+    if has("win32unix") && executable("cygpath")
      let dirpath = substitute(system("cygpath ".shellescape(dirpath, 0)),'\n','','e')
     endif
     call mkdir(dirpath,"p")
@@ -445,7 +448,7 @@ fun! tar#Write(fname)
     let tar_secure= " "
    endif
    exe "w! ".fnameescape(fname)
-   if executable("cygpath")
+   if has("win32unix") && executable("cygpath")
     let tarfile = substitute(system("cygpath ".shellescape(tarfile,0)),'\n','','e')
    endif
  
@@ -501,6 +504,30 @@ fun! tar#Write(fname)
 endfun
 
 " ---------------------------------------------------------------------
+" tar#Diff: {{{2
+fun! tar#Diff(userfname,fname)
+"  call Dfunc("tar#Diff(userfname<".a:userfname."> fname<".a:fname.")")
+  let fname= a:fname
+  if a:userfname != ""
+   let fname= a:userfname
+  endif
+  if filereadable(fname)
+   " sets current file (from tarball) for diff'ing
+   " splits window vertically
+   " opens original file, sets it for diff'ing
+   " sets up b:tardiff_otherbuf variables so each buffer knows about the other (for closing purposes)
+   diffthis
+   wincmd v
+   exe "e ".fnameescape(fname)
+   diffthis
+  else
+   redraw!
+   echo "***warning*** unable to read file<".fname.">"
+  endif
+"  call Dret("tar#Diff")
+endfun
+
+" ---------------------------------------------------------------------
 " s:Rmdir: {{{2
 fun! s:Rmdir(fname)
 "  call Dfunc("Rmdir(fname<".a:fname.">)")
index c24d6ff..5cb23a6 100644 (file)
@@ -1,6 +1,6 @@
 " Vim autoload file for the tohtml plugin.
 " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2010 Aug 12
+" Last Change: 2013 Jun 19
 "
 " Additional contributors:
 "
 
 " this file uses line continuations
 let s:cpo_sav = &cpo
-set cpo-=C
+set cpo&vim
 
-func! tohtml#Convert2HTML(line1, line2)
+" Automatically find charsets from all encodings supported natively by Vim. With
+" the 8bit- and 2byte- prefixes, Vim can actually support more encodings than
+" this. Let the user specify these however since they won't be supported on
+" every system.
+"
+" Note, not all of Vim's supported encodings have a charset to use.
+"
+" Names in this list are from:
+"   http://www.iana.org/assignments/character-sets
+" g:tohtml#encoding_to_charset: {{{
+let g:tohtml#encoding_to_charset = {
+      \ 'latin1' : 'ISO-8859-1',
+      \ 'iso-8859-2' : 'ISO-8859-2',
+      \ 'iso-8859-3' : 'ISO-8859-3',
+      \ 'iso-8859-4' : 'ISO-8859-4',
+      \ 'iso-8859-5' : 'ISO-8859-5',
+      \ 'iso-8859-6' : 'ISO-8859-6',
+      \ 'iso-8859-7' : 'ISO-8859-7',
+      \ 'iso-8859-8' : 'ISO-8859-8',
+      \ 'iso-8859-9' : 'ISO-8859-9',
+      \ 'iso-8859-10' : '',
+      \ 'iso-8859-13' : 'ISO-8859-13',
+      \ 'iso-8859-14' : '',
+      \ 'iso-8859-15' : 'ISO-8859-15',
+      \ 'koi8-r' : 'KOI8-R',
+      \ 'koi8-u' : 'KOI8-U',
+      \ 'macroman' : 'macintosh',
+      \ 'cp437' : '',
+      \ 'cp775' : '',
+      \ 'cp850' : '',
+      \ 'cp852' : '',
+      \ 'cp855' : '',
+      \ 'cp857' : '',
+      \ 'cp860' : '',
+      \ 'cp861' : '',
+      \ 'cp862' : '',
+      \ 'cp863' : '',
+      \ 'cp865' : '',
+      \ 'cp866' : 'IBM866',
+      \ 'cp869' : '',
+      \ 'cp874' : '',
+      \ 'cp1250' : 'windows-1250',
+      \ 'cp1251' : 'windows-1251',
+      \ 'cp1253' : 'windows-1253',
+      \ 'cp1254' : 'windows-1254',
+      \ 'cp1255' : 'windows-1255',
+      \ 'cp1256' : 'windows-1256',
+      \ 'cp1257' : 'windows-1257',
+      \ 'cp1258' : 'windows-1258',
+      \ 'euc-jp' : 'EUC-JP',
+      \ 'sjis' : 'Shift_JIS',
+      \ 'cp932' : 'Shift_JIS',
+      \ 'cp949' : '',
+      \ 'euc-kr' : 'EUC-KR',
+      \ 'cp936' : 'GBK',
+      \ 'euc-cn' : 'GB2312',
+      \ 'big5' : 'Big5',
+      \ 'cp950' : 'Big5',
+      \ 'utf-8' : 'UTF-8',
+      \ 'ucs-2' : 'UTF-8',
+      \ 'ucs-2le' : 'UTF-8',
+      \ 'utf-16' : 'UTF-8',
+      \ 'utf-16le' : 'UTF-8',
+      \ 'ucs-4' : 'UTF-8',
+      \ 'ucs-4le' : 'UTF-8',
+      \ }
+lockvar g:tohtml#encoding_to_charset
+" Notes:
+"   1. All UCS/UTF are converted to UTF-8 because it is much better supported
+"   2. Any blank spaces are there because Vim supports it but at least one major
+"      web browser does not according to http://wiki.whatwg.org/wiki/Web_Encodings.
+" }}}
+
+" Only automatically find encodings supported natively by Vim, let the user
+" specify the encoding if it's not natively supported. This function is only
+" used when the user specifies the charset, they better know what they are
+" doing!
+"
+" Names in this list are from:
+"   http://www.iana.org/assignments/character-sets
+" g:tohtml#charset_to_encoding: {{{
+let g:tohtml#charset_to_encoding = {
+      \ 'iso_8859-1:1987' : 'latin1',
+      \ 'iso-ir-100' : 'latin1',
+      \ 'iso_8859-1' : 'latin1',
+      \ 'iso-8859-1' : 'latin1',
+      \ 'latin1' : 'latin1',
+      \ 'l1' : 'latin1',
+      \ 'ibm819' : 'latin1',
+      \ 'cp819' : 'latin1',
+      \ 'csisolatin1' : 'latin1',
+      \ 'iso_8859-2:1987' : 'iso-8859-2',
+      \ 'iso-ir-101' : 'iso-8859-2',
+      \ 'iso_8859-2' : 'iso-8859-2',
+      \ 'iso-8859-2' : 'iso-8859-2',
+      \ 'latin2' : 'iso-8859-2',
+      \ 'l2' : 'iso-8859-2',
+      \ 'csisolatin2' : 'iso-8859-2',
+      \ 'iso_8859-3:1988' : 'iso-8859-3',
+      \ 'iso-ir-109' : 'iso-8859-3',
+      \ 'iso_8859-3' : 'iso-8859-3',
+      \ 'iso-8859-3' : 'iso-8859-3',
+      \ 'latin3' : 'iso-8859-3',
+      \ 'l3' : 'iso-8859-3',
+      \ 'csisolatin3' : 'iso-8859-3',
+      \ 'iso_8859-4:1988' : 'iso-8859-4',
+      \ 'iso-ir-110' : 'iso-8859-4',
+      \ 'iso_8859-4' : 'iso-8859-4',
+      \ 'iso-8859-4' : 'iso-8859-4',
+      \ 'latin4' : 'iso-8859-4',
+      \ 'l4' : 'iso-8859-4',
+      \ 'csisolatin4' : 'iso-8859-4',
+      \ 'iso_8859-5:1988' : 'iso-8859-5',
+      \ 'iso-ir-144' : 'iso-8859-5',
+      \ 'iso_8859-5' : 'iso-8859-5',
+      \ 'iso-8859-5' : 'iso-8859-5',
+      \ 'cyrillic' : 'iso-8859-5',
+      \ 'csisolatincyrillic' : 'iso-8859-5',
+      \ 'iso_8859-6:1987' : 'iso-8859-6',
+      \ 'iso-ir-127' : 'iso-8859-6',
+      \ 'iso_8859-6' : 'iso-8859-6',
+      \ 'iso-8859-6' : 'iso-8859-6',
+      \ 'ecma-114' : 'iso-8859-6',
+      \ 'asmo-708' : 'iso-8859-6',
+      \ 'arabic' : 'iso-8859-6',
+      \ 'csisolatinarabic' : 'iso-8859-6',
+      \ 'iso_8859-7:1987' : 'iso-8859-7',
+      \ 'iso-ir-126' : 'iso-8859-7',
+      \ 'iso_8859-7' : 'iso-8859-7',
+      \ 'iso-8859-7' : 'iso-8859-7',
+      \ 'elot_928' : 'iso-8859-7',
+      \ 'ecma-118' : 'iso-8859-7',
+      \ 'greek' : 'iso-8859-7',
+      \ 'greek8' : 'iso-8859-7',
+      \ 'csisolatingreek' : 'iso-8859-7',
+      \ 'iso_8859-8:1988' : 'iso-8859-8',
+      \ 'iso-ir-138' : 'iso-8859-8',
+      \ 'iso_8859-8' : 'iso-8859-8',
+      \ 'iso-8859-8' : 'iso-8859-8',
+      \ 'hebrew' : 'iso-8859-8',
+      \ 'csisolatinhebrew' : 'iso-8859-8',
+      \ 'iso_8859-9:1989' : 'iso-8859-9',
+      \ 'iso-ir-148' : 'iso-8859-9',
+      \ 'iso_8859-9' : 'iso-8859-9',
+      \ 'iso-8859-9' : 'iso-8859-9',
+      \ 'latin5' : 'iso-8859-9',
+      \ 'l5' : 'iso-8859-9',
+      \ 'csisolatin5' : 'iso-8859-9',
+      \ 'iso-8859-10' : 'iso-8859-10',
+      \ 'iso-ir-157' : 'iso-8859-10',
+      \ 'l6' : 'iso-8859-10',
+      \ 'iso_8859-10:1992' : 'iso-8859-10',
+      \ 'csisolatin6' : 'iso-8859-10',
+      \ 'latin6' : 'iso-8859-10',
+      \ 'iso-8859-13' : 'iso-8859-13',
+      \ 'iso-8859-14' : 'iso-8859-14',
+      \ 'iso-ir-199' : 'iso-8859-14',
+      \ 'iso_8859-14:1998' : 'iso-8859-14',
+      \ 'iso_8859-14' : 'iso-8859-14',
+      \ 'latin8' : 'iso-8859-14',
+      \ 'iso-celtic' : 'iso-8859-14',
+      \ 'l8' : 'iso-8859-14',
+      \ 'iso-8859-15' : 'iso-8859-15',
+      \ 'iso_8859-15' : 'iso-8859-15',
+      \ 'latin-9' : 'iso-8859-15',
+      \ 'koi8-r' : 'koi8-r',
+      \ 'cskoi8r' : 'koi8-r',
+      \ 'koi8-u' : 'koi8-u',
+      \ 'macintosh' : 'macroman',
+      \ 'mac' : 'macroman',
+      \ 'csmacintosh' : 'macroman',
+      \ 'ibm437' : 'cp437',
+      \ 'cp437' : 'cp437',
+      \ '437' : 'cp437',
+      \ 'cspc8codepage437' : 'cp437',
+      \ 'ibm775' : 'cp775',
+      \ 'cp775' : 'cp775',
+      \ 'cspc775baltic' : 'cp775',
+      \ 'ibm850' : 'cp850',
+      \ 'cp850' : 'cp850',
+      \ '850' : 'cp850',
+      \ 'cspc850multilingual' : 'cp850',
+      \ 'ibm852' : 'cp852',
+      \ 'cp852' : 'cp852',
+      \ '852' : 'cp852',
+      \ 'cspcp852' : 'cp852',
+      \ 'ibm855' : 'cp855',
+      \ 'cp855' : 'cp855',
+      \ '855' : 'cp855',
+      \ 'csibm855' : 'cp855',
+      \ 'ibm857' : 'cp857',
+      \ 'cp857' : 'cp857',
+      \ '857' : 'cp857',
+      \ 'csibm857' : 'cp857',
+      \ 'ibm860' : 'cp860',
+      \ 'cp860' : 'cp860',
+      \ '860' : 'cp860',
+      \ 'csibm860' : 'cp860',
+      \ 'ibm861' : 'cp861',
+      \ 'cp861' : 'cp861',
+      \ '861' : 'cp861',
+      \ 'cp-is' : 'cp861',
+      \ 'csibm861' : 'cp861',
+      \ 'ibm862' : 'cp862',
+      \ 'cp862' : 'cp862',
+      \ '862' : 'cp862',
+      \ 'cspc862latinhebrew' : 'cp862',
+      \ 'ibm863' : 'cp863',
+      \ 'cp863' : 'cp863',
+      \ '863' : 'cp863',
+      \ 'csibm863' : 'cp863',
+      \ 'ibm865' : 'cp865',
+      \ 'cp865' : 'cp865',
+      \ '865' : 'cp865',
+      \ 'csibm865' : 'cp865',
+      \ 'ibm866' : 'cp866',
+      \ 'cp866' : 'cp866',
+      \ '866' : 'cp866',
+      \ 'csibm866' : 'cp866',
+      \ 'ibm869' : 'cp869',
+      \ 'cp869' : 'cp869',
+      \ '869' : 'cp869',
+      \ 'cp-gr' : 'cp869',
+      \ 'csibm869' : 'cp869',
+      \ 'windows-1250' : 'cp1250',
+      \ 'windows-1251' : 'cp1251',
+      \ 'windows-1253' : 'cp1253',
+      \ 'windows-1254' : 'cp1254',
+      \ 'windows-1255' : 'cp1255',
+      \ 'windows-1256' : 'cp1256',
+      \ 'windows-1257' : 'cp1257',
+      \ 'windows-1258' : 'cp1258',
+      \ 'extended_unix_code_packed_format_for_japanese' : 'euc-jp',
+      \ 'cseucpkdfmtjapanese' : 'euc-jp',
+      \ 'euc-jp' : 'euc-jp',
+      \ 'shift_jis' : 'sjis',
+      \ 'ms_kanji' : 'sjis',
+      \ 'sjis' : 'sjis',
+      \ 'csshiftjis' : 'sjis',
+      \ 'ibm-thai' : 'cp874',
+      \ 'csibmthai' : 'cp874',
+      \ 'ks_c_5601-1987' : 'cp949',
+      \ 'iso-ir-149' : 'cp949',
+      \ 'ks_c_5601-1989' : 'cp949',
+      \ 'ksc_5601' : 'cp949',
+      \ 'korean' : 'cp949',
+      \ 'csksc56011987' : 'cp949',
+      \ 'euc-kr' : 'euc-kr',
+      \ 'cseuckr' : 'euc-kr',
+      \ 'gbk' : 'cp936',
+      \ 'cp936' : 'cp936',
+      \ 'ms936' : 'cp936',
+      \ 'windows-936' : 'cp936',
+      \ 'gb_2312-80' : 'euc-cn',
+      \ 'iso-ir-58' : 'euc-cn',
+      \ 'chinese' : 'euc-cn',
+      \ 'csiso58gb231280' : 'euc-cn',
+      \ 'big5' : 'big5',
+      \ 'csbig5' : 'big5',
+      \ 'utf-8' : 'utf-8',
+      \ 'iso-10646-ucs-2' : 'ucs-2',
+      \ 'csunicode' : 'ucs-2',
+      \ 'utf-16' : 'utf-16',
+      \ 'utf-16be' : 'utf-16',
+      \ 'utf-16le' : 'utf-16le',
+      \ 'utf-32' : 'ucs-4',
+      \ 'utf-32be' : 'ucs-4',
+      \ 'utf-32le' : 'ucs-4le',
+      \ 'iso-10646-ucs-4' : 'ucs-4',
+      \ 'csucs4' : 'ucs-4'
+      \ }
+lockvar g:tohtml#charset_to_encoding
+"}}}
+
+func! tohtml#Convert2HTML(line1, line2) "{{{
   let s:settings = tohtml#GetUserSettings()
 
-  if !&diff || s:settings.diff_one_file
+  if !&diff || s:settings.diff_one_file "{{{
     if a:line2 >= a:line1
       let g:html_start_line = a:line1
       let g:html_end_line = a:line2
@@ -24,31 +298,51 @@ func! tohtml#Convert2HTML(line1, line2)
       let g:html_start_line = a:line2
       let g:html_end_line = a:line1
     endif
-    runtime syntax/2html.vim
-  else
+    runtime syntax/2html.vim "}}}
+  else "{{{
     let win_list = []
     let buf_list = []
     windo | if &diff | call add(win_list, winbufnr(0)) | endif
     let s:settings.whole_filler = 1
     let g:html_diff_win_num = 0
     for window in win_list
+      " switch to the next buffer to convert
       exe ":" . bufwinnr(window) . "wincmd w"
+
+      " figure out whether current charset and encoding will work, if not
+      " default to UTF-8
+      if !exists('g:html_use_encoding') &&
+           \ (((&l:fileencoding=='' || (&l:buftype!='' && &l:buftype!=?'help'))
+           \      && &encoding!=?s:settings.vim_encoding)
+           \ || &l:fileencoding!='' && &l:fileencoding!=?s:settings.vim_encoding)
+       echohl WarningMsg
+       echomsg "TOhtml: mismatched file encodings in Diff buffers, using UTF-8"
+       echohl None
+       let s:settings.vim_encoding = 'utf-8'
+       let s:settings.encoding = 'UTF-8'
+      endif
+
+      " set up for diff-mode conversion
       let g:html_start_line = 1
       let g:html_end_line = line('$')
       let g:html_diff_win_num += 1
+
+      " convert this file
       runtime syntax/2html.vim
+
+      " remember the HTML buffer for later combination
       call add(buf_list, bufnr('%'))
     endfor
     unlet g:html_diff_win_num
     call tohtml#Diff2HTML(win_list, buf_list)
-  endif
+  endif "}}}
 
   unlet g:html_start_line
   unlet g:html_end_line
   unlet s:settings
-endfunc
+endfunc "}}}
 
-func! tohtml#Diff2HTML(win_list, buf_list)
+func! tohtml#Diff2HTML(win_list, buf_list) "{{{
   let xml_line = ""
   let tag_close = '>'
 
@@ -87,7 +381,7 @@ func! tohtml#Diff2HTML(win_list, buf_list)
   call add(html, '<head>')
 
   " include encoding as close to the top as possible, but only if not already
-  " contained in XML information (to avoid haggling over content type)
+  " contained in XML information
   if s:settings.encoding != "" && !s:settings.use_xhtml
     call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
   endif
@@ -97,12 +391,25 @@ func! tohtml#Diff2HTML(win_list, buf_list)
   call add(html, '<meta name="plugin-version" content="'.g:loaded_2html_plugin.'"'.tag_close)
   call add(html, '<meta name="settings" content="'.
        \ join(filter(keys(s:settings),'s:settings[v:val]'),',').
+       \ ',prevent_copy='.s:settings.prevent_copy.
        \ '"'.tag_close)
+  call add(html, '<meta name="colorscheme" content="'.
+       \ (exists('g:colors_name')
+       \ ? g:colors_name
+       \ : 'none'). '"'.tag_close)
 
   call add(html, '</head>')
   let body_line_num = len(html)
-  call add(html, '<body>')
-  call add(html, '<table border="1" width="100%">')
+  if !empty(s:settings.prevent_copy)
+    call add(html, "<body onload='FixCharWidth();".(s:settings.line_ids ? " JumpToLine();" : "")."'>")
+    call add(html, "<!-- hidden divs used by javascript to get the width of a char -->")
+    call add(html, "<div id='oneCharWidth'>0</div>")
+    call add(html, "<div id='oneInputWidth'><input size='1' value='0'".tag_close."</div>")
+    call add(html, "<div id='oneEmWidth' style='width: 1em;'></div>")
+  else
+    call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>')
+  endif
+  call add(html, "<table border='1' width='100%' id='vimCodeElement".s:settings.id_suffix."'>")
 
   call add(html, '<tr>')
   for buf in a:win_list
@@ -133,7 +440,8 @@ func! tohtml#Diff2HTML(win_list, buf_list)
       let s:body_end_line = getline('.')
     endif
 
-    " Grab the style information.  Some of this will be duplicated...
+    " Grab the style information. Some of this will be duplicated so only insert
+    " it if it's not already there. {{{
     1
     let style_start = search('^<style type="text/css">')
     1
@@ -151,22 +459,27 @@ func! tohtml#Diff2HTML(win_list, buf_list)
          let insert_index += 1
        endif
       endfor
-    endif
+    endif " }}}
 
+    " everything new will get added before the diff styles so diff highlight
+    " properly overrides normal highlight
     if diff_style_start != 0
       let insert_index = diff_style_start
     endif
 
-    " Delete those parts that are not needed so
-    " we can include the rest into the resulting table
-    1,/^<body/d_
+    " Delete those parts that are not needed so we can include the rest into the
+    " resulting table.
+    1,/^<body.*\%(\n<!--.*-->\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d_
     $
     ?</body>?,$d_
     let temp = getline(1,'$')
+    " clean out id on the main content container because we already set it on
+    " the table
+    let temp[0] = substitute(temp[0], " id='vimCodeElement[^']*'", "", "")
     " undo deletion of start and end part
     " so we can later save the file as valid html
     " TODO: restore using grabbed lines if undolevel is 1?
-    normal 2u
+    normal! 2u
     if s:settings.use_css
       call add(html, '<td valign="top"><div>')
     elseif s:settings.use_xhtml
@@ -190,6 +503,11 @@ func! tohtml#Diff2HTML(win_list, buf_list)
   call add(html, s:body_end_line)
   call add(html, '</html>')
 
+  " The generated HTML is admittedly ugly and takes a LONG time to fold.
+  " Make sure the user doesn't do syntax folding when loading a generated file,
+  " using a modeline.
+  call add(html, '<!-- vim: set foldmethod=manual : -->')
+
   let i = 1
   let name = "Diff" . (s:settings.use_xhtml ? ".xhtml" : ".html")
   " Find an unused file name if current file name is already in use
@@ -203,18 +521,114 @@ func! tohtml#Diff2HTML(win_list, buf_list)
   " just in case some user autocmd creates content in the new buffer, make sure
   " it is empty before proceeding
   %d
+
+  " set the fileencoding to match the charset we'll be using
+  let &l:fileencoding=s:settings.vim_encoding
+
+  " According to http://www.w3.org/TR/html4/charset.html#doc-char-set, the byte
+  " order mark is highly recommend on the web when using multibyte encodings. But,
+  " it is not a good idea to include it on UTF-8 files. Otherwise, let Vim
+  " determine when it is actually inserted.
+  if s:settings.vim_encoding == 'utf-8'
+    setlocal nobomb
+  else
+    setlocal bomb
+  endif
+
   call append(0, html)
 
   if len(style) > 0
     1
     let style_start = search('^</head>')-1
 
+    " add required javascript in reverse order so we can just call append again
+    " and again without adjusting {{{
+
+    " insert script closing tag
+    call append(style_start, [
+         \ '',
+         \ s:settings.use_xhtml ? '//]]>' : '-->',
+         \ "</script>"
+         \ ])
+
+    " insert script which corrects the size of small input elements in
+    " prevent_copy mode. See 2html.vim for details on why this is needed and how
+    " it works.
+    if !empty(s:settings.prevent_copy)
+      call append(style_start, [
+           \ '',
+           \ '/* simulate a "ch" unit by asking the browser how big a zero character is */',
+           \ 'function FixCharWidth() {',
+           \ '  /* get the hidden element which gives the width of a single character */',
+           \ '  var goodWidth = document.getElementById("oneCharWidth").clientWidth;',
+           \ '  /* get all input elements, we''ll filter on class later */',
+           \ '  var inputTags = document.getElementsByTagName("input");',
+           \ '  var ratio = 5;',
+           \ '  var inputWidth = document.getElementById("oneInputWidth").clientWidth;',
+           \ '  var emWidth = document.getElementById("oneEmWidth").clientWidth;',
+           \ '  if (inputWidth > goodWidth) {',
+           \ '    while (ratio < 100*goodWidth/emWidth && ratio < 100) {',
+           \ '      ratio += 5;',
+           \ '    }',
+           \ '    document.getElementById("vimCodeElement'.s:settings.id_suffix.'").className = "em"+ratio;',
+           \ '  }',
+           \ '}'
+           \ ])
+    endif
+    "
+    " insert javascript to get IDs from line numbers, and to open a fold before
+    " jumping to any lines contained therein
+    call append(style_start, [
+         \ "  /* Always jump to new location even if the line was hidden inside a fold, or",
+         \ "   * we corrected the raw number to a line ID.",
+         \ "   */",
+         \ "  if (lineElem) {",
+         \ "    lineElem.scrollIntoView(true);",
+         \ "  }",
+         \ "  return true;",
+         \ "}",
+         \ "if ('onhashchange' in window) {",
+         \ "  window.onhashchange = JumpToLine;",
+         \ "}"
+         \ ])
+    if s:settings.dynamic_folds
+      call append(style_start, [
+           \ "",
+           \ "  /* navigate upwards in the DOM tree to open all folds containing the line */",
+           \ "  var node = lineElem;",
+           \ "  while (node && node.id != 'vimCodeElement".s:settings.id_suffix."')",
+           \ "  {",
+           \ "    if (node.className == 'closed-fold')",
+           \ "    {",
+           \ "      /* toggle open the fold ID (remove window ID) */",
+           \ "      toggleFold(node.id.substr(4));",
+           \ "    }",
+           \ "    node = node.parentNode;",
+           \ "  }",
+           \ ])
+    endif
+    call append(style_start, [
+         \ "",
+         \ "/* function to open any folds containing a jumped-to line before jumping to it */",
+         \ "function JumpToLine()",
+         \ "{",
+         \ "  var lineNum;",
+         \ "  lineNum = window.location.hash;",
+         \ "  lineNum = lineNum.substr(1); /* strip off '#' */",
+         \ "",
+         \ "  if (lineNum.indexOf('L') == -1) {",
+         \ "    lineNum = 'L'+lineNum;",
+         \ "  }",
+         \ "  if (lineNum.indexOf('W') == -1) {",
+         \ "    lineNum = 'W1'+lineNum;",
+         \ "  }",
+         \ "  lineElem = document.getElementById(lineNum);"
+         \ ])
+
     " Insert javascript to toggle matching folds open and closed in all windows,
     " if dynamic folding is active.
     if s:settings.dynamic_folds
       call append(style_start, [
-           \  "<script type='text/javascript'>",
-           \  s:settings.use_xhtml ? '//<![CDATA[' : "  <!--",
            \  "  function toggleFold(objID)",
            \  "  {",
            \  "    for (win_num = 1; win_num <= ".len(a:buf_list)."; win_num++)",
@@ -231,16 +645,20 @@ func! tohtml#Diff2HTML(win_list, buf_list)
            \  "      }",
            \  "    }",
            \  "  }",
-           \  s:settings.use_xhtml ? '//]]>' : "  -->",
-           \  "</script>"
            \ ])
     endif
 
+    " insert script tag; javascript is always needed for the line number
+    " normalization for URL hashes
+    call append(style_start, [
+         \ "<script type='text/javascript'>",
+         \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
+
     " Insert styles from all the generated html documents and additional styles
     " for the table-based layout of the side-by-side diff. The diff should take
     " up the full browser window (but not more), and be static in size,
     " horizontally scrollable when the lines are too long. Otherwise, the diff
-    " is pretty useless for really long lines.
+    " is pretty useless for really long lines. {{{
     if s:settings.use_css
       call append(style_start,
            \ ['<style type="text/css">']+
@@ -252,28 +670,28 @@ func! tohtml#Diff2HTML(win_list, buf_list)
            \   'td div { overflow: auto; }',
            \   s:settings.use_xhtml ? '' : '-->',
            \   '</style>'
-           \ ])
-    endif
+           \])
+    endif "}}}
   endif
 
   let &paste = s:old_paste
   let &magic = s:old_magic
-endfunc
+endfunc "}}}
 
 " Gets a single user option and sets it in the passed-in Dict, or gives it the
 " default value if the option doesn't actually exist.
-func! tohtml#GetOption(settings, option, default)
+func! tohtml#GetOption(settings, option, default) "{{{
   if exists('g:html_'.a:option)
     let a:settings[a:option] = g:html_{a:option}
   else
     let a:settings[a:option] = a:default
   endif
-endfunc
+endfunc "}}}
 
 " returns a Dict containing the values of all user options for 2html, including
 " default values for those not given an explicit value by the user. Discards the
 " html_ prefix of the option for nicer looking code.
-func! tohtml#GetUserSettings()
+func! tohtml#GetUserSettings() "{{{
   if exists('s:settings')
     " just restore the known options if we've already retrieved them
     return s:settings
@@ -289,21 +707,25 @@ func! tohtml#GetUserSettings()
       let g:html_use_xhtml = g:use_xhtml
     endif
 
-    " get current option settings with appropriate defaults
-    call tohtml#GetOption(user_settings,    'no_progress',  !has("statusline") )
-    call tohtml#GetOption(user_settings,  'diff_one_file',  0 )
-    call tohtml#GetOption(user_settings,   'number_lines',  &number )
-    call tohtml#GetOption(user_settings,        'use_css',  1 )
-    call tohtml#GetOption(user_settings, 'ignore_conceal',  0 )
-    call tohtml#GetOption(user_settings, 'ignore_folding',  0 )
-    call tohtml#GetOption(user_settings,  'dynamic_folds',  0 )
-    call tohtml#GetOption(user_settings,  'no_foldcolumn',  0 )
-    call tohtml#GetOption(user_settings,   'hover_unfold',  0 )
-    call tohtml#GetOption(user_settings,         'no_pre',  0 )
-    call tohtml#GetOption(user_settings,   'whole_filler',  0 )
-    call tohtml#GetOption(user_settings,      'use_xhtml',  0 )
+    " get current option settings with appropriate defaults {{{
+    call tohtml#GetOption(user_settings,    'no_progress', !has("statusline") )
+    call tohtml#GetOption(user_settings,  'diff_one_file', 0 )
+    call tohtml#GetOption(user_settings,   'number_lines', &number )
+    call tohtml#GetOption(user_settings,       'pre_wrap', &wrap )
+    call tohtml#GetOption(user_settings,        'use_css', 1 )
+    call tohtml#GetOption(user_settings, 'ignore_conceal', 0 )
+    call tohtml#GetOption(user_settings, 'ignore_folding', 0 )
+    call tohtml#GetOption(user_settings,  'dynamic_folds', 0 )
+    call tohtml#GetOption(user_settings,  'no_foldcolumn', user_settings.ignore_folding)
+    call tohtml#GetOption(user_settings,   'hover_unfold', 0 )
+    call tohtml#GetOption(user_settings,         'no_pre', 0 )
+    call tohtml#GetOption(user_settings,     'no_invalid', 0 )
+    call tohtml#GetOption(user_settings,   'whole_filler', 0 )
+    call tohtml#GetOption(user_settings,      'use_xhtml', 0 )
+    call tohtml#GetOption(user_settings,       'line_ids', user_settings.number_lines )
+    " }}}
     
-    " override those settings that need it
+    " override those settings that need it {{{
 
     " hover opening implies dynamic folding
     if user_settings.hover_unfold
@@ -324,6 +746,8 @@ func! tohtml#GetUserSettings()
     " dynamic folding implies css
     if user_settings.dynamic_folds
       let user_settings.use_css = 1
+    else
+      let user_settings.no_foldcolumn = 1 " won't do anything but for consistency and for the test suite
     endif
 
     " if we're not using CSS we cannot use a pre section because <font> tags
@@ -332,47 +756,168 @@ func! tohtml#GetUserSettings()
       let user_settings.no_pre = 1
     endif
 
-    " Figure out proper MIME charset from the 'encoding' option.
-    if exists("g:html_use_encoding")
+    " pre_wrap doesn't do anything if not using pre or not using CSS
+    if user_settings.no_pre || !user_settings.use_css
+      let user_settings.pre_wrap=0
+    endif
+    "}}}
+
+    " set up expand_tabs option after all the overrides so we know the
+    " appropriate defaults {{{
+    if user_settings.no_pre == 0
+      call tohtml#GetOption(user_settings,
+           \ 'expand_tabs',
+           \ &expandtab || &ts != 8 || user_settings.number_lines ||
+           \   (user_settings.dynamic_folds && !user_settings.no_foldcolumn))
+    else
+      let user_settings.expand_tabs = 1
+    endif
+    " }}}
+
+    " textual options
+    if exists("g:html_use_encoding") "{{{
+      " user specified the desired MIME charset, figure out proper
+      " 'fileencoding' from it or warn the user if we cannot
       let user_settings.encoding = g:html_use_encoding
+      let user_settings.vim_encoding = tohtml#EncodingFromCharset(g:html_use_encoding)
+      if user_settings.vim_encoding == ''
+       echohl WarningMsg
+       echomsg "TOhtml: file encoding for"
+             \ g:html_use_encoding
+             \ "unknown, please set 'fileencoding'"
+       echohl None
+      endif
     else
-      let vim_encoding = &encoding
-      if vim_encoding =~ '^8bit\|^2byte'
-       let vim_encoding = substitute(vim_encoding, '^8bit-\|^2byte-', '', '')
+      " Figure out proper MIME charset from 'fileencoding' if possible
+      if &l:fileencoding != '' 
+       " If the buffer is not a "normal" type, the 'fileencoding' value may not
+       " be trusted; since the buffer should not be written the fileencoding is
+       " not intended to be used.
+       if &l:buftype=='' || &l:buftype==?'help'
+         let user_settings.vim_encoding = &l:fileencoding
+         call tohtml#CharsetFromEncoding(user_settings)
+       else
+         let user_settings.encoding = '' " trigger detection using &encoding
+       endif
       endif
-      if vim_encoding == 'latin1'
-       let user_settings.encoding = 'iso-8859-1'
-      elseif vim_encoding =~ "^cp12"
-       let user_settings.encoding = substitute(vim_encoding, 'cp', 'windows-', '')
-      elseif vim_encoding == 'sjis' || vim_encoding == 'cp932'
-       let user_settings.encoding = 'Shift_JIS'
-      elseif vim_encoding == 'big5' || vim_encoding == 'cp950'
-       let user_settings.encoding = "Big5"
-      elseif vim_encoding == 'euc-cn'
-       let user_settings.encoding = 'GB_2312-80'
-      elseif vim_encoding == 'euc-tw'
-       let user_settings.encoding = ""
-      elseif vim_encoding =~ '^euc\|^iso\|^koi'
-       let user_settings.encoding = substitute(vim_encoding, '.*', '\U\0', '')
-      elseif vim_encoding == 'cp949'
-       let user_settings.encoding = 'KS_C_5601-1987'
-      elseif vim_encoding == 'cp936'
-       let user_settings.encoding = 'GBK'
-      elseif vim_encoding =~ '^ucs\|^utf'
+
+      " else from 'encoding' if possible
+      if &l:fileencoding == '' || user_settings.encoding == ''
+       let user_settings.vim_encoding = &encoding
+       call tohtml#CharsetFromEncoding(user_settings)
+      endif
+
+      " else default to UTF-8 and warn user
+      if user_settings.encoding == ''
+       let user_settings.vim_encoding = 'utf-8'
        let user_settings.encoding = 'UTF-8'
+       echohl WarningMsg
+       echomsg "TOhtml: couldn't determine MIME charset, using UTF-8"
+       echohl None
+      endif
+    endif "}}}
+
+    " Default to making nothing uncopyable, because we default to
+    " not-standards way of doing things, and also because Microsoft Word and
+    " others paste the <input> elements anyway.
+    "
+    " html_prevent_copy only has an effect when using CSS.
+    "
+    " All options:
+    "    f - fold column
+    "    n - line numbers (also within fold text)
+    "    t - fold text
+    "    d - diff filler
+    "    c - concealed text (reserved future)
+    "    l - listchars (reserved possible future)
+    "    s - signs (reserved possible future)
+    "
+    " Normal text is always selectable.
+    let user_settings.prevent_copy = ""
+    if user_settings.use_css
+      if exists("g:html_prevent_copy")
+       if user_settings.dynamic_folds && !user_settings.no_foldcolumn && g:html_prevent_copy =~# 'f'
+         let user_settings.prevent_copy .= 'f'
+       endif
+       if user_settings.number_lines && g:html_prevent_copy =~# 'n'
+         let user_settings.prevent_copy .= 'n'
+       endif
+       if &diff && g:html_prevent_copy =~# 'd'
+         let user_settings.prevent_copy .= 'd'
+       endif
+       if !user_settings.ignore_folding && g:html_prevent_copy =~# 't'
+         let user_settings.prevent_copy .= 't'
+       endif
       else
-       let user_settings.encoding = ""
+       let user_settings.prevent_copy = ""
       endif
     endif
+    if empty(user_settings.prevent_copy)
+      let user_settings.no_invalid = 0
+    endif
+
+    if exists('g:html_id_expr')
+      let user_settings.id_suffix = eval(g:html_id_expr)
+      if user_settings.id_suffix !~ '^[-_:.A-Za-z0-9]*$'
+       echohl WarningMsg
+       echomsg '2html: g:html_id_expr evaluated to invalid string for HTML id attributes'
+       echomsg '2html: Omitting user-specified suffix'
+       echohl None
+       sleep 3
+       let user_settings.id_suffix=""
+      endif
+    else
+      let user_settings.id_suffix=""
+    endif
 
     " TODO: font
 
     return user_settings
   endif
-endfunc
+endfunc "}}}
+
+" get the proper HTML charset name from a Vim encoding option.
+function! tohtml#CharsetFromEncoding(settings) "{{{
+  let l:vim_encoding = a:settings.vim_encoding
+  if exists('g:html_charset_override') && has_key(g:html_charset_override, l:vim_encoding)
+    let a:settings.encoding = g:html_charset_override[l:vim_encoding]
+  else
+    if l:vim_encoding =~ '^8bit\|^2byte'
+      " 8bit- and 2byte- prefixes are to indicate encodings available on the
+      " system that Vim will convert with iconv(), look up just the encoding name,
+      " not Vim's prefix.
+      let l:vim_encoding = substitute(l:vim_encoding, '^8bit-\|^2byte-', '', '')
+    endif
+    if has_key(g:tohtml#encoding_to_charset, l:vim_encoding)
+      let a:settings.encoding = g:tohtml#encoding_to_charset[l:vim_encoding]
+    else
+      let a:settings.encoding = ""
+    endif
+  endif
+  if a:settings.encoding != ""
+    let l:vim_encoding = tohtml#EncodingFromCharset(a:settings.encoding)
+    if l:vim_encoding != ""
+      " if the Vim encoding to HTML encoding conversion is set up (by default or
+      " by the user) to convert to a different encoding, we need to also change
+      " the Vim encoding of the new buffer
+      let a:settings.vim_encoding = l:vim_encoding
+    endif
+  endif
+endfun "}}}
+
+" Get the proper Vim encoding option setting from an HTML charset name.
+function! tohtml#EncodingFromCharset(encoding) "{{{
+  if exists('g:html_encoding_override') && has_key(g:html_encoding_override, a:encoding)
+    return g:html_encoding_override[a:encoding]
+  elseif has_key(g:tohtml#charset_to_encoding, tolower(a:encoding))
+    return g:tohtml#charset_to_encoding[tolower(a:encoding)]
+  else
+    return ""
+  endif
+endfun "}}}
 
 let &cpo = s:cpo_sav
 unlet s:cpo_sav
 
 " Make sure any patches will probably use consistent indent
-"   vim: ts=8 sw=2 sts=2 noet
+"   vim: ts=8 sw=2 sts=2 noet fdm=marker
index 13e82ac..9a5a73c 100644 (file)
@@ -1,9 +1,9 @@
 " vimball.vim : construct a file containing both paths and files
 " Author:      Charles E. Campbell, Jr.
-" Date:                Apr 12, 2010
-" Version:     31
+" Date:                Jan 17, 2012
+" Version:     35
 " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
-" Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.
+" Copyright: (c) 2004-2011 by Charles E. Campbell, Jr.
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
 "            (see |copyright|) except use "Vimball" instead of "Vim".
 "            No warranty, express or implied.
@@ -14,7 +14,7 @@
 if &cp || exists("g:loaded_vimball")
  finish
 endif
-let g:loaded_vimball = "v31"
+let g:loaded_vimball = "v35"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of vimball needs vim 7.2"
@@ -67,10 +67,10 @@ endif
 " vimball#MkVimball: creates a vimball given a list of paths to files {{{2
 " Input:
 "     line1,line2: a range of lines containing paths to files to be included in the vimball
-"     writelevel : if true, force a write to filename.vba, even if it exists
+"     writelevel : if true, force a write to filename.vmb, even if it exists
 "                  (usually accomplished with :MkVimball! ...
-"     filename   : base name of file to be created (ie. filename.vba)
-" Output: a filename.vba using vimball format:
+"     filename   : base name of file to be created (ie. filename.vmb)
+" Output: a filename.vmb using vimball format:
 "     path
 "     filesize
 "     [file]
@@ -80,12 +80,12 @@ endif
 fun! vimball#MkVimball(line1,line2,writelevel,...) range
 "  call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:1.">) a:0=".a:0)
   if a:1 =~ '\.vim$' || a:1 =~ '\.txt$'
-   let vbname= substitute(a:1,'\.\a\{3}$','.vba','')
+   let vbname= substitute(a:1,'\.\a\{3}$','.vmb','')
   else
    let vbname= a:1
   endif
-  if vbname !~ '\.vba$'
-   let vbname= vbname.'.vba'
+  if vbname !~ '\.vmb$'
+   let vbname= vbname.'.vmb'
   endif
 "  call Decho("vbname<".vbname.">")
   if !a:writelevel && a:1 =~ '[\/]'
@@ -134,7 +134,7 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
    " create/switch to mkvimball tab
    if !exists("vbtabnr")
     tabnew
-    silent! file Vimball
+    sil! file Vimball
     let vbtabnr= tabpagenr()
    else
     exe "tabn ".vbtabnr
@@ -195,8 +195,8 @@ fun! vimball#Vimball(really,...)
 "  call Dfunc("vimball#Vimball(really=".a:really.") a:0=".a:0)
 
   if v:version < 701 || (v:version == 701 && !exists('*fnameescape'))
-   echoerr "your vim is missing the fnameescape() function"
-"   call Dret("vimball#Vimball : needs 7.1 with patch 299")
+   echoerr "your vim is missing the fnameescape() function (pls upgrade to vim 7.2 or later)"
+"   call Dret("vimball#Vimball : needs 7.1 with patch 299 or later")
    return
   endif
 
@@ -214,13 +214,22 @@ fun! vimball#Vimball(really,...)
   " set up vimball tab
 "  call Decho("setting up vimball tab")
   tabnew
-  silent! file Vimball
+  sil! file Vimball
   let vbtabnr= tabpagenr()
   let didhelp= ""
 
   " go to vim plugin home
   if a:0 > 0
+   " let user specify the directory where the vimball is to be unpacked.
+   " If, however, the user did not specify a full path, set the home to be below the current directory
    let home= expand(a:1)
+   if has("win32") || has("win95") || has("win64") || has("win16")
+       if home !~ '^\a:[/\\]'
+        let home= getcwd().'/'.a:1
+       endif
+   elseif home !~ '^/'
+       let home= getcwd().'/'.a:1
+   endif
   else
    let home= vimball#VimballHome()
   endif
@@ -254,11 +263,10 @@ fun! vimball#Vimball(really,...)
   while 1 < linenr && linenr < line("$")
    let fname   = substitute(getline(linenr),'\t\[\[\[1$','','')
    let fname   = substitute(fname,'\\','/','g')
-"   let fsize   = getline(linenr+1)+0
    let fsize   = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
-   let fenc    = substitute(getline(linenr+1),'^\d\+\s*\(\S\+\)$','\1','')
+   let fenc    = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
    let filecnt = filecnt + 1
-"   call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt)
+"   call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt. " fenc=".fenc)
 
    if a:really
     echomsg "extracted <".fname.">: ".fsize." lines"
@@ -283,11 +291,14 @@ fun! vimball#Vimball(really,...)
 "    call Decho("making directories if they don't exist yet (fname<".fname.">)")
     let fnamebuf= substitute(fname,'\\','/','g')
        let dirpath = substitute(home,'\\','/','g')
+"      call Decho("init: fnamebuf<".fnamebuf.">")
+"      call Decho("init: dirpath <".dirpath.">")
     while fnamebuf =~ '/'
      let dirname  = dirpath."/".substitute(fnamebuf,'/.*$','','')
         let dirpath  = dirname
      let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','')
 "       call Decho("dirname<".dirname.">")
+"       call Decho("dirpath<".dirpath.">")
      if !isdirectory(dirname)
 "      call Decho("making <".dirname.">")
       if exists("g:vimball_mkdir")
@@ -306,20 +317,22 @@ fun! vimball#Vimball(really,...)
    let linenr   = linenr + 2
    let lastline = linenr + fsize - 1
 "   call Decho("exe ".linenr.",".lastline."yank a")
-   exe "silent ".linenr.",".lastline."yank a"
+   " no point in handling a zero-length file
+   if lastline >= linenr
+    exe "silent ".linenr.",".lastline."yank a"
 
-   " copy "a" buffer into tab
+    " copy "a" buffer into tab
 "   call Decho('copy "a buffer into tab#'.vbtabnr)
-   exe "tabn ".vbtabnr
-   setlocal ma
-   silent! %d
-   silent put a
-   1
-   silent d
-
-   " write tab to file
-   if a:really
-    let fnamepath= home."/".fname
+    exe "tabn ".vbtabnr
+    setlocal ma
+    sil! %d
+    silent put a
+    1
+    sil! d
+
+    " write tab to file
+    if a:really
+     let fnamepath= home."/".fname
 "    call Decho("exe w! ".fnameescape(fnamepath))
        if fenc != ""
         exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
@@ -328,17 +341,18 @@ fun! vimball#Vimball(really,...)
        endif
        echo "wrote ".fnameescape(fnamepath)
        call s:RecordInVar(home,"call delete('".fnamepath."')")
-   endif
+    endif
 
-   " return to tab with vimball
+    " return to tab with vimball
 "   call Decho("exe tabn ".curtabnr)
-   exe "tabn ".curtabnr
+    exe "tabn ".curtabnr
 
-   " set up help if its a doc/*.txt file
+    " set up help if its a doc/*.txt file
 "   call Decho("didhelp<".didhelp."> fname<".fname.">")
-   if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
-       let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
+    if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
+       let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
 "      call Decho("didhelp<".didhelp.">")
+    endif
    endif
 
    " update for next file
@@ -400,7 +414,9 @@ fun! vimball#RmVimball(...)
    let curfile= a:1
 "   call Decho("case a:0=".a:0.": curfile<".curfile.">")
   endif
-  if curfile =~ '\.vba$'
+  if curfile =~ '\.vmb$'
+   let curfile= substitute(curfile,'\.vmb','','')
+  elseif curfile =~ '\.vba$'
    let curfile= substitute(curfile,'\.vba','','')
   endif
   if a:0 >= 2
@@ -418,13 +434,17 @@ fun! vimball#RmVimball(...)
 "   call Decho(".VimballRecord is readable")
 "   call Decho("curfile<".curfile.">")
    keepalt keepjumps 1split 
-   silent! keepalt keepjumps e .VimballRecord
+   sil! keepalt keepjumps e .VimballRecord
    let keepsrch= @/
 "   call Decho('search for ^\M'.curfile.'.\m: ')
-"   call Decho('search for ^\M'.curfile.'.\mvba: ')
-"   call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.vba: ')
+"   call Decho('search for ^\M'.curfile.'.\m{vba|vmb}: ')
+"   call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.{vba|vmb}: ')
    if search('^\M'.curfile."\m: ".'cw')
        let foundit= 1
+   elseif search('^\M'.curfile.".\mvmb: ",'cw')
+       let foundit= 2
+   elseif search('^\M'.curfile.'\m[-0-9.]*\.vmb: ','cw')
+       let foundit= 2
    elseif search('^\M'.curfile.".\mvba: ",'cw')
        let foundit= 1
    elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw')
@@ -433,25 +453,29 @@ fun! vimball#RmVimball(...)
     let foundit = 0
    endif
    if foundit
-       let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
+       if foundit == 1
+        let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
+       else
+        let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
+       endif
     let s:VBRstring= substitute(exestring,'call delete(','','g')
     let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
 "      call Decho("exe ".exestring)
-       silent! keepalt keepjumps exe exestring
-       silent! keepalt keepjumps d
+       sil! keepalt keepjumps exe exestring
+       sil! keepalt keepjumps d
        let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
 "      call Decho("exestring<".exestring.">")
        echomsg "removed ".exestring." files"
    else
     let s:VBRstring= ''
-       let curfile    = substitute(curfile,'\.vba','','')
+       let curfile    = substitute(curfile,'\.vmb','','')
 "    call Decho("unable to find <".curfile."> in .VimballRecord")
        if !exists("s:ok_unablefind")
      call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord")
        endif
    endif
-   silent! keepalt keepjumps g/^\s*$/d
-   silent! keepalt keepjumps wq!
+   sil! keepalt keepjumps g/^\s*$/d
+   sil! keepalt keepjumps wq!
    let @/= keepsrch
   endif
   call s:ChgDir(curdir)
@@ -557,9 +581,19 @@ endfun
 fun! s:ChgDir(newdir)
 "  call Dfunc("ChgDir(newdir<".a:newdir.">)")
   if (has("win32") || has("win95") || has("win64") || has("win16"))
-   exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
+   try
+    exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
+   catch  /^Vim\%((\a\+)\)\=:E/
+    call mkdir(fnameescape(substitute(a:newdir,'/','\\','g')))
+    exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
+   endtry
   else
-   exe 'silent cd '.fnameescape(a:newdir)
+   try
+    exe 'silent cd '.fnameescape(a:newdir)
+   catch  /^Vim\%((\a\+)\)\=:E/
+    call mkdir(fnameescape(a:newdir))
+    exe 'silent cd '.fnameescape(a:newdir)
+   endtry
   endif
 "  call Dret("ChgDir : curdir<".getcwd().">")
 endfun
@@ -599,7 +633,7 @@ fun! s:RecordInFile(home)
    let cmd= expand("%:tr").": "
 "   call Decho("cmd<".cmd.">")
 
-   silent! keepalt keepjumps e .VimballRecord
+   sil! keepalt keepjumps e .VimballRecord
    setlocal ma
    $
    if exists("s:recordfile") && exists("s:recorddir")
@@ -616,8 +650,8 @@ fun! s:RecordInFile(home)
 
    " put command into buffer, write .VimballRecord `file
    keepalt keepjumps put=cmd
-   silent! keepalt keepjumps g/^\s*$/d
-   silent! keepalt keepjumps wq!
+   sil! keepalt keepjumps g/^\s*$/d
+   sil! keepalt keepjumps wq!
    call s:ChgDir(curdir)
 
    if exists("s:recorddir")
@@ -693,10 +727,11 @@ fun! vimball#SaveSettings()
   let s:repkeep = &report
   let s:vekeep  = &ve
   let s:ffkeep  = &l:ff
+  let s:swfkeep = &l:swf
   if exists("&acd")
-   setlocal ei=all ve=all noacd nofen noic report=999 nohid bt= ma lz pm= ff=unix
+   setlocal ei=all ve=all noacd nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
   else
-   setlocal ei=all ve=all       nofen noic report=999 nohid bt= ma lz pm= ff=unix
+   setlocal ei=all ve=all       nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
   endif
   " vimballs should be in unix format
   setlocal ff=unix
@@ -732,6 +767,9 @@ fun! vimball#RestoreSettings()
 "  call Dret("RestoreSettings")
 endfun
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " ---------------------------------------------------------------------
 " Modelines: {{{1
 " vim: fdm=marker
index 37f9bb4..4c1ac4f 100644 (file)
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:    XML
 " Maintainer:  Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change: 2006 Aug 15
+" Last Change: 2013 Jun 29
 " Version: 1.9
 "
 " Changelog:
@@ -475,12 +475,12 @@ function! s:InCommentAt(line, col)
 endfunction
 
 function! s:SetKeywords()
-       let g:IsKeywordBak=&iskeyword
-       let &iskeyword='33-255'
+       let s:IsKeywordBak=&l:iskeyword
+       let &l:iskeyword='33-255'
 endfunction
 
 function! s:RestoreKeywords()
-       let &iskeyword=g:IsKeywordBak
+       let &l:iskeyword=s:IsKeywordBak
 endfunction
 
 function! s:Push(el, sname)
index a55f1dc..687500e 100644 (file)
@@ -1,10 +1,10 @@
 " zip.vim: Handles browsing zipfiles
 "            AUTOLOAD PORTION
-" Date:                Apr 12, 2010
-" Version:     23
-" Maintainer:  Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:                Jul 02, 2013
+" Version:     27
+" Maintainer:  Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:     Vim License  (see vim's :help license)
-" Copyright:    Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2013 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
 "               this plugin, you agree that in no event will the copyright
 "               holder be liable for any damages resulting from the use
 "               of this software.
+"redraw!|call DechoSep()|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 
 " ---------------------------------------------------------------------
 " Load Once: {{{1
 if &cp || exists("g:loaded_zip")
  finish
 endif
-let g:loaded_zip= "v23"
+let g:loaded_zip= "v27"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of zip needs vim 7.2"
@@ -28,6 +29,7 @@ if v:version < 702
 endif
 let s:keepcpo= &cpo
 set cpo&vim
+"DechoTabOn
 
 let s:zipfile_escape = ' ?&;\'
 let s:ERROR          = 2
@@ -60,6 +62,16 @@ endif
 " zip#Browse: {{{2
 fun! zip#Browse(zipfile)
 "  call Dfunc("zip#Browse(zipfile<".a:zipfile.">)")
+  " sanity check: insure that the zipfile has "PK" as its first two letters
+  "               (zipped files have a leading PK as a "magic cookie")
+  if !filereadable(a:zipfile) || readfile(a:zipfile, "", 1)[0] !~ '^PK'
+   exe "noautocmd e ".fnameescape(a:zipfile)
+"   call Dret("zip#Browse : not a zipfile<".a:zipfile.">")
+   return
+"  else        " Decho
+"   call Decho("zip#Browse: a:zipfile<".a:zipfile."> passed PK test - its a zip file")
+  endif
+
   let repkeep= &report
   set report=10
 
@@ -103,38 +115,26 @@ fun! zip#Browse(zipfile)
   set ft=tar
 
   " give header
-  let lastline= line("$")
-  call setline(lastline+1,'" zip.vim version '.g:loaded_zip)
-  call setline(lastline+2,'" Browsing zipfile '.a:zipfile)
-  call setline(lastline+3,'" Select a file with cursor and press ENTER')
-  $put =''
-  0d
-  $
+  call append(0, ['" zip.vim version '.g:loaded_zip,
+ \                '" Browsing zipfile '.a:zipfile,
+ \                '" Select a file with cursor and press ENTER'])
+  keepj $
 
 "  call Decho("exe silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1))
-  exe "silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1)
+  exe "keepj sil! r! ".g:zip_unzipcmd." -Z -1 -- ".s:Escape(a:zipfile,1)
   if v:shell_error != 0
    redraw!
    echohl WarningMsg | echo "***warning*** (zip#Browse) ".fnameescape(a:zipfile)." is not a zip file" | echohl None
 "   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   silent %d
+   keepj sil! %d
    let eikeep= &ei
    set ei=BufReadCmd,FileReadCmd
-   exe "r ".fnameescape(a:zipfile)
+   exe "keepj r ".fnameescape(a:zipfile)
    let &ei= eikeep
-   1d
+   keepj 1d
 "   call Dret("zip#Browse")
    return
   endif
-"  call Decho("line 6: ".getline(6))
-  let namecol= stridx(getline(6),'Name') + 1
-"  call Decho("namecol=".namecol)
-  4,$g/^\s*----/d
-  4,$g/^\s*\a/d
-  $d
-  if namecol > 0
-   exe 'silent 4,$s/^.*\%'.namecol.'c//'
-  endif
 
   setlocal noma nomod ro
   noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>
@@ -200,16 +200,28 @@ fun! zip#Read(fname,mode)
   else
    let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','')
    let fname   = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','')
-   let fname = substitute(fname, '[', '[[]', 'g')
+   let fname   = substitute(fname, '[', '[[]', 'g')
   endif
 "  call Decho("zipfile<".zipfile.">")
 "  call Decho("fname  <".fname.">")
 
-"  call Decho("exe r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1))
-  exe "silent r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1)
+  " the following code does much the same thing as
+  "   exe "keepj sil! r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1)
+  " but allows zipfile:... entries in quickfix lists
+  let temp = tempname()
+"  call Decho("using temp file<".temp.">")
+  let fn   = expand('%:p')
+  exe "sil! !".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1).' > '.temp
+"  call Decho("exe sil! !".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1).' > '.temp)
+  sil exe 'keepalt file '.temp
+  sil keepj e!
+  sil exe 'keepalt file '.fnameescape(fn)
+  call delete(temp)
+
+  filetype detect
 
   " cleanup
-  0d
+  "  keepj 0d   " used to be needed for the ...r! ... method
   set nomod
 
   let &report= repkeep
@@ -278,7 +290,7 @@ fun! zip#Write(fname)
 
   if fname =~ '/'
    let dirpath = substitute(fname,'/[^/]\+$','','e')
-   if executable("cygpath")
+   if has("win32unix") && executable("cygpath")
     let dirpath = substitute(system("cygpath ".s:Escape(dirpath,0)),'\n','','e')
    endif
 "   call Decho("mkdir(dirpath<".dirpath.">,p)")
@@ -290,7 +302,7 @@ fun! zip#Write(fname)
 "  call Decho("zipfile<".zipfile."> fname<".fname.">")
 
   exe "w! ".fnameescape(fname)
-  if executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    let zipfile = substitute(system("cygpath ".s:Escape(zipfile,0)),'\n','','e')
   endif
 
index 6aaa244..a36f9f6 100644 (file)
@@ -2,7 +2,7 @@
 " vim: tw=0 ts=4 sw=4
 " Vim color file
 " Maintainer:  Ron Aaron <ron@ronware.org>
-" Last Change: 2006 Dec 10
+" Last Change: 2013 May 23
 
 hi clear
 set background=dark
@@ -43,6 +43,8 @@ hi MatchParen   term=reverse  ctermfg=blue guibg=Blue
 hi TabLine               term=bold,reverse  cterm=bold ctermfg=lightblue ctermbg=white gui=bold guifg=blue guibg=white
 hi TabLineFill   term=bold,reverse  cterm=bold ctermfg=lightblue ctermbg=white gui=bold guifg=blue guibg=white
 hi TabLineSel    term=reverse  ctermfg=white ctermbg=lightblue guifg=white guibg=blue
+hi Underlined    term=underline cterm=bold,underline ctermfg=lightblue guifg=lightblue gui=bold,underline
+hi Ignore                ctermfg=black ctermbg=black guifg=black guibg=black
 hi link IncSearch              Visual
 hi link String                 Constant
 hi link Character              Constant
index 45d6445..1e9caa3 100644 (file)
@@ -2,7 +2,7 @@
 " vim: tw=0 ts=4 sw=4
 " Vim color file
 " Maintainer:  Ron Aaron <ron@ronware.org>
-" Last Change: 2003 May 02
+" Last Change: 2013 May 24
 
 set background=dark
 hi clear
@@ -11,7 +11,7 @@ if exists("syntax_on")
 endif
 let g:colors_name = "ron"
 hi Normal              guifg=cyan      guibg=black
-hi NonText             guifg=brown
+hi NonText             guifg=yellow guibg=#303030
 hi comment             guifg=green
 hi constant            guifg=cyan      gui=bold
 hi identifier  guifg=cyan      gui=NONE
@@ -24,10 +24,11 @@ hi WarningMsg       guifg=Black     guibg=Green
 hi Error               guibg=Red
 hi Todo                        guifg=Black     guibg=orange
 hi Cursor              guibg=#60a060 guifg=#00ff00
-hi Search              guibg=lightslateblue
+hi Search              guibg=darkgray guifg=black gui=bold 
 hi IncSearch   gui=NONE guibg=steelblue
 hi LineNr              guifg=darkgrey
 hi title               guifg=darkgrey
+hi ShowMarksHL ctermfg=cyan ctermbg=lightblue cterm=bold guifg=yellow guibg=black  gui=bold
 hi StatusLineNC        gui=NONE guifg=lightblue guibg=darkblue
 hi StatusLine  gui=bold        guifg=cyan      guibg=blue
 hi label               guifg=gold2
@@ -41,3 +42,4 @@ hi DiffDelete   guibg=coral
 hi Folded              guibg=gray30
 hi FoldColumn  guibg=gray30 guifg=white
 hi cIf0                        guifg=gray
+hi diffOnly    guifg=red gui=bold
index 74ab3e4..eac461b 100644 (file)
@@ -1,8 +1,7 @@
 " Vim compiler file
 " Compiler:    Checkstyle
-" Maintainer:  Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/compiler/checkstyle.vim
-" Last Change: 2004 Nov 27
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2013 Jun 26
 
 if exists("current_compiler")
   finish
@@ -17,4 +16,4 @@ CompilerSet makeprg=java\ com.puppycrawl.tools.checkstyle.Main\ -f\ plain
 
 " sample error: WebTable.java:282: '+=' is not preceeded with whitespace.
 "              WebTable.java:201:1: '{' should be on the previous line.
-CompilerSet errorformat=%f:%l:\ %m,%f:%l:%v:\ %m,%-G%.%#
+CompilerSet errorformat=%f:%l:%v:\ %m,%f:%l:\ %m,%-G%.%#
index 5b75d6d..4cc1784 100644 (file)
@@ -1,19 +1,26 @@
 " Vim compiler file
-" Compiler:    ms C#
-" Maintainer:  Joseph H. Yao (hyao@sina.com)
-" Last Change: 2004 Mar 27
+" Compiler:    Microsoft Visual Studio C#
+" Maintainer:  Zhou YiChao (broken.zhou@gmail.com)
+" Previous Maintainer: Joseph H. Yao (hyao@sina.com)
+" Last Change: 2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "cs"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2         " older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
 endif
 
-" default errorformat
 CompilerSet errorformat&
+CompilerSet errorformat+=%f(%l\\,%v):\ %t%*[^:]:\ %m,
+            \%trror%*[^:]:\ %m,
+            \%tarning%*[^:]:\ %m
 
-" default make
 CompilerSet makeprg=csc\ %
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 8e267ec..0bf5487 100644 (file)
 "    Help Page: compiler-decada
 "------------------------------------------------------------------------------
 
-if (exists("current_compiler")     &&
-   \ current_compiler == "decada")  ||
-   \ version < 700
+if (exists("current_compiler") && current_compiler == "decada") || version < 700
    finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 let current_compiler = "decada"
 
@@ -44,6 +44,9 @@ endif
 execute "CompilerSet makeprg="     . escape (g:decada.Make_Command, ' ')
 execute "CompilerSet errorformat=" . escape (g:decada.Error_Format, ' ')
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff --git a/runtime/compiler/erlang.vim b/runtime/compiler/erlang.vim
new file mode 100644 (file)
index 0000000..e177a27
--- /dev/null
@@ -0,0 +1,13 @@
+" Vim compiler file
+" Compiler:     Erlang
+" Maintainer:  Dmitry Vasiliev <dima at hlabs dot org>
+" Last Change: 2012-02-13
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "erlang"
+
+CompilerSet makeprg=erlc\ -Wall\ %
+
+CompilerSet errorformat=%f:%l:\ %m
index 614fc17..45ad5ee 100644 (file)
@@ -1,9 +1,7 @@
 " Vim compiler file
 " Language:            eRuby
 " Maintainer:          Doug Kearns <dougkearns@gmail.com>
-" Last Change:         2008 Aug 1
-" URL:                 http://vim-ruby.rubyforge.org
-" Anon CVS:            See above site
+" URL:                 https://github.com/vim-ruby/vim-ruby
 " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
 
 if exists("current_compiler")
diff --git a/runtime/compiler/g95.vim b/runtime/compiler/g95.vim
new file mode 100644 (file)
index 0000000..ecb3212
--- /dev/null
@@ -0,0 +1,28 @@
+" Compiler: G95
+" Maintainer: H Xu <xuhdev@gmail.com>
+" Version: 0.1.3
+" Last Change: 2012 Apr 30
+" Homepage: http://www.vim.org/scripts/script.php?script_id=3492
+"           https://bitbucket.org/xuhdev/compiler-g95.vim
+" License: Same as Vim
+
+if exists('current_compiler')
+    finish
+endif
+let current_compiler = 'g95'
+let s:keepcpo= &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2         " older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=
+            \%AIn\ file\ %f:%l,
+            \%-C%p1,
+            \%-Z%trror:\ %m,
+            \%-Z%tarning\ (%n):\ %m,
+            \%-C%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 776bdee..987a3a6 100644 (file)
@@ -1,7 +1,7 @@
 " Vim compiler file
 " Compiler:         GNU C Compiler
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2010-05-30
+" Latest Revision:  2010-10-14
 
 if exists("current_compiler")
   finish
@@ -9,7 +9,7 @@ endif
 let current_compiler = "gcc"
 
 let s:cpo_save = &cpo
-set cpo-=C
+set cpo&vim
 
 CompilerSet errorformat=
       \%*[^\"]\"%f\"%*\\D%l:%c:\ %m,
@@ -18,10 +18,10 @@ CompilerSet errorformat=
       \\"%f\"%*\\D%l:\ %m,
       \%-G%f:%l:\ %trror:\ (Each\ undeclared\ identifier\ is\ reported\ only\ once,
       \%-G%f:%l:\ %trror:\ for\ each\ function\ it\ appears\ in.),
-      \%f:%l:%c:\ %terror:\ %m,
+      \%f:%l:%c:\ %trror:\ %m,
       \%f:%l:%c:\ %tarning:\ %m,
       \%f:%l:%c:\ %m,
-      \%f:%l:\ %terror:\ %m,
+      \%f:%l:\ %trror:\ %m,
       \%f:%l:\ %tarning:\ %m,
       \%f:%l:\ %m,
       \\"%f\"\\,\ line\ %l%*\\D%c%*[^\ ]\ %m,
diff --git a/runtime/compiler/gfortran.vim b/runtime/compiler/gfortran.vim
new file mode 100644 (file)
index 0000000..1e4e5cf
--- /dev/null
@@ -0,0 +1,27 @@
+" Compiler: GNU Fortran Compiler
+" Maintainer: H Xu <xuhdev@gmail.com>
+" Version: 0.1.3
+" Last Change: 2012 Apr 30
+" Homepage: http://www.vim.org/scripts/script.php?script_id=3496
+"           https://bitbucket.org/xuhdev/compiler-gfortran.vim
+" License: Same as Vim
+
+if exists('current_compiler')
+    finish
+endif
+let current_compiler = 'gfortran'
+let s:keepcpo= &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2         " older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=
+            \%A%f:%l.%c:,
+            \%-Z%trror:\ %m,
+            \%-Z%tarning:\ %m,
+            \%-C%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index d7ec55b..3ad1eb4 100644 (file)
 "    Help Page: compiler-gnat
 "------------------------------------------------------------------------------
 
-if (exists("current_compiler")     &&
-   \ current_compiler == "gnat")    ||
-   \ version < 700
+if (exists("current_compiler")&& current_compiler == "gnat") || version < 700
    finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 let current_compiler = "gnat"
 
@@ -62,6 +62,9 @@ endif
 execute "CompilerSet makeprg="     . escape (g:gnat.Get_Command('Make'), ' ')
 execute "CompilerSet errorformat=" . escape (g:gnat.Error_Format, ' ')
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff --git a/runtime/compiler/haml.vim b/runtime/compiler/haml.vim
new file mode 100644 (file)
index 0000000..b06a672
--- /dev/null
@@ -0,0 +1,28 @@
+" Vim compiler file
+" Compiler:    Haml
+" Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2013 May 30
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "haml"
+
+if exists(":CompilerSet") != 2         " older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+CompilerSet makeprg=haml\ -c
+
+CompilerSet errorformat=
+      \Haml\ %trror\ on\ line\ %l:\ %m,
+      \Syntax\ %trror\ on\ line\ %l:\ %m,
+      \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:set sw=2 sts=2:
index 685bd5b..15d5ce5 100644 (file)
@@ -2,7 +2,7 @@
 " Compiler:    HP aCC
 " Maintainer:  Matthias Ulrich <matthias-ulrich@web.de>
 " URL:          http://www.subhome.de/vim/hp_acc.vim
-" Last Change: 2005 Nov 19
+" Last Change: 2012 Apr 30
 "
 "  aCC --version says: "HP ANSI C++ B3910B A.03.13"
 "  This compiler has been tested on:
@@ -19,6 +19,8 @@ if exists("current_compiler")
   finish
 endif
 let current_compiler = "hp_acc"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2         " older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -30,4 +32,7 @@ CompilerSet errorformat=%A%trror\ %n\:\ \"%f\"\\,\ line\ %l\ \#\ %m,
          \%Z\ \ \ \ %p^%.%#,
          \%-C%.%#
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:ts=8:sw=4:cindent
diff --git a/runtime/compiler/ifort.vim b/runtime/compiler/ifort.vim
new file mode 100644 (file)
index 0000000..3a60d0c
--- /dev/null
@@ -0,0 +1,27 @@
+" Compiler: Intel Fortran Compiler
+" Maintainer: H Xu <xuhdev@gmail.com>
+" Version: 0.1.1
+" Last Change: 2012 Apr 30
+" Homepage: http://www.vim.org/scripts/script.php?script_id=3497
+"           https://bitbucket.org/xuhdev/compiler-ifort.vim
+" License: Same as Vim
+
+if exists('current_compiler')
+    finish
+endif
+let current_compiler = 'ifort'
+let s:keepcpo= &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2         " older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=
+            \%A%f(%l):\ %trror\ \#%n:\ %m,
+            \%A%f(%l):\ %tarning\ \#%n:\ %m,
+            \%-Z%p^,
+            \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 9183826..254d13b 100644 (file)
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:     Intel C++ 7.1
 " Maintainer:   David Harrison <david_jr@users.sourceforge.net>
-" Last Change:  2004 May 16
+" Last Change:  2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "intel"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2         " older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat=%E%f(%l):\ error:\ %m,
                    \%-Z\ \ %p^,
                    \%-G\\s%#,
                    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 87bb9e1..f440e74 100644 (file)
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:    SGI IRIX 5.3 cc
 " Maintainer:  David Harrison <david_jr@users.sourceforge.net>
-" Last Change: 2004 Mar 27
+" Last Change: 2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "irix5_c"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2         " older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat=\%Ecfe:\ Error:\ %f\\,\ line\ %l:\ %m,
                     \%-Z\ %p^,
                     \-G\\s%#,
                     \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index f505768..0112dc1 100644 (file)
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:    SGI IRIX 5.3 CC or NCC
 " Maintainer:  David Harrison <david_jr@users.sourceforge.net>
-" Last Change: 2004 Mar 27
+" Last Change: 2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "irix5_cpp"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2         " older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat=%E\"%f\"\\,\ line\ %l:\ error(%n):\ ,
                      \%-Z\ \ %p%^,
                      \%+C\ %\\{10}%.%#,
                      \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 234e28b..a50bdca 100644 (file)
@@ -1,8 +1,7 @@
 " Vim compiler file
-" Compiler:     javac
-" Maintainer:   Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/compiler/javac.vim
-" Last Change:  2004 Nov 27
+" Compiler:    javac
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2004 Nov 27
 
 if exists("current_compiler")
   finish
index d85da7d..c606586 100644 (file)
@@ -1,7 +1,8 @@
 " Vim compiler file
 " Compiler:    Mono C# Compiler
 " Maintainer:  Jarek Sobiecki <harijari@go2.pl>
-" Latest Revision: 2006-06-18
+" Last Updated By: Peter Collingbourne
+" Latest Revision: 2012 Jul 19
 
 if exists("current_compiler")
   finish
@@ -12,13 +13,18 @@ let s:cpo_save = &cpo
 set cpo-=C
 
 setlocal errorformat=
+         \%D%.%#Project\ \"%f/%[%^/\"]%#\"%.%#,
+         \%X%.%#Done\ building\ project\ \"%f/%[%^/\"]%#\"%.%#,
+         \%-G%\\s%.%#,
+         \%E%f(%l):\ error\ CS%n:%m,
+         \%W%f(%l):\ warning\ CS%n:%m,
          \%E%f(%l\\,%c):\ error\ CS%n:%m,
          \%W%f(%l\\,%c):\ warning\ CS%n:%m,
          \%E%>syntax\ error\\,%m,%Z%f(%l\\,%c):\ error\ CS%n:%m,
          \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
          \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
          \%DMaking\ %*\\a\ in\ %f,
-         \%G-%.%#
+         \%-G%.%#
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
index b57eac0..a0ebfe7 100644 (file)
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:    SGI IRIX 6.5 MIPS C (cc)
 " Maintainer:  David Harrison <david_jr@users.sourceforge.net>
-" Last Change: 2004 Mar 27
+" Last Change: 2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "mips_c"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2         " older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat=%Ecc\-%n\ %.%#:\ ERROR\ File\ =\ %f\%\\,\ Line\ =\ %l,
                    \%-Z\ \ %p^,
                    \%-G\\s%#,
                    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 258a800..20eb70d 100644 (file)
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:    SGI IRIX 6.5 MIPSPro C (c89)
 " Maintainer:  David Harrison <david_jr@users.sourceforge.net>
-" Last Change: 2004 Mar 27
+" Last Change: 2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "mipspro_c89"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2         " older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -20,3 +22,6 @@ CompilerSet errorformat=%Ecc\-%n\ %.%#:\ ERROR\ File\ =\ %f\%\\,\ Line\ =\ %l,
                    \%+C\ \ %m,
                    \%-G\\s%#,
                    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 1f6074a..2f43af8 100644 (file)
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:    SGI IRIX 6.5 MIPSPro C++ (CC)
 " Maintainer:  David Harrison <david_jr@users.sourceforge.net>
-" Last Change: 2004 Mar 27
+" Last Change: 2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "mipspro_cpp"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2         " older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat=%Ecc\-%n\ %.%#:\ ERROR\ File\ =\ %f\%\\,\ Line\ =\ %l,
                    \%-Z\ \ %p^,
                    \%-G\\s%#,
                    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/msbuild.vim b/runtime/compiler/msbuild.vim
new file mode 100644 (file)
index 0000000..3652ca0
--- /dev/null
@@ -0,0 +1,21 @@
+" Vim compiler file
+" Compiler:    Microsoft Visual Studio C#
+" Maintainer:  Chiel ten Brinke (ctje92@gmail.com)
+" Last Change: 2013 May 13
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "msbuild"
+let s:keepcpo= &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2         " older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=\ %#%f(%l\\\,%c):\ %m
+CompilerSet makeprg=msbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/ocaml.vim b/runtime/compiler/ocaml.vim
new file mode 100644 (file)
index 0000000..da15bce
--- /dev/null
@@ -0,0 +1,44 @@
+" Vim Compiler File
+" Compiler:    ocaml
+" Maintainer:  See ftplugin/ocaml.vim (?)
+" Last Change: June 2013 by Marc Weber
+"
+" Marc Weber's comments:
+" Setting makeprg doesn't make sense, because there is ocamlc, ocamlopt,
+" ocamake and whatnot. So which one to use?
+"
+" This error format was moved from ftplugin/ocaml.vim to this file,
+" because ftplugin is the wrong file to set an error format
+" and the error format itself is annoying because it joins many lines in this
+" error case:
+"
+"    Error: The implementation foo.ml does not match the interface foo.cmi:
+"    Modules do not match case.
+"
+" So having it here makes people opt-in
+
+
+if exists("current_compiler")
+    finish
+endif
+let current_compiler = "ocaml"
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+CompilerSet errorformat =
+      \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
+      \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
+      \%+EReference\ to\ unbound\ regexp\ name\ %m,
+      \%Eocamlyacc:\ e\ -\ line\ %l\ of\ \"%f\"\\,\ %m,
+      \%Wocamlyacc:\ w\ -\ %m,
+      \%-Zmake%.%#,
+      \%C%m,
+      \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
+      \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
+      \%D%*\\a:\ Entering\ directory\ `%f',
+      \%X%*\\a:\ Leaving\ directory\ `%f',
+      \%DMaking\ %*\\a\ in\ %f
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 2f4f032..92f93b8 100644 (file)
@@ -1,8 +1,7 @@
 " Vim compiler file
-" Compiler:    PHP
-" Maintainer:  Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/compiler/php.vim
-" Last Change: 2004 Nov 27
+" Compiler:    PHP CLI
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2013 Jun 25
 
 if exists("current_compiler")
   finish
@@ -17,12 +16,11 @@ let s:cpo_save = &cpo
 set cpo-=C
 
 CompilerSet makeprg=php\ -lq
-
-CompilerSet errorformat=%E<b>Parse\ error</b>:\ %m\ in\ <b>%f</b>\ on\ line\ <b>%l</b><br\ />,
-                      \%W<b>Notice</b>:\ %m\ in\ <b>%f</b>\ on\ line\ <b>%l</b><br\ />,
-                      \%EParse\ error:\ %m\ in\ %f\ on\ line\ %l,
-                      \%WNotice:\ %m\ in\ %f</b>\ on\ line\ %l,
-                      \%-G%.%#
+CompilerSet errorformat=%E<b>%.%#Parse\ error</b>:\ %m\ in\ <b>%f</b>\ on\ line\ <b>%l</b><br\ />,
+                   \%W<b>%.%#Notice</b>:\ %m\ in\ <b>%f</b>\ on\ line\ <b>%l</b><br\ />,
+                   \%E%.%#Parse\ error:\ %m\ in\ %f\ on\ line\ %l,
+                   \%W%.%#Notice:\ %m\ in\ %f\ on\ line\ %l,
+                   \%-G%.%#
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff --git a/runtime/compiler/rake.vim b/runtime/compiler/rake.vim
new file mode 100644 (file)
index 0000000..3bd9da0
--- /dev/null
@@ -0,0 +1,35 @@
+" Vim compiler file
+" Language:            Rake
+" Maintainer:          Tim Pope <vimNOSPAM@tpope.org>
+" URL:                 https://github.com/vim-ruby/vim-ruby
+" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "rake"
+
+if exists(":CompilerSet") != 2         " older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+CompilerSet makeprg=rake
+
+CompilerSet errorformat=
+      \%D(in\ %f),
+      \%\\s%#from\ %f:%l:%m,
+      \%\\s%#from\ %f:%l:,
+      \%\\s%##\ %f:%l:%m,
+      \%\\s%##\ %f:%l,
+      \%\\s%#[%f:%l:\ %#%m,
+      \%\\s%#%f:%l:\ %#%m,
+      \%\\s%#%f:%l:,
+      \%m\ [%f:%l]:
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8:
index f46527e..7c340ba 100644 (file)
@@ -1,9 +1,7 @@
 " Vim compiler file
 " Language:            RSpec
 " Maintainer:          Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:         2009 Dec 22
-" URL:                 http://vim-ruby.rubyforge.org
-" Anon CVS:            See above site
+" URL:                 https://github.com/vim-ruby/vim-ruby
 " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
 
 if exists("current_compiler")
@@ -18,21 +16,15 @@ endif
 let s:cpo_save = &cpo
 set cpo-=C
 
-CompilerSet makeprg=spec
+CompilerSet makeprg=rspec
 
 CompilerSet errorformat=
-    \%+W'%.%#'\ FAILED,
-    \%+I'%.%#'\ FIXED,
-    \%-Cexpected:%.%#,
-    \%-C\ \ \ \ \ got:%.%#,
+    \%f:%l:\ %tarning:\ %m,
     \%E%.%#:in\ `load':\ %f:%l:%m,
-    \%C%f:%l:,
-    \%W%f:%l:\ warning:\ %m,
-    \%E%f:%l:in\ %*[^:]:\ %m,
-    \%E%f:%l:\ %m,
-    \%-Z%\tfrom\ %f:%l,
-    \%-Z%p^%.%#,
-    \%-C%.%#,
+    \%E%f:%l:in\ `%*[^']':\ %m,
+    \%-Z\ \ \ \ \ \#\ %f:%l:%.%#,
+    \%E\ \ %\\d%\\+)%.%#,
+    \%C\ \ \ \ \ %m,
     \%-G%.%#
 
 let &cpo = s:cpo_save
index 07c7d41..15d2d79 100644 (file)
@@ -9,7 +9,7 @@ endif
 let current_compiler = "rst"
 
 let s:cpo_save = &cpo
-set cpo-=C
+set cpo&vim
 
 setlocal errorformat=
       \%f:%l:\ (%tEBUG/0)\ %m,
index 9499ce1..dcf7a40 100644 (file)
@@ -1,33 +1,10 @@
 " Vim compiler file
 " Language:            Ruby
 " Function:            Syntax check and/or error reporting
-" Maintainer:          Tim Hammerquist <timh at rubyforge.org>
-" Last Change:         2008 Aug 1
-" URL:                 http://vim-ruby.rubyforge.org
-" Anon CVS:            See above site
+" Maintainer:          Tim Pope <vimNOSPAM@tpope.org>
+" URL:                 https://github.com/vim-ruby/vim-ruby
 " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
 " ----------------------------------------------------------------------------
-"
-" Changelog:
-" 0.2: script saves and restores 'cpoptions' value to prevent problems with
-"      line continuations
-" 0.1: initial release
-"
-" Contributors:
-"   Hugh Sasse <hgs@dmu.ac.uk>
-"   Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-"
-" Todo:
-"   match error type %m
-"
-" Comments:
-"   I know this file isn't perfect.  If you have any questions, suggestions,
-"   patches, etc., please don't hesitate to let me know.
-"
-"   This is my first experience with 'errorformat' and compiler plugins and
-"   I welcome any input from more experienced (or clearer-thinking)
-"   individuals.
-" ----------------------------------------------------------------------------
 
 if exists("current_compiler")
   finish
index 524c205..93a0c8e 100644 (file)
@@ -1,9 +1,7 @@
 " Vim compiler file
 " Language:            Test::Unit - Ruby Unit Testing Framework
 " Maintainer:          Doug Kearns <dougkearns@gmail.com>
-" Last Change:         2008 Aug 1
-" URL:                 http://vim-ruby.rubyforge.org
-" Anon CVS:            See above site
+" URL:                 https://github.com/vim-ruby/vim-ruby
 " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
 
 if exists("current_compiler")
diff --git a/runtime/compiler/sass.vim b/runtime/compiler/sass.vim
new file mode 100644 (file)
index 0000000..376a52b
--- /dev/null
@@ -0,0 +1,30 @@
+" Vim compiler file
+" Compiler:    Sass
+" Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2013 May 30
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "sass"
+
+if exists(":CompilerSet") != 2         " older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+CompilerSet makeprg=sass\ -c
+
+CompilerSet errorformat=
+      \%f:%l:%m\ (Sass::Syntax%trror),
+      \%ESyntax\ %trror:%m,
+      \%C%\\s%\\+on\ line\ %l\ of\ %f,
+      \%Z%.%#,
+      \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:set sw=2 sts=2:
index fbfa62d..38fd10c 100644 (file)
@@ -1,8 +1,7 @@
 " Vim compiler file
-" Compiler:    se (SmartEiffel Compiler)
-" Maintainer:  Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/compiler/se.vim
-" Last Change: 2004 Nov 27
+" Compiler:    se (Liberty Eiffel Compiler)
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2013 Jun 29
 
 if exists("current_compiler")
   finish
@@ -16,12 +15,15 @@ endif
 let s:cpo_save = &cpo
 set cpo-=C
 
-CompilerSet makeprg=compile\ %
+CompilerSet makeprg=se\ c
 
 CompilerSet errorformat=%W******\ Warning:\ %m,
                    \%E******\ Fatal\ Error:\ %m,
                    \%E******\ Error:\ %m,
-                   \%CLine\ %l\ column\ %c\ in\ %\\w%\\+\ (%f)\ :,
+                   \%ZLine\ %l\ column\ %c\ in\ %.%#\ (%f)\ %\\=:,
+                   \%ZLine\ %l\ columns\ %c\\,\ %\\d%\\+\ %.%#\ (%f)\ %\\=:,
+                   \%+C%*[^\ ]%.%#,
+                   \%-GThe\ source\ lines\ involved,
                    \%-G%.%#
 
 let &cpo = s:cpo_save
index 8bd6de6..81af185 100644 (file)
@@ -1,7 +1,6 @@
 " Vim compiler file
 " Compiler:    tcl
-" Maintainer:  Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/compiler/tcl.vim
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
 " Last Change: 2004 Nov 27
 
 if exists("current_compiler")
index 5828a91..e43be8d 100644 (file)
@@ -1,11 +1,13 @@
 " Vim compiler file
 " Compiler:     TeX
 " Maintainer:   Artem Chuprina <ran@ran.pp.ru>
-" Last Change:  2004 Mar 27
+" Last Change:  2012 Apr 30
 
 if exists("current_compiler")
        finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2         " older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -30,9 +32,6 @@ else
        let current_compiler = 'make'
 endif
 
-let s:cpo_save = &cpo
-set cpo-=C
-
 " Value errorformat are taken from vim help, see :help errorformat-LaTeX, with
 " addition from Srinath Avadhanula <srinath@fastmail.fm>
 CompilerSet errorformat=%E!\ LaTeX\ %trror:\ %m,
@@ -64,5 +63,5 @@ CompilerSet errorformat=%E!\ LaTeX\ %trror:\ %m,
        \%+Q%*[^()])%r,
        \%+Q[%\\d%*[^()])%r
 
-let &cpo = s:cpo_save
-unlet s:cpo_save
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 52bc526..56baee2 100644 (file)
@@ -1,11 +1,7 @@
 " Vim compiler file
 " Compiler:    HTML Tidy
-" Maintainer:  Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/compiler/tidy.vim
-" Last Change: 2004 Nov 27
-
-" NOTE: set 'tidy_compiler_040800' if you are using the 4th August 2000 release
-"       of HTML Tidy.
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2013 Jul 7
 
 if exists("current_compiler")
   finish
@@ -16,13 +12,7 @@ if exists(":CompilerSet") != 2               " older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
 endif
 
-" this is needed to work around a bug in the 04/08/00 release of tidy which
-" failed to set the filename if the -quiet option was used
-if exists("tidy_compiler_040800")
-  CompilerSet makeprg=tidy\ -errors\ --gnu-emacs\ yes\ %
-else
-  CompilerSet makeprg=tidy\ -quiet\ -errors\ --gnu-emacs\ yes\ %
-endif
+CompilerSet makeprg=tidy\ -quiet\ -errors\ --gnu-emacs\ yes\ %
 
 " sample warning: foo.html:8:1: Warning: inserting missing 'foobar' element
 " sample error:   foo.html:9:2: Error: <foobar> is not recognized!
diff --git a/runtime/compiler/xbuild.vim b/runtime/compiler/xbuild.vim
new file mode 100644 (file)
index 0000000..b508a46
--- /dev/null
@@ -0,0 +1,22 @@
+" Vim compiler file
+" Compiler:    Mono C#
+" Maintainer:  Chiel ten Brinke (ctje92@gmail.com)
+" Last Change: 2013 May 13
+
+if exists("current_compiler")
+  finish
+endif
+
+let current_compiler = "xbuild"
+let s:keepcpo= &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2         " older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=\ %#%f(%l\\\,%c):\ %m
+CompilerSet makeprg=xbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 8fde4e1..96cfa55 100644 (file)
@@ -1,8 +1,7 @@
 " Vim compiler file
 " Compiler:    xmllint
-" Maintainer:  Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/compiler/xmllint.vim
-" Last Change: 2004 Nov 27
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2013 Jul 8
 
 if exists("current_compiler")
   finish
@@ -16,12 +15,10 @@ endif
 let s:cpo_save = &cpo
 set cpo-=C
 
-CompilerSet makeprg=xmllint\ --valid\ --noout
+CompilerSet makeprg=xmllint\ --valid\ --noout
 
-CompilerSet errorformat=%E%f:%l:\ error:\ %m,
-                   \%W%f:%l:\ warning:\ %m,
-                   \%E%f:%l:\ validity\ error:\ %m,
-                   \%W%f:%l:\ validity\ warning:\ %m,
+CompilerSet errorformat=%+E%f:%l:\ %.%#\ error\ :\ %m,
+                   \%+W%f:%l:\ %.%#\ warning\ :\ %m,
                    \%-Z%p^,
                    \%-G%.%#
 
index 7a4bfaa..2f0be51 100644 (file)
@@ -1,4 +1,4 @@
-*arabic.txt*   For Vim version 7.3.  Last change: 2005 Mar 29
+*arabic.txt*   For Vim version 7.4.  Last change: 2010 Nov 13
 
 
                  VIM REFERENCE MANUAL    by Nadim Shaikli
@@ -146,7 +146,7 @@ o  Enable Arabic settings [short-cut]
                :set arabic
 <
    The two above noted possible invocations are the preferred manner
-   in which users are instructed to proceed.  Baring an enabled 'termbidi'
+   in which users are instructed to proceed.  Barring an enabled 'termbidi'
    setting, both command options:
 
      1. set the appropriate keymap
index c129e3f..3384051 100644 (file)
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 7.3.  Last change: 2010 Jul 22
+*autocmd.txt*   For Vim version 7.4.  Last change: 2013 Aug 04
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -33,7 +33,7 @@ files matching *.c.  You can also use autocommands to implement advanced
 features, such as editing compressed files (see |gzip-example|).  The usual
 place to put autocommands is in your .vimrc or .exrc file.
 
-                                                       *E203* *E204* *E143*
+                                               *E203* *E204* *E143* *E855*
 WARNING: Using autocommands is very powerful, and may lead to unexpected side
 effects.  Be careful not to destroy your text.
 - It's a good idea to do some testing on an expendable copy of a file first.
@@ -263,8 +263,10 @@ Name                       triggered by ~
        Startup and exit
 |VimEnter|             after doing all the startup stuff
 |GUIEnter|             after starting the GUI successfully
+|GUIFailed|            after starting the GUI failed
 |TermResponse|         after the terminal response to |t_RV| is received
 
+|QuitPre|              when using `:quit`, before deciding whether to quit
 |VimLeavePre|          before exiting Vim, before writing the viminfo file
 |VimLeave|             before exiting Vim, after writing the viminfo file
 
@@ -299,6 +301,8 @@ Name                        triggered by ~
 |InsertEnter|          starting Insert mode
 |InsertChange|         when typing <Insert> while in Insert or Replace mode
 |InsertLeave|          when leaving Insert mode
+|InsertCharPre|                when a character was typed in Insert mode, before
+                       inserting it
 
 |ColorScheme|          after loading a color scheme
 
@@ -310,6 +314,7 @@ Name                        triggered by ~
 |SessionLoadPost|      after loading a session file
 
 |MenuPopup|            just before showing the popup menu
+|CompleteDone|         after Insert mode completion is done
 
 |User|                 to be used in combination with ":doautocmd"
 
@@ -383,6 +388,10 @@ BufRead or BufReadPost             When starting to edit a new buffer, after
                                This does NOT work for ":r file".  Not used
                                when the file doesn't exist.  Also used after
                                successfully recovering a file.
+                               Also triggered for the filetypedetect group
+                               when executing ":filetype detect" and when
+                               writing an unnamed buffer in a way that the
+                               buffer gets a name.
                                                        *BufReadCmd*
 BufReadCmd                     Before starting to edit a new buffer.  Should
                                read the file into the buffer. |Cmd-event|
@@ -446,6 +455,9 @@ BufWriteCmd                 Before writing the whole buffer to a file.
                                'modified' if successful, unless '+' is in
                                'cpo' and writing to another file |cpo-+|.
                                The buffer contents should not be changed.
+                               When the command resets 'modified' the undo
+                               information is adjusted to mark older undo
+                               states as 'modified', like |:write| does.
                                |Cmd-event|
                                                        *BufWritePost*
 BufWritePost                   After writing the whole buffer to a file
@@ -469,6 +481,11 @@ CmdwinLeave                        Before leaving the command-line window.
                                                        *ColorScheme*
 ColorScheme                    After loading a color scheme. |:colorscheme|
 
+                                                       *CompleteDone*
+CompleteDone                   After Insert mode completion is done.  Either
+                               when something was completed or abandoning
+                               completion. |ins-completion|
+
                                                        *CursorHold*
 CursorHold                     When the user doesn't press a key for the time
                                specified with 'updatetime'.  Not re-triggered
@@ -496,16 +513,18 @@ CursorHold                        When the user doesn't press a key for the time
 CursorHoldI                    Just like CursorHold, but in Insert mode.
 
                                                        *CursorMoved*
-CursorMoved                    After the cursor was moved in Normal mode.
-                               Also when the text of the cursor line has been
-                               changed, e.g., with "x", "rx" or "p".
+CursorMoved                    After the cursor was moved in Normal or Visual
+                               mode.  Also when the text of the cursor line
+                               has been changed, e.g., with "x", "rx" or "p".
                                Not triggered when there is typeahead or when
                                an operator is pending.
                                For an example see |match-parens|.
-                               Careful: Don't do anything that the user does
-                               not expect or that is slow.
+                               Careful: This is triggered very often, don't
+                               do anything that the user does not expect or
+                               that is slow.
                                                        *CursorMovedI*
 CursorMovedI                   After the cursor was moved in Insert mode.
+                               Not triggered when the popup menu is visible.
                                Otherwise the same as CursorMoved.
                                                        *EncodingChanged*
 EncodingChanged                        Fires off after the 'encoding' option has been
@@ -657,12 +676,26 @@ InsertChange                      When typing <Insert> while in Insert or
                                indicates the new mode.
                                Be careful not to move the cursor or do
                                anything else that the user does not expect.
+                                                       *InsertCharPre*
+InsertCharPre                  When a character is typed in Insert mode,
+                               before inserting the char.
+                               The |v:char| variable indicates the char typed
+                               and can be changed during the event to insert
+                               a different character.  When |v:char| is set
+                               to more than one character this text is
+                               inserted literally.
+                               It is not allowed to change the text |textlock|.
+                               The event is not triggered when 'paste' is
+                               set.
                                                        *InsertEnter*
 InsertEnter                    Just before starting Insert mode.  Also for
                                Replace mode and Virtual Replace mode.  The
                                |v:insertmode| variable indicates the mode.
-                               Be careful not to move the cursor or do
-                               anything else that the user does not expect.
+                               Be careful not to do anything else that the
+                               user does not expect.
+                               The cursor is restored afterwards.  If you do
+                               not want that set |v:char| to a non-empty
+                               string.
                                                        *InsertLeave*
 InsertLeave                    When leaving Insert mode.  Also when using
                                CTRL-O |i_CTRL-O|.  But not for |i_CTRL-C|.
@@ -682,7 +715,10 @@ MenuPopup                  Just before showing the popup menu (under the
 QuickFixCmdPre                 Before a quickfix command is run (|:make|,
                                |:lmake|, |:grep|, |:lgrep|, |:grepadd|,
                                |:lgrepadd|, |:vimgrep|, |:lvimgrep|,
-                               |:vimgrepadd|, |:lvimgrepadd|, |:cscope|).
+                               |:vimgrepadd|, |:lvimgrepadd|, |:cscope|,
+                               |:cfile|, |:cgetfile|, |:caddfile|, |:lfile|,
+                               |:lgetfile|, |:laddfile|, |:helpgrep|,
+                               |:lhelpgrep|).
                                The pattern is matched against the command
                                being run.  When |:grep| is used but 'grepprg'
                                is set to "internal" it still matches "grep".
@@ -693,7 +729,16 @@ QuickFixCmdPre                     Before a quickfix command is run (|:make|,
                                                        *QuickFixCmdPost*
 QuickFixCmdPost                        Like QuickFixCmdPre, but after a quickfix
                                command is run, before jumping to the first
-                               location.  See |QuickFixCmdPost-example|.
+                               location. For |:cfile| and |:lfile| commands
+                               it is run after error file is read and before
+                               moving to the first error. 
+                               See |QuickFixCmdPost-example|.
+                                                       *QuitPre*
+QuitPre                                When using `:quit`, `:wq` or `:qall`, before
+                               deciding whether it closes the current window
+                               or quits Vim.  Can be used to close any
+                               non-essential window if the current window is
+                               the last ordinary window.
                                                        *RemoteReply*
 RemoteReply                    When a reply from a Vim that functions as
                                server was received |server2client()|.  The
@@ -786,13 +831,31 @@ TermChanged                       After the value of 'term' has changed.  Useful
 TermResponse                   After the response to |t_RV| is received from
                                the terminal.  The value of |v:termresponse|
                                can be used to do things depending on the
-                               terminal version.
+                               terminal version.  Note that this event may be
+                               triggered halfway executing another event,
+                               especially if file I/O, a shell command or
+                               anything else that takes time is involved.
+                                                       *TextChanged*
+TextChanged                    After a change was made to the text in the
+                               current buffer in Normal mode.  That is when
+                               |b:changedtick| has changed.
+                               Not triggered when there is typeahead or when
+                               an operator is pending.
+                               Careful: This is triggered very often, don't
+                               do anything that the user does not expect or
+                               that is slow.
+                                                       *TextChangedI*
+TextChangedI                   After a change was made to the text in the
+                               current buffer in Insert mode.
+                               Not triggered when the popup menu is visible.
+                               Otherwise the same as TextChanged.
                                                        *User*
 User                           Never executed automatically.  To be used for
                                autocommands that are only executed with
                                ":doautocmd".
                                                        *UserGettingBored*
-UserGettingBored               When the user hits CTRL-C.  Just kidding! :-)
+UserGettingBored               When the user presses the same key 42 times.
+                               Just kidding! :-)
                                                        *VimEnter*
 VimEnter                       After doing all the startup stuff, including
                                loading .vimrc files, executing the "-c cmd"
@@ -889,7 +952,8 @@ the autocommand is executed.  This is different from the command!
 
                                                        *file-pattern*
 The pattern is interpreted like mostly used in file names:
-       *       matches any sequence of characters
+       *       matches any sequence of characters; Unusual: includes path
+               separators
        ?       matches any single character
        \?      matches a '?'
        .       matches a '.'
@@ -898,6 +962,9 @@ The pattern is interpreted like mostly used in file names:
        \,      matches a ','
        { }     like \( \) in a |pattern|
        ,       inside { }: like \| in a |pattern|
+       \}      literal }
+       \{      literal {
+       \\\{n,m\}  like \{n,m} in a |pattern|
        \       special meaning like in a |pattern|
        [ch]    matches 'c' or 'h'
        [^ch]   match any character but 'c' and 'h'
@@ -1032,7 +1099,7 @@ Note that the 'eventignore' option applies here too.  Events listed in this
 option will not cause any commands to be executed.
 
                                        *:do* *:doau* *:doautocmd* *E217*
-:do[autocmd] [group] {event} [fname]
+:do[autocmd] [<nomodeline>] [group] {event} [fname]
                        Apply the autocommands matching [fname] (default:
                        current file name) for {event} to the current buffer.
                        You can use this when the current file name does not
@@ -1041,8 +1108,8 @@ option will not cause any commands to be executed.
                        It's possible to use this inside an autocommand too,
                        so you can base the autocommands for one extension on
                        another extension.  Example: >
-                               :au Bufenter *.cpp so ~/.vimrc_cpp
-                               :au Bufenter *.cpp doau BufEnter x.c
+                               :au BufEnter *.cpp so ~/.vimrc_cpp
+                               :au BufEnter *.cpp doau BufEnter x.c
 <                      Be careful to avoid endless loops.  See
                        |autocmd-nested|.
 
@@ -1051,14 +1118,17 @@ option will not cause any commands to be executed.
                        argument is included, Vim executes only the matching
                        autocommands for that group.  Note: if you use an
                        undefined group name, Vim gives you an error message.
-
+                                                       *<nomodeline>*
                        After applying the autocommands the modelines are
                        processed, so that their settings overrule the
                        settings from autocommands, like what happens when
-                       editing a file.
+                       editing a file. This is skipped when the <nomodeline>
+                       argument is present. You probably want to use
+                       <nomodeline> for events that are not used when loading
+                       a buffer, such as |User|.
 
                                                *:doautoa* *:doautoall*
-:doautoa[ll] [group] {event} [fname]
+:doautoa[ll] [<nomodeline>] [group] {event} [fname]
                        Like ":doautocmd", but apply the autocommands to each
                        loaded buffer.  Note that [fname] is used to select
                        the autocommands, not the buffers to which they are
index 19528ed..819bb04 100644 (file)
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 7.3.  Last change: 2010 Jul 29
+*change.txt*    For Vim version 7.4.  Last change: 2013 Jul 17
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -71,24 +71,37 @@ For inserting text see |insert.txt|.
                        "D" deletes the highlighted text plus all text until
                        the end of the line.  {not in Vi}
 
-                                               *:d* *:de* *:del* *:delete*
+                                       *:d* *:de* *:del* *:delete* *:dl* *:dp*
 :[range]d[elete] [x]   Delete [range] lines (default: current line) [into
                        register x].
+                       Note these weird abbreviations:
+                          :dl          delete and list
+                          :dell        idem
+                          :delel       idem
+                          :deletl      idem
+                          :deletel     idem
+                          :dp          delete and print
+                          :dep         idem
+                          :delp        idem
+                          :delep       idem
+                          :deletp      idem
+                          :deletep     idem
 
 :[range]d[elete] [x] {count}
                        Delete {count} lines, starting with [range]
                        (default: current line |cmdline-ranges|) [into
                        register x].
 
-These commands delete text.  You can repeat them with the "." command
-(except ":d") and undo them.  Use Visual mode to delete blocks of text.  See
+These commands delete text.  You can repeat them with the `.` command
+(except `:d`) and undo them.  Use Visual mode to delete blocks of text.  See
 |registers| for an explanation of registers.
 
 An exception for the d{motion} command: If the motion is not linewise, the
 start and end of the motion are not in the same line, and there are only
 blanks before the start and after the end of the motion, the delete becomes
 linewise.  This means that the delete also removes the line of blanks that you
-might expect to remain.
+might expect to remain. Use the |o_v| operator to force the motion to be
+characterwise.
 
 Trying to delete an empty region of text (e.g., "d0" in the first column)
 is an error when 'cpoptions' includes the 'E' flag.
@@ -131,7 +144,7 @@ gJ                  Join [count] lines, with a minimum of two lines.
                        See |ex-flags| for [flags].
 
 These commands delete the <EOL> between lines.  This has the effect of joining
-multiple lines into one line.  You can repeat these commands (except ":j") and
+multiple lines into one line.  You can repeat these commands (except `:j`) and
 undo them.
 
 These commands, except "gJ", insert one space in place of the <EOL> unless
@@ -259,6 +272,12 @@ r{char}                    Replace the character under the cursor with {char}.
                        <CR>.  CTRL-V <NL> replaces with a <Nul>.
                        {Vi: CTRL-V <CR> still replaces with a line break,
                        cannot replace something with a <CR>}
+
+                       If {char} is CTRL-E or CTRL-Y the character from the
+                       line below or above is used, just like with |i_CTRL-E|
+                       and |i_CTRL-Y|.  This also works with a count, thus
+                       `10r<C-E>` copies 10 characters from the line below.
+
                        If you give a [count], Vim replaces [count] characters
                        with [count] {char}s.  When {char} is a <CR> or <NL>,
                        however, Vim inserts only one <CR>: "5r<CR>" replaces
@@ -464,9 +483,9 @@ much as possible to make the indent.  You can use ">><<" to replace an indent
 made out of spaces with the same indent made out of <Tab>s (and a few spaces
 if necessary).  If the 'expandtab' option is on, Vim uses only spaces.  Then
 you can use ">><<" to replace <Tab>s in the indent by spaces (or use
-":retab!").
+`:retab!`).
 
-To move a line several 'shiftwidth's, use Visual mode or the ":" commands.
+To move a line several 'shiftwidth's, use Visual mode or the `:` commands.
 For example: >
        Vjj4>           move three lines 4 indents to the right
        :<<<            move current line 3 indents to the left
@@ -486,7 +505,7 @@ Examples of filters are "sort", which sorts lines alphabetically, and
 works like a filter; not all versions do).  The 'shell' option specifies the
 shell Vim uses to execute the filter command (See also the 'shelltype'
 option).  You can repeat filter commands with ".".  Vim does not recognize a
-comment (starting with '"') after the ":!" command.
+comment (starting with '"') after the `:!` command.
 
                                                        *!*
 !{motion}{filter}      Filter {motion} text lines through the external
@@ -522,11 +541,11 @@ comment (starting with '"') after the ":!" command.
 ={motion}              Filter {motion} lines through the external program
                        given with the 'equalprg' option.  When the 'equalprg'
                        option is empty (this is the default), use the
-                       internal formatting function |C-indenting|.  But when
-                       'indentexpr' is not empty, it will be used instead
-                       |indent-expression|.  When Vim was compiled without
-                       internal formatting then the "indent" program is used
-                       as a last resort.
+                       internal formatting function |C-indenting| and
+                       |'lisp'|.  But when 'indentexpr' is not empty, it will
+                       be used instead |indent-expression|.  When Vim was
+                       compiled without internal formatting then the "indent"
+                       program is used as a last resort.
 
                                                        *==*
 ==                     Filter [count] lines like with ={motion}.
@@ -573,34 +592,37 @@ For other systems the tmpnam() library function is used.
                        Repeat last :substitute with same search pattern and
                        substitute string, but without the same flags.  You
                        may add [flags], see |:s_flags|.
-                       Note that after ":substitute" the '&' flag can't be
+                       Note that after `:substitute` the '&' flag can't be
                        used, it's recognized as a pattern separator.
-                       The space between ":substitute" and the 'c', 'g' and
+                       The space between `:substitute` and the 'c', 'g' and
                        'r' flags isn't required, but in scripts it's a good
                        idea to keep it to avoid confusion.
 
 :[range]~[&][flags] [count]                                    *:~*
                        Repeat last substitute with same substitute string
                        but with last used search pattern.  This is like
-                       ":&r".  See |:s_flags| for [flags].
+                       `:&r`.  See |:s_flags| for [flags].
 
                                                                *&*
-&                      Synonym for ":s" (repeat last substitute).  Note
+&                      Synonym for `:s` (repeat last substitute).  Note
                        that the flags are not remembered, thus it might
-                       actually work differently.  You can use ":&&" to keep
+                       actually work differently.  You can use `:&&` to keep
                        the flags.
 
                                                                *g&*
-g&                     Synonym for ":%s//~/&" (repeat last substitute on all
-                       lines with the same flags).
+g&                     Synonym for `:%s//~/&` (repeat last substitute with
+                       last search pattern on all lines with the same flags).
+                       For example, when you first do a substitution with
+                       `:s/pattern/repl/flags` and then `/search` for
+                       something else, `g&` will do `:%s/search/repl/flags`.
                        Mnemonic: global substitute. {not in Vi}
 
                                                *:snomagic* *:sno*
-:[range]sno[magic] ... Same as ":substitute", but always use 'nomagic'.
+:[range]sno[magic] ... Same as `:substitute`, but always use 'nomagic'.
                        {not in Vi}
 
                                                *:smagic* *:sm*
-:[range]sm[agic] ...   Same as ":substitute", but always use 'magic'.
+:[range]sm[agic] ...   Same as `:substitute`, but always use 'magic'.
                        {not in Vi}
 
                                                        *:s_flags*
@@ -610,7 +632,7 @@ The flags that you can use for the substitute commands:
        command.  Examples: >
                :&&
                :s/this/that/&
-<      Note that ":s" and ":&" don't keep the flags.
+<      Note that `:s` and `:&` don't keep the flags.
        {not in Vi}
 
 [c]    Confirm each substitution.  Vim highlights the matching string (with
@@ -659,6 +681,8 @@ The flags that you can use for the substitute commands:
 [n]    Report the number of matches, do not actually substitute.  The [c]
        flag is ignored.  The matches are reported as if 'report' is zero.
        Useful to |count-items|.
+       If \= |sub-replace-expression| is used, the expression will be
+       evaluated in the |sandbox| at every match.
 
 [p]    Print the line containing the last substitute.
 
@@ -666,14 +690,14 @@ The flags that you can use for the substitute commands:
 
 [l]    Like [p] but print the text like |:list|.
 
-[r]    Only useful in combination with ":&" or ":s" without arguments.  ":&r"
-       works the same way as ":~":  When the search pattern is empty, use the
+[r]    Only useful in combination with `:&` or `:s` without arguments.  `:&r`
+       works the same way as `:~`:  When the search pattern is empty, use the
        previously used search pattern instead of the search pattern from the
-       last substitute or ":global".  If the last command that did a search
-       was a substitute or ":global", there is no effect.  If the last
+       last substitute or `:global`.  If the last command that did a search
+       was a substitute or `:global`, there is no effect.  If the last
        command was a search command such as "/", use the pattern from that
        command.
-       For ":s" with an argument this already happens: >
+       For `:s` with an argument this already happens: >
                :s/blue/red/
                /green
                :s//red/   or  :~   or  :&r
@@ -690,8 +714,9 @@ reason is that the flags can only be found by skipping the pattern, and in
 order to skip the pattern the "magicness" must be known.  Catch 22!
 
 If the {pattern} for the substitute command is empty, the command uses the
-pattern from the last substitute or ":global" command.  With the [r] flag, the
-command uses the pattern from the last substitute, ":global", or search
+pattern from the last substitute or `:global` command.  If there is none, but
+there is a previous search pattern, that one is used.  With the [r] flag, the
+command uses the pattern from the last substitute, `:global`, or search
 command.
 
 If the {string} is omitted the substitute is done as if it's empty.  Thus the
@@ -716,11 +741,13 @@ Otherwise it works on whole lines anyway.
 
                                        *sub-replace-special* *:s\=*
 When the {string} starts with "\=" it is evaluated as an expression, see
-|sub-replace-expression|.  You can use that for any special characters.
+|sub-replace-expression|.  You can use that for complex replacement or special
+characters.
+
 Otherwise these characters in {string} have a special meaning:
                                                                *:s%*
 When {string} is equal to "%" and '/' is included with the 'cpoptions' option,
-then the {string} of the previous substitute command is used. |cpo-/|
+then the {string} of the previous substitute command is used, see |cpo-/|
 
 magic  nomagic   action    ~
   &      \&      replaced with the whole matched pattern            *s/\&*
@@ -755,12 +782,25 @@ magic     nomagic   action    ~
       \x         where x is any character not mentioned above:
                  Reserved for future expansion
 
+The special meaning is also used inside the third argument {sub} of
+the |substitute()| function with the following exceptions:
+  - A % inserts a percent literally without regard to 'cpoptions'.
+  - magic is always set without regard to 'magic'.
+  - A ~ inserts a tilde literally.
+  - <CR> and \r inserts a carriage-return (CTRL-M).
+  - \<CR> does not have a special meaning. it's just one of \x.
+
 Examples: >
   :s/a\|b/xxx\0xxx/g            modifies "a b"      to "xxxaxxx xxxbxxx"
   :s/\([abc]\)\([efg]\)/\2\1/g  modifies "af fa bg" to "fa fa gb"
   :s/abcde/abc^Mde/             modifies "abcde"    to "abc", "de" (two lines)
   :s/$/\^M/                     modifies "abcde"    to "abcde^M"
   :s/\w\+/\u\0/g                modifies "bla bla"  to "Bla Bla"
+  :s/\w\+/\L\u/g                modifies "BLA bla"  to "Bla Bla"
+
+Note: "\L\u" can be used to capitalize the first letter of a word.  This is
+not compatible with Vi and older versions of Vim, where the "\u" would cancel
+out the "\L". Same for "\U\l".
 
 Note: In previous versions CTRL-V was handled in a special way.  Since this is
 not Vi compatible, this was removed.  Use a backslash instead.
@@ -786,17 +826,19 @@ either the first or second pattern in parentheses did not match, so either
 Substitute with an expression                  *sub-replace-expression*
                                                *sub-replace-\=*
 When the substitute string starts with "\=" the remainder is interpreted as an
-expression.  This does not work recursively: a substitute() function inside
+expression.  This does not work recursively: a |substitute()| function inside
 the expression cannot use "\=" for the substitute string.
 
 The special meaning for characters as mentioned at |sub-replace-special| does
-not apply except for "<CR>", "\<CR>" and "\\".  Thus in the result of the
-expression you need to use two backslashes to get one, put a backslash before a
-<CR> you want to insert, and use a <CR> without a backslash where you want to
-break the line.
+not apply except for "<CR>".  A <NL> character is used as a line break, you
+can get one with a double-quote string: "\n".  Prepend a backslash to get a
+real <NL> character (which will be a NUL in the file).
 
-For convenience a <NL> character is also used as a line break.  Prepend a
-backslash to get a real <NL> character (which will be a NUL in the file).
+The "\=" notation can also be used inside the third argument {sub} of
+|substitute()| function.  In this case, the special meaning for characters as
+mentioned at |sub-replace-special| does not apply at all. Especially, <CR> and
+<NL> are interpreted not as a line break but as a carriage-return and a
+new-line respectively.
 
 When the result is a |List| then the items are joined with separating line
 breaks.  Thus each item becomes a line, except that they can contain line
@@ -834,7 +876,7 @@ This replaces each 'E' character with a euro sign.  Read more in |<Char->|.
 
 
 4.4 Changing tabs                                      *change-tabs*
-                                                       *:ret* *:retab*
+                                                       *:ret* *:retab* *:retab!*
 :[range]ret[ab][!] [new_tabstop]
                        Replace all sequences of white-space containing a
                        <Tab> with new strings of white-space using the new
@@ -853,7 +895,7 @@ This replaces each 'E' character with a euro sign.  Read more in |<Char->|.
                        Careful: This command modifies any <Tab> characters
                        inside of strings in a C program.  Use "\t" to avoid
                        this (that's a good habit anyway).
-                       ":retab!" may also change a sequence of spaces by
+                       `:retab!` may also change a sequence of spaces by
                        <Tab> characters, which can mess up a printf().
                        {not in Vi}
                        Not available when |+ex_extra| feature was disabled at
@@ -916,8 +958,10 @@ inside of strings can change!  Also see 'softtabstop' option. >
 {Visual}["x]Y          Yank the highlighted lines [into register x] (for
                        {Visual} see |Visual-mode|).  {not in Vi}
 
-                                                       *:y* *:yank*
-:[range]y[ank] [x]     Yank [range] lines [into register x].
+                                                       *:y* *:yank* *E850*
+:[range]y[ank] [x]     Yank [range] lines [into register x]. Yanking to the
+                       "* or "+ registers is possible only when the
+                       |+clipboard| feature is included.
 
 :[range]y[ank] [x] {count}
                        Yank {count} lines, starting with last line number
@@ -961,8 +1005,12 @@ inside of strings can change!  Also see 'softtabstop' option. >
                        current line).  This always works |linewise|, thus
                        this command can be used to put a yanked block as new
                        lines.
-                       The cursor is left on the first non-blank in the last
-                       new line.
+                       If no register is specified, it depends on the 'cb'
+                       option: If 'cb' contains "unnamedplus", paste from the
+                       + register |quoteplus|.  Otherwise, if 'cb' contains
+                       "unnamed", paste from the * register |quotestar|.
+                       Otherwise, paste from the unnamed register
+                       |quote_quote|.
                        The register can also be '=' followed by an optional
                        expression.  The expression continues until the end of
                        the command.  You need to escape the '|' and '"'
@@ -1167,7 +1215,7 @@ nothing is returned.  {not in Vi}
 
 9. Last search pattern register        "/                      *quote_/* *quote/*
 Contains the most recent search-pattern.  This is used for "n" and 'hlsearch'.
-It is writable with ":let", you can change it to have 'hlsearch' highlight
+It is writable with `:let`, you can change it to have 'hlsearch' highlight
 other matches without actually searching.  You can't yank or delete into this
 register.  The search direction is available in |v:searchforward|.
 Note that the valued is restored when returning from a function
@@ -1175,12 +1223,12 @@ Note that the valued is restored when returning from a function
 {not in Vi}
 
                                                        *@/*
-You can write to a register with a ":let" command |:let-@|.  Example: >
+You can write to a register with a `:let` command |:let-@|.  Example: >
        :let @/ = "the"
 
 If you use a put command without specifying a register, Vim uses the register
 that was last filled (this is also the contents of the unnamed register).  If
-you are confused, use the ":dis" command to find out what Vim will put (this
+you are confused, use the `:dis` command to find out what Vim will put (this
 command displays all named and numbered registers; the unnamed register is
 labelled '"').
 
@@ -1387,16 +1435,19 @@ before typing anything else on the new line.  This will replace the
 middle-comment leader with the end-comment leader and apply any specified
 alignment, leaving just " */".  There is no need to hit BackSpace first.
 
+When there is a match with a middle part, but there also is a maching end part
+which is longer, the end part is used.  This makes a C style comment work
+without requiring the middle part to end with a space.
 
 Here is an example of alignment flags at work to make a comment stand out
-(kind of looks like a 1 too). Consider comment string >
-       sr:/***,m:**,ex2:******/
-
-                                   /***
-                                     **<--right aligned from "r" flag
-                                     **
-offset 2 spaces from the "2" flag--->**
-                                   ******/
+(kind of looks like a 1 too). Consider comment string: >
+       :set comments=sr:/***,m:**,ex-2:******/
+<
+                                   /*** ~
+                                     **<--right aligned from "r" flag ~
+                                     ** ~
+offset 2 spaces for the "-2" flag--->** ~
+                                   ******/ ~
 In this case, the first comment was typed, then return was pressed 4 times,
 then "/" was pressed to end the comment.
 
@@ -1414,8 +1465,8 @@ Reindenting using a different method like |gq| or |=| will not consult
 alignment flags either. The same behaviour can be defined in those other
 formatting options. One consideration is that 'cindent' has additional options
 for context based indenting of comments but cannot replicate many three piece
-indent alignments.  However, 'indentexpr' is has the ability to work better
-with three piece comments.
+indent alignments.  However, 'indentexpr' has the ability to work better with
+three piece comments.
 
 Other examples: >
    "b:*"       Includes lines starting with "*", but not if the "*" is
@@ -1473,6 +1524,7 @@ n When formatting text, recognize numbered lists.  This actually uses
                        first line of a paragraph
                second line of the same paragraph
                third line.
+<      This also works inside comments, ignoring the comment leader.
 v      Vi-compatible auto-wrapping in insert mode: Only break a line at a
        blank that you have entered during the current insert command.  (Note:
        this is not 100% Vi compatible.  Vi has some "unexpected features" or
@@ -1493,6 +1545,12 @@ B        When joining lines, don't insert a space between two multi-byte
        characters.  Overruled by the 'M' flag.
 1      Don't break a line after a one-letter word.  It's broken before it
        instead (if possible).
+j      Where it makes sense, remove a comment leader when joining lines.  For
+       example, joining:
+               int i;   // the index ~
+                        // in the list ~
+       Becomes:
+               int i;   // the index in the list ~
 
 
 With 't' and 'c' you can specify when Vim performs auto-wrapping:
@@ -1536,7 +1594,7 @@ Some examples:
        :set fo=tcrq
 <
 
-Automatic formatting                                   *auto-format*
+Automatic formatting                           *auto-format* *autoformat*
 
 When the 'a' flag is present in 'formatoptions' text is formatted
 automatically when inserting text or deleting text.  This works nice for
@@ -1645,7 +1703,7 @@ found here: |sort()|.
                        last search pattern is used.  This allows trying out
                        a pattern first.
 
-Note that using ":sort" with ":global" doesn't sort the matching lines, it's
+Note that using `:sort` with `:global` doesn't sort the matching lines, it's
 quite useless.
 
 The details about sorting depend on the library function used.  There is no
index a072c6c..36a71cf 100644 (file)
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 7.3.  Last change: 2010 May 07
+*cmdline.txt*   For Vim version 7.4.  Last change: 2013 Mar 16
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -83,9 +83,9 @@ CTRL-V                Insert next non-digit literally.  Up to three digits form the
 CTRL-Q         Same as CTRL-V.  But with some terminals it is used for
                control flow, it doesn't work then.
 
-                                                       *c_<Left>*
+                                                       *c_<Left>* *c_Left*
 <Left>         cursor left
-                                                       *c_<Right>*
+                                                       *c_<Right>* *c_Right*
 <Right>                cursor right
                                                        *c_<S-Left>*
 <S-Left> or <C-Left>                                   *c_<C-Left>*
@@ -93,18 +93,18 @@ CTRL-Q              Same as CTRL-V.  But with some terminals it is used for
                                                        *c_<S-Right>*
 <S-Right> or <C-Right>                                 *c_<C-Right>*
                cursor one WORD right
-CTRL-B or <Home>                                       *c_CTRL-B* *c_<Home>*
+CTRL-B or <Home>                               *c_CTRL-B* *c_<Home>* *c_Home*
                cursor to beginning of command-line
-CTRL-E or <End>                                                *c_CTRL-E* *c_<End>*
+CTRL-E or <End>                                        *c_CTRL-E* *c_<End>* *c_End*
                cursor to end of command-line
 
                                                        *c_<LeftMouse>*
 <LeftMouse>    Move the cursor to the position of the mouse click.
 
-CTRL-H                                                 *c_<BS>* *c_CTRL-H*
+CTRL-H                                         *c_<BS>* *c_CTRL-H* *c_BS*
 <BS>           Delete the character in front of the cursor (see |:fixdel| if
                your <BS> key does not do what you want).
-                                                       *c_<Del>*
+                                                       *c_<Del>* *c_Del*
 <Del>          Delete the character under the cursor (at end of line:
                character before the cursor) (see |:fixdel| if your <Del>
                key does not do what you want).
@@ -118,7 +118,7 @@ CTRL-U              Remove all characters between the cursor position and
                preferred behavior, add the following to your .vimrc: >
                        :cnoremap <C-U> <C-E><C-U>
 <
-                                                       *c_<Insert>*
+                                               *c_<Insert>* *c_Insert*
 <Insert>       Toggle between insert and overstrike.  {not in Vi}
 
 {char1} <BS> {char2}   or                              *c_digraph*
@@ -217,16 +217,16 @@ CTRL-\ e {expr}                                           *c_CTRL-\_e*
                           :return cmd
                        :endfunc
 <              This doesn't work recursively, thus not when already editing
-               an expression.
+               an expression.  But it is possible to use in a mapping.
 
                                                        *c_CTRL-Y*
 CTRL-Y         When there is a modeless selection, copy the selection into
                the clipboard. |modeless-selection|
                If there is no selection CTRL-Y is inserted as a character.
 
-CTRL-J                                         *c_CTRL-J* *c_<NL>* *c_<CR>*
+CTRL-J                                 *c_CTRL-J* *c_<NL>* *c_<CR>* *c_CR*
 <CR> or <NL>   start entered command
-                                                       *c_<Esc>*
+                                                       *c_<Esc>* *c_Esc*
 <Esc>          When typed and 'x' not present in 'cpoptions', quit
                Command-line mode without executing.  In macros or when 'x'
                present in 'cpoptions', start entered command.
@@ -235,12 +235,12 @@ CTRL-J                                            *c_CTRL-J* *c_<NL>* *c_<CR>*
                                                        *c_CTRL-C*
 CTRL-C         quit command-line without executing
 
-                                                       *c_<Up>*
+                                                       *c_<Up>* *c_Up*
 <Up>           recall older command-line from history, whose beginning
                matches the current command-line (see below).
                {not available when compiled without the |+cmdline_hist|
                feature}
-                                                       *c_<Down>*
+                                                       *c_<Down>* *c_Down*
 <Down>         recall more recent command-line from history, whose beginning
                matches the current command-line (see below).
                {not available when compiled without the |+cmdline_hist|
@@ -330,12 +330,12 @@ terminals)
 
 :his[tory] [{name}] [{first}][, [{last}]]
                List the contents of history {name} which can be:
-               c[md]    or :   command-line history
-               s[earch] or /   search string history
-               e[xpr]   or =   expression register history
-               i[nput]  or @   input line history
-               d[ebug]  or >   debug command history
-               a[ll]           all of the above
+               c[md]    or :           command-line history
+               s[earch] or / or ?      search string history
+               e[xpr]   or =           expression register history
+               i[nput]  or @           input line history
+               d[ebug]  or >           debug command history
+               a[ll]                   all of the above
                {not in Vi}
 
                If the numbers {first} and/or {last} are given, the respective
@@ -372,10 +372,10 @@ word before the cursor.  This is available for:
 - Mappings: Only after a ":map" or similar command.
 - Variable and function names: Only after a ":if", ":call" or similar command.
 
-When Vim was compiled with the |+cmdline_compl| feature disabled, only file
-names, directories and help items can be completed.  The number of help item
-matches is limited (currently to 300) to avoid a long delay when there are
-very many matches.
+When Vim was compiled without the |+cmdline_compl| feature only file names,
+directories and help items can be completed.  The number of help item matches
+is limited (currently to 300) to avoid a long delay when there are very many
+matches.
 
 These are the commands that can be used:
 
@@ -423,7 +423,10 @@ CTRL-L             A match is done on the pattern in front of the cursor.  If
 
 The 'wildchar' option defaults to <Tab> (CTRL-E when in Vi compatible mode; in
 a previous version <Esc> was used).  In the pattern standard wildcards '*' and
-'?' are accepted.  '*' matches any string, '?' matches exactly one character.
+'?' are accepted when matching file names.  '*' matches any string, '?'
+matches exactly one character.
+
+The 'wildignorecase' option can be set to ignore case in filenames.
 
 If you like tcsh's autolist completion, you can use this mapping:
        :cnoremap X <C-L><C-D>
@@ -711,10 +714,15 @@ three lines: >
 Visual Mode and Range                                  *v_:*
 
 {Visual}:      Starts a command-line with the Visual selected lines as a
-               range.  The code ":'<,'>" is used for this range, which makes
+               range.  The code `:'<,'>` is used for this range, which makes
                it possible to select a similar line from the command-line
                history for repeating a command on different Visually selected
                lines.
+               When Visual mode was already ended, a short way to use the
+               Visual area for a range is `:*`.  This requires that "*" does
+               not appear in 'cpo', see |cpo-star|.  Otherwise you will have
+               to type `:'<,'>`
+
 
 ==============================================================================
 5. Ex command-line flags                               *ex-flags*
@@ -781,30 +789,34 @@ it, no matter how many backslashes.
                               *:<cword>* *:<cWORD>* *:<cfile>* *<cfile>*
                               *:<sfile>* *<sfile>* *:<afile>* *<afile>*
                               *:<abuf>* *<abuf>* *:<amatch>* *<amatch>*
-                              *E495* *E496* *E497* *E498* *E499* *E500*
+                              *<slnum>* *E495* *E496* *E497* *E499* *E500*
 Note: these are typed literally, they are not special keys!
        <cword>    is replaced with the word under the cursor (like |star|)
        <cWORD>    is replaced with the WORD under the cursor (see |WORD|)
        <cfile>    is replaced with the path name under the cursor (like what
                   |gf| uses)
-       <afile>    when executing autocommands, is replaced with the file name
-                  for a file read or write
-       <abuf>     when executing autocommands, is replaced with the currently
+       <afile>    When executing autocommands, is replaced with the file name
+                  for a file read or write.
+       <abuf>     When executing autocommands, is replaced with the currently
                   effective buffer number (for ":r file" and ":so file" it is
                   the current buffer, the file being read/sourced is not in a
                   buffer).
-       <amatch>   when executing autocommands, is replaced with the match for
+       <amatch>   When executing autocommands, is replaced with the match for
                   which this autocommand was executed.  It differs from
                   <afile> only when the file name isn't used to match with
                   (for FileType, Syntax and SpellFileMissing events).
-       <sfile>    when executing a ":source" command, is replaced with the
-                  file name of the sourced file;
-                  when executing a function, is replaced with
+       <sfile>    When executing a ":source" command, is replaced with the
+                  file name of the sourced file.  *E498* 
+                  When executing a function, is replaced with
                   "function {function-name}"; function call nesting is
                   indicated like this:
                   "function {function-name1}..{function-name2}".  Note that
                   filename-modifiers are useless when <sfile> is used inside
                   a function.
+       <slnum>    When executing a ":source" command, is replaced with the
+                  line number.  *E842*
+                  When executing a function it's the line number relative to
+                  the start of the function.
 
                                                         *filename-modifiers*
         *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs*
@@ -819,10 +831,11 @@ These modifiers can be given, in this order:
                the home directory.  If the name is a directory a path
                separator is added at the end.  For a file name that does not
                exist and does not have an absolute path the result is
-               unpredictable.
+               unpredictable.  On MS-Windows an 8.3 filename is expanded to
+               the long name.
        :8      Converts the path to 8.3 short format (currently only on
-               win32).  Will act on as much of a path that is an existing
-               path.
+               MS-Windows).  Will act on as much of a path that is an
+               existing path.
        :~      Reduce file name to be relative to the home directory, if
                possible.  File name is unmodified if it is not below the home
                directory.
@@ -860,7 +873,7 @@ These modifiers can be given, in this order:
                After this, the previous modifiers can be used again.  For
                example ":p", to make a full path after the substitution.
        :gs?pat?sub?
-               Substitute all occurrences of "path" with "sub".  Otherwise
+               Substitute all occurrences of "pat" with "sub".  Otherwise
                this works like ":s".
 
 Examples, when the file name is "src/version.c", current dir
@@ -951,7 +964,7 @@ for the file "$home" in the root directory.  A few examples:
        \\$home         file "\\", followed by expanded $home
 
 ==============================================================================
-6. Command-line window                         *cmdline-window* *cmdwin*
+7. Command-line window                         *cmdline-window* *cmdwin*
                                                        *command-line-window*
 In the command-line window the command line can be edited just like editing
 text in any window.  It is a special kind of window, because you cannot leave
index 015c4e7..3226fa4 100644 (file)
@@ -1,4 +1,4 @@
-*debug.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
+*debug.txt*     For Vim version 7.4.  Last change: 2012 Feb 11
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -15,14 +15,15 @@ For debugging Vim scripts, functions, etc. see |debug-scripts|
 
 ==============================================================================
 
-1. Location of a crash, using gcc and gdb              *debug-gcc*
+1. Location of a crash, using gcc and gdb              *debug-gcc* *gdb*
 
 When Vim crashes in one of the test files, and you are using gcc for
 compilation, here is what you can do to find out exactly where Vim crashes.
 This also applies when using the MingW tools.
 
-1. Compile Vim with the "-g" option (there is a line in the Makefile for this,
-   which you can uncomment).
+1. Compile Vim with the "-g" option (there is a line in the src/Makefile for
+   this, which you can uncomment).  Also make sure "strip" is disabled (do not
+   install it, or use the line "STRIP = /bin/true").
 
 2. Execute these commands (replace "11" with the test that fails): >
        cd testdir
@@ -67,7 +68,7 @@ If the Windows version of Vim crashes in a reproducible manner, you can take
 some steps to provide a useful bug report.
 
 
-GENERIC ~
+3.1 GENERIC ~
 
 You must obtain the debugger symbols (PDB) file for your executable: gvim.pdb
 for gvim.exe, or vim.pdb for vim.exe. The PDB should be available from the
@@ -89,7 +90,7 @@ a Vim executable compiled with the Borland compiler; gdb (see above
 
 
                                                                *debug-vs2005*
-2.2 Debugging Vim crashes with Visual Studio 2005/Visual C++ 2005 Express ~
+3.2 Debugging Vim crashes with Visual Studio 2005/Visual C++ 2005 Express ~
 
 First launch vim.exe or gvim.exe and then launch Visual Studio.  (If you don't
 have Visual Studio, follow the instructions at |get-ms-debuggers| to obtain a
@@ -123,7 +124,7 @@ installed as a just-in-time debugger. Use WinDbg, |debug-windbg|, if you
 need to save minidumps or you want a just-in-time (postmortem) debugger.
 
                                                                *debug-windbg*
-2.3 Debugging Vim crashes with WinDbg ~
+3.3 Debugging Vim crashes with WinDbg ~
 
 See |get-ms-debuggers| to obtain a copy of WinDbg.
 
@@ -149,7 +150,7 @@ To save a minidump, type the following at the WinDbg command line: >
         .dump vim.dmp
 <
                                                        *debug-minidump*
-2.4 Opening a Minidump ~
+3.4 Opening a Minidump ~
 
 If you have a minidump file, you can open it in Visual Studio or in WinDbg.
 
@@ -161,7 +162,7 @@ In WinDbg: choose Open Crash Dump on the File menu. Follow the instructions in
 |debug-windbg| to set the Symbol File Path.
 
                                                        *get-ms-debuggers*
-2.5 Obtaining Microsoft Debugging Tools ~
+3.5 Obtaining Microsoft Debugging Tools ~
 
 The Debugging Tools for Windows (including WinDbg) can be downloaded from
     http://www.microsoft.com/whdc/devtools/debugging/default.mspx
index d80eee6..df7116b 100644 (file)
@@ -1,4 +1,4 @@
-*debugger.txt*  For Vim version 7.3.  Last change: 2005 Mar 29
+*debugger.txt*  For Vim version 7.4.  Last change: 2005 Mar 29
 
 
                  VIM REFERENCE MANUAL    by Gordon Prieur
index 7cfdd5b..757a45b 100644 (file)
@@ -1,4 +1,4 @@
-*develop.txt*   For Vim version 7.3.  Last change: 2008 Dec 17
+*develop.txt*   For Vim version 7.4.  Last change: 2013 Apr 27
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -20,6 +20,7 @@ code.
 Vim is open source software.  Everybody is encouraged to contribute to help
 improving Vim.  For sending patches a context diff "diff -c" is preferred.
 Also see http://www.vim.org/tips/tip.php?tip_id=618.
+Also see http://vim.wikia.com/wiki/How_to_make_and_submit_a_patch.
 
 ==============================================================================
 1. Design goals                                                *design-goals*
@@ -232,6 +233,17 @@ time               shadows global declaration
 new            C++ reserved keyword
 try            Borland C++ doesn't like it to be used as a variable.
 
+clear          Mac curses.h
+echo           Mac curses.h
+instr          Mac curses.h
+meta           Mac curses.h
+newwin         Mac curses.h
+nl             Mac curses.h
+overwrite      Mac curses.h
+refresh                Mac curses.h
+scroll         Mac curses.h
+typeahead      Mac curses.h
+
 basename()     GNU string function
 dirname()      GNU string function
 get_env_value()        Linux system function
index 1d62e54..ddf8aac 100644 (file)
@@ -1,4 +1,4 @@
-*diff.txt*      For Vim version 7.3.  Last change: 2010 Jul 31
+*diff.txt*      For Vim version 7.4.  Last change: 2013 Jul 07
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -86,16 +86,16 @@ diff mode.  You could use a construct like this: >
 While already in Vim you can start diff mode in three ways.
 
                                                        *E98*
-:diffsplit {filename}                                  *:diffs* *:diffsplit*
+:diffs[plit] {filename}                                        *:diffs* *:diffsplit*
                Open a new window on the file {filename}.  The options are set
                as for "vimdiff" for the current and the newly opened window.
                Also see 'diffexpr'.
 
                                                        *:difft* *:diffthis*
-:diffthis      Make the current window part of the diff windows.  This sets
+:difft[his]    Make the current window part of the diff windows.  This sets
                the options like for "vimdiff".
 
-:diffpatch {patchfile}                          *E816* *:diffp* *:diffpatch*
+:diffp[atch] {patchfile}                                *E816* *:diffp* *:diffpatch*
                Use the current buffer, patch it with the diff found in
                {patchfile} and open a buffer on the result.  The options are
                set as for "vimdiff".
@@ -123,14 +123,14 @@ Since the option values are remembered with the buffer, you can edit another
 file for a moment and come back to the same file and be in diff mode again.
 
                                                        *:diffo* *:diffoff*
-:diffoff       Switch off diff mode for the current window.
+:diffo[ff]     Switch off diff mode for the current window.
 
-:diffoff!      Switch off diff mode for the current window and in all windows
+:diffo[ff]!    Switch off diff mode for the current window and in all windows
                in the current tab page where 'diff' is set.
 
-The ":diffoff" command resets the relevant options to their default value.
-This may be different from what the values were before diff mode was started,
-the old values are not remembered.
+The ":diffoff" command resets the relevant options to the values they had when
+using |:diffsplit|, |:diffpatch| , |:diffthis|. or starting Vim in diff mode.
+Otherwise they are set to their default value:
 
        'diff'          off
        'scrollbind'    off
@@ -167,8 +167,8 @@ in diff mode in one window and "normal" in another window.  It is also
 possible to view the changes you have made to a buffer since the file was
 loaded.  Since Vim doesn't allow having two buffers for the same file, you
 need another buffer.  This command is useful: >
-        command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
-               \ | wincmd p | diffthis
+        command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_
+               \ | diffthis | wincmd p | diffthis
 (this is in |vimrc_example.vim|).  Use ":DiffOrig" to see the differences
 between the current buffer and the file it was loaded from.
 
@@ -178,7 +178,7 @@ buffer.  If you don't want a buffer to remain used for the diff do ":set
 nodiff" before hiding it.
 
                                                        *:diffu* *:diffupdate*
-:diffu[pdate]                  Update the diff highlighting and folds.
+:diffu[pdate][!]               Update the diff highlighting and folds.
 
 Vim attempts to keep the differences updated when you make changes to the
 text.  This mostly takes care of inserted and deleted lines.  Changes within a
@@ -187,6 +187,9 @@ To force the differences to be updated use: >
 
        :diffupdate
 
+If the ! is included Vim will check if the file was changed externally and
+needs to be reloaded.  It will prompt for each changed file, like `:checktime`
+was used.
 
 Vim will show filler lines for lines that are missing in one window but are
 present in another.  These lines were inserted in another file or deleted in
@@ -217,7 +220,7 @@ The diffs are highlighted with these groups:
                                that parts in the middle that are still the
                                same are highlighted anyway.  Only "iwhite" of
                                'diffopt' is used here.
-|hl-DiffDelete| DiffDelete     Deleted lines.  Also called filler lines,
+|hl-DiffDelete|        DiffDelete      Deleted lines.  Also called filler lines,
                                because they don't really exist in this
                                buffer.
 
@@ -261,10 +264,12 @@ that the buffers will be equal within the specified range.
                                                        *do*
 do             Same as ":diffget" without argument or range.  The "o" stands
                for "obtain" ("dg" can't be used, it could be the start of
-               "dgg"!).
+               "dgg"!). Note: this doesn't work in Visual mode.
 
                                                        *dp*
 dp             Same as ":diffput" without argument or range.
+               Note: this doesn't work in Visual mode.
+
 
 When no [range] is given, the diff at the cursor position or just above it is
 affected.  When [range] is used, Vim tries to only put or get the specified
@@ -328,7 +333,7 @@ diff.  This example explains the format that Vim expects: >
 
 The "1a2" item appends the line "bbb".
 The "4d4" item deletes the line "111".
-The '7c7" item replaces the line "GGG" with "ggg".
+The "7c7" item replaces the line "GGG" with "ggg".
 
 When 'diffexpr' is not empty, Vim evaluates it to obtain a diff file in the
 format mentioned.  These variables are set to the file names used:
@@ -371,9 +376,9 @@ get an error message.  Possible causes:
 If it's not clear what the problem is set the 'verbose' option to one or more
 to see more messages.
 
-The self-installing Vim includes a diff program.  If you don't have it you
-might want to download a diff.exe.  For example from
-http://jlb.twu.net/code/unixkit.php.
+The self-installing Vim for MS-Windows includes a diff program.  If you don't
+have it you might want to download a diff.exe.  For example from
+http://gnuwin32.sourceforge.net/packages/diffutils.htm.
 
 
 USING PATCHES                                  *diff-patchexpr*
index 9faecee..ac84091 100644 (file)
@@ -1,4 +1,4 @@
-*digraph.txt*   For Vim version 7.3.  Last change: 2010 Apr 11
+*digraph.txt*   For Vim version 7.4.  Last change: 2011 Jan 15
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -40,7 +40,7 @@ Vim is normally compiled with the |+digraphs| feature.  If the feature is
 disabled, the ":digraph" command will display an error message.
 
 Example of the output of ":digraphs": >
- TH Ãž  222  ss ÃŸ  223  a! Ã   224  a' Ã¡  225  a> Ã¢  226  a? Ã£  227  a: Ã¤  228
+ TH Ãž  222  ss ÃŸ  223  a! Ã   224  a' Ã¡  225  a> Ã¢  226  a? Ã£  227  a: Ã¤  228
 
 The first two characters in each column are the characters you have to type to
 enter the digraph.
@@ -156,7 +156,7 @@ a standard meaning:
        Five                    5       Hiragana
        Six                     6       Katakana
 
-Example: a: is Ã¤  and o: is Ã¶
+Example: a: is Ã¤  and o: is Ã¶
 
 These are the RFC1345 digraphs for the one-byte characters.  See the output of
 ":digraphs" for the others.  The characters above 255 are only available when
@@ -251,100 +251,1233 @@ $      DO      0x24     36     DOLLAR SIGN
 ~^     PM      0x9e    158     PRIVACY MESSAGE (PM)
 ~_     AC      0x9f    159     APPLICATION PROGRAM COMMAND (APC)
 |      NS      0xa0    160     NO-BREAK SPACE
-¡      !I      0xa1    161     INVERTED EXCLAMATION MARK
-¢      Ct      0xa2    162     CENT SIGN
-£      Pd      0xa3    163     POUND SIGN
-¤      Cu      0xa4    164     CURRENCY SIGN
-Â¥      Ye      0xa5    165     YEN SIGN
-¦      BB      0xa6    166     BROKEN BAR
-§      SE      0xa7    167     SECTION SIGN
-¨      ':      0xa8    168     DIAERESIS
-©      Co      0xa9    169     COPYRIGHT SIGN
-ª      -a      0xaa    170     FEMININE ORDINAL INDICATOR
-«      <<      0xab    171     LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-¬      NO      0xac    172     NOT SIGN
-­      --      0xad    173     SOFT HYPHEN
-®      Rg      0xae    174     REGISTERED SIGN
-¯      'm      0xaf    175     MACRON
-°      DG      0xb0    176     DEGREE SIGN
-±      +-      0xb1    177     PLUS-MINUS SIGN
-²      2S      0xb2    178     SUPERSCRIPT TWO
-³      3S      0xb3    179     SUPERSCRIPT THREE
-´      ''      0xb4    180     ACUTE ACCENT
-µ      My      0xb5    181     MICRO SIGN
-¶      PI      0xb6    182     PILCROW SIGN
-·      .M      0xb7    183     MIDDLE DOT
-¸      ',      0xb8    184     CEDILLA
-¹      1S      0xb9    185     SUPERSCRIPT ONE
-º      -o      0xba    186     MASCULINE ORDINAL INDICATOR
-»      >>      0xbb    187     RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-¼      14      0xbc    188     VULGAR FRACTION ONE QUARTER
-½      12      0xbd    189     VULGAR FRACTION ONE HALF
-¾      34      0xbe    190     VULGAR FRACTION THREE QUARTERS
-¿      ?I      0xbf    191     INVERTED QUESTION MARK
-À      A!      0xc0    192     LATIN CAPITAL LETTER A WITH GRAVE
-à     A'      0xc1    193     LATIN CAPITAL LETTER A WITH ACUTE
-      A>      0xc2    194     LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-à     A?      0xc3    195     LATIN CAPITAL LETTER A WITH TILDE
-Ä      A:      0xc4    196     LATIN CAPITAL LETTER A WITH DIAERESIS
-Ã…      AA      0xc5    197     LATIN CAPITAL LETTER A WITH RING ABOVE
-Æ      AE      0xc6    198     LATIN CAPITAL LETTER AE
-Ç      C,      0xc7    199     LATIN CAPITAL LETTER C WITH CEDILLA
-È      E!      0xc8    200     LATIN CAPITAL LETTER E WITH GRAVE
-É      E'      0xc9    201     LATIN CAPITAL LETTER E WITH ACUTE
-Ê      E>      0xca    202     LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-Ë      E:      0xcb    203     LATIN CAPITAL LETTER E WITH DIAERESIS
-ÃŒ      I!      0xcc    204     LATIN CAPITAL LETTER I WITH GRAVE
-à     I'      0xcd    205     LATIN CAPITAL LETTER I WITH ACUTE
-ÃŽ      I>      0xce    206     LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-à     I:      0xcf    207     LATIN CAPITAL LETTER I WITH DIAERESIS
-à     D-      0xd0    208     LATIN CAPITAL LETTER ETH (Icelandic)
-Ñ      N?      0xd1    209     LATIN CAPITAL LETTER N WITH TILDE
-Ã’      O!      0xd2    210     LATIN CAPITAL LETTER O WITH GRAVE
-Ó      O'      0xd3    211     LATIN CAPITAL LETTER O WITH ACUTE
-Ô      O>      0xd4    212     LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-Õ      O?      0xd5    213     LATIN CAPITAL LETTER O WITH TILDE
-Ö      O:      0xd6    214     LATIN CAPITAL LETTER O WITH DIAERESIS
-×      *X      0xd7    215     MULTIPLICATION SIGN
-Ø      O/      0xd8    216     LATIN CAPITAL LETTER O WITH STROKE
-Ù      U!      0xd9    217     LATIN CAPITAL LETTER U WITH GRAVE
-Ú      U'      0xda    218     LATIN CAPITAL LETTER U WITH ACUTE
-Û      U>      0xdb    219     LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-Ãœ      U:      0xdc    220     LATIN CAPITAL LETTER U WITH DIAERESIS
-à     Y'      0xdd    221     LATIN CAPITAL LETTER Y WITH ACUTE
-Þ      TH      0xde    222     LATIN CAPITAL LETTER THORN (Icelandic)
-ß      ss      0xdf    223     LATIN SMALL LETTER SHARP S (German)
-à      a!      0xe0    224     LATIN SMALL LETTER A WITH GRAVE
-á      a'      0xe1    225     LATIN SMALL LETTER A WITH ACUTE
-â      a>      0xe2    226     LATIN SMALL LETTER A WITH CIRCUMFLEX
-ã      a?      0xe3    227     LATIN SMALL LETTER A WITH TILDE
-ä      a:      0xe4    228     LATIN SMALL LETTER A WITH DIAERESIS
-Ã¥      aa      0xe5    229     LATIN SMALL LETTER A WITH RING ABOVE
-æ      ae      0xe6    230     LATIN SMALL LETTER AE
-ç      c,      0xe7    231     LATIN SMALL LETTER C WITH CEDILLA
-è      e!      0xe8    232     LATIN SMALL LETTER E WITH GRAVE
-é      e'      0xe9    233     LATIN SMALL LETTER E WITH ACUTE
-ê      e>      0xea    234     LATIN SMALL LETTER E WITH CIRCUMFLEX
-ë      e:      0xeb    235     LATIN SMALL LETTER E WITH DIAERESIS
-ì      i!      0xec    236     LATIN SMALL LETTER I WITH GRAVE
-í      i'      0xed    237     LATIN SMALL LETTER I WITH ACUTE
-î      i>      0xee    238     LATIN SMALL LETTER I WITH CIRCUMFLEX
-ï      i:      0xef    239     LATIN SMALL LETTER I WITH DIAERESIS
-ð      d-      0xf0    240     LATIN SMALL LETTER ETH (Icelandic)
-ñ      n?      0xf1    241     LATIN SMALL LETTER N WITH TILDE
-ò      o!      0xf2    242     LATIN SMALL LETTER O WITH GRAVE
-ó      o'      0xf3    243     LATIN SMALL LETTER O WITH ACUTE
-ô      o>      0xf4    244     LATIN SMALL LETTER O WITH CIRCUMFLEX
-õ      o?      0xf5    245     LATIN SMALL LETTER O WITH TILDE
-ö      o:      0xf6    246     LATIN SMALL LETTER O WITH DIAERESIS
-÷      -:      0xf7    247     DIVISION SIGN
-ø      o/      0xf8    248     LATIN SMALL LETTER O WITH STROKE
-ù      u!      0xf9    249     LATIN SMALL LETTER U WITH GRAVE
-ú      u'      0xfa    250     LATIN SMALL LETTER U WITH ACUTE
-û      u>      0xfb    251     LATIN SMALL LETTER U WITH CIRCUMFLEX
-ü      u:      0xfc    252     LATIN SMALL LETTER U WITH DIAERESIS
-ý      y'      0xfd    253     LATIN SMALL LETTER Y WITH ACUTE
-þ      th      0xfe    254     LATIN SMALL LETTER THORN (Icelandic)
-ÿ      y:      0xff    255     LATIN SMALL LETTER Y WITH DIAERESIS
+¡     !I      0xa1    161     INVERTED EXCLAMATION MARK
+¢     Ct      0xa2    162     CENT SIGN
+£     Pd      0xa3    163     POUND SIGN
+¤     Cu      0xa4    164     CURRENCY SIGN
+Â¥     Ye      0xa5    165     YEN SIGN
+¦     BB      0xa6    166     BROKEN BAR
+§     SE      0xa7    167     SECTION SIGN
+¨     ':      0xa8    168     DIAERESIS
+©     Co      0xa9    169     COPYRIGHT SIGN
+ª     -a      0xaa    170     FEMININE ORDINAL INDICATOR
+«     <<      0xab    171     LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+¬     NO      0xac    172     NOT SIGN
+­     --      0xad    173     SOFT HYPHEN
+®     Rg      0xae    174     REGISTERED SIGN
+¯     'm      0xaf    175     MACRON
+°     DG      0xb0    176     DEGREE SIGN
+±     +-      0xb1    177     PLUS-MINUS SIGN
+²     2S      0xb2    178     SUPERSCRIPT TWO
+³     3S      0xb3    179     SUPERSCRIPT THREE
+´     ''      0xb4    180     ACUTE ACCENT
+µ     My      0xb5    181     MICRO SIGN
+¶     PI      0xb6    182     PILCROW SIGN
+·     .M      0xb7    183     MIDDLE DOT
+¸     ',      0xb8    184     CEDILLA
+¹     1S      0xb9    185     SUPERSCRIPT ONE
+º     -o      0xba    186     MASCULINE ORDINAL INDICATOR
+»     >>      0xbb    187     RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+¼     14      0xbc    188     VULGAR FRACTION ONE QUARTER
+½     12      0xbd    189     VULGAR FRACTION ONE HALF
+¾     34      0xbe    190     VULGAR FRACTION THREE QUARTERS
+¿     ?I      0xbf    191     INVERTED QUESTION MARK
+À     A!      0xc0    192     LATIN CAPITAL LETTER A WITH GRAVE
+à    A'      0xc1    193     LATIN CAPITAL LETTER A WITH ACUTE
+     A>      0xc2    194     LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+à    A?      0xc3    195     LATIN CAPITAL LETTER A WITH TILDE
+Ä     A:      0xc4    196     LATIN CAPITAL LETTER A WITH DIAERESIS
+Ã…     AA      0xc5    197     LATIN CAPITAL LETTER A WITH RING ABOVE
+Æ     AE      0xc6    198     LATIN CAPITAL LETTER AE
+Ç     C,      0xc7    199     LATIN CAPITAL LETTER C WITH CEDILLA
+È     E!      0xc8    200     LATIN CAPITAL LETTER E WITH GRAVE
+É     E'      0xc9    201     LATIN CAPITAL LETTER E WITH ACUTE
+Ê     E>      0xca    202     LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+Ë     E:      0xcb    203     LATIN CAPITAL LETTER E WITH DIAERESIS
+ÃŒ     I!      0xcc    204     LATIN CAPITAL LETTER I WITH GRAVE
+à    I'      0xcd    205     LATIN CAPITAL LETTER I WITH ACUTE
+ÃŽ     I>      0xce    206     LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+à    I:      0xcf    207     LATIN CAPITAL LETTER I WITH DIAERESIS
+à    D-      0xd0    208     LATIN CAPITAL LETTER ETH (Icelandic)
+Ñ     N?      0xd1    209     LATIN CAPITAL LETTER N WITH TILDE
+Ã’     O!      0xd2    210     LATIN CAPITAL LETTER O WITH GRAVE
+Ó     O'      0xd3    211     LATIN CAPITAL LETTER O WITH ACUTE
+Ô     O>      0xd4    212     LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+Õ     O?      0xd5    213     LATIN CAPITAL LETTER O WITH TILDE
+Ö     O:      0xd6    214     LATIN CAPITAL LETTER O WITH DIAERESIS
+×     *X      0xd7    215     MULTIPLICATION SIGN
+Ø     O/      0xd8    216     LATIN CAPITAL LETTER O WITH STROKE
+Ù     U!      0xd9    217     LATIN CAPITAL LETTER U WITH GRAVE
+Ú     U'      0xda    218     LATIN CAPITAL LETTER U WITH ACUTE
+Û     U>      0xdb    219     LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+Ãœ     U:      0xdc    220     LATIN CAPITAL LETTER U WITH DIAERESIS
+à    Y'      0xdd    221     LATIN CAPITAL LETTER Y WITH ACUTE
+Þ     TH      0xde    222     LATIN CAPITAL LETTER THORN (Icelandic)
+ß     ss      0xdf    223     LATIN SMALL LETTER SHARP S (German)
+à     a!      0xe0    224     LATIN SMALL LETTER A WITH GRAVE
+á     a'      0xe1    225     LATIN SMALL LETTER A WITH ACUTE
+â     a>      0xe2    226     LATIN SMALL LETTER A WITH CIRCUMFLEX
+ã     a?      0xe3    227     LATIN SMALL LETTER A WITH TILDE
+ä     a:      0xe4    228     LATIN SMALL LETTER A WITH DIAERESIS
+Ã¥     aa      0xe5    229     LATIN SMALL LETTER A WITH RING ABOVE
+æ     ae      0xe6    230     LATIN SMALL LETTER AE
+ç     c,      0xe7    231     LATIN SMALL LETTER C WITH CEDILLA
+è     e!      0xe8    232     LATIN SMALL LETTER E WITH GRAVE
+é     e'      0xe9    233     LATIN SMALL LETTER E WITH ACUTE
+ê     e>      0xea    234     LATIN SMALL LETTER E WITH CIRCUMFLEX
+ë     e:      0xeb    235     LATIN SMALL LETTER E WITH DIAERESIS
+ì     i!      0xec    236     LATIN SMALL LETTER I WITH GRAVE
+í     i'      0xed    237     LATIN SMALL LETTER I WITH ACUTE
+î     i>      0xee    238     LATIN SMALL LETTER I WITH CIRCUMFLEX
+ï     i:      0xef    239     LATIN SMALL LETTER I WITH DIAERESIS
+ð     d-      0xf0    240     LATIN SMALL LETTER ETH (Icelandic)
+ñ     n?      0xf1    241     LATIN SMALL LETTER N WITH TILDE
+ò     o!      0xf2    242     LATIN SMALL LETTER O WITH GRAVE
+ó     o'      0xf3    243     LATIN SMALL LETTER O WITH ACUTE
+ô     o>      0xf4    244     LATIN SMALL LETTER O WITH CIRCUMFLEX
+õ     o?      0xf5    245     LATIN SMALL LETTER O WITH TILDE
+ö     o:      0xf6    246     LATIN SMALL LETTER O WITH DIAERESIS
+÷     -:      0xf7    247     DIVISION SIGN
+ø     o/      0xf8    248     LATIN SMALL LETTER O WITH STROKE
+ù     u!      0xf9    249     LATIN SMALL LETTER U WITH GRAVE
+ú     u'      0xfa    250     LATIN SMALL LETTER U WITH ACUTE
+û     u>      0xfb    251     LATIN SMALL LETTER U WITH CIRCUMFLEX
+ü     u:      0xfc    252     LATIN SMALL LETTER U WITH DIAERESIS
+ý     y'      0xfd    253     LATIN SMALL LETTER Y WITH ACUTE
+þ     th      0xfe    254     LATIN SMALL LETTER THORN (Icelandic)
+ÿ     y:      0xff    255     LATIN SMALL LETTER Y WITH DIAERESIS
+
+If your Vim is compiled with |multibyte| support and you are using a multibyte
+'encoding', Vim provides this enhanced set of additional digraphs:
+
+                                                       *digraph-table-mbyte*
+char  digraph  hex     dec     official name ~
+Ä€     A-      0100    0256    LATIN CAPITAL LETTER A WITH MACRON
+Ä     a-      0101    0257    LATIN SMALL LETTER A WITH MACRON
+Ä‚     A(      0102    0258    LATIN CAPITAL LETTER A WITH BREVE
+ă     a(      0103    0259    LATIN SMALL LETTER A WITH BREVE
+Ä„     A;      0104    0260    LATIN CAPITAL LETTER A WITH OGONEK
+Ä…     a;      0105    0261    LATIN SMALL LETTER A WITH OGONEK
+Ć     C'      0106    0262    LATIN CAPITAL LETTER C WITH ACUTE
+ć     c'      0107    0263    LATIN SMALL LETTER C WITH ACUTE
+Ĉ     C>      0108    0264    LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ĉ     c>      0109    0265    LATIN SMALL LETTER C WITH CIRCUMFLEX
+ÄŠ     C.      010A    0266    LATIN CAPITAL LETTER C WITH DOT ABOVE
+Ä‹     c.      010B    0267    LATIN SMALL LETTER C WITH DOT ABOVE
+ÄŒ     C<      010C    0268    LATIN CAPITAL LETTER C WITH CARON
+Ä     c<      010D    0269    LATIN SMALL LETTER C WITH CARON
+ÄŽ     D<      010E    0270    LATIN CAPITAL LETTER D WITH CARON
+Ä     d<      010F    0271    LATIN SMALL LETTER D WITH CARON
+Ä     D/      0110    0272    LATIN CAPITAL LETTER D WITH STROKE
+Ä‘     d/      0111    0273    LATIN SMALL LETTER D WITH STROKE
+Ä’     E-      0112    0274    LATIN CAPITAL LETTER E WITH MACRON
+Ä“     e-      0113    0275    LATIN SMALL LETTER E WITH MACRON
+Ä”     E(      0114    0276    LATIN CAPITAL LETTER E WITH BREVE
+Ä•     e(      0115    0277    LATIN SMALL LETTER E WITH BREVE
+Ä–     E.      0116    0278    LATIN CAPITAL LETTER E WITH DOT ABOVE
+Ä—     e.      0117    0279    LATIN SMALL LETTER E WITH DOT ABOVE
+Ę     E;      0118    0280    LATIN CAPITAL LETTER E WITH OGONEK
+Ä™     e;      0119    0281    LATIN SMALL LETTER E WITH OGONEK
+Äš     E<      011A    0282    LATIN CAPITAL LETTER E WITH CARON
+Ä›     e<      011B    0283    LATIN SMALL LETTER E WITH CARON
+Äœ     G>      011C    0284    LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+Ä     g>      011D    0285    LATIN SMALL LETTER G WITH CIRCUMFLEX
+Äž     G(      011E    0286    LATIN CAPITAL LETTER G WITH BREVE
+ÄŸ     g(      011F    0287    LATIN SMALL LETTER G WITH BREVE
+Ä      G.      0120    0288    LATIN CAPITAL LETTER G WITH DOT ABOVE
+Ä¡     g.      0121    0289    LATIN SMALL LETTER G WITH DOT ABOVE
+Ä¢     G,      0122    0290    LATIN CAPITAL LETTER G WITH CEDILLA
+Ä£     g,      0123    0291    LATIN SMALL LETTER G WITH CEDILLA
+Ĥ     H>      0124    0292    LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+Ä¥     h>      0125    0293    LATIN SMALL LETTER H WITH CIRCUMFLEX
+Ħ     H/      0126    0294    LATIN CAPITAL LETTER H WITH STROKE
+ħ     h/      0127    0295    LATIN SMALL LETTER H WITH STROKE
+Ĩ     I?      0128    0296    LATIN CAPITAL LETTER I WITH TILDE
+Ä©     i?      0129    0297    LATIN SMALL LETTER I WITH TILDE
+Ī     I-      012A    0298    LATIN CAPITAL LETTER I WITH MACRON
+Ä«     i-      012B    0299    LATIN SMALL LETTER I WITH MACRON
+Ĭ     I(      012C    0300    LATIN CAPITAL LETTER I WITH BREVE
+Ä­     i(      012D    0301    LATIN SMALL LETTER I WITH BREVE
+Ä®     I;      012E    0302    LATIN CAPITAL LETTER I WITH OGONEK
+į     i;      012F    0303    LATIN SMALL LETTER I WITH OGONEK
+Ä°     I.      0130    0304    LATIN CAPITAL LETTER I WITH DOT ABOVE
+ı     i.      0131    0305    LATIN SMALL LETTER DOTLESS I
+IJ     IJ      0132    0306    LATIN CAPITAL LIGATURE IJ
+ij     ij      0133    0307    LATIN SMALL LIGATURE IJ
+Ä´     J>      0134    0308    LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ĵ     j>      0135    0309    LATIN SMALL LETTER J WITH CIRCUMFLEX
+Ķ     K,      0136    0310    LATIN CAPITAL LETTER K WITH CEDILLA
+Ä·     k,      0137    0311    LATIN SMALL LETTER K WITH CEDILLA
+ĸ     kk      0138    0312    LATIN SMALL LETTER KRA
+Ĺ     L'      0139    0313    LATIN CAPITAL LETTER L WITH ACUTE
+ĺ     l'      013A    0314    LATIN SMALL LETTER L WITH ACUTE
+Ä»     L,      013B    0315    LATIN CAPITAL LETTER L WITH CEDILLA
+ļ     l,      013C    0316    LATIN SMALL LETTER L WITH CEDILLA
+Ľ     L<      013D    0317    LATIN CAPITAL LETTER L WITH CARON
+ľ     l<      013E    0318    LATIN SMALL LETTER L WITH CARON
+Ä¿     L.      013F    0319    LATIN CAPITAL LETTER L WITH MIDDLE DOT
+Å€     l.      0140    0320    LATIN SMALL LETTER L WITH MIDDLE DOT
+Å     L/      0141    0321    LATIN CAPITAL LETTER L WITH STROKE
+Å‚     l/      0142    0322    LATIN SMALL LETTER L WITH STROKE
+Ń     N'      0143    0323    LATIN CAPITAL LETTER N WITH ACUTE `
+Å„     n'      0144    0324    LATIN SMALL LETTER N WITH ACUTE `
+Å…     N,      0145    0325    LATIN CAPITAL LETTER N WITH CEDILLA `
+ņ     n,      0146    0326    LATIN SMALL LETTER N WITH CEDILLA `
+Ň     N<      0147    0327    LATIN CAPITAL LETTER N WITH CARON `
+ň     n<      0148    0328    LATIN SMALL LETTER N WITH CARON `
+ʼn     'n      0149    0329    LATIN SMALL LETTER N PRECEDED BY APOSTROPHE `
+ÅŠ     NG      014A    0330    LATIN CAPITAL LETTER ENG
+Å‹     ng      014B    0331    LATIN SMALL LETTER ENG
+ÅŒ     O-      014C    0332    LATIN CAPITAL LETTER O WITH MACRON
+Å     o-      014D    0333    LATIN SMALL LETTER O WITH MACRON
+ÅŽ     O(      014E    0334    LATIN CAPITAL LETTER O WITH BREVE
+Å     o(      014F    0335    LATIN SMALL LETTER O WITH BREVE
+Å     O"      0150    0336    LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+Å‘     o"      0151    0337    LATIN SMALL LETTER O WITH DOUBLE ACUTE
+Å’     OE      0152    0338    LATIN CAPITAL LIGATURE OE
+Å“     oe      0153    0339    LATIN SMALL LIGATURE OE
+Å”     R'      0154    0340    LATIN CAPITAL LETTER R WITH ACUTE
+Å•     r'      0155    0341    LATIN SMALL LETTER R WITH ACUTE
+Å–     R,      0156    0342    LATIN CAPITAL LETTER R WITH CEDILLA
+Å—     r,      0157    0343    LATIN SMALL LETTER R WITH CEDILLA
+Ř     R<      0158    0344    LATIN CAPITAL LETTER R WITH CARON
+Å™     r<      0159    0345    LATIN SMALL LETTER R WITH CARON
+Åš     S'      015A    0346    LATIN CAPITAL LETTER S WITH ACUTE
+Å›     s'      015B    0347    LATIN SMALL LETTER S WITH ACUTE
+Åœ     S>      015C    0348    LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+Å     s>      015D    0349    LATIN SMALL LETTER S WITH CIRCUMFLEX
+Åž     S,      015E    0350    LATIN CAPITAL LETTER S WITH CEDILLA
+ÅŸ     s,      015F    0351    LATIN SMALL LETTER S WITH CEDILLA
+Å      S<      0160    0352    LATIN CAPITAL LETTER S WITH CARON
+Å¡     s<      0161    0353    LATIN SMALL LETTER S WITH CARON
+Å¢     T,      0162    0354    LATIN CAPITAL LETTER T WITH CEDILLA
+Å£     t,      0163    0355    LATIN SMALL LETTER T WITH CEDILLA
+Ť     T<      0164    0356    LATIN CAPITAL LETTER T WITH CARON
+Å¥     t<      0165    0357    LATIN SMALL LETTER T WITH CARON
+Ŧ     T/      0166    0358    LATIN CAPITAL LETTER T WITH STROKE
+ŧ     t/      0167    0359    LATIN SMALL LETTER T WITH STROKE
+Ũ     U?      0168    0360    LATIN CAPITAL LETTER U WITH TILDE
+Å©     u?      0169    0361    LATIN SMALL LETTER U WITH TILDE
+Ū     U-      016A    0362    LATIN CAPITAL LETTER U WITH MACRON
+Å«     u-      016B    0363    LATIN SMALL LETTER U WITH MACRON
+Ŭ     U(      016C    0364    LATIN CAPITAL LETTER U WITH BREVE
+Å­     u(      016D    0365    LATIN SMALL LETTER U WITH BREVE
+Å®     U0      016E    0366    LATIN CAPITAL LETTER U WITH RING ABOVE
+ů     u0      016F    0367    LATIN SMALL LETTER U WITH RING ABOVE
+Å°     U"      0170    0368    LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ű     u"      0171    0369    LATIN SMALL LETTER U WITH DOUBLE ACUTE
+Ų     U;      0172    0370    LATIN CAPITAL LETTER U WITH OGONEK
+ų     u;      0173    0371    LATIN SMALL LETTER U WITH OGONEK
+Å´     W>      0174    0372    LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+ŵ     w>      0175    0373    LATIN SMALL LETTER W WITH CIRCUMFLEX
+Ŷ     Y>      0176    0374    LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+Å·     y>      0177    0375    LATIN SMALL LETTER Y WITH CIRCUMFLEX
+Ÿ     Y:      0178    0376    LATIN CAPITAL LETTER Y WITH DIAERESIS
+Ź     Z'      0179    0377    LATIN CAPITAL LETTER Z WITH ACUTE
+ź     z'      017A    0378    LATIN SMALL LETTER Z WITH ACUTE
+Å»     Z.      017B    0379    LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ż     z.      017C    0380    LATIN SMALL LETTER Z WITH DOT ABOVE
+Ž     Z<      017D    0381    LATIN CAPITAL LETTER Z WITH CARON
+ž     z<      017E    0382    LATIN SMALL LETTER Z WITH CARON
+Æ      O9      01A0    0416    LATIN CAPITAL LETTER O WITH HORN
+Æ¡     o9      01A1    0417    LATIN SMALL LETTER O WITH HORN
+Æ¢     OI      01A2    0418    LATIN CAPITAL LETTER OI
+Æ£     oi      01A3    0419    LATIN SMALL LETTER OI
+Ʀ     yr      01A6    0422    LATIN LETTER YR
+Ư     U9      01AF    0431    LATIN CAPITAL LETTER U WITH HORN
+Æ°     u9      01B0    0432    LATIN SMALL LETTER U WITH HORN
+Ƶ     Z/      01B5    0437    LATIN CAPITAL LETTER Z WITH STROKE
+ƶ     z/      01B6    0438    LATIN SMALL LETTER Z WITH STROKE
+Æ·     ED      01B7    0439    LATIN CAPITAL LETTER EZH
+Ç     A<      01CD    0461    LATIN CAPITAL LETTER A WITH CARON
+ÇŽ     a<      01CE    0462    LATIN SMALL LETTER A WITH CARON
+Ç     I<      01CF    0463    LATIN CAPITAL LETTER I WITH CARON
+Ç     i<      01D0    0464    LATIN SMALL LETTER I WITH CARON
+Ç‘     O<      01D1    0465    LATIN CAPITAL LETTER O WITH CARON
+Ç’     o<      01D2    0466    LATIN SMALL LETTER O WITH CARON
+Ç“     U<      01D3    0467    LATIN CAPITAL LETTER U WITH CARON
+Ç”     u<      01D4    0468    LATIN SMALL LETTER U WITH CARON
+Çž     A1      01DE    0478    LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+ÇŸ     a1      01DF    0479    LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+Ç      A7      01E0    0480    LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+Ç¡     a7      01E1    0481    LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+Ç¢     A3      01E2    0482    LATIN CAPITAL LETTER AE WITH MACRON
+Ç£     a3      01E3    0483    LATIN SMALL LETTER AE WITH MACRON
+Ǥ     G/      01E4    0484    LATIN CAPITAL LETTER G WITH STROKE
+Ç¥     g/      01E5    0485    LATIN SMALL LETTER G WITH STROKE
+Ǧ     G<      01E6    0486    LATIN CAPITAL LETTER G WITH CARON
+ǧ     g<      01E7    0487    LATIN SMALL LETTER G WITH CARON
+Ǩ     K<      01E8    0488    LATIN CAPITAL LETTER K WITH CARON
+Ç©     k<      01E9    0489    LATIN SMALL LETTER K WITH CARON
+Ǫ     O;      01EA    0490    LATIN CAPITAL LETTER O WITH OGONEK
+Ç«     o;      01EB    0491    LATIN SMALL LETTER O WITH OGONEK
+Ǭ     O1      01EC    0492    LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+Ç­     o1      01ED    0493    LATIN SMALL LETTER O WITH OGONEK AND MACRON
+Ç®     EZ      01EE    0494    LATIN CAPITAL LETTER EZH WITH CARON
+ǯ     ez      01EF    0495    LATIN SMALL LETTER EZH WITH CARON
+Ç°     j<      01F0    0496    LATIN SMALL LETTER J WITH CARON
+Ç´     G'      01F4    0500    LATIN CAPITAL LETTER G WITH ACUTE
+ǵ     g'      01F5    0501    LATIN SMALL LETTER G WITH ACUTE
+Ê¿     ;S      02BF    0703    MODIFIER LETTER LEFT HALF RING
+ˇ     '<      02C7    0711    CARON
+˘     '(      02D8    0728    BREVE
+Ë™     '.      02D9    0729    DOT ABOVE
+Ëš     '0      02DA    0730    RING ABOVE
+Ë›     ';      02DB    0731    OGONEK
+Ë     '"      02DD    0733    DOUBLE ACUTE ACCENT
+Ά     A%      0386    0902    GREEK CAPITAL LETTER ALPHA WITH TONOS
+Έ     E%      0388    0904    GREEK CAPITAL LETTER EPSILON WITH TONOS
+Ή     Y%      0389    0905    GREEK CAPITAL LETTER ETA WITH TONOS
+Ί     I%      038A    0906    GREEK CAPITAL LETTER IOTA WITH TONOS
+ÎŒ     O%      038C    0908    GREEK CAPITAL LETTER OMICRON WITH TONOS
+ÎŽ     U%      038E    0910    GREEK CAPITAL LETTER UPSILON WITH TONOS
+Π    W%      038F    0911    GREEK CAPITAL LETTER OMEGA WITH TONOS
+Π    i3      0390    0912    GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+Α     A*      0391    0913    GREEK CAPITAL LETTER ALPHA
+Î’     B*      0392    0914    GREEK CAPITAL LETTER BETA
+Γ     G*      0393    0915    GREEK CAPITAL LETTER GAMMA
+Δ     D*      0394    0916    GREEK CAPITAL LETTER DELTA
+Ε     E*      0395    0917    GREEK CAPITAL LETTER EPSILON
+Ζ     Z*      0396    0918    GREEK CAPITAL LETTER ZETA
+Η     Y*      0397    0919    GREEK CAPITAL LETTER ETA
+Θ     H*      0398    0920    GREEK CAPITAL LETTER THETA
+Ι     I*      0399    0921    GREEK CAPITAL LETTER IOTA
+Κ     K*      039A    0922    GREEK CAPITAL LETTER KAPPA
+Λ     L*      039B    0923    GREEK CAPITAL LETTER LAMDA
+Îœ     M*      039C    0924    GREEK CAPITAL LETTER MU
+Π    N*      039D    0925    GREEK CAPITAL LETTER NU
+Ξ     C*      039E    0926    GREEK CAPITAL LETTER XI
+Ο     O*      039F    0927    GREEK CAPITAL LETTER OMICRON
+Π     P*      03A0    0928    GREEK CAPITAL LETTER PI
+Ρ     R*      03A1    0929    GREEK CAPITAL LETTER RHO
+Σ     S*      03A3    0931    GREEK CAPITAL LETTER SIGMA
+Τ     T*      03A4    0932    GREEK CAPITAL LETTER TAU
+Î¥     U*      03A5    0933    GREEK CAPITAL LETTER UPSILON
+Φ     F*      03A6    0934    GREEK CAPITAL LETTER PHI
+Χ     X*      03A7    0935    GREEK CAPITAL LETTER CHI
+Ψ     Q*      03A8    0936    GREEK CAPITAL LETTER PSI
+Ω     W*      03A9    0937    GREEK CAPITAL LETTER OMEGA
+Ϊ     J*      03AA    0938    GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+Ϋ     V*      03AB    0939    GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+ά     a%      03AC    0940    GREEK SMALL LETTER ALPHA WITH TONOS
+έ     e%      03AD    0941    GREEK SMALL LETTER EPSILON WITH TONOS
+ή     y%      03AE    0942    GREEK SMALL LETTER ETA WITH TONOS
+ί     i%      03AF    0943    GREEK SMALL LETTER IOTA WITH TONOS
+ΰ     u3      03B0    0944    GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+α     a*      03B1    0945    GREEK SMALL LETTER ALPHA
+β     b*      03B2    0946    GREEK SMALL LETTER BETA
+γ     g*      03B3    0947    GREEK SMALL LETTER GAMMA
+δ     d*      03B4    0948    GREEK SMALL LETTER DELTA
+ε     e*      03B5    0949    GREEK SMALL LETTER EPSILON
+ζ     z*      03B6    0950    GREEK SMALL LETTER ZETA
+η     y*      03B7    0951    GREEK SMALL LETTER ETA
+θ     h*      03B8    0952    GREEK SMALL LETTER THETA
+ι     i*      03B9    0953    GREEK SMALL LETTER IOTA
+κ     k*      03BA    0954    GREEK SMALL LETTER KAPPA
+λ     l*      03BB    0955    GREEK SMALL LETTER LAMDA
+μ     m*      03BC    0956    GREEK SMALL LETTER MU
+ν     n*      03BD    0957    GREEK SMALL LETTER NU
+ξ     c*      03BE    0958    GREEK SMALL LETTER XI
+ο     o*      03BF    0959    GREEK SMALL LETTER OMICRON
+Ï€     p*      03C0    0960    GREEK SMALL LETTER PI
+Ï     r*      03C1    0961    GREEK SMALL LETTER RHO
+Ï‚     *s      03C2    0962    GREEK SMALL LETTER FINAL SIGMA
+σ     s*      03C3    0963    GREEK SMALL LETTER SIGMA
+Ï„     t*      03C4    0964    GREEK SMALL LETTER TAU
+Ï…     u*      03C5    0965    GREEK SMALL LETTER UPSILON
+φ     f*      03C6    0966    GREEK SMALL LETTER PHI
+χ     x*      03C7    0967    GREEK SMALL LETTER CHI
+ψ     q*      03C8    0968    GREEK SMALL LETTER PSI
+ω     w*      03C9    0969    GREEK SMALL LETTER OMEGA
+ÏŠ     j*      03CA    0970    GREEK SMALL LETTER IOTA WITH DIALYTIKA
+Ï‹     v*      03CB    0971    GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ÏŒ     o%      03CC    0972    GREEK SMALL LETTER OMICRON WITH TONOS
+Ï     u%      03CD    0973    GREEK SMALL LETTER UPSILON WITH TONOS
+ÏŽ     w%      03CE    0974    GREEK SMALL LETTER OMEGA WITH TONOS
+Ϙ     'G      03D8    0984    GREEK LETTER ARCHAIC KOPPA
+Ï™     ,G      03D9    0985    GREEK SMALL LETTER ARCHAIC KOPPA
+Ïš     T3      03DA    0986    GREEK LETTER STIGMA
+Ï›     t3      03DB    0987    GREEK SMALL LETTER STIGMA
+Ïœ     M3      03DC    0988    GREEK LETTER DIGAMMA
+Ï     m3      03DD    0989    GREEK SMALL LETTER DIGAMMA
+Ïž     K3      03DE    0990    GREEK LETTER KOPPA
+ÏŸ     k3      03DF    0991    GREEK SMALL LETTER KOPPA
+Ï      P3      03E0    0992    GREEK LETTER SAMPI
+Ï¡     p3      03E1    0993    GREEK SMALL LETTER SAMPI
+Ï´     '%      03F4    1012    GREEK CAPITAL THETA SYMBOL
+ϵ     j3      03F5    1013    GREEK LUNATE EPSILON SYMBOL
+Р    IO      0401    1025    CYRILLIC CAPITAL LETTER IO
+Ђ     D%      0402    1026    CYRILLIC CAPITAL LETTER DJE
+Ѓ     G%      0403    1027    CYRILLIC CAPITAL LETTER GJE
+Є     IE      0404    1028    CYRILLIC CAPITAL LETTER UKRAINIAN IE
+Ð…     DS      0405    1029    CYRILLIC CAPITAL LETTER DZE
+І     II      0406    1030    CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+Ї     YI      0407    1031    CYRILLIC CAPITAL LETTER YI
+Ј     J%      0408    1032    CYRILLIC CAPITAL LETTER JE
+Љ     LJ      0409    1033    CYRILLIC CAPITAL LETTER LJE
+Њ     NJ      040A    1034    CYRILLIC CAPITAL LETTER NJE
+Ћ     Ts      040B    1035    CYRILLIC CAPITAL LETTER TSHE
+ÐŒ     KJ      040C    1036    CYRILLIC CAPITAL LETTER KJE
+ÐŽ     V%      040E    1038    CYRILLIC CAPITAL LETTER SHORT U
+Р    DZ      040F    1039    CYRILLIC CAPITAL LETTER DZHE
+Р    A=      0410    1040    CYRILLIC CAPITAL LETTER A
+Б     B=      0411    1041    CYRILLIC CAPITAL LETTER BE
+Ð’     V=      0412    1042    CYRILLIC CAPITAL LETTER VE
+Г     G=      0413    1043    CYRILLIC CAPITAL LETTER GHE
+Д     D=      0414    1044    CYRILLIC CAPITAL LETTER DE
+Е     E=      0415    1045    CYRILLIC CAPITAL LETTER IE
+Ж     Z%      0416    1046    CYRILLIC CAPITAL LETTER ZHE
+З     Z=      0417    1047    CYRILLIC CAPITAL LETTER ZE
+И     I=      0418    1048    CYRILLIC CAPITAL LETTER I
+Й     J=      0419    1049    CYRILLIC CAPITAL LETTER SHORT I
+К     K=      041A    1050    CYRILLIC CAPITAL LETTER KA
+Л     L=      041B    1051    CYRILLIC CAPITAL LETTER EL
+Ðœ     M=      041C    1052    CYRILLIC CAPITAL LETTER EM
+Р    N=      041D    1053    CYRILLIC CAPITAL LETTER EN
+О     O=      041E    1054    CYRILLIC CAPITAL LETTER O
+П     P=      041F    1055    CYRILLIC CAPITAL LETTER PE
+Р     R=      0420    1056    CYRILLIC CAPITAL LETTER ER
+С     S=      0421    1057    CYRILLIC CAPITAL LETTER ES
+Т     T=      0422    1058    CYRILLIC CAPITAL LETTER TE
+У     U=      0423    1059    CYRILLIC CAPITAL LETTER U
+Ф     F=      0424    1060    CYRILLIC CAPITAL LETTER EF
+Ð¥     H=      0425    1061    CYRILLIC CAPITAL LETTER HA
+Ц     C=      0426    1062    CYRILLIC CAPITAL LETTER TSE
+Ч     C%      0427    1063    CYRILLIC CAPITAL LETTER CHE
+Ш     S%      0428    1064    CYRILLIC CAPITAL LETTER SHA
+Щ     Sc      0429    1065    CYRILLIC CAPITAL LETTER SHCHA
+Ъ     ="      042A    1066    CYRILLIC CAPITAL LETTER HARD SIGN
+Ы     Y=      042B    1067    CYRILLIC CAPITAL LETTER YERU
+Ь     %"      042C    1068    CYRILLIC CAPITAL LETTER SOFT SIGN
+Э     JE      042D    1069    CYRILLIC CAPITAL LETTER E
+Ю     JU      042E    1070    CYRILLIC CAPITAL LETTER YU
+Я     JA      042F    1071    CYRILLIC CAPITAL LETTER YA
+а     a=      0430    1072    CYRILLIC SMALL LETTER A
+б     b=      0431    1073    CYRILLIC SMALL LETTER BE
+в     v=      0432    1074    CYRILLIC SMALL LETTER VE
+г     g=      0433    1075    CYRILLIC SMALL LETTER GHE
+д     d=      0434    1076    CYRILLIC SMALL LETTER DE
+е     e=      0435    1077    CYRILLIC SMALL LETTER IE
+ж     z%      0436    1078    CYRILLIC SMALL LETTER ZHE
+з     z=      0437    1079    CYRILLIC SMALL LETTER ZE
+и     i=      0438    1080    CYRILLIC SMALL LETTER I
+й     j=      0439    1081    CYRILLIC SMALL LETTER SHORT I
+к     k=      043A    1082    CYRILLIC SMALL LETTER KA
+л     l=      043B    1083    CYRILLIC SMALL LETTER EL
+м     m=      043C    1084    CYRILLIC SMALL LETTER EM
+н     n=      043D    1085    CYRILLIC SMALL LETTER EN
+о     o=      043E    1086    CYRILLIC SMALL LETTER O
+п     p=      043F    1087    CYRILLIC SMALL LETTER PE
+Ñ€     r=      0440    1088    CYRILLIC SMALL LETTER ER
+Ñ     s=      0441    1089    CYRILLIC SMALL LETTER ES
+Ñ‚     t=      0442    1090    CYRILLIC SMALL LETTER TE
+у     u=      0443    1091    CYRILLIC SMALL LETTER U
+Ñ„     f=      0444    1092    CYRILLIC SMALL LETTER EF
+Ñ…     h=      0445    1093    CYRILLIC SMALL LETTER HA
+ц     c=      0446    1094    CYRILLIC SMALL LETTER TSE
+ч     c%      0447    1095    CYRILLIC SMALL LETTER CHE
+ш     s%      0448    1096    CYRILLIC SMALL LETTER SHA
+щ     sc      0449    1097    CYRILLIC SMALL LETTER SHCHA
+ÑŠ     ='      044A    1098    CYRILLIC SMALL LETTER HARD SIGN
+Ñ‹     y=      044B    1099    CYRILLIC SMALL LETTER YERU
+ÑŒ     %'      044C    1100    CYRILLIC SMALL LETTER SOFT SIGN
+Ñ     je      044D    1101    CYRILLIC SMALL LETTER E
+ÑŽ     ju      044E    1102    CYRILLIC SMALL LETTER YU
+Ñ     ja      044F    1103    CYRILLIC SMALL LETTER YA
+Ñ‘     io      0451    1105    CYRILLIC SMALL LETTER IO
+Ñ’     d%      0452    1106    CYRILLIC SMALL LETTER DJE
+Ñ“     g%      0453    1107    CYRILLIC SMALL LETTER GJE
+Ñ”     ie      0454    1108    CYRILLIC SMALL LETTER UKRAINIAN IE
+Ñ•     ds      0455    1109    CYRILLIC SMALL LETTER DZE
+Ñ–     ii      0456    1110    CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+Ñ—     yi      0457    1111    CYRILLIC SMALL LETTER YI
+ј     j%      0458    1112    CYRILLIC SMALL LETTER JE
+Ñ™     lj      0459    1113    CYRILLIC SMALL LETTER LJE
+Ñš     nj      045A    1114    CYRILLIC SMALL LETTER NJE
+Ñ›     ts      045B    1115    CYRILLIC SMALL LETTER TSHE
+Ñœ     kj      045C    1116    CYRILLIC SMALL LETTER KJE
+Ñž     v%      045E    1118    CYRILLIC SMALL LETTER SHORT U
+ÑŸ     dz      045F    1119    CYRILLIC SMALL LETTER DZHE
+Ñ¢     Y3      0462    1122    CYRILLIC CAPITAL LETTER YAT
+Ñ£     y3      0463    1123    CYRILLIC SMALL LETTER YAT
+Ѫ     O3      046A    1130    CYRILLIC CAPITAL LETTER BIG YUS
+Ñ«     o3      046B    1131    CYRILLIC SMALL LETTER BIG YUS
+Ѳ     F3      0472    1138    CYRILLIC CAPITAL LETTER FITA
+ѳ     f3      0473    1139    CYRILLIC SMALL LETTER FITA
+Ñ´     V3      0474    1140    CYRILLIC CAPITAL LETTER IZHITSA
+ѵ     v3      0475    1141    CYRILLIC SMALL LETTER IZHITSA
+Ò€     C3      0480    1152    CYRILLIC CAPITAL LETTER KOPPA
+Ò     c3      0481    1153    CYRILLIC SMALL LETTER KOPPA
+Ò     G3      0490    1168    CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+Ò‘     g3      0491    1169    CYRILLIC SMALL LETTER GHE WITH UPTURN
+×     A+      05D0    1488    HEBREW LETTER ALEF
+ב     B+      05D1    1489    HEBREW LETTER BET
+×’     G+      05D2    1490    HEBREW LETTER GIMEL
+ד     D+      05D3    1491    HEBREW LETTER DALET
+×”     H+      05D4    1492    HEBREW LETTER HE
+ו     W+      05D5    1493    HEBREW LETTER VAV
+×–     Z+      05D6    1494    HEBREW LETTER ZAYIN
+×—     X+      05D7    1495    HEBREW LETTER HET
+ט     Tj      05D8    1496    HEBREW LETTER TET
+×™     J+      05D9    1497    HEBREW LETTER YOD
+ך     K%      05DA    1498    HEBREW LETTER FINAL KAF
+×›     K+      05DB    1499    HEBREW LETTER KAF
+ל     L+      05DC    1500    HEBREW LETTER LAMED
+×     M%      05DD    1501    HEBREW LETTER FINAL MEM
+מ     M+      05DE    1502    HEBREW LETTER MEM
+ן     N%      05DF    1503    HEBREW LETTER FINAL NUN `
+×      N+      05E0    1504    HEBREW LETTER NUN `
+ס     S+      05E1    1505    HEBREW LETTER SAMEKH
+×¢     E+      05E2    1506    HEBREW LETTER AYIN
+×£     P%      05E3    1507    HEBREW LETTER FINAL PE
+פ     P+      05E4    1508    HEBREW LETTER PE
+×¥     Zj      05E5    1509    HEBREW LETTER FINAL TSADI
+צ     ZJ      05E6    1510    HEBREW LETTER TSADI
+ק     Q+      05E7    1511    HEBREW LETTER QOF
+ר     R+      05E8    1512    HEBREW LETTER RESH
+ש     Sh      05E9    1513    HEBREW LETTER SHIN
+ת     T+      05EA    1514    HEBREW LETTER TAV
+ØŒ     ,+      060C    1548    ARABIC COMMA
+Ø›     ;+      061B    1563    ARABIC SEMICOLON
+ØŸ     ?+      061F    1567    ARABIC QUESTION MARK
+Ø¡     H'      0621    1569    ARABIC LETTER HAMZA
+Ø¢     aM      0622    1570    ARABIC LETTER ALEF WITH MADDA ABOVE
+Ø£     aH      0623    1571    ARABIC LETTER ALEF WITH HAMZA ABOVE
+ؤ     wH      0624    1572    ARABIC LETTER WAW WITH HAMZA ABOVE
+Ø¥     ah      0625    1573    ARABIC LETTER ALEF WITH HAMZA BELOW
+ئ     yH      0626    1574    ARABIC LETTER YEH WITH HAMZA ABOVE
+ا     a+      0627    1575    ARABIC LETTER ALEF
+ب     b+      0628    1576    ARABIC LETTER BEH
+Ø©     tm      0629    1577    ARABIC LETTER TEH MARBUTA
+ت     t+      062A    1578    ARABIC LETTER TEH
+Ø«     tk      062B    1579    ARABIC LETTER THEH
+ج     g+      062C    1580    ARABIC LETTER JEEM
+Ø­     hk      062D    1581    ARABIC LETTER HAH
+Ø®     x+      062E    1582    ARABIC LETTER KHAH
+د     d+      062F    1583    ARABIC LETTER DAL
+Ø°     dk      0630    1584    ARABIC LETTER THAL
+ر     r+      0631    1585    ARABIC LETTER REH
+ز     z+      0632    1586    ARABIC LETTER ZAIN
+س     s+      0633    1587    ARABIC LETTER SEEN
+Ø´     sn      0634    1588    ARABIC LETTER SHEEN
+ص     c+      0635    1589    ARABIC LETTER SAD
+ض     dd      0636    1590    ARABIC LETTER DAD
+Ø·     tj      0637    1591    ARABIC LETTER TAH
+ظ     zH      0638    1592    ARABIC LETTER ZAH
+ع     e+      0639    1593    ARABIC LETTER AIN
+غ     i+      063A    1594    ARABIC LETTER GHAIN
+Ù€     ++      0640    1600    ARABIC TATWEEL
+Ù     f+      0641    1601    ARABIC LETTER FEH
+Ù‚     q+      0642    1602    ARABIC LETTER QAF
+Ùƒ     k+      0643    1603    ARABIC LETTER KAF
+Ù„     l+      0644    1604    ARABIC LETTER LAM
+Ù…     m+      0645    1605    ARABIC LETTER MEEM
+Ù†     n+      0646    1606    ARABIC LETTER NOON
+Ù‡     h+      0647    1607    ARABIC LETTER HEH
+Ùˆ     w+      0648    1608    ARABIC LETTER WAW
+Ù‰     j+      0649    1609    ARABIC LETTER ALEF MAKSURA
+ÙŠ     y+      064A    1610    ARABIC LETTER YEH
+Ù‹     :+      064B    1611    ARABIC FATHATAN
+ÙŒ     "+      064C    1612    ARABIC DAMMATAN
+Ù     =+      064D    1613    ARABIC KASRATAN
+ÙŽ     /+      064E    1614    ARABIC FATHA
+Ù     '+      064F    1615    ARABIC DAMMA
+Ù     1+      0650    1616    ARABIC KASRA
+Ù‘     3+      0651    1617    ARABIC SHADDA
+Ù’     0+      0652    1618    ARABIC SUKUN
+Ù°     aS      0670    1648    ARABIC LETTER SUPERSCRIPT ALEF
+Ù¾     p+      067E    1662    ARABIC LETTER PEH
+Ú¤     v+      06A4    1700    ARABIC LETTER VEH
+Ú¯     gf      06AF    1711    ARABIC LETTER GAF
+Û°     0a      06F0    1776    EXTENDED ARABIC-INDIC DIGIT ZERO
+Û±     1a      06F1    1777    EXTENDED ARABIC-INDIC DIGIT ONE
+Û²     2a      06F2    1778    EXTENDED ARABIC-INDIC DIGIT TWO
+Û³     3a      06F3    1779    EXTENDED ARABIC-INDIC DIGIT THREE
+Û´     4a      06F4    1780    EXTENDED ARABIC-INDIC DIGIT FOUR
+Ûµ     5a      06F5    1781    EXTENDED ARABIC-INDIC DIGIT FIVE
+Û¶     6a      06F6    1782    EXTENDED ARABIC-INDIC DIGIT SIX
+Û·     7a      06F7    1783    EXTENDED ARABIC-INDIC DIGIT SEVEN
+Û¸     8a      06F8    1784    EXTENDED ARABIC-INDIC DIGIT EIGHT
+Û¹     9a      06F9    1785    EXTENDED ARABIC-INDIC DIGIT NINE
+Ḃ    B.      1E02    7682    LATIN CAPITAL LETTER B WITH DOT ABOVE
+ḃ    b.      1E03    7683    LATIN SMALL LETTER B WITH DOT ABOVE
+Ḇ    B_      1E06    7686    LATIN CAPITAL LETTER B WITH LINE BELOW
+ḇ    b_      1E07    7687    LATIN SMALL LETTER B WITH LINE BELOW
+Ḋ    D.      1E0A    7690    LATIN CAPITAL LETTER D WITH DOT ABOVE
+ḋ    d.      1E0B    7691    LATIN SMALL LETTER D WITH DOT ABOVE
+Ḏ    D_      1E0E    7694    LATIN CAPITAL LETTER D WITH LINE BELOW
+Ḡ   d_      1E0F    7695    LATIN SMALL LETTER D WITH LINE BELOW
+Ḡ   D,      1E10    7696    LATIN CAPITAL LETTER D WITH CEDILLA
+ḑ    d,      1E11    7697    LATIN SMALL LETTER D WITH CEDILLA
+Ḟ    F.      1E1E    7710    LATIN CAPITAL LETTER F WITH DOT ABOVE
+ḟ    f.      1E1F    7711    LATIN SMALL LETTER F WITH DOT ABOVE
+Ḡ    G-      1E20    7712    LATIN CAPITAL LETTER G WITH MACRON
+ḡ    g-      1E21    7713    LATIN SMALL LETTER G WITH MACRON
+Ḣ    H.      1E22    7714    LATIN CAPITAL LETTER H WITH DOT ABOVE
+ḣ    h.      1E23    7715    LATIN SMALL LETTER H WITH DOT ABOVE
+Ḧ    H:      1E26    7718    LATIN CAPITAL LETTER H WITH DIAERESIS
+ḧ    h:      1E27    7719    LATIN SMALL LETTER H WITH DIAERESIS
+Ḩ    H,      1E28    7720    LATIN CAPITAL LETTER H WITH CEDILLA
+ḩ    h,      1E29    7721    LATIN SMALL LETTER H WITH CEDILLA
+Ḱ    K'      1E30    7728    LATIN CAPITAL LETTER K WITH ACUTE
+ḱ    k'      1E31    7729    LATIN SMALL LETTER K WITH ACUTE
+Ḵ    K_      1E34    7732    LATIN CAPITAL LETTER K WITH LINE BELOW
+ḵ    k_      1E35    7733    LATIN SMALL LETTER K WITH LINE BELOW
+Ḻ    L_      1E3A    7738    LATIN CAPITAL LETTER L WITH LINE BELOW
+ḻ    l_      1E3B    7739    LATIN SMALL LETTER L WITH LINE BELOW
+Ḿ    M'      1E3E    7742    LATIN CAPITAL LETTER M WITH ACUTE
+ḿ    m'      1E3F    7743    LATIN SMALL LETTER M WITH ACUTE
+á¹€    M.      1E40    7744    LATIN CAPITAL LETTER M WITH DOT ABOVE
+á¹    m.      1E41    7745    LATIN SMALL LETTER M WITH DOT ABOVE
+Ṅ    N.      1E44    7748    LATIN CAPITAL LETTER N WITH DOT ABOVE `
+á¹…    n.      1E45    7749    LATIN SMALL LETTER N WITH DOT ABOVE `
+Ṉ    N_      1E48    7752    LATIN CAPITAL LETTER N WITH LINE BELOW `
+ṉ    n_      1E49    7753    LATIN SMALL LETTER N WITH LINE BELOW `
+á¹”    P'      1E54    7764    LATIN CAPITAL LETTER P WITH ACUTE
+ṕ    p'      1E55    7765    LATIN SMALL LETTER P WITH ACUTE
+á¹–    P.      1E56    7766    LATIN CAPITAL LETTER P WITH DOT ABOVE
+á¹—    p.      1E57    7767    LATIN SMALL LETTER P WITH DOT ABOVE
+Ṙ    R.      1E58    7768    LATIN CAPITAL LETTER R WITH DOT ABOVE
+á¹™    r.      1E59    7769    LATIN SMALL LETTER R WITH DOT ABOVE
+Ṟ    R_      1E5E    7774    LATIN CAPITAL LETTER R WITH LINE BELOW
+ṟ    r_      1E5F    7775    LATIN SMALL LETTER R WITH LINE BELOW
+á¹     S.      1E60    7776    LATIN CAPITAL LETTER S WITH DOT ABOVE
+ṡ    s.      1E61    7777    LATIN SMALL LETTER S WITH DOT ABOVE
+Ṫ    T.      1E6A    7786    LATIN CAPITAL LETTER T WITH DOT ABOVE
+ṫ    t.      1E6B    7787    LATIN SMALL LETTER T WITH DOT ABOVE
+á¹®    T_      1E6E    7790    LATIN CAPITAL LETTER T WITH LINE BELOW
+ṯ    t_      1E6F    7791    LATIN SMALL LETTER T WITH LINE BELOW
+á¹¼    V?      1E7C    7804    LATIN CAPITAL LETTER V WITH TILDE
+á¹½    v?      1E7D    7805    LATIN SMALL LETTER V WITH TILDE
+Ẁ    W!      1E80    7808    LATIN CAPITAL LETTER W WITH GRAVE
+Ạ   w!      1E81    7809    LATIN SMALL LETTER W WITH GRAVE
+Ẃ    W'      1E82    7810    LATIN CAPITAL LETTER W WITH ACUTE
+ẃ    w'      1E83    7811    LATIN SMALL LETTER W WITH ACUTE
+Ẅ    W:      1E84    7812    LATIN CAPITAL LETTER W WITH DIAERESIS
+ẅ    w:      1E85    7813    LATIN SMALL LETTER W WITH DIAERESIS
+Ẇ    W.      1E86    7814    LATIN CAPITAL LETTER W WITH DOT ABOVE
+ẇ    w.      1E87    7815    LATIN SMALL LETTER W WITH DOT ABOVE
+Ẋ    X.      1E8A    7818    LATIN CAPITAL LETTER X WITH DOT ABOVE
+ẋ    x.      1E8B    7819    LATIN SMALL LETTER X WITH DOT ABOVE
+Ẍ    X:      1E8C    7820    LATIN CAPITAL LETTER X WITH DIAERESIS
+Ạ   x:      1E8D    7821    LATIN SMALL LETTER X WITH DIAERESIS
+Ẏ    Y.      1E8E    7822    LATIN CAPITAL LETTER Y WITH DOT ABOVE
+Ạ   y.      1E8F    7823    LATIN SMALL LETTER Y WITH DOT ABOVE
+Ạ   Z>      1E90    7824    LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+ẑ    z>      1E91    7825    LATIN SMALL LETTER Z WITH CIRCUMFLEX
+Ẕ    Z_      1E94    7828    LATIN CAPITAL LETTER Z WITH LINE BELOW
+ẕ    z_      1E95    7829    LATIN SMALL LETTER Z WITH LINE BELOW
+ẖ    h_      1E96    7830    LATIN SMALL LETTER H WITH LINE BELOW
+ẗ    t:      1E97    7831    LATIN SMALL LETTER T WITH DIAERESIS
+ẘ    w0      1E98    7832    LATIN SMALL LETTER W WITH RING ABOVE
+ẙ    y0      1E99    7833    LATIN SMALL LETTER Y WITH RING ABOVE
+Ả    A2      1EA2    7842    LATIN CAPITAL LETTER A WITH HOOK ABOVE
+ả    a2      1EA3    7843    LATIN SMALL LETTER A WITH HOOK ABOVE
+Ẻ    E2      1EBA    7866    LATIN CAPITAL LETTER E WITH HOOK ABOVE
+ẻ    e2      1EBB    7867    LATIN SMALL LETTER E WITH HOOK ABOVE
+Ẽ    E?      1EBC    7868    LATIN CAPITAL LETTER E WITH TILDE
+ẽ    e?      1EBD    7869    LATIN SMALL LETTER E WITH TILDE
+Ỉ    I2      1EC8    7880    LATIN CAPITAL LETTER I WITH HOOK ABOVE
+ỉ    i2      1EC9    7881    LATIN SMALL LETTER I WITH HOOK ABOVE
+Ỏ    O2      1ECE    7886    LATIN CAPITAL LETTER O WITH HOOK ABOVE
+á»    o2      1ECF    7887    LATIN SMALL LETTER O WITH HOOK ABOVE
+Ủ    U2      1EE6    7910    LATIN CAPITAL LETTER U WITH HOOK ABOVE
+ủ    u2      1EE7    7911    LATIN SMALL LETTER U WITH HOOK ABOVE
+Ỳ    Y!      1EF2    7922    LATIN CAPITAL LETTER Y WITH GRAVE
+ỳ    y!      1EF3    7923    LATIN SMALL LETTER Y WITH GRAVE
+Ỷ    Y2      1EF6    7926    LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+á»·    y2      1EF7    7927    LATIN SMALL LETTER Y WITH HOOK ABOVE
+Ỹ    Y?      1EF8    7928    LATIN CAPITAL LETTER Y WITH TILDE
+ỹ    y?      1EF9    7929    LATIN SMALL LETTER Y WITH TILDE
+á¼€    ;'      1F00    7936    GREEK SMALL LETTER ALPHA WITH PSILI
+á¼    ,'      1F01    7937    GREEK SMALL LETTER ALPHA WITH DASIA
+ἂ    ;!      1F02    7938    GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+ἃ    ,!      1F03    7939    GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+ἄ    ?;      1F04    7940    GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+á¼…    ?,      1F05    7941    GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+ἆ    !:      1F06    7942    GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ἇ    ?:      1F07    7943    GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+     1N      2002    8194    EN SPACE
+     1M      2003    8195    EM SPACE
+     3M      2004    8196    THREE-PER-EM SPACE
+     4M      2005    8197    FOUR-PER-EM SPACE
+     6M      2006    8198    SIX-PER-EM SPACE
+     1T      2009    8201    THIN SPACE
+     1H      200A    8202    HAIR SPACE
+†   -1      2010    8208    HYPHEN
+–    -N      2013    8211    EN DASH `
+—    -M      2014    8212    EM DASH
+―    -3      2015    8213    HORIZONTAL BAR
+‖    !2      2016    8214    DOUBLE VERTICAL LINE
+‗    =2      2017    8215    DOUBLE LOW LINE
+‘    '6      2018    8216    LEFT SINGLE QUOTATION MARK
+’    '9      2019    8217    RIGHT SINGLE QUOTATION MARK
+‚    .9      201A    8218    SINGLE LOW-9 QUOTATION MARK
+‛    9'      201B    8219    SINGLE HIGH-REVERSED-9 QUOTATION MARK
+“    "6      201C    8220    LEFT DOUBLE QUOTATION MARK
+†   "9      201D    8221    RIGHT DOUBLE QUOTATION MARK
+„    :9      201E    8222    DOUBLE LOW-9 QUOTATION MARK
+‟    9"      201F    8223    DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+†    /-      2020    8224    DAGGER
+‡    /=      2021    8225    DOUBLE DAGGER
+‥    ..      2025    8229    TWO DOT LEADER
+‰    %0      2030    8240    PER MILLE SIGN
+′    1'      2032    8242    PRIME
+″    2'      2033    8243    DOUBLE PRIME
+‴    3'      2034    8244    TRIPLE PRIME
+‵    1"      2035    8245    REVERSED PRIME
+‶    2"      2036    8246    REVERSED DOUBLE PRIME
+‷    3"      2037    8247    REVERSED TRIPLE PRIME
+‸    Ca      2038    8248    CARET
+‹    <1      2039    8249    SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+›    >1      203A    8250    SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+※    :X      203B    8251    REFERENCE MARK
+‾    '-      203E    8254    OVERLINE
+â„    /f      2044    8260    FRACTION SLASH
+â°    0S      2070    8304    SUPERSCRIPT ZERO
+â´    4S      2074    8308    SUPERSCRIPT FOUR
+âµ    5S      2075    8309    SUPERSCRIPT FIVE
+ⶠ   6S      2076    8310    SUPERSCRIPT SIX
+â·    7S      2077    8311    SUPERSCRIPT SEVEN
+⸠   8S      2078    8312    SUPERSCRIPT EIGHT
+â¹    9S      2079    8313    SUPERSCRIPT NINE
+⺠   +S      207A    8314    SUPERSCRIPT PLUS SIGN
+â»    -S      207B    8315    SUPERSCRIPT MINUS
+â¼    =S      207C    8316    SUPERSCRIPT EQUALS SIGN
+â½    (S      207D    8317    SUPERSCRIPT LEFT PARENTHESIS
+â¾    )S      207E    8318    SUPERSCRIPT RIGHT PARENTHESIS
+â¿    nS      207F    8319    SUPERSCRIPT LATIN SMALL LETTER N `
+â‚€    0s      2080    8320    SUBSCRIPT ZERO
+â‚    1s      2081    8321    SUBSCRIPT ONE
+â‚‚    2s      2082    8322    SUBSCRIPT TWO
+₃    3s      2083    8323    SUBSCRIPT THREE
+â‚„    4s      2084    8324    SUBSCRIPT FOUR
+â‚…    5s      2085    8325    SUBSCRIPT FIVE
+₆    6s      2086    8326    SUBSCRIPT SIX
+₇    7s      2087    8327    SUBSCRIPT SEVEN
+₈    8s      2088    8328    SUBSCRIPT EIGHT
+₉    9s      2089    8329    SUBSCRIPT NINE
+â‚Š    +s      208A    8330    SUBSCRIPT PLUS SIGN
+â‚‹    -s      208B    8331    SUBSCRIPT MINUS
+â‚Œ    =s      208C    8332    SUBSCRIPT EQUALS SIGN
+â‚    (s      208D    8333    SUBSCRIPT LEFT PARENTHESIS
+â‚Ž    )s      208E    8334    SUBSCRIPT RIGHT PARENTHESIS
+₤    Li      20A4    8356    LIRA SIGN
+₧    Pt      20A7    8359    PESETA SIGN
+â‚©    W=      20A9    8361    WON SIGN
+€    Eu      20AC    8364    EURO SIGN
+℃    oC      2103    8451    DEGREE CELSIUS
+â„…    co      2105    8453    CARE OF
+℉    oF      2109    8457    DEGREE FAHRENHEIT
+â„–    N0      2116    8470    NUMERO SIGN
+â„—    PO      2117    8471    SOUND RECORDING COPYRIGHT
+â„ž    Rx      211E    8478    PRESCRIPTION TAKE
+â„     SM      2120    8480    SERVICE MARK
+â„¢    TM      2122    8482    TRADE MARK SIGN
+Ω    Om      2126    8486    OHM SIGN
+â„«    AO      212B    8491    ANGSTROM SIGN
+â…“    13      2153    8531    VULGAR FRACTION ONE THIRD
+â…”    23      2154    8532    VULGAR FRACTION TWO THIRDS
+â…•    15      2155    8533    VULGAR FRACTION ONE FIFTH
+â…–    25      2156    8534    VULGAR FRACTION TWO FIFTHS
+â…—    35      2157    8535    VULGAR FRACTION THREE FIFTHS
+â…˜    45      2158    8536    VULGAR FRACTION FOUR FIFTHS
+â…™    16      2159    8537    VULGAR FRACTION ONE SIXTH
+â…š    56      215A    8538    VULGAR FRACTION FIVE SIXTHS
+â…›    18      215B    8539    VULGAR FRACTION ONE EIGHTH
+â…œ    38      215C    8540    VULGAR FRACTION THREE EIGHTHS
+â…    58      215D    8541    VULGAR FRACTION FIVE EIGHTHS
+â…ž    78      215E    8542    VULGAR FRACTION SEVEN EIGHTHS
+â…     1R      2160    8544    ROMAN NUMERAL ONE
+â…¡    2R      2161    8545    ROMAN NUMERAL TWO
+â…¢    3R      2162    8546    ROMAN NUMERAL THREE
+â…£    4R      2163    8547    ROMAN NUMERAL FOUR
+â…¤    5R      2164    8548    ROMAN NUMERAL FIVE
+â…¥    6R      2165    8549    ROMAN NUMERAL SIX
+â…¦    7R      2166    8550    ROMAN NUMERAL SEVEN
+â…§    8R      2167    8551    ROMAN NUMERAL EIGHT
+â…¨    9R      2168    8552    ROMAN NUMERAL NINE
+â…©    aR      2169    8553    ROMAN NUMERAL TEN
+â…ª    bR      216A    8554    ROMAN NUMERAL ELEVEN
+â…«    cR      216B    8555    ROMAN NUMERAL TWELVE
+â…°    1r      2170    8560    SMALL ROMAN NUMERAL ONE
+â…±    2r      2171    8561    SMALL ROMAN NUMERAL TWO
+â…²    3r      2172    8562    SMALL ROMAN NUMERAL THREE
+â…³    4r      2173    8563    SMALL ROMAN NUMERAL FOUR
+â…´    5r      2174    8564    SMALL ROMAN NUMERAL FIVE
+â…µ    6r      2175    8565    SMALL ROMAN NUMERAL SIX
+â…¶    7r      2176    8566    SMALL ROMAN NUMERAL SEVEN
+â…·    8r      2177    8567    SMALL ROMAN NUMERAL EIGHT
+â…¸    9r      2178    8568    SMALL ROMAN NUMERAL NINE
+â…¹    ar      2179    8569    SMALL ROMAN NUMERAL TEN
+â…º    br      217A    8570    SMALL ROMAN NUMERAL ELEVEN
+â…»    cr      217B    8571    SMALL ROMAN NUMERAL TWELVE
+↠   <-      2190    8592    LEFTWARDS ARROW
+↑    -!      2191    8593    UPWARDS ARROW
+→    ->      2192    8594    RIGHTWARDS ARROW
+↓    -v      2193    8595    DOWNWARDS ARROW
+↔    <>      2194    8596    LEFT RIGHT ARROW
+↕    UD      2195    8597    UP DOWN ARROW
+⇠   <=      21D0    8656    LEFTWARDS DOUBLE ARROW
+⇒    =>      21D2    8658    RIGHTWARDS DOUBLE ARROW
+⇔    ==      21D4    8660    LEFT RIGHT DOUBLE ARROW
+∀    FA      2200    8704    FOR ALL
+∂    dP      2202    8706    PARTIAL DIFFERENTIAL
+∃    TE      2203    8707    THERE EXISTS
+∅    /0      2205    8709    EMPTY SET
+∆    DE      2206    8710    INCREMENT
+∇    NB      2207    8711    NABLA
+∈    (-      2208    8712    ELEMENT OF
+∋    -)      220B    8715    CONTAINS AS MEMBER
+∠   *P      220F    8719    N-ARY PRODUCT `
+∑    +Z      2211    8721    N-ARY SUMMATION `
+−    -2      2212    8722    MINUS SIGN
+∓    -+      2213    8723    MINUS-OR-PLUS SIGN
+∗    *-      2217    8727    ASTERISK OPERATOR
+∘    Ob      2218    8728    RING OPERATOR
+∙    Sb      2219    8729    BULLET OPERATOR
+√    RT      221A    8730    SQUARE ROOT
+∠   0(      221D    8733    PROPORTIONAL TO
+∞    00      221E    8734    INFINITY
+∟    -L      221F    8735    RIGHT ANGLE
+∠    -V      2220    8736    ANGLE
+∥    PP      2225    8741    PARALLEL TO
+∧    AN      2227    8743    LOGICAL AND
+∨    OR      2228    8744    LOGICAL OR
+∩    (U      2229    8745    INTERSECTION
+∪    )U      222A    8746    UNION
+∫    In      222B    8747    INTEGRAL
+∬    DI      222C    8748    DOUBLE INTEGRAL
+∮    Io      222E    8750    CONTOUR INTEGRAL
+∴    .:      2234    8756    THEREFORE
+∵    :.      2235    8757    BECAUSE
+∶    :R      2236    8758    RATIO
+∷    ::      2237    8759    PROPORTION
+∼    ?1      223C    8764    TILDE OPERATOR
+∾    CG      223E    8766    INVERTED LAZY S
+≃    ?-      2243    8771    ASYMPTOTICALLY EQUAL TO
+≅    ?=      2245    8773    APPROXIMATELY EQUAL TO
+≈    ?2      2248    8776    ALMOST EQUAL TO
+≌    =?      224C    8780    ALL EQUAL TO
+≓    HI      2253    8787    IMAGE OF OR APPROXIMATELY EQUAL TO
+≠    !=      2260    8800    NOT EQUAL TO
+≡    =3      2261    8801    IDENTICAL TO
+≤    =<      2264    8804    LESS-THAN OR EQUAL TO
+≥    >=      2265    8805    GREATER-THAN OR EQUAL TO
+≪    <*      226A    8810    MUCH LESS-THAN
+≫    *>      226B    8811    MUCH GREATER-THAN
+≮    !<      226E    8814    NOT LESS-THAN
+≯    !>      226F    8815    NOT GREATER-THAN
+⊂    (C      2282    8834    SUBSET OF
+⊃    )C      2283    8835    SUPERSET OF
+⊆    (_      2286    8838    SUBSET OF OR EQUAL TO
+⊇    )_      2287    8839    SUPERSET OF OR EQUAL TO
+⊙    0.      2299    8857    CIRCLED DOT OPERATOR
+⊚    02      229A    8858    CIRCLED RING OPERATOR
+⊥    -T      22A5    8869    UP TACK
+â‹…    .P      22C5    8901    DOT OPERATOR
+â‹®    :3      22EE    8942    VERTICAL ELLIPSIS
+⋯       .3      22EF    8943    MIDLINE HORIZONTAL ELLIPSIS
+⌂    Eh      2302    8962    HOUSE
+⌈    <7      2308    8968    LEFT CEILING
+⌉    >7      2309    8969    RIGHT CEILING
+⌊    7<      230A    8970    LEFT FLOOR
+⌋    7>      230B    8971    RIGHT FLOOR
+⌠   NI      2310    8976    REVERSED NOT SIGN
+⌒    (A      2312    8978    ARC
+⌕    TR      2315    8981    TELEPHONE RECORDER
+⌠    Iu      2320    8992    TOP HALF INTEGRAL
+⌡    Il      2321    8993    BOTTOM HALF INTEGRAL
+〈    </      2329    9001    LEFT-POINTING ANGLE BRACKET
+〉    />      232A    9002    RIGHT-POINTING ANGLE BRACKET
+⣠   Vs      2423    9251    OPEN BOX
+â‘€    1h      2440    9280    OCR HOOK
+â‘    3h      2441    9281    OCR CHAIR
+â‘‚    2h      2442    9282    OCR FORK
+⑃    4h      2443    9283    OCR INVERTED FORK
+⑆    1j      2446    9286    OCR BRANCH BANK IDENTIFICATION
+⑇    2j      2447    9287    OCR AMOUNT OF CHECK
+⑈    3j      2448    9288    OCR DASH
+⑉    4j      2449    9289    OCR CUSTOMER ACCOUNT NUMBER
+â’ˆ    1.      2488    9352    DIGIT ONE FULL STOP
+â’‰    2.      2489    9353    DIGIT TWO FULL STOP
+â’Š    3.      248A    9354    DIGIT THREE FULL STOP
+â’‹    4.      248B    9355    DIGIT FOUR FULL STOP
+â’Œ    5.      248C    9356    DIGIT FIVE FULL STOP
+â’    6.      248D    9357    DIGIT SIX FULL STOP
+â’Ž    7.      248E    9358    DIGIT SEVEN FULL STOP
+â’    8.      248F    9359    DIGIT EIGHT FULL STOP
+â’    9.      2490    9360    DIGIT NINE FULL STOP
+─    hh      2500    9472    BOX DRAWINGS LIGHT HORIZONTAL
+â”    HH      2501    9473    BOX DRAWINGS HEAVY HORIZONTAL
+│    vv      2502    9474    BOX DRAWINGS LIGHT VERTICAL
+┃    VV      2503    9475    BOX DRAWINGS HEAVY VERTICAL
+┄    3-      2504    9476    BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+â”…    3_      2505    9477    BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+┆    3!      2506    9478    BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+┇    3/      2507    9479    BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+┈    4-      2508    9480    BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+┉    4_      2509    9481    BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+┊    4!      250A    9482    BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+┋    4/      250B    9483    BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+┌    dr      250C    9484    BOX DRAWINGS LIGHT DOWN AND RIGHT
+â”    dR      250D    9485    BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+┎    Dr      250E    9486    BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+â”    DR      250F    9487    BOX DRAWINGS HEAVY DOWN AND RIGHT
+â”    dl      2510    9488    BOX DRAWINGS LIGHT DOWN AND LEFT
+┑    dL      2511    9489    BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+â”’    Dl      2512    9490    BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+┓    LD      2513    9491    BOX DRAWINGS HEAVY DOWN AND LEFT
+â””    ur      2514    9492    BOX DRAWINGS LIGHT UP AND RIGHT
+┕    uR      2515    9493    BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+â”–    Ur      2516    9494    BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+â”—    UR      2517    9495    BOX DRAWINGS HEAVY UP AND RIGHT
+┘    ul      2518    9496    BOX DRAWINGS LIGHT UP AND LEFT
+â”™    uL      2519    9497    BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+┚    Ul      251A    9498    BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+â”›    UL      251B    9499    BOX DRAWINGS HEAVY UP AND LEFT
+├    vr      251C    9500    BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+â”    vR      251D    9501    BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+â”     Vr      2520    9504    BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+┣    VR      2523    9507    BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+┤    vl      2524    9508    BOX DRAWINGS LIGHT VERTICAL AND LEFT
+┥    vL      2525    9509    BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+┨    Vl      2528    9512    BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+┫    VL      252B    9515    BOX DRAWINGS HEAVY VERTICAL AND LEFT
+┬    dh      252C    9516    BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+┯    dH      252F    9519    BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+â”°    Dh      2530    9520    BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+┳    DH      2533    9523    BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+â”´    uh      2534    9524    BOX DRAWINGS LIGHT UP AND HORIZONTAL
+â”·    uH      2537    9527    BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+┸    Uh      2538    9528    BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+â”»    UH      253B    9531    BOX DRAWINGS HEAVY UP AND HORIZONTAL
+┼    vh      253C    9532    BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+┿    vH      253F    9535    BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+â•‚    Vh      2542    9538    BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+â•‹    VH      254B    9547    BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+╱    FD      2571    9585    BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+╲    BD      2572    9586    BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+â–€    TB      2580    9600    UPPER HALF BLOCK
+â–„    LB      2584    9604    LOWER HALF BLOCK
+â–ˆ    FB      2588    9608    FULL BLOCK
+â–Œ    lB      258C    9612    LEFT HALF BLOCK
+â–    RB      2590    9616    RIGHT HALF BLOCK
+â–‘    .S      2591    9617    LIGHT SHADE
+â–’    :S      2592    9618    MEDIUM SHADE
+â–“    ?S      2593    9619    DARK SHADE
+â–     fS      25A0    9632    BLACK SQUARE
+â–¡    OS      25A1    9633    WHITE SQUARE
+â–¢    RO      25A2    9634    WHITE SQUARE WITH ROUNDED CORNERS
+â–£    Rr      25A3    9635    WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+â–¤    RF      25A4    9636    SQUARE WITH HORIZONTAL FILL
+â–¥    RY      25A5    9637    SQUARE WITH VERTICAL FILL
+â–¦    RH      25A6    9638    SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+â–§    RZ      25A7    9639    SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+â–¨    RK      25A8    9640    SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+â–©    RX      25A9    9641    SQUARE WITH DIAGONAL CROSSHATCH FILL
+â–ª    sB      25AA    9642    BLACK SMALL SQUARE
+â–¬    SR      25AC    9644    BLACK RECTANGLE
+â–­    Or      25AD    9645    WHITE RECTANGLE
+â–²    UT      25B2    9650    BLACK UP-POINTING TRIANGLE
+â–³    uT      25B3    9651    WHITE UP-POINTING TRIANGLE
+â–¶    PR      25B6    9654    BLACK RIGHT-POINTING TRIANGLE
+â–·    Tr      25B7    9655    WHITE RIGHT-POINTING TRIANGLE
+â–¼    Dt      25BC    9660    BLACK DOWN-POINTING TRIANGLE
+â–½    dT      25BD    9661    WHITE DOWN-POINTING TRIANGLE
+â—€    PL      25C0    9664    BLACK LEFT-POINTING TRIANGLE
+â—    Tl      25C1    9665    WHITE LEFT-POINTING TRIANGLE
+â—†    Db      25C6    9670    BLACK DIAMOND
+â—‡    Dw      25C7    9671    WHITE DIAMOND
+â—Š    LZ      25CA    9674    LOZENGE
+â—‹    0m      25CB    9675    WHITE CIRCLE
+â—Ž    0o      25CE    9678    BULLSEYE
+â—    0M      25CF    9679    BLACK CIRCLE
+â—    0L      25D0    9680    CIRCLE WITH LEFT HALF BLACK
+â—‘    0R      25D1    9681    CIRCLE WITH RIGHT HALF BLACK
+â—˜    Sn      25D8    9688    INVERSE BULLET
+â—™    Ic      25D9    9689    INVERSE WHITE CIRCLE
+â—¢    Fd      25E2    9698    BLACK LOWER RIGHT TRIANGLE
+â—£    Bd      25E3    9699    BLACK LOWER LEFT TRIANGLE
+★    *2      2605    9733    BLACK STAR
+☆    *1      2606    9734    WHITE STAR
+☜    <H      261C    9756    WHITE LEFT POINTING INDEX
+☞    >H      261E    9758    WHITE RIGHT POINTING INDEX
+☺    0u      263A    9786    WHITE SMILING FACE
+☻    0U      263B    9787    BLACK SMILING FACE
+☼    SU      263C    9788    WHITE SUN WITH RAYS
+♀    Fm      2640    9792    FEMALE SIGN
+♂    Ml      2642    9794    MALE SIGN
+â™     cS      2660    9824    BLACK SPADE SUIT
+♡    cH      2661    9825    WHITE HEART SUIT
+♢    cD      2662    9826    WHITE DIAMOND SUIT
+♣    cC      2663    9827    BLACK CLUB SUIT
+♩    Md      2669    9833    QUARTER NOTE `
+♪    M8      266A    9834    EIGHTH NOTE `
+♫    M2      266B    9835    BEAMED EIGHTH NOTES
+â™­    Mb      266D    9837    MUSIC FLAT SIGN
+â™®    Mx      266E    9838    MUSIC NATURAL SIGN
+♯    MX      266F    9839    MUSIC SHARP SIGN
+✓    OK      2713    10003   CHECK MARK
+✗    XX      2717    10007   BALLOT X
+✠    -X      2720    10016   MALTESE CROSS
+     IS      3000    12288   IDEOGRAPHIC SPACE
+〠   ,_      3001    12289   IDEOGRAPHIC COMMA
+。    ._      3002    12290   IDEOGRAPHIC FULL STOP
+〃    +"      3003    12291   DITTO MARK
+〄    +_      3004    12292   JAPANESE INDUSTRIAL STANDARD SYMBOL
+々    *_      3005    12293   IDEOGRAPHIC ITERATION MARK
+〆    ;_      3006    12294   IDEOGRAPHIC CLOSING MARK
+〇    0_      3007    12295   IDEOGRAPHIC NUMBER ZERO
+《    <+      300A    12298   LEFT DOUBLE ANGLE BRACKET
+》    >+      300B    12299   RIGHT DOUBLE ANGLE BRACKET
+「    <'      300C    12300   LEFT CORNER BRACKET
+〠   >'      300D    12301   RIGHT CORNER BRACKET
+『    <"      300E    12302   LEFT WHITE CORNER BRACKET
+〠   >"      300F    12303   RIGHT WHITE CORNER BRACKET
+〠   ("      3010    12304   LEFT BLACK LENTICULAR BRACKET
+】    )"      3011    12305   RIGHT BLACK LENTICULAR BRACKET
+〒    =T      3012    12306   POSTAL MARK
+〓    =_      3013    12307   GETA MARK
+〔    ('      3014    12308   LEFT TORTOISE SHELL BRACKET
+〕    )'      3015    12309   RIGHT TORTOISE SHELL BRACKET
+〖    (I      3016    12310   LEFT WHITE LENTICULAR BRACKET
+〗    )I      3017    12311   RIGHT WHITE LENTICULAR BRACKET
+〜    -?      301C    12316   WAVE DASH
+ã    A5      3041    12353   HIRAGANA LETTER SMALL A
+ã‚    a5      3042    12354   HIRAGANA LETTER A
+ム   I5      3043    12355   HIRAGANA LETTER SMALL I
+ã„    i5      3044    12356   HIRAGANA LETTER I
+ã…    U5      3045    12357   HIRAGANA LETTER SMALL U
+ㆠ   u5      3046    12358   HIRAGANA LETTER U
+㇠   E5      3047    12359   HIRAGANA LETTER SMALL E
+㈠   e5      3048    12360   HIRAGANA LETTER E
+㉠   O5      3049    12361   HIRAGANA LETTER SMALL O
+㊠   o5      304A    12362   HIRAGANA LETTER O
+ã‹    ka      304B    12363   HIRAGANA LETTER KA
+㌠   ga      304C    12364   HIRAGANA LETTER GA
+ã    ki      304D    12365   HIRAGANA LETTER KI
+㎠   gi      304E    12366   HIRAGANA LETTER GI
+ã    ku      304F    12367   HIRAGANA LETTER KU
+ã    gu      3050    12368   HIRAGANA LETTER GU
+ã‘    ke      3051    12369   HIRAGANA LETTER KE
+ã’    ge      3052    12370   HIRAGANA LETTER GE
+ã“    ko      3053    12371   HIRAGANA LETTER KO
+ã”    go      3054    12372   HIRAGANA LETTER GO
+ã•    sa      3055    12373   HIRAGANA LETTER SA
+ã–    za      3056    12374   HIRAGANA LETTER ZA
+ã—    si      3057    12375   HIRAGANA LETTER SI
+㘠   zi      3058    12376   HIRAGANA LETTER ZI
+ã™    su      3059    12377   HIRAGANA LETTER SU
+ãš    zu      305A    12378   HIRAGANA LETTER ZU
+ã›    se      305B    12379   HIRAGANA LETTER SE
+㜠   ze      305C    12380   HIRAGANA LETTER ZE
+ã    so      305D    12381   HIRAGANA LETTER SO
+ãž    zo      305E    12382   HIRAGANA LETTER ZO
+㟠   ta      305F    12383   HIRAGANA LETTER TA
+ã     da      3060    12384   HIRAGANA LETTER DA
+ã¡    ti      3061    12385   HIRAGANA LETTER TI
+㢠   di      3062    12386   HIRAGANA LETTER DI
+㣠   tU      3063    12387   HIRAGANA LETTER SMALL TU
+㤠   tu      3064    12388   HIRAGANA LETTER TU
+㥠   du      3065    12389   HIRAGANA LETTER DU
+㦠   te      3066    12390   HIRAGANA LETTER TE
+㧠   de      3067    12391   HIRAGANA LETTER DE
+㨠   to      3068    12392   HIRAGANA LETTER TO
+ã©    do      3069    12393   HIRAGANA LETTER DO
+㪠   na      306A    12394   HIRAGANA LETTER NA
+ã«    ni      306B    12395   HIRAGANA LETTER NI
+㬠   nu      306C    12396   HIRAGANA LETTER NU
+ã­    ne      306D    12397   HIRAGANA LETTER NE
+ã®    no      306E    12398   HIRAGANA LETTER NO
+㯠   ha      306F    12399   HIRAGANA LETTER HA
+ã°    ba      3070    12400   HIRAGANA LETTER BA
+ã±    pa      3071    12401   HIRAGANA LETTER PA
+ã²    hi      3072    12402   HIRAGANA LETTER HI
+ã³    bi      3073    12403   HIRAGANA LETTER BI
+ã´    pi      3074    12404   HIRAGANA LETTER PI
+ãµ    hu      3075    12405   HIRAGANA LETTER HU
+㶠   bu      3076    12406   HIRAGANA LETTER BU
+ã·    pu      3077    12407   HIRAGANA LETTER PU
+㸠   he      3078    12408   HIRAGANA LETTER HE
+ã¹    be      3079    12409   HIRAGANA LETTER BE
+㺠   pe      307A    12410   HIRAGANA LETTER PE
+ã»    ho      307B    12411   HIRAGANA LETTER HO
+ã¼    bo      307C    12412   HIRAGANA LETTER BO
+ã½    po      307D    12413   HIRAGANA LETTER PO
+ã¾    ma      307E    12414   HIRAGANA LETTER MA
+ã¿    mi      307F    12415   HIRAGANA LETTER MI
+ã‚€    mu      3080    12416   HIRAGANA LETTER MU
+ã‚    me      3081    12417   HIRAGANA LETTER ME
+ã‚‚    mo      3082    12418   HIRAGANA LETTER MO
+ゃ    yA      3083    12419   HIRAGANA LETTER SMALL YA
+ã‚„    ya      3084    12420   HIRAGANA LETTER YA
+ã‚…    yU      3085    12421   HIRAGANA LETTER SMALL YU
+ゆ    yu      3086    12422   HIRAGANA LETTER YU
+ょ    yO      3087    12423   HIRAGANA LETTER SMALL YO
+よ    yo      3088    12424   HIRAGANA LETTER YO
+ら    ra      3089    12425   HIRAGANA LETTER RA
+ã‚Š    ri      308A    12426   HIRAGANA LETTER RI
+ã‚‹    ru      308B    12427   HIRAGANA LETTER RU
+ã‚Œ    re      308C    12428   HIRAGANA LETTER RE
+ã‚    ro      308D    12429   HIRAGANA LETTER RO
+ã‚Ž    wA      308E    12430   HIRAGANA LETTER SMALL WA
+ã‚    wa      308F    12431   HIRAGANA LETTER WA
+ã‚    wi      3090    12432   HIRAGANA LETTER WI
+ã‚‘    we      3091    12433   HIRAGANA LETTER WE
+ã‚’    wo      3092    12434   HIRAGANA LETTER WO
+ã‚“    n5      3093    12435   HIRAGANA LETTER N `
+ã‚”    vu      3094    12436   HIRAGANA LETTER VU
+ã‚›    "5      309B    12443   KATAKANA-HIRAGANA VOICED SOUND MARK
+ã‚œ    05      309C    12444   KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ã‚    *5      309D    12445   HIRAGANA ITERATION MARK
+ã‚ž    +5      309E    12446   HIRAGANA VOICED ITERATION MARK
+ã‚¡    a6      30A1    12449   KATAKANA LETTER SMALL A
+ã‚¢    A6      30A2    12450   KATAKANA LETTER A
+ã‚£    i6      30A3    12451   KATAKANA LETTER SMALL I
+イ    I6      30A4    12452   KATAKANA LETTER I
+ã‚¥    u6      30A5    12453   KATAKANA LETTER SMALL U
+ウ    U6      30A6    12454   KATAKANA LETTER U
+ェ    e6      30A7    12455   KATAKANA LETTER SMALL E
+エ    E6      30A8    12456   KATAKANA LETTER E
+ã‚©    o6      30A9    12457   KATAKANA LETTER SMALL O
+オ    O6      30AA    12458   KATAKANA LETTER O
+ã‚«    Ka      30AB    12459   KATAKANA LETTER KA
+ガ    Ga      30AC    12460   KATAKANA LETTER GA
+ã‚­    Ki      30AD    12461   KATAKANA LETTER KI
+ã‚®    Gi      30AE    12462   KATAKANA LETTER GI
+ク    Ku      30AF    12463   KATAKANA LETTER KU
+ã‚°    Gu      30B0    12464   KATAKANA LETTER GU
+ケ    Ke      30B1    12465   KATAKANA LETTER KE
+ゲ    Ge      30B2    12466   KATAKANA LETTER GE
+コ    Ko      30B3    12467   KATAKANA LETTER KO
+ã‚´    Go      30B4    12468   KATAKANA LETTER GO
+サ    Sa      30B5    12469   KATAKANA LETTER SA
+ザ    Za      30B6    12470   KATAKANA LETTER ZA
+ã‚·    Si      30B7    12471   KATAKANA LETTER SI
+ジ    Zi      30B8    12472   KATAKANA LETTER ZI
+ス    Su      30B9    12473   KATAKANA LETTER SU
+ズ    Zu      30BA    12474   KATAKANA LETTER ZU
+ã‚»    Se      30BB    12475   KATAKANA LETTER SE
+ゼ    Ze      30BC    12476   KATAKANA LETTER ZE
+ソ    So      30BD    12477   KATAKANA LETTER SO
+ゾ    Zo      30BE    12478   KATAKANA LETTER ZO
+ã‚¿    Ta      30BF    12479   KATAKANA LETTER TA
+ダ    Da      30C0    12480   KATAKANA LETTER DA
+ム   Ti      30C1    12481   KATAKANA LETTER TI
+ヂ    Di      30C2    12482   KATAKANA LETTER DI
+ッ    TU      30C3    12483   KATAKANA LETTER SMALL TU
+ツ    Tu      30C4    12484   KATAKANA LETTER TU
+ヅ    Du      30C5    12485   KATAKANA LETTER DU
+テ    Te      30C6    12486   KATAKANA LETTER TE
+デ    De      30C7    12487   KATAKANA LETTER DE
+ト    To      30C8    12488   KATAKANA LETTER TO
+ド    Do      30C9    12489   KATAKANA LETTER DO
+ナ    Na      30CA    12490   KATAKANA LETTER NA
+ニ    Ni      30CB    12491   KATAKANA LETTER NI
+ヌ    Nu      30CC    12492   KATAKANA LETTER NU
+ム   Ne      30CD    12493   KATAKANA LETTER NE
+ノ    No      30CE    12494   KATAKANA LETTER NO
+ム   Ha      30CF    12495   KATAKANA LETTER HA
+ム   Ba      30D0    12496   KATAKANA LETTER BA
+パ    Pa      30D1    12497   KATAKANA LETTER PA
+ヒ    Hi      30D2    12498   KATAKANA LETTER HI
+ビ    Bi      30D3    12499   KATAKANA LETTER BI
+ピ    Pi      30D4    12500   KATAKANA LETTER PI
+フ    Hu      30D5    12501   KATAKANA LETTER HU
+ブ    Bu      30D6    12502   KATAKANA LETTER BU
+プ    Pu      30D7    12503   KATAKANA LETTER PU
+ヘ    He      30D8    12504   KATAKANA LETTER HE
+ベ    Be      30D9    12505   KATAKANA LETTER BE
+ペ    Pe      30DA    12506   KATAKANA LETTER PE
+ホ    Ho      30DB    12507   KATAKANA LETTER HO
+ボ    Bo      30DC    12508   KATAKANA LETTER BO
+ム   Po      30DD    12509   KATAKANA LETTER PO
+マ    Ma      30DE    12510   KATAKANA LETTER MA
+ミ    Mi      30DF    12511   KATAKANA LETTER MI
+ム    Mu      30E0    12512   KATAKANA LETTER MU
+メ    Me      30E1    12513   KATAKANA LETTER ME
+モ    Mo      30E2    12514   KATAKANA LETTER MO
+ャ    YA      30E3    12515   KATAKANA LETTER SMALL YA
+ヤ    Ya      30E4    12516   KATAKANA LETTER YA
+ュ    YU      30E5    12517   KATAKANA LETTER SMALL YU
+ユ    Yu      30E6    12518   KATAKANA LETTER YU
+ョ    YO      30E7    12519   KATAKANA LETTER SMALL YO
+ヨ    Yo      30E8    12520   KATAKANA LETTER YO
+ラ    Ra      30E9    12521   KATAKANA LETTER RA
+リ    Ri      30EA    12522   KATAKANA LETTER RI
+ル    Ru      30EB    12523   KATAKANA LETTER RU
+レ    Re      30EC    12524   KATAKANA LETTER RE
+ロ    Ro      30ED    12525   KATAKANA LETTER RO
+ヮ    WA      30EE    12526   KATAKANA LETTER SMALL WA
+ワ    Wa      30EF    12527   KATAKANA LETTER WA
+ヰ    Wi      30F0    12528   KATAKANA LETTER WI
+ヱ    We      30F1    12529   KATAKANA LETTER WE
+ヲ    Wo      30F2    12530   KATAKANA LETTER WO
+ン    N6      30F3    12531   KATAKANA LETTER N `
+ヴ    Vu      30F4    12532   KATAKANA LETTER VU
+ヵ    KA      30F5    12533   KATAKANA LETTER SMALL KA
+ヶ    KE      30F6    12534   KATAKANA LETTER SMALL KE
+ヷ    Va      30F7    12535   KATAKANA LETTER VA
+ヸ    Vi      30F8    12536   KATAKANA LETTER VI
+ヹ    Ve      30F9    12537   KATAKANA LETTER VE
+ヺ    Vo      30FA    12538   KATAKANA LETTER VO
+・    .6      30FB    12539   KATAKANA MIDDLE DOT
+ー    -6      30FC    12540   KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ヽ    *6      30FD    12541   KATAKANA ITERATION MARK
+ヾ    +6      30FE    12542   KATAKANA VOICED ITERATION MARK
+ã„…    b4      3105    12549   BOPOMOFO LETTER B
+ㄆ    p4      3106    12550   BOPOMOFO LETTER P
+ㄇ    m4      3107    12551   BOPOMOFO LETTER M
+ㄈ    f4      3108    12552   BOPOMOFO LETTER F
+ㄉ    d4      3109    12553   BOPOMOFO LETTER D
+ã„Š    t4      310A    12554   BOPOMOFO LETTER T
+ã„‹    n4      310B    12555   BOPOMOFO LETTER N `
+ã„Œ    l4      310C    12556   BOPOMOFO LETTER L
+ã„    g4      310D    12557   BOPOMOFO LETTER G
+ã„Ž    k4      310E    12558   BOPOMOFO LETTER K
+ã„    h4      310F    12559   BOPOMOFO LETTER H
+ã„    j4      3110    12560   BOPOMOFO LETTER J
+ã„‘    q4      3111    12561   BOPOMOFO LETTER Q
+ã„’    x4      3112    12562   BOPOMOFO LETTER X
+ã„“    zh      3113    12563   BOPOMOFO LETTER ZH
+ã„”    ch      3114    12564   BOPOMOFO LETTER CH
+ã„•    sh      3115    12565   BOPOMOFO LETTER SH
+ã„–    r4      3116    12566   BOPOMOFO LETTER R
+ã„—    z4      3117    12567   BOPOMOFO LETTER Z
+ㄘ    c4      3118    12568   BOPOMOFO LETTER C
+ã„™    s4      3119    12569   BOPOMOFO LETTER S
+ã„š    a4      311A    12570   BOPOMOFO LETTER A
+ã„›    o4      311B    12571   BOPOMOFO LETTER O
+ã„œ    e4      311C    12572   BOPOMOFO LETTER E
+ã„ž    ai      311E    12574   BOPOMOFO LETTER AI
+ã„Ÿ    ei      311F    12575   BOPOMOFO LETTER EI
+ã„     au      3120    12576   BOPOMOFO LETTER AU
+ã„¡    ou      3121    12577   BOPOMOFO LETTER OU
+ã„¢    an      3122    12578   BOPOMOFO LETTER AN
+ã„£    en      3123    12579   BOPOMOFO LETTER EN
+ㄤ    aN      3124    12580   BOPOMOFO LETTER ANG
+ã„¥    eN      3125    12581   BOPOMOFO LETTER ENG
+ㄦ    er      3126    12582   BOPOMOFO LETTER ER
+ㄧ    i4      3127    12583   BOPOMOFO LETTER I
+ㄨ    u4      3128    12584   BOPOMOFO LETTER U
+ã„©    iu      3129    12585   BOPOMOFO LETTER IU
+ㄪ    v4      312A    12586   BOPOMOFO LETTER V
+ã„«    nG      312B    12587   BOPOMOFO LETTER NG
+ㄬ    gn      312C    12588   BOPOMOFO LETTER GN
+㈠    1c      3220    12832   PARENTHESIZED IDEOGRAPH ONE
+㈡    2c      3221    12833   PARENTHESIZED IDEOGRAPH TWO
+㈢    3c      3222    12834   PARENTHESIZED IDEOGRAPH THREE
+㈣    4c      3223    12835   PARENTHESIZED IDEOGRAPH FOUR
+㈤    5c      3224    12836   PARENTHESIZED IDEOGRAPH FIVE
+㈥    6c      3225    12837   PARENTHESIZED IDEOGRAPH SIX
+㈦    7c      3226    12838   PARENTHESIZED IDEOGRAPH SEVEN
+㈧    8c      3227    12839   PARENTHESIZED IDEOGRAPH EIGHT
+㈨    9c      3228    12840   PARENTHESIZED IDEOGRAPH NINE
+ff    ff      FB00    64256   LATIN SMALL LIGATURE FF
+ﬠ   fi      FB01    64257   LATIN SMALL LIGATURE FI
+fl    fl      FB02    64258   LATIN SMALL LIGATURE FL
+ſt    ft      FB05    64261   LATIN SMALL LIGATURE LONG S T
+st    st      FB06    64262   LATIN SMALL LIGATURE ST
 
  vim:tw=78:ts=8:ft=help:norl:
index 84800aa..6cafa7f 100644 (file)
@@ -1,4 +1,4 @@
-*editing.txt*   For Vim version 7.3.  Last change: 2010 Jul 28
+*editing.txt*   For Vim version 7.4.  Last change: 2013 Aug 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -185,12 +185,13 @@ If you want to automatically save the changes without asking, switch on the
 that does not work for all commands.
 
 If you want to keep the changed buffer without saving it, switch on the
-'hidden' option.  See |hidden-buffer|.
+'hidden' option.  See |hidden-buffer|.  Some commands work like this even when
+'hidden' is not set, check the help for the command.
 
 ==============================================================================
 2. Editing a file                                      *edit-a-file*
 
-                                                       *:e* *:edit*
+                                                       *:e* *:edit* *reload*
 :e[dit] [++opt] [+cmd] Edit the current file.  This is useful to re-edit the
                        current file, when it has been changed outside of Vim.
                        This fails when changes have been made to the current
@@ -199,7 +200,7 @@ If you want to keep the changed buffer without saving it, switch on the
                        Also see |++opt| and |+cmd|.
                        {Vi: no ++opt}
 
-                                                       *:edit!*
+                                                       *:edit!* *discard*
 :e[dit]! [++opt] [+cmd]
                        Edit the current file always.  Discard any changes to
                        the current buffer.  This is useful if you want to
@@ -276,10 +277,11 @@ If you want to keep the changed buffer without saving it, switch on the
                        'readonly' option for this buffer.  {not in Vi}
 
                                                        *CTRL-^* *CTRL-6*
-CTRL-^                 Edit the alternate file (equivalent to ":e #").
-                       Mostly the alternate file is the previously edited
-                       file.  This is a quick way to toggle between two
-                       files.
+CTRL-^                 Edit the alternate file.  Mostly the alternate file is
+                       the previously edited file.  This is a quick way to
+                       toggle between two files.  It is equivalent to ":e #",
+                       except that it also works when there is no file name.
+
                        If the 'autowrite' or 'autowriteall' option is on and
                        the buffer was changed, write it.
                        Mostly the ^ character is positioned on the 6 key,
@@ -376,8 +378,9 @@ command that accepts more than one file name (like ":next file1 file2")
 embedded spaces must be escaped with a backslash.
 
                                                *wildcard* *wildcards*
-Wildcards in {file} are expanded.  Which wildcards are supported depends on
-the system.  These are the common ones:
+Wildcards in {file} are expanded, but as with file completion, 'wildignore'
+and 'suffixes' apply.  Which wildcards are supported depends on the system.
+These are the common ones:
        ?       matches one character
        *       matches anything, including nothing
        **      matches anything, including nothing, recurses into directories
@@ -391,7 +394,7 @@ is to use "path\[[]abc]".  Then the file "path[abc]" literally.
                                        *starstar-wildcard*
 Expanding "**" is possible on Unix, Win32, Mac OS/X and a few other systems.
 This allows searching a directory tree.  This goes up to 100 directories deep.
-Note there are some commands where this works slightly different, see
+Note there are some commands where this works slightly differently, see
 |file-searching|.
 Example: >
        :n **/*.txt
@@ -421,9 +424,11 @@ You can have the backticks expanded as a Vim expression, instead of an
 external command, by using the syntax `={expr}` e.g.: >
        :e `=tempname()`
 The expression can contain just about anything, thus this can also be used to
-avoid the special meaning of '"', '|', '%' and '#'.  Names are to be separated
-with line breaks.  When the result is a |List| then each item is used as a
-name.  Line breaks also separate names.
+avoid the special meaning of '"', '|', '%' and '#'.  However, 'wildignore'
+does apply like to other wildcards.
+If the expression returns a string then names are to be separated with line
+breaks.  When the result is a |List| then each item is used as a name.  Line
+breaks also separate names.
 
                                                        *++opt* *[++opt]*
 The [++opt] argument can be used to force the value of 'fileformat',
@@ -984,6 +989,11 @@ explanation of when the copy is made and when the file is renamed.
 If the creation of a backup file fails, the write is not done.  If you want
 to write anyway add a '!' to the command.
 
+                                                       *write-permissions*
+When writing a new file the permissions are read-write.  For unix the mask is
+0666 with additionally umask applied.  When writing a file that was read Vim
+will preserve the permissions, but clear the s-bit.
+
                                                        *write-readonly*
 When the 'cpoptions' option contains 'W', Vim will refuse to overwrite a
 readonly file.  When 'W' is not present, ":w!" will overwrite a readonly file,
@@ -1060,6 +1070,7 @@ The names can be in upper- or lowercase.
                        If there are other tab pages and quitting the last
                        window in the current tab page the current tab page is
                        closed |tab-page|.
+                       Triggers the |QuitPre| autocommand event.
 
 :conf[irm] q[uit]      Quit, but give prompt when changes have been made, or
                        the last file in the argument list has not been
@@ -1153,8 +1164,10 @@ MULTIPLE WINDOWS AND BUFFERS                             *window-exit*
                                                        *:confirm* *:conf*
 :conf[irm] {command}   Execute {command}, and use a dialog when an
                        operation has to be confirmed.  Can be used on the
-                       ":q", ":qa" and ":w" commands (the latter to over-ride
-                       a read-only setting).
+                       |:q|, |:qa| and |:w| commands (the latter to override
+                       a read-only setting), and any other command that can
+                       fail in such a way, such as |:only|, |:buffer|,
+                       |:bdelete|, etc.
 
 Examples: >
   :confirm w foo
@@ -1207,13 +1220,13 @@ For versions of Vim where browsing is not supported, the command is executed
 unmodified.
 
                                                        *browsefilter*
-For MS Windows, you can modify the filters that are used in the browse dialog.
-By setting the g:browsefilter or b:browsefilter variables, you can change the
-filters globally or locally to the buffer.  The variable is set to a string in
-the format "{filter label}\t{pattern};{pattern}\n" where {filter label} is the
-text that appears in the "Files of Type" comboBox, and {pattern} is the
-pattern which filters the filenames.  Several patterns can be given, separated
-by ';'.
+For MS Windows and GTK, you can modify the filters that are used in the browse
+dialog.  By setting the g:browsefilter or b:browsefilter variables, you can
+change the filters globally or locally to the buffer.  The variable is set to
+a string in the format "{filter label}\t{pattern};{pattern}\n" where {filter
+label} is the text that appears in the "Files of Type" comboBox, and {pattern}
+is the pattern which filters the filenames.  Several patterns can be given,
+separated by ';'.
 
 For Motif the same format is used, but only the very first pattern is actually
 used (Motif only offers one pattern, but you can edit it).
@@ -1221,7 +1234,7 @@ used (Motif only offers one pattern, but you can edit it).
 For example, to have only Vim files in the dialog, you could use the following
 command: >
 
-     let g:browsefilter="Vim Scripts\t*.vim\nVim Startup Files\t*vimrc\n"
+     let g:browsefilter = "Vim Scripts\t*.vim\nVim Startup Files\t*vimrc\n"
 
 You can override the filter setting on a per-buffer basis by setting the
 b:browsefilter variable.  You would most likely set b:browsefilter in a
@@ -1231,6 +1244,13 @@ difficult to start editing a file of a different type.  To overcome this, you
 may want to add "All Files\t*.*\n" as the final filter, so that the user can
 still access any desired file.
 
+To avoid setting browsefilter when Vim does not actually support it, you can
+use has("browsefilter"): >
+
+       if has("browsefilter")
+          let g:browsefilter = "whatever"
+       endif
+
 ==============================================================================
 7. The current directory                               *current-directory*
 
@@ -1340,7 +1360,7 @@ Vim is able to write files encrypted, and read them back.  The encrypted text
 cannot be read without the right key.
 {only available when compiled with the |+cryptv| feature}  *E833*
 
-The text in the swap file and the undo file is also encrypted.
+The text in the swap file and the undo file is also encrypted.  *E843*
 
 Note: The text in memory is not encrypted.  A system administrator may be able
 to see your text while you are editing it.  When filtering text with
@@ -1382,6 +1402,8 @@ To set the default method, used for new files, use one of these in your
 |vimrc| file: >
        set cm=zip
        set cm=blowfish
+The message given for reading and writing a file will show "[crypted]" when
+using zip, "[blowfish]" when using blowfish.
 
 When writing an undo file, the same key and method will be used for the text
 in the undo file. |persistent-undo|.
@@ -1431,13 +1453,15 @@ Notes:
   history, showing the 'key' value in a viminfo file.
 - There is never 100% safety.  The encryption in Vim has not been tested for
   robustness.
-- The algorithm used is breakable.  A 4 character key in about one hour, a 6
-  character key in one day (on a Pentium 133 PC).  This requires that you know
-  some text that must appear in the file.  An expert can break it for any key.
-  When the text has been decrypted, this also means that the key can be
-  revealed, and other files encrypted with the same key can be decrypted.
-- Pkzip uses the same encryption, and US Govt has no objection to its export.
-  Pkzip's public file APPNOTE.TXT describes this algorithm in detail.
+- The algorithm used for 'cryptmethod' "zip" is breakable.  A 4 character key
+  in about one hour, a 6 character key in one day (on a Pentium 133 PC).  This
+  requires that you know some text that must appear in the file.  An expert
+  can break it for any key.  When the text has been decrypted, this also means
+  that the key can be revealed, and other files encrypted with the same key
+  can be decrypted.
+- Pkzip uses the same encryption as 'cryptmethod' "zip", and US Govt has no
+  objection to its export.  Pkzip's public file APPNOTE.TXT describes this
+  algorithm in detail.
 - Vim originates from the Netherlands.  That is where the sources come from.
   Thus the encryption code is not exported from the USA.
 
@@ -1629,6 +1653,6 @@ There are three different types of searching:
 
    Note that completion for ":find", ":sfind", and ":tabfind" commands do not
    currently work with 'path' items that contain a url or use the double star
-   (/usr/**2) or upward search (;) notations. >
+   with depth limiter (/usr/**2) or upward search (;) notations.
 
  vim:tw=78:ts=8:ft=help:norl:
index 5403551..743aec1 100644 (file)
@@ -1,4 +1,4 @@
-*eval.txt*     For Vim version 7.3.  Last change: 2010 Aug 15
+*eval.txt*     For Vim version 7.4.  Last change: 2013 Aug 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -39,7 +39,7 @@ done, the features in this document are not available.        See |+eval| and
                                                        *E712*
 There are six types of variables:
 
-Number         A 32 bit signed number.  |expr-number| *Number*
+Number         A 32 or 64 bit signed number.  |expr-number| *Number*
                Examples:  -123  0x10  0177
 
 Float          A floating point number. |floating-point-format| *Float*
@@ -63,21 +63,21 @@ The Number and String types are converted automatically, depending on how they
 are used.
 
 Conversion from a Number to a String is by making the ASCII representation of
-the Number.  Examples: >
-       Number 123      -->     String "123"
-       Number 0        -->     String "0"
-       Number -1       -->     String "-1"
+the Number.  Examples:
+       Number 123      -->     String "123" ~
+       Number 0        -->     String "0" ~
+       Number -1       -->     String "-1" ~
                                                        *octal*
 Conversion from a String to a Number is done by converting the first digits
 to a number.  Hexadecimal "0xf9" and Octal "017" numbers are recognized.  If
-the String doesn't start with digits, the result is zero.  Examples: >
-       String "456"    -->     Number 456
-       String "6bar"   -->     Number 6
-       String "foo"    -->     Number 0
-       String "0xf1"   -->     Number 241
-       String "0100"   -->     Number 64
-       String "-8"     -->     Number -8
-       String "+8"     -->     Number 0
+the String doesn't start with digits, the result is zero.  Examples:
+       String "456"    -->     Number 456 ~
+       String "6bar"   -->     Number 6 ~
+       String "foo"    -->     Number 0 ~
+       String "0xf1"   -->     Number 241 ~
+       String "0100"   -->     Number 64 ~
+       String "-8"     -->     Number -8 ~
+       String "+8"     -->     Number 0 ~
 
 To force conversion from String to Number, add zero to it: >
        :echo "0100" + 0
@@ -91,8 +91,8 @@ For boolean operators Numbers are used.  Zero is FALSE, non-zero is TRUE.
 Note that in the command >
        :if "foo"
 "foo" is converted to 0, which means FALSE.  To test for a non-empty string,
-use strlen(): >
-       :if strlen("foo")
+use empty(): >
+       :if !empty("foo")
 <                              *E745* *E728* *E703* *E729* *E730* *E731*
 List, Dictionary and Funcref types are not automatically converted.
 
@@ -503,7 +503,7 @@ This removes all entries from "dict" with a value not matching 'x'.
 
 
 Dictionary function ~
-                                       *Dictionary-function* *self* *E725*
+                               *Dictionary-function* *self* *E725* *E862*
 When a function is defined with the "dict" attribute it can be used in a
 special way with a dictionary. Example: >
        :function Mylen() dict
@@ -615,7 +615,6 @@ Expression syntax summary, from least to most significant:
        - expr7                 unary minus
        + expr7                 unary plus
 
-
 |expr8|        expr8[expr1]            byte of a String or item of a |List|
        expr8[expr1 : expr1]    substring of a String or sublist of a |List|
        expr8.name              entry in a |Dictionary|
@@ -721,7 +720,8 @@ if it evaluates to true.
                        *expr-<#*  *expr-<=#* *expr-=~#* *expr-!~#*
                        *expr-==?* *expr-!=?* *expr->?*  *expr->=?*
                        *expr-<?*  *expr-<=?* *expr-=~?* *expr-!~?*
-                       *expr-is*
+                       *expr-is* *expr-isnot* *expr-is#* *expr-isnot#*
+                       *expr-is?* *expr-isnot?*
                use 'ignorecase'    match case     ignore case ~
 equal                  ==              ==#             ==?
 not equal              !=              !=#             !=?
@@ -731,8 +731,8 @@ smaller than                <               <#              <?
 smaller than or equal  <=              <=#             <=?
 regexp matches         =~              =~#             =~?
 regexp doesn't match   !~              !~#             !~?
-same instance          is
-different instance     isnot
+same instance          is              is#             is?
+different instance     isnot           isnot#          isnot?
 
 Examples:
 "abc" ==# "Abc"          evaluates to 0
@@ -753,12 +753,14 @@ recursively.  Ignoring case means case is ignored when comparing item values.
 A |Funcref| can only be compared with a |Funcref| and only "equal" and "not
 equal" can be used.  Case is never ignored.
 
-When using "is" or "isnot" with a |List| this checks if the expressions are
-referring to the same |List| instance. A copy of a |List| is different from
-the original |List|.  When using "is" without a |List| it is equivalent to
-using "equal", using "isnot" equivalent to using "not equal".  Except that a
-different type means the values are different. "4 == '4'" is true, "4 is '4'"
-is false.
+When using "is" or "isnot" with a |List| or a |Dictionary| this checks if the
+expressions are referring to the same |List| or |Dictionary| instance.  A copy
+of a |List| is different from the original |List|.  When using "is" without
+a |List| or a |Dictionary| it is equivalent to using "equal", using "isnot"
+equivalent to using "not equal".  Except that a different type means the
+values are different: "4 == '4'" is true, "4 is '4'" is false and "0 is []" is
+false and not an error. "is#"/"isnot#" and "is?"/"isnot?" can be used to match
+and ignore case.
 
 When comparing a String with a Number, the String is converted to a Number,
 and the comparison is done on Numbers. This means that "0 == 'x'" is TRUE,
@@ -798,11 +800,12 @@ expr6 .    expr6 ..       String concatenation                    *expr-.*
 For |Lists| only "+" is possible and then both expr6 must be a list.  The
 result is a new list with the two lists Concatenated.
 
-expr7 *         expr7 ..       number multiplication                   *expr-star*
-expr7 /         expr7 ..       number division                         *expr-/*
-expr7 %         expr7 ..       number modulo                           *expr-%*
+expr7 *         expr7 ..       Number multiplication                   *expr-star*
+expr7 /         expr7 ..       Number division                         *expr-/*
+expr7 %         expr7 ..       Number modulo                           *expr-%*
 
 For all, except ".", Strings are converted to Numbers.
+For bitwise operators see |and()|, |or()| and |xor()|.
 
 Note the difference between "+" and ".":
        "123" + "456" = 579
@@ -942,7 +945,8 @@ When expr8 is a |Funcref| type variable, invoke the function it refers to.
                                                        *expr9*
 number
 ------
-number                 number constant         *expr-number*
+number                 number constant                 *expr-number* 
+                                               *hex-number* *octal-number*
 
 Decimal, Hexadecimal (starting with 0x or 0X), or Octal (starting with 0).
 
@@ -1115,8 +1119,8 @@ See below |functions|.
 
 
 ==============================================================================
-3. Internal variable                           *internal-variables* *E121*
-                                                                       *E461*
+3. Internal variable                           *internal-variables* *E461*
+
 An internal variable name can be made up of letters, digits and '_'.  But it
 cannot start with a digit.  It's also possible to use curly braces, see
 |curly-braces-names|.
@@ -1146,14 +1150,14 @@ delete all script-local variables: >
        :    unlet s:[k]
        :endfor
 <
-                                               *buffer-variable* *b:var*
+                                               *buffer-variable* *b:var* *b:*
 A variable name that is preceded with "b:" is local to the current buffer.
 Thus you can have several "b:foo" variables, one for each buffer.
 This kind of variable is deleted when the buffer is wiped out or deleted with
 |:bdelete|.
 
 One local buffer variable is predefined:
-                                       *b:changedtick-variable* *changetick*
+                                       *b:changedtick* *changetick*
 b:changedtick  The total number of changes to the current buffer.  It is
                incremented for each change.  An undo command is also a change
                in this case.  This can be used to perform an action only when
@@ -1163,21 +1167,21 @@ b:changedtick   The total number of changes to the current buffer.  It is
                    :   call My_Update()
                    :endif
 <
-                                               *window-variable* *w:var*
+                                               *window-variable* *w:var* *w:*
 A variable name that is preceded with "w:" is local to the current window.  It
 is deleted when the window is closed.
 
-                                               *tabpage-variable* *t:var*
+                                               *tabpage-variable* *t:var* *t:*
 A variable name that is preceded with "t:" is local to the current tab page,
 It is deleted when the tab page is closed. {not available when compiled
 without the |+windows| feature}
 
-                                               *global-variable* *g:var*
+                                               *global-variable* *g:var* *g:*
 Inside functions global variables are accessed with "g:".  Omitting this will
 access a variable local to a function. But "g:" can also be used in any other
 place if you like.
 
-                                               *local-variable* *l:var*
+                                               *local-variable* *l:var* *l:*
 Inside functions local variables are accessed without prepending anything.
 But you can also prepend "l:" if you like.  However, without prepending "l:"
 you may run into reserved variable names.  For example "count".  By itself it
@@ -1260,7 +1264,7 @@ Note that this means that filetype plugins don't get a different set of script
 variables for each buffer.  Use local buffer variables instead |b:var|.
 
 
-Predefined Vim variables:                      *vim-variable* *v:var*
+Predefined Vim variables:                      *vim-variable* *v:var* *v:*
 
                                        *v:beval_col* *beval_col-variable*
 v:beval_col    The number of the column, over which the mouse pointer is.
@@ -1286,11 +1290,14 @@ v:beval_text    The text under or after the mouse pointer.  Usually a word as
 
                                        *v:beval_winnr* *beval_winnr-variable*
 v:beval_winnr  The number of the window, over which the mouse pointer is. Only
-               valid while evaluating the 'balloonexpr' option.
+               valid while evaluating the 'balloonexpr' option.  The first
+               window has number zero (unlike most other places where a
+               window gets a number).
 
                                        *v:char* *char-variable*
 v:char         Argument for evaluating 'formatexpr' and used for the typed
                character when using <expr> in an abbreviation |:map-<expr>|.
+               It is also used by the |InsertCharPre| and |InsertEnter| events.
 
                        *v:charconvert_from* *charconvert_from-variable*
 v:charconvert_from
@@ -1537,13 +1544,19 @@ v:profiling     Normally zero.  Set to one after using ":profile start".
 
                                        *v:progname* *progname-variable*
 v:progname     Contains the name (with path removed) with which Vim was
-               invoked.  Allows you to do special initialisations for "view",
-               "evim" etc., or any other name you might symlink to Vim.
+               invoked.  Allows you to do special initialisations for |view|,
+               |evim| etc., or any other name you might symlink to Vim.
                Read-only.
 
                                        *v:register* *register-variable*
-v:register     The name of the register supplied to the last normal mode
-               command.  Empty if none were supplied. |getreg()| |setreg()|
+v:register     The name of the register in effect for the current normal mode
+               command (regardless of whether that command actually used a
+               register).  Or for the currently executing normal mode mapping
+               (use this in custom commands that take a register).
+               If none is supplied it is the default register '"', unless
+               'clipboard' contains "unnamed" or "unnamedplus", then it is
+               '*' or '+'.
+               Also see |getreg()| and |setreg()|
 
                                        *v:scrollstart* *scrollstart-variable*
 v:scrollstart  String describing the script or function that caused the
@@ -1657,6 +1670,15 @@ v:version        Version number of Vim: Major version number times 100 plus
                                        *v:warningmsg* *warningmsg-variable*
 v:warningmsg   Last given warning message.  It's allowed to set this variable.
 
+                                       *v:windowid* *windowid-variable*
+v:windowid     When any X11 based GUI is running or when running in a
+               terminal and Vim connects to the X server (|-X|) this will be
+               set to the window ID.
+               When an MS-Windows GUI is running this will be set to the
+               window handle.
+               Otherwise the value is zero.
+               Note: for windows inside Vim use |winnr()|.
+
 ==============================================================================
 4. Builtin Functions                                   *functions*
 
@@ -1669,6 +1691,7 @@ USAGE                             RESULT  DESCRIPTION     ~
 abs( {expr})                   Float or Number  absolute value of {expr}
 acos( {expr})                  Float   arc cosine of {expr}
 add( {list}, {item})           List    append {item} to |List| {list}
+and( {expr}, {expr})           Number  bitwise AND
 append( {lnum}, {string})      Number  append {string} below line {lnum}
 append( {lnum}, {list})                Number  append lines {list} below line {lnum}
 argc()                         Number  number of files in the argument list
@@ -1693,7 +1716,7 @@ call( {func}, {arglist} [, {dict}])
                                any     call {func} with arguments {arglist}
 ceil( {expr})                  Float   round {expr} up
 changenr()                     Number  current change number
-char2nr( {expr})               Number  ASCII value of first char in {expr}
+char2nr( {expr}[, {utf8}])     Number  ASCII/UTF8 value of first char in {expr}
 cindent( {lnum})               Number  C indent for line {lnum}
 clearmatches()                 none    clear all matches
 col( {expr})                   Number  column nr of cursor or mark
@@ -1726,7 +1749,8 @@ exists( {expr})                   Number  TRUE if {expr} exists
 extend( {expr1}, {expr2} [, {expr3}])
                                List/Dict insert items of {expr2} into {expr1}
 exp( {expr})                   Float   exponential of {expr}
-expand( {expr} [, {flag}])     String  expand special keywords in {expr}
+expand( {expr} [, {nosuf} [, {list}]])
+                               any     expand special keywords in {expr}
 feedkeys( {string} [, {mode}]) Number  add key sequence to typeahead buffer
 filereadable( {file})          Number  TRUE if {file} is a readable file
 filewritable( {file})          Number  TRUE if {file} is a writable file
@@ -1748,12 +1772,13 @@ foldtext( )                     String  line displayed for closed fold
 foldtextresult( {lnum})                String  text for closed fold at {lnum}
 foreground( )                  Number  bring the Vim window to the foreground
 function( {name})              Funcref reference to function {name}
-garbagecollect( [at_exit])     none    free memory, breaking cyclic references
+garbagecollect( [{atexit}])    none    free memory, breaking cyclic references
 get( {list}, {idx} [, {def}])  any     get item {idx} from {list} or {def}
 get( {dict}, {key} [, {def}])  any     get item {key} from {dict} or {def}
 getbufline( {expr}, {lnum} [, {end}])
                                List    lines {lnum} to {end} of buffer {expr}
-getbufvar( {expr}, {varname})  any     variable {varname} in buffer {expr}
+getbufvar( {expr}, {varname} [, {def}])
+                               any     variable {varname} in buffer {expr}
 getchar( [expr])               Number  get one character from the user
 getcharmod( )                  Number  modifiers for the last typed character
 getcmdline()                   String  return the current command-line
@@ -1774,13 +1799,16 @@ getpos( {expr})                 List    position of cursor, mark, etc.
 getqflist()                    List    list of quickfix items
 getreg( [{regname} [, 1]])     String  contents of register
 getregtype( [{regname}])       String  type of register
-gettabvar( {nr}, {varname})    any     variable {varname} in tab {nr}
-gettabwinvar( {tabnr}, {winnr}, {name})
+gettabvar( {nr}, {varname} [, {def}])
+                               any     variable {varname} in tab {nr} or {def}
+gettabwinvar( {tabnr}, {winnr}, {name} [, {def}])
                                any     {name} in {winnr} in tab page {tabnr}
 getwinposx()                   Number  X coord in pixels of GUI Vim window
 getwinposy()                   Number  Y coord in pixels of GUI Vim window
-getwinvar( {nr}, {varname})    any     variable {varname} in window {nr}
-glob( {expr} [, {flag}])       String  expand file wildcards in {expr}
+getwinvar( {nr}, {varname} [, {def}])
+                               any     variable {varname} in window {nr}
+glob( {expr} [, {nosuf} [, {list}]])
+                               any     expand file wildcards in {expr}
 globpath( {path}, {expr} [, {flag}])
                                String  do glob({expr}) for all dirs in {path}
 has( {feature})                        Number  TRUE if feature {feature} supported
@@ -1807,6 +1835,7 @@ inputrestore()                    Number  restore typeahead
 inputsave()                    Number  save and clear typeahead
 inputsecret( {prompt} [, {text}]) String  like input() but hiding the text
 insert( {list}, {item} [, {idx}]) List insert {item} in {list} [before {idx}]
+invert( {expr})                        Number  bitwise invert
 isdirectory( {directory})      Number  TRUE if {directory} is a directory
 islocked( {expr})              Number  TRUE if {expr} is locked
 items( {dict})                 List    key-value pairs in {dict}
@@ -1821,9 +1850,11 @@ lispindent( {lnum})              Number  Lisp indent for line {lnum}
 localtime()                    Number  current time
 log( {expr})                   Float   natural logarithm (base e) of {expr}
 log10( {expr})                 Float   logarithm of Float {expr} to base 10
+luaeval( {expr}[, {expr}])     any     evaluate |Lua| expression
 map( {expr}, {string})         List/Dict  change each item in {expr} to {expr}
-maparg( {name}[, {mode} [, {abbr}]])
-                               String  rhs of mapping {name} in mode {mode}
+maparg( {name}[, {mode} [, {abbr} [, {dict}]]])
+                               String or Dict
+                                       rhs of mapping {name} in mode {mode}
 mapcheck( {name}[, {mode} [, {abbr}]])
                                String  check for mappings matching {name}
 match( {expr}, {pat}[, {start}[, {count}]])
@@ -1845,12 +1876,15 @@ mkdir( {name} [, {path} [, {prot}]])
 mode( [expr])                  String  current editing mode
 mzeval( {expr})                        any     evaluate |MzScheme| expression
 nextnonblank( {lnum})          Number  line nr of non-blank line >= {lnum}
-nr2char( {expr})               String  single char with ASCII value {expr}
+nr2char( {expr}[, {utf8}])     String  single char with ASCII/UTF8 value {expr}
+or( {expr}, {expr})            Number  bitwise OR
 pathshorten( {expr})           String  shorten directory names in a path
 pow( {x}, {y})                 Float   {x} to the power of {y}
 prevnonblank( {lnum})          Number  line nr of non-blank line <= {lnum}
 printf( {fmt}, {expr1}...)     String  format text
 pumvisible()                   Number  whether popup menu is visible
+pyeval( {expr})                        any     evaluate |Python| expression
+py3eval( {expr})               any     evaluate |python3| expression
 range( {expr} [, {max} [, {stride}]])
                                List    items from {expr} to {max}
 readfile( {fname} [, {binary} [, {max}]])
@@ -1872,6 +1906,10 @@ repeat( {expr}, {count}) String  repeat {expr} {count} times
 resolve( {filename})           String  get filename a shortcut points to
 reverse( {list})               List    reverse {list} in-place
 round( {expr})                 Float   round off {expr}
+screenattr( {row}, {col})      Number  attribute at screen position
+screenchar( {row}, {col})      Number  character at screen position
+screencol()                    Number  current cursor column
+screenrow()                    Number  current cursor row
 search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
                                Number  search for {pattern}
 searchdecl( {name} [, {global} [, {thisblock}]])
@@ -1898,20 +1936,23 @@ settabvar( {nr}, {varname}, {val})      set {varname} in tab page {nr} to {val}
 settabwinvar( {tabnr}, {winnr}, {varname}, {val})    set {varname} in window
                                        {winnr} in tab page {tabnr} to {val}
 setwinvar( {nr}, {varname}, {val})     set {varname} in window {nr} to {val}
+sha256( {string})              String  SHA256 checksum of {string}
 shellescape( {string} [, {special}])
                                String  escape {string} for use as shell
                                        command argument
+shiftwidth()                   Number  effective value of 'shiftwidth'
 simplify( {filename})          String  simplify filename as much as possible
 sin( {expr})                   Float   sine of {expr}
 sinh( {expr})                  Float   hyperbolic sine of {expr}
-sort( {list} [, {func}])       List    sort {list}, using {func} to compare
+sort( {list} [, {func} [, {dict}]])
+                               List    sort {list}, using {func} to compare
 soundfold( {word})             String  sound-fold {word}
 spellbadword()                 String  badly spelled word at cursor
 spellsuggest( {word} [, {max} [, {capital}]])
                                List    spelling suggestions
 split( {expr} [, {pat} [, {keepempty}]])
                                List    make |List| from {pat} separated {expr}
-sqrt( {expr}                   Float   squar root of {expr}
+sqrt( {expr})                  Float   square root of {expr}
 str2float( {expr})             Float   convert String to Float
 str2nr( {expr} [, {base}])     Number  convert String to Number
 strchars( {expr})              Number  character length of the String {expr}
@@ -1927,13 +1968,14 @@ strridx( {haystack}, {needle} [, {start}])
                                Number  last index of {needle} in {haystack}
 strtrans( {expr})              String  translate string to make it printable
 strwidth( {expr})              Number  display cell length of the String {expr}
-submatch( {nr})                        String  specific match in ":substitute"
+submatch( {nr})                        String  specific match in ":s" or substitute()
 substitute( {expr}, {pat}, {sub}, {flags})
                                String  all {pat} in {expr} replaced with {sub}
 synID( {lnum}, {col}, {trans}) Number  syntax ID at {lnum} and {col}
 synIDattr( {synID}, {what} [, {mode}])
                                String  attribute {what} of syntax ID {synID}
 synIDtrans( {synID})           Number  translated syntax ID of {synID}
+synconcealed( {lnum}, {col})   List    info about concealing
 synstack( {lnum}, {col})       List    stack of syntax IDs at {lnum} and {col}
 system( {expr} [, {input}])    String  output of shell command/filter {expr}
 tabpagebuflist( [{arg}])       List    list of buffer numbers in tab page
@@ -1949,13 +1991,14 @@ tolower( {expr})                String  the String {expr} switched to lowercase
 toupper( {expr})               String  the String {expr} switched to uppercase
 tr( {src}, {fromstr}, {tostr}) String  translate chars of {src} in {fromstr}
                                        to chars in {tostr}
-trunc( {expr}                  Float   truncate Float {expr}
+trunc( {expr})                 Float   truncate Float {expr}
 type( {name})                  Number  type of variable {name}
 undofile( {name})              String  undo file name for {name}
 undotree()                     List    undo file tree
 values( {dict})                        List    values in {dict}
 virtcol( {expr})               Number  screen column of cursor or mark
 visualmode( [expr])            String  last visual mode used
+wildmenumode()                 Number  whether 'wildmenu' mode is active
 winbufnr( {nr})                        Number  buffer number of window {nr}
 wincol()                       Number  window column of the cursor
 winheight( {nr})               Number  height of window {nr}
@@ -1967,6 +2010,7 @@ winsaveview()                     Dict    save view of current window
 winwidth( {nr})                        Number  width of window {nr}
 writefile( {list}, {fname} [, {binary}])
                                Number  write list of lines to file {fname}
+xor( {expr}, {expr})           Number  bitwise XOR
 
 abs({expr})                                                    *abs()*
                Return the absolute value of {expr}.  When {expr} evaluates to
@@ -2006,6 +2050,13 @@ add({list}, {expr})                                      *add()*
                Use |insert()| to add an item at another position.
 
 
+and({expr}, {expr})                                    *and()*
+               Bitwise AND on the two arguments.  The arguments are converted
+               to a number.  A List, Dict or Float argument causes an error.
+               Example: >
+                       :let flag = and(bits, 0x80)
+
+
 append({lnum}, {expr})                                 *append()*
                When {expr} is a |List|: Append each item of the |List| as a
                text line below line {lnum} in the current buffer.
@@ -2250,14 +2301,17 @@ changenr()                                              *changenr()*
                redo it is the number of the redone change.  After undo it is
                one less than the number of the undone change.
 
-char2nr({expr})                                                *char2nr()*
+char2nr({expr}[, {utf8}])                                      *char2nr()*
                Return number value of the first char in {expr}.  Examples: >
                        char2nr(" ")            returns 32
                        char2nr("ABC")          returns 65
-<              The current 'encoding' is used.  Example for "utf-8": >
+<              When {utf8} is omitted or zero, the current 'encoding' is used.
+               Example for "utf-8": >
                        char2nr("á")            returns 225
                        char2nr("á"[0])         returns 195
-<              |nr2char()| does the opposite.
+<              With {utf8} set to 1, always treat as utf-8 characters.
+               A combining character is a separate character.
+               |nr2char()| does the opposite.
 
 cindent({lnum})                                                *cindent()*
                Get the amount of indent for line {lnum} according the C
@@ -2277,7 +2331,7 @@ col({expr})       The result is a Number, which is the byte index of the column
                position given with {expr}.  The accepted positions are:
                    .       the cursor position
                    $       the end of the cursor line (the result is the
-                           number of characters in the cursor line plus one)
+                           number of bytes in the cursor line plus one)
                    'x      position of mark x (if the mark is not set, 0 is
                            returned)
                Additionally {expr} can be [lnum, col]: a |List| with the line
@@ -2531,6 +2585,8 @@ delete({fname})                                                   *delete()*
                which is 0 if the file was deleted successfully, and non-zero
                when the deletion failed.
                Use |remove()| to delete an item from a |List|.
+               To delete a line from the buffer use |:delete|.  Use |:exe|
+               when the line number is in a variable.
 
                                                        *did_filetype()*
 did_filetype() Returns non-zero when autocommands are being executed and the
@@ -2708,16 +2764,19 @@ exp({expr})                                             *exp()*
                {only available when compiled with the |+float| feature}
 
 
-expand({expr} [, {flag}])                              *expand()*
+expand({expr} [, {nosuf} [, {list}]])                          *expand()*
                Expand wildcards and the following special keywords in {expr}.
-               The result is a String.
+               'wildignorecase' applies.
 
-               When there are several matches, they are separated by <NL>
-               characters.  [Note: in version 5.0 a space was used, which
-               caused problems when a file name contains a space]
+               If {list} is given and it is non-zero, a List will be returned.
+               Otherwise the result is a String and when there are several
+               matches, they are separated by <NL> characters.  [Note: in
+               version 5.0 a space was used, which caused problems when a
+               file name contains a space]
 
                If the expansion fails, the result is an empty string.  A name
-               for a non-existing file is not included.
+               for a non-existing file is not included, unless {expr} does
+               not start with '%', '#' or '<', see below.
 
                When {expr} starts with '%', '#' or '<', the expansion is done
                like for the |cmdline-special| variables with their associated
@@ -2731,6 +2790,7 @@ expand({expr} [, {flag}])                         *expand()*
                        <abuf>          autocmd buffer number (as a String!)
                        <amatch>        autocmd matched name
                        <sfile>         sourced script file name
+                       <slnum>         sourced script file line number
                        <cword>         word under the cursor
                        <cWORD>         WORD under the cursor
                        <client>        the {clientid} of the last received
@@ -2767,10 +2827,10 @@ expand({expr} [, {flag}])                               *expand()*
                When {expr} does not start with '%', '#' or '<', it is
                expanded like a file name is expanded on the command line.
                'suffixes' and 'wildignore' are used, unless the optional
-               {flag} argument is given and it is non-zero.  Names for
-               non-existing files are included.  The "**" item can be used to
-               search in a directory tree.  For example, to find all "README"
-               files in the current directory and below: >
+               {nosuf} argument is given and it is non-zero.
+               Names for non-existing files are included.  The "**" item can
+               be used to search in a directory tree.  For example, to find
+               all "README" files in the current directory and below: >
                        :echo expand("**/README")
 <
                Expand() can also be used to expand variables and environment
@@ -3043,7 +3103,7 @@ function({name})                                  *function()* *E700*
                {name} can be a user defined function or an internal function.
 
 
-garbagecollect([at_exit])                              *garbagecollect()*
+garbagecollect([{atexit}])                             *garbagecollect()*
                Cleanup unused |Lists| and |Dictionaries| that have circular
                references.  There is hardly ever a need to invoke this
                function, as it is automatically done when Vim runs out of
@@ -3053,7 +3113,7 @@ garbagecollect([at_exit])                         *garbagecollect()*
                This is useful if you have deleted a very big |List| and/or
                |Dictionary| with circular references in a script that runs
                for a long time.
-               When the optional "at_exit" argument is one, garbage
+               When the optional {atexit} argument is one, garbage
                collection will also be done when exiting Vim, if it wasn't
                done before.  This is useful when checking for memory leaks.
 
@@ -3091,7 +3151,7 @@ getbufline({expr}, {lnum} [, {end}])
                Example: >
                        :let lines = getbufline(bufnr("myfile"), 1, "$")
 
-getbufvar({expr}, {varname})                           *getbufvar()*
+getbufvar({expr}, {varname} [, {def}])                         *getbufvar()*
                The result is the value of option or local buffer variable
                {varname} in buffer {expr}.  Note that the name without "b:"
                must be used.
@@ -3101,8 +3161,8 @@ getbufvar({expr}, {varname})                              *getbufvar()*
                doesn't work for a global variable, window-local variable or
                window-local option.
                For the use of {expr}, see |bufname()| above.
-               When the buffer or variable doesn't exist an empty string is
-               returned, there is no error message.
+               When the buffer or variable doesn't exist {def} or an empty
+               string is returned, there is no error message.
                Examples: >
                        :let bufmodified = getbufvar(1, "&mod")
                        :echo "todo myvar = " . getbufvar("todo", "myvar")
@@ -3129,6 +3189,8 @@ getchar([expr])                                           *getchar()*
                one-byte character it is the character itself as a number.
                Use nr2char() to convert it to a String.
 
+               Use getcharmod() to obtain any additional modifiers.
+
                When the user clicks a mouse button, the mouse event will be
                returned.  The position can then be found in |v:mouse_col|,
                |v:mouse_lnum| and |v:mouse_win|.  This example positions the
@@ -3167,10 +3229,11 @@ getcharmod()                                            *getcharmod()*
                        2       shift
                        4       control
                        8       alt (meta)
-                       16      mouse double click
-                       32      mouse triple click
-                       64      mouse quadruple click
-                       128     Macintosh only: command
+                       16      meta (when it's different from ALT)
+                       32      mouse double click
+                       64      mouse triple click
+                       96      mouse quadruple click (== 32 + 64)
+                       128     command (Macintosh only)
                Only the modifiers that have not been included in the
                character itself are obtained.  Thus Shift-a results in "A"
                without a modifier.
@@ -3187,7 +3250,8 @@ getcmdpos()                                               *getcmdpos()*
                Return the position of the cursor in the command line as a
                byte count.  The first column is 1.
                Only works when editing the command line, thus requires use of
-               |c_CTRL-\_e| or |c_CTRL-R_=|.  Returns 0 otherwise.
+               |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
+               Returns 0 otherwise.
                Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
 
 getcmdtype()                                           *getcmdtype()*
@@ -3200,8 +3264,8 @@ getcmdtype()                                              *getcmdtype()*
                    @   |input()| command
                    -   |:insert| or |:append| command
                Only works when editing the command line, thus requires use of
-               |c_CTRL-\_e| or |c_CTRL-R_=|.  Returns an empty string
-               otherwise.
+               |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
+               Returns an empty string otherwise.
                Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
 
                                                        *getcwd()*
@@ -3239,8 +3303,9 @@ getfperm({fname})                                 *getfperm()*
                "rwx" flags represent, in turn, the permissions of the owner
                of the file, the group the file belongs to, and other users.
                If a user does not have a given permission the flag for this
-               is replaced with the string "-".  Example: >
+               is replaced with the string "-".  Examples: >
                        :echo getfperm("/etc/passwd")
+                       :echo getfperm(expand("~/.vimrc"))
 <              This will hopefully (from a security point of view) display
                the string "rw-r--r--" or even "rw-------".
 
@@ -3374,26 +3439,30 @@ getregtype([{regname}])                                 *getregtype()*
                <CTRL-V> is one character with value 0x16.
                If {regname} is not specified, |v:register| is used.
 
-gettabvar({tabnr}, {varname})                          *gettabvar()*
+gettabvar({tabnr}, {varname} [, {def}])                                *gettabvar()*
                Get the value of a tab-local variable {varname} in tab page
                {tabnr}. |t:var|
                Tabs are numbered starting with one.
                Note that the name without "t:" must be used.
+               When the tab or variable doesn't exist {def} or an empty
+               string is returned, there is no error message.
 
-gettabwinvar({tabnr}, {winnr}, {varname})              *gettabwinvar()*
+gettabwinvar({tabnr}, {winnr}, {varname} [, {def}])            *gettabwinvar()*
                Get the value of window-local variable {varname} in window
                {winnr} in tab page {tabnr}.
                When {varname} starts with "&" get the value of a window-local
                option.
+               When {varname} is empty a dictionary with all window-local
+               variables is returned.
+               Note that {varname} must be the name without "w:".
                Tabs are numbered starting with one.  For the current tabpage
                use |getwinvar()|.
                When {winnr} is zero the current window is used.
                This also works for a global option, buffer-local option and
                window-local option, but it doesn't work for a global variable
                or buffer-local variable.
-               When {varname} is empty a dictionary with all window-local
-               variables is returned.
-               Note that {varname} must be the name without "w:".
+               When the tab, window or variable doesn't exist {def} or an
+               empty string is returned, there is no error message.
                Examples: >
                        :let list_is_on = gettabwinvar(1, 2, '&list')
                        :echo "myvar = " . gettabwinvar(3, 1, 'myvar')
@@ -3408,24 +3477,31 @@ getwinposy()    The result is a Number, which is the Y coordinate in pixels of
                the top of the GUI Vim window.  The result will be -1 if the
                information is not available.
 
-getwinvar({winnr}, {varname})                          *getwinvar()*
+getwinvar({winnr}, {varname} [, {def}])                                *getwinvar()*
                Like |gettabwinvar()| for the current tabpage.
                Examples: >
                        :let list_is_on = getwinvar(2, '&list')
                        :echo "myvar = " . getwinvar(1, 'myvar')
 <
-glob({expr} [, {flag}])                                        *glob()*
+glob({expr} [, {nosuf} [, {list}]])                            *glob()*
                Expand the file wildcards in {expr}.  See |wildcards| for the
                use of special characters.
-               The result is a String.
-               When there are several matches, they are separated by <NL>
-               characters.
-               Unless the optional {flag} argument is given and is non-zero,
+
+               Unless the optional {nosuf} argument is given and is non-zero,
                the 'suffixes' and 'wildignore' options apply: Names matching
                one of the patterns in 'wildignore' will be skipped and
                'suffixes' affect the ordering of matches.
-               If the expansion fails, the result is an empty string.
-               A name for a non-existing file is not included.
+               'wildignorecase' always applies.
+
+               When {list} is present and it is non-zero the result is a List
+               with all matching files. The advantage of using a List is,
+               you also get filenames containing newlines correctly.
+               Otherwise the result is a String and when there are several
+               matches, they are separated by <NL> characters.
+
+               If the expansion fails, the result is an empty String or List.
+               A name for a non-existing file is not included.  A symbolic
+               link is only included if it points to an existing file.
 
                For most systems backticks can be used to get files names from
                any external command.  Example: >
@@ -3511,6 +3587,9 @@ histadd({history}, {item})                                *histadd()*
                        "search" or "/"   search pattern history
                        "expr"   or "="   typed expression history
                        "input"  or "@"   input line history
+                       "debug"  or ">"   debug command history
+               The {history} string does not need to be the whole name, one
+               character is sufficient.
                If {item} does already exist in the history, it will be
                shifted to become the newest entry.
                The result is a Number: 1 if the operation was successful,
@@ -3694,10 +3773,10 @@ inputdialog({prompt} [, {text} [, {cancelreturn}]])             *inputdialog()*
                Like |input()|, but when the GUI is running and text dialogs
                are supported, a dialog window pops up to input the text.
                Example: >
-                       :let n = inputdialog("value for shiftwidth", &sw)
-                       :if n != ""
-                       :  let &sw = n
-                       :endif
+                  :let n = inputdialog("value for shiftwidth", shiftwidth())
+                  :if n != ""
+                  :  let &sw = n
+                  :endif
 <              When the dialog is cancelled {cancelreturn} is returned.  When
                omitted an empty string is returned.
                Hitting <Enter> works like pressing the OK button.  Hitting
@@ -3759,6 +3838,11 @@ insert({list}, {item} [, {idx}])                 *insert()*
                Note that when {item} is a |List| it is inserted as a single
                item.  Use |extend()| to concatenate |Lists|.
 
+invert({expr})                                         *invert()*
+               Bitwise invert.  The argument is converted to a number.  A
+               List, Dict or Float argument causes an error.  Example: >
+                       :let bits = invert(bits)
+
 isdirectory({directory})                               *isdirectory()*
                The result is a Number, which is non-zero when a directory
                with the name {directory} exists.  If {directory} doesn't
@@ -3897,11 +3981,12 @@ line2byte({lnum})                                       *line2byte()*
                Return the byte count from the start of the buffer for line
                {lnum}.  This includes the end-of-line character, depending on
                the 'fileformat' option for the current buffer.  The first
-               line returns 1.
+               line returns 1. 'encoding' matters, 'fileencoding' is ignored.
                This can also be used to get the byte count for the line just
                below the last line: >
                        line2byte(line("$") + 1)
-<              This is the file size plus one.
+<              This is the buffer size plus one.  If 'fileencoding' is empty
+               it is the file size plus one.
                When {lnum} is invalid, or the |+byte_offset| feature has been
                disabled at compile time, -1 is returned.
                Also see |byte2line()|, |go| and |:goto|.
@@ -3941,6 +4026,20 @@ log10({expr})                                            *log10()*
 <                      -2.0
                {only available when compiled with the |+float| feature}
                
+luaeval({expr}[, {expr}])                                      *luaeval()*
+               Evaluate Lua expression {expr} and return its result converted 
+               to Vim data structures. Second {expr} may hold additional 
+               argument accessible as _A inside first {expr}.
+               Strings are returned as they are.
+               Boolean objects are converted to numbers.
+               Numbers are converted to |Float| values if vim was compiled 
+               with |+float| and to numbers otherwise.
+               Dictionaries and lists obtained by vim.eval() are returned 
+               as-is.
+               Other objects are returned as zero without any errors.
+               See |lua-luaeval| for more details.
+               {only available when compiled with the |+lua| feature}
+
 map({expr}, {string})                                  *map()*
                {expr} must be a |List| or a |Dictionary|.
                Replace each item in {expr} with the result of evaluating
@@ -3959,30 +4058,58 @@ map({expr}, {string})                                   *map()*
 
                The operation is done in-place.  If you want a |List| or
                |Dictionary| to remain unmodified make a copy first: >
-                       :let tlist = map(copy(mylist), ' & . "\t"')
+                       :let tlist = map(copy(mylist), ' v:val . "\t"')
 
 <              Returns {expr}, the |List| or |Dictionary| that was filtered.
                When an error is encountered while evaluating {string} no
                further items in {expr} are processed.
 
 
-maparg({name}[, {mode} [, {abbr}]])                    *maparg()*
-               Return the rhs of mapping {name} in mode {mode}.  When there
-               is no mapping for {name}, an empty String is returned.
+maparg({name}[, {mode} [, {abbr} [, {dict}]]])                 *maparg()*
+               When {dict} is omitted or zero: Return the rhs of mapping
+               {name} in mode {mode}.  The returned String has special
+               characters translated like in the output of the ":map" command
+               listing.
+               
+               When there is no mapping for {name}, an empty String is
+               returned.
+
+               The {name} can have special key names, like in the ":map"
+               command.
+
                {mode} can be one of these strings:
                        "n"     Normal
-                       "v"     Visual
+                       "v"     Visual (including Select)
                        "o"     Operator-pending
                        "i"     Insert
                        "c"     Cmd-line
+                       "s"     Select
+                       "x"     Visual
                        "l"     langmap |language-mapping|
                        ""      Normal, Visual and Operator-pending
                When {mode} is omitted, the modes for "" are used.
+
                When {abbr} is there and it is non-zero use abbreviations
                instead of mappings.
-               The {name} can have special key names, like in the ":map"
-               command.  The returned String has special characters
-               translated like in the output of the ":map" command listing.
+
+               When {dict} is there and it is non-zero return a dictionary
+               containing all the information of the mapping with the
+               following items:
+                 "lhs"      The {lhs} of the mapping.
+                 "rhs"      The {rhs} of the mapping as typed.
+                 "silent"   1 for a |:map-silent| mapping, else 0.
+                 "noremap"  1 if the {rhs} of the mapping is not remappable.
+                 "expr"     1 for an expression mapping (|:map-<expr>|).
+                 "buffer"   1 for a buffer local mapping (|:map-local|).
+                 "mode"     Modes for which the mapping is defined. In
+                            addition to the modes mentioned above, these
+                            characters will be used:
+                            " "     Normal, Visual and Operator-pending
+                            "!"     Insert and Commandline mode
+                                    (|mapmode-ic|)
+                 "sid"      The script local ID, used for <sid> mappings
+                            (|<SID>|).
+
                The mappings local to the current buffer are checked first,
                then the global mappings.
                This function can be used to map a key even when it's already
@@ -4031,6 +4158,7 @@ match({expr}, {pat}[, {start}[, {count}]])                        *match()*
                {pat} matches.
                A match at the first character or |List| item returns zero.
                If there is no match -1 is returned.
+               For getting submatches see |matchlist()|.
                Example: >
                        :echo match("testing", "ing")   " results in 4
                        :echo match([1, 'x'], '\a')     " results in 1
@@ -4236,7 +4364,7 @@ mode([expr])      Return a string that indicates the current mode.
 
 mzeval({expr})                                                 *mzeval()*
                Evaluate MzScheme expression {expr} and return its result
-               convert to Vim data structures.
+               converted to Vim data structures.
                Numbers and strings are returned as they are.
                Pairs (including lists and improper lists) and vectors are
                returned as Vim |Lists|.
@@ -4259,14 +4387,16 @@ nextnonblank({lnum})                                    *nextnonblank()*
                below it, zero is returned.
                See also |prevnonblank()|.
 
-nr2char({expr})                                                *nr2char()*
+nr2char({expr}[, {utf8}])                              *nr2char()*
                Return a string with a single character, which has the number
                value {expr}.  Examples: >
                        nr2char(64)             returns "@"
                        nr2char(32)             returns " "
-<              The current 'encoding' is used.  Example for "utf-8": >
+<              When {utf8} is omitted or zero, the current 'encoding' is used.
+               Example for "utf-8": >
                        nr2char(300)            returns I with bow character
-<              Note that a NUL character in the file is specified with
+<              With {utf8} set to 1, always return utf-8 characters.
+               Note that a NUL character in the file is specified with
                nr2char(10), because NULs are represented with newline
                characters.  nr2char(0) is a real NUL and terminates the
                string, thus results in an empty string.
@@ -4295,6 +4425,13 @@ getpos({expr})   Get the position for {expr}.  For possible values of {expr}
                        call setpos('.', save_cursor)
 <              Also see |setpos()|.
 
+or({expr}, {expr})                                     *or()*
+               Bitwise OR on the two arguments.  The arguments are converted
+               to a number.  A List, Dict or Float argument causes an error.
+               Example: >
+                       :let bits = or(bits, 0x80)
+
+
 pathshorten({expr})                                    *pathshorten()*
                Shorten directory names in the path {expr} and return the
                result.  The tail, the file name, is kept as-is.  The other
@@ -4334,6 +4471,7 @@ printf({fmt}, {expr1} ...)                                *printf()*
 
                Often used items are:
                  %s    string
+                 %6S   string right-aligned in 6 display cells
                  %6s   string right-aligned in 6 bytes
                  %.9s  string truncated to 9 bytes
                  %c    single byte
@@ -4448,6 +4586,10 @@ printf({fmt}, {expr1} ...)                               *printf()*
                s       The text of the String argument is used.  If a
                        precision is specified, no more bytes than the number
                        specified are used.
+               S       The text of the String argument is used.  If a
+                       precision is specified, no more display cells than the
+                       number specified are used.  Without the |+multi_byte|
+                       feature works just like 's'.
 
                                                        *printf-f* *E807*
                f       The Float argument is converted into a string of the 
@@ -4500,6 +4642,29 @@ pumvisible()                                             *pumvisible()*
                This can be used to avoid some things that would remove the
                popup menu.
 
+                                                       *E860*
+py3eval({expr})                                                *py3eval()*
+               Evaluate Python expression {expr} and return its result
+               converted to Vim data structures.
+               Numbers and strings are returned as they are (strings are 
+               copied though, unicode strings are additionally converted to 
+               'encoding').
+               Lists are represented as Vim |List| type.
+               Dictionaries are represented as Vim |Dictionary| type with 
+               keys converted to strings.
+               {only available when compiled with the |+python3| feature}
+
+                                                       *E858* *E859*
+pyeval({expr})                                         *pyeval()*
+               Evaluate Python expression {expr} and return its result
+               converted to Vim data structures.
+               Numbers and strings are returned as they are (strings are 
+               copied though).
+               Lists are represented as Vim |List| type.
+               Dictionaries are represented as Vim |Dictionary| type, 
+               non-string keys result in error.
+               {only available when compiled with the |+python| feature}
+
                                                        *E726* *E727*
 range({expr} [, {max} [, {stride}]])                           *range()*
                Returns a |List| with Numbers:
@@ -4727,12 +4892,50 @@ round({expr})                                                   *round()*
                        echo round(-4.5)
 <                      -5.0
                {only available when compiled with the |+float| feature}
-               
-               
+
+screenattr(row, col)                                           *screenattr()*
+               Like screenchar(), but return the attribute.  This is a rather
+               arbitrary number that can only be used to compare to the
+               attribute at other positions.
+
+screenchar(row, col)                                           *screenchar()*
+               The result is a Number, which is the character at position
+               [row, col] on the screen.  This works for every possible
+               screen position, also status lines, window separators and the
+               command line.  The top left position is row one, column one
+               The character excludes composing characters.  For double-byte
+               encodings it may only be the first byte.
+               This is mainly to be used for testing.
+               Returns -1 when row or col is out of range.
+
+screencol()                                                    *screencol()*
+               The result is a Number, which is the current screen column of
+               the cursor. The leftmost column has number 1.
+               This function is mainly used for testing.
+
+               Note: Always returns the current screen column, thus if used
+               in a command (e.g. ":echo screencol()") it will return the
+               column inside the command line, which is 1 when the command is
+               executed. To get the cursor position in the file use one of
+               the following mappings: >
+                       nnoremap <expr> GG ":echom ".screencol()."\n"
+                       nnoremap <silent> GG :echom screencol()<CR>
+<
+screenrow()                                                    *screenrow()*
+               The result is a Number, which is the current screen row of the
+               cursor.  The top line has number one.
+               This function is mainly used for testing.
+
+               Note: Same restrictions as with |screencol()|.
+
 search({pattern} [, {flags} [, {stopline} [, {timeout}]]])     *search()*
                Search for regexp pattern {pattern}.  The search starts at the
                cursor position (you can use |cursor()| to set it).
 
+               When a match has been found its line number is returned.
+               If there is no match a 0 is returned and the cursor doesn't
+               move.  No error message is given.
+
                {flags} is a String, which can contain these character flags:
                'b'     search backward instead of forward
                'c'     accept a match at the cursor position
@@ -4760,15 +4963,12 @@ search({pattern} [, {flags} [, {stopline} [, {timeout}]]])      *search()*
                A zero value is equal to not giving the argument.
 
                When the {timeout} argument is given the search stops when
-               more than this many milli seconds have passed.  Thus when
+               more than this many milliseconds have passed.   Thus when
                {timeout} is 500 the search stops after half a second.
                The value must not be negative.  A zero value is like not
                giving the argument.
                {only available when compiled with the |+reltime| feature}
 
-               If there is no match a 0 is returned and the cursor doesn't
-               move.  No error message is given.
-               When a match has been found its line number is returned.
                                                        *search()-sub-match*
                With the 'p' flag the returned value is one more than the
                first sub-match in \(\).  One if none of them matched but the
@@ -4987,7 +5187,8 @@ setcmdpos({pos})                                  *setcmdpos()*
                line.
 
 setline({lnum}, {text})                                        *setline()*
-               Set line {lnum} of the current buffer to {text}.
+               Set line {lnum} of the current buffer to {text}.  To insert
+               lines use |append()|.
                {lnum} is used like with |getline()|.
                When {lnum} is just below the last line the {text} will be
                added as a new line.
@@ -4998,7 +5199,7 @@ setline({lnum}, {text})                                   *setline()*
                will be set to the items in the list.  Example: >
                        :call setline(5, ['aaa', 'bbb', 'ccc'])
 <              This is equivalent to: >
-                       :for [n, l] in [[5, 6, 7], ['aaa', 'bbb', 'ccc']]
+                       :for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']]
                        :  call setline(n, l)
                        :endfor
 <              Note: The '[ and '] marks are not set.
@@ -5112,8 +5313,9 @@ setreg({regname}, {value} [,{options}])
 
                If {options} contains no register settings, then the default
                is to use character mode unless {value} ends in a <NL>.
-               Setting the '=' register is not possible.
-               Returns zero for success, non-zero for failure.
+               Setting the '=' register is not possible, but you can use >
+                       :let @= = var_expr
+<              Returns zero for success, non-zero for failure.
 
                Examples: >
                        :call setreg(v:register, @*)
@@ -5136,8 +5338,6 @@ settabvar({tabnr}, {varname}, {val})                      *settabvar()*
                |t:var|
                Note that the variable name without "t:" must be used.
                Tabs are numbered starting with one.
-               Vim briefly goes to the tab page {tabnr}, this may trigger
-               TabLeave and TabEnter autocommands.
                This function is not available in the |sandbox|.
 
 settabwinvar({tabnr}, {winnr}, {varname}, {val})       *settabwinvar()*
@@ -5150,8 +5350,6 @@ settabwinvar({tabnr}, {winnr}, {varname}, {val})  *settabwinvar()*
                doesn't work for a global or local buffer variable.
                For a local buffer option the global value is unchanged.
                Note that the variable name without "w:" must be used.
-               Vim briefly goes to the tab page {tabnr}, this may trigger
-               TabLeave and TabEnter autocommands.
                Examples: >
                        :call settabwinvar(1, 1, "&list", 0)
                        :call settabwinvar(3, 2, "myvar", "foobar")
@@ -5163,6 +5361,11 @@ setwinvar({nr}, {varname}, {val})                        *setwinvar()*
                        :call setwinvar(1, "&list", 0)
                        :call setwinvar(2, "myvar", "foobar")
 
+sha256({string})                                               *sha256()*
+               Returns a String with 64 hex charactes, which is the SHA256
+               checksum of {string}.
+               {only available when compiled with the |+cryptv| feature}
+
 shellescape({string} [, {special}])                    *shellescape()*
                Escape {string} for use as a shell command argument.
                On MS-Windows and MS-DOS, when 'shellslash' is not set, it
@@ -5189,6 +5392,23 @@ shellescape({string} [, {special}])                      *shellescape()*
                    :call system("chmod +w -- " . shellescape(expand("%")))
 
 
+shiftwidth()                                           *shiftwidth()*
+               Returns the effective value of 'shiftwidth'. This is the
+               'shiftwidth' value unless it is zero, in which case it is the
+               'tabstop' value.  To be backwards compatible in indent
+               plugins, use this: >
+                       if exists('*shiftwidth')
+                         func s:sw()
+                           return shiftwidth()
+                         endfunc
+                       else
+                         func s:sw()
+                           return &sw
+                         endfunc
+                       endif
+<              And then use s:sw() instead of &sw.
+
+
 simplify({filename})                                   *simplify()*
                Simplify the file name as much as possible without changing
                the meaning.  Shortcuts (on MS-Windows) or symbolic links (on
@@ -5228,7 +5448,7 @@ sinh({expr})                                              *sinh()*
                {only available when compiled with the |+float| feature}
 
 
-sort({list} [, {func}])                                        *sort()* *E702*
+sort({list} [, {func} [, {dict}]])                     *sort()* *E702*
                Sort the items in {list} in-place.  Returns {list}.  If you
                want a list to remain unmodified make a copy first: >
                        :let sortedlist = sort(copy(mylist))
@@ -5236,6 +5456,8 @@ sort({list} [, {func}])                                   *sort()* *E702*
                Numbers sort after Strings, |Lists| after Numbers.
                For sorting text in the current buffer use |:sort|.
                When {func} is given and it is one then case is ignored.
+               {dict} is for functions with the "dict" attribute.  It will be
+               used to set the local variable "self". |Dictionary-function|
                When {func} is a |Funcref| or a function name, this function
                is called to compare items.  The function is invoked with two
                items as argument and must return zero if they are equal, 1 or
@@ -5316,7 +5538,8 @@ split({expr} [, {pattern} [, {keepempty}]])                       *split()*
                empty each white-separated sequence of characters becomes an
                item.
                Otherwise the string is split where {pattern} matches,
-               removing the matched characters.
+               removing the matched characters. 'ignorecase' is not used
+               here, add \c to ignore case. |/\c|
                When the first or last item is empty it is omitted, unless the
                {keepempty} argument is given and it's non-zero.
                Other empty items are kept when {pattern} matches at least one
@@ -5416,8 +5639,8 @@ stridx({haystack}, {needle} [, {start}])          *stridx()*
                {haystack} of the first occurrence of the String {needle}.
                If {start} is specified, the search starts at index {start}.
                This can be used to find a second match: >
-                       :let comma1 = stridx(line, ",")
-                       :let comma2 = stridx(line, ",", comma1 + 1)
+                       :let colon1 = stridx(line, ":")
+                       :let colon2 = stridx(line, ":", colon1 + 1)
 <              The search is done case-sensitive.
                For pattern searches use |match()|.
                -1 is returned if the {needle} does not occur in {haystack}.
@@ -5507,9 +5730,11 @@ strwidth({expr})                                 *strwidth()*
                Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
 
 submatch({nr})                                         *submatch()*
-               Only for an expression in a |:substitute| command.  Returns
-               the {nr}'th submatch of the matched text.  When {nr} is 0
-               the whole matched text is returned.
+               Only for an expression in a |:substitute| command or
+               substitute() function.
+               Returns the {nr}'th submatch of the matched text.  When {nr}
+               is 0 the whole matched text is returned.
+               Also see |sub-replace-expression|.
                Example: >
                        :s/\d\+/\=submatch(0) + 1/
 <              This finds the first number in the line and adds one to it.
@@ -5517,26 +5742,37 @@ submatch({nr})                                          *submatch()*
 
 substitute({expr}, {pat}, {sub}, {flags})              *substitute()*
                The result is a String, which is a copy of {expr}, in which
-               the first match of {pat} is replaced with {sub}.  This works
-               like the ":substitute" command (without any flags).  But the
-               matching with {pat} is always done like the 'magic' option is
-               set and 'cpoptions' is empty (to make scripts portable).
-               'ignorecase' is still relevant.  'smartcase' is not used.
-               See |string-match| for how {pat} is used.
-               And a "~" in {sub} is not replaced with the previous {sub}.
+               the first match of {pat} is replaced with {sub}.
+               When {flags} is "g", all matches of {pat} in {expr} are
+               replaced.  Otherwise {flags} should be "".
+               
+               This works like the ":substitute" command (without any flags).
+               But the matching with {pat} is always done like the 'magic'
+               option is set and 'cpoptions' is empty (to make scripts
+               portable).  'ignorecase' is still relevant, use |/\c| or |/\C|
+               if you want to ignore or match case and ignore 'ignorecase'.
+               'smartcase' is not used.  See |string-match| for how {pat} is
+               used.
+
+               A "~" in {sub} is not replaced with the previous {sub}.
                Note that some codes in {sub} have a special meaning
                |sub-replace-special|.  For example, to replace something with
                "\n" (two characters), use "\\\\n" or '\\n'.
+
                When {pat} does not match in {expr}, {expr} is returned
                unmodified.
-               When {flags} is "g", all matches of {pat} in {expr} are
-               replaced.  Otherwise {flags} should be "".
+
                Example: >
                        :let &path = substitute(&path, ",\\=[^,]*$", "", "")
 <              This removes the last component of the 'path' option. >
                        :echo substitute("testing", ".*", "\\U\\0", "")
 <              results in "TESTING".
 
+               When {sub} starts with "\=", the remainder is interpreted as
+               an expression. See |sub-replace-expression|.  Example: >
+                       :echo substitute(s, '%\(\x\x\)',
+                          \ '\=nr2char("0x" . submatch(1))', 'g')
+
 synID({lnum}, {col}, {trans})                          *synID()*
                The result is a Number, which is the syntax ID at the position
                {lnum} and {col} in the current window.
@@ -5558,20 +5794,6 @@ synID({lnum}, {col}, {trans})                            *synID()*
                        :echo synIDattr(synID(line("."), col("."), 1), "name")
 <
 
-synconcealed({lnum}, {col})                            *synconcealed()*
-               The result is a List. The first item in the list is 0 if the
-               character at the position {lnum} and {col} is not part of a
-               concealable region, 1 if it is. The second item in the list is
-               a string. If the first item is 1, the second item contains the
-               text which will be displayed in place of the concealed text,
-               depending on the current setting of 'conceallevel'. The third
-               and final item in the list is a unique number representing the
-               specific syntax region matched. This allows detection of the
-               beginning of a new concealable region if there are two
-               consecutive regions with the same replacement character.
-               For an example use see $VIMRUNTIME/syntax/2html.vim .
-
-
 synIDattr({synID}, {what} [, {mode}])                  *synIDattr()*
                The result is a String, which is the {what} attribute of
                syntax ID {synID}.  This can be used to obtain information
@@ -5612,6 +5834,20 @@ synIDtrans({synID})                                      *synIDtrans()*
                highlight the character.  Highlight links given with
                ":highlight link" are followed.
 
+synconcealed({lnum}, {col})                            *synconcealed()*
+               The result is a List. The first item in the list is 0 if the
+               character at the position {lnum} and {col} is not part of a
+               concealable region, 1 if it is. The second item in the list is
+               a string. If the first item is 1, the second item contains the
+               text which will be displayed in place of the concealed text,
+               depending on the current setting of 'conceallevel'. The third
+               and final item in the list is a unique number representing the
+               specific syntax region matched. This allows detection of the
+               beginning of a new concealable region if there are two
+               consecutive regions with the same replacement character.
+               For an example use see $VIMRUNTIME/syntax/2html.vim .
+
+
 synstack({lnum}, {col})                                        *synstack()*
                Return a |List|, which is the stack of syntax items at the
                position {lnum} and {col} in the current window.  Each item in
@@ -5648,6 +5884,9 @@ system({expr} [, {input}])                                *system()* *E677*
 <              To make the result more system-independent, the shell output
                is filtered to replace <CR> with <NL> for Macintosh, and
                <CR><NL> with <NL> for DOS-like systems.
+               To avoid the string being truncated at a NUL, all NUL
+               characters are replaced with SOH (0x01).
+
                The command executed is constructed using several options:
        'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote'
                ({tmp} is an automatically generated file name).
@@ -5674,9 +5913,9 @@ tabpagebuflist([{arg}])                                   *tabpagebuflist()*
                omitted the current tab page is used.
                When {arg} is invalid the number zero is returned.
                To get a list of all buffers in all tabs use this: >
-                       tablist = []
+                       let buflist = []
                        for i in range(tabpagenr('$'))
-                          call extend(tablist, tabpagebuflist(i + 1))
+                          call extend(buflist, tabpagebuflist(i + 1))
                        endfor
 <              Note that a buffer may appear in more than one window.
 
@@ -5737,8 +5976,9 @@ taglist({expr})                                                   *taglist()*
                If there are no matching tags, then an empty list is returned.
 
                To get an exact tag match, the anchors '^' and '$' should be
-               used in {expr}.  Refer to |tag-regexp| for more information
-               about the tag search regular expression pattern.
+               used in {expr}.  This also make the function work faster.
+               Refer to |tag-regexp| for more information about the tag
+               search regular expression pattern.
 
                Refer to |'tags'| for information about how the tags file is
                located by Vim. Refer to |tags-file-format| for the format of
@@ -5839,6 +6079,8 @@ undofile({name})                                  *undofile()*
                the undo file exists.
                {name} is always expanded to the full path, since that is what
                is used internally.
+               If {name} is empty undofile() returns an empty string, since a
+               buffer without a file name will not write an undo file.
                Useful in combination with |:wundo| and |:rundo|.
                When compiled without the +persistent_undo option this always
                returns an empty string.
@@ -5898,13 +6140,13 @@ virtcol({expr})                                         *virtcol()*
                would be of unlimited width.  When there is a <Tab> at the
                position, the returned Number will be the column at the end of
                the <Tab>.  For example, for a <Tab> in column 1, with 'ts'
-               set to 8, it returns 8.
+               set to 8, it returns 8. |conceal| is ignored.
                For the byte position use |col()|.
                For the use of {expr} see |col()|.
                When 'virtualedit' is used {expr} can be [lnum, col, off], where
                "off" is the offset in screen columns from the start of the
                character.  E.g., a position within a <Tab> or after the last
-               character.
+               character.  When "off" is omitted zero is used.
                When Virtual editing is active in the current mode, a position
                beyond the end of the line can be returned. |'virtualedit'|
                The accepted positions are:
@@ -5947,6 +6189,18 @@ visualmode([expr])                                               *visualmode()*
                Dictionary or Float is not a Number or String, thus does not
                cause the mode to be cleared.
 
+wildmenumode()                                 *wildmenumode()*
+               Returns non-zero when the wildmenu is active and zero
+               otherwise.  See 'wildmenu' and 'wildmode'.
+               This can be used in mappings to handle the 'wildcharm' option
+               gracefully. (Makes only sense with |mapmode-c| mappings).
+
+               For example to make <c-j> work like <down> in wildmode, use: >
+    :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>"
+<
+               (Note, this needs the 'wildcharm' option set appropriately).
+
+
                                                        *winbufnr()*
 winbufnr({nr}) The result is a Number, which is the number of the buffer
                associated with window {nr}.  When {nr} is zero, the number of
@@ -5979,8 +6233,9 @@ winline() The result is a Number, which is the screen line of the cursor
 winnr([{arg}]) The result is a Number, which is the number of the current
                window.  The top window has number 1.
                When the optional argument is "$", the number of the
-               last window is returned (the window count).
-               When the optional argument is "#", the number of the last
+               last window is returned (the window count). >
+                       let window_count = winnr('$')
+<              When the optional argument is "#", the number of the last
                accessed window is returned (where |CTRL-W_p| goes to).
                If there is no previous window or it is in another tab page 0
                is returned.
@@ -6056,8 +6311,16 @@ writefile({list}, {fname} [, {binary}])
                To copy a file byte for byte: >
                        :let fl = readfile("foo", "b")
                        :call writefile(fl, "foocopy", "b")
+
+
+xor({expr}, {expr})                                    *xor()*
+               Bitwise XOR on the two arguments.  The arguments are converted
+               to a number.  A List, Dict or Float argument causes an error.
+               Example: >
+                       :let bits = xor(bits, 0x80)
 <
 
+
                                                        *feature-list*
 There are three types of features:
 1.  Features that are only supported when they have been enabled when Vim
@@ -6084,6 +6347,7 @@ balloon_multiline GUI supports multiline balloons.
 beos                   BeOS version of Vim.
 browse                 Compiled with |:browse| support, and browse() will
                        work.
+browsefilter           Compiled with support for |browsefilter|.
 builtin_terms          Compiled with some builtin terminals.
 byte_offset            Compiled with support for 'o' in 'statusline'
 cindent                        Compiled with 'cindent' support.
@@ -6093,17 +6357,17 @@ cmdline_compl           Compiled with |cmdline-completion| support.
 cmdline_hist           Compiled with |cmdline-history| support.
 cmdline_info           Compiled with 'showcmd' and 'ruler' support.
 comments               Compiled with |'comments'| support.
+compatible             Compiled to be very Vi compatible.
 cryptv                 Compiled with encryption support |encryption|.
 cscope                 Compiled with |cscope| support.
-compatible             Compiled to be very Vi compatible.
 debug                  Compiled with "DEBUG" defined.
 dialog_con             Compiled with console dialog support.
 dialog_gui             Compiled with GUI dialog support.
 diff                   Compiled with |vimdiff| and 'diff' support.
 digraphs               Compiled with support for digraphs.
 dnd                    Compiled with support for the "~ register |quote_~|.
-dos32                  32 bits DOS (DJGPP) version of Vim.
 dos16                  16 bits DOS version of Vim.
+dos32                  32 bits DOS (DJGPP) version of Vim.
 ebcdic                 Compiled on a machine with ebcdic character set.
 emacs_tags             Compiled with support for Emacs tags.
 eval                   Compiled with expression evaluation support.  Always
@@ -6126,15 +6390,15 @@ fork                    Compiled to use fork()/exec() instead of system().
 gettext                        Compiled with message translation |multi-lang|
 gui                    Compiled with GUI enabled.
 gui_athena             Compiled with Athena GUI.
+gui_gnome              Compiled with Gnome support (gui_gtk is also defined).
 gui_gtk                        Compiled with GTK+ GUI (any version).
 gui_gtk2               Compiled with GTK+ 2 GUI (gui_gtk is also defined).
-gui_gnome              Compiled with Gnome support (gui_gtk is also defined).
 gui_mac                        Compiled with Macintosh GUI.
 gui_motif              Compiled with Motif GUI.
 gui_photon             Compiled with Photon GUI.
+gui_running            Vim is running in the GUI, or it will start soon.
 gui_win32              Compiled with MS Windows Win32 GUI.
 gui_win32s             idem, and Win32s system being used (Windows 3.1)
-gui_running            Vim is running in the GUI, or it will start soon.
 hangul_input           Compiled with Hangul input support. |hangul|
 iconv                  Can use iconv() for conversion.
 insert_expand          Compiled with support for CTRL-X expansion commands in
@@ -6156,30 +6420,32 @@ menu                    Compiled with support for |:menu|.
 mksession              Compiled with support for |:mksession|.
 modify_fname           Compiled with file name modifiers. |filename-modifiers|
 mouse                  Compiled with support mouse.
-mouseshape             Compiled with support for 'mouseshape'.
 mouse_dec              Compiled with support for Dec terminal mouse.
 mouse_gpm              Compiled with support for gpm (Linux console mouse)
 mouse_netterm          Compiled with support for netterm mouse.
 mouse_pterm            Compiled with support for qnx pterm mouse.
 mouse_sysmouse         Compiled with support for sysmouse (*BSD console mouse)
+mouse_sgr              Compiled with support for sgr mouse.
+mouse_urxvt            Compiled with support for urxvt mouse.
 mouse_xterm            Compiled with support for xterm mouse.
+mouseshape             Compiled with support for 'mouseshape'.
 multi_byte             Compiled with support for 'encoding'
 multi_byte_encoding    'encoding' is set to a multi-byte encoding.
 multi_byte_ime         Compiled with support for IME input method.
 multi_lang             Compiled with support for multiple languages.
 mzscheme               Compiled with MzScheme interface |mzscheme|.
-netbeans_intg          Compiled with support for |netbeans|.
 netbeans_enabled       Compiled with support for |netbeans| and connected.
+netbeans_intg          Compiled with support for |netbeans|.
 ole                    Compiled with OLE automation support for Win32.
 os2                    OS/2 version of Vim.
-osfiletype             Compiled with support for osfiletypes |+osfiletype|
 path_extra             Compiled with up/downwards search in 'path' and 'tags'
 perl                   Compiled with Perl interface.
 persistent_undo                Compiled with support for persistent undo history.
 postscript             Compiled with PostScript file printing.
 printer                        Compiled with |:hardcopy| support.
 profile                        Compiled with |:profile| support.
-python                 Compiled with Python interface.
+python                 Compiled with Python 2.x interface. |has-python|
+python3                        Compiled with Python 3.x interface. |has-python|
 qnx                    QNX version of Vim.
 quickfix               Compiled with |quickfix| support.
 reltime                        Compiled with |reltime()| support.
@@ -6190,11 +6456,11 @@ showcmd                 Compiled with 'showcmd' support.
 signs                  Compiled with |:sign| support.
 smartindent            Compiled with 'smartindent' support.
 sniff                  Compiled with SNiFF interface support.
+spell                  Compiled with spell checking support |spell|.
 startuptime            Compiled with |--startuptime| support.
 statusline             Compiled with support for 'statusline', 'rulerformat'
                        and special formats of 'titlestring' and 'iconstring'.
 sun_workshop           Compiled with support for Sun |workshop|.
-spell                  Compiled with spell checking support |spell|.
 syntax                 Compiled with syntax highlighting support |syntax|.
 syntax_items           There are active syntax highlighting items for the
                        current buffer.
@@ -6215,9 +6481,9 @@ title                     Compiled with window title support |'title'|.
 toolbar                        Compiled with support for |gui-toolbar|.
 unix                   Unix version of Vim.
 user_commands          User-defined commands.
-viminfo                        Compiled with viminfo support.
-vim_starting           True while initial source'ing takes place.
 vertsplit              Compiled with vertically split windows |:vsplit|.
+vim_starting           True while initial source'ing takes place. |startup|
+viminfo                        Compiled with viminfo support.
 virtualedit            Compiled with 'virtualedit' option.
 visual                 Compiled with Visual mode.
 visualextra            Compiled with extra Visual mode commands.
@@ -6226,16 +6492,18 @@ vms                     VMS version of Vim.
 vreplace               Compiled with |gR| and |gr| commands.
 wildignore             Compiled with 'wildignore' option.
 wildmenu               Compiled with 'wildmenu' option.
-windows                        Compiled with support for more than one window.
-winaltkeys             Compiled with 'winaltkeys' option.
 win16                  Win16 version of Vim (MS-Windows 3.1).
-win32                  Win32 version of Vim (MS-Windows 95/98/ME/NT/2000/XP).
-win64                  Win64 version of Vim (MS-Windows 64 bit).
+win32                  Win32 version of Vim (MS-Windows 95 and later, 32 or
+                       64 bits)
 win32unix              Win32 version of Vim, using Unix files (Cygwin)
+win64                  Win64 version of Vim (MS-Windows 64 bit).
 win95                  Win32 version for MS-Windows 95/98/ME.
+winaltkeys             Compiled with 'winaltkeys' option.
+windows                        Compiled with support for more than one window.
 writebackup            Compiled with 'writebackup' default on.
 xfontset               Compiled with X fontset support |xfontset|.
 xim                    Compiled with X input method support |xim|.
+xpm_w32                        Compiled with pixmap support for Win32.
 xsmp                   Compiled with X session management support.
 xsmp_interact          Compiled with interactive X session management support.
 xterm_clipboard                Compiled with support for xterm clipboard.
@@ -6308,7 +6576,7 @@ last defined. Example: >
 <
 See |:verbose-cmd| for more information.
 
-                                                       *E124* *E125*
+                                                       *E124* *E125* *E853*
 :fu[nction][!] {name}([arguments]) [range] [abort] [dict]
                        Define a new function by the name {name}.  The name
                        must be made of alphanumeric characters and '_', and
@@ -6338,6 +6606,8 @@ See |:verbose-cmd| for more information.
                        is excluded, ":{range}call" will call the function for
                        each line in the range, with the cursor on the start
                        of each line.  See |function-range-example|.
+                       The cursor is still moved to the first line of the
+                       range, as is the case with all Ex commands.
 
                        When the [abort] argument is added, the function will
                        abort as soon as an error is detected.
@@ -6569,9 +6839,9 @@ Hint: If you distribute a bunch of scripts you can pack them together with the
 ==============================================================================
 6. Curly braces names                                  *curly-braces-names*
 
-Wherever you can use a variable, you can use a "curly braces name" variable.
-This is a regular variable name with one or more expressions wrapped in braces
-{} like this: >
+In most places where you can use a variable, you can use a "curly braces name"
+variable.  This is a regular variable name with one or more expressions
+wrapped in braces {} like this: >
        my_{adjective}_variable
 
 When Vim encounters this, it evaluates the expression inside the braces, puts
@@ -6607,6 +6877,11 @@ Example: >
 
 This would call the function "my_func_whizz(parameter)".
 
+This does NOT work: >
+  :let i = 3
+  :let @{i} = ''  " error
+  :echo @{i}      " error
+
 ==============================================================================
 7. Commands                                            *expression-commands*
 
@@ -6741,7 +7016,8 @@ This would call the function "my_func_whizz(parameter)".
 :let [{name}, ..., ; {lastname}] -= {expr1}
                        Like above, but append/add/subtract the value for each
                        |List| item.
-                                                       *E106*
+
+                                                               *E121*
 :let {var-name}        ..      List the value of variable {var-name}.  Multiple
                        variable names may be given.  Special names recognized
                        here:                           *E738*
@@ -7027,7 +7303,9 @@ This would call the function "my_func_whizz(parameter)".
                        is terminated.
                        Example: >
                :try | throw "oops" | catch /^oo/ | echo "caught" | endtry
-<
+<                      Note that "catch" may need to be on a separate line
+                       for when an error causes the parsing to skip the whole
+                       line and not see the "|" that separates the commands.
 
                                                        *:ec* *:echo*
 :ec[ho] {expr1} ..     Echoes each {expr1}, with a space in between.  The
index 792c1bc..898ed70 100644 (file)
@@ -1,4 +1,4 @@
-.TH EVIM 1 "16 février 2002 February 16"
+.TH EVIM 1 "16 février 2002"
 .SH NAME
 evim \- Â« Easy Vim Â», Ã©dite un fichier avec Vim sans utiliser les modes
 .SH SYNOPSIS
@@ -54,3 +54,4 @@ Voir le menu Aide/Remerciements ou ":help credits" dans
 .SH TRADUCTION
 Cette page de manuel a Ã©té traduite David Blanchet.
 <david.blanchet@free.fr> 2005-03-26.
+Mise Ã  jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
index 9594161..2b38e66 100644 (file)
@@ -1,4 +1,4 @@
-.TH EVIM 1 "16 février 2002 February 16"
+.TH EVIM 1 "16 février 2002"
 .SH NAME
 evim \- Â« Easy Vim Â», Ã©dite un fichier avec Vim sans utiliser les modes
 .SH SYNOPSIS
@@ -54,3 +54,4 @@ Voir le menu Aide/Remerciements ou ":help credits" dans
 .SH TRADUCTION
 Cette page de manuel a Ã©té traduite David Blanchet.
 <david.blanchet@free.fr> 2005-03-26.
+Mise Ã  jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
diff --git a/runtime/doc/evim-ja.UTF-8.1 b/runtime/doc/evim-ja.UTF-8.1
new file mode 100644 (file)
index 0000000..1b7a657
--- /dev/null
@@ -0,0 +1,51 @@
+.TH EVIM 1 "2002 February 16"
+.SH åå‰
+evim \- easy Vim, ãƒ¢ãƒ¼ãƒ‰ãƒ¬ã‚¹ã‚¨ãƒ‡ã‚£ã‚¿ Vim
+.SH æ›¸å¼
+.br
+.B evim
+[options] [file ..]
+.br
+.B eview
+.SH èª¬æ˜Ž
+.B eVim
+ã¯
+.B Vim
+ã‚’èµ·å‹•ã—ã¦ã€ãƒ¢ãƒ¼ãƒ‰ãƒ¬ã‚¹ã‚¨ãƒ‡ã‚£ã‚¿ã¨ã—ã¦å‹•ä½œã™ã‚‹ãŸã‚ã®ã‚ªãƒ—ションを設定ã—ã¾ã™ã€‚
+Vim ã®å‹•ä½œãŒ point-and-click ã‚¨ãƒ‡ã‚£ã‚¿ã®ã‚ˆã†ãªå‹•ä½œã«ãªã‚Šã¾ã™ã€‚
+MS-Windows ã®ãƒ¡ãƒ¢å¸³ã®ã‚ˆã†ãªå‹•ä½œã§ã™ã€‚
+.B eVim
+ã¯å¸¸ã« GUI ã§èµ·å‹•ã—ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¨ãƒ„ールãƒãƒ¼ã‚’表示ã—ã¾ã™ã€‚
+.PP
+ã©ã†ã—ã¦ã‚‚ Vim ã®æ“作ã«é¦´æŸ“ã‚ãªã„å ´åˆã«ä½¿ã£ã¦ãã ã•ã„。
+編集効率ã¯ä¸‹ãŒã‚Šã¾ã™ã€‚
+.PP
+.B eview
+ã¯åŒæ§˜ã«ã€èª­ã¿è¾¼ã¿å°‚用モードã§èµ·å‹•ã—ã¾ã™ã€‚evim \-R ã¨åŒã˜ã§ã™ã€‚
+.PP
+引数や Vim ã«ã¤ã„ã¦ã®è©³ç´°ã¯ vim(1) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.PP
+オプション 'insertmode' ãŒè¨­å®šã•ã‚Œã€ãƒ†ã‚­ã‚¹ãƒˆã‚’直接ã€å…¥åŠ›ã§ãるよã†ã«ãªã‚Šã¾
+ã™ã€‚
+.br
+コピーã¨ãƒšãƒ¼ã‚¹ãƒˆã®ã‚­ãƒ¼æ“作㌠MS-Windows ã¨åŒã˜ã«ãªã‚‹ã‚ˆã†ã«ã€ãƒžãƒƒãƒ—ãŒè¨­å®šã•ã‚Œ
+ã¾ã™ã€‚
+CTRL-X ãŒåˆ‡ã‚Šå–ã‚Šã€CTRL-C ãŒã‚³ãƒ”ーã€CTRL-V ãŒãƒšãƒ¼ã‚¹ãƒˆã§ã™ã€‚
+標準㮠CTRL-V ã®æ“作㯠CTRL-Q ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚
+.SH ã‚ªãƒ—ション
+vim(1) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.SH ãƒ•ã‚¡ã‚¤ãƒ«
+.TP 15
+/usr/local/lib/vim/evim.vim
+eVim ã®åˆæœŸåŒ–スクリプト。
+.SH åˆ¥å
+evim ã¯ "gumbies ã®ãŸã‚ã® Vim" ã¨ã‚‚呼ã°ã‚Œã¦ã„ã¾ã™ã€‚
+evim ã‚’使ã£ã¦ã„ã‚‹ã‚ãªãŸã¯ãã£ã¨ã€é ­ã«ãƒãƒ³ã‚«ãƒã‚’ã‹ã¶ã£ã¦ã„ã‚‹ã®ã§ã™ã€‚
+(訳注: gumbies ã¯ Monty Python ã«ç™»å ´ã™ã‚‹ãŠã‚‚ã—ã‚集団。ãƒãƒ³ã‚«ãƒã‚’ã‹ã¶ã£
+ã¦ã„る。)
+.SH é–¢é€£é …ç›®
+vim(1)
+.SH è‘—者
+.B Vim
+ã®ã»ã¨ã‚“ã©ã®æ©Ÿèƒ½ã¯ Bram Moolenaar ãŒé–‹ç™ºã—ã€å¤šãã®äººãŒå”力ã—ã¾ã—ãŸã€‚
+メニュー㮠Help/Credits ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
index a24a2dc..77ec419 100644 (file)
@@ -1,4 +1,4 @@
-*farsi.txt*     For Vim version 7.3.  Last change: 2010 Aug 07
+*farsi.txt*     For Vim version 7.4.  Last change: 2010 Aug 07
 
 
                  VIM REFERENCE MANUAL    by Mortaza Ghassab Shiran
index c76adfc..1cee25b 100644 (file)
@@ -1,4 +1,4 @@
-*filetype.txt*  For Vim version 7.3.  Last change: 2008 Jul 15
+*filetype.txt*  For Vim version 7.4.  Last change: 2013 May 25
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -270,6 +270,9 @@ directories!
 
 
                                                *autocmd-osfiletypes*
+NOTE: this code is currently disabled, as the RISC OS implementation was
+removed.  In the future this will use the 'filetype' option.
+
 On operating systems which support storing a file type with the file, you can
 specify that an autocommand should only be executed if the file is of a
 certain type.
@@ -296,8 +299,6 @@ must both match): >
 
 This will match files of type "&fff" whose names start with "diff".
 
-Note that osfiletype checking is skipped if Vim is compiled without the
-|+osfiletype| feature.
 
                                                        *plugin-details*
 The "plugin" directory can be in any of the directories in the 'runtimepath'
@@ -602,7 +603,7 @@ Since the text for this plugin is rather long it has been put in a separate
 file: |ft_sql.txt|.
 
 
-TEX                                                    *ft-tex-plugin*
+TEX                                            *ft-tex-plugin* *g:tex_flavor*
 
 If the first line of a *.tex file has the form >
        %&<format>
index 24a8dcb..240d912 100644 (file)
@@ -1,4 +1,4 @@
-*fold.txt*      For Vim version 7.3.  Last change: 2010 May 13
+*fold.txt*      For Vim version 7.4.  Last change: 2010 May 13
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -60,7 +60,7 @@ level form a fold, with the lines with a higher level forming a nested fold.
 The nesting of folds is limited with 'foldnestmax'.
 
 Some lines are ignored and get the fold level of the line above or below it,
-whatever is the lowest.  These are empty or white lines and lines starting
+whichever is lower.  These are empty or white lines and lines starting
 with a character in 'foldignore'.  White space is skipped before checking for
 characters in 'foldignore'.  For C use "#" to ignore preprocessor lines.
 
index 54c6b3f..dcab23c 100644 (file)
@@ -1,4 +1,4 @@
-*ft_ada.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*ft_ada.txt*   For Vim version 7.4.  Last change: 2010 Jul 20
 
 
                    ADA FILE TYPE PLUG-INS REFERENCE MANUAL~
@@ -6,20 +6,20 @@
 ADA                                                                  *ada.vim*
 
 1.  Syntax Highlighting                            |ft-ada-syntax|
-2.  Plug-in                                |ft-ada-plugin|
+2.  File type Plug-in                      |ft-ada-plugin|
 3.  Omni Completion                        |ft-ada-omni|
     3.1 Omni Completion with "gnat xref"       |gnat-xref|
     3.2 Omni Completion with "ctags"           |ada-ctags|
 4.  Compiler Support                       |ada-compiler|
     4.1 GNAT                                   |compiler-gnat|
-    4.1 Dec Ada                                        |compiler-decada|
+    4.2 Dec Ada                                        |compiler-decada|
 5.  References                             |ada-reference|
     5.1 Options                                        |ft-ada-options|
-    5.2 Functions                              |ft-ada-functions|
-    5.3 Commands                               |ft-ada-commands|
-    5.4 Variables                              |ft-ada-variables|
-    5.5 Constants                              |ft-ada-constants|
-8.  Extra Plug-ins                         |ada-extra-plugins|
+    5.2 Commands                               |ft-ada-commands|
+    5.3 Variables                              |ft-ada-variables|
+    5.4 Constants                              |ft-ada-constants|
+    5.5 Functions                              |ft-ada-functions|
+6.  Extra Plug-ins                         |ada-extra-plugins|
 
 ==============================================================================
 1. Syntax Highlighting ~
@@ -139,7 +139,7 @@ The Ada parser for Exuberant Ctags is fairly new - don't expect complete
 support yet.
 
 ==============================================================================
-4.  Compiler Support ~
+4. Compiler Support ~
                                                                *ada-compiler*
 
 The Ada mode supports more than one Ada compiler and will automatically load the
@@ -367,7 +367,7 @@ false when the variable is undefined. The value to which the variable is set
 makes no difference.
 
 ------------------------------------------------------------------------------
-5.3 Commands ~
+5.2 Commands ~
                                                             *ft-ada-commands*
 
 :AdaRainbow                                                     *:AdaRainbow*
@@ -445,7 +445,7 @@ g:ada#Ctags_Kinds   dictionary of lists
                for Ctags generates.
 
 ------------------------------------------------------------------------------
-5.2 Functions ~
+5.5 Functions ~
                                                            *ft-ada-functions*
 
 ada#Word([{line}, {col}])                                        *ada#Word()*
@@ -479,7 +479,7 @@ gnat#New ()
 
 
 ==============================================================================
-8. Extra Plugins ~
+6. Extra Plugins ~
                                                           *ada-extra-plugins*
 
 You can optionally install the following extra plug-ins. They work well with
index 1360a03..72ea3ed 100644 (file)
@@ -1,4 +1,4 @@
-*ft_sql.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*ft_sql.txt*   For Vim version 7.4.  Last change: 2013 May 15
 
 by David Fishburn
 
@@ -349,6 +349,7 @@ may not work properly on all platforms: >
 The static maps (which are based on the syntax highlight groups) follow this
 format: >
     imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
+    imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword\w*')<CR><C-X><C-O>
 
 This command breaks down as: >
     imap                  - Create an insert map
@@ -369,6 +370,9 @@ This command breaks down as: >
                             command while editing a SQL file.
     'sqlKeyword'          - Display the items for the sqlKeyword highlight
                             group
+    'sqlKeyword\w*'       - A second option available with Vim 7.4 which
+                             uses a regular expression to determine which
+                            syntax groups to use
     )<CR>                 - Execute the :let command
     <C-X><C-O>            - Trigger the standard omni completion key stroke.
                             Passing in 'sqlKeyword' instructs the SQL
@@ -435,7 +439,7 @@ the space bar):
                             of columns, you can press <Left>, this will
                             replace the column list with the list of tables.
                           - This allows you to quickly drill down into a
-                            table to view it's columns and back again.
+                            table to view its columns and back again.
                           - <Right> and <Left> can be also be chosen via
                             your |.vimrc| >
                                 let g:ftplugin_sql_omni_key_right = '<Right>'
@@ -645,7 +649,7 @@ your |vimrc|: >
        - When completing tables, procedure or views and using dbext.vim 3.00
          or higher the list of objects will also include the owner name.
          When completing these objects and omni_sql_include_owner is enabled
-         the owner name will be be replaced. >
+         the owner name will be replaced. >
 
     omni_sql_precache_syntax_groups
 <      - Default:
index f9bbf78..1ae5495 100644 (file)
@@ -1,4 +1,4 @@
-*gui.txt*       For Vim version 7.3.  Last change: 2010 May 14
+*gui.txt*       For Vim version 7.4.  Last change: 2013 Jun 12
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -93,10 +93,16 @@ and initialize other things that you may want to set up differently from the
 terminal version.
 
 Recommended place for your personal GUI initializations:
-       Unix                $HOME/.gvimrc
-       OS/2                $HOME/.gvimrc or $VIM/.gvimrc
-       MS-DOS and Win32    $HOME/_gvimrc or $VIM/_gvimrc
-       Amiga               s:.gvimrc or $VIM/.gvimrc
+       Unix                $HOME/.gvimrc or $HOME/.vim/gvimrc
+       OS/2                $HOME/.gvimrc, $HOME/vimfiles/gvimrc
+                           or $VIM/.gvimrc
+       MS-DOS and Win32    $HOME/_gvimrc, $HOME/vimfiles/gvimrc
+                           or $VIM/_gvimrc
+       Amiga               s:.gvimrc, home:.gvimrc, home:vimfiles:gvimrc
+                           or $VIM/.gvimrc
+
+The personal initialization files are searched in the order specified above
+and only the first one that is found is read.
 
 There are a number of options which only have meaning in the GUI version of
 Vim.  These are 'guicursor', 'guifont', 'guipty' and 'guioptions'.  They are
@@ -147,6 +153,15 @@ task bar with the 'guiheadroom' option.
 If you are running the X Window System, you can get information about the
 window Vim is running in with this command: >
        :!xwininfo -id $WINDOWID
+<
+                                                       *gui-IME* *iBus*
+Input methods for international characters in X that rely on the XIM
+framework, most notably iBus, have been known to produce undesirable results
+in gVim. These may include an inability to enter spaces, or long delays
+between typing a character and it being recognized by the application.
+
+One workaround that has been successful, for unknown reasons, is to prevent
+gvim from forking into the background by starting it with the |-f| argument.
 
 ==============================================================================
 2. Scrollbars                                          *gui-scrollbars*
@@ -156,26 +171,26 @@ configure which ones appear with the 'guioptions' option.
 
 The interface looks like this (with ":set guioptions=mlrb"):
 
-                      +------------------------------+
-                      | File  Edit              Help | <- Menu bar (m)
-                      +-+--------------------------+-+
-                      |^|                          |^|
-                      |#| Text area.               |#|
-                      | |                          | |
-                      |v|__________________________|v|
- Normal status line -> |-+ File.c             5,2  +-|
- between Vim windows   |^|""""""""""""""""""""""""""|^|
-                      | |                          | |
-                      | | Another file buffer.     | |
-                      | |                          | |
-                      |#|                          |#|
- Left scrollbar (l) -> |#|                         |#| <- Right
-                      |#|                          |#|    scrollbar (r)
-                      | |                          | |
-                      |v|                          |v|
-                      +-+--------------------------+-+
-                      | |< ####                   >| | <- Bottom
-                      +-+--------------------------+-+    scrollbar (b)
+                      +------------------------------+ `
+                      | File  Edit              Help | <- Menu bar (m) `
+                      +-+--------------------------+-+ `
+                      |^|                          |^| `
+                      |#| Text area.               |#| `
+                      | |                          | | `
+                      |v|__________________________|v| `
+ Normal status line -> |-+ File.c             5,2  +-| `
+ between Vim windows   |^|""""""""""""""""""""""""""|^| `
+                      | |                          | | `
+                      | | Another file buffer.     | | `
+                      | |                          | | `
+                      |#|                          |#| `
+ Left scrollbar (l) -> |#|                         |#| <- Right `
+                      |#|                          |#|    scrollbar (r) `
+                      | |                          | | `
+                      |v|                          |v| `
+                      +-+--------------------------+-+ `
+                      | |< ####                   >| | <- Bottom `
+                      +-+--------------------------+-+    scrollbar (b) `
 
 Any of the scrollbar or menu components may be turned off by not putting the
 appropriate letter in the 'guioptions' string.  The bottom scrollbar is
index a98f0d0..fa84b05 100644 (file)
@@ -1,4 +1,4 @@
-*gui_w16.txt*   For Vim version 7.3.  Last change: 2005 Mar 29
+*gui_w16.txt*   For Vim version 7.4.  Last change: 2005 Mar 29
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -16,7 +16,7 @@ Vim's Graphical User Interface                                *gui-w16* *win16-gui*
 
 Other relevant documentation:
 |gui.txt|      For generic items of the GUI.
-|os_msdos.txt|  For items common to DOS and Windows.
+|os_msdos.txt| For items common to DOS and Windows.
 |gui_w32.txt|  Some items here are also applicable to the Win16 version.
 
 {Vi does not have a Windows GUI}
index d71e90e..fbe3f35 100644 (file)
@@ -1,4 +1,4 @@
-*gui_w32.txt*   For Vim version 7.3.  Last change: 2007 Aug 30
+*gui_w32.txt*   For Vim version 7.4.  Last change: 2012 Aug 04
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -17,7 +17,7 @@ Vim's Win32 Graphical User Interface                  *gui-w32* *win32-gui*
 
 Other relevant documentation:
 |gui.txt|      For generic items of the GUI.
-|os_win32.txt|  For Win32 specific items.
+|os_win32.txt|         For Win32 specific items.
 
 {Vi does not have a Windows GUI}
 
@@ -137,6 +137,9 @@ options:
 And if there already is a gvim running:
 "Edit with existing gvim"   -- edit the file with the running gvim
 
+The "edit with existing Vim" entries can be disabled by adding an entry in the
+registry under HKLM\Software\Vim\Gvim, named DisableEditWithExisting, and with
+any value.
                                                *install-registry*
 You can add the "Edit with Vim" menu entry in an easy way by using the
 "install.exe" program.  It will add several registry entries for you.
@@ -293,7 +296,9 @@ Normally, Vim waits for a command to complete before continuing (this makes
 sense for most shell commands which produce output for Vim to use).  If you
 want Vim to start a program and return immediately, you can use the following
 syntax on W95 & NT: >
-       :!start {command}
+       :!start [/min] {command}
+The optional "/min" causes the window to be minimized.
+
 On Win32s, you will have to go to another window instead.  Don't forget that
 you must tell Windows 3.1x to keep executing a DOS command in the background
 while you switch back to Vim.
@@ -484,4 +489,16 @@ to:
 And add gvim to the list of applications.  This problem only appears to happen
 with the Intellimouse driver 2.2 and when "Universal Scrolling" is turned on.
 
+
+XPM support                                            *w32-xpm-support*
+
+Gvim can be build on MS-Windows with support for XPM files.  |+xpm_w32|
+See the Make_mvc.mak file for instructions, search for XPM.
+
+To try out if XPM support works do this: >
+       :help
+       :exe 'sign define vimxpm icon=' . $VIMRUNTIME . '\\vim16x16.xpm'
+       :exe 'sign place 1 line=1 name=vimxpm file=' . expand('%:p')
+<
+
  vim:tw=78:sw=4:ts=8:ft=help:norl:
index 6d16500..5a47765 100644 (file)
@@ -1,4 +1,4 @@
-*gui_x11.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*gui_x11.txt*   For Vim version 7.4.  Last change: 2011 Sep 14
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -53,6 +53,8 @@ When using "gvim -f" and then ":gui", Vim will run in the foreground.  The
 ":gui -b".
 
 "gvim --nofork" does the same as "gvim -f".
+                                                               *E851* *E852*
+When starting the GUI fails Vim will try to continue running in the terminal.
 
 If you want the GUI to run in the foreground always, include the 'f'
 flag in 'guioptions'.  |-f|.
index fac0c87..79ebff1 100644 (file)
@@ -1,4 +1,4 @@
-*hangulin.txt*  For Vim version 7.3.  Last change: 2009 Jun 24
+*hangulin.txt*  For Vim version 7.4.  Last change: 2009 Jun 24
 
 
                  VIM REFERENCE MANUAL    by Chi-Deok Hwang and Sung-Hyun Nam
index 589d12c..b36c968 100644 (file)
@@ -1,4 +1,4 @@
-*hebrew.txt*    For Vim version 7.3.  Last change: 2007 Jun 14
+*hebrew.txt*    For Vim version 7.4.  Last change: 2007 Jun 14
 
 
           VIM REFERENCE MANUAL    by Ron Aaron (and Avner Lottem)
@@ -93,7 +93,7 @@ Details
       This is also the keymap when 'keymap=hebrew' is set.  The advantage of
       'keymap' is that it works properly when using UTF8, e.g. it inserts the
       correct characters; 'hkmap' does not.  The 'keymap' keyboard can also
-      insert niqud and te`amim.  To see what those mappings are,look at the
+      insert niqud and te`amim.  To see what those mappings are, look at the
       keymap file 'hebrew.vim' etc.
 
 
index 4860eb2..f13a529 100644 (file)
@@ -1,4 +1,4 @@
-*help.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
+*help.txt*     For Vim version 7.4.  Last change: 2012 Dec 06
 
                        VIM - main help file
                                                                         k
@@ -195,12 +195,12 @@ Remarks about specific systems ~
                                                *standard-plugin-list*
 Standard plugins ~
 |pi_getscript.txt| Downloading latest version of Vim scripts
-|pi_gzip.txt|     Reading and writing compressed files
-|pi_netrw.txt|    Reading and writing files over a network
-|pi_paren.txt|    Highlight matching parens
-|pi_tar.txt|      Tar file explorer
+|pi_gzip.txt|      Reading and writing compressed files
+|pi_netrw.txt|     Reading and writing files over a network
+|pi_paren.txt|     Highlight matching parens
+|pi_tar.txt|       Tar file explorer
 |pi_vimball.txt|   Create a self-installing Vim script
-|pi_zip.txt|      Zip archive explorer
+|pi_zip.txt|       Zip archive explorer
 
 LOCAL ADDITIONS:                               *local-additions*
 
index 0ba0bbf..87f095e 100644 (file)
@@ -1,4 +1,4 @@
-*helphelp.txt* For Vim version 7.3.  Last change: 2010 Jul 29
+*helphelp.txt* For Vim version 7.4.  Last change: 2012 Nov 28
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -7,7 +7,7 @@
 Help on help files                                     *helphelp*
 
 1. Help commands               |online-help|
-2. Translating help files      |help-translated|
+2. Translated help files       |help-translated|
 3. Writing help files          |help-writing|
 
 ==============================================================================
@@ -188,17 +188,18 @@ command: >
                        Only for backwards compatibility.  It now executes the
                        ToolBar.FindHelp menu entry instead of using a builtin
                        dialog.  {only when compiled with |+GUI_GTK|}
-<                      {not in Vi}
+                       {not in Vi}
 
                                        *:helpt* *:helptags*
                                *E154* *E150* *E151* *E152* *E153* *E670*
 :helpt[ags] [++t] {dir}
                        Generate the help tags file(s) for directory {dir}.
-                       All "*.txt" and "*.??x" files in the directory are
-                       scanned for a help tag definition in between stars.
-                       The "*.??x" files are for translated docs, they
-                       generate the "tags-??" file, see |help-translated|.
-                       The generated tags files are sorted.
+                       All "*.txt" and "*.??x" files in the directory and
+                       sub-directories are scanned for a help tag definition
+                       in between stars.  The "*.??x" files are for
+                       translated docs, they generate the "tags-??" file, see
+                       |help-translated|.  The generated tags files are
+                       sorted.
                        When there are duplicates an error message is given.
                        An existing tags file is silently overwritten.
                        The optional "++t" argument forces adding the
@@ -218,11 +219,12 @@ files.  Vim will search for all help in "doc" directories in 'runtimepath'.
 This is only available when compiled with the |+multi_lang| feature.
 
 At this moment translations are available for:
-       Chinese - multiple authors
-       French  - translated by David Blanchet
-       Italian - translated by Antonio Colombo
-       Polish  - translated by Mikolaj Machowski
-       Russian - translated by Vassily Ragosin
+       Chinese  - multiple authors
+       French   - translated by David Blanchet
+       Italian  - translated by Antonio Colombo
+       Japanese - multiple authors
+       Polish   - translated by Mikolaj Machowski
+       Russian  - translated by Vassily Ragosin
 See the Vim website to find them: http://www.vim.org/translations.php
 
 A set of translated help files consists of these files:
index 44bf7ef..03ae3db 100644 (file)
@@ -1,4 +1,4 @@
-*howto.txt*    For Vim version 7.3.  Last change: 2006 Apr 02
+*howto.txt*    For Vim version 7.4.  Last change: 2006 Apr 02
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index 092f5f4..d8dc48f 100644 (file)
@@ -1,4 +1,4 @@
-*if_cscop.txt*  For Vim version 7.3.  Last change: 2009 Mar 18
+*if_cscop.txt*  For Vim version 7.4.  Last change: 2011 Jun 12
 
 
                  VIM REFERENCE MANUAL    by Andy Kahn
@@ -112,8 +112,7 @@ The available subcommands are:
            :cscope add /projects/vim/cscope.out /usr/local/vim
            :cscope add cscope.out /usr/local/vim -C
 <
-                                     *cscope-find* *cs-find*
-                                               *E565* *E567*
+                                     *cscope-find* *cs-find* *E567*
     find  : Query cscope.  All cscope query options are available
            except option #5 ("Change this grep pattern").
 
@@ -198,7 +197,7 @@ The available subcommands are:
 
            USAGE   :cs help
 
-                                               *E260* *E261*
+                                                       *E261*
     kill  : Kill a cscope connection (or kill all cscope connections).
 
            USAGE   :cs kill {num|partial_name}
@@ -265,13 +264,23 @@ seems to be useful: >
        :set cscopequickfix=s-,c-,d-,i-,t-,e-
 <
                                                        *cscopetag* *cst*
-If 'cscopetag' set, the commands ":tag" and CTRL-] as well as "vim -t" will
-always use |:cstag| instead of the default :tag behavior.  Effectively, by
-setting 'cst', you will always search your cscope databases as well as your
-tag files.  The default is off.  Examples: >
+If 'cscopetag' is set, the commands ":tag" and CTRL-] as well as "vim -t"
+will always use |:cstag| instead of the default :tag behavior.  Effectively,
+by setting 'cst', you will always search your cscope databases as well as
+your tag files.  The default is off.  Examples: >
        :set cst
        :set nocst
 <
+                                                       *cscoperelative* *csre*
+If 'cscoperelative' is set, then in absence of a prefix given to cscope
+(prefix is the argument of -P option of cscope), basename of cscope.out
+location (usually the project root directory) will be used as the prefix
+to construct an absolute path.  The default is off.  Note: This option is
+only effective when cscope (cscopeprg) is initialized without a prefix
+path (-P).  Examples: >
+       :set csre
+       :set nocsre
+<
                                                        *cscopetagorder* *csto*
 The value of 'csto' determines the order in which |:cstag| performs a search.
 If 'csto' is set to zero, cscope database(s) are searched first, followed
index 6514822..8d9383c 100644 (file)
@@ -1,4 +1,4 @@
-*if_lua.txt*    For Vim version 7.3.  Last change: 2010 Jul 22
+*if_lua.txt*    For Vim version 7.4.  Last change: 2012 Jun 29
 
 
                  VIM REFERENCE MANUAL    by Luis Carvalho
@@ -8,8 +8,12 @@ The Lua Interface to Vim                               *lua* *Lua*
 
 1. Commands                    |lua-commands|
 2. The vim module              |lua-vim|
-3. Buffer userdata             |lua-buffer|
-4. Window userdata             |lua-window|
+3. List userdata               |lua-list|
+4. Dict userdata               |lua-dict|
+5. Funcref userdata            |lua-funcref|
+6. Buffer userdata             |lua-buffer|
+7. Window userdata             |lua-window|
+8. The luaeval function                |lua-luaeval|
 
 {Vi does not have any of these commands}
 
@@ -56,13 +60,14 @@ Example:
 <
 
                                                        *:luado*
-:[range]luado {body}   Execute Lua function "function (line) {body} end" for
-                       each line in the [range], with the function argument
-                       being set to the text of each line in turn, without a
-                       trailing <EOL>. If the value returned by the function
-                       is a string it becomes the text of the line in the
-                       current turn. The default for [range] is the whole
-                       file: "1,$".                  {not in Vi}
+:[range]luado {body}   Execute Lua function "function (line, linenr) {body}
+                       end" for each line in the [range], with the function
+                       argument being set to the text of each line in turn,
+                       without a trailing <EOL>, and the current line number.
+                       If the value returned by the function is a string it
+                       becomes the text of the line in the current turn. The
+                       default for [range] is the whole file: "1,$".
+                                                       {not in Vi}
 
 Examples:
 >
@@ -88,11 +93,9 @@ Examples:
 All these commands execute a Lua chunk from either the command line (:lua and
 :luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
 interpreter, each chunk has its own scope and so only global variables are
-shared between command calls. Lua default libraries "table", "string", "math",
-and "package" are available, "io" and "debug" are not, and "os" is restricted
-to functions "date", "clock", "time", "difftime", and "getenv". In addition,
-Lua "print" function has its output redirected to the Vim message area, with
-arguments separated by a white space instead of a tab.
+shared between command calls. All Lua default libraries are available. In
+addition, Lua "print" function has its output redirected to the Vim message
+area, with arguments separated by a white space instead of a tab.
 
 Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
 and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
@@ -108,9 +111,31 @@ input range are stored in "vim.firstline" and "vim.lastline" respectively. The
 module also includes routines for buffer, window, and current line queries,
 Vim evaluation and command execution, and others.
 
-       vim.isbuffer(value)     Returns 'true' (boolean, not string) if
-                               "value" is a buffer userdata and 'false'
-                               otherwise (see |lua-buffer|).
+       vim.list([arg])         Returns an empty list or, if "arg" is a Lua
+                               table with numeric keys 1, ..., n (a
+                               "sequence"), returns a list l such that l[i] =
+                               arg[i] for i = 1, ..., n (see |List|).
+                               Non-numeric keys are not used to initialize
+                               the list. See also |lua-eval| for conversion
+                               rules. Example: >
+                                       :lua t = {math.pi, false, say = 'hi'}
+                                       :echo luaeval('vim.list(t)')
+                                       :" [3.141593, 0], 'say' is ignored
+<
+       vim.dict([arg])         Returns an empty dictionary or, if "arg" is a
+                               Lua table, returns a dict d such that d[k] =
+                               arg[k] for all string keys k in "arg" (see
+                               |Dictionary|). Number keys are converted to
+                               strings. Keys that are not strings are not
+                               used to initialize the dictionary. See also
+                               |lua-eval| for conversion rules. Example: >
+                                       :lua t = {math.pi, false, say = 'hi'}
+                                       :echo luaeval('vim.dict(t)')
+                                       :" {'say': 'hi'}, numeric keys ignored
+<
+       vim.funcref({name})     Returns a Funcref to function {name} (see
+                               |Funcref|). It is equivalent to Vim's
+                               "function".
 
        vim.buffer([arg])       If "arg" is a number, returns buffer with
                                number "arg" in the buffer list or, if "arg"
@@ -121,16 +146,21 @@ Vim evaluation and command execution, and others.
                                'true' returns the first buffer in the buffer
                                list or else the current buffer.
 
-       vim.iswindow(value)     Returns 'true' (boolean, not string) if
-                               "value" is a window userdata and
-                               'false' otherwise (see |lua-window|).
-
        vim.window([arg])       If "arg" is a number, returns window with
                                number "arg" or 'nil' (nil value, not string)
                                if not found. Otherwise, if "toboolean(arg)"
                                is 'true' returns the first window or else the
                                current window.
 
+       vim.type({arg})         Returns the type of {arg}. It is equivalent to
+                               Lua's "type" function, but returns "list",
+                               "dict", "funcref", "buffer", or "window" if
+                               {arg} is a list, dictionary, funcref, buffer,
+                               or window, respectively. Examples: >
+                                       :lua l = vim.list()
+                                       :lua print(type(l), vim.type(l))
+                                       :" userdata list
+<
        vim.command({cmd})      Executes the vim (ex-mode) command {cmd}.
                                Examples: >
                                        :lua vim.command"set tw=60"
@@ -141,7 +171,7 @@ Vim evaluation and command execution, and others.
                                Vim strings and numbers are directly converted
                                to Lua strings and numbers respectively. Vim
                                lists and dictionaries are converted to Lua
-                               tables (lists become integer-keyed tables).
+                               userdata (see |lua-list| and |lua-dict|).
                                Examples: >
                                        :lua tw = vim.eval"&tw"
                                        :lua print(vim.eval"{'a': 'one'}".a)
@@ -157,7 +187,105 @@ Vim evaluation and command execution, and others.
 
 
 ==============================================================================
-3. Buffer userdata                                     *lua-buffer*
+3. List userdata                                       *lua-list*
+
+List userdata represent vim lists, and the interface tries to follow closely
+Vim's syntax for lists. Since lists are objects, changes in list references in
+Lua are reflected in Vim and vice-versa. A list "l" has the following
+properties and methods:
+
+Properties
+----------
+       o "#l" is the number of items in list "l", equivalent to "len(l)"
+           in Vim.
+       o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
+           To modify the k-th item, simply do "l[k] = newitem"; in
+           particular, "l[k] = nil" removes the k-th item from "l".
+       o "l()" returns an iterator for "l".
+
+Methods
+-------
+       o "l:add(item)" appends "item" to the end of "l".
+       o "l:insert(item[, pos])" inserts "item" at (optional)
+           position "pos" in the list. The default value for "pos" is 0.
+
+Examples:
+>
+       :let l = [1, 'item']
+       :lua l = vim.eval('l') -- same 'l'
+       :lua l:add(vim.list())
+       :lua l[0] = math.pi
+       :echo l[0] " 3.141593
+       :lua l[0] = nil -- remove first item
+       :lua l:insert(true, 1)
+       :lua print(l, #l, l[0], l[1], l[-1])
+       :lua for item in l() do print(item) end
+<
+
+==============================================================================
+4. Dict userdata                                       *lua-dict*
+
+Similarly to list userdata, dict userdata represent vim dictionaries; since
+dictionaries are also objects, references are kept between Lua and Vim. A dict
+"d" has the following properties:
+
+Properties
+----------
+       o "#d" is the number of items in dict "d", equivalent to "len(d)"
+           in Vim.
+       o "d.key" or "d['key']" returns the value at entry "key" in "d".
+           To modify the entry at this key, simply do "d.key = newvalue"; in
+           particular, "d.key = nil" removes the entry from "d".
+       o "d()" returns an iterator for "d" and is equivalent to "items(d)" in
+           Vim.
+
+Examples:
+>
+       :let d = {'n':10}
+       :lua d = vim.eval('d') -- same 'd'
+       :lua print(d, d.n, #d)
+       :let d.self = d
+       :lua for k, v in d() do print(d, k, v) end
+       :lua d.x = math.pi
+       :lua d.self = nil -- remove entry
+       :echo d
+<
+
+==============================================================================
+5. Funcref userdata                                    *lua-funcref*
+
+Funcref userdata represent funcref variables in Vim. Funcrefs that were
+defined with a "dict" attribute need to be obtained as a dictionary key
+in order to have "self" properly assigned to the dictionary (see examples
+below.) A funcref "f" has the following properties:
+
+Properties
+----------
+       o "#f" is the name of the function referenced by "f"
+       o "f(...)" calls the function referenced by "f" (with arguments)
+
+Examples:
+>
+       :function I(x)
+       :  return a:x
+       :  endfunction
+       :let R = function('I')
+       :lua i1 = vim.funcref('I')
+       :lua i2 = vim.eval('R')
+       :lua print(#i1, #i2) -- both 'I'
+       :lua print(i1, i2, #i2(i1) == #i1(i2))
+       :function Mylen() dict
+       :  return len(self.data)
+       :  endfunction
+       :let mydict = {'data': [0, 1, 2, 3]}
+       :lua d = vim.eval('mydict'); d.len = vim.funcref('Mylen')
+       :echo mydict.len()
+       :lua l = d.len -- assign d as 'self'
+       :lua print(l())
+<
+
+==============================================================================
+6. Buffer userdata                                     *lua-buffer*
 
 Buffer userdata represent vim buffers. A buffer userdata "b" has the following
 properties and methods:
@@ -209,7 +337,7 @@ Examples:
 <
 
 ==============================================================================
-4. Window userdata                                     *lua-window*
+7. Window userdata                                     *lua-window*
 
 Window objects represent vim windows. A window userdata "w" has the following
 properties and methods:
@@ -241,4 +369,35 @@ Examples:
 <
 
 ==============================================================================
- vim:tw=78:ts=8:ft=help:norl:
+8. The luaeval function                                        *lua-luaeval* *lua-eval*
+
+The (dual) equivalent of "vim.eval" for passing Lua values to Vim is
+"luaeval". "luaeval" takes an expression string and an optional argument and
+returns the result of the expression. It is semantically equivalent in Lua to:
+>
+       local chunkheader = "local _A = select(1, ...) return "
+       function luaeval (expstr, arg)
+           local chunk = assert(loadstring(chunkheader .. expstr, "luaeval"))
+           return chunk(arg) -- return typval
+       end
+<
+Note that "_A" receives the argument to "luaeval". Lua numbers, strings, and
+list, dict, and funcref userdata are converted to their Vim respective types,
+while Lua booleans are converted to numbers. An error is thrown if conversion
+of any of the remaining Lua types, including userdata other than lists, dicts,
+and funcrefs, is attempted.
+
+Examples: >
+
+       :echo luaeval('math.pi')
+       :lua a = vim.list():add('newlist')
+       :let a = luaeval('a')
+       :echo a[0] " 'newlist'
+       :function Rand(x,y) " random uniform between x and y
+       :  return luaeval('(_A.y-_A.x)*math.random()+_A.x', {'x':a:x,'y':a:y})
+       :  endfunction
+       :echo Rand(1,10)
+
+
+==============================================================================
+ vim:tw=78:ts=8:noet:ft=help:norl:
index 52440b6..b42570a 100644 (file)
@@ -1,4 +1,4 @@
-*if_mzsch.txt*  For Vim version 7.3.  Last change: 2010 Feb 11
+*if_mzsch.txt*  For Vim version 7.4.  Last change: 2012 Dec 17
 
 
                  VIM REFERENCE MANUAL    by Sergey Khorev
@@ -11,7 +11,8 @@ The MzScheme Interface to Vim                         *mzscheme* *MzScheme*
 3. Threads                             |mzscheme-threads|
 4. Vim access from MzScheme            |mzscheme-vim|
 5. mzeval() Vim function               |mzscheme-mzeval|
-6. Dynamic loading                     |mzscheme-dynamic|
+6. Using Function references           |mzscheme-funcref|
+7. Dynamic loading                     |mzscheme-dynamic|
 
 {Vi does not have any of these commands}
 
@@ -21,10 +22,17 @@ The MzScheme interface is available only if Vim was compiled with the
 Based on the work of Brent Fulgham.
 Dynamic loading added by Sergey Khorev
 
-For downloading MzScheme and other info:
-       http://www.plt-scheme.org/software/mzscheme/
+MzScheme and PLT Scheme names have been rebranded as Racket. For more
+information please check http://racket-lang.org
 
-Note: On FreeBSD you should use the "drscheme" port.
+Futures and places of Racket version 5.x up to and including 5.3.1 do not
+work correctly with processes created by Vim.
+The simplest solution is to build Racket on your own with these features
+disabled: >
+  ./configure --disable-futures --disable-places --prefix=your-install-prefix
+
+To speed up the process, you might also want to use --disable-gracket and
+--disable-docs
 
 ==============================================================================
 1. Commands                                            *mzscheme-commands*
@@ -155,8 +163,11 @@ Common
     (eval {expr-string})           Evaluate the vim expression into
                                    respective MzScheme object: |Lists| are
                                    represented as Scheme lists,
-                                   |Dictionaries| as hash tables.
-                                   NOTE the name clashes with MzScheme eval
+                                   |Dictionaries| as hash tables,
+                                   |Funcref|s as functions (see also
+                                   |mzscheme-funcref|)
+                                   NOTE the name clashes with MzScheme eval,
+                                   use module qualifiers to overcome this.
     (range-start)                  Start/End of the range passed with
     (range-end)                            the Scheme command.
     (beep)                         beep
@@ -237,7 +248,23 @@ To facilitate bi-directional interface, you can use |mzeval()| function to
 evaluate MzScheme expressions and pass their values to VimL.
 
 ==============================================================================
-6. Dynamic loading                                 *mzscheme-dynamic* *E815*
+6. Using Function references                               *mzscheme-funcref*
+
+MzScheme interface allows use of |Funcref|s so you can call Vim functions
+directly from Scheme. For instance: >
+    function! MyAdd2(arg)
+       return a:arg + 2
+    endfunction
+    mz (define f2 (vim-eval "function(\"MyAdd2\")"))
+    mz (f2 7)
+< or : >
+    :mz (define indent (vim-eval "function('indent')"))
+    " return Vim indent for line 12
+    :mz (indent 12)
+<
+
+==============================================================================
+7. Dynamic loading                                 *mzscheme-dynamic* *E815*
 
 On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version|
 output then includes |+mzscheme/dyn|.
index 198c761..7d77b66 100644 (file)
@@ -1,4 +1,4 @@
-*if_ole.txt*    For Vim version 7.3.  Last change: 2008 Aug 16
+*if_ole.txt*    For Vim version 7.4.  Last change: 2008 Aug 16
 
 
                  VIM REFERENCE MANUAL    by Paul Moore
index ba7466b..95c607b 100644 (file)
@@ -1,4 +1,4 @@
-*if_perl.txt*   For Vim version 7.3.  Last change: 2010 Jul 21
+*if_perl.txt*   For Vim version 7.4.  Last change: 2012 Oct 25
 
 
                  VIM REFERENCE MANUAL    by Sven Verdoolaege
@@ -44,15 +44,17 @@ The Perl patches for Vim were made by:
        Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
        Matt Gerassimof
 
-Perl for MS-Windows can be found at:
-http://www.perl.com/CPAN/ports/nt/Standard/x86/
+Perl for MS-Windows can be found at: http://www.perl.com/
+The ActiveState one should work.
 
 ==============================================================================
 3. Using the Perl interface                            *perl-using*
 
                                                        *:perl* *:pe*
 :pe[rl] {cmd}          Execute Perl command {cmd}.  The current package
-                       is "main".
+                       is "main".  Simple example to test if `:perl` is
+                       working: >
+                               :perl VIM::Msg("Hello")
 
 :pe[rl] << {endpattern}
 {script}
@@ -173,7 +175,8 @@ VIM::Windows([{wn}...])     With no arguments, returns a list of all the windows
 VIM::DoCommand({cmd})  Executes Ex command {cmd}.
 
                                                        *perl-Eval*
-VIM::Eval({expr})      Evaluates {expr} and returns (success, val).
+VIM::Eval({expr})      Evaluates {expr} and returns (success, value) in list 
+                       context or just value in scalar context.
                        success=1 indicates that val contains the value of
                        {expr}; success=0 indicates a failure to evaluate
                        the expression.  '@x' returns the contents of register
index d324239..889101b 100644 (file)
@@ -1,4 +1,4 @@
-*if_pyth.txt*   For Vim version 7.3.  Last change: 2010 Aug 13
+*if_pyth.txt*   For Vim version 7.4.  Last change: 2013 Jul 10
 
 
                  VIM REFERENCE MANUAL    by Paul Moore
@@ -6,13 +6,16 @@
 
 The Python Interface to Vim                            *python* *Python*
 
-1. Commands                    |python-commands|
-2. The vim module              |python-vim|
-3. Buffer objects              |python-buffer|
-4. Range objects               |python-range|
-5. Window objects              |python-window|
-6. Dynamic loading             |python-dynamic|
-7. Python 3                    |python3|
+1. Commands                                    |python-commands|
+2. The vim module                              |python-vim|
+3. Buffer objects                              |python-buffer|
+4. Range objects                               |python-range|
+5. Window objects                              |python-window|
+6. Tab page objects                            |python-tabpage|
+7. vim.bindeval objects                                |python-bindeval-objects|
+8. pyeval(), py3eval() Vim functions           |python-pyeval|
+9. Dynamic loading                             |python-dynamic|
+10. Python 3                                   |python3|
 
 {Vi does not have any of these commands}
 
@@ -20,13 +23,16 @@ The Python 2.x interface is available only when Vim was compiled with the
 |+python| feature.
 The Python 3 interface is available only when Vim was compiled with the
 |+python3| feature.
+Both can be available at the same time, but read |python-2-and-3|.
 
 ==============================================================================
 1. Commands                                            *python-commands*
 
                                        *:python* *:py* *E205* *E263* *E264*
 :[range]py[thon] {stmt}
-                       Execute Python statement {stmt}.
+                       Execute Python statement {stmt}.  A simple check if
+                       the `:python` command is working: >
+                               :python print "Hello"
 
 :[range]py[thon] << {endmarker}
 {script}
@@ -51,9 +57,25 @@ Example: >
        EOF
        endfunction
 <
-Note: Python is very sensitive to the indenting.  Also make sure the "class"
-line and "EOF" do not have any indent.
-
+Note: Python is very sensitive to the indenting.  Make sure the "class" line
+and "EOF" do not have any indent.
+
+                                                       *:pydo*
+:[range]pydo {body}    Execute Python function "def _vim_pydo(line, linenr):
+                       {body}" for each line in the [range], with the
+                       function arguments being set to the text of each line
+                       in turn, without a trailing <EOL>, and the current
+                       line number. The function should return a string or
+                       None. If a string is returned, it becomes the text of
+                       the line in the current turn. The default for [range]
+                       is the whole file: "1,$".
+                       {not in Vi}
+
+Examples:
+>
+       :pydo return "%s\t%d" % (line[::-1], len(line))
+       :pydo if line: return "%4d: %s" % (linenr, line)
+<
                                                        *:pyfile* *:pyf*
 :[range]pyf[ile] {file}
                        Execute the Python script in {file}.  The whole
@@ -150,7 +172,27 @@ vim.eval(str)                                              *python-eval*
        [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
        'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
 
+vim.bindeval(str)                                      *python-bindeval*
+       Like |python-eval|, but returns special objects described in 
+       |python-bindeval-objects|. These python objects let you modify (|List| 
+       or |Dictionary|) or call (|Funcref|) vim objects.
+
+vim.strwidth(str)                                      *python-strwidth*
+       Like |strwidth()|: returns number of display cells str occupies, tab 
+       is counted as one cell.
+
+vim.foreach_rtp(callable)                              *python-foreach_rtp*
+       Call the given callable for each path in 'runtimepath' until either 
+       callable returns something but None, the exception is raised or there 
+       are no longer paths. If stopped in case callable returned non-None, 
+       vim.foreach_rtp function returns the value returned by callable.
 
+vim.chdir(*args, **kwargs)                             *python-chdir*
+vim.fchdir(*args, **kwargs)                            *python-fchdir*
+       Run os.chdir or os.fchdir, then all appropriate vim stuff.
+       Note: you should not use these functions directly, use os.chdir and 
+             os.fchdir instead. Behavior of vim.fchdir is undefined in case 
+             os.fchdir does not exist.
 
 Error object of the "vim" module
 
@@ -170,12 +212,12 @@ Constants of the "vim" module
        to which the variables referred.
 
 vim.buffers                                            *python-buffers*
-       A sequence object providing access to the list of vim buffers.  The
+       A mapping object providing access to the list of vim buffers.  The
        object supports the following operations: >
            :py b = vim.buffers[i]      # Indexing (read-only)
            :py b in vim.buffers        # Membership test
            :py n = len(vim.buffers)    # Number of elements
-           :py for b in vim.buffers:   # Sequential access
+           :py for b in vim.buffers:   # Iterating over buffer list
 <
 vim.windows                                            *python-windows*
        A sequence object providing access to the list of vim windows.  The
@@ -184,13 +226,28 @@ vim.windows                                               *python-windows*
            :py w in vim.windows        # Membership test
            :py n = len(vim.windows)    # Number of elements
            :py for w in vim.windows:   # Sequential access
+<      Note: vim.windows object always accesses current tab page. 
+       |python-tabpage|.windows objects are bound to parent |python-tabpage| 
+       object and always use windows from that tab page (or throw vim.error 
+       in case tab page was deleted). You can keep a reference to both 
+       without keeping a reference to vim module object or |python-tabpage|, 
+       they will not lose their properties in this case.
+
+vim.tabpages                                           *python-tabpages*
+       A sequence object providing access to the list of vim tab pages. The 
+       object supports the following operations: >
+           :py t = vim.tabpages[i]     # Indexing (read-only)
+           :py t in vim.tabpages       # Membership test
+           :py n = len(vim.tabpages)   # Number of elements
+           :py for t in vim.tabpages:  # Sequential access
 <
 vim.current                                            *python-current*
        An object providing access (via specific attributes) to various
        "current" objects available in vim:
                vim.current.line        The current line (RW)           String
-               vim.current.buffer      The current buffer (RO)         Buffer
-               vim.current.window      The current window (RO)         Window
+               vim.current.buffer      The current buffer (RW)         Buffer
+               vim.current.window      The current window (RW)         Window
+               vim.current.tabpage     The current tab page (RW)       TabPage
                vim.current.range       The current line range (RO)     Range
 
        The last case deserves a little explanation.  When the :python or
@@ -198,6 +255,42 @@ vim.current                                                *python-current*
        "current range".  A range is a bit like a buffer, but with all access
        restricted to a subset of lines.  See |python-range| for more details.
 
+       Note: When assigning to vim.current.{buffer,window,tabpage} it expects 
+       valid |python-buffer|, |python-window| or |python-tabpage| objects 
+       respectively. Assigning triggers normal (with |autocommand|s) 
+       switching to given buffer, window or tab page. It is the only way to 
+       switch UI objects in python: you can't assign to 
+       |python-tabpage|.window attribute. To switch without triggering 
+       autocommands use >
+           py << EOF
+           saved_eventignore = vim.options['eventignore']
+           vim.options['eventignore'] = 'all'
+           try:
+               vim.current.buffer = vim.buffers[2] # Switch to buffer 2
+           finally:
+               vim.options['eventignore'] = saved_eventignore
+           EOF
+<
+vim.vars                                               *python-vars*
+vim.vvars                                              *python-vvars*
+       Dictionary-like objects holding dictionaries with global (|g:|) and 
+       vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`, 
+       but faster.
+
+vim.options                                            *python-options*
+       Object partly supporting mapping protocol (supports setting and 
+       getting items) providing a read-write access to global options.
+       Note: unlike |:set| this provides access only to global options. You
+       cannot use this object to obtain or set local options' values or
+       access local-only options in any fashion. Raises KeyError if no global
+       option with such name exists (i.e. does not raise KeyError for
+       |global-local| options and global only options, but does for window-
+       and buffer-local ones).  Use |python-buffer| objects to access to
+       buffer-local options and |python-window| objects to access to
+       window-local options.
+
+       Type of this object is available via "Options" attribute of vim 
+       module.
 
 Output from Python                                     *python-output*
        Vim displays all Python code output in the Vim message area.  Normal
@@ -214,6 +307,88 @@ Output from Python                                 *python-output*
        supported, and may cause the program to crash.  This should probably be
        fixed.
 
+                   *python2-directory* *python3-directory* *pythonx-directory*
+Python 'runtimepath' handling                          *python-special-path*
+
+In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for 
+the list of paths found in 'runtimepath': with this directory in sys.path and 
+vim.path_hooks in sys.path_hooks python will try to load module from 
+{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for 
+each {rtp} found in 'runtimepath'.
+
+Implementation is similar to the following, but written in C: >
+
+    from imp import find_module, load_module
+    import vim
+    import sys
+
+    class VimModuleLoader(object):
+        def __init__(self, module):
+            self.module = module
+
+        def load_module(self, fullname, path=None):
+            return self.module
+
+    def _find_module(fullname, oldtail, path):
+        idx = oldtail.find('.')
+        if idx > 0:
+            name = oldtail[:idx]
+            tail = oldtail[idx+1:]
+            fmr = find_module(name, path)
+            module = load_module(fullname[:-len(oldtail)] + name, *fmr)
+            return _find_module(fullname, tail, module.__path__)
+        else:
+            fmr = find_module(fullname, path)
+            return load_module(fullname, *fmr)
+
+    # It uses vim module itself in place of VimPathFinder class: it does not 
+    # matter for python which object has find_module function attached to as 
+    # an attribute.
+    class VimPathFinder(object):
+        @classmethod
+        def find_module(cls, fullname, path=None):
+            try:
+                return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
+            except ImportError:
+                return None
+
+        @classmethod
+        def load_module(cls, fullname, path=None):
+            return _find_module(fullname, fullname, path or vim._get_paths())
+
+    def hook(path):
+        if path == vim.VIM_SPECIAL_PATH:
+            return VimPathFinder
+        else:
+            raise ImportError
+
+    sys.path_hooks.append(hook)
+
+vim.VIM_SPECIAL_PATH                                   *python-VIM_SPECIAL_PATH*
+       String constant used in conjunction with vim path hook. If path hook 
+       installed by vim is requested to handle anything but path equal to 
+       vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other 
+       case it uses special loader.
+
+       Note: you must not use value of this constant directly, always use 
+             vim.VIM_SPECIAL_PATH object.
+
+vim.find_module(...)                                   *python-find_module*
+vim.path_hook(path)                                    *python-path_hook*
+       Methods or objects used to implement path loading as described above. 
+       You should not be using any of these directly except for vim.path_hook 
+       in case you need to do something with sys.meta_path. It is not 
+       guaranteed that any of the objects will exist in the future vim 
+       versions.
+
+vim._get_paths                                         *python-_get_paths*
+       Methods returning a list of paths which will be searched for by path 
+       hook. You should not rely on this method being present in future 
+       versions, but can use it for debugging.
+
+       It returns a list of {rtp}/python2 (or {rtp}/python3) and 
+       {rtp}/pythonx directories for each {rtp} in 'runtimepath'.
+
 ==============================================================================
 3. Buffer objects                                      *python-buffer*
 
@@ -222,8 +397,9 @@ Buffer objects represent vim buffers.  You can obtain them in a number of ways:
        - from indexing vim.buffers (|python-buffers|)
        - from the "buffer" attribute of a window (|python-window|)
 
-Buffer objects have one read-only attribute - name - the full file name for
-the buffer.  They also have three methods (append, mark, and range; see below).
+Buffer objects have two read-only attributes - name - the full file name for
+the buffer, and number - the buffer number.  They also have three methods
+(append, mark, and range; see below).
 
 You can also treat buffer objects as sequence objects.  In this context, they
 act as if they were lists (yes, they are mutable) of strings, with each
@@ -238,6 +414,24 @@ Buffer indexes start at zero, as is normal in Python.  This differs from vim
 line numbers, which start from 1.  This is particularly relevant when dealing
 with marks (see below) which use vim line numbers.
 
+The buffer object attributes are:
+       b.vars          Dictionary-like object used to access 
+                       |buffer-variable|s.
+       b.options       Mapping object (supports item getting, setting and 
+                       deleting) that provides access to buffer-local options 
+                       and buffer-local values of |global-local| options. Use 
+                       |python-window|.options if option is window-local, 
+                       this object will raise KeyError. If option is 
+                       |global-local| and local value is missing getting it 
+                       will return None.
+       b.name          String, RW. Contains buffer name (full path).
+                       Note: when assigning to b.name |BufFilePre| and 
+                       |BufFilePost| autocommands are launched.
+       b.number        Buffer number. Can be used as |python-buffers| key.
+                       Read-only.
+       b.valid         True or False. Buffer object becomes invalid when 
+                       corresponding buffer is wiped out.
+
 The buffer object methods are:
        b.append(str)   Append a line to the buffer
        b.append(str, nr)  Idem, below line "nr"
@@ -256,6 +450,8 @@ Note that when adding a line it must not contain a line break character '\n'.
 A trailing '\n' is allowed and ignored, so that you can do: >
        :py b.append(f.readlines())
 
+Buffer object type is available using "Buffer" attribute of vim module.
+
 Examples (assume b is the current buffer) >
        :py print b.name                # write the buffer file name
        :py b[0] = "hello!!!"           # replace the top line
@@ -267,6 +463,9 @@ Examples (assume b is the current buffer) >
        :py n = len(b)                  # number of lines
        :py (row,col) = b.mark('a')     # named mark
        :py r = b.range(1,5)            # a sub-range of the buffer
+       :py b.vars["foo"] = "bar"       # assign b:foo variable
+       :py b.options["ff"] = "dos"     # set fileformat
+       :py del b.options["ar"]         # same as :set autoread<
 
 ==============================================================================
 4. Range objects                                       *python-range*
@@ -294,6 +493,8 @@ The range object methods are:
                        for Python's built-in list objects.
        r.append(list, nr)  Idem, after line "nr"
 
+Range object type is available using "Range" attribute of vim module.
+
 Example (assume r is the current range):
        # Send all lines in a range to the default printer
        vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
@@ -304,6 +505,8 @@ Example (assume r is the current range):
 Window objects represent vim windows.  You can obtain them in a number of ways:
        - via vim.current.window (|python-current|)
        - from indexing vim.windows (|python-windows|)
+       - from indexing "windows" attribute of a tab page (|python-tabpage|)
+       - from the "window" attribute of a tab page (|python-tabpage|)
 
 You can manipulate window objects only through their attributes.  They have no
 methods, and no sequence or other interface.
@@ -314,11 +517,167 @@ Window attributes are:
                                This is a tuple, (row,col).
        height (read-write)     The window height, in rows
        width (read-write)      The window width, in columns
+       vars (read-only)        The window |w:| variables. Attribute is 
+                               unassignable, but you can change window 
+                               variables this way
+       options (read-only)     The window-local options. Attribute is 
+                               unassignable, but you can change window 
+                               options this way. Provides access only to 
+                               window-local options, for buffer-local use 
+                               |python-buffer| and for global ones use 
+                               |python-options|. If option is |global-local| 
+                               and local value is missing getting it will 
+                               return None.
+       number (read-only)      Window number.  The first window has number 1.
+                               This is zero in case it cannot be determined
+                               (e.g. when the window object belongs to other
+                               tab page).
+       row, col (read-only)    On-screen window position in display cells.
+                               First position is zero.
+       tabpage (read-only)     Window tab page.
+       valid (read-write)      True or False. Window object becomes invalid 
+                               when corresponding window is closed.
+
 The height attribute is writable only if the screen is split horizontally.
 The width attribute is writable only if the screen is split vertically.
 
+Window object type is available using "Window" attribute of vim module.
+
 ==============================================================================
-6. Dynamic loading                                     *python-dynamic*
+6. Tab page objects                                    *python-tabpage*
+
+Tab page objects represent vim tab pages. You can obtain them in a number of 
+ways:
+       - via vim.current.tabpage (|python-current|)
+       - from indexing vim.tabpages (|python-tabpages|)
+
+You can use this object to access tab page windows. They have no methods and 
+no sequence or other interfaces.
+
+Tab page attributes are:
+       number          The tab page number like the one returned by 
+                       |tabpagenr()|.
+       windows         Like |python-windows|, but for current tab page.
+       vars            The tab page |t:| variables.
+       window          Current tabpage window.
+       valid           True or False. Tab page object becomes invalid when 
+                       corresponding tab page is closed.
+
+TabPage object type is available using "TabPage" attribute of vim module.
+
+==============================================================================
+7. vim.bindeval objects                                *python-bindeval-objects*
+
+vim.Dictionary object                          *python-Dictionary*
+    Dictionary-like object providing access to vim |Dictionary| type.
+    Attributes:
+        Attribute  Description ~
+        locked     One of                       *python-.locked*
+                    Value           Description ~
+                    zero            Variable is not locked
+                    vim.VAR_LOCKED  Variable is locked, but can be unlocked
+                    vim.VAR_FIXED   Variable is locked and can't be unlocked
+                   Read-write. You can unlock locked variable by assigning 
+                   `True` or `False` to this attribute. No recursive locking 
+                   is supported.
+        scope      One of
+                    Value              Description ~
+                    zero               Dictionary is not a scope one
+                    vim.VAR_DEF_SCOPE  |g:| or |l:| dictionary
+                    vim.VAR_SCOPE      Other scope dictionary,
+                                       see |internal-variables|
+    Methods (note: methods do not support keyword arguments):
+        Method      Description ~
+        keys()      Returns a list with dictionary keys.
+        values()    Returns a list with dictionary values.
+        items()     Returns a list of 2-tuples with dictionary contents.
+        update(iterable), update(dictionary), update(**kwargs)
+                    Adds keys to dictionary.
+        get(key[, default=None])
+                    Obtain key from dictionary, returning the default if it is 
+                    not present.
+        pop(key[, default])
+                    Remove specified key from dictionary and return 
+                    corresponding value. If key is not found and default is 
+                    given returns the default, otherwise raises KeyError.
+        popitem()
+                    Remove random key from dictionary and return (key, value) 
+                    pair.
+        has_key(key)
+                    Check whether dictionary contains specified key, similar 
+                    to `key in dict`.
+
+        __new__(), __new__(iterable), __new__(dictionary), __new__(update)
+                    You can use `vim.Dictionary()` to create new vim 
+                    dictionaries. `d=vim.Dictionary(arg)` is the same as 
+                    `d=vim.bindeval('{}');d.update(arg)`. Without arguments 
+                    constructs empty dictionary.
+
+    Examples: >
+        d = vim.Dictionary(food="bar")         # Constructor
+        d['a'] = 'b'                           # Item assignment
+        print d['a']                           # getting item
+        d.update({'c': 'd'})                   # .update(dictionary)
+        d.update(e='f')                                # .update(**kwargs)
+        d.update((('g', 'h'), ('i', 'j')))     # .update(iterable)
+        for key in d.keys():                   # .keys()
+        for val in d.values():                 # .values()
+        for key, val in d.items():             # .items()
+        print isinstance(d, vim.Dictionary)    # True
+        for key in d:                          # Iteration over keys
+        class Dict(vim.Dictionary):            # Subclassing
+<
+    Note: when iterating over keys you should not modify dictionary.
+
+vim.List object                                        *python-List*
+    Sequence-like object providing access to vim |List| type.
+    Supports `.locked` attribute, see |python-.locked|. Also supports the 
+    following methods:
+        Method          Description ~
+        extend(item)    Add items to the list.
+
+        __new__(), __new__(iterable)
+                        You can use `vim.List()` to create new vim lists. 
+                        `l=vim.List(iterable)` is the same as 
+                        `l=vim.bindeval('[]');l.extend(iterable)`. Without 
+                        arguments constructs empty list.
+    Examples: >
+        l = vim.List("abc")            # Constructor, result: ['a', 'b', 'c']
+        l.extend(['abc', 'def'])       # .extend() method
+        print l[1:]                    # slicing
+        l[:0] = ['ghi', 'jkl']         # slice assignment
+        print l[0]                     # getting item
+        l[0] = 'mno'                   # assignment
+        for i in l:                    # iteration
+        print isinstance(l, vim.List)  # True
+        class List(vim.List):          # Subclassing
+
+vim.Function object                            *python-Function*
+    Function-like object, acting like vim |Funcref| object. Supports `.name` 
+    attribute and is callable. Accepts special keyword argument `self`, see 
+    |Dictionary-function|. You can also use `vim.Function(name)` constructor, 
+    it is the same as `vim.bindeval('function(%s)'%json.dumps(name))`.
+
+    Examples: >
+        f = vim.Function('tr')                 # Constructor
+        print f('abc', 'a', 'b')               # Calls tr('abc', 'a', 'b')
+        vim.command('''
+            function DictFun() dict
+                return self
+            endfunction
+        ''')
+        f = vim.bindeval('function("DictFun")')
+        print f(self={})                       # Like call('DictFun', [], {})
+        print isinstance(f, vim.Function)      # True
+
+==============================================================================
+8. pyeval() and py3eval() Vim functions                        *python-pyeval*
+
+To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()| 
+functions to evaluate Python expressions and pass their values to VimL.
+
+==============================================================================
+9. Dynamic loading                                     *python-dynamic*
 
 On MS-Windows the Python library can be loaded dynamically.  The |:version|
 output then includes |+python/dyn|.
@@ -335,12 +694,17 @@ Currently the name is "python24.dll".  That is for Python 2.4.  To know for
 sure edit "gvim.exe" and search for "python\d*.dll\c".
 
 ==============================================================================
-7. Python 3                                            *python3*
+10. Python 3                                           *python3*
 
                                                        *:py3* *:python3*
-The |:py3| and |:python3| commands work similar to |:python|.
-                                                       *:py3file*
-The |:py3file| command works similar to |:pyfile|.
+The `:py3` and `:python3` commands work similar to `:python`.  A simple check
+if the `:py3` command is working: >
+       :py3 print("Hello")
+<                                                      *:py3file*
+The `:py3file` command works similar to `:pyfile`.
+                                                       *:py3do* *E863*
+The `:py3do` command works similar to `:pydo`.
+
 
 Vim can be built in four ways (:version output):
 1. No Python support       (-python, -python3)
@@ -348,14 +712,14 @@ Vim can be built in four ways (:version output):
 3. Python 3 support only    (-python, +python3 or +python3/dyn)
 4. Python 2 and 3 support   (+python/dyn, +python3/dyn)
 
-Some more details on the special case 4:
+Some more details on the special case 4:  *python-2-and-3*
 
 When Python 2 and Python 3 are both supported they must be loaded dynamically.
 
 When doing this on Linux/Unix systems and importing global symbols, this leads
 to a crash when the second Python version is used.  So either global symbols
 are loaded but only one Python version is activated, or no global symbols are
-loaded. The latter makes Python's "import" fail on libaries that expect the
+loaded. The latter makes Python's "import" fail on libraries that expect the
 symbols to be provided by Vim.
                                                        *E836* *E837*
 Vim's configuration script makes a guess for all libraries based on one
@@ -377,6 +741,23 @@ To work around such problems there are these options:
 3. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration.  This
    may crash Vim though.
 
+                                                       *E880*
+Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
+       :py vim.command("qall!")
+<
+
+                                                       *has-python*
+You can test what Python version is available with: >
+       if has('python')
+         echo 'there is Python 2.x'
+       elseif has('python3')
+         echo 'there is Python 3.x'
+       endif
+
+Note however, that when Python 2 and 3 are both available and loaded
+dynamically, these has() calls will try to load them.  If only one can be
+loaded at a time, just checking if Python 2 or 3 are available will prevent
+the other one from being available.
 
 ==============================================================================
  vim:tw=78:ts=8:ft=help:norl:
index 161911a..0a32d87 100644 (file)
@@ -1,4 +1,4 @@
-*if_ruby.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*if_ruby.txt*   For Vim version 7.4.  Last change: 2012 Aug 02
 
 
                  VIM REFERENCE MANUAL    by Shugo Maeda
@@ -25,7 +25,8 @@ downloading Ruby there.
 1. Commands                                            *ruby-commands*
 
                                                        *:ruby* *:rub*
-:rub[y] {cmd}          Execute Ruby command {cmd}.
+:rub[y] {cmd}          Execute Ruby command {cmd}.  A command to try it out: >
+                               :ruby print "Hello"
 
 :rub[y] << {endpattern}
 {script}
@@ -187,12 +188,12 @@ $curbuf           The current buffer object.
 ==============================================================================
 6. Dynamic loading                                     *ruby-dynamic*
 
-On MS-Windows the Ruby library can be loaded dynamically.  The |:version|
-output then includes |+ruby/dyn|.
+On MS-Windows and Unix the Ruby library can be loaded dynamically.  The
+|:version| output then includes |+ruby/dyn|.
 
-This means that Vim will search for the Ruby DLL file only when needed.  When
-you don't use the Ruby interface you don't need it, thus you can use Vim
-without this DLL file.
+This means that Vim will search for the Ruby DLL file or shared library only
+when needed.  When you don't use the Ruby interface you don't need it, thus
+you can use Vim even though this library file is not on your system.
 
 You need to install the right version of Ruby for this to work.  You can find
 the package to download from:
@@ -208,6 +209,8 @@ for sure edit "gvim.exe" and search for "ruby\d*.dll\c".
 
 If you want to build Vim with Ruby 1.9.1, you need to edit the config.h file
 and comment-out the check for _MSC_VER.
+You may also need to rename the include directory name to match the version,
+strangely for Ruby 1.9.3 the directory is called 1.9.1.
 
 ==============================================================================
  vim:tw=78:ts=8:ft=help:norl:
index 1af1c58..a3d5208 100644 (file)
@@ -1,4 +1,4 @@
-*if_sniff.txt* For Vim version 7.3.  Last change: 2005 Mar 29
+*if_sniff.txt* For Vim version 7.4.  Last change: 2005 Mar 29
 
 
                  VIM REFERENCE MANUAL
index e7c2556..d6726a3 100644 (file)
@@ -1,4 +1,4 @@
-*if_tcl.txt*    For Vim version 7.3.  Last change: 2008 Aug 16
+*if_tcl.txt*    For Vim version 7.4.  Last change: 2012 Aug 02
 
 
                  VIM REFERENCE MANUAL    by Ingo Wilken
@@ -27,7 +27,9 @@ comments, ideas etc to <Ingo.Wilken@informatik.uni-oldenburg.de>
 1. Commands                            *tcl-ex-commands* *E571* *E572*
 
                                                        *:tcl* *:tc*
-:tc[l] {cmd}           Execute Tcl command {cmd}.
+:tc[l] {cmd}           Execute Tcl command {cmd}.  A simple check if `:tcl`
+                       is working: >
+                               :tcl puts "Hello"
 
 :[range]tc[l] << {endmarker}
 {script}
index 85370f9..74e0804 100644 (file)
@@ -1,4 +1,4 @@
-*indent.txt*    For Vim version 7.3.  Last change: 2010 Jul 30
+*indent.txt*    For Vim version 7.4.  Last change: 2013 Aug 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -128,13 +128,20 @@ have changed the indent by typing <BS>, <Tab>, or <Space> in the indent or
 used CTRL-T or CTRL-D.
 
                                                *cinoptions-values*
-The 'cinoptions' option sets how Vim performs indentation.  In the list below,
+The 'cinoptions' option sets how Vim performs indentation.  The value after
+the option character can be one of these (N is any number):
+       N       indent N spaces
+       -N      indent N spaces to the left
+       Ns      N times 'shiftwidth' spaces
+       -Ns     N times 'shiftwidth' spaces to the left
+
+In the list below,
 "N" represents a number of your choice (the number can be negative).  When
 there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
 "1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc.  You can use a
-decimal point, too: "-0.5s" is minus half a 'shiftwidth'.  The examples below
-assume a 'shiftwidth' of 4.
-
+decimal point, too: "-0.5s" is minus half a 'shiftwidth'.
+The examples below assume a 'shiftwidth' of 4.
+                                                       *cino->*
        >N    Amount added for "normal" indent.  Used after a line that should
              increase the indent (lines starting with "if", an opening brace,
              etc.).  (default 'shiftwidth').
@@ -145,6 +152,7 @@ assume a 'shiftwidth' of 4.
                      foo;              foo;                      foo;
                  }                   }                   }
 <
+                                                       *cino-e*
        eN    Add N to the prevailing indent inside a set of braces if the
              opening brace at the End of the line (more precise: is not the
              first character in a line).  This is useful if you want a
@@ -160,6 +168,7 @@ assume a 'shiftwidth' of 4.
                      bar;                bar;                bar;
                  }                   }                   }
 <
+                                                       *cino-n*
        nN    Add N to the prevailing indent for a statement after an "if",
              "while", etc., if it is NOT inside a set of braces.  This is
              useful if you want a different indent when there is no '{'
@@ -174,6 +183,7 @@ assume a 'shiftwidth' of 4.
                      bar;                bar;                bar;
                  }                   }                   }
 <
+                                                       *cino-f*
        fN    Place the first opening brace of a function or other block in
              column N.  This applies only for an opening brace that is not
              inside other braces and is at the start of the line.  What comes
@@ -184,6 +194,7 @@ assume a 'shiftwidth' of 4.
                  {                     {                     {
                      int foo;              int foo;              int foo;
 <
+                                                       *cino-{*
        {N    Place opening braces N characters from the prevailing indent.
              This applies only for opening braces that are inside other
              braces.  (default 0).
@@ -193,6 +204,7 @@ assume a 'shiftwidth' of 4.
                  {                     {                     {
                      foo;                foo;                foo;
 <
+                                                       *cino-}*
        }N    Place closing braces N characters from the matching opening
              brace.  (default 0).
 
@@ -202,6 +214,7 @@ assume a 'shiftwidth' of 4.
                      foo;                foo;                foo;
                  }                   }                     }
 <
+                                                       *cino-^*
        ^N    Add N to the prevailing indent inside a set of braces if the
              opening brace is in column 0.  This can specify a different
              indent for whole of a function (some may like to set it to a
@@ -216,6 +229,7 @@ assume a 'shiftwidth' of 4.
                      }                 }                 }
                  }                   }                   }
 <
+                                                       *cino-L*
        LN    Controls placement of jump labels. If N is negative, the label
              will be placed at column 1. If N is non-negative, the indent of
              the label will be the prevailing indent minus N.  (default -1).
@@ -229,6 +243,7 @@ assume a 'shiftwidth' of 4.
                      }                   }                   }
                  }                   }                   }
 <
+                                                       *cino-:*
        :N    Place case labels N characters from the indent of the switch().
              (default 'shiftwidth').
 
@@ -240,6 +255,7 @@ assume a 'shiftwidth' of 4.
                      default:        default:
                  }                   }
 <
+                                                       *cino-=*
        =N    Place statements occurring after a case label N characters from
              the indent of the label.  (default 'shiftwidth').
 
@@ -247,6 +263,7 @@ assume a 'shiftwidth' of 4.
                   case 11:             case 11:  a = a + 1;
                       a = a + 1;                 b = b + 1;
 <
+                                                       *cino-l*
        lN    If N != 0 Vim will align with a case label instead of the
              statement after it in the same line.
 
@@ -256,8 +273,10 @@ assume a 'shiftwidth' of 4.
                                    break;            break;
                                }                 }
 <
+                                                       *cino-b*
        bN    If N != 0 Vim will align a final "break" with the case label,
              so that case..break looks like a sort of block.  (default: 0).
+             When using 1, consider adding "0=break" to 'cinkeys'.
 
                cino=               cino=b1 >
                  switch (x)          switch(x)
@@ -271,6 +290,7 @@ assume a 'shiftwidth' of 4.
                          break;          break;
                  }                   }
 <
+                                                       *cino-g*
        gN    Place C++ scope declarations N characters from the indent of the
              block they are in.  (default 'shiftwidth').  A scope declaration
              can be "public:", "protected:" or "private:".
@@ -282,6 +302,7 @@ assume a 'shiftwidth' of 4.
                      private:        private:
                  }                   }
 <
+                                                       *cino-h*
        hN    Place statements occurring after a C++ scope declaration N
              characters from the indent of the label.  (default
              'shiftwidth').
@@ -290,6 +311,21 @@ assume a 'shiftwidth' of 4.
                   public:              public:   a = a + 1;
                       a = a + 1;                 b = b + 1;
 <
+                                                       *cino-N*
+       NN    Indent inside C++ namespace N characters extra compared to a
+             normal block.  (default 0).
+
+               cino=                      cino=N-s >
+                 namespace {                namespace {
+                     void function();       void function();
+                 }                          }
+
+                 namespace my               namespace my
+                 {                          {
+                     void function();       void function();
+                 }                          }
+<
+                                                       *cino-p*
        pN    Parameter declarations for K&R-style function declarations will
              be indented N characters from the margin.  (default
              'shiftwidth').
@@ -299,6 +335,7 @@ assume a 'shiftwidth' of 4.
                      int a;          int a;                      int a;
                      char b;         char b;                     char b;
 <
+                                                       *cino-t*
        tN    Indent a function return type declaration N characters from the
              margin.  (default 'shiftwidth').
 
@@ -306,6 +343,7 @@ assume a 'shiftwidth' of 4.
                      int             int                        int
                  func()              func()              func()
 <
+                                                       *cino-i*
        iN    Indent C++ base class declarations and constructor
              initializations, if they start in a new line (otherwise they
              are aligned at the right side of the ':').
@@ -319,13 +357,18 @@ assume a 'shiftwidth' of 4.
                      BaseClass(3)          BaseClass(3)
                  {}                        {}
 <
-       +N    Indent a continuation line (a line that spills onto the next) N
-             additional characters.  (default 'shiftwidth').
+                                                       *cino-+*
+       +N    Indent a continuation line (a line that spills onto the next)
+              inside a function N additional characters.  (default
+              'shiftwidth').
+              Outside of a function, when the previous line ended in a
+              backslash, the 2 * N is used.
 
                cino=                     cino=+10 >
                  a = b + 9 *               a = b + 9 *
                      c;                              c;
 <
+                                                       *cino-c*
        cN    Indent comment lines after the comment opener, when there is no
              other text with which to align, N characters from the comment
              opener.  (default 3).  See also |format-comments|.
@@ -335,6 +378,7 @@ assume a 'shiftwidth' of 4.
                     text.                       text.
                   */                        */
 <
+                                                       *cino-C*
        CN    When N is non-zero, indent comment lines by the amount specified
              with the c flag above even if there is other text behind the
              comment opener.  (default 0).
@@ -345,12 +389,14 @@ assume a 'shiftwidth' of 4.
                  ********/                 ********/
 <            (Example uses ":set comments& comments-=s1:/* comments^=s0:/*")
 
+                                                       *cino-/*
        /N    Indent comment lines N characters extra.  (default 0).
                cino=                     cino=/4 >
                  a = b;                    a = b;
                  /* comment */                 /* comment */
                  c = d;                    c = d;
 <
+                                                       *cino-(*
        (N    When in unclosed parentheses, indent N characters from the line
              with the unclosed parentheses.  Add a 'shiftwidth' for every
              unclosed parentheses.  When N is 0 or the unclosed parentheses
@@ -366,6 +412,7 @@ assume a 'shiftwidth' of 4.
                          (c2 || c3))           (c2 || c3))
                     {                         {
 <
+                                                       *cino-u*
        uN    Same as (N, but for one level deeper.  (default 'shiftwidth').
 
                cino=                     cino=u2 >
@@ -373,6 +420,7 @@ assume a 'shiftwidth' of 4.
                          && (c22345                && (c22345
                              || c3))                 || c3))
 <
+                                                       *cino-U*
        UN    When N is non-zero, do not ignore the indenting specified by
              ( or u in case that the unclosed parentheses is the first
              non-white character in its line.  (default 0).
@@ -384,6 +432,7 @@ assume a 'shiftwidth' of 4.
                       c3                           c3
                      ) && c4;                  ) && c4;
 <
+                                                       *cino-w*
        wN    When in unclosed parentheses and N is non-zero and either
              using "(0" or "u0", respectively, or using "U0" and the unclosed
              parentheses is the first non-white character in its line, line
@@ -396,6 +445,7 @@ assume a 'shiftwidth' of 4.
                                || c3))             || c3))
                      foo;                      foo;
 <
+                                                       *cino-W*
        WN    When in unclosed parentheses and N is non-zero and either
              using "(0" or "u0", respectively and the unclosed parentheses is
              the last non-white character in its line and it is not the
@@ -410,6 +460,23 @@ assume a 'shiftwidth' of 4.
                  a_short_line(argument,    a_short_line(argument,
                               argument);                argument);
 <
+                                                       *cino-k*
+       kN    When in unclosed parentheses which follow "if", "for" or
+             "while" and N is non-zero, overrides the behaviour defined by
+             "(N": causes the indent to be N characters relative to the outer
+             context (i.e. the line where "if", "for" or "while" is).  Has
+             no effect on deeper levels of nesting.  Affects flags like "wN"
+             only for the "if", "for" and "while" conditions.  If 0, defaults
+             to behaviour defined by the "(N" flag.  (default: 0).
+
+               cino=(0                    cino=(0,ks >
+                 if (condition1            if (condition1
+                     && condition2)                && condition2)
+                     action();                 action();
+                 function(argument1        function(argument1
+                          && argument2);            && argument2);
+<
+                                                       *cino-m*
        mN    When N is non-zero, line up a line starting with a closing
              parentheses with the first character of the line with the
              matching opening parentheses.  (default 0).
@@ -424,6 +491,7 @@ assume a 'shiftwidth' of 4.
                     )                      )
                      foo;                      foo;
 <
+                                                       *cino-M*
        MN    When N is non-zero, line up a line starting with a closing
              parentheses with the first character of the previous line.
              (default 0).
@@ -433,10 +501,11 @@ assume a 'shiftwidth' of 4.
                         cond2                     cond2
                     )                             )
 <
-                                       *java-cinoptions* *java-indenting*
-       jN    Indent java anonymous classes correctly.  The value 'N' is
-             currently unused but must be non-zero (e.g. 'j1').  'j1' will
-             indent for example the following code snippet correctly: >
+                               *java-cinoptions* *java-indenting* *cino-j*
+       jN    Indent Java anonymous classes correctly.  Also works well for
+             Javascript.  The value 'N' is currently unused but must be
+             non-zero (e.g. 'j1').  'j1' will indent for example the
+             following code snippet correctly: >
 
                object.add(new ChangeListener() {
                    public void stateChanged(ChangeEvent e) {
@@ -444,10 +513,11 @@ assume a 'shiftwidth' of 4.
                    }
                });
 <
-                               *javascript-cinoptions* *javascript-indenting*
+                       *javascript-cinoptions* *javascript-indenting* *cino-J*
        JN    Indent JavaScript object declarations correctly by not confusing
              them with labels.  The value 'N' is currently unused but must be 
-             non-zero (e.g. 'J1'). >
+             non-zero (e.g. 'J1').  If you enable this you probably also want
+             to set |cino-j|. >
 
                var bar = {
                    foo: {
@@ -462,23 +532,28 @@ assume a 'shiftwidth' of 4.
                    }
                }
 <
+                                                               *cino-)*
        )N    Vim searches for unclosed parentheses at most N lines away.
              This limits the time needed to search for parentheses.  (default
              20 lines).
 
+                                                               *cino-star*
        *N    Vim searches for unclosed comments at most N lines away.  This
              limits the time needed to search for the start of a comment.
+             If your /* */ comments stop indenting after N lines this is the
+             value you will want to change.
              (default 70 lines).
 
+                                                               *cino-#*
        #N    When N is non-zero recognize shell/Perl comments, starting with
-             '#'.  Default N is zero: don't recognizes '#' comments.  Note
+             '#'.  Default N is zero: don't recognize '#' comments.  Note
              that lines starting with # will still be seen as preprocessor
              lines.
 
 
 The defaults, spelled out in full, are:
-       cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,
-                       c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
+       cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
+                       c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
 
 Vim puts a line in column 1 if:
 - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
@@ -502,15 +577,117 @@ $VIMRUNTIME/indent directory for examples.
 REMARKS ABOUT SPECIFIC INDENT FILES ~
 
 
+CLOJURE                                        *ft-clojure-indent* *clojure-indent*
+
+Clojure indentation differs somewhat from traditional Lisps, due in part to
+the use of square and curly brackets, and otherwise by community convention.
+These conventions are not always universally followed, so the Clojure indent
+script offers a few configurable options, listed below.
+
+If the current vim does not include searchpairpos(), the indent script falls
+back to normal 'lisp' indenting, and the following options are ignored.
+
+                                                       *g:clojure_maxlines*
+
+Set maximum scan distance of searchpairpos(). Larger values trade performance
+for correctness when dealing with very long forms. A value of 0 will scan
+without limits.
+>
+       " Default
+       let g:clojure_maxlines = 100
+<
+
+                                               *g:clojure_fuzzy_indent*
+                                       *g:clojure_fuzzy_indent_patterns*
+                                       *g:clojure_fuzzy_indent_blacklist*
+
+The 'lispwords' option is a list of comma-separated words that mark special
+forms whose subforms must be indented with two spaces.
+
+For example:
+>
+       (defn bad []
+             "Incorrect indentation")
+
+       (defn good []
+         "Correct indentation")
+<
+If you would like to specify 'lispwords' with a |pattern| instead, you can use
+the fuzzy indent feature:
+>
+       " Default
+       let g:clojure_fuzzy_indent = 1
+       let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let']
+       let g:clojure_fuzzy_indent_blacklist =
+               \ ['-fn$', '\v^with-%(meta|out-str|loading-context)$']
+
+       " Legacy comma-delimited string version; the list format above is
+       " recommended. Note that patterns are implicitly anchored with ^ and $
+       let g:clojure_fuzzy_indent_patterns = 'with.*,def.*,let.*'
+<
+|g:clojure_fuzzy_indent_patterns| and |g:clojure_fuzzy_indent_blacklist| are
+|Lists| of patterns that will be matched against the unquoted, unqualified
+symbol at the head of a list. This means that a pattern like "^foo" will match
+all these candidates: "foobar", "my.ns/foobar", and "#'foobar".
+
+Each candidate word is tested for special treatment in this order:
+
+       1. Return true if word is literally in 'lispwords'
+       2. Return false if word matches a pattern in
+          |g:clojure_fuzzy_indent_blacklist|
+       3. Return true if word matches a pattern in
+          |g:clojure_fuzzy_indent_patterns|
+       4. Return false and indent normally otherwise
+
+                                       *g:clojure_special_indent_words*
+
+Some forms in Clojure are indented so that every subform is indented only two
+spaces, regardless of 'lispwords'. If you have a custom construct that should
+be indented in this idiosyncratic fashion, you can add your symbols to the
+default list below.
+>
+       " Default
+       let g:clojure_special_indent_words =
+          \ 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
+<
+
+                                       *g:clojure_align_multiline_strings*
+
+Align subsequent lines in multiline strings to the column after the opening
+quote, instead of the same column.
+
+For example:
+>
+       (def default
+         "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+         eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
+         enim ad minim veniam, quis nostrud exercitation ullamco laboris
+         nisi ut aliquip ex ea commodo consequat.")
+
+       (def aligned
+         "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+          eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
+          enim ad minim veniam, quis nostrud exercitation ullamco laboris
+          nisi ut aliquip ex ea commodo consequat.")
+<
+This option is off by default.
+>
+       " Default
+       let g:clojure_align_multiline_strings = 0
+<
+
+
 FORTRAN                                                        *ft-fortran-indent*
 
-Block if, select case, and where constructs are indented.  Comments, labelled
-statements and continuation lines are indented if the Fortran is in free
-source form, whereas they are not indented if the Fortran is in fixed source
-form because of the left margin requirements.  Hence manual indent corrections
-will be necessary for labelled statements and continuation lines when fixed
-source form is being used.  For further discussion of the method used for the
-detection of source format see |ft-fortran-syntax|.
+Block if, select case, where, and forall constructs are indented.  So are
+type, interface, associate, block, and enum constructs.  The indenting of
+subroutines, functions, modules, and program blocks is optional.  Comments,
+labelled statements and continuation lines are indented if the Fortran is in
+free source form, whereas they are not indented if the Fortran is in fixed
+source form because of the left margin requirements.  Hence manual indent
+corrections will be necessary for labelled statements and continuation lines
+when fixed source form is being used.  For further discussion of the method
+used for the detection of source format see |ft-fortran-syntax|.
 
 Do loops ~
 All do loops are left unindented by default.  Do loops can be unstructured in
@@ -537,6 +714,64 @@ autocommand such as >
 to get do loops indented in .f90 files and left alone in Fortran files with
 other extensions such as .for.
 
+Program units ~
+The indenting of program units (subroutines, functions, modules, and program
+blocks) is enabled by default but can be suppressed if a lighter, screen-width
+preserving indent style is desired.  To suppress the indenting of program
+units for all fortran files set the global fortran_indent_less variable in
+your .vimrc as follows >
+
+  let fortran_indent_less=1
+
+A finer level of suppression can be achieved by setting the corresponding
+buffer-local variable as follows >
+
+  let b:fortran_indent_less=1
+
+
+HTML                           *ft-html-indent* *html-indent* *html-indenting*
+
+This is about variables you can set in your vimrc to customize HTML indenting.
+
+You can set the indent for the first line after <script> and <style>
+"blocktags" (default "zero"): >
+
+      :let g:html_indent_script1 = "inc"
+      :let g:html_indent_style1 = "inc"
+<
+      VALUE    MEANING ~
+      "zero"   zero indent
+      "auto"   auto indent (same indent as the blocktag)
+      "inc"    auto indent + one indent step
+
+Many tags increase the indent for what follows per default (see "Add Indent
+Tags" in the script).  You can add further tags with: >
+
+      :let g:html_indent_inctags = "html,body,head,tbody"
+
+You can also remove such tags with: >
+
+      :let g:html_indent_autotags = "th,td,tr,tfoot,thead"
+
+Default value is empty for both variables.  Note: the initial "inctags" are
+only defined once per Vim session.
+
+User variables are only read when the script is sourced.  To enable your
+changes during a session, without reloading the HTML file, you can manually
+do: >
+
+      :call HtmlIndent_CheckUserSettings()
+
+Detail:
+  Calculation of indent inside "blocktags" with "alien" content:
+      BLOCKTAG   INDENT EXPR       WHEN APPLICABLE ~
+      <script> : {customizable}            if first line of block
+              : cindent(v:lnum)    if attributes empty or contain "java"
+              : -1                 else (vbscript, tcl, ...)
+      <style>  : {customizable}            if first line of block
+              : GetCSSIndent()     else
+      <!-- --> : -1
+
 
 PHP                            *ft-php-indent* *php-indent* *php-indenting*
 
@@ -549,12 +784,12 @@ those useless characters first with a command like: >
     :%s /\r$//g
 
 Or, you can simply |:let| the variable PHP_removeCRwhenUnix to 1 and the
-script will silently remove them when Vim loads a PHP file (at each|BufRead|).
+script will silently remove them when Vim loads a PHP file (at each |BufRead|).
 
 OPTIONS: ~
 
 PHP indenting can be altered in several ways by modifying the values of some
-variables:
+global variables:
 
                                                                *php-comment*
 To not enable auto-formating of comments by default (if you want to use your
@@ -562,10 +797,21 @@ own 'formatoptions'): >
     :let g:PHP_autoformatcomment = 0
 
 Else, 't' will be removed from the 'formatoptions' string and "qrowcb" will be
-added, see|fo-table|for more information.
+added, see |fo-table| for more information.
 -------------
 
-To add an extra indent to every PHP lines with N being the number of
+To add extra indentation to single-line comments: >
+    :let g:PHP_outdentSLComments = N
+
+With N being the number of 'shiftwidth' to add.
+
+Only single-line comments will be affected such as: >
+    # Comment
+    // Comment
+    /* Comment */
+-------------
+
+To add extra indentation to every PHP lines with N being the number of
 'shiftwidth' to add: >
     :let g:PHP_default_indenting = N
 
@@ -581,7 +827,7 @@ For example, with N = 1, this will give:
 
        $command_hist = TRUE;
     ?>
-(Notice the extra indent between the PHP container markers and the code)
+(Notice the extra indentation between the PHP container markers and the code)
 -------------
 
 To indent PHP tags as the surrounding code: >
@@ -613,8 +859,10 @@ NOTE:      Indenting will be a bit slower if this option is used because some
 To indent 'case:' and 'default:' statements in switch() blocks: >
     :let g:PHP_vintage_case_default_indent = 1
 
-(Since in PHP braces are not required inside 'case/default' blocks, by default they are indented at the same level than the 'switch()' to avoid
-unnecessary indentation)
+In PHP braces are not required inside 'case/default' blocks therefore 'case:'
+and 'default:' are indented at the same level than the 'switch()' to avoid
+meaningless indentation. You can use the above option to return to the
+traditional way.
 
 
 PYTHON                                                 *ft-python-indent*
@@ -631,6 +879,43 @@ Indent for a continuation line: >
        let g:pyindent_continue = '&sw * 2'
 
 
+R                                                              *ft-r-indent*
+
+Function arguments are aligned if they span for multiple lines. If you prefer
+do not have the arguments of functions aligned, put in your |vimrc|:
+>
+   let r_indent_align_args = 0
+<
+All lines beginning with a comment character, #, get the same indentation
+level of the normal R code. Users of Emacs/ESS may be used to have lines
+beginning with a single # indented in the 40th column, ## indented as R code,
+and ### not indented. If you prefer that lines beginning with comment
+characters are aligned as they are by Emacs/ESS, put in your |vimrc|:
+>
+   let r_indent_ess_comments = 1
+<
+If you prefer that lines beginning with a single # are aligned at a column
+different from the 40th one, you should set a new value to the variable
+r_indent_comment_column, as in the example below:
+>
+   let r_indent_comment_column = 30
+<
+Any code after a line that ends with "<-" is indented. Emacs/ESS does not
+indent the code if it is a top level function. If you prefer that the
+Vim-R-plugin behaves like Emacs/ESS in this regard, put in your |vimrc|:
+>
+   let r_indent_ess_compatible = 1
+<
+Below is an example of indentation with and without this option enabled:
+>
+   ### r_indent_ess_compatible = 1           ### r_indent_ess_compatible = 0
+   foo <-                                    foo <-
+       function(x)                               function(x)
+   {                                             {
+       paste(x)                                      paste(x)
+   }                                             }
+<
+
 SHELL                                                  *ft-sh-indent*
 
 The amount of indent applied under various circumstances in a shell file can
index 1d3f0d5..91b7208 100644 (file)
@@ -1,4 +1,4 @@
-*index.txt*     For Vim version 7.3.  Last change: 2010 Jul 21
+*index.txt*     For Vim version 7.4.  Last change: 2013 Jul 17
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -29,7 +29,7 @@ For a complete listing of all help items see |help-tags|.
 ==============================================================================
 1. Insert mode                                         *insert-index*
 
-tag            char            action  ~
+tag            char            action in Insert mode   ~
 -----------------------------------------------------------------------
 |i_CTRL-@|     CTRL-@          insert previously inserted text and stop
                                insert
@@ -94,8 +94,8 @@ tag           char            action  ~
 |i_CTRL-Z|     CTRL-Z          when 'insertmode' set: suspend Vim
 |i_<Esc>|      <Esc>           end insert mode (unless 'insertmode' set)
 |i_CTRL-[|     CTRL-[          same as <Esc>
-|i_CTRL-\_CTRL-N| CTRL-\ CTRL-N         go to Normal mode
-|i_CTRL-\_CTRL-G| CTRL-\ CTRL-G         go to mode specified with 'insertmode'
+|i_CTRL-\_CTRL-N| CTRL-\ CTRL-N        go to Normal mode
+|i_CTRL-\_CTRL-G| CTRL-\ CTRL-G        go to mode specified with 'insertmode'
                CTRL-\ a - z    reserved for extensions
                CTRL-\ others   not used
 |i_CTRL-]|     CTRL-]          trigger abbreviation
@@ -141,7 +141,7 @@ tag         char            action  ~
 |i_<ScrollWheelUp>|    <ScrollWheelUp>         move window three lines up
 |i_<S-ScrollWheelUp>|  <S-ScrollWheelUp>       move window one page up
 |i_<ScrollWheelLeft>|  <ScrollWheelLeft>       move window six columns left
-|i_<S-ScrollWheelLeft>| <S-ScrollWheelLeft>    move window one page left
+|i_<S-ScrollWheelLeft>|        <S-ScrollWheelLeft>     move window one page left
 |i_<ScrollWheelRight>| <ScrollWheelRight>      move window six columns right
 |i_<S-ScrollWheelRight>| <S-ScrollWheelRight>  move window one page right
 
@@ -212,8 +212,8 @@ tag         char          note action in Normal mode        ~
 |CTRL-Y|       CTRL-Y             scroll N lines downwards
 |CTRL-Z|       CTRL-Z             suspend program (or start new shell)
                CTRL-[ <Esc>       not used
-|CTRL-\_CTRL-N| CTRL-\ CTRL-N     go to Normal mode (no-op)
-|CTRL-\_CTRL-G| CTRL-\ CTRL-G     go to mode specified with 'insertmode'
+|CTRL-\_CTRL-N|        CTRL-\ CTRL-N      go to Normal mode (no-op)
+|CTRL-\_CTRL-G|        CTRL-\ CTRL-G      go to mode specified with 'insertmode'
                CTRL-\ a - z       reserved for extensions
                CTRL-\ others      not used
 |CTRL-]|       CTRL-]             :ta to ident under cursor
@@ -431,7 +431,7 @@ tag         char          note action in Normal mode        ~
 |<Insert>|     <Insert>        2  same as "i"
 |<Left>|       <Left>          1  same as "h"
 |<LeftMouse>|  <LeftMouse>     1  move cursor to the mouse click position
-|<MiddleMouse>| <MiddleMouse>  2  same as "gP" at the mouse click position
+|<MiddleMouse>|        <MiddleMouse>   2  same as "gP" at the mouse click position
 |<PageDown>|   <PageDown>         same as CTRL-F
 |<PageUp>|     <PageUp>           same as CTRL-B
 |<Right>|      <Right>         1  same as "l"
@@ -459,7 +459,7 @@ tag         char          note action in Normal mode        ~
 
 These can be used after an operator or in Visual mode to select an object.
 
-tag            command            action in Normal mode        ~
+tag            command            action in op-pending and Visual mode ~
 ------------------------------------------------------------------------------
 |v_aquote|     a"                 double quoted string
 |v_a'|         a'                 single quoted string
@@ -640,7 +640,7 @@ tag         char          note action in Normal mode        ~
 |[s|           [s              1  move to the previous misspelled word
 |[z|           [z              1  move to start of open fold
 |[{|           [{              1  cursor N times back to unmatched '{'
-|[<MiddleMouse> [<MiddleMouse> 2  same as "[p"
+|[<MiddleMouse>| [<MiddleMouse>        2  same as "[p"
 
 |]_CTRL-D|     ] CTRL-D           jump to first #define found in current and
                                   included files matching the word under the
@@ -680,7 +680,7 @@ tag         char          note action in Normal mode        ~
 |]s|           ]s              1  move to next misspelled word
 |]z|           ]z              1  move to end of open fold
 |]}|           ]}              1  cursor N times forward to unmatched '}'
-|]<MiddleMouse> ]<MiddleMouse> 2  same as "]p"
+|]<MiddleMouse>| ]<MiddleMouse>        2  same as "]p"
 
 ==============================================================================
 2.4 Commands starting with 'g'                                         *g*
@@ -719,9 +719,13 @@ tag                char          note action in Normal mode        ~
 |gH|           gH                 start Select line mode
 |gI|           gI              2  like "I", but always start in column 1
 |gJ|           gJ              2  join lines without inserting space
+|gN|           gN            1,2  find the previous match with the last used
+                                  search pattern and Visually select it
 |gP|           ["x]gP          2  put the text [from register x] before the
                                   cursor N times, leave the cursor after it
+|gQ|           gQ                  switch to "Ex" mode with Vim editing
 |gR|           gR              2  enter Virtual Replace mode
+|gT|           gT                 go to the previous tab page
 |gU|           gU{motion}      2  make Nmove text uppercase
 |gV|           gV                 don't reselect the previous Visual area
                                   when executing a mapping or menu in Select
@@ -750,6 +754,8 @@ tag         char          note action in Normal mode        ~
                                   lines down
 |gk|           gk              1  like "k", but when 'wrap' on go N screen
                                   lines up
+|gn|           gn            1,2  find the next match with the last used
+                                  search pattern and Visually select it
 |gm|           gm              1  go to character at middle of the screenline
 |go|           go              1  cursor to byte N in the buffer
 |gp|           ["x]gp          2  put the text [from register x] after the
@@ -757,6 +763,7 @@ tag         char          note action in Normal mode        ~
 |gq|           gq{motion}      2  format Nmove text
 |gr|           gr{char}        2  virtual replace N chars with {char}
 |gs|           gs                 go to sleep for N seconds (default 1)
+|gt|           gt                 go to the next tab page
 |gu|           gu{motion}      2  make Nmove text lowercase
 |gv|           gv                 reselect the previous Visual area
 |gw|           gw{motion}      2  format Nmove text and keep cursor
@@ -794,6 +801,10 @@ tag                char          note action in Normal mode        ~
 |zE|           zE                 eliminate all folds
 |zF|           zF                 create a fold for N lines
 |zG|           zG                 mark word as good spelled word
+|zH|           zH                 when 'wrap' off scroll half a screenwidth
+                                  to the right
+|zL|           zL                 when 'wrap' off scroll half a screenwidth
+                                  to the left
 |zM|           zM                 set 'foldlevel' to zero
 |zN|           zN                 set 'foldenable'
 |zO|           zO                 open folds recursively
@@ -951,11 +962,13 @@ Normal characters are inserted at the current cursor position.
 "Completion" below refers to context-sensitive completion.  It will complete
 file names, tags, commands etc. as appropriate.
 
+tag            command       action in Command-line editing mode       ~
+------------------------------------------------------------------------------
                CTRL-@          not used
 |c_CTRL-A|     CTRL-A          do completion on the pattern in front of the
                                cursor and insert all matches
 |c_CTRL-B|     CTRL-B          cursor to begin of command-line
-|c_CTRL-C|     CTRL-C          same as <ESC>
+|c_CTRL-C|     CTRL-C          same as <Esc>
 |c_CTRL-D|     CTRL-D          list completions that match the pattern in
                                front of the cursor
 |c_CTRL-E|     CTRL-E          cursor to end of command-line
@@ -1004,8 +1017,8 @@ file names, tags, commands etc. as appropriate.
                CTRL-Z          not used (reserved for suspend)
 |c_<Esc>|      <Esc>           abandon command-line without executing it
 |c_<Esc>|      CTRL-[          same as <Esc>
-|c_CTRL-\_CTRL-N| CTRL-\ CTRL-N         go to Normal mode, abandon command-line
-|c_CTRL-\_CTRL-G| CTRL-\ CTRL-G         go to mode specified with 'insertmode',
+|c_CTRL-\_CTRL-N| CTRL-\ CTRL-N        go to Normal mode, abandon command-line
+|c_CTRL-\_CTRL-G| CTRL-\ CTRL-G        go to mode specified with 'insertmode',
                                abandon command-line
                CTRL-\ a - d    reserved for extensions
 |c_CTRL-\_e|   CTRL-\ e {expr} replace the command line with the result of
@@ -1046,6 +1059,8 @@ This is a brief but complete listing of all the ":" commands, without
 mentioning any arguments.  The optional part of the command name is inside [].
 The commands are sorted on the non-optional part of their name.
 
+tag          command         action ~
+------------------------------------------------------------------------------
 |:!|           :!              filter lines or execute an external command
 |:!!|          :!!             repeat last ":!" command
 |:#|           :#              same as ":number"
@@ -1125,7 +1140,7 @@ The commands are sorted on the non-optional part of their name.
 |:cgetbuffer|  :cgetb[uffer]   get errors from buffer
 |:cgetexpr|    :cgete[xpr]     get errors from expr
 |:cgetfile|    :cg[etfile]     read file with error messages
-|:changes|     :cha[nges]      print the change list
+|:changes|     :changes        print the change list
 |:chdir|       :chd[ir]        change directory
 |:checkpath|   :che[ckpath]    list included files
 |:checktime|   :checkt[ime]    check timestamp of loaded buffers
@@ -1176,9 +1191,12 @@ The commands are sorted on the non-optional part of their name.
 |:digraphs|    :dig[raphs]     show or enter digraphs
 |:display|     :di[splay]      display registers
 |:djump|       :dj[ump]        jump to #define
-|:dlist|       :dl[ist]        list #defines
+|:dl|          :dl             short for |:delete|
+|:dl|          :del[ete]l      short for |:delete|
+|:dlist|       :dli[st]        list #defines
 |:doautocmd|   :do[autocmd]    apply autocommands to current buffer
 |:doautoall|   :doautoa[ll]    apply autocommands for all loaded buffers
+|:dp|          :d[elete]p      short for |:delete|
 |:drop|                :dr[op]         jump to window editing file or edit file in
                                current window
 |:dsearch|     :ds[earch]      list one #define
@@ -1256,7 +1274,7 @@ The commands are sorted on the non-optional part of their name.
 |:k|           :k              set a mark
 |:keepalt|     :keepa[lt]      following command keeps the alternate file
 |:keepmarks|   :kee[pmarks]    following command keeps marks where they are
-|:keepjumps|   :keepj[jumps]   following command keeps jumplist and marks
+|:keepjumps|   :keepj[umps]    following command keeps jumplist and marks
 |:lNext|       :lN[ext]        go to previous entry in location list
 |:lNfile|      :lNf[ile]       go to last entry in previous file
 |:list|                :l[ist]         print lines
@@ -1374,7 +1392,7 @@ The commands are sorted on the non-optional part of their name.
 |:promptrepl|  :promptr[epl]   open GUI dialog for search/replace
 |:perldo|      :perld[o]       execute Perl command for each line
 |:pop|         :po[p]          jump to older entry in tag stack
-|:popup|       :pop[up]        popup a menu by name
+|:popup|       :popu[p]        popup a menu by name
 |:ppop|                :pp[op]         ":pop" in preview window
 |:preserve|    :pre[serve]     write all text to swap file
 |:previous|    :prev[ious]     go to previous file in argument list
@@ -1392,8 +1410,10 @@ The commands are sorted on the non-optional part of their name.
 |:pwd|         :pw[d]          print current directory
 |:py3|         :py3            execute Python 3 command
 |:python3|     :python3        same as :py3
+|:py3do|       :py3d[o]        execute Python 3 command for each line
 |:py3file|     :py3f[ile]      execute Python 3 script file
 |:python|      :py[thon]       execute Python command
+|:pydo|                :pyd[o]         execute Python command for each line
 |:pyfile|      :pyf[ile]       execute Python script file
 |:quit|                :q[uit]         quit current window (when one window quit Vim)
 |:quitall|     :quita[ll]      quit Vim
@@ -1460,7 +1480,7 @@ The commands are sorted on the non-optional part of their name.
 |:slast|       :sla[st]        split window and go to last file in the
                                argument list
 |:smagic|      :sm[agic]       :substitute with 'magic'
-|:smap|                :sma[p]         like ":map" but for Select mode
+|:smap|                :smap           like ":map" but for Select mode
 |:smapclear|   :smapc[lear]    remove all mappings for Select mode
 |:smenu|       :sme[nu]        add menu for Select mode
 |:snext|       :sn[ext]        split window and go to next file in the
@@ -1497,6 +1517,7 @@ The commands are sorted on the non-optional part of their name.
 |:sview|       :sv[iew]        split window and edit file read-only
 |:swapname|    :sw[apname]     show the name of the current swap file
 |:syntax|      :sy[ntax]       syntax highlighting
+|:syntime|     :synti[me]      measure syntax highlighting speed
 |:syncbind|    :sync[bind]     sync scroll binding
 |:t|           :t              same as ":copy"
 |:tNext|       :tN[ext]        jump to previous matching tag
index 74eff96..9b9445a 100644 (file)
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.3.  Last change: 2010 Jul 29
+*insert.txt*    For Vim version 7.4.  Last change: 2013 Jul 12
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -136,6 +136,8 @@ CTRL-R {0-9a-z"%#*+:.-=}                                    *i_CTRL-R*
                                too.
                                When the result is a Float it's automatically
                                converted to a String.
+                               When append() or setline() is invoked the undo
+                               sequence will be broken.
                See |registers| about registers.  {not in Vi}
 
 CTRL-R CTRL-R {0-9a-z"%#*+/:.-=}                       *i_CTRL-R_CTRL-R*
@@ -380,7 +382,16 @@ The CTRL-O command sometimes has a side effect: If the cursor was beyond the
 end of the line, it will be put on the last character in the line.  In
 mappings it's often better to use <Esc> (first put an "x" in the text, <Esc>
 will then always put the cursor on it).  Or use CTRL-\ CTRL-O, but then
-beware of the cursor possibly being beyond the end of the line.
+beware of the cursor possibly being beyond the end of the line.  Note that the
+command following CTRL-\ CTRL-O can still move the cursor, it is not restored
+to its original position.
+
+The CTRL-O command takes you to Normal mode.  If you then use a command enter
+Insert mode again it normally doesn't nest.  Thus when typing "a<C-O>a" and
+then <Esc> takes you back to Normal mode, you do not need to type <Esc> twice.
+An exception is when not typing the command, e.g. when executing a mapping or
+sourcing a script.  This makes mappings work that briefly switch to Insert
+mode.
 
 The shifted cursor keys are not available on all terminals.
 
@@ -394,7 +405,12 @@ An example for using CTRL-G u: >
 
 This redefines the backspace key to start a new undo sequence.  You can now
 undo the effect of the backspace key, without changing what you typed before
-that, with CTRL-O u.
+that, with CTRL-O u.  Another example: >
+
+       :inoremap <CR> <C-]><C-G>u<CR>
+
+This breaks undo at each line break.  It also expands abbreviations before
+this.
 
 Using CTRL-O splits undo: the text typed before and after it is undone
 separately.  If you want to avoid this (e.g., in a mapping) you might be able
@@ -479,7 +495,7 @@ option}
                                                        *ins-smarttab*
 When the 'smarttab' option is on, a <Tab> inserts 'shiftwidth' positions at
 the beginning of a line and 'tabstop' positions in other places.  This means
-that often spaces instead of a <Tab> character are inserted.  When 'smarttab
+that often spaces instead of a <Tab> character are inserted.  When 'smarttab'
 is off, a <Tab> always inserts 'tabstop' positions, and 'shiftwidth' is only
 used for ">>" and the like.  {not in Vi}
 
@@ -555,12 +571,11 @@ CTRL-D, 'expandtab', 'smarttab', 'softtabstop', etc.
 In 'list' mode, Virtual Replace mode acts as if it was not in 'list' mode,
 unless "L" is in 'cpoptions'.
 
-Note that the only times characters beyond the cursor should appear to move
-are in 'list' mode, and occasionally when 'wrap' is set (and the line changes
-length to become shorter or wider than the width of the screen), or
-momentarily when typing over a CTRL character.  A CTRL character takes up two
-screen spaces.  When replacing it with two normal characters, the first will
-be inserted and the second will replace the CTRL character.
+Note that the only situations for which characters beyond the cursor should
+appear to move are in List mode |'list'|, and occasionally when 'wrap' is set
+(and the line changes length to become shorter or wider than the width of the
+screen).  In other cases spaces may be inserted to avoid following characters
+to move.
 
 This mode is very useful for editing <Tab> separated columns in tables, for
 entering new data while keeping all the columns aligned.
@@ -1006,8 +1021,13 @@ The function must return the column where the completion starts.  It must be a
 number between zero and the cursor column "col('.')".  This involves looking
 at the characters just before the cursor and including those characters that
 could be part of the completed item.  The text between this column and the
-cursor column will be replaced with the matches.  Return -1 if no completion
-can be done.
+cursor column will be replaced with the matches.
+
+Special return values:
+   -1 If no completion can be done, the completion will be cancelled with an
+      error message.
+   -2 To cancel silently and stay in completion mode.
+   -3 To cancel silently and leave completion mode.
 
 On the second invocation the arguments are:
    a:findstart  0
@@ -1017,6 +1037,23 @@ On the second invocation the arguments are:
 The function must return a List with the matching words.  These matches
 usually include the "a:base" text.  When there are no matches return an empty
 List.
+
+In order to return more information than the matching words, return a Dict
+that contains the List.  The Dict can have these items:
+       words           The List of matching words (mandatory).
+       refresh         A string to control re-invocation of the function
+                       (optional).
+                       The only value currently recognized is "always", the
+                       effect is that the function is called whenever the
+                       leading text is changed.
+Other items are ignored.
+
+For acting upon end of completion, see the |CompleteDone| autocommand event.
+
+For example, the function can contain this: >
+       let matches = ... list of words ...
+       return {'words': matches, 'refresh': 'always'}
+<
                                                *complete-items*
 Each list item can either be a string or a Dictionary.  When it is a string it
 is used as the completion.  When it is a Dictionary it can contain these
@@ -1034,17 +1071,21 @@ items:
                        items that only differ in case are added
        dup             when non-zero this match will be added even when an
                        item with the same word is already present.
+       empty           when non-zero this match will be added even when it is
+                       an empty string
 
-All of these except 'icase' must be a string.  If an item does not meet these
-requirements then an error message is given and further items in the list are
-not used.  You can mix string and Dictionary items in the returned list.
+All of these except 'icase', 'dup' and 'empty' must be a string.  If an item
+does not meet these requirements then an error message is given and further
+items in the list are not used.  You can mix string and Dictionary items in
+the returned list.
 
 The "menu" item is used in the popup menu and may be truncated, thus it should
 be relatively short.  The "info" item can be longer, it will  be displayed in
 the preview window when "preview" appears in 'completeopt'.  The "info" item
 will also remain displayed after the popup menu has been removed.  This is
 useful for function arguments.  Use a single space for "info" to remove
-existing text in the preview window.
+existing text in the preview window.  The size of the preview window is three
+lines, but 'previewheight' is used when it has a value of 1 or 2.
 
 The "kind" item uses a single letter to indicate the kind of completion.  This
 may be used to show the completion differently (different color or icon).
@@ -1060,9 +1101,9 @@ match to the total list.  These matches should then not appear in the returned
 list!  Call |complete_check()| now and then to allow the user to press a key
 while still searching for matches.  Stop searching when it returns non-zero.
 
-The function is allowed to move the cursor, it is restored afterwards.  This
-option cannot be set from a |modeline| or in the |sandbox|, for security
-reasons.
+                                                       *E839* *E840*
+The function is allowed to move the cursor, it is restored afterwards.
+The function is not allowed to move to another window or delete text.
 
 An example that completes the names of the months: >
        fun! CompleteMonths(findstart, base)
@@ -1318,7 +1359,7 @@ Complete:
 
 Completion works in separate JavaScript files (&ft==javascript), inside of
 <script> tag of (X)HTML and in values of event attributes (including scanning
-of external files.
+of external files).
 
 DOM compatibility
 
@@ -1429,9 +1470,9 @@ knows how to color highlight.  It can be used for any filetype and provides a
 minimal language-sensitive completion.
 
 To enable syntax code completion you can run: >
-       setlocal omnifunc=syntaxcomplete#Complete
+    setlocal omnifunc=syntaxcomplete#Complete
 
-You can automate this by placing the following in your vimrc (after any
+You can automate this by placing the following in your |.vimrc| (after any
 ":filetype" command): >
     if has("autocmd") && exists("+omnifunc")
        autocmd Filetype *
@@ -1448,7 +1489,7 @@ customize which syntax groups to include or exclude from the list.  Let's have
 a look at the PHP filetype to see how this works.
 
 If you edit a file called, index.php, run the following command: >
-       :syntax list
+    syntax list
 
 The first thing you will notice is that there are many different syntax groups.
 The PHP language can include elements from different languages like HTML,
@@ -1457,24 +1498,37 @@ that begin with the filetype, "php", in this case.  For example these syntax
 groups are included by default with the PHP: phpEnvVar, phpIntVar,
 phpFunctions.
 
+If you wish non-filetype syntax items to also be included, you can use a 
+regular expression syntax (added in version 13.0 of autoload\syntaxcomplete.vim)
+to add items.  Looking at the output from ":syntax list" while editing a PHP file 
+I can see some of these entries: >
+    htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjects
+
+To pick up any JavaScript and HTML keyword syntax groups while editing a PHP
+file, you can use 3 different regexs, one for each language.  Or you can 
+simply restrict the include groups to a particular value, without using 
+a regex string: >
+    let g:omni_syntax_group_include_php = 'php\w\+,javaScript\w\+,html\w\+'
+    let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
+<
+The basic form of this variable is: >
+    let g:omni_syntax_group_include_{filetype} = 'regex,comma,separated'
+
 The PHP language has an enormous number of items which it knows how to syntax
-highlight.  This means these items will be available within the omni
-completion list.  Some people may find this list unwieldy or are only
-interested in certain items.
+highlight.  These items will be available within the omni completion list.
 
-There are two ways to prune this list (if necessary).  If you find certain
-syntax groups you do not wish displayed you can add the following to your
-vimrc: >
-       let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant'
+Some people may find this list unwieldy or are only interested in certain
+items.  There are two ways to prune this list (if necessary).  If you find
+certain syntax groups you do not wish displayed you can use two different 
+methods to identify these groups.  The first specifically lists the syntax 
+groups by name.  The second uses a regular expression to identify both 
+syntax groups.  Simply add one the following to your vimrc: >
+    let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant'
+    let g:omni_syntax_group_exclude_php = 'php\w*Constant'
 
 Add as many syntax groups to this list by comma separating them.  The basic
 form of this variable is: >
-       let g:omni_syntax_group_exclude_{filetype} = 'comma,separated,list'
-
-For completeness the opposite is also true.  Creating this variable in your
-vimrc will only include the items in the phpFunctions and phpMethods syntax
-groups: >
-       let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
+    let g:omni_syntax_group_exclude_{filetype} = 'regex,comma,separated'
 
 You can create as many of these variables as you need, varying only the
 filetype at the end of the variable name.
@@ -1515,6 +1569,9 @@ To retrieve only the syntax items for the sqlOperator syntax group: >
 To retrieve all syntax items for both the sqlOperator and sqlType groups: >
     echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )
 
+A regular expression can also be used: >
+    echo OmniSyntaxList( ['sql\w\+'] )
+
 From within a plugin, you would typically assign the output to a List: >
     let myKeywords = []
     let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
@@ -1767,6 +1824,11 @@ These two commands will keep on asking for lines, until you type a line
 containing only a ".".  Watch out for lines starting with a backslash, see
 |line-continuation|.
 
+When in Ex mode (see |-e|) a backslash at the end of the line can be used to
+insert a NUL character.  To be able to have a line ending in a backslash use
+two backslashes.  This means that the number of backslashes is halved, but
+only at the end of the line.
+
 NOTE: These commands cannot be used with |:global| or |:vglobal|.
 ":append" and ":insert" don't work properly in between ":if" and
 ":endif", ":for" and ":endfor", ":while" and ":endwhile".
@@ -1825,13 +1887,15 @@ NOTE: These commands cannot be used with |:global| or |:vglobal|.
                        See |++opt| for the possible values of [++opt].
 
                                                        *:r!* *:read!*
-:[range]r[ead] !{cmd}  Execute {cmd} and insert its standard output below
+:[range]r[ead] [++opt] !{cmd}
+                       Execute {cmd} and insert its standard output below
                        the cursor or the specified line.  A temporary file is
                        used to store the output of the command which is then
                        read into the buffer.  'shellredir' is used to save
                        the output of the command, which can be set to include
                        stderr or not.  {cmd} is executed like with ":!{cmd}",
                        any '!' is replaced with the previous command |:!|.
+                       See |++opt| for the possible values of [++opt].
 
 These commands insert the contents of a file, or the output of a command,
 into the buffer.  They can be undone.  They cannot be repeated with the "."
index 9fe88bb..72e9b9b 100644 (file)
@@ -1,4 +1,4 @@
-*intro.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
+*intro.txt*     For Vim version 7.4.  Last change: 2013 Jun 17
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -135,8 +135,10 @@ http://www.vim.org/maillist.php
 
 Bug reports:                           *bugs* *bug-reports* *bugreport.vim*
 
-Send bug reports to: Vim bugs <bugs@vim.org>
-This is not a maillist but the message is redirected to the Vim maintainer.
+Send bug reports to: Vim Developers <vim_dev@vim.org>
+This is a maillist, many people will see the message.  If you don't want that,
+e.g. because it is a security issue, send it to <bugs@vim.org>, this only goes
+to the Vim maintainer (that's Bram).
 Please be brief; all the time that is spent on answering mail is subtracted
 from the time that is spent on improving Vim!  Always give a reproducible
 example and try to find out which settings or other things influence the
@@ -259,6 +261,7 @@ Vim would never have become what it is now, without the help of these people!
 I wish to thank all the people that sent me bug reports and suggestions.  The
 list is too long to mention them all here.  Vim would not be the same without
 the ideas from all these people: They keep Vim alive!
+*love* *peace* *friendship* *gross-national-happiness*
 
 
 In this documentation there are several references to other versions of Vi:
@@ -300,7 +303,7 @@ and <> are part of what you type, the context should make this clear.
 
 []             Characters in square brackets are optional.
 
-                                                   *count* *[count]* *E489*
+                                                   *count* *[count]*
 [count]                An optional number that may precede the command to multiply
                or iterate the command.  If no number is given, a count of one
                is used, unless otherwise noted.  Note that in this manual the
@@ -392,6 +395,8 @@ CTRL-{char} {char} typed as a control character; that is, typing {char}
                                                        *quotecommandquote*
 "command"      A reference to a command that you can type is enclosed in
                double quotes.
+`command`      New style command, this distinguishes it from other quoted
+               text and strings.
 
                                        *key-notation* *key-codes* *keycodes*
 These names for keys are used in the documentation.  They can also be used
@@ -616,7 +621,6 @@ Replace              <Esc>    --      --    <Insert>              --      --
 Command-line    *3       --      --     :start     --                --
 Ex              :vi      --      --     --         --        --
 
--  NA
 -- not possible
 
 *1 Go from Normal mode to Insert mode by giving the command "i", "I", "a",
@@ -703,7 +707,7 @@ Lines longer than the window width will wrap, unless the 'wrap' option is off
 (see below).  The 'linebreak' option can be set to wrap at a blank character.
 
 If the window has room after the last line of the buffer, Vim will show '~' in
-the first column of the last lines in the window, like this: >
+the first column of the last lines in the window, like this:
 
        +-----------------------+
        |some line              |
@@ -715,7 +719,7 @@ the first column of the last lines in the window, like this: >
 Thus the '~' lines indicate that the end of the buffer was reached.
 
 If the last line in a window doesn't fit, Vim will indicate this with a '@' in
-the first column of the last lines in the window, like this: >
+the first column of the last lines in the window, like this:
 
        +-----------------------+
        |first line             |
@@ -730,7 +734,7 @@ window.
 When the "lastline" flag is present in the 'display' option, you will not see
 '@' characters at the left side of window.  If the last line doesn't fit
 completely, only the part that fits is shown, and the last three characters of
-the last line are replaced with "@@@", like this: >
+the last line are replaced with "@@@", like this:
 
        +-----------------------+
        |first line             |
index b21dd42..de82679 100644 (file)
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 7.3.  Last change: 2010 Jul 31
+*map.txt*       For Vim version 7.4.  Last change: 2013 Aug 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -49,7 +49,7 @@ modes.
 :nm[ap]        {lhs} {rhs}             |mapmode-n|             *:nm* *:nmap*
 :vm[ap]        {lhs} {rhs}             |mapmode-v|             *:vm* *:vmap*
 :xm[ap]        {lhs} {rhs}             |mapmode-x|             *:xm* *:xmap*
-:smap  {lhs} {rhs}             |mapmode-s|                   *:smap*
+:smap  {lhs} {rhs}             |mapmode-s|                 *:smap*
 :om[ap]        {lhs} {rhs}             |mapmode-o|             *:om* *:omap*
 :map!  {lhs} {rhs}             |mapmode-ic|            *:map!*
 :im[ap]        {lhs} {rhs}             |mapmode-i|             *:im* *:imap*
@@ -107,6 +107,8 @@ modes.
 :cmapc[lear]                   |mapmode-c|             *:cmapc*  *:cmapclear*
                        Remove ALL mappings for the modes where the map
                        command applies.  {not in Vi}
+                       Use the <buffer> argument to remove buffer-local
+                       mappings |:map-<buffer>|
                        Warning: This also removes the default mappings.
 
 :map                           |mapmode-nvo|
@@ -157,9 +159,9 @@ type "a", then "bar" will get inserted.
 
 1.2 SPECIAL ARGUMENTS                                  *:map-arguments*
 
-"<buffer>", "<silent>", "<special>", "<script>", "<expr>" and "<unique>" can
-be used in any order.  They must appear right after the command, before any
-other arguments.
+"<buffer>", "<nowait>", "<silent>", "<special>", "<script>", "<expr>" and
+"<unique>" can be used in any order.  They must appear right after the
+command, before any other arguments.
 
                                *:map-local* *:map-<buffer>* *E224* *E225*
 If the first argument to one of these commands is "<buffer>" the mapping will
@@ -167,12 +169,23 @@ be effective in the current buffer only.  Example: >
        :map <buffer>  ,w  /[.,;]<CR>
 Then you can map ",w" to something else in another buffer: >
        :map <buffer>  ,w  /[#&!]<CR>
-The local buffer mappings are used before the global ones.
+The local buffer mappings are used before the global ones.  See <nowait> below
+to make a short local mapping not taking effect when a longer global one
+exists.
 The "<buffer>" argument can also be used to clear mappings: >
        :unmap <buffer> ,w
        :mapclear <buffer>
 Local mappings are also cleared when a buffer is deleted, but not when it is
 unloaded.  Just like local option values.
+Also see |map-precedence|.
+
+                                               *:map-<nowait>* *:map-nowait*
+When defining a buffer-local mapping for "," there may be a global mapping
+that starts with ",".  Then you need to type another character for Vim to know
+whether to use the "," mapping or the longer one.  To avoid this add the
+<nowait> argument.  Then the mapping will be used when it matches, Vim does
+not wait for more characters to be typed.  However, if the characters were
+already type they are used.
 
                                                *:map-<silent>* *:map-silent*
 To define a mapping which will not be echoed on the command line, add
@@ -226,7 +239,7 @@ text before the cursor and start omni completion when some condition is met.
 
 For abbreviations |v:char| is set to the character that was typed to trigger
 the abbreviation.  You can use this to decide how to expand the {lhs}.  You
-can't change v:char and you should not insert it.
+should not either insert or change the v:char.
 
 Be very careful about side effects!  The expression is evaluated while
 obtaining characters, you may very well make the command dysfunctional.
@@ -235,11 +248,18 @@ For this reason the following is blocked:
 - Editing another buffer.
 - The |:normal| command.
 - Moving the cursor is allowed, but it is restored afterwards.
-- You can use getchar(), but the existing typeahead isn't seen and new
-  typeahead is discarded.
 If you want the mapping to do any of these let the returned characters do
 that.
 
+You can use getchar(), it consumes typeahead if there is any. E.g., if you
+have these mappings: >
+  inoremap <expr> <C-L> nr2char(getchar())
+  inoremap <expr> <C-L>x "foo"
+If you now type CTRL-L nothing happens yet, Vim needs the next character to
+decide what mapping to use.  If you type 'x' the second mapping is used and
+"foo" is inserted.  If you type any other key the first mapping is used,
+getchar() gets the typed key and returns it.
+
 Here is an example that inserts a list number that increases: >
        let counter = 0
        inoremap <expr> <C-L> ListItem()
@@ -360,11 +380,12 @@ it's just used here for this situation.
    The simplest way to load a set of related language mappings is by using the
 'keymap' option.  See |45.5|.
    In Insert mode and in Command-line mode the mappings can be disabled with
-the CTRL-^ command |i_CTRL-^| |c_CTRL-^|.  When starting to enter a normal
-command line (not a search pattern) the mappings are disabled until a CTRL-^
-is typed.  The state last used is remembered for Insert mode and Search
-patterns separately.  The state for Insert mode is also used when typing a
-character as an argument to command like "f" or "t".
+the CTRL-^ command |i_CTRL-^| |c_CTRL-^| These commands change the value of
+the 'iminsert' option.  When starting to enter a normal command line (not a
+search pattern) the mappings are disabled until a CTRL-^ is typed.  The state
+last used is remembered for Insert mode and Search patterns separately.  The
+state for Insert mode is also used when typing a character as an argument to
+command like "f" or "t".
    Language mappings will never be applied to already mapped characters.  They
 are only used for typed characters.  This assumes that the language mapping
 was already done when typing the mapping.
@@ -480,9 +501,9 @@ You can create an empty {rhs} by typing nothing after a single CTRL-V (you
 have to type CTRL-V two times).  Unfortunately, you cannot do this in a vimrc
 file.
                                                        *<Nop>*
-A easier way to get a mapping that doesn't produce anything, is to use "<Nop>"
-for the {rhs}.  This only works when the |<>| notation is enabled.  For
-example, to make sure that function key 8 does nothing at all: >
+An easier way to get a mapping that doesn't produce anything, is to use
+"<Nop>" for the {rhs}.  This only works when the |<>| notation is enabled.
+For example, to make sure that function key 8 does nothing at all: >
        :map  <F8>  <Nop>
        :map! <F8>  <Nop>
 <
@@ -495,7 +516,7 @@ scenario: >
        :set encoding=utf-8
 The mapping for <M-C> is defined with the latin1 encoding, resulting in a 0xc3
 byte.  If you type the character Ã¡ (0xe1 <M-a>) in UTF-8 encoding this is the
-two bytes 0xc3 0xa1.  You don't want the 0xc3 byte to be mapped then,
+two bytes 0xc3 0xa1.  You don't want the 0xc3 byte to be mapped then or
 otherwise it would be impossible to type the Ã¡ character.
 
                                        *<Leader>* *mapleader*
@@ -518,7 +539,7 @@ mappings.
 <LocalLeader> is just like <Leader>, except that it uses "maplocalleader"
 instead of "mapleader".  <LocalLeader> is to be used for mappings which are
 local to a buffer.  Example: >
-      :map <LocalLeader>q  \DoItNow
+      :map <buffer> <LocalLeader>A  oanother line<Esc>
 <
 In a global plugin <Leader> should be used and in a filetype plugin
 <LocalLeader>.  "mapleader" and "maplocalleader" can be equal.  Although, if
@@ -542,6 +563,7 @@ construct can be used:
        <Char-123>      character 123
        <Char-033>      character 27
        <Char-0x7f>     character 127
+       <S-Char-114>    character 114 ('r') shifted ('R')
 This is useful to specify a (multi-byte) character in a 'keymap' file.
 Upper and lowercase differences are ignored.
 
@@ -576,7 +598,7 @@ this (see |<>|).  Example: >
 To avoid mapping of the characters you type in insert or Command-line mode,
 type a CTRL-V first.  The mapping in Insert mode is disabled if the 'paste'
 option is on.
-
+                                                       *map-error*
 Note that when an error is encountered (that causes an error message or beep)
 the rest of the mapping is not executed.  This is Vi-compatible.
 
@@ -644,6 +666,17 @@ option).  After that it assumes that the 'q' is to be interpreted as such.  If
 you type slowly, or your system is slow, reset the 'timeout' option.  Then you
 might want to set the 'ttimeout' option.
 
+                                                       *map-precedence*
+Buffer-local mappings (defined using |:map-<buffer>|) take precedence over
+global mappings.  When a buffer-local mapping is the same as a global mapping,
+Vim will use the buffer-local mapping.  In addition, Vim will use a complete
+mapping immediately if it was defined with <nowait>, even if a longer mapping
+has the same prefix.  For example, given the following two mappings: >
+    :map <buffer> <nowait> \a   :echo "Local \a"<CR>
+    :map                   \abc :echo "Global \abc"<CR>
+When typing \a the buffer-local mapping will be used immediately.  Vim will
+not wait for more characters to see if the user might be typing \abc.
+
                                                        *map-keys-fails*
 There are situations where key codes might not be recognized:
 - Vim can only read part of the key code.  Mostly this is only the first
@@ -934,11 +967,12 @@ See |:verbose-cmd| for more information.
                        avoid that a typed {lhs} is expanded, since
                        command-line abbreviations apply here.
 
-:ab[breviate] [<expr>] {lhs} {rhs}
+:ab[breviate] [<expr>] [<buffer>] {lhs} {rhs}
                        add abbreviation for {lhs} to {rhs}.  If {lhs} already
                        existed it is replaced with the new {rhs}.  {rhs} may
                        contain spaces.
                        See |:map-<expr>| for the optional <expr> argument.
+                       See |:map-<buffer>| for the optional <buffer> argument.
 
                                                *:una* *:unabbreviate*
 :una[bbreviate] {lhs}  Remove abbreviation for {lhs} from the list.  If none
@@ -948,12 +982,12 @@ See |:verbose-cmd| for more information.
                        expansion insert a CTRL-V (type it twice).
 
                                                *:norea* *:noreabbrev*
-:norea[bbrev] [<expr>] [lhs] [rhs]
+:norea[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
                        same as ":ab", but no remapping for this {rhs} {not
                        in Vi}
 
                                                *:ca* *:cabbrev*
-:ca[bbrev] [<expr>] [lhs] [rhs]
+:ca[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
                        same as ":ab", but for Command-line mode only.  {not
                        in Vi}
 
@@ -962,12 +996,12 @@ See |:verbose-cmd| for more information.
                        in Vi}
 
                                                *:cnorea* *:cnoreabbrev*
-:cnorea[bbrev] [<expr>] [lhs] [rhs]
+:cnorea[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
                        same as ":ab", but for Command-line mode only and no
                        remapping for this {rhs} {not in Vi}
 
                                                *:ia* *:iabbrev*
-:ia[bbrev] [<expr>] [lhs] [rhs]
+:ia[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
                        same as ":ab", but for Insert mode only.  {not in Vi}
 
                                                *:iuna* *:iunabbrev*
@@ -975,18 +1009,18 @@ See |:verbose-cmd| for more information.
                        Vi}
 
                                                *:inorea* *:inoreabbrev*
-:inorea[bbrev] [<expr>] [lhs] [rhs]
+:inorea[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
                        same as ":ab", but for Insert mode only and no
                        remapping for this {rhs} {not in Vi}
 
                                                        *:abc* *:abclear*
-:abc[lear]             Remove all abbreviations.  {not in Vi}
+:abc[lear] [<buffer>]  Remove all abbreviations.  {not in Vi}
 
                                                        *:iabc* *:iabclear*
-:iabc[lear]            Remove all abbreviations for Insert mode.  {not in Vi}
+:iabc[lear] [<buffer>] Remove all abbreviations for Insert mode.  {not in Vi}
 
                                                        *:cabc* *:cabclear*
-:cabc[lear]            Remove all abbreviations for Command-line mode.  {not
+:cabc[lear] [<buffer>] Remove all abbreviations for Command-line mode.  {not
                        in Vi}
 
                                                        *using_CTRL-V*
@@ -1093,16 +1127,20 @@ is executed, it is transformed into a normal Ex command and then executed.
 
 For starters: See section |40.2| in the user manual.
 
-                                               *E183* *user-cmd-ambiguous*
+                                       *E183* *E841* *user-cmd-ambiguous*
 All user defined commands must start with an uppercase letter, to avoid
-confusion with builtin commands.  (There are a few builtin commands, notably
-:Next, :Print and :X, which do start with an uppercase letter.  The builtin
-will always take precedence in these cases).  The other characters of the user
-command can be uppercase letters, lowercase letters or digits.  When using
-digits, note that other commands that take a numeric argument may become
-ambiguous.  For example, the command ":Cc2" could be the user command ":Cc2"
-without an argument, or the command ":Cc" with argument "2".  It is advised to
-put a space between the command name and the argument to avoid these problems.
+confusion with builtin commands.  Exceptions are these builtin commands:
+       :Next
+       :X
+They cannot be used for a user defined command.  ":Print" is also an existing
+command, but it is deprecated and can be overruled.
+
+The other characters of the user command can be uppercase letters, lowercase
+letters or digits.  When using digits, note that other commands that take a
+numeric argument may become ambiguous.  For example, the command ":Cc2" could
+be the user command ":Cc2" without an argument, or the command ":Cc" with
+argument "2".  It is advised to put a space between the command name and the
+argument to avoid these problems.
 
 When using a user-defined command, the command can be abbreviated.  However, if
 an abbreviation is not unique, an error will be issued.  Furthermore, a
@@ -1173,13 +1211,15 @@ reported if any are supplied).  However, it is possible to specify that the
 command can take arguments, using the -nargs attribute.  Valid cases are:
 
        -nargs=0    No arguments are allowed (the default)
-       -nargs=1    Exactly one argument is required
-       -nargs=*    Any number of arguments are allowed (0, 1, or many)
+       -nargs=1    Exactly one argument is required, it includes spaces 
+       -nargs=*    Any number of arguments are allowed (0, 1, or many),
+                   separated by white space
        -nargs=?    0 or 1 arguments are allowed
        -nargs=+    Arguments must be supplied, but any number are allowed
 
 Arguments are considered to be separated by (unescaped) spaces or tabs in this
-context.
+context, except when there is one argument, then the white space is part of
+the argument.
 
 Note that arguments are used as text, not as expressions.  Specifically,
 "s:var" will use the script-local variable in the script where the command was
@@ -1202,23 +1242,33 @@ completion can be enabled:
 
        -complete=augroup       autocmd groups
        -complete=buffer        buffer names
+       -complete=behave        :behave suboptions
+       -complete=color         color schemes
        -complete=command       Ex command (and arguments)
+       -complete=compiler      compilers
+       -complete=cscope        |:cscope| suboptions
        -complete=dir           directory names
        -complete=environment   environment variable names
        -complete=event         autocommand events
        -complete=expression    Vim expression
        -complete=file          file and directory names
+       -complete=file_in_path  file and directory names in |'path'|
        -complete=filetype      filetype names |'filetype'|
        -complete=function      function name
        -complete=help          help subjects
        -complete=highlight     highlight groups
+       -complete=history       :history suboptions
+       -complete=locale        locale names (as output of locale -a)
        -complete=mapping       mapping name
        -complete=menu          menus
        -complete=option        options
        -complete=shellcmd      Shell command
+       -complete=sign          |:sign| suboptions
        -complete=syntax        syntax file names |'syntax'|
+       -complete=syntime       |:syntime| suboptions
        -complete=tag           tags
        -complete=tag_listfiles tags, file names are shown when CTRL-D is hit
+       -complete=user          user names
        -complete=var           user variables
        -complete=custom,{func} custom completion, defined via {func}
        -complete=customlist,{func} custom completion, defined via {func}
@@ -1285,7 +1335,8 @@ Possible attributes are:
        -range      Range allowed, default is current line
        -range=%    Range allowed, default is whole file (1,$)
        -range=N    A count (default N) which is specified in the line
-                   number position (like |:split|)
+                   number position (like |:split|); allows for zero line
+                   number.
        -count=N    A count (default N) which is specified either in the line
                    number position, or as an initial argument (like |:Next|).
                    Specifying -count (without a default) acts like -count=0
index 95ebddb..87ae877 100644 (file)
@@ -1,4 +1,4 @@
-*mbyte.txt*     For Vim version 7.3.  Last change: 2010 Jul 26
+*mbyte.txt*     For Vim version 7.4.  Last change: 2013 May 18
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar et al.
@@ -48,9 +48,9 @@ COMPILING
 If you already have a compiled Vim program, check if the |+multi_byte| feature
 is included.  The |:version| command can be used for this.
 
-If +multi_byte is not included, you should compile Vim with "big" features.
-You can further tune what features are included.  See the INSTALL files in the
-source directory.
+If +multi_byte is not included, you should compile Vim with "normal", "big" or
+"huge" features.  You can further tune what features are included.  See the
+INSTALL files in the source directory.
 
 
 LOCALE
@@ -280,7 +280,7 @@ Note that all encodings must use ASCII for the characters up to 128 (except
 when compiled for EBCDIC).
 
 Supported 'encoding' values are:                       *encoding-values*
-1   latin1     8-bit characters (ISO 8859-1)
+1   latin1     8-bit characters (ISO 8859-1, also used for cp1252)
 1   iso-8859-n ISO_8859 variant (n = 2 to 15)
 1   koi8-r     Russian
 1   koi8-u     Ukrainian
@@ -336,7 +336,11 @@ For MS-Windows "cp{number}" means using codepage {number}.
 Examples: >
                :set encoding=8bit-cp1252
                :set encoding=2byte-cp932
-<
+
+The MS-Windows codepage 1252 is very similar to latin1.  For practical reasons
+the same encoding is used and it's called latin1.  'isprint' can be used to
+display the characters 0x80 - 0xA0 or not.
+
 Several aliases can be used, they are translated to one of the names above.
 An incomplete list:
 
@@ -471,7 +475,7 @@ Useful utilities for converting the charset:
        |charset| converter.  Supported |charset|: ISO-2022-CN, ISO-2022-JP,
        ISO-2022-KR, EUC-CN, EUC-JP, EUC-KR, EUC-TW, UTF-7, UTF-8, ISO-8859
        series, Shift_JIS, Big5 and HZ.  Lv can be found at:
-       http://www.ff.iij4u.or.jp/~nrt/freeware/lv4495.tar.gz
+       http://www.ff.iij4u.or.jp/~nrt/lv/index.html
 
 
                                                        *mbyte-conversion*
@@ -611,7 +615,7 @@ Each field means:
            charsets, such as JIS X 0208, if this field is 0, code points has
            the same value as GL, and GR if 1.
 
-For example, in case of a 14 dots font corresponding to JIS X 0208, it is
+For example, in case of a 16 dots font corresponding to JIS X 0208, it is
 written like:
     -misc-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1990-0
 
@@ -793,8 +797,8 @@ is suitable for complex input, such as CJK.
   number of Hira-gana characters are 76.  So, first, we pre-input text as
   pronounced in Hira-gana, second, we convert Hira-gana to Kanji or Kata-Kana,
   if needed.  There are some Kana-Kanji conversion server: jserver
-  (distributed with Wnn, see below) and canna.  Canna could be found at:
-  ftp://ftp.nec.co.jp/pub/Canna/ (no longer works).
+  (distributed with Wnn, see below) and canna.  Canna can be found at:
+  http://canna.sourceforge.jp/
 
 There is a good input system: Wnn4.2.  Wnn 4.2 contains,
     xwnmo (|IM-server|)
@@ -853,7 +857,7 @@ Use the RPM or port for your system.
 
 
 USING XIM                      *multibyte-input* *E284* *E286* *E287* *E288*
-                               *E285* *E291* *E292* *E290* *E289*
+                               *E285* *E289*
 
 Note that Display and Input are independent.  It is possible to see your
 language even though you have no input method for it.  But when your Display
@@ -1063,7 +1067,7 @@ The actual mappings are in the lines below "loadkeymap".  In the example "a"
 is mapped to "A" and "b" to "B".  Thus the first item is mapped to the second
 item.  This is done for each line, until the end of the file.
 These items are exactly the same as what can be used in a |:lnoremap| command,
-using "<buffer>" to make the mappings local to the buffer..
+using "<buffer>" to make the mappings local to the buffer.
 You can check the result with this command: >
        :lmap
 The two items must be separated by white space.  You cannot include white
@@ -1081,6 +1085,13 @@ Since the mapping is defined with |:lnoremap| the resulting quote will not be
 used for the start of another character.
 The "accents" keymap uses this.                                *keymap-accents*
 
+The first column can also be in |<>| form:
+       <C-c>           Ctrl-C
+       <A-c>           Alt-c
+       <A-C>           Alt-C
+Note that the Alt mappings may not work, depending on your keyboard and
+terminal.
+
 Although it's possible to have more than one character in the second column,
 this is unusual.  But you can use various ways to specify the character: >
        A       a               literal character
@@ -1302,8 +1313,8 @@ character.  However, search patterns may not match on an overlong sequence.
 character.)  An exception is NUL (zero) which is displayed as "<00>".
 
 In the file and buffer the full range of Unicode characters can be used (31
-bits).  However, displaying only works for 16 bit characters, and only for the
-characters present in the selected font.
+bits).  However, displaying only works for the characters present in the
+selected font.
 
 Useful commands:
 - "ga" shows the decimal, hexadecimal and octal value of the character under
index 4494568..84afe2f 100644 (file)
@@ -1,4 +1,4 @@
-*message.txt*   For Vim version 7.3.  Last change: 2010 Aug 10
+*message.txt*   For Vim version 7.4.  Last change: 2013 Feb 23
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -27,8 +27,8 @@ The "g<" command can be used to see the last page of previous command output.
 This is especially useful if you accidentally typed <Space> at the hit-enter
 prompt.  You are then back at the hit-enter prompt and can then scroll further
 back.
-Note: when you stopped the output with "q" at the more prompt only up to that
-point will be displayed.
+Note: If the output has been stopped with "q" at the more prompt, it will only
+be displayed up to this point.
 The previous command output is cleared when another command produces output.
 
 If you are using translated messages, the first printed line tells who
@@ -65,7 +65,7 @@ or view a list of recent messages with: >
 LIST OF MESSAGES
                        *E222* *E228* *E232* *E256* *E293* *E298* *E304* *E317*
                        *E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
-                       *E323* *E341* *E473* *E570* *E685* >
+                       *E323* *E341* *E473* *E570* *E685*  >
   Add to read buffer
   makemap: Illegal mode
   Cannot create BalloonEval with both message and callback
@@ -481,8 +481,10 @@ Also see |msdos-limitations|.
                                                        *E339*  >
   Pattern too long
 
-This only happens on systems with 16 bit ints: The compiled regexp pattern is
+This happens on systems with 16 bit ints: The compiled regexp pattern is
 longer than about 65000 characters.  Try using a shorter pattern.
+It also happens when the offset of a rule doesn't fit in the space available.
+Try simplifying the pattern.
 
                                                        *E45*  >
   'readonly' option is set (add ! to override)
@@ -728,7 +730,11 @@ Vim cannot create a temporary file.
   Can't open file {filename}
   Can't read file {filename}
 
-Vim cannot read a temporary file.
+Vim cannot read a temporary file.  Especially on Windows, this can be caused
+by wrong escaping of special characters for cmd.exe; the approach was
+changed with patch 7.3.443.  Try using |shellescape()| for all shell arguments
+given to |system()|, or explicitly add escaping with ^.  Also see
+'shellxquote' and 'shellxescape'.
 
                                                        *E464*  >
   Ambiguous use of user-defined command
index c9baec4..eb95660 100644 (file)
@@ -1,4 +1,4 @@
-*mlang.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
+*mlang.txt*     For Vim version 7.4.  Last change: 2012 Jan 15
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -59,7 +59,7 @@ use of "-" and "_".
                        system.  Some systems accept aliases like "en" or
                        "en_US", but some only accept the full specification
                        like "en_US.ISO_8859-1".  On Unix systems you can use
-                       the this command to see what locales are supported: >
+                       this command to see what locales are supported: >
                                :!locale -a
 <                      With the "messages" argument the language used for
                        messages is set.  This can be different when you want,
@@ -68,7 +68,7 @@ use of "-" and "_".
                        With the "ctype" argument the language used for
                        character encoding is set.  This affects the libraries
                        that Vim was linked with.  It's unusual to set this to
-                       a different value from 'encoding'.  This sets
+                       a different value from 'encoding' or "C".  This sets
                        $LC_CTYPE.
                        With the "time" argument the language used for time
                        and date messages is set.  This affects strftime().
index f54b803..d40d825 100644 (file)
@@ -1,4 +1,4 @@
-*motion.txt*    For Vim version 7.3.  Last change: 2010 May 14
+*motion.txt*    For Vim version 7.4.  Last change: 2013 Jul 17
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -57,7 +57,7 @@ or change text.  The following operators are available:
        |>|     >       shift right
        |<|     <       shift left
        |zf|    zf      define a fold
-       |g@|    g@      call function set with the 'operatorfunc' option
+       |g@|    g@      call function set with the 'operatorfunc' option
 
 If the motion includes a count and the operator also had a count before it,
 the two counts are multiplied.  For example: "2d3w" deletes six words.
@@ -104,13 +104,14 @@ strokes and has limited redo functionality.  See the chapter on Visual mode
 |Visual-mode|.
 
 You can use a ":" command for a motion.  For example "d:call FindEnd()".
-But this can't be redone with "." if the command is more than one line.
+But this can't be repeated with "." if the command is more than one line.
 This can be repeated: >
        d:call search("f")<CR>
 This cannot be repeated: >
        d:if 1<CR>
           call search("f")<CR>
        endif<CR>
+Note that when using ":" any motion becomes characterwise exclusive.
 
 
 FORCING A MOTION TO BE LINEWISE, CHARACTERWISE OR BLOCKWISE
@@ -235,6 +236,8 @@ g$ or g<End>                When lines wrap ('wrap' on): To the last character of
                        the line is not on the screen or when a count is used.
                        Additionally, vertical movements keep the column,
                        instead of going to the end of the line.
+                       When 'virtualedit' is enabled moves to the end of the
+                       screen line.
                        {not in Vi}
 
                                                        *bar*
@@ -269,11 +272,11 @@ T{char}                   Till after [count]'th occurrence of {char} to the
                        {char} can be entered like with the |f| command.
 
                                                        *;*
-;                      Repeat latest f, t, F or T [count] times.
+;                      Repeat latest f, t, F or T [count] times. See |cpo-;|
 
                                                        *,*
 ,                      Repeat latest f, t, F or T in opposite direction
-                       [count] times.
+                       [count] times. See also |cpo-;|
 
 ==============================================================================
 3. Up-down motions                                     *up-down-motions*
@@ -326,6 +329,7 @@ gg                  Goto line [count], default first line, on the first
                        non-blank character |linewise|.  If 'startofline' not
                        set, keep the same column.
 
+                                                       *:[range]*
 :[range]               Set the cursor on the last line number in [range].
                        [range] can also be just one line number, e.g., ":1"
                        or ":'m".
@@ -344,6 +348,8 @@ gg                  Goto line [count], default first line, on the first
                        last number in it used as the byte count.  End-of-line
                        characters are counted depending on the current
                        'fileformat' setting.
+                       Also see the |line2byte()| function, and the 'o'
+                       option in 'statusline'.
                        {not in Vi}
                        {not available when compiled without the
                        |+byte_offset| feature}
@@ -511,6 +517,8 @@ always select less text than the "a" commands.
 These commands are {not in Vi}.
 These commands are not available when the |+textobjects| feature has been
 disabled at compile time.
+Also see `gn` and `gN`, operating on the last search pattern.
+
                                                        *v_aw* *aw*
 aw                     "a word", select [count] words (see |word|).
                        Leading or trailing white space is included, but not
@@ -687,6 +695,7 @@ movement commands are used.
        "daw"   delete a word                           *daw*
        "diW"   delete inner WORD (see |WORD|)          *diW*
        "daW"   delete a WORD (see |WORD|)              *daW*
+       "dgn"   delete the next search pattern match    *dgn*
        "dd"    delete one line                         |dd|
        "dis"   delete inner sentence                   *dis*
        "das"   delete a sentence                       *das*
@@ -748,6 +757,13 @@ m[  or  m]         Set the |'[| or |']| mark.  Useful when an operator is
                        to be simulated by multiple commands.  (does not move
                        the cursor, this is not a motion command).
 
+                                               *m<* *m>*
+m<  or  m>             Set the |'<| or |'>| mark.  Useful to change what the
+                       `gv` command selects.  (does not move the cursor, this
+                       is not a motion command).
+                       Note that the Visual mode cannot be set, only the
+                       start and end position.
+
                                                *:ma* *:mark* *E191*
 :[range]ma[rk] {a-zA-Z'}
                        Set mark {a-zA-Z'} at last line number in [range],
@@ -1015,8 +1031,6 @@ CTRL-O                    Go to [count] Older cursor position in jump list
 <Tab>          or                                      *CTRL-I* *<Tab>*
 CTRL-I                 Go to [count] newer cursor position in jump list
                        (not a motion command).
-                       In a |quickfix-window| it takes you to the position of
-                       the error under the cursor.
                        {not in Vi}
                        {not available without the |+jumplist| feature}
 
@@ -1033,20 +1047,20 @@ The maximum number of entries is fixed at 100.
 
 For example, after three jump commands you have this jump list:
 
-  jump line  col file/line ~
+  jump line  col file/text ~
     3    1    0 some text ~
     2   70    0 another line ~
     1  1154   23 end. ~
  > ~
 
-The "file/line" column shows the file name, or the text at the jump if it is
+The "file/text" column shows the file name, or the text at the jump if it is
 in the current file (an indent is removed and a long line is truncated to fit
 in the window).
 
 You are currently in line 1167.  If you then use the CTRL-O command, the
 cursor is put in line 1154.  This results in:
 
-  jump line  col file/line ~
+  jump line  col file/text ~
     2    1    0 some text ~
     1   70    0 another line ~
  >  0  1154   23 end. ~
@@ -1071,12 +1085,13 @@ only once.
 
 When the |:keepjumps| command modifier is used, jumps are not stored in the
 jumplist.  Jumps are also not stored in other cases, e.g., in a |:global|
-command.  You can explicitly add a jump by setting the ' mark.
+command.  You can explicitly add a jump by setting the ' mark with "m'".  Note
+that calling setpos() does not do this.
 
 After the CTRL-O command that got you into line 1154 you could give another
 jump command (e.g., "G").  The jump list would then become:
 
-  jump line  col file/line ~
+  jump line  col file/text ~
     4    1    0 some text ~
     3   70    0 another line ~
     2  1167    0 foo bar ~
index 4d109a5..e0ac2bf 100644 (file)
@@ -1,4 +1,4 @@
-*netbeans.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
+*netbeans.txt*  For Vim version 7.4.  Last change: 2012 Jan 26
 
 
                  VIM REFERENCE MANUAL    by Gordon Prieur et al.
@@ -118,7 +118,8 @@ In case you do not want the NetBeans interface you can disable it by
 uncommenting a line with "--disable-netbeans" in the Makefile.
 
 Currently the NetBeans interface is supported by Vim running in a terminal and
-by GVim when it is run with one of the following GUIs: GTK, GNOME, and Motif.
+by GVim when it is run with one of the following GUIs: GTK, GNOME, Windows,
+Athena and Motif.
 
 If Motif support is required the user must supply XPM libraries.  See
 |workshop-xpm| for details on obtaining the latest version of XPM.
@@ -262,6 +263,12 @@ The messages are currently sent over a socket.  Since the messages are in
 plain UTF-8 text this protocol could also be used with any other communication
 mechanism.
 
+Netbeans messages are processed when Vim is idle, waiting for user input.
+When Vim is run in non-interactive mode, for example when running an automated
+test case that sources a Vim script, the idle loop may not be called often
+enough. In that case, insert |:sleep| commands in the Vim script. The |:sleep|
+command does invoke Netbeans messages processing.
+
 6.1 Kinds of messages          |nb-messages|
 6.2 Terms                      |nb-terms|
 6.3 Commands                   |nb-commands|
@@ -819,7 +826,7 @@ These errors occur when a message violates the protocol:
 ==============================================================================
 7. NetBeans commands                                   *netbeans-commands*
 
-                                                       *:nbstart* *E511*
+                                                       *:nbstart* *E511* *E838*
 :nbs[tart] {connection}        Start a new Netbeans session with {connection} as the
                        socket connection parameters.  The format of
                        {connection} is described in |netbeans-parameters|.
@@ -832,11 +839,16 @@ These errors occur when a message violates the protocol:
                        signs.
 
                                                        *:nbkey*
-:nb[key] {key}         Pass the {key} to the Vim Controller for processing
-
-When a hot-key has been installed with the specialKeys command, this command
-can be used to generate a hotkey messages to the Vim Controller. The events
-newDotAndMark, keyCommand and keyAtPos are generated (in this order).
+:nb[key] {key}         Pass the {key} to the Vim Controller for processing.
+                       When a hot-key has been installed with the specialKeys
+                       command, this command can be used to generate a hotkey
+                       message to the Vim Controller.
+                       This command can also be used to pass any text to the
+                       Vim  Controller. It is used by Pyclewn, for example,
+                       to build the complete set of gdb commands as Vim user
+                       commands.
+                       The events newDotAndMark, keyCommand and keyAtPos are
+                       generated (in this order).
 
 
 ==============================================================================
index 1282a90..fdc5ad2 100644 (file)
@@ -1,4 +1,4 @@
-*options.txt*  For Vim version 7.3.  Last change: 2010 Aug 15
+*options.txt*  For Vim version 7.4.  Last change: 2013 Jul 09
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -150,6 +150,18 @@ example, if Alt-b produces <Esc>b, use this: >
 (the ^[ is a real <Esc> here, use CTRL-V <Esc> to enter it)
 The advantage over a mapping is that it works in all situations.
 
+You can define any key codes, e.g.: >
+       :set t_xy=^[foo;
+There is no warning for using a name that isn't recognized.  You can map these
+codes as you like: >
+       :map <t_xy> something
+<                                                              *E846*
+When a key code is not set, it's like it does not exist.  Trying to get its
+value will result in an error: >
+       :set t_kb=
+       :set t_kb
+       E846: Key code not set: t_kb
+
 The t_xx options cannot be set from a |modeline| or in the |sandbox|, for
 security reasons.
 
@@ -265,8 +277,10 @@ Now the 'list' option is not set, because ":set nolist" resets the global
 value, ":setlocal list" only changes the local value and ":e two" gets the
 global value.  Note that if you do this next: >
        :e one
-You will not get back the 'list' value as it was the last time you edited
-"one".  The options local to a window are not remembered for each buffer.
+You will get back the 'list' value as it was the last time you edited "one".
+The options local to a window are remembered for each buffer.  This also
+happens when the buffer is not loaded, but they are lost when the buffer is
+wiped out |:bwipe|.
 
                                                        *:setl* *:setlocal*
 :setl[ocal] ...                Like ":set" but set only the value local to the
@@ -289,9 +303,8 @@ You will not get back the 'list' value as it was the last time you edited
                        copying the value.
                        {not in Vi}
 
-:se[t] {option}<       Set the local value of {option} to its global value by
-                       making it empty.  Only makes sense for |global-local|
-                       options.
+:se[t] {option}<       For |global-local| options: Remove the local value of
+                       {option}, so that the global value will be used.
                        {not in Vi}
 
                                                        *:setg* *:setglobal*
@@ -361,6 +374,7 @@ Setting the filetype
                        settings and syntax files to be loaded.
                        {not in Vi}
 
+                               *option-window* *optwin*
 :bro[wse] se[t]                        *:set-browse* *:browse-set* *:opt* *:options*
 :opt[ions]             Open a window for viewing and setting all options.
                        Options are grouped by function.
@@ -388,6 +402,9 @@ On Unix systems the form "${HOME}" can be used too.  The name between {} can
 contain non-id characters then.  Note that if you want to use this for the
 "gf" command, you need to add the '{' and '}' characters to 'isfname'.
 
+On MS-Windows, if $HOME is not defined as an environment variable, then
+at runtime Vim will set it to the expansion of $HOMEDRIVE$HOMEPATH.
+
 NOTE: expanding environment variables and "~/" is only done with the ":set"
 command, not when assigning a value to an option with ":let".
 
@@ -465,39 +482,42 @@ to set options automatically for one or more files:
 There are two forms of modelines.  The first form:
        [text]{white}{vi:|vim:|ex:}[white]{options}
 
-[text]         any text or empty
-{white}                at least one blank character (<Space> or <Tab>)
-{vi:|vim:|ex:} the string "vi:", "vim:" or "ex:"
-[white]                optional white space
-{options}      a list of option settings, separated with white space or ':',
-               where each part between ':' is the argument for a ":set"
-               command (can be empty)
+[text]                 any text or empty
+{white}                        at least one blank character (<Space> or <Tab>)
+{vi:|vim:|ex:}         the string "vi:", "vim:" or "ex:"
+[white]                        optional white space
+{options}              a list of option settings, separated with white space
+                       or ':', where each part between ':' is the argument
+                       for a ":set" command (can be empty)
 
-Example:
+Examples:
    vi:noai:sw=3 ts=6 ~
+   vim: tw=77 ~
 
 The second form (this is compatible with some versions of Vi):
 
-       [text]{white}{vi:|vim:|ex:}[white]se[t] {options}:[text]
+       [text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]
 
-[text]         any text or empty
-{white}                at least one blank character (<Space> or <Tab>)
-{vi:|vim:|ex:} the string "vi:", "vim:" or "ex:"
-[white]                optional white space
-se[t]          the string "set " or "se " (note the space)
-{options}      a list of options, separated with white space, which is the
-               argument for a ":set" command
-:              a colon
-[text]         any text or empty
+[text]                 any text or empty
+{white}                        at least one blank character (<Space> or <Tab>)
+{vi:|vim:|Vim:|ex:}    the string "vi:", "vim:", "Vim:" or "ex:"
+[white]                        optional white space
+se[t]                  the string "set " or "se " (note the space); When
+                       "Vim" is used it must be "set".
+{options}              a list of options, separated with white space, which
+                       is the argument for a ":set" command
+:                      a colon
+[text]                 any text or empty
 
-Example:
+Examples:
    /* vim: set ai tw=75: */ ~
+   /* Vim: set ai tw=75: */ ~
 
-The white space before {vi:|vim:|ex:} is required.  This minimizes the chance
-that a normal word like "lex:" is caught.  There is one exception: "vi:" and
-"vim:" can also be at the start of the line (for compatibility with version
-3.0).  Using "ex:" at the start of the line will be ignored (this could be
-short for "example:").
+The white space before {vi:|vim:|Vim:|ex:} is required.  This minimizes the
+chance that a normal word like "lex:" is caught.  There is one exception:
+"vi:" and "vim:" can also be at the start of the line (for compatibility with
+version 3.0).  Using "ex:" at the start of the line will be ignored (this
+could be short for "example:").
 
                                                        *modeline-local*
 The options are set like with ":setlocal": The new value only applies to the
@@ -513,7 +533,7 @@ in another window.  But window-local options will be set.
 
                                                        *modeline-version*
 If the modeline is only to be used for some versions of Vim, the version
-number can be specified where "vim:" is used:
+number can be specified where "vim:" or "Vim:" is used:
        vim{vers}:      version {vers} or later
        vim<{vers}:     version before {vers}
        vim={vers}:     version {vers}
@@ -684,6 +704,10 @@ A jump table for the options with a short description can be found at |Q_op|.
        when the system locale is set to one of CJK locales.  See Unicode
        Standard Annex #11 (http://www.unicode.org/reports/tr11).
 
+       Vim may set this option automatically at startup time when Vim is
+       compiled with the |+termresponse| feature and if |t_u7| is set to the
+       escape sequence to request cursor position report.
+
                        *'antialias'* *'anti'* *'noantialias'* *'noanti'*
 'antialias' 'anti'     boolean (default: off)
                        global
@@ -729,7 +753,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        - Reset the 'rightleft' option.
        - Disable the use of 'keymap' (without changing its value).
        Note that 'arabicshape' and 'delcombine' are not reset (it is a global
-       option.
+       option).
        Also see |arabic.txt|.
 
                                        *'arabicshape'* *'arshape'*
@@ -741,7 +765,7 @@ A jump table for the options with a short description can be found at |Q_op|.
                        feature}
        When on and 'termbidi' is off, the required visual character
        corrections that need to take place for displaying the Arabic language
-       take affect.  Shaping, in essence, gets enabled; the term is a broad
+       take effect.  Shaping, in essence, gets enabled; the term is a broad
        one which encompasses:
          a) the changing/morphing of characters based on their location
             within a word (initial, medial, final and stand-alone).
@@ -802,7 +826,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        been set.
 
                                                        *'background'* *'bg'*
-'background' 'bg'      string  (default "dark" or "light")
+'background' 'bg'      string  (default "dark" or "light", see below)
                        global
                        {not in Vi}
        When set to "dark", Vim will try to use colors that look good on a
@@ -836,6 +860,12 @@ A jump table for the options with a short description can be found at |Q_op|.
        color).  To get around this, force the GUI window to be opened by
        putting a ":gui" command in the .gvimrc file, before where the value
        of 'background' is used (e.g., before ":syntax on").
+
+       For MS-DOS, Windows and OS/2 the default is "dark".
+       For other systems "dark" is used when 'term' is "linux",
+       "screen.linux", "cygwin" or "putty", or $COLORFGBG suggests a dark
+       background.  Otherwise the default is "light".
+
        Normally this option would be set in the .vimrc file.  Possibly
        depending on the terminal name.  Example: >
                :if &term == "pcterm"
@@ -965,7 +995,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        - The backup file will be created in the first directory in the list
          where this is possible.  The directory must exist, Vim will not
          create it for you.
-       - Empty means that no backup file will be created ('patchmode' is
+       - Empty means that no backup file will be created ( 'patchmode' is
          impossible!).  Writing may fail because of this.
        - A directory "." means to put the backup file in the same directory
          as the edited file.
@@ -1026,6 +1056,11 @@ A jump table for the options with a short description can be found at |Q_op|.
        When $TMPDIR, $TMP or $TEMP is not defined, it is not used for the
        default value.  "/tmp/*" is only used for Unix.
 
+       WARNING: Not having a backup file means that when Vim fails to write
+       your buffer correctly and then, for whatever reason, Vim exits, you
+       lose both the original file and what you were writing.  Only disable
+       backups if you don't care about losing the file.
+
        Note that environment variables are not expanded.  If you want to use
        $HOME you must expand it explicitly, e.g.: >
                :let backupskip = escape(expand('$HOME'), '\') . '/tmp/*'
@@ -1081,8 +1116,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        Vim does not try to send a message to an external debugger (Netbeans
        or Sun Workshop).
 
-       The expression may be evaluated in the |sandbox|, see
-       |sandbox-option|.
+       The expression will be evaluated in the |sandbox| when set from a
+       modeline, see |sandbox-option|.
 
        It is not allowed to change text or jump to another window while
        evaluating 'balloonexpr' |textlock|.
@@ -1198,7 +1233,8 @@ A jump table for the options with a short description can be found at |Q_op|.
                        |:bwipeout|
 
        CAREFUL: when "unload", "delete" or "wipe" is used changes in a buffer
-       are lost without a warning.
+       are lost without a warning.  Also, these values may break autocommands
+       that switch between buffers temporarily.
        This option is used together with 'buftype' and 'swapfile' to specify
        special kinds of buffers.   See |special-buffers|.
 
@@ -1425,6 +1461,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        This option is a list of comma separated names.
        These names are recognized:
 
+                                               *clipboard-unnamed*
        unnamed         When included, Vim will use the clipboard register '*'
                        for all yank, delete, change and put operations which
                        would normally go to the unnamed register.  When a
@@ -1434,6 +1471,20 @@ A jump table for the options with a short description can be found at |Q_op|.
                        explicitly accessed using the "* notation.  Also see
                        |gui-clipboard|.
 
+                                               *clipboard-unnamedplus*
+       unnamedplus     A variant of the "unnamed" flag which uses the
+                       clipboard register '+' (|quoteplus|) instead of
+                       register '*' for all yank, delete, change and put
+                       operations which would normally go to the unnamed
+                       register.  When "unnamed" is also included to the
+                       option, yank operations (but not delete, change or
+                       put) will additionally copy the text into register
+                       '*'.
+                       Only available with the |+X11| feature.
+                       Availability can be checked with: >
+                               if has('unnamedplus')
+<
+                                               *clipboard-autoselect*
        autoselect      Works like the 'a' flag in 'guioptions': If present,
                        then whenever Visual mode is started, or the Visual
                        area extended, Vim tries to become the owner of the
@@ -1445,9 +1496,16 @@ A jump table for the options with a short description can be found at |Q_op|.
                        "autoselect" flag is used.
                        Also applies to the modeless selection.
 
+                                               *clipboard-autoselectplus*
+       autoselectplus  Like "autoselect" but using the + register instead of
+                       the * register.  Compare to the 'P' flag in
+                       'guioptions'.
+
+                                               *clipboard-autoselectml*
        autoselectml    Like "autoselect", but for the modeless selection
                        only.  Compare to the 'A' flag in 'guioptions'.
 
+                                               *clipboard-html*
        html            When the clipboard contains HTML, use this when
                        pasting.  When putting text on the clipboard, mark it
                        as HTML.  This works to copy rendered HTML from
@@ -1458,6 +1516,7 @@ A jump table for the options with a short description can be found at |Q_op|.
                        Only supported for GTK version 2 and later.
                        Only available with the |+multi_byte| feature.
 
+                                               *clipboard-exclude*
        exclude:{pattern}
                        Defines a pattern that is matched against the name of
                        the terminal 'term'.  If there is a match, no
@@ -1496,6 +1555,25 @@ A jump table for the options with a short description can be found at |Q_op|.
                        feature}
        Number of screen lines to use for the command-line window. |cmdwin|
 
+                                               *'colorcolumn'* *'cc'*
+'colorcolumn' 'cc'     string  (default "")
+                       local to window
+                       {not in Vi}
+                       {not available when compiled without the |+syntax|
+                       feature}
+       'colorcolumn' is a comma separated list of screen columns that are
+       highlighted with ColorColumn |hl-ColorColumn|.  Useful to align
+       text.  Will make screen redrawing slower.
+       The screen column can be an absolute number, or a number preceded with
+       '+' or '-', which is added to or subtracted from 'textwidth'. >
+
+               :set cc=+1  " highlight column after 'textwidth'
+               :set cc=+1,+2,+3  " highlight three columns after 'textwidth'
+               :hi ColorColumn ctermbg=lightgrey guibg=lightgrey
+<
+       When 'textwidth' is zero then the items with '-' and '+' are not used.
+       A maximum of 256 columns are highlighted.
+
                                                *'columns'* *'co'* *E594*
 'columns' 'co'         number  (default 80 or terminal width)
                        global
@@ -1634,7 +1712,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        when CTRL-P or CTRL-N are used.  It is also used for whole-line
        completion |i_CTRL-X_CTRL-L|.  It indicates the type of completion
        and the places to scan.  It is a comma separated list of flags:
-       .       scan the current buffer ('wrapscan' is ignored)
+       .       scan the current buffer ( 'wrapscan' is ignored)
        w       scan buffers from other windows
        b       scan other loaded buffers that are in the buffer list
        u       scan the unloaded buffers that are in the buffer list
@@ -1680,7 +1758,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        with CTRL-X CTRL-U. |i_CTRL-X_CTRL-U|
        See |complete-functions| for an explanation of how the function is
        invoked and what it should return.
-
+       This option cannot be set from a |modeline| or in the |sandbox|, for
+       security reasons.
 
                                                *'completeopt'* *'cot'*
 'completeopt' 'cot'    string  (default: "menu,preview")
@@ -2069,6 +2148,12 @@ A jump table for the options with a short description can be found at |Q_op|.
                                                                *cpo->*
                >       When appending to a register, put a line break before
                        the appended text.
+                                                               *cpo-;*
+               ;       When using |,| or |;| to repeat the last |t| search
+                       and the cursor is right in front of the searched
+                       character, the cursor won't move. When not included,
+                       the cursor would skip over it and jump to the
+                       following occurrence.
 
        POSIX flags.  These are not included in the Vi default value, except
        when $VIM_POSIX was set on startup. |posix|
@@ -2161,6 +2246,16 @@ A jump table for the options with a short description can be found at |Q_op|.
        Specifies whether to use quickfix window to show cscope results.
        See |cscopequickfix|.
 
+               *'cscoperelative'* *'csre'* *'nocscoperelative'* *'nocsre'*
+'cscoperelative' 'csre' boolean (default off)
+                       global
+                       {not available when compiled without the |+cscope|
+                       feature}
+                       {not in Vi}
+       In the absence of a prefix (-P) for cscope. setting this option enables
+       to use the basename of cscope.out path as the prefix.
+       See |cscoperelative|.
+
                                *'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
 'cscopetag' 'cst'      boolean (default off)
                        global
@@ -2782,7 +2877,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        See |file-formats| and |file-read|.
        For the character encoding of the file see 'fileencoding'.
        When 'binary' is set, the value of 'fileformat' is ignored, file I/O
-       works like it was set to "unix'.
+       works like it was set to "unix".
        This option is set automatically when starting to edit a file and
        'fileformats' is not empty and 'binary' is off.
        When this option is set, after starting to edit a file, the 'modified'
@@ -2817,13 +2912,14 @@ A jump table for the options with a short description can be found at |Q_op|.
          2. If a <NL> is found and 'fileformats' includes "unix", 'fileformat'
             is set to "unix".  Note that when a <NL> is found without a
             preceding <CR>, "unix" is preferred over "dos".
-         3. If 'fileformats' includes "mac", 'fileformat' is set to "mac".
-            This means that "mac" is only chosen when "unix" is not present,
-            or when no <NL> is found in the file, and when "dos" is not
-            present, or no <CR><NL> is present in the file.
-            Also if "unix" was first chosen, but the first <CR> is before
-            the first <NL> and there appears to be more <CR>'s than <NL>'s in
-            the file, then 'fileformat' is set to "mac".
+         3. If 'fileformat' has not yet been set, and if 'fileformats'
+            includes "mac", 'fileformat' is set to "mac".
+            This means that "mac" is only chosen when:
+             "unix" is not present or no <NL> is found in the file, and
+             "dos" is not present or no <CR><NL> is found in the file.
+            Except: if "unix" was chosen, but there is a <CR> before
+            the first <NL>, and there appear to be more <CR>s than <NL>s in
+            the first few lines, "mac" is used.
          4. If 'fileformat' is still not set, the first name from
             'fileformats' is used.
          When reading a file into an existing buffer, the same is done, but
@@ -2831,6 +2927,9 @@ A jump table for the options with a short description can be found at |Q_op|.
          file only, the option is not changed.
        When 'binary' is set, the value of 'fileformats' is not used.
 
+       Note that when Vim starts up with an empty buffer this option is not
+       used.  Set 'fileformat' in your .vimrc instead.
+
        For systems with a Dos-like <EOL> (<CR><NL>), when reading files that
        are ":source"ed and for vimrc files, automatic <EOL> detection may be
        done:
@@ -2847,6 +2946,14 @@ A jump table for the options with a short description can be found at |Q_op|.
        NOTE: This option is set to the Vi default value when 'compatible' is
        set and to the Vim default value when 'compatible' is reset.
 
+               *'fileignorecase'* *'fic'* *'nofileignorecase'* *'nofic'*
+'fileignorecase' 'fic' boolean (default on for systems where case in file
+                                names is normally ignored)
+                       global
+                       {not in Vi}
+       When set case is ignored when using file names and directories.
+       See 'wildignorecase' for only ignoring case when doing completion.
+
                                        *'filetype'* *'ft'*
 'filetype' 'ft'                string (default: "")
                        local to buffer
@@ -2871,8 +2978,6 @@ A jump table for the options with a short description can be found at |Q_op|.
        This will use the "c" filetype first, then the "doxygen" filetype.
        This works both for filetype plugins and for syntax files.  More than
        one dot may appear.
-       Do not confuse this option with 'osfiletype', which is for the file
-       type that is actually stored with the file.
        This option is not copied to another buffer, independent of the 's' or
        'S' flag in 'cpoptions'.
        Only normal file name characters can be used, "/\*?[|<>" are illegal.
@@ -2966,8 +3071,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        The expression used for when 'foldmethod' is "expr".  It is evaluated
        for each line to obtain its fold level.  See |fold-expr|.
 
-       The expression may be evaluated in the |sandbox|, see
-       |sandbox-option|.
+       The expression will be evaluated in the |sandbox| if set from a
+       modeline, see |sandbox-option|.
        This option can't be set from a |modeline| when the 'diff' option is
        on.
 
@@ -3044,9 +3149,11 @@ A jump table for the options with a short description can be found at |Q_op|.
                        {not in Vi}
                        {not available when compiled without the |+folding|
                        feature}
-       Sets the minimum number of screen lines for a fold to be displayed
-       closed.  Also for manually closed folds.
-       Note that this only has an effect of what is displayed.  After using
+       Sets the number of screen lines above which a fold can be displayed
+       closed.  Also for manually closed folds.  With the default value of
+       one a fold can only be closed if it takes up two or more screen lines.
+       Set to zero to be able to close folds of just one screen line.
+       Note that this only has an effect on what is displayed.  After using
        "zc" to close a fold, which is displayed open because it's smaller
        than 'foldminlines', a following "zc" may close a containing fold.
 
@@ -3070,6 +3177,10 @@ A jump table for the options with a short description can be found at |Q_op|.
        Specifies for which type of commands folds will be opened, if the
        command moves the cursor into a closed fold.  It is a comma separated
        list of items.
+       NOTE: When the command is part of a mapping this option is not used.
+       Add the |zv| command to the mapping to get the same effect.
+       (rationale: the mapping may want to control opening folds itself)
+
                item            commands ~
                all             any
                block           "(", "{", "[[", "[{", etc.
@@ -3084,8 +3195,6 @@ A jump table for the options with a short description can be found at |Q_op|.
                                Also for |[s| and |]s|.
                tag             jumping to a tag: ":ta", CTRL-T, etc.
                undo            undo or redo: "u" and CTRL-R
-       When the command is part of a mapping this option is not used.  Add
-       the |zv| command to the mapping to get the same effect.
        When a movement command is used for an operator (e.g., "dl" or "y%")
        this option is not used.  This means the operator will include the
        whole closed fold.
@@ -3105,8 +3214,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        An expression which is used to specify the text displayed for a closed
        fold.  See |fold-foldtext|.
 
-       The expression may be evaluated in the |sandbox|, see
-       |sandbox-option|.
+       The expression will be evaluated in the |sandbox| if set from a
+       modeline, see |sandbox-option|.
 
        It is not allowed to change text or jump to another window while
        evaluating 'foldtext' |textlock|.
@@ -3151,8 +3260,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        format function will be used |C-indenting|.
        Environment variables are expanded |:set_env|.  See |option-backslash|
        about including spaces and backslashes.
-       The expression may be evaluated in the |sandbox|, see
-       |sandbox-option|.
+       This option cannot be set from a |modeline| or in the |sandbox|, for
+       security reasons.
 
                                                *'formatexpr'* *'fex'*
 'formatexpr' 'fex'     string (default "")
@@ -3185,8 +3294,9 @@ A jump table for the options with a short description can be found at |Q_op|.
        When the expression evaluates to non-zero Vim will fall back to using
        the internal format mechanism.
 
-       The expression may be evaluated in the |sandbox|, see
-       |sandbox-option|.
+       The expression will be evaluated in the |sandbox| when set from a
+       modeline, see |sandbox-option|.  That stops the option from working,
+       since changing the buffer text is not allowed.
 
                                                *'fsync'* *'fs'*
 'fsync' 'fs'           boolean (default on)
@@ -3338,7 +3448,7 @@ A jump table for the options with a short description can be found at |Q_op|.
            :highlight Cursor gui=NONE guifg=bg guibg=fg
 <
                                        *'guifont'* *'gfn'*
-                                                  *E235* *E596* *E610* *E611*
+                                                  *E235* *E596*
 'guifont' 'gfn'                string  (default "")
                        global
                        {not in Vi}
@@ -3470,6 +3580,10 @@ A jump table for the options with a short description can be found at |Q_op|.
        to set 'guifontwide' at all unless you want to override the choice
        made by Pango/Xft.
 
+       Windows +multibyte only:                *guifontwide_win_mbyte*
+
+       If set and valid, 'guifontwide' is used for IME instead of 'guifont'.
+
                                                *'guiheadroom'* *'ghr'*
 'guiheadroom' 'ghr'    number  (default 50)
                        global
@@ -3483,8 +3597,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        screen.
 
                                                *'guioptions'* *'go'*
-'guioptions' 'go'      string  (default "gmrLtT"   (MS-Windows),
-                                        "agimrLtT" (GTK, Motif and Athena))
+'guioptions' 'go'      string  (default "egmrLtT"   (MS-Windows),
+                                        "aegimrLtT" (GTK, Motif and Athena))
                        global
                        {not in Vi}
                        {only available when compiled with GUI enabled}
@@ -3510,6 +3624,9 @@ A jump table for the options with a short description can be found at |Q_op|.
                windowing system's global selection unless explicitly told to
                by a yank or delete operation for the "* register.
                The same applies to the modeless selection.
+                                                               *'go-P'*
+         'P'   Like autoselect but using the "+ register instead of the "*
+               register.
                                                                *'go-A'*
          'A'   Autoselect for the modeless selection.  Like 'a', but only
                applies to the modeless selection.
@@ -3698,9 +3815,10 @@ A jump table for the options with a short description can be found at |Q_op|.
 'highlight' 'hl'       string  (default (as a single string):
                                     "8:SpecialKey,@:NonText,d:Directory,
                                     e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,
-                                    M:ModeMsg,n:LineNr,r:Question,
-                                    s:StatusLine,S:StatusLineNC,c:VertSplit,
-                                    t:Title,v:Visual,w:WarningMsg,W:WildMenu,
+                                    M:ModeMsg,n:LineNr,N:CursorLineNr,
+                                    r:Question,s:StatusLine,S:StatusLineNC,
+                                    c:VertSplit, t:Title,v:Visual,
+                                    w:WarningMsg,W:WildMenu,
                                     f:Folded,F:FoldColumn,A:DiffAdd,
                                     C:DiffChange,D:DiffDelete,T:DiffText,
                                     >:SignColumn,B:SpellBad,P:SpellCap,
@@ -3726,6 +3844,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        |hl-ModeMsg|     M  Mode (e.g., "-- INSERT --")
        |hl-LineNr|      n  line number for ":number" and ":#" commands, and
                            when 'number' or 'relativenumber' option is set.
+       |hl-CursorLineNr|  N like n for when 'cursorline' or 'relativenumber' is
+                           set.
        |hl-Question|    r  |hit-enter| prompt and yes/no questions
        |hl-StatusLine|  s  status line of current window |status-line|
        |hl-StatusLineNC| S  status lines of not-current windows
@@ -3787,14 +3907,16 @@ A jump table for the options with a short description can be found at |Q_op|.
        are not applied.
        See also: 'incsearch' and |:match|.
        When you get bored looking at the highlighted matches, you can turn it
-       off with |:nohlsearch|.  As soon as you use a search command, the
-       highlighting comes back.
+       off with |:nohlsearch|.  This does not change the option value, as
+       soon as you use a search command, the highlighting comes back.
        'redrawtime' specifies the maximum time spent on finding matches.
        When the search pattern can match an end-of-line, Vim will try to
        highlight all of the matched text.  However, this depends on where the
        search starts.  This will be the first line in the window or the first
        line below a closed fold.  A match in a previous line which is not
        drawn may not continue in a newly drawn line.
+       You can specify whether the highlight status is restored on startup
+       with the 'h' flag in 'viminfo' |viminfo-h|.
        NOTE: This option is reset when 'compatible' is set.
 
                                                *'history'* *'hi'*
@@ -3874,6 +3996,26 @@ A jump table for the options with a short description can be found at |Q_op|.
        Can be overruled by using "\c" or "\C" in the pattern, see
        |/ignorecase|.
 
+                                               *'imactivatefunc'* *'imaf'*
+'imactivatefunc' 'imaf'        string (default "")
+                       global
+                       {not in Vi}
+                       {only available when compiled with |+xim| and
+                       |+GUI_GTK|}
+       This option specifies a function that will be called to
+       activate/inactivate Input Method.
+
+       Example: >
+               function ImActivateFunc(active)
+                 if a:active
+                   ... do something
+                 else
+                   ... do something
+                 endif
+                 " return value is not used
+               endfunction
+               set imactivatefunc=ImActivateFunc
+<
                                                *'imactivatekey'* *'imak'*
 'imactivatekey' 'imak' string (default "")
                        global
@@ -3970,6 +4112,24 @@ A jump table for the options with a short description can be found at |Q_op|.
        The value 0 may not work correctly with Athena and Motif with some XIM
        methods.  Use 'imdisable' to disable XIM then.
 
+                                               *'imstatusfunc'* *'imsf'*
+'imstatusfunc' 'imsf'  string (default "")
+                       global
+                       {not in Vi}
+                       {only available when compiled with |+xim| and
+                       |+GUI_GTK|}
+       This option specifies a function that is called to obtain the status
+       of Input Method.  It must return a positive number when IME is active.
+
+       Example: >
+               function ImStatusFunc()
+                 let is_active = ...do something
+                 return is_active ? 1 : 0
+               endfunction
+               set imstatusfunc=ImStatusFunc
+<
+       NOTE: This function is invoked very often.  Keep it fast.
+
                                                *'include'* *'inc'*
 'include' 'inc'                string  (default "^\s*#\s*include")
                        global or local to buffer |global-local|
@@ -4003,8 +4163,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        found.  Allows doing "gf" on the name after an 'include' statement.
        Also used for |<cfile>|.
 
-       The expression may be evaluated in the |sandbox|, see
-       |sandbox-option|.
+       The expression will be evaluated in the |sandbox| when set from a
+       modeline, see |sandbox-option|.
 
        It is not allowed to change text or jump to another window while
        evaluating 'includeexpr' |textlock|.
@@ -4047,7 +4207,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        It is used when a new line is created, for the |=| operator and
        in Insert mode as specified with the 'indentkeys' option.
        When this option is not empty, it overrules the 'cindent' and
-       'smartindent' indenting.
+       'smartindent' indenting.  When 'lisp' is set, this option is
+       overridden by the Lisp indentation algorithm.
        When 'paste' is set this option is not used for indenting.
        The expression is evaluated with |v:lnum| set to the line number for
        which the indent is to be computed.  The cursor is also in this line
@@ -4067,8 +4228,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        See |indent-expression|.
        NOTE: This option is made empty when 'compatible' is set.
 
-       The expression may be evaluated in the |sandbox|, see
-       |sandbox-option|.
+       The expression will be evaluated in the |sandbox| when set from a
+       modeline, see |sandbox-option|.
 
        It is not allowed to change text or jump to another window while
        evaluating 'indentexpr' |textlock|.
@@ -4270,6 +4431,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        "echo &key".  This is to avoid showing it to someone who shouldn't
        know.  It also means you cannot see it yourself once you have set it,
        be careful not to make a typing error!
+       You can use "&key" in an expression to detect whether encryption is
+       enabled.  When 'key' is set it returns "*****" (five stars).
 
                                        *'keymap'* *'kmp'* *E544*
 'keymap' 'kmp'         string  (default "")
@@ -4483,7 +4646,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        The cursor is displayed at the start of the space a Tab character
        occupies, not at the end as usual in Normal mode.  To get this cursor
        position while displaying Tabs with spaces, use: >
-               :set list lcs=tab\ \ 
+               :set list lcs=tab:\ \ 
 <
        Note that list mode will also affect formatting (set with 'textwidth'
        or 'wrapmargin') when 'cpoptions' includes 'L'.  See 'listchars' for
@@ -4495,24 +4658,31 @@ A jump table for the options with a short description can be found at |Q_op|.
                        {not in Vi}
        Strings to use in 'list' mode and for the |:list| command.  It is a
        comma separated list of string settings.
+                                                       *lcs-eol*
          eol:c         Character to show at the end of each line.  When
                        omitted, there is no extra character at the end of the
                        line.
+                                                       *lcs-tab*
          tab:xy        Two characters to be used to show a tab.  The first
                        char is used once.  The second char is repeated to
                        fill the space that the tab normally occupies.
                        "tab:>-" will show a tab that takes four spaces as
                        ">---".  When omitted, a tab is show as ^I.
+                                                       *lcs-trail*
          trail:c       Character to show for trailing spaces.  When omitted,
                        trailing spaces are blank.
+                                                       *lcs-extends*
          extends:c     Character to show in the last column, when 'wrap' is
                        off and the line continues beyond the right of the
                        screen.
+                                                       *lcs-precedes*
          precedes:c    Character to show in the first column, when 'wrap'
                        is off and there is text preceding the character
                        visible in the first column.
+                                                       *lcs-conceal*
          conceal:c     Character to show in place of concealed text, when
                        'conceallevel' is set to 1.
+                                                       *lcs-nbsp*
          nbsp:c        Character to show for a non-breakable space (character
                        0xA0, 160).  Left blank when omitted.
 
@@ -4601,32 +4771,15 @@ A jump table for the options with a short description can be found at |Q_op|.
 <      This option cannot be set from a |modeline| or in the |sandbox|, for
        security reasons.
 
-                                               *'colorcolumn'* *'cc'*
-'colorcolumn' 'cc'     string  (default "")
-                       local to window
-                       {not in Vi}
-                       {not available when compiled without the |+syntax|
-                       feature}
-       'colorcolumn' is a comma separated list of screen columns that are
-       highlighted with ColorColumn |hl-ColorColumn|.  Useful to align
-       text.  Will make screen redrawing slower.
-       The screen column can be an absolute number, or a number preceded with
-       '+' or '-', which is added to or subtracted from 'textwidth'. >
-
-               :set cc=+1  " highlight column after 'textwidth'
-               :set cc=+1,+2,+3  " highlight three columns after 'textwidth'
-               :hi ColorColumn ctermbg=lightgrey guibg=lightgrey
-<
-       When 'textwidth' is zero then the items with '-' and '+' are not used.
-       A maximum of 256 columns are highlighted.
-
                                                *'matchpairs'* *'mps'*
 'matchpairs' 'mps'     string  (default "(:),{:},[:]")
                        local to buffer
                        {not in Vi}
        Characters that form pairs.  The |%| command jumps from one to the
-       other.  Currently only single byte character pairs are allowed, and
-       they must be different.  The characters must be separated by a colon.
+       other.
+       Only character pairs are allowed that are different, thus you cannot
+       jump between two double quotes.
+       The characters must be separated by a colon.
        The pairs must be separated by a comma.  Example for including '<' and
        '>' (HTML): >
                :set mps+=<:>
@@ -4806,6 +4959,10 @@ A jump table for the options with a short description can be found at |Q_op|.
           written.  A ":set nomodified" command also resets the original
           values to the current values and the 'modified' option will be
           reset.
+       This option is not set when a change is made to the buffer as the
+       result of a BufNewFile, BufRead/BufReadPost, BufWritePost,
+       FileAppendPost or VimLeave autocommand event.  See |gzip-example| for
+       an explanation.
        When 'buftype' is "nowrite" or "nofile" this option may be set, but
        will be ignored.
 
@@ -4994,7 +5151,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        respectively; see |CTRL-A| for more info on these commands.
        alpha   If included, single alphabetical characters will be
                incremented or decremented.  This is useful for a list with a
-               letter index a), b), etc.                       *octal-number*
+               letter index a), b), etc.               *octal-nrformats*
        octal   If included, numbers that start with a zero will be considered
                to be octal.  Example: Using CTRL-A on "007" results in "010".
        hex     If included, numbers starting with "0x" or "0X" will be
@@ -5014,8 +5171,20 @@ A jump table for the options with a short description can be found at |Q_op|.
        number.
        When a long, wrapped line doesn't start with the first character, '-'
        characters are put before the number.
-       See |hl-LineNr| for the highlighting used for the number.
-       When setting this option, 'relativenumber' is reset.
+       See |hl-LineNr|  and |hl-CursorLineNr| for the highlighting used for
+       the number.
+                                               *number_relativenumber*
+       The 'relativenumber' option changes the displayed number to be
+       relative to the cursor.  Together with 'number' there are these
+       four combinations (cursor in line 3):
+
+               'nonu'          'nu'            'nonu'          'nu'
+               'nornu'         'nornu'         'rnu'           'rnu'
+
+           |apple          |  1 apple      |  2 apple      |  2 apple
+           |pear           |  2 pear       |  1 pear       |  1 pear
+           |nobody         |  3 nobody     |  0 nobody     |3   nobody
+           |there          |  4 there      |  1 there      |  1 there
 
                                                *'numberwidth'* *'nuw'*
 'numberwidth' 'nuw'    number  (Vim default: 4  Vi default: 8)
@@ -5047,6 +5216,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        invoked and what it should return.
        This option is usually set by a filetype plugin:
        |:filetype-plugin-on|
+       This option cannot be set from a |modeline| or in the |sandbox|, for
+       security reasons.
 
 
                            *'opendevice'* *'odev'* *'noopendevice'* *'noodev'*
@@ -5072,20 +5243,12 @@ A jump table for the options with a short description can be found at |Q_op|.
        security reasons.
 
 
-                                       *'osfiletype'* *'oft'* *E366*
-'osfiletype' 'oft'     string (RISC-OS default: "Text",
-                               others default: "")
+                                       *'osfiletype'* *'oft'*
+'osfiletype' 'oft'     string (default: "")
                        local to buffer
                        {not in Vi}
-                       {only available when compiled with the |+osfiletype|
-                       feature}
-       Some operating systems store extra information about files besides
-       name, datestamp and permissions.  This option contains the extra
-       information, the nature of which will vary between systems.
-       The value of this option is usually set when the file is loaded, and
-       is used to set the operating system file type when file is written.
-       It can affect the pattern matching of the automatic commands.
-       |autocmd-osfiletypes|
+       This option was supported on RISC OS, which has been removed.
+
 
                                                *'paragraphs'* *'para'*
 'paragraphs' 'para'    string  (default "IPLPPPQPP TPHPLIPpLpItpplpipbp")
@@ -5190,7 +5353,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        recognized as a compressed file.
        Only normal file name characters can be used, "/\*?[|<>" are illegal.
 
-                                       *'path'* *'pa'* *E343* *E345* *E347*
+                               *'path'* *'pa'* *E343* *E345* *E347* *E854*
 'path' 'pa'            string  (default on Unix: ".,/usr/include,,"
                                   on OS/2:       ".,/emx/include,,"
                                   other systems: ".,,")
@@ -5405,6 +5568,19 @@ A jump table for the options with a short description can be found at |Q_op|.
        matches will be highlighted.  This is used to avoid that Vim hangs
        when using a very complicated pattern.
 
+                                               *'regexpengine'* *'re'*
+'regexpengine' 're'    number  (default 0)
+                       global
+                       {not in Vi}
+       This selects the default regexp engine. |two-engines|
+       The possible values are:
+               0       automatic selection
+               1       old engine
+               2       NFA engine
+       Note that when using the NFA engine and the pattern contains something
+       that is not supported the pattern will not match.  This is only useful
+       for debugging the regexp engine.
+
                *'relativenumber'* *'rnu'* *'norelativenumber'* *'nornu'*
 'relativenumber' 'rnu' boolean (default off)
                        local to window
@@ -5421,8 +5597,12 @@ A jump table for the options with a short description can be found at |Q_op|.
        number.
        When a long, wrapped line doesn't start with the first character, '-'
        characters are put before the number.
-       See |hl-LineNr| for the highlighting used for the number.
-       When setting this option, 'number' is reset.
+       See |hl-LineNr|  and |hl-CursorLineNr| for the highlighting used for
+       the number.
+       
+       The number in front of the cursor line also depends on the value of
+       'number', see |number_relativenumber| for all combinations of the two
+       options.
 
                                                *'remap'* *'noremap'*
 'remap'                        boolean (default on)
@@ -5843,16 +6023,20 @@ A jump table for the options with a short description can be found at |Q_op|.
        security reasons.
 
                                                *'shellcmdflag'* *'shcf'*
-'shellcmdflag' 'shcf'  string  (default: "-c", MS-DOS and Win32, when 'shell'
-                                       does not contain "sh" somewhere: "/c")
+'shellcmdflag' 'shcf'  string  (default: "-c";
+                                MS-DOS and Win32, when 'shell' does not
+                                contain "sh" somewhere: "/c")
                        global
                        {not in Vi}
        Flag passed to the shell to execute "!" and ":!" commands; e.g.,
        "bash.exe -c ls" or "command.com /c dir".  For the MS-DOS-like
        systems, the default is set according to the value of 'shell', to
        reduce the need to set this option by the user.  It's not used for
-       OS/2 (EMX figures this out itself).  See |option-backslash| about
-       including spaces and backslashes.  See |dos-shell|.
+       OS/2 (EMX figures this out itself).
+       On Unix it can have more than one flag.  Each white space separated
+       part is passed as an argument to the shell command.
+       See |option-backslash| about including spaces and backslashes.
+       Also see |dos-shell| for MS-DOS and MS-Windows.
        This option cannot be set from a |modeline| or in the |sandbox|, for
        security reasons.
 
@@ -5873,9 +6057,10 @@ A jump table for the options with a short description can be found at |Q_op|.
        For Unix the default it "| tee".  The stdout of the compiler is saved
        in a file and echoed to the screen.  If the 'shell' option is "csh" or
        "tcsh" after initializations, the default becomes "|& tee".  If the
-       'shell' option is "sh", "ksh", "zsh" or "bash" the default becomes
-       "2>&1| tee".  This means that stderr is also included.  Before using
-       the 'shell' option a path is removed, thus "/bin/sh" uses "sh".
+       'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh" or "bash" the
+       default becomes "2>&1| tee".  This means that stderr is also included.
+       Before using the 'shell' option a path is removed, thus "/bin/sh" uses
+       "sh".
        The initialization of this option is done after reading the ".vimrc"
        and the other initializations, so that when the 'shell' option is set
        there, the 'shellpipe' option changes automatically, unless it was
@@ -5954,7 +6139,8 @@ A jump table for the options with a short description can be found at |Q_op|.
                        {not in Vi}
        When on, use temp files for shell commands.  When off use a pipe.
        When using a pipe is not possible temp files are used anyway.
-       Currently a pipe is only supported on Unix.  You can check it with: >
+       Currently a pipe is only supported on Unix and MS-Windows 2K and
+       later.  You can check it with: >
                :if has("filterpipe")
 <      The advantage of using a pipe is that nobody can read the temp file
        and the 'shell' command does not need to support redirection.
@@ -5978,8 +6164,18 @@ A jump table for the options with a short description can be found at |Q_op|.
        0 and 2: use "shell 'shellcmdflag' cmd" to start external commands
        1 and 3: use "shell cmd" to start external commands
 
+                                               *'shellxescape'* *'sxe'*
+'shellxescape' 'sxe'   string  (default: "";
+                                for MS-DOS and MS-Windows: "\"&|<>()@^")
+                       global
+                       {not in Vi}
+       When 'shellxquote' is set to "(" then the characters listed in this
+       option will be escaped with a '^' character.  This makes it possible
+       to execute most external commands with cmd.exe.
+
                                                *'shellxquote'* *'sxq'*
 'shellxquote' 'sxq'    string  (default: "";
+                                       for Win32, when 'shell' is cmd.exe: "("
                                        for Win32, when 'shell' contains "sh"
                                        somewhere: "\""
                                        for Unix, when using system(): "\"")
@@ -5989,11 +6185,15 @@ A jump table for the options with a short description can be found at |Q_op|.
        the "!" and ":!" commands.  Includes the redirection.  See
        'shellquote' to exclude the redirection.  It's probably not useful
        to set both options.
-       This is an empty string by default.  Known to be useful for
-       third-party shells when using the Win32 version, such as the MKS Korn
-       Shell or bash, where it should be "\"".  The default is adjusted
-       according the value of 'shell', to reduce the need to set this option
-       by the user.  See |dos-shell|.
+       When the value is '(' then ')' is appended. When the value is '"('
+       then ')"' is appended.
+       When the value is '(' then also see 'shellxescape'.
+       This is an empty string by default on most systems, but is known to be
+       useful for on Win32 version, either for cmd.exe which automatically
+       strips off the first and last quote on a command, or 3rd-party shells
+       such as the MKS Korn Shell or bash, where it should be "\"".  The
+       default is adjusted according the value of 'shell', to reduce the need
+       to set this option by the user.  See |dos-shell|.
        This option cannot be set from a |modeline| or in the |sandbox|, for
        security reasons.
 
@@ -6011,6 +6211,8 @@ A jump table for the options with a short description can be found at |Q_op|.
                        local to buffer
        Number of spaces to use for each step of (auto)indent.  Used for
        |'cindent'|, |>>|, |<<|, etc.
+       When zero the 'ts' value will be used.  Use the |shiftwidth()|
+       function to get the effective shiftwidth value.
 
                                                *'shortmess'* *'shm'*
 'shortmess' 'shm'      string  (Vim default "filnxtToO", Vi default: "",
@@ -6214,7 +6416,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        Override the 'ignorecase' option if the search pattern contains upper
        case characters.  Only used when the search pattern is typed and
        'ignorecase' option is on.  Used for the commands "/", "?", "n", "N",
-       ":g" and ":s".  Not used for "*", "#", "gd", tag search, etc..  After
+       ":g" and ":s".  Not used for "*", "#", "gd", tag search, etc.  After
        "*" and "#" you can make 'smartcase' used by doing a "/" command,
        recalling the search pattern from history and hitting <Enter>.
        NOTE: This option is reset when 'compatible' is set.
@@ -6228,8 +6430,9 @@ A jump table for the options with a short description can be found at |Q_op|.
        Do smart autoindenting when starting a new line.  Works for C-like
        programs, but can also be used for other languages.  'cindent' does
        something like this, works better in most cases, but is more strict,
-       see |C-indenting|.  When 'cindent' is on, setting 'si' has no effect.
-       'indentexpr' is a more advanced alternative.
+       see |C-indenting|.  When 'cindent' is on or 'indentexpr' is set,
+       setting 'si' has no effect.  'indentexpr' is a more advanced
+       alternative.
        Normally 'autoindent' should also be on when using 'smartindent'.
        An indent is automatically inserted:
        - After a line ending in '{'.
@@ -6273,6 +6476,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        of 8, while being able to edit like it is set to 'sts'.  However,
        commands like "x" still work on the actual characters.
        When 'sts' is zero, this feature is off.
+       When 'sts' is negative, the value of 'shiftwidth' is used.
        'softtabstop' is set to 0 when the 'paste' option is set.
        See also |ins-expandtab|.  When 'expandtab' is not set, the number of
        spaces is minimized by using <Tab>s.
@@ -6467,7 +6671,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        where it was the last time the buffer was edited.
        NOTE: This option is set when 'compatible' is set.
 
-                          *'statusline'* *'stl'* *E540* *E541* *E542*
+                          *'statusline'* *'stl'* *E540* *E542*
 'statusline' 'stl'     string  (default empty)
                        global or local to window |global-local|
                        {not in Vi}
@@ -6480,12 +6684,15 @@ A jump table for the options with a short description can be found at |Q_op|.
        normal text.  Each status line item is of the form:
          %-0{minwid}.{maxwid}{item}
        All fields except the {item} is optional.  A single percent sign can
-       be given as "%%".  Up to 80 items can be specified.
+       be given as "%%".  Up to 80 items can be specified.  *E541*
 
        When the option starts with "%!" then it is used as an expression,
        evaluated and the result is used as the option value.  Example: >
                :set statusline=%!MyStatusLine()
 <      The result can contain %{} items that will be evaluated too.
+       Note that the "%!" expression is evaluated in the context of the
+       current window and buffer, while %{} items are evaluated in the
+       context of the window that the statusline belongs to.
 
        When there is error while evaluating the option then it will be made
        empty to avoid further errors.  Otherwise screen updating would loop.
@@ -6533,7 +6740,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        k S   Value of "b:keymap_name" or 'keymap' when |:lmap| mappings are
              being used: "<keymap>"
        n N   Buffer number.
-       b N   Value of byte under cursor.
+       b N   Value of character under cursor.
        B N   As above, in hexadecimal.
        o N   Byte number in file of byte under cursor, first byte is 1.
              Mnemonic: Offset from start of file (with one added)
@@ -6547,7 +6754,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        V N   Virtual column number as -{num}.  Not displayed if equal to 'c'.
        p N   Percentage through file in lines as in |CTRL-G|.
        P S   Percentage through file of displayed window.  This is like the
-             percentage described for 'ruler'.  Always 3 in length.
+             percentage described for 'ruler'.  Always 3 in length, unless
+             translated.
        a S   Argument list status as in default title.  ({current} of {max})
              Empty if the argument file count is zero or one.
        { NF  Evaluate expression between '%{' and '}' and substitute result.
@@ -6591,8 +6799,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        The variable "actual_curbuf" is set to the 'bufnr()' number of the
        real current buffer.
 
-       The 'statusline' option may be evaluated in the |sandbox|, see
-       |sandbox-option|.
+       The 'statusline' option will be evaluated in the |sandbox| if set from
+       a modeline, see |sandbox-option|.
 
        It is not allowed to change text or jump to another window while
        evaluating 'statusline' |textlock|.
@@ -6705,8 +6913,8 @@ A jump table for the options with a short description can be found at |Q_op|.
           usetab       Like "useopen", but also consider windows in other tab
                        pages.
           split        If included, split the current window before loading
-                       a buffer.  Otherwise: do not split, use current window.
-                       Supported in |quickfix| commands that display errors.
+                       a buffer for a |quickfix| command that display errors.
+                       Otherwise: do not split, use current window.
           newtab       Like "split", but open a new tab page.  Overrules
                        "split" when both are present.
 
@@ -6960,7 +7168,7 @@ A jump table for the options with a short description can be found at |Q_op|.
                        {not in Vi}
        Encoding used for the terminal.  This specifies what character
        encoding the keyboard produces and the display will understand.  For
-       the GUI it only applies to the keyboard ('encoding' is used for the
+       the GUI it only applies to the keyboard ( 'encoding' is used for the
        display).  Except for the Mac when 'macatsui' is off, then
        'termencoding' should be "macroman".
        In the Win32 console version the default value is the console codepage
@@ -7035,8 +7243,8 @@ A jump table for the options with a short description can be found at |Q_op|.
        the file should contain words with similar meaning, separated by
        non-keyword characters (white space is preferred).  Maximum line
        length is 510 bytes.
-       To obtain a file to be used here, check out the wordlist FAQ at
-       http://www.hyphenologist.co.uk .
+       To obtain a file to be used here, check out this ftp site:
+       ftp://ftp.ox.ac.uk/pub/wordlists/  First get the README file.
        To include a comma in a file name precede it with a backslash.  Spaces
        after a comma are ignored, otherwise spaces are included in the file
        name.  See |option-backslash| about using backslashes.
@@ -7311,6 +7519,12 @@ A jump table for the options with a short description can be found at |Q_op|.
           jsbterm      JSB term mouse handling.
                                                        *pterm-mouse*
           pterm        QNX pterm mouse handling.
+                                                       *urxvt-mouse*
+          urxvt        Mouse handling for the urxvt (rxvt-unicode) terminal.
+                                                       *sgr-mouse*
+          sgr          Mouse handling for the terminal that emits SGR-styled
+                       mouse reporting. Works with xterm version 277 or
+                       later.
 
        The mouse handling must be enabled at compile time |+mouse_xterm|
        |+mouse_dec| |+mouse_netterm|.
@@ -7323,6 +7537,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        or "xterm2" already.  The main use of this option is to set it to
        "xterm", when the terminal name doesn't start with "xterm", but it can
        handle xterm mouse codes.
+       The "sgr" value will be set if the xterm version is 277 or later.
        The "xterm2" value will be set if the xterm version is reported to be
        95 or higher.  This only works when compiled with the |+termresponse|
        feature and if |t_RV| is set to the escape sequence to request the
@@ -7362,7 +7577,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        given, no further entry is used.
        See |undo-persistence|.
 
-                                               *'undofile'* *'udf'*
+                               *'undofile'* *'noundofile'* *'udf'* *'noudf'*
 'undofile' 'udf'       boolean (default off)
                        local to buffer
                        {not in Vi}
@@ -7374,7 +7589,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        For more information about this feature see |undo-persistence|.
        The undo file is not read when 'undoreload' causes the buffer from
        before a reload to be saved for undo.
-       WARNING: this is a very new feature.  Use at your own risk!
+       When 'undofile' is turned off the undo file is NOT deleted.
 
                                                *'undolevels'* *'ul'*
 'undolevels' 'ul'      number  (default 100, 1000 for Unix, VMS,
@@ -7527,15 +7742,18 @@ A jump table for the options with a short description can be found at |Q_op|.
        parameter.  The following is a list of the identifying characters and
        the effect of their value.
        CHAR    VALUE   ~
+                                                       *viminfo-!*
        !       When included, save and restore global variables that start
                with an uppercase letter, and don't contain a lowercase
                letter.  Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
-               and "_K_L_M" are not.  Only String and Number types are
-               stored.
+               and "_K_L_M" are not.  Nested List and Dict items may not be
+               read back correctly, you end up with an empty item.
+                                                       *viminfo-quote*
        "       Maximum number of lines saved for each register.  Old name of
                the '<' item, with the disadvantage that you need to put a
                backslash before the ", otherwise it will be recognized as the
                start of a comment!
+                                                       *viminfo-%*
        %       When included, save and restore the buffer list.  If Vim is
                started with a file name argument, the buffer list is not
                restored.  If Vim is started without a file name argument, the
@@ -7545,38 +7763,48 @@ A jump table for the options with a short description can be found at |Q_op|.
                When followed by a number, the number specifies the maximum
                number of buffers that are stored.  Without a number all
                buffers are stored.
+                                                       *viminfo-'*
        '       Maximum number of previously edited files for which the marks
                are remembered.  This parameter must always be included when
                'viminfo' is non-empty.
                Including this item also means that the |jumplist| and the
                |changelist| are stored in the viminfo file.
+                                                       *viminfo-/*
        /       Maximum number of items in the search pattern history to be
                saved.  If non-zero, then the previous search and substitute
                patterns are also saved.  When not included, the value of
                'history' is used.
+                                                       *viminfo-:*
        :       Maximum number of items in the command-line history to be
                saved.  When not included, the value of 'history' is used.
+                                                       *viminfo-<*
        <       Maximum number of lines saved for each register.  If zero then
                registers are not saved.  When not included, all lines are
                saved.  '"' is the old name for this item.
                Also see the 's' item below: limit specified in Kbyte.
+                                                       *viminfo-@*
        @       Maximum number of items in the input-line history to be
                saved.  When not included, the value of 'history' is used.
+                                                       *viminfo-c*
        c       When included, convert the text in the viminfo file from the
                'encoding' used when writing the file to the current
                'encoding'.  See |viminfo-encoding|.
+                                                       *viminfo-f*
        f       Whether file marks need to be stored.  If zero, file marks ('0
                to '9, 'A to 'Z) are not stored.  When not present or when
                non-zero, they are all stored.  '0 is used for the current
                cursor position (when exiting or when doing ":wviminfo").
+                                                       *viminfo-h*
        h       Disable the effect of 'hlsearch' when loading the viminfo
                file.  When not included, it depends on whether ":nohlsearch"
                has been used since the last search command.
+                                                       *viminfo-n*
        n       Name of the viminfo file.  The name must immediately follow
                the 'n'.  Must be the last one!  If the "-i" argument was
                given when starting Vim, that file name overrides the one
                given here with 'viminfo'.  Environment variables are expanded
                when opening the file, not when setting the option.
+                                                       *viminfo-r*
        r       Removable media.  The argument is a string (up to the next
                ',').  This parameter can be given several times.  Each
                specifies the start of a path for which no marks will be
@@ -7585,6 +7813,7 @@ A jump table for the options with a short description can be found at |Q_op|.
                also use it for temp files, e.g., for Unix: "r/tmp".  Case is
                ignored.  Maximum length of each 'r' argument is 50
                characters.
+                                                       *viminfo-s*
        s       Maximum size of an item in Kbyte.  If zero then registers are
                not saved.  Currently only applies to registers.  The default
                "s10" will exclude registers with more than 10 Kbyte of text.
@@ -7634,8 +7863,9 @@ A jump table for the options with a short description can be found at |Q_op|.
        if the line was empty.  But it is far from Vi compatible.  It may also
        break some plugins or Vim scripts.  For example because |l| can move
        the cursor after the last character.  Use with care!
-       Using the |$| command will move to the last character in the line, not
+       Using the `$` command will move to the last character in the line, not
        past it.  This may actually move the cursor to the left!
+       The `g$` command will move to the end of the screen line.
        It doesn't make sense to combine "all" with "onemore", but you will
        not get a warning for it.
 
@@ -7736,9 +7966,9 @@ A jump table for the options with a short description can be found at |Q_op|.
                        {not available when compiled without the |+wildignore|
                        feature}
        A list of file patterns.  A file that matches with one of these
-       patterns is ignored when completing file or directory names, and
-       influences the result of |expand()|, |glob()| and |globpath()| unless
-       a flag is passed to disable this.
+       patterns is ignored when expanding |wildcards|, completing file or
+       directory names, and influences the result of |expand()|, |glob()| and
+       |globpath()| unless a flag is passed to disable this.
        The pattern is used like with |:autocmd|, see |autocmd-patterns|.
        Also see 'suffixes'.
        Example: >
@@ -7747,6 +7977,17 @@ A jump table for the options with a short description can be found at |Q_op|.
        a pattern from the list.  This avoids problems when a future version
        uses another default.
 
+
+                       *'wildignorecase'* *'wic'* *'nowildignorecase'* *'nowic'*
+'wildignorecase' 'wic' boolean (default off)
+                       global
+                       {not in Vi}
+       When set case is ignored when completing file names and directories.
+       Has no effect when 'fileignorecase' is set.
+       Does not apply when the shell is used to expand wildcards, which
+       happens when there are special characters.
+
+
                                *'wildmenu'* *'wmnu'* *'nowildmenu'* *'nowmnu'*
 'wildmenu' 'wmnu'      boolean (default off)
                        global
@@ -7761,6 +8002,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        CTRL-P/CTRL-N, cause the highlight to move to the appropriate match.
        When 'wildmode' is used, "wildmenu" mode is used where "full" is
        specified.  "longest" and "list" do not start "wildmenu" mode.
+       You can check the current mode with |wildmenumode()|.
        If there are more matches than can fit in the line, a ">" is shown on
        the right and/or a "<" is shown on the left.  The status line scrolls
        as needed.
@@ -8029,8 +8271,13 @@ A jump table for the options with a short description can be found at |Q_op|.
                        {not in Vi}
        Make a backup before overwriting a file.  The backup is removed after
        the file was successfully written, unless the 'backup' option is
-       also on.  Reset this option if your file system is almost full.  See
-       |backup-table| for another explanation.
+       also on.
+       WARNING: Switching this option off means that when Vim fails to write
+       your buffer correctly and then, for whatever reason, Vim exits, you
+       lose both the original file and what you were writing.  Only reset
+       this option if your file system is almost full and it makes the write
+       fail (and make sure not to exit Vim until the write was successful).
+       See |backup-table| for another explanation.
        When the 'backupskip' pattern matches, a backup is not made anyway.
        NOTE: This option is set to the default value when 'compatible' is
        set.
index 0140e20..5e564d8 100644 (file)
@@ -1,4 +1,4 @@
-*os_390.txt*    For Vim version 7.3.  Last change: 2010 May 30
+*os_390.txt*    For Vim version 7.4.  Last change: 2010 May 30
 
 
                  VIM REFERENCE MANUAL    by Ralf Schandl
index 06326e4..b9ac611 100644 (file)
@@ -1,4 +1,4 @@
-*os_amiga.txt*  For Vim version 7.3.  Last change: 2010 Aug 14
+*os_amiga.txt*  For Vim version 7.4.  Last change: 2010 Aug 14
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index d72317e..5099ae6 100644 (file)
@@ -1,4 +1,4 @@
-*os_beos.txt*  For Vim version 7.3.  Last change: 2010 Aug 14
+*os_beos.txt*  For Vim version 7.4.  Last change: 2010 Aug 14
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index 1efea7a..245a318 100644 (file)
@@ -1,4 +1,4 @@
-*os_dos.txt*    For Vim version 7.3.  Last change: 2006 Mar 30
+*os_dos.txt*    For Vim version 7.4.  Last change: 2006 Mar 30
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index ac9122a..9ed23b4 100644 (file)
@@ -1,4 +1,4 @@
-*os_mac.txt*    For Vim version 7.3.  Last change: 2006 Apr 30
+*os_mac.txt*    For Vim version 7.4.  Last change: 2006 Apr 30
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar et al.
index e665600..d44b1a4 100644 (file)
@@ -1,4 +1,4 @@
-*os_mint.txt*   For Vim version 7.3.  Last change: 2005 Mar 29
+*os_mint.txt*   For Vim version 7.4.  Last change: 2005 Mar 29
 
 
                  VIM REFERENCE MANUAL    by Jens M. Felderhoff
index 113fd14..bd996be 100644 (file)
@@ -1,4 +1,4 @@
-*os_msdos.txt*  For Vim version 7.3.  Last change: 2005 Mar 29
+*os_msdos.txt*  For Vim version 7.4.  Last change: 2005 Mar 29
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index 419c79a..231d7d1 100644 (file)
@@ -1,4 +1,4 @@
-*os_os2.txt*    For Vim version 7.3.  Last change: 2007 Apr 22
+*os_os2.txt*    For Vim version 7.4.  Last change: 2007 Apr 22
 
 
                  VIM REFERENCE MANUAL    by Paul Slootman
index ac401d1..92132e9 100644 (file)
@@ -1,4 +1,4 @@
-*os_qnx.txt*    For Vim version 7.3.  Last change: 2005 Mar 29
+*os_qnx.txt*    For Vim version 7.4.  Last change: 2005 Mar 29
 
 
                  VIM REFERENCE MANUAL    by Julian Kinraid
index b0790d4..62b4a4b 100644 (file)
-*os_risc.txt*   For Vim version 7.3.  Last change: 2010 Aug 07
+*os_risc.txt*   For Vim version 7.4.  Last change: 2011 May 10
 
 
                  VIM REFERENCE MANUAL    by Thomas Leonard
 
 
                                                *riscos* *RISCOS* *RISC-OS*
-This file contains the particularities for the RISC OS version of Vim.
+The RISC OS support has been removed from Vim with patch 7.3.187.
+If you would like to use Vim on RISC OS get the files from before that patch.
 
-The RISC OS port is a completely new port and is not based on the old "archi"
-port.
 
-1.  File locations             |riscos-locations|
-2.  Filename munging           |riscos-munging|
-3.  Command-line use           |riscos-commandline|
-4.  Desktop (GUI) use          |riscos-gui|
-5.  Remote use (telnet)                |riscos-remote|
-6.  Temporary files            |riscos-temp-files|
-7.  Interrupting               |riscos-interrupt|
-8.  Memory usage               |riscos-memory|
-9.  Filetypes                  |riscos-filetypes|
-10. The shell                  |riscos-shell|
-11. Porting new releases       |riscos-porting|
-
-If I've missed anything, email me and I'll try to fix it.  In fact, even if I
-haven't missed anything then email me anyway to give me some confidence that it
-actually works!
-
-Thomas Leonard <tal197@ecs.soton.ac.uk>
-
-       [these URLs no longer work...]
- Port homepage:        http://www.ecs.soton.ac.uk/~tal197/
-       or try: http://www.soton.ac.uk/~tal197/
-
-==============================================================================
-                                                       *riscos-locations*
-1. File locations
-
-The Vim executable and shared resource files are all stored inside the !Vim
-application directory.
-
-When !Vim is first seen by the filer, it aliases the *vi and *ex commands to
-run the command-line versions of Vim (see |riscos-commandline|).
-
-!Vim.Resources and !Vim.Resources2 contain the files from the standard Vim
-distribution, but modified slightly to work within the limits of ADFS, plus
-some extra files such as the window templates.
-
-User choices are read from "Choices:*" and are saved to "<Choices$Write>.*".
-If you have the new !Boot structure then these should be set up already.  If
-not, set Choices$Path to a list of directories to search when looking for
-user configuration files.  Set Choices$Write to the directory you want files
-to be saved into (so your search patterns and marks can be remembered between
-sessions).
-
-==============================================================================
-                                                       *riscos-munging*
-2. Filename munging
-
-All pathname munging is disabled by default, so Vim should behave like a
-normal RISC OS application now.  So, if you want to edit "doc/html" then you
-actually type "*vi doc/html".
-
-The only times munging is done is when:
-
-- Searching included files from C programs, since these are always munged.
-  See |[I|.
-  Note: make sure you are in the right directory when you use this
-       command (i.e. the one with subdirectories "c" and "h").
-
-- Sourcing files using |:so|.
-  Paths starting "$VIM/" are munged like this:
-
-  $VIM/syntax/help.vim  ->  Vim:syntax.help
-
-  Also, files ending in ".vim" have their extensions removed, and slashes
-  replaced with dots.
-
-Some tag files and script files may have to be edited to work under this port.
-
-==============================================================================
-                                                       *riscos-commandline*
-3. Command-line use
-
-To use Vim from the command-line use the "*vi" command (or "*ex" for
-|Ex-mode|).
-
-Type "*vi -h" for a list of options.
-
-Running the command-line version of Vim in a large high-color mode may cause
-the scrolling to be very slow.  Either change to a mode with fewer colors or
-use the GUI version.
-
-Also, holding down Ctrl will slow it down even more, and Ctrl-Shift will
-freeze it, as usual for text programs.
-
-==============================================================================
-                                                       *riscos-gui*
-4. Desktop use
-
-Limitations:
-
-- Left scrollbars don't work properly (right and bottom are fine).
-- Doesn't increase scroll speed if it gets behind.
-
-You can resize the window by dragging the lower-right corner, even though
-there is no icon shown there.
-
-You can use the --rows and --columns arguments to specify the initial size of
-the Vim window, like this: >
-
-  *Vi -g --rows 20 --columns 80
-
-The global clipboard is supported, so you can select some text and then
-paste it directly into another application (provided it supports the
-clipboard too).
-
-Clicking Menu now opens a menu like a normal RISC OS program.  Hold down Shift
-when clicking Menu to paste (from the global clipboard).
-
-Dragging a file to the window replaces the CURRENT buffer (the one with the
-cursor, NOT the one you dragged to) with the file.
-
-Dragging with Ctrl held down causes a new Vim window to be opened for the
-file (see |:sp|).
-
-Dragging a file in with Shift held down in insert mode inserts the pathname of
-the file.
-
-:browse :w opens a standard RISC OS save box.
-:browse :e opens a directory viewer.
-
-For fonts, you have the choice of the system font, an outline font, the system
-font via ZapRedraw and any of the Zap fonts via ZapRedraw: >
-
-  :set guifont=
-<                      To use the system font via the VDU drivers.  Supports
-                       bold and underline.
->
-  :set guifont=Corpus.Medium
-<                      Use the named outline font.  You can use any font, but
-                       only monospaced ones like Corpus look right.
->
-  :set guifont=Corpus.Medium:w8:h12:b:i
-<                      As before, but with size of 8 point by 12 point, and
-                       in bold italic.
-                       If only one of width and height is given then that
-                       value is used for both.  If neither is given then 10
-                       point is used.
-
-Thanks to John Kortink, Vim can use the ZapRedraw module.  Start the font name
-with "!" (or "!!" for double height), like this: >
-
-  :set guifont=!!
-<                      Use the system font, but via ZapRedraw.  This gives a
-                       faster redraw on StrongARM processors, but you can't
-                       get bold or italic text.  Double height.
->
-  :set guifont=!script
-<                      Uses the named Zap font (a directory in VimFont$Path).
-                       The redraw is the same speed as for "!!", but you get
-                       a nicer looking font.
-                       Only the "man+" and "script" fonts are supplied
-                       currently, but you can use any of the Zap fonts if
-                       they are in VimFont$Path.
-                       Vim will try to load font files "0", "B", "I" and "IB"
-                       from the named directory.  Only "0" (normal style) MUST
-                       be present.  Link files are not currently supported.
-
-Note that when using ZapRedraw the edit bar is drawn in front of the character
-you are on rather than behind it.  Also redraw is incorrect for screen modes
-with eigen values of 0.  If the font includes control characters then you can
-get Vim to display them by changing the 'isprint' option.
-
-If you find the scrolling is too slow on your machine, try experimenting
-with the 'scrolljump' and 'ttyscroll' options.
-
-In particular, StrongARM users may find that: >
-
-  :set ttyscroll=0
-
-makes scrolling faster in high-color modes.
-
-=============================================================================
-                                                       *riscos-remote*
-5. Remote use (telnet)
-
-I have included a built-in termcap entry, but you can edit the termcap file to
-allow other codes to be used if you want to use Vim from a remote terminal.
-
-Although I do not have an internet connection to my Acorn, I have managed to
-run Vim in a FreeTerm window using the loopback connection.
-
-It seems to work pretty well now, using "*vi -T ansi".
-
-==============================================================================
-                                                       *riscos-temp-files*
-6. Temporary files
-
-If Vim crashes then the swap and backup files (if any) will be in the
-directories set with the 'directory' and 'bdir' options.  By default the swap
-files are in <Wimp$ScrapDir> (i.e. inside !Scrap) and backups are in the
-directory you were saving to.  Vim will allow you to try and recover the file
-when you next try to edit it.
-
-To see a list of swap files, press <F12> and type "*vi -r".
-
-Vim no longer brings up ATTENTION warnings if you try to edit two files with
-the same name in different directories.
-
-However, it also no longer warns if you try to edit the same file twice (with
-two copies of Vim), though you will still be warned when you save that the
-datestamp has changed.
-
-==============================================================================
-                                                       *riscos-interrupt*
-7. Interrupting
-
-To break out of a looping macro, or similar, hold down Escape in the
-command-line version, or press CTRL-C in the GUI version.
-
-==============================================================================
-                                                       *riscos-memory*
-8. Memory usage
-
-Vim will use dynamic areas on RISC OS 3.5 or later.  If you can use them on
-older machines then edit the !RunTxt and GVim files.  I don't know what UnixLib
-does by default on these machines so I'm playing safe.
-
-It doesn't work at all well without dynamic areas, since it can't change its
-memory allocation once running.  Hence you should edit "!Vim.GVim" and
-"!Vim.!RunTxt" to choose the best size for you.  You probably need at least
-about 1400K.
-
-==============================================================================
-                                                       *riscos-filetypes*
-9. Filetypes
-
-You can now specify that autocommands are only executed for files of certain
-types.  The filetype is given in the form &xxx, when xxx is the filetype.
-
-Filetypes must be specified by number (e.g. &fff for Text).
-
-The system has changed from version 5.3.  The new sequence of events is:
-
-- A file is loaded. |'osfiletype'| is set to the RISC OS filetype.
-- Based on the filetype and pathname, Vim will try to set |'filetype'| to the
-  Vim-type of the file.
-- Setting this option may load syntax files and perform other actions.
-- Saving the file will give it a filetype of |'osfiletype'|.
-
-Some examples may make this clearer:
-
-  Kind of file loaded  osfiletype      filetype ~
-  C code "c.hellow"    Text (&fff)     C
-  LaTeX document       LaTeX (&2a8)    TeX
-  Draw document                DrawFile (&aff) (not changed)
-
-==============================================================================
-                                                       *riscos-shell*
-10. The shell
-
-- Bangs (!s) are only replaced if they are followed by a space or end-of-line,
-  since many pathnames contain them.
-
-- You can prefix the command with "~", which stops any output from being
-  displayed.  This also means that you don't have to press <Enter> afterwards,
-  and stops the screen from being redrawn. {only in the GUI version}
-
-==============================================================================
-                                                       *riscos-porting*
-11. Porting new releases to RISC OS
-
-Downloading everything you need:
-
-- Get the latest source distribution (see www.vim.org)
-- Get the runtime environment files (e.g. these help files)
-- Get the RISC OS binary distribution (if possible)
-
-
-Unarchiving:
-
-- Create a raFS disk and put the archives on it
-- Un-gzip them
-- Un-tar them   (*tar xELf 50 archive/tar)
-
-
-Recompiling the sources:
-
-- Create c, s, and h directories.
-- Put all the header files in "h".          \
-- Put all the C files in "c".               | And lose the extensions
-- Put the assembler file ("swis/s") in "s".  /
-- Rename all the files in "proto" to "h", like this:
-    raFS::VimSrc.source.proto.file/pro
-         becomes
-    raFS::VimSrc.source.h.file_pro
-- In the files "h.proto" and "c.termlib", search and replace
-    .pro"
-       with
-    _pro.h"
-- Create a simple Makefile if desired and do "*make -k".
-  Use "CC = gcc -DRISCOS -DUSE_GUI -O2 -x c" in the Makefile.
-- Save the binary as !Vim.Vim in the binary distribution.
-
-
-Updating the run-time environment:
-
-- Replace old or missing files inside !Vim.Resources with the
-  new files.
-- Remove files in "doc" not ending in "/txt", except for "tags".
-- Lose the extensions from the files in "doc".
-- Edit the "doc.tags" file.  Remove extensions from the second column: >
-       :%s/^\(.[^\t]*\t.*\)\.txt\t/\1\t/
-- Remove extensions from the syntax files.  Split them into two directories
-  to avoid the 77 entry limit on old ADFS filesystems.
-- Edit "Vim:FileType" to match "*.c.*" as well as "*/c" and so on.
-  Add filetype checking too.
-- Edit "Vim:Menu" and remove all the keys from the menus: >
-       :%s/<Tab>[^ \t]*//
-<
  vim:tw=78:ts=8:ft=help:norl:
index 46a20fd..6273597 100644 (file)
@@ -1,4 +1,4 @@
-*os_unix.txt*   For Vim version 7.3.  Last change: 2005 Mar 29
+*os_unix.txt*   For Vim version 7.4.  Last change: 2005 Mar 29
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index 94a5297..7662fa7 100644 (file)
@@ -1,4 +1,4 @@
-*os_vms.txt*    For Vim version 7.3.  Last change: 2010 Jul 28
+*os_vms.txt*    For Vim version 7.4.  Last change: 2011 Aug 14
 
 
                  VIM REFERENCE MANUAL
@@ -38,9 +38,6 @@ You can download the Vim source code by ftp from the official Vim site:
 Or use one of the mirrors:
        ftp://ftp.vim.org/pub/vim/MIRRORS
 
-You will need both the Unix and Extra archives to build vim.exe for VMS.
-For using Vim's full power you will need the runtime files as well.
-
 You can download precompiled executables from:
        http://www.polarhome.com/vim/
        ftp://ftp.polarhome.com/pub/vim/
@@ -75,7 +72,7 @@ See the file [.SRC]INSTALLVMS.TXT.
 4. Problems                                            *vms-problems*
 
 The code has been tested under Open VMS 6.2 - 8.2 on Alpha, VAX and IA64
-platforms with the DEC C compiler.  It should work without bigger problems.
+platforms with the DEC C compiler.  It should work without big problems.
 If your system does not have some include libraries you can tune up in
 OS_VMS_CONF.H file.
 
@@ -88,11 +85,11 @@ Also GTK, XPM library paths should be configured in MAKE_VMS.MMS
 
 Note: Under VAX it should work with the DEC C compiler without problems.  The
 VAX C compiler is not fully ANSI C compatible in pre-processor directives
-semantics, therefore you have to use a converter program what will do the lion
+semantics, therefore you have to use a converter program that will do the lion
 part of the job.  For detailed instructions read file INSTALLvms.txt
 
-MMS_VIM.EXE is build together with VIM.EXE, but for XD.EXE you should
-change to subdirectory and build it separately.
+MMS_VIM.EXE is build together with VIM.EXE, but for XXD.EXE you should
+change to subdirectory and build it separately.
 
 CTAGS is not part of the Vim source distribution anymore, however the OpenVMS
 specific source might contain CTAGS source files as described above.
@@ -184,9 +181,9 @@ You may want to create .vimrc and .gvimrc files in your home directory
 
 The easiest way is just rename example files.  You may leave the menu file
 (MENU.VIM) and files vimrc and gvimrc in the original $VIM directory.  It will
-be default setup for all users, and for users it is enough just to have their
-own additions or resetting in their home directory in files .vimrc and .gvimrc.
-It should work without problems.
+be the default setup for all users, and for users it is enough to just have
+their own additions or resetting in their home directory in files .vimrc and
+.gvimrc.  It should work without problems.
 
 Note: Remember, system rc files (default for all users) don't have a leading
 ".".  So, system rc files are: >
@@ -200,7 +197,7 @@ and user customized rc files are: >
        sys$login:.vimrc
        sys$login:.gvimrc
 
-You can check that everything is on the right place with the :version command.
+You can check that everything is at the right place with the :version command.
 
 Example LOGIN.COM: >
 
@@ -209,15 +206,15 @@ Example LOGIN.COM: >
        $ gv*im:== spawn/nowait/input=NLA0 mcr VIM:VIM.EXE -g -GEOMETRY 80x40
        $ set disp/create/node=192.168.5.223/trans=tcpip
 
-Note: This set-up should be enough, if you are working on standalone server or
-clustered environment, but if you want to use Vim as internode editor in
+Note: This set-up should be enough, if you are working on standalone server or
+clustered environment, but if you want to use Vim as an internode editor in
 DECNET environment, it will satisfy as well.
 You just have to define the "whole" path: >
 
        $ define VIM "<server_name>[""user password""]::device:<path>"
        $ vi*m :== "mcr VIM:VIM.EXE"
 
-As for example: >
+For example: >
 
        $ define VIM "PLUTO::RF10:[UTIL.VIM]"
        $ define VIM "PLUTO""ZAY mypass""::RF10:[UTIL.VIM]" ! if passwd required
@@ -300,12 +297,12 @@ For more information type $help set disp in VMS prompt.
 
 4) If you are working on MS-Windows or some other non X/Window environment
    you need to set up one X server and run Vim as in point 2.
-   For MS-Windows there are available free X servers as MIX , Omni X etc.,
+   For MS-Windows there are available free X servers as MIX, Omni X etc.,
    as well as excellent commercial products as eXcursion or ReflectionX with
    built-in DEC support.
 
 Please note, that executables without GUI are slightly faster during startup
-then with enabled GUI in character mode. Therefore, if you do not use GUI
+than with enabled GUI in character mode. Therefore, if you do not use GUI
 features, it is worth to choose non GUI executables.
 
 ==============================================================================
@@ -326,8 +323,8 @@ features, it is worth to choose non GUI executables.
 8.12 diff-mode
 8.13 Allow '$' in C keywords
 8.14 VIMTUTOR for beginners
-8.15 Slow start in console mode issue 
-8.16 Common VIM directory - different architectures 
+8.15 Slow start in console mode issue
+8.16 Common VIM directory - different architectures
 
 8.1 Backspace/delete
 
@@ -360,7 +357,7 @@ number, try these settings. >
        :set nowritebackup   " does not have any purpose on VMS.  It's the
                             " default.
 
-Recovery is working perfect as well from the default swap file.
+Recovery is working perfectly as well from the default swap file.
 Read more with :help swapfile
 
 (Claude Marinier <ClaudeMarinier@xwavesolutions.com> Vim 5.5, Zoltan Arpadffy
@@ -386,7 +383,7 @@ Note: You may use <,> brackets as well (device:<path>file.ext;version) as
 rf10:<user.zay.work>test.c;1
 
 (David Elins <delins@foliage.com>, Jerome Lauret
-<JLAURET@mail.chem.sunysb.edu> Vim 5.6 )
+<JLAURET@mail.chem.sunysb.edu> Vim 5.6)
 
 
 8.5 Remote host invocation
@@ -445,14 +442,14 @@ Terminal entry not found in termcap
     builtin_dumb
 defaulting to 'vt320'
 ---
-The solution is to define default terminal name: >
+The solution is to define the default terminal name: >
 
        $ ! unknown terminal name.  Let us use vt320 or ansi instead.
        $ ! Note: it's case sensitive
        $ define term "vt320"
 
-Terminals from VT100 to VT320 (as V300, VT220, VT200 ) do not need any extra
-keyboard mappings.  They should work perfect as they are, including arrows,
+Terminals from VT100 to VT320 (as V300, VT220, VT200) do not need any extra
+keyboard mappings.  They should work perfectly as they are, including arrows,
 Ins, Del buttons etc., except Backspace in GUI mode.  To solve it, add to
 .gvimrc: >
 
@@ -465,8 +462,8 @@ your .vimrc file: >
 
        set ttyfast     " set fast terminal
 
-Note: if you're using Vim on remote host or through very slow connection, it's
-recommended to avoid fast terminal option with: >
+Note: if you're using Vim on remote host or through very slow connection, it's
+recommended to avoid the fast terminal option with: >
 
        set nottyfast   " set terminal to slow mode
 
@@ -483,8 +480,8 @@ special commands to execute executables: >
 
 OpenVMS users always have to be aware that the Vim command :! "just" drop them
 to DCL prompt.  This feature is possible to use without any problem with all
-DCL commands, but if we want to execute some program as XXD, CTAGS, JTAGS etc.
-we're running into trouble if we follow the Vim documentation (see: help
+DCL commands, but if we want to execute some programs such as XXD, CTAGS, JTAGS,
+etc.  we're running into trouble if we follow the Vim documentation (see: help
 xxd).
 
 Solution: Execute with the MC command and add the full path to the executable.
@@ -534,7 +531,7 @@ Example: >
 
        $define SYS$PRINT HP5ANSI
 
-You can print out whole buffer or just the marked area.
+You can print out the whole buffer or just the marked area.
 More info under :help hardcopy
 
 (Zoltan Arpadffy, Vim 6.0c)
@@ -561,16 +558,16 @@ will be confused after a window-resize.
 From 6.0 diff functionality has been implemented, but OpenVMS does not use
 GNU/Unix like diff therefore built in diff does not work.
 There is a simple solution to solve this anomaly.  Install a Unix like diff
-and Vim will work perfect in diff mode too.  You just have to redefine your
+and Vim will work perfectly in diff mode too.  You just have to redefine your
 diff program as: >
 
        define /nolog diff <GNU_PATH>diff.exe
 
 Another, more sophisticated solution is described below (8.12 diff-mode)
-There are some other programs as patch, make etc that may cause same problems.
-At www.polarhome.com is possible to download an GNU package for Alpha and VAX
-boxes that is meant to solve GNU problems on OpenVMS.
-( Zoltan Arpadffy, Vim 6.1)
+There are other programs such as patch, make etc that may cause the same
+problems.  At www.polarhome.com is possible to download an GNU package for
+Alpha and VAX boxes that is meant to solve GNU problems on OpenVMS.
+(Zoltan Arpadffy, Vim 6.1)
 
 
 8.12 diff-mode
@@ -632,7 +629,7 @@ You can now compare files in 4 ways: >
     3. VIM  diff:  $ VIMDIFF  <FILE1> <FILE2>
     4. GVIM diff:  $ GVIMDIFF <FILE1> <FILE2>
 
-( Coen Engelbarts, Vim 6.1)
+(Coen Engelbarts, Vim 6.1)
 
 
 8.13 Allow '$' in C keywords
@@ -653,46 +650,47 @@ Now word-based commands, e.g. the '*'-search-command and the CTRL-]
 tag-lookup, work on the whole identifier.  (Ctags on VMS also supports '$' in
 C keywords since ctags version 5.1.)
 
-( Coen Engelbarts, Vim 6.1)
+(Coen Engelbarts, Vim 6.1)
 
 8.14 VIMTUTOR for beginners
 
-It exits VIMTUTOR.COM DCL script that can help Vim beginners to learn/make
-first steps with Vim on OpenVMS.  Depending of binary distribution you may
-start it with: >
+The VIMTUTOR.COM DCL script can help Vim beginners to learn/make their first
+steps with Vim on OpenVMS.  Depending of binary distribution you may start it
+with: >
 
        @vim:vimtutor
 
 (Thomas.R.Wyant III, Vim 6.1)
 
-8.14 Slow start in console mode issue
+8.16 Slow start in console mode issue
 
 As GUI/GTK Vim works equally well in console mode, many administrators
 deploy those executables system wide.
 Unfortunately, on a remote slow connections GUI/GTK executables behave rather
-slow when user wants to run Vim just in the console mode - because of X environment detection timeout.
+slow when user wants to run Vim just in the console mode - because of X
+environment detection timeout.
 
 Luckily, there is a simple solution for that. Administrators need to deploy
 both GUI/GTK build and just console build executables, like below: >
 
-    |- vim72
+    |- vim73
     |----- doc
-    |----- syntax        
+    |----- syntax
        vimrc    (system rc files)
        gvimrc
-       gvim.exe (the renamed GUI or GTK built vim.exe)      
-       vim.exe  (the console only executable) 
+       gvim.exe (the renamed GUI or GTK built vim.exe)
+       vim.exe  (the console only executable)
 
 Define system symbols like below in for ex in LOGIN.COM or SYLOGIN.COM: >
 
-       $ define/nolog VIM RF10:[UTIL.VIM72] ! where you VIM directory is
+       $ define/nolog VIM RF10:[UTIL.VIM73] ! where you VIM directory is
        $ vi*m  :== mcr VIM:VIM.EXE
        $ gvi*m :== mcr VIM:GVIM.EXE
        $ ! or you can try to spawn with
        $ gv*im :== spawn/nowait/input=NLA0 mcr VIM:GVIM.EXE -g -GEOMETRY 80x40
 
 
-Like this, users that do not have X environment and want to use Vim just in 
+Like this, users that do not have X environment and want to use Vim just in
 console mode can avoid performance problems.
 
 (Zoltan Arpadffy, Vim 7.2)
@@ -714,8 +712,8 @@ View of Cluster from system ID 11655  node: TOR
 +---------------------------------+
 
 It is convenient to have a common VIM directory but execute different
-executables. 
-There are more solutions for this problem:
+executables.
+There are several solutions for this problem:
 
 Solution 1.  All executables in the same directory with different names
 This is easily done with the following script that can be added
@@ -755,7 +753,7 @@ Solution 2.  Different directories: >
        $      define/nolog VIM RF10:[UTIL.IA64_EXE] ! IA64 executables
        $ endif
         $! VIMRUNTIME must be defined in order to find runtime files
-       $ define/nolog VIMRUNTIME RF10:[UTIL.VIM72]
+       $ define/nolog VIMRUNTIME RF10:[UTIL.VIM73]
 
 A good example for this approach is the [GNU]gnu_tools.com script from
 GNU_TOOLS.ZIP package downloadable from http://www.polarhome.com/vim/
@@ -769,7 +767,7 @@ GNU_TOOLS.ZIP package downloadable from http://www.polarhome.com/vim/
 Version 7.3
 - CTAGS 5.8 included
 - VMS compile warnings fixed - floating-point overflow warning corrected on VAX
-- filepath completition corrected - too many chars were escaped in filename
+- filepath completion corrected - too many chars were escaped in filename
   and shell commands
 - the following plugins are included into VMS runtime:
        genutils 2.4, multiselect 2.2, multvals 3.1, selectbuf 4.3,
@@ -784,10 +782,10 @@ Version 7.3
 Version 7.2 (2008 Aug 9)
 - VCF files write corrected
 - CTAGS 5.7 included
-- corrected make_vms.mms (on VAX gave syntax error) 
+- corrected make_vms.mms (on VAX gave syntax error)
 
 Version 7.1 (2007 Jun 15)
-- create TAGS file from menu 
+- create TAGS file from menu
 
 Version 7 (2006 May 8)
 - Improved low level char input (affects just console mode)
index 2a14f13..f029a7a 100644 (file)
@@ -1,4 +1,4 @@
-*os_win32.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
+*os_win32.txt*  For Vim version 7.4.  Last change: 2012 May 18
 
 
                  VIM REFERENCE MANUAL    by George Reilly
@@ -313,6 +313,37 @@ A. When using :! to run an external command, you can run it with "start": >
    with :!start do not get passed Vim's open file handles, which means they do
    not have to be closed before Vim.
    To avoid this special treatment, use ":! start".
+   There are two optional arguments (see the next Q):
+       /min  the window will be minimized
+       /b    no console window will be opened
+   You can use only one of these flags at a time.  A second one will be
+   treated as the start of the command.
+
+Q. How do I avoid getting a window for programs that I run asynchronously?
+A. You have two possible solutions depending on what you want:
+   1) You may use the /min flag in order to run program in a minimized state
+      with no other changes. It will work equally for console and GUI
+      applications.
+   2) You can use the /b flag to run console applications without creating a
+      console window for them (GUI applications are not affected). But you
+      should use this flag only if the application you run doesn't require any
+      input.  Otherwise it will get an EOF error because its input stream
+      (stdin) would be redirected to \\.\NUL (stdout and stderr too).
+
+   Example for a console application, run Exuberant ctags: >
+        :!start /min ctags -R .
+<  When it has finished you should see file named "tags" in your current
+   directory.  You should notice the window title blinking on your taskbar.
+   This is more noticable for commands that take longer.
+   Now delete the "tags" file and run this command: >
+        :!start /b ctags -R .
+<  You should have the same "tags" file, but this time there will be no
+   blinking on the taskbar.
+   Example for a GUI application: >
+        :!start /min notepad
+        :!start /b notepad
+<  The first command runs notepad minimized and the second one runs it
+   normally.
 
 Q. I'm using Win32s, and when I try to run an external command like "make",
    Vim doesn't wait for it to finish!  Help!
index 12a9d6d..edbeafd 100644 (file)
@@ -1,4 +1,4 @@
-*pattern.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*pattern.txt*   For Vim version 7.4.  Last change: 2013 Jul 06
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -21,7 +21,7 @@ explanations are in chapter 27 |usr_27.txt|.
 10. Highlighting matches       |match-highlight|
 
 ==============================================================================
-1. Search commands                             *search-commands* *E486*
+1. Search commands                             *search-commands*
 
                                                        */*
 /{pattern}[/]<CR>      Search forward for the [count]'th occurrence of
@@ -150,6 +150,11 @@ use <Esc> to abandon the search.
 All matches for the last used search pattern will be highlighted if you set
 the 'hlsearch' option.  This can be suspended with the |:nohlsearch| command.
 
+When no match is found you get the error: *E486* Pattern not found
+Note that for the |:global| command this behaves like a normal message, for Vi
+compatibility.  For the |:s| command the "e" flag can be used to avoid the
+error message |:s_flags|.
+
                                        *search-offset* *{offset}*
 These commands search for the specified pattern.  With "/" and "?" an
 additional offset may be given.  There are two types of offsets: line offsets
@@ -214,7 +219,8 @@ The last used pattern and offset are remembered.  They can be used to repeat
 the search, possibly in another direction or with another count.  Note that
 two patterns are remembered: One for 'normal' search commands and one for the
 substitute command ":s".  Each time an empty pattern is given, the previously
-used pattern is used.
+used pattern is used.  However, if there is no previous search command, a
+previous substitute pattern is used, if possible.
 
 The 'magic' option sticks with the last used pattern.  If you change 'magic',
 this will not change how the last used pattern will be interpreted.
@@ -344,6 +350,27 @@ For starters, read chapter 27 of the user manual |usr_27.txt|.
                or  \z( pattern \)              |/\z(|
 
 
+                               */\%#=* *two-engines* *NFA*
+Vim includes two regexp engines:
+1. An old, backtracking engine that supports everything.
+2. A new, NFA engine that works much faster on some patterns, but does not
+   support everything.
+
+Vim will automatically select the right engine for you.  However, if you run
+into a problem or want to specifically select one engine or the other, you can
+prepend one of the following to the pattern:
+
+       \%#=0   Force automatic selection.  Only has an effect when
+               'regexpengine' has been set to a non-zero value.
+       \%#=1   Force using the old engine.
+       \%#=2   Force using the NFA engine.
+
+You can also use the 'regexpengine' option to change the default.
+
+                        *E864* *E868* *E874* *E875* *E876* *E877* *E878*
+If selecting the NFA engine and it runs into something that is not implemented
+the pattern will not match.  This is only useful when debugging Vim.
+
 ==============================================================================
 3. Magic                                                       */magic*
 
@@ -390,9 +417,10 @@ pattern.
 
 ==============================================================================
 4. Overview of pattern items                           *pattern-overview*
+                                               *E865* *E866* *E867* *E869*
 
 Overview of multi items.                               */multi* *E61* *E62*
-More explanation and examples below, follow the links.                 *E64*
+More explanation and examples below, follow the links.         *E64* *E871*
 
          multi ~
      'magic' 'nomagic' matches of the preceding atom ~
@@ -498,16 +526,18 @@ Character classes {not in Vi}:                            */character-classes*
        x       x       a character with no special meaning matches itself
 
 |/[]|  []      \[]     any character specified inside the []
-|/\%[]| \%[]   \%[]    a sequence of optionally matched atoms
+|/\%[]|        \%[]    \%[]    a sequence of optionally matched atoms
 
 |/\c|  \c      \c      ignore case, do not use the 'ignorecase' option
 |/\C|  \C      \C      match case, do not use the 'ignorecase' option
+|/\Z|  \Z      \Z      ignore differences in Unicode "combining characters".
+                       Useful when searching voweled Hebrew or Arabic text.
+
 |/\m|  \m      \m      'magic' on for the following chars in the pattern
 |/\M|  \M      \M      'magic' off for the following chars in the pattern
 |/\v|  \v      \v      the following chars in the pattern are "very magic"
 |/\V|  \V      \V      the following chars in the pattern are "very nomagic"
-|/\Z|  \Z      \Z      ignore differences in Unicode "combining characters".
-                       Useful when searching voweled Hebrew or Arabic text.
+|/\%#=|   \%#=1   \%#=1   select regexp engine |/zero-width|
 
 |/\%d| \%d     \%d     match specified decimal character (eg \%d123)
 |/\%x| \%x     \%x     match specified hex character (eg \%x2a)
@@ -575,7 +605,7 @@ overview.
 \?     Just like \=.  Cannot be used when searching backwards with the "?"
        command. {not in Vi}
 
-                                               */\{* *E58* *E60* *E554*
+                                       */\{* *E58* *E60* *E554* *E870*
 \{n,m} Matches n to m of the preceding atom, as many as possible
 \{n}   Matches n of the preceding atom
 \{n,}  Matches at least n of the preceding atom, as many as possible
@@ -631,17 +661,18 @@ overview.
                                                        */\@!*
 \@!    Matches with zero width if the preceding atom does NOT match at the
        current position. |/zero-width| {not in Vi}
-       Like '(?!pattern)" in Perl.
+       Like "(?!pattern)" in Perl.
        Example                 matches ~
        foo\(bar\)\@!           any "foo" not followed by "bar"
-       a.\{-}p\@!              "a", "ap", "app", etc. not followed by a "p"
+       a.\{-}p\@!              "a", "ap", "app", "appp", etc. not immediately
+                               followed by a "p"
        if \(\(then\)\@!.\)*$   "if " not followed by "then"
 
        Using "\@!" is tricky, because there are many places where a pattern
        does not match.  "a.*p\@!" will match from an "a" to the end of the
        line, because ".*" can match all characters in the line and the "p"
        doesn't match at the end of the line.  "a.\{-}p\@!" will match any
-       "a", "ap", "aap", etc. that isn't followed by a "p", because the "."
+       "a", "ap", "app", etc. that isn't followed by a "p", because the "."
        can match a "p" and "p\@!" doesn't match after that.
 
        You can't use "\@!" to look for a non-match before the matching
@@ -650,16 +681,24 @@ overview.
        "foobar" you could use "\(foo\)\@!...bar", but that doesn't match a
        bar at the start of a line.  Use "\(foo\)\@<!bar".
 
+       Useful example: to find "foo" in a line that does not contain "bar": >
+               /^\%(.*bar\)\@!.*\zsfoo
+<      This pattern first checks that there is not a single position in the
+       line where "bar" matches.  If ".*bar" matches somewhere the \@! will
+       reject the pattern.  When there is no match any "foo" will be found.
+       The "\zs" is to have the match start just before "foo".
+
                                                        */\@<=*
 \@<=   Matches with zero width if the preceding atom matches just before what
        follows. |/zero-width| {not in Vi}
-       Like '(?<=pattern)" in Perl, but Vim allows non-fixed-width patterns.
+       Like "(?<=pattern)" in Perl, but Vim allows non-fixed-width patterns.
        Example                 matches ~
        \(an\_s\+\)\@<=file     "file" after "an" and white space or an
                                end-of-line
        For speed it's often much better to avoid this multi.  Try using "\zs"
        instead |/\zs|.  To match the same as the above example:
                an\_s\+\zsfile
+       At least set a limit for the look-behind, see below.
 
        "\@<=" and "\@<!" check for matches just before what follows.
        Theoretically these matches could start anywhere before this position.
@@ -672,20 +711,37 @@ overview.
        Example                 matches ~
        \1\@<=,\([a-z]\+\)      ",abc" in "abc,abc"
 
+\@123<=
+       Like "\@<=" but only look back 123 bytes. This avoids trying lots
+       of matches that are known to fail and make executing the pattern very
+       slow.  Example, check if there is a "<" just before "span":
+               /<\@1<=span
+       This will try matching "<" only one byte before "span", which is the
+       only place that works anyway.
+       After crossing a line boundary, the limit is relative to the end of
+       the line.  Thus the characters at the start of the line with the match
+       are not counted (this is just to keep it simple).
+       The number zero is the same as no limit.
+
                                                        */\@<!*
 \@<!   Matches with zero width if the preceding atom does NOT match just
        before what follows.  Thus this matches if there is no position in the
        current or previous line where the atom matches such that it ends just
        before what follows.  |/zero-width| {not in Vi}
-       Like '(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
+       Like "(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
        The match with the preceding atom is made to end just before the match
        with what follows, thus an atom that ends in ".*" will work.
        Warning: This can be slow (because many positions need to be checked
-       for a match).
+       for a match).  Use a limit if you can, see below.
        Example                 matches ~
        \(foo\)\@<!bar          any "bar" that's not in "foobar"
        \(\/\/.*\)\@<!in        "in" which is not after "//"
 
+\@123<!
+       Like "\@<!" but only look back 123 bytes. This avoids trying lots of
+       matches that are known to fail and make executing the pattern very
+       slow.
+
                                                        */\@>*
 \@>    Matches the preceding atom like matching a whole pattern. {not in Vi}
        Like "(?>pattern)" in Perl.
@@ -923,7 +979,7 @@ match ASCII characters, as indicated by the range.
 \l     lowercase character:            [a-z]           */\l*
 \L     non-lowercase character:        [^a-z]          */\L*
 \u     uppercase character:            [A-Z]           */\u*
-\U     non-uppercase character         [^A-Z]          */\U*
+\U     non-uppercase character:        [^A-Z]          */\U*
 
        NOTE: Using the atom is faster than the [] form.
 
@@ -948,7 +1004,8 @@ match ASCII characters, as indicated by the range.
 ~      matches the last given substitute string        */~* */\~*
 
 \(\)   A pattern enclosed by escaped parentheses.      */\(* */\(\)* */\)*
-       E.g., "\(^a\)" matches 'a' at the start of a line.  *E51* *E54* *E55*
+       E.g., "\(^a\)" matches 'a' at the start of a line.
+       *E51* *E54* *E55* *E872* *E873*
 
 \1      Matches the same string that was matched by    */\1* *E65*
        the first sub-expression in \( and \). {not in Vi}
@@ -979,6 +1036,8 @@ x  A single character, with no special meaning, matches itself
        [xyz]           any 'x', 'y' or 'z'
        [a-zA-Z]$       any alphabetic character at the end of a line
        \c[a-z]$        same
+       [Ð-ÑÐÑ‘]             Russian alphabet (with utf-8 and cp1251)
+
                                                                */[\n]*
        With "\_" prepended the collection also includes the end-of-line.
        The same can be done by including "\n" in the collection.  The
@@ -1027,11 +1086,9 @@ x        A single character, with no special meaning, matches itself
          These items only work for 8-bit characters.
                                                        */[[=* *[==]*
        - An equivalence class.  This means that characters are matched that
-         have almost the same meaning, e.g., when ignoring accents.  The form
-         is:
+         have almost the same meaning, e.g., when ignoring accents.  This
+         only works for Unicode, latin1 and latin9.  The form is:
                [=a=]
-         Currently this is only implemented for latin1.  Also works for the
-         latin1 characters in utf-8 and latin9.
                                                        */[[.* *[..]*
        - A collation element.  This currently simply accepts a single
          character in the form:
@@ -1047,6 +1104,8 @@ x A single character, with no special meaning, matches itself
          any character that's not in "^]-\bdertnoUux".  "[\xyz]" matches '\',
          'x', 'y' and 'z'.  It's better to use "\\" though, future expansions
          may use other characters after '\'.
+       - Omitting the trailing ] is not considered an error. "[]" works like
+         "[]]", it matches the ']' character.
        - The following translations are accepted when the 'l' flag is not
          included in 'cpoptions' {not in Vi}:
                \e      <Esc>
@@ -1152,6 +1211,8 @@ When "\Z" appears anywhere in the pattern, composing characters are ignored.
 Thus only the base characters need to match, the composing characters may be
 different and the number of composing characters may differ.  Only relevant
 when 'encoding' is "utf-8".
+Exception: If the pattern starts with one or more composing characters, these
+must match.
 
 When a composing character appears at the start of the pattern of after an
 item that doesn't include the composing character, a match is found at any
@@ -1161,8 +1222,20 @@ When using a dot and a composing character, this works the same as the
 composing character by itself, except that it doesn't matter what comes before
 this.
 
-The order of composing characters matters, even though changing the order
-doesn't change what a character looks like.  This may change in the future.
+The order of composing characters does not matter.  Also, the text may have
+more composing characters than the pattern, it still matches.  But all
+composing characters in the pattern must be found in the text.
+
+Suppose B is a base character and x and y are composing characters:
+       pattern         text            match ~
+       Bxy             Bxy             yes (perfect match)
+       Bxy             Byx             yes (order ignored)
+       Bxy             By              no (x missing)
+       Bxy             Bx              no (y missing)
+       Bx              Bx              yes (perfect match)
+       Bx              By              no (x missing)
+       Bx              Bxy             yes (extra y ignored)
+       Bx              Byx             yes (extra y ignored)
 
 ==============================================================================
 9. Compare with Perl patterns                          *perl-patterns*
index 8d4e471..6fed274 100644 (file)
@@ -1,15 +1,21 @@
-*pi_getscript.txt*  For Vim version 7.3.  Last change: 2009 Oct 14
+*pi_getscript.txt*  For Vim version 7.4.  Last change: 2012 Apr 07
 >
-               GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell, Jr.
+               GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell
 <
-Authors:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamilyA.Mbiz>
+Authors:  Charles E. Campbell  <NdrOchip@ScampbellPfamilyA.Mbiz>
          (remove NOSPAM from the email address)
                                                *GetLatestVimScripts-copyright*
-Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.   *glvs-copyright*
-           The VIM LICENSE applies to getscript.vim and
-           pi_getscript.txt (see |copyright|) except use
-           "getscript" instead of "Vim".  No warranty, express or implied.
-          Use At-Your-Own-Risk.
+Copyright: (c) 2004-2012 by Charles E. Campbell        *glvs-copyright*
+       The VIM LICENSE (see |copyright|) applies to the files in this
+       package, including getscriptPlugin.vim, getscript.vim,
+       GetLatestVimScripts.dist, and pi_getscript.txt, except use "getscript"
+       instead of "VIM".  Like anything else that's free, getscript and its
+       associated files are provided *as is* and comes with no warranty of
+       any kind, either expressed or implied.  No guarantees of
+       merchantability.  No guarantees of suitability for any purpose.  By
+       using this plugin, you agree that in no event will the copyright
+       holder be liable for any damages resulting from the use of this
+       software. Use at your own risk!
 
 Getscript is a plugin that simplifies retrieval of the latest versions of the
 scripts that you yourself use!  Typing |:GLVS| will invoke getscript; it will
@@ -77,7 +83,9 @@ Your computer needs to have wget or curl for GetLatestVimScripts to do its work.
 3. GetLatestVimScripts Usage                           *glvs-usage* *:GLVS*
 
 Unless it has been defined elsewhere, >
+
        :GLVS
+
 will invoke GetLatestVimScripts().  If some other plugin has defined that
 command, then you may type
 >
@@ -127,7 +135,8 @@ click on the script's link, you'll see a line resembling
        http://vim.sourceforge.net/scripts/script.php?script_id=40
 
 The "40" happens to be a ScriptID that GetLatestVimScripts needs to
-download the associated page.
+download the associated page, and is assigned by vim.sf.net itself
+during initial uploading of the plugin.
 
 The second number on each line gives the script's SourceID.  The SourceID
 records the count of uploaded scripts as determined by vim.sf.net; hence it
@@ -151,19 +160,39 @@ This comment line tells getscript.vim to check vimscript #884 and that the
 script is automatically installable.  Getscript will also use this line to
 help build the GetLatestVimScripts.dat file, by including a line such as: >
 
-       884 1 AutoAlign.vim
+       884 1 :AutoInstall: AutoAlign.vim
 <
-in it an AutoAlign.vim line isn't already in GetLatestVimScripts.dat file.
+assuming that such a line isn't already in GetLatestVimScripts.dat file.
 See |glvs-plugins| for more.  Thus, GetLatestVimScripts thus provides a
 comprehensive ability to keep your plugins up-to-date!
 
+In summary:
+
+  * Optionally tell getscript that it is allowed to build/append a
+    GetLatestVimScripts.dat file based upon already installed plugins: >
+       let g:GetLatestVimScripts_allowautoinstall=1
+<
+  * A line such as >
+       " GetLatestVimScripts: 884  1 :AutoInstall: AutoAlign.vim
+<   in an already-downloaded plugin constitutes the concurrence of the
+    plugin author that getscript may do AutoInstall.  Not all plugins
+    may be AutoInstall-able, and the plugin's author is best situated
+    to know whether or not his/her plugin will AutoInstall properly.
+
+  * A line such as >
+       884 1 :AutoInstall: AutoAlign.vim
+<   in your GetLatestVimScripts.dat file constitutes your permission
+    to getscript to do AutoInstall.  AutoInstall requires both your
+    and the plugin author's permission.  See |GetLatestVimScripts_dat|.
+
+
                                                *GetLatestVimScripts_dat*
 As an example of a <GetLatestVimScripts.dat> file:
 >
     ScriptID SourceID Filename
     --------------------------
-    294 1 Align.vim
-    120 2 decho.vim
+    294 1 :AutoInstall: Align.vim
+    120 2 Decho.vim
      40 3 DrawIt.tar.gz
     451 4 EasyAccents.vim
     195 5 engspchk.vim
@@ -201,8 +230,8 @@ are, then you may include :AutoInstall: just before "yourscriptname":
                                ^
                            scriptid
 <
-NOTE: :AutoInstall: is a plugin-author option, not a GetLatestVimScripts.dat~
-      entry!~
+NOTE: The :AutoInstall: feature requires both the plugin author's and~
+      the user's permission to operate!~
 
 GetLatestVimScripts commands for those scripts are then appended, if not
 already present, to the user's GetLatest/GetLatestVimScripts.dat file.  It is
@@ -210,7 +239,7 @@ a relatively painless way to automate the acquisition of any scripts your
 plugins depend upon.
 
 Now, as an author, you probably don't want GetLatestVimScripts to download
-your own scripts for you yourself, thereby overwriting your not-yet-released
+your own scripts atop your own copy, thereby overwriting your not-yet-released
 hard work.  GetLatestVimScripts provides a solution for this:  put
 >
        0 0 yourscriptname
@@ -314,6 +343,11 @@ after/syntax/c.vim contained in it to overwrite a user's c.vim.
        default= $HOME/vimfiles (windows)
                Override where :AutoInstall: scripts will be installed.
                Doesn't override vimball installation.
+>
+       g:GetLatestVimScripts_scriptaddr
+<       default='http://vim.sourceforge.net/script.php?script_id='
+               Override this if your system needs
+         ...  ='http://vim.sourceforge.net/script/script.php?script_id='
 
 ==============================================================================
 8. GetLatestVimScripts Algorithm               *glvs-algorithm* *glvs-alg*
@@ -351,6 +385,15 @@ The AutoInstall process will:
 ==============================================================================
 9. GetLatestVimScripts History         *getscript-history* *glvs-hist* {{{1
 
+v35 Apr 07, 2012 : * (MengHuan Yu) pointed out that the script url has
+                    changed (somewhat).  However, it doesn't work, and
+                    the original one does (under Linux). I'll make it
+                    yet-another-option.
+v34 Jun 23, 2011 : * handles additional decompression options for tarballs
+                     (tgz taz tbz txz)
+v33 May 31, 2011 : * using fnameescape() instead of escape()
+                  * *.xz support
+v32 Jun 19, 2010 : * (Jan Steffens) added support for xz compression
 v31 Jun 29, 2008 : * (Bill McCarthy) fixed having hls enabled with getscript
                   * (David Schaefer) the acd option interferes with vimballs
                     Solution: bypass the acd option
index 38979dc..a3998d5 100644 (file)
@@ -1,4 +1,4 @@
-*pi_gzip.txt*   For Vim version 7.3.  Last change: 2002 Oct 29
+*pi_gzip.txt*   For Vim version 7.4.  Last change: 2012 Jul 19
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -25,6 +25,8 @@ with these extensions:
        *.Z             compress (Lempel-Ziv)
        *.gz            gzip
        *.bz2           bzip2
+       *.lzma          lzma
+       *.xz            xz
 
 That's actually the only thing you need to know.  There are no options.
 
index 8e1730b..c9d8752 100644 (file)
@@ -1,22 +1,21 @@
-*pi_netrw.txt*  For Vim version 7.3.  Last change: 2010 Jul 28
+*pi_netrw.txt*  For Vim version 7.4.  Last change: 2013 May 18
 
-           -----------------------------------------------------
-           NETRW REFERENCE MANUAL    by Charles E. Campbell, Jr.
-           -----------------------------------------------------
-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
+           ------------------------------------------------
+           NETRW REFERENCE MANUAL    by Charles E. Campbell
+           ------------------------------------------------
+Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
          (remove NOSPAM from Campbell's email first)
 
-Copyright: Copyright (C) 1999-2010 Charles E Campbell, Jr    *netrw-copyright*
-          Permission is hereby granted to use and distribute this code, with
-          or without modifications, provided that this copyright notice is
-          copied with it. Like anything else that's free, netrw.vim,
-          netrwPlugin.vim, netrwFileHandlers.vim, netrwSettings.vim,
-          syntax/netrw.vim, and pi_netrw.txt are provided *as is* and comes
-          with no warranty of any kind, either expressed or implied.  No
-          guarantees of merchantability.  No guarantees of suitability for
-          any purpose.  By using this plugin, you agree that in no event will
-          the copyright holder be liable for any damages resulting from the
-          use of this software.
+Copyright: Copyright (C) 1999-2013 Charles E Campbell    *netrw-copyright*
+       The VIM LICENSE applies to the files in this package, including
+       netrw.vim, pi_netrw.txt, netrwFileHandlers.vim, netrwSettings.vim, and
+       syntax/netrw.vim.  Like anything else that's free, netrw.vim and its
+       associated files are provided *as is* and comes with no warranty of
+       any kind, either expressed or implied.  No guarantees of
+       merchantability.  No guarantees of suitability for any purpose.  By
+       using this plugin, you agree that in no event will the copyright
+       holder be liable for any damages resulting from the use of this
+       software. Use at your own risk!
 
 
                *dav*    *ftp*    *netrw-file*  *rcp*    *scp*
@@ -26,82 +25,87 @@ Copyright: Copyright (C) 1999-2010 Charles E Campbell, Jr    *netrw-copyright*
 ==============================================================================
 1. Contents                                            *netrw-contents* {{{1
 
-1.  Contents.............................................|netrw-contents|
-2.  Starting With Netrw..................................|netrw-start|
-3.  Netrw Reference......................................|netrw-ref|
-      EXTERNAL APPLICATIONS AND PROTOCOLS................|netrw-externapp|
-      READING............................................|netrw-read|
-      WRITING............................................|netrw-write|
-      SOURCING...........................................|netrw-source|
-      DIRECTORY LISTING..................................|netrw-dirlist|
-      CHANGING THE USERID AND PASSWORD...................|netrw-chgup|
-      VARIABLES AND SETTINGS.............................|netrw-variables|
-      PATHS..............................................|netrw-path|
-4.  Network-Oriented File Transfer.......................|netrw-xfer|
-      NETRC..............................................|netrw-netrc|
-      PASSWORD...........................................|netrw-passwd|
-5.  Activation...........................................|netrw-activate|
-6.  Transparent File Editing.............................|netrw-transparent|
-7.  Ex Commands..........................................|netrw-ex|
-8.  Variables and Options................................|netrw-var|
-9.  Browsing.............................................|netrw-browse|
-      Introduction To Browsing...........................|netrw-intro-browse|
-      Quick Reference: Maps..............................|netrw-browse-maps|
-      Quick Reference: Commands..........................|netrw-browse-cmds|
-      Bookmarking A Directory............................|netrw-mb|
-      Browsing...........................................|netrw-cr|
-      Browsing With A Horizontally Split Window..........|netrw-o|
-      Browsing With A New Tab............................|netrw-t|
-      Browsing With A Vertically Split Window............|netrw-v|
-      Change Listing Style.(thin wide long tree).........|netrw-i|
-      Changing To A Bookmarked Directory.................|netrw-gb|
-      Changing To A Predecessor Directory................|netrw-u|
-      Changing To A Successor Directory..................|netrw-U|
-      Customizing Browsing With A User Function..........|netrw-x|
-      Deleting Bookmarks.................................|netrw-mB|
-      Deleting Files Or Directories......................|netrw-D|
-      Directory Exploring Commands.......................|netrw-explore|
-      Exploring With Stars and Patterns..................|netrw-star|
-      Displaying Information About File..................|netrw-qf|
-      Edit File Or Directory Hiding List.................|netrw-ctrl-h|
-      Editing The Sorting Sequence.......................|netrw-S|
-      Going Up...........................................|netrw--|
-      Hiding Files Or Directories........................|netrw-a|
-      Improving Browsing.................................|netrw-ssh-hack|
-      Listing Bookmarks And History......................|netrw-qb|
-      Making A New Directory.............................|netrw-d|
-      Making The Browsing Directory The Current Directory|netrw-c|
-      Marking Files......................................|netrw-mf|
-      Marking Files By Regular Expression................|netrw-mr|
-      Marked Files: Arbitrary Command....................|netrw-mx|
-      Marked Files: Compression And Decompression........|netrw-mz|
-      Marked Files: Copying..............................|netrw-mc|
-      Marked Files: Diff.................................|netrw-md|
-      Marked Files: Editing..............................|netrw-me|
-      Marked Files: Grep.................................|netrw-mg|
-      Marked Files: Hiding and Unhiding by Suffix........|netrw-mh|
-      Marked Files: Moving...............................|netrw-mm|
-      Marked Files: Printing.............................|netrw-mp|
-      Marked Files: Sourcing.............................|netrw-ms|
-      Marked Files: Tagging..............................|netrw-mT|
-      Marked Files: Setting the Target Directory.........|netrw-mt|
-      Marked Files: Unmarking............................|netrw-mu|
-      Netrw Browser Variables............................|netrw-browser-var|
-      Netrw Browsing And Option Incompatibilities........|netrw-incompatible|
-      Netrw Settings.....................................|netrw-settings|
-      Obtaining A File...................................|netrw-O|
-      Preview Window.....................................|netrw-p|
-      Previous Window....................................|netrw-P|
-      Refreshing The Listing.............................|netrw-ctrl-l|
-      Renaming Files Or Directories......................|netrw-move|
-      Reversing Sorting Order............................|netrw-r|
-      Selecting Sorting Style............................|netrw-s|
-      Setting Editing Window.............................|netrw-C|
-10. Problems and Fixes...................................|netrw-problems|
-11. Debugging Netrw Itself...............................|netrw-debug|
-12. History..............................................|netrw-history|
-13. Todo.................................................|netrw-todo|
-14. Credits..............................................|netrw-credits|
+1.  Contents..............................................|netrw-contents|
+2.  Starting With Netrw...................................|netrw-start|
+3.  Netrw Reference.......................................|netrw-ref|
+      EXTERNAL APPLICATIONS AND PROTOCOLS.................|netrw-externapp|
+      READING.............................................|netrw-read|
+      WRITING.............................................|netrw-write|
+      SOURCING............................................|netrw-source|
+      DIRECTORY LISTING...................................|netrw-dirlist|
+      CHANGING THE USERID AND PASSWORD....................|netrw-chgup|
+      VARIABLES AND SETTINGS..............................|netrw-variables|
+      PATHS...............................................|netrw-path|
+4.  Network-Oriented File Transfer........................|netrw-xfer|
+      NETRC...............................................|netrw-netrc|
+      PASSWORD............................................|netrw-passwd|
+5.  Activation............................................|netrw-activate|
+6.  Transparent Remote File Editing.......................|netrw-transparent|
+7.  Ex Commands...........................................|netrw-ex|
+8.  Variables and Options.................................|netrw-variables|
+9.  Browsing..............................................|netrw-browse|
+      Introduction To Browsing............................|netrw-intro-browse|
+      Quick Reference: Maps...............................|netrw-browse-maps|
+      Quick Reference: Commands...........................|netrw-browse-cmds|
+      Bookmarking A Directory.............................|netrw-mb|
+      Browsing............................................|netrw-cr|
+      Browsing With A Horizontally Split Window...........|netrw-o|
+      Browsing With A New Tab.............................|netrw-t|
+      Browsing With A Vertically Split Window.............|netrw-v|
+      Change Listing Style.(thin wide long tree)..........|netrw-i|
+      Changing To A Bookmarked Directory..................|netrw-gb|
+      Changing To A Predecessor Directory.................|netrw-u|
+      Changing To A Successor Directory...................|netrw-U|
+      Customizing Browsing With A User Function...........|netrw-x|
+      Deleting Bookmarks..................................|netrw-mB|
+      Deleting Files Or Directories.......................|netrw-D|
+      Directory Exploring Commands........................|netrw-explore|
+      Exploring With Stars and Patterns...................|netrw-star|
+      Displaying Information About File...................|netrw-qf|
+      Edit File Or Directory Hiding List..................|netrw-ctrl-h|
+      Editing The Sorting Sequence........................|netrw-S|
+      Forcing treatment as a file or directory............|netrw-gd| |netrw-gf|
+      Going Up............................................|netrw--|
+      Hiding Files Or Directories.........................|netrw-a|
+      Improving Browsing..................................|netrw-ssh-hack|
+      Listing Bookmarks And History.......................|netrw-qb|
+      Making A New Directory..............................|netrw-d|
+      Making The Browsing Directory The Current Directory.|netrw-c|
+      Marking Files.......................................|netrw-mf|
+      Unmarking Files.....................................|netrw-mF|
+      Marking Files By QuickFix List......................|netrw-qF|
+      Marking Files By Regular Expression.................|netrw-mr|
+      Marked Files: Arbitrary Command.....................|netrw-mx|
+      Marked Files: Compression And Decompression.........|netrw-mz|
+      Marked Files: Copying...............................|netrw-mc|
+      Marked Files: Diff..................................|netrw-md|
+      Marked Files: Editing...............................|netrw-me|
+      Marked Files: Grep..................................|netrw-mg|
+      Marked Files: Hiding and Unhiding by Suffix.........|netrw-mh|
+      Marked Files: Moving................................|netrw-mm|
+      Marked Files: Printing..............................|netrw-mp|
+      Marked Files: Sourcing..............................|netrw-ms|
+      Marked Files: Setting the Target Directory..........|netrw-mt|
+      Marked Files: Tagging...............................|netrw-mT|
+      Marked Files: Target Directory Using Bookmarks......|netrw-Tb|
+      Marked Files: Target Directory Using History........|netrw-Th|
+      Marked Files: Unmarking.............................|netrw-mu|
+      Netrw Browser Variables.............................|netrw-browser-var|
+      Netrw Browsing And Option Incompatibilities.........|netrw-incompatible|
+      Netrw Settings Window...............................|netrw-settings-window|
+      Obtaining A File....................................|netrw-O|
+      Preview Window......................................|netrw-p|
+      Previous Window.....................................|netrw-P|
+      Refreshing The Listing..............................|netrw-ctrl-l|
+      Reversing Sorting Order.............................|netrw-r|
+      Renaming Files Or Directories.......................|netrw-R|
+      Selecting Sorting Style.............................|netrw-s|
+      Setting Editing Window..............................|netrw-C|
+10. Problems and Fixes....................................|netrw-problems|
+11. Debugging Netrw Itself................................|netrw-debug|
+12. History...............................................|netrw-history|
+13. Todo..................................................|netrw-todo|
+14. Credits...............................................|netrw-credits|
 
 {Vi does not have any of this}
 
@@ -140,6 +144,16 @@ and has lines resembling >
        ...
        default          login USERID password "PASSWORD"
 <
+Windows' ftp doesn't support .netrc; however, one may have in one's .vimrc:  >
+
+   let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\MyUserName\MACHINE'
+<
+Netrw will substitute the host's machine name for "MACHINE" from the url it is
+attempting to open, and so one may specify >
+       userid
+       password
+for each site in a separate file: c:\Users\MyUserName\MachineName.
+
 Now about browsing -- when you just want to look around before editing a
 file.  For browsing on your current host, just "edit" a directory: >
 
@@ -180,26 +194,26 @@ EXTERNAL APPLICATIONS AND PROTOCOLS                       *netrw-externapp* {{{2
 
        Protocol  Variable          Default Value
        --------  ----------------  -------------
-          dav:  *g:netrw_dav_cmd*   = "cadaver"     if cadaver is executable
-          dav:   g:netrw_dav_cmd    = "curl -o"     elseif curl is available
-        fetch:  *g:netrw_fetch_cmd* = "fetch -o"    if fetch is available
-          ftp:  *g:netrw_ftp_cmd*   = "ftp"
-         http:  *g:netrw_http_cmd*  = "elinks"     if   elinks  is available
+          dav:   *g:netrw_dav_cmd*    = "cadaver"    if cadaver is executable
+          dav:   g:netrw_dav_cmd    = "curl -o"    elseif curl is available
+        fetch:   *g:netrw_fetch_cmd*  = "fetch -o"   if fetch is available
+          ftp:   *g:netrw_ftp_cmd*    = "ftp"
+         http:   *g:netrw_http_cmd*   = "elinks"     if   elinks  is available
          http:   g:netrw_http_cmd   = "links"      elseif links is available
          http:   g:netrw_http_cmd   = "curl"       elseif curl  is available
          http:   g:netrw_http_cmd   = "wget"       elseif wget  is available
           http:   g:netrw_http_cmd   = "fetch"      elseif fetch is available
-          rcp:  *g:netrw_rcp_cmd*   = "rcp"
-        rsync:  *g:netrw_rsync_cmd* = "rsync -a"
-          scp:  *g:netrw_scp_cmd*   = "scp -q"
-         sftp:  *g:netrw_sftp_cmd*  = "sftp"
+          rcp:   *g:netrw_rcp_cmd*    = "rcp"
+        rsync:   *g:netrw_rsync_cmd*  = "rsync -a"
+          scp:   *g:netrw_scp_cmd*    = "scp -q"
+         sftp:   *g:netrw_sftp_cmd*   = "sftp"
 
        *g:netrw_http_xcmd* : the option string for http://... protocols are
        specified via this variable and may be independently overridden.  By
        default, the option arguments for the http-handling commands are: >
 
                    elinks : "-source >"
-                   links  : "-source >"
+                   links  : "-dump >"
                    curl   : "-o"
                    wget   : "-q -O"
                    fetch  : "-o"
@@ -272,7 +286,7 @@ SOURCING                                    *netrw-source* {{{2
        :Nsource "scp://[user@]machine[[:#]port]/path"  uses scp
        :Nsource "sftp://[user@]machine/path"           uses sftp
 
-DIRECTORY LISTING                                      *netrw-dirlist* {{{2
+DIRECTORY LISTING                      *netrw-trailingslash* *netrw-dirlist* {{{2
 
        One may browse a directory to get a listing by simply attempting to
        edit the directory: >
@@ -280,34 +294,42 @@ DIRECTORY LISTING                                 *netrw-dirlist* {{{2
                :e scp://[user]@hostname/path/
                :e ftp://[user]@hostname/path/
 <
-       For remote directories (ie. those using scp or ftp), that trailing
-       "/" is necessary (the slash tells netrw to treat the argument as a
-       directory to browse instead of a file to download).
-
-       However, the Nread command can also be used to accomplish this:
+       For remote directory listings (ie. those using scp or ftp), that
+       trailing "/" is necessary (the slash tells netrw to treat the argument
+       as a directory to browse instead of as a file to download).
 
-       :Nread [protocol]://[user]@hostname/path/
+       The Nread command may also be used to accomplish this (again, that
+       trailing slash is necessary): >
 
+               :Nread [protocol]://[user]@hostname/path/
+<
                                        *netrw-login* *netrw-password*
 CHANGING USERID AND PASSWORD           *netrw-chgup* *netrw-userpass* {{{2
 
        Attempts to use ftp will prompt you for a user-id and a password.
-       These will be saved in global variables g:netrw_uid and
-       s:netrw_passwd; subsequent uses of ftp will re-use those two items to
-       simplify the further use of ftp.  However, if you need to use a
-       different user id and/or password, you'll want to call NetUserPass()
+       These will be saved in global variables |g:netrw_uid| and
+       |s:netrw_passwd|; subsequent use of ftp will re-use those two strings,
+       thereby simplifying use of ftp.  However, if you need to use a
+       different user id and/or password, you'll want to call |NetUserPass()|
        first.  To work around the need to enter passwords, check if your ftp
        supports a <.netrc> file in your home directory.  Also see
        |netrw-passwd| (and if you're using ssh/scp hoping to figure out how
-       to not need to use passwords, look at |netrw-ssh-hack|).
+       to not need to use passwords for scp, look at |netrw-ssh-hack|).
 
        :NetUserPass [uid [password]]           -- prompts as needed
        :call NetUserPass()                     -- prompts for uid and password
        :call NetUserPass("uid")                -- prompts for password
        :call NetUserPass("uid","password")     -- sets global uid and password
 
+(Related topics: |ftp| |netrw-userpass| |netrw-start|)
+
 NETRW VARIABLES AND SETTINGS                           *netrw-variables* {{{2
-(also see: |netrw-browser-var| |netrw-protocol| |netrw-settings| |netrw-var|)
+    (Also see:
+    |netrw-browser-var|     : netrw browser option variables
+    |netrw-protocol|        : file transfer protocol option variables
+    |netrw-settings|        : additional file transfer options
+    |netrw-browser-options| : these options affect browsing directories
+    )
 
 Netrw provides a lot of variables which allow you to customize netrw to your
 preferences.  One way to look at them is via the command :NetrwSettings (see
@@ -316,95 +338,102 @@ settings are described below, in |netrw-browser-options|, and in
 |netrw-externapp|:
 
  *b:netrw_lastfile*    last file Network-read/written retained on a
-                     per-buffer basis (supports plain :Nw )
+                       per-buffer basis (supports plain :Nw )
 
  *g:netrw_bufsettings* the settings that netrw buffers have
-                     (default) noma nomod nonu nowrap ro nobl
+                       (default) noma nomod nonu nowrap ro nobl
 
  *g:netrw_chgwin*      specifies a window number where file edits will take
-                     place.  (also see |netrw-C|)
-                     (default) not defined
+                       place.  (also see |netrw-C|)
+                       (default) not defined
 
  *g:Netrw_funcref*     specifies a function (or functions) to be called when
-                     netrw edits a file.  The file is first edited, and
-                     then the function reference (|Funcref|) is called.
-                     This variable may also hold a |List| of Funcrefs.
-                     (default) not defined
+                       netrw edits a file.  The file is first edited, and
+                       then the function reference (|Funcref|) is called.
+                       This variable may also hold a |List| of Funcrefs.
+                       (default) not defined.  (the capital in g:Netrw...
+                       is required by its holding a function reference)
 >
                            Example: place in .vimrc; affects all file opening
                            fun! MyFuncRef()
                            endfun
                            let g:Netrw_funcref= function("MyFuncRef")
 <
- *g:netrw_ftp*         if it doesn't exist, use default ftp
-                     =0 use default ftp                       (uid password)
-                     =1 use alternate ftp method         (user uid password)
-                     If you're having trouble with ftp, try changing the
-                     value of this variable to see if the alternate ftp
-                     method works for your setup.
+ *g:netrw_ftp*            if it doesn't exist, use default ftp
+                       =0 use default ftp                     (uid password)
+                       =1 use alternate ftp method       (user uid password)
+                          If you're having trouble with ftp, try changing the
+                          value of this variable to see if the alternate ftp
+                          method works for your setup.
+
+ *g:netrw_ftp_options*     Chosen by default, these options are supposed to turn
+                        interactive prompting off and to restrain ftp from
+                        attempting auto-login upon initial connection.
+                        However, it appears that not all ftp implementations
+                        support this (ex. ncftp).
+                       ="-i -n"
 
  *g:netrw_ftpextracmd* default: doesn't exist
-                     If this variable exists, then any string it contains
-                     will be placed into the commands set to your ftp
-                     client.  As an example:
-                       ="passive"
+                       If this variable exists, then any string it contains
+                       will be placed into the commands set to your ftp
+                       client.  As an example:
+                          ="passive"
 
  *g:netrw_ftpmode*     ="binary"                                   (default)
-                     ="ascii"
+                       ="ascii"
 
  *g:netrw_ignorenetrc* =0 (default for linux, cygwin)
-                     =1 If you have a <.netrc> file but it doesn't work and
-                        you want it ignored, then set this variable as
-                        shown. (default for Windows + cmd.exe)
+                       =1 If you have a <.netrc> file but it doesn't work and
+                          you want it ignored, then set this variable as
+                          shown. (default for Windows + cmd.exe)
 
  *g:netrw_menu*                =0 disable netrw's menu
-                     =1 (default) netrw's menu enabled
+                       =1 (default) netrw's menu enabled
 
  *g:netrw_nogx*                if this variable exists, then the "gx" map will not
-                     be available (see |netrw-gx|)
+                       be available (see |netrw-gx|)
 
  *g:netrw_uid*         (ftp) user-id,      retained on a per-vim-session basis
- *s:netrw_passwd*      (ftp) password,     retained on a per-vim-session basis
+ *s:netrw_passwd*      (ftp) password,     retained on a per-vim-session basis
 
  *g:netrw_preview*     =0 (default) preview window shown in a horizontally
-                         split window
-                     =1 preview window shown in a vertically split window.
-                     Also affects the "previous window" (see |netrw-P|) in
-                     the same way.
+                          split window
+                       =1 preview window shown in a vertically split window.
+                          Also affects the "previous window" (see |netrw-P|) in
+                          the same way.
 
- *g:netrw_scpport*      = "-P" : option to use to set port for scp
- *g:netrw_sshport*      = "-p" : option to use to set port for ssh
+ *g:netrw_scpport*     = "-P" : option to use to set port for scp
+ *g:netrw_sshport*     = "-p" : option to use to set port for ssh
 
- *g:netrw_sepchr*      =\0xff
-                     =\0x01 for enc == euc-jp (and perhaps it should be for
-                                                 others, too, please let me
-                                                 know)
-                     Separates priority codes from filenames internally.
-                     See |netrw-p12|.
+ *g:netrw_sepchr*      =\0xff
+                       =\0x01 for enc == euc-jp (and perhaps it should be for
+                          others, too, please let me know)
+                          Separates priority codes from filenames internally.
+                          See |netrw-p12|.
 
   *g:netrw_silent*     =0 : transfers done normally
-                     =1 : transfers done silently
+                       =1 : transfers done silently
 
  *g:netrw_use_errorwindow* =1 : messages from netrw will use a separate one
-                              line window.  This window provides reliable
+                             line window.  This window provides reliable
                              delivery of messages. (default)
                         =0 : messages from netrw will use echoerr ;
                              messages don't always seem to show up this
                              way, but one doesn't have to quit the window.
 
  *g:netrw_win95ftp*    =1 if using Win95, will remove four trailing blank
-                        lines that o/s's ftp "provides" on transfers
-                     =0 force normal ftp behavior (no trailing line removal)
+                          lines that o/s's ftp "provides" on transfers
+                       =0 force normal ftp behavior (no trailing line removal)
 
- *g:netrw_cygwin*      =1 assume scp under windows is from cygwin. Also
-                        permits network browsing to use ls with time and
-                        size sorting (default if windows)
-                     =0 assume Windows' scp accepts windows-style paths
-                        Network browsing uses dir instead of ls
-                     This option is ignored if you're using unix
+ *g:netrw_cygwin*      =1 assume scp under windows is from cygwin. Also
+                          permits network browsing to use ls with time and
+                          size sorting (default if windows)
+                       =0 assume Windows' scp accepts windows-style paths
+                          Network browsing uses dir instead of ls
+                          This option is ignored if you're using unix
 
  *g:netrw_use_nt_rcp*  =0 don't use the rcp of WinNT, Win2000 and WinXP
-                     =1 use WinNT's rcp in binary mode         (default)
+                       =1 use WinNT's rcp in binary mode         (default)
 
 PATHS                                                  *netrw-path* {{{2
 
@@ -477,6 +506,9 @@ variable (ex. scp uses the variable g:netrw_scp_cmd, which is defaulted to
        let g:netrw_scp_cmd = '"c:\Program Files\PuTTY\pscp.exe" -q -batch'
        let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"'
 <
+(note: it has been reported that windows 7 with putty v0.6's "-batch" option
+       doesn't work, so its best to leave it off for that system)
+
 See |netrw-p8| for more about putty, pscp, psftp, etc.
 
 Ftp, an old protocol, seems to be blessed by numerous implementations.
@@ -500,7 +532,24 @@ that file.  Your ftp must be able to use the <.netrc> file on its own, however.
 >
        vim ftp://[user@]machine[[:#]portnumber]/path
 <
-However, ftp will often need to query the user for the userid and password.
+Windows provides an ftp (typically c:\Windows\System32\ftp.exe) which uses
+an option, -s:filename (filename can and probably should be a full path)
+which contains ftp commands which will be automatically run whenever ftp
+starts.  You may use this feature to enter a user and password for one site: >
+       userid
+       password
+<                                      *netrw-windows-netrc*  *netrw-windows-s*
+If |g:netrw_ftp_cmd| contains -s:[path/]MACHINE, then (on Windows machines only)
+netrw will substitute the current machine name requested for ftp connections
+for MACHINE.  Hence one can have multiple machine.ftp files containing login
+and password for ftp.  Example: >
+
+    let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE'
+    vim ftp://myhost.somewhere.net/
+will use a file >
+       C:\Users\Myself\myhost.ftp
+<
+Often, ftp will need to query the user for the userid and password.
 The latter will be done "silently"; ie. asterisks will show up instead of
 the actually-typed-in password.  Netrw will retain the userid and password
 for subsequent read/writes from the most recent transfer so subsequent
@@ -594,6 +643,9 @@ password.
        readable for others.  Don't forget that the system administrator can
        still read the file!  Ie. for Linux/Unix: chmod 600 .netrc
 
+Even though Windows' ftp clients typically do not support .netrc, netrw has
+a work-around: see |netrw-windows-s|.
+
 
 PASSWORD                                               *netrw-passwd*
 
@@ -624,7 +676,7 @@ your <.vimrc> customization file: >
 <
 
 ==============================================================================
-6. Transparent File Editing                    *netrw-transparent* {{{1
+6. Transparent Remote File Editing                     *netrw-transparent* {{{1
 
 Transparent file transfers occur whenever a regular file read or write
 (invoked via an |:autocmd| for |BufReadCmd|, |BufWriteCmd|, or |SourceCmd|
@@ -698,13 +750,15 @@ below, a {netfile} is an url to a remote file.
 
 
 ==============================================================================
-8. Variables and Options               *netrw-options* *netrw-var* {{{1
+8. Variables and Options                       *netrw-var* *netrw-settings* {{{1
 
-(if you're interested in the netrw browser settings, see: |netrw-browser-var|)
+(also see: |netrw-options| |netrw-variables| |netrw-protocol|
+           |netrw-browser-settings| |netrw-browser-options| )
 
 The <netrw.vim> script provides several variables which act as options to
 affect <netrw.vim>'s file transfer behavior.  These variables typically may be
 set in the user's <.vimrc> file: (see also |netrw-settings| |netrw-protocol|)
+                                               *netrw-options*
 >
                         -------------
                         Netrw Options
@@ -736,6 +790,7 @@ set in the user's <.vimrc> file: (see also |netrw-settings| |netrw-protocol|)
                                 =1 use default method to do ftp >
        -----------------------------------------------------------------------
 <
+                                                       *netrw-internal-variables*
 The script will also make use of the following variables internally, albeit
 temporarily.
 >
@@ -874,6 +929,7 @@ itself:
      endfunction
     endif
 >
+(Related topics: |ftp| |netrw-userpass| |netrw-start|)
 
 ==============================================================================
 9. Browsing            *netrw-browsing* *netrw-browse* *netrw-help* {{{1
@@ -1023,6 +1079,7 @@ QUICK REFERENCE: MAPS                             *netrw-browse-maps* {{{2
           v    Enter the file/directory under the cursor in a new   |netrw-v|
                browser window.  A vertical split is used.
           x    View file with an associated program                 |netrw-x|
+          X    Execute filename under cursor via |system()|           |netrw-X|
 
           %    Open a new file in netrw's current directory         |netrw-%|
 
@@ -1036,8 +1093,8 @@ QUICK REFERENCE: MAPS                             *netrw-browse-maps* {{{2
        <2-leftmouse>   (gvim only) when:
                         * in a netrw-selected file, AND
                         * |g:netrw_retmap| == 1     AND
-                        * the user doesn't already have a <2-leftmouse> mapping
-                          defined before netrw is autoloaded,
+                        * the user doesn't already have a <2-leftmouse>
+                          mapping defined before netrw is autoloaded,
                        then a double clicked leftmouse button will return
                        to the netrw browser window.  See |g:netrw_retmap|.
        <s-leftmouse>   (gvim only) like mf, will mark files
@@ -1129,25 +1186,26 @@ allows one to open a new window to hold the new directory listing or file.  A
 horizontal split is used.  (for vertical splitting, see |netrw-v|)
 
 Normally, the o key splits the window horizontally with the new window and
-cursor at the top.  To change to splitting the window horizontally with the
-new window and cursor at the bottom, have
-
-       let g:netrw_alto = 1
-
-in your <.vimrc>.  (also see |netrw-t| |netrw-T| |netrw-v|)
+cursor at the top.
 
 Associated setting variables: |g:netrw_alto| |g:netrw_winsize|
 
+Related Actions |netrw-cr| |netrw-p| |netrw-t| |netrw-v|
+Associated setting variables:
+   |g:netrw_alto|    control above/below splitting
+   |g:netrw_winsize| control initial sizing
 
-BROWSING WITH A NEW TAB                                *netrw-t* *netrw-T* {{{2
+BROWSING WITH A NEW TAB                                *netrw-t*
 
 Normally one enters a file or directory using the <cr>.  The "t" map
 allows one to open a new window holding the new directory listing or file in
-a new tab.  The "T" version puts the file or directory into a background tab
-(see |gT|)
+a new tab.
 
-Related actions:  |netrw-o| |netrw-v|
+If you'd like to have the new listing in a background tab, use |gT|.
 
+Related Actions |netrw-cr| |netrw-o| |netrw-p| |netrw-v|
+Associated setting variables:
+   |g:netrw_winsize| control initial sizing
 
 BROWSING WITH A VERTICALLY SPLIT WINDOW                        *netrw-v* {{{2
 
@@ -1156,18 +1214,18 @@ allows one to open a new window to hold the new directory listing or file.  A
 vertical split is used.  (for horizontal splitting, see |netrw-o|)
 
 Normally, the v key splits the window vertically with the new window and
-cursor at the left.  To change to splitting the window vertically with the new
-window and cursor at the right, have
-
-       let g:netrw_altv = 1
-
-in your <.vimrc>.  (also see: |netrw-o| |netrw-t| |netrw-T|)
+cursor at the left.
 
 There is only one tree listing buffer; using "v" on a displayed subdirectory
 will split the screen, but the same buffer will be shown twice.
 
 Associated setting variable: |g:netrw_altv| |g:netrw_winsize|
 
+Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-v|
+Associated setting variables:
+   |g:netrw_altv|    control right/left splitting
+   |g:netrw_winsize| control initial sizing
+
 
 CHANGE LISTING STYLE  (THIN LONG WIDE TREE)                    *netrw-i* {{{2
 
@@ -1196,6 +1254,18 @@ As an example, by putting the following line in your .vimrc, >
        let g:netrw_liststyle= 4
 the tree style will become your default listing style.
 
+One typical way to use the netrw tree display is to: >
+
+       vim .
+       (use i until a tree display shows)
+       navigate to a file
+       v  (edit as desired in vertically split window)
+       ctrl-w h  (to return to the netrw listing)
+       P (edit newly selected file in the previous window)
+       ctrl-w h  (to return to the netrw listing)
+       P (edit newly selected file in the previous window)
+       ...etc...
+<
 Associated setting variables: |g:netrw_liststyle| |g:netrw_maxfilenamelen|
                               |g:netrw_timefmt|   |g:netrw_list_cmd|
 
@@ -1214,6 +1284,8 @@ To change directory back to a bookmarked directory, use
        {cnt}gb
 
 Any count may be used to reference any of the bookmarks.
+Note that |netrw-qb| shows both bookmarks and history; to go
+to a location stored in the history see |netrw-u| and |netrw-U|.
 
 Related Topics:
        |netrw-mB| how to delete bookmarks
@@ -1225,10 +1297,17 @@ CHANGING TO A PREDECESSOR DIRECTORY             *netrw-u* *netrw-updir* {{{2
 
 Every time you change to a new directory (new for the current session),
 netrw will save the directory in a recently-visited directory history
-list (unless g:netrw_dirhistmax is zero; by default, it's ten).  With the
+list (unless |g:netrw_dirhistmax| is zero; by default, it's ten).  With the
 "u" map, one can change to an earlier directory (predecessor).  To do
 the opposite, see |netrw-U|.
 
+The "u" map also accepts counts to go back in the history several slots.
+For your convenience, |netrw-qb| lists the history number which can be
+re-used in that count.
+
+See |g:netrw_dirhistmax| for how to control the quantity of history stack
+slots.
+
 
 CHANGING TO A SUCCESSOR DIRECTORY              *netrw-U* *netrw-downdir* {{{2
 
@@ -1236,6 +1315,11 @@ With the "U" map, one can change to a later directory (successor).
 This map is the opposite of the "u" map. (see |netrw-u|)  Use the
 q map to list both the bookmarks and history. (see |netrw-qb|)
 
+The "U" map also accepts counts to go forward in the history several slots.
+
+See |g:netrw_dirhistmax| for how to control the quantity of history stack
+slots.
+
 
 NETRW CLEAN                                    *netrw-clean* *:NetrwClean*
 
@@ -1368,7 +1452,8 @@ to remove it again using the g:netrw_rmf_cmd variable.  Its default value is:
 
        g:netrw_rmf_cmd: ssh HOSTNAME rm -f
 
-Associated setting variable: |g:netrw_local_rmdir| |g:netrw_rm_cmd|
+Related topics: |netrw-d|
+Associated setting variable: |g:netrw_localrmdir| |g:netrw_rm_cmd|
                              |g:netrw_rmdir_cmd|   |g:netrw_ssh_cmd|
 
 
@@ -1502,7 +1587,7 @@ What it means:
 Associated setting variables: |g:netrw_hide| |g:netrw_list_hide|
 Associated topics: |netrw-a| |netrw-gh| |netrw-mh|
 
-
+                                       *netrw-sort-sequence*
 EDITING THE SORTING SEQUENCE           *netrw-S* *netrw-sortsequence* {{{2
 
 When "Sorted by" is name, one may specify priority via the sorting sequence
@@ -1527,6 +1612,28 @@ Related topics:               |netrw-s|               |netrw-S|
 Associated setting variables: |g:netrw_sort_sequence| |g:netrw_sort_options|
 
 
+EXECUTING FILE UNDER CURSOR VIA SYSTEM()                       *netrw-X*
+
+Pressing X while the cursor is atop an executable file will yield a prompt
+using the filename asking for any arguments.  Upon pressing a [return], netrw
+will then call |system()| with that command and arguments.  The result will
+be displayed by |:echomsg|, and so |:messages| will repeat display of the
+result.  Ansi escape sequences will be stripped out.
+
+
+FORCING TREATMENT AS A FILE OR DIRECTORY       *netrw-gd* *netrw-gf* {{{2
+
+Remote symbolic links (ie. those listed via ssh or ftp) are problematic
+in that it is difficult to tell whether they link to a file or to a
+directory.
+
+To force treatment as a file: use >
+       gf
+<
+To force treatment as a directory: use >
+       gd
+<
+
 GOING UP                                                       *netrw--* {{{2
 
 To go up a directory, press "-" or press the <cr> when atop the ../ directory
@@ -1589,7 +1696,7 @@ As a quick shortcut, one may press >
 to toggle between hiding files which begin with a period (dot) and not hiding
 them.
 
-Associated setting variable: |g:netrw_list_hide|
+Associated setting variable: |g:netrw_list_hide|  |g:netrw_hide|
 Associated topics: |netrw-a| |netrw-ctrl-h| |netrw-mh|
 
 IMPROVING BROWSING                     *netrw-listhack* *netrw-ssh-hack* {{{2
@@ -1687,22 +1794,23 @@ MAKING A NEW DIRECTORY                                  *netrw-d* {{{2
 
 With the "d" map one may make a new directory either remotely (which depends
 on the global variable g:netrw_mkdir_cmd) or locally (which depends on the
-global variable g:netrw_local_mkdir).  Netrw will issue a request for the new
+global variable g:netrw_localmkdir).  Netrw will issue a request for the new
 directory's name.  A bare <CR> at that point will abort the making of the
 directory.  Attempts to make a local directory that already exists (as either
 a file or a directory) will be detected, reported on, and ignored.
 
-Currently, making a directory via ftp is not supported.
-
-Associated setting variable: |g:netrw_local_mkdir| |g:netrw_mkdir_cmd|
+Related topics: |netrw-D|
+Associated setting variables:  |g:netrw_localmkdir|  |g:netrw_mkdir_cmd|
+                               |g:netrw_remote_mkdir|
 
 
 MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY    *netrw-c* {{{2
 
 By default, |g:netrw_keepdir| is 1.  This setting means that the current
-directory will not track the browsing directory.
+directory will not track the browsing directory. (done for backwards
+compatibility with v6's file explorer).
 
-Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory to
+Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory
 track netrw's browsing directory.
 
 However, given the default setting for g:netrw_keepdir of 1 where netrw
@@ -1725,6 +1833,7 @@ maps make use of marked files:
     |netrw-mc| Copy marked files to target
     |netrw-md| Apply vimdiff to marked files
     |netrw-me| Edit marked files
+    |netrw-mF| Unmark marked files
     |netrw-mg| Apply vimgrep to marked files
     |netrw-mm| Move marked files
     |netrw-mp| Print marked files
@@ -1732,6 +1841,7 @@ maps make use of marked files:
     |netrw-mT| Generate tags using marked files
     |netrw-mx| Apply shell command to marked files
     |netrw-mz| Compress/Decompress marked files
+    |netrw-qF| Mark files using quickfix list
     |netrw-O|  Obtain marked files
     |netrw-R|  Rename marked files
 
@@ -1740,6 +1850,16 @@ the cursor atop a marked file and press "mf".  This process also works
 with <s-leftmouse> using gvim.  One may unmark all files by pressing
 "mu" (see |netrw-mu|).
 
+Marked files are highlighted using the "netrwMarkFile" highlighting group,
+which by default is linked to "Identifier" (see Identifier under
+|group-name|).  You may change the highlighting group by putting something
+like >
+
+       highlight clear netrwMarkFile
+       hi link netrwMarkFile ..whatever..
+<
+into $HOME/.vim/after/syntax/netrw.vim .
+
 *markfilelist* *global_markfilelist* *local_markfilelist*
 All marked files are entered onto the global marked file list; there is only
 one such list.  In addition, every netrw buffer also has its own local marked
@@ -1749,6 +1869,22 @@ commands which operate on marked files use one or the other of the marked file
 lists.
 
 
+UNMARKING FILES                                                        *netrw-mF* {{{2
+       (also see |netrw-mf|)
+
+This command will unmark all files in the current buffer.  One may also use
+mf (|netrw-mf|) on a specific file to unmark just that file.
+
+
+MARKING FILES BY QUICKFIX LIST                         *netrw-qF*
+       (also see |netrw-mf|)
+
+One may convert the |quickfix-error-lists| into a marked file list using
+"qF".  You may then proceed with commands such as me (|netrw-me|) to
+edit them.  Quickfix error lists are generated, for example, by calls
+to |:vimgrep|.
+
+
 MARKING FILES BY REGULAR EXPRESSION                            *netrw-mr* {{{2
        (also see |netrw-mf|)
 
@@ -1789,7 +1925,8 @@ MARKED FILES: COPYING                                             *netrw-mc* {{{2
                      (Uses the global marked file list)
 
 Select a target directory with mt (|netrw-mt|).  Then change directory,
-select file(s) (see |netrw-mf|), and press "mc".
+select file(s) (see |netrw-mf|), and press "mc".  The copy is done
+from the current window (where one does the mf) to the target.
 
 Associated setting variable: |g:netrw_localcopycmd| |g:netrw_ssh_cmd|
 
@@ -1806,17 +1943,27 @@ MARKED FILES: EDITING                                           *netrw-me* {{{2
 
 This command will place the marked files on the |arglist| and commence
 editing them.  One may return the to explorer window with |:Rexplore|.
+(use |:n| and |:p| to edit next and previous files in the arglist)
 
 MARKED FILES: GREP                                             *netrw-mg* {{{2
            (See |netrw-mf| and |netrw-mr| for how to mark files)
                      (uses the global marked file list)
 
-This command will apply |:vimgrep| to the marked files.  The command will ask
-for the requested pattern; one may enter: >
+This command will apply |:vimgrep| to the marked files.
+The command will ask for the requested pattern; one may then enter: >
+
        /pattern/[g][j]
        ! /pattern/[g][j]
        pattern
 <
+In the cases of "j" option usage as shown above, "mg" will winnow the current
+marked file list to just those possessing the specified pattern.
+Thus, one may use >
+       mr ...file-pattern
+       mg ..contents-pattern
+to have a marked file list satisfying the file-pattern but containing the
+desried contents-pattern.
+
 MARKED FILES: HIDING AND UNHIDING BY SUFFIX                    *netrw-mh* {{{2
            (See |netrw-mf| and |netrw-mr| for how to mark files)
                      (uses the local marked file list)
@@ -1841,7 +1988,8 @@ MARKED FILES: MOVING                                              *netrw-mm* {{{2
        Use at your own risk!
 
 Select a target directory with mt (|netrw-mt|).  Then change directory,
-select file(s) (see |netrw-mf|), and press "mm".
+select file(s) (see |netrw-mf|), and press "mm".  The move is done
+from the current window (where one does the mf) to the target.
 
 Associated setting variable: |g:netrw_localmovecmd| |g:netrw_ssh_cmd|
 
@@ -1861,6 +2009,36 @@ MARKED FILES: SOURCING                                           *netrw-ms* {{{2
 Netrw will source the marked files (using vim's |:source| command)
 
 
+MARKED FILES: SETTING THE TARGET DIRECTORY                     *netrw-mt* {{{2
+     (See |netrw-mf| and |netrw-mr| for how to mark files)
+
+Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
+
+  * If the cursor is atop a file name, then the netrw window's currently
+    displayed directory is used for the copy/move-to target.
+
+  * Also, if the cursor is in the banner, then the netrw window's currently
+    displayed directory is used for the copy/move-to target.
+    Unless the target already is the current directory.  In which case,
+    remove the target.
+
+  * However, if the cursor is atop a directory name, then that directory is
+    used for the copy/move-to target
+
+There is only one copy/move-to target per vim session; ie. the target is a
+script variable (see |s:var|) and is shared between all netrw windows (in an
+instance of vim).
+
+When using menus and gvim, netrw provides a "Targets" entry which allows one
+to pick a target from the list of bookmarks and history.
+
+Related topics:
+      Marking Files......................................|netrw-mf|
+      Marking Files by Regular Expression................|netrw-mr|
+      Marked Files: Target Directory Using Bookmarks.....|netrw-Tb|
+      Marked Files: Target Directory Using History.......|netrw-Th|
+
+
 MARKED FILES: TAGGING                                          *netrw-mT* {{{2
            (See |netrw-mf| and |netrw-mr| for how to mark files)
                      (uses the global marked file list)
@@ -1870,7 +2048,7 @@ The "mT" mapping will apply the command in |g:netrw_ctags| (by default, it is
 netrw will use ssh (see |g:netrw_ssh_cmd|), and so ssh must be available for
 this to work on remote systems.  For your local system, see |ctags| on how to
 get a version.  I myself use hdrtags, currently available at
-http://mysite.verizon.net/astronaut/src/index.html , and have >
+http://www.drchip.org/astronaut/src/index.html , and have >
 
        let g:netrw_ctags= "hdrtag"
 <
@@ -1886,34 +2064,48 @@ edit the desired file and go to the tag.
 
 Associated setting variables: |g:netrw_ctags| |g:netrw_ssh_cmd|
 
+MARKED FILES: TARGET DIRECTORY USING BOOKMARKS                 *netrw-Tb* {{{2
 
-MARKED FILES: SETTING THE TARGET DIRECTORY                     *netrw-mt* {{{2
-     (See |netrw-mf| and |netrw-mr| for how to mark files)
+Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|).
 
-Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
+The |netrw-qb| map will give you a list of bookmarks (and history).
+One may choose one of the bookmarks to become your marked file
+target by using [count]Tb (default count: 1).
 
-  * if the cursor is atop a file name, then the netrw window's currently
-    displayed directory is used for the copy/move-to target.
+Related topics:
+      Listing Bookmarks and History......................|netrw-qb|
+      Marked Files: Setting The Target Directory.........|netrw-mt|
+      Marked Files: Target Directory Using History.......|netrw-Th|
+      Marking Files......................................|netrw-mf|
+      Marking Files by Regular Expression................|netrw-mr|
 
-  * also, if the cursor is in the banner, then the netrw window's currently
-    displayed directory is used for the copy/move-to target.
 
-  * however, if the cursor is atop a directory name, then that directory is
-    used for the copy/move-to target
+MARKED FILES: TARGET DIRECTORY USING HISTORY                   *netrw-Th* {{{2
+
+Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|).
+
+The |netrw-qb| map will give you a list of history (and bookmarks).
+One may choose one of the history entries to become your marked file
+target by using [count]Th (default count: 0; ie. the current directory).
+
+Related topics:
+      Listing Bookmarks and History......................|netrw-qb|
+      Marked Files: Setting The Target Directory.........|netrw-mt|
+      Marked Files: Target Directory Using Bookmarks.....|netrw-Tb|
+      Marking Files......................................|netrw-mf|
+      Marking Files by Regular Expression................|netrw-mr|
 
-There is only one copy/move-to target per vim session; ie. the target is a
-script variable (see |s:var|) and is shared between all netrw windows (in an
-instance of vim).
 
 MARKED FILES: UNMARKING                                                *netrw-mu* {{{2
      (See |netrw-mf| and |netrw-mr| for how to mark files)
 
 The "mu" mapping will unmark all currently marked files.
 
-
+                               *netrw-browser-settings*
 NETRW BROWSER VARIABLES                *netrw-browser-options* *netrw-browser-var* {{{2
 
-(if you're interested in the netrw file transfer settings, see |netrw-options|)
+(if you're interested in the netrw file transfer settings, see |netrw-options|
+ and |netrw-protocol|)
 
 The <netrw.vim> browser provides settings in the form of variables which
 you may modify; by placing these settings in your <.vimrc>, you may customize
@@ -1936,6 +2128,10 @@ your browsing preferences.  (see also: |netrw-settings|)
                                NOTE: suppressing the banner is a new feature
                                which may cause problems.
 
+  *g:netrw_bannerbackslash*    if this variable exists and is not zero, the
+                               banner will be displayed with backslashes
+                               rather than forward slashes.
+
   *g:netrw_browse_split*       when browsing, <cr> will open the file by:
                                =0: re-using the same window
                                =1: horizontally splitting the window first
@@ -1963,26 +2159,58 @@ your browsing preferences.  (see also: |netrw-settings|)
                                    Will compress marked files with this
                                    command
 
+  *g:Netrw_corehandler*                Allows one to specify something additional
+                               to do when handling <core> files via netrw's
+                               browser's "x" command (see |netrw-x|).  If
+                               present, g:Netrw_corehandler specifies
+                               either one or more function references
+                               (see |Funcref|).  (the capital g:Netrw...
+                               is required its holding a function reference)
+
+
   *g:netrw_ctags*              ="ctags"
-                               The default external program used to create tags
-
-  *g:netrw_cursorline*         = 1 (default)
-                               will use the |'cursorline'| local setting when
-                               |g:netrw_liststyle| ==0 (thin listing) or
-                               |g:netrw_liststyle| ==1 (long listing) or
-                               |g:netrw_liststyle| ==3 (tree listing)
-                               (ie. doesn't affect the wide listing)
-                               =0: off
-                               =2: like ==1, but the wide listing gets both
-                               cursorline and |'cursorcolumn'|locally set
-
-  *g:netrw_decompress*         = { ".gz" : "gunzip" ,
+                               The default external program used to create
+                               tags
+
+  *g:netrw_cursor*             = 2 (default)
+                               This option controls the use of the
+                               |'cursorline'| (cul) and |'cursorcolumn'|
+                               (cuc) settings by netrw:
+
+                               Value   Thin-Long-Tree      Wide
+                                =0      u-cul u-cuc      u-cul u-cuc
+                                =1      u-cul u-cuc        cul u-cuc
+                                =2        cul u-cuc        cul u-cuc
+                                =3        cul u-cuc        cul   cuc
+                                =4        cul   cuc        cul   cuc
+
+                               Where
+                                 u-cul : user's |'cursorline'|   setting used
+                                 u-cuc : user's |'cursorcolumn'| setting used
+                                 cul   : |'cursorline'|  locally set
+                                 cuc   : |'cursorcolumn'| locally set
+
+  *g:netrw_decompress*         = { ".gz"  : "gunzip" ,
                                    ".bz2" : "bunzip2" ,
                                    ".zip" : "unzip" ,
                                    ".tar" : "tar -xf"}
                                  A dictionary mapping suffices to
                                  decompression programs.
 
+  *g:netrw_dirhistmax*            =10: controls maximum quantity of past
+                                     history.  May be zero to supppress
+                                    history.
+                                    (related: |netrw-qb| |netrw-u| |netrw-U|)
+
+  *g:netrw_dynamic_maxfilenamelen* =32: enables dynamic determination of
+                                   |g:netrw_maxfilenamelen|, which affects
+                                   local file long listing.
+  *g:netrw_errorlvl*           =0: error levels greater than or equal to
+                                   this are permitted to be displayed
+                                   0: notes
+                                   1: warnings
+                                   2: errors
+
   *g:netrw_fastbrowse*         =0: slow speed directory browsing;
                                    never re-uses directory listings,
                                    always obtains directory listings.
@@ -2046,7 +2274,10 @@ your browsing preferences.  (see also: |netrw-settings|)
                                These characters in directory names are
                                escaped before applying glob()
 
-  *g:netrw_hide*               if true, the hiding list is used
+  *g:netrw_hide*               Controlled by the "a" map (see |netrw-a|)
+                               =0 : show all
+                               =1 : show not-hidden files
+                               =2 : show hidden files only
                                 default: =0
 
   *g:netrw_home*               The home directory for where bookmarks and
@@ -2082,15 +2313,15 @@ your browsing preferences.  (see also: |netrw-settings|)
                                Copies marked files (|netrw-mf|) to target
                                directory (|netrw-mt|, |netrw-mc|)
 
+  *g:netrw_localmkdir*         command for making a local directory
+                                default: "mkdir"
+
   *g:netrw_localmovecmd*       ="mv" Linux/Unix/MacOS/Cygwin
                                ="move" Windows
                                Moves marked files (|netrw-mf|) to target
                                directory (|netrw-mt|, |netrw-mm|)
 
-  *g:netrw_local_mkdir*                command for making a local directory
-                                default: "mkdir"
-
-  *g:netrw_local_rmdir*                remove directory command (rmdir)
+  *g:netrw_localrmdir*         remove directory command (rmdir)
                                 default: "rmdir"
 
   *g:netrw_maxfilenamelen*     =32 by default, selected so as to make long
@@ -2101,16 +2332,26 @@ your browsing preferences.  (see also: |netrw-settings|)
                                columnar.
 
   *g:netrw_mkdir_cmd*          command for making a remote directory
+                               via ssh  (also see |g:netrw_remote_mkdir|)
                                 default: "ssh USEPORT HOSTNAME mkdir"
 
-  *g:netrw_mousemaps*          =1 (default) enables the mouse buttons
-                                  while browsing:
+  *g:netrw_mousemaps*            =1 (default) enables mouse buttons while
+                                  browsing to:
                                     leftmouse       : open file/directory
                                     shift-leftmouse : mark file
                                     middlemouse     : same as P
                                     rightmouse      : remove file/directory
                                =0: disables mouse maps
 
+  *g:netrw_nobeval*            doesn't exist (default)
+                               If this variable exists, then balloon
+                               evaluation will be suppressed
+                               (see |'ballooneval'|)
+
+  *g:netrw_remote_mkdir*       command for making a local directory
+                               via ftp  (also see |g:netrw_mkdir_cmd|)
+                                default: "mkdir"
+
   *g:netrw_retmap*             if it exists and is set to one, then:
                                 * if in a netrw-selected file, AND
                                 * no normal-mode <2-leftmouse> mapping exists,
@@ -2136,7 +2377,7 @@ your browsing preferences.  (see also: |netrw-settings|)
   *g:netrw_rmdir_cmd*          command for removing directories
                                 default: "ssh USEPORT HOSTNAME rmdir"
 
-  *g:netrw_rmf_cmd*             command for removing softlinks
+  *g:netrw_rmf_cmd*            command for removing softlinks
                                 default: "ssh USEPORT HOSTNAME rm -f"
 
   *g:netrw_sort_by*            sort by "name", "time", or "size"
@@ -2161,7 +2402,7 @@ your browsing preferences.  (see also: |netrw-settings|)
                                           \.info$,\.swp$,\.obj$'
 
   *g:netrw_special_syntax*     If true, then certain files will be shown
-                               in special syntax in the browser:
+                               using special syntax in the browser:
 
                                        netrwBak     : *.bak
                                        netrwCompress: *.gz *.bz2 *.Z *.zip
@@ -2171,7 +2412,7 @@ your browsing preferences.  (see also: |netrw-settings|)
                                        netrwMakefile: [mM]akefile *.mak
                                        netrwObj     : *.o *.obj
                                        netrwTags    : tags ANmenu ANtags
-                                       netrwTilde   : *~ 
+                                       netrwTilde   : *~
                                        netrwTmp     : tmp* *tmp
 
                                These syntax highlighting groups are linked
@@ -2182,11 +2423,6 @@ your browsing preferences.  (see also: |netrw-settings|)
 <                              into one's <.vimrc> to use one's own
                                preferences.
 
-  *g:netrw_ssh_cmd*            One may specify an executable command
-                               to use instead of ssh for remote actions
-                               such as listing, file removal, etc.
-                                default: ssh
-
   *g:netrw_ssh_browse_reject*  ssh can sometimes produce unwanted lines,
                                messages, banners, and whatnot that one doesn't
                                want masquerading as "directories" and "files".
@@ -2194,6 +2430,11 @@ your browsing preferences.  (see also: |netrw-settings|)
                                messages.  By default its value is:
                                         '^total\s\+\d\+$'
 
+  *g:netrw_ssh_cmd*            One may specify an executable command
+                               to use instead of ssh for remote actions
+                               such as listing, file removal, etc.
+                                default: ssh
+
 
   *g:netrw_tmpfile_escape*     =' &;'
                                escape() is applied to all temporary files
@@ -2219,8 +2460,14 @@ your browsing preferences.  (see also: |netrw-settings|)
 
   *g:netrw_winsize*            specify initial size of new windows made with
                                "o" (see |netrw-o|), "v" (see |netrw-v|),
-                               |:Hexplore| or |:Vexplore|.
-                                default: ""
+                               |:Hexplore| or |:Vexplore|.  The g:netrw_winsize
+                               is an integer describing the percentage of the
+                               current netrw buffer's window to be used for
+                               the new window.
+                                If g:netrw_winsize is less than zero, then
+                               the absolute value of g:netrw_winsize lines
+                               or columns will be used for the new window.
+                                default: 50  (for 50%)
 
   *g:netrw_xstrlen*            Controls how netrw computes string lengths,
                                including multi-byte characters' string
@@ -2254,7 +2501,7 @@ file you edit; this apparently also applies to directories.  In other words,
 autochdir sets the current directory to that containing the "file" (even if
 that "file" is itself a directory).
 
-NETRW SETTINGS                                         *netrw-settings* {{{2
+NETRW SETTINGS WINDOW                          *netrw-settings-window* {{{2
 
 With the NetrwSettings.vim plugin, >
        :NetrwSettings
@@ -2263,7 +2510,7 @@ settings.  You may change any of their values; when you save the file, the
 settings therein will be used.  One may also press "?" on any of the lines for
 help on what each of the variables do.
 
-(also see: |netrw-browser-var| |netrw-protocol| |netrw-var| |netrw-variables|)
+(also see: |netrw-browser-var| |netrw-protocol| |netrw-variables|)
 
 
 ==============================================================================
@@ -2297,7 +2544,7 @@ Related topics:
  * To automatically make the currently browsed directory the current
    directory, see |g:netrw_keepdir|.
 
-
+                                                       *netrw-createfile*
 OPEN A NEW FILE IN NETRW'S CURRENT DIRECTORY           *netrw-%*
 
 To open a file in netrw's current directory, press "%".  This map will
@@ -2323,15 +2570,14 @@ These will:
        1. Make vertical splitting the default for previewing files
        2. Make the default listing style "tree"
        3. When a vertical preview window is opened, the directory listing
-          will use only 30 columns; the rest of the window is used for the
-          preview window.
+          will use only 30% of the columns available; the rest of the window
+          is used for the preview window.
 
 PREVIOUS WINDOW                                *netrw-P* *netrw-prvwin* {{{2
 
 To edit a file or directory in the previously used (last accessed) window (see
 :he |CTRL-W_p|), press a "P".  If there's only one window, then the one window
-will be horizontally split (above/below splitting is controlled by
-|g:netrw_alto|, and its initial size is controlled by |g:netrw_winsize|).
+will be horizontally split (by default).
 
 If there's more than one window, the previous window will be re-used on
 the selected file/directory.  If the previous window's associated buffer
@@ -2339,6 +2585,13 @@ has been modified, and there's only one window with that buffer, then
 the user will be asked if s/he wishes to save the buffer first (yes,
 no, or cancel).
 
+Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-v|
+Associated setting variables:
+   |g:netrw_alto|    control above/below splitting
+   |g:netrw_altv|    control right/left splitting
+   |g:netrw_preview| control horizontal vs vertical splitting
+   |g:netrw_winsize| control initial sizing
+
 
 REFRESHING THE LISTING                 *netrw-ctrl-l* *netrw-ctrl_l* {{{2
 
@@ -2347,6 +2600,15 @@ hit the <cr> when atop the ./ directory entry in the listing.  One may also
 refresh a local directory by using ":e .".
 
 
+REVERSING SORTING ORDER                *netrw-r* *netrw-reverse* {{{2
+
+One may toggle between normal and reverse sorting order by pressing the
+"r" key.
+
+Related topics:              |netrw-s|
+Associated setting variable: |g:netrw_sort_direction|
+
+
 RENAMING FILES OR DIRECTORIES  *netrw-move* *netrw-rename* *netrw-R* {{{2
 
 If there are no marked files: (see |netrw-mf|)
@@ -2377,15 +2639,6 @@ One may rename a block of files and directories by selecting them with
 the V (|linewise-visual|).
 
 
-REVERSING SORTING ORDER                *netrw-r* *netrw-reverse* {{{2
-
-One may toggle between normal and reverse sorting order by pressing the
-"r" key.
-
-Related topics:              |netrw-s|
-Associated setting variable: |g:netrw_sort_direction|
-
-
 SELECTING SORTING STYLE                        *netrw-s* *netrw-sort* {{{2
 
 One may select the sorting style by name, time, or (file) size.  The "s" map
@@ -2469,9 +2722,9 @@ Associated setting variables:     |g:netrw_chgwin|
        P5. My times come up oddly in local browsing
 
                Does your system's strftime() accept the "%c" to yield dates
-               such as "Sun Apr 27 11:49:23 1997"?  If not, do a "man strftime"
-               and find out what option should be used.  Then put it into
-               your |.vimrc|: >
+               such as "Sun Apr 27 11:49:23 1997"?  If not, do a
+               "man strftime" and find out what option should be used.  Then
+               put it into your |.vimrc|: >
 
                        let g:netrw_timefmt= "%X"  (where X is the option)
 <
@@ -2604,7 +2857,7 @@ Associated setting variables:     |g:netrw_chgwin|
 
                                                                *netrw-p11*
        P11. I want to have two windows; a thin one on the left and my editing
-            window on the right.  How can I do this?
+            window on the right.  How may I accomplish this?
 
                * Put the following line in your <.vimrc>:
                        let g:netrw_altv = 1
@@ -2650,30 +2903,68 @@ Associated setting variables:   |g:netrw_chgwin|
            "let g:netrw_sftp_cmd = "d:\\dev\\putty\\PSFTP.exe"
            "let g:netrw_scp_cmd = "d:\\dev\\putty\\PSCP.exe"
 <
+                                                               *netrw-p14*
+       P14. I'd would like to speed up writes using Nwrite and scp/ssh
+            style connections.  How?  (Thomer M. Gil)
+
+            Try using ssh's ControlMaster and ControlPath (see the ssh_config
+            man page) to share multiple ssh connections over a single network
+            connection. That cuts out the cryptographic handshake on each
+            file write, sometimes speeding it up by an order of magnitude.
+            (see  http://thomer.com/howtos/netrw_ssh.html)
+            (included by permission)
+
+            Add the following to your ~/.ssh/config: >
 
+                # you change "*" to the hostname you care about
+                Host *
+                  ControlMaster auto
+                  ControlPath /tmp/%r@%h:%p
+
+<           Then create an ssh connection to the host and leave it running: >
+
+                ssh -N host.domain.com
+
+<           Now remotely open a file with Vim's Netrw and enjoy the
+            zippiness: >
+
+               vim scp://host.domain.com//home/user/.bashrc
+<
+                                                               *netrw-p15*
+       P15. How may I use a double-click instead of netrw's usual single click
+            to open a file or directory?  (Ben Fritz)
+
+            First, disable netrw's mapping with >
+                   let g:netrw_mousemaps= 0
+<           and then create a netrw buffer only mapping in
+            $HOME/.vim/after/ftplugin/netrw.vim: >
+                   nmap <buffer> <2-leftmouse> <CR>
+<           Note that setting g:netrw_mousemaps to zero will turn off
+            all netrw's mouse mappings, not just the <leftmouse> one.
+            (see |g:netrw_mousemaps|)
 
 ==============================================================================
 11. Debugging Netrw Itself                             *netrw-debug* {{{1
 
-The <netrw.vim> script is typically available as:
+The <netrw.vim> script is typically available as something like:
 >
-       /usr/local/share/vim/vim6x/plugin/netrwPlugin.vim
-       /usr/local/share/vim/vim6x/autoload/netrw.vim
-< -or- >
        /usr/local/share/vim/vim7x/plugin/netrwPlugin.vim
        /usr/local/share/vim/vim7x/autoload/netrw.vim
+< -or- >
+       /usr/local/share/vim/vim6x/plugin/netrwPlugin.vim
+       /usr/local/share/vim/vim6x/autoload/netrw.vim
 <
 which is loaded automatically at startup (assuming :set nocp).
 
        1. Get the <Decho.vim> script, available as:
 
-            http://mysite.verizon.net/astronaut/vim/index.html#DECHO
+            http://www.drchip.org/astronaut/vim/index.html#DECHO
           or
             http://vim.sourceforge.net/scripts/script.php?script_id=120
 
          It now comes as a "vimball"; if you're using vim 7.0 or earlier,
          you'll need to update vimball, too.  See
-            http://mysite.verizon.net/astronaut/vim/index.html#VIMBALL
+            http://www.drchip.org/astronaut/vim/index.html#VIMBALL
 
        2. Edit the <netrw.vim> file by typing: >
 
@@ -2706,821 +2997,145 @@ which is loaded automatically at startup (assuming :set nocp).
 ==============================================================================
 12. History                                            *netrw-history* {{{1
 
-       v140: Jul 27, 2010 * (Lech Lorens) unexpected change of window
-       v139: May 14, 2010 * when viewing remote directory listings and
-                            changing listing style, going to tree listing
-                            mode was issuing two rather useless messages
-                            about the buffer name.  They have now been
-                            silenced.
-                          * (Jean Johner) with "behave mswin", clicking
-                            on a filename in wide mode opened a new file
-                            with a missing first letter
-                          * (Britton Kerin) wanted netrw listings to be
-                            buflisted; the |g:netrw_bufsettings| option
-                            permits that.
-             Jun 18, 2010 * (Jan Steffens) added support for xz compression
-             Jun 23, 2010 * vimdiff dir1 dir2 now works
-             Jul 27, 2010 * (John Orr) pointed out that the intended maparg
-                            test for gx was actually testing for g rather
-                            than gx.  Fixed.
-       v138: May 01, 2010 * added the bomb setting to the Save-Set-Restore
-                            option handling (for Tony M)
-             May 14, 2010 * (Bram Moolenaar) netrw optionally sets cursorline
-                            (and sometimes cursorcolumn) for its display.
-                            This option setting was leaking through with
-                            remote file handling.
-       v137: Dec 28, 2009 * modified the preview window handling for
-                            vertically split windows.  The preview
-                            window will take up all but g:netrw_winsize
-                            columns of the original window; those 
-                            g:netrw_winsize columns will be used for
-                            the netrw listing.
-                          * (Simon Dambe) removed "~" from
-                            |g:netrw_glob_escape| under Windows
-                          * (Bram Moolenaar) modified test for status bar
-                            click with leftmouse.  Moved code to
-                            s:NetrwLeftmouse().
-             Feb 24, 2010 * (for Jean Johner) added insert-mode maps; one
-                            can get into insert mode with netrw via
-                            ctrl-o :e .
-             Mar 15, 2010 * (Dominique Pellé) Directory with backslashes such
-                            as foo\bar were not being entered/left properly
-             Mar 15, 2010 * Using :Explore .. and causing two FocusGained
-                            events caused the directory to change.  Fixed.
-             Mar 22, 2010 * Last fix caused problems for *//pat and */filepat
-                            searches.
-             Mar 30, 2010 * With :set hidden and changing listing styles 8
-                            times, the tree listing buffer was being marked
-                            as modified upon exit.  Fixed.
-       v136: Jan 14, 2009 * extended |g:Netrw_funcref| to also handle lists
-                            of function references
-             Jan 14, 2009 * (reported by Marvin Renich) with spell check
-                            enabled, some filenamess will still being
-                            displayed as spelling errors.
-             Apr 13, 2009 * (Björn Winckler) writing a file using
-                            remote scp caused syntax highlighting problem.
-                            Solution: avoid syntax/syntax.vim's
-                            au Filetype * syntax setting autocommand by
-                            checking that the current buffer has the
-                            netrw filetype before attempting a doau
-                            in s:NetrwSafeOptions().
-             Apr 14, 2009 * (asgeo1) suggested the "T" map (|netrw-T|)
-             Apr 14, 2009 * marking wasn't working on executable and
-                            other special filenames
-             Apr 20, 2009 * (Dennis Benzinger) files opened via http have
-                            their syntax filetype auto-detected
-             Jun 19, 2009 * (Yukihiro Nakadaira) help document improvements
-             Jul 22, 2009 * g:netrw_browse_split will honor the
-                            |'equalalways'| setting.
-             Jul 29, 2009 * implemented "I" mapping to toggle banner
-                            (this is experimental and still being debugged)
-             Sep 19, 2009 * (Mike McEwan) writes via ftp now send both
-                            g:netrw_ftpmode and g:netrw_ftpextracmd (if the
-                            latter exists)
-             Dec 02, 2009 * netrw uses vimgrep several places; it now uses
-                            "noautocmd vimgrep" (should be speedier).
-             Dec 03, 2009 * changed back to using -source instead of -dump
-                            for elinks-using commands. (requested by James
-                            Vega and Karsten Hopp)
-       v135: Oct 29, 2008 * using |simplify()| on directory names
-                            (supporting handling ".."s in directory names)
-             Oct 31, 2008 * added special file highlighting for core dumps
-                            under Unix/Linux.  The default sorting sequence
-                            now also gives core dumps priority.
-             Nov 10, 2008 * uses a call to netrw#Nread() instead of Nread
-                            to avoid having to use fnameescape()
-                          * fixed a tree redrawing problem (open directory,
-                            open subdir, close subdir, close dir)
-             Nov 19, 2008 * sprinkled some histdel("/",-1)s through the code
-                            in an attempt to prevent netrw from changing
-                            the search history.
-             Jan 02, 2009 * |g:Netrw_funcref| included
-             Jan 05, 2009 * Explore */ **/ *// **// all clear explorer
-                            variables
-             Jan 05, 2009 * (Panagiotis Louridas) extended s:WinPath()
-                            to remove cygdrive from non-cygwin Windows
-                            paths.  Improved the determination as to
-                            whether or not to do so.
-             Jan 13, 2009 * included contains=@NoSpell in every syntax
-                            group for syntax/netrw.vim .
-       v134: Sep 30, 2008 * (Sander Marechal) provided a bugfix involving
-                            the use of the |netrw-t| command with a remote
-                            directory.
-             Sep 30, 2008 * using "x" on a remote jpg was failing; fixed.
-             Oct 03, 2008 * bookmarks now go on a list and are stored to
-                            the first directory on the |'runtimepath'| in
-                            the hopes of making their retention reliable.
-                            History now also goes to that directory.
-             Oct 07, 2008 * Included check that vim 7.0 or later is in use.
-             Oct 07, 2008 * Improved |g:netrw_retmap| handling.
-             Oct 12, 2008 * Based upon Sébastien Migniot's suggestion, if
-                            cadaver isn't available then netrw will try to
-                            use curl for the dav://... protocol.
-             Oct 13, 2008 * added @*/ to netrw buffers' |'iskeyword'|setting
-                            This lets mf (|netrw-mf|) mark directories, links
-                            and executables.
-             Oct 13, 2008 * avoids a second NetrwBrowse() refresh when
-                            g:netrw_fastbrowse is <= 1 (slow, medium speed)
-             Oct 22, 2008 * |g:netrw_http_xcmd| may now be overridden
-                            independently of |g:netrw_http_cmd|.
-             Oct 23, 2008 * [N] added to the various Explore commands to
-                            let users specify the width/height of new
-                            explorer windows, overriding |g:netrw_winsize|.
-       v133: Aug 10, 2008 * NetReadFixup() for win95 was missing some "a:"s
-             Aug 12, 2008 * (Jan Minář) an error condition in NetrwMethod()
-                            wasn't being used, resulting in "b:netrw_fname
-                            undefined" errors
-             Aug 12, 2008 * (François Ingeirest) asked that "hi link" be
-                            changed to hi default link in the netrw syntax
-                            files.
-             Aug 12, 2008 * using s:NetrwUnmarkList() more often.  Filenames
-                            were being left on the global list when removed
-                            from the buffer-local lists.
-             Aug 14, 2008 * (Joshua Clayton) an errant extra ")" was left in
-                            the rcp-handling portion of NetRead().
-             Sep 03, 2008 * added |'cursorline'| highlighting to thin, long,
-                            and tree displays.
-       v132: Aug 06, 2008 * Fixed marked file-based obtain
-             Aug 08, 2008 * sourcing a file via ftp from a netrw-generated
-                            buffer (or any buffer with |'nobl'|) left an
-                            empty no-name buffer in its wake.  Fixed.
-       v130: Jul 31, 2008 * trying out elinks/links for http://host/
-                            requests.  One problem: in-page links
-                            (such as with ...#LABEL) are not supported
-                          * verified that Bram's modified netrwPlugin works
-             Aug 01, 2008 * fixed a bug: when sourcing a file via ftp, the
-                            "filter window" was left behind.
-       v129: Jul 31, 2008 * bug found in non-mouse enabled vim and some
-                            local maps
-       v128: Jul 30, 2008 * much work done in using shellescape() and
-                            fnameescape()
-       v126: Jun 30, 2008 * after having gone to a remote directory,
-                            <f1> was no longer taking one to the correct
-                            entry in the help (|netrw-quickhelp|).  Fixed.
-             Jul 01, 2008 * extracting the last filename from a wide listing
-                            missed the last letter when |'virtualedit'| not
-                            enabled.
-             Jul 01, 2008 * vim foo/bar  was creating [Scratch] buffers,
-                            where bar was also a directory
-             Jul 01, 2008 * numerous additional changes were made to netrw
-                            to use fnameescape() and shellescape() instead
-                            of escape().  Not all changes have been tested
-                            as yet...
-             Jul 01, 2008 * (James Vega reported) some problems with
-                            :NetrwSettings (due to no longer used setting
-                            variables).
-             Jul 07, 2008 * Additional numerous changes to support security;
-                            shellescape(arg,1), etc.
-       v125: Apr 07, 2008 * (Cristian Rigamonti) CR provides a patch; he
-                            noted that gx was failing since its call to
-                            netrw#NetBrowseX() wasn't updated to
-                            netrw#NetrwBrowseX().
-                          * (Stanis Trendelenburg) ST provides a patch to
-                            supports davs: (dav + ssl)
-                          * (Rick Choi) noted that directory names comprised
-                            of three digits were not being displayed by
-                            the internal browser.  Fixed.
-                          * (Erik Falor) provided a patch to handle problems
-                            with changing directory and |'acd'| option.
-                          * (James Vega, Teemu Likonen) noted that netrw
-                            wasn't handling multi-byte filenames/directories
-                            correctly.  Fixed.
-                          * (Rick) found problem with g:netrw_maxfilenamelen
-                            being overridden.
-                          * (James Vega) pointed out that netrw was
-                            misidentifying all files in a symbolically linked
-                            directory as being symbolically linked
-                            themselves.  This particular problem was fixed;
-                            however, there are now situations where
-                            symbolically linked files will not be detected.
-                            Really need an internal vim function to do this
-                            identification.
-             Apr 17, 2008 * When g:netrw_keepdir==0, current directory
-                            doesn't necessarily equal b:netrw_curdir
-                            initially.  Problem is due to the patch directly
-                            above.
-                          * Fixed qf to handle case where b:netrw_curdir
-                            isn't the same as the current directory under
-                            linux/macosx.
-                          * New: |netrw-mg| (apply vimgrep to marked files)
-             May 05, 2008 * (Rick) pointed out that a "setlocal ts=32" was
-                            interfering with g:netrw_maxfilenamelen
-             May 05, 2008 * (James Vega) a file inside a linked directory
-                            was showing up as a symbolic link itself.
-             May 22, 2008 * symbolic links, fifos, and sockets are now
-                            indicated by a trailing @, |, or =, respectively.
-             Jun 06, 2008 * Removed numerous bugs from the marked file
-                            move and copy.  Tested these changes under
-                            Unix only thus far.
-                          * :Rexplore returns to the screen position in the
-                            netrw listing from whence the file was edited
-       v124: Apr 02, 2008 * (Adrian Rollett) change the line supporting the
-                           "x" action for mac to use g:netrw_shq
-       v123: Feb 27, 2008 * Marked files now keeps a "global" marked file
-                            list.  The global marked file list is used to
-                            support tag processing and vimdiff'ing
-                            (|netrw-md| |netrw-mt|)
-                          * Been insuring that mm and mc works with various
-                            combinations of local and remote directories
-                          * (Stefan Bittner) http://.../ should always have
-                            filetype "html" -- fixed.
-                          * (Stefan Bittner) a "?" in a http://.../ request
-                            wasn't being handled correctly.  Fixed by
-                            removing ? from default |g:netrw_tmpfile_escape|.
-                          * (Nico Weber) % codes in http://.../ requests
-                            weren't being handled correctly.  Fixed by
-                            including % in default |g:netrw_fname_escape|.
-                          * (Stefan Bittner) attempts to update Buffers.Refresh
-                            were failing because locale use changed the menu
-                            names.  I implemented a workaround.
-       v122: Feb 12, 2008 * bugfix - first sorting sequence match now has
-                            priority
-             Feb 14, 2008 * bugfix - sorting sequence was effectively ignoring
-                            sequencing priority of anything following '*'
-                          * toggling a marked file was showing incorrect list
-                            (list was correct, but displayed matches weren't)
-                          * |g:netrw_special_syntax| implemented
-       v121: Feb 11, 2008 * Bram M reported that :e file ... :e . would not
-                            retain the alternate file.  Fixed -- I hope!
-                          * bugfix -- apparently v120 broke an explicit
-                            :Explore dirname
-       v120: Jan 21, 2008 * |netrw-mt| changed to allow for target selection
-                            based on whether or not word under cursor is a
-                            directory or file, or if cursor is in banner
-                            area.
-                          * |netrw-mh| included (hiding by marked-file suffix)
-                          * functions moved about a bit (improved
-                            categorization)
-                          * executable files now displayed with trailing (*)
-                          * symbolically linked files now displayed with
-                            trailing (@)
-                          * Somewhen, s:NetrwMarkFileMove() got damaged.  It
-                          * is now restored (missing an endif, for example).
-                          * |netrw-mu| implemented (unmarking marked files)
-                          * many bugs have been removed from the marked file
-                            system (tnx to Mark S. for feedback)
-                          * |netrw-ms| implemented (sourcing marked files)
-                          * fixed use of P with tree listing style
-                          * multiple tree listing now supported
-                          * ./ suppressed
-                          * changed q -> qb (query bookmarks)
-                          * implemented |netrw-qf|
-                          * Explore now has four special list-generation
-                            modes: */filepat **/filepat
-                                  *//pattern **//pattern
-                          * gh (|netrw-gh|) is a shortcut for toggling the
-                            hiding of files and directories beginning with a
-                            dot
-       v119: Jan 10, 2008 * When g:netrw_keepdir is false,
-                            NetrwOptionsRestore() had a problem
-                            (Bill McCarthy)
-             Jan 11, 2008 * Netrw now shows symbolic links with a trailing
-                            "@" and special highlighting.
-             Jan 15, 2008 * Changed g:netrw_noretmap -> |g:netrw_retmap|.
-                            Changed: disabled by default at Bram's
-                            preference.
-       v118: Jan 02, 2008 * Fixed a problem with Windows;
-                            :Explore c:/path/ would not work,
-                            but :Explore c:/path would.
-                          * Fixed a bug in s:NetrwOptionRestore() - lcd's
-                            argument wasn't being properly escaped so it
-                            wouldn't handle spaces in directory names.
-                            (Gary Johnson)
-       v117: Jan 02, 2008 * Fixed a problem with P; had to include
-                            a b:netrw_curdir bypass (Bram Moolenaar)
-       v116: Nov 27, 2007 * netrw#LocalBrowseCheck() has &ft=="netrw"
-                            check to prevent doing a directory listing
-                            (was getting unexpected directory refreshes
-                            in the middle of some function calls)
-                          * NetrwOptionRestore moved after e! filename
-                            in order to retain user options for editing
-                            in s:NetrwBrowseChgDir()
-             Dec 12, 2007 * Bug fix -- netrw does a better job of retaining
-                            user options when editing files under the aegis
-                            of the browser
-       v115: Oct 04, 2007 * Erik Remmelzwaal pointed out that the use of
-                            shellslash in s:GetTempfile() was incorrect
-             Oct 11, 2007 * Tracked down and eliminated a bug with editing
-                            remote *.tar.gz and *.tar.bz2 files
-             Oct 11, 2007 * g:netrw_localmovecmd wasn't being initialized
-                            properly, and g:netrw_localcopycmd was being
-                            overwritten.
-             Oct 12, 2007 * Placed all :Rexplore and <2-leftmouse> setup
-                            in a new support function (s:SetRexDir()).
-             Oct 15, 2007 * new: g:netrw_browse_split == 4; means <cr>
-                            based selection will use previous window
-             Oct 20, 2007 * also checks on |'shellxquote'| to set g:netrw_shq
-             Oct 24, 2007 * Explore handles path/**/filename
-             Oct 27, 2007 * sourcing remote files often didn't work with ftp,
-                            turns out that b:netrw_method was undefined, so
-                            s:SaveBufVars and s:RestoreBufVars() fixed it.
-       v114: Sep 28, 2007 * mT, the map that invokes tags, has been improved
-                            to support use of remote tags files.
-             Oct 02, 2007 * changed Netrw menu to use more submenus
-       v113: Sep 07, 2007 * worked out why the cursor position wasn't being
-                            saved and restored as intended after doing such
-                            things as deleting and renaming files.
-             Sep 11, 2007 * Fixed bug which effectively disabled <c-l> and
-                            <c-h> maps
-             Sep 18, 2007 * there used to be one NetrwOptionRestore() call at
-                            the end of the s:NetrwBrowseChgDir() function;
-                            they're now at the end of every if..elseif..else
-                            block.  The edit-a-file one is not quite at the end
-                            of its block; instead, it's just before the edit.
-                            Restores user options, then this new placement
-                            allows ftplugins, autocmds, etc to change settings
-                            (ex. ftplugin/cpp.vim sets cindent).
-             Sep 19, 2007 * changed all strlen() calls to use s:Strlen(), a
-                            function which handles utf-8 wide characters
-                            correctly.
-             Sep 20, 2007 * (Nico Weber) the "x" command has been extended
-                            to Mac's OS/X (macunix); it now uses open to
-                            handle |netrw-x| browsing with special files.
-             Sep 22, 2007 * Added g:netrw_noretmap to netrw at Tony M's
-                            request.
-                          * Included path to NetrwRemoteRmFile()
-       v112: Aug 18, 2007 * added mx (|netrw-mx|) for executing arbitrary
-                            commands on marked files
-             Aug 22, 2007 * more option save/restore work for
-                            s:NetrwBrowseChgDir(); s:NetrwOptionSave()
-                            and s:NetrwOptionRestore() now take a parameter
-                            specifying the type of variables to be used for
-                            saving and restoring (either "w:" or "s:")
-             Sep 04, 2007 * added the :NetrwClean[!] command
-       v111: Jul 25, 2007 * using Windows but not using Cygwin, netrw does a
-                            "file bufname" where the bufname uses /s
-                            instead of \s; Vim "fixes" it by changing the
-                            bufname to use \s anyway.  This meant that
-                            NetrwGetBuffer() didn't find the appropriately
-                            named buffer, and so would generate a new
-                            buffer listing; hence the cursor would appear
-                            to have been moved when doing a preview.
-                          * added <2-leftmouse> map to return to netrw's
-                            browser display
-             Aug 16, 2007 * added the mark-file system, including
-                            maps for mf mp mt mz and mu.  Modifications
-                            made to maps for a D O and R to support
-                            marked files.
-       v110: May 10, 2007 * added [ and ] maps to NetrwTreeListing
-             May 25, 2007 * |g:netrw_preview| included
-             May 29, 2007 * modified netrw#NetBrowseX to consistently use
-                            g:netrw_shq instead of hardcoded quotes,
-                            and modified the snippet that sets up redir
-                            so Windows machines use "nul" instead of
-                            "/dev/null".
-             Jun 01, 2007 * fixed bug -- NetGetBuffer() wasn't always
-                            recognizing a buffer name match when it should,
-                            thus resulting in [Scratch] buffers.
-             Jun 04, 2007 * Gary Johnson found a bugfix for the "c" mapping
-                            when the directory is to be made current but
-                            the name contains spaces.
-       v109: Mar 26, 2007 * if a directory name includes a "$" character,
-                            Explore() will use expand() in an attempt to
-                            decipher the name.
-             May 07, 2007 * g:netrw_use_errorwindow now allows one to
-                            have error messages go to a reliable window
-                            or to use a less reliable but recallable
-                            echoerr method
-             May 07, 2007 * g:netrw_scpport and g:netrw_sshport support
-                            use of -P and -p, respectively, to set port
-                            for scp/ssh.
-       v108: Jan 03, 2007 * included preview map (|netrw-p|), supporting
-                            remote browsing
-                          * netrw can now source remote files
-             Jan 26, 2007 * Colton Jamieson noted that remote directory
-                            browsing did not support alternate port
-                            selection.  This feature has now been extended
-                            to apply to all remote browsing commands via ssh.
-                            (list, remove/delete, rename)
-             Jan 31, 2007 * Luis Florit reported that @* was an invalid
-                            register.  The @* register is now only saved and
-                            restored if |'guioptions'| contains "a".
-             Feb 02, 2007 * Fixed a bug that cropped up when writing files
-                            via scp using cygwin
-             Feb 08, 2007 * tree listing mode managed to stop working again;
-                            fixed again!
-             Feb 15, 2007 * Guido Van Hoecke reported that netrw didn't
-                            handle browsing well with M$ ftp servers.  He even
-                            set up a temporary account for me to test with
-                            (thanks!).  Netrw now can browse M$ ftp servers.
-       v107: Oct 12, 2006 * bypassed the autowrite option
-             Oct 24, 2006 * handles automatic decompression of *.gz and *.bz2
-                            files
-             Nov 03, 2006 * Explore will highlight matching files when
-                            **/pattern is used (and if the |'hls'| option
-                            is set)
-             Nov 09, 2006 * a debugging line, when enabled, was inadvertently
-                            bringing up help instead of simply reporting on
-                            list contents
-             Nov 21, 2006 * tree listing improved (cursor remains put)
-             Nov 27, 2006 * fixed b:netrw_curdir bug when repeated "i"s were
-                            pressed.
-             Dec 15, 2006 * considerable qty of changes, mostly to share more
-                            code between local and remote browsing.  Includes
-                            support for tree-style listing for both remote
-                            and local browsing.
-             Dec 15, 2006 * Included Peter Bengtsson's modifications to
-                            support the Amiga.
-       v106: Sep 21, 2006 * removed old v:version<700 code as netrw now
-                            requires vim 7.0
-                          * worked around a bug where register * was
-                            overwritten during local browsing
-       v104: Sep 05, 2006 * as suggested by Rodolfo Borges, :Explore and
-                            variants will position the cursor on the file
-                            just having been edited
-                          * changed default |g:netrw_sort_sequence| order
-                          * changed b, Nb to simply mb  (see |netrw-mb|)
-                          * changed B, NB to simply gb  (see |netrw-gb|)
-                          * tree listing style (see |g:netrw_liststyle|)
-                          * attempts to retain the alternate file
-       v103: Jul 26, 2006 * used Yakov Lerner's tip#1289 to improve netrw
-                            error message display
-                          * wide listings didn't handle files with backslashes
-                            in their names properly.  A symptom was an
-                            inability to open files.
-             Aug 09, 2006 * included "t" mapping for opening tabbed windows,
-                           both for remote and local browsing
-                          * changed netrw_longlist to netrw_liststyle
-             Aug 15, 2006 * fixed one of the NB maps
-             Aug 22, 2006 * changed *Explore commands to use -nargs=* instead
-                            of -nargs=?.  Allows both -complete=dir _and_ the
-                            starstar arguments to work (-nargs=? seems to
-                            require one or the other).
-             Aug 23, 2006 * copied all w:.. variables across splits to
-                            new windows
-             Aug 25, 2006 * when g:netrw_browsex_viewer was '-'
-                            (see |g:netrw_browsex_viewer|) it wasn't causing
-                            netrwFileHandlers#Invoke() to be called as it
-                            was expected to.  (tnx Steve Dugaro)
-             Aug 29, 2006 * changed NetBrowseX() to use "setlocal ... noswf"
-                            instead of "set ... noswf"  (tnx Benji Fisher)
-             Aug 31, 2006 * tabs and fastbrowse<=1 didn't work together.
-       v102: Jun 15, 2006 * chgd netrwPlugin to call netrw#LocalBrowseCheck()
-                          * bugfix: g:netrw_keepdir==0 had stopped working
-             Jul 06, 2006 * bugfix: NetOptionSave/Restore now saves/restores
-                            the unnamed register (|registers|)
-             Jul 07, 2006 * |g:netrw_menu| support included
-             Jul 13, 2006 * :Texplore command implemented
-             Jul 17, 2006 * NetSplit and (Local|Net)BrowseChgDir() were both
-                            splitting windows.  This affected o, v, and
-                            g:netrw_browse_split.
-             Jul 20, 2006 * works around wildignore setting (was causing
-                            netrw's local browser not to list wildignore'd
-                            files)
-             Jul 24, 2006 * <leftmouse> acts as a <cr> for selecting a file
-                            <rightmouse> acts as a <del> for deleting a file
-       v100: May 14, 2006 * when using Windows and shell==cmd.exe, the
-                            default for g:netrw_ignorenetrc is now 1
-                          * bugfix: unwanted ^Ms now removed
-                            (affected shell==cmd.exe - Windows)
-                          * added Bookmarks and History to the menu
-                          * an error message about non-existing
-                            w:netrw_longlist was appearing during attempts to
-                            Explore (fixed)
-                          * g:netrw_shq now available to make netrw use
-                            specified style of quotes for commands
-            May 29, 2006  * user NFH_*() functions were inadvertently being
-                            ignored
-                          * fixed a Windows non-cygwin ftp handling problem.
-                          * hiding pattern candidate separators included some
-                            characters it shouldn't have (tnx to Osei Poku)
-            Jun 01, 2006  * for browsing, netrw was supposed to use "dir"
-                            instead of "ls -lF" when using
-                            ftp+non-cygwin+windows.  Fixed.
-                          * an inadvertently left-in-place debugging statement
-                            was preventing use of the "x" key with browsing.
-            Jun 05, 2006  * g:netrw_nogx available to prevent making the gx
-                            map (see |g:netrw_nogx|)
-                          * bugfix, Explore wouldn't change directory
-                            properly (vim ., :Explore subdirname)
-            Jun 06, 2006  * moved history to 2nd line in Netrw menu
-                          * fixed delete for unix-based systems
-            Jun 07, 2006  * x key now works for windows-noncygwin-ftp
-            Jun 08, 2006  * Explore */pat and **//pat now wraps
-       v99: May 09, 2006  * g:netrw_browse_split=3 for opening files in new
-                            tabs implemented.
-            May 12, 2006  * deletes temporary file at end of NetRead()
-                          * visual mode based Obtain implemented
-                          * added -complete=dir to the various Explore
-                            commands
-       v98: May 02, 2006  * the "p" key didn't work properly when the browsing
-                            directory name had spaces in it.
-       v97: May 01, 2006  * exists("&acd") now used to determine if
-                            the 'acd' option exists
-                          * "obtain" now works again under Windows
-       v96:               * bugfix - the |'acd'| option is not always defined
-                            but is now bypassed only when it is
-       v95:               * bugfix - Hiding mode worked correctly (don't show
-                            any file matching any of the g:netrw_hide
-                            patterns), but showing mode was showing only those
-                            files that didn't match any of the g:netrw_hide
-                            patterns.  Instead, it now shows all files that
-                            match any of the g:netrw_hide patterns (the
-                            difference between a logical and and logical or).
-       v94:               * bugfix - a Decho() had a missing quote; only
-                            affects things when debugging was enabled.
-       v93:               * bugfix - removed FocusGained event from causing a
-                            slow-browser refresh for Windows
-       v92:               * :Explore **//pattern implemented
-                             (**/filepattern was already taken)
-       v91:               * :Explore */pattern implemented
-                          * |'acd'| option bypassed
-       v90:               * mark ', as suggested by Yegappan Lakshmanan, used
-                            to help guarantee entry into the jump list when
-                            appropriate.
-                          * <s-down> and <s-up> are no longer defined until a
-                            :Explore **/pattern  is used (if the user already
-                            has a map for them).  They will be defined for new
-                            browser windows from that point forward.
-       v89:               * A <s-down>, <s-up>, :Nexplore, or a :Pexplore
-                            without having first done an :Explore **/pattern
-                            (see |netrw-starstar|) caused
-                            a lot of unhelpful error messages to appear
-       v88:               * moved DrChip.Netrw menu to Netrw.  Now has
-                            priority 80 by default.
-                            g:NetrwTopLvlMenu == "Netrw" and can be changed
-                            by the user to suit.  The priority is given by
-                            g:NetrwMenuPriority.
-                          * Changed filetype for browser displays from
-                            netrwlist to netrw.
-       v87:               * bug fix -- menus were partially disappearing
-       v85:               * bug fix -- missing an endif
-                          * bug fix -- handles spaces in names and directories
-                            when using ftp-based browsing
-       v83:               * disabled stop-acd handling; the change in directory
-                            handling may allow acd to be used again.
-                          * D was refusing to delete remote files/directories
-                            in wide listing mode.
-       v81:               * FocusGained also used to refresh/wipe local browser
-                            directory buffers
-                          * (bugfix) netrw was leaving [Scratch] buffers behind
-                            when the user had the "hidden" option set.  The
-                            'hidden' option is now bypassed.
-       v80:               * ShellCmdPost event used in conjunction with
-                            g:netrw_fastbrowse to refresh/wipe local browser
-                            directory buffers.
-       v79:               * directories are now displayed with nowrap
-                          * (bugfix) if the column width was smaller than the
-                            largest file's name, then netrw would hang when
-                            using wide-listing mode - fixed
-                          * g:netrw_fastbrowse introduced
-       v78:               * progress has been made on allowing spaces inside
-                            directory names for remote work (reading, writing,
-                            browsing).  (scp)
-       v77:               * Mikolaj Machowski fixed a bug in a substitute cmd
-                          * g:netrw_browsex_viewer implemented
-                          * Mikolaj Machowski pointed out that gnome-open is
-                            often executable under KDE systems, although it is
-                            effectively not functional.  NetBrowseX now looks
-                            for "kicker" as a running process to determine if
-                            KDE is actually running.
-                          * Explorer's O functionality was inadvertently left
-                            out.  Netrw now does the same thing, but with the
-                            "P" key.
-                          * added g:netrw_browse_split option
-                          * fixed a bug where the directory contained a "." but
-                            the file didn't (was treating the dirname from "."
-                            onwards as a suffix)
-       v76:               * "directory is missing" error message now restores
-                             echo highlighting
-       v75:               * file://... now conforms to RFC2396 (thanks to
-                            S. Zacchiroli)
-                          * if the binary option is set, then NetWrite() will
-                            only write the whole file (line numbers don't make
-                            sense with this).  Supports writing of tar and zip
-                            files.
-       v74:               * bugfix (vim, then :Explore) now works
-                          * ctrl-L keeps cursor at same screen location (both
-                            local and remote browsing)
-                          * netrw now can read remote zip and tar files
-                          * Obtain now uses WinXP ftp+.netrc successfully
-       v73:               * bugfix -- scp://host/path/file was getting named
-                            incorrectly
-                          * netrw detects use of earlier-than-7.0 version of
-                            vim and issues a pertinent error message.
-                          * netrwSettings.vim is now uses autoloading.  Only
-                            <netrwPlugin.vim> is needed as a pure plugin
-                            (ie. always loaded).
-       v72:               * bugfix -- formerly, one could prevent the loading
-                            of netrw by "let g:loaded_netrw=1"; when
-                            autoloading became supported, this feature was
-                            lost.  It is now restored.
-       v71:               * bugfix -- made some "set nomodifiable"s into
-                            setlocal variants (allows :e somenewfile  to be
-                            modifiable as usual)
-                          * NetrwSettings calls a netrw function, thereby
-                            assuring that netrw has loaded.  However, if netrw
-                            does not load for whatever reason, then
-                            NetrwSettings will now issue a warning message.
-                          * For what reason I don't recall, when wget and fetch
-                            are both not present, and an attempt to read a
-                            http://... url is made, netrw exited.  It now only
-                            returns.
-                          * When ch=1, on the second and subsequent uses of
-                            browsing Netrw would issue a blank line to clear
-                            the echo'd messages.  This caused an annoying
-                            "Hit-Enter" prompt; now a blank line message
-                            is echo'd only if &ch>1.
-       v70:               * when using |netrw-O|, the "Obtaining filename"
-                            message is now shown using |hl-User9|.  If User9
-                            has not been defined, netrw itself will define it.
-       v69:               * Bugfix: win95/98 machines were experiencing a
-                            "E121: Undefined variable: g:netrw_win95ftp"
-                            message
-       v68:               * double-click-leftmouse selects word under mouse
-       v67:               * Passwords which contain blanks will now be
-                            surrounded by double-quotes automatically (Yongwei)
-       v66:               * Netrw now seems to work with a few more Windows
-                            situations
-                          * O now obtains a file: remote browsing
-                            file -> local copy, locally browsing
-                            file -> current directory (see :pwd)
-                          * i now cycles between thin, long, and wide listing
-                            styles
-                          * NB and Nb are maps that are always available;
-                            corresponding B and b maps are only available when
-                            not using wide listing in order to allow them to
-                            be used for motions
-       v65:               * Browser functions now use NetOptionSave/Restore; in
-                            particular, netrw now works around the report
-                            setting
-       v64:               * Bugfix - browsing a "/" directory (Unix) yielded
-                            buffers named "[Scratch]" instead of "/"
-                          * Bugfix - remote browsing with ftp was omitting
-                            the ./ and ../
-       v63:               * netrw now takes advantage of autoload (needs 7.0)
-                          * Bugfix - using r (to reverse sort) working again
-       v62:               * Bugfix - spaces allowed again in directory names
-                            with g:netrw_keepdir=0.  In fact, I've tested netrw
-                            with most ANSI punctuation marks for directory
-                            names.
-                          * Bugfix - NetrwSettings gave errors when
-                            g:netrw_silent had not be set.
-       v61:               * Document upgrade -- netrw variable-based settings
-                            all should have tags.  Supports NetrwSettings cmd.
-                          * Several important variables are window-oriented.
-                            Netrw has to transfer these across a window split.
-                            See s:BufWinVars() and s:UseBufWinVars().
-       v60:               * When using the i map to switch between long and
-                            short listings, netrw will now keep cursor on same
-                            line
-                          * "Match # of #" now uses status line
-                          * :Explore **/*.c  will now work from a
-                            non-netrw-browser window
-                          * :Explore **/patterns can now be run in separate
-                            browser windows
-                          * active banner (hit <cr> will cause various things
-                            to happen)
-       v59:               * bugfix -- another keepalt work-around installed
-                            (for vim6.3)
-                          * "Match # of #" for Explore **/pattern matches
-       v58:               * Explore and relatives can now handle
-                            **/somefilepattern (v7)
-                          * Nexplore and Pexplore introduced (v7).  shift-down
-                            and shift-up cursor keys will invoke Nexplore and
-                            Pexplore, respectively.
-                          * bug fixed with o and v
-                          * autochdir only worked around for vim when it has
-                            been compiled with either
-                            |+netbeans_intg| or |+sun_workshop|
-                          * Under Windows, all directories and files were
-                            being preceded with a "/" when local browsing.
-                            Fixed.
-                          * When: syntax highlighting is off, laststatus=2, and
-                            remote browsing is used, sometimes the laststatus
-                            highlighting bleeds into the entire display.  Work
-                            around - do an extra redraw in that case.
-                          * Bugfix: when g:netrw_keepdir=0, due to re-use of
-                            buffers, netrw didn't change the directory when it
-                            should've
-                          * Bugfix: D and R commands work again
-       v57:               * Explore and relatives can now handle RO files
-                          * reverse sort restored with vim7's sort command
-                          * g:netrw_keepdir now being used to keep the current
-                            directory unchanged as intended (sense change)
-                          * vim 6.3 still supported
-       v56:               * LocalBrowse now saves autochdir setting, unsets it,
-                            and restores it before returning.
-                          * using vim's rename() instead of system +
-                            local_rename variable
-                          * avoids changing directory when g:netrw_keepdir is
-                            false
-       v55:               * -bar used with :Explore :Sexplore etc to allow
-                            multiple commands to be separated by |s
-                          * browser listings now use the "nowrap" option
-                          * browser: some unuseful error messages now
-                            suppressed
-       v54:               * For backwards compatibility, Explore and Sexplore
-                            have been implemented.  In addition, Hexplore and
-                            Vexplore commands are available, too.
-                          * <amatch> used instead of <afile> in the
-                            transparency support (BufReadCmd, FileReadCmd,
-                            FileWriteCmd)
-                          * ***netrw*** prepended to various error messages
-                            netrw may emit
-                          * g:netrw_port used instead of b:netrw_port for scp
-                          * any leading [:#] is removed from port numbers
-       v53:               * backslashes as well as slashes placed in various
-                            patterns (ex. g:netrw_sort_sequence) to better
-                            support Windows
-       v52:               * nonumber'ing now set for browsing buffers
-                          * when the hiding list hid all files, error messages
-                            ensued. Fixed
-                          * when browsing, swf is set, but directory is not
-                            set, when netrw was attempting to restore options,
-                            vim wanted to save a swapfile to a local directory
-                            using an url-style path.  Fixed
-       v51:               * cygwin detection now automated
-                            (using windows and &shell is bash)
-                          * customizable browser "file" rejection patterns
-                          * directory history
-                          * :[range]w url  now supported (ie. netrw uses a
-                            FileWriteCmd event)
-                          * error messages have a "Press <cr> to continue" to
-                            allow them to be seen
-                          * directory browser displays no longer bother the
-                            swapfile
-                          * u/U commands to go up and down the history stack
-                          * history stack may be saved with viminfo with it's
-                            "!" option
-                          * bugfixes associated with unwanted [No Files]
-                            entries
-       v50:               * directories now displayed using buftype=nofile;
-                            should keep the directory names as-is
-                          * attempts to remove empty "[No File]" buffers
-                            leftover from :file ..name.. commands
-                          * bugfix: a "caps-lock" editing difficulty left in
-                            v49 was fixed
-                          * syntax highlighting for "Showing:" the hiding list
-                            included
-                          * bookmarks can now be retained if "!" is in the
-                            viminfo option
-       v49:               * will use ftp for http://.../ browsing
-       v48:               * One may use ftp to do remote host file browsing
-                          * (windows and !cygwin) remote browsing with ftp can
-                            now use the "dir" command internally to provide
-                            listings
-                          * g:netrw_keepdir now allows one to keep the initial
-                            current directory as the current directory
-                            (normally the local file browser makes the
-                            currently viewed directory the current directory)
-                          * g:netrw_alto and g:netrw_altv now support
-                            alternate placement of windows started with o or v
-                          * Nread ? and Nwrite ?  now uses echomsg (instead of
-                            echo) so :messages can repeat showing the help
-                          * bugfix: avoids problems with partial matches of
-                            directory names to prior buffers with longer names
-                          * one can suppress error messages with g:netrw_quiet
-                            ctrl-h used
-                          * instead of <Leader>h for editing hiding list one
-                            may edit the sorting sequence with the S map, which
-                            now allows confirmation of deletion with
-                            [y(es) n(o) a(ll) q(uit)]
-                          * the "x" map now handles special file viewing with:
-                            (windows) rundll32 url.dll (gnome) gnome-open (kde)
-                            kfmclient If none of these are on the executable
-                            path, then netrwFileHandlers.vim is used.
-                          * directory bookmarking during both local and remote
-                            browsing implemented
-                          * one may view all, use the hiding list to suppress,
-                            or use the hiding list to show-only remote and
-                            local file/directory listings
-                          * improved unusual file and directory name handling
-                            preview window support
-       v47:               * now handles local browsing.
-       v46:               * now handles remote browsing
-                          * g:netrw_silent (if 1) will cause all transfers to
-                            be silent
-       v45:               * made the [user@]hostname:path form a bit more
-                            restrictive to better handle errors in using
-                            protocols (e.g. scp:usr@host:file was being
-                            recognized as an rcp request)
-       v44:               * changed from "rsync -a" to just "rsync"
-                          * somehow an editing error messed up the test to
-                            recognize use of the fetch method for NetRead.
-                          * more debugging statements included
-       v43:               * moved "Explanation" comments to <pi_netrw.txt> help
-                            file as "Network Reference" (|netrw-ref|)
-                          * <netrw.vim> now uses Dfunc() Decho() and Dret() for
-                            debugging
-                          * removed superfluous NetRestorePosn() calls
-       v42:               * now does BufReadPre and BufReadPost events on
-                            file:///* and file://localhost/*
-       v41:               * installed file:///* and file://localhost/* handling
-       v40:               * prevents redraw when a protocol error occurs so
-                            that the user may see it
-       v39:               * sftp support
-       v38:               * Now uses NetRestorePosn() calls with Nread/Nwrite
-                            commands
-                          * Temporary files now removed via bwipe! instead of
-                            bwipe (thanks to Dave Roberts)
-       v37:               * Claar's modifications which test if ftp is
-                            successful, otherwise give an error message
-                          * After a read, the alternate file was pointing to
-                            the temp file.  The temp file buffer is now wiped
-                            out.
-                          * removed silent from transfer methods so user can
-                            see what's happening
+       v149:   Apr 18, 2013    * in wide listing format, now have maps for
+                                 w and b to move to next/previous file
+               Apr 26, 2013    * one may now copy files in the same
+                                 directory; netrw will issue requests for
+                                 what names the files should be copied under
+               Apr 29, 2013    * Trying Benzinger's problem again.  Seems
+                                 that commenting out the BufEnter and
+                                 installing VimEnter (only) works.  Weird
+                                 problem!  (tree listing, vim -O Dir1 Dir2)
+               May 01, 2013    * :Explore ftp://... wasn't working.  Fixed.
+               May 02, 2013    * introduced |g:netrw_bannerbackslash| as
+                                 requested by Paul Domaskis.
+               May 18, 2013    * More fixes for windows (not cygwin)
+       v148:   Apr 16, 2013    * changed Netrw's Style menu to allow direct
+                                 choice of listing style, hiding style, and
+                                 sorting style
+       v147:   Nov 24, 2012    * (James McCoy) Even with g:netrw_dirhistmax
+                                 at zero, the .vim/ directory would be
+                                 created to support history/bookmarks.  I've
+                                 gone over netrw to suppress history and
+                                 bookmarking when g:netrw_dirhistmax is zero.
+                                 For instance, the menus will display
+                                 (disabled) when attempts to use
+                                 bookmarks/history are made.
+               Nov 29, 2012    * (Kim Jang-hwan) reported that with
+                                 g:Align_xstrlen set to 3 that the cursor was
+                                 moved (linewise) after invocation.  This
+                                 problem also afflicted netrw.
+                                 (see |g:netrw_xstrlen|) Fixed.
+               Jan 21, 2013    * (mattn) provided a patch to insert some
+                                 endifs needed with the code implementing
+                                 |netrw-O|.
+               Jan 24, 2013    * (John Szakmeister) found that remote file
+                                 editing resulted in filetype options being
+                                 overwritten by NetrwOptionRestore().  I
+                                 moved filetype detect from NetrwGetFile()
+                                 to NetrwOptionRestore.
+               Feb 17, 2013    * (Yukhiro Nakadaira) provided a patch
+                                 correcting some syntax errors.
+               Feb 28, 2013    * (Ingo Karkat) provided a patch preventing
+                                 receipt of an |E95| when revisiting a
+                                 file://... style url.
+               Mar 18, 2013    * (Gary Johnson) pointed out that changing
+                                 cedit to <Esc> caused problems with visincr;
+                                 the cedit setting is now bypassed in netrw too.
+               Apr 02, 2013    * (Paul Domaskis) reported an undefined
+                                 variable error (s:didstarstar) was
+                                 occurring.  It is now defined at
+                                 initialization.
+                               * included additional sanity checking for the
+                                 marked file functions.
+                               * included |netrw-qF| and special "j" option
+                                 handling for |netrw-mg|
+               Apr 12, 2013    * |netrw-u| and |netrw-U| now handle counts
+                               * the former mapping for "T" has been removed;
+                                 in its place are new maps, |netrw-Tb| and |netrw-Th|.
+                               * the menu now supports a "Targets" entry for
+                                 easier target selection. (see |netrw-mt|)
+                               * (Paul Domaskis) reported some problems with
+                                 moving/copying files under Windows' gvim
+                                 (ie. not cygwin).  Fixed.
+                               * (Paul Mueller) provided a patch to get
+                                 start and rundll working via |netrw-gx|
+                                 by bypassing the user's |'shellslash'| option.
+       v146:   Oct 20, 2012    * (David Kotchan) reported that under Windows,
+                                 directories named with unusual characters
+                                 such as "#" or "$" were not being listed
+                                 properly.
+                               * (Kenny Lee) reported that the buffer list
+                                 was being populated by netrw buffers.
+                                 Netrw will now |:bwipe| netrw buffers
+                                 upon editing a file if g:netrw_fastbrowse
+                                 is zero and its not in tree listing style.
+                               * fixed a bug with s:NetrwInit() that
+                                 prevented initialization with |Lists| and
+                                 |Dictionaries|.
+                               * |netrw-mu| now unmarks marked-file lists
+       v145:   Apr 05, 2012    * moved some command from a g:netrw_local_...
+                                 format to g:netwr_local... format
+                               * included some NOTE level messages about
+                                 commands that aren't executable
+                               * |g:netrw_errorlvl| (default: NOTE=0)
+                                 option introduced
+               May 18, 2012    * (Ilya Dogolazky) a scenario where a
+                                 |g:netrw_fastbrowse| of zero did not
+                                 have a local directory refreshed fixed.
+               Jul 10, 2012    * (Donatas) |netrw-gb| wasn't working due
+                                 to an incorrectly used variable.
+               Aug 09, 2012    * (Bart Baker) netrw was doubling
+                                 of entries after a split.
+                               * (code by Takahiro Yoshihara) implemented
+                                 |g:netrw_dynamic_maxfilenamelen|
+               Aug 31, 2012    * (Andrew Wong) netrw refresh overwriting
+                                 the yank buffer.
+       v144: Mar 12, 2012      * when |CTRL-W_s| or |CTRL-W_v| are used,
+                                 or their wincmd equivalents, on a netrw
+                                 buffer, the netrw's w: variables were
+                                 not copied over.  Fixed.
+               Mar 13, 2012    * nbcd_curpos_{bufnr('%')} was commented
+                                 out, and was mistakenly used during
+                                 RestorePosn.  Unfortunately, I'm not
+                                 sure why it was commented out, so this
+                                 "fix" may re-introduce an earlier problem.
+               Mar 21, 2012    * included s:rexposn internally to make
+                                 :Rex return the cursor to the same pos'n
+                                 upon restoration of netrw buffer
+               Mar 27, 2012    * (sjbesse) s:NetrwGetFile() needs to remove
+                                 "/" from the netrw buffer's usual |'isk'|
+                                 in order to allow "filetype detect" to work
+                                 properly for scripts.
+       v143: Jun 01, 2011      * |g:netrw_winsize| will accept a negative
+                                 number; the absolute value of it will then
+                                 be used to specify lines/columns instead of
+                                 a percentage.
+               Jul 05, 2011    * the "d" map now supports mkdir via ftp
+                                 See |netrw-d| and |g:netrw_remote_mkdir|
+               Jul 11, 2011    * Changed Explore!, Sexplore!, and Vexplore
+                                 to use a percentage of |winwidth()| instead
+                                 of a percentage of |winheight()|.
+               Jul 11, 2011    * included support for https://... I'm just
+                                 beginning to test this, however.
+               Aug 01, 2011    * changed RestoreOptions to also restore
+                                 cursor position in netrw buffers.
+               Aug 12, 2011    * added a note about "%" to the balloon
+               Aug 30, 2011    * if |g:netrw_nobeval| exists, then balloon
+                                 evaluation is suppressed.
+               Aug 31, 2011    * (Benjamin R Haskell) provided a patch that
+                                 implements non-standard port handling for
+                                 files opened via the remote browser.
+               Aug 31, 2011    * Fixed a **//pattern  Explorer bug
+               Sep 15, 2011    * (reported by Francesco Campana) netrw
+                                 now permits the "@" to be part of the
+                                 user id (if there's an @ that appears
+                                 to the right).
+               Nov 21, 2011    * New option: |g:netrw_ftp_options|
+               Dec 07, 2011    * (James Sinclair) provided a fix handling
+                                 attempts to use a uid and password when
+                                 they weren't defined.  This affected
+                                 NetWrite (NetRead already had that fix).
 
 
 ==============================================================================
index dfa2e71..4971862 100644 (file)
@@ -1,4 +1,4 @@
-*pi_paren.txt*  For Vim version 7.3.  Last change: 2008 Jun 16
+*pi_paren.txt*  For Vim version 7.4.  Last change: 2013 May 08
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -46,7 +46,10 @@ are:
   closed folds.
 - 'synmaxcol' times 2 bytes before or after the cursor to avoid a delay
   in a long line with syntax highlighting.
-
+- A timeout of 300 msec (60 msec in Insert mode). This can be changed with the
+  g:matchparen_timeout and g:matchparen_insert_timeout variables and their
+  buffer-local equivalents b:matchparen_timeout and
+  b:matchparen_insert_timeout.
 
 If you would like the |%| command to work better, the matchit plugin can be
 used, see |matchit-install|.  This plugin also helps to skip matches in
index db40478..f768418 100644 (file)
@@ -1,4 +1,4 @@
-*pi_spec.txt*   For Vim version 7.3.  Last change: 2006 Apr 24
+*pi_spec.txt*   For Vim version 7.4.  Last change: 2006 Apr 24
 
 by Gustavo Niemeyer ~
 
index cc6a5d7..b2fab29 100644 (file)
@@ -1,14 +1,21 @@
-*pi_tar.txt*   For Vim version 7.3.  Last change: 2010 Aug 09
+*pi_tar.txt*   For Vim version 7.4.  Last change: 2013 Apr 17
 
                       +====================+
                       | Tar File Interface |
                       +====================+
 
-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
+Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
          (remove NOSPAM from Campbell's email first)
-Copyright 2005-2010: The GPL (gnu public license) applies to   *tar-copyright*
-          tar.vim, tarPlugin.vim, and pi_tar.txt.
-          No warranty, express or implied.  Use At-Your-Own-Risk.
+Copyright 2005-2012:                                   *tar-copyright*
+       The VIM LICENSE (see |copyright|) applies to the files in this
+       package, including tarPlugin.vim, tar.vim, and pi_tar.txt.  Like
+       anything else that's except use "tar.vim" instead of "VIM".  Like
+       anything else that's free, tar.vim and its associated files are
+       provided *as is* and comes with no warranty of any kind, either
+       expressed or implied.  No guarantees of merchantability.  No
+       guarantees of suitability for any purpose.  By using this plugin, you
+       agree that in no event will the copyright holder be liable for any
+       damages resulting from the use of this software. Use at your own risk!
 
 ==============================================================================
 1. Contents                                    *tar* *tar-contents*
@@ -43,6 +50,21 @@ Copyright 2005-2010: The GPL (gnu public license) applies to *tar-copyright*
        *g:tar_extractcmd* , which by default is >
                "tar -xf"
 <
+                                               *:TarDiff*
+   DIFFERENCING SUPPORT~
+
+   :TarDiff [filename]
+
+       This command will attempt to show the differences between the tarball
+       version of a file and the associated file on the system.  In order to
+       find that file on the system, the script uses the path associated with
+       the file mentioned in the tarball.  If the current directory is not
+       correct for that path, :TarDiff will fail to find the associated file.
+
+       If the [filename] is given, that that filename (and path) will be used
+       to specify the associated file.
+
+
    PREVENTING LOADING~
 
    If for some reason you do not wish to use vim to examine tar'd files,
@@ -83,8 +105,13 @@ Copyright 2005-2010: The GPL (gnu public license) applies to        *tar-copyright*
 4. History                                             *tar-history*
 
 
+   v28 Jun 23, 2011 * a few more decompression options (tbz tb2 txz)
+   v27 May 31, 2011 * moved cygwin detection before g:tar_copycmd handling
+                   * inserted additional |:keepj| modifiers
+                   * changed silent  to  sil!  (|:silent|)
    v26 Aug 09, 2010 * uses buffer-local instead of window variables to hold
                      tarfile name
+                   * inserted keepj before 0d to protect jump list
    v25 Jun 19, 2010 * (Jan Steffens) added support for xz compression
    v24 Apr 07, 2009 * :Untarvim command implemented
        Sep 28, 2009 * Added lzma support
index 4debe24..720d947 100644 (file)
@@ -1,4 +1,4 @@
-*pi_vimball.txt*       For Vim version 7.3.  Last change: 2010 Apr 12
+*pi_vimball.txt*       For Vim version 7.4.  Last change: 2012 Jan 17
 
                               ----------------
                               Vimball Archiver
@@ -6,16 +6,22 @@
 
 Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
          (remove NOSPAM from Campbell's email first)
-Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.   *Vimball-copyright*
-          The VIM LICENSE applies to Vimball.vim, and Vimball.txt
-          (see |copyright|) except use "Vimball" instead of "Vim".
-          No warranty, express or implied.
-          Use At-Your-Own-Risk!
+Copyright: (c) 2004-2012 by Charles E. Campbell, Jr.   *Vimball-copyright*
+       The VIM LICENSE (see |copyright|) applies to the files in this
+       package, including vimballPlugin.vim, vimball.vim, and pi_vimball.txt.
+       except use "vimball" instead of "VIM".  Like anything else that's free,
+       vimball.vim and its associated files are provided *as is* and comes with
+       no warranty of any kind, either expressed or implied.  No guarantees
+       of merchantability.  No guarantees of suitability for any purpose.  By
+       using this plugin, you agree that in no event will the copyright
+       holder be liable for any damages resulting from the use of this
+       software. Use at your own risk!
 
 ==============================================================================
 1. Contents                            *vba* *vimball* *vimball-contents*
 
        1. Contents......................................: |vimball-contents|
+       2. Vimball Introduction..........................: |vimball-intro|
        3. Vimball Manual................................: |vimball-manual|
           MkVimball.....................................: |:MkVimball|
           UseVimball....................................: |:UseVimball|
@@ -176,6 +182,24 @@ WINDOWS                                                    *vimball-windows*
 ==============================================================================
 4. Vimball History                                     *vimball-history* {{{1
 
+       34 : Sep 22, 2011 * "UseVimball path" now supports a non-full path by
+                           prepending the current directory to it.
+       33 : Apr 02, 2011 * Gave priority to *.vmb over *.vba
+                         * Changed silent! to sil! (shorter)
+                         * Safed |'swf'| setting (during vimball extraction,
+                           its now turned off)
+       32 : May 19, 2010 * (Christian Brabrandt) :so someplugin.vba and
+                           :so someplugin.vba.gz (and the other supported
+                           compression types) now works
+                         * (Jan Steffens) added support for xz compression
+                         * fenc extraction was erroneously picking up the
+                           end of the line number when no file encoding
+                           was present.  Fixed.
+                         * By request, beginning the switchover from the vba
+                           extension to vmb.  Currently both are supported;
+                           MkVimball, however, now will create *.vmb files.
+            Feb 11, 2011 * motoyakurotsu reported an error with vimball's
+                           handling of zero-length files
        30 : Dec 08, 2008 * fnameescape() inserted to protect error
                            messaging using corrupted filenames from
                            causing problems
@@ -199,6 +223,8 @@ WINDOWS                                                     *vimball-windows*
                            causing problems as reported by Zhang Shuhan
        24 : Nov 15, 2007 * g:vimball_path_escape used by s:Path() to
                            prevent certain characters from causing trouble
+                           (defunct: |fnameescape()| and |shellescape()|
+                           now used instead)
        22 : Mar 21, 2007 * uses setlocal instead of set during BufEnter
        21 : Nov 27, 2006 * (tnx to Bill McCarthy) vimball had a header
                            handling problem and it now changes \s to /s
index 7b72477..0a081f2 100644 (file)
@@ -1,30 +1,31 @@
-*pi_zip.txt*   For Vim version 7.3.  Last change: 2010 Apr 12
+*pi_zip.txt*   For Vim version 7.4.  Last change: 2013 Apr 17
 
                                +====================+
                                | Zip File Interface |
                                +====================+
 
-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
+Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
          (remove NOSPAM from Campbell's email first)
-Copyright: Copyright (C) 2005-2009 Charles E Campbell, Jr *zip-copyright*
-           Permission is hereby granted to use and distribute this code,
-          with or without modifications, provided that this copyright
-          notice is copied with it. Like anything else that's free,
-          zip.vim, zipPlugin.vim, and pi_zip.txt are provided *as is*
-          and it comes with no warranty of any kind, either expressed or
-          implied. By using this plugin, you agree that in no event will
-          the copyright holder be liable for any damages resulting from
-          the use of this software.
+Copyright: Copyright (C) 2005-2012 Charles E Campbell   *zip-copyright*
+       The VIM LICENSE (see |copyright|) applies to the files in this
+       package, including zipPlugin.vim, zip.vim, and pi_zip.vim.  except use
+       "zip.vim" instead of "VIM".  Like anything else that's free, zip.vim
+       and its associated files are provided *as is* and comes with no
+       warranty of any kind, either expressed or implied.  No guarantees of
+       merchantability.  No guarantees of suitability for any purpose.  By
+       using this plugin, you agree that in no event will the copyright
+       holder be liable for any damages resulting from the use of this
+       software. Use at your own risk!
 
 ==============================================================================
-1. Contents                                    *zip* *zip-contents*
+1. Contents                                            *zip* *zip-contents*
    1. Contents................................................|zip-contents|
    2. Usage...................................................|zip-usage|
    3. Additional Extensions...................................|zip-extension|
    4. History.................................................|zip-history|
 
 ==============================================================================
-2. Usage                                       *zip-usage* *zip-manual*
+2. Usage                                               *zip-usage* *zip-manual*
 
    When one edits a *.zip file, this plugin will handle displaying a
    contents page.  Select a file to edit by moving the cursor atop
@@ -64,17 +65,16 @@ Copyright: Copyright (C) 2005-2009 Charles E Campbell, Jr *zip-copyright*
 
    If for some reason you do not wish to use vim to examine zipped files,
    you may put the following two variables into your <.vimrc> to prevent
-   the tar plugin from loading: >
+   the zip plugin from loading: >
 
        let g:loaded_zipPlugin= 1
        let g:loaded_zip      = 1
 <
-<
 
 ==============================================================================
 3. Additional Extensions                                       *zip-extension*
 
-   Apparently there are a number of archivers who generate zip files that
+   Apparently there are a number of archivers which generate zip files that
    don't use the .zip extension (.jar, .xpi, etc).  To handle such files,
    place a line in your <.vimrc> file: >
 
@@ -84,7 +84,18 @@ Copyright: Copyright (C) 2005-2009 Charles E Campbell, Jr *zip-copyright*
    should be treated as zip files.
 
 ==============================================================================
-4. History                                     *zip-history* {{{1
+4. History                                                     *zip-history* {{{1
+   v26 Nov 15, 2012 * (Jason Spiro) provided a lot of new extensions that
+                     are synonyms for .zip
+   v25 Jun 27, 2011 * using keepj with unzip -Z
+                     (consistent with the -p variant)
+                   * (Ben Staniford) now uses
+                       has("win32unix") && executable("cygpath")
+                     before converting to cygwin-style paths
+   v24 Jun 21, 2010 * (Cédric Bosdonnat) unzip seems to need its filenames
+                     fnameescape'd as well as shellquote'd
+                   * (Motoya Kurotsu) inserted keepj before 0d to protect
+                     jump list
    v17 May 09, 2008 * arno caught a security bug
    v15 Sep 07, 2007 * &shq now used if not the empty string for g:zip_shq
    v14 May 07, 2007 * using b:zipfile instead of w:zipfile to avoid problem
index 8e12cbb..2ff6b10 100644 (file)
@@ -1,4 +1,4 @@
-*print.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
+*print.txt*     For Vim version 7.4.  Last change: 2010 Jul 20
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index deb475c..d6bf938 100644 (file)
@@ -1,4 +1,4 @@
-*quickfix.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
+*quickfix.txt*  For Vim version 7.4.  Last change: 2013 Aug 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -215,28 +215,29 @@ command with 'l'.
 
                                                        *:cex* *:cexpr* *E777*
 :cex[pr][!] {expr}     Create a quickfix list using the result of {expr} and
-                       jump to the first error.  If {expr} is a String, then
-                       each new-line terminated line in the String is
-                       processed using 'errorformat' and the result is added
-                       to the quickfix list.  If {expr} is a List, then each
-                       String item in the list is processed and added to the
-                       quickfix list.  Non String items in the List are
-                       ignored. See |:cc|
-                       for [!].
+                       jump to the first error.
+                       If {expr} is a String, then each new-line terminated
+                       line in the String is processed using the global value
+                       of 'errorformat' and the result is added to the
+                       quickfix list.
+                       If {expr} is a List, then each String item in the list
+                       is processed and added to the quickfix list.  Non
+                       String items in the List are ignored.
+                       See |:cc| for [!].
                        Examples: >
                                :cexpr system('grep -n xyz *')
                                :cexpr getline(1, '$')
 <
                                                        *:lex* *:lexpr*
-:lex[pr][!] {expr}     Same as ":cexpr", except the location list for the
+:lex[pr][!] {expr}     Same as |:cexpr|, except the location list for the
                        current window is used instead of the quickfix list.
 
                                                        *:cgete* *:cgetexpr*
 :cgete[xpr] {expr}     Create a quickfix list using the result of {expr}.
-                       Just like ":cexpr", but don't jump to the first error.
+                       Just like |:cexpr|, but don't jump to the first error.
 
                                                        *:lgete* *:lgetexpr*
-:lgete[xpr] {expr}     Same as ":cgetexpr", except the location list for the
+:lgete[xpr] {expr}     Same as |:cgetexpr|, except the location list for the
                        current window is used instead of the quickfix list.
 
                                                        *:cad* *:caddexpr*
@@ -546,13 +547,23 @@ descriptors when searching many files.  However, when the |:hide| command
 modifier is used the buffers are kept loaded.  This makes following searches
 in the same files a lot faster.
 
+Note that |:copen| (or |:lopen| for |:lgrep|) may be used to open a buffer
+containing the search results in linked form.  The |:silent| command may be
+used to suppress the default full screen grep output.  The ":grep!" form of
+the |:grep| command doesn't jump to the first match automatically.  These
+commands can be combined to create a NewGrep command: >
+
+        command! -nargs=+ NewGrep execute 'silent grep! <args>' | copen 42
+
 
 5.1 using Vim's internal grep
 
                                        *:vim* *:vimgrep* *E682* *E683*
 :vim[grep][!] /{pattern}/[g][j] {file} ...
                        Search for {pattern} in the files {file} ... and set
-                       the error list to the matches.
+                       the error list to the matches.  Files matching
+                       'wildignore' are ignored; files in 'suffixes' are
+                       searched last.
                        Without the 'g' flag each line is added only once.
                        With 'g' every match is added.
 
@@ -563,6 +574,8 @@ in the same files a lot faster.
                        'ignorecase' applies.  To overrule it put |/\c| in the
                        pattern to ignore case or |/\C| to match case.
                        'smartcase' is not used.
+                       If {pattern} is empty (e.g. // is specified), the last
+                       used search pattern is used. |last-pattern|
 
                        When a number is put before the command this is used
                        as the maximum number of matches to find.  Use
@@ -886,6 +899,8 @@ invalid.
 Special characters in 'errorformat' are comma and backslash.  See
 |efm-entries| for how to deal with them.  Note that a literal "%" is matched
 by "%%", thus it is not escaped with a backslash.
+Keep in mind that in the `:make` and `:grep` output all NUL characters are
+replaced with SOH (0x01).
 
 Note: By default the difference between upper and lowercase is ignored.  If
 you want to match case, add "\C" to the pattern |/\C|.
@@ -904,8 +919,8 @@ Basic items
        %n              error number (finds a number)
        %m              error message (finds a string)
        %r              matches the "rest" of a single-line file message %O/P/Q
-       %p              pointer line (finds a sequence of '-', '.' or ' ' and
-                       uses the length for the column number)
+       %p              pointer line (finds a sequence of '-', '.', ' ' or
+                       tabs and uses the length for the column number)
        %*{conv}        any scanf non-assignable conversion
        %%              the single '%' character
        %s              search text (finds a string)
index 7f793b2..90d3597 100644 (file)
@@ -1,4 +1,4 @@
-*quickref.txt*  For Vim version 7.3.  Last change: 2010 Jul 24
+*quickref.txt*  For Vim version 7.4.  Last change: 2013 Jun 29
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -7,7 +7,7 @@
 
                                                         *quickref* *Contents*
  tag     subject                        tag      subject       ~
-|Q_ct|  list of help files             |Q_re|  Repeating commands
+|Q_ct| list of help files              |Q_re|  Repeating commands
 |Q_lr| motion: Left-right              |Q_km|  Key mapping
 |Q_ud| motion: Up-down                 |Q_ab|  Abbreviations
 |Q_tm| motion: Text object             |Q_op|  Options
@@ -27,7 +27,7 @@
 |Q_co| change: Complex                 |Q_bu|  Buffer list commands
 |Q_vi| Visual mode                     |Q_sy|  Syntax highlighting
 |Q_to| Text objects                    |Q_gu|  GUI commands
-                                       |Q_fo|  Folding
+                                       |Q_fo|  Folding
 
 ------------------------------------------------------------------------------
 N is used to indicate an optional count that can be given before the command.
@@ -170,23 +170,23 @@ N is used to indicate an optional count that can be given before the command.
 ------------------------------------------------------------------------------
 *Q_ma*         Marks and motions
 
-|m|       m{a-zA-Z}    mark current position with mark {a-zA-Z}
-|`a|      `{a-z}       go to mark {a-z} within current file
-|`A|      `{A-Z}       go to mark {A-Z} in any file
-|`0|      `{0-9}       go to the position where Vim was previously exited
-|``|      ``           go to the position before the last jump
+|m|        m{a-zA-Z}   mark current position with mark {a-zA-Z}
+|`a|       `{a-z}      go to mark {a-z} within current file
+|`A|       `{A-Z}      go to mark {A-Z} in any file
+|`0|       `{0-9}      go to the position where Vim was previously exited
+|``|       ``          go to the position before the last jump
 |`quote|   `"          go to the position when last editing this file
-|`[|      `[           go to the start of the previously operated or put text
-|`]|      `]           go to the end of the previously operated or put text
-|`<|      `<           go to the start of the (previous) Visual area
-|`>|      `>           go to the end of the (previous) Visual area
-|`.|      `.           go to the position of the last change in this file
-|'|       '{a-zA-Z0-9[]'"<>.}
+|`[|       `[          go to the start of the previously operated or put text
+|`]|       `]          go to the end of the previously operated or put text
+|`<|       `<          go to the start of the (previous) Visual area
+|`>|       `>          go to the end of the (previous) Visual area
+|`.|       `.          go to the position of the last change in this file
+|'|        '{a-zA-Z0-9[]'"<>.}
                        same as `, but on the first non-blank in the line
 |:marks|  :marks       print the active marks
 |CTRL-O|  N  CTRL-O    go to Nth older position in jump list
 |CTRL-I|  N  CTRL-I    go to Nth newer position in jump list
-|:ju|    :ju[mps]      print the jump list
+|:ju|     :ju[mps]     print the jump list
 ------------------------------------------------------------------------------
 *Q_vm*         Various motions
 
@@ -204,30 +204,30 @@ N is used to indicate an optional count that can be given before the command.
 ------------------------------------------------------------------------------
 *Q_ta*         Using tags
 
-|:ta|     :ta[g][!] {tag}      jump to tag {tag}
-|:ta|     :[count]ta[g][!]     jump to [count]'th newer tag in tag list
+|:ta|      :ta[g][!] {tag}     jump to tag {tag}
+|:ta|      :[count]ta[g][!]    jump to [count]'th newer tag in tag list
 |CTRL-]|      CTRL-]           jump to the tag under cursor, unless changes
                                   have been made
-|:ts|     :ts[elect][!] [tag]  list matching tags and select one to jump to
+|:ts|      :ts[elect][!] [tag] list matching tags and select one to jump to
 |:tjump|   :tj[ump][!] [tag]   jump to tag [tag] or select from list when
                                   there are multiple matches
-|:ltag|           :lt[ag][!] [tag]     jump to tag [tag] and add matching tags to the
+|:ltag|    :lt[ag][!] [tag]    jump to tag [tag] and add matching tags to the
                                   location list
 
-|:tags|           :tags                print tag list
+|:tags|    :tags               print tag list
 |CTRL-T|   N  CTRL-T           jump back from Nth older tag in tag list
-|:po|     :[count]po[p][!]     jump back from [count]'th older tag in tag list
+|:po|      :[count]po[p][!]    jump back from [count]'th older tag in tag list
 |:tnext|   :[count]tn[ext][!]  jump to [count]'th next matching tag
 |:tp|      :[count]tp[revious][!] jump to [count]'th previous matching tag
-|:tr|     :[count]tr[ewind][!] jump to [count]'th matching tag
-|:tl|     :tl[ast][!]          jump to last matching tag
+|:tr|      :[count]tr[ewind][!]        jump to [count]'th matching tag
+|:tl|      :tl[ast][!]         jump to last matching tag
 
-|:ptag|           :pt[ag] {tag}        open a preview window to show tag {tag}
-|CTRL-W_}|     CTRL-W }                like CTRL-] but show tag in preview window
+|:ptag|    :pt[ag] {tag}       open a preview window to show tag {tag}
+|CTRL-W_}|    CTRL-W }         like CTRL-] but show tag in preview window
 |:pts|     :pts[elect]         like ":tselect" but show tag in preview window
 |:ptjump|  :ptj[ump]           like ":tjump" but show tag in preview window
 |:pclose|  :pc[lose]           close tag preview window
-|CTRL-W_z|     CTRL-W z                close tag preview window
+|CTRL-W_z|    CTRL-W z         close tag preview window
 ------------------------------------------------------------------------------
 *Q_sc*         Scrolling
 
@@ -260,7 +260,7 @@ These only work when 'wrap' is off:
 |:startreplace| :startr[eplace][!]  start Replace mode, at EOL when [!] used
 
 in Visual block mode:
-|v_b_I|    I   insert the same text in front of all the selected lines
+|v_b_I|           I    insert the same text in front of all the selected lines
 |v_b_A|           A    append the same text after all the selected lines
 ------------------------------------------------------------------------------
 *Q_ai*         Insert mode keys
@@ -334,16 +334,16 @@ In Insert or Command-line mode:
 *Q_de*         Deleting text
 
 |x|    N  x            delete N characters under and after the cursor
-|<Del>| N  <Del>       delete N characters under and after the cursor
+|<Del>|        N  <Del>        delete N characters under and after the cursor
 |X|    N  X            delete N characters before the cursor
 |d|    N  d{motion}    delete the text that is moved over with {motion}
-|v_d|  {visual}d       delete the highlighted text
+|v_d|     {visual}d    delete the highlighted text
 |dd|   N  dd           delete N lines
 |D|    N  D            delete to the end of the line (and N-1 more lines)
 |J|    N  J            join N-1 lines (delete <EOL>s)
-|v_J|  {visual}J       join the highlighted lines
+|v_J|     {visual}J    join the highlighted lines
 |gJ|   N  gJ           like "J", but without inserting spaces
-|v_gJ| {visual}gJ      like "{visual}J", but without inserting spaces
+|v_gJ|    {visual}gJ   like "{visual}J", but without inserting spaces
 |:d|   :[range]d [x]   delete [range] lines [into register x]
 ------------------------------------------------------------------------------
 *Q_cm*         Copying and moving text
@@ -369,7 +369,7 @@ In Insert or Command-line mode:
 |R|      N  R          enter Replace mode (repeat the entered text N times)
 |gR|     N  gR         enter virtual Replace mode: Like Replace mode but
                           without affecting layout
-|v_b_r|          {visual}r{char}
+|v_b_r|             {visual}r{char}
                        in Visual block mode: Replace each char of the
                           selected text with {char}
 
@@ -447,13 +447,13 @@ In Insert or Command-line mode:
 
 |visual-index| list of Visual mode commands.
 
-|v|                  start highlighting characters  }  move cursor and use
-|V|                  start highlighting linewise    }  operator to affect
+|v|        v           start highlighting characters  }  move cursor and use
+|V|        V           start highlighting linewise    }  operator to affect
 |CTRL-V|   CTRL-V      start highlighting blockwise   }  highlighted text
-|v_o|                exchange cursor position with start of highlighting
-|gv|      gv           start highlighting on previous visual area
-|v_v|                highlight characters or stop highlighting
-|v_V|                highlight linewise or stop highlighting
+|v_o|      o           exchange cursor position with start of highlighting
+|gv|       gv          start highlighting on previous visual area
+|v_v|      v           highlight characters or stop highlighting
+|v_V|      V           highlight linewise or stop highlighting
 |v_CTRL-V| CTRL-V      highlight blockwise or stop highlighting
 ------------------------------------------------------------------------------
 *Q_to*         Text objects (only in Visual mode or after an operator)
@@ -509,8 +509,8 @@ In Insert or Command-line mode:
 ------------------------------------------------------------------------------
 *Q_km*         Key mapping
 
-|:map|      :ma[p] {lhs} {rhs}   map {lhs} to {rhs} in Normal and Visual mode
-|:map!|             :ma[p]! {lhs} {rhs}  map {lhs} to {rhs} in Insert and Command-line
+|:map|       :ma[p] {lhs} {rhs}          map {lhs} to {rhs} in Normal and Visual mode
+|:map!|      :ma[p]! {lhs} {rhs}  map {lhs} to {rhs} in Insert and Command-line
                                     mode
 |:noremap|   :no[remap][!] {lhs} {rhs}
                                  same as ":map", no remapping for this {rhs}
@@ -522,19 +522,19 @@ In Insert or Command-line mode:
                                     Normal and Visual mode
 |:map_l!|    :ma[p]! [lhs]       list mappings (starting with [lhs]) for
                                     Insert and Command-line mode
-|:cmap|             :cmap/:cunmap/:cnoremap
+|:cmap|      :cmap/:cunmap/:cnoremap
                                  like ":map!"/":unmap!"/":noremap!" but for
                                     Command-line mode only
-|:imap|             :imap/:iunmap/:inoremap
+|:imap|      :imap/:iunmap/:inoremap
                                  like ":map!"/":unmap!"/":noremap!" but for
                                     Insert mode only
-|:nmap|             :nmap/:nunmap/:nnoremap
+|:nmap|      :nmap/:nunmap/:nnoremap
                                  like ":map"/":unmap"/":noremap" but for
                                     Normal mode only
-|:vmap|             :vmap/:vunmap/:vnoremap
+|:vmap|      :vmap/:vunmap/:vnoremap
                                  like ":map"/":unmap"/":noremap" but for
                                     Visual mode only
-|:omap|             :omap/:ounmap/:onoremap
+|:omap|      :omap/:ounmap/:onoremap
                                  like ":map"/":unmap"/":noremap" but only for
                                     when an operator is pending
 |:mapc|      :mapc[lear]         remove mappings for Normal and Visual mode
@@ -648,7 +648,7 @@ Short explanation of each option:           *option-list*
 'completefunc'   'cfu'     function to be used for Insert mode completion
 'completeopt'    'cot'     options for Insert mode completion
 'concealcursor'          'cocu'    whether concealable text is hidden in cursor line
-'conceallevel'   'cole'    whether concealable text is shown or hidden 
+'conceallevel'   'cole'    whether concealable text is shown or hidden
 'confirm'        'cf'      ask what to do about unsaved/read-only files
 'conskey'        'consk'   get keys directly from console (MS-DOS only)
 'copyindent'     'ci'      make 'autoindent' use existing indent structure
@@ -657,6 +657,7 @@ Short explanation of each option:           *option-list*
 'cscopepathcomp'  'cspc'    how many components of the path to show
 'cscopeprg'       'csprg'   command to execute cscope
 'cscopequickfix'  'csqf'    use quickfix window for cscope results
+'cscoperelative'  'csre'    Use cscope.out path basename as prefix
 'cscopetag'       'cst'     use cscope for tag commands
 'cscopetagorder'  'csto'    determines ":cstag" search order
 'cscopeverbose'   'csverb'  give messages when adding a cscope database
@@ -690,6 +691,7 @@ Short explanation of each option:           *option-list*
 'fileencodings'   'fencs'   automatically detected character encodings
 'fileformat'     'ff'      file format used for file I/O
 'fileformats'    'ffs'     automatically detected values for 'fileformat'
+'fileignorecase'  'fic'     ignore case when using file names
 'filetype'       'ft'      type of file, used for autocommands
 'fillchars'      'fcs'     characters to use for displaying special items
 'fkmap'                  'fk'      Farsi keyboard mapping
@@ -736,10 +738,12 @@ Short explanation of each option:         *option-list*
 'iconstring'               string to use for the Vim icon text
 'ignorecase'     'ic'      ignore case in search patterns
 'imactivatekey'   'imak'    key that activates the X input method
+'imactivatefunc'  'imaf'    function to enable/disable the X input method
 'imcmdline'      'imc'     use IM when starting to edit a command line
 'imdisable'      'imd'     do not use the IM in any mode
 'iminsert'       'imi'     use :lmap or IM in Insert mode
 'imsearch'       'ims'     use :lmap or IM when typing a search pattern
+'imstatusfunc'    'imsf'    function to obtain X input method status
 'include'        'inc'     pattern to be used to find an include file
 'includeexpr'    'inex'    expression used to process an include line
 'incsearch'      'is'      highlight match while typing search pattern
@@ -800,7 +804,7 @@ Short explanation of each option:           *option-list*
 'omnifunc'       'ofu'     function for filetype-specific completion
 'opendevice'     'odev'    allow reading/writing devices on MS-Windows
 'operatorfunc'   'opfunc'  function to be called for |g@| operator
-'osfiletype'     'oft'     operating system-specific filetype information
+'osfiletype'     'oft'     no longer supported
 'paragraphs'     'para'    nroff macros that separate paragraphs
 'paste'                            allow pasting text
 'pastetoggle'    'pt'      key code that causes 'paste' to toggle
@@ -822,6 +826,7 @@ Short explanation of each option:           *option-list*
 'quoteescape'    'qe'      escape characters used in a string
 'readonly'       'ro'      disallow writing the buffer
 'redrawtime'     'rdt'     timeout for 'hlsearch' and |:match| highlighting
+'regexpengine'   're'      default regexp engine to use
 'relativenumber'  'rnu'            show relative line number in front of each line
 'remap'                            allow mappings to work recursively
 'report'                   threshold for reporting nr. of lines changed
@@ -850,6 +855,7 @@ Short explanation of each option:           *option-list*
 'shellslash'     'ssl'     use forward slash for shell file names
 'shelltemp'      'stmp'    whether to use a temp file for shell commands
 'shelltype'      'st'      Amiga: influences how to use a shell
+'shellxescape'   'sxe'     characters to escape when 'shellxquote' is (
 'shellxquote'    'sxq'     like 'shellquote', but include redirection
 'shiftround'     'sr'      round indent to multiple of shiftwidth
 'shiftwidth'     'sw'      number of spaces to use for (auto)indent step
@@ -934,6 +940,7 @@ Short explanation of each option:           *option-list*
 'wildchar'       'wc'      command-line character for wildcard expansion
 'wildcharm'      'wcm'     like 'wildchar' but also works when mapped
 'wildignore'     'wig'     files matching these patterns are not completed
+'wildignorecase'  'wic'     ignore case when completing file names
 'wildmenu'       'wmnu'    use menu for command line completion
 'wildmode'       'wim'     mode for 'wildchar' command-line expansion
 'wildoptions'    'wop'     specifies how command line completion is done
@@ -955,9 +962,9 @@ Short explanation of each option:           *option-list*
 ------------------------------------------------------------------------------
 *Q_ur*         Undo/Redo commands
 
-|u|      N  u          undo last N changes
+|u|       N  u         undo last N changes
 |CTRL-R|  N  CTRL-R    redo last N undone changes
-|U|                  restore last changed line
+|U|          U         restore last changed line
 ------------------------------------------------------------------------------
 *Q_et*         External commands
 
@@ -1008,7 +1015,7 @@ Short explanation of each option:         *option-list*
                                   C4350, etc.)
 |:normal|      :norm[al][!] {commands}
                                execute Normal mode commands
-|Q|            Q               switch to "Ex" mode
+|Q|               Q            switch to "Ex" mode
 
 |:redir|       :redir >{file}          redirect messages to {file}
 |:silent|      :silent[!] {command}    execute {command} silently
@@ -1084,18 +1091,18 @@ Context-sensitive completion on the command-line:
 ------------------------------------------------------------------------------
 *Q_ex*         Special Ex characters
 
-|:bar|               separates two commands (not for ":global" and ":!")
+|:bar|      |          separates two commands (not for ":global" and ":!")
 |:quote|    "          begins comment
 
-|:_%|                current file name (only where a file name is expected)
-|:_#|      #[num]      alternate file name [num] (only where a file name is
+|:_%|       %          current file name (only where a file name is expected)
+|:_#|       #[num]     alternate file name [num] (only where a file name is
                           expected)
        Note: The next seven are typed literally; these are not special keys!
-|:<afile>|  <abuf>     buffer number, for use in an autocommand (only where a
+|:<abuf>|   <abuf>     buffer number, for use in an autocommand (only where a
                           file name is expected)
-|:<afile>|  <afile>    file name, for user in an autocommand (only where a
+|:<afile>|  <afile>    file name, for use in an autocommand (only where a
                           file name is expected)
-|:<afile>|  <amatch>   what matched with the pattern, for use in an
+|:<amatch>| <amatch>   what matched with the pattern, for use in an
                           autocommand (only where a file name is expected)
 |:<cword>|  <cword>    word under the cursor (only where a file name is
                           expected)
@@ -1168,18 +1175,18 @@ Context-sensitive completion on the command-line:
           Without !: Fail if changes have been made to the current buffer.
              With !: Discard any changes to the current buffer.
 |:edit_f|  :e[dit][!] {file}   edit {file}
-|:edit|           :e[dit][!]           reload the current file
-|:enew|           :ene[w][!]           edit a new, unnamed buffer
+|:edit|    :e[dit][!]          reload the current file
+|:enew|    :ene[w][!]          edit a new, unnamed buffer
 |:find|    :fin[d][!] {file}   find {file} in 'path' and edit it
 
-|CTRL-^|   N   CTRL-^          edit alternate file N (equivalent to ":e #N")
-|gf|          gf  or ]f        edit the file whose name is under the cursor
-|:pwd|    :pwd                 print the current directory name
-|:cd|     :cd [path]           change the current directory to [path]
-|:cd-|    :cd -                back to previous current directory
-|:file|           :f[ile]              print the current file name and the cursor
+|CTRL-^|   N  CTRL-^           edit alternate file N (equivalent to ":e #N")
+|gf|          gf  or ]f                edit the file whose name is under the cursor
+|:pwd|     :pwd                        print the current directory name
+|:cd|      :cd [path]          change the current directory to [path]
+|:cd-|     :cd -               back to previous current directory
+|:file|    :f[ile]             print the current file name and the cursor
                                   position
-|:file|           :f[ile] {name}       set the current file name to {name}
+|:file|    :f[ile] {name}      set the current file name to {name}
 |:files|   :files              show alternate file names
 ------------------------------------------------------------------------------
 *Q_fl*         Using the argument list                 |argument-list|
@@ -1195,12 +1202,12 @@ Context-sensitive completion on the command-line:
 
             in current window    in new window ~
 |:argument|  :argu[ment] N       :sar[gument] N        edit file N
-|:next|             :n[ext]              :sn[ext]              edit next file
+|:next|      :n[ext]             :sn[ext]              edit next file
 |:next_f|    :n[ext] {arglist}   :sn[ext] {arglist}    define new arg list
                                                           and edit first file
-|:Next|             :N[ext]              :sN[ext]              edit previous file
+|:Next|      :N[ext]             :sN[ext]              edit previous file
 |:first|     :fir[st]            :sfir[st]             edit first file
-|:last|             :la[st]              :sla[st]              edit last file
+|:last|      :la[st]             :sla[st]              edit last file
 ------------------------------------------------------------------------------
 *Q_wq*         Writing and quitting
 
@@ -1321,14 +1328,14 @@ Context-sensitive completion on the command-line:
 |:bdelete|     :bdelete[!] [N]         unload buffer [N] and delete it from
                                           the buffer list
 
-             in current window   in new window ~
-|:buffer|     :[N]buffer [N]     :[N]sbuffer [N]     to arg/buf N
-|:bnext|      :[N]bnext [N]      :[N]sbnext [N]      to Nth next arg/buf
-|:bNext|      :[N]bNext [N]      :[N]sbNext [N]      to Nth previous arg/buf
-|:bprevious|  :[N]bprevious [N]   :[N]sbprevious [N]  to Nth previous arg/buf
-|:bfirst|     :bfirst            :sbfirst            to first arg/buf
-|:blast|      :blast             :sblast             to last arg/buf
-|:bmodified|  :[N]bmod [N]       :[N]sbmod [N]       to Nth modified buf
+               in current window  in new window       ~
+|:buffer|      :[N]buffer [N]     :[N]sbuffer [N]     to arg/buf N
+|:bnext|       :[N]bnext [N]      :[N]sbnext [N]      to Nth next arg/buf
+|:bNext|       :[N]bNext [N]      :[N]sbNext [N]      to Nth previous arg/buf
+|:bprevious|   :[N]bprevious [N]  :[N]sbprevious [N]  to Nth previous arg/buf
+|:bfirst|      :bfirst            :sbfirst            to first arg/buf
+|:blast|       :blast             :sblast             to last arg/buf
+|:bmodified|   :[N]bmod [N]       :[N]sbmod [N]       to Nth modified buf
 ------------------------------------------------------------------------------
 *Q_sy*         Syntax Highlighting
 
@@ -1377,7 +1384,7 @@ Context-sensitive completion on the command-line:
                set foldmethod=indent   folding by indent
                set foldmethod=expr     folding by 'foldexpr'
                set foldmethod=syntax   folding by syntax regions
-               set foldmethod=marker   folding by 'foldmarkers'
+               set foldmethod=marker   folding by 'foldmarker'
 
 |zf|           zf{motion}              operator: Define a fold manually
 |:fold|                :{range}fold            define a fold for {range} lines
index ef60069..11d8550 100644 (file)
@@ -1,4 +1,4 @@
-*quotes.txt*    For Vim version 7.3.  Last change: 2006 Apr 24
+*quotes.txt*    For Vim version 7.4.  Last change: 2010 Nov 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -260,15 +260,16 @@ Eccettuato, Italy)
 
 
 In summary:
-     __     ___                    _       _   _  ___ _____
-     \ \   / (_)_ __ ___   (_)___  | | | |/ _ \_   _|
-      \ \ / /| | '_ ` _ \  | / __| | |_| | | | || |
-       \ V / | | | | | | | | \__ \ |  _  | |_| || |
-       \_/  |_|_| |_| |_| |_|___/ |_| |_|\___/ |_|
-            ____ _____ _   _ _____ _____ _ _
-           / ___|_   _| | | |  ___|  ___| | |
-           \___ \ | | | | | | |_  | |_  | | |
-            ___) || | | |_| |  _| |  _| |_|_|
-           |____/ |_|  \___/|_|   |_|   (_|_)        (Tony Nugent, Australia)
+     __     ___                    _       _   _  ___ _____ `
+     \ \   / (_)_ __ ___   (_)___  | | | |/ _ \_   _| `
+      \ \ / /| | '_ ` _ \  | / __| | |_| | | | || | `
+       \ V / | | | | | | | | \__ \ |  _  | |_| || | `
+       \_/  |_|_| |_| |_| |_|___/ |_| |_|\___/ |_| `
+            ____ _____ _   _ _____ _____ _ _ `
+           / ___|_   _| | | |  ___|  ___| | | `
+           \___ \ | | | | | | |_  | |_  | | | `
+            ___) || | | |_| |  _| |  _| |_|_| `
+           |____/ |_|  \___/|_|   |_|   (_|_)      (Tony Nugent, Australia) `
+
 
  vim:tw=78:ts=8:ft=help:norl:
index 4698eec..5fc09c0 100644 (file)
@@ -1,4 +1,4 @@
-*recover.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*recover.txt*   For Vim version 7.4.  Last change: 2010 Jul 20
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index 11665cf..327258f 100644 (file)
@@ -1,4 +1,4 @@
-*remote.txt*    For Vim version 7.3.  Last change: 2008 May 24
+*remote.txt*    For Vim version 7.4.  Last change: 2008 May 24
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index 331b6f9..0697700 100644 (file)
@@ -1,4 +1,4 @@
-*repeat.txt*    For Vim version 7.3.  Last change: 2009 Nov 04
+*repeat.txt*    For Vim version 7.4.  Last change: 2013 Jul 25
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -54,7 +54,7 @@ selection, the same SIZE of area is used, see |visual-repeat|.
                        Same as :g!.
 
 Instead of the '/' which surrounds the {pattern}, you can use any other
-single byte character, but not an alphanumeric character, '\', '"' or '|'.
+single byte character, but not an alphabetic character, '\', '"' or '|'.
 This is useful if you want to include a '/' in the search pattern or
 replacement string.
 
@@ -102,25 +102,29 @@ To abort this type CTRL-C twice.
 q{0-9a-zA-Z"}          Record typed characters into register {0-9a-zA-Z"}
                        (uppercase to append).  The 'q' command is disabled
                        while executing a register, and it doesn't work inside
-                       a mapping.  {Vi: no recording}
+                       a mapping and |:normal|.  {Vi: no recording}
 
 q                      Stops recording.  (Implementation note: The 'q' that
                        stops recording is not stored in the register, unless
                        it was the result of a mapping)  {Vi: no recording}
 
                                                        *@*
-@{0-9a-z".=*}          Execute the contents of register {0-9a-z".=*} [count]
+@{0-9a-z".=*+}         Execute the contents of register {0-9a-z".=*+} [count]
                        times.  Note that register '%' (name of the current
                        file) and '#' (name of the alternate file) cannot be
-                       used.  For "@=" you are prompted to enter an
-                       expression.  The result of the expression is then
-                       executed.  See also |@:|.  {Vi: only named registers}
+                       used.
+                       The register is executed like a mapping, that means
+                       that the difference between 'wildchar' and 'wildcharm'
+                       applies.
+                       For "@=" you are prompted to enter an expression.  The
+                       result of the expression is then executed.
+                       See also |@:|.  {Vi: only named registers}
 
                                                        *@@* *E748*
 @@                     Repeat the previous @{0-9a-z":*} [count] times.
 
-:[addr]*{0-9a-z".=                                           *:@* *:star*
-:[addr]@{0-9a-z".=*}   Execute the contents of register {0-9a-z".=*} as an Ex
+:[addr]*{0-9a-z".=+}                                           *:@* *:star*
+:[addr]@{0-9a-z".=*+}  Execute the contents of register {0-9a-z".=*+} as an Ex
                        command.  First set cursor at line [addr] (default is
                        current line).  When the last line in the register does
                        not have a <CR> it will be added automatically when
@@ -578,6 +582,9 @@ It is only included when Vim was compiled with "huge" features.
 You can also use the |reltime()| function to measure time.  This only requires
 the |+reltime| feature, which is present more often.
 
+For profiling syntax highlighting see |:syntime|.
+
+
 :prof[ile] start {fname}                       *:prof* *:profile* *E750*
                Start profiling, write the output in {fname} upon exit.
                If {fname} already exists it will be silently overwritten.
index 09182e3..f4b8f41 100644 (file)
@@ -1,4 +1,4 @@
-*rileft.txt*    For Vim version 7.3.  Last change: 2006 Apr 24
+*rileft.txt*    For Vim version 7.4.  Last change: 2006 Apr 24
 
 
                  VIM REFERENCE MANUAL    by Avner Lottem
index 75deed7..36f3d0b 100644 (file)
@@ -1,4 +1,4 @@
-*russian.txt*   For Vim version 7.3.  Last change: 2006 Apr 24
+*russian.txt*   For Vim version 7.4.  Last change: 2006 Apr 24
 
 
                  VIM REFERENCE MANUAL    by Vassily Ragosin
index aed8187..b2c5663 100644 (file)
@@ -1,4 +1,4 @@
-*scroll.txt*    For Vim version 7.3.  Last change: 2006 Aug 27
+*scroll.txt*    For Vim version 7.4.  Last change: 2006 Aug 27
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index 4f9fcd2..076bff0 100644 (file)
@@ -1,4 +1,4 @@
-*sign.txt*      For Vim version 7.3.  Last change: 2010 May 07
+*sign.txt*      For Vim version 7.4.  Last change: 2012 Jul 10
 
 
                  VIM REFERENCE MANUAL    by Gordon Prieur
@@ -70,12 +70,13 @@ DEFINING A SIGN.                    *:sign-define* *E255* *E160* *E612*
 :sign define {name} {argument}...
                Define a new sign or set attributes for an existing sign.
                The {name} can either be a number (all digits) or a name
-               starting with a non-digit.
+               starting with a non-digit.  Leading digits are ignored, thus
+               "0012", "012" and "12" are considered the same name.
                About 120 different signs can be defined.
 
                Accepted arguments:
 
-       icon={pixmap}
+       icon={bitmap}
                Define the file name where the bitmap can be found.  Should be
                a full path.  The bitmap should fit in the place of two
                characters.  This is not checked.  If the bitmap is too big it
@@ -85,6 +86,8 @@ DEFINING A SIGN.                      *:sign-define* *E255* *E160* *E612*
                        GTK 1           pixmap (.xpm)
                        GTK 2           many
                        Motif           pixmap (.xpm)
+                       Win32           .bmp, .ico, .cur
+                                       pixmap (.xpm) |+xpm_w32|
 
        linehl={group}
                Highlighting group used for the whole line the sign is placed
@@ -150,8 +153,14 @@ REMOVING SIGNS                                             *:sign-unplace* *E159*
                Remove the previously placed sign {id} from file {fname}.
                See remark above about {fname} |:sign-fname|.
 
+:sign unplace * file={fname}
+               Remove all placed signs in file {fname}.
+
 :sign unplace {id} buffer={nr}
-               Same, but use buffer {nr}.
+               Remove the previously placed sign {id} from buffer {nr}.
+
+:sign unplace * buffer={nr}
+               Remove all placed signs in buffer {nr}.
 
 :sign unplace {id}
                Remove the previously placed sign {id} from all files it
index 3533005..c2b526d 100644 (file)
@@ -1,4 +1,4 @@
-*spell.txt*    For Vim version 7.3.  Last change: 2010 Apr 11
+*spell.txt*    For Vim version 7.4.  Last change: 2013 Jul 17
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -335,6 +335,9 @@ A spell file might not be available in the current 'encoding'.  See
 |spell-mkspell| about how to create a spell file.  Converting a spell file
 with "iconv" will NOT work!
 
+Note: on VMS ".{enc}.spl" is changed to "_{enc}.spl" to avoid trouble with
+filenames.
+
                                                    *spell-sug-file* *E781*
 If there is a file with exactly the same name as the ".spl" file but ending in
 ".sug", that file will be used for giving better suggestions.  It isn't loaded
@@ -519,7 +522,7 @@ then Vim will try to guess.
                        Up to eight regions can be combined. *E754* *E755*
                        The REP and SAL items of the first .aff file where
                        they appear are used. |spell-REP| |spell-SAL|
-
+                                                               *E845*
                        This command uses a lot of memory, required to find
                        the optimal word tree (Polish, Italian and Hungarian
                        require several hundred Mbyte).  The final result will
@@ -925,9 +928,13 @@ When the encoding is UTF-8 no word characters need to be specified.
 Vim allows you to use spell checking for several languages in the same file.
 You can list them in the 'spelllang' option.  As a consequence all spell files
 for the same encoding must use the same word characters, otherwise they can't
-be combined without errors.  If you get a warning that the word tables differ
-you may need to generate the .spl file again with |:mkspell|.  Check the FOL,
-LOW and UPP lines in the used .aff file.
+be combined without errors.
+
+If you get an E763 warning that the word tables differ you need to update your
+".spl" spell files.  If you downloaded the files, get the latest version of
+all spell files you use.  Otherwise generate the .spl file again with
+|:mkspell|.  If you still get errors check the FOL, LOW and UPP lines in the
+used .aff files.
 
 The XX.ascii.spl spell file generated with the "-ascii" argument will not
 contain the table with characters, so that it can be combine with spell files
@@ -1126,7 +1133,7 @@ WORDS WITH A SLASH                                        *spell-SLASH*
 
 The slash is used in the .dic file to separate the basic word from the affix
 letters and other flags.  Unfortunately, this means you cannot use a slash in
-a word.  Thus "TCP/IP" is not a word but "TCP with the flags "IP".  To include
+a word.  Thus "TCP/IP" is not a word but "TCP" with the flags "IP".  To include
 a slash in the word put a backslash before it: "TCP\/IP".  In the rare case
 you want to use a backslash inside a word you need to use two backslashes.
 Any other use of the backslash is reserved for future expansion.
@@ -1241,6 +1248,7 @@ one or more groups, where each group can be:
 Optionally this may be followed by:
        *       the group appears zero or more times, e.g., sm*e
        +       the group appears one or more times, e.g., c+
+       ?       the group appears zero times or once, e.g., x?
 
 This is similar to the regexp pattern syntax (but not the same!).  A few
 examples with the sequence of word flags they require:
@@ -1248,6 +1256,7 @@ examples with the sequence of word flags they require:
     COMPOUNDRULE yz        yz
     COMPOUNDRULE x+z       xz xxz xxxz etc.
     COMPOUNDRULE yx+       yx yxx yxxx etc.
+    COMPOUNDRULE xy?z      xz xyz
 
     COMPOUNDRULE [abc]z    az bz cz
     COMPOUNDRULE [abc]+z   az aaz abaz bz baz bcbz cz caz cbaz etc.
@@ -1373,7 +1382,7 @@ Only case-folded letters need to be included.
 
 Another way to restrict compounding was mentioned above: Adding the
 |spell-COMPOUNDFORBIDFLAG| flag to an affix causes all words that are made
-with that affix not be be used for compounding.
+with that affix to not be used for compounding.
 
 
 UNLIMITED COMPOUNDING                                  *spell-NOBREAK*
index a2b0820..a99d66d 100644 (file)
@@ -1,4 +1,4 @@
-*sponsor.txt*   For Vim version 7.3.  Last change: 2008 Jun 21
+*sponsor.txt*   For Vim version 7.4.  Last change: 2008 Jun 21
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index 0632e8c..47ad05f 100644 (file)
@@ -1,4 +1,4 @@
-*starting.txt*  For Vim version 7.3.  Last change: 2009 Dec 31
+*starting.txt*  For Vim version 7.4.  Last change: 2013 Jul 20
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -95,14 +95,14 @@ exim        vim -E      Start in improved Ex mode (see |Ex-mode|).      *exim*
                        (normally not installed)
 view   vim -R      Start in read-only mode (see |-R|).             *view*
 gvim   vim -g      Start the GUI (see |gui|).                      *gvim*
-gex    vim -eg     Start the GUI in Ex mode.                       *gex*
-gview  vim -Rg     Start the GUI in read-only mode.                *gview*
+gex    vim -eg     Start the GUI in Ex mode.                     *gex*
+gview  vim -Rg     Start the GUI in read-only mode.              *gview*
 rvim   vim -Z      Like "vim", but in restricted mode (see |-Z|)   *rvim*
-rview  vim -RZ     Like "view", but in restricted mode.            *rview*
-rgvim  vim -gZ     Like "gvim", but in restricted mode.            *rgvim*
-rgview vim -RgZ    Like "gview", but in restricted mode.           *rgview*
+rview  vim -RZ     Like "view", but in restricted mode.          *rview*
+rgvim  vim -gZ     Like "gvim", but in restricted mode.          *rgvim*
+rgview vim -RgZ    Like "gview", but in restricted mode.         *rgview*
 evim    vim -y      Easy Vim: set 'insertmode' (see |-y|)          *evim*
-eview   vim -yR     Like "evim" in read-only mode                  *eview*
+eview   vim -yR     Like "evim" in read-only mode                *eview*
 vimdiff vim -d     Start in diff mode |diff-mode|
 gvimdiff vim -gd    Start in diff mode |diff-mode|
 
@@ -244,11 +244,12 @@ a slash.  Thus "-R" means recovery and "-/R" readonly.
 -Z             Restricted mode.  All commands that make use of an external
                shell are disabled.  This includes suspending with CTRL-Z,
                ":sh", filtering, the system() function, backtick expansion,
-               etc.
+               delete(), rename(), mkdir(), writefile(), libcall(), etc.
                {not in Vi}
 
                                                        *-g*
--g             Start Vim in GUI mode.  See |gui|.  {not in Vi}
+-g             Start Vim in GUI mode.  See |gui|. For the opposite see |-v|.
+               {not in Vi}
 
                                                        *-v*
 -v             Start Ex in Vi mode.  Only makes a difference when the
@@ -424,12 +425,7 @@ a slash.  Thus "-R" means recovery and "-/R" readonly.
                "-d con:30/10/600/150".  But you can also use it to start
                editing on another device, e.g., AUX:.  {not in Vi}
                                                        *-f*
--f             Amiga: Do not restart Vim to open a new window.  This
-               option should be used when Vim is started by a program that
-               will wait for the edit session to finish (e.g., mail or
-               readnews).  See |amiga-window|.
-
-               GUI: Do not disconnect from the program that started Vim.
+-f             GUI: Do not disconnect from the program that started Vim.
                'f' stands for "foreground".  If omitted, the GUI forks a new
                process and exits the current one.  "-f" should be used when
                gvim is started by a program that will wait for the edit
@@ -437,8 +433,18 @@ a slash.  Thus "-R" means recovery and "-/R" readonly.
                never to fork, include 'f' in 'guioptions' in your |gvimrc|.
                Careful: You can use "-gf" to start the GUI in the foreground,
                but "-fg" is used to specify the foreground color.  |gui-fork|
+
+               Amiga: Do not restart Vim to open a new window.  This
+               option should be used when Vim is started by a program that
+               will wait for the edit session to finish (e.g., mail or
+               readnews).  See |amiga-window|.
+
+               MS-Windows: This option is not supported.  However, when
+               running Vim with an installed vim.bat or gvim.bat file it
+               works.
                {not in Vi}
 
+
                                                        *--nofork*
 --nofork       GUI: Do not fork.  Same as |-f|.
                                                        *-u* *E282*
@@ -751,14 +757,25 @@ accordingly.  Vim proceeds in this order:
        file, but "exrc" is what Vi always used, "vimrc" is a Vim specific
        name.  Also see |vimrc-intro|.
 
-       Recommended place for your personal initializations:
-               Unix                $HOME/.vimrc
-               OS/2                $HOME/.vimrc or $VIM/.vimrc (or _vimrc)
-               MS-DOS and Win32    $HOME/_vimrc or $VIM/_vimrc
-               Amiga               s:.vimrc or $VIM/.vimrc
+       Places for your personal initializations:
+               Unix            $HOME/.vimrc or $HOME/.vim/vimrc
+               OS/2            $HOME/.vimrc, $HOME/vimfiles/vimrc
+                               or $VIM/.vimrc (or _vimrc)
+               MS-Windows      $HOME/_vimrc, $HOME/vimfiles/vimrc
+                               or $VIM/_vimrc
+               Amiga           s:.vimrc, home:.vimrc, home:vimfiles:vimrc
+                               or $VIM/.vimrc
+
+       The files are searched in the order specified above and only the first
+       one that is found is read.
+
+       RECOMMENDATION: Put all your Vim configuration stuff in the
+       $HOME/.vim/ directory ($HOME/vimfiles/ for MS-Windows). That makes it
+       easy to copy it to another system.
 
        If Vim was started with "-u filename", the file "filename" is used.
-       All following initializations until 4. are skipped.
+       All following initializations until 4. are skipped. $MYVIMRC is not
+       set.
        "vim -u NORC" can be used to skip these initializations without
        reading a file.  "vim -u NONE" also skips loading plugins.  |-u|
 
@@ -785,12 +802,15 @@ accordingly.  Vim proceeds in this order:
        -  The environment variable VIMINIT (see also |compatible-default|) (*)
           The value of $VIMINIT is used as an Ex command line.
        -  The user vimrc file(s):
-                   "$HOME/.vimrc"      (for Unix and OS/2) (*)
-                   "s:.vimrc"          (for Amiga) (*)
-                   "home:.vimrc"       (for Amiga) (*)
-                   "$VIM/.vimrc"       (for OS/2 and Amiga) (*)
-                   "$HOME/_vimrc"      (for MS-DOS and Win32) (*)
-                   "$VIM/_vimrc"       (for MS-DOS and Win32) (*)
+                   "$HOME/.vimrc"         (for Unix and OS/2) (*)
+                   "$HOME/.vim/vimrc"     (for Unix and OS/2) (*)
+                   "s:.vimrc"             (for Amiga) (*)
+                   "home:.vimrc"          (for Amiga) (*)
+                   "home:vimfiles:vimrc"  (for Amiga) (*)
+                   "$VIM/.vimrc"          (for OS/2 and Amiga) (*)
+                   "$HOME/_vimrc"         (for MS-DOS and Win32) (*)
+                   "$HOME/vimfiles/vimrc" (for MS-DOS and Win32) (*)
+                   "$VIM/_vimrc"          (for MS-DOS and Win32) (*)
                Note: For Unix, OS/2 and Amiga, when ".vimrc" does not exist,
                "_vimrc" is also tried, in case an MS-DOS compatible file
                system is used.  For MS-DOS and Win32 ".vimrc" is checked
@@ -869,6 +889,7 @@ accordingly.  Vim proceeds in this order:
 12. Execute startup commands
        If a "-t" flag was given to Vim, the tag is jumped to.
        The commands given with the |-c| and |+cmd| arguments are executed.
+       The starting flag is reset, has("vim_starting") will now return zero.
        If the 'insertmode' option is set, Insert mode is entered.
        The |VimEnter| autocommands are executed.
 
index 267ec5b..2442f15 100644 (file)
@@ -1,4 +1,4 @@
-*syntax.txt*   For Vim version 7.3.  Last change: 2010 Aug 10
+*syntax.txt*   For Vim version 7.4.  Last change: 2013 Jul 05
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -37,6 +37,7 @@ In the User Manual:
 15. Highlighting tags          |tag-highlight|
 16. Window-local syntax                |:ownsyntax|
 17. Color xterms               |xterm-color|
+18. When syntax is slow                |:syntime|
 
 {Vi does not have any of these commands}
 
@@ -199,7 +200,8 @@ REPLACING AN EXISTING SYNTAX FILE                   *mysyntaxfile-replace*
 If you don't like a distributed syntax file, or you have downloaded a new
 version, follow the same steps as for |mysyntaxfile| above.  Just make sure
 that you write the syntax file in a directory that is early in 'runtimepath'.
-Vim will only load the first syntax file found.
+Vim will only load the first syntax file found, assuming that it sets
+b:current_syntax.
 
 
 NAMING CONVENTIONS                 *group-name* *{group-name}* *E669* *W18*
@@ -377,142 +379,379 @@ settings, depending on which syntax is active.  Example: >
 2HTML                                          *2html.vim* *convert-to-HTML*
 
 This is not a syntax file itself, but a script that converts the current
-window into HTML.  Vim opens a new window in which it builds the HTML file.
+window into HTML. Vim opens a new window in which it builds the HTML file.
+
+After you save the resulting file, you can view it with any browser. The
+colors should be exactly the same as you see them in Vim.  With
+|g:html_line_ids| you can jump to specific lines by adding (for example) #L123
+or #123 to the end of the URL in your browser's address bar. And with
+|g:html_dynamic_folds| enabled, you can show or hide the text that is folded
+in Vim.
 
 You are not supposed to set the 'filetype' or 'syntax' option to "2html"!
 Source the script to convert the current file: >
 
        :runtime! syntax/2html.vim
 <
-                                                       *:TOhtml*
-Or use the ":TOhtml" user command.  It is defined in a standard plugin.
-":TOhtml" also works with a range and in a Visual area: >
-
-       :10,40TOhtml
-
-Warning: This is slow! The script must process every character of every line.
-Because it is so slow, by default a progress bar is displayed in the
-statusline for each step that usually takes a long time. If you don't like
-seeing this progress bar, you can disable it and get a very minor speed
-improvement with: >
-
-       let g:html_no_progress = 1
-
-":TOhtml" has another special feature: if the window is in diff mode, it will
-generate HTML that shows all the related windows.  This can be disabled by
-setting the g:html_diff_one_file variable: >
-
-       let g:html_diff_one_file = 1
+Many variables affect the output of 2html.vim; see below. Any of the on/off
+options listed below can be enabled or disabled by setting them explicitly to
+the desired value, or restored to their default by removing the variable using
+|:unlet|.
 
-After you save the resulting file, you can view it with any browser.  The
-colors should be exactly the same as you see them in Vim.
+Remarks:
+- Some truly ancient browsers may not show the background colors.
+- From most browsers you can also print the file (in color)!
+- The latest TOhtml may actually work with older versions of Vim, but some
+  features such as conceal support will not function, and the colors may be
+  incorrect for an old Vim without GUI support compiled in.
 
+Here is an example how to run the script over all .c and .h files from a
+Unix shell: >
+   for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done
+<
+                                       *g:html_start_line* *g:html_end_line*
 To restrict the conversion to a range of lines, use a range with the |:TOhtml|
-command, or set "g:html_start_line" and "g:html_end_line" to the first and
-last line to be converted.  Example, using the last set Visual area: >
+command below, or set "g:html_start_line" and "g:html_end_line" to the first
+and last line to be converted.  Example, using the last set Visual area: >
 
        :let g:html_start_line = line("'<")
        :let g:html_end_line = line("'>")
+       :runtime! syntax/2html.vim
+<
+                                                       *:TOhtml*
+:[range]TOhtml         The ":TOhtml" command is defined in a standard plugin.
+                       This command will source |2html.vim| for you. When a
+                       range is given, set |g:html_start_line| and
+                       |g:html_end_line| to the start and end of the range,
+                       respectively. Default range is the entire buffer.
+
+                        If the current window is part of a |diff|, unless
+                        |g:html_diff_one_file| is set, :TOhtml will convert
+                        all windows which are part of the diff in the current
+                        tab and place them side-by-side in a <table> element
+                        in the generated HTML. With |g:html_line_ids| you can
+                        jump to lines in specific windows with (for example)
+                        #W1L42 for line 42 in the first diffed window, or
+                        #W3L87 for line 87 in the third.
+
+                       Examples: >
+
+       :10,40TOhtml " convert lines 10-40 to html
+       :'<,'>TOhtml " convert current/last visual selection
+       :TOhtml      " convert entire buffer
+<
+                                                       *g:html_diff_one_file*
+Default: 0.
+When 0, and using |:TOhtml| all windows involved in a |diff| in the current tab
+page are converted to HTML and placed side-by-side in a <table> element. When
+1, only the current buffer is converted.
+Example: >
+
+       let g:html_diff_one_file = 1
+<
+                                                        *g:html_whole_filler*
+Default: 0.
+When 0, if |g:html_diff_one_file| is 1, a sequence of more than 3 filler lines
+is displayed as three lines with the middle line mentioning the total number
+of inserted lines.
+When 1, always display all inserted lines as if |g:html_diff_one_file| were
+not set.
+>
+    :let g:html_whole_filler = 1
+<
+                                    *TOhtml-performance* *g:html_no_progress*
+Default: 0.
+When 0, display a progress bar in the statusline for each major step in the
+2html.vim conversion process.
+When 1, do not display the progress bar. This offers a minor speed improvement
+but you won't have any idea how much longer the conversion might take; for big
+files it can take a long time!
+Example: >
 
-The lines are numbered according to 'number' option and the Number
-highlighting.  You can force lines to be numbered in the HTML output by
-setting "html_number_lines" to non-zero value: >
+       let g:html_no_progress = 1
+<
+You can obtain better performance improvements by also instructing Vim to not
+run interactively, so that too much time is not taken to redraw as the script
+moves through the buffer, switches windows, and the like: >
+
+  vim -E -s -c "let g:html_no_progress=1" -c "syntax on" -c "set ft=c" -c "runtime syntax/2html.vim" -cwqa myfile.c
+<
+Note that the -s flag prevents loading your .vimrc and any plugins, so you
+need to explicitly source/enable anything that will affect the HTML
+conversion. See |-E| and |-s-ex| for details. It is probably best to create a
+script to replace all the -c commands and use it with the -u flag instead of
+specifying each command separately.
+
+                                                        *g:html_number_lines*
+Default: current 'number' setting.
+When 0, buffer text is displayed in the generated HTML without line numbering.
+When 1, a column of line numbers is added to the generated HTML with the same
+highlighting as the line number column in Vim (|hl-LineNr|).
+Force line numbers even if 'number' is not set: >
    :let g:html_number_lines = 1
-Force to omit the line numbers by using a zero value: >
+Force to omit the line numbers: >
    :let g:html_number_lines = 0
 Go back to the default to use 'number' by deleting the variable: >
    :unlet g:html_number_lines
-
-By default, valid HTML 4.01 using cascading style sheets (CSS1) is generated.
-If you need to generate markup for really old browsers or some other user
-agent that lacks basic CSS support, use: >
+<
+                                                             *g:html_line_ids*
+Default: 1 if |g:html_number_lines| is set, 0 otherwise.
+When 1, adds an HTML id attribute to each line number, or to an empty <span>
+inserted for that purpose if no line numbers are shown. This ID attribute
+takes the form of L123 for single-buffer HTML pages, or W2L123 for diff-view
+pages, and is used to jump to a specific line (in a specific window of a diff
+view). Javascript is inserted to open any closed dynamic folds
+(|g:html_dynamic_folds|) containing the specificed line before jumping. The
+javascript also allows omitting the window ID in the url, and the leading L.
+For example: >
+
+       page.html#L123  jumps to line 123 in a single-buffer file
+       page.html#123   does the same
+
+       diff.html#W1L42 jumps to line 42 in the first window in a diff
+       diff.html#42    does the same
+<
+                                                             *g:html_use_css*
+Default: 1.
+When 1, generate valid HTML 4.01 markup with CSS1 styling, supported in all
+modern browsers and most old browsers.
+When 0, generate <font> tags and similar outdated markup. This is not
+recommended but it may work better in really old browsers, email clients,
+forum posts, and similar situations where basic CSS support is unavailable.
+Example: >
    :let g:html_use_css = 0
-
-Concealed text is removed from the HTML and replaced with the appropriate
-character from |:syn-cchar| or 'listchars' depending on the current value of
-'conceallevel'. If you always want to display all text in your document,
-either set 'conceallevel' to zero before invoking 2html, or use: >
+<
+                                                      *g:html_ignore_conceal*
+Default: 0.
+When 0, concealed text is removed from the HTML and replaced with a character
+from |:syn-cchar| or 'listchars' as appropriate, depending on the current
+value of 'conceallevel'.
+When 1, include all text from the buffer in the generated HTML, even if it is
+|conceal|ed.
+
+Either of the following commands will ensure that all text in the buffer is
+included in the generated HTML (unless it is folded): >
    :let g:html_ignore_conceal = 1
-
-Similarly, closed folds are put in the HTML as they are displayed.  If you
-don't want this, use the |zR| command before invoking 2html, or use: >
+   :setl conceallevel=0
+<
+                                                      *g:html_ignore_folding*
+Default: 0.
+When 0, text in a closed fold is replaced by the text shown for the fold in
+Vim (|fold-foldtext|). See |g:html_dynamic_folds| if you also want to allow
+the user to expand the fold as in Vim to see the text inside.
+When 1, include all text from the buffer in the generated HTML; whether the
+text is in a fold has no impact at all. |g:html_dynamic_folds| has no effect.
+
+Either of these commands will ensure that all text in the buffer is included
+in the generated HTML (unless it is concealed): >
+   zR
    :let g:html_ignore_folding = 1
+<
+                                                       *g:html_dynamic_folds*
+Default: 0.
+When 0, text in a closed fold is not included at all in the generated HTML.
+When 1, generate javascript to open a fold and show the text within, just like
+in Vim.
 
-You may want to generate HTML that includes all the data within the folds, and
-allow the user to view the folded data similar to how they would in Vim. To
-generate this dynamic fold information, use: >
-   :let g:html_dynamic_folds = 1
-
-Using html_dynamic_folds will imply html_use_css, because it would be far too
-difficult to do it for old browsers. However, html_ignore_folding overrides
-html_dynamic_folds.
+Setting this variable to 1 causes 2html.vim to always use CSS for styling,
+regardless of what |g:html_use_css| is set to.
 
-Using html_dynamic_folds will default to generating a foldcolumn in the html
-similar to Vim's foldcolumn, that will use javascript to open and close the
-folds in the HTML document. The width of this foldcolumn starts at the current
-setting of |'foldcolumn'| but grows to fit the greatest foldlevel in your
-document. If you do not want to show a foldcolumn at all, use: >
+This variable is ignored when |g:html_ignore_folding| is set.
+>
+   :let g:html_dynamic_folds = 1
+<
+                                                       *g:html_no_foldcolumn*
+Default: 0.
+When 0, if |g:html_dynamic_folds| is 1, generate a column of text similar to
+Vim's foldcolumn (|fold-foldcolumn|) the user can click on to toggle folds
+open or closed. The minimum width of the generated text column is the current
+'foldcolumn' setting.
+When 1, do not generate this column; instead, hovering the mouse cursor over
+folded text will open the fold as if |g:html_hover_unfold| were set.
+>
    :let g:html_no_foldcolumn = 1
-
-Using this option, there will be no foldcolumn available to open the folds in
-the HTML. For this reason, another option is provided: html_hover_unfold.
-Enabling this option will use CSS 2.0 to allow a user to open a fold by
-hovering the mouse pointer over it. Note that old browsers (notably Internet
-Explorer 6) will not support this feature.  Browser-specific markup for IE6 is
-included to fall back to the normal CSS1 code so that the folds show up
-correctly for this browser, but they will not be openable without a
-foldcolumn. Note that using html_hover_unfold will allow modern browsers with
-disabled javascript to view closed folds. To use this option, use: >
+<
+                               *TOhtml-uncopyable-text* *g:html_prevent_copy*
+Default: empty string.
+This option prevents certain regions of the generated HTML from being copied,
+when you select all text in document rendered in a browser and copy it. Useful
+for allowing users to copy-paste only the source text even if a fold column or
+line numbers are shown in the generated content. Specify regions to be
+affected in this way as follows:
+       f:      fold column
+       n:      line numbers (also within fold text)
+       t:      fold text
+       d:      diff filler
+
+Example, to make the fold column and line numbers uncopyable: >
+       :let g:html_prevent_copy = "fn"
+<
+This feature is currently implemented by inserting read-only <input> elements
+into the markup to contain the uncopyable areas. This does not work well in
+all cases. When pasting to some applications which understand HTML, the
+<input> elements also get pasted. But plain-text paste destinations should
+always work.
+
+                                                          *g:html_no_invalid*
+Default: 0.
+When 0, if |g:html_prevent_copy| is non-empty, an invalid attribute is
+intentionally inserted into the <input> element for the uncopyable areas. This
+increases the number of applications you can paste to without also pasting the
+<input> elements. Specifically, Microsoft Word will not paste the <input>
+elements if they contain this invalid attribute.
+When 1, no invalid markup is ever intentionally inserted, and the generated
+page should validate. However, be careful pasting into Microsoft Word when
+|g:html_prevent_copy| is non-empty; it can be hard to get rid of the <input>
+elements which get pasted.
+
+                                                        *g:html_hover_unfold*
+Default: 0.
+When 0, the only way to open a fold generated by 2html.vim with
+|g:html_dynamic_folds| set, is to click on the generated fold column.
+When 1, use CSS 2.0 to allow the user to open a fold by moving the mouse
+cursor over the displayed fold text. This is useful to allow users with
+disabled javascript to view the folded text.
+
+Note that old browsers (notably Internet Explorer 6) will not support this
+feature.  Browser-specific markup for IE6 is included to fall back to the
+normal CSS1 styling so that the folds show up correctly for this browser, but
+they will not be openable without a foldcolumn.
+>
    :let g:html_hover_unfold = 1
+<
+                                                             *g:html_id_expr*
+Default: ""
+Dynamic folding and jumping to line IDs rely on unique IDs within the document
+to work. If generated HTML is copied into a larger document, these IDs are no
+longer guaranteed to be unique. Set g:html_id_expr to an expression Vim can
+evaluate to get a unique string to append to each ID used in a given document,
+so that the full IDs will be unique even when combined with other content in a
+larger HTML document. Example, to append _ and the buffer number to each ID: >
+
+       :let g:html_id_expr = '"_".bufnr("%")'
+<
+To append a string "_mystring" to the end of each ID: >
 
-Setting html_no_foldcolumn with html_dynamic_folds will automatically set
-html_hover_unfold, because otherwise the folds wouldn't be dynamic.
-
-By default "<pre>" and "</pre>" is used around the text.  This makes it show
-up as you see it in Vim, but without wrapping. If you prefer wrapping, at the
-risk of making some things look a bit different, use: >
+       :let g:html_id_expr = '"_mystring"'
+<
+Note, when converting a diff view to HTML, the expression will only be
+evaluated for the first window in the diff, and the result used for all the
+windows.
+
+                                         *TOhtml-wrap-text* *g:html_pre_wrap*
+Default: current 'wrap' setting.
+When 0, if |g:html_no_pre| is 0 or unset, the text in the generated HTML does
+not wrap at the edge of the browser window.
+When 1, if |g:html_use_css| is 1, the CSS 2.0 "white-space:pre-wrap" value is
+used, causing the text to wrap at whitespace at the edge of the browser
+window.
+Explicitly enable text wrapping: >
+   :let g:html_pre_wrap = 1
+Explicitly disable wrapping: >
+   :let g:html_pre_wrap = 0
+Go back to default, determine wrapping from 'wrap' setting: >
+   :unlet g:html_pre_wrap
+<
+                                                              *g:html_no_pre*
+Default: 0.
+When 0, buffer text in the generated HTML is surrounded by <pre>...</pre>
+tags. Series of whitespace is shown as in Vim without special markup, and tab
+characters can be included literally (see |g:html_expand_tabs|).
+When 1 (not recommended), the <pre> tags are omitted, and a plain <div> is
+used instead. Whitespace is replaced by a series of &nbsp; character
+references, and <br> is used to end each line. This is another way to allow
+text in the generated HTML is wrap (see |g:html_pre_wrap|) which also works in
+old browsers, but may cause noticeable differences between Vim's display and
+the rendered page generated by 2html.vim.
+>
    :let g:html_no_pre = 1
-This will use <br> at the end of each line and use "&nbsp;" for repeated
-spaces.
-
-The current value of 'encoding' is used to specify the charset of the HTML
-file.  This only works for those values of 'encoding' that have an equivalent
-HTML charset name.  To overrule this set g:html_use_encoding to the name of
-the charset to be used: >
-   :let g:html_use_encoding = "foobar"
-To omit the line that specifies the charset, set g:html_use_encoding to an
-empty string: >
+<
+                                                         *g:html_expand_tabs*
+Default: 1 if 'tabstop' is 8, 'expandtab' is 0, and no fold column or line
+               numbers occur in the generated HTML;
+        0 otherwise.
+When 0, <Tab> characters in the buffer text are replaced with an appropriate
+number of space characters, or &nbsp; references if |g:html_no_pre| is 1.
+When 1, if |g:html_no_pre| is 0 or unset, <Tab> characters in the buffer text
+are included as-is in the generated HTML. This is useful for when you want to
+allow copy and paste from a browser without losing the actual whitespace in
+the source document. Note that this can easily break text alignment and
+indentation in the HTML, unless set by default.
+
+Force |2html.vim| to keep <Tab> characters: >
+   :let g:html_expand_tabs = 0
+<
+Force tabs to be expanded: >
+   :let g:html_expand_tabs = 1
+<
+                                   *TOhtml-encoding-detect* *TOhtml-encoding*
+It is highly recommended to set your desired encoding with
+|g:html_use_encoding| for any content which will be placed on a web server.
+
+If you do not specify an encoding, |2html.vim| uses the preferred IANA name
+for the current value of 'fileencoding' if set, or 'encoding' if not.
+'encoding' is always used for certain 'buftype' values. 'fileencoding' will be
+set to match the chosen document encoding.
+
+Automatic detection works for the encodings mentioned specifically by name in
+|encoding-names|, but TOhtml will only automatically use those encodings with
+wide browser support. However, you can override this to support specific
+encodings that may not be automatically detected by default (see options
+below). See http://www.iana.org/assignments/character-sets for the IANA names.
+
+Note, by default all Unicode encodings are converted to UTF-8 with no BOM in
+the generated HTML, as recommended by W3C:
+
+       http://www.w3.org/International/questions/qa-choosing-encodings
+       http://www.w3.org/International/questions/qa-byte-order-mark
+
+                                                        *g:html_use_encoding*
+Default: none, uses IANA name for current 'fileencoding' as above.
+To overrule all automatic charset detection, set g:html_use_encoding to the
+name of the charset to be used. It is recommended to set this variable to
+something widely supported, like UTF-8, for anything you will be hosting on a
+webserver: >
+   :let g:html_use_encoding = "UTF-8"
+You can also use this option to omit the line that specifies the charset
+entirely, by setting g:html_use_encoding to an empty string (NOT recommended): >
    :let g:html_use_encoding = ""
-To go back to the automatic mechanism, delete the g:html_use_encoding
+To go back to the automatic mechanism, delete the |g:html_use_encoding|
 variable: >
    :unlet g:html_use_encoding
 <
-For diff mode a sequence of more than 3 filler lines is displayed as three
-lines with the middle line mentioning the total number of inserted lines.  If
-you prefer to see all the inserted lines use: >
-    :let g:html_whole_filler = 1
-And to go back to displaying up to three lines again: >
-    :unlet g:html_whole_filler
+                                                   *g:html_encoding_override*
+Default: none, autoload/tohtml.vim contains default conversions for encodings
+               mentioned by name at |encoding-names|.
+This option allows |2html.vim| to detect the correct 'fileencoding' when you
+specify an encoding with |g:html_use_encoding| which is not in the default
+list of conversions.
+
+This is a dictionary of charset-encoding pairs that will replace existing
+pairs automatically detected by TOhtml, or supplement with new pairs.
+
+Detect the HTML charset "windows-1252" as the encoding "8bit-cp1252": >
+   :let g:html_encoding_override = {'windows-1252': '8bit-cp1252'}
 <
-                                           *convert-to-XML* *convert-to-XHTML*
-An alternative is to have the script generate XHTML (XML compliant HTML).  To
-do this set the "html_use_xhtml" variable: >
+                                                    *g:html_charset_override*
+Default: none, autoload/tohtml.vim contains default conversions for encodings
+               mentioned by name at |encoding-names| and which have wide
+               browser support.
+This option allows |2html.vim| to detect the HTML charset for any
+'fileencoding' or 'encoding' which is not detected automatically. You can also
+use it to override specific existing encoding-charset pairs. For example,
+TOhtml will by default use UTF-8 for all Unicode/UCS encodings. To use UTF-16
+and UTF-32 instead, use: >
+   :let g:html_charset_override = {'ucs-4': 'UTF-32', 'utf-16': 'UTF-16'}
+
+Note that documents encoded in either UTF-32 or UTF-16 have known
+compatibility problems with some major browsers.
+
+                       *convert-to-XML* *convert-to-XHTML* *g:html_use_xhtml*
+Default: 0.
+When 0, generate standard HTML 4.01 (strict when possible).
+When 1, generate XHTML 1.0 instead (XML compliant HTML).
+>
     :let g:html_use_xhtml = 1
-
-Any of these options can be enabled or disabled by setting them explicitly to
-the desired value, or restored to their default by removing the variable using
-|:unlet|.
-
-Remarks:
-- This only works in a version with GUI support.  If the GUI is not actually
-  running (possible for X11) it still works, but not very well (the colors
-  may be wrong).
-- Some truly ancient browsers may not show the background colors.
-- From most browsers you can also print the file (in color)!
-
-Here is an example how to run the script over all .c and .h files from a
-Unix shell: >
-   for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done
 <
 
 ABEL                                           *abel.vim* *ft-abel-syntax*
@@ -589,7 +828,11 @@ The most flexible is to add a line in your assembly file containing: >
        asmsyntax=nasm
 Replace "nasm" with the name of the real assembly syntax.  This line must be
 one of the first five lines in the file.  No non-white text must be
-immediately before or after this text.
+immediately before or after this text.  Note that specifying asmsyntax=foo is
+equivalent to setting ft=foo in a |modeline|, and that in case of a conflict
+between the two settings the one from the modeline will take precedence (in
+particular, if you have ft=asm in the modeline, you will get the GNU syntax
+highlighting regardless of what is specified as asmsyntax).
 
 The syntax type can always be overruled for a specific buffer by setting the
 b:asmsyntax variable: >
@@ -694,10 +937,12 @@ c_no_ansi         don't do standard ANSI types and constants
 c_ansi_typedefs                 ... but do standard ANSI types
 c_ansi_constants        ... but do standard ANSI constants
 c_no_utf               don't highlight \u and \U in strings
-c_syntax_for_h         use C syntax for *.h files, instead of C++
+c_syntax_for_h         for *.h files use C syntax instead of C++ and use objc
+                       syntax instead of objcpp
 c_no_if0               don't highlight "#if 0" blocks as comments
 c_no_cformat           don't highlight %-formats in strings
 c_no_c99               don't highlight C99 standard items
+c_no_c11               don't highlight C11 standard items
 
 When 'foldmethod' is set to "syntax" then /* */ comments and { } blocks will
 become a fold.  If you don't want comments to become a fold use: >
@@ -798,6 +1043,14 @@ comment highlighting, add the following line to your startup file: >
 The ColdFusion syntax file is based on the HTML syntax file.
 
 
+CPP                                            *cpp.vim* *ft-cpp-syntax*
+
+Most of things are same as |ft-c-syntax|.
+
+Variable               Highlight ~
+cpp_no_c11             don't highlight C++11 standard items
+
+
 CSH                                            *csh.vim* *ft-csh-syntax*
 
 This covers the shell named "csh".  Note that on some systems tcsh is actually
@@ -806,13 +1059,13 @@ used.
 Detecting whether a file is csh or tcsh is notoriously hard.  Some systems
 symlink /bin/csh to /bin/tcsh, making it almost impossible to distinguish
 between csh and tcsh.  In case VIM guesses wrong you can set the
-"filetype_csh" variable.  For using csh: >
-
-       :let filetype_csh = "csh"
+"filetype_csh" variable.  For using csh:  *g:filetype_csh*
+>
+       :let g:filetype_csh = "csh"
 
 For using tcsh: >
 
-       :let filetype_csh = "tcsh"
+       :let g:filetype_csh = "tcsh"
 
 Any script with a tcsh extension or a standard tcsh filename (.tcshrc,
 tcsh.tcshrc, tcsh.login) will have filetype tcsh.  All other tcsh/csh scripts
@@ -872,8 +1125,8 @@ line to your startup file: >
 
 
 DOCBOOK                                        *docbk.vim* *ft-docbk-syntax* *docbook*
-DOCBOOK        XML                             *docbkxml.vim* *ft-docbkxml-syntax*
-DOCBOOK        SGML                            *docbksgml.vim* *ft-docbksgml-syntax*
+DOCBOOK XML                            *docbkxml.vim* *ft-docbkxml-syntax*
+DOCBOOK SGML                           *docbksgml.vim* *ft-docbksgml-syntax*
 
 There are two types of DocBook files: SGML and XML.  To specify what type you
 are using the "b:docbk_type" variable should be set.  Vim does this for you
@@ -889,6 +1142,10 @@ Simpler is setting the filetype to "docbkxml" or "docbksgml": >
 or: >
        :set filetype=docbkxml
 
+You can specify the DocBook version: >
+       :let docbk_ver = 3
+When not set 4 is used.
+
 
 DOSBATCH                               *dosbatch.vim* *ft-dosbatch-syntax*
 
@@ -925,9 +1182,9 @@ Example: >
 or >
        // vim:syntax=c.doxygen
 
-It can also be done automatically for C, C++, C# and IDL files by setting the
-global or buffer-local variable load_doxygen_syntax.  This is done by adding
-the following to your .vimrc. >
+It can also be done automatically for C, C++, C#, IDL and PHP files by setting
+the global or buffer-local variable load_doxygen_syntax.  This is done by
+adding the following to your .vimrc. >
        :let g:load_doxygen_syntax=1
 
 There are a couple of variables that have an effect on syntax highlighting, and
@@ -1026,22 +1283,24 @@ to your startup file.
 
 ERLANG                                         *erlang.vim* *ft-erlang-syntax*
 
-The erlang highlighting supports Erlang (ERicsson LANGuage).
-Erlang is case sensitive and default extension is ".erl".
+Erlang is a functional programming language developed by Ericsson.  Files with
+the following extensions are recognized as Erlang files: erl, hrl, yaws.
 
-If you want to disable keywords highlighting, put in your .vimrc: >
-       :let erlang_keywords = 1
-If you want to disable built-in-functions highlighting, put in your
-.vimrc file: >
-       :let erlang_functions = 1
-If you want to disable special characters highlighting, put in
-your .vimrc: >
-       :let erlang_characters = 1
+The BIFs (built-in functions) are highlighted by default. To disable this,
+put the following line in your vimrc: >
+
+      :let g:erlang_highlight_bifs = 0
+
+To enable highlighting some special atoms, put this in your vimrc: >
+
+      :let g:erlang_highlight_special_atoms = 1
 
 
 FLEXWIKI                               *flexwiki.vim* *ft-flexwiki-syntax*
 
 FlexWiki is an ASP.NET-based wiki package available at http://www.flexwiki.com
+NOTE: this site currently doesn't work, on Wikipedia is mentioned that
+development stopped in 2009.
 
 Syntax highlighting is available for the most common elements of FlexWiki
 syntax. The associated ftplugin script sets some buffer-local options to make
@@ -1093,14 +1352,12 @@ conditionals are LightBlue for better distinction.
 FORTRAN                                        *fortran.vim* *ft-fortran-syntax*
 
 Default highlighting and dialect ~
-Highlighting appropriate for f95 (Fortran 95) is used by default.  This choice
-should be appropriate for most users most of the time because Fortran 95 is a
-superset of Fortran 90 and almost a superset of Fortran 77. Support for 
-Fortran 2003 and Fortran 2008 features has been introduced and is
-automatically available in the default (f95) highlighting.
+Highlighting appropriate for Fortran 2008 is used by default.  This choice
+should be appropriate for most users most of the time because Fortran 2008 is
+almost a superset of previous versions (Fortran 2003, 95, 90, and 77).
 
 Fortran source code form ~
-Fortran 9x code can be in either fixed or free source form.  Note that the
+Fortran code can be in either fixed or free source form.  Note that the
 syntax highlighting will not be correct if the form is incorrectly set.
 
 When you create a new fortran file, the syntax script assumes fixed source
@@ -1181,52 +1438,54 @@ recognized, as will construct names at the end of a do, if, select or forall
 construct.
 
 Non-default fortran dialects ~
-The syntax script supports five Fortran dialects: f95, f90, f77, the Lahey
-subset elf90, and the Imagine1 subset F.
-
-If you use f77 with extensions, even common ones like do/enddo loops, do/while
-loops and free source form that are supported by most f77 compilers including
-g77 (GNU Fortran), then you will probably find the default highlighting
-satisfactory.  However, if you use strict f77 with no extensions, not even free
-source form or the MIL STD 1753 extensions, then the advantages of setting the
-dialect to f77 are that names such as SUM are recognized as user variable
-names and not highlighted as f9x intrinsic functions, that obsolete constructs
-such as ASSIGN statements are not highlighted as todo items, and that fixed
-source form will be assumed.
-
-If you use elf90 or F, the advantage of setting the dialect appropriately is
-that f90 features excluded from these dialects will be highlighted as todo
-items and that free source form will be assumed as required for these
-dialects.
-
-The dialect can be selected by setting the variable fortran_dialect.  The
-permissible values of fortran_dialect are case-sensitive and must be "f95",
-"f90", "f77", "elf" or "F".  Invalid values of fortran_dialect are ignored.
-
-If all your fortran files use the same dialect, set fortran_dialect in your
-.vimrc prior to your syntax on statement.  If the dialect depends upon the file
-extension, then it is most convenient to set it in a ftplugin file.  For more
-information on ftplugin files, see |ftplugin|.  For example, if all your
-fortran files with an .f90 extension are written in the elf subset, your
-ftplugin file should contain the code >
+The syntax script supports two Fortran dialects: f08 and F. You will probably
+find the default highlighting (f08) satisfactory.  A few legacy constructs
+deleted or declared obsolescent in the 2008 standard are highlighted as todo
+items.
+
+If you use F, the advantage of setting the dialect appropriately is that
+other legacy features excluded from F will be highlighted as todo items and
+that free source form will be assumed.
+
+The dialect can be selected in various ways.  If all your fortran files use
+the same dialect, set the global variable fortran_dialect in your .vimrc prior
+to your syntax on statement.  The case-sensitive, permissible values of
+fortran_dialect are "f08" or "F".  Invalid values of fortran_dialect are
+ignored.
+
+If the dialect depends upon the file extension, then it is most convenient to
+set a buffer-local variable in a ftplugin file.  For more information on
+ftplugin files, see |ftplugin|.  For example, if all your fortran files with
+an .f90 extension are written in the F subset, your ftplugin file should
+contain the code >
     let s:extfname = expand("%:e")
     if s:extfname ==? "f90"
-       let fortran_dialect="elf"
+       let b:fortran_dialect="F"
     else
-       unlet! fortran_dialect
+       unlet! b:fortran_dialect
     endif
 Note that this will work only if the "filetype plugin indent on" command
 precedes the "syntax on" command in your .vimrc file.
 
 Finer control is necessary if the file extension does not uniquely identify
-the dialect.  You can override the default dialect, on a file-by-file basis, by
-including a comment with the directive "fortran_dialect=xx" (where xx=f77 or
-elf or F or f90 or f95) in one of the first three lines in your file.  For
-example, your older .f files may be written in extended f77 but your newer
-ones may be F codes, and you would identify the latter by including in the
-first three lines of those files a Fortran comment of the form >
+the dialect.  You can override the default dialect, on a file-by-file basis,
+by including a comment with the directive "fortran_dialect=xx" (where xx=F or
+f08) in one of the first three lines in your file.  For example, your older .f
+files may be legacy code but your newer ones may be F codes, and you would
+identify the latter by including in the first three lines of those files a
+Fortran comment of the form >
   ! fortran_dialect=F
-F overrides elf if both directives are present.
+
+For previous versions of the syntax, you may have set fortran_dialect to the
+now-obsolete values "f77", "f90", "f95", or "elf". Such settings will be
+silently handled as "f08". Users of "elf" may wish to experiment with "F"
+instead.
+
+The syntax/fortran.vim script contains embedded comments that tell you how to
+comment and/or uncomment some lines to (a) activate recognition of some
+non-standard, vendor-supplied intrinsics and (b) to prevent features deleted
+or declared obsolescent in the 2008 standard from being highlighted as todo
+items.
 
 Limitations ~
 Parenthesis checking does not catch too few closing parentheses.  Hollerith
@@ -1541,11 +1800,6 @@ which are used for the statement itself, special characters used in debug
 strings, strings, boolean constants and types (this, super) respectively.  I
 have opted to chose another background for those statements.
 
-In order to help you write code that can be easily ported between Java and
-C++, all C++ keywords can be marked as an error in a Java program.  To
-have this add this line in your .vimrc file: >
-       :let java_allow_cpp_keywords = 0
-
 Javadoc is a program that takes special comments out of Java program files and
 creates HTML pages.  The standard configuration will highlight this HTML code
 similarly to HTML files (see |html.vim|).  You can even add Javascript
@@ -1684,19 +1938,10 @@ instead, and the name of your source file should be *.pike
 
 LUA                                            *lua.vim* *ft-lua-syntax*
 
-This syntax file may be used for Lua 4.0, Lua 5.0 or Lua 5.1 (the latter is
+The Lua syntax file can be used for versions 4.0, 5.0, 5.1 and 5.2 (5.2 is
 the default). You can select one of these versions using the global variables
 lua_version and lua_subversion. For example, to activate Lua
-4.0 syntax highlighting, use this command: >
-
-       :let lua_version = 4
-
-If you are using Lua 5.0, use these commands: >
-
-       :let lua_version = 5
-       :let lua_subversion = 0
-
-To restore highlighting for Lua 5.1: >
+5.1 syntax highlighting, set the variables like this:
 
        :let lua_version = 5
        :let lua_subversion = 1
@@ -1868,7 +2113,7 @@ Therefore, you should be careful about not using more space between sentences
 than you intend to have in your final document.  For this reason, the common
 practice is to insert a carriage return immediately after all punctuation
 marks.  If you want to have "even" text in your final processed output, you
-need to maintaining regular spacing in the input text.  To mark both trailing
+need to maintain regular spacing in the input text.  To mark both trailing
 spaces and two or more spaces after a punctuation as an error, use: >
 
   :let nroff_space_errors = 1
@@ -1987,9 +2232,11 @@ PERL                                             *perl.vim* *ft-perl-syntax*
 
 There are a number of possible options to the perl syntax highlighting.
 
-If you use POD files or POD segments, you might: >
+Inline POD highlighting is now turned on by default.  If you don't wish
+to have the added complexity of highlighting POD embedded within Perl
+files, you may set the 'perl_include_pod' option to 0: >
 
-       :let perl_include_pod = 1
+       :let perl_include_pod = 0
 
 The reduce the complexity of parsing (and increase performance) you can switch
 off two elements in the parsing of variable names and contents. >
@@ -2042,13 +2289,20 @@ If you want to fold blocks in if statements, etc. as well set the following: >
 
        :let perl_fold_blocks = 1
 
-To avoid folding packages or subs when perl_fold is let, let the appropriate
-variable(s): >
+Subroutines are folded by default if 'perl_fold' is set.  If you do not want
+this, you can set 'perl_nofold_subs': >
 
-       :unlet perl_nofold_packages
-       :unlet perl_nofold_subs
+       :let perl_nofold_subs = 1
 
+Anonymous subroutines are not folded by default; you may enable their folding
+via 'perl_fold_anonymous_subs': >
 
+       :let perl_fold_anonymous_subs = 1
+
+Packages are also folded by default if 'perl_fold' is set.  To disable this
+behavior, set 'perl_nofold_packages': >
+
+       :let perl_nofold_packages = 1
 
 PHP3 and PHP4          *php.vim* *php3.vim* *ft-php-syntax* *ft-php3-syntax*
 
@@ -2085,7 +2339,7 @@ For highlighting parent error ] or ): >
 
   let php_parent_error_close = 1
 
-For skipping an php end tag, if there exists an open ( or [ without a closing
+For skipping a php end tag, if there exists an open ( or [ without a closing
 one: >
 
   let php_parent_error_open = 1
@@ -2247,24 +2501,33 @@ Pascal.  Use this if you don't use assembly and Pascal: >
 
 PYTHON                                         *python.vim* *ft-python-syntax*
 
-There are four options to control Python syntax highlighting.
+There are six options to control Python syntax highlighting.
 
 For highlighted numbers: >
-       :let python_highlight_numbers = 1
+       :let python_no_number_highlight = 1
 
 For highlighted builtin functions: >
-       :let python_highlight_builtins = 1
+       :let python_no_builtin_highlight = 1
 
 For highlighted standard exceptions: >
-       :let python_highlight_exceptions = 1
+       :let python_no_exception_highlight = 1
 
-For highlighted trailing whitespace and mix of spaces and tabs:
-       :let python_highlight_space_errors = 1
+For highlighted doctests and code inside: >
+       :let python_no_doctest_highlight = 1
+or >
+       :let python_no_doctest_code_highlight = 1
+(first option implies second one).
+
+For highlighted trailing whitespace and mix of spaces and tabs: >
+       :let python_space_error_highlight = 1
 
 If you want all possible Python highlighting (the same as setting the
-preceding three options): >
+preceding last option and unsetting all other ones): >
        :let python_highlight_all = 1
 
+Note: only existence of these options matter, not their value. You can replace
+      1 above with anything.
+
 
 QUAKE                                          *quake.vim* *ft-quake-syntax*
 
@@ -2300,6 +2563,12 @@ This will add highlighting for the commands that BASH (version 2.05a and
 later, and part earlier) adds.
 
 
+RESTRUCTURED TEXT                      *rst.vim* *ft-rst-syntax*
+
+You may set what syntax definitions should be used for code blocks via
+       let rst_syntax_code_list = ['vim', 'lisp', ...]
+
+
 REXX                                           *rexx.vim* *ft-rexx-syntax*
 
 If you notice highlighting errors while scrolling backwards, which are fixed
@@ -2310,6 +2579,12 @@ This will make the syntax synchronization start 50 lines before the first
 displayed line.  The default value is 10.  The disadvantage of using a larger
 number is that redrawing can become slow.
 
+Vim tries to guess what type a ".r" file is.  If it can't be detected (from
+comment lines), the default is "r".  To make the default rexx add this line to
+your .vimrc:  *g:filetype_r*
+>
+       :let g:filetype_r = "r"
+
 
 RUBY                                           *ruby.vim* *ft-ruby-syntax*
 
@@ -2537,8 +2812,41 @@ reduce this, the "sh_maxlines" internal variable can be set.  Example: >
 The default is to use the twice sh_minlines.  Set it to a smaller number to
 speed up displaying.  The disadvantage is that highlight errors may appear.
 
+                                               *g:sh_isk* *g:sh_noisk*
+The shell languages appear to let "." be part of words, commands, etc;
+consequently it should be in the isk for sh.vim.  As of v116 of syntax/sh.vim,
+syntax/sh.vim will append the "." to |'iskeyword'| by default; you may control
+this behavior with: >
+       let g:sh_isk  = '..whatever characters you want as part of iskeyword'
+       let g:sh_noisk= 1  " otherwise, if this exists, the isk will NOT chg
+<
+                                               *sh-embed*  *sh-awk*
+ Sh: EMBEDDING LANGUAGES~
+
+You may wish to embed languages into sh.  I'll give an example courtesy of
+Lorance Stinson on how to do this with awk as an example. Put the following
+file into $HOME/.vim/after/syntax/sh/awkembed.vim: >
+
+    " AWK Embedding: {{{1
+    " ==============
+    " Shamelessly ripped from aspperl.vim by Aaron Hope.
+    if exists("b:current_syntax")
+      unlet b:current_syntax
+    endif
+    syn include @AWKScript syntax/awk.vim
+    syn region AWKScriptCode matchgroup=AWKCommand start=+[=\\]\@<!'+ skip=+\\'+ end=+'+ contains=@AWKScript contained
+    syn region AWKScriptEmbedded matchgroup=AWKCommand start=+\<awk\>+ skip=+\\$+ end=+[=\\]\@<!'+me=e-1 contains=@shIdList,@shExprList2 nextgroup=AWKScriptCode
+    syn cluster shCommandSubList add=AWKScriptEmbedded
+    hi def link AWKCommand Type
+<
+This code will then let the awk code in the single quotes: >
+       awk '...awk code here...'
+be highlighted using the awk highlighting syntax.  Clearly this may be
+extended to other languages.
 
-SPEEDUP (AspenTech plant simulator)            *spup.vim* *ft-spup-syntax*
+
+SPEEDUP                                                *spup.vim* *ft-spup-syntax*
+(AspenTech plant simulator)
 
 The Speedup syntax file has some options:
 
@@ -2610,9 +2918,24 @@ tcsh_minlines is 100.  The disadvantage of using a larger number is that
 redrawing can become slow.
 
 
-TEX                                            *tex.vim* *ft-tex-syntax*
-
-                                                               *tex-folding*
+TEX                            *tex.vim* *ft-tex-syntax* *latex-syntax*
+
+                       Tex Contents~
+       Tex: Want Syntax Folding?                       |tex-folding|
+       Tex: No Spell Checking Wanted                   |g:tex_nospell|
+       Tex: Don't Want Spell Checking In Comments?     |tex-nospell|
+       Tex: Want Spell Checking in Verbatim Zones?     |tex-verb|
+       Tex: Run-on Comments or MathZones               |tex-runon|
+       Tex: Slow Syntax Highlighting?                  |tex-slow|
+       Tex: Want To Highlight More Commands?           |tex-morecommands|
+       Tex: Excessive Error Highlighting?              |tex-error|
+       Tex: Need a new Math Group?                     |tex-math|
+       Tex: Starting a New Style?                      |tex-style|
+       Tex: Taking Advantage of Conceal Mode           |tex-conceal|
+       Tex: Selective Conceal Mode                     |g:tex_conceal|
+       Tex: Controlling iskeyword                      |g:tex_isk|
+
+                               *tex-folding* *g:tex_fold_enabled*
  Tex: Want Syntax Folding? ~
 
 As of version 28 of <syntax/tex.vim>, syntax-based folding of parts, chapters,
@@ -2621,16 +2944,28 @@ sections, subsections, etc are supported.  Put >
 in your <.vimrc>, and :set fdm=syntax.  I suggest doing the latter via a
 modeline at the end of your LaTeX file: >
        % vim: fdm=syntax
+If your system becomes too slow, then you might wish to look into >
+       https://vimhelp.appspot.com/vim_faq.txt.html#faq-29.7
 <
-                                                               *tex-nospell*
+                                               *g:tex_nospell*
+ Tex: No Spell Checking Wanted~
+
+If you don't want spell checking anywhere in your LaTeX document, put >
+       let g:tex_nospell=1
+into your .vimrc.  If you merely wish to suppress spell checking inside
+comments only, see |g:tex_comment_nospell|.
+
+                               *tex-nospell* *g:tex_comment_nospell*
  Tex: Don't Want Spell Checking In Comments? ~
 
 Some folks like to include things like source code in comments and so would
 prefer that spell checking be disabled in comments in LaTeX files.  To do
 this, put the following in your <.vimrc>: >
       let g:tex_comment_nospell= 1
-<
-                                                               *tex-verb*
+If you want to suppress spell checking everywhere inside your LaTeX document,
+see |g:tex_nospell|.
+
+                               *tex-verb* *g:tex_verbspell*
  Tex: Want Spell Checking in Verbatim Zones?~
 
 Often verbatim regions are used for things like source code; seldom does
@@ -2638,7 +2973,7 @@ one want source code spell-checked.  However, for those of you who do
 want your verbatim zones spell-checked, put the following in your <.vimrc>: >
        let g:tex_verbspell= 1
 <
-                                                               *tex-runon*
+                                       *tex-runon* *tex-stopzone*
  Tex: Run-on Comments or MathZones ~
 
 The <syntax/tex.vim> highlighting supports TeX, LaTeX, and some AmsTeX.  The
@@ -2651,7 +2986,7 @@ special "TeX comment" has been provided >
 which will forcibly terminate the highlighting of either a texZone or a
 texMathZone.
 
-                                                               *tex-slow*
+                                       *tex-slow* *tex-sync*
  Tex: Slow Syntax Highlighting? ~
 
 If you have a slow computer, you may wish to reduce the values for >
@@ -2661,7 +2996,39 @@ If you have a slow computer, you may wish to reduce the values for >
 increase them. This primarily affects synchronizing (i.e. just what group,
 if any, is the text at the top of the screen supposed to be in?).
 
-                                           *tex-morecommands* *tex-package*
+Another cause of slow highlighting is due to syntax-driven folding; see
+|tex-folding| for a way around this.
+
+                                       *g:tex_fast*
+
+Finally, if syntax highlighting is still too slow, you may set >
+
+       :let g:tex_fast= ""
+
+in your .vimrc.  Used this way, the g:tex_fast variable causes the syntax
+highlighting script to avoid defining any regions and associated
+synchronization.  The result will be much faster syntax highlighting; the
+price: you will no longer have as much highlighting or any syntax-based
+folding, and you will be missing syntax-based error checking.
+
+You may decide that some syntax is acceptable; you may use the following table
+selectively to enable just some syntax highlighting: >
+
+    b : allow bold and italic syntax
+    c : allow texComment syntax
+    m : allow texMatcher syntax (ie. {...} and [...])
+    M : allow texMath syntax
+    p : allow parts, chapter, section, etc syntax
+    r : allow texRefZone syntax (nocite, bibliography, label, pageref, eqref)
+    s : allow superscript/subscript regions
+    S : allow texStyle syntax
+    v : allow verbatim syntax
+    V : allow texNewEnv and texNewCmd syntax
+<
+As an example, let g:tex_fast= "M" will allow math-associated highlighting
+but suppress all the other region-based syntax highlighting.
+
+                                       *tex-morecommands* *tex-package*
  Tex: Want To Highlight More Commands? ~
 
 LaTeX is a programmable language, and so there are thousands of packages full
@@ -2669,16 +3036,18 @@ of specialized LaTeX commands, syntax, and fonts.  If you're using such a
 package you'll often wish that the distributed syntax/tex.vim would support
 it.  However, clearly this is impractical.  So please consider using the
 techniques in |mysyntaxfile-add| to extend or modify the highlighting provided
-by syntax/tex.vim.
+by syntax/tex.vim.  Please consider uploading any extensions that you write,
+which typically would go in $HOME/after/syntax/tex/[pkgname].vim, to
+http://vim.sf.net/.
 
-                                                               *tex-error*
+                                       *tex-error* *g:tex_no_error*
  Tex: Excessive Error Highlighting? ~
 
 The <tex.vim> supports lexical error checking of various sorts.  Thus,
 although the error checking is ofttimes very useful, it can indicate
 errors where none actually are.  If this proves to be a problem for you,
 you may put in your <.vimrc> the following statement: >
-       let tex_no_error=1
+       let g:tex_no_error=1
 and all error checking by <syntax/tex.vim> will be suppressed.
 
                                                                *tex-math*
@@ -2696,7 +3065,7 @@ and then to the call to it in .vim/after/syntax/tex.vim.
 The "starform" variable, if true, implies that your new math group
 has a starred form (ie. eqnarray*).
 
-                                                               *tex-style*
+                                       *tex-style* *b:tex_stylish*
  Tex: Starting a New Style? ~
 
 One may use "\makeatletter" in *.tex files, thereby making the use of "@" in
@@ -2723,14 +3092,15 @@ In fact, only a few characters are supported as subscripts.
 One way to use this is to have vertically split windows (see |CTRL-W_v|); one
 with |'conceallevel'| at 0 and the other at 2; and both using |'scrollbind'|.
 
-                                                       *g:tex_conceal*
+                                       *g:tex_conceal*
  Tex: Selective Conceal Mode~
 
 You may selectively use conceal mode by setting g:tex_conceal in your
-<.vimrc>.  By default it is set to "admgs" to enable conceal for the
-following sets of characters: >
+<.vimrc>.  By default, g:tex_conceal is set to "admgs" to enable concealment
+for the following sets of characters: >
 
        a = accents/ligatures
+       b = bold and italic
        d = delimiters
        m = math symbols
        g = Greek
@@ -2739,6 +3109,25 @@ following sets of characters: >
 By leaving one or more of these out, the associated conceal-character
 substitution will not be made.
 
+                                               *g:tex_isk* *g:tex_stylish*
+ Tex: Controlling iskeyword~
+
+Normally, LaTeX keywords support 0-9, a-z, A-z, and 192-255 only. Latex
+keywords don't support the underscore - except when in *.sty files.  The
+syntax highlighting script handles this with the following logic:
+
+       * If g:tex_stylish exists and is 1
+               then the file will be treated as a "sty" file, so the "_"
+               will be allowed as part of keywords
+               (irregardless of g:tex_isk)
+       * Else if the file's suffix is sty, cls, clo, dtx, or ltx,
+               then the file will be treated as a "sty" file, so the "_"
+               will be allowed as part of keywords
+               (irregardless of g:tex_isk)
+
+       * If g:tex_isk exists, then it will be used for the local 'iskeyword'
+       * Else the local 'iskeyword' will be set to 48-57,a-z,A-Z,192-255
+
 
 TF                                             *tf.vim* *ft-tf-syntax*
 
@@ -2748,8 +3137,7 @@ For syncing, minlines defaults to 100.    If you prefer another value, you can
 set "tf_minlines" to the value you desire.  Example: >
 
        :let tf_minlines = your choice
-
-
+<
 VIM                    *vim.vim*               *ft-vim-syntax*
                        *g:vimsyn_minlines*     *g:vimsyn_maxlines*
 There is a trade-off between more accurate syntax highlighting versus screen
@@ -2792,7 +3180,7 @@ Some folding is now supported with syntax/vim.vim: >
    g:vimsyn_folding =~ 'P' : fold python   script
    g:vimsyn_folding =~ 'r' : fold ruby     script
    g:vimsyn_folding =~ 't' : fold tcl      script
-
+<
                                                        *g:vimsyn_noerror*
 Not all error highlighting that syntax/vim.vim does may be correct; VimL is a
 difficult language to highlight correctly.  A way to suppress error
@@ -3174,6 +3562,9 @@ DEFINING REGIONS  *:syn-region* *:syn-start* *:syn-skip* *:syn-end*
    :hi par1 ctermfg=red guifg=red
    :hi par2 ctermfg=blue guifg=blue
    :hi par3 ctermfg=darkgreen guifg=darkgreen
+<
+                                               *E849*
+The maximum number of syntax groups is 19999.
 
 ==============================================================================
 6. :syntax arguments                                   *:syn-arguments*
@@ -3218,11 +3609,12 @@ Whether or not they are actually concealed depends on the setting on the
 in this way when they have their own highlighting via "matchgroup"
 
 cchar                                                  *:syn-cchar*
-
+                                                       *E844*
 The "cchar" argument defines the character shown in place of the item
 when it is concealed (setting "cchar" only makes sense when the conceal
 argument is given.) If "cchar" is not set then the default conceal
-character defined in the 'listchars' option is used. Example: >
+character defined in the 'listchars' option is used.  The character cannot be
+a control character such as Tab.  Example: >
    :syntax match Entity "&amp;" conceal cchar=&
 See |hl-Conceal| for highlighting.
 
@@ -3536,7 +3928,7 @@ s-{nr}    start of the matched pattern plus {nr} chars to the left
 e      end of the matched pattern
 e+{nr} end of the matched pattern plus {nr} chars to the right
 e-{nr} end of the matched pattern plus {nr} chars to the left
-{nr}   (for "lc" only): start matching {nr} chars to the left
+{nr}   (for "lc" only): start matching {nr} chars right of the start
 
 Examples: "ms=s+1", "hs=e-2", "lc=3".
 
@@ -3633,10 +4025,10 @@ External matches                                        *:syn-ext-match*
 
 These extra regular expression items are available in region patterns:
 
-                                               */\z(* */\z(\)* *E50* *E52*
-    \z(\)      Marks the sub-expression as "external", meaning that it is can
-               be accessed from another pattern match.  Currently only usable
-               in defining a syntax region start pattern.
+                                       */\z(* */\z(\)* *E50* *E52* *E879*
+    \z(\)      Marks the sub-expression as "external", meaning that it can be
+               accessed from another pattern match.  Currently only usable in
+               defining a syntax region start pattern.
 
                                        */\z1* */\z2* */\z3* */\z4* */\z5*
     \z1  ...  \z9                      */\z6* */\z7* */\z8* */\z9* *E66* *E67*
@@ -3711,6 +4103,9 @@ This also has implications for nested clusters: >
    :syntax match Stuff "( aaa bbb )" contains=@BigGroup
    :syntax cluster BigGroup remove=B   " no effect, since B isn't in BigGroup
    :syntax cluster SmallGroup remove=B " now bbb isn't matched within Stuff
+<
+                                               *E848*
+The maximum number of clusters is 9767.
 
 ==============================================================================
 9. Including syntax files                              *:syn-include* *E397*
@@ -3750,6 +4145,9 @@ two different ways:
          with his own version, without replacing the file that does the ":syn
          include".
 
+                                               *E847*
+The maximum number of includes is 999.
+
 ==============================================================================
 10. Synchronizing                              *:syn-sync* *E403* *E404*
 
@@ -3803,7 +4201,7 @@ First syncing method:                     *:syn-sync-first*
 The file will be parsed from the start.  This makes syntax highlighting
 accurate, but can be slow for long files.  Vim caches previously parsed text,
 so that it's only slow when parsing the text for the first time.  However,
-when making changes some part of the next needs to be parsed again (worst
+when making changes some part of the text needs to be parsed again (worst
 case: to the end of the file).
 
 Using "fromstart" is equivalent to using "minlines" with a very large number.
@@ -3953,7 +4351,7 @@ To show the syntax items for one syntax group: >
 
     :sy[ntax] list {group-name}
 
-To list the syntax groups in one cluster:                      *E392*  >
+To list the syntax groups in one cluster:                      *E392*   >
 
     :sy[ntax] list @{cluster-name}
 
@@ -3986,7 +4384,7 @@ in their own color.
                        feature it will output "unknown".
 
 :colo[rscheme] {name}  Load color scheme {name}.  This searches 'runtimepath'
-                       for the file "colors/{name}.vim.  The first one that
+                       for the file "colors/{name}.vim".  The first one that
                        is found is loaded.
                        To see the name of the currently active color scheme: >
                                :colo
@@ -4316,6 +4714,9 @@ IncSearch 'incsearch' highlighting; also used for the text replaced with
                                                        *hl-LineNr*
 LineNr         Line number for ":number" and ":#" commands, and when 'number'
                or 'relativenumber' option is set.
+                                                       *hl-CursorLineNr*
+CursorLineNr   Like LineNr when 'cursorline' or 'relativenumber' is set for
+               the cursor line.
                                                        *hl-MatchParen*
 MatchParen     The character under the cursor or just before it, if it
                is a paired bracket, and its match. |pi_paren.txt|
@@ -4603,8 +5004,8 @@ restoring "b:current_syntax", since the syntax files do set
 "w:current_syntax".
 
 Once a window has its own syntax, syntax commands executed from other windows
-on the same buffer (including :syntax clear) have no effect. Conversely, 
-syntax commands executed from that window do not effect other windows on the
+on the same buffer (including :syntax clear) have no effect. Conversely,
+syntax commands executed from that window do not affect other windows on the
 same buffer.
 
 A window with its own syntax reverts to normal behavior when another buffer
@@ -4612,7 +5013,7 @@ is loaded into that window or the file is reloaded.
 When splitting the window, the new window will use the original syntax.
 
 ==============================================================================
-16. Color xterms                               *xterm-color* *color-xterm*
+17. Color xterms                               *xterm-color* *color-xterm*
 
 Most color xterms have only eight colors.  If you don't get colors with the
 default setup, it should work with these lines in your .vimrc: >
@@ -4754,4 +5155,63 @@ Also make sure TTpro's Setup / Window / Full Color is enabled, and make sure
 that Setup / Font / Enable Bold is NOT enabled.
 (info provided by John Love-Jensen <eljay@Adobe.COM>)
 
+
+==============================================================================
+18. When syntax is slow                                                *:syntime*
+
+This is aimed at authors of a syntax file.
+
+If your syntax causes redrawing to be slow, here are a few hints on making it
+faster.  To see slowness switch on some features that usually interfere, such
+as 'relativenumber' and |folding|.
+
+Note: this is only available when compiled with the |+profile| feature.
+You many need to build Vim with "huge" features.
+
+To find out what patterns are consuming most time, get an overview with this
+sequence: >
+       :syntime on
+       [ redraw the text at least once with CTRL-L ]
+       :syntime report
+
+This will display a list of syntax patterns that were used, sorted by the time
+it took to match them against the text.
+
+:syntime on            Start measuring syntax times.  This will add some
+                       overhead to compute the time spent on syntax pattern
+                       matching.
+
+:syntime off           Stop measuring syntax times.
+
+:syntime clear         Set all the counters to zero, restart measuring.
+
+:syntime report                Show the syntax items used since ":syntime on" in the
+                       current window.  Use a wider display to see more of
+                       the output.
+
+                       The list is sorted by total time. The columns are:
+                       TOTAL           Total time in seconds spent on
+                                       matching this pattern.
+                       COUNT           Number of times the pattern was used.
+                       MATCH           Number of times the pattern actually
+                                       matched
+                       SLOWEST         The longest time for one try.
+                       AVERAGE         The average time for one try.
+                       NAME            Name of the syntax item.  Note that
+                                       this is not unique.
+                       PATTERN         The pattern being used.
+
+Pattern matching gets slow when it has to try many alternatives.  Try to
+include as much literal text as possible to reduce the number of ways a
+pattern does NOT match.
+
+When using the "\@<=" and "\@<!" items, add a maximum size to avoid trying at
+all positions in the current and previous line.  For example, if the item is
+literal text specify the size of that text (in bytes):
+
+"<\@<=span"    Matches "span" in "<span".  This tries matching with "<" in
+               many places.
+"<\@1<=span"   Matches the same, but only tries one byte before "span".
+
+
  vim:tw=78:sw=4:ts=8:ft=help:norl:
index a30d3a1..3c7ad9f 100644 (file)
@@ -1,4 +1,4 @@
-*tabpage.txt*   For Vim version 7.3.  Last change: 2010 Jul 31
+*tabpage.txt*   For Vim version 7.4.  Last change: 2012 Aug 08
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -113,7 +113,7 @@ something else.
                this is a "safe" command.
 
 :tabc[lose][!] {count}
-               Close tab page {count}.  Fails in the same way as ':tabclose"
+               Close tab page {count}.  Fails in the same way as `:tabclose`
                above.
 
                                                        *:tabo* *:tabonly*
@@ -173,10 +173,20 @@ Other commands:
 REORDERING TAB PAGES:
 
 :tabm[ove] [N]                                         *:tabm* *:tabmove*
+:[N]tabm[ove]
                Move the current tab page to after tab page N.  Use zero to
                make the current tab page the first one.  Without N the tab
                page is made the last one.
 
+:tabm[ove] +[N]
+:tabm[ove] -[N]
+               Move the current tab page N places to the right (with +) or to
+               the left (with -).
+
+Note that although it is possible to move a tab behind the N-th one by using
+:Ntabmove, it is impossible to move it by N places by using :+Ntabmove. For
+clarification what +N means in this context see |[range]|.
+
 
 LOOPING OVER TAB PAGES:
 
index 3ebcf41..b7e16df 100644 (file)
@@ -154,12 +154,14 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 'cscopepathcomp'       options.txt     /*'cscopepathcomp'*
 'cscopeprg'    options.txt     /*'cscopeprg'*
 'cscopequickfix'       options.txt     /*'cscopequickfix'*
+'cscoperelative'       options.txt     /*'cscoperelative'*
 'cscopetag'    options.txt     /*'cscopetag'*
 'cscopetagorder'       options.txt     /*'cscopetagorder'*
 'cscopeverbose'        options.txt     /*'cscopeverbose'*
 'cspc' options.txt     /*'cspc'*
 'csprg'        options.txt     /*'csprg'*
 'csqf' options.txt     /*'csqf'*
+'csre' options.txt     /*'csre'*
 'cst'  options.txt     /*'cst'*
 'csto' options.txt     /*'csto'*
 'csverb'       options.txt     /*'csverb'*
@@ -231,10 +233,12 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 'fex'  options.txt     /*'fex'*
 'ff'   options.txt     /*'ff'*
 'ffs'  options.txt     /*'ffs'*
+'fic'  options.txt     /*'fic'*
 'fileencoding' options.txt     /*'fileencoding'*
 'fileencodings'        options.txt     /*'fileencodings'*
 'fileformat'   options.txt     /*'fileformat'*
 'fileformats'  options.txt     /*'fileformats'*
+'fileignorecase'       options.txt     /*'fileignorecase'*
 'filetype'     options.txt     /*'filetype'*
 'fillchars'    options.txt     /*'fillchars'*
 'fk'   options.txt     /*'fk'*
@@ -279,6 +283,7 @@ $VIMRUNTIME starting.txt    /*$VIMRUNTIME*
 'go-F' options.txt     /*'go-F'*
 'go-L' options.txt     /*'go-L'*
 'go-M' options.txt     /*'go-M'*
+'go-P' options.txt     /*'go-P'*
 'go-R' options.txt     /*'go-R'*
 'go-T' options.txt     /*'go-T'*
 'go-a' options.txt     /*'go-a'*
@@ -336,7 +341,9 @@ $VIMRUNTIME starting.txt    /*$VIMRUNTIME*
 'iconstring'   options.txt     /*'iconstring'*
 'ignorecase'   options.txt     /*'ignorecase'*
 'im'   options.txt     /*'im'*
+'imactivatefunc'       options.txt     /*'imactivatefunc'*
 'imactivatekey'        options.txt     /*'imactivatekey'*
+'imaf' options.txt     /*'imaf'*
 'imak' options.txt     /*'imak'*
 'imc'  options.txt     /*'imc'*
 'imcmdline'    options.txt     /*'imcmdline'*
@@ -346,6 +353,8 @@ $VIMRUNTIME starting.txt    /*$VIMRUNTIME*
 'iminsert'     options.txt     /*'iminsert'*
 'ims'  options.txt     /*'ims'*
 'imsearch'     options.txt     /*'imsearch'*
+'imsf' options.txt     /*'imsf'*
+'imstatusfunc' options.txt     /*'imstatusfunc'*
 'inc'  options.txt     /*'inc'*
 'include'      options.txt     /*'include'*
 'includeexpr'  options.txt     /*'includeexpr'*
@@ -491,8 +500,10 @@ $VIMRUNTIME        starting.txt    /*$VIMRUNTIME*
 'nocopyindent' options.txt     /*'nocopyindent'*
 'nocp' options.txt     /*'nocp'*
 'nocrb'        options.txt     /*'nocrb'*
+'nocscoperelative'     options.txt     /*'nocscoperelative'*
 'nocscopetag'  options.txt     /*'nocscopetag'*
 'nocscopeverbose'      options.txt     /*'nocscopeverbose'*
+'nocsre'       options.txt     /*'nocsre'*
 'nocst'        options.txt     /*'nocst'*
 'nocsverb'     options.txt     /*'nocsverb'*
 'nocuc'        options.txt     /*'nocuc'*
@@ -520,6 +531,8 @@ $VIMRUNTIME starting.txt    /*$VIMRUNTIME*
 'noexpandtab'  options.txt     /*'noexpandtab'*
 'noexrc'       options.txt     /*'noexrc'*
 'nofen'        options.txt     /*'nofen'*
+'nofic'        options.txt     /*'nofic'*
+'nofileignorecase'     options.txt     /*'nofileignorecase'*
 'nofk' options.txt     /*'nofk'*
 'nofkmap'      options.txt     /*'nofkmap'*
 'nofoldenable' options.txt     /*'nofoldenable'*
@@ -650,6 +663,8 @@ $VIMRUNTIME starting.txt    /*$VIMRUNTIME*
 'nottybuiltin' options.txt     /*'nottybuiltin'*
 'nottyfast'    options.txt     /*'nottyfast'*
 'notx' options.txt     /*'notx'*
+'noudf'        options.txt     /*'noudf'*
+'noundofile'   options.txt     /*'noundofile'*
 'novb' options.txt     /*'novb'*
 'novice'       vi_diff.txt     /*'novice'*
 'novisualbell' options.txt     /*'novisualbell'*
@@ -659,6 +674,8 @@ $VIMRUNTIME starting.txt    /*$VIMRUNTIME*
 'noweirdinvert'        options.txt     /*'noweirdinvert'*
 'nowfh'        options.txt     /*'nowfh'*
 'nowfw'        options.txt     /*'nowfw'*
+'nowic'        options.txt     /*'nowic'*
+'nowildignorecase'     options.txt     /*'nowildignorecase'*
 'nowildmenu'   options.txt     /*'nowildmenu'*
 'nowinfixheight'       options.txt     /*'nowinfixheight'*
 'nowinfixwidth'        options.txt     /*'nowinfixwidth'*
@@ -727,9 +744,11 @@ $VIMRUNTIME        starting.txt    /*$VIMRUNTIME*
 'quote motion.txt      /*'quote*
 'quoteescape'  options.txt     /*'quoteescape'*
 'rdt'  options.txt     /*'rdt'*
+'re'   options.txt     /*'re'*
 'readonly'     options.txt     /*'readonly'*
 'redraw'       vi_diff.txt     /*'redraw'*
 'redrawtime'   options.txt     /*'redrawtime'*
+'regexpengine' options.txt     /*'regexpengine'*
 'relativenumber'       options.txt     /*'relativenumber'*
 'remap'        options.txt     /*'remap'*
 'report'       options.txt     /*'report'*
@@ -779,6 +798,7 @@ $VIMRUNTIME starting.txt    /*$VIMRUNTIME*
 'shellslash'   options.txt     /*'shellslash'*
 'shelltemp'    options.txt     /*'shelltemp'*
 'shelltype'    options.txt     /*'shelltype'*
+'shellxescape' options.txt     /*'shellxescape'*
 'shellxquote'  options.txt     /*'shellxquote'*
 'shiftround'   options.txt     /*'shiftround'*
 'shiftwidth'   options.txt     /*'shiftwidth'*
@@ -848,6 +868,7 @@ $VIMRUNTIME starting.txt    /*$VIMRUNTIME*
 'swf'  options.txt     /*'swf'*
 'switchbuf'    options.txt     /*'switchbuf'*
 'sws'  options.txt     /*'sws'*
+'sxe'  options.txt     /*'sxe'*
 'sxq'  options.txt     /*'sxq'*
 'syn'  options.txt     /*'syn'*
 'synmaxcol'    options.txt     /*'synmaxcol'*
@@ -957,6 +978,7 @@ $VIMRUNTIME starting.txt    /*$VIMRUNTIME*
 't_te' term.txt        /*'t_te'*
 't_ti' term.txt        /*'t_ti'*
 't_ts' term.txt        /*'t_ts'*
+'t_u7' term.txt        /*'t_u7'*
 't_ue' term.txt        /*'t_ue'*
 't_us' term.txt        /*'t_us'*
 't_ut' term.txt        /*'t_ut'*
@@ -1064,10 +1086,12 @@ $VIMRUNTIME     starting.txt    /*$VIMRUNTIME*
 'wh'   options.txt     /*'wh'*
 'whichwrap'    options.txt     /*'whichwrap'*
 'wi'   options.txt     /*'wi'*
+'wic'  options.txt     /*'wic'*
 'wig'  options.txt     /*'wig'*
 'wildchar'     options.txt     /*'wildchar'*
 'wildcharm'    options.txt     /*'wildcharm'*
 'wildignore'   options.txt     /*'wildignore'*
+'wildignorecase'       options.txt     /*'wildignorecase'*
 'wildmenu'     options.txt     /*'wildmenu'*
 'wildmode'     options.txt     /*'wildmode'*
 'wildoptions'  options.txt     /*'wildoptions'*
@@ -1177,7 +1201,9 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 +mouse_gpm     various.txt     /*+mouse_gpm*
 +mouse_netterm various.txt     /*+mouse_netterm*
 +mouse_pterm   various.txt     /*+mouse_pterm*
++mouse_sgr     various.txt     /*+mouse_sgr*
 +mouse_sysmouse        various.txt     /*+mouse_sysmouse*
++mouse_urxvt   various.txt     /*+mouse_urxvt*
 +mouse_xterm   various.txt     /*+mouse_xterm*
 +mouseshape    various.txt     /*+mouseshape*
 +multi_byte    various.txt     /*+multi_byte*
@@ -1187,7 +1213,6 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 +mzscheme/dyn  various.txt     /*+mzscheme\/dyn*
 +netbeans_intg various.txt     /*+netbeans_intg*
 +ole   various.txt     /*+ole*
-+osfiletype    various.txt     /*+osfiletype*
 +path_extra    various.txt     /*+path_extra*
 +perl  various.txt     /*+perl*
 +perl/dyn      various.txt     /*+perl\/dyn*
@@ -1237,6 +1262,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 +writebackup   various.txt     /*+writebackup*
 +xfontset      various.txt     /*+xfontset*
 +xim   various.txt     /*+xim*
++xpm_w32       various.txt     /*+xpm_w32*
 +xsmp  various.txt     /*+xsmp*
 +xsmp_interact various.txt     /*+xsmp_interact*
 +xterm_clipboard       various.txt     /*+xterm_clipboard*
@@ -1373,6 +1399,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 /\     pattern.txt     /*\/\\*
 /\$    pattern.txt     /*\/\\$*
 /\%#   pattern.txt     /*\/\\%#*
+/\%#=  pattern.txt     /*\/\\%#=*
 /\%$   pattern.txt     /*\/\\%$*
 /\%'m  pattern.txt     /*\/\\%'m*
 /\%(   pattern.txt     /*\/\\%(*
@@ -1818,6 +1845,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :RmVimball     pi_vimball.txt  /*:RmVimball*
 :Sexplore      pi_netrw.txt    /*:Sexplore*
 :TOhtml        syntax.txt      /*:TOhtml*
+:TarDiff       pi_tar.txt      /*:TarDiff*
 :Texplore      pi_netrw.txt    /*:Texplore*
 :UseVimball    pi_vimball.txt  /*:UseVimball*
 :Vexplore      pi_netrw.txt    /*:Vexplore*
@@ -1826,6 +1854,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :X     editing.txt     /*:X*
 :XMLent        insert.txt      /*:XMLent*
 :XMLns insert.txt      /*:XMLns*
+:[range]       motion.txt      /*:[range]*
 :\bar  cmdline.txt     /*:\\bar*
 :_!    cmdline.txt     /*:_!*
 :_#    cmdline.txt     /*:_#*
@@ -2087,6 +2116,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :display       change.txt      /*:display*
 :dj    tagsrch.txt     /*:dj*
 :djump tagsrch.txt     /*:djump*
+:dl    change.txt      /*:dl*
 :dli   tagsrch.txt     /*:dli*
 :dlist tagsrch.txt     /*:dlist*
 :do    autocmd.txt     /*:do*
@@ -2094,6 +2124,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :doautoa       autocmd.txt     /*:doautoa*
 :doautoall     autocmd.txt     /*:doautoall*
 :doautocmd     autocmd.txt     /*:doautocmd*
+:dp    change.txt      /*:dp*
 :dr    windows.txt     /*:dr*
 :drop  windows.txt     /*:drop*
 :ds    tagsrch.txt     /*:ds*
@@ -2390,6 +2421,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :map!  map.txt /*:map!*
 :map-<buffer>  map.txt /*:map-<buffer>*
 :map-<expr>    map.txt /*:map-<expr>*
+:map-<nowait>  map.txt /*:map-<nowait>*
 :map-<script>  map.txt /*:map-<script>*
 :map-<silent>  map.txt /*:map-<silent>*
 :map-<special> map.txt /*:map-<special>*
@@ -2400,6 +2432,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :map-expression        map.txt /*:map-expression*
 :map-local     map.txt /*:map-local*
 :map-modes     map.txt /*:map-modes*
+:map-nowait    map.txt /*:map-nowait*
 :map-operator  map.txt /*:map-operator*
 :map-script    map.txt /*:map-script*
 :map-silent    map.txt /*:map-silent*
@@ -2571,7 +2604,9 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :pwd   editing.txt     /*:pwd*
 :py    if_pyth.txt     /*:py*
 :py3   if_pyth.txt     /*:py3*
+:py3do if_pyth.txt     /*:py3do*
 :py3file       if_pyth.txt     /*:py3file*
+:pydo  if_pyth.txt     /*:pydo*
 :pyf   if_pyth.txt     /*:pyf*
 :pyfile        if_pyth.txt     /*:pyfile*
 :python        if_pyth.txt     /*:python*
@@ -2607,6 +2642,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :resize        windows.txt     /*:resize*
 :ret   change.txt      /*:ret*
 :retab change.txt      /*:retab*
+:retab!        change.txt      /*:retab!*
 :retu  eval.txt        /*:retu*
 :return        eval.txt        /*:return*
 :rew   editing.txt     /*:rew*
@@ -2849,6 +2885,7 @@ $VIMRUNTIME       starting.txt    /*$VIMRUNTIME*
 :syntax-enable syntax.txt      /*:syntax-enable*
 :syntax-on     syntax.txt      /*:syntax-on*
 :syntax-reset  syntax.txt      /*:syntax-reset*
+:syntime       syntax.txt      /*:syntime*
 :t     change.txt      /*:t*
 :tN    tagsrch.txt     /*:tN*
 :tNext tagsrch.txt     /*:tNext*
@@ -3198,10 +3235,12 @@ $VIMRUNTIME     starting.txt    /*$VIMRUNTIME*
 <line1>        map.txt /*<line1>*
 <line2>        map.txt /*<line2>*
 <lt>   intro.txt       /*<lt>*
+<nomodeline>   autocmd.txt     /*<nomodeline>*
 <q-args>       map.txt /*<q-args>*
 <reg>  map.txt /*<reg>*
 <register>     map.txt /*<register>*
 <sfile>        cmdline.txt     /*<sfile>*
+<slnum>        cmdline.txt     /*<slnum>*
 <xCSI> intro.txt       /*<xCSI>*
 <xDown>        term.txt        /*<xDown>*
 <xEnd> term.txt        /*<xEnd>*
@@ -3395,6 +3434,7 @@ CmdwinLeave       autocmd.txt     /*CmdwinLeave*
 ColorScheme    autocmd.txt     /*ColorScheme*
 Command-line   cmdline.txt     /*Command-line*
 Command-line-mode      cmdline.txt     /*Command-line-mode*
+CompleteDone   autocmd.txt     /*CompleteDone*
 Contents       quickref.txt    /*Contents*
 Cscope if_cscop.txt    /*Cscope*
 CursorHold     autocmd.txt     /*CursorHold*
@@ -3420,7 +3460,6 @@ E102      diff.txt        /*E102*
 E103   diff.txt        /*E103*
 E104   digraph.txt     /*E104*
 E105   mbyte.txt       /*E105*
-E106   eval.txt        /*E106*
 E107   eval.txt        /*E107*
 E108   eval.txt        /*E108*
 E109   eval.txt        /*E109*
@@ -3587,7 +3626,6 @@ E257      if_cscop.txt    /*E257*
 E258   remote.txt      /*E258*
 E259   if_cscop.txt    /*E259*
 E26    rileft.txt      /*E26*
-E260   if_cscop.txt    /*E260*
 E261   if_cscop.txt    /*E261*
 E262   if_cscop.txt    /*E262*
 E263   if_pyth.txt     /*E263*
@@ -3620,9 +3658,6 @@ E287      mbyte.txt       /*E287*
 E288   mbyte.txt       /*E288*
 E289   mbyte.txt       /*E289*
 E29    change.txt      /*E29*
-E290   mbyte.txt       /*E290*
-E291   mbyte.txt       /*E291*
-E292   mbyte.txt       /*E292*
 E293   message.txt     /*E293*
 E294   message.txt     /*E294*
 E295   message.txt     /*E295*
@@ -3702,7 +3737,6 @@ E362      term.txt        /*E362*
 E363   options.txt     /*E363*
 E364   eval.txt        /*E364*
 E365   print.txt       /*E365*
-E366   options.txt     /*E366*
 E367   autocmd.txt     /*E367*
 E368   eval.txt        /*E368*
 E369   pattern.txt     /*E369*
@@ -3836,7 +3870,6 @@ E485      message.txt     /*E485*
 E486   pattern.txt     /*E486*
 E487   options.txt     /*E487*
 E488   message.txt     /*E488*
-E489   intro.txt       /*E489*
 E49    message.txt     /*E49*
 E490   fold.txt        /*E490*
 E492   message.txt     /*E492*
@@ -3919,7 +3952,6 @@ E561      if_cscop.txt    /*E561*
 E562   if_cscop.txt    /*E562*
 E563   if_cscop.txt    /*E563*
 E564   if_cscop.txt    /*E564*
-E565   if_cscop.txt    /*E565*
 E566   if_cscop.txt    /*E566*
 E567   if_cscop.txt    /*E567*
 E568   if_cscop.txt    /*E568*
@@ -3969,8 +4001,6 @@ E607      eval.txt        /*E607*
 E608   eval.txt        /*E608*
 E609   if_cscop.txt    /*E609*
 E61    pattern.txt     /*E61*
-E610   options.txt     /*E610*
-E611   options.txt     /*E611*
 E612   sign.txt        /*E612*
 E613   print.txt       /*E613*
 E614   editing.txt     /*E614*
@@ -4219,11 +4249,51 @@ E834    options.txt     /*E834*
 E835   options.txt     /*E835*
 E836   if_pyth.txt     /*E836*
 E837   if_pyth.txt     /*E837*
+E838   netbeans.txt    /*E838*
+E839   insert.txt      /*E839*
 E84    windows.txt     /*E84*
+E840   insert.txt      /*E840*
+E841   map.txt /*E841*
+E842   cmdline.txt     /*E842*
+E843   editing.txt     /*E843*
+E844   syntax.txt      /*E844*
+E845   spell.txt       /*E845*
+E846   options.txt     /*E846*
+E847   syntax.txt      /*E847*
+E848   syntax.txt      /*E848*
+E849   syntax.txt      /*E849*
 E85    options.txt     /*E85*
+E850   change.txt      /*E850*
+E851   gui_x11.txt     /*E851*
+E852   gui_x11.txt     /*E852*
+E853   eval.txt        /*E853*
+E854   options.txt     /*E854*
+E855   autocmd.txt     /*E855*
+E858   eval.txt        /*E858*
+E859   eval.txt        /*E859*
 E86    windows.txt     /*E86*
+E860   eval.txt        /*E860*
+E862   eval.txt        /*E862*
+E863   if_pyth.txt     /*E863*
+E864   pattern.txt     /*E864*
+E865   pattern.txt     /*E865*
+E866   pattern.txt     /*E866*
+E867   pattern.txt     /*E867*
+E868   pattern.txt     /*E868*
+E869   pattern.txt     /*E869*
 E87    windows.txt     /*E87*
+E870   pattern.txt     /*E870*
+E871   pattern.txt     /*E871*
+E872   pattern.txt     /*E872*
+E873   pattern.txt     /*E873*
+E874   pattern.txt     /*E874*
+E875   pattern.txt     /*E875*
+E876   pattern.txt     /*E876*
+E877   pattern.txt     /*E877*
+E878   pattern.txt     /*E878*
+E879   syntax.txt      /*E879*
 E88    windows.txt     /*E88*
+E880   if_pyth.txt     /*E880*
 E89    message.txt     /*E89*
 E90    message.txt     /*E90*
 E91    options.txt     /*E91*
@@ -4290,6 +4360,7 @@ IME       mbyte.txt       /*IME*
 Insert insert.txt      /*Insert*
 Insert-mode    insert.txt      /*Insert-mode*
 InsertChange   autocmd.txt     /*InsertChange*
+InsertCharPre  autocmd.txt     /*InsertCharPre*
 InsertEnter    autocmd.txt     /*InsertEnter*
 InsertLeave    autocmd.txt     /*InsertLeave*
 J      change.txt      /*J*
@@ -4327,6 +4398,7 @@ N pattern.txt     /*N*
 N%     motion.txt      /*N%*
 N:     cmdline.txt     /*N:*
 N<Del> various.txt     /*N<Del>*
+NFA    pattern.txt     /*NFA*
 NL-used-for-Nul        pattern.txt     /*NL-used-for-Nul*
 NetBSD-backspace       options.txt     /*NetBSD-backspace*
 NetUserPass()  pi_netrw.txt    /*NetUserPass()*
@@ -4403,6 +4475,7 @@ QuickFixCmdPost   autocmd.txt     /*QuickFixCmdPost*
 QuickFixCmdPost-example        quickfix.txt    /*QuickFixCmdPost-example*
 QuickFixCmdPre autocmd.txt     /*QuickFixCmdPre*
 Quickfix       quickfix.txt    /*Quickfix*
+QuitPre        autocmd.txt     /*QuitPre*
 R      change.txt      /*R*
 RISC-OS        os_risc.txt     /*RISC-OS*
 RISCOS os_risc.txt     /*RISCOS*
@@ -4434,6 +4507,11 @@ Syntax   autocmd.txt     /*Syntax*
 T      motion.txt      /*T*
 TCL    if_tcl.txt      /*TCL*
 TERM   starting.txt    /*TERM*
+TOhtml-encoding        syntax.txt      /*TOhtml-encoding*
+TOhtml-encoding-detect syntax.txt      /*TOhtml-encoding-detect*
+TOhtml-performance     syntax.txt      /*TOhtml-performance*
+TOhtml-uncopyable-text syntax.txt      /*TOhtml-uncopyable-text*
+TOhtml-wrap-text       syntax.txt      /*TOhtml-wrap-text*
 TSQL   ft_sql.txt      /*TSQL*
 TTpro-telnet   syntax.txt      /*TTpro-telnet*
 Tab    intro.txt       /*Tab*
@@ -4442,6 +4520,8 @@ TabLeave  autocmd.txt     /*TabLeave*
 Tcl    if_tcl.txt      /*Tcl*
 TermChanged    autocmd.txt     /*TermChanged*
 TermResponse   autocmd.txt     /*TermResponse*
+TextChanged    autocmd.txt     /*TextChanged*
+TextChangedI   autocmd.txt     /*TextChangedI*
 Transact-SQL   ft_sql.txt      /*Transact-SQL*
 U      undo.txt        /*U*
 UTF-8  mbyte.txt       /*UTF-8*
@@ -4654,6 +4734,7 @@ added-6.4 version6.txt    /*added-6.4*
 added-7.1      version7.txt    /*added-7.1*
 added-7.2      version7.txt    /*added-7.2*
 added-7.3      version7.txt    /*added-7.3*
+added-7.4      version7.txt    /*added-7.4*
 added-BeOS     version5.txt    /*added-BeOS*
 added-Mac      version5.txt    /*added-Mac*
 added-VMS      version5.txt    /*added-VMS*
@@ -4669,6 +4750,7 @@ alt       intro.txt       /*alt*
 alt-input      debugger.txt    /*alt-input*
 alternate-file editing.txt     /*alternate-file*
 amiga-window   starting.txt    /*amiga-window*
+and()  eval.txt        /*and()*
 anonymous-function     eval.txt        /*anonymous-function*
 ant.vim        syntax.txt      /*ant.vim*
 ap     motion.txt      /*ap*
@@ -4723,6 +4805,7 @@ autocmds-kept     version5.txt    /*autocmds-kept*
 autocommand    autocmd.txt     /*autocommand*
 autocommand-events     autocmd.txt     /*autocommand-events*
 autocommand-pattern    autocmd.txt     /*autocommand-pattern*
+autoformat     change.txt      /*autoformat*
 autoload       eval.txt        /*autoload*
 autoload-functions     eval.txt        /*autoload-functions*
 avoid-hit-enter        version5.txt    /*avoid-hit-enter*
@@ -4730,10 +4813,12 @@ aw      motion.txt      /*aw*
 a{     motion.txt      /*a{*
 a}     motion.txt      /*a}*
 b      motion.txt      /*b*
-b:changedtick-variable eval.txt        /*b:changedtick-variable*
+b:     eval.txt        /*b:*
+b:changedtick  eval.txt        /*b:changedtick*
 b:changelog_name       filetype.txt    /*b:changelog_name*
 b:current_syntax-variable      syntax.txt      /*b:current_syntax-variable*
 b:netrw_lastfile       pi_netrw.txt    /*b:netrw_lastfile*
+b:tex_stylish  syntax.txt      /*b:tex_stylish*
 b:var  eval.txt        /*b:var*
 baan-folding   syntax.txt      /*baan-folding*
 baan-syntax    syntax.txt      /*baan-syntax*
@@ -4766,11 +4851,13 @@ beos-timeout    os_beos.txt     /*beos-timeout*
 beos-unicode   os_beos.txt     /*beos-unicode*
 beos-utf8      os_beos.txt     /*beos-utf8*
 beos-vimdir    os_beos.txt     /*beos-vimdir*
+better-python-interface        version7.txt    /*better-python-interface*
 beval_bufnr-variable   eval.txt        /*beval_bufnr-variable*
 beval_col-variable     eval.txt        /*beval_col-variable*
 beval_lnum-variable    eval.txt        /*beval_lnum-variable*
 beval_text-variable    eval.txt        /*beval_text-variable*
 beval_winnr-variable   eval.txt        /*beval_winnr-variable*
+bitwise-function       usr_41.txt      /*bitwise-function*
 blockwise-examples     visual.txt      /*blockwise-examples*
 blockwise-operators    visual.txt      /*blockwise-operators*
 blockwise-register     change.txt      /*blockwise-register*
@@ -4852,6 +4939,8 @@ c_<S-Tab> cmdline.txt     /*c_<S-Tab>*
 c_<S-Up>       cmdline.txt     /*c_<S-Up>*
 c_<Tab>        cmdline.txt     /*c_<Tab>*
 c_<Up> cmdline.txt     /*c_<Up>*
+c_BS   cmdline.txt     /*c_BS*
+c_CR   cmdline.txt     /*c_CR*
 c_CTRL-A       cmdline.txt     /*c_CTRL-A*
 c_CTRL-B       cmdline.txt     /*c_CTRL-B*
 c_CTRL-C       cmdline.txt     /*c_CTRL-C*
@@ -4884,6 +4973,15 @@ c_CTRL-\_e       cmdline.txt     /*c_CTRL-\\_e*
 c_CTRL-]       cmdline.txt     /*c_CTRL-]*
 c_CTRL-^       cmdline.txt     /*c_CTRL-^*
 c_CTRL-_       cmdline.txt     /*c_CTRL-_*
+c_Del  cmdline.txt     /*c_Del*
+c_Down cmdline.txt     /*c_Down*
+c_End  cmdline.txt     /*c_End*
+c_Esc  cmdline.txt     /*c_Esc*
+c_Home cmdline.txt     /*c_Home*
+c_Insert       cmdline.txt     /*c_Insert*
+c_Left cmdline.txt     /*c_Left*
+c_Right        cmdline.txt     /*c_Right*
+c_Up   cmdline.txt     /*c_Up*
 c_digraph      cmdline.txt     /*c_digraph*
 c_wildchar     cmdline.txt     /*c_wildchar*
 call() eval.txt        /*call()*
@@ -4916,6 +5014,7 @@ changed-6.4       version6.txt    /*changed-6.4*
 changed-7.1    version7.txt    /*changed-7.1*
 changed-7.2    version7.txt    /*changed-7.2*
 changed-7.3    version7.txt    /*changed-7.3*
+changed-7.4    version7.txt    /*changed-7.4*
 changelist     motion.txt      /*changelist*
 changelog.vim  syntax.txt      /*changelog.vim*
 changenr()     eval.txt        /*changenr()*
@@ -4934,12 +5033,55 @@ charset-conversion      mbyte.txt       /*charset-conversion*
 chill.vim      syntax.txt      /*chill.vim*
 cindent()      eval.txt        /*cindent()*
 cinkeys-format indent.txt      /*cinkeys-format*
+cino-# indent.txt      /*cino-#*
+cino-( indent.txt      /*cino-(*
+cino-) indent.txt      /*cino-)*
+cino-+ indent.txt      /*cino-+*
+cino-/ indent.txt      /*cino-\/*
+cino-: indent.txt      /*cino-:*
+cino-= indent.txt      /*cino-=*
+cino-> indent.txt      /*cino->*
+cino-C indent.txt      /*cino-C*
+cino-J indent.txt      /*cino-J*
+cino-L indent.txt      /*cino-L*
+cino-M indent.txt      /*cino-M*
+cino-N indent.txt      /*cino-N*
+cino-U indent.txt      /*cino-U*
+cino-W indent.txt      /*cino-W*
+cino-^ indent.txt      /*cino-^*
+cino-b indent.txt      /*cino-b*
+cino-c indent.txt      /*cino-c*
+cino-e indent.txt      /*cino-e*
+cino-f indent.txt      /*cino-f*
+cino-g indent.txt      /*cino-g*
+cino-h indent.txt      /*cino-h*
+cino-i indent.txt      /*cino-i*
+cino-j indent.txt      /*cino-j*
+cino-k indent.txt      /*cino-k*
+cino-l indent.txt      /*cino-l*
+cino-m indent.txt      /*cino-m*
+cino-n indent.txt      /*cino-n*
+cino-p indent.txt      /*cino-p*
+cino-star      indent.txt      /*cino-star*
+cino-t indent.txt      /*cino-t*
+cino-u indent.txt      /*cino-u*
+cino-w indent.txt      /*cino-w*
+cino-{ indent.txt      /*cino-{*
+cino-} indent.txt      /*cino-}*
 cinoptions-values      indent.txt      /*cinoptions-values*
 clear-undo     undo.txt        /*clear-undo*
 clearmatches() eval.txt        /*clearmatches()*
 client-server  remote.txt      /*client-server*
 clientserver   remote.txt      /*clientserver*
 clipboard      gui.txt /*clipboard*
+clipboard-autoselect   options.txt     /*clipboard-autoselect*
+clipboard-autoselectml options.txt     /*clipboard-autoselectml*
+clipboard-autoselectplus       options.txt     /*clipboard-autoselectplus*
+clipboard-exclude      options.txt     /*clipboard-exclude*
+clipboard-html options.txt     /*clipboard-html*
+clipboard-unnamed      options.txt     /*clipboard-unnamed*
+clipboard-unnamedplus  options.txt     /*clipboard-unnamedplus*
+clojure-indent indent.txt      /*clojure-indent*
 cmdarg-variable        eval.txt        /*cmdarg-variable*
 cmdbang-variable       eval.txt        /*cmdbang-variable*
 cmdline-arguments      vi_diff.txt     /*cmdline-arguments*
@@ -5038,6 +5180,7 @@ cpo-+     options.txt     /*cpo-+*
 cpo--  options.txt     /*cpo--*
 cpo-.  options.txt     /*cpo-.*
 cpo-/  options.txt     /*cpo-\/*
+cpo-;  options.txt     /*cpo-;*
 cpo-<  options.txt     /*cpo-<*
 cpo->  options.txt     /*cpo->*
 cpo-A  options.txt     /*cpo-A*
@@ -5087,6 +5230,7 @@ cpo-w     options.txt     /*cpo-w*
 cpo-x  options.txt     /*cpo-x*
 cpo-y  options.txt     /*cpo-y*
 cpo-{  options.txt     /*cpo-{*
+cpp.vim        syntax.txt      /*cpp.vim*
 crash-recovery recover.txt     /*crash-recovery*
 creating-menus gui.txt /*creating-menus*
 credits        intro.txt       /*credits*
@@ -5107,6 +5251,7 @@ cscope_connection()       eval.txt        /*cscope_connection()*
 cscopepathcomp if_cscop.txt    /*cscopepathcomp*
 cscopeprg      if_cscop.txt    /*cscopeprg*
 cscopequickfix if_cscop.txt    /*cscopequickfix*
+cscoperelative if_cscop.txt    /*cscoperelative*
 cscopetag      if_cscop.txt    /*cscopetag*
 cscopetagorder if_cscop.txt    /*cscopetagorder*
 cscopeverbose  if_cscop.txt    /*cscopeverbose*
@@ -5114,6 +5259,7 @@ csh.vim   syntax.txt      /*csh.vim*
 cspc   if_cscop.txt    /*cspc*
 csprg  if_cscop.txt    /*csprg*
 csqf   if_cscop.txt    /*csqf*
+csre   if_cscop.txt    /*csre*
 cst    if_cscop.txt    /*cst*
 csto   if_cscop.txt    /*csto*
 csverb if_cscop.txt    /*csverb*
@@ -5197,6 +5343,7 @@ develop-spell     develop.txt     /*develop-spell*
 develop-spell-suggestions      develop.txt     /*develop-spell-suggestions*
 develop.txt    develop.txt     /*develop.txt*
 development    develop.txt     /*development*
+dgn    motion.txt      /*dgn*
 dh     change.txt      /*dh*
 diB    motion.txt      /*diB*
 diW    motion.txt      /*diW*
@@ -5220,6 +5367,7 @@ digraph   digraph.txt     /*digraph*
 digraph-arg    change.txt      /*digraph-arg*
 digraph-encoding       digraph.txt     /*digraph-encoding*
 digraph-table  digraph.txt     /*digraph-table*
+digraph-table-mbyte    digraph.txt     /*digraph-table-mbyte*
 digraph.txt    digraph.txt     /*digraph.txt*
 digraphs       digraph.txt     /*digraphs*
 digraphs-changed       version6.txt    /*digraphs-changed*
@@ -5230,6 +5378,7 @@ dip       motion.txt      /*dip*
 dircolors.vim  syntax.txt      /*dircolors.vim*
 dis    motion.txt      /*dis*
 disable-menus  gui.txt /*disable-menus*
+discard        editing.txt     /*discard*
 distribute-script      usr_41.txt      /*distribute-script*
 distribution   intro.txt       /*distribution*
 diw    motion.txt      /*diw*
@@ -5390,6 +5539,11 @@ expr-env eval.txt        /*expr-env*
 expr-env-expand        eval.txt        /*expr-env-expand*
 expr-function  eval.txt        /*expr-function*
 expr-is        eval.txt        /*expr-is*
+expr-is#       eval.txt        /*expr-is#*
+expr-is?       eval.txt        /*expr-is?*
+expr-isnot     eval.txt        /*expr-isnot*
+expr-isnot#    eval.txt        /*expr-isnot#*
+expr-isnot?    eval.txt        /*expr-isnot?*
 expr-nesting   eval.txt        /*expr-nesting*
 expr-number    eval.txt        /*expr-number*
 expr-option    eval.txt        /*expr-option*
@@ -5470,6 +5624,7 @@ fixed-6.4 version6.txt    /*fixed-6.4*
 fixed-7.1      version7.txt    /*fixed-7.1*
 fixed-7.2      version7.txt    /*fixed-7.2*
 fixed-7.3      version7.txt    /*fixed-7.3*
+fixed-7.4      version7.txt    /*fixed-7.4*
 flexwiki.vim   syntax.txt      /*flexwiki.vim*
 float-e        eval.txt        /*float-e*
 float-functions        usr_41.txt      /*float-functions*
@@ -5525,6 +5680,7 @@ format-comments   change.txt      /*format-comments*
 formatting     change.txt      /*formatting*
 formfeed       intro.txt       /*formfeed*
 fortran.vim    syntax.txt      /*fortran.vim*
+friendship     intro.txt       /*friendship*
 frombook       usr_01.txt      /*frombook*
 ft-abel-syntax syntax.txt      /*ft-abel-syntax*
 ft-ada-commands        ft_ada.txt      /*ft-ada-commands*
@@ -5551,8 +5707,10 @@ ft-ch-syntax     syntax.txt      /*ft-ch-syntax*
 ft-changelog-plugin    filetype.txt    /*ft-changelog-plugin*
 ft-changelog-syntax    syntax.txt      /*ft-changelog-syntax*
 ft-chill-syntax        syntax.txt      /*ft-chill-syntax*
+ft-clojure-indent      indent.txt      /*ft-clojure-indent*
 ft-cobol-syntax        syntax.txt      /*ft-cobol-syntax*
 ft-coldfusion-syntax   syntax.txt      /*ft-coldfusion-syntax*
+ft-cpp-syntax  syntax.txt      /*ft-cpp-syntax*
 ft-csh-syntax  syntax.txt      /*ft-csh-syntax*
 ft-css-omni    insert.txt      /*ft-css-omni*
 ft-cweb-syntax syntax.txt      /*ft-cweb-syntax*
@@ -5576,6 +5734,7 @@ ft-gitcommit-plugin       filetype.txt    /*ft-gitcommit-plugin*
 ft-groff-syntax        syntax.txt      /*ft-groff-syntax*
 ft-gsp-syntax  syntax.txt      /*ft-gsp-syntax*
 ft-haskell-syntax      syntax.txt      /*ft-haskell-syntax*
+ft-html-indent indent.txt      /*ft-html-indent*
 ft-html-omni   insert.txt      /*ft-html-omni*
 ft-html-syntax syntax.txt      /*ft-html-syntax*
 ft-htmlos-syntax       syntax.txt      /*ft-htmlos-syntax*
@@ -5623,8 +5782,10 @@ ft-ptcap-syntax  syntax.txt      /*ft-ptcap-syntax*
 ft-python-indent       indent.txt      /*ft-python-indent*
 ft-python-syntax       syntax.txt      /*ft-python-syntax*
 ft-quake-syntax        syntax.txt      /*ft-quake-syntax*
+ft-r-indent    indent.txt      /*ft-r-indent*
 ft-readline-syntax     syntax.txt      /*ft-readline-syntax*
 ft-rexx-syntax syntax.txt      /*ft-rexx-syntax*
+ft-rst-syntax  syntax.txt      /*ft-rst-syntax*
 ft-ruby-omni   insert.txt      /*ft-ruby-omni*
 ft-ruby-syntax syntax.txt      /*ft-ruby-syntax*
 ft-scheme-syntax       syntax.txt      /*ft-scheme-syntax*
@@ -5688,7 +5849,9 @@ g,        motion.txt      /*g,*
 g-     undo.txt        /*g-*
 g0     motion.txt      /*g0*
 g8     various.txt     /*g8*
+g:     eval.txt        /*g:*
 g:NetrwTopLvlMenu      pi_netrw.txt    /*g:NetrwTopLvlMenu*
+g:Netrw_corehandler    pi_netrw.txt    /*g:Netrw_corehandler*
 g:Netrw_funcref        pi_netrw.txt    /*g:Netrw_funcref*
 g:ada#Comment  ft_ada.txt      /*g:ada#Comment*
 g:ada#Ctags_Kinds      ft_ada.txt      /*g:ada#Ctags_Kinds*
@@ -5712,12 +5875,20 @@ g:ada_space_errors      ft_ada.txt      /*g:ada_space_errors*
 g:ada_standard_types   ft_ada.txt      /*g:ada_standard_types*
 g:ada_with_gnat_project_files  ft_ada.txt      /*g:ada_with_gnat_project_files*
 g:ada_withuse_ordinary ft_ada.txt      /*g:ada_withuse_ordinary*
+g:clojure_align_multiline_strings      indent.txt      /*g:clojure_align_multiline_strings*
+g:clojure_fuzzy_indent indent.txt      /*g:clojure_fuzzy_indent*
+g:clojure_fuzzy_indent_blacklist       indent.txt      /*g:clojure_fuzzy_indent_blacklist*
+g:clojure_fuzzy_indent_patterns        indent.txt      /*g:clojure_fuzzy_indent_patterns*
+g:clojure_maxlines     indent.txt      /*g:clojure_maxlines*
+g:clojure_special_indent_words indent.txt      /*g:clojure_special_indent_words*
 g:colors_name  options.txt     /*g:colors_name*
 g:decada       ft_ada.txt      /*g:decada*
 g:decada.Error_Format  ft_ada.txt      /*g:decada.Error_Format*
 g:decada.Make()        ft_ada.txt      /*g:decada.Make()*
 g:decada.Make_Command  ft_ada.txt      /*g:decada.Make_Command*
 g:decada.Unit_Name()   ft_ada.txt      /*g:decada.Unit_Name()*
+g:filetype_csh syntax.txt      /*g:filetype_csh*
+g:filetype_r   syntax.txt      /*g:filetype_r*
 g:gnat ft_ada.txt      /*g:gnat*
 g:gnat.Error_Format    ft_ada.txt      /*g:gnat.Error_Format*
 g:gnat.Find()  ft_ada.txt      /*g:gnat.Find()*
@@ -5730,9 +5901,33 @@ g:gnat.Project_File      ft_ada.txt      /*g:gnat.Project_File*
 g:gnat.Set_Project_File()      ft_ada.txt      /*g:gnat.Set_Project_File()*
 g:gnat.Tags()  ft_ada.txt      /*g:gnat.Tags()*
 g:gnat.Tags_Command    ft_ada.txt      /*g:gnat.Tags_Command*
+g:html_charset_override        syntax.txt      /*g:html_charset_override*
+g:html_diff_one_file   syntax.txt      /*g:html_diff_one_file*
+g:html_dynamic_folds   syntax.txt      /*g:html_dynamic_folds*
+g:html_encoding_override       syntax.txt      /*g:html_encoding_override*
+g:html_end_line        syntax.txt      /*g:html_end_line*
+g:html_expand_tabs     syntax.txt      /*g:html_expand_tabs*
+g:html_hover_unfold    syntax.txt      /*g:html_hover_unfold*
+g:html_id_expr syntax.txt      /*g:html_id_expr*
+g:html_ignore_conceal  syntax.txt      /*g:html_ignore_conceal*
+g:html_ignore_folding  syntax.txt      /*g:html_ignore_folding*
+g:html_line_ids        syntax.txt      /*g:html_line_ids*
+g:html_no_foldcolumn   syntax.txt      /*g:html_no_foldcolumn*
+g:html_no_invalid      syntax.txt      /*g:html_no_invalid*
+g:html_no_pre  syntax.txt      /*g:html_no_pre*
+g:html_no_progress     syntax.txt      /*g:html_no_progress*
+g:html_number_lines    syntax.txt      /*g:html_number_lines*
+g:html_pre_wrap        syntax.txt      /*g:html_pre_wrap*
+g:html_prevent_copy    syntax.txt      /*g:html_prevent_copy*
+g:html_start_line      syntax.txt      /*g:html_start_line*
+g:html_use_css syntax.txt      /*g:html_use_css*
+g:html_use_encoding    syntax.txt      /*g:html_use_encoding*
+g:html_use_xhtml       syntax.txt      /*g:html_use_xhtml*
+g:html_whole_filler    syntax.txt      /*g:html_whole_filler*
 g:netrw_alto   pi_netrw.txt    /*g:netrw_alto*
 g:netrw_altv   pi_netrw.txt    /*g:netrw_altv*
 g:netrw_banner pi_netrw.txt    /*g:netrw_banner*
+g:netrw_bannerbackslash        pi_netrw.txt    /*g:netrw_bannerbackslash*
 g:netrw_browse_split   pi_netrw.txt    /*g:netrw_browse_split*
 g:netrw_browsex_viewer pi_netrw.txt    /*g:netrw_browsex_viewer*
 g:netrw_bufsettings    pi_netrw.txt    /*g:netrw_bufsettings*
@@ -5740,10 +5935,13 @@ g:netrw_chgperm pi_netrw.txt    /*g:netrw_chgperm*
 g:netrw_chgwin pi_netrw.txt    /*g:netrw_chgwin*
 g:netrw_compress       pi_netrw.txt    /*g:netrw_compress*
 g:netrw_ctags  pi_netrw.txt    /*g:netrw_ctags*
-g:netrw_cursorline     pi_netrw.txt    /*g:netrw_cursorline*
+g:netrw_cursor pi_netrw.txt    /*g:netrw_cursor*
 g:netrw_cygwin pi_netrw.txt    /*g:netrw_cygwin*
 g:netrw_dav_cmd        pi_netrw.txt    /*g:netrw_dav_cmd*
 g:netrw_decompress     pi_netrw.txt    /*g:netrw_decompress*
+g:netrw_dirhistmax     pi_netrw.txt    /*g:netrw_dirhistmax*
+g:netrw_dynamic_maxfilenamelen pi_netrw.txt    /*g:netrw_dynamic_maxfilenamelen*
+g:netrw_errorlvl       pi_netrw.txt    /*g:netrw_errorlvl*
 g:netrw_fastbrowse     pi_netrw.txt    /*g:netrw_fastbrowse*
 g:netrw_fetch_cmd      pi_netrw.txt    /*g:netrw_fetch_cmd*
 g:netrw_fname_escape   pi_netrw.txt    /*g:netrw_fname_escape*
@@ -5751,6 +5949,7 @@ g:netrw_ftp       pi_netrw.txt    /*g:netrw_ftp*
 g:netrw_ftp_browse_reject      pi_netrw.txt    /*g:netrw_ftp_browse_reject*
 g:netrw_ftp_cmd        pi_netrw.txt    /*g:netrw_ftp_cmd*
 g:netrw_ftp_list_cmd   pi_netrw.txt    /*g:netrw_ftp_list_cmd*
+g:netrw_ftp_options    pi_netrw.txt    /*g:netrw_ftp_options*
 g:netrw_ftp_sizelist_cmd       pi_netrw.txt    /*g:netrw_ftp_sizelist_cmd*
 g:netrw_ftp_timelist_cmd       pi_netrw.txt    /*g:netrw_ftp_timelist_cmd*
 g:netrw_ftpextracmd    pi_netrw.txt    /*g:netrw_ftpextracmd*
@@ -5765,17 +5964,19 @@ g:netrw_keepdir pi_netrw.txt    /*g:netrw_keepdir*
 g:netrw_list_cmd       pi_netrw.txt    /*g:netrw_list_cmd*
 g:netrw_list_hide      pi_netrw.txt    /*g:netrw_list_hide*
 g:netrw_liststyle      pi_netrw.txt    /*g:netrw_liststyle*
-g:netrw_local_mkdir    pi_netrw.txt    /*g:netrw_local_mkdir*
-g:netrw_local_rmdir    pi_netrw.txt    /*g:netrw_local_rmdir*
 g:netrw_localcopycmd   pi_netrw.txt    /*g:netrw_localcopycmd*
+g:netrw_localmkdir     pi_netrw.txt    /*g:netrw_localmkdir*
 g:netrw_localmovecmd   pi_netrw.txt    /*g:netrw_localmovecmd*
+g:netrw_localrmdir     pi_netrw.txt    /*g:netrw_localrmdir*
 g:netrw_maxfilenamelen pi_netrw.txt    /*g:netrw_maxfilenamelen*
 g:netrw_menu   pi_netrw.txt    /*g:netrw_menu*
 g:netrw_mkdir_cmd      pi_netrw.txt    /*g:netrw_mkdir_cmd*
 g:netrw_mousemaps      pi_netrw.txt    /*g:netrw_mousemaps*
+g:netrw_nobeval        pi_netrw.txt    /*g:netrw_nobeval*
 g:netrw_nogx   pi_netrw.txt    /*g:netrw_nogx*
 g:netrw_preview        pi_netrw.txt    /*g:netrw_preview*
 g:netrw_rcp_cmd        pi_netrw.txt    /*g:netrw_rcp_cmd*
+g:netrw_remote_mkdir   pi_netrw.txt    /*g:netrw_remote_mkdir*
 g:netrw_retmap pi_netrw.txt    /*g:netrw_retmap*
 g:netrw_rm_cmd pi_netrw.txt    /*g:netrw_rm_cmd*
 g:netrw_rmdir_cmd      pi_netrw.txt    /*g:netrw_rmdir_cmd*
@@ -5803,6 +6004,8 @@ g:netrw_use_nt_rcp        pi_netrw.txt    /*g:netrw_use_nt_rcp*
 g:netrw_win95ftp       pi_netrw.txt    /*g:netrw_win95ftp*
 g:netrw_winsize        pi_netrw.txt    /*g:netrw_winsize*
 g:netrw_xstrlen        pi_netrw.txt    /*g:netrw_xstrlen*
+g:sh_isk       syntax.txt      /*g:sh_isk*
+g:sh_noisk     syntax.txt      /*g:sh_noisk*
 g:syntax_on    syntax.txt      /*g:syntax_on*
 g:tar_browseoptions    pi_tar.txt      /*g:tar_browseoptions*
 g:tar_cmd      pi_tar.txt      /*g:tar_cmd*
@@ -5812,7 +6015,16 @@ g:tar_nomax      pi_tar.txt      /*g:tar_nomax*
 g:tar_readoptions      pi_tar.txt      /*g:tar_readoptions*
 g:tar_secure   pi_tar.txt      /*g:tar_secure*
 g:tar_writeoptions     pi_tar.txt      /*g:tar_writeoptions*
+g:tex_comment_nospell  syntax.txt      /*g:tex_comment_nospell*
 g:tex_conceal  syntax.txt      /*g:tex_conceal*
+g:tex_fast     syntax.txt      /*g:tex_fast*
+g:tex_flavor   filetype.txt    /*g:tex_flavor*
+g:tex_fold_enabled     syntax.txt      /*g:tex_fold_enabled*
+g:tex_isk      syntax.txt      /*g:tex_isk*
+g:tex_no_error syntax.txt      /*g:tex_no_error*
+g:tex_nospell  syntax.txt      /*g:tex_nospell*
+g:tex_stylish  syntax.txt      /*g:tex_stylish*
+g:tex_verbspell        syntax.txt      /*g:tex_verbspell*
 g:var  eval.txt        /*g:var*
 g:vimball_home pi_vimball.txt  /*g:vimball_home*
 g:vimball_mkdir        pi_vimball.txt  /*g:vimball_mkdir*
@@ -5843,6 +6055,7 @@ gF        editing.txt     /*gF*
 gH     visual.txt      /*gH*
 gI     insert.txt      /*gI*
 gJ     change.txt      /*gJ*
+gN     visual.txt      /*gN*
 gP     change.txt      /*gP*
 gQ     intro.txt       /*gQ*
 gR     change.txt      /*gR*
@@ -5863,6 +6076,7 @@ g`a       motion.txt      /*g`a*
 ga     various.txt     /*ga*
 garbagecollect()       eval.txt        /*garbagecollect()*
 gd     pattern.txt     /*gd*
+gdb    debug.txt       /*gdb*
 ge     motion.txt      /*ge*
 get()  eval.txt        /*get()*
 get-ms-debuggers       debug.txt       /*get-ms-debuggers*
@@ -5926,6 +6140,7 @@ glvs-options      pi_getscript.txt        /*glvs-options*
 glvs-plugins   pi_getscript.txt        /*glvs-plugins*
 glvs-usage     pi_getscript.txt        /*glvs-usage*
 gm     motion.txt      /*gm*
+gn     visual.txt      /*gn*
 gnat#Insert_Tags_Header()      ft_ada.txt      /*gnat#Insert_Tags_Header()*
 gnat#New()     ft_ada.txt      /*gnat#New()*
 gnat-xref      ft_ada.txt      /*gnat-xref*
@@ -5943,6 +6158,7 @@ graphic-option-gone       version4.txt    /*graphic-option-gone*
 greek  options.txt     /*greek*
 grep   quickfix.txt    /*grep*
 groff.vim      syntax.txt      /*groff.vim*
+gross-national-happiness       intro.txt       /*gross-national-happiness*
 group-name     syntax.txt      /*group-name*
 gs     various.txt     /*gs*
 gsp.vim        syntax.txt      /*gsp.vim*
@@ -5952,6 +6168,7 @@ gtk-tooltip-colors        gui_x11.txt     /*gtk-tooltip-colors*
 gu     change.txt      /*gu*
 gugu   change.txt      /*gugu*
 gui    gui.txt /*gui*
+gui-IME        gui.txt /*gui-IME*
 gui-clipboard  gui_w32.txt     /*gui-clipboard*
 gui-colors     syntax.txt      /*gui-colors*
 gui-extras     gui.txt /*gui-extras*
@@ -6009,6 +6226,7 @@ gui_w16.txt       gui_w16.txt     /*gui_w16.txt*
 gui_w32.txt    gui_w32.txt     /*gui_w32.txt*
 gui_x11.txt    gui_x11.txt     /*gui_x11.txt*
 guifontwide_gtk2       options.txt     /*guifontwide_gtk2*
+guifontwide_win_mbyte  options.txt     /*guifontwide_win_mbyte*
 guioptions_a   options.txt     /*guioptions_a*
 guu    change.txt      /*guu*
 gv     visual.txt      /*gv*
@@ -6031,6 +6249,7 @@ hangul    hangulin.txt    /*hangul*
 hangulin.txt   hangulin.txt    /*hangulin.txt*
 has()  eval.txt        /*has()*
 has-patch      eval.txt        /*has-patch*
+has-python     if_pyth.txt     /*has-python*
 has_key()      eval.txt        /*has_key()*
 haskell.vim    syntax.txt      /*haskell.vim*
 haslocaldir()  eval.txt        /*haslocaldir()*
@@ -6049,6 +6268,7 @@ helpfile_name.txt helphelp.txt    /*helpfile_name.txt*
 helphelp       helphelp.txt    /*helphelp*
 helphelp.txt   helphelp.txt    /*helphelp.txt*
 hex-editing    tips.txt        /*hex-editing*
+hex-number     eval.txt        /*hex-number*
 hidden-buffer  windows.txt     /*hidden-buffer*
 hidden-changed version5.txt    /*hidden-changed*
 hidden-menus   gui.txt /*hidden-menus*
@@ -6090,6 +6310,7 @@ hl-Cursor syntax.txt      /*hl-Cursor*
 hl-CursorColumn        syntax.txt      /*hl-CursorColumn*
 hl-CursorIM    syntax.txt      /*hl-CursorIM*
 hl-CursorLine  syntax.txt      /*hl-CursorLine*
+hl-CursorLineNr        syntax.txt      /*hl-CursorLineNr*
 hl-DiffAdd     syntax.txt      /*hl-DiffAdd*
 hl-DiffChange  syntax.txt      /*hl-DiffChange*
 hl-DiffDelete  syntax.txt      /*hl-DiffDelete*
@@ -6149,6 +6370,8 @@ howto.txt howto.txt       /*howto.txt*
 hpterm term.txt        /*hpterm*
 hpterm-color   syntax.txt      /*hpterm-color*
 html-flavor    insert.txt      /*html-flavor*
+html-indent    indent.txt      /*html-indent*
+html-indenting indent.txt      /*html-indenting*
 html.vim       syntax.txt      /*html.vim*
 htmlos.vim     syntax.txt      /*htmlos.vim*
 http   pi_netrw.txt    /*http*
@@ -6159,6 +6382,7 @@ i)        motion.txt      /*i)*
 i<     motion.txt      /*i<*
 i>     motion.txt      /*i>*
 iB     motion.txt      /*iB*
+iBus   gui.txt /*iBus*
 iW     motion.txt      /*iW*
 i[     motion.txt      /*i[*
 i]     motion.txt      /*i]*
@@ -6354,6 +6578,7 @@ internet  intro.txt       /*internet*
 intro  intro.txt       /*intro*
 intro.txt      intro.txt       /*intro.txt*
 inverse        syntax.txt      /*inverse*
+invert()       eval.txt        /*invert()*
 ip     motion.txt      /*ip*
 iquote motion.txt      /*iquote*
 is     motion.txt      /*is*
@@ -6405,6 +6630,7 @@ keypad-point      intro.txt       /*keypad-point*
 keys() eval.txt        /*keys()*
 known-bugs     todo.txt        /*known-bugs*
 l      motion.txt      /*l*
+l:     eval.txt        /*l:*
 l:var  eval.txt        /*l:var*
 lCursor        mbyte.txt       /*lCursor*
 lace.vim       syntax.txt      /*lace.vim*
@@ -6413,7 +6639,15 @@ language-mapping map.txt /*language-mapping*
 last-pattern   pattern.txt     /*last-pattern*
 last-position-jump     eval.txt        /*last-position-jump*
 last_buffer_nr()       eval.txt        /*last_buffer_nr()*
+latex-syntax   syntax.txt      /*latex-syntax*
 lc_time-variable       eval.txt        /*lc_time-variable*
+lcs-conceal    options.txt     /*lcs-conceal*
+lcs-eol        options.txt     /*lcs-eol*
+lcs-extends    options.txt     /*lcs-extends*
+lcs-nbsp       options.txt     /*lcs-nbsp*
+lcs-precedes   options.txt     /*lcs-precedes*
+lcs-tab        options.txt     /*lcs-tab*
+lcs-trail      options.txt     /*lcs-trail*
 left-right-motions     motion.txt      /*left-right-motions*
 len()  eval.txt        /*len()*
 less   various.txt     /*less*
@@ -6459,16 +6693,25 @@ location-list-window    quickfix.txt    /*location-list-window*
 log()  eval.txt        /*log()*
 log10()        eval.txt        /*log10()*
 long-lines     version5.txt    /*long-lines*
+love   intro.txt       /*love*
 lowercase      change.txt      /*lowercase*
 lpc.vim        syntax.txt      /*lpc.vim*
 lua    if_lua.txt      /*lua*
 lua-buffer     if_lua.txt      /*lua-buffer*
 lua-commands   if_lua.txt      /*lua-commands*
+lua-dict       if_lua.txt      /*lua-dict*
+lua-eval       if_lua.txt      /*lua-eval*
+lua-funcref    if_lua.txt      /*lua-funcref*
+lua-list       if_lua.txt      /*lua-list*
+lua-luaeval    if_lua.txt      /*lua-luaeval*
 lua-vim        if_lua.txt      /*lua-vim*
 lua-window     if_lua.txt      /*lua-window*
 lua.vim        syntax.txt      /*lua.vim*
+luaeval()      eval.txt        /*luaeval()*
 m      motion.txt      /*m*
 m'     motion.txt      /*m'*
+m<     motion.txt      /*m<*
+m>     motion.txt      /*m>*
 m[     motion.txt      /*m[*
 m]     motion.txt      /*m]*
 m`     motion.txt      /*m`*
@@ -6492,12 +6735,14 @@ map-<SID>       map.txt /*map-<SID>*
 map-ambiguous  map.txt /*map-ambiguous*
 map-backtick   tips.txt        /*map-backtick*
 map-comments   map.txt /*map-comments*
+map-error      map.txt /*map-error*
 map-examples   map.txt /*map-examples*
 map-keys-fails map.txt /*map-keys-fails*
 map-listing    map.txt /*map-listing*
 map-modes      map.txt /*map-modes*
 map-multibyte  map.txt /*map-multibyte*
 map-overview   map.txt /*map-overview*
+map-precedence map.txt /*map-precedence*
 map-self-destroy       tips.txt        /*map-self-destroy*
 map-typing     map.txt /*map-typing*
 map-which-keys map.txt /*map-which-keys*
@@ -6525,6 +6770,7 @@ mapmode-s map.txt /*mapmode-s*
 mapmode-v      map.txt /*mapmode-v*
 mapmode-x      map.txt /*mapmode-x*
 mapping        map.txt /*mapping*
+mapping-functions      usr_41.txt      /*mapping-functions*
 mark   motion.txt      /*mark*
 mark-functions usr_41.txt      /*mark-functions*
 mark-motions   motion.txt      /*mark-motions*
@@ -6636,6 +6882,7 @@ mzscheme-buffer   if_mzsch.txt    /*mzscheme-buffer*
 mzscheme-commands      if_mzsch.txt    /*mzscheme-commands*
 mzscheme-dynamic       if_mzsch.txt    /*mzscheme-dynamic*
 mzscheme-examples      if_mzsch.txt    /*mzscheme-examples*
+mzscheme-funcref       if_mzsch.txt    /*mzscheme-funcref*
 mzscheme-mzeval        if_mzsch.txt    /*mzscheme-mzeval*
 mzscheme-sandbox       if_mzsch.txt    /*mzscheme-sandbox*
 mzscheme-threads       if_mzsch.txt    /*mzscheme-threads*
@@ -6680,8 +6927,10 @@ netrw-O  pi_netrw.txt    /*netrw-O*
 netrw-P        pi_netrw.txt    /*netrw-P*
 netrw-R        pi_netrw.txt    /*netrw-R*
 netrw-S        pi_netrw.txt    /*netrw-S*
-netrw-T        pi_netrw.txt    /*netrw-T*
+netrw-Tb       pi_netrw.txt    /*netrw-Tb*
+netrw-Th       pi_netrw.txt    /*netrw-Th*
 netrw-U        pi_netrw.txt    /*netrw-U*
+netrw-X        pi_netrw.txt    /*netrw-X*
 netrw-a        pi_netrw.txt    /*netrw-a*
 netrw-activate pi_netrw.txt    /*netrw-activate*
 netrw-bookmark pi_netrw.txt    /*netrw-bookmark*
@@ -6691,6 +6940,7 @@ netrw-browse-cmds pi_netrw.txt    /*netrw-browse-cmds*
 netrw-browse-maps      pi_netrw.txt    /*netrw-browse-maps*
 netrw-browser  pi_netrw.txt    /*netrw-browser*
 netrw-browser-options  pi_netrw.txt    /*netrw-browser-options*
+netrw-browser-settings pi_netrw.txt    /*netrw-browser-settings*
 netrw-browser-var      pi_netrw.txt    /*netrw-browser-var*
 netrw-browsing pi_netrw.txt    /*netrw-browsing*
 netrw-c        pi_netrw.txt    /*netrw-c*
@@ -6700,6 +6950,7 @@ netrw-clean       pi_netrw.txt    /*netrw-clean*
 netrw-contents pi_netrw.txt    /*netrw-contents*
 netrw-copyright        pi_netrw.txt    /*netrw-copyright*
 netrw-cr       pi_netrw.txt    /*netrw-cr*
+netrw-createfile       pi_netrw.txt    /*netrw-createfile*
 netrw-credits  pi_netrw.txt    /*netrw-credits*
 netrw-ctrl-h   pi_netrw.txt    /*netrw-ctrl-h*
 netrw-ctrl-l   pi_netrw.txt    /*netrw-ctrl-l*
@@ -6723,7 +6974,9 @@ netrw-fixup       pi_netrw.txt    /*netrw-fixup*
 netrw-ftp      pi_netrw.txt    /*netrw-ftp*
 netrw-ftype    pi_netrw.txt    /*netrw-ftype*
 netrw-gb       pi_netrw.txt    /*netrw-gb*
+netrw-gd       pi_netrw.txt    /*netrw-gd*
 netrw-getftype pi_netrw.txt    /*netrw-getftype*
+netrw-gf       pi_netrw.txt    /*netrw-gf*
 netrw-gh       pi_netrw.txt    /*netrw-gh*
 netrw-gp       pi_netrw.txt    /*netrw-gp*
 netrw-gx       pi_netrw.txt    /*netrw-gx*
@@ -6736,6 +6989,7 @@ netrw-history     pi_netrw.txt    /*netrw-history*
 netrw-horiz    pi_netrw.txt    /*netrw-horiz*
 netrw-i        pi_netrw.txt    /*netrw-i*
 netrw-incompatible     pi_netrw.txt    /*netrw-incompatible*
+netrw-internal-variables       pi_netrw.txt    /*netrw-internal-variables*
 netrw-intro-browse     pi_netrw.txt    /*netrw-intro-browse*
 netrw-leftmouse        pi_netrw.txt    /*netrw-leftmouse*
 netrw-list     pi_netrw.txt    /*netrw-list*
@@ -6743,6 +6997,7 @@ netrw-listbookmark        pi_netrw.txt    /*netrw-listbookmark*
 netrw-listhack pi_netrw.txt    /*netrw-listhack*
 netrw-login    pi_netrw.txt    /*netrw-login*
 netrw-mB       pi_netrw.txt    /*netrw-mB*
+netrw-mF       pi_netrw.txt    /*netrw-mF*
 netrw-mT       pi_netrw.txt    /*netrw-mT*
 netrw-mb       pi_netrw.txt    /*netrw-mb*
 netrw-mc       pi_netrw.txt    /*netrw-mc*
@@ -6776,6 +7031,8 @@ netrw-p10 pi_netrw.txt    /*netrw-p10*
 netrw-p11      pi_netrw.txt    /*netrw-p11*
 netrw-p12      pi_netrw.txt    /*netrw-p12*
 netrw-p13      pi_netrw.txt    /*netrw-p13*
+netrw-p14      pi_netrw.txt    /*netrw-p14*
+netrw-p15      pi_netrw.txt    /*netrw-p15*
 netrw-p2       pi_netrw.txt    /*netrw-p2*
 netrw-p3       pi_netrw.txt    /*netrw-p3*
 netrw-p4       pi_netrw.txt    /*netrw-p4*
@@ -6795,6 +7052,7 @@ netrw-prvwin      pi_netrw.txt    /*netrw-prvwin*
 netrw-pscp     pi_netrw.txt    /*netrw-pscp*
 netrw-psftp    pi_netrw.txt    /*netrw-psftp*
 netrw-putty    pi_netrw.txt    /*netrw-putty*
+netrw-qF       pi_netrw.txt    /*netrw-qF*
 netrw-qb       pi_netrw.txt    /*netrw-qb*
 netrw-qf       pi_netrw.txt    /*netrw-qf*
 netrw-quickcom pi_netrw.txt    /*netrw-quickcom*
@@ -6811,8 +7069,10 @@ netrw-rexplore   pi_netrw.txt    /*netrw-rexplore*
 netrw-rightmouse       pi_netrw.txt    /*netrw-rightmouse*
 netrw-s        pi_netrw.txt    /*netrw-s*
 netrw-settings pi_netrw.txt    /*netrw-settings*
+netrw-settings-window  pi_netrw.txt    /*netrw-settings-window*
 netrw-sexplore pi_netrw.txt    /*netrw-sexplore*
 netrw-sort     pi_netrw.txt    /*netrw-sort*
+netrw-sort-sequence    pi_netrw.txt    /*netrw-sort-sequence*
 netrw-sortsequence     pi_netrw.txt    /*netrw-sortsequence*
 netrw-source   pi_netrw.txt    /*netrw-source*
 netrw-ssh-hack pi_netrw.txt    /*netrw-ssh-hack*
@@ -6824,6 +7084,7 @@ netrw-start       pi_netrw.txt    /*netrw-start*
 netrw-t        pi_netrw.txt    /*netrw-t*
 netrw-texplore pi_netrw.txt    /*netrw-texplore*
 netrw-todo     pi_netrw.txt    /*netrw-todo*
+netrw-trailingslash    pi_netrw.txt    /*netrw-trailingslash*
 netrw-transparent      pi_netrw.txt    /*netrw-transparent*
 netrw-u        pi_netrw.txt    /*netrw-u*
 netrw-updir    pi_netrw.txt    /*netrw-updir*
@@ -6833,6 +7094,8 @@ netrw-v   pi_netrw.txt    /*netrw-v*
 netrw-var      pi_netrw.txt    /*netrw-var*
 netrw-variables        pi_netrw.txt    /*netrw-variables*
 netrw-vexplore pi_netrw.txt    /*netrw-vexplore*
+netrw-windows-netrc    pi_netrw.txt    /*netrw-windows-netrc*
+netrw-windows-s        pi_netrw.txt    /*netrw-windows-s*
 netrw-write    pi_netrw.txt    /*netrw-write*
 netrw-x        pi_netrw.txt    /*netrw-x*
 netrw-xfer     pi_netrw.txt    /*netrw-xfer*
@@ -6900,6 +7163,7 @@ new-posix version7.txt    /*new-posix*
 new-print-multi-byte   version7.txt    /*new-print-multi-byte*
 new-printing   version6.txt    /*new-printing*
 new-python3    version7.txt    /*new-python3*
+new-regexp-engine      version7.txt    /*new-regexp-engine*
 new-runtime-dir        version5.txt    /*new-runtime-dir*
 new-script     version5.txt    /*new-script*
 new-script-5.4 version5.txt    /*new-script-5.4*
@@ -6933,6 +7197,7 @@ notation  intro.txt       /*notation*
 notepad        gui_w32.txt     /*notepad*
 nr2char()      eval.txt        /*nr2char()*
 nroff.vim      syntax.txt      /*nroff.vim*
+number_relativenumber  options.txt     /*number_relativenumber*
 numbered-function      eval.txt        /*numbered-function*
 o      insert.txt      /*o*
 o_CTRL-V       motion.txt      /*o_CTRL-V*
@@ -6944,7 +7209,8 @@ objects   index.txt       /*objects*
 obtaining-exted        netbeans.txt    /*obtaining-exted*
 ocaml.vim      syntax.txt      /*ocaml.vim*
 octal  eval.txt        /*octal*
-octal-number   options.txt     /*octal-number*
+octal-nrformats        options.txt     /*octal-nrformats*
+octal-number   eval.txt        /*octal-number*
 oldfiles-variable      eval.txt        /*oldfiles-variable*
 ole-activation if_ole.txt      /*ole-activation*
 ole-eval       if_ole.txt      /*ole-eval*
@@ -6964,9 +7230,12 @@ operator-variable        eval.txt        /*operator-variable*
 option-backslash       options.txt     /*option-backslash*
 option-list    quickref.txt    /*option-list*
 option-summary options.txt     /*option-summary*
+option-window  options.txt     /*option-window*
 options        options.txt     /*options*
 options-changed        version5.txt    /*options-changed*
 options.txt    options.txt     /*options.txt*
+optwin options.txt     /*optwin*
+or()   eval.txt        /*or()*
 oracle ft_sql.txt      /*oracle*
 os2    os_os2.txt      /*os2*
 os2ansi        os_os2.txt      /*os2ansi*
@@ -7004,6 +7273,7 @@ pattern-searches  pattern.txt     /*pattern-searches*
 pattern.txt    pattern.txt     /*pattern.txt*
 patterns-composing     pattern.txt     /*patterns-composing*
 pdev-option    print.txt       /*pdev-option*
+peace  intro.txt       /*peace*
 penc-option    print.txt       /*penc-option*
 perl   if_perl.txt     /*perl*
 perl-Append    if_perl.txt     /*perl-Append*
@@ -7112,9 +7382,21 @@ pterm-mouse      options.txt     /*pterm-mouse*
 pumvisible()   eval.txt        /*pumvisible()*
 put    change.txt      /*put*
 put-Visual-mode        change.txt      /*put-Visual-mode*
+py3eval()      eval.txt        /*py3eval()*
+pyeval()       eval.txt        /*pyeval()*
 python if_pyth.txt     /*python*
+python-.locked if_pyth.txt     /*python-.locked*
+python-2-and-3 if_pyth.txt     /*python-2-and-3*
+python-Dictionary      if_pyth.txt     /*python-Dictionary*
+python-Function        if_pyth.txt     /*python-Function*
+python-List    if_pyth.txt     /*python-List*
+python-VIM_SPECIAL_PATH        if_pyth.txt     /*python-VIM_SPECIAL_PATH*
+python-_get_paths      if_pyth.txt     /*python-_get_paths*
+python-bindeval        if_pyth.txt     /*python-bindeval*
+python-bindeval-objects        if_pyth.txt     /*python-bindeval-objects*
 python-buffer  if_pyth.txt     /*python-buffer*
 python-buffers if_pyth.txt     /*python-buffers*
+python-chdir   if_pyth.txt     /*python-chdir*
 python-command if_pyth.txt     /*python-command*
 python-commands        if_pyth.txt     /*python-commands*
 python-current if_pyth.txt     /*python-current*
@@ -7122,14 +7404,29 @@ python-dynamic  if_pyth.txt     /*python-dynamic*
 python-error   if_pyth.txt     /*python-error*
 python-eval    if_pyth.txt     /*python-eval*
 python-examples        if_pyth.txt     /*python-examples*
+python-fchdir  if_pyth.txt     /*python-fchdir*
+python-find_module     if_pyth.txt     /*python-find_module*
+python-foreach_rtp     if_pyth.txt     /*python-foreach_rtp*
 python-input   if_pyth.txt     /*python-input*
+python-options if_pyth.txt     /*python-options*
 python-output  if_pyth.txt     /*python-output*
+python-path_hook       if_pyth.txt     /*python-path_hook*
+python-pyeval  if_pyth.txt     /*python-pyeval*
 python-range   if_pyth.txt     /*python-range*
+python-special-path    if_pyth.txt     /*python-special-path*
+python-strwidth        if_pyth.txt     /*python-strwidth*
+python-tabpage if_pyth.txt     /*python-tabpage*
+python-tabpages        if_pyth.txt     /*python-tabpages*
+python-vars    if_pyth.txt     /*python-vars*
 python-vim     if_pyth.txt     /*python-vim*
+python-vvars   if_pyth.txt     /*python-vvars*
 python-window  if_pyth.txt     /*python-window*
 python-windows if_pyth.txt     /*python-windows*
 python.vim     syntax.txt      /*python.vim*
+python2-directory      if_pyth.txt     /*python2-directory*
 python3        if_pyth.txt     /*python3*
+python3-directory      if_pyth.txt     /*python3-directory*
+pythonx-directory      if_pyth.txt     /*pythonx-directory*
 q      repeat.txt      /*q*
 q/     cmdline.txt     /*q\/*
 q:     cmdline.txt     /*q:*
@@ -7212,6 +7509,7 @@ register-faq      sponsor.txt     /*register-faq*
 register-variable      eval.txt        /*register-variable*
 registers      change.txt      /*registers*
 regular-expression     pattern.txt     /*regular-expression*
+reload editing.txt     /*reload*
 reltime()      eval.txt        /*reltime()*
 reltimestr()   eval.txt        /*reltimestr()*
 remote.txt     remote.txt      /*remote.txt*
@@ -7246,19 +7544,9 @@ right-justify    change.txt      /*right-justify*
 rileft rileft.txt      /*rileft*
 rileft.txt     rileft.txt      /*rileft.txt*
 riscos os_risc.txt     /*riscos*
-riscos-commandline     os_risc.txt     /*riscos-commandline*
-riscos-filetypes       os_risc.txt     /*riscos-filetypes*
-riscos-gui     os_risc.txt     /*riscos-gui*
-riscos-interrupt       os_risc.txt     /*riscos-interrupt*
-riscos-locations       os_risc.txt     /*riscos-locations*
-riscos-memory  os_risc.txt     /*riscos-memory*
-riscos-munging os_risc.txt     /*riscos-munging*
-riscos-porting os_risc.txt     /*riscos-porting*
-riscos-remote  os_risc.txt     /*riscos-remote*
-riscos-shell   os_risc.txt     /*riscos-shell*
-riscos-temp-files      os_risc.txt     /*riscos-temp-files*
 rot13  change.txt      /*rot13*
 round()        eval.txt        /*round()*
+rst.vim        syntax.txt      /*rst.vim*
 rsync  pi_netrw.txt    /*rsync*
 ruby   if_ruby.txt     /*ruby*
 ruby-buffer    if_ruby.txt     /*ruby-buffer*
@@ -7310,6 +7598,10 @@ save-file        editing.txt     /*save-file*
 save-settings  starting.txt    /*save-settings*
 scheme.vim     syntax.txt      /*scheme.vim*
 scp    pi_netrw.txt    /*scp*
+screenattr()   eval.txt        /*screenattr()*
+screenchar()   eval.txt        /*screenchar()*
+screencol()    eval.txt        /*screencol()*
+screenrow()    eval.txt        /*screenrow()*
 script usr_41.txt      /*script*
 script-here    if_perl.txt     /*script-here*
 script-local   map.txt /*script-local*
@@ -7374,12 +7666,17 @@ setuid  change.txt      /*setuid*
 setwinvar()    eval.txt        /*setwinvar()*
 sftp   pi_netrw.txt    /*sftp*
 sgml.vim       syntax.txt      /*sgml.vim*
+sgr-mouse      options.txt     /*sgr-mouse*
+sh-awk syntax.txt      /*sh-awk*
+sh-embed       syntax.txt      /*sh-embed*
 sh.vim syntax.txt      /*sh.vim*
+sha256()       eval.txt        /*sha256()*
 shell-window   tips.txt        /*shell-window*
 shell_error-variable   eval.txt        /*shell_error-variable*
 shellescape()  eval.txt        /*shellescape()*
 shift  intro.txt       /*shift*
 shift-left-right       change.txt      /*shift-left-right*
+shiftwidth()   eval.txt        /*shiftwidth()*
 short-name-changed     version4.txt    /*short-name-changed*
 showing-menus  gui.txt /*showing-menus*
 sign-commands  sign.txt        /*sign-commands*
@@ -7641,6 +7938,7 @@ system-functions  usr_41.txt      /*system-functions*
 system-vimrc   starting.txt    /*system-vimrc*
 s~     change.txt      /*s~*
 t      motion.txt      /*t*
+t:     eval.txt        /*t:*
 t:var  eval.txt        /*t:var*
 t_#2   term.txt        /*t_#2*
 t_#4   term.txt        /*t_#4*
@@ -7785,6 +8083,7 @@ t_ti      term.txt        /*t_ti*
 t_tp   version4.txt    /*t_tp*
 t_ts   term.txt        /*t_ts*
 t_ts_old       version4.txt    /*t_ts_old*
+t_u7   term.txt        /*t_u7*
 t_ue   term.txt        /*t_ue*
 t_undo version4.txt    /*t_undo*
 t_us   term.txt        /*t_us*
@@ -7919,7 +8218,9 @@ tex-nospell       syntax.txt      /*tex-nospell*
 tex-package    syntax.txt      /*tex-package*
 tex-runon      syntax.txt      /*tex-runon*
 tex-slow       syntax.txt      /*tex-slow*
+tex-stopzone   syntax.txt      /*tex-stopzone*
 tex-style      syntax.txt      /*tex-style*
+tex-sync       syntax.txt      /*tex-sync*
 tex-verb       syntax.txt      /*tex-verb*
 tex.vim        syntax.txt      /*tex.vim*
 text-functions usr_41.txt      /*text-functions*
@@ -7955,6 +8256,7 @@ try-nested        eval.txt        /*try-nested*
 try-nesting    eval.txt        /*try-nesting*
 tutor  usr_01.txt      /*tutor*
 twice  if_cscop.txt    /*twice*
+two-engines    pattern.txt     /*two-engines*
 type() eval.txt        /*type()*
 type-mistakes  tips.txt        /*type-mistakes*
 typecorr-settings      usr_41.txt      /*typecorr-settings*
@@ -7982,6 +8284,7 @@ unix      os_unix.txt     /*unix*
 unlisted-buffer        windows.txt     /*unlisted-buffer*
 up-down-motions        motion.txt      /*up-down-motions*
 uppercase      change.txt      /*uppercase*
+urxvt-mouse    options.txt     /*urxvt-mouse*
 use-cpo-save   usr_41.txt      /*use-cpo-save*
 use-visual-cmds        version4.txt    /*use-visual-cmds*
 useful-mappings        tips.txt        /*useful-mappings*
@@ -8034,6 +8337,7 @@ utf-8-in-xwindows mbyte.txt       /*utf-8-in-xwindows*
 utf-8-typing   mbyte.txt       /*utf-8-typing*
 utf8   mbyte.txt       /*utf8*
 v      visual.txt      /*v*
+v:     eval.txt        /*v:*
 v:beval_bufnr  eval.txt        /*v:beval_bufnr*
 v:beval_col    eval.txt        /*v:beval_col*
 v:beval_lnum   eval.txt        /*v:beval_lnum*
@@ -8089,6 +8393,7 @@ v:val     eval.txt        /*v:val*
 v:var  eval.txt        /*v:var*
 v:version      eval.txt        /*v:version*
 v:warningmsg   eval.txt        /*v:warningmsg*
+v:windowid     eval.txt        /*v:windowid*
 v_!    change.txt      /*v_!*
 v_$    visual.txt      /*v_$*
 v_:    cmdline.txt     /*v_:*
@@ -8156,11 +8461,13 @@ v_d     change.txt      /*v_d*
 v_g?   change.txt      /*v_g?*
 v_gF   editing.txt     /*v_gF*
 v_gJ   change.txt      /*v_gJ*
+v_gN   visual.txt      /*v_gN*
 v_gV   visual.txt      /*v_gV*
 v_g]   tagsrch.txt     /*v_g]*
 v_g_CTRL-G     editing.txt     /*v_g_CTRL-G*
 v_g_CTRL-]     tagsrch.txt     /*v_g_CTRL-]*
 v_gf   editing.txt     /*v_gf*
+v_gn   visual.txt      /*v_gn*
 v_gq   change.txt      /*v_gq*
 v_gv   visual.txt      /*v_gv*
 v_gw   change.txt      /*v_gw*
@@ -8221,6 +8528,7 @@ version-7.0       version7.txt    /*version-7.0*
 version-7.1    version7.txt    /*version-7.1*
 version-7.2    version7.txt    /*version-7.2*
 version-7.3    version7.txt    /*version-7.3*
+version-7.4    version7.txt    /*version-7.4*
 version-variable       eval.txt        /*version-variable*
 version4.txt   version4.txt    /*version4.txt*
 version5.txt   version5.txt    /*version5.txt*
@@ -8229,6 +8537,7 @@ version7.0        version7.txt    /*version7.0*
 version7.1     version7.txt    /*version7.1*
 version7.2     version7.txt    /*version7.2*
 version7.3     version7.txt    /*version7.3*
+version7.4     version7.txt    /*version7.4*
 version7.txt   version7.txt    /*version7.txt*
 vi     intro.txt       /*vi*
 vi-differences vi_diff.txt     /*vi-differences*
@@ -8263,13 +8572,27 @@ vimdev  intro.txt       /*vimdev*
 vimdiff        diff.txt        /*vimdiff*
 vimfiles       options.txt     /*vimfiles*
 viminfo        starting.txt    /*viminfo*
+viminfo-!      options.txt     /*viminfo-!*
+viminfo-%      options.txt     /*viminfo-%*
+viminfo-'      options.txt     /*viminfo-'*
+viminfo-/      options.txt     /*viminfo-\/*
+viminfo-:      options.txt     /*viminfo-:*
+viminfo-<      options.txt     /*viminfo-<*
+viminfo-@      options.txt     /*viminfo-@*
+viminfo-c      options.txt     /*viminfo-c*
 viminfo-encoding       starting.txt    /*viminfo-encoding*
 viminfo-errors starting.txt    /*viminfo-errors*
+viminfo-f      options.txt     /*viminfo-f*
 viminfo-file   starting.txt    /*viminfo-file*
 viminfo-file-marks     starting.txt    /*viminfo-file-marks*
 viminfo-file-name      starting.txt    /*viminfo-file-name*
+viminfo-h      options.txt     /*viminfo-h*
+viminfo-n      options.txt     /*viminfo-n*
+viminfo-quote  options.txt     /*viminfo-quote*
+viminfo-r      options.txt     /*viminfo-r*
 viminfo-read   starting.txt    /*viminfo-read*
 viminfo-read-write     starting.txt    /*viminfo-read-write*
+viminfo-s      options.txt     /*viminfo-s*
 viminfo-write  starting.txt    /*viminfo-write*
 vimrc  starting.txt    /*vimrc*
 vimrc-filetype usr_05.txt      /*vimrc-filetype*
@@ -8309,6 +8632,8 @@ vt100-cursor-keys term.txt        /*vt100-cursor-keys*
 vt100-function-keys    term.txt        /*vt100-function-keys*
 w      motion.txt      /*w*
 w32-clientserver       remote.txt      /*w32-clientserver*
+w32-xpm-support        gui_w32.txt     /*w32-xpm-support*
+w:     eval.txt        /*w:*
 w:current_syntax       syntax.txt      /*w:current_syntax*
 w:quickfix_title       quickfix.txt    /*w:quickfix_title*
 w:var  eval.txt        /*w:var*
@@ -8317,6 +8642,7 @@ white-space       pattern.txt     /*white-space*
 whitespace     pattern.txt     /*whitespace*
 wildcard       editing.txt     /*wildcard*
 wildcards      editing.txt     /*wildcards*
+wildmenumode() eval.txt        /*wildmenumode()*
 win16-!start   gui_w16.txt     /*win16-!start*
 win16-clipboard        gui_w16.txt     /*win16-clipboard*
 win16-colors   gui_w16.txt     /*win16-colors*
@@ -8363,6 +8689,7 @@ window-size       term.txt        /*window-size*
 window-size-functions  usr_41.txt      /*window-size-functions*
 window-tag     windows.txt     /*window-tag*
 window-variable        eval.txt        /*window-variable*
+windowid-variable      eval.txt        /*windowid-variable*
 windows        windows.txt     /*windows*
 windows-3.1    os_win32.txt    /*windows-3.1*
 windows-intro  windows.txt     /*windows-intro*
@@ -8395,6 +8722,7 @@ write-fail        editing.txt     /*write-fail*
 write-filetype-plugin  usr_41.txt      /*write-filetype-plugin*
 write-library-script   usr_41.txt      /*write-library-script*
 write-local-help       usr_41.txt      /*write-local-help*
+write-permissions      editing.txt     /*write-permissions*
 write-plugin   usr_41.txt      /*write-plugin*
 write-plugin-quickload usr_41.txt      /*write-plugin-quickload*
 write-quit     editing.txt     /*write-quit*
@@ -8417,6 +8745,7 @@ xiterm    syntax.txt      /*xiterm*
 xml-folding    syntax.txt      /*xml-folding*
 xml-omni-datafile      insert.txt      /*xml-omni-datafile*
 xml.vim        syntax.txt      /*xml.vim*
+xor()  eval.txt        /*xor()*
 xpm.vim        syntax.txt      /*xpm.vim*
 xterm-8-bit    term.txt        /*xterm-8-bit*
 xterm-8bit     term.txt        /*xterm-8bit*
index 70c6c68..74f40e7 100644 (file)
@@ -1,4 +1,4 @@
-*tagsrch.txt*   For Vim version 7.3.  Last change: 2009 Feb 18
+*tagsrch.txt*   For Vim version 7.4.  Last change: 2013 Jul 28
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -115,7 +115,7 @@ CTRL-T                      Jump to [count] older entry in the tag stack
 
 The output of ":tags" looks like this:
 
-   # TO tag      FROM line in file/line
+   # TO tag      FROM line  in file/text
    1  1 main            1  harddisk2:text/vim/test
  > 2  2 FuncA          58  i = FuncA(10);
    3  1 FuncC         357  harddisk2:text/vim/src/amiga.c
@@ -135,7 +135,7 @@ you were before the tag command.  The line number will be correct, also when
 deleting/inserting lines, unless this was done by another program (e.g.
 another instance of Vim).
 
-For the current file, the "file/line" column shows the text at the position.
+For the current file, the "file/text" column shows the text at the position.
 An indent is removed and a long line is truncated to fit in the window.
 
 You can jump to previously used tags with several commands.  Some examples:
@@ -164,9 +164,9 @@ entry was not at the bottom, the entries below the last used one are
 deleted.  This means that an old branch in the call graph is lost.  After the
 commands explained above the tag stack will look like this:
 
-   # TO tag    FROM line in file
-   1 main             1  harddisk2:text/vim/test
-   2 FuncB           59  harddisk2:text/vim/src/main.c
+   # TO tag    FROM line  in file/text
+   1  1 main           1  harddisk2:text/vim/test
+   2  1 FuncB         59  harddisk2:text/vim/src/main.c
 
                                                        *E73*
 When you try to use the tag stack while it doesn't contain anything you will
@@ -357,7 +357,7 @@ slower then.  The former can be avoided by case-fold sorting the tags file.
 See 'tagbsearch' for details.
 
                                                        *tag-regexp*
-The ":tag" and "tselect" commands accept a regular expression argument.  See
+The ":tag" and ":tselect" commands accept a regular expression argument.  See
 |pattern| for the special characters that can be used.
 When the argument starts with '/', it is used as a pattern.  If the argument
 does not start with '/', it is taken literally, as a full tag name.
@@ -770,12 +770,12 @@ CTRL-W i          Open a new window, with the cursor on the first line
                        {not in Vi}
 
                                                        *:dli* *:dlist*
-:[range]dl[ist][!] [/]string[/]
+:[range]dli[st][!] [/]string[/]
                        Like "[D"  and "]D", but search in [range] lines
                        (default: whole file).
                        See |:search-args| for [/] and [!].  {not in Vi}
                        Note that ":dl" works like ":delete" with the "l"
-                       flag.
+                       register.
 
                                                        *[_CTRL-D*
 [ CTRL-D               Jump to the first macro definition that contains the
index 8dc9773..eb5d7fb 100644 (file)
@@ -1,4 +1,4 @@
-*term.txt*      For Vim version 7.3.  Last change: 2009 Nov 05
+*term.txt*      For Vim version 7.4.  Last change: 2013 Mar 13
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -294,6 +294,8 @@ Added by Vim (there are no standard codes for these):
                |termcap-cursor-shape|
        t_RV    request terminal version string (for xterm)     *t_RV* *'t_RV'*
                |xterm-8bit| |v:termresponse| |'ttymouse'| |xterm-codes|
+       t_u7    request cursor position (for xterm)             *t_u7* *'t_u7'*
+               see |'ambiwidth'|
 
 KEY CODES
 Note: Use the <> form if possible
@@ -326,7 +328,7 @@ Note: Use the <> form if possible
        t_k8    <F8>            function key 8          *<F8>*  *t_k8* *'t_k8'*
        t_k9    <F9>            function key 9          *<F9>*  *t_k9* *'t_k9'*
        t_k;    <F10>           function key 10         *<F10>* *t_k;* *'t_k;'*
-       t_F1    <F11>           function key 11         *<F11>* *t_F1* *'t_F1'*
+       t_F1    <F11>           function key 11         *<F11>* *t_F1* *'t_F1'*
        t_F2    <F12>           function key 12         *<F12>* *t_F2* *'t_F2'*
        t_F3    <F13>           function key 13         *<F13>* *t_F3* *'t_F3'*
        t_F4    <F14>           function key 14         *<F14>* *t_F4* *'t_F4'*
@@ -356,9 +358,9 @@ Note: Use the <> form if possible
        t_kI    <Insert>        insert key                      *t_kI* *'t_kI'*
        t_kD    <Del>           delete key                      *t_kD* *'t_kD'*
        t_kb    <BS>            backspace key                   *t_kb* *'t_kb'*
-       t_kB    <S-Tab>         back-tab (shift-tab)  *<S-Tab>* *t_kB* *'t_kB'*
+       t_kB    <S-Tab>         back-tab (shift-tab)  *<S-Tab>* *t_kB* *'t_kB'*
        t_kh    <Home>          home key                        *t_kh* *'t_kh'*
-       t_#2    <S-Home>        shifted home key     *<S-Home>* *t_#2* *'t_#2'*
+       t_#2    <S-Home>        shifted home key     *<S-Home>* *t_#2* *'t_#2'*
                <xHome>         alternate home key              *<xHome>*
        t_@7    <End>           end key                         *t_@7* *'t_@7'*
        t_*7    <S-End>         shifted end key *<S-End>* *t_star7* *'t_star7'*
@@ -371,8 +373,8 @@ Note: Use the <> form if possible
        t_K5    <kPageDown>     keypad page-down key            *t_K5* *'t_K5'*
        t_K6    <kPlus>         keypad plus key       *<kPlus>* *t_K6* *'t_K6'*
        t_K7    <kMinus>        keypad minus key     *<kMinus>* *t_K7* *'t_K7'*
-       t_K8    <kDivide>       keypad divide       *<kDivide>* *t_K8* *'t_K8'*
-       t_K9    <kMultiply>     keypad multiply   *<kMultiply>* *t_K9* *'t_K9'*
+       t_K8    <kDivide>       keypad divide       *<kDivide>* *t_K8* *'t_K8'*
+       t_K9    <kMultiply>     keypad multiply   *<kMultiply>* *t_K9* *'t_K9'*
        t_KA    <kEnter>        keypad enter key     *<kEnter>* *t_KA* *'t_KA'*
        t_KB    <kPoint>        keypad decimal point *<kPoint>* *t_KB* *'t_KB'*
        t_KC    <k0>            keypad 0                 *<k0>* *t_KC* *'t_KC'*
@@ -665,6 +667,7 @@ When the X-server clipboard is available, the command server described in
                                                        *xterm-copy-paste*
 NOTE: In some (older) xterms, it's not possible to move the cursor past column
 95.  This is an xterm problem, not Vim's.  Get a newer xterm |color-xterm|.
+Now the limit is 223 columns.
 
 Copy/paste in xterm with (current mode NOT included in 'mouse'):
 1. Press left mouse button on first letter of text, move mouse pointer to last
index a27463b..90aa20e 100644 (file)
@@ -1,4 +1,4 @@
-*tips.txt*      For Vim version 7.3.  Last change: 2009 Nov 07
+*tips.txt*      For Vim version 7.4.  Last change: 2009 Nov 07
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index b2ab959..5c68352 100644 (file)
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.3.  Last change: 2010 Aug 15
+*todo.txt*      For Vim version 7.4.  Last change: 2013 Aug 10
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -27,65 +27,622 @@ Priority classification:
 See |develop.txt| for development plans.  You can vote for which items should
 be worked on, but only if you sponsor Vim development.  See |sponsor|.
 
+Issues can also be entered online: http://code.google.com/p/vim/issues/list
+Updates will be forwarded to the vim_dev maillist.  Issues entered there will
+not be repeated below, unless there is extra information.
+
                                                        *known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-":find e" completion, editing a file in the Vim source directory, 'path' set
-to "./proto", does not shorten ./proto/eval.pro, probably because of
-./proto/ex_eval.pro.
+Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
+
+Patch to add "acl" and "xpm" as a feature. (Ken Takata, 2013 Jul 8)
+
+Patch to make has() check for Vim version and patch at the same time.
+(Marc Weber, 2013 Jun 7)
+
+Several syntax file match "^\s*" which may get underlined if that's in the
+highlight group.  Add a "\zs" after it?
+
+Go through more coverity reports.
+
+"gUgn" cannot be repeated, while "dgn" can.
+
+Several Win32 functions are not using Unicode.
+Patches to fix this. (Ken Takata, 2013 Aug 9)
+
+/[b-a] gives error E16, should probably be E769.
+
+Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10)
+
+Patch to make external commands work with multi-byte characters on Win32 when
+'encoding' differs from the active codepage. (Yasuhiro Matsumoto, 2013 Aug 5)
+
+Checking runtime scripts: Thilo Six, 2012 Jun 6.
+
+Fold can't be opened after ":move". (Ein Brown)
+Patch from Christian Brabandt doesn't fix it completely.
+
+GTK: problem with 'L' in 'guioptions' changing the window width.
+(Aaron Cornelius, 2012 Feb 6)
+
+Javascript file where indent gets stuck on: GalaxyMaster, 2012 May 3.
+
+The BufUnload event is triggered when re-using the empty buffer.
+(Pokey Rule, 2013 Jul 22)
+Patch by Marcin Szamotulski, 2013 Jul 22.
+
+The CompleteDone autocommand needs some info passed to it:
+- The word that was selected (empty if abandoned complete)
+- Type of completion: tag, omnifunc, user func.
+
+Using ":call foo#d.f()" doesn't autoload the "foo.vim" file.
+That is, calling a dictionary function on an autoloaded dict.
+Works OK for echo, just not for  ":call" and ":call call()". (Ted, 2011 Mar
+17)
+Patch by Christian Brabandt, 2013 Mar 23.
+Not 100% sure this is the right solution.
+
+Win32: When a directory name contains an exclamation mark, completion doesn't
+complete the contents of the directory.  No escaping for the "!"? (Jan
+Stocker, 2012 Jan 5)
+
+Patch to support expression argument to sort() instead of a function name.
+Yasuhiro Matsumoto, 2013 May 31.
+Or should we add a more general mechanism, like lambda functions?
+
+Problem caused by patch 7.3.638: window->open does not update window
+correctly. Issue 91.
+
+Patch to fix that 'cedit' is recognized after :normal. (Christian Brabandt,
+2013 Mar 19, later message)
+
+Patch to view coverage of the tests. (Nazri Ramliy, 2013 Feb 15)
+
+Patch to invert characters differently in GTK. (Yukihiro Nakadaira, 2013 May
+5)
+
+Patch to add "Q" and "A" responses to interactive :substitute. They are
+carried over when using :global. (Christian Brabandt, 2013 Jun 19)
+
+Bug with 'cursorline' in diff mode.  Line being scrolled into view gets
+highlighted as the cursor line.  (Alessandro Ivaldi, 2013 Jun 4)
+
+Patch to add the bufferlist() function. (Yegappan Lakshmanan, 2013 May 5)
+May 17: with winlist() and tabpagelist().
+May 19: with local variables.
+May 28: with options
+
+Patch to support 'u' in interactive substitute. (Christian Brabandt, 2012 Sep
+28)  With tests: Oct 9.
+
+Patch from Christian Brabandt to make the "buffer" argument for ":sign place"
+optional. (2013 Jul 12)
+
+Patch to allow setting w:quickfix_title via setqflist() and setloclist()
+functions. (Christian Brabandt, 2013 May 8, update May 21)
+Patch to add getlocstack() / setlocstack(). (Christian Brabandt, 2013 May 14)
+Second one. Update May 22.
+
+Patch to make fold updates much faster. (Christian Brabandt, 2012 Dec)
+
+MS-Windows: Patch to make tests copy files to avoid changing the fileformat of
+the files under version control. (Taro Muraoka, 2013 Jul 5)
+
+Issue 54: document behavior of -complete, also expands arg.
+
+-   Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'.  Combine
+    the two into a regex for searching. (Ned Konz)
+Patch by Christian Brabandt, 2013 Apr 20, unfinished.
+
+Bug: findfile("any", "file:///tmp;") does not work.
+
+v:register is not directly reset to " after a delete command that specifies a
+register.  It is reset after the next command. (Steve Vermeulen, 2013 Mar 16)
+
+'ff' is wrong for one-line file without EOL. (Issue 77)
+
+Patch to set antialiasing style on Windows. (Ondrej Balaz, 2013 Mar 14)
+Needs a different check for CLEARTYPE_QUALITY.
+
+In the ATTENTION message about an existing swap file, mention the name of the
+process that is running.  It might actually be some other program, e.g. after
+a reboot.
+
+MS-Windows: Crash opening very long file name starting with "\\".
+(Christian Brock, 2012 Jun 29)
+
+patch to add "combine" flag to  syntax commands. (so8res, 2012 Dec 6)
+
+Syntax update problem in one buffer opened in two windows, bottom window is
+not correctly updated. (Paul Harris, 2012 Feb 27)
+
+Patch to add assignments in cscope. (Uli Meis, Estabrooks, 2012 Sep 1)
+Alternate patch by Gary Johnson, Sep 4.
+
+Patch to add getsid(). (Tyru, 2011 Oct 2)  Do we want this?  Update Oct 4.
+Or use expand('<sid>')?
+
+Patch to make confirm() display colors. (Christian Brabandt, 2012 Nov 9)
+
+Patch to add functions for signs. (Christian Brabandt, 2013 Jan 27)
+
+Patch to use directX to draw text on Windows.  Adds the 'renderoptions'
+option.  (Taro Muraoka, 2013 Jan 25, update 2013 Apr 3, May 14)
+
+Patch to add 'completeselect' option.  Specifies how to select a candidate in
+insert completion. (Shougo, 2013 May 29)
+Update to add to existing 'completeopt'. 2013 May 30
+
+Problem with refresh:always in completion. (Tyler Wade, 2013 Mar 17)
+
+b:undo_ftplugin cannot call a script-local function. (Boris Danilov, 2013 Jan
+7)
+
+Win32: The Python interface only works with one version of Python, selected at
+compile time.  Can this be made to work with version 2.1 and 2.2 dynamically?
+
+Python: Extended funcrefs: use func_T* structure in place of char_u* function
+names. (ZyX, 2013 Jul 15 and later)
+
+Python: Be able to define a Python function that can be called directly from
+Vim script.  Requires converting the arguments and return value, like with
+vim.bindeval().
+
+Patch for :tabcloseleft, after closing a tab go to left tab. (William Bowers,
+2012 Aug 4)
+
+Patch to improve equivalence classes in regexp patterns.
+(Christian Brabandt, 2013 Jan 16, update Jan 17)
+
+Patch with suggestions for starting.txt. (Tony Mechelynck, 2012 Oct 24)
+But use Gnome instead of GTK?
+
+Patch to make FocusGained and FocusLost work in modern terminals. (Hayaki
+Saito, 2013 Apr 24)
+
+Should be possible to enable/disable matchparen per window or buffer.
+Add a check for b:no_match_paren in Highlight_matching_Pair() (Marcin
+Szamotulski, 2012 Nov 8)
+
+Crash in autocmd that unloads buffers in a BufUnload event. (Andrew Pimlott,
+2012 Aug 11)  Disallow :new when BufUnload is being handled?
+
+Issue 72: 'autochdir' causes problems for :vimgrep.
+
+Session file creation: 'autochdir' causes trouble.  Keep it off until after
+loading all files.
+
+Win32: When 'autochdir' is on and 'encoding' is changed, files on the command
+line are opened again, but from the wrong directory.  Apply 'autochdir' only
+after starting up?
+
+Patch to add ":ldo" and ":cdo", execute commands over quickfix list and
+location list. (Yegappan Lakshmanan, 2013 Jun 2)
+
+8   "stl" and "stlnc" in 'fillchars' don't work for multi-byte characters.
+    Patch by Christian Wellenbrock, 2013 Jul 5.
+
+MS-Windows resizing problems:
+- Windows window on screen positioning: Patch by Yukihiro Nakadaira, 2012 Jun
+  20.  Uses getWindowRect() instead of GetWindowPlacement()
+- Win32: When the taskbar is at the top of the screen creating the tabbar
+  causes the window to move unnecessarily. (William E. Skeith III, 2012 Jan
+  12) Patch: 2012 Jan 13  Needs more work (2012 Feb 2)
+
+'iminsert' global value set when using ":setlocal iminsert"? (Wu, 2012 Jun 23)
+
+Patch to append regexp to tag commands to make it possible to select one out
+of many matches. (Cody Cutler, 2013 Mar 28)
+
+Patch to add tagfunc().  Cleaned up by Christian Brabandt, 2013 Jun 22.
+
+Help for 'b:undo_indent'. (Thilo Six, 2012 May 28)
+Also question if examples are correct.
+
+It should be possible to make globpath() return a list instead of a string,
+like with glob(). (Greg Novack, 2012 Nov 2)
+Patch by Adnan Zafar, 2013 Jul 15.
+
+The input map for CTRL-O in mswin.vim causes problems after CTRL-X CTRL-O.
+Suggestion for another map. (Philip Mat, 2012 Jun 18)
+But use "gi" instead of "a".  Or use CTRL-\ CTRL-O.
+
+Patch to support user name completion on MS-Windows. (Yasuhiro Matsumoto, 2012
+Aug 16)
 
-Problem with \NL in Ex script. (Ray Frish, 2010 Aug 10)
+Have an option for spell checking to not mark any Chinese, Japanese or other
+double-width characters as error.  Or perhaps all characters above 256.
+(Bill Sun)  Helps a lot for mixed Asian and latin text.
+
+When there are no command line arguments ":next" and ":argu" give E163, which
+is confusing.  Should say "the argument list is empty".
+
+URXVT:
+- will get stuck if byte sequence does not contain the expected semicolon.
+- Use urxvt mouse support also in xterm.  Explanations:
+  http://www.midnight-commander.org/ticket/2662
+
+Patch to add tests for if_xcmdsrv.c., Jul 8, need some more work. (Brian Burns)
+New tests Jul 13.   Update Jul 17.  Discussion Jul 18.
+
+When running Vim in silent ex mode, an existing swapfile causes Vim to wait
+for a user action without a prompt. (Maarten Billemont, 2012 Feb 3)
+Do give the prompt? Quit with an error?
+
+Patch to list user digraphs. (Christian Brabandt, 2012 Apr 14)
+
+Patch for input method status. (Hirohito Higashi, 2012 Apr 18)
+
+Patch to use .png icons for the toolbar on MS-Windows. (Martin Gieseking, 2013
+Apr 18)
+
+Patch for has('unnamedplus') docs. (Tony Mechelynck, 2011 Sep 27)
+And one for gui_x11.txt.
+
+-   Patch for 'breakindent' option: repeat indent for wrapped line. (Vaclav
+    Smilauer, 2004 Sep 13, fix Oct 31, update 2007 May 30)
+    Version for latest MacVim: Tobia Conforto, 2009 Nov 23
+    More recent version: https://retracile.net/wiki/VimBreakIndent
+    Posted to vim-dev by Taylor Hedberg, 2011 Nov 25
+    Update by Taylor Hedberg, 2013 May 30.
+
+":cd" doesn't work when current directory path contains "**".
+finddir() has the same problem.  (Yukihiro Nakadaira, 2012 Jan 10)
+Requires a rewrite of the file_file_in_path code.
+
+Problem with l: dictionary being locked in a function. (ZyX, 2011 Jul 21)
+
+Should use has("browsefilter") in ftplugins.  Requires patch 7.3.593.
+
+Update for vim2html.pl. (Tyru, 2013 Feb 22)
+
+Patch to sort functions starting with '<' after others.  Omit dict functions,
+they can't be called. (Yasuhiro Matsumoto, 2011 Oct 11)
+
+Patch to pass list to or(), and() and xor(). (Yasuhiro Matsumoto, 2012 Feb 8)
+
+Patch to improve "it" and "at" text object matching. (Christian Brabandt, 2011
+Nov 20)
+
+Patch to improve GUI find/replace dialog. (Christian Brabandt, 2012 May 26)
+Update Jun 2.
+
+`] moves to character after insert, instead of the last inserted character.
+(Yukihiro Nakadaira, 2011 Dec 9)
+
+Plugin for Modeleasy. (Massimiliano Tripoli, 2011 Nov 29)
+
+BufWinLeave triggers too late when quitting last window in a tab page. (Lech
+Lorens, 2012 Feb 21)
+
+Patch for 'transparency' option. (Sergiu Dotenco, 2011 Sep 17)
+Only for MS-Windows.  No documentation.  Do we want this?
+
+Patch to support cursor shape in Cygwin console. (Ben bgold, 2011 Dec 27)
+
+Patch to support UTF-8 for Hangul. (Shawn Y.H. Kim, 2011 May 1)
+Needs more work.  Pinged 2012 Jan 4.
+
+Issue 64: when 'incsearch' is on can't paste LF on command line.
+
+On MS-Windows a temp dir with a & init causes system() to fail. (Ben Fritz,
+2012 Jun 19)
+
+'cursorline' is displayed too short when there are concealed characters and
+'list' is set.  (Dennis Preiser)
+Patch 7.3.116 was the wrong solution.
+Christian Brabandt has another incomplete patch. (2011 Jul 13)
+
+With concealed text mouse click doesn't put the cursor in the right position.
+(Herb Sitz)  Fix by Christian Brabandt, 2011 Jun 16.  Doesn't work properly,
+need to make the change in where RET_WIN_BUF_CHARTABSIZE() is called.
+
+Syntax region with 'concealends' and a 'cchar' value, 'conceallevel' set to 2,
+only one of the two ends gets the cchar displayed. (Brett Stahlman, 2010 Aug
+21, Ben Fritz, 2010 Sep 14)
+
+'cursorline' works on a text line only.  Add 'cursorscreenline' for
+highlighting the screen line. (Christian Brabandt, 2012 Mar 31)
+
+Win32: Patch to use task dialogs when available. (Sergiu Dotenco, 2011 Sep 17)
+New feature, requires testing.  Made some remarks.
+
+Win32: Patch for alpha-blended icons and toolbar height. (Sergiu Dotenco, 2011
+Sep 17)  Asked for feedback from others.
+
+Win32: Cannot cd into a directory that starts with a space. (Andy Wokula, 2012
+Jan 19)
+
+Need to escape $HOME on Windows?  (ZyX, 2011 Jul 21, discussion 2013 Jul 4)
+Can't simply use a backslash, \$HOME has a different meaning already.
+Would be possible to use $$HOME where $HOME is to be used.
+
+"2" in 'formatoptions' not working in comments. (Christian Corneliussen, 2011
+Oct 26)
+
+Bug in repeating Visual "u". (Lawrence Kesteloot, 2010 Dec 20)
+
+With "unamedplus" in 'clipboard' pasting in Visual mode causes error for empty
+register. (Michael Seiwald, 2011 Jun 28)  I can't reproduce it.
+
+Windows keys not set properly on Windows 7?  (cncyber, 2010 Aug 26)
+
+When using a Vim server, a # in the path causes an error message.
+(Jeff Lanzarotta, 2011 Feb 17)
+
+Setting $HOME on MS-Windows is not very well documented.  Suggestion by Ben
+Fritz (2011 Oct 27).
 
 Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5)
 
-CTRL-] on help tag |/[\n]| doesn't jump to the right place. (Tony Mechelynck,
-2010 Aug 8)
+Bug: Windows 7 64 bit system freezes  when 'clipboard' set to "unnamed" and
+doing ":g/test/d".  Putting every delete on the clipboard? (Robert Chan, 2011
+Jun 17)
+
+When there is a ">" in a line that "gq" wraps to the start of the next line,
+then the following line will pick it up as a leader.  Should get the leader
+from the first line, not a wrapped line. (Matt Ackeret, 2012 Feb 27)
+
+Using ":break" or something else that stops executing commands inside a
+":finally" does not rethrow a previously uncaught exception. (ZyX, 2010 Oct
+15)
+
+Vim using lots of memory when joining lines. (John Little, 2010 Dec 3)
+
+BT regexp engine: After trying a \@> match and failing, submatches are not
+cleared.  See test64.
+
+Changes to manpage plugin. (Elias Toivanen, 2011 Jul 25)
+
+Patch to make "z=" work when 'spell' is off.  Does this have nasty side
+effects?  (Christian Brabandt, 2012 Aug 5)
+Would also need to do this for spellbadword() and spellsuggest().
+
+Patch for variable tabstops.
+
+On 64 bit MS-Windows "long" is only 32 bits, but we sometimes need to store a
+64 bits value.  Change all number options to use nropt_T and define it to the
+right type.
+
+string() can't parse back "inf" and "nan".  Fix documentation or fix code?
+(ZyX, 2010 Aug 23)
+
+Make 'formatprg' global-local. (Sung Pae)
+
+When doing "redir => s:foo" in a script and then "redir END" somewhere else
+(e.g. in a function) it can't find s:foo.
+When a script contains "redir => s:foo" but doesn't end redirection, a
+following "redir" command gives an error for not being able to access s:foo.
+(ZyX, 2011 Mar 27)
+
+When setqflist() uses a filename that triggers a BufReadCmd autocommand Vim
+doesn't jump to the correct line with :cfirst. (ZyX,  2011 Sep 18)
+
+7   Make "ga" show the digraph for a character, if it exists.
+Patch from Christian Brabandt, 2011 Aug 19.
+
+maparg() does not show the <script> flag.  When temporarily changing a
+mapping, how to restore the script ID?
+
+Bug in try/catch: return with invalid compare throws error that isn't caught.
+(ZyX, 2011 Jan 26)
+
+When setting a local option value from the global value, add a script ID that
+indicates this, so that ":verbose set" can give a hint.  Check with options in
+the help file.
+
+After patch 7.3.097 still get E15. (Yukihiro Nakadaira, 2011 Jan 18)
+Also for another example (ZyX, 2011 Jan 24)
+
+Build problem with small features on Mac OS X 10.6. (Rainer, 2011 Jan 24)
+
+"0g@$" puts '] on last byte of multi-byte. (ZyX, 2011 Jan 22)
+
+Patch to support sorting on floating point number.  (Alex Jakushev, 2010 Oct
+30)
+
+Patch to addd TextDeletePost and TextYankPost events. (Philippe Vaucher, 2011
+May 24)  Update May 26.
+
+Patch for :tabrecently. (Hirokazu Yoshida, 2012 Jan 30)
+
+Problem with "syn sync grouphere". (Gustavo Niemeyer, 2011 Jan 27)
+
+Loading autoload script even when usage is inside "if 0". (Christian Brabandt,
+2010 Dec 18)
+
+With a filler line in diff mode, it isn't displayed in the column with line
+number, but it is in the sign column.  Doesn't look right. (ZyX 2011 Jun 5)
+Patch by Christian Brabandt, 2011 Jun 5.  Introduces new problems.
+
+8   Add a command to jump to the next character highlighted with "Error".
+Patch by Christian Brabandt, uses ]e [e ]t and [t. 2011 Aug 9.
+
+8   Add an event like CursorHold that is triggered repeatedly, not just once
+    after typing something.
+Need for CursorHold that retriggers.  Use a key that doesn't do anything, or a
+function that resets did_cursorhold.
+Patch by Christian Brabandt, 2011 May 6.
+
+7   Use "++--", "+++--" for different levels instead of "+---" "+----".
+Patch by Christian Brabandt, 2011 Jul 27.
+Update by Ben Fritz, with fix for TOhtml. (2011 Jul 30)
+
+9   Add %F to 'errorformat': file name without spaces.  Useful on Unix to
+    avoid matching something up to a time 11:22:33.
+Patch by Christian Brabandt, 2011 Jul 27.
 
-":command Print echo 'print'" works, but ":Print" doesn't.  Builtin Print
-should be overruled. (Aaron Thoma)
+Patch to add up to 99 match groups. (Christian Brabandt, 2010 Dec 22)
+Also add named groups: \%{name}(re)  and \%{name}g
+
+In the sandbox it's not allowed to do many things, but it's possible to change
+or set variables.  Add a way to prevent variables from being changed in the
+sandbox?  E.g.: ":protect g:restore_settings".
 
 GTK: drawing a double-width combining character over single-width characters
 doesn't look right. (Dominique Pelle, 2010 Aug 8)
 
+GTK: tear-off menu does not work. (Kurt Sonnenmoser, 2010 Oct 25)
+
+Win32: tear-off menu does not work when menu language is German. (Markus
+Bossler, 2011 Mar 2)  Fixed by 7.3.095?
+
+Version of netbeans.c for use with MacVim. (Kazuki Sakamoto, 2010 Nov 18)
+
+7.3.014 changed how backslash at end of line works, but still get a NUL when
+there is one backslash. (Ray Frush, 2010 Nov 18)  What does the original ex
+do?
+
+Searching mixed with Visual mode doesn't redraw properly. (James Vega, 2010 Nov
+22)
+
+New esperanto spell file can't be processed. (Dominique Pelle, 2011 Jan 30)
+- move compflags to separate growarray?
+- instead of a regexp use a hashtable.  Expand '?', '*', '+'.  What would be
+  the maximum repeat for * and +?
+
+"L'Italie" noted as a spell error at start of the sentence. (Dominique Pelle,
+2011 Feb 27)
+
 Editing a file with a ^M with 'ff' set to "mac", opening a help file, then the
 ^M is displayed as ^J sometimes.  Getting 'ff' value from wrong window/buffer?
 
+'colorcolumn' has higher priority than hlsearch.  Should probably be the other
+way around. (Nazri Ramliy, 2013 Feb 19)
+
+When Vim is put in the background (SIGTSTP) and then gets a SIGHUP it doesn't
+exit.  It exists as soon as back in the foreground. (Stephen Liang, 2011 Jan
+9)  Caused by vim_handle_signal(SIGNAL_BLOCK); in ui.c.
+
+g` not working correctly when using :edit.  It works OK when editing a file on
+the command line. (Ingo Karkat, 2011 Jan 25)
+
+Since patch 7.2.46 Yankring plugin has become very slow, eventually make Vim
+crash? (Raiwil, 2010 Nov 17)
+
+Patch to add FoldedLineNr highlighting: different highlighting for the line
+number of a closed fold. (eXerigumo Clanjor, 2013 Jul 15)
+
+Does not work with NFA regexp engine:
+- \%u, \%x, \%o, \%d followed by a composing character
+
+Regexp engine performance:
+- Profiling:
+       ./vim -u NONE -s ~/vim/test/ruby.vim
+       ./vim -u NONE -s ~/vim/test/loop.vim
+       ./vim -u NONE -s ~/vim/test/alsa.vim
+       ./vim -s ~/vim/test/todo.vim
+       ./vim -s ~/vim/test/xml.vim
+    Dominique Pelle:  xmlSyncDT is particularly slow (Jun 7)
+- More test files from the src/pkg/regexp/testdata directory in the Go repo.
+- Performance tests:
+  - Using asciidoc syntax. (Marek Schimara, 2013 Jun 6)
+  - ~/vim/text/FeiqCfg.xml (file from Netjune)
+  - ~/vim/text/edl.svg  (also XML)
+  - glts has five tests. (May 25)
+  - ~/vim/test/slowsearch
+  - ~/vim/test/rgb.vim
+  - search for  a.*e*exn  in the vim executable.  Go to last line to use
+    'hlsearch'.
+  - Slow combination of folding and PHP syntax highlighting.  Script to
+    reproduce it.  Caused by "syntax sync fromstart" in combination with patch
+    7.2.274.  (Christian Brabandt, 2010 May 27) Generally, folding with
+    'foldmethod' set to "syntax" is slow.  Do profiling to find out why.
+
+Patch to add 'systemencoding', convert between 'encoding' and this for file
+names, shell commands and the like.  (Kikuchan, 2010 Oct 14)
+Assume the system converts between the actual encoding of the filesystem to
+the system encoding (usually utf-8).
+
+Patch to add GUI colors to the terminal, when it supports it. (ZyX, 2013 Jan
+26)
+
 Problem producing tags file when hebrew.frx is present.  It has a BOM.
 Results in E670. (Tony Mechelynck, 2010 May 2)
 
+'beval' option should be global-local.
+
+Ruby: ":ruby print $buffer.number" returns zero.
+
 setpos() does not restore cursor position after :normal. (Tyru, 2010 Aug 11)
 
-Test 73 fails on MS-Windows when compiled with DJGPP and run twice.  How to
-delete the Xfind directory?  Add an rmdir() function, just like we have
-mkdir().
+7   The 'directory' option supports changing path separators to "%" to make
+    file names unique, also support this for 'backupdir'. (Mikolaj Machowski)
+    Patch by Christian Brabandt, 2010 Oct 21.
+
+getpos()/setpos() don't include curswant.  getpos() could return a fifth
+element.  setpos() could accept an optional fifth element.
+Patch by Christian Brabandt, 2010 Sep 6.  Check that new argument is optional
+and that it's documented.
+
+With "tw=55 fo+=a" typing space before ) doesn't work well. (Scott Mcdermott,
+2010 Oct 24)
+
+Patch to add random number generator. (Hong Xu, 2010 Nov 8, update Nov 10)
+Alternative from Christian Brabandt. (2010 Sep 19)
+
+Messages in message.txt are highlighted as examples.
+
+When using cp850 the NBSP (0xff) is not drawn correctly. (Brett Stahlman, 2010
+Oct 22)  'isprint' is set to "@,161-255".
+
+":echo "\x85" =~# '[\u0085]'" returns 1 instead of 0. (ZyX, 2010 Oct 3)
 
 'cindent' not correct when 'list' is set. (Zdravi Korusef, 2010 Apr 15)
 
+C-indenting: A matching { in a comment is ignored, but intermediate { are not
+checked to be in a comment.  Implement FM_SKIPCOMM flag of findmatchlimit().
+Issue 46.
+
+When 'paste' is changed with 'pastetoggle', the ruler doesn't reflect this
+right away. (Samuel Ferencik, 2010 Dec 7)
+
+Mac with X11: clipboard doesn't work properly. (Raf, 2010 Aug 16)
+
+Using CompilerSet doesn't record where an option was set from.  E.g., in the
+gcc compiler plugin. (Gary Johnson, 2010 Dec 13)
+
 ":helpgrep" does not put the cursor in the correct column when preceded by
 accented character. (Tony Mechelynck, 2010 Apr 15)
 
-Echo starts in the wrong column:
-    while 1 | let s = input('A') | echo 'R' | endw
-(Boyko Bantchev, 2010 Aug 9)
+Don't call check_restricted() for histadd(), setbufvar(), settabvar(),
+setwinvar().
+
+Patch for GVimExt to show an icon. (Dominik Riebeling, 2010 Nov 7)
+
+When writing a file > 2Gbyte, the reported number of bytes is negative.
+(Antonio Colombo, 2010 Dec 18)
 
 Patch: Let rare word highlighting overrule good word highlighting.
-(Jakson A. Aquino, 2010 Jul 30)
+(Jakson A. Aquino, 2010 Jul 30, again 2011 Jul 2)
+
+When 'lines' is 25 and 'scrolloff' is 12, "j" scrolls zero or two lines
+instead of one. (Constantin Pan, 2010 Sep 10)
+
+Crash in setqflist(). (Benoit Mortgat, 2010 Nov 18)
+
+Gui menu edit/paste in block mode insert only inserts in one line (Bjorn
+Winckler, 2011 May 11)
+Requires a map mode for Insert mode started from blockwise Visual mode.
 
-Patch to make more characters work in dialogs. (Yankwei Jia, 2010 Aug 4)
+Writing nested List and Dict in viminfo gives error message and can't be read
+back. (Yukihiro Nakadaira, 2010 Nov 13)
 
-":drop" does not respect 'autochdir'. (Peter Odding, 2010 Jul 24)
+Can 'undolevels' be a buffer-local option?  Helps for making big changes in
+one file only, set 'ul' to -1 only for that buffer.
+Patch by Christian Brabandt, 2010 Dec 17.  Needs test.
 
 Problem with cursor in the wrong column. (SungHyun Nam, 2010 Mar 11)
 Additional info by Dominique Pelle. (also on 2010 Apr 10)
 
+CreateFile and CreateFileW are used without sharing, filewritable() fails when
+the file was already open (e.g. script is being sourced).  Add FILE_SHARE_READ|
+FILE_SHARE_WRITE in mch_access()? (Phillippe Vaucher, 2010 Nov 2)
+
 Is ~/bin (literally) in $PATH supposed to work?  (Paul, 2010 March 29)
 Looks like only bash can do it. (Yakov Lerner)
 
-8   Add an event like CursorHold that is triggered repeatedly, not just once
-    after typing something.
-Need for CursorHold that retriggers.  Use a key that doesn't do anything, or a
-function that resets did_cursorhold.
-
 Cscope "cs add" stopped working somewhat before 7.2.438. (Gary Johnson, 2010
 Jun 29)  Caused by 7.2.433?
 
@@ -106,59 +663,66 @@ Add local time at start of --startuptime output.
 Requires configure check for localtime().
 Use format year-month-day hr:min:sec.
 
+Patch to add "combine" to :syntax, combines highlight attributes. (Nate
+Soares, 2012 Dec 3)
+
+Patch to make ":hi link" also take arguments. (Nate Soares, 2012 Dec 4)
+
 Shell not recognized properly if it ends in "csh -f". (James Vega, 2009 Nov 3)
 Find tail?  Might have a / in argument.  Find space?  Might have space in
 path.
 
+Test 51 fails when language set to German. (Marco, 2011 Jan 9)
+Dominique can't reproduce it.
+
+'ambiwidth' should be global-local.
+
 ":function f(x) keepjumps" creates a function where every command is executed
 like it has ":keepjumps" before it.
 
 Coverity: ask someone to create new user: Dominique.
 Check if there are new reported defects: http://scan.coverity.com/rung2.html
 
-When setting 'undofile' while the file is already loaded, but unchanged, try
-to read the undo file.  Requires computing a checksum of the text. (Andy
-Wokula)
+Patch to support :undo absolute jump to file save number. (Christian Brabandt,
+2010 Nov 5)
+
+Patch to use 'foldnextmax' also for "marker" foldmethod. (Arnaud Lacombe, 2011
+Jan 7)
 
 Bug with 'incsearch' going to wrong line. (Wolfram Kresse, 2009 Aug 17)
 Only with "vim -u NONE".
 
 Problem with editing file in binary mode. (Ingo Krabbe, 2009 Oct 8)
 
+With 'wildmode' set to "longest:full,full" and pressing Tab once the first
+entry in wildmenu is highlighted, that shouldn't happen. (Yuki Watanabe, 2011
+Feb 12)
+
 Display error when 'tabline' that includes a file name with double-width
 characters. (2010 Aug 14, bootleq)
 
 Problem with stop directory in findfile(). (Adam Simpkins, 2009 Aug 26)
 
-Undo problem: line not removed as expected when using setline() from Insert
-mode. (Israel Chauca, 2010 May 13, more in second msg)
-Break undo when CTRL-R = changes the text?  Or save more lines?
-
-Change to C syntax folding to make it work much faster, but a bit less
-reliable. (Lech Lorens, 2009 Nov 9)  Enable with an option?
-Most time is spent in in_id_list().
+Using ']' as the end of a range in a pattern requires double escaping:
+     /[@-\\]]  (Andy Wokula, 2011 Jun 28)
 
-Slow combination of folding and PHP syntax highlighting.  Script to reproduce
-it.  Caused by "syntax sync fromstart" in combination with patch 7.2.274.
-(Christian Brabandt, 2010 May 27)
+Syntax priority problem. (Charles Campbell, 2011 Sep 15)
 
 When completion inserts the first match, it may trigger the line to be folded.
 Disable updating folds while completion is active? (Peter Odding, 2010 Jun 9)
 
-In command line window ":close" doesn't work properly. (Tony Mechelynck, 2009
-Jun 1)
-
 When a:base in 'completefunc' starts with a number it's passed as a number,
 not a string. (Sean Ma)  Need to add flag to call_func_retlist() to force a
 string value.
 
-There is no command line completion for ":lmap".
-
 Invalid read error in Farsi mode. (Dominique Pelle, 2009 Aug 2)
 
 For running gvim on an USB stick: avoid the OLE registration.  Use a command
 line argument -noregister.
 
+When using an expression in 'statusline' leading white space sometimes goes
+missing (but not always). (ZyX, 2010 Nov 1)
+
 When a mapping exists both for insert mode and lang-insert mode, the last one
 doesn't work. (Tyru, 2010 May 6)  Or is this intended?
 
@@ -175,11 +739,18 @@ to avoid changing 'eventignore'?
 Patch for displaying 0x200c and 0x200d. (Ali Gholami Rudi, 2009 May 6)
 Probably needs a bit of work.
 
-List of encoding aliases. (Takao Fujiware, 2009 Jul 18)
+List of encoding aliases. (Takao Fujiwara, 2009 Jul 18)
 Are they all OK?  Update Jul 22.
 
+Win32: Improved Makefile for MSVC. (Leonardo Valeri Manera, 2010 Aug 18)
+
 Win32: Expanding 'path' runs into a maximum size limit. (bgold12, 2009 Nov 15)
 
+Win32: Patch for enabling quick edit mode in console. (Craig Barkhouse, 2010
+Sep 1)
+
+Win32: Patch for using .png files for icons. (Charles Peacech, 2012 Feb 5)
+
 Putting a Visual block while 'visualedit' is "all" does not leave the cursor
 on the first character. (John Beckett, 2010 Aug 7)
 
@@ -198,7 +769,7 @@ Problem with <script> mappings (Andy Wokula, 2009 Mar 8)
 When starting Vim with "gvim -f -u non_existent_file > foo.txt" there are a
 few control characters in the output. (Dale Wiles, 2009 May 28)
 
-'cmdwinheight is only used in last window when 'winheight' is a large value.
+'cmdwinheight' is only used in last window when 'winheight' is a large value.
 (Tony Mechelynck, 2009 Apr 15)
 
 Status line containing winnr() isn't updated when splitting the window (Clark
@@ -228,10 +799,6 @@ Now that colnr_T is int instead of unsigned, more type casts can be removed.
 'delcombine' does not work for the command line. (Tony Mechelynck, 2009 Jul
 20)
 
-Unwanted file name escaping: ":echo input('file:' , '', 'file')"
-And use file name completion on a file with spaces. (Frederic Hardy, 2009 Mar
-23)
-
 Don't load macmap.vim on startup, turn it into a plugin. (Ron Aaron,
 2009 Apr 7)  Reminder Apr 14.
 
@@ -240,9 +807,6 @@ Add "no_hlsearch" to winsaveview().
 Cursorline highlighting combines with Search ('hlsearch') but not with
 SpellBad. (Jim Karsten, 2009 Mar 18)
 
-When 'foldmethod' is "indent", using >> on a line just above a fold makes the
-cursor line folded. (Evan Laforge, 2009 Oct 17)
-
 When 'foldmethod' is "indent", adding an empty line below a fold and then
 indented text, creates a new fold instead of joining it with the previous one.
 (Evan Laforge, 2009 Oct 17)
@@ -267,11 +831,9 @@ perhaps.  And undo CTRL-W.  CTRL-G l would redo.
 
 Diff mode out of sync. (Gary Johnson, 2010 Aug 4)
 
-Win32: A --remote command that has a directory name starting with a ( doesn't
-work, the backslash is removed, assuming that it escapes the (. (Valery
-Kondakoff, 2009 May 13)
-
-Win32 GUI: Changing manifest helps for dpi changes (Joe Castro, 2009 Mar 27)
+Support a 'systemencoding' option (for Unix).  It specifies the encoding of
+file names. (Kikuchan, 2010 Oct 5).  Useful on a latin1 or double-byte Asian
+system when 'encoding' is "utf-8".
 
 Win32 GUI: last message from startup doesn't show up when there is an echoerr
 command. (Cyril Slobin, 2009 Mar 13)
@@ -288,25 +850,23 @@ very high. (Yegappan Lakshmanan, 2010 Jul 22, Michael Peeters, 2010 Jul 22)
 Directory wrong in session file, caused by ":lcd" in BufEnter autocommand.
 (Felix Kater, 2009 Mar 3)
 
-maparg() doesn't return the flags, such as <buffer>, <script>, <silent>.
-These are needed to save and restore a mapping.
-Also: the rhs string is not always correct. (Hari Krishna Dara, 2009 Sept 29)
+Session file generates error upon loading, cause by --remote-silent-tab.
+(7tommm (ytommm) 2010 Nov 24)
 
 Using ~ works OK on 'a' with composing char, but not on 0x0418  with composing
 char 0x0301. (Tony Mechelynck, 2009 Mar 4)
 
+A function on a dictionary is not profiled. (Zyx, 2010 Dec 25)
+
 Inconsistent: starting with $LANG set to es_ES.utf-8 gives Spanish
 messages, even though locale is not supported.  But ":lang messages
 es_ES.utf-8" gives an error and doesn't switch messages. (Dominique Pelle,
 2009 Jan 26)
 
-When $HOME contains special characters, sich as a comma, escape them when used
+When $HOME contains special characters, such as a comma, escape them when used
 in an option. (Michael Hordijk, 2009 May 5)
 Turn "esc" argument of expand_env_esc() into string of chars to be escaped.
 
-Can 'undolevels' be a buffer-local option?  Helps for making big changes in
-one file only, set 'ul' to -1 only for that buffer.
-
 Should make 'ignorecase' global-local, so that it makes sense setting it from
 a modeline.
 
@@ -325,8 +885,10 @@ correct.  Don't use it in the swap file.
 Completion for ":buf" doesn't work properly on Win32 when 'shellslash' is off.
 (Henrik Ohman, 2009, Jan 29)
 
-Allow patches to add something to version.c, like with an official patch, so
-that :version output shows which patches have been applied.
+shellescape() depends on 'shellshash' for quoting.  That doesn't work when
+'shellslash' is set but using cmd.exe. (Ben Fritz)
+Use a different option or let it depend on whether 'shell' looks like a
+unix-like shell?
 
 Bug: in Ex mode (after "Q") backslash before line break, when yanked into a
 register and executed, results in <Nul>: instead of line break.
@@ -354,6 +916,7 @@ ATTENTION message?  (Tony Mechelynck, 2008 Dec 1)
 Also: swap files are in ~/tmp/  One has relative file name ".mozilla/...".
 
 Add v:motion_force. (Kana Natsuno, 2008 Dec 6)
+Maybe call it v:motiontype.
 
 Runtime files for Clojure. (Toralf Wittner, 2008 Jun 25)
 
@@ -364,6 +927,9 @@ probably causes this.
 'scrollbind' is not respected when deleting lines or undo. (Milan Vancura,
 2009 Jan 16)
 
+Patch to support strikethrough next to bold and italic. (Christian Brabandt,
+2013 Jul 30)
+
 Document that default font in Athena can be set with resources:
    XtDefaultFont: "9x15"
    XtDefaultFontSet: "9x15"
@@ -374,11 +940,6 @@ Having "Syntax" in 'eventignore' for :bufdo may cause problems, e.g. for
 option only for when jumping to another buffer, not when the command argument
 is executed.
 
-Crash with dragn-n-drop of file combined with netrw (Marius Gedminas, 2008 Jun
-11)  I can't reproduce it.  It's probably caused by a handle_drop() call
-in combination with autocommands that invoke a ":redraw" command.
-Another valgrind output Jun 30.
-
 ":pedit %" with a BufReadPre autocommand causes the cursor to move to the
 first line. (Ingo Karkat, 2008 Jul 1)  Ian Kelling is working on this.
 
@@ -403,27 +964,26 @@ the buffer to be unmodified.
 Unfinished patch by Ian Kelling, 2008 Jul 11.  Followup Jul 14, need to have
 another look at it.
 
-Patch for c.vim and cpp.vim syntax files. (Chung-chieh Shan, 2008 Nov 26)
-
 c.vim: XXX in a comment is colored yellow, but not when it's after "#if 0".
 (Ilya Dogolazky, 2009 Aug 7)
 
-Win32:  ":dis +" shows nothing, but "+p does insert text.  Problem with "* and
-"+ being the same thing?
-
 You can type ":w ++bad=x fname", but the ++bad argument is ignored.  Give an
 error message?  Or is this easy to implement?  (Nathan Stratton Treadway, 2008
 Aug 20)  This is in ucs2bytes(), search for 0xBF.  Using the ++bad argument is
 at the other match for 0xBF.
 
-Fix for matchparen HL doesn't work.  beep.
-
 When adding "-complete=file" to a user command this also changes how the
 argument is processed for <f-args>. (Ivan Tishchenko, 2008 Aug 19)
 
 Win32: associating a type with Vim doesn't take care of space after a
 backslash? (Robert Vibrant, 2008 Jun 5)
 
+When 'rightleft' is set, cursorcolumn isn't highlighted after the end of a
+line.  It's also wrong in folds. (Dominique Pelle, 2010 Aug 21)
+
+Using an insert mode expression mapping, cursor is not in the expected
+position. (ZyX, 2010 Aug 29)
+
 After using <Tab> for command line completion after ":ta blah" and getting E33
 (no tags file), further editing the command to e.g., ":echo 'blah'", the
 command is not executed.  Fix by Ian Kelling?
@@ -438,9 +998,6 @@ When mapping : to ; and ; to :, @; doesn't work like @: and @: doesn't work
 either.  Matt Wozniski:  nv_at() calls do_execreg() which uses
 put_in_typebuf().  Char mapped twice?
 
-8   Some file systems are case-sensitive, some are not.  Turn
-    CASE_INSENSITIVE_FILENAME into an option, at least for completion.
-
 Despite adding save_subexpr() this still doesn't work properly:
 Regexp: matchlist('12a4aaa', '^\(.\{-}\)\(\%5c\@<=a\+\)\(.\+\)\?')
 Returns ['12a4', 'aaa', '4aaa'], should be ['12a4', 'aaa', '']
@@ -457,11 +1014,15 @@ escaping characters where the backslash is not removed later.  Asked Chris for
 an alternate solution, also for src/ex_getln.c.
 This also fails when the file or directory name contains "%". (Thoml, 2008
 July 7)
+Using --remote-silent while the current directory has a # in the name does not
+work, the # needs to be escaped. (Tramblay Bruno, 2012 Sep 15)
 
-The str2special() function doesn't handle multi-byte characters properly.
-Patch from Vladimir Vichniakov, 2007 Apr 24.
-Should clean up the whole function.  Also allow modifiers like <S-Char-32>?
-find_special_key() also has this problem.
+When using remote-silent the -R flag is not passed on. (Axel Bender, 2012 May
+31)
+
+Win32: A --remote command that has a directory name starting with a ( doesn't
+work, the backslash is removed, assuming that it escapes the (. (Valery
+Kondakoff, 2009 May 13)
 
 Problem with 'langmap' being used on the rhs of a mapping. (Nikolai Weibull,
 2008 May 14)
@@ -476,6 +1037,14 @@ Oct 19)  Check for "col" being "MAXCOL" separately?
 Unexpectedly inserting a double quote. (Anton Woellert, 2008 Mar 23)
 Works OK when 'cmdheight' is 2.
 
+8   Use a mechanism similar to omni completion to figure out the kind of tab
+    for CTRL-] and jump to the appropriate matching tag (if there are
+    several).
+    Alternative: be able to define a function that takes the tag name and uses
+    taglist() to find the right location.  With indication of using CTRL-] so
+    that the context can be taken into account. (Robert Webb)
+Patch by Christian Brabandt, 2013 May 31.
+
 Test54 should not use shell commands.  Make it portable.
 
 The utf class table is missing some entries:
@@ -496,6 +1065,9 @@ try the Cocoa version.
 Mac: After a ":vsplit" the left scrollbar doesn't appear until 'columns' is
 changed or the window is resized.
 
+GTK: when setting 'columns' in a startup script and doing ":vertical diffsplit"
+the window isn't redrawn properly, see two vertical bars.
+
 Mac: Patch for configure: remove arch from ruby link args. (Knezevic, 2008
 Mar 5)  Alternative: Kazuki Sakamoto, Mar 7.
 
@@ -513,6 +1085,12 @@ When 'smartcase' is set and using CTRL-L to add to the search pattern it may
 result in no matches.  Convert chars to lower case? (Erik Wognsen, 2009 Apr
 16)
 
+Searching for composing char works, but not when inside []. (ZyX, Benjamin R.
+Haskell, 2010 Aug 24)
+
+Fail to edit file after failed register access.  Error flag remains set?
+(Lech Lorens, 2010 Aug 30)
+
 Patch for redo register. (Ben Schmidt, 2007 Oct 19)
 Await response to question to make the register writable.
 
@@ -527,27 +1105,13 @@ each choice does.  Similar to  ":help swap-exists-choices"
 
 try/catch not working for argument of return. (Matt Wozniski, 2008 Sep 15)
 
-Recognize and ignore BOM in error file. (Aleksey Baibarin)
+try/catch not working when inside a for loop. (ZyX, 2011 Jan 25)
 
 ":tab help" always opens a new tab, while ":help" re-uses an existing window.
 Would be more consistent when an existing tab is re-used. (Tony Mechelynck)
 
-":tab drop filename" doesn't work nicely when "filename" is open in a window
-in another tab. (Tony Mechelynck, 2009 Feb 13)
-
 Add ":nofold".  Range will apply without expanding to closed fold.
 
-Including NFA regexp code:
-Use "\%#= to set the engine: 0 = automatic, 1 = backtracking, 2 = new.
-Useful in tests.
-Performance tests:
-- ~/vim/test/veryslow.js (file from Daniel Fetchinson)
-- ~/vim/test/slowsearch
-- ~/vim/test/rgb.vim
-- ~/vim/text/FeiqCfg.xml (file from Netjune)
-- search for  a.*e*exn  in the vim executable.  Go to last line to use
-  'hlsearch'.
-
 Using Aap to build Vim: add remarks about how to set personal preferences.
 Example on http://www.calmar.ws/tmp/aap.html
 
@@ -560,6 +1124,7 @@ C syntax: {} inside () causes following {} to be highlighted as error.
 
 Can't easily close the help window, like ":pc" closes the preview window and
 ":ccl" closes the quickfix window.  Add ":hclose". (Chris Gaal)
+Patch for :helpclose, Christian Brabandt, 2010 Sep 6.
 
 When 'diffopt' has "context:0" a single deleted line causes two folds to merge
 and mess up syncing. (Austin Jennings, 2008 Jan 31)
@@ -569,6 +1134,9 @@ Gnome improvements: Edward Catmur, 2007 Jan 7
 
 New PHP syntax file, use it? (Peter Hodge)
 
+":echoe" in catch block stops processing, while this doesn't happen outside of
+a catch block. (ZyX, 2011 Jun 2)
+
 'foldcolumn' in modeline applied to wrong window when using a session. (Teemu
 Likonen, March 19)
 
@@ -589,6 +1157,9 @@ Asked about latest version: 0.77.1 is on www.vim.org.
 
 More AmigaOS4 patches. (Peter Bengtsson, Nov 9)
 
+Amiga patches with vbcc. (Adrien Destugues, 2010 Aug 30)
+http://pulkomandy.ath.cx/drop/vim73_vbcc_amiga.diff
+
 Insert mode completion: When editing the text and pressing CTRL-N again goes
 back to originally completed text, edited text is gone. (Peng Yu, 2008 Jul 24)
 Suggestion by Ben Schmidt, 2008 Aug 6.
@@ -615,9 +1186,6 @@ popup menu over it, first draw the new popup menu, remember its position and
 size and then redraw the text, skipping the characters under the popup menu.
 This should avoid flicker.  Other solution by A.Politz, 2007 Aug 22.
 
-When the popup menu is close to the edge of the window it is truncated.  Patch
-to anchor the popup menu in a different way. (James Vega, 2008 Jul 30)
-
 Windows 98: pasting from the clipboard with text from another application has
 a trailing NUL.  (Joachim Hofmann)  Perhaps the length specified for CF_TEXT
 isn't right?
@@ -643,6 +1211,9 @@ Jun 3)
 However, for backwards compatibility escaping might be necessary.  Check if
 the user put quotes around the expanded item?
 
+A throw in a function causes missing an endif below the call. (Spiros
+Bousbouras, 2011 May 16)
+
 Error E324 can be given when a cron script has wiped out our temp directory.
 Give a clear error message about this (and tell them not to wipe out /tmp).
 
@@ -662,15 +1233,32 @@ go to Insert mode and add a few lines.  Then backspacing every other time
 moves the cursor instead of deleting. (Chris Kaiser, 2007 Sep 25)
 
 Patch to use Modern UI 2.0 for the Nsis installer. (Guopeng Wen, 2010 Jul 30)
+Latest version: 2011 May 18
+8   Windows install with NSIS: make it possible to do a silent install, see
+    http://nsis.sourceforge.net/Docs/Chapter4.html#4.12
+    Version from Guopeng Wen that does this (2010 Dec 27)
+Alternative: MSI installer: https://github.com/petrkle/vim-msi/
+
+Windows installer should install 32-bit version of right-click handler also on
+64-bit systems. (Brian Cunningham, 2011 Dec 28)
+
+Windows installer could add a "open in new tab of existing Vim" menu entry.
+Gvimext: patch to add "Edit with single Vim &tabbed" menu entry.
+Just have two choices, always using one Vim and selecting between using an
+argument list or opening each file in a separate tab.
+(Erik Falor, 2008 May 21, 2008 Jun 26)
+
+Windows installer: licence text should not use indent, causes bad word wrap.
+(Benjamin Fritz, 2010 Aug 16)
+
+Dos uninstal may delete vim.bat from the wrong directory (e.g., when someone
+makes his own wrapper).  Add a magic string with the version number to the
+.bat file and check for it in the uninstaller.  E.g.
+          # uninstall key: vim7.3*
 
 Changes for Win32 makefile. (Mike Williams, 2007 Jan 22, Alexei Alexandrov,
 2007 Feb 8)
 
-Patch for Win32 clipboard under Cygwin. (Frodak Baksik, Feb 15)
-    Sutcliffe says it works well.
-    Update 2007 May 22 for Vim 7.1
-    Update 2008 Dec 2008 for Vim 7.2.xx (Sharonov)
-
 Win32: Can't complete shell command names.  Why is setting xp_context in
 set_one_cmd_context() inside #ifndef BACKSLASH_IN_FILENAME?
 
@@ -686,10 +1274,6 @@ patches by Mathias, see mail Feb 22)
 Win32: compiling with normal features and OLE fails.  Patch by Mathias
 Michaelis, 2006 Jun 4.
 
-Win32: echo doesn't work for gvim.exe.mnf.  Use inline file.  Patch by Mathias
-Michaelis.  http://groups.yahoo.com/group/vimdev/message/43765
-Patch that includes this and does more by George Reilly, 2007 Feb 12
-
 Win16: include patches to make Win16 version work. (Vince Negri, 2006 May 22)
 
 Win32: after "[I" showing matches, scroll wheel messes up screen. (Tsakiridis,
@@ -708,19 +1292,6 @@ pointer in long and seek offset in 64 bit var.
 
 Win32: patch for fullscreen mode. (Liushaolin, 2008 April 17)
 
-Win32: When 'shell' is cmd.exe this command fails:
-       echo system('"c:/path/echo.exe" "foo bar"')
-Should we set the default for 'shellxquote' to a double quote, when 'shell'
-contains "cmd" in the tail?  (Benjamin Fritz, 2008 Oct 13)
-Also set 'shellcmdflag' to include /s.
-
-Win32: When there is 4 Gbyte of memory mch_avail_mem() doesn't work properly.
-Unfinished patch by Jelle Geerts, 2008 Aug 24.
-Let mch_avail_mem() return Kbyte instead?
-
-Win32: With two monitors, gvim partly on both, and adding/removing a scrollbar
-Vim resizes and moves to one of the monitors. (Chris Monkiewicz, 2008 Oct)
-
 Win32: When 'shell' is bash shellescape() doesn't always do the right thing.
 Depends on 'shellslash', 'shellquote' and 'shellxquote', but shellescape()
 only takes 'shellslash' into account.
@@ -744,9 +1315,6 @@ If the variable "g:x#y#z" exists completion after ":echo g:x#" doesn't work.
 Feature request: Command to go to previous tab, like what CTRL-W p does for
 windows. (Adam George)
 
-When using input() in a loop and then ":echo" the display column isn't right.
-(Benjamin Fritz, 2008 Aug 28)  Patch by Ben Schmidt, 2008 Sep 2.
-
 F1 - F4 in an xterm produce a different escape sequence when used with a
 modifier key.  Need to catch three different sequences.  Use K_ZF1, like
 K_ZHOME? (Dickey, 2007 Dec 2)
@@ -772,9 +1340,6 @@ if_ruby.c.
 
 ":helpgrep" should use the directory from 'helpfile'.
 
-Patch to dynamically load Python on Solaris. (Danek Duvall, 2009 Feb 16)
-Needs more work.
-
 The need_fileinfo flag is messy.  Instead make the message right away and put
 it in keep_msg?
 
@@ -802,9 +1367,6 @@ VMS: VFC files are in some cases truncated during reading (Zoltan Arpadffy)
 input() completion should not insert a backslash to escape a space in a file
 name?
 
-getpos()/setpos() don't include curswant.  getpos() could return a fifth
-element.  setpos() could accept an optional fifth element.
-
 Ruby completion is insecure.  Can this be fixed?
 
 When 'backupskip' is set from $TEMP special characters need to be escaped.
@@ -819,9 +1381,6 @@ When doing ":quit" the Netbeans "killed" event isn't sent.  (Xavier de Gaye,
 2008 Nov 10)  call netbeans_file_closed() at the end of buf_freeall(), or in
 all places where buf_freeall() is called?
 
-":python os.chdir('/tmp')" makes short buffer names invalid. (Xavier de Gaye)
-Check directory and call shorten_fnames()?
-
 aucmd_prepbuf() should also use a window in another tab page.
 
 When unloading a buffer in a BufHidden autocommand the hidden flag is reset?
@@ -830,12 +1389,6 @@ When unloading a buffer in a BufHidden autocommand the hidden flag is reset?
 Substituting an area with a line break with almost the same area does change
 the Visual area.  Can this be fixed? (James Vega, 2006 Sept 15)
 
-Windows installer could add a "open in new tab of existing Vim" menu entry.
-Gvimext: patch to add "Edit with single Vim &tabbed" menu entry.
-Just have two choices, always using one Vim and selecting between using an
-argument list or opening each file in a separate tab.
-(Erik Falor, 2008 May 21, 2008 Jun 26)
-
 GUI: When combining fg en bg make sure they are not equal.
 
 Spell checking: Add a way to specify punctuation characters.  Add the
@@ -863,22 +1416,12 @@ somehow?  Or use a new function.
 
 Mac: Using gvim: netrw window disappears. (Nick Lo, 2006 Jun 21)
 
-Mac: OS/X 10.4 with Python 2.5 installed: configure finds an extra argument
-that breaks the build. (Brian Victor, 2008 Sep 1)
-
 Add an option to specify the character to use when a double-width character is
 moved to the next line.  Default '>', set to a space to blank it out.  Check
 that char is single width when it's set (compare with 'listchars').
 
 The generated vim.bat can avoid the loop for NT. (Carl Zmola, 2006 Sep 3)
 
-Session file creation: 'autochdir' causes trouble.  Keep it off until after
-loading all files.
-
-Win32: When 'autochdir' is on and 'encoding' is changed, files on the command
-line are opened again, but from the wrong directory.  Apply 'autochdir' only
-after starting up?
-
 When showing a diff between a non-existent file and an existing one, with the
 cursor in the empty buffer, the other buffer only shows the last line.  Change
 the "insert" into a change from one line to many? (Yakov Lerner, 2008 May 27)
@@ -916,6 +1459,12 @@ Completing with 'wildmenu' and using <Up> and <Down> to move through directory
 tree stops unexpectedly when using ":cd " and entering a directory that
 doesn't contain other directories.
 
+Setting 'background' resets the Normal background color:
+   highlight Normal ctermbg=DarkGray
+   set background=dark
+This is undesired, 'background' is supposed to tell Vim what the background
+color is, not reset it.
+
 Linux distributions:
 - Suggest compiling xterm with --enable-tcap-query, so that nr of colors is
   known to Vim.  88 colors instead of 16 works better.  See ":help
@@ -965,8 +1514,6 @@ After starting Vim, using '0 to jump somewhere in a file, ":sp" doesn't center
 the cursor line.  It works OK after some other commands.
 
 Win32: Is it possible to have both postscript and Win32 printing?
-Does multi-byte printing with ":hardcopy" work?  Add remark in documentation
-about this.
 
 Check: Running Vim in a console and still having connect to the X server for
 copy/paste: is stopping the X server handled gracefully?  Should catch the X
@@ -984,6 +1531,9 @@ check the result of has("patch13").
 Cursor line at bottom of window instead of halfway after saving view and
 restoring.  Only with 'nowrap'. (Robert Webb, 2008 Aug 25)
 
+Netrw has trouble executing autocommands only for a directory.  Add <isdir>
+and <notisdir> to autocommand patterns?  Also <isfile>?
+
 Add command modifier that skips wildcard expansion, so that you don't need to
 put backslashes before special chars, only for white space.
 
@@ -993,17 +1543,14 @@ resulting in highlighted "{" in that window, not in the other.
 In mswin.vim: Instead of mapping <C-V> for Insert mode in a complicated way,
 can it be done like ":imap <C-V> <MiddleMouse>" without negative side effects?
 
-Win32: When the GUI tab pages line is displayed Vim jumps from the secondary
-to the primary monitor. (Afton Lewis, 2007 Mar 9)  Old resizing problem?
-
 GTK: when the Tab pages bar appears or disappears while the window is
 maximized the window is no longer maximized.  Patch that has some idea but
 doesn't work from Geoffrey Antos, 2008 May 5.
 Also: the window may no longer fit on the screen, thus the command line is not
 visible.
 
-GTK: when setting 'columns' in a startup script and doing ":vertical diffsplit"
-the window isn't redrawn properly, see two vertical bars.
+When right after "vim file", "M" then CTRL-W v the windows are scrolled
+differently and unexpectedly.  Caused by patch 7.2.398?
 
 The magic clipboard format "VimClipboard2" appears in several places.  Should
 be only one.
@@ -1033,6 +1580,9 @@ Win32, NTFS: When editing a specific infostream directly and 'backupcopy' is
 name is something like "c:\path\foo.txt:bar", includes a colon.  (Alex
 Jakushev, 2008 Feb 1)
 
+printf() uses the field width in bytes. Can it be made character width,
+perhaps with a modifier?  What does Posix say?
+
 Small problem displaying diff filler line when opening windows with a script.
 (David Luyer, 2007 Mar 1 ~/Mail/oldmail/mool/in.15872 )
 
@@ -1066,9 +1616,6 @@ In gvim the backspace key produces a backspace character, but on Linux the
 VERASE key is Delete.  Set VERASE to Backspace? (patch by Stephane Chazelas,
 2007 Oct 16)
 
-When entering a C /* comment, after typing <Enter> for 70 times the indent
-disappears. (Vincent Beffara, 2008 Jul 3)
-
 TermResponse autocommand isn't always triggered when using vimdiff. (Aron
 Griffis, 2007 Sep 19)
 
@@ -1101,6 +1648,12 @@ Patch to support horizontal scroll wheel in GTK. Untested. (Bjorn Winckler,
 2010 Jun 30)
 
 
+At next release:
+-   Build a huge version by default.
+-   Improve plugin handling: Automatic updates, handle dependencies?
+    E.g. Vundle: https://github.com/gmarik/vundle
+
+
 More patches:
 -   Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
     Needs a few tests.
@@ -1138,7 +1691,6 @@ More patches:
     more friendly for the Vim distribution.
     New version received 2008 Jan 6.
     No maintenance in two years...
--   Patch to access screen under Python. (Marko Mahni, 2010 Jul 18)
 -   Patch to open dropped files in new tabs. (Michael Trim, 2010 Aug 3)
 
 Awaiting updated patches:
@@ -1161,9 +1713,6 @@ Awaiting updated patches:
 7   Completion of network shares, patch by Yasuhiro Matsumoto.
     Update 2004 Sep 6.
     How does this work?  Missing comments.
--   Patch for 'breakindent' option: repeat indent for wrapped line. (Vaclav
-    Smilauer, 2004 Sep 13, fix Oct 31, update 2007 May 30)
-    Version for latest MacVim: Tobia Conforto, 2009 Nov 23
 8   Add a few more command names to the menus.  Patch from Jiri Brezina
     (28 feb 2002).  Will mess the translations...
 7   ATTENTION dialog choices are more logical when "Delete it' appears
@@ -1319,9 +1868,6 @@ Win32 GUI known bugs:
     the wide functions.
 8   On Windows 98 the unicows library is needed to support functions with UCS2
     file names.  Can we load unicows.dll dynamically?
-8   When the primary monitor is below or right of the secondary monitor and
-    Vim is on the secondary monitor it will often move to the primary monitor.
-    Window position coordinates can be negative. (James Harvey)
 8   The -P argument doesn't work very well with many MDI applications.
     The last argument of CreateWindowEx() should be used, see MSDN docs.
     Tutorial: http://win32assembly.online.fr/tut32.html
@@ -1354,8 +1900,6 @@ Win32 GUI known bugs:
     console, go back to Vim and click "reload" in the dialog for the changed
     file: Window moves with the cursor!
     Put focus event in input buffer and let generic Vim code handle it?
-8   Win32: When mouse is hidden and in the toolbar, moving it won't make it
-    appear. (Sami Salonen)
 8   Win32 GUI: With maximized window, ":set go-=r" doesn't use the space that
     comes available. (Poucet)  It works OK on Win 98 but doesn't work on Win
     NT 4.0.  Leaves a grey area where the scrollbar was.  ":set go+=r" also
@@ -1385,8 +1929,6 @@ Win32 GUI known bugs:
     scroll?
 7   Scrollbar width doesn't change when selecting other windows appearance.
     Also background color of Toolbar and rectangle below vert. scrollbar.
-7   "!start /min cmd" should run in a minimized window, instead of using
-    "/min" as the command name. (Rogall)
 6   Drawing text transparently doesn't seem to work (when drawing part cursor).
 8   CTRL key doesn't always work in combination with ALT key.  It does work
     for function keys, not for alphabetic characters.  Perhaps this is because
@@ -1433,6 +1975,8 @@ Athena and Motif:
 
 
 Athena GUI:
+9   The first event for any button in the menu or toolbar appears to get lost.
+    The second click on a menu does work.
 9   When dragging the scrollbar thumb very fast, focus is only obtained in
     the scrollbar itself.  And the thumb is no longer updated when moving
     through files.
@@ -1452,7 +1996,7 @@ Athena GUI:
 
 
 Motif GUI:
--   gui_mch_browsedir() is missing.
+-   gui_mch_browsedir() is missing, browsedir() doesn't work nicely.
 7   Use XmStringCreateLocalized() instead of XmStringCreateSimple()?
     David Harrison says it's OK (it exists in Motif 1.2).
 8   Lesstif: When deleting a menu that's torn off, the torn off menu becomes
@@ -1483,7 +2027,7 @@ GUI:
 8   When translating menus ignore the part after the Tab, the shortcut.  So
     that the same menu item with a different shortcut (e.g., for the Mac) are
     still translated.
-8   Add menu separators for Amiga, RISCOS.
+8   Add menu separators for Amiga.
 8   Add way to specify the file filter for the browse dialog.  At least for
     browse().
 8   Add dialog for search/replace to other GUIs?  Tk has something for this,
@@ -1662,33 +2206,17 @@ Amiga:
 
 Macintosh:
 -   GUI: gui_mch_browsedir() is missing.
-7   Patch to add 'transparency' option.  Disadvantage: it's slow. (Eckehard
-    Berns, 2004 May 9) http://ecki.to/vim/TransBack-2004-05-09.diff
-    Needs more work.  Add when someone really wants it.
 7   Loading the Perl library only works on OS/X 10.2 or 10.3, never on both.
     Load the Perl library dynamically see Python sources file dynload_mac
     (Jack)
     dynamic linking: http://developer.apple.com/technotes/tn2002/tn2064.html
-8   Inputting Unicode characters does not work in the terminal.  They appear
-    to arrive as upper and lower bytes. (David Brown, 2004 April 17)
-8   Typing Unicode characters doesn't work at all in the GUI.
 8   inputdialog() doesn't resize when giving more text lines. (David Fishburn,
     2006 Sept 28)
-9   Problems in Carbon version for OS X: (Benji Fisher)
-    - keyboard shortcuts in the menus get lost.
-8   The Vim/About menu doesn't work.
-8   ":gui" doesn't fork.  Enabling the code in gui.c to fork causes a SEGV.
 8   Define vim_mkdir() for Macintosh.
 8   Define mch_writable() for Macintosh.
 9   When DiskLock is running, using a swap file causes a crash.  Appears to be
     a problem with writing a file that starts with a dot. (Giacalone)
-9   On G3 Mac, OS version 8, control strip causes characters messed up when
-    scrolling (CTRL-L cleans it up). (Benji Fisher)
-9   On G3 Mac, OS version 8, variable-speed scrolling doesn't work, after two
-    seconds of scrolling the screen freezes. (Benji Fisher)
 9   In mac_expandpath() check that handling of backslashes is done properly.
-8   Standard Mac shortcuts are missing.  (Amerige)
-8   Handling of non-fixed width fonts is wrong. (Amerige)
 
 
 "Small" problems:
@@ -1712,8 +2240,6 @@ Macintosh:
     the :catch commands are always executed, also when the file is edited
     normally.  Should reset did_emsg and undo side effects.  Also make sure
     the ATTENTION message shows up.  Servatius Brandt works on this.
-8   ":g//" gives "Pattern not found error" with E486.  Should not use the
-    error number, it's not a regular error message.
 7   Vimtutor leaves escape sequence in terminal. This is the xterm response to
     requesting the version number.  (Yasuhiro Matsumoto)
 8   When redirecting and using ":silent" the current column for displaying and
@@ -1737,15 +2263,11 @@ Macintosh:
     UnxUtils.zip archive.
     Alternate one: http://www.pramodx.20m.com/tee_for_win32.htm, but Walter
     Briscoe says it's not as good.
-8   "stl" and "stlnc" in 'fillchars' don't work for multi-byte characters.
 8   When doing Insert mode completion a mapping cannot recursively call
     edit(), because the completion information is global.  Put everything in
     an allocated structure?
-6   Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
 8   Command line completion: buffers "foo.txt" and "../b/foo.txt", completing
     ":buf foo<Tab>" doesn't find the second one. (George V. Reilly)
-7   Output for ":scriptnames" and ":breaklist" should shorten the file names:
-    use "~/" when possible.
 7   mb_off2cells() doesn't work correctly on the tail byte of a double-byte
     character. (Yasuhiro Matsumoto)  It should return 1 when used on a tail
     byte, like for utf-8.  Store second byte of double-byte in ScreenLines2[]
@@ -1772,13 +2294,6 @@ Macintosh:
     works.
 8   A very long message in confirm() can't be quit.  Make this possible with
     CTRL-C.
-7   clip_x11_own_selection() uses CurrentTime, that is not allowed.  VNC X
-    server has a problem with this.  (Mark Waggoner) Remembering the timestamp
-    of events isn't always possible.  We don't get them in an xterm.  GTK
-    doesn't obtain the selection again when the timestamp differs, thus it
-    won't work for GTK anyway.
-8   When the clipboard isn't supported: ":yank*" gives a confusing error
-    message.  Specifically mention that the register name is invalid.
 8   "gf" always excludes trailing punctuation characters.  file_name_in_line()
     is currently fixed to use ".,:;!".  Add an option to make this
     configurable?
@@ -1792,8 +2307,6 @@ Macintosh:
     is a multi-byte character.
 8   When appending to a file and 'patchmode' isn't empty, a backup file is
     always written, even when the original file already exists.
-7   When using "daw" on the last word in a file and this is a single letter,
-    nothing is deleted.  Should delete the letter and preceding white space.
 9   When getting focus while writing a large file, could warn for this file
     being changed outside of Vim.  Avoid checking this while the file is being
     written.
@@ -2043,6 +2556,9 @@ Problems that will (probably) not be solved:
 -   Win32, MS-Windows XP: $HOME uses the wrong drive when the user profiles
     are not on the boot disk.  This is caused by a wrong value of $HOMEDRIVE.
     This is a bug in XP, see MSKB article 818134.
+-   Win32, MS-Windows: expanding plugin/**/*.vim also picks up
+    dir/ctags.vim,v.  This is because the short file name is something like
+    "ctags~1.vim" and that matches the pattern.
 -   SunOS 5.5.1 with Motif: The file open dialog does not have a horizontal
     scroll bar for the "files" selection.  This is a problem in the Motif
     libraries, get a patch from Sun.
@@ -2168,8 +2684,6 @@ Help:
 
 
 User Friendlier:
-8   Windows install with NSIS: make it possible to do a silent install, see
-    http://nsis.sourceforge.net/Docs/Chapter4.html#4.12
 8   Windows install with install.exe: Use .exe instead of .bat files for
     links, so that command line arguments are passed on unmodified? (Walter
     Briscoe)
@@ -2210,8 +2724,6 @@ Tab pages:
     font, etc.)
 8   Make GUI menu in tab pages line configurable.  Like the popup menu.
 8   balloons for the tab page labels that are shortened to show the full path.
-8   :tabmove +N         move tab page N pages forward
-8   :tabmove -N         move tab page N pages backward
 7   :tabdup     duplicate the tab with all its windows.
 7   Option to put tab line at the left or right?  Need an option to specify
     its width.  It's like a separate window with ":tabs" output.
@@ -2339,7 +2851,6 @@ Folding:
 8   Add "z/" and "z?" for searching in not folded text only.
 9   Add search pattern item to only match in closed or open fold and/or fold
     with certain level.  Allows doing ":g/pat/cmd" to work on closed folds.
-7   Use "++--", "+++--" for different levels instead of "+---" "+----".
 8   When a closed fold is displayed open because of 'foldminlines', the
     behavior of commands is still like the fold is closed.  How to make the
     user aware of this?
@@ -2443,7 +2954,7 @@ Multi-byte characters:
     For Windows, the charset_pairs[] table could be used.  But how do we know
     if a font exists?
 -   Do keyboard conversion from 'termencoding' to 'encoding' with
-    convert_input() for Mac GUI and RiscOS GUI.
+    convert_input() for Mac GUI.
 -   Add mnemonics from RFC1345 longer than two characters.
     Support CTRL-K _{mnemonic}_
 7   In "-- INSERT (lang) --" show the name of the keymap used instead of
@@ -2514,12 +3025,13 @@ Syntax highlighting:
     this isn't reset.  Add a special keyword definition for the syntax rules?
     When this is done, use vim.vim syntax highlighting for help file examples,
     but without ":" in 'iskeyword' for syntax.
+    Also need a separate 'iskeyword' for the command line, e.g., in a help
+    window ":e /asdf/asdf/" CTRL-W works different.
 8   Add specific syntax item to match with parens/braces that don't have a
     "%" match.  :syntax nomatch cMatchError (,{,[,),},] [contained]
 8   Highlight the text between two matching parens (e.g., with a grey
     background) when on one of the parens or in between them.
     Option for the matchparen plugin?
-8   Add a command to jump to the next character highlighted with "Error".
 8   When using a cterm, and no ctermfg or ctermbg are defined, use start/stop
     sequences. Add remark in docs that :if 'term' == "term-name" should be
     used.
@@ -2584,9 +3096,6 @@ Syntax highlighting:
     colors.  And add colors, so that Green+Red becomes Yellow.
     E.g. for this html:
        <B> bold text <I> italic+bold text </B> italic text </I>
-7   Wild idea: Not only set highlighting, but also change what is displayed
-    (e.g., remove characters, so that "<B>bold</B>" can be shown as "bold"):
-       :syn region boldstuff start="<B>" display="" end="</B>" display=""
 7   CTRL-] checks the highlight group for finding out what the tag is.
 7   Add an explanation how a list of words can be used to highlight misspelled
     words.
@@ -2709,6 +3218,10 @@ Built-in script language:
                                Patch by Ilya Sher, 2004 Mar 4.
                                Return a list instead.
        char2hex()              convert char string to hex string.
+       crypt()                 encrypt string
+       decrypt()               decrypt string
+       base64enc()             base 64 encoding
+       base64dec()             base 64 decoding
        attributes()            return file protection flags "drwxrwxrwx"
        filecopy(from, to)      Copy a file
        shorten(fname)          shorten a file name, like home_replace()
@@ -2760,8 +3273,6 @@ Built-in script language:
     "command" would use <> notation.
     Does scratch buffer have a number?  Or re-use same number?
 7   Add function to generate unique number (date in milliseconds).
-7   Automatically load a function from a file when it is called.  Need an
-    option for the search path. (Sekera)
 
 
 Robustness:
@@ -2813,7 +3324,7 @@ Performance:
     http://www.theregister.co.uk/content/4/22908.html. (Andre Pang)
 7   Check how performance of loading the wordlist can be improved (adding a
     lot of abbreviations).
-7   DOS console: Add t_DL support, to make scrolling faster.
+7   MS-DOS console: Add t_DL support, to make scrolling faster.
 7   Compile Ex commands to byte codes.  Store byte codes in a vim script file
     at the end, after "compiled:.  Make it look like a single comment line
     for old Vim versions.  Insert first line "Vim script compiled <timestamp>.
@@ -2821,10 +3332,6 @@ Performance:
     Add command to compile a vim script and add it to the file in-place.
     Split Ex command executing into a parsing and executing phase.
     Use compiled code for functions, while loops, etc.
-8   When editing a file with extremely long lines (e.g., an executable), the
-    "linerest" in readfile() is allocated twice to be able to copy what was
-    read so far.  Use realloc() instead?  Or split the line when allocating
-    memory fails and "linerest" is big (> 100000)?
 8   When defining autocommands (e.g., from $VIMRUNTIME/filetype.vim), need to
     compare each pattern with all existing patterns.  Use a hash code to avoid
     using strcmp() too often?
@@ -2946,7 +3453,7 @@ Screen updating:
 
 
 Scrolling:
-8   Add "zm" command: scroll horizontally to put the cursor in the middle.
+8   Add "zy" command: scroll horizontally to put the cursor in the middle.
 6   Add option to set the overlap for CTRL-F and CTRL-B. (Garhi)
 -   extend 'scrollbind' option: 'scrollopt' words "search", "relative", etc..
     Also 'e'xecute some commands (search, vertical movements) in all bound
@@ -3007,12 +3514,6 @@ Tags:
     make the filename or the whole option use |wildcards| globing, better
     would be to merge the 2 kinds of globing. originally (Erik Falor, 2008
     April 18), updated (Ian Kelling, 2008 July 4)
-8   Use a mechanism similar to omni completion to figure out the kind of tab
-    for CTRL-] and jump to the appropriate matching tag (if there are
-    several).
-    Alternative: be able to define a function that takes the tag name and uses
-    taglist() to find the right location.  With indication of using CTRL-] so
-    that the context can be taken into account. (Robert Webb)
 7   Can CTRL-] (jump to tag) include a following "." and "->" to restrict the
     number of possible matches? Check tags file for an item that has members.
     (Flemming Madsen)
@@ -3055,9 +3556,6 @@ Tags:
 Win32 GUI:
 8   Make debug mode work while starting up (vim -D).  Open console window for
     the message and input?
-7   The Python interface only works with one version of Python, selected at
-    compile time.  Can this be made to work with version 2.1 and 2.2
-    dynamically?
 7   GvimExt: when there are several existing Vims, move the list to a submenu.
     (Mike McCollister)
 8   When using "Edit with Vim" for one file it changes directory, when several
@@ -3092,7 +3590,7 @@ Win32 GUI:
 
 
 GUI:
-8   Make inputdialog() work for Photon, Amiga, RiscOS.
+8   Make inputdialog() work for Photon, Amiga.
 -   <C--> cannot be mapped.  Should be possible to recognize this as a
     normal "-" with the Ctrl modifier.
 7   Implement ":popup" for other systems than Windows.
@@ -3171,6 +3669,8 @@ GUI:
 
 
 Autocommands:
+9   Rework the code from FEAT_OSFILETYPE for autocmd-osfiletypes to use
+    'filetype'.  Only for when the current buffer is known.
 -   Put autocommand event names in a hashtable for faster lookup?
 8   When the SwapExists event is triggered, provide information about the
     swap file, e.g., whether the process is running, file was modified, etc.
@@ -3182,8 +3682,6 @@ Autocommands:
     CursorHold), go through the list once and cache the result for a specific
     buffer.  Invalidate the cache when adding/deleting autocommands or
     changing the buffer name.
-8   Add ScriptReadCmd event: used to load remote Vim scripts, e.g.
-    "vim -u http://mach/path/vimrc".
 7   Add TagJump event: do something after jumping to a tag.
 8   Add "TagJumpFile" autocommand: When jumping to another file for a tag.
     Can be used to open "main.c.gz" when "main.c" isn't found.
@@ -3205,9 +3703,9 @@ Autocommands:
     handled (e.g., other font) (Ron Aaron)
 7   When trying to open a directory, trigger an OpenDirectory event.
 7   Add file type in front of file pattern: <d> for directory, <l> for link,
-    <x> for executable, etc.  <&xxx> for Risc OS.  With commas to separate
-    alternatives.  The autocommand is only executed when both the file type
-    AND the file pattern match. (Leonard)
+    <x> for executable, etc.  With commas to separate alternatives.  The
+    autocommand is only executed when both the file type AND the file pattern
+    match. (Leonard)
 5   Add option that specifies extensions which are to be discarded from the
     file name.  E.g. 'ausuffix', with ".gz,.orig".  Such that file.c.gz will
     trigger the "*.c" autocommands.  (Belabas)
@@ -3234,13 +3732,7 @@ Autocommands:
     PreDirChanged/PostDirChanged
                    - Before/after ":cd" has been used (for changing the
                      window title)
-    BufReadAction   - replaces reading a file
-    BufWriteAction  - replaces writing a file
     ShutDown       - when the system is about to shut down
-    InsertCharPre   - user typed character Insert mode, before inserting the
-                     char.  Pattern is matched with text before the cursor.
-                     Set v:char to the character, can be changed.
-                     (not triggered when 'paste' is set).
     InsertCharPost  - user typed a character in Insert mode, after inserting
                      the char.
     BufModified            - When a buffer becomes modified, or unmodified (for
@@ -3394,7 +3886,6 @@ Command line editing:
 
 
 Command line completion:
-8   Completing ":r ~br" should find matching user names.
 8   Change expand_interactively into a flag that is passed as an argument.
 8   With command line completion after '%' and '#', expand current/alternate
     file name, so it can be edited.  Also with modifiers, such as "%:h".
@@ -3425,9 +3916,6 @@ Command line completion:
 
 
 Command line history:
-9   Remember which command lines were actually typed and were not loaded from
-    viminfo.  When writing viminfo append only these lines, so that lines from
-    other Vim's are not overwritten.
 -   Add "KeyWasTyped" flag: It's reset before each command and set when a
     character from the keyboard is consumed. Value is used to decide to put a
     command line in history or not. Put line in history if it didn't
@@ -3451,6 +3939,7 @@ Insert mode:
 7   Use CTRL-G <count> to repeat what follows.  Useful for inserting a
     character multiple times or repeating CTRL-Y.
 -   Make 'revins' work in Replace mode.
+9   Can't use multi-byte characters for 'matchpairs'.
 7   Use 'matchpairs' for 'showmatch': When inserting a character check if it
     appears in the rhs of 'matchpairs'.
 -   In Insert mode (and command line editing?): Allow undo of the last typed
@@ -3470,12 +3959,10 @@ Insert mode:
 
 
 'cindent', 'smartindent':
-9   ") :" confuses continuation line: (Colin Bennett, 2007 Dec 14)
-        cout << "a"
-                << ") :"
-                << "y";
-9   "} else" causes following lines to be indented too much. (Rouben
-    Rostamian, 2008 Aug 30)
+9   Wrapping a variable initialization should have extra indent:
+       char * veryLongName =
+               "very long string"
+    Also check if "cino=+10" is used correctly.
 8   Lisp indenting: "\\" confuses the indenter. (Dorai Sitaram, 2006 May 17)
 8   Why are continuation lines outside of a {} block not indented?  E.g.:
        long_type foo =
@@ -3527,7 +4014,6 @@ Insert mode:
 -   Add option to 'cindent' to set indent for comments outside of {}?
 -   Make a command to line up a comment after a code line with a previous
     comment after a code line. Can 'cindent' do this automatically?
-7   Add 'j' flag to 'formatoptions': Remove comment leader when joining lines.
 -   When 'cindent'ing a '}', showmatch is done before fixing the indent.  It
     looks better when the indent is fixed before the showmatch. (Webb)
 -   Add option to make indenting work in comments too (for commented-out
@@ -3618,7 +4104,7 @@ Select mode:
 8   In blockwise mode, typed characters are inserted in front of the block,
     backspace deletes a column before the block. (Steve Hall)
 7   Alt-leftmouse starts block mode selection in MS Word.
-    See http://www.vim.org/tips/tip.php?tip_id=743
+    See http://vim.wikia.com/wiki/Use_Alt-Mouse_to_select_blockwise.
 7   Add Cmdline-select mode.  Like Select mode, but used on the command line.
     - Change gui_send_mouse_event() to pass on mouse events when 'mouse'
       contains 'C' or 'A'.
@@ -3629,6 +4115,8 @@ Select mode:
 
 
 Visual mode:
+8   Support using "." in Visual mode. Use the operator applied to the Visual
+    selection, if possible.
 -   When dragging the Visual selection with the mouse and 'scrolloff' is zero,
     behave like 'scrolloff' is one, so that the text scrolls when the pointer
     is in the top line.
@@ -3686,7 +4174,7 @@ More advanced repeating commands:
 -   Add "." command for visual mode: redo last visual command (e.g. ":fmt").
 7   Repeating "d:{cmd}" with "." doesn't work. (Benji Fisher)  Somehow remember
     the command line so that it can be repeated?
--   Add "gn": repeat last movement command.  Including count.
+-   Add command to repeat last movement.  Including count.
 -   Add "." command after operator: repeat last command of same operator.  E.g.
     "c." will repeat last change, also when "x" used since then (Webb).
     "y." will repeat last yank.
@@ -3712,21 +4200,14 @@ Mappings and Abbreviations:
 8   Add a flag to ":abbrev" to eat the character that triggers the
     abbreviation.  Thus "abb ab xxx" and typing "ab<Space>" inserts "xxx" and
     not the <Space>.
-8   Allow mapping of CTRL-@ (anywhere in the LHS).
 8   Give a warning when using CTRL-C in the lhs of a mapping.  It will never
     (?) work.
 8   Add a way to save a current mapping and restore it later.  Use a function
     that returns the mapping command to restore it: mapcmd()?  mapcheck() is
     not fool proof.  How to handle ambiguous mappings?
 7   Add <0x8f> (hex), <033> (octal) and <123> (decimal) to <> notation?
-7   Allow mapping "Q" and "Q}" at the same time.  Need to put a flag with "Q",
-    that it needs an extra character before it can match.  See Vile 'maplonger'
-    option.
 7   When someone tries to unmap with a trailing space, and it fails, try
     unmapping without the trailing space.  Helps for ":unmap xx | unmap yy".
-7   Make it possible to map 'wildchar', but only when it's a special character
-    (like CTRL-E).  Currently it's only recognized when typed.  Useful for
-    mapping a key to do something and then completion.
 6   Context-sensitive abbreviations: Specify syntax group(s) in which the
     abbreviations are to be used.
 -   Add mappings that take arguments.  Could work like the ":s" command.  For
@@ -3738,12 +4219,9 @@ Mappings and Abbreviations:
     :map q<Char>           :s/<Char>/\u\0/g
     Or implicit:
     :map q                     <Register>d<Number>$
--   Make it possible to include a <Nul> in the lhs and rhs of a mapping.
 -   Add command to repeat a whole mapping ("." only repeats the last change in
     a mapping).  Also: Repeat a whole insert command, including any mappings
     that it included.  Sort-of automatic recording?
--   Add an option to ":map" that makes it display the special keys in
-    <> notation (e.g. <CR> instead of ^M).  Or just always do this?
 -   Include an option (or flag to 'cpoptions') that makes errors in mappings
     not flush the rest of the mapping (like nvi does).
 -   Use context sensitiveness of completion to switch abbreviations and
@@ -3784,6 +4262,7 @@ Incsearch:
 
 
 Searching:
+9   Should have an option for :vimgrep to find lines without a match.
 8   Add "g/" and "gb" to search for a pattern in the Visually selected text?
     "g?" is already used for rot13.
     The vis.vim script has a ":S" command that does something like this.
@@ -3791,6 +4270,8 @@ Searching:
     Use "&/" for searching the text in the Visual area?
 9   Add "v" offset: "/pat/v": search for pattern and start Visual mode on the
     matching text.
+8   Add a modifier to interpret a space like "\_s\+" to make it much easier to
+    search for a phrase.
 8   Add a mechanism for recursiveness: "\@(([^()]*\@g[^()]*)\)".  \@g stands
     for "go recursive here" and \@( \) marks the recursive part.
     Perl does it this way:
@@ -3913,6 +4394,9 @@ Searching:
 
 
 Undo:
+9   ":gundo" command: global undo.  Undoes changes spread over multiple files
+    in the order they were made.  Also ":gredo".  Both with a count.  Useful
+    when tests fail after making changes and you forgot in which files.
 9   After undo/redo, in the message show whether the buffer is modified or
     not.
 8   Use timestamps for undo, so that a version a certain time ago can be found
@@ -3987,6 +4471,9 @@ Buffer list:
     should then mean the number of the last buffer.  E.g.: "4,$bdel".
 7   Add an option to mostly use slashes in file names.  Separately for
     internal use and for when executing an external program?
+8   Some file systems are case-sensitive, some are not.  Besides
+    'wildignorecase' there might be more parts inside
+    CASE_INSENSITIVE_FILENAME that are useful on Unix.
 
 
 Swap (.swp) files:
@@ -4085,9 +4572,6 @@ Sessions:
 Options:
 7   ":with option=value | command": temporarily set an option value and
     restore it after the command has executed.
-7   Setting an option always sets "w_set_curswant", while this is only
-    required for a few options.  Only do it for those options to avoid the
-    side effect.
 8   Make "old" number options that really give a number of effects into string
     options that are a comma separated list.  The old number values should
     also be supported.
@@ -4097,6 +4581,7 @@ Options:
 7   There is 'titleold', why is there no 'iconold'? (Chazelas)
 7   Make 'scrolloff' a global-local option, so that it can be different in the
     quickfix window, for example. (Gary Holloway)
+    Also do 'sidescrolloff'.
 
 
 External commands:
@@ -4169,10 +4654,8 @@ Marks:
 
 
 Digraphs:
-7   Make "ga" show the digraph for a character, if it exists.
-    Also the keymap?
--   Make it possible to enter "r<C-E>" and "r<C-Y>" (get character from line
-    below/above).
+7   Make "ga" show the keymap for a character, if it exists.
+    Also show the code of the character after conversion to 'filenecoding'.
 -   Use digraph table to tell Vim about the collating sequence of special
     characters?
 8   Add command to remove one or more (all) digraphs. (Brown)
@@ -4190,8 +4673,6 @@ Writing files:
 8   'backupskip' doesn't write a backup file at all, a bit dangerous for some
     applications.  Add 'backupelsewhere' to write a backup file in another
     directory?  Or add a flag to 'backupdir'?
-7   The 'directory' option supports changing path separators to "%" to make
-    file names unique, also support this for 'backupdir'. (Mikolaj Machowski)
 6   Add an option to write a new, numbered, backup file each time.  Like
     'patchmode', e.g., 'backupmode'.
 6   Make it possible to write 'patchmode' files to a different directory.
@@ -4290,8 +4771,6 @@ Debug mode:
 
 
 Various improvements:
-8   ":sign unplace * file={filename}" should work.  Also: ":sign unplace *
-    buffer={bufnr}".  So one can remove all signs for one file/buffer.
 7   Add plugins for formatting?  Should be able to make a choice depending on
     the language of a file (English/Korean/Japanese/etc.).
     Setting the 'langformat' option to "chinese" would load the
@@ -4316,7 +4795,6 @@ Various improvements:
 7   Allow a window not to have a statusline.  Makes it possible to use a
     window as a buffer-tab selection.
 8   Allow non-active windows to have a different statusline. (Yakov Lerner)
-6   Python interface: add vim.message() function. (Michal Vitecek, 2002 Nov 5)
 7   Support using ":vert" with User commands.  Add expandable items <vert>.
     Do the same for ":browse" and ":confirm"?
     For ":silent" and ":debug" apply to the whole user command.
@@ -4385,6 +4863,8 @@ Various improvements:
 3   Make "2d%" work like "d%d%" instead of "d2%"?
 7   "g CTRL-O" jumps back to last used buffer. Skip CTRL-O jumps in the same
     buffer.  Make jumplist remember the last ten accessed buffers?
+7   Make it possible to set the size of the jumplist (also to a smaller number
+    than the default). (Nikolai Weibull)
 -   Add code to disable the CAPS key when going from Insert to Normal mode.
 -   Set date/protection/etc. of the patchfile the same as the original file.
 -   Use growarray for termcodes[] in term.c
@@ -4393,7 +4873,7 @@ Various improvements:
     (like "v" makes the operator characterwise-exclusive).  "x" could be used.
 -   Make a set of operations on list of names: expand wildcards, replace home
     dir, append a string, delete a string, etc.
--   Remove mktemp() and use tmpname() only?  Ctags does this.
+-   Remove using mktemp() and use tmpname() only?  Ctags does this.
 -   When replacing environment variables, and there is one that is not set,
     turn it into an empty string?  Only when expanding options? (Hiebert)
 -   Option to set command to be executed instead of producing a beep (e.g. to
@@ -4478,7 +4958,6 @@ Various improvements:
     expanded.  Is there a better way to do this?
 -   Add ":@!" command, to ":@" like what ":source!" is to ":source".
 8   Add ":@:!": repeat last command with forceit set.
--   Should be possible to write to a device, e.g. ":w! /dev/null".
 -   Add 't_normal': Used whenever t_me, t_se, t_ue or t_Zr is empty.
 -   ":cab map test ^V| je", ":cunab map" doesn't work. This is vi compatible!
 -   CTRL-W CTRL-E and CTRL-W CTRL-Y should move the current window up or down
@@ -4495,6 +4974,7 @@ Various improvements:
 -   Make it possible for the 'showbreak' to be displayed at the end of the
     line.  Use a comma to separate the part at the end and the start of the
     line?  Highlight the linebreak characters, add flag in 'highlight'.
+    Make 'showbreak' local to a window.
 -   Some string options should be expanded if they have wildcards, e.g.
     'dictionary' when it is "*.h".
 -   Use a specific type for number and boolean options, making it possible to
@@ -4545,8 +5025,6 @@ Various improvements:
 -   Add a variant of CTRL-V that stops interpretation of more than one
     character. For entering mappings on the command line where a key contains
     several special characters, e.g. a trailing newline.
--   Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'.  Combine
-    the two into a regex for searching. (Ned Konz)
 -   Make '2' option in 'formatoptions' also work inside comments.
 -   Add 's' flag to 'formatoptions': Do not break when inside a string. (Dodt)
 -   When window size changed (with the mouse) and made too small, set it back
@@ -4556,9 +5034,6 @@ Various improvements:
 -   ":split file1 file2" adds two more windows (Webb).
 -   Don't give message "Incomplete last line" when editing binary file.
 -   Add ":a", ":i" for preloading of named buffers.
--   Allow autowrite when doing ":e file" (with an option 'eaw').
--   Allow a "+command" argument before each file name in the Vim command line:
-    "vim +123 file1 +234 file2 +345 file3". ???
 -   When entering text, keep other windows on same buffer updated (when a line
     entered)?
 -   Check out how screen does output optimizing.  Apparently this is possible
@@ -4632,8 +5107,6 @@ Various improvements:
     working in another window.  Put cmdline in a separate window?
 -   Add possibility to put output of Ex commands in a buffer or file, e.g. for
     ":set all".  ":r :set all"?
--   'edit' option: When off changing the buffer is not possible (Really
-    read-only mode).
 -   When the 'equalalways' option is set, creating a new window should not
     result in windows to become bigger.  Deleting a window should not result in
     a window to become smaller (Webb).
index 3f23f1d..113df4f 100644 (file)
@@ -1,4 +1,4 @@
-*uganda.txt*    For Vim version 7.3.  Last change: 2010 Aug 07
+*uganda.txt*    For Vim version 7.4.  Last change: 2013 Jul 06
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -238,6 +238,7 @@ Canada:             Contact Kibaale Children's Fund (KCF) in Surrey, Canada.  They
 Holland:       Transfer to the account of "Stichting ICCF Holland" in Lisse.
                This will allow for tax deduction if you live in Holland.
                        Postbank, nr. 4548774
+                       IBAN: NL95 INGB 0004 5487 74
 
 Germany:       It is possible to make donations that allow for a tax return.
                Check the ICCF web site for the latest information:
@@ -266,7 +267,7 @@ Credit Card:        You can use PayPal to send money with a Credit card.  This is
 Others:                Transfer to one of these accounts if possible:
                    Postbank, account 4548774
                                Swift code: INGB NL 2A
-                               IBAN: NL47 PSTB 0004 5487 74
+                               IBAN: NL95 INGB 0004 5487 74
                        under the name "stichting ICCF Holland", Lisse
                    If that doesn't work:
                    Rabobank Lisse, account 3765.05.117
@@ -277,7 +278,6 @@ Others:             Transfer to one of these accounts if possible:
                amounts for foreign check, sorry)
 
 Address to send checks to:
-                       stichting ICCF Holland
                        Bram Moolenaar
                        Finsterruetihof 1
                        8134 Adliswil
index 3c47db7..f1990c9 100644 (file)
@@ -1,4 +1,4 @@
-*undo.txt*      For Vim version 7.3.  Last change: 2010 Jul 20
+*undo.txt*      For Vim version 7.4.  Last change: 2012 Mar 04
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -35,8 +35,10 @@ CTRL-R                       Redo [count] changes which were undone.  {Vi: redraw
 :red[o]                        Redo one change which was undone.  {Vi: no redo}
 
                                                        *U*
-U                      Undo all latest changes on one line.  {Vi: while not
-                       moved off of it}
+U                      Undo all latest changes on one line, the line where
+                       the latest change was made. |U| itself also counts as
+                       a change, and thus |U| undoes a previous |U|.
+                       {Vi: while not moved off of the last modified line}
 
 The last changes are remembered.  You can use the undo and redo commands above
 to revert the text to how it was before each change.  You can also apply the
@@ -125,16 +127,26 @@ This is explained in the user manual: |usr_32.txt|.
 
                                                        *:undol* *:undolist*
 :undol[ist]            List the leafs in the tree of changes.  Example:
-                               number changes   time ~
-                               4      10        10:34:11
-                               18     4         11:01:46
+                          number changes  when               saved ~
+                              88      88  2010/01/04 14:25:53
+                             108     107  08/07 12:47:51
+                             136      46  13:33:01             7
+                             166     164  3 seconds ago
 
                        The "number" column is the change number.  This number
                        continuously increases and can be used to identify a
                        specific undo-able change, see |:undo|.
                        The "changes" column is the number of changes to this
                        leaf from the root of the tree.
-                       The "time" column is the time this change was made.
+                       The "when" column is the date and time when this
+                       change was made.  The four possible formats are:
+                           N seconds ago
+                           HH:MM:SS             hour, minute, seconds
+                           MM/DD HH:MM:SS       idem, with month and day
+                           YYYY/MM/DD HH:MM:SS  idem, with year
+                       The "saved" column specifies, if this change was
+                       written to disk and which file write it was. This can
+                       be used with the |:later| and |:earlier| commands.
                        For more details use the |undotree()| function.
 
                                                        *g-*
@@ -148,7 +160,7 @@ g-                  Go to older text state.  With a count repeat that many
 :earlier {N}d          Go to older text state about {N} days before.
 
 :earlier {N}f          Go to older text state {N} file writes before.
-                       When changes were made since the laste write
+                       When changes were made since the last write
                        ":earlier 1f" will revert the text to the state when
                        it was written.  Otherwise it will go to the write
                        before that.
@@ -236,7 +248,9 @@ Vim saves undo trees in a separate undo file, one for each edited file, using
 a simple scheme that maps filesystem paths directly to undo files. Vim will
 detect if an undo file is no longer synchronized with the file it was written
 for (with a hash of the file contents) and ignore it when the file was changed
-after the undo file was written, to prevent corruption.
+after the undo file was written, to prevent corruption.  An undo file is also
+ignored if its owner differs from the owner of the edited file.  Set 'verbose'
+to get a message about that when opening a file.
 
 Undo files are normally saved in the same directory as the file.  This can be
 changed with the 'undodir' option.
@@ -253,7 +267,12 @@ respectively:
                (the magic number at the start of the file is wrong), then
                this fails, unless the ! was added.
                If it exists and does look like an undo file it is
-               overwritten.
+               overwritten. If there is no undo-history, nothing will be 
+               written.
+               Implementation detail: Overwriting happens by first deleting
+               the existing file and then creating a new file with the same
+               name. So it is not possible to overwrite an existing undofile
+               in a write-protected directory.
                {not in Vi}
 
 :rundo {file}  Read undo history from {file}.
@@ -324,8 +343,8 @@ Writing an undo file may fail for these reasons:
        A file exists with the name of the undo file to be written, but it
        does not start with the right magic number.  You may want to delete
        this file or rename it.
-"Skipping undo file write, noting to undo"
-       There is no undo information not be written, nothing has been changed
+"Skipping undo file write, nothing to undo"
+       There is no undo information to be written, nothing has been changed
        or 'undolevels' is negative.
 *E829* An error occurred while writing the undo file.  You may want to try
        again.
index da97723..11fa217 100644 (file)
@@ -1,4 +1,4 @@
-*usr_01.txt*   For Vim version 7.3.  Last change: 2008 May 07
+*usr_01.txt*   For Vim version 7.4.  Last change: 2010 Nov 03
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -40,13 +40,20 @@ the commands and options used for it.  Use these two commands:
        Press  CTRL-]  to jump to a subject under the cursor.
        Press  CTRL-O  to jump back (repeat to go further back).
 
-Many links are in vertical bars, like this: |bars|.  An option name, like
-'number', a command in double quotes like ":write" and any other word can also
-be used as a link.  Try it out: Move the cursor to  CTRL-]  and press CTRL-]
-on it.
+Many links are in vertical bars, like this: |bars|.  The bars themselves may
+be hidden or invisible, see below.  An option name, like 'number', a command
+in double quotes like ":write" and any other word can also be used as a link.
+Try it out: Move the cursor to  CTRL-]  and press CTRL-] on it.
 
 Other subjects can be found with the ":help" command, see |help.txt|.
 
+The bars and stars are usually hidden with the |conceal| feature.  They also
+use |hl-Ignore|, using the same color for the text as the background.  You can
+make them visible with: >
+       :set conceallevel=0
+       :hi link HelpBar Normal
+       :hi link HelpStar Normal
+
 ==============================================================================
 *01.2* Vim installed
 
index 6b9f9ae..8bfa9ba 100644 (file)
@@ -1,4 +1,4 @@
-*usr_02.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*usr_02.txt*   For Vim version 7.4.  Last change: 2010 Jul 20
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 0f73c55..6173260 100644 (file)
@@ -1,4 +1,4 @@
-*usr_03.txt*   For Vim version 7.3.  Last change: 2006 Jun 21
+*usr_03.txt*   For Vim version 7.4.  Last change: 2006 Jun 21
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 5a3f97b..c09cb20 100644 (file)
@@ -1,4 +1,4 @@
-*usr_04.txt*   For Vim version 7.3.  Last change: 2008 Sep 06
+*usr_04.txt*   For Vim version 7.4.  Last change: 2008 Sep 06
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index b0f27d1..f71cf42 100644 (file)
@@ -1,4 +1,4 @@
-*usr_05.txt*   For Vim version 7.3.  Last change: 2009 Jun 04
+*usr_05.txt*   For Vim version 7.4.  Last change: 2012 Nov 20
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -49,8 +49,7 @@ For MS-DOS and MS-Windows you can use one of these:
 
 The vimrc file can contain all the commands that you type after a colon.  The
 most simple ones are for setting options.  For example, if you want Vim to
-always start with the 'incsearch' option on, add this line you your vimrc
-file: >
+always start with the 'incsearch' option on, add this line your vimrc file: >
 
        set incsearch
 
index 208cc3e..5e3c772 100644 (file)
@@ -1,4 +1,4 @@
-*usr_06.txt*   For Vim version 7.3.  Last change: 2009 Oct 28
+*usr_06.txt*   For Vim version 7.4.  Last change: 2009 Oct 28
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 4722ddb..8a0600b 100644 (file)
@@ -1,4 +1,4 @@
-*usr_07.txt*   For Vim version 7.3.  Last change: 2006 Apr 24
+*usr_07.txt*   For Vim version 7.4.  Last change: 2006 Apr 24
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 9a92802..2ac6fea 100644 (file)
@@ -1,4 +1,4 @@
-*usr_08.txt*   For Vim version 7.3.  Last change: 2006 Jul 18
+*usr_08.txt*   For Vim version 7.4.  Last change: 2006 Jul 18
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -17,7 +17,7 @@ side by side.  All this is possible with split windows.
 |08.6| Commands for all windows
 |08.7| Viewing differences with vimdiff
 |08.8| Various
-|08.9|  Tab pages
+|08.9| Tab pages
 
      Next chapter: |usr_09.txt|  Using the GUI
  Previous chapter: |usr_07.txt|  Editing more than one file
index fbc3865..68575f5 100644 (file)
@@ -1,4 +1,4 @@
-*usr_09.txt*   For Vim version 7.3.  Last change: 2006 Apr 24
+*usr_09.txt*   For Vim version 7.4.  Last change: 2006 Apr 24
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 9bf6a22..4398c4d 100644 (file)
@@ -1,4 +1,4 @@
-*usr_10.txt*   For Vim version 7.3.  Last change: 2006 Nov 05
+*usr_10.txt*   For Vim version 7.4.  Last change: 2006 Nov 05
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index fed950c..9935ded 100644 (file)
@@ -1,4 +1,4 @@
-*usr_11.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*usr_11.txt*   For Vim version 7.4.  Last change: 2010 Jul 20
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 5dda76a..fba1b53 100644 (file)
@@ -1,4 +1,4 @@
-*usr_12.txt*   For Vim version 7.3.  Last change: 2007 May 11
+*usr_12.txt*   For Vim version 7.4.  Last change: 2007 May 11
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 2b5393a..5f0a660 100644 (file)
@@ -1,4 +1,4 @@
-*usr_20.txt*   For Vim version 7.3.  Last change: 2006 Apr 24
+*usr_20.txt*   For Vim version 7.4.  Last change: 2006 Apr 24
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index a49c98c..450d394 100644 (file)
@@ -1,4 +1,4 @@
-*usr_21.txt*   For Vim version 7.3.  Last change: 2008 Nov 09
+*usr_21.txt*   For Vim version 7.4.  Last change: 2012 Nov 02
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -282,7 +282,7 @@ example, use: >
 SESSION HERE, SESSION THERE
 
 The obvious way to use sessions is when working on different projects.
-Suppose you store you session files in the directory "~/.vim".  You are
+Suppose you store your session files in the directory "~/.vim".  You are
 currently working on the "secret" project and have to switch to the "boring"
 project: >
 
@@ -295,7 +295,7 @@ is saved, using ":mksession!".  This overwrites the previous session.  The
 next time you load the secret session you can continue where you were at this
 point.  And finally you load the new "boring" session.
 
-If you open help windows, split and close various window, and generally mess
+If you open help windows, split and close various windows, and generally mess
 up the window layout, you can go back to the last saved session: >
 
        :source ~/.vim/boring.vim
@@ -423,10 +423,10 @@ and nine numbered 1 to 9.
 A VIEW WITH A NAME
 
 The second basic way to use views is by storing the view in a file with a name
-you chose.  This view can be loaded while editing another file.  Vim will then
-switch to editing the file specified in the view.  Thus you can use this to
-quickly switch to editing another file, with all its options set as you saved
-them.
+you choose.  This view can be loaded while editing another file.  Vim will
+then switch to editing the file specified in the view.  Thus you can use this
+to quickly switch to editing another file, with all its options set as you
+saved them.
    For example, to save the view of the current file: >
 
        :mkview ~/.vim/main.vim
index 8ca034e..cff8e9d 100644 (file)
@@ -1,4 +1,4 @@
-*usr_22.txt*   For Vim version 7.3.  Last change: 2010 Feb 21
+*usr_22.txt*   For Vim version 7.4.  Last change: 2012 Nov 15
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -326,9 +326,9 @@ shorter to type: >
 
 The output could look like this:
 
-  1 #h "help.txt"                      line 62 ~
-  2 %a+        "usr_21.txt"                    line 1 ~
-  3    "usr_toc.txt"                   line 1 ~
+  1 #h   "help.txt"                    line 62 ~
+  2 %a + "usr_21.txt"                  line 1 ~
+  3      "usr_toc.txt"                 line 1 ~
 
 The first column contains the buffer number.  You can use this to edit the
 buffer without having to type the name, see below.
index 50e7f8f..63cbc61 100644 (file)
@@ -1,4 +1,4 @@
-*usr_23.txt*   For Vim version 7.3.  Last change: 2006 Apr 24
+*usr_23.txt*   For Vim version 7.4.  Last change: 2006 Apr 24
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index e33e0c7..46a22c6 100644 (file)
@@ -1,4 +1,4 @@
-*usr_24.txt*   For Vim version 7.3.  Last change: 2006 Jul 23
+*usr_24.txt*   For Vim version 7.4.  Last change: 2006 Jul 23
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 3cc46e2..01f21a1 100644 (file)
@@ -1,4 +1,4 @@
-*usr_25.txt*   For Vim version 7.3.  Last change: 2007 May 11
+*usr_25.txt*   For Vim version 7.4.  Last change: 2007 May 11
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index e32802c..cc23959 100644 (file)
@@ -1,4 +1,4 @@
-*usr_26.txt*   For Vim version 7.3.  Last change: 2006 Apr 24
+*usr_26.txt*   For Vim version 7.4.  Last change: 2006 Apr 24
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 107411e..fb09659 100644 (file)
@@ -1,4 +1,4 @@
-*usr_27.txt*   For Vim version 7.3.  Last change: 2010 Mar 28
+*usr_27.txt*   For Vim version 7.4.  Last change: 2010 Mar 28
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 8a02838..46db1b9 100644 (file)
@@ -1,4 +1,4 @@
-*usr_28.txt*   For Vim version 7.3.  Last change: 2008 Jun 14
+*usr_28.txt*   For Vim version 7.4.  Last change: 2008 Jun 14
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -18,7 +18,7 @@ This chapter explains the different ways this can be done.
 |28.7| Folding by syntax
 |28.8| Folding by expression
 |28.9| Folding unchanged lines
-|28.10| Which fold method to use?
+|28.10|        Which fold method to use?
 
      Next chapter: |usr_29.txt|  Moving through programs
  Previous chapter: |usr_27.txt|  Search commands and patterns
index fb7d688..f13cd3a 100644 (file)
@@ -1,4 +1,4 @@
-*usr_29.txt*   For Vim version 7.3.  Last change: 2008 Jun 28
+*usr_29.txt*   For Vim version 7.4.  Last change: 2008 Jun 28
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 09f90f8..52f4375 100644 (file)
@@ -1,4 +1,4 @@
-*usr_30.txt*   For Vim version 7.3.  Last change: 2007 Nov 10
+*usr_30.txt*   For Vim version 7.4.  Last change: 2007 Nov 10
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index adbd56a..550564e 100644 (file)
@@ -1,4 +1,4 @@
-*usr_31.txt*   For Vim version 7.3.  Last change: 2007 May 08
+*usr_31.txt*   For Vim version 7.4.  Last change: 2007 May 08
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 7999efe..fd58f2d 100644 (file)
@@ -1,4 +1,4 @@
-*usr_32.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*usr_32.txt*   For Vim version 7.4.  Last change: 2010 Jul 20
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index c7a5e47..b1108a5 100644 (file)
@@ -1,4 +1,4 @@
-*usr_40.txt*   For Vim version 7.3.  Last change: 2006 Jun 21
+*usr_40.txt*   For Vim version 7.4.  Last change: 2013 Aug 05
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -440,16 +440,16 @@ written.  First you define a function: >
        :  read !date
        :endfunction
 
-You want this function to be called each time, just before a file is written.
-This will make that happen: >
+You want this function to be called each time, just before a buffer is written
+to a file.  This will make that happen: >
 
-       :autocmd FileWritePre *  call DateInsert()
+       :autocmd BufWritePre *  call DateInsert()
 
-"FileWritePre" is the event for which this autocommand is triggered: Just
-before (pre) writing a file.  The "*" is a pattern to match with the file
-name.  In this case it matches all files.
+"BufWritePre" is the event for which this autocommand is triggered: Just
+before (pre) writing a buffer to a file.  The "*" is a pattern to match with
+the file name.  In this case it matches all files.
    With this command enabled, when you do a ":write", Vim checks for any
-matching FileWritePre autocommands and executes them, and then it
+matching BufWritePre autocommands and executes them, and then it
 performs the ":write".
    The general form of the :autocmd command is as follows: >
 
index 6ac0dc1..8db127f 100644 (file)
@@ -1,4 +1,4 @@
-*usr_41.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*usr_41.txt*   For Vim version 7.4.  Last change: 2013 Feb 20
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -313,7 +313,7 @@ The usual precedence is used.  Example: >
        :echo 10 + 5 * 2
 <      20 ~
 
-Grouping is done with braces.  No surprises here.  Example: >
+Grouping is done with parentheses.  No surprises here.  Example: >
 
        :echo (10 + 5) * 2
 <      30 ~
@@ -537,7 +537,7 @@ way.  A few examples will be given in this section.  You can find the whole
 list here: |functions|.
 
 A function is called with the ":call" command.  The parameters are passed in
-between braces, separated by commas.  Example: >
+between parentheses separated by commas.  Example: >
 
        :call search("Date: ", "W")
 
@@ -597,7 +597,7 @@ String manipulation:                                        *string-functions*
        strridx()               last index of a short string in a long string
        strlen()                length of a string
        substitute()            substitute a pattern match with a string
-       submatch()              get a specific match in a ":substitute"
+       submatch()              get a specific match in ":s" and substitute()
        strpart()               get part of a string
        expand()                expand special keywords
        iconv()                 convert text from one encoding to another
@@ -661,7 +661,20 @@ Floating point computation:                                *float-functions*
        sqrt()                  square root
        sin()                   sine
        cos()                   cosine
+       tan()                   tangent
+       asin()                  arc sine
+       acos()                  arc cosine
        atan()                  arc tangent
+       atan2()                 arc tangent
+       sinh()                  hyperbolic sine
+       cosh()                  hyperbolic cosine
+       tanh()                  hyperbolic tangent
+
+Other computation:                                     *bitwise-function*
+       and()                   bitwise AND
+       invert()                bitwise invert
+       or()                    bitwise OR
+       xor()                   bitwise XOR
 
 Variables:                                             *var-functions*
        type()                  type of a variable
@@ -793,6 +806,8 @@ Syntax and highlighting:      *syntax-functions* *highlighting-functions*
        synID()                 get syntax ID at a specific position
        synIDattr()             get a specific attribute of a syntax ID
        synIDtrans()            get translated syntax ID
+       synstack()              get list of syntax IDs at a specific position
+       synconcealed()          get info about concealing
        diff_hlID()             get highlight ID for diff mode at a position
        matchadd()              define a pattern to highlight (a "match")
        matcharg()              get info about |:match| arguments
@@ -848,12 +863,15 @@ Window size and position:                 *window-size-functions*
        winsaveview()           get view of current window
        winrestview()           restore saved view of current window
 
-Various:                                       *various-functions*
-       mode()                  get current editing mode
-       visualmode()            last visual mode used
+Mappings:                                  *mapping-functions*
        hasmapto()              check if a mapping exists
        mapcheck()              check if a matching mapping exists
        maparg()                get rhs of a mapping
+       wildmenumode()          check if the wildmode is active
+
+Various:                                       *various-functions*
+       mode()                  get current editing mode
+       visualmode()            last visual mode used
        exists()                check if a variable, function, etc. exists
        has()                   check if a feature is supported in Vim
        changenr()              return number of most recent change
@@ -1015,7 +1033,7 @@ so on.  The variable "a:0" contains the number of extra arguments.
 
        :function Show(start, ...)
        :  echohl Title
-       :  echo "Show is " . a:start
+       :  echo "start is " . a:start
        :  echohl None
        :  let index = 1
        :  while index <= a:0
@@ -1283,7 +1301,7 @@ local variable will then refer to that Dictionary.
 
        split(a:line)
 
-The split() function takes a string, chops it into white separated words
+The split() function takes a string, chops it into whitespace separated words
 and returns a list with these words.  Thus in the example it returns: >
 
        :echo split('three two five one')
@@ -1400,7 +1418,7 @@ Let's start with an example: >
 
 The ":read" command will fail if the file does not exist.  Instead of
 generating an error message, this code catches the error and gives the user a
-nice message instead.
+nice message.
 
 For the commands in between ":try" and ":endtry" errors are turned into
 exceptions.  An exception is a string.  In the case of an error the string
@@ -1477,7 +1495,7 @@ escaped by a "\" (backslash)  as in the following example: >
 
        :set tags=my\ nice\ file
 
-The same example written as >
+The same example written as: >
 
        :set tags=my nice file
 
@@ -1566,7 +1584,7 @@ Here the comment part will be ignored.  However, Vim will try to unmap
 
 RESTORING THE VIEW
 
-Sometimes you want to make a change and go back to where cursor was.
+Sometimes you want to make a change and go back to where the cursor was.
 Restoring the relative position would also be nice, so that the same line
 appears at the top of the window.
    This example yanks the current line, puts it above the first line in the
@@ -1666,7 +1684,7 @@ in your plugin file!
 HEADER
 
 You will probably add new corrections to the plugin and soon have several
-versions laying around.  And when distributing this file, people will want to
+versions lying around.  And when distributing this file, people will want to
 know who wrote this wonderful plugin and where they can send remarks.
 Therefore, put a header at the top of your plugin: >
 
@@ -1695,6 +1713,7 @@ make the script work for most people.  It is done like this: >
  12    set cpo&vim
  ..
  42    let &cpo = s:save_cpo
+ 43    unlet s:save_cpo
 
 We first store the old value of 'cpoptions' in the s:save_cpo variable.  At
 the end of the plugin this value is restored.
@@ -1941,6 +1960,7 @@ Here is the resulting complete example: >
  40    endif
  41
  42    let &cpo = s:save_cpo
+ 43    unlet s:save_cpo
 
 Line 33 wasn't explained yet.  It applies the new correction to the word under
 the cursor.  The |:normal| command is used to use the new abbreviation.  Note
@@ -2095,7 +2115,7 @@ and that is not what a filetype plugin should do.
 When an option has a value that is a list of flags or items, consider using
 "+=" and "-=" to keep the existing value.  Be aware that the user may have
 changed an option value already.  First resetting to the default value and
-then changing it often a good idea.  Example: >
+then changing it is often a good idea.  Example: >
 
        :setlocal formatoptions& formatoptions+=ro
 
index 82007a0..a1cd533 100644 (file)
@@ -1,4 +1,4 @@
-*usr_42.txt*   For Vim version 7.3.  Last change: 2008 May 05
+*usr_42.txt*   For Vim version 7.4.  Last change: 2008 May 05
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 2d9fbf7..6eaa9c1 100644 (file)
@@ -1,4 +1,4 @@
-*usr_43.txt*   For Vim version 7.3.  Last change: 2008 Dec 28
+*usr_43.txt*   For Vim version 7.4.  Last change: 2008 Dec 28
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 266708f..48f661e 100644 (file)
@@ -1,4 +1,4 @@
-*usr_44.txt*   For Vim version 7.3.  Last change: 2008 Dec 28
+*usr_44.txt*   For Vim version 7.4.  Last change: 2008 Dec 28
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 1026ee6..3036981 100644 (file)
@@ -1,4 +1,4 @@
-*usr_45.txt*   For Vim version 7.3.  Last change: 2008 Nov 15
+*usr_45.txt*   For Vim version 7.4.  Last change: 2008 Nov 15
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 3b1358d..38e5886 100644 (file)
@@ -1,4 +1,4 @@
-*usr_90.txt*   For Vim version 7.3.  Last change: 2008 Sep 10
+*usr_90.txt*   For Vim version 7.4.  Last change: 2008 Sep 10
 
                     VIM USER MANUAL - by Bram Moolenaar
 
index 5d360d5..d98a999 100644 (file)
@@ -1,4 +1,4 @@
-*usr_toc.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
+*usr_toc.txt*  For Vim version 7.4.  Last change: 2010 Jul 20
 
                     VIM USER MANUAL - by Bram Moolenaar
 
@@ -248,7 +248,7 @@ Subjects that can be read independently.
                |28.7|  Folding by syntax
                |28.8|  Folding by expression
                |28.9|  Folding unchanged lines
-               |28.10| Which fold method to use?
+               |28.10| Which fold method to use?
 
 |usr_29.txt|  Moving through programs
                |29.1|  Using tags
index d3b1552..1d05e1a 100644 (file)
@@ -1,4 +1,4 @@
-*various.txt*   For Vim version 7.3.  Last change: 2010 Aug 10
+*various.txt*   For Vim version 7.4.  Last change: 2013 May 18
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -101,13 +101,14 @@ g8                        Print the hex values of the bytes used in the
 :[range]P[rint] [count] [flags]
                        Just as ":print".  Was apparently added to Vi for
                        people that keep the shift key pressed too long...
+                       Note: A user command can overrule this command.
                        See |ex-flags| for [flags].
 
                                                        *:l* *:list*
 :[range]l[ist] [count] [flags]
                        Same as :print, but display unprintable characters
                        with '^' and put $ after the line.  This can be
-                       changed with the 'listchars' option.
+                       further changed with the 'listchars' option.
                        See |ex-flags| for [flags].
 
                                                        *:nu* *:number*
@@ -132,14 +133,17 @@ g8                        Print the hex values of the bytes used in the
                        specified with {range}, or around the current line
                        if there is no {range}.  If there is a {count}, that's
                        how many lines you'll see; if there is only one window
-                       then the 'window' option is used, otherwise the
-                       current window size is used.
+                       then twice the value of the 'scroll' option is used,
+                       otherwise the current window height minus 3 is used.
+
+                       If there is a {count} the 'window' option is set to
+                       its value.
 
                        :z can be used either alone or followed by any of
                        several punctuation marks.  These have the following
                        effect:
 
-                       mark   first line    last line      new location   ~
+                       mark   first line    last line      new cursor line ~
                        ----   ----------    ---------      ------------
                        +      current line  1 scr forward  1 scr forward
                        -      1 scr back    current line   current line
@@ -167,30 +171,40 @@ g8                        Print the hex values of the bytes used in the
 :norm[al][!] {commands}                                        *:norm* *:normal*
                        Execute Normal mode commands {commands}.  This makes
                        it possible to execute Normal mode commands typed on
-                       the command-line.  {commands} is executed like it is
-                       typed.  For undo all commands are undone together.
+                       the command-line.  {commands} are executed like they
+                       are typed.  For undo all commands are undone together.
                        Execution stops when an error is encountered.
+
                        If the [!] is given, mappings will not be used.
+                       Without it, when this command is called from a
+                       non-remappable mapping (|:noremap|), the argument can
+                       be mapped anyway.
+
                        {commands} should be a complete command.  If
                        {commands} does not finish a command, the last one
                        will be aborted as if <Esc> or <C-C> was typed.
-                       The display isn't updated while ":normal" is busy.
                        This implies that an insert command must be completed
                        (to start Insert mode, see |:startinsert|).  A ":"
                        command must be completed as well.  And you can't use
                        "Q" or "gQ" to start Ex mode.
+
+                       The display is not updated while ":normal" is busy.
+
                        {commands} cannot start with a space.  Put a count of
                        1 (one) before it, "1 " is one space.
+
                        The 'insertmode' option is ignored for {commands}.
+
                        This command cannot be followed by another command,
                        since any '|' is considered part of the command.
+
                        This command can be used recursively, but the depth is
                        limited by 'maxmapdepth'.
-                       When this command is called from a non-remappable
-                       mapping |:noremap|, the argument can be mapped anyway.
+
                        An alternative is to use |:execute|, which uses an
                        expression as argument.  This allows the use of
                        printable characters to represent special characters.
+
                        Example: >
                                :exe "normal \<c-w>\<c-w>"
 <                      {not in Vi, of course}
@@ -351,16 +365,16 @@ N  *+mouse_gpm*           Unix only: Linux console mouse handling |gpm-mouse|
 B  *+mouse_netterm*    Unix only: netterm mouse handling |netterm-mouse|
 N  *+mouse_pterm*      QNX only: pterm mouse handling |qnx-terminal|
 N  *+mouse_sysmouse*   Unix only: *BSD console mouse handling |sysmouse|
+B  *+mouse_sgr*                Unix only: sgr mouse handling |sgr-mouse|
+B  *+mouse_urxvt*      Unix only: urxvt mouse handling |urxvt-mouse|
 N  *+mouse_xterm*      Unix only: xterm mouse handling |xterm-mouse|
-B  *+multi_byte*       16 and 32 bit characters |multibyte|
+N  *+multi_byte*       16 and 32 bit characters |multibyte|
    *+multi_byte_ime*   Win32 input method for multibyte chars |multibyte-ime|
 N  *+multi_lang*       non-English language support |multi-lang|
 m  *+mzscheme*         Mzscheme interface |mzscheme|
 m  *+mzscheme/dyn*     Mzscheme interface |mzscheme-dynamic| |/dyn|
 m  *+netbeans_intg*    |netbeans|
 m  *+ole*              Win32 GUI only: |ole-interface|
-   *+osfiletype*       Support for the 'osfiletype' option and filetype
-                       checking in automatic commands.  |autocmd-osfiletypes|
 N  *+path_extra*       Up/downwards search in 'path' and 'tags'
 m  *+perl*             Perl interface |perl|
 m  *+perl/dyn*         Perl interface |perl-dynamic| |/dyn|
@@ -412,6 +426,7 @@ S  *+windows*               more than one window
 m  *+writebackup*      |'writebackup'| is default on
 m  *+xim*              X input method |xim|
    *+xfontset*         X fontset support |xfontset|
+m  *+xpm_w32*          Win32 GUI only: pixmap support |w32-xpm-support|
    *+xsmp*             XSMP (X session management) support
    *+xsmp_interact*    interactive XSMP (X session management) support
 N  *+xterm_clipboard*  Unix only: xterm clipboard handling
@@ -603,6 +618,10 @@ K                  Run a program to lookup the keyword under the
                        "gs" stands for "goto sleep".
                        While sleeping the cursor is positioned in the text,
                        if at a visible position.  {not in Vi}
+                       Also process the received netbeans messages. {only
+                       available when compiled with the |+netbeans_intg|
+                       feature}
+
 
                                                        *g_CTRL-A*
 g CTRL-A               Only when Vim was compiled with MEM_PROFILING defined
@@ -610,7 +629,7 @@ g CTRL-A            Only when Vim was compiled with MEM_PROFILING defined
                        Only useful for debugging Vim.
 
 ==============================================================================
-3. Using Vim like less or more                                 *less*
+2. Using Vim like less or more                                 *less*
 
 If you use the less or more program to view a file, you don't get syntax
 highlighting.  Thus you would like to use Vim instead.  You can do this by
index c652398..6b791be 100644 (file)
@@ -1,4 +1,4 @@
-*version4.txt*  For Vim version 7.3.  Last change: 2006 Apr 24
+*version4.txt*  For Vim version 7.4.  Last change: 2006 Apr 24
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
index 868d129..15fe92a 100644 (file)
@@ -1,4 +1,4 @@
-*version5.txt*  For Vim version 7.3.  Last change: 2008 Dec 17
+*version5.txt*  For Vim version 7.4.  Last change: 2012 Aug 08
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -6,7 +6,7 @@
 Welcome to Vim Version 5.0!
 
 This document lists the differences between Vim 4.x and Vim 5.0.
-Although 5.0 is mentioned here, this is also for version 5.1, 5.2, etc..
+Although 5.0 is mentioned here, this is also for version 5.1, 5.2, etc.
 See |vi_diff.txt| for an overview of differences between Vi and Vim 5.0.
 See |version4.txt| for differences between Vim 3.0 and Vim 4.0.
 
@@ -3888,7 +3888,7 @@ character is typed.  Helps to close a /* */ comment in C. (Webb)
 When expand() has a second argument which is non-zero, don't use 'suffixes'
 and 'wildignore', return all matches.
 
-'O' flag in 'cpoptions: When not included, Vim will not overwrite a file, if
+'O' flag in 'cpoptions' When not included, Vim will not overwrite a file, if
 it didn't exist when editing started but it does exist when the buffer is
 written to the file.  The file must have been created outside of Vim, possibly
 without the user knowing it.  When this is detected after a shell command,
@@ -4499,7 +4499,7 @@ Could not get all windows back when using a smaller terminal screen.  Didn't
 restore all windows when "winsize" was not in 'sessionoptions'. (Webb)
 
 Command line completion for ":buffer" depended on 'ignorecase' for Unix, but
-not for DOS et al..  Now don't use 'ignorecase', but let it depend on whether
+not for DOS et al.  Now don't use 'ignorecase', but let it depend on whether
 file names are case sensitive or not (like when expanding file names).
 
 Win32 GUI: (Negri)
index 17a29e4..f18fea8 100644 (file)
@@ -1,4 +1,4 @@
-*version6.txt*  For Vim version 7.3.  Last change: 2008 Aug 06
+*version6.txt*  For Vim version 7.4.  Last change: 2013 Jul 28
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -2452,7 +2452,7 @@ differently.
 
 ":n *.c" ":cd .." ":n" didn't use the original directory of the file.  Vi only
 does it for the current file (looks like a bug).  Now remember the buffer used
-for the entry in the argument list and use it's name (adjusted when doing
+for the entry in the argument list and use its name (adjusted when doing
 ":cd"), unless it's deleted.
 
 When inserting a special key as its name ("<F8>" as four characters) after
@@ -3675,7 +3675,7 @@ When double clicking on the first character of a word while 'selection' is
 
 
 Patch 6.0.001
-Problem:    Loading the sh.vim syntax file causes error messages . (Corinna
+Problem:    Loading the sh.vim syntax file causes error messages. (Corinna
            Vinschen)
 Solution:   Add an "if". (Charles Campbell)
 Files:     runtime/syntax/sh.vim
@@ -9091,7 +9091,7 @@ Files:        src/Make_w16.mak, src/testdir/Make_dos.mak
 Patch 6.1.402
 Problem:    When evaluating a function name with curly braces, an error
            is not handled consistently.
-Solution:   Accept the result of an curly braces expression when an
+Solution:   Accept the result of a curly braces expression when an
            error was encountered.  Skip evaluating an expression in curly
            braces when skipping.  (Servatius Brandt)
 Files:     src/eval.c
@@ -10959,7 +10959,7 @@ Solution:   Save and restore the KeyTyped variable when evaluating 'foldexpr'.
 Files:     src/fold.c
 
 Patch 6.2.160
-Problem:    When 'virtualedit' is "all" and 'selection is "exclusive",
+Problem:    When 'virtualedit' is "all" and 'selection' is "exclusive",
            selecting a double-width character below a single-width character
            may cause a crash.
 Solution:   Avoid overflow on unsigned integer decrement. (Taro Muraoka)
@@ -11619,7 +11619,7 @@ Files:      src/gui_gtk.c
 
 Patch 6.2.256
 Problem:    Mac: "macroman" encoding isn't recognized, need to use
-           "8bit-macroman.
+           "8bit-macroman".
 Solution:   Recognize "macroman" with an alias "mac". (Eckehard Berns)
 Files:     src/mbyte.c
 
index 1d559f7..4780976 100644 (file)
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.3.  Last change: 2010 Aug 15
+*version7.txt*  For Vim version 7.4.  Last change: 2013 Aug 10
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -68,6 +68,14 @@ Changed                                      |changed-7.3|
 Added                                  |added-7.3|
 Fixed                                  |fixed-7.3|
 
+VERSION 7.4                    |version-7.4|
+New regexp engine                      |new-regexp-engine|
+Better Python interface                        |better-python-interface|
+Changed                                        |changed-7.4|
+Added                                  |added-7.4|
+Fixed                                  |fixed-7.4|
+
+
 ==============================================================================
 INCOMPATIBLE CHANGES                           *incompatible-7*
 
@@ -1673,7 +1681,7 @@ The GTK font dialog uses a font size zero when the font name doesn't include a
 size.  Use a default size of 10.
 
 This example in the documentation didn't work:
-    :e `=foo . ".c" `
+    :e `=foo . ".c"`
 Skip over the expression in `=expr` when looking for comments, |, % and #.
 
 When ":helpgrep" doesn't find anything there is no error message.
@@ -3587,7 +3595,7 @@ Files:        src/eval.c, src/getchar.c, src/globals.h, src/main.c
 
 Patch 7.0.085
 Problem:    When doing "make test" the viminfo file is modified.
-Solution:   Use another viminfo file after setting 'compatible.
+Solution:   Use another viminfo file after setting 'compatible'.
 Files:     src/testdir/test56.in
 
 Patch 7.0.086
@@ -5987,7 +5995,7 @@ Solution:   Init variables.
 Files:     src/ex_cmds2.c, src/ex_docmd.c
 
 Patch 7.1.201
-Problem:    When reading stdin 'fenc' and 'ff are not set.
+Problem:    When reading stdin 'fenc' and 'ff' are not set.
 Solution:   Set the options after reading stdin. (Ben Schmidt)
 Files:     src/fileio.c
 
@@ -7314,8 +7322,6 @@ Command line completion for :lmap and :lunmap.
 
 Support syntax and filetype completion for user commands. (Christian Brabandt)
 
-Add completion for ":ownsyntax" and improve completion for ":filetype".
-
 Avoid use of the GTK main_loop() so that the GtkFileChooser can be used.
 (James Vega)
 
@@ -8180,7 +8186,7 @@ Solution:   Use get_cmdline_type(). (James Vega)
 Files:     src/ex_getln.c
 
 Patch 7.2.130
-Problem:    Vim may haing until CTRL-C is typed when using CTRL-Z.
+Problem:    Vim may hang until CTRL-C is typed when using CTRL-Z.
 Solution:   Avoid using pause().  Also use "volatile" for variables used in
            signal functions. (Dominique Pelle)
 Files:     src/auto/configure, src/configure.in, src/config.h.in,
@@ -8782,7 +8788,7 @@ Solution:   Change to the new UNUSED style.
 Files:     src/getchar.c
 
 Patch 7.2.231
-Problem:    Warning for unreacheable code.
+Problem:    Warning for unreachable code.
 Solution:   Add #ifdef.
 Files:     src/if_perl.xs
 
@@ -9072,7 +9078,7 @@ Patch 7.2.280
 Problem:    A redraw in a custom statusline with %! may cause a crash.
            (Yukihiro Nakadaira)
 Solution:   Make a copy of 'statusline'.  Also fix typo in function name
-           redraw_custum_statusline. (partly by Dominique Pelle)
+           redraw_custom_statusline. (partly by Dominique Pelle)
 Files:     src/screen.c
 
 Patch 7.2.281
@@ -9144,7 +9150,7 @@ Files:        src/ops.c
 
 Patch 7.2.293
 Problem:    When setting 'comments' option it may be used in a wrong way. 
-Solution:   Don't increment after skipping over digets. (Yukihiro Nakadaira)
+Solution:   Don't increment after skipping over digits. (Yukihiro Nakadaira)
 Files:     src/misc1.c
 
 Patch 7.2.294
@@ -10150,5 +10156,8155 @@ an error.  Was caused by patch 7.2.132.
 
 Make the references to features in the help more consistent. (Sylvain Hitier)
 
+==============================================================================
+VERSION 7.4                                    *version-7.4* *version7.4*
+
+This section is about improvements made between version 7.3 and 7.4.
+
+This release has hundreds of bug fixes and there are a few new features.  The
+most notable new features are:
+
+- New regexp engine                    |new-regexp-engine|
+- A more pythonic Python interface     |better-python-interface|
+
+
+New regexp engine                                      *new-regexp-engine*
+-----------------
+
+What is now called the "old" regexp engine uses a backtracking algorithm.  It
+tries to match the pattern with the text in one way, and when that fails it
+goes back and tries another way.  This works fine for simple patterns, but
+complex patterns can be very slow on longer text.
+
+The new engine uses a state machine.  It tries all possible alternatives at
+the current character and stores the possible states of the pattern.  This is
+a bit slower for simple patterns, but much faster for complex patterns and
+long text.
+
+Most notably, syntax highlighting for Javascript and XML files with long lines
+is now working fine.  Previously Vim could get stuck.
+
+More information here: |two-engines|
+
+
+Better Python interface                                *better-python-interface*
+-----------------------
+
+Added |python-bindeval| function. Unlike |python-eval| this one returns 
+|python-Dictionary|, |python-List| and |python-Function| objects for 
+dictionaries lists and functions respectively in place of their Python 
+built-in equivalents (or None if we are talking about function references).
+   For simple types this function returns Python built-in types and not only 
+Python `str()` like |python-eval| does. On Python 3 it will return `bytes()` 
+objects in place of `str()` ones avoiding possibility of UnicodeDecodeError.
+   Interface of new objects mimics standard Python `dict()` and `list()`
+interfaces to some extent. Extent will be improved in the future.
+
+Added special |python-vars| objects also available for |python-buffer| and 
+|python-window|. They ease access to VimL variables from Python.
+
+Now you no longer need to alter `sys.path` to import your module: special 
+hooks are responsible for importing from {rtp}/python2, {rtp}/python3 and 
+{rtp}/pythonx directories (for Python 2, Python 3 and both respectively). 
+See |python-special-path|.
+
+Added possibility to work with |tabpage|s through |python-tabpage| object.
+
+Added automatic conversion of Vim errors and exceptions to Python 
+exceptions.
+
+Changed the behavior of the |python-buffers| object: it now uses buffer numbers 
+as keys in place of the index of the buffer in the internal buffer list. 
+This should not break anything as the only way to get this index was 
+iterating over |python-buffers|.
+
+Added |:pydo| and |:py3do| commands.
+
+Added the |pyeval()| and |py3eval()| functions.
+
+Now in all places which previously accepted `str()` objects, `str()` and
+`unicode()` (Python 2) or `bytes()` and `str()` (Python 3) are accepted.
+
+|python-window| has gained `.col` and `.row` attributes that are currently 
+the only way to get internal window positions.
+
+Added or fixed support for `dir()` in Vim Python objects.
+
+
+Changed                                                        *changed-7.4*
+-------
+
+Old Python versions (≤2.2) are no longer supported. Building with them did 
+not work anyway.
+
+Options:
+       Added ability to automatically save the selection into the system 
+       clipboard when using non-GUI version of Vim (autoselectplus in 
+       'clipboard'). Also added ability to use the system clipboard as
+       default register (previously only primary selection could be used).
+       (Ivan Krasilnikov, Christian Brabandt, Bram Moolenaar)
+
+       Added a special 'shiftwidth' value that makes 'sw' follow 'tabstop'.
+       As indenting via 'indentexpr' became tricky |shiftwidth()| function
+       was added. Also added equivalent special value to 'softtabstop'
+       option.  (Christian Brabandt, so8res)
+
+       Show absolute number in number column when 'relativenumber' option is
+       on.  Now there are four combinations with 'number' and
+       'relativenumber'.  (Christian Brabandt)
+
+Commands:
+       |:diffoff| now saves the local values of some settings and restores 
+       them in place of blindly resetting them to the defaults. (Christian 
+       Brabandt)
+
+Other:
+       Lua interface now also uses userdata binded to Vim structures. (Taro 
+       Muraoka, Luis Carvalho)
+
+       glob() and autocommand patterns used to work with the undocumented
+       "\{n,m\}" item from a regexp.  "\{" is now used for a literal "{", as
+       this is normal in shell file patterns.  Now used "\\\{n,m\}" to get
+       "\{n,m}" in the regexp pattern.
+
+Added                                                  *added-7.4*
+-----
+
+Various syntax, indent and other plugins were added.
+
+Added support for |Lists| and |Dictionaries| in |viminfo|. (Christian
+Brabandt)
+
+Functions:
+       Bitwise functions: |and()|, |or()|, |invert()|, |xor()|.
+
+       Added |luaeval()| function. (Taro Muraoka, Luis Carvalho)
+
+       Added |sha256()| function. (Tyru, Hirohito Higashi)
+
+       Added |wildmenumode()| function. (Christian Brabandt)
+
+       Debugging functions: |screenattr()|, |screenchar()|, |screencol()|, 
+       |screenrow()|. (Simon Ruderich, Bram Moolenaar)
+
+       Added ability to use |Dictionary-function|s for |sort()|ing, via 
+       optional third argument. (Nikolay Pavlov)
+
+       Added special |expand()| argument that expands to the current line 
+       number.
+
+       Made it possible to force |char2nr()| always give unicode codepoints 
+       regardless of current encoding. (Yasuhiro Matsumoto)
+
+       Made it possible for functions generating file list generate |List| 
+       and not NL-separated string. (e.g. |glob()|, |expand()|) (Christian 
+       Brabandt)
+
+       Functions that obtain variables from the specific window, tabpage or 
+       buffer scope dictionary can now return specified default value in 
+       place of empty string in case variable is not found. (|gettabvar()|, 
+       |getwinvar()|, |getbufvar()|) (Shougo Matsushita, Hirohito Higashi)
+
+Autocommands:
+       Added |InsertCharPre| event launched before inserting character. 
+       (Jakson A. Aquino)
+
+       Added |CompleteDone| event launched after finishing completion in 
+       insert mode. (idea by Florian Klein)
+
+       Added |QuitPre| event launched when commands that can either close Vim 
+       or only some window(s) are launched.
+
+       Added |TextChanged| and |TextChangedI| events launched when text is 
+       changed.
+
+Commands:
+       |:syntime| command useful for debugging.
+
+       Made it possible to remove all signs from the current buffer using 
+       |:sign-unplace|. (Christian Brabandt)
+
+       Added |:language| autocompletion. (Dominique Pelle)
+
+       Added more |:command-complete| completion types: |:behave| suboptions, 
+       color schemes, compilers, |:cscope| suboptions, files from 'path', 
+       |:history| suboptions, locale names, |:syntime| suboptions, user 
+       names. (Dominique Pelle)
+
+       Added |:map-nowait| creating mapping which when having lhs that is the 
+       prefix of another mapping’s lhs will not allow Vim to wait for user to 
+       type more characters to resolve ambiguity, forcing Vim to take the 
+       shorter alternative: one with <nowait>.
+
+Options:
+       Made it possible to ignore case when completing: 'wildignorecase'.
+
+       Added ability to delete comment leader when using |J| by `j` flag in 
+       'formatoptions' (|fo-table|). (Lech Lorens)
+
+       Added ability to control indentation inside namespaces: |cino-N|. 
+       (Konstantin Lepa)
+
+       Added ability to control alignment inside `if` condition separately 
+       from alignment inside function arguments: |cino-k|. (Lech Lorens)
+
+Other:
+       Improved support for cmd.exe. (Ben Fritz, Bram Moolenaar)
+
+       Added |v:windowid| variable containing current window number in GUI 
+       Vim. (Christian J. Robinson, Lech Lorens)
+
+       Added rxvt-unicode and SGR mouse support. (Yiding Jia, Hayaki Saito)
+
+
+All changes in 7.4                                             *fixed-7.4*
+------------------
+
+Patch 7.3.001
+Problem:    When editing "src/main.c" and 'path' set to "./proto",
+           ":find e<C-D" shows ./proto/eval.pro instead of eval.pro.
+Solution:   Check for path separator when comparing names. (Nazri Ramliy)
+Files:     src/misc1.c
+
+Patch 7.3.002
+Problem:    ":find" completion doesn't work when halfway an environment
+           variable. (Dominique Pelle)
+Solution:   Only use in-path completion when expanding file names. (Nazri
+           Ramliy)
+Files:     src/ex_docmd.c
+
+Patch 7.3.003
+Problem:    Crash with specific BufWritePost autocmd. (Peter Odding)
+Solution:   Don't free the quickfix title twice. (Lech Lorens)
+Files:     src/quickfix.c
+
+Patch 7.3.004
+Problem:    Crash when using very long regexp. (Peter Odding)
+Solution:   Reset reg_toolong. (Carlo Teubner)
+Files:     src/regexp.c
+
+Patch 7.3.005
+Problem:    Crash when using undotree(). (Christian Brabandt)
+Solution:   Increase the list reference count.  Add a test for undotree()
+           (Lech Lorens)
+Files:     src/eval.c, src/testdir/Makefile, src/testdir/test61.in
+
+Patch 7.3.006
+Problem:    Can't build some multi-byte code with C89.
+Solution:   Move code to after declarations. (Joachim Schmitz)
+Files:     src/mbyte.c, src/spell.c
+
+Patch 7.3.007
+Problem:    Python code defines global "buffer".  Re-implements a grow-array.
+Solution:   Use a grow-array instead of coding the same functionality.  Handle
+           out-of-memory situation properly.
+Files:     src/if_py_both.h
+
+Patch 7.3.008
+Problem:    'cursorbind' is kept in places where 'scrollbind' is reset.
+Solution:   Reset 'cursorbind'.
+Files:     src/buffer.c, src/diff.c, src/ex_cmds.c, src/ex_cmds2.c,
+           src/ex_docmd.c, src/ex_getln.c, src/if_cscope.c, src/macros.h,
+           src/quickfix.c, src/search.c, src/tag.c, src/window.c
+
+Patch 7.3.009
+Problem:    Win32: Crash on Windows when using a bad argument for strftime().
+           (Christian Brabandt)
+Solution:   Use the bad_param_handler(). (Mike Williams)
+Files:     src/os_win32.c
+
+Patch 7.3.010
+Problem:    Mac GUI: Missing break statements.
+Solution:   Add the break statements. (Dominique Pelle)
+Files:     src/gui_mac.c
+
+Patch 7.3.011
+Problem:    X11 clipboard doesn't work in Athena/Motif GUI.  First selection
+           after a shell command doesn't work.
+Solution:   When using the GUI use XtLastTimestampProcessed() instead of
+           changing a property.  (partly by Toni Ronkko)
+           When executing a shell command disown the selection.
+Files:     src/ui.c, src/os_unix.c
+
+Patch 7.3.012
+Problem:    Problems building with MingW.
+Solution:   Adjust the MingW makefiles. (Jon Maken)
+Files:     src/Make_ming.mak, src/GvimExt/Make_ming.mak
+
+Patch 7.3.013
+Problem:    Dynamic loading with Ruby doesn't work for 1.9.2.
+Solution:   Handle rb_str2cstr differently.  Also support dynamic loading on
+           Unix. (Jon Maken)
+Files:     src/if_ruby.c
+
+Patch 7.3.014
+Problem:    Ending a line in a backslash inside an ":append" or ":insert"
+           command in Ex mode doesn't work properly. (Ray Frush)
+Solution:   Halve the number of backslashes, only insert a NUL after an odd
+           number of backslashes.
+Files:     src/ex_getln.c
+
+Patch 7.3.015
+Problem:    Test is using error message that no longer exists.
+Solution:   Change E106 to E121. (Dominique Pelle)
+Files:     src/testdir/test49.vim
+
+Patch 7.3.016
+Problem:    Netbeans doesn't work under Athena.
+Solution:   Support Athena, just like Motif. (Xavier de Gaye)
+Files:     runtime/doc/netbeans.txt, src/gui.c, src/main.c, src/netbeans.c
+
+Patch 7.3.017
+Problem:    smatch reports errors.
+Solution:   Fix the reported errors. (Dominique Pelle)
+Files:     src/spell.c, src/syntax.c
+
+Patch 7.3.018 (after 7.3.012)
+Problem:    Missing argument to windres in MingW makefiles.
+Solution:   Add the argument that was wrapped in the patch. (Jon Maken)
+Files:     src/Make_ming.mak, src/GvimExt/Make_ming.mak
+
+Patch 7.3.019
+Problem:    ":nbstart" can fail silently.
+Solution:   Give an error when netbeans is not supported by the GUI. (Xavier
+           de Gaye)
+Files:     src/netbeans.c
+
+Patch 7.3.020
+Problem:    Cursor position wrong when joining multiple lines and
+           'formatoptions' contains "a". (Moshe Kamensky)
+Solution:   Adjust cursor position for skipped indent. (Carlo Teubner)
+Files:     src/ops.c, src/testdir/test68.in, src/testdir/test68.ok
+
+Patch 7.3.021
+Problem:    Conflict for defining Boolean in Mac header files.
+Solution:   Define NO_X11_INCLUDES. (Rainer Muller)
+Files:     src/os_macosx.m, src/vim.h
+
+Patch 7.3.022
+Problem:    When opening a new window the 'spellcapcheck' option is cleared.
+Solution:   Copy the correct option value. (Christian Brabandt)
+Files:     src/option.c
+
+Patch 7.3.023
+Problem:    External program may hang when it tries to write to the tty.
+Solution:   Don't close the slave tty until after the child exits. (Nikola
+           Knezevic)
+Files:     src/os_unix.c
+
+Patch 7.3.024
+Problem:    Named signs do not use a negative number as intended.
+Solution:   Fix the numbering of named signs. (Xavier de Gaye)
+Files:     src/ex_cmds.c
+
+Patch 7.3.025
+Problem:    ":mksession" does not square brackets escape file name properly.
+Solution:   Improve escaping of file names. (partly by Peter Odding)
+Files:     src/ex_docmd.c
+
+Patch 7.3.026
+Problem:    CTRL-] in a help file doesn't always work. (Tony Mechelynck)
+Solution:   Don't escape special characters. (Carlo Teubner)
+Files:     src/normal.c
+
+Patch 7.3.027
+Problem:    Opening a file on a network share is very slow.
+Solution:   When fixing file name case append "\*" to directory, server and
+           network share names. (David Anderson, John Beckett)
+Files:     src/os_win32.c
+
+Patch 7.3.028 (after 7.3.024)
+Problem:    Signs don't show up. (Charles Campbell)
+Solution:   Don't use negative numbers.  Also assign a number to signs that
+           have a name of all digits to avoid using a sign number twice.
+Files:     src/ex_cmds.c
+
+Patch 7.3.029
+Problem:    ":sort n" sorts lines without a number as number zero. (Beeyawned)
+Solution:   Make lines without a number sort before lines with a number.  Also
+           fix sorting negative numbers.
+Files:     src/ex_cmds.c, src/testdir/test57.in, src/testdir/test57.ok
+
+Patch 7.3.030
+Problem:    Cannot store Dict and List in viminfo file.
+Solution:   Add support for this. (Christian Brabandt)
+Files:     runtime/doc/options.txt, src/eval.c, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+           src/testdir/Makefile, src/testdir/main.aap, src/testdir/test74.in,
+           src/testdir/test74.ok
+
+Patch 7.3.031
+Problem:    Can't pass the X window ID to another application.
+Solution:   Add v:windowid. (Christian J. Robinson, Lech Lorens)
+Files:     runtime/doc/eval.txt, src/eval.c, src/gui.c, src/vim.h,
+           src/os_unix.c
+
+Patch 7.3.032
+Problem:    maparg() doesn't return the flags, such as <buffer>, <script>,
+           <silent>.  These are needed to save and restore a mapping.
+Solution:   Improve maparg(). (also by Christian Brabandt)
+Files:     runtime/doc/eval.txt, src/eval.c, src/getchar.c, src/gui_w48.c,
+           src/message.c, src/proto/getchar.pro, src/proto/message.pro,
+           src/structs.h src/testdir/test75.in, src/testdir/test75.ok
+
+Patch 7.3.033 (after 7.3.032)
+Problem:    Can't build without FEAT_LOCALMAP.
+Solution:   Add an #ifdef. (John Marriott)
+Files:     src/getchar.c
+
+Patch 7.3.034
+Problem:    Win32: may be loading .dll from the wrong directory.
+Solution:   Go to the Vim executable directory when opening a library.
+Files:     src/gui_w32.c, src/if_lua.c, src/if_mzsch.c, src/if_perl.xs,
+           src/if_python.c, src/if_python3.c, src/if_ruby.c, src/mbyte.c,
+           src/os_mswin.c, src/os_win32.c, src/proto/os_win32.pro
+
+Patch 7.3.035 (after 7.3.034)
+Problem:    Stray semicolon after if statement. (Hari G)
+Solution:   Remove the semicolon.
+Files:     src/os_win32.c
+
+Patch 7.3.036
+Problem:    Win32 GUI: When building without menus, the font for dialogs and
+           tab page headers also changes.
+Solution:   Define USE_SYSMENU_FONT always. (Harig G.)
+Files:     src/gui_w32.c
+
+Patch 7.3.037
+Problem:    Compiler warnings for loss of data. (Mike Williams)
+Solution:   Add type casts.
+Files:     src/if_py_both.h, src/getchar.c, src/os_win32.c
+
+Patch 7.3.038
+Problem:    v:windowid isn't set on MS-Windows.
+Solution:   Set it to the window handle. (Chris Sutcliffe)
+Files:     runtime/doc/eval.txt, src/gui_w32.c
+
+Patch 7.3.039
+Problem:    Crash when using skk.vim plugin.
+Solution:   Get length of expression evaluation result only after checking for
+           NULL.  (Noriaki Yagi, Dominique Pelle)
+Files:     src/ex_getln.c
+
+Patch 7.3.040
+Problem:    Comparing strings while ignoring case goes beyond end of the
+           string when there are illegal bytes. (Dominique Pelle)
+Solution:   Explicitly check for illegal bytes.
+Files:     src/mbyte.c
+
+Patch 7.3.041
+Problem:    Compiler warning for accessing mediumVersion. (Tony Mechelynck)
+Solution:   Use the pointer instead of the array itself. (Dominique Pelle)
+Files:     src/version.c
+
+Patch 7.3.042
+Problem:    No spell highlighting when re-using an empty buffer.
+Solution:   Clear the spell checking info only when clearing the options for a
+           buffer. (James Vega)
+Files:     src/buffer.c
+
+Patch 7.3.043
+Problem:    Can't load Ruby dynamically on Unix.
+Solution:   Adjust the configure script. (James Vega)
+Files:     src/Makefile, src/config.h.in, src/configure.in,
+           src/auto/configure, src/if_ruby.c
+
+Patch 7.3.044
+Problem:    The preview window opened by the popup menu is larger than
+           specified with 'previewheight'. (Benjamin Haskell)
+Solution:   Use 'previewheight' if it's set and smaller.
+Files:     src/popupmnu.c
+
+Patch 7.3.045
+Problem:    Compiler warning for uninitialized variable.
+Solution:   Initialize the variable always.
+Files:     src/getchar.c
+
+Patch 7.3.046 (after 7.3.043)
+Problem:    Can't build Ruby on MS-Windows.
+Solution:   Add #ifdef, don't use WIN3264 before including vim.h.
+Files:     src/if_ruby.c
+
+Patch 7.3.047 (after 7.3.032)
+Problem:    Missing makefile updates for test 75.
+Solution:   Update the makefiles.
+Files:     src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+           src/testdir/Makefile, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+Patch 7.3.048
+Problem:    ":earlier 1f" doesn't work after loading undo file.
+Solution:   Set b_u_save_nr_cur when loading an undo file. (Christian
+           Brabandt)
+           Fix only showing time in ":undolist"
+Files:     src/undo.c
+
+Patch 7.3.049
+Problem:    PLT has rebranded their Scheme to Racket.
+Solution:   Add support for Racket 5.x. (Sergey Khorev)
+Files:     src/Make_cyg.mak, src/Make_ming.mak, src/Make_mvc.mak,
+           src/auto/configure, src/configure.in, src/if_mzsch.c
+
+Patch 7.3.050
+Problem:    The link script is clumsy.
+Solution:   Use the --as-needed linker option if available. (Kirill A.
+           Shutemov)
+Files:     src/Makefile, src/auto/configure, src/config.mk.in,
+           src/configure.in, src/link.sh
+
+Patch 7.3.051
+Problem:    Crash when $PATH is empty.
+Solution:   Check for vim_getenv() returning NULL. (Yasuhiro Matsumoto)
+Files:     src/ex_getln.c, src/os_win32.c
+
+Patch 7.3.052
+Problem:    When 'completefunc' opens a new window all kinds of errors follow.
+           (Xavier Deguillard)
+Solution:   When 'completefunc' goes to another window or buffer and when it
+           deletes text abort completion.  Add a test for 'completefunc'.
+Files:     src/edit.c, src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+           src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+           src/testdir/Make_vms.mms, src/testdir/Makefile,
+           src/testdir/test76.in, src/testdir/test76.ok
+
+Patch 7.3.053
+Problem:    complete() function doesn't reset complete direction.  Can't use
+           an empty string in the list of matches.
+Solution:   Set compl_direction to FORWARD.  Add "empty" key to allow empty
+           words. (Kikuchan)
+Files:     src/edit.c
+
+Patch 7.3.054
+Problem:    Can define a user command for :Print, but it doesn't work. (Aaron
+           Thoma)
+Solution:   Let user command :Print overrule the builtin command (Christian
+           Brabandt)  Disallow :X and :Next as a user defined command.
+Files:     src/ex_docmd.c
+
+Patch 7.3.055
+Problem:    Recursively nested lists and dictionaries cause a near-endless
+           loop when comparing them with a copy. (ZyX)
+Solution:   Limit recursiveness in a way that non-recursive structures can
+           still be nested very deep.
+Files:     src/eval.c, src/testdir/test55.in, src/testdir/test55.ok
+
+Patch 7.3.056
+Problem:    "getline" argument in do_cmdline() shadows global.
+Solution:   Rename the argument.
+Files:     src/ex_docmd.c
+
+Patch 7.3.057
+Problem:    Segfault with command line abbreviation. (Randy Morris)
+Solution:   Don't retrigger the abbreviation when abandoning the command line.
+           Continue editing the command line after the error.
+Files:     src/ex_getln.c
+
+Patch 7.3.058
+Problem:    Error "code converter not found" when loading Ruby script.
+Solution:   Load Gem module. (Yasuhiro Matsumoto)
+Files:     src/if_ruby.c
+
+Patch 7.3.059
+Problem:    Netbeans: Problem with recursively handling messages for Athena
+           and Motif.
+Solution:   Call netbeans_parse_messages() in the main loop, like it's done
+           for GTK. (Xavier de Gaye)
+Files:     src/gui_x11.c, src/netbeans.c
+
+Patch 7.3.060
+Problem:    Netbeans: crash when socket is disconnected unexpectedly.
+Solution:   Don't cleanup when a read fails, put a message in the queue and
+           disconnect later. (Xavier de Gaye)
+Files:     src/netbeans.c
+
+Patch 7.3.061
+Problem:    Remote ":drop" does not respect 'autochdir'. (Peter Odding)
+Solution:   Don't restore the directory when 'autochdir' is set. (Benjamin
+           Fritz)
+Files:     src/main.c
+
+Patch 7.3.062
+Problem:    Python doesn't work properly when installed in another directory
+           than expected.
+Solution:   Figure out home directory in configure and use Py_SetPythonHome()
+           at runtime. (Roland Puntaier)
+Files:     src/configure.in, src/auto/configure, src/if_python.c,
+           src/if_python3.c
+
+Patch 7.3.063
+Problem:    Win32: Running a filter command makes Vim lose focus.
+Solution:   Use SW_SHOWMINNOACTIVE instead of SW_SHOWMINIMIZED. (Hong Xu)
+Files:     src/os_win32.c
+
+Patch 7.3.064
+Problem:    Win32: ":dis +" shows nothing, but "+p does insert text.
+Solution:   Display the * register, since that's what will be inserted.
+           (Christian Brabandt)
+Files:     src/globals.h, src/ops.c
+
+Patch 7.3.065
+Problem:    Can't get current line number in a source file.
+Solution:   Add the <slnum> item, similar to <sfile>.
+Files:     src/ex_docmd.c
+
+Patch 7.3.066
+Problem:    Crash when changing to another window while in a :vimgrep command.
+           (Christian Brabandt)
+Solution:   When wiping out the dummy before, remove it from aucmd_win.
+Files:     src/quickfix.c
+
+Patch 7.3.067 (after 7.3.058)
+Problem:    Ruby: Init_prelude is not always available.
+Solution:   Remove use of Init_prelude. (Yasuhiro Matsumoto)
+Files:     src/if_ruby.c
+
+Patch 7.3.068
+Problem:    Using freed memory when doing ":saveas" and an autocommand sets
+           'autochdir'. (Kevin Klement)
+Solution:   Get the value of fname again after executing autocommands.
+Files:     src/ex_cmds.c
+
+Patch 7.3.069
+Problem:    GTK: pressing Enter in inputdialog() doesn't work like clicking OK
+           as documented.
+Solution:   call gtk_entry_set_activates_default(). (Britton Kerin)
+Files:     src/gui_gtk.c
+
+Patch 7.3.070
+Problem:    Can set environment variables in the sandbox, could be abused.
+Solution:   Disallow it.
+Files:     src/eval.c
+
+Patch 7.3.071
+Problem:    Editing a file in a window that's in diff mode resets 'diff'
+           but not cursor binding.
+Solution:   Reset cursor binding in two more places.
+Files:     src/quickfix.c, src/option.c
+
+Patch 7.3.072
+Problem:    Can't complete file names while ignoring case.
+Solution:   Add 'wildignorecase'.
+Files:     src/ex_docmd.c, src/ex_getln.c, src/misc1.c, src/option.c,
+           src/option.h, src/vim.h, src/runtime/options.txt
+
+Patch 7.3.073
+Problem:    Double free memory when netbeans command follows DETACH.
+Solution:   Only free the node when owned. (Xavier de Gaye)
+Files:     src/netbeans.c
+
+Patch 7.3.074
+Problem:    Can't use the "+ register like "* for yank and put.
+Solution:   Add "unnamedplus" to the 'clipboard' option. (Ivan Krasilnikov)
+Files:     runtime/doc/options.txt, src/eval.c, src/globals.h, src/ops.c,
+           src/option.c
+
+Patch 7.3.075 (after 7.3.072)
+Problem:    Missing part of 'wildignorecase'
+Solution:   Also adjust expand()
+Files:     src/eval.c
+
+Patch 7.3.076
+Problem:    Clang warnings for dead code.
+Solution:   Remove it. (Carlo Teubner)
+Files:     src/gui_gtk.c, src/if_ruby.c, src/misc2.c, src/netbeans.c,
+           src/spell.c
+
+Patch 7.3.077
+Problem:    When updating crypt of swapfile fails there is no error message.
+           (Carlo Teubner)
+Solution:   Add the error message.
+Files:     src/memline.c
+
+Patch 7.3.078
+Problem:    Warning for unused variable.
+Solution:   Adjust #ifdefs.
+Files:     src/ops.c
+
+Patch 7.3.079
+Problem:    Duplicate lines in makefile.
+Solution:   Remove the lines. (Hong Xu)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.080
+Problem:    Spell doesn't work on VMS.
+Solution:   Use different file names. (Zoltan Bartos, Zoltan Arpadffy)
+Files:     src/spell.c
+
+Patch 7.3.081
+Problem:    Non-printable characters in 'statusline' cause trouble. (ZyX)
+Solution:   Use transstr(). (partly by Caio Ariede)
+Files:     src/screen.c
+
+Patch 7.3.082
+Problem:    Leaking file descriptor when hostname doesn't exist.
+Solution:   Remove old debugging lines.
+Files:     src/netbeans.c
+
+Patch 7.3.083
+Problem:    When a read() or write() is interrupted by a signal it fails.
+Solution:   Add read_eintr() and write_eintr().
+Files:     src/fileio.c, src/proto/fileio.pro, src/memfile.c, src/memline.c,
+           src/os_unix.c, src/undo.c, src/vim.h
+
+Patch 7.3.084
+Problem:    When splitting the window, the new one scrolls with the cursor at
+           the top.
+Solution:   Compute w_fraction before setting the new height.
+Files:     src/window.c
+
+Patch 7.3.085 (after 7.3.083)
+Problem:    Inconsistency with preproc symbols.  void * computation.
+Solution:   Include vimio.h from vim.h.  Add type cast.
+Files:     src/eval.c, src/ex_cmds.c, src/ex_cmds2.c, src/fileio.c,
+           src/if_cscope.c, src/if_sniff.c, src/main.c, src/memfile.c,
+           src/memline.c, src/netbeans.c, src/os_msdos.c, src/os_mswin.c,
+           src/os_win16.c, src/os_win32.c, src/spell.c, src/tag.c,
+           src/undo.c, src/vim.h
+
+Patch 7.3.086
+Problem:    When using a mapping with an expression and there was no count,
+           v:count has the value of the previous command. (ZyX)
+Solution:   Also set v:count and v:count1 before getting the character that
+           could be a command or a count.
+Files:     src/normal.c
+
+Patch 7.3.087
+Problem:    EINTR is not always defined.
+Solution:   Include errno.h in vim.h.
+Files:     src/if_cscope.c, src/if_tcl.c, src/integration.c, src/memline.c,
+           src/os_mswin.c, src/os_win16.c, src/os_win32.c, src/vim.h,
+           src/workshop.c
+
+Patch 7.3.088
+Problem:    Ruby can't load Gems sometimes, may cause a crash.
+Solution:   Undefine off_t.  Use ruby_process_options(). (Yasuhiro Matsumoto)
+Files:     src/if_ruby.c
+
+Patch 7.3.089
+Problem:    Compiler warning on 64 bit MS-Windows.
+Solution:   Add type cast. (Mike Williams)
+Files:     src/netbeans.c
+
+Patch 7.3.090
+Problem:    Wrong help text for Cscope.
+Solution:   Adjust the help text for "t". (Dominique Pelle)
+Files:     src/if_cscope.c
+
+Patch 7.3.091
+Problem:    "vim -w foo" writes special key codes for removed escape
+           sequences. (Josh Triplett)
+Solution:   Don't write K_IGNORE codes.
+Files:     src/getchar.c, src/misc1.c, src/term.c, src/vim.h
+
+Patch 7.3.092
+Problem:    Resizing the window when exiting.
+Solution:   Don't resize when exiting.
+Files:     src/term.c
+
+Patch 7.3.093
+Problem:    New DLL dependencies in MingW with gcc 4.5.0.
+Solution:   Add STATIC_STDCPLUS, LDFLAGS and split up WINDRES. (Guopeng Wen)
+Files:     src/GvimExt/Make_ming.mak, src/Make_ming.mak
+
+Patch 7.3.094
+Problem:    Using abs() requires type cast to int.
+Solution:   Use labs() so that the value remains long. (Hong Xu)
+Files:     src/screen.c
+
+Patch 7.3.095
+Problem:    Win32: In Chinese tear-off menu doesn't work. (Weasley)
+Solution:   Use menu_name_equal().  (Alex Jakushev)
+Files:     src/menu.c
+
+Patch 7.3.096
+Problem:    "gvim -nb" is not interruptible.  Leaking file descriptor on
+           netbeans connection error.
+Solution:   Check for CTRL-C typed.  Free file descriptor.  (Xavier de Gaye)
+Files:     src/netbeans.c
+
+Patch 7.3.097
+Problem:    Using ":call" inside "if 0" does not see that a function returns a
+           Dict and gives error for "." as string concatenation.
+Solution:   Use eval0() to skip over the expression.  (Yasuhiro Matsumoto)
+Files:     src/eval.c
+
+Patch 7.3.098
+Problem:    Function that ignores error still causes called_emsg to be set.
+           E.g. when expand() fails the status line is disabled.
+Solution:   Move check for emsg_not_now() up. (James Vega)
+Files:     src/message.c
+
+Patch 7.3.099
+Problem:    Crash when splitting a window with zero height. (Yukihiro
+           Nakadaira)
+Solution:   Don't set the fraction in a window with zero height.
+Files:     src/window.c
+
+Patch 7.3.100
+Problem:    When using :normal v:count isn't set.
+Solution:   Call normal_cmd() with toplevel set to TRUE.
+Files:     src/ex_docmd.c
+
+Patch 7.3.101
+Problem:    ino_t defined with wrong size.
+Solution:   Move including auto/config.h before other includes. (Marius
+           Geminas)
+Files:     src/if_ruby.c, src/if_lua.c
+
+Patch 7.3.102
+Problem:    When using ":make", typing the next command and then getting the
+           "reload" prompt the next command is (partly) eaten by the reload
+           prompt.
+Solution:   Accept ':' as a special character at the reload prompt to accept
+           the default choice and execute the command.
+Files:     src/eval.c, src/fileio.c, src/gui.c, src/gui_xmdlg.c,
+           src/memline.c, src/message.c, src/proto/message.pro,
+           src/gui_athena.c, src/gui_gtk.c, src/gui_mac.c, src/gui_motif.c,
+           src/gui_photon.c, src/gui_w16.c, src/gui_w32.c, src/os_mswin.c
+           src/proto/gui_athena.pro, src/proto/gui_gtk.pro,
+           src/proto/gui_mac.pro, src/proto/gui_motif.pro,
+           src/proto/gui_photon.pro, src/proto/gui_w16.pro,
+           src/proto/gui_w32.pro
+
+Patch 7.3.103
+Problem:    Changing 'fileformat' and then using ":w" in an empty file sets
+           the 'modified' option.
+Solution:   In unchanged() don't ignore 'ff' for an empty file.
+Files:     src/misc1.c, src/option.c, src/proto/option.pro, src/undo.c
+
+Patch 7.3.104
+Problem:    Conceal: using Tab for cchar causes problems. (ZyX)
+Solution:   Do not accept a control character for cchar.
+Files:     src/syntax.c
+
+Patch 7.3.105
+Problem:    Can't get the value of "b:changedtick" with getbufvar().
+Solution:   Make it work. (Christian Brabandt)
+Files:     src/eval.c
+
+Patch 7.3.106
+Problem:    When 'cursorbind' is set another window may scroll unexpectedly
+           when 'scrollbind' is also set. (Xavier Wang)
+Solution:   Don't call update_topline() if 'scrollbind' is set.
+Files:     src/move.c
+
+Patch 7.3.107
+Problem:    Year number for :undolist can be confused with month or day.
+Solution:   Change "%y" to "%Y".
+Files:     src/undo.c
+
+Patch 7.3.108
+Problem:    Useless check for NULL when calling vim_free().
+Solution:   Remove the check. (Dominique Pelle)
+Files:     src/eval.c, src/ex_cmds.c, src/os_win32.c
+
+Patch 7.3.109
+Problem:    Processing new Esperanto spell file fails and crashes Vim.
+           (Dominique Pelle)
+Solution:   When running out of memory give an error.  Handle '?' in
+           COMPOUNDRULE properly.
+Files:     src/spell.c
+
+Patch 7.3.110
+Problem:    The "nbsp" item in 'listchars' isn't used for ":list".
+Solution:   Make it work. (Christian Brabandt)
+Files:     src/message.c
+
+Patch 7.3.111 (after 7.3.100)
+Problem:    Executing a :normal command in 'statusline' evaluation causes the
+           cursor to move. (Dominique Pelle)
+Solution:   When updating the cursor for 'cursorbind' allow the cursor beyond
+           the end of the line.  When evaluating 'statusline' temporarily
+           reset 'cursorbind'.
+Files:     src/move.c, src/screen.c
+
+Patch 7.3.112
+Problem:    Setting 'statusline' to "%!'asdf%' reads uninitialized memory.
+Solution:   Check for NUL after %.
+Files:     src/buffer.c
+
+Patch 7.3.113
+Problem:    Windows: Fall back directory for creating temp file is wrong.
+Solution:   Use "." instead of empty string. (Hong Xu)
+Files:     src/fileio.c
+
+Patch 7.3.114
+Problem:    Potential problem in initialization when giving an error message
+           early.
+Solution:   Initialize 'verbosefile' empty. (Ben Schmidt)
+Files:     src/option.h
+
+Patch 7.3.115
+Problem:    Vim can crash when tmpnam() returns NULL.
+Solution:   Check for NULL. (Hong Xu)
+Files:     src/fileio.c
+
+Patch 7.3.116
+Problem:    'cursorline' is displayed too short when there are concealed
+           characters and 'list' is set.  (Dennis Preiser)
+Solution:   Check for 'cursorline' when 'list' is set. (Christian Brabandt)
+Files:     src/screen.c
+
+Patch 7.3.117
+Problem:    On some systems --as-needed does not work, because the "tinfo"
+           library is included indirectly from "ncurses". (Charles Campbell)
+Solution:   In configure prefer using "tinfo" instead of "ncurses".
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.118
+Problem:    Ruby uses SIGVTALARM which makes Vim exit. (Alec Tica)
+Solution:   Ignore SIGVTALARM. (Dominique Pelle)
+Files:     src/os_unix.c
+
+Patch 7.3.119
+Problem:    Build problem on Mac. (Nicholas Stallard)
+Solution:   Use "extern" instead of "EXTERN" for p_vfile.
+Files:     src/option.h
+
+Patch 7.3.120
+Problem:    The message for an existing swap file is too long to fit in a 25
+           line terminal.
+Solution:   Make the message shorter. (Chad Miller)
+Files:     src/memline.c
+
+Patch 7.3.121
+Problem:    Complicated 'statusline' causes a crash. (Christian Brabandt)
+Solution:   Check that the number of items is not too big.
+Files:     src/buffer.c
+
+Patch 7.3.122
+Problem:    Having auto/config.mk in the repository causes problems.
+Solution:   Remove auto/config.mk from the distribution.  In the toplevel
+           Makefile copy it from the "dist" file.
+Files:     Makefile, src/Makefile, src/auto/config.mk
+
+Patch 7.3.123
+Problem:    ml_get error when executing register being recorded into, deleting
+           lines and 'conceallevel' is set. (ZyX)
+Solution:   Don't redraw a line for concealing when it doesn't exist.
+Files:     src/main.c
+
+Patch 7.3.124
+Problem:    When writing a file in binary mode it may be missing the final EOL
+           if a file previously read was missing the EOL. (Kevin Goodsell)
+Solution:   Move the write_no_eol_lnum into the buffer struct.
+Files:     src/structs.h, src/fileio.c, src/globals.h, src/os_unix.c
+
+Patch 7.3.125
+Problem:    MSVC: Problem with quotes in link argument.
+Solution:   Escape backslashes and quotes. (Weasley)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.126
+Problem:    Compiler warning for signed pointer.
+Solution:   Use unsigned int argument for sscanf().
+Files:     src/blowfish.c
+
+Patch 7.3.127
+Problem:    Compiler complains about comma.
+Solution:   Remove comma after last enum element.
+Files:     src/ex_cmds2.c
+
+Patch 7.3.128
+Problem:    Another compiler warning for signed pointer.
+Solution:   Use unsigned int argument for sscanf().
+Files:     src/mark.c
+
+Patch 7.3.129
+Problem:    Using integer like a boolean.
+Solution:   Nicer check for integer being non-zero.
+Files:     src/tag.c
+
+Patch 7.3.130
+Problem:    Variable misplaced in #ifdef.
+Solution:   Move clipboard_event_time outside of #ifdef.
+Files:     src/gui_gtk_x11.c
+
+Patch 7.3.131
+Problem:    Including errno.h too often.
+Solution:   Don't include errno.h in Unix header file.
+Files:     src/os_unix.h
+
+Patch 7.3.132
+Problem:    C++ style comments.
+Solution:   Change to C comments.
+Files:     src/if_python3.c
+
+Patch 7.3.133
+Problem:    When using encryption it's not clear what method was used.
+Solution:   In the file message show "blowfish" when using blowfish.
+Files:     src/fileio.c
+
+Patch 7.3.134
+Problem:    Drag-n-drop doesn't work in KDE Dolphin.
+Solution:   Add GDK_ACTION_MOVE flag. (Florian Degner)
+Files:     src/gui_gtk_x11.c
+
+Patch 7.3.135
+Problem:    When there is no previous substitute pattern, the previous search
+           pattern is used.  The other way around doesn't work.
+Solution:   When there is no previous search pattern, use the previous
+           substitute pattern if possible. (Christian Brabandt)
+Files:     src/search.c
+
+Patch 7.3.136
+Problem:    Duplicate include of assert.h.
+Solution:   Remove it.
+Files:     src/if_cscope.c
+
+Patch 7.3.137 (after 7.3.091)
+Problem:    When 'lazyredraw' is set the screen may not be updated. (Ivan
+           Krasilnikov)
+Solution:   Call update_screen() before waiting for input.
+Files:     src/misc1.c, src/getchar.c
+
+Patch 7.3.138
+Problem:    ":com" changes the multi-byte text of :echo. (Dimitar Dimitrov)
+Solution:   Search for K_SPECIAL as a byte, not a character. (Ben Schmidt)
+Files:     src/ex_docmd.c
+
+Patch 7.3.139 (after 7.3.137)
+Problem:    When 'lazyredraw' is set ":ver" output can't be read.
+Solution:   Don't redraw the screen when at a prompt or command line.
+Files:     src/getchar.c, src/message.c, src/misc1.c
+
+Patch 7.3.140
+Problem:    Crash when drawing the "$" at end-of-line for list mode just after
+           the window border and 'cursorline' is set.
+Solution:   Don't check for 'cursorline'. (Quentin Carbonneaux)
+Files:     src/screen.c
+
+Patch 7.3.141
+Problem:    When a key code is not set get a confusing error message.
+Solution:   Change the error message to say the key code is not set.
+Files:     src/option.c, runtime/doc/options.txt
+
+Patch 7.3.142
+Problem:    Python stdout doesn't have a flush() method, causing an import to
+           fail.
+Solution:   Add a dummy flush() method. (Tobias Columbus)
+Files:     src/if_py_both.h
+
+Patch 7.3.143
+Problem:    Memfile is not tested sufficiently.  Looking up blocks in a
+           memfile is slow when there are many blocks.
+Solution:   Add high level test and unittest.  Adjust the number of hash
+           buckets to the number of blocks.  (Ivan Krasilnikov)
+Files:     Filelist, src/Makefile, src/main.c, src/memfile.c,
+           src/memfile_test.c src/structs.h src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mak,
+           src/testdir/Makefile, src/testdir/test77.in, src/testdir/test77.ok
+
+Patch 7.3.144
+Problem:    Crash with ":python help(dir)". (Kearn Holliday)
+Solution:   Fix the way the type is set on objects. (Tobias Columbus)
+Files:     src/if_python.c
+
+Patch 7.3.145 (after 7.3.144)
+Problem:    Can't build with Python dynamically loading.
+Solution:   Add dll_PyType_Ready.
+Files:     src/if_python.c
+
+Patch 7.3.146
+Problem:    It's possible to assign to a read-only member of a dict.
+           It's possible to create a global variable "0". (ZyX)
+            It's possible to add a v: variable with ":let v:.name = 1".
+Solution:   Add check for dict item being read-only.
+           Check the name of g: variables.
+           Disallow adding v: variables.
+Files:     src/eval.c
+
+Patch 7.3.147 (after 7.3.143)
+Problem:    Can't build on HP-UX.
+Solution:   Remove an unnecessary backslash. (John Marriott)
+Files:     src/Makefile
+
+Patch 7.3.148
+Problem:    A syntax file with a huge number of items or clusters causes weird
+           behavior, a hang or a crash. (Yukihiro Nakadaira)
+Solution:   Check running out of IDs. (partly by Ben Schmidt)
+Files:     src/syntax.c
+
+Patch 7.3.149
+Problem:    The cursor disappears after the processing of the 'setDot'
+           netbeans command when vim runs in a terminal.
+Solution:   Show the cursor after a screen update. (Xavier de Gaye)
+Files:     src/netbeans.c
+
+Patch 7.3.150
+Problem:    readline() does not return the last line when the NL is missing.
+           (Hong Xu)
+Solution:   When at the end of the file Also check for a previous line.
+Files:     src/eval.c
+
+Patch 7.3.151 (after 7.3.074)
+Problem:    When "unnamedplus" is in 'clipboard' the selection is sometimes
+           also copied to the star register.
+Solution:   Avoid copy to the star register when undesired. (James Vega)
+Files:     src/ops.c
+
+Patch 7.3.152
+Problem:    Xxd does not check for errors from library functions.
+Solution:   Add error checks. (Florian Zumbiehl)
+Files:     src/xxd/xxd.c
+
+Patch 7.3.153 (after 7.3.152)
+Problem:    Compiler warning for ambiguous else, missing prototype.
+Solution:   Add braces. (Dominique Pelle)  Add prototype for die().
+Files:     src/xxd/xxd.c
+
+Patch 7.3.154 (after 7.3.148)
+Problem:    Can't compile with tiny features. (Tony Mechelynck)
+Solution:   Move #define outside of #ifdef.
+Files:     src/syntax.c
+
+Patch 7.3.155
+Problem:    Crash when using map(), filter() and remove() on v:. (ZyX)
+            Also for extend(). (Yukihiro Nakadaira)
+Solution:   Mark v: as locked.  Also correct locking error messages.
+Files:     src/eval.c
+
+Patch 7.3.156
+Problem:    Tty names possibly left unterminated.
+Solution:   Use vim_strncpy() instead of strncpy().
+Files:     src/pty.c
+
+Patch 7.3.157
+Problem:    Superfluous assignment.
+Solution:   Remove assignment.
+Files:     src/misc1.c
+
+Patch 7.3.158
+Problem:    Might use uninitialized memory in C indenting.
+Solution:   Init arrays to empty.
+Files:     src/misc1.c
+
+Patch 7.3.159
+Problem:    Using uninitialized pointer when out of memory.
+Solution:   Check for NULL return value.
+Files:     src/mbyte.c
+
+Patch 7.3.160
+Problem:    Unsafe string copying.
+Solution:   Use vim_strncpy() instead of strcpy().  Use vim_strcat() instead
+           of strcat().
+Files:     src/buffer.c, src/ex_docmd.c, src/hardcopy.c, src/menu.c,
+           src/misc1.c, src/misc2.c, src/proto/misc2.pro, src/netbeans.c,
+           src/os_unix.c, src/spell.c, src/syntax.c, src/tag.c
+
+Patch 7.3.161
+Problem:    Items on the stack may be too big.
+Solution:   Make items static or allocate them.
+Files:     src/eval.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c,
+           src/fileio.c, src/hardcopy.c, src/quickfix.c, src/main.c,
+           src/netbeans.c, src/spell.c, src/tag.c, src/vim.h, src/xxd/xxd.c
+
+Patch 7.3.162
+Problem:    No error message when assigning to a list with an index out of
+           range. (Yukihiro Nakadaira)
+Solution:   Add the error message.
+Files:     src/eval.c
+
+Patch 7.3.163
+Problem:    For the default of 'shellpipe' "mksh" and "pdksh" are not
+           recognized.
+Solution:   Recognize these shell names.
+Files:     src/option.c
+
+Patch 7.3.164
+Problem:    C-indenting: a preprocessor statement confuses detection of a
+           function declaration.
+Solution:   Ignore preprocessor lines. (Lech Lorens)  Also recognize the style
+           to put a comma before the argument name.
+Files:     src/misc1.c, testdir/test3.in, testdir/test3.ok
+
+Patch 7.3.165
+Problem:    ":find" completion does not escape spaces in a directory name.
+           (Isz)
+Solution:   Add backslashes for EXPAND_FILES_IN_PATH. (Carlo Teubner)
+Files:     src/ex_getln.c
+
+Patch 7.3.166
+Problem:    Buffer on the stack may be too big
+Solution:   Allocate the space.
+Files:     src/option.c
+
+Patch 7.3.167
+Problem:    When using the internal grep QuickFixCmdPost is not triggered.
+           (Yukihiro Nakadaira)
+Solution:   Change the place where autocommands are triggered.
+Files:     src/quickfix.c
+
+Patch 7.3.168
+Problem:    When the second argument of input() contains a CR the text up to
+           that is used without asking the user. (Yasuhiro Matsumoto)
+Solution:   Change CR, NL and ESC in the text to a space.
+Files:     src/getchar.c
+
+Patch 7.3.169
+Problem:    Freeing memory already freed, warning from static code analyzer.
+Solution:   Initialize pointers to NULL, correct use of "mustfree". (partly by
+           Dominique Pelle)
+Files:     src/mis1.c
+
+Patch 7.3.170
+Problem:    VMS Makefile for testing was not updated for test77.
+Solution:   Add test77 to the Makefile.
+Files:     src/testdir/Make_vms.mms
+
+Patch 7.3.171
+Problem:    When the clipboard isn't supported: ":yank*" gives a confusing
+           error message.
+Solution:   Specifically mention that the register name is invalid.
+           (Jean-Rene David)
+Files:     runtime/doc/change.txt, src/ex_docmd.c, src/globals.h
+
+Patch 7.3.172
+Problem:    MS-Windows: rename() might delete the file if the name differs but
+           it's actually the same file.
+Solution:   Use the file handle to check if it's the same file. (Yukihiro
+           Nakadaira)
+Files:     src/if_cscope.c, src/fileio.c, src/os_win32.c,
+           src/proto/os_win32.pro, src/vim.h
+
+Patch 7.3.173
+Problem:    After using setqflist() to make the quickfix list empty ":cwindow"
+           may open the window anyway.  Also after ":vimgrep".
+Solution:   Correctly check whether the list is empty. (Ingo Karkat)
+Files:     src/quickfix.c
+
+Patch 7.3.174
+Problem:    When Exuberant ctags binary is exctags it's not found.
+Solution:   Add configure check for exctags. (Hong Xu)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.175
+Problem:    When 'colorcolumn' is set locally to a window, ":new" opens a
+           window with the same highlighting but 'colorcolumn' is empty.
+           (Tyru)
+Solution:   Call check_colorcolumn() after clearing and copying options.
+           (Christian Brabandt)
+Files:     src/buffer.c
+
+Patch 7.3.176
+Problem:    Ruby linking doesn't work properly on Mac OS X.
+Solution:   Fix the configure check for Ruby. (Bjorn Winckler)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.177
+Problem:    MS-Windows: mkdir() doesn't work properly when 'encoding' is
+           "utf-8".
+Solution:   Convert to utf-16. (Yukihiro Nakadaira)
+Files:     src/os_win32.c, src/os_win32.h, src/proto/os_win32.pro
+
+Patch 7.3.178
+Problem:    C-indent doesn't handle code right after { correctly.
+Solution:   Fix detecting unterminated line. (Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.179
+Problem:    C-indent doesn't handle colon in string correctly.
+Solution:   Skip the string. (Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.180
+Problem:    When both a middle part of 'comments' matches and an end part, the
+           middle part was used erroneously.
+Solution:   After finding the middle part match continue looking for a better
+           end part match. (partly by Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.181
+Problem:    When repeating the insert of CTRL-V or a digraph the display may
+           not be updated correctly.
+Solution:   Only call edit_unputchar() after edit_putchar(). (Lech Lorens)
+Files:     src/edit.c
+
+Patch 7.3.182 (after 7.3.180)
+Problem:    Compiler warning for uninitialized variable.
+Solution:   Add dummy initializer.
+Files:     src/misc1.c
+
+Patch 7.3.183 (after 7.3.174)
+Problem:    When Exuberant ctags binary is exuberant-ctags it's not found.
+Solution:   Add configure check for exuberant-ctags.
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.184
+Problem:    Static code analysis errors in riscOS.
+Solution:   Make buffer size bigger. (Dominique Pelle)
+Files:     src/gui_riscos.c
+
+Patch 7.3.185
+Problem:    ":windo g/pattern/q" closes windows and reports "N more lines".
+           (Tim Chase)
+Solution:   Remember what buffer ":global" started in. (Jean-Rene David)
+Files:     src/ex_cmds.c
+
+Patch 7.3.186
+Problem:    When 'clipboard' contains "unnamed" or "unnamedplus" the value of
+           v:register is wrong for operators without a specific register.
+Solution:   Adjust the register according to 'clipboard'. (Ingo Karkat)
+Files:     src/normal.c
+
+Patch 7.3.187
+Problem:    The RISC OS port has obvious errors and is not being maintained.
+Solution:   Remove the RISC OS files and code.
+Files:     src/ascii.h, src/eval.c, src/ex_cmds.c, src/ex_cmds2.c,
+           src/ex_docmd.c, src/fileio.c, src/globals.h, src/gui.c, src/gui.h,
+           src/main.c, src/memfile.c, src/memline.c, src/misc1.c,
+           src/proto.h, src/quickfix.c, src/search.c, src/structs.h,
+           src/term.c, src/termlib.c, src/version.c, src/vim.h,
+           src/gui_riscos.h, src/os_riscos.h, src/gui_riscos.c,
+           src/os_riscos.c, runtime/doc/os_risc.txt
+
+Patch 7.3.188
+Problem:    More RISC OS files to remove.
+Solution:   Remove them.  Update the file list.
+Files:     src/proto/gui_riscos.pro, src/proto/os_riscos.pro, Filelist
+
+Patch 7.3.189 (after 7.3.186)
+Problem:    Can't build without +clipboard feature. (Christian Ebert)
+Solution:   Add the missing #ifdef.
+Files:     src/normal.c
+
+Patch 7.3.190
+Problem:    When there is a "containedin" syntax argument highlighting may be
+           wrong. (Radek)
+Solution:   Reset current_next_list. (Ben Schmidt)
+Files:     src/syntax.c
+
+Patch 7.3.191
+Problem:    Still some RISC OS stuff to remove.
+Solution:   Remove files and lines. (Hong Xu)
+           Remove the 'osfiletype' option code.
+Files:     README_extra.txt, src/Make_ro.mak, src/INSTALL, src/Makefile,
+           src/buffer.c, src/eval.c, src/feature.h, src/option.c,
+           src/option.h, src/structs.h, src/version.c, src/pty.c, Filelist
+
+Patch 7.3.192
+Problem:    Ex command ":s/ \?/ /g" splits multi-byte characters into bytes.
+           (Dominique Pelle)
+Solution:   Advance over whole character instead of one byte.
+Files:     src/ex_cmds.c
+
+Patch 7.3.193
+Problem:    In the command line window ":close" doesn't work properly. (Tony
+           Mechelynck)
+Solution:   Use Ctrl_C instead of K_IGNORE for cmdwin_result. (Jean-Rene
+           David)
+Files:     src/ex_docmd.c, src/ex_getln.c
+
+Patch 7.3.194
+Problem:    When "b" is a symlink to directory "a", resolve("b/") doesn't
+           result in "a/".  (ZyX)
+Solution:   Remove the trailing slash. (Jean-Rene David)
+Files:     src/eval.c
+
+Patch 7.3.195
+Problem:    "} else" causes following lines to be indented too much. (Rouben
+           Rostamian)
+Solution:   Better detection for the "else". (Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.196
+Problem:    Can't intercept a character that is going to be inserted.
+Solution:   Add the InsertCharPre autocommand event. (Jakson A. Aquino)
+Files:     runtime/doc/autocmd.txt, runtime/doc/eval.txt,
+           runtime/doc/map.txt, src/edit.c, src/eval.c, src/fileio.c,
+           src/vim.h
+
+Patch 7.3.197
+Problem:    When a QuickfixCmdPost event removes all errors, Vim still tries
+           to jump to the first error, resulting in E42.
+Solution:   Get the number of error after the autocmd event. (Mike Lundy)
+Files:     src/quickfix.c
+
+Patch 7.3.198
+Problem:    No completion for ":lang".
+Solution:   Get locales to complete from. (Dominique Pelle)
+Files:     src/eval.c, src/ex_cmds2.c, src/ex_getln.c,
+           src/proto/ex_cmds2.pro, src/proto/ex_getln.pro, src/vim.h
+
+Patch 7.3.199
+Problem:    MS-Windows: Compilation problem of OLE with MingW compiler.
+Solution:   Put #ifdef around declarations. (Guopeng Wen)
+Files:     src/if_ole.h
+
+Patch 7.3.200 (after 7.3.198)
+Problem:    CTRL-D doesn't complete :lang.
+Solution:   Add the missing part of the change. (Dominique Pelle)
+Files:     src/ex_docmd.c
+
+Patch 7.3.201 (after 7.3.195)
+Problem:    "} else" still causes following lines to be indented too much.
+Solution:   Better detection for the "else" block. (Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.202
+Problem:    Cannot influence the indent inside a namespace.
+Solution:   Add the "N" 'cino' parameter. (Konstantin Lepa)
+Files:     runtime/doc/indent.txt, src/misc1.c, src/testdir/test3.in,
+           src/testdir/test3.ok
+
+Patch 7.3.203
+Problem:    MS-Windows: Can't run an external command without a console window.
+Solution:   Support ":!start /b cmd". (Xaizek)
+Files:     runtime/doc/os_win32.txt, src/os_win32.c
+
+Patch 7.3.204 (after 7.3.201)
+Problem:    Compiler warning.
+Solution:   Add type cast. (Mike Williams)
+Files:     src/misc1.c
+
+Patch 7.3.205
+Problem:    Syntax "extend" doesn't work correctly.
+Solution:   Avoid calling check_state_ends() recursively (Ben Schmidt)
+Files:     src/syntax.c
+
+Patch 7.3.206
+Problem:    64bit MS-Windows compiler warning.
+Solution:   Use HandleToLong() instead of type cast. (Mike Williams)
+Files:     src/gui_w32.c
+
+Patch 7.3.207
+Problem:    Can't compile with MSVC with pentium4 and 64 bit.
+Solution:   Only use SSE2 for 32 bit. (Mike Williams)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.208
+Problem:    Early terminated if statement.
+Solution:   Remove the semicolon. (Lech Lorens)
+Files:     src/gui_mac.c
+
+Patch 7.3.209
+Problem:    MSVC Install instructions point to wrong batch file.
+Solution:   Add a batch file for use with MSVC 10.
+Files:     src/msvc2010.bat, src/INSTALLpc.txt, Filelist
+
+Patch 7.3.210
+Problem:    Can't always find the file when using cscope.
+Solution:   Add the 'cscoperelative' option. (Raghavendra D Prabhu)
+Files:     runtime/doc/if_cscop.txt, runtime/doc/options.txt,
+           src/if_cscope.c
+
+Patch 7.3.211 (after 7.3.210)
+Problem:    Compiler warning.
+Solution:   Add type cast.
+Files:     src/if_cscope.c
+
+Patch 7.3.212
+Problem:    With Python 3.2 ":py3" fails.
+Solution:   Move PyEval_InitThreads() to after Py_Initialize(). (Roland
+           Puntaier)  Check abiflags in configure. (Andreas Behr)
+Files:     src/if_python3.c, src/auto/configure, src/configure.in
+
+Patch 7.3.213
+Problem:    Javascript object literal is not indented correctly.
+Solution:   Make a special case for when "J1" is in 'cino'. (Luc Deschenaux)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.214
+Problem:    The text displayed by ":z-" isn't exactly like old Vi.
+Solution:   Add one to the start line number. (ChangZhuo Chen)
+Files:     src/ex_cmds.c
+
+Patch 7.3.215 (after 7.3.210)
+Problem:    Wrong file names in previous patch. (Toothpik)
+Solution:   Include the option changes.
+Files:     src/option.c, src/option.h
+
+Patch 7.3.216
+Problem:    When recovering a file a range of lines is missing. (Charles Jie)
+Solution:   Reset the index when advancing to the next pointer block.  Add a
+           test to verify recovery works.
+Files:     src/memline.c, src/testdir/test78.in, src/testdir/test78.ok,
+           src/testdir/Makefile, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+Patch 7.3.217
+Problem:    Inside an "if" a ":wincmd" causes problems.
+Solution:   When skipping commands let ":wincmd" skip over its argument.
+Files:     src/ex_docmd.c
+
+Patch 7.3.218 (after 7.3.212)
+Problem:    Tiny configuration problem with Python 3.
+Solution:   Add abiflags in one more place. (Andreas Behr)
+Files:     src/auto/configure, src/configure.in
+
+Patch 7.3.219
+Problem:    Can't compile with GTK on Mac.
+Solution:   Add some #ifdef trickery. (Ben Schmidt)
+Files:     src/os_mac_conv.c, src/os_macosx.m, src/vim.h
+
+Patch 7.3.220
+Problem:    Python 3: vim.error is a 'str' instead of an 'Exception' object,
+           so 'except' or 'raise' it causes a 'SystemError' exception.
+           Buffer objects do not support slice assignment.
+           When exchanging text between Vim and Python, multibyte texts become
+           garbage or cause Unicode Exceptions, etc.
+           'py3file' tries to read in the file as Unicode, sometimes causes
+           UnicodeDecodeException
+Solution:   Fix the problems. (lilydjwg)
+Files:     src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+Patch 7.3.221
+Problem:    Text from the clipboard is sometimes handled as linewise, but not
+           consistently.
+Solution:   Assume the text is linewise when it ends in a CR or NL.
+Files:     src/gui_gtk_x11.c, src/gui_mac.c, src/ops.c, src/os_msdos.c,
+           src/os_mswin.c, src/os_qnx.c, src/ui.c
+
+Patch 7.3.222
+Problem:    Warning for building GvimExt.
+Solution:   Comment-out the DESCRIPTION line. (Mike Williams)
+Files:     src/GvimExt/gvimext.def, src/GvimExt/gvimext_ming.def
+
+Patch 7.3.223
+Problem:    MingW cross compilation doesn't work with tiny features.
+Solution:   Move acp_to_enc(), enc_to_utf16() and utf16_to_enc() outside of
+           "#ifdef CLIPBOARD".  Fix typo in makefile.
+Files:     src/Make_ming.mak, src/os_mswin.c
+
+Patch 7.3.224
+Problem:    Can't pass dict to sort function.
+Solution:   Add the optional {dict} argument to sort(). (ZyX)
+Files:     runtime/doc/eval.txt, src/eval.c
+
+Patch 7.3.225
+Problem:    Using "\n" in a substitute inside ":s" does not result in a line
+           break.
+Solution:   Change behavior inside vim_regexec_nl().   Add tests.  (Motoya
+           Kurotsu)
+Files:     src/regexp.c, src/testdir/test79.in, src/testdir/test79.ok,
+           src/testdir/test80.in, src/testdir/test80.ok,
+           src/testdir/Makefile, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+Patch 7.3.226
+Problem:    On a 64 bit system "syn sync fromstart" is very slow.  (Bjorn
+           Steinbrink)
+Solution:   Store the state when starting to parse from the first line.
+Files:     src/syntax.c
+
+Patch 7.3.227 (after 7.3.221)
+Problem:    Mac OS doesn't have the linewise clipboard fix.
+Solution:   Also change the Mac OS file. (Bjorn Winckler)
+Files:     src/os_macosx.m
+
+Patch 7.3.228
+Problem:    "2gj" does not always move to the correct position.
+Solution:   Get length of line after moving to a next line. (James Vega)
+Files:     src/normal.c
+
+Patch 7.3.229
+Problem:    Using fork() makes gvim crash on Mac when build with
+           CoreFoundation.
+Solution:   Disallow fork() when __APPLE__ is defined. (Hisashi T Fujinaka)
+Files:     src/gui.c
+
+Patch 7.3.230
+Problem:    ":wundo" and ":rundo" don't unescape their argument.  (Aaron
+           Thoma)
+Solution:   Use FILE1 instead of XFILE.
+Files:     src/ex_cmds.h
+
+Patch 7.3.231
+Problem:    Runtime file patches failed.
+Solution:   Redo the patches made against the patched files instead of the
+           files in the mercurial repository.
+Files:     runtime/doc/indent.txt, runtime/doc/os_win32.txt
+
+Patch 7.3.232
+Problem:    Python doesn't compile without +multi_byte
+Solution:   Use "latin1" when MULTI_BYTE is not defined.
+Files:     src/if_py_both.h
+
+Patch 7.3.233
+Problem:    ":scriptnames" and ":breaklist" show long file names.
+Solution:   Shorten to use "~/" when possible. (Jean-Rene David)
+Files:     src/ex_cmds2.c
+
+Patch 7.3.234
+Problem:    With GTK menu may be popping down.
+Solution:   Use event time instead of GDK_CURRENT_TIME. (Hong Xu)
+Files:     src/gui.c, src/gui.h, src/gui_gtk.c, src/gui_gtk_x11.c
+
+Patch 7.3.235
+Problem:    ";" gets stuck on a "t" command, it's not useful.
+Solution:   Add the ';' flag in 'cpo'. (Christian Brabandt)
+Files:     runtime/doc/motion.txt, runtime/doc/options.txt, src/option.h,
+           src/search.c src/testdir/test81.in, src/testdir/test81.ok,
+           src/testdir/Makefile, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+Patch 7.3.236 (after 7.3.232)
+Problem:    Python 3 doesn't compile without +multi_byte
+Solution:   Use "latin1" when MULTI_BYTE is not defined. (lilydjwg)
+Files:     src/if_python3.c
+
+Patch 7.3.237
+Problem:    "filetype" completion doesn't work on Windows. (Yue Wu)
+Solution:   Don't use a glob pattern for the directories, use a list of
+           directories. (Dominique Pelle)
+Files:     src/ex_getln.c
+
+Patch 7.3.238
+Problem:    Compiler warning for conversion.
+Solution:   Add type cast. (Mike Williams)
+Files:     src/ex_getln.c
+
+Patch 7.3.239
+Problem:    Python corrects the cursor column without taking 'virtualedit'
+           into account. (lilydjwg)
+Solution:   Call check_cursor_col_win().
+Files:     src/if_py_both.h, src/mbyte.c, src/misc2.c, src/normal.c,
+           src/proto/mbyte.pro, src/proto/misc2.pro
+
+Patch 7.3.240
+Problem:    External commands can't use pipes on MS-Windows.
+Solution:   Implement pipes and use them when 'shelltemp' isn't set. (Vincent
+           Berthoux)
+Files:     src/eval.c, src/ex_cmds.c, src/misc2.c, src/os_unix.c,
+           src/os_win32.c, src/proto/misc2.pro, src/ui.c
+
+Patch 7.3.241
+Problem:    Using CTRL-R CTRL-W on the command line may insert only part of
+           the word.
+Solution:   Use the cursor position instead of assuming it is at the end of
+           the command. (Tyru)
+Files:     src/ex_getln.c
+
+Patch 7.3.242
+Problem:    Illegal memory access in after_pathsep().
+Solution:   Check that the pointer is not at the start of the file name.
+           (Dominique Pelle)
+Files:     src/misc2.c
+
+Patch 7.3.243
+Problem:    Illegal memory access in readline().
+Solution:   Swap the conditions. (Dominique Pelle)
+Files:     src/eval.c
+
+Patch 7.3.244
+Problem:    MS-Windows: Build problem with old compiler. (John Beckett)
+Solution:   Only use HandleToLong() when available. (Mike Williams)
+Files:     src/gui_w32.c
+
+Patch 7.3.245
+Problem:    Python 3.2 libraries not correctly detected.
+Solution:   Add the suffix to the library name. (Niclas Zeising)
+Files:     src/auto/configure, src/configure.in
+
+Patch 7.3.246 (after 7.3.235)
+Problem:    Repeating "f4" in "4444" skips one 4.
+Solution:   Check the t_cmd flag. (Christian Brabandt)
+Files:     src/search.c
+
+Patch 7.3.247
+Problem:    Running tests changes the users viminfo file.  Test for patch
+           7.3.246 missing.
+Solution:   Add "nviminfo" to the 'viminfo' option.  Include the test.
+Files:     src/testdir/test78.in, src/testdir/test81.in
+
+Patch 7.3.248
+Problem:    PC Install instructions missing install instructions.
+Solution:   Step-by-step explanation. (Michael Soyka)
+Files:     src/INSTALLpc.txt
+
+Patch 7.3.249
+Problem:    Wrong indenting for array initializer.
+Solution:   Detect '}' in a better way. (Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.250
+Problem:    Python: Errors in Unicode characters not handled nicely.
+Solution:   Add the surrogateescape error handler. (lilydjwg)
+Files:     src/if_python3.c
+
+Patch 7.3.251
+Problem:    "gH<Del>" deletes the current line, except when it's the last
+           line.
+Solution:   Set the "include" flag to indicate the last line is to be deleted.
+Files:     src/normal.c, src/ops.c
+
+Patch 7.3.252 (after 7.3.247)
+Problem:    Tests fail. (David Northfield)
+Solution:   Add missing update for .ok file.
+Files:     src/testdir/test81.ok
+
+Patch 7.3.253
+Problem:    "echo 'abc' > ''" returns 0 or 1, depending on 'ignorecase'.
+           Checks in mb_strnicmp() for illegal and truncated bytes are
+           wrong.  Should not assume that byte length is equal before case
+           folding.
+Solution:   Add utf_safe_read_char_adv() and utf_strnicmp(). Add a test for
+           this. (Ivan Krasilnikov)
+Files:     src/mbyte.c src/testdir/test82.in, src/testdir/test82.ok,
+           src/testdir/Makefile, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+Patch 7.3.254
+Problem:    The coladd field is not reset when setting the line number for a
+           ":call" command.
+Solution:   Reset it.
+Files:     src/eval.c
+
+Patch 7.3.255
+Problem:    When editing a file such as "File[2010-08-15].vim" an E16 error is
+           given. (Manuel Stol)
+Solution:   Don't give an error for failing to compile the regexp.
+Files:     src/ex_docmd.c, src/misc1.c, src/vim.h
+
+Patch 7.3.256
+Problem:    Javascript indenting not sufficiently tested.
+Solution:   Add more tests. (Luc Deschenaux)  Mark the lines that are indented
+           wrong.
+Files:     src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.257
+Problem:    Not all completions are available to user commands.
+Solution:   Add "color", "compiler", "file_in_path" and "locale". (Dominique
+           Pelle)
+Files:     src/ex_docmd.c, runtime/doc/map.txt
+
+Patch 7.3.258
+Problem:    MS-Windows: The edit with existing vim context menu entries can be
+           unwanted.
+Solution:   Let a registry entry disable them. (Jerome Vuarand)
+Files:     src/GvimExt/gvimext.cpp
+
+Patch 7.3.259
+Problem:    Equivalence classes only work for latin characters.
+Solution:   Add the Unicode equivalence characters. (Dominique Pelle)
+Files:     runtime/doc/pattern.txt, src/regexp.c, src/testdir/test44.in,
+           src/testdir/test44.ok
+
+Patch 7.3.260
+Problem:    CursorHold triggers on an incomplete mapping. (Will Gray)
+Solution:   Don't trigger CursorHold when there is typeahead.
+Files:     src/fileio.c
+
+Patch 7.3.261
+Problem:    G++ error message erroneously recognized as error.
+Solution:   Ignore "In file included from" line also when it ends in a colon.
+           (Fernando Castillo)
+Files:     src/option.h
+
+Patch 7.3.262
+Problem:    Photon code style doesn't match Vim style.
+Solution:   Clean up some of it.  (Elias Diem)
+Files:     src/gui_photon.c
+
+Patch 7.3.263
+Problem:    Perl and Tcl have a few code style problems.
+Solution:   Clean it up.  (Elias Diem)
+Files:     src/if_perl.xs, src/if_tcl.c
+
+Patch 7.3.264
+Problem:    When the current directory name contains wildcard characters, such
+           as "foo[with]bar", the tags file can't be found.  (Jeremy
+           Erickson)
+Solution:   When searching for matching files also match without expanding
+           wildcards.  This is a bit of a hack.
+Files:     src/vim.h, src/misc1.c, src/misc2.c
+
+Patch 7.3.265
+Problem:    When storing a pattern in search history there is no proper check
+           for the separator character.
+Solution:   Pass the separator character to in_history(). (Taro Muraoka)
+Files:     src/ex_getln.c
+
+Patch 7.3.266
+Problem:    In Gvim with iBus typing space in Insert mode doesn't work.
+Solution:   Clear xim_expected_char after checking it.
+Files:     src/mbyte.c
+
+Patch 7.3.267
+Problem:    Ruby on Mac OS X 10.7 may crash.
+Solution:   Avoid alloc(0). (Bjorn Winckler)
+Files:     src/if_ruby.c
+
+Patch 7.3.268
+Problem:    Vim freezes when executing an external command with zsh.
+Solution:   Use O_NOCTTY both in the master and slave. (Bjorn Winckler)
+Files:     src/os_unix.c
+
+Patch 7.3.269
+Problem:    'shellcmdflag' only works with one flag. 
+Solution:   Split into multiple arguments. (Gary Johnson)
+Files:     src/os_unix.c
+
+Patch 7.3.270
+Problem:    Illegal memory access.
+Solution:   Swap conditions. (Dominique Pelle)
+Files:     src/ops.c
+
+Patch 7.3.271
+Problem:    Code not following Vim coding style.
+Solution:   Fix the style. (Elias Diem)
+Files:     src/gui_photon.c
+
+Patch 7.3.272
+Problem:    ":put =list" does not add an empty line for a trailing empty
+           item.
+Solution:   Add a trailing NL when turning a list into a string.
+Files:     src/eval.c
+
+Patch 7.3.273
+Problem:    A BOM in an error file is seen as text. (Aleksey Baibarin)
+Solution:   Remove the BOM from the text before evaluating. (idea by Christian
+           Brabandt)
+Files:     src/quickfix.c, src/mbyte.c, src/proto/mbyte.pro,
+           src/testdir/test10.in
+
+Patch 7.3.274
+Problem:    With concealed characters tabs do not have the right size.
+Solution:   Use VCOL_HLC instead of vcol. (Eiichi Sato)
+Files:     src/screen.c
+
+Patch 7.3.275
+Problem:    MS-Windows: When using a black background some screen updates
+           cause the window to flicker.
+Solution:   Add WS_CLIPCHILDREN to CreateWindow().  (René Aguirre)
+Files:     src/gui_w32.c
+
+Patch 7.3.276
+Problem:    GvimExt sets $LANG in the wrong way.
+Solution:   Save the environment and use it for gvim. (Yasuhiro Matsumoto)
+Files:     src/GvimExt/gvimext.cpp
+
+Patch 7.3.277
+Problem:    MS-Windows: some characters do not show in dialogs.
+Solution:   Use the wide methods when available. (Yanwei Jia)
+Files:     src/gui_w32.c, src/gui_w48.c, src/os_mswin.c, src/os_win32.c,
+           src/os_win32.h
+
+Patch 7.3.278
+Problem:    Passing the file name to open in VisVim doesn't work.
+Solution:   Adjust the index and check for end of buffer. (Jiri Sedlak)
+Files:     src/VisVim/Commands.cpp
+
+Patch 7.3.279
+Problem:    With GTK, when gvim is full-screen and a tab is opened and using a
+           specific monitor configuration the window is too big.
+Solution:   Adjust the window size like on MS-Windows. (Yukihiro Nakadaira)
+Files:     src/gui.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro
+
+Patch 7.3.280
+Problem:    ":lmake" does not update the quickfix window title.
+Solution:   Update the title. (Lech Lorens)
+Files:     src/quickfix.c, src/testdir/test10.in, src/testdir/test10.ok
+
+Patch 7.3.281
+Problem:    After using "expand('%:8')" the buffer name is changed.
+Solution:   Make a copy of the file name before shortening it.
+Files:     src/eval.c
+
+Patch 7.3.282
+Problem:    When using input() and :echo in a loop the displayed text is
+           incorrect. (Benjamin Fritz)
+Solution:   Only restore the cursor position when there is a command line.
+           (Ben Schmidt)
+Files:     src/ex_getln.c
+
+Patch 7.3.283
+Problem:    An expression mapping with a multi-byte character containing a
+           0x80 byte gets messed up. (ZyX)
+Solution:   Unescape the expression before evaluating it (Yukihiro Nakadaira)
+Files:     src/getchar.c
+
+Patch 7.3.284
+Problem:    The str2special() function doesn't handle multi-byte characters
+           properly.
+Solution:   Recognize multi-byte characters. (partly by Vladimir Vichniakov)
+Files:     src/getchar.c, src/message.c, src/misc2.c
+
+Patch 7.3.285 (after 7.3.284)
+Problem:    Mapping <Char-123> no longer works.
+Solution:   Properly check for "char-".  Add a test for it.
+Files:     src/misc2.c, src/testdir/test75.in, src/testdir/test75.ok
+
+Patch 7.3.286
+Problem:    Crash when using "zd" on a large number of folds. (Sam King)
+Solution:   Recompute pointer after reallocating array.  Move fewer entries
+           when making room.
+Files:     src/fold.c
+
+Patch 7.3.287
+Problem:    Can't compile with MSVC and tiny options.
+Solution:   Move variables and #ifdefs. (Sergey Khorev)
+Files:     src/os_win32.c
+
+Patch 7.3.288
+Problem:    has('python') may give an error message for not being able to load
+           the library after using python3.
+Solution:   Only give the error when the verbose argument is true.
+Files:     src/if_python.c, src/if_python3.c
+
+Patch 7.3.289
+Problem:    Complete function isn't called when the leader changed.
+Solution:   Call ins_compl_restart() when the leader changed.  (Taro Muraoka)
+Files:     src/edit.c
+
+Patch 7.3.290
+Problem:    When a BufWriteCmd autocommand resets 'modified' this doesn't
+           change older buffer states to be marked as 'modified' like
+           ":write" does.  (Yukihiro Nakadaira)
+Solution:   When the BufWriteCmd resets 'modified' then adjust the undo
+           information like ":write" does.
+Files:     src/fileio.c
+
+Patch 7.3.291
+Problem:    Configure doesn't work properly with Python3.
+Solution:   Put -ldl before $LDFLAGS. Add PY3_NO_RTLD_GLOBAL. (Roland
+           Puntaier)
+Files:     src/config.h.in, src/auto/configure, src/configure.in
+
+Patch 7.3.292
+Problem:    Crash when using fold markers and selecting a visual block that
+           includes a folded line and goes to end of line. (Sam Lidder)
+Solution:   Check for the column to be MAXCOL. (James Vega)
+Files:     src/screen.c
+
+Patch 7.3.293
+Problem:    MSVC compiler has a problem with non-ASCII characters.
+Solution:   Avoid non-ASCII characters. (Hong Xu)
+Files:     src/ascii.h, src/spell.c
+
+Patch 7.3.294 (after 7.3.289)
+Problem:    Patch 289 causes more problems than it solves.
+Solution:   Revert the patch until a better solution is found.
+Files:     src/edit.c
+
+Patch 7.3.295
+Problem:    When filtering text with an external command Vim may not read all
+           the output.
+Solution:   When select() is interrupted loop and try again. (James Vega)
+Files:     src/os_unix.c
+
+Patch 7.3.296
+Problem:    When writing to an external command a zombie process may be left
+           behind.
+Solution:   Wait on the process. (James Vega)
+Files:     src/os_unix.c
+
+Patch 7.3.297
+Problem:    Can't load Perl 5.14 dynamically.
+Solution:   Add code in #ifdefs. (Charles Cooper)
+Files:     if_perl.xs
+
+Patch 7.3.298
+Problem:    Built-in colors are different from rgb.txt.
+Solution:   Adjust the color values. (Benjamin Haskell)
+Files:     src/gui_photon.c, src/gui_w48.c
+
+Patch 7.3.299
+Problem:    Source code not in Vim style.
+Solution:   Adjust the style. (Elias Diem)
+Files:     src/gui_photon.c
+
+Patch 7.3.300
+Problem:    Python doesn't parse multi-byte argument correctly.
+Solution:   Use "t" instead of "s". (lilydjwg)
+Files:     src/if_py_both.h
+
+Patch 7.3.301
+Problem:    When 'smartindent' and 'copyindent' are set a Tab is used even
+           though 'expandtab' is set.
+Solution:   Do not insert Tabs. Add a test. (Christian Brabandt)
+Files:     src/misc1.c, src/testdir/test19.in, src/testdir/test19.ok
+
+Patch 7.3.302 (after 7.3.301)
+Problem:    Test 19 fails without 'smartindent' and +eval.
+Solution:   Don't use ":exe". Source small.vim.
+Files:     src/testdir/test19.in
+
+Patch 7.3.303 (after 7.3.296)
+Problem:    Compilation error.
+Solution:   Correct return type from int to pid_t. (Danek Duvall)
+Files:     src/os_unix.c
+
+Patch 7.3.304
+Problem:    Strawberry Perl doesn't work on MS-Windows.
+Solution:   Use xsubpp if needed. (Yasuhiro Matsumoto)
+Files:     src/Make_ming.mak, src/Make_mvc.mak
+
+Patch 7.3.305
+Problem:    Auto-loading a function while editing the command line causes
+           scrolling up the display.
+Solution:   Don't set msg_scroll when defining a function and the user is not
+           typing. (Yasuhiro Matsumoto)
+Files:     src/eval.c
+
+Patch 7.3.306
+Problem:    When closing a window there is a chance that deleting a scrollbar
+           triggers a GUI resize, which uses the window while it is not in a
+           valid state.
+Solution:   Set the buffer pointer to NULL to be able to detect the invalid
+           situation.  Fix a few places that used the buffer pointer
+           incorrectly.
+Files:     src/buffer.c, src/ex_cmds.c, src/term.c, src/window.c
+
+Patch 7.3.307
+Problem:    Python 3 doesn't support slice assignment.
+Solution:   Implement slices. (Brett Overesch, Roland Puntaier)
+Files:     src/if_python3.c
+
+Patch 7.3.308
+Problem:    Writing to 'verbosefile' has problems, e.g. for :highlight.
+Solution:   Do not use a separate verbose_write() function but write with the
+           same code that does redirecting. (Yasuhiro Matsumoto)
+Files:     src/message.c
+
+Patch 7.3.309 (after 7.3.307)
+Problem:    Warnings for pointer types.
+Solution:   Change PySliceObject to PyObject.
+Files:     src/if_python3.c
+
+Patch 7.3.310
+Problem:    Code not following Vim style.
+Solution:   Fix the style. (Elias Diem)
+Files:     src/gui_photon.c
+
+Patch 7.3.311 (replaces 7.3.289)
+Problem:    Complete function isn't called when the leader changed.
+Solution:   Allow the complete function to return a dictionary with a flag
+           that indicates ins_compl_restart() is to be called when the leader
+           changes. (Taro Muraoka)
+Files:     runtime/insert.txt, src/edit.c, src/eval.c, src/proto/eval.pro
+
+Patch 7.3.312 (after 7.3.306)
+Problem:    Can't compile with tiny features.
+Solution:   Add #ifdef around win_valid().
+Files:     src/buffer.c
+
+Patch 7.3.313 (after 7.3.307)
+Problem:    One more warning when compiling with dynamic Python 3.
+Solution:   Change PySliceObject to PyObject.
+Files:     src/if_python3.c
+
+Patch 7.3.314 (after 7.3.304)
+Problem:    Missing parenthesis.
+Solution:   Add it. (Benjamin R. Haskell)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.315
+Problem:    Opening a window before forking causes problems for GTK.
+Solution:   Fork first, create the window in the child and report back to the
+           parent process whether it worked.  If successful the parent exits,
+           if unsuccessful the child exits and the parent continues in the
+           terminal. (Tim Starling)
+Files:     src/gui.c
+
+Patch 7.3.316 (after 7.3.306)
+Problem:    Crash when 'colorcolumn' is set and closing buffer.
+Solution:   Check for w_buffer to be NULL. (Yasuhiro Matsumoto)
+Files:     src/option.c
+
+Patch 7.3.317
+Problem:    Calling debug.debug() in Lua may cause Vim to hang.
+Solution:   Add a better debug method. (Rob Hoelz, Luis Carvalho)
+Files:     src/if_lua.c
+
+Patch 7.3.318
+Problem:    "C" on the last line deletes that line if it's blank.
+Solution:   Only delete the last line for a delete operation. (James Vega)
+Files:     src/ops.c
+
+Patch 7.3.319 (after 7.3.311)
+Problem:    Redobuff doesn't always include changes of the completion leader.
+Solution:   Insert backspaces as needed. (idea by Taro Muraoka)
+Files:     src/edit.c
+
+Patch 7.3.320
+Problem:    When a 0xa0 character is in a sourced file the error message for
+           unrecognized command does not show the problem.
+Solution:   Display 0xa0 as <a0>.
+Files:     src/ex_docmd.c
+
+Patch 7.3.321
+Problem:    Code not following Vim style.
+Solution:   Fix the style. (Elias Diem)
+Files:     src/os_qnx.c
+
+Patch 7.3.322
+Problem:    #ifdef for PDP_RETVAL doesn't work, INT_PTR can be a typedef.
+Solution:   Check the MSC version and 64 bit flags. (Sergiu Dotenco)
+Files:     src/os_mswin.c
+
+Patch 7.3.323
+Problem:    The default 'errorformat' does not ignore some "included from"
+           lines.
+Solution:   Add a few more patterns. (Ben Boeckel)
+Files:     src/option.h
+
+Patch 7.3.324 (after 7.3.237)
+Problem:    Completion for ":compiler" shows color scheme names.
+Solution:   Fix the directory name. (James Vega)
+Files:     src/ex_getln.c
+
+Patch 7.3.325
+Problem:    A duplicated function argument gives an internal error.
+Solution:   Give a proper error message. (based on patch by Tyru)
+Files:     src/eval.c
+
+Patch 7.3.326
+Problem:    MingW 4.6 no longer supports the -mno-cygwin option.
+Solution:   Split the Cygwin and MingW makefiles. (Matsushita Shougo)
+Files:     src/GvimExt/Make_cyg.mak, src/GvimExt/Make_ming.mak,
+           src/Make_cyg.mak, src/Make_ming.mak, src/xxd/Make_ming.mak,
+           Filelist
+
+Patch 7.3.327
+Problem:    When jumping to a help tag a closed fold doesn't open.
+Solution:   Save and restore KeyTyped. (Yasuhiro Matsumoto)
+Files:     src/ex_cmds.c
+
+Patch 7.3.328
+Problem:    When command line wraps the cursor may be displayed wrong when
+           there are multi-byte characters.
+Solution:   Position the cursor before drawing the text. (Yasuhiro Matsumoto)
+Files:     src/ex_getln.c
+
+Patch 7.3.329
+Problem:    When skipping over code from ":for" to ":endfor" get an error for
+           calling a dict function. (Yasuhiro Matsumoto)
+Solution:   Ignore errors when skipping over :call command.
+Files:     src/ex_docmd.c, src/eval.c
+
+Patch 7.3.330
+Problem:    When longjmp() is invoked if the X server gives an error the state
+           is not properly restored.
+Solution:   Reset vgetc_busy. (Yukihiro Nakadaira)
+Files:     src/main.c
+
+Patch 7.3.331
+Problem:    "vit" selects wrong text when a tag name starts with the same text
+           as an outer tag name. (Ben Fritz)
+Solution:   Add "\>" to the pattern to check for word boundary.
+Files:     src/search.c
+
+Patch 7.3.332 (after 7.3.202)
+Problem:    Indent after "public:" is not increased in C++ code. (Lech Lorens)
+Solution:   Check for namespace after the regular checks. (partly by Martin
+           Gieseking)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.333
+Problem:    Using "." to repeat a Visual delete counts the size in bytes, not
+           characters.  (Connor Lane Smith)
+Solution:   Store the virtual column numbers instead of byte positions.
+Files:     src/normal.c
+
+Patch 7.3.334
+Problem:    Latest MingW about XSUBPP referencing itself. (Gongqian Li)
+Solution:   Rename the first use to XSUBPPTRY.
+Files:     src/Make_ming.mak
+
+Patch 7.3.335
+Problem:    When 'imdisable' is reset from an autocommand in Insert mode it
+           doesn't take effect.
+Solution:   Call im_set_active() in Insert mode. (Taro Muraoka)
+Files:     src/option.c
+
+Patch 7.3.336
+Problem:    When a tags file specifies an encoding different from 'enc' it
+           may hang and using a pattern doesn't work.
+Solution:   Convert the whole line.  Continue reading the header after the
+           SORT tag.  Add test83. (Yukihiro Nakadaira)
+Files:     src/tag.c, src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+           src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+           src/testdir/Make_vms.mms, src/testdir/Makefile,
+           src/testdir/test83-tags2, src/testdir/test83-tags3,
+           src/testdir/test83.in, src/testdir/test83.ok
+
+Patch 7.3.337 (after 7.3.295)
+Problem:    Screen doesn't update after resizing the xterm until a character
+           is typed.
+Solution:   When the select call is interrupted check do_resize. (Taylor
+           Hedberg)
+Files:     src/os_unix.c
+
+Patch 7.3.338
+Problem:    Using getchar() in an expression mapping doesn't work well.
+Solution:   Don't save and restore the typeahead. (James Vega)
+Files:     src/getchar.c, src/testdir/test34.ok
+
+Patch 7.3.339
+Problem:    "make shadow" doesn't link all test files.
+Solution:   Add a line in Makefile and Filelist.
+Files:     src/Makefile, Filelist
+
+Patch 7.3.340
+Problem:    When 'verbosefile' is set ftplugof.vim can give an error.
+Solution:   Only remove filetypeplugin autocommands when they exist. (Yasuhiro
+           Matsumoto)
+Files:     runtime/ftplugof.vim
+
+Patch 7.3.341
+Problem:    Local help files are only listed in help.txt, not in translated
+           help files.
+Solution:   Also find translated help files. (Yasuhiro Matsumoto)
+Files:     src/ex_cmds.c
+
+Patch 7.3.342
+Problem:    Code not in Vim style.
+Solution:   Fix the style. (Elias Diem)
+Files:     src/os_amiga.c, src/os_mac_conv.c, src/os_win16.c
+
+Patch 7.3.343
+Problem:    No mouse support for urxvt.
+Solution:   Implement urxvt mouse support, also for > 252 columns.  (Yiding
+           Jia)
+Files:     src/feature.h, src/keymap.h, src/option.h, src/os_unix.c,
+           src/term.c, src/version.c
+
+Patch 7.3.344
+Problem:    Problem with GUI startup related to XInitThreads.
+Solution:   Use read() and write() instead of fputs() and fread(). (James
+           Vega)
+Files:     src/gui.c
+
+Patch 7.3.345
+Problem:    When switching language with ":lang" the window title doesn't
+           change until later.
+Solution:   Update the window title right away. (Dominique Pelle)
+Files:     src/ex_cmds2.c
+
+Patch 7.3.346
+Problem:    It's hard to test netbeans commands.
+Solution:   Process netbeans commands after :sleep. (Xavier de Gaye)
+Files:     runtime/doc/netbeans.txt, src/ex_docmd.c, src/netbeans.c
+
+Patch 7.3.347
+Problem:    When dropping text from a browser on Vim it receives HTML even
+           though "html" is excluded from 'clipboard'. (Andrei Avk)
+Solution:   Fix the condition for TARGET_HTML.
+Files:     src/gui_gtk_x11.c
+
+Patch 7.3.348
+Problem:    "call range(1, 947948399)" causes a crash. (ZyX)
+Solution:   Avoid a loop in the out of memory message.
+Files:     src/misc2.c
+
+Patch 7.3.349
+Problem:    When running out of memory during startup trying to open a
+           swapfile will loop forever.
+Solution:   Let findswapname() set dirp to NULL if out of memory.
+Files:     src/memline.c
+
+Patch 7.3.350
+Problem:    Block of code after ":lua << EOF" may not work. (Paul Isambert)
+Solution:   Recognize the ":lua" command, skip to EOF.
+Files:     src/eval.c
+
+Patch 7.3.351
+Problem:    Text formatting uses start of insert position when it should not.
+           (Peter Wagenaar)
+Solution:   Do not use Insstart when intentionally formatting.
+Files:     src/edit.c
+
+Patch 7.3.352
+Problem:    When completing methods dict functions and script-local functions
+           get in the way.
+Solution:   Sort function names starting with "<" to the end. (Yasuhiro
+           Matsumoto)
+Files:     src/ex_getln.c
+
+Patch 7.3.353 (after 7.3.343)
+Problem:    Missing part of the urxvt patch.
+Solution:   Add the change in term.c
+Files:     src/term.c
+
+Patch 7.3.354
+Problem:    ":set backspace+=eol" doesn't work when 'backspace' has a
+           backwards compatible value of 2.
+Solution:   Convert the number to a string. (Hirohito Higashi)
+Files:     src/option.c
+
+Patch 7.3.355
+Problem:    GTK warnings when using netrw.vim. (Ivan Krasilnikov)
+Solution:   Do not remove the beval event handler twice.
+Files:     src/option.c
+
+Patch 7.3.356
+Problem:    Using "o" with 'cindent' set may freeze Vim. (lolilolicon)
+Solution:   Skip over {} correctly. (Hari G)
+Files:     src/misc1.c
+
+Patch 7.3.357
+Problem:    Compiler warning in MS-Windows console build.
+Solution:   Adjust return type of PrintHookProc(). (Mike Williams)
+Files:     src/os_mswin.c
+
+Patch 7.3.358 (after 7.3.353)
+Problem:    Mouse support doesn't work properly.
+Solution:   Add HMT_URXVT. (lilydjwg, James McCoy)
+Files:     src/term.c
+
+Patch 7.3.359
+Problem:    Command line completion shows dict functions.
+Solution:   Skip dict functions for completion. (Yasuhiro Matsumoto)
+Files:     src/eval.c
+
+Patch 7.3.360
+Problem:    Interrupting the load of an autoload function may cause a crash.
+Solution:   Do not use the hashitem when not valid. (Yukihiro Nakadaira)
+Files:     src/eval.c
+
+Patch 7.3.361
+Problem:    Accessing memory after it is freed when EXITFREE is defined.
+Solution:   Don't access curwin when firstwin is NULL. (Dominique Pelle)
+Files:     src/buffer.c
+
+Patch 7.3.362
+Problem:    ml_get error when using ":g" with folded lines.
+Solution:   Adjust the line number for changed_lines(). (Christian Brabandt)
+Files:     src/ex_cmds.c
+
+Patch 7.3.363
+Problem:    C indenting is wrong after #endif followed by a semicolon.
+Solution:   Add special handling for a semicolon in a line by itself. (Lech
+           Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.364 (after 7.3.353)
+Problem:    Can't compile on HP-UX. (John Marriott)
+Solution:   Only use TTYM_URXVT when it is defined.
+Files:     src/term.c
+
+Patch 7.3.365
+Problem:    Crash when using a large Unicode character in a file that has
+           syntax highlighting. (ngollan)
+Solution:   Check for going past the end of the utf tables. (Dominique Pelle)
+Files:     src/mbyte.c
+
+Patch 7.3.366
+Problem:    A tags file with an extremely long name causes errors.
+Solution:   Ignore tags that are too long. (Arno Renevier)
+Files:     src/tag.c
+
+Patch 7.3.367
+Problem:    :wundo and :rundo use a wrong checksum.
+Solution:   Include the last line when computing the hash. (Christian Brabandt)
+Files:     src/undo.c
+
+Patch 7.3.368
+Problem:    Gcc complains about redefining _FORTIFY_SOURCE.
+Solution:   Undefine it before redefining it.
+Files:     src/Makefile, src/configure.in, src/auto/configure
+
+Patch 7.3.369
+Problem:    When compiled with Gnome get an error message when using --help.
+Solution:   Don't fork. (Ivan Krasilnikov)
+Files:     src/main.c
+
+Patch 7.3.370
+Problem:    Compiler warns for unused variable in Lua interface.
+Solution:   Remove the variable.
+Files:     src/if_lua.c
+
+Patch 7.3.371
+Problem:    Crash in autocomplete. (Greg Weber)
+Solution:   Check not going over allocated buffer size.
+Files:     src/misc2.c
+
+Patch 7.3.372
+Problem:    When using a command line mapping to <Up> with file name
+           completion to go one directory up, 'wildchar' is inserted.
+           (Yasuhiro Matsumoto)
+Solution:   Set the KeyTyped flag.
+Files:     src/ex_getln.c
+
+Patch 7.3.373 (after 7.3.366)
+Problem:    A tags file with an extremely long name may cause an infinite loop.
+Solution:   When encountering a long name switch to linear search.
+Files:     src/tag.c
+
+Patch 7.3.374
+Problem:    ++encoding does not work properly.
+Solution:   Recognize ++encoding before ++enc. (Charles Cooper)
+Files:     src/ex_docmd.c
+
+Patch 7.3.375
+Problem:    Duplicate return statement.
+Solution:   Remove the superfluous one. (Dominique Pelle)
+Files:     src/gui_mac.c
+
+Patch 7.3.376
+Problem:    Win32: Toolbar repainting does not work when the mouse pointer
+           hovers over a button.
+Solution:   Call DefWindowProc() when not handling an event. (Sergiu Dotenco)
+Files:     src/gui_w32.c
+
+Patch 7.3.377
+Problem:    No support for bitwise AND, OR, XOR and invert.
+Solution:   Add and(), or(), invert() and xor() functions.
+Files:     src/eval.c, src/testdir/test49.in, src/testdir/test65.in,
+           src/testdir/test65.ok, runtime/doc/eval.txt
+
+Patch 7.3.378
+Problem:    When cross-compiling the check for uint32_t fails.
+Solution:   Only give a warning message. (Maksim Melnikau)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.379
+Problem:    C-indenting wrong for static enum.
+Solution:   Skip over "static". (Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.380
+Problem:    C-indenting wrong for a function header.
+Solution:   Skip to the start paren. (Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.381
+Problem:    Configure silently skips interfaces that won't work.
+Solution:   Add the --enable-fail_if_missing argument. (Shlomi Fish)
+Files:     src/Makefile, src/configure.in, src/auto/configure
+
+Patch 7.3.382 (after 7.3.376)
+Problem:    IME characters are inserted twice.
+Solution:   Do not call DefWindowProc() if the event was handled. (Yasuhiro
+           Matsumoto)
+Files:     src/gui_w32.c
+
+Patch 7.3.383
+Problem:    For EBCDIC pound sign is defined as 't'.
+Solution:   Correctly define POUND.
+Files:     src/ascii.h
+
+Patch 7.3.384
+Problem:    Mapping CTRL-K in Insert mode breaks CTRL-X CTRL-K for dictionary
+           completion.
+Solution:   Add CTRL-K to the list of recognized keys. (James McCoy)
+Files:     src/edit.c
+
+Patch 7.3.385
+Problem:    When using an expression mapping on the command line the cursor
+           ends up in the wrong place. (Yasuhiro Matsumoto)
+Solution:   Save and restore msg_col and msg_row when evaluating the
+           expression.
+Files:     src/getchar.
+
+Patch 7.3.386
+Problem:    Test 83 fails when iconv does not support cp932. (raf)
+Solution:   Test if conversion works. (Yukihiro Nakadaira)
+Files:     src/testdir/test83.in
+
+Patch 7.3.387 (after 7.3.386)
+Problem:    Test 83 may fail for some encodings.
+Solution:   Set 'encoding' to utf-8 earlier.
+Files:     src/testdir/test83.in
+
+Patch 7.3.388
+Problem:    Crash on exit when EXITFREE is defined and using tiny features.
+Solution:   Check for NULL window pointer. (Dominique Pelle)
+Files:     src/buffer.c
+
+Patch 7.3.389
+Problem:    After typing at a prompt the "MORE" message appears too soon.
+Solution:   reset lines_left in msg_end_prompt(). (Eswald)
+Files:     src/message.c
+
+Patch 7.3.390
+Problem:    Using NULL buffer pointer in a window.
+Solution:   Check for w_buffer being NULL in more places. (Bjorn Winckler)
+Files:     src/ex_cmds.c, src/quickfix.c, src/window.c
+
+Patch 7.3.391
+Problem:    Can't check if the XPM_W32 feature is enabled.
+Solution:   Add xpm_w32 to the list of features. (kat)
+Files:     src/eval.c
+
+Patch 7.3.392
+Problem:    When setting 'undofile' while the file is already loaded but
+           unchanged, try reading the undo file. (Andy Wokula)
+Solution:   Compute a checksum of the text when 'undofile' is set. (Christian
+           Brabandt)
+Files:     src/option.c, src/testdir/test72.in, src/testdir/test72.ok
+
+Patch 7.3.393
+Problem:    Win32: When resizing Vim it is always moved to the primary monitor
+           if the secondary monitor is on the left.
+Solution:   Use the nearest monitor. (Yukihiro Nakadaira)
+Files:     src/gui_w32.c
+
+Patch 7.3.394
+Problem:    When placing a mark while starting up a screen redraw messes up
+           the screen. (lith)
+Solution:   Don't redraw while still starting up. (Christian Brabandt)
+Files:     src/screen.c
+
+Patch 7.3.395 (after 7.3.251)
+Problem:    "dv?bar" in the last line deletes too much and breaks undo.
+Solution:   Only adjust the cursor position when it's after the last line of
+           the buffer.  Add a test. (Christian Brabandt)
+Files:     src/ops.c, src/testdir/test43.in, src/testdir/test43.ok
+
+Patch 7.3.396
+Problem:    After forcing an operator to be characterwise it can still become
+           linewise when spanning whole lines.
+Solution:   Don't make the operator linewise when motion_force was set.
+           (Christian Brabandt)
+Files:     src/ops.c
+
+Patch 7.3.397
+Problem:    ":helpgrep" does not work properly when 'encoding' is not utf-8 or
+           latin1.
+Solution:   Convert non-ascii lines to 'encoding'. (Yasuhiro Matsumoto)
+Files:     src/quickfix.c, src/spell.c, src/misc2.c, src/proto/misc2.pro
+
+Patch 7.3.398
+Problem:    When creating more than 10 location lists and adding items one by
+           one a previous location may be used. (Audrius Kažukauskas)
+Solution:   Clear the location list completely when adding the tenth one.
+Files:     src/quickfix.c
+
+Patch 7.3.399
+Problem:    ":cd" doesn't work when the path contains wildcards. (Yukihiro
+           Nakadaira)
+Solution:   Ignore wildcard errors when the EW_NOTWILD flag is used.
+Files:     src/misc1.c
+
+Patch 7.3.400
+Problem:    Compiler warnings for shadowed variables.
+Solution:   Remove or rename the variables.
+Files:     src/charset.c, src/digraph.c, src/edit.c, src/eval.c, src/fold.c,
+           src/getchar.c, src/message.c, src/misc2.c, src/move.c,
+           src/netbeans.c, src/option.c, src/os_unix.c, src/screen.c,
+           src/search.c, src/spell.c, src/syntax.c, src/tag.c, src/window.c
+
+Patch 7.3.401
+Problem:    A couple more shadowed variables.
+Solution:   Rename the variables.
+Files:     src/netbeans.c
+
+Patch 7.3.402
+Problem:    When jumping to the first error a line of the buffer is sometimes
+           redrawn on top of the list of errors.
+Solution:   Do not call update_topline_redraw() if the display was scrolled
+           up.
+Files:     src/quickfix.c
+
+Patch 7.3.403
+Problem:    ":helpgrep" does not trigger QuickFixCmd* autocommands.
+Solution:   Trigger the autocommands. (Christian Brabandt)
+Files:     src/quickfix.c
+
+Patch 7.3.404
+Problem:    When a complete function uses refresh "always" redo will not work
+           properly.
+Solution:   Do not reset compl_leader when compl_opt_refresh_always is set.
+           (Yasuhiro Matsumoto)
+Files:     src/edit.c
+
+Patch 7.3.405
+Problem:    When xterm gets back the function keys it may delete the urxvt
+           mouse termcap code.
+Solution:   Check for the whole code, not just the start. (Egmont Koblinger)
+Files:     src/keymap.h, src/misc2.c, src/term.c
+
+Patch 7.3.406
+Problem:    Multi-byte characters in b:browsefilter are not handled correctly.
+Solution:   First use convert_filter() normally and then convert to wide
+           characters. (Taro Muraoka)
+Files:     src/gui_w48.c
+
+Patch 7.3.407
+Problem:    ":12verbose call F()" may duplicate text while trying to truncate.
+           (Thinca)
+Solution:   Only truncate when there is not enough room.  Also check the byte
+           length of the buffer.
+Files:     src/buffer.c, src/eval.c, src/ex_getln.c, src/message.c,
+           src/proto/message.pro
+
+Patch 7.3.408 (after 7.3.406)
+Problem:    Missing declaration.
+Solution:   Add the declaration. (John Marriott)
+Files:     src/gui_w48.c
+
+Patch 7.3.409
+Problem:    The license in pty.c is unclear.
+Solution:   Add a comment about the license.
+Files:     src/pty.c
+
+Patch 7.3.410
+Problem:    Compiler error for // comment. (Joachim Schmitz)
+Solution:   Turn into /* comment */.
+Files:     src/message.c
+
+Patch 7.3.411
+Problem:    Pasting in Visual mode using the "" register does not work. (John
+           Beckett)
+Solution:   Detect that the write is overwriting the pasted register.
+           (Christian Brabandt)
+Files:     src/normal.c
+
+Patch 7.3.412
+Problem:    Storing a float in a session file has an additional '&'.
+Solution:   Remove the '&'. (Yasuhiro Matsumoto)
+Files:     src/eval.c
+
+Patch 7.3.413
+Problem:    Build warnings on MS-Windows.
+Solution:   Add type casts. (Mike Williams)
+Files:     src/ex_getln.c, src/message.c, src/term.c
+
+Patch 7.3.414
+Problem:    Using CTRL-A on "000" drops the leading zero, while on "001" it
+           doesn't.
+Solution:   Detect "000" as an octal number. (James McCoy)
+Files:     src/charset.c
+
+Patch 7.3.415 (after 7.3.359)
+Problem:    Completion of functions stops once a dictionary is encountered.
+           (James McCoy)
+Solution:   Return an empty string instead of NULL.
+Files:     src/eval.c
+
+Patch 7.3.416 (after 7.3.415)
+Problem:    Compiler warning for wrong pointer.
+Solution:   Add type cast.
+Files:     src/eval.c
+
+Patch 7.3.417 (after 7.3.395)
+Problem:    Test 43 fails with a tiny build.
+Solution:   Only run test 43 with at least a small build.
+Files:     src/testdir/test43.in
+
+Patch 7.3.418
+Problem:    When a user complete function returns -1 an error message is
+           given.
+Solution:   When -2 is returned stop completion silently. (Yasuhiro Matsumoto)
+Files:     src/edit.
+
+Patch 7.3.419
+Problem:    DBCS encoding in a user command does not always work.
+Solution:   Skip over DBCS characters. (Yasuhiro Matsumoto)
+Files:     src/ex_docmd.c
+
+Patch 7.3.420
+Problem:    "it" and "at" don't work properly with a dash in the tag name.
+Solution:   Require a space to match the tag name. (Christian Brabandt)
+Files:     src/search.c
+
+Patch 7.3.421
+Problem:    Get E832 when setting 'undofile' in vimrc and there is a file to
+           be edited on the command line. (Toothpik)
+Solution:   Do not try reading the undo file for a file that wasn't loaded.
+Files:     src/option.c
+
+Patch 7.3.422
+Problem:    Python 3 does not have __members__.
+Solution:   Add "name" and "number" in another way. (lilydjwg)
+Files:     src/if_py_both.h, src/if_python3.c
+
+Patch 7.3.423
+Problem:    Small mistakes in comments, proto and indent.
+Solution:   Fix the mistakes.
+Files:     src/ex_cmds2.c, src/structs.h, src/ui.c, src/proto/ex_docmd.pro
+
+Patch 7.3.424
+Problem:    Win16 version missing some functions.
+Solution:   Add #defines for the functions.
+Files:     src/gui_w16.c
+
+Patch 7.3.425 (after 7.3.265)
+Problem:    Search history lines are duplicated. (Edwin Steiner)
+Solution:   Convert separator character from space to NUL.
+Files:     src/ex_getln.c
+
+Patch 7.3.426
+Problem:    With '$' in 'cpoptions' the $ is not displayed in the first
+           column.
+Solution:   Use -1 instead of 0 as a special value. (Hideki Eiraku and
+           Hirohito Higashi)
+Files:     src/edit.c, src/globals.h, src/move.c, src/screen.c, src/search.c
+
+Patch 7.3.427
+Problem:    readfile() can be slow with long lines.
+Solution:   Use realloc() instead of alloc(). (John Little)
+Files:     src/eval.c
+
+Patch 7.3.428
+Problem:    Win32: an xpm file without a mask crashes Vim.
+Solution:   Fail when the mask is missing. (Dave Bodenstab)
+Files:     src/xpm_w32.c
+
+Patch 7.3.429
+Problem:    When 'cpoptions' includes "E" "c0" in the first column is an
+           error. The redo register is then set to the erroneous command.
+Solution:   Do not set the redo register if the command fails because of an
+           empty region. (Hideki Eiraku)
+Files:     src/getchar.c, src/normal.c, src/proto/getchar.pro
+
+Patch 7.3.430
+Problem:    When a custom filetype detection uses "augroup END" the conf
+           fileytpe detection does not have the filetypedetect group.
+Solution:   Always end the group and include filetypedetect in the conf
+           autocommand. (Lech Lorens)
+Files:     runtime/filetype.vim
+
+Patch 7.3.431
+Problem:    Fetching a key at a prompt may be confused by escape sequences.
+           Especially when getting a prompt at a VimEnter autocommand.
+           (Alex Efros)
+Solution:   Properly handle escape sequences deleted by check_termcode().
+Files:     src/getchar.c, src/misc1.c, src/term.c, src/proto/term.pro
+
+Patch 7.3.432
+Problem:    ACLs are not supported for ZFS or NFSv4 on Solaris.
+Solution:   Add configure check and code. (Danek Duvall)
+Files:     src/configure.in, src/auto/configure, src/config.h.in,
+           src/os_unix.c
+
+Patch 7.3.433
+Problem:    Using continued lines in a Vim script can be slow.
+Solution:   Instead of reallocating for every line use a growarray. (Yasuhiro
+           Matsumoto)
+Files:     src/ex_cmds2.c
+
+Patch 7.3.434
+Problem:    Using join() can be slow.
+Solution:   Compute the size of the result before allocation to avoid a lot of
+           allocations and copies. (Taro Muraoka)
+Files:     src/eval.c
+
+Patch 7.3.435
+Problem:    Compiler warning for unused variable.
+Solution:   Move the variable inside #ifdef.
+Files:     src/ex_cmds2.c
+
+Patch 7.3.436
+Problem:    Compiler warnings for types on Windows.
+Solution:   Add type casts. (Mike Williams)
+Files:     src/eval.c
+
+Patch 7.3.437
+Problem:    Continue looping inside FOR_ALL_TAB_WINDOWS even when already done.
+Solution:   Use goto instead of break. (Hirohito Higashi)
+Files:     src/fileio.c, src/globals.h
+
+Patch 7.3.438
+Problem:    There is no way to avoid ":doautoall" reading modelines.
+Solution:   Add the <nomodeline> argument. Adjust documentation.
+Files:     src/fileio.c, runtime/doc/autocmd.txt
+
+Patch 7.3.439
+Problem:    Compiler warnings to size casts in Perl interface.
+Solution:   Use XS macros. (James McCoy)
+Files:     src/if_perl.xs, src/typemap
+
+Patch 7.3.440
+Problem:    Vim does not support UTF8_STRING for the X selection.
+Solution:   Add UTF8_STRING atom support. (Alex Efros) Use it only when
+           'encoding' is set to Unicode.
+Files:     src/ui.c
+
+Patch 7.3.441
+Problem:    Newer versions of MzScheme (Racket) require earlier (trampolined)
+           initialisation.
+Solution:   Call mzscheme_main() early in main(). (Sergey Khorev)
+Files:     src/Make_mvc.mak, src/if_mzsch.c, src/main.c,
+           src/proto/if_mzsch.pro
+
+Patch 7.3.442 (after 7.3.438)
+Problem:    Still read modelines for ":doautocmd".
+Solution:   Move check for <nomodeline> to separate function.
+Files:     src/fileio.c, src/ex_docmd.c, src/proto/fileio.pro,
+           runtime/doc/autocmd.txt
+
+Patch 7.3.443
+Problem:    MS-Windows: 'shcf' and 'shellxquote' defaults are not very good.
+Solution:   Make a better guess when 'shell' is set to "cmd.exe". (Ben Fritz)
+Files:     src/option.c, runtime/doc/options.txt
+
+Patch 7.3.444
+Problem:    ":all!" and ":sall!" give error E477, even though the
+           documentation says these are valid commands.
+Solution:   Support the exclamation mark. (Hirohito Higashi)
+Files:     src/ex_cmds.h, src/testdir/test31.in, src/testdir/test31.ok
+
+Patch 7.3.445 (after 7.3.443)
+Problem:    Can't properly escape commands for cmd.exe.
+Solution:   Default 'shellxquote' to '('.  Append ')' to make '(command)'.
+           No need to use "/s" for 'shellcmdflag'.
+Files:     src/misc2.c, src/option.c, src/os_win32.c
+
+Patch 7.3.446 (after 7.3.445)
+Problem:    Win32: External commands with special characters don't work.
+Solution:   Add the 'shellxescape' option.
+Files:     src/misc2.c, src/option.c, src/option.h, runtime/doc/options.txt
+
+Patch 7.3.447 (after 7.3.446)
+Problem:    Win32: External commands with "start" do not work.
+Solution:   Unescape part of the command. (Yasuhiro Matsumoto)
+Files:     src/os_win32.c
+
+Patch 7.3.448 (after 7.3.447)
+Problem:    Win32: Still a problem with "!start /b".
+Solution:   Escape only '|'. (Yasuhiro Matsumoto)
+Files:     src/os_win32.c
+
+Patch 7.3.449
+Problem:    Crash when a BufWinLeave autocommand closes the only other window.
+           (Daniel Hunt)
+Solution:   Abort closing a buffer when it becomes the only one.
+Files:     src/buffer.c, src/proto/buffer.pro, src/ex_cmds.c, src/ex_getln.c,
+           src/misc2.c, src/quickfix.c, src/window.c, src/proto/window.pro
+
+Patch 7.3.450 (after 7.3.448)
+Problem:    Win32: Still a problem with "!start /b".
+Solution:   Fix pointer use. (Yasuhiro Matsumoto)
+Files:     src/os_win32.c
+
+Patch 7.3.451
+Problem:    Tcl doesn't work on 64 MS-Windows.
+Solution:   Make it work. (Dave Bodenstab)
+Files:     src/Make_mvc.mak, src/if_tcl.c
+
+Patch 7.3.452
+Problem:    Undo broken when pasting close to the last line. (Andrey Radev)
+Solution:   Use a flag to remember if the deleted included the last line.
+           (Christian Brabandt)
+Files:     src/ops.c
+
+Patch 7.3.453
+Problem:    Pasting in the command line is slow.
+Solution:   Don't redraw if there is another character to read. (Dominique
+           Pelle)
+Files:     src/ex_getln.c
+
+Patch 7.3.454
+Problem:    Re-allocating memory slows Vim down.
+Solution:   Use realloc() in ga_grow(). (Dominique Pelle)
+Files:     src/misc2.c
+
+Patch 7.3.455
+Problem:    Using many continuation lines can be slow.
+Solution:   Adjust the reallocation size to the current length.
+Files:     src/ex_cmds2.c
+
+Patch 7.3.456
+Problem:    ":tab drop file" has several problems, including moving the
+           current window and opening a new tab for a file that already has a
+           window.
+Solution:   Refactor ":tab drop" handling. (Hirohito Higashi)
+Files:     src/buffer.c, src/testdir/test62.in, src/testdir/test62.ok
+
+Patch 7.3.457
+Problem:    When setting $VIMRUNTIME later the directory for fetching
+           translated messages is not adjusted.
+Solution:   Put bindtextdomain() in vim_setenv().
+Files:     src/misc1.c
+
+Patch 7.3.458
+Problem:    Crash when calling smsg() during startup.
+Solution:   Don't use 'shortmess' when it is not set yet.
+Files:     src/option.c
+
+Patch 7.3.459
+Problem:    Win32: Warnings for type conversion.
+Solution:   Add type casts. (Mike Williams)
+Files:     src/misc2.c, src/os_win32.c
+
+Patch 7.3.460
+Problem:    Win32: UPX does not compress 64 bit binaries.
+Solution:   Mention and add the alternative: mpress. (Dave Bodenstab)
+Files:     src/INSTALLpc.txt, src/Make_ming.mak
+
+Patch 7.3.461
+Problem:    The InsertCharPre autocommand event is not triggered during
+           completion and when typing several characters quickly.
+Solution:   Also trigger InsertCharPre during completion.  Do not read ahead
+           when an InsertCharPre autocommand is defined. (Yasuhiro Matsumoto)
+Files:     src/edit.c, src/fileio.c, src/proto/fileio.pro
+
+Patch 7.3.462
+Problem:    When using ":loadview" folds may be closed unexpectedly.
+Solution:   Take into account foldlevel. (Xavier de Gaye)
+Files:     src/fold.c
+
+Patch 7.3.463
+Problem:    When using ":s///c" the cursor is moved away from the match.
+           (Lawman)
+Solution:   Don't move the cursor when do_ask is set. (Christian Brabandt)
+Files:     src/ex_cmds.c
+
+Patch 7.3.464
+Problem:    Compiler warning for sprintf.
+Solution:   Put the length in a variable. (Dominique Pelle)
+Files:     src/version.c
+
+Patch 7.3.465
+Problem:    Cannot get file name with newline from glob().
+Solution:   Add argument to glob() and expand() to indicate they must return a
+           list. (Christian Brabandt)
+Files:     runtime/doc/eval.txt, src/eval.c, src/ex_getln.c, src/vim.h
+
+Patch 7.3.466
+Problem:    Get ml_get error hen ":behave mswin" was used and selecting
+           several lines.  (A. Sinan Unur)
+Solution:   Adjust the end of the operation. (Christian Brabandt)
+Files:     src/ops.c
+
+Patch 7.3.467
+Problem:    Cursor positioned wrong at the command line when regaining focus
+           and using some input method.
+Solution:   Do not position the cursor in command line mode.
+Files:     src/mbyte.c
+
+Patch 7.3.468
+Problem:    For some compilers the error file is not easily readable.
+Solution:   Use QuickFixCmdPre for more commands. (Marcin Szamotulski)
+Files:     runtime/doc/autocmd.txt, src/quickfix.c
+
+Patch 7.3.469
+Problem:    Compiler warning for unused argument without some features.
+Solution:   Add UNUSED.
+Files:     src/buffer.c
+
+Patch 7.3.470
+Problem:    Test 62 fails when compiled without GUI and X11.
+Solution:   Don't test :drop when it is not supported.
+Files:     src/testdir/test62.in
+
+Patch 7.3.471
+Problem:    Can't abort listing placed signs.
+Solution:   Check "got_int". (Christian Brabandt)
+Files:     src/buffer.c, src/ex_cmds.c
+
+Patch 7.3.472
+Problem:    Crash when using ":redraw" in a BufEnter autocommand and
+           switching to another tab. (驼峰)
+Solution:   Move triggering the autocommands to after correcting the
+           option values. Also check the row value to be out of bounds.
+           (Christian Brabandt, Sergey Khorev)
+Files:     src/screen.c, src/window.c
+
+Patch 7.3.473
+Problem:    'cursorbind' does not work correctly in combination with
+           'virtualedit' set to "all".
+Solution:   Copy coladd. (Gary Johnson)
+Files:     src/move.c
+
+Patch 7.3.474
+Problem:    Perl build with gcc 4 fails.
+Solution:   Remove XS() statements. (Yasuhiro Matsumoto)
+Files:     src/if_perl.xs
+
+Patch 7.3.475
+Problem:    In a terminal with few colors the omnicomplete menu may be hard to
+           see when using the default colors.
+Solution:   Use more explicit colors. (suggested by Alex Henrie)
+Files:     src/syntax.c
+
+Patch 7.3.476
+Problem:    When selecting a block, using "$" to include the end of each line
+           and using "A" and typing a backspace strange things happen.
+           (Yuangchen Xie)
+Solution:   Avoid using a negative length. (Christian Brabandt)
+Files:     src/ops.c
+
+Patch 7.3.477
+Problem:    Using ":echo" to output enough lines to scroll, then using "j" and
+           "k" at the more prompt, displays the command on top of the output.
+           (Marcin Szamotulski) 
+Solution:   Put the output below the command. (Christian Brabandt)
+Files:     src/eval.c
+
+Patch 7.3.478
+Problem:    Memory leak using the ':rv!' command when reading dictionary or
+           list global variables i.e. with 'viminfo' containing !.
+Solution:   Free the typeval. (Dominique Pelle)
+Files:     src/eval.c
+
+Patch 7.3.479
+Problem:    When 'cursorline' is set the line number highlighting can't be set
+           separately.
+Solution:   Add "CursorLineNr". (Howard Buchholz)
+Files:     src/option.c, src/screen.c, src/syntax.c, src/vim.h
+
+Patch 7.3.480
+Problem:    When using ":qa" and there is a changed buffer picking the buffer
+           to jump to is not very good.
+Solution:   Consider current and other tab pages. (Hirohito Higashi)
+Files:     src/ex_cmds2.c
+
+Patch 7.3.481
+Problem:    Changing 'virtualedit' in an operator function to "all" does not
+           have the desired effect. (Aaron Bohannon)
+Solution:   Save, reset and restore virtual_op when executing an operator
+           function.
+Files:     src/normal.c
+
+Patch 7.3.482
+Problem:    With 'cursorbind' set moving up/down does not always keep the same
+           column.
+Solution:   Set curswant appropriately. (Gary Johnson)
+Files:     src/move.c
+
+Patch 7.3.483  (after 7.3.477)
+Problem:    More prompt shows up too often.
+Solution:   Instead of adding a line break, only start a new line in the
+           message history. (Christian Brabandt)
+Files:     src/eval.c, src/message.c, src/proto/message.pro
+
+Patch 7.3.484
+Problem:    The -E and --echo-wid command line arguments are not mentioned in
+           "vim --help".
+Solution:   Add the help lines. (Dominique Pelle)
+Files:     src/main.c
+
+Patch 7.3.485
+Problem:    When building Vim LDFLAGS isn't passed on to building xxd.
+Solution:   Pass the LDFLAGS value. (James McCoy)
+Files:     src/Makefile
+
+Patch 7.3.486
+Problem:    Build error with mingw64 on Windows 7.
+Solution:   Avoid the step of going through vimres.res. (Guopeng Wen)
+Files:     src/Make_ming.mak
+
+Patch 7.3.487
+Problem:    When setting 'timeoutlen' or 'ttimeoutlen' the column for vertical
+           movement is reset unnecessarily.
+Solution:   Do not set w_set_curswant for every option. Add a test for this.
+           (Kana Natsuno) Add the P_CURSWANT flag for options.
+Files:     src/option.c, src/testdir/test84.in, src/testdir/test84.ok,
+           src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+           src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+           src/testdir/Make_vms.mms, src/testdir/Makefile
+
+Patch 7.3.488
+Problem:    ":help!" in a help file does not work as documented.
+Solution:   When in a help file don't give an error message. (thinca)
+Files:     src/ex_cmds.c
+
+Patch 7.3.489
+Problem:    CTRL-] in Insert mode does not expand abbreviation when used in a
+           mapping. (Yichao Zhou)
+Solution:   Special case using CTRL-]. (Christian Brabandt)
+Files:     src/getchar.c, src/edit.c
+
+Patch 7.3.490
+Problem:    Member confusion in Lua interface.
+Solution:   Fix it.  Add luaeval(). (Taro Muraoka, Luis Carvalho)
+Files:     runtime/doc/if_lua.txt, src/eval.c, src/if_lua.c,
+           src/proto/if_lua.pro
+
+Patch 7.3.491
+Problem:    No tests for Lua.
+Solution:   Add some simple tests for Lua. (Luis Carvalho)
+Files:     src/testdir/test1.in, src/testdir/test85.in, src/testdir/test85.ok
+           src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+           src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+           src/testdir/Make_vms.mms, src/testdir/Makefile
+
+Patch 7.3.492
+Problem:    Can't indent conditions separately from function arguments.
+Solution:   Add the 'k' flag in 'cino'. (Lech Lorens)
+Files:     runtime/doc/indent.txt, src/misc1.c, src/testdir/test3.in,
+           src/testdir/test3.ok
+
+Patch 7.3.493 (after 7.3.492)
+Problem:    Two unused variables.
+Solution:   Remove them. (Hong Xu)
+Files:     src/misc1.c
+
+Patch 7.3.494 (after 7.3.491)
+Problem:    Can't compile with Lua 5.1 or dynamic Lua.
+Solution:   Fix dll_ methods. Fix luado(). (Muraoka Taro, Luis Carvalho)
+Files:     src/if_lua.c
+
+Patch 7.3.495 (after 7.3.492)
+Problem:    Compiler warnings.
+Solution:   Add function declaration.  Remove "offset" argument.
+Files:     src/misc1.c
+
+Patch 7.3.496
+Problem:    MS-DOS: When "diff" trips over difference in line separators some
+           tests fail.
+Solution:   Make some .ok files use unix line separators. (David Pope)
+Files:     src/testdir/Make_dos.mak, src/testdir/Make_ming.mak
+
+Patch 7.3.497
+Problem:    Crash when doing ":python print" and compiled with gcc and
+           the optimizer enabled.
+Solution:   Avoid the crash, doesn't really fix the problem. (Christian
+           Brabandt)
+Files:     src/if_py_both.h
+
+Patch 7.3.498
+Problem:    The behavior of the "- register changes depending on value of
+           the 'clipboard' option. (Szamotulski)
+Solution:   Also set the "- register when the register is "*" or "+".
+           (Christian Brabandt)
+Files:     src/ops.c
+
+Patch 7.3.499
+Problem:    When using any interface language when Vim is waiting for a child
+           process it gets confused by a child process started through the
+           interface.
+Solution:   Always used waitpid() instead of wait(). (Yasuhiro Matsumoto)
+Files:     src/os_unix.c
+
+Patch 7.3.500
+Problem:    Ming makefile unconditionally sets WINVER.
+Solution:   Only defined when not already defined. (Yasuhiro Matsumoto)
+Files:     src/Make_ming.mak
+
+Patch 7.3.501
+Problem:    Error for "flush" not being defined when using Ruby command.
+Solution:   Defined "flush" as a no-op method. (Kent Sibilev)
+Files:     src/if_ruby.c
+
+Patch 7.3.502
+Problem:    Netbeans insert halfway a line actually appends to the line.
+Solution:   Insert halfway the line. (Brian Victor)
+Files:     src/netbeans.c
+
+Patch 7.3.503 (after 7.3.501)
+Problem:    Warning for unused argument.
+Solution:   Add UNUSED.
+Files:     src/if_ruby.c
+
+Patch 7.3.504
+Problem:    Commands in help files are not highlighted.
+Solution:   Allow for commands in backticks.  Adjust CTRL-] to remove the
+           backticks.
+Files:     src/ex_cmds.c
+
+Patch 7.3.505
+Problem:    Test 11 fails on MS-Windows in some versions.
+Solution:   Fix #ifdefs for whether filtering through a pipe is possible. Move
+           setting b_no_eol_lnum back to where it was before patch 7.3.124.
+           (David Pope)
+Files:     src/feature.h, src/eval.c, src/ex_cmds.c, src/fileio.c
+
+Patch 7.3.506
+Problem:    GTK gives an error when selecting a non-existent file.
+Solution:   Add a handler to avoid the error. (Christian Brabandt)
+Files:     src/gui_gtk.c
+
+Patch 7.3.507
+Problem:    When exiting with unsaved changes, selecting an existing file in
+           the file dialog, there is no dialog to ask whether the existing
+           file should be overwritten. (Felipe G. Nievinski)
+Solution:   Call check_overwrite() before writing. (Christian Brabandt)
+Files:     src/ex_cmds.c, src/ex_cmds2.c, src/proto/ex_cmds.pro
+
+Patch 7.3.508
+Problem:    Default for v:register is not set.
+Solution:   Init v:register in eval_init(). Correct for 'clipboard' before the
+           main loop. (Ingo Karkat)
+Files:     src/eval.c, src/main.c
+
+Patch 7.3.509
+Problem:    ":vimgrep" fails when 'autochdir' is set.
+Solution:   A more generic solution for changing directory. (Ben Fritz)
+Files:     src/quickfix.c
+
+Patch 7.3.510
+Problem:    Test 77 fails on Solaris 7. (Michael Soyka)
+Solution:   Replace any tabs with spaces.
+Files:     src/testdir/test77.in
+
+Patch 7.3.511
+Problem:    Using a FileReadCmd autocommand that does ":e! {file}" may cause a
+           crash. (Christian Brabandt)
+Solution:   Properly restore curwin->w_s.
+Files:     src/fileio.c
+
+Patch 7.3.512
+Problem:    undofile() returns a useless name when passed an empty string.
+Solution:   Return an empty string. (Christian Brabandt)
+Files:     src/eval.c
+
+Patch 7.3.513
+Problem:    Cannot use CTRL-E and CTRL-Y with "r".
+Solution:   Make CTRL-E and CTRL-Y work like in Insert mode. (Christian
+           Brabandt)
+Files:     src/edit.c, src/normal.c, src/proto/edit.pro
+
+Patch 7.3.514
+Problem:    No completion for :history command.
+Solution:   Add the completion and update the docs. Also fix ":behave"
+           completion. (Dominique Pelle)
+Files:     runtime/doc/cmdline.txt, runtime/doc/map.txt, src/ex_docmd.c,
+           src/ex_getln.c, src/vim.h
+
+Patch 7.3.515
+Problem:    'wildignorecase' only applies to the last part of the path.
+Solution:   Also ignore case for letters earlier in the path.
+Files:     src/misc1.c
+
+Patch 7.3.516
+Problem:    extend(o, o) may crash Vim.
+Solution:   Fix crash and add test. (Thinca and Hirohito Higashi)
+Files:     src/eval.c, src/testdir/test55.in, src/testdir/test55.ok
+
+Patch 7.3.517
+Problem:    Crash when using "vipvv". (Alexandre Provencio)
+Solution:   Don't let the text length become negative.
+Files:     src/ops.c
+
+Patch 7.3.518
+Problem:    When 'encoding' is a double-byte encoding ":helptags" may not find
+           tags correctly.
+Solution:   Use vim_strbyte() instead of vim_strchr(). (Yasuhiro Matsumoto)
+Files:     src/ex_cmds.c
+
+Patch 7.3.519
+Problem:    When completefunction returns it cannot indicate end of completion
+           mode.
+Solution:   Recognize completefunction returning -3.  (Matsushita Shougo)
+Files:     src/edit.c
+
+Patch 7.3.520
+Problem:    Gvim starts up slow on Ubuntu 12.04.
+Solution:   Move the call to gui_mch_init_check() to after fork(). (Yasuhiro
+           Matsumoto)  Do check $DISPLAY being set.
+Files:     src/gui.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro
+
+Patch 7.3.521
+Problem:    Using "z=" on a multi-byte character may cause a crash.
+Solution:   Don't use strlen() on an int pointer.
+Files:     src/spell.c
+
+Patch 7.3.522
+Problem:    Crash in vim_realloc() when using MEM_PROFILE.
+Solution:   Avoid using a NULL argument. (Dominique Pelle)
+Files:     src/eval.c
+
+Patch 7.3.523
+Problem:    ":diffupdate" doesn't check for files changed elsewhere.
+Solution:   Add the ! flag. (Christian Brabandt)
+Files:     runtime/doc/diff.txt, src/diff.c, src/ex_cmds.h
+
+Patch 7.3.524 (after 7.3.523)
+Problem:    Missing comma.
+Solution:   Add the comma.
+Files:     src/version.c
+
+Patch 7.3.525
+Problem:    Compiler warning on 64 bit MS-Windows.
+Solution:   Add type cast. (Mike Williams)
+Files:     src/ex_getln.c
+
+Patch 7.3.526
+Problem:    Confusing indenting for #ifdef.
+Solution:   Remove and add indent. (Elias Diem)
+Files:     src/normal.c
+
+Patch 7.3.527
+Problem:    Clang complains about non-ASCII characters in a string.
+Solution:   Change to \x88 form. (Dominique Pelle)
+Files:     src/charset.c
+
+Patch 7.3.528
+Problem:    Crash when closing last window in a tab. (Alex Efros)
+Solution:   Use common code in close_last_window_tabpage(). (Christian
+           Brabandt)
+Files:     src/window.c
+
+Patch 7.3.529
+Problem:    Using a count before "v" and "V" does not work (Kikyous)
+Solution:   Make the count select that many characters or lines. (Christian
+           Brabandt)
+Files:     src/normal.c
+
+Patch 7.3.530 (after 7.3.520)
+Problem:    Gvim does not work when 'guioptions' includes "f". (Davido)
+Solution:   Call gui_mch_init_check() when running GUI in the foreground.
+           (Yasuhiro Matsumoto)
+Files:     src/gui.c
+
+Patch 7.3.531 (after 7.3.530)
+Problem:    GUI does not work on MS-Windows.
+Solution:   Add the missing #ifdef. (Patrick Avery)
+Files:     src/gui.c
+
+Patch 7.3.532
+Problem:    Compiler warning from Clang.
+Solution:   Use a different way to point inside a string. (Dominique Pelle)
+Files:     src/syntax.c
+
+Patch 7.3.533
+Problem:    Memory leak when writing undo file.
+Solution:   Free the ACL. (Dominique Pelle)
+Files:     src/undo.c
+
+Patch 7.3.534 (after 7.3.461)
+Problem:    When using an InsertCharPre autocommand autoindent fails.
+Solution:   Proper handling of v:char. (Alexey Radkov)
+Files:     src/edit.c
+
+Patch 7.3.535
+Problem:    Many #ifdefs for MB_MAXBYTES.
+Solution:   Also define MB_MAXBYTES without the +multi_byte feature.  Fix
+           places where the buffer didn't include space for a NUL byte.
+Files:     src/arabic.c, src/edit.c, src/eval.c, src/getchar.c, src/mbyte.c,
+           src/misc1.c, src/screen.c, src/spell.c, src/vim.h
+
+Patch 7.3.536
+Problem:    When spell checking the German sharp s is not seen as a word
+           character. (Aexl Bender)
+Solution:   In utf_islower() return true for the sharp s. Note: also need
+           updated spell file for this to take effect.
+Files:     src/mbyte.c
+
+Patch 7.3.537
+Problem:    Unnecessary call to init_spell_chartab().
+Solution:   Delete the call.
+Files:     src/spell.c
+
+Patch 7.3.538
+Problem:    'efm' does not handle Tabs in pointer lines.
+Solution:   Add Tab support. Improve tests. (Lech Lorens)
+Files:     src/quickfix.c, src/testdir/test10.in, src/testdir/test10.ok
+
+Patch 7.3.539
+Problem:    Redrawing a character on the command line does not work properly
+           for multi-byte characters.
+Solution:   Count the number of bytes in a character. (Yukihiro Nakadaira)
+Files:     src/ex_getln.c
+
+Patch 7.3.540
+Problem:    Cursor is left on the text instead of the command line.
+Solution:   Don't call setcursor() in command line mode.
+Files:     src/getchar.c
+
+Patch 7.3.541
+Problem:    When joining lines comment leaders need to be removed manually.
+Solution:   Add the 'j' flag to 'formatoptions'. (Lech Lorens)
+Files:     runtime/doc/change.txt, src/edit.c, src/ex_docmd.c, src/misc1.c,
+           src/normal.c, src/ops.c, src/option.h, src/proto/misc1.pro,
+           src/proto/ops.pro, src/search.c, src/testdir/test29.in,
+           src/testdir/test29.ok
+
+Patch 7.3.542 (after 7.3.506)
+Problem:    Function is sometimes unused.
+Solution:   Add #ifdef.
+Files:     src/gui_gtk.c
+
+Patch 7.3.543
+Problem:    The cursor is in the wrong line after using ":copen". (John
+           Beckett)
+Solution:   Invoke more drastic redraw method.
+Files:     src/eval.c
+
+Patch 7.3.544
+Problem:    There is no good way to close a quickfix window when closing the
+           last ordinary window.
+Solution:   Add the QuitPre autocommand.
+Files:     src/ex_docmd.c, src/fileio.c, src/vim.h
+
+Patch 7.3.545
+Problem:    When closing a window or buffer autocommands may close it too,
+           causing problems for where the autocommand was invoked from.
+Solution:   Add the w_closing and b_closing flags.  When set disallow ":q" and
+           ":close" to prevent recursive closing.
+Files:     src/structs.h, src/buffer.c, src/ex_docmd.c, src/window.c
+
+Patch 7.3.546
+Problem:    Bogus line break.
+Solution:   Remove the line break.
+Files:     src/screen.c
+
+Patch 7.3.547 (after 7.3.541)
+Problem:    Compiler warning for uninitialized variable.
+Solution:   Initialize it.
+Files:     src/ops.c
+
+Patch 7.3.548
+Problem:    Compiler warning on 64 bit Windows.
+Solution:   Add type cast. (Mike Williams)
+Files:     src/ops.c
+
+Patch 7.3.549
+Problem:    In 'cinoptions' "0s" is interpreted as one shiftwidth. (David
+           Pineau)
+Solution:   Use the zero as zero. (Lech Lorens)
+Files:     src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.550 (after 7.3.541)
+Problem:    With "j" in 'formatoptions' a list leader is not removed. (Gary
+           Johnson)
+Solution:   Don't ignore the start of a three part comment. (Lech Lorens)
+Files:     src/ops.c, src/testdir/test29.in, src/testdir/test29.ok
+
+Patch 7.3.551
+Problem:    When using :tablose a TabEnter autocommand is triggered too early.
+           (Karthick)
+Solution:   Don't trigger *Enter autocommands before closing the tab.
+           (Christian Brabandt)
+Files:     src/buffer.c, src/eval.c, src/ex_cmds2.c, src/fileio.c,
+           src/proto/window.pro, src/window.c
+
+Patch 7.3.552
+Problem:    Formatting inside comments does not use the "2" flag in
+           'formatoptions'.
+Solution:   Support the "2" flag.  (Tor Perkins)
+Files:     src/vim.h, src/ops.c, src/edit.c, src/misc1.c,
+           src/testdir/test68.in, src/testdir/test68.ok
+
+Patch 7.3.553
+Problem:    With double-width characters and 'listchars' containing "precedes"
+           the text is displayed one cell off.
+Solution:   Check for double-width character being overwritten by the
+           "precedes" character. (Yasuhiro Matsumoto)
+Files:     src/screen.c
+
+Patch 7.3.554 (after 7.3.551)
+Problem:    Compiler warning for unused argument.
+Solution:   Add UNUSED.
+Files:     src/window.c
+
+Patch 7.3.555
+Problem:    Building on IBM z/OS fails.
+Solution:   Adjust configure. Use the QUOTESED value from config.mk instead of
+           the hard coded one in Makefile. (Stephen Bovy)
+Files:     src/configure.in, src/auto/configure, src/Makefile
+
+Patch 7.3.556
+Problem:    Compiler warnings on 64 bit Windows.
+Solution:   Add type casts. (Mike Williams)
+Files:     src/misc1.c
+
+Patch 7.3.557
+Problem:    Crash when an autocommand wipes out a buffer when it is hidden.
+Solution:   Restore the current window when needed. (Christian Brabandt)
+Files:     src/buffer.c
+
+Patch 7.3.558
+Problem:    Memory access error. (Gary Johnson)
+Solution:   Allocate one more byte. (Dominique Pelle)
+Files:     src/misc1.c
+
+Patch 7.3.559
+Problem:    home_replace() does not work with 8.3 filename.
+Solution:   Make ":p" expand 8.3 name to full path. (Yasuhiro Matsumoto)
+Files:     src/eval.c, src/misc1.c
+
+Patch 7.3.560
+Problem:    Get an error for a locked argument in extend().
+Solution:   Initialize the lock flag for a dictionary. (Yukihiro Nakadaira)
+Files:     src/eval.c
+
+Patch 7.3.561
+Problem:    Using refresh: always in a complete function breaks the "."
+           command. (Val Markovic)
+Solution:   Add match leader to the redo buffer. (Yasuhiro Matsumoto)
+Files:     src/edit.c
+
+Patch 7.3.562
+Problem:    ":profdel" should not work when the +profile feature is disabled.
+Solution:   Call ex_ni(). (Yasuhiro Matsumoto)
+Files:     src/ex_cmds2.c
+
+Patch 7.3.563 (after 7.3.557)
+Problem:    Can't build with tiny features.
+Solution:   Add #ifdef.
+Files:     src/buffer.c
+
+Patch 7.3.564 (after 7.3.559)
+Problem:    Warning for pointer conversion.
+Solution:   Add type cast.
+Files:     src/misc1.c
+
+Patch 7.3.565
+Problem:    Can't generate proto file for Python 3.
+Solution:   Add PYTHON3_CFLAGS to LINT_CFLAGS.
+Files:     src/Makefile
+
+Patch 7.3.566 (after 7.3.561)
+Problem:    Redo after completion does not work correctly when refresh: always
+           is not used. (Raymond Ko)
+Solution:   Check the compl_opt_refresh_always flag. (Christian Brabandt)
+Files:     src/edit.c
+
+Patch 7.3.567
+Problem:    Missing copyright notice.
+Solution:   Add Vim copyright notice. (Taro Muraoka)
+Files:     src/dehqx.py
+
+Patch 7.3.568
+Problem:    Bad indents for #ifdefs.
+Solution:   Add and remove spaces. (Elias Diem)
+Files:     src/globals.h
+
+Patch 7.3.569
+Problem:    Evaluating Vim expression in Python is insufficient.
+Solution:   Add vim.bindeval().  Also add pyeval() and py3eval(). (ZyX)
+Files:     runtime/doc/eval.txt, runtime/doc/if_pyth.txt, src/eval.c,
+           src/if_lua.c, src/if_py_both.h, src/if_python.c, src/if_python3.c,
+           src/proto/eval.pro, src/proto/if_python.pro,
+           src/proto/if_python3.pro, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Makefile,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.570
+Problem:    ":vimgrep" does not obey 'wildignore'.
+Solution:   Apply 'wildignore' and 'suffixes' to ":vimgrep". (Ingo Karkat)
+Files:     src/ex_cmds2.c, src/proto/ex_cmds2.pro, src/quickfix.c, src/spell.c
+
+Patch 7.3.571
+Problem:    Duplicated condition.
+Solution:   Remove one. (Dominique Pelle)
+Files:     src/os_win32.c
+
+Patch 7.3.572
+Problem:    Duplicate statement in if and else. (Dominique Pelle)
+Solution:   Remove the condition and add a TODO.
+Files:     src/gui_xmebw.c
+
+Patch 7.3.573
+Problem:    Using array index before bounds checking.
+Solution:   Swap the parts of the condition. (Dominique Pelle)
+Files:     src/ops.c
+
+Patch 7.3.574
+Problem:    When pasting a register in the search command line a CTRL-L
+           character is not pasted. (Dominique Pelle)
+Solution:   Escape the CTRL-L. (Christian Brabandt)
+Files:     src/ex_getln.c
+
+Patch 7.3.575
+Problem:    "ygt" tries to yank instead of giving an error. (Daniel Mueller)
+Solution:   Check for a pending operator.
+Files:     src/normal.c
+
+Patch 7.3.576
+Problem:    Formatting of lists inside comments is not right yet.
+Solution:   Use another solution and add a test. (Tor Perkins)
+Files:     src/edit.c, src/misc1.c, src/testdir/test68.in,
+           src/testdir/test69.ok
+
+Patch 7.3.577
+Problem:    Size of memory does not fit in 32 bit unsigned.
+Solution:   Use Kbyte instead of byte.  Call GlobalMemoryStatusEx() instead of
+           GlobalMemoryStatus() when available.
+Files:     src/misc2.c, src/option.c, src/os_amiga.c, src/os_msdos.c,
+           src/os_win16.c, src/os_win32.c
+
+Patch 7.3.578
+Problem:    Misplaced declaration.
+Solution:   Move declaration to start of block.
+Files:     src/if_py_both.h
+
+Patch 7.3.579 (after 7.3.569)
+Problem:    Can't compile with Python 2.5.
+Solution:   Use PyCObject when Capsules are not available.
+Files:     src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+Patch 7.3.580
+Problem:    Warning on 64 bit MS-Windows.
+Solution:   Add type cast. (Mike Williams)
+Files:     src/if_py_both.h
+
+Patch 7.3.581
+Problem:    Problems compiling with Python.
+Solution:   Pick UCS2 or UCS4 function at runtime. (lilydjwg)
+Files:     src/if_python.c
+
+Patch 7.3.582 (after 7.3.576)
+Problem:    Missing parts of the test OK file.
+Solution:   Add the missing parts.
+Files:     src/testdir/test68.ok
+
+Patch 7.3.583
+Problem:    PyObject_NextNotImplemented is not defined before Python 2.7.
+           (Danek Duvall)
+Solution:   Add #ifdefs.
+Files:     src/if_python.c
+
+Patch 7.3.584
+Problem:    PyCObject is not always defined.
+Solution:   Use PyObject instead.
+Files:     src/if_py_both.h, src/if_python.c
+
+Patch 7.3.585
+Problem:    Calling changed_bytes() too often.
+Solution:   Move changed_bytes() out of a loop. (Tor Perkins)
+Files:     src/edit.c
+
+Patch 7.3.586
+Problem:    When compiling with Cygwin or MingW MEMORYSTATUSEX is not defined.
+Solution:   Set the default for WINVER to 0x0500.
+Files:     src/Make_ming.mak, src/Make_cyg.mak
+
+Patch 7.3.587
+Problem:    Compiler warning for local var shadowing global var.
+Solution:   Rename the var and move it to an inner block. (Christian Brabandt)
+Files:     src/buffer.c
+
+Patch 7.3.588
+Problem:    Crash on NULL pointer.
+Solution:   Fix the immediate problem by checking for NULL. (Lech Lorens)
+Files:     src/window.c
+
+Patch 7.3.589
+Problem:    Crash when $HOME is not set.
+Solution:   Check for a NULL pointer. (Chris Webb)
+Files:     src/misc1.c
+
+Patch 7.3.590
+Problem:    The '< and '> marks cannot be set directly.
+Solution:   Allow setting '< and '>. (Christian Brabandt)
+Files:     src/mark.c
+
+Patch 7.3.591
+Problem:    Can only move to a tab by absolute number.
+Solution:   Move a number of tabs to the left or the right. (Lech Lorens)
+Files:     runtime/doc/tabpage.txt, src/ex_cmds.h, src/ex_docmd.c,
+           src/testdir/test62.in, src/testdir/test62.ok, src/window.c
+
+Patch 7.3.592
+Problem:    Vim on GTK does not support g:browsefilter.
+Solution:   Add a GtkFileFilter to the file chooser. (Christian Brabandt)
+Files:     src/gui_gtk.c
+
+Patch 7.3.593
+Problem:    No easy way to decide if b:browsefilter will work.
+Solution:   Add the browsefilter feature.
+Files:     src/gui_gtk.c, src/eval.c, src/vim.h
+
+Patch 7.3.594
+Problem:    The X command server doesn't work perfectly. It sends an empty
+           reply for as-keys requests.
+Solution:   Remove duplicate ga_init2(). Do not send a reply for as-keys
+           requests. (Brian Burns)
+Files:     src/if_xcmdsrv.c
+
+Patch 7.3.595
+Problem:    The X command server responds slowly
+Solution:   Change the loop that waits for replies. (Brian Burns)
+Files:     src/if_xcmdsrv.c
+
+Patch 7.3.596
+Problem:    Can't remove all signs for a file or buffer.
+Solution:   Support "*" for the sign id. (Christian Brabandt)
+Files:     runtime/doc/sign.txt, src/buffer.c, src/ex_cmds.c,
+           src/proto/buffer.pro
+
+Patch 7.3.597
+Problem:    'clipboard' "autoselect" only applies to the * register. (Sergey
+           Vakulenko)
+Solution:   Make 'autoselect' work for the + register. (Christian Brabandt)
+           Add the "autoselectplus" option in 'clipboard' and the "P" flag in
+           'guioptions'.
+Files:     runtime/doc/options.txt, src/normal.c, src/ops.c, src/screen.c,
+           src/ui.c, src/globals.h, src/proto/ui.pro, src/option.h, src/gui.c
+
+Patch 7.3.598
+Problem:    Cannot act upon end of completion. (Taro Muraoka)
+Solution:   Add an autocommand event that is triggered when completion has
+           finished. (Idea by Florian Klein)
+Files:     src/edit.c, src/fileio.c, src/vim.h
+
+Patch 7.3.599 (after 7.3.597)
+Problem:    Missing change in one file.
+Solution:   Patch for changed clip_autoselect().
+Files:     src/option.c
+
+Patch 7.3.600
+Problem:    <f-args> is not expanded properly with DBCS encoding.
+Solution:   Skip over character instead of byte. (Yukihiro Nakadaira)
+Files:     src/ex_docmd.c
+
+Patch 7.3.601
+Problem:    Bad code style.
+Solution:   Insert space, remove parens.
+Files:     src/farsi.c
+
+Patch 7.3.602
+Problem:    Missing files in distribution.
+Solution:   Update the list of files.
+Files:     Filelist
+
+Patch 7.3.603
+Problem:    It is possible to add replace builtin functions by calling
+           extend() on g:.
+Solution:   Add a flag to a dict to indicate it is a scope.  Check for
+           existing functions. (ZyX)
+Files:     src/buffer.c, src/eval.c, src/proto/eval.pro, src/structs.h,
+           src/testdir/test34.in, src/testdir/test34.ok, src/window.c
+
+Patch 7.3.604
+Problem:    inputdialog() doesn't use the cancel argument in the console.
+           (David Fishburn)
+Solution:   Use the third argument. (Christian Brabandt)
+Files:     src/eval.c
+
+Patch 7.3.605 (after 7.3.577)
+Problem:    MS-Windows: Can't compile with older compilers. (Titov Anatoly)
+Solution:   Add #ifdef for MEMORYSTATUSEX.
+Files:     src/os_win32.c
+
+Patch 7.3.606
+Problem:    CTRL-P completion has a problem with multi-byte characters.
+Solution:   Check for next character being NUL properly.  (Yasuhiro Matsumoto)
+Files:     src/search.c, src/macros.h
+
+Patch 7.3.607
+Problem:    With an 8 color terminal the selected menu item is black on black,
+           because darkGrey as bg is the same as black.
+Solution:   Swap fg and bg colors. (James McCoy)
+Files:     src/syntax.c
+
+Patch 7.3.608
+Problem:    winrestview() does not always restore the view correctly.
+Solution:   Call win_new_height() and win_new_width(). (Lech Lorens)
+Files:     src/eval.c, src/proto/window.pro, src/window.c
+
+Patch 7.3.609
+Problem:    File names in :checkpath! output are garbled.
+Solution:   Check for \zs in the pattern. (Lech Lorens)
+Files:     src/search.c, src/testdir/test17.in, src/testdir/test17.ok
+
+Patch 7.3.610
+Problem:    Cannot operate on the text that a search pattern matches.
+Solution:   Add the "gn" and "gN" commands. (Christian Brabandt)
+Files:     runtime/doc/index.txt, runtime/doc/visual.txt, src/normal.c,
+           src/proto/search.pro, src/search.c, src/testdir/test53.in,
+           src/testdir/test53.ok
+
+Patch 7.3.611
+Problem:    Can't use Vim dictionary as self argument in Python.
+Solution:   Fix the check for the "self" argument. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.612
+Problem:    Auto formatting messes up text when 'fo' contains "2". (ZyX)
+Solution:   Decrement "less_cols". (Tor Perkins)
+Files:     src/misc1.c, src/testdir/test68.in, src/testdir/test68.ok
+
+Patch 7.3.613
+Problem:    Including Python's config.c in the build causes trouble.  It is
+           not clear why it was there.
+Solution:   Omit the config file. (James McCoy)
+Files:     src/Makefile, src/auto/configure, src/configure.in
+
+Patch 7.3.614
+Problem:    Number argument gets turned into a number while it should be a
+           string.
+Solution:   Add flag to the call_vim_function() call. (Yasuhiro Matsumoto)
+Files:     src/edit.c, src/eval.c, src/proto/eval.pro
+
+Patch 7.3.615
+Problem:    Completion for a user command does not recognize backslash before
+           a space.
+Solution:   Recognize escaped characters. (Yasuhiro Matsumoto)
+Files:     src/ex_docmd.c
+
+Patch 7.3.616 (after 7.3.610)
+Problem:    Can't compile without +visual.
+Solution:   Add #ifdef.
+Files:     src/normal.c
+
+Patch 7.3.617 (after 7.3.615)
+Problem:    Hang on completion.
+Solution:   Skip over the space. (Yasuhiro Matsumoto)
+Files:     src/ex_docmd.c
+
+Patch 7.3.618 (after 7.3.616)
+Problem:    Still doesn't compile with small features.
+Solution:   Move current_search() out of #ifdef. (Dominique Pelle)
+Files:     src/normal.c, src/search.c
+
+Patch 7.3.619
+Problem:    When executing a shell command Vim may become slow to respond.
+Solution:   Don't wait after every processed message. (idea by Yasuhiro
+           Matsumoto)
+Files:     src/os_win32.c
+
+Patch 7.3.620
+Problem:    Building with recent Ruby on Win32 doesn't work.
+Solution:   Add a separate argument for the API version. (Yasuhiro Matsumoto)
+Files:     src/Make_ming.mak, src/Make_mvc.mak
+
+Patch 7.3.621
+Problem:    Compiler warnings on 64 bit windows.
+Solution:   Add type casts. (Mike Williams)
+Files:     src/ex_docmd.c, src/search.c
+
+Patch 7.3.622
+Problem:    XPM library for Win32 can't be found.
+Solution:   Suggest using the one from the Vim ftp site.
+Files:     src/Make_mvc.mak
+
+Patch 7.3.623
+Problem:    Perl 5.14 commands crash Vim on MS-Windows.
+Solution:   Use perl_get_sv() instead of GvSV(). (Raymond Ko)
+Files:     src/if_perl.xs
+
+Patch 7.3.624
+Problem:    When cancelling input() it returns the third argument. That should
+           only happen for inputdialog().
+Solution:   Check if inputdialog() was used. (Hirohito Higashi)
+Files:     src/eval.c
+
+Patch 7.3.625
+Problem:    "gn" does not handle zero-width matches correctly.
+Solution:   Handle zero-width patterns specially. (Christian Brabandt)
+Files:     src/search.c
+
+Patch 7.3.626
+Problem:    Python interface doesn't build with Python 2.4 or older.
+Solution:   Define Py_ssize_t. (Benjamin Bannier)
+Files:     src/if_py_both.h
+
+Patch 7.3.627
+Problem:    When using the "n" flag with the ":s" command a \= substitution
+           will not be evaluated.
+Solution:   Do perform the evaluation, so that a function can be invoked at
+           every matching position without changing the text. (Christian
+           Brabandt)
+Files:     src/ex_cmds.c
+
+Patch 7.3.628
+Problem:    ":open" does not allow for a !, which results in a confusing error
+           message. (Shawn Wilson)
+Solution:   Allow ! on ":open". (Christian Brabandt)
+Files:     src/ex_cmds.h
+
+Patch 7.3.629
+Problem:    There is no way to make 'shiftwidth' follow 'tabstop'.
+Solution:   When 'shiftwidth' is zero use the value of 'tabstop'. (Christian
+           Brabandt)
+Files:     src/edit.c, src/ex_getln.c, src/fold.c, src/misc1.c, src/ops.c,
+           src/option.c, src/proto/option.pro
+
+Patch 7.3.630
+Problem:    "|" does not behave correctly when 'virtualedit' is set.
+Solution:   Call validate_virtcol(). (David Bürgin)
+Files:     src/normal.c
+
+Patch 7.3.631
+Problem:    Cannot complete user names.
+Solution:   Add user name completion.  (Dominique Pelle)
+Files:     runtime/doc/map.txt, src/auto/configure, src/config.h.in,
+           src/configure.in, src/ex_docmd.c, src/ex_getln.c, src/misc1.c,
+           src/misc2.c, src/proto/misc1.pro, src/vim.h
+
+Patch 7.3.632
+Problem:    Cannot select beyond 222 columns with the mouse in xterm.
+Solution:   Add support for SGR mouse tracking. (Hayaki Saito)
+Files:     runtime/doc/options.txt, src/feature.h, src/keymap.h, src/misc2.c,
+           src/option.h, src/os_unix.c, src/term.c, src/version.c
+
+Patch 7.3.633
+Problem:    Selection remains displayed as selected after selecting another
+           text.
+Solution:   Call xterm_update() before select(). (Andrew Pimlott)
+Files:     src/os_unix.c
+
+Patch 7.3.634
+Problem:    Month/Day format for undo is confusing. (Marcin Szamotulski)
+Solution:   Always use Year/Month/Day, should work for everybody.
+Files:     src/undo.c
+
+Patch 7.3.635
+Problem:    Issue 21: System call during startup sets 'lines' to a wrong
+           value. (Karl Yngve)
+Solution:   Don't set the shell size while the GUI is still starting up.
+           (Christian Brabandt)
+Files:     src/ui.c
+
+Patch 7.3.636 (after 7.3.625)
+Problem:    Not all zero-width matches handled correctly for "gn".
+Solution:   Move zero-width detection to a separate function. (Christian
+           Brabandt)
+Files:     src/search.c
+
+Patch 7.3.637
+Problem:    Cannot catch the error caused by a foldopen when there is no fold.
+           (ZyX, Issue 48)
+Solution:   Do not break out of the loop early when inside try/catch.
+           (Christian Brabandt) Except when there is a syntax error.
+Files:     src/ex_docmd.c, src/globals.h
+
+Patch 7.3.638
+Problem:    Unnecessary redraw of the previous character.
+Solution:   Check if the character is double-width. (Jon Long)
+Files:     src/screen.c
+
+Patch 7.3.639
+Problem:    It's not easy to build Vim on Windows with XPM support.
+Solution:   Include the required files, they are quite small.  Update the
+           MSVC makefile to use them.  Binary files are in the next patch.
+           (Sergey Khorev)
+Files:     src/xpm/COPYRIGHT, src/xpm/README.txt, src/xpm/include/simx.h,
+           src/xpm/include/xpm.h, src/Make_mvc.mak, src/bigvim.bat,
+           src/bigvim64.bat, Filelist
+
+Patch 7.3.640
+Problem:    It's not easy to build Vim on Windows with XPM support.
+Solution:   Binary files for 7.3.639. (Sergey Khorev)
+Files:     src/xpm/x64/lib/libXpm.lib, src/xpm/x86/lib/libXpm.a,
+           src/xpm/x86/lib/libXpm.lib
+
+Patch 7.3.641
+Problem:    ":mkview" uses ":normal" instead of ":normal!" for folds. (Dan)
+Solution:   Add the bang. (Christian Brabandt)
+Files:     src/fold.c
+
+Patch 7.3.642
+Problem:    Segfault with specific autocommands.  Was OK after 7.3.449 and
+           before 7.3.545. (Richard Brown)
+Solution:   Pass TRUE for abort_if_last in the call to close_buffer().
+           (Christian Brabandt)
+Files:     src/window.c
+
+Patch 7.3.643 (after 7.3.635)
+Problem:    MS-Windows: When starting gvim maximized 'lines' and 'columns' are
+           wrong. (Christian Robinson)
+Solution:   Move the check for gui.starting from ui_get_shellsize() to
+           check_shellsize().
+Files:     src/ui.c, src/term.c
+
+Patch 7.3.644
+Problem:    Dead code for BeOS GUI.
+Solution:   Remove unused __BEOS__ stuff.
+Files:     src/gui.c
+
+Patch 7.3.645
+Problem:    No tests for patch 7.3.625 and 7.3.637.
+Solution:   Add more tests for the "gn" command and try/catch. (Christian
+           Brabandt)
+Files:     src/testdir/test53.in, src/testdir/test53.ok,
+           src/testdir/test55.in, src/testdir/test55.ok
+
+Patch 7.3.646
+Problem:    When reloading a buffer the undo file becomes unusable unless ":w"
+           is executed. (Dmitri Frank)
+Solution:   After reloading the buffer write the undo file. (Christian
+           Brabandt)
+Files:     src/fileio.c
+
+Patch 7.3.647
+Problem:    "gnd" doesn't work correctly in Visual mode.
+Solution:   Handle Visual mode differently in "gn". (Christian Brabandt)
+Files:     src/search.c, src/testdir/test53.in, src/testdir/test53.ok
+
+Patch 7.3.648
+Problem:    Crash when using a very long file name. (ZyX)
+Solution:   Properly check length of buffer space.
+Files:     src/buffer.c
+
+Patch 7.3.649
+Problem:    When 'clipboard' is set to "unnamed" small deletes end up in the
+           numbered registers. (Ingo Karkat)
+Solution:   Use the original register name to decide whether to put a delete
+           in a numbered register. (Christian Brabandt)
+Files:     src/ops.c
+
+Patch 7.3.650
+Problem:    Completion after ":help \{-" gives an error message and messes up
+           the command line.
+Solution:   Cancel the tag search if the pattern can't be compiled. (Yasuhiro
+           Matsumoto)
+Files:     src/tag.c
+
+Patch 7.3.651
+Problem:    Completion after ":help \{-" gives an error message.
+Solution:   Prepend a backslash.
+Files:     src/ex_cmds.c
+
+Patch 7.3.652
+Problem:    Workaround for Python crash isn't perfect.
+Solution:   Change the type of the length argument. (Sean Estabrooks)
+Files:     src/if_py_both.h
+
+Patch 7.3.653
+Problem:    MingW needs build rule for included XPM files.  Object directory
+           for 32 and 64 builds is the same, also for MSVC.
+Solution:   Add MingW build rule to use included XPM files.  Add the CPU or
+           architecture to the object directory name. (Sergey Khorev)
+Files:     src/Make_ming.mak, src/Make_mvc.mak, src/xpm/README.txt
+
+Patch 7.3.654
+Problem:    When creating a Vim dictionary from Python objects an empty key
+           might be used.
+Solution:   Do not use empty keys, throw an IndexError. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.655
+Problem:    64 bit MingW xpm .a file is missing.
+Solution:   Add the file. (Sergey Khorev)
+Files:     src/xpm/x64/lib/libXpm.a
+
+Patch 7.3.656
+Problem:    Internal error in :pyeval.
+Solution:   Handle failed object conversion. (ZyX)
+Files:     src/if_python.c, src/if_python3.c
+
+Patch 7.3.657
+Problem:    Python bindings silently truncate string values containing NUL.
+Solution:   Fail when a string contains NUL. (ZyX)
+Files:     src/if_python.c, src/if_python3.c
+
+Patch 7.3.658
+Problem:    NUL bytes truncate strings when converted from Python.
+Solution:   Handle truncation as an error. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c
+
+Patch 7.3.659
+Problem:    Recent Python changes are not tested.
+Solution:   Add tests for Python bindings. (ZyX)
+Files:     src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.660
+Problem:    ":help !" jumps to help for ":!".
+Solution:   Adjust check for tag header line. (Andy Wokula)
+Files:     src/tag.c
+
+Patch 7.3.661 (after 7.3.652)
+Problem:    SEGV in Python code.
+Solution:   Initialize len to zero.  Use the right function depending on
+           version. (Maxim Philippov)
+Files:     src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+Patch 7.3.662
+Problem:    Can't build Ruby interface with Ruby 1.9.3.
+Solution:   Add missing functions. (V. Ondruch)
+Files:     src/if_ruby.c
+
+Patch 7.3.663
+Problem:    End of color scheme name not clear in E185. (Aaron Lewis)
+Solution:   Put the name in single quotes.
+Files:     src/ex_docmd.c
+
+Patch 7.3.664
+Problem:    Buffer overflow in unescaping text. (Raymond Ko)
+Solution:   Limit check for multi-byte character to 4 bytes.
+Files:     src/mbyte.c
+
+Patch 7.3.665
+Problem:    MSVC 11 is not supported. (Raymond Ko)
+Solution:   Recognize MSVC 11. (Gary Willoughby)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.666
+Problem:    With MSVC 11 Win32.mak is not found.
+Solution:   Add the SDK_INCLUDE_DIR variable. (Raymond Ko)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.667
+Problem:    Unused variables in Perl interface.
+Solution:   Adjust #ifdefs.
+Files:     src/if_perl.xs
+
+Patch 7.3.668
+Problem:    Building with Perl loaded dynamically  still uses static library.
+Solution:   Adjust use of PL_thr_key. (Ken Takata)
+Files:     src/if_perl.xs
+
+Patch 7.3.669
+Problem:    When building with Cygwin loading Python dynamically fails.
+Solution:   Use DLLLIBRARY instead of INSTSONAME. (Ken Takata)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.670
+Problem:    Python: memory leaks when there are exceptions.
+Solution:   Add DICTKEY_UNREF in the right places. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.671
+Problem:    More Python code can be shared between Python 2 and 3.
+Solution:   Move code to if_py_both.h. (ZyX)
+Files:     src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+Patch 7.3.672
+Problem:    Not possible to lock/unlock lists in Python interface.
+Solution:   Add .locked and .scope attributes. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python.c,
+           src/if_python3.c, src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.673
+Problem:    Using "gN" while 'selection' is "exclusive" misses one character.
+           (Ben Fritz)
+Solution:   Check the direction when compensating for exclusive selection.
+           (Christian Brabandt)
+Files:     src/search.c
+
+Patch 7.3.674
+Problem:    Can't compile with Lua/dyn on Cygwin.
+Solution:   Adjust configure to use the right library name. (Ken Takata)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.675
+Problem:    Using uninitialized memory with very long file name.
+Solution:   Put NUL after text when it is truncated. (ZyX)
+Files:     src/buffer.c
+
+Patch 7.3.676
+Problem:    Ruby compilation on Windows 32 bit doesn't work.
+Solution:   Only use some functions for 64 bit. (Ken Takata)
+Files:     src/if_ruby.c
+
+Patch 7.3.677
+Problem:    buf_spname() is used inconsistently.
+Solution:   Make the return type a char_u pointer.  Check the size of the
+           returned string.
+Files:     src/buffer.c, src/proto/buffer.pro, src/ex_cmds2.c,
+           src/ex_docmd.c, src/memline.c, src/screen.c
+
+Patch 7.3.678
+Problem:    Ruby .so name may not be correct.
+Solution:   Use the LIBRUBY_SO entry from the config. (Vit Ondruch)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.679
+Problem:    Ruby detection uses Config, newer Ruby versions use RbConfig.
+Solution:   Detect the need to use RbConfig. (Vit Ondruch)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.680
+Problem:    Some files missing in the list of distributed files.
+Solution:   Add lines for new files.
+Files:     Filelist
+
+Patch 7.3.681 (after 7.3.680)
+Problem:    List of distributed files picks up backup files.
+Solution:   Make tutor patterns more specific.
+Files:     Filelist
+
+Patch 7.3.682 (after 7.3.677)
+Problem:    Compiler complains about incompatible types.
+Solution:   Remove type casts. (hint by Danek Duvall)
+Files:     src/edit.c 
+
+Patch 7.3.683
+Problem:    ":python" may crash when vimbindeval() returns None.
+Solution:   Check for v_string to be NULL. (Yukihiro Nakadaira)
+Files:     src/if_py_both.h
+
+Patch 7.3.684
+Problem:    "make test" does not delete lua.vim.
+Solution:   Add lua.vim to the clean target. (Simon Ruderich)
+Files:     src/testdir/Makefile, src/testdir/Make_dos.mak,
+           src/testdir/Make_ming.mak, src/testdir/Make_vms.mms
+
+Patch 7.3.685
+Problem:    No test for what patch 7.3.673 fixes.
+Solution:   Add a test. (Christian Brabandt)
+Files:     src/testdir/test53.in, src/testdir/test53.ok
+
+Patch 7.3.686
+Problem:    Using CTRL-\ e mappings is useful also when entering an
+           expression, but it doesn't work. (Marcin Szamotulski)
+Solution:   Allow using CTRL-\ e when entering an expression if it was not
+           typed.
+Files:     src/ex_getln.c
+
+Patch 7.3.687
+Problem:    Test 16 fails when $DISPLAY is not set.
+Solution:   Skip the test when $DISPLAY is not set.
+Files:     src/testdir/test16.in
+
+Patch 7.3.688
+Problem:    Python 3.3 is not supported.
+Solution:   Add Python 3.3 support (Ken Takata)
+Files:     src/if_python3.c
+
+Patch 7.3.689
+Problem:    MzScheme and Lua may use a NULL string.
+Solution:   Use an empty string instead of NULL. (Yukihiro Nakadaira)
+Files:     src/if_lua.c, src/if_mzsch.c
+
+Patch 7.3.690
+Problem:    When the current directory name is exactly the maximum path length
+           Vim may crash.
+Solution:   Only add "/" when there is room. (Danek Duvall)
+Files:     src/os_unix.c
+
+Patch 7.3.691
+Problem:    State specific to the Python thread is discarded.
+Solution:   Keep state between threads. (Paul)
+Files:     src/if_python.c
+
+Patch 7.3.692
+Problem:    Can't build GTK version with GTK 2.0.
+Solution:   Put GtkFileFilter declaration in the right place. (Yegappan
+           Lakshmanan)
+Files:     src/gui_gtk.c
+
+Patch 7.3.693
+Problem:    Can't make 'softtabstop' follow 'shiftwidth'.
+Solution:   When 'softtabstop' is negative use the value of 'shiftwidth'.
+           (so8res)
+Files:     src/edit.c, src/option.c, src/proto/option.pro
+
+Patch 7.3.694
+Problem:    Now that 'shiftwidth' may use the value of 'tabstop' it is not so
+           easy to use in indent files.
+Solution:   Add the shiftwidth() function. (so8res)
+Files:     runtime/doc/eval.txt, src/eval.c
+
+Patch 7.3.695
+Problem:    Balloon cannot show multi-byte text.
+Solution:   Properly deal with multi-byte characters. (Dominique Pelle)
+Files:     src/gui_beval.c, src/ui.c
+
+Patch 7.3.696
+Problem:    Message about added spell language can be wrong.
+Solution:   Give correct message. Add g:menutrans_set_lang_to to allow for
+           translation. (Jiri Sedlak)
+Files:     runtime/menu.vim
+
+Patch 7.3.697
+Problem:    Leaking resources when setting GUI font.
+Solution:   Free the font. (Ken Takata)
+Files:     src/syntax.c
+
+Patch 7.3.698
+Problem:    Python 3 does not preserve state between commands.
+Solution:   Preserve the state. (Paul Ollis)
+Files:     src/if_python.c, src/if_python3.c
+
+Patch 7.3.699
+Problem:    When 'ttymouse' is set to "sgr" manually, it is overruled by
+           automatic detection.
+Solution:   Do not use automatic detection when 'ttymouse' was set manually.
+           (Hayaki Saito)
+Files:     src/term.c
+
+Patch 7.3.700
+Problem:    Cannot detect URXVT and SGR mouse support.
+Solution:   add +mouse_urxvt and +mouse_sgr. (Hayaki Saito)
+Files:     src/feature.h, src/eval.c
+
+Patch 7.3.701
+Problem:    MS-Windows: Crash with stack overflow when setting 'encoding'.
+Solution:   Handle that loading the iconv library may be called recursively.
+           (Jiri Sedlak)
+Files:     src/os_win32.c
+
+Patch 7.3.702
+Problem:    Nmake from VS6 service pack 6 is not recognized.
+Solution:   Detect the version number. (Jiri Sedlak)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.703
+Problem:    When 'undofile' is reset the hash is computed unnecessarily.
+Solution:   Only compute the hash when the option was set. (Christian Brabandt)
+Files:     src/option.c
+
+Patch 7.3.704
+Problem:    Repeating "cgn" does not always work correctly.
+Solution:   Also fetch the operator character. (Christian Brabandt)
+Files:     src/normal.c
+
+Patch 7.3.705
+Problem:    Mouse features are not sorted properly. (Tony Mechelynck)
+Solution:   Put the mouse features in alphabetical order.
+Files:     src/version.c
+
+Patch 7.3.706 (after 7.3.697)
+Problem:    Can't build Motif version.
+Solution:   Fix wrongly named variable. (Ike Devolder)
+Files:     src/syntax.c
+
+Patch 7.3.707 (after 7.3.701)
+Problem:    Problems loading a library for a file name with non-latin
+           characters.
+Solution:   Use wide system functions when possible. (Ken Takata)
+Files:     src/os_win32.c, src/os_win32.h
+
+Patch 7.3.708
+Problem:    Filler lines above the first line may be hidden when opening Vim.
+Solution:   Change how topfill is computed. (Christian Brabandt)
+Files:     src/diff.c, src/testdir/test47.in, src/testdir/test47.ok
+
+Patch 7.3.709
+Problem:    Compiler warning for unused argument.
+Solution:   Add UNUSED.
+Files:     src/eval.c
+
+Patch 7.3.710 (after 7.3.704)
+Problem:    Patch 7.3.704 breaks "fn".
+Solution:   Add check for ca.cmdchar. (Christian Brabandt)
+Files:     src/normal.c
+
+Patch 7.3.711 (after 7.3.688)
+Problem:    vim.current.buffer is not available. (lilydjwg)
+Solution:   Use py3_PyUnicode_AsUTF8 instead of py3_PyUnicode_AsUTF8String.
+           (Ken Takata)
+Files:     src/if_python3.c
+
+Patch 7.3.712
+Problem:    Nmake from VS2010 SP1 is not recognized.
+Solution:   Add the version number. (Ken Takata)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.713
+Problem:    printf() can only align to bytes, not characters.
+Solution:   Add the "S" item. (Christian Brabandt)
+Files:     runtime/doc/eval.txt, src/message.c
+
+Patch 7.3.714
+Problem:    Inconsistency: :set can be used in the sandbox, but :setlocal and
+           :setglobal cannot. (Michael Henry)
+Solution:   Fix the flags for :setlocal and :setglobal. (Christian Brabandt)
+Files:     src/ex_cmds.h
+
+Patch 7.3.715
+Problem:    Crash when calling setloclist() in BufUnload autocmd. (Marcin
+           Szamotulski)
+Solution:   Set w_llist to NULL when it was freed.  Also add a test.
+           (Christian Brabandt)
+Files:     src/quickfix.c, src/testdir/test49.ok, src/testdir/test49.vim
+
+Patch 7.3.716
+Problem:    Error on exit when using Python 3.
+Solution:   Remove PythonIO_Fini(). (Roland Puntaier)
+Files:     src/if_python3.c
+
+Patch 7.3.717
+Problem:    When changing the font size, only MS-Windows limits the window
+           size.
+Solution:   Also limit the window size on other systems. (Roland Puntaier)
+Files:     src/gui.c
+
+Patch 7.3.718
+Problem:    When re-using the current buffer the buffer-local options stay.
+Solution:   Re-initialize the buffer-local options. (Christian Brabandt)
+Files:     src/buffer.c
+
+Patch 7.3.719
+Problem:    Cannot run new version of cproto, it fails on missing include
+           files.
+Solution:   Add lots of #ifndef PROTO
+Files:     src/os_amiga.c, src/os_amiga.h, src/gui_w16.c, src/gui_w48.c,
+           src/gui_w32.c, src/vimio.h, src/os_msdos.c, src/os_msdos.h,
+           src/os_win16.h, src/os_win16.c, src/os_win32.h, src/os_win32.c,
+           src/os_mswin.c, src/gui_photon.c, src/os_unix.h, src/os_beos.c,
+           src/os_beos.h
+
+Patch 7.3.720
+Problem:    Proto files are outdated.
+Solution:   Update the newly generated proto files.
+Files:     src/proto/digraph.pro, src/proto/fold.pro, src/proto/misc1.pro,
+           src/proto/move.pro, src/proto/screen.pro, src/proto/search.pro,
+           src/proto/os_win32.pro, src/proto/os_mswin.pro,
+           src/proto/os_beos.pro
+
+Patch 7.3.721
+Problem:    Ruby interface defines local functions globally.
+Solution:   Make the functions static.
+Files:     src/if_ruby.c
+
+Patch 7.3.722
+Problem:    Perl flags may contain "-g", which breaks "make proto".
+Solution:   Filter out the "-g" flag for cproto. (Ken Takata)
+Files:     src/Makefile
+
+Patch 7.3.723
+Problem:    Various tiny problems.
+Solution:   Various tiny fixes.
+Files:     src/gui_mac.c, src/xpm_w32.c, src/netbeans.c, src/sha256.c,
+           src/if_sniff.c, README.txt
+
+Patch 7.3.724
+Problem:    Building with Ruby and Tcl on MS-Windows 64 bit does not work.
+Solution:   Remove Ruby and Tcl from the big MS-Windows build.
+Files:     src/bigvim64.bat
+
+Patch 7.3.725
+Problem:    :aboveleft and :belowright have no effect on :copen.
+Solution:   Check for cmdmod.split. (Christian Brabandt)
+Files:     src/quickfix.c
+
+Patch 7.3.726
+Problem:    Typos and duplicate info in README.
+Solution:   Fix the text.
+Files:     README.txt
+
+Patch 7.3.727
+Problem:    Can't always find Win32.mak when building GvimExt.
+Solution:   Use same mechanism as in Make_mvc.mak. (Cade Foster)
+Files:     src/GvimExt/Makefile
+
+Patch 7.3.728
+Problem:    Cannot compile with MzScheme interface on Ubuntu 12.10.
+Solution:   Find the collects directory under /usr/share.
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.729
+Problem:    Building with Ruby fails on some systems.
+Solution:   Remove "static" and add #ifndef PROTO. (Ken Takata)
+Files:     src/if_ruby.c
+
+Patch 7.3.730
+Problem:    Crash in PHP file when using syntastic. (Ike Devolder)
+Solution:   Avoid using NULL pointer. (Christian Brabandt)
+Files:     src/quickfix.c
+
+Patch 7.3.731
+Problem:    Py3Init_vim() is exported unnecessarily.
+Solution:   Make it static. (Ken Takata)
+Files:     src/if_python3.c
+
+Patch 7.3.732
+Problem:    Compiler warnings for function arguments.
+Solution:   Use inteptr_t instead of long.
+Files:     src/if_mzsch.c, src/main.c
+
+Patch 7.3.733
+Problem:    Tests fail when including MzScheme.
+Solution:   Change #ifdefs for vim_main2().
+Files:     src/main.c
+
+Patch 7.3.734
+Problem:    Cannot put help files in a sub-directory.
+Solution:   Make :helptags work for sub-directories. (Charles Campbell)
+Files:     src/ex_cmds.c
+
+Patch 7.3.735
+Problem:    Cannot build Ruby 1.9 with MingW or Cygwin.
+Solution:   Add another include directory. (Ken Takata)
+Files:     src/Make_cyg.mak, src/Make_ming.mak
+
+Patch 7.3.736
+Problem:    File name completion in input() escapes white space. (Frederic
+           Hardy)
+Solution:   Do not escape white space. (Christian Brabandt)
+Files:     src/ex_getln.c
+
+Patch 7.3.737
+Problem:    When using do_cmdline() recursively did_endif is not reset,
+           causing messages to be overwritten.
+Solution:   Reset did_endif. (Christian Brabandt)
+Files:     src/ex_docmd.c
+
+Patch 7.3.738 (after 7.3.730)
+Problem:    Unused function argument.
+Solution:   Remove it. (Christian Brabandt)
+Files:     src/quickfix.c
+
+Patch 7.3.739
+Problem:    Computing number of lines may have an integer overflow.
+Solution:   Check for MAXCOL explicitly. (Dominique Pelle)
+Files:     src/move.c
+
+Patch 7.3.740
+Problem:    IOC tool complains about undefined behavior for int.
+Solution:   Change to unsigned int. (Dominique Pelle)
+Files:     src/hashtab.c, src/misc2.c
+
+Patch 7.3.741 (after 7.3.737)
+Problem:    Tiny build fails.
+Solution:   Move #ifdef. (Ike Devolder)
+Files:     src/ex_docmd.c
+
+Patch 7.3.742
+Problem:    Leaking memory when :vimgrep restores the directory.
+Solution:   Free the allocated memory. (Christian Brabandt)
+Files:     src/quickfix.c
+
+Patch 7.3.743 (after 7.3.741)
+Problem:    Tiny build still fails.
+Solution:   Add #else in the right place.
+Files:     src/ex_docmd.c
+
+Patch 7.3.744
+Problem:    64 bit compiler warning.
+Solution:   Add type cast. (Mike Williams)
+Files:     src/ex_cmds.c
+
+Patch 7.3.745
+Problem:    Automatically setting 'ttymouse' doesn't work.
+Solution:   Reset the "option was set" flag when using the default.
+Files:     src/option.c, src/proto/option.pro, src/term.c
+
+Patch 7.3.746
+Problem:    Memory leaks when using location lists.
+Solution:   Set qf_title to something. (Christian Brabandt)
+Files:     src/eval.c, src/quickfix.c
+
+Patch 7.3.747
+Problem:    When characters are concealed text aligned with tabs are no longer
+           aligned, e.g. at ":help :index".
+Solution:   Compensate space for tabs for concealed characters. (Dominique
+           Pelle)
+Files:     src/screen.c
+
+Patch 7.3.748
+Problem:    Cannot properly test conceal mode.
+Solution:   Add the screencol() and screenrow() functions.  Use them in
+           test88. (Simon Ruderich)
+Files:     runtime/doc/eval.txt, src/eval.c, src/proto/screen.pro,
+           src/screen.c, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+           src/testdir/Makefile, src/testdir/test88.in,
+           src/testdir/test88.ok,
+
+Patch 7.3.749
+Problem:    Python interface doesn't build without the multi-byte feature.
+Solution:   Add #ifdef. (Ken Takata)
+Files:     src/if_py_both.h
+
+Patch 7.3.750
+Problem:    The justify macro does not always work correctly.
+Solution:   Fix off-by-one error (James McCoy)
+Files:     runtime/macros/justify.vim
+
+Patch 7.3.751
+Problem:    Test 61 is flaky, it fails once in a while.
+Solution:   When it fails retry once.
+Files:     src/testdir/Makefile
+
+Patch 7.3.752
+Problem:    Test 49 script file doesn't fold properly.
+Solution:   Add a colon.
+Files:     src/testdir/test49.vim
+
+Patch 7.3.753
+Problem:    When there is a QuitPre autocommand using ":q" twice does not work
+           for exiting when there are more files to edit.
+Solution:   Do not decrement quitmore in an autocommand. (Techlive Zheng)
+Files:     src/ex_docmd.c, src/fileio.c, src/proto/fileio.pro
+
+Patch 7.3.754
+Problem:    Latest nmake is not recognized.
+Solution:   Add nmake version 11.00.51106.1. (Raymond Ko)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.755
+Problem:    Autoconf doesn't find Python 3 if it's called "python".
+Solution:   Search for "python2" and "python3" first, then "python".
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.756
+Problem:    A location list can get a wrong count in :lvimgrep.
+Solution:   Check if the list was changed by autocommands. (mostly by
+           Christian Brabandt)
+Files:     src/quickfix.c
+
+Patch 7.3.757
+Problem:    Issue 96: May access freed memory when a put command triggers
+           autocommands. (Dominique Pelle)
+Solution:   Call u_save() before getting y_array.
+Files:     src/ops.c
+
+Patch 7.3.758
+Problem:    Matchit plugin does not handle space in #ifdef.
+Solution:   Change matching pattern to allow spaces. (Mike Morearty)
+Files:     runtime/macros/matchit.vim
+
+Patch 7.3.759
+Problem:    MS-Windows: Updating the tabline is slow when there are many tabs.
+Solution:   Disable redrawing while performing the update. (Arseny Kapoulkine)
+Files:     src/gui_w48.c
+
+Patch 7.3.760
+Problem:    dv_ deletes the white space before the line.
+Solution:   Move the cursor to the first non-white. (Christian Brabandt)
+Files:     src/normal.c, src/testdir/test19.in, src/testdir/test19.ok
+
+Patch 7.3.761
+Problem:    In Visual mode a "-p does not work. (Marcin Szamotulski)
+Solution:   Avoid writing to "- before putting it. (Christian Brabandt)
+Files:     src/normal.c, src/testdir/test48.in, src/testdir/test48.ok
+
+Patch 7.3.762 (after 7.3.759)
+Problem:    On some systems the tabline is not redrawn.
+Solution:   Call RedrawWindow(). (Charles Peacech)
+Files:     src/gui_w48.c
+
+Patch 7.3.763
+Problem:    Jumping to a mark does not open a fold if it is in the same line.
+           (Wiktor Ruben)
+Solution:   Also compare the column after the jump. (Christian Brabandt)
+Files:     src/normal.c
+
+Patch 7.3.764
+Problem:    Not all message translation files are installed.
+Solution:   Also install the converted files.
+Files:     src/po/Makefile
+
+Patch 7.3.765
+Problem:    Segfault when doing "cclose" on BufUnload in a python function.
+           (Sean Reifschneider)
+Solution:   Skip window with NULL buffer. (Christian Brabandt)
+Files:     src/main.c, src/window.c
+
+Patch 7.3.766
+Problem:    ":help cpo-*" jumps to the wrong place.
+Solution:   Make it equivalent to ":help cpo-star".
+Files:     src/ex_cmds.c
+
+Patch 7.3.767
+Problem:    (Win32) The _errno used for iconv may be the wrong one.
+Solution:   Use the _errno from iconv.dll. (Ken Takata)
+Files:     src/mbyte.c
+
+Patch 7.3.768
+Problem:    settabvar() and setwinvar() may move the cursor.
+Solution:   Save and restore the cursor position when appropriate. (idea by
+           Yasuhiro Matsumoto)
+Files:     src/edit.c
+
+Patch 7.3.769
+Problem:    'matchpairs' does not work with multi-byte characters.
+Solution:   Make it work. (Christian Brabandt)
+Files:     src/misc1.c, src/option.c, src/proto/option.pro, src/search.c,
+           src/testdir/test69.in, src/testdir/test69.ok
+
+Patch 7.3.770
+Problem:    Vim.h indentation is inconsistent.
+Solution:   Adjust the indentation. (Elias Diem)
+Files:     src/vim.h
+
+Patch 7.3.771 (after 7.3.769)
+Problem:    Uninitialized variable. (Yasuhiro Matsumoto)
+Solution:   Set x2 to -1.
+Files:     src/option.c
+
+Patch 7.3.772
+Problem:    Cursor is at the wrong location and below the end of the file
+           after doing substitutions with confirm flag: %s/x/y/c
+           (Dominique Pelle)
+Solution:   Update the cursor position. (Christian Brabandt & Dominique)
+Files:     src/ex_cmds.c
+
+Patch 7.3.773 (after 7.3.767)
+Problem:    Crash when OriginalFirstThunk is zero.
+Solution:   Skip items with OriginalFirstThunk not set. (Ken Takata)
+Files:     src/mbyte.c
+
+Patch 7.3.774
+Problem:    Tiny GUI version misses console dialog feature.
+Solution:   Define FEAT_CON_DIALOG when appropriate. (Christian Brabandt)
+Files:     src/feature.h, src/gui.h
+
+Patch 7.3.775
+Problem:    Cygwin and Mingw builds miss dependency on gui_w48.c.
+Solution:   Add a build rule. (Ken Takata)
+Files:     src/Make_cyg.mak, src/Make_ming.mak
+
+Patch 7.3.776
+Problem:    ml_get error when searching, caused by curwin not matching curbuf.
+Solution:   Avoid changing curbuf. (Lech Lorens)
+Files:     src/charset.c, src/eval.c, src/mark.c, src/proto/charset.pro,
+           src/proto/mark.pro, src/regexp.c, src/syntax.c,
+
+Patch 7.3.777
+Problem:    When building with Gnome locale gets reset.
+Solution:   Set locale after gnome_program_init(). (Christian Brabandt)
+Files:     src/gui_gtk_x11.c
+
+Patch 7.3.778
+Problem:    Compiler error for adding up two pointers. (Titov Anatoly)
+Solution:   Add a type cast. (Ken Takata)
+Files:     src/mbyte.c
+
+Patch 7.3.779
+Problem:    Backwards search lands in wrong place when started on a multibyte
+           character.
+Solution:   Do not set extra_col for a backwards search. (Sung Pae)
+Files:     src/search.c, src/testdir/test44.in, src/testdir/test44.ok
+
+Patch 7.3.780
+Problem:    char2nr() and nr2char() always use 'encoding'.
+Solution:   Add argument to use utf-8 characters. (Yasuhiro Matsumoto)
+Files:     runtime/doc/eval.txt, src/eval.c
+
+Patch 7.3.781
+Problem:    Drawing with 'guifontwide' can be slow.
+Solution:   Draw multiple characters at a time. (Taro Muraoka)
+Files:     src/gui.c
+
+Patch 7.3.782
+Problem:    Windows: IME composition may use a wrong font.
+Solution:   Use 'guifontwide' for IME when it is set. (Taro Muraoka)
+Files:     runtime/doc/options.txt, src/gui.c, src/gui_w48.c,
+           src/proto/gui_w16.pro, src/proto/gui_w32.pro
+
+Patch 7.3.783
+Problem:    Crash when mark is not set. (Dominique Pelle)
+Solution:   Check for NULL.
+Files:     src/normal.c
+
+Patch 7.3.784 (after 7.3.781)
+Problem:    Error when 'guifontwide' has a comma.
+Solution:   Use gui.wide_font. (Taro Muraoka)
+Files:     src/gui_w48.c
+
+Patch 7.3.785 (after 7.3.776)
+Problem:    Crash with specific use of search pattern.
+Solution:   Initialize reg_buf to curbuf.
+Files:     src/regexp.c
+
+Patch 7.3.786
+Problem:    Python threads don't run in the background (issue 103).
+Solution:   Move the statements to manipulate thread state.
+Files:     src/if_python.c
+
+Patch 7.3.787
+Problem:    With 'relativenumber' set it is not possible to see the absolute
+           line number.
+Solution:   For the cursor line show the absolute line number instead of a
+           zero. (Nazri Ramliy)
+Files:     src/screen.c
+
+Patch 7.3.788
+Problem:    When only using patches build fails on missing nl.po.
+Solution:   Create an empty nl.po file.
+Files:     src/po/Makefile
+
+Patch 7.3.789 (after 7.3.776)
+Problem:    "\k" in regexp does not work in other window.
+Solution:   Use the right buffer. (Yukihiro Nakadaira)
+Files:     src/mbyte.c, src/proto/mbyte.pro, src/regexp.c
+
+Patch 7.3.790
+Problem:    After reloading a buffer the modelines are not processed.
+Solution:   call do_modelines(). (Ken Takata)
+Files:     src/fileio.c
+
+Patch 7.3.791
+Problem:    MzScheme interface doesn't work properly.
+Solution:   Make it work better. (Sergey Khorev)
+Files:     runtime/doc/if_mzsch.txt, src/configure.in, src/auto/configure,
+           src/eval.c, src/if_mzsch.c, src/if_mzsch.h, src/Make_ming.mak,
+           src/Make_mvc.mak, src/os_unix.c, src/proto/eval.pro,
+           src/testdir/test70.in, src/testdir/test70.ok
+
+Patch 7.3.792
+Problem:    ":substitute" works differently without confirmation.
+Solution:   Do not change the text when asking for confirmation, only display
+           it.
+Files:     src/ex_cmds.c
+
+Patch 7.3.793 (after 7.3.792)
+Problem:    New interactive :substitute behavior is not tested.
+Solution:   Add tests. (Christian Brabandt)
+Files:     src/testdir/test80.in, src/testdir/test80.ok
+
+Patch 7.3.794
+Problem:    Tiny build fails. (Tony Mechelynck)
+Solution:   Adjust #ifdefs.
+Files:     src/charset.c
+
+Patch 7.3.795
+Problem:    MzScheme does not build with tiny features.
+Solution:   Add #ifdefs.  Also add UNUSED to avoid warnings.  And change
+           library ordering.
+Files:     src/if_mzsch.c, src/Makefile
+
+Patch 7.3.796
+Problem:    "/[^\n]" does match at a line break.
+Solution:   Make it do the same as "/.". (Christian Brabandt)
+Files:     src/regexp.c, src/testdir/test79.in, src/testdir/test79.ok
+
+Patch 7.3.797 (after 7.3.792)
+Problem:    Compiler warning for size_t to int conversion. (Skeept)
+Solution:   Add type casts.
+Files:     src/ex_cmds.c
+
+Patch 7.3.798 (after 7.3.791)
+Problem:    MzScheme: circular list does not work correctly.
+Solution:   Separate Mac-specific code from generic code. (Sergey Khorev)
+Files:     src/if_mzsch.c, src/testdir/test70.in
+
+Patch 7.3.799
+Problem:    The color column is not correct when entering a buffer. (Ben
+           Fritz)
+Solution:   Call check_colorcolumn() if 'textwidth' changed. (Christian
+           Brabandt)
+Files:     src/buffer.c
+
+Patch 7.3.800
+Problem:    The " mark is not adjusted when inserting lines. (Roland Eggner)
+Solution:   Adjust the line number. (Christian Brabandt)
+Files:     src/mark.c
+
+Patch 7.3.801
+Problem:    ":window set nu?" displays the cursor line. (Nazri Ramliy)
+Solution:   Do not update the cursor line when conceallevel is zero or the
+           screen has scrolled. (partly by Christian Brabandt)
+Files:     src/window.c
+
+Patch 7.3.802
+Problem:    After setting 'isk' to a value ending in a comma appending to the
+           option fails.
+Solution:   Disallow a trailing comma for 'isk' and similar options.
+Files:     src/charset.c
+
+Patch 7.3.803 (after 7.3.792)
+Problem:    Substitute with confirmation and then "q" does not replace
+           anything.  (John McGowan)
+Solution:   Do not break the loop, skip to the end.
+Files:     src/ex_cmds.c, src/testdir/test80.in, src/testdir/test80.ok
+
+Patch 7.3.804 (after 7.3.799)
+Problem:    Compiler warning for tiny build. (Tony Mechelynck)
+Solution:   Add #ifdefs around variable.
+Files:     src/buffer.c
+
+Patch 7.3.805
+Problem:    Lua version 5.2 is not detected properly on Arch Linux.
+Solution:   Adjust autoconf. (lilydjwg)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.806
+Problem:    Compiler warnings in Perl code when building with Visual studio
+           2012. (skeept)
+Solution:   Add type casts. (Christian Brabandt, 2013 Jan 30)
+Files:     src/if_perl.xs
+
+Patch 7.3.807
+Problem:    Popup menu does not work properly with the preview window, folds
+           and 'cursorcolumn'.
+Solution:   Redraw the popup menu after redrawing windows. (Christian
+           Brabandt)
+Files:     src/screen.c
+
+Patch 7.3.808
+Problem:    Python threads still do not work properly.
+Solution:   Fix both Python 2 and 3.  Add tests. (Ken Takata)
+Files:     src/if_python.c, src/if_python3.c, src/testdir/test86.in,
+           src/testdir/test86.ok, src/testdir/test87.in,
+           src/testdir/test87.ok
+
+Patch 7.3.809
+Problem:    The dosinst.c program has a buffer overflow. (Thomas Gwae)
+Solution:   Ignore $VIMRUNTIME if it is too long.
+Files:     src/dosinst.c
+
+Patch 7.3.810
+Problem:    'relativenumber' is reset unexpectedly. (François Ingelrest)
+Solution:   After an option was reset also reset the global value. Add a test.
+           (Christian Brabandt)
+Files:     src/option.c, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+           src/testdir/Makefile, src/testdir/test89.in,
+           src/testdir/test89.ok
+
+Patch 7.3.811
+Problem:    Useless termresponse parsing for SGR mouse.
+Solution:   Skip the parsing. (Hayaki Saito)
+Files:     src/term.c
+
+Patch 7.3.812
+Problem:    When 'indentexpr' moves the cursor "curswant" not restored.
+Solution:   Restore "curswant". (Sung Pae)
+Files:     src/misc1.c
+
+Patch 7.3.813
+Problem:    The CompleteDone event is not triggered when there are no pattern
+           matches. (Jianjun Mao)
+Solution:   Trigger the event. (Christian Brabandt)
+Files:     src/edit.c
+
+Patch 7.3.814
+Problem:    Can't input multibyte characters on Win32 console if 'encoding' is
+           different from current codepage.
+Solution:   Use convert_input_safe() instead of convert_input().  Make
+           string_convert_ext() return an error for incomplete input. (Ken
+           Takata)
+Files:     src/mbyte.c, src/os_win32.c
+
+Patch 7.3.815
+Problem:    Building with Cygwin and Ruby doesn't work.
+Solution:   Copy some things from the MingW build file. (Ken Takata)
+Files:     src/Make_cyg.mak
+
+Patch 7.3.816
+Problem:    Can't compute a hash.
+Solution:   Add the sha256() function. (Tyru, Hirohito Higashi)
+Files:     runtime/doc/eval.txt, src/eval.c, src/proto/sha256.pro,
+           src/sha256.c, src/testdir/test90.in, src/testdir/test90.ok,
+           src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+           src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+           src/testdir/Make_vms.mms, src/testdir/Makefile
+
+Patch 7.3.817
+Problem:    Test 89 fails with tiny and small features.
+Solution:   Add sourcing small.vim.
+Files:     src/testdir/test89.in
+
+Patch 7.3.818
+Problem:    When test 40 fails because of a bad build it may leave files
+           behind that cause it to fail later.
+Solution:   Let the file names start with "X".
+Files:     src/testdir/test40.in
+
+Patch 7.3.819
+Problem:    Compiling without +eval and with Python isn't working.
+Solution:   Add the eval feature when building with Python.
+Files:     src/if_py_both.h, src/feature.h, src/eval.c, src/ex_docmd.c,
+           src/normal.c, src/ex_docmd.c, src/gui_gtk_x11.c
+
+Patch 7.3.820
+Problem:    Build errors and warnings when building with small features and
+           Lua, Perl or Ruby.
+Solution:   Add #ifdefs and UNUSED.
+Files:     src/if_perl.xs, src/if_lua.c, src/if_ruby.c
+
+Patch 7.3.821
+Problem:    Build with OLE and Cygwin is broken. (Steve Hall)
+Solution:   Select static or shared stdc library. (Ken Takata)
+Files:     src/Make_cyg.mak
+
+Patch 7.3.822 (after 7.3.799)
+Problem:    Crash when accessing freed buffer.
+Solution:   Get 'textwidth' in caller of enter_buffer(). (Christian Brabandt)
+Files:     src/buffer.c
+
+Patch 7.3.823 (after 7.3.821)
+Problem:    Building with Cygwin: '-lsupc++' is not needed.
+Solution:   Remove it. (Ken Takata)
+Files:     src/Make_cyg.mak
+
+Patch 7.3.824
+Problem:    Can redefine builtin functions.  (ZyX)
+Solution:   Disallow adding a function to g:.
+Files:     src/eval.c
+
+Patch 7.3.825
+Problem:    With Python errors are not always clear.
+Solution:   Print the stack trace, unless :silent is used. (ZyX)
+Files:     src/if_python3.c, src/if_python.c
+
+Patch 7.3.826
+Problem:    List of features in :version output is hard to read.
+Solution:   Make columns. (Nazri Ramliy)
+Files:     src/version.c
+
+Patch 7.3.827 (after 7.3.825)
+Problem:    Python tests fail.
+Solution:   Adjust the output for the stack trace.
+Files:     src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.ok
+
+Patch 7.3.828
+Problem:    Mappings are not aware of wildmenu mode.
+Solution:   Add wildmenumode(). (Christian Brabandt)
+Files:     src/eval.c, runtime/doc/eval.txt
+
+Patch 7.3.829
+Problem:    When compiled with the +rightleft feature 'showmatch' also shows a
+           match for the opening paren.  When 'revins' is set the screen may
+           scroll.
+Solution:   Only check the opening paren when the +rightleft feature was
+           enabled.  Do not show a match that is not visible. (partly by
+           Christian Brabandt)
+Files:     src/search.c
+
+Patch 7.3.830
+Problem:    :mksession confuses bytes, columns and characters when positioning
+           the cursor.
+Solution:   Use w_virtcol with "|" instead of w_cursor.col with "l".
+Files:     src/ex_docmd.c
+
+Patch 7.3.831
+Problem:    Clumsy to handle the situation that a variable does not exist.
+Solution:   Add default value to getbufvar() et al. (Shougo Matsushita,
+           Hirohito Higashi)
+Files:     runtime/doc/eval.txt, src/eval.c src/testdir/test91.in,
+           src/testdir/test91.ok, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+           src/testdir/Makefile
+
+Patch 7.3.832
+Problem:    Compiler warning.
+Solution:   Add type cast. (Mike Williams)
+Files:     src/version.c
+
+Patch 7.3.833
+Problem:    In the terminal the scroll wheel always scrolls the active window.
+Solution:   Scroll the window under the mouse pointer, like in the GUI.
+           (Bradie Rao)
+Files:     src/edit.c, src/normal.c
+
+Patch 7.3.834
+Problem:    Ruby 2.0 has a few API changes.
+Solution:   Add handling of Ruby 2.0. (Yasuhiro Matsumoto)
+Files:     src/if_ruby.c
+
+Patch 7.3.835
+Problem:    "xxd -i" fails on an empty file.
+Solution:   Do output the closing } for an empty file. (partly by Lawrence
+           Woodman)
+Files:     src/xxd/xxd.c
+
+Patch 7.3.836
+Problem:    Clipboard does not work on Win32 when compiled with Cygwin.
+Solution:   Move the Win32 clipboard code to a separate file and use it when
+           building with os_unix.c. (Frodak Baksik, Ken Takata)
+Files:     src/Make_bc5.mak, src/Make_cyg.mak, src/Make_ivc.mak,
+           src/Make_ming.mak, src/Make_mvc.mak, src/Make_w16.mak,
+           src/Makefile, src/config.h.in, src/configure.in,
+           src/auto/configure, src/feature.h, src/globals.h, src/mbyte.c,
+           src/os_mswin.c, src/os_unix.c, src/os_win32.c, src/proto.h,
+           src/proto/os_mswin.pro, src/proto/winclip.pro, src/term.c,
+           src/vim.h, src/winclip.c
+
+Patch 7.3.837 (after 7.3.826)
+Problem:    Empty lines in :version output when 'columns' is 320.
+Solution:   Simplify the logic of making columns. (Nazri Ramliy, Roland
+           Eggner)
+Files:     src/version.c
+
+Patch 7.3.838 (after 7.3.830)
+Problem:    Insufficient testing for mksession.
+Solution:   Add tests. (mostly by Roland Eggner)
+Files:     src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+           src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+           src/testdir/Make_vms.mms, src/testdir/Makefile,
+           src/testdir/test92.in, src/testdir/test92.ok,
+           src/testdir/test93.in, src/testdir/test93.ok,
+           src/ex_docmd.c
+
+Patch 7.3.839
+Problem:    Some files missing in the list of distributed files.
+Solution:   Add lines for new files.
+Files:     Filelist
+
+Patch 7.3.840
+Problem:    "\@<!" in regexp does not work correctly with multi-byte
+           characters, especially cp932.
+Solution:   Move column to start of multi-byte character. (Yasuhiro Matsumoto)
+Files:     src/regexp.c
+
+Patch 7.3.841
+Problem:    When a "cond ? one : two" expression has a subscript it is not
+           parsed correctly. (Andy Wokula)
+Solution:   Handle a subscript also when the type is unknown. (Christian
+           Brabandt)
+Files:     src/eval.c
+
+Patch 7.3.842
+Problem:    Compiler warning for signed/unsigned pointer.
+Solution:   Add type cast. (Christian Brabandt)
+Files:     src/eval.c
+
+Patch 7.3.843 (after 7.3.841)
+Problem:    Missing test file changes.
+Solution:   Change the tests.
+Files:     src/testdir/test49.vim, src/testdir/test49.ok
+
+Patch 7.3.844
+Problem:    Enum is not indented correctly with "public" etc.
+Solution:   Skip "public", "private" and "protected". (Hong Xu)
+Files:     src/misc1.c
+
+Patch 7.3.845 (after 7.3.844)
+Problem:    Enum indenting is not tested.
+Solution:   Add tests. (Hong Xu)
+Files:     src/testdir/test3.in, src/testdir/test3.ok
+
+Patch 7.3.846
+Problem:    Missing proto files.
+Solution:   Add the files.
+Files:     Filelist, src/proto/os_beos.pro
+
+Patch 7.3.847
+Problem:    Test 55 fails when messages are translated.
+Solution:   Set language to C. (Ken Takata)
+Files:     src/testdir/test55.in
+
+Patch 7.3.848
+Problem:    Can't build with Ruby 2.0 when using MinGW x64 or MSVC10.
+Solution:   Fix it. Also detect RUBY_PLATFORM and RUBY_INSTALL_NAME for x64.
+           (Ken Takata)
+Files:     src/Make_cyg.mak, src/Make_ming.mak, src/if_ruby.c
+
+Patch 7.3.849
+Problem:    ":g//" gives "Pattern not found error" with E486.  Should not use
+           the error number, it's not a regular error message.
+Solution:   Use a normal message. (David Bürgin)
+Files:     src/ex_cmds.c
+
+Patch 7.3.850
+Problem:    ":vimgrep //" matches everywhere.
+Solution:   Make it use the previous search pattern. (David Bürgin)
+Files:     runtime/doc/quickfix.txt, src/quickfix.c
+
+Patch 7.3.851
+Problem:    Using an empty pattern with :sort silently continues when there is
+           no previous search pattern.
+Solution:   Give an error message. (David Bürgin)
+Files:     src/ex_cmds.c
+
+Patch 7.3.852
+Problem:    system() breaks clipboard text. (Yukihiro Nakadaira)
+Solution:   Use Xutf8TextPropertyToTextList(). (Christian Brabandt)
+           Also do not put the text in the clip buffer if conversion fails.
+Files:     src/ui.c, src/ops.c
+
+Patch 7.3.853
+Problem:    Using "ra" in multiple lines on multi-byte characters leaves a few
+           characters not replaced.
+Solution:   Adjust the end column only in the last line. (Yasuhiro Matsumoto)
+Files:     src/testdir/test69.in, src/testdir/test69.ok, src/ops.c
+
+Patch 7.3.854
+Problem:    After using backspace in insert mode completion, CTRL-N and CTRL-P
+           do not highlight the right entry. (Olivier Teuliere)
+Solution:   Set the current item to the shown item after using backspace.
+Files:     src/edit.c
+
+Patch 7.3.855
+Problem:    Compiler warnings.
+Solution:   Add type casts. (Mike Williams)
+Files:     src/misc1.c
+
+Patch 7.3.856
+Problem:    When calling system() multi-byte clipboard contents is garbled.
+Solution:   Save and restore the clipboard contents.  (Yukihiro Nakadaira)
+Files:     src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro, src/ops.c,
+           src/proto/ops.pro, src/os_unix.c, src/proto/ui.pro, src/ui.c
+
+Patch 7.3.857
+Problem:    The QuitPre autocommand event does not trigger for :qa and :wq.
+Solution:   Trigger the event. (Tatsuro Fujii)
+Files:     src/ex_docmd.c
+
+Patch 7.3.858
+Problem:    "gv" selects the wrong area after some operators.
+Solution:   Save and restore the type of selection. (Christian Brabandt)
+Files:     src/testdir/test66.in, src/testdir/test66.ok, src/normal.c
+
+Patch 7.3.859
+Problem:    'ambiwidth' must be set by the user.
+Solution:   Detects East Asian ambiguous width (UAX #11) state of the terminal
+           at the start-up time and 'ambiwidth' accordingly.  (Hayaki Saito)
+Files:     src/main.c, src/option.c, src/term.c, src/term.h,
+           src/proto/term.pro
+
+Patch 7.3.860
+Problem:    When using --remote-expr try/catch does not work. (Andrey Radev)
+Solution:   Set emsg_silent instead of emsg_skip.
+Files:     src/main.c
+
+Patch 7.3.861
+Problem:    ":setlocal number" clears global value of 'relativenumber'.
+Solution:   Do it properly. (Markus Heidelberg)
+Files:     src/testdir/test89.in, src/testdir/test89.ok, src/option.c
+
+Patch 7.3.862
+Problem:    Dragging the status line can be slow.
+Solution:   Look ahead and drop the drag event if there is a next one.
+Files:     src/eval.c, src/misc1.c, src/proto/misc1.pro, src/normal.c
+
+Patch 7.3.863 (after 7.3.859)
+Problem:    Problem with 'ambiwidth' detection for ANSI terminal.
+Solution:   Work around not recognizing a term response. (Hayaki Saito)
+Files:     src/term.c
+
+Patch 7.3.864 (after 7.3.862)
+Problem:    Can't build without the mouse feature.
+Solution:   Add an #ifdef. (Ike Devolder)
+Files:     src/misc1.c
+
+Patch 7.3.865 (after 7.3.862)
+Problem:    Mouse position may be wrong.
+Solution:   Let vungetc() restore the mouse position.
+Files:     src/getchar.c
+
+Patch 7.3.866
+Problem:    Not serving the X selection during system() isn't nice.
+Solution:   When using fork() do not loose the selection, keep serving it.
+           Add a loop similar to handling I/O. (Yukihiro Nakadaira)
+Files:     src/os_unix.c
+
+Patch 7.3.867
+Problem:    Matchparen does not update match when using auto-indenting.
+           (Marc Aldorasi)
+Solution:   Add the TextChanged and TextChangedI autocommand events.
+Files:     runtime/plugin/matchparen.vim, src/main.c, src/edit.c,
+           src/globals.h, src/vim.h, src/fileio.c, src/proto/fileio.pro,
+           runtime/doc/autocmd.txt
+
+Patch 7.3.868
+Problem:    When at the hit-return prompt and using "k" while no text has
+           scrolled off screen, then using "j", an empty line is displayed.
+Solution:   Only act on "k" when text scrolled off screen.  Also accept
+           page-up and page-down.  (cptstubing)
+Files:     src/message.c
+
+Patch 7.3.869
+Problem:    bufwinnr() matches buffers in other tabs.
+Solution:   For bufwinnr() and ? only match buffers in the current tab.
+           (Alexey Radkov)
+Files:     src/buffer.c, src/diff.c, src/eval.c, src/ex_docmd.c,
+           src/if_perl.xs, src/proto/buffer.pro
+
+Patch 7.3.870
+Problem:    Compiler warnings when using MingW 4.5.3.
+Solution:   Do not use MAKEINTRESOURCE. Adjust #if. (Ken Takata)
+Files:     src/gui_w32.c, src/gui_w48.c, src/os_mswin.c, src/os_win32.c,
+           src/os_win32.h
+
+Patch 7.3.871
+Problem:    search('^$', 'c') does not use the empty match under the cursor.
+Solution:   Special handling of the 'c' flag. (Christian Brabandt)
+           Add tests.
+Files:     src/search.c, src/testdir/test14.in, src/testdir/test14.ok
+
+Patch 7.3.872
+Problem:    On some systems case of file names is always ignored, on others
+           never.
+Solution:   Add the 'fileignorecase' option to control this at runtime.
+           Implies 'wildignorecase'.
+Files:     src/buffer.c, src/edit.c, src/ex_cmds2.c, src/ex_getln.c,
+           src/fileio.c, src/misc1.c, src/misc2.c, src/option.c,
+           src/option.h, src/vim.h, runtime/doc/options.txt
+
+Patch 7.3.873
+Problem:    Cannot easily use :s to make title case.
+Solution:   Have "\L\u" result in title case. (James McCoy)
+Files:     src/regexp.c, src/testdir/test79.in, src/testdir/test79.ok,
+           src/testdir/test80.in, src/testdir/test80.ok
+
+Patch 7.3.874
+Problem:    Comparing file names does not handle multi-byte characters
+           properly.
+Solution:   Implement multi-byte handling.
+Files:     src/misc1.c, src/misc2.c
+
+Patch 7.3.875 (after 7.3.866)
+Problem:    Build problem with some combination of features.
+Solution:   Use FEAT_XCLIPBOARD instead of FEAT_CLIPBOARD.
+Files:     src/os_unix.c
+
+Patch 7.3.876
+Problem:    #if indents are off.
+Solution:   Insert a space where appropriate. (Taro Muraoka)
+Files:     src/gui.c
+
+Patch 7.3.877 (after 7.3.871)
+Problem:    Forward searching with search() is broken.
+Solution:   Fix it and add tests. (Sung Pae)
+Files:     src/search.c, src/testdir/test14.in, src/testdir/test14.ok
+
+Patch 7.3.878
+Problem:    'fileignorecase' is missing in options window and quickref.
+Solution:   Add the option.
+Files:     runtime/optwin.vim, runtime/doc/quickref.txt
+
+Patch 7.3.879
+Problem:    When using an ex command in operator pending mode, using Esc to
+           abort the command still executes the operator. (David Bürgin)
+Solution:   Clear the operator when the ex command fails. (Christian Brabandt)
+Files:     src/normal.c
+
+Patch 7.3.880
+Problem:    When writing viminfo, old history lines may replace lines written
+           more recently by another Vim instance.
+Solution:   Mark history entries that were read from viminfo and overwrite
+           them when merging with the current viminfo.
+Files:     src/ex_getln.c
+
+Patch 7.3.881
+Problem:    Python list does not work correctly.
+Solution:   Fix it and add a test. (Yukihiro Nakadaira)
+Files:     src/testdir/test86.in, src/testdir/test86.ok, src/if_py_both.h
+
+Patch 7.3.882
+Problem:    CursorHold may trigger after receiving the termresponse.
+Solution:   Set the did_cursorhold flag. (Hayaki Saito)
+Files:     src/term.c
+
+Patch 7.3.883 (after 7.3.880)
+Problem:    Can't build with some combination of features.
+Solution:   Adjust #ifdefs.
+Files:     src/ex_getln.c
+
+Patch 7.3.884
+Problem:    Compiler warning for variable shadowing another. (John Little)
+Solution:   Rename the variable. (Christian Brabandt)
+Files:     src/term.c
+
+Patch 7.3.885
+Problem:    Double free for list and dict in Lua. (Shougo Matsu)
+Solution:   Do not unref list and dict. (Yasuhiro Matsumoto)
+Files:     src/if_lua.c
+
+Patch 7.3.886
+Problem:    Can't build with multi-byte on Solaris 10.
+Solution:   Add #ifdef X_HAVE_UTF8_STRING. (Laurent Blume)
+Files:     src/ui.c
+
+Patch 7.3.887
+Problem:    No tests for Visual mode operators, what 7.3.879 fixes.
+Solution:   Add a new test file. (David Bürgin)
+Files:     src/testdir/test94.in, src/testdir/test94.ok,
+           src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+           src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+           src/testdir/Make_vms.mms, src/testdir/Makefile
+
+Patch 7.3.888
+Problem:    Filename completion with 'fileignorecase' does not work for
+           multi-byte characters.
+Solution:   Make 'fileignorecase' work properly. (Hirohito Higashi)
+Files:     src/misc2.c
+
+Patch 7.3.889
+Problem:    Can't build with Ruby 2.0 on a 64 bit system.
+Solution:   Define rb_fix2int and rb_num2int. (Kohei Suzuki)
+Files:     src/if_ruby.c
+
+Patch 7.3.890
+Problem:    Test 79 fails on Windows. (Michael Soyka)
+Solution:   Add comment below line causing an error.
+Files:     src/testdir/test79.in
+
+Patch 7.3.891
+Problem:    Merging viminfo history doesn't work well.
+Solution:   Don't stop when one type of history is empty. Don't merge history
+           when writing viminfo.
+Files:     src/ex_getln.c
+
+Patch 7.3.892 (after 7.3.891)
+Problem:    Still merging problems for viminfo history.
+Solution:   Do not merge lines when writing, don't write old viminfo lines.
+Files:     src/ex_getln.c, src/ex_cmds.c, src/proto/ex_getln.pro
+
+Patch 7.3.893
+Problem:    Crash when using b:, w: or t: after closing the buffer, window or
+           tabpage.
+Solution:   Allocate the dictionary instead of having it part of the
+           buffer/window/tabpage struct. (Yukihiro Nakadaira)
+Files:     src/buffer.c, src/eval.c, src/fileio.c, src/structs.h,
+           src/window.c, src/proto/eval.pro
+
+Patch 7.3.894
+Problem:    Using wrong RUBY_VER causing Ruby build to break.
+Solution:   Correct the RUBY_VER value. (Yongwei Wu)
+Files:     src/bigvim.bat
+
+Patch 7.3.895
+Problem:    Valgrind error in test 91. (Issue 128)
+Solution:   Pass scope name to find_var_in_ht().
+Files:     src/eval.c
+
+Patch 7.3.896
+Problem:    Memory leaks in Lua interface.
+Solution:   Fix the leaks, add tests. (Yukihiro Nakadaira)
+Files:     src/testdir/test85.in, src/testdir/test85.ok, src/if_lua.c
+
+Patch 7.3.897
+Problem:    Configure doesn't always find the shared library.
+Solution:   Change the configure script. (Ken Takata)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.898
+Problem:    Memory leak reported by valgrind in test 91.
+Solution:   Only use default argument when needed.
+Files:     src/eval.c, src/testdir/test91.in, src/testdir/test91.ok
+
+Patch 7.3.899
+Problem:    #if indents are off.
+Solution:   Fix the indents.
+Files:     src/os_unix.c
+
+Patch 7.3.900
+Problem:    Not obvious that some mouse features are mutual-exclusive.
+Solution:   Add a comment.
+Files:     src/feature.h
+
+Patch 7.3.901
+Problem:    Outdated comment, ugly condition.
+Solution:   Update a few comments, break line.
+Files:     src/getchar.c, src/misc1.c, src/undo.c
+
+Patch 7.3.902
+Problem:    When deleting last buffer in other tab the tabline is not updated.
+Solution:   Set the redraw_tabline flag. (Yukihiro Nakadaira)
+Files:     src/window.c
+
+Patch 7.3.903 (after 7.3.892)
+Problem:    Crash on exit writing viminfo. (Ron Aaron)
+Solution:   Check for the history to be empty.
+Files:     src/ex_getln.c
+
+Patch 7.3.904 (after 7.3.893)
+Problem:    Using memory freed by the garbage collector.
+Solution:   Mark items in aucmd_win as used.
+Files:     src/eval.c
+
+Patch 7.3.905 (after 7.3.903)
+Problem:    Crash when writing viminfo. (Ron Aaron)
+Solution:   Prevent freed history info to be used.
+Files:     src/ex_getln.c
+
+Patch 7.3.906
+Problem:    The "sleep .2" for running tests does not work on Solaris.
+Solution:   Fall back to using "sleep 1". (Laurent Blume)
+Files:     src/testdir/Makefile
+
+Patch 7.3.907
+Problem:    Python uses IndexError when a dict key is not found.
+Solution:   Use KeyError instead. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.908
+Problem:    Possible crash when using a list in Python.
+Solution:   Return early if the list is NULL. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.909
+Problem:    Duplicate Python code.
+Solution:   Move more items to if_py_both.h. (ZyX)  Also avoid compiler
+           warnings for missing initializers.
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c
+
+Patch 7.3.910
+Problem:    Python code in #ifdef branches with only minor differences.
+Solution:   Merge the #ifdef branches. (ZyX)
+Files:     src/if_py_both.h, src/if_python.c
+
+Patch 7.3.911
+Problem:    Python: Access to Vim variables is not so easy.
+Solution:   Define vim.vars and vim.vvars. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/eval.c, src/globals.h,
+           src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.912
+Problem:    Typing a ":" command at the hit-enter dialog does not work if the
+           "file changed" dialog happens next.
+Solution:   Check for changed files before giving the hit-enter dialog.
+Files:     src/message.c
+
+Patch 7.3.913 (after 7.3.905)
+Problem:    Still a crash when writing viminfo.
+Solution:   Add checks for NULL pointers. (Ron Aaron)
+Files:     src/ex_getln.c
+
+Patch 7.3.914
+Problem:    ~/.viminfo is messed up when running tests.
+Solution:   Set the viminfo filename.
+Files:     src/testdir/test89.in, src/testdir/test94.in
+
+Patch 7.3.915
+Problem:    When reading a file with encoding conversion fails at the end the
+           next encoding in 'fencs' is not used.
+Solution:   Retry with another encoding when possible. (Taro Muraoka)
+Files:     src/fileio.c
+
+Patch 7.3.916
+Problem:    Using freed memory when pasting with the mouse (Issue 130).
+Solution:   Get the byte value early. (hint by Dominique Pelle)
+Files:     src/buffer.c
+
+Patch 7.3.917
+Problem:    When a path ends in a backslash appending a comma has the wrong
+           effect.
+Solution:   Replace a trailing backslash with a slash. (Nazri Ramliy)
+Files:     src/misc1.c, src/testdir/test73.in, src/testdir/test73.ok
+
+Patch 7.3.918
+Problem:    Repeating an Ex command after using a Visual motion does not work.
+Solution:   Check for an Ex command being used. (David Bürgin)
+Files:     src/normal.c
+
+Patch 7.3.919 (after 7.3.788)
+Problem:    An empty nl.po file does not work with an old msgfmt.
+Solution:   Put a single # in the file. (Laurent Blume)
+Files:     src/po/Makefile
+
+Patch 7.3.920
+Problem:    Compiler warning for size_t to int.
+Solution:   Add a type cast. (Mike Williams)
+Files:     src/misc1.c
+
+Patch 7.3.921 (after 7.3.697)
+Problem:    Trying to create a fontset handle when 'guifontset' is not set.
+Solution:   Add curly braces around the code block. (Max Kirillov)
+Files:     src/syntax.c
+
+Patch 7.3.922
+Problem:    No test for what 7.3.918 fixes.
+Solution:   Add a test. (David Bürgin)
+Files:     src/testdir/test94.in, src/testdir/test94.ok
+
+Patch 7.3.923
+Problem:    Check for X11 header files fails on Solaris.
+Solution:   Only use -Werror for gcc. (Laurent Blume)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.924
+Problem:    Python interface can't easily access options.
+Solution:   Add vim.options, vim.window.options and vim.buffer.options. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/eval.c, src/if_py_both.h,
+           src/if_python.c, src/if_python3.c, src/option.c,
+           src/proto/eval.pro, src/proto/option.pro, src/testdir/test86.in,
+           src/testdir/test86.ok, src/testdir/test87.in,
+           src/testdir/test87.ok, src/vim.h
+
+Patch 7.3.925
+Problem:    Typos in source files.
+Solution:   Fix the typos. (Ken Takata)
+Files:     runtime/plugin/matchparen.vim, runtime/tools/vim_vs_net.cmd,
+           src/GvimExt/gvimext.cpp, src/INSTALLvms.txt, src/Make_cyg.mak,
+           src/Make_mvc.mak, src/Make_sas.mak, src/Make_vms.mms,
+           src/Make_w16.mak, src/Makefile, src/VisVim/OleAut.cpp,
+           src/VisVim/README_VisVim.txt, src/auto/configure, src/buffer.c,
+           src/configure.in, src/diff.c, src/dosinst.c, src/edit.c,
+           src/eval.c, src/ex_cmds2.c, src/ex_docmd.c, src/ex_eval.c,
+           src/farsi.c, src/feature.h, src/fileio.c, src/glbl_ime.cpp,
+           src/gui.c, src/gui_athena.c, src/gui_beval.c, src/gui_gtk_x11.c,
+           src/gui_mac.c, src/gui_motif.c, src/gui_photon.c, src/gui_w16.c,
+           src/gui_w32.c, src/gui_w48.c, src/gui_xmebw.c, src/gui_xmebwp.h,
+           src/hardcopy.c, src/if_cscope.c, src/if_mzsch.c, src/if_ole.cpp,
+           src/if_perl.xs, src/if_py_both.h, src/if_python.c,
+           src/if_python3.c, src/if_ruby.c, src/main.aap, src/mbyte.c,
+           src/memfile.c, src/memline.c, src/misc1.c, src/misc2.c,
+           src/nbdebug.c, src/normal.c, src/ops.c, src/os_amiga.c,
+           src/os_mac.h, src/os_msdos.c, src/os_mswin.c, src/os_win16.h,
+           src/os_win32.c, src/os_win32.h, src/quickfix.c, src/screen.c,
+           src/search.c, src/spell.c, src/structs.h, src/syntax.c,
+           src/window.c, vimtutor.com
+
+
+Patch 7.3.926
+Problem:    Autocommands are triggered by setwinvar() et al. Missing BufEnter
+           on :tabclose. Duplicate WinEnter on :tabclose. Wrong order of
+           events for :tablose and :tabnew.
+Solution:   Fix these autocommand events. (ZyX)
+Files:     runtime/doc/eval.txt, src/buffer.c, src/eval.c, src/ex_cmds2.c,
+           src/fileio.c, src/proto/window.pro, src/testdir/test62.in,
+           src/testdir/test62.ok, src/window.c
+
+Patch 7.3.927
+Problem:    Missing combining characters when putting text in a register.
+Solution:   Include combining characters. (David Bürgin)
+Files:     src/getchar.c, src/testdir/test44.in, src/testdir/test44.ok
+
+Patch 7.3.928 (after 7.3.924)
+Problem:    Can't build with strict C compiler.
+Solution:   Move declaration to start of block. (Taro Muraoka)
+Files:     src/if_py_both.h
+
+Patch 7.3.929 (after 7.3.924)
+Problem:    Compiler warning for unused variable. Not freeing unused string.
+Solution:   Remove the variable. Clear the options.
+Files:     src/option.c
+
+Patch 7.3.930
+Problem:    MSVC 2012 update is not recognized.
+Solution:   Update the version in the makefile. (Raymond Ko)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.931
+Problem:    No completion for :xmap and :smap. (Yukihiro Nakadaira)
+Solution:   Add the case statements. (Christian Brabandt)
+Files:     src/ex_docmd.c
+
+Patch 7.3.932
+Problem:    Compiler warning for uninitialized variable. (Tony Mechelynck)
+Solution:   Initialize the variable.
+Files:     src/option.c
+
+Patch 7.3.933
+Problem:    Ruby on Mac crashes due to GC failure.
+Solution:   Init the stack from main(). (Hiroshi Shirosaki)
+Files:     src/main.c, src/if_ruby.c, src/proto/if_ruby.pro
+
+Patch 7.3.934
+Problem:    E381 and E380 make the user think nothing happened.
+Solution:   Display the message indicating what error list is now active.
+           (Christian Brabandt)
+Files:     src/quickfix.c
+
+Patch 7.3.935 (after 7.3.933)
+Problem:    Ruby: Init stack works differently on 64 bit systems.
+Solution:   Handle 64 bit systems and also static library. (Yukihiro
+           Nakadaira)
+Files:     src/if_ruby.c
+
+Patch 7.3.936 (after 7.3.935)
+Problem:    Ruby 1.8: Missing piece for static linking on 64 bit systems.
+Solution:   Define ruby_init_stack() (Hiroshi Shirosaki)
+           Also fix preprocessor indents.
+Files:     src/if_ruby.c
+
+Patch 7.3.937
+Problem:    More can be shared between Python 2 and 3.
+Solution:   Move code to if_py_both.h. (ZyX)
+Files:     src/if_python.c, src/if_python3.c, src/if_py_both.h
+
+Patch 7.3.938
+Problem:    Python: not easy to get to window number.
+Solution:   Add vim.window.number. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h, src/proto/window.pro,
+           src/window.c
+
+Patch 7.3.939
+Problem:    Using Py_BuildValue is inefficient sometimes.
+Solution:   Use PyLong_FromLong(). (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.940
+Problem:    Python: Can't get position of window.
+Solution:   Add window.row and window.col. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h
+
+Patch 7.3.941
+Problem:    Stuff in if_py_both.h is ordered badly.
+Solution:   Reorder by type. (ZyX)
+Files:     src/if_py_both.h, src/if_python.c
+
+Patch 7.3.942
+Problem:    Python: SEGV in Buffer functions.
+Solution:   Call CheckBuffer() at the right time. (ZyX)
+Files:     src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+Patch 7.3.943
+Problem:    Python: Negative indices were failing.
+Solution:   Fix negative indices. Add tests. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/testdir/test86.in,
+           src/testdir/test86.ok, src/testdir/test87.in,
+           src/testdir/test87.ok
+
+Patch 7.3.944
+Problem:    External program receives the termrespone.
+Solution:   Insert a delay and discard input. (Hayaki Saito)
+Files:     src/term.c
+
+Patch 7.3.945
+Problem:    Python: List of buffers is not very useful.
+Solution:   Make vim.buffers a map. No iterator yet. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python3.c,
+           src/if_python.c, src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.946
+Problem:    Sometimes get stuck in waiting for cursor position report,
+           resulting in keys starting with <Esc>[ not working.
+Solution:   Only wait for more characters after <Esc>[ if followed by '?', '>'
+           or a digit.
+Files:     src/term.c
+
+Patch 7.3.947
+Problem:    Python: No iterator for vim.list and vim.bufferlist.
+Solution:   Add the iterators. Also fix name of FunctionType. Add tests for
+           vim.buffers.  (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/eval.c, src/if_py_both.h,
+           src/if_python3.c, src/if_python.c, src/proto/eval.pro,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.948
+Problem:    Cannot build with Python 2.2
+Solution:   Make Python interface work with Python 2.2
+           Make 2.2 the first supported version. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.ok, src/configure.in, src/auto/configure
+
+Patch 7.3.949
+Problem:    Python: no easy access to tabpages.
+Solution:   Add vim.tabpages and vim.current.tabpage. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python3.c,
+           src/if_python.c, src/proto/if_python3.pro,
+           src/proto/if_python.pro, src/proto/window.pro, src/structs.h,
+           src/window.c
+
+Patch 7.3.950
+Problem:    Python: Stack trace printer can't handle messages.
+Solution:   Make KeyErrors use PyErr_SetObject. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c
+
+Patch 7.3.951
+Problem:    Python exceptions have problems.
+Solution:   Change some IndexErrors to TypeErrors. Make â€œline number out of
+           range†an IndexError.  Make â€œunable to get option value†a
+           RuntimeError. Make all PyErr_SetString messages start with
+           lowercase letter and use _(). (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.952
+Problem:    Python: It's not easy to change window/buffer/tabpage.
+Solution:   Add ability to assign to vim.current.{tabpage,buffer,window}.
+           (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h
+
+Patch 7.3.953
+Problem:    Python: string exceptions are deprecated.
+Solution:   Make vim.error an Exception subclass. (ZyX)
+Files:     src/if_python.c, src/if_python3.c
+
+Patch 7.3.954
+Problem:    No check if PyObject_IsTrue fails.
+Solution:   Add a check for -1 value. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.955
+Problem:    Python: Not enough tests.
+Solution:   Add tests for vim.{current,window*,tabpage*}. (ZyX)
+Files:     src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.956
+Problem:    Python vim.bindeval() causes SIGABRT.
+Solution:   Make pygilstate a local variable. (Yukihiro Nakadaira)
+Files:     src/if_py_both.h, src/if_python.c, src/if_python3.c
+
+Patch 7.3.957
+Problem:    Python does not have a "do" command like Perl or Lua.
+Solution:   Add the ":py3do" command. (Lilydjwg)
+Files:     runtime/doc/if_pyth.txt, src/ex_cmds.h, src/ex_docmd.c,
+           src/if_python3.c, src/proto/if_python3.pro
+
+Patch 7.3.958
+Problem:    Python: Iteration destructor not set.
+Solution:   Put IterDestructor to use. (ZyX)
+Files:     src/if_py_both.c
+
+Patch 7.3.959 (after 7.3.957)
+Problem:    Missing error number.
+Solution:   Assign an error number.
+Files:     src/if_python3.c
+
+Patch 7.3.960
+Problem:    Compiler warning for unused variable.
+Solution:   Put declaration in #ifdef.
+Files:     src/window.c
+
+Patch 7.3.961
+Problem:    Tests 86 and 87 fail when using another language than English.
+Solution:   Set the language to C in the test. (Dominique Pelle)
+Files:     src/testdir/test86.in, src/testdir/test87.in,
+           src/testdir/test87.ok
+
+Patch 7.3.962
+Problem:    Python tests are not portable.
+Solution:   Use shiftwidth instead of iminsert. (ZyX)
+Files:     src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.963
+Problem:    Setting curbuf without curwin causes trouble.
+Solution:   Add switch_buffer() and restore_buffer().  Block autocommands to
+           avoid trouble.
+Files:     src/eval.c, src/proto/eval.pro, src/proto/window.pro,
+           src/if_py_both.h, src/window.c, src/testdir/test86.ok
+
+Patch 7.3.964
+Problem:    Python: not so easy to access tab pages.
+Solution:   Add window.tabpage, make window.number work with non-current tab
+           pages. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python3.c,
+           src/if_python.c, src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.965
+Problem:    Python garbage collection not working properly.
+Solution:   Add support for garbage collection. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.966
+Problem:    There is ":py3do" but no ":pydo".
+Solution:   Add the ":pydo" command. (Lilydjwg)
+Files:     runtime/doc/if_pyth.txt, src/ex_cmds.h, src/ex_docmd.c,
+           src/if_py_both.h, src/if_python.c, src/if_python3.c,
+           src/proto/if_python.pro
+
+Patch 7.3.967 (after 7.3.965)
+Problem:    Build fails on Mac OSX. (Greg Novack)
+Solution:   Undefine clear().
+Files:     src/if_py_both.h
+
+Patch 7.3.968
+Problem:    Multi-byte support is only available when compiled with "big"
+           features.
+Solution:   Include multi-byte by default, with "normal" features.
+Files:     src/feature.h
+
+Patch 7.3.969
+Problem:    Can't build with Python 3 and without Python 2.
+Solution:   Adjust #ifdef. (Xavier de Gaye)
+Files:     src/window.c
+
+Patch 7.3.970
+Problem:    Syntax highlighting can be slow.
+Solution:   Include the NFA regexp engine.  Add the 'regexpengine' option to
+           select which one is used. (various authors, including Ken Takata,
+           Andrei Aiordachioaie, Russ Cox, Xiaozhou Liua, Ian Young)
+Files:     src/Make_cyg.mak, src/Make_ming.mak, src/Make_mvc.mak,
+           src/Makefile, src/regexp.c, src/regexp.h, src/regexp_nfa.c,
+           src/structs.h, src/testdir/Makefile, src/testdir/test64.in,
+           src/testdir/test64.ok, Filelist, runtime/doc/pattern.txt,
+           runtime/doc/option.txt, src/option.c, src/option.h,
+           src/testdir/test95.in, src/testdir/test95.ok,
+           src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak,
+           src/testdir/Make_ming.mak, src/testdir/Make_os2.mak,
+           src/testdir/Make_vms.mms, src/testdir/Makefile
+
+Patch 7.3.971
+Problem:    No support for VS2012 static code analysis.
+Solution:   Add the ANALYZE option. (Mike Williams)
+Files:     src/Make_mvc.mak
+
+Patch 7.3.972
+Problem:    Cursor not restored after InsertEnter autocommand if it moved to
+           another line.
+Solution:   Also restore if the saved line number is still valid.  Allow
+           setting v:char to skip restoring.
+Files:     src/edit.c, runtime/doc/autocmd.txt
+
+Patch 7.3.973
+Problem:    Compiler warnings. Crash on startup. (Tony Mechelynck)
+Solution:   Change EMSG2 to EMSGN. Make array one character longer.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.974
+Problem:    Can't build with ruby 1.8.5.
+Solution:   Only use ruby_init_stack() when RUBY_INIT_STACK is defined.
+           (Yukihiro Nakadaira)
+Files:     src/if_ruby.c
+
+Patch 7.3.975
+Problem:    Crash in regexp parsing.
+Solution:   Correctly compute the end of allocated memory.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.976
+Problem:    Can't build on HP-UX.
+Solution:   Remove modern initialization. (John Marriott)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.977
+Problem:    Compiler warnings on 64 bit Windows.
+Solution:   Add type casts. (Mike Williams)  Also fix some white space and
+           uncomment what was commented-out for testing.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.978
+Problem:    Regexp debug logs don't have a good name.
+Solution:   Use clear names and make it possible to write logs for the old and
+           new engines separately. (Taro Muraoka)
+Files:     src/regexp.c, src/regexp_nfa.c
+
+Patch 7.3.979
+Problem:    Complex NFA regexp doesn't work.
+Solution:   Set actual state stack end instead of using an arbitrary number.
+           (Yasuhiro Matsumoto)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.980
+Problem:    Regexp logs may contain garbage. Character classes don't work
+           correctly for multi-byte characters.
+Solution:   Check for end of post list.  Only use "is" functions for
+           characters up to 255. (Ken Takata)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.981
+Problem:    In the old regexp engine \i, \I, \f and \F don't work on
+           multi-byte characters.
+Solution:   Dereference pointer properly.
+Files:     src/regexp.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.982
+Problem:    In the new regexp engine \p does not work on multi-byte
+           characters.
+Solution:   Don't point to an integer but the characters.
+Files:     src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok
+
+Patch 7.3.983
+Problem:    Unnecessary temp variable.
+Solution:   Remove the variable.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.984
+Problem:    A Visual mapping that uses CTRL-G works differently when started
+           from Insert mode. (Ein Brown)
+Solution:   Reset old_mapped_len when handling typed text in Select mode.
+Files:     src/normal.c
+
+Patch 7.3.985
+Problem:    GTK vim not started as gvim doesn't set WM_CLASS property to a
+           useful value.
+Solution:   Call g_set_prgname() on startup. (James McCoy)
+Files:     src/gui_gtk_x11.c
+
+Patch 7.3.986
+Problem:    Test 95 doesn't pass when 'encoding' isn't utf-8. (Yasuhiro
+           Matsumoto)
+Solution:   Force 'encoding' to be utf-8.
+Files:     src/testdir/test95.in
+
+Patch 7.3.987
+Problem:    No easy to run an individual test.  Tests 64 fails when
+           'encoding' is not utf-8.
+Solution:   Add individual test targets to the Makefile.  Move some lines from
+           test 64 to 95.
+Files:     src/Makefile, src/testdir/test64.in, src/testdir/test64.ok,
+           src/testdir/test95.in, src/testdir/test95.ok
+
+Patch 7.3.988
+Problem:    New regexp engine is slow.
+Solution:   Break out of the loop when the state list is empty.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.989
+Problem:    New regexp engine compares negative numbers to character.
+Solution:   Add missing case statements.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.990
+Problem:    Memory leak in new regexp engine.
+Solution:   Jump to end of function to free memory. (Dominique Pelle)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.991
+Problem:    More can be shared by Python 2 and 3.
+Solution:   Move more stuff to if_py_both. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/test87.ok
+
+Patch 7.3.992
+Problem:    Python: Too many type casts.
+Solution:   Change argument types. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c
+
+Patch 7.3.993
+Problem:    Python: Later patch does things slightly differently.
+Solution:   Adjusted argument type changes. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c
+
+Patch 7.3.994
+Problem:    Python: using magic constants.
+Solution:   Use descriptive values for ml_flags. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c
+
+Patch 7.3.995
+Problem:    Python: Module initialization is duplicated.
+Solution:   Move to shared file. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c
+
+Patch 7.3.996
+Problem:    Python: Can't check types of what is returned by bindeval().
+Solution:   Add vim.List, vim.Dictionary and vim.Function types. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h, src/testdir/test86.in,
+           src/testdir/test86.ok, src/testdir/test87.in,
+           src/testdir/test87.ok
+
+Patch 7.3.997
+Problem:    Vim and Python exceptions are different.
+Solution:   Make Vim exceptions be Python exceptions. (ZyX)
+Files:     src/if_py_both.h, src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.998
+Problem:    Python: garbage collection issues.
+Solution:   Fix the GC issues: Use proper DESTRUCTOR_FINISH: avoids negative
+           refcounts, use PyObject_GC_* for objects with tp_traverse and
+           tp_clear, add RangeTraverse and RangeClear, use Py_XDECREF in some
+           places. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c
+
+Patch 7.3.999
+Problem:    New regexp engine sets curbuf temporarily.
+Solution:   Use reg_buf instead, like the old engine.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1000 (whoa!)
+Problem:    Typo in char value causes out of bounds access.
+Solution:   Fix character value.  (Klemens Baum)
+Files:     src/regexp.c
+
+Patch 7.3.1001
+Problem:    Duplicate condition in if.
+Solution:   Remove one condition.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1002
+Problem:    Valgrind errors for Python interface.
+Solution:   Fix memory leaks when running tests. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1003
+Problem:    Python interface does not compile with Python 2.2
+Solution:   Fix thread issues and True/False. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1004
+Problem:    No error when option could not be set.
+Solution:   Report an error. (ZyX)
+Files:     src/if_py_both.h, src/option.c, src/proto/option.pro,
+           src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.1005
+Problem:    Get stuck on regexp "\n*" and on "%s/^\n\+/\r".
+Solution:   Fix handling of matching a line break. (idea by Hirohito Higashi)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1006
+Problem:    NFA engine not used for "\_[0-9]".
+Solution:   Enable this, fixed in patch 1005.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1007
+Problem:    Can't build on Minix 3.2.1.
+Solution:   Add a condition to an #ifdef. (Gautam Tirumala)
+Files:     src/memfile.c
+
+Patch 7.3.1008
+Problem:    Test 95 fails on MS-Windows.
+Solution:   Set 'nomore'. Change \i to \f.  Change multi-byte character to
+           something that is not matching \i. (Ken Takata)
+Files:     src/testdir/test95.in, src/testdir/test95.ok
+
+Patch 7.3.1009
+Problem:    Compiler warning for ambiguous else.
+Solution:   Add curly braces.
+Files:     src/if_py_both.h
+
+Patch 7.3.1010
+Problem:    New regexp: adding \Z makes every character match.
+Solution:   Only apply ireg_icombine for composing characters.
+           Also add missing change from patch 1008. (Ken Takata)
+Files:     src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok
+
+Patch 7.3.1011
+Problem:    New regexp engine is inefficient with multi-byte characters.
+Solution:   Handle a character at a time instead of a byte at a time.  Also
+           make \Z partly work.
+Files:     src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok
+
+Patch 7.3.1012
+Problem:    \Z does not work properly with the new regexp engine.
+Solution:   Make \Z work.  Add tests.
+Files:     src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok
+
+Patch 7.3.1013
+Problem:    New regexp logging is a bit messy.
+Solution:   Consistently use #defines, add explanatory comment. (Taro Muraoka)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1014
+Problem:    New regexp state dump is hard to read.
+Solution:   Make the state dump more pretty. (Taro Muraoka)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1015
+Problem:    New regexp engine: Matching composing characters is wrong.
+Solution:   Fix matching composing characters.
+Files:     src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok
+
+Patch 7.3.1016
+Problem:    Unused field in nfa_state.
+Solution:   Remove lastthread.
+Files:     src/regexp.h, src/regexp_nfa.c
+
+Patch 7.3.1017
+Problem:    Zero width match changes length of match.
+Solution:   For a zero width match put new states in the current position in
+           the state list.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok,
+           src/regexp.h
+
+Patch 7.3.1018
+Problem:    New regexp engine wastes memory.
+Solution:   Allocate prog with actual number of states, not estimated maximum
+           number of sates.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1019
+Problem:    These do not work with the new regexp engine: \%o123, \%x123,
+           \%d123, \%u123 and \%U123.
+Solution:   Implement these items.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1020
+Problem:    Not all patterns are tested with auto / old / new engine.
+Solution:   Test patterns with three values of 'regexpengine'.
+Files:     src/testdir/test64.in, src/testdir/test64.ok,
+           src/testdir/test95.in, src/testdir/test95.ok
+
+Patch 7.3.1021
+Problem:    New regexp engine does not ignore order of composing chars.
+Solution:   Ignore composing chars order.
+Files:     src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok
+
+Patch 7.3.1022
+Problem:    Compiler warning for shadowed variable. (John Little)
+Solution:   Move declaration, rename variables.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1023
+Problem:    Searching for composing char only and using \Z has different
+           results.
+Solution:   Make it match the composing char, matching everything is not
+           useful.
+Files:     src/regexp_nfa.c, src/testdir/test95.in, src/testdir/test95.ok
+
+Patch 7.3.1024
+Problem:    New regexp: End of matching pattern not set correctly. (Cesar
+           Romani)
+Solution:   Quit the loop after finding the match.  Store nfa_has_zend in the
+           program.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok,
+           src/regexp.h
+
+Patch 7.3.1025
+Problem:    New regexp: not matching newline in string. (Marc Weber)
+Solution:   Check for "\n" character.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1026
+Problem:    New regexp: pattern that includes a new-line matches too early.
+           (john McGowan)
+Solution:   Do not start searching in the second line.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1027
+Problem:    New regexp performance: Calling no_Magic() very often.
+Solution:   Remove magicness inline.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1028
+Problem:    New regexp performance: Copying a lot of position state.
+Solution:   Only copy the sub-expressions that are being used.
+Files:     src/regexp_nfa.c, src/regexp.h
+
+Patch 7.3.1029
+Problem:    New regexp performance: Unused position state being copied.
+Solution:   Keep track of which positions are actually valid.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1030 (after 7.3.1028)
+Problem:    Can't build for debugging.
+Solution:   Fix struct member names.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1031
+Problem:    Compiler warnings for shadowed variable. (John Little)
+Solution:   Move the variable declarations to the scope where they are used.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1032
+Problem:    "\ze" is not supported by the new regexp engine.
+Solution:   Make "\ze" work.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1033
+Problem:    "\1" .. "\9" are not supported in the new regexp engine.
+Solution:   Implement them.  Add a few more tests.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok,
+           src/regexp.h
+
+Patch 7.3.1034
+Problem:    New regexp code using strange multi-byte code.
+Solution:   Use the normal code to advance and backup pointers.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1035
+Problem:    Compiler warning on 64 bit windows.
+Solution:   Add type cast. (Mike Williams)
+Files:     src/if_py_both.h
+
+Patch 7.3.1036
+Problem:    Can't build on HP-UX.
+Solution:   Give the union a name. (John Marriott)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1037
+Problem:    Look-behind matching is very slow on long lines.
+Solution:   Add a byte limit to how far back an attempt is made.
+Files:     src/regexp.c, src/regexp_nfa.c, src/testdir/test64.in,
+           src/testdir/test64.ok
+
+Patch 7.3.1038
+Problem:    Crash when using Cscope.
+Solution:   Avoid negative argument to vim_strncpy(). (Narendran
+           Gopalakrishnan)
+Files:     src/if_cscope.c
+
+Patch 7.3.1039
+Problem:    New regexp engine does not support \%23c, \%<23c and the like. 
+Solution:   Implement them. (partly by Yasuhiro Matsumoto)
+Files:     src/regexp.h, src/regexp_nfa.c, src/testdir/test64.in,
+           src/testdir/test64.ok
+
+Patch 7.3.1040
+Problem:    Python: Problems with debugging dynamic build.
+Solution:   Python patch 1. (ZyX)
+Files:     src/if_python.c, src/if_python3.c
+
+Patch 7.3.1041
+Problem:    Python: Invalid read valgrind errors.
+Solution:   Python patch 2: defer DICTKEY_UNREF until key is no longer needed.
+           (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1042
+Problem:    Python: can't assign to vim.Buffer.name.
+Solution:   Python patch 3. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/ex_cmds.c, src/if_py_both.h,
+           src/if_python3.c, src/if_python.c, src/proto/ex_cmds.pro,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1043
+Problem:    Python: Dynamic compilation with 2.3 fails.
+Solution:   Python patch 4. (ZyX)
+Files:     src/if_python.c
+
+Patch 7.3.1044
+Problem:    Python: No {Buffer,TabPage,Window}.valid attributes.
+Solution:   Python patch 5: add .valid (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1045
+Problem:    Python: No error handling for VimToPython function.
+Solution:   Python patch 6. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1046
+Problem:    Python: Using Py_BuildValue for building strings.
+Solution:   Python patch 7 and 7.5: Replace Py_BuildValue with
+           PyString_FromString. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1047
+Problem:    Python: dir() does not work properly.
+Solution:   Python patch 8.  Add __dir__ method to all objects with custom
+           tp_getattr supplemented by __members__ attribute for at least
+           python-2* versions.  __members__ is not mentioned in python-3*
+           dir() output even if it is accessible. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1048
+Problem:    Python: no consistent naming.
+Solution:   Python patch 9: Rename d to dict and lookupDict to lookup_dict.
+           (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1049
+Problem:    Python: no consistent naming
+Solution:   Python patch 10: Rename DICTKEY_GET_NOTEMPTY to DICTKEY_GET. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1050
+Problem:    Python: Typo in pyiter_to_tv.
+Solution:   Python patch 11. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1051
+Problem:    Python: possible memory leaks.
+Solution:   Python patch 12: fix the leaks (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1052
+Problem:    Python: possible SEGV and negative refcount.
+Solution:   Python patch 13: Fix IterIter function. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1053
+Problem:    Python: no flag for types with tp_traverse+tp_clear.
+Solution:   Python patch 14: Add Py_TPFLAGS_HAVE_GC. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1054 (after 7.3.1042)
+Problem:    Can't build without the +autocmd feature. (Elimar Riesebieter)
+Solution:   Fix use of buf and curbuf.
+Files:     src/ex_cmds.c, src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.1055
+Problem:    Negated collection does not match newline.
+Solution:   Handle newline differently. (Hiroshi Shirosaki)
+Files:     src/regexp_nfa.c, src/testdir/test64.ok, src/testdir/test64.in
+
+Patch 7.3.1056
+Problem:    Python: possible memory leaks.
+Solution:   Python patch 15. (ZyX) Fix will follow later.
+Files:     src/eval.c, src/if_py_both.h, src/proto/eval.pro
+
+Patch 7.3.1057
+Problem:    Python: not enough compatibility.
+Solution:   Python patch 16: Make OutputWritelines support any sequence object
+           (ZyX) Note: tests fail
+Files:     src/if_py_both.h, src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1058
+Problem:    Call of funcref does not succeed in other script.
+Solution:   Python patch 17: add get_expanded_name(). (ZyX)
+Files:     src/eval.c, src/proto/eval.pro
+
+Patch 7.3.1059
+Problem:    Python: Using fixed size buffers.
+Solution:   Python patch 18: Use python's own formatter. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c
+
+Patch 7.3.1060
+Problem:    Python: can't repr() a function.
+Solution:   Python patch 19: add FunctionRepr(). (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1061
+Problem:    Python: Dictionary is not standard.
+Solution:   Python patch 20: Add standard methods and fields. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/eval.c, src/if_py_both.h,
+           src/if_python3.c, src/if_python.c, src/proto/eval.pro,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1062
+Problem:    Python: List is not standard.
+Solution:   Python patch 21: Add standard methods and fields. (ZyX)
+Files:     src/if_py_both.h, src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1063
+Problem:    Python: Function is not standard.
+Solution:   Python patch 22: make Function subclassable. (ZyX)
+Files:     src/eval.c, src/if_py_both.h, src/proto/eval.pro,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1064
+Problem:    Python: insufficient error checking.
+Solution:   Python patch 23. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1065
+Problem:    Python: key mapping is not standard.
+Solution:   Python patch 24: use PyMapping_Keys. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c
+
+Patch 7.3.1066
+Problem:    Python: Insufficient exception and error testing.
+Solution:   Python patch 25. (ZyX)
+Files:     src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1067
+Problem:    Python: documentation lags behind.
+Solution:   Python patch 26. (ZyX)
+Files:     runtime/doc/if_pyth.txt
+
+Patch 7.3.1068
+Problem:    Python: Script is auto-loaded on function creation.
+Solution:   Python patch 27. (ZyX)
+Files:     src/eval.c, src/if_py_both.h, src/proto/eval.pro,
+           src/testdir/test86.ok, src/testdir/test87.ok, src/vim.h
+
+Patch 7.3.1069
+Problem:    Python: memory leaks.
+Solution:   Python patch 28: Purge out DICTKEY_CHECK_EMPTY macros. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1070
+Problem:    Vim crashes in Python tests. Compiler warning for unused function.
+Solution:   Disable the tests for now. Move the function.
+Files:     src/if_py_both.h, src/if_python.c, src/testdir/test86.in,
+           src/testdir/test87.in
+
+Patch 7.3.1071
+Problem:    New regexp engine: backreferences don't work correctly.
+Solution:   Add every possible start/end position on the state stack.
+Files:     src/regexp_nfa.c, src/regexp.h, src/testdir/test64.in,
+           src/testdir/test64.ok
+
+Patch 7.3.1072
+Problem:    Compiler warning for uninitialized variable.
+Solution:   Initialize it.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1073
+Problem:    New regexp engine may run out of states.
+Solution:   Allocate states dynamically.  Also make the test report errors.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok,
+           src/testdir/test95.in
+
+Patch 7.3.1074
+Problem:    Compiler warning for printf format. (Manuel Ortega)
+Solution:   Add type casts.
+Files:     src/if_py_both.h
+
+Patch 7.3.1075
+Problem:    Compiler warning for storing a long_u in an int.
+Solution:   Declare the number as an int. (Mike Williams)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1076
+Problem:    New regexp engine: \@= and \& don't work.
+Solution:   Make these items work.  Add column info to logging.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1077
+Problem:    Python: Allocating dict the wrong way, causing a crash.
+Solution:   Use py_dict_alloc(). Fix some exception problems. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1078
+Problem:    New regexp engine: \@! doesn't work.
+Solution:   Implement the negated version of \@=.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1079
+Problem:    Test 87 fails.
+Solution:   Fix the test for Python 3.3. (ZyX)  Make it pass on 32 bit systems.
+Files:     src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1080
+Problem:    Test 86 fails.
+Solution:   Comment out the parts that don't work.  Make it pass on 32 bit
+           systems.
+Files:     src/testdir/test86.in, src/testdir/test86.ok
+
+Patch 7.3.1081
+Problem:    Compiler warnings on 64-bit Windows.
+Solution:   Change variable types. (Mike Williams)
+Files:     src/if_py_both.h, src/regexp_nfa.c
+
+Patch 7.3.1082
+Problem:    New regexp engine: Problem with \@= matching.
+Solution:   Save and restore nfa_match.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1083
+Problem:    New regexp engine: Does not support \%^ and \%$.
+Solution:   Support matching start and end of file.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1084
+Problem:    New regexp engine: only accepts up to \{,10}.
+Solution:   Remove upper limit.  Remove dead code with NFA_PLUS.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1085
+Problem:    New regexp engine: Non-greedy multi doesn't work.
+Solution:   Implement \{-}.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1086
+Problem:    Old regexp engine accepts illegal range, new one doesn't.
+Solution:   Also accept the illegal range with the new engine.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1087
+Problem:    A leading star is not seen as a normal char when \{} follows.
+Solution:   Save and restore the parse state properly.
+Files:     src/regexp.c, src/regexp_nfa.c, src/testdir/test64.in,
+           src/testdir/test64.ok
+
+Patch 7.3.1088
+Problem:    New regexp engine: \@<= and \@<! are not implemented.
+Solution:   Implement look-behind matching.  Fix off-by-one error in old
+           regexp engine.
+Files:     src/regexp.c, src/regexp_nfa.c, src/testdir/test64.in,
+           src/testdir/test64.ok
+
+Patch 7.3.1089
+Problem:    Tests 86 and 87 fail on MS-Windows. (Ken Takata)
+Solution:   Fix platform-specific stuff. (ZyX)
+Files:     src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1090
+Problem:    New regexp engine does not support \z1 .. \z9 and \z(.
+Solution:   Implement the syntax submatches.
+Files:     src/regexp.h, src/regexp_nfa.c
+
+Patch 7.3.1091
+Problem:    New regexp engine: no error when using \z1 or \z( where it does
+           not work.
+Solution:   Give an error message.
+Files:     src/regexp.c, src/regexp_nfa.c
+
+Patch 7.3.1092
+Problem:    Can't build with regexp debugging.  NFA debug output shows wrong
+           pattern.
+Solution:   Fix debugging code for recent changes.  Add the pattern to the
+           program.
+Files:     src/regexp_nfa.c, src/regexp.h
+
+Patch 7.3.1093
+Problem:    New regexp engine: When a sub expression is empty \1 skips a
+           character.
+Solution:   Make \1 try the current position when the match is empty.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1094
+Problem:    New regexp engine: Attempts to match "^" at every character.
+Solution:   Only try "^" at the start of a line.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1095
+Problem:    Compiler warnings for shadowed variables. (Christian Brabandt)
+Solution:   Rename new_state() to alloc_state().  Remove unnecessary
+           declaration.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1096
+Problem:    Python: popitem() was not defined in a standard way.
+Solution:   Remove the argument from popitem(). (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h, src/testdir/test86.in,
+           src/testdir/test86.ok, src/testdir/test87.in,
+           src/testdir/test87.ok
+
+Patch 7.3.1097
+Problem:    Python: a few recently added items are not documented.
+Solution:   Update the documentation. (ZyX)
+Files:     runtime/doc/if_pyth.txt
+
+Patch 7.3.1098
+Problem:    Python: Possible memory leaks
+Solution:   Add Py_XDECREF() calls. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1099
+Problem:    Python: Changing directory with os.chdir() causes problems for
+           Vim's notion of directories.
+Solution:   Add vim.chdir() and vim.fchdir(). (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/ex_docmd.c, src/if_py_both.h,
+           src/if_python3.c, src/if_python.c, src/proto/ex_docmd.pro,
+           src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1100
+Problem:    Python: a few more memory problems.
+Solution:   Add and remove Py_XDECREF(). (ZyX)
+Files:     src/if_py_both.h, src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1101
+Problem:    Configure doesn't find Python 3 on Ubuntu 13.04.
+Solution:   First try distutils.sysconfig. Also fix some indents.  (Ken
+           Takata)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.1102
+Problem:    Completion of ":py3do" and ":py3file" does not work after ":py3".
+Solution:   Make completion work. (Taro Muraoka)
+Files:     src/ex_docmd.c
+
+Patch 7.3.1103
+Problem:    New regexp engine: overhead in saving and restoring.
+Solution:   Make saving and restoring list IDs faster.  Don't copy or check \z
+           subexpressions when they are not used.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1104
+Problem:    New regexp engine does not handle "~".
+Solution:   Add support for "~".
+Files:     src/regexp_nfa.c, src/testdir/test24.in, src/testdir/test24.ok
+
+Patch 7.3.1105
+Problem:    New regexp engine: too much code in one function.  Dead code.
+Solution:   Move the recursive nfa_regmatch call to a separate function.
+           Remove the dead code.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1106
+Problem:    New regexp engine: saving and restoring lastlist in the states
+           takes a lot of time.
+Solution:   Use a second lastlist value for the first recursive call.
+Files:     src/regexp.h, src/regexp_nfa.c
+
+Patch 7.3.1107
+Problem:    Compiler warnings for unused variables.
+Solution:   Put the variables inside #ifdef.
+Files:     src/regexp.c, src/regexp_nfa.c
+
+Patch 7.3.1108
+Problem:    Error message for os.fchdir() (Charles Peacech)
+Solution:   Clear the error. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1109
+Problem:    Building on MS-Windows doesn't see changes in if_py_both.h.
+Solution:   Add a dependency. (Ken Takata)
+Files:     src/Make_bc5.mak, src/Make_cyg.mak, src/Make_ming.mak,
+           src/Make_mvc.mak
+
+Patch 7.3.1110
+Problem:    New regexp matching: Using \@= and the like can be slow.
+Solution:   Decide whether to first try matching the zero-width part or what
+           follows, whatever is more likely to fail.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1111
+Problem:    nfa_recognize_char_class() implementation is inefficient.
+Solution:   Use bits in an int instead of chars in a string. (Dominique Pelle)
+Files:     src/regexp_nfa.c, src/testdir/test36.in, src/testdir/test36.ok
+
+Patch 7.3.1112
+Problem:    New regexp engine: \%V not supported.
+Solution:   Implement \%V.  Add tests.
+Files:     src/regexp.c, src/regexp_nfa.c, src/testdir/test64.in,
+           src/testdir/test64.ok
+
+Patch 7.3.1113
+Problem:    New regexp engine: \%'m not supported.
+Solution:   Implement \%'m.  Add tests.
+Files:     src/regexp.c, src/regexp_nfa.c, src/testdir/test64.in,
+           src/testdir/test64.ok
+
+Patch 7.3.1114 (after 7.3.1110)
+Problem:    Can't build without the syntax feature.
+Solution:   Add #ifdefs. (Erik Falor)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1115
+Problem:    Many users don't like the cursor line number when 'relativenumber'
+           is set.
+Solution:   Have four combinations with 'number' and 'relativenumber'.
+           (Christian Brabandt)
+Files:     runtime/doc/options.txt, src/option.c, src/screen.c,
+           src/testdir/test89.in, src/testdir/test89.ok
+
+Patch 7.3.1116
+Problem:    Can't build without Visual mode.
+Solution:   Add #ifdefs.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1117
+Problem:    New regexp engine: \%[abc] not supported.
+Solution:   Implement \%[abc].  Add tests.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1118
+Problem:    Match failure rate is not very specific.
+Solution:   Tune the failure rate for match items.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1119
+Problem:    Flags in 'cpo' are search for several times.
+Solution:   Store the result and re-use the flags.
+Files:     src/regexp.c, src/regexp_nfa.c
+
+Patch 7.3.1120
+Problem:    Crash when regexp logging is enabled.
+Solution:   Avoid using NULL pointers. Advance over count argument.
+Files:     src/regexp.c, src/regexp_nfa.c
+
+Patch 7.3.1121
+Problem:    New regexp engine: adding states that are not used.
+Solution:   Don't add the states.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1122
+Problem:    New regexp engine: \@> not supported.
+Solution:   Implement \%>.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1123
+Problem:    Can't build tiny Vim on MS-Windows.
+Solution:   Adjust #ifdef around using modif_fname(). (Mike Williams)
+Files:     src/misc1.c
+
+Patch 7.3.1124
+Problem:    Python: Crash on MS-Windows when os.fchdir() is not available.
+Solution:   Check for _chdir to be NULL. (Ken Takata)
+Files:     src/if_py_both.h
+
+Patch 7.3.1125
+Problem:    Error for using \%V in a pattern in tiny Vim.
+Solution:   Allow using \%V but never match. (Dominique Pelle)
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1126
+Problem:    Compiler warning for uninitialized variable. (Tony Mechelynck)
+Solution:   Assign something to the variable.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1127
+Problem:    No error for using empty \%[].
+Solution:   Give error message.
+Files:     src/regexp.c, src/regexp_nfa.c
+
+Patch 7.3.1128
+Problem:    Now that the NFA engine handles everything every failure is a
+           syntax error.
+Solution:   Remove the syntax_error flag.
+Files:     src/regexp.c, src/regexp_nfa.c
+
+Patch 7.3.1129
+Problem:    Can't see what pattern in syntax highlighting is slow.
+Solution:   Add the ":syntime" command.
+Files:     src/structs.h, src/syntax.c, src/ex_cmds.h, src/ex_docmd.c,
+           src/proto/syntax.pro, src/ex_cmds2.c, src/proto/ex_cmds2.pro,
+           runtime/doc/syntax.txt
+
+Patch 7.3.1130 (after 7.3.1129)
+Problem:    Can't build with anything but huge features.
+Solution:   Check for FEAT_PROFILE. (Yasuhiro Matsumoto)
+Files:     src/ex_docmd.c, src/structs.h, src/syntax.c
+
+Patch 7.3.1131
+Problem:    New regexp engine is a bit slow.
+Solution:   Do not clear the state list.  Don't copy syntax submatches when
+           not used.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1132
+Problem:    Crash when debugging regexp.
+Solution:   Do not try to dump subexpr that were not set.  Skip over count of
+           \% items.
+Files:     src/regexp.c, src/regexp_nfa.c
+
+Patch 7.3.1133
+Problem:    New regexp engine is a bit slow.
+Solution:   Skip ahead to a character that must match.  Don't try matching a
+           "^" patter past the start of line.
+Files:     src/regexp_nfa.c, src/regexp.h
+
+Patch 7.3.1134
+Problem:    Running test 49 takes a long time.
+Solution:   Don't have it grep all files.
+Files:     src/testdir/test49.vim
+
+Patch 7.3.1135
+Problem:    Compiler warning for unused argument.
+Solution:   Add UNUSED.
+Files:     src/syntax.c
+
+Patch 7.3.1136
+Problem:    ":func Foo" does not show attributes.
+Solution:   Add "abort", "dict" and "range". (Yasuhiro Matsumoto)
+Files:     src/eval.c
+
+Patch 7.3.1137
+Problem:    New regexp engine: collections are slow.
+Solution:   Handle all characters in one go.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1138
+Problem:    New regexp engine: neglist no longer used.
+Solution:   Remove the now unused neglist.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1139
+Problem:    New regexp engine: negated flag is hardly used.
+Solution:   Add separate _NEG states, remove negated flag.
+Files:     src/regexp_nfa.c, src/regexp.h
+
+Patch 7.3.1140
+Problem:    New regexp engine: trying expensive match while the result is not
+           going to be used.
+Solution:   Check for output state already being in the state list.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1141
+Problem:    Win32: Check for available memory is not reliable and adds
+           overhead.
+Solution:   Remove mch_avail_mem(). (Mike Williams)
+Files:     src/os_win32.c, src/os_win32.h
+
+Patch 7.3.1142
+Problem:    Memory leak in ":syntime report".
+Solution:   Clear the grow array. (Dominique Pelle)
+Files:     src/syntax.c
+
+Patch 7.3.1143
+Problem:    When mapping NUL it is displayed as an X.
+Solution:   Check for KS_ZERO instead of K_ZERO. (Yasuhiro Matsumoto)
+Files:     src/message.c
+
+Patch 7.3.1144
+Problem:    "RO" is not translated everywhere.
+Solution:   Put inside _(). (Sergey Alyoshin)
+Files:     src/buffer.c, src/screen.c
+
+Patch 7.3.1145
+Problem:    New regexp engine: addstate() is called very often.
+Solution:   Optimize adding the start state.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1146
+Problem:    New regexp engine: look-behind match not checked when followed by
+           zero-width match.
+Solution:   Do the look-behind match before adding the zero-width state.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1147
+Problem:    New regexp engine: regstart is only used to find the first match.
+Solution:   Use regstart whenever adding the start state.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1148
+Problem:    No command line completion for ":syntime".
+Solution:   Implement the completion. (Dominique Pelle)
+Files:     runtime/doc/map.txt, src/ex_cmds.h, src/ex_docmd.c,
+           src/ex_getln.c, src/proto/syntax.pro, src/syntax.c, src/vim.h
+
+Patch 7.3.1149
+Problem:    New regexp engine: Matching plain text could be faster.
+Solution:   Detect a plain text match and handle it specifically.  Add
+           vim_regfree().
+Files:     src/regexp.c, src/regexp.h, src/regexp_nfa.c,
+           src/proto/regexp.pro, src/buffer.c, src/edit.c, src/eval.c,
+           src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c, src/ex_eval.c,
+           src/ex_getln.c, src/fileio.c, src/gui.c, src/misc1.c, src/misc2.c,
+           src/option.c, src/syntax.c, src/quickfix.c, src/search.c,
+           src/spell.c, src/tag.c, src/window.c, src/screen.c, src/macros.h,
+           src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1150
+Problem:    New regexp engine: Slow when a look-behind match does not have a
+           width specified.
+Solution:   Try to compute the maximum width.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1151
+Problem:    New regexp engine: Slow when a look-behind match is followed by a
+           zero-width match.
+Solution:   Postpone the look-behind match more often.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1152
+Problem:    In tiny build ireg_icombine is undefined. (Tony Mechelynck)
+Solution:   Add #ifdef.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1153
+Problem:    New regexp engine: Some look-behind matches are very expensive.
+Solution:   Postpone invisible matches further, until a match is almost found.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1154
+Problem:    New regexp_nfa engine: Unnecessary code.
+Solution:   Remove unnecessary code.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1155
+Problem:    MS-DOS: "make test" uses external rmdir command.
+Solution:   Rename "rmdir" to "rd". (Taro Muraoka)
+Files:     src/testdir/Make_dos.mak
+
+Patch 7.3.1156
+Problem:    Compiler warnings. (dv1445)
+Solution:   Initialize variables, even when the value isn't really used.
+Files:     src/regexp_nfa.c, src/eval.c
+
+Patch 7.3.1157
+Problem:    New regexp engine fails on "\(\<command\)\@<=.*"
+Solution:   Fix rule for postponing match.  Further tune estimating whether
+           postponing works better.  Add test.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1158
+Problem:    Crash when running test 86. (Jun Takimoto)
+Solution:   Define PY_SSIZE_T_CLEAN early. (Elimar Riesebieter)
+Files:     src/if_python.c, src/if_python3.c
+
+Patch 7.3.1159
+Problem:    The round() function is not always available. (Christ van
+           Willegen)
+Solution:   Use the solution from f_round().
+Files:     src/ex_cmds2.c, src/eval.c, src/proto/eval.pro
+
+Patch 7.3.1160
+Problem:    Mixing long and pointer doesn't always work.
+Solution:   Avoid cast to pointer.
+Files:     src/undo.c
+
+Patch 7.3.1161
+Problem:    Python: PyList_SetItem() is inefficient.
+Solution:   Use PyList_SET_ITEM() (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1162
+Problem:    Python: Memory leaks
+Solution:   Add more Py_DECREF(). (ZyX)
+Files:     src/if_py_both.h, src/if_python.c
+
+Patch 7.3.1163
+Problem:    Not easy to load Python modules.
+Solution:   Search "python2", "python3" and "pythonx" directories in
+           'runtimepath' for Python modules. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/configure.in, src/ex_cmds2.c,
+           src/if_py_both.h, src/if_python.c, src/if_python3.c,
+           src/testdir/test86.in, src/testdir/test87.in, src/auto/configure
+
+Patch 7.3.1164
+Problem:    Can't test what is actually displayed on screen.
+Solution:   Add the screenchar() and screenattr() functions.
+Files:     src/eval.c, runtime/doc/eval.txt
+
+Patch 7.3.1165
+Problem:    HP-UX compiler can't handle zero size array. (Charles Cooper)
+Solution:   Make the array one item big.
+Files:     src/regexp.h, src/regexp_nfa.c
+
+Patch 7.3.1166
+Problem:    Loading Python modules is not tested.
+Solution:   Enable commented-out tests, add missing files. (ZyX)
+Files:     src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok,
+           src/testdir/python2/module.py, src/testdir/python3/module.py,
+           src/testdir/pythonx/module.py, src/testdir/pythonx/modulex.py,
+           Filelist
+
+Patch 7.3.1167
+Problem:    Python configure check doesn't reject Python 2 when requesting
+           Python 3.  Some systems need -pthreads instead of -pthread.
+Solution:   Adjust configure accordingly. (Andrei Olsen)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.1168
+Problem:    Python "sane" configure checks give a warning message.
+Solution:   Use single quotes instead of escaped double quotes. (Ben Fritz)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.1169
+Problem:    New regexp engine: some work is done while executing a pattern,
+           even though the result is predictable.
+Solution:   Do the work while compiling the pattern.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1170
+Problem:    Patch 7.3.1058 breaks backwards compatibility, not possible to use
+           a function reference as a string. (lilydjwg)
+Solution:   Instead of translating the function name only translate "s:".
+Files:     src/eval.c
+
+Patch 7.3.1171
+Problem:    Check for digits and ascii letters can be faster.
+Solution:   Use a trick with one comparison. (Dominique Pelle)
+Files:     src/macros.h
+
+Patch 7.3.1172
+Problem:    Python 2: loading modules doesn't work well.
+Solution:   Fix the code. Add more tests. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python.c,
+           src/testdir/python2/module.py, src/testdir/python3/module.py,
+           src/testdir/python_after/after.py,
+           src/testdir/python_before/before.py, src/testdir/test86.in,
+           src/testdir/test86.ok, src/testdir/test87.in,
+           src/testdir/test87.ok, Filelist
+
+Patch 7.3.1173
+Problem:    Python 2 tests don't have the same output everywhere.
+Solution:   Make the Python 2 tests more portable. (ZyX)
+Files:     src/testdir/test86.in, src/testdir/test86.ok
+
+Patch 7.3.1174
+Problem:    Python 2 and 3 use different ways to load modules.
+Solution:   Use the same method. (ZyX)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python3.c,
+           src/if_python.c
+
+Patch 7.3.1175
+Problem:    Using isalpha() and isalnum() can be slow.
+Solution:   Use range checks. (Mike Williams)
+Files:     src/ex_docmd.c, src/macros.h
+
+Patch 7.3.1176
+Problem:    Compiler warnings on 64 bit system.
+Solution:   Add type casts. (Mike Williams)
+Files:     src/eval.c, src/if_py_both.h
+
+Patch 7.3.1177
+Problem:    Wasting memory on padding.
+Solution:   Reorder struct fields. (Dominique Pelle)
+Files:     src/structs.h, src/fileio.c
+
+Patch 7.3.1178
+Problem:    Can't put all Vim config files together in one directory.
+Solution:   Load ~/.vim/vimrc if ~/.vimrc does not exist. (Lech Lorens)
+Files:     runtime/doc/gui.txt, runtime/doc/starting.txt, src/gui.c,
+           src/main.c, src/os_amiga.h, src/os_dos.h, src/os_unix.h
+
+Patch 7.3.1179
+Problem:    When a global mapping starts with the same characters as a
+           buffer-local mapping Vim waits for a character to be typed to find
+           out whether the global mapping is to be used. (Andy Wokula)
+Solution:   Use the local mapping without waiting. (Michael Henry)
+Files:     runtime/doc/map.txt, src/getchar.c
+
+Patch 7.3.1180
+Problem:    When current directory changes, path from cscope may no longer be
+           valid. (AS Budden)
+Solution:   Always store the absolute path. (Christian Brabandt)
+Files:     src/if_cscope.c
+
+Patch 7.3.1181
+Problem:    Wrong error message for 1.0[0].
+Solution:   Check for funcref and float separately. (Yasuhiro Matsumoto)
+Files:     src/eval.c
+
+Patch 7.3.1182
+Problem:    'backupcopy' default on MS-Windows does not work for hard and soft
+           links.
+Solution:   Check for links. (David Pope, Ken Takata)
+Files:     src/fileio.c, src/os_win32.c, src/proto/os_win32.pro
+
+Patch 7.3.1183
+Problem:    Python tests 86 and 87 fail.
+Solution:   Add "empty" files. (ZyX)
+Files:     src/testdir/python_before/before_1.py,
+           src/testdir/python_before/before_2.py
+
+Patch 7.3.1184
+Problem:    Highlighting is sometimes wrong. (Axel Bender)
+Solution:   Fetch regline again when returning from recursive regmatch.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1185
+Problem:    New regexp engine: no match with ^ after \n. (SungHyun Nam)
+Solution:   Fix it, add a test.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1186
+Problem:    Python 3: test 87 may crash.
+Solution:   Use _PyArg_Parse_SizeT instead of PyArg_Parse. (Jun Takimoto)
+Files:     src/if_python3.c
+
+Patch 7.3.1187 (after 7.3.1170)
+Problem:    "s:" is recognized but "<SID>" is not. (ZyX)
+Solution:   Translate "<SID>" like "s:".
+Files:     src/eval.c
+
+Patch 7.3.1188
+Problem:    Newline characters messing up error message.
+Solution:   Remove the newlines. (Kazunobu Kuriyama)
+Files:     src/gui_x11.c
+
+Patch 7.3.1189 (after 7.3.1185)
+Problem:    Highlighting is still wrong sometimes. (Dominique Pelle)
+Solution:   Also restore reginput properly.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1190
+Problem:    Compiler warning for parentheses. (Christian Wellenbrock)
+Solution:   Change #ifdef.
+Files:     src/ex_docmd.c
+
+Patch 7.3.1191
+Problem:    Backreference to previous line doesn't work. (Lech Lorens)
+Solution:   Implement looking in another line.
+Files:     src/regexp.c, src/regexp_nfa.c, src/testdir/test64.in,
+           src/testdir/test64.ok
+
+Patch 7.3.1192
+Problem:    Valgrind reports errors when using backreferences. (Dominique
+           Pelle)
+Solution:   Do not check the end of submatches.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1193
+Problem:    fail_if_missing not used for Python 3.
+Solution:   Give an error when Python 3 can't be configured. (Andrei Olsen)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.1194
+Problem:    Yaml highlighting is slow.
+Solution:   Tune the estimation of pattern failure chance.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1195
+Problem:    Compiler warning for uninitialized variable. (Tony Mechelynck)
+Solution:   Set the length to the matching backref.
+Files:     src/regexp.c
+
+Patch 7.3.1196
+Problem:    Old regexp engine does not match pattern with backref correctly.
+           (Dominique Pelle)
+Solution:   Fix setting status.  Test multi-line patterns better.
+Files:     src/regexp.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1197
+Problem:    ":wviminfo!" does not write history previously read from a viminfo
+           file.  (Roland Eggner)
+Solution:   When not merging history write all entries.
+Files:     src/ex_cmds.c, src/ex_getln.c, src/proto/ex_getln.pro
+
+Patch 7.3.1198
+Problem:    Build error when using Perl 5.18.0 and dynamic loading.
+Solution:   Change #ifdefs for Perl_croak_xs_usage. (Ike Devolder)
+Files:     src/if_perl.xs
+
+Patch 7.3.1199
+Problem:    When evaluating 'foldexpr' causes an error this is silently
+           ignored and evaluation is retried every time.
+Solution:   Set emsg_silent instead of emsg_off. Stop evaluating 'foldexpr' is
+           it is causing errors.  (Christian Brabandt)
+Files:     src/fold.c
+
+Patch 7.3.1200
+Problem:    When calling setline() from Insert mode, using CTRL-R =, undo does
+           not work properly. (Israel Chauca)
+Solution:   Sync undo after evaluating the expression. (Christian Brabandt)
+Files:     src/edit.c, src/testdir/test61.in, src/testdir/test61.ok
+
+Patch 7.3.1201
+Problem:    When a startup script creates a preview window, it probably
+           becomes the current window.
+Solution:   Make another window the current one. (Christian Brabandt)
+Files:     src/main.c
+
+Patch 7.3.1202 (after 7.3.660)
+Problem:    Tags are not found in case-folded tags file. (Darren cole, Issue
+           90)
+Solution:   Take into account that when case folding was used for the tags
+           file "!rm" sorts before the "!_TAG" header lines.
+Files:     src/tag.c
+
+Patch 7.3.1203
+Problem:    Matches from matchadd() might be highlighted incorrectly when they
+           are at a fixed position and inserting lines. (John Szakmeister)
+Solution:   Redraw all lines below a change if there are highlighted matches.
+           (idea by Christian Brabandt)
+Files:     src/screen.c
+
+Patch 7.3.1204
+Problem:    Calling gettabwinvar() in 'tabline' cancels Visual mode. (Hirohito
+           Higashi)
+Solution:   Don't always use goto_tabpage_tp().
+Files:     src/window.c, src/proto/window.pro, src/eval.c, src/if_py_both.h
+
+Patch 7.3.1205
+Problem:    logtalk.dict is not removed on uninstall.
+Solution:   Remove the file. (Kazunobu Kuriyama)
+Files:     src/Makefile
+
+Patch 7.3.1206
+Problem:    Inconsistent function argument declarations.
+Solution:   Use ANSI style.
+Files:     src/if_py_both.h
+
+Patch 7.3.1207
+Problem:    New regexp engine: no match found on "#if FOO". (Lech Lorens)
+Solution:   When adding a state gets skipped don't adjust the index.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1208
+Problem:    Compiler warnings on MS-Windows.
+Solution:   Add type cast.  Move variable declaration. (Mike Williams)
+Files:     src/option.c, src/os_mswin.c
+
+Patch 7.3.1209
+Problem:    No completion for ":tabdo".
+Solution:   Add tabdo to the list of modifiers. (Dominique Pelle)
+Files:     src/ex_docmd.c
+
+Patch 7.3.1210 (after 7.3.1182)
+Problem:    'backupcopy' default on MS-Windows is wrong when 'encoding' equals
+           the current codepage.
+Solution:   Change the #else block. (Ken Takata)
+Files:     src/os_win32.c
+
+Patch 7.3.1211
+Problem:    MS-Windows: When 'encoding' differs from the current codepage
+           ":hardcopy" does not work properly.
+Solution:   Use TextOutW() and SetDlgItemTextW(). (Ken Takata)
+Files:     src/os_mswin.c, src/vim.rc
+
+Patch 7.3.1212
+Problem:    "make test" on MS-Windows does not report failure like Unix does.
+Solution:   Make it work like on Unix. (Taro Muraoka)
+Files:     src/testdir/Make_dos.mak
+
+Patch 7.3.1213
+Problem:    Can't build with small features and Python.
+Solution:   Adjust #ifdefs.
+Files:     src/eval.c, src/buffer.c, src/eval.c, src/window.c
+
+Patch 7.3.1214
+Problem:    Missing declaration for init_users() and realloc_post_list().
+           (Salman Halim)
+Solution:   Add the declarations.
+Files:     src/misc1.c, src/regexp_nfa.c
+
+Patch 7.3.1215
+Problem:    Compiler warning for function not defined.
+Solution:   Add #ifdef.
+Files:     src/misc1.c
+
+Patch 7.3.1216
+Problem:    Configure can't find Motif on Ubuntu.
+Solution:   Search for libXm in /usr/lib/*-linux-gnu.
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.3.1217
+Problem:    New regexp engine: Can't handle \%[[ao]]. (Yukihiro Nakadaira)
+Solution:   Support nested atoms inside \%[].
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1218
+Problem:    "make test" on MS-Windows does not clean all temporary files and
+           gives some unnecessary message.
+Solution:   Clean the right files.  Create .failed files. (Ken Takata)
+Files:     src/testdir/Make_dos.mak
+
+Patch 7.3.1219
+Problem:    No test for using []] inside \%[].
+Solution:   Add a test.
+Files:     src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1220
+Problem:    MS-Windows: When using wide font italic and bold are not included.
+Solution:   Support wide-bold, wide-italic and wide-bold-italic. (Ken Takata,
+           Taro Muraoka)
+Files:     src/gui.c, src/gui.h, src/gui_w48.c
+
+Patch 7.3.1221
+Problem:    When build flags change "make distclean" run into a configure
+           error.
+Solution:   When CFLAGS changes delete auto/config.cache.  Also avoid adding
+           duplicate text to flags. (Ken Takata)
+Files:     src/Makefile, src/configure.in, src/auto/configure
+
+Patch 7.3.1222
+Problem:    Cannot execute some tests from the src directly.
+Solution:   Add missing targets.
+Files:     src/Makefile
+
+Patch 7.3.1223
+Problem:    Tests fail on MS-Windows.
+Solution:   Avoid depending on OS version. Use DOS commands instead of Unix
+           commands. (Taro Muraoka, Ken Takata)
+Files:     src/testdir/test17.in, src/testdir/test50.in,
+           src/testdir/test71.in, src/testdir/test77.in
+
+Patch 7.3.1224
+Problem:    Clang gives warnings on xxd.
+Solution:   Change how to use part of a string. (Dominique Pelle) Also avoid
+           warning for return not reached.
+Files:     src/xxd/xxd.c, src/regexp_nfa.c
+
+Patch 7.3.1225
+Problem:    Compiler warnings when building with Motif.
+Solution:   Change set_label() argument. (Kazunobu Kuriyama)
+Files:     src/gui_motif.c
+
+Patch 7.3.1226
+Problem:    Python: duplicate code.
+Solution:   Share code between OutputWrite() and OutputWritelines(). (ZyX)
+Files:     src/if_py_both.h, src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.1227
+Problem:    Inconsistent string conversion.
+Solution:   Use 'encoding' instead of utf-8. Use METH_O in place of
+           METH_VARARGS where appropriate. (ZyX)
+Files:     src/if_py_both.h, src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.1228
+Problem:    Python: various inconsistencies and problems.
+Solution:   StringToLine now supports both bytes() and unicode() objects.
+           Make function names consistent.  Fix memory leak fixed in
+           StringToLine. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c
+
+Patch 7.3.1229
+Problem:    Python: not so easy to delete/restore translating.
+Solution:   Make macros do translation of exception messages. (ZyX)
+           Note: this breaks translations!
+Files:     src/if_py_both.h, src/if_python3.c
+
+Patch 7.3.1230
+Problem:    Python: Exception messages are not clear.
+Solution:   Make exception messages more verbose. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.1231
+Problem:    Python: use of numbers not consistent.
+Solution:   Add support for Number protocol. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.1232
+Problem:    Python: inconsistencies in variable names.
+Solution:   Rename variables. (ZyX)
+Files:     src/eval.c, src/if_py_both.h
+
+Patch 7.3.1233
+Problem:    Various Python problems.
+Solution:   Fix VimTryEnd. Crash with debug build and PYTHONDUMPREFS=1. Memory
+           leaks in StringToLine(), BufferMark() and convert_dl. (ZyX)
+Files:     src/if_py_both.h, src/testdir/test86.in, src/testdir/test86.ok,
+           src/testdir/test87.in, src/testdir/test87.ok
+
+Patch 7.3.1234 (after 7.3.1229)
+Problem:    Python: Strings are not marked for translation.
+Solution:   Add N_() where appropriate. (ZyX)
+Files:     src/if_py_both.h
+
+Patch 7.3.1235
+Problem:    In insert mode CTRL-] is not inserted, on the command-line it is.
+Solution:   Don't insert CTRL-] on the command line. (Yukihiro Nakadaira)
+Files:     src/ex_getln.c
+
+Patch 7.3.1236
+Problem:    Python: WindowSetattr() missing support for NUMBER_UNSIGNED.
+Solution:   Add NUMBER_UNSIGNED, add more tests. Various fixes. (ZyX)
+Files:     src/if_py_both.h, src/if_python3.c, src/if_python.c,
+           src/testdir/pythonx/failing.py,
+           src/testdir/pythonx/failing_import.py, src/testdir/test86.in,
+           src/testdir/test86.ok, src/testdir/test87.in,
+           src/testdir/test87.ok, src/testdir/pythonx/topmodule/__init__.py,
+           src/testdir/pythonx/topmodule/submodule/__init__.py,
+           src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py,
+           src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py
+
+Patch 7.3.1237
+Problem:    Python: non-import errors not handled correctly.
+Solution:   Let non-ImportError exceptions pass the finder. (ZyX)
+Files:     src/if_py_both.h, src/testdir/test86.ok, src/testdir/test87.ok
+
+Patch 7.3.1238
+Problem:    Crash in Python interface on 64 bit machines.
+Solution:   Change argument type of PyString_AsStringAndSize. (Taro Muraoka,
+           Jun Takimoto)
+Files:     src/if_python.c
+
+Patch 7.3.1239
+Problem:    Can't build with Python and MSVC10.
+Solution:   Move #if outside of macro. (Taro Muraoka)
+Files:     src/if_py_both.h
+
+Patch 7.3.1240
+Problem:    Memory leak in findfile().
+Solution:   Free the memory. (Christian Brabandt)
+Files:     src/eval.c
+
+Patch 7.3.1241 (after 7.3.1236)
+Problem:    Some test files missing from the distribution.
+Solution:   Update the list of files.
+Files:     Filelist
+
+Patch 7.3.1242
+Problem:    No failure when trying to use a number as a string.
+Solution:   Give an error when StringToLine() is called with an instance of
+           the wrong type. (Jun Takimoto)
+Files:     src/if_py_both.h
+
+Patch 7.3.1243
+Problem:    New regexp engine: back references in look-behind match don't
+           work. (Lech Lorens)
+Solution:   Copy the submatches before a recursive match. Also fix function
+           prototypes.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1244
+Problem:    MS-Windows: confirm() dialog text may not fit.
+Solution:   Use GetTextWidthEnc() instead of GetTextWidth(). (Yasuhiro
+           Matsumoto)
+Files:     src/gui_w32.c
+
+Patch 7.3.1245
+Problem:    MS-Windows: confirm() dialog text may still not fit.
+Solution:   Use GetTextWidthEnc() instead of GetTextWidth() in two more
+           places. (Yasuhiro Matsumoto)
+Files:     src/gui_w32.c
+
+Patch 7.3.1246
+Problem:    When setting 'winfixheight' and resizing the window causes the
+           window layout to be wrong.
+Solution:   Add frame_check_height() and frame_check_width() (Yukihiro
+           Nakadaira)
+Files:     src/window.c
+
+Patch 7.3.1247
+Problem:    New regexp engine: '[ ]\@!\p\%([ ]\@!\p\)*:' does not always match.
+Solution:   When there is a PIM add a duplicate state that starts at another
+           position.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1248
+Problem:    Still have old hacking code for Input Method.
+Solution:   Add 'imactivatefunc' and 'imstatusfunc' as a generic solution to
+           Input Method activation. (Yukihiro Nakadaira)
+Files:     runtime/doc/options.txt, src/fileio.c, src/mbyte.c, src/option.c,
+           src/option.h, src/proto/fileio.pro
+
+Patch 7.3.1249
+Problem:    Modeline not recognized when using "Vim" instead of "vim".
+Solution:   Also accept "Vim".
+Files:     src/buffer.c
+
+Patch 7.3.1250
+Problem:    Python tests fail on MS-Windows.
+Solution:   Change backslashes to slashes. (Taro Muraoka)
+Files:     src/testdir/test86.in, src/testdir/test87.in
+
+Patch 7.3.1251
+Problem:    Test 61 messes up viminfo.
+Solution:   Specify a separate viminfo file.
+Files:     src/testdir/test61.in
+
+Patch 7.3.1252
+Problem:    Gvim does not find the toolbar bitmap files in ~/vimfiles/bitmaps
+           if the corresponding menu command contains additional characters
+           like the shortcut marker '&' or if you use a non-english locale.  
+Solution:   Use menu->en_dname or menu->dname. (Martin Gieseking)
+Files:     src/gui_w32.c
+
+Patch 7.3.1253 (after 7.3.1200)
+Problem:    Still undo problem after using CTRL-R = setline(). (Hirohito
+           Higashi)
+Solution:   Set the ins_need_undo flag.
+Files:     src/edit.c
+
+Patch 7.3.1254 (after 7.3.1252)
+Problem:    Can't build without the multi-lang feature. (John Marriott)
+Solution:   Add #ifdef.
+Files:     src/gui_w32.c
+
+Patch 7.3.1255
+Problem:    Clang warnings when building with Athena.
+Solution:   Add type casts. (Dominique Pelle)
+Files:     src/gui_at_fs.c
+
+Patch 7.3.1256
+Problem:    Can't build without eval or autocmd feature.
+Solution:   Add #ifdefs.
+Files:     src/mbyte.c, src/window.c
+
+Patch 7.3.1257
+Problem:    With GNU gettext() ":lang de_DE.utf8" does not always result in
+           German messages.
+Solution:   Clear the $LANGUAGE environment variable.
+Files:     src/ex_cmds2.c
+
+Patch 7.3.1258
+Problem:    Using submatch() may crash Vim. (Ingo Karkat)
+Solution:   Restore the number of subexpressions used.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1259
+Problem:    No test for patch 7.3.1258
+Solution:   Add a test entry.
+Files:     src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.3.1260
+Problem:    User completion does not get the whole command line in the command
+           line window.
+Solution:   Pass on the whole command line. (Daniel Thau)
+Files:     src/ex_getln.c, src/structs.h
+
+Patch 7.3.1261 (after patch 7.3.1179)
+Problem:    A buffer-local language mapping from a keymap stops a global
+           insert mode mapping from working. (Ron Aaron)
+Solution:   Do not wait for more characters to be typed only when the mapping
+           was defined with <nowait>.
+Files:     runtime/doc/map.txt, src/eval.c, src/getchar.c,
+           src/testdir/test75.in, src/testdir/test75.ok
+
+Patch 7.3.1262
+Problem:    Crash and compilation warnings with Cygwin.
+Solution:   Check return value of XmbTextListToTextProperty(). Add type casts.
+           Adjust #ifdefs. (Lech Lorens)
+Files:     src/main.c, src/os_unix.c, src/ui.c
+
+Patch 7.3.1263
+Problem:    Typo in short option name.
+Solution:   Change "imse" to "imsf".
+Files:     src/option.c
+
+Patch 7.3.1264 (after 7.3.1261)
+Problem:    Missing m_nowait.
+Solution:   Include missing part of the patch.
+Files:     src/structs.h
+
+Patch 7.3.1265 (after 7.3.1249)
+Problem:    Accepting "Vim:" for a modeline causes errors too often.
+Solution:   Require "Vim:" to be followed by "set".
+Files:     src/buffer.c
+
+Patch 7.3.1266
+Problem:    QNX: GUI fails to start.
+Solution:   Remove the QNX-specific #ifdef. (Sean Boudreau)
+Files:     src/gui.c
+
+Patch 7.3.1267
+Problem:    MS-Windows ACL support doesn't work well.
+Solution:   Implement more ACL support. (Ken Takata)
+Files:     src/os_win32.c
+
+Patch 7.3.1268
+Problem:    ACL support doesn't work when compiled with MingW.
+Solution:   Support ACL on MingW. (Ken Takata)
+Files:     src/os_win32.c, src/os_win32.h
+
+Patch 7.3.1269
+Problem:    Insert completion keeps entry selected even though the list has
+           changed. (Olivier Teuliere)
+Solution:   Reset compl_shown_match and compl_curr_match. (Christian Brabandt)
+Files:     src/edit.c
+
+Patch 7.3.1270
+Problem:    Using "Vp" in an empty buffer can't be undone. (Hauke Petersen)
+Solution:   Save one line in an empty buffer. (Christian Brabandt)
+Files:     src/ops.c
+
+Patch 7.3.1271 (after 7.3.1260)
+Problem:    Command line completion does not work.
+Solution:   Move setting xp_line down. (Daniel Thau)
+Files:     src/ex_getln.c
+
+Patch 7.3.1272
+Problem:    Crash when editing Ruby file. (Aliaksandr Rahalevich)
+Solution:   Reallocate the state list when necessary.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1273
+Problem:    When copying a location list the index might be wrong.
+Solution:   Set the index to one when using the first entry. (Lech Lorens)
+Files:     src/quickfix.c
+
+Patch 7.3.1274
+Problem:    When selecting an entry from a location list it may pick an
+           arbitrary window or open a new one.
+Solution:   Prefer using a window related to the location list. (Lech Lorens)
+Files:     src/quickfix.c
+
+Patch 7.3.1275
+Problem:    "gn" does not work when the match is a single character.
+Solution:   Fix it, add a test. (Christian Brabandt)
+Files:     src/search.c, src/testdir/test53.in, src/testdir/test53.ok
+
+Patch 7.3.1276
+Problem:    When using a cscope connection resizing the window may send
+           SIGWINCH to cscope and it quits.
+Solution:   Call setpgid(0, 0) in the child process. (Narendran Gopalakrishnan)
+Files:     src/if_cscope.c
+
+Patch 7.3.1277
+Problem:    In diff mode 'cursorline' also draws in the non-active window.
+           When 'nu' and 'sbr' are set the 'sbr' string is not underlined.
+Solution:   Only draw the cursor line in the current window. Combine the
+           'cursorline' and other highlighting attributes. (Christian
+           Brabandt)
+Files:     src/screen.c
+
+Patch 7.3.1278
+Problem:    When someone sets the screen size to a huge value with "stty" Vim
+           runs out of memory before reducing the size.
+Solution:   Limit Rows and Columns in more places.
+Files:     src/gui.c, src/gui_gtk_x11.c, src/option.c, src/os_unix.c,
+           src/proto/term.pro, src/term.c
+
+Patch 7.3.1279
+Problem:    Compiler warning for variable uninitialized. (Tony Mechelynck)
+Solution:   Add an init.
+Files:     src/ex_getln.c
+
+Patch 7.3.1280
+Problem:    Reading memory already freed since patch 7.3.1247. (Simon
+           Ruderich, Dominique Pelle)
+Solution:   Copy submatches before reallocating the state list.
+Files:     src/regexp_nfa.c
+
+Patch 7.3.1281
+Problem:    When 'ttymouse' is set to "xterm2" clicking in column 123 moves
+           the cursor to column 96. (Kevin Goodsell)
+Solution:   Decode KE_CSI.
+Files:     src/term.c
+
+Patch 7.3.1282 (after 7.3.1277)
+Problem:    'cursorline' not drawn in any other window. (Charles Campbell)
+Solution:   Do draw the cursor line in other windows.
+Files:     src/screen.c
+
+Patch 7.3.1283
+Problem:    Test 71 fails on MS-Windows.
+Solution:   Put the binary data in a separate file. (Ken Takata)
+Files:     src/testdir/test71.in, src/testdir/test71a.in
+
+Patch 7.3.1284
+Problem:    Compiler warnings in MS-Windows clipboard handling.
+Solution:   Add type casts. (Ken Takata)
+Files:     src/winclip.c
+
+Patch 7.3.1285
+Problem:    No tests for picking a window when selecting an entry in a
+           location list.  Not picking the right window sometimes.
+Solution:   Add test 96. Set usable_win appropriately. (Lech Lorens)
+Files:     src/quickfix.c, src/testdir/Makefile, src/testdir/test96.in,
+           src/testdir/test96.ok, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms
+
+Patch 7.3.1286
+Problem:    Check for screen size missing for Athena and Motif.
+Solution:   Add call to limit_screen_size().
+Files:     src/gui_x11.c
+
+Patch 7.3.1287
+Problem:    Python SystemExit exception is not handled properly.
+Solution:   Catch the exception and give an error. (Yasuhiro Matsumoto, Ken
+           Takata)
+Files:     runtime/doc/if_pyth.txt, src/if_py_both.h, src/if_python.c,
+           src/if_python3.c
+
+Patch 7.3.1288
+Problem:    The first ":echo 'hello'" command output doesn't show.  Mapping
+           for <S-F3> gets triggered during startup.
+Solution:   Add debugging code for the termresponse.  When receiving the "Co"
+           entry and when setting 'ambiwidth' redraw right away if possible.
+           Add redraw_asap().  Don't set 'ambiwidth' if it already had the
+           right value.  Do the 'ambiwidth' check in the second row to avoid
+           confusion with <S-F3>.
+Files:     src/term.c, src/screen.c, src/proto/screen.pro
+
+Patch 7.3.1289
+Problem:    Get GLIB warning when removing a menu item.
+Solution:   Reference menu-id and also call gtk_container_remove().  (Ivan
+           Krasilnikov)
+Files:     src/gui_gtk.c
+
+Patch 7.3.1290 (after 7.3.1253)
+Problem:    CTRL-R = in Insert mode changes the start of the insert position.
+           (Ingo Karkat)
+Solution:   Only break undo, don't start a new insert.
+Files:     src/edit.c
+
+Patch 7.3.1291 (after 7.3.1288)
+Problem:    Compiler warnings for uninitialized variables. (Tony Mechelynck)
+Solution:   Initialize the variables.
+Files:     src/screen.c
+
+Patch 7.3.1292
+Problem:    Possibly using invalid pointer when searching for window. (Raichoo)
+Solution:   Use "firstwin" instead of "tp_firstwin" for current tab.
+Files:     src/window.c
+
+Patch 7.3.1293
+Problem:    Put in empty buffer cannot be undone.
+Solution:   Save one more line for undo. (Ozaki)
+Files:     src/ops.c
+
+Patch 7.3.1294
+Problem:    ":diffoff" resets options.
+Solution:   Save and restore option values. (Christian Brabandt)
+Files:     src/diff.c, src/structs.h, src/option.c
+
+Patch 7.3.1295
+Problem:    glob() and globpath() do not handle escaped special characters
+           properly.
+Solution:   Handle escaped characters differently. (Adnan Zafar)
+Files:     src/testdir/Makefile, src/testdir/test97.in,
+           src/testdir/test97.ok, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms, src/fileio.c,
+           src/misc1.c
+
+Patch 7.3.1296
+Problem:    Only MS-Windows limits the GUI window size to what fits on the
+           monitor.
+Solution:   Limit the size for all systems. (Daniel Harding)
+Files:     src/ui.c
+
+Patch 7.3.1297
+Problem:    findfile() directory matching does not work when a star follows
+           text. (Markus Braun)
+Solution:   Make a wildcard work properly. (Christian Brabandt)
+Files:     src/misc2.c, src/testdir/test89.in, src/testdir/test89.ok
+
+Patch 7.3.1298 (after 7.3.1297)
+Problem:    Crash.
+Solution:   Use STRCPY() instead of STRCAT() and allocate one more byte.
+Files:     src/misc2.c
+
+Patch 7.3.1299
+Problem:    Errors when doing "make proto".  Didn't do "make depend" for a
+           while.
+Solution:   Add #ifdefs.  Update dependencies.  Update proto files.
+Files:     src/if_python3.c, src/os_win32.c, src/Makefile,
+           src/proto/ex_docmd.pro, src/proto/if_python.pro,
+           src/proto/if_python3.pro, src/proto/gui_w16.pro,
+           src/proto/gui_w32.pro, src/proto/os_win32.pro
+
+Patch 7.3.1300
+Problem:    Mac: tiny and small build fails.
+Solution:   Don't include os_macosx.m in tiny build. Include mouse support in
+           small build. (Kazunobu Kuriyama)
+Files:     src/configure.in, src/auto/configure, src/vim.h
+
+Patch 7.3.1301
+Problem:    Some tests fail on MS-Windows.
+Solution:   Fix path separators in test 89 and 96.  Omit test 97, escaping
+           works differently.  Make findfile() work on MS-Windows.
+Files:     src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/test89.in,
+           src/testdir/test96.in, src/misc2.c
+
+Patch 7.3.1302
+Problem:    Test 17 fails on MS-Windows.  Includes line break in file name
+           everywhere.
+Solution:   Fix 'fileformat'. Omit CR-LF from a line read from an included
+           file.
+Files:     src/search.c, src/testdir/test17.in, src/testdir/test17.ok
+
+Patch 7.3.1303 (after 7.3.1290)
+Problem:    Undo is synced whenever CTRL-R = is called, breaking some plugins.
+Solution:   Only break undo when calling setline() or append().
+Files:     src/globals.h, src/eval.c, src/edit.c, src/testdir/test61.in,
+           src/testdir/test61.ok
+
+Patch 7.3.1304
+Problem:    Test 89 still fails on MS-Windows.
+Solution:   Set 'shellslash'. (Taro Muraoka)
+Files:     src/testdir/test89.in
+
+Patch 7.3.1305
+Problem:    Warnings from 64 bit compiler.
+Solution:   Add type casts.
+Files:     src/misc2.c
+
+Patch 7.3.1306
+Problem:    When redrawing the screen during startup the intro message may be
+           cleared.
+Solution:   Redisplay the intro message when appropriate.
+Files:     src/screen.c, src/version.c, src/proto/version.pro
+
+Patch 7.3.1307
+Problem:    MS-Windows build instructions are outdated.
+Solution:   Adjust for building on Windows 7.  Drop Windows 95/98/ME support.
+Files:     Makefile, nsis/gvim.nsi
+
+Patch 7.3.1308
+Problem:    Typos in MS-Windows build settings and README.
+Solution:   Minor changes to MS-Windows files.
+Files:     src/msvc2008.bat, src/msvc2010.bat, src/VisVim/README_VisVim.txt
+
+Patch 7.3.1309
+Problem:    When a script defines a function the flag to wait for the user to
+           hit enter is reset.
+Solution:   Restore the flag. (Yasuhiro Matsumoto)  Except when the user was
+           typing the function.
+Files:     src/eval.c
+
+Patch 7.3.1310
+Problem:    Typos in nsis script. Can use better compression.
+Solution:   Fix typos.  Use lzma compression. (Ken Takata)
+Files:     nsis/gvim.nsi
+
+Patch 7.3.1311
+Problem:    Compiler warnings on Cygwin.
+Solution:   Add type casts. Add windows include files. (Ken Takata)
+Files:     src/mbyte.c, src/ui.c
+
+Patch 7.3.1312 (after 7.3.1287)
+Problem:    Not giving correct error messages for SystemExit().
+Solution:   Move E858 into an else. (Ken Takata)
+Files:     src/if_py_both.h
+
+Patch 7.3.1313
+Problem:    :py and :py3 don't work when compiled with Cygwin or MingW with 64
+           bit.
+Solution:   Add -DMS_WIN64 to the build command. (Ken Takata)
+Files:     src/Make_cyg.mak, src/Make_ming.mak
+
+Patch 7.3.1314
+Problem:    Test 87 fails with Python 3.3.
+Solution:   Filter the error messages. (Taro Muraoka)
+Files:     src/testdir/test87.in
+
+Patch 7.4a.001
+Problem:    Script to update syntax menu is outdated.
+Solution:   Add the missing items.
+Files:     runtime/makemenu.vim
+
+Patch 7.4a.002
+Problem:    Valgrind errors in test 89. (Simon Ruderich)
+Solution:   Allocate one more byte. (Dominique Pelle)
+Files:     src/misc2.c
+
+Patch 7.4a.003
+Problem:    Copyright year is outdated.
+Solution:   Only use the first year.
+Files:     src/vim.rc, src/vim16.rc
+
+Patch 7.4a.004
+Problem:    MSVC 2012 Update 3 is not recognized.
+Solution:   Add the version number. (Raymond Ko)
+Files:     src/Make_mvc.mak
+
+Patch 7.4a.005
+Problem:    Scroll binding causes unexpected scroll.
+Solution:   Store the topline after updating scroll binding.  Add a test.
+           (Lech Lorens)
+Files:     src/testdir/test98.in, src/testdir/test98a.in,
+           src/testdir/test98.ok, src/option.c, src/testdir/Make_amiga.mak,
+           src/testdir/Make_dos.mak, src/testdir/Make_ming.mak,
+           src/testdir/Make_os2.mak, src/testdir/Make_vms.mms,
+           src/testdir/Makefile
+
+Patch 7.4a.006
+Problem:    Failure in po file check goes unnoticed.
+Solution:   Fail "make test" if the po file check fails.
+Files:     src/Makefile
+
+Patch 7.4a.007
+Problem:    After "g$" with 'virtualedit' set, "k" moves to a different
+           column.  (Dimitar Dimitrov)
+Solution:   Set w_curswant. (Christian Brabandt)
+Files:     src/normal.c
+
+Patch 7.4a.008
+Problem:    Python 3 doesn't handle multibyte characters properly when
+           'encoding' is not utf-8.
+Solution:   Use PyUnicode_Decode() instead of PyUnicode_FromString(). (Ken
+           Takata)
+Files:     src/if_python3.c
+
+Patch 7.4a.009
+Problem:    Compiler warnings for function prototypes.
+Solution:   Add "void".  Move list_features() prototype. (Ken Takata)
+Files:     src/gui_w48.c, src/if_py_both.h, src/version.c
+
+Patch 7.4a.010
+Problem:    Test 86 and 87 fail when building with Python or Python 3 and
+           using a static library.
+Solution:   Add configure check to add -fPIE compiler flag.
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.4a.011
+Problem:    Configure check for Python 3 config name isn't right.
+Solution:   Always include vi_cv_var_python3_version. (Tim Harder)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.4a.012
+Problem:    "make test" fails when using a shadow directory.
+Solution:   Create links for files in src/po. (James McCoy)
+Files:     src/Makefile
+
+Patch 7.4a.013
+Problem:    Setting/resetting 'lbr' in the main help file changes alignment
+           after a Tab. (Dimitar Dimitrov)
+Solution:   Also use the code for conceal mode where n_extra is computed for
+           'lbr'.
+Files:     src/screen.c, src/testdir/test88.in, src/testdir/test88.ok
+
+Patch 7.4a.014
+Problem:    Test 86 and 89 have a problem with using a shadow dir.
+Solution:   Adjust for the different directory structure. (James McCoy)
+Files:     src/testdir/test89.in, src/testdir/test86.in, src/Makefile
+
+Patch 7.4a.015
+Problem:    No Japanese man pages.
+Solution:   Add Japanese translations of man pages. (Ken Takata, Yukihiro
+           Nakadaira, et al.)
+Files:     Filelist, src/Makefile, runtime/doc/evim-ja.UTF-8.1,
+           runtime/doc/vim-ja.UTF-8.1, runtime/doc/vimdiff-ja.UTF-8.1,
+           runtime/doc/vimtutor-ja.UTF-8.1, runtime/doc/xxd-ja.UTF-8.1
+
+Patch 7.4a.016 (after 7.4a.014)
+Problem:    Features enabled in Makefile.
+Solution:   Undo accidental changes.
+Files:     src/Makefile
+
+Patch 7.4a.017
+Problem:    When 'foldmethod' is "indent", using ">>" on a line just above a
+           fold makes the cursor line folded. (Evan Laforge)
+Solution:   Call foldOpenCursor(). (Christian Brabandt)
+Files:     src/ops.c
+
+Patch 7.4a.018
+Problem:    Compiler warning for code unreachable. (Charles Campbell)
+Solution:   Use "while" instead of endless loop.  Change break to continue.
+Files:     src/regexp_nfa.c, src/ui.c
+
+Patch 7.4a.019
+Problem:    Invalid closing parenthesis in test 62. Command truncated at
+           double quote.
+Solution:   Remove the parenthesis. Change double quote to ''. (ZyX)
+Files:     src/testdir/test62.in, src/testdir/test62.ok
+
+Patch 7.4a.020
+Problem:    Superfluous mb_ptr_adv().
+Solution:   Remove the call. (Dominique Pelle)
+Files:     src/regexp_nfa.c
+
+Patch 7.4a.021
+Problem:    Using feedkeys() doesn't always work.
+Solution:   Omit feedkeys(). (Ken Takata)
+Files:     src/testdir/test98a.in
+
+Patch 7.4a.022
+Problem:    Using "d2g$" does not delete the last character. (ZyX)
+Solution:   Set the "inclusive" flag properly.
+Files:     src/normal.c
+
+Patch 7.4a.023 (after 7.4a.019)
+Problem:    Still another superfluous parenthesis. (ZyX)
+Solution:   Remove it.
+Files:     src/testdir/test62.in
+
+Patch 7.4a.024
+Problem:    X11 GUI: Checking icon height twice.
+Solution:   Check height and width. (Dominique Pelle)
+Files:     src/gui_x11.c
+
+Patch 7.4a.025
+Problem:    Get the press-Enter prompt even after using :redraw.
+Solution:   Clear need_wait_return when executing :redraw.
+Files:     src/ex_docmd.c
+
+Patch 7.4a.026
+Problem:    ":diffoff" does not remove folds. (Ramel)
+Solution:   Do not restore 'foldenable' when 'foldmethod' is "manual".
+Files:     src/diff.c
+
+Patch 7.4a.027
+Problem:    When Python adds lines to another buffer the cursor position is
+           wrong, it might be below the last line causing ml_get errors.
+           (Vlad Irnov)
+Solution:   Temporarily change the current window, so that marks are corrected
+           properly.
+Files:     src/if_py_both.h, src/window.c, src/proto/buffer.pro
+
+Patch 7.4a.028
+Problem:    Crash when spell checking in new buffer.
+Solution:   Set the b_p_key field.  (Mike Williams)
+Files:     src/spell.c, src/testdir/test58.in
+
+Patch 7.4a.029
+Problem:    Can't build with MzScheme on Ubuntu 13.04.
+Solution:   Add configure check for the "ffi" library.
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.4a.030 (after 7.4.027)
+Problem:    Missing find_win_for_buf(). (toothpik)
+Solution:   Add missing changes.
+Files:     src/buffer.c
+
+Patch 7.4a.031
+Problem:    Compiler warnings. (Charles Campbell)
+Solution:   Initialize variables even when not needed.
+Files:     src/regexp_nfa.c, src/search.c
+
+Patch 7.4a.032
+Problem:    New regexp engine: Does not match shorter alternative. (Ingo
+           Karkat)
+Solution:   Do not drop a new state when the PIM info is different.
+Files:     src/regexp_nfa.c
+
+Patch 7.4a.033
+Problem:    Test 98 always passes.
+Solution:   Include test98a.in in test98.in, execute the crucial command in
+           one line. (Yukihiro Nakadaira)
+Files:     src/testdir/test98.in, src/testdir/test98a.in
+
+Patch 7.4a.034
+Problem:    The tabline may flicker when opening a new tab after 7.3.759 on
+           Win32.
+Solution:   Move call to TabCtrl_SetCurSel(). (Ken Takata)
+Files:     src/gui_w48.c
+
+Patch 7.4a.035
+Problem:    Fix in patch 7.4a.032 is not tested.
+Solution:   Add test.
+Files:     src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.4a.036
+Problem:    "\p" in a regexp does not match double-width characters.
+           (Yukihiro Nakadaira)
+Solution:   Don't count display cells, use vim_isprintc().
+Files:     src/regexp.c, src/regexp_nfa.c, src/testdir/test64.in,
+           src/testdir/test64.ok, src/testdir/test95.in,
+           src/testdir/test95.ok
+
+Patch 7.4a.037
+Problem:    Win32: When mouse is hidden and in the toolbar, moving it won't
+           make it appear. (Sami Salonen)
+Solution:   Add tabline_wndproc() and toolbar_wndproc(). (Ken Takata)
+Files:     src/gui_w32.c, src/gui_w48.c
+
+Patch 7.4a.038
+Problem:    When using MSVC 2012 there are various issues, including GUI size
+           computations.
+Solution:   Use SM_CXPADDEDBORDER. (Mike Williams)
+Files:     src/gui_w32.c, src/gui_w48.c, src/os_win32.h
+
+Patch 7.4a.039
+Problem:    New regexp engine doesn't match pattern. (Ingo Karkat)
+Solution:   When adding a state also check for different PIM if the list of
+           states has any state with a PIM.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.4a.040
+Problem:    Win32: using uninitialized variable.
+Solution:   (Yukihiro Nakadaira)
+Files:     src/os_win32.c
+
+Patch 7.4a.041
+Problem:    When using ":new ++ff=unix" and "dos" is first in 'fileformats'
+           then 'ff' is set to "dos" instead of "unix". (Ingo Karkat)
+Solution:   Create set_file_options() and invoke it from do_ecmd().
+Files:     src/fileio.c, src/proto/fileio.pro, src/ex_cmds.c,
+           src/testdir/test91.in, src/testdir/test91.ok
+
+Patch 7.4a.042
+Problem:    Crash when BufUnload autocommands close all buffers. (Andrew
+           Pimlott)
+Solution:   Set curwin->w_buffer to curbuf to avoid NULL.
+Files:     src/window.c, src/testdir/test8.in, src/testdir/test8.ok
+
+Patch 7.4a.043
+Problem:    More ml_get errors when adding or deleting lines from Python.
+           (Vlad Irnov)
+Solution:   Switch to a window with the buffer when possible.
+Files:     src/if_py_both.h
+
+Patch 7.4a.044
+Problem:    Test 96 sometimes fails.
+Solution:   Clear window from b_wininfo in win_free().  (Suggestion by
+           Yukihiro Nakadaira)
+Files:     src/window.c
+
+Patch 7.4a.045
+Problem:    Configure does not always find the right library for Lua.  Missing
+           support for LuaJit. 
+Solution:   Improve the configure detection of Lua. (Hiroshi Shirosaki)
+Files:     src/Makefile, src/configure.in, src/auto/configure
+
+Patch 7.4a.046
+Problem:    Can't build without mbyte feature.
+Solution:   Add #ifdefs.
+Files:     src/ex_cmds.c
+
+Patch 7.4a.047
+Problem:    Some comments are not so nice.
+Solution:   Change the comments.
+Files:     src/ex_docmd.c, src/message.c, src/ops.c, src/option.c
+
+Patch 7.4b.001
+Problem:    Win32: dialog may extend off-screen.
+Solution:   Reduce the size, use correct borders. (Andrei Olsen)
+Files:     src/gui_w32.c
+
+Patch 7.4b.002
+Problem:    Crash searching for \%(\%(\|\d\|-\|\.\)*\|\*\). (Marcin
+           Szamotulski)  Also for \(\)*.
+Solution:   Do add a state for opening parenthesis, so that we can check if it
+           was added before at the same position.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.4b.003
+Problem:    Regexp code is not nicely aligned.
+Solution:   Adjust white space. (Ken Takata)
+Files:     src/regexp_nfa.c
+
+Patch 7.4b.004
+Problem:    Regexp crash on pattern "@\%[\w\-]*". (Axel Kielhorn)
+Solution:   Add \%(\) around \%[] internally.
+Files:     src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok
+
+Patch 7.4b.005
+Problem:    Finding %s in shellpipe and shellredir does not ignore %%s.
+Solution:   Skip over %%. (lcd 47)
+Files:     src/ex_cmds.c
+
+Patch 7.4b.006 (after 7.3.1295)
+Problem:    Using \{n,m} in an autocommand pattern no longer works.
+           Specifically, mutt temp files are not recognized. (Gary Johnson)
+Solution:   Make \\\{n,m\} work.
+Files:     runtime/doc/autocmd.txt, src/fileio.c
+
+Patch 7.4b.007
+Problem:    On 32 bit MS-Windows :perldo does not work.
+Solution:   Make sure time_t uses 32 bits. (Ken Takata)
+Files:     src/if_perl.xs, src/vim.h
+
+Patch 7.4b.008
+Problem:    'autochdir' causes setbufvar() to change the current directory.
+           (Ben Fritz)
+Solution:   When disabling autocommands also reset 'acd' temporarily.
+           (Christian Brabandt)
+Files:     src/fileio.c
+
+Patch 7.4b.009
+Problem:    When setting the Visual area manually and 'selection' is
+           exclusive, a yank includes one character too much. (Ingo Karkat)
+Solution:   Default the Visual operation to "v". (Christian Brabandt)
+Files:     src/mark.c
+
+Patch 7.4b.010
+Problem:    Win32: Tcl library load does not use standard mechanism.
+Solution:   Call vimLoadLib() instead of LoadLibraryEx(). (Ken Takata)
+Files:     src/if_perl.xs, src/if_tcl.c
+
+Patch 7.4b.011
+Problem:    ":he \%(\)" does not work. (ZyX)
+Solution:   Add an exception to the list.
+Files:     src/ex_cmds.c
+
+Patch 7.4b.012
+Problem:    Output from a shell command is truncated at a NUL. (lcd 47)
+Solution:   Change every NUL into an SOH.
+Files:     src/misc1.c
+
+Patch 7.4b.013
+Problem:    Install dir for JP man pages is wrong.
+Solution:   Remove ".UTF-8" from the directory name. (Ken Takata)
+Files:     src/Makefile
+
+Patch 7.4b.014 (after 7.4b.012)
+Problem:    Stupid mistake.
+Solution:   Changle "len" to "i".
+Files:     src/misc1.c
+
+Patch 7.4b.015 (after 7.4b.008)
+Problem:    Can't compile without the 'acd' feature.
+Solution:   Add #ifdefs. (Kazunobu Kuriyama)
+Files:     src/fileio.c
+
+Patch 7.4b.016
+Problem:    Ruby detection fails on Fedora 19.
+Solution:   Use one way to get the Ruby version. (Michael Henry)
+Files:     src/configure.in, src/auto/configure
+
+Patch 7.4b.017
+Problem:    ":he \^x" gives a strange error message. (glts)
+Solution:   Do not translate \^x to \_CTRL-x.
+Files:     src/ex_cmds.c
+
+Patch 7.4b.018 (after 7.4b.001)
+Problem:    Win32: Dialog can still be too big.
+Solution:   Move the check for height further down. (Andrei Olsen)
+Files:     src/gui_w32.c
+
+Patch 7.4b.019 (after 7.4a.034)
+Problem:    Tabline is not updated properly when closing a tab on Win32.
+Solution:   Only reduce flickering when adding a tab. (Ken Takata)
+Files:     src/gui_w48.c
+
+Patch 7.4b.020
+Problem:    "g~ap" changes first character of next paragraph. (Manuel Ortega)
+Solution:   Avoid subtracting (0 - 1) from todo.  (Mike Williams)
+Files:     src/ops.c, src/testdir/test82.in, src/testdir/test82.ok
+
+Patch 7.4b.021
+Problem:    Pressing "u" after an external command results in multiple
+           press-enter messages. (glts)
+Solution:   Don't call hit_return_msg() when we have K_IGNORE. (Christian
+           Brabandt)
+Files:     src/message.c
+
+Patch 7.4b.022
+Problem:    Not waiting for a character when the tick count overflows.
+Solution:   Subtract the unsigned numbers and cast to int. (Ken Takata)
+Files:     src/os_win32.c
+
 
  vim:tw=78:ts=8:ft=help:norl:
index 5d6706b..f35cc02 100644 (file)
@@ -1,4 +1,4 @@
-*vi_diff.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*vi_diff.txt*   For Vim version 7.4.  Last change: 2012 Aug 08
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -88,8 +88,9 @@ Maximum display width    Unix and Win32: 1024 characters, otherwise 255
                           characters
 Maximum lhs of a mapping   50 characters.
 Number of different highlighting types: over 30000
-Range of a Number variable:  -2147483648 to 2147483647 (more on 64 bit
-                          systems)
+Range of a Number variable:  -2147483648 to 2147483647 (might be more on 64
+                          bit systems)
+Maximum length of a line in a tags file: 512 bytes.
 
 Information for undo and text in registers is kept in memory, thus when making
 (big) changes the amount of (virtual) memory available limits the number of
@@ -191,7 +192,7 @@ Syntax highlighting.                                        |:syntax|
 
 Spell checking.                                                |spell|
        When the 'spell' option is set Vim will highlight spelling mistakes.
-       About 40 languages are currently supported, selected with the
+       About 50 languages are currently supported, selected with the
        'spelllang' option.  In source code only comments and strings are
        checked for spelling.
 
@@ -652,7 +653,7 @@ You can backspace, CTRL-U and CTRL-W over line breaks if the 'backspace' (bs)
 option includes "eol".  You can backspace over the start of insert if the
 'backspace' option includes "start".
 
-When the 'paste' option is set, a few option are reset and mapping in insert
+When the 'paste' option is set, a few options are reset and mapping in insert
 mode and abbreviation are disabled.  This allows for pasting text in windowing
 systems without unexpected results.  When the 'paste' option is reset, the old
 option values are restored.
@@ -988,6 +989,8 @@ These are remarks about running the POSIX test suite:
 - vi test 33 sometimes fails for unknown reasons
 - vi test 250 fails; behavior will be changed in a new revision
     http://www.opengroup.org/austin/mailarchives/ag-review/msg01710.html
+    (link no longer works, perhaps it's now:
+    https://www.opengroup.org/sophocles/show_mail.tpl?CALLER=show_archive.tpl&source=L&listname=austin-review-l&id=1711)
 - vi test 310 fails; exit code non-zero when any error occurred?
 - ex test 24 fails because test is wrong.  Changed between SUSv2 and SUSv3.
 - ex tests 47, 48, 49, 72, 73 fail because .exrc file isn't read in silent
diff --git a/runtime/doc/vim-de.1 b/runtime/doc/vim-de.1
new file mode 100644 (file)
index 0000000..0ba4938
--- /dev/null
@@ -0,0 +1,478 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.\" Translated by bw1 (2008) and Florian Rehnisch <fm-r@gmx.de> (2012)
+.\" Kudos to the folks on vim-dev and debian-l10n-german
+.TH VIM 1 "2006 Apr 11"  
+.SH BEZEICHNUNG
+vim \- Vi IMproved, ein Text\-Editor für Programmierer
+.SH ÃœBERSICHT
+.br
+\fBvim\fP [Optionen] [Datei ...]
+.br
+\fBvim\fP [Optionen] \-
+.br
+\fBvim\fP [Optionen] \-t Tag
+.br
+\fBvim\fP [Optionen] \-q [Fehlerdatei]
+.PP
+.br
+\fBex\fP
+.br
+\fBview\fP
+.br
+\fBgvim\fP \fBgview\fP \fBevim\fP \fBeview\fP
+.br
+\fBrvim\fP \fBrview\fP \fBrgvim\fP \fBrgview\fP
+.SH BESCHREIBUNG
+\fBVim\fP ist ein Text\-Editor, der aufwärtskompatibel zu Vi ist. Er kann
+verwendet werden, um alle Arten von Klartext zu bearbeiten. Er ist besonders
+nützlich, um Programme zu bearbeiten.
+.PP
+Vim hat einige Erweiterungen gegenüber Vi, z.B.: Rückgängigmachen in
+mehreren Schritten, mehrere Fenster und Puffer, Syntax\-Hervorhebung,
+Bearbeiten der Befehlszeile, Dateinamenergänzung, eingebaute Hilfe, visuelle
+Auswahl, usw. ... Siehe Â»:help vi_diff.txt« für eine Ãœbersicht der
+Unterschiede zwischen \fBVim\fP und Vi.
+.PP
+Im laufenden \fBVim\fP kann mit dem Befehl Â»:help« viel Hilfe durch das
+eingebaute Hilfesystem erlangt werden. Siehe den Abschnitt EINGEBAUTE HILFE
+weiter unten.
+.PP
+Meistens wird \fBVim\fP zum Editieren einer einzigen Datei mit dem folgende
+Befehl gestartet:
+.PP
+  vim Datei
+.PP
+Allgemeiner betrachtet, wird \fBVim\fP folgendermaßen gestartet:
+.PP
+  vim [Optionen] [Dateiliste]
+.PP
+Bei einer fehlenden Dateiliste startet der Editor mit einem leeren
+Puffer. Andernfalls werden nach den folgenden vier Möglichkeiten eine oder
+mehrere Dateien bearbeitet:
+.TP  12
+Datei ...
+Eine Liste von Dateinamen. Die erste Datei wird in den Puffer geladen und
+zur aktuellen. Der Cursor wird auf der ersten Zeile des Puffers
+platziert. Zu den anderen Dateien kann mit dem Befehl Â»:next« gelangt
+werden. Falls einer der Dateinamen mit einem Bindestrich beginnt, stellen
+Sie der Dateiliste Â»\-\-« voran.
+.TP 
+\-
+Die zu bearbeitende Datei wird von der Standardeingabe gelesen. Befehle
+werden von der Standardfehlerausgabe gelesen, die ein Text\-Terminal sein
+sollte.
+.TP 
+\-t {Tag}
+Die zu editierende Datei und die anfängliche Cursor\-Position hängen von
+einem Â»Tag« ab, einer Art Sprungmarke. {Tag} wird in der Tag\-Datei
+nachgeschlagen, die zugehörige Datei wird zur aktuellen und der zugehörige
+Befehl wird ausgeführt. Dies wird meistens für Programme in der Sprache Â»C«
+benutzt, wobei {Tag} ein Funktionsname sein könnte. Die Wirkung dieses
+Befehls ist, dass die Datei, die die Funktion enthält, als aktuelle im
+Editor geöffnet und angezeigt wird und der Cursor auf dem Beginn der
+Funktion positioniert wird. Siehe Â»:help tag\-commands«.
+.TP 
+\-q [Fehlerdatei]
+Startet im QuickFix\-Modus. Die Datei [Fehlerdatei] wird gelesen und der
+erste Fehler wird angezeigt. Falls [Fehlerdatei] ausgelassen wird, wird der
+Dateiname aus der Option 'errorfile' verwendet (bei AmigaOS ist dies
+vorgabemäßig Â»AztecC.Err«, sowie "errors.err« bei anderen). Weitere Fehler
+können mit dem Â»:cn«\-Befehl angesprungen werden. Siehe ":help quickfix«.
+.PP
+\fBVim\fP reagiert unterschiedlich auf den Namen, der verwendet wird, um Vim zu
+starten (die ausführbare Datei kann dieselbe sein).
+.TP  10
+vim
+der Â»normale« Weg, alles ist standardmäßig
+.TP 
+ex
+Startet im Ex\-Modus. Mit dem Befehl Â»:vi« gelangt man in den normalen
+Modus. Funktioniert auch mit dem Argument Â»\-e«.
+.TP 
+view
+Startet im Nur\-Lesen\-Modus. Die Datei wird vor dem Ãœberschreiben
+geschützt. Dasselbe wird mit dem Parameter Â»\-R« erreicht.
+.TP 
+gvim gview
+Die grafische Version: Ã–ffnet ein neues Fenster. Dasselbe wird mit dem
+Parameter Â»\-g« erreicht.
+.TP 
+evim eview
+Die grafische Version im einfachen Modus: Ã–ffnet ein neues Fenster. Dasselbe
+wird mit dem Parameter Â»\-y« erreicht.
+.TP 
+rvim rview rgvim rgview
+Wie die obigen, aber mit Beschränkungen: Es ist nicht möglich, Shell\-Befehle
+aufzurufen oder mit Unterbrechung in eine Shell zurückzuspringen. Dasselbe
+wird mit dem Parameter Â»\-Z« erreicht.
+.SH OPTIONEN
+Die Optionen können in beliebiger Reihenfolge vor oder nach den Dateinamen
+angegeben werden. Optionen ohne Parameter können hinter einem einzigen
+Bindestrich gruppiert werden.
+.TP  12
++[Nummer]
+In der ersten Datei wird der Cursor auf die Zeile [Nummer] gesetzt. Falls
+[Nummer] nicht angegeben wird, wird der Cursor in die letzte Zeile der Datei
+gesetzt.
+.TP 
++/{Suchmuster}
+In der ersten Datei wird der Cursor auf das erste Auftreten von {Suchmuster}
+gesetzt. Siehe Â»:help search\-pattern«.
+.TP 
++{Befehl}
+.TP 
+\-c {Befehl}
+{Befehl} wird nach dem Lesen der ersten Datei ausgeführt. Als {Befehl} wird
+ein Ex\-Befehl erwartet. Sind in {Befehl} Leerzeichen vorhanden, muss alles
+in Anführungszeichen gesetzt werden (hängt von der verwendeten Shell
+ab). Beispiel: vim "+set si" main.c
+.br
+Anmerkung: Sie können bis zu 10 Â»+«\- oder "\-c«\-Befehle verwenden.
+.TP 
+\-S {Datei}
+{Datei} wird nach dem Lesen der ersten Datei ausgeführt. Dies entspricht Â»\-c
+"source {Datei}"«. {Datei} darf nicht mit einem Bindestrich (\-)
+anfangen. Wenn kein Dateiname angegeben wird, wird Â»Session.vim« verwendet
+(Funktioniert nur, wenn Â»\-S« als letzter Parameter steht).
+.TP 
+\-\-cmd {Befehl}
+Wie Â»\-c«, aber dieser Befehl wird vor allen VimRC\-Dateien ausgeführt. Sie
+können unabhängig von den Â»\-c«\-Befehlen bis zu 10 dieser Befehle verwenden.
+.TP 
+\-A
+Falls \fBVim\fP mit Unterstützung für das Schreiben von rechts nach links und
+arabischer Tastaturbelegung compiliert wurde (ARABIC), startet dieser
+Parameter den Modus fürs Arabische (:set arabic). Anderenfalls beendet sich
+\fBVim\fP mit einer Fehlermeldung.
+.TP 
+b
+Binärer Modus: Es werden einige Variablen gesetzt, sodass es möglich ist,
+eine binäre oder ausführbare Datei zu bearbeiten.
+.TP 
+\-C
+Kompatibel: Setzt die Option 'compatible'. Das macht \fBVim\fP im Verhalten
+sehr Ã¤hnlich zu Vi, selbst wenn eine VimRC\-Datei existiert.
+.TP 
+\-d
+Startet im diff\-Modus. Es sollten zwei, drei oder vier Dateinamen als
+Parameter Ã¼bergeben werden. \fBVim\fP Ã¶ffnet sie alle und zeigt die
+Unterschiede an. Arbeitet wie vimdiff(1).
+.TP 
+\-d {Gerät}
+Öffnet das {Gerät}, um es als Terminal zu nutzen. Nur für AmigaOS. Beispiel:
+"\-d con:20/30/600/150".
+.TP 
+D
+Debug\-Modus: \fBVim\fP geht in den Debug\-Modus, wenn der erste Befehl in einem
+Skript ausgeführt wird.
+.TP 
+\-e
+Startet \fBVim\fP im Ex\-Modus, als würde als ausführbare Datei Â»ex« aufgerufen.
+.TP 
+\-E
+Startet \fBVim\fP im erweiterten Ex\-Modus, als würde die ausführbare Datei als
+»exim« aufgerufen.
+.TP 
+\-f
+Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
+löst sich nicht von der Shell, in der er aufgerufen wurde. Bei AmigaOS wird
+kein neues Fenster geöffnet. Dieser Parameter wird benutzt, damit das
+aufrufende Programm auf das Beenden des Bearbeitungssitzung wartet (z.B.:
+mail). Bei AmigaOS funktionieren die Befehle Â»:sh« und ":!« nicht.
+.TP 
+\-\-nofork
+Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
+löst sich nicht von der Shell, in der er aufgerufen wurde.
+.TP 
+\-F
+Wenn \fBVim\fP mit FKMAP\-Unterstützung für das Schreiben von rechts nach links
+und Farsi\-Tastatur\-Belegung kompiliert wurde, startet Vim im Farsi\-Modus,
+d.h. die Optionen 'fkmap' und 'rightleft' werden gesetzt. Andernfalls bricht
+\fBVim\fP mit einer Fehlermeldung ab.
+.TP 
+\-g
+Falls \fBVim\fP mit GUI\-Unterstützung kompiliert wurde, wird die GUI
+aktiviert. Falls keine GUI\-Unterstützung einkompiliert wurde, wird mit einer
+Fehlermeldung abgebrochen.
+.TP 
+\-h
+Gibt eine kleine Hilfe für die Befehlszeilenparameter aus. Danach beendet
+sich \fBVim.\fP
+.TP 
+\-H
+Hebräisch\-Modus, falls \fBVim\fP mit RIGHTLEFT\-Unterstützung für das Schreiben
+von rechts nach links und hebräischer Tastaturbelegung kompiliert wurde,
+werden die Optionen 'hkmap' und 'rightleft' gesetzt. Andernfalls beendet
+sich \fBVim\fP mit einer Fehlermeldung.
+.TP 
+\-i {VimInfo}
+Wenn eine VimInfo\-Datei verwendet wird: Verwendet statt Â»~/.viminfo« die
+angegebene Datei. Es ist auch möglich die Verwendung einer VimInfo\-Datei
+durch Angabe des Dateinamen Â»NONE« zu verhindern,
+.TP 
+\-L
+dasselbe wie Â»\-r«
+.TP 
+\-l
+Lisp\-Modus. Aktiviert die Optionen 'lisp' und 'showmatch'.
+.TP 
+\-m
+Deaktiviert das Verändern von Dateien, indem die Option 'write' gelöscht
+wird. Der Puffer kann verändert werden, nur das Schreiben einer Datei ist
+nicht möglich.
+.TP 
+\-M
+Keine Veränderungen erlaubt: Die Optionen 'modifiable' und 'write' werden
+gelöscht, so dass Ã„nderungen nicht erlaubt sind und Dateien nicht
+geschrieben werden können. Man beachte, dass diese Optionen ('modifiable',
+\&'write') dennnoch nachträglich zum Erlauben von Ã„nderungen gesetzt werden
+können.
+.TP 
+\-N
+Nicht\-kompatibler Modus: Löscht die Option 'compatible'. Dies veranlasst
+\fBVim\fP, sich ein wenig besser, aber weniger Vi\-kompatibel zu verhalten,
+selbst wenn es keine VimRC\-Datei gibt.
+.TP 
+\-n
+Verwendet keine Auslagerungsdatei: Eine Wiederherstellung nach einem Absturz
+ist nicht möglich. Auf einem langsamen Medium (Diskette) kann diese
+Einstellung nützlich sein. Kann auch mit Â»set uc=0« erreicht werden; kann
+mit Â»set uc=200« aufgehoben werden.
+.TP 
+\-nb
+\fBVim\fP fungiert als Server für NetBeans. Details siehe Dokumentation.
+.TP 
+\-o[N]
+Öffnet [N] Fenster Ã¼bereinander. Wenn keine Zahl angegeben wird, Ã¶ffne ein
+Fenster pro Datei.
+.TP 
+\-O[N]
+Öffnet [N] Fenster nebeneinander. Wenn keine Zahl angegeben wird, Ã¶ffne ein
+Fenster pro Datei.
+.TP 
+\-p[N]
+Öffnet [N] Reiterseiten. Wenn keine Zahl angegeben wird, Ã¶ffne eine
+Reiterseite pro Datei.
+.TP 
+\-R
+Nur\-Lesen\-Modus: Die Option 'readonly' wird gesetzt. Der Puffer kann noch
+bearbeitet werden, aber es wird verhindert, eine Datei aus Versehen zu
+überschreiben. Wenn Sie wirklich eine Datei Ã¼berschreiben wollen, fügen Sie
+dem Ex\-Befehl ein Ausrufezeichen hinzu (wie in Â»:w!«). Die Option "\-R«
+bedingt die Option Â»\-n« (siehe oben). Die Option 'readonly' kann durch ":set
+noro« gelöscht werden. Siehe Â»:help 'readonly'«.
+.TP 
+\-r
+Listet die Auslagerungsdateien und gibt Informationen zu ihrer
+Verwendbarkeit zur Wiederherstellung.
+.TP 
+\-r {Datei}
+Wiederherstellungsmodus: Die Auslagerungsdatei wird zur Wiederherstellung
+verwendet und hat denselben Dateinamen wie die Text\-Datei + Â».swp«. Siehe
+":help recovery«.
+.TP 
+\-s
+Der stille Modus: Nur wenn die ausführbare Datei als Â»ex« aufgerufen wird
+oder vor Â»\-s« die Option "\-e« gegeben wird.
+.TP 
+\-s {Eingabeskript}
+Die Datei {Eingabeskript} wird gelesen und ausgeführt, als würden Sie die
+Zeichen in ihr tippen. Dasselbe kann mit dem Befehl Â»:source!
+{Eingabeskript}« erreicht werden. Wird das Ende der Datei vor dem Beenden
+des Editors erreicht, werden weitere Zeichen von der Tastatur gelesen.
+.TP 
+\-T {Terminal}
+Setzt den Namen des benutzten Terminals. Nur erforderlich, wenn die
+Automatik nicht funktioniert. Sollte ein \fBVim\fP bekanntes Terminal sein:
+(builtin) oder in einer termcap\- oder terminfo\-Datei definiert.
+.TP 
+\-u {VimRC}
+Verwendet zur Initialisierung die Befehle in der Datei {VimRC}. Alle anderen
+Initialisierungen werden Ã¼bersprungen. Benutzen Sie dies, um eine besondere
+Art von Dateien zu bearbeiten. Dies kann auch benutzt werden, um alle
+Initialisierungen zu Ã¼berspringen, indem der Name Â»NONE« angegeben wird. Für
+weitere Einzelheiten siehe Â»:help initialisation« innerhalb von Vim.
+.TP 
+\-U {GvimRC}
+Benutzt die Befehle in der Datei {GvimRC} für die Initialisierung der
+grafischen Oberfläche. Alle anderen Initialisierungen werden
+übersprungen. Dies kann ebenfalls benutzt werden, um alle
+GUI\-Initialisierungen zu Ã¼berspringen, indem der Name Â»NONE« angegeben
+wird. Siehe Â»:help gui\-init« innerhalb von Vim für weitere Einzelheiten.
+.TP 
+\-V[N]
+Ausführlich (verbose): Gibt Meldungen darüber, welche Befehlsdateien
+eingelesen werden, und Ã¼ber das Lesen und Schreiben einer VimInfo\-Datei. Die
+optionale Zahl N ist der Wert für 'verbose'. Vorgabe ist 10.
+.TP 
+\-v
+Startet \fBVim\fP im Vi\-Modus, so als würde die ausführbare Datei mit Â»vi«
+aufgerufen. Dies wirkt sich nur aus, wenn die ausführbare Datei als Â»ex«
+aufgerufen wird.
+.TP 
+\-w {Ausgabeskript}
+Alle Zeichen, die eingetippt werden, werden in der Datei {Ausgabeskript}
+aufgezeichnet, solange bis Sie \fBVim\fP beenden. Dies ist nützlich, falls Sie
+eine Skript\-Datei zum Benutzen mit Â»vim \-s« oder ":source!« erzeugen
+wollen. Falls die Datei {Ausgabeskript} vorhanden ist, werden die Zeichen
+angehängt.
+.TP 
+\-W {Ausgabeskript}
+Wie \-w, aber eine bereits vorhandene Datei wird Ã¼berschrieben.
+.TP 
+\-x
+Benutzt beim Schreiben von Dateien eine Verschlüsselung. Fragt nach dem
+Schlüssel.
+.TP 
+\-X
+Führt keine Verbindung zum X\-Server durch. Dadurch verkürzt sich die
+Startzeit, aber der Fenstertitel und die Zwischenablage werden nicht
+verwendet.
+.TP 
+\-y
+Startet \fBVim\fP im einfachen Modus, als würde die ausführbare Datei mit
+»evim« oder Â»eview« aufgerufen. \fBVim\fP verhält sich dann wie ein Editor zum
+Klicken und Tippen.
+.TP 
+\-Z
+Eingeschränkter Modus: Funktioniert, als würde der Name der ausführbaren
+Datei mit Â»r« beginnen.
+.TP 
+\-\-
+Markiert das Ende der Optionen. Argumente, die folgen, werden als Dateinamen
+behandelt. Dies kann benutzt werden, um einen Dateinamen mit Â»\-« am Anfang
+zu verwenden.
+.TP 
+\-\-echo\-wid
+Nur GTK\-GUI: Schreibe die Fenster\-ID auf die Standardausgabe.
+.TP 
+\-\-help
+Gibt eine Hilfe\-Nachricht aus und beendet, wie Â»\-h«.
+.TP 
+\-\-literal
+Nimmt die Dateinamen so wie sie sind und vervollständigt sie nicht nach
+Metazeichen (*,?). Dies wirkt sich nicht unter Unix aus, wo die Shell die
+Metazeichen expandiert.
+.TP 
+\-\-noplugin
+Lade keine Plugins. Impliziert durch Â»\-u NONE«.
+.TP 
+\-\-remote
+Verbindet mit einem Vim\-Server und lässt ihn die in den restlichen
+Argumenten angegeben Dateien editieren. Wenn kein Server gefunden wird,
+führt dies zu einer Warnmeldung und die Dateien werden im gegenwärtigen Vim
+zum Bearbeiten geöffnet.
+.TP 
+\-\-remote\-expr {Ausdruck}
+Verbindet mit einem Vim\-Server, führt {Ausdruck} aus und zeigt das Ergebnis
+auf der Standardausgabe an.
+.TP 
+\-\-remote\-send {Zeichen}
+Verbindet mit einem Vim\-Server und sendet ihm {Zeichen}.
+.TP 
+\-\-remote\-silent
+Wie Â»\-\-remote«, aber ohne Warnung, wenn kein Server gefunden wird.
+.TP 
+\-\-remote\-wait
+Wie Â»\-\-remote«, aber Vim beendet sich nicht, bis die Dateien bearbeitet
+wurden.
+.TP 
+\-\-remote\-wait\-silent
+Wie Â»\-\-remote\-wait«, aber ohne Warnung, wenn kein Server gefunden wird.
+.TP 
+\-\-serverlist
+Listet die Namen aller gefundenen Vim\-Server auf.
+.TP 
+\-\-servername {Name}
+Benutzt {Name} als Server\-Namen. Wird für den gegenwärtigen Vim benutzt,
+außer es wird mit dem Argument Â»\-\-remote« benutzt, dann ist es der Name des
+zu kontaktierenden Servers.
+.TP 
+\-\-socketid {id}
+Nur GTK\-GUI: Benutzt den GtkPlug\-Mechanismus, um GVim in einem anderen
+Fenster laufen zu lassen.
+.TP 
+\-\-version
+Versionsinformation anzeigen und beenden
+.SH "EINGEBAUTE HILFE"
+Tippen Sie in \fBVim\fP Â»:help«, um zu beginnen. Geben Sie ":help begriff« ein,
+um Hilfe Ã¼ber ein bestimmtes Thema zu bekommen. Zum Beispiel Â»:help ZZ« für
+Hilfe Ã¼ber den Befehl Â»ZZ«. Benutzen Sie <Tab> und CTRL\-D, um
+Begriffe zu vervollständigen (»:help cmdline\-completion«). Tags sind
+vorhanden, um von einem Ort zum anderen zu springen (eine Art
+Hypertext\-Verknüpfungen, siehe Â»:help«). Auf diese Weise können alle
+Dokumentations\-Dateien aufgerufen werden, zum Beispiel Â»:help syntax.txt«.
+.SH DATEIEN
+.TP  15
+/usr/local/lib/vim/doc/*.txt
+Dokumentations\-Dateien für \fBVim\fP. Verwenden Sie Â»:help doc\-file\-list«, um
+die gesamte Liste zu bekommen.
+.TP 
+/usr/local/lib/vim/doc/tags
+Die Â»Tag«\-Datei, die verwendet wird, um Informationen in der Dokumentation
+zu finden.
+.TP 
+/usr/local/lib/vim/syntax/syntax.vim
+Die systemweite Einrichtung der Syntaxhervorhebung.
+.TP 
+/usr/local/lib/vim/syntax/*.vim
+Syntaxdateien für die verschiedenen Sprachen.
+.TP 
+/usr/local/lib/vim/vimrc
+Systemweite Einstellungsdatei für \fBVim\fP
+.TP 
+~/.vimrc
+Persönliche Einstellungsdatei für \fBVim\fP
+.TP 
+/usr/local/lib/vim/gvimrc
+Systemweite Einstellungsdatei für GVim
+.TP 
+~/.gvimrc
+Persönliche Einstellungsdatei für GVim
+.TP 
+/usr/local/lib/vim/optwin.vim
+Das Script, das von dem Befehl Â»:options« verwendet wird, eine schöne
+Möglichkeit, um Optionen zu betrachten und zu setzen.
+.TP 
+/usr/local/lib/vim/menu.vim
+Systemweite Einstellungsdatei für das Menü von GVim
+.TP 
+/usr/local/lib/vim/bugreport.vim
+Das Script zum Generieren eines Fehlerberichts. Siehe Â»:help bugs«.
+.TP 
+/usr/local/lib/vim/filetype.vim
+Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
+Dateinamens. Siehe Â»:help 'filetype'«.
+.TP 
+/usr/local/lib/vim/scripts.vim
+Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
+Inhaltes. Siehe Â»:help 'filetype'«.
+.TP 
+/usr/local/lib/vim/print/*.ps
+Diese Dateien werden zum Drucken von PostScript verwendet.
+.PP
+Für die neuesten Informationen lesen Sie die Vim\-Homepage:
+.br
+<URL:http://www.vim.org/>
+.SH "SIEHE AUCH"
+vimtutor(1)
+.SH AUTOR
+\fBVim\fP wurde größtenteils von Bram Moolenaar erstellt, mit viel Hilfe von
+anderen Leuten. Siehe Â»:help credits« in \fBVim.\fP
+.br
+\fBVim\fP basiert auf Stevie, der von Tim Thompson, Tony Andrews und
+G.R. (Fred) Walter geschrieben wurde. Es ist jedoch kaum etwas vom
+ursprünglichen Code Ã¼brig geblieben.
+.SH FEHLER
+Die sind möglich. Siehe Â»:help todo« für eine Liste bekannter Probleme.
+.PP
+Beachten Sie, dass gewisse Dinge, die manche Leute als Fehler betrachten
+mögen, in Wirklichkeit durch zu getreue Nachbildung des Vi\-Verhaltens
+verursacht werden. Und falls Sie denken, dass andere Dinge Fehler sind,
+»weil Vi es anders tut«, sollten Sie einen genaueren Blick auf die Datei
+vi_diff.txt werfen (oder in Vim Â»:help vi_diff.txt« tippen). Sehen Sie sich
+auch die Optionen 'compatible' und 'cpoptions' an.
diff --git a/runtime/doc/vim-de.UTF-8.1 b/runtime/doc/vim-de.UTF-8.1
new file mode 100644 (file)
index 0000000..f79e622
--- /dev/null
@@ -0,0 +1,478 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.\" Translated by bw1 (2008) and Florian Rehnisch <fm-r@gmx.de> (2012)
+.\" Kudos to the folks on vim-dev and debian-l10n-german
+.TH VIM 1 "2006 Apr 11"  
+.SH BEZEICHNUNG
+vim \- Vi IMproved, ein Text\-Editor für Programmierer
+.SH ÃœBERSICHT
+.br
+\fBvim\fP [Optionen] [Datei â€¦]
+.br
+\fBvim\fP [Optionen] \-
+.br
+\fBvim\fP [Optionen] \-t Tag
+.br
+\fBvim\fP [Optionen] \-q [Fehlerdatei]
+.PP
+.br
+\fBex\fP
+.br
+\fBview\fP
+.br
+\fBgvim\fP \fBgview\fP \fBevim\fP \fBeview\fP
+.br
+\fBrvim\fP \fBrview\fP \fBrgvim\fP \fBrgview\fP
+.SH BESCHREIBUNG
+\fBVim\fP ist ein Text\-Editor, der aufwärtskompatibel zu Vi ist. Er kann
+verwendet werden, um alle Arten von Klartext zu bearbeiten. Er ist besonders
+nützlich, um Programme zu bearbeiten.
+.PP
+Vim hat einige Erweiterungen gegenüber Vi, z.B.: Rückgängigmachen in
+mehreren Schritten, mehrere Fenster und Puffer, Syntax\-Hervorhebung,
+Bearbeiten der Befehlszeile, Dateinamenergänzung, eingebaute Hilfe, visuelle
+Auswahl, usw. â€¦ Siehe Â»:help vi_diff.txt« für eine Ãœbersicht der
+Unterschiede zwischen \fBVim\fP und Vi.
+.PP
+Im laufenden \fBVim\fP kann mit dem Befehl Â»:help« viel Hilfe durch das
+eingebaute Hilfesystem erlangt werden. Siehe den Abschnitt EINGEBAUTE HILFE
+weiter unten.
+.PP
+Meistens wird \fBVim\fP zum Editieren einer einzigen Datei mit dem folgende
+Befehl gestartet:
+.PP
+  vim Datei
+.PP
+Allgemeiner betrachtet, wird \fBVim\fP folgendermaßen gestartet:
+.PP
+  vim [Optionen] [Dateiliste]
+.PP
+Bei einer fehlenden Dateiliste startet der Editor mit einem leeren
+Puffer. Andernfalls werden nach den folgenden vier Möglichkeiten eine oder
+mehrere Dateien bearbeitet:
+.TP  12
+Datei â€¦
+Eine Liste von Dateinamen. Die erste Datei wird in den Puffer geladen und
+zur aktuellen. Der Cursor wird auf der ersten Zeile des Puffers
+platziert. Zu den anderen Dateien kann mit dem Befehl Â»:next« gelangt
+werden. Falls einer der Dateinamen mit einem Bindestrich beginnt, stellen
+Sie der Dateiliste Â»\-\-« voran.
+.TP 
+\-
+Die zu bearbeitende Datei wird von der Standardeingabe gelesen. Befehle
+werden von der Standardfehlerausgabe gelesen, die ein Text\-Terminal sein
+sollte.
+.TP 
+\-t {Tag}
+Die zu editierende Datei und die anfängliche Cursor\-Position hängen von
+einem Â»Tag« ab, einer Art Sprungmarke. {Tag} wird in der Tag\-Datei
+nachgeschlagen, die zugehörige Datei wird zur aktuellen und der zugehörige
+Befehl wird ausgeführt. Dies wird meistens für Programme in der Sprache Â»C«
+benutzt, wobei {Tag} ein Funktionsname sein könnte. Die Wirkung dieses
+Befehls ist, dass die Datei, die die Funktion enthält, als aktuelle im
+Editor geöffnet und angezeigt wird und der Cursor auf dem Beginn der
+Funktion positioniert wird. Siehe Â»:help tag\-commands«.
+.TP 
+\-q [Fehlerdatei]
+Startet im QuickFix\-Modus. Die Datei [Fehlerdatei] wird gelesen und der
+erste Fehler wird angezeigt. Falls [Fehlerdatei] ausgelassen wird, wird der
+Dateiname aus der Option 'errorfile' verwendet (bei AmigaOS ist dies
+vorgabemäßig Â»AztecC.Err«, sowie â€žerrors.err« bei anderen). Weitere Fehler
+können mit dem Â»:cn«\-Befehl angesprungen werden. Siehe â€ž:help quickfix«.
+.PP
+\fBVim\fP reagiert unterschiedlich auf den Namen, der verwendet wird, um Vim zu
+starten (die ausführbare Datei kann dieselbe sein).
+.TP  10
+vim
+der Â»normale« Weg, alles ist standardmäßig
+.TP 
+ex
+Startet im Ex\-Modus. Mit dem Befehl Â»:vi« gelangt man in den normalen
+Modus. Funktioniert auch mit dem Argument Â»\-e«.
+.TP 
+view
+Startet im Nur\-Lesen\-Modus. Die Datei wird vor dem Ãœberschreiben
+geschützt. Dasselbe wird mit dem Parameter Â»\-R« erreicht.
+.TP 
+gvim gview
+Die grafische Version: Ã–ffnet ein neues Fenster. Dasselbe wird mit dem
+Parameter Â»\-g« erreicht.
+.TP 
+evim eview
+Die grafische Version im einfachen Modus: Ã–ffnet ein neues Fenster. Dasselbe
+wird mit dem Parameter Â»\-y« erreicht.
+.TP 
+rvim rview rgvim rgview
+Wie die obigen, aber mit Beschränkungen: Es ist nicht möglich, Shell\-Befehle
+aufzurufen oder mit Unterbrechung in eine Shell zurückzuspringen. Dasselbe
+wird mit dem Parameter Â»\-Z« erreicht.
+.SH OPTIONEN
+Die Optionen können in beliebiger Reihenfolge vor oder nach den Dateinamen
+angegeben werden. Optionen ohne Parameter können hinter einem einzigen
+Bindestrich gruppiert werden.
+.TP  12
++[Nummer]
+In der ersten Datei wird der Cursor auf die Zeile [Nummer] gesetzt. Falls
+[Nummer] nicht angegeben wird, wird der Cursor in die letzte Zeile der Datei
+gesetzt.
+.TP 
++/{Suchmuster}
+In der ersten Datei wird der Cursor auf das erste Auftreten von {Suchmuster}
+gesetzt. Siehe Â»:help search\-pattern«.
+.TP 
++{Befehl}
+.TP 
+\-c {Befehl}
+{Befehl} wird nach dem Lesen der ersten Datei ausgeführt. Als {Befehl} wird
+ein Ex\-Befehl erwartet. Sind in {Befehl} Leerzeichen vorhanden, muss alles
+in Anführungszeichen gesetzt werden (hängt von der verwendeten Shell
+ab). Beispiel: vim "+set si" main.c
+.br
+Anmerkung: Sie können bis zu 10 Â»+«\- oder â€ž\-c«\-Befehle verwenden.
+.TP 
+\-S {Datei}
+{Datei} wird nach dem Lesen der ersten Datei ausgeführt. Dies entspricht Â»\-c
+"source {Datei}"«. {Datei} darf nicht mit einem Bindestrich (\-)
+anfangen. Wenn kein Dateiname angegeben wird, wird Â»Session.vim« verwendet
+(Funktioniert nur, wenn Â»\-S« als letzter Parameter steht).
+.TP 
+\-\-cmd {Befehl}
+Wie Â»\-c«, aber dieser Befehl wird vor allen VimRC\-Dateien ausgeführt. Sie
+können unabhängig von den Â»\-c«\-Befehlen bis zu 10 dieser Befehle verwenden.
+.TP 
+\-A
+Falls \fBVim\fP mit Unterstützung für das Schreiben von rechts nach links und
+arabischer Tastaturbelegung compiliert wurde (ARABIC), startet dieser
+Parameter den Modus fürs Arabische (:set arabic). Anderenfalls beendet sich
+\fBVim\fP mit einer Fehlermeldung.
+.TP 
+b
+Binärer Modus: Es werden einige Variablen gesetzt, sodass es möglich ist,
+eine binäre oder ausführbare Datei zu bearbeiten.
+.TP 
+\-C
+Kompatibel: Setzt die Option 'compatible'. Das macht \fBVim\fP im Verhalten
+sehr Ã¤hnlich zu Vi, selbst wenn eine VimRC\-Datei existiert.
+.TP 
+\-d
+Startet im diff\-Modus. Es sollten zwei, drei oder vier Dateinamen als
+Parameter Ã¼bergeben werden. \fBVim\fP Ã¶ffnet sie alle und zeigt die
+Unterschiede an. Arbeitet wie vimdiff(1).
+.TP 
+\-d {Gerät}
+Öffnet das {Gerät}, um es als Terminal zu nutzen. Nur für AmigaOS. Beispiel:
+"\-d con:20/30/600/150".
+.TP 
+D
+Debug\-Modus: \fBVim\fP geht in den Debug\-Modus, wenn der erste Befehl in einem
+Skript ausgeführt wird.
+.TP 
+\-e
+Startet \fBVim\fP im Ex\-Modus, als würde als ausführbare Datei Â»ex« aufgerufen.
+.TP 
+\-E
+Startet \fBVim\fP im erweiterten Ex\-Modus, als würde die ausführbare Datei als
+»exim« aufgerufen.
+.TP 
+\-f
+Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
+löst sich nicht von der Shell, in der er aufgerufen wurde. Bei AmigaOS wird
+kein neues Fenster geöffnet. Dieser Parameter wird benutzt, damit das
+aufrufende Programm auf das Beenden des Bearbeitungssitzung wartet (z.B.:
+mail). Bei AmigaOS funktionieren die Befehle Â»:sh« und â€ž:!« nicht.
+.TP 
+\-\-nofork
+Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
+löst sich nicht von der Shell, in der er aufgerufen wurde.
+.TP 
+\-F
+Wenn \fBVim\fP mit FKMAP\-Unterstützung für das Schreiben von rechts nach links
+und Farsi\-Tastatur\-Belegung kompiliert wurde, startet Vim im Farsi\-Modus,
+d.h. die Optionen 'fkmap' und 'rightleft' werden gesetzt. Andernfalls bricht
+\fBVim\fP mit einer Fehlermeldung ab.
+.TP 
+\-g
+Falls \fBVim\fP mit GUI\-Unterstützung kompiliert wurde, wird die GUI
+aktiviert. Falls keine GUI\-Unterstützung einkompiliert wurde, wird mit einer
+Fehlermeldung abgebrochen.
+.TP 
+\-h
+Gibt eine kleine Hilfe für die Befehlszeilenparameter aus. Danach beendet
+sich \fBVim.\fP
+.TP 
+\-H
+Hebräisch\-Modus, falls \fBVim\fP mit RIGHTLEFT\-Unterstützung für das Schreiben
+von rechts nach links und hebräischer Tastaturbelegung kompiliert wurde,
+werden die Optionen 'hkmap' und 'rightleft' gesetzt. Andernfalls beendet
+sich \fBVim\fP mit einer Fehlermeldung.
+.TP 
+\-i {VimInfo}
+Wenn eine VimInfo\-Datei verwendet wird: Verwendet statt Â»~/.viminfo« die
+angegebene Datei. Es ist auch möglich die Verwendung einer VimInfo\-Datei
+durch Angabe des Dateinamen Â»NONE« zu verhindern,
+.TP 
+\-L
+dasselbe wie Â»\-r«
+.TP 
+\-l
+Lisp\-Modus. Aktiviert die Optionen 'lisp' und 'showmatch'.
+.TP 
+\-m
+Deaktiviert das Verändern von Dateien, indem die Option 'write' gelöscht
+wird. Der Puffer kann verändert werden, nur das Schreiben einer Datei ist
+nicht möglich.
+.TP 
+\-M
+Keine Veränderungen erlaubt: Die Optionen 'modifiable' und 'write' werden
+gelöscht, so dass Ã„nderungen nicht erlaubt sind und Dateien nicht
+geschrieben werden können. Man beachte, dass diese Optionen ('modifiable',
+\&'write') dennnoch nachträglich zum Erlauben von Ã„nderungen gesetzt werden
+können.
+.TP 
+\-N
+Nicht\-kompatibler Modus: Löscht die Option 'compatible'. Dies veranlasst
+\fBVim\fP, sich ein wenig besser, aber weniger Vi\-kompatibel zu verhalten,
+selbst wenn es keine VimRC\-Datei gibt.
+.TP 
+\-n
+Verwendet keine Auslagerungsdatei: Eine Wiederherstellung nach einem Absturz
+ist nicht möglich. Auf einem langsamen Medium (Diskette) kann diese
+Einstellung nützlich sein. Kann auch mit Â»set uc=0« erreicht werden; kann
+mit Â»set uc=200« aufgehoben werden.
+.TP 
+\-nb
+\fBVim\fP fungiert als Server für NetBeans. Details siehe Dokumentation.
+.TP 
+\-o[N]
+Öffnet [N] Fenster Ã¼bereinander. Wenn keine Zahl angegeben wird, Ã¶ffne ein
+Fenster pro Datei.
+.TP 
+\-O[N]
+Öffnet [N] Fenster nebeneinander. Wenn keine Zahl angegeben wird, Ã¶ffne ein
+Fenster pro Datei.
+.TP 
+\-p[N]
+Öffnet [N] Reiterseiten. Wenn keine Zahl angegeben wird, Ã¶ffne eine
+Reiterseite pro Datei.
+.TP 
+\-R
+Nur\-Lesen\-Modus: Die Option 'readonly' wird gesetzt. Der Puffer kann noch
+bearbeitet werden, aber es wird verhindert, eine Datei aus Versehen zu
+überschreiben. Wenn Sie wirklich eine Datei Ã¼berschreiben wollen, fügen Sie
+dem Ex\-Befehl ein Ausrufezeichen hinzu (wie in Â»:w!«). Die Option â€ž\-R«
+bedingt die Option Â»\-n« (siehe oben). Die Option 'readonly' kann durch â€ž:set
+noro« gelöscht werden. Siehe Â»:help 'readonly'«.
+.TP 
+\-r
+Listet die Auslagerungsdateien und gibt Informationen zu ihrer
+Verwendbarkeit zur Wiederherstellung.
+.TP 
+\-r {Datei}
+Wiederherstellungsmodus: Die Auslagerungsdatei wird zur Wiederherstellung
+verwendet und hat denselben Dateinamen wie die Text\-Datei + Â».swp«. Siehe
+„:help recovery«.
+.TP 
+\-s
+Der stille Modus: Nur wenn die ausführbare Datei als Â»ex« aufgerufen wird
+oder vor Â»\-s« die Option â€ž\-e« gegeben wird.
+.TP 
+\-s {Eingabeskript}
+Die Datei {Eingabeskript} wird gelesen und ausgeführt, als würden Sie die
+Zeichen in ihr tippen. Dasselbe kann mit dem Befehl Â»:source!
+{Eingabeskript}« erreicht werden. Wird das Ende der Datei vor dem Beenden
+des Editors erreicht, werden weitere Zeichen von der Tastatur gelesen.
+.TP 
+\-T {Terminal}
+Setzt den Namen des benutzten Terminals. Nur erforderlich, wenn die
+Automatik nicht funktioniert. Sollte ein \fBVim\fP bekanntes Terminal sein:
+(builtin) oder in einer termcap\- oder terminfo\-Datei definiert.
+.TP 
+\-u {VimRC}
+Verwendet zur Initialisierung die Befehle in der Datei {VimRC}. Alle anderen
+Initialisierungen werden Ã¼bersprungen. Benutzen Sie dies, um eine besondere
+Art von Dateien zu bearbeiten. Dies kann auch benutzt werden, um alle
+Initialisierungen zu Ã¼berspringen, indem der Name Â»NONE« angegeben wird. Für
+weitere Einzelheiten siehe Â»:help initialisation« innerhalb von Vim.
+.TP 
+\-U {GvimRC}
+Benutzt die Befehle in der Datei {GvimRC} für die Initialisierung der
+grafischen Oberfläche. Alle anderen Initialisierungen werden
+übersprungen. Dies kann ebenfalls benutzt werden, um alle
+GUI\-Initialisierungen zu Ã¼berspringen, indem der Name Â»NONE« angegeben
+wird. Siehe Â»:help gui\-init« innerhalb von Vim für weitere Einzelheiten.
+.TP 
+\-V[N]
+Ausführlich (verbose): Gibt Meldungen darüber, welche Befehlsdateien
+eingelesen werden, und Ã¼ber das Lesen und Schreiben einer VimInfo\-Datei. Die
+optionale Zahl N ist der Wert für 'verbose'. Vorgabe ist 10.
+.TP 
+\-v
+Startet \fBVim\fP im Vi\-Modus, so als würde die ausführbare Datei mit Â»vi«
+aufgerufen. Dies wirkt sich nur aus, wenn die ausführbare Datei als Â»ex«
+aufgerufen wird.
+.TP 
+\-w {Ausgabeskript}
+Alle Zeichen, die eingetippt werden, werden in der Datei {Ausgabeskript}
+aufgezeichnet, solange bis Sie \fBVim\fP beenden. Dies ist nützlich, falls Sie
+eine Skript\-Datei zum Benutzen mit Â»vim \-s« oder â€ž:source!« erzeugen
+wollen. Falls die Datei {Ausgabeskript} vorhanden ist, werden die Zeichen
+angehängt.
+.TP 
+\-W {Ausgabeskript}
+Wie \-w, aber eine bereits vorhandene Datei wird Ã¼berschrieben.
+.TP 
+\-x
+Benutzt beim Schreiben von Dateien eine Verschlüsselung. Fragt nach dem
+Schlüssel.
+.TP 
+\-X
+Führt keine Verbindung zum X\-Server durch. Dadurch verkürzt sich die
+Startzeit, aber der Fenstertitel und die Zwischenablage werden nicht
+verwendet.
+.TP 
+\-y
+Startet \fBVim\fP im einfachen Modus, als würde die ausführbare Datei mit
+»evim« oder Â»eview« aufgerufen. \fBVim\fP verhält sich dann wie ein Editor zum
+Klicken und Tippen.
+.TP 
+\-Z
+Eingeschränkter Modus: Funktioniert, als würde der Name der ausführbaren
+Datei mit Â»r« beginnen.
+.TP 
+\-\-
+Markiert das Ende der Optionen. Argumente, die folgen, werden als Dateinamen
+behandelt. Dies kann benutzt werden, um einen Dateinamen mit Â»\-« am Anfang
+zu verwenden.
+.TP 
+\-\-echo\-wid
+Nur GTK\-GUI: Schreibe die Fenster\-ID auf die Standardausgabe.
+.TP 
+\-\-help
+Gibt eine Hilfe\-Nachricht aus und beendet, wie Â»\-h«.
+.TP 
+\-\-literal
+Nimmt die Dateinamen so wie sie sind und vervollständigt sie nicht nach
+Metazeichen (*,?). Dies wirkt sich nicht unter Unix aus, wo die Shell die
+Metazeichen expandiert.
+.TP 
+\-\-noplugin
+Lade keine Plugins. Impliziert durch Â»\-u NONE«.
+.TP 
+\-\-remote
+Verbindet mit einem Vim\-Server und lässt ihn die in den restlichen
+Argumenten angegeben Dateien editieren. Wenn kein Server gefunden wird,
+führt dies zu einer Warnmeldung und die Dateien werden im gegenwärtigen Vim
+zum Bearbeiten geöffnet.
+.TP 
+\-\-remote\-expr {Ausdruck}
+Verbindet mit einem Vim\-Server, führt {Ausdruck} aus und zeigt das Ergebnis
+auf der Standardausgabe an.
+.TP 
+\-\-remote\-send {Zeichen}
+Verbindet mit einem Vim\-Server und sendet ihm {Zeichen}.
+.TP 
+\-\-remote\-silent
+Wie Â»\-\-remote«, aber ohne Warnung, wenn kein Server gefunden wird.
+.TP 
+\-\-remote\-wait
+Wie Â»\-\-remote«, aber Vim beendet sich nicht, bis die Dateien bearbeitet
+wurden.
+.TP 
+\-\-remote\-wait\-silent
+Wie Â»\-\-remote\-wait«, aber ohne Warnung, wenn kein Server gefunden wird.
+.TP 
+\-\-serverlist
+Listet die Namen aller gefundenen Vim\-Server auf.
+.TP 
+\-\-servername {Name}
+Benutzt {Name} als Server\-Namen. Wird für den gegenwärtigen Vim benutzt,
+außer es wird mit dem Argument Â»\-\-remote« benutzt, dann ist es der Name des
+zu kontaktierenden Servers.
+.TP 
+\-\-socketid {id}
+Nur GTK\-GUI: Benutzt den GtkPlug\-Mechanismus, um GVim in einem anderen
+Fenster laufen zu lassen.
+.TP 
+\-\-version
+Versionsinformation anzeigen und beenden
+.SH "EINGEBAUTE HILFE"
+Tippen Sie in \fBVim\fP Â»:help«, um zu beginnen. Geben Sie â€ž:help begriff« ein,
+um Hilfe Ã¼ber ein bestimmtes Thema zu bekommen. Zum Beispiel Â»:help ZZ« für
+Hilfe Ã¼ber den Befehl Â»ZZ«. Benutzen Sie <Tab> und CTRL\-D, um
+Begriffe zu vervollständigen (»:help cmdline\-completion«). Tags sind
+vorhanden, um von einem Ort zum anderen zu springen (eine Art
+Hypertext\-Verknüpfungen, siehe Â»:help«). Auf diese Weise können alle
+Dokumentations\-Dateien aufgerufen werden, zum Beispiel Â»:help syntax.txt«.
+.SH DATEIEN
+.TP  15
+/usr/local/lib/vim/doc/*.txt
+Dokumentations\-Dateien für \fBVim\fP. Verwenden Sie Â»:help doc\-file\-list«, um
+die gesamte Liste zu bekommen.
+.TP 
+/usr/local/lib/vim/doc/tags
+Die Â»Tag«\-Datei, die verwendet wird, um Informationen in der Dokumentation
+zu finden.
+.TP 
+/usr/local/lib/vim/syntax/syntax.vim
+Die systemweite Einrichtung der Syntaxhervorhebung.
+.TP 
+/usr/local/lib/vim/syntax/*.vim
+Syntaxdateien für die verschiedenen Sprachen.
+.TP 
+/usr/local/lib/vim/vimrc
+Systemweite Einstellungsdatei für \fBVim\fP
+.TP 
+~/.vimrc
+Persönliche Einstellungsdatei für \fBVim\fP
+.TP 
+/usr/local/lib/vim/gvimrc
+Systemweite Einstellungsdatei für GVim
+.TP 
+~/.gvimrc
+Persönliche Einstellungsdatei für GVim
+.TP 
+/usr/local/lib/vim/optwin.vim
+Das Script, das von dem Befehl Â»:options« verwendet wird, eine schöne
+Möglichkeit, um Optionen zu betrachten und zu setzen.
+.TP 
+/usr/local/lib/vim/menu.vim
+Systemweite Einstellungsdatei für das Menü von GVim
+.TP 
+/usr/local/lib/vim/bugreport.vim
+Das Script zum Generieren eines Fehlerberichts. Siehe Â»:help bugs«.
+.TP 
+/usr/local/lib/vim/filetype.vim
+Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
+Dateinamens. Siehe Â»:help 'filetype'«.
+.TP 
+/usr/local/lib/vim/scripts.vim
+Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
+Inhaltes. Siehe Â»:help 'filetype'«.
+.TP 
+/usr/local/lib/vim/print/*.ps
+Diese Dateien werden zum Drucken von PostScript verwendet.
+.PP
+Für die neuesten Informationen lesen Sie die Vim\-Homepage:
+.br
+<URL:http://www.vim.org/>
+.SH "SIEHE AUCH"
+vimtutor(1)
+.SH AUTOR
+\fBVim\fP wurde größtenteils von Bram Moolenaar erstellt, mit viel Hilfe von
+anderen Leuten. Siehe Â»:help credits« in \fBVim.\fP
+.br
+\fBVim\fP basiert auf Stevie, der von Tim Thompson, Tony Andrews und
+G.R. (Fred) Walter geschrieben wurde. Es ist jedoch kaum etwas vom
+ursprünglichen Code Ã¼brig geblieben.
+.SH FEHLER
+Die sind möglich. Siehe Â»:help todo« für eine Liste bekannter Probleme.
+.PP
+Beachten Sie, dass gewisse Dinge, die manche Leute als Fehler betrachten
+mögen, in Wirklichkeit durch zu getreue Nachbildung des Vi\-Verhaltens
+verursacht werden. Und falls Sie denken, dass andere Dinge Fehler sind,
+»weil Vi es anders tut«, sollten Sie einen genaueren Blick auf die Datei
+vi_diff.txt werfen (oder in Vim Â»:help vi_diff.txt« tippen). Sehen Sie sich
+auch die Optionen 'compatible' und 'cpoptions' an.
index 5a5a871..209ab91 100644 (file)
@@ -1,11 +1,11 @@
-.\" Traduction Lundi 7 août 2000 par Richard Hitier
+.\" Traduction lundi 7 août 2000 par Richard Hitier
 .\" (richard.hitier@dial.oleane.com)
 .\" Mise Ã  jour de la traduction par David Blanchet
 .\" (david.blanchet@free.fr) 2006-06-10
 .\" Mise Ã  jour de la traduction par Dominique Pellé
-.\" (dominique.pelle@gmail.com) 2008-11-29
+.\" (dominique.pelle@gmail.com) 2013-05-10
 .\"
-.TH VIM 1 "22 Février 2002"
+.TH VIM 1 "22 février 2002"
 .SH NOM
 vim \- Vi IMproved, Ã©diteur de texte pour programmeurs
 .SH SYNOPSIS
@@ -156,7 +156,7 @@ Ex
 {commande} est interprétée comme une commande Ex.
 Si la {commande} contient des espaces, elle doit Ãªtre entourée
 de doubles-apostrophes (cela dépend du shell utilisé).
-Exemple: Vim "+set si" main.c
+Exemple : Vim "+set si" main.c
 .br
 Note : vous pouvez utiliser jusqu'à 10 commandes "+" ou "\-c".
 .TP
@@ -204,7 +204,7 @@ Fonctionne comme vimdiff(1).
 \-d {périph}
 Ouvre {périph} pour l'utiliser comme terminal.
 Uniquement sur Amiga.
-Exemple:
+Exemple :
 "\-d con:20/30/600/150".
 .TP
 \-D
@@ -269,7 +269,7 @@ quitte.
 Si
 .B Vim
 a Ã©té compilé avec le support de la fonctionnalité RIGHTLEFT pour l'édition de
-fichiers de droite Ã  gauche et les claviers hébreu, cette option lance
+fichiers de droite Ã  gauche et les claviers hébreux, cette option lance
 .B Vim
 en mode Hébreu, c.-à-d. avec les options 'hkmap' et 'rightleft' activées.
 Sinon, un message d'erreur est Ã©mis et
@@ -435,7 +435,7 @@ Mode restreint. Fonctionne comme si l'ex
 \-\-
 Délimite la fin des options.
 Les arguments qui suivent seront considérés comme des noms de fichiers.
-Cela permet d'éditer des fichier débutant par un '\-'.
+Cela permet d'éditer des fichiers débutant par un '\-'.
 .TP
 \-\-echo\-wid
 IHM graphique GTK uniquement : retourne la Window ID sur stdout.
@@ -586,3 +586,4 @@ Cette page de manuel a 
 .br
 Cette page de manuel a Ã©té mise Ã  jour par David Blanchet.
 <david.blanchet@free.fr> 2006-04-10.
+Mise Ã  jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
index 9a8bea6..67be106 100644 (file)
@@ -1,11 +1,11 @@
-.\" Traduction Lundi 7 août 2000 par Richard Hitier
+.\" Traduction lundi 7 août 2000 par Richard Hitier
 .\" (richard.hitier@dial.oleane.com)
 .\" Mise Ã  jour de la traduction par David Blanchet
 .\" (david.blanchet@free.fr) 2006-06-10
 .\" Mise Ã  jour de la traduction par Dominique Pellé
-.\" (dominique.pelle@gmail.com) 2008-11-29
+.\" (dominique.pelle@gmail.com) 2013-05-10
 .\"
-.TH VIM 1 "22 Février 2002"
+.TH VIM 1 "22 février 2002"
 .SH NOM
 vim \- Vi IMproved, Ã©diteur de texte pour programmeurs
 .SH SYNOPSIS
@@ -156,7 +156,7 @@ Exécute {commande} après la lecture du premier fichier.
 {commande} est interprétée comme une commande Ex.
 Si la {commande} contient des espaces, elle doit Ãªtre entourée
 de doubles-apostrophes (cela dépend du shell utilisé).
-Exemple: Vim "+set si" main.c
+Exemple : Vim "+set si" main.c
 .br
 Note : vous pouvez utiliser jusqu'à 10 commandes "+" ou "\-c".
 .TP
@@ -204,7 +204,7 @@ Fonctionne comme vimdiff(1).
 \-d {périph}
 Ouvre {périph} pour l'utiliser comme terminal.
 Uniquement sur Amiga.
-Exemple:
+Exemple :
 "\-d con:20/30/600/150".
 .TP
 \-D
@@ -269,7 +269,7 @@ quitte.
 Si
 .B Vim
 a Ã©té compilé avec le support de la fonctionnalité RIGHTLEFT pour l'édition de
-fichiers de droite Ã  gauche et les claviers hébreu, cette option lance
+fichiers de droite Ã  gauche et les claviers hébreux, cette option lance
 .B Vim
 en mode Hébreu, c.-à-d. avec les options 'hkmap' et 'rightleft' activées.
 Sinon, un message d'erreur est Ã©mis et
@@ -435,7 +435,7 @@ Mode restreint. Fonctionne comme si l'exécutable commençait par la lettre 'r'.
 \-\-
 Délimite la fin des options.
 Les arguments qui suivent seront considérés comme des noms de fichiers.
-Cela permet d'éditer des fichier débutant par un '\-'.
+Cela permet d'éditer des fichiers débutant par un '\-'.
 .TP
 \-\-echo\-wid
 IHM graphique GTK uniquement : retourne la Window ID sur stdout.
@@ -586,3 +586,4 @@ Cette page de manuel a Ã©té traduite par Richard Hitier.
 .br
 Cette page de manuel a Ã©té mise Ã  jour par David Blanchet.
 <david.blanchet@free.fr> 2006-04-10.
+Mise Ã  jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
diff --git a/runtime/doc/vim-ja.UTF-8.1 b/runtime/doc/vim-ja.UTF-8.1
new file mode 100644 (file)
index 0000000..a4788b3
--- /dev/null
@@ -0,0 +1,501 @@
+.TH VIM 1 "2006 Apr 11"
+.SH åå‰
+vim \- Vi IMproved, ãƒ—ログラマã®ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿
+.SH æ›¸å¼
+.br
+.B vim
+[options] [file ..]
+.br
+.B vim
+[options] \-
+.br
+.B vim
+[options] \-t tag
+.br
+.B vim
+[options] \-q [errorfile]
+.PP
+.br
+.B ex
+.br
+.B view
+.br
+.B gvim
+.B gview
+.B evim
+.B eview
+.br
+.B rvim
+.B rview
+.B rgvim
+.B rgview
+.SH èª¬æ˜Ž
+.B Vim
+㯠Vi äº’æ›ã®ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ã§ã™ã€‚
+ã©ã®ã‚ˆã†ãªç¨®é¡žã®ãƒ—レインテキストã§ã‚‚編集ã§ãã¾ã™ã€‚
+特ã«ã€ãƒ—ログラムã®ç·¨é›†ã«åŠ›ã‚’発æ®ã—ã¾ã™ã€‚
+.PP
+Vi ã«å¤šãã®æ”¹è‰¯ãŒåŠ ãˆã‚‰ã‚Œã¦ã„ã¾ã™:
+多段アンドゥã€ãƒžãƒ«ãƒã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã€ãƒžãƒ«ãƒãƒãƒƒãƒ•ã‚¡ã€æ§‹æ–‡å¼·èª¿è¡¨ç¤ºã€
+コマンドライン編集ã€ãƒ•ã‚¡ã‚¤ãƒ«å補完ã€ãƒ˜ãƒ«ãƒ—ã€ãƒ“ジュアルé¸æŠžã€ãªã©ãªã©ã€‚
+.B Vim
+㨠Vi ã®é•ã„ã«ã¤ã„ã¦ã®è¦ç´„㯠":help vi_diff.txt" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.PP
+.B Vim
+ã®å®Ÿè¡Œä¸­ã¯ ":help" ã‚³ãƒžãƒ³ãƒ‰ã§ãƒ˜ãƒ«ãƒ—を引ãã“ã¨ãŒã§ãã¾ã™ã€‚
+下記ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ˜ãƒ«ãƒ—ã®é …ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.PP
+.B Vim
+ã¯æ¬¡ã®ã‚ˆã†ãªã‚³ãƒžãƒ³ãƒ‰ã§èµ·å‹•ã§ãã¾ã™ã€‚
+.PP
+       vim file
+.PP
+正確ãªæ›¸å¼ã¯æ¬¡ã®é€šã‚Šã§ã™:
+.PP
+       vim [options] [filelist]
+.PP
+filelist ã‚’çœç•¥ã—ãŸå ´åˆã¯ã€ç©ºã®ãƒãƒƒãƒ•ã‚¡ãŒé–‹ã‹ã‚Œã¾ã™ã€‚
+指定ã—ãŸå ´åˆã¯ã€ä»¥ä¸‹ã®å››ã¤ã®ã†ã¡ã©ã‚Œã‹ä¸€ã¤ã®æ–¹æ³•ã§ãƒ•ã‚¡ã‚¤ãƒ«ãŒé–‹ã‹ã‚Œã¾ã™ã€‚
+.TP 12
+file ..
+ファイルã®ãƒªã‚¹ãƒˆã€‚
+一番目ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚«ãƒ¬ãƒ³ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã«ãªã‚Šã€ãƒãƒƒãƒ•ã‚¡ã«èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚
+カーソルã¯ã€ãƒãƒƒãƒ•ã‚¡ã®ä¸€è¡Œç›®ã«ç½®ã‹ã‚Œã¾ã™ã€‚
+ä»–ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’表示ã™ã‚‹ã«ã¯ ":next" ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã£ã¦ãã ã•ã„。
+ファイルåãŒãƒ€ãƒƒã‚·ãƒ¥ã§å§‹ã¾ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ãå ´åˆã¯ã€
+filelist ã®å‰ã« "\-\-" ã‚’指定ã—ã¦ãã ã•ã„。
+.TP
+\-
+ファイルã¯æ¨™æº–入力ã‹ã‚‰èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚コマンドã¯æ¨™æº–エラー (ttyã‹ã‚‰ã®å…¥
+力ã«ãªã£ã¦ã„ã‚‹ã¯ãš) ã‹ã‚‰èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚
+.TP
+\-t {tag}
+é–‹ãファイルã¨ã‚«ãƒ¼ã‚½ãƒ«ã®åˆæœŸä½ç½®ã¯ "tag" ã«ä¾å­˜ã—ã¾ã™ã€‚goto label ã®ä¸€ç¨®ã§ã™ã€‚
+tags ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰ {tag} ãŒæ¤œç´¢ã•ã‚Œã€é–¢é€£ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚«ãƒ¬ãƒ³ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã«ãªã‚Š
+ã¾ã™ã€‚ãã—ã¦ã€é–¢é€£ã—ãŸã‚³ãƒžãƒ³ãƒ‰ãŒå®Ÿè¡Œã•ã‚Œã¾ã™ã€‚
+ã“ã‚Œã¯ä¸»ã« C è¨€èªžã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ãã¨ãã«ä½¿ã‚ã‚Œã¾ã™ã€‚ãã®å ´åˆ {tag} ã«é–¢æ•°ãªã©
+を指定ã—ã¦ä½¿ã„ã¾ã™ã€‚
+関数をå«ã‚“ã§ã„るファイルãŒé–‹ã‹ã‚Œã€ãã®é–¢æ•°ã®å…ˆé ­ã«ã‚«ãƒ¼ã‚½ãƒ«ãŒç§»å‹•ã™ã‚‹ã€
+ã¨ã„ã†å‹•ä½œã«ãªã‚Šã¾ã™ã€‚
+詳ã—ã㯠":help tag\-commands" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.TP
+\-q [errorfile]
+クイックフィックスモードã§èµ·å‹•ã—ã¾ã™ã€‚
+[errorfile] ã«æŒ‡å®šã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ãŒèª­ã¿è¾¼ã¾ã‚Œã€æœ€åˆã®ã‚¨ãƒ©ãƒ¼ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+[errorfile] ã‚’çœç•¥ã—ãŸå ´åˆã¯ã€ã‚ªãƒ—ション 'errorfile' ãŒä½¿ã‚ã‚Œã¾ã™ (åˆæœŸè¨­å®š
+ã¯ã€Amiga ã§ã¯ "AztecC.Err"ã€ãã®ä»–ã®ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ "errors.err" ã§ã™)。
+":cn" ã‚³ãƒžãƒ³ãƒ‰ã§æ¬¡ã®ã‚¨ãƒ©ãƒ¼ã«ã‚¸ãƒ£ãƒ³ãƒ—ã§ãã¾ã™ã€‚
+詳ã—ã㯠":help quickfix" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.PP
+.B Vim
+ã¯ã€èµ·å‹•ã•ã‚ŒãŸã¨ãã®å®Ÿè¡Œãƒ•ã‚¡ã‚¤ãƒ«ã®åå‰ã«ã‚ˆã£ã¦å‹•ä½œã‚’変ãˆã¾ã™
+(実行ファイルã®å®Ÿä½“ãŒåŒã˜ã§ã‚ã£ã¦ã‚‚)。
+.TP 10
+vim
+"普通" ã«èµ·å‹•ã—ã¾ã™ã€‚標準ã®çŠ¶æ…‹ã§ã™ã€‚
+.TP
+ex
+Ex ãƒ¢ãƒ¼ãƒ‰ã§èµ·å‹•ã—ã¾ã™ã€‚
+ノーマルモードã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã«ã¯ ":vi" ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã£ã¦ãã ã•ã„。
+引数㫠"\-e" ã‚’指定ã—ãŸå ´åˆã¨åŒã˜ã§ã™ã€‚
+.TP
+view
+読ã¿è¾¼ã¿å°‚用モードã§èµ·å‹•ã—ã¾ã™ã€‚ファイルã®ä¿å­˜ãŒåˆ¶é™ã•ã‚Œã¾ã™ã€‚
+引数㫠"\-R" ã‚’指定ã—ãŸå ´åˆã¨åŒã˜ã§ã™ã€‚
+.TP
+gvim gview
+GUI ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚
+æ–°ã—ã„ウィンドウを開ã„ã¦èµ·å‹•ã—ã¾ã™ã€‚
+引数㫠"\-g" ã‚’指定ã—ãŸå ´åˆã¨åŒã˜ã§ã™ã€‚
+.TP
+evim eview
+簡易モード㮠GUI ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€‚
+æ–°ã—ã„ウィンドウを開ã„ã¦èµ·å‹•ã—ã¾ã™ã€‚
+引数㫠"\-y" ã‚’指定ã—ãŸå ´åˆã¨åŒã˜ã§ã™ã€‚
+.TP
+rvim rview rgvim rgview
+上記ã¨åŒã˜ã§ã™ãŒã€åˆ¶é™ãƒ¢ãƒ¼ãƒ‰ã§èµ·å‹•ã—ã¾ã™ã€‚シェルコマンドを実行ã—ãŸã‚Šã€
+.B Vim
+をサスペンドã—ãŸã‚Šã§ããªããªã‚Šã¾ã™ã€‚
+引数㫠"\-Z" ã‚’指定ã—ãŸå ´åˆã¨åŒã˜ã§ã™ã€‚
+.SH ã‚ªãƒ—ション
+ファイルåã®å‰ã§ã‚‚後ã‚ã§ã‚‚ã€å¥½ããªé †ç•ªã§ã‚ªãƒ—ションを指定ã§ãã¾ã™ã€‚
+パラメータを必è¦ã¨ã—ãªã„引数ã¯ã€ä¸€ã¤ã®ãƒ€ãƒƒã‚·ãƒ¥ã«ã¾ã¨ã‚ã¦æŒ‡å®šã§ãã¾ã™ã€‚
+.TP 12
++[num]
+一番目ã®ãƒ•ã‚¡ã‚¤ãƒ«ã® "num" è¡Œç›®ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã™ã€‚
+"num" ã‚’çœç•¥ã—ãŸå ´åˆã¯ã€ä¸€è¡Œç›®ã«ã‚«ãƒ¼ã‚½ãƒ«ãŒç§»å‹•ã—ã¾ã™ã€‚
+.TP
++/{pat}
+一番目ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ã€æœ€åˆã« {pat} ãŒè¦‹ã¤ã‹ã£ãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ãŒç§»å‹•ã—ã¾ã™ã€‚
+検索パターンã«ã¤ã„ã¦ã¯ ":help search\-pattern" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.TP
++{command}
+.TP
+\-c {command}
+一番目ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒèª­ã¿è¾¼ã¾ã‚ŒãŸå¾Œã« {command} ãŒå®Ÿè¡Œã•ã‚Œã¾ã™ã€‚
+{command} ã¯ Ex ã‚³ãƒžãƒ³ãƒ‰ã¨ã—ã¦è§£é‡ˆã•ã‚Œã¾ã™ã€‚
+{command} ã«ç©ºç™½ã‚’å«ã‚ã‚‹å ´åˆã¯ã€ãƒ€ãƒ–ルクォートã§å›²ã‚“ã§ãã ã•ã„ (シェルã«ä¾å­˜)。
+例: vim "+set si" main.c
+.br
+Note: "+" ã¨ "\-c" ã¯åˆã‚ã›ã¦ 10 å€‹ã¾ã§æŒ‡å®šã§ãã¾ã™ã€‚
+.TP
+\-S {file}
+一番目ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒèª­ã¿è¾¼ã¾ã‚ŒãŸå¾Œã« {file} ãŒå®Ÿè¡Œã•ã‚Œã¾ã™ã€‚
+ã“れ㯠\-c "source {file}" ã¨åŒã˜å‹•ä½œã§ã™ã€‚
+{file} ã®å…ˆé ­ãŒ '\-' ã®å ´åˆã¯ä½¿ãˆã¾ã›ã‚“。
+{file} ãŒçœç•¥ã•ã‚ŒãŸå ´åˆã¯ã€"Session.vim" ãŒä½¿ã‚ã‚Œã¾ã™ (ãŸã ã— \-S ãŒæœ€å¾Œã®å¼•
+æ•°ã ã£ãŸå ´åˆã®ã¿)。
+.TP
+\-\-cmd {command}
+"\-c" ã¨åŒã˜ã§ã™ãŒã€vimrc ã‚’処ç†ã™ã‚‹å‰ã«ã‚³ãƒžãƒ³ãƒ‰ãŒå®Ÿè¡Œã•ã‚Œã¾ã™ã€‚
+ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ã¯ "\-c" ã‚³ãƒžãƒ³ãƒ‰ã¨ã¯åˆ¥ã«ã€10 å€‹ã¾ã§æŒ‡å®šã§ãã¾ã™ã€‚
+.TP
+\-A
+アラビア語ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¦ã€ã‚¢ãƒ©ãƒ“ア語キーマップãŒã‚ã‚‹å ´åˆã¯ã€
+アラビア語モードã§èµ·å‹•ã—ã¾ã™ ('arabic' ãŒã‚ªãƒ³ã«ãªã‚Šã¾ã™)。
+å³æ¨ªæ›¸ãã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã§ãã¾ã™ã€‚
+サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚
+.TP
+\-b
+ãƒã‚¤ãƒŠãƒªãƒ¢ãƒ¼ãƒ‰ã€‚
+ãƒã‚¤ãƒŠãƒªãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ãŸã‚ã®ã‚ªãƒ—ションãŒã„ãã¤ã‹è¨­å®šã•ã‚Œã¾ã™ã€‚
+.TP
+\-C
+互æ›ãƒ¢ãƒ¼ãƒ‰ã€‚'compatible' ã‚ªãƒ—ションãŒã‚ªãƒ³ã«ãªã‚Šã¾ã™ã€‚
+ .vimrc ãƒ•ã‚¡ã‚¤ãƒ«ã®æœ‰ç„¡ã«é–¢ã‚らãšã€
+.B Vim
+ã®å‹•ä½œãŒ Vi äº’æ›ã«ãªã‚Šã¾ã™ã€‚
+.TP
+\-d
+差分モードã§èµ·å‹•ã—ã¾ã™ã€‚
+二ã¤ã‹ä¸‰ã¤ã®å››ã¤ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’引数ã«æŒ‡å®šã—ã¦ãã ã•ã„。
+指定ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ãŒé–‹ã‹ã‚Œã€ãれらã®ãƒ•ã‚¡ã‚¤ãƒ«ã®å·®åˆ†ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+vimdiff(1) ã¨åŒæ§˜ã®å‹•ä½œã§ã™ã€‚
+.TP
+\-d {device}
+{device} ã‚’端末ã¨ã—ã¦é–‹ãã¾ã™ã€‚
+Amiga ã§ã®ã¿ä½¿ã„ã¾ã™ã€‚
+例:
+"\-d con:20/30/600/150".
+.TP
+\-D
+デãƒãƒƒã‚°ã€‚スクリプトã®æœ€åˆã®ã‚³ãƒžãƒ³ãƒ‰ãŒå®Ÿè¡Œã•ã‚Œã‚‹ã¨ã“ã‚ã‹ã‚‰ãƒ‡ãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã‚’é–‹
+始ã—ã¾ã™ã€‚
+.TP
+\-e
+Ex ãƒ¢ãƒ¼ãƒ‰ã§èµ·å‹•ã—ã¾ã™ã€‚
+実行ファイルã®åå‰ãŒ "ex" ã®å ´åˆã¨åŒã˜ã§ã™ã€‚
+.TP
+\-E
+改良版 Ex ãƒ¢ãƒ¼ãƒ‰ã§èµ·å‹•ã—ã¾ã™ã€‚
+実行ファイルã®åå‰ãŒ "exim" ã®å ´åˆã¨åŒã˜ã§ã™ã€‚
+.TP
+\-f
+フォアグラウンド。GUI ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã€ãƒ—ロセスをフォークã—ãªããªã‚Šã¾ã™ã€‚
+Amiga ã®å ´åˆã¯ã€æ–°ã—ã„ウィンドウã§å†èµ·å‹•ã—ãªããªã‚Šã¾ã™ã€‚
+メールソフトãªã©ã‹ã‚‰
+.B Vim
+ã‚’èµ·å‹•ã—ã¦ã€ç·¨é›†ãŒçµ‚ã‚ã‚‹ã¾ã§å¾…æ©Ÿã—ãŸã„よã†ãªå ´åˆã«ä½¿ã£ã¦ãã ã•ã„。
+Amiga ã§ã¯ã€":sh" ã¨ "!" ã‚³ãƒžãƒ³ãƒ‰ã¯æ©Ÿèƒ½ã—ãªããªã‚Šã¾ã™ã€‚
+.TP
+\-\-nofork
+フォアグラウンド。GUI ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã€ãƒ—ロセスをフォークã—ãªããªã‚Šã¾ã™ã€‚
+.TP
+\-F
+ペルシア語ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¦ã€ãƒšãƒ«ã‚·ã‚¢èªžã‚­ãƒ¼ãƒžãƒƒãƒ—ãŒã‚ã‚‹å ´åˆã¯ã€
+ペルシア語モードã§èµ·å‹•ã—ã¾ã™ ('fkmap' ã¨ 'rightleft' ãŒã‚ªãƒ³ã«ãªã‚Šã¾ã™)。
+å³æ¨ªæ›¸ãã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã§ãã¾ã™ã€‚
+サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚
+.TP
+\-g
+GUI ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€GUI ã§èµ·å‹•ã—ã¾ã™ã€‚
+サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚
+.TP
+\-h
+コマンドライン引数やオプションã®ãƒ˜ãƒ«ãƒ—を表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚
+.TP
+\-H
+ヘブライ語ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¦ã€ãƒ˜ãƒ–ライ語キーマップãŒã‚ã‚‹å ´åˆã¯ã€
+ヘブライ語モードã§èµ·å‹•ã—ã¾ã™ ('hkmap' ã¨ 'rightleft' ãŒã‚ªãƒ³ã«ãªã‚Šã¾ã™)。
+å³æ¨ªæ›¸ãã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã§ãã¾ã™ã€‚
+サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚
+.TP
+\-i {viminfo}
+viminfo ãƒ•ã‚¡ã‚¤ãƒ«ã‚’使ã†è¨­å®šã«ãªã£ã¦ã„ã‚‹å ´åˆã¯ã€åˆæœŸè¨­å®šã® "~/.viminfo" ã®ä»£ã‚
+ã‚Šã«ã€æŒ‡å®šã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’設定ã—ã¾ã™ã€‚
+"NONE" ã‚’指定ã™ã‚‹ã¨ã€.viminfo ãƒ•ã‚¡ã‚¤ãƒ«ã‚’使ã‚ãªã„よã†ã«è¨­å®šã§ãã¾ã™ã€‚
+.TP
+\-L
+\-r ã¨åŒã˜ã§ã™ã€‚
+.TP
+\-l
+lisp ãƒ¢ãƒ¼ãƒ‰ã€‚
+オプション㮠'lisp' ã¨ 'showmatch' ãŒã‚ªãƒ³ã«ãªã‚Šã¾ã™ã€‚
+.TP
+\-m
+ファイルã®å¤‰æ›´ã‚’ä¸å¯èƒ½ã«ã—ã¾ã™ã€‚
+オプション 'write' ãŒã‚ªãƒ•ã«ãªã‚Šã¾ã™ã€‚
+ãƒãƒƒãƒ•ã‚¡ã‚’変更ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+.TP
+\-M
+変更をä¸å¯èƒ½ã«ã—ã¾ã™ã€‚オプション㮠'modifiable' ã¨ 'write' ãŒã‚ªãƒ•ã«ãªã‚Šã€
+ファイルã®å¤‰æ›´ã¨ä¿å­˜ãŒã§ããªããªã‚Šã¾ã™ã€‚
+Note: ãれらã®ã‚ªãƒ—ションを設定ã™ã‚Œã°å¤‰æ›´ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
+.TP
+\-N
+éžäº’æ›ãƒ¢ãƒ¼ãƒ‰ã€‚'compatible' ã‚ªãƒ—ションãŒã‚ªãƒ•ã«ãªã‚Šã¾ã™ã€‚
+ .vimrc ãƒ•ã‚¡ã‚¤ãƒ«ã®æœ‰ç„¡ã«é–¢ã‚らãšã€
+.B Vim
+ã®æ”¹è‰¯ã•ã‚ŒãŸæ©Ÿèƒ½ãŒæœ‰åŠ¹ã«ãªã‚Šã¾ã™ã€‚Vi ã¨ã®äº’æ›æ€§ãŒå°‘ã—失ã‚ã‚Œã¾ã™ã€‚
+.TP
+\-n
+スワップファイルを使用ã—ã¾ã›ã‚“。
+クラッシュã—ã¦ã‚‚リカãƒãƒªã§ããªããªã‚Šã¾ã™ã€‚
+フロッピーディスクã®ã‚ˆã†ãªéžå¸¸ã«ä½Žé€Ÿãªãƒ¡ãƒ‡ã‚£ã‚¢ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’読ã¿æ›¸ãã™ã‚‹ã¨ãã«
+便利ã§ã™ã€‚
+":set uc=0" ã¨è¨­å®šã—ã¦ã‚‚åŒã˜ã§ã™ã€‚
+戻ã™ã«ã¯ ":set uc=200" ã¨è¨­å®šã—ã¦ãã ã•ã„。
+.TP
+\-nb
+NetBeans ã¨æŽ¥ç¶šã—ã€ã‚¨ãƒ‡ã‚£ã‚¿ã‚µãƒ¼ãƒãƒ¼ã«ãªã‚Šã¾ã™ã€‚
+詳ã—ãã¯ãƒ˜ãƒ«ãƒ—ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.TP
+\-o[N]
+N å€‹ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’水平分割ã§é–‹ãã¾ã™ã€‚
+N ã‚’çœç•¥ã—ãŸå ´åˆã¯ã€å¼•æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’個別ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã§é–‹ãã¾ã™ã€‚
+.TP
+\-O[N]
+N å€‹ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’垂直分割ã§é–‹ãã¾ã™ã€‚
+N ã‚’çœç•¥ã—ãŸå ´åˆã¯ã€å¼•æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’個別ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã§é–‹ãã¾ã™ã€‚
+.TP
+\-p[N]
+N å€‹ã®ã‚¿ãƒ–ページを開ãã¾ã™ã€‚
+N ã‚’çœç•¥ã—ãŸå ´åˆã¯ã€å¼•æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’個別ã®ã‚¿ãƒ–ページã§é–‹ãã¾ã™ã€‚
+.TP
+\-R
+読ã¿è¾¼ã¿å°‚用モード。
+オプション 'readonly' ãŒã‚ªãƒ³ã«ãªã‚Šã¾ã™ã€‚
+ãƒãƒƒãƒ•ã‚¡ã‚’変更ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€é–“é•ã£ã¦ãƒ•ã‚¡ã‚¤ãƒ«ã‚’上書ãã—ã¦ã—ã¾ã†ã®ã‚’防
+ãã“ã¨ãŒã§ãã¾ã™ã€‚
+ファイルをä¿å­˜ã—ãŸã„å ´åˆã¯ã€":w!" ã®ã‚ˆã†ã«ã€Ex ã‚³ãƒžãƒ³ãƒ‰ã«æ„Ÿå˜†ç¬¦ã‚’付ã‘ã¦ãã 
+ã•ã„。
+\-R ã‚ªãƒ—ション㯠\-n ã‚ªãƒ—ションã®åŠ¹æžœã‚‚å«ã‚“ã§ã„ã¾ã™ (下記å‚ç…§)。
+オプション 'readonly' ã¯ ":set noro" ã§ã‚ªãƒ•ã«ã§ãã¾ã™ã€‚
+詳ã—ã㯠":help 'readonly'" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.TP
+\-r
+スワップファイルã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚リカãƒãƒªã«é–¢ã™ã‚‹æƒ…報も表示ã•ã‚Œã¾ã™ã€‚
+.TP
+\-r {file}
+リカãƒãƒªãƒ¢ãƒ¼ãƒ‰ã€‚
+スワップファイルを使ã£ã¦ã€ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ãŸç·¨é›†ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’復活ã•ã›ã¾ã™ã€‚
+スワップファイルã¯ã€ãƒ•ã‚¡ã‚¤ãƒ«åã« ".swp" ã‚’加ãˆãŸåå‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™ã€‚
+詳ã—ã㯠":help recovery" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.TP
+\-s
+サイレントモード。"ex" ã¨ã„ã†åå‰ã§èµ·å‹•ã™ã‚‹ã‹ã€"\-e" ã‚ªãƒ—ションã®å¾Œã§
+"\-s" ã‚ªãƒ—ションãŒæŒ‡å®šã•ã‚ŒãŸå ´åˆã®ã¿ã€‚
+.TP
+\-s {scriptin}
+{scriptin} ã‚’スクリプトファイルã¨ã—ã¦èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚
+ファイル中ã®æ–‡å­—列ã¯ã€æ‰‹ã§å…¥åŠ›ã—ãŸã¨ãã¨åŒã˜ã‚ˆã†ã«å‡¦ç†ã•ã‚Œã¾ã™ã€‚
+ã“れ㯠":source! {scriptin}" ã¨åŒã˜å‹•ä½œã§ã™ã€‚
+エディタãŒçµ‚了ã™ã‚‹å‰ã«ãƒ•ã‚¡ã‚¤ãƒ«ã®çµ‚ã‚ã‚Šã¾ã§èª­ã¿è¾¼ã‚“ã å ´åˆã€
+ãれ以é™ã¯ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‹ã‚‰å…¥åŠ›ã‚’読ã¿è¾¼ã¿ã¾ã™ã€‚
+.TP
+\-T {terminal}
+端末ã®åå‰ã‚’指定ã—ã¾ã™ã€‚
+端末ãŒè‡ªå‹•çš„ã«èªè­˜ã•ã‚Œãªã„å ´åˆã«ä½¿ã£ã¦ãã ã•ã„。
+Vim ãŒçµ„ã¿è¾¼ã¿ã§ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹åå‰ã‹ã€
+termcap ã¾ãŸã¯ terminfo ãƒ•ã‚¡ã‚¤ãƒ«ã§å®šç¾©ã•ã‚Œã¦ã„ã‚‹åå‰ã‚’指定ã—ã¦ãã ã•ã„。
+.TP
+\-u {vimrc}
+{vimrc} ãƒ•ã‚¡ã‚¤ãƒ«ã‚’使ã£ã¦åˆæœŸåŒ–ã—ã¾ã™ã€‚
+ä»–ã®åˆæœŸåŒ–処ç†ã¯ã‚¹ã‚­ãƒƒãƒ—ã•ã‚Œã¾ã™ã€‚
+特殊ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã™ã‚‹å ´åˆãªã©ã«ä½¿ã£ã¦ãã ã•ã„。
+ã™ã¹ã¦ã®åˆæœŸåŒ–をスキップã™ã‚‹ã«ã¯ "NONE" ã‚’指定ã—ã¦ãã ã•ã„。
+詳ã—ã㯠":help initialization" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.TP
+\-U {gvimrc}
+{gvimrc} ãƒ•ã‚¡ã‚¤ãƒ«ã‚’使ã£ã¦ GUI ã‚’åˆæœŸåŒ–ã—ã¾ã™ã€‚
+ä»–ã® GUI ã®åˆæœŸåŒ–ã¯ã‚¹ã‚­ãƒƒãƒ—ã•ã‚Œã¾ã™ã€‚
+ã™ã¹ã¦ã® GUI ã®åˆæœŸåŒ–をスキップã™ã‚‹ã«ã¯ "NONE" ã‚’指定ã—ã¦ãã ã•ã„。
+詳ã—ã㯠":help gui\-init" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.TP
+\-V[N]
+冗長モード。スクリプトファイルを実行ã—ãŸã‚Š viminfo ãƒ•ã‚¡ã‚¤ãƒ«ã‚’読ã¿æ›¸ãã™ã‚‹ãŸ
+ã³ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¾ã™ã€‚N ã«æŒ‡å®šã—ãŸæ•°å€¤ãŒ 'verbose' ã«è¨­å®šã•ã‚Œã¾ã™ã€‚
+çœç•¥ã—ãŸå ´åˆã¯ 10 ã«ãªã‚Šã¾ã™ã€‚
+.TP
+\-v
+Vi ãƒ¢ãƒ¼ãƒ‰ã§èµ·å‹•ã—ã¾ã™ã€‚
+実行ファイルã®åå‰ãŒ "vi" ã®å ´åˆã¨åŒã˜ã§ã™ã€‚
+実行ファイルã®åå‰ãŒ "ex" ã®å ´åˆã ã‘効果ãŒã‚ã‚Šã¾ã™ã€‚
+.TP
+\-w {scriptout}
+入力ã—ãŸæ–‡å­—ã‚’ {scriptout} ã«è¨˜éŒ²ã—ã¾ã™ã€‚
+"vim \-s" ã‚„ "source!" ã§å®Ÿè¡Œã™ã‚‹ãŸã‚ã®ã‚¹ã‚¯ãƒªãƒ—トファイルを作æˆã™ã‚‹ã®ã«ä¾¿åˆ©
+ã§ã™ã€‚
+{scriptout} ãƒ•ã‚¡ã‚¤ãƒ«ãŒã™ã§ã«å­˜åœ¨ã—ãŸå ´åˆã¯è¿½åŠ ä¿å­˜ã•ã‚Œã¾ã™ã€‚
+.TP
+\-W {scriptout}
+\-w ã¨åŒã˜ã§ã™ãŒã€ãƒ•ã‚¡ã‚¤ãƒ«ãŒã™ã§ã«å­˜åœ¨ã—ãŸå ´åˆã¯ä¸Šæ›¸ãã•ã‚Œã¾ã™ã€‚
+.TP
+\-x
+ファイルを暗å·åŒ–ã—ã¦æ›¸ãè¾¼ã¿ã¾ã™ã€‚æš—å·åŒ–キーã®å…¥åŠ›ãƒ—ロンプトãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+.TP
+\-X
+X ã‚µãƒ¼ãƒãƒ¼ã¨é€šä¿¡ã—ã¾ã›ã‚“。端末ã§ã®èµ·å‹•æ™‚間を短ãã§ãã¾ã™ã€‚
+ã—ã‹ã—ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚¿ã‚¤ãƒˆãƒ«ã®å¤‰æ›´ã‚„クリップボードã¯ä½¿ãˆãªããªã‚Šã¾ã™ã€‚
+.TP
+\-y
+簡易モードã§èµ·å‹•ã—ã¾ã™ã€‚
+実行ファイルã®åå‰ãŒ "evim" ã‚„ "eview" ã®å ´åˆã¨åŒã˜ã§ã™ã€‚
+.B Vim
+ã®å‹•ä½œãŒãƒ¢ãƒ¼ãƒ‰ãƒ¬ã‚¹ã‚¨ãƒ‡ã‚£ã‚¿ (click-and-type editor) ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
+.TP
+\-Z
+制é™ãƒ¢ãƒ¼ãƒ‰ã€‚
+実行ファイルã®åå‰ãŒ "r" ã§å§‹ã¾ã£ã¦ã„ã‚‹å ´åˆã¨åŒã˜ã§ã™ã€‚
+.TP
+\-\-
+オプション指定ã®æœ«å°¾ã‚’示ã™è¨˜å·ã§ã™ã€‚
+ã“れ以é™ã®å¼•æ•°ã¯ã™ã¹ã¦ãƒ•ã‚¡ã‚¤ãƒ«åã¨ã—ã¦æ‰±ã‚ã‚Œã¾ã™ã€‚
+ファイルå㌠'\-' ã§å§‹ã¾ã£ã¦ã„るファイルを開ãã¨ãã«ä½¿ã£ã¦ãã ã•ã„。
+.TP
+\-\-echo\-wid
+GTK GUI ã®ã¿: Window ID ã‚’標準出力ã«å‡ºåŠ›ã—ã¾ã™ã€‚
+.TP
+\-\-help
+ヘルプを表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚"\-h" ã¨åŒã˜ã§ã™ã€‚
+.TP
+\-\-literal
+引数ã®ãƒ•ã‚¡ã‚¤ãƒ«åをリテラル文字列ã¨ã—ã¦æ‰±ã„ã¾ã™ã€‚ワイルドカードを展開ã—ã¾ã›
+ん。Unix ã®ã‚ˆã†ã«ã€ã‚·ã‚§ãƒ«ãŒãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã‚’展開ã™ã‚‹å ´åˆã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。
+.TP
+\-\-noplugin
+プラグインをロードã—ã¾ã›ã‚“。\-u NONE ã¯ã“ã®å‹•ä½œã‚’å«ã‚“ã§ã„ã¾ã™ã€‚
+.TP
+\-\-remote
+Vim ã‚µãƒ¼ãƒãƒ¼ã¨é€šä¿¡ã—ã€å¼•æ•°ã«æŒ‡å®šã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’ Vim ã‚µãƒ¼ãƒãƒ¼ã§é–‹ãã¾ã™ã€‚
+サーãƒãƒ¼ãŒå­˜åœ¨ã—ãªã„å ´åˆã¯ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã•ã‚Œã€èµ·å‹•ä¸­ã® Vim ã§ãƒ•ã‚¡
+イルãŒé–‹ã‹ã‚Œã¾ã™ã€‚
+.TP
+\-\-remote\-expr {expr}
+Vim ã‚µãƒ¼ãƒãƒ¼ã¨é€šä¿¡ã—ã€{expr} ã«ä¸Žãˆã‚‰ã‚ŒãŸå¼ã‚’ Vim ã‚µãƒ¼ãƒãƒ¼ã§å®Ÿè¡Œã—ã€çµæžœã‚’標
+準出力ã«å‡ºåŠ›ã—ã¾ã™ã€‚
+.TP
+\-\-remote\-send {keys}
+Vim ã‚µãƒ¼ãƒãƒ¼ã¨é€šä¿¡ã—ã€{keys} ã«ä¸Žãˆã‚‰ã‚ŒãŸã‚­ãƒ¼ã‚’ Vim ã‚µãƒ¼ãƒãƒ¼ã«é€ä¿¡ã—ã¾ã™ã€‚
+.TP
+\-\-remote\-silent
+\-\-remote ã¨åŒã˜ã§ã™ãŒã€ã‚µãƒ¼ãƒãƒ¼ãŒå­˜åœ¨ã—ãªãã¦ã‚‚エラーメッセージを表示ã—ã¾
+ã›ã‚“。
+.TP
+\-\-remote\-wait
+\-\-remote ã¨åŒã˜ã§ã™ãŒã€ãƒ•ã‚¡ã‚¤ãƒ«ãŒé–‹ã‹ã‚Œã‚‹ã®ã‚’確èªã§ãã‚‹ã¾ã§å¾…æ©Ÿã—ã¾ã™ã€‚
+.TP
+\-\-remote\-wait\-silent
+\-\-remote\-wait ã¨åŒã˜ã§ã™ãŒã€ã‚µãƒ¼ãƒãƒ¼ãŒå­˜åœ¨ã—ãªãã¦ã‚‚エラーメッセージを表
+示ã—ã¾ã›ã‚“。
+.TP
+\-\-serverlist
+Vim ã‚µãƒ¼ãƒãƒ¼ã®ä¸€è¦§ã‚’表示ã—ã¾ã™ã€‚
+.TP
+\-\-servername {name}
+サーãƒãƒ¼ã®åå‰ã‚’ {name} ã«è¨­å®šã—ã¾ã™ã€‚\-\-remote å¼•æ•°ã‚’指定ã—ãªã‹ã£ãŸå ´åˆ
+ã¯ã€èµ·å‹•ä¸­ã® Vim ã®åå‰ã¨ã—ã¦ä½¿ã‚れるã®ã§ã€å¾Œã‹ã‚‰ãã®åå‰ã‚’使ã£ã¦ã‚µãƒ¼ãƒãƒ¼é€š
+ä¿¡ã§ãã¾ã™ã€‚
+.TP
+\-\-socketid {id}
+GTK GUI ã®ã¿: GtkPlug ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’使ã£ã¦ gvim ã‚’別ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ä¸­ã§å®Ÿè¡Œã—ã¾
+ã™ã€‚
+.TP
+\-\-version
+ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報を表示ã—ã¦çµ‚了ã—ã¾ã™ã€‚
+.SH ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ˜ãƒ«ãƒ—
+ヘルプを開ãã«ã¯ã€
+.B Vim
+ã®ä¸­ã§ ":help" ã¨å…¥åŠ›ã—ã¦ãã ã•ã„。
+":help èª¿ã¹ãŸã„é …ç›®" ã¨å…¥åŠ›ã™ã‚Œã°ã€æŒ‡å®šã—ãŸé …ç›®ã®ãƒ˜ãƒ«ãƒ—ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+例: "ZZ" ã‚³ãƒžãƒ³ãƒ‰ã®ãƒ˜ãƒ«ãƒ—を表示ã™ã‚‹ã«ã¯ ":help ZZ" ã¨å…¥åŠ›ã—ã¾ã™ã€‚
+<Tab> ã‚„ CTRL\-D ã‚’使ã£ã¦è£œå®Œã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™
+(":help cmdline\-completion" å‚ç…§)。
+ヘルプã«ã¯ã€é …ç›®ã‹ã‚‰é …ç›®ã¸ã‚¸ãƒ£ãƒ³ãƒ—ã§ãるよã†ã«ã‚¿ã‚°ãŒåŸ‹ã‚è¾¼ã¾ã‚Œã¦ã„ã¾ã™
+(ãƒã‚¤ãƒ‘ーリンクã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚":help" å‚ç…§)。
+ã™ã¹ã¦ã®ãƒ˜ãƒ«ãƒ—ファイルã¯ã“ã®æ–¹æ³•ã§é–‹ãã“ã¨ãŒã§ãã¾ã™ã€‚
+例: ":help syntax.txt"。
+.SH ãƒ•ã‚¡ã‚¤ãƒ«
+.TP 15
+/usr/local/lib/vim/doc/*.txt
+.B Vim
+ã®ãƒ˜ãƒ«ãƒ—ファイル。
+ファイルã®ä¸€è¦§ã¯ ":help doc\-file\-list" ã«è¨˜è¼‰ã•ã‚Œã¦ã„ã¾ã™ã€‚
+.TP
+/usr/local/lib/vim/doc/tags
+ヘルプを検索ã™ã‚‹ãŸã‚ã® tags ãƒ•ã‚¡ã‚¤ãƒ«ã€‚
+.TP
+/usr/local/lib/vim/syntax/syntax.vim
+システムã®æ§‹æ–‡å®šç¾©åˆæœŸåŒ–ファイル。
+.TP
+/usr/local/lib/vim/syntax/*.vim
+ã„ã‚ã„ã‚ãªè¨€èªžç”¨ã®æ§‹æ–‡å®šç¾©ãƒ•ã‚¡ã‚¤ãƒ«ã€‚
+.TP
+/usr/local/lib/vim/vimrc
+システムã®
+.B Vim
+åˆæœŸåŒ–ファイル。
+.TP
+~/.vimrc
+ユーザーã®
+.B Vim
+åˆæœŸåŒ–ファイル。
+.TP
+/usr/local/lib/vim/gvimrc
+システム㮠gvim åˆæœŸåŒ–ファイル。
+.TP
+~/.gvimrc
+ユーザー㮠gvim åˆæœŸåŒ–ファイル。
+.TP
+/usr/local/lib/vim/optwin.vim
+":options" ã‚³ãƒžãƒ³ãƒ‰ã§ä½¿ã‚れるファイル。オプションを表示ã—ãŸã‚Šè¨­å®šã—ãŸã‚Šã§ã
+ã¾ã™ã€‚
+.TP
+/usr/local/lib/vim/menu.vim
+システムã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼åˆæœŸåŒ–ファイル。gvim ã§ä½¿ã„ã¾ã™ã€‚
+.TP
+/usr/local/lib/vim/bugreport.vim
+ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã‚’生æˆã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—ト。":help bugs" å‚照。
+.TP
+/usr/local/lib/vim/filetype.vim
+ファイルåã‹ã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—を判定ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—ト。":help 'filetype'" å‚照。
+.TP
+/usr/local/lib/vim/scripts.vim
+ファイルã®å†…容ã‹ã‚‰ãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—を判定ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—ト。":help 'filetype'" å‚照。
+.TP
+/usr/local/lib/vim/print/*.ps
+PostScript å°åˆ·ã«ä½¿ã‚れるファイル。
+.PP
+最新ã®æƒ…報㯠VIM ã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã‚’å‚ç…§ã—ã¦ãã ã•ã„:
+.br
+<URL:http://www.vim.org/>
+.SH é–¢é€£é …ç›®
+vimtutor(1)
+.SH è‘—者
+.B Vim
+ã®ã»ã¨ã‚“ã©ã®æ©Ÿèƒ½ã¯ Bram Moolenaar ãŒé–‹ç™ºã—ã€å¤šãã®äººãŒå”力ã—ã¾ã—ãŸã€‚
+":help credits" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.br
+.B Vim
+㯠Stevie ã‚’基ã«ã—ã¦ã„ã¾ã™ã€‚Stevie ã¯ Tim Thompsonã€Tony Andrewsã€
+G.R. (Fred) Walter ã«ã‚ˆã£ã¦é–‹ç™ºã•ã‚Œã¾ã—ãŸã€‚
+ãŸã ã—ã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ã‚³ãƒ¼ãƒ‰ã¯ã‚‚ã†ã»ã¨ã‚“ã©æ®‹ã£ã¦ã„ã¾ã›ã‚“。
+.SH ãƒã‚°
+既知ã®ãƒã‚°ã¯ ":help todo" ã«è¨˜è¼‰ã•ã‚Œã¦ã„ã¾ã™ã€‚
+.PP
+Vi ã®å‹•ä½œã‚’忠実ã«å†ç¾ã—ãŸçµæžœã€å¤šãã®äººãŒãƒã‚°ã ã¨æ€ã†ã‚ˆã†ãªæ©Ÿèƒ½ã‚‚ã„ãã¤ã‹ã‚
+ã‚Šã¾ã™ã€‚
+"ã“ã®å‹•ä½œã¯ Vi ã¨é•ã†" ã‹ã‚‰ãƒã‚°ã ã¨æ€ã£ãŸå ´åˆã¯ã€vi_diff.txtを確èªã—ã¦ã¿ã¦ã
+ã ã•ã„ (ファイルを開ãã‹ã€Vim ã‹ã‚‰ ":help vi_diff.txt" ã¨å…¥åŠ›)。
+オプション㮠'compatible' ã¨ 'cpoptions' ã‚‚確èªã—ã¦ãã ã•ã„。
index d51f607..9066b03 100755 (executable)
@@ -214,7 +214,7 @@ EOF
 }
 
 # main
-usage() if $#ARGV < 2;
+usage() if $#ARGV < 1;
 
 print "Processing tags...\n";
 readTagFile( $ARGV[ 0 ] );
index 4948126..67a64e3 100644 (file)
@@ -14,7 +14,7 @@ d
 .B Vim
 avec deux (ou trois ou quatre) fichiers.
 Chaque fichier est ouvert dans sa propre fenêtre.
-Les différences entres ces fichiers sont mises en surbrillance.
+Les différences entre ces fichiers sont mises en surbrillance.
 C'est un outil très pratique pour visualiser et reporter les
 changements entre deux versions d'un même fichier.
 .PP
@@ -51,3 +51,4 @@ Voir ":help credits" dans
 .SH TRADUCTION
 Cette page de manuel a Ã©té traduite par David Blanchet
 <david.blanchet@free.fr> 2005-03-12.
+Mise Ã  jour 2012-05-06, Dominique Pellé <dominique.pelle@gmail.com>
index d143588..3b44a3d 100644 (file)
@@ -14,7 +14,7 @@ démarre
 .B Vim
 avec deux (ou trois ou quatre) fichiers.
 Chaque fichier est ouvert dans sa propre fenêtre.
-Les différences entres ces fichiers sont mises en surbrillance.
+Les différences entre ces fichiers sont mises en surbrillance.
 C'est un outil très pratique pour visualiser et reporter les
 changements entre deux versions d'un même fichier.
 .PP
@@ -51,3 +51,4 @@ Voir ":help credits" dans
 .SH TRADUCTION
 Cette page de manuel a Ã©té traduite par David Blanchet
 <david.blanchet@free.fr> 2005-03-12.
+Mise Ã  jour 2012-05-06, Dominique Pellé <dominique.pelle@gmail.com>
diff --git a/runtime/doc/vimdiff-ja.UTF-8.1 b/runtime/doc/vimdiff-ja.UTF-8.1
new file mode 100644 (file)
index 0000000..56fadfe
--- /dev/null
@@ -0,0 +1,44 @@
+.TH VIMDIFF 1 "2001 March 30"
+.SH åå‰
+vimdiff \- äºŒã¤ã‹ä¸‰ã¤ã‹å››ã¤ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ Vim ã§é–‹ã„ã¦ã€ãã®å·®åˆ†ã‚’表示ã™ã‚‹
+.SH æ›¸å¼
+.br
+.B vimdiff
+[options] file1 file2 [file3 [file4]]
+.PP
+.B gvimdiff
+.SH èª¬æ˜Ž
+.B Vimdiff
+ã¯ã€äºŒã¤ (ã‹ä¸‰ã¤ã‹å››ã¤) ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’
+.B Vim
+ã§é–‹ãã¾ã™ã€‚
+ファイルã¯å€‹åˆ¥ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã§é–‹ã‹ã‚Œã€å·®åˆ†ãŒå¼·èª¿è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+åŒã˜ãƒ•ã‚¡ã‚¤ãƒ«ã®åˆ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³é–“ã§ã€å¤‰æ›´ã‚’確èªã—ãŸã‚Šã€å¤‰æ›´ã‚’移動ã—ãŸã‚Šã™ã‚‹ã®ãŒ
+ç°¡å˜ã«ãªã‚Šã¾ã™ã€‚
+.PP
+Vim ã«ã¤ã„ã¦ã®è©³ç´°ã¯ vim(1) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.PP
+.B gvimdiff
+ã¨ã„ã†åå‰ã§èµ·å‹•ã•ã‚ŒãŸå ´åˆã¯ GUI ã§èµ·å‹•ã—ã¾ã™ã€‚
+.PP
+差分を強調表示ã™ã‚‹ãŸã‚ã«ã€
+ãã‚Œãžã‚Œã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã® 'diff' ã‚ªãƒ—ションãŒã‚ªãƒ³ã«è¨­å®šã•ã‚Œã¾ã™ã€‚
+.br
+テキストを見やã™ãã™ã‚‹ãŸã‚ã«ã€ã‚ªãƒ—ション㮠'wrap' ã¨ 'scrollbind' ã‚‚オンã«è¨­
+定ã•ã‚Œã¾ã™ã€‚
+.br
+ 'foldmethod' ã‚ªãƒ—ション㯠"diff" ã«è¨­å®šã•ã‚Œã€å¤‰æ›´ã•ã‚Œã¦ã„ãªã„è¡Œã¯æŠ˜ã‚Šç•³ã¾ã‚Œ
+ã¾ã™ã€‚
+折り畳ã¿ã®ç¢ºèªã¨é–‹é–‰ãŒç°¡å˜ã«ã§ãるよã†ã«ã€'foldcolumn' ã¯ 2 ã«è¨­å®šã•ã‚Œã¾ã™ã€‚
+.SH ã‚ªãƒ—ション
+行を並ã¹ã¦è¡¨ç¤ºã™ã‚‹ãŸã‚ã«ã€"\-O" å¼•æ•°ã‚’使ã£ãŸã¨ãã®ã‚ˆã†ã«ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯åž‚直分
+割ã•ã‚Œã¾ã™ã€‚
+ウィンドウを水平分割ã—ãŸã„å ´åˆã¯ "\-o" å¼•æ•°ã‚’使ã£ã¦ãã ã•ã„。
+.PP
+ãã®ä»–ã®å¼•æ•°ã«ã¤ã„ã¦ã¯ vim(1) ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+.SH é–¢é€£é …ç›®
+vim(1)
+.SH è‘—者
+.B Vim
+ã®ã»ã¨ã‚“ã©ã®æ©Ÿèƒ½ã¯ Bram Moolenaar ãŒé–‹ç™ºã—ã€å¤šãã®äººãŒå”力ã—ã¾ã—ãŸã€‚
+":help credits" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
index 8367190..06e03fb 100644 (file)
@@ -3,7 +3,7 @@
 vimtutor \- tutoriel Vim
 .SH SYNOPSIS
 .br
-.B vimtutor [-g] [langue]
+.B vimtutor [\-g] [langue]
 .SH DESCRIPTION
 .B Vimtutor
 lance le tutoriel
@@ -17,7 +17,7 @@ est utile pour les personnes souhaitant apprendre leurs premi
 .B Vim
 \.
 .PP
-L'argument optionnel -g lance vimtutor avec gvim plutôt qu'avec vim, si l'IHM
+L'argument optionnel \-g lance vimtutor avec gvim plutôt qu'avec vim, si l'IHM
 graphique de vim est disponible, ou le lance avec vim si gvim n'est pas
 disponible.
 .PP
@@ -57,3 +57,4 @@ vim(1)
 .SH TRADUCTION
 Cette page de manuel a Ã©té traduite par David Blanchet
 <david.blanchet@free.fr> 2004-12-27.
+Mise Ã  jour 2012-05-06, Dominique Pellé <dominique.pelle@gmail.com>
index 9bf474d..f47f840 100644 (file)
@@ -3,7 +3,7 @@
 vimtutor \- tutoriel Vim
 .SH SYNOPSIS
 .br
-.B vimtutor [-g] [langue]
+.B vimtutor [\-g] [langue]
 .SH DESCRIPTION
 .B Vimtutor
 lance le tutoriel
@@ -17,7 +17,7 @@ est utile pour les personnes souhaitant apprendre leurs premières commandes
 .B Vim
 \.
 .PP
-L'argument optionnel -g lance vimtutor avec gvim plutôt qu'avec vim, si l'IHM
+L'argument optionnel \-g lance vimtutor avec gvim plutôt qu'avec vim, si l'IHM
 graphique de vim est disponible, ou le lance avec vim si gvim n'est pas
 disponible.
 .PP
@@ -57,3 +57,4 @@ vim(1)
 .SH TRADUCTION
 Cette page de manuel a Ã©té traduite par David Blanchet
 <david.blanchet@free.fr> 2004-12-27.
+Mise Ã  jour 2012-05-06, Dominique Pellé <dominique.pelle@gmail.com>
diff --git a/runtime/doc/vimtutor-ja.UTF-8.1 b/runtime/doc/vimtutor-ja.UTF-8.1
new file mode 100644 (file)
index 0000000..29b9b48
--- /dev/null
@@ -0,0 +1,45 @@
+.TH VIMTUTOR 1 "2001 April 2"
+.SH åå‰
+vimtutor \- Vim ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«
+.SH æ›¸å¼
+.br
+.B vimtutor [\-g] [language]
+.SH èª¬æ˜Ž
+.B Vim
+ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’èµ·å‹•ã—ã¾ã™ã€‚
+演習ファイルã®ã‚³ãƒ”ーを使ã£ã¦å®Ÿæ–½ã™ã‚‹ã®ã§ã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã®æ¼”習ファイルを壊ã—ã¦ã—
+ã¾ã†å¿ƒé…ã¯ã‚ã‚Šã¾ã›ã‚“。
+.PP
+.B Vim
+ã‚’åˆã‚ã¦å­¦ã¶äººå‘ã‘ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã§ã™ã€‚
+.PP
+引数㫠\-g ã‚’指定ã™ã‚‹ã¨ GUI ç‰ˆã® vim ãŒåˆ©ç”¨å¯èƒ½ã§ã‚れ㰠vim ã§ã¯ãªã gvim ã‚’
+使ã£ã¦ vimtutor ãŒé–‹å§‹ã—ã¾ã™ã€‚gvim ãŒè¦‹ã¤ã‹ã‚‰ãªã„ã¨ã㯠Vim ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚
+.PP
+[language] å¼•æ•°ã¯ "ja" ã‚„ "es" ãªã©ã®äºŒæ–‡å­—ã®è¨€èªžåã§ã™ã€‚
+[language] å¼•æ•°ã‚’çœç•¥ã—ãŸå ´åˆã¯ãƒ­ã‚±ãƒ¼ãƒ«ã®è¨€èªžãŒä½¿ã‚ã‚Œã¾ã™ã€‚
+翻訳ã•ã‚ŒãŸæ¼”習ファイルãŒã‚ã‚‹å ´åˆã¯ã€ãã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒä½¿ã‚ã‚Œã¾ã™ã€‚
+ãªã„å ´åˆã¯è‹±èªžã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒä½¿ã‚ã‚Œã¾ã™ã€‚
+.PP
+.B Vim
+㯠Vi äº’æ›ãƒ¢ãƒ¼ãƒ‰ã§èµ·å‹•ã•ã‚Œã¾ã™ã€‚
+.SH ãƒ•ã‚¡ã‚¤ãƒ«
+.TP 15
+/usr/local/lib/vim/tutor/tutor[.language]
+.B Vimtutor
+ã®æ¼”習ファイル。
+.TP 15
+/usr/local/lib/vim/tutor/tutor.vim
+演習ファイルをコピーã™ã‚‹ãŸã‚ã® Vim ã‚¹ã‚¯ãƒªãƒ—ト。
+.SH è‘—者
+.B Vimtutor
+ã¯ã€Colorado State University ã® Charles Smith ã®ã‚¢ã‚¤ãƒ‡ã‚¢ã‚’基ã«ã€
+Colorado School of Mines ã® Michael C.  Pierce ã¨ Robert K. Ware ã®ä¸¡å
+ã«ã‚ˆã£ã¦ Vi å‘ã‘ã«ä½œæˆã•ã‚ŒãŸã‚‚ã®ã‚’基ã«ã—ã¦ã„ã¾ã™ã€‚
+E-mail: bware@mines.colorado.edu.
+.br
+.B Vim
+ã«åˆã‚ã›ã¦ Bram Moolenaar ãŒå¤‰æ›´ã‚’加ãˆã¾ã—ãŸã€‚
+翻訳者ã®åå‰ã¯æ¼”習ファイルをå‚ç…§ã—ã¦ãã ã•ã„。
+.SH é–¢é€£é …ç›®
+vim(1)
index 8c50a29..cabf5f7 100644 (file)
@@ -1,4 +1,4 @@
-*visual.txt*    For Vim version 7.3.  Last change: 2010 Feb 17
+*visual.txt*    For Vim version 7.4.  Last change: 2012 Aug 15
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -61,15 +61,27 @@ position.
 2. Starting and stopping Visual mode                   *visual-start*
 
                                                *v* *characterwise-visual*
-v                      start Visual mode per character.
+[count]v               Start Visual mode per character.
+                       With [count] select the same number of characters or
+                       lines as used for the last Visual operation, but at
+                       the current cursor position, multiplied by [count].
+                       When the previous Visual operation was on a block both
+                       the width and height of the block are multiplied by
+                       [count].
+                       When there was no previous Visual operation [count]
+                       characters are selected.  This is like moving the
+                       cursor right N * [count] characters.  One less when
+                       'selection' is not "exclusive".
 
                                                *V* *linewise-visual*
-V                      start Visual mode linewise.
+[count]V               Start Visual mode linewise.
+                       With [count] select that many lines.
 
                                                *CTRL-V* *blockwise-visual*
-CTRL-V                 start Visual mode blockwise.  Note: Under Windows
+[count]CTRL-V          Start Visual mode blockwise.  Note: Under Windows
                        CTRL-V could be mapped to paste text, it doesn't work
                        to start Visual mode then, see |CTRL-V-alternative|.
+                       [count] is used as with `v` above.
 
 If you use <Esc>, click the left mouse button or use any command that
 does a jump to another buffer while in Visual mode, the highlighting stops
@@ -94,6 +106,18 @@ gv                  Start Visual mode with the same area as the previous
                        After using "p" or "P" in Visual mode the text that
                        was put will be selected.
 
+                                                               *gn* *v_gn*
+gn                     Search forward for the last used search pattern, like
+                       with `n`, and start Visual mode to select the match.
+                       If the cursor is on the match, visually selects it.
+                       If an operator is pending, operates on the match.
+                       E.g., "dgn" deletes the text of the next match.
+                       If Visual mode is active, extends the selection
+                       until the end of the next match.
+
+                                                               *gN* *v_gN*
+gN                     Like |gn| but searches backward, like with `N`.
+
                                                        *<LeftMouse>*
 <LeftMouse>            Set the current cursor position.  If Visual mode is
                        active it is stopped.  Only when 'mouse' option is
@@ -269,7 +293,10 @@ with {motion}, which is only ONE movement command.
 Another way to operate on the Visual area is using the |/\%V| item in a
 pattern.  For example, to replace all '(' in the Visual area with '#': >
 
-       :%s/\%V(/X/g
+       :'<,'>s/\%V(/#/g
+
+Note that the "'<,'>" will appear automatically when you press ":" in Visual
+mode.
 
 ==============================================================================
 5. Blockwise operators                                 *blockwise-operators*
index ccb9801..d1561a0 100644 (file)
@@ -1,4 +1,4 @@
-*windows.txt*   For Vim version 7.3.  Last change: 2010 Aug 15
+*windows.txt*   For Vim version 7.4.  Last change: 2012 Nov 15
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -174,7 +174,8 @@ CTRL-W CTRL_N                                               *CTRL-W_CTRL-N*
                2. WinEnter for the new window
                3. BufLeave for the current buffer
                4. BufEnter for the new buffer
-               This behaves like a ":split" first, and then a ":e" command.
+               This behaves like a ":split" first, and then an ":enew"
+               command.
 
 :[N]vne[w] [++opt] [+cmd] [file]                       *:vne* *:vnew*
                Like |:new|, but split vertically.  If 'equalalways' is set
@@ -183,7 +184,8 @@ CTRL-W CTRL_N                                               *CTRL-W_CTRL-N*
 
 :[N]new [++opt] [+cmd] {file}
 :[N]sp[lit] [++opt] [+cmd] {file}                      *:split_f*
-               Create a new window and start editing file {file} in it.
+               Create a new window and start editing file {file} in it.  This
+               behaves like a ":split" first, and then an ":e" command.
                If [+cmd] is given, execute the command when the file has been
                loaded |+cmd|.
                Also see |++opt|.
@@ -246,7 +248,7 @@ window will appear.
 
 These command modifiers can be combined to make a vertically split window
 occupy the full height.  Example: >
-       :vertical topleft edit tags
+       :vertical topleft split tags
 Opens a vertically split, full-height window on the "tags" file at the far
 left of the Vim window.
 
@@ -937,9 +939,9 @@ list of buffers. |unlisted-buffer|
 :buffers[!]                                    *:buffers* *:ls*
 :ls[!]         Show all buffers.  Example:
 
-                       1 #h  "/test/text"              line 1 ~
-                       2u    "asdf"                    line 0 ~
-                       3 %a+ "version.c"               line 1 ~
+                       1 #h   "/test/text"             line 1 ~
+                       2u     "asdf"                   line 0 ~
+                       3 %a + "version.c"              line 1 ~
 
                When the [!] is included the list will show unlisted buffers
                (the term "unlisted" is a bit confusing then...).
index 7fde55b..5514f9e 100644 (file)
@@ -1,4 +1,4 @@
-*workshop.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
+*workshop.txt*  For Vim version 7.4.  Last change: 2013 Jul 06
 
 
                  VIM REFERENCE MANUAL    by Gordon Prieur
index 0b25da4..be78085 100644 (file)
@@ -159,7 +159,7 @@ fichier n'est pas adressable, seuls les vides sont autoris
 comblés par des octets nuls.
 .PP
 .I xxd \-r
-ne génère aucune erreur lors de l'analyse. Le problème sont passés
+ne génère aucune erreur lors de l'analyse. Les problèmes sont passés
 silencieusement.
 .PP
 Lors de l'édition de la représentation hexadécimale, veuillez noter que
@@ -307,7 +307,7 @@ Convertir le fichier de l'exemple pr
 000fffc: 0000 0000 40                   ....A
 .PP
 Créer un fichier d'un octet, contenant seulement le caractère 'A'.
-Les nombres après '\-r \-s' s'ajoutent au numéros de lignes trouvées dans le
+Le nombre après '\-r \-s' s'ajoute aux numéros de lignes trouvées dans le
 fichier ; les octets initiaux sont supprimés.
 .br
 \fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> fichier\fR
@@ -393,3 +393,4 @@ Modifications mineures par Bram Moolenaar.
 .SH TRADUCTION
 Cette page de manuel a Ã©té traduite par David Blanchet
 <david.blanchet@free.fr> 2004-12-24.
+Mise Ã  jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
index 9fc47d3..7956b3b 100644 (file)
@@ -159,7 +159,7 @@ fichier n'est pas adressable, seuls les vides sont autorisés, et ils seront
 comblés par des octets nuls.
 .PP
 .I xxd \-r
-ne génère aucune erreur lors de l'analyse. Le problème sont passés
+ne génère aucune erreur lors de l'analyse. Les problèmes sont passés
 silencieusement.
 .PP
 Lors de l'édition de la représentation hexadécimale, veuillez noter que
@@ -307,7 +307,7 @@ Convertir le fichier de l'exemple précédent avec la fonctionnalité "autoskip"
 000fffc: 0000 0000 40                   ....A
 .PP
 Créer un fichier d'un octet, contenant seulement le caractère 'A'.
-Les nombres après '\-r \-s' s'ajoutent au numéros de lignes trouvées dans le
+Le nombre après '\-r \-s' s'ajoute aux numéros de lignes trouvées dans le
 fichier ; les octets initiaux sont supprimés.
 .br
 \fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> fichier\fR
@@ -393,3 +393,4 @@ Modifications mineures par Bram Moolenaar.
 .SH TRADUCTION
 Cette page de manuel a Ã©té traduite par David Blanchet
 <david.blanchet@free.fr> 2004-12-24.
+Mise Ã  jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
diff --git a/runtime/doc/xxd-ja.UTF-8.1 b/runtime/doc/xxd-ja.UTF-8.1
new file mode 100644 (file)
index 0000000..8a8d54b
--- /dev/null
@@ -0,0 +1,366 @@
+.TH XXD 1 "August 1996" "Manual page for xxd"
+.\"
+.\" 21st May 1996
+.\" Man page author:
+.\"    Tony Nugent <tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
+.\"    Changes by Bram Moolenaar <Bram@vim.org>
+.SH åå‰
+.I xxd
+\- 16 é€²ãƒ€ãƒ³ãƒ—を作æˆã—ãŸã‚Šã€å…ƒã«æˆ»ã—ãŸã‚Šã€‚
+.SH æ›¸å¼
+.B xxd
+\-h[elp]
+.br
+.B xxd
+[options] [infile [outfile]]
+.br
+.B xxd
+\-r[evert] [options] [infile [outfile]]
+.SH èª¬æ˜Ž
+ファイルや標準入力ã‹ã‚‰ 16 é€²ãƒ€ãƒ³ãƒ—を作æˆã—ã¾ã™ã€‚
+16 é€²ãƒ€ãƒ³ãƒ—ã‹ã‚‰å…ƒã®ãƒã‚¤ãƒŠãƒªã«æˆ»ã™ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+.BR uuencode (1)
+ã‚„
+.BR uudecode (1)
+ã®ã‚ˆã†ã«ã€ãƒã‚¤ãƒŠãƒªãƒ‡ãƒ¼ã‚¿ã‚’ã€ãƒ¡ãƒ¼ãƒ«ã«è²¼ã‚Šä»˜ã‘å¯èƒ½ãª ASCII å½¢å¼ã«å¤‰æ›ã§ããŸ
+ã‚Šã€æ¨™æº–出力ã«å‡ºåŠ›ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+ã•ã‚‰ã«ã€ãƒã‚¤ãƒŠãƒªãƒ•ã‚¡ã‚¤ãƒ«ã«ãƒ‘ッãƒã‚’当ã¦ã‚‹ã¨ã„ã†ä½¿ã„方もã§ãã¾ã™ã€‚
+.SH ã‚ªãƒ—ション
+.I infile
+を指定ã—ãªã‹ã£ãŸå ´åˆã¯ã€æ¨™æº–入力ãŒèª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚
+.I infile
+ã«
+.RB \` \- '
+を指定ã—ãŸå ´åˆã‚‚ã€æ¨™æº–入力ã‹ã‚‰èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚
+.I outfile
+を指定ã—ãªã‹ã£ãŸ (ã¾ãŸã¯
+.RB \` \- '
+を指定ã—ãŸ) å ´åˆã¯ã€æ¨™æº–出力ã«å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚
+.PP
+引数ã®è§£é‡ˆå‡¦ç†ã¯é©å½“ãªã®ã§æ³¨æ„ã—ã¦ãã ã•ã„。パラメータをå–らãªã„引数ã¯
+最åˆã®ä¸€æ–‡å­—ã ã‘ãƒã‚§ãƒƒã‚¯ã•ã‚Œã¾ã™ã€‚
+引数ã®æ–‡å­—ã¨ãƒ‘ラメータã®é–“ã®ã‚¹ãƒšãƒ¼ã‚¹ã¯çœç•¥å¯èƒ½ã§ã™ã€‚
+パラメータ㯠10 é€²æ•°ã€16 é€²æ•°ã€8 é€²æ•°ã§æŒ‡å®šã§ãã¾ã™ã€‚
+.BR \-c8
+ã€
+.BR "\-c 8"
+ã€
+.B \-c 010
+ã€
+.B \-cols 8
+ã¯ã™ã¹ã¦åŒã˜æ„味ã§ã™ã€‚
+.PP
+.TP
+.IR \-a " | " \-autoskip
+オートスキップ: é€£ç¶šã—㟠nul è¡Œã‚’一ã¤ã® '*' ã§ç½®ãæ›ãˆã‚‹ã€‚
+.TP
+.IR \-b " | " \-bits
+ビット (2進数) ãƒ€ãƒ³ãƒ—。
+1 ã‚ªã‚¯ãƒ†ãƒƒãƒˆãŒ "1" ã¨ "0" ã® 8 æ–‡å­—ã§å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚
+å„è¡Œã®è¡Œé ­ã«ã¯ 16 é€²æ•°ã®è¡Œç•ªå·ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+行末ã«ã¯ ascii (ã¾ãŸã¯ ebcdic) ã§è¡¨ã—ãŸå ´åˆã®æ–‡å­—ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+ã“ã®ãƒ¢ãƒ¼ãƒ‰ã§ã¯ \-rã€\-pã€\-i ã¯æ©Ÿèƒ½ã—ã¾ã›ã‚“。
+.TP
+.IR "\-c cols " | " \-cols cols"
+一行
+.RI < cols >
+オクテットã§å‡ºåŠ›ã™ã‚‹ã€‚標準設定㯠16 (\-i: 12, \-ps: 30, \-b: 6)。最大 256。
+.TP
+.IR \-E " | " \-EBCDIC
+å³ç«¯ã«å‡ºåŠ›ã•ã‚Œã‚‹æ–‡å­—ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚’ ASCII ã‹ã‚‰ EBCDIC ã«å¤‰æ›´ã™ã‚‹ã€‚
+16 é€²ãƒ€ãƒ³ãƒ—ã®å‡ºåŠ›å½¢å¼ã¯å¤‰æ›´ã•ã‚Œã¾ã›ã‚“。
+\-rã€\-pã€\-i ãŒåŒæ™‚ã«æŒ‡å®šã•ã‚ŒãŸå ´åˆã¯ä½•ã®åŠ¹æžœã‚‚ã‚ã‚Šã¾ã›ã‚“。
+.TP
+.IR "\-g bytes " | " \-groupsize bytes"
+出力を
+.RI < bytes >
+ãƒã‚¤ãƒˆ (2 æ–‡å­—ã® 16 é€²æ•°ã€ã¾ãŸã¯ 8 æ–‡å­—ã® 2 é€²æ•°) ã”ã¨ã«ã‚¹ãƒšãƒ¼ã‚¹ã§åŒºåˆ‡ã‚Šã¾
+ã™ã€‚
+区切らãšã«å‡ºåŠ›ã™ã‚‹ã«ã¯
+.I \-g 0
+を指定ã—ã¦ãã ã•ã„。
+.RI < Bytes >
+ã®æ¨™æº–設定㯠\fI2\fP ã§ã™ã€‚2 é€²ãƒ€ãƒ³ãƒ—ã®å ´åˆã¯ \fI1\fP ã§ã™ã€‚
+ãƒã‚¹ãƒˆã‚¹ã‚¯ãƒªãƒ—ト形å¼ã‚„インクルード形å¼ã§å‡ºåŠ›ã™ã‚‹ã¨ãã¯ã€ã“ã®ã‚ªãƒ—ションã¯ä½¿ã‚
+ã‚Œã¾ã›ã‚“。
+.TP
+.IR \-h " | " \-help
+コマンドã®èª¬æ˜Žã‚’出力ã—ã¦çµ‚了ã™ã‚‹ã€‚変æ›ã¯å®Ÿè¡Œã•ã‚Œã¾ã›ã‚“。
+.TP
+.IR \-i " | " \-include
+C ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ãƒ•ã‚¡ã‚¤ãƒ«å½¢å¼ã§å‡ºåŠ›ã—ã¾ã™ã€‚入力ファイルã®åå‰ãŒä»˜ã‘られãŸé™çš„é…
+列ã®å®šç¾©ãŒå‡ºåŠ›ã•ã‚Œã¾ã™ã€‚標準入力ã®å ´åˆã¯å®šç¾©ã®ä¸­èº«ã ã‘出力ã•ã‚Œã¾ã™ã€‚
+.TP
+.IR "\-l len " | " \-len len"
+.RI  < len >
+オクテットã ã‘出力ã™ã‚‹ã€‚
+.TP
+.IR \-p " | " \-ps " | " \-postscript " | " \-plain
+ãƒã‚¹ãƒˆã‚¹ã‚¯ãƒªãƒ—ト形å¼ã® 16 é€²ãƒ€ãƒ³ãƒ—を出力ã™ã‚‹ã€‚別å ãƒ—レーン 16 é€²ãƒ€ãƒ³ãƒ—。
+.TP
+.IR \-r " | " \-revert
+å…ƒã«æˆ»ã™: 16 é€²ãƒ€ãƒ³ãƒ—ã‹ã‚‰ãƒã‚¤ãƒŠãƒªå½¢å¼ã«å¤‰æ› (ã¾ãŸã¯ãƒ‘ッãƒ) ã—ã¾ã™ã€‚
+ファイルã¸å‡ºåŠ›ã™ã‚‹å ´åˆã€å‡ºåŠ›å…ˆã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯åˆ‡ã‚Šè©°ã‚ã•ã‚Œã¾ã›ã‚“。
+行番å·ã‚„特定ã®æ›¸å¼ãŒãªã„プレーン 16 é€²ãƒ€ãƒ³ãƒ—を読ã¿è¾¼ã‚€å ´åˆã¯ã€
+.I \-r \-p
+を指定ã—ã¦ãã ã•ã„。空白ã¨æ”¹è¡Œã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚
+.TP
+.I \-seek offset
+.IR \-r
+ã®å¾Œã§ä½¿ã‚ã‚ŒãŸå ´åˆ: 16 é€²ãƒ€ãƒ³ãƒ—を出力ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã®ä½ç½®ã«
+.RI < offset >
+を加ãˆã‚‹ã€‚
+.TP
+.I \-s [+][\-]seek
+infile ã®
+.RI < seek >
+ãƒã‚¤ãƒˆç›® (絶対ä½ç½®ã€ã¾ãŸã¯ç›¸å¯¾ä½ç½®) ã‹ã‚‰é–‹å§‹ã™ã‚‹ã€‚
+\fI+ \fRã¯ã€ç¾åœ¨ã®æ¨™æº–入力ã®ä½ç½®ã‹ã‚‰ç›¸å¯¾çš„ãªä½ç½®ã‚’示ã—ã¾ã™
+(標準入力ã‹ã‚‰èª­ã¿è¾¼ã‚€ã¨ãã®ã¿æ„味ãŒã‚ã‚Šã¾ã™)。\fI\- \fRã¯ã€å…¥åŠ›ã®çµ‚ã‚ã‚Šã‹ã‚‰
+ã®æ–‡å­—数を示ã—ã¾ã™ (\fI+\fR ã¨åŒæ™‚ã«æŒ‡å®šã—ãŸå ´åˆã¯ã€ç¾åœ¨ã®æ¨™æº–入力ã®ä½ç½®ã‹ã‚‰
+手å‰ã®ä½ç½®ã‚’示ã—ã¾ã™)。
+\-s å¼•æ•°ã‚’指定ã—ãªã‹ã£ãŸå ´åˆã¯ã€ç¾åœ¨ã®ãƒ•ã‚¡ã‚¤ãƒ«ä½ç½®ã‹ã‚‰é–‹å§‹ã•ã‚Œã¾ã™ã€‚
+.TP
+.I \-u
+16 é€²æ•°ã®è¡¨è¨˜ã«å¤§æ–‡å­—を使ã„ã¾ã™ã€‚指定ãŒãªã„å ´åˆã¯å°æ–‡å­—ã§å‡ºåŠ›ã•ã‚Œã¾ã™ã€‚
+.TP
+.IR \-v " | " \-version
+ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示ã—ã¾ã™ã€‚
+.SH è­¦å‘Š
+.PP
+.I xxd \-r
+ã§ã¯è¡Œç•ªå·ã®è©•ä¾¡ã«é–¢ã—ã¦ã®æš—é»™ã®ãƒ«ãƒ¼ãƒ«ãŒã„ãã¤ã‹ã‚ã‚Šã¾ã™ã€‚
+出力ファイルãŒã‚·ãƒ¼ã‚¯å¯èƒ½ãªã‚‰ã€å„è¡Œã®è¡Œç•ªå·ãŒé †ç•ªé€šã‚Šã«ä¸¦ã‚“ã§ãªãã¦ã‚‚構ã„ã¾ã›
+ん。ä½ç½®ãŒé£›ã‚“ã§ã„ã¦ã‚‚é‡ãªã£ã¦ã„ã¦ã‚‚大丈夫ã§ã™ã€‚ãã®å ´åˆã€æ¬¡ã®ä½ç½®ã«ç§»å‹•ã™ã‚‹
+ãŸã‚ã« lseek(2) ãŒä½¿ã‚ã‚Œã¾ã™ã€‚
+出力ファイルãŒã‚·ãƒ¼ã‚¯ä¸å¯ãªã‚‰ã€ã€Œéš™é–“ã€ã ã‘ãŒå‡¦ç†å¯èƒ½ã§ã™ã€‚隙間㯠null ãƒã‚¤ãƒˆ
+ã§åŸ‹ã‚られã¾ã™ã€‚
+.PP
+.I xxd \-r
+ã¯ä¸æ­£ãªå…¥åŠ›ã‚’エラーã«ã—ã¾ã›ã‚“。ゴミã¯é™ã‹ã«èª­ã¿é£›ã°ã•ã‚Œã¾ã™ã€‚
+.PP
+16 é€²ãƒ€ãƒ³ãƒ—を編集ã™ã‚‹ã¨ãã¯æ³¨æ„ãŒå¿…è¦ã§ã™ã€‚
+.I xxd \-r
+ã¯å¿…è¦ãªæ¡ (\-c å¼•æ•°å‚ç…§) ã ã‘ 16 é€²ãƒ‡ãƒ¼ã‚¿ã‚’読ã¿è¾¼ã‚“ã§ã€è¡Œã®æ®‹ã‚Šã‚’無視ã—ã¾
+ã™ã€‚ã¤ã¾ã‚Šã€ascii (ã¾ãŸã¯ ebcdic) ã‚’示ã—ã¦ã„る列ã¸ã®å¤‰æ›´ã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚
+xxd \-r \-p ã§ãƒ—レーン形张(ãƒã‚¹ãƒˆã‚¹ã‚¯ãƒªãƒ—ト形å¼) ã® 16 é€²ãƒ€ãƒ³ãƒ—ã‚’å…ƒã«æˆ»ã™å ´
+åˆã¯ã€åˆ—ã®æ•°ã¯å½±éŸ¿ã—ã¾ã›ã‚“。
+2 æ¡ã® 16 é€²æ•°ã¨èªè­˜ã§ãã‚‹ã‚‚ã®ã¯ã™ã¹ã¦å¤‰æ›ã•ã‚Œã¾ã™ã€‚
+.PP
+\fI% xxd \-i file\fR
+.br
+ã¨
+.br
+\fI% xxd \-i < file\fR
+.br
+ã®çµæžœã¯é•ã„ã¾ã™ã€‚注æ„ã—ã¦ãã ã•ã„。
+.PP
+.I xxd \-s +seek
+ã¨
+.IR "xxd \-s seek" ,
+ã®é•ã„ã¯ã€lseek(2) ã‚’使ã£ã¦å…¥åŠ›ã‚’ "å·»ã戻ã™" ã‹ã©ã†ã‹ã§ã™ã€‚'+' ãŒæ„味をæŒã¤
+ã®ã¯ã€å…¥åŠ›ãŒæ¨™æº–入力ã§ã€xxd ãŒèµ·å‹•ã•ã‚ŒãŸã¨ãã«æ¨™æº–入力ã®ãƒ•ã‚¡ã‚¤ãƒ«ä½ç½®ãŒãƒ•ã‚¡ã‚¤
+ルã®å…ˆé ­ã§ã¯ãªã‹ã£ãŸå ´åˆã§ã™ã€‚
+以下ã®ä¾‹ãŒåˆ†ã‹ã‚Šã‚„ã™ã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ (ã‚‚ã£ã¨æ··ä¹±ã™ã‚‹ã‹ã‚‚!)...
+.PP
+`cat' ãŒæ—¢ã«æ¨™æº–入力を終ã‚ã‚Šã¾ã§èª­ã‚“ã§ã„ã‚‹ã®ã§ã€èª­ã‚€å‰ã«æ¨™æº–入力を巻ã戻ã™å¿…
+è¦ãŒã‚る。
+.br
+\fI% sh \-c "cat > plain_copy; xxd \-s 0 > hex_copy" < file\fR
+.PP
+ファイルä½ç½® 0x480 (=1024+128) å‰æ–¹ã‹ã‚‰ 16 é€²ãƒ€ãƒ³ãƒ—ã™ã‚‹ã€‚
+`+' ã¯ ã€Œç¾åœ¨åœ°ã‹ã‚‰ã®ç›¸å¯¾ä½ç½®ã€ã‚’æ„味ã™ã‚‹ã®ã§ã€dd ãŒ 1k å‡¦ç†ã—ãŸå¾Œã‹ã‚‰ã€ã•ã‚‰
+ã« `128' é€²ã‚ã¾ã™ã€‚
+.br
+\fI% sh \-c "dd of=plain_snippet bs=1k count=1; xxd \-s +128 > hex_snippet" < file\fR
+.PP
+ファイルä½ç½® 0x100 ( = 1024\-768) ã‹ã‚‰ 16 é€²ãƒ€ãƒ³ãƒ—ã™ã‚‹ã€‚
+.br
+\fI% sh \-c "dd of=plain_snippet bs=1k count=1; xxd \-s +\-768 > hex_snippet" < file\fR
+.PP
+ã“ã®ã‚ˆã†ãªä½¿ã„æ–¹ã¯ã‚ã¾ã‚Šã—ã¾ã›ã‚“ã—ã€`+' ã‚’使ã†ã“ã¨ã‚‚ã»ã¨ã‚“ã©ãªã„ã§ã—ょã†ã€‚
+\-s ã‚’使ã†ã¨ãã¯ã„ã¤ã§ã‚‚ã€strace(1) ã‚„ truss(1) ã‚’使ã£ã¦ã€xxd ã®åƒãã‚’ãƒã‚§ãƒƒ
+クã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚
+.SH ä¾‹
+.PP
+.br
+.BR ãƒ•ã‚¡ã‚¤ãƒ«
+ã®æœ€åˆã®ä¸‰è¡Œ (16 é€²æ•°ã§ 0x30 ãƒã‚¤ãƒˆ) ä»¥é™ã‚’出力ã™ã‚‹ã€‚
+.br
+\fI% xxd \-s 0x30 file\fR
+.PP
+.br
+.BR ãƒ•ã‚¡ã‚¤ãƒ«
+ã®æœ€å¾Œã‹ã‚‰ä¸‰è¡Œ (16 é€²æ•°ã§ 0x30 ãƒã‚¤ãƒˆ) ã‚’出力ã™ã‚‹ã€‚
+.br
+\fI% xxd \-s \-0x30 file\fR
+.PP
+.br
+120 ãƒã‚¤ãƒˆã‚’ã€å¹³æ–‡ 16 é€²ãƒ€ãƒ³ãƒ—å½¢å¼ã§ä¸€è¡Œã« 20 ã‚ªã‚¯ãƒ†ãƒƒãƒˆãšã¤å‡ºåŠ›ã™ã‚‹ã€‚
+.br
+\fI% xxd \-l 120 \-ps \-c 20 xxd.1\fR
+.br
+2e54482058584420312022417567757374203139
+.br
+39362220224d616e75616c207061676520666f72
+.br
+20787864220a2e5c220a2e5c222032317374204d
+.br
+617920313939360a2e5c22204d616e2070616765
+.br
+20617574686f723a0a2e5c2220202020546f6e79
+.br
+204e7567656e74203c746f6e79407363746e7567
+.br
+
+.br
+ã“ã® man ãƒšãƒ¼ã‚¸ã®å…ˆé ­ã‹ã‚‰ 120 ãƒã‚¤ãƒˆã‚’一行㫠12 ã‚ªã‚¯ãƒ†ãƒƒãƒˆãšã¤ 16 é€²ãƒ€ãƒ³ãƒ—ã™
+る。
+.br
+\fI% xxd \-l 120 \-c 12 xxd.1\fR
+.br
+0000000: 2e54 4820 5858 4420 3120 2241  .TH XXD 1 "A
+.br
+000000c: 7567 7573 7420 3139 3936 2220  ugust 1996" 
+.br
+0000018: 224d 616e 7561 6c20 7061 6765  "Manual page
+.br
+0000024: 2066 6f72 2078 7864 220a 2e5c   for xxd"..\\
+.br
+0000030: 220a 2e5c 2220 3231 7374 204d  "..\\" 21st M
+.br
+000003c: 6179 2031 3939 360a 2e5c 2220  ay 1996..\\" 
+.br
+0000048: 4d61 6e20 7061 6765 2061 7574  Man page aut
+.br
+0000054: 686f 723a 0a2e 5c22 2020 2020  hor:..\\"    
+.br
+0000060: 546f 6e79 204e 7567 656e 7420  Tony Nugent 
+.br
+000006c: 3c74 6f6e 7940 7363 746e 7567  <tony@sctnug
+.PP
+.br
+xxd.1 ã®æ—¥ä»˜éƒ¨åˆ†ã ã‘を出力ã™ã‚‹ã€‚
+.br
+\fI% xxd \-s 0x36 \-l 13 \-c 13 xxd.1\fR
+.br
+0000036: 3231 7374 204d 6179 2031 3939 36  21st May 1996
+.PP
+.br
+.B input_file
+ã‚’
+.B output_file
+ã«ã‚³ãƒ”ーã—ã€å…ˆé ­ã« 0x00 ã‚’ 100 ãƒã‚¤ãƒˆåˆ†ä»˜ã‘加ãˆã‚‹ã€‚
+.br
+\fI% xxd input_file | xxd \-r \-s 100 > output_file\fR
+.br
+
+.br
+xxd.1 ã®æ—¥ä»˜ã‚’修正ã™ã‚‹ã€‚
+.br
+\fI% echo "0000037: 3574 68" | xxd \-r \- xxd.1\fR
+.br
+\fI% xxd \-s 0x36 \-l 13 \-c 13 xxd.1\fR
+.br
+0000036: 3235 7468 204d 6179 2031 3939 36  25th May 1996
+.PP
+.br
+中身ãŒã™ã¹ã¦ 0x00 ã® 65537 ãƒã‚¤ãƒˆã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’作æˆã™ã‚‹ã€‚
+ãŸã ã—ã€æœ€å¾Œã®ãƒã‚¤ãƒˆã ã‘㯠'A' (hex 0x41)。
+.br
+\fI% echo "010000: 41" | xxd \-r > file\fR
+.PP
+.br
+作æˆã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’オートスキップを使ã£ã¦ 16 é€²ãƒ€ãƒ³ãƒ—ã™ã‚‹ã€‚
+.br
+\fI% xxd \-a \-c 12 file\fR
+.br
+0000000: 0000 0000 0000 0000 0000 0000  ............
+.br
+*
+.br
+000fffc: 0000 0000 40                   ....A
+.PP
+一文字㮠'A' ã‹ã‚‰ãªã‚‹ 1 ãƒã‚¤ãƒˆã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’作æˆã™ã‚‹ã€‚
+ '\-r \-s' ã®å¾Œã«æŒ‡å®šã—ãŸæ•°å€¤ãŒãƒ•ã‚¡ã‚¤ãƒ«ä¸­ã®è¡Œç•ªå·ã«åŠ ç®—ã•ã‚Œã€çµæžœã€ä½™è¨ˆãªãƒ
+イトãŒé£›ã°ã•ã‚Œã‚‹ã€‚
+.br
+\fI% echo "010000: 41" | xxd \-r \-s \-0x10000 > file\fR
+.PP
+.B vim(1)
+ã®ä¸­ã‹ã‚‰ xxd ã‚’フィルタã¨ã—ã¦å®Ÿè¡Œã—ã€
+マークã•ã‚ŒãŸ `a' ã‹ã‚‰ `z' ã¾ã§ã®é ˜åŸŸã‚’ 16 é€²ãƒ€ãƒ³ãƒ—ã™ã‚‹ã€‚
+.br
+\fI:'a,'z!xxd\fR
+.PP
+.B vim(1)
+ã®ä¸­ã‹ã‚‰ xxd ã‚’フィルタã¨ã—ã¦å®Ÿè¡Œã—ã€
+マークã•ã‚ŒãŸ `a' ã‹ã‚‰ `z' ã¾ã§ã®é ˜åŸŸã‚’ãƒã‚¤ãƒŠãƒªã«æˆ»ã™ã€‚
+.br
+\fI:'a,'z!xxd \-r\fR
+.PP
+.B vim(1)
+ã®ä¸­ã‹ã‚‰ xxd ã‚’フィルタã¨ã—ã¦å®Ÿè¡Œã—ã€
+16 é€²ãƒ€ãƒ³ãƒ—ã•ã‚ŒãŸè¡Œã‚’å…ƒã«æˆ»ã™ã€‚戻ã—ãŸã„è¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¦:
+.br
+\fI!!xxd \-r\fR
+.PP
+シリアル行ã‹ã‚‰ä¸€æ–‡å­—読ã¿è¾¼ã‚€
+.br
+\fI% xxd \-c1 < /dev/term/b &\fR
+.br
+\fI% stty < /dev/term/b \-echo \-opost \-isig \-icanon min 1\fR
+.br
+\fI% echo \-n foo > /dev/term/b\fR
+.PP
+.SH è¿”り値
+以下ã®ã‚¨ãƒ©ãƒ¼å€¤ãŒè¿”ã‚Šã¾ã™:
+.TP
+0
+エラーãªã—。
+.TP
+\-1
+æ“作ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„ (
+.I xxd \-r \-i
+ã¯ã¾ã ä¸å¯ã§ã™)。
+.TP
+1
+引数ã®è§£é‡ˆã«é–¢ã™ã‚‹ã‚¨ãƒ©ãƒ¼ã€‚
+.TP
+2
+入力ファイルã«é–¢ã™ã‚‹å•é¡Œã€‚
+.TP
+3
+出力ファイルã«é–¢ã™ã‚‹å•é¡Œã€‚
+.TP
+4,5
+指定ã•ã‚ŒãŸä½ç½®ã¸ã‚·ãƒ¼ã‚¯ã§ããªã‹ã£ãŸã€‚
+.SH é–¢é€£é …ç›®
+uuencode(1), uudecode(1), patch(1)
+.br
+.SH è­¦å‘Š
+ã“ã®å¥‡å¦™ãªãƒ„ールã¯ä½œè€…ãŒä½¿ã„ã‚„ã™ã„よã†ã«ä½œã‚‰ã‚Œã¦ã„ã¾ã™ã€‚
+自己責任ã§ä½¿ã£ã¦ãã ã•ã„。ファイルをコピーã—ã€ãれを調ã¹ã€ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ãŸã‚Œã€‚
+.br
+.SH ãƒãƒ¼ã‚¸ãƒ§ãƒ³
+ã“ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã¯ xxd ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.7 ã«ã¤ã„ã¦èª¬æ˜Žã—ã¦ã„ã¾ã™ã€‚
+.SH è‘—者
+.br
+(c) 1990-1997 by Juergen Weigert
+.br
+<jnweiger@informatik.uni\-erlangen.de>
+.LP
+ç§ã®åŠŸç¸¾ã¨ã—ã¦è‡ªç”±ã«é…布ã—ã¦ãã ã•ã„。
+.br
+儲ã‹ã£ãŸã‚‰æ•™ãˆã¦ãã ã•ã„。
+.br
+æã—ã¦ã‚‚知りã¾ã›ã‚“。
+.PP
+マニュアル㯠Tony Nugent
+.br
+<tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
+.br
+ã«ã‚ˆã£ã¦æ›¸ã‹ã‚Œã€
+Bram Moolenaar ãŒå°‘ã—変更を加ãˆã€
+Juergen Weigert ãŒç·¨é›†ã—ã¾ã—ãŸã€‚
+.PP
index afc0740..70c1fe1 100644 (file)
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2010 Jul 30
+" Last Change: 2013 Aug 03
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -17,7 +17,7 @@ augroup filetypedetect
 
 " Ignored extensions
 if exists("*fnameescape")
-au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.rpmsave,?\+.rpmnew
+au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.dpkg-new,?\+.dpkg-bak,?\+.rpmsave,?\+.rpmnew
        \ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
 au BufNewFile,BufRead *~
        \ let s:name = expand("<afile>") |
@@ -75,7 +75,7 @@ endfunc
 au BufNewFile,BufRead *.aap                    setf aap
 
 " A2ps printing utility
-au BufNewFile,BufRead etc/a2ps.cfg,etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps
+au BufNewFile,BufRead */etc/a2ps.cfg,*/etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps
 
 " ABAB/4
 au BufNewFile,BufRead *.abap                   setf abap
@@ -110,8 +110,7 @@ au BufNewFile,BufRead build.xml                     setf ant
 au BufNewFile,BufRead proftpd.conf*            call s:StarSetf('apachestyle')
 
 " Apache config file
-au BufNewFile,BufRead .htaccess,/etc/httpd/*.conf               setf apache
-au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf*,/etc/httpd/conf.d/*.conf* call s:StarSetf('apache')
+au BufNewFile,BufRead .htaccess,*/etc/httpd/*.conf             setf apache
 
 " XA65 MOS6510 cross assembler
 au BufNewFile,BufRead *.a65                    setf a65
@@ -124,17 +123,25 @@ au BufNewFile,BufRead *.am
        \ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif
 
 " ALSA configuration
-au BufNewFile,BufRead ~/.asoundrc,/usr/share/alsa/alsa.conf,/etc/asound.conf   setf alsaconf
+au BufNewFile,BufRead .asoundrc,*/usr/share/alsa/alsa.conf,*/etc/asound.conf setf alsaconf
 
 " Arc Macro Language
 au BufNewFile,BufRead *.aml                    setf aml
 
+" APT config file
+au BufNewFile,BufRead apt.conf                 setf aptconf
+au BufNewFile,BufRead */.aptitude/config       setf aptconf
+au BufNewFile,BufRead */etc/apt/apt.conf.d/{[-_[:alnum:]]\+,[-_.[:alnum:]]\+.conf} setf aptconf
+
 " Arch Inventory file
 au BufNewFile,BufRead .arch-inventory,=tagging-method  setf arch
 
 " ART*Enterprise (formerly ART-IM)
 au BufNewFile,BufRead *.art                    setf art
 
+" AsciiDoc
+au BufNewFile,BufRead *.asciidoc               setf asciidoc
+
 " ASN.1
 au BufNewFile,BufRead *.asn,*.asn1             setf asn
 
@@ -157,7 +164,7 @@ au BufNewFile,BufRead *.asp
        \ endif
 
 " Grub (must be before catch *.lst)
-au BufNewFile,BufRead /boot/grub/menu.lst,/boot/grub/grub.conf,/etc/grub.conf  setf grub
+au BufNewFile,BufRead */boot/grub/menu.lst,*/boot/grub/grub.conf,*/etc/grub.conf setf grub
 
 " Assembly (all kinds)
 " *.lst is not pure assembly, it has two extra columns (address, byte codes)
@@ -240,8 +247,8 @@ func! s:FTVB(alt)
   endif
 endfunc
 
-" Visual Basic Script (close to Visual Basic)
-au BufNewFile,BufRead *.vbs,*.dsm,*.ctl                setf vb
+" Visual Basic Script (close to Visual Basic) or Visual Basic .NET
+au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl   setf vb
 
 " IBasic file (similar to QBasic)
 au BufNewFile,BufRead *.iba,*.ibi              setf ibasic
@@ -296,7 +303,7 @@ endfunc
 au BufNewFile,BufRead *.bl                     setf blank
 
 " Blkid cache file
-au BufNewFile,BufRead /etc/blkid.tab,/etc/blkid.tab.old   setf xml
+au BufNewFile,BufRead */etc/blkid.tab,*/etc/blkid.tab.old   setf xml
 
 " C or lpc
 au BufNewFile,BufRead *.c                      call s:FTlpc()
@@ -317,21 +324,21 @@ endfunc
 
 " Calendar
 au BufNewFile,BufRead calendar                 setf calendar
-au BufNewFile,BufRead */.calendar/*,
-       \*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
-       \                                       call s:StarSetf('calendar')
 
 " C#
 au BufNewFile,BufRead *.cs                     setf cs
 
+" CSDL
+au BufNewFile,BufRead *.csdl                   setf csdl
+
 " Cabal
-au BufNewFile,BufRead *.cabal                  setf cabal
+au BufNewFile,BufRead *.cabal                  setf cabal
 
 " Cdrdao TOC
 au BufNewFile,BufRead *.toc                    setf cdrtoc
 
 " Cdrdao config
-au BufNewFile,BufRead etc/cdrdao.conf,etc/defaults/cdrdao,etc/default/cdrdao,~/.cdrdao                                         setf cdrdaoconf
+au BufNewFile,BufRead */etc/cdrdao.conf,*/etc/defaults/cdrdao,*/etc/default/cdrdao,.cdrdao     setf cdrdaoconf
 
 " Cfengine
 au BufNewFile,BufRead cfengine.conf            setf cfengine
@@ -371,7 +378,11 @@ au BufNewFile,BufRead *.h                  call s:FTheader()
 
 func! s:FTheader()
   if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
-    setf objc
+    if exists("g:c_syntax_for_h")
+      setf objc
+    else
+      setf objcpp
+    endif
   elseif exists("g:c_syntax_for_h")
     setf c
   elseif exists("g:ch_syntax_for_h")
@@ -484,11 +495,14 @@ au BufNewFile,BufRead *.prg
        \   setf clipper |
        \ endif
 
+" Clojure
+au BufNewFile,BufRead *.clj,*.cljs             setf clojure
+
 " Cmake
 au BufNewFile,BufRead CMakeLists.txt,*.cmake,*.cmake.in                setf cmake
 
 " Cmusrc
-au BufNewFile,BufRead ~/.cmus/{autosave,rc,command-history,*.theme} setf cmusrc
+au BufNewFile,BufRead */.cmus/{autosave,rc,command-history,*.theme} setf cmusrc
 au BufNewFile,BufRead */cmus/{rc,*.theme}                      setf cmusrc
 
 " Cobol
@@ -536,7 +550,7 @@ au BufNewFile,BufRead *.qc                  setf c
 au BufNewFile,BufRead *.cfg                    setf cfg
 
 " Cucumber
-au BufNewFile,BufRead *.feature                setf cucumber
+au BufNewFile,BufRead *.feature                        setf cucumber
 
 " Communicating Sequential Processes
 au BufNewFile,BufRead *.csp,*.fdr              setf csp
@@ -553,11 +567,15 @@ au BufNewFile,BufRead control
        \| endif
 
 " Debian Sources.list
-au BufNewFile,BufRead /etc/apt/sources.list    setf debsources
+au BufNewFile,BufRead */etc/apt/sources.list           setf debsources
+au BufNewFile,BufRead */etc/apt/sources.list.d/*.list  setf debsources
 
 " Deny hosts
 au BufNewFile,BufRead denyhosts.conf           setf denyhosts
 
+" dnsmasq(8) configuration files
+au BufNewFile,BufRead */etc/dnsmasq.conf       setf dnsmasq
+
 " ROCKLinux package description
 au BufNewFile,BufRead *.desc                   setf desc
 
@@ -566,7 +584,10 @@ au BufNewFile,BufRead *.d                  call s:DtraceCheck()
 
 func! s:DtraceCheck()
   let lines = getline(1, min([line("$"), 100]))
-  if match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
+  if match(lines, '^module\>\|^import\>') > -1
+    " D files often start with a module and/or import statement.
+    setf d
+  elseif match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
     setf dtrace
   else
     setf d
@@ -586,7 +607,7 @@ au BufNewFile,BufRead dictd.conf            setf dictdconf
 au BufNewFile,BufRead *.diff,*.rej,*.patch     setf diff
 
 " Dircolors
-au BufNewFile,BufRead .dir_colors,/etc/DIR_COLORS      setf dircolors
+au BufNewFile,BufRead .dir_colors,.dircolors,*/etc/DIR_COLORS  setf dircolors
 
 " Diva (with Skill) or InstallShield
 au BufNewFile,BufRead *.rul
@@ -626,6 +647,9 @@ au BufNewFile,BufRead *.dsl                 setf dsl
 " DTD (Document Type Definition for XML)
 au BufNewFile,BufRead *.dtd                    setf dtd
 
+" DTS/DSTI (device tree files)
+au BufNewFile,BufRead *.dts,*.dtsi             setf dts
+
 " EDIF (*.edf,*.edif,*.edn,*.edo)
 au BufNewFile,BufRead *.ed\(f\|if\|n\|o\)      setf edif
 
@@ -677,6 +701,9 @@ au BufNewFile,BufRead *.exp                 setf expect
 " Exports
 au BufNewFile,BufRead exports                  setf exports
 
+" Falcon
+au BufNewFile,BufRead *.fal                    setf falcon
+
 " Fantom
 au BufNewFile,BufRead *.fan,*.fwt              setf fan
 
@@ -725,14 +752,18 @@ au BufNewFile,BufRead *.mo,*.gdmo         setf gdmo
 au BufNewFile,BufRead *.ged,lltxxxxx.txt       setf gedcom
 
 " Git
-autocmd BufNewFile,BufRead *.git/COMMIT_EDITMSG setf gitcommit
-autocmd BufNewFile,BufRead *.git/config,.gitconfig,.gitmodules setf gitconfig
-autocmd BufNewFile,BufRead git-rebase-todo      setf gitrebase
-autocmd BufNewFile,BufRead .msg.[0-9]*
+au BufNewFile,BufRead *.git/COMMIT_EDITMSG     setf gitcommit
+au BufNewFile,BufRead *.git/MERGE_MSG          setf gitcommit
+au BufNewFile,BufRead *.git/config,.gitconfig,.gitmodules setf gitconfig
+au BufNewFile,BufRead *.git/modules/*/COMMIT_EDITMSG setf gitcommit
+au BufNewFile,BufRead *.git/modules/*/config   setf gitconfig
+au BufNewFile,BufRead */.config/git/config     setf gitconfig
+au BufNewFile,BufRead git-rebase-todo          setf gitrebase
+au BufNewFile,BufRead .msg.[0-9]*
       \ if getline(1) =~ '^From.*# This line is ignored.$' |
       \   setf gitsendemail |
       \ endif
-autocmd BufNewFile,BufRead *.git/**
+au BufNewFile,BufRead *.git/*
       \ if getline(1) =~ '^\x\{40\}\>\|^ref: ' |
       \   setf git |
       \ endif
@@ -746,7 +777,15 @@ au BufNewFile,BufRead *.gp,.gprc           setf gp
 " GPG
 au BufNewFile,BufRead */.gnupg/options         setf gpg
 au BufNewFile,BufRead */.gnupg/gpg.conf                setf gpg
-au BufNewFile,BufRead /usr/**/gnupg/options.skel setf gpg
+au BufNewFile,BufRead */usr/*/gnupg/options.skel setf gpg
+
+" gnash(1) configuration files
+au BufNewFile,BufRead gnashrc,.gnashrc,gnashpluginrc,.gnashpluginrc setf gnash
+
+" Gitolite
+au BufNewFile,BufRead gitolite.conf            setf gitolite
+au BufNewFile,BufRead */gitolite-admin/conf/*  call s:StarSetf('gitolite')
+au BufNewFile,BufRead {,.}gitolite.rc,example.gitolite.rc      setf perl
 
 " Gnuplot scripts
 au BufNewFile,BufRead *.gpi                    setf gnuplot
@@ -764,7 +803,7 @@ au BufNewFile,BufRead *.groovy                      setf groovy
 au BufNewFile,BufRead *.gsp                    setf gsp
 
 " Group file
-au BufNewFile,BufRead /etc/group,/etc/group-,/etc/group.edit,/etc/gshadow,/etc/gshadow-,/etc/gshadow.edit,/var/backups/group.bak,/var/backups/gshadow.bak  setf group
+au BufNewFile,BufRead */etc/group,*/etc/group-,*/etc/group.edit,*/etc/gshadow,*/etc/gshadow-,*/etc/gshadow.edit,*/var/backups/group.bak,*/var/backups/gshadow.bak  setf group
 
 " GTK RC
 au BufNewFile,BufRead .gtkrc,gtkrc             setf gtkrc
@@ -776,7 +815,7 @@ au BufNewFile,BufRead *.haml                        setf haml
 au BufNewFile,BufRead *.hsc,*.hsm              setf hamster
 
 " Haskell
-au BufNewFile,BufRead *.hs,*.hs-boot           setf haskell
+au BufNewFile,BufRead *.hs,*.hs-boot           setf haskell
 au BufNewFile,BufRead *.lhs                    setf lhaskell
 au BufNewFile,BufRead *.chs                    setf chaskell
 
@@ -823,14 +862,17 @@ au BufNewFile,BufRead *.html.m4                   setf htmlm4
 au BufNewFile,BufRead *.tmpl                   setf htmlcheetah
 
 " Host config
-au BufNewFile,BufRead /etc/host.conf           setf hostconf
+au BufNewFile,BufRead */etc/host.conf          setf hostconf
 
 " Hosts access
-au BufNewFile,BufRead /etc/hosts.allow,/etc/hosts.deny  setf hostsaccess
+au BufNewFile,BufRead */etc/hosts.allow,*/etc/hosts.deny  setf hostsaccess
 
 " Hyper Builder
 au BufNewFile,BufRead *.hb                     setf hb
 
+" Httest
+au BufNewFile,BufRead *.htt,*.htb              setf httest
+
 " Icon
 au BufNewFile,BufRead *.icn                    setf icon
 
@@ -869,7 +911,9 @@ func! s:ProtoCheck(default)
   " Cproto files have a comment in the first line and a function prototype in
   " the second line, it always ends in ";".  Indent files may also have
   " comments, thus we can't match comments to see the difference.
-  if getline(2) =~ ';$'
+  " IDL files can have a single ';' in the second line, require at least one
+  " chacter before the ';'.
+  if getline(2) =~ '.;$'
     setf cpp
   else
     exe 'setf ' . a:default
@@ -884,7 +928,14 @@ au BufNewFile,BufRead indentrc                     setf indent
 au BufNewFile,BufRead *.inf,*.INF              setf inform
 
 " Initng
-au BufNewFile,BufRead /etc/initng/**/*.i,*.ii  setf initng
+au BufNewFile,BufRead */etc/initng/*/*.i,*.ii  setf initng
+
+" Innovation Data Processing
+au BufRead,BufNewFile upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c         setf upstreamdat
+au BufRead,BufNewFile upstream.log\c,upstream.*.log\c,*.upstream.log\c         setf upstreamlog
+au BufRead,BufNewFile upstreaminstall.log\c,upstreaminstall.*.log\c,*.upstreaminstall.log\c setf upstreaminstalllog
+au BufRead,BufNewFile usserver.log\c,usserver.*.log\c,*.usserver.log\c         setf usserverlog
+au BufRead,BufNewFile usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c         setf usw2kagtlog
 
 " Ipfilter
 au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules     setf ipfilter
@@ -914,7 +965,7 @@ au BufNewFile,BufRead *.java,*.jav          setf java
 au BufNewFile,BufRead *.jj,*.jjt               setf javacc
 
 " JavaScript, ECMAScript
-au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx     setf javascript
+au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx,*.json   setf javascript
 
 " Java Server Pages
 au BufNewFile,BufRead *.jsp                    setf jsp
@@ -929,6 +980,9 @@ au BufNewFile,BufRead *.clp                 setf jess
 " Jgraph
 au BufNewFile,BufRead *.jgr                    setf jgraph
 
+" Jovial
+au BufNewFile,BufRead *.jov,*.j73,*.jovial     setf jovial
+
 " Kixtart
 au BufNewFile,BufRead *.kix                    setf kix
 
@@ -948,7 +1002,7 @@ au BufNewFile,BufRead *.ace,*.ACE          setf lace
 au BufNewFile,BufRead *.latte,*.lte            setf latte
 
 " Limits
-au BufNewFile,BufRead /etc/limits              setf limits
+au BufNewFile,BufRead */etc/limits,*/etc/*limits.conf,*/etc/*limits.d/*.conf   setf limits
 
 " LambdaProlog (*.mod too, see Modsim)
 au BufNewFile,BufRead *.sig                    setf lprolog
@@ -963,10 +1017,10 @@ au BufNewFile,BufRead *.ld                       setf ld
 au BufNewFile,BufRead *.lex,*.l                        setf lex
 
 " Libao
-au BufNewFile,BufRead /etc/libao.conf,*/.libao setf libao
+au BufNewFile,BufRead */etc/libao.conf,*/.libao        setf libao
 
 " Libsensors
-au BufNewFile,BufRead /etc/sensors.conf                setf sensors
+au BufNewFile,BufRead */etc/sensors.conf,*/etc/sensors3.conf   setf sensors
 
 " LFTP
 au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc       setf lftp
@@ -975,7 +1029,7 @@ au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc   setf lftp
 au BufNewFile,BufRead *.ll                     setf lifelines
 
 " Lilo: Linux loader
-au BufNewFile,BufRead lilo.conf*               call s:StarSetf('lilo')
+au BufNewFile,BufRead lilo.conf                        setf lilo
 
 " Lisp (*.el = ELisp, *.cl = Common Lisp, *.jl = librep Lisp)
 if has("fname_case")
@@ -997,10 +1051,10 @@ au BufNewFile,BufRead *.lite,*.lt                setf lite
 au BufNewFile,BufRead */LiteStep/*/*.rc                setf litestep
 
 " Login access
-au BufNewFile,BufRead /etc/login.access                setf loginaccess
+au BufNewFile,BufRead */etc/login.access       setf loginaccess
 
 " Login defs
-au BufNewFile,BufRead /etc/login.defs          setf logindefs
+au BufNewFile,BufRead */etc/login.defs         setf logindefs
 
 " Logtalk
 au BufNewFile,BufRead *.lgt                    setf logtalk
@@ -1028,10 +1082,10 @@ au BufNewFile,BufRead *.m4
 au BufNewFile,BufRead *.mgp                    setf mgp
 
 " Mail (for Elm, trn, mutt, muttng, rn, slrn)
-au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt[[:alnum:]_-]\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
+au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt[[:alnum:]_-]\\\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
 
 " Mail aliases
-au BufNewFile,BufRead /etc/mail/aliases,/etc/aliases   setf mailaliases
+au BufNewFile,BufRead */etc/mail/aliases,*/etc/aliases setf mailaliases
 
 " Mailcap configuration file
 au BufNewFile,BufRead .mailcap,mailcap         setf mailcap
@@ -1042,11 +1096,14 @@ au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make
 " MakeIndex
 au BufNewFile,BufRead *.ist,*.mst              setf ist
 
+" Mallard
+au BufNewFile,BufRead *.page                   setf mallard
+
 " Manpage
 au BufNewFile,BufRead *.man                    setf man
 
 " Man config
-au BufNewFile,BufRead /etc/man.conf,man.config setf manconf
+au BufNewFile,BufRead */etc/man.conf,man.config        setf manconf
 
 " Maple V
 au BufNewFile,BufRead *.mv,*.mpl,*.mws         setf maple
@@ -1055,7 +1112,7 @@ au BufNewFile,BufRead *.mv,*.mpl,*.mws            setf maple
 au BufNewFile,BufRead *.map                    setf map
 
 " Markdown
-au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,README.md  setf markdown
+au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,README.md  setf markdown
 
 " Mason
 au BufNewFile,BufRead *.mason,*.mhtml          setf mason
@@ -1094,11 +1151,14 @@ au BufNewFile,BufRead *.nb                      setf mma
 " Maya Extension Language
 au BufNewFile,BufRead *.mel                    setf mel
 
+" Mercurial (hg) commit file
+au BufNewFile,BufRead hg-editor-*.txt          setf hgcommit
+
 " Mercurial config (looks like generic config file)
 au BufNewFile,BufRead *.hgrc,*hgrc             setf cfg
 
-" Messages
-au BufNewFile,BufRead /var/log/messages,/var/log/messages.*[0-9]  setf messages
+" Messages (logs mostly)
+au BufNewFile,BufRead */log/{auth,cron,daemon,debug,kern,lpr,mail,messages,news/news,syslog,user}{,.log,.err,.info,.warn,.crit,.notice}{,.[0-9]*,-[0-9]*} setf messages
 
 " Metafont
 au BufNewFile,BufRead *.mf                     setf mf
@@ -1154,11 +1214,7 @@ au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc   setf monk
 au BufNewFile,BufRead *.moo                    setf moo
 
 " Modconf
-au BufNewFile,BufRead /etc/modules.conf,/etc/conf.modules      setf modconf
-au BufNewFile,BufRead /etc/modutils/*
-       \ if executable(expand("<afile>")) != 1
-       \|  call s:StarSetf('modconf')
-       \|endif
+au BufNewFile,BufRead */etc/modules.conf,*/etc/modules,*/etc/conf.modules setf modconf
 
 " Mplayer config
 au BufNewFile,BufRead mplayer.conf,*/.mplayer/config   setf mplayerconf
@@ -1175,8 +1231,11 @@ au BufNewFile,BufRead *.msql                     setf msql
 " Mysql
 au BufNewFile,BufRead *.mysql                  setf mysql
 
+" Mutt setup files (must be before catch *.rc)
+au BufNewFile,BufRead */etc/Muttrc.d/*         call s:StarSetf('muttrc')
+
 " M$ Resource files
-au BufNewFile,BufRead *.rc                     setf rc
+au BufNewFile,BufRead *.rc,*.rch               setf rc
 
 " MuPAD source
 au BufRead,BufNewFile *.mu                     setf mupad
@@ -1188,7 +1247,7 @@ au BufNewFile,BufRead *.mush                      setf mush
 au BufNewFile,BufRead Mutt{ng,}rc              setf muttrc
 
 " Nano
-au BufNewFile,BufRead /etc/nanorc,.nanorc      setf nanorc
+au BufNewFile,BufRead */etc/nanorc,.nanorc     setf nanorc
 
 " Nastran input/DMAP
 "au BufNewFile,BufRead *.dat                   setf nastran
@@ -1199,6 +1258,9 @@ au BufNewFile,BufRead *.NS[ACGLMNPS]              setf natural
 " Netrc
 au BufNewFile,BufRead .netrc                   setf netrc
 
+" Ninja file
+au BufNewFile,BufRead *.ninja                  setf ninja
+
 " Novell netware batch files
 au BufNewFile,BufRead *.ncf                    setf ncf
 
@@ -1240,10 +1302,10 @@ endfunc
 au BufNewFile,BufRead *.nqc                    setf nqc
 
 " NSIS
-au BufNewFile,BufRead *.nsi                    setf nsis
+au BufNewFile,BufRead *.nsi,*.nsh              setf nsis
 
 " OCAML
-au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly   setf ocaml
+au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly,.ocamlinit        setf ocaml
 
 " Occam
 au BufNewFile,BufRead *.occ                    setf occam
@@ -1264,13 +1326,13 @@ au BufNewFile,BufRead *.ora                     setf ora
 au BufNewFile,BufRead pf.conf                  setf pf
 
 " Pam conf
-au BufNewFile,BufRead /etc/pam.conf            setf pamconf
+au BufNewFile,BufRead */etc/pam.conf           setf pamconf
 
 " PApp
 au BufNewFile,BufRead *.papp,*.pxml,*.pxsl     setf papp
 
 " Password file
-au BufNewFile,BufRead /etc/passwd,/etc/passwd-,/etc/passwd.edit,/etc/shadow,/etc/shadow-,/var/backups/passwd.bak,/var/backups/shadow.bak setf passwd
+au BufNewFile,BufRead */etc/passwd,*/etc/passwd-,*/etc/passwd.edit,*/etc/shadow,*/etc/shadow-,*/etc/shadow.edit,*/var/backups/passwd.bak,*/var/backups/shadow.bak setf passwd
 
 " Pascal (also *.p)
 au BufNewFile,BufRead *.pas                    setf pascal
@@ -1335,6 +1397,9 @@ au BufNewFile,BufRead *.rcp                       setf pilrc
 " Pine config
 au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex                setf pine
 
+" PL/1, PL/I
+au BufNewFile,BufRead *.pli,*.pl1              setf pli
+
 " PL/M (also: *.inp)
 au BufNewFile,BufRead *.plm,*.p36,*.pac                setf plm
 
@@ -1402,7 +1467,7 @@ au BufNewFile,BufRead *.it,*.ih                   setf ppwiz
 
 " Obj 3D file format
 " TODO: is there a way to avoid MS-Windows Object files?
-au BufNewFile,BufRead *.obj                    setf obj
+au BufNewFile,BufRead *.obj                    setf obj
 
 " Oracle Pro*C/C++
 au BufNewFile,BufRead *.pc                     setf proc
@@ -1496,8 +1561,11 @@ au BufNewFile,BufRead *.pdb                      setf prolog
 " Promela
 au BufNewFile,BufRead *.pml                    setf promela
 
+" Google protocol buffers
+au BufNewFile,BufRead *.proto                  setf proto
+
 " Protocols
-au BufNewFile,BufRead /etc/protocols           setf protocols
+au BufNewFile,BufRead */etc/protocols          setf protocols
 
 " Pyrex
 au BufNewFile,BufRead *.pyx,*.pxd              setf pyrex
@@ -1528,7 +1596,7 @@ au BufNewFile,BufRead *.reg
 au BufNewFile,BufRead *.rib                    setf rib
 
 " Rexx
-au BufNewFile,BufRead *.rexx,*.rex,*.jrexx,*.rxj,*.orx setf rexx
+au BufNewFile,BufRead *.rex,*.orx,*.rxo,*.rxj,*.jrexx,*.rexxj,*.rexx,*.testGroup,*.testUnit    setf rexx
 
 " R (Splus)
 if has("fname_case")
@@ -1578,13 +1646,17 @@ func! s:FTr()
     endif
   endfor
 
-  " Nothing recognized, assume Rexx
-  setf rexx
+  " Nothing recognized, use user default or assume Rexx
+  if exists("g:filetype_r")
+    exe "setf " . g:filetype_r
+  else
+    " Rexx used to be the default, but R appears to be much more popular.
+    setf r
+  endif
 endfunc
 
 " Remind
-au BufNewFile,BufRead .reminders*              call s:StarSetf('remind')
-au BufNewFile,BufRead *.remind,*.rem           setf remind
+au BufNewFile,BufRead .reminders,*.remind,*.rem                setf remind
 
 " Resolv.conf
 au BufNewFile,BufRead resolv.conf              setf resolv
@@ -1592,6 +1664,9 @@ au BufNewFile,BufRead resolv.conf         setf resolv
 " Relax NG Compact
 au BufNewFile,BufRead *.rnc                    setf rnc
 
+" Relax NG XML
+au BufNewFile,BufRead *.rng                    setf rng
+
 " RPL/2
 au BufNewFile,BufRead *.rpl                    setf rpl
 
@@ -1611,7 +1686,16 @@ au BufNewFile,BufRead *.rtf                      setf rtf
 au BufNewFile,BufRead .irbrc,irbrc             setf ruby
 
 " Ruby
-au BufNewFile,BufRead *.rb,*.rbw,*.gem,*.gemspec       setf ruby
+au BufNewFile,BufRead *.rb,*.rbw               setf ruby
+
+" RubyGems
+au BufNewFile,BufRead *.gemspec                        setf ruby
+
+" Rackup
+au BufNewFile,BufRead *.ru                     setf ruby
+
+" Bundler
+au BufNewFile,BufRead Gemfile                  setf ruby
 
 " Ruby on Rails
 au BufNewFile,BufRead *.builder,*.rxml,*.rjs   setf ruby
@@ -1638,7 +1722,7 @@ au BufNewFile,BufRead *.sa                        setf sather
 au BufNewFile,BufRead *.sci,*.sce              setf scilab
 
 " SCSS
-au BufNewFile,BufRead *.scss                   setf scss
+au BufNewFile,BufRead *.scss                   setf scss
 
 " SD: Streaming Descriptors
 au BufNewFile,BufRead *.sd                     setf sd
@@ -1675,26 +1759,27 @@ func! s:McSetf()
 endfunc
 
 " Services
-au BufNewFile,BufRead /etc/services            setf services
+au BufNewFile,BufRead */etc/services           setf services
 
 " Service Location config
-au BufNewFile,BufRead /etc/slp.conf            setf slpconf
+au BufNewFile,BufRead */etc/slp.conf           setf slpconf
 
 " Service Location registration
-au BufNewFile,BufRead /etc/slp.reg             setf slpreg
+au BufNewFile,BufRead */etc/slp.reg            setf slpreg
 
 " Service Location SPI
-au BufNewFile,BufRead /etc/slp.spi             setf slpspi
+au BufNewFile,BufRead */etc/slp.spi            setf slpspi
 
 " Setserial config
-au BufNewFile,BufRead /etc/serial.conf         setf setserial
+au BufNewFile,BufRead */etc/serial.conf                setf setserial
 
 " SGML
 au BufNewFile,BufRead *.sgm,*.sgml
        \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' |
        \   setf sgmllnx |
        \ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' |
-       \   let b:docbk_type="sgml" |
+       \   let b:docbk_type = "sgml" |
+       \   let b:docbk_ver = 4 |
        \   setf docbk |
        \ else |
        \   setf sgml |
@@ -1714,7 +1799,7 @@ au BufNewFile,BufRead sgml.catalog*               call s:StarSetf('catalog')
 " Gentoo ebuilds are actually bash scripts
 au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash_profile*,.bash_logout*,*.bash,*.ebuild call SetFileTypeSH("bash")
 au BufNewFile,BufRead .kshrc*,*.ksh call SetFileTypeSH("ksh")
-au BufNewFile,BufRead /etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1))
+au BufNewFile,BufRead */etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1))
 
 " Also called from scripts.vim.
 func! SetFileTypeSH(name)
@@ -1729,6 +1814,10 @@ func! SetFileTypeSH(name)
     " Some .sh scripts contain #!/bin/tcsh.
     call SetFileTypeShell("tcsh")
     return
+  elseif a:name =~ '\<zsh\>'
+    " Some .sh scripts contain #!/bin/zsh.
+    call SetFileTypeShell("zsh")
+    return
   elseif a:name =~ '\<ksh\>'
     let b:is_kornshell = 1
     if exists("b:is_bash")
@@ -1797,12 +1886,12 @@ func! s:CSH()
 endfunc
 
 " Z-Shell script
-au BufNewFile,BufRead .zprofile,/etc/zprofile,.zfbfmarks  setf zsh
+au BufNewFile,BufRead .zprofile,*/etc/zprofile,.zfbfmarks  setf zsh
 au BufNewFile,BufRead .zsh*,.zlog*,.zcompdump*  call s:StarSetf('zsh')
-au BufNewFile,BufRead *.zsh                    setf zsh
+au BufNewFile,BufRead *.zsh                    setf zsh
 
 " Scheme
-au BufNewFile,BufRead *.scm,*.ss               setf scheme
+au BufNewFile,BufRead *.scm,*.ss,*.rkt         setf scheme
 
 " Screen RC
 au BufNewFile,BufRead .screenrc,screenrc       setf screen
@@ -1829,6 +1918,8 @@ au BufNewFile,BufRead *.st                        setf st
 au BufNewFile,BufRead *.cls
        \ if getline(1) =~ '^%' |
        \  setf tex |
+       \ elseif getline(1)[0] == '#' && getline(1) =~ 'rexx' |
+       \  setf rexx |
        \ else |
        \  setf st |
        \ endif
@@ -1868,7 +1959,7 @@ au BufNewFile,BufRead *.rules                     call s:FTRules()
 let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
 func! s:FTRules()
   let path = expand('<amatch>:p')
-  if path =~ '^/etc/udev/\%(rules\.d/\)\=.*\.rules$'
+  if path =~ '^/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|lib/udev/\%(rules\.d/\)\=.*\.rules\)$'
     setf udevrules
     return
   endif
@@ -1956,13 +2047,13 @@ au BufNewFile,BufRead *.sml                     setf sml
 au BufNewFile,BufRead *.cm                     setf voscm
 
 " Sysctl
-au BufNewFile,BufRead /etc/sysctl.conf         setf sysctl
+au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf  setf sysctl
 
 " Synopsys Design Constraints
 au BufNewFile,BufRead *.sdc                    setf sdc
 
 " Sudoers
-au BufNewFile,BufRead /etc/sudoers,sudoers.tmp setf sudoers
+au BufNewFile,BufRead */etc/sudoers,sudoers.tmp        setf sudoers
 
 " SVG (Scalable Vector Graphics)
 au BufNewFile,BufRead *.svg                    setf svg
@@ -2089,6 +2180,9 @@ au BufNewFile,BufRead *.tf,.tfrc,tfrc             setf tf
 " TPP - Text Presentation Program
 au BufNewFile,BufReadPost *.tpp                        setf tpp
 
+" Treetop
+au BufRead,BufNewFile *.treetop                        setf treetop
+
 " Trustees
 au BufNewFile,BufRead trustees.conf            setf trustees
 
@@ -2101,23 +2195,34 @@ au BufNewFile,BufReadPost *.tssop               setf tssop
 " TSS - Command Line (temporary)
 au BufNewFile,BufReadPost *.tsscl              setf tsscl
 
+" TWIG files
+au BufNewFile,BufReadPost *.twig               setf twig
+
 " Motif UIT/UIL files
 au BufNewFile,BufRead *.uit,*.uil              setf uil
 
 " Udev conf
-au BufNewFile,BufRead /etc/udev/udev.conf      setf udevconf
+au BufNewFile,BufRead */etc/udev/udev.conf     setf udevconf
 
 " Udev permissions
-au BufNewFile,BufRead /etc/udev/permissions.d/*.permissions setf udevperm
+au BufNewFile,BufRead */etc/udev/permissions.d/*.permissions setf udevperm
 "
 " Udev symlinks config
-au BufNewFile,BufRead /etc/udev/cdsymlinks.conf        setf sh
+au BufNewFile,BufRead */etc/udev/cdsymlinks.conf       setf sh
 
 " UnrealScript
 au BufNewFile,BufRead *.uc                     setf uc
 
 " Updatedb
-au BufNewFile,BufRead /etc/updatedb.conf       setf updatedb
+au BufNewFile,BufRead */etc/updatedb.conf      setf updatedb
+
+" Upstart (init(8)) config files
+au BufNewFile,BufRead */usr/share/upstart/*.conf               setf upstart
+au BufNewFile,BufRead */usr/share/upstart/*.override           setf upstart
+au BufNewFile,BufRead */etc/init/*.conf,*/etc/init/*.override  setf upstart
+au BufNewFile,BufRead */.init/*.conf,*/.init/*.override        setf upstart
+au BufNewFile,BufRead */.config/upstart/*.conf                 setf upstart
+au BufNewFile,BufRead */.config/upstart/*.override             setf upstart
 
 " Vera
 au BufNewFile,BufRead *.vr,*.vri,*.vrh         setf vera
@@ -2209,15 +2314,18 @@ au BufEnter *.xpm2                              setf xpm2
 " XFree86 config
 au BufNewFile,BufRead XF86Config
        \ if getline(1) =~ '\<XConfigurator\>' |
-       \   let b:xf86c_xfree86_version = 3 |
+       \   let b:xf86conf_xfree86_version = 3 |
        \ endif |
        \ setf xf86conf
+au BufNewFile,BufRead */xorg.conf.d/*.conf
+       \ let b:xf86conf_xfree86_version = 4 |
+       \ setf xf86conf
 
 " Xorg config
-au BufNewFile,BufRead xorg.conf,xorg.conf-4    let b:xf86c_xfree86_version = 4 | setf xf86conf
+au BufNewFile,BufRead xorg.conf,xorg.conf-4    let b:xf86conf_xfree86_version = 4 | setf xf86conf
 
 " Xinetd conf
-au BufNewFile,BufRead /etc/xinetd.conf         setf xinetd
+au BufNewFile,BufRead */etc/xinetd.conf                setf xinetd
 
 " XS Perl extension interface language
 au BufNewFile,BufRead *.xs                     setf xs
@@ -2237,8 +2345,16 @@ func! s:FTxml()
   let n = 1
   while n < 100 && n < line("$")
     let line = getline(n)
-    if line =~ '<!DOCTYPE.*DocBook'
+    " DocBook 4 or DocBook 5.
+    let is_docbook4 = line =~ '<!DOCTYPE.*DocBook'
+    let is_docbook5 = line =~ ' xmlns="http://docbook.org/ns/docbook"'
+    if is_docbook4 || is_docbook5
       let b:docbk_type = "xml"
+      if is_docbook5
+       let b:docbk_ver = 5
+      else
+       let b:docbk_ver = 4
+      endif
       setf docbk
       return
     endif
@@ -2264,7 +2380,7 @@ au BufNewFile,BufRead *.ts,*.ui                   setf xml
 au BufNewFile,BufRead *.tpm                    setf xml
 
 " Xdg menus
-au BufNewFile,BufRead /etc/xdg/menus/*.menu    setf xml
+au BufNewFile,BufRead */etc/xdg/menus/*.menu   setf xml
 
 " ATI graphics driver configuration
 au BufNewFile,BufRead fglrxrc                  setf xml
@@ -2273,6 +2389,9 @@ au BufNewFile,BufRead fglrxrc                     setf xml
 au BufNewFile,BufRead *.xlf                    setf xml
 au BufNewFile,BufRead *.xliff                  setf xml
 
+" XML User Interface Language
+au BufNewFile,BufRead *.xul                    setf xml
+
 " X11 xmodmap (also see below)
 au BufNewFile,BufRead *Xmodmap                 setf xmodmap
 
@@ -2312,6 +2431,12 @@ endfunc
 " Yaml
 au BufNewFile,BufRead *.yaml,*.yml             setf yaml
 
+" yum conf (close enough to dosini)
+au BufNewFile,BufRead */etc/yum.conf           setf dosini
+
+" Zimbu
+au BufNewFile,BufRead *.zu                     setf zimbu
+
 " Zope
 "   dtml (zope dynamic template markup language), pt (zope page template),
 "   cpt (zope form controller page template)
@@ -2348,8 +2473,9 @@ au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
 " Most of these should call s:StarSetf() to avoid names ending in .gz and the
 " like are used.
 
-" More Apache files.
-au BufNewFile,BufRead /etc/apache2/conf.*/*,/etc/apache2/sites-*/*,/etc/apache2/mods-*/*               call s:StarSetf('apache')
+" More Apache config files
+au BufNewFile,BufRead access.conf*,apache.conf*,apache2.conf*,httpd.conf*,srm.conf*    call s:StarSetf('apache')
+au BufNewFile,BufRead */etc/apache2/*.conf*,*/etc/apache2/conf.*/*,*/etc/apache2/mods-*/*,*/etc/apache2/sites-*/*,*/etc/httpd/conf.d/*.conf*           call s:StarSetf('apache')
 
 " Asterisk config file
 au BufNewFile,BufRead *asterisk/*.conf*                call s:StarSetf('asterisk')
@@ -2361,6 +2487,11 @@ au BufNewFile,BufRead bzr_log.*                  setf bzr
 " BIND zone
 au BufNewFile,BufRead */named/db.*,*/bind/db.* call s:StarSetf('bindzone')
 
+" Calendar
+au BufNewFile,BufRead */.calendar/*,
+       \*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
+       \                                       call s:StarSetf('calendar')
+
 " Changelog
 au BufNewFile,BufRead [cC]hange[lL]og*
        \ if getline(1) =~ '; urgency='
@@ -2370,10 +2501,10 @@ au BufNewFile,BufRead [cC]hange[lL]og*
        \|endif
 
 " Crontab
-au BufNewFile,BufRead crontab,crontab.*,/etc/cron.d/*          call s:StarSetf('crontab')
+au BufNewFile,BufRead crontab,crontab.*,*/etc/cron.d/*         call s:StarSetf('crontab')
 
-" Debian Sources.list
-au BufNewFile,BufRead /etc/apt/sources.list.d/*        call s:StarSetf('debsources')
+" dnsmasq(8) configuration
+au BufNewFile,BufRead */etc/dnsmasq.d/*                call s:StarSetf('dnsmasq')
 
 " Dracula
 au BufNewFile,BufRead drac.*                   call s:StarSetf('dracula')
@@ -2390,7 +2521,7 @@ au BufNewFile,BufRead *fvwm2rc*
        \|endif
 
 " Gedcom
-au BufNewFile,BufRead /tmp/lltmp*              call s:StarSetf('gedcom')
+au BufNewFile,BufRead */tmp/lltmp*             call s:StarSetf('gedcom')
 
 " GTK RC
 au BufNewFile,BufRead .gtkrc*,gtkrc*           call s:StarSetf('gtkrc')
@@ -2407,8 +2538,11 @@ au! BufNewFile,BufRead *jarg*
 " Kconfig
 au BufNewFile,BufRead Kconfig.*                        call s:StarSetf('kconfig')
 
+" Lilo: Linux loader
+au BufNewFile,BufRead lilo.conf*               call s:StarSetf('lilo')
+
 " Logcheck
-au BufNewFile,BufRead /etc/logcheck/*.d*/*     call s:StarSetf('logcheck')
+au BufNewFile,BufRead */etc/logcheck/*.d*/*    call s:StarSetf('logcheck')
 
 " Makefile
 au BufNewFile,BufRead [mM]akefile*             call s:StarSetf('make')
@@ -2417,10 +2551,14 @@ au BufNewFile,BufRead [mM]akefile*              call s:StarSetf('make')
 au BufNewFile,BufRead [rR]akefile*             call s:StarSetf('ruby')
 
 " Mail (also matches muttrc.vim, so this is below the other checks)
-au BufNewFile,BufRead mutt[[:alnum:]._-]\{6\}  setf mail
+au BufNewFile,BufRead mutt[[:alnum:]._-]\\\{6\}        setf mail
 
 " Modconf
-au BufNewFile,BufRead /etc/modprobe.*          call s:StarSetf('modconf')
+au BufNewFile,BufRead */etc/modutils/*
+       \ if executable(expand("<afile>")) != 1
+       \|  call s:StarSetf('modconf')
+       \|endif
+au BufNewFile,BufRead */etc/modprobe.*         call s:StarSetf('modconf')
 
 " Mutt setup file
 au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc*  call s:StarSetf('muttrc')
@@ -2430,7 +2568,7 @@ au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc*           call s:StarSetf('muttrc')
 au BufNewFile,BufRead tmac.*                   call s:StarSetf('nroff')
 
 " Pam conf
-au BufNewFile,BufRead /etc/pam.d/*             call s:StarSetf('pamconf')
+au BufNewFile,BufRead */etc/pam.d/*            call s:StarSetf('pamconf')
 
 " Printcap and Termcap
 au BufNewFile,BufRead *printcap*
@@ -2442,6 +2580,23 @@ au BufNewFile,BufRead *termcap*
        \|  let b:ptcap_type = "term" | call s:StarSetf('ptcap')
        \|endif
 
+" ReDIF
+" Only used when the .rdf file was not detected to be XML.
+au BufRead,BufNewFile *.rdf                    call s:Redif()
+func! s:Redif()
+  let lnum = 1
+  while lnum <= 5 && lnum < line('$')
+    if getline(lnum) =~ "^\ctemplate-type:"
+      setf redif
+      return
+    endif
+    let lnum = lnum + 1
+  endwhile
+endfunc
+
+" Remind
+au BufNewFile,BufRead .reminders*              call s:StarSetf('remind')
+
 " Vim script
 au BufNewFile,BufRead *vimrc*                  call s:StarSetf('vim')
 
@@ -2453,10 +2608,10 @@ au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* call s:StarSet
 
 " XFree86 config
 au BufNewFile,BufRead XF86Config-4*
-       \ let b:xf86c_xfree86_version = 4 | call s:StarSetf('xf86conf')
+       \ let b:xf86conf_xfree86_version = 4 | call s:StarSetf('xf86conf')
 au BufNewFile,BufRead XF86Config*
        \ if getline(1) =~ '\<XConfigurator\>'
-       \|  let b:xf86c_xfree86_version = 3
+       \|  let b:xf86conf_xfree86_version = 3
        \|endif
        \|call s:StarSetf('xf86conf')
 
@@ -2464,28 +2619,37 @@ au BufNewFile,BufRead XF86Config*
 au BufNewFile,BufRead *xmodmap*                        call s:StarSetf('xmodmap')
 
 " Xinetd conf
-au BufNewFile,BufRead /etc/xinetd.d/*          call s:StarSetf('xinetd')
+au BufNewFile,BufRead */etc/xinetd.d/*         call s:StarSetf('xinetd')
+
+" yum conf (close enough to dosini)
+au BufNewFile,BufRead */etc/yum.repos.d/*      call s:StarSetf('dosini')
 
 " Z-Shell script
 au BufNewFile,BufRead zsh*,zlog*               call s:StarSetf('zsh')
 
 
+" Plain text files, needs to be far down to not override others.  This avoids
+" the "conf" type being used if there is a line starting with '#'.
+au BufNewFile,BufRead *.txt,*.text             setf text
+
 
 " Use the filetype detect plugins.  They may overrule any of the previously
 " detected filetypes.
 runtime! ftdetect/*.vim
 
+" NOTE: The above command could have ended the filetypedetect autocmd group
+" and started another one. Let's make sure it has ended to get to a consistent
+" state.
+augroup END
 
 " Generic configuration file (check this last, it's just guessing!)
-au BufNewFile,BufRead,StdinReadPost *
+au filetypedetect BufNewFile,BufRead,StdinReadPost *
        \ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
        \    && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
        \       || getline(4) =~ '^#' || getline(5) =~ '^#') |
        \   setf conf |
        \ endif
 
-augroup END
-
 
 " If the GUI is already running, may still need to install the Syntax menu.
 " Don't do it when the 'M' flag is included in 'guioptions'.
index 90d404f..9b20ec4 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:    Aap recipe
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2003 Nov 04
+" Last Change: 2013 Apr 05
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -19,7 +19,7 @@ let b:undo_ftplugin = "setl fo< com< et<"
 setlocal fo-=t fo+=croql
 
 " Set 'comments' to format dashed lists in comments.
-setlocal comments=s:#\ -,m:#\ \,e:#,n:#,fb:-
+setlocal comments=s:#\ -,m:#\ \ ,e:#,n:#,fb:-
 
 " Expand tabs to spaces to avoid trouble.
 setlocal expandtab
diff --git a/runtime/ftplugin/abap.vim b/runtime/ftplugin/abap.vim
new file mode 100644 (file)
index 0000000..956b002
--- /dev/null
@@ -0,0 +1,29 @@
+" Vim filetype plugin file
+" Language:    ABAP
+" Author:      Steven Oliver <oliver.steven@gmail.com>
+" Copyright:   Copyright (c) 2013 Steven Oliver
+" License:     You may redistribute this under the same terms as Vim itself
+" --------------------------------------------------------------------------
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal softtabstop=2 shiftwidth=2
+setlocal suffixesadd=.abap
+
+" Windows allows you to filter the open file dialog
+if has("gui_win32") && !exists("b:browsefilter")
+  let b:browsefilter = "ABAP Source Files (*.abap)\t*.abap\n" .
+                     \ "All Files (*.*)\t*.*\n"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=4 sts=4 et tw=80 :
index 873b9bf..b263d0c 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:     Abaqus finite element input file (www.abaqus.com)
 " Maintainer:   Carl Osterwisch <osterwischc@asme.org>
-" Last Change:  2008 Oct 5
+" Last Change:  2012 Apr 30
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin") | finish | endif
@@ -51,7 +51,7 @@ if has("gui_win32") && !exists("b:browsefilter")
     \ "Abaqus Results (*.dat)\t*.dat\n" .
     \ "Abaqus Messages (*.pre *.msg *.sta)\t*.pre;*.msg;*.sta\n" .
     \ "All Files (*.*)\t*.*\n"
-    let b:undo_ftplugin .= "|unlet b:browsefilter"
+    let b:undo_ftplugin .= "|unlet! b:browsefilter"
 endif
 
 " Define patterns for the matchit plugin
@@ -62,7 +62,7 @@ if exists("loaded_matchit") && !exists("b:match_words")
     \ '\*assembly:\*end\s*assembly,' .
     \ '\*instance:\*end\s*instance,' .
     \ '\*step:\*end\s*step'
-    let b:undo_ftplugin .= "|unlet b:match_ignorecase b:match_words"
+    let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words"
 endif
 
 " Define keys used to move [count] keywords backward or forward.
@@ -85,5 +85,13 @@ endfunction
 let b:undo_ftplugin .= "|unmap <buffer> [[|unmap <buffer> ]]"
     \ . "|unmap <buffer> <LocalLeader><LocalLeader>"
 
+" Undo must be done in nocompatible mode for <LocalLeader>.
+let b:undo_ftplugin = "let s:cpo_save = &cpoptions|"
+    \ . "set cpoptions&vim|"
+    \ . b:undo_ftplugin
+    \ . "|let &cpoptions = s:cpo_save"
+    \ . "|unlet s:cpo_save"
+
 " Restore saved compatibility options
 let &cpoptions = s:cpo_save
+unlet s:cpo_save
index 091181f..0809e7b 100644 (file)
@@ -7,7 +7,7 @@
 "              Neil Bird <neil@fnxweb.com>
 "      $Author: krischik $
 "       $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
-"      Version: 4.6
+"      Version: 4.6 with patch from David Bürgin
 "    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/ftplugin/ada.vim $
 "      History: 24.05.2006 MK Unified Headers
@@ -42,7 +42,7 @@ set cpoptions-=C
 
 " Section: Comments  {{{1
 "
-setlocal comments=O:--,:--\ \
+setlocal comments=O:--,:--\ \ 
 setlocal commentstring=--\ \ %s
 setlocal complete=.,w,b,u,t,i
 
index 648fca1..5905858 100644 (file)
@@ -41,3 +41,4 @@ let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index cb95e6b..c501a99 100644 (file)
@@ -12,5 +12,4 @@ endif
 run ftplugin/lisp.vim
 
 setl lw-=if
-setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,
-      \for,schema,while
+setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,for,schema,while
index 2b841ef..660dab4 100644 (file)
@@ -57,3 +57,4 @@ let b:undo_ftplugin = "unlet! b:match_words b:match_ignorecase b:browsefilter |
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 162205b..19e8c51 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:    C
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2007 Sep 25
+" Last Change: 2012 Jul 10
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -36,11 +36,11 @@ endif
 
 " When the matchit plugin is loaded, this makes the % command skip parens and
 " braces in comments.
-let b:match_words = &matchpairs
+let b:match_words = &matchpairs . ',^\s*#\s*if\(\|def\|ndef\)\>:^\s*#\s*elif\>:^\s*#\s*else\>:^\s*#\s*endif\>'
 let b:match_skip = 's:comment\|string\|character'
 
 " Win32 can filter files in the browse dialog
-if has("gui_win32") && !exists("b:browsefilter")
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
   if &ft == "cpp"
     let b:browsefilter = "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
          \ "C Header Files (*.h)\t*.h\n" .
index 30cd7b5..ee83c79 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:         generic Changelog file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2009-05-25
+" Latest Revision:  2012-08-23
 " Variables:
 "   g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) -
 "       description: the timeformat used in ChangeLog entries.
@@ -99,16 +99,17 @@ if &filetype == 'changelog'
   function! s:try_reading_file(path)
     try
       return readfile(a:path)
+    catch
+      return []
     endtry
-    return []
   endfunction
 
   function! s:passwd_field(line, field)
     let fields = split(a:line, ':', 1)
-    if len(fields) < field
+    if len(fields) < a:field
       return ""
     endif
-    return fields[field - 1]
+    return fields[a:field - 1]
   endfunction
 
   function! s:capitalize(word)
@@ -178,7 +179,7 @@ if &filetype == 'changelog'
     " Look for an entry for today by our user.
     let date = strftime(g:changelog_dateformat)
     let search = s:substitute_items(g:changelog_date_entry_search, date,
-                                  \ g:changelog_username)
+                                  \ s:username())
     if search(search) > 0
       " Ok, now we look for the end of the date entry, and add an entry.
       call cursor(nextnonblank(line('.') + 1), 1)
@@ -197,7 +198,7 @@ if &filetype == 'changelog'
 
       " No entry today, so create a date-user header and insert an entry.
       let todays_entry = s:substitute_items(g:changelog_new_date_format,
-                                          \ date, g:changelog_username)
+                                          \ date, s:username())
       " Make sure we have a cursor positioning.
       if stridx(todays_entry, '{cursor}') == -1
         let todays_entry = todays_entry . '{cursor}'
diff --git a/runtime/ftplugin/clojure.vim b/runtime/ftplugin/clojure.vim
new file mode 100644 (file)
index 0000000..91aba80
--- /dev/null
@@ -0,0 +1,79 @@
+" Vim filetype plugin file
+" Language:     Clojure
+" Author:       Meikel Brandmeyer <mb@kotka.de>
+"
+" Maintainer:   Sung Pae <self@sungpae.com>
+" URL:          https://github.com/guns/vim-clojure-static
+" License:      Same as Vim
+" Last Change:  30 January 2013
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+    finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = 'setlocal define< formatoptions< comments< commentstring<'
+
+" There will be false positives, but this is better than missing the whole set
+" of user-defined def* definitions.
+setlocal define=\\v[(/]def(ault)@!\\S*
+
+" Remove 't' from 'formatoptions' to avoid auto-wrapping code. The '+=croql'
+" is standard ftplugin boilerplate, although it is arguably intrusive.
+setlocal formatoptions-=t formatoptions+=croql
+
+" Lisp comments are routinely nested (e.g. ;;; SECTION HEADING)
+setlocal comments=n:;
+setlocal commentstring=;\ %s
+
+" Provide insert mode completions for special forms and clojure.core. As
+" 'omnifunc' is set by popular Clojure REPL client plugins, we also set
+" 'completefunc' so that the user has some form of completion available when
+" 'omnifunc' is set and no REPL connection exists.
+for s:setting in ['omnifunc', 'completefunc']
+    if exists('&' . s:setting) && empty(eval('&' . s:setting))
+        execute 'setlocal ' . s:setting . '=clojurecomplete#Complete'
+        let b:undo_ftplugin .= ' | setlocal ' . s:setting . '<'
+    endif
+endfor
+
+" Take all directories of the CLOJURE_SOURCE_DIRS environment variable
+" and add them to the path option.
+"
+" This is a legacy option for VimClojure users.
+if exists('$CLOJURE_SOURCE_DIRS')
+    for s:dir in split($CLOJURE_SOURCE_DIRS, (has("win32") || has("win64")) ? ';' : ':')
+        let s:dir = fnameescape(s:dir)
+        " Whitespace escaping for Windows
+        let s:dir = substitute(s:dir, '\', '\\\\', 'g')
+        let s:dir = substitute(s:dir, '\ ', '\\ ', 'g')
+        execute "setlocal path+=" . s:dir . "/**"
+    endfor
+    let b:undo_ftplugin .= ' | setlocal path<'
+endif
+
+" Skip brackets in ignored syntax regions when using the % command
+if exists('loaded_matchit')
+    let b:match_words = &matchpairs
+    let b:match_skip = 's:comment\|string\|regex\|character'
+    let b:undo_ftplugin .= ' | unlet! b:match_words b:match_skip'
+endif
+
+" Win32 can filter files in the browse dialog
+if has("gui_win32") && !exists("b:browsefilter")
+    let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" .
+                       \ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
+                       \ "Java Source Files (*.java)\t*.java\n" .
+                       \ "All Files (*.*)\t*.*\n"
+    let b:undo_ftplugin .= ' | unlet! b:browsefilter'
+endif
+
+let &cpo = s:cpo_save
+
+unlet! s:cpo_save s:setting s:dir
+
+" vim:sts=4 sw=4 et:
index df607b1..7fde42e 100644 (file)
@@ -39,3 +39,4 @@ let b:undo_ftplugin = "unlet! b:browsefilter | " . b:undo_ftplugin
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 0ff3c9d..7c2cbda 100644 (file)
@@ -10,6 +10,8 @@ endif
 
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Set 'formatoptions' to break comment lines but not other lines,
 " and insert the comment leader when hitting <CR> or using "o".
@@ -22,3 +24,6 @@ if has("gui_win32") && !exists("b:browsefilter")
     let b:browsefilter = "C# Source Files (*.cs)\t*.cs\n" .
                       \ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index ac02088..3a09c3b 100644 (file)
@@ -24,3 +24,4 @@ let b:undo_ftplugin = "unlet! b:match_words"
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 3f89c72..4ae09f9 100644 (file)
@@ -45,3 +45,4 @@ let b:undo_ftplugin = "setlocal commentstring< formatoptions<" .
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index a29d46a..2ec1a59 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:    Cucumber
 " Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
-" Last Change: 2010 Aug 09
+" Last Change: 2013 Jun 01
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -9,6 +9,9 @@ if (exists("b:did_ftplugin"))
 endif
 let b:did_ftplugin = 1
 
+let s:keepcpo= &cpo
+set cpo&vim
+
 setlocal formatoptions-=t formatoptions+=croql
 setlocal comments=:# commentstring=#\ %s
 setlocal omnifunc=CucumberComplete
@@ -18,11 +21,27 @@ let b:undo_ftplugin = "setl fo< com< cms< ofu<"
 let b:cucumber_root = expand('%:p:h:s?.*[\/]\%(features\|stories\)\zs[\/].*??')
 
 if !exists("g:no_plugin_maps") && !exists("g:no_cucumber_maps")
-  nmap <silent><buffer> <C-]>       :<C-U>exe <SID>jump('edit',v:count)<CR>
-  nmap <silent><buffer> <C-W>]      :<C-U>exe <SID>jump('split',v:count)<CR>
-  nmap <silent><buffer> <C-W><C-]>  :<C-U>exe <SID>jump('split',v:count)<CR>
-  nmap <silent><buffer> <C-W>}      :<C-U>exe <SID>jump('pedit',v:count)<CR>
-  let b:undo_ftplugin .= "| sil! iunmap! <C-]>| sil! iunmap! <C-W>]| sil! iunmap! <C-W><C-]>| sil! iunmap! <C-W>}"
+  nnoremap <silent><buffer> <C-]>       :<C-U>exe <SID>jump('edit',v:count)<CR>
+  nnoremap <silent><buffer> [<C-D>      :<C-U>exe <SID>jump('edit',v:count)<CR>
+  nnoremap <silent><buffer> ]<C-D>      :<C-U>exe <SID>jump('edit',v:count)<CR>
+  nnoremap <silent><buffer> <C-W>]      :<C-U>exe <SID>jump('split',v:count)<CR>
+  nnoremap <silent><buffer> <C-W><C-]>  :<C-U>exe <SID>jump('split',v:count)<CR>
+  nnoremap <silent><buffer> <C-W>d      :<C-U>exe <SID>jump('split',v:count)<CR>
+  nnoremap <silent><buffer> <C-W><C-D>  :<C-U>exe <SID>jump('split',v:count)<CR>
+  nnoremap <silent><buffer> <C-W>}      :<C-U>exe <SID>jump('pedit',v:count)<CR>
+  nnoremap <silent><buffer> [d          :<C-U>exe <SID>jump('pedit',v:count)<CR>
+  nnoremap <silent><buffer> ]d          :<C-U>exe <SID>jump('pedit',v:count)<CR>
+  let b:undo_ftplugin .=
+        \ "|sil! nunmap <buffer> <C-]>" .
+        \ "|sil! nunmap <buffer> [<C-D>" .
+        \ "|sil! nunmap <buffer> ]<C-D>" .
+        \ "|sil! nunmap <buffer> <C-W>]" .
+        \ "|sil! nunmap <buffer> <C-W><C-]>" .
+        \ "|sil! nunmap <buffer> <C-W>d" .
+        \ "|sil! nunmap <buffer> <C-W><C-D>" .
+        \ "|sil! nunmap <buffer> <C-W>}" .
+        \ "|sil! nunmap <buffer> [d" .
+        \ "|sil! nunmap <buffer> ]d"
 endif
 
 function! s:jump(command,count)
@@ -38,7 +57,7 @@ function! s:jump(command,count)
 endfunction
 
 function! s:allsteps()
-  let step_pattern = '\C^\s*\K\k*\>\s*\zs\S.\{-\}\ze\s*\%(do\|{\)\s*\%(|[^|]*|\s*\)\=\%($\|#\)'
+  let step_pattern = '\C^\s*\K\k*\>\s*(\=\s*\zs\S.\{-\}\ze\s*)\=\s*\%(do\|{\)\s*\%(|[^|]*|\s*\)\=\%($\|#\)'
   let steps = []
   for file in split(glob(b:cucumber_root.'/**/*.rb'),"\n")
     let lines = readfile(file)
@@ -55,7 +74,7 @@ function! s:allsteps()
 endfunction
 
 function! s:steps(lnum)
-  let c = indent(a:lnum) + 1
+  let c = match(getline(a:lnum), '\S') + 1
   while synIDattr(synID(a:lnum,c,1),'name') !~# '^$\|Region$'
     let c = c + 1
   endwhile
@@ -129,4 +148,7 @@ function! CucumberComplete(findstart,base) abort
   return sort(steps)
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set sts=2 sw=2:
index 80ff8ef..c74284f 100644 (file)
@@ -3,8 +3,8 @@
 " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainers:   Michael Piefel <piefel@informatik.hu-berlin.de>
 "                       Stefano Zacchiroli <zack@debian.org>
-" Last Change:  2010-07-11
-" License:      GNU GPL, version 2.0 or later
+" Last Change:  2012-01-31
+" License:      Vim License
 " URL:          http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/debchangelog.vim
 
 " Bug completion requires apt-listbugs installed for Debian packages or
diff --git a/runtime/ftplugin/docbk.vim b/runtime/ftplugin/docbk.vim
new file mode 100644 (file)
index 0000000..cbceb6b
--- /dev/null
@@ -0,0 +1,24 @@
+" Vim filetype plugin file
+" Language:        DocBook
+" Maintainer:      Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2012-04-25
+
+if exists('b:did_ftplugin')
+  finish
+endif
+
+if !exists('b:docbk_type')
+  if expand('%:e') == 'sgml'
+    let b:docbk_type = 'sgml'
+  else
+    let b:docbk_type = 'xml'
+  endif
+endif
+
+if b:docbk_type == 'sgml'
+  runtime! ftplugin/sgml.vim ftplugin/sgml_*.vim ftplugin/sgml/*.vim
+else
+  runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+endif
+
+let b:undo_ftplugin = "unlet! b:docbk_type"
index 6e581e7..dbc02d8 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:    MS-DOS .bat files
 " Maintainer:  Mike Williams <mrw@eandem.co.uk>
-" Last Change: 27th May 2009
+" Last Change: 8th May 2012
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -11,6 +11,9 @@ endif
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " BAT comment formatting
 setlocal comments=b:rem,b:@rem,b:REM,b:@REM,:::
 setlocal formatoptions-=t formatoptions+=rol
@@ -19,3 +22,9 @@ setlocal formatoptions-=t formatoptions+=rol
 if has("gui_win32") && !exists("b:browsefilter")
   let b:browsefilter = "DOS Batch Files (*.bat, *.cmd)\t*.bat;*.cmd\nAll Files (*.*)\t*.*\n"
 endif
+
+let b:undo_ftplugin = "setlocal comments< formatoptions<"
+    \ . "| unlet! b:browsefiler"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index eed5ca6..6c08f66 100644 (file)
@@ -37,3 +37,4 @@ let b:undo_ftplugin = "setlocal commentstring< comments< formatoptions<" .
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/erlang.vim b/runtime/ftplugin/erlang.vim
new file mode 100644 (file)
index 0000000..2bbc345
--- /dev/null
@@ -0,0 +1,87 @@
+" Vim ftplugin file
+" Language:     Erlang
+" Author:       Oscar Hellström <oscar@oscarh.net>
+" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+"               Eduardo Lopez (http://github.com/tapichu)
+" License:      Vim license
+" Version:      2012/01/25
+
+if exists('b:did_ftplugin')
+       finish
+else
+       let b:did_ftplugin = 1
+endif
+
+if exists('s:did_function_definitions')
+       call s:SetErlangOptions()
+       finish
+else
+       let s:did_function_definitions = 1
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if !exists('g:erlang_keywordprg')
+       let g:erlang_keywordprg = 'erl -man'
+endif
+
+if !exists('g:erlang_folding')
+       let g:erlang_folding = 0
+endif
+
+let s:erlang_fun_begin = '^\a\w*(.*$'
+let s:erlang_fun_end   = '^[^%]*\.\s*\(%.*\)\?$'
+
+function s:SetErlangOptions()
+       if g:erlang_folding
+               setlocal foldmethod=expr
+               setlocal foldexpr=GetErlangFold(v:lnum)
+               setlocal foldtext=ErlangFoldText()
+       endif
+
+       setlocal comments=:%%%,:%%,:%
+       setlocal commentstring=%%s
+
+       setlocal formatoptions+=ro
+       let &l:keywordprg = g:erlang_keywordprg
+endfunction
+
+function GetErlangFold(lnum)
+       let lnum = a:lnum
+       let line = getline(lnum)
+
+       if line =~ s:erlang_fun_end
+               return '<1'
+       endif
+
+       if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
+               return '1'
+       endif
+
+       if line =~ s:erlang_fun_begin
+               return '>1'
+       endif
+
+       return '='
+endfunction
+
+function ErlangFoldText()
+       let line    = getline(v:foldstart)
+       let foldlen = v:foldend - v:foldstart + 1
+       let lines   = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
+       if foldlen < 10
+               let lines = ' ' . lines
+       endif
+       let retval = '+' . v:folddashes . lines
+
+       return retval
+endfunction
+
+call s:SetErlangOptions()
+
+let b:undo_ftplugin = "setlocal foldmethod< foldexpr< foldtext<"
+       \ . " comments< commentstring< formatoptions<"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 7c19a09..9bb8e86 100644 (file)
@@ -1,9 +1,7 @@
 " Vim filetype plugin
 " Language:            eRuby
 " Maintainer:          Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:         2010 Apr 15
-" URL:                 http://vim-ruby.rubyforge.org
-" Anon CVS:            See above site
+" URL:                 https://github.com/vim-ruby/vim-ruby
 " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
 
 " Only do this when not done yet for this buffer
@@ -23,13 +21,12 @@ if !exists("g:eruby_default_subtype")
   let g:eruby_default_subtype = "html"
 endif
 
-if !exists("b:eruby_subtype")
+if &filetype =~ '^eruby\.'
+  let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
+elseif !exists("b:eruby_subtype")
   let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
   let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
   if b:eruby_subtype == ''
-    let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
-  endif
-  if b:eruby_subtype == ''
     let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+$')
   endif
   if b:eruby_subtype == 'rhtml'
@@ -100,5 +97,6 @@ let b:undo_ftplugin = "setl cms< "
       \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim: nowrap sw=2 sts=2 ts=8:
diff --git a/runtime/ftplugin/falcon.vim b/runtime/ftplugin/falcon.vim
new file mode 100644 (file)
index 0000000..4fc135b
--- /dev/null
@@ -0,0 +1,48 @@
+" Vim filetype plugin file
+" Language:     Falcon
+" Author:       Steven Oliver <oliver.steven@gmail.com>
+" Copyright:    Copyright (c) 2009-2013 Steven Oliver
+" License:      You may redistribute this under the same terms as Vim itself
+" --------------------------------------------------------------------------
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal softtabstop=4 shiftwidth=4 fileencoding=utf-8
+setlocal suffixesadd=.fal,.ftd
+
+" Matchit support
+if exists("loaded_matchit") && !exists("b:match_words")
+  let b:match_ignorecase = 0
+
+  let b:match_words =
+       \ '\<\%(if\|case\|while\|until\|for\|do\|class\)\>=\@!' .
+       \ ':' .
+       \ '\<\%(else\|elsif\|when\)\>' .
+       \ ':' .
+       \ '\<end\>' .
+       \ ',{:},\[:\],(:)'
+endif
+
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+" Windows allows you to filter the open file dialog
+if has("gui_win32") && !exists("b:browsefilter")
+  let b:browsefilter = "Falcon Source Files (*.fal *.ftd)\t*.fal;*.ftd\n" .
+                     \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setlocal tabstop< shiftwidth< expandtab< fileencoding<"
+       \ . " suffixesadd< comments<"
+       \ . "| unlet! b:browsefiler"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=4 sts=4 et tw=80 :
index 741465d..110dab3 100644 (file)
@@ -1,17 +1,21 @@
 " Vim settings file
-" Language:    Fortran90 (and Fortran95, Fortran77, F and elf90)
-" Version:     0.46
-" Last Change: 2010 July 24
+" Language:    Fortran 2008 (and older: Fortran 2003, 95, 90, 77, 66)
+" Version:     0.48
+" Last Change: 2012 Apr. 18
 " Maintainer:  Ajit J. Thakkar <ajit@unb.ca>; <http://www.unb.ca/chem/ajit/>
 " Usage:       Do :help fortran-plugin from Vim
 " Credits:
-" Useful suggestions were made by Stefano Zacchiroli and Hendrik Merx.
+" Useful suggestions were made by Stefano Zacchiroli, Hendrik Merx, and Ben
+" Fritz.
 
 " Only do these settings when not done yet for this buffer
 if exists("b:did_ftplugin")
   finish
 endif
 
+let s:cposet=&cpoptions
+set cpoptions&vim
+
 " Don't do other file type settings for this buffer
 let b:did_ftplugin = 1
 
@@ -25,7 +29,7 @@ if !exists("b:fortran_fixed_source")
     " User guarantees fixed source form
     let b:fortran_fixed_source = 1
   else
-    " f90 and f95 allow both fixed and free source form
+    " Modern Fortran allows both fixed and free source form
     " assume fixed source form unless signs of free source form
     " are detected in the first five columns of the first s:lmax lines
     " Detection becomes more accurate and time-consuming if more lines
@@ -76,10 +80,7 @@ endif
 setlocal fo+=tcql
 
 setlocal include=^\\c#\\=\\s*include\\s\\+
-setlocal suffixesadd+=.f95,.f90,.for,.f,.F,.f77,.ftn,.fpp
-
-let s:cposet=&cpoptions
-set cpoptions-=C
+setlocal suffixesadd+=.f08,.f03,.f95,.f90,.for,.f,.F,.f77,.ftn,.fpp
 
 " Define patterns for the matchit plugin
 if !exists("b:match_words")
@@ -89,6 +90,7 @@ if !exists("b:match_words")
   let s:notprocedure = '\%(\s\+procedure\>\)\@!'
   let b:match_ignorecase = 1
   let b:match_words =
+    \ '(:),' .
     \ '\<select\s*case\>:' . s:notselect. '\<case\>:\<end\s*select\>,' .
     \ s:notelse . '\<if\s*(.\+)\s*then\>:' .
     \ '\<else\s*\%(if\s*(.\+)\s*then\)\=\>:\<end\s*if\>,'.
@@ -96,6 +98,9 @@ if !exists("b:match_words")
     \ s:notend . '\<do\>:\<end\s*do\>,'.
     \ s:notelse . '\<where\>:\<elsewhere\>:\<end\s*where\>,'.
     \ s:notend . '\<type\s*[^(]:\<end\s*type\>,'.
+    \ s:notend . '\<forall\>:\<end\s*forall\>,'.
+    \ s:notend . '\<associate\>:\<end\s*associate\>,'.
+    \ s:notend . '\<enum\>:\<end\s*enum\>,'.
     \ s:notend . '\<interface\>:\<end\s*interface\>,'.
     \ s:notend . '\<subroutine\>:\<end\s*subroutine\>,'.
     \ s:notend . '\<function\>:\<end\s*function\>,'.
@@ -105,7 +110,7 @@ endif
 
 " File filters for :browse e
 if has("gui_win32") && !exists("b:browsefilter")
-  let b:browsefilter = "Fortran Files (*.f;*.F;*.for;*.f77;*.f90;*.f95;*.fpp;*.ftn)\t*.f;*.F;*.for;*.f77;*.f90;*.f95;*.fpp;*.ftn\n" .
+  let b:browsefilter = "Fortran Files (*.f;*.for;*.f77;*.f90;*.f95;*.f03;*.f08;*.fpp;*.ftn)\t*.f;*.for;*.f77;*.f90;*.f95;*.f03;*.f08;*.fpp;*.ftn\n" .
     \ "All Files (*.*)\t*.*\n"
 endif
 
index e043c75..5fe5b2b 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:    generic git output
 " Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -10,7 +10,9 @@ endif
 let b:did_ftplugin = 1
 
 if !exists('b:git_dir')
-  if expand('%:p') =~# '\.git\>'
+  if expand('%:p') =~# '[\/]\.git[\/]modules[\/]'
+    " Stay out of the way
+  elseif expand('%:p') =~# '\.git\>'
     let b:git_dir = matchstr(expand('%:p'),'.*\.git\>')
   elseif $GIT_DIR != ''
     let b:git_dir = $GIT_DIR
index 94d635c..e861900 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:    git commit file
 " Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -11,13 +11,14 @@ endif
 runtime! ftplugin/git.vim
 let b:did_ftplugin = 1
 
+setlocal nomodeline tabstop=8 formatoptions-=croq formatoptions+=tl
+
+let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions<'
+
 if &textwidth == 0
   " make sure that log messages play nice with git-log on standard terminals
   setlocal textwidth=72
-  if !exists("b:undo_ftplugin")
-    let b:undo_ftplugin = ""
-  endif
-  let b:undo_ftplugin = b:undo_ftplugin . "|setl tw<"
+  let b:undo_ftplugin .= "|setl tw<"
 endif
 
 if exists("g:no_gitcommit_commands") || v:version < 700
@@ -28,8 +29,6 @@ if !exists("b:git_dir")
   let b:git_dir = expand("%:p:h")
 endif
 
-" Automatically diffing can be done with:
-"   autocmd FileType gitcommit DiffGitCached | wincmd p
 command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
 
 function! s:diffcomplete(A,L,P)
@@ -58,11 +57,11 @@ function! s:gitdiffcached(bang,gitdir,...)
   else
     let extra = "-p --stat=".&columns
   endif
-  call system(git." diff --cached --no-color ".extra." > ".(exists("*shellescape") ? shellescape(name) : name))
+  call system(git." diff --cached --no-color --no-ext-diff ".extra." > ".(exists("*shellescape") ? shellescape(name) : name))
   exe "pedit ".(exists("*fnameescape") ? fnameescape(name) : name)
   wincmd P
   let b:git_dir = a:gitdir
   command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
-  nnoremap <silent> q :q<CR>
+  nnoremap <buffer> <silent> q :q<CR>
   setlocal buftype=nowrite nobuflisted noswapfile nomodifiable filetype=git
 endfunction
diff --git a/runtime/ftplugin/gprof.vim b/runtime/ftplugin/gprof.vim
new file mode 100644 (file)
index 0000000..750751c
--- /dev/null
@@ -0,0 +1,32 @@
+" Language:    gprof
+" Maintainer:  Dominique Pelle <dominique.pelle@gmail.com>
+" Last Change: 2013 Jun 09
+
+" When cursor is on one line of the gprof call graph,
+" calling this function jumps to this function in the call graph.
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin=1
+
+fun! <SID>GprofJumpToFunctionIndex()
+  let l:line = getline('.')
+  if l:line =~ '[\d\+\]$'
+    " We're in a line in the call graph.
+    norm! $y%
+    call search('^' . escape(@", '[]'), 'sw')
+    norm! zz
+  elseif l:line =~ '^\(\s\+[0-9\.]\+\)\{3}\s\+'
+    " We're in line in the flat profile.
+    norm! 55|eby$
+    call search('^\[\d\+\].*\d\s\+' .  escape(@", '[]*.') . '\>', 'sW')
+    norm! zz
+  endif
+endfun
+
+" Pressing <C-]> on a line in the gprof flat profile or in
+" the call graph, jumps to the corresponding function inside
+" the flat profile.
+map <buffer> <silent> <C-]> :call <SID>GprofJumpToFunctionIndex()<CR>
+
+" vim:sw=2 fdm=indent
index b2c1eca..654f1fc 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin
-" Language:            Haml
-" Maintainer:          Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:         2010 May 21
+" Language:    Haml
+" Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
+" Last Change: 2013 Jun 01
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -18,6 +18,7 @@ let s:match_words = ""
 
 runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
 unlet! b:did_ftplugin
+set matchpairs-=<:>
 
 " Override our defaults if these were set by an included ftplugin.
 if exists("b:undo_ftplugin")
@@ -63,5 +64,6 @@ let b:undo_ftplugin = "setl cms< com< "
       \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:set sw=2:
index ddb40f9..c23adc4 100644 (file)
@@ -12,7 +12,7 @@ endif
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
-let cpo_save = &cpo
+let s:cpo_save = &cpo
 set cpo-=C
 
 let b:undo_ftplugin = "setl fo< com< tw< commentstring<"
@@ -57,5 +57,6 @@ if exists("loaded_matchit")
 endif
 
 setlocal ignorecase
-let &cpo = cpo_save
+let &cpo = s:cpo_save
+unlet s:cpo_save
 setlocal cpo+=M                " makes \%( match \)
index fdac410..a0a0f29 100644 (file)
@@ -13,7 +13,10 @@ set cpo&vim
 
 let b:undo_ftplugin = "setl fo< tw< cole< cocu<"
 
-setlocal formatoptions+=tcroql textwidth=78 cole=2 cocu=nc
+setlocal formatoptions+=tcroql textwidth=78
+if has("conceal")
+  setlocal cole=2 cocu=nc
+endif
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
index 5f1384b..418da06 100644 (file)
@@ -88,3 +88,4 @@ let b:undo_ftplugin = "setlocal commentstring< matchpairs< omnifunc< comments< f
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 4f35d04..0ee3e8d 100644 (file)
@@ -34,5 +34,6 @@ let &l:include = '\\input'
 setlocal suffixesadd=.tex
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:sts=2:sw=2:
index dedb328..33ef151 100644 (file)
@@ -8,6 +8,8 @@ let b:did_ftplugin = 1
 
 setlocal foldmethod=syntax
 
+" Using line continuation here.
+let s:cpo_save = &cpo
 set cpo-=C
 
 " matchit support
@@ -26,3 +28,6 @@ if has("gui_win32") && !exists("b:browsefilter")
     let b:browsefilter = "InstallShield Files (*.rul)\t*.rul\n" .
                       \ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 6c7b367..292cb6b 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:    Java
 " Maintainer:  Dan Sharp <dwsharp at users dot sourceforge dot net>
-" Last Change:  20 Jan 2009
+" Last Change:  2012 Mar 11
 " URL:         http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
@@ -48,3 +48,4 @@ let b:undo_ftplugin = "setlocal suffixes< suffixesadd<" .
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 9c0eb96..fbba863 100644 (file)
@@ -64,3 +64,4 @@ let b:undo_ftplugin = "unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 7be6422..05b40d4 100644 (file)
@@ -1,12 +1,13 @@
 " Vim filetype plugin file
 " Language:    Kimwitu++
-" Maintainer:  Michael Piefel <piefel@informatik.hu-berlin.de>
-" Last Change: 16 August 2001
+" Maintainer:  Michael Piefel <entwurf@piefel.de>
+" Last Change: 10 March 2012
 
 " Behaves almost like C++
 runtime! ftplugin/cpp.vim ftplugin/cpp_*.vim ftplugin/cpp/*.vim
 
-set cpo-=C
+let s:cpo_save = &cpo
+set cpo&vim
 
 " Limit the browser to related files
 if has("gui_win32") && !exists("b:browsefilter")
@@ -18,3 +19,14 @@ endif
 
 " Set the errorformat for the Kimwitu++ compiler
 set efm+=kc%.%#:\ error\ at\ %f:%l:\ %m
+
+if exists("b:undo_ftplugin")
+    let b:undo_ftplugin = b:undo_ftplugin . " | setlocal efm<"
+       \ . "| unlet! b:browsefiler"
+else
+    let b:undo_ftplugin = "setlocal efm<"
+       \ . "| unlet! b:browsefiler"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index b477214..8bf6ae4 100644 (file)
@@ -1,10 +1,10 @@
 " Vim filetype plugin
 " Language:      Lisp
 " Maintainer:    Sergey Khorev <sergey.khorev@gmail.com>
-" URL:          http://iamphet.nm.ru/vim
+" URL:          http://sites.google.com/site/khorser/opensource/vim
 " Original author:    Dorai Sitaram <ds26@gte.com>
 " Original URL:                 http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
-" Last Change:   Nov 8, 2004
+" Last Change:   Feb 12, 2013
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -19,8 +19,11 @@ setl define=^\\s*(def\\k*
 setl formatoptions-=t
 setl iskeyword+=+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
 setl lisp
+setl commentstring=;%s
 
 " make comments behaviour like in c.vim
 " e.g. insertion of ;;; and ;; on normal "O" or "o" when staying in comment
 setl comments^=:;;;,:;;,sr:#\|,mb:\|,ex:\|#
 setl formatoptions+=croql
+
+let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp< commentstring<"
index 765f6b4..7d4671d 100644 (file)
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:    Logcheck
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Last Change: 2010 Jul 29
-" License:     GNU GPL, version 2.0
+" Last Change: 2012 Jan 15
+" License:     Vim License
 " URL: http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/logcheck.vim
 
 if exists("b:did_ftplugin")
index 297833f..3454a4d 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file.
 " Language:    Lua 4.0+
 " Maintainer:  Max Ischenko <mfi@ukr.net>
-" Last Change: 2008 Mar 25
+" Last Change: 2012 Mar 07
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -11,6 +11,9 @@ endif
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Set 'formatoptions' to break comment lines but not other lines, and insert
 " the comment leader when hitting <CR> or using "o".
 setlocal fo-=t fo+=croql
@@ -22,8 +25,6 @@ setlocal suffixesadd=.lua
 
 " The following lines enable the macros/matchit.vim plugin for
 " extended matching with the % key.
-
-set cpo-=C
 if exists("loaded_matchit")
 
   let b:match_ignorecase = 0
@@ -34,3 +35,8 @@ if exists("loaded_matchit")
     \ '\<repeat\>:\<until\>'
 
 endif " exists("loaded_matchit")
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+let b:undo_ftplugin = "setlocal fo< com< cms< suffixesadd<"
index 4a4c851..2a6bf4c 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:    Mail
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2009 Jun 03
+" Last Change: 2012 Nov 20
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -9,7 +9,7 @@ if exists("b:did_ftplugin")
 endif
 let b:did_ftplugin = 1
 
-let b:undo_ftplugin = "setl modeline< tw< fo<"
+let b:undo_ftplugin = "setl modeline< tw< fo< comments<"
 
 " Don't use modelines in e-mail messages, avoid trojan horses and nasty
 " "jokes" (e.g., setting 'textwidth' to 5).
@@ -23,6 +23,9 @@ endif
 " Set 'formatoptions' to break text lines and keep the comment leader ">".
 setlocal fo+=tcql
 
+" Add n:> to 'comments, in case it was removed elsewhere
+setlocal comments+=n:>
+
 " Add mappings, unless the user doesn't want this.
 if !exists("no_plugin_maps") && !exists("no_mail_maps")
   " Quote text by inserting "> "
index 38ee030..fb180c0 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:    Make
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2006 Jun 17
+" Last Change: 2013 Apr 22
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -26,3 +26,8 @@ setlocal commentstring=#\ %s
 
 " Including files.
 let &l:include = '^\s*include'
+
+" For matchit.vim, suggested by Albert Netymk.
+if exists("loaded_matchit")
+  let b:match_words = '\<if\(n\)\=\(eq\|def\)\>:\<else\>:\<endif\>,\<define\>:\<endef\>'
+endif
index eef0628..c6e1e9d 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:    man
 " Maintainer:  SungHyun Nam <goweol@gmail.com>
-" Last Change: 2008 Sep 17
+" Last Change: 2013 Jul 17
 
 " To make the ":Man" command available before editing a manual page, source
 " this script from your startup vimrc file.
@@ -15,6 +15,12 @@ if &filetype == "man"
   endif
   let b:did_ftplugin = 1
 
+  " Ensure Vim is not recursively invoked (man-db does this)
+  " when doing ctrl-[ on a man page reference.
+  if exists("$MANPAGER")
+    let $MANPAGER = ""
+  endif
+
   " allow dot and dash in manual page name.
   setlocal iskeyword+=\.,-
 
@@ -29,6 +35,8 @@ if &filetype == "man"
     nnoremap <buffer> <c-t> :call <SID>PopPage()<CR>
   endif
 
+  let b:undo_ftplugin = "setlocal iskeyword<"
+
 endif
 
 if exists(":Man") != 2
@@ -143,7 +151,7 @@ func <SID>GetPage(...)
   " Avoid warning for editing the dummy file twice
   setl buftype=nofile noswapfile
 
-  setl ma
+  setl ma nonu nornu nofen
   silent exec "norm 1GdG"
   let $MANWIDTH = winwidth(0)
   silent exec "r!/usr/bin/man ".s:GetCmdArg(sect, page)." | col -b"
index 9462082..5d6ebec 100644 (file)
@@ -1,19 +1,22 @@
 " Vim filetype plugin
 " Language:            Markdown
 " Maintainer:          Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:         2010 May 21
+" Last Change:         2013 May 30
 
 if exists("b:did_ftplugin")
   finish
 endif
 
 runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
-unlet! b:did_ftplugin
 
 setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=>\ %s
-setlocal formatoptions+=tcqln
+setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o
 setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+
 
-let b:undo_ftplugin .= "|setl cms< com< fo<"
+if exists('b:undo_ftplugin')
+  let b:undo_ftplugin .= "|setl cms< com< fo< flp<"
+else
+  let b:undo_ftplugin = "setl cms< com< fo< flp<"
+endif
 
 " vim:set sw=2:
index 1800dc8..6bfb3d7 100644 (file)
@@ -25,6 +25,4 @@ let b:undo_ftplugin = "setlocal suffixesadd< suffixes< "
        \ . "| unlet! b:match_words"
 
 let &cpo = s:save_cpo
-
-
-
+unlet s:save_cpo
index a591411..3ee7849 100644 (file)
@@ -2,22 +2,26 @@
 " Maintainer:  David Baelde        <firstname.name@ens-lyon.org>
 "              Mike Leary          <leary@nwlink.com>
 "              Markus Mottl        <markus.mottl@gmail.com>
+"              Pierre Vittet       <pierre-vittet@pvittet.com>
 "              Stefano Zacchiroli  <zack@bononia.it>
 "              Vincent Aravantinos <firstname.name@imag.fr>
 " URL:         http://www.ocaml.info/vim/ftplugin/ocaml.vim
-" Last Change: 2010 Jul 10 - Bugfix, thanks to Pat Rondon
-"              2008 Jul 17 - Bugfix related to fnameescape (VA)
-"              2007 Sep 09 - Added .annot support for ocamlbuild, python not 
-"                            needed anymore (VA)
-"              2006 May 01 - Added .annot support for file.whateverext (SZ)
-"                   2006 Apr 11 - Fixed an initialization bug; fixed ASS abbrev (MM)
-"              2005 Oct 13 - removed GPL; better matchit support (MM, SZ)
-"
+" Last Change:
+"              2013 Jul 26 - load default compiler settings (MM)
+"              2013 Jul 24 - removed superfluous efm-setting (MM)
+"              2013 Jul 22 - applied fixes supplied by Hirotaka Hamada (MM)
+"              2013 Mar 15 - Improved error format (MM)
+
 if exists("b:did_ftplugin")
   finish
 endif
 let b:did_ftplugin=1
 
+" Use standard compiler settings unless user wants otherwise
+if !exists("current_compiler")
+  :compiler ocaml
+endif
+
 " some macro
 if exists('*fnameescape')
   function! s:Fnameescape(s)
@@ -31,39 +35,28 @@ endif
 
 " Error handling -- helps moving where the compiler wants you to go
 let s:cposet=&cpoptions
-set cpo-=C
-setlocal efm=
-      \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
-      \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
-      \%+EReference\ to\ unbound\ regexp\ name\ %m,
-      \%Eocamlyacc:\ e\ -\ line\ %l\ of\ \"%f\"\\,\ %m,
-      \%Wocamlyacc:\ w\ -\ %m,
-      \%-Zmake%.%#,
-      \%C%m,
-      \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
-      \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
-      \%D%*\\a:\ Entering\ directory\ `%f',
-      \%X%*\\a:\ Leaving\ directory\ `%f',
-      \%DMaking\ %*\\a\ in\ %f
+set cpo&vim
 
 " Add mappings, unless the user didn't want this.
 if !exists("no_plugin_maps") && !exists("no_ocaml_maps")
   " (un)commenting
   if !hasmapto('<Plug>Comment')
     nmap <buffer> <LocalLeader>c <Plug>LUncomOn
-    vmap <buffer> <LocalLeader>c <Plug>BUncomOn
+    xmap <buffer> <LocalLeader>c <Plug>BUncomOn
     nmap <buffer> <LocalLeader>C <Plug>LUncomOff
-    vmap <buffer> <LocalLeader>C <Plug>BUncomOff
+    xmap <buffer> <LocalLeader>C <Plug>BUncomOff
   endif
 
-  nnoremap <buffer> <Plug>LUncomOn mz0i(* <ESC>$A *)<ESC>`z
+  nnoremap <buffer> <Plug>LUncomOn gI(* <End> *)<ESC>
   nnoremap <buffer> <Plug>LUncomOff :s/^(\* \(.*\) \*)/\1/<CR>:noh<CR>
-  vnoremap <buffer> <Plug>BUncomOn <ESC>:'<,'><CR>`<O<ESC>0i(*<ESC>`>o<ESC>0i*)<ESC>`<
-  vnoremap <buffer> <Plug>BUncomOff <ESC>:'<,'><CR>`<dd`>dd`<
+  xnoremap <buffer> <Plug>BUncomOn <ESC>:'<,'><CR>`<O<ESC>0i(*<ESC>`>o<ESC>0i*)<ESC>`<
+  xnoremap <buffer> <Plug>BUncomOff <ESC>:'<,'><CR>`<dd`>dd`<
 
-  if !hasmapto('<Plug>Abbrev')
-    iabbrev <buffer> ASS (assert (0=1) (* XXX *))
-  endif
+  nmap <buffer> <LocalLeader>s <Plug>OCamlSwitchEdit
+  nmap <buffer> <LocalLeader>S <Plug>OCamlSwitchNewWin
+
+  nmap <buffer> <LocalLeader>t <Plug>OCamlPrintType
+  xmap <buffer> <LocalLeader>t <Plug>OCamlPrintType
 endif
 
 " Let % jump between structure elements (due to Issac Trotts)
@@ -80,8 +73,8 @@ let b:match_ignorecase=0
 " switching between interfaces (.mli) and implementations (.ml)
 if !exists("g:did_ocaml_switch")
   let g:did_ocaml_switch = 1
-  map <LocalLeader>s :call OCaml_switch(0)<CR>
-  map <LocalLeader>S :call OCaml_switch(1)<CR>
+  nnoremap <Plug>OCamlSwitchEdit :<C-u>call OCaml_switch(0)<CR>
+  nnoremap <Plug>OCamlSwitchNewWin :<C-u>call OCaml_switch(1)<CR>
   fun OCaml_switch(newwin)
     if (match(bufname(""), "\\.mli$") >= 0)
       let fname = s:Fnameescape(substitute(bufname(""), "\\.mli$", ".ml", ""))
@@ -138,6 +131,10 @@ if exists("g:ocaml_folding")
   setlocal foldexpr=OMLetFoldLevel(v:lnum)
 endif
 
+let b:undo_ftplugin = "setlocal efm< foldmethod< foldexpr<"
+       \ . "| unlet! b:mw b:match_words b:match_ignorecase"
+
+
 " - Only definitions below, executed once -------------------------------------
 
 if exists("*OMLetFoldLevel")
@@ -211,7 +208,7 @@ endfunction
 " cursor position.
 "
 " Typing '<LocalLeader>t' (LocalLeader defaults to '\', see :h LocalLeader)
-" will cause " Ocaml_print_type function to be invoked with the right 
+" will cause " Ocaml_print_type function to be invoked with the right
 " argument depending on the current mode (visual or not).
 " >>
 "
@@ -221,9 +218,9 @@ endfunction
 "   - no need for python support
 "     + plus : more portable
 "     + minus: no more lazy parsing, it looks very fast however
-"     
+"
 "   - ocamlbuild support, ie.
-"     + the plugin finds the _build directory and looks for the 
+"     + the plugin finds the _build directory and looks for the
 "       corresponding file inside;
 "     + if the user decides to change the name of the _build directory thanks
 "       to the '-build-dir' option of ocamlbuild, the plugin will manage in
@@ -232,7 +229,7 @@ endfunction
 "     + if ocamlbuild is not used, the usual behaviour holds; ie. the .annot
 "       file should be in the same directory as the source file;
 "     + for vim plugin programmers:
-"       the variable 'b:_build_dir' contains the inferred path to the build 
+"       the variable 'b:_build_dir' contains the inferred path to the build
 "       directory, even if this one is not named '_build'.
 "
 " Bonus :
@@ -287,24 +284,27 @@ endfunction
   endfun
 
     " After call:
-    " - b:annot_file_path : 
+    "
+    "  Following information have been put in s:annot_file_list, using
+    "  annot_file_name name as key:
+    " - annot_file_path :
     "                       path to the .annot file corresponding to the
     "                       source file (dealing with ocamlbuild stuff)
-    " - b:_build_path: 
+    " - _build_path:
     "                       path to the build directory even if this one is
     "                       not named '_build'
+    " - date_of_last annot:
+    "                       Set to 0 until we load the file. It contains the
+    "                       date at which the file has been loaded.
   function! s:Locate_annotation()
-    if !b:annotation_file_located
-
+    let annot_file_name = s:Fnameescape(expand('%:t:r')).'.annot'
+    if !exists ("s:annot_file_list[annot_file_name]")
       silent exe 'cd' s:Fnameescape(expand('%:p:h'))
-
-      let annot_file_name = s:Fnameescape(expand('%:r')).'.annot'
-
       " 1st case : the annot file is in the same directory as the buffer (no ocamlbuild)
-      let b:annot_file_path = findfile(annot_file_name,'.')
-      if b:annot_file_path != ''
-        let b:annot_file_path = getcwd().'/'.b:annot_file_path
-        let b:_build_path = ''
+      let annot_file_path = findfile(annot_file_name,'.')
+      if annot_file_path != ''
+        let annot_file_path = getcwd().'/'.annot_file_path
+        let _build_path = ''
       else
         " 2nd case : the buffer and the _build directory are in the same directory
         "      ..
@@ -312,15 +312,15 @@ endfunction
         "    /    \
         " _build  .ml
         "
-        let b:_build_path = finddir('_build','.')
-        if b:_build_path != ''
-          let b:_build_path = getcwd().'/'.b:_build_path
-          let b:annot_file_path           = findfile(annot_file_name,'_build')
-          if b:annot_file_path != ''
-            let b:annot_file_path = getcwd().'/'.b:annot_file_path
+        let _build_path = finddir('_build','.')
+        if _build_path != ''
+          let _build_path = getcwd().'/'._build_path
+          let annot_file_path           = findfile(annot_file_name,'_build')
+          if annot_file_path != ''
+            let annot_file_path = getcwd().'/'.annot_file_path
           endif
         else
-          " 3rd case : the _build directory is in a directory higher in the file hierarchy 
+          " 3rd case : the _build directory is in a directory higher in the file hierarchy
           "            (it can't be deeper by ocamlbuild requirements)
           "      ..
           "     /  \
@@ -330,65 +330,74 @@ endfunction
           "            \
           "           .ml
           "
-          let b:_build_path = finddir('_build',';')
-          if b:_build_path != ''
-            let project_path                = substitute(b:_build_path,'/_build$','','')
+          let _build_path = finddir('_build',';')
+          if _build_path != ''
+            let project_path                = substitute(_build_path,'/_build$','','')
             let path_relative_to_project    = s:Fnameescape(substitute(expand('%:p:h'),project_path.'/','',''))
-            let b:annot_file_path           = findfile(annot_file_name,project_path.'/_build/'.path_relative_to_project)
+            let annot_file_path           = findfile(annot_file_name,project_path.'/_build/'.path_relative_to_project)
           else
-            let b:annot_file_path = findfile(annot_file_name,'**')
+            let annot_file_path = findfile(annot_file_name,'**')
             "4th case : what if the user decided to change the name of the _build directory ?
             "           -> we relax the constraints, it should work in most cases
-            if b:annot_file_path != ''
+            if annot_file_path != ''
               " 4a. we suppose the renamed _build directory is in the current directory
-              let b:_build_path = matchstr(b:annot_file_path,'^[^/]*')
-              if b:annot_file_path != ''
-                let b:annot_file_path = getcwd().'/'.b:annot_file_path
-                let b:_build_path     = getcwd().'/'.b:_build_path
+              let _build_path = matchstr(annot_file_path,'^[^/]*')
+              if annot_file_path != ''
+                let annot_file_path = getcwd().'/'.annot_file_path
+                let _build_path     = getcwd().'/'._build_path
               endif
             else
+              let annot_file_name = ''
+              "(Pierre Vittet: I have commented 4b because this was chrashing
+              "my vim (it produced infinite loop))
+              "
               " 4b. anarchy : the renamed _build directory may be higher in the hierarchy
               " this will work if the file for which we are looking annotations has a unique name in the whole project
               " if this is not the case, it may still work, but no warranty here
-              let b:annot_file_path = findfile(annot_file_name,'**;')
-              let project_path      = s:Find_common_path(b:annot_file_path,expand('%:p:h'))
-              let b:_build_path       = matchstr(b:annot_file_path,project_path.'/[^/]*')
+              "let annot_file_path = findfile(annot_file_name,'**;')
+              "let project_path      = s:Find_common_path(annot_file_path,expand('%:p:h'))
+              "let _build_path       = matchstr(annot_file_path,project_path.'/[^/]*')
             endif
           endif
         endif
       endif
 
-      if b:annot_file_path == ''
+      if annot_file_path == ''
         throw 'E484: no annotation file found'
       endif
 
       silent exe 'cd' '-'
-
-      let b:annotation_file_located = 1
+      let s:annot_file_list[annot_file_name]= [annot_file_path, _build_path, 0]
     endif
   endfun
 
-  " This in order to locate the .annot file only once
-  let b:annotation_file_located = 0
+  " This variable contain a dictionnary of list. Each element of the dictionnary
+  " represent an annotation system. An annotation system is a list with :
+  " - annotation file name as it's key
+  " - annotation file path as first element of the contained list
+  " - build path as second element of the contained list
+  " - annot_file_last_mod (contain the date of .annot file) as third element
+  let s:annot_file_list = {}
 
 " 2. Finding the type information in the annotation file
-  
+
   " a. The annotation file is opened in vim as a buffer that
   " should be (almost) invisible to the user.
 
       " After call:
       " The current buffer is now the one containing the .annot file.
       " We manage to keep all this hidden to the user's eye.
-    function! s:Enter_annotation_buffer()
+    function! s:Enter_annotation_buffer(annot_file_path)
       let s:current_pos = getpos('.')
       let s:current_hidden = &l:hidden
       set hidden
       let s:current_buf = bufname('%')
-      if bufloaded(b:annot_file_path)
-        silent exe 'keepj keepalt' 'buffer' s:Fnameescape(b:annot_file_path)
+      if bufloaded(a:annot_file_path)
+        silent exe 'keepj keepalt' 'buffer' s:Fnameescape(a:annot_file_path)
       else
-        silent exe 'keepj keepalt' 'view' s:Fnameescape(b:annot_file_path)
+        silent exe 'keepj keepalt' 'view' s:Fnameescape(a:annot_file_path)
       endif
+      call setpos(".", [0, 0 , 0 , 0])
     endfun
 
       " After call:
@@ -401,27 +410,35 @@ endfunction
 
       " After call:
       "   The annot file is loaded and assigned to a buffer.
-      "   This also handles the modification date of the .annot file, eg. after a 
-      "   compilation.
-    function! s:Load_annotation()
-      if bufloaded(b:annot_file_path) && b:annot_file_last_mod < getftime(b:annot_file_path)
-        call s:Enter_annotation_buffer()
-        silent exe "bunload"
-        call s:Exit_annotation_buffer()
+      "   This also handles the modification date of the .annot file, eg. after a
+      "   compilation (return an updated annot_file_list).
+    function! s:Load_annotation(annot_file_name)
+      let annot = s:annot_file_list[a:annot_file_name]
+      let annot_file_path = annot[0]
+      let annot_file_last_mod = 0
+      if exists("annot[2]")
+        let annot_file_last_mod = annot[2]
       endif
-      if !bufloaded(b:annot_file_path)
-        call s:Enter_annotation_buffer()
+      if bufloaded(annot_file_path) && annot_file_last_mod < getftime(annot_file_path)
+        " if there is a more recent file
+        let nr = bufnr(annot_file_path)
+        silent exe 'keepj keepalt' 'bunload' nr
+      endif
+      if !bufloaded(annot_file_path)
+        call s:Enter_annotation_buffer(annot_file_path)
         setlocal nobuflisted
         setlocal bufhidden=hide
         setlocal noswapfile
         setlocal buftype=nowrite
         call s:Exit_annotation_buffer()
-        let b:annot_file_last_mod = getftime(b:annot_file_path)
+        let annot[2] = getftime(annot_file_path)
+        " List updated with the new date
+        let s:annot_file_list[a:annot_file_name] = annot
       endif
     endfun
-  
+
   "b. 'search' and 'match' work to find the type information
-   
+
       "In:  - lin1,col1: postion of expression first char
       "     - lin2,col2: postion of expression last char
       "Out: - the pattern to be looked for to find the block
@@ -462,12 +479,13 @@ endfunction
       let end = line(".") - 1
       return join(getline(begin,end),"\n")
     endfun
-        
+
       "In:  the pattern to look for in order to match the block
       "Out: the type information (calls s:Match_data)
       " Should be called in the annotation buffer
-    function! s:Extract_type_data(block_pattern)
-      call s:Enter_annotation_buffer()
+    function! s:Extract_type_data(block_pattern, annot_file_name)
+      let annot_file_path = s:annot_file_list[a:annot_file_name][0]
+      call s:Enter_annotation_buffer(annot_file_path)
       try
         if search(a:block_pattern,'e') == 0
           throw "no_annotation"
@@ -479,10 +497,10 @@ endfunction
       endtry
       return annotation
     endfun
-  
+
   "c. link this stuff with what the user wants
   " ie. get the expression selected/under the cursor
-    
+
     let s:ocaml_word_char = '\w|[À-ÿ]|'''
 
       "In:  the current mode (eg. "visual", "normal", etc.)
@@ -527,19 +545,36 @@ endfunction
 
       "In:  the current mode (eg. "visual", "normal", etc.)
       "Out: the type information (calls s:Extract_type_data)
-    function! s:Get_type(mode)
+    function! s:Get_type(mode, annot_file_name)
       let [lin1,lin2,col1,col2] = s:Match_borders(a:mode)
-      return s:Extract_type_data(s:Block_pattern(lin1,lin2,col1,col2))
+      return s:Extract_type_data(s:Block_pattern(lin1,lin2,col1,col2), a:annot_file_name)
     endfun
-  
+
+      "In: A string destined to be printed in the 'echo buffer'. It has line
+      "break and 2 space at each line beginning.
+      "Out: A string destined to be yanked, without space and double space.
+    function s:unformat_ocaml_type(res)
+      "Remove end of line.
+      let res = substitute (a:res, "\n", "", "g" )
+      "remove double space
+      let res =substitute(res , "  ", " ", "g")
+      "remove space at begining of string.
+      let res = substitute(res, "^ *", "", "g")
+      return res
+    endfunction
+
   "d. main
       "In:         the current mode (eg. "visual", "normal", etc.)
       "After call: the type information is displayed
     if !exists("*Ocaml_get_type")
       function Ocaml_get_type(mode)
+        let annot_file_name = s:Fnameescape(expand('%:t:r')).'.annot'
         call s:Locate_annotation()
-        call s:Load_annotation()
-        return s:Get_type(a:mode)
+        call s:Load_annotation(annot_file_name)
+        let res = s:Get_type(a:mode, annot_file_name)
+        " Copy result in the unnamed buffer
+        let @" = s:unformat_ocaml_type(res)
+        return res
       endfun
     endif
 
@@ -547,7 +582,8 @@ endfunction
       function Ocaml_get_type_or_not(mode)
         let t=reltime()
         try
-          return Ocaml_get_type(a:mode)
+          let res = Ocaml_get_type(a:mode)
+          return res
         catch
           return ""
         endtry
@@ -575,8 +611,8 @@ endfunction
     endif
 
 " Maps
-  map  <silent> <LocalLeader>t :call Ocaml_print_type("normal")<CR>
-  vmap <silent> <LocalLeader>t :<C-U>call Ocaml_print_type("visual")<CR>`<
+  nnoremap <silent> <Plug>OCamlPrintType :<C-U>call Ocaml_print_type("normal")<CR>
+  xnoremap <silent> <Plug>OCamlPrintType :<C-U>call Ocaml_print_type("visual")<CR>`<
 
 let &cpoptions=s:cposet
 unlet s:cposet
index ed2c4f4..e9b7c01 100644 (file)
@@ -9,6 +9,8 @@ if exists("b:did_ftplugin")
   finish
 endif
 let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 "{{{  Indent settings
 " Set shift width for indent
@@ -37,3 +39,11 @@ if has("gui_win32") && !exists("b:browsefilter")
 endif
 "}}}
 
+"{{{  Undo settings
+let b:undo_ftplugin = "setlocal shiftwidth< softtabstop< expandtab<"
+       \ . " formatoptions< comments< textwidth<"
+       \ . "| unlet! b:browsefiler"
+"}}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 3b1db4a..5ff18b9 100644 (file)
@@ -1,14 +1,19 @@
 " Vim filetype plugin file
 " Language:    pascal
 " Maintainer:  Dan Sharp <dwsharp at users dot sourceforge dot net>
-" Last Changed: 20 Jan 2009
+" Last Changed: 11 Apr 2011
 " URL:         http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
 
 if exists("loaded_matchit")
-    let b:match_words='\<\%(begin\|case\|try\)\>:\<end\>'
+    let b:match_ignorecase = 1 " (pascal is case-insensitive)
+
+    let b:match_words = '\<\%(begin\|case\|record\|object\|try\)\>'
+    let b:match_words .= ':\<^\s*\%(except\|finally\)\>:\<end\>'
+    let b:match_words .= ',\<repeat\>:\<until\>'
+    let b:match_words .= ',\<if\>:\<else\>'
 endif
 
 " Undo the stuff we changed.
index 1d94853..741cfae 100644 (file)
@@ -1,8 +1,9 @@
 " Vim filetype plugin file
-" Language:     Perl
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl
-" Last Change:  2009-08-14
+" Language:      Perl
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-21
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
@@ -12,7 +13,8 @@ let b:did_ftplugin = 1
 let s:save_cpo = &cpo
 set cpo-=C
 
-setlocal formatoptions+=crq
+setlocal formatoptions-=t
+setlocal formatoptions+=crqol
 setlocal keywordprg=perldoc\ -f
 
 setlocal comments=:#
@@ -29,7 +31,7 @@ endif
 " Provided by Ned Konz <ned at bike-nomad dot com>
 "---------------------------------------------
 setlocal include=\\<\\(use\\\|require\\)\\>
-setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.pm','')
+setlocal includeexpr=substitute(substitute(substitute(v:fname,'::','/','g'),'->\*','',''),'$','.pm','')
 setlocal define=[^A-Za-z_]
 
 " The following line changes a global variable but is necessary to make
@@ -38,7 +40,7 @@ setlocal define=[^A-Za-z_]
 " problem for you, add an after/ftplugin/perl.vim file that contains
 "       set isfname-=:
 set isfname+=:
-"setlocal iskeyword=48-57,_,A-Z,a-z,:
+set iskeyword+=:
 
 " Set this once, globally.
 if !exists("perlpath")
@@ -60,12 +62,27 @@ if !exists("perlpath")
     endif
 endif
 
-let &l:path=perlpath
+" Append perlpath to the existing path value, if it is set.  Since we don't
+" use += to do it because of the commas in perlpath, we have to handle the
+" global / local settings, too.
+if &l:path == ""
+    if &g:path == ""
+        let &l:path=perlpath
+    else
+        let &l:path=&g:path.",".perlpath
+    endif
+else
+    let &l:path=&l:path.",".perlpath
+endif
 "---------------------------------------------
 
 " Undo the stuff we changed.
-let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< kp<" .
+let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< kp< path<" .
            \         " | unlet! b:browsefilter"
 
+" proper matching for matchit plugin
+let b:match_skip = 's:comment\|string\|perlQQ\|perlShellCommand\|perlHereDoc\|perlSubstitution\|perlTranslation\|perlMatch\|perlFormatField'
+
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 14ab1e9..5318df6 100644 (file)
@@ -1,9 +1,10 @@
 " Vim filetype plugin file
-" Language:     Perl 6
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl/tree/master
-" Last Change:  2010-08-10
-" Contributors: Hinrik Ã–rn Sigurðsson <hinrik.sig@gmail.com>
+" Language:      Perl 6
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-21
+" Contributors:  Hinrik Ã–rn Sigurðsson <hinrik.sig@gmail.com>
 "
 " Based on ftplugin/perl.vim by Dan Sharp <dwsharp at hotmail dot com>
 
@@ -15,16 +16,19 @@ let b:did_ftplugin = 1
 let s:save_cpo = &cpo
 set cpo-=C
 
-setlocal formatoptions+=crq
+setlocal formatoptions-=t
+setlocal formatoptions+=crqol
+setlocal keywordprg=p6doc
+
 setlocal comments=:#
 setlocal commentstring=#%s
 
 " Change the browse dialog on Win32 to show mainly Perl-related files
 if has("gui_win32")
     let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
-                      \ "Perl Modules (*.pm)\t*.pm\n" .
-                      \ "Perl Documentation Files (*.pod)\t*.pod\n" .
-                      \ "All Files (*.*)\t*.*\n"
+               \ "Perl Modules (*.pm)\t*.pm\n" .
+               \ "Perl Documentation Files (*.pod)\t*.pod\n" .
+               \ "All Files (*.*)\t*.*\n"
 endif
 
 " Provided by Ned Konz <ned at bike-nomad dot com>
@@ -39,10 +43,35 @@ setlocal define=[^A-Za-z_]
 " after/ftplugin/perl6.vim file that contains
 "       set isfname-=:
 set isfname+=:
+setlocal iskeyword=48-57,_,A-Z,a-z,:,-
+
+" Set this once, globally.
+if !exists("perlpath")
+    if executable("perl6")
+        try
+            if &shellxquote != '"'
+                let perlpath = system('perl6 -e  "@*INC.join(q/,/).say"')
+            else
+                let perlpath = system("perl6 -e  '@*INC.join(q/,/).say'")
+            endif
+            let perlpath = substitute(perlpath,',.$',',,','')
+        catch /E145:/
+            let perlpath = ".,,"
+        endtry
+    else
+        " If we can't call perl to get its path, just default to using the
+        " current directory and the directory of the current file.
+        let perlpath = ".,,"
+    endif
+endif
+
+let &l:path=perlpath
+"---------------------------------------------
 
 " Undo the stuff we changed.
 let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isk<" .
-           \         " | unlet! b:browsefilter"
+        \         " | unlet! b:browsefilter"
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index f59cf12..a2f8b4d 100644 (file)
@@ -8,8 +8,8 @@ if exists("b:did_ftplugin") | finish | endif
 
 " Make sure the continuation lines below do not cause problems in
 " compatibility mode.
-let s:save_cpo = &cpo
-set cpo-=C
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Define some defaults in case the included ftplugins don't set them.
 let s:undo_ftplugin = ""
@@ -79,4 +79,5 @@ let b:undo_ftplugin = "setlocal commentstring< include< omnifunc<" .
            \         s:undo_ftplugin
 
 " Restore the saved compatibility options.
-let &cpo = s:save_cpo
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 5862d00..9e0e402 100644 (file)
@@ -32,5 +32,6 @@ if exists("loaded_matchit")
 endif " exists("loaded_matchit")
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:sts=2:sw=2:
index 56f4e24..3bdd2e6 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
-" Language:     PostScript
-" Maintainer:   Mike Williams <mrw@eandem.co.uk>
-" Last Change:  27th June 2002
+" Language:    PostScript
+" Maintainer:  Mike Williams <mrw@eandem.co.uk>
+" Last Change:  24th April 2012
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -11,6 +11,9 @@ endif
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " PS comment formatting
 setlocal comments=b:%
 setlocal formatoptions-=t formatoptions+=rol
@@ -21,11 +24,15 @@ if !exists("b:match_words")
   let b:match_words = '<<:>>,\<begin\>:\<end\>,\<save\>:\<restore\>,\<gsave\>:\<grestore\>'
 endif
 
-set cpo-=C
-
 " Define patterns for the browse file filter
 if has("gui_win32") && !exists("b:browsefilter")
   let b:browsefilter = "PostScript Files (*.ps)\t*.ps\n" .
     \ "EPS Files (*.eps)\t*.eps\n" .
     \ "All Files (*.*)\t*.*\n"
 endif
+
+let b:undo_ftplugin = "setlocal comments< formatoptions<"
+    \ . "| unlet! b:browsefiler b:match_ignorecase b:match_words"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 69bd93d..251da39 100644 (file)
@@ -2,12 +2,14 @@
 " Language:    Pyrex
 " Maintainer:  Marco Barisione <marco.bari@people.it>
 " URL:         http://marcobari.altervista.org/pyrex_vim.html
-" Last Change: 2004 May 16
+" Last Change: 2012 May 18
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Behaves just like Python
 runtime! ftplugin/python.vim ftplugin/python_*.vim ftplugin/python/*.vim
@@ -20,3 +22,6 @@ if has("gui_win32") && exists("b:browsefilter")
                        \ "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
                        \ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index e7c6d6b..2b091a1 100644 (file)
@@ -5,6 +5,8 @@
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 setlocal cinkeys-=0#
 setlocal indentkeys-=0#
@@ -41,3 +43,6 @@ if has("gui_win32") && !exists("b:browsefilter")
     let b:browsefilter = "Python Files (*.py)\t*.py\n" .
                       \ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index f1d0922..98c8f93 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:     Vim's quickfix window
 " Maintainer:   Lech Lorens <Lech.Lorens@gmail.com>
-" Last Changed: 22 Jul 2010
+" Last Changed: 30 Apr 2012
 
 if exists("b:did_ftplugin")
   finish
@@ -10,7 +10,7 @@ endif
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
-let b:undo_ftplugin = "setl stl<"
+let b:undo_ftplugin = "set stl<"
 
 " Display the command that produced the list in the quickfix window:
-setlocal stl=%q%{exists('w:quickfix_title')?\ '\ '.w:quickfix_title\ :\ ''}
+setlocal stl=%t%{exists('w:quickfix_title')?\ '\ '.w:quickfix_title\ :\ ''}\ %=%-15(%l,%c%V%)\ %P
index 5ddf2c1..909e141 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:     RPL/2
 " Maintainer:   Joël BERTRAND <rpl2@free.fr>
-" Last Change: 2005 Mar 28
+" Last Change: 2012 Mar 07
 " Version:             0.1
 
 " Only do this when not done yet for this buffer
@@ -18,3 +18,5 @@ setlocal fo-=t fo+=croql
 
 " Set 'comments' to format dashed lists in comments.
 setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+let b:undo_ftplugin = "setlocal fo< comments<"
index 6b9363e..9630a94 100644 (file)
@@ -1,17 +1,10 @@
 " Vim filetype plugin
 " Language:            Ruby
-" Maintainer:          Gavin Sinclair <gsinclair at gmail.com>
-" Last Change:         2010 Mar 15
-" URL:                 http://vim-ruby.rubyforge.org
-" Anon CVS:            See above site
+" Maintainer:          Tim Pope <vimNOSPAM@tpope.org>
+" URL:                 https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:  Doug Kearns <dougkearns@gmail.com>
 " ----------------------------------------------------------------------------
-"
-" Original matchit support thanks to Ned Konz.  See his ftplugin/ruby.vim at
-"   http://bike-nomad.com/vim/ruby.vim.
-" ----------------------------------------------------------------------------
 
-" Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
   finish
 endif
@@ -21,7 +14,7 @@ let s:cpo_save = &cpo
 set cpo&vim
 
 if has("gui_running") && !has("gui_win32")
-  setlocal keywordprg=ri\ -T
+  setlocal keywordprg=ri\ -T\ -f\ bs
 else
   setlocal keywordprg=ri
 endif
@@ -49,7 +42,7 @@ endif
 
 setlocal formatoptions-=t formatoptions+=croql
 
-setlocal include=^\\s*\\<\\(load\\\|\w*require\\)\\>
+setlocal include=^\\s*\\<\\(load\\>\\\|require\\>\\\|autoload\\s*:\\=[\"']\\=\\h\\w*[\"']\\=,\\)
 setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.rb','')
 setlocal suffixesadd=.rb
 
@@ -69,41 +62,90 @@ endif
 setlocal comments=:#
 setlocal commentstring=#\ %s
 
-if !exists("s:ruby_path")
-  if exists("g:ruby_path")
-    let s:ruby_path = g:ruby_path
-  elseif has("ruby") && has("win32")
-    ruby VIM::command( 'let s:ruby_path = "%s"' % ($: + begin; require %q{rubygems}; Gem.all_load_paths.sort.uniq; rescue LoadError; []; end).join(%q{,}) )
-    let s:ruby_path = '.,' . substitute(s:ruby_path, '\%(^\|,\)\.\%(,\|$\)', ',,', '')
-  elseif executable("ruby")
-    let s:code = "print ($: + begin; require %q{rubygems}; Gem.all_load_paths.sort.uniq; rescue LoadError; []; end).join(%q{,})"
-    if &shellxquote == "'"
-      let s:ruby_path = system('ruby -e "' . s:code . '"')
+if !exists('g:ruby_version_paths')
+  let g:ruby_version_paths = {}
+endif
+
+function! s:query_path(root)
+  let code = "print $:.join %q{,}"
+  if &shell =~# 'sh' && $PATH !~# '\s'
+    let prefix = 'env PATH='.$PATH.' '
+  else
+    let prefix = ''
+  endif
+  if &shellxquote == "'"
+    let path_check = prefix.'ruby -e "' . code . '"'
+  else
+    let path_check = prefix."ruby -e '" . code . "'"
+  endif
+
+  let cd = haslocaldir() ? 'lcd' : 'cd'
+  let cwd = getcwd()
+  try
+    exe cd fnameescape(a:root)
+    let path = split(system(path_check),',')
+    exe cd fnameescape(cwd)
+    return path
+  finally
+    exe cd fnameescape(cwd)
+  endtry
+endfunction
+
+function! s:build_path(path)
+  let path = join(map(copy(a:path), 'v:val ==# "." ? "" : v:val'), ',')
+  if &g:path !~# '\v^\.%(,/%(usr|emx)/include)=,,$'
+    let path = substitute(&g:path,',,$',',','') . ',' . path
+  endif
+  return path
+endfunction
+
+if !exists('b:ruby_version') && !exists('g:ruby_path') && isdirectory(expand('%:p:h'))
+  let s:version_file = findfile('.ruby-version', '.;')
+  if !empty(s:version_file)
+    let b:ruby_version = get(readfile(s:version_file, '', 1), '')
+    if !has_key(g:ruby_version_paths, b:ruby_version)
+      let g:ruby_version_paths[b:ruby_version] = s:query_path(fnamemodify(s:version_file, ':p:h'))
+    endif
+  endif
+endif
+
+if exists("g:ruby_path")
+  let s:ruby_path = type(g:ruby_path) == type([]) ? join(g:ruby_path, ',') : g:ruby_path
+elseif has_key(g:ruby_version_paths, get(b:, 'ruby_version', ''))
+  let s:ruby_paths = g:ruby_version_paths[b:ruby_version]
+  let s:ruby_path = s:build_path(s:ruby_paths)
+else
+  if !exists('g:ruby_default_path')
+    if has("ruby") && has("win32")
+      ruby ::VIM::command( 'let g:ruby_default_path = split("%s",",")' % $:.join(%q{,}) )
+    elseif executable('ruby')
+      let g:ruby_default_path = s:query_path($HOME)
     else
-      let s:ruby_path = system("ruby -e '" . s:code . "'")
+      let g:ruby_default_path = map(split($RUBYLIB,':'), 'v:val ==# "." ? "" : v:val')
     endif
-    let s:ruby_path = '.,' . substitute(s:ruby_path, '\%(^\|,\)\.\%(,\|$\)', ',,', '')
-  else
-    " If we can't call ruby to get its path, just default to using the
-    " current directory and the directory of the current file.
-    let s:ruby_path = ".,,"
   endif
+  let s:ruby_paths = g:ruby_default_path
+  let s:ruby_path = s:build_path(s:ruby_paths)
 endif
 
-let &l:path = s:ruby_path
+if stridx(&l:path, s:ruby_path) == -1
+  let &l:path = s:ruby_path
+endif
+if exists('s:ruby_paths') && stridx(&l:tags, join(map(copy(s:ruby_paths),'v:val."/tags"'),',')) == -1
+  let &l:tags = &tags . ',' . join(map(copy(s:ruby_paths),'v:val."/tags"'),',')
+endif
 
 if has("gui_win32") && !exists("b:browsefilter")
   let b:browsefilter = "Ruby Source Files (*.rb)\t*.rb\n" .
                      \ "All Files (*.*)\t*.*\n"
 endif
 
-let b:undo_ftplugin = "setl fo< inc< inex< sua< def< com< cms< path< kp<"
+let b:undo_ftplugin = "setl fo< inc< inex< sua< def< com< cms< path< tags< kp<"
       \."| unlet! b:browsefilter b:match_ignorecase b:match_words b:match_skip"
       \."| if exists('&ofu') && has('ruby') | setl ofu< | endif"
       \."| if has('balloon_eval') && exists('+bexpr') | setl bexpr< | endif"
 
 if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
-
   nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','n')<CR>
   nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','n')<CR>
   nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','n')<CR>
@@ -126,6 +168,26 @@ if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
         \."| sil! exe 'unmap <buffer> [[' | sil! exe 'unmap <buffer> ]]' | sil! exe 'unmap <buffer> []' | sil! exe 'unmap <buffer> ]['"
         \."| sil! exe 'unmap <buffer> [m' | sil! exe 'unmap <buffer> ]m' | sil! exe 'unmap <buffer> [M' | sil! exe 'unmap <buffer> ]M'"
 
+  if maparg('im','n') == ''
+    onoremap <silent> <buffer> im :<C-U>call <SID>wrap_i('[m',']M')<CR>
+    onoremap <silent> <buffer> am :<C-U>call <SID>wrap_a('[m',']M')<CR>
+    xnoremap <silent> <buffer> im :<C-U>call <SID>wrap_i('[m',']M')<CR>
+    xnoremap <silent> <buffer> am :<C-U>call <SID>wrap_a('[m',']M')<CR>
+    let b:undo_ftplugin = b:undo_ftplugin
+          \."| sil! exe 'ounmap <buffer> im' | sil! exe 'ounmap <buffer> am'"
+          \."| sil! exe 'xunmap <buffer> im' | sil! exe 'xunmap <buffer> am'"
+  endif
+
+  if maparg('iM','n') == ''
+    onoremap <silent> <buffer> iM :<C-U>call <SID>wrap_i('[[','][')<CR>
+    onoremap <silent> <buffer> aM :<C-U>call <SID>wrap_a('[[','][')<CR>
+    xnoremap <silent> <buffer> iM :<C-U>call <SID>wrap_i('[[','][')<CR>
+    xnoremap <silent> <buffer> aM :<C-U>call <SID>wrap_a('[[','][')<CR>
+    let b:undo_ftplugin = b:undo_ftplugin
+          \."| sil! exe 'ounmap <buffer> iM' | sil! exe 'ounmap <buffer> aM'"
+          \."| sil! exe 'xunmap <buffer> iM' | sil! exe 'xunmap <buffer> aM'"
+  endif
+
   if maparg("\<C-]>",'n') == ''
     nnoremap <silent> <buffer> <C-]>       :<C-U>exe  v:count1."tag <C-R>=RubyCursorIdentifier()<CR>"<CR>
     nnoremap <silent> <buffer> g<C-]>      :<C-U>exe         "tjump <C-R>=RubyCursorIdentifier()<CR>"<CR>
@@ -142,6 +204,17 @@ if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
           \."| sil! exe 'nunmap <buffer> <C-W>g<C-]>'| sil! exe 'nunmap <buffer> <C-W>g]'"
           \."| sil! exe 'nunmap <buffer> <C-W>}'| sil! exe 'nunmap <buffer> <C-W>g}'"
   endif
+
+  if maparg("gf",'n') == ''
+    " By using findfile() rather than gf's normal behavior, we prevent
+    " erroneously editing a directory.
+    nnoremap <silent> <buffer> gf         :<C-U>exe <SID>gf(v:count1,"gf",'edit')<CR>
+    nnoremap <silent> <buffer> <C-W>f     :<C-U>exe <SID>gf(v:count1,"\<Lt>C-W>f",'split')<CR>
+    nnoremap <silent> <buffer> <C-W><C-F> :<C-U>exe <SID>gf(v:count1,"\<Lt>C-W>\<Lt>C-F>",'split')<CR>
+    nnoremap <silent> <buffer> <C-W>gf    :<C-U>exe <SID>gf(v:count1,"\<Lt>C-W>gf",'tabedit')<CR>
+    let b:undo_ftplugin = b:undo_ftplugin
+          \."| sil! exe 'nunmap <buffer> gf' | sil! exe 'nunmap <buffer> <C-W>f' | sil! exe 'nunmap <buffer> <C-W><C-F>' | sil! exe 'nunmap <buffer> <C-W>gf'"
+  endif
 endif
 
 let &cpo = s:cpo_save
@@ -191,7 +264,7 @@ function! RubyBalloonexpr()
     if str !~ '^\w'
       return ''
     endif
-    silent! let res = substitute(system("ri -f simple -T \"".str.'"'),'\n$','','')
+    silent! let res = substitute(system("ri -f rdoc -T \"".str.'"'),'\n$','','')
     if res =~ '^Nothing known about' || res =~ '^Bad argument:' || res =~ '^More than one method'
       return ''
     endif
@@ -202,29 +275,57 @@ function! RubyBalloonexpr()
 endfunction
 
 function! s:searchsyn(pattern,syn,flags,mode)
-    norm! m'
-    if a:mode ==# 'v'
-      norm! gv
-    endif
-    let i = 0
-    let cnt = v:count ? v:count : 1
-    while i < cnt
-        let i = i + 1
-        let line = line('.')
-        let col  = col('.')
-        let pos = search(a:pattern,'W'.a:flags)
-        while pos != 0 && s:synname() !~# a:syn
-            let pos = search(a:pattern,'W'.a:flags)
-        endwhile
-        if pos == 0
-            call cursor(line,col)
-            return
-        endif
+  norm! m'
+  if a:mode ==# 'v'
+    norm! gv
+  endif
+  let i = 0
+  let cnt = v:count ? v:count : 1
+  while i < cnt
+    let i = i + 1
+    let line = line('.')
+    let col  = col('.')
+    let pos = search(a:pattern,'W'.a:flags)
+    while pos != 0 && s:synname() !~# a:syn
+      let pos = search(a:pattern,'W'.a:flags)
     endwhile
+    if pos == 0
+      call cursor(line,col)
+      return
+    endif
+  endwhile
 endfunction
 
 function! s:synname()
-    return synIDattr(synID(line('.'),col('.'),0),'name')
+  return synIDattr(synID(line('.'),col('.'),0),'name')
+endfunction
+
+function! s:wrap_i(back,forward)
+  execute 'norm k'.a:forward
+  let line = line('.')
+  execute 'norm '.a:back
+  if line('.') == line - 1
+    return s:wrap_a(a:back,a:forward)
+  endif
+  execute 'norm jV'.a:forward.'k'
+endfunction
+
+function! s:wrap_a(back,forward)
+  execute 'norm '.a:forward
+  if line('.') < line('$') && getline(line('.')+1) ==# ''
+    let after = 1
+  endif
+  execute 'norm '.a:back
+  while getline(line('.')-1) =~# '^\s*#' && line('.')
+    -
+  endwhile
+  if exists('after')
+    execute 'norm V'.a:forward.'j'
+  elseif line('.') > 1 && getline(line('.')-1) =~# '^\s*$'
+    execute 'norm kV'.a:forward
+  else
+    execute 'norm V'.a:forward
+  endif
 endfunction
 
 function! RubyCursorIdentifier()
@@ -241,6 +342,26 @@ function! RubyCursorIdentifier()
   return stripped == '' ? expand("<cword>") : stripped
 endfunction
 
+function! s:gf(count,map,edit) abort
+  if getline('.') =~# '^\s*require_relative\s*\(["'']\).*\1\s*$'
+    let target = matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1')
+    return a:edit.' %:h/'.target.'.rb'
+  elseif getline('.') =~# '^\s*\%(require[( ]\|load[( ]\|autoload[( ]:\w\+,\)\s*\s*\%(::\)\=File\.expand_path(\(["'']\)\.\./.*\1,\s*__FILE__)\s*$'
+    let target = matchstr(getline('.'),'\(["'']\)\.\./\zs.\{-\}\ze\1')
+    return a:edit.' %:h/'.target.'.rb'
+  elseif getline('.') =~# '^\s*\%(require \|load \|autoload :\w\+,\)\s*\(["'']\).*\1\s*$'
+    let target = matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1')
+  else
+    let target = expand('<cfile>')
+  endif
+  let found = findfile(target, &path, a:count)
+  if found ==# ''
+    return 'norm! '.a:count.a:map
+  else
+    return a:edit.' '.fnameescape(found)
+  endif
+endfunction
+
 "
 " Instructions for enabling "matchit" support:
 "
index f4cee0c..7f3f637 100644 (file)
@@ -1,13 +1,33 @@
 " Vim filetype plugin
 " Language:      Scheme
 " Maintainer:    Sergey Khorev <sergey.khorev@gmail.com>
-" URL:          http://iamphet.nm.ru/vim
+" URL:          http://sites.google.com/site/khorser/opensource/vim
 " Original author:    Dorai Sitaram <ds26@gte.com>
 " Original URL:                 http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
-" Last Change:   Nov 22, 2004
+" Last Change:   Feb 12, 2013
 
-runtime! ftplugin/lisp.vim ftplugin/lisp_*.vim ftplugin/lisp/*.vim
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+  finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Copy-paste from ftplugin/lisp.vim
+setl comments=:;
+setl define=^\\s*(def\\k*
+setl formatoptions-=t
+setl iskeyword+=+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
+setl lisp
+setl commentstring=;%s
 
+" make comments behaviour like in c.vim
+" e.g. insertion of ;;; and ;; on normal "O" or "o" when staying in comment
+setl comments^=:;;;,:;;,sr:#\|,mb:\|,ex:\|#
+setl formatoptions+=croql
+
+" Scheme-specific settings
 if exists("b:is_mzscheme") || exists("is_mzscheme")
     " improve indenting
     setl iskeyword+=#,%,^
@@ -24,3 +44,5 @@ if exists("b:is_chicken") || exists("is_chicken")
     setl lispwords+=define-values,opt-lambda,case-lambda,syntax-rules,with-syntax,syntax-case
     setl lispwords+=cond-expand,and-let*,foreign-lambda,foreign-lambda*
 endif
+
+let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lispwords< lisp< commentstring<"
index a07d31f..bf63efb 100644 (file)
@@ -37,3 +37,4 @@ let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 076b5ef..593fcec 100644 (file)
@@ -36,3 +36,4 @@ let b:undo_ftplugin = "setlocal cms< | unlet! b:browsefilter b:match_words"
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 3b1d70a..9778e1c 100644 (file)
@@ -1,13 +1,16 @@
 " Plugin to update the %changelog section of RPM spec files
 " Filename: spec.vim
 " Maintainer: Gustavo Niemeyer <niemeyer@conectiva.com>
-" Last Change: Wed, 10 Apr 2002 16:28:52 -0300
+" Last Change: 2012 Mar 07
 
 if exists("b:did_ftplugin")
        finish
 endif
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 if !exists("no_plugin_maps") && !exists("no_spec_maps")
        if !hasmapto("<Plug>SpecChangelog")
                map <buffer> <LocalLeader>c <Plug>SpecChangelog
@@ -166,3 +169,7 @@ let b:match_words =
   \ '^Name:^%description:^%clean:^%setup:^%build:^%install:^%files:' .
   \ '^%package:^%preun:^%postun:^%changelog'
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+let b:undo_ftplugin = "unlet! b:match_ignorecase b:match_words"
index cbc8dcc..c2bc857 100644 (file)
@@ -1,8 +1,8 @@
 " SQL filetype plugin file
 " Language:    SQL (Common for Oracle, Microsoft SQL Server, Sybase)
-" Version:     7.0
-" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: 2010 Jun 11
+" Version:     11.0
+" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+" Last Change: 2013 May 13
 " Download:    http://vim.sourceforge.net/script.php?script_id=454
 
 " For more details please use:
 " To change the default dialect, add the following to your vimrc:
 "    let g:sql_type_default = 'sqlanywhere'
 "
-" This file also creates a command, SQLGetType, which allows you to 
+" This file also creates a command, SQLGetType, which allows you to
 " determine what the current dialect is in use.
 "     :SQLGetType
 "
 " History
 "
+" Version 11.0 (May 2013)
+"
+" NF: Updated to use SyntaxComplete's new regex support for syntax groups.
+"
+" Version 10.0 (Dec 2012)
+"
+" NF: Changed all maps to use noremap instead of must map
+" NF: Changed all visual maps to use xnoremap instead of vnoremap as they
+"     should only be used in visual mode and not select mode.
+" BF: Most of the maps were using doubled up backslashes before they were
+"     changed to using the search() function, which meant they no longer
+"     worked.
+"
+" Version 9.0
+"
+" NF: Completes 'b:undo_ftplugin'
+" BF: Correctly set cpoptions when creating script
+"
+" Version 8.0
+"
+" NF: Improved the matchit plugin regex (Talek)
+"
 " Version 7.0
-" 
+"
 " NF: Calls the sqlcomplete#ResetCacheSyntax() function when calling
 "     SQLSetType.
 "
 " Version 6.0
-" 
+"
 " NF: Adds the command SQLGetType
 "
 " Version 5.0
-" 
-" NF: Adds the ability to choose the keys to control SQL completion, just add 
+"
+" NF: Adds the ability to choose the keys to control SQL completion, just add
 "     the following to your .vimrc:
 "    let g:ftplugin_sql_omni_key       = '<C-C>'
 "    let g:ftplugin_sql_omni_key_right = '<Right>'
 "    let g:ftplugin_sql_omni_key_left  = '<Left>'
 "
-" BF: format-options - Auto-wrap comments using textwidth was turned off 
+" BF: format-options - Auto-wrap comments using textwidth was turned off
 "                      by mistake.
 
 
@@ -63,7 +85,7 @@ if exists("b:did_ftplugin")
 endif
 
 let s:save_cpo = &cpo
-set cpo=
+set cpo&vim
 
 " Disable autowrapping for code, but enable for comments
 " t    Auto-wrap text using textwidth
@@ -77,7 +99,7 @@ setlocal formatoptions+=c
 " This works with both Vim 6 and 7.
 
 if !exists("*SQL_SetType")
-    " NOTE: You cannot use function! since this file can be 
+    " NOTE: You cannot use function! since this file can be
     " sourced from within this function.  That will result in
     " an error reported by Vim.
     function SQL_GetList(ArgLead, CmdLine, CursorPos)
@@ -101,9 +123,9 @@ if !exists("*SQL_SetType")
             "
             "    Recursively, since there are many filenames that contain
             "    the word SQL in the indent, syntax and ftplugin directory
-            let sqls = substitute( sqls, 
-                        \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=', 
-                        \ '\1\n', 
+            let sqls = substitute( sqls,
+                        \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=',
+                        \ '\1\n',
                         \ 'g'
                         \ )
 
@@ -138,10 +160,10 @@ if !exists("*SQL_SetType")
     function SQL_SetType(name)
 
         " User has decided to override default SQL scripts and
-        " specify a vendor specific version 
+        " specify a vendor specific version
         " (ie Oracle, Informix, SQL Anywhere, ...)
         " So check for an remove any settings that prevent the
-        " scripts from being executed, and then source the 
+        " scripts from being executed, and then source the
         " appropriate Vim scripts.
         if exists("b:did_ftplugin")
             unlet b:did_ftplugin
@@ -159,10 +181,10 @@ if !exists("*SQL_SetType")
         endif
 
         " Ensure the name is in the correct format
-        let new_sql_type = substitute(a:name, 
+        let new_sql_type = substitute(a:name,
                     \ '\s*\([^\.]\+\)\(\.\w\+\)\?', '\L\1', '')
 
-        " Do not specify a buffer local variable if it is 
+        " Do not specify a buffer local variable if it is
         " the default value
         if new_sql_type == 'sql'
           let new_sql_type = 'sqloracle'
@@ -171,7 +193,7 @@ if !exists("*SQL_SetType")
 
         " Remove any cached SQL since a new sytax will have different
         " items and groups
-        if !exists('g:loaded_sql_completion') || 100 == g:loaded_sql_completion
+        if !exists('g:loaded_sql_completion') || g:loaded_sql_completion >= 100
             call sqlcomplete#ResetCacheSyntax()
         endif
 
@@ -199,10 +221,10 @@ endif
 
 if !exists("*SQL_GetType")
     function SQL_GetType()
-        if exists('b:sql_type_override') 
+        if exists('b:sql_type_override')
             echomsg "Current SQL dialect in use:".b:sql_type_override
         else
-            echomsg "Current SQL dialect in use:".g:sql_type_default        
+            echomsg "Current SQL dialect in use:".g:sql_type_default
         endif
     endfunction
     command! -nargs=0 SQLGetType :call SQL_GetType()
@@ -229,7 +251,8 @@ if exists("b:did_ftplugin")
   finish
 endif
 
-let b:undo_ftplugin = "setl comments<"
+let b:undo_ftplugin = "setl comments< formatoptions< define< omnifunc<" .
+                   \ " | unlet! b:browsefilter b:match_words"
 
 " Don't load another plugin for this buffer
 let b:did_ftplugin     = 1
@@ -276,7 +299,7 @@ if !exists("b:match_words")
     " doend
     "
     " case
-    " when 
+    " when
     " when
     " default
     " end case
@@ -290,20 +313,20 @@ if !exists("b:match_words")
     " WHEN OTHERS THEN
     "
     " create[ or replace] procedure|function|event
+                " \ '^\s*\<\%(do\|for\|while\|loop\)\>.*:'.
 
-    let b:match_words =
-               \ '\<begin\>:\<end\>\W*$,'.
+    " For ColdFusion support
+    setlocal matchpairs+=<:>
+    let b:match_words = &matchpairs .
+               \ ',\<begin\>:\<end\>\W*$,'.
                \
                 \ s:notend . '\<if\>:'.
                 \ '\<elsif\>\|\<elseif\>\|\<else\>:'.
                 \ '\<end\s\+if\>,'.
                 \
-                \ '\<do\>\|'.
-                \ '\<while\>\|'.
-                \ '\%(' . s:notend . '\<loop\>\)\|'.
-                \ '\%(' . s:notend . '\<for\>\):'.
-                \ '\<exit\>\|\<leave\>\|\<break\>\|\<continue\>:'.
-                \ '\%(\<end\s\+\%(for\|loop\>\)\)\|\<doend\>,'.
+                \ '\(^\s*\)\@<=\(\<\%(do\|for\|while\|loop\)\>.*\):'.
+                \ '\%(\<exit\>\|\<leave\>\|\<break\>\|\<continue\>\):'.
+                \ '\%(\<doend\>\|\%(\<end\s\+\%(for\|while\|loop\>\)\)\),'.
                 \
                 \ '\%('. s:notend . '\<case\>\):'.
                 \ '\%('.s:when_no_matched_or_others.'\):'.
@@ -335,14 +358,14 @@ let &l:define = '\c\<\(VARIABLE\|DECLARE\|IN\|OUT\|INOUT\)\>'
 
 " Mappings to move to the next BEGIN ... END block
 " \W - no characters or digits
-nmap <buffer> <silent> ]] :call search('\\c^\\s*begin\\>', 'W' )<CR>
-nmap <buffer> <silent> [[ :call search('\\c^\\s*begin\\>', 'bW' )<CR>
-nmap <buffer> <silent> ][ :call search('\\c^\\s*end\\W*$', 'W' )<CR>
-nmap <buffer> <silent> [] :call search('\\c^\\s*end\\W*$', 'bW' )<CR>
-vmap <buffer> <silent> ]] :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*begin\\>', 'W' )<CR>
-vmap <buffer> <silent> [[ :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*begin\\>', 'bW' )<CR>
-vmap <buffer> <silent> ][ :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*end\\W*$', 'W' )<CR>
-vmap <buffer> <silent> [] :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*end\\W*$', 'bW' )<CR>
+nnoremap <buffer> <silent> ]] :call search('\c^\s*begin\>', 'W' )<CR>
+nnoremap <buffer> <silent> [[ :call search('\c^\s*begin\>', 'bW' )<CR>
+nnoremap <buffer> <silent> ][ :call search('\c^\s*end\W*$', 'W' )<CR>
+nnoremap <buffer> <silent> [] :call search('\c^\s*end\W*$', 'bW' )<CR>
+xnoremap <buffer> <silent> ]] :<C-U>exec "normal! gv"<Bar>call search('\c^\s*begin\>', 'W' )<CR>
+xnoremap <buffer> <silent> [[ :<C-U>exec "normal! gv"<Bar>call search('\c^\s*begin\>', 'bW' )<CR>
+xnoremap <buffer> <silent> ][ :<C-U>exec "normal! gv"<Bar>call search('\c^\s*end\W*$', 'W' )<CR>
+xnoremap <buffer> <silent> [] :<C-U>exec "normal! gv"<Bar>call search('\c^\s*end\W*$', 'bW' )<CR>
 
 
 " By default only look for CREATE statements, but allow
@@ -359,7 +382,7 @@ endif
 " backwards, you must use \{,1}
 if !exists('g:ftplugin_sql_objects')
     let g:ftplugin_sql_objects = 'function,procedure,event,' .
-                \ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' .
+                \ '\(existing\\|global\s\+temporary\s\+\)\{,1}' .
                 \ 'table,trigger' .
                 \ ',schema,service,publication,database,datatype,domain' .
                 \ ',index,subscription,synchronization,view,variable'
@@ -380,47 +403,47 @@ endif
 
 " Replace all ,'s with bars, except ones with numbers after them.
 " This will most likely be a \{,1} string.
-let s:ftplugin_sql_objects = 
-            \ '\\c^\\s*' .
-            \ '\\(\\(' .
-            \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\\\|', 'g') .
-            \ '\\)\\s\\+\\(or\\s\\+replace\\\s\+\\)\\{,1}\\)\\{,1}' .
-            \ '\\<\\(' .
-            \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\\\|', 'g') .
-            \ '\\)\\>' 
+let s:ftplugin_sql_objects =
+            \ '\c^\s*' .
+            \ '\(\(' .
+            \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\|', 'g') .
+            \ '\)\s\+\(or\s\+replace\s\+\)\{,1}\)\{,1}' .
+            \ '\<\(' .
+            \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\|', 'g') .
+            \ '\)\>'
 
 " Mappings to move to the next CREATE ... block
-exec "nmap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>"
-exec "nmap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>"
+exec "nnoremap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>"
+exec "nnoremap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>"
 " Could not figure out how to use a :call search() string in visual mode
 " without it ending visual mode
 " Unfortunately, this will add a entry to the search history
-exec 'vmap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>'
-exec 'vmap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<CR>'
+exec 'xnoremap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>'
+exec 'xnoremap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<CR>'
 
 " Mappings to move to the next COMMENT
 "
 " Had to double the \ for the \| separator since this has a special
 " meaning on maps
-let b:comment_leader = '\\(--\\\|\\/\\/\\\|\\*\\\|\\/\\*\\\|\\*\\/\\)'
+let b:comment_leader = '\(--\\|\/\/\\|\*\\|\/\*\\|\*\/\)'
 " Find the start of the next comment
-let b:comment_start  = '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
-            \ '\\(\\s*'.b:comment_leader.'\\)'
+let b:comment_start  = '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
+            \ '\(\s*'.b:comment_leader.'\)'
 " Find the end of the previous comment
-let b:comment_end = '\\(^\\s*'.b:comment_leader.'.*\\n\\)'.
-            \ '\\(^\\s*'.b:comment_leader.'\\)\\@!'
+let b:comment_end = '\(^\s*'.b:comment_leader.'.*\n\)'.
+            \ '\(^\s*'.b:comment_leader.'\)\@!'
 " Skip over the comment
 let b:comment_jump_over  = "call search('".
-            \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
+            \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
             \ "', 'W')"
 let b:comment_skip_back  = "call search('".
-            \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
+            \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
             \ "', 'bW')"
 " Move to the start and end of comments
 exec 'nnoremap <silent><buffer> ]" :call search('."'".b:comment_start."'".', "W" )<CR>'
 exec 'nnoremap <silent><buffer> [" :call search('."'".b:comment_end."'".', "W" )<CR>'
-exec 'vnoremap <silent><buffer> ]" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_start."'".', "W" )<CR>'
-exec 'vnoremap <silent><buffer> [" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_end."'".', "W" )<CR>'
+exec 'xnoremap <silent><buffer> ]" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_start."'".', "W" )<CR>'
+exec 'xnoremap <silent><buffer> [" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_end."'".', "W" )<CR>'
 
 " Comments can be of the form:
 "   /*
@@ -429,7 +452,7 @@ exec 'vnoremap <silent><buffer> [" :<C-U>exec "normal! gv"<Bar>call search('."'"
 " or
 "   --
 " or
-"   // 
+"   //
 setlocal comments=s1:/*,mb:*,ex:*/,:--,://
 
 " Set completion with CTRL-X CTRL-O to autoloaded function.
@@ -439,42 +462,50 @@ if exists('&omnifunc')
     " OMNI function prior to setting up the SQL OMNI function
     let b:sql_compl_savefunc = &omnifunc
 
+    " Source it to determine it's version
+    runtime autoload/sqlcomplete.vim
     " This is used by the sqlcomplete.vim plugin
     " Source it for it's global functions
-    runtime autoload/syntaxcomplete.vim 
+    runtime autoload/syntaxcomplete.vim
 
     setlocal omnifunc=sqlcomplete#Complete
     " Prevent the intellisense plugin from loading
     let b:sql_vis = 1
     if !exists('g:omni_sql_no_default_maps')
+        let regex_extra = ''
+        if exists('g:loaded_syntax_completion') && exists('g:loaded_sql_completion')
+            if g:loaded_syntax_completion > 120 && g:loaded_sql_completion > 140
+                let regex_extra = '\\w*'
+            endif
+        endif
         " Static maps which use populate the completion list
         " using Vim's syntax highlighting rules
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'a <C-\><C-O>:call sqlcomplete#Map("syntax")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'k <C-\><C-O>:call sqlcomplete#Map("sqlKeyword")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'f <C-\><C-O>:call sqlcomplete#Map("sqlFunction")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'o <C-\><C-O>:call sqlcomplete#Map("sqlOption")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'T <C-\><C-O>:call sqlcomplete#Map("sqlType")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'s <C-\><C-O>:call sqlcomplete#Map("sqlStatement")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'a <C-\><C-O>:call sqlcomplete#Map("syntax")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'k <C-\><C-O>:call sqlcomplete#Map("sqlKeyword'.regex_extra.'")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'f <C-\><C-O>:call sqlcomplete#Map("sqlFunction'.regex_extra.'")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'o <C-\><C-O>:call sqlcomplete#Map("sqlOption'.regex_extra.'")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'T <C-\><C-O>:call sqlcomplete#Map("sqlType'.regex_extra.'")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'s <C-\><C-O>:call sqlcomplete#Map("sqlStatement'.regex_extra.'")<CR><C-X><C-O>'
         " Dynamic maps which use populate the completion list
         " using the dbext.vim plugin
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'t <C-\><C-O>:call sqlcomplete#Map("table")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'p <C-\><C-O>:call sqlcomplete#Map("procedure")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'v <C-\><C-O>:call sqlcomplete#Map("view")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'c <C-\><C-O>:call sqlcomplete#Map("column")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'l <C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'t <C-\><C-O>:call sqlcomplete#Map("table")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'p <C-\><C-O>:call sqlcomplete#Map("procedure")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'v <C-\><C-O>:call sqlcomplete#Map("view")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'c <C-\><C-O>:call sqlcomplete#Map("column")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'l <C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
         " The next 3 maps are only to be used while the completion window is
         " active due to the <CR> at the beginning of the map
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'L <C-Y><C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'L <C-Y><C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
         " <C-Right> is not recognized on most Unix systems, so only create
         " these additional maps on the Windows platform.
         " If you would like to use these maps, choose a different key and make
         " the same map in your vimrc.
         " if has('win32')
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key_right.' <C-R>=sqlcomplete#DrillIntoTable()<CR>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key_left.'  <C-R>=sqlcomplete#DrillOutOfColumns()<CR>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key_right.' <C-R>=sqlcomplete#DrillIntoTable()<CR>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key_left.'  <C-R>=sqlcomplete#DrillOutOfColumns()<CR>'
         " endif
         " Remove any cached items useful for schema changes
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'R <C-\><C-O>:call sqlcomplete#Map("resetCache")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'R <C-\><C-O>:call sqlcomplete#Map("resetCache")<CR><C-X><C-O>'
     endif
 
     if b:sql_compl_savefunc != ""
@@ -488,6 +519,6 @@ if exists('&omnifunc')
 endif
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:sw=4:
-
index f8a0d62..8fff6ea 100644 (file)
@@ -37,3 +37,4 @@ let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index c5bc303..1cc24d3 100644 (file)
@@ -32,5 +32,6 @@ let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< kp<" .
 
 " Restore the saved compatibility options.
 let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " vim: set et ts=4 sw=4 tw=78:
index dacb44e..7e2d959 100644 (file)
@@ -37,3 +37,4 @@ let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 4089927..1147001 100644 (file)
@@ -41,5 +41,6 @@ if exists("loaded_matchit")
 endif " exists("loaded_matchit")
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:sts=2:sw=2:
diff --git a/runtime/ftplugin/treetop.vim b/runtime/ftplugin/treetop.vim
new file mode 100644 (file)
index 0000000..2da3c40
--- /dev/null
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language:         Treetop
+" Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2011-03-14
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=b:# commentstring=#\ %s formatoptions-=tcroq formatoptions+=l
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/ftplugin/tt2html.vim b/runtime/ftplugin/tt2html.vim
new file mode 100644 (file)
index 0000000..10520d8
--- /dev/null
@@ -0,0 +1,13 @@
+" Language:      TT2 embedded with HTML
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-21
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+    finish
+endif
+
+" Just use the HTML plugin for now.
+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
index 08a2de3..0249b54 100644 (file)
@@ -1,8 +1,8 @@
 " VHDL filetype plugin
 " Language:    VHDL
-" Maintainer:  R.Shankar <shankar.r?freescale.com>
+" Maintainer:  R.Shankar <shankar.pec?gmail.com>
 " Modified By: Gerald Lai <laigera+vim?gmail.com>
-" Last Change: 2006 Feb 16
+" Last Change: 2011 Dec 11
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -12,6 +12,9 @@ endif
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Set 'formatoptions' to break comment lines but not other lines,
 " and insert the comment leader when hitting <CR> or using "o".
 "setlocal fo-=t fo+=croqlm1
@@ -22,8 +25,6 @@ let b:did_ftplugin = 1
 " Format comments to be up to 78 characters long
 "setlocal tw=75
 
-set cpo-=C
-
 " Win32 can filter files in the browse dialog
 "if has("gui_win32") && !exists("b:browsefilter")
 "  let b:browsefilter = "Verilog Source Files (*.v)\t*.v\n" .
@@ -82,3 +83,6 @@ vnoremap <buffer><silent>[[ :<C-u>cal <SID>CountWrapper('[[')<CR>
 vnoremap <buffer><silent>]] :<C-u>cal <SID>CountWrapper(']]')<CR>
 vnoremap <buffer><silent>[] :<C-u>cal <SID>CountWrapper('[]')<CR>
 vnoremap <buffer><silent>][ :<C-u>cal <SID>CountWrapper('][')<CR>
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index de8a047..edba37b 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:    Vim
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2009 Jan 22
+" Last Change: 2013 Jun 26
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
index a50ed92..21ed3e1 100644 (file)
@@ -64,3 +64,4 @@ let b:undo_ftplugin = "unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 74cd064..236e870 100644 (file)
@@ -61,3 +61,4 @@ let b:undo_ftplugin = "setlocal commentstring< comments< formatoptions<" .
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
index 24df05d..a28da6a 100644 (file)
@@ -1,8 +1,9 @@
 " Vim filetype plugin file
-" Language:     XS (Perl extension interface language)
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl
-" Last Change:  2009-08-14
+" Language:      XS (Perl extension interface language)
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-21
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
index b033760..6a4a193 100644 (file)
@@ -36,3 +36,4 @@ let b:undo_ftplugin = "unlet! b:browsefilter | " . s:undo_ftplugin
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff --git a/runtime/ftplugin/zimbu.vim b/runtime/ftplugin/zimbu.vim
new file mode 100644 (file)
index 0000000..ff28120
--- /dev/null
@@ -0,0 +1,151 @@
+" Vim filetype plugin file
+" Language:    Zimbu
+" Maintainer:  Bram Moolenaar <Bram@vim.org>
+" Last Change: 2012 Sep 08
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+  finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Using line continuation here.
+let s:cpo_save = &cpo
+set cpo-=C
+
+let b:undo_ftplugin = "setl fo< com< ofu< efm< tw< et< sts< sw< | if has('vms') | setl isk< | endif"
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" Set completion with CTRL-X CTRL-O to autoloaded function.
+if exists('&ofu')
+  setlocal ofu=ccomplete#Complete
+endif
+
+" Set 'comments' to format dashed lists in comments.
+" And to keep Zudocu comment characters.
+setlocal comments=sO:#\ -,mO:#\ \ ,:#=,:#-,:#%,:#
+
+setlocal errorformat^=%f\ line\ %l\ col\ %c:\ %m,ERROR:\ %m
+
+" When the matchit plugin is loaded, this makes the % command skip parens and
+" braces in comments.
+let b:match_words = '\(^\s*\)\@<=\(MODULE\|CLASS\|INTERFACE\|BITS\|ENUM\|SHARED\|FUNC\|REPLACE\|DEFINE\|PROC\|EQUAL\|MAIN\|IF\|GENERATE_IF\|WHILE\|REPEAT\|WITH\|DO\|FOR\|SWITCH\|TRY\)\>\|{\s*$:\(^\s*\)\@<=\(ELSE\|ELSEIF\|GENERATE_ELSE\|GENERATE_ELSEIF\|CATCH\|FINALLY\)\>:\(^\s*\)\@<=\(}\|\<UNTIL\>\)'
+
+let b:match_skip = 's:comment\|string\|zimbuchar'
+
+setlocal tw=78
+setlocal et sts=2 sw=2
+
+" Does replace when a dot, space or closing brace is typed.
+func! GCUpperDot(what)
+  if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != '.' && v:char != ')' && v:char != '}' && v:char != ','
+    " no space or dot after the typed text
+    let g:got_char = v:char
+    return a:what
+  endif
+  return GCUpperCommon(a:what)
+endfunc
+
+" Does not replace when a dot is typed.
+func! GCUpper(what)
+  if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != ')' && v:char != ','
+    " no space or other "terminating" character after the typed text
+    let g:got_char = v:char
+    return a:what
+  endif
+  return GCUpperCommon(a:what)
+endfunc
+
+" Only replaces when a space is typed.
+func! GCUpperSpace(what)
+  if v:char != ' '
+    " no space after the typed text
+    let g:got_char = v:char
+    return a:what
+  endif
+  return GCUpperCommon(a:what)
+endfunc
+
+func! GCUpperCommon(what)
+  let col = col(".") - strlen(a:what)
+  if col > 1 && getline('.')[col - 2] != ' '
+    " no space before the typed text
+    let g:got_char = 999
+    return a:what
+  endif
+  let synName = synIDattr(synID(line("."), col(".") - 2, 1), "name")
+  if synName =~ 'Comment\|String\|zimbuCregion\|\<c'
+    " inside a comment or C code
+    let g:got_char = 777
+    return a:what
+  endif
+    let g:got_char = 1111
+  return toupper(a:what)
+endfunc
+
+iabbr <buffer> <expr> alias GCUpperSpace("alias")
+iabbr <buffer> <expr> arg GCUpperDot("arg")
+iabbr <buffer> <expr> break GCUpper("break")
+iabbr <buffer> <expr> case GCUpperSpace("case")
+iabbr <buffer> <expr> catch GCUpperSpace("catch")
+iabbr <buffer> <expr> check GCUpperDot("check")
+iabbr <buffer> <expr> class GCUpperSpace("class")
+iabbr <buffer> <expr> interface GCUpperSpace("interface")
+iabbr <buffer> <expr> implements GCUpperSpace("implements")
+iabbr <buffer> <expr> shared GCUpperSpace("shared")
+iabbr <buffer> <expr> continue GCUpper("continue")
+iabbr <buffer> <expr> default GCUpper("default")
+iabbr <buffer> <expr> extends GCUpper("extends")
+iabbr <buffer> <expr> do GCUpper("do")
+iabbr <buffer> <expr> else GCUpper("else")
+iabbr <buffer> <expr> elseif GCUpperSpace("elseif")
+iabbr <buffer> <expr> enum GCUpperSpace("enum")
+iabbr <buffer> <expr> exit GCUpper("exit")
+iabbr <buffer> <expr> false GCUpper("false")
+iabbr <buffer> <expr> fail GCUpper("fail")
+iabbr <buffer> <expr> finally GCUpper("finally")
+iabbr <buffer> <expr> for GCUpperSpace("for")
+iabbr <buffer> <expr> func GCUpperSpace("func")
+iabbr <buffer> <expr> if GCUpperSpace("if")
+iabbr <buffer> <expr> import GCUpperSpace("import")
+iabbr <buffer> <expr> in GCUpperSpace("in")
+iabbr <buffer> <expr> io GCUpperDot("io")
+iabbr <buffer> <expr> main GCUpper("main")
+iabbr <buffer> <expr> module GCUpperSpace("module")
+iabbr <buffer> <expr> new GCUpper("new")
+iabbr <buffer> <expr> nil GCUpper("nil")
+iabbr <buffer> <expr> ok GCUpper("ok")
+iabbr <buffer> <expr> proc GCUpperSpace("proc")
+iabbr <buffer> <expr> proceed GCUpper("proceed")
+iabbr <buffer> <expr> return GCUpper("return")
+iabbr <buffer> <expr> step GCUpperSpace("step")
+iabbr <buffer> <expr> switch GCUpperSpace("switch")
+iabbr <buffer> <expr> sys GCUpperDot("sys")
+iabbr <buffer> <expr> this GCUpperDot("this")
+iabbr <buffer> <expr> throw GCUpperSpace("throw")
+iabbr <buffer> <expr> try GCUpper("try")
+iabbr <buffer> <expr> to GCUpperSpace("to")
+iabbr <buffer> <expr> true GCUpper("true")
+iabbr <buffer> <expr> until GCUpperSpace("until")
+iabbr <buffer> <expr> while GCUpperSpace("while")
+iabbr <buffer> <expr> repeat GCUpper("repeat")
+
+nnoremap <silent> <buffer> [[ m`:call ZimbuGoStartBlock()<CR>
+nnoremap <silent> <buffer> ]] m`:call ZimbuGoEndBlock()<CR>
+
+" Using a function makes sure the search pattern is restored
+func! ZimbuGoStartBlock()
+  ?^\s*\(FUNC\|PROC\|MAIN\|ENUM\|CLASS\|INTERFACE\)\>
+endfunc
+func! ZimbuGoEndBlock()
+  /^\s*\(FUNC\|PROC\|MAIN\|ENUM\|CLASS\|INTERFACE\)\>
+endfunc
+
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index c6db781..3970d65 100644 (file)
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:         Zsh shell script
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2008-07-09
+" Latest Revision:  2011-01-23
 
 if exists("b:did_ftplugin")
   finish
@@ -15,5 +15,12 @@ let b:undo_ftplugin = "setl com< cms< fo<"
 
 setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
 
+let b:match_words =
+      \   &matchpairs
+      \ . ',\<if\>:\<elif\>:\<else\>:\<fi\>'
+      \ . ',\<case\>:^\s*([^)]*):\<esac\>'
+      \ . ',\<\%(select\|while\|until\|repeat\|for\%(each\)\=\)\>:\<done\>'
+let b:match_skip = 's:comment\|string\|heredoc\|subst'
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
index cd99ce0..7828ff2 100644 (file)
@@ -1,11 +1,13 @@
 " Vim support file to switch off loading plugins for file types
 "
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2002 Apr 04
+" Last Change: 2011 Oct 20
 
 if exists("did_load_ftplugin")
   unlet did_load_ftplugin
 endif
 
-" Remove all autocommands in the filetypeplugin group
-silent! au! filetypeplugin *
+" Remove all autocommands in the filetypeplugin group, if any exist.
+if exists("#filetypeplugin")
+  silent! au! filetypeplugin *
+endif
index a9b461c..03fbaa3 100644 (file)
@@ -39,6 +39,8 @@ setlocal indentkeys+=0=~then,0=~end,0=~elsif,0=~when,0=~exception,0=~begin,0=~is
 if exists("*GetAdaIndent")
    finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists("g:ada_with_gnat_project_files")
    let s:AdaBlockStart = '^\s*\(if\>\|while\>\|else\>\|elsif\>\|loop\>\|for\>.*\<\(loop\|use\)\>\|declare\>\|begin\>\|type\>.*\<is\>[^;]*$\|\(type\>.*\)\=\<record\>\|procedure\>\|function\>\|accept\>\|do\>\|task\>\|package\>\|project\>\|then\>\|when\>\|is\>\)'
@@ -292,6 +294,9 @@ function GetAdaIndent()
    return ind
 endfunction GetAdaIndent
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
index 726a5dd..6f6b70c 100644 (file)
@@ -23,6 +23,7 @@
 " 26-04-2002 Got initial version working reasonably well
 " 29-04-2002 Fixed problems in function headers and max line width
 "           Added support for two-line if's without curly braces
+" Fixed hang: 2011 Aug 31
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -118,7 +119,7 @@ function! GetAwkIndent()
 
    " Case 1
    if prev_data =~ ')' && brace_balance < 0
-      while brace_balance != 0
+      while brace_balance != 0 && prev_lineno > 0
         let prev_lineno = s:Get_prev_line( prev_lineno )
         let prev_data = getline( prev_lineno )
         let brace_balance=brace_balance+s:Get_brace_balance(prev_data,'(',')' )
@@ -188,6 +189,9 @@ endfunction
 
 function! s:Seems_continuing( line )
   " Unfinished lines
+  if a:line =~ '\(--\|++\)\s*$'
+    return 0
+  endif
   if a:line =~ '[\\,\|\&\+\-\*\%\^]\s*$'
     return 1
   endif
diff --git a/runtime/indent/clojure.vim b/runtime/indent/clojure.vim
new file mode 100644 (file)
index 0000000..9a00fb3
--- /dev/null
@@ -0,0 +1,398 @@
+" Vim indent file
+" Language:     Clojure
+" Author:       Meikel Brandmeyer <mb@kotka.de>
+" URL:          http://kotka.de/projects/clojure/vimclojure.html
+"
+" Maintainer:   Sung Pae <self@sungpae.com>
+" URL:          https://github.com/guns/vim-clojure-static
+" License:      Same as Vim
+" Last Change:  30 January 2013
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+let b:did_indent = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+let b:undo_indent = 'setlocal autoindent< smartindent< lispwords< expandtab< softtabstop< shiftwidth< indentexpr< indentkeys<'
+
+setlocal noautoindent nosmartindent
+setlocal softtabstop=2 shiftwidth=2 expandtab
+setlocal indentkeys=!\ 6,o,O
+
+if exists("*searchpairpos")
+
+    if !exists('g:clojure_maxlines')
+        let g:clojure_maxlines = 100
+    endif
+
+    if !exists('g:clojure_fuzzy_indent')
+        let g:clojure_fuzzy_indent = 1
+    endif
+
+    if !exists('g:clojure_fuzzy_indent_patterns')
+        let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let']
+    endif
+
+    if !exists('g:clojure_fuzzy_indent_blacklist')
+        let g:clojure_fuzzy_indent_blacklist = ['-fn$', '\v^with-%(meta|out-str|loading-context)$']
+    endif
+
+    if !exists('g:clojure_special_indent_words')
+        let g:clojure_special_indent_words = 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
+    endif
+
+    if !exists('g:clojure_align_multiline_strings')
+        let g:clojure_align_multiline_strings = 0
+    endif
+
+    function! s:SynIdName()
+        return synIDattr(synID(line("."), col("."), 0), "name")
+    endfunction
+
+    function! s:CurrentChar()
+        return getline('.')[col('.')-1]
+    endfunction
+
+    function! s:CurrentWord()
+        return getline('.')[col('.')-1 : searchpos('\v>', 'n', line('.'))[1]-2]
+    endfunction
+
+    function! s:IsParen()
+        return s:CurrentChar() =~ '\v[\(\)\[\]\{\}]' &&
+             \ s:SynIdName() !~? '\vstring|comment'
+    endfunction
+
+    " Returns 1 if string matches a pattern in 'patterns', which may be a
+    " list of patterns, or a comma-delimited string of implicitly anchored
+    " patterns.
+    function! s:MatchesOne(patterns, string)
+        let list = type(a:patterns) == type([])
+                   \ ? a:patterns
+                   \ : map(split(a:patterns, ','), '"^" . v:val . "$"')
+        for pat in list
+            if a:string =~ pat | return 1 | endif
+        endfor
+    endfunction
+
+    function! s:SavePosition()
+        let [ _b, l, c, _o ] = getpos(".")
+        let b = bufnr("%")
+        return [b, l, c]
+    endfunction
+
+    function! s:RestorePosition(value)
+        let [b, l, c] = a:value
+        if bufnr("%") != b
+            execute b "buffer!"
+        endif
+        call setpos(".", [0, l, c, 0])
+    endfunction
+
+    function! s:MatchPairs(open, close, stopat)
+        " Stop only on vector and map [ resp. {. Ignore the ones in strings and
+        " comments.
+        if a:stopat == 0
+            let stopat = max([line(".") - g:clojure_maxlines, 0])
+        else
+            let stopat = a:stopat
+        endif
+
+        let pos = searchpairpos(a:open, '', a:close, 'bWn', "!s:IsParen()", stopat)
+        return [pos[0], virtcol(pos)]
+    endfunction
+
+    function! s:ClojureCheckForStringWorker()
+        " Check whether there is the last character of the previous line is
+        " highlighted as a string. If so, we check whether it's a ". In this
+        " case we have to check also the previous character. The " might be the
+        " closing one. In case the we are still in the string, we search for the
+        " opening ". If this is not found we take the indent of the line.
+        let nb = prevnonblank(v:lnum - 1)
+
+        if nb == 0
+            return -1
+        endif
+
+        call cursor(nb, 0)
+        call cursor(0, col("$") - 1)
+        if s:SynIdName() !~? "string"
+            return -1
+        endif
+
+        " This will not work for a " in the first column...
+        if s:CurrentChar() == '"'
+            call cursor(0, col("$") - 2)
+            if s:SynIdName() !~? "string"
+                return -1
+            endif
+            if s:CurrentChar() != '\\'
+                return -1
+            endif
+            call cursor(0, col("$") - 1)
+        endif
+
+        let p = searchpos('\(^\|[^\\]\)\zs"', 'bW')
+
+        if p != [0, 0]
+            return p[1] - 1
+        endif
+
+        return indent(".")
+    endfunction
+
+    function! s:CheckForString()
+        let pos = s:SavePosition()
+        try
+            let val = s:ClojureCheckForStringWorker()
+        finally
+            call s:RestorePosition(pos)
+        endtry
+        return val
+    endfunction
+
+    function! s:ClojureIsMethodSpecialCaseWorker(position)
+        " Find the next enclosing form.
+        call search('\S', 'Wb')
+
+        " Special case: we are at a '(('.
+        if s:CurrentChar() == '('
+            return 0
+        endif
+        call cursor(a:position)
+
+        let nextParen = s:MatchPairs('(', ')', 0)
+
+        " Special case: we are now at toplevel.
+        if nextParen == [0, 0]
+            return 0
+        endif
+        call cursor(nextParen)
+
+        call search('\S', 'W')
+        if g:clojure_special_indent_words =~ '\<' . s:CurrentWord() . '\>'
+            return 1
+        endif
+
+        return 0
+    endfunction
+
+    function! s:IsMethodSpecialCase(position)
+        let pos = s:SavePosition()
+        try
+            let val = s:ClojureIsMethodSpecialCaseWorker(a:position)
+        finally
+            call s:RestorePosition(pos)
+        endtry
+        return val
+    endfunction
+
+    function! GetClojureIndent()
+        " Get rid of special case.
+        if line(".") == 1
+            return 0
+        endif
+
+        " We have to apply some heuristics here to figure out, whether to use
+        " normal lisp indenting or not.
+        let i = s:CheckForString()
+        if i > -1
+            return i + !!g:clojure_align_multiline_strings
+        endif
+
+        call cursor(0, 1)
+
+        " Find the next enclosing [ or {. We can limit the second search
+        " to the line, where the [ was found. If no [ was there this is
+        " zero and we search for an enclosing {.
+        let paren = s:MatchPairs('(', ')', 0)
+        let bracket = s:MatchPairs('\[', '\]', paren[0])
+        let curly = s:MatchPairs('{', '}', bracket[0])
+
+        " In case the curly brace is on a line later then the [ or - in
+        " case they are on the same line - in a higher column, we take the
+        " curly indent.
+        if curly[0] > bracket[0] || curly[1] > bracket[1]
+            if curly[0] > paren[0] || curly[1] > paren[1]
+                return curly[1]
+            endif
+        endif
+
+        " If the curly was not chosen, we take the bracket indent - if
+        " there was one.
+        if bracket[0] > paren[0] || bracket[1] > paren[1]
+            return bracket[1]
+        endif
+
+        " There are neither { nor [ nor (, ie. we are at the toplevel.
+        if paren == [0, 0]
+            return 0
+        endif
+
+        " Now we have to reimplement lispindent. This is surprisingly easy, as
+        " soon as one has access to syntax items.
+        "
+        " - Check whether we are in a special position after a word in
+        "   g:clojure_special_indent_words. These are special cases.
+        " - Get the next keyword after the (.
+        " - If its first character is also a (, we have another sexp and align
+        "   one column to the right of the unmatched (.
+        " - In case it is in lispwords, we indent the next line to the column of
+        "   the ( + sw.
+        " - If not, we check whether it is last word in the line. In that case
+        "   we again use ( + sw for indent.
+        " - In any other case we use the column of the end of the word + 2.
+        call cursor(paren)
+
+        if s:IsMethodSpecialCase(paren)
+            return paren[1] + &shiftwidth - 1
+        endif
+
+        " In case we are at the last character, we use the paren position.
+        if col("$") - 1 == paren[1]
+            return paren[1]
+        endif
+
+        " In case after the paren is a whitespace, we search for the next word.
+        normal! l
+        if s:CurrentChar() == ' '
+            normal! w
+        endif
+
+        " If we moved to another line, there is no word after the (. We
+        " use the ( position for indent.
+        if line(".") > paren[0]
+            return paren[1]
+        endif
+
+        " We still have to check, whether the keyword starts with a (, [ or {.
+        " In that case we use the ( position for indent.
+        let w = s:CurrentWord()
+        if stridx('([{', w[0]) > -1
+            return paren[1]
+        endif
+
+        " Test words without namespace qualifiers and leading reader macro
+        " metacharacters.
+        "
+        " e.g. clojure.core/defn and #'defn should both indent like defn.
+        let ww = substitute(w, "\\v%(.*/|[#'`~@^,]*)(.*)", '\1', '')
+
+        if &lispwords =~ '\V\<' . ww . '\>'
+            return paren[1] + &shiftwidth - 1
+        endif
+
+        if g:clojure_fuzzy_indent
+            \ && !s:MatchesOne(g:clojure_fuzzy_indent_blacklist, ww)
+            \ && s:MatchesOne(g:clojure_fuzzy_indent_patterns, ww)
+            return paren[1] + &shiftwidth - 1
+        endif
+
+        normal! W
+        if paren[0] < line(".")
+            return paren[1] + &shiftwidth - 1
+        endif
+
+        normal! ge
+        return virtcol(".") + 1
+    endfunction
+
+    setlocal indentexpr=GetClojureIndent()
+
+else
+
+    " In case we have searchpairpos not available we fall back to
+    " normal lisp indenting.
+    setlocal indentexpr=
+    setlocal lisp
+    let b:undo_indent .= '| setlocal lisp<'
+
+endif
+
+" Specially indented symbols from clojure.core and clojure.test.
+"
+" Clojure symbols are indented in the defn style when they:
+"
+"   * Define vars and anonymous functions
+"   * Create new lexical scopes or scopes with altered environments
+"   * Create conditional branches from a predicate function or value
+"
+" The arglists for these functions are generally in the form of [x & body];
+" Functions that accept a flat list of forms do not treat the first argument
+" specially and hence are not indented specially.
+
+" Definitions
+setlocal lispwords=
+setlocal lispwords+=bound-fn
+setlocal lispwords+=def
+setlocal lispwords+=definline
+setlocal lispwords+=definterface
+setlocal lispwords+=defmacro
+setlocal lispwords+=defmethod
+setlocal lispwords+=defmulti
+setlocal lispwords+=defn
+setlocal lispwords+=defn-
+setlocal lispwords+=defonce
+setlocal lispwords+=defprotocol
+setlocal lispwords+=defrecord
+setlocal lispwords+=defstruct
+setlocal lispwords+=deftest " clojure.test
+setlocal lispwords+=deftest- " clojure.test
+setlocal lispwords+=deftype
+setlocal lispwords+=extend
+setlocal lispwords+=extend-protocol
+setlocal lispwords+=extend-type
+setlocal lispwords+=fn
+setlocal lispwords+=ns
+setlocal lispwords+=proxy
+setlocal lispwords+=reify
+setlocal lispwords+=set-test " clojure.test
+
+" Binding forms
+setlocal lispwords+=as->
+setlocal lispwords+=binding
+setlocal lispwords+=doall
+setlocal lispwords+=dorun
+setlocal lispwords+=doseq
+setlocal lispwords+=dotimes
+setlocal lispwords+=doto
+setlocal lispwords+=for
+setlocal lispwords+=if-let
+setlocal lispwords+=let
+setlocal lispwords+=letfn
+setlocal lispwords+=locking
+setlocal lispwords+=loop
+setlocal lispwords+=testing " clojure.test
+setlocal lispwords+=when-first
+setlocal lispwords+=when-let
+setlocal lispwords+=with-bindings
+setlocal lispwords+=with-in-str
+setlocal lispwords+=with-local-vars
+setlocal lispwords+=with-open
+setlocal lispwords+=with-precision
+setlocal lispwords+=with-redefs
+setlocal lispwords+=with-redefs-fn
+setlocal lispwords+=with-test " clojure.test
+
+" Conditional branching
+setlocal lispwords+=case
+setlocal lispwords+=cond->
+setlocal lispwords+=cond->>
+setlocal lispwords+=condp
+setlocal lispwords+=if
+setlocal lispwords+=if-not
+setlocal lispwords+=when
+setlocal lispwords+=when-not
+setlocal lispwords+=while
+
+" Exception handling
+setlocal lispwords+=catch
+setlocal lispwords+=try " For aesthetics when enclosing single line
+
+let &cpo = s:save_cpo
+unlet! s:save_cpo
+
+" vim:sts=4 sw=4 et:
index 8c408fb..421afcb 100644 (file)
@@ -23,6 +23,8 @@ setlocal indentkeys+==ENDIF(,ENDFOREACH(,ENDMACRO(,ELSE(,ELSEIF(,ENDWHILE(
 if exists("*CMakeGetIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 fun! CMakeGetIndent(lnum)
   let this_line = getline(a:lnum)
@@ -83,3 +85,6 @@ fun! CMakeGetIndent(lnum)
 
   return ind
 endfun
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index d13c1ad..f0a272e 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:        CSS
 " Maintainer:      Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-12-20
+" Latest Revision:  2012-05-30
 
 if exists("b:did_indent")
   finish
@@ -12,9 +12,13 @@ setlocal indentexpr=GetCSSIndent()
 setlocal indentkeys=0{,0},!^F,o,O
 setlocal nosmartindent
 
+let b:undo_indent = "setl smartindent< indentkeys< indentexpr<"
+
 if exists("*GetCSSIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 function s:prevnonblanknoncomment(lnum)
   let lnum = a:lnum
@@ -64,8 +68,6 @@ function GetCSSIndent()
   let line = getline(v:lnum)
   if line =~ '^\s*\*'
     return cindent(v:lnum)
-  elseif line =~ '^\s*}'
-    return indent(v:lnum) - &sw
   endif
 
   let pnum = s:prevnonblanknoncomment(v:lnum - 1)
@@ -73,12 +75,9 @@ function GetCSSIndent()
     return 0
   endif
 
-  let ind = indent(pnum) + s:count_braces(pnum, 1) * &sw
-
-  let pline = getline(pnum)
-  if pline =~ '}\s*$'
-    let ind -= (s:count_braces(pnum, 0) - (pline =~ '^\s*}' ? 1 : 0)) * &sw
-  endif
-
-  return ind
+  return indent(pnum) + s:count_braces(pnum, 1) * &sw
+        \ - s:count_braces(v:lnum, 0) * &sw
 endfunction
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index a19d123..965c778 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:    Cucumber
 " Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 if exists("b:did_indent")
   finish
@@ -12,6 +12,8 @@ setlocal autoindent
 setlocal indentexpr=GetCucumberIndent()
 setlocal indentkeys=o,O,*<Return>,<:>,0<Bar>,0#,=,!^F
 
+let b:undo_indent = 'setl ai< inde< indk<'
+
 " Only define the function once.
 if exists("*GetCucumberIndent")
   finish
@@ -24,35 +26,47 @@ endfunction
 function! GetCucumberIndent()
   let line  = getline(prevnonblank(v:lnum-1))
   let cline = getline(v:lnum)
+  let nline = getline(nextnonblank(v:lnum+1))
   let syn = s:syn(prevnonblank(v:lnum-1))
   let csyn = s:syn(v:lnum)
+  let nsyn = s:syn(nextnonblank(v:lnum+1))
   if csyn ==# 'cucumberFeature' || cline =~# '^\s*Feature:'
+    " feature heading
     return 0
   elseif csyn ==# 'cucumberExamples' || cline =~# '^\s*\%(Examples\|Scenarios\):'
+    " examples heading
     return 2 * &sw
   elseif csyn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || cline =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):'
+    " background, scenario or outline heading
     return &sw
   elseif syn ==# 'cucumberFeature' || line =~# '^\s*Feature:'
+    " line after feature heading
     return &sw
   elseif syn ==# 'cucumberExamples' || line =~# '^\s*\%(Examples\|Scenarios\):'
+    " line after examples heading
     return 3 * &sw
   elseif syn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || line =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):'
+    " line after background, scenario or outline heading
     return 2 * &sw
-  elseif cline =~# '^\s*@' && (s:syn(nextnonblank(v:lnum+1)) == 'cucumberFeature' || getline(nextnonblank(v:lnum+1)) =~# '^\s*Feature:' || indent(prevnonblank(v:lnum-1)) <= 0)
+  elseif cline =~# '^\s*[@#]' && (nsyn == 'cucumberFeature' || nline =~# '^\s*Feature:' || indent(prevnonblank(v:lnum-1)) <= 0)
+    " tag or comment before a feature heading
     return 0
-  elseif line =~# '^\s*@'
+  elseif cline =~# '^\s*@'
+    " other tags
     return &sw
-  elseif cline =~# '^\s*|' && line =~# '^\s*|'
+  elseif cline =~# '^\s*[#|]' && line =~# '^\s*|'
+    " mid-table
+    " preserve indent
     return indent(prevnonblank(v:lnum-1))
-  elseif cline =~# '^\s*|' && line =~# '^\s*[^|#]'
+  elseif cline =~# '^\s*|' && line =~# '^\s*[^|]'
+    " first line of a table, relative indent
     return indent(prevnonblank(v:lnum-1)) + &sw
-  elseif cline =~# '^\s*[^|# \t]' && line =~# '^\s*|'
+  elseif cline =~# '^\s*[^|]' && line =~# '^\s*|'
+    " line after a table, relative unindent
     return indent(prevnonblank(v:lnum-1)) - &sw
-  elseif cline =~# '^\s*$' && line =~# '^\s*|'
-    let in = indent(prevnonblank(v:lnum-1))
-    return in == indent(v:lnum) ? in : in - &sw
-  elseif cline =~# '^\s*#' && getline(v:lnum-1) =~ '^\s*$' && getline(v:lnum+1) =~# '\S'
-    return indent(getline(v:lnum+1))
+  elseif cline =~# '^\s*#' && getline(v:lnum-1) =~ '^\s*$' && (nsyn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || nline =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):')
+    " comments on scenarios
+    return &sw
   endif
   return indent(prevnonblank(v:lnum-1))
 endfunction
index 3c35116..88c0c51 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:        DTD (Document Type Definition for XML)
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2008-07-18
+" Latest Revision:  2011-07-08
 
 let s:cpo_save = &cpo
 set cpo&vim
@@ -52,7 +52,7 @@ function s:indent_to_innermost_parentheses(line, end)
   let end = a:end
   let parentheses = [end - 1]
   while token != ""
-    let [token, end] = s:lex(a:line, end, '^\%([(),|]\|[A-Za-z0-9_-]\+\)[?*+]\=')
+    let [token, end] = s:lex(a:line, end, '^\%([(),|]\|[A-Za-z0-9_-]\+\|#P\=CDATA\|%[A-Za-z0-9_-]\+;\)[?*+]\=')
     if token[0] == '('
       call add(parentheses, end - 1)
     elseif token[0] == ')'
@@ -80,7 +80,7 @@ function GetDTDIndent()
   let lnum = line('.')
   let col = col('.')
   let indent = indent('.')
-  let line = join(getline(lnum, v:lnum - 1), "\n")
+  let line = lnum == v:lnum ? getline(lnum) : join(getline(lnum, v:lnum - 1), "\n")
 
   let [declaration, end] = s:lex1(line, col)
   if declaration == ""
@@ -106,7 +106,7 @@ function GetDTDIndent()
     " Check for token following element name.  This can be a specification of
     " whether the start or end tag may be omitted.  If nothing is found, indent
     " one level.
-    let [token, end] = s:lex(line, end)
+    let [token, end] = s:lex(line, end, '^\%([-O(]\|ANY\|EMPTY\)')
     let n = 0
     while token =~ '[-O]' && n < 2
       let [token, end] = s:lex(line, end, '^\%([-O(]\|ANY\|EMPTY\)')
@@ -214,8 +214,7 @@ function GetDTDIndent()
 
       " Finally look for the attribute’s default value.  If non exists, indent
       " two levels.
-      " TODO: Do validation of keywords (#REQUIRED|#IMPLIED)?
-      let [default, end] = s:lex(line, end, '^\%("\_[^"]*"\|[^[:space:]]\+\)')
+      let [default, end] = s:lex(line, end, '^\%("\_[^"]*"\|#\(REQUIRED\|IMPLIED\|FIXED\)\)')
       if default == ""
         return indent + &sw * 2
       elseif default == '#FIXED'
@@ -323,3 +322,4 @@ function GetDTDIndent()
 endfunction
 
 let &cpo = s:cpo_save
+unlet s:cpo_save
index db66bf8..87e82e8 100644 (file)
@@ -1,11 +1,11 @@
 " Vim indent file
 " Language:    Eiffel
-" Maintainer:  Jocelyn Fiat <eiffel@djoce.net>
+" Maintainer:  Jocelyn Fiat <jfiat@eiffel.com>
 " Previous-Maintainer: David Clarke <gadicath@dishevelled.net>
+" Contributions from: Thilo Six
 " $Date: 2004/12/09 21:33:52 $
 " $Revision: 1.3 $
-" URL: http://www.djoce.net/page/vim/
-" Last Change: 2004 Sept 14 : removed specific value for tab (sw)
+" URL: https://github.com/eiffelhub/vim-eiffel
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -23,6 +23,8 @@ setlocal indentkeys+==end,=else,=ensure,=require,=check,=loop,=until
 setlocal indentkeys+==creation,=feature,=inherit,=class,=is,=redefine,=rename,=variant
 setlocal indentkeys+==invariant,=do,=local,=export
 
+let b:undo_indent = "setl smartindent< indentkeys< indentexpr< autoindent< comments< "
+
 " Define some stuff
 " keywords grouped by indenting
 let s:trust_user_indent = '\(+\)\(\s*\(--\).*\)\=$'
@@ -38,6 +40,9 @@ if exists("*GetEiffelIndent")
   finish
 endif
 
+let s:keepcpo= &cpo
+set cpo&vim
+
 function GetEiffelIndent()
 
   " Eiffel Class indenting
@@ -103,4 +108,7 @@ function GetEiffelIndent()
   return ind
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:sw=2
index 5ce3f82..7569fe9 100644 (file)
 " Vim indent file
-" Language:     Erlang
-" Maintainer:   Csaba Hoch <csaba.hoch@gmail.com>
-" Contributor:  Edwin Fine <efine145_nospam01 at usa dot net>
-" Last Change:  2008 Mar 12
+" Language:     Erlang (http://www.erlang.org)
+" Author:       Csaba Hoch <csaba.hoch@gmail.com>
+" Contributors: Edwin Fine <efine145_nospam01 at usa dot net>
+"               Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
+"               Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+" Last Update:  2013-Jul-21
+" License:      Vim license
+" URL:          https://github.com/hcs42/vim-erlang
 
-" Only load this indent file when no other was loaded.
-if exists("b:did_indent")
+" Note About Usage:
+"   This indentation script works best with the Erlang syntax file created by
+"   KreÄ…imir Marľić (Kresimir Marzic) and maintained by Csaba Hoch.
+
+" Notes About Implementation:
+"
+" - LTI = Line to indent.
+" - The index of the first line is 1, but the index of the first column is 0.
+
+
+" Initialization {{{1
+" ==============
+
+" Only load this indent file when no other was loaded
+" Vim 7 or later is needed
+if exists("b:did_indent") || version < 700
   finish
+else
+  let b:did_indent = 1
 endif
-let b:did_indent = 1
 
 setlocal indentexpr=ErlangIndent()
-setlocal indentkeys+==after,=end,=catch,=),=],=}
+setlocal indentkeys+=0=end,0=of,0=catch,0=after,0=when,0=),0=],0=},0=>>
 
-" Only define the functions once.
+" Only define the functions once
 if exists("*ErlangIndent")
-   finish
+  finish
 endif
 
-" The function go through the whole line, analyses it and sets the indentation
-" (ind variable).
-" l: the number of the line to be examined.
-function s:ErlangIndentAtferLine(l)
-    let i = 0 " the index of the current character in the line
-    let length = strlen(a:l) " the length of the line
-    let ind = 0 " how much should be the difference between the indentation of
-                " the current line and the indentation of the next line?
-                " e.g. +1: the indentation of the next line should be equal to
-                " the indentation of the current line plus one shiftwidth
-    let lastFun = 0 " the last token was a 'fun'
-    let lastReceive = 0 " the last token was a 'receive'; needed for 'after'
-    let lastHashMark = 0 " the last token was a 'hashmark'
-
-    while 0<= i && i < length
-
-        " m: the next value of the i
-        if a:l[i] == '%'
-            break
-        elseif a:l[i] == '"'
-            let m = matchend(a:l,'"\%([^"\\]\|\\.\)*"',i)
-            let lastReceive = 0
-        elseif a:l[i] == "'"
-            let m = matchend(a:l,"'[^']*'",i)
-            let lastReceive = 0
-        elseif a:l[i] =~# "[a-z]"
-            let m = matchend(a:l,".[[:alnum:]_]*",i)
-            if lastFun
-                let ind = ind - 1
-                let lastFun = 0
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^\%(case\|if\|try\)$'
-                let ind = ind + 1
-            elseif a:l[(i):(m-1)] =~# '^receive$'
-                let ind = ind + 1
-                let lastReceive = 1
-            elseif a:l[(i):(m-1)] =~# '^begin$'
-                let ind = ind + 2
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^end$'
-                let ind = ind - 2
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^after$'
-                if lastReceive == 0
-                    let ind = ind - 1
-                else
-                    let ind = ind + 0
-                end
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^fun$'
-                let ind = ind + 1
-                let lastFun = 1
-                let lastReceive = 0
-            endif
-        elseif a:l[i] =~# "[A-Z_]"
-            let m = matchend(a:l,".[[:alnum:]_]*",i)
-            let lastReceive = 0
-        elseif a:l[i] == '$'
-            let m = i+2
-            let lastReceive = 0
-        elseif a:l[i] == "." && (i+1>=length || a:l[i+1]!~ "[0-9]")
-            let m = i+1
-            if lastHashMark
-                let lastHashMark = 0
-            else
-                let ind = ind - 1
-            end
-            let lastReceive = 0
-        elseif a:l[i] == '-' && (i+1<length && a:l[i+1]=='>')
-            let m = i+2
-            let ind = ind + 1
-            let lastReceive = 0
-        elseif a:l[i] == ';'
-            let m = i+1
-            let ind = ind - 1
-            let lastReceive = 0
-        elseif a:l[i] == '#'
-            let m = i+1
-            let lastHashMark = 1
-        elseif a:l[i] =~# '[({[]'
-            let m = i+1
-            let ind = ind + 1
-            let lastFun = 0
-            let lastReceive = 0
-            let lastHashMark = 0
-        elseif a:l[i] =~# '[)}\]]'
-            let m = i+1
-            let ind = ind - 1
-            let lastReceive = 0
-        else
-            let m = i+1
-        endif
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Logging library {{{1
+" ===============
+
+" Purpose:
+"   Logs the given string using the ErlangIndentLog function if it exists.
+" Parameters:
+"   s: string
+function! s:Log(s)
+  if exists("*ErlangIndentLog")
+    call ErlangIndentLog(a:s)
+  endif
+endfunction
+
+" Line tokenizer library {{{1
+" ======================
+
+" Indtokens are "indentation tokens".
+
+" Purpose:
+"   Calculate the new virtual column after the given segment of a line.
+" Parameters:
+"   line: string
+"   first_index: integer -- the index of the first character of the segment
+"   last_index: integer -- the index of the last character of the segment
+"   vcol: integer -- the virtual column of the first character of the token
+"   tabstop: integer -- the value of the 'tabstop' option to be used
+" Returns:
+"   vcol: integer
+" Example:
+"   " index:    0 12 34567
+"   " vcol:     0 45 89
+"   s:CalcVCol("\t'\tx', b", 1, 4, 4)  -> 10
+function! s:CalcVCol(line, first_index, last_index, vcol, tabstop)
+
+  " We copy the relevent segment of the line, otherwise if the line were
+  " e.g. `"\t", term` then the else branch below would consume the `", term`
+  " part at once.
+  let line = a:line[a:first_index : a:last_index]
+
+  let i = 0
+  let last_index = a:last_index - a:first_index
+  let vcol = a:vcol
+
+  while 0 <= i && i <= last_index
+
+    if line[i] ==# "\t"
+      " Example (when tabstop == 4):
+      "
+      " vcol + tab -> next_vcol
+      " 0 + tab -> 4
+      " 1 + tab -> 4
+      " 2 + tab -> 4
+      " 3 + tab -> 4
+      " 4 + tab -> 8
+      "
+      " next_i - i == the number of tabs
+      let next_i = matchend(line, '\t*', i + 1)
+      let vcol = (vcol / a:tabstop + (next_i - i)) * a:tabstop
+      call s:Log('new vcol after tab: '. vcol)
+    else
+      let next_i = matchend(line, '[^\t]*', i + 1)
+      let vcol += next_i - i
+      call s:Log('new vcol after other: '. vcol)
+    endif
+    let i = next_i
+  endwhile
+
+  return vcol
+endfunction
+
+" Purpose:
+"   Go through the whole line and return the tokens in the line.
+" Parameters:
+"   line: string -- the line to be examined
+"   string_continuation: bool
+"   atom_continuation: bool
+" Returns:
+"   indtokens = [indtoken]
+"   indtoken = [token, vcol, col]
+"   token = string (examples: 'begin', '<variable>', '}')
+"   vcol = integer (the virtual column of the first character of the token)
+"   col = integer
+function! s:GetTokensFromLine(line, string_continuation, atom_continuation,
+                             \tabstop)
+
+  let linelen = strlen(a:line) " The length of the line
+  let i = 0 " The index of the current character in the line
+  let vcol = 0 " The virtual column of the current character
+  let indtokens = []
+
+  if a:string_continuation
+    let i = matchend(a:line, '^\%([^"\\]\|\\.\)*"', 0)
+    if i ==# -1
+      call s:Log('    Whole line is string continuation -> ignore')
+      return []
+    else
+      let vcol = s:CalcVCol(a:line, 0, i - 1, 0, a:tabstop)
+      call add(indtokens, ['<string_end>', vcol, i])
+    endif
+  elseif a:atom_continuation
+    let i = matchend(a:line, "^\\%([^'\\\\]\\|\\\\.\\)*'", 0)
+    if i ==# -1
+      call s:Log('    Whole line is quoted atom continuation -> ignore')
+      return []
+    else
+      let vcol = s:CalcVCol(a:line, 0, i - 1, 0, a:tabstop)
+      call add(indtokens, ['<quoted_atom_end>', vcol, i])
+    endif
+  endif
+
+  while 0 <= i && i < linelen
+
+    let next_vcol = ''
+
+    " Spaces
+    if a:line[i] ==# ' '
+      let next_i = matchend(a:line, ' *', i + 1)
+
+    " Tabs
+    elseif a:line[i] ==# "\t"
+      let next_i = matchend(a:line, '\t*', i + 1)
+
+      " See example in s:CalcVCol
+      let next_vcol = (vcol / a:tabstop + (next_i - i)) * a:tabstop
+
+    " Comment
+    elseif a:line[i] ==# '%'
+      let next_i = linelen
+
+    " String token: "..."
+    elseif a:line[i] ==# '"'
+      let next_i = matchend(a:line, '\%([^"\\]\|\\.\)*"', i + 1)
+      if next_i ==# -1
+        call add(indtokens, ['<string_start>', vcol, i])
+      else
+        let next_vcol = s:CalcVCol(a:line, i, next_i - 1, vcol, a:tabstop)
+        call add(indtokens, ['<string>', vcol, i])
+      endif
+
+    " Quoted atom token: '...'
+    elseif a:line[i] ==# "'"
+      let next_i = matchend(a:line, "\\%([^'\\\\]\\|\\\\.\\)*'", i + 1)
+      if next_i ==# -1
+        call add(indtokens, ['<quoted_atom_start>', vcol, i])
+      else
+        let next_vcol = s:CalcVCol(a:line, i, next_i - 1, vcol, a:tabstop)
+        call add(indtokens, ['<quoted_atom>', vcol, i])
+      endif
+
+    " Keyword or atom or variable token or number
+    elseif a:line[i] =~# '[a-zA-Z_@0-9]'
+      let next_i = matchend(a:line,
+                           \'[[:alnum:]_@:]*\%(\s*#\s*[[:alnum:]_@:]*\)\=',
+                           \i + 1)
+      call add(indtokens, [a:line[(i):(next_i - 1)], vcol, i])
+
+    " Character token: $<char> (as in: $a)
+    elseif a:line[i] ==# '$'
+      call add(indtokens, ['$.', vcol, i])
+      let next_i = i + 2
+
+    " Dot token: .
+    elseif a:line[i] ==# '.'
+
+      let next_i = i + 1
+
+      if i + 1 ==# linelen || a:line[i + 1] =~# '[[:blank:]%]'
+        " End of clause token: . (as in: f() -> ok.)
+        call add(indtokens, ['<end_of_clause>', vcol, i])
+
+      else
+        " Possibilities:
+        " - Dot token in float: . (as in: 3.14)
+        " - Dot token in record: . (as in: #myrec.myfield)
+        call add(indtokens, ['.', vcol, i])
+      endif
+
+    " Equal sign
+    elseif a:line[i] ==# '='
+      " This is handled separately so that "=<<" will be parsed as
+      " ['=', '<<'] instead of ['=<', '<']. Although Erlang parses it
+      " currently in the latter way, that may be fixed some day.
+      call add(indtokens, [a:line[i], vcol, i])
+      let next_i = i + 1
+
+    " Three-character tokens
+    elseif i + 1 < linelen &&
+         \ index(['=:=', '=/='], a:line[i : i + 1]) != -1
+      call add(indtokens, [a:line[i : i + 1], vcol, i])
+      let next_i = i + 2
+
+    " Two-character tokens
+    elseif i + 1 < linelen &&
+         \ index(['->', '<<', '>>', '||', '==', '/=', '=<', '>=', '++', '--',
+         \        '::'],
+         \       a:line[i : i + 1]) != -1
+      call add(indtokens, [a:line[i : i + 1], vcol, i])
+      let next_i = i + 2
+
+    " Other character: , ; < > ( ) [ ] { } # + - * / : ? = ! |
+    else
+      call add(indtokens, [a:line[i], vcol, i])
+      let next_i = i + 1
+
+    endif
+
+    if next_vcol ==# ''
+      let vcol += next_i - i
+    else
+      let vcol = next_vcol
+    endif
+
+    let i = next_i
+
+  endwhile
+
+  return indtokens
+
+endfunction
+
+" TODO: doc, handle "not found" case
+function! s:GetIndtokenAtCol(indtokens, col)
+  let i = 0
+  while i < len(a:indtokens)
+    if a:indtokens[i][2] ==# a:col
+      return [1, i]
+    elseif a:indtokens[i][2] > a:col
+      return [0, s:IndentError('No token at col ' . a:col . ', ' .
+                              \'indtokens = ' . string(a:indtokens),
+                              \'', '')]
+    endif
+    let i += 1
+  endwhile
+  return [0, s:IndentError('No token at col ' . a:col . ', ' .
+                           \'indtokens = ' . string(a:indtokens),
+                           \'', '')]
+endfunction
 
-        let i = m
+" Stack library {{{1
+" =============
 
-    endwhile
+" Purpose:
+"   Push a token onto the parser's stack.
+" Parameters:
+"   stack: [token]
+"   token: string
+function! s:Push(stack, token)
+  call s:Log('    Stack Push: "' . a:token . '" into ' . string(a:stack))
+  call insert(a:stack, a:token)
+endfunction
+
+" Purpose:
+"   Pop a token from the parser's stack.
+" Parameters:
+"   stack: [token]
+"   token: string
+" Returns:
+"   token: string -- the removed element
+function! s:Pop(stack)
+  let head = remove(a:stack, 0)
+  call s:Log('    Stack Pop: "' . head . '" from ' . string(a:stack))
+  return head
+endfunction
+
+" Library for accessing and storing tokenized lines {{{1
+" =================================================
 
-    return ind
+" The Erlang token cache: an `lnum -> indtokens` dictionary that stores the
+" tokenized lines.
+let s:all_tokens = {}
+let s:file_name = ''
+let s:last_changedtick = -1
 
+" Purpose:
+"   Clear the Erlang token cache if we have a different file or the file has
+"   been changed since the last indentation.
+function! s:ClearTokenCacheIfNeeded()
+  let file_name = expand('%:p')
+  if file_name != s:file_name ||
+   \ b:changedtick != s:last_changedtick
+    let s:file_name = file_name
+    let s:last_changedtick = b:changedtick
+    let s:all_tokens = {}
+  endif
 endfunction
 
-function s:FindPrevNonBlankNonComment(lnum)
+" Purpose:
+"   Return the tokens of line `lnum`, if that line is not empty. If it is
+"   empty, find the first non-empty line in the given `direction` and return
+"   the tokens of that line.
+" Parameters:
+"   lnum: integer
+"   direction: 'up' | 'down'
+" Returns:
+"   result: [] -- the result is an empty list if we hit the beginning or end
+"                  of the file
+"           | [lnum, indtokens]
+"   lnum: integer -- the index of the non-empty line that was found and
+"                    tokenized
+"   indtokens: [indtoken] -- the tokens of line `lnum`
+function! s:TokenizeLine(lnum, direction)
+
+  call s:Log('Tokenizing starts from line ' . a:lnum)
+  if a:direction ==# 'up'
     let lnum = prevnonblank(a:lnum)
+  else " a:direction ==# 'down'
+    let lnum = nextnonblank(a:lnum)
+  endif
+
+  " We hit the beginning or end of the file
+  if lnum ==# 0
+    let indtokens = []
+    call s:Log('  We hit the beginning or end of the file.')
+
+    " The line has already been parsed
+  elseif has_key(s:all_tokens, lnum)
+    let indtokens = s:all_tokens[lnum]
+    call s:Log('Cached line ' . lnum . ': ' . getline(lnum))
+    call s:Log("  Tokens in the line:\n    - " . join(indtokens, "\n    - "))
+
+    " The line should be parsed now
+  else
+
+    " Parse the line
     let line = getline(lnum)
-    " continue to search above if the current line begins with a '%'
-    while line =~# '^\s*%.*$'
-        let lnum = prevnonblank(lnum - 1)
-        if 0 == lnum
-            return 0
-        endif
-        let line = getline(lnum)
-    endwhile
-    return lnum
+    let string_continuation = s:IsLineStringContinuation(lnum)
+    let atom_continuation = s:IsLineAtomContinuation(lnum)
+    let indtokens = s:GetTokensFromLine(line, string_continuation,
+                                       \atom_continuation, &tabstop)
+    let s:all_tokens[lnum] = indtokens
+    call s:Log('Tokenizing line ' . lnum . ': ' . line)
+    call s:Log("  Tokens in the line:\n    - " . join(indtokens, "\n    - "))
+
+  endif
+
+  return [lnum, indtokens]
 endfunction
 
-function ErlangIndent()
+" Purpose:
+"   As a helper function for PrevIndToken and NextIndToken, the FindIndToken
+"   function finds the first line with at least one token in the given
+"   direction.
+" Parameters:
+"   lnum: integer
+"   direction: 'up' | 'down'
+" Returns:
+"   result: [] -- the result is an empty list if we hit the beginning or end
+"                  of the file
+"           | indtoken
+function! s:FindIndToken(lnum, dir)
+  let lnum = a:lnum
+  while 1
+    let lnum += (a:dir ==# 'up' ? -1 : 1)
+    let [lnum, indtokens] = s:TokenizeLine(lnum, a:dir)
+    if lnum ==# 0
+      " We hit the beginning or end of the file
+      return []
+    elseif !empty(indtokens)
+      return indtokens[a:dir ==# 'up' ? -1 : 0]
+    endif
+  endwhile
+endfunction
 
-    " Find a non-blank line above the current line.
-    let lnum = prevnonblank(v:lnum - 1)
+" Purpose:
+"   Find the token that directly precedes the given token.
+" Parameters:
+"   lnum: integer -- the line of the given token
+"   i: the index of the given token within line `lnum`
+" Returns:
+"   result = [] -- the result is an empty list if the given token is the first
+"                  token of the file
+"          | indtoken
+function! s:PrevIndToken(lnum, i)
+  call s:Log('    PrevIndToken called: lnum=' . a:lnum . ', i =' . a:i)
 
-    " Hit the start of the file, use zero indent.
-    if lnum == 0
-        return 0
+  " If the current line has a previous token, return that
+  if a:i > 0
+    return s:all_tokens[a:lnum][a:i - 1]
+  else
+    return s:FindIndToken(a:lnum, 'up')
+  endif
+endfunction
+
+" Purpose:
+"   Find the token that directly succeeds the given token.
+" Parameters:
+"   lnum: integer -- the line of the given token
+"   i: the index of the given token within line `lnum`
+" Returns:
+"   result = [] -- the result is an empty list if the given token is the last
+"                  token of the file
+"          | indtoken
+function! s:NextIndToken(lnum, i)
+  call s:Log('    NextIndToken called: lnum=' . a:lnum . ', i =' . a:i)
+
+  " If the current line has a next token, return that
+  if len(s:all_tokens[a:lnum]) > a:i + 1
+    return s:all_tokens[a:lnum][a:i + 1]
+  else
+    return s:FindIndToken(a:lnum, 'down')
+  endif
+endfunction
+
+" ErlangCalcIndent helper functions {{{1
+" =================================
+
+" Purpose:
+"   This function is called when the parser encounters a syntax error.
+"
+"   If we encounter a syntax error, we return
+"   g:erlang_unexpected_token_indent, which is -1 by default. This means that
+"   the indentation of the LTI will not be changed.
+" Parameter:
+"   msg: string
+"   token: string
+"   stack: [token]
+" Returns:
+"   indent: integer
+function! s:IndentError(msg, token, stack)
+  call s:Log('Indent error: ' . a:msg . ' -> return')
+  call s:Log('  Token = ' . a:token . ', ' .
+            \'  stack = ' . string(a:stack))
+  return g:erlang_unexpected_token_indent
+endfunction
+
+" Purpose:
+"   This function is called when the parser encounters an unexpected token,
+"   and the parser will return the number given back by UnexpectedToken.
+"
+"   If we encounter an unexpected token, we return
+"   g:erlang_unexpected_token_indent, which is -1 by default. This means that
+"   the indentation of the LTI will not be changed.
+" Parameter:
+"   token: string
+"   stack: [token]
+" Returns:
+"   indent: integer
+function! s:UnexpectedToken(token, stack)
+  call s:Log('    Unexpected token ' . a:token . ', stack = ' .
+            \string(a:stack) . ' -> return')
+  return g:erlang_unexpected_token_indent
+endfunction
+
+if !exists('g:erlang_unexpected_token_indent')
+  let g:erlang_unexpected_token_indent = -1
+endif
+
+" Purpose:
+"   Return whether the given line starts with a string continuation.
+" Parameter:
+"   lnum: integer
+" Returns:
+"   result: bool
+" Example:
+"   f() ->           % IsLineStringContinuation = false
+"       "This is a   % IsLineStringContinuation = false
+"       multiline    % IsLineStringContinuation = true
+"       string".     % IsLineStringContinuation = true
+function! s:IsLineStringContinuation(lnum)
+  if has('syntax_items')
+    return synIDattr(synID(a:lnum, 1, 0), 'name') =~# '^erlangString'
+  else
+    return 0
+  endif
+endfunction
+
+" Purpose:
+"   Return whether the given line starts with an atom continuation.
+" Parameter:
+"   lnum: integer
+" Returns:
+"   result: bool
+" Example:
+"   'function with   % IsLineAtomContinuation = true, but should be false
+"   weird name'() -> % IsLineAtomContinuation = true
+"       ok.          % IsLineAtomContinuation = false
+function! s:IsLineAtomContinuation(lnum)
+  if has('syntax_items')
+    return synIDattr(synID(a:lnum, 1, 0), 'name') =~# '^erlangQuotedAtom'
+  else
+    return 0
+  endif
+endfunction
+
+" Purpose:
+"   Return whether the 'catch' token (which should be the `i`th token in line
+"   `lnum`) is standalone or part of a try-catch block, based on the preceding
+"   token.
+" Parameters:
+"   lnum: integer
+"   i: integer
+" Return:
+"   is_standalone: bool
+function! s:IsCatchStandalone(lnum, i)
+  call s:Log('    IsCatchStandalone called: lnum=' . a:lnum . ', i=' . a:i)
+  let prev_indtoken = s:PrevIndToken(a:lnum, a:i)
+
+  " If we hit the beginning of the file, it is not a catch in a try block
+  if prev_indtoken == []
+    return 1
+  endif
+
+  let prev_token = prev_indtoken[0]
+
+  if prev_token =~# '[A-Z_@0-9]'
+    let is_standalone = 0
+  elseif prev_token =~# '[a-z]'
+    if index(['after', 'and', 'andalso', 'band', 'begin', 'bnot', 'bor', 'bsl',
+            \ 'bsr', 'bxor', 'case', 'catch', 'div', 'not', 'or', 'orelse',
+            \ 'rem', 'try', 'xor'], prev_token) != -1
+      " If catch is after these keywords, it is standalone
+      let is_standalone = 1
+    else
+      " If catch is after another keyword (e.g. 'end') or an atom, it is
+      " part of try-catch.
+      "
+      " Keywords:
+      " - may precede 'catch': end
+      " - may not precede 'catch': fun if of receive when
+      " - unused: cond let query
+      let is_standalone = 0
     endif
+  elseif index([')', ']', '}', '<string>', '<string_end>', '<quoted_atom>',
+              \ '<quoted_atom_end>', '$.'], prev_token) != -1
+    let is_standalone = 0
+  else
+    " This 'else' branch includes the following tokens:
+    "   -> == /= =< < >= > =:= =/= + - * / ++ -- :: < > ; ( [ { ? = ! . |
+    let is_standalone = 1
+  endif
 
-    let prevline = getline(lnum)
-    let currline = getline(v:lnum)
+  call s:Log('   "catch" preceded by "' . prev_token  . '" -> catch ' .
+            \(is_standalone ? 'is standalone' : 'belongs to try-catch'))
+  return is_standalone
 
-    let ind = indent(lnum) + &sw * s:ErlangIndentAtferLine(prevline)
+endfunction
 
-    " special cases:
-    if prevline =~# '^\s*\%(after\|end\)\>'
-        let ind = ind + 2*&sw
+" Purpose:
+"   This function is called when a begin-type element ('begin', 'case',
+"   '[', '<<', etc.) is found. It asks the caller to return if the stack
+" Parameters:
+"   stack: [token]
+"   token: string
+"   curr_vcol: integer
+"   stored_vcol: integer
+"   sw: integer -- number of spaces to be used after the begin element as
+"                  indentation
+" Returns:
+"   result: [should_return, indent]
+"   should_return: bool -- if true, the caller should return `indent` to Vim
+"   indent -- integer
+function! s:BeginElementFoundIfEmpty(stack, token, curr_vcol, stored_vcol, sw)
+  if empty(a:stack)
+    if a:stored_vcol ==# -1
+      call s:Log('    "' . a:token . '" directly preceeds LTI -> return')
+      return [1, a:curr_vcol + a:sw]
+    else
+      call s:Log('    "' . a:token .
+                \'" token (whose expression includes LTI) found -> return')
+      return [1, a:stored_vcol]
     endif
-    if currline =~# '^\s*end\>'
-        let ind = ind - 2*&sw
+  else
+    return [0, 0]
+  endif
+endfunction
+
+" Purpose:
+"   This function is called when a begin-type element ('begin', 'case', '[',
+"   '<<', etc.) is found, and in some cases when 'after' and 'when' is found.
+"   It asks the caller to return if the stack is already empty.
+" Parameters:
+"   stack: [token]
+"   token: string
+"   curr_vcol: integer
+"   stored_vcol: integer
+"   end_token: end token that belongs to the begin element found (e.g. if the
+"              begin element is 'begin', the end token is 'end')
+"   sw: integer -- number of spaces to be used after the begin element as
+"                  indentation
+" Returns:
+"   result: [should_return, indent]
+"   should_return: bool -- if true, the caller should return `indent` to Vim
+"   indent -- integer
+function! s:BeginElementFound(stack, token, curr_vcol, stored_vcol, end_token, sw)
+
+  " Return 'return' if the stack is empty
+  let [ret, res] = s:BeginElementFoundIfEmpty(a:stack, a:token, a:curr_vcol,
+                                             \a:stored_vcol, a:sw)
+  if ret | return [ret, res] | endif
+
+  if a:stack[0] ==# a:end_token
+    call s:Log('    "' . a:token . '" pops "' . a:end_token . '"')
+    call s:Pop(a:stack)
+    if !empty(a:stack) && a:stack[0] ==# 'align_to_begin_element'
+      call s:Pop(a:stack)
+      if empty(a:stack)
+        return [1, a:curr_vcol]
+      else
+        return [1, s:UnexpectedToken(a:token, a:stack)]
+      endif
+    else
+      return [0, 0]
     endif
-    if currline =~# '^\s*after\>'
-        let plnum = s:FindPrevNonBlankNonComment(v:lnum-1)
-        if getline(plnum) =~# '^[^%]*\<receive\>\s*\%(%.*\)\=$'
-            let ind = ind - 1*&sw
-            " If the 'receive' is not in the same line as the 'after'
-        else
-            let ind = ind - 2*&sw
-        endif
+  else
+    return [1, s:UnexpectedToken(a:token, a:stack)]
+  endif
+endfunction
+
+" Purpose:
+"   This function is called when we hit the beginning of a file or an
+"   end-of-clause token -- i.e. when we found the beginning of the current
+"   clause.
+"
+"   If the stack contains an '->' or 'when', this means that we can return
+"   now, since we were looking for the beginning of the clause.
+" Parameters:
+"   stack: [token]
+"   token: string
+"   stored_vcol: integer
+" Returns:
+"   result: [should_return, indent]
+"   should_return: bool -- if true, the caller should return `indent` to Vim
+"   indent -- integer
+function! s:BeginningOfClauseFound(stack, token, stored_vcol)
+  if !empty(a:stack) && a:stack[0] ==# 'when'
+    call s:Log('    BeginningOfClauseFound: "when" found in stack')
+    call s:Pop(a:stack)
+    if empty(a:stack)
+      call s:Log('    Stack is ["when"], so LTI is in a guard -> return')
+      return [1, a:stored_vcol + &sw + 2]
+    else
+      return [1, s:UnexpectedToken(a:token, a:stack)]
     endif
-    if prevline =~# '^\s*[)}\]]'
-        let ind = ind + 1*&sw
+  elseif !empty(a:stack) && a:stack[0] ==# '->'
+    call s:Log('    BeginningOfClauseFound: "->" found in stack')
+    call s:Pop(a:stack)
+    if empty(a:stack)
+      call s:Log('    Stack is ["->"], so LTI is in function body -> return')
+      return [1, a:stored_vcol + &sw]
+    elseif a:stack[0] ==# ';'
+      call s:Pop(a:stack)
+      if empty(a:stack)
+        call s:Log('    Stack is ["->", ";"], so LTI is in a function head ' .
+                  \'-> return')
+        return [0, a:stored_vcol]
+      else
+        return [1, s:UnexpectedToken(a:token, a:stack)]
+      endif
+    else
+      return [1, s:UnexpectedToken(a:token, a:stack)]
     endif
-    if currline =~# '^\s*[)}\]]'
-        let ind = ind - 1*&sw
+  else
+    return [0, 0]
+  endif
+endfunction
+
+let g:erlang_indent_searchpair_timeout = 2000
+
+" TODO
+function! s:SearchPair(lnum, curr_col, start, middle, end)
+  call cursor(a:lnum, a:curr_col + 1)
+  let [lnum_new, col1_new] = 
+      \searchpairpos(a:start, a:middle, a:end, 'bW',
+                    \'synIDattr(synID(line("."), col("."), 0), "name") ' .
+                    \'=~? "string\\|quotedatom\\|todo\\|comment\\|' . 
+                    \'erlangmodifier"',
+                    \0, g:erlang_indent_searchpair_timeout)
+  return [lnum_new, col1_new - 1]
+endfunction
+
+function! s:SearchEndPair(lnum, curr_col)
+  return s:SearchPair(
+         \ a:lnum, a:curr_col,
+         \ '\C\<\%(case\|try\|begin\|receive\|if\)\>\|' .
+         \ '\<fun\>\%(\s\|\n\|%.*$\)*(',
+         \ '',
+         \ '\<end\>')
+endfunction
+
+" ErlangCalcIndent {{{1
+" ================
+
+" Purpose:
+"   Calculate the indentation of the given line.
+" Parameters:
+"   lnum: integer -- index of the line for which the indentation should be
+"                    calculated
+"   stack: [token] -- initial stack
+" Return:
+"   indent: integer -- if -1, that means "don't change the indentation";
+"                      otherwise it means "indent the line with `indent`
+"                      number of spaces or equivalent tabs"
+function! s:ErlangCalcIndent(lnum, stack)
+  let res = s:ErlangCalcIndent2(a:lnum, a:stack)
+  call s:Log("ErlangCalcIndent returned: " . res)
+  return res
+endfunction
+
+function! s:ErlangCalcIndent2(lnum, stack)
+
+  let lnum = a:lnum
+  let stored_vcol = -1 " Virtual column of the first character of the token that
+                   " we currently think we might align to.
+  let mode = 'normal'
+  let stack = a:stack
+  let semicolon_abscol = ''
+
+  " Walk through the lines of the buffer backwards (starting from the
+  " previous line) until we can decide how to indent the current line.
+  while 1
+
+    let [lnum, indtokens] = s:TokenizeLine(lnum, 'up')
+
+    " Hit the start of the file
+    if lnum ==# 0
+      let [ret, res] = s:BeginningOfClauseFound(stack, 'beginning_of_file',
+                                               \stored_vcol)
+      if ret | return res | endif
+
+      return 0
     endif
-    if prevline =~# '^\s*\%(catch\)\s*\%(%\|$\)'
-        let ind = ind + 1*&sw
+
+    let i = len(indtokens) - 1
+    let last_token_of_line = 1
+
+    while i >= 0
+
+      let [token, curr_vcol, curr_col] = indtokens[i]
+      call s:Log('  Analyzing the following token: ' . string(indtokens[i]))
+
+      if len(stack) > 256 " TODO: magic number
+        return s:IndentError('Stack too long', token, stack)
+      endif
+
+      if token ==# '<end_of_clause>'
+        let [ret, res] = s:BeginningOfClauseFound(stack, token, stored_vcol)
+        if ret | return res | endif
+
+        if stored_vcol ==# -1
+          call s:Log('    End of clause directly preceeds LTI -> return')
+          return 0
+        else
+          call s:Log('    End of clause (but not end of line) -> return')
+          return stored_vcol
+        endif
+
+      elseif stack == ['prev_term_plus']
+        if token =~# '[a-zA-Z_@]' ||
+         \ token ==# '<string>' || token ==# '<string_start>' ||
+         \ token ==# '<quoted_atom>' || token ==# '<quoted_atom_start>'
+          call s:Log('    previous token found: curr_vcol + plus = ' .
+                    \curr_vcol . " + " . plus)
+          return curr_vcol + plus
+        endif
+
+      elseif token ==# 'begin'
+        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
+                                            \stored_vcol, 'end', &sw)
+        if ret | return res | endif
+
+      " case EXPR of BRANCHES end
+      " try EXPR catch BRANCHES end
+      " try EXPR after BODY end
+      " try EXPR catch BRANCHES after BODY end
+      " try EXPR of BRANCHES catch BRANCHES end
+      " try EXPR of BRANCHES after BODY end
+      " try EXPR of BRANCHES catch BRANCHES after BODY end
+      " receive BRANCHES end
+      " receive BRANCHES after BRANCHES end
+
+      " This branch is not Emacs-compatible
+      elseif (index(['of', 'receive', 'after', 'if'], token) != -1 ||
+           \  (token ==# 'catch' && !s:IsCatchStandalone(lnum, i))) &&
+           \ !last_token_of_line &&
+           \ (empty(stack) || stack ==# ['when'] || stack ==# ['->'] ||
+           \  stack ==# ['->', ';'])
+
+        " If we are after of/receive, but these are not the last
+        " tokens of the line, we want to indent like this:
+        "
+        "   % stack == []
+        "   receive stored_vcol,
+        "           LTI
+        "
+        "   % stack == ['->', ';']
+        "   receive stored_vcol ->
+        "               B;
+        "           LTI
+        "
+        "   % stack == ['->']
+        "   receive stored_vcol ->
+        "               LTI
+        "
+        "   % stack == ['when']
+        "   receive stored_vcol when
+        "               LTI
+
+        " stack = []  =>  LTI is a condition
+        " stack = ['->']  =>  LTI is a branch
+        " stack = ['->', ';']  =>  LTI is a condition
+        " stack = ['when']  =>  LTI is a guard
+        if empty(stack) || stack == ['->', ';']
+          call s:Log('    LTI is in a condition after ' .
+                    \'"of/receive/after/if/catch" -> return')
+          return stored_vcol
+        elseif stack == ['->']
+          call s:Log('    LTI is in a branch after ' .
+                    \'"of/receive/after/if/catch" -> return')
+          return stored_vcol + &sw
+        elseif stack == ['when']
+          call s:Log('    LTI is in a guard after ' .
+                    \'"of/receive/after/if/catch" -> return')
+          return stored_vcol + &sw
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+      elseif index(['case', 'if', 'try', 'receive'], token) != -1
+
+        " stack = []  =>  LTI is a condition
+        " stack = ['->']  =>  LTI is a branch
+        " stack = ['->', ';']  =>  LTI is a condition
+        " stack = ['when']  =>  LTI is in a guard
+        if empty(stack)
+          " pass
+        elseif (token ==# 'case' && stack[0] ==# 'of') ||
+             \ (token ==# 'if') ||
+             \ (token ==# 'try' && (stack[0] ==# 'of' ||
+             \                     stack[0] ==# 'catch' ||
+             \                     stack[0] ==# 'after')) ||
+             \ (token ==# 'receive')
+
+          " From the indentation point of view, the keyword
+          " (of/catch/after/end) before the LTI is what counts, so
+          " when we reached these tokens, and the stack already had
+          " a catch/after/end, we didn't modify it.
+          "
+          " This way when we reach case/try/receive (i.e. now),
+          " there is at most one of/catch/after/end token in the
+          " stack.
+          if token ==# 'case' || token ==# 'try' ||
+           \ (token ==# 'receive' && stack[0] ==# 'after')
+            call s:Pop(stack)
+          endif
+
+          if empty(stack)
+            call s:Log('    LTI is in a condition; matching ' .
+                      \'"case/if/try/receive" found')
+            let stored_vcol = curr_vcol + &sw
+          elseif stack[0] ==# 'align_to_begin_element'
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol
+          elseif len(stack) > 1 && stack[0] ==# '->' && stack[1] ==# ';'
+            call s:Log('    LTI is in a condition; matching ' .
+                      \'"case/if/try/receive" found')
+            call s:Pop(stack)
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol + &sw
+          elseif stack[0] ==# '->'
+            call s:Log('    LTI is in a branch; matching ' .
+                      \'"case/if/try/receive" found')
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol + 2 * &sw
+          elseif stack[0] ==# 'when'
+            call s:Log('    LTI is in a guard; matching ' .
+                      \'"case/if/try/receive" found')
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol + 2 * &sw + 2
+          endif
+
+        endif
+
+        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
+                                            \stored_vcol, 'end', &sw)
+        if ret | return res | endif
+
+      elseif token ==# 'fun'
+        let next_indtoken = s:NextIndToken(lnum, i)
+        call s:Log('    Next indtoken = ' . string(next_indtoken))
+
+        if !empty(next_indtoken) && next_indtoken[0] ==# '('
+          " We have an anonymous function definition
+          " (e.g. "fun () -> ok end")
+
+          " stack = []  =>  LTI is a condition
+          " stack = ['->']  =>  LTI is a branch
+          " stack = ['->', ';']  =>  LTI is a condition
+          " stack = ['when']  =>  LTI is in a guard
+          if empty(stack)
+            call s:Log('    LTI is in a condition; matching "fun" found')
+            let stored_vcol = curr_vcol + &sw
+          elseif len(stack) > 1 && stack[0] ==# '->' && stack[1] ==# ';'
+            call s:Log('    LTI is in a condition; matching "fun" found')
+            call s:Pop(stack)
+            call s:Pop(stack)
+          elseif stack[0] ==# '->'
+            call s:Log('    LTI is in a branch; matching "fun" found')
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol + 2 * &sw
+          elseif stack[0] ==# 'when'
+            call s:Log('    LTI is in a guard; matching "fun" found')
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol + 2 * &sw + 2
+          endif
+
+          let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
+                                              \stored_vcol, 'end', &sw)
+          if ret | return res | endif
+        else
+          " Pass: we have a function reference (e.g. "fun f/0")
+        endif
+
+      elseif token ==# '['
+        " Emacs compatibility
+        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
+                                            \stored_vcol, ']', 1)
+        if ret | return res | endif
+
+      elseif token ==# '<<'
+        " Emacs compatibility
+        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
+                                            \stored_vcol, '>>', 2)
+        if ret | return res | endif
+
+      elseif token ==# '(' || token ==# '{'
+
+        let end_token = (token ==# '(' ? ')' :
+                        \token ==# '{' ? '}' : 'error')
+
+        if empty(stack)
+          " We found the opening paren whose block contains the LTI.
+          let mode = 'inside'
+        elseif stack[0] ==# end_token
+          call s:Log('    "' . token . '" pops "' . end_token . '"')
+          call s:Pop(stack)
+
+          if !empty(stack) && stack[0] ==# 'align_to_begin_element'
+            " We found the opening paren whose closing paren
+            " starts LTI
+            let mode = 'align_to_begin_element'
+          else
+            " We found the opening pair for a closing paren that
+            " was already in the stack.
+            let mode = 'outside'
+          endif
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+        if mode ==# 'inside' || mode ==# 'align_to_begin_element'
+
+          if last_token_of_line && i != 0
+            " Examples: {{{
+            "
+            " mode == 'inside':
+            "
+            "     my_func(
+            "       LTI
+            "
+            "     [Variable, {
+            "        LTI
+            "
+            " mode == 'align_to_begin_element':
+            "
+            "     my_func(
+            "       Params
+            "      ) % LTI
+            "
+            "     [Variable, {
+            "        Terms
+            "       } % LTI
+            " }}}
+            let stack = ['prev_term_plus']
+            let plus = (mode ==# 'inside' ? 2 : 1)
+            call s:Log('    "' . token .
+                      \'" token found at end of line -> find previous token')
+          elseif mode ==# 'align_to_begin_element'
+            " Examples: {{{
+            "
+            " mode == 'align_to_begin_element' && !last_token_of_line
+            "
+            "     my_func(stored_vcol
+            "            ) % LTI
+            "
+            "     [Variable, {stored_vcol
+            "                } % LTI
+            "
+            " mode == 'align_to_begin_element' && i == 0
+            "
+            "     (
+            "       stored_vcol
+            "     ) % LTI
+            "
+            "     {
+            "       stored_vcol
+            "     } % LTI
+            " }}}
+            call s:Log('    "' . token . '" token (whose closing token ' .
+                      \'starts LTI) found -> return')
+            return curr_vcol
+          elseif stored_vcol ==# -1
+            " Examples: {{{
+            "
+            " mode == 'inside' && stored_vcol == -1 && !last_token_of_line
+            "
+            "     my_func(
+            "             LTI
+            "     [Variable, {
+            "                 LTI
+            "
+            " mode == 'inside' && stored_vcol == -1 && i == 0
+            "
+            "     (
+            "      LTI
+            "
+            "     {
+            "      LTI
+            " }}}
+            call s:Log('    "' . token .
+                      \'" token (which directly precedes LTI) found -> return')
+            return curr_vcol + 1
+          else
+            " Examples: {{{
+            "
+            " mode == 'inside' && stored_vcol != -1 && !last_token_of_line
+            "
+            "     my_func(stored_vcol,
+            "             LTI
+            "
+            "     [Variable, {stored_vcol,
+            "                 LTI
+            "
+            " mode == 'inside' && stored_vcol != -1 && i == 0
+            "
+            "     (stored_vcol,
+            "      LTI
+            "
+            "     {stored_vcol,
+            "      LTI
+            " }}}
+            call s:Log('    "' . token .
+                      \'" token (whose block contains LTI) found -> return')
+            return stored_vcol
+          endif
+        endif
+
+      elseif index(['end', ')', ']', '}', '>>'], token) != -1
+
+        " If we can be sure that there is synchronization in the Erlang
+        " syntax, we use searchpair to make the script quicker. Otherwise we
+        " just push the token onto the stack and keep parsing.
+    
+        " No synchronization -> no searchpair optimization
+        if !exists('b:erlang_syntax_synced')
+          call s:Push(stack, token)
+
+        " We don't have searchpair optimization for '>>'
+        elseif token ==# '>>'
+          call s:Push(stack, token)
+
+        elseif token ==# 'end'
+          let [lnum_new, col_new] = s:SearchEndPair(lnum, curr_col)
+
+          if lnum_new ==# 0
+            return s:IndentError('Matching token for "end" not found',
+                                \token, stack)
+          else
+            if lnum_new != lnum
+              call s:Log('    Tokenize for "end" <<<<')
+              let [lnum, indtokens] = s:TokenizeLine(lnum_new, 'up')
+              call s:Log('    >>>> Tokenize for "end"')
+            endif
+
+            let [success, i] = s:GetIndtokenAtCol(indtokens, col_new)
+            if !success | return i | endif
+            let [token, curr_vcol, curr_col] = indtokens[i]
+            call s:Log('    Match for "end" in line ' . lnum_new . ': ' .
+                      \string(indtokens[i]))
+          endif
+
+        else " token is one of the following: ')', ']', '}'
+
+          call s:Push(stack, token)
+
+          " We have to escape '[', because this string will be interpreted as a
+          " regexp
+          let open_paren = (token ==# ')' ? '(' :
+                           \token ==# ']' ? '\[' :
+                           \               '{')
+
+          let [lnum_new, col_new] = s:SearchPair(lnum, curr_col,
+                                                \open_paren, '', token)
+
+          if lnum_new ==# 0
+            return s:IndentError('Matching token not found',
+                                \token, stack)
+          else
+            if lnum_new != lnum
+              call s:Log('    Tokenize the opening paren <<<<')
+              let [lnum, indtokens] = s:TokenizeLine(lnum_new, 'up')
+              call s:Log('    >>>>')
+            endif
+
+            let [success, i] = s:GetIndtokenAtCol(indtokens, col_new)
+            if !success | return i | endif
+            let [token, curr_vcol, curr_col] = indtokens[i]
+            call s:Log('    Match in line ' . lnum_new . ': ' .
+                      \string(indtokens[i]))
+
+            " Go back to the beginning of the loop and handle the opening paren
+            continue
+          endif
+        endif
+
+      elseif token ==# ';'
+
+        if empty(stack)
+          call s:Push(stack, ';')
+        elseif index([';', '->', 'when', 'end', 'after', 'catch'],
+                    \stack[0]) != -1
+          " Pass:
+          "
+          " - If the stack top is another ';', then one ';' is
+          "   enough.
+          " - If the stack top is an '->' or a 'when', then we
+          "   should keep that, because they signify the type of the
+          "   LTI (branch, condition or guard).
+          " - From the indentation point of view, the keyword
+          "   (of/catch/after/end) before the LTI is what counts, so
+          "   if the stack already has a catch/after/end, we don't
+          "   modify it. This way when we reach case/try/receive,
+          "   there will be at most one of/catch/after/end token in
+          "   the stack.
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+      elseif token ==# '->'
+
+        if empty(stack) && !last_token_of_line
+          call s:Log('    LTI is in expression after arrow -> return')
+          return stored_vcol
+        elseif empty(stack) || stack[0] ==# ';' || stack[0] ==# 'end'
+          " stack = [';']  -> LTI is either a branch or in a guard
+          " stack = ['->']  ->  LTI is a condition
+          " stack = ['->', ';']  -> LTI is a branch
+          call s:Push(stack, '->')
+        elseif index(['->', 'when', 'end', 'after', 'catch'], stack[0]) != -1
+          " Pass:
+          "
+          " - If the stack top is another '->', then one '->' is
+          "   enough.
+          " - If the stack top is a 'when', then we should keep
+          "   that, because this signifies that LTI is a in a guard.
+          " - From the indentation point of view, the keyword
+          "   (of/catch/after/end) before the LTI is what counts, so
+          "   if the stack already has a catch/after/end, we don't
+          "   modify it. This way when we reach case/try/receive,
+          "   there will be at most one of/catch/after/end token in
+          "   the stack.
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+      elseif token ==# 'when'
+
+        " Pop all ';' from the top of the stack
+        while !empty(stack) && stack[0] ==# ';'
+          call s:Pop(stack)
+        endwhile
+
+        if empty(stack)
+          if semicolon_abscol != ''
+            let stored_vcol = semicolon_abscol
+          endif
+          if !last_token_of_line
+            " Example:
+            "   when A,
+            "        LTI
+            let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
+                                                       \stored_vcol, &sw)
+            if ret | return res | endif
+          else
+            " Example:
+            "   when
+            "       LTI
+            call s:Push(stack, token)
+          endif
+        elseif index(['->', 'when', 'end', 'after', 'catch'], stack[0]) != -1
+          " Pass:
+          " - If the stack top is another 'when', then one 'when' is
+          "   enough.
+          " - If the stack top is an '->' or a 'when', then we
+          "   should keep that, because they signify the type of the
+          "   LTI (branch, condition or guard).
+          " - From the indentation point of view, the keyword
+          "   (of/catch/after/end) before the LTI is what counts, so
+          "   if the stack already has a catch/after/end, we don't
+          "   modify it. This way when we reach case/try/receive,
+          "   there will be at most one of/catch/after/end token in
+          "   the stack.
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+      elseif token ==# 'of' || token ==# 'after' ||
+           \ (token ==# 'catch' && !s:IsCatchStandalone(lnum, i))
+
+        if token ==# 'after'
+          " If LTI is between an 'after' and the corresponding
+          " 'end', then let's return
+          let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
+                                                     \stored_vcol, &sw)
+          if ret | return res | endif
+        endif
+
+        if empty(stack) || stack[0] ==# '->' || stack[0] ==# 'when'
+          call s:Push(stack, token)
+        elseif stack[0] ==# 'catch' || stack[0] ==# 'after' || stack[0] ==# 'end'
+          " Pass: From the indentation point of view, the keyword
+          " (of/catch/after/end) before the LTI is what counts, so
+          " if the stack already has a catch/after/end, we don't
+          " modify it. This way when we reach case/try/receive,
+          " there will be at most one of/catch/after/end token in
+          " the stack.
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+      elseif token ==# '||' && empty(stack) && !last_token_of_line
+
+        call s:Log('    LTI is in expression after "||" -> return')
+        return stored_vcol
+
+      else
+        call s:Log('    Misc token, stack unchanged = ' . string(stack))
+
+      endif
+
+      if empty(stack) || stack[0] ==# '->' || stack[0] ==# 'when'
+        let stored_vcol = curr_vcol
+        let semicolon_abscol = ''
+        call s:Log('    Misc token when the stack is empty or has "->" ' .
+                  \'-> setting stored_vcol to ' . stored_vcol)
+      elseif stack[0] ==# ';'
+        let semicolon_abscol = curr_vcol
+        call s:Log('    Setting semicolon-stored_vcol to ' . stored_vcol)
+      endif
+
+      let i -= 1
+      call s:Log('    Token processed. stored_vcol=' . stored_vcol)
+
+      let last_token_of_line = 0
+
+    endwhile " iteration on tokens in a line
+
+    call s:Log('  Line analyzed. stored_vcol=' . stored_vcol)
+
+    if empty(stack) && stored_vcol != -1 &&
+     \ (!empty(indtokens) && indtokens[0][0] != '<string_end>' &&
+     \                       indtokens[0][0] != '<quoted_atom_end>')
+      call s:Log('    Empty stack at the beginning of the line -> return')
+      return stored_vcol
     endif
-    if currline =~# '^\s*\%(catch\)\s*\%(%\|$\)'
-        let ind = ind - 1*&sw
+
+    let lnum -= 1
+
+  endwhile " iteration on lines
+
+endfunction
+
+" ErlangIndent function {{{1
+" =====================
+
+function! ErlangIndent()
+
+  call s:ClearTokenCacheIfNeeded()
+
+  let currline = getline(v:lnum)
+  call s:Log('Indenting line ' . v:lnum . ': ' . currline)
+
+  if s:IsLineStringContinuation(v:lnum) || s:IsLineAtomContinuation(v:lnum)
+    call s:Log('String or atom continuation found -> ' .
+              \'leaving indentation unchanged')
+    return -1
+  endif
+
+  let ml = matchlist(currline,
+                    \'^\(\s*\)\(\%(end\|of\|catch\|after\)\>\|[)\]}]\|>>\)')
+
+  " If the line has a special beginning, but not a standalone catch
+  if !empty(ml) && !(ml[2] ==# 'catch' && s:IsCatchStandalone(v:lnum, 0))
+
+    let curr_col = len(ml[1])
+
+    " If we can be sure that there is synchronization in the Erlang
+    " syntax, we use searchpair to make the script quicker.
+    if ml[2] ==# 'end' && exists('b:erlang_syntax_synced')
+
+      let [lnum, col] = s:SearchEndPair(v:lnum, curr_col)
+
+      if lnum ==# 0
+        return s:IndentError('Matching token for "end" not found',
+                            \'end', [])
+      else
+        call s:Log('    Tokenize for "end" <<<<')
+        let [lnum, indtokens] = s:TokenizeLine(lnum, 'up')
+        call s:Log('    >>>> Tokenize for "end"')
+
+        let [success, i] = s:GetIndtokenAtCol(indtokens, col)
+        if !success | return i | endif
+        let [token, curr_vcol, curr_col] = indtokens[i]
+        call s:Log('    Match for "end" in line ' . lnum . ': ' .
+                   \string(indtokens[i]))
+        return curr_vcol
+      endif
+
+    else
+
+      call s:Log("  Line type = 'end'")
+      let new_col = s:ErlangCalcIndent(v:lnum - 1,
+                                      \[ml[2], 'align_to_begin_element'])
     endif
+  else
+    call s:Log("  Line type = 'normal'")
 
-    if ind<0
-        let ind = 0
+    let new_col = s:ErlangCalcIndent(v:lnum - 1, [])
+    if currline =~# '^\s*when\>'
+      let new_col += 2
     endif
-    return ind
+  endif
+
+  if new_col < -1
+    call s:Log('WARNING: returning new_col == ' . new_col)
+    return g:erlang_unexpected_token_indent
+  endif
+
+  return new_col
 
 endfunction
 
-" TODO:
-" 
-" f() ->
-"     x("foo
-"         bar")
-"         ,
-"         bad_indent.
-"
-" fun
-"     init/0,
-"     bad_indent
-"
-"     #rec
-"     .field,
-" bad_indent
-"
-" case X of
-"     1 when A; B ->
-"     bad_indent
+" Cleanup {{{1
+" =======
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
+" vim: sw=2 et fdm=marker
index a4de118..80cab70 100644 (file)
@@ -1,9 +1,7 @@
 " Vim indent file
 " Language:            eRuby
 " Maintainer:          Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:         2010 May 28
-" URL:                 http://vim-ruby.rubyforge.org
-" Anon CVS:            See above site
+" URL:                 https://github.com/vim-ruby/vim-ruby
 " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
 
 if exists("b:did_indent")
@@ -50,29 +48,32 @@ function! GetErubyIndent(...)
   call cursor(v:lnum,1)
   let inruby = searchpair('<%','','%>','W')
   call cursor(v:lnum,vcol)
-  if inruby && getline(v:lnum) !~ '^<%\|^\s*-\=%>'
-    let ind = GetRubyIndent()
+  if inruby && getline(v:lnum) !~ '^<%\|^\s*[-=]\=%>'
+    let ind = GetRubyIndent(v:lnum)
   else
     exe "let ind = ".b:eruby_subtype_indentexpr
   endif
   let lnum = prevnonblank(v:lnum-1)
   let line = getline(lnum)
   let cline = getline(v:lnum)
-  if cline =~# '^\s*<%-\=\s*\%(}\|end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%(-\=%>\|$\)'
+  if cline =~# '^\s*<%[-=]\=\s*\%(}\|end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%([-=]\=%>\|$\)'
     let ind = ind - &sw
   endif
-  if line =~# '\S\s*<%-\=\s*\%(}\|end\).\{-\}\s*\%(-\=%>\|$\)'
+  if line =~# '\S\s*<%[-=]\=\s*\%(}\|end\).\{-\}\s*\%([-=]\=%>\|$\)'
     let ind = ind - &sw
   endif
-  if line =~# '\%({\|\<do\)\%(\s*|[^|]*|\)\=\s*-\=%>'
+  if line =~# '\%({\|\<do\)\%(\s*|[^|]*|\)\=\s*[-=]\=%>'
     let ind = ind + &sw
-  elseif line =~# '<%-\=\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'
+  elseif line =~# '<%[-=]\=\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'
     let ind = ind + &sw
   endif
   if line =~# '^\s*<%[=#-]\=\s*$' && cline !~# '^\s*end\>'
     let ind = ind + &sw
   endif
-  if cline =~# '^\s*-\=%>\s*$'
+  if line !~# '^\s*<%' && line =~# '%>\s*$'
+    let ind = ind - &sw
+  endif
+  if cline =~# '^\s*[-=]\=%>\s*$'
     let ind = ind - &sw
   endif
   return ind
diff --git a/runtime/indent/falcon.vim b/runtime/indent/falcon.vim
new file mode 100644 (file)
index 0000000..84b16d5
--- /dev/null
@@ -0,0 +1,451 @@
+" Vim indent file
+" Language: Falcon
+" Maintainer: Steven Oliver <oliver.steven@gmail.com>
+" Website: https://steveno@github.com/steveno/falconpl-vim.git
+" Credits: This is, to a great extent, a copy n' paste of ruby.vim.
+
+" 1. Setup {{{1
+" ============
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+let b:did_indent = 1
+
+setlocal nosmartindent
+
+" Setup indent function and when to use it
+setlocal indentexpr=FalconGetIndent(v:lnum)
+setlocal indentkeys=0{,0},0),0],!^F,o,O,e
+setlocal indentkeys+==~case,=~catch,=~default,=~elif,=~else,=~end,=~\"
+
+" Define the appropriate indent function but only once
+if exists("*FalconGetIndent")
+    finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" 2. Variables {{{1
+" ============
+
+" Regex of syntax group names that are strings AND comments
+let s:syng_strcom = '\<falcon\%(String\|StringEscape\|Comment\)\>'
+
+" Regex of syntax group names that are strings
+let s:syng_string = '\<falcon\%(String\|StringEscape\)\>'
+
+" Regex that defines blocks.
+"
+" Note that there's a slight problem with this regex and s:continuation_regex.
+" Code like this will be matched by both:
+"
+"   method_call do |(a, b)|
+"
+" The reason is that the pipe matches a hanging "|" operator.
+"
+let s:block_regex =
+      \ '\%(\<do:\@!\>\|%\@<!{\)\s*\%(|\s*(*\s*\%([*@&]\=\h\w*,\=\s*\)\%(,\s*(*\s*[*@&]\=\h\w*\s*)*\s*\)*|\)\=\s*\%(#.*\)\=$'
+
+let s:block_continuation_regex = '^\s*[^])}\t ].*'.s:block_regex
+
+" Regex that defines continuation lines.
+" TODO: this needs to deal with if ...: and so on
+let s:continuation_regex =
+      \ '\%(%\@<![({[\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+
+" Regex that defines bracket continuations
+let s:bracket_continuation_regex = '%\@<!\%([({[]\)\s*\%(#.*\)\=$'
+
+" Regex that defines continuation lines, not including (, {, or [.
+let s:non_bracket_continuation_regex = '\%([\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+
+" Keywords to indent on
+let s:falcon_indent_keywords = '^\s*\(case\|catch\|class\|enum\|default\|elif\|else' .
+    \ '\|for\|function\|if.*"[^"]*:.*"\|if \(\(:\)\@!.\)*$\|loop\|object\|select' .
+    \ '\|switch\|try\|while\|\w*\s*=\s*\w*([$\)'
+
+" Keywords to deindent on
+let s:falcon_deindent_keywords = '^\s*\(case\|catch\|default\|elif\|else\|end\)'
+
+" 3. Functions {{{1
+" ============
+
+" Check if the character at lnum:col is inside a string, comment, or is ascii.
+function s:IsInStringOrComment(lnum, col)
+    return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom
+endfunction
+
+" Check if the character at lnum:col is inside a string.
+function s:IsInString(lnum, col)
+    return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string
+endfunction
+
+" Check if the character at lnum:col is inside a string delimiter
+function s:IsInStringDelimiter(lnum, col)
+    return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'falconStringDelimiter'
+endfunction
+
+" Find line above 'lnum' that isn't empty, in a comment, or in a string.
+function s:PrevNonBlankNonString(lnum)
+    let in_block = 0
+    let lnum = prevnonblank(a:lnum)
+    while lnum > 0
+       " Go in and out of blocks comments as necessary.
+       " If the line isn't empty (with opt. comment) or in a string, end search.
+       let line = getline(lnum)
+       if line =~ '^=begin'
+           if in_block
+               let in_block = 0
+           else
+               break
+           endif
+       elseif !in_block && line =~ '^=end'
+           let in_block = 1
+       elseif !in_block && line !~ '^\s*#.*$' && !(s:IsInStringOrComment(lnum, 1)
+                   \ && s:IsInStringOrComment(lnum, strlen(line)))
+           break
+       endif
+       let lnum = prevnonblank(lnum - 1)
+    endwhile
+    return lnum
+endfunction
+
+" Find line above 'lnum' that started the continuation 'lnum' may be part of.
+function s:GetMSL(lnum)
+    " Start on the line we're at and use its indent.
+    let msl = a:lnum
+    let msl_body = getline(msl)
+    let lnum = s:PrevNonBlankNonString(a:lnum - 1)
+    while lnum > 0
+       " If we have a continuation line, or we're in a string, use line as MSL.
+       " Otherwise, terminate search as we have found our MSL already.
+       let line = getline(lnum)
+       
+       if s:Match(line, s:non_bracket_continuation_regex) &&
+               \ s:Match(msl, s:non_bracket_continuation_regex)
+           " If the current line is a non-bracket continuation and so is the
+           " previous one, keep its indent and continue looking for an MSL.
+           "    
+           " Example:
+           "   method_call one,
+           "       two,
+           "           three
+           "           
+           let msl = lnum
+       elseif s:Match(lnum, s:non_bracket_continuation_regex) &&
+                   \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+           " If the current line is a bracket continuation or a block-starter, but
+           " the previous is a non-bracket one, respect the previous' indentation,
+           " and stop here.
+           " 
+           " Example:
+           "   method_call one,
+           "       two {
+           "           three
+           "
+           return lnum
+       elseif s:Match(lnum, s:bracket_continuation_regex) &&
+                   \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+           " If both lines are bracket continuations (the current may also be a
+           " block-starter), use the current one's and stop here
+           "
+           " Example:
+           "   method_call(
+           "       other_method_call(
+           "             foo
+           return msl
+       elseif s:Match(lnum, s:block_regex) &&
+                   \ !s:Match(msl, s:continuation_regex) &&
+                   \ !s:Match(msl, s:block_continuation_regex)
+           " If the previous line is a block-starter and the current one is
+           " mostly ordinary, use the current one as the MSL.
+           " 
+           " Example:
+           "   method_call do
+           "       something
+           "           something_else
+           return msl
+       else
+           let col = match(line, s:continuation_regex) + 1
+           if (col > 0 && !s:IsInStringOrComment(lnum, col))
+                       \ || s:IsInString(lnum, strlen(line))
+               let msl = lnum
+           else
+               break
+           endif
+       endif
+       
+       let msl_body = getline(msl)
+       let lnum = s:PrevNonBlankNonString(lnum - 1)
+    endwhile
+    return msl
+endfunction
+
+" Check if line 'lnum' has more opening brackets than closing ones.
+function s:ExtraBrackets(lnum)
+    let opening = {'parentheses': [], 'braces': [], 'brackets': []}
+    let closing = {'parentheses': [], 'braces': [], 'brackets': []}
+
+    let line = getline(a:lnum)
+    let pos  = match(line, '[][(){}]', 0)
+
+    " Save any encountered opening brackets, and remove them once a matching
+    " closing one has been found. If a closing bracket shows up that doesn't
+    " close anything, save it for later.
+    while pos != -1
+       if !s:IsInStringOrComment(a:lnum, pos + 1)
+           if line[pos] == '('
+               call add(opening.parentheses, {'type': '(', 'pos': pos})
+           elseif line[pos] == ')'
+               if empty(opening.parentheses)
+                   call add(closing.parentheses, {'type': ')', 'pos': pos})
+               else
+                   let opening.parentheses = opening.parentheses[0:-2]
+               endif
+           elseif line[pos] == '{'
+               call add(opening.braces, {'type': '{', 'pos': pos})
+           elseif line[pos] == '}'
+               if empty(opening.braces)
+                   call add(closing.braces, {'type': '}', 'pos': pos})
+               else
+                   let opening.braces = opening.braces[0:-2]
+               endif
+           elseif line[pos] == '['
+               call add(opening.brackets, {'type': '[', 'pos': pos})
+           elseif line[pos] == ']'
+               if empty(opening.brackets)
+                   call add(closing.brackets, {'type': ']', 'pos': pos})
+               else
+                   let opening.brackets = opening.brackets[0:-2]
+               endif
+           endif
+       endif
+       
+       let pos = match(line, '[][(){}]', pos + 1)
+    endwhile
+
+    " Find the rightmost brackets, since they're the ones that are important in
+    " both opening and closing cases
+    let rightmost_opening = {'type': '(', 'pos': -1}
+    let rightmost_closing = {'type': ')', 'pos': -1}
+
+    for opening in opening.parentheses + opening.braces + opening.brackets
+       if opening.pos > rightmost_opening.pos
+           let rightmost_opening = opening
+       endif
+    endfor
+
+    for closing in closing.parentheses + closing.braces + closing.brackets
+       if closing.pos > rightmost_closing.pos
+           let rightmost_closing = closing
+       endif
+    endfor
+
+    return [rightmost_opening, rightmost_closing]
+endfunction
+
+function s:Match(lnum, regex)
+    let col = match(getline(a:lnum), '\C'.a:regex) + 1
+    return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0
+endfunction
+
+function s:MatchLast(lnum, regex)
+    let line = getline(a:lnum)
+    let col = match(line, '.*\zs' . a:regex)
+    while col != -1 && s:IsInStringOrComment(a:lnum, col)
+       let line = strpart(line, 0, col)
+       let col = match(line, '.*' . a:regex)
+    endwhile
+    return col + 1
+endfunction
+
+" 4. FalconGetIndent Routine {{{1
+" ============
+
+function FalconGetIndent(...)
+    " For the current line, use the first argument if given, else v:lnum
+    let clnum = a:0 ? a:1 : v:lnum
+
+    " Use zero indent at the top of the file
+    if clnum == 0
+        return 0
+    endif
+
+    let line = getline(clnum)
+    let ind = -1
+
+    " If we got a closing bracket on an empty line, find its match and indent
+    " according to it.  For parentheses we indent to its column - 1, for the
+    " others we indent to the containing line's MSL's level.  Return -1 if fail.
+    let col = matchend(line, '^\s*[]})]')
+    if col > 0 && !s:IsInStringOrComment(clnum, col)
+       call cursor(clnum, col)
+       let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
+       if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
+           if line[col-1]==')' && col('.') != col('$') - 1
+               let ind = virtcol('.') - 1
+           else
+               let ind = indent(s:GetMSL(line('.')))
+           endif
+       endif
+       return ind
+    endif
+
+    " If we have a deindenting keyword, find its match and indent to its level.
+    " TODO: this is messy
+    if s:Match(clnum, s:falcon_deindent_keywords)
+       call cursor(clnum, 1)
+       if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
+                   \ s:end_skip_expr) > 0
+           let msl  = s:GetMSL(line('.'))
+           let line = getline(line('.'))
+
+           if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
+                       \ strpart(line, col('.') - 1, 2) !~ 'do'
+               let ind = virtcol('.') - 1
+           elseif getline(msl) =~ '=\s*\(#.*\)\=$'
+               let ind = indent(line('.'))
+           else
+               let ind = indent(msl)
+           endif
+       endif
+       return ind
+    endif
+
+    " If we are in a multi-line string or line-comment, don't do anything to it.
+    if s:IsInString(clnum, matchend(line, '^\s*') + 1)
+       return indent('.')
+    endif
+
+    " Find a non-blank, non-multi-line string line above the current line.
+    let lnum = s:PrevNonBlankNonString(clnum - 1)
+
+    " If the line is empty and inside a string, use the previous line.
+    if line =~ '^\s*$' && lnum != prevnonblank(clnum - 1)
+       return indent(prevnonblank(clnum))
+    endif
+
+    " At the start of the file use zero indent.
+    if lnum == 0
+       return 0
+    endif
+
+    " Set up variables for the previous line.
+    let line = getline(lnum)
+    let ind = indent(lnum)
+
+    " If the previous line ended with a block opening, add a level of indent.
+    if s:Match(lnum, s:block_regex)
+       return indent(s:GetMSL(lnum)) + &sw
+    endif
+
+    " If it contained hanging closing brackets, find the rightmost one, find its
+    " match and indent according to that.
+    if line =~ '[[({]' || line =~ '[])}]\s*\%(#.*\)\=$'
+       let [opening, closing] = s:ExtraBrackets(lnum)
+
+       if opening.pos != -1
+           if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
+               if col('.') + 1 == col('$')
+                   return ind + &sw
+               else
+                   return virtcol('.')
+               endif
+           else
+               let nonspace = matchend(line, '\S', opening.pos + 1) - 1
+               return nonspace > 0 ? nonspace : ind + &sw
+           endif
+       elseif closing.pos != -1
+           call cursor(lnum, closing.pos + 1)
+           normal! %
+
+           if s:Match(line('.'), s:falcon_indent_keywords)
+               return indent('.') + &sw
+           else
+               return indent('.')
+           endif
+       else
+           call cursor(clnum, vcol)
+       end
+    endif
+
+    " If the previous line ended with an "end", match that "end"s beginning's
+    " indent.
+    let col = s:Match(lnum, '\%(^\|[^.:@$]\)\<end\>\s*\%(#.*\)\=$')
+    if col > 0
+       call cursor(lnum, col)
+       if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
+                   \ s:end_skip_expr) > 0
+           let n = line('.')
+           let ind = indent('.')
+           let msl = s:GetMSL(n)
+           if msl != n
+               let ind = indent(msl)
+           end
+           return ind
+       endif
+    end
+
+    let col = s:Match(lnum, s:falcon_indent_keywords)
+    if col > 0
+       call cursor(lnum, col)
+       let ind = virtcol('.') - 1 + &sw
+       " TODO: make this better (we need to count them) (or, if a searchpair
+       " fails, we know that something is lacking an end and thus we indent a
+       " level
+       if s:Match(lnum, s:end_end_regex)
+           let ind = indent('.')
+       endif
+       return ind
+    endif
+
+    " Set up variables to use and search for MSL to the previous line.
+    let p_lnum = lnum
+    let lnum = s:GetMSL(lnum)
+
+    " If the previous line wasn't a MSL and is continuation return its indent.
+    " TODO: the || s:IsInString() thing worries me a bit.
+    if p_lnum != lnum
+       if s:Match(p_lnum, s:non_bracket_continuation_regex) || s:IsInString(p_lnum,strlen(line))
+           return ind
+       endif
+    endif
+
+    " Set up more variables, now that we know we wasn't continuation bound.
+    let line = getline(lnum)
+    let msl_ind = indent(lnum)
+
+    " If the MSL line had an indenting keyword in it, add a level of indent.
+    " TODO: this does not take into account contrived things such as
+    " module Foo; class Bar; end
+    if s:Match(lnum, s:falcon_indent_keywords)
+       let ind = msl_ind + &sw
+       if s:Match(lnum, s:end_end_regex)
+           let ind = ind - &sw
+       endif
+       return ind
+    endif
+
+    " If the previous line ended with [*+/.,-=], but wasn't a block ending or a
+    " closing bracket, indent one extra level.
+    if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)')
+       if lnum == p_lnum
+           let ind = msl_ind + &sw
+       else
+           let ind = msl_ind
+       endif
+       return ind
+    endif
+
+  return ind
+endfunction
+
+" }}}1
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=4 sts=4 et tw=80 :
index 4ff0700..e76c64b 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:    Fortran95 (and Fortran90, Fortran77, F and elf90)
-" Version:     0.38
-" Last Change: 2010 July 21
+" Version:     0.40
+" Last Change: 2011 Dec. 28
 " Maintainer:  Ajit J. Thakkar <ajit@unb.ca>; <http://www.unb.ca/chem/ajit/>
 " Usage:       Do :help fortran-indent from Vim
 
@@ -11,9 +11,18 @@ if exists("b:did_indent")
 endif
 let b:did_indent = 1
 
+let s:cposet=&cpoptions
+set cpoptions&vim
+
 setlocal indentkeys+==~end,=~case,=~if,=~else,=~do,=~where,=~elsewhere,=~select
-setlocal indentkeys+==~endif,=~enddo,=~endwhere,=~endselect
-setlocal indentkeys+==~type,=~interface
+setlocal indentkeys+==~endif,=~enddo,=~endwhere,=~endselect,=~elseif
+setlocal indentkeys+==~type,=~interface,=~forall,=~associate,=~block,=~enum
+setlocal indentkeys+==~endforall,=~endassociate,=~endblock,=~endenum
+if exists("b:fortran_indent_more") || exists("g:fortran_indent_more")
+  setlocal indentkeys+==~function,=~subroutine,=~module,=~contains,=~program
+  setlocal indentkeys+==~endfunction,=~endsubroutine,=~endmodule
+  setlocal indentkeys+==~endprogram
+endif
 
 " Determine whether this is a fixed or free format source file
 " if this hasn't been done yet
@@ -61,14 +70,13 @@ else
   endif
 endif
 
-let s:cposet=&cpoptions
-set cpoptions-=C
-
 function FortranGetIndent(lnum)
   let ind = indent(a:lnum)
   let prevline=getline(a:lnum)
   " Strip tail comment
   let prevstat=substitute(prevline, '!.*$', '', '')
+  let prev2line=getline(a:lnum-1)
+  let prev2stat=substitute(prev2line, '!.*$', '', '')
 
   "Indent do loops only if they are all guaranteed to be of do/end do type
   if exists("b:fortran_do_enddo") || exists("g:fortran_do_enddo")
@@ -80,33 +88,64 @@ function FortranGetIndent(lnum)
     endif
   endif
 
-  "Add a shiftwidth to statements following if, else, case,
-  "where, elsewhere, type and interface statements
-  if prevstat =~? '^\s*\(\d\+\s\)\=\s*\(else\|case\|where\|elsewhere\)\>'
-       \ ||prevstat =~? '^\s*\(\d\+\s\)\=\s*\(type\|interface\)\>'
-       \ || prevstat =~? '^\s*\(\d\+\s\)\=\s*\(\a\w*\s*:\)\=\s*if\>'
+  "Add a shiftwidth to statements following if, else, else if, case,
+  "where, else where, forall, type, interface and associate statements
+  if prevstat =~? '^\s*\(case\|else\|else\s*if\|else\s*where\)\>'
+       \ ||prevstat=~? '^\s*\(type\|interface\|associate\|enum\)\>'
+       \ ||prevstat=~?'^\s*\(\d\+\s\)\=\s*\(\a\w*\s*:\)\=\s*\(forall\|where\|block\)\>'
+       \ ||prevstat=~? '^\s*\(\d\+\s\)\=\s*\(\a\w*\s*:\)\=\s*if\>'
      let ind = ind + &sw
     " Remove unwanted indent after logical and arithmetic ifs
     if prevstat =~? '\<if\>' && prevstat !~? '\<then\>'
       let ind = ind - &sw
     endif
     " Remove unwanted indent after type( statements
-    if prevstat =~? '\<type\s*('
+    if prevstat =~? '^\s*type\s*('
       let ind = ind - &sw
     endif
   endif
 
-  "Subtract a shiftwidth from else, elsewhere, case, end if,
-  " end where, end select, end interface and end type statements
+  "Indent program units unless instructed otherwise
+  if !exists("b:fortran_indent_less") && !exists("g:fortran_indent_less")
+    let prefix='\(\(pure\|impure\|elemental\|recursive\)\s\+\)\{,2}'
+    let type='\(\(integer\|real\|double\s\+precision\|complex\|logical'
+          \.'\|character\|type\|class\)\s*\S*\s\+\)\='
+    if prevstat =~? '^\s*\(module\|contains\|program\)\>'
+            \ ||prevstat =~? '^\s*'.prefix.'subroutine\>'
+            \ ||prevstat =~? '^\s*'.prefix.type.'function\>'
+            \ ||prevstat =~? '^\s*'.type.prefix.'function\>'
+      let ind = ind + &sw
+    endif
+    if getline(v:lnum) =~? '^\s*contains\>'
+          \ ||getline(v:lnum)=~? '^\s*end\s*'
+          \ .'\(function\|subroutine\|module\|program\)\>'
+      let ind = ind - &sw
+    endif
+  endif
+
+  "Subtract a shiftwidth from else, else if, elsewhere, case, end if,
+  " end where, end select, end forall, end interface, end associate,
+  " end enum, and end type statements
   if getline(v:lnum) =~? '^\s*\(\d\+\s\)\=\s*'
-       \. '\(else\|elsewhere\|case\|end\s*\(if\|where\|select\|interface\|type\)\)\>'
+        \. '\(else\|else\s*if\|else\s*where\|case\|'
+        \. 'end\s*\(if\|where\|select\|interface\|'
+        \. 'type\|forall\|associate\|enum\)\)\>'
     let ind = ind - &sw
     " Fix indent for case statement immediately after select
-    if prevstat =~? '\<select\>'
+    if prevstat =~? '\<select\s\+\(case\|type\)\>'
       let ind = ind + &sw
     endif
   endif
 
+  "First continuation line
+  if prevstat =~ '&\s*$' && prev2stat !~ '&\s*$'
+    let ind = ind + &sw
+  endif
+  "Line after last continuation line
+  if prevstat !~ '&\s*$' && prev2stat =~ '&\s*$'
+    let ind = ind - &sw
+  endif
+
   return ind
 endfunction
 
index fa57e56..7d5d44b 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:    git config file
 " Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 if exists("b:did_indent")
   finish
@@ -12,6 +12,8 @@ setlocal autoindent
 setlocal indentexpr=GetGitconfigIndent()
 setlocal indentkeys=o,O,*<Return>,0[,],0;,0#,=,!^F
 
+let b:undo_indent = 'setl ai< inde< indk<'
+
 " Only define the function once.
 if exists("*GetGitconfigIndent")
   finish
diff --git a/runtime/indent/gitolite.vim b/runtime/indent/gitolite.vim
new file mode 100644 (file)
index 0000000..33b7c9f
--- /dev/null
@@ -0,0 +1,45 @@
+" Vim indent file
+" Language:    gitolite configuration
+" URL:         https://github.com/tmatilai/gitolite.vim
+" Maintainer:  Teemu Matilainen <teemu.matilainen@iki.fi>
+" Last Change: 2011-12-24
+
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+setlocal autoindent
+setlocal indentexpr=GetGitoliteIndent()
+setlocal indentkeys=o,O,*<Return>,!^F,=repo,\",=
+
+" Only define the function once.
+if exists("*GetGitoliteIndent")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+function! GetGitoliteIndent()
+  let prevln = prevnonblank(v:lnum-1)
+  let pline = getline(prevln)
+  let cline = getline(v:lnum)
+
+  if cline =~ '^\s*\(C\|R\|RW\|RW+\|RWC\|RW+C\|RWD\|RW+D\|RWCD\|RW+CD\|-\)[ \t=]'
+    return &sw
+  elseif cline =~ '^\s*config\s'
+    return &sw
+  elseif pline =~ '^\s*repo\s' && cline =~ '^\s*\(#.*\)\?$'
+    return &sw
+  elseif cline =~ '^\s*#'
+    return indent(prevln)
+  elseif cline =~ '^\s*$'
+    return -1
+  else
+    return 0
+  endif
+endfunction
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 58c0307..c47a8a5 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:    Haml
 " Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 if exists("b:did_indent")
   finish
@@ -23,7 +23,7 @@ let s:attributes = '\%({.\{-\}}\|\[.\{-\}\]\)'
 let s:tag = '\%([%.#][[:alnum:]_-]\+\|'.s:attributes.'\)*[<>]*'
 
 if !exists('g:haml_self_closing_tags')
-  let g:haml_self_closing_tags = 'meta|link|img|hr|br'
+  let g:haml_self_closing_tags = 'base|link|meta|br|hr|img|input'
 endif
 
 function! GetHamlIndent()
index 6f016ad..601aad8 100644 (file)
-" Description: html indenter
-" Author:      Johannes Zellner <johannes@zellner.org>
-" Last Change: Mo, 05 Jun 2006 22:32:41 CEST
-"              Restoring 'cpo' and 'ic' added by Bram 2006 May 5
-" Globals:     g:html_indent_tags         -- indenting tags
-"              g:html_indent_strict       -- inhibit 'O O' elements
-"              g:html_indent_strict_table -- inhibit 'O -' elements
-
-" Only load this indent file when no other was loaded.
+" Vim indent script for HTML
+" General: "{{{
+" File:                html.vim (Vimscript #2075)
+" Author:      Andy Wokula <anwoku@yahoo.de>
+" Last Change: 2013 Jun 12
+" Rev Days:     13
+" Version:     0.9
+" Vim Version: Vim7
+" Description:
+"   Improved version of the distributed html indent script, faster on a
+"   range of lines.
+"
+" Credits:
+"      indent/html.vim (2006 Jun 05) from J. Zellner
+"      indent/css.vim (2006 Dec 20) from N. Weibull
+"
+" History:
+" 2012 Oct 21  (v0.9) added support for shiftwidth()
+" 2011 Sep 09  (v0.8) added HTML5 tags (thx to J. Zuckerman)
+" 2008 Apr 28  (v0.6) revised customization
+" 2008 Mar 09  (v0.5) fixed 'indk' issue (thx to C.J. Robinson)
+" }}}
+
+" Init Folklore, check user settings (2nd time ++) "{{{
 if exists("b:did_indent")
     finish
 endif
 let b:did_indent = 1
 
+setlocal indentexpr=HtmlIndent()
+setlocal indentkeys=o,O,<Return>,<>>,{,},!^F
 
-" [-- local settings (must come before aborting the script) --]
-setlocal indentexpr=HtmlIndentGet(v:lnum)
-setlocal indentkeys=o,O,*<Return>,<>>,{,}
+let b:indent = {"lnum": -1}
+let b:undo_indent = "set inde< indk<| unlet b:indent"
 
+" Load Once:
+if exists("*HtmlIndent")
+    call HtmlIndent_CheckUserSettings()
+    finish
+endif
 
-if exists('g:html_indent_tags')
-    unlet g:html_indent_tags
+" Patch 7.3.694
+if exists('*shiftwidth')
+    let s:ShiftWidth = function('shiftwidth')
+else
+    func! s:ShiftWidth()
+       return &shiftwidth
+    endfunc
 endif
 
-" [-- helper function to assemble tag list --]
-fun! <SID>HtmlIndentPush(tag)
-    if exists('g:html_indent_tags')
-       let g:html_indent_tags = g:html_indent_tags.'\|'.a:tag
+let s:cpo_save = &cpo
+set cpo-=C
+"}}}
+
+func! HtmlIndent_CheckUserSettings() "{{{
+    if exists("g:html_indent_inctags")
+       call s:AddITags(split(g:html_indent_inctags, ","))
+    endif
+    if exists("g:html_indent_autotags")
+       call s:RemoveITags(split(g:html_indent_autotags, ","))
+    endif
+
+    let indone = {"zero": 0
+               \,"auto": "indent(prevnonblank(v:lnum-1))"
+               \,"inc": "b:indent.blocktagind + s:ShiftWidth()"}
+    if exists("g:html_indent_script1")
+       let s:js1indent = get(indone, g:html_indent_script1, indone.zero)
+    endif
+    if exists("g:html_indent_style1")
+       let s:css1indent = get(indone, g:html_indent_style1, indone.zero)
+    endif
+endfunc "}}}
+
+" Init Script Vars  "{{{
+let s:usestate = 1
+let s:css1indent = 0
+let s:js1indent = 0
+" not to be changed:
+let s:endtags = [0,0,0,0,0,0,0,0]   " some places unused
+let s:newstate = {}
+let s:countonly = 0
+ "}}}
+func! s:AddITags(taglist) "{{{
+    for itag in a:taglist
+       let s:indent_tags[itag] = 1
+       let s:indent_tags['/'.itag] = -1
+    endfor
+endfunc "}}}
+func! s:AddBlockTag(tag, id, ...) "{{{
+    if !(a:id >= 2 && a:id < 2+len(s:endtags))
+       return
+    endif
+    let s:indent_tags[a:tag] = a:id
+    if a:0 == 0
+       let s:indent_tags['/'.a:tag] = -a:id
+       let s:endtags[a:id-2] = "</".a:tag.">"
     else
-       let g:html_indent_tags = a:tag
-    endif
-endfun
-
-
-" [-- <ELEMENT ? - - ...> --]
-call <SID>HtmlIndentPush('a')
-call <SID>HtmlIndentPush('abbr')
-call <SID>HtmlIndentPush('acronym')
-call <SID>HtmlIndentPush('address')
-call <SID>HtmlIndentPush('b')
-call <SID>HtmlIndentPush('bdo')
-call <SID>HtmlIndentPush('big')
-call <SID>HtmlIndentPush('blockquote')
-call <SID>HtmlIndentPush('button')
-call <SID>HtmlIndentPush('caption')
-call <SID>HtmlIndentPush('center')
-call <SID>HtmlIndentPush('cite')
-call <SID>HtmlIndentPush('code')
-call <SID>HtmlIndentPush('colgroup')
-call <SID>HtmlIndentPush('del')
-call <SID>HtmlIndentPush('dfn')
-call <SID>HtmlIndentPush('dir')
-call <SID>HtmlIndentPush('div')
-call <SID>HtmlIndentPush('dl')
-call <SID>HtmlIndentPush('em')
-call <SID>HtmlIndentPush('fieldset')
-call <SID>HtmlIndentPush('font')
-call <SID>HtmlIndentPush('form')
-call <SID>HtmlIndentPush('frameset')
-call <SID>HtmlIndentPush('h1')
-call <SID>HtmlIndentPush('h2')
-call <SID>HtmlIndentPush('h3')
-call <SID>HtmlIndentPush('h4')
-call <SID>HtmlIndentPush('h5')
-call <SID>HtmlIndentPush('h6')
-call <SID>HtmlIndentPush('i')
-call <SID>HtmlIndentPush('iframe')
-call <SID>HtmlIndentPush('ins')
-call <SID>HtmlIndentPush('kbd')
-call <SID>HtmlIndentPush('label')
-call <SID>HtmlIndentPush('legend')
-call <SID>HtmlIndentPush('map')
-call <SID>HtmlIndentPush('menu')
-call <SID>HtmlIndentPush('noframes')
-call <SID>HtmlIndentPush('noscript')
-call <SID>HtmlIndentPush('object')
-call <SID>HtmlIndentPush('ol')
-call <SID>HtmlIndentPush('optgroup')
-" call <SID>HtmlIndentPush('pre')
-call <SID>HtmlIndentPush('q')
-call <SID>HtmlIndentPush('s')
-call <SID>HtmlIndentPush('samp')
-call <SID>HtmlIndentPush('script')
-call <SID>HtmlIndentPush('select')
-call <SID>HtmlIndentPush('small')
-call <SID>HtmlIndentPush('span')
-call <SID>HtmlIndentPush('strong')
-call <SID>HtmlIndentPush('style')
-call <SID>HtmlIndentPush('sub')
-call <SID>HtmlIndentPush('sup')
-call <SID>HtmlIndentPush('table')
-call <SID>HtmlIndentPush('textarea')
-call <SID>HtmlIndentPush('title')
-call <SID>HtmlIndentPush('tt')
-call <SID>HtmlIndentPush('u')
-call <SID>HtmlIndentPush('ul')
-call <SID>HtmlIndentPush('var')
-
-
-" [-- <ELEMENT ? O O ...> --]
-if !exists('g:html_indent_strict')
-    call <SID>HtmlIndentPush('body')
-    call <SID>HtmlIndentPush('head')
-    call <SID>HtmlIndentPush('html')
-    call <SID>HtmlIndentPush('tbody')
+       let s:indent_tags[a:1] = -a:id
+       let s:endtags[a:id-2] = a:1
+    endif
+endfunc "}}}
+func! s:RemoveITags(taglist) "{{{
+    " remove itags (protect blocktags from being removed)
+    for itag in a:taglist
+       if !has_key(s:indent_tags, itag) || s:indent_tags[itag] != 1
+           continue
+       endif
+       unlet s:indent_tags[itag]
+       if itag =~ '^\w\+$'
+           unlet s:indent_tags["/".itag]
+       endif
+    endfor
+endfunc "}}}
+" Add Indent Tags: {{{
+if !exists("s:indent_tags")
+    let s:indent_tags = {}
 endif
 
+" old tags:
+call s:AddITags(['a', 'abbr', 'acronym', 'address', 'b', 'bdo', 'big',
+    \ 'blockquote', 'button', 'caption', 'center', 'cite', 'code', 'colgroup',
+    \ 'del', 'dfn', 'dir', 'div', 'dl', 'em', 'fieldset', 'font', 'form',
+    \ 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'i', 'iframe', 'ins', 'kbd',
+    \ 'label', 'legend', 'map', 'menu', 'noframes', 'noscript', 'object', 'ol',
+    \ 'optgroup', 'q', 's', 'samp', 'select', 'small', 'span', 'strong', 'sub',
+    \ 'sup', 'table', 'textarea', 'title', 'tt', 'u', 'ul', 'var', 'th', 'td',
+    \ 'tr', 'tfoot', 'thead'])
 
-" [-- <ELEMENT ? O - ...> --]
-if !exists('g:html_indent_strict_table')
-    call <SID>HtmlIndentPush('th')
-    call <SID>HtmlIndentPush('td')
-    call <SID>HtmlIndentPush('tr')
-    call <SID>HtmlIndentPush('tfoot')
-    call <SID>HtmlIndentPush('thead')
-endif
+" tags added 2011 Sep 09 (especially HTML5 tags):
+call s:AddITags(['area', 'article', 'aside', 'audio', 'bdi', 'canvas',
+    \ 'command', 'datalist', 'details', 'embed', 'figure', 'footer',
+    \ 'header', 'group', 'keygen', 'mark', 'math', 'meter', 'nav', 'output',
+    \ 'progress', 'ruby', 'section', 'svg', 'texture', 'time', 'video',
+    \ 'wbr', 'text'])
 
-delfun <SID>HtmlIndentPush
+"}}}
+" Add Block Tags: contain alien content "{{{
+call s:AddBlockTag('pre', 2)
+call s:AddBlockTag('script', 3)
+call s:AddBlockTag('style', 4)
+call s:AddBlockTag('<!--', 5, '-->')
+"}}}
 
-let s:cpo_save = &cpo
-set cpo-=C
+func! s:CountITags(...) "{{{
 
-" [-- count indent-increasing tags of line a:lnum --]
-fun! <SID>HtmlIndentOpen(lnum, pattern)
-    let s = substitute('x'.getline(a:lnum),
-    \ '.\{-}\(\(<\)\('.a:pattern.'\)\>\)', "\1", 'g')
-    let s = substitute(s, "[^\1].*$", '', '')
-    return strlen(s)
-endfun
-
-" [-- count indent-decreasing tags of line a:lnum --]
-fun! <SID>HtmlIndentClose(lnum, pattern)
-    let s = substitute('x'.getline(a:lnum),
-    \ '.\{-}\(\(<\)/\('.a:pattern.'\)\>>\)', "\1", 'g')
-    let s = substitute(s, "[^\1].*$", '', '')
-    return strlen(s)
-endfun
-
-" [-- count indent-increasing '{' of (java|css) line a:lnum --]
-fun! <SID>HtmlIndentOpenAlt(lnum)
-    return strlen(substitute(getline(a:lnum), '[^{]\+', '', 'g'))
-endfun
-
-" [-- count indent-decreasing '}' of (java|css) line a:lnum --]
-fun! <SID>HtmlIndentCloseAlt(lnum)
-    return strlen(substitute(getline(a:lnum), '[^}]\+', '', 'g'))
-endfun
-
-" [-- return the sum of indents respecting the syntax of a:lnum --]
-fun! <SID>HtmlIndentSum(lnum, style)
-    if a:style == match(getline(a:lnum), '^\s*</')
-       if a:style == match(getline(a:lnum), '^\s*</\<\('.g:html_indent_tags.'\)\>')
-           let open = <SID>HtmlIndentOpen(a:lnum, g:html_indent_tags)
-           let close = <SID>HtmlIndentClose(a:lnum, g:html_indent_tags)
-           if 0 != open || 0 != close
-               return open - close
-           endif
+    " relative indent steps for current line [unit &sw]:
+    let s:curind = 0
+    " relative indent steps for next line [unit &sw]:
+    let s:nextrel = 0
+
+    if a:0==0
+       let s:block = s:newstate.block
+       let tmpline = substitute(s:curline, '<\zs\/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
+       if s:block == 3
+           let s:newstate.scripttype = s:GetScriptType(matchstr(tmpline, '\C.*<SCRIPT\>\zs[^>]*'))
        endif
+       let s:newstate.block = s:block
+    else
+       let s:block = 0         " assume starting outside of a block
+       let s:countonly = 1     " don't change state
+       let tmpline = substitute(s:altline, '<\zs\/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
+       let s:countonly = 0
     endif
-    if '' != &syntax &&
-       \ synIDattr(synID(a:lnum, 1, 1), 'name') =~ '\(css\|java\).*' &&
-       \ synIDattr(synID(a:lnum, strlen(getline(a:lnum)), 1), 'name')
-       \ =~ '\(css\|java\).*'
-       if a:style == match(getline(a:lnum), '^\s*}')
-           return <SID>HtmlIndentOpenAlt(a:lnum) - <SID>HtmlIndentCloseAlt(a:lnum)
+endfunc "}}}
+func! s:CheckTag(itag) "{{{
+    " "tag" or "/tag" or "<!--" or "-->"
+    let ind = get(s:indent_tags, a:itag)
+    if ind == -1
+       " closing tag
+       if s:block != 0
+           " ignore itag within a block
+           return "foo"
+       endif
+       if s:nextrel == 0
+           let s:curind -= 1
+       else
+           let s:nextrel -= 1
        endif
+       " if s:curind >= 1
+       "     let s:curind -= 1
+       " else
+       "     let s:nextrel -= 1
+       " endif
+    elseif ind == 1
+       " opening tag
+       if s:block != 0
+           return "foo"
+       endif
+       let s:nextrel += 1
+    elseif ind != 0
+       " block-tag (opening or closing)
+       return s:Blocktag(a:itag, ind)
+    endif
+    " else ind==0 (other tag found): keep indent
+    return "foo"   " no matter
+endfunc "}}}
+func! s:Blocktag(blocktag, ind) "{{{
+    if a:ind > 0
+       " a block starts here
+       if s:block != 0
+           " already in a block (nesting) - ignore
+           " especially ignore comments after other blocktags
+           return "foo"
+       endif
+       let s:block = a:ind             " block type
+       if s:countonly
+           return "foo"
+       endif
+       let s:newstate.blocklnr = v:lnum
+       " save allover indent for the endtag
+       let s:newstate.blocktagind = b:indent.baseindent + (s:nextrel + s:curind) * s:ShiftWidth()
+       if a:ind == 3
+           return "SCRIPT"    " all except this must be lowercase
+           " line is to be checked again for the type attribute
+       endif
+    else
+       let s:block = 0
+       " we get here if starting and closing block-tag on same line
+    endif
+    return "foo"
+endfunc "}}}
+func! s:GetScriptType(str) "{{{
+    if a:str == "" || a:str =~ "java"
+       return "javascript"
+    else
+       return ""
+    endif
+endfunc "}}}
+
+func! s:FreshState(lnum) "{{{
+    " Look back in the file (lines 1 to a:lnum-1) to calc a state for line
+    " a:lnum.  A state is to know ALL relevant details about the lines
+    " 1..a:lnum-1, initial calculating (here!) can be slow, but updating is
+    " fast (incremental).
+    " State:
+    "  lnum            last indented line == prevnonblank(a:lnum - 1)
+    "  block = 0       a:lnum located within special tag: 0:none, 2:<pre>,
+    "                  3:<script>, 4:<style>, 5:<!--
+    "  baseindent      use this indent for line a:lnum as a start - kind of
+    "                  autoindent (if block==0)
+    "  scripttype = '' type attribute of a script tag (if block==3)
+    "  blocktagind     indent for current opening (get) and closing (set)
+    "                  blocktag (if block!=0)
+    "  blocklnr        lnum of starting blocktag (if block!=0)
+    "  inattr          line {lnum} starts with attributes of a tag
+    let state = {}
+    let state.lnum = prevnonblank(a:lnum - 1)
+    let state.scripttype = ""
+    let state.blocktagind = -1
+    let state.block = 0
+    let state.baseindent = 0
+    let state.blocklnr = 0
+    let state.inattr = 0
+
+    if state.lnum == 0
+       return state
     endif
-    return 0
-endfun
 
-fun! HtmlIndentGet(lnum)
-    " Find a non-empty line above the current line.
-    let lnum = prevnonblank(a:lnum - 1)
+    " Heuristic:
+    " remember startline state.lnum
+    " look back for <pre, </pre, <script, </script, <style, </style tags
+    " remember stopline
+    " if opening tag found,
+    "  assume a:lnum within block
+    " else
+    "  look back in result range (stopline, startline) for comment
+    "      \ delimiters (<!--, -->)
+    "  if comment opener found,
+    "      assume a:lnum within comment
+    "  else
+    "      assume usual html for a:lnum
+    "      if a:lnum-1 has a closing comment
+    "          look back to get indent of comment opener
+    " FI
 
-    " Hit the start of the file, use zero indent.
-    if lnum == 0
-       return 0
+    " look back for blocktag
+    call cursor(a:lnum, 1)
+    let [stopline, stopcol] = searchpos('\c<\zs\/\=\%(pre\>\|script\>\|style\>\)', "bW")
+    " fugly ... why isn't there searchstr()
+    let tagline = tolower(getline(stopline))
+    let blocktag = matchstr(tagline, '\/\=\%(pre\>\|script\>\|style\>\)', stopcol-1)
+    if stopline > 0 && blocktag[0] != "/"
+       " opening tag found, assume a:lnum within block
+       let state.block = s:indent_tags[blocktag]
+       if state.block == 3
+           let state.scripttype = s:GetScriptType(matchstr(tagline, '\>[^>]*', stopcol))
+       endif
+       let state.blocklnr = stopline
+       " check preceding tags in the line:
+       let s:altline = tagline[: stopcol-2]
+       call s:CountITags(1)
+       let state.blocktagind = indent(stopline) + (s:curind + s:nextrel) * s:ShiftWidth()
+       return state
+    elseif stopline == state.lnum
+       " handle special case: previous line (= state.lnum) contains a
+       " closing blocktag which is preceded by line-noise;
+       " blocktag == "/..."
+       let swendtag = match(tagline, '^\s*</') >= 0
+       if !swendtag
+           let [bline, bcol] = searchpos('<'.blocktag[1:].'\>', "bW")
+           let s:altline = tolower(getline(bline)[: bcol-2])
+           call s:CountITags(1)
+           let state.baseindent = indent(bline) + (s:nextrel+s:curline) * s:ShiftWidth()
+           return state
+       endif
     endif
 
-    let restore_ic = &ic
-    setlocal ic " ignore case
+    " else look back for comment
+    call cursor(a:lnum, 1)
+    let [comline, comcol, found] = searchpos('\(<!--\)\|-->', 'bpW', stopline)
+    if found == 2
+       " comment opener found, assume a:lnum within comment
+       let state.block = 5
+       let state.blocklnr = comline
+       " check preceding tags in the line:
+       let s:altline = tolower(getline(comline)[: comcol-2])
+       call s:CountITags(1)
+       let state.blocktagind = indent(comline) + (s:curind + s:nextrel) * s:ShiftWidth()
+       return state
+    endif
 
-    " [-- special handling for <pre>: no indenting --]
-    if getline(a:lnum) =~ '\c</pre>'
-               \ || 0 < searchpair('\c<pre>', '', '\c</pre>', 'nWb')
-               \ || 0 < searchpair('\c<pre>', '', '\c</pre>', 'nW')
-       " we're in a line with </pre> or inside <pre> ... </pre>
-       if restore_ic == 0
-         setlocal noic
+    " else within usual html
+    let s:altline = tolower(getline(state.lnum))
+    " check a:lnum-1 for closing comment (we need indent from the opening line)
+    let comcol = stridx(s:altline, '-->')
+    if comcol >= 0
+       call cursor(state.lnum, comcol+1)
+       let [comline, comcol] = searchpos('<!--', 'bW')
+       if comline == state.lnum
+           let s:altline = s:altline[: comcol-2]
+       else
+           let s:altline = tolower(getline(comline)[: comcol-2])
        endif
+       call s:CountITags(1)
+       let state.baseindent = indent(comline) + (s:nextrel+s:curline) * s:ShiftWidth()
+       return state
+       " TODO check tags that follow "-->"
+    endif
+
+    " else no comments
+    call s:CountITags(1)
+    let state.baseindent = indent(state.lnum) + s:nextrel * s:ShiftWidth()
+    " line starts with end tag
+    let swendtag = match(s:altline, '^\s*</') >= 0
+    if !swendtag
+       let state.baseindent += s:curind * s:ShiftWidth()
+    endif
+    return state
+endfunc "}}}
+
+func! s:Alien2() "{{{
+    " <pre> block
+    return -1
+endfunc "}}}
+func! s:Alien3() "{{{
+    " <script> javascript
+    if prevnonblank(v:lnum-1) == b:indent.blocklnr
+       " indent for the first line after <script>
+       return eval(s:js1indent)
+    endif
+    if b:indent.scripttype == "javascript"
+       return cindent(v:lnum)
+    else
        return -1
     endif
+endfunc "}}}
+func! s:Alien4() "{{{
+    " <style>
+    if prevnonblank(v:lnum-1) == b:indent.blocklnr
+       " indent for first content line
+       return eval(s:css1indent)
+    endif
+    return s:CSSIndent()
+endfunc
 
-    " [-- special handling for <javascript>: use cindent --]
-    let js = '<script.*type\s*=\s*.*java'
-
-    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-    " by Tye Zdrojewski <zdro@yahoo.com>, 05 Jun 2006
-    " ZDR: This needs to be an AND (we are 'after the start of the pair' AND
-    "      we are 'before the end of the pair').  Otherwise, indentation
-    "      before the start of the script block will be affected; the end of
-    "      the pair will still match if we are before the beginning of the
-    "      pair.
-    "
-    if   0 < searchpair(js, '', '</script>', 'nWb')
-    \ && 0 < searchpair(js, '', '</script>', 'nW')
-       " we're inside javascript
-       if getline(lnum) !~ js && getline(a:lnum) != '</script>'
-           if restore_ic == 0
-             setlocal noic
+func! s:CSSIndent() "{{{
+    " adopted $VIMRUNTIME/indent/css.vim
+    if getline(v:lnum) =~ '^\s*[*}]'
+       return cindent(v:lnum)
+    endif
+    let minline = b:indent.blocklnr
+    let pnum = s:css_prevnoncomment(v:lnum - 1, minline)
+    if pnum <= minline
+       " < is to catch errors
+       " indent for first content line after comments
+       return eval(s:css1indent)
+    endif
+    let ind = indent(pnum) + s:css_countbraces(pnum, 1) * s:ShiftWidth()
+    let pline = getline(pnum)
+    if pline =~ '}\s*$'
+       let ind -= (s:css_countbraces(pnum, 0) - (pline =~ '^\s*}')) * s:ShiftWidth()
+    endif
+    return ind
+endfunc "}}}
+func! s:css_prevnoncomment(lnum, stopline) "{{{
+    " caller starts from a line a:lnum-1 that is not a comment
+    let lnum = prevnonblank(a:lnum)
+    let ccol = match(getline(lnum), '\*/')
+    if ccol < 0
+       return lnum
+    endif
+    call cursor(lnum, ccol+1)
+    let lnum = search('/\*', 'bW', a:stopline)
+    if indent(".") == virtcol(".")-1
+       return prevnonblank(lnum-1)
+    else
+       return lnum
+    endif
+endfunc "}}}
+func! s:css_countbraces(lnum, count_open) "{{{
+    let brs = substitute(getline(a:lnum),'[''"].\{-}[''"]\|/\*.\{-}\*/\|/\*.*$\|[^{}]','','g')
+    let n_open = 0
+    let n_close = 0
+    for brace in split(brs, '\zs')
+       if brace == "{"
+           let n_open += 1
+       elseif brace == "}"
+           if n_open > 0
+               let n_open -= 1
+           else
+               let n_close += 1
            endif
-           return cindent(a:lnum)
        endif
+    endfor
+    return a:count_open ? n_open : n_close
+endfunc "}}}
+
+"}}}
+func! s:Alien5() "{{{
+    " <!-- -->
+    return -1
+endfunc "}}}
+
+func! HtmlIndent() "{{{
+    let s:curline = tolower(getline(v:lnum))
+    let indentunit = s:ShiftWidth()
+
+    let s:newstate = {}
+    let s:newstate.lnum = v:lnum
+
+    " does the line start with a closing tag?
+    let swendtag = match(s:curline, '^\s*</') >= 0
+
+    if prevnonblank(v:lnum-1) == b:indent.lnum && s:usestate
+       " use state (continue from previous line)
+    else
+       " start over (know nothing)
+       let b:indent = s:FreshState(v:lnum)
     endif
 
-    if getline(lnum) =~ '\c</pre>'
-       " line before the current line a:lnum contains
-       " a closing </pre>. --> search for line before
-       " starting <pre> to restore the indent.
-       let preline = prevnonblank(search('\c<pre>', 'bW') - 1)
-       if preline > 0
-           if restore_ic == 0
-             setlocal noic
+    if b:indent.block >= 2
+       " within block
+       let endtag = s:endtags[b:indent.block-2]
+       let blockend = stridx(s:curline, endtag)
+       if blockend >= 0
+           " block ends here
+           let s:newstate.block = 0
+           " calc indent for REST OF LINE (may start more blocks):
+           let s:curline = strpart(s:curline, blockend+strlen(endtag))
+           call s:CountITags()
+           if swendtag && b:indent.block != 5
+               let indent = b:indent.blocktagind + s:curind * indentunit
+               let s:newstate.baseindent = indent + s:nextrel * indentunit
+           else
+               let indent = s:Alien{b:indent.block}()
+               let s:newstate.baseindent = b:indent.blocktagind + s:nextrel * indentunit
            endif
-           return indent(preline)
+           call extend(b:indent, s:newstate, "force")
+           return indent
+       else
+           " block continues
+           " indent this line with alien method
+           let indent = s:Alien{b:indent.block}()
+           call extend(b:indent, s:newstate, "force")
+           return indent
        endif
+    else
+       " not within a block - within usual html
+       " if < 2 then always 0
+       let s:newstate.block = b:indent.block
+       call s:CountITags()
+       if swendtag
+           let indent = b:indent.baseindent + s:curind * indentunit
+           let s:newstate.baseindent = indent + s:nextrel * indentunit
+       else
+           let indent = b:indent.baseindent
+           let s:newstate.baseindent = indent + (s:curind + s:nextrel) * indentunit
+       endif
+       call extend(b:indent, s:newstate, "force")
+       return indent
     endif
 
-    let ind = <SID>HtmlIndentSum(lnum, -1)
-    let ind = ind + <SID>HtmlIndentSum(a:lnum, 0)
+endfunc "}}}
 
-    if restore_ic == 0
-       setlocal noic
-    endif
+" check user settings (first time), clear cpo, Modeline: {{{1
+
+" DEBUG:
+com! -nargs=* IndHtmlLocal <args>
 
-    return indent(lnum) + (&sw * ind)
-endfun
+call HtmlIndent_CheckUserSettings()
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
-" [-- EOF <runtime>/indent/html.vim --]
+" vim:set fdm=marker ts=8:
index 97c31ad..b4c6ae6 100644 (file)
@@ -1,6 +1,6 @@
 " IDL (Interactive Data Language) indent file.
 " Language: IDL (ft=idlang)
-" Last change: 2002 Sep 23
+" Last change: 2012 May 18
 " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
 
 " Only load this indent file when no other was loaded.
@@ -9,8 +9,7 @@ if exists("b:did_indent")
 endif
 let b:did_indent = 1
 
-setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,
-                   \0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP
+setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP
 
 setlocal indentexpr=GetIdlangIndent(v:lnum)
 
index facbdbf..e0aec0f 100644 (file)
@@ -1,7 +1,12 @@
 " Vim indent file
 " Language:    Java
-" Maintainer:  Toby Allsopp <toby.allsopp@peace.com> (resigned)
-" Last Change: 2005 Mar 28
+" Previous Maintainer: Toby Allsopp <toby.allsopp@peace.com>
+" Current Maintainer: Hong Xu <xuhdev@gmail.com>
+" Last Change: 2012 May 18
+" Version: 1.0
+" License: Same as Vim.
+" Copyright (c) 2012 Hong Xu
+" Before 2012, this file is maintained by Toby Allsopp.
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -24,6 +29,8 @@ let b:undo_indent = "set cin< cino< indentkeys< indentexpr<"
 if exists("*GetJavaIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 function! SkipJavaBlanksAndComments(startline)
   let lnum = a:startline
@@ -60,6 +67,13 @@ function GetJavaIndent()
 
   " find start of previous line, in case it was a continuation line
   let lnum = SkipJavaBlanksAndComments(v:lnum - 1)
+
+  " If the previous line starts with '@', we should have the same indent as
+  " the previous one
+  if getline(lnum) =~ '^\s*@\S\+\s*$'
+    return indent(lnum)
+  endif
+
   let prev = lnum
   while prev > 1
     let next_prev = SkipJavaBlanksAndComments(prev - 1)
@@ -127,4 +141,7 @@ function GetJavaIndent()
   return theIndent
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vi: sw=2 et
index 08341b0..01e7223 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:     Liquid
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 if exists('b:did_indent')
   finish
@@ -54,9 +54,8 @@ function! GetLiquidIndent(...)
   let line  = substitute(line,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','')
   let line .= matchstr(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+')
   let cline = substitute(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','')
-  let ind += &sw * s:count(line,'{%\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|tablerow\|capture\)\>')
+  let ind += &sw * s:count(line,'{%\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|empty\|tablerow\|capture\)\>')
   let ind -= &sw * s:count(line,'{%\s*end\%(if\|unless\|ifchanged\|case\|for\|tablerow\|capture\)\>')
-  let ind += &sw * s:count(line,'{%\s*\%(elsif\|else\|when\|empty\)\>')
   let ind -= &sw * s:count(cline,'{%\s*\%(elsif\|else\|when\|empty\)\>')
   let ind -= &sw * s:count(cline,'{%\s*end\w*$')
   return ind
index 9f404ae..b0c4eed 100644 (file)
@@ -1,8 +1,8 @@
 " Vim indent file
 " Language:    Lisp
 " Maintainer:    Sergey Khorev <sergey.khorev@gmail.com>
-" URL:          http://iamphet.nm.ru/vim
-" Last Change: 2005 May 19
+" URL:          http://sites.google.com/site/khorser/opensource/vim
+" Last Change: 2012 Jan 10
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
index 1aea4f8..a118eb8 100644 (file)
@@ -1,7 +1,7 @@
 " MetaPost indent file
 " Language:    MetaPost
 " Maintainer:  Eugene Minkovskii <emin@mccme.ru>
-" Last Change: 2003 Nov 21
+" Last Change: 2012 May 18
 " Version: 0.1
 " ==========================================================================
 
@@ -56,6 +56,8 @@ setlocal indentkeys+=;,<:>,=if,=for,=def,=end,=else,=fi
 if exists("*GetMetaPostIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Auxiliary Definitions: {{{1
 function! MetaNextNonblankNoncomment(pos)
@@ -203,4 +205,7 @@ function! GetMetaPostIndent()
 endfunction
 "
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:sw=2:fdm=marker
index 5c267af..3bd65c6 100644 (file)
@@ -1,12 +1,16 @@
 " Vim indent file
 " Language:     OCaml
-" Maintainers: Jean-Francois Yuen   <jfyuen@happycoders.org>
-"              Mike Leary           <leary@nwlink.com>
-"              Markus Mottl         <markus.mottl@gmail.com>
-" URL:         http://www.ocaml.info/vim/indent/ocaml.vim
-" Last Change:  2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
-"              2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
-"              2005 Apr 11 - Fixed an indentation bug concerning "let" (MM)
+" Maintainers:  Jean-Francois Yuen   <jfyuen@happycoders.org>
+"               Mike Leary           <leary@nwlink.com>
+"               Markus Mottl         <markus.mottl@gmail.com>
+" URL:          http://www.ocaml.info/vim/indent/ocaml.vim
+" Last Change:  2013 Jun 29
+"               2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
+"               2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
+"               2013 June   - commented textwidth (Marc Weber)
+"
+" Marc Weber's comment: This file may contain a lot of (very custom) stuff
+" which eventually should be moved somewhere else ..
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -19,7 +23,9 @@ setlocal indentexpr=GetOCamlIndent()
 setlocal indentkeys+=0=and,0=class,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=initializer,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0;;,0>\],0\|\],0>},0\|,0},0\],0)
 setlocal nolisp
 setlocal nosmartindent
-setlocal textwidth=80
+
+" At least Marc Weber and Markus Mottl do not like this:
+" setlocal textwidth=80
 
 " Comment formatting
 if !exists("no_ocaml_comments")
@@ -44,7 +50,7 @@ let s:obj = '^\s*\(constraint\|inherit\|initializer\|method\|val\)\>\|\<\(object
 let s:type = '^\s*\%(class\|let\|type\)\>.*='
 
 " Skipping pattern, for comments
-function s:GetLineWithoutFullComment(lnum)
+function! s:GetLineWithoutFullComment(lnum)
  let lnum = prevnonblank(a:lnum - 1)
  let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
  while lline =~ '^\s*$' && lnum > 0
@@ -55,7 +61,7 @@ function s:GetLineWithoutFullComment(lnum)
 endfunction
 
 " Indent for ';;' to match multiple 'let'
-function s:GetInd(lnum, pat, lim)
+function! s:GetInd(lnum, pat, lim)
  let llet = search(a:pat, 'bW')
  let old = indent(a:lnum)
  while llet > 0
@@ -70,18 +76,18 @@ function s:GetInd(lnum, pat, lim)
 endfunction
 
 " Indent pairs
-function s:FindPair(pstart, pmid, pend)
+function! s:FindPair(pstart, pmid, pend)
  call search(a:pend, 'bW')
  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
 endfunction
 
 " Indent 'let'
-function s:FindLet(pstart, pmid, pend)
+function! s:FindLet(pstart, pmid, pend)
  call search(a:pend, 'bW')
  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ s:beflet'))
 endfunction
 
-function GetOCamlIndent()
+function! GetOCamlIndent()
  " Find a non-commented line above the current line.
  let lnum = s:GetLineWithoutFullComment(v:lnum)
 
@@ -239,6 +245,20 @@ function GetOCamlIndent()
  elseif lline =~ '^\s*(\*' && line =~ '^\s*\*'
    let ind = ind + 1
 
+ else
+ " Don't change indentation of this line
+ " for new lines (indent==0) use indentation of previous line
+
+ " This is for preventing removing indentation of these args:
+ "   let f x =
+ "     let y = x + 1 in
+ "     Printf.printf
+ "       "o"           << here
+ "       "oeuth"       << don't touch indentation
+
+   let i = indent(v:lnum)
+   return i == 0 ? ind : i
+
  endif
 
  " Subtract a 'shiftwidth' after lines matching 'match ... with parser':
index ba978e0..bebb052 100644 (file)
@@ -20,6 +20,8 @@ setlocal indentkeys=o,O,0=:
 if exists("*GetOccamIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 "{{{  Indent definitions
 " Define carriage return indent
@@ -180,3 +182,6 @@ function GetOccamIndent()
 
 endfunction
 "}}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index b1a652d..6dd3030 100644 (file)
@@ -2,7 +2,11 @@
 " Language:    Pascal
 " Maintainer:  Neil Carter <n.carter@swansea.ac.uk>
 " Created:     2004 Jul 13
-" Last Change: 2005 Jul 05
+" Last Change: 2011 Apr 01
+"
+" This is version 2.0, a complete rewrite.
+"
+" For further documentation, see http://psy.swansea.ac.uk/staff/carter/vim/
 
 
 if exists("b:did_indent")
@@ -38,7 +42,15 @@ function! s:GetPrevNonCommentLineNum( line_num )
 endfunction
 
 
+function! s:PurifyCode( line_num )
+       " Strip any trailing comments and whitespace
+       let pureline = 'TODO'
+       return pureline
+endfunction
+
+
 function! GetPascalIndent( line_num )
+
        " Line 0 always goes at column 0
        if a:line_num == 0
                return 0
@@ -46,128 +58,171 @@ function! GetPascalIndent( line_num )
 
        let this_codeline = getline( a:line_num )
 
-       " If in the middle of a three-part comment
+
+       " SAME INDENT
+
+       " Middle of a three-part comment
        if this_codeline =~ '^\s*\*'
-               return indent( a:line_num )
+               return indent( a:line_num - 1)
        endif
 
-       let prev_codeline_num = s:GetPrevNonCommentLineNum( a:line_num )
-       let prev_codeline = getline( prev_codeline_num )
-       let indnt = indent( prev_codeline_num )
 
-       " Compiler directives should always go in column zero.
-       if this_codeline =~ '^\s*{\(\$IFDEF\|\$ELSE\|\$ENDIF\)'
+       " COLUMN 1 ALWAYS
+
+       " Last line of the program
+       if this_codeline =~ '^\s*end\.'
                return 0
        endif
 
-       " These items have nothing before or after (not even a comment), and
-       " go on column 0. Make sure that the ^\s* is followed by \( to make
-       " ORs work properly, and not include the start of line (this must
-       " always appear).
-       " The bracketed expression with the underline is a routine
-       " separator. This is one case where we do indent comment lines.
-       if this_codeline =~ '^\s*\((\*\ _\+\ \*)\|\<\(const\|var\)\>\)$'
+       " Compiler directives, allowing "(*" and "{"
+       "if this_codeline =~ '^\s*\({\|(\*\)$\(IFDEF\|IFNDEF\|ELSE\|ENDIF\)'
+       if this_codeline =~ '^\s*\({\|(\*\)\$'
                return 0
        endif
 
-       " These items may have text after them, and go on column 0 (in most
-       " cases). The problem is that "function" and "procedure" keywords
-       " should be indented if within a class declaration.
-       if this_codeline =~ '^\s*\<\(program\|type\|uses\|procedure\|function\)\>'
+       " section headers
+       if this_codeline =~ '^\s*\(program\|procedure\|function\|type\)\>'
                return 0
        endif
 
-       " BEGIN
-       " If the begin does not come after "if", "for", or "else", then it
-       " goes in column 0
-       if this_codeline =~ '^\s*begin\>' && prev_codeline !~ '^\s*\<\(if\|for\|else\)\>'
+       " Subroutine separators, lines ending with "const" or "var"
+       if this_codeline =~ '^\s*\((\*\ _\+\ \*)\|\(const\|var\)\)$'
                return 0
        endif
 
-       " These keywords are indented once only.
-       if this_codeline =~ '^\s*\<\(private\)\>'
-               return &shiftwidth
-       endif
 
-       " If the PREVIOUS LINE contained these items, the current line is
-       " always indented once.
-       if prev_codeline =~ '^\s*\<\(type\|uses\)\>'
-               return &shiftwidth
-       endif
+       " OTHERWISE, WE NEED TO LOOK FURTHER BACK...
 
-       " These keywords are indented once only. Possibly surrounded by
-       " other chars.
-       if this_codeline =~ '^.\+\<\(object\|record\)\>'
-               return &shiftwidth
+       let prev_codeline_num = s:GetPrevNonCommentLineNum( a:line_num )
+       let prev_codeline = getline( prev_codeline_num )
+       let indnt = indent( prev_codeline_num )
+
+
+       " INCREASE INDENT
+
+       " If the PREVIOUS LINE ended in these items, always indent
+       if prev_codeline =~ '\<\(type\|const\|var\)$'
+               return indnt + &shiftwidth
        endif
 
-       " If the previous line was indenting...
-       if prev_codeline =~ '^\s*\<\(for\|if\|case\|else\|end\ else\)\>'
-               " then indent.
-               let indnt = indnt + &shiftwidth
-               " BUT... if this is the start of a multistatement block then we
-               " need to align the begin with the previous line.
-               if this_codeline =~ '^\s*begin\>'
-                       return indnt - &shiftwidth
+       if prev_codeline =~ '\<repeat$'
+               if this_codeline !~ '^\s*until\>'
+                       return indnt + &shiftwidth
+               else
+                       return indnt
                endif
+       endif
 
-               " We also need to keep the indentation level constant if the
-               " whole if-then statement was on one line.
-               if prev_codeline =~ '\<then\>.\+'
-                       let indnt = indnt - &shiftwidth
+       if prev_codeline =~ '\<\(begin\|record\)$'
+               if this_codeline !~ '^\s*end\>'
+                       return indnt + &shiftwidth
+               else
+                       return indnt
                endif
        endif
 
-       " PREVIOUS-LINE BEGIN
-       " If the previous line was an indenting keyword then indent once...
-       if prev_codeline =~ '^\s*\<\(const\|var\|begin\|repeat\|private\)\>'
-               " But only if this is another var in a list.
-               if this_codeline !~ '^\s*var\>'
+       " If the PREVIOUS LINE ended with these items, indent if not
+       " followed by "begin"
+       if prev_codeline =~ '\<\(\|else\|then\|do\)$' || prev_codeline =~ ':$'
+               if this_codeline !~ '^\s*begin\>'
                        return indnt + &shiftwidth
+               else
+                       " If it does start with "begin" then keep the same indent
+                       "return indnt + &shiftwidth
+                       return indnt
                endif
        endif
 
-       " PREVIOUS-LINE BEGIN
-       " Indent code after a case statement begin
-       if prev_codeline =~ '\:\ begin\>'
+       " Inside a parameter list (i.e. a "(" without a ")"). ???? Considers
+       " only the line before the current one. TODO: Get it working for
+       " parameter lists longer than two lines.
+       if prev_codeline =~ '([^)]\+$'
                return indnt + &shiftwidth
        endif
 
-       " These words may have text before them on the line (hence the .*)
-       " but are followed by nothing. Always indent once only.
-       if prev_codeline =~ '^\(.*\|\s*\)\<\(object\|record\)\>$'
-               return indnt + &shiftwidth
+
+       " DECREASE INDENT
+
+       " Lines starting with "else", but not following line ending with
+       " "end".
+       if this_codeline =~ '^\s*else\>' && prev_codeline !~ '\<end$'
+               return indnt - &shiftwidth
        endif
 
-       " If we just closed a bracket that started on a previous line, then
-       " unindent. But don't return yet -- we need to check for further
-       " unindentation (for end/until/else)
-       if prev_codeline =~ '^[^(]*[^*])'
-               let indnt = indnt - &shiftwidth
+       " Lines after a single-statement branch/loop.
+       " Two lines before ended in "then", "else", or "do"
+       " Previous line didn't end in "begin"
+       let prev2_codeline_num = s:GetPrevNonCommentLineNum( prev_codeline_num )
+       let prev2_codeline = getline( prev2_codeline_num )
+       if prev2_codeline =~ '\<\(then\|else\|do\)$' && prev_codeline !~ '\<begin$'
+               " If the next code line after a single statement branch/loop
+               " starts with "end", "except" or "finally", we need an
+               " additional unindentation.
+               if this_codeline =~ '^\s*\(end;\|except\|finally\|\)$'
+                       " Note that we don't return from here.
+                       return indnt - &shiftwidth - &shiftwidth
+               endif
+               return indnt - &shiftwidth
        endif
 
-       " At the end of a block, we have to unindent both the current line
-       " (the "end" for instance) and the newly-created line.
-       if this_codeline =~ '^\s*\<\(end\|until\|else\)\>'
+       " Lines starting with "until" or "end". This rule must be overridden
+       " by the one for "end" after a single-statement branch/loop. In
+       " other words that rule should come before this one.
+       if this_codeline =~ '^\s*\(end\|until\)\>'
                return indnt - &shiftwidth
        endif
 
-       " If we have opened a bracket and it continues over one line,
-       " then indent once.
-       "
-       " RE = an opening bracket followed by any amount of anything other
-       " than a closing bracket and then the end-of-line.
-       "
-       " If we didn't include the end of line, this RE would match even
-       " closed brackets, since it would match everything up to the closing
-       " bracket.
-       "
-       " This test isn't clever enough to handle brackets inside strings or
-       " comments.
-       if prev_codeline =~ '([^*]\=[^)]*$'
+
+       " MISCELLANEOUS THINGS TO CATCH
+
+       " Most "begin"s will have been handled by now. Any remaining
+       " "begin"s on their own line should go in column 1.
+       if this_codeline =~ '^\s*begin$'
+               return 0
+       endif
+
+
+" ____________________________________________________________________
+" Object/Borland Pascal/Delphi Extensions
+"
+" Note that extended-pascal is handled here, unless it is simpler to
+" handle them in the standard-pascal section above.
+
+
+       " COLUMN 1 ALWAYS
+
+       " section headers at start of line.
+       if this_codeline =~ '^\s*\(interface\|implementation\|uses\|unit\)\>'
+               return 0
+       endif
+
+
+       " INDENT ONCE
+
+       " If the PREVIOUS LINE ended in these items, always indent.
+       if prev_codeline =~ '^\s*\(unit\|uses\|try\|except\|finally\|private\|protected\|public\|published\)$'
                return indnt + &shiftwidth
        endif
 
+       " ???? Indent "procedure" and "functions" if they appear within an
+       " class/object definition. But that means overriding standard-pascal
+       " rule where these words always go in column 1.
+
+
+       " UNINDENT ONCE
+
+       if this_codeline =~ '^\s*\(except\|finally\)$'
+               return indnt - &shiftwidth
+       endif
+
+       if this_codeline =~ '^\s*\(private\|protected\|public\|published\)$'
+               return indnt - &shiftwidth
+       endif
+
+
+" ____________________________________________________________________
+
+       " If nothing changed, return same indent.
        return indnt
 endfunction
 
index 1fbc4de..fc4b6a3 100644 (file)
@@ -1,8 +1,9 @@
 " Vim indent file
-" Language:     Perl 5
-" Author:       Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl/tree/master
-" Last Change:  June 3, 2009
+" Language:      Perl 5
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-24
 
 " Suggestions and improvements by :
 "   Aaron J. Sherman (use syntax for hints)
@@ -11,9 +12,9 @@
 " TODO things that are not or not properly indented (yet) :
 " - Continued statements
 "     print "foo",
-"      "bar";
+"       "bar";
 "     print "foo"
-"      if bar();
+"       if bar();
 " - Multiline regular expressions (m//x)
 " (The following probably needs modifying the perl syntax file)
 " - qw() lists
@@ -34,15 +35,10 @@ if !b:indent_use_syntax
     setlocal indentkeys+=0=EO
 endif
 
-" Only define the function once.
-if exists("*GetPerlIndent")
-    finish
-endif
-
 let s:cpo_save = &cpo
 set cpo-=C
 
-function GetPerlIndent()
+function! GetPerlIndent()
 
     " Get the line to be indented
     let cline = getline(v:lnum)
@@ -52,7 +48,7 @@ function GetPerlIndent()
         return 0
     endif
 
-    " Don't reindent coments on first column
+    " Don't reindent comments on first column
     if cline =~ '^#.'
         return 0
     endif
@@ -124,7 +120,12 @@ function GetPerlIndent()
     " Indent blocks enclosed by {}, (), or []
     if b:indent_use_syntax
         " Find a real opening brace
-        let bracepos = match(line, '[(){}\[\]]', matchend(line, '^\s*[)}\]]'))
+        " NOTE: Unlike Perl character classes, we do NOT need to escape the
+        " closing brackets with a backslash.  Doing so just puts a backslash
+        " in the character class and causes sorrow.  Instead, put the closing
+        " bracket as the first character in the class.
+        let braceclass = '[][(){}]'
+        let bracepos = match(line, braceclass, matchend(line, '^\s*[])}]'))
         while bracepos != -1
             let synid = synIDattr(synID(lnum, bracepos + 1, 0), "name")
             " If the brace is highlighted in one of those groups, indent it.
@@ -132,8 +133,9 @@ function GetPerlIndent()
             if synid == ""
                         \ || synid == "perlMatchStartEnd"
                         \ || synid == "perlHereDoc"
+                        \ || synid == "perlBraces"
                         \ || synid =~ "^perlFiledescStatement"
-                        \ || synid =~ '^perl\(Sub\|Block\)Fold'
+                        \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
                 let brace = strpart(line, bracepos, 1)
                 if brace == '(' || brace == '{' || brace == '['
                     let ind = ind + &sw
@@ -141,22 +143,23 @@ function GetPerlIndent()
                     let ind = ind - &sw
                 endif
             endif
-            let bracepos = match(line, '[(){}\[\]]', bracepos + 1)
+            let bracepos = match(line, braceclass, bracepos + 1)
         endwhile
-        let bracepos = matchend(cline, '^\s*[)}\]]')
+        let bracepos = matchend(cline, '^\s*[])}]')
         if bracepos != -1
             let synid = synIDattr(synID(v:lnum, bracepos, 0), "name")
             if synid == ""
                         \ || synid == "perlMatchStartEnd"
-                        \ || synid =~ '^perl\(Sub\|Block\)Fold'
+                        \ || synid == "perlBraces"
+                        \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
                 let ind = ind - &sw
             endif
         endif
     else
-        if line =~ '[{\[(]\s*\(#[^)}\]]*\)\=$'
+        if line =~ '[{[(]\s*\(#[^])}]*\)\=$'
             let ind = ind + &sw
         endif
-        if cline =~ '^\s*[)}\]]'
+        if cline =~ '^\s*[])}]'
             let ind = ind - &sw
         endif
     endif
index 75159e3..ff2a579 100644 (file)
@@ -1,12 +1,13 @@
 " Vim indent file
-" Language:     Perl 6
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl/tree/master
-" Last Change:  2009-07-04
-" Contributors: Andy Lester <andy@petdance.com>
-"               Hinrik Ã–rn Sigurðsson <hinrik.sig@gmail.com>
+" Language:      Perl 6
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-21
+" Contributors:  Andy Lester <andy@petdance.com>
+"                Hinrik Ã–rn Sigurðsson <hinrik.sig@gmail.com>
 "
-" Adapted from Perl indent file by Rafael Garcia-Suarez <rgarciasuarez@free.fr>
+" Adapted from indent/perl.vim by Rafael Garcia-Suarez <rgarciasuarez@free.fr>
 
 " Suggestions and improvements by :
 "   Aaron J. Sherman (use syntax for hints)
@@ -46,15 +47,10 @@ if !b:indent_use_syntax
     setlocal indentkeys+=0=EO
 endif
 
-" Only define the function once.
-if exists("*GetPerl6Indent")
-    finish
-endif
-
 let s:cpo_save = &cpo
 set cpo-=C
 
-function GetPerl6Indent()
+function! GetPerl6Indent()
 
     " Get the line to be indented
     let cline = getline(v:lnum)
index bc196ed..4902b9e 100644 (file)
@@ -2,21 +2,23 @@
 " Language:    PHP
 " Author:      John Wellesz <John.wellesz (AT) teaser (DOT) fr>
 " URL:         http://www.2072productions.com/vim/indent/php.vim
-" Last Change: 2010 Jully 26th
-" Newsletter:  http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php
-" Version:     1.33
+" Home:                https://github.com/2072/PHP-Indenting-for-VIm
+" Last Change: 2013 August 7th
+" Version:     1.39
 "
 "
-"  If you find a bug, please report it on GitHub:
-"      http://github.com/2072/PHP-Indenting-for-VIm/issues
-"  with an example of code that breaks the algorithm.
+"      Type :help php-indent for available options
 "
+"      A fully commented version of this file is available on github
 "
-"      Thanks a lot for using this script.
 "
+"  If you find a bug, please open a ticket on github.org
+"  ( https://github.com/2072/PHP-Indenting-for-VIm/issues ) with an example of
+"  code that breaks the algorithm.
 "
+
 " NOTE: This script must be used with PHP syntax ON and with the php syntax
-"      script by Lutz Eymers (http://www.ipdienste.net/data/php.vim ) or with the
+"      script by Lutz Eymers (http://www.isp.de/data/php.vim ) or with the
 "      script by Peter Hodge (http://www.vim.org/scripts/script.php?script_id=1571 )
 "      the later is bunbdled by default with Vim 7.
 "
@@ -26,7 +28,7 @@
 "      script will automatically put HereDoc end identifiers at col 1 if
 "      they are followed by a ';').
 "
-"
+
 " NOTE: If you are editing files in Unix file format and that (by accident)
 "      there are '\r' before new lines, this script won't be able to proceed
 "      correctly and will make many mistakes because it won't be able to match
@@ -38,8 +40,6 @@
 "      or simply 'let' the option PHP_removeCRwhenUnix to 1 and the script will
 "      silently remove them when VIM load this script (at each bufread).
 "
-" Options: See :help php-indent for available options.
-
 
 if exists("b:did_indent")
     finish
@@ -50,12 +50,19 @@ let b:did_indent = 1
 let php_sync_method = 0
 
 
+
 if exists("PHP_default_indenting")
     let b:PHP_default_indenting = PHP_default_indenting * &sw
 else
     let b:PHP_default_indenting = 0
 endif
 
+if exists("PHP_outdentSLComments")
+    let b:PHP_outdentSLComments = PHP_outdentSLComments * &sw
+else
+    let b:PHP_outdentSLComments = 0
+endif
+
 if exists("PHP_BracesAtCodeLevel")
     let b:PHP_BracesAtCodeLevel = PHP_BracesAtCodeLevel
 else
@@ -116,13 +123,20 @@ endif
 
 if exists("*GetPhpIndent")
     call ResetPhpOptions()
-    finish
+    finish " XXX -- comment this line for easy dev
 endif
 
 let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'
 let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!'
 
 
+function! DebugPrintReturn(scriptLine)
+
+    echo "debug:" . a:scriptLine
+    call getchar()
+
+endfunction
+
 function! GetLastRealCodeLNum(startline) " {{{
 
     let lnum = a:startline
@@ -189,8 +203,6 @@ function! GetLastRealCodeLNum(startline) " {{{
        let b:InPHPcode_and_script = 0
     endif
 
-
-
     return lnum
 endfunction " }}}
 
@@ -198,11 +210,11 @@ function! Skippmatch2()
 
     let line = getline(".")
 
-   if line =~ '\%(".*\)\@<=/\*\%(.*"\)\@=' || line =~ '\%(\%(//\|#\).*\)\@<=/\*'
-       return 1
-   else
-       return 0
-   endif
+    if line =~ "\\([\"']\\).*/\\*.*\\1" || line =~ '\%(//\|#\).*/\*'
+        return 1
+    else
+        return 0
+    endif
 endfun
 
 function! Skippmatch() " {{{
@@ -291,7 +303,7 @@ function! FindTheSwitchIndent (lnum) " {{{
 
 endfunction "}}}
 
-
+let s:SynPHPMatchGroups = {'phpParent':1, 'Delimiter':1, 'Define':1, 'Storageclass':1, 'StorageClass':1, 'Structure':1, 'Exception':1}
 function! IslinePHP (lnum, tofind) " {{{
     let cline = getline(a:lnum)
 
@@ -307,14 +319,14 @@ function! IslinePHP (lnum, tofind) " {{{
 
     let synname = synIDattr(synID(a:lnum, coltotest, 0), "name")
 
-    if synname =~ '^php' || synname=="Delimiter" || synname =~? '^javaScript'
+    if get(s:SynPHPMatchGroups, synname) || synname =~ '^php' ||  synname =~? '^javaScript'
        return synname
     else
        return ""
     endif
 endfunction " }}}
 
-let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|else\)'
+let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|die\|else\)'
 let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|case\>\|default\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|try\>\|catch\>\)'
 
 let s:autoresetoptions = 0
@@ -361,14 +373,12 @@ function! GetPhpIndent()
     if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast
        if b:PHP_indentbeforelast
            let b:PHP_indentinghuge = 1
-           echom 'Large indenting detected, speed optimizations engaged (v1.33)'
        endif
        let b:PHP_indentbeforelast = b:PHP_lastindented
     endif
 
     if b:InPHPcode_checked && prevnonblank(v:lnum - 1) != b:PHP_lastindented
        if b:PHP_indentinghuge
-           echom 'Large indenting deactivated'
            let b:PHP_indentinghuge = 0
            let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
        endif
@@ -425,7 +435,7 @@ function! GetPhpIndent()
        else
            let b:InPHPcode = 0
            let b:UserIsTypingComment = 0
-           let b:InPHPcode_tofind = '<?\%(.*?>\)\@!\|<script.*>'
+           let b:InPHPcode_tofind = s:PHP_startindenttag
        endif
     endif "!b:InPHPcode_checked }}}
 
@@ -493,7 +503,9 @@ function! GetPhpIndent()
     endif
 
     " Indent successive // or # comment the same way the first is {{{
+    let addSpecial = 0
     if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'
+       let addSpecial = b:PHP_outdentSLComments
        if b:PHP_LastIndentedWasComment == 1
            return indent(real_PHP_lastindented)
        endif
@@ -550,7 +562,7 @@ function! GetPhpIndent()
     endif
 
     if lnum == 0
-       return b:PHP_default_indenting
+       return b:PHP_default_indenting + addSpecial
     endif
 
 
@@ -577,17 +589,17 @@ function! GetPhpIndent()
     endif
 
 
-    if last_line =~ '[;}]'.endline && last_line !~ '^)' && last_line !~# s:defaultORcase
+    if last_line =~ '[;}]'.endline && last_line !~ '^[)\]]' && last_line !~# s:defaultORcase
        if ind==b:PHP_default_indenting
-           return b:PHP_default_indenting
+           return b:PHP_default_indenting + addSpecial
        elseif b:PHP_indentinghuge && ind==b:PHP_CurrentIndentLevel && cline !~# '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)' && last_line !~# '^\s*\%(\%(}\s*\)\=else\)' && getline(GetLastRealCodeLNum(lnum - 1))=~';'.endline
-           return b:PHP_CurrentIndentLevel
+           return b:PHP_CurrentIndentLevel + addSpecial
        endif
     endif
 
     let LastLineClosed = 0
 
-    let terminated = '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\)'.endline
+    let terminated = '\%(;\%(\s*\%(?>\|}\)\)\=\|<<<''\=\a\w*''\=$\|^\s*}\)'.endline
 
     let unstated   = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline
 
@@ -618,19 +630,23 @@ function! GetPhpIndent()
        endwhile
 
     elseif last_line =~# unstated && cline !~ '^\s*);\='.endline
-       let ind = ind + &sw
-       return ind
+       let ind = ind + &sw " we indent one level further when the preceding line is not stated
+       return ind + addSpecial
 
-    elseif (ind != b:PHP_default_indenting || last_line =~ '^)' ) && last_line =~ terminated
+    elseif (ind != b:PHP_default_indenting || last_line =~ '^[)\]]' ) && last_line =~ terminated " Added || last_line =~ '^)' on 2007-12-30 (array indenting problem broke other things)
        let previous_line = last_line
        let last_line_num = lnum
        let LastLineClosed = 1
 
        while 1
-           if previous_line =~ '^\s*}'
-               let last_line_num = FindOpenBracket(last_line_num)
+           if previous_line =~ '^\s*}\|;\s*}'.endline " XXX
+
+               call cursor(last_line_num, 1)
+               call search('}\|;\s*}'.endline, 'W')
+               let oldLastLine = last_line_num
+               let last_line_num = searchpair('{', '', '}', 'bW', 'Skippmatch()')
 
-               if getline(last_line_num) =~ '^\s*{'
+               if oldLastLine == last_line_num || getline(last_line_num) =~ '^\s*{'
                    let last_line_num = GetLastRealCodeLNum(last_line_num - 1)
                endif
 
@@ -674,7 +690,7 @@ function! GetPhpIndent()
            let ind = indent(last_match)
            let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
 
-           return ind
+           return ind + addSpecial
        endif
     endif
 
@@ -693,7 +709,7 @@ function! GetPhpIndent()
     if !LastLineClosed
 
 
-       if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(]'.endline
+       if last_line =~# '[{(\[]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(]'.endline
 
            if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{'
                let ind = ind + &sw
@@ -702,7 +718,7 @@ function! GetPhpIndent()
            if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1
                let b:PHP_CurrentIndentLevel = ind
 
-               return ind
+               return ind + addSpecial
            endif
 
        elseif last_line =~ '\S\+\s*),'.endline
@@ -712,22 +728,21 @@ function! GetPhpIndent()
            if openedparent != lnum
                let ind = indent(openedparent)
            endif
-       
+
        elseif last_line =~ '^\s*'.s:blockstart
            let ind = ind + &sw
 
 
-
-       elseif AntepenultimateLine =~ '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|{\)'.endline . '\|' . s:defaultORcase
+       elseif AntepenultimateLine =~ '\%(;\%(\s*\%(?>\|}\)\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|{\)'.endline . '\|' . s:defaultORcase
            let ind = ind + &sw
        endif
 
     endif
 
-    if cline =~  '^\s*);\='
+    if cline =~  '^\s*[)\]];\='
        let ind = ind - &sw
     endif
 
     let b:PHP_CurrentIndentLevel = ind
-    return ind
+    return ind + addSpecial
 endfunction
index 0c04e81..4ce3c23 100644 (file)
@@ -2,7 +2,7 @@
 " Language:            Python
 " Maintainer:          Bram Moolenaar <Bram@vim.org>
 " Original Author:     David Bustos <bustos@caltech.edu>
-" Last Change:         2006 Jun 18
+" Last Change:         2013 Jul 9
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -21,6 +21,8 @@ setlocal indentkeys+=<:>,=elif,=except
 if exists("*GetPythonIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Come here when loading the script the first time.
 
@@ -34,7 +36,7 @@ function GetPythonIndent(lnum)
     if a:lnum > 1 && getline(a:lnum - 2) =~ '\\$'
       return indent(a:lnum - 1)
     endif
-    return indent(a:lnum - 1) + (exists("g:pyindent_continue") ? eval(g:pyindent_continue) : (&sw * 2))
+    return indent(a:lnum - 1) + (exists("g:pyindent_continue") ? eval(g:pyindent_continue) : (shiftwidth() * 2))
   endif
 
   " If the start of the line is in a string don't change the indent.
@@ -59,7 +61,7 @@ function GetPythonIndent(lnum)
   let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW',
          \ "line('.') < " . (plnum - s:maxoff) . " ? dummy :"
          \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
-         \ . " =~ '\\(Comment\\|String\\)$'")
+         \ . " =~ '\\(Comment\\|Todo\\|String\\)$'")
   if parlnum > 0
     let plindent = indent(parlnum)
     let plnumstart = parlnum
@@ -78,18 +80,18 @@ function GetPythonIndent(lnum)
   let p = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW',
          \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :"
          \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
-         \ . " =~ '\\(Comment\\|String\\)$'")
+         \ . " =~ '\\(Comment\\|Todo\\|String\\)$'")
   if p > 0
     if p == plnum
       " When the start is inside parenthesis, only indent one 'shiftwidth'.
       let pp = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW',
          \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :"
          \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
-         \ . " =~ '\\(Comment\\|String\\)$'")
+         \ . " =~ '\\(Comment\\|Todo\\|String\\)$'")
       if pp > 0
-       return indent(plnum) + (exists("g:pyindent_nested_paren") ? eval(g:pyindent_nested_paren) : &sw)
+       return indent(plnum) + (exists("g:pyindent_nested_paren") ? eval(g:pyindent_nested_paren) : shiftwidth())
       endif
-      return indent(plnum) + (exists("g:pyindent_open_paren") ? eval(g:pyindent_open_paren) : (&sw * 2))
+      return indent(plnum) + (exists("g:pyindent_open_paren") ? eval(g:pyindent_open_paren) : (shiftwidth() * 2))
     endif
     if plnumstart == p
       return indent(plnum)
@@ -106,12 +108,12 @@ function GetPythonIndent(lnum)
     " If the last character in the line is a comment, do a binary search for
     " the start of the comment.  synID() is slow, a linear search would take
     " too long on a long line.
-    if synIDattr(synID(plnum, pline_len, 1), "name") =~ "Comment$"
+    if synIDattr(synID(plnum, pline_len, 1), "name") =~ "\\(Comment\\|Todo\\)$"
       let min = 1
       let max = pline_len
       while min < max
        let col = (min + max) / 2
-       if synIDattr(synID(plnum, col, 1), "name") =~ "Comment$"
+       if synIDattr(synID(plnum, col, 1), "name") =~ "\\(Comment\\|Todo\\)$"
          let max = col
        else
          let min = col + 1
@@ -132,15 +134,15 @@ function GetPythonIndent(lnum)
 
   " If the previous line ended with a colon, indent this line
   if pline =~ ':\s*$'
-    return plindent + &sw
+    return plindent + shiftwidth()
   endif
 
   " If the previous line was a stop-execution statement...
   if getline(plnum) =~ '^\s*\(break\|continue\|raise\|return\|pass\)\>'
     " See if the user has already dedented
-    if indent(a:lnum) > indent(plnum) - &sw
+    if indent(a:lnum) > indent(plnum) - shiftwidth()
       " If not, recommend one dedent
-      return indent(plnum) - &sw
+      return indent(plnum) - shiftwidth()
     endif
     " Otherwise, trust the user
     return -1
@@ -171,11 +173,11 @@ function GetPythonIndent(lnum)
     endif
 
     " Or the user has already dedented
-    if indent(a:lnum) <= plindent - &sw
+    if indent(a:lnum) <= plindent - shiftwidth()
       return -1
     endif
 
-    return plindent - &sw
+    return plindent - shiftwidth()
   endif
 
   " When after a () construct we probably want to go back to the start line.
@@ -190,4 +192,7 @@ function GetPythonIndent(lnum)
 
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:sw=2
diff --git a/runtime/indent/r.vim b/runtime/indent/r.vim
new file mode 100644 (file)
index 0000000..82bdc8b
--- /dev/null
@@ -0,0 +1,492 @@
+" Vim indent file
+" Language:    R
+" Author:      Jakson Alves de Aquino <jalvesaq@gmail.com>
+" Last Change: Fri Feb 15, 2013  08:11PM
+
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+let b:did_indent = 1
+
+setlocal indentkeys=0{,0},:,!^F,o,O,e
+setlocal indentexpr=GetRIndent()
+
+" Only define the function once.
+if exists("*GetRIndent")
+    finish
+endif
+
+" Options to make the indentation more similar to Emacs/ESS:
+if !exists("g:r_indent_align_args")
+    let g:r_indent_align_args = 1
+endif
+if !exists("g:r_indent_ess_comments")
+    let g:r_indent_ess_comments = 0
+endif
+if !exists("g:r_indent_comment_column")
+    let g:r_indent_comment_column = 40
+endif
+if ! exists("g:r_indent_ess_compatible")
+    let g:r_indent_ess_compatible = 0
+endif
+
+function s:RDelete_quotes(line)
+    let i = 0
+    let j = 0
+    let line1 = ""
+    let llen = strlen(a:line)
+    while i < llen
+        if a:line[i] == '"'
+            let i += 1
+            let line1 = line1 . 's'
+            while !(a:line[i] == '"' && ((i > 1 && a:line[i-1] == '\' && a:line[i-2] == '\') || a:line[i-1] != '\')) && i < llen
+                let i += 1
+            endwhile
+            if a:line[i] == '"'
+                let i += 1
+            endif
+        else
+            if a:line[i] == "'"
+                let i += 1
+                let line1 = line1 . 's'
+                while !(a:line[i] == "'" && ((i > 1 && a:line[i-1] == '\' && a:line[i-2] == '\') || a:line[i-1] != '\')) && i < llen
+                    let i += 1
+                endwhile
+                if a:line[i] == "'"
+                    let i += 1
+                endif
+            else
+                if a:line[i] == "`"
+                    let i += 1
+                    let line1 = line1 . 's'
+                    while a:line[i] != "`" && i < llen
+                        let i += 1
+                    endwhile
+                    if a:line[i] == "`"
+                        let i += 1
+                    endif
+                endif
+            endif
+        endif
+        if i == llen
+            break
+        endif
+        let line1 = line1 . a:line[i]
+        let j += 1
+        let i += 1
+    endwhile
+    return line1
+endfunction
+
+" Convert foo(bar()) int foo()
+function s:RDelete_parens(line)
+    if s:Get_paren_balance(a:line, "(", ")") != 0
+        return a:line
+    endif
+    let i = 0
+    let j = 0
+    let line1 = ""
+    let llen = strlen(a:line)
+    while i < llen
+        let line1 = line1 . a:line[i]
+        if a:line[i] == '('
+            let nop = 1
+            while nop > 0 && i < llen
+                let i += 1
+                if a:line[i] == ')'
+                    let nop -= 1
+                else
+                    if a:line[i] == '('
+                        let nop += 1 
+                    endif
+                endif
+            endwhile
+            let line1 = line1 . a:line[i]
+        endif
+        let i += 1
+    endwhile
+    return line1
+endfunction
+
+function! s:Get_paren_balance(line, o, c)
+    let line2 = substitute(a:line, a:o, "", "g")
+    let openp = strlen(a:line) - strlen(line2)
+    let line3 = substitute(line2, a:c, "", "g")
+    let closep = strlen(line2) - strlen(line3)
+    return openp - closep
+endfunction
+
+function! s:Get_matching_brace(linenr, o, c, delbrace)
+    let line = SanitizeRLine(getline(a:linenr))
+    if a:delbrace == 1
+        let line = substitute(line, '{$', "", "")
+    endif
+    let pb = s:Get_paren_balance(line, a:o, a:c)
+    let i = a:linenr
+    while pb != 0 && i > 1
+        let i -= 1
+        let pb += s:Get_paren_balance(SanitizeRLine(getline(i)), a:o, a:c)
+    endwhile
+    return i
+endfunction
+
+" This function is buggy because there 'if's without 'else'
+" It must be rewritten relying more on indentation
+function! s:Get_matching_if(linenr, delif)
+"    let filenm = expand("%")
+"    call writefile([filenm], "/tmp/matching_if_" . a:linenr)
+    let line = SanitizeRLine(getline(a:linenr))
+    if a:delif
+        let line = substitute(line, "if", "", "g")
+    endif
+    let elsenr = 0
+    let i = a:linenr
+    let ifhere = 0
+    while i > 0
+        let line2 = substitute(line, '\<else\>', "xxx", "g")
+        let elsenr += strlen(line) - strlen(line2)
+        if line =~ '.*\s*if\s*()' || line =~ '.*\s*if\s*()'
+            let elsenr -= 1
+            if elsenr == 0
+                let ifhere = i
+                break
+            endif
+        endif
+        let i -= 1
+        let line = SanitizeRLine(getline(i))
+    endwhile
+    if ifhere
+        return ifhere
+    else
+        return a:linenr
+    endif
+endfunction
+
+function! s:Get_last_paren_idx(line, o, c, pb)
+    let blc = a:pb
+    let line = substitute(a:line, '\t', s:curtabstop, "g")
+    let theidx = -1
+    let llen = strlen(line)
+    let idx = 0
+    while idx < llen
+        if line[idx] == a:o
+            let blc -= 1
+            if blc == 0
+                let theidx = idx
+            endif
+        else
+            if line[idx] == a:c
+                let blc += 1
+            endif
+        endif
+        let idx += 1
+    endwhile
+    return theidx + 1
+endfunction
+
+" Get previous relevant line. Search back until getting a line that isn't
+" comment or blank
+function s:Get_prev_line(lineno)
+    let lnum = a:lineno - 1
+    let data = getline( lnum )
+    while lnum > 0 && (data =~ '^\s*#' || data =~ '^\s*$')
+        let lnum = lnum - 1
+        let data = getline( lnum )
+    endwhile
+    return lnum
+endfunction
+
+" This function is also used by r-plugin/common_global.vim
+" Delete from '#' to the end of the line, unless the '#' is inside a string.
+function SanitizeRLine(line)
+    let newline = s:RDelete_quotes(a:line)
+    let newline = s:RDelete_parens(newline)
+    let newline = substitute(newline, '#.*', "", "")
+    let newline = substitute(newline, '\s*$', "", "")
+    return newline
+endfunction
+
+function GetRIndent()
+
+    let clnum = line(".")    " current line
+
+    let cline = getline(clnum)
+    if cline =~ '^\s*#'
+        if g:r_indent_ess_comments == 1
+            if cline =~ '^\s*###'
+                return 0
+            endif
+            if cline !~ '^\s*##'
+                return g:r_indent_comment_column
+            endif
+        endif
+    endif
+
+    let cline = SanitizeRLine(cline)
+
+    if cline =~ '^\s*}' || cline =~ '^\s*}\s*)$'
+        let indline = s:Get_matching_brace(clnum, '{', '}', 1)
+        if indline > 0 && indline != clnum
+            let iline = SanitizeRLine(getline(indline))
+            if s:Get_paren_balance(iline, "(", ")") == 0 || iline =~ '(\s*{$'
+                return indent(indline)
+            else
+                let indline = s:Get_matching_brace(indline, '(', ')', 1)
+                return indent(indline)
+            endif
+        endif
+    endif
+
+    " Find the first non blank line above the current line
+    let lnum = s:Get_prev_line(clnum)
+    " Hit the start of the file, use zero indent.
+    if lnum == 0
+        return 0
+    endif
+
+    let line = SanitizeRLine(getline(lnum))
+
+    if &filetype == "rhelp"
+        if cline =~ '^\\dontshow{' || cline =~ '^\\dontrun{' || cline =~ '^\\donttest{' || cline =~ '^\\testonly{'
+            return 0
+        endif
+        if line =~ '^\\examples{' || line =~ '^\\usage{' || line =~ '^\\dontshow{' || line =~ '^\\dontrun{' || line =~ '^\\donttest{' || line =~ '^\\testonly{'
+            return 0
+        endif
+        if line =~ '^\\method{.*}{.*}(.*'
+            let line = substitute(line, '^\\method{\(.*\)}{.*}', '\1', "")
+        endif
+    endif
+
+    if cline =~ '^\s*{'
+        if g:r_indent_ess_compatible && line =~ ')$'
+            let nlnum = lnum
+            let nline = line
+            while s:Get_paren_balance(nline, '(', ')') < 0
+                let nlnum = s:Get_prev_line(nlnum)
+                let nline = SanitizeRLine(getline(nlnum)) . nline
+            endwhile
+            if nline =~ '^\s*function\s*(' && indent(nlnum) == &sw
+                return 0
+            endif
+        endif
+        if s:Get_paren_balance(line, "(", ")") == 0
+            return indent(lnum)
+        endif
+    endif
+
+    " line is an incomplete command:
+    if line =~ '\<\(if\|while\|for\|function\)\s*()$' || line =~ '\<else$' || line =~ '<-$'
+        return indent(lnum) + &sw
+    endif
+
+    " Deal with () and []
+
+    let pb = s:Get_paren_balance(line, '(', ')')
+
+    if line =~ '^\s*{$' || line =~ '(\s*{' || (pb == 0 && (line =~ '{$' || line =~ '(\s*{$'))
+        return indent(lnum) + &sw
+    endif
+
+    let bb = s:Get_paren_balance(line, '[', ']')
+
+    let s:curtabstop = repeat(' ', &tabstop)
+    if g:r_indent_align_args == 1
+
+        if pb == 0 && bb == 0 && (line =~ '.*[,&|\-\*+<>]$' || cline =~ '^\s*[,&|\-\*+<>]')
+            return indent(lnum)
+        endif
+
+        if pb > 0
+            if &filetype == "rhelp"
+                let ind = s:Get_last_paren_idx(line, '(', ')', pb)
+            else
+                let ind = s:Get_last_paren_idx(getline(lnum), '(', ')', pb)
+            endif
+            return ind
+        endif
+
+        if pb < 0 && line =~ '.*[,&|\-\*+<>]$'
+            let lnum = s:Get_prev_line(lnum)
+            while pb < 1 && lnum > 0
+                let line = SanitizeRLine(getline(lnum))
+                let line = substitute(line, '\t', s:curtabstop, "g")
+                let ind = strlen(line)
+                while ind > 0
+                    if line[ind] == ')'
+                        let pb -= 1
+                    else
+                        if line[ind] == '('
+                            let pb += 1
+                        endif
+                    endif
+                    if pb == 1
+                        return ind + 1
+                    endif
+                    let ind -= 1
+                endwhile
+                let lnum -= 1
+            endwhile
+            return 0
+        endif
+
+        if bb > 0
+            let ind = s:Get_last_paren_idx(getline(lnum), '[', ']', bb)
+            return ind
+        endif
+    endif
+
+    let post_block = 0
+    if line =~ '}$'
+        let lnum = s:Get_matching_brace(lnum, '{', '}', 0)
+        let line = SanitizeRLine(getline(lnum))
+        if lnum > 0 && line =~ '^\s*{'
+            let lnum = s:Get_prev_line(lnum)
+            let line = SanitizeRLine(getline(lnum))
+        endif
+        let pb = s:Get_paren_balance(line, '(', ')')
+        let post_block = 1
+    endif
+
+    let post_fun = 0
+    if pb < 0 && line !~ ')\s*[,&|\-\*+<>]$'
+        let post_fun = 1
+        while pb < 0 && lnum > 0
+            let lnum -= 1
+            let linepiece = SanitizeRLine(getline(lnum))
+            let pb += s:Get_paren_balance(linepiece, "(", ")")
+            let line = linepiece . line
+        endwhile
+        if line =~ '{$' && post_block == 0
+            return indent(lnum) + &sw
+        endif
+
+        " Now we can do some tests again
+        if cline =~ '^\s*{'
+            return indent(lnum)
+        endif
+        if post_block == 0
+            let newl = SanitizeRLine(line)
+            if newl =~ '\<\(if\|while\|for\|function\)\s*()$' || newl =~ '\<else$' || newl =~ '<-$'
+                return indent(lnum) + &sw
+            endif
+        endif
+    endif
+
+    if cline =~ '^\s*else'
+        if line =~ '<-\s*if\s*()'
+            return indent(lnum) + &sw
+        else
+            if line =~ '\<if\s*()'
+                return indent(lnum)
+            else
+                return indent(lnum) - &sw
+            endif
+        endif
+    endif
+
+    if bb < 0 && line =~ '.*]'
+        while bb < 0 && lnum > 0
+            let lnum -= 1
+            let linepiece = SanitizeRLine(getline(lnum))
+            let bb += s:Get_paren_balance(linepiece, "[", "]")
+            let line = linepiece . line
+        endwhile
+        let line = s:RDelete_parens(line)
+    endif
+
+    let plnum = s:Get_prev_line(lnum)
+    let ppost_else = 0
+    if plnum > 0
+        let pline = SanitizeRLine(getline(plnum))
+        let ppost_block = 0
+        if pline =~ '}$'
+            let ppost_block = 1
+            let plnum = s:Get_matching_brace(plnum, '{', '}', 0)
+            let pline = SanitizeRLine(getline(plnum))
+            if pline =~ '^\s*{$' && plnum > 0
+                let plnum = s:Get_prev_line(plnum)
+                let pline = SanitizeRLine(getline(plnum))
+            endif
+        endif
+
+        if pline =~ 'else$'
+            let ppost_else = 1
+            let plnum = s:Get_matching_if(plnum, 0)
+            let pline = SanitizeRLine(getline(plnum))
+        endif
+
+        if pline =~ '^\s*else\s*if\s*('
+            let pplnum = s:Get_prev_line(plnum)
+            let ppline = SanitizeRLine(getline(pplnum))
+            while ppline =~ '^\s*else\s*if\s*(' || ppline =~ '^\s*if\s*()\s*\S$'
+                let plnum = pplnum
+                let pline = ppline
+                let pplnum = s:Get_prev_line(plnum)
+                let ppline = SanitizeRLine(getline(pplnum))
+            endwhile
+            while ppline =~ '\<\(if\|while\|for\|function\)\s*()$' || ppline =~ '\<else$' || ppline =~ '<-$'
+                let plnum = pplnum
+                let pline = ppline
+                let pplnum = s:Get_prev_line(plnum)
+                let ppline = SanitizeRLine(getline(pplnum))
+            endwhile
+        endif
+
+        let ppb = s:Get_paren_balance(pline, '(', ')')
+        if ppb < 0 && (pline =~ ')\s*{$' || pline =~ ')$')
+            while ppb < 0 && plnum > 0
+                let plnum -= 1
+                let linepiece = SanitizeRLine(getline(plnum))
+                let ppb += s:Get_paren_balance(linepiece, "(", ")")
+                let pline = linepiece . pline
+            endwhile
+            let pline = s:RDelete_parens(pline)
+        endif
+    endif
+
+    let ind = indent(lnum)
+    let pind = indent(plnum)
+
+    if g:r_indent_align_args == 0 && pb != 0
+        let ind += pb * &sw
+        return ind
+    endif
+
+    if g:r_indent_align_args == 0 && bb != 0
+        let ind += bb * &sw
+        return ind
+    endif
+
+    if ind == pind || (ind == (pind  + &sw) && pline =~ '{$' && ppost_else == 0)
+        return ind
+    endif
+
+    let pline = getline(plnum)
+    let pbb = s:Get_paren_balance(pline, '[', ']')
+
+    while pind < ind && plnum > 0 && ppb == 0 && pbb == 0
+        let ind = pind
+        let plnum = s:Get_prev_line(plnum)
+        let pline = getline(plnum)
+        let ppb = s:Get_paren_balance(pline, '(', ')')
+        let pbb = s:Get_paren_balance(pline, '[', ']')
+        while pline =~ '^\s*else'
+            let plnum = s:Get_matching_if(plnum, 1)
+            let pline = getline(plnum)
+            let ppb = s:Get_paren_balance(pline, '(', ')')
+            let pbb = s:Get_paren_balance(pline, '[', ']')
+        endwhile
+        let pind = indent(plnum)
+        if ind == (pind  + &sw) && pline =~ '{$'
+            return ind
+        endif
+    endwhile
+
+    return ind
+
+endfunction
+
+" vim: sw=4
index f936c9b..80d3308 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:         reStructuredText Documentation Format
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-12-20
+" Latest Revision:  2011-08-03
 
 if exists("b:did_indent")
   finish
@@ -16,6 +16,9 @@ if exists("*GetRSTIndent")
   finish
 endif
 
+let s:itemization_pattern = '^\s*[-*+]\s'
+let s:enumeration_pattern = '^\s*\%(\d\+\|#\)\.\s\+'
+
 function GetRSTIndent()
   let lnum = prevnonblank(v:lnum - 1)
   if lnum == 0
@@ -25,27 +28,30 @@ function GetRSTIndent()
   let ind = indent(lnum)
   let line = getline(lnum)
 
-  if line =~ '^\s*[-*+]\s'
-    let ind = ind + 2
-  elseif line =~ '^\s*\d\+.\s'
-    let ind = ind + matchend(substitute(line, '^\s*', '', ''), '\d\+.\s\+')
+  if line =~ s:itemization_pattern
+    let ind += 2
+  elseif line =~ s:enumeration_pattern
+    let ind += matchend(line, s:enumeration_pattern)
   endif
 
   let line = getline(v:lnum - 1)
 
+  " Indent :FIELD: lines.  Don’t match if there is no text after the field or
+  " if the text ends with a sent-ender.
+   if line =~ '^:.\+:\s\{-1,\}\S.\+[^.!?:]$'
+     return matchend(line, '^:.\{-1,}:\s\+')
+   endif
+
   if line =~ '^\s*$'
     execute lnum
-    call search('^\s*\%([-*+]\s\|\d\+.\s\|\.\.\|$\)', 'bW')
+    call search('^\s*\%([-*+]\s\|\%(\d\+\|#\)\.\s\|\.\.\|$\)', 'bW')
     let line = getline('.')
-    if line =~ '^\s*[-*+]'
-      let ind = ind - 2
-    elseif line =~ '^\s*\d\+\.\s'
-      let ind = ind - matchend(substitute(line, '^\s*', '', ''),
-            \ '\d\+\.\s\+')
+    if line =~ s:itemization_pattern
+      let ind -= 2
+    elseif line =~ s:enumeration_pattern
+      let ind -= matchend(line, s:enumeration_pattern)
     elseif line =~ '^\s*\.\.'
-      let ind = ind - 3
-    else
-      let ind = ind
+      let ind -= 3
     endif
   endif
 
index 04d1301..095b3a4 100644 (file)
@@ -1,9 +1,7 @@
 " Vim indent file
 " Language:            Ruby
 " Maintainer:          Nikolai Weibull <now at bitwi.se>
-" Last Change:         2009 Dec 17
-" URL:                 http://vim-ruby.rubyforge.org
-" Anon CVS:            See above site
+" URL:                 https://github.com/vim-ruby/vim-ruby
 " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
 
 " 0. Initialization {{{1
@@ -18,9 +16,9 @@ let b:did_indent = 1
 setlocal nosmartindent
 
 " Now, set up our indentation expression and keys that trigger it.
-setlocal indentexpr=GetRubyIndent()
+setlocal indentexpr=GetRubyIndent(v:lnum)
 setlocal indentkeys=0{,0},0),0],!^F,o,O,e
-setlocal indentkeys+==end,=elsif,=when,=ensure,=rescue,==begin,==end
+setlocal indentkeys+==end,=else,=elsif,=when,=ensure,=rescue,==begin,==end
 
 " Only define the function once.
 if exists("*GetRubyIndent")
@@ -33,8 +31,9 @@ set cpo&vim
 " 1. Variables {{{1
 " ============
 
-" Regex of syntax group names that are or delimit string or are comments.
-let s:syng_strcom = '\<ruby\%(String\|StringEscape\|ASCIICode' .
+" Regex of syntax group names that are or delimit strings/symbols or are comments.
+let s:syng_strcom = '\<ruby\%(Regexp\|RegexpDelimiter\|RegexpEscape' .
+      \ '\|Symbol\|String\|StringDelimiter\|StringEscape\|ASCIICode' .
       \ '\|Interpolation\|NoInterpolation\|Comment\|Documentation\)\>'
 
 " Regex of syntax group names that are strings.
@@ -43,7 +42,7 @@ let s:syng_string =
 
 " Regex of syntax group names that are strings or documentation.
 let s:syng_stringdoc =
-  \'\<ruby\%(String\|Interpolation\|NoInterpolation\|StringEscape\|Documentation\)\>'
+      \'\<ruby\%(String\|Interpolation\|NoInterpolation\|StringEscape\|Documentation\)\>'
 
 " Expression used to check whether we should skip a match with searchpair().
 let s:skip_expr =
@@ -52,45 +51,60 @@ let s:skip_expr =
 " Regex used for words that, at the start of a line, add a level of indent.
 let s:ruby_indent_keywords = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
       \ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure' .
-      \ '\|rescue\)\>' .
-      \ '\|\%([*+/,=-]\|<<\|>>\|:\s\)\s*\zs' .
-      \    '\<\%(if\|for\|while\|until\|case\|unless\|begin\)\>'
+      \ '\|rescue\):\@!\>' .
+      \ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' .
+      \    '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>'
 
 " Regex used for words that, at the start of a line, remove a level of indent.
 let s:ruby_deindent_keywords =
-      \ '^\s*\zs\<\%(ensure\|else\|rescue\|elsif\|when\|end\)\>'
+      \ '^\s*\zs\<\%(ensure\|else\|rescue\|elsif\|when\|end\):\@!\>'
 
 " Regex that defines the start-match for the 'end' keyword.
 "let s:end_start_regex = '\%(^\|[^.]\)\<\%(module\|class\|def\|if\|for\|while\|until\|case\|unless\|begin\|do\)\>'
 " TODO: the do here should be restricted somewhat (only at end of line)?
-let s:end_start_regex = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
-      \ '\|while\|until\|case\|unless\|begin\)\>' .
-      \ '\|\%([*+/,=-]\|<<\|>>\|:\s\)\s*\zs' .
-      \    '\<\%(if\|for\|while\|until\|case\|unless\|begin\)\>' .
-      \ '\|\<do\>'
+let s:end_start_regex =
+      \ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' .
+      \ '\<\%(module\|class\|def\|if\|for\|while\|until\|case\|unless\|begin\):\@!\>' .
+      \ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>'
 
 " Regex that defines the middle-match for the 'end' keyword.
-let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue\>\|when\|elsif\)\>'
+let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue:\@!\>\|when\|elsif\):\@!\>'
 
 " Regex that defines the end-match for the 'end' keyword.
-let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end\>'
+let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end:\@!\>'
 
 " Expression used for searchpair() call for finding match for 'end' keyword.
 let s:end_skip_expr = s:skip_expr .
       \ ' || (expand("<cword>") == "do"' .
-      \ ' && getline(".") =~ "^\\s*\\<\\(while\\|until\\|for\\)\\>")'
+      \ ' && getline(".") =~ "^\\s*\\<\\(while\\|until\\|for\\):\\@!\\>")'
 
 " Regex that defines continuation lines, not including (, {, or [.
-let s:continuation_regex = '\%([\\*+/.,:]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+let s:non_bracket_continuation_regex = '\%([\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
 
 " Regex that defines continuation lines.
 " TODO: this needs to deal with if ...: and so on
-let s:continuation_regex2 =
-      \ '\%([\\*+/.,:({[]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+let s:continuation_regex =
+      \ '\%(%\@<![({[\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+
+" Regex that defines bracket continuations
+let s:bracket_continuation_regex = '%\@<!\%([({[]\)\s*\%(#.*\)\=$'
+
+" Regex that defines the first part of a splat pattern
+let s:splat_regex = '[[,(]\s*\*\s*\%(#.*\)\=$'
 
 " Regex that defines blocks.
+"
+" Note that there's a slight problem with this regex and s:continuation_regex.
+" Code like this will be matched by both:
+"
+"   method_call do |(a, b)|
+"
+" The reason is that the pipe matches a hanging "|" operator.
+"
 let s:block_regex =
-      \ '\%(\<do\>\|{\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=\s*\%(#.*\)\=$'
+      \ '\%(\<do:\@!\>\|%\@<!{\)\s*\%(|\s*(*\s*\%([*@&]\=\h\w*,\=\s*\)\%(,\s*(*\s*[*@&]\=\h\w*\s*)*\s*\)*|\)\=\s*\%(#.*\)\=$'
+
+let s:block_continuation_regex = '^\s*[^])}\t ].*'.s:block_regex
 
 " 2. Auxiliary Functions {{{1
 " ======================
@@ -110,6 +124,11 @@ function s:IsInStringOrDocumentation(lnum, col)
   return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_stringdoc
 endfunction
 
+" Check if the character at lnum:col is inside a string delimiter
+function s:IsInStringDelimiter(lnum, col)
+  return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'rubyStringDelimiter'
+endfunction
+
 " Find line above 'lnum' that isn't empty, in a comment, or in a string.
 function s:PrevNonBlankNonString(lnum)
   let in_block = 0
@@ -118,16 +137,16 @@ function s:PrevNonBlankNonString(lnum)
     " Go in and out of blocks comments as necessary.
     " If the line isn't empty (with opt. comment) or in a string, end search.
     let line = getline(lnum)
-    if line =~ '^=begin$'
+    if line =~ '^=begin'
       if in_block
-       let in_block = 0
+        let in_block = 0
       else
-       break
+        break
       endif
-    elseif !in_block && line =~ '^=end$'
+    elseif !in_block && line =~ '^=end'
       let in_block = 1
     elseif !in_block && line !~ '^\s*#.*$' && !(s:IsInStringOrComment(lnum, 1)
-         \ && s:IsInStringOrComment(lnum, strlen(line)))
+          \ && s:IsInStringOrComment(lnum, strlen(line)))
       break
     endif
     let lnum = prevnonblank(lnum - 1)
@@ -139,42 +158,144 @@ endfunction
 function s:GetMSL(lnum)
   " Start on the line we're at and use its indent.
   let msl = a:lnum
+  let msl_body = getline(msl)
   let lnum = s:PrevNonBlankNonString(a:lnum - 1)
   while lnum > 0
     " If we have a continuation line, or we're in a string, use line as MSL.
     " Otherwise, terminate search as we have found our MSL already.
     let line = getline(lnum)
-    let col = match(line, s:continuation_regex2) + 1
-    if (col > 0 && !s:IsInStringOrComment(lnum, col))
-         \ || s:IsInString(lnum, strlen(line))
+
+    if s:Match(lnum, s:splat_regex)
+      " If the above line looks like the "*" of a splat, use the current one's
+      " indentation.
+      "
+      " Example:
+      "   Hash[*
+      "     method_call do
+      "       something
+      "
+      return msl
+    elseif s:Match(line, s:non_bracket_continuation_regex) &&
+          \ s:Match(msl, s:non_bracket_continuation_regex)
+      " If the current line is a non-bracket continuation and so is the
+      " previous one, keep its indent and continue looking for an MSL.
+      "
+      " Example:
+      "   method_call one,
+      "     two,
+      "     three
+      "
       let msl = lnum
+    elseif s:Match(lnum, s:non_bracket_continuation_regex) &&
+          \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+      " If the current line is a bracket continuation or a block-starter, but
+      " the previous is a non-bracket one, respect the previous' indentation,
+      " and stop here.
+      "
+      " Example:
+      "   method_call one,
+      "     two {
+      "     three
+      "
+      return lnum
+    elseif s:Match(lnum, s:bracket_continuation_regex) &&
+          \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+      " If both lines are bracket continuations (the current may also be a
+      " block-starter), use the current one's and stop here
+      "
+      " Example:
+      "   method_call(
+      "     other_method_call(
+      "       foo
+      return msl
+    elseif s:Match(lnum, s:block_regex) &&
+          \ !s:Match(msl, s:continuation_regex) &&
+          \ !s:Match(msl, s:block_continuation_regex)
+      " If the previous line is a block-starter and the current one is
+      " mostly ordinary, use the current one as the MSL.
+      "
+      " Example:
+      "   method_call do
+      "     something
+      "     something_else
+      return msl
     else
-      break
+      let col = match(line, s:continuation_regex) + 1
+      if (col > 0 && !s:IsInStringOrComment(lnum, col))
+            \ || s:IsInString(lnum, strlen(line))
+        let msl = lnum
+      else
+        break
+      endif
     endif
+
+    let msl_body = getline(msl)
     let lnum = s:PrevNonBlankNonString(lnum - 1)
   endwhile
   return msl
 endfunction
 
 " Check if line 'lnum' has more opening brackets than closing ones.
-function s:LineHasOpeningBrackets(lnum)
-  let open_0 = 0
-  let open_2 = 0
-  let open_4 = 0
+function s:ExtraBrackets(lnum)
+  let opening = {'parentheses': [], 'braces': [], 'brackets': []}
+  let closing = {'parentheses': [], 'braces': [], 'brackets': []}
+
   let line = getline(a:lnum)
-  let pos = match(line, '[][(){}]', 0)
+  let pos  = match(line, '[][(){}]', 0)
+
+  " Save any encountered opening brackets, and remove them once a matching
+  " closing one has been found. If a closing bracket shows up that doesn't
+  " close anything, save it for later.
   while pos != -1
     if !s:IsInStringOrComment(a:lnum, pos + 1)
-      let idx = stridx('(){}[]', line[pos])
-      if idx % 2 == 0
-       let open_{idx} = open_{idx} + 1
-      else
-       let open_{idx - 1} = open_{idx - 1} - 1
+      if line[pos] == '('
+        call add(opening.parentheses, {'type': '(', 'pos': pos})
+      elseif line[pos] == ')'
+        if empty(opening.parentheses)
+          call add(closing.parentheses, {'type': ')', 'pos': pos})
+        else
+          let opening.parentheses = opening.parentheses[0:-2]
+        endif
+      elseif line[pos] == '{'
+        call add(opening.braces, {'type': '{', 'pos': pos})
+      elseif line[pos] == '}'
+        if empty(opening.braces)
+          call add(closing.braces, {'type': '}', 'pos': pos})
+        else
+          let opening.braces = opening.braces[0:-2]
+        endif
+      elseif line[pos] == '['
+        call add(opening.brackets, {'type': '[', 'pos': pos})
+      elseif line[pos] == ']'
+        if empty(opening.brackets)
+          call add(closing.brackets, {'type': ']', 'pos': pos})
+        else
+          let opening.brackets = opening.brackets[0:-2]
+        endif
       endif
     endif
+
     let pos = match(line, '[][(){}]', pos + 1)
   endwhile
-  return (open_0 > 0) . (open_2 > 0) . (open_4 > 0)
+
+  " Find the rightmost brackets, since they're the ones that are important in
+  " both opening and closing cases
+  let rightmost_opening = {'type': '(', 'pos': -1}
+  let rightmost_closing = {'type': ')', 'pos': -1}
+
+  for opening in opening.parentheses + opening.braces + opening.brackets
+    if opening.pos > rightmost_opening.pos
+      let rightmost_opening = opening
+    endif
+  endfor
+
+  for closing in closing.parentheses + closing.braces + closing.brackets
+    if closing.pos > rightmost_closing.pos
+      let rightmost_closing = closing
+    endif
+  endfor
+
+  return [rightmost_opening, rightmost_closing]
 endfunction
 
 function s:Match(lnum, regex)
@@ -195,32 +316,35 @@ endfunction
 " 3. GetRubyIndent Function {{{1
 " =========================
 
-function GetRubyIndent()
+function GetRubyIndent(...)
   " 3.1. Setup {{{2
   " ----------
 
-  " Set up variables for restoring position in file.  Could use v:lnum here.
+  " For the current line, use the first argument if given, else v:lnum
+  let clnum = a:0 ? a:1 : v:lnum
+
+  " Set up variables for restoring position in file.  Could use clnum here.
   let vcol = col('.')
 
   " 3.2. Work on the current line {{{2
   " -----------------------------
 
   " Get the current line.
-  let line = getline(v:lnum)
+  let line = getline(clnum)
   let ind = -1
 
   " If we got a closing bracket on an empty line, find its match and indent
   " according to it.  For parentheses we indent to its column - 1, for the
   " others we indent to the containing line's MSL's level.  Return -1 if fail.
   let col = matchend(line, '^\s*[]})]')
-  if col > 0 && !s:IsInStringOrComment(v:lnum, col)
-    call cursor(v:lnum, col)
+  if col > 0 && !s:IsInStringOrComment(clnum, col)
+    call cursor(clnum, col)
     let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
     if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
       if line[col-1]==')' && col('.') != col('$') - 1
-       let ind = virtcol('.')-1
+        let ind = virtcol('.') - 1
       else
-       let ind = indent(s:GetMSL(line('.')))
+        let ind = indent(s:GetMSL(line('.')))
       endif
     endif
     return ind
@@ -233,35 +357,47 @@ function GetRubyIndent()
 
   " If we have a deindenting keyword, find its match and indent to its level.
   " TODO: this is messy
-  if s:Match(v:lnum, s:ruby_deindent_keywords)
-    call cursor(v:lnum, 1)
+  if s:Match(clnum, s:ruby_deindent_keywords)
+    call cursor(clnum, 1)
     if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
-           \ s:end_skip_expr) > 0
-      let line = getline('.')
+          \ s:end_skip_expr) > 0
+      let msl  = s:GetMSL(line('.'))
+      let line = getline(line('.'))
+
       if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
-       \ strpart(line, col('.') - 1, 2) !~ 'do'
-       let ind = virtcol('.') - 1
+            \ strpart(line, col('.') - 1, 2) !~ 'do'
+        let ind = virtcol('.') - 1
+      elseif getline(msl) =~ '=\s*\(#.*\)\=$'
+        let ind = indent(line('.'))
       else
-       let ind = indent('.')
+        let ind = indent(msl)
       endif
     endif
     return ind
   endif
 
   " If we are in a multi-line string or line-comment, don't do anything to it.
-  if s:IsInStringOrDocumentation(v:lnum, matchend(line, '^\s*') + 1)
+  if s:IsInStringOrDocumentation(clnum, matchend(line, '^\s*') + 1)
     return indent('.')
   endif
 
+  " If we are at the closing delimiter of a "<<" heredoc-style string, set the
+  " indent to 0.
+  if line =~ '^\k\+\s*$'
+        \ && s:IsInStringDelimiter(clnum, 1)
+        \ && search('\V<<'.line, 'nbW') > 0
+    return 0
+  endif
+
   " 3.3. Work on the previous line. {{{2
   " -------------------------------
 
   " Find a non-blank, non-multi-line string line above the current line.
-  let lnum = s:PrevNonBlankNonString(v:lnum - 1)
+  let lnum = s:PrevNonBlankNonString(clnum - 1)
 
   " If the line is empty and inside a string, use the previous line.
-  if line =~ '^\s*$' && lnum != prevnonblank(v:lnum - 1)
-    return indent(prevnonblank(v:lnum))
+  if line =~ '^\s*$' && lnum != prevnonblank(clnum - 1)
+    return indent(prevnonblank(clnum))
   endif
 
   " At the start of the file use zero indent.
@@ -269,7 +405,7 @@ function GetRubyIndent()
     return 0
   endif
 
-  " Set up variables for current line.
+  " Set up variables for the previous line.
   let line = getline(lnum)
   let ind = indent(lnum)
 
@@ -278,20 +414,42 @@ function GetRubyIndent()
     return indent(s:GetMSL(lnum)) + &sw
   endif
 
-  " If the previous line contained an opening bracket, and we are still in it,
-  " add indent depending on the bracket type.
-  if line =~ '[[({]'
-    let counts = s:LineHasOpeningBrackets(lnum)
-    if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
-      if col('.') + 1 == col('$')
-       return ind + &sw
+  " If the previous line ended with the "*" of a splat, add a level of indent
+  if line =~ s:splat_regex
+    return indent(lnum) + &sw
+  endif
+
+  " If the previous line contained unclosed opening brackets and we are still
+  " in them, find the rightmost one and add indent depending on the bracket
+  " type.
+  "
+  " If it contained hanging closing brackets, find the rightmost one, find its
+  " match and indent according to that.
+  if line =~ '[[({]' || line =~ '[])}]\s*\%(#.*\)\=$'
+    let [opening, closing] = s:ExtraBrackets(lnum)
+
+    if opening.pos != -1
+      if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
+        if col('.') + 1 == col('$')
+          return ind + &sw
+        else
+          return virtcol('.')
+        endif
       else
-       return virtcol('.')
+        let nonspace = matchend(line, '\S', opening.pos + 1) - 1
+        return nonspace > 0 ? nonspace : ind + &sw
+      endif
+    elseif closing.pos != -1
+      call cursor(lnum, closing.pos + 1)
+      normal! %
+
+      if s:Match(line('.'), s:ruby_indent_keywords)
+        return indent('.') + &sw
+      else
+        return indent('.')
       endif
-    elseif counts[1] == '1' || counts[2] == '1'
-      return ind + &sw
     else
-      call cursor(v:lnum, vcol)
+      call cursor(clnum, vcol)
     end
   endif
 
@@ -301,12 +459,12 @@ function GetRubyIndent()
   if col > 0
     call cursor(lnum, col)
     if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
-               \ s:end_skip_expr) > 0
+          \ s:end_skip_expr) > 0
       let n = line('.')
       let ind = indent('.')
       let msl = s:GetMSL(n)
       if msl != n
-       let ind = indent(msl)
+        let ind = indent(msl)
       end
       return ind
     endif
@@ -316,7 +474,6 @@ function GetRubyIndent()
   if col > 0
     call cursor(lnum, col)
     let ind = virtcol('.') - 1 + &sw
-"    let ind = indent(lnum) + &sw
     " TODO: make this better (we need to count them) (or, if a searchpair
     " fails, we know that something is lacking an end and thus we indent a
     " level
@@ -336,7 +493,7 @@ function GetRubyIndent()
   " If the previous line wasn't a MSL and is continuation return its indent.
   " TODO: the || s:IsInString() thing worries me a bit.
   if p_lnum != lnum
-    if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line))
+    if s:Match(p_lnum, s:non_bracket_continuation_regex) || s:IsInString(p_lnum,strlen(line))
       return ind
     endif
   endif
@@ -356,13 +513,15 @@ function GetRubyIndent()
     return ind
   endif
 
-  " If the previous line ended with [*+/.-=], indent one extra level.
-  if s:Match(lnum, s:continuation_regex)
+  " If the previous line ended with [*+/.,-=], but wasn't a block ending or a
+  " closing bracket, indent one extra level.
+  if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)')
     if lnum == p_lnum
       let ind = msl_ind + &sw
     else
       let ind = msl_ind
     endif
+    return ind
   endif
 
   " }}}2
@@ -375,4 +534,4 @@ endfunction
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
-" vim:set sw=2 sts=2 ts=8 noet:
+" vim:set sw=2 sts=2 ts=8 et:
index 4622f00..b6e2e66 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:    Sass
 " Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 if exists("b:did_indent")
   finish
@@ -17,7 +17,8 @@ if exists("*GetSassIndent")
   finish
 endif
 
-let s:property = '^\s*:\|^\s*[[:alnum:]-]\+\%(:\|\s*=\)'
+let s:property = '^\s*:\|^\s*[[:alnum:]#{}-]\+\%(:\|\s*=\)'
+let s:extend = '^\s*\%(@extend\|@include\|+\)'
 
 function! GetSassIndent()
   let lnum = prevnonblank(v:lnum-1)
@@ -27,7 +28,7 @@ function! GetSassIndent()
   let line = substitute(line,'^\s\+','','')
   let indent = indent(lnum)
   let cindent = indent(v:lnum)
-  if line !~ s:property && cline =~ s:property
+  if line !~ s:property && line !~ s:extend && cline =~ s:property
     return indent + &sw
   "elseif line =~ s:property && cline !~ s:property
     "return indent - &sw
index 9dde2c3..ba03f2d 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:    SDL
-" Maintainer:  Michael Piefel <piefel@informatik.hu-berlin.de>
-" Last Change: 2001 Sep 17
+" Maintainer:  Michael Piefel <entwurf@piefel.de>
+" Last Change: 10 December 2011
 
 " Shamelessly stolen from the Vim-Script indent file
 
@@ -19,7 +19,8 @@ if exists("*GetSDLIndent")
 "  finish
 endif
 
-set cpo-=C
+let s:cpo_save = &cpo
+set cpo&vim
 
 function! GetSDLIndent()
   " Find a non-blank line above the current line.
@@ -72,7 +73,7 @@ function! GetSDLIndent()
 
   " Systems and packages are always in column 0
   if getline(v:lnum) =~? '^\s*\(\(end\)\=system\|\(end\)\=package\)'
-    return 0;
+    return 0
   endif
 
   " Put each end* where the corresponding begin was
@@ -86,4 +87,7 @@ function! GetSDLIndent()
   return ind
 endfunction
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:sw=2
index fdafb62..d11c54b 100644 (file)
@@ -1,8 +1,8 @@
 " Vim indent file
 " Language:    SQL
-" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: Mon Apr 02 2007 9:13:47 AM
-" Version:     1.5
+" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+" Last Change: 2012 Dec 06
+" Version:     3.0
 " Download:    http://vim.sourceforge.net/script.php?script_id=495
 
 " Notes:
 " Known Issues:
 "    The Oracle MERGE statement does not have an end tag associated with
 "    it, this can leave the indent hanging to the right one too many.
+"
+" History:
+"    3.0 (Dec 2012)
+"        Added cpo check
+"
+"    2.0
+"        Added the FOR keyword to SQLBlockStart to handle (Alec Tica):
+"            for i in 1..100 loop
+"              |<-- I expect to have indentation here
+"            end loop;
+"
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -48,14 +59,16 @@ setlocal indentexpr=GetSQLIndent()
 if exists("*GetSQLIndent")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " List of all the statements that start a new block.
 " These are typically words that start a line.
 " IS is excluded, since it is difficult to determine when the
 " ending block is (especially for procedures/functions).
 let s:SQLBlockStart = '^\s*\%('.
-            \ 'if\|else\|elseif\|elsif\|'.
-                \ 'while\|loop\|do\|'.
+                \ 'if\|else\|elseif\|elsif\|'.
+                \ 'while\|loop\|do\|for\|'.
                 \ 'begin\|'.
                 \ 'case\|when\|merge\|exception'.
                 \ '\)\>'
@@ -64,7 +77,7 @@ let s:SQLBlockEnd = '^\s*\(end\)\>'
 " The indent level is also based on unmatched paranethesis
 " If a line has an extra "(" increase the indent
 " If a line has an extra ")" decrease the indent
-function s:CountUnbalancedParan( line, paran_to_check )
+function! s:CountUnbalancedParan( line, paran_to_check )
     let l = a:line
     let lp = substitute(l, '[^(]', '', 'g')
     let l = a:line
@@ -86,7 +99,7 @@ function s:CountUnbalancedParan( line, paran_to_check )
 endfunction
 
 " Unindent commands based on previous indent level
-function s:CheckToIgnoreRightParan( prev_lnum, num_levels )
+function! s:CheckToIgnoreRightParan( prev_lnum, num_levels )
     let lnum = a:prev_lnum
     let line = getline(lnum)
     let ends = 0
@@ -149,7 +162,7 @@ endfunction
 "         something;
 "    WHEN ...
 " Should return indent level of exception.
-function s:GetStmtStarterIndent( keyword, curr_lnum )
+function! s:GetStmtStarterIndent( keyword, curr_lnum )
     let lnum  = a:curr_lnum
 
     " Default - reduce indent by 1
@@ -191,7 +204,7 @@ endfunction
 
 
 " Check if the line is a comment
-function s:IsLineComment(lnum)
+function! s:IsLineComment(lnum)
     let rc = synIDattr(
                 \ synID(a:lnum,
                 \     match(getline(a:lnum), '\S')+1, 0)
@@ -203,7 +216,7 @@ endfunction
 
 
 " Check if the column is a comment
-function s:IsColComment(lnum, cnum)
+function! s:IsColComment(lnum, cnum)
     let rc = synIDattr(synID(a:lnum, a:cnum, 0), "name")
                 \           =~? "comment"
 
@@ -213,7 +226,7 @@ endfunction
 
 " Instead of returning a column position, return
 " an appropriate value as a factor of shiftwidth.
-function s:ModuloIndent(ind)
+function! s:ModuloIndent(ind)
     let ind = a:ind
 
     if ind > 0
@@ -229,7 +242,7 @@ endfunction
 
 
 " Find correct indent of a new line based upon the previous line
-function GetSQLIndent()
+function! GetSQLIndent()
     let lnum = v:lnum
     let ind = indent(lnum)
 
@@ -240,35 +253,27 @@ function GetSQLIndent()
     "     return ind
     " endif
 
-    " while 1
-        " Get previous non-blank line
-        let prevlnum = prevnonblank(lnum - 1)
-        if prevlnum <= 0
-            return ind
-        endif
+    " Get previous non-blank line
+    let prevlnum = prevnonblank(lnum - 1)
+    if prevlnum <= 0
+        return ind
+    endif
 
-        if s:IsLineComment(prevlnum) == 1
-            if getline(v:lnum) =~ '^\s*\*'
-                let ind = s:ModuloIndent(indent(prevlnum))
-                return ind + 1
-            endif
-            " If the previous line is a comment, then return -1
-            " to tell Vim to use the formatoptions setting to determine
-            " the indent to use
-            " But only if the next line is blank.  This would be true if
-            " the user is typing, but it would not be true if the user
-            " is reindenting the file
-            if getline(v:lnum) =~ '^\s*$'
-                return -1
-            endif
+    if s:IsLineComment(prevlnum) == 1
+        if getline(v:lnum) =~ '^\s*\*'
+            let ind = s:ModuloIndent(indent(prevlnum))
+            return ind + 1
         endif
-
-    "     let prevline = getline(prevlnum)
-    "     if prevline !~ '^\s*$'
-    "         " echom 'previous non blank - break: ' . prevline
-    "         break
-    "     endif
-    " endwhile
+        " If the previous line is a comment, then return -1
+        " to tell Vim to use the formatoptions setting to determine
+        " the indent to use
+        " But only if the next line is blank.  This would be true if
+        " the user is typing, but it would not be true if the user
+        " is reindenting the file
+        if getline(v:lnum) =~ '^\s*$'
+            return -1
+        endif
+    endif
 
     " echom 'PREVIOUS INDENT: ' . indent(prevlnum) . '  LINE: ' . getline(prevlnum)
 
@@ -382,4 +387,7 @@ function GetSQLIndent()
     return s:ModuloIndent(ind)
 endfunction
 
-" vim:sw=4:
+"  Restore:
+let &cpo= s:keepcpo
+unlet s:keepcpo
+" vim: ts=4 fdm=marker sw=4
index cd18f06..59a9d56 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:            C-shell (tcsh)
-" Maintainer:          Gautam Iyer <gautam@math.uchicago.edu>
-" Last Modified:       Sat 16 Jun 2007 04:27:45 PM PDT
+" Maintainer:          GI <a@b.c>, where a='gi1242+vim', b='gmail', c='com'
+" Last Modified:       Sat 10 Dec 2011 09:23:00 AM EST
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -18,8 +18,6 @@ if exists("*TcshGetIndent")
     finish
 endif
 
-set cpoptions-=C
-
 function TcshGetIndent()
     " Find a non-blank line above the current line.
     let lnum = prevnonblank(v:lnum - 1)
diff --git a/runtime/indent/tex.vim b/runtime/indent/tex.vim
new file mode 100644 (file)
index 0000000..7e3a351
--- /dev/null
@@ -0,0 +1,295 @@
+" Vim indent file
+" Language:     LaTeX
+" Maintainer:   YiChao Zhou <broken.zhou AT gmail.com>
+" Created:      Sat, 16 Feb 2002 16:50:19 +0100
+" Last Change: 2012 Mar 18 19:19:50
+" Version: 0.7
+"   Please email me if you found something we can do.  Bug report and
+"   feature request is welcome.
+
+" Last Update:  {{{
+"               25th Sep 2002, by LH :
+"               (*) better support for the option
+"               (*) use some regex instead of several '||'.
+"               Oct 9th, 2003, by JT:
+"               (*) don't change indentation of lines starting with '%'
+"               2005/06/15, Moshe Kaminsky <kaminsky AT math.huji.ac.il>
+"               (*) New variables:
+"                   g:tex_items, g:tex_itemize_env, g:tex_noindent_env
+"               2011/3/6, by Zhou YiChao <broken.zhou AT gmail.com>
+"               (*) Don't change indentation of lines starting with '%'
+"                   I don't see any code with '%' and it doesn't work properly
+"                   so I add some code.
+"               (*) New features: Add smartindent-like indent for "{}" and  "[]".
+"               (*) New variables: g:tex_indent_brace
+"               2011/9/25, by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Bug fix: smartindent-like indent for "[]"
+"               (*) New features: Align with "&".
+"               (*) New variable: g:tex_indent_and.
+"               2011/10/23 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Bug fix: improve the smartindent-like indent for "{}" and
+"               "[]".
+"               2012/02/27 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Bug fix: support default folding marker.
+"               (*) Indent with "&" is not very handy.  Make it not enable by
+"               default.
+"               2012/03/06 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Modify "&" behavior and make it default again.  Now "&"
+"               won't align when there are more then one "&" in the previous
+"               line.
+"               (*) Add indent "\left(" and "\right)"
+"               (*) Trust user when in "verbatim" and "lstlisting"
+"               2012/03/11 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Modify "&" so that only indent when current line start with
+"               "&".
+"               2012/03/12 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Modify indentkeys.
+"               2012/03/18 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Add &cpo
+"               2013/05/02 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Fix problem about GetTeXIndent checker. Thank Albert Netymk
+"                   for reporting this.
+" }}}
+
+" Document: {{{
+"
+" To set the following options (ok, currently it's just one), add a line like
+"   let g:tex_indent_items = 1
+" to your ~/.vimrc.
+"
+" * g:tex_indent_brace
+"
+"   If this variable is unset or non-zero, it will use smartindent-like style
+"   for "{}" and "[]"
+"   
+" * g:tex_indent_items
+"
+"   If this variable is set, item-environments are indented like Emacs does
+"   it, i.e., continuation lines are indented with a shiftwidth.
+"   
+"   NOTE: I've already set the variable below; delete the corresponding line
+"   if you don't like this behaviour.
+"
+"   Per default, it is unset.
+"   
+"              set                                unset
+"   ----------------------------------------------------------------
+"       \begin{itemize}                      \begin{itemize}  
+"         \item blablabla                      \item blablabla
+"           bla bla bla                        bla bla bla  
+"         \item blablabla                      \item blablabla
+"           bla bla bla                        bla bla bla  
+"       \end{itemize}                        \end{itemize}    
+"
+"
+" * g:tex_items
+"
+"   A list of tokens to be considered as commands for the beginning of an item 
+"   command. The tokens should be separated with '\|'. The initial '\' should 
+"   be escaped. The default is '\\bibitem\|\\item'.
+"
+" * g:tex_itemize_env
+" 
+"   A list of environment names, separated with '\|', where the items (item 
+"   commands matching g:tex_items) may appear. The default is 
+"   'itemize\|description\|enumerate\|thebibliography'.
+"
+" * g:tex_noindent_env
+"
+"   A list of environment names. separated with '\|', where no indentation is 
+"   required. The default is 'document\|verbatim'.
+"
+" * g:tex_indent_and
+"
+"   If this variable is unset or zero, vim will try to align the line with first
+"   "&". This is pretty useful when you use environment like table or align.
+"   Note that this feature need to search back some line, so vim may become
+"   a little slow.
+"
+" }}} 
+
+" Only define the function once
+if exists("b:did_indent")
+    finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Define global variable {{{
+
+let b:did_indent = 1
+
+if !exists("g:tex_indent_items")
+    let g:tex_indent_items = 1
+endif
+if !exists("g:tex_indent_brace")
+    let g:tex_indent_brace = 1
+endif
+if !exists("g:tex_indent_and")
+    let g:tex_indent_and = 1
+endif
+if g:tex_indent_items
+    if !exists("g:tex_itemize_env")
+        let g:tex_itemize_env = 'itemize\|description\|enumerate\|thebibliography'
+    endif
+    if !exists('g:tex_items')
+        let g:tex_items = '\\bibitem\|\\item' 
+    endif
+else
+    let g:tex_items = ''
+endif
+
+if !exists("g:tex_indent_paretheses")
+    let g:tex_indent_paretheses = 1
+endif
+
+if !exists("g:tex_noindent_env")
+    let g:tex_noindent_env = 'document\|verbatim\|lstlisting'
+endif "}}}
+
+" VIM Setting " {{{
+setlocal autoindent
+setlocal nosmartindent
+setlocal indentexpr=GetTeXIndent()
+setlocal indentkeys&
+exec 'setlocal indentkeys+=[,(,{,),},],\&' . substitute(g:tex_items, '^\|\(\\|\)', ',=', 'g')
+let g:tex_items = '^\s*' . substitute(g:tex_items, '^\(\^\\s\*\)*', '', '')
+" }}}
+
+function! GetTeXIndent() " {{{
+    " Find a non-blank line above the current line.
+    let lnum = prevnonblank(v:lnum - 1)
+
+    " Comment line is not what we need.
+    while lnum != 0 && getline(lnum) =~ '^\s*%'
+        let lnum = prevnonblank(lnum - 1)
+    endwhile
+
+    " At the start of the file use zero indent.
+    if lnum == 0
+        return 0 
+    endif
+
+    let line = substitute(getline(lnum), '%.*', ' ','g')     " last line
+    let cline = substitute(getline(v:lnum), '%.*', ' ', 'g') " current line
+
+    "  We are in verbatim, so do what our user what.
+    if synIDattr(synID(v:lnum, indent(v:lnum), 1), "name") == "texZone"
+        if empty(cline)
+            return indent(lnum)
+        else
+            return indent(v:lnum)
+        end
+    endif
+    
+    " You want to align with "&"
+    if g:tex_indent_and
+        " Align only when current line start with "&"
+        if line =~ '&.*\\\\' && cline =~ '^\s*&'
+            return indent(v:lnum) + stridx(line, "&") - stridx(cline, "&")
+        endif
+
+        " set line & lnum to the line which doesn't contain "&"
+        while lnum != 0 && (stridx(line, "&") != -1 || line =~ '^\s*%')
+            let lnum = prevnonblank(lnum - 1)
+            let line = getline(lnum)
+        endwhile
+    endif
+
+
+    if lnum == 0
+        return 0 
+    endif
+
+    let ind = indent(lnum)
+
+    " New code for comment: retain the indent of current line
+    if cline =~ '^\s*%'
+        return indent(v:lnum)
+    endif
+
+    " Add a 'shiftwidth' after beginning of environments.
+    " Don't add it for \begin{document} and \begin{verbatim}
+    ""if line =~ '^\s*\\begin{\(.*\)}'  && line !~ 'verbatim' 
+    " LH modification : \begin does not always start a line
+    " ZYC modification : \end after \begin won't cause wrong indent anymore
+    if line =~ '\\begin{.*}' && line !~ g:tex_noindent_env
+        let ind = ind + &sw
+
+        if g:tex_indent_items
+            " Add another sw for item-environments
+            if line =~ g:tex_itemize_env
+                let ind = ind + &sw
+            endif
+        endif
+    endif
+
+    " Subtract a 'shiftwidth' when an environment ends
+    if cline =~ '\\end{.*}' && cline !~ g:tex_noindent_env
+
+        if g:tex_indent_items
+            " Remove another sw for item-environments
+            if cline =~ g:tex_itemize_env
+                let ind = ind - &sw
+            endif
+        endif
+
+        let ind = ind - &sw
+    endif
+
+    if g:tex_indent_brace
+        let sum1 = 0
+        for i in range(0, strlen(line)-1)
+            if line[i] == "}" || line[i] == "]" ||
+                        \ strpart(line, i, 7) == '\right)'
+                let sum1 = max([0, sum1-1])
+            endif
+            if line[i] == "{" || line[i] == "[" ||
+                        \ strpart(line, i, 6) == '\left('
+                let sum1 += 1
+            endif
+        endfor
+
+        let sum2 = 0
+        for i in reverse(range(0, strlen(cline)-1))
+            if cline[i] == "{" || cline[i] == "[" ||
+                        \ strpart(cline, i, 6) == '\left('
+                let sum2 = max([0, sum2-1])
+            endif
+            if cline[i] == "}" || cline[i] == "]" ||
+                        \ strpart(cline, i, 7) == '\right)'
+                let sum2 += 1
+            endif
+        endfor
+
+        let ind += (sum1 - sum2) * &sw
+    endif
+
+    if g:tex_indent_paretheses
+    endif
+
+    " Special treatment for 'item'
+    " ----------------------------
+
+    if g:tex_indent_items
+
+        " '\item' or '\bibitem' itself:
+        if cline =~ g:tex_items
+            let ind = ind - &sw
+        endif
+
+        " lines following to '\item' are intented once again:
+        if line =~ g:tex_items
+            let ind = ind + &sw
+        endif
+
+    endif
+
+    return ind
+endfunction "}}}
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=4 textwidth=80:
diff --git a/runtime/indent/treetop.vim b/runtime/indent/treetop.vim
new file mode 100644 (file)
index 0000000..a2af78b
--- /dev/null
@@ -0,0 +1,38 @@
+" Vim indent file
+" Language:         Treetop
+" Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2011-03-14
+
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetTreetopIndent()
+setlocal indentkeys=0{,0},!^F,o,O,=end
+setlocal nosmartindent
+
+if exists("*GetTreetopIndent")
+  finish
+endif
+
+function GetTreetopIndent()
+  let pnum = prevnonblank(v:lnum - 1)
+  if pnum == 0
+    return 0
+  endif
+
+  let ind = indent(pnum)
+  let line = getline(pnum)
+
+  if line =~ '^\s*\%(grammar\|module\|rule\)\>'
+    let ind += &sw
+  endif
+
+  let line = getline(v:lnum)
+  if line =~ '^\s*end\>'
+    let ind -= &sw
+  end
+
+  retur ind
+endfunction
index 74c8c5f..ecca462 100644 (file)
@@ -1,6 +1,6 @@
 " Language:     Verilog HDL
 " Maintainer:  Chih-Tsun Huang <cthuang@larc.ee.nthu.edu.tw>
-" Last Change: Wed Oct 31 16:13:11 CST 2001
+" Last Change: 2011 Dec 10 by Thilo Six
 " URL:         http://larc.ee.nthu.edu.tw/~cthuang/vim/indent/verilog.vim
 "
 " Credits:
@@ -30,7 +30,8 @@ if exists("*GetVerilogIndent")
   finish
 endif
 
-set cpo-=C
+let s:cpo_save = &cpo
+set cpo&vim
 
 function GetVerilogIndent()
 
@@ -216,4 +217,7 @@ function GetVerilogIndent()
   return ind
 endfunction
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:sw=2
index 717857f..3e847b9 100644 (file)
@@ -1,8 +1,8 @@
 " VHDL indent ('93 syntax)
 " Language:    VHDL
 " Maintainer:  Gerald Lai <laigera+vim?gmail.com>
-" Version:     1.56
-" Last Change: 2010 Jun 29
+" Version:     1.58
+" Last Change: 2011 Sep 27
 " URL:         http://www.vim.org/scripts/script.php?script_id=1450
 
 " only load this indent file when no other was loaded
@@ -95,7 +95,7 @@ function GetVHDLindent()
 
   " ****************************************************************************************
   " indent:   align generic variables & port names
-  " keywords: "generic", "map", "port" + "(", provided current line is part of mapping
+  " keywords: "procedure" + name, "generic", "map", "port" + "(", provided current line is part of mapping
   " where:    anywhere in previous 2 lines
   " find following previous non-comment line
   let pn = prevnonblank(prevn - 1)
@@ -104,7 +104,7 @@ function GetVHDLindent()
     let pn = prevnonblank(pn - 1)
     let ps = getline(pn)
   endwhile
-  if (curs =~ '^\s*)' || curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
+  if (curs =~ '^\s*)' || curs =~? '^\s*\%(\<\%(procedure\|generic\|map\|port\)\>.*\)\@<!\w\+\s*\w*\s*\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(procedure\s\+\S\+\|generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(procedure\|generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
     " align closing ")" with opening "("
     if curs =~ '^\s*)'
       return ind2 + stridx(prevs_noi, '(')
@@ -160,12 +160,12 @@ function GetVHDLindent()
         " make sure one of these is true
         " keywords: variable + "<=" without ";" ending
         " where:    start of previous non-comment line
-        " keywords: "generic", "map", "port"
+        " keywords: "procedure", "generic", "map", "port"
         " where:    anywhere in previous non-comment line
         " keyword:  "("
         " where:    start of previous non-comment line
         if m < 3 && ps !~? '^\s*\S\+\s*<=[^;]*'.s:ES
-          if ps =~? s:NC.'\<\%(generic\|map\|port\)\>' || ps =~ '^\s*('
+          if ps =~? s:NC.'\<\%(procedure\|generic\|map\|port\)\>' || ps =~ '^\s*('
             let ind = t
           endif
           break
@@ -207,14 +207,26 @@ function GetVHDLindent()
   " keyword:  "begin"
   " where:    anywhere in current line
   if curs =~? s:NC.'\<begin\>'
-    let ind = ind - &sw
     " find previous opening statement of
     " keywords: "architecture", "block", "entity", "function", "generate", "procedure", "process"
     let s2 = s:NC.s:NE.'\<\%(architecture\|block\|entity\|function\|generate\|procedure\|process\)\>'
-    if (curs !~? s2.'.*'.s:NC.'\<begin\>.*'.s:ES && prevs =~? s2) || m == 1
-      let ind = ind + &sw
+
+    let pn = prevnonblank(curn - 1)
+    let ps = getline(pn)
+    while pn > 0 && (ps =~ '^\s*--' || ps !~? s2)
+      let pn = prevnonblank(pn - 1)
+      let ps = getline(pn)
+
+      if (ps =~? s:NC.'\<begin\>')
+        return indent(pn) - &sw
+      endif
+    endwhile
+
+    if (pn == 0)
+      return ind - &sw
+    else
+      return indent(pn)
     endif
-    return ind
   endif
 
   " indent:   +sw if previous line is previous opening statement
@@ -319,8 +331,13 @@ function GetVHDLindent()
   " indent:   -sw
   " keywords: "else", "elsif", "end" + "block", "for", "function", "generate", "if", "loop", "procedure", "process", "record", "units"
   " where:    start of current line
-  if curs =~? '^\s*\%(else\|elsif\|end\s\+\%(block\|for\|function\|generate\|if\|loop\|procedure\|process\|record\|units\)\)\>'
-    return ind - &sw
+  let s5 = 'block\|for\|function\|generate\|if\|loop\|procedure\|process\|record\|units'
+  if curs =~? '^\s*\%(else\|elsif\|end\s\+\%('.s5.'\)\)\>'
+    if prevs =~? '^\s*\%(elsif\|'.s5.'\)'
+      return ind
+    else
+      return ind - &sw
+    endif
   endif
 
   " indent:   backtrace previous non-comment lines
@@ -395,9 +412,9 @@ function GetVHDLindent()
 
   " ****************************************************************************************
   " indent:   maintain indent of previous opening statement
-  " keywords: without "generic", "map", "port" + ":" but not ":=" + "in", "out", "inout", "buffer", "linkage", variable & ":="
+  " keywords: without "procedure", "generic", "map", "port" + ":" but not ":=" + "in", "out", "inout", "buffer", "linkage", variable & ":="
   " where:    start of current line
-  if curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)'
+  if curs =~? '^\s*\%(\<\%(procedure\|generic\|map\|port\)\>.*\)\@<!\w\+\s*\w*\s*:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)'
     return ind2
   endif
 
index 0a6dbc1..8c21573 100644 (file)
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:    Vim script
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2005 Jul 06
+" Last Change: 2012 Aug 02
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -12,12 +12,26 @@ let b:did_indent = 1
 setlocal indentexpr=GetVimIndent()
 setlocal indentkeys+==end,=else,=cat,=fina,=END,0\\
 
+let b:undo_indent = "setl indentkeys< indentexpr<"
+
 " Only define the function once.
 if exists("*GetVimIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 function GetVimIndent()
+  let ignorecase_save = &ignorecase
+  try
+    let &ignorecase = 0
+    return GetVimIndentIntern()
+  finally
+    let &ignorecase = ignorecase_save
+  endtry
+endfunc
+
+function GetVimIndentIntern()
   " Find a non-blank line above the current line.
   let lnum = prevnonblank(v:lnum - 1)
 
@@ -44,10 +58,18 @@ function GetVimIndent()
     else
       let ind = ind + &sw * 3
     endif
-  elseif getline(lnum) =~ '\(^\||\)\s*\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\%[lly]\|fu\%[nction]\|el\%[seif]\)\>'
-    let ind = ind + &sw
   elseif getline(lnum) =~ '^\s*aug\%[roup]' && getline(lnum) !~ '^\s*aug\%[roup]\s*!\=\s\+END'
     let ind = ind + &sw
+  else
+    let line = getline(lnum)
+    let i = match(line, '\(^\||\)\s*\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\%[lly]\|fu\%[nction]\|el\%[seif]\)\>')
+    if i >= 0
+      let ind += &sw
+      if strpart(line, i, 1) == '|' && has('syntax_items')
+            \ && synIDattr(synID(lnum, i, 1), "name") =~ '\(Comment\|String\)$'
+        let ind -= &sw
+      endif
+    endif
   endif
 
   " If the previous line contains an "end" after a pipe, but not in an ":au"
@@ -71,4 +93,7 @@ function GetVimIndent()
   return ind
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:sw=2
index f7a5341..c812723 100644 (file)
@@ -15,6 +15,8 @@ setlocal nosmartindent
 if exists("*GetXinetdIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 function s:count_braces(lnum, count_open)
   let n_open = 0
@@ -48,3 +50,6 @@ function GetXinetdIndent()
   return indent(pnum) + s:count_braces(pnum, 1) * &sw
         \ - s:count_braces(v:lnum, 0) * &sw
 endfunction
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 4ac35b6..dbe5be5 100644 (file)
@@ -1,6 +1,6 @@
 " Language:    xml
 " Maintainer:  Johannes Zellner <johannes@zellner.org>
-" Last Change: 2009-05-26 00:17:25
+" Last Change: 2012 Jul 25
 " Notes:       1) does not indent pure non-xml code (e.g. embedded scripts)
 "              2) will be confused by unbalanced tags in comments
 "              or CDATA sections.
@@ -12,13 +12,13 @@ if exists("b:did_indent")
     finish
 endif
 let b:did_indent = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " [-- local settings (must come before aborting the script) --]
 setlocal indentexpr=XmlIndentGet(v:lnum,1)
 setlocal indentkeys=o,O,*<Return>,<>>,<<>,/,{,}
 
-set cpo-=C
-
 if !exists('b:xml_indent_open')
     let b:xml_indent_open = '.\{-}<\a'
     " pre tag, e.g. <address>
@@ -31,8 +31,16 @@ if !exists('b:xml_indent_close')
     " let b:xml_indent_close = '.\{-}</\(address\)\@!'
 endif
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " [-- finish, if the function already exists --]
-if exists('*XmlIndentGet') | finish | endif
+if exists('*XmlIndentGet')
+  finish
+endif
+
+let s:keepcpo= &cpo
+set cpo&vim
 
 fun! <SID>XmlIndentWithPattern(line, pat)
     let s = substitute('x'.a:line, a:pat, "\1", 'g')
@@ -93,4 +101,7 @@ fun! XmlIndentGet(lnum, use_syntax_check)
     return ind
 endfun
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:ts=8
diff --git a/runtime/indent/yaml.vim b/runtime/indent/yaml.vim
new file mode 100644 (file)
index 0000000..1d03715
--- /dev/null
@@ -0,0 +1,132 @@
+" Vim indent file
+" Language:         YAML
+" Maintainer:       Nikolai Pavlov <zyx.vim@gmail.com>
+
+" Only load this indent file when no other was loaded.
+if exists('b:did_indent')
+  finish
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetYAMLIndent(v:lnum)
+setlocal indentkeys=!^F,o,O,0#,0},0],<:>,-
+setlocal nosmartindent
+
+let b:undo_indent = 'setlocal indentexpr< indentkeys< smartindent<'
+
+" Only define the function once.
+if exists('*GetYAMLIndent')
+    finish
+endif
+
+if exists('*shiftwidth')
+    let s:shiftwidth = function('shiftwidth')
+else
+    function s:shiftwidth()
+        return &shiftwidth
+    endfunction
+endif
+
+function s:FindPrevLessIndentedLine(lnum, ...)
+    let prevlnum = prevnonblank(a:lnum-1)
+    let curindent = a:0 ? a:1 : indent(a:lnum)
+    while           prevlnum
+                \&&  indent(prevlnum) >=  curindent
+                \&& getline(prevlnum) !~# '^\s*#'
+        let prevlnum = prevnonblank(prevlnum-1)
+    endwhile
+    return prevlnum
+endfunction
+
+function s:FindPrevLEIndentedLineMatchingRegex(lnum, regex)
+    let plilnum = s:FindPrevLessIndentedLine(a:lnum, indent(a:lnum)+1)
+    while plilnum && getline(plilnum) !~# a:regex
+        let plilnum = s:FindPrevLessIndentedLine(plilnum)
+    endwhile
+    return plilnum
+endfunction
+
+let s:mapkeyregex='\v^\s*%(\''%([^'']|'''')*\'''.
+                \        '|\"%([^"\\]|\\.)*\"'.
+                \        '|%(%(\:\ )@!.)*)\:%(\ |$)'
+let s:liststartregex='\v^\s*%(\-%(\ |$))'
+
+function GetYAMLIndent(lnum)
+    if a:lnum == 1 || !prevnonblank(a:lnum-1)
+        return 0
+    endif
+
+    let prevlnum = prevnonblank(a:lnum-1)
+    let previndent = indent(prevlnum)
+
+    let line = getline(a:lnum)
+    if line =~# '^\s*#' && getline(a:lnum-1) =~# '^\s*#'
+        " Comment blocks should have identical indent
+        return previndent
+    elseif line =~# '^\s*[\]}]'
+        " Lines containing only closing braces should have previous indent
+        return indent(s:FindPrevLessIndentedLine(a:lnum))
+    endif
+
+    " Ignore comment lines when calculating indent
+    while getline(prevlnum) =~# '^\s*#'
+        let prevlnum = prevnonblank(prevlnum-1)
+        if !prevlnum
+            return previndent
+        endif
+    endwhile
+
+    let prevline = getline(prevlnum)
+    let previndent = indent(prevlnum)
+
+    " Any examples below assume that shiftwidth=2
+    if prevline =~# '\v[{[:]$|[:-]\ [|>][+\-]?%(\s+\#.*|\s*)$'
+        " Mapping key:
+        "     nested mapping: ...
+        "
+        " - {
+        "     key: [
+        "         list value
+        "     ]
+        " }
+        "
+        " - |-
+        "     Block scalar without indentation indicator
+        return previndent+s:shiftwidth()
+    elseif prevline =~# '\v[:-]\ [|>]%(\d+[+\-]?|[+\-]?\d+)%(\#.*|\s*)$'
+        " - |+2
+        "   block scalar with indentation indicator
+        "#^^ indent+2, not indent+shiftwidth
+        return previndent + str2nr(matchstr(prevline,
+                    \'\v([:-]\ [|>])@<=[+\-]?\d+%([+\-]?%(\s+\#.*|\s*)$)@='))
+    elseif prevline =~# '\v\"%([^"\\]|\\.)*\\$'
+        "    "Multiline string \
+        "     with escaped end"
+        let qidx = match(prevline, '\v\"%([^"\\]|\\.)*\\')
+        return virtcol([prevlnum, qidx+1])
+    elseif line =~# s:liststartregex
+        " List line should have indent equal to previous list line unless it was 
+        " caught by one of the previous rules
+        return indent(s:FindPrevLEIndentedLineMatchingRegex(a:lnum,
+                    \                                       s:liststartregex))
+    elseif line =~# s:mapkeyregex
+        " Same for line containing mapping key
+        return indent(s:FindPrevLEIndentedLineMatchingRegex(a:lnum,
+                    \                                       s:mapkeyregex))
+    elseif prevline =~# '^\s*- '
+        " - List with
+        "   multiline scalar
+        return previndent+2
+    elseif prevline =~# s:mapkeyregex
+        " Mapping with: value
+        "     that is multiline scalar
+        return previndent+s:shiftwidth()
+    endif
+    return previndent
+endfunction
+
+let &cpo = s:save_cpo
diff --git a/runtime/indent/zimbu.vim b/runtime/indent/zimbu.vim
new file mode 100644 (file)
index 0000000..9565b10
--- /dev/null
@@ -0,0 +1,128 @@
+" Vim indent file
+" Language:    Zimbu
+" Maintainer:  Bram Moolenaar <Bram@vim.org>
+" Last Change: 2012 Sep 08
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+   finish
+endif
+let b:did_indent = 1
+
+setlocal ai nolisp nocin
+setlocal indentexpr=GetZimbuIndent(v:lnum)
+setlocal indentkeys=0{,0},!^F,o,O,0=ELSE,0=ELSEIF,0=CASE,0=DEFAULT,0=FINALLY
+
+" We impose recommended defaults: no Tabs, 'shiftwidth' = 2
+setlocal sw=2 et
+
+let b:undo_indent = "setl et< sw< ai< indentkeys< indentexpr="
+
+" Only define the function once.
+if exists("*GetZimbuIndent")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Come here when loading the script the first time.
+
+let s:maxoff = 50      " maximum number of lines to look backwards for ()
+
+func GetZimbuIndent(lnum)
+  let prevLnum = prevnonblank(a:lnum - 1)
+  if prevLnum == 0
+    " This is the first non-empty line, use zero indent.
+    return 0
+  endif
+
+  " Taken from Python indenting:
+  " If the previous line is inside parenthesis, use the indent of the starting
+  " line.
+  " Trick: use the non-existing "dummy" variable to break out of the loop when
+  " going too far back.
+  call cursor(prevLnum, 1)
+  let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW',
+         \ "line('.') < " . (prevLnum - s:maxoff) . " ? dummy :"
+         \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
+         \ . " =~ '\\(Comment\\|String\\|Char\\)$'")
+  if parlnum > 0
+    let plindent = indent(parlnum)
+    let plnumstart = parlnum
+  else
+    let plindent = indent(prevLnum)
+    let plnumstart = prevLnum
+  endif
+
+
+  " When inside parenthesis: If at the first line below the parenthesis add
+  " two 'shiftwidth', otherwise same as previous line.
+  " i = (a
+  "       + b
+  "       + c)
+  call cursor(a:lnum, 1)
+  let p = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW',
+         \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :"
+         \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
+         \ . " =~ '\\(Comment\\|String\\|Char\\)$'")
+  if p > 0
+    if p == prevLnum
+      " When the start is inside parenthesis, only indent one 'shiftwidth'.
+      let pp = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW',
+         \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :"
+         \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
+         \ . " =~ '\\(Comment\\|String\\|Char\\)$'")
+      if pp > 0
+       return indent(prevLnum) + &sw
+      endif
+      return indent(prevLnum) + &sw * 2
+    endif
+    if plnumstart == p
+      return indent(prevLnum)
+    endif
+    return plindent
+  endif
+
+  let prevline = getline(prevLnum)
+  let thisline = getline(a:lnum)
+
+  " If this line is not a comment and the previous one is then move the
+  " previous line further back.
+  if thisline !~ '^\s*#'
+    while prevline =~ '^\s*#'
+      let prevLnum = prevnonblank(prevLnum - 1)
+      if prevLnum == 0
+       " Only comment lines before this, no indent
+       return 0
+      endif
+      let prevline = getline(prevLnum)
+      let plindent = indent(prevLnum)
+    endwhile
+  endif
+
+  if prevline =~ '^\s*\(IF\|\|ELSEIF\|ELSE\|GENERATE_IF\|\|GENERATE_ELSEIF\|GENERATE_ELSE\|WHILE\|REPEAT\|TRY\|CATCH\|FINALLY\|FOR\|DO\|SWITCH\|CASE\|DEFAULT\|FUNC\|VIRTUAL\|ABSTRACT\|DEFINE\|REPLACE\|FINAL\|PROC\|MAIN\|NEW\|ENUM\|CLASS\|INTERFACE\|BITS\|MODULE\|SHARED\)\>'
+    let plindent += &sw
+  endif
+  if thisline =~ '^\s*\(}\|ELSEIF\>\|ELSE\>\|CATCH\|FINALLY\|GENERATE_ELSEIF\>\|GENERATE_ELSE\>\|UNTIL\>\)'
+    let plindent -= &sw
+  endif
+  if thisline =~ '^\s*\(CASE\>\|DEFAULT\>\)' && prevline !~ '^\s*SWITCH\>'
+    let plindent -= &sw
+  endif
+
+  " line up continued comment that started after some code
+  "   String something   # comment comment
+  "                      # comment
+  if a:lnum == prevLnum + 1 && thisline =~ '^\s*#' && prevline !~ '^\s*#'
+    let n = match(prevline, '#')
+    if n > 1
+      let plindent = n
+    endif
+  endif
+
+  return plindent
+endfunc
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/keymap/belarusian-jcuken.vim b/runtime/keymap/belarusian-jcuken.vim
new file mode 100644 (file)
index 0000000..73c84aa
--- /dev/null
@@ -0,0 +1,87 @@
+" Vim Keymap file for Belarusian characters, layout 'jcuken', classical variant
+" Useful mainly with UTF-8, but may work with other encodings.
+
+" Derived From: russian-jcuken.vim
+" Maintainer:   Aliaksei Nestserau <aliaksei@screencustoms.com>
+" Last Changed: 2012 Jul 23
+
+" All characters are given literally, conversion to another encoding (e.g.,
+" UTF-8) should work.
+scriptencoding utf-8
+
+let b:keymap_name = "by"
+
+loadkeymap
+~      Ð      CYRILLIC CAPITAL LETTER IO
+`      Ñ‘      CYRILLIC SMALL LETTER IO
+F      Ð      CYRILLIC CAPITAL LETTER A
+<      Ð‘      CYRILLIC CAPITAL LETTER BE
+D      Ð’      CYRILLIC CAPITAL LETTER VE
+U      Ð“      CYRILLIC CAPITAL LETTER GHE
+L      Ð”      CYRILLIC CAPITAL LETTER DE
+T      Ð•      CYRILLIC CAPITAL LETTER IE
+:      Ð–      CYRILLIC CAPITAL LETTER ZHE
+P      Ð—      CYRILLIC CAPITAL LETTER ZE
+B      Ð†      CYRILLIC CAPITAL LETTER I
+Q      Ð™      CYRILLIC CAPITAL LETTER SHORT I
+R      Ðš      CYRILLIC CAPITAL LETTER KA
+K      Ð›      CYRILLIC CAPITAL LETTER EL
+V      Ðœ      CYRILLIC CAPITAL LETTER EM
+Y      Ð      CYRILLIC CAPITAL LETTER EN
+J      Ðž      CYRILLIC CAPITAL LETTER O
+G      ÐŸ      CYRILLIC CAPITAL LETTER PE
+H      Ð       CYRILLIC CAPITAL LETTER ER
+C      Ð¡      CYRILLIC CAPITAL LETTER ES
+N      Ð¢      CYRILLIC CAPITAL LETTER TE
+E      Ð£      CYRILLIC CAPITAL LETTER U
+A      Ð¤      CYRILLIC CAPITAL LETTER EF
+{      Ð¥      CYRILLIC CAPITAL LETTER HA
+W      Ð¦      CYRILLIC CAPITAL LETTER TSE
+X      Ð§      CYRILLIC CAPITAL LETTER CHE
+I      Ð¨      CYRILLIC CAPITAL LETTER SHA
+O      ÐŽ      CYRILLIC CAPITAL LETTER ASYLLABIC U
+}      '       APOSTROPHE
+S      Ð«      CYRILLIC CAPITAL LETTER YERU
+M      Ð¬      CYRILLIC CAPITAL LETTER SOFT SIGN
+\"     Ð­      CYRILLIC CAPITAL LETTER E
+>      Ð®      CYRILLIC CAPITAL LETTER YU
+Z      Ð¯      CYRILLIC CAPITAL LETTER YA
+f      Ð°      CYRILLIC SMALL LETTER A
+,      Ð±      CYRILLIC SMALL LETTER BE
+d      Ð²      CYRILLIC SMALL LETTER VE
+u      Ð³      CYRILLIC SMALL LETTER GHE
+l      Ð´      CYRILLIC SMALL LETTER DE
+t      Ðµ      CYRILLIC SMALL LETTER IE
+;      Ð¶      CYRILLIC SMALL LETTER ZHE
+p      Ð·      CYRILLIC SMALL LETTER ZE
+b      Ñ–      CYRILLIC SMALL LETTER I
+q      Ð¹      CYRILLIC SMALL LETTER SHORT I
+r      Ðº      CYRILLIC SMALL LETTER KA
+k      Ð»      CYRILLIC SMALL LETTER EL
+v      Ð¼      CYRILLIC SMALL LETTER EM
+y      Ð½      CYRILLIC SMALL LETTER EN
+j      Ð¾      CYRILLIC SMALL LETTER O
+g      Ð¿      CYRILLIC SMALL LETTER PE
+h      Ñ€      CYRILLIC SMALL LETTER ER
+c      Ñ      CYRILLIC SMALL LETTER ES
+n      Ñ‚      CYRILLIC SMALL LETTER TE
+e      Ñƒ      CYRILLIC SMALL LETTER U
+a      Ñ„      CYRILLIC SMALL LETTER EF
+[      Ñ…      CYRILLIC SMALL LETTER HA
+w      Ñ†      CYRILLIC SMALL LETTER TSE
+x      Ñ‡      CYRILLIC SMALL LETTER CHE
+i      Ñˆ      CYRILLIC SMALL LETTER SHA
+o      Ñž      CYRILLIC SMALL LETTER ASYLLABIC U
+]      '       APOSTROPHE
+s      Ñ‹      CYRILLIC SMALL LETTER YERU
+m      ÑŒ      CYRILLIC SMALL LETTER SOFT SIGN
+'      Ñ      CYRILLIC SMALL LETTER E
+.      ÑŽ      CYRILLIC SMALL LETTER YU
+z      Ñ      CYRILLIC SMALL LETTER YA
+@      "
+#      '
+$      *
+%      :
+^      ,
+&      .
+*      ;
index b32e8e9..46331e7 100644 (file)
@@ -1,12 +1,14 @@
 " Menu Translations:   Afrikaas
 " Maintainer:          Danie Roux <droux@tuks.co.za>
-" Last Change:         2003 Mar 30
+" Last Change:         2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -150,3 +152,6 @@ menutrans o&ff\ (this\ file)        &Af\ (die\ le
 menutrans Co&lor\ test         Toets\ die\ &kleure
 menutrans &Highlight\ test     Toets\ die\ verligting
 menutrans &Convert\ to\ HTML   Verwissel\ na\ HTML
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index c78e173..1d77dc9 100644 (file)
@@ -9,6 +9,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252,
 " iso-8859-15 without conversion as well.
@@ -311,3 +313,5 @@ menutrans Config                    Configuraci
 menutrans Set\ '&syntax'\ only         Només\ el\ ressalt\ de\ sintaxi
 menutrans Set\ '&filetype'\ too                Carrega\ també\ els\ plugins
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 193826b..e636a42 100644 (file)
@@ -9,6 +9,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp936
 
@@ -261,3 +263,6 @@ menutrans &Highlight\ test          
 menutrans &Convert\ to\ HTML           Ã—ª»»³É\ HTML(&C)
 menutrans Set\ '&syntax'\ only         Â½Ã¶Ã‰Ã¨Â¶Â¨\ 'syntax'(&S)
 menutrans Set\ '&filetype'\ too                Ã’²É趨\ 'filetype'(&F)
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 60dc2a7..7631e3e 100644 (file)
@@ -1,6 +1,6 @@
 " Menu Translations:   Traditional Chinese
 " Translated By:       Hung-Te Lin     <piaip@csie.ntu.edu.tw>
-" Last Change:         2005/01/28 02:51:38
+" Last Change:         2012 May 01
 
 " {{{ Quit when menu translations have already been done.
 if exists("did_menu_trans")
@@ -8,6 +8,8 @@ if exists("did_menu_trans")
 endif
 let did_menu_trans = 1
 " }}}
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp950
 
@@ -282,4 +284,7 @@ if has("toolbar")
 endif
 " }}}
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:foldmethod=marker:nowrap:foldcolumn=2:foldlevel=1
index a5bc82e..410d548 100644 (file)
@@ -1,30 +1,38 @@
-" Menu Translations:   Czech for ISO-8859-2
-" Maintainer:          Jiri Brezina <brzj@seznam.cz>
-" vim:set foldmethod=marker:
-" $Revision: 1.3 $
-" $Date: 2005/12/19 22:08:24 $
+" Menu Translations:    Czech (ISO-8859-2)
+" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
+" Previous maintainer:  Jiri Brezina
+" Based on:             menu.vim (2012-10-21)
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
-  finish
+   finish
 endif
+
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
-scriptencoding ISO-8859-2
+scriptencoding iso-8859-2
 
 " {{{ File menu
 menutrans &File                                &Soubor
 menutrans &Open\.\.\.<Tab>:e           &Otevøít\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp    Otevøít\ v\ no&vém\ oknì\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew  Otevøít\ tab\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew               &Nový<Tab>:enew
 menutrans &Close<Tab>:close            &Zavøít<Tab>:close
 menutrans &Save<Tab>:w                 &Ulo¾it<Tab>:w
 menutrans Save\ &As\.\.\.<Tab>:sav     Ulo¾it\ &jako\.\.\.<Tab>:sav
-menutrans Split\ &Diff\ with\.\.\.     Rozdìlit\ okno\ -\ &Diff\.\.\.
-menutrans Split\ Patched\ &By\.\.\.    Rozdìlit\ okno\ -\ &Patch\.\.\.
-menutrans &Print                       &Tisk
-menutrans Sa&ve-Exit<Tab>:wqa          U&lo¾it\ -\ Konec<Tab>:wqa
-menutrans E&xit<Tab>:qa                        &Konec<Tab>:qa
+if has("printer") || has("unix")
+   menutrans &Print                    &Tisk
+endif
+menutrans Sa&ve-Exit<Tab>:wqa          U&lo¾it\ a\ ukonèit<Tab>:wqa
+menutrans E&xit<Tab>:qa                        &Ukonèit<Tab>:qa
+
+if has("diff")
+   menutrans Split\ &Diff\ with\.\.\.  Rozdìlit\ okno\ -\ &Diff\.\.\.
+   menutrans Split\ Patched\ &By\.\.\. Rozdìlit\ okno\ -\ &Patch\.\.\.
+endif
 " }}}
 
 " {{{ Edit menu
@@ -37,24 +45,32 @@ menutrans &Copy<Tab>"+y                     &Kop
 menutrans &Paste<Tab>"+gP              V&lo¾it<Tab>"+gP
 menutrans Put\ &Before<Tab>[p          Vlo¾it\ &pøed<Tab>[p
 menutrans Put\ &After<Tab>]p           Vlo¾i&t\ za<Tab>]p
-menutrans &Delete<Tab>x                        &Smazat<Tab>x
+if has("win32") || has("win16")
+   menutrans &Delete<Tab>x                     &Smazat<Tab>x
+endif
 menutrans &Select\ All<Tab>ggVG                Vy&brat\ v¹e<Tab>ggVG
-menutrans &Find\.\.\.                  &Hledat\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\.    &Nahradit\.\.\.
-menutrans Options\.\.\.                        Volb&y\.\.\.
+if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
+   menutrans &Find\.\.\.                       &Hledat\.\.\.
+   menutrans Find\ and\ Rep&lace\.\.\. &Nahradit\.\.\.
+else
+   menutrans Find<Tab>/ &Hledat<Tab>/
+   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
+   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
+endif
 menutrans Settings\ &Window            Nastav&ení\ okna
-       " {{{2 Edit -1
+" {{{2 Edit -1
+menutrans Startup\ &Settings  Poèáteèní\ &nastavení
 menutrans &Global\ Settings                            &Globální\ nastavení
 menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!   &Pøepnout\ zvýraznìní\ vzoru<Tab>:set\ hls!
 menutrans Toggle\ &Ignore-case<Tab>:set\ ic!           Pøepnout\ ignorování\ &VERZÃLEK<Tab>:set\ ic!
 menutrans Toggle\ &Showmatch<Tab>:set\ sm!             Pøepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
 menutrans &Context\ lines                              Zobrazit\ konte&xt\ kurzoru
 menutrans &Virtual\ Edit                               Virtuální\ p&ozice\ kurzoru
-       menutrans Never                                         Nikdy
-       menutrans Block\ Selection                              Výbìr\ Bloku
-       menutrans Insert\ mode                                  Insert\ mód
-       menutrans Block\ and\ Insert                            Blok\ a\ Insert
-       menutrans Always                                        V¾dycky
+menutrans Never                                                Nikdy
+menutrans Block\ Selection                             Výbìr\ Bloku
+menutrans Insert\ mode                                 Insert\ mód
+menutrans Block\ and\ Insert                           Blok\ a\ Insert
+menutrans Always                                       V¾dycky
 menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!          Pøepnout\ Insert\ mó&d<Tab>:set\ im!
 menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!                Pøepnout\ kompatibilní\ re¾im\ s\ 'vi'<Tab>:set\ cp!
 menutrans Search\ &Path\.\.\.                          Nastavit\ &cestu\ k\ prohledávání\.\.\.
@@ -63,9 +79,10 @@ menutrans Toggle\ &Toolbar                           P
 menutrans Toggle\ &Bottom\ Scrollbar                   Pø&epnout\ dolní\ rolovací\ li¹tu
 menutrans Toggle\ &Left\ Scrollbar                     Pøepnout\ &levou\ rolovací\ li¹tu
 menutrans Toggle\ &Right\ Scrollbar                    Pøepnout\ p&ravou\ rolovací\ li¹tu
-       " {{{2 Edit -2
+" {{{2 Edit -2
 menutrans F&ile\ Settings                              Nastavení\ so&uboru
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!       Pøepnout\ Ã¨Ã­slování\ Ã¸Ã¡&dkù<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Pøepnout\ relativní\ Ã¨Ã­slování\ Ã¸Ã¡&dkù<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!          Pøepnout\ &List\ mód<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!          Pøepnout\ zala&mování\ Ã¸Ã¡dkù<Tab>:set\ wrap!
 menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!       Pøepnout\ zl&om\ ve\ slovì<Tab>:set\ lbr!
@@ -76,10 +93,12 @@ menutrans &Shiftwidth                                       Nastav&it\ 
 menutrans Soft\ &Tabstop                               Nastavit\ Soft\ &Tabstop
 menutrans Te&xt\ Width\.\.\.                           Â©Ã­Ã¸ka\ te&xtu\.\.\.
 menutrans &File\ Format\.\.\.                          &Formát\ souboru\.\.\.
-       " {{{2 Edit -3
+" {{{2 Edit -3
 menutrans C&olor\ Scheme               Barevné\ s&chéma
 menutrans &Keymap                      Klávesová\ m&apa
-menutrans Select\ Fo&nt\.\.\.          Vybrat\ pís&mo\.\.\.
+if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
+   menutrans Select\ Fo&nt\.\.\.               Vybrat\ pís&mo\.\.\.
+endif
 " }}}1
 
 " {{{ Programming menu
@@ -88,46 +107,52 @@ menutrans &Jump\ to\ this\ tag<Tab>g^]     &Sko
 menutrans Jump\ &back<Tab>^T           Skoèit\ &zpìt<Tab>^T
 menutrans Build\ &Tags\ File           &Vytvoøit\ soubor\ tagù
 
-menutrans &Spelling                    &Kontrola\ pravopisu
-menutrans &Spell\ Check\ On            Kontrola\ pravopisu\ &zapnuta
-menutrans Spell\ Check\ &Off           Kontrola\ pravopisu\ &vypnuta
-menutrans To\ Next\ error<Tab>]s       &Dal¹í\ chyba<Tab>]s
-menutrans To\ Previous\ error<Tab>[s   &Pøedchozí\ chyba<Tab>[s
-menutrans Suggest\ Corrections<Tab>z?  &Návrh\ oprav<Tab>z?
-menutrans Repeat\ correction<Tab>:spellrepall  Zopakovat\ &opravu<Tab>:spellrepall
-menutrans Set\ language\ to\ "en"      Nastav\ jazyk\ na\ "en"
-menutrans Set\ language\ to\ "en_au"   Nastav\ jazyk\ na\ "en_au"
-menutrans Set\ language\ to\ "en_ca"   Nastav\ jazyk\ na\ "en_ca"
-menutrans Set\ language\ to\ "en_gb"   Nastav\ jazyk\ na\ "en_gb"
-menutrans Set\ language\ to\ "en_nz"   Nastav\ jazyk\ na\ "en_nz"
-menutrans Set\ language\ to\ "en_us"   Nastav\ jazyk\ na\ "en_us"
-menutrans Set\ language\ to\ "cz"      Nastav\ jazyk\ na\ "cz"
-menutrans Set\ language\ to\ "cs_cz"   Nastav\ jazyk\ na\ "cs_cz"
-menutrans &Find\ More\ Languages       Nalézt\ dal¹í\ &jazyky
+if has("spell")
+   menutrans &Spelling                 &Kontrola\ pravopisu
+   menutrans &Spell\ Check\ On         &Zapnout\ kontrolu\ pravopisu
+   menutrans Spell\ Check\ &Off                &Vypnout \kontrolu\ pravopisu
+   menutrans To\ &Next\ error<Tab>]s   &Dal¹í\ chyba<Tab>]s
+   menutrans To\ &Previous\ error<Tab>[s       &Pøedchozí\ chyba<Tab>[s
+   menutrans Suggest\ &Corrections<Tab>z=      &Navrhnout\ opravy<Tab>z=
+   menutrans &Repeat\ correction<Tab>:spellrepall      Zopakovat\ &opravu<Tab>:spellrepall
+   menutrans Set\ language\ to\ "en"   Nastavit\ jazyk\ na\ "en"
+   menutrans Set\ language\ to\ "en_au"        Nastavit\ jazyk\ na\ "en_au"
+   menutrans Set\ language\ to\ "en_ca"        Nastavit\ jazyk\ na\ "en_ca"
+   menutrans Set\ language\ to\ "en_gb"        Nastavit\ jazyk\ na\ "en_gb"
+   menutrans Set\ language\ to\ "en_nz"        Nastavit\ jazyk\ na\ "en_nz"
+   menutrans Set\ language\ to\ "en_us"        Nastavit\ jazyk\ na\ "en_us"
+   menutrans &Find\ More\ Languages    Nalézt\ dal¹í\ &jazyky
+   let g:menutrans_set_lang_to = "Nastavit jazyk na"
+endif
+
+if has("Folding")   
+   menutrans &Folding                  &Skládání
+   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+   menutrans &View\ Cursor\ Line<Tab>zv        Zobrazit\ Ã¸Ã¡dek\ &kurzoru<Tab>zv
+   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx                Zobrazit\ &pouze\ Ã¸Ã¡dek\ kurzoru\ <Tab>zMzx
+   menutrans C&lose\ more\ folds<Tab>zm        Slo¾it\ &jednu\ Ãºroveò\ skladù<Tab>zm
+   menutrans &Close\ all\ folds<Tab>zM Slo¾it\ v¹echny\ sklady<Tab>zM
+   menutrans O&pen\ more\ folds<Tab>zr Pøidat\ jednu\ Ãºroveò\ skladù<Tab>zr
+   menutrans &Open\ all\ folds<Tab>zR  &Otevøít\ v¹echny\ sklady<Tab>zR
+   menutrans Fold\ Met&hod                     &Metoda\ skládání
+   menutrans M&anual                   &Ruènì
+   menutrans I&ndent                   &Odsazení
+   menutrans E&xpression       &Výraz
+   menutrans S&yntax                   &Syntaxe
+   menutrans &Diff                     &Rozdíly
+   menutrans Ma&rker                   &Znaèky
+   menutrans Create\ &Fold<Tab>zf              Vytvoøit\ &sklad<Tab>zf
+   menutrans &Delete\ Fold<Tab>zd              Vymazat\ skla&d<Tab>zd
+   menutrans Delete\ &All\ Folds<Tab>zD        Vymazat\ v¹echny\ sklady<Tab>zD
+   menutrans Fold\ col&umn\ width              Sloupec\ zob&razení\ skladù
+endif
 
-menutrans &Folding                     &Foldy
-menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
-menutrans &View\ Cursor\ Line<Tab>zv   &Zobrazit\ Ã¸Ã¡dek\ kurzoru<Tab>zv
-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx           Zo&brazit\ pouze\ Ã¸Ã¡dek\ kurzoru\ <Tab>zMzx
-menutrans C&lose\ more\ folds<Tab>zm   &Vyjmout\ jednu\ Ãºroveò\ foldù<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM    Zavøí&t\ v¹echny\ foldy<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr    Pøidat\ jedn&u\ Ãºroveò\ foldù<Tab>zr
-menutrans &Open\ all\ folds<Tab>zR     &Otevøít\ v¹echny\ foldy<Tab>zR
-menutrans Fold\ Met&hod                        Metoda\ &skládání
-       "menutrans M&anual                      &Ruènì
-       "menutrans I&ndent                      &Odsazení
-       "menutrans E&xpression                  &Výraz
-       "menutrans S&yntax                      &Syntax
-       "menutrans &Diff                        &Diff
-       "menutrans Ma&rker                      Ma&rker
-menutrans Create\ &Fold<Tab>zf         Vytvoøit\ &fold<Tab>zf
-menutrans &Delete\ Fold<Tab>zd         Vymazat\ fol&d<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD   V&ymazat\ v¹echny\ foldy<Tab>zD
-menutrans Fold\ col&umn\ width         Sloupec\ zob&razení\ foldù
+if has("diff")
+   menutrans &Update                   &Obnovit
+   menutrans &Get\ Block                       &Sejmout\ Blok
+   menutrans &Put\ Block                       &Vlo¾it\ Blok
+endif
 
-menutrans &Update                      &Obnovit
-menutrans &Get\ Block                  &Sejmout\ Blok
-menutrans &Put\ Block                  &Vlo¾it\ Blok
 menutrans &Make<Tab>:make              &Make<Tab>:make
 menutrans &List\ Errors<Tab>:cl                Výpis\ &chyb<Tab>:cl
 menutrans L&ist\ Messages<Tab>:cl!     Výp&is\ zpráv<Tab>:cl!
@@ -140,7 +165,7 @@ menutrans SeT\ Compiler                     Nas&taven
 menutrans &Update<Tab>:cwin            O&bnovit<Tab>:cwin
 menutrans &Open<Tab>:copen             &Otevøít<Tab>:copen
 menutrans &Close<Tab>:cclose           &Zavøít<Tab>:cclose
-menutrans &Set\ Compiler               N&astavit\ kompilátor
+menutrans Se&T\ Compiler               N&astavit\ kompilátor
 
 menutrans &Convert\ to\ HEX<Tab>:%!xxd Pøevést\ do\ Â¹estnáctkového\ formát&u<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r Pø&evést\ zpìt<Tab>:%!xxd\ -r
@@ -168,7 +193,6 @@ menutrans &Delete           Z&ru
 menutrans &Alternate           &Zmìnit
 menutrans &Next                        &Dal¹í
 menutrans &Previous            &Pøedchozí
-menutrans [No\ File]           [®ádný\ soubor]
 " }}}
 
 " {{{ Menu Window
@@ -219,6 +243,8 @@ menutrans &Paste            &Vlo
 menutrans &Delete              &Smazat
 menutrans Select\ Blockwise    Vybrat\ blokovì
 menutrans Select\ &Word                Vybrat\ &slovo
+menutrans Select\ Pa&ragraph Vybrat\ &odstavec
+menutrans Select\ &Sentence   Vybrat\ vì&tu
 menutrans Select\ &Line                Vybrat\ &øádek
 menutrans Select\ &Block       Vybrat\ &blok
 menutrans Select\ &All         Vybrat\ &v¹e
@@ -226,39 +252,57 @@ menutrans Select\ &All            Vybrat\ &v
 
 " {{{ The GUI toolbar
 if has("toolbar")
-  if exists("*Do_toolbar_tmenu")
-    delfun Do_toolbar_tmenu
-  endif
-  fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open         Otevøít soubor
-    tmenu ToolBar.Save         Ulo¾it soubor
-    tmenu ToolBar.SaveAll              Ulo¾it v¹echny soubory
-    tmenu ToolBar.Print                Tisk
-    tmenu ToolBar.Undo         Zpìt
-    tmenu ToolBar.Redo         Zru¹it vrácení
-    tmenu ToolBar.Cut          Vyøíznout
-    tmenu ToolBar.Copy         Kopírovat
-    tmenu ToolBar.Paste                Vlo¾it
-    tmenu ToolBar.Find         Hledat...
-    tmenu ToolBar.FindNext     Hledat dal¹í
-    tmenu ToolBar.FindPrev     Hledat pøedchozí
-    tmenu ToolBar.Replace              Nahradit...
-    if 0       " disabled; These are in the Windows menu
-      tmenu ToolBar.New                Nové okno
-      tmenu ToolBar.WinSplit   Rozdìlit okno
-      tmenu ToolBar.WinMax             Maximalizovat okno
-      tmenu ToolBar.WinMin             Minimalizovat okno
-      tmenu ToolBar.WinClose   Zavøít okno
-    endif
-    tmenu ToolBar.LoadSesn     Naèíst sezení
-    tmenu ToolBar.SaveSesn     Ulo¾it sezení
-    tmenu ToolBar.RunScript    Spustit skript
-    tmenu ToolBar.Make         Spustit make
-    tmenu ToolBar.Shell                Spustit shell
-    tmenu ToolBar.RunCtags     Spustit ctags
-    tmenu ToolBar.TagJump              Skoèit na tag pod kurzorem
-    tmenu ToolBar.Help         Nápovìda
-    tmenu ToolBar.FindHelp     Hledat nápovìdu k...
-  endfun
+   if exists("*Do_toolbar_tmenu")
+      delfun Do_toolbar_tmenu
+   endif
+   fun Do_toolbar_tmenu()
+      tmenu ToolBar.Open               Otevøít soubor
+      tmenu ToolBar.Save               Ulo¾it soubor
+      tmenu ToolBar.SaveAll            Ulo¾it v¹echny soubory
+      if has("printer") || has("unix")
+         tmenu ToolBar.Print           Tisk
+      endif
+      tmenu ToolBar.Undo               Zpìt
+      tmenu ToolBar.Redo               Zru¹it vrácení
+      tmenu ToolBar.Cut                Vyøíznout
+      tmenu ToolBar.Copy               Kopírovat
+      tmenu ToolBar.Paste              Vlo¾it
+      tmenu ToolBar.Find               Hledat...
+      tmenu ToolBar.FindNext   Hledat dal¹í
+      tmenu ToolBar.FindPrev   Hledat pøedchozí
+      tmenu ToolBar.Replace            Nahradit...
+      if 0     " disabled; These are in the Windows menu
+         tmenu ToolBar.New             Nové okno
+         tmenu ToolBar.WinSplit        Rozdìlit okno
+         tmenu ToolBar.WinMax          Maximalizovat okno
+         tmenu ToolBar.WinMin          Minimalizovat okno
+         tmenu ToolBar.WinClose        Zavøít okno
+      endif
+      tmenu ToolBar.LoadSesn   Naèíst sezení
+      tmenu ToolBar.SaveSesn   Ulo¾it sezení
+      tmenu ToolBar.RunScript  Spustit skript
+      tmenu ToolBar.Make               Spustit make
+      tmenu ToolBar.Shell              Spustit shell
+      tmenu ToolBar.RunCtags   Spustit ctags
+      tmenu ToolBar.TagJump            Skoèit na tag pod kurzorem
+      tmenu ToolBar.Help               Nápovìda
+      tmenu ToolBar.FindHelp   Hledat nápovìdu k...
+   endfun
 endif
 " }}}
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[®ádný soubor]"
+let g:menutrans_help_dialog = "Zadejte hledaný pøíkaz nebo slovo:\n\n\tPøidejte i_ pro pøíkazy vkládacího re¾imu (napø. i_CTRL-X)\n\tPøidejte c_ pro pøíkazy pøíkazové Ã¸Ã¡dky (napø. c_<Del>)\n\tPøidejte ' pro jméno volby (napø. 'shiftwidth')"
+let g:menutrans_path_dialog = "Zadejte cesty pro vyhledávání souborù. Jednotlivé cesty oddìlte Ã¨Ã¡rkou"
+let g:menutrans_tags_dialog = "Zadejte jména souborù s tagy. Jména oddìlte Ã¨Ã¡rkami."
+let g:menutrans_textwidth_dialog = "Zadejte délku Ã¸Ã¡dku (0 pro zakázání formátování):"
+let g:menutrans_fileformat_dialog = "Vyberte typ konce Ã¸Ã¡dkù"
+" }}}" 
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+
+
+" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
index efb28a0..3bf608d 100644 (file)
@@ -1,3 +1,3 @@
 " Menu Translations:   Czech
 
-source <sfile>:p:h/menu_czech_czech_republic.1252.vim
+source <sfile>:p:h/menu_czech_czech_republic.ascii.vim
diff --git a/runtime/lang/menu_cs_cz.utf-8.vim b/runtime/lang/menu_cs_cz.utf-8.vim
new file mode 100644 (file)
index 0000000..91a8ecc
--- /dev/null
@@ -0,0 +1,308 @@
+" Menu Translations:    Czech (UTF-8)
+" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
+" Previous maintainer:  Jiri Brezina
+" Based on:             menu.vim (2012-10-21)
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+   finish
+endif
+
+let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
+scriptencoding utf-8
+
+" {{{ File menu
+menutrans &File                                &Soubor
+menutrans &Open\.\.\.<Tab>:e           &Otevřít\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp    Otevřít\ v\ no&vém\ oknÄ›\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew  Otevřít\ tab\.\.\.<Tab>:tabnew
+menutrans &New<Tab>:enew               &Nový<Tab>:enew
+menutrans &Close<Tab>:close            &Zavřít<Tab>:close
+menutrans &Save<Tab>:w                 &Uložit<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav     Uložit\ &jako\.\.\.<Tab>:sav
+if has("printer") || has("unix")
+   menutrans &Print                    &Tisk
+endif
+menutrans Sa&ve-Exit<Tab>:wqa          U&ložit\ a\ ukonÄit<Tab>:wqa
+menutrans E&xit<Tab>:qa                        &UkonÄit<Tab>:qa
+
+if has("diff")
+   menutrans Split\ &Diff\ with\.\.\.  RozdÄ›lit\ okno\ -\ &Diff\.\.\.
+   menutrans Split\ Patched\ &By\.\.\. RozdÄ›lit\ okno\ -\ &Patch\.\.\.
+endif
+" }}}
+
+" {{{ Edit menu
+menutrans &Edit                                Ãšpr&avy
+menutrans &Undo<Tab>u                  &ZpÄ›t<Tab>u
+menutrans &Redo<Tab>^R                 Z&ruÅ¡it\ vrácení<Tab>^R
+menutrans Rep&eat<Tab>\.               &Opakovat<Tab>\.
+menutrans Cu&t<Tab>"+x                 &Vyříznout<Tab>"+x
+menutrans &Copy<Tab>"+y                        &Kopírovat<Tab>"+y
+menutrans &Paste<Tab>"+gP              V&ložit<Tab>"+gP
+menutrans Put\ &Before<Tab>[p          Vložit\ &pÅ™ed<Tab>[p
+menutrans Put\ &After<Tab>]p           Vloži&t\ za<Tab>]p
+if has("win32") || has("win16")
+   menutrans &Delete<Tab>x                     &Smazat<Tab>x
+endif
+menutrans &Select\ All<Tab>ggVG                Vy&brat\ vÅ¡e<Tab>ggVG
+if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
+   menutrans &Find\.\.\.                       &Hledat\.\.\.
+   menutrans Find\ and\ Rep&lace\.\.\. &Nahradit\.\.\.
+else
+   menutrans Find<Tab>/ &Hledat<Tab>/
+   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
+   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
+endif
+menutrans Settings\ &Window            Nastav&ení\ okna
+" {{{2 Edit -1
+menutrans Startup\ &Settings  PoÄáteÄní\ &nastavení
+menutrans &Global\ Settings                            &Globální\ nastavení
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!   &PÅ™epnout\ zvýraznÄ›ní\ vzoru<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!           PÅ™epnout\ ignorování\ &VERZÃLEK<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!             PÅ™epnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
+menutrans &Context\ lines                              Zobrazit\ konte&xt\ kurzoru
+menutrans &Virtual\ Edit                               Virtuální\ p&ozice\ kurzoru
+menutrans Never                                                Nikdy
+menutrans Block\ Selection                             VýbÄ›r\ Bloku
+menutrans Insert\ mode                                 Insert\ mód
+menutrans Block\ and\ Insert                           Blok\ a\ Insert
+menutrans Always                                       Vždycky
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!          PÅ™epnout\ Insert\ mó&d<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!                PÅ™epnout\ kompatibilní\ režim\ s\ 'vi'<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\.                          Nastavit\ &cestu\ k\ prohledávání\.\.\.
+menutrans Ta&g\ Files\.\.\.                            Ta&g\ soubory\.\.\.
+menutrans Toggle\ &Toolbar                             PÅ™epnout\ &Toolbar
+menutrans Toggle\ &Bottom\ Scrollbar                   PÅ™&epnout\ dolní\ rolovací\ liÅ¡tu
+menutrans Toggle\ &Left\ Scrollbar                     PÅ™epnout\ &levou\ rolovací\ liÅ¡tu
+menutrans Toggle\ &Right\ Scrollbar                    PÅ™epnout\ p&ravou\ rolovací\ liÅ¡tu
+" {{{2 Edit -2
+menutrans F&ile\ Settings                              Nastavení\ so&uboru
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!       PÅ™epnout\ Äíslování\ Å™Ã¡&dků<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! PÅ™epnout\ relativní\ Äíslování\ Å™Ã¡&dků<Tab>:set\ rnu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!          PÅ™epnout\ &List\ mód<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!          PÅ™epnout\ zala&mování\ Å™Ã¡dků<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!       PÅ™epnout\ zl&om\ ve\ slovÄ›<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!            PÅ™epnout\ &expand-tab<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!           PÅ™epnout\ &auto-indent<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!          PÅ™epnout\ &C-indenting<Tab>:set\ cin!
+menutrans &Shiftwidth                                  Nastav&it\ Å¡Ã­Å™ku\ od&sazení
+menutrans Soft\ &Tabstop                               Nastavit\ Soft\ &Tabstop
+menutrans Te&xt\ Width\.\.\.                           Å Ã­Å™ka\ te&xtu\.\.\.
+menutrans &File\ Format\.\.\.                          &Formát\ souboru\.\.\.
+" {{{2 Edit -3
+menutrans C&olor\ Scheme               Barevné\ s&chéma
+menutrans &Keymap                      Klávesová\ m&apa
+if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
+   menutrans Select\ Fo&nt\.\.\.               Vybrat\ pís&mo\.\.\.
+endif
+" }}}1
+
+" {{{ Programming menu
+menutrans &Tools                       Nást&roje
+menutrans &Jump\ to\ this\ tag<Tab>g^] &SkoÄit\ na\ tag<Tab>g^]
+menutrans Jump\ &back<Tab>^T           SkoÄit\ &zpÄ›t<Tab>^T
+menutrans Build\ &Tags\ File           &VytvoÅ™it\ soubor\ tagů
+
+if has("spell")
+   menutrans &Spelling                 &Kontrola\ pravopisu
+   menutrans &Spell\ Check\ On         &Zapnout\ kontrolu\ pravopisu
+   menutrans Spell\ Check\ &Off                &Vypnout \kontrolu\ pravopisu
+   menutrans To\ &Next\ error<Tab>]s   &Další\ chyba<Tab>]s
+   menutrans To\ &Previous\ error<Tab>[s       &PÅ™edchozí\ chyba<Tab>[s
+   menutrans Suggest\ &Corrections<Tab>z=      &Navrhnout\ opravy<Tab>z=
+   menutrans &Repeat\ correction<Tab>:spellrepall      Zopakovat\ &opravu<Tab>:spellrepall
+   menutrans Set\ language\ to\ "en"   Nastavit\ jazyk\ na\ "en"
+   menutrans Set\ language\ to\ "en_au"        Nastavit\ jazyk\ na\ "en_au"
+   menutrans Set\ language\ to\ "en_ca"        Nastavit\ jazyk\ na\ "en_ca"
+   menutrans Set\ language\ to\ "en_gb"        Nastavit\ jazyk\ na\ "en_gb"
+   menutrans Set\ language\ to\ "en_nz"        Nastavit\ jazyk\ na\ "en_nz"
+   menutrans Set\ language\ to\ "en_us"        Nastavit\ jazyk\ na\ "en_us"
+   menutrans &Find\ More\ Languages    Nalézt\ další\ &jazyky
+   let g:menutrans_set_lang_to = "Nastavit jazyk na"
+endif
+
+if has("Folding")   
+   menutrans &Folding                  &Skládání
+   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+   menutrans &View\ Cursor\ Line<Tab>zv        Zobrazit\ Å™Ã¡dek\ &kurzoru<Tab>zv
+   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx                Zobrazit\ &pouze\ Å™Ã¡dek\ kurzoru\ <Tab>zMzx
+   menutrans C&lose\ more\ folds<Tab>zm        Složit\ &jednu\ Ãºroveň\ skladů<Tab>zm
+   menutrans &Close\ all\ folds<Tab>zM Složit\ vÅ¡echny\ sklady<Tab>zM
+   menutrans O&pen\ more\ folds<Tab>zr PÅ™idat\ jednu\ Ãºroveň\ skladů<Tab>zr
+   menutrans &Open\ all\ folds<Tab>zR  &Otevřít\ vÅ¡echny\ sklady<Tab>zR
+   menutrans Fold\ Met&hod                     &Metoda\ skládání
+   menutrans M&anual                   &RuÄnÄ›
+   menutrans I&ndent                   &Odsazení
+   menutrans E&xpression       &Výraz
+   menutrans S&yntax                   &Syntaxe
+   menutrans &Diff                     &Rozdíly
+   menutrans Ma&rker                   &ZnaÄky
+   menutrans Create\ &Fold<Tab>zf              VytvoÅ™it\ &sklad<Tab>zf
+   menutrans &Delete\ Fold<Tab>zd              Vymazat\ skla&d<Tab>zd
+   menutrans Delete\ &All\ Folds<Tab>zD        Vymazat\ vÅ¡echny\ sklady<Tab>zD
+   menutrans Fold\ col&umn\ width              Sloupec\ zob&razení\ skladů
+endif
+
+if has("diff")
+   menutrans &Update                   &Obnovit
+   menutrans &Get\ Block                       &Sejmout\ Blok
+   menutrans &Put\ Block                       &Vložit\ Blok
+endif
+
+menutrans &Make<Tab>:make              &Make<Tab>:make
+menutrans &List\ Errors<Tab>:cl                Výpis\ &chyb<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl!     Výp&is\ zpráv<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn         Další\ ch&yba<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp     &PÅ™edchozí\ chyba<Tab>:cp
+menutrans &Older\ List<Tab>:cold       Sta&rší\ seznam<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew       N&ovÄ›jší\ seznam<Tab>:cnew
+menutrans Error\ &Window               Chybové\ o&kno
+menutrans SeT\ Compiler                        Nas&tavení\ kompilátoru
+menutrans &Update<Tab>:cwin            O&bnovit<Tab>:cwin
+menutrans &Open<Tab>:copen             &Otevřít<Tab>:copen
+menutrans &Close<Tab>:cclose           &Zavřít<Tab>:cclose
+menutrans Se&T\ Compiler               N&astavit\ kompilátor
+
+menutrans &Convert\ to\ HEX<Tab>:%!xxd PÅ™evést\ do\ Å¡estnáctkového\ formát&u<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r PÅ™&evést\ zpÄ›t<Tab>:%!xxd\ -r
+" }}}
+
+" {{{ Syntax menu
+menutrans &Syntax              Synta&xe
+menutrans Set\ '&syntax'\ only Nastavit\ pouze\ 'synta&x'
+menutrans Set\ '&filetype'\ too        Nastavit\ také\ '&filetype'
+menutrans &Off                 &Vypnout
+menutrans &Manual              &RuÄnÄ›
+menutrans A&utomatic           A&utomaticky
+menutrans on/off\ for\ &This\ file     &PÅ™epnout\ (pro\ tento\ soubor)
+menutrans o&ff\ (this\ file)   vyp&nout\ (pro\ tento\ soubor)
+menutrans Co&lor\ test         Test\ &barev
+menutrans &Highlight\ test     &Test\ zvýrazňování
+menutrans &Convert\ to\ HTML   PÅ™evést\ &do\ HTML
+menutrans &Show\ filetypes\ in\ menu   &Zobrazit\ výbÄ›r\ možností
+" }}}
+
+" {{{ Menu Buffers
+menutrans &Buffers             &Buffery
+menutrans &Refresh\ menu       &Obnovit\ menu
+menutrans &Delete              Z&ruÅ¡it
+menutrans &Alternate           &ZmÄ›nit
+menutrans &Next                        &Další
+menutrans &Previous            &PÅ™edchozí
+" }}}
+
+" {{{ Menu Window
+menutrans &Window                      &Okna
+menutrans &New<Tab>^Wn                 &Nové<Tab>^Wn
+menutrans S&plit<Tab>^Ws               &RozdÄ›lit<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^       Ro&zdÄ›lit\ na\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv   RozdÄ›lit\ &vertikálnÄ›<Tab>^Wv
+menutrans Split\ File\ E&xplorer       RozdÄ›lit\ -\ File\ E&xplorer
+menutrans Move\ &To                    &PÅ™esun
+menutrans &Top<Tab>^WK                 &Nahoru<Tab>^WK
+menutrans &Bottom<Tab>^WJ              &Dolu<Tab>^WJ
+menutrans &Left\ side<Tab>^WH          &Vlevo<Tab>^WH
+menutrans &Right\ side<Tab>^WL         Vp&ravo<Tab>^WL
+
+menutrans &Close<Tab>^Wc               Zavří&t<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo     Zavřít\ &ostatní<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww                        &Další<Tab>^Ww
+menutrans P&revious<Tab>^WW            &PÅ™edchozí<Tab>^WW
+menutrans &Equal\ Size<Tab>^W=         &Stejná\ výška<Tab>^W=
+menutrans &Max\ Height<Tab>^W_         Maximální\ výš&ka<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_                M&inimální\ výška<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\|         &Maximální\ Å¡Ã­Å™ka<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\|                Minimální\ Å¡Ã­Å™k&a<Tab>^W1\|
+menutrans Rotate\ &Up<Tab>^WR          Rotovat\ na&horu<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr                Rotovat\ &dolů<Tab>^Wr
+
+" {{{ Help menu
+menutrans &Help                        &NápovÄ›da
+menutrans &Overview<Tab><F1>   &PÅ™ehled<Tab><F1>
+menutrans &User\ Manual                &Uživatelský\ Manuál
+menutrans &How-to\ links       Ho&wto
+menutrans &GUI                 &Grafické\ rozhraní
+menutrans &Credits             &AutoÅ™i
+menutrans Co&pying             &LicenÄní\ politika
+menutrans &Sponsor/Register    Sponzorování/&Registrace
+menutrans &Find\.\.\.          &Hledat\.\.\.
+menutrans O&rphans             O&siÅ™elé\ dÄ›ti
+menutrans &Version             &Verze
+menutrans &About               &O\ aplikaci
+" }}}
+
+" {{{ The popup menu
+menutrans &Undo                        &ZpÄ›t
+menutrans Cu&t                 &Vyříznout
+menutrans &Copy                        &Kopírovat
+menutrans &Paste               &Vložit
+menutrans &Delete              &Smazat
+menutrans Select\ Blockwise    Vybrat\ blokovÄ›
+menutrans Select\ &Word                Vybrat\ &slovo
+menutrans Select\ Pa&ragraph Vybrat\ &odstavec
+menutrans Select\ &Sentence   Vybrat\ vÄ›&tu
+menutrans Select\ &Line                Vybrat\ &řádek
+menutrans Select\ &Block       Vybrat\ &blok
+menutrans Select\ &All         Vybrat\ &vÅ¡e
+" }}}
+
+" {{{ The GUI toolbar
+if has("toolbar")
+   if exists("*Do_toolbar_tmenu")
+      delfun Do_toolbar_tmenu
+   endif
+   fun Do_toolbar_tmenu()
+      tmenu ToolBar.Open               Otevřít soubor
+      tmenu ToolBar.Save               Uložit soubor
+      tmenu ToolBar.SaveAll            Uložit vÅ¡echny soubory
+      if has("printer") || has("unix")
+         tmenu ToolBar.Print           Tisk
+      endif
+      tmenu ToolBar.Undo               ZpÄ›t
+      tmenu ToolBar.Redo               ZruÅ¡it vrácení
+      tmenu ToolBar.Cut                Vyříznout
+      tmenu ToolBar.Copy               Kopírovat
+      tmenu ToolBar.Paste              Vložit
+      tmenu ToolBar.Find               Hledat...
+      tmenu ToolBar.FindNext   Hledat další
+      tmenu ToolBar.FindPrev   Hledat pÅ™edchozí
+      tmenu ToolBar.Replace            Nahradit...
+      if 0     " disabled; These are in the Windows menu
+         tmenu ToolBar.New             Nové okno
+         tmenu ToolBar.WinSplit        RozdÄ›lit okno
+         tmenu ToolBar.WinMax          Maximalizovat okno
+         tmenu ToolBar.WinMin          Minimalizovat okno
+         tmenu ToolBar.WinClose        Zavřít okno
+      endif
+      tmenu ToolBar.LoadSesn   NaÄíst sezení
+      tmenu ToolBar.SaveSesn   Uložit sezení
+      tmenu ToolBar.RunScript  Spustit skript
+      tmenu ToolBar.Make               Spustit make
+      tmenu ToolBar.Shell              Spustit shell
+      tmenu ToolBar.RunCtags   Spustit ctags
+      tmenu ToolBar.TagJump            SkoÄit na tag pod kurzorem
+      tmenu ToolBar.Help               NápovÄ›da
+      tmenu ToolBar.FindHelp   Hledat nápovÄ›du k...
+   endfun
+endif
+" }}}
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[Žádný soubor]"
+let g:menutrans_help_dialog = "Zadejte hledaný příkaz nebo slovo:\n\n\tPÅ™idejte i_ pro příkazy vkládacího režimu (napÅ™. i_CTRL-X)\n\tPÅ™idejte c_ pro příkazy příkazové Å™Ã¡dky (napÅ™. c_<Del>)\n\tPÅ™idejte ' pro jméno volby (napÅ™. 'shiftwidth')"
+let g:menutrans_path_dialog = "Zadejte cesty pro vyhledávání souborů. Jednotlivé cesty oddÄ›lte Äárkou"
+let g:menutrans_tags_dialog = "Zadejte jména souborů s tagy. Jména oddÄ›lte Äárkami."
+let g:menutrans_textwidth_dialog = "Zadejte délku Å™Ã¡dku (0 pro zakázání formátování):"
+let g:menutrans_fileformat_dialog = "Vyberte typ konce Å™Ã¡dků"
+" }}}" 
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+
+
+" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
index 4f21e89..f9c85d0 100644 (file)
@@ -1,14 +1,16 @@
-" Menu Translations:   Czech for MS-Windows
-" Maintainer:          Jiri Brezina <brzj@seznam.cz>
-" vim:set foldmethod=marker:
-" $Revision: 1.3 $
-" $Date: 2005/12/19 22:13:30 $
+" Menu Translations:    Czech (CP1250)
+" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
+" Previous maintainer:  Jiri Brezina
+" Based on:             menu.vim (2012-10-21)
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
-  finish
+   finish
 endif
+
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp1250
 
@@ -16,15 +18,21 @@ scriptencoding cp1250
 menutrans &File                                &Soubor
 menutrans &Open\.\.\.<Tab>:e           &Otevøít\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp    Otevøít\ v\ no&vém\ oknì\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew  Otevøít\ tab\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew               &Nový<Tab>:enew
 menutrans &Close<Tab>:close            &Zavøít<Tab>:close
 menutrans &Save<Tab>:w                 &Ulo\9eit<Tab>:w
 menutrans Save\ &As\.\.\.<Tab>:sav     Ulo\9eit\ &jako\.\.\.<Tab>:sav
-menutrans Split\ &Diff\ with\.\.\.     Rozdìlit\ okno\ -\ &Diff\.\.\.
-menutrans Split\ Patched\ &By\.\.\.    Rozdìlit\ okno\ -\ &Patch\.\.\.
-menutrans &Print                       &Tisk
-menutrans Sa&ve-Exit<Tab>:wqa          U&lo\9eit\ -\ Konec<Tab>:wqa
-menutrans E&xit<Tab>:qa                        &Konec<Tab>:qa
+if has("printer") || has("unix")
+   menutrans &Print                    &Tisk
+endif
+menutrans Sa&ve-Exit<Tab>:wqa          U&lo\9eit\ a\ ukonèit<Tab>:wqa
+menutrans E&xit<Tab>:qa                        &Ukonèit<Tab>:qa
+
+if has("diff")
+   menutrans Split\ &Diff\ with\.\.\.  Rozdìlit\ okno\ -\ &Diff\.\.\.
+   menutrans Split\ Patched\ &By\.\.\. Rozdìlit\ okno\ -\ &Patch\.\.\.
+endif
 " }}}
 
 " {{{ Edit menu
@@ -37,24 +45,32 @@ menutrans &Copy<Tab>"+y                     &Kop
 menutrans &Paste<Tab>"+gP              V&lo\9eit<Tab>"+gP
 menutrans Put\ &Before<Tab>[p          Vlo\9eit\ &pøed<Tab>[p
 menutrans Put\ &After<Tab>]p           Vlo\9ei&t\ za<Tab>]p
-menutrans &Delete<Tab>x                        &Smazat<Tab>x
+if has("win32") || has("win16")
+   menutrans &Delete<Tab>x                     &Smazat<Tab>x
+endif
 menutrans &Select\ All<Tab>ggVG                Vy&brat\ v\9ae<Tab>ggVG
-menutrans &Find\.\.\.                  &Hledat\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\.    &Nahradit\.\.\.
-menutrans Options\.\.\.                        Volb&y\.\.\.
+if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
+   menutrans &Find\.\.\.                       &Hledat\.\.\.
+   menutrans Find\ and\ Rep&lace\.\.\. &Nahradit\.\.\.
+else
+   menutrans Find<Tab>/ &Hledat<Tab>/
+   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
+   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
+endif
 menutrans Settings\ &Window            Nastav&ení\ okna
-       " {{{2 Edit -1
+" {{{2 Edit -1
+menutrans Startup\ &Settings  Poèáteèní\ &nastavení
 menutrans &Global\ Settings                            &Globální\ nastavení
 menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!   &Pøepnout\ zvýraznìní\ vzoru<Tab>:set\ hls!
 menutrans Toggle\ &Ignore-case<Tab>:set\ ic!           Pøepnout\ ignorování\ &VERZÃLEK<Tab>:set\ ic!
 menutrans Toggle\ &Showmatch<Tab>:set\ sm!             Pøepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
 menutrans &Context\ lines                              Zobrazit\ konte&xt\ kurzoru
 menutrans &Virtual\ Edit                               Virtuální\ p&ozice\ kurzoru
-       menutrans Never                                         Nikdy
-       menutrans Block\ Selection                              Výbìr\ Bloku
-       menutrans Insert\ mode                                  Insert\ mód
-       menutrans Block\ and\ Insert                            Blok\ a\ Insert
-       menutrans Always                                        V\9edycky
+menutrans Never                                                Nikdy
+menutrans Block\ Selection                             Výbìr\ Bloku
+menutrans Insert\ mode                                 Insert\ mód
+menutrans Block\ and\ Insert                           Blok\ a\ Insert
+menutrans Always                                       V\9edycky
 menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!          Pøepnout\ Insert\ mó&d<Tab>:set\ im!
 menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!                Pøepnout\ kompatibilní\ re\9eim\ s\ 'vi'<Tab>:set\ cp!
 menutrans Search\ &Path\.\.\.                          Nastavit\ &cestu\ k\ prohledávání\.\.\.
@@ -63,9 +79,10 @@ menutrans Toggle\ &Toolbar                           P
 menutrans Toggle\ &Bottom\ Scrollbar                   Pø&epnout\ dolní\ rolovací\ li\9atu
 menutrans Toggle\ &Left\ Scrollbar                     Pøepnout\ &levou\ rolovací\ li\9atu
 menutrans Toggle\ &Right\ Scrollbar                    Pøepnout\ p&ravou\ rolovací\ li\9atu
-       " {{{2 Edit -2
+" {{{2 Edit -2
 menutrans F&ile\ Settings                              Nastavení\ so&uboru
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!       Pøepnout\ Ã¨Ã­slování\ Ã¸Ã¡&dkù<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Pøepnout\ relativní\ Ã¨Ã­slování\ Ã¸Ã¡&dkù<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!          Pøepnout\ &List\ mód<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!          Pøepnout\ zala&mování\ Ã¸Ã¡dkù<Tab>:set\ wrap!
 menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!       Pøepnout\ zl&om\ ve\ slovì<Tab>:set\ lbr!
@@ -76,10 +93,12 @@ menutrans &Shiftwidth                                       Nastav&it\ 
 menutrans Soft\ &Tabstop                               Nastavit\ Soft\ &Tabstop
 menutrans Te&xt\ Width\.\.\.                           \8aíøka\ te&xtu\.\.\.
 menutrans &File\ Format\.\.\.                          &Formát\ souboru\.\.\.
-       " {{{2 Edit -3
+" {{{2 Edit -3
 menutrans C&olor\ Scheme               Barevné\ s&chéma
 menutrans &Keymap                      Klávesová\ m&apa
-menutrans Select\ Fo&nt\.\.\.          Vybrat\ pís&mo\.\.\.
+if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
+   menutrans Select\ Fo&nt\.\.\.               Vybrat\ pís&mo\.\.\.
+endif
 " }}}1
 
 " {{{ Programming menu
@@ -88,46 +107,52 @@ menutrans &Jump\ to\ this\ tag<Tab>g^]     &Sko
 menutrans Jump\ &back<Tab>^T           Skoèit\ &zpìt<Tab>^T
 menutrans Build\ &Tags\ File           &Vytvoøit\ soubor\ tagù
 
-menutrans &Spelling                    &Kontrola\ pravopisu
-menutrans &Spell\ Check\ On            Kontrola\ pravopisu\ &zapnuta
-menutrans Spell\ Check\ &Off           Kontrola\ pravopisu\ &vypnuta
-menutrans To\ Next\ error<Tab>]s       &Dal\9aí\ chyba<Tab>]s
-menutrans To\ Previous\ error<Tab>[s   &Pøedchozí\ chyba<Tab>[s
-menutrans Suggest\ Corrections<Tab>z?  &Návrh\ oprav<Tab>z?
-menutrans Repeat\ correction<Tab>:spellrepall  Zopakovat\ &opravu<Tab>:spellrepall
-menutrans Set\ language\ to\ "en"      Nastav\ jazyk\ na\ "en"
-menutrans Set\ language\ to\ "en_au"   Nastav\ jazyk\ na\ "en_au"
-menutrans Set\ language\ to\ "en_ca"   Nastav\ jazyk\ na\ "en_ca"
-menutrans Set\ language\ to\ "en_gb"   Nastav\ jazyk\ na\ "en_gb"
-menutrans Set\ language\ to\ "en_nz"   Nastav\ jazyk\ na\ "en_nz"
-menutrans Set\ language\ to\ "en_us"   Nastav\ jazyk\ na\ "en_us"
-menutrans Set\ language\ to\ "cz"      Nastav\ jazyk\ na\ "cz"
-menutrans Set\ language\ to\ "cs_cz"   Nastav\ jazyk\ na\ "cs_cz"
-menutrans &Find\ More\ Languages       Nalézt\ dal\9aí\ &jazyky
+if has("spell")
+   menutrans &Spelling                 &Kontrola\ pravopisu
+   menutrans &Spell\ Check\ On         &Zapnout\ kontrolu\ pravopisu
+   menutrans Spell\ Check\ &Off                &Vypnout \kontrolu\ pravopisu
+   menutrans To\ &Next\ error<Tab>]s   &Dal\9aí\ chyba<Tab>]s
+   menutrans To\ &Previous\ error<Tab>[s       &Pøedchozí\ chyba<Tab>[s
+   menutrans Suggest\ &Corrections<Tab>z=      &Navrhnout\ opravy<Tab>z=
+   menutrans &Repeat\ correction<Tab>:spellrepall      Zopakovat\ &opravu<Tab>:spellrepall
+   menutrans Set\ language\ to\ "en"   Nastavit\ jazyk\ na\ "en"
+   menutrans Set\ language\ to\ "en_au"        Nastavit\ jazyk\ na\ "en_au"
+   menutrans Set\ language\ to\ "en_ca"        Nastavit\ jazyk\ na\ "en_ca"
+   menutrans Set\ language\ to\ "en_gb"        Nastavit\ jazyk\ na\ "en_gb"
+   menutrans Set\ language\ to\ "en_nz"        Nastavit\ jazyk\ na\ "en_nz"
+   menutrans Set\ language\ to\ "en_us"        Nastavit\ jazyk\ na\ "en_us"
+   menutrans &Find\ More\ Languages    Nalézt\ dal\9aí\ &jazyky
+   let g:menutrans_set_lang_to = "Nastavit jazyk na"
+endif
+
+if has("Folding")   
+   menutrans &Folding                  &Skládání
+   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+   menutrans &View\ Cursor\ Line<Tab>zv        Zobrazit\ Ã¸Ã¡dek\ &kurzoru<Tab>zv
+   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx                Zobrazit\ &pouze\ Ã¸Ã¡dek\ kurzoru\ <Tab>zMzx
+   menutrans C&lose\ more\ folds<Tab>zm        Slo\9eit\ &jednu\ Ãºroveò\ skladù<Tab>zm
+   menutrans &Close\ all\ folds<Tab>zM Slo\9eit\ v\9aechny\ sklady<Tab>zM
+   menutrans O&pen\ more\ folds<Tab>zr Pøidat\ jednu\ Ãºroveò\ skladù<Tab>zr
+   menutrans &Open\ all\ folds<Tab>zR  &Otevøít\ v\9aechny\ sklady<Tab>zR
+   menutrans Fold\ Met&hod                     &Metoda\ skládání
+   menutrans M&anual                   &Ruènì
+   menutrans I&ndent                   &Odsazení
+   menutrans E&xpression       &Výraz
+   menutrans S&yntax                   &Syntaxe
+   menutrans &Diff                     &Rozdíly
+   menutrans Ma&rker                   &Znaèky
+   menutrans Create\ &Fold<Tab>zf              Vytvoøit\ &sklad<Tab>zf
+   menutrans &Delete\ Fold<Tab>zd              Vymazat\ skla&d<Tab>zd
+   menutrans Delete\ &All\ Folds<Tab>zD        Vymazat\ v\9aechny\ sklady<Tab>zD
+   menutrans Fold\ col&umn\ width              Sloupec\ zob&razení\ skladù
+endif
 
-menutrans &Folding                     &Foldy
-menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
-menutrans &View\ Cursor\ Line<Tab>zv   &Zobrazit\ Ã¸Ã¡dek\ kurzoru<Tab>zv
-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx           Zo&brazit\ pouze\ Ã¸Ã¡dek\ kurzoru\ <Tab>zMzx
-menutrans C&lose\ more\ folds<Tab>zm   &Vyjmout\ jednu\ Ãºroveò\ foldù<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM    Zavøí&t\ v\9aechny\ foldy<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr    Pøidat\ jedn&u\ Ãºroveò\ foldù<Tab>zr
-menutrans &Open\ all\ folds<Tab>zR     &Otevøít\ v\9aechny\ foldy<Tab>zR
-menutrans Fold\ Met&hod                        Metoda\ &skládání
-       "menutrans M&anual                      &Ruènì
-       "menutrans I&ndent                      &Odsazení
-       "menutrans E&xpression                  &Výraz
-       "menutrans S&yntax                      &Syntax
-       "menutrans &Diff                        &Diff
-       "menutrans Ma&rker                      Ma&rker
-menutrans Create\ &Fold<Tab>zf         Vytvoøit\ &fold<Tab>zf
-menutrans &Delete\ Fold<Tab>zd         Vymazat\ fol&d<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD   V&ymazat\ v\9aechny\ foldy<Tab>zD
-menutrans Fold\ col&umn\ width         Sloupec\ zob&razení\ foldù
+if has("diff")
+   menutrans &Update                   &Obnovit
+   menutrans &Get\ Block                       &Sejmout\ Blok
+   menutrans &Put\ Block                       &Vlo\9eit\ Blok
+endif
 
-menutrans &Update                      &Obnovit
-menutrans &Get\ Block                  &Sejmout\ Blok
-menutrans &Put\ Block                  &Vlo\9eit\ Blok
 menutrans &Make<Tab>:make              &Make<Tab>:make
 menutrans &List\ Errors<Tab>:cl                Výpis\ &chyb<Tab>:cl
 menutrans L&ist\ Messages<Tab>:cl!     Výp&is\ zpráv<Tab>:cl!
@@ -140,7 +165,7 @@ menutrans SeT\ Compiler                     Nas&taven
 menutrans &Update<Tab>:cwin            O&bnovit<Tab>:cwin
 menutrans &Open<Tab>:copen             &Otevøít<Tab>:copen
 menutrans &Close<Tab>:cclose           &Zavøít<Tab>:cclose
-menutrans &Set\ Compiler               N&astavit\ kompilátor
+menutrans Se&T\ Compiler               N&astavit\ kompilátor
 
 menutrans &Convert\ to\ HEX<Tab>:%!xxd Pøevést\ do\ \9aestnáctkového\ formát&u<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r Pø&evést\ zpìt<Tab>:%!xxd\ -r
@@ -168,7 +193,6 @@ menutrans &Delete           Z&ru
 menutrans &Alternate           &Zmìnit
 menutrans &Next                        &Dal\9aí
 menutrans &Previous            &Pøedchozí
-menutrans [No\ File]           [\8eádný\ soubor]
 " }}}
 
 " {{{ Menu Window
@@ -219,6 +243,8 @@ menutrans &Paste            &Vlo
 menutrans &Delete              &Smazat
 menutrans Select\ Blockwise    Vybrat\ blokovì
 menutrans Select\ &Word                Vybrat\ &slovo
+menutrans Select\ Pa&ragraph Vybrat\ &odstavec
+menutrans Select\ &Sentence   Vybrat\ vì&tu
 menutrans Select\ &Line                Vybrat\ &øádek
 menutrans Select\ &Block       Vybrat\ &blok
 menutrans Select\ &All         Vybrat\ &v\9ae
@@ -226,39 +252,57 @@ menutrans Select\ &All            Vybrat\ &v
 
 " {{{ The GUI toolbar
 if has("toolbar")
-  if exists("*Do_toolbar_tmenu")
-    delfun Do_toolbar_tmenu
-  endif
-  fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open         Otevøít soubor
-    tmenu ToolBar.Save         Ulo\9eit soubor
-    tmenu ToolBar.SaveAll              Ulo\9eit v\9aechny soubory
-    tmenu ToolBar.Print                Tisk
-    tmenu ToolBar.Undo         Zpìt
-    tmenu ToolBar.Redo         Zru\9ait vrácení
-    tmenu ToolBar.Cut          Vyøíznout
-    tmenu ToolBar.Copy         Kopírovat
-    tmenu ToolBar.Paste                Vlo\9eit
-    tmenu ToolBar.Find         Hledat...
-    tmenu ToolBar.FindNext     Hledat dal\9aí
-    tmenu ToolBar.FindPrev     Hledat pøedchozí
-    tmenu ToolBar.Replace              Nahradit...
-    if 0       " disabled; These are in the Windows menu
-      tmenu ToolBar.New                Nové okno
-      tmenu ToolBar.WinSplit   Rozdìlit okno
-      tmenu ToolBar.WinMax             Maximalizovat okno
-      tmenu ToolBar.WinMin             Minimalizovat okno
-      tmenu ToolBar.WinClose   Zavøít okno
-    endif
-    tmenu ToolBar.LoadSesn     Naèíst sezení
-    tmenu ToolBar.SaveSesn     Ulo\9eit sezení
-    tmenu ToolBar.RunScript    Spustit skript
-    tmenu ToolBar.Make         Spustit make
-    tmenu ToolBar.Shell                Spustit shell
-    tmenu ToolBar.RunCtags     Spustit ctags
-    tmenu ToolBar.TagJump              Skoèit na tag pod kurzorem
-    tmenu ToolBar.Help         Nápovìda
-    tmenu ToolBar.FindHelp     Hledat nápovìdu k...
-  endfun
+   if exists("*Do_toolbar_tmenu")
+      delfun Do_toolbar_tmenu
+   endif
+   fun Do_toolbar_tmenu()
+      tmenu ToolBar.Open               Otevøít soubor
+      tmenu ToolBar.Save               Ulo\9eit soubor
+      tmenu ToolBar.SaveAll            Ulo\9eit v\9aechny soubory
+      if has("printer") || has("unix")
+         tmenu ToolBar.Print           Tisk
+      endif
+      tmenu ToolBar.Undo               Zpìt
+      tmenu ToolBar.Redo               Zru\9ait vrácení
+      tmenu ToolBar.Cut                Vyøíznout
+      tmenu ToolBar.Copy               Kopírovat
+      tmenu ToolBar.Paste              Vlo\9eit
+      tmenu ToolBar.Find               Hledat...
+      tmenu ToolBar.FindNext   Hledat dal\9aí
+      tmenu ToolBar.FindPrev   Hledat pøedchozí
+      tmenu ToolBar.Replace            Nahradit...
+      if 0     " disabled; These are in the Windows menu
+         tmenu ToolBar.New             Nové okno
+         tmenu ToolBar.WinSplit        Rozdìlit okno
+         tmenu ToolBar.WinMax          Maximalizovat okno
+         tmenu ToolBar.WinMin          Minimalizovat okno
+         tmenu ToolBar.WinClose        Zavøít okno
+      endif
+      tmenu ToolBar.LoadSesn   Naèíst sezení
+      tmenu ToolBar.SaveSesn   Ulo\9eit sezení
+      tmenu ToolBar.RunScript  Spustit skript
+      tmenu ToolBar.Make               Spustit make
+      tmenu ToolBar.Shell              Spustit shell
+      tmenu ToolBar.RunCtags   Spustit ctags
+      tmenu ToolBar.TagJump            Skoèit na tag pod kurzorem
+      tmenu ToolBar.Help               Nápovìda
+      tmenu ToolBar.FindHelp   Hledat nápovìdu k...
+   endfun
 endif
 " }}}
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[\8eádný soubor]"
+let g:menutrans_help_dialog = "Zadejte hledaný pøíkaz nebo slovo:\n\n\tPøidejte i_ pro pøíkazy vkládacího re\9eimu (napø. i_CTRL-X)\n\tPøidejte c_ pro pøíkazy pøíkazové Ã¸Ã¡dky (napø. c_<Del>)\n\tPøidejte ' pro jméno volby (napø. 'shiftwidth')"
+let g:menutrans_path_dialog = "Zadejte cesty pro vyhledávání souborù. Jednotlivé cesty oddìlte Ã¨Ã¡rkou"
+let g:menutrans_tags_dialog = "Zadejte jména souborù s tagy. Jména oddìlte Ã¨Ã¡rkami."
+let g:menutrans_textwidth_dialog = "Zadejte délku Ã¸Ã¡dku (0 pro zakázání formátování):"
+let g:menutrans_fileformat_dialog = "Vyberte typ konce Ã¸Ã¡dkù"
+" }}}" 
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+
+
+" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
index f2faec9..1c4fb3e 100644 (file)
@@ -1,30 +1,38 @@
-" Menu Translations:   Czech for systems without localization
-" Maintainer:          Jiri Brezina <brzj@seznam.cz>
-" vim:set foldmethod=marker:
-" $Revision: 1.3 $
-" $Date: 2005/12/19 22:06:56 $
+" Menu Translations:    Czech (latin1 - w/o diacritics)
+" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
+" Previous maintainer:  Jiri Brezina
+" Based on:             menu.vim (2012-10-21)
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
-  finish
+   finish
 endif
-let did_menu_trans = 1
 
+let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
+scriptencoding latin1
 
 " {{{ File menu
 menutrans &File                                &Soubor
 menutrans &Open\.\.\.<Tab>:e           &Otevrit\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp    Otevrit\ v\ no&vem\ okne\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew  Otevrit\ tab\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew               &Novy<Tab>:enew
 menutrans &Close<Tab>:close            &Zavrit<Tab>:close
 menutrans &Save<Tab>:w                 &Ulozit<Tab>:w
 menutrans Save\ &As\.\.\.<Tab>:sav     Ulozit\ &jako\.\.\.<Tab>:sav
-menutrans Split\ &Diff\ with\.\.\.     Rozdelit\ okno\ -\ &Diff\.\.\.
-menutrans Split\ Patched\ &By\.\.\.    Rozdelit\ okno\ -\ &Patch\.\.\.
-menutrans &Print                       &Tisk
-menutrans Sa&ve-Exit<Tab>:wqa          U&lozit\ -\ Konec<Tab>:wqa
-menutrans E&xit<Tab>:qa                        &Konec<Tab>:qa
+if has("printer") || has("unix")
+   menutrans &Print                    &Tisk
+endif
+menutrans Sa&ve-Exit<Tab>:wqa          U&lozit\ a\ ukoncit<Tab>:wqa
+menutrans E&xit<Tab>:qa                        &Ukoncit<Tab>:qa
+
+if has("diff")
+   menutrans Split\ &Diff\ with\.\.\.  Rozdelit\ okno\ -\ &Diff\.\.\.
+   menutrans Split\ Patched\ &By\.\.\. Rozdelit\ okno\ -\ &Patch\.\.\.
+endif
 " }}}
 
 " {{{ Edit menu
@@ -37,24 +45,32 @@ menutrans &Copy<Tab>"+y                     &Kopirovat<Tab>"+y
 menutrans &Paste<Tab>"+gP              V&lozit<Tab>"+gP
 menutrans Put\ &Before<Tab>[p          Vlozit\ &pred<Tab>[p
 menutrans Put\ &After<Tab>]p           Vlozi&t\ za<Tab>]p
-menutrans &Delete<Tab>x                        &Smazat<Tab>x
+if has("win32") || has("win16")
+   menutrans &Delete<Tab>x                     &Smazat<Tab>x
+endif
 menutrans &Select\ All<Tab>ggVG                Vy&brat\ vse<Tab>ggVG
-menutrans &Find\.\.\.                  &Hledat\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\.    &Nahradit\.\.\.
-menutrans Options\.\.\.                        Volb&y\.\.\.
+if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
+   menutrans &Find\.\.\.                       &Hledat\.\.\.
+   menutrans Find\ and\ Rep&lace\.\.\. &Nahradit\.\.\.
+else
+   menutrans Find<Tab>/ &Hledat<Tab>/
+   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
+   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
+endif
 menutrans Settings\ &Window            Nastav&eni\ okna
-       " {{{2 Edit -1
+" {{{2 Edit -1
+menutrans Startup\ &Settings  Pocatecni\ &nastaveni
 menutrans &Global\ Settings                            &Globalni\ nastaveni
 menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!   &Prepnout\ zvyrazneni\ vzoru<Tab>:set\ hls!
 menutrans Toggle\ &Ignore-case<Tab>:set\ ic!           Prepnout\ ignorovani\ &VERZALEK<Tab>:set\ ic!
 menutrans Toggle\ &Showmatch<Tab>:set\ sm!             Prepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
 menutrans &Context\ lines                              Zobrazit\ konte&xt\ kurzoru
 menutrans &Virtual\ Edit                               Virtualni\ p&ozice\ kurzoru
-       menutrans Never                                         Nikdy
-       menutrans Block\ Selection                              Vyber\ Bloku
-       menutrans Insert\ mode                                  Insert\ mod
-       menutrans Block\ and\ Insert                            Blok\ a\ Insert
-       menutrans Always                                        Vzdycky
+menutrans Never                                                Nikdy
+menutrans Block\ Selection                             Vyber\ Bloku
+menutrans Insert\ mode                                 Insert\ mod
+menutrans Block\ and\ Insert                           Blok\ a\ Insert
+menutrans Always                                       Vzdycky
 menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!          Prepnout\ Insert\ mo&d<Tab>:set\ im!
 menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!                Prepnout\ kompatibilni\ rezim\ s\ 'vi'<Tab>:set\ cp!
 menutrans Search\ &Path\.\.\.                          Nastavit\ &cestu\ k\ prohledavani\.\.\.
@@ -63,9 +79,10 @@ menutrans Toggle\ &Toolbar                           Prepnout\ &Toolbar
 menutrans Toggle\ &Bottom\ Scrollbar                   Pr&epnout\ dolni\ rolovaci\ listu
 menutrans Toggle\ &Left\ Scrollbar                     Prepnout\ &levou\ rolovaci\ listu
 menutrans Toggle\ &Right\ Scrollbar                    Prepnout\ p&ravou\ rolovaci\ listu
-       " {{{2 Edit -2
+" {{{2 Edit -2
 menutrans F&ile\ Settings                              Nastaveni\ so&uboru
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!       Prepnout\ cislovani\ ra&dku<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Prepnout\ relativni\ cislovani\ ra&dku<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!          Prepnout\ &List\ mod<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!          Prepnout\ zala&movani\ radku<Tab>:set\ wrap!
 menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!       Prepnout\ zl&om\ ve\ slove<Tab>:set\ lbr!
@@ -76,10 +93,12 @@ menutrans &Shiftwidth                                       Nastav&it\ sirku\ od&sazeni
 menutrans Soft\ &Tabstop                               Nastavit\ Soft\ &Tabstop
 menutrans Te&xt\ Width\.\.\.                           Sirka\ te&xtu\.\.\.
 menutrans &File\ Format\.\.\.                          &Format\ souboru\.\.\.
-       " {{{2 Edit -3
+" {{{2 Edit -3
 menutrans C&olor\ Scheme               Barevne\ s&chema
 menutrans &Keymap                      Klavesova\ m&apa
-menutrans Select\ Fo&nt\.\.\.          Vybrat\ pis&mo\.\.\.
+if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
+   menutrans Select\ Fo&nt\.\.\.               Vybrat\ pis&mo\.\.\.
+endif
 " }}}1
 
 " {{{ Programming menu
@@ -88,46 +107,52 @@ menutrans &Jump\ to\ this\ tag<Tab>g^]     &Skocit\ na\ tag<Tab>g^]
 menutrans Jump\ &back<Tab>^T           Skocit\ &zpet<Tab>^T
 menutrans Build\ &Tags\ File           &Vytvorit\ soubor\ tagu
 
-menutrans &Spelling                    &Kontrola\ pravopisu
-menutrans &Spell\ Check\ On            Kontrola\ pravopisu\ &zapnuta
-menutrans Spell\ Check\ &Off           Kontrola\ pravopisu\ &vypnuta
-menutrans To\ Next\ error<Tab>]s       &Dalsi\ chyba<Tab>]s
-menutrans To\ Previous\ error<Tab>[s   &Predchozi\ chyba<Tab>[s
-menutrans Suggest\ Corrections<Tab>z?  &Navrh\ oprav<Tab>z?
-menutrans Repeat\ correction<Tab>:spellrepall  Zopakovat\ &opravu<Tab>:spellrepall
-menutrans Set\ language\ to\ "en"      Nastav\ jazyk\ na\ "en"
-menutrans Set\ language\ to\ "en_au"   Nastav\ jazyk\ na\ "en_au"
-menutrans Set\ language\ to\ "en_ca"   Nastav\ jazyk\ na\ "en_ca"
-menutrans Set\ language\ to\ "en_gb"   Nastav\ jazyk\ na\ "en_gb"
-menutrans Set\ language\ to\ "en_nz"   Nastav\ jazyk\ na\ "en_nz"
-menutrans Set\ language\ to\ "en_us"   Nastav\ jazyk\ na\ "en_us"
-menutrans Set\ language\ to\ "cz"      Nastav\ jazyk\ na\ "cz"
-menutrans Set\ language\ to\ "cs_cz"   Nastav\ jazyk\ na\ "cs_cz"
-menutrans &Find\ More\ Languages       Nalezt\ dalsi\ &jazyky
+if has("spell")
+   menutrans &Spelling                 &Kontrola\ pravopisu
+   menutrans &Spell\ Check\ On         &Zapnout\ kontrolu\ pravopisu
+   menutrans Spell\ Check\ &Off                &Vypnout \kontrolu\ pravopisu
+   menutrans To\ &Next\ error<Tab>]s   &Dalsi\ chyba<Tab>]s
+   menutrans To\ &Previous\ error<Tab>[s       &Predchozi\ chyba<Tab>[s
+   menutrans Suggest\ &Corrections<Tab>z=      &Navrhnout\ opravy<Tab>z=
+   menutrans &Repeat\ correction<Tab>:spellrepall      Zopakovat\ &opravu<Tab>:spellrepall
+   menutrans Set\ language\ to\ "en"   Nastavit\ jazyk\ na\ "en"
+   menutrans Set\ language\ to\ "en_au"        Nastavit\ jazyk\ na\ "en_au"
+   menutrans Set\ language\ to\ "en_ca"        Nastavit\ jazyk\ na\ "en_ca"
+   menutrans Set\ language\ to\ "en_gb"        Nastavit\ jazyk\ na\ "en_gb"
+   menutrans Set\ language\ to\ "en_nz"        Nastavit\ jazyk\ na\ "en_nz"
+   menutrans Set\ language\ to\ "en_us"        Nastavit\ jazyk\ na\ "en_us"
+   menutrans &Find\ More\ Languages    Nalezt\ dalsi\ &jazyky
+   let g:menutrans_set_lang_to = "Nastavit jazyk na"
+endif
 
-menutrans &Folding                     &Foldy
-menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
-menutrans &View\ Cursor\ Line<Tab>zv   &Zobrazit\ radek\ kurzoru<Tab>zv
-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx           Zo&brazit\ pouze\ radek\ kurzoru\ <Tab>zMzx
-menutrans C&lose\ more\ folds<Tab>zm   &Vyjmout\ jednu\ uroven\ foldu<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM    Zavri&t\ vsechny\ foldy<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr    Pridat\ jedn&u\ uroven\ foldu<Tab>zr
-menutrans &Open\ all\ folds<Tab>zR     &Otevrit\ vsechny\ foldy<Tab>zR
-menutrans Fold\ Met&hod                        Metoda\ &skladani
-       "menutrans M&anual                      &Rucne
-       "menutrans I&ndent                      &Odsazeni
-       "menutrans E&xpression                  &Vyraz
-       "menutrans S&yntax                      &Syntax
-       "menutrans &Diff                        &Diff
-       "menutrans Ma&rker                      Ma&rker
-menutrans Create\ &Fold<Tab>zf         Vytvorit\ &fold<Tab>zf
-menutrans &Delete\ Fold<Tab>zd         Vymazat\ fol&d<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD   V&ymazat\ vsechny\ foldy<Tab>zD
-menutrans Fold\ col&umn\ width         Sloupec\ zob&razeni\ foldu
+if has("Folding")   
+   menutrans &Folding                  &Skladani
+   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+   menutrans &View\ Cursor\ Line<Tab>zv        Zobrazit\ radek\ &kurzoru<Tab>zv
+   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx                Zobrazit\ &pouze\ radek\ kurzoru\ <Tab>zMzx
+   menutrans C&lose\ more\ folds<Tab>zm        Slozit\ &jednu\ uroven\ skladu<Tab>zm
+   menutrans &Close\ all\ folds<Tab>zM Slozit\ vsechny\ sklady<Tab>zM
+   menutrans O&pen\ more\ folds<Tab>zr Pridat\ jednu\ uroven\ skladu<Tab>zr
+   menutrans &Open\ all\ folds<Tab>zR  &Otevrit\ vsechny\ sklady<Tab>zR
+   menutrans Fold\ Met&hod                     &Metoda\ skladani
+   menutrans M&anual                   &Rucne
+   menutrans I&ndent                   &Odsazeni
+   menutrans E&xpression       &Vyraz
+   menutrans S&yntax                   &Syntaxe
+   menutrans &Diff                     &Rozdily
+   menutrans Ma&rker                   &Znacky
+   menutrans Create\ &Fold<Tab>zf              Vytvorit\ &sklad<Tab>zf
+   menutrans &Delete\ Fold<Tab>zd              Vymazat\ skla&d<Tab>zd
+   menutrans Delete\ &All\ Folds<Tab>zD        Vymazat\ vsechny\ sklady<Tab>zD
+   menutrans Fold\ col&umn\ width              Sloupec\ zob&razeni\ skladu
+endif
+
+if has("diff")
+   menutrans &Update                   &Obnovit
+   menutrans &Get\ Block                       &Sejmout\ Blok
+   menutrans &Put\ Block                       &Vlozit\ Blok
+endif
 
-menutrans &Update                      &Obnovit
-menutrans &Get\ Block                  &Sejmout\ Blok
-menutrans &Put\ Block                  &Vlozit\ Blok
 menutrans &Make<Tab>:make              &Make<Tab>:make
 menutrans &List\ Errors<Tab>:cl                Vypis\ &chyb<Tab>:cl
 menutrans L&ist\ Messages<Tab>:cl!     Vyp&is\ zprav<Tab>:cl!
@@ -140,7 +165,7 @@ menutrans SeT\ Compiler                     Nas&taveni\ kompilatoru
 menutrans &Update<Tab>:cwin            O&bnovit<Tab>:cwin
 menutrans &Open<Tab>:copen             &Otevrit<Tab>:copen
 menutrans &Close<Tab>:cclose           &Zavrit<Tab>:cclose
-menutrans &Set\ Compiler               N&astavit\ kompilator
+menutrans Se&T\ Compiler               N&astavit\ kompilator
 
 menutrans &Convert\ to\ HEX<Tab>:%!xxd Prevest\ do\ sestnactkoveho\ format&u<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r Pr&evest\ zpet<Tab>:%!xxd\ -r
@@ -168,7 +193,6 @@ menutrans &Delete           Z&rusit
 menutrans &Alternate           &Zmenit
 menutrans &Next                        &Dalsi
 menutrans &Previous            &Predchozi
-menutrans [No\ File]           [Zadny\ soubor]
 " }}}
 
 " {{{ Menu Window
@@ -219,6 +243,8 @@ menutrans &Paste            &Vlozit
 menutrans &Delete              &Smazat
 menutrans Select\ Blockwise    Vybrat\ blokove
 menutrans Select\ &Word                Vybrat\ &slovo
+menutrans Select\ Pa&ragraph Vybrat\ &odstavec
+menutrans Select\ &Sentence   Vybrat\ ve&tu
 menutrans Select\ &Line                Vybrat\ &radek
 menutrans Select\ &Block       Vybrat\ &blok
 menutrans Select\ &All         Vybrat\ &vse
@@ -226,39 +252,57 @@ menutrans Select\ &All            Vybrat\ &vse
 
 " {{{ The GUI toolbar
 if has("toolbar")
-  if exists("*Do_toolbar_tmenu")
-    delfun Do_toolbar_tmenu
-  endif
-  fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open         Otevrit soubor
-    tmenu ToolBar.Save         Ulozit soubor
-    tmenu ToolBar.SaveAll              Ulozit vsechny soubory
-    tmenu ToolBar.Print                Tisk
-    tmenu ToolBar.Undo         Zpet
-    tmenu ToolBar.Redo         Zrusit vraceni
-    tmenu ToolBar.Cut          Vyriznout
-    tmenu ToolBar.Copy         Kopirovat
-    tmenu ToolBar.Paste                Vlozit
-    tmenu ToolBar.Find         Hledat...
-    tmenu ToolBar.FindNext     Hledat dalsi
-    tmenu ToolBar.FindPrev     Hledat predchozi
-    tmenu ToolBar.Replace              Nahradit...
-    if 0       " disabled; These are in the Windows menu
-      tmenu ToolBar.New                Nove okno
-      tmenu ToolBar.WinSplit   Rozdelit okno
-      tmenu ToolBar.WinMax             Maximalizovat okno
-      tmenu ToolBar.WinMin             Minimalizovat okno
-      tmenu ToolBar.WinClose   Zavrit okno
-    endif
-    tmenu ToolBar.LoadSesn     Nacist sezeni
-    tmenu ToolBar.SaveSesn     Ulozit sezeni
-    tmenu ToolBar.RunScript    Spustit skript
-    tmenu ToolBar.Make         Spustit make
-    tmenu ToolBar.Shell                Spustit shell
-    tmenu ToolBar.RunCtags     Spustit ctags
-    tmenu ToolBar.TagJump              Skocit na tag pod kurzorem
-    tmenu ToolBar.Help         Napoveda
-    tmenu ToolBar.FindHelp     Hledat napovedu k...
-  endfun
+   if exists("*Do_toolbar_tmenu")
+      delfun Do_toolbar_tmenu
+   endif
+   fun Do_toolbar_tmenu()
+      tmenu ToolBar.Open               Otevrit soubor
+      tmenu ToolBar.Save               Ulozit soubor
+      tmenu ToolBar.SaveAll            Ulozit vsechny soubory
+      if has("printer") || has("unix")
+         tmenu ToolBar.Print           Tisk
+      endif
+      tmenu ToolBar.Undo               Zpet
+      tmenu ToolBar.Redo               Zrusit vraceni
+      tmenu ToolBar.Cut                Vyriznout
+      tmenu ToolBar.Copy               Kopirovat
+      tmenu ToolBar.Paste              Vlozit
+      tmenu ToolBar.Find               Hledat...
+      tmenu ToolBar.FindNext   Hledat dalsi
+      tmenu ToolBar.FindPrev   Hledat predchozi
+      tmenu ToolBar.Replace            Nahradit...
+      if 0     " disabled; These are in the Windows menu
+         tmenu ToolBar.New             Nove okno
+         tmenu ToolBar.WinSplit        Rozdelit okno
+         tmenu ToolBar.WinMax          Maximalizovat okno
+         tmenu ToolBar.WinMin          Minimalizovat okno
+         tmenu ToolBar.WinClose        Zavrit okno
+      endif
+      tmenu ToolBar.LoadSesn   Nacist sezeni
+      tmenu ToolBar.SaveSesn   Ulozit sezeni
+      tmenu ToolBar.RunScript  Spustit skript
+      tmenu ToolBar.Make               Spustit make
+      tmenu ToolBar.Shell              Spustit shell
+      tmenu ToolBar.RunCtags   Spustit ctags
+      tmenu ToolBar.TagJump            Skocit na tag pod kurzorem
+      tmenu ToolBar.Help               Napoveda
+      tmenu ToolBar.FindHelp   Hledat napovedu k...
+   endfun
 endif
 " }}}
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[Zadny soubor]"
+let g:menutrans_help_dialog = "Zadejte hledany prikaz nebo slovo:\n\n\tPridejte i_ pro prikazy vkladaciho rezimu (napr. i_CTRL-X)\n\tPridejte c_ pro prikazy prikazove radky (napr. c_<Del>)\n\tPridejte ' pro jmeno volby (napr. 'shiftwidth')"
+let g:menutrans_path_dialog = "Zadejte cesty pro vyhledavani souboru. Jednotlive cesty oddelte carkou"
+let g:menutrans_tags_dialog = "Zadejte jmena souboru s tagy. Jmena oddelte carkami."
+let g:menutrans_textwidth_dialog = "Zadejte delku radku (0 pro zakazani formatovani):"
+let g:menutrans_fileformat_dialog = "Vyberte typ konce radku"
+" }}}" 
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+
+
+" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
index 6bfc072..70feb74 100644 (file)
@@ -10,6 +10,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -302,3 +304,6 @@ let g:menutrans_tags_dialog = "Geben Sie die Namen der 'tag'-Dateien ein.\nTrenn
 let g:menutrans_textwidth_dialog = "Geben Sie eine neue Text-Breite ein (oder 0, um die Formatierung abzuschalten)"
 let g:menutrans_fileformat_dialog = "Wählen Sie ein Datei-Format aus"
 " }}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 761ae0b..7e363f9 100644 (file)
@@ -1,12 +1,14 @@
 " Menu Translations:   Esperanto
 " Maintainer:          Dominique PELLE <dominique.pelle@free.fr>
-" Last Change:         2008 Mar 01
+" Last Change:         2012 May 01
 " 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -455,3 +457,6 @@ menutrans &Off                                      M&alÅaltita
 menutrans Co&lor\ test                         Testo\ de\ &koloroj
 menutrans &Highlight\ test                     Testo\ de\ &emfazo
 menutrans &Convert\ to\ HTML                   Konverti\ al\ &HTML
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index b943e23..97f38a7 100644 (file)
@@ -2,7 +2,7 @@
 " Previous translator: Alejandro López-Valencia <dradul@users.sourceforge.net>
 " Last translator:     Omar Campagne Polaino <ocampagne@gmail.com>
 " Version:             7.2.245
-" Last Change:         2009 Sep 03
+" Last Change:         2012 May 01
 "
 
 " Quit when menu translations have already been done.
@@ -10,6 +10,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252,
 " iso-8859-15 without conversion as well.
@@ -316,3 +318,6 @@ menutrans &Convert\ to\ HTML                &Convertir\ a\ HTML
 
 " Find Help dialog text
 let g:menutrans_help_dialog = "Introduzca un nombre de comando o palabra para obtener ayuda;\n\nAnteponga i_ para comandos de entrada (e.g.: i_CTRL-X)\nAnteponga c_ para comandos de la línea de comandos (e.g.: c_<Del>)\nAnteponga ` para un nombre de opción (e.g.: `shiftwidth`)"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 1f1f507..6a2c1e9 100644 (file)
@@ -1,12 +1,14 @@
 " Menu Translations:   Finnish
 " Maintainer:          Flammie Pirinen <flammie@iki.fi>
-" Last Change:         2007 Sep 04
+" Last Change:         2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Translations should be in latin1, if it requires latin9 or even unicode,
 " change this:
@@ -470,4 +472,7 @@ fun! Do_toolbar_tmenu()
   tmenu ToolBar.FindHelp                       Etsi ohjeesta
 endfun
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: set fileencoding=latin1
index e8881bd..c4b63c7 100644 (file)
@@ -2,13 +2,15 @@
 " Maintainer:          Adrien Beau <version.francaise@free.fr>
 " First Version:       Francois Thunus <thunus@systran.fr>
 " Last Modification:    David Blanchet <david.blanchet@free.fr>
-" Last Change:         2006 Apr 30
+" Last Change:         2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -466,3 +468,6 @@ menutrans &Off                                      &Off
 menutrans Co&lor\ test                         Tester\ les\ co&uleurs
 menutrans &Highlight\ test                     Tester\ les\ g&roupes\ de\ surbrillance
 menutrans &Convert\ to\ HTML                   Con&vertir\ en\ HTML
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index d3fafce..c7821d2 100644 (file)
@@ -1,7 +1,7 @@
 " Menu Translations:   Hungarian (Magyar)
 " Original Translation:        Zoltán Ãrpádffy
 " Maintained By:       Kontra Gergely <kgergely@mcl.hu>
-" Last Change:         2003 May 31
+" Last Change:         2012 May 01
 " I'm working on defining (unaccented) hotkeys for everything.
 " I want to remove y and z hotkeys, because on the hungarian keymap they're at
 " a differrent place.
@@ -27,6 +27,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding iso-8859-2
 
@@ -256,3 +258,6 @@ let g:menutrans_path_dialog = "
 let g:menutrans_tags_dialog = "Ãrd be a tag fájl lehetséges elérési Ãºtjait, vesszõvel elválasztva"
 let g:menutrans_textwidth_dialog = "Ãrd be a szöveg szélességét (0 = formázás kikapcsolva)"
 let g:menutrans_fileformat_dialog = "Válaszd ki a fájl formátumát"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 83a4dca..f3adf91 100644 (file)
@@ -1,7 +1,7 @@
 " Menu Translations:   Hungarian (Magyar)
 " Original Translation:        Zoltán Ãrpádffy
 " Maintained By:       Kontra Gergely <kgergely@mcl.hu>
-" Last Change:         2004 Jun 10
+" Last Change:         2012 May 01
 "
 " This file was converted from menu_hu_hu.iso_8859-2.vim.  See there for
 " remarks.
@@ -11,6 +11,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -240,3 +242,6 @@ let g:menutrans_path_dialog = "Ãrd be a keresett fájl lehetséges elérési Ãº
 let g:menutrans_tags_dialog = "Ãrd be a tag fájl lehetséges elérési Ãºtjait, vesszÅ‘vel elválasztva"
 let g:menutrans_textwidth_dialog = "Ãrd be a szöveg szélességét (0 = formázás kikapcsolva)"
 let g:menutrans_fileformat_dialog = "Válaszd ki a fájl formátumát"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 5a87bf0..092136b 100644 (file)
@@ -2,13 +2,15 @@
 " Maintainer:          Antonio Colombo <azc100@gmail.com>
 "                      Vlad Sandrini <vlad.gently@gmail.com>
 "                      Luciano Montanaro <mikelima@cirulla.net>
-" Last Change: 2010 Ago 13
+" Last Change: 2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding iso-8859-1
 
@@ -348,4 +350,7 @@ endif
   endfun
 endif
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: set sw=2 :
index c761b08..50856d5 100644 (file)
@@ -1,5 +1,8 @@
 " Menu Translations:   Japanese (for Windows)
-" Translated By:       MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:         29-Apr-2004.
+" Translated By:       MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:         15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 source <sfile>:p:h/menu_japanese_japan.932.vim
index 0861315..0eff4d9 100644 (file)
@@ -1,6 +1,9 @@
 " Menu Translations:   Japanese (for UNIX)
-" Translated By:       Muraoka Taro  <koron@tka.att.ne.jp>
-" Last Change:         08:50:47 25-Mar-2001.
+" Translated By:       MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:         15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " eucjp is the same as euc-jp.  Source the other one from here.
 source <sfile>:p:h/menu_ja_jp.euc-jp.vim
index 0861315..0eff4d9 100644 (file)
@@ -1,6 +1,9 @@
 " Menu Translations:   Japanese (for UNIX)
-" Translated By:       Muraoka Taro  <koron@tka.att.ne.jp>
-" Last Change:         08:50:47 25-Mar-2001.
+" Translated By:       MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:         15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " eucjp is the same as euc-jp.  Source the other one from here.
 source <sfile>:p:h/menu_ja_jp.euc-jp.vim
index 49248fc..e74ff80 100644 (file)
@@ -1,6 +1,9 @@
 " Menu Translations:   Japanese (for UNIX)
-" Translated By:       Muraoka Taro  <koron@tka.att.ne.jp>
-" Last Change:         08:50:47 25-Mar-2001.
+" Translated By:       MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:         15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " ujis is the same as euc-jp.  Source the other one from here.
 source <sfile>:p:h/menu_ja_jp.euc-jp.vim
index c761b08..50856d5 100644 (file)
@@ -1,5 +1,8 @@
 " Menu Translations:   Japanese (for Windows)
-" Translated By:       MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:         29-Apr-2004.
+" Translated By:       MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:         15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 source <sfile>:p:h/menu_japanese_japan.932.vim
index f231857..ba622a6 100644 (file)
@@ -1,14 +1,19 @@
 " vi:set ts=8 sts=8 sw=8 tw=0:
 "
 " Menu Translations:   Japanese (EUC-JP)
-" Translated By:       MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:         18-Apr-2006.
+" Translated By:       MURAOKA Taro  <koron.kaoriya@gmail.com>
+" Last Change:         12-May-2013.
+"
+" Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding euc-jp
 
@@ -99,6 +104,8 @@ let g:menutrans_tags_dialog = "
 menutrans F&ile\ Settings              Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Ã€ÃŸÃ„ê(&I)
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
        \       Â¹Ã”ÈÖ¹æɽ¼¨ÀÚÂØ(&N)<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!
+       \       ÃêÂùÔÈÖ¹æɽ¼¨ÀÚÂØ(&V)<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!
        \ Â¥ÃªÂ¥Â¹Â¥ÃˆÂ¥Ã¢Â¡Â¼Â¥Ã‰Ã€ÃšÃ‚Ø(&L)<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
@@ -149,7 +156,7 @@ menutrans Se&T\ Compiler            
 " Tools.Spelling Menu
 menutrans &Spelling                    Â¥Â¹Â¥ÃšÂ¥ÃªÂ¥Ã³Â¥Â°(&S)
 menutrans &Spell\ Check\ On            Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã¥§¥Ã¥¯Ã­¸ú(&S)
-menutrans Spell\ Check\ &Off           Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã¥§¥Ã¥¯ͭ¸ú(&O)
+menutrans Spell\ Check\ &Off           Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã¥§¥Ã¥¯̵¸ú(&O)
 menutrans To\ &Next\ error<Tab>]s      Â¼Â¡Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼(&N)<Tab>]s
 menutrans To\ &Previous\ error<Tab>[s  Ã°¤Î¥¨¥é¡¼(&P)<Tab>[s
 menutrans Suggest\ &Corrections<Tab>z= Â½Â¤Ã€ÂµÂ¸ÃµÃŠÃ¤(&C)<Tab>z=
@@ -234,6 +241,8 @@ menutrans &Paste            Å½
 menutrans &Delete              ÂºÃ¯Â½Ã¼(&D)
 menutrans Select\ Blockwise    Â¶Ã«Â·Ã¥Ö¥í¥Ã¥¯ÃªÂò
 menutrans Select\ &Word                ÃƒÂ±Â¸Ã¬ÃªÂò(&W)
+menutrans Select\ &Sentence    ÃŠÂ¸ÃªÂò(&S)
+menutrans Select\ Pa&ragraph   ÃƒÃŠÃîêÂò(&R)
 menutrans Select\ &Line                Â¹Ã”êÂò(&L)
 menutrans Select\ &Block       Â¥Ã–¥í¥Ã¥¯ÃªÂò(&B)
 menutrans Select\ &All         Â¤Â¹Â¤Ã™Â¤Ã†ÃªÂò(&A)
@@ -290,49 +299,8 @@ menutrans Co&lor\ test             
 menutrans &Highlight\ test     Â¥Ã¥¤¥é¥¤¥È¥Æ¥¹¥È(&H)
 menutrans &Convert\ to\ HTML   HTML¤Ø¥³¥ó¥Ã¡¼¥È(&C)
 
-" Japanese specific menu
-" Ã€Â®ÃˆÃ¤Ãiconv¼¡Â衢ɬ¤º¤·¤â»ØÄꤷ¤¿¥¨¥ó¥³¡¼¥É¤Ë¤Ê¤ë¤ï¤±¤Ç¤Ã¤Ê¤¤¤³¤È¤ËÃí°Õ
-if has('iconv')
-  " iconv¤Î¥Ã¡¼¥¸¥ç¥óȽÄê
-  let support_jisx0213 = (iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb") ? 1 : 0
-  "
-  " Ã†Ã‰Â¤ÃŸÂ¹Ã¾Â¤ÃŸ
-  an 10.395 &File.-SEPICONV- <Nop>
-  an 10.396.100.100 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.100.110 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
-    an 10.396.100.120 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.100.110 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
-    an 10.396.100.120 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :browse confirm e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.100.130 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..³«¤¯(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
-
-  " ÂºÃ†Ã†Ã‰Â¹Ã¾
-  an 10.396.110.100 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.110.110 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
-    an 10.396.110.120 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.110.110 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
-    an 10.396.110.120 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.110.130 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..ºÆÆɹþ(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
-
-  " ÃŠÃ¸
-  an 10.396.115 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..-SEP1- <Nop>
-  an 10.396.120.100 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êø(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
-  if !support_jisx0213
-    an 10.396.120.110 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êø(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
-    an 10.396.120.120 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êø(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
-  else
-    an 10.396.120.110 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êø(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
-    an 10.396.120.120 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êø(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
-  endif
-  an 10.396.120.130 &File.¥¨¥ó¥³¡¼¥É»ØÄê(&E)\.\.\..Êø(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
-endif
+let &cpo = s:keepcpo
+unlet s:keepcpo
 
 " filler to avoid the line above being recognized as a modeline
 " filler
-" filler
-" filler
index 0861315..0eff4d9 100644 (file)
@@ -1,6 +1,9 @@
 " Menu Translations:   Japanese (for UNIX)
-" Translated By:       Muraoka Taro  <koron@tka.att.ne.jp>
-" Last Change:         08:50:47 25-Mar-2001.
+" Translated By:       MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:         15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " eucjp is the same as euc-jp.  Source the other one from here.
 source <sfile>:p:h/menu_ja_jp.euc-jp.vim
index 49248fc..e74ff80 100644 (file)
@@ -1,6 +1,9 @@
 " Menu Translations:   Japanese (for UNIX)
-" Translated By:       Muraoka Taro  <koron@tka.att.ne.jp>
-" Last Change:         08:50:47 25-Mar-2001.
+" Translated By:       MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:         15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " ujis is the same as euc-jp.  Source the other one from here.
 source <sfile>:p:h/menu_ja_jp.euc-jp.vim
index b231005..7c3431d 100644 (file)
@@ -1,14 +1,19 @@
 " vi:set ts=8 sts=8 sw=8 tw=0:
 "
 " Menu Translations:   Japanese (UTF-8)
-" Translated By:       MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:         18-Apr-2006.
+" Translated By:       MURAOKA Taro  <koron.kaoriya@gmail.com>
+" Last Change:         12-May-2013.
+"
+" Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -99,6 +104,8 @@ let g:menutrans_tags_dialog = "タグファイルã®åå‰ã‚’入力ã—ã¦ãã 
 menutrans F&ile\ Settings              ãƒ•ã‚¡ã‚¤ãƒ«è¨­å®š(&I)
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
        \       è¡Œç•ªå·è¡¨ç¤ºåˆ‡æ›¿(&N)<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!
+       \       ç›¸å¯¾è¡Œç•ªå·è¡¨ç¤ºåˆ‡æ›¿(&V)<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!
        \ ãƒªã‚¹ãƒˆãƒ¢ãƒ¼ãƒ‰åˆ‡æ›¿(&L)<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
@@ -149,7 +156,7 @@ menutrans Se&T\ Compiler            ã‚³ãƒ³ãƒ‘イラ設定(&T)
 " Tools.Spelling Menu
 menutrans &Spelling                    ã‚¹ãƒšãƒªãƒ³ã‚°(&S)
 menutrans &Spell\ Check\ On            ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯æœ‰åŠ¹(&S)
-menutrans Spell\ Check\ &Off           ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯æœ‰åŠ¹(&O)
+menutrans Spell\ Check\ &Off           ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯ç„¡åŠ¹(&O)
 menutrans To\ &Next\ error<Tab>]s      æ¬¡ã®ã‚¨ãƒ©ãƒ¼(&N)<Tab>]s
 menutrans To\ &Previous\ error<Tab>[s  å‰ã®ã‚¨ãƒ©ãƒ¼(&P)<Tab>[s
 menutrans Suggest\ &Corrections<Tab>z= ä¿®æ­£å€™è£œ(&C)<Tab>z=
@@ -234,6 +241,8 @@ menutrans &Paste            è²¼ã‚Šä»˜ã‘(&P)
 menutrans &Delete              å‰Šé™¤(&D)
 menutrans Select\ Blockwise    çŸ©å½¢ãƒ–ロックé¸æŠž
 menutrans Select\ &Word                å˜èªžé¸æŠž(&W)
+menutrans Select\ &Sentence    æ–‡é¸æŠž(&S)
+menutrans Select\ Pa&ragraph   æ®µè½é¸æŠž(&R)
 menutrans Select\ &Line                è¡Œé¸æŠž(&L)
 menutrans Select\ &Block       ãƒ–ロックé¸æŠž(&B)
 menutrans Select\ &All         ã™ã¹ã¦é¸æŠž(&A)
@@ -290,49 +299,8 @@ menutrans Co&lor\ test             ã‚«ãƒ©ãƒ¼ãƒ†ã‚¹ãƒˆ(&L)
 menutrans &Highlight\ test     ãƒã‚¤ãƒ©ã‚¤ãƒˆãƒ†ã‚¹ãƒˆ(&H)
 menutrans &Convert\ to\ HTML   HTMLã¸ã‚³ãƒ³ãƒãƒ¼ãƒˆ(&C)
 
-" Japanese specific menu
-" æˆå¦ã¯iconv次第ã€å¿…ãšã—も指定ã—ãŸã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã«ãªã‚‹ã‚ã‘ã§ã¯ãªã„ã“ã¨ã«æ³¨æ„
-if has('iconv')
-  " iconvã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³åˆ¤å®š
-  let support_jisx0213 = (iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb") ? 1 : 0
-  "
-  " èª­ã¿è¾¼ã¿
-  an 10.395 &File.-SEPICONV- <Nop>
-  an 10.396.100.100 &File.エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.100.110 &File.エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
-    an 10.396.100.120 &File.エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.100.110 &File.エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
-    an 10.396.100.120 &File.エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :browse confirm e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.100.130 &File.エンコード指定(&E)\.\.\..é–‹ã(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
-
-  " å†èª­è¾¼
-  an 10.396.110.100 &File.エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.110.110 &File.エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
-    an 10.396.110.120 &File.エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.110.110 &File.エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
-    an 10.396.110.120 &File.エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.110.130 &File.エンコード指定(&E)\.\.\..å†èª­è¾¼(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
-
-  " ä¿å­˜
-  an 10.396.115 &File.エンコード指定(&E)\.\.\..-SEP1- <Nop>
-  an 10.396.120.100 &File.エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
-  if !support_jisx0213
-    an 10.396.120.110 &File.エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
-    an 10.396.120.120 &File.エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
-  else
-    an 10.396.120.110 &File.エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
-    an 10.396.120.120 &File.エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
-  endif
-  an 10.396.120.130 &File.エンコード指定(&E)\.\.\..ä¿å­˜(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
-endif
+let &cpo = s:keepcpo
+unlet s:keepcpo
 
 " filler to avoid the line above being recognized as a modeline
 " filler
-" filler
-" filler
index 09976a9..7b775cb 100644 (file)
@@ -1,14 +1,19 @@
 " vi:set ts=8 sts=8 sw=8 tw=0:
 "
 " Menu Translations:   Japanese (CP932)
-" Translated By:       MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:         18-Apr-2006.
+" Translated By:       MURAOKA Taro  <koron.kaoriya@gmail.com>
+" Last Change:         12-May-2013.
+"
+" Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp932
 
@@ -99,6 +104,8 @@ let g:menutrans_tags_dialog = "
 menutrans F&ile\ Settings              \83t\83@\83C\83\8b\90Ã\92è(&I)
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
        \       \8ds\94Ô\8d\86\95\\8e¦\90Ø\91Ö(&N)<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!
+       \       \91\8a\91ÃŽ\8ds\94Ô\8d\86\95\\8e¦\90Ø\91Ö(&V)<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!
        \ \83\8a\83X\83g\83\82\81[\83h\90Ø\91Ö(&L)<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
@@ -149,7 +156,7 @@ menutrans Se&T\ Compiler            
 " Tools.Spelling Menu
 menutrans &Spelling                    \83X\83y\83\8a\83\93\83O(&S)
 menutrans &Spell\ Check\ On            \83X\83y\83\8b\83`\83F\83b\83N\97L\8cø(&S)
-menutrans Spell\ Check\ &Off           \83X\83y\83\8b\83`\83F\83b\83N\97L\8cø(&O)
+menutrans Spell\ Check\ &Off           \83X\83y\83\8b\83`\83F\83b\83N\96³\8cø(&O)
 menutrans To\ &Next\ error<Tab>]s      \8e\9f\82ÃŒ\83G\83\89\81[(&N)<Tab>]s
 menutrans To\ &Previous\ error<Tab>[s  \91O\82ÃŒ\83G\83\89\81[(&P)<Tab>[s
 menutrans Suggest\ &Corrections<Tab>z= \8fC\90³\8có\95â(&C)<Tab>z=
@@ -234,6 +241,8 @@ menutrans &Paste            
 menutrans &Delete              \8dí\8f\9c(&D)
 menutrans Select\ Blockwise    \8bé\8c`\83u\83\8d\83b\83N\91I\91ð
 menutrans Select\ &Word                \92P\8cê\91I\91ð(&W)
+menutrans Select\ &Sentence    \95¶\91I\91ð(&S)
+menutrans Select\ Pa&ragraph   \92i\97\8e\91I\91ð(&R)
 menutrans Select\ &Line                \8ds\91I\91ð(&L)
 menutrans Select\ &Block       \83u\83\8d\83b\83N\91I\91ð(&B)
 menutrans Select\ &All         \82·\82×\82Ä\91I\91ð(&A)
@@ -290,49 +299,8 @@ menutrans Co&lor\ test             
 menutrans &Highlight\ test     \83n\83C\83\89\83C\83g\83e\83X\83g(&H)
 menutrans &Convert\ to\ HTML   HTML\82Ö\83R\83\93\83o\81[\83g(&C)
 
-" Japanese specific menu
-" \90¬\94Û\82Ãiconv\8e\9f\91æ\81A\95K\82¸\82µ\82à\8ew\92è\82µ\82½\83G\83\93\83R\81[\83h\82É\82È\82é\82í\82¯\82Ã…\82Ã\82È\82¢\82±\82Æ\82É\92\8d\88Ó
-if has('iconv')
-  " iconv\82ÃŒ\83o\81[\83W\83\87\83\93\94»\92è
-  let support_jisx0213 = (iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb") ? 1 : 0
-  "
-  " \93Ç\82Ã\8d\9e\82Ã
-  an 10.395 &File.-SEPICONV- <Nop>
-  an 10.396.100.100 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8aJ\82­(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.100.110 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8aJ\82­(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
-    an 10.396.100.120 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8aJ\82­(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.100.110 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8aJ\82­(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
-    an 10.396.100.120 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8aJ\82­(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :browse confirm e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.100.130 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8aJ\82­(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
-
-  " \8dÄ\93Ç\8d\9e
-  an 10.396.110.100 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8dÄ\93Ç\8d\9e(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.110.110 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8dÄ\93Ç\8d\9e(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
-    an 10.396.110.120 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8dÄ\93Ç\8d\9e(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.110.110 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8dÄ\93Ç\8d\9e(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
-    an 10.396.110.120 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8dÄ\93Ç\8d\9e(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.110.130 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\8dÄ\93Ç\8d\9e(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
-
-  " \95Û\91¶
-  an 10.396.115 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..-SEP1- <Nop>
-  an 10.396.120.100 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\95Û\91¶(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
-  if !support_jisx0213
-    an 10.396.120.110 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\95Û\91¶(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
-    an 10.396.120.120 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\95Û\91¶(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
-  else
-    an 10.396.120.110 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\95Û\91¶(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
-    an 10.396.120.120 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\95Û\91¶(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
-  endif
-  an 10.396.120.130 &File.\83G\83\93\83R\81[\83h\8ew\92è(&E)\.\.\..\95Û\91¶(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
-endif
+let &cpo = s:keepcpo
+unlet s:keepcpo
 
 " filler to avoid the line above being recognized as a modeline
 " filler
-" filler
-" filler
index 11809cf..3816384 100644 (file)
@@ -1,12 +1,14 @@
 " Menu Translations:   Korean
 " Maintainer:          SungHyun Nam <goweol@gmail.com>
-" Last Change:         2010 Feb 18
+" Last Change:         2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding euc-kr
 
@@ -42,7 +44,7 @@ menutrans E&xit<Tab>:qa                       
 " Edit menu
 menutrans &Edit                                Ã†Ã­Ãý(&E)
 menutrans &Undo<Tab>u                  ÃƒÃ«Â¼Ã’(&U)<Tab>u
-menutrans &Redo<Tab>^R                 Â´Ã™Â½Ãƒ Â½Ã‡Ã‡Ã (&R)<Tab>^R
+menutrans &Redo<Tab>^R                 Â´Ã™Â½Ãƒ\ Â½Ã‡Ã‡Ã (&R)<Tab>^R
 menutrans Rep&eat<Tab>\.               ÂµÃ‡Ã‡Â®Ã€ÃŒ(&e)<Tab>\.
 menutrans Cu&t<Tab>"+x                 Ã€ÃšÂ¸Â£Â±Ã¢(&t)<Tab>"+x
 menutrans &Copy<Tab>"+y                        ÂºÂ¹Â»Ã§(&C)<Tab>"+y
@@ -63,7 +65,7 @@ menutrans Toggle\ &Ignore-case<Tab>:set\ ic! 
 menutrans Toggle\ &Showmatch<Tab>:set\ sm! Showmatch\ Ã…ä±Û(&S)<Tab>:set\ sm!
 menutrans &Context\ lines              Ã„ÜÅؽºÆ®\ ÃÙ(&C)
 menutrans &Virtual\ Edit               Â°Â¡Â»Ã³\ Ã†Ã­Ãý(&V)
-menutrans Never                                Â»Ã§Â¿Ã« Â¾Ãˆ Ã‡Ã”
+menutrans Never                                Â»Ã§Â¿Ã«\ Â¾Ãˆ\ Ã‡Ã”
 menutrans Block\ Selection             ÂºÃ­Â·Â°\ Â°Ã­Â¸Â£Â±Ã¢
 menutrans Insert\ mode                 Â»Ã°Ã€Ã”\ Â¸Ã°ÂµÃ¥
 menutrans Block\ and\ Insert           ÂºÃ­Â·Â°Â°Ãº\ Â»Ã°Ã€Ã”
@@ -92,7 +94,7 @@ menutrans Toggle\ &auto-indent<Tab>:set\ ai! 
 menutrans Toggle\ &C-indenting<Tab>:set\ cin! C-Àε§ÆÃ\ Ã…ä±Û(&C)<Tab>:set\ cin!
 
 " other options
-menutrans &Shiftwidth                  Â½Â¬Ã‡ÃÆ® Â³ÃŠÂºÃ±(&S)
+menutrans &Shiftwidth                  Â½Â¬Ã‡ÃÆ®\ Â³ÃŠÂºÃ±(&S)
 menutrans Soft\ &Tabstop               Â¼Ã’ÇÃÆ®\ Ã…ǽºÅé(&T)
 menutrans Te&xt\ Width\.\.\.           Ã…ؽºÆ®\ Â³ÃŠÂºÃ±(&x)\.\.\.
 menutrans &File\ Format\.\.\.          Ã†Ã„ÀÃ\ Ã‡Ã¼Â½Ã„(&F)\.\.\.
@@ -125,12 +127,12 @@ menutrans &Find\ More\ Languages  
 " Tools.Fold Menu
 menutrans &Folding                     Ã¢±â(&F)
 " open close folds
-menutrans &Enable/Disable\ folds<Tab>zi        Ã¢´Â\ Â±Ã¢Â´Ã‰\ Â»Ã§Â¿Ã«\ Ã…ä±Û(&E)<Tab>zi
+menutrans &Enable/Disable\ folds<Tab>zi        Ã¢±â\ Â»Ã§Â¿Ã«\ Ã…ä±Û(&E)<Tab>zi
 menutrans &View\ Cursor\ Line<Tab>zv   Ã„¿¼­\ ÃÙ\ ÂºÂ¸Â±Ã¢(&V)<Tab>zv
 menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Ã„¿¼­\ ÃÙ¸¸\ ÂºÂ¸Â±Ã¢(&w)<Tab>zMzx
 menutrans C&lose\ more\ folds<Tab>zm   Â´Ãµ\ Â¸Â¹Ã€Âº\ Ã¢±â\ Â´Ã±â(&l)<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM    Ã¢Èù\ ÂºÃŽÂºÃ\ Â¸Ã°ÂµÃŽ\ Ã¢±â(&C)<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr    Â´Ãµ Â¸Â¹Ã€Âº\ Ã¢±â\ Â¿Â­Â±Ã¢(&p)<Tab>zr
+menutrans &Close\ all\ folds<Tab>zM    Â¸Ã°ÂµÃ§\ Ã¢±â\ Â´Ã±â(&C)<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr    Â´Ãµ\ Â¸Â¹Ã€Âº\ Ã¢±â\ Â¿Â­Â±Ã¢(&p)<Tab>zr
 menutrans &Open\ all\ folds<Tab>zR     Ã¢Èù\ ÂºÃŽÂºÃ\ Â¸Ã°ÂµÃŽ\ Ã†Ã¬Â±Ã¢(&O)<Tab>zR
 " fold method
 menutrans Fold\ Met&hod                        Ã¢´Â\ Â¹Ã¦Â¹Ã½(&h)
@@ -141,11 +143,11 @@ menutrans S&yntax                 
 "menutrans &Diff                               &Diff
 menutrans Ma&rker                      Â²Â¿Â¸Â®Ã‡Â¥(&r)
 " create and delete folds
-menutrans Create\ &Fold<Tab>zf         Â»ÃµÂ·ÃŽ Ã¢±â(&F)<Tab>zf
-menutrans &Delete\ Fold<Tab>zd         Â¿ÃÀüÈ÷ Ã†Ã¬Â±Ã¢(&D)<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD   Â¸Ã°ÂµÃŽ\ Ã†Ã¬Â±Ã¢(&A)<Tab>zD
+menutrans Create\ &Fold<Tab>zf         Ã¢±â\ Â»Ã½Â¼Âº(&F)<Tab>zf
+menutrans &Delete\ Fold<Tab>zd         Ã¢±â\ Â»Ã¨Ã¦(&D)<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD   Â¸Ã°ÂµÃ§\ Ã¢±â\ Â»Ã¨Ã¦(&A)<Tab>zD
 " moving around in folds
-menutrans Fold\ column\ &width         Ã¢À»\ Ã„­\ Â³ÃŠÂºÃ±(&w)
+menutrans Fold\ column\ &width         Ã¢±â\ Ã„÷³\ Â³ÃŠÂºÃ±(&w)
 
 "menutrans &Diff                               &Diff
 menutrans &Update                      Â°Â»Â½Ã…(&U)
@@ -259,3 +261,5 @@ menutrans Co&lor\ test              
 menutrans &Highlight\ test     Highlight\ Â½ÃƒÃ‡Ã¨(&H)
 menutrans &Convert\ to\ HTML   HTML·Î\ ÂºÂ¯ÃˆÂ¯(&C)
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
index ef46173..d036853 100644 (file)
@@ -1,12 +1,14 @@
 " Menu Translations:   Korean
 " Maintainer:          SungHyun Nam <goweol@gmail.com>
-" Last Change:         2010 Feb 18
+" Last Change:         2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -42,7 +44,7 @@ menutrans E&xit<Tab>:qa                       ë내기(&x)<Tab>:qa
 " Edit menu
 menutrans &Edit                                íŽ¸ì§‘(&E)
 menutrans &Undo<Tab>u                  ì·¨ì†Œ(&U)<Tab>u
-menutrans &Redo<Tab>^R                 ë‹¤ì‹œ ì‹¤í–‰(&R)<Tab>^R
+menutrans &Redo<Tab>^R                 ë‹¤ì‹œ\ ì‹¤í–‰(&R)<Tab>^R
 menutrans Rep&eat<Tab>\.               ë˜í’€ì´(&e)<Tab>\.
 menutrans Cu&t<Tab>"+x                 ìžë¥´ê¸°(&t)<Tab>"+x
 menutrans &Copy<Tab>"+y                        ë³µì‚¬(&C)<Tab>"+y
@@ -63,7 +65,7 @@ menutrans Toggle\ &Ignore-case<Tab>:set\ ic! ëŒ€ì†Œë¬¸ìž\ êµ¬ë¶„\ í† ê¸€(&I)<Ta
 menutrans Toggle\ &Showmatch<Tab>:set\ sm! Showmatch\ í† ê¸€(&S)<Tab>:set\ sm!
 menutrans &Context\ lines              ì½˜í…스트\ ì¤„(&C)
 menutrans &Virtual\ Edit               ê°€ìƒ\ íŽ¸ì§‘(&V)
-menutrans Never                                ì‚¬ìš© ì•ˆ í•¨
+menutrans Never                                ì‚¬ìš©\ ì•ˆ\ í•¨
 menutrans Block\ Selection             ë¸”럭\ ê³ ë¥´ê¸°
 menutrans Insert\ mode                 ì‚½ìž…\ ëª¨ë“œ
 menutrans Block\ and\ Insert           ë¸”럭과\ ì‚½ìž…
@@ -92,7 +94,7 @@ menutrans Toggle\ &auto-indent<Tab>:set\ ai! ìžë™ì¸ë´íŠ¸\ í† ê¸€(&a)<Tab>:se
 menutrans Toggle\ &C-indenting<Tab>:set\ cin! C-ì¸ë´íŒ…\ í† ê¸€(&C)<Tab>:set\ cin!
 
 " other options
-menutrans &Shiftwidth                  ì‰¬í”„트 ë„ˆë¹„(&S)
+menutrans &Shiftwidth                  ì‰¬í”„트\ ë„ˆë¹„(&S)
 menutrans Soft\ &Tabstop               ì†Œí”„트\ íƒ­ìŠ¤í†±(&T)
 menutrans Te&xt\ Width\.\.\.           í…스트\ ë„ˆë¹„(&x)\.\.\.
 menutrans &File\ Format\.\.\.          íŒŒì¼\ í˜•ì‹(&F)\.\.\.
@@ -125,12 +127,12 @@ menutrans &Find\ More\ Languages  ë‹¤ë¥¸\ ì–¸ì–´\ ì°¾ê¸°(&F)
 " Tools.Fold Menu
 menutrans &Folding                     ì ‘기(&F)
 " open close folds
-menutrans &Enable/Disable\ folds<Tab>zi        ì ‘는\ ê¸°ëŠ¥\ ì‚¬ìš©\ í† ê¸€(&E)<Tab>zi
+menutrans &Enable/Disable\ folds<Tab>zi        ì ‘기\ ì‚¬ìš©\ í† ê¸€(&E)<Tab>zi
 menutrans &View\ Cursor\ Line<Tab>zv   ì»¤ì„œ\ ì¤„\ ë³´ê¸°(&V)<Tab>zv
 menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx ì»¤ì„œ\ ì¤„만\ ë³´ê¸°(&w)<Tab>zMzx
 menutrans C&lose\ more\ folds<Tab>zm   ë”\ ë§Žì€\ ì ‘기\ ë‹«ê¸°(&l)<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM    ì ‘힌\ ë¶€ë¶„\ ëª¨ë‘\ ì ‘기(&C)<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr    ë” ë§Žì€\ ì ‘기\ ì—´ê¸°(&p)<Tab>zr
+menutrans &Close\ all\ folds<Tab>zM    ëª¨ë“ \ ì ‘기\ ë‹«ê¸°(&C)<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr    ë”\ ë§Žì€\ ì ‘기\ ì—´ê¸°(&p)<Tab>zr
 menutrans &Open\ all\ folds<Tab>zR     ì ‘힌\ ë¶€ë¶„\ ëª¨ë‘\ íŽ´ê¸°(&O)<Tab>zR
 " fold method
 menutrans Fold\ Met&hod                        ì ‘는\ ë°©ë²•(&h)
@@ -141,11 +143,11 @@ menutrans S&yntax                 ì‹ íƒìŠ¤(&y)
 "menutrans &Diff                               &Diff
 menutrans Ma&rker                      ê¼¬ë¦¬í‘œ(&r)
 " create and delete folds
-menutrans Create\ &Fold<Tab>zf         Ã¬\83\88ë¡\9c Ã¬Â \91기(&F)<Tab>zf
-menutrans &Delete\ Fold<Tab>zd         Ã¬\99\84ì \84í\9e\88 Ã­\8e´ê¸°(&D)<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD   Ã«ÂªÂ¨Ã«\91\90\ Ã­\8e´ê¸°(&A)<Tab>zD
+menutrans Create\ &Fold<Tab>zf         Ã¬Â \91기\ Ã¬\83\9dì\84±(&F)<Tab>zf
+menutrans &Delete\ Fold<Tab>zd         Ã¬Â \91기\ Ã¬\82­ì \9c(&D)<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD   Ã«ÂªÂ¨Ã«\93 \ Ã¬Â \91기\ Ã¬\82­ì \9c(&A)<Tab>zD
 " moving around in folds
-menutrans Fold\ column\ &width         ì ‘ì„\ ì¹¸\ ë„ˆë¹„(&w)
+menutrans Fold\ column\ &width         ì ‘기\ ì»¬ëŸ¼\ ë„ˆë¹„(&w)
 
 "menutrans &Diff                               &Diff
 menutrans &Update                      ê°±ì‹ (&U)
@@ -259,3 +261,5 @@ menutrans Co&lor\ test              ìƒ‰\ ì‹œí—˜(&l)
 menutrans &Highlight\ test     Highlight\ ì‹œí—˜(&H)
 menutrans &Convert\ to\ HTML   HTMLë¡œ\ ë³€í™˜(&C)
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
index d7f75f2..e1d4506 100644 (file)
@@ -1,12 +1,14 @@
 " Menu Translations:   Nederlands
 " Maintainer:          Bram Moolenaar
-" Last Change: 2004 May 05
+" Last Change: 2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -238,3 +240,6 @@ let g:menutrans_path_dialog = "Typ het zoekpad voor bestanden.\nGebruik commas t
 let g:menutrans_tags_dialog = "Typ namen van tag bestanden.\nGebruik commas tussen de namen."
 let g:menutrans_textwidth_dialog = "Typ de nieuwe tekst breedte (0 om formatteren uit the schakelen): "
 let g:menutrans_fileformat_dialog = "Selecteer formaat voor het schrijven van het bestand"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index f27b05c..a64e343 100644 (file)
@@ -1,6 +1,6 @@
 " Menu Translations:   Norwegian / Norsk (BokmÃ¥l)
 " Maintainer:          Ã˜yvind A. Holm <sunny@sunbase.org>
-" Last Change:         2004-05-16 20:00:52 +0200
+" Last Change:         2012 May 01
 " menu_no_no.latin1.vim 289 2004-05-16 18:00:52Z sunny
 
 " Quit when menu translations have already been done.
@@ -8,6 +8,8 @@ if exists("did_menu_trans")
        finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in ISO-8859-1, but they work for ISO-8859-15 and
 " CP1252 without conversion as well.
@@ -229,5 +231,8 @@ endif
        let g:menutrans_textwidth_dialog = "Velg ny tekstbredde (0 for Ã¥ forhindre formatering): "
        let g:menutrans_fileformat_dialog = "Velg filformat som filen skal lagres med"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 "    vim: set ts=8 sw=8 :
 " vim600: set fdm=indent :
index 021e1a7..7bb7294 100644 (file)
@@ -8,6 +8,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding iso-8859-2
 
@@ -285,3 +287,6 @@ let g:menutrans_tags_dialog = "Podaj nazwy plik
 let g:menutrans_textwidth_dialog = "Wprowad¼ now± szeroko¶æ tekstu (0 wy³±cza przewijanie): "
 let g:menutrans_fileformat_dialog = "Wybierz format w którym ten plik ma byæ zapisany"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Anuluj"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 1d347dc..871b4fa 100644 (file)
@@ -8,6 +8,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -285,3 +287,6 @@ let g:menutrans_tags_dialog = "Podaj nazwy plików tagów.\nProszÄ™ rozdzielać
 let g:menutrans_textwidth_dialog = "Wprowadź nowÄ… szerokość tekstu (0 wyÅ‚Ä…cza przewijanie): "
 let g:menutrans_fileformat_dialog = "Wybierz format w którym ten plik ma być zapisany"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Anuluj"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 398b18d..9dde00d 100644 (file)
@@ -8,6 +8,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp1250
 
@@ -285,3 +287,6 @@ let g:menutrans_tags_dialog = "Podaj nazwy plik
 let g:menutrans_textwidth_dialog = "Wprowad\9f now¹ szeroko\9cæ tekstu (0 wy³¹cza przewijanie): "
 let g:menutrans_fileformat_dialog = "Wybierz format w którym ten plik ma byæ zapisany"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Anuluj"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 28a62b7..f4980ef 100644 (file)
@@ -1,6 +1,6 @@
 " Menu Translations: Português do Brasil
 " Maintainer: José de Paula <jose@infoviaweb.com>
-" Last Change: 2006-09-19 02:30:00-03:00
+" Last Change: 2012 May 01
 "
 
 " Quit when menu translations have already been done.
@@ -8,6 +8,8 @@ if exists("did_menu_trans")
        finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Translations in latin1 (ISO-8859-1), and should work in
 " latin9 (ISO-8859-15)
@@ -283,3 +285,6 @@ menutrans &Convert\ to\ HTML                &Converter\ para\ HTML
 
 " Find Help dialog text
 let g:menutrans_help_dialog = "Digite um comando ou palavra para obter ajuda;\n\nAnteponha i_ para comandos de entrada (ex.: i_CTRL-X)\nAnteponha c_ para comandos da linha de comandos (ex.: c_<Del>)\nAnteponha ` para um nome de opção (ex.: `shiftwidth`)"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 28b9726..783be0b 100644 (file)
@@ -7,6 +7,8 @@ if exists("did_menu_trans")
        finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Translations in latin1 (ISO-8859-1), and should work in
 " latin9 (ISO-8859-15)
@@ -262,3 +264,6 @@ menutrans &Convert\ to\ HTML                &Converter\ para\ HTML
 
 " Find Help dialog text
 let g:menutrans_help_dialog = "Digite um comando ou palavra para obter ajuda;\n\nAnteponha i_ para comandos de entrada (ex.: i_CTRL-X)\nAnteponha c_ para comandos da linha de comandos (ex.: c_<Del>)\nAnteponha ` para um nome de opção (ex.: `shiftwidth`)"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 37cd935..e66b728 100644 (file)
@@ -1,9 +1,10 @@
 " Menu Translations:   Russian
-" Maintainer:          vassily ragosin <vrr[at]users.sourceforge.net>
-" Last Change:         26 Apr 2004
+" Maintainer:          Sergey Alyoshin <alyoshin.s@gmail.com>
+" Previous Maintainer: vassily ragosin <vrr[at]users.sourceforge.net>
+" Last Change:         29 May 2013
 " URL:                 cvs://cvs.sf.net:/cvsroot/ruvim/extras/menu/menu_ru_ru.vim
 "
-" $Id: menu_ru_ru.koi8-r.vim,v 1.2 2004/06/16 11:19:21 vimboss Exp $
+" $Id: menu_ru_ru.vim,v 1.1 2004/06/13 16:09:10 vimboss Exp $
 "
 " Adopted for RuVim project by Vassily Ragosin.
 " First translation: Tim Alexeevsky <realtim [at] mail.ru>,
@@ -16,6 +17,8 @@ if exists("did_menu_trans")
    finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding koi8-r
 
@@ -48,6 +51,7 @@ menutrans &About                      &
 " File menu
 menutrans &Open\.\.\.<Tab>:e           &ïÔËÒÙÔØ\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp    Ã°Ã&ÄÅÌÉÔØ\ ÃËÎÃ\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew  Ã¯Ã”ËÒÙÔØ\ Ã—&ËÌÃÄËÕ\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew               &îÃ×ÙÊ<Tab>:enew
 menutrans &Close<Tab>:close            &úÃËÒÙÔØ<Tab>:close
 "--------------------
@@ -75,51 +79,57 @@ menutrans Put\ &After<Tab>]p                
 menutrans &Delete<Tab>x                        &õÄÃÌÉÔØ<Tab>x
 menutrans &Select\ All<Tab>ggVG                Ã·&ÙÄÅÌÉÔØ\ Ã—Ó£<Tab>ggVG
 "--------------------
+" Athena GUI only
+menutrans &Find<Tab>/                  &ðÃÉÓË<Tab>/
+menutrans Find\ and\ Rep&lace<Tab>:%s  Ã°ÃÉÓË\ Ã‰\ &ÚÃÃÃ…ÃŽÃ<Tab>:%s
+" End Athena GUI only
 menutrans &Find\.\.\.<Tab>/            &ðÃÉÓË\.\.\.<Tab>/
 menutrans Find\ and\ Rep&lace\.\.\.    Ã°ÃÉÓË\ Ã‰\ &ÚÃÃÃ…ÃŽÃ\.\.\.
 menutrans Find\ and\ Rep&lace\.\.\.<Tab>:%s    Ã°ÃÉÓË\ Ã‰\ &ÚÃÃÃ…ÃŽÃ\.\.\.<Tab>:%s
-menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s     Ã°ÃÉÓË\ Ã‰\ &ÚÃÃÃ…ÃŽÃ\.\.\.<Tab>:s
+menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s     Ã°ÃÉÓË\ Ã‰\ &ÚÃÃÃ…ÃŽÃ\.\.\.<Tab>:s
 "--------------------
 menutrans Settings\ &Window            Ã¯Ã‹ÃŽÃ\ ÃŽÃÓÔÒÃÊËÉ\ &ÃÃÃÉÊ
+menutrans Startup\ &Settings           Ã®ÃÓÔÒÃÊËÉ\ ÃšÃÃÕÓ&ËÃ
 menutrans &Global\ Settings            &çÌÃÂÃÌØÎÙÅ\ ÃŽÃÓÔÒÃÊËÉ
 menutrans F&ile\ Settings              Ã®ÃÓÔÒÃÊËÉ\ &ÆÃÊÌÃ×
 menutrans C&olor\ Scheme               &ã×ÅÔÃ×ÃÑ\ Ã“ÈÅÃÃ
 menutrans &Keymap                      Ã²ÃÓËÌÃÄËÃ\ Ã‹ÃŒ&Ã×ÉÃÔÕÒÙ
 menutrans Select\ Fo&nt\.\.\.          Ã·Ã™Ã‚ÃÃ’\ &ÛÒÉÆÔÃ\.\.\.
 ">>>----------------- Edit/Global settings
-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!    Ã°ÃÄÓ×ÅÔËÃ\ &ÃŽÃÊÄÅÎÎÙÈ\ Ã“ÃÃÔ×ÅÔÓÔ×ÉÊ<Tab>:set\ hls!
-menutrans Toggle\ &Ignore-case<Tab>:set\ ic!            &òÅÇÉÓÔÒÃÎÅÚÃ×ÉÓÉÃÙÊ\ ÃÃÉÓË<Tab>:set\ ic!
-menutrans Toggle\ &Showmatch<Tab>:set\ sm!              Ã°ÃËÃÚÙ×ÃÔØ\ ÃÃÒÎÙÅ\ &ÜÌÅÃÅÎÔÙ<Tab>:set\ sm!
-menutrans &Context\ lines                               Ã³Ã”Ã’&ÃË\ Ã—ÃËÒÕÇ\ Ã‹Ã•Ã’ÓÃÃ’Ã
-menutrans &Virtual\ Edit                                Ã·Ã‰Ã’&ÔÕÃÌØÎÃÃ…\ Ã’ÅÄÃËÔÉÒÃ×ÃÎÉÅ
-menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!           Ã²Ã…ÖÉÃ\ &÷ÓÔÃ×ËÉ<Tab>:set\ im!
-menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!                 &óÃ×ÃÅÓÔÉÃÃÓÔØ\ Ã“\ Vi<Tab>:set\ cp!
-menutrans Search\ &Path\.\.\.                           &ðÕÔØ\ Ã„ÌÑ\ ÃÃÉÓËÃ\ Ã†ÃÊÌÃ×\.\.\.
-menutrans Ta&g\ Files\.\.\.                             Ã¦ÃÊÌÙ\ &ÃÅÔÃË\.\.\.
-"
-menutrans Toggle\ &Toolbar                              &éÎÓÔÒÕÃÅÎÔÃÌØÎÃÑ\ ÃÃÎÅÌØ
-menutrans Toggle\ &Bottom\ Scrollbar                    Ã°ÃÃŒÃÓÃ\ ÃÃ’ÃËÒÕÔËÉ\ Ã—ÎÉ&ÚÕ
-menutrans Toggle\ &Left\ Scrollbar                      Ã°ÃÃŒÃÓÃ\ ÃÃ’ÃËÒÕÔËÉ\ Ã“&ÌÅ×Ã
-menutrans Toggle\ &Right\ Scrollbar                     Ã°ÃÃŒÃÓÃ\ ÃÃ’ÃËÒÕÔËÉ\ Ã“ÃÃ’&Ã×Ã
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!   Ã°ÃÄÓ×ÅÔËÃ\ &ÃŽÃÊÄÅÎÎÙÈ\ Ã“ÃÃÔ×ÅÔÓÔ×ÉÊ<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!           &òÅÇÉÓÔÒÃÎÅÚÃ×ÉÓÉÃÙÊ\ ÃÃÉÓË<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!             Ã°ÃËÃÚÙ×ÃÔØ\ ÃÃÒÎÙÅ\ &ÜÌÅÃÅÎÔÙ<Tab>:set\ sm!
+menutrans &Context\ lines                              Ã³Ã”Ã’&ÃË\ Ã—ÃËÒÕÇ\ Ã‹Ã•Ã’ÓÃÃ’Ã
+menutrans &Virtual\ Edit                               Ã·Ã‰Ã’&ÔÕÃÌØÎÃÃ…\ Ã’ÅÄÃËÔÉÒÃ×ÃÎÉÅ
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!          Ã²Ã…ÖÉÃ\ &÷ÓÔÃ×ËÉ<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!                &óÃ×ÃÅÓÔÉÃÃÓÔØ\ Ã“\ Vi<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\.                          &ðÕÔØ\ Ã„ÌÑ\ ÃÃÉÓËÃ\ Ã†ÃÊÌÃ×\.\.\.
+menutrans Ta&g\ Files\.\.\.                            Ã¦ÃÊÌÙ\ &ÃÅÔÃË\.\.\.
+"
+menutrans Toggle\ &Toolbar                             &éÎÓÔÒÕÃÅÎÔÃÌØÎÃÑ\ ÃÃÎÅÌØ
+menutrans Toggle\ &Bottom\ Scrollbar                   Ã°ÃÃŒÃÓÃ\ ÃÃ’ÃËÒÕÔËÉ\ Ã—ÎÉ&ÚÕ
+menutrans Toggle\ &Left\ Scrollbar                     Ã°ÃÃŒÃÓÃ\ ÃÃ’ÃËÒÕÔËÉ\ Ã“&ÌÅ×Ã
+menutrans Toggle\ &Right\ Scrollbar                    Ã°ÃÃŒÃÓÃ\ ÃÃ’ÃËÒÕÔËÉ\ Ã“ÃÃ’&Ã×Ã
 ">>>->>>------------- Edit/Global settings/Virtual edit
-menutrans Never                                                 Ã·Ã™Ã‹ÃŒÃ€ÃžÃ…ÃŽÃ
-menutrans Block\ Selection                              Ã°Ã’É\ Ã—ÙÄÅÌÅÎÉÉ\ Ã‚ÃŒÃËÃ
-menutrans Insert\ mode                                  Ã·\ Ã’ÅÖÉÃÃ…\ Ã·Ã“ÔÃ×ËÉ
-menutrans Block\ and\ Insert                            Ã°Ã’É\ Ã—ÙÄÅÌÅÎÉÉ\ Ã‚ÃŒÃËÃ\ Ã‰\ Ã—\ Ã’ÅÖÉÃÃ…\ Ã·Ã“ÔÃ×ËÉ
-menutrans Always                                        Ã·Ã‹ÃŒÃ€ÃžÃ…ÃŽÃ\ Ã—ÓÅÇÄÃ
+menutrans Never                                                Ã·Ã™Ã‹ÃŒÃ€ÃžÃ…ÃŽÃ
+menutrans Block\ Selection                             Ã°Ã’É\ Ã—ÙÄÅÌÅÎÉÉ\ Ã‚ÃŒÃËÃ
+menutrans Insert\ mode                                 Ã·\ Ã’ÅÖÉÃÃ…\ Ã·Ã“ÔÃ×ËÉ
+menutrans Block\ and\ Insert                           Ã°Ã’É\ Ã—ÙÄÅÌÅÎÉÉ\ Ã‚ÃŒÃËÃ\ Ã‰\ Ã—\ Ã’ÅÖÉÃÃ…\ Ã·Ã“ÔÃ×ËÉ
+menutrans Always                                       Ã·Ã‹ÃŒÃ€ÃžÃ…ÃŽÃ\ Ã—ÓÅÇÄÃ
 ">>>----------------- Edit/File settings
-menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!        &îÕÃÃ…Ã’ÃÃÉÑ\ Ã“ÔÒÃË<Tab>:set\ nu!
-menutrans Toggle\ &List\ Mode<Tab>:set\ list!           Ã¯Ã”ÃÂÒÃ&ÖÅÎÉÅ\ ÃŽÃ…×ÉÄÉÃÙÈ\ Ã“ÉÃ×ÃÃŒÃ×<Tab>:set\ list!
-menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!           &ðÅÒÅÎÃÓ\ Ã„ÌÉÎÎÙÈ\ Ã“ÔÒÃË<Tab>:set\ wrap!
-menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!        Ã°Ã…Ã’Ã…ÃŽÃÓ\ &ÃÅÌÙÈ\ Ã“ÃŒÃ×<Tab>:set\ lbr!
-menutrans Toggle\ &expand-tab<Tab>:set\ et!             Ã°Ã’Ã&ÂÅÌÙ\ Ã—ÃÅÓÔÃ\ Ã”ÃÂÕÌÑÃÉÉ<Tab>:set\ et!
-menutrans Toggle\ &auto-indent<Tab>:set\ ai!            Ã¡Ã—ÔÃÃÃÔÉÞÅÓËÃÃ…\ Ã†ÃÃ’ÃÃÔÉÒÃ×ÃÎÉÅ\ &ÃÔÓÔÕÃÃ×<Tab>:set\ ai!
-menutrans Toggle\ &C-indenting<Tab>:set\ cin!           Ã¦ÃÃ’ÃÃÔÉÒÃ×ÃÎÉÅ\ ÃÔÓÔÕÃÃ×\ Ã—\ &ÓÔÉÌÅ\ C<Tab>:set\ cin!
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!       &îÕÃÃ…Ã’ÃÃÉÑ\ Ã“ÔÒÃË<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!    Ã¯Ã”ÃŽÃÓÉÔÅ&ÌØÎÃÑ\ ÃŽÃ•ÃÃ…Ã’ÃÃÉÑ\ Ã“ÔÒÃË<Tab>:set\ nru!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!          Ã¯Ã”ÃÂÒÃ&ÖÅÎÉÅ\ ÃŽÃ…×ÉÄÉÃÙÈ\ Ã“ÉÃ×ÃÃŒÃ×<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!          &ðÅÒÅÎÃÓ\ Ã„ÌÉÎÎÙÈ\ Ã“ÔÒÃË<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!       Ã°Ã…Ã’Ã…ÃŽÃÓ\ &ÃÅÌÙÈ\ Ã“ÃŒÃ×<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!            Ã°Ã’Ã&ÂÅÌÙ\ Ã—ÃÅÓÔÃ\ Ã”ÃÂÕÌÑÃÉÉ<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!           Ã¡Ã—ÔÃÃÃÔÉÞÅÓËÃÃ…\ Ã†ÃÃ’ÃÃÔÉÒÃ×ÃÎÉÅ\ &ÃÔÓÔÕÃÃ×<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!          Ã¦ÃÃ’ÃÃÔÉÒÃ×ÃÎÉÅ\ ÃÔÓÔÕÃÃ×\ Ã—\ &ÓÔÉÌÅ\ C<Tab>:set\ cin!
 ">>>---
-menutrans &Shiftwidth                                   Ã·Ã…ÌÉ&ÞÉÎÃ\ ÃÔÓÔÕÃÃ
-menutrans Soft\ &Tabstop                                Ã»Ã‰Ã’ÉÎÃ\ &ÔÃÂÕÌÑÃÉÉ
-menutrans Te&xt\ Width\.\.\.                            &ûÉÒÉÎÃ\ Ã”ÅËÓÔÃ\.\.\.
-menutrans &File\ Format\.\.\.                           &æÃÃ’ÃÃÔ\ Ã†ÃÊÌÃ\.\.\.
+menutrans &Shiftwidth                                  Ã·Ã…ÌÉ&ÞÉÎÃ\ ÃÔÓÔÕÃÃ
+menutrans Soft\ &Tabstop                               Ã»Ã‰Ã’ÉÎÃ\ &ÔÃÂÕÌÑÃÉÉ
+menutrans Te&xt\ Width\.\.\.                           &ûÉÒÉÎÃ\ Ã”ÅËÓÔÃ\.\.\.
+menutrans &File\ Format\.\.\.                          &æÃÃ’ÃÃÔ\ Ã†ÃÊÌÃ\.\.\.
 "
 "
 "
@@ -129,6 +139,7 @@ menutrans Jump\ &back<Tab>^T                                &
 menutrans Build\ &Tags\ File                           Ã³ÃÚÄÃÔØ\ &ÆÃÊÌ\ ÃÅÔÃË
 "-------------------
 menutrans &Folding                                     Ã²ÃÂÃÔÃ\ Ã“Ã\ &ÓËÌÃÄËÃÃÉ
+menutrans &Spelling                                    Ã°Ã’&Ã×ÃÃÉÓÃÎÉÅ
 menutrans &Diff                                                &ïÔÌÉÞÉÑ\ (diff)
 "-------------------
 menutrans &Make<Tab>:make                              Ã«Ã&ÃÃÉÌÑÃÉÑ<Tab>:make
@@ -139,10 +150,26 @@ menutrans &Previous\ Error<Tab>:cp                        
 menutrans &Older\ List<Tab>:cold                       Ã¢ÃÌÅÅ\ Ã“ÔÃÃ’&ÙÊ\ Ã“ÃÉÓÃË\ ÃÛÉÂÃË<Tab>:cold
 menutrans N&ewer\ List<Tab>:cnew                       Ã¢ÃÌÅÅ\ Ã“×Å&ÖÉÊ\ Ã“ÃÉÓÃË\ ÃÛÉÂÃË<Tab>:cnew
 menutrans Error\ &Window                               Ã¯Ã‹&ÃŽÃ\ ÃÛÉÂÃË
-menutrans &Set\ Compiler                               Ã·Ã™Ã‚ÃÃ’\ &ËÃÃÃÉÌÑÔÃÃ’Ã
+menutrans Se&T\ Compiler                               Ã·Ã™Ã‚ÃÃ’\ &ËÃÃÃÉÌÑÔÃÃ’Ã
 "-------------------
 menutrans &Convert\ to\ HEX<Tab>:%!xxd                 Ã°&ÅÒÅ×ÅÓÔÉ\ Ã—\ HEX<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r                        Ã°Ã…ÒÅ×ÅÓÔÉ\ Ã‰&Ú\ HEX<Tab>:%!xxd\ -r
+">>>---------------- Tools/Spelling
+menutrans &Spell\ Check\ On                            &÷ËÌ\ ÃÃ’Ã×ÅÒËÕ\ ÃÃ’Ã×ÃÃÉÓÃÎÉÑ
+menutrans Spell\ Check\ &Off                           Ã·Ã™&ËÌ\ ÃÃ’Ã×ÅÒËÕ\ ÃÃ’Ã×ÃÃÉÓÃÎÉÑ
+menutrans To\ &Next\ error<Tab>]s                      &óÌÅÄÕÀÃÃÑ\ ÃÛÉÂËÃ
+menutrans To\ &Previous\ error<Tab>[s                  &ðÒÅÄÙÄÕÃÃÑ\ ÃÛÉÂËÃ
+menutrans Suggest\ &Corrections<Tab>z=                 Ã°Ã’ÅÄÌÃÖÉÔØ\ Ã‰Ã“Ã&Ã’Ã×ÌÅÎÉÑ
+menutrans &Repeat\ correction<Tab>:spellrepall         Ã°Ã×&ÔÃÒÉÔØ\ Ã‰Ã“ÃÃ’Ã×ÌÅÎÉÅ\ Ã„ÌÑ\ Ã—ÓÅÈ
+"-------------------
+menutrans Set\ language\ to\ "en"                      ÃµÃ“ÔÃÃŽÃ×ÉÔØ\ Ã‘ÚÙË\ "en"
+menutrans Set\ language\ to\ "en_au"                   ÃµÃ“ÔÃÃŽÃ×ÉÔØ\ Ã‘ÚÙË\ "en_au"
+menutrans Set\ language\ to\ "en_ca"                   ÃµÃ“ÔÃÃŽÃ×ÉÔØ\ Ã‘ÚÙË\ "en_ca"
+menutrans Set\ language\ to\ "en_gb"                   ÃµÃ“ÔÃÃŽÃ×ÉÔØ\ Ã‘ÚÙË\ "en_gb"
+menutrans Set\ language\ to\ "en_nz"                   ÃµÃ“ÔÃÃŽÃ×ÉÔØ\ Ã‘ÚÙË\ "en_nz"
+menutrans Set\ language\ to\ "en_us"                   ÃµÃ“ÔÃÃŽÃ×ÉÔØ\ Ã‘ÚÙË\ "en_us"
+menutrans &Find\ More\ Languages                       &îÃÊÔÉ\ Ã‚ÃÌØÛÅ\ Ã‘ÚÙËÃ×
+let g:menutrans_set_lang_to =                          'õÓÔÃÃŽÃ×ÉÔؠÑÚÙË'
 ">>>---------------- Folds
 menutrans &Enable/Disable\ folds<Tab>zi                        Ã·Ã‹ÃŒ/×ÙËÌ\ &ÓËÌÃÄËÉ<Tab>zi
 menutrans &View\ Cursor\ Line<Tab>zv                   Ã¯Ã”ËÒÙÔØ\ Ã“ÔÒÃËÕ\ Ã“\ &ËÕÒÓÃÃ’ÃÃ<Tab>zv
@@ -217,7 +244,7 @@ menutrans M&in\ Height<Tab>^W1_                             
 menutrans Max\ &Width<Tab>^W\|                         Ã­ÃËÓÉÃÃÌØÎÃÑ\ &ÛÉÒÉÎÃ<Tab>^W\|
 menutrans Min\ Widt&h<Tab>^W1\|                                Ã­Ã‰ÃŽÃ‰ÃÃÃŒ&ØÎÃÑ\ Ã›Ã‰Ã’ÉÎÃ<Tab>^W1\|
 ">>>----------------- Window/Move To
-menutrans &Top<Tab>^WK                                 Ã®Ã&×ÅÒÈ<Tab>^WK
+menutrans &Top<Tab>^WK                                 Ã·&×ÅÒÈ<Tab>^WK
 menutrans &Bottom<Tab>^WJ                              Ã·&ÎÉÚ<Tab>^WJ
 menutrans &Left\ side<Tab>^WH                          Ã·&ÌÅ×Ã<Tab>^WH
 menutrans &Right\ side<Tab>^WL                         Ã·&ÃÃ’Ã×Ã<Tab>^WL
@@ -294,3 +321,6 @@ let g:menutrans_fileformat_dialog = "
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\nï&ÔÃÃ…ÃŽÃ"
 "
 let menutrans_no_file = "[îÅԠÆÃÊÌÃ]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index b726152..6961608 100644 (file)
@@ -1,6 +1,7 @@
 " Menu Translations:   Russian
-" Maintainer:          vassily ragosin <vrr[at]users.sourceforge.net>
-" Last Change:         26 Apr 2004
+" Maintainer:          Sergey Alyoshin <alyoshin.s@gmail.com>
+" Previous Maintainer: vassily ragosin <vrr[at]users.sourceforge.net>
+" Last Change:         29 May 2013
 " URL:                 cvs://cvs.sf.net:/cvsroot/ruvim/extras/menu/menu_ru_ru.vim
 "
 " $Id: menu_ru_ru.vim,v 1.1 2004/06/13 16:09:10 vimboss Exp $
@@ -16,6 +17,8 @@ if exists("did_menu_trans")
    finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -48,6 +51,7 @@ menutrans &About                      &ЗаÑтавка
 " File menu
 menutrans &Open\.\.\.<Tab>:e           &Открыть\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp    ÐŸÐ¾&делить\ Ð¾ÐºÐ½Ð¾\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew  ÐžÑ‚крыть\ Ð²&кладку\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew               &Ðовый<Tab>:enew
 menutrans &Close<Tab>:close            &Закрыть<Tab>:close
 "--------------------
@@ -75,51 +79,57 @@ menutrans Put\ &After<Tab>]p                Ð’клеить\ Ð¿Ð¾&Ñле<Tab>]p
 menutrans &Delete<Tab>x                        &Удалить<Tab>x
 menutrans &Select\ All<Tab>ggVG                Ð’&ыделить\ Ð²ÑÑ‘<Tab>ggVG
 "--------------------
+" Athena GUI only
+menutrans &Find<Tab>/                  &ПоиÑк<Tab>/
+menutrans Find\ and\ Rep&lace<Tab>:%s  ÐŸÐ¾Ð¸Ñк\ Ð¸\ &замена<Tab>:%s
+" End Athena GUI only
 menutrans &Find\.\.\.<Tab>/            &ПоиÑк\.\.\.<Tab>/
-menutrans Find\ and\ Rep&lace\.\.\.     ÐŸÐ¾Ð¸Ñк\ Ð¸\ &замена\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\.<Tab>:%s     ÐŸÐ¾Ð¸Ñк\ Ð¸\ &замена\.\.\.<Tab>:%s
-menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s     ÐŸÐ¾Ð¸Ñк\ Ð¸\ &замена\.\.\.<Tab>:s
+menutrans Find\ and\ Rep&lace\.\.\.    ÐŸÐ¾Ð¸Ñк\ Ð¸\ &замена\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\.<Tab>:%s    ÐŸÐ¾Ð¸Ñк\ Ð¸\ &замена\.\.\.<Tab>:%s
+menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s     ÐŸÐ¾Ð¸Ñк\ Ð¸\ &замена\.\.\.<Tab>:s
 "--------------------
 menutrans Settings\ &Window            ÐžÐºÐ½Ð¾\ Ð½Ð°Ñтройки\ &опций
+menutrans Startup\ &Settings           ÐаÑтройки\ Ð·Ð°Ð¿ÑƒÑ&ка
 menutrans &Global\ Settings            &Глобальные\ Ð½Ð°Ñтройки
 menutrans F&ile\ Settings              ÐаÑтройки\ &файлов
 menutrans C&olor\ Scheme               &ЦветоваÑ\ Ñхема
 menutrans &Keymap                      Ð Ð°Ñкладка\ ÐºÐ»&авиатуры
 menutrans Select\ Fo&nt\.\.\.          Ð’ыбор\ &шрифта\.\.\.
 ">>>----------------- Edit/Global settings
-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!     ÐŸÐ¾Ð´Ñветка\ &найденных\ ÑоответÑтвий<Tab>:set\ hls!
-menutrans Toggle\ &Ignore-case<Tab>:set\ ic!            &РегиÑтронезавиÑимый\ Ð¿Ð¾Ð¸Ñк<Tab>:set\ ic!
-menutrans Toggle\ &Showmatch<Tab>:set\ sm!              ÐŸÐ¾ÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ\ Ð¿Ð°Ñ€Ð½Ñ‹Ðµ\ &Ñлементы<Tab>:set\ sm!
-menutrans &Context\ lines                               Ð¡Ñ‚Ñ€&ок\ Ð²Ð¾ÐºÑ€ÑƒÐ³\ ÐºÑƒÑ€Ñора
-menutrans &Virtual\ Edit                                Ð’ир&туальное\ Ñ€ÐµÐ´Ð°ÐºÑ‚ирование
-menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!           Ð ÐµÐ¶Ð¸Ð¼\ &Ð’Ñтавки<Tab>:set\ im!
-menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!                 &СовмеÑтимоÑÑ‚ÑŒ\ Ñ\ Vi<Tab>:set\ cp!
-menutrans Search\ &Path\.\.\.                           &Путь\ Ð´Ð»Ñ\ Ð¿Ð¾Ð¸Ñка\ Ñ„айлов\.\.\.
-menutrans Ta&g\ Files\.\.\.                             Ð¤Ð°Ð¹Ð»Ñ‹\ &меток\.\.\.
-"
-menutrans Toggle\ &Toolbar                              &ИнÑтрументальнаÑ\ Ð¿Ð°Ð½ÐµÐ»ÑŒ
-menutrans Toggle\ &Bottom\ Scrollbar                    ÐŸÐ¾Ð»Ð¾Ñа\ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ки\ Ð²Ð½Ð¸&зу
-menutrans Toggle\ &Left\ Scrollbar                      ÐŸÐ¾Ð»Ð¾Ñа\ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ки\ Ñ&лева
-menutrans Toggle\ &Right\ Scrollbar                     ÐŸÐ¾Ð»Ð¾Ñа\ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ки\ Ñпр&ава
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!   ÐŸÐ¾Ð´Ñветка\ &найденных\ ÑоответÑтвий<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!           &РегиÑтронезавиÑимый\ Ð¿Ð¾Ð¸Ñк<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!             ÐŸÐ¾ÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ\ Ð¿Ð°Ñ€Ð½Ñ‹Ðµ\ &Ñлементы<Tab>:set\ sm!
+menutrans &Context\ lines                              Ð¡Ñ‚Ñ€&ок\ Ð²Ð¾ÐºÑ€ÑƒÐ³\ ÐºÑƒÑ€Ñора
+menutrans &Virtual\ Edit                               Ð’ир&туальное\ Ñ€ÐµÐ´Ð°ÐºÑ‚ирование
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!          Ð ÐµÐ¶Ð¸Ð¼\ &Ð’Ñтавки<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!                &СовмеÑтимоÑÑ‚ÑŒ\ Ñ\ Vi<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\.                          &Путь\ Ð´Ð»Ñ\ Ð¿Ð¾Ð¸Ñка\ Ñ„айлов\.\.\.
+menutrans Ta&g\ Files\.\.\.                            Ð¤Ð°Ð¹Ð»Ñ‹\ &меток\.\.\.
+"
+menutrans Toggle\ &Toolbar                             &ИнÑтрументальнаÑ\ Ð¿Ð°Ð½ÐµÐ»ÑŒ
+menutrans Toggle\ &Bottom\ Scrollbar                   ÐŸÐ¾Ð»Ð¾Ñа\ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ки\ Ð²Ð½Ð¸&зу
+menutrans Toggle\ &Left\ Scrollbar                     ÐŸÐ¾Ð»Ð¾Ñа\ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ки\ Ñ&лева
+menutrans Toggle\ &Right\ Scrollbar                    ÐŸÐ¾Ð»Ð¾Ñа\ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ки\ Ñпр&ава
 ">>>->>>------------- Edit/Global settings/Virtual edit
-menutrans Never                                                 Ð’ыключено
-menutrans Block\ Selection                              ÐŸÑ€Ð¸\ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ð¸\ Ð±Ð»Ð¾ÐºÐ°
-menutrans Insert\ mode                                  Ð’\ Ñ€ÐµÐ¶Ð¸Ð¼Ðµ\ Ð’Ñтавки
-menutrans Block\ and\ Insert                            ÐŸÑ€Ð¸\ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ð¸\ Ð±Ð»Ð¾ÐºÐ°\ Ð¸\ Ð²\ Ñ€ÐµÐ¶Ð¸Ð¼Ðµ\ Ð’Ñтавки
-menutrans Always                                        Ð’ключено\ Ð²Ñегда
+menutrans Never                                                Ð’ыключено
+menutrans Block\ Selection                             ÐŸÑ€Ð¸\ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ð¸\ Ð±Ð»Ð¾ÐºÐ°
+menutrans Insert\ mode                                 Ð’\ Ñ€ÐµÐ¶Ð¸Ð¼Ðµ\ Ð’Ñтавки
+menutrans Block\ and\ Insert                           ÐŸÑ€Ð¸\ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ð¸\ Ð±Ð»Ð¾ÐºÐ°\ Ð¸\ Ð²\ Ñ€ÐµÐ¶Ð¸Ð¼Ðµ\ Ð’Ñтавки
+menutrans Always                                       Ð’ключено\ Ð²Ñегда
 ">>>----------------- Edit/File settings
-menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!        &ÐумерациÑ\ Ñтрок<Tab>:set\ nu!
-menutrans Toggle\ &List\ Mode<Tab>:set\ list!           ÐžÑ‚обра&жение\ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñ‹Ñ…\ Ñимволов<Tab>:set\ list!
-menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!           &ПереноÑ\ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ…\ Ñтрок<Tab>:set\ wrap!
-menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!        ÐŸÐµÑ€ÐµÐ½Ð¾Ñ\ &целых\ Ñлов<Tab>:set\ lbr!
-menutrans Toggle\ &expand-tab<Tab>:set\ et!             ÐŸÑ€Ð¾&белы\ Ð²Ð¼ÐµÑто\ Ñ‚абулÑции<Tab>:set\ et!
-menutrans Toggle\ &auto-indent<Tab>:set\ ai!            ÐвтоматичеÑкое\ Ñ„орматирование\ &отÑтупов<Tab>:set\ ai!
-menutrans Toggle\ &C-indenting<Tab>:set\ cin!           Ð¤Ð¾Ñ€Ð¼Ð°Ñ‚ирование\ Ð¾Ñ‚Ñтупов\ Ð²\ &Ñтиле\ C<Tab>:set\ cin!
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!       &ÐумерациÑ\ Ñтрок<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!    ÐžÑ‚ноÑите&льнаÑ\ Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ð¸Ñ\ Ñтрок<Tab>:set\ nru!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!          ÐžÑ‚обра&жение\ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñ‹Ñ…\ Ñимволов<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!          &ПереноÑ\ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ñ…\ Ñтрок<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!       ÐŸÐµÑ€ÐµÐ½Ð¾Ñ\ &целых\ Ñлов<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!            ÐŸÑ€Ð¾&белы\ Ð²Ð¼ÐµÑто\ Ñ‚абулÑции<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!           ÐвтоматичеÑкое\ Ñ„орматирование\ &отÑтупов<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!          Ð¤Ð¾Ñ€Ð¼Ð°Ñ‚ирование\ Ð¾Ñ‚Ñтупов\ Ð²\ &Ñтиле\ C<Tab>:set\ cin!
 ">>>---
-menutrans &Shiftwidth                                   Ð’ели&чина\ Ð¾Ñ‚Ñтупа
-menutrans Soft\ &Tabstop                                Ð¨Ð¸Ñ€Ð¸Ð½Ð°\ &табулÑции
-menutrans Te&xt\ Width\.\.\.                            &Ширина\ Ñ‚екÑта\.\.\.
-menutrans &File\ Format\.\.\.                           &Формат\ Ñ„айла\.\.\.
+menutrans &Shiftwidth                                  Ð’ели&чина\ Ð¾Ñ‚Ñтупа
+menutrans Soft\ &Tabstop                               Ð¨Ð¸Ñ€Ð¸Ð½Ð°\ &табулÑции
+menutrans Te&xt\ Width\.\.\.                           &Ширина\ Ñ‚екÑта\.\.\.
+menutrans &File\ Format\.\.\.                          &Формат\ Ñ„айла\.\.\.
 "
 "
 "
@@ -129,6 +139,7 @@ menutrans Jump\ &back<Tab>^T                                &ВернутьÑÑ\ Ð½Ð°Ð·Ð°Ð´<Tab>^T
 menutrans Build\ &Tags\ File                           Ð¡Ð¾Ð·Ð´Ð°Ñ‚ÑŒ\ &файл\ Ð¼ÐµÑ‚ок
 "-------------------
 menutrans &Folding                                     Ð Ð°Ð±Ð¾Ñ‚а\ Ñо\ &Ñкладками
+menutrans &Spelling                                    ÐŸÑ€&авопиÑание
 menutrans &Diff                                                &ОтличиÑ\ (diff)
 "-------------------
 menutrans &Make<Tab>:make                              ÐšÐ¾&мпилÑциÑ<Tab>:make
@@ -139,10 +150,26 @@ menutrans &Previous\ Error<Tab>:cp                        ÐŸ&редыдущаÑ\ Ð¾ÑˆÐ¸Ð±ÐºÐ°<Tab>:cp
 menutrans &Older\ List<Tab>:cold                       Ð‘олее\ Ñтар&ый\ ÑпиÑок\ Ð¾ÑˆÐ¸Ð±Ð¾Ðº<Tab>:cold
 menutrans N&ewer\ List<Tab>:cnew                       Ð‘олее\ Ñве&жий\ ÑпиÑок\ Ð¾ÑˆÐ¸Ð±Ð¾Ðº<Tab>:cnew
 menutrans Error\ &Window                               ÐžÐº&но\ Ð¾ÑˆÐ¸Ð±Ð¾Ðº
-menutrans &Set\ Compiler                               Ð’ыбор\ &компилÑтора
+menutrans Se&T\ Compiler                               Ð’ыбор\ &компилÑтора
 "-------------------
 menutrans &Convert\ to\ HEX<Tab>:%!xxd                 ÐŸ&еревеÑти\ Ð²\ HEX<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r                        ÐŸÐµÑ€ÐµÐ²ÐµÑти\ Ð¸&з\ HEX<Tab>:%!xxd\ -r
+">>>---------------- Tools/Spelling
+menutrans &Spell\ Check\ On                            &Вкл\ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ\ Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниÑ
+menutrans Spell\ Check\ &Off                           Ð’Ñ‹&кл\ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ\ Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниÑ
+menutrans To\ &Next\ error<Tab>]s                      &СледующаÑ\ Ð¾ÑˆÐ¸Ð±ÐºÐ°
+menutrans To\ &Previous\ error<Tab>[s                  &ПредыдущаÑ\ Ð¾ÑˆÐ¸Ð±ÐºÐ°
+menutrans Suggest\ &Corrections<Tab>z=                 ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶Ð¸Ñ‚ÑŒ\ Ð¸Ñп&равлениÑ
+menutrans &Repeat\ correction<Tab>:spellrepall         ÐŸÐ¾Ð²&торить\ Ð¸Ñправление\ Ð´Ð»Ñ\ Ð²Ñех
+"-------------------
+menutrans Set\ language\ to\ "en"                      Ð£Ñтановить\ Ñзык\ "en"
+menutrans Set\ language\ to\ "en_au"                   Ð£Ñтановить\ Ñзык\ "en_au"
+menutrans Set\ language\ to\ "en_ca"                   Ð£Ñтановить\ Ñзык\ "en_ca"
+menutrans Set\ language\ to\ "en_gb"                   Ð£Ñтановить\ Ñзык\ "en_gb"
+menutrans Set\ language\ to\ "en_nz"                   Ð£Ñтановить\ Ñзык\ "en_nz"
+menutrans Set\ language\ to\ "en_us"                   Ð£Ñтановить\ Ñзык\ "en_us"
+menutrans &Find\ More\ Languages                       &Ðайти\ Ð±Ð¾Ð»ÑŒÑˆÐµ\ Ñзыков
+let g:menutrans_set_lang_to =                          'УÑтановить Ñзык'
 ">>>---------------- Folds
 menutrans &Enable/Disable\ folds<Tab>zi                        Ð’кл/выкл\ &Ñкладки<Tab>zi
 menutrans &View\ Cursor\ Line<Tab>zv                   ÐžÑ‚крыть\ Ñтроку\ Ñ\ &курÑором<Tab>zv
@@ -217,7 +244,7 @@ menutrans M&in\ Height<Tab>^W1_                             ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ\ Ð²Ñ‹Ñо&та<Tab>^W1
 menutrans Max\ &Width<Tab>^W\|                         ÐœÐ°ÐºÑимальнаÑ\ &ширина<Tab>^W\|
 menutrans Min\ Widt&h<Tab>^W1\|                                ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»&ьнаÑ\ ÑˆÐ¸Ñ€Ð¸Ð½Ð°<Tab>^W1\|
 ">>>----------------- Window/Move To
-menutrans &Top<Tab>^WK                                 Ã\9dð&верх<Tab>^WK
+menutrans &Top<Tab>^WK                                 Ã\92&верх<Tab>^WK
 menutrans &Bottom<Tab>^WJ                              Ð’&низ<Tab>^WJ
 menutrans &Left\ side<Tab>^WH                          Ð’&лево<Tab>^WH
 menutrans &Right\ side<Tab>^WL                         Ð’&право<Tab>^WL
@@ -294,3 +321,6 @@ let g:menutrans_fileformat_dialog = "Выберите Ñ„ормат Ñ„айла."
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\nО&тмена"
 "
 let menutrans_no_file = "[Ðет Ñ„айла]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index bace7d2..69de4e7 100644 (file)
@@ -1,12 +1,14 @@
 " Menu Translations:   Slovak
 " Translated By:       Martin Lacko <lacko@host.sk>
-" Last Change:         2003 Mar 30
+" Last Change:         2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding iso-8859-2
 
@@ -230,3 +232,6 @@ menutrans on/off\ for\ &This\ file  Zapn
 menutrans Co&lor\ test         Test\ &farieb
 menutrans &Highlight\ test     &Test\ zvýrazòovania
 menutrans &Convert\ to\ HTML   &Previes»\ do\ HTML
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 23f668c..8999b15 100644 (file)
@@ -11,6 +11,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp1250
 
@@ -292,3 +294,6 @@ let g:menutrans_textwidth_dialog = "Vnesite novo 
 let g:menutrans_fileformat_dialog = "Izberite format datoteke"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Preklièi"
 " }}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 57d6c89..fd50387 100644 (file)
@@ -11,6 +11,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding latin2
 
@@ -292,3 +294,6 @@ let g:menutrans_textwidth_dialog = "Vnesite novo 
 let g:menutrans_fileformat_dialog = "Izberite format datoteke"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Preklièi"
 " }}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 306e449..7043e62 100644 (file)
@@ -11,6 +11,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -292,3 +294,6 @@ let g:menutrans_textwidth_dialog = "Vnesite novo Å¡irino besedila (ali 0 za izkl
 let g:menutrans_fileformat_dialog = "Izberite format datoteke"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&PrekliÄi"
 " }}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 1df513d..cfc6078 100644 (file)
@@ -1,12 +1,14 @@
 " Menu Translations:   Slovak
 " Translated By:       Martin Lacko <lacko@host.sk>
-" Last Change:         2006 Jun 17
+" Last Change:         2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp1250
 
@@ -230,3 +232,6 @@ menutrans on/off\ for\ &This\ file  Zapn
 menutrans Co&lor\ test         Test\ &farieb
 menutrans &Highlight\ test     &Test\ zvýrazòovania
 menutrans &Convert\ to\ HTML   &Previes\9d\ do\ HTML
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 14a9026..8a12dad 100644 (file)
@@ -7,6 +7,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Help menu
 menutrans &Help                      Pomo&c
@@ -256,3 +258,6 @@ let g:menutrans_textwidth_dialog = "Unesite novu sirinu teksta (0 sprecava prelo
 let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
 
 let menutrans_no_file = "[Nema datoteke]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 992124c..f4b8c68 100644 (file)
@@ -7,6 +7,9 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding iso8859-2
 
 " Help menu
@@ -257,3 +260,6 @@ let g:menutrans_textwidth_dialog = "Unesite novu 
 let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
 
 let menutrans_no_file = "[Nema datoteke]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index e4d322d..dd3b436 100644 (file)
@@ -7,6 +7,9 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding iso8859-5
 
 " Help menu
@@ -257,3 +260,6 @@ let g:menutrans_textwidth_dialog = "
 let g:menutrans_fileformat_dialog = "¸×ÃÑÕàØâÕ Ã’àáâã Ã”ÃâÞâÕÚÕ"
 
 let menutrans_no_file = "[½ÕÜàÔÃâÞâÕÚÕ]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 85f1491..b9e536d 100644 (file)
@@ -7,6 +7,9 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding utf-8
 
 " Help menu
@@ -258,4 +261,7 @@ let g:menutrans_fileformat_dialog = "Изаберите Ð²Ñ€Ñту Ð´Ð°Ñ‚оте
 
 let menutrans_no_file = "[Ðема Ð´Ð°Ñ‚отеке]"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: tw=0 keymap=serbian
index 8935e0d..2e37485 100644 (file)
@@ -1,12 +1,14 @@
 " Menu Translations:    Swedish
 " Maintainer:          Johan Svedberg <johan@svedberg.com>
-" Last Change:         2006 Apr 13
+" Last Change:         2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -248,3 +250,6 @@ let g:menutrans_path_dialog = "Skriv in s
 let g:menutrans_tags_dialog = "Skriv in namn pÃ¥ taggfiler.\nSeparera namn med komma."
 let g:menutrans_textwidth_dialog = "Välj ny textbredd (0 för att förhindra formatering): "
 let g:menutrans_fileformat_dialog = "Välj filformat som filen ska sparas med"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index a517ecd..2e751c8 100644 (file)
@@ -12,6 +12,9 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding cp1251
 
 " Help menu
@@ -244,3 +247,5 @@ let g:menutrans_tags_dialog = "
 let g:menutrans_textwidth_dialog = "Âêàæ³òü Ã­Ã®Ã¢Ã³ Ã¸Ã¨Ã°Ã¨Ã­Ã³ Ã²Ã¥ÃªÃ±Ã²Ã³ (0 Ã¤Ã«Ã¿ Ã¢Â³Ã¤Ã¬Â³Ã­Ã¨ Ã´Ã®Ã¬Ã Ã²Ã³Ã¢Ã Ã­Ã­Ã¿)"
 let g:menutrans_fileformat_dialog = "Âèáåð³òü Ã´Ã®Ã°Ã¬Ã Ã² Ã´Ã Ã©Ã«Ã³"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 6284145..c44700e 100644 (file)
@@ -12,6 +12,9 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding koi8-u
 
 " Help menu
@@ -244,3 +247,5 @@ let g:menutrans_tags_dialog = "
 let g:menutrans_textwidth_dialog = "÷ËÃÖ¦ÔØ ÃŽÃ×ՠÛÉÒÉÎՠÔÅËÓÔÕ (0 Ã„ÌѠצÄæÎɠÆÃÃÃÔÕ×ÃÎÎÑ)"
 let g:menutrans_fileformat_dialog = "÷ÉÂÅÒ¦ÔؠÆÃÃ’ÃÃԠÆÃÊÌÕ"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 4b2b21f..9fbd2c6 100644 (file)
@@ -14,6 +14,8 @@ if exists("did_menu_trans")
    finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -327,3 +329,6 @@ let g:menutrans_fileformat_dialog = "Hãy chá»n Ä‘ịnh dạng tập tin."
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Hủy bá»"
 "
 let menutrans_no_file = "[không có tập tin]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 3ec825c..a12d94d 100644 (file)
@@ -9,6 +9,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " This causes trouble for a broken iconv (symptom: last character is always
 " ??).  Without this it works fine anyway, because gbk/cp936 is a superset of
@@ -264,3 +266,6 @@ menutrans &Highlight\ test          
 menutrans &Convert\ to\ HTML           Ã—ª»»³É\ HTML(&C)
 menutrans Set\ '&syntax'\ only         Â½Ã¶Ã‰Ã¨Â¶Â¨\ 'syntax'(&S)
 menutrans Set\ '&filetype'\ too                Ã’²É趨\ 'filetype'(&F)
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 04f192f..956363d 100644 (file)
@@ -9,6 +9,8 @@ if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -261,3 +263,6 @@ menutrans &Highlight\ test          é«˜äº®æµ‹è¯•(&H)
 menutrans &Convert\ to\ HTML           è½¬æ¢æˆ\ HTML(&C)
 menutrans Set\ '&syntax'\ only         ä»…设定\ 'syntax'(&S)
 menutrans Set\ '&filetype'\ too                ä¹Ÿè®¾å®š\ 'filetype'(&F)
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 97c56a3..7bef83c 100644 (file)
@@ -1,6 +1,6 @@
 " Menu Translations:   Traditional Chinese
 " Translated By:       Hung-Te Lin     <piaip@csie.ntu.edu.tw>
-" Last Change:         2005/01/28 02:51:38
+" Last Change:         2012 May 01
 
 " {{{ Quit when menu translations have already been done.
 if exists("did_menu_trans")
@@ -9,6 +9,9 @@ endif
 let did_menu_trans = 1
 " }}}
 
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding utf-8
 
 " {{{ Help menu: complete
@@ -282,4 +285,7 @@ if has("toolbar")
 endif
 " }}}
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:foldmethod=marker:nowrap:foldcolumn=2:foldlevel=1
index 07c55f6..c18f225 100644 (file)
@@ -1,6 +1,6 @@
 " Vim Plugin:  Edit the file with an existing Vim if possible
 " Maintainer:  Bram Moolenaar
-" Last Change: 2008 May 29
+" Last Change: 2013 Feb 24
 
 " This is a plugin, drop it in your (Unix) ~/.vim/plugin or (Win32)
 " $VIM/vimfiles/plugin directory.  Or make a symbolic link, so that you
@@ -98,7 +98,7 @@ func! EditExisting(fname, command)
        " Make this tab page the current one and find the window number.
        exe 'tabnext ' . (i + 1)
        let winnr = bufwinnr(a:fname)
-       break;
+       break
       endif
     endfor
   endif
index aa4a9ca..4ef3bf9 100644 (file)
@@ -1,4 +1,4 @@
-" Function to left and rigt align text.
+" Function to left and right align text.
 "
 " Written by:  Preben "Peppe" Guldberg <c928400@student.dtu.dk>
 " Created:     980806 14:13 (or around that time anyway)
@@ -256,18 +256,17 @@ function! Justify(...) range
        let str = substitute(str, '\s\+$', '', '')
        let str = substitute(str, '^\s\+', '', '')
        let str = substitute(str, '\s\+', ' ', 'g')
-       " Use substitute() hack to get strlen in characters instead of bytes
-       let str_n = strlen(substitute(str, '.', 'x', 'g'))
+       let str_n = strdisplaywidth(str)
 
        " Possible addition of space after punctuation
        if exists("join_str")
            let str = substitute(str, join_str, '\1 ', 'g')
        endif
-       let join_n = strlen(substitute(str, '.', 'x', 'g')) - str_n
+       let join_n = strdisplaywidth(str) - str_n
 
        " Can extraspaces be added?
        " Note that str_n may be less than strlen(str) [joinspaces above]
-       if strlen(substitute(str, '.', 'x', 'g')) < tw - indent_n && str_n > 0
+       if strdisplaywidth(str) <= tw - indent_n && str_n > 0
            " How many spaces should be added
            let s_add = tw - str_n - indent_n - join_n
            let s_nr  = strlen(substitute(str, '\S', '', 'g') ) - join_n
diff --git a/runtime/macros/less.bat b/runtime/macros/less.bat
new file mode 100644 (file)
index 0000000..bbe619b
--- /dev/null
@@ -0,0 +1,10 @@
+@echo off
+rem batch file to start Vim with less.vim.
+rem Read stdin if no arguments were given.
+rem Written by Ken Takata.
+
+if "%1"=="" (
+  vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -
+) else (
+  vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" %*
+)
index 484c714..e29958f 100755 (executable)
@@ -1,16 +1,24 @@
 #!/bin/sh
 # Shell script to start Vim with less.vim.
-# Read stdin if no arguments were given.
+# Read stdin if no arguments were given and stdin was redirected.
 
 if test -t 1; then
- if test $# = 0; then
-   vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
+  if test $# = 0; then
+    if test -t 0; then
+      echo "Missing filename" 1>&2
+      exit
+    fi
+    vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
   else
-   vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
+    vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
   fi
 else
   # Output is not a terminal, cat arguments or stdin
   if test $# = 0; then
+    if test -t 0; then
+      echo "Missing filename" 1>&2
+      exit
+    fi
     cat
   else
     cat "$@"
index 959a5d7..6ae5ebc 100644 (file)
@@ -1,6 +1,6 @@
 " Vim script to work like "less"
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2006 Dec 05
+" Last Change: 2012 May 18
 
 " Avoid loading this file twice, allow the user to define his own script.
 if exists("loaded_less")
@@ -92,7 +92,8 @@ map <Esc><Space> <Space>
 fun! s:NextPage()
   if line(".") == line("$")
     if argidx() + 1 >= argc()
-      quit
+      " Don't quit at the end of the last file
+      return
     endif
     next
     1
index 549c26c..74c1a1e 100644 (file)
@@ -131,7 +131,7 @@ function! s:Match_wrapper(word, forward, mode) range
     " let default = substitute(escape(&mps, '[$^.*~\\/?]'), '[,:]\+',
     "  \ '\\|', 'g').'\|\/\*\|\*\/\|#if\>\|#ifdef\>\|#else\>\|#elif\>\|#endif\>'
     let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
-      \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>'
+      \ '\/\*:\*\/,#\s*if\%(def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>'
     " s:all = pattern with all the keywords
     let match_words = match_words . (strlen(match_words) ? "," : "") . default
     if match_words !~ s:notslash . '\\\d'
@@ -649,7 +649,7 @@ fun! s:MultiMatch(spflag, mode)
   "   s:all    regexp based on s:pat and the default groups
   " This part is copied and slightly modified from s:Match_wrapper().
   let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
-    \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>'
+    \ '\/\*:\*\/,#\s*if\%(def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>'
   " Allow b:match_words = "GetVimMatchWords()" .
   if b:match_words =~ ":"
     let match_words = b:match_words
@@ -808,5 +808,6 @@ fun! s:ParseSkip(str)
 endfun
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:sts=2:sw=2:
index c4d8bc2..b78fdfd 100644 (file)
@@ -1,6 +1,6 @@
 " Script to define the syntax menu in synmenu.vim
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2010 Aug 04
+" Last Change: 2013 Jul 28
 
 " This is used by "make menu" in the src directory.
 edit <sfile>:p:h/synmenu.vim
@@ -66,9 +66,11 @@ SynMenu AB.ANTLR:antlr
 SynMenu AB.Apache\ config:apache
 SynMenu AB.Apache-style\ config:apachestyle
 SynMenu AB.Applix\ ELF:elf
+SynMenu AB.APT\ config:aptconf
 SynMenu AB.Arc\ Macro\ Language:aml
 SynMenu AB.Arch\ inventory:arch
 SynMenu AB.ART:art
+SynMenu AB.Ascii\ Doc:asciidoc
 SynMenu AB.ASP\ with\ VBScript:aspvbs
 SynMenu AB.ASP\ with\ Perl:aspperl
 SynMenu AB.Assembly.680x0:asm68k
@@ -128,6 +130,7 @@ SynMenu C.ChordPro:chordpro
 SynMenu C.Clean:clean
 SynMenu C.Clever:cl
 SynMenu C.Clipper:clipper
+SynMenu C.Clojure:clojure
 SynMenu C.Cmake:cmake
 SynMenu C.Cmusrc:cmusrc
 SynMenu C.Cobol:cobol
@@ -139,6 +142,7 @@ SynMenu C.Config.Configure\.in:config
 SynMenu C.Config.Generic\ Config\ file:conf
 SynMenu C.CRM114:crm
 SynMenu C.Crontab:crontab
+SynMenu C.CSDL:csdl
 SynMenu C.CSP:csp
 SynMenu C.Ctrl-H:ctrlh
 SynMenu C.Cucumber:cucumber
@@ -164,6 +168,7 @@ SynMenu DE.Digital\ Command\ Lang:dcl
 SynMenu DE.Dircolors:dircolors
 SynMenu DE.Django\ template:django
 SynMenu DE.DNS/BIND\ zone:bindzone
+SynMenu DE.Dnsmasq\ config:dnsmasq
 SynMenu DE.DocBook.auto-detect:docbk
 SynMenu DE.DocBook.SGML:docbksgml
 SynMenu DE.DocBook.XML:docbkxml
@@ -177,6 +182,7 @@ SynMenu DE.DSSSL:dsl
 SynMenu DE.DTD:dtd
 SynMenu DE.DTML\ (Zope):dtml
 SynMenu DE.DTrace:dtrace
+SynMenu DE.Dts/dtsi:dts
 SynMenu DE.Dylan.Dylan:dylan
 SynMenu DE.Dylan.Dylan\ interface:dylanintr
 SynMenu DE.Dylan.Dylan\ lid:dylanlid
@@ -197,6 +203,7 @@ SynMenu DE.Exim\ conf:exim
 SynMenu DE.Expect:expect
 SynMenu DE.Exports:exports
 
+SynMenu FG.Falcon:falcon
 SynMenu FG.Fantom:fan
 SynMenu FG.Fetchmail:fetchmail
 SynMenu FG.FlexWiki:flexwiki
@@ -220,9 +227,12 @@ SynMenu FG.Git.Commit:gitcommit
 SynMenu FG.Git.Config:gitconfig
 SynMenu FG.Git.Rebase:gitrebase
 SynMenu FG.Git.Send\ Email:gitsendemail
+SynMenu FG.Gitolite:gitolite
 SynMenu FG.Gkrellmrc:gkrellmrc
+SynMenu FG.Gnash:gnash
 SynMenu FG.GP:gp
 SynMenu FG.GPG:gpg
+SynMenu FG.Grof:gprof
 SynMenu FG.Group\ file:group
 SynMenu FG.Grub:grub
 SynMenu FG.GNU\ Server\ Pages:gsp
@@ -243,6 +253,7 @@ SynMenu HIJK.HASTE\ preproc:hastepreproc
 SynMenu HIJK.Hercules:hercules
 SynMenu HIJK.Hex\ dump.XXD:xxd
 SynMenu HIJK.Hex\ dump.Intel\ MCS51:hex
+SynMenu HIJK.Hg\ commit:hgcommit
 SynMenu HIJK.HTML.HTML:html
 SynMenu HIJK.HTML.HTML\ with\ M4:htmlm4
 SynMenu HIJK.HTML.HTML\ with\ Ruby\ (eRuby):eruby
@@ -251,6 +262,7 @@ SynMenu HIJK.HTML.Django\ HTML\ template:htmldjango
 SynMenu HIJK.HTML.HTML/OS:htmlos
 SynMenu HIJK.HTML.XHTML:xhtml
 SynMenu HIJK.Host\.conf:hostconf
+SynMenu HIJK.Hosts\ access:hostsaccess
 SynMenu HIJK.Hyper\ Builder:hb
 SynMenu HIJK.Icewm\ menu:icemenu
 SynMenu HIJK.Icon:icon
@@ -262,6 +274,11 @@ SynMenu HIJK.Informix\ 4GL:fgl
 SynMenu HIJK.Initng:initng
 SynMenu HIJK.Inittab:inittab
 SynMenu HIJK.Inno\ setup:iss
+SynMenu HIJK.Innovation\ Data\ Processing.Upstream\ dat:upstreamdat
+SynMenu HIJK.Innovation\ Data\ Processing.Upstream\ log:upstreamlog
+SynMenu HIJK.Innovation\ Data\ Processing.Upstream\ Install\ log:upstreaminstalllog
+SynMenu HIJK.Innovation\ Data\ Processing.Usserver\ log:usserverlog
+SynMenu HIJK.Innovation\ Data\ Processing.USW2KAgt\ log:usw2kagtlog
 SynMenu HIJK.InstallShield\ script:ishd
 SynMenu HIJK.Interactive\ Data\ Lang:idlang
 SynMenu HIJK.IPfilter:ipfilter
@@ -275,6 +292,7 @@ SynMenu HIJK.Java.Java\ Properties:jproperties
 SynMenu HIJK.JavaScript:javascript
 SynMenu HIJK.Jess:jess
 SynMenu HIJK.Jgraph:jgraph
+SynMenu HIJK.Jovial:jovial
 SynMenu HIJK.Kconfig:kconfig
 SynMenu HIJK.KDE\ script:kscript
 SynMenu HIJK.Kimwitu++:kwt
@@ -314,6 +332,7 @@ SynMenu M.MaGic\ Point:mgp
 SynMenu M.Mail:mail
 SynMenu M.Mail\ aliases:mailaliases
 SynMenu M.Mailcap:mailcap
+SynMenu M.Mallard:mallard
 SynMenu M.Makefile:make
 SynMenu M.MakeIndex:ist
 SynMenu M.Man\ page:man
@@ -355,6 +374,7 @@ SynMenu NO.Nanorc:nanorc
 SynMenu NO.Nastran\ input/DMAP:nastran
 SynMenu NO.Natural:natural
 SynMenu NO.Netrc:netrc
+SynMenu NO.Ninja:ninja
 SynMenu NO.Novell\ NCF\ batch:ncf
 SynMenu NO.Not\ Quite\ C\ (LEGO):nqc
 SynMenu NO.Nroff:nroff
@@ -381,6 +401,9 @@ SynMenu PQ.Perl.Perl:perl
 SynMenu PQ.Perl.Perl\ 6:perl6
 SynMenu PQ.Perl.Perl\ POD:pod
 SynMenu PQ.Perl.Perl\ XS:xs
+SynMenu PQ.Perl.Template\ toolkit:tt2
+SynMenu PQ.Perl.Template\ toolkit\ Html:tt2html
+SynMenu PQ.Perl.Template\ toolkit\ JS:tt2js
 SynMenu PQ.PHP.PHP\ 3-4:php
 SynMenu PQ.PHP.Phtml\ (PHP\ 2):phtml
 SynMenu PQ.Pike:pike
@@ -388,6 +411,7 @@ SynMenu PQ.Pine\ RC:pine
 SynMenu PQ.Pinfo\ RC:pinfo
 SynMenu PQ.PL/M:plm
 SynMenu PQ.PL/SQL:plsql
+SynMenu PQ.Pli:pli
 SynMenu PQ.PLP:plp
 SynMenu PQ.PO\ (GNU\ gettext):po
 SynMenu PQ.Postfix\ main\ config:pfmain
@@ -404,6 +428,7 @@ SynMenu PQ.Product\ Spec\ File:psf
 SynMenu PQ.Progress:progress
 SynMenu PQ.Prolog:prolog
 SynMenu PQ.ProMeLa:promela
+SynMenu PQ.Proto:proto
 SynMenu PQ.Protocols:protocols
 SynMenu PQ.Purify\ log:purifylog
 SynMenu PQ.Pyrex:pyrex
@@ -421,6 +446,8 @@ SynMenu R.RCS.RCS\ log\ output:rcslog
 SynMenu R.RCS.RCS\ file:rcs
 SynMenu R.Readline\ config:readline
 SynMenu R.Rebol:rebol
+SynMenu R.ReDIF:redif
+SynMenu R.Relax\ NG:rng
 SynMenu R.Remind:remind
 SynMenu R.Relax\ NG\ compact:rnc
 SynMenu R.Renderman.Renderman\ Shader\ Lang:sl
@@ -494,6 +521,7 @@ SynMenu Sn-Sy.Spyce:spyce
 SynMenu Sn-Sy.Speedup:spup
 SynMenu Sn-Sy.Splint:splint
 SynMenu Sn-Sy.Squid\ config:squid
+SynMenu Sn-Sy.SQL.SAP\ HANA:sqlhana
 SynMenu Sn-Sy.SQL.ESQL-C:esqlc
 SynMenu Sn-Sy.SQL.MySQL:mysql
 SynMenu Sn-Sy.SQL.PL/SQL:plsql
@@ -523,6 +551,7 @@ SynMenu T.Tags:tags
 SynMenu T.TAK.TAK\ compare:takcmp
 SynMenu T.TAK.TAK\ input:tak
 SynMenu T.TAK.TAK\ output:takout
+SynMenu T.Tar\ listing:tar
 SynMenu T.Task\ data:taskdata
 SynMenu T.Task\ 42\ edit:taskedit
 SynMenu T.Tcl/Tk:tcl
@@ -532,6 +561,7 @@ SynMenu T.Termcap/Printcap:ptcap
 SynMenu T.Terminfo:terminfo
 SynMenu T.TeX.TeX/LaTeX:tex
 SynMenu T.TeX.plain\ TeX:plaintex
+SynMenu T.TeX.Initex:initex
 SynMenu T.TeX.ConTeXt:context
 SynMenu T.TeX.TeX\ configuration:texmf
 SynMenu T.TeX.Texinfo:texinfo
@@ -540,6 +570,7 @@ SynMenu T.Tidy\ configuration:tidy
 SynMenu T.Tilde:tilde
 SynMenu T.TPP:tpp
 SynMenu T.Trasys\ input:trasys
+SynMenu T.Treetop:treetop
 SynMenu T.Trustees:trustees
 SynMenu T.TSS.Command\ Line:tsscl
 SynMenu T.TSS.Geometry:tssgm
@@ -551,6 +582,7 @@ SynMenu UV.Udev\ rules:udevrules
 SynMenu UV.UIT/UIL:uil
 SynMenu UV.UnrealScript:uc
 SynMenu UV.Updatedb\.conf:updatedb
+SynMenu UV.Upstart:upstart
 SynMenu UV.Valgrind:valgrind
 SynMenu UV.Vera:vera
 SynMenu UV.Verilog-AMS\ HDL:verilogams
@@ -594,6 +626,7 @@ SynMenu WXYZ.Xslt:xslt
 SynMenu WXYZ.XFree86\ Config:xf86conf
 SynMenu WXYZ.YAML:yaml
 SynMenu WXYZ.Yacc:yacc
+SynMenu WXYZ.Zimbu:zimbu
 
 call append(s:lnum, "")
 
index 2cbd55c..f4ff9dc 100644 (file)
@@ -2,7 +2,7 @@
 " You can also use this as a start for your own set of menus.
 "
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2009 Feb 26
+" Last Change: 2013 May 17
 
 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
 " in all modes and avoid side effects from mappings defined by the user.
@@ -101,7 +101,7 @@ an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp   :browse sp<CR>
 an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew    :browse tabnew<CR>
 an 10.325 &File.&New<Tab>:enew                 :confirm enew<CR>
 an <silent> 10.330 &File.&Close<Tab>:close
-       \ :if winheight(2) < 0 <Bar>
+       \ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
        \   confirm enew <Bar>
        \ else <Bar>
        \   confirm close <Bar>
@@ -132,7 +132,7 @@ an 10.610 &File.Sa&ve-Exit<Tab>:wqa         :confirm wqa<CR>
 an 10.620 &File.E&xit<Tab>:qa                  :confirm qa<CR>
 
 func! <SID>SelectAll()
-  exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
+  exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
 endfunc
 
 func! s:FnameEscape(fname)
@@ -308,8 +308,10 @@ fun! s:TextWidth()
   endif
   let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
   if n != ""
-    " remove leading zeros to avoid it being used as an octal number
-    let &tw = substitute(n, "^0*", "", "")
+    " Remove leading zeros to avoid it being used as an octal number.
+    " But keep a zero by itself.
+    let tw = substitute(n, "^0*", "", "")
+    let &tw = tw == '' ? 0 : tw 
   endif
 endfun
 
@@ -434,6 +436,10 @@ if has("spell")
       let enc = &enc
     endif
 
+    if !exists("g:menutrans_set_lang_to")
+      let g:menutrans_set_lang_to = 'Set language to'
+    endif
+
     let found = 0
     let s = globpath(&rtp, "spell/*." . enc . ".spl")
     if s != ""
@@ -441,8 +447,9 @@ if has("spell")
       for f in split(s, "\n")
        let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
        if nm != "en" && nm !~ '/'
+          let _nm = nm
          let found += 1
-         let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
+         let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
          exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
          let s:undo_spellang += ['aun ' . menuname]
        endif
@@ -452,7 +459,7 @@ if has("spell")
     if found == 0
       echomsg "Could not find other spell files"
     elseif found == 1
-      echomsg "Found spell file " . nm
+      echomsg "Found spell file " . _nm
     else
       echomsg "Found " . found . " more spell files"
     endif
index 1ceef84..ca280d2 100644 (file)
@@ -1,7 +1,7 @@
 " Set options and add mapping such that Vim behaves a lot like MS-Windows
 "
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last change: 2006 Apr 02
+" Last change: 2012 Jul 25
 
 " bail out if this isn't wanted (mrsvim.vim uses this).
 if exists("g:skip_loading_mswin") && g:skip_loading_mswin
@@ -42,9 +42,10 @@ cmap <S-Insert>              <C-R>+
 " Visual mode without the +virtualedit feature.  They are pasted as if they
 " were characterwise instead.
 " Uses the paste.vim autoload script.
+" Use CTRL-G u to have CTRL-Z only undo the paste.
 
-exe 'inoremap <script> <C-V>' paste#paste_cmd['i']
-exe 'vnoremap <script> <C-V>' paste#paste_cmd['v']
+exe 'inoremap <script> <C-V> <C-G>u' . paste#paste_cmd['i']
+exe 'vnoremap <script> <C-V> ' . paste#paste_cmd['v']
 
 imap <S-Insert>                <C-V>
 vmap <S-Insert>                <C-V>
index 20f4f92..df36883 100644 (file)
@@ -1,7 +1,7 @@
 " These commands create the option window.
 "
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2010 Jul 24
+" Last Change: 2013 Jun 29
 
 " If there already is an option window, jump to that one.
 if bufwinnr("option-window") > 0
@@ -10,7 +10,7 @@ if bufwinnr("option-window") > 0
     if @% == "option-window"
       finish
     endif
-    exe "norm! \<C-W>w"
+    wincmd w
     if s:thiswin == winnr()
       break
     endif
@@ -26,12 +26,8 @@ set cpo&vim
 fun! <SID>CR()
 
   " If on a continued comment line, go back to the first comment line
-  let lnum = line(".")
+  let lnum = search("^[^\t]", 'bWcn')
   let line = getline(lnum)
-  while line[0] == "\t"
-    let lnum = lnum - 1
-    let line = getline(lnum)
-  endwhile
 
   " <CR> on a "set" line executes the option line
   if match(line, "^ \tset ") >= 0
@@ -82,11 +78,11 @@ fun! <SID>Find(lnum)
     if getline(a:lnum - 1) =~ "(local to"
       let local = 1
       let thiswin = winnr()
-      exe "norm! \<C-W>p"
+      wincmd p
       if exists("b:current_syntax") && b:current_syntax == "help"
-       exe "norm! \<C-W>j"
+       wincmd j
        if winnr() == thiswin
-         exe "norm! \<C-W>j"
+         wincmd j
        endif
       endif
     else
@@ -111,10 +107,10 @@ fun! <SID>Update(lnum, line, local, thiswin)
   if name == "pt" && &pt =~ "\x80"
     let val = <SID>PTvalue()
   else
-    exe "let val = substitute(&" . name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
+    let val = escape(eval('&' . name), " \t\\\"|")
   endif
   if a:local
-    exe "norm! " . a:thiswin . "\<C-W>w"
+    exe a:thiswin . "wincmd w"
   endif
   if match(a:line, "=") >= 0 || (val != "0" && val != "1")
     call setline(a:lnum, " \tset " . name . "=" . val)
@@ -139,7 +135,7 @@ set notitle noicon nosc noru
 " Relies on syntax highlighting to be switched on.
 let s:thiswin = winnr()
 while exists("b:current_syntax") && b:current_syntax == "help"
-  exe "norm! \<C-W>w"
+  wincmd w
   if s:thiswin == winnr()
     break
   endif
@@ -147,7 +143,7 @@ endwhile
 
 " Open the window
 new option-window
-setlocal ts=15 tw=0 noro
+setlocal ts=15 tw=0 noro buftype=nofile
 
 " Insert help and a "set" command for each option.
 call append(0, '" Each "set" line shows the current value of an option (on the left).')
@@ -162,9 +158,7 @@ call append(6, '" Hit <Space> on a "set" line to refresh it.')
 
 " Init a local binary option
 fun! <SID>BinOptionL(name)
-  exe "norm! \<C-W>p"
-  exe "let val = &" . a:name
-  exe "norm! \<C-W>p"
+  let val = getwinvar(winnr('#'), '&' . a:name)
   call append("$", substitute(substitute(" \tset " . val . a:name . "\t" .
        \!val . a:name, "0", "no", ""), "1", "", ""))
 endfun
@@ -177,16 +171,13 @@ endfun
 
 " Init a local string option
 fun! <SID>OptionL(name)
-  exe "norm! \<C-W>p"
-  exe "let val = substitute(&" . a:name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
-  exe "norm! \<C-W>p"
+  let val = escape(getwinvar(winnr('#'), '&' . a:name), " \t\\\"|")
   call append("$", " \tset " . a:name . "=" . val)
 endfun
 
 " Init a global string option
 fun! <SID>OptionG(name, val)
-  call append("$", " \tset " . a:name . "=" . substitute(a:val, '[ \t\\"|]',
-       \ '\\\0', "g"))
+  call append("$", " \tset " . a:name . "=" . escape(a:val, " \t\\\"|"))
 endfun
 
 let s:idx = 1
@@ -267,6 +258,8 @@ call append("$", "incsearch\tshow match for partly typed search command")
 call <SID>BinOptionG("is", &is)
 call append("$", "magic\tchange the way backslashes are used in search patterns")
 call <SID>BinOptionG("magic", &magic)
+call append("$", "regexpengine\tselect the default regexp engine used")
+call <SID>OptionG("re", &re)
 call append("$", "ignorecase\tignore case when using a search pattern")
 call <SID>BinOptionG("ic", &ic)
 call append("$", "smartcase\toverride 'ignorecase' when pattern has upper case characters")
@@ -315,6 +308,8 @@ if has("cscope")
   call append("$", " \tset cspc=" . &cspc)
   call append("$", "cscopequickfix\twhen to open a quickfix window for cscope")
   call <SID>OptionG("csqf", &csqf)
+  call append("$", "cscoperelative\tfile names in a cscope file are relative to that file")
+  call <SID>BinOptionG("csre", &csre)
 endif
 
 
@@ -1042,6 +1037,10 @@ if has("wildignore")
   call append("$", "wildignore\tlist of patterns to ignore files for file name completion")
   call <SID>OptionG("wig", &wig)
 endif
+call append("$", "fileignorecase\tignore case when using file names")
+call <SID>BinOptionG("fic", &fic)
+call append("$", "wildignorecase\tignore case when completing file names")
+call <SID>BinOptionG("wic", &wic)
 if has("wildmenu")
   call append("$", "wildmenu\tcommand-line completion shows a list of matches")
   call <SID>BinOptionG("wmnu", &wmnu)
@@ -1069,6 +1068,8 @@ call append("$", "shellquote\tcharacter(s) to enclose a shell command in")
 call <SID>OptionG("shq", &shq)
 call append("$", "shellxquote\tlike 'shellquote' but include the redirection")
 call <SID>OptionG("sxq", &sxq)
+call append("$", "shellxescape\tcharacters to escape when 'shellxquote' is (")
+call <SID>OptionG("sxe", &sxe)
 call append("$", "shellcmdflag\targument for 'shell' to execute a command")
 call <SID>OptionG("shcf", &shcf)
 call append("$", "shellredir\tused to redirect command output to a file")
@@ -1197,6 +1198,10 @@ call <SID>OptionL("ims")
 if has("xim")
   call append("$", "imcmdline\twhen set always use IM when starting to edit a command line")
   call <SID>BinOptionG("imc", &imc)
+  call append("$", "imstatusfunc\tfunction to obtain IME status")
+  call <SID>OptionG("imsf", &imsf)
+  call append("$", "imactivatefunc\tfunction to enable/disable IME")
+  call <SID>OptionG("imaf", &imaf)
 endif
 
 
@@ -1340,3 +1345,5 @@ let &ru = s:old_ru
 let &sc = s:old_sc
 let &cpo = s:cpo_save
 unlet s:old_title s:old_icon s:old_ru s:old_sc s:cpo_save s:idx s:lnum
+
+" vim: ts=8 sw=2 sts=2
index 7ae35cb..45c858a 100644 (file)
@@ -1,6 +1,6 @@
 " ---------------------------------------------------------------------
 " getscriptPlugin.vim
-"  Author:     Charles E. Campbell, Jr.
+"  Author:     Charles E. Campbell
 "  Date:       Jan 07, 2008
 "  Installing: :help glvs-install
 "  Usage:      :help glvs
@@ -19,7 +19,7 @@ if &cp || exists("g:loaded_getscriptPlugin")
  endif
  finish
 endif
-let g:loaded_getscriptPlugin = "v32"
+let g:loaded_getscriptPlugin = "v35"
 let s:keepcpo                = &cpo
 set cpo&vim
 
index d5a0ac5..0fdfef1 100644 (file)
@@ -1,19 +1,29 @@
 " Vim plugin for showing matching parens
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2008 Sep 03
+" Last Change: 2013 May 08
 
 " Exit quickly when:
 " - this plugin was already loaded (or disabled)
 " - when 'compatible' is set
-" - the "CursorMoved" autocmd event is not availble.
+" - the "CursorMoved" autocmd event is not available.
 if exists("g:loaded_matchparen") || &cp || !exists("##CursorMoved")
   finish
 endif
 let g:loaded_matchparen = 1
 
+if !exists("g:matchparen_timeout")
+  let g:matchparen_timeout = 300
+endif
+if !exists("g:matchparen_insert_timeout")
+  let g:matchparen_insert_timeout = 60
+endif
+
 augroup matchparen
   " Replace all matchparen autocommands
   autocmd! CursorMoved,CursorMovedI,WinEnter * call s:Highlight_Matching_Pair()
+  if exists('##TextChanged')
+    autocmd! TextChanged,TextChangedI * call s:Highlight_Matching_Pair()
+  endif
 augroup END
 
 " Skip the rest if it was already done.
@@ -82,8 +92,9 @@ function! s:Highlight_Matching_Pair()
   endif
 
   " When not in a string or comment ignore matches inside them.
+  " We match "escape" for special items, such as lispEscapeSpecial.
   let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
-       \ '=~?  "string\\|character\\|singlequote\\|comment"'
+       \ '=~?  "string\\|character\\|singlequote\\|escape\\|comment"'
   execute 'if' s_skip '| let s_skip = 0 | endif'
 
   " Limit the search to lines visible in the window.
@@ -95,10 +106,15 @@ function! s:Highlight_Matching_Pair()
     let stopline = stoplinetop
   endif
 
+  " Limit the search time to 300 msec to avoid a hang on very long lines.
+  " This fails when a timeout is not supported.
+  if mode() == 'i' || mode() == 'R'
+    let timeout = exists("b:matchparen_insert_timeout") ? b:matchparen_insert_timeout : g:matchparen_insert_timeout
+  else
+    let timeout = exists("b:matchparen_timeout") ? b:matchparen_timeout : g:matchparen_timeout
+  endif
   try
-    " Limit the search time to 300 msec to avoid a hang on very long lines.
-    " This fails when a timeout is not supported.
-    let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 300)
+    let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, timeout)
   catch /E118/
     " Can't use the timeout, restrict the stopline a bit more to avoid taking
     " a long time on closed folds and long lines.
index 3ce710b..718bb66 100644 (file)
@@ -1,9 +1,9 @@
 " netrwPlugin.vim: Handles file transfer and remote directory listing across a network
 "            PLUGIN SECTION
-" Date:                Jul 27, 2010
-" Maintainer:  Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:                Apr 30, 2013
+" Maintainer:  Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
 if &cp || exists("g:loaded_netrwPlugin")
  finish
 endif
-let g:loaded_netrwPlugin = "v140"
+"DechoTabOn
+let g:loaded_netrwPlugin = "v149"
 if v:version < 702
  echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
  finish
 endif
 let s:keepcpo = &cpo
 set cpo&vim
+"DechoTabOn
 
 " ---------------------------------------------------------------------
 " Public Interface: {{{1
@@ -34,30 +36,26 @@ set cpo&vim
 " Local Browsing: {{{2
 augroup FileExplorer
  au!
- au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
- au VimEnter * silent! call s:VimEnter(expand("<amatch>"))
+ " SEE Benzinger problem...
+ au BufEnter * sil! call s:LocalBrowse(expand("<amatch>"))
+ au VimEnter * sil! call s:VimEnter(expand("<amatch>"))
  if has("win32") || has("win95") || has("win64") || has("win16")
-  au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
+  au BufEnter .* sil! call s:LocalBrowse(expand("<amatch>"))
  endif
 augroup END
 
 " Network Browsing Reading Writing: {{{2
 augroup Network
  au!
- if has("win32") || has("win95") || has("win64") || has("win16")
-  au BufReadCmd  file://*              exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
- else
-  au BufReadCmd  file://*              exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
-  au BufReadCmd  file://localhost/*    exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',""))|exe "bwipe ".fnameescape(substitute(expand("<amatch>"),'file://\(\k\+@\)\=','',''))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
- endif
- au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*  exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
- au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*  exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
- au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*           exe "silent doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau BufWritePost ".fnameescape(expand("<amatch>"))
- au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*           exe "silent doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau FileWritePost ".fnameescape(expand("<amatch>"))
+ au BufReadCmd   file://*                                                                      call netrw#FileUrlRead(expand("<amatch>"))
+ au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*        exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>"))
+ au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*        exe "sil doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "sil doau FileReadPost ".fnameescape(expand("<amatch>"))
+ au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*                   exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>"))
+ au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*                   exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>"))
  try
-  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*  exe 'Nsource '.fnameescape(expand("<amatch>"))
+  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*        exe 'Nsource '.fnameescape(expand("<amatch>"))
  catch /^Vim\%((\a\+)\)\=:E216/
-  au SourcePre   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*  exe 'Nsource '.fnameescape(expand("<amatch>"))
+  au SourcePre   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*        exe 'Nsource '.fnameescape(expand("<amatch>"))
  endtry
 augroup END
 
@@ -94,27 +92,37 @@ fun! s:LocalBrowse(dirname)
   " unfortunate interaction -- debugging calls can't be used here;
   " the BufEnter event causes triggering when attempts to write to
   " the DBG buffer are made.
+  if !exists("s:vimentered")
+   return
+  endif
+"  call Decho("s:LocalBrowse(dirname<".a:dirname.">){")
 "  echomsg "dirname<".a:dirname.">"
   if has("amiga")
    " The check against '' is made for the Amiga, where the empty
    " string is the current directory and not checking would break
    " things such as the help command.
+"   call Decho("(LocalBrowse) dirname<".a:dirname.">  (amiga)")
    if a:dirname != '' && isdirectory(a:dirname)
-    silent! call netrw#LocalBrowseCheck(a:dirname)
+    sil! call netrw#LocalBrowseCheck(a:dirname)
    endif
   elseif isdirectory(a:dirname)
 "   echomsg "dirname<".dirname."> isdir"
-   silent! call netrw#LocalBrowseCheck(a:dirname)
+"   call Decho("(LocalBrowse) dirname<".a:dirname.">  (not amiga)")
+   sil! call netrw#LocalBrowseCheck(a:dirname)
   endif
   " not a directory, ignore it
+"  call Decho("|return s:LocalBrowse }")
 endfun
 
 " ---------------------------------------------------------------------
 " s:VimEnter: {{{2
 fun! s:VimEnter(dirname)
-  let curwin= winnr()
+"  call Decho("VimEnter(dirname<".a:dirname.">){")
+  let curwin       = winnr()
+  let s:vimentered = 1
   windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
   exe curwin."wincmd w"
+"  call Decho("|return VimEnter }")
 endfun
 
 " ---------------------------------------------------------------------
index b0a4d0b..034cbe2 100644 (file)
@@ -1,6 +1,6 @@
 " tarPlugin.vim -- a Vim plugin for browsing tarfiles
 " Original was copyright (c) 2002, Michael C. Toren <mct@toren.net>
-" Modified by Charles E. Campbell, Jr.
+" Modified by Charles E. Campbell
 " Distributed under the GNU General Public License.
 "
 " Updates are available from <http://michael.toren.net/code/>.  If you
@@ -14,7 +14,7 @@
 if &cp || exists("g:loaded_tarPlugin")
  finish
 endif
-let g:loaded_tarPlugin = "v26"
+let g:loaded_tarPlugin = "v29"
 let s:keepcpo          = &cpo
 set cpo&vim
 
index 36b1f76..eb47b1a 100644 (file)
 " Vim plugin for converting a syntax highlighted file to HTML.
 " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2010 Aug 12
+" Last Change: 2013 Jul 08
 "
 " The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and
 " $VIMRUNTIME/syntax/2html.vim
 "
-" TODO:
+" TODO: {{{
+"   * Options for generating the CSS in external style sheets. New :TOcss
+"     command to convert the current color scheme into a (mostly) generic CSS
+"     stylesheet which can be re-used. Alternate stylesheet support? Good start
+"     by Erik Falor
+"     ( https://groups.google.com/d/topic/vim_use/7XTmC4D22dU/discussion ).
+"   * Add optional argument to :TOhtml command to specify mode (gui, cterm,
+"     term) to use for the styling. Suggestion by "nacitar".
+"   * Add way to override or specify which RGB colors map to the color numbers
+"     in cterm. Get better defaults than just guessing? Suggestion by "nacitar".
+"   * Disable filetype detection until after all processing is done.
+"   * Add option for not generating the hyperlink on stuff that looks like a
+"     URL? Or just color the link to fit with the colorscheme (and only special
+"     when hovering)?
+"   * Bug: Opera does not allow printing more than one page if uncopyable
+"     regions is turned on. Possible solution: Add normal text line numbers with
+"     display:none, set to display:inline for print style sheets, and hide
+"     <input> elements for print, to allow Opera printing multiple pages (and
+"     other uncopyable areas?). May need to make the new text invisible to IE
+"     with conditional comments to prevent copying it, IE for some reason likes
+"     to copy hidden text. Other browsers too?
+"   * Bug: still a 1px gap throughout the fold column when html_prevent_copy is
+"     "fn" in some browsers. Specifically, in Chromium on Ubuntu (but not Chrome
+"     on Windows). Perhaps it is font related?
+"   * Bug: still some gaps in the fold column when html_prevent_copy contains
+"     'd' and showing the whole diff (observed in multiple browsers). Only gaps
+"     on diff lines though.
+"   * Undercurl support via CSS3, with fallback to dotted or something:
+"      https://groups.google.com/d/topic/vim_use/BzXA6He1pHg/discussion
+"   * Redo updates for modified default foldtext (v11) when/if the patch is
+"     accepted to modify it.
+"   * Test case +diff_one_file-dynamic_folds+expand_tabs-hover_unfold
+"              +ignore_conceal-ignore_folding+no_foldcolumn+no_pre+no_progress
+"              +number_lines-pre_wrap-use_css+use_xhtml+whole_filler.xhtml
+"     does not show the whole diff filler as it is supposed to?
+"   * Bug: when 'isprint' is wrong for the current encoding, will generate
+"     invalid content. Can/should anything be done about this? Maybe a separate
+"     plugin to correct 'isprint' based on encoding?
+"   * Check to see if the windows-125\d encodings actually work in Unix without
+"     the 8bit- prefix. Add prefix to autoload dictionaries for Unix if not.
+"   * Font auto-detection similar to
+"     http://www.vim.org/scripts/script.php?script_id=2384 but for a variety of
+"     platforms.
+"   * Error thrown when sourcing 2html.vim directly when plugins are not loaded.
+"   * Pull in code from http://www.vim.org/scripts/script.php?script_id=3113 :
+"      - listchars support
+"      - full-line background highlight
+"      - other?
+"   * Make it so deleted lines in a diff don't create side-scrolling (get it
+"     free with full-line background highlight above).
 "   * Restore open/closed folds and cursor position after processing each file
-"     with option not to restore for speed increase
-"   * Add extra meta info (generation time, etc.)
-"   * Tidy up so we can use strict doctype more?
+"     with option not to restore for speed increase.
+"   * Add extra meta info (generation time, etc.)?
+"   * Tidy up so we can use strict doctype in even more situations
 "   * Implementation detail: add threshold for writing the lines to the html
 "     buffer before we're done (5000 or so lines should do it)
 "   * TODO comments for code cleanup scattered throughout
+"}}}
 
 if exists('g:loaded_2html_plugin')
   finish
 endif
-let g:loaded_2html_plugin = 'vim7.3_v6'
+let g:loaded_2html_plugin = 'vim7.4_v1'
+
+"
+" Changelog: {{{
+"   7.4_v1  (this version): Fix modeline mangling for new "Vim:" format, and
+"                          also for version-specific modelines like "vim>703:".
+"
+"   7.3 updates: {{{
+"   7.3_v14 (ad6996a23e3e): Allow suppressing line number anchors using
+"                          g:html_line_ids=0. Allow customizing
+"                          important IDs (like line IDs and fold IDs) using
+"                          g:html_id_expr evalutated when the buffer conversion
+"                          is started.
+"   7.3_v13 (2eb30f341e8d): Keep foldmethod at manual in the generated file and
+"                          insert modeline to set it to manual.
+"                          Fix bug: diff mode with 2 unsaved buffers creates a
+"                          duplicate of one buffer instead of including both.
+"                          Add anchors to each line so you can put '#L123'
+"                          or '#123' at the end of the URL to jump to line 123
+"                          (idea by Andy Spencer). Add javascript to open folds
+"                          to show the anchor being jumped to if it is hidden.
+"                          Fix XML validation error: &nsbp; not part of XML.
+"                          Allow TOhtml to chain together with other commands
+"                          using |.
+"   7.3_v12 (9910cbff5f16): Fix modeline mangling to also work for when multiple
+"                          highlight groups make up the start-of-modeline text.
+"                          Improve render time of page with uncopyable regions
+"                          by not using one-input-per-char. Change name of
+"                          uncopyable option from html_unselectable to
+"                          html_prevent_copy. Added html_no_invalid option and
+"                          default to inserting invalid markup for uncopyable
+"                          regions to prevent MS Word from pasting undeletable
+"                          <input> elements. Fix 'cpo' handling (Thilo Six).
+"               7.3_v12b1: Add html_unselectable option. Rework logic to
+"                          eliminate post-processing substitute commands in
+"                          favor of doing the work up front. Remove unnecessary
+"                          special treatment of 'LineNr' highlight group. Minor
+"                          speed improvements. Fix modeline mangling in
+"                          generated output so it works for text in the first
+"                          column. Fix missing line number and fold column in
+"                          diff filler lines. Fix that some fonts have a 1px
+"                          gap (using a dirty hack, improvements welcome). Add
+"                          "colorscheme" meta tag. Does NOT include support for
+"                          the new default foldtext added in v11, as the patch
+"                          adding it has not yet been included in Vim.
+"   7.3_v11 ( unreleased ): Support new default foldtext from patch by Christian
+"                          Brabandt in
+"                          http://groups.google.com/d/topic/vim_dev/B6FSGfq9VoI/discussion.
+"                          This patch has not yet been included in Vim, thus
+"                          these changes are removed in the next version.
+"   7.3_v10 (fd09a9c8468e): Fix error E684 when converting a range wholly inside
+"                          multiple nested folds with dynamic folding on.
+"                          Also fix problem with foldtext in this situation.
+"   7.3_v9  (0877b8d6370e): Add html_pre_wrap option active with html_use_css
+"                          and without html_no_pre, default value same as
+"                          'wrap' option, (Andy Spencer). Don't use
+"                          'fileencoding' for converted document encoding if
+"                          'buftype' indicates a special buffer which isn't
+"                          written.
+"   7.3_v8  (85c5a72551e2): Add html_expand_tabs option to allow leaving tab
+"                          characters in generated output (Andy Spencer).
+"                          Escape text that looks like a modeline so Vim
+"                          doesn't use anything in the converted HTML as a
+"                          modeline. Bugfixes: Fix folding when a fold starts
+"                          before the conversion range. Remove fold column when
+"                          there are no folds.
+"   7.3_v7  (840c3cadb842): see betas released on vim_dev below:
+"                7.3_v7b3: Fixed bug, convert Unicode to UTF-8 all the way.
+"                7.3_v7b2: Remove automatic detection of encodings that are not
+"                          supported by all major browsers according to
+"                          http://wiki.whatwg.org/wiki/Web_Encodings and
+"                          convert to UTF-8 for all Unicode encodings. Make
+"                          HTML encoding to Vim encoding detection be
+"                          case-insensitive for built-in pairs.
+"                7.3_v7b1: Remove use of setwinvar() function which cannot be
+"                          called in restricted mode (Andy Spencer). Use
+"                          'fencoding' instead of 'encoding' to determine by
+"                          charset, and make sure the 'fenc' of the generated
+"                          file matches its indicated charset. Add charsets for
+"                          all of Vim's natively supported encodings.
+"   7.3_v6  (0d3f0e3d289b): Really fix bug with 'nowrapscan', 'magic' and other
+"                          user settings interfering with diff mode generation,
+"                          trailing whitespace (e.g. line number column) when
+"                          using html_no_pre, and bugs when using
+"                          html_hover_unfold.
+"   7.3_v5  ( unreleased ): Fix bug with 'nowrapscan' and also with out-of-sync
+"                          folds in diff mode when first line was folded.
+"   7.3_v4  (7e008c174cc3): Bugfixes, especially for xhtml markup, and diff mode
+"   7.3_v3  (a29075150aee): Refactor option handling and make html_use_css
+"                          default to true when not set to anything. Use strict
+"                          doctypes where possible. Rename use_xhtml option to
+"                          html_use_xhtml for consistency. Use .xhtml extension
+"                          when using this option. Add meta tag for settings.
+"   7.3_v2  (80229a724a11): Fix syntax highlighting in diff mode to use both the
+"                          diff colors and the normal syntax colors
+"   7.3_v1  (e7751177126b): Add conceal support and meta tags in output
+"   Pre-v1 baseline: Mercurial changeset 3c9324c0800e
+"}}}
+"}}}
 
 " Define the :TOhtml command when:
 " - 'compatible' is not set
 " - this plugin was not already loaded
-" - user commands are available.
+" - user commands are available. {{{
 if !&cp && !exists(":TOhtml") && has("user_commands")
-  command -range=% TOhtml :call tohtml#Convert2HTML(<line1>, <line2>)
-endif
+  command -range=% -bar TOhtml :call tohtml#Convert2HTML(<line1>, <line2>)
+endif "}}}
 
 " Make sure any patches will probably use consistent indent
-"   vim: ts=8 sw=2 sts=2 noet
+"   vim: ts=8 sw=2 sts=2 noet fdm=marker
index c5acc7c..5927977 100644 (file)
 if &cp || exists("g:loaded_vimballPlugin")
  finish
 endif
-let g:loaded_vimballPlugin = "v31"
+let g:loaded_vimballPlugin = "v35"
 let s:keepcpo              = &cpo
 set cpo&vim
 
 " ------------------------------------------------------------------------------
 " Public Interface: {{{1
-com! -ra   -complete=file -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
-com! -na=? -complete=dir  UseVimball                   call vimball#Vimball(1,<f-args>)
-com! -na=0                VimballList                  call vimball#Vimball(0)
-com! -na=* -complete=dir  RmVimball                            call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
-au SourceCmd  *.vba.gz,*.vba.bz2,*.vba.zip             call vimball#Decompress(expand("<amatch>"))|call vimball#Vimball(1)
-au BufEnter  *.vba,*.vba.gz,*.vba.bz2,*.vba.zip        setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'| setlocal ma ff=unix noma |endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
+com! -ra   -complete=file -na=+ -bang MkVimball                                call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
+com! -na=? -complete=dir  UseVimball                                           call vimball#Vimball(1,<f-args>)
+com! -na=0                VimballList                                          call vimball#Vimball(0)
+com! -na=* -complete=dir  RmVimball                                                    call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
+au BufEnter  *.vba,*.vba.gz,*.vba.bz2,*.vba.zip,*.vba.xz       setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'|setlocal ma ff=unix noma|endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
+au SourceCmd *.vba.gz,*.vba.bz2,*.vba.zip,*.vba.xz                     if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|endif|call vimball#Decompress(expand("<amatch>"))|so %|if expand("%")!=expand("<afile>")|close|endif
+au SourceCmd *.vba                                                                                     if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|call vimball#Vimball(1)|close|else|call vimball#Vimball(1)|endif
+au BufEnter  *.vmb,*.vmb.gz,*.vmb.bz2,*.vmb.zip,*.vmb.xz       setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'|setlocal ma ff=unix noma|endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
+au SourceCmd *.vmb.gz,*.vmb.bz2,*.vmb.zip,*.vmb.xz                     if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|endif|call vimball#Decompress(expand("<amatch>"))|so %|if expand("%")!=expand("<afile>")|close|endif
+au SourceCmd *.vmb                                                                                     if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|call vimball#Vimball(1)|close|else|call vimball#Vimball(1)|endif
 
 " =====================================================================
 " Restoration And Modelines: {{{1
index ff3825e..e9bd0dc 100644 (file)
@@ -1,9 +1,9 @@
 " zipPlugin.vim: Handles browsing zipfiles
 "            PLUGIN PORTION
-" Date:                        Oct 05, 2007
-" Maintainer:  Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:                        Jun 07, 2013
+" Maintainer:  Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:             Vim License  (see vim's :help license)
-" Copyright:    Copyright (C) 2005,2006 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2013 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
 if &cp || exists("g:loaded_zipPlugin")
  finish
 endif
-let g:loaded_zipPlugin = "v23"
+let g:loaded_zipPlugin = "v27"
 let s:keepcpo          = &cpo
 set cpo&vim
 
 " ---------------------------------------------------------------------
+" Options: {{{1
+if !exists("g:zipPlugin_ext")
+ let g:zipPlugin_ext= '*.zip,*.jar,*.xpi,*.ja,*.war,*.ear,*.celzip,*.oxt,*.kmz,*.wsz,*.xap,*.docx,*.docm,*.dotx,*.dotm,*.potx,*.potm,*.ppsx,*.ppsm,*.pptx,*.pptm,*.ppam,*.sldx,*.thmx,*.xlam,*.xlsx,*.xlsm,*.xlsb,*.xltx,*.xltm,*.xlam,*.crtx,*.vdw,*.glox,*.gcsx,*.gqsx'
+endif
+
+" ---------------------------------------------------------------------
 " Public Interface: {{{1
 augroup zip
  au!
@@ -40,7 +46,7 @@ augroup zip
   au FileWriteCmd zipfile:*/*  call zip#Write(expand("<amatch>"))
  endif
 
- au BufReadCmd   *.zip,*.jar,*.xpi,*.war,*.ear         call zip#Browse(expand("<amatch>"))
+ exe "au BufReadCmd ".g:zipPlugin_ext.' call zip#Browse(expand("<amatch>"))'
 augroup END
 
 " ---------------------------------------------------------------------
index e30b5c4..251e4c8 100644 (file)
@@ -1,7 +1,7 @@
 " Vim support file to detect file types in scripts
 "
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last change: 2010 Jul 29
+" Last change: 2013 May 24
 
 " This file is called by an autocommand for every file that has just been
 " loaded into a buffer.  It checks if the type of file can be recognized by
@@ -152,6 +152,10 @@ if s:line1 =~ "^#!"
   elseif s:name =~ 'cfengine'
     set ft=cfengine
 
+    " Erlang scripts
+  elseif s:name =~ 'escript'
+    set ft=erlang
+
   endif
   unlet s:name
 
@@ -168,7 +172,8 @@ else
     call SetFileTypeSH(s:line1)        " defined in filetype.vim
 
     " Z shell scripts
-  elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>'
+  elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>' ||
+        \ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~ '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
     set ft=zsh
 
   " ELM Mail files
@@ -197,7 +202,8 @@ else
     " - "=== ", line of "=", "---", "+++ " (SVK diff)
     " - "=== ", "--- ", "+++ " (bzr diff, common case)
     " - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
-  elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\)'
+    " - "# HG changeset patch" in first line (Mercurial export format)
+  elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
        \ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
        \ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
        \ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
@@ -325,6 +331,17 @@ else
   elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
     set ft=git
 
+   " Gprof (gnu profiler)
+   elseif s:line1 == 'Flat profile:'
+     \ && s:line2 == ''
+     \ && s:line3 =~ '^Each sample counts as .* seconds.$'
+     set ft=gprof
+
+  " Erlang terms
+  " (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
+  elseif s:line1 =~? '-\*-.*erlang.*-\*-'
+    set ft=erlang
+
   " CVS diff
   else
     let s:lnum = 1
index e2ec710..e69de29 100644 (file)
@@ -1,13 +0,0 @@
-*** br_FR.orig.aff     2010-04-14 18:44:36.365731271 +0200
---- br_FR.aff  2010-04-14 18:43:31.069137439 +0200
-***************
-*** 9,14 ****
---- 9,16 ----
-  SET UTF-8
-  TRY esiaùnñrtolcdugmphbyfvkwzESIAÙNÑRTOLCDUGMPHBYFVKWZ'
-  
-+ MIDWORD '
-+ 
-  PFX m Y 1
-  PFX m   0          m'         [aehiouy]
-  
index 1ca5935..75035be 100644 (file)
@@ -25,16 +25,16 @@ $SPELLDIR/br.utf-8.spl : $FILES
 #
 # Fetching the files from OpenOffice.org.
 #
-OODIR = http://extensions.services.openoffice.org/e-files/2207/3
-:attr {fetch = $OODIR/%file%} dict-br_0.3.oxt
+OODIR = http://extensions.libreoffice.org/extension-center/an-drouizig-breton-spellchecker/releases/0.11/
+:attr {fetch = $OODIR/%file%} dict-br-0.11.oxt
 
 # The files don't depend on the .zip file so that we can delete it.
 # Only download the zip file if the targets don't exist.
 br_FR.aff br_FR.dic: {buildcheck=}
         :assertpkg unzip patch
-        :fetch dict-br_0.3.oxt
-        :sys $UNZIP dict-br_0.3.oxt
-        :delete dict-br_0.3.oxt
+        :fetch dict-br-0.11.oxt
+        :sys $UNZIP dict-br-0.11.oxt
+        :delete dict-br-0.11.oxt
         :copy dictionaries/br_FR.aff br_FR.aff
         :copy dictionaries/br_FR.dic br_FR.dic
         # The br_FR.aff file contains a BOM, remove it.
@@ -65,12 +65,12 @@ diff:
 
 check:
         :assertpkg unzip diff
-        :fetch dict-br_0.3.oxt
+        :fetch dict-br-0.11.oxt
         :mkdir tmp
         :cd tmp
         @try:
             @import stat
-            :sys $UNZIP ../dict-br_0.3.oxt
+            :sys $UNZIP ../dict-br-0.11.oxt
             :sys {force} diff ../dictionaries/br_FR.aff br_FR.aff >d
             @if os.stat('d')[stat.ST_SIZE] > 0:
                 :copy br_FR.aff ../br_FR.new.aff
@@ -80,7 +80,7 @@ check:
         @finally:
             :cd ..
             :delete {r}{f}{q} tmp
-            :delete dict-br_0.3.oxt
+            :delete dict-br-0.11.oxt
 
 
 # vim: set sts=4 sw=4 :
index 250d425..1a39de1 100644 (file)
Binary files a/runtime/spell/en.utf-8.spl and b/runtime/spell/en.utf-8.spl differ
index 70bd9a2..1add0c6 100644 (file)
Binary files a/runtime/spell/en.utf-8.sug and b/runtime/spell/en.utf-8.sug differ
index 3e301b7..2a64d99 100644 (file)
@@ -29,7 +29,7 @@
 + # soundslike mapping from Aspell
 + # Aspell phonetics for Irish, by Kevin Scannell <scannell@slu.edu>
 + # Copyright 2002, 2003 Kevin P. Scannell, distributed under GNU GPL
-+ # version 2.0
++ # version 2.0 or the Vim license (attribution by Kevin Scannell, Jan 2012)
 + 
 + SAL followup 0                    # else breaks QU^, e.g.
 + SAL collapse_result 1             # no double letters in resulting strings
index ec4797c..36aa12d 100644 (file)
@@ -25,7 +25,7 @@
 + # soundslike mapping from Aspell
 + # Aspell phonetics for Irish, by Kevin Scannell <scannell@slu.edu>
 + # Copyright 2002, 2003 Kevin P. Scannell, distributed under GNU GPL
-+ # version 2.0
++ # version 2.0 or the Vim license (attribution by Kevin Scannell, Jan 2012)
 + 
 + SAL followup 0                    # else breaks QU^, e.g.
 + SAL collapse_result 1             # no double letters in resulting strings
index 3890b1e..629a4ec 100644 (file)
@@ -7,19 +7,20 @@
     :progsearch VIM vim
 
 SPELLDIR = ..
+VIMRC = ../spell.vim
 FILES    = hu_HU.aff hu_HU.dic
 
 all: $SPELLDIR/hu.iso-8859-2.spl $SPELLDIR/hu.utf-8.spl \
         $SPELLDIR/hu.cp1250.spl ../README_hu.txt
 
 $SPELLDIR/hu.iso-8859-2.spl : $FILES
-        :sys env LANG=hu_HU.ISO8859-2 $VIM -u NONE -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
+        :sys env LANG=hu_HU.ISO8859-2 $VIM -u $VIMRC -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
 
 $SPELLDIR/hu.utf-8.spl : $FILES
-        :sys env LANG=hu_HU.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
+        :sys env LANG=hu_HU.UTF-8 $VIM -u $VIMRC -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
 
 $SPELLDIR/hu.cp1250.spl : $FILES
-        :sys $VIM -u NONE -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/hu hu_HU" -c q
+        :sys $VIM -u $VIMRC -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/hu hu_HU" -c q
 
 ../README_hu.txt: README_hu_HU.txt
         :copy $source $target
diff --git a/runtime/spell/spell.vim b/runtime/spell/spell.vim
new file mode 100644 (file)
index 0000000..375b088
--- /dev/null
@@ -0,0 +1,4 @@
+" Settings for when generating spellfiles.
+"
+" Assume we have 2 Gbyte RAM available.
+set mkspellmem=1800000,6000,1600
index 3526175..4089a66 100644 (file)
@@ -27,7 +27,7 @@
 + # soundslike mapping from Aspell
 + # swedish_phonet.dat - Swedish phonetic transformation rules for aspell
 + # Copyright (C) 2000  Martin Norbäck  <d95mback@dtek.chalmers.se>
-+ # distributed under GNU GPL
++ # distributed under GNU GPL or the Vim license, at your choice.
 + # version 0.2
 + 
 + SAL &        &
index 92678d1..be88f1c 100644 (file)
@@ -2,7 +2,7 @@
 " This file is normally sourced from menu.vim.
 "
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2010 Jul 26
+" Last Change: 2013 Jun 24
 
 " Define the SetSyn function, used for the Syntax menu entries.
 " Set 'filetype' and also 'syntax' if it is manually selected.
@@ -53,47 +53,49 @@ an 50.10.240 &Syntax.AB.ANTLR :cal SetSyn("antlr")<CR>
 an 50.10.250 &Syntax.AB.Apache\ config :cal SetSyn("apache")<CR>
 an 50.10.260 &Syntax.AB.Apache-style\ config :cal SetSyn("apachestyle")<CR>
 an 50.10.270 &Syntax.AB.Applix\ ELF :cal SetSyn("elf")<CR>
-an 50.10.280 &Syntax.AB.Arc\ Macro\ Language :cal SetSyn("aml")<CR>
-an 50.10.290 &Syntax.AB.Arch\ inventory :cal SetSyn("arch")<CR>
-an 50.10.300 &Syntax.AB.ART :cal SetSyn("art")<CR>
-an 50.10.310 &Syntax.AB.ASP\ with\ VBScript :cal SetSyn("aspvbs")<CR>
-an 50.10.320 &Syntax.AB.ASP\ with\ Perl :cal SetSyn("aspperl")<CR>
-an 50.10.330 &Syntax.AB.Assembly.680x0 :cal SetSyn("asm68k")<CR>
-an 50.10.340 &Syntax.AB.Assembly.Flat :cal SetSyn("fasm")<CR>
-an 50.10.350 &Syntax.AB.Assembly.GNU :cal SetSyn("asm")<CR>
-an 50.10.360 &Syntax.AB.Assembly.GNU\ H-8300 :cal SetSyn("asmh8300")<CR>
-an 50.10.370 &Syntax.AB.Assembly.Intel\ IA-64 :cal SetSyn("ia64")<CR>
-an 50.10.380 &Syntax.AB.Assembly.Microsoft :cal SetSyn("masm")<CR>
-an 50.10.390 &Syntax.AB.Assembly.Netwide :cal SetSyn("nasm")<CR>
-an 50.10.400 &Syntax.AB.Assembly.PIC :cal SetSyn("pic")<CR>
-an 50.10.410 &Syntax.AB.Assembly.Turbo :cal SetSyn("tasm")<CR>
-an 50.10.420 &Syntax.AB.Assembly.VAX\ Macro\ Assembly :cal SetSyn("vmasm")<CR>
-an 50.10.430 &Syntax.AB.Assembly.Z-80 :cal SetSyn("z8a")<CR>
-an 50.10.440 &Syntax.AB.Assembly.xa\ 6502\ cross\ assember :cal SetSyn("a65")<CR>
-an 50.10.450 &Syntax.AB.ASN\.1 :cal SetSyn("asn")<CR>
-an 50.10.460 &Syntax.AB.Asterisk\ config :cal SetSyn("asterisk")<CR>
-an 50.10.470 &Syntax.AB.Asterisk\ voicemail\ config :cal SetSyn("asteriskvm")<CR>
-an 50.10.480 &Syntax.AB.Atlas :cal SetSyn("atlas")<CR>
-an 50.10.490 &Syntax.AB.AutoHotKey :cal SetSyn("autohotkey")<CR>
-an 50.10.500 &Syntax.AB.AutoIt :cal SetSyn("autoit")<CR>
-an 50.10.510 &Syntax.AB.Automake :cal SetSyn("automake")<CR>
-an 50.10.520 &Syntax.AB.Avenue :cal SetSyn("ave")<CR>
-an 50.10.530 &Syntax.AB.Awk :cal SetSyn("awk")<CR>
-an 50.10.540 &Syntax.AB.AYacc :cal SetSyn("ayacc")<CR>
-an 50.10.560 &Syntax.AB.B :cal SetSyn("b")<CR>
-an 50.10.570 &Syntax.AB.Baan :cal SetSyn("baan")<CR>
-an 50.10.580 &Syntax.AB.Basic.FreeBasic :cal SetSyn("freebasic")<CR>
-an 50.10.590 &Syntax.AB.Basic.IBasic :cal SetSyn("ibasic")<CR>
-an 50.10.600 &Syntax.AB.Basic.QBasic :cal SetSyn("basic")<CR>
-an 50.10.610 &Syntax.AB.Basic.Visual\ Basic :cal SetSyn("vb")<CR>
-an 50.10.620 &Syntax.AB.Bazaar\ commit\ file :cal SetSyn("bzr")<CR>
-an 50.10.630 &Syntax.AB.BC\ calculator :cal SetSyn("bc")<CR>
-an 50.10.640 &Syntax.AB.BDF\ font :cal SetSyn("bdf")<CR>
-an 50.10.650 &Syntax.AB.BibTeX.Bibliography\ database :cal SetSyn("bib")<CR>
-an 50.10.660 &Syntax.AB.BibTeX.Bibliography\ Style :cal SetSyn("bst")<CR>
-an 50.10.670 &Syntax.AB.BIND.BIND\ config :cal SetSyn("named")<CR>
-an 50.10.680 &Syntax.AB.BIND.BIND\ zone :cal SetSyn("bindzone")<CR>
-an 50.10.690 &Syntax.AB.Blank :cal SetSyn("blank")<CR>
+an 50.10.280 &Syntax.AB.APT\ config :cal SetSyn("aptconf")<CR>
+an 50.10.290 &Syntax.AB.Arc\ Macro\ Language :cal SetSyn("aml")<CR>
+an 50.10.300 &Syntax.AB.Arch\ inventory :cal SetSyn("arch")<CR>
+an 50.10.310 &Syntax.AB.ART :cal SetSyn("art")<CR>
+an 50.10.320 &Syntax.AB.Ascii\ Doc :cal SetSyn("asciidoc")<CR>
+an 50.10.330 &Syntax.AB.ASP\ with\ VBScript :cal SetSyn("aspvbs")<CR>
+an 50.10.340 &Syntax.AB.ASP\ with\ Perl :cal SetSyn("aspperl")<CR>
+an 50.10.350 &Syntax.AB.Assembly.680x0 :cal SetSyn("asm68k")<CR>
+an 50.10.360 &Syntax.AB.Assembly.Flat :cal SetSyn("fasm")<CR>
+an 50.10.370 &Syntax.AB.Assembly.GNU :cal SetSyn("asm")<CR>
+an 50.10.380 &Syntax.AB.Assembly.GNU\ H-8300 :cal SetSyn("asmh8300")<CR>
+an 50.10.390 &Syntax.AB.Assembly.Intel\ IA-64 :cal SetSyn("ia64")<CR>
+an 50.10.400 &Syntax.AB.Assembly.Microsoft :cal SetSyn("masm")<CR>
+an 50.10.410 &Syntax.AB.Assembly.Netwide :cal SetSyn("nasm")<CR>
+an 50.10.420 &Syntax.AB.Assembly.PIC :cal SetSyn("pic")<CR>
+an 50.10.430 &Syntax.AB.Assembly.Turbo :cal SetSyn("tasm")<CR>
+an 50.10.440 &Syntax.AB.Assembly.VAX\ Macro\ Assembly :cal SetSyn("vmasm")<CR>
+an 50.10.450 &Syntax.AB.Assembly.Z-80 :cal SetSyn("z8a")<CR>
+an 50.10.460 &Syntax.AB.Assembly.xa\ 6502\ cross\ assember :cal SetSyn("a65")<CR>
+an 50.10.470 &Syntax.AB.ASN\.1 :cal SetSyn("asn")<CR>
+an 50.10.480 &Syntax.AB.Asterisk\ config :cal SetSyn("asterisk")<CR>
+an 50.10.490 &Syntax.AB.Asterisk\ voicemail\ config :cal SetSyn("asteriskvm")<CR>
+an 50.10.500 &Syntax.AB.Atlas :cal SetSyn("atlas")<CR>
+an 50.10.510 &Syntax.AB.AutoHotKey :cal SetSyn("autohotkey")<CR>
+an 50.10.520 &Syntax.AB.AutoIt :cal SetSyn("autoit")<CR>
+an 50.10.530 &Syntax.AB.Automake :cal SetSyn("automake")<CR>
+an 50.10.540 &Syntax.AB.Avenue :cal SetSyn("ave")<CR>
+an 50.10.550 &Syntax.AB.Awk :cal SetSyn("awk")<CR>
+an 50.10.560 &Syntax.AB.AYacc :cal SetSyn("ayacc")<CR>
+an 50.10.580 &Syntax.AB.B :cal SetSyn("b")<CR>
+an 50.10.590 &Syntax.AB.Baan :cal SetSyn("baan")<CR>
+an 50.10.600 &Syntax.AB.Basic.FreeBasic :cal SetSyn("freebasic")<CR>
+an 50.10.610 &Syntax.AB.Basic.IBasic :cal SetSyn("ibasic")<CR>
+an 50.10.620 &Syntax.AB.Basic.QBasic :cal SetSyn("basic")<CR>
+an 50.10.630 &Syntax.AB.Basic.Visual\ Basic :cal SetSyn("vb")<CR>
+an 50.10.640 &Syntax.AB.Bazaar\ commit\ file :cal SetSyn("bzr")<CR>
+an 50.10.650 &Syntax.AB.BC\ calculator :cal SetSyn("bc")<CR>
+an 50.10.660 &Syntax.AB.BDF\ font :cal SetSyn("bdf")<CR>
+an 50.10.670 &Syntax.AB.BibTeX.Bibliography\ database :cal SetSyn("bib")<CR>
+an 50.10.680 &Syntax.AB.BibTeX.Bibliography\ Style :cal SetSyn("bst")<CR>
+an 50.10.690 &Syntax.AB.BIND.BIND\ config :cal SetSyn("named")<CR>
+an 50.10.700 &Syntax.AB.BIND.BIND\ zone :cal SetSyn("bindzone")<CR>
+an 50.10.710 &Syntax.AB.Blank :cal SetSyn("blank")<CR>
 an 50.20.100 &Syntax.C.C :cal SetSyn("c")<CR>
 an 50.20.110 &Syntax.C.C++ :cal SetSyn("cpp")<CR>
 an 50.20.120 &Syntax.C.C# :cal SetSyn("cs")<CR>
@@ -113,27 +115,29 @@ an 50.20.250 &Syntax.C.ChordPro :cal SetSyn("chordpro")<CR>
 an 50.20.260 &Syntax.C.Clean :cal SetSyn("clean")<CR>
 an 50.20.270 &Syntax.C.Clever :cal SetSyn("cl")<CR>
 an 50.20.280 &Syntax.C.Clipper :cal SetSyn("clipper")<CR>
-an 50.20.290 &Syntax.C.Cmake :cal SetSyn("cmake")<CR>
-an 50.20.300 &Syntax.C.Cmusrc :cal SetSyn("cmusrc")<CR>
-an 50.20.310 &Syntax.C.Cobol :cal SetSyn("cobol")<CR>
-an 50.20.320 &Syntax.C.Coco/R :cal SetSyn("coco")<CR>
-an 50.20.330 &Syntax.C.Cold\ Fusion :cal SetSyn("cf")<CR>
-an 50.20.340 &Syntax.C.Conary\ Recipe :cal SetSyn("conaryrecipe")<CR>
-an 50.20.350 &Syntax.C.Config.Cfg\ Config\ file :cal SetSyn("cfg")<CR>
-an 50.20.360 &Syntax.C.Config.Configure\.in :cal SetSyn("config")<CR>
-an 50.20.370 &Syntax.C.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
-an 50.20.380 &Syntax.C.CRM114 :cal SetSyn("crm")<CR>
-an 50.20.390 &Syntax.C.Crontab :cal SetSyn("crontab")<CR>
-an 50.20.400 &Syntax.C.CSP :cal SetSyn("csp")<CR>
-an 50.20.410 &Syntax.C.Ctrl-H :cal SetSyn("ctrlh")<CR>
-an 50.20.420 &Syntax.C.Cucumber :cal SetSyn("cucumber")<CR>
-an 50.20.430 &Syntax.C.CUDA :cal SetSyn("cuda")<CR>
-an 50.20.440 &Syntax.C.CUPL.CUPL :cal SetSyn("cupl")<CR>
-an 50.20.450 &Syntax.C.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
-an 50.20.460 &Syntax.C.CVS.commit\ file :cal SetSyn("cvs")<CR>
-an 50.20.470 &Syntax.C.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
-an 50.20.480 &Syntax.C.Cyn++ :cal SetSyn("cynpp")<CR>
-an 50.20.490 &Syntax.C.Cynlib :cal SetSyn("cynlib")<CR>
+an 50.20.290 &Syntax.C.Clojure :cal SetSyn("clojure")<CR>
+an 50.20.300 &Syntax.C.Cmake :cal SetSyn("cmake")<CR>
+an 50.20.310 &Syntax.C.Cmusrc :cal SetSyn("cmusrc")<CR>
+an 50.20.320 &Syntax.C.Cobol :cal SetSyn("cobol")<CR>
+an 50.20.330 &Syntax.C.Coco/R :cal SetSyn("coco")<CR>
+an 50.20.340 &Syntax.C.Cold\ Fusion :cal SetSyn("cf")<CR>
+an 50.20.350 &Syntax.C.Conary\ Recipe :cal SetSyn("conaryrecipe")<CR>
+an 50.20.360 &Syntax.C.Config.Cfg\ Config\ file :cal SetSyn("cfg")<CR>
+an 50.20.370 &Syntax.C.Config.Configure\.in :cal SetSyn("config")<CR>
+an 50.20.380 &Syntax.C.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
+an 50.20.390 &Syntax.C.CRM114 :cal SetSyn("crm")<CR>
+an 50.20.400 &Syntax.C.Crontab :cal SetSyn("crontab")<CR>
+an 50.20.410 &Syntax.C.CSDL :cal SetSyn("csdl")<CR>
+an 50.20.420 &Syntax.C.CSP :cal SetSyn("csp")<CR>
+an 50.20.430 &Syntax.C.Ctrl-H :cal SetSyn("ctrlh")<CR>
+an 50.20.440 &Syntax.C.Cucumber :cal SetSyn("cucumber")<CR>
+an 50.20.450 &Syntax.C.CUDA :cal SetSyn("cuda")<CR>
+an 50.20.460 &Syntax.C.CUPL.CUPL :cal SetSyn("cupl")<CR>
+an 50.20.470 &Syntax.C.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
+an 50.20.480 &Syntax.C.CVS.commit\ file :cal SetSyn("cvs")<CR>
+an 50.20.490 &Syntax.C.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
+an 50.20.500 &Syntax.C.Cyn++ :cal SetSyn("cynpp")<CR>
+an 50.20.510 &Syntax.C.Cynlib :cal SetSyn("cynlib")<CR>
 an 50.30.100 &Syntax.DE.D :cal SetSyn("d")<CR>
 an 50.30.110 &Syntax.DE.Datascript :cal SetSyn("datascript")<CR>
 an 50.30.120 &Syntax.DE.Debian.Debian\ ChangeLog :cal SetSyn("debchangelog")<CR>
@@ -148,71 +152,77 @@ an 50.30.200 &Syntax.DE.Digital\ Command\ Lang :cal SetSyn("dcl")<CR>
 an 50.30.210 &Syntax.DE.Dircolors :cal SetSyn("dircolors")<CR>
 an 50.30.220 &Syntax.DE.Django\ template :cal SetSyn("django")<CR>
 an 50.30.230 &Syntax.DE.DNS/BIND\ zone :cal SetSyn("bindzone")<CR>
-an 50.30.240 &Syntax.DE.DocBook.auto-detect :cal SetSyn("docbk")<CR>
-an 50.30.250 &Syntax.DE.DocBook.SGML :cal SetSyn("docbksgml")<CR>
-an 50.30.260 &Syntax.DE.DocBook.XML :cal SetSyn("docbkxml")<CR>
-an 50.30.270 &Syntax.DE.Dot :cal SetSyn("dot")<CR>
-an 50.30.280 &Syntax.DE.Doxygen.C\ with\ doxygen :cal SetSyn("c.doxygen")<CR>
-an 50.30.290 &Syntax.DE.Doxygen.C++\ with\ doxygen :cal SetSyn("cpp.doxygen")<CR>
-an 50.30.300 &Syntax.DE.Doxygen.IDL\ with\ doxygen :cal SetSyn("idl.doxygen")<CR>
-an 50.30.310 &Syntax.DE.Doxygen.Java\ with\ doxygen :cal SetSyn("java.doxygen")<CR>
-an 50.30.320 &Syntax.DE.Dracula :cal SetSyn("dracula")<CR>
-an 50.30.330 &Syntax.DE.DSSSL :cal SetSyn("dsl")<CR>
-an 50.30.340 &Syntax.DE.DTD :cal SetSyn("dtd")<CR>
-an 50.30.350 &Syntax.DE.DTML\ (Zope) :cal SetSyn("dtml")<CR>
-an 50.30.360 &Syntax.DE.DTrace :cal SetSyn("dtrace")<CR>
-an 50.30.370 &Syntax.DE.Dylan.Dylan :cal SetSyn("dylan")<CR>
-an 50.30.380 &Syntax.DE.Dylan.Dylan\ interface :cal SetSyn("dylanintr")<CR>
-an 50.30.390 &Syntax.DE.Dylan.Dylan\ lid :cal SetSyn("dylanlid")<CR>
-an 50.30.410 &Syntax.DE.EDIF :cal SetSyn("edif")<CR>
-an 50.30.420 &Syntax.DE.Eiffel :cal SetSyn("eiffel")<CR>
-an 50.30.430 &Syntax.DE.Elinks\ config :cal SetSyn("elinks")<CR>
-an 50.30.440 &Syntax.DE.Elm\ filter\ rules :cal SetSyn("elmfilt")<CR>
-an 50.30.450 &Syntax.DE.Embedix\ Component\ Description :cal SetSyn("ecd")<CR>
-an 50.30.460 &Syntax.DE.ERicsson\ LANGuage :cal SetSyn("erlang")<CR>
-an 50.30.470 &Syntax.DE.ESMTP\ rc :cal SetSyn("esmtprc")<CR>
-an 50.30.480 &Syntax.DE.ESQL-C :cal SetSyn("esqlc")<CR>
-an 50.30.490 &Syntax.DE.Essbase\ script :cal SetSyn("csc")<CR>
-an 50.30.500 &Syntax.DE.Esterel :cal SetSyn("esterel")<CR>
-an 50.30.510 &Syntax.DE.Eterm\ config :cal SetSyn("eterm")<CR>
-an 50.30.520 &Syntax.DE.Eviews :cal SetSyn("eviews")<CR>
-an 50.30.530 &Syntax.DE.Exim\ conf :cal SetSyn("exim")<CR>
-an 50.30.540 &Syntax.DE.Expect :cal SetSyn("expect")<CR>
-an 50.30.550 &Syntax.DE.Exports :cal SetSyn("exports")<CR>
-an 50.40.100 &Syntax.FG.Fantom :cal SetSyn("fan")<CR>
-an 50.40.110 &Syntax.FG.Fetchmail :cal SetSyn("fetchmail")<CR>
-an 50.40.120 &Syntax.FG.FlexWiki :cal SetSyn("flexwiki")<CR>
-an 50.40.130 &Syntax.FG.Focus\ Executable :cal SetSyn("focexec")<CR>
-an 50.40.140 &Syntax.FG.Focus\ Master :cal SetSyn("master")<CR>
-an 50.40.150 &Syntax.FG.FORM :cal SetSyn("form")<CR>
-an 50.40.160 &Syntax.FG.Forth :cal SetSyn("forth")<CR>
-an 50.40.170 &Syntax.FG.Fortran :cal SetSyn("fortran")<CR>
-an 50.40.180 &Syntax.FG.FoxPro :cal SetSyn("foxpro")<CR>
-an 50.40.190 &Syntax.FG.FrameScript :cal SetSyn("framescript")<CR>
-an 50.40.200 &Syntax.FG.Fstab :cal SetSyn("fstab")<CR>
-an 50.40.210 &Syntax.FG.Fvwm.Fvwm\ configuration :cal SetSyn("fvwm1")<CR>
-an 50.40.220 &Syntax.FG.Fvwm.Fvwm2\ configuration :cal SetSyn("fvwm2")<CR>
-an 50.40.230 &Syntax.FG.Fvwm.Fvwm2\ configuration\ with\ M4 :cal SetSyn("fvwm2m4")<CR>
-an 50.40.250 &Syntax.FG.GDB\ command\ file :cal SetSyn("gdb")<CR>
-an 50.40.260 &Syntax.FG.GDMO :cal SetSyn("gdmo")<CR>
-an 50.40.270 &Syntax.FG.Gedcom :cal SetSyn("gedcom")<CR>
-an 50.40.280 &Syntax.FG.Git.Output :cal SetSyn("git")<CR>
-an 50.40.290 &Syntax.FG.Git.Commit :cal SetSyn("gitcommit")<CR>
-an 50.40.300 &Syntax.FG.Git.Config :cal SetSyn("gitconfig")<CR>
-an 50.40.310 &Syntax.FG.Git.Rebase :cal SetSyn("gitrebase")<CR>
-an 50.40.320 &Syntax.FG.Git.Send\ Email :cal SetSyn("gitsendemail")<CR>
-an 50.40.330 &Syntax.FG.Gkrellmrc :cal SetSyn("gkrellmrc")<CR>
-an 50.40.340 &Syntax.FG.GP :cal SetSyn("gp")<CR>
-an 50.40.350 &Syntax.FG.GPG :cal SetSyn("gpg")<CR>
-an 50.40.360 &Syntax.FG.Group\ file :cal SetSyn("group")<CR>
-an 50.40.370 &Syntax.FG.Grub :cal SetSyn("grub")<CR>
-an 50.40.380 &Syntax.FG.GNU\ Server\ Pages :cal SetSyn("gsp")<CR>
-an 50.40.390 &Syntax.FG.GNUplot :cal SetSyn("gnuplot")<CR>
-an 50.40.400 &Syntax.FG.GrADS\ scripts :cal SetSyn("grads")<CR>
-an 50.40.410 &Syntax.FG.Gretl :cal SetSyn("gretl")<CR>
-an 50.40.420 &Syntax.FG.Groff :cal SetSyn("groff")<CR>
-an 50.40.430 &Syntax.FG.Groovy :cal SetSyn("groovy")<CR>
-an 50.40.440 &Syntax.FG.GTKrc :cal SetSyn("gtkrc")<CR>
+an 50.30.240 &Syntax.DE.Dnsmasq\ config :cal SetSyn("dnsmasq")<CR>
+an 50.30.250 &Syntax.DE.DocBook.auto-detect :cal SetSyn("docbk")<CR>
+an 50.30.260 &Syntax.DE.DocBook.SGML :cal SetSyn("docbksgml")<CR>
+an 50.30.270 &Syntax.DE.DocBook.XML :cal SetSyn("docbkxml")<CR>
+an 50.30.280 &Syntax.DE.Dot :cal SetSyn("dot")<CR>
+an 50.30.290 &Syntax.DE.Doxygen.C\ with\ doxygen :cal SetSyn("c.doxygen")<CR>
+an 50.30.300 &Syntax.DE.Doxygen.C++\ with\ doxygen :cal SetSyn("cpp.doxygen")<CR>
+an 50.30.310 &Syntax.DE.Doxygen.IDL\ with\ doxygen :cal SetSyn("idl.doxygen")<CR>
+an 50.30.320 &Syntax.DE.Doxygen.Java\ with\ doxygen :cal SetSyn("java.doxygen")<CR>
+an 50.30.330 &Syntax.DE.Dracula :cal SetSyn("dracula")<CR>
+an 50.30.340 &Syntax.DE.DSSSL :cal SetSyn("dsl")<CR>
+an 50.30.350 &Syntax.DE.DTD :cal SetSyn("dtd")<CR>
+an 50.30.360 &Syntax.DE.DTML\ (Zope) :cal SetSyn("dtml")<CR>
+an 50.30.370 &Syntax.DE.DTrace :cal SetSyn("dtrace")<CR>
+an 50.30.380 &Syntax.DE.Dts/dtsi :cal SetSyn("dts")<CR>
+an 50.30.390 &Syntax.DE.Dylan.Dylan :cal SetSyn("dylan")<CR>
+an 50.30.400 &Syntax.DE.Dylan.Dylan\ interface :cal SetSyn("dylanintr")<CR>
+an 50.30.410 &Syntax.DE.Dylan.Dylan\ lid :cal SetSyn("dylanlid")<CR>
+an 50.30.430 &Syntax.DE.EDIF :cal SetSyn("edif")<CR>
+an 50.30.440 &Syntax.DE.Eiffel :cal SetSyn("eiffel")<CR>
+an 50.30.450 &Syntax.DE.Elinks\ config :cal SetSyn("elinks")<CR>
+an 50.30.460 &Syntax.DE.Elm\ filter\ rules :cal SetSyn("elmfilt")<CR>
+an 50.30.470 &Syntax.DE.Embedix\ Component\ Description :cal SetSyn("ecd")<CR>
+an 50.30.480 &Syntax.DE.ERicsson\ LANGuage :cal SetSyn("erlang")<CR>
+an 50.30.490 &Syntax.DE.ESMTP\ rc :cal SetSyn("esmtprc")<CR>
+an 50.30.500 &Syntax.DE.ESQL-C :cal SetSyn("esqlc")<CR>
+an 50.30.510 &Syntax.DE.Essbase\ script :cal SetSyn("csc")<CR>
+an 50.30.520 &Syntax.DE.Esterel :cal SetSyn("esterel")<CR>
+an 50.30.530 &Syntax.DE.Eterm\ config :cal SetSyn("eterm")<CR>
+an 50.30.540 &Syntax.DE.Eviews :cal SetSyn("eviews")<CR>
+an 50.30.550 &Syntax.DE.Exim\ conf :cal SetSyn("exim")<CR>
+an 50.30.560 &Syntax.DE.Expect :cal SetSyn("expect")<CR>
+an 50.30.570 &Syntax.DE.Exports :cal SetSyn("exports")<CR>
+an 50.40.100 &Syntax.FG.Falcon :cal SetSyn("falcon")<CR>
+an 50.40.110 &Syntax.FG.Fantom :cal SetSyn("fan")<CR>
+an 50.40.120 &Syntax.FG.Fetchmail :cal SetSyn("fetchmail")<CR>
+an 50.40.130 &Syntax.FG.FlexWiki :cal SetSyn("flexwiki")<CR>
+an 50.40.140 &Syntax.FG.Focus\ Executable :cal SetSyn("focexec")<CR>
+an 50.40.150 &Syntax.FG.Focus\ Master :cal SetSyn("master")<CR>
+an 50.40.160 &Syntax.FG.FORM :cal SetSyn("form")<CR>
+an 50.40.170 &Syntax.FG.Forth :cal SetSyn("forth")<CR>
+an 50.40.180 &Syntax.FG.Fortran :cal SetSyn("fortran")<CR>
+an 50.40.190 &Syntax.FG.FoxPro :cal SetSyn("foxpro")<CR>
+an 50.40.200 &Syntax.FG.FrameScript :cal SetSyn("framescript")<CR>
+an 50.40.210 &Syntax.FG.Fstab :cal SetSyn("fstab")<CR>
+an 50.40.220 &Syntax.FG.Fvwm.Fvwm\ configuration :cal SetSyn("fvwm1")<CR>
+an 50.40.230 &Syntax.FG.Fvwm.Fvwm2\ configuration :cal SetSyn("fvwm2")<CR>
+an 50.40.240 &Syntax.FG.Fvwm.Fvwm2\ configuration\ with\ M4 :cal SetSyn("fvwm2m4")<CR>
+an 50.40.260 &Syntax.FG.GDB\ command\ file :cal SetSyn("gdb")<CR>
+an 50.40.270 &Syntax.FG.GDMO :cal SetSyn("gdmo")<CR>
+an 50.40.280 &Syntax.FG.Gedcom :cal SetSyn("gedcom")<CR>
+an 50.40.290 &Syntax.FG.Git.Output :cal SetSyn("git")<CR>
+an 50.40.300 &Syntax.FG.Git.Commit :cal SetSyn("gitcommit")<CR>
+an 50.40.310 &Syntax.FG.Git.Config :cal SetSyn("gitconfig")<CR>
+an 50.40.320 &Syntax.FG.Git.Rebase :cal SetSyn("gitrebase")<CR>
+an 50.40.330 &Syntax.FG.Git.Send\ Email :cal SetSyn("gitsendemail")<CR>
+an 50.40.340 &Syntax.FG.Gitolite :cal SetSyn("gitolite")<CR>
+an 50.40.350 &Syntax.FG.Gkrellmrc :cal SetSyn("gkrellmrc")<CR>
+an 50.40.360 &Syntax.FG.Gnash :cal SetSyn("gnash")<CR>
+an 50.40.370 &Syntax.FG.GP :cal SetSyn("gp")<CR>
+an 50.40.380 &Syntax.FG.GPG :cal SetSyn("gpg")<CR>
+an 50.40.390 &Syntax.FG.Grof :cal SetSyn("gprof")<CR>
+an 50.40.400 &Syntax.FG.Group\ file :cal SetSyn("group")<CR>
+an 50.40.410 &Syntax.FG.Grub :cal SetSyn("grub")<CR>
+an 50.40.420 &Syntax.FG.GNU\ Server\ Pages :cal SetSyn("gsp")<CR>
+an 50.40.430 &Syntax.FG.GNUplot :cal SetSyn("gnuplot")<CR>
+an 50.40.440 &Syntax.FG.GrADS\ scripts :cal SetSyn("grads")<CR>
+an 50.40.450 &Syntax.FG.Gretl :cal SetSyn("gretl")<CR>
+an 50.40.460 &Syntax.FG.Groff :cal SetSyn("groff")<CR>
+an 50.40.470 &Syntax.FG.Groovy :cal SetSyn("groovy")<CR>
+an 50.40.480 &Syntax.FG.GTKrc :cal SetSyn("gtkrc")<CR>
 an 50.50.100 &Syntax.HIJK.Haml :cal SetSyn("haml")<CR>
 an 50.50.110 &Syntax.HIJK.Hamster :cal SetSyn("hamster")<CR>
 an 50.50.120 &Syntax.HIJK.Haskell.Haskell :cal SetSyn("haskell")<CR>
@@ -223,42 +233,50 @@ an 50.50.160 &Syntax.HIJK.HASTE\ preproc :cal SetSyn("hastepreproc")<CR>
 an 50.50.170 &Syntax.HIJK.Hercules :cal SetSyn("hercules")<CR>
 an 50.50.180 &Syntax.HIJK.Hex\ dump.XXD :cal SetSyn("xxd")<CR>
 an 50.50.190 &Syntax.HIJK.Hex\ dump.Intel\ MCS51 :cal SetSyn("hex")<CR>
-an 50.50.200 &Syntax.HIJK.HTML.HTML :cal SetSyn("html")<CR>
-an 50.50.210 &Syntax.HIJK.HTML.HTML\ with\ M4 :cal SetSyn("htmlm4")<CR>
-an 50.50.220 &Syntax.HIJK.HTML.HTML\ with\ Ruby\ (eRuby) :cal SetSyn("eruby")<CR>
-an 50.50.230 &Syntax.HIJK.HTML.Cheetah\ HTML\ template :cal SetSyn("htmlcheetah")<CR>
-an 50.50.240 &Syntax.HIJK.HTML.Django\ HTML\ template :cal SetSyn("htmldjango")<CR>
-an 50.50.250 &Syntax.HIJK.HTML.HTML/OS :cal SetSyn("htmlos")<CR>
-an 50.50.260 &Syntax.HIJK.HTML.XHTML :cal SetSyn("xhtml")<CR>
-an 50.50.270 &Syntax.HIJK.Host\.conf :cal SetSyn("hostconf")<CR>
-an 50.50.280 &Syntax.HIJK.Hyper\ Builder :cal SetSyn("hb")<CR>
-an 50.50.300 &Syntax.HIJK.Icewm\ menu :cal SetSyn("icemenu")<CR>
-an 50.50.310 &Syntax.HIJK.Icon :cal SetSyn("icon")<CR>
-an 50.50.320 &Syntax.HIJK.IDL\Generic\ IDL :cal SetSyn("idl")<CR>
-an 50.50.330 &Syntax.HIJK.IDL\Microsoft\ IDL :cal SetSyn("msidl")<CR>
-an 50.50.340 &Syntax.HIJK.Indent\ profile :cal SetSyn("indent")<CR>
-an 50.50.350 &Syntax.HIJK.Inform :cal SetSyn("inform")<CR>
-an 50.50.360 &Syntax.HIJK.Informix\ 4GL :cal SetSyn("fgl")<CR>
-an 50.50.370 &Syntax.HIJK.Initng :cal SetSyn("initng")<CR>
-an 50.50.380 &Syntax.HIJK.Inittab :cal SetSyn("inittab")<CR>
-an 50.50.390 &Syntax.HIJK.Inno\ setup :cal SetSyn("iss")<CR>
-an 50.50.400 &Syntax.HIJK.InstallShield\ script :cal SetSyn("ishd")<CR>
-an 50.50.410 &Syntax.HIJK.Interactive\ Data\ Lang :cal SetSyn("idlang")<CR>
-an 50.50.420 &Syntax.HIJK.IPfilter :cal SetSyn("ipfilter")<CR>
-an 50.50.440 &Syntax.HIJK.JAL :cal SetSyn("jal")<CR>
-an 50.50.450 &Syntax.HIJK.JAM :cal SetSyn("jam")<CR>
-an 50.50.460 &Syntax.HIJK.Jargon :cal SetSyn("jargon")<CR>
-an 50.50.470 &Syntax.HIJK.Java.Java :cal SetSyn("java")<CR>
-an 50.50.480 &Syntax.HIJK.Java.JavaCC :cal SetSyn("javacc")<CR>
-an 50.50.490 &Syntax.HIJK.Java.Java\ Server\ Pages :cal SetSyn("jsp")<CR>
-an 50.50.500 &Syntax.HIJK.Java.Java\ Properties :cal SetSyn("jproperties")<CR>
-an 50.50.510 &Syntax.HIJK.JavaScript :cal SetSyn("javascript")<CR>
-an 50.50.520 &Syntax.HIJK.Jess :cal SetSyn("jess")<CR>
-an 50.50.530 &Syntax.HIJK.Jgraph :cal SetSyn("jgraph")<CR>
-an 50.50.550 &Syntax.HIJK.Kconfig :cal SetSyn("kconfig")<CR>
-an 50.50.560 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
-an 50.50.570 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
-an 50.50.580 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
+an 50.50.200 &Syntax.HIJK.Hg\ commit :cal SetSyn("hgcommit")<CR>
+an 50.50.210 &Syntax.HIJK.HTML.HTML :cal SetSyn("html")<CR>
+an 50.50.220 &Syntax.HIJK.HTML.HTML\ with\ M4 :cal SetSyn("htmlm4")<CR>
+an 50.50.230 &Syntax.HIJK.HTML.HTML\ with\ Ruby\ (eRuby) :cal SetSyn("eruby")<CR>
+an 50.50.240 &Syntax.HIJK.HTML.Cheetah\ HTML\ template :cal SetSyn("htmlcheetah")<CR>
+an 50.50.250 &Syntax.HIJK.HTML.Django\ HTML\ template :cal SetSyn("htmldjango")<CR>
+an 50.50.260 &Syntax.HIJK.HTML.HTML/OS :cal SetSyn("htmlos")<CR>
+an 50.50.270 &Syntax.HIJK.HTML.XHTML :cal SetSyn("xhtml")<CR>
+an 50.50.280 &Syntax.HIJK.Host\.conf :cal SetSyn("hostconf")<CR>
+an 50.50.290 &Syntax.HIJK.Hosts\ access :cal SetSyn("hostsaccess")<CR>
+an 50.50.300 &Syntax.HIJK.Hyper\ Builder :cal SetSyn("hb")<CR>
+an 50.50.320 &Syntax.HIJK.Icewm\ menu :cal SetSyn("icemenu")<CR>
+an 50.50.330 &Syntax.HIJK.Icon :cal SetSyn("icon")<CR>
+an 50.50.340 &Syntax.HIJK.IDL\Generic\ IDL :cal SetSyn("idl")<CR>
+an 50.50.350 &Syntax.HIJK.IDL\Microsoft\ IDL :cal SetSyn("msidl")<CR>
+an 50.50.360 &Syntax.HIJK.Indent\ profile :cal SetSyn("indent")<CR>
+an 50.50.370 &Syntax.HIJK.Inform :cal SetSyn("inform")<CR>
+an 50.50.380 &Syntax.HIJK.Informix\ 4GL :cal SetSyn("fgl")<CR>
+an 50.50.390 &Syntax.HIJK.Initng :cal SetSyn("initng")<CR>
+an 50.50.400 &Syntax.HIJK.Inittab :cal SetSyn("inittab")<CR>
+an 50.50.410 &Syntax.HIJK.Inno\ setup :cal SetSyn("iss")<CR>
+an 50.50.420 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ dat :cal SetSyn("upstreamdat")<CR>
+an 50.50.430 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ log :cal SetSyn("upstreamlog")<CR>
+an 50.50.440 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ Install\ log :cal SetSyn("upstreaminstalllog")<CR>
+an 50.50.450 &Syntax.HIJK.Innovation\ Data\ Processing.Usserver\ log :cal SetSyn("usserverlog")<CR>
+an 50.50.460 &Syntax.HIJK.Innovation\ Data\ Processing.USW2KAgt\ log :cal SetSyn("usw2kagtlog")<CR>
+an 50.50.470 &Syntax.HIJK.InstallShield\ script :cal SetSyn("ishd")<CR>
+an 50.50.480 &Syntax.HIJK.Interactive\ Data\ Lang :cal SetSyn("idlang")<CR>
+an 50.50.490 &Syntax.HIJK.IPfilter :cal SetSyn("ipfilter")<CR>
+an 50.50.510 &Syntax.HIJK.JAL :cal SetSyn("jal")<CR>
+an 50.50.520 &Syntax.HIJK.JAM :cal SetSyn("jam")<CR>
+an 50.50.530 &Syntax.HIJK.Jargon :cal SetSyn("jargon")<CR>
+an 50.50.540 &Syntax.HIJK.Java.Java :cal SetSyn("java")<CR>
+an 50.50.550 &Syntax.HIJK.Java.JavaCC :cal SetSyn("javacc")<CR>
+an 50.50.560 &Syntax.HIJK.Java.Java\ Server\ Pages :cal SetSyn("jsp")<CR>
+an 50.50.570 &Syntax.HIJK.Java.Java\ Properties :cal SetSyn("jproperties")<CR>
+an 50.50.580 &Syntax.HIJK.JavaScript :cal SetSyn("javascript")<CR>
+an 50.50.590 &Syntax.HIJK.Jess :cal SetSyn("jess")<CR>
+an 50.50.600 &Syntax.HIJK.Jgraph :cal SetSyn("jgraph")<CR>
+an 50.50.610 &Syntax.HIJK.Jovial :cal SetSyn("jovial")<CR>
+an 50.50.630 &Syntax.HIJK.Kconfig :cal SetSyn("kconfig")<CR>
+an 50.50.640 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
+an 50.50.650 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
+an 50.50.660 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
 an 50.60.100 &Syntax.L.Lace :cal SetSyn("lace")<CR>
 an 50.60.110 &Syntax.L.LamdaProlog :cal SetSyn("lprolog")<CR>
 an 50.60.120 &Syntax.L.Latte :cal SetSyn("latte")<CR>
@@ -292,59 +310,61 @@ an 50.70.110 &Syntax.M.MaGic\ Point :cal SetSyn("mgp")<CR>
 an 50.70.120 &Syntax.M.Mail :cal SetSyn("mail")<CR>
 an 50.70.130 &Syntax.M.Mail\ aliases :cal SetSyn("mailaliases")<CR>
 an 50.70.140 &Syntax.M.Mailcap :cal SetSyn("mailcap")<CR>
-an 50.70.150 &Syntax.M.Makefile :cal SetSyn("make")<CR>
-an 50.70.160 &Syntax.M.MakeIndex :cal SetSyn("ist")<CR>
-an 50.70.170 &Syntax.M.Man\ page :cal SetSyn("man")<CR>
-an 50.70.180 &Syntax.M.Man\.conf :cal SetSyn("manconf")<CR>
-an 50.70.190 &Syntax.M.Maple\ V :cal SetSyn("maple")<CR>
-an 50.70.200 &Syntax.M.Markdown :cal SetSyn("markdown")<CR>
-an 50.70.210 &Syntax.M.Mason :cal SetSyn("mason")<CR>
-an 50.70.220 &Syntax.M.Mathematica :cal SetSyn("mma")<CR>
-an 50.70.230 &Syntax.M.Matlab :cal SetSyn("matlab")<CR>
-an 50.70.240 &Syntax.M.Maxima :cal SetSyn("maxima")<CR>
-an 50.70.250 &Syntax.M.MEL\ (for\ Maya) :cal SetSyn("mel")<CR>
-an 50.70.260 &Syntax.M.Messages\ (/var/log) :cal SetSyn("messages")<CR>
-an 50.70.270 &Syntax.M.Metafont :cal SetSyn("mf")<CR>
-an 50.70.280 &Syntax.M.MetaPost :cal SetSyn("mp")<CR>
-an 50.70.290 &Syntax.M.MGL :cal SetSyn("mgl")<CR>
-an 50.70.300 &Syntax.M.MMIX :cal SetSyn("mmix")<CR>
-an 50.70.310 &Syntax.M.Modconf :cal SetSyn("modconf")<CR>
-an 50.70.320 &Syntax.M.Model :cal SetSyn("model")<CR>
-an 50.70.330 &Syntax.M.Modsim\ III :cal SetSyn("modsim3")<CR>
-an 50.70.340 &Syntax.M.Modula\ 2 :cal SetSyn("modula2")<CR>
-an 50.70.350 &Syntax.M.Modula\ 3 :cal SetSyn("modula3")<CR>
-an 50.70.360 &Syntax.M.Monk :cal SetSyn("monk")<CR>
-an 50.70.370 &Syntax.M.Mplayer\ config :cal SetSyn("mplayerconf")<CR>
-an 50.70.380 &Syntax.M.MOO :cal SetSyn("moo")<CR>
-an 50.70.390 &Syntax.M.Mrxvtrc :cal SetSyn("mrxvtrc")<CR>
-an 50.70.400 &Syntax.M.MS-DOS/Windows.4DOS\ \.bat\ file :cal SetSyn("btm")<CR>
-an 50.70.410 &Syntax.M.MS-DOS/Windows.\.bat\/\.cmd\ file :cal SetSyn("dosbatch")<CR>
-an 50.70.420 &Syntax.M.MS-DOS/Windows.\.ini\ file :cal SetSyn("dosini")<CR>
-an 50.70.430 &Syntax.M.MS-DOS/Windows.Message\ text :cal SetSyn("msmessages")<CR>
-an 50.70.440 &Syntax.M.MS-DOS/Windows.Module\ Definition :cal SetSyn("def")<CR>
-an 50.70.450 &Syntax.M.MS-DOS/Windows.Registry :cal SetSyn("registry")<CR>
-an 50.70.460 &Syntax.M.MS-DOS/Windows.Resource\ file :cal SetSyn("rc")<CR>
-an 50.70.470 &Syntax.M.Msql :cal SetSyn("msql")<CR>
-an 50.70.480 &Syntax.M.MuPAD :cal SetSyn("mupad")<CR>
-an 50.70.490 &Syntax.M.MUSHcode :cal SetSyn("mush")<CR>
-an 50.70.500 &Syntax.M.Muttrc :cal SetSyn("muttrc")<CR>
+an 50.70.150 &Syntax.M.Mallard :cal SetSyn("mallard")<CR>
+an 50.70.160 &Syntax.M.Makefile :cal SetSyn("make")<CR>
+an 50.70.170 &Syntax.M.MakeIndex :cal SetSyn("ist")<CR>
+an 50.70.180 &Syntax.M.Man\ page :cal SetSyn("man")<CR>
+an 50.70.190 &Syntax.M.Man\.conf :cal SetSyn("manconf")<CR>
+an 50.70.200 &Syntax.M.Maple\ V :cal SetSyn("maple")<CR>
+an 50.70.210 &Syntax.M.Markdown :cal SetSyn("markdown")<CR>
+an 50.70.220 &Syntax.M.Mason :cal SetSyn("mason")<CR>
+an 50.70.230 &Syntax.M.Mathematica :cal SetSyn("mma")<CR>
+an 50.70.240 &Syntax.M.Matlab :cal SetSyn("matlab")<CR>
+an 50.70.250 &Syntax.M.Maxima :cal SetSyn("maxima")<CR>
+an 50.70.260 &Syntax.M.MEL\ (for\ Maya) :cal SetSyn("mel")<CR>
+an 50.70.270 &Syntax.M.Messages\ (/var/log) :cal SetSyn("messages")<CR>
+an 50.70.280 &Syntax.M.Metafont :cal SetSyn("mf")<CR>
+an 50.70.290 &Syntax.M.MetaPost :cal SetSyn("mp")<CR>
+an 50.70.300 &Syntax.M.MGL :cal SetSyn("mgl")<CR>
+an 50.70.310 &Syntax.M.MMIX :cal SetSyn("mmix")<CR>
+an 50.70.320 &Syntax.M.Modconf :cal SetSyn("modconf")<CR>
+an 50.70.330 &Syntax.M.Model :cal SetSyn("model")<CR>
+an 50.70.340 &Syntax.M.Modsim\ III :cal SetSyn("modsim3")<CR>
+an 50.70.350 &Syntax.M.Modula\ 2 :cal SetSyn("modula2")<CR>
+an 50.70.360 &Syntax.M.Modula\ 3 :cal SetSyn("modula3")<CR>
+an 50.70.370 &Syntax.M.Monk :cal SetSyn("monk")<CR>
+an 50.70.380 &Syntax.M.Mplayer\ config :cal SetSyn("mplayerconf")<CR>
+an 50.70.390 &Syntax.M.MOO :cal SetSyn("moo")<CR>
+an 50.70.400 &Syntax.M.Mrxvtrc :cal SetSyn("mrxvtrc")<CR>
+an 50.70.410 &Syntax.M.MS-DOS/Windows.4DOS\ \.bat\ file :cal SetSyn("btm")<CR>
+an 50.70.420 &Syntax.M.MS-DOS/Windows.\.bat\/\.cmd\ file :cal SetSyn("dosbatch")<CR>
+an 50.70.430 &Syntax.M.MS-DOS/Windows.\.ini\ file :cal SetSyn("dosini")<CR>
+an 50.70.440 &Syntax.M.MS-DOS/Windows.Message\ text :cal SetSyn("msmessages")<CR>
+an 50.70.450 &Syntax.M.MS-DOS/Windows.Module\ Definition :cal SetSyn("def")<CR>
+an 50.70.460 &Syntax.M.MS-DOS/Windows.Registry :cal SetSyn("registry")<CR>
+an 50.70.470 &Syntax.M.MS-DOS/Windows.Resource\ file :cal SetSyn("rc")<CR>
+an 50.70.480 &Syntax.M.Msql :cal SetSyn("msql")<CR>
+an 50.70.490 &Syntax.M.MuPAD :cal SetSyn("mupad")<CR>
+an 50.70.500 &Syntax.M.MUSHcode :cal SetSyn("mush")<CR>
+an 50.70.510 &Syntax.M.Muttrc :cal SetSyn("muttrc")<CR>
 an 50.80.100 &Syntax.NO.Nanorc :cal SetSyn("nanorc")<CR>
 an 50.80.110 &Syntax.NO.Nastran\ input/DMAP :cal SetSyn("nastran")<CR>
 an 50.80.120 &Syntax.NO.Natural :cal SetSyn("natural")<CR>
 an 50.80.130 &Syntax.NO.Netrc :cal SetSyn("netrc")<CR>
-an 50.80.140 &Syntax.NO.Novell\ NCF\ batch :cal SetSyn("ncf")<CR>
-an 50.80.150 &Syntax.NO.Not\ Quite\ C\ (LEGO) :cal SetSyn("nqc")<CR>
-an 50.80.160 &Syntax.NO.Nroff :cal SetSyn("nroff")<CR>
-an 50.80.170 &Syntax.NO.NSIS\ script :cal SetSyn("nsis")<CR>
-an 50.80.190 &Syntax.NO.Obj\ 3D\ wavefront :cal SetSyn("obj")<CR>
-an 50.80.200 &Syntax.NO.Objective\ C :cal SetSyn("objc")<CR>
-an 50.80.210 &Syntax.NO.Objective\ C++ :cal SetSyn("objcpp")<CR>
-an 50.80.220 &Syntax.NO.OCAML :cal SetSyn("ocaml")<CR>
-an 50.80.230 &Syntax.NO.Occam :cal SetSyn("occam")<CR>
-an 50.80.240 &Syntax.NO.Omnimark :cal SetSyn("omnimark")<CR>
-an 50.80.250 &Syntax.NO.OpenROAD :cal SetSyn("openroad")<CR>
-an 50.80.260 &Syntax.NO.Open\ Psion\ Lang :cal SetSyn("opl")<CR>
-an 50.80.270 &Syntax.NO.Oracle\ config :cal SetSyn("ora")<CR>
+an 50.80.140 &Syntax.NO.Ninja :cal SetSyn("ninja")<CR>
+an 50.80.150 &Syntax.NO.Novell\ NCF\ batch :cal SetSyn("ncf")<CR>
+an 50.80.160 &Syntax.NO.Not\ Quite\ C\ (LEGO) :cal SetSyn("nqc")<CR>
+an 50.80.170 &Syntax.NO.Nroff :cal SetSyn("nroff")<CR>
+an 50.80.180 &Syntax.NO.NSIS\ script :cal SetSyn("nsis")<CR>
+an 50.80.200 &Syntax.NO.Obj\ 3D\ wavefront :cal SetSyn("obj")<CR>
+an 50.80.210 &Syntax.NO.Objective\ C :cal SetSyn("objc")<CR>
+an 50.80.220 &Syntax.NO.Objective\ C++ :cal SetSyn("objcpp")<CR>
+an 50.80.230 &Syntax.NO.OCAML :cal SetSyn("ocaml")<CR>
+an 50.80.240 &Syntax.NO.Occam :cal SetSyn("occam")<CR>
+an 50.80.250 &Syntax.NO.Omnimark :cal SetSyn("omnimark")<CR>
+an 50.80.260 &Syntax.NO.OpenROAD :cal SetSyn("openroad")<CR>
+an 50.80.270 &Syntax.NO.Open\ Psion\ Lang :cal SetSyn("opl")<CR>
+an 50.80.280 &Syntax.NO.Oracle\ config :cal SetSyn("ora")<CR>
 an 50.90.100 &Syntax.PQ.Packet\ filter\ conf :cal SetSyn("pf")<CR>
 an 50.90.110 &Syntax.PQ.Palm\ resource\ compiler :cal SetSyn("pilrc")<CR>
 an 50.90.120 &Syntax.PQ.Pam\ config :cal SetSyn("pamconf")<CR>
@@ -357,35 +377,40 @@ an 50.90.180 &Syntax.PQ.Perl.Perl :cal SetSyn("perl")<CR>
 an 50.90.190 &Syntax.PQ.Perl.Perl\ 6 :cal SetSyn("perl6")<CR>
 an 50.90.200 &Syntax.PQ.Perl.Perl\ POD :cal SetSyn("pod")<CR>
 an 50.90.210 &Syntax.PQ.Perl.Perl\ XS :cal SetSyn("xs")<CR>
-an 50.90.220 &Syntax.PQ.PHP.PHP\ 3-4 :cal SetSyn("php")<CR>
-an 50.90.230 &Syntax.PQ.PHP.Phtml\ (PHP\ 2) :cal SetSyn("phtml")<CR>
-an 50.90.240 &Syntax.PQ.Pike :cal SetSyn("pike")<CR>
-an 50.90.250 &Syntax.PQ.Pine\ RC :cal SetSyn("pine")<CR>
-an 50.90.260 &Syntax.PQ.Pinfo\ RC :cal SetSyn("pinfo")<CR>
-an 50.90.270 &Syntax.PQ.PL/M :cal SetSyn("plm")<CR>
-an 50.90.280 &Syntax.PQ.PL/SQL :cal SetSyn("plsql")<CR>
-an 50.90.290 &Syntax.PQ.PLP :cal SetSyn("plp")<CR>
-an 50.90.300 &Syntax.PQ.PO\ (GNU\ gettext) :cal SetSyn("po")<CR>
-an 50.90.310 &Syntax.PQ.Postfix\ main\ config :cal SetSyn("pfmain")<CR>
-an 50.90.320 &Syntax.PQ.PostScript.PostScript :cal SetSyn("postscr")<CR>
-an 50.90.330 &Syntax.PQ.PostScript.PostScript\ Printer\ Description :cal SetSyn("ppd")<CR>
-an 50.90.340 &Syntax.PQ.Povray.Povray\ scene\ descr :cal SetSyn("pov")<CR>
-an 50.90.350 &Syntax.PQ.Povray.Povray\ configuration :cal SetSyn("povini")<CR>
-an 50.90.360 &Syntax.PQ.PPWizard :cal SetSyn("ppwiz")<CR>
-an 50.90.370 &Syntax.PQ.Prescribe\ (Kyocera) :cal SetSyn("prescribe")<CR>
-an 50.90.380 &Syntax.PQ.Printcap :cal SetSyn("pcap")<CR>
-an 50.90.390 &Syntax.PQ.Privoxy :cal SetSyn("privoxy")<CR>
-an 50.90.400 &Syntax.PQ.Procmail :cal SetSyn("procmail")<CR>
-an 50.90.410 &Syntax.PQ.Product\ Spec\ File :cal SetSyn("psf")<CR>
-an 50.90.420 &Syntax.PQ.Progress :cal SetSyn("progress")<CR>
-an 50.90.430 &Syntax.PQ.Prolog :cal SetSyn("prolog")<CR>
-an 50.90.440 &Syntax.PQ.ProMeLa :cal SetSyn("promela")<CR>
-an 50.90.450 &Syntax.PQ.Protocols :cal SetSyn("protocols")<CR>
-an 50.90.460 &Syntax.PQ.Purify\ log :cal SetSyn("purifylog")<CR>
-an 50.90.470 &Syntax.PQ.Pyrex :cal SetSyn("pyrex")<CR>
-an 50.90.480 &Syntax.PQ.Python :cal SetSyn("python")<CR>
-an 50.90.500 &Syntax.PQ.Quake :cal SetSyn("quake")<CR>
-an 50.90.510 &Syntax.PQ.Quickfix\ window :cal SetSyn("qf")<CR>
+an 50.90.220 &Syntax.PQ.Perl.Template\ toolkit :cal SetSyn("tt2")<CR>
+an 50.90.230 &Syntax.PQ.Perl.Template\ toolkit\ Html :cal SetSyn("tt2html")<CR>
+an 50.90.240 &Syntax.PQ.Perl.Template\ toolkit\ JS :cal SetSyn("tt2js")<CR>
+an 50.90.250 &Syntax.PQ.PHP.PHP\ 3-4 :cal SetSyn("php")<CR>
+an 50.90.260 &Syntax.PQ.PHP.Phtml\ (PHP\ 2) :cal SetSyn("phtml")<CR>
+an 50.90.270 &Syntax.PQ.Pike :cal SetSyn("pike")<CR>
+an 50.90.280 &Syntax.PQ.Pine\ RC :cal SetSyn("pine")<CR>
+an 50.90.290 &Syntax.PQ.Pinfo\ RC :cal SetSyn("pinfo")<CR>
+an 50.90.300 &Syntax.PQ.PL/M :cal SetSyn("plm")<CR>
+an 50.90.310 &Syntax.PQ.PL/SQL :cal SetSyn("plsql")<CR>
+an 50.90.320 &Syntax.PQ.Pli :cal SetSyn("pli")<CR>
+an 50.90.330 &Syntax.PQ.PLP :cal SetSyn("plp")<CR>
+an 50.90.340 &Syntax.PQ.PO\ (GNU\ gettext) :cal SetSyn("po")<CR>
+an 50.90.350 &Syntax.PQ.Postfix\ main\ config :cal SetSyn("pfmain")<CR>
+an 50.90.360 &Syntax.PQ.PostScript.PostScript :cal SetSyn("postscr")<CR>
+an 50.90.370 &Syntax.PQ.PostScript.PostScript\ Printer\ Description :cal SetSyn("ppd")<CR>
+an 50.90.380 &Syntax.PQ.Povray.Povray\ scene\ descr :cal SetSyn("pov")<CR>
+an 50.90.390 &Syntax.PQ.Povray.Povray\ configuration :cal SetSyn("povini")<CR>
+an 50.90.400 &Syntax.PQ.PPWizard :cal SetSyn("ppwiz")<CR>
+an 50.90.410 &Syntax.PQ.Prescribe\ (Kyocera) :cal SetSyn("prescribe")<CR>
+an 50.90.420 &Syntax.PQ.Printcap :cal SetSyn("pcap")<CR>
+an 50.90.430 &Syntax.PQ.Privoxy :cal SetSyn("privoxy")<CR>
+an 50.90.440 &Syntax.PQ.Procmail :cal SetSyn("procmail")<CR>
+an 50.90.450 &Syntax.PQ.Product\ Spec\ File :cal SetSyn("psf")<CR>
+an 50.90.460 &Syntax.PQ.Progress :cal SetSyn("progress")<CR>
+an 50.90.470 &Syntax.PQ.Prolog :cal SetSyn("prolog")<CR>
+an 50.90.480 &Syntax.PQ.ProMeLa :cal SetSyn("promela")<CR>
+an 50.90.490 &Syntax.PQ.Proto :cal SetSyn("proto")<CR>
+an 50.90.500 &Syntax.PQ.Protocols :cal SetSyn("protocols")<CR>
+an 50.90.510 &Syntax.PQ.Purify\ log :cal SetSyn("purifylog")<CR>
+an 50.90.520 &Syntax.PQ.Pyrex :cal SetSyn("pyrex")<CR>
+an 50.90.530 &Syntax.PQ.Python :cal SetSyn("python")<CR>
+an 50.90.550 &Syntax.PQ.Quake :cal SetSyn("quake")<CR>
+an 50.90.560 &Syntax.PQ.Quickfix\ window :cal SetSyn("qf")<CR>
 an 50.100.100 &Syntax.R.R.R :cal SetSyn("r")<CR>
 an 50.100.110 &Syntax.R.R.R\ help :cal SetSyn("rhelp")<CR>
 an 50.100.120 &Syntax.R.R.R\ noweb :cal SetSyn("rnoweb")<CR>
@@ -396,20 +421,22 @@ an 50.100.160 &Syntax.R.RCS.RCS\ log\ output :cal SetSyn("rcslog")<CR>
 an 50.100.170 &Syntax.R.RCS.RCS\ file :cal SetSyn("rcs")<CR>
 an 50.100.180 &Syntax.R.Readline\ config :cal SetSyn("readline")<CR>
 an 50.100.190 &Syntax.R.Rebol :cal SetSyn("rebol")<CR>
-an 50.100.200 &Syntax.R.Remind :cal SetSyn("remind")<CR>
-an 50.100.210 &Syntax.R.Relax\ NG\ compact :cal SetSyn("rnc")<CR>
-an 50.100.220 &Syntax.R.Renderman.Renderman\ Shader\ Lang :cal SetSyn("sl")<CR>
-an 50.100.230 &Syntax.R.Renderman.Renderman\ Interface\ Bytestream :cal SetSyn("rib")<CR>
-an 50.100.240 &Syntax.R.Resolv\.conf :cal SetSyn("resolv")<CR>
-an 50.100.250 &Syntax.R.Reva\ Forth :cal SetSyn("reva")<CR>
-an 50.100.260 &Syntax.R.Rexx :cal SetSyn("rexx")<CR>
-an 50.100.270 &Syntax.R.Robots\.txt :cal SetSyn("robots")<CR>
-an 50.100.280 &Syntax.R.RockLinux\ package\ desc\. :cal SetSyn("desc")<CR>
-an 50.100.290 &Syntax.R.Rpcgen :cal SetSyn("rpcgen")<CR>
-an 50.100.300 &Syntax.R.RPL/2 :cal SetSyn("rpl")<CR>
-an 50.100.310 &Syntax.R.ReStructuredText :cal SetSyn("rst")<CR>
-an 50.100.320 &Syntax.R.RTF :cal SetSyn("rtf")<CR>
-an 50.100.330 &Syntax.R.Ruby :cal SetSyn("ruby")<CR>
+an 50.100.200 &Syntax.R.ReDIF :cal SetSyn("redif")<CR>
+an 50.100.210 &Syntax.R.Relax\ NG :cal SetSyn("rng")<CR>
+an 50.100.220 &Syntax.R.Remind :cal SetSyn("remind")<CR>
+an 50.100.230 &Syntax.R.Relax\ NG\ compact :cal SetSyn("rnc")<CR>
+an 50.100.240 &Syntax.R.Renderman.Renderman\ Shader\ Lang :cal SetSyn("sl")<CR>
+an 50.100.250 &Syntax.R.Renderman.Renderman\ Interface\ Bytestream :cal SetSyn("rib")<CR>
+an 50.100.260 &Syntax.R.Resolv\.conf :cal SetSyn("resolv")<CR>
+an 50.100.270 &Syntax.R.Reva\ Forth :cal SetSyn("reva")<CR>
+an 50.100.280 &Syntax.R.Rexx :cal SetSyn("rexx")<CR>
+an 50.100.290 &Syntax.R.Robots\.txt :cal SetSyn("robots")<CR>
+an 50.100.300 &Syntax.R.RockLinux\ package\ desc\. :cal SetSyn("desc")<CR>
+an 50.100.310 &Syntax.R.Rpcgen :cal SetSyn("rpcgen")<CR>
+an 50.100.320 &Syntax.R.RPL/2 :cal SetSyn("rpl")<CR>
+an 50.100.330 &Syntax.R.ReStructuredText :cal SetSyn("rst")<CR>
+an 50.100.340 &Syntax.R.RTF :cal SetSyn("rtf")<CR>
+an 50.100.350 &Syntax.R.Ruby :cal SetSyn("ruby")<CR>
 an 50.110.100 &Syntax.S-Sm.S-Lang :cal SetSyn("slang")<CR>
 an 50.110.110 &Syntax.S-Sm.Samba\ config :cal SetSyn("samba")<CR>
 an 50.110.120 &Syntax.S-Sm.SAS :cal SetSyn("sas")<CR>
@@ -467,75 +494,80 @@ an 50.120.190 &Syntax.Sn-Sy.Spyce :cal SetSyn("spyce")<CR>
 an 50.120.200 &Syntax.Sn-Sy.Speedup :cal SetSyn("spup")<CR>
 an 50.120.210 &Syntax.Sn-Sy.Splint :cal SetSyn("splint")<CR>
 an 50.120.220 &Syntax.Sn-Sy.Squid\ config :cal SetSyn("squid")<CR>
-an 50.120.230 &Syntax.Sn-Sy.SQL.ESQL-C :cal SetSyn("esqlc")<CR>
-an 50.120.240 &Syntax.Sn-Sy.SQL.MySQL :cal SetSyn("mysql")<CR>
-an 50.120.250 &Syntax.Sn-Sy.SQL.PL/SQL :cal SetSyn("plsql")<CR>
-an 50.120.260 &Syntax.Sn-Sy.SQL.SQL\ Anywhere :cal SetSyn("sqlanywhere")<CR>
-an 50.120.270 &Syntax.Sn-Sy.SQL.SQL\ (automatic) :cal SetSyn("sql")<CR>
-an 50.120.280 &Syntax.Sn-Sy.SQL.SQL\ (Oracle) :cal SetSyn("sqloracle")<CR>
-an 50.120.290 &Syntax.Sn-Sy.SQL.SQL\ Forms :cal SetSyn("sqlforms")<CR>
-an 50.120.300 &Syntax.Sn-Sy.SQL.SQLJ :cal SetSyn("sqlj")<CR>
-an 50.120.310 &Syntax.Sn-Sy.SQL.SQL-Informix :cal SetSyn("sqlinformix")<CR>
-an 50.120.320 &Syntax.Sn-Sy.SQR :cal SetSyn("sqr")<CR>
-an 50.120.330 &Syntax.Sn-Sy.Ssh.ssh_config :cal SetSyn("sshconfig")<CR>
-an 50.120.340 &Syntax.Sn-Sy.Ssh.sshd_config :cal SetSyn("sshdconfig")<CR>
-an 50.120.350 &Syntax.Sn-Sy.Standard\ ML :cal SetSyn("sml")<CR>
-an 50.120.360 &Syntax.Sn-Sy.Stata.SMCL :cal SetSyn("smcl")<CR>
-an 50.120.370 &Syntax.Sn-Sy.Stata.Stata :cal SetSyn("stata")<CR>
-an 50.120.380 &Syntax.Sn-Sy.Stored\ Procedures :cal SetSyn("stp")<CR>
-an 50.120.390 &Syntax.Sn-Sy.Strace :cal SetSyn("strace")<CR>
-an 50.120.400 &Syntax.Sn-Sy.Streaming\ descriptor\ file :cal SetSyn("sd")<CR>
-an 50.120.410 &Syntax.Sn-Sy.Subversion\ commit :cal SetSyn("svn")<CR>
-an 50.120.420 &Syntax.Sn-Sy.Sudoers :cal SetSyn("sudoers")<CR>
-an 50.120.430 &Syntax.Sn-Sy.SVG :cal SetSyn("svg")<CR>
-an 50.120.440 &Syntax.Sn-Sy.Symbian\ meta-makefile :cal SetSyn("mmp")<CR>
-an 50.120.450 &Syntax.Sn-Sy.Sysctl\.conf :cal SetSyn("sysctl")<CR>
+an 50.120.230 &Syntax.Sn-Sy.SQL.SAP\ HANA :cal SetSyn("sqlhana")<CR>
+an 50.120.240 &Syntax.Sn-Sy.SQL.ESQL-C :cal SetSyn("esqlc")<CR>
+an 50.120.250 &Syntax.Sn-Sy.SQL.MySQL :cal SetSyn("mysql")<CR>
+an 50.120.260 &Syntax.Sn-Sy.SQL.PL/SQL :cal SetSyn("plsql")<CR>
+an 50.120.270 &Syntax.Sn-Sy.SQL.SQL\ Anywhere :cal SetSyn("sqlanywhere")<CR>
+an 50.120.280 &Syntax.Sn-Sy.SQL.SQL\ (automatic) :cal SetSyn("sql")<CR>
+an 50.120.290 &Syntax.Sn-Sy.SQL.SQL\ (Oracle) :cal SetSyn("sqloracle")<CR>
+an 50.120.300 &Syntax.Sn-Sy.SQL.SQL\ Forms :cal SetSyn("sqlforms")<CR>
+an 50.120.310 &Syntax.Sn-Sy.SQL.SQLJ :cal SetSyn("sqlj")<CR>
+an 50.120.320 &Syntax.Sn-Sy.SQL.SQL-Informix :cal SetSyn("sqlinformix")<CR>
+an 50.120.330 &Syntax.Sn-Sy.SQR :cal SetSyn("sqr")<CR>
+an 50.120.340 &Syntax.Sn-Sy.Ssh.ssh_config :cal SetSyn("sshconfig")<CR>
+an 50.120.350 &Syntax.Sn-Sy.Ssh.sshd_config :cal SetSyn("sshdconfig")<CR>
+an 50.120.360 &Syntax.Sn-Sy.Standard\ ML :cal SetSyn("sml")<CR>
+an 50.120.370 &Syntax.Sn-Sy.Stata.SMCL :cal SetSyn("smcl")<CR>
+an 50.120.380 &Syntax.Sn-Sy.Stata.Stata :cal SetSyn("stata")<CR>
+an 50.120.390 &Syntax.Sn-Sy.Stored\ Procedures :cal SetSyn("stp")<CR>
+an 50.120.400 &Syntax.Sn-Sy.Strace :cal SetSyn("strace")<CR>
+an 50.120.410 &Syntax.Sn-Sy.Streaming\ descriptor\ file :cal SetSyn("sd")<CR>
+an 50.120.420 &Syntax.Sn-Sy.Subversion\ commit :cal SetSyn("svn")<CR>
+an 50.120.430 &Syntax.Sn-Sy.Sudoers :cal SetSyn("sudoers")<CR>
+an 50.120.440 &Syntax.Sn-Sy.SVG :cal SetSyn("svg")<CR>
+an 50.120.450 &Syntax.Sn-Sy.Symbian\ meta-makefile :cal SetSyn("mmp")<CR>
+an 50.120.460 &Syntax.Sn-Sy.Sysctl\.conf :cal SetSyn("sysctl")<CR>
 an 50.130.100 &Syntax.T.TADS :cal SetSyn("tads")<CR>
 an 50.130.110 &Syntax.T.Tags :cal SetSyn("tags")<CR>
 an 50.130.120 &Syntax.T.TAK.TAK\ compare :cal SetSyn("takcmp")<CR>
 an 50.130.130 &Syntax.T.TAK.TAK\ input :cal SetSyn("tak")<CR>
 an 50.130.140 &Syntax.T.TAK.TAK\ output :cal SetSyn("takout")<CR>
-an 50.130.150 &Syntax.T.Task\ data :cal SetSyn("taskdata")<CR>
-an 50.130.160 &Syntax.T.Task\ 42\ edit :cal SetSyn("taskedit")<CR>
-an 50.130.170 &Syntax.T.Tcl/Tk :cal SetSyn("tcl")<CR>
-an 50.130.180 &Syntax.T.TealInfo :cal SetSyn("tli")<CR>
-an 50.130.190 &Syntax.T.Telix\ Salt :cal SetSyn("tsalt")<CR>
-an 50.130.200 &Syntax.T.Termcap/Printcap :cal SetSyn("ptcap")<CR>
-an 50.130.210 &Syntax.T.Terminfo :cal SetSyn("terminfo")<CR>
-an 50.130.220 &Syntax.T.TeX.TeX/LaTeX :cal SetSyn("tex")<CR>
-an 50.130.230 &Syntax.T.TeX.plain\ TeX :cal SetSyn("plaintex")<CR>
-an 50.130.240 &Syntax.T.TeX.ConTeXt :cal SetSyn("context")<CR>
-an 50.130.250 &Syntax.T.TeX.TeX\ configuration :cal SetSyn("texmf")<CR>
-an 50.130.260 &Syntax.T.TeX.Texinfo :cal SetSyn("texinfo")<CR>
-an 50.130.270 &Syntax.T.TF\ mud\ client :cal SetSyn("tf")<CR>
-an 50.130.280 &Syntax.T.Tidy\ configuration :cal SetSyn("tidy")<CR>
-an 50.130.290 &Syntax.T.Tilde :cal SetSyn("tilde")<CR>
-an 50.130.300 &Syntax.T.TPP :cal SetSyn("tpp")<CR>
-an 50.130.310 &Syntax.T.Trasys\ input :cal SetSyn("trasys")<CR>
-an 50.130.320 &Syntax.T.Trustees :cal SetSyn("trustees")<CR>
-an 50.130.330 &Syntax.T.TSS.Command\ Line :cal SetSyn("tsscl")<CR>
-an 50.130.340 &Syntax.T.TSS.Geometry :cal SetSyn("tssgm")<CR>
-an 50.130.350 &Syntax.T.TSS.Optics :cal SetSyn("tssop")<CR>
+an 50.130.150 &Syntax.T.Tar\ listing :cal SetSyn("tar")<CR>
+an 50.130.160 &Syntax.T.Task\ data :cal SetSyn("taskdata")<CR>
+an 50.130.170 &Syntax.T.Task\ 42\ edit :cal SetSyn("taskedit")<CR>
+an 50.130.180 &Syntax.T.Tcl/Tk :cal SetSyn("tcl")<CR>
+an 50.130.190 &Syntax.T.TealInfo :cal SetSyn("tli")<CR>
+an 50.130.200 &Syntax.T.Telix\ Salt :cal SetSyn("tsalt")<CR>
+an 50.130.210 &Syntax.T.Termcap/Printcap :cal SetSyn("ptcap")<CR>
+an 50.130.220 &Syntax.T.Terminfo :cal SetSyn("terminfo")<CR>
+an 50.130.230 &Syntax.T.TeX.TeX/LaTeX :cal SetSyn("tex")<CR>
+an 50.130.240 &Syntax.T.TeX.plain\ TeX :cal SetSyn("plaintex")<CR>
+an 50.130.250 &Syntax.T.TeX.Initex :cal SetSyn("initex")<CR>
+an 50.130.260 &Syntax.T.TeX.ConTeXt :cal SetSyn("context")<CR>
+an 50.130.270 &Syntax.T.TeX.TeX\ configuration :cal SetSyn("texmf")<CR>
+an 50.130.280 &Syntax.T.TeX.Texinfo :cal SetSyn("texinfo")<CR>
+an 50.130.290 &Syntax.T.TF\ mud\ client :cal SetSyn("tf")<CR>
+an 50.130.300 &Syntax.T.Tidy\ configuration :cal SetSyn("tidy")<CR>
+an 50.130.310 &Syntax.T.Tilde :cal SetSyn("tilde")<CR>
+an 50.130.320 &Syntax.T.TPP :cal SetSyn("tpp")<CR>
+an 50.130.330 &Syntax.T.Trasys\ input :cal SetSyn("trasys")<CR>
+an 50.130.340 &Syntax.T.Treetop :cal SetSyn("treetop")<CR>
+an 50.130.350 &Syntax.T.Trustees :cal SetSyn("trustees")<CR>
+an 50.130.360 &Syntax.T.TSS.Command\ Line :cal SetSyn("tsscl")<CR>
+an 50.130.370 &Syntax.T.TSS.Geometry :cal SetSyn("tssgm")<CR>
+an 50.130.380 &Syntax.T.TSS.Optics :cal SetSyn("tssop")<CR>
 an 50.140.100 &Syntax.UV.Udev\ config :cal SetSyn("udevconf")<CR>
 an 50.140.110 &Syntax.UV.Udev\ permissions :cal SetSyn("udevperm")<CR>
 an 50.140.120 &Syntax.UV.Udev\ rules :cal SetSyn("udevrules")<CR>
 an 50.140.130 &Syntax.UV.UIT/UIL :cal SetSyn("uil")<CR>
 an 50.140.140 &Syntax.UV.UnrealScript :cal SetSyn("uc")<CR>
 an 50.140.150 &Syntax.UV.Updatedb\.conf :cal SetSyn("updatedb")<CR>
-an 50.140.170 &Syntax.UV.Valgrind :cal SetSyn("valgrind")<CR>
-an 50.140.180 &Syntax.UV.Vera :cal SetSyn("vera")<CR>
-an 50.140.190 &Syntax.UV.Verilog-AMS\ HDL :cal SetSyn("verilogams")<CR>
-an 50.140.200 &Syntax.UV.Verilog\ HDL :cal SetSyn("verilog")<CR>
-an 50.140.210 &Syntax.UV.Vgrindefs :cal SetSyn("vgrindefs")<CR>
-an 50.140.220 &Syntax.UV.VHDL :cal SetSyn("vhdl")<CR>
-an 50.140.230 &Syntax.UV.Vim.Vim\ help\ file :cal SetSyn("help")<CR>
-an 50.140.240 &Syntax.UV.Vim.Vim\ script :cal SetSyn("vim")<CR>
-an 50.140.250 &Syntax.UV.Vim.Viminfo\ file :cal SetSyn("viminfo")<CR>
-an 50.140.260 &Syntax.UV.Virata\ config :cal SetSyn("virata")<CR>
-an 50.140.270 &Syntax.UV.Visual\ Basic :cal SetSyn("vb")<CR>
-an 50.140.280 &Syntax.UV.VOS\ CM\ macro :cal SetSyn("voscm")<CR>
-an 50.140.290 &Syntax.UV.VRML :cal SetSyn("vrml")<CR>
-an 50.140.300 &Syntax.UV.VSE\ JCL :cal SetSyn("vsejcl")<CR>
+an 50.140.160 &Syntax.UV.Upstart :cal SetSyn("upstart")<CR>
+an 50.140.180 &Syntax.UV.Valgrind :cal SetSyn("valgrind")<CR>
+an 50.140.190 &Syntax.UV.Vera :cal SetSyn("vera")<CR>
+an 50.140.200 &Syntax.UV.Verilog-AMS\ HDL :cal SetSyn("verilogams")<CR>
+an 50.140.210 &Syntax.UV.Verilog\ HDL :cal SetSyn("verilog")<CR>
+an 50.140.220 &Syntax.UV.Vgrindefs :cal SetSyn("vgrindefs")<CR>
+an 50.140.230 &Syntax.UV.VHDL :cal SetSyn("vhdl")<CR>
+an 50.140.240 &Syntax.UV.Vim.Vim\ help\ file :cal SetSyn("help")<CR>
+an 50.140.250 &Syntax.UV.Vim.Vim\ script :cal SetSyn("vim")<CR>
+an 50.140.260 &Syntax.UV.Vim.Viminfo\ file :cal SetSyn("viminfo")<CR>
+an 50.140.270 &Syntax.UV.Virata\ config :cal SetSyn("virata")<CR>
+an 50.140.280 &Syntax.UV.Visual\ Basic :cal SetSyn("vb")<CR>
+an 50.140.290 &Syntax.UV.VOS\ CM\ macro :cal SetSyn("voscm")<CR>
+an 50.140.300 &Syntax.UV.VRML :cal SetSyn("vrml")<CR>
+an 50.140.310 &Syntax.UV.VSE\ JCL :cal SetSyn("vsejcl")<CR>
 an 50.150.100 &Syntax.WXYZ.WEB.CWEB :cal SetSyn("cweb")<CR>
 an 50.150.110 &Syntax.WXYZ.WEB.WEB :cal SetSyn("web")<CR>
 an 50.150.120 &Syntax.WXYZ.WEB.WEB\ Changes :cal SetSyn("change")<CR>
@@ -564,6 +596,7 @@ an 50.150.370 &Syntax.WXYZ.Xslt :cal SetSyn("xslt")<CR>
 an 50.150.380 &Syntax.WXYZ.XFree86\ Config :cal SetSyn("xf86conf")<CR>
 an 50.150.400 &Syntax.WXYZ.YAML :cal SetSyn("yaml")<CR>
 an 50.150.410 &Syntax.WXYZ.Yacc :cal SetSyn("yacc")<CR>
+an 50.150.430 &Syntax.WXYZ.Zimbu :cal SetSyn("zimbu")<CR>
 
 " The End Of The Syntax Menu
 
index ad58112..187b1be 100644 (file)
@@ -1,6 +1,6 @@
 " Vim syntax support file
 " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2010 Aug 12
+" Last Change: 2013 Jul 08
 "
 " Additional contributors:
 "
@@ -20,7 +20,7 @@
 " this file uses line continuations
 let s:cpo_sav = &cpo
 let s:ls  = &ls
-set cpo-=C
+set cpo&vim
 
 let s:end=line('$')
 
@@ -33,26 +33,155 @@ endif
 
 let s:settings = tohtml#GetUserSettings()
 
+if !exists('s:FOLDED_ID')
+  let s:FOLDED_ID  = hlID("Folded")     | lockvar s:FOLDED_ID
+  let s:FOLD_C_ID  = hlID("FoldColumn") | lockvar s:FOLD_C_ID
+  let s:LINENR_ID  = hlID('LineNr')     | lockvar s:LINENR_ID
+  let s:DIFF_D_ID  = hlID("DiffDelete") | lockvar s:DIFF_D_ID
+  let s:DIFF_A_ID  = hlID("DiffAdd")    | lockvar s:DIFF_A_ID
+  let s:DIFF_C_ID  = hlID("DiffChange") | lockvar s:DIFF_C_ID
+  let s:DIFF_T_ID  = hlID("DiffText")   | lockvar s:DIFF_T_ID
+  let s:CONCEAL_ID = hlID('Conceal')    | lockvar s:CONCEAL_ID
+endif
+
+" Whitespace
+if s:settings.pre_wrap
+  let s:whitespace = "white-space: pre-wrap; "
+else
+  let s:whitespace = ""
+endif
+
+if !empty(s:settings.prevent_copy)
+  if s:settings.no_invalid
+    " User has decided they don't want invalid markup. Still works in
+    " OpenOffice, and for text editors, but when pasting into Microsoft Word the
+    " input elements get pasted too and they cannot be deleted (at least not
+    " easily).
+    let s:unselInputType = ""
+  else
+    " Prevent from copy-pasting the input elements into Microsoft Word where
+    " they cannot be deleted easily by deliberately inserting invalid markup.
+    let s:unselInputType = " type='invalid_input_type'"
+  endif
+endif
+
 " When not in gui we can only guess the colors.
+" TODO - is this true anymore?
 if has("gui_running")
   let s:whatterm = "gui"
 else
   let s:whatterm = "cterm"
   if &t_Co == 8
-    let s:cterm_color = {0: "#808080", 1: "#ff6060", 2: "#00ff00", 3: "#ffff00", 4: "#8080ff", 5: "#ff40ff", 6: "#00ffff", 7: "#ffffff"}
+    let s:cterm_color = {
+           \   0: "#808080", 1: "#ff6060", 2: "#00ff00", 3: "#ffff00",
+           \   4: "#8080ff", 5: "#ff40ff", 6: "#00ffff", 7: "#ffffff"
+           \ }
   else
-    let s:cterm_color = {0: "#000000", 1: "#c00000", 2: "#008000", 3: "#804000", 4: "#0000c0", 5: "#c000c0", 6: "#008080", 7: "#c0c0c0", 8: "#808080", 9: "#ff6060", 10: "#00ff00", 11: "#ffff00", 12: "#8080ff", 13: "#ff40ff", 14: "#00ffff", 15: "#ffffff"}
+    let s:cterm_color = {
+           \   0: "#000000", 1: "#c00000", 2: "#008000", 3: "#804000", 
+           \   4: "#0000c0", 5: "#c000c0", 6: "#008080", 7: "#c0c0c0", 
+           \   8: "#808080", 9: "#ff6060", 10: "#00ff00", 11: "#ffff00",
+           \   12: "#8080ff", 13: "#ff40ff", 14: "#00ffff", 15: "#ffffff"
+           \ }
 
     " Colors for 88 and 256 come from xterm.
     if &t_Co == 88
-      call extend(s:cterm_color, {16: "#000000", 17: "#00008b", 18: "#0000cd", 19: "#0000ff", 20: "#008b00", 21: "#008b8b", 22: "#008bcd", 23: "#008bff", 24: "#00cd00", 25: "#00cd8b", 26: "#00cdcd", 27: "#00cdff", 28: "#00ff00", 29: "#00ff8b", 30: "#00ffcd", 31: "#00ffff", 32: "#8b0000", 33: "#8b008b", 34: "#8b00cd", 35: "#8b00ff", 36: "#8b8b00", 37: "#8b8b8b", 38: "#8b8bcd", 39: "#8b8bff", 40: "#8bcd00", 41: "#8bcd8b", 42: "#8bcdcd", 43: "#8bcdff", 44: "#8bff00", 45: "#8bff8b", 46: "#8bffcd", 47: "#8bffff", 48: "#cd0000", 49: "#cd008b", 50: "#cd00cd", 51: "#cd00ff", 52: "#cd8b00", 53: "#cd8b8b", 54: "#cd8bcd", 55: "#cd8bff", 56: "#cdcd00", 57: "#cdcd8b", 58: "#cdcdcd", 59: "#cdcdff", 60: "#cdff00", 61: "#cdff8b", 62: "#cdffcd", 63: "#cdffff", 64: "#ff0000"})
-      call extend(s:cterm_color, {65: "#ff008b", 66: "#ff00cd", 67: "#ff00ff", 68: "#ff8b00", 69: "#ff8b8b", 70: "#ff8bcd", 71: "#ff8bff", 72: "#ffcd00", 73: "#ffcd8b", 74: "#ffcdcd", 75: "#ffcdff", 76: "#ffff00", 77: "#ffff8b", 78: "#ffffcd", 79: "#ffffff", 80: "#2e2e2e", 81: "#5c5c5c", 82: "#737373", 83: "#8b8b8b", 84: "#a2a2a2", 85: "#b9b9b9", 86: "#d0d0d0", 87: "#e7e7e7"})
+      call extend(s:cterm_color, {
+           \   16: "#000000", 17: "#00008b", 18: "#0000cd", 19: "#0000ff",
+           \   20: "#008b00", 21: "#008b8b", 22: "#008bcd", 23: "#008bff",
+           \   24: "#00cd00", 25: "#00cd8b", 26: "#00cdcd", 27: "#00cdff",
+           \   28: "#00ff00", 29: "#00ff8b", 30: "#00ffcd", 31: "#00ffff",
+           \   32: "#8b0000", 33: "#8b008b", 34: "#8b00cd", 35: "#8b00ff",
+           \   36: "#8b8b00", 37: "#8b8b8b", 38: "#8b8bcd", 39: "#8b8bff",
+           \   40: "#8bcd00", 41: "#8bcd8b", 42: "#8bcdcd", 43: "#8bcdff",
+           \   44: "#8bff00", 45: "#8bff8b", 46: "#8bffcd", 47: "#8bffff",
+           \   48: "#cd0000", 49: "#cd008b", 50: "#cd00cd", 51: "#cd00ff",
+           \   52: "#cd8b00", 53: "#cd8b8b", 54: "#cd8bcd", 55: "#cd8bff",
+           \   56: "#cdcd00", 57: "#cdcd8b", 58: "#cdcdcd", 59: "#cdcdff",
+           \   60: "#cdff00", 61: "#cdff8b", 62: "#cdffcd", 63: "#cdffff",
+           \   64: "#ff0000"
+           \ })
+      call extend(s:cterm_color, {
+           \   65: "#ff008b", 66: "#ff00cd", 67: "#ff00ff", 68: "#ff8b00",
+           \   69: "#ff8b8b", 70: "#ff8bcd", 71: "#ff8bff", 72: "#ffcd00",
+           \   73: "#ffcd8b", 74: "#ffcdcd", 75: "#ffcdff", 76: "#ffff00",
+           \   77: "#ffff8b", 78: "#ffffcd", 79: "#ffffff", 80: "#2e2e2e",
+           \   81: "#5c5c5c", 82: "#737373", 83: "#8b8b8b", 84: "#a2a2a2",
+           \   85: "#b9b9b9", 86: "#d0d0d0", 87: "#e7e7e7"
+           \ })
     elseif &t_Co == 256
-      call extend(s:cterm_color, {16: "#000000", 17: "#00005f", 18: "#000087", 19: "#0000af", 20: "#0000d7", 21: "#0000ff", 22: "#005f00", 23: "#005f5f", 24: "#005f87", 25: "#005faf", 26: "#005fd7", 27: "#005fff", 28: "#008700", 29: "#00875f", 30: "#008787", 31: "#0087af", 32: "#0087d7", 33: "#0087ff", 34: "#00af00", 35: "#00af5f", 36: "#00af87", 37: "#00afaf", 38: "#00afd7", 39: "#00afff", 40: "#00d700", 41: "#00d75f", 42: "#00d787", 43: "#00d7af", 44: "#00d7d7", 45: "#00d7ff", 46: "#00ff00", 47: "#00ff5f", 48: "#00ff87", 49: "#00ffaf", 50: "#00ffd7", 51: "#00ffff", 52: "#5f0000", 53: "#5f005f", 54: "#5f0087", 55: "#5f00af", 56: "#5f00d7", 57: "#5f00ff", 58: "#5f5f00", 59: "#5f5f5f", 60: "#5f5f87", 61: "#5f5faf", 62: "#5f5fd7", 63: "#5f5fff", 64: "#5f8700"})
-      call extend(s:cterm_color, {65: "#5f875f", 66: "#5f8787", 67: "#5f87af", 68: "#5f87d7", 69: "#5f87ff", 70: "#5faf00", 71: "#5faf5f", 72: "#5faf87", 73: "#5fafaf", 74: "#5fafd7", 75: "#5fafff", 76: "#5fd700", 77: "#5fd75f", 78: "#5fd787", 79: "#5fd7af", 80: "#5fd7d7", 81: "#5fd7ff", 82: "#5fff00", 83: "#5fff5f", 84: "#5fff87", 85: "#5fffaf", 86: "#5fffd7", 87: "#5fffff", 88: "#870000", 89: "#87005f", 90: "#870087", 91: "#8700af", 92: "#8700d7", 93: "#8700ff", 94: "#875f00", 95: "#875f5f", 96: "#875f87", 97: "#875faf", 98: "#875fd7", 99: "#875fff", 100: "#878700", 101: "#87875f", 102: "#878787", 103: "#8787af", 104: "#8787d7", 105: "#8787ff", 106: "#87af00", 107: "#87af5f", 108: "#87af87", 109: "#87afaf", 110: "#87afd7", 111: "#87afff", 112: "#87d700"})
-      call extend(s:cterm_color, {113: "#87d75f", 114: "#87d787", 115: "#87d7af", 116: "#87d7d7", 117: "#87d7ff", 118: "#87ff00", 119: "#87ff5f", 120: "#87ff87", 121: "#87ffaf", 122: "#87ffd7", 123: "#87ffff", 124: "#af0000", 125: "#af005f", 126: "#af0087", 127: "#af00af", 128: "#af00d7", 129: "#af00ff", 130: "#af5f00", 131: "#af5f5f", 132: "#af5f87", 133: "#af5faf", 134: "#af5fd7", 135: "#af5fff", 136: "#af8700", 137: "#af875f", 138: "#af8787", 139: "#af87af", 140: "#af87d7", 141: "#af87ff", 142: "#afaf00", 143: "#afaf5f", 144: "#afaf87", 145: "#afafaf", 146: "#afafd7", 147: "#afafff", 148: "#afd700", 149: "#afd75f", 150: "#afd787", 151: "#afd7af", 152: "#afd7d7", 153: "#afd7ff", 154: "#afff00", 155: "#afff5f", 156: "#afff87", 157: "#afffaf", 158: "#afffd7"})
-      call extend(s:cterm_color, {159: "#afffff", 160: "#d70000", 161: "#d7005f", 162: "#d70087", 163: "#d700af", 164: "#d700d7", 165: "#d700ff", 166: "#d75f00", 167: "#d75f5f", 168: "#d75f87", 169: "#d75faf", 170: "#d75fd7", 171: "#d75fff", 172: "#d78700", 173: "#d7875f", 174: "#d78787", 175: "#d787af", 176: "#d787d7", 177: "#d787ff", 178: "#d7af00", 179: "#d7af5f", 180: "#d7af87", 181: "#d7afaf", 182: "#d7afd7", 183: "#d7afff", 184: "#d7d700", 185: "#d7d75f", 186: "#d7d787", 187: "#d7d7af", 188: "#d7d7d7", 189: "#d7d7ff", 190: "#d7ff00", 191: "#d7ff5f", 192: "#d7ff87", 193: "#d7ffaf", 194: "#d7ffd7", 195: "#d7ffff", 196: "#ff0000", 197: "#ff005f", 198: "#ff0087", 199: "#ff00af", 200: "#ff00d7", 201: "#ff00ff", 202: "#ff5f00", 203: "#ff5f5f", 204: "#ff5f87"})
-      call extend(s:cterm_color, {205: "#ff5faf", 206: "#ff5fd7", 207: "#ff5fff", 208: "#ff8700", 209: "#ff875f", 210: "#ff8787", 211: "#ff87af", 212: "#ff87d7", 213: "#ff87ff", 214: "#ffaf00", 215: "#ffaf5f", 216: "#ffaf87", 217: "#ffafaf", 218: "#ffafd7", 219: "#ffafff", 220: "#ffd700", 221: "#ffd75f", 222: "#ffd787", 223: "#ffd7af", 224: "#ffd7d7", 225: "#ffd7ff", 226: "#ffff00", 227: "#ffff5f", 228: "#ffff87", 229: "#ffffaf", 230: "#ffffd7", 231: "#ffffff", 232: "#080808", 233: "#121212", 234: "#1c1c1c", 235: "#262626", 236: "#303030", 237: "#3a3a3a", 238: "#444444", 239: "#4e4e4e", 240: "#585858", 241: "#626262", 242: "#6c6c6c", 243: "#767676", 244: "#808080", 245: "#8a8a8a", 246: "#949494", 247: "#9e9e9e", 248: "#a8a8a8", 249: "#b2b2b2", 250: "#bcbcbc", 251: "#c6c6c6", 252: "#d0d0d0", 253: "#dadada", 254: "#e4e4e4", 255: "#eeeeee"})
+      call extend(s:cterm_color, {
+           \   16: "#000000", 17: "#00005f", 18: "#000087", 19: "#0000af",
+           \   20: "#0000d7", 21: "#0000ff", 22: "#005f00", 23: "#005f5f",
+           \   24: "#005f87", 25: "#005faf", 26: "#005fd7", 27: "#005fff",
+           \   28: "#008700", 29: "#00875f", 30: "#008787", 31: "#0087af",
+           \   32: "#0087d7", 33: "#0087ff", 34: "#00af00", 35: "#00af5f",
+           \   36: "#00af87", 37: "#00afaf", 38: "#00afd7", 39: "#00afff",
+           \   40: "#00d700", 41: "#00d75f", 42: "#00d787", 43: "#00d7af",
+           \   44: "#00d7d7", 45: "#00d7ff", 46: "#00ff00", 47: "#00ff5f",
+           \   48: "#00ff87", 49: "#00ffaf", 50: "#00ffd7", 51: "#00ffff",
+           \   52: "#5f0000", 53: "#5f005f", 54: "#5f0087", 55: "#5f00af",
+           \   56: "#5f00d7", 57: "#5f00ff", 58: "#5f5f00", 59: "#5f5f5f",
+           \   60: "#5f5f87", 61: "#5f5faf", 62: "#5f5fd7", 63: "#5f5fff",
+           \   64: "#5f8700"
+           \ })
+      call extend(s:cterm_color, {
+           \   65: "#5f875f", 66: "#5f8787", 67: "#5f87af", 68: "#5f87d7",
+           \   69: "#5f87ff", 70: "#5faf00", 71: "#5faf5f", 72: "#5faf87",
+           \   73: "#5fafaf", 74: "#5fafd7", 75: "#5fafff", 76: "#5fd700",
+           \   77: "#5fd75f", 78: "#5fd787", 79: "#5fd7af", 80: "#5fd7d7",
+           \   81: "#5fd7ff", 82: "#5fff00", 83: "#5fff5f", 84: "#5fff87",
+           \   85: "#5fffaf", 86: "#5fffd7", 87: "#5fffff", 88: "#870000",
+           \   89: "#87005f", 90: "#870087", 91: "#8700af", 92: "#8700d7",
+           \   93: "#8700ff", 94: "#875f00", 95: "#875f5f", 96: "#875f87",
+           \   97: "#875faf", 98: "#875fd7", 99: "#875fff", 100: "#878700",
+           \   101: "#87875f", 102: "#878787", 103: "#8787af", 104: "#8787d7",
+           \   105: "#8787ff", 106: "#87af00", 107: "#87af5f", 108: "#87af87",
+           \   109: "#87afaf", 110: "#87afd7", 111: "#87afff", 112: "#87d700"
+           \ })
+      call extend(s:cterm_color, {
+           \   113: "#87d75f", 114: "#87d787", 115: "#87d7af", 116: "#87d7d7",
+           \   117: "#87d7ff", 118: "#87ff00", 119: "#87ff5f", 120: "#87ff87",
+           \   121: "#87ffaf", 122: "#87ffd7", 123: "#87ffff", 124: "#af0000",
+           \   125: "#af005f", 126: "#af0087", 127: "#af00af", 128: "#af00d7",
+           \   129: "#af00ff", 130: "#af5f00", 131: "#af5f5f", 132: "#af5f87",
+           \   133: "#af5faf", 134: "#af5fd7", 135: "#af5fff", 136: "#af8700",
+           \   137: "#af875f", 138: "#af8787", 139: "#af87af", 140: "#af87d7",
+           \   141: "#af87ff", 142: "#afaf00", 143: "#afaf5f", 144: "#afaf87",
+           \   145: "#afafaf", 146: "#afafd7", 147: "#afafff", 148: "#afd700",
+           \   149: "#afd75f", 150: "#afd787", 151: "#afd7af", 152: "#afd7d7",
+           \   153: "#afd7ff", 154: "#afff00", 155: "#afff5f", 156: "#afff87",
+           \   157: "#afffaf", 158: "#afffd7"
+           \ })
+      call extend(s:cterm_color, {
+           \   159: "#afffff", 160: "#d70000", 161: "#d7005f", 162: "#d70087",
+           \   163: "#d700af", 164: "#d700d7", 165: "#d700ff", 166: "#d75f00",
+           \   167: "#d75f5f", 168: "#d75f87", 169: "#d75faf", 170: "#d75fd7",
+           \   171: "#d75fff", 172: "#d78700", 173: "#d7875f", 174: "#d78787",
+           \   175: "#d787af", 176: "#d787d7", 177: "#d787ff", 178: "#d7af00",
+           \   179: "#d7af5f", 180: "#d7af87", 181: "#d7afaf", 182: "#d7afd7",
+           \   183: "#d7afff", 184: "#d7d700", 185: "#d7d75f", 186: "#d7d787",
+           \   187: "#d7d7af", 188: "#d7d7d7", 189: "#d7d7ff", 190: "#d7ff00",
+           \   191: "#d7ff5f", 192: "#d7ff87", 193: "#d7ffaf", 194: "#d7ffd7",
+           \   195: "#d7ffff", 196: "#ff0000", 197: "#ff005f", 198: "#ff0087",
+           \   199: "#ff00af", 200: "#ff00d7", 201: "#ff00ff", 202: "#ff5f00",
+           \   203: "#ff5f5f", 204: "#ff5f87"
+           \ })
+      call extend(s:cterm_color, {
+           \   205: "#ff5faf", 206: "#ff5fd7", 207: "#ff5fff", 208: "#ff8700",
+           \   209: "#ff875f", 210: "#ff8787", 211: "#ff87af", 212: "#ff87d7",
+           \   213: "#ff87ff", 214: "#ffaf00", 215: "#ffaf5f", 216: "#ffaf87",
+           \   217: "#ffafaf", 218: "#ffafd7", 219: "#ffafff", 220: "#ffd700",
+           \   221: "#ffd75f", 222: "#ffd787", 223: "#ffd7af", 224: "#ffd7d7",
+           \   225: "#ffd7ff", 226: "#ffff00", 227: "#ffff5f", 228: "#ffff87",
+           \   229: "#ffffaf", 230: "#ffffd7", 231: "#ffffff", 232: "#080808",
+           \   233: "#121212", 234: "#1c1c1c", 235: "#262626", 236: "#303030",
+           \   237: "#3a3a3a", 238: "#444444", 239: "#4e4e4e", 240: "#585858",
+           \   241: "#626262", 242: "#6c6c6c", 243: "#767676", 244: "#808080",
+           \   245: "#8a8a8a", 246: "#949494", 247: "#9e9e9e", 248: "#a8a8a8",
+           \   249: "#b2b2b2", 250: "#bcbcbc", 251: "#c6c6c6", 252: "#d0d0d0",
+           \   253: "#dadada", 254: "#e4e4e4", 255: "#eeeeee"
+           \ })
     endif
   endif
 endif
@@ -73,19 +202,33 @@ else
   endfun
 endif
 
+" Find out the background and foreground color for use later
+let s:fgc = s:HtmlColor(synIDattr(hlID("Normal"), "fg#", s:whatterm))
+let s:bgc = s:HtmlColor(synIDattr(hlID("Normal"), "bg#", s:whatterm))
+if s:fgc == ""
+  let s:fgc = ( &background == "dark" ? "#ffffff" : "#000000" )
+endif
+if s:bgc == ""
+  let s:bgc = ( &background == "dark" ? "#000000" : "#ffffff" )
+endif
+
 if !s:settings.use_css
   " Return opening HTML tag for given highlight id
-  function! s:HtmlOpening(id)
+  function! s:HtmlOpening(id, extra_attrs)
     let a = ""
     if synIDattr(a:id, "inverse")
       " For inverse, we always must set both colors (and exchange them)
       let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
-      let a = a . '<span style="background-color: ' . ( x != "" ? x : s:fgc ) . '">'
+      let a = a . '<span '.a:extra_attrs.'style="background-color: ' . ( x != "" ? x : s:fgc ) . '">'
       let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
       let a = a . '<font color="' . ( x != "" ? x : s:bgc ) . '">'
     else
       let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
-      if x != "" | let a = a . '<span style="background-color: ' . x . '">' | endif
+      if x != ""
+       let a = a . '<span '.a:extra_attrs.'style="background-color: ' . x . '">'
+      elseif !empty(a:extra_attrs)
+       let a = a . '<span '.a:extra_attrs.'>'
+      endif
       let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
       if x != "" | let a = a . '<font color="' . x . '">' | endif
     endif
@@ -96,7 +239,7 @@ if !s:settings.use_css
   endfun
 
   " Return closing HTML tag for given highlight id
-  function! s:HtmlClosing(id)
+  function! s:HtmlClosing(id, has_extra_attrs)
     let a = ""
     if synIDattr(a:id, "underline") | let a = a . "</u>" | endif
     if synIDattr(a:id, "italic") | let a = a . "</i>" | endif
@@ -107,24 +250,190 @@ if !s:settings.use_css
       let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
       if x != "" | let a = a . '</font>' | endif
       let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
-      if x != "" | let a = a . '</span>' | endif
+      if x != "" || a:has_extra_attrs | let a = a . '</span>' | endif
     endif
     return a
   endfun
 endif
 
+" Use a different function for formatting based on user options. This way we
+" can avoid a lot of logic during the actual execution.
+"
+" Build the function line by line containing only what is needed for the options
+" in use for maximum code sharing with minimal branch logic for greater speed.
+"
+" Note, 'exec' commands do not recognize line continuations, so must concatenate
+" lines rather than continue them.
+if s:settings.use_css
+  " save CSS to a list of rules to add to the output at the end of processing
+
+  " first, get the style names we need
+  let wrapperfunc_lines = [
+       \ 'function! s:BuildStyleWrapper(style_id, diff_style_id, extra_attrs, text, make_unselectable, unformatted)',
+       \ '',
+       \ '  let l:style_name = synIDattr(a:style_id, "name", s:whatterm)'
+       \ ]
+  if &diff
+    let wrapperfunc_lines += [
+       \ '  let l:diff_style_name = synIDattr(a:diff_style_id, "name", s:whatterm)']
+
+  " Add normal groups and diff groups to separate lists so we can order them to
+  " allow diff highlight to override normal highlight
+
+  " if primary style IS a diff style, grab it from the diff cache instead
+  " (always succeeds because we pre-populate it)
+  let wrapperfunc_lines += [
+       \ '',
+       \ '  if a:style_id == s:DIFF_D_ID || a:style_id == s:DIFF_A_ID ||'.
+       \ '          a:style_id == s:DIFF_C_ID || a:style_id == s:DIFF_T_ID',
+       \ '    let l:saved_style = get(s:diffstylelist,a:style_id)',
+       \ '  else'
+       \ ]
+  endif
+
+  " get primary style info from cache or build it on the fly if not found
+  let wrapperfunc_lines += [
+       \ '    let l:saved_style = get(s:stylelist,a:style_id)',
+       \ '    if type(l:saved_style) == type(0)',
+       \ '      unlet l:saved_style',
+       \ '      let l:saved_style = s:CSS1(a:style_id)',
+       \ '      if l:saved_style != ""',
+       \ '        let l:saved_style = "." . l:style_name . " { " . l:saved_style . "}"',
+       \ '      endif',
+       \ '      let s:stylelist[a:style_id]= l:saved_style',
+       \ '    endif'
+       \ ]
+  if &diff
+    let wrapperfunc_lines += [ '  endif' ]
+  endif
+
+  " Build the wrapper tags around the text. It turns out that caching these
+  " gives pretty much zero performance gain and adds a lot of logic.
+
+  let wrapperfunc_lines += [
+       \ '',
+       \ '  if l:saved_style == "" && empty(a:extra_attrs)'
+       \ ]
+  if &diff
+    let wrapperfunc_lines += [
+       \ '    if a:diff_style_id <= 0'
+       \ ]
+  endif
+  " no surroundings if neither primary nor diff style has any info
+  let wrapperfunc_lines += [
+       \ '       return a:text'
+       \ ]
+  if &diff
+    " no primary style, but diff style
+    let wrapperfunc_lines += [
+       \ '     else',
+       \ '       return "<span class=\"" .l:diff_style_name . "\">".a:text."</span>"',
+       \ '     endif'
+       \ ]
+  endif
+  " open tag for non-empty primary style
+  let wrapperfunc_lines += [
+       \ '  else']
+  " non-empty primary style. handle either empty or non-empty diff style.
+  "
+  " separate the two classes by a space to apply them both if there is a diff
+  " style name, unless the primary style is empty, then just use the diff style
+  " name
+  let diffstyle =
+         \ (&diff ? '(a:diff_style_id <= 0 ? "" : " ". l:diff_style_name) .'
+         \        : "")
+  if s:settings.prevent_copy == ""
+    let wrapperfunc_lines += [
+         \ '    return "<span ".a:extra_attrs."class=\"" . l:style_name .'.diffstyle.'"\">".a:text."</span>"'
+         \ ]
+  else
+
+    "
+    " Wrap the <input> in a <span> to allow fixing the stupid bug in some fonts
+    " which cause browsers to display a 1px gap between lines when these
+    " <input>s have a background color (maybe not really a bug, this isn't
+    " well-defined)
+    "
+    " use strwidth, because we care only about how many character boxes are
+    " needed to size the input, we don't care how many characters (including
+    " separately counted composing chars, from strchars()) or bytes (from
+    " len())the string contains. strdisplaywidth() is not needed because none of
+    " the unselectable groups can contain tab characters (fold column, fold
+    " text, line number).
+    "
+    " Note, if maxlength property needs to be added in the future, it will need
+    " to use strchars(), because HTML specifies that the maxlength parameter
+    " uses the number of unique codepoints for its limit.
+    let wrapperfunc_lines += [
+         \ '    if a:make_unselectable',
+         \ '      return "<span ".a:extra_attrs."class=\"" . l:style_name .'.diffstyle.'"\">'.
+         \                '<input'.s:unselInputType.' class=\"" . l:style_name .'.diffstyle.'"\"'.
+         \                 ' value=\"".substitute(a:unformatted,''\s\+$'',"","")."\"'.
+         \                 ' onselect=''this.blur(); return false;'''.
+         \                 ' onmousedown=''this.blur(); return false;'''.
+         \                 ' onclick=''this.blur(); return false;'''.
+         \                 ' readonly=''readonly'''.
+         \                 ' size=\"".strwidth(a:unformatted)."\"'.
+         \                 (s:settings.use_xhtml ? '/' : '').'></span>"',
+         \ '    else',
+         \ '      return "<span ".a:extra_attrs."class=\"" . l:style_name .'. diffstyle .'"\">".a:text."</span>"'
+         \ ]
+  endif
+  let wrapperfunc_lines += [
+       \ '  endif',
+       \ 'endfun'
+       \ ]
+else
+  " Non-CSS method just needs the wrapper.
+  "
+  " Functions used to get opening/closing automatically return null strings if
+  " no styles exist.
+  if &diff
+    let wrapperfunc_lines = [
+         \ 'function! s:BuildStyleWrapper(style_id, diff_style_id, extra_attrs, text, unusedarg, unusedarg2)',
+         \ '  return s:HtmlOpening(a:style_id, a:extra_attrs).(a:diff_style_id <= 0 ? "" :'.
+         \                                     's:HtmlOpening(a:diff_style_id, "")).a:text.'.
+         \   '(a:diff_style_id <= 0 ? "" : s:HtmlClosing(a:diff_style_id, 0)).s:HtmlClosing(a:style_id, !empty(a:extra_attrs))',
+         \ 'endfun'
+         \ ]
+  else
+    let wrapperfunc_lines = [
+         \ 'function! s:BuildStyleWrapper(style_id, diff_style_id, extra_attrs, text, unusedarg, unusedarg2)',
+         \ '  return s:HtmlOpening(a:style_id, a:extra_attrs).a:text.s:HtmlClosing(a:style_id, !empty(a:extra_attrs))',
+         \ 'endfun'
+         \ ]
+  endif
+endif
+
+" create the function we built line by line above
+exec join(wrapperfunc_lines, "\n")
+
+let s:diff_mode = &diff
+
 " Return HTML valid characters enclosed in a span of class style_name with
 " unprintable characters expanded and double spaces replaced as necessary.
-function! s:HtmlFormat(text, style_name, diff_style_name)
+"
+" TODO: eliminate unneeded logic like done for BuildStyleWrapper
+function! s:HtmlFormat(text, style_id, diff_style_id, extra_attrs, make_unselectable)
   " Replace unprintable characters
-  let formatted = strtrans(a:text)
+  let unformatted = strtrans(a:text)
 
-  " separate the two classes by a space to apply them both if there is a diff
-  " style name
-  let l:style_name = a:style_name . (a:diff_style_name == '' ? '' : ' ') . a:diff_style_name
+  let formatted = unformatted
 
   " Replace the reserved html characters
-  let formatted = substitute(substitute(substitute(substitute(substitute(formatted, '&', '\&amp;', 'g'), '<', '\&lt;', 'g'), '>', '\&gt;', 'g'), '"', '\&quot;', 'g'), "\x0c", '<hr class="PAGE-BREAK">', 'g')
+  let formatted = substitute(formatted, '&', '\&amp;',  'g')
+  let formatted = substitute(formatted, '<', '\&lt;',   'g')
+  let formatted = substitute(formatted, '>', '\&gt;',   'g')
+  let formatted = substitute(formatted, '"', '\&quot;', 'g')
+  " &apos; is not valid in HTML but it is in XHTML, so just use the numeric
+  " reference for it instead. Needed because it could appear in quotes
+  " especially if unselectable regions is turned on.
+  let formatted = substitute(formatted, '"', '\&#0039;', 'g')
+
+  " Replace a "form feed" character with HTML to do a page break
+  " TODO: need to prevent this in unselectable areas? Probably it should never
+  " BE in an unselectable area...
+  let formatted = substitute(formatted, "\x0c", '<hr class="PAGE-BREAK">', 'g')
 
   " Replace double spaces, leading spaces, and trailing spaces if needed
   if ' ' != s:HtmlSpace
@@ -133,31 +442,115 @@ function! s:HtmlFormat(text, style_name, diff_style_name)
     let formatted = substitute(formatted, ' \+$', s:HtmlSpace, 'g')
   endif
 
-  " Enclose in a span of class style_name
-  let formatted = '<span class="' . l:style_name . '">' . formatted . '</span>'
+  " Enclose in the correct format
+  return s:BuildStyleWrapper(a:style_id, a:diff_style_id, a:extra_attrs, formatted, a:make_unselectable, unformatted)
+endfun
 
-  " Add the class to class list if it's not there yet.
-  " Add normal groups to the beginning so diff groups can override them.
-  let s:id = hlID(a:style_name)
-  if index(s:idlist, s:id ) == -1
-    if a:style_name =~ 'Diff\%(Add\|Change\|Delete\|Text\)'
-      call add(s:idlist, s:id)
+" set up functions to call HtmlFormat in certain ways based on whether the
+" element is supposed to be unselectable or not
+if s:settings.prevent_copy =~# 'n'
+  if s:settings.number_lines
+    if s:settings.line_ids
+      function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
+       if a:lnr > 0
+         return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 'id="'.(exists('g:html_diff_win_num') ? 'W'.g:html_diff_win_num : "").'L'.a:lnr.s:settings.id_suffix.'" ', 1)
+       else
+         return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
+       endif
+      endfun
     else
-      call insert(s:idlist, s:id)
+      function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
+       return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
+      endfun
     endif
+  elseif s:settings.line_ids
+    " if lines are not being numbered the only reason this function gets called
+    " is to put the line IDs on each line; "text" will be emtpy but lnr will
+    " always be non-zero, however we don't want to use the <input> because that
+    " won't work as nice for empty text
+    function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
+      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 'id="'.(exists('g:html_diff_win_num') ? 'W'.g:html_diff_win_num : "").'L'.a:lnr.s:settings.id_suffix.'" ', 0)
+    endfun
   endif
-  
-  " Add the diff highlight class to class list if used and it's not there yet.
-  " Add diff groups to the end so they override the other highlighting.
-  if a:diff_style_name != ""
-    let s:diff_id = hlID(a:diff_style_name)
-    if index(s:idlist, s:diff_id) == -1
-      call add(s:idlist, s:diff_id)
-    endif
+else
+  if s:settings.line_ids
+    function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
+      if a:lnr > 0
+       return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 'id="'.(exists('g:html_diff_win_num') ? 'W'.g:html_diff_win_num : "").'L'.a:lnr.s:settings.id_suffix.'" ', 0)
+      else
+       return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
+      endif
+    endfun
+  else
+    function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
+      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
+    endfun
   endif
-
-  return formatted
-endfun
+endif
+if s:settings.prevent_copy =~# 'd'
+  function! s:HtmlFormat_d(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
+  endfun
+else
+  function! s:HtmlFormat_d(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
+  endfun
+endif
+if s:settings.prevent_copy =~# 'f'
+  " Note the <input> elements for fill spaces will have a single space for
+  " content, to allow active cursor CSS selection to work.
+  "
+  " Wrap the whole thing in a span for the 1px padding workaround for gaps.
+  function! s:FoldColumn_build(char, len, numfill, char2, class, click)
+    let l:input_open = "<input readonly='readonly'".s:unselInputType.
+         \ " onselect='this.blur(); return false;'".
+         \ " onmousedown='this.blur(); ".a:click." return false;'".
+         \ " onclick='return false;' size='".
+         \ string(a:len + (empty(a:char2) ? 0 : 1) + a:numfill) .
+         \ "' "
+    let l:common_attrs = "class='FoldColumn' value='"
+    let l:input_close = (s:settings.use_xhtml ? "' />" : "'>")
+    return "<span class='".a:class."'>".
+         \ l:input_open.l:common_attrs.repeat(a:char, a:len).
+         \ (!empty(a:char2) ? a:char2 : "").
+         \ l:input_close . "</span>"
+  endfun
+  function! s:FoldColumn_fill()
+    return s:FoldColumn_build('', s:foldcolumn, 0, '', 'FoldColumn', '')
+  endfun
+else
+  " For normal fold columns, simply space-pad to the desired width (note that
+  " the FoldColumn definition includes a whitespace:pre rule)
+  function! s:FoldColumn_build(char, len, numfill, char2, class, click)
+    return "<a href='#' class='".a:class."' onclick='".a:click."'>".
+         \ repeat(a:char, a:len).a:char2.repeat(' ', a:numfill).
+         \ "</a>"
+  endfun
+  function! s:FoldColumn_fill()
+    return s:HtmlFormat(repeat(' ', s:foldcolumn), s:FOLD_C_ID, 0, "", 0)
+  endfun
+endif
+if s:settings.prevent_copy =~# 't'
+  " put an extra empty span at the end for dynamic folds, so the linebreak can
+  " be surrounded. Otherwise do it as normal.
+  "
+  " TODO: isn't there a better way to do this, than placing it here and using a
+  " substitute later?
+  if s:settings.dynamic_folds
+    function! s:HtmlFormat_t(text, style_id, diff_style_id)
+      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1) .
+           \ s:HtmlFormat("", a:style_id, 0, "", 0)
+    endfun
+  else
+    function! s:HtmlFormat_t(text, style_id, diff_style_id)
+      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
+    endfun
+  endif
+else
+  function! s:HtmlFormat_t(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
+  endfun
+endif
 
 " Return CSS style describing given highlight id (can be empty)
 function! s:CSS1(id)
@@ -172,7 +565,15 @@ function! s:CSS1(id)
     let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
     if x != "" | let a = a . "color: " . x . "; " | endif
     let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
-    if x != "" | let a = a . "background-color: " . x . "; " | endif
+    if x != ""
+      let a = a . "background-color: " . x . "; "
+      " stupid hack because almost every browser seems to have at least one font
+      " which shows 1px gaps between lines which have background
+      let a = a . "padding-bottom: 1px; "
+    elseif (a:id == s:FOLDED_ID || a:id == s:LINENR_ID || a:id == s:FOLD_C_ID) && !empty(s:settings.prevent_copy)
+      " input elements default to a different color than the rest of the page
+      let a = a . "background-color: " . s:bgc . "; "
+    endif
   endif
   if synIDattr(a:id, "bold") | let a = a . "font-weight: bold; " | endif
   if synIDattr(a:id, "italic") | let a = a . "font-style: italic; " | endif
@@ -232,7 +633,11 @@ endif
 let s:orgbufnr = winbufnr(0)
 let s:origwin_stl = &l:stl
 if expand("%") == ""
-  exec 'new Untitled.'.(s:settings.use_xhtml ? 'x' : '').'html'
+  if exists('g:html_diff_win_num')
+    exec 'new Untitled_win'.g:html_diff_win_num.'.'.(s:settings.use_xhtml ? 'x' : '').'html'
+  else
+    exec 'new Untitled.'.(s:settings.use_xhtml ? 'x' : '').'html'
+  endif
 else
   exec 'new %.'.(s:settings.use_xhtml ? 'x' : '').'html'
 endif
@@ -250,7 +655,6 @@ setlocal winfixheight
 let s:newwin_stl = &l:stl
 
 " on the new window, set the least time-consuming fold method
-let s:old_fdm = &foldmethod
 let s:old_fen = &foldenable
 setlocal foldmethod=manual
 setlocal nofoldenable
@@ -265,6 +669,19 @@ set paste
 let s:old_magic = &magic
 set magic
 
+" set the fileencoding to match the charset we'll be using
+let &l:fileencoding=s:settings.vim_encoding
+
+" According to http://www.w3.org/TR/html4/charset.html#doc-char-set, the byte
+" order mark is highly recommend on the web when using multibyte encodings. But,
+" it is not a good idea to include it on UTF-8 files. Otherwise, let Vim
+" determine when it is actually inserted.
+if s:settings.vim_encoding == 'utf-8'
+  setlocal nobomb
+else
+  setlocal bomb
+endif
+
 let s:lines = []
 
 if s:settings.use_xhtml
@@ -283,7 +700,7 @@ let s:LeadingSpace = ' '
 let s:HtmlEndline = ''
 if s:settings.no_pre
   let s:HtmlEndline = '<br' . s:tag_close
-  let s:LeadingSpace = '&nbsp;'
+  let s:LeadingSpace = s:settings.use_xhtml ? '&#160;' : '&nbsp;'
   let s:HtmlSpace = '\' . s:LeadingSpace
 endif
 
@@ -305,7 +722,12 @@ call extend(s:lines, [
 call add(s:lines, '<meta name="syntax" content="'.s:current_syntax.'"'.s:tag_close)
 call add(s:lines, '<meta name="settings" content="'.
       \ join(filter(keys(s:settings),'s:settings[v:val]'),',').
+      \ ',prevent_copy='.s:settings.prevent_copy.
       \ '"'.s:tag_close)
+call add(s:lines, '<meta name="colorscheme" content="'.
+      \ (exists('g:colors_name')
+      \ ? g:colors_name
+      \ : 'none'). '"'.s:tag_close)
 
 if s:settings.use_css
   if s:settings.dynamic_folds
@@ -381,12 +803,17 @@ if s:settings.use_css
   endif
 endif
 
+" insert script tag; javascript is always needed for the line number
+" normalization for URL hashes
+call extend(s:lines, [
+      \ "",
+      \ "<script type='text/javascript'>",
+      \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
+
 " insert javascript to toggle folds open and closed
 if s:settings.dynamic_folds
   call extend(s:lines, [
        \ "",
-       \ "<script type='text/javascript'>",
-       \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--",
        \ "function toggleFold(objID)",
        \ "{",
        \ "  var fold;",
@@ -399,22 +826,159 @@ if s:settings.dynamic_folds
        \ "  {",
        \ "    fold.className = 'closed-fold';",
        \ "  }",
+       \ "}"
+       \ ])
+endif
+
+if s:settings.line_ids
+  " insert javascript to get IDs from line numbers, and to open a fold before
+  " jumping to any lines contained therein
+  call extend(s:lines, [
+       \ "",
+       \ "/* function to open any folds containing a jumped-to line before jumping to it */",
+       \ "function JumpToLine()",
+       \ "{",
+       \ "  var lineNum;",
+       \ "  lineNum = window.location.hash;",
+       \ "  lineNum = lineNum.substr(1); /* strip off '#' */",
+       \ "",
+       \ "  if (lineNum.indexOf('L') == -1) {",
+       \ "    lineNum = 'L'+lineNum;",
+       \ "  }",
+       \ "  lineElem = document.getElementById(lineNum);"
+       \ ])
+  if s:settings.dynamic_folds
+    call extend(s:lines, [
+         \ "",
+         \ "  /* navigate upwards in the DOM tree to open all folds containing the line */",
+         \ "  var node = lineElem;",
+         \ "  while (node && node.id != 'vimCodeElement".s:settings.id_suffix."')",
+         \ "  {",
+         \ "    if (node.className == 'closed-fold')",
+         \ "    {",
+         \ "      node.className = 'open-fold';",
+         \ "    }",
+         \ "    node = node.parentNode;",
+         \ "  }",
+         \ ])
+  endif
+  call extend(s:lines, [
+       \ "  /* Always jump to new location even if the line was hidden inside a fold, or",
+       \ "   * we corrected the raw number to a line ID.",
+       \ "   */",
+       \ "  if (lineElem) {",
+       \ "    lineElem.scrollIntoView(true);",
+       \ "  }",
+       \ "  return true;",
        \ "}",
-       \ s:settings.use_xhtml ? '//]]>' : '-->',
-       \ "</script>"
-       \])
+       \ "if ('onhashchange' in window) {",
+       \ "  window.onhashchange = JumpToLine;",
+       \ "}"
+       \ ])
+endif
+
+" Small text columns like the foldcolumn and line number column need a weird
+" hack to work around Webkit's and (in versions prior to 9) IE's lack of support
+" for the 'ch' unit without messing up Opera, which also doesn't support it but
+" works anyway.
+"
+" The problem is that without the 'ch' unit, it is not possible to specify a
+" size of an <input> in terms of character widths. Only Opera seems to do the
+" "sensible" thing and make the <input> sized to fit exactly as many characters
+" as specified by its "size" attribute, but the spec actually says "at least
+" wide enough to fit 'size' characters", so the other browsers are technically
+" correct as well.
+"
+" Anyway, this leads to two diffculties:
+"   1. The foldcolumn is made up of multiple elements side-by-side with
+"      different sizes, each of which has their own extra padding added. Thus, a
+"      column made up of one item of size 1 and another of size 2 would not
+"      necessarily be equal in size to another line's foldcolumn with a single
+"      item of size 3.
+"   2. The extra padding added to the <input> elements adds up to make the
+"      foldcolumn and line number column too wide, especially in Webkit
+"      browsers.
+"
+" So, the full workaround is:
+"   1. Define a default size in em, equal to the number of characters in the
+"      input element, in case javascript is disabled and the browser does not
+"      support the 'ch' unit. Unfortunately this makes Opera no longer work
+"      properly without javascript. 1em per character is much too wide but it
+"      looks better in webkit browsers than unaligned columns.
+"   2. Insert the following javascript to run at page load, which checks for the
+"      width of a single character (in an extraneous page element inserted
+"      before the page title, and set to hidden) and compares it to the width of
+"      another extra <input> element with only one character. If the width
+"      matches, the script does nothing more, but if not, it will figure out the
+"      fraction of an em unit which would correspond with a ch unit if there
+"      were one, and set the containing element (<pre> or <div>) to a class with
+"      pre-defined rules which is closest to that fraction of an em. Rules are
+"      defined from 0.05 em to 1em per ch.
+if !empty(s:settings.prevent_copy)
+  call extend(s:lines, [
+       \ '',
+       \ '/* simulate a "ch" unit by asking the browser how big a zero character is */',
+       \ 'function FixCharWidth() {',
+       \ '  /* get the hidden element which gives the width of a single character */',
+       \ '  var goodWidth = document.getElementById("oneCharWidth").clientWidth;',
+       \ '  /* get all input elements, we''ll filter on class later */',
+       \ '  var inputTags = document.getElementsByTagName("input");',
+       \ '  var ratio = 5;',
+       \ '  var inputWidth = document.getElementById("oneInputWidth").clientWidth;',
+       \ '  var emWidth = document.getElementById("oneEmWidth").clientWidth;',
+       \ '  if (inputWidth > goodWidth) {',
+       \ '    while (ratio < 100*goodWidth/emWidth && ratio < 100) {',
+       \ '      ratio += 5;',
+       \ '    }',
+       \ '    document.getElementById("vimCodeElement'.s:settings.id_suffix.'").className = "em"+ratio;',
+       \ '  }',
+       \ '}'
+       \ ])
 endif
 
+" insert script closing tag
+call extend(s:lines, [
+      \ '',
+      \ s:settings.use_xhtml ? '//]]>' : '-->',
+      \ "</script>"
+      \ ])
+
+call extend(s:lines, ["</head>"])
+if !empty(s:settings.prevent_copy)
+  call extend(s:lines,
+       \ ["<body onload='FixCharWidth();".(s:settings.line_ids ? " JumpToLine();" : "")."'>",
+       \ "<!-- hidden divs used by javascript to get the width of a char -->",
+       \ "<div id='oneCharWidth'>0</div>",
+       \ "<div id='oneInputWidth'><input size='1' value='0'".s:tag_close."</div>",
+       \ "<div id='oneEmWidth' style='width: 1em;'></div>"
+       \ ])
+else
+  call extend(s:lines, ["<body".(s:settings.line_ids ? " onload='JumpToLine();'" : "").">"])
+endif
 if s:settings.no_pre
-  call extend(s:lines, ["</head>", "<body>"])
+  " if we're not using CSS we use a font tag which can't have a div inside
+  if s:settings.use_css
+    call extend(s:lines, ["<div id='vimCodeElement".s:settings.id_suffix."'>"])
+  endif
 else
-  call extend(s:lines, ["</head>", "<body>", "<pre>"])
+  call extend(s:lines, ["<pre id='vimCodeElement".s:settings.id_suffix."'>"])
 endif
 
 exe s:orgwin . "wincmd w"
 
-" List of all id's
-let s:idlist = []
+" caches of style data
+" initialize to include line numbers if using them
+if s:settings.number_lines
+  let s:stylelist = { s:LINENR_ID : ".LineNr { " . s:CSS1( s:LINENR_ID ) . "}" }
+else
+  let s:stylelist = {}
+endif
+let s:diffstylelist = {
+      \   s:DIFF_A_ID : ".DiffAdd { " . s:CSS1( s:DIFF_A_ID ) . "}",
+      \   s:DIFF_C_ID : ".DiffChange { " . s:CSS1( s:DIFF_C_ID ) . "}",
+      \   s:DIFF_D_ID : ".DiffDelete { " . s:CSS1( s:DIFF_D_ID ) . "}",
+      \   s:DIFF_T_ID : ".DiffText { " . s:CSS1( s:DIFF_T_ID ) . "}"
+      \ }
 
 " set up progress bar in the status line
 if !s:settings.no_progress
@@ -545,9 +1109,6 @@ if s:settings.dynamic_folds
       " level, so subtract 2 from index of first non-dash after the dashes
       " in order to get the fold level of the current fold
       let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
-      if s:level+1 > s:foldcolumn
-       let s:foldcolumn = s:level+1
-      endif
       " store fold info for later use
       let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
       call add(s:allfolds, s:newfold)
@@ -577,9 +1138,6 @@ if s:settings.dynamic_folds
       " level, so subtract 2 from index of first non-dash after the dashes
       " in order to get the fold level of the current fold
       let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
-      if s:level+1 > s:foldcolumn
-       let s:foldcolumn = s:level+1
-      endif
       let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
       " only add the fold if we don't already have it
       if empty(s:allfolds) || index(s:allfolds, s:newfold) == -1
@@ -609,6 +1167,74 @@ if s:settings.dynamic_folds
 
   " close all folds again so we can get the fold text as we go
   silent! %foldclose!
+
+  " Go through and remove folds we don't need to (or cannot) process in the
+  " current conversion range
+  "
+  " If a fold is removed which contains other folds, which are included, we need
+  " to adjust the level of the included folds as used by the conversion logic
+  " (avoiding special cases is good)
+  "
+  " Note any time we remove a fold, either all of the included folds are in it,
+  " or none of them, because we only remove a fold if neither its start nor its
+  " end are within the conversion range.
+  let leveladjust = 0
+  for afold in s:allfolds
+    let removed = 0
+    if exists("g:html_start_line") && exists("g:html_end_line")
+      if afold.firstline < g:html_start_line
+       if afold.lastline <= g:html_end_line && afold.lastline >= g:html_start_line
+         " if a fold starts before the range to convert but stops within the
+         " range, we need to include it. Make it start on the first converted
+         " line.
+         let afold.firstline = g:html_start_line
+       else
+         " if the fold lies outside the range or the start and stop enclose
+         " the entire range, don't bother parsing it
+         call remove(s:allfolds, index(s:allfolds, afold))
+         let removed = 1
+         if afold.lastline > g:html_end_line
+           let leveladjust += 1
+         endif
+       endif
+      elseif afold.firstline > g:html_end_line
+       " If the entire fold lies outside the range we need to remove it.
+       call remove(s:allfolds, index(s:allfolds, afold))
+       let removed = 1
+      endif
+    elseif exists("g:html_start_line")
+      if afold.firstline < g:html_start_line
+       " if there is no last line, but there is a first line, the end of the
+       " fold will always lie within the region of interest, so keep it
+       let afold.firstline = g:html_start_line
+      endif
+    elseif exists("g:html_end_line")
+      " if there is no first line we default to the first line in the buffer so
+      " the fold start will always be included if the fold itself is included.
+      " If however the entire fold lies outside the range we need to remove it.
+      if afold.firstline > g:html_end_line
+       call remove(s:allfolds, index(s:allfolds, afold))
+       let removed = 1
+      endif
+    endif
+    if !removed
+      let afold.level -= leveladjust
+      if afold.level+1 > s:foldcolumn
+       let s:foldcolumn = afold.level+1
+      endif
+    endif
+  endfor
+
+  " if we've removed folds containing the conversion range from processing,
+  " getting foldtext as we go won't know to open the removed folds, so the
+  " foldtext would be wrong; open them now.
+  "
+  " Note that only when a start and an end line is specified will a fold
+  " containing the current range ever be removed.
+  while leveladjust > 0
+    exe g:html_start_line."foldopen"
+    let leveladjust -= 1
+  endwhile
 endif
 
 " Now loop over all lines in the original text to convert to html.
@@ -656,6 +1282,13 @@ endif
 
 let s:foldId = 0
 
+if !s:settings.expand_tabs
+  " If keeping tabs, add them to printable characters so we keep them when
+  " formatting text (strtrans() doesn't replace printable chars)
+  let s:old_isprint = &isprint
+  setlocal isprint+=9
+endif
+
 while s:lnum <= s:end
 
   " If there are filler lines for diff mode, show these above the line.
@@ -672,15 +1305,22 @@ while s:lnum <= s:end
 
       if !s:settings.no_pre
        " HTML line wrapping is off--go ahead and fill to the margin
+       " TODO: what about when CSS wrapping is turned on?
        let s:new = s:new . repeat(s:difffillchar, &columns - strlen(s:new) - s:margin)
       else
        let s:new = s:new . repeat(s:difffillchar, 3)
       endif
 
-      let s:new = s:HtmlFormat(s:new, "DiffDelete", "")
+      let s:new = s:HtmlFormat_d(s:new, s:DIFF_D_ID, 0)
       if s:settings.number_lines
-       " Indent if line numbering is on; must be after escaping.
-       let s:new = repeat(s:LeadingSpace, s:margin) . s:new
+       " Indent if line numbering is on. Indent gets style of line number
+       " column.
+       let s:new = s:HtmlFormat_n(repeat(' ', s:margin), s:LINENR_ID, 0, 0) . s:new
+      endif
+      if s:settings.dynamic_folds && !s:settings.no_foldcolumn && s:foldcolumn > 0
+       " Indent for foldcolumn if there is one. Assume it's empty, there should
+       " not be a fold for deleted lines in diff mode.
+       let s:new = s:FoldColumn_fill() . s:new
       endif
       call add(s:lines, s:new.s:HtmlEndline)
 
@@ -693,8 +1333,6 @@ while s:lnum <= s:end
   " Start the line with the line number.
   if s:settings.number_lines
     let s:numcol = repeat(' ', s:margin - 1 - strlen(s:lnum)) . s:lnum . ' '
-  else
-    let s:numcol = ""
   endif
 
   let s:new = ""
@@ -702,14 +1340,14 @@ while s:lnum <= s:end
   if has('folding') && !s:settings.ignore_folding && foldclosed(s:lnum) > -1 && !s:settings.dynamic_folds
     "
     " This is the beginning of a folded block (with no dynamic folding)
-    "
-    let s:new = s:numcol . foldtextresult(s:lnum)
+    let s:new = foldtextresult(s:lnum)
     if !s:settings.no_pre
       " HTML line wrapping is off--go ahead and fill to the margin
       let s:new = s:new . repeat(s:foldfillchar, &columns - strlen(s:new))
     endif
 
-    let s:new = s:HtmlFormat(s:new, "Folded", "")
+    " put numcol in a separate group for sake of unselectable text
+    let s:new = (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0, s:lnum): "") . s:HtmlFormat_t(s:new, s:FOLDED_ID, 0)
 
     " Skip to the end of the fold
     let s:new_lnum = foldclosedend(s:lnum)
@@ -734,13 +1372,13 @@ while s:lnum <= s:end
        call remove(s:foldstack, 0)
       endwhile
 
-      " Now insert an opening any new folds that start on this line
+      " Now insert an opening for any new folds that start on this line
       let s:firstfold = 1
       while !empty(s:allfolds) && get(s:allfolds,0).firstline == s:lnum
        let s:foldId = s:foldId + 1
        let s:new .= "<span id='"
        let s:new .= (exists('g:html_diff_win_num') ? "win".g:html_diff_win_num : "")
-       let s:new .= "fold".s:foldId."' class='".s:allfolds[0].type."'>"
+       let s:new .= "fold".s:foldId.s:settings.id_suffix."' class='".s:allfolds[0].type."'>"
 
 
        " Unless disabled, add a fold column for the opening line of a fold.
@@ -751,38 +1389,46 @@ while s:lnum <= s:end
        if !s:settings.no_foldcolumn
          " add fold column that can open the new fold
          if s:allfolds[0].level > 1 && s:firstfold
-           let s:new = s:new . "<a class='toggle-open FoldColumn' href='javascript:toggleFold(\"fold".s:foldstack[0].id."\")'>"
-           let s:new = s:new . repeat('|', s:allfolds[0].level - 1) . "</a>"
+           let s:new = s:new . s:FoldColumn_build('|', s:allfolds[0].level - 1, 0, "",
+                 \ 'toggle-open FoldColumn','javascript:toggleFold("fold'.s:foldstack[0].id.s:settings.id_suffix.'");')
          endif
-         let s:new = s:new . "<a class='toggle-open FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>+</a>"
-         let s:new = s:new . "<a class='toggle-open "
+         " add the filler spaces separately from the '+' char so that it can be
+         " shown/hidden separately during a hover unfold
+         let s:new = s:new . s:FoldColumn_build("+", 1, 0, "",
+               \ 'toggle-open FoldColumn', 'javascript:toggleFold("fold'.s:foldId.s:settings.id_suffix.'");')
          " If this is not the last fold we're opening on this line, we need
          " to keep the filler spaces hidden if the fold is opened by mouse
          " hover. If it is the last fold to open in the line, we shouldn't hide
          " them, so don't apply the toggle-filler class.
-         if get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum
-           let s:new = s:new . "toggle-filler "
-         endif
-         let s:new = s:new . "FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>"
-         let s:new = s:new . repeat(" ", s:foldcolumn - s:allfolds[0].level) . "</a>"
+         let s:new = s:new . s:FoldColumn_build(" ", 1, s:foldcolumn - s:allfolds[0].level - 1, "",
+               \ 'toggle-open FoldColumn'. (get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum ?" toggle-filler" :""),
+               \ 'javascript:toggleFold("fold'.s:foldId.s:settings.id_suffix.'");')
 
          " add fold column that can close the new fold
-         let s:new = s:new . "<a class='toggle-closed FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>"
-         if s:firstfold
-           let s:new = s:new . repeat('|', s:allfolds[0].level - 1)
-         endif
-         let s:new = s:new . "-"
-         " only add spaces if we aren't opening another fold on the same line
+         " only add extra blank space if we aren't opening another fold on the
+         " same line
          if get(s:allfolds, 1, {'firstline': 0}).firstline != s:lnum
-           let s:new = s:new . repeat(" ", s:foldcolumn - s:allfolds[0].level)
+           let s:extra_space = s:foldcolumn - s:allfolds[0].level
+         else
+           let s:extra_space = 0
+         endif
+         if s:firstfold
+           " the first fold in a line has '|' characters from folds opened in
+           " previous lines, before the '-' for this fold
+           let s:new .= s:FoldColumn_build('|', s:allfolds[0].level - 1, s:extra_space, '-',
+                 \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'.s:foldId.s:settings.id_suffix.'");')
+         else
+           " any subsequent folds in the line only add a single '-'
+           let s:new = s:new . s:FoldColumn_build("-", 1, s:extra_space, "",
+                 \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'.s:foldId.s:settings.id_suffix.'");')
          endif
-         let s:new = s:new . "</a>"
          let s:firstfold = 0
        endif
 
-       " add fold text, moving the span ending to the next line so collapsing
-       " of folds works correctly
-       let s:new = s:new . substitute(s:HtmlFormat(s:numcol . foldtextresult(s:lnum), "Folded", ""), '</span>', s:HtmlEndline.'\n\0', '')
+       " Add fold text, moving the span ending to the next line so collapsing
+       " of folds works correctly.
+       " Put numcol in a separate group for sake of unselectable text.
+       let s:new = s:new . (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0, 0) : "") . substitute(s:HtmlFormat_t(foldtextresult(s:lnum), s:FOLDED_ID, 0), '</span>', s:HtmlEndline.'\n\0', '')
        let s:new = s:new . "<span class='fulltext'>"
 
        " open the fold now that we have the fold text to allow retrieval of
@@ -802,14 +1448,13 @@ while s:lnum <= s:end
          " add the empty foldcolumn for unfolded lines if there is a fold
          " column at all
          if s:foldcolumn > 0
-           let s:new = s:new . s:HtmlFormat(repeat(' ', s:foldcolumn), "FoldColumn", "")
+           let s:new = s:new . s:FoldColumn_fill()
          endif
        else
          " add the fold column for folds not on the opening line
          if get(s:foldstack, 0).firstline < s:lnum
-           let s:new = s:new . "<a class='FoldColumn' href='javascript:toggleFold(\"fold".s:foldstack[0].id."\")'>"
-           let s:new = s:new . repeat('|', s:foldstack[0].level)
-           let s:new = s:new . repeat(' ', s:foldcolumn - s:foldstack[0].level) . "</a>"
+           let s:new = s:new . s:FoldColumn_build('|', s:foldstack[0].level, s:foldcolumn - s:foldstack[0].level, "",
+                 \ 'FoldColumn', 'javascript:toggleFold("fold'.s:foldstack[0].id.s:settings.id_suffix.'");')
          endif
        endif
       endif
@@ -817,8 +1462,9 @@ while s:lnum <= s:end
 
     " Now continue with the unfolded line text
     if s:settings.number_lines
-      " TODO: why not use the real highlight name here?
-      let s:new = s:new . s:HtmlFormat(s:numcol, "lnr", "")
+      let s:new = s:new . s:HtmlFormat_n(s:numcol, s:LINENR_ID, 0, s:lnum)
+    elseif s:settings.line_ids
+      let s:new = s:new . s:HtmlFormat_n("", s:LINENR_ID, 0, s:lnum)
     endif
 
     " Get the diff attribute, if any.
@@ -832,7 +1478,6 @@ while s:lnum <= s:end
 
     " most of the time we won't use the diff_id, initialize to zero
     let s:diff_id = 0
-    let s:diff_id_name = ""
 
     while s:col <= s:len || (s:col == 1 && s:diffattr)
       let s:startcol = s:col " The start column for processing text
@@ -871,47 +1516,45 @@ while s:lnum <= s:end
       endif
 
       if s:settings.ignore_conceal || !s:concealinfo[0]
-       " Expand tabs
+       " Expand tabs if needed
        let s:expandedtab = strpart(s:line, s:startcol - 1, s:col - s:startcol)
-       let s:offset = 0
-       let s:idx = stridx(s:expandedtab, "\t")
-       while s:idx >= 0
-         if has("multi_byte_encoding")
-           if s:startcol + s:idx == 1
-             let s:i = &ts
-           else
-             if s:idx == 0
-               let s:prevc = matchstr(s:line, '.\%' . (s:startcol + s:idx + s:offset) . 'c')
+       if s:settings.expand_tabs
+         let s:offset = 0
+         let s:idx = stridx(s:expandedtab, "\t")
+         while s:idx >= 0
+           if has("multi_byte_encoding")
+             if s:startcol + s:idx == 1
+               let s:i = &ts
              else
-               let s:prevc = matchstr(s:expandedtab, '.\%' . (s:idx + 1) . 'c')
+               if s:idx == 0
+                 let s:prevc = matchstr(s:line, '.\%' . (s:startcol + s:idx + s:offset) . 'c')
+               else
+                 let s:prevc = matchstr(s:expandedtab, '.\%' . (s:idx + 1) . 'c')
+               endif
+               let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)])
+               let s:i = &ts - (s:vcol % &ts)
              endif
-             let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)])
-             let s:i = &ts - (s:vcol % &ts)
+             let s:offset -= s:i - 1
+           else
+             let s:i = &ts - ((s:idx + s:startcol - 1) % &ts)
            endif
-           let s:offset -= s:i - 1
-         else
-           let s:i = &ts - ((s:idx + s:startcol - 1) % &ts)
-         endif
-         let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', s:i), '')
-         let s:idx = stridx(s:expandedtab, "\t")
-       endwhile
+           let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', s:i), '')
+           let s:idx = stridx(s:expandedtab, "\t")
+         endwhile
+       end
 
        " get the highlight group name to use
        let s:id = synIDtrans(s:id)
-       let s:id_name = synIDattr(s:id, "name", s:whatterm)
-       if s:diff_id
-         let s:diff_id_name = synIDattr(s:diff_id, "name", s:whatterm)
-       endif
       else
        " use Conceal highlighting for concealed text
-       let s:id_name = 'Conceal'
+       let s:id = s:CONCEAL_ID
        let s:expandedtab = s:concealinfo[1]
       endif
 
-      " Output the text with the same synID, with class set to {s:id_name},
-      " unless it has been concealed completely.
+      " Output the text with the same synID, with class set to the highlight ID
+      " name, unless it has been concealed completely.
       if strlen(s:expandedtab) > 0
-       let s:new = s:new . s:HtmlFormat(s:expandedtab,  s:id_name, s:diff_id_name)
+       let s:new = s:new . s:HtmlFormat(s:expandedtab,  s:id, s:diff_id, "", 0)
       endif
     endwhile
   endif
@@ -936,9 +1579,9 @@ if s:settings.dynamic_folds
   endwhile
 
   " add fold column to the style list if not already there
-  let s:id = hlID('FoldColumn')
-  if index(s:idlist, s:id) == -1
-    call insert(s:idlist, s:id)
+  let s:id = s:FOLD_C_ID
+  if !has_key(s:stylelist, s:id)
+    let s:stylelist[s:id] = '.FoldColumn { ' . s:CSS1(s:id) . '}'
   endif
 endif
 
@@ -947,7 +1590,7 @@ if s:settings.no_pre
     " Close off the font tag that encapsulates the whole <body>
     call extend(s:lines, ["</font>", "</body>", "</html>"])
   else
-    call extend(s:lines, ["</body>", "</html>"])
+    call extend(s:lines, ["</div>", "</body>", "</html>"])
   endif
 else
   call extend(s:lines, ["</pre>", "</body>", "</html>"])
@@ -957,91 +1600,119 @@ exe s:newwin . "wincmd w"
 call setline(1, s:lines)
 unlet s:lines
 
+" Mangle modelines so Vim doesn't try to use HTML text as a modeline if editing
+" this file in the future; need to do this after generating all the text in case
+" the modeline text has different highlight groups which all turn out to be
+" stripped from the final output.
+%s!\v(%(^|\s+)%([Vv]i%(m%([<=>]?\d+)?)?|ex)):!\1\&#0058;!ge
+
+" The generated HTML is admittedly ugly and takes a LONG time to fold.
+" Make sure the user doesn't do syntax folding when loading a generated file,
+" using a modeline.
+call append(line('$'), "<!-- vim: set foldmethod=manual : -->")
+
 " Now, when we finally know which, we define the colors and styles
 if s:settings.use_css
   1;/<style type="text/+1
 endif
 
-" Find out the background and foreground color.
-let s:fgc = s:HtmlColor(synIDattr(hlID("Normal"), "fg#", s:whatterm))
-let s:bgc = s:HtmlColor(synIDattr(hlID("Normal"), "bg#", s:whatterm))
-if s:fgc == ""
-  let s:fgc = ( &background == "dark" ? "#ffffff" : "#000000" )
-endif
-if s:bgc == ""
-  let s:bgc = ( &background == "dark" ? "#000000" : "#ffffff" )
-endif
-
 " Normal/global attributes
 " For Netscape 4, set <body> attributes too, though, strictly speaking, it's
 " incorrect.
 if s:settings.use_css
   if s:settings.no_pre
-    execute "normal! A\nbody { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }\e"
+    call append('.', "body { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }")
+    +
   else
-    execute "normal! A\npre { font-family: ". s:htmlfont ."; color: " . s:fgc . "; background-color: " . s:bgc . "; }\e"
+    call append('.', "pre { " . s:whitespace . "font-family: ". s:htmlfont ."; color: " . s:fgc . "; background-color: " . s:bgc . "; }")
+    +
     yank
     put
     execute "normal! ^cwbody\e"
+    " body should not have the wrap formatting, only the pre section
+    if s:whitespace != ''
+      exec 's#'.s:whitespace
+    endif
   endif
-else
-  execute '%s:<body>:<body bgcolor="' . s:bgc . '" text="' . s:fgc . '">\r<font face="'. s:htmlfont .'">'
-endif
-
-" Line numbering attributes
-if s:settings.number_lines
-  if s:settings.use_css
-    execute "normal! A\n.lnr { " . s:CSS1(hlID("LineNr")) . "}\e"
-  else
-    execute '%s+^<span class="lnr">\([^<]*\)</span>+' . s:HtmlOpening(hlID("LineNr")) . '\1' . s:HtmlClosing(hlID("LineNr")) . '+g'
-  endif
-endif
-
-" Gather attributes for all other classes
-if !s:settings.no_progress && !empty(s:idlist)
-  let s:pgb = s:ProgressBar("Processing classes:", len(s:idlist),s:newwin)
-endif
-while !empty(s:idlist)
-  let s:attr = ""
-  let s:id = remove(s:idlist, 0)
-  let s:attr = s:CSS1(s:id)
-  let s:id_name = synIDattr(s:id, "name", s:whatterm)
-
-  " If the class has some attributes, export the style, otherwise DELETE all
-  " its occurences to make the HTML shorter
-  if s:attr != ""
-    if s:settings.use_css
-      execute "normal! A\n." . s:id_name . " { " . s:attr . "}"
-    else
-      " replace spans of just this class name with non-CSS style markup
-      execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+' . s:HtmlOpening(s:id) . '\1' . s:HtmlClosing(s:id) . '+ge'
-      " Replace spans of this class name AND a diff class with non-CSS style
-      " markup surrounding a span of just the diff class. The diff class will
-      " be handled later because we know that information is at the end.
-      execute '%s+<span class="' . s:id_name . ' \(Diff\%(Add\|Change\|Delete\|Text\)\)">\([^<]*\)</span>+' . s:HtmlOpening(s:id) . '<span class="\1">\2</span>' . s:HtmlClosing(s:id) . '+ge'
+  " fix browser inconsistencies (sometimes within the same browser) of different
+  " default font size for different elements
+  call append('.', '* { font-size: 1em; }')
+  +
+  " if we use any input elements for unselectable content, make sure they look
+  " like normal text
+  if !empty(s:settings.prevent_copy)
+    call append('.', 'input { border: none; margin: 0; padding: 0; font-family: '.s:htmlfont.'; }')
+    +
+    " ch units for browsers which support them, em units for a somewhat
+    " reasonable fallback. Also make sure the special elements for size
+    " calculations aren't seen.
+    call append('.', [
+         \ "input[size='1'] { width: 1em; width: 1ch; }",
+         \ "input[size='2'] { width: 2em; width: 2ch; }",
+         \ "input[size='3'] { width: 3em; width: 3ch; }",
+         \ "input[size='4'] { width: 4em; width: 4ch; }",
+         \ "input[size='5'] { width: 5em; width: 5ch; }",
+         \ "input[size='6'] { width: 6em; width: 6ch; }",
+         \ "input[size='7'] { width: 7em; width: 7ch; }",
+         \ "input[size='8'] { width: 8em; width: 8ch; }",
+         \ "input[size='9'] { width: 9em; width: 9ch; }",
+         \ "input[size='10'] { width: 10em; width: 10ch; }",
+         \ "input[size='11'] { width: 11em; width: 11ch; }",
+         \ "input[size='12'] { width: 12em; width: 12ch; }",
+         \ "input[size='13'] { width: 13em; width: 13ch; }",
+         \ "input[size='14'] { width: 14em; width: 14ch; }",
+         \ "input[size='15'] { width: 15em; width: 15ch; }",
+         \ "input[size='16'] { width: 16em; width: 16ch; }",
+         \ "input[size='17'] { width: 17em; width: 17ch; }",
+         \ "input[size='18'] { width: 18em; width: 18ch; }",
+         \ "input[size='19'] { width: 19em; width: 19ch; }",
+         \ "input[size='20'] { width: 20em; width: 20ch; }",
+         \ "#oneCharWidth, #oneEmWidth, #oneInputWidth { padding: 0; margin: 0; position: absolute; left: -999999px; visibility: hidden; }"
+         \ ])
+    +21
+    for w in range(5, 100, 5)
+      let base = 0.01 * w
+      call append('.', join(map(range(1,20), "'.em'.w.' input[size='''.v:val.'''] { width: '.string(v:val*base).'em; }'")))
+      +
+    endfor
+    if s:settings.prevent_copy =~# 'f'
+    " Make the cursor show active fold columns as active areas, and empty fold
+    " columns as not interactive.
+      call append('.', ['input.FoldColumn { cursor: pointer; }',
+           \ 'input.FoldColumn[value=""] { cursor: default; }'
+           \ ])
+      +2
     endif
-  else
-    execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+\1+ge'
-    execute '%s+<span class="' . s:id_name . ' \(Diff\%(Add\|Change\|Delete\|Text\)\)">\([^<]*\)</span>+<span class="\1">\2</span>+ge'
-    if s:settings.use_css
-      1;/<\/style>/-2
+    " make line number column show as non-interactive if not selectable
+    if s:settings.prevent_copy =~# 'n'
+      call append('.', 'input.LineNr { cursor: default; }')
+      +
+    endif
+    " make fold text and line number column within fold text show as
+    " non-interactive if not selectable
+    if (s:settings.prevent_copy =~# 'n' || s:settings.prevent_copy =~# 't') && !s:settings.ignore_folding
+      call append('.', 'input.Folded { cursor: default; }')
+      +
     endif
   endif
+else
+  execute '%s:<body\([^>]*\):<body bgcolor="' . s:bgc . '" text="' . s:fgc . '"\1>\r<font face="'. s:htmlfont .'"'
+endif
 
-  if !s:settings.no_progress
-    call s:pgb.incr()
-    if s:pgb.needs_redraw
-      redrawstatus
-      let s:pgb.needs_redraw = 0
-      " TODO: sleep here to show the progress bar, but only if total time spent
-      " so far on this step is < 1 second? Too slow for batch runs like the test
-      " suite to sleep all the time. Maybe there's no good reason to sleep at
-      " all.
-    endif
+" Gather attributes for all other classes. Do diff first so that normal
+" highlight groups are inserted before it.
+if s:settings.use_css
+  if s:diff_mode
+    call append('.', filter(map(keys(s:diffstylelist), "s:diffstylelist[v:val]"), 'v:val != ""'))
   endif
-endwhile
+  if !empty(s:stylelist)
+    call append('.', filter(map(keys(s:stylelist), "s:stylelist[v:val]"), 'v:val != ""'))
+  endif
+endif
 
 " Add hyperlinks
+" TODO: add option to not do this? Maybe just make the color the same as the
+" text highlight group normally is?
 %s+\(https\=://\S\{-}\)\(\([.,;:}]\=\(\s\|$\)\)\|[\\"'<>]\|&gt;\|&lt;\|&quot;\)+<a href="\1">\1</a>\2+ge
 
 " The DTD
@@ -1060,9 +1731,11 @@ endif
 " Cleanup
 %s:\s\+$::e
 
-" Restore old settings
+" Restore old settings (new window first)
+"
+" Don't bother restoring foldmethod in case it was syntax because the markup is
+" so weirdly formatted it can take a LONG time.
 let &l:foldenable = s:old_fen
-let &l:foldmethod = s:old_fdm
 let &report = s:old_report
 let &title = s:old_title
 let &icon = s:old_icon
@@ -1070,29 +1743,40 @@ let &paste = s:old_paste
 let &magic = s:old_magic
 let @/ = s:old_search
 let &more = s:old_more
+
+" switch to original window to restore those settings
 exe s:orgwin . "wincmd w"
+
+if !s:settings.expand_tabs
+  let &l:isprint = s:old_isprint
+endif
+let &l:stl = s:origwin_stl
 let &l:et = s:old_et
 let &l:scrollbind = s:old_bind
+
+" and back to the new window again to end there
 exe s:newwin . "wincmd w"
+
+let &l:stl = s:newwin_stl
 exec 'resize' s:old_winheight
 let &l:winfixheight = s:old_winfixheight
 
-call setwinvar(s:orgwin,'&stl', s:origwin_stl)
-call setwinvar(s:newwin,'&stl', s:newwin_stl)
 let &ls=s:ls
 
 " Save a little bit of memory (worth doing?)
-unlet s:htmlfont
+unlet s:htmlfont s:whitespace
 unlet s:old_et s:old_paste s:old_icon s:old_report s:old_title s:old_search
-unlet s:old_magic s:old_more s:old_fdm s:old_fen s:old_winheight
-unlet s:whatterm s:idlist s:lnum s:end s:margin s:fgc s:bgc s:old_winfixheight
-unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:concealinfo
+unlet s:old_magic s:old_more s:old_fen s:old_winheight
+unlet! s:old_isprint
+unlet s:whatterm s:stylelist s:diffstylelist s:lnum s:end s:margin s:fgc s:bgc s:old_winfixheight
+unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:concealinfo s:diff_mode
 unlet! s:orgwin s:newwin s:orgbufnr s:idx s:i s:offset s:ls s:origwin_stl
 unlet! s:newwin_stl s:current_syntax
 if !v:profiling
   delfunc s:HtmlColor
   delfunc s:HtmlFormat
   delfunc s:CSS1
+  delfunc s:BuildStyleWrapper
   if !s:settings.use_css
     delfunc s:HtmlOpening
     delfunc s:HtmlClosing
@@ -1110,8 +1794,8 @@ if !v:profiling
 endif
 
 unlet! s:new_lnum s:diffattr s:difffillchar s:foldfillchar s:HtmlSpace
-unlet! s:LeadingSpace s:HtmlEndline s:firstfold s:foldcolumn
-unlet s:foldstack s:allfolds s:foldId s:numcol s:settings
+unlet! s:LeadingSpace s:HtmlEndline s:firstfold s:numcol s:foldcolumn
+unlet s:foldstack s:allfolds s:foldId s:settings
 
 let &cpo = s:cpo_sav
 unlet! s:cpo_sav
index 18d3b0f..1d1f6af 100644 (file)
@@ -1,8 +1,9 @@
 " Vim ABAP syntax file
 "    Language: SAP - ABAP/R4
-"    Revision: 1.0
-"  Maintainer: Marius Piedallu van Wyk <marius@e.co.za>
-" Last Change: 2006 Apr 13
+"    Revision: 2.1
+"  Maintainer: Marius Piedallu van Wyk <lailoken@gmail.com>
+" Last Change: 2013 Jun 13
+"     Comment: Thanks to EPI-USE Labs for all your assistance. :)
 
 " For version  < 6.0: Clear all syntax items
 " For version >= 6.0: Quit when a syntax file was already loaded
@@ -15,101 +16,153 @@ endif
 " Always ignore case
 syn case ignore
 
-" Symbol Operators
-syn match   abapSymbolOperator  "[+\-/=<>$]"
-syn match   abapSymbolOperator  "\*"
-syn match   abapSymbolOperator  "[<>]="
-syn match   abapSymbolOperator  "<>"
-syn match   abapSymbolOperator  "\*\*"
-syn match   abapSymbolOperator  "[()]"
-syn match   abapSymbolOperator  "[:,\.]"
+" Symbol Operators (space delimited)
+syn match   abapSymbolOperator  "\W+\W"
+syn match   abapSymbolOperator  "\W-\W"
+syn match   abapSymbolOperator  "\W/\W"
+syn match   abapSymbolOperator  "\W%\W"
+syn match   abapSymbolOperator  "\W=\W"
+syn match   abapSymbolOperator  "\W<\W"
+syn match   abapSymbolOperator  "\W>\W"
+syn match   abapSymbolOperator  "\W\*\W"
+syn match   abapSymbolOperator  "\W[<>]=\W"
+syn match   abapSymbolOperator  "\W<>\W"
+syn match   abapSymbolOperator  "\W\*\*\W"
+syn match   abapSymbolOperator  "\[\]"
+syn match   abapSymbolOperator  "->\*\?"
+syn match   abapSymbolOperator  "=>"
+syn match   abapSymbolOperator  "[()~:,\.&$]"
 
 " Literals
-syn region  abapString matchgroup=abapString start="'" end="'" contains=abapStringEscape
-syn match   abapStringEscape contained "''"
+syn region  abapCharString matchgroup=abapCharString start="'" end="'" contains=abapCharStringEscape
+syn match   abapCharStringEscape contained "''"
 
-syn match   abapNumber  "-\=\<\d\+\>"
+syn region  abapString matchgroup=abapString start="`" end="`" contains=abapStringEscape
+syn match   abapStringEscape contained "``"
+
+syn match   abapNumber  "\-\=\<\d\+\>"
 syn region  abapHex     matchgroup=abapHex start="X'" end="'"
 
 if version >= 600
-  setlocal iskeyword=-,48-57,_,A-Z,a-z
+  setlocal iskeyword=48-57,_,A-Z,a-z,/
 else
-  set iskeyword=-,48-57,_,A-Z,a-z
+  set iskeyword=48-57,_,A-Z,a-z,/
 endif
 
+syn match   abapNamespace        "\</\w\+/"
+
+" multi-word statements
+syn match   abapComplexStatement "\<\(WITH\W\+\(HEADER\W\+LINE\|FRAME\|KEY\)\|WITH\)\>"
+syn match   abapComplexStatement "\<NO\W\+STANDARD\W\+PAGE\W\+HEADING\>"
+syn match   abapComplexStatement "\<\(EXIT\W\+FROM\W\+STEP\W\+LOOP\|EXIT\)\>"
+syn match   abapComplexStatement "\<\(BEGIN\W\+OF\W\+\(BLOCK\|LINE\)\|BEGIN\W\+OF\)\>"
+syn match   abapComplexStatement "\<\(END\W\+OF\W\+\(BLOCK\|LINE\)\|END\W\+OF\)\>"
+syn match   abapComplexStatement "\<NO\W\+INTERVALS\>"
+syn match   abapComplexStatement "\<RESPECTING\W\+BLANKS\>"
+syn match   abapComplexStatement "\<SEPARATED\W\+BY\>"
+syn match   abapComplexStatement "\<USING\(\W\+EDIT\W\+MASK\)\?\>"
+syn match   abapComplexStatement "\<WHERE\(\W\+LINE\)\?\>"
+syn match   abapComplexStatement "\<RADIOBUTTON\W\+GROUP\>"
+syn match   abapComplexStatement "\<REF\W\+TO\>"
+syn match   abapComplexStatement "\<\(PUBLIC\|PRIVATE\|PROTECTED\)\(\W\+SECTION\)\?\>"
+syn match   abapComplexStatement "\<DELETING\W\+\(TRAILING\|LEADING\)\>"
+syn match   abapComplexStatement "\<\(ALL\W\+OCCURRENCES\)\|\(\(FIRST\|LAST\)\W\+OCCURRENCE\)\>"
+syn match   abapComplexStatement "\<INHERITING\W\+FROM\>"
+syn match   abapComplexStatement "\<\(UP\W\+\)\?TO\>"
+
+" hyphenated-word statements
+syn match   abapComplexStatement "\<LINE-COUNT\>"
+syn match   abapComplexStatement "\<ADD-CORRESPONDING\>"
+syn match   abapComplexStatement "\<AUTHORITY-CHECK\>"
+syn match   abapComplexStatement "\<BREAK-POINT\>"
+syn match   abapComplexStatement "\<CLASS-DATA\>"
+syn match   abapComplexStatement "\<CLASS-METHODS\>"
+syn match   abapComplexStatement "\<CLASS-METHOD\>"
+syn match   abapComplexStatement "\<DIVIDE-CORRESPONDING\>"
+syn match   abapComplexStatement "\<EDITOR-CALL\>"
+syn match   abapComplexStatement "\<END-OF-DEFINITION\>"
+syn match   abapComplexStatement "\<END-OF-PAGE\>"
+syn match   abapComplexStatement "\<END-OF-SELECTION\>"
+syn match   abapComplexStatement "\<FIELD-GROUPS\>"
+syn match   abapComplexStatement "\<FIELD-SYMBOLS\>"
+syn match   abapComplexStatement "\<FUNCTION-POOL\>"
+syn match   abapComplexStatement "\<IS\W\+\(NOT\W\+\)\?\(ASSIGNED\|BOUND\|INITIAL\|SUPPLIED\)\>"
+syn match   abapComplexStatement "\<MOVE-CORRESPONDING\>"
+syn match   abapComplexStatement "\<MULTIPLY-CORRESPONDING\>"
+syn match   abapComplexStatement "\<NEW-LINE\>"
+syn match   abapComplexStatement "\<NEW-PAGE\>"
+syn match   abapComplexStatement "\<NEW-SECTION\>"
+syn match   abapComplexStatement "\<PRINT-CONTROL\>"
+syn match   abapComplexStatement "\<RP-PROVIDE-FROM-LAST\>"
+syn match   abapComplexStatement "\<SELECT-OPTIONS\>"
+syn match   abapComplexStatement "\<SELECTION-SCREEN\>"
+syn match   abapComplexStatement "\<START-OF-SELECTION\>"
+syn match   abapComplexStatement "\<SUBTRACT-CORRESPONDING\>"
+syn match   abapComplexStatement "\<SYNTAX-CHECK\>"
+syn match   abapComplexStatement "\<SYNTAX-TRACE\>"
+syn match   abapComplexStatement "\<TOP-OF-PAGE\>"
+syn match   abapComplexStatement "\<TYPE-POOL\>"
+syn match   abapComplexStatement "\<TYPE-POOLS\>"
+syn match   abapComplexStatement "\<LINE-SIZE\>"
+syn match   abapComplexStatement "\<LINE-COUNT\>"
+syn match   abapComplexStatement "\<MESSAGE-ID\>"
+syn match   abapComplexStatement "\<DISPLAY-MODE\>"
+syn match   abapComplexStatement "\<READ\(-ONLY\)\?\>"
+
 " ABAP statements
-syn keyword abapStatement ADD ADD-CORRESPONDING ASSIGN AT AUTHORITY-CHECK
-syn keyword abapStatement BACK BREAK-POINT
-syn keyword abapStatement CALL CASE CHECK CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY
-syn keyword abapStatement DATA DEFINE DELETE DESCRIBE DETAIL DIVIDE DIVIDE-CORRESPONDING DO
-syn keyword abapStatement EDITOR-CALL ELSE ELSEIF END-OF-DEFINITION END-OF-PAGE END-OF-SELECTION ENDAT ENDCASE ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDLOOP ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDWHILE EXEC EXPORT EXPORTING EXTRACT
-syn keyword abapStatement FETCH FIELD-GROUPS FIELD-SYMBOLS FIELDS FORM FORMAT FREE FUNCTION FUNCTION-POOL
+syn keyword abapStatement ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT
+syn keyword abapStatement BACK
+syn keyword abapStatement CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY
+syn keyword abapStatement DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO
+syn keyword abapStatement ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT
+syn keyword abapStatement FETCH FIELDS FORM FORMAT FREE FROM FUNCTION
 syn keyword abapStatement GENERATE GET
 syn keyword abapStatement HIDE
-syn keyword abapStatement IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INPUT INSERT
-syn keyword abapStatement LEAVE LIKE LOAD LOCAL LOOP
-syn keyword abapStatement MESSAGE MODIFY MODULE MOVE MOVE-CORRESPONDING MULTIPLY MULTIPLY-CORRESPONDING
-syn keyword abapStatement NEW-LINE NEW-PAGE NEW-SECTION
-syn keyword abapStatement ON OVERLAY
-syn keyword abapStatement PACK PARAMETERS PERFORM POSITION PRINT-CONTROL PROGRAM PROVIDE PUT
-syn keyword abapStatement RAISE RANGES READ RECEIVE REFRESH REJECT REPLACE REPORT RESERVE RESTORE ROLLBACK RP-PROVIDE-FROM-LAST
-syn keyword abapStatement SCAN SCROLL SEARCH SELECT SELECT-OPTIONS SELECTION-SCREEN SET SHIFT SKIP SORT SPLIT START-OF-SELECTION STATICS STOP SUBMIT SUBTRACT SUBTRACT-CORRESPONDING SUM SUMMARY SUPPRESS SYNTAX-CHECK SYNTAX-TRACE
-syn keyword abapStatement TABLES TOP-OF-PAGE TRANSFER TRANSLATE TYPE TYPE-POOL TYPE-POOLS TYPES
-syn keyword abapStatement UNPACK UPDATE
+syn keyword abapStatement IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION 
+syn keyword abapStatement LEAVE LIKE LINE LOAD LOCAL LOOP
+syn keyword abapStatement MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY
+syn keyword abapStatement ON OVERLAY OPTIONAL OTHERS
+syn keyword abapStatement PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT
+syn keyword abapStatement RAISE RANGES RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK
+syn keyword abapStatement SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS
+syn keyword abapStatement TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES
+syn keyword abapStatement UNASSIGN ULINE UNPACK UPDATE
 syn keyword abapStatement WHEN WHILE WINDOW WRITE
 
 " More statemets
+syn keyword abapStatement LINES
+syn keyword abapStatement INTO GROUP BY HAVING ORDER BY SINGLE
+syn keyword abapStatement APPENDING CORRESPONDING FIELDS OF TABLE
+syn keyword abapStatement LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER ROWS CONNECTING
 syn keyword abapStatement OCCURS STRUCTURE OBJECT PROPERTY
 syn keyword abapStatement CASTING APPEND RAISING VALUE COLOR
-syn keyword abapStatement LINE-SIZE LINE-COUNT MESSAGE-ID
-syn keyword abapStatement CHANGING EXCEPTIONS DEFAULT CHECKBOX COMMENT
-syn keyword abapStatement ID NUMBER FOR DISPLAY-MODE TITLE OUTPUT
-
-" More multi-word statements
-syn match   abapStatement "\(\W\|^\)\(WITH\W\+\(HEADER\W\+LINE\|FRAME\|KEY\)\|WITH\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)NO\W\+STANDARD\W\+PAGE\W\+HEADING\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)\(EXIT\W\+FROM\W\+STEP\W\+LOOP\|EXIT\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)\(BEGIN\W\+OF\W\+\(BLOCK\|LINE\)\|BEGIN\W\+OF\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)\(END\W\+OF\W\+\(BLOCK\|LINE\)\|END\W\+OF\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)IS\W\+INITIAL\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)NO\W\+INTERVALS\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)SEPARATED\W\+BY\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)\(USING\W\+\(EDIT\W\+MASK\)\|USING\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)\(WHERE\W\+\(LINE\)\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)RADIOBUTTON\W\+GROUP\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)REF\W\+TO\(\W\|$\)"ms=s+1,me=e-1
+syn keyword abapStatement CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT
+syn keyword abapStatement ID NUMBER FOR TITLE OUTPUT
 
 " Special ABAP specific tables:
-syn match   abapSpecial       "\(\W\|^\)\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapSpecialTables "\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)-"me=e-1 contained
-syn match   abapSpecial       "\(\W\|^\)\w\+-\(\w\+-\w\+\|\w\+\)"ms=s+1 contains=abapSpecialTables
+syn match   abapSpecialTables "\<\(sy\|\(hrp\|p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)-"me=e-1 contained
+syn match   abapStructure     "\<\w\+-[^\>]"me=e-2 contains=abapSpecialTables,abapStatement,abapComplexStatement
+syn match   abapField         "-\w\+"ms=s+1
 
 " Pointer
 syn match   abapSpecial  "<\w\+>"
 
-" Abap constants:
+" Abap common constants:
 syn keyword abapSpecial  TRUE FALSE NULL SPACE
 
 " Includes
 syn region abapInclude   start="include" end="." contains=abapComment
 
 " Types
-syn keyword abapTypes    c n i p f d t x
+syn keyword abapTypes    c n i p f d t x string xstring decfloat16 decfloat34
 
 " Atritmitic operators
 syn keyword abapOperator abs sign ceil floor trunc frac acos asin atan cos sin tan
 syn keyword abapOperator cosh sinh tanh exp log log10 sqrt
 
 " String operators
-syn keyword abapOperator strlen xstrlen charlen numofchar dbmaxlen
-
-" Table operators
-syn keyword abapOperator lines
+syn keyword abapStatement strlen xstrlen charlen numofchar dbmaxlen
 
-" Table operators (SELECT operators)
-syn keyword abapOperator INTO FROM WHERE GROUP BY HAVING ORDER BY SINGLE
-syn keyword abapOperator APPENDING CORRESPONDING FIELDS OF TABLE
-syn keyword abapOperator LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING
 syn keyword abapOperator EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN
 
 " An error? Not strictly... but cannot think of reason this is intended.
@@ -119,6 +172,7 @@ syn match   abapError    "\.\."
 syn region  abapComment  start="^\*" end="$" contains=abapTodo
 syn match   abapComment  "\".*" contains=abapTodo
 syn keyword abapTodo     contained TODO NOTE
+syn match   abapTodo     "\#EC\W\+\w\+"
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -134,13 +188,20 @@ if version >= 508 || !exists("did_abap_syntax_inits")
   HiLink abapError          Error
   HiLink abapComment        Comment
   HiLink abapInclude        Include
+  HiLink abapStatement      Statement
+  HiLink abapComplexStatement      Statement
   HiLink abapSpecial        Special
-  HiLink abapSpecialTables  PreProc
+  HiLink abapNamespace      Special
+  HiLink abapSpecialTables  Special
   HiLink abapSymbolOperator abapOperator
   HiLink abapOperator       Operator
-  HiLink abapStatement      Statement
+  HiLink abapCharString     String
   HiLink abapString         String
   HiLink abapFloat          Float
+  HiLink abapTypes          Type
+  HiLink abapSymbol         Structure
+  HiLink abapStructure      Structure
+  HiLink abapField          Variable
   HiLink abapNumber         Number
   HiLink abapHex            Number
 
index fde9be3..05e8dac 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    ABEL
-" Maintainer:  John Cook <john.cook@kla-tencor.com>
-" Last Change: 2001 Sep 2
+" Maintainer:  John Cook <johncook3@gmail.com>
+" Last Change: 2011 Dec 27
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " this language is oblivious to case
 syn case ignore
 
@@ -164,4 +167,8 @@ if version >= 508 || !exists("did_abel_syn_inits")
 endif
 
 let b:current_syntax = "abel"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:ts=8
index 4f04bd0..c9d2b06 100644 (file)
@@ -32,6 +32,8 @@
 if exists("b:current_syntax") || version < 700
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 let b:current_syntax = "ada"
 
@@ -352,6 +354,9 @@ endif
 " this speeds things up greatly.
 syntax sync minlines=1 maxlines=1
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff --git a/runtime/syntax/aptconf.vim b/runtime/syntax/aptconf.vim
new file mode 100644 (file)
index 0000000..0607ca1
--- /dev/null
@@ -0,0 +1,512 @@
+" Vim syntax file
+" Language:    APT config file
+" Maintainer:  Yann Amar <quidame@poivron.org>
+" Last Change: 2013 Apr 12
+
+" For version 5.x: Clear all syntax items
+" For version 6.x and 7.x: Quit when a syntax file was already loaded
+if !exists("main_syntax")
+  if version < 600
+    syntax clear
+  elseif exists("b:current_syntax")
+    finish
+  endif
+  let main_syntax = 'aptconf'
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Errors:
+" Catch all that is not overridden by next rules/items:
+syn match      aptconfError            display '[^[:blank:]]'
+syn match      aptconfError            display '^[^[:blank:]][^:{]*'
+
+" Options:
+" Define a general regular expression for the options that are not defined
+" later as keywords. Following apt.conf(5), we know that options are case
+" insensitive, and can contain alphanumeric characters and '/-:._+'; we
+" assume that there can not be consecutive colons (::) which is used as
+" syntax operator; we also assume that an option name can not start or end
+" by a colon.
+syn case       ignore
+syn match      aptconfRegexpOpt        '[-[:alnum:]/.+_]\+\(:[-[:alnum:]/.+_]\+\)*' contained display
+
+" Keywords:
+setlocal iskeyword+=/,-,.,_,+
+"setlocal iskeyword+=: is problematic, because of the '::' separator
+
+" Incomplete keywords will be treated differently than completely bad strings:
+syn keyword    aptconfGroupIncomplete
+       \ a[cquire] a[ptitude] d[ebtags] d[ebug] d[ir] d[pkg] d[select]
+       \ o[rderlist] p[ackagemanager] p[kgcachegen] q[uiet] r[pm]
+       \ u[nattended-upgrade]
+
+" Only the following keywords can be used at toplevel (to begin an option):
+syn keyword    aptconfGroup
+       \ acquire apt aptitude debtags debug dir dpkg dselect
+       \ orderlist packagemanager pkgcachegen quiet rpm
+       \ unattended-upgrade
+
+" Possible options for each group:
+" Acquire: {{{
+syn keyword    aptconfAcquire contained
+       \ cdrom Check-Valid-Until CompressionTypes ForceHash ftp gpgv
+       \ GzipIndexes http https Languages Max-ValidTime Min-ValidTime PDiffs
+       \ Queue-Mode Retries Source-Symlinks
+
+syn keyword    aptconfAcquireCDROM contained
+       \ AutoDetect CdromOnly Mount UMount
+
+syn keyword    aptconfAcquireCompressionTypes contained
+       \ bz2 lzma gz Order
+
+syn keyword    aptconfAcquireFTP contained
+       \ Passive Proxy ProxyLogin Timeout
+
+syn keyword    aptconfAcquireHTTP contained
+       \ AllowRedirect Dl-Limit Max-Age No-Cache No-Store Pipeline-Depth
+       \ Proxy Timeout User-Agent
+
+syn keyword    aptconfAcquireHTTPS contained
+       \ CaInfo CaPath CrlFile IssuerCert SslCert SslForceVersion SslKey
+       \ Verify-Host Verify-Peer
+
+syn keyword    aptconfAcquireMaxValidTime contained
+       \ Debian Debian-Security
+
+syn keyword    aptconfAcquirePDiffs contained
+       \ FileLimit SizeLimit
+
+syn cluster    aptconfAcquire_ contains=aptconfAcquire,
+       \ aptconfAcquireCDROM,aptconfAcquireCompressionTypes,aptconfAcquireFTP,
+       \ aptconfAcquireHTTP,aptconfAcquireHTTPS,aptconfAcquireMaxValidTime,
+       \ aptconfAcquirePDiffs
+" }}}
+" Apt: {{{
+syn keyword    aptconfApt contained
+       \ Architecture Architectures Archive Authentication AutoRemove
+       \ Build-Essential Cache Cache-Grow Cache-Limit Cache-Start CDROM
+       \ Changelogs Clean-Installed Compressor Default-Release
+       \ Force-LoopBreak Get Ignore-Hold Immediate-Configure
+       \ Install-Recommends Install-Suggests Keep-Fds List-Cleanup
+       \ NeverAutoRemove Never-MarkAuto-Sections Periodic Status-Fd Update
+
+syn keyword    aptconfAptAuthentication contained
+       \ TrustCDROM
+
+syn keyword    aptconfAptAutoRemove contained
+       \ RecommendsImportant SuggestsImportant
+
+syn keyword    aptconfAptCache contained
+       \ AllNames AllVersions Generate GivenOnly Important Installed NamesOnly
+       \ RecurseDepends ShowFull
+
+syn keyword    aptconfAptCDROM contained
+       \ Fast NoAct NoMount Rename
+
+syn keyword    aptconfAptChangelogs contained
+       \ Server
+
+syn keyword    aptconfAptCompressor contained
+       \ bzip2 gzip lzma xz
+
+syn keyword    aptconfAptCompressorAll contained
+       \ Binary CompressArg Cost Extension Name UncompressArg
+
+syn keyword    aptconfAptGet contained
+       \ AllowUnauthenticated Arch-Only Assume-No Assume-Yes AutomaticRemove
+       \ Build-Dep-Automatic Compile Diff-Only Download Download-Only Dsc-Only
+       \ Fix-Broken Fix-Missing Force-Yes HideAutoRemove Host-Architecture
+       \ List-Cleanup Only-Source Print-URIs Purge ReInstall Remove
+       \ Show-Upgraded Show-User-Simulation-Note Show-Versions Simulate
+       \ Tar-Only Trivial-Only Upgrade
+
+syn keyword    aptconfAptPeriodic contained
+       \ AutocleanInterval BackupArchiveInterval BackupLevel
+       \ Download-Upgradeable-Packages MaxAge MaxSize MinAge
+       \ Unattended-Upgrade Update-Package-Lists Verbose
+
+syn keyword    aptconfAptUpdate contained
+       \ Pre-Invoke Post-Invoke Post-Invoke-Success
+
+syn cluster    aptconfApt_ contains=aptconfApt,
+       \ aptconfAptAuthentication,aptconfAptAutoRemove,aptconfAptCache,
+       \ aptconfAptCDROM,aptconfAptChangelogs,aptconfAptCompressor,
+       \ aptconfAptCompressorAll,aptconfAptGet,aptconfAptPeriodic,
+       \ aptconfAptUpdate
+" }}}
+" Aptitude: {{{
+syn keyword    aptconfAptitude contained
+       \ Allow-Null-Upgrade Always-Use-Safe-Resolver Autoclean-After-Update
+       \ Auto-Install Auto-Fix-Broken Cmdline Debtags-Binary
+       \ Debtags-Update-Options Delete-Unused Delete-Unused-Pattern
+       \ Display-Planned-Action Forget-New-On-Install Forget-New-On-Update
+       \ Get-Root-Command Ignore-Old-Tmp Ignore-Recommends-Important
+       \ Keep-Recommends Keep-Suggests Keep-Unused-Pattern LockFile Log
+       \ Logging Parse-Description-Bullets Pkg-Display-Limit ProblemResolver
+       \ Purge-Unused Recommends-Important Safe-Resolver Screenshot Sections
+       \ Simulate Spin-Interval Suggests-Important Suppress-Read-Only-Warning
+       \ Theme Track-Dselect-State UI Warn-Not-Root
+
+syn keyword    aptconfAptitudeCmdline contained
+       \ Always-Prompt Assume-Yes Disable-Columns Download-Only Fix-Broken
+       \ Ignore-Trust-Violations Package-Display-Format Package-Display-Width
+       \ Progress Request-Strictness Resolver-Debug Resolver-Dump
+       \ Resolver-Show-Steps Safe-Upgrade Show-Deps Show-Size-Changes
+       \ Show-Versions Show-Why Simulate Verbose Version-Display-Format
+       \ Versions-Group-By Versions-Show-Package-Names Visual-Preview
+       \ Why-Display-Mode
+
+syn keyword    aptconfAptitudeCmdlineProgress contained
+       \ Percent-On-Right Retain-Completed
+
+syn keyword    aptconfAptitudeCmdlineSafeUpgrade contained
+       \ No-New-Installs
+
+syn keyword    aptconfAptitudeLogging contained
+       \ File Levels
+
+syn keyword    aptconfAptitudeProblemResolver contained
+       \ Allow-Break-Holds BreakHoldScore Break-Hold-Level BrokenScore
+       \ DefaultResolutionScore Discard-Null-Solution
+       \ EssentialRemoveScore ExtraScore FullReplacementScore FutureHorizon
+       \ Hints ImportantScore Infinity InstallScore Keep-All-Level KeepScore
+       \ NonDefaultScore Non-Default-Level OptionalScore PreserveAutoScore
+       \ PreserveManualScore RemoveScore Remove-Essential-Level Remove-Level
+       \ RequiredScore ResolutionScore Safe-Level SolutionCost StandardScore
+       \ StepLimit StepScore Trace-Directory Trace-File
+       \ UndoFullReplacementScore UnfixedSoftScore UpgradeScore
+
+syn keyword    aptconfAptitudeSafeResolver contained
+       \ No-New-Installs No-New-Upgrades Show-Resolver-Actions
+
+syn keyword    aptconfAptitudeScreenshot contained
+       \ Cache-Max IncrementalLoadLimit
+
+syn keyword    aptconfAptitudeSections contained
+       \ Descriptions Top-Sections
+
+syn keyword    aptconfAptitudeUI contained
+       \ Advance-On-Action Auto-Show-Reasons Default-Grouping
+       \ Default-Package-View Default-Preview-Grouping Default-Sorting
+       \ Description-Visible-By-Default Exit-On-Last-Close Fill-Text
+       \ Flat-View-As-First-View HelpBar Incremental-Search InfoAreaTabs
+       \ KeyBindings MenuBar-Autohide Minibuf-Download-Bar Minibuf-Prompts
+       \ New-package-Commands Package-Display-Format Package-Header-Format
+       \ Package-Status-Format Pause-After-Download Preview-Limit
+       \ Prompt-On-Exit Styles ViewTabs
+
+syn keyword    aptconfAptitudeUIKeyBindings contained
+       \ ApplySolution Begin BugReport Cancel Changelog ChangePkgTreeGrouping
+       \ ChangePkgTreeLimit ChangePkgTreeSorting ClearAuto CollapseAll
+       \ CollapseTree Commit Confirm Cycle CycleNext CycleOrder CyclePrev
+       \ DelBOL DelBack DelEOL DelForward Dependencies DescriptionCycle
+       \ DescriptionDown DescriptionUp DoInstallRun Down DpkgReconfigure
+       \ DumpResolver EditHier End ExamineSolution ExpandAll ExpandTree
+       \ FirstSolution ForbidUpgrade ForgetNewPackages Help HistoryNext
+       \ HistoryPrev Hold Install InstallSingle Keep LastSolution Left
+       \ LevelDown LevelUp MarkUpgradable MineFlagSquare MineLoadGame
+       \ MineSaveGame MineSweepSquare MineUncoverSquare MineUncoverSweepSquare
+       \ NextPage NextSolution No Parent PrevPage PrevSolution Purge
+       \ PushButton Quit QuitProgram RejectBreakHolds Refresh Remove
+       \ ReInstall RepeatSearchBack ReSearch ReverseDependencies Right
+       \ SaveHier Search SearchBack SearchBroken SetAuto ShowHideDescription
+       \ SolutionActionApprove SolutionActionReject ToggleExpanded
+       \ ToggleMenuActive Undo Up UpdatePackageList Versions Yes
+
+syn keyword    aptconfAptitudeUIStyles contained
+       \ Bullet ChangeLogNewerVersion Default DepBroken DisabledMenuEntry
+       \ DownloadHit DownloadProgress EditLine Error Header HighlightedMenuBar
+       \ HighlightedMenuEntry MediaChange MenuBar MenuBorder MenuEntry
+       \ MineBomb MineBorder MineFlag MineNumber1 MineNumber2 MineNumber3
+       \ MineNumber4 MineNumber5 MineNumber6 MineNumber7 MineNumber8
+       \ MultiplexTab MultiplexTabHighlighted PkgBroken PkgBrokenHighlighted
+       \ PkgIsInstalled PkgIsInstalledHighlighted PkgNotInstalled
+       \ PkgNotInstalledHighlighted PkgToDowngrade PkgToDowngradeHighlighted
+       \ PkgToHold PkgToHoldHighlighted PkgToInstall PkgToInstallHighlighted
+       \ PkgToRemove PkgToRemoveHighlighted PkgToUpgrade
+       \ PkgToUpgradeHighlighted Progress SolutionActionApproved
+       \ SolutionActionRejected Status TreeBackground TrustWarning
+
+syn keyword    aptconfAptitudeUIStylesElements contained
+       \ bg clear fg flip set
+
+syn cluster    aptconfAptitude_ contains=aptconfAptitude,
+       \ aptconfAptitudeCmdline,aptconfAptitudeCmdlineProgress,
+       \ aptconfAptitudeCmdlineSafeUpgrade,aptconfAptitudeLogging,
+       \ aptconfAptitudeProblemResolver,aptconfAptitudeSafeResolver,
+       \ aptconfAptitudeScreenshot,aptconfAptitudeSections,aptconfAptitudeUI,
+       \ aptconfAptitudeUIKeyBindings,aptconfAptitudeUIStyles,
+       \ aptconfAptitudeUIStylesElements
+" }}}
+" DebTags: {{{
+syn keyword    aptconfDebTags contained
+       \ Vocabulary
+
+syn cluster    aptconfDebTags_ contains=aptconfDebTags
+" }}}
+" Debug: {{{
+syn keyword    aptconfDebug contained
+       \ Acquire aptcdrom BuildDeps Hashes IdentCdrom Nolocking
+       \ pkgAcquire pkgAutoRemove pkgCacheGen pkgDepCache pkgDPkgPM
+       \ pkgDPkgProgressReporting pkgInitialize pkgOrderList
+       \ pkgPackageManager pkgPolicy pkgProblemResolver sourceList
+
+syn keyword    aptconfDebugAcquire contained
+       \ cdrom Ftp gpgv Http Https netrc
+
+syn keyword    aptconfDebugPkgAcquire contained
+       \ Auth Diffs RRed Worker
+
+syn keyword    aptconfDebugPkgDepCache contained
+       \ AutoInstall Marker
+
+syn keyword    aptconfDebugPkgProblemResolver contained
+       \ ShowScores
+
+syn cluster    aptconfDebug_ contains=aptconfDebug,
+       \ aptconfDebugAcquire,aptconfDebugPkgAcquire,aptconfDebugPkgDepCache,
+       \ aptconfDebugPkgProblemResolver
+" }}}
+" Dir: {{{
+syn keyword    aptconfDir contained
+       \ Aptitude Bin Cache Etc Ignore-Files-Silently Log Media Parts RootDir
+       \ State
+
+syn keyword    aptconfDirAptitude contained
+       \ state
+
+syn keyword    aptconfDirBin contained
+       \ apt-get apt-cache dpkg dpkg-buildpackage dpkg-source gpg gzip Methods
+       \ solvers
+
+syn keyword    aptconfDirCache contained
+       \ Archives Backup pkgcache srcpkgcache
+
+syn keyword    aptconfDirEtc contained
+       \ Main Netrc Parts Preferences PreferencesParts SourceList SourceParts
+       \ VendorList VendorParts Trusted TrustedParts
+
+syn keyword    aptconfDirLog contained
+       \ History Terminal
+
+syn keyword    aptconfDirMedia contained
+       \ MountPath
+
+syn keyword    aptconfDirState contained
+       \ cdroms extended_states Lists mirrors status
+
+syn cluster    aptconfDir_ contains=aptconfDir,
+       \ aptconfDirAptitude,aptconfDirBin,aptconfDirCache,aptconfDirEtc,
+       \ aptconfDirLog,aptconfDirMedia,aptconfDirState
+" }}}
+" DPkg: {{{
+syn keyword    aptconfDPkg contained
+       \ Build-Options Chroot-Directory ConfigurePending FlushSTDIN MaxArgs
+       \ MaxBytes NoTriggers options Pre-Install-Pkgs Pre-Invoke Post-Invoke
+       \ Run-Directory StopOnError Tools TriggersPending
+
+syn keyword    aptconfDPkgTools contained
+       \ Options Version
+
+syn cluster    aptconfDPkg_ contains=aptconfDPkg,
+       \ aptconfDPkgOrderList,aptconfDPkgOrderListScore,aptconfDPkgTools
+" }}}
+" DSelect: {{{
+syn keyword    aptconfDSelect contained
+       \ CheckDir Clean Options PromptAfterUpdate UpdateOptions
+
+syn cluster    aptconfDSelect_ contains=aptconfDSelect
+" }}}
+" OrderList: {{{
+syn keyword    aptconfOrderList contained
+       \ Score
+
+syn keyword    aptconfOrderListScore contained
+       \ Delete Essential Immediate PreDepends
+
+syn cluster    aptconfOrderList_ contains=aptconfOrderList,
+       \ aptconfOrderListScore
+" }}}
+" PackageManager: {{{
+syn keyword    aptconfPackageManager contained
+       \ Configure
+
+syn cluster    aptconfPackageManager_ contains=aptconfPackageManager
+" }}}
+" PkgCacheGen: {{{
+syn keyword    aptconfPkgCacheGen contained
+       \ Essential
+
+syn cluster    aptconfPkgCacheGen_ contains=aptconfPkgCacheGen
+" }}}
+" Quiet: {{{
+syn keyword    aptconfQuiet contained
+       \ NoUpdate
+
+syn cluster    aptconfQuiet_ contains=aptconfQuiet
+" }}}
+" Rpm: {{{
+syn keyword    aptconfRpm contained
+       \ Post-Invoke Pre-Invoke
+
+syn cluster    aptconfRpm_ contains=aptconfRpm
+" }}}
+" Unattened Upgrade: {{{
+syn keyword    aptconfUnattendedUpgrade contained
+       \ AutoFixInterruptedDpkg Automatic-Reboot InstallOnShutdown Mail
+       \ MailOnlyOnError MinimalSteps Origins-Pattern Package-Blacklist
+       \ Remove-Unused-Dependencies
+
+syn cluster    aptconfUnattendedUpgrade_ contains=aptconfUnattendedUpgrade
+" }}}
+
+syn case       match
+
+" Now put all the keywords (and 'valid' options) in a single cluster:
+syn cluster    aptconfOptions contains=aptconfRegexpOpt,
+       \ @aptconfAcquire_,@aptconfApt_,@aptconfAptitude_,@aptconfDebTags_,
+       \ @aptconfDebug_,@aptconfDir_,@aptconfDPkg_,@aptconfDSelect_,
+       \ @aptconfOrderList_,@aptconfPackageManager_,@aptconfPkgCacheGen_,
+       \ @aptconfQuiet_,@aptconfRpm_,@aptconfUnattendedUpgrade_
+
+" Syntax:
+syn match      aptconfSemiColon        ';'
+syn match      aptconfDoubleColon      '::'
+syn match      aptconfCurlyBraces      '[{}]'
+syn region     aptconfValue            start='"' end='"' oneline display
+syn region     aptconfInclude          matchgroup=aptconfOperator start='{' end='}' contains=ALLBUT,aptconfGroup,aptconfGroupIncomplete,@aptconfCommentSpecial
+syn region     aptconfInclude          matchgroup=aptconfOperator start='::' end='{'me=s-1 contains=@aptconfOptions,aptconfError display
+syn region     aptconfInclude          matchgroup=aptconfOperator start='::' end='::\|\s'me=s-1 oneline contains=@aptconfOptions,aptconfError display
+
+" Basic Syntax Errors: XXX avoid to generate false positives !!!
+"
+" * Invalid comment format (seems to not cause errors, but...):
+syn match      aptconfAsError          display '^#.*'
+"
+" * When a semicolon is missing after a double-quoted string:
+" There are some cases (for example in the Dir group of options, but not only)
+" where this syntax is valid. So we don't treat it as a strict error.
+syn match      aptconfAsError          display '"[^"]*"[^;]'me=e-1
+syn match      aptconfAsError          display '"[^"]*"$'
+"
+" * When double quotes are missing around a value (before a semicolon):
+" This omission has no effect if the value is a single string (without blank
+" characters). But apt.conf(5) says that quotes are required, and this item
+" avoids to match unquoted keywords.
+syn match      aptconfAsError          display '\s[^"[:blank:]]*[^}"];'me=e-1
+"
+" * When only one double quote is missing around a value (before a semicolon):
+" No comment for that: it must be highly visible.
+syn match      aptconfError            display '\(\s\|;\)"[^"[:blank:]]\+;'me=e-1
+syn match      aptconfError            display '\(\s\|;\)[^"[:blank:]]\+";'me=e-1
+"
+" * When space is missing between option and (quoted) value:
+" TODO (partially implemented)
+syn match      aptconfError            display '::[^[:blank:]]*"'
+
+" Special Actions:
+syn match      aptconfAction           '^#\(clear\|include\)\>'
+syn region     aptconfAction           matchgroup=aptconfAction start='^#clear\>' end=';'me=s-1 oneline contains=aptconfGroup,aptconfDoubleColon,@aptconfOptions
+syn region     aptconfAction           matchgroup=aptconfAction start='^#include\>' end=';'me=s-1 oneline contains=aptconfRegexpOpt
+
+" Comments:
+syn keyword    aptconfTodo             TODO FIXME NOTE XXX contained
+syn cluster    aptconfCommentSpecial   contains=@Spell,aptconfTodo
+syn match      aptconfComment          '//.*' contains=@aptconfCommentSpecial
+syn region     aptconfComment          start='/\*' end='\*/' contains=@aptconfCommentSpecial
+
+" Highlight Definitions:
+hi def link aptconfTodo                                Todo
+hi def link aptconfError                       Error
+hi def link aptconfComment                     Comment
+hi def link aptconfOperator                    Operator
+
+hi def link aptconfAction                      PreProc
+hi def link aptconfOption                      Type
+hi def link aptconfValue                       String
+hi def link aptconfRegexpOpt                   Normal
+hi def link aptconfAsError                     Special
+
+hi def link aptconfSemiColon                   aptconfOperator
+hi def link aptconfDoubleColon                 aptconfOperator
+hi def link aptconfCurlyBraces                 aptconfOperator
+
+hi def link aptconfGroupIncomplete             Special
+hi def link aptconfGroup                       aptconfOption
+
+hi def link aptconfAcquire                     aptconfOption
+hi def link aptconfAcquireCDROM                        aptconfOption
+hi def link aptconfAcquireCompressionTypes     aptconfOption
+hi def link aptconfAcquireFTP                  aptconfOption
+hi def link aptconfAcquireHTTP                 aptconfOption
+hi def link aptconfAcquireHTTPS                        aptconfOption
+hi def link aptconfAcquireMaxValidTime         aptconfOption
+hi def link aptconfAcquirePDiffs               aptconfOption
+
+hi def link aptconfApt                         aptconfOption
+hi def link aptconfAptAuthentication           aptconfOption
+hi def link aptconfAptAutoRemove               aptconfOption
+hi def link aptconfAptCache                    aptconfOption
+hi def link aptconfAptCDROM                    aptconfOption
+hi def link aptconfAptChangelogs               aptconfOption
+hi def link aptconfAptCompressor               aptconfOption
+hi def link aptconfAptCompressorAll            aptconfOption
+hi def link aptconfAptGet                      aptconfOption
+hi def link aptconfAptPeriodic                 aptconfOption
+hi def link aptconfAptUpdate                   aptconfOption
+
+hi def link aptconfAptitude                    aptconfOption
+hi def link aptconfAptitudeCmdline             aptconfOption
+hi def link aptconfAptitudeCmdlineProgress     aptconfOption
+hi def link aptconfAptitudeCmdlineSafeUpgrade  aptconfOption
+hi def link aptconfAptitudeLogging             aptconfOption
+hi def link aptconfAptitudeProblemResolver     aptconfOption
+hi def link aptconfAptitudeSafeResolver                aptconfOption
+hi def link aptconfAptitudeScreenshot          aptconfOption
+hi def link aptconfAptitudeSections            aptconfOption
+hi def link aptconfAptitudeUI                  aptconfOption
+hi def link aptconfAptitudeUIKeyBindings       aptconfOption
+hi def link aptconfAptitudeUIStyles            aptconfOption
+hi def link aptconfAptitudeUIStylesElements    aptconfOption
+
+hi def link aptconfDebTags                     aptconfOption
+
+hi def link aptconfDebug                       aptconfOption
+hi def link aptconfDebugAcquire                        aptconfOption
+hi def link aptconfDebugPkgAcquire             aptconfOption
+hi def link aptconfDebugPkgDepCache            aptconfOption
+hi def link aptconfDebugPkgProblemResolver     aptconfOption
+
+hi def link aptconfDir                         aptconfOption
+hi def link aptconfDirAptitude                 aptconfOption
+hi def link aptconfDirBin                      aptconfOption
+hi def link aptconfDirCache                    aptconfOption
+hi def link aptconfDirEtc                      aptconfOption
+hi def link aptconfDirLog                      aptconfOption
+hi def link aptconfDirMedia                    aptconfOption
+hi def link aptconfDirState                    aptconfOption
+
+hi def link aptconfDPkg                                aptconfOption
+hi def link aptconfDPkgTools                   aptconfOption
+
+hi def link aptconfDSelect                     aptconfOption
+
+hi def link aptconfOrderList                   aptconfOption
+hi def link aptconfOrderListScore              aptconfOption
+
+hi def link aptconfPackageManager              aptconfOption
+
+hi def link aptconfPkgCacheGen                 aptconfOption
+
+hi def link aptconfQuiet                       aptconfOption
+
+hi def link aptconfRpm                         aptconfOption
+
+hi def link aptconfUnattendedUpgrade           aptconfOption
+
+let b:current_syntax = "aptconf"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index c1faddb..8551198 100644 (file)
@@ -2,12 +2,15 @@
 " Language:      ART-IM and ART*Enterprise
 " Maintainer:    Dorai Sitaram <ds26@gte.com>
 " URL:          http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
-" Last Change:   Nov 6, 2002
+" Last Change:   2011 Dec 28 by Thilo Six
 
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 syn keyword artspform => and assert bind
@@ -42,3 +45,6 @@ hi def link artspform statement
 hi def link artvariable function
 
 let b:current_syntax = "art"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/syntax/asciidoc.vim b/runtime/syntax/asciidoc.vim
new file mode 100644 (file)
index 0000000..1303db7
--- /dev/null
@@ -0,0 +1,183 @@
+" Vim syntax file
+" Language:     AsciiDoc
+" Author:       Stuart Rackham <srackham@gmail.com> (inspired by Felix
+"               Obenhuber's original asciidoc.vim script).
+" URL:          http://asciidoc.org/
+" Licence:      GPL (http://www.gnu.org)
+" Remarks:      Vim 6 or greater
+" Limitations:
+" 
+" - Nested quoted text formatting is highlighted according to the outer
+"   format.
+" - If a closing Example Block delimiter may be mistaken for a title
+"   underline. A workaround is to insert a blank line before the closing
+"   delimiter.
+" - Lines within a paragraph starting with equals characters are
+"   highlighted as single-line titles.
+" - Lines within a paragraph beginning with a period are highlighted as
+"   block titles.
+
+
+if exists("b:current_syntax")
+  finish
+endif
+
+syn clear
+syn sync fromstart
+syn sync linebreaks=100
+
+" Run :help syn-priority to review syntax matching priority.
+syn keyword asciidocToDo TODO FIXME CHECK TEST XXX ZZZ DEPRECATED
+syn match asciidocBackslash /\\/
+syn region asciidocIdMarker start=/^\$Id:\s/ end=/\s\$$/
+syn match asciidocCallout /\\\@<!<\d\{1,2}>/
+syn match asciidocOpenBlockDelimiter /^--$/
+syn match asciidocLineBreak /[ \t]+$/ containedin=asciidocList
+syn match asciidocRuler /^'\{3,}$/
+syn match asciidocPagebreak /^<\{3,}$/
+syn match asciidocEntityRef /\\\@<!&[#a-zA-Z]\S\{-};/
+syn region asciidocLiteralParagraph start=/\(\%^\|\_^\s*\n\)\@<=\s\+\S\+/ end=/\(^\(+\|--\)\?\s*$\)\@=/ contains=asciidocToDo
+syn match asciidocURL /\\\@<!\<\(http\|https\|ftp\|file\|irc\):\/\/[^| \t]*\(\w\|\/\)/
+syn match asciidocEmail /[\\.:]\@<!\(\<\|<\)\w\(\w\|[.-]\)*@\(\w\|[.-]\)*\w>\?[0-9A-Za-z_]\@!/
+syn match asciidocAttributeRef /\\\@<!{\w\(\w\|[-,+]\)*\([=!@#$%?:].*\)\?}/
+
+" As a damage control measure quoted patterns always terminate at a blank
+" line (see 'Limitations' above).
+syn match asciidocQuotedAttributeList /\\\@<!\[[a-zA-Z0-9_-][a-zA-Z0-9 _-]*\][+_'`#*]\@=/
+syn match asciidocQuotedSubscript /\\\@<!\~\S\_.\{-}\(\~\|\n\s*\n\)/ contains=asciidocEntityRef
+syn match asciidocQuotedSuperscript /\\\@<!\^\S\_.\{-}\(\^\|\n\s*\n\)/ contains=asciidocEntityRef
+
+syn match asciidocQuotedMonospaced /\(^\|[| \t([.,=\]]\)\@<=+\([+ \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(+\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+syn match asciidocQuotedMonospaced2 /\(^\|[| \t([.,=\]]\)\@<=`\([` \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(`\([| \t)[\],.?!;:=]\|$\)\@=\)/
+syn match asciidocQuotedUnconstrainedMonospaced /[\\+]\@<!++\S\_.\{-}\(++\|\n\s*\n\)/ contains=asciidocEntityRef
+
+syn match asciidocQuotedEmphasized /\(^\|[| \t([.,=\]]\)\@<=_\([_ \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(_\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+syn match asciidocQuotedEmphasized2 /\(^\|[| \t([.,=\]]\)\@<='\([' \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\('\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+syn match asciidocQuotedUnconstrainedEmphasized /\\\@<!__\S\_.\{-}\(__\|\n\s*\n\)/ contains=asciidocEntityRef
+
+syn match asciidocQuotedBold /\(^\|[| \t([.,=\]]\)\@<=\*\([* \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(\*\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+syn match asciidocQuotedUnconstrainedBold /\\\@<!\*\*\S\_.\{-}\(\*\*\|\n\s*\n\)/ contains=asciidocEntityRef
+
+" Don't allow ` in single quoted (a kludge to stop confusion with `monospaced`).
+syn match asciidocQuotedSingleQuoted /\(^\|[| \t([.,=\]]\)\@<=`\([` \n\t]\)\@!\([^`]\|\n\(\s*\n\)\@!\)\{-}[^` \t]\('\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+
+syn match asciidocQuotedDoubleQuoted /\(^\|[| \t([.,=\]]\)\@<=``\([` \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(''\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+
+syn match asciidocDoubleDollarPassthrough /\\\@<!\(^\|[^0-9a-zA-Z$]\)\@<=\$\$..\{-}\(\$\$\([^0-9a-zA-Z$]\|$\)\@=\|^$\)/
+syn match asciidocTriplePlusPassthrough /\\\@<!\(^\|[^0-9a-zA-Z$]\)\@<=+++..\{-}\(+++\([^0-9a-zA-Z$]\|$\)\@=\|^$\)/
+
+syn match asciidocAdmonition /^\u\{3,15}:\(\s\+.*\)\@=/
+
+syn region asciidocTable_OLD start=/^\([`.']\d*[-~_]*\)\+[-~_]\+\d*$/ end=/^$/
+syn match asciidocBlockTitle /^\.[^. \t].*[^-~_]$/ contains=asciidocQuoted.*,asciidocAttributeRef
+syn match asciidocTitleUnderline /[-=~^+]\{2,}$/ transparent contained contains=NONE
+syn match asciidocOneLineTitle /^=\{1,5}\s\+\S.*$/ contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash
+syn match asciidocTwoLineTitle /^[^. +/].*[^.]\n[-=~^+]\{3,}$/ contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocTitleUnderline
+
+syn match asciidocAttributeList /^\[[^[ \t].*\]$/
+syn match asciidocQuoteBlockDelimiter /^_\{4,}$/
+syn match asciidocExampleBlockDelimiter /^=\{4,}$/
+syn match asciidocSidebarDelimiter /^*\{4,}$/
+
+" See http://vimdoc.sourceforge.net/htmldoc/usr_44.html for excluding region
+" contents from highlighting.
+syn match asciidocTablePrefix /\(\S\@<!\(\([0-9.]\+\)\([*+]\)\)\?\([<\^>.]\{,3}\)\?\([a-z]\)\?\)\?|/ containedin=asciidocTableBlock contained
+syn region asciidocTableBlock matchgroup=asciidocTableDelimiter start=/^|=\{3,}$/ end=/^|=\{3,}$/ keepend contains=ALL
+syn match asciidocTablePrefix /\(\S\@<!\(\([0-9.]\+\)\([*+]\)\)\?\([<\^>.]\{,3}\)\?\([a-z]\)\?\)\?!/ containedin=asciidocTableBlock contained
+syn region asciidocTableBlock2 matchgroup=asciidocTableDelimiter2 start=/^!=\{3,}$/ end=/^!=\{3,}$/ keepend contains=ALL
+
+syn match asciidocListContinuation /^+$/
+syn region asciidocLiteralBlock start=/^\.\{4,}$/ end=/^\.\{4,}$/ contains=asciidocCallout,asciidocToDo keepend
+syn region asciidocListingBlock start=/^-\{4,}$/ end=/^-\{4,}$/ contains=asciidocCallout,asciidocToDo keepend
+syn region asciidocCommentBlock start="^/\{4,}$" end="^/\{4,}$" contains=asciidocToDo
+syn region asciidocPassthroughBlock start="^+\{4,}$" end="^+\{4,}$"
+
+" Allowing leading \w characters in the filter delimiter is to accomodate
+" the pre version 8.2.7 syntax and may be removed in future releases.
+syn region asciidocFilterBlock start=/^\w*\~\{4,}$/ end=/^\w*\~\{4,}$/
+
+syn region asciidocMacroAttributes matchgroup=asciidocRefMacro start=/\\\@<!<<"\{-}\(\w\|-\|_\|:\|\.\)\+"\?,\?/ end=/\(>>\)\|^$/ contains=asciidocQuoted.* keepend
+syn region asciidocMacroAttributes matchgroup=asciidocAnchorMacro start=/\\\@<!\[\{2}\(\w\|-\|_\|:\|\.\)\+,\?/ end=/\]\{2}/ keepend
+syn region asciidocMacroAttributes matchgroup=asciidocAnchorMacro start=/\\\@<!\[\{3}\(\w\|-\|_\|:\|\.\)\+/ end=/\]\{3}/ keepend
+syn region asciidocMacroAttributes matchgroup=asciidocMacro start=/[\\0-9a-zA-Z]\@<!\w\(\w\|-\)*:\S\{-}\[/ skip=/\\\]/ end=/\]\|^$/ contains=asciidocQuoted.*,asciidocAttributeRef,asciidocEntityRef keepend
+" Highlight macro that starts with an attribute reference (a common idiom).
+syn region asciidocMacroAttributes matchgroup=asciidocMacro start=/\(\\\@<!{\w\(\w\|[-,+]\)*\([=!@#$%?:].*\)\?}\)\@<=\S\{-}\[/ skip=/\\\]/ end=/\]\|^$/ contains=asciidocQuoted.*,asciidocAttributeRef keepend
+syn region asciidocMacroAttributes matchgroup=asciidocIndexTerm start=/\\\@<!(\{2,3}/ end=/)\{2,3}/ contains=asciidocQuoted.*,asciidocAttributeRef keepend
+
+syn match asciidocCommentLine "^//\([^/].*\|\)$" contains=asciidocToDo
+
+syn region asciidocAttributeEntry start=/^:\w/ end=/:\(\s\|$\)/ oneline
+
+" Lists.
+syn match asciidocListBullet /^\s*\zs\(-\|\*\{1,5}\)\ze\s/
+syn match asciidocListNumber /^\s*\zs\(\(\d\+\.\)\|\.\{1,5}\|\(\a\.\)\|\([ivxIVX]\+)\)\)\ze\s\+/
+syn region asciidocListLabel start=/^\s*/ end=/\(:\{2,4}\|;;\)$/ oneline contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocToDo keepend
+" DEPRECATED: Horizontal label.
+syn region asciidocHLabel start=/^\s*/ end=/\(::\|;;\)\(\s\+\|\\$\)/ oneline contains=asciidocQuoted.*,asciidocMacroAttributes keepend
+" Starts with any of the above.
+syn region asciidocList start=/^\s*\(-\|\*\{1,5}\)\s/ start=/^\s*\(\(\d\+\.\)\|\.\{1,5}\|\(\a\.\)\|\([ivxIVX]\+)\)\)\s\+/ start=/.\+\(:\{2,4}\|;;\)$/ end=/\(^[=*]\{4,}$\)\@=/ end=/\(^\(+\|--\)\?\s*$\)\@=/ contains=asciidocList.\+,asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocCommentLine,asciidocAttributeList,asciidocToDo
+
+hi def link asciidocAdmonition Special
+hi def link asciidocAnchorMacro Macro
+hi def link asciidocAttributeEntry Special
+hi def link asciidocAttributeList Special
+hi def link asciidocAttributeMacro Macro
+hi def link asciidocAttributeRef Special
+hi def link asciidocBackslash Special
+hi def link asciidocBlockTitle Title
+hi def link asciidocCallout Label
+hi def link asciidocCommentBlock Comment
+hi def link asciidocCommentLine Comment
+hi def link asciidocDoubleDollarPassthrough Special
+hi def link asciidocEmail Macro
+hi def link asciidocEntityRef Special
+hi def link asciidocExampleBlockDelimiter Type
+hi def link asciidocFilterBlock Type
+hi def link asciidocHLabel Label
+hi def link asciidocIdMarker Special
+hi def link asciidocIndexTerm Macro
+hi def link asciidocLineBreak Special
+hi def link asciidocOpenBlockDelimiter Label
+hi def link asciidocListBullet Label
+hi def link asciidocListContinuation Label
+hi def link asciidocListingBlock Identifier
+hi def link asciidocListLabel Label
+hi def link asciidocListNumber Label
+hi def link asciidocLiteralBlock Identifier
+hi def link asciidocLiteralParagraph Identifier
+hi def link asciidocMacroAttributes Label
+hi def link asciidocMacro Macro
+hi def link asciidocOneLineTitle Title
+hi def link asciidocPagebreak Type
+hi def link asciidocPassthroughBlock Identifier
+hi def link asciidocQuoteBlockDelimiter Type
+hi def link asciidocQuotedAttributeList Special
+hi def link asciidocQuotedBold Special
+hi def link asciidocQuotedDoubleQuoted Label
+hi def link asciidocQuotedEmphasized2 Type
+hi def link asciidocQuotedEmphasized Type
+hi def link asciidocQuotedMonospaced2 Identifier
+hi def link asciidocQuotedMonospaced Identifier
+hi def link asciidocQuotedSingleQuoted Label
+hi def link asciidocQuotedSubscript Type
+hi def link asciidocQuotedSuperscript Type
+hi def link asciidocQuotedUnconstrainedBold Special
+hi def link asciidocQuotedUnconstrainedEmphasized Type
+hi def link asciidocQuotedUnconstrainedMonospaced Identifier
+hi def link asciidocRefMacro Macro
+hi def link asciidocRuler Type
+hi def link asciidocSidebarDelimiter Type
+hi def link asciidocTableBlock2 NONE
+hi def link asciidocTableBlock NONE
+hi def link asciidocTableDelimiter2 Label
+hi def link asciidocTableDelimiter Label
+hi def link asciidocTable_OLD Type
+hi def link asciidocTablePrefix2 Label
+hi def link asciidocTablePrefix Label
+hi def link asciidocToDo Todo
+hi def link asciidocTriplePlusPassthrough Special
+hi def link asciidocTwoLineTitle Title
+hi def link asciidocURL Macro
+let b:current_syntax = "asciidoc"
+
+" vim: wrap et sw=2 sts=2:
index 6b8ce1e..f208245 100644 (file)
@@ -3,7 +3,7 @@
 " Maintainer:  Erik Wognsen <erik.wognsen@gmail.com>
 "              Previous maintainer:
 "              Kevin Dahlhausen <kdahlhaus@yahoo.com>
-" Last Change: 2010 Apr 18
+" Last Change: 2012 Apr 09
 
 " Thanks to Ori Avtalion for feedback on the comment markers!
 
@@ -15,6 +15,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 " storage types
@@ -40,7 +43,7 @@ syn match asmIdentifier               "[a-z_][a-z0-9_]*"
 " Various #'s as defined by GAS ref manual sec 3.6.2.1
 " Technically, the first decNumber def is actually octal,
 " since the value of 0-7 octal is the same as 0-7 decimal,
-" I prefer to map it as decimal:
+" I (Kevin) prefer to map it as decimal:
 syn match decNumber            "0\+[1-7]\=[\t\n$,; ]"
 syn match decNumber            "[1-9]\d*"
 syn match octNumber            "0[0-7][0-7]\+"
@@ -49,14 +52,39 @@ syn match binNumber         "0[bB][0-1]*"
 
 syn keyword asmTodo            contained TODO
 
-" GAS supports various comment markers as described here:
-" http://sourceware.org/binutils/docs-2.19/as/Comments.html
-" I have commented out the ARM comment marker "@" by default as I think more
-" people are using "@" with the .type directive. See
-" http://sourceware.org/binutils/docs-2.19/as/Type.html
+
+" GAS supports one type of multi line comments:
 syn region asmComment          start="/\*" end="\*/" contains=asmTodo
+
+" GAS (undocumentedly?) supports C++ style comments. Unlike in C/C++ however,
+" a backslash ending a C++ style comment does not extend the comment to the
+" next line (hence the syntax region does not define 'skip="\\$"')
+syn region asmComment          start="//" end="$" keepend contains=asmTodo
+
+" Line comment characters depend on the target architecture and command line
+" options and some comments may double as logical line number directives or
+" preprocessor commands. This situation is described at
+" http://sourceware.org/binutils/docs-2.22/as/Comments.html
+" Some line comment characters have other meanings for other targets. For
+" example, .type directives may use the `@' character which is also an ARM
+" comment marker.
+" As a compromise to accommodate what I arbitrarily assume to be the most
+" frequently used features of the most popular architectures (and also the
+" non-GNU assembly languages that use this syntax file because their asm files
+" are also named *.asm), the following are used as line comment characters:
 syn match asmComment           "[#;!|].*" contains=asmTodo
-" syn match asmComment         "@.*" contains=asmTodo
+
+" Side effects of this include:
+" - When `;' is used to separate statements on the same line (many targets
+"   support this), all statements except the first get highlighted as
+"   comments. As a remedy, remove `;' from the above.
+" - ARM comments are not highlighted correctly. For ARM, uncomment the
+"   following two lines and comment the one above.
+"syn match asmComment          "@.*" contains=asmTodo
+"syn match asmComment          "^#.*" contains=asmTodo
+
+" Advanced users of specific architectures will probably want to change the
+" comment highlighting or use a specific, more comprehensive syntax file.
 
 syn match asmInclude           "\.include"
 syn match asmCond              "\.if"
@@ -97,7 +125,7 @@ if version >= 508 || !exists("did_asm_syntax_inits")
   HiLink octNumber     Number
   HiLink binNumber     Number
 
-  HiLink asmIdentifier Identifier
+  HiLink asmIdentifier Identifier
   HiLink asmType       Type
 
   delcommand HiLink
@@ -105,4 +133,7 @@ endif
 
 let b:current_syntax = "asm"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
index 9fc3d24..28c8efb 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    ASN.1
 " Maintainer:  Claudio Fleiner <claudio@fleiner.com>
 " URL:         http://www.fleiner.com/vim/syntax/asn.vim
-" Last Change: 2001 Apr 26
+" Last Change: 2012 Oct 05
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " keyword definitions
 syn keyword asnExternal                DEFINITIONS BEGIN END IMPORTS EXPORTS FROM
 syn match   asnExternal                "\<IMPLICIT\s\+TAGS\>"
@@ -76,6 +79,8 @@ if version >= 508 || !exists("did_asn_syn_inits")
   delcommand HiLink
 endif
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 let b:current_syntax = "asn"
 
 " vim: ts=8
index 47210f5..1b9ab74 100644 (file)
@@ -6,6 +6,15 @@
 " Script URL:  http://www.vim.org/scripts/script.php?script_id=1239
 " ChangeLog:   Please visit the script URL for detailed change information
 
+" Quit when a syntax file was already loaded.
+if exists("b:current_syntax")
+  finish
+endif
+let s:keepcpo= &cpo
+set cpo&vim
+
+let b:current_syntax = "autoit"
+
 " AutoIt is not case dependent
 syn case ignore
 
@@ -1108,4 +1117,8 @@ hi def link autoitOption Type
 hi def link autoitStyle Type
 hi def link autoitConst Type
 hi def link autoitSend Type
+
 syn sync minlines=50
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 02ed74f..eea2a9f 100644 (file)
@@ -2,8 +2,8 @@
 " Language:    automake Makefile.am
 " Maintainer:   Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainer:   John Williams <jrw@pobox.com>
-" Last Change: 2007-10-14
-" URL: http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/syntax/automake.vim;hb=debian
+" Last Change: 2011-06-13
+" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/automake.vim
 "
 " XXX This file is in need of a new maintainer, Debian VIM Maintainers maintain
 "     it only because patches have been submitted for it by Debian users and the
 " when they are used in an inappropriate place, such as in defining
 " EXTRA_SOURCES.
 
+" Standard syntax initialization
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
 
 " Read the Makefile syntax to start with
 if version < 600
@@ -25,27 +31,28 @@ else
   runtime! syntax/make.vim
 endif
 
-syn match automakePrimary "^[A-Za-z0-9_]\+\(_PROGRAMS\|LIBRARIES\|_LIST\|_SCRIPTS\|_DATA\|_HEADERS\|_MANS\|_TEXINFOS\|_JAVA\|_LTLIBRARIES\)\s*="me=e-1
-syn match automakePrimary "^TESTS\s*="me=e-1
-syn match automakeSecondary "^[A-Za-z0-9_]\+\(_SOURCES\|_LDADD\|_LIBADD\|_LDFLAGS\|_DEPENDENCIES\|_CPPFLAGS\)\s*="me=e-1
-syn match automakeSecondary "^OMIT_DEPENDENCIES\s*="me=e-1
-syn match automakeExtra "^EXTRA_[A-Za-z0-9_]\+\s*="me=e-1
-syn match automakeOptions "^\(AUTOMAKE_OPTIONS\|ETAGS_ARGS\|TAGS_DEPENDENCIES\)\s*="me=e-1
-syn match automakeClean "^\(MOSTLY\|DIST\|MAINTAINER\)\=CLEANFILES\s*="me=e-1
-syn match automakeSubdirs "^\(DIST_\)\=SUBDIRS\s*="me=e-1
-syn match automakeConditional "^\(if\s*[a-zA-Z0-9_]\+\|else\|endif\)\s*$"
+syn match automakePrimary "^\w\+\(_PROGRAMS\|_LIBRARIES\|_LISP\|_PYTHON\|_JAVA\|_SCRIPTS\|_DATA\|_HEADERS\|_MANS\|_TEXINFOS\|_LTLIBRARIES\)\s*\ze+\=="
+syn match automakePrimary "^TESTS\s*\ze+\=="me=e-1
+syn match automakeSecondary "^\w\+\(_SOURCES\|_LIBADD\|_LDADD\|_LDFLAGS\|_DEPENDENCIES\|_AR\|_CCASFLAGS\|_CFLAGS\|_CPPFLAGS\|_CXXFLAGS\|_FCFLAGS\|_FFLAGS\|_GCJFLAGS\|_LFLAGS\|_LIBTOOLFLAGS\|OBJCFLAGS\|RFLAGS\|UPCFLAGS\|YFLAGS\)\s*\ze+\=="
+syn match automakeSecondary "^\(LDADD\|ARFLAGS\|OMIT_DEPENDENCIES\|AM_MAKEFLAGS\|\(AM_\)\=\(MAKEINFOFLAGS\|RUNTESTDEFAULTFLAGS\|ETAGSFLAGS\|CTAGSFLAGS\|JAVACFLAGS\)\)\s*\ze+\=="
+syn match automakeExtra "^EXTRA_\w\+\s*\ze+\=="
+syn match automakeOptions "^\(ACLOCAL_AMFLAGS\|AUTOMAKE_OPTIONS\|DISTCHECK_CONFIGURE_FLAGS\|ETAGS_ARGS\|TAGS_DEPENDENCIES\)\s*\ze+\=="
+syn match automakeClean "^\(MOSTLY\|DIST\|MAINTAINER\)\=CLEANFILES\s*\ze+\=="
+syn match automakeSubdirs "^\(DIST_\)\=SUBDIRS\s*\ze+\=="
+syn match automakeConditional "^\(if\s*!\=\w\+\|else\|endif\)\s*$"
 
-syn match automakeSubst     "@[a-zA-Z0-9_]\+@"
-syn match automakeSubst     "^\s*@[a-zA-Z0-9_]\+@"
+syn match automakeSubst     "@\w\+@"
+syn match automakeSubst     "^\s*@\w\+@"
 syn match automakeComment1 "#.*$" contains=automakeSubst
 syn match automakeComment2 "##.*$"
 
 syn match automakeMakeError "$[{(][^})]*[^a-zA-Z0-9_})][^})]*[})]" " GNU make function call
+syn match automakeMakeError "^AM_LDADD\s*\ze+\==" " Common mistake
 
-syn region automakeNoSubst start="^EXTRA_[a-zA-Z0-9_]*\s*=" end="$" contains=ALLBUT,automakeNoSubst transparent
-syn region automakeNoSubst start="^DIST_SUBDIRS\s*=" end="$" contains=ALLBUT,automakeNoSubst transparent
-syn region automakeNoSubst start="^[a-zA-Z0-9_]*_SOURCES\s*=" end="$" contains=ALLBUT,automakeNoSubst transparent
-syn match automakeBadSubst  "@\([a-zA-Z0-9_]*@\=\)\=" contained
+syn region automakeNoSubst start="^EXTRA_\w*\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent
+syn region automakeNoSubst start="^DIST_SUBDIRS\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent
+syn region automakeNoSubst start="^\w*_SOURCES\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent
+syn match automakeBadSubst  "@\(\w*@\=\)\=" contained
 
 syn region  automakeMakeDString start=+"+  skip=+\\"+  end=+"+  contains=makeIdent,automakeSubstitution
 syn region  automakeMakeSString start=+'+  skip=+\\'+  end=+'+  contains=makeIdent,automakeSubstitution
index 8c1f182..f80a582 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    awk, nawk, gawk, mawk
-" Maintainer:  Antonio Colombo <azc10@yahoo.com>
-" Last Change: 2005 Mar 16
+" Maintainer:  Antonio Colombo <azc100@gmail.com>
+" Last Change: 2012 May 18
 
 " AWK  ref.  is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger
 " The AWK Programming Language, Addison-Wesley, 1988
@@ -25,6 +25,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " A bunch of useful Awk keywords
 " AWK  ref. p. 188
 syn keyword awkStatement       break continue delete exit
@@ -87,7 +90,7 @@ syn match   awkRegExp contained "[?.*{}|+]"
 
 " String and Character constants
 " Highlight special characters (those which have a backslash) differently
-syn region  awkString  start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=awkSpecialCharacter,awkSpecialPrintf
+syn region  awkString  start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=@Spell,awkSpecialCharacter,awkSpecialPrintf
 syn match   awkSpecialCharacter contained "\\."
 
 " Some of these combinations may seem weird, but they work.
@@ -129,7 +132,7 @@ syn case match
 " Put this above those to override them.
 " Put this in a 'match "\<printf\=\>.*;\="' to make it not override
 " less/greater than (most of the time), but it won't work yet because
-" keywords allways have precedence over match & region.
+" keywords always have precedence over match & region.
 " File I/O: (print foo, bar > "filename") & for nawk (getline < "filename")
 "syn match  awkFileIO          contained ">"
 "syn match  awkFileIO          contained "<"
@@ -138,7 +141,7 @@ syn case match
 syn match  awkSemicolon        ";"
 syn match  awkComma            ","
 
-syn match  awkComment  "#.*" contains=awkTodo
+syn match  awkComment  "#.*" contains=@Spell,awkTodo
 
 syn match  awkLineSkip "\\$"
 
@@ -155,7 +158,7 @@ syn sync ccomment awkArray maxlines=10
 
 " define the default highlighting
 " For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlightling yet
+" For version 5.8 and later: only when an item doesn't have highlighting yet
 if version >= 508 || !exists("did_awk_syn_inits")
   if version < 508
     let did_awk_syn_inits = 1
@@ -213,4 +216,7 @@ endif
 
 let b:current_syntax = "awk"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
index be91e2f..fedd0e8 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    AYacc
 " Maintainer:  Mathieu Clabaut <mathieu.clabaut@free.fr>
-" LastChange:  02 May 2001
+" LastChange:  2011 Dec 25
 " Original:    Yacc, maintained by Dr. Charles E. Campbell, Jr.
 " Comment:          Replaced sourcing c.vim file by ada.vim and rename yacc*
 "              in ayacc*
@@ -22,6 +22,9 @@ else
    unlet b:current_syntax
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Clusters
 syn cluster    ayaccActionGroup        contains=ayaccDelim,cInParen,cTodo,cIncluded,ayaccDelim,ayaccCurlyError,ayaccUnionCurly,ayaccUnion,cUserLabel,cOctalZero,cCppOut2,cCppSkip,cErrInBracket,cErrInParen,cOctalError
 syn cluster    ayaccUnionGroup contains=ayaccKey,cComment,ayaccCurly,cType,cStructure,cStorageClass,ayaccUnionCurly
@@ -83,4 +86,6 @@ endif
 
 let b:current_syntax = "ayacc"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=15
index ee50017..c72032d 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    BASIC
 " Maintainer:  Allan Kelly <allan@fruitloaf.co.uk>
-" Last Change: Tue Sep 14 14:24:23 BST 1999
+" Last Change:  2011 Dec 25 by Thilo Six
 
 " First version based on Micro$soft QBASIC circa 1989, as documented in
 " 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
@@ -16,6 +16,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " A bunch of useful BASIC keywords
 syn keyword basicStatement     BEEP beep Beep BLOAD bload Bload BSAVE bsave Bsave
 syn keyword basicStatement     CALL call Call ABSOLUTE absolute Absolute
@@ -171,4 +174,6 @@ endif
 
 let b:current_syntax = "basic"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index dcfaf48..965afc3 100644 (file)
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:    bc - An arbitrary precision calculator language
 " Maintainer:  Vladimir Scholtz <vlado@gjh.sk>
-" Last change: 2001 Sep 02
+" Last change: 2012 Jun 01
+"              (Dominique Pelle added @Spell)
 " Available on:        www.gjh.sk/~vlado/bc.vim
 
 " For version 5.x: Clear all syntax items
@@ -31,14 +32,14 @@ syn keyword bcConstant BC_ENV_ARGS BC_LINE_LENGTH
 syn match bcIdentifier         "[a-z_][a-z0-9_]*"
 
 " String
- syn match bcString            "\"[^"]*\""
+ syn match bcString            "\"[^"]*\"" contains=@Spell
 
 " Number
 syn match bcNumber             "[0-9]\+"
 
 " Comment
-syn match bcComment            "\#.*"
-syn region bcComment           start="/\*" end="\*/"
+syn match bcComment            "\#.*" contains=@Spell
+syn region bcComment           start="/\*" end="\*/" contains=@Spell
 
 " Parent ()
 syn cluster bcAll contains=bcList,bcIdentifier,bcNumber,bcKeyword,bcType,bcConstant,bcString,bcParentError
index 0cd534d..3743fb0 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    BibTeX (bibliographic database format for (La)TeX)
 " Maintainer:  Bernd Feige <Bernd.Feige@gmx.net>
 " Filenames:   *.bib
-" Last Change: Aug 02, 2005
+" Last Change: 2011 Dec 25
 
 " Thanks to those who pointed out problems with this file or supplied fixes!
 
@@ -16,6 +16,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Ignore case
 syn case ignore
 
@@ -34,6 +37,8 @@ syn keyword bibEntryKw contained      number organization pages publisher
 syn keyword bibEntryKw contained       school series title type volume year
 " Non-standard:
 syn keyword bibNSEntryKw contained     abstract isbn issn keywords url
+" AMS mref http://www.ams.org/mref
+syn keyword bibNSEntryKw contained     mrclass mrnumber mrreviewer fjournal coden
 
 " Clusters
 " ========
@@ -55,11 +60,11 @@ syn region bibEntryData contained start=/[{(]/ms=e+1 end=/[})]/me=e-1 contains=b
 " Actually, 5.8 <= Vim < 6.0 would ignore the `fold' keyword anyway, but Vim<5.8 would produce
 " an error, so we explicitly distinguish versions with and without folding functionality:
 if version < 600
-  syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent contains=bibType,bibEntryData nextgroup=bibComment
+  syn region bibEntry start=/@\S\+\s*[{(]/ end=/^\s*[})]/ transparent contains=bibType,bibEntryData nextgroup=bibComment
 else
-  syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent fold contains=bibType,bibEntryData nextgroup=bibComment
+  syn region bibEntry start=/@\S\+\s*[{(]/ end=/^\s*[})]/ transparent fold contains=bibType,bibEntryData nextgroup=bibComment
 endif
-syn region bibComment2 start=/@Comment[{(]/ end=/^\s*@/me=e-1 contains=@bibCommentContents nextgroup=bibEntry
+syn region bibComment2 start=/@Comment\s*[{(]/ end=/^\s*[})]/me=e-1 contains=@bibCommentContents nextgroup=bibEntry
 
 " Synchronization
 " ===============
@@ -91,3 +96,6 @@ if version >= 508 || !exists("did_bib_syn_inits")
 endif
 
 let b:current_syntax = "bib"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 8db83f9..d599a85 100644 (file)
@@ -1,13 +1,13 @@
 " Vim syntax file
-" Language:     BIND zone files (RFC1035)
+" Language:     BIND zone files (RFC 1035)
 " Maintainer:   Julian Mehnle <julian@mehnle.net>
 " URL:          http://www.mehnle.net/source/odds+ends/vim/syntax/
-" Last Change:  Thu 2006-04-20 12:30:45 UTC
+" Last Change:  Thu 2011-07-16 20:42:00 UTC
 " 
 " Based on an earlier version by Ð’ÑчеÑлав Ð“орбанев (Slava Gorbanev), with
 " heavy modifications.
 " 
-" $Id: bindzone.vim,v 1.2 2006/04/20 22:06:21 vimboss Exp $
+" $Id: bindzone.vim 12 2011-07-16 21:09:57Z julian $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -23,7 +23,7 @@ syn case match
 syn region      zoneRRecord     start=/^/ end=/$/ contains=zoneOwnerName,zoneSpecial,zoneTTL,zoneClass,zoneRRType,zoneComment,zoneUnknown
 
 syn match       zoneDirective   /^\$ORIGIN\s\+/   nextgroup=zoneOrigin,zoneUnknown
-syn match       zoneDirective   /^\$TTL\s\+/      nextgroup=zoneNumber,zoneUnknown
+syn match       zoneDirective   /^\$TTL\s\+/      nextgroup=zoneTTL,zoneUnknown
 syn match       zoneDirective   /^\$INCLUDE\s\+/  nextgroup=zoneText,zoneUnknown
 syn match       zoneDirective   /^\$GENERATE\s/
 
@@ -34,9 +34,9 @@ syn match       zoneOrigin      contained  /[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\
 syn match       zoneDomain      contained  /[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\^`{|}~]\+\(\s\|;\|$\)\@=/
 
 syn match       zoneSpecial     contained /^[@*.]\s/
-syn match       zoneTTL         contained /\<\d[0-9HhWwDd]*\>/  nextgroup=zoneClass,zoneRRType skipwhite
-syn keyword     zoneClass       contained IN CHAOS              nextgroup=zoneRRType,zoneTTL   skipwhite
-syn keyword     zoneRRType      contained A AAAA CNAME HINFO MX NS PTR SOA SRV TXT nextgroup=zoneRData skipwhite
+syn match       zoneTTL         contained /\s\@<=\d[0-9WwDdHhMmSs]*\(\s\|$\)\@=/ nextgroup=zoneClass,zoneRRType skipwhite
+syn keyword     zoneClass       contained IN CHAOS nextgroup=zoneRRType,zoneTTL skipwhite
+syn keyword     zoneRRType      contained A AAAA CNAME DNAME HINFO MX NS PTR SOA SRV TXT SPF nextgroup=zoneRData skipwhite
 syn match       zoneRData       contained /[^;]*/ contains=zoneDomain,zoneIPAddr,zoneIP6Addr,zoneText,zoneNumber,zoneParen,zoneUnknown
 
 syn match       zoneIPAddr      contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\>/
@@ -66,7 +66,7 @@ syn match       zoneNumber      contained /\<[0-9]\+\(\s\|;\|$\)\@=/
 syn match       zoneSerial      contained /\<[0-9]\{9,10}\(\s\|;\|$\)\@=/
 
 syn match       zoneErrParen    /)/
-syn region      zoneParen       contained start="(" end=")" contains=zoneSerial,zoneNumber,zoneComment
+syn region      zoneParen       contained start="(" end=")" contains=zoneSerial,zoneTTL,zoneNumber,zoneComment
 syn match       zoneComment     /;.*/
 
 " Define the default highlighting.
index 8554339..60251c9 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:     Blank 1.4.1
 " Maintainer:   Rafal M. Sulejman <unefunge@friko2.onet.pl>
-" Last change:  21 Jul 2000
+" Last change:  2011 Dec 28 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 " Blank instructions
@@ -43,4 +46,7 @@ if version >= 508 || !exists("did_blank_syntax_inits")
 endif
 
 let b:current_syntax = "blank"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index 82ab1d8..ef5445b 100644 (file)
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:     Bazaar (bzr) commit file
-" Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
-" URL:          http://www.hlabs.spb.ru/vim/bzr.vim
-" Last Change:  2009-01-27
+" Maintainer:   Dmitry Vasiliev <dima at hlabs dot org>
+" URL:          https://github.com/hdima/vim-scripts/blob/master/syntax/bzr.vim
+" Last Change:  2012-02-11
 " Filenames:    bzr_log.*
-" Version:      1.2.1
+" Version:      1.2.2
 "
 " Thanks:
 "
index a0b94ae..7a58ae7 100644 (file)
@@ -1,13 +1,18 @@
 " Vim syntax file
 " Language:    C
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2009 Nov 17
+" Last Change: 2013 Jul 05
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
+let s:ft = matchstr(&ft, '^\([^.]\)\+')
+
 " A bunch of useful C keywords
 syn keyword    cStatement      goto break return continue asm
 syn keyword    cLabel          case default
@@ -18,7 +23,7 @@ syn keyword   cTodo           contained TODO FIXME XXX
 
 " It's easy to accidentally add a space after a backslash that was intended
 " for line continuation.  Some compilers allow it, which makes it
-" unpredicatable and should be avoided.
+" unpredictable and should be avoided.
 syn match      cBadContinuation contained "\\\s\+$"
 
 " cCommentGroup allows adding matches for special things in comments
@@ -31,9 +36,15 @@ if !exists("c_no_utf")
   syn match    cSpecial        display contained "\\\(u\x\{4}\|U\x\{8}\)"
 endif
 if exists("c_no_cformat")
-  syn region   cString         start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell
+  syn region   cString         start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend
   " cCppString: same as cString, but ends at end of line
-  syn region   cCppString      start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell
+  if !exists("cpp_no_cpp11") " ISO C++11
+    syn region cCppString      start=+\(L\|u\|u8\|U\|R\|LR\|u8R\|uR\|UR\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
+  else
+    syn region cCppString      start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
+  endif
+  syn region   cCppOut2        contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip
+  syn region   cCppSkip        contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip
 else
   if !exists("c_no_c99") " ISO C99
     syn match  cFormat         display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
@@ -41,7 +52,7 @@ else
     syn match  cFormat         display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
   endif
   syn match    cFormat         display "%%" contained
-  syn region   cString         start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell
+  syn region   cString         start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend
   " cCppString: same as cString, but ends at end of line
   syn region   cCppString      start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
 endif
@@ -59,6 +70,25 @@ syn match    cSpecialCharacter display "L\='\\\o\{1,3}'"
 syn match      cSpecialCharacter display "'\\x\x\{1,2}'"
 syn match      cSpecialCharacter display "L'\\x\x\+'"
 
+if !exists("c_no_c11") " ISO C11
+  if exists("c_no_cformat")
+    syn region cString         start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend
+  else
+    syn region cString         start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend
+  endif
+  syn match    cCharacter      "[Uu]'[^\\]'"
+  syn match    cCharacter      "[Uu]'[^']*'" contains=cSpecial
+  if exists("c_gnu")
+    syn match  cSpecialError   "[Uu]'\\[^'\"?\\abefnrtv]'"
+    syn match  cSpecialCharacter "[Uu]'\\['\"?\\abefnrtv]'"
+  else
+    syn match  cSpecialError   "[Uu]'\\[^'\"?\\abfnrtv]'"
+    syn match  cSpecialCharacter "[Uu]'\\['\"?\\abfnrtv]'"
+  endif
+  syn match    cSpecialCharacter display "[Uu]'\\\o\{1,3}'"
+  syn match    cSpecialCharacter display "[Uu]'\\x\x\+'"
+endif
+
 "when wanted, highlight trailing white space
 if exists("c_space_errors")
   if !exists("c_no_trail_space_error")
@@ -71,40 +101,69 @@ endif
 
 " This should be before cErrInParen to avoid problems with #define ({ xxx })
 if exists("c_curly_error")
-  syntax match cCurlyError "}"
-  syntax region        cBlock          start="{" end="}" contains=ALLBUT,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
+  syn match cCurlyError "}"
+  syn region   cBlock          start="{" end="}" contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
 else
-  syntax region        cBlock          start="{" end="}" transparent fold
+  syn region   cBlock          start="{" end="}" transparent fold
 endif
 
 "catch errors caused by wrong parenthesis and brackets
 " also accept <% for {, %> for }, <: for [ and :> for ] (C99)
 " But avoid matching <::.
-syn cluster    cParenGroup     contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
+syn cluster    cParenGroup     contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
 if exists("c_no_curly_error")
-  syn region   cParen          transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
-  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
-  syn region   cCppParen       transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
-  syn match    cParenError     display ")"
-  syn match    cErrInParen     display contained "^[{}]\|^<%\|^%>"
+  if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
+    syn region cParen          transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region cCppParen       transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+    syn match  cParenError     display ")"
+    syn match  cErrInParen     display contained "^^<%\|^%>"
+  else
+    syn region cParen          transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region cCppParen       transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+    syn match  cParenError     display ")"
+    syn match  cErrInParen     display contained "^[{}]\|^<%\|^%>"
+  endif
 elseif exists("c_no_bracket_error")
-  syn region   cParen          transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
-  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
-  syn region   cCppParen       transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
-  syn match    cParenError     display ")"
-  syn match    cErrInParen     display contained "[{}]\|<%\|%>"
+  if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
+    syn region cParen          transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region cCppParen       transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+    syn match  cParenError     display ")"
+    syn match  cErrInParen     display contained "<%\|%>"
+  else
+    syn region cParen          transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region cCppParen       transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+    syn match  cParenError     display ")"
+    syn match  cErrInParen     display contained "[{}]\|<%\|%>"
+  endif
 else
-  syn region   cParen          transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
-  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
-  syn region   cCppParen       transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
-  syn match    cParenError     display "[\])]"
-  syn match    cErrInParen     display contained "[\]{}]\|<%\|%>"
-  syn region   cBracket        transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
+  if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
+    syn region cParen          transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region cCppParen       transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
+    syn match  cParenError     display "[\])]"
+    syn match  cErrInParen     display contained "<%\|%>"
+    syn region cBracket        transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
+  else
+    syn region cParen          transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region cCppParen       transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
+    syn match  cParenError     display "[\])]"
+    syn match  cErrInParen     display contained "[\]{}]\|<%\|%>"
+    syn region cBracket        transparent start='\[\|<::\@!' end=']\|:>' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
+  endif
   " cCppBracket: same as cParen but ends at end-of-line; used in cDefine
   syn region   cCppBracket     transparent start='\[\|<::\@!' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell
   syn match    cErrInBracket   display contained "[);{}]\|<%\|%>"
 endif
 
+if s:ft ==# 'c' || exists("cpp_no_cpp11")
+  syn region   cBadBlock       keepend start="{" end="}" contained containedin=cParen,cBracket,cBadBlock transparent fold
+endif
+
 "integer number, or floating point number without a dot and with "f".
 syn case ignore
 syn match      cNumbers        display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal
@@ -140,16 +199,16 @@ if exists("c_comment_strings")
   " need to use a special type of cString: cCommentString, which also ends on
   " "*/", and sees a "*" at the start of the line as comment again.
   " Unfortunately this doesn't very well work for // type of comments :-(
-  syntax match cCommentSkip    contained "^\s*\*\($\|\s\+\)"
-  syntax region cCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip
-  syntax region cComment2String        contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial
-  syntax region  cCommentL     start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell
+  syn match    cCommentSkip    contained "^\s*\*\($\|\s\+\)"
+  syn region cCommentString    contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip
+  syn region cComment2String   contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial
+  syn region  cCommentL        start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell
   if exists("c_no_comment_fold")
     " Use "extend" here to have preprocessor lines not terminate halfway a
     " comment.
-    syntax region cComment     matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend
+    syn region cComment        matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend
   else
-    syntax region cComment     matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend
+    syn region cComment        matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend
   endif
 else
   syn region   cCommentL       start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cSpaceError,@Spell
@@ -160,8 +219,8 @@ else
   endif
 endif
 " keep a // comment separately, it terminates a preproc. conditional
-syntax match   cCommentError   display "\*/"
-syntax match   cCommentStartError display "/\*"me=e-1 contained
+syn match      cCommentError   display "\*/"
+syn match      cCommentStartError display "/\*"me=e-1 contained
 
 syn keyword    cOperator       sizeof
 if exists("c_gnu")
@@ -176,7 +235,7 @@ if !exists("c_no_ansi") || exists("c_ansi_typedefs")
   syn keyword   cType          mbstate_t wctrans_t wint_t wctype_t
 endif
 if !exists("c_no_c99") " ISO C99
-  syn keyword  cType           bool complex
+  syn keyword  cType           _Bool bool _Complex complex _Imaginary imaginary
   syn keyword  cType           int8_t int16_t int32_t int64_t
   syn keyword  cType           uint8_t uint16_t uint32_t uint64_t
   syn keyword  cType           int_least8_t int_least16_t int_least32_t int_least64_t
@@ -198,6 +257,16 @@ endif
 if !exists("c_no_c99")
   syn keyword  cStorageClass   inline restrict
 endif
+if !exists("c_no_c11")
+  syn keyword  cStorageClass   _Alignas alignas
+  syn keyword  cOperator       _Alignof alignof
+  syn keyword  cStorageClass   _Atomic
+  syn keyword  cOperator       _Generic
+  syn keyword  cStorageClass   _Noreturn noreturn
+  syn keyword  cOperator       _Static_assert static_assert
+  syn keyword  cStorageClass   _Thread_local thread_local
+  syn keyword   cType          char16_t char32_t
+endif
 
 if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu")
   if exists("c_gnu")
@@ -270,28 +339,42 @@ if !exists("c_no_c99") " ISO C99
 endif
 
 " Accept %: for # (C99)
-syn region      cPreCondit      start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$"  keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
-syn match      cPreCondit      display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
+syn region     cPreCondit      start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
+syn match      cPreConditMatch display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
 if !exists("c_no_if0")
+  syn cluster  cCppOutInGroup  contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip
+  syn region   cCppOutWrapper  start="^\s*\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse,@NoSpell fold
+  syn region   cCppOutIf       contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse
   if !exists("c_no_if0_fold")
-    syn region cCppOut         start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2 fold
+    syn region cCppOutIf2      contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold
   else
-    syn region cCppOut         start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2
+    syn region cCppOutIf2      contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell
   endif
-  syn region   cCppOut2        contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip
-  syn region   cCppSkip        contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip
+  syn region   cCppOutElse     contained matchgroup=cCppOutWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit
+  syn region   cCppInWrapper   start="^\s*\(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\($\|//\|/\*\||\)" end=".\@=\|$" contains=cCppInIf,cCppInElse fold
+  syn region   cCppInIf        contained matchgroup=cCppInWrapper start="\d\+" end="^\s*\(%:\|#\)\s*endif\>" contains=TOP,cPreCondit
+  if !exists("c_no_if0_fold")
+    syn region cCppInElse      contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold
+  else
+    syn region cCppInElse      contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2
+  endif
+  syn region   cCppInElse2     contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)\([^/]\|/[^/*]\)*" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell
+  syn region   cCppOutSkip     contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppOutSkip
+  syn region   cCppInSkip      contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(if\s\+\(\d\+\s*\($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" containedin=cCppOutElse,cCppInIf,cCppInSkip contains=TOP,cPreProc
 endif
 syn region     cIncluded       display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
 syn match      cIncluded       display contained "<[^>]*>"
 syn match      cInclude        display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
 "syn match cLineSkip   "\\$"
-syn cluster    cPreProcGroup   contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti
+syn cluster    cPreProcGroup   contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti,cBadBlock
 syn region     cDefine         start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
 syn region     cPreProc        start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
 
 " Highlight User Labels
-syn cluster    cMultiGroup     contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
-syn region     cMulti          transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
+syn cluster    cMultiGroup     contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
+if s:ft ==# 'c' || exists("cpp_no_cpp11")
+  syn region   cMulti          transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
+endif
 " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
 syn cluster    cLabelGroup     contains=cUserLabel
 syn match      cUserCont       display "^\s*\I\i*\s*:$" contains=@cLabelGroup
@@ -354,6 +437,9 @@ hi def link cDefine         Macro
 hi def link cIncluded          cString
 hi def link cError             Error
 hi def link cStatement         Statement
+hi def link cCppInWrapper      cCppOutWrapper
+hi def link cCppOutWrapper     cPreCondit
+hi def link cPreConditMatch    cPreCondit
 hi def link cPreCondit         PreCondit
 hi def link cType              Type
 hi def link cConstant          Constant
@@ -365,10 +451,16 @@ hi def link cComment              Comment
 hi def link cSpecial           SpecialChar
 hi def link cTodo              Todo
 hi def link cBadContinuation   Error
-hi def link cCppSkip           cCppOut
-hi def link cCppOut2           cCppOut
+hi def link cCppOutSkip                cCppOutIf2
+hi def link cCppInElse2                cCppOutIf2
+hi def link cCppOutIf2         cCppOut2  " Old syntax group for #if 0 body
+hi def link cCppOut2           cCppOut  " Old syntax group for #if of #if 0
 hi def link cCppOut            Comment
 
 let b:current_syntax = "c"
 
+unlet s:ft
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index c6e8b29..b82fb26 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    Good old CFG files
 " Maintainer:  Igor N. Prischepoff (igor@tyumbit.ru, pri_igor@mail.ru)
-" Last change: 2001 Sep 02
+" Last change: 2012 Aug 11
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -18,7 +18,7 @@ syn match UncPath "\\\\\p*" contained
 "Dos Drive:\Path
 syn match CfgDirectory "[a-zA-Z]:\\\p*" contained
 "Parameters
-syn match   CfgParams    ".*="me=e-1 contains=CfgComment
+syn match   CfgParams    ".\{0}="me=e-1 contains=CfgComment
 "... and their values (don't want to highlight '=' sign)
 syn match   CfgValues    "=.*"hs=s+1 contains=CfgDirectory,UncPath,CfgComment,CfgString,CfgOnOff
 
index b278eca..41c045f 100644 (file)
@@ -1,9 +1,14 @@
 " Vim syntax file
-" Language:    cl ("Clever Language" by Multibase, http://www.mbase.com.au)
-" Filename extensions: *.ent, *.eni
-" Maintainer:  Philip Uren <philuSPAX@ieee.org> - Remove SPAX spam block
-" Last update: Wed Apr 12 08:47:18 EST 2006
-" $Id: cl.vim,v 1.3 2006/04/12 21:43:28 vimboss Exp $
+" Language:            CL
+"                      (pronounced alphabetically: "Cee-El".
+"                      CL stands for Clever Language,
+"                      but the language is CL, not "Clever".
+"                      CL was created by Multibase, http://www.mbase.com.au)
+" Filename extensions: *.ent
+"                      *.eni
+" Maintainer:          Philip Uren     <philuSPAX@ieee.org> Remove SPAX spam block
+" Version:              6
+" Last Change:         Mar 06 2013
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -14,9 +19,9 @@ elseif exists("b:current_syntax")
 endif
 
 if version >= 600
-       setlocal iskeyword=@,48-57,_,-,
+       setlocal iskeyword=@,48-57,_,-
 else
-       set iskeyword=@,48-57,_,-,
+       set iskeyword=@,48-57,_,-
 endif
 
 syn case ignore
@@ -24,12 +29,12 @@ syn case ignore
 syn sync lines=300
 
 "If/else/elsif/endif and while/wend mismatch errors
-syn match      clifError               "\<wend\>"
-syn match      clifError               "\<elsif\>"
-syn match      clifError               "\<else\>"
-syn match      clifError               "\<endif\>"
+syn match      clifError       "\<wend\>"
+syn match      clifError       "\<elsif\>"
+syn match      clifError       "\<else\>"
+syn match      clifError       "\<endif\>"
 
-syn match      clSpaceError            "\s\+$"
+syn match      clSpaceError    "\s\+$"
 
 " If and while regions
 syn region     clLoop          transparent matchgroup=clWhile start="\<while\>" matchgroup=clWhile end="\<wend\>" contains=ALLBUT,clBreak,clProcedure
@@ -40,7 +45,7 @@ syn keyword   clTodo          contained       TODO BUG DEBUG FIX
 syn match      clNeedsWork     contained       "NEED[S]*\s\s*WORK"
 syn keyword    clDebug         contained       debug
 
-syn match      clComment       "#.*$"          contains=clTodo,clNeedsWork
+syn match      clComment       "#.*$"          contains=clTodo,clNeedsWork,@Spell
 syn region     clProcedure     oneline         start="^\s*[{}]" end="$"
 syn match      clInclude       "^\s*include\s.*"
 
@@ -60,8 +65,8 @@ syn match     clOperator      "[!;|)(:.><+*=-]"
 
 syn match      clNumber        "\<\d\+\(u\=l\=\|lu\|f\)\>"
 
-syn region     clString        matchgroup=clQuote      start=+"+ end=+"+       skip=+\\"+
-syn region     clString        matchgroup=clQuote      start=+'+ end=+'+       skip=+\\'+
+syn region     clString        matchgroup=clQuote      start=+"+ end=+"+       skip=+\\"+ contains=@Spell
+syn region     clString        matchgroup=clQuote      start=+'+ end=+'+       skip=+\\'+ contains=@Spell
 
 syn keyword    clReserved      ERROR EXIT INTERRUPT LOCKED LREPLY MODE MCOL MLINE MREPLY NULL REPLY V1 V2 V3 V4 V5 V6 V7 V8 V9 ZERO BYPASS GOING_BACK AAUTO ABORT ABORT ALIGN BIGE CONVERT FNUM GOBACK HANGUP JUSTIFY NEXIT OUTPUT RAUTO RAWDISPLAY RAWPRINT REPEAT SKIP TAB TRIM LCOUNT PCOUNT PLINES SLINES SCOLS MATCH LMATCH
 
index 233ecbd..11aa028 100644 (file)
@@ -2,7 +2,7 @@
 " Language:            Clean
 " Author:              Pieter van Engelen <pietere@sci.kun.nl>
 " Co-Author:   Arthur van Leeuwen <arthurvl@sci.kun.nl>
-" Last Change: Fri Sep 29 11:35:34 CEST 2000
+" Last Change: 2013 Jun 19 by Jurriën Stutterheim
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,10 +12,12 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Some Clean-keywords
 syn keyword cleanConditional if case
 syn keyword cleanLabel let! with where in of
-syn keyword cleanInclude from import
 syn keyword cleanSpecial Start
 syn keyword cleanKeyword infixl infixr infix
 syn keyword cleanBasicType Int Real Char Bool String
@@ -23,6 +25,10 @@ syn keyword cleanSpecialType World ProcId Void Files File
 syn keyword cleanModuleSystem module implementation definition system
 syn keyword cleanTypeClass class instance export
 
+" Import highlighting
+syn region cleanIncludeRegion start="^\s*\(from\|import\|\s\+\(as\|qualified\)\)" end="\n" contains=cleanIncludeKeyword keepend
+syn keyword cleanIncludeKeyword contained from import as qualified
+
 " To do some Denotation Highlighting
 syn keyword cleanBoolDenot True False
 syn region  cleanStringDenot start=+"+ end=+"+
@@ -71,7 +77,7 @@ if version >= 508 || !exists("did_clean_syntax_init")
    HiLink cleanLabel           Label
    HiLink cleanKeyword      Keyword
    " Generic Preprocessing
-   HiLink cleanInclude      Include
+   HiLink cleanIncludeKeyword      Include
    HiLink cleanModuleSystem PreProc
    " Type
    HiLink cleanBasicType    Type
@@ -91,4 +97,6 @@ endif
 
 let b:current_syntax = "clean"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=4
index 989b257..1a10a2d 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    Clipper 5.2 & FlagShip
 " Maintainer:  C R Zamana <zamana@zip.net>
 " Some things based on c.vim by Bram Moolenaar and pascal.vim by Mario Eusebio
-" Last Change: Sat Sep 09 2000
+" Last Change: 2011 Dec 29 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Exceptions for my "Very Own" (TM) user variables naming style.
 " If you don't like this, comment it
 syn match  clipperUserVariable "\<[a,b,c,d,l,n,o,u,x][A-Z][A-Za-z0-9_]*\>"
@@ -140,4 +143,6 @@ endif
 
 let b:current_syntax = "clipper"
 
-" vim: ts=4
+let &cpo = s:cpo_save
+unlet s:cpo_save
+" vim: ts=8
diff --git a/runtime/syntax/clojure.vim b/runtime/syntax/clojure.vim
new file mode 100644 (file)
index 0000000..3108148
--- /dev/null
@@ -0,0 +1,134 @@
+" Vim syntax file
+" Language:     Clojure
+" Authors:      Toralf Wittner <toralf.wittner@gmail.com>
+"               modified by Meikel Brandmeyer <mb@kotka.de>
+" URL:          http://kotka.de/projects/clojure/vimclojure.html
+"
+" Maintainer:   Sung Pae <self@sungpae.com>
+" URL:          https://github.com/guns/vim-clojure-static
+" License:      Same as Vim
+" Last Change:  05 February 2013
+
+if version < 600
+    syntax clear
+elseif exists("b:current_syntax")
+    finish
+endif
+
+setlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$
+
+" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-002/vim_clojure_static.clj
+" Clojure 1.5.0-RC6
+syntax keyword clojureConstant nil
+syntax keyword clojureBoolean false true
+syntax keyword clojureSpecial . catch clojure.core/fn clojure.core/let clojure.core/loop def do finally fn if let loop monitor-enter monitor-exit new quote recur set! throw try var
+syntax keyword clojureException catch finally throw try
+syntax keyword clojureCond case clojure.core/case clojure.core/cond clojure.core/cond-> clojure.core/cond->> clojure.core/condp clojure.core/if-let clojure.core/if-not clojure.core/when clojure.core/when-first clojure.core/when-let clojure.core/when-not cond cond-> cond->> condp if-let if-not when when-first when-let when-not
+syntax keyword clojureRepeat clojure.core/doall clojure.core/dorun clojure.core/doseq clojure.core/dotimes clojure.core/while doall dorun doseq dotimes while
+syntax keyword clojureDefine clojure.core/definline clojure.core/definterface clojure.core/defmacro clojure.core/defmethod clojure.core/defmulti clojure.core/defn clojure.core/defn- clojure.core/defonce clojure.core/defprotocol clojure.core/defrecord clojure.core/defstruct clojure.core/deftype definline definterface defmacro defmethod defmulti defn defn- defonce defprotocol defrecord defstruct deftype
+syntax keyword clojureMacro -> ->> .. amap and areduce as-> assert binding bound-fn clojure.core/-> clojure.core/->> clojure.core/.. clojure.core/amap clojure.core/and clojure.core/areduce clojure.core/as-> clojure.core/assert clojure.core/binding clojure.core/bound-fn clojure.core/comment clojure.core/declare clojure.core/delay clojure.core/dosync clojure.core/doto clojure.core/extend-protocol clojure.core/extend-type clojure.core/for clojure.core/future clojure.core/gen-class clojure.core/gen-interface clojure.core/import clojure.core/io! clojure.core/lazy-cat clojure.core/lazy-seq clojure.core/letfn clojure.core/locking clojure.core/memfn clojure.core/ns clojure.core/or clojure.core/proxy clojure.core/proxy-super clojure.core/pvalues clojure.core/refer-clojure clojure.core/reify clojure.core/some-> clojure.core/some->> clojure.core/sync clojure.core/time clojure.core/with-bindings clojure.core/with-in-str clojure.core/with-loading-context clojure.core/with-local-vars clojure.core/with-open clojure.core/with-out-str clojure.core/with-precision clojure.core/with-redefs comment declare delay dosync doto extend-protocol extend-type for future gen-class gen-interface import io! lazy-cat lazy-seq letfn locking memfn ns or proxy proxy-super pvalues refer-clojure reify some-> some->> sync time with-bindings with-in-str with-loading-context with-local-vars with-open with-out-str with-precision with-redefs
+syntax keyword clojureFunc * *' + +' - -' ->ArrayChunk ->Vec ->VecNode ->VecSeq -cache-protocol-fn -reset-methods / < <= = == > >= accessor aclone add-classpath add-watch agent agent-error agent-errors aget alength alias all-ns alter alter-meta! alter-var-root ancestors apply array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint biginteger bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn* bound? butlast byte byte-array bytes cast char char-array char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version clojure.core/* clojure.core/*' clojure.core/+ clojure.core/+' clojure.core/- clojure.core/-' clojure.core/->ArrayChunk clojure.core/->Vec clojure.core/->VecNode clojure.core/->VecSeq clojure.core/-cache-protocol-fn clojure.core/-reset-methods clojure.core// clojure.core/< clojure.core/<= clojure.core/= clojure.core/== clojure.core/> clojure.core/>= clojure.core/accessor clojure.core/aclone clojure.core/add-classpath clojure.core/add-watch clojure.core/agent clojure.core/agent-error clojure.core/agent-errors clojure.core/aget clojure.core/alength clojure.core/alias clojure.core/all-ns clojure.core/alter clojure.core/alter-meta! clojure.core/alter-var-root clojure.core/ancestors clojure.core/apply clojure.core/array-map clojure.core/aset clojure.core/aset-boolean clojure.core/aset-byte clojure.core/aset-char clojure.core/aset-double clojure.core/aset-float clojure.core/aset-int clojure.core/aset-long clojure.core/aset-short clojure.core/assoc clojure.core/assoc! clojure.core/assoc-in clojure.core/associative? clojure.core/atom clojure.core/await clojure.core/await-for clojure.core/await1 clojure.core/bases clojure.core/bean clojure.core/bigdec clojure.core/bigint clojure.core/biginteger clojure.core/bit-and clojure.core/bit-and-not clojure.core/bit-clear clojure.core/bit-flip clojure.core/bit-not clojure.core/bit-or clojure.core/bit-set clojure.core/bit-shift-left clojure.core/bit-shift-right clojure.core/bit-test clojure.core/bit-xor clojure.core/boolean clojure.core/boolean-array clojure.core/booleans clojure.core/bound-fn* clojure.core/bound? clojure.core/butlast clojure.core/byte clojure.core/byte-array clojure.core/bytes clojure.core/cast clojure.core/char clojure.core/char-array clojure.core/char? clojure.core/chars clojure.core/chunk clojure.core/chunk-append clojure.core/chunk-buffer clojure.core/chunk-cons clojure.core/chunk-first clojure.core/chunk-next clojure.core/chunk-rest clojure.core/chunked-seq? clojure.core/class clojure.core/class? clojure.core/clear-agent-errors clojure.core/clojure-version clojure.core/coll? clojure.core/commute clojure.core/comp clojure.core/comparator clojure.core/compare clojure.core/compare-and-set! clojure.core/compile clojure.core/complement clojure.core/concat clojure.core/conj clojure.core/conj! clojure.core/cons clojure.core/constantly clojure.core/construct-proxy clojure.core/contains? clojure.core/count clojure.core/counted? clojure.core/create-ns clojure.core/create-struct clojure.core/cycle clojure.core/dec clojure.core/dec' clojure.core/decimal? clojure.core/delay? clojure.core/deliver clojure.core/denominator clojure.core/deref clojure.core/derive clojure.core/descendants clojure.core/destructure clojure.core/disj clojure.core/disj! clojure.core/dissoc clojure.core/dissoc! clojure.core/distinct clojure.core/distinct? clojure.core/double clojure.core/double-array clojure.core/doubles clojure.core/drop clojure.core/drop-last clojure.core/drop-while clojure.core/empty clojure.core/empty? clojure.core/ensure clojure.core/enumeration-seq clojure.core/error-handler clojure.core/error-mode clojure.core/eval clojure.core/even? clojure.core/every-pred clojure.core/every? clojure.core/ex-data clojure.core/ex-info clojure.core/extend clojure.core/extenders clojure.core/extends? clojure.core/false? clojure.core/ffirst clojure.core/file-seq clojure.core/filter clojure.core/filterv clojure.core/find clojure.core/find-keyword clojure.core/find-ns clojure.core/find-protocol-impl clojure.core/find-protocol-method clojure.core/find-var clojure.core/first clojure.core/flatten clojure.core/float clojure.core/float-array clojure.core/float? clojure.core/floats clojure.core/flush clojure.core/fn? clojure.core/fnext clojure.core/fnil clojure.core/force clojure.core/format clojure.core/frequencies clojure.core/future-call clojure.core/future-cancel clojure.core/future-cancelled? clojure.core/future-done? clojure.core/future? clojure.core/gensym clojure.core/get clojure.core/get-in clojure.core/get-method clojure.core/get-proxy-class clojure.core/get-thread-bindings clojure.core/get-validator clojure.core/group-by clojure.core/hash clojure.core/hash-combine clojure.core/hash-map clojure.core/hash-set clojure.core/identical? clojure.core/identity clojure.core/ifn? clojure.core/in-ns clojure.core/inc clojure.core/inc' clojure.core/init-proxy clojure.core/instance? clojure.core/int clojure.core/int-array clojure.core/integer? clojure.core/interleave clojure.core/intern clojure.core/interpose clojure.core/into clojure.core/into-array clojure.core/ints clojure.core/isa? clojure.core/iterate clojure.core/iterator-seq clojure.core/juxt clojure.core/keep clojure.core/keep-indexed clojure.core/key clojure.core/keys clojure.core/keyword clojure.core/keyword? clojure.core/last clojure.core/line-seq clojure.core/list clojure.core/list* clojure.core/list? clojure.core/load clojure.core/load-file clojure.core/load-reader clojure.core/load-string clojure.core/loaded-libs clojure.core/long clojure.core/long-array clojure.core/longs clojure.core/macroexpand clojure.core/macroexpand-1 clojure.core/make-array clojure.core/make-hierarchy clojure.core/map clojure.core/map-indexed clojure.core/map? clojure.core/mapcat clojure.core/mapv clojure.core/max clojure.core/max-key clojure.core/memoize clojure.core/merge clojure.core/merge-with clojure.core/meta clojure.core/method-sig clojure.core/methods clojure.core/min clojure.core/min-key clojure.core/mod clojure.core/munge clojure.core/name clojure.core/namespace clojure.core/namespace-munge clojure.core/neg? clojure.core/newline clojure.core/next clojure.core/nfirst clojure.core/nil? clojure.core/nnext clojure.core/not clojure.core/not-any? clojure.core/not-empty clojure.core/not-every? clojure.core/not= clojure.core/ns-aliases clojure.core/ns-imports clojure.core/ns-interns clojure.core/ns-map clojure.core/ns-name clojure.core/ns-publics clojure.core/ns-refers clojure.core/ns-resolve clojure.core/ns-unalias clojure.core/ns-unmap clojure.core/nth clojure.core/nthnext clojure.core/nthrest clojure.core/num clojure.core/number? clojure.core/numerator clojure.core/object-array clojure.core/odd? clojure.core/parents clojure.core/partial clojure.core/partition clojure.core/partition-all clojure.core/partition-by clojure.core/pcalls clojure.core/peek clojure.core/persistent! clojure.core/pmap clojure.core/pop clojure.core/pop! clojure.core/pop-thread-bindings clojure.core/pos? clojure.core/pr clojure.core/pr-str clojure.core/prefer-method clojure.core/prefers clojure.core/print clojure.core/print-ctor clojure.core/print-simple clojure.core/print-str clojure.core/printf clojure.core/println clojure.core/println-str clojure.core/prn clojure.core/prn-str clojure.core/promise clojure.core/proxy-call-with-super clojure.core/proxy-mappings clojure.core/proxy-name clojure.core/push-thread-bindings clojure.core/quot clojure.core/rand clojure.core/rand-int clojure.core/rand-nth clojure.core/range clojure.core/ratio? clojure.core/rational? clojure.core/rationalize clojure.core/re-find clojure.core/re-groups clojure.core/re-matcher clojure.core/re-matches clojure.core/re-pattern clojure.core/re-seq clojure.core/read clojure.core/read-line clojure.core/read-string clojure.core/realized? clojure.core/reduce clojure.core/reduce-kv clojure.core/reduced clojure.core/reduced? clojure.core/reductions clojure.core/ref clojure.core/ref-history-count clojure.core/ref-max-history clojure.core/ref-min-history clojure.core/ref-set clojure.core/refer clojure.core/release-pending-sends clojure.core/rem clojure.core/remove clojure.core/remove-all-methods clojure.core/remove-method clojure.core/remove-ns clojure.core/remove-watch clojure.core/repeat clojure.core/repeatedly clojure.core/replace clojure.core/replicate clojure.core/require clojure.core/reset! clojure.core/reset-meta! clojure.core/resolve clojure.core/rest clojure.core/restart-agent clojure.core/resultset-seq clojure.core/reverse clojure.core/reversible? clojure.core/rseq clojure.core/rsubseq clojure.core/satisfies? clojure.core/second clojure.core/select-keys clojure.core/send clojure.core/send-off clojure.core/send-via clojure.core/seq clojure.core/seq? clojure.core/seque clojure.core/sequence clojure.core/sequential? clojure.core/set clojure.core/set-agent-send-executor! clojure.core/set-agent-send-off-executor! clojure.core/set-error-handler! clojure.core/set-error-mode! clojure.core/set-validator! clojure.core/set? clojure.core/short clojure.core/short-array clojure.core/shorts clojure.core/shuffle clojure.core/shutdown-agents clojure.core/slurp clojure.core/some clojure.core/some-fn clojure.core/sort clojure.core/sort-by clojure.core/sorted-map clojure.core/sorted-map-by clojure.core/sorted-set clojure.core/sorted-set-by clojure.core/sorted? clojure.core/special-symbol? clojure.core/spit clojure.core/split-at clojure.core/split-with clojure.core/str clojure.core/string? clojure.core/struct clojure.core/struct-map clojure.core/subs clojure.core/subseq clojure.core/subvec clojure.core/supers clojure.core/swap! clojure.core/symbol clojure.core/symbol? clojure.core/take clojure.core/take-last clojure.core/take-nth clojure.core/take-while clojure.core/test clojure.core/the-ns clojure.core/thread-bound? clojure.core/to-array clojure.core/to-array-2d clojure.core/trampoline clojure.core/transient clojure.core/tree-seq clojure.core/true? clojure.core/type clojure.core/unchecked-add clojure.core/unchecked-add-int clojure.core/unchecked-byte clojure.core/unchecked-char clojure.core/unchecked-dec clojure.core/unchecked-dec-int clojure.core/unchecked-divide-int clojure.core/unchecked-double clojure.core/unchecked-float clojure.core/unchecked-inc clojure.core/unchecked-inc-int clojure.core/unchecked-int clojure.core/unchecked-long clojure.core/unchecked-multiply clojure.core/unchecked-multiply-int clojure.core/unchecked-negate clojure.core/unchecked-negate-int clojure.core/unchecked-remainder-int clojure.core/unchecked-short clojure.core/unchecked-subtract clojure.core/unchecked-subtract-int clojure.core/underive clojure.core/update-in clojure.core/update-proxy clojure.core/use clojure.core/val clojure.core/vals clojure.core/var-get clojure.core/var-set clojure.core/var? clojure.core/vary-meta clojure.core/vec clojure.core/vector clojure.core/vector-of clojure.core/vector? clojure.core/with-bindings* clojure.core/with-meta clojure.core/with-redefs-fn clojure.core/xml-seq clojure.core/zero? clojure.core/zipmap coll? commute comp comparator compare compare-and-set! compile complement concat conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec dec' decimal? delay? deliver denominator deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq error-handler error-mode eval even? every-pred every? ex-data ex-info extend extenders extends? false? ffirst file-seq filter filterv find find-keyword find-ns find-protocol-impl find-protocol-method find-var first flatten float float-array float? floats flush fn? fnext fnil force format frequencies future-call future-cancel future-cancelled? future-done? future? gensym get get-in get-method get-proxy-class get-thread-bindings get-validator group-by hash hash-combine hash-map hash-set identical? identity ifn? in-ns inc inc' init-proxy instance? int int-array integer? interleave intern interpose into into-array ints isa? iterate iterator-seq juxt keep keep-indexed key keys keyword keyword? last line-seq list list* list? load load-file load-reader load-string loaded-libs long long-array longs macroexpand macroexpand-1 make-array make-hierarchy map map-indexed map? mapcat mapv max max-key memoize merge merge-with meta method-sig methods min min-key mod munge name namespace namespace-munge neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext nthrest num number? numerator object-array odd? parents partial partition partition-all partition-by pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers print print-ctor print-simple print-str printf println println-str prn prn-str promise proxy-call-with-super proxy-mappings proxy-name push-thread-bindings quot rand rand-int rand-nth range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string realized? reduce reduce-kv reduced reduced? reductions ref ref-history-count ref-max-history ref-min-history ref-set refer release-pending-sends rem remove remove-all-methods remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest restart-agent resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off send-via seq seq? seque sequence sequential? set set-agent-send-executor! set-agent-send-off-executor! set-error-handler! set-error-mode! set-validator! set? short short-array shorts shuffle shutdown-agents slurp some some-fn sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-symbol? spit split-at split-with str string? struct struct-map subs subseq subvec supers swap! symbol symbol? take take-last take-nth take-while test the-ns thread-bound? to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-add-int unchecked-byte unchecked-char unchecked-dec unchecked-dec-int unchecked-divide-int unchecked-double unchecked-float unchecked-inc unchecked-inc-int unchecked-int unchecked-long unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int unchecked-remainder-int unchecked-short unchecked-subtract unchecked-subtract-int underive update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector-of vector? with-bindings* with-meta with-redefs-fn xml-seq zero? zipmap
+syntax keyword clojureVariable *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *compiler-options* *data-readers* *default-data-reader-fn* *e *err* *file* *flush-on-newline* *fn-loader* *in* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *read-whitelist* *source-path* *unchecked-math* *use-context-classloader* *verbose-defrecords* *warn-on-reflection* EMPTY-NODE char-escape-string char-name-string clojure.core/*1 clojure.core/*2 clojure.core/*3 clojure.core/*agent* clojure.core/*allow-unresolved-vars* clojure.core/*assert* clojure.core/*clojure-version* clojure.core/*command-line-args* clojure.core/*compile-files* clojure.core/*compile-path* clojure.core/*compiler-options* clojure.core/*data-readers* clojure.core/*default-data-reader-fn* clojure.core/*e clojure.core/*err* clojure.core/*file* clojure.core/*flush-on-newline* clojure.core/*fn-loader* clojure.core/*in* clojure.core/*math-context* clojure.core/*ns* clojure.core/*out* clojure.core/*print-dup* clojure.core/*print-length* clojure.core/*print-level* clojure.core/*print-meta* clojure.core/*print-readably* clojure.core/*read-eval* clojure.core/*read-whitelist* clojure.core/*source-path* clojure.core/*unchecked-math* clojure.core/*use-context-classloader* clojure.core/*verbose-defrecords* clojure.core/*warn-on-reflection* clojure.core/EMPTY-NODE clojure.core/char-escape-string clojure.core/char-name-string clojure.core/default-data-readers clojure.core/primitives-classnames clojure.core/print-dup clojure.core/print-method clojure.core/unquote clojure.core/unquote-splicing default-data-readers primitives-classnames print-dup print-method unquote unquote-splicing
+
+" Keywords are symbols:
+"   static Pattern symbolPat = Pattern.compile("[:]?([\\D&&[^/]].*/)?([\\D&&[^/]][^/]*)");
+" But they:
+"   * Must not end in a : or /
+"   * Must not have two adjacent colons except at the beginning
+"   * Must not contain any reader metacharacters except for ' and #
+syntax match clojureKeyword "\v:{1,2}%([^ \n\r\t()\[\]{}";@^`~\\%/]+/)*[^ \n\r\t()\[\]{}";@^`~\\%/]+:@<!"
+
+syntax region clojureString start=/L\="/ skip=/\\\\\|\\"/ end=/"/
+
+syntax match clojureCharacter "\\."
+syntax match clojureCharacter "\\o[0-7]\{3\}"
+syntax match clojureCharacter "\\u[0-9]\{4\}"
+syntax match clojureCharacter "\\space"
+syntax match clojureCharacter "\\tab"
+syntax match clojureCharacter "\\newline"
+syntax match clojureCharacter "\\return"
+syntax match clojureCharacter "\\backspace"
+syntax match clojureCharacter "\\formfeed"
+
+let s:radixChars = "0123456789abcdefghijklmnopqrstuvwxyz"
+for s:radix in range(2, 36)
+    execute 'syntax match clojureNumber "\c\<-\?' . s:radix . 'r[' . strpart(s:radixChars, 0, s:radix) . ']\+\>"'
+endfor
+unlet! s:radixChars s:radix
+
+syntax match clojureNumber "\<-\=[0-9]\+\(\.[0-9]*\)\=\(M\|\([eE][-+]\?[0-9]\+\)\)\?\>"
+syntax match clojureNumber "\<-\=[0-9]\+N\?\>"
+syntax match clojureNumber "\<-\=0x[0-9a-fA-F]\+\>"
+syntax match clojureNumber "\<-\=[0-9]\+/[0-9]\+\>"
+
+syntax match clojureVarArg "&"
+
+syntax match clojureQuote "'"
+syntax match clojureQuote "`"
+syntax match clojureUnquote "\~"
+syntax match clojureUnquote "\~@"
+syntax match clojureMeta "\^"
+syntax match clojureDeref "@"
+syntax match clojureAnonArg "%\(\d\|&\)\?"
+syntax match clojureDispatch "\v#[\^\'\=\<]?"
+
+syntax region clojureRegexp start=/L\=\#"/ skip=/\\\\\|\\"/ end=/"/
+
+syntax match clojureComment ";.*$" contains=clojureTodo,@Spell
+syntax match clojureComment "#!.*$"
+syntax match clojureComment "#_"
+
+syntax keyword clojureTodo contained FIXME XXX TODO FIXME: XXX: TODO:
+
+syntax region clojureSexp   matchgroup=clojureParen start="("  matchgroup=clojureParen end=")"  contains=TOP,@Spell
+syntax region clojureVector matchgroup=clojureParen start="\[" matchgroup=clojureParen end="\]" contains=TOP,@Spell
+syntax region clojureMap    matchgroup=clojureParen start="{"  matchgroup=clojureParen end="}"  contains=TOP,@Spell
+
+" Highlight superfluous closing parens, brackets and braces.
+syntax match clojureError "]\|}\|)"
+
+syntax sync fromstart
+
+if version >= 600
+    command -nargs=+ HiLink highlight default link <args>
+else
+    command -nargs=+ HiLink highlight link <args>
+endif
+
+HiLink clojureConstant  Constant
+HiLink clojureBoolean   Boolean
+HiLink clojureCharacter Character
+HiLink clojureKeyword   Keyword
+HiLink clojureNumber    Number
+HiLink clojureString    String
+HiLink clojureRegexp    Constant
+
+HiLink clojureVariable  Identifier
+HiLink clojureCond      Conditional
+HiLink clojureDefine    Define
+HiLink clojureException Exception
+HiLink clojureFunc      Function
+HiLink clojureMacro     Macro
+HiLink clojureRepeat    Repeat
+
+HiLink clojureSpecial   Special
+HiLink clojureVarArg    Special
+HiLink clojureQuote     SpecialChar
+HiLink clojureUnquote   SpecialChar
+HiLink clojureMeta      SpecialChar
+HiLink clojureDeref     SpecialChar
+HiLink clojureAnonArg   SpecialChar
+HiLink clojureDispatch  SpecialChar
+
+HiLink clojureComment   Comment
+HiLink clojureTodo      Todo
+
+HiLink clojureError     Error
+
+HiLink clojureParen     Delimiter
+
+delcommand HiLink
+
+let b:current_syntax = "clojure"
+
+" vim:sts=4 sw=4 et:
index d6e8cb4..8e54d51 100644 (file)
@@ -4,7 +4,8 @@
 " Language:     CMake
 " Author:       Andy Cedilnik <andy.cedilnik@kitware.com>
 " Maintainer:   Karthik Krishnan <karthik.krishnan@kitware.com>
-" Last Change:  $Date: 2008-08-25 14:31:28 $
+" Last Change:  2012 Jun 01
+"              (Dominique Pelle added @Spell)
 " Version:      $Revision: 1.10 $
 "
 " Licence:      The CMake license applies to this file. See
@@ -18,10 +19,12 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case ignore
 syn match cmakeEscaped /\(\\\\\|\\"\|\\n\|\\t\)/ contained
-syn region cmakeComment start="#" end="$" contains=cmakeTodo
+syn region cmakeComment start="#" end="$" contains=@Spell,cmakeTodo
 syn region cmakeRegistry start=/\[/ end=/]/
             \ contained oneline contains=CONTAINED,cmakeTodo,cmakeEscaped
 syn region cmakeVariableValue start=/\${/ end=/}/
@@ -78,4 +81,7 @@ endif
 
 let b:current_syntax = "cmake"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 "EOF"
index feb89ee..ec95020 100644 (file)
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:    C++
-" Maintainer:  Ken Shan <ccshan@post.harvard.edu>
-" Last Change: 2002 Jul 15
+" Current Maintainer:  vim-jp (https://github.com/vim-jp/cpp-vim)
+" Previous Maintainer: Ken Shan <ccshan@post.harvard.edu>
+" Last Change: 2012 Jun 14
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -19,7 +20,7 @@ else
   unlet b:current_syntax
 endif
 
-" C++ extentions
+" C++ extensions
 syn keyword cppStatement       new delete this friend using
 syn keyword cppAccess          public protected private
 syn keyword cppType            inline virtual explicit export bool wchar_t
@@ -30,9 +31,16 @@ syn match cppCast            "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
 syn match cppCast              "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
 syn keyword cppStorageClass    mutable
 syn keyword cppStructure       class typename template namespace
-syn keyword cppNumber          NPOS
 syn keyword cppBoolean         true false
 
+" C++ 11 extensions
+if !exists("cpp_no_cpp11")
+  syn keyword cppType          override final
+  syn keyword cppExceptions    noexcept
+  syn keyword cppStorageClass  constexpr decltype
+  syn keyword cppConstant      nullptr
+endif
+
 " The minimum and maximum operators in GNU C++
 syn match cppMinMax "[<>]?"
 
@@ -52,8 +60,8 @@ if version >= 508 || !exists("did_cpp_syntax_inits")
   HiLink cppType               Type
   HiLink cppStorageClass       StorageClass
   HiLink cppStructure          Structure
-  HiLink cppNumber             Number
   HiLink cppBoolean            Boolean
+  HiLink cppConstant           Constant
   delcommand HiLink
 endif
 
index 117f98d..36d75c4 100644 (file)
@@ -5,8 +5,7 @@
 " License: This file can be redistribued and/or modified under the same terms
 "   as Vim itself.
 " Filenames: /tmp/crontab.* used by "crontab -e"
-" URL: http://trific.ath.cx/Ftp/vim/syntax/crontab.vim
-" Last Change: 2006-04-20
+" Last Change: 2012-05-16
 "
 " crontab line format:
 " Minutes   Hours   Days   Months   Days_of_Week   Commands # comments
@@ -30,7 +29,7 @@ syntax match crontabDow "\s[-a-z0-9/,.*]\+" nextgroup=crontabCmd skipwhite conta
 syntax keyword crontabDow7 contained sun mon tue wed thu fri sat
 
 syntax region crontabCmd start="\S" end="$" skipwhite contained keepend contains=crontabPercent
-syntax match crontabCmnt "^\s*#.*"
+syntax match crontabCmnt "^\s*#.*" contains=@Spell
 syntax match crontabPercent "[^\\]%.*"lc=1 contained
 
 syntax match crontabNick "^\s*@\(reboot\|yearly\|annually\|monthly\|weekly\|daily\|midnight\|hourly\)\>" nextgroup=crontabCmd skipwhite
index 8d67334..5493b17 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language: Essbase script
 " Maintainer:  Raul Segura Acevedo <raulseguraaceved@netscape.net>
-" Last change: 2001 Sep 25
+" Last change: 2011 Dec 25 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@ elseif exists("b:current_syntax")
        finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " folds: fix/endfix and comments
 sy     region  EssFold start="\<Fix" end="EndFix" transparent fold
 
@@ -196,4 +199,6 @@ endif
 
 let b:current_syntax = "csc"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff --git a/runtime/syntax/csdl.vim b/runtime/syntax/csdl.vim
new file mode 100644 (file)
index 0000000..f7d30f1
--- /dev/null
@@ -0,0 +1,536 @@
+" Vim syntax file
+" Language: Curated Stream Definition Language (CSDL)
+" Maintainer: Jacek Artymiak
+" Latest Revision: 25 February 2013
+
+if exists("b:current_syntax")
+  finish
+endif
+
+setlocal iskeyword=.,@,48-57,_,192-255
+syn case ignore 
+
+syn match csdlKeyword "tag "
+syn match csdlKeyword "stream "
+syn match csdlKeyword "return "
+
+syn keyword csdlOperator contains
+syn match csdlOperator "cs contains"
+syn keyword csdlOperator substr
+syn match csdlOperator "cs substr"
+syn keyword csdlOperator contains_any
+syn match csdlOperator "cs contains_any"
+syn keyword csdlOperator any
+syn match csdlOperator "cs any"
+syn keyword csdlOperator contains_near
+syn match csdlOperator "cs contains_near"
+syn keyword csdlOperator exists
+syn keyword csdlOperator in
+syn keyword csdlOperator url_in
+syn match csdlOperator "=="
+syn match csdlOperator "!="
+syn match csdlOperator "cs =="
+syn match csdlOperator "cs !="
+syn match csdlOperator ">"
+syn match csdlOperator ">="
+syn match csdlOperator "<"
+syn match csdlOperator "<="
+syn keyword csdlOperator regex_partial
+syn keyword csdlOperator regex_exact
+syn keyword csdlOperator geo_box
+syn keyword csdlOperator geo_radius
+syn keyword csdlOperator geo_polygon
+
+syn keyword csdlLogicalOperator and
+syn keyword csdlLogicalOperator or
+syn keyword csdlLogicalOperator not
+
+syn match csdlTarget 'reddit\.title'
+syn match csdlTarget 'reddit\.content'
+syn match csdlTarget 'reddit\.contenttype'
+syn match csdlTarget 'reddit\.link'
+syn match csdlTarget 'reddit\.author\.name'
+syn match csdlTarget 'reddit\.author\.link'
+syn match csdlTarget 'reddit\.type'
+syn match csdlTarget 'reddit\.thread'
+syn match csdlTarget 'interaction\.type'
+syn match csdlTarget 'interaction\.title'
+syn match csdlTarget 'interaction\.content'
+syn match csdlTarget 'interaction\.source'
+syn match csdlTarget 'interaction\.geo'
+syn match csdlTarget 'interaction\.link'
+syn match csdlTarget 'interaction\.author\.username'
+syn match csdlTarget 'interaction\.author\.name'
+syn match csdlTarget 'interaction\.author\.id'
+syn match csdlTarget 'interaction\.author\.avatar'
+syn match csdlTarget 'interaction\.author\.link'
+syn match csdlTarget 'interaction\.sample'
+syn match csdlTarget 'links\.title'
+syn match csdlTarget 'links\.url'
+syn keyword csdlTarget links.normalized_url
+syn match csdlTarget 'links\.hops'
+syn match csdlTarget 'links\.code'
+syn match csdlTarget 'links\.domain'
+syn keyword csdlTarget links.retweet_count
+syn match csdlTarget 'links\.age'
+syn keyword csdlTarget links.meta.content_type
+syn match csdlTarget 'links\.meta\.charset'
+syn match csdlTarget 'links\.meta\.lang'
+syn match csdlTarget 'links\.meta\.keywords'
+syn match csdlTarget 'links\.meta\.description'
+syn match csdlTarget 'links\.meta\.newskeywords'
+syn match csdlTarget 'links\.meta\.standout'
+syn match csdlTarget 'links\.meta\.opengraph\.type'
+syn match csdlTarget 'links\.meta\.opengraph\.title'
+syn match csdlTarget 'links\.meta\.opengraph\.image'
+syn match csdlTarget 'links\.meta\.opengraph\.url'
+syn match csdlTarget 'links\.meta\.opengraph\.description'
+syn keyword csdlTarget links.meta.opengraph.site_name
+syn match csdlTarget 'links\.meta\.opengraph\.email'
+syn keyword csdlTarget links.meta.opengraph.phone_number
+syn keyword csdlTarget links.meta.opengraph.fax_number
+syn match csdlTarget 'links\.meta\.opengraph\.geo'
+syn keyword csdlTarget links.meta.opengraph.street_address
+syn match csdlTarget 'links\.meta\.opengraph\.locality'
+syn match csdlTarget 'links\.meta\.opengraph\.region'
+syn keyword csdlTarget links.meta.opengraph.postal_code
+syn match csdlTarget 'links\.meta\.opengraph\.activity'
+syn match csdlTarget 'links\.meta\.opengraph\.sport'
+syn match csdlTarget 'links\.meta\.opengraph\.bar'
+syn match csdlTarget 'links\.meta\.opengraph\.company'
+syn match csdlTarget 'links\.meta\.opengraph\.cafe'
+syn match csdlTarget 'links\.meta\.opengraph\.hotel'
+syn match csdlTarget 'links\.meta\.opengraph\.restaurant'
+syn match csdlTarget 'links\.meta\.opengraph\.cause'
+syn keyword csdlTarget links.meta.opengraph.sports_league
+syn keyword csdlTarget links.meta.opengraph.sports_team
+syn match csdlTarget 'links\.meta\.opengraph\.band'
+syn match csdlTarget 'links\.meta\.opengraph\.government'
+syn keyword csdlTarget links.meta.opengraph.non_profit
+syn match csdlTarget 'links\.meta\.opengraph\.school'
+syn match csdlTarget 'links\.meta\.opengraph\.university'
+syn match csdlTarget 'links\.meta\.opengraph\.actor'
+syn match csdlTarget 'links\.meta\.opengraph\.athlete'
+syn match csdlTarget 'links\.meta\.opengraph\.author'
+syn match csdlTarget 'links\.meta\.opengraph\.director'
+syn match csdlTarget 'links\.meta\.opengraph\.musician'
+syn match csdlTarget 'links\.meta\.opengraph\.politician'
+syn keyword csdlTarget links.meta.opengraph.public_figure
+syn match csdlTarget 'links\.meta\.opengraph\.city'
+syn match csdlTarget 'links\.meta\.opengraph\.country'
+syn match csdlTarget 'links\.meta\.opengraph\.landmark'
+syn keyword csdlTarget links.meta.opengraph.state_province
+syn match csdlTarget 'links\.meta\.opengraph\.album'
+syn match csdlTarget 'links\.meta\.opengraph\.book'
+syn match csdlTarget 'links\.meta\.opengraph\.drink'
+syn match csdlTarget 'links\.meta\.opengraph\.food'
+syn match csdlTarget 'links\.meta\.opengraph\.game'
+syn match csdlTarget 'links\.meta\.opengraph\.movie'
+syn match csdlTarget 'links\.meta\.opengraph\.product'
+syn match csdlTarget 'links\.meta\.opengraph\.song'
+syn keyword csdlTarget links.meta.opengraph.tv_show
+syn match csdlTarget 'links\.meta\.opengraph\.blog'
+syn match csdlTarget 'links\.meta\.opengraph\.website'
+syn match csdlTarget 'links\.meta\.opengraph\.article'
+syn match csdlTarget 'links\.meta\.twitter\.card'
+syn match csdlTarget 'links\.meta\.twitter\.site'
+syn keyword csdlTarget links.meta.twitter.site_id
+syn match csdlTarget 'links\.meta\.twitter\.creator'
+syn keyword csdlTarget links.meta.twitter.creator_id
+syn match csdlTarget 'links\.meta\.twitter\.url'
+syn match csdlTarget 'links\.meta\.twitter\.description'
+syn match csdlTarget 'links\.meta\.twitter\.title'
+syn match csdlTarget 'links\.meta\.twitter\.image'
+syn keyword csdlTarget links.meta.twitter.image_width
+syn keyword csdlTarget links.meta.twitter.image_height
+syn match csdlTarget 'links\.meta\.twitter\.player'
+syn keyword csdlTarget links.meta.twitter.player_width
+syn keyword csdlTarget links.meta.twitter.player_height
+syn keyword csdlTarget links.meta.twitter.player_stream
+syn keyword csdlTarget links.meta.twitter.player_stream_content_type
+syn match csdlTarget 'myspace\.link'
+syn match csdlTarget 'myspace\.content'
+syn match csdlTarget 'myspace\.contenttype'
+syn match csdlTarget 'myspace\.category'
+syn match csdlTarget 'myspace\.author\.username'
+syn match csdlTarget 'myspace\.author\.name'
+syn match csdlTarget 'myspace\.author\.id'
+syn match csdlTarget 'myspace\.author\.link'
+syn match csdlTarget 'myspace\.author\.avatar'
+syn match csdlTarget 'myspace\.geo'
+syn match csdlTarget 'myspace\.verb'
+syn match csdlTarget 'newscred\.type'
+syn match csdlTarget 'newscred\.article\.domain'
+syn match csdlTarget 'newscred\.video\.domain'
+syn match csdlTarget 'newscred\.article\.topics'
+syn match csdlTarget 'newscred\.video\.topics'
+syn match csdlTarget 'newscred\.article\.category'
+syn match csdlTarget 'newscred\.video\.category'
+syn match csdlTarget 'newscred\.article\.title'
+syn match csdlTarget 'newscred\.video\.title'
+syn match csdlTarget 'newscred\.article\.content'
+syn match csdlTarget 'newscred\.article\.fulltext'
+syn match csdlTarget 'newscred\.article\.authors'
+syn match csdlTarget 'newscred\.image\.caption'
+syn match csdlTarget 'newscred\.video\.caption'
+syn match csdlTarget 'newscred\.image\.attribution\.text'
+syn match csdlTarget 'newscred\.image\.attribution\.link'
+syn match csdlTarget 'newscred\.source\.name'
+syn match csdlTarget 'newscred\.source\.link'
+syn match csdlTarget 'newscred\.source\.domain'
+syn keyword csdlTarget newscred.source.media_type
+syn keyword csdlTarget newscred.source.company_type
+syn match csdlTarget 'newscred\.source\.country'
+syn match csdlTarget 'newscred\.source\.circulation'
+syn match csdlTarget 'newscred\.source\.founded'
+syn match csdlTarget 'imdb\.title'
+syn match csdlTarget 'imdb\.content'
+syn match csdlTarget 'imdb\.contenttype'
+syn match csdlTarget 'imdb\.link'
+syn match csdlTarget 'imdb\.author\.name'
+syn match csdlTarget 'imdb\.author\.link'
+syn match csdlTarget 'imdb\.type'
+syn match csdlTarget 'imdb\.thread'
+syn match csdlTarget 'amazon\.title'
+syn match csdlTarget 'amazon\.content'
+syn match csdlTarget 'amazon\.contenttype'
+syn match csdlTarget 'amazon\.link'
+syn match csdlTarget 'amazon\.author\.name'
+syn match csdlTarget 'amazon\.author\.link'
+syn match csdlTarget 'amazon\.type'
+syn match csdlTarget 'amazon\.thread'
+syn match csdlTarget 'salience\.content\.sentiment'
+syn match csdlTarget 'salience\.content\.topics'
+syn match csdlTarget 'salience\.title\.sentiment'
+syn match csdlTarget 'salience\.title\.topics'
+syn match csdlTarget 'salience\.content\.entities\.name'
+syn match csdlTarget 'salience\.content\.entities\.type'
+syn match csdlTarget 'salience\.title\.entities\.name'
+syn match csdlTarget 'salience\.title\.entities\.type'
+syn match csdlTarget 'klout\.score'
+syn match csdlTarget 'klout\.network'
+syn match csdlTarget 'klout\.amplification'
+syn keyword csdlTarget klout.true_reach
+syn match csdlTarget 'klout\.topics'
+syn match csdlTarget 'wikipedia\.author\.talk'
+syn match csdlTarget 'wikipedia\.author\.contributions'
+syn match csdlTarget 'wikipedia\.author\.username'
+syn match csdlTarget 'wikipedia\.body'
+syn match csdlTarget 'wikipedia\.title'
+syn match csdlTarget 'wikipedia\.images'
+syn match csdlTarget 'wikipedia\.categories'
+syn match csdlTarget 'wikipedia\.externallinks'
+syn match csdlTarget 'wikipedia\.ns'
+syn match csdlTarget 'wikipedia\.namespace'
+syn match csdlTarget 'wikipedia\.pageid'
+syn match csdlTarget 'wikipedia\.parentid'
+syn match csdlTarget 'wikipedia\.oldlen'
+syn match csdlTarget 'wikipedia\.newlen'
+syn match csdlTarget 'wikipedia\.changetype'
+syn match csdlTarget 'wikipedia\.diff\.from'
+syn match csdlTarget 'wikipedia\.diff\.to'
+syn match csdlTarget 'wikipedia\.diff\.changes\.added'
+syn match csdlTarget 'wikipedia\.diff\.changes\.removed'
+syn keyword csdlTarget demographic.twitter_activity
+syn match csdlTarget 'demographic\.location\.country'
+syn keyword csdlTarget demographic.location.us_state
+syn match csdlTarget 'demographic\.location\.city'
+syn match csdlTarget 'demographic\.type'
+syn match csdlTarget 'demographic\.sex'
+syn match csdlTarget 'demographic\.status\.relationship'
+syn match csdlTarget 'demographic\.status\.work'
+syn keyword csdlTarget demographic.likes_and_interests
+syn keyword csdlTarget demographic.first_language
+syn match csdlTarget 'demographic\.professions'
+syn match csdlTarget 'demographic\.services'
+syn keyword csdlTarget demographic.large_accounts_followed
+syn keyword csdlTarget demographic.age_range.start
+syn keyword csdlTarget demographic.age_range.end
+syn match csdlTarget 'demographic\.income\.start'
+syn match csdlTarget 'demographic\.income\.end'
+syn keyword csdlTarget demographic.main_street.dressed_by
+syn keyword csdlTarget demographic.main_street.shop_at
+syn keyword csdlTarget demographic.main_street.eat_and_drink_at
+syn match csdlTarget 'demographic\.accounts\.categories'
+syn match csdlTarget 'tumblr\.activity'
+syn match csdlTarget 'tumblr\.source\.blogid'
+syn match csdlTarget 'tumblr\.dest\.blogid'
+syn match csdlTarget 'tumblr\.dest\.postid'
+syn match csdlTarget 'tumblr\.root\.blogid'
+syn match csdlTarget 'tumblr\.root\.postid'
+syn match csdlTarget 'tumblr\.blogid'
+syn keyword csdlTarget tumblr.blog_name
+syn match csdlTarget 'tumblr\.type'
+syn match csdlTarget 'tumblr\.title'
+syn match csdlTarget 'tumblr\.body'
+syn match csdlTarget 'tumblr\.text'
+syn match csdlTarget 'tumblr\.tags'
+syn keyword csdlTarget tumblr.track_name
+syn match csdlTarget 'tumblr\.album'
+syn match csdlTarget 'tumblr\.link'
+syn match csdlTarget 'tumblr\.meta\.url'
+syn match csdlTarget 'tumblr\.meta\.type'
+syn match csdlTarget 'tumblr\.meta\.description'
+syn keyword csdlTarget tumblr.meta.likes_local
+syn keyword csdlTarget tumblr.meta.likes_global
+syn keyword csdlTarget tumblr.meta.reblogged_global
+syn match csdlTarget 'demographic\.gender'
+syn match csdlTarget 'flickr\.title'
+syn match csdlTarget 'flickr\.content'
+syn match csdlTarget 'flickr\.contenttype'
+syn match csdlTarget 'flickr\.link'
+syn match csdlTarget 'flickr\.author\.name'
+syn match csdlTarget 'flickr\.author\.link'
+syn match csdlTarget 'flickr\.author\.username'
+syn match csdlTarget 'flickr\.type'
+syn match csdlTarget 'flickr\.thread'
+syn match csdlTarget 'twitter\.text'
+syn match csdlTarget 'twitter\.source'
+syn match csdlTarget 'twitter\.mentions'
+syn keyword csdlTarget twitter.mention_ids
+syn match csdlTarget 'twitter\.links'
+syn match csdlTarget 'twitter\.domains'
+syn keyword csdlTarget twitter.in_reply_to_screen_name
+syn keyword csdlTarget twitter.in_reply_to_user_id
+syn keyword csdlTarget twitter.in_reply_to_status_id
+syn keyword csdlTarget twitter.filter_level
+syn match csdlTarget 'twitter\.lang'
+syn match csdlTarget 'twitter\.geo'
+syn match csdlTarget 'twitter\.user\.description'
+syn match csdlTarget 'twitter\.user\.location'
+syn keyword csdlTarget twitter.user.statuses_count
+syn keyword csdlTarget twitter.user.followers_count
+syn keyword csdlTarget twitter.user.follower_ratio
+syn keyword csdlTarget twitter.user.profile_age
+syn keyword csdlTarget twitter.user.friends_count
+syn keyword csdlTarget twitter.user.screen_name
+syn match csdlTarget 'twitter\.user\.lang'
+syn keyword csdlTarget twitter.user.time_zone
+syn match csdlTarget 'twitter\.user\.name'
+syn match csdlTarget 'twitter\.user\.id'
+syn keyword csdlTarget twitter.user.listed_count
+syn match csdlTarget 'twitter\.user\.url'
+syn match csdlTarget 'twitter\.user\.verified'
+syn keyword csdlTarget twitter.place.place_type
+syn match csdlTarget 'twitter\.place\.country'
+syn keyword csdlTarget twitter.place.country_code
+syn keyword csdlTarget twitter.place.full_name
+syn match csdlTarget 'twitter\.place\.name'
+syn match csdlTarget 'twitter\.place\.url'
+syn match csdlTarget 'twitter\.place\.attributes\.locality'
+syn match csdlTarget 'twitter\.place\.attributes\.region'
+syn keyword csdlTarget twitter.place.attributes.street_address
+syn match csdlTarget 'twitter\.status'
+syn match csdlTarget 'twitter\.retweet\.text'
+syn match csdlTarget 'twitter\.retweet\.elapsed'
+syn match csdlTarget 'twitter\.retweet\.source'
+syn keyword csdlTarget twitter.retweet.filter_level
+syn match csdlTarget 'twitter\.retweet\.lang'
+syn match csdlTarget 'twitter\.retweet\.user\.description'
+syn match csdlTarget 'twitter\.retweet\.user\.location'
+syn keyword csdlTarget twitter.retweet.user.statuses_count
+syn keyword csdlTarget twitter.retweet.user.followers_count
+syn keyword csdlTarget twitter.retweet.user.follower_ratio
+syn keyword csdlTarget twitter.retweet.user.profile_age
+syn keyword csdlTarget twitter.retweet.user.friends_count
+syn keyword csdlTarget twitter.retweet.user.screen_name
+syn match csdlTarget 'twitter\.retweet\.user\.lang'
+syn keyword csdlTarget twitter.retweet.user.time_zone
+syn match csdlTarget 'twitter\.retweet\.user\.name'
+syn match csdlTarget 'twitter\.retweet\.user\.id'
+syn keyword csdlTarget twitter.retweet.user.listed_count
+syn match csdlTarget 'twitter\.retweet\.user\.url'
+syn match csdlTarget 'twitter\.retweet\.user\.verified'
+syn match csdlTarget 'twitter\.retweeted\.id'
+syn match csdlTarget 'twitter\.retweeted\.source'
+syn keyword csdlTarget twitter.retweeted.in_reply_to_screen_name
+syn keyword csdlTarget twitter.retweeted.in_reply_to_user_id_str
+syn keyword csdlTarget twitter.retweeted.in_reply_to_status_id
+syn match csdlTarget 'twitter\.retweet\.count'
+syn match csdlTarget 'twitter\.retweet\.mentions'
+syn keyword csdlTarget twitter.retweet.mention_ids
+syn match csdlTarget 'twitter\.retweet\.links'
+syn match csdlTarget 'twitter\.retweet\.domains'
+syn match csdlTarget 'twitter\.retweeted\.user\.description'
+syn match csdlTarget 'twitter\.retweeted\.user\.location'
+syn keyword csdlTarget twitter.retweeted.user.statuses_count
+syn keyword csdlTarget twitter.retweeted.user.followers_count
+syn keyword csdlTarget twitter.retweeted.user.follower_ratio
+syn keyword csdlTarget twitter.retweeted.user.profile_age
+syn keyword csdlTarget twitter.retweeted.user.friends_count
+syn keyword csdlTarget twitter.retweeted.user.screen_name
+syn match csdlTarget 'twitter\.retweeted\.user\.lang'
+syn keyword csdlTarget twitter.retweeted.user.time_zone
+syn match csdlTarget 'twitter\.retweeted\.user\.name'
+syn match csdlTarget 'twitter\.retweeted\.user\.id'
+syn keyword csdlTarget twitter.retweeted.user.listed_count
+syn match csdlTarget 'twitter\.retweeted\.user\.url'
+syn match csdlTarget 'twitter\.retweeted\.user\.verified'
+syn match csdlTarget 'twitter\.retweeted\.geo'
+syn keyword csdlTarget twitter.retweeted.place.place_type
+syn match csdlTarget 'twitter\.retweeted\.place\.country'
+syn keyword csdlTarget twitter.retweeted.place.country_code
+syn keyword csdlTarget twitter.retweeted.place.full_name
+syn match csdlTarget 'twitter\.retweeted\.place\.name'
+syn match csdlTarget 'twitter\.retweeted\.place\.url'
+syn match csdlTarget 'twitter\.retweeted\.place\.attributes'
+syn match csdlTarget 'twitter\.hashtags'
+syn match csdlTarget 'twitter\.retweet\.hashtags'
+syn match csdlTarget 'twitter\.media\.type'
+syn keyword csdlTarget twitter.media.media_url
+syn keyword csdlTarget twitter.media.display_url
+syn match csdlTarget 'twitter\.retweet\.media\.type'
+syn keyword csdlTarget twitter.retweet.media.media_url
+syn keyword csdlTarget twitter.retweet.media.display_url
+syn match csdlTarget 'blog\.title'
+syn match csdlTarget 'blog\.content'
+syn match csdlTarget 'blog\.contenttype'
+syn match csdlTarget 'blog\.link'
+syn match csdlTarget 'blog\.domain'
+syn match csdlTarget 'blog\.author\.name'
+syn match csdlTarget 'blog\.author\.link'
+syn match csdlTarget 'blog\.author\.avatar'
+syn match csdlTarget 'blog\.author\.username'
+syn match csdlTarget 'blog\.type'
+syn match csdlTarget 'blog\.post\.link'
+syn match csdlTarget 'blog\.post\.title'
+syn match csdlTarget 'facebook\.author\.name'
+syn match csdlTarget 'facebook\.author\.link'
+syn match csdlTarget 'facebook\.author\.id'
+syn match csdlTarget 'facebook\.author\.avatar'
+syn match csdlTarget 'facebook\.message'
+syn match csdlTarget 'facebook\.description'
+syn match csdlTarget 'facebook\.caption'
+syn match csdlTarget 'facebook\.type'
+syn match csdlTarget 'facebook\.application'
+syn match csdlTarget 'facebook\.source'
+syn match csdlTarget 'facebook\.link'
+syn match csdlTarget 'facebook\.name'
+syn match csdlTarget 'facebook\.to\.names'
+syn match csdlTarget 'facebook\.to\.ids'
+syn match csdlTarget 'facebook\.og\.title'
+syn match csdlTarget 'facebook\.og\.location'
+syn match csdlTarget 'facebook\.og\.photos'
+syn match csdlTarget 'facebook\.og\.by'
+syn match csdlTarget 'facebook\.og\.description'
+syn match csdlTarget 'facebook\.og\.type'
+syn match csdlTarget 'facebook\.og\.length'
+syn match csdlTarget 'facebook\.likes\.count'
+syn match csdlTarget 'facebook\.likes\.names'
+syn match csdlTarget 'facebook\.likes\.ids'
+syn match csdlTarget 'topix\.title'
+syn match csdlTarget 'topix\.content'
+syn match csdlTarget 'topix\.contenttype'
+syn match csdlTarget 'topix\.link'
+syn match csdlTarget 'topix\.author\.name'
+syn match csdlTarget 'topix\.type'
+syn match csdlTarget 'topix\.thread'
+syn match csdlTarget 'topix\.author\.location'
+syn match csdlTarget 'bitly\.user\.agent'
+syn keyword csdlTarget bitly.url_hash
+syn match csdlTarget 'bitly\.share\.hash'
+syn match csdlTarget 'bitly\.cname'
+syn keyword csdlTarget bitly.referring_url
+syn keyword csdlTarget bitly.referring_domain
+syn match csdlTarget 'bitly\.url'
+syn match csdlTarget 'bitly\.domain'
+syn keyword csdlTarget bitly.country_code
+syn keyword csdlTarget bitly.geo_region_code
+syn match csdlTarget 'bitly\.country'
+syn keyword csdlTarget bitly.geo_region
+syn keyword csdlTarget bitly.geo_city
+syn match csdlTarget 'bitly\.geo'
+syn match csdlTarget 'bitly\.timezone'
+syn match csdlTarget 'trends\.type'
+syn match csdlTarget 'trends\.content'
+syn match csdlTarget 'trends\.source'
+syn match csdlTarget 'board\.title'
+syn match csdlTarget 'board\.content'
+syn match csdlTarget 'board\.contenttype'
+syn match csdlTarget 'board\.link'
+syn match csdlTarget 'board\.domain'
+syn match csdlTarget 'board\.author\.name'
+syn match csdlTarget 'board\.author\.link'
+syn match csdlTarget 'board\.author\.avatar'
+syn match csdlTarget 'board\.author\.username'
+syn match csdlTarget 'board\.type'
+syn match csdlTarget 'board\.thread'
+syn match csdlTarget 'board\.author\.location'
+syn match csdlTarget 'board\.author\.signature'
+syn match csdlTarget 'board\.author\.registered'
+syn match csdlTarget 'board\.author\.age'
+syn match csdlTarget 'board\.author\.gender'
+syn match csdlTarget 'video\.title'
+syn match csdlTarget 'video\.content'
+syn match csdlTarget 'video\.contenttype'
+syn match csdlTarget 'video\.domain'
+syn match csdlTarget 'video\.author\.name'
+syn match csdlTarget 'video\.author\.link'
+syn match csdlTarget 'video\.author\.avatar'
+syn match csdlTarget 'video\.author\.username'
+syn match csdlTarget 'video\.type'
+syn match csdlTarget 'video\.videolink'
+syn match csdlTarget 'video\.commentslink'
+syn match csdlTarget 'video\.duration'
+syn match csdlTarget 'video\.thumbnail'
+syn match csdlTarget 'video\.category'
+syn match csdlTarget 'video\.tags'
+syn match csdlTarget '2ch\.title'
+syn match csdlTarget '2ch\.content'
+syn match csdlTarget '2ch\.contenttype'
+syn match csdlTarget '2ch\.link'
+syn match csdlTarget '2ch\.author\.name'
+syn match csdlTarget '2ch\.type'
+syn match csdlTarget '2ch\.thread'
+syn match csdlTarget 'dailymotion\.title'
+syn match csdlTarget 'dailymotion\.content'
+syn match csdlTarget 'dailymotion\.contenttype'
+syn match csdlTarget 'dailymotion\.author\.link'
+syn match csdlTarget 'dailymotion\.author\.username'
+syn match csdlTarget 'dailymotion\.videolink'
+syn match csdlTarget 'dailymotion\.duration'
+syn match csdlTarget 'dailymotion\.thumbnail'
+syn match csdlTarget 'dailymotion\.category'
+syn match csdlTarget 'dailymotion\.tags'
+syn match csdlTarget 'language\.tag'
+syn match csdlTarget 'language\.confidence'
+syn match csdlTarget 'digg\.type'
+syn match csdlTarget 'digg\.user\.name'
+syn match csdlTarget 'digg\.user\.fullname'
+syn match csdlTarget 'digg\.user\.registered'
+syn match csdlTarget 'digg\.user\.profileviews'
+syn match csdlTarget 'digg\.user\.icon'
+syn match csdlTarget 'digg\.user\.links'
+syn match csdlTarget 'digg\.item\.status'
+syn match csdlTarget 'digg\.item\.description'
+syn match csdlTarget 'digg\.item\.title'
+syn match csdlTarget 'digg\.item\.diggs'
+syn match csdlTarget 'digg\.item\.comments'
+syn match csdlTarget 'digg\.item\.topic'
+syn match csdlTarget 'digg\.comment\.buries'
+syn match csdlTarget 'digg\.comment\.diggs'
+syn match csdlTarget 'digg\.comment\.text'
+syn match csdlTarget 'youtube\.title'
+syn match csdlTarget 'youtube\.content'
+syn match csdlTarget 'youtube\.contenttype'
+syn match csdlTarget 'youtube\.author\.name'
+syn match csdlTarget 'youtube\.author\.link'
+syn match csdlTarget 'youtube\.type'
+syn match csdlTarget 'youtube\.videolink'
+syn match csdlTarget 'youtube\.commentslink'
+syn match csdlTarget 'youtube\.duration'
+syn match csdlTarget 'youtube\.thumbnail'
+syn match csdlTarget 'youtube\.category'
+syn match csdlTarget 'youtube\.tags'
+
+syn match csdlComment "^\/\/.*$"
+syn match csdlComment "^\/\*.*$"
+syn match csdlComment "^.*\*\/$"
+
+highlight link csdlKeyword Statement
+highlight link csdlOperator Operator
+highlight link csdlLogicalOperator Operator
+highlight link csdlTarget Constant
+highlight link csdlComment Comment
+"
+let b:current_syntax = "csdl"
index c569213..8b36b72 100644 (file)
@@ -1,10 +1,12 @@
 " Vim syntax file
-" Language:    Cascading Style Sheets
-" Maintainer:  Claudio Fleiner <claudio@fleiner.com>
-" URL:         http://www.fleiner.com/vim/syntax/css.vim
-" Last Change: 2010 Jul 28
-" CSS2 by Nikolai Weibull
-" Full CSS2, HTML4 support by Yeti
+" Language:     Cascading Style Sheets
+" Previous Contributor List:
+"               Claudio Fleiner <claudio@fleiner.com> (Maintainer)
+"               Yeti            (Add full CSS2, HTML4 support)
+"               Nikolai Weibull (Add CSS2 support)
+" Maintainer:   Jules Wang      <w.jq0722@gmail.com>
+" URL:          https://github.com/JulesWang/css.vim
+" Last Change:  2013 Jul 23
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,13 +14,19 @@ if !exists("main_syntax")
   if version < 600
     syntax clear
   elseif exists("b:current_syntax")
-  finish
-endif
+    finish
+  endif
   let main_syntax = 'css'
+elseif exists("b:current_syntax") && b:current_syntax == "css"
+  finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
+" All HTML4 tags
 syn keyword cssTagName abbr acronym address applet area a b base
 syn keyword cssTagName basefont bdo big blockquote body br button
 syn keyword cssTagName caption center cite code col colgroup dd del
@@ -27,32 +35,51 @@ syn keyword cssTagName frameset h1 h2 h3 h4 h5 h6 head hr html img i
 syn keyword cssTagName iframe img input ins isindex kbd label legend li
 syn keyword cssTagName link map menu meta noframes noscript ol optgroup
 syn keyword cssTagName option p param pre q s samp script select small
-syn keyword cssTagName span strike strong style sub sup tbody td
+syn keyword cssTagName span strike strong style sub sup table tbody td
 syn keyword cssTagName textarea tfoot th thead title tr tt ul u var
-syn match cssTagName "\<table\>"
-syn match cssTagName "\*"
+syn keyword cssTagName object
 
-syn match cssTagName "@page\>" nextgroup=cssDefinition
+" HTML5 new tags 5*6=30
+syn keyword cssTagName article aside audio bdi canvas command
+syn keyword cssTagName datalist details embed figcaption figure footer
+syn keyword cssTagName header hgroup keygen mark meter nav
+syn keyword cssTagName output progress rt rp ruby section
+syn keyword cssTagName source summary time track video wbr
 
-syn match cssSelectorOp "[+>.]"
-syn match cssSelectorOp2 "[~|]\?=" contained
+" Tags not supported in HTML5
+syn keyword cssDeprecated acronym applet basefont big center dir
+syn keyword cssDeprecated font frame frameset noframes strike tt
+
+"syn match cssTagName "\<table\>"
+syn match cssTagName "\*"
+
+" selectors
+syn match cssSelectorOp "[,>+]"
+syn match cssSelectorOp2 "[~|^$*]\?=" contained
+" FIXME: add HTML5 attribute
 syn region cssAttributeSelector matchgroup=cssSelectorOp start="\[" end="]" transparent contains=cssUnicodeEscape,cssSelectorOp2,cssStringQ,cssStringQQ
 
+" .class and #id
+syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+"
+
 try
 syn match cssIdentifier "#[A-Za-zÀ-ÿ_@][A-Za-zÀ-ÿ0-9_@-]*"
 catch /^.*/
 syn match cssIdentifier "#[A-Za-z_@][A-Za-z0-9_@-]*"
 endtry
 
+syn match cssTagName "@page\>" nextgroup=cssDefinition
+" FIXME: use cssVendor here
+syn match cssTagName "@\(-\(webkit\|moz\|o\|ms\)-\)\=keyframes\>" nextgroup=cssDefinition
 
 syn match cssMedia "@media\>" nextgroup=cssMediaType skipwhite skipnl
 syn keyword cssMediaType contained screen print aural braile embosed handheld projection ty tv all nextgroup=cssMediaComma,cssMediaBlock skipwhite skipnl
-syn match cssMediaComma "," nextgroup=cssMediaType skipwhite skipnl
+"syn match cssMediaComma "," nextgroup=cssMediaType skipwhite skipnl
 syn region cssMediaBlock transparent matchgroup=cssBraces start='{' end='}' contains=cssTagName,cssError,cssComment,cssDefinition,cssURL,cssUnicodeEscape,cssIdentifier
 
 syn match cssValueInteger contained "[-+]\=\d\+"
 syn match cssValueNumber contained "[-+]\=\d\+\(\.\d*\)\="
-syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\)"
+syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\|rem\)"
 syn match cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)"
 syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)"
 syn match cssValueFrequency contained "+\=\d\+\(\.\d*\)\=\(Hz\|kHz\)"
@@ -66,27 +93,115 @@ syn region cssFontDescriptorFunction contained matchgroup=cssFunctionName start=
 syn match cssUnicodeRange contained "U+[0-9A-Fa-f?]\+"
 syn match cssUnicodeRange contained "U+\x\+-\x\+"
 
+" The 16 basic color names
 syn keyword cssColor contained aqua black blue fuchsia gray green lime maroon navy olive purple red silver teal yellow
+
+" 130 more color names
+syn keyword cssColor contained aliceblue antiquewhite aquamarine azure
+syn keyword cssColor contained beige bisque blanchedalmond blueviolet brown burlywood
+syn keyword cssColor contained cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan
+syn match cssColor contained /dark\(blue\|cyan\|goldenrod\|gray\|green\|grey\|khaki\)/
+syn match cssColor contained /dark\(magenta\|olivegreen\|orange\|orchid\|red\|salmon\|seagreen\)/
+syn match cssColor contained /darkslate\(blue\|gray\|grey\)/
+syn match cssColor contained /dark\(turquoise\|violet\)/
+syn keyword cssColor contained deeppink deepskyblue dimgray dimgrey dodgerblue firebrick
+syn keyword cssColor contained floralwhite forestgreen gainsboro ghostwhite gold
+syn keyword cssColor contained goldenrod greenyellow grey honeydew hotpink
+syn keyword cssColor contained indianred indigo ivory khaki lavender lavenderblush lawngreen
+syn keyword cssColor contained lemonchiffon limegreen linen magenta
+syn match cssColor contained /light\(blue\|coral\|cyan\|goldenrodyellow\|gray\|green\)/
+syn match cssColor contained /light\(grey\|pink\|salmon\|seagreen\|skyblue\|yellow\)/
+syn match cssColor contained /light\(slategray\|slategrey\|steelblue\)/
+syn match cssColor contained /medium\(aquamarine\|blue\|orchid\|purple\|seagreen\)/
+syn match cssColor contained /medium\(slateblue\|springgreen\|turquoise\|violetred\)/
+syn keyword cssColor contained midnightblue mintcream mistyrose moccasin navajowhite
+syn keyword cssColor contained oldlace olivedrab orange orangered orchid
+syn match cssColor contained /pale\(goldenrod\|green\|turquoise\|violetred\)/
+syn keyword cssColor contained papayawhip peachpuff peru pink plum powderblue
+syn keyword cssColor contained rosybrown royalblue saddlebrown salmon sandybrown
+syn keyword cssColor contained seagreen seashell sienna skyblue slateblue
+syn keyword cssColor contained slategray slategrey snow springgreen steelblue tan
+syn keyword cssColor contained thistle tomato turquoise violet wheat
+syn keyword cssColor contained whitesmoke yellowgreen
+
 " FIXME: These are actually case-insentivie too, but (a) specs recommend using
 " mixed-case (b) it's hard to highlight the word `Background' correctly in
 " all situations
 syn case match
 syn keyword cssColor contained ActiveBorder ActiveCaption AppWorkspace ButtonFace ButtonHighlight ButtonShadow ButtonText CaptionText GrayText Highlight HighlightText InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText Menu MenuText Scrollbar ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow Window WindowFrame WindowText Background
 syn case ignore
+
+syn match cssImportant contained "!\s*important\>"
+
 syn match cssColor contained "\<transparent\>"
 syn match cssColor contained "\<white\>"
 syn match cssColor contained "#[0-9A-Fa-f]\{3\}\>"
 syn match cssColor contained "#[0-9A-Fa-f]\{6\}\>"
-"syn match cssColor contained "\<rgb\s*(\s*\d\+\(\.\d*\)\=%\=\s*,\s*\d\+\(\.\d*\)\=%\=\s*,\s*\d\+\(\.\d*\)\=%\=\s*)"
-syn region cssURL contained matchgroup=cssFunctionName start="\<url\s*(" end=")" oneline keepend
-syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\)\s*(" end=")" oneline keepend
 
-syn match cssImportant contained "!\s*important\>"
-
-syn keyword cssCommonAttr contained auto none inherit
+syn region cssURL contained matchgroup=cssFunctionName start="\<url\s*(" end=")" oneline keepend
+syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\|cubic-bezier\)\s*(" end=")" oneline keepend
+syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgba\|hsl\|hsla\)\s*(" end=")" oneline keepend
+syn region cssFunction contained matchgroup=cssFunctionName start="\<\(linear\|radial\)-gradient\s*(" end=")" oneline keepend
+syn region cssFunction contained matchgroup=cssFunctionName start="\<\(matrix\(3d\)\=\|scale\(3d\|X\|Y|\Z\)\=\|translate\(3d\|X\|Y|\Z\)\=\|skew\(X\|Y\)\=\|rotate\(3d\|X\|Y|\Z\)\=\|perspective\)\s*(" end=")" oneline keepend
+
+" Prop and Attr
+" Reference: http://www.w3schools.com/cssref/default.asp
+syn keyword cssCommonAttr contained auto none inherit all
 syn keyword cssCommonAttr contained top bottom
 syn keyword cssCommonAttr contained medium normal
 
+
+syn match cssAnimationProp contained "\<animation\(-\(name\|duration\|timing-function\|delay\|iteration-cout\|play-state\)\)\=\>"
+
+
+syn keyword cssAnimationAttr contained infinite alternate paused running
+" bugfix: escape linear-gradient
+syn match cssAnimationAttr contained "\<linear\(-gradient\)\@!\>"
+syn match cssAnimationAttr contained "\<ease\(-\(in-out\|out\|in\)\)\=\>"
+
+syn match cssBackgroundProp contained "\<background\(-\(color\|image\|attachment\|position\|clip\|origin\|size\)\)\=\>"
+syn keyword cssBackgroundAttr contained center fixed over contain
+syn match cssBackgroundAttr contained "\<no-repeat\>"
+syn match cssBackgroundAttr contained "\<repeat\(-[xy]\)\=\>"
+syn match cssBackgroundAttr contained "\<\(border\|content\|padding\)-box\>"
+
+
+syn match cssBorderOutlineProp contained "\<border\(-\(top\|right\|bottom\|left\)\)\=\(-\(width\|color\|style\)\)\=\>"
+syn match cssBorderOutlineProp contained "\<outline\(-\(width\|style\|color\)\)\=\>"
+syn match cssBorderOutlineProp contained "\<border-\(top\|bottom\)-\(left\|right\)\(-radius\)\=\>"
+syn match cssBorderOutlineProp contained "\<border-image\(-\(outset\|repeat\|slice\|source\|width\)\)\=\>"
+syn match cssBorderOutlineProp contained "\<border-radius\>"
+syn keyword cssBorderOutlineAttr contained thin thick medium
+syn keyword cssBorderOutlineAttr contained dotted dashed solid double groove ridge inset outset
+syn keyword cssBorderOutlineAttr contained hidden visible scroll collapse
+syn keyword cssBorderOutlineAttr contained stretch round
+
+
+syn match cssBoxProp contained "\<overflow\(-\(x\|y\|style\)\)\=\>"
+syn match cssBoxProp contained "\<rotation\(-point\)=\>"
+syn keyword cssBoxAttr contained visible hidden scroll auto
+syn match cssBoxAttr contained "\<no-\(display\|content\)\>"
+
+syn keyword cssColorProp contained opacity
+syn match cssColorProp contained "\<color-profile\>"
+syn match cssColorProp contained "\<rendering-intent\>"
+
+
+syn match cssDimensionProp contained "\<\(min\|max\)-\(width\|height\)\>"
+syn keyword cssDimensionProp contained height
+syn keyword cssDimensionProp contained width
+
+" shadow and sizing are in other property groups
+syn match cssFlexibleBoxProp contained "\<box-\(align\|direction\|flex\|ordinal-group\|orient\|pack\|shadow\|sizing\)\>"
+syn keyword cssFlexibleBoxAttr contained start end center baseline stretch
+syn keyword cssFlexibleBoxAttr contained normal reverse
+syn keyword cssFlexibleBoxAttr contained single mulitple
+syn keyword cssFlexibleBoxAttr contained horizontal
+" bugfix: escape vertial-align
+syn match cssFlexibleBoxAttr contained "\<vertical\(-align\)\@!\>"
+syn match cssFlexibleBoxAttr contained "\<\(inline\|block\)-axis\>"
+
+
 syn match cssFontProp contained "\<font\(-\(family\|style\|variant\|weight\|size\(-adjust\)\=\|stretch\)\)\=\>"
 syn match cssFontAttr contained "\<\(sans-\)\=\<serif\>"
 syn match cssFontAttr contained "\<small\(-\(caps\|caption\)\)\=\>"
@@ -95,67 +210,92 @@ syn match cssFontAttr contained "\<message-box\>"
 syn match cssFontAttr contained "\<status-bar\>"
 syn match cssFontAttr contained "\<\(\(ultra\|extra\|semi\|status-bar\)-\)\=\(condensed\|expanded\)\>"
 syn keyword cssFontAttr contained cursive fantasy monospace italic oblique
-syn keyword cssFontAttr contained bold bolder lighter larger smaller
-syn keyword cssFontAttr contained icon menu
-syn match cssFontAttr contained "\<caption\>"
-syn keyword cssFontAttr contained large smaller larger
-syn keyword cssFontAttr contained narrower wider
-
-syn keyword cssColorProp contained color
-syn match cssColorProp contained "\<background\(-\(color\|image\|attachment\|position\)\)\=\>"
-syn keyword cssColorAttr contained center scroll fixed
-syn match cssColorAttr contained "\<repeat\(-[xy]\)\=\>"
-syn match cssColorAttr contained "\<no-repeat\>"
+syn keyword cssFontAttr contained bold bolder light lighter larger smaller
+syn keyword cssFontAttr contained icon menu caption
+syn keyword cssFontAttr contained large smaller larger narrower wider
+syn keyword cssFontAttr contained Courier Arial Georgia Times
 
-syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>"
-syn match cssTextAttr contained "\<line-through\>"
-syn match cssTextAttr contained "\<text-indent\>"
-syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>"
-syn keyword cssTextAttr contained underline overline blink sub super middle
-syn keyword cssTextAttr contained capitalize uppercase lowercase center justify baseline sub super
-
-syn match cssBoxProp contained "\<\(margin\|padding\|border\)\(-\(top\|right\|bottom\|left\)\)\=\>"
-syn match cssBoxProp contained "\<border-\(\(\(top\|right\|bottom\|left\)-\)\=\(width\|color\|style\)\)\=\>"
-syn match cssBoxProp contained "\<\(width\|z-index\)\>"
-syn match cssBoxProp contained "\<\(min\|max\)-\(width\|height\)\>"
-syn keyword cssBoxProp contained width height float clear overflow clip visibility
-syn keyword cssBoxAttr contained thin thick both
-syn keyword cssBoxAttr contained dotted dashed solid double groove ridge inset outset
-syn keyword cssBoxAttr contained hidden visible scroll collapse
-
-syn keyword cssGeneratedContentProp contained content quotes
+
+syn keyword cssGeneratedContentProp contained content quotes crop
 syn match cssGeneratedContentProp contained "\<counter-\(reset\|increment\)\>"
-syn match cssGeneratedContentProp contained "\<list-style\(-\(type\|position\|image\)\)\=\>"
+syn match cssGeneratedContentProp contained "\<move-to\>"
+syn match cssGeneratedContentProp contained "\<page-policy\>"
 syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>"
-syn match cssAuralAttr contained "\<lower\>"
-syn match cssGeneratedContentAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>"
-syn match cssGeneratedContentAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>"
-syn match cssGeneratedContentAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>"
-syn keyword cssGeneratedContentAttr contained disc circle square hebrew armenian georgian
-syn keyword cssGeneratedContentAttr contained inside outside
 
-syn match cssPagingProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
-syn keyword cssPagingProp contained size marks inside orphans widows
-syn keyword cssPagingAttr contained landscape portrait crop cross always avoid
 
-syn keyword cssUIProp contained cursor
-syn match cssUIProp contained "\<outline\(-\(width\|style\|color\)\)\=\>"
-syn match cssUIAttr contained "\<[ns]\=[ew]\=-resize\>"
-syn keyword cssUIAttr contained default crosshair pointer move wait help
-syn keyword cssUIAttr contained thin thick
-syn keyword cssUIAttr contained dotted dashed solid double groove ridge inset outset
-syn keyword cssUIAttr contained invert
-
-syn match cssRenderAttr contained "\<marker\>"
-syn match cssRenderProp contained "\<\(display\|marker-offset\|unicode-bidi\|white-space\|list-item\|run-in\|inline-table\)\>"
-syn keyword cssRenderProp contained position top bottom direction
-syn match cssRenderProp contained "\<\(left\|right\)\>"
-syn keyword cssRenderAttr contained block inline compact
-syn match cssRenderAttr contained "\<table\(-\(row-gorup\|\(header\|footer\)-group\|row\|column\(-group\)\=\|cell\|caption\)\)\=\>"
-syn keyword cssRenderAttr contained static relative absolute fixed
-syn keyword cssRenderAttr contained ltr rtl embed bidi-override pre nowrap
-syn match cssRenderAttr contained "\<bidi-override\>"
+syn match cssGridProp contained "\<grid-\(columns\|rows\)\>"
+
+syn match cssHyerlinkProp contained "\<target\(-\(name\|new\|position\)\)\=\>"
+
+syn match cssListProp contained "\<list-style\(-\(type\|position\|image\)\)\=\>"
+syn match cssListAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>"
+syn match cssListAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>"
+syn match cssListAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>"
+syn keyword cssListAttr contained disc circle square hebrew armenian georgian
+syn keyword cssListAttr contained inside outside
+
 
+syn match cssMarginProp contained "\<margin\(-\(top\|right\|bottom\|left\)\)\=\>"
+
+syn match cssMultiColumnProp contained "\<column\(-\(\break-\(after\|before\)\|count\|gap\|rule\(-\(color\|style\|width\)\)\=\)\|span\|width\)\=\>"
+
+
+syn match cssPaddingProp contained "\<padding\(-\(top\|right\|bottom\|left\)\)\=\>"
+
+syn keyword cssPositioningProp contained bottom clear clip display float left
+syn keyword cssPositioningProp contained position right top visibility
+syn match cssPositioningProp contained "\<z-index\>"
+syn keyword cssPositioningAttr contained block inline compact
+syn match cssPositioningAttr contained "\<table\(-\(row-gorup\|\(header\|footer\)-group\|row\|column\(-group\)\=\|cell\|caption\)\)\=\>"
+syn keyword cssPositioningAttr contained left right both
+syn match cssPositioningAttr contained "\<list-item\>"
+syn match cssPositioningAttr contained "\<inline-\(block\|table\)\>"
+syn keyword cssPositioningAttr contained static relative absolute fixed
+
+syn match cssPrintProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
+syn keyword cssPrintProp contained orphans widows
+syn keyword cssPrintAttr contained landscape portrait crop cross always avoid
+
+syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\)\>"
+syn keyword cssTableAttr contained fixed collapse separate show hide once always
+
+
+syn keyword cssTextProp contained color direction
+syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>"
+syn match cssTextProp contained "\<text-\(justify\|\outline\|overflow\|warp\|align-last\)\>"
+syn match cssTextProp contained "\<word-\(break\|\wrap\)\>"
+syn match cssTextProp contained "\<white-space\>"
+syn match cssTextProp contained "\<hanging-punctuation\>"
+syn match cssTextProp contained "\<punctuation-trim\>"
+syn match cssTextAttr contained "\<line-through\>"
+syn match cssTextAttr contained "\<text-indent\>"
+syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>"
+syn keyword cssTextAttr contained ltr rtl embed nowrap
+syn keyword cssTextAttr contained underline overline blink sub super middle
+syn keyword cssTextAttr contained capitalize uppercase lowercase
+syn keyword cssTextAttr contained center justify baseline sub super
+syn match cssTextAttr contained "\<pre\(-\(line\|wrap\)\)\=\>"
+syn match cssTextAttr contained "\<\(allow\|force\)-end\>"
+syn keyword cssTextAttr contained start end adjacent
+syn match cssTextAttr contained "\<inter-\(word\|ideographic\|cluster\)\>"
+syn keyword cssTextAttr contained distribute kashida first last
+syn keyword cssTextAttr contained clip ellipsis unrestricted suppress
+syn match cssTextAttr contained "\<break-all\>"
+syn match cssTextAttr contained "\<break-word\>"
+syn keyword cssTextAttr contained hyphenate
+
+
+syn match cssTransformProp contained "\<transform\(-\(origin\|style\)\)\=\>"
+syn match cssTransformProp contained "\<perspective\(-origin\)\=\>"
+syn match cssTransformProp contained "\<backface-visibility\>"
+
+syn match cssTransitionProp contained "\<transition\(-\(delay\|duration\|property\|timing-function\)\)\=\>"
+
+syn match cssUIProp contained "\<nav-\(down\|index\|left\|right\|up\)\=\>"
+syn match cssUIProp contained "\<outline-offset\>"
+syn match cssUIProp contained "\<box-sizing\>"
+syn keyword cssUIProp contained appearance icon resize
+syn keyword cssUIAttr contained window button menu field
 
 syn match cssAuralProp contained "\<\(pause\|cue\)\(-\(before\|after\)\)\=\>"
 syn match cssAuralProp contained "\<\(play-during\|speech-rate\|voice-family\|pitch\(-range\)\=\|speak\(-\(punctuation\|numerals\)\)\=\)\>"
@@ -171,30 +311,54 @@ syn keyword cssAuralAttr contained below level above higher
 syn match cssAuralAttr contained "\<\(x-\)\=\(slow\|fast\)\>"
 syn keyword cssAuralAttr contained faster slower
 syn keyword cssAuralAttr contained male female child code digits continuous
+syn match cssAuralAttr contained "\<lower\>"
+
+" cursor
+syn keyword cssUIProp contained cursor
+syn match cssUIAttr contained "\<[ns]\=[ew]\=-resize\>"
+syn keyword cssUIAttr contained crosshair default help move pointer
+syn keyword cssUIAttr contained progress wait
+
+" FIXME: I could not find them in reference
+syn keyword cssUIAttr contained invert maker size zoom
+syn match cssRenderAttr contained "\<run-in\>"
+syn match cssRenderAttr contained "\<text-rendering\>"
+syn match cssRenderAttr contained "\<font-smoothing\>"
+syn match cssRenderProp contained "\<marker-offset\>"
+syn match cssRenderAttr contained "\<bidi-override\>"
 
-syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\|speak-header\)\>"
-syn keyword cssTableAttr contained fixed collapse separate show hide once always
 
 " FIXME: This allows cssMediaBlock before the semicolon, which is wrong.
 syn region cssInclude start="@import" end=";" contains=cssComment,cssURL,cssUnicodeEscape,cssMediaType
 syn match cssBraces contained "[{}]"
 syn match cssError contained "{@<>"
-syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape
+syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition
 syn match cssBraceError "}"
 
-syn match cssPseudoClass ":\S*" contains=cssPseudoClassId,cssUnicodeEscape
-syn keyword cssPseudoClassId contained link visited active hover focus before after left right
+" Pseudo class
+syn match cssPseudoClass ":[A-Za-z0-9_-]*" contains=cssPseudoClassId,cssUnicodeEscape
+syn keyword cssPseudoClassId link visited active hover focus before after left right lang
 syn match cssPseudoClassId contained "\<first\(-\(line\|letter\|child\)\)\=\>"
-syn region cssPseudoClassLang matchgroup=cssPseudoClassId start=":lang(" end=")" oneline
-
+" FIXME: handle functions.
+"syn region cssPseudoClassLang matchgroup=cssPseudoClassId start="lang(" end=")"
+syn match cssPseudoClassId contained "\<\(last\|only\|nth\|nth-last\)-child\>"
+syn match cssPseudoClassId contained "\<\(first\|last\|only\|nth\|nth-last\)-of-type\>"
+syn keyword cssPseudoClassId root empty target enable disabled checked not invalid
+syn match cssPseudoClassId contained  "::\(-moz-\)\=selection"
+
+" Comment
 syn region cssComment start="/\*" end="\*/" contains=@Spell
+syn region cssComment start="//" skip="\\$" end="$" keepend contains=@Spell
 
 syn match cssUnicodeEscape "\\\x\{1,6}\s\?"
 syn match cssSpecialCharQQ +\\"+ contained
 syn match cssSpecialCharQ +\\'+ contained
 syn region cssStringQQ start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cssUnicodeEscape,cssSpecialCharQQ
 syn region cssStringQ start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=cssUnicodeEscape,cssSpecialCharQ
-syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+"
+
+" Vendor Prefix
+syn match cssVendor contained "\(-\(webkit\|moz\|o\|ms\)-\)"
+
 
 if main_syntax == "css"
   syn sync minlines=10
@@ -212,31 +376,75 @@ if version >= 508 || !exists("did_css_syn_inits")
   endif
 
   HiLink cssComment Comment
+  HiLink cssVendor Comment
   HiLink cssTagName Statement
+  HiLink cssDeprecated Error
   HiLink cssSelectorOp Special
   HiLink cssSelectorOp2 Special
-  HiLink cssFontProp StorageClass
-  HiLink cssColorProp StorageClass
-  HiLink cssTextProp StorageClass
+
+  HiLink cssAnimationProp StorageClass
+  HiLink cssBackgroundProp StorageClass
+  HiLink cssBorderOutlineProp StorageClass
   HiLink cssBoxProp StorageClass
-  HiLink cssRenderProp StorageClass
-  HiLink cssAuralProp StorageClass
-  HiLink cssRenderProp StorageClass
+  HiLink cssColorProp StorageClass
+  HiLink cssContentForPagedMediaProp StorageClass
+  HiLink cssDimensionProp StorageClass
+  HiLink cssFlexibleBoxProp StorageClass
+  HiLink cssFontProp StorageClass
   HiLink cssGeneratedContentProp StorageClass
-  HiLink cssPagingProp StorageClass
+  HiLink cssGridProp StorageClass
+  HiLink cssHyerlinkProp StorageClass
+  HiLink cssLineboxProp StorageClass
+  HiLink cssListProp StorageClass
+  HiLink cssMarginProp StorageClass
+  HiLink cssMarqueeProp StorageClass
+  HiLink cssMultiColumnProp StorageClass
+  HiLink cssPaddingProp StorageClass
+  HiLink cssPagedMediaProp StorageClass
+  HiLink cssPositioningProp StorageClass
+  HiLink cssPrintProp StorageClass
+  HiLink cssRubyProp StorageClass
+  HiLink cssSpeechProp StorageClass
   HiLink cssTableProp StorageClass
+  HiLink cssTextProp StorageClass
+  HiLink cssTransformProp StorageClass
+  HiLink cssTransitionProp StorageClass
   HiLink cssUIProp StorageClass
-  HiLink cssFontAttr Type
-  HiLink cssColorAttr Type
-  HiLink cssTextAttr Type
+  HiLink cssAuralProp StorageClass
+  HiLink cssRenderProp StorageClass
+
+  HiLink cssAnimationAttr Type
+  HiLink cssBackgroundAttr Type
+  HiLink cssBorderOutlineAttr Type
   HiLink cssBoxAttr Type
-  HiLink cssRenderAttr Type
-  HiLink cssAuralAttr Type
+  HiLink cssColorAttr Type
+  HiLink cssContentForPagedMediaAttr Type
+  HiLink cssDimensionAttr Type
+  HiLink cssFlexibleBoxAttr Type
+  HiLink cssFontAttr Type
   HiLink cssGeneratedContentAttr Type
-  HiLink cssPagingAttr Type
+  HiLink cssGridAttr Type
+  HiLink cssHyerlinkAttr Type
+  HiLink cssLineboxAttr Type
+  HiLink cssListAttr Type
+  HiLink cssMarginAttr Type
+  HiLink cssMarqueeAttr Type
+  HiLink cssMultiColumnAttr Type
+  HiLink cssPaddingAttr Type
+  HiLink cssPagedMediaAttr Type
+  HiLink cssPositioningAttr Type
+  HiLink cssPrintAttr Type
+  HiLink cssRubyAttr Type
+  HiLink cssSpeechAttr Type
   HiLink cssTableAttr Type
+  HiLink cssTextAttr Type
+  HiLink cssTransformAttr Type
+  HiLink cssTransitionAttr Type
   HiLink cssUIAttr Type
+  HiLink cssAuralAttr Type
+  HiLink cssRenderAttr Type
   HiLink cssCommonAttr Type
+
   HiLink cssPseudoClassId PreProc
   HiLink cssPseudoClassLang Constant
   HiLink cssValueLength Number
@@ -277,6 +485,7 @@ if main_syntax == 'css'
   unlet main_syntax
 endif
 
-
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
 
index d852681..f1ef299 100644 (file)
@@ -2,60 +2,72 @@
 " Language:     Cucumber
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:    *.feature
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 if exists("b:current_syntax")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case match
 syn sync minlines=20
 
 let g:cucumber_languages = {
-      \"en": {"and": "And\\>", "background": "Background\\>", "but": "But\\>", "examples": "Scenarios\\>\\|Examples\\>", "feature": "Feature\\>", "given": "Given\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Outline\\>", "then": "Then\\>", "when": "When\\>"},
+      \"en": {"and": "And\\>", "background": "Background\\>", "but": "But\\>", "examples": "Scenarios\\>\\|Examples\\>", "feature": "Business Need\\>\\|Feature\\>\\|Ability\\>", "given": "Given\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Template\\>\\|Scenario Outline\\>", "then": "Then\\>", "when": "When\\>"},
       \"ar": {"and": "\\%u0648\\>", "background": "\\%u0627\\%u0644\\%u062e\\%u0644\\%u0641\\%u064a\\%u0629\\>", "but": "\\%u0644\\%u0643\\%u0646\\>", "examples": "\\%u0627\\%u0645\\%u062b\\%u0644\\%u0629\\>", "feature": "\\%u062e\\%u0627\\%u0635\\%u064a\\%u0629\\>", "given": "\\%u0628\\%u0641\\%u0631\\%u0636\\>", "scenario": "\\%u0633\\%u064a\\%u0646\\%u0627\\%u0631\\%u064a\\%u0648\\>", "scenario_outline": "\\%u0633\\%u064a\\%u0646\\%u0627\\%u0631\\%u064a\\%u0648 \\%u0645\\%u062e\\%u0637\\%u0637\\>", "then": "\\%u0627\\%u0630\\%u0627\\%u064b\\>\\|\\%u062b\\%u0645\\>", "when": "\\%u0639\\%u0646\\%u062f\\%u0645\\%u0627\\>\\|\\%u0645\\%u062a\\%u0649\\>"},
       \"bg": {"and": "\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u0438\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>", "but": "\\%u041d\\%u043e\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442\\>", "given": "\\%u0414\\%u0430\\%u0434\\%u0435\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0420\\%u0430\\%u043c\\%u043a\\%u0430 \\%u043d\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "then": "\\%u0422\\%u043e\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0430\\%u0442\\%u043e\\>"},
+      \"bm": {"and": "Dan\\>", "background": "Latar Belakang\\>", "but": "Tetapi\\>", "examples": "Contoh \\>", "feature": "Fungsi\\>", "given": "Bagi\\>", "scenario": "Senario\\>", "scenario_outline": "Menggariskan Senario \\>", "then": "Kemudian\\>", "when": "Apabila\\>"},
       \"ca": {"and": "I\\>", "background": "Antecedents\\>\\|Rerefons\\>", "but": "Per\\%u00f2\\>", "examples": "Exemples\\>", "feature": "Caracter\\%u00edstica\\>\\|Funcionalitat\\>", "given": "At\\%u00e8s\\>\\|Donada\\>\\|Donat\\>\\|Atesa\\>", "scenario": "Escenari\\>", "scenario_outline": "Esquema de l'escenari\\>", "then": "Aleshores\\>\\|Cal\\>", "when": "Quan\\>"},
-      \"cs": {"and": "A tak\\%u00e9\\>\\|A\\>", "background": "Pozad\\%u00ed\\>\\|Kontext\\>", "but": "Ale\\>", "examples": "P\\%u0159\\%u00edklady\\>", "feature": "Po\\%u017eadavek\\>", "given": "Pokud\\>", "scenario": "Sc\\%u00e9n\\%u00e1\\%u0159\\>", "scenario_outline": "N\\%u00e1\\%u010drt Sc\\%u00e9n\\%u00e1\\%u0159e\\>\\|Osnova sc\\%u00e9n\\%u00e1\\%u0159e\\>", "then": "Pak\\>", "when": "Kdy\\%u017e\\>"},
+      \"cs": {"and": "A tak\\%u00e9\\>\\|A\\>", "background": "Pozad\\%u00ed\\>\\|Kontext\\>", "but": "Ale\\>", "examples": "P\\%u0159\\%u00edklady\\>", "feature": "Po\\%u017eadavek\\>", "given": "Za p\\%u0159edpokladu\\>\\|Pokud\\>", "scenario": "Sc\\%u00e9n\\%u00e1\\%u0159\\>", "scenario_outline": "N\\%u00e1\\%u010drt Sc\\%u00e9n\\%u00e1\\%u0159e\\>\\|Osnova sc\\%u00e9n\\%u00e1\\%u0159e\\>", "then": "Pak\\>", "when": "Kdy\\%u017e\\>"},
       \"cy-GB": {"and": "A\\>", "background": "Cefndir\\>", "but": "Ond\\>", "examples": "Enghreifftiau\\>", "feature": "Arwedd\\>", "given": "Anrhegedig a\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Amlinellol\\>", "then": "Yna\\>", "when": "Pryd\\>"},
       \"da": {"and": "Og\\>", "background": "Baggrund\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskab\\>", "given": "Givet\\>", "scenario": "Scenarie\\>", "scenario_outline": "Abstrakt Scenario\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
       \"de": {"and": "Und\\>", "background": "Grundlage\\>", "but": "Aber\\>", "examples": "Beispiele\\>", "feature": "Funktionalit\\%u00e4t\\>", "given": "Gegeben sei\\>\\|Angenommen\\>", "scenario": "Szenario\\>", "scenario_outline": "Szenariogrundriss\\>", "then": "Dann\\>", "when": "Wenn\\>"},
+      \"el": {"and": "\\%u039a\\%u03b1\\%u03b9\\>", "background": "\\%u03a5\\%u03c0\\%u03cc\\%u03b2\\%u03b1\\%u03b8\\%u03c1\\%u03bf\\>", "but": "\\%u0391\\%u03bb\\%u03bb\\%u03ac\\>", "examples": "\\%u03a0\\%u03b1\\%u03c1\\%u03b1\\%u03b4\\%u03b5\\%u03af\\%u03b3\\%u03bc\\%u03b1\\%u03c4\\%u03b1\\>\\|\\%u03a3\\%u03b5\\%u03bd\\%u03ac\\%u03c1\\%u03b9\\%u03b1\\>", "feature": "\\%u0394\\%u03c5\\%u03bd\\%u03b1\\%u03c4\\%u03cc\\%u03c4\\%u03b7\\%u03c4\\%u03b1\\>\\|\\%u039b\\%u03b5\\%u03b9\\%u03c4\\%u03bf\\%u03c5\\%u03c1\\%u03b3\\%u03af\\%u03b1\\>", "given": "\\%u0394\\%u03b5\\%u03b4\\%u03bf\\%u03bc\\%u03ad\\%u03bd\\%u03bf\\%u03c5 \\%u03cc\\%u03c4\\%u03b9\\>\\|\\%u0394\\%u03b5\\%u03b4\\%u03bf\\%u03bc\\%u03ad\\%u03bd\\%u03bf\\%u03c5\\>", "scenario": "\\%u03a3\\%u03b5\\%u03bd\\%u03ac\\%u03c1\\%u03b9\\%u03bf\\>", "scenario_outline": "\\%u03a0\\%u03b5\\%u03c1\\%u03b9\\%u03b3\\%u03c1\\%u03b1\\%u03c6\\%u03ae \\%u03a3\\%u03b5\\%u03bd\\%u03b1\\%u03c1\\%u03af\\%u03bf\\%u03c5\\>", "then": "\\%u03a4\\%u03cc\\%u03c4\\%u03b5\\>", "when": "\\%u038c\\%u03c4\\%u03b1\\%u03bd\\>"},
       \"en-Scouse": {"and": "An\\>", "background": "Dis is what went down\\>", "but": "Buh\\>", "examples": "Examples\\>", "feature": "Feature\\>", "given": "Youse know when youse got\\>\\|Givun\\>", "scenario": "The thing of it is\\>", "scenario_outline": "Wharrimean is\\>", "then": "Den youse gotta\\>\\|Dun\\>", "when": "Youse know like when\\>\\|Wun\\>"},
-      \"en-au": {"and": "N\\>", "background": "Background\\>", "but": "Cept\\>", "examples": "Cobber\\>", "feature": "Crikey\\>", "given": "Ya know how\\>", "scenario": "Mate\\>", "scenario_outline": "Blokes\\>", "then": "Ya gotta\\>", "when": "When\\>"},
+      \"en-au": {"and": "Too right\\>", "background": "First off\\>", "but": "Yeah nah\\>", "examples": "You'll wanna\\>", "feature": "Pretty much\\>", "given": "Y'know\\>", "scenario": "Awww, look mate\\>", "scenario_outline": "Reckon it's like\\>", "then": "But at the end of the day I reckon\\>", "when": "It's just unbelievable\\>"},
       \"en-lol": {"and": "AN\\>", "background": "B4\\>", "but": "BUT\\>", "examples": "EXAMPLZ\\>", "feature": "OH HAI\\>", "given": "I CAN HAZ\\>", "scenario": "MISHUN\\>", "scenario_outline": "MISHUN SRSLY\\>", "then": "DEN\\>", "when": "WEN\\>"},
+      \"en-old": {"and": "Ond\\>\\|7\\>", "background": "\\%u00c6r\\>\\|Aer\\>", "but": "Ac\\>", "examples": "Se \\%u00f0e\\>\\|Se \\%u00fee\\>\\|Se the\\>", "feature": "Hw\\%u00e6t\\>\\|Hwaet\\>", "given": "\\%u00d0urh\\>\\|\\%u00deurh\\>\\|Thurh\\>", "scenario": "Swa\\>", "scenario_outline": "Swa hw\\%u00e6r swa\\>\\|Swa hwaer swa\\>", "then": "\\%u00d0a \\%u00f0e\\>\\|\\%u00dea \\%u00fee\\>\\|\\%u00dea\\>\\|\\%u00d0a\\>\\|Tha the\\>\\|Tha\\>", "when": "\\%u00d0a\\>\\|\\%u00dea\\>\\|Tha\\>"},
+      \"en-pirate": {"and": "Aye\\>", "background": "Yo-ho-ho\\>", "but": "Avast!\\>", "examples": "Dead men tell no tales\\>", "feature": "Ahoy matey!\\>", "given": "Gangway!\\>", "scenario": "Heave to\\>", "scenario_outline": "Shiver me timbers\\>", "then": "Let go and haul\\>", "when": "Blimey!\\>"},
       \"en-tx": {"and": "And y'all\\>", "background": "Background\\>", "but": "But y'all\\>", "examples": "Examples\\>", "feature": "Feature\\>", "given": "Given y'all\\>", "scenario": "Scenario\\>", "scenario_outline": "All y'all\\>", "then": "Then y'all\\>", "when": "When y'all\\>"},
       \"eo": {"and": "Kaj\\>", "background": "Fono\\>", "but": "Sed\\>", "examples": "Ekzemploj\\>", "feature": "Trajto\\>", "given": "Donita\\%u0135o\\>", "scenario": "Scenaro\\>", "scenario_outline": "Konturo de la scenaro\\>", "then": "Do\\>", "when": "Se\\>"},
-      \"es": {"and": "Y\\>", "background": "Antecedentes\\>", "but": "Pero\\>", "examples": "Ejemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esquema del escenario\\>", "then": "Entonces\\>", "when": "Cuando\\>"},
+      \"es": {"and": "Y\\>", "background": "Antecedentes\\>", "but": "Pero\\>", "examples": "Ejemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esquema del escenario\\>", "then": "Entonces\\>", "when": "Cuando\\>"},
       \"et": {"and": "Ja\\>", "background": "Taust\\>", "but": "Kuid\\>", "examples": "Juhtumid\\>", "feature": "Omadus\\>", "given": "Eeldades\\>", "scenario": "Stsenaarium\\>", "scenario_outline": "Raamstsenaarium\\>", "then": "Siis\\>", "when": "Kui\\>"},
+      \"fa": {"and": "\\%u0648\\>", "background": "\\%u0632\\%u0645\\%u06cc\\%u0646\\%u0647\\>", "but": "\\%u0627\\%u0645\\%u0627\\>", "examples": "\\%u0646\\%u0645\\%u0648\\%u0646\\%u0647 \\%u0647\\%u0627\\>", "feature": "\\%u0648\\%u0650\\%u06cc\\%u0698\\%u06af\\%u06cc\\>", "given": "\\%u0628\\%u0627 \\%u0641\\%u0631\\%u0636\\>", "scenario": "\\%u0633\\%u0646\\%u0627\\%u0631\\%u06cc\\%u0648\\>", "scenario_outline": "\\%u0627\\%u0644\\%u06af\\%u0648\\%u06cc \\%u0633\\%u0646\\%u0627\\%u0631\\%u06cc\\%u0648\\>", "then": "\\%u0622\\%u0646\\%u06af\\%u0627\\%u0647\\>", "when": "\\%u0647\\%u0646\\%u06af\\%u0627\\%u0645\\%u06cc\\>"},
       \"fi": {"and": "Ja\\>", "background": "Tausta\\>", "but": "Mutta\\>", "examples": "Tapaukset\\>", "feature": "Ominaisuus\\>", "given": "Oletetaan\\>", "scenario": "Tapaus\\>", "scenario_outline": "Tapausaihio\\>", "then": "Niin\\>", "when": "Kun\\>"},
-      \"fr": {"and": "Et\\>", "background": "Contexte\\>", "but": "Mais\\>", "examples": "Exemples\\>", "feature": "Fonctionnalit\\%u00e9\\>", "given": "Etant donn\\%u00e9\\>\\|Soit\\>", "scenario": "Sc\\%u00e9nario\\>", "scenario_outline": "Plan du sc\\%u00e9nario\\>\\|Plan du Sc\\%u00e9nario\\>", "then": "Alors\\>", "when": "Lorsqu'\\|Lorsque\\>\\|Quand\\>"},
+      \"fr": {"and": "Et\\>", "background": "Contexte\\>", "but": "Mais\\>", "examples": "Exemples\\>", "feature": "Fonctionnalit\\%u00e9\\>", "given": "\\%u00c9tant donn\\%u00e9es\\>\\|\\%u00c9tant donn\\%u00e9s\\>\\|\\%u00c9tant donn\\%u00e9e\\>\\|\\%u00c9tant donn\\%u00e9\\>\\|Etant donn\\%u00e9es\\>\\|Etant donn\\%u00e9s\\>\\|Etant donn\\%u00e9e\\>\\|Etant donn\\%u00e9\\>\\|Soit\\>", "scenario": "Sc\\%u00e9nario\\>", "scenario_outline": "Plan du sc\\%u00e9nario\\>\\|Plan du Sc\\%u00e9nario\\>", "then": "Alors\\>", "when": "Lorsqu'\\|Lorsque\\>\\|Quand\\>"},
+      \"gl": {"and": "E\\>", "background": "Contexto\\>", "but": "Mais\\>\\|Pero\\>", "examples": "Exemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esbozo do escenario\\>", "then": "Ent\\%u00f3n\\>\\|Logo\\>", "when": "Cando\\>"},
       \"he": {"and": "\\%u05d5\\%u05d2\\%u05dd\\>", "background": "\\%u05e8\\%u05e7\\%u05e2\\>", "but": "\\%u05d0\\%u05d1\\%u05dc\\>", "examples": "\\%u05d3\\%u05d5\\%u05d2\\%u05de\\%u05d0\\%u05d5\\%u05ea\\>", "feature": "\\%u05ea\\%u05db\\%u05d5\\%u05e0\\%u05d4\\>", "given": "\\%u05d1\\%u05d4\\%u05d9\\%u05e0\\%u05ea\\%u05df\\>", "scenario": "\\%u05ea\\%u05e8\\%u05d7\\%u05d9\\%u05e9\\>", "scenario_outline": "\\%u05ea\\%u05d1\\%u05e0\\%u05d9\\%u05ea \\%u05ea\\%u05e8\\%u05d7\\%u05d9\\%u05e9\\>", "then": "\\%u05d0\\%u05d6\\%u05d9\\>\\|\\%u05d0\\%u05d6\\>", "when": "\\%u05db\\%u05d0\\%u05e9\\%u05e8\\>"},
+      \"hi": {"and": "\\%u0924\\%u0925\\%u093e\\>\\|\\%u0914\\%u0930\\>", "background": "\\%u092a\\%u0943\\%u0937\\%u094d\\%u0920\\%u092d\\%u0942\\%u092e\\%u093f\\>", "but": "\\%u092a\\%u0930\\>", "examples": "\\%u0909\\%u0926\\%u093e\\%u0939\\%u0930\\%u0923\\>", "feature": "\\%u0930\\%u0942\\%u092a \\%u0932\\%u0947\\%u0916\\>", "given": "\\%u091a\\%u0942\\%u0902\\%u0915\\%u093f\\>\\|\\%u092f\\%u0926\\%u093f\\>\\|\\%u0905\\%u0917\\%u0930\\>", "scenario": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f\\>", "scenario_outline": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f \\%u0930\\%u0942\\%u092a\\%u0930\\%u0947\\%u0916\\%u093e\\>", "then": "\\%u0924\\%u092c\\>", "when": "\\%u091c\\%u092c\\>"},
       \"hr": {"and": "I\\>", "background": "Pozadina\\>", "but": "Ali\\>", "examples": "Scenariji\\>\\|Primjeri\\>", "feature": "Mogu\\%u0107nost\\>\\|Mogucnost\\>\\|Osobina\\>", "given": "Zadano\\>\\|Zadani\\>\\|Zadan\\>", "scenario": "Scenarij\\>", "scenario_outline": "Koncept\\>\\|Skica\\>", "then": "Onda\\>", "when": "Kada\\>\\|Kad\\>"},
-      \"hu": {"and": "\\%u00c9s\\>", "background": "H\\%u00e1tt\\%u00e9r\\>", "but": "De\\>", "examples": "P\\%u00e9ld\\%u00e1k\\>", "feature": "Jellemz\\%u0151\\>", "given": "Ha\\>", "scenario": "Forgat\\%u00f3k\\%u00f6nyv\\>", "scenario_outline": "Forgat\\%u00f3k\\%u00f6nyv v\\%u00e1zlat\\>", "then": "Akkor\\>", "when": "Majd\\>"},
+      \"hu": {"and": "\\%u00c9s\\>", "background": "H\\%u00e1tt\\%u00e9r\\>", "but": "De\\>", "examples": "P\\%u00e9ld\\%u00e1k\\>", "feature": "Jellemz\\%u0151\\>", "given": "Amennyiben\\>\\|Adott\\>", "scenario": "Forgat\\%u00f3k\\%u00f6nyv\\>", "scenario_outline": "Forgat\\%u00f3k\\%u00f6nyv v\\%u00e1zlat\\>", "then": "Akkor\\>", "when": "Amikor\\>\\|Majd\\>\\|Ha\\>"},
       \"id": {"and": "Dan\\>", "background": "Dasar\\>", "but": "Tapi\\>", "examples": "Contoh\\>", "feature": "Fitur\\>", "given": "Dengan\\>", "scenario": "Skenario\\>", "scenario_outline": "Skenario konsep\\>", "then": "Maka\\>", "when": "Ketika\\>"},
-      \"it": {"and": "E\\>", "background": "Contesto\\>", "but": "Ma\\>", "examples": "Esempi\\>", "feature": "Funzionalit\\%u00e0\\>", "given": "Dato\\>", "scenario": "Scenario\\>", "scenario_outline": "Schema dello scenario\\>", "then": "Allora\\>", "when": "Quando\\>"},
+      \"is": {"and": "Og\\>", "background": "Bakgrunnur\\>", "but": "En\\>", "examples": "Atbur\\%u00f0ar\\%u00e1sir\\>\\|D\\%u00e6mi\\>", "feature": "Eiginleiki\\>", "given": "Ef\\>", "scenario": "Atbur\\%u00f0ar\\%u00e1s\\>", "scenario_outline": "L\\%u00fdsing Atbur\\%u00f0ar\\%u00e1sar\\>\\|L\\%u00fdsing D\\%u00e6ma\\>", "then": "\\%u00de\\%u00e1\\>", "when": "\\%u00deegar\\>"},
+      \"it": {"and": "E\\>", "background": "Contesto\\>", "but": "Ma\\>", "examples": "Esempi\\>", "feature": "Funzionalit\\%u00e0\\>", "given": "Dato\\>\\|Data\\>\\|Dati\\>\\|Date\\>", "scenario": "Scenario\\>", "scenario_outline": "Schema dello scenario\\>", "then": "Allora\\>", "when": "Quando\\>"},
       \"ja": {"and": "\\%u304b\\%u3064", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u3057\\%u304b\\%u3057\\|\\%u305f\\%u3060\\%u3057\\|\\%u4f46\\%u3057", "examples": "\\%u30b5\\%u30f3\\%u30d7\\%u30eb\\>\\|\\%u4f8b\\>", "feature": "\\%u30d5\\%u30a3\\%u30fc\\%u30c1\\%u30e3\\>\\|\\%u6a5f\\%u80fd\\>", "given": "\\%u524d\\%u63d0", "scenario": "\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\>", "scenario_outline": "\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30a2\\%u30a6\\%u30c8\\%u30e9\\%u30a4\\%u30f3\\>\\|\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\%u30fc\\%u30c8\\>\\|\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\>\\|\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\>", "then": "\\%u306a\\%u3089\\%u3070", "when": "\\%u3082\\%u3057"},
       \"ko": {"and": "\\%uadf8\\%ub9ac\\%uace0", "background": "\\%ubc30\\%uacbd\\>", "but": "\\%ud558\\%uc9c0\\%ub9cc\\|\\%ub2e8", "examples": "\\%uc608\\>", "feature": "\\%uae30\\%ub2a5\\>", "given": "\\%uc870\\%uac74\\|\\%uba3c\\%uc800", "scenario": "\\%uc2dc\\%ub098\\%ub9ac\\%uc624\\>", "scenario_outline": "\\%uc2dc\\%ub098\\%ub9ac\\%uc624 \\%uac1c\\%uc694\\>", "then": "\\%uadf8\\%ub7ec\\%uba74", "when": "\\%ub9cc\\%uc77c\\|\\%ub9cc\\%uc57d"},
       \"lt": {"and": "Ir\\>", "background": "Kontekstas\\>", "but": "Bet\\>", "examples": "Pavyzd\\%u017eiai\\>\\|Scenarijai\\>\\|Variantai\\>", "feature": "Savyb\\%u0117\\>", "given": "Duota\\>", "scenario": "Scenarijus\\>", "scenario_outline": "Scenarijaus \\%u0161ablonas\\>", "then": "Tada\\>", "when": "Kai\\>"},
       \"lu": {"and": "an\\>\\|a\\>", "background": "Hannergrond\\>", "but": "m\\%u00e4\\>\\|awer\\>", "examples": "Beispiller\\>", "feature": "Funktionalit\\%u00e9it\\>", "given": "ugeholl\\>", "scenario": "Szenario\\>", "scenario_outline": "Plang vum Szenario\\>", "then": "dann\\>", "when": "wann\\>"},
       \"lv": {"and": "Un\\>", "background": "Situ\\%u0101cija\\>\\|Konteksts\\>", "but": "Bet\\>", "examples": "Piem\\%u0113ri\\>\\|Paraugs\\>", "feature": "Funkcionalit\\%u0101te\\>\\|F\\%u012b\\%u010da\\>", "given": "Kad\\>", "scenario": "Scen\\%u0101rijs\\>", "scenario_outline": "Scen\\%u0101rijs p\\%u0113c parauga\\>", "then": "Tad\\>", "when": "Ja\\>"},
       \"nl": {"and": "En\\>", "background": "Achtergrond\\>", "but": "Maar\\>", "examples": "Voorbeelden\\>", "feature": "Functionaliteit\\>", "given": "Gegeven\\>\\|Stel\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstract Scenario\\>", "then": "Dan\\>", "when": "Als\\>"},
-      \"no": {"and": "Og\\>", "background": "Bakgrunn\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskap\\>", "given": "Gitt\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
-      \"pl": {"and": "Oraz\\>", "background": "Za\\%u0142o\\%u017cenia\\>", "but": "Ale\\>", "examples": "Przyk\\%u0142ady\\>", "feature": "W\\%u0142a\\%u015bciwo\\%u015b\\%u0107\\>", "given": "Zak\\%u0142adaj\\%u0105c\\>", "scenario": "Scenariusz\\>", "scenario_outline": "Szablon scenariusza\\>", "then": "Wtedy\\>", "when": "Je\\%u017celi\\>"},
-      \"pt": {"and": "E\\>", "background": "Contexto\\>", "but": "Mas\\>", "examples": "Exemplos\\>", "feature": "Funcionalidade\\>", "given": "Dado\\>", "scenario": "Cen\\%u00e1rio\\>\\|Cenario\\>", "scenario_outline": "Esquema do Cen\\%u00e1rio\\>\\|Esquema do Cenario\\>", "then": "Ent\\%u00e3o\\>\\|Entao\\>", "when": "Quando\\>"},
-      \"ro": {"and": "Si\\>", "background": "Conditii\\>", "but": "Dar\\>", "examples": "Exemplele\\>", "feature": "Functionalitate\\>", "given": "Daca\\>", "scenario": "Scenariu\\>", "scenario_outline": "Scenariul de sablon\\>", "then": "Atunci\\>", "when": "Cand\\>"},
-      \"ro-RO": {"and": "\\%u0218i\\>", "background": "Condi\\%u0163ii\\>", "but": "Dar\\>", "examples": "Exemplele\\>", "feature": "Func\\%u021bionalitate\\>", "given": "Dac\\%u0103\\>", "scenario": "Scenariu\\>", "scenario_outline": "Scenariul de \\%u015fablon\\>", "then": "Atunci\\>", "when": "C\\%u00e2nd\\>"},
-      \"ru": {"and": "\\%u041a \\%u0442\\%u043e\\%u043c\\%u0443 \\%u0436\\%u0435\\>\\|\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u044b\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>", "but": "\\%u041d\\%u043e\\>\\|\\%u0410\\>", "examples": "\\%u0417\\%u043d\\%u0430\\%u0447\\%u0435\\%u043d\\%u0438\\%u044f\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>\\|\\%u0424\\%u0438\\%u0447\\%u0430\\>", "given": "\\%u0414\\%u043e\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u044f\\>", "then": "\\%u0422\\%u043e\\>", "when": "\\%u0415\\%u0441\\%u043b\\%u0438\\>"},
-      \"sk": {"and": "A\\>", "background": "Pozadie\\>", "but": "Ale\\>", "examples": "Pr\\%u00edklady\\>", "feature": "Po\\%u017eiadavka\\>", "given": "Pokia\\%u013e\\>", "scenario": "Scen\\%u00e1r\\>", "scenario_outline": "N\\%u00e1\\%u010drt Scen\\%u00e1ru\\>", "then": "Tak\\>", "when": "Ke\\%u010f\\>"},
+      \"no": {"and": "Og\\>", "background": "Bakgrunn\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskap\\>", "given": "Gitt\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>\\|Scenariomal\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
+      \"pl": {"and": "Oraz\\>\\|I\\>", "background": "Za\\%u0142o\\%u017cenia\\>", "but": "Ale\\>", "examples": "Przyk\\%u0142ady\\>", "feature": "W\\%u0142a\\%u015bciwo\\%u015b\\%u0107\\>\\|Potrzeba biznesowa\\>\\|Funkcja\\>\\|Aspekt\\>", "given": "Zak\\%u0142adaj\\%u0105c\\>\\|Maj\\%u0105c\\>", "scenario": "Scenariusz\\>", "scenario_outline": "Szablon scenariusza\\>", "then": "Wtedy\\>", "when": "Je\\%u017celi\\>\\|Je\\%u015bli\\>\\|Kiedy\\>\\|Gdy\\>"},
+      \"pt": {"and": "E\\>", "background": "Cen\\%u00e1rio de Fundo\\>\\|Cenario de Fundo\\>\\|Contexto\\>\\|Fundo\\>", "but": "Mas\\>", "examples": "Cen\\%u00e1rios\\>\\|Exemplos\\>\\|Cenarios\\>", "feature": "Caracter\\%u00edstica\\>\\|Funcionalidade\\>\\|Caracteristica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Cen\\%u00e1rio\\>\\|Cenario\\>", "scenario_outline": "Delinea\\%u00e7\\%u00e3o do Cen\\%u00e1rio\\>\\|Esquema do Cen\\%u00e1rio\\>\\|Delineacao do Cenario\\>\\|Esquema do Cenario\\>", "then": "Ent\\%u00e3o\\>\\|Entao\\>", "when": "Quando\\>"},
+      \"ro": {"and": "\\%u015ei\\>\\|\\%u0218i\\>\\|Si\\>", "background": "Context\\>", "but": "Dar\\>", "examples": "Exemple\\>", "feature": "Func\\%u0163ionalitate\\>\\|Func\\%u021bionalitate\\>\\|Functionalitate\\>", "given": "Da\\%u0163i fiind\\>\\|Da\\%u021bi fiind\\>\\|Dati fiind\\>\\|Date fiind\\>\\|Dat fiind\\>", "scenario": "Scenariu\\>", "scenario_outline": "Structur\\%u0103 scenariu\\>\\|Structura scenariu\\>", "then": "Atunci\\>", "when": "C\\%u00e2nd\\>\\|Cand\\>"},
+      \"ru": {"and": "\\%u041a \\%u0442\\%u043e\\%u043c\\%u0443 \\%u0436\\%u0435\\>\\|\\%u0422\\%u0430\\%u043a\\%u0436\\%u0435\\>\\|\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u044b\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>\\|\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442\\>", "but": "\\%u041d\\%u043e\\>\\|\\%u0410\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u044b\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>\\|\\%u0421\\%u0432\\%u043e\\%u0439\\%u0441\\%u0442\\%u0432\\%u043e\\>\\|\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u044f\\>", "given": "\\%u0414\\%u043e\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\>\\|\\%u041f\\%u0443\\%u0441\\%u0442\\%u044c\\>\\|\\%u0414\\%u0430\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u044f\\>", "then": "\\%u0422\\%u043e\\%u0433\\%u0434\\%u0430\\>\\|\\%u0422\\%u043e\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0434\\%u0430\\>\\|\\%u0415\\%u0441\\%u043b\\%u0438\\>"},
+      \"sk": {"and": "A z\\%u00e1rove\\%u0148\\>\\|A taktie\\%u017e\\>\\|A tie\\%u017e\\>\\|A\\>", "background": "Pozadie\\>", "but": "Ale\\>", "examples": "Pr\\%u00edklady\\>", "feature": "Po\\%u017eiadavka\\>\\|Vlastnos\\%u0165\\>\\|Funkcia\\>", "given": "Za predpokladu\\>\\|Pokia\\%u013e\\>", "scenario": "Scen\\%u00e1r\\>", "scenario_outline": "N\\%u00e1\\%u010drt Scen\\%u00e1ru\\>\\|N\\%u00e1\\%u010drt Scen\\%u00e1ra\\>\\|Osnova Scen\\%u00e1ra\\>", "then": "Potom\\>\\|Tak\\>", "when": "Ke\\%u010f\\>\\|Ak\\>"},
       \"sr-Cyrl": {"and": "\\%u0418\\>", "background": "\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442\\>\\|\\%u041f\\%u043e\\%u0437\\%u0430\\%u0434\\%u0438\\%u043d\\%u0430\\>\\|\\%u041e\\%u0441\\%u043d\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0438\\>", "examples": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0438\\>\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442\\>\\|\\%u041c\\%u043e\\%u0433\\%u0443\\%u045b\\%u043d\\%u043e\\%u0441\\%u0442\\>\\|\\%u041e\\%u0441\\%u043e\\%u0431\\%u0438\\%u043d\\%u0430\\>", "given": "\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u043e\\>\\|\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u0435\\>\\|\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u0438\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0430\\>\\|\\%u041a\\%u043e\\%u043d\\%u0446\\%u0435\\%u043f\\%u0442\\>\\|\\%u0421\\%u043a\\%u0438\\%u0446\\%u0430\\>", "then": "\\%u041e\\%u043d\\%u0434\\%u0430\\>", "when": "\\%u041a\\%u0430\\%u0434\\%u0430\\>\\|\\%u041a\\%u0430\\%u0434\\>"},
       \"sr-Latn": {"and": "I\\>", "background": "Kontekst\\>\\|Pozadina\\>\\|Osnova\\>", "but": "Ali\\>", "examples": "Scenariji\\>\\|Primeri\\>", "feature": "Mogu\\%u0107nost\\>\\|Funkcionalnost\\>\\|Mogucnost\\>\\|Osobina\\>", "given": "Zadato\\>\\|Zadate\\>\\|Zatati\\>", "scenario": "Scenario\\>\\|Primer\\>", "scenario_outline": "Struktura scenarija\\>\\|Koncept\\>\\|Skica\\>", "then": "Onda\\>", "when": "Kada\\>\\|Kad\\>"},
-      \"sv": {"and": "Och\\>", "background": "Bakgrund\\>", "but": "Men\\>", "examples": "Exempel\\>", "feature": "Egenskap\\>", "given": "Givet\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e4r\\>"},
+      \"sv": {"and": "Och\\>", "background": "Bakgrund\\>", "but": "Men\\>", "examples": "Exempel\\>", "feature": "Egenskap\\>", "given": "Givet\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>\\|Scenariomall\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e4r\\>"},
+      \"th": {"and": "\\%u0e41\\%u0e25\\%u0e30\\>", "background": "\\%u0e41\\%u0e19\\%u0e27\\%u0e04\\%u0e34\\%u0e14\\>", "but": "\\%u0e41\\%u0e15\\%u0e48\\>", "examples": "\\%u0e0a\\%u0e38\\%u0e14\\%u0e02\\%u0e2d\\%u0e07\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>\\|\\%u0e0a\\%u0e38\\%u0e14\\%u0e02\\%u0e2d\\%u0e07\\%u0e15\\%u0e31\\%u0e27\\%u0e2d\\%u0e22\\%u0e48\\%u0e32\\%u0e07\\>", "feature": "\\%u0e04\\%u0e27\\%u0e32\\%u0e21\\%u0e15\\%u0e49\\%u0e2d\\%u0e07\\%u0e01\\%u0e32\\%u0e23\\%u0e17\\%u0e32\\%u0e07\\%u0e18\\%u0e38\\%u0e23\\%u0e01\\%u0e34\\%u0e08\\>\\|\\%u0e04\\%u0e27\\%u0e32\\%u0e21\\%u0e2a\\%u0e32\\%u0e21\\%u0e32\\%u0e23\\%u0e16\\>\\|\\%u0e42\\%u0e04\\%u0e23\\%u0e07\\%u0e2b\\%u0e25\\%u0e31\\%u0e01\\>", "given": "\\%u0e01\\%u0e33\\%u0e2b\\%u0e19\\%u0e14\\%u0e43\\%u0e2b\\%u0e49\\>", "scenario": "\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>", "scenario_outline": "\\%u0e42\\%u0e04\\%u0e23\\%u0e07\\%u0e2a\\%u0e23\\%u0e49\\%u0e32\\%u0e07\\%u0e02\\%u0e2d\\%u0e07\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>\\|\\%u0e2a\\%u0e23\\%u0e38\\%u0e1b\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>", "then": "\\%u0e14\\%u0e31\\%u0e07\\%u0e19\\%u0e31\\%u0e49\\%u0e19\\>", "when": "\\%u0e40\\%u0e21\\%u0e37\\%u0e48\\%u0e2d\\>"},
+      \"tl": {"and": "\\%u0c2e\\%u0c30\\%u0c3f\\%u0c2f\\%u0c41\\>", "background": "\\%u0c28\\%u0c47\\%u0c2a\\%u0c25\\%u0c4d\\%u0c2f\\%u0c02\\>", "but": "\\%u0c15\\%u0c3e\\%u0c28\\%u0c3f\\>", "examples": "\\%u0c09\\%u0c26\\%u0c3e\\%u0c39\\%u0c30\\%u0c23\\%u0c32\\%u0c41\\>", "feature": "\\%u0c17\\%u0c41\\%u0c23\\%u0c2e\\%u0c41\\>", "given": "\\%u0c1a\\%u0c46\\%u0c2a\\%u0c4d\\%u0c2a\\%u0c2c\\%u0c21\\%u0c3f\\%u0c28\\%u0c26\\%u0c3f\\>", "scenario": "\\%u0c38\\%u0c28\\%u0c4d\\%u0c28\\%u0c3f\\%u0c35\\%u0c47\\%u0c36\\%u0c02\\>", "scenario_outline": "\\%u0c15\\%u0c25\\%u0c28\\%u0c02\\>", "then": "\\%u0c05\\%u0c2a\\%u0c4d\\%u0c2a\\%u0c41\\%u0c21\\%u0c41\\>", "when": "\\%u0c08 \\%u0c2a\\%u0c30\\%u0c3f\\%u0c38\\%u0c4d\\%u0c25\\%u0c3f\\%u0c24\\%u0c3f\\%u0c32\\%u0c4b\\>"},
       \"tr": {"and": "Ve\\>", "background": "Ge\\%u00e7mi\\%u015f\\>", "but": "Fakat\\>\\|Ama\\>", "examples": "\\%u00d6rnekler\\>", "feature": "\\%u00d6zellik\\>", "given": "Diyelim ki\\>", "scenario": "Senaryo\\>", "scenario_outline": "Senaryo tasla\\%u011f\\%u0131\\>", "then": "O zaman\\>", "when": "E\\%u011fer ki\\>"},
-      \"uk": {"and": "\\%u0406\\>", "background": "\\%u041f\\%u0435\\%u0440\\%u0435\\%u0434\\%u0443\\%u043c\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0435\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043a\\%u043b\\%u0430\\%u0434\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0456\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e, \\%u0449\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e\\>\\|\\%u041d\\%u0435\\%u0445\\%u0430\\%u0439\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u044e\\>", "then": "\\%u0422\\%u043e\\>", "when": "\\%u042f\\%u043a\\%u0449\\%u043e\\>"},
+      \"tt": {"and": "\\%u04ba\\%u04d9\\%u043c\\>\\|\\%u0412\\%u04d9\\>", "background": "\\%u041a\\%u0435\\%u0440\\%u0435\\%u0448\\>", "but": "\\%u041b\\%u04d9\\%u043a\\%u0438\\%u043d\\>\\|\\%u04d8\\%u043c\\%u043c\\%u0430\\>", "examples": "\\%u04ae\\%u0440\\%u043d\\%u04d9\\%u043a\\%u043b\\%u04d9\\%u0440\\>\\|\\%u041c\\%u0438\\%u0441\\%u0430\\%u043b\\%u043b\\%u0430\\%u0440\\>", "feature": "\\%u04ae\\%u0437\\%u0435\\%u043d\\%u0447\\%u04d9\\%u043b\\%u0435\\%u043a\\%u043b\\%u0435\\%u043b\\%u0435\\%u043a\\>\\|\\%u041c\\%u04e9\\%u043c\\%u043a\\%u0438\\%u043d\\%u043b\\%u0435\\%u043a\\>", "given": "\\%u04d8\\%u0439\\%u0442\\%u0438\\%u043a\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\%u043d\\%u044b\\%u04a3 \\%u0442\\%u04e9\\%u0437\\%u0435\\%u043b\\%u0435\\%u0448\\%u0435\\>", "then": "\\%u041d\\%u04d9\\%u0442\\%u0438\\%u0497\\%u04d9\\%u0434\\%u04d9\\>", "when": "\\%u04d8\\%u0433\\%u04d9\\%u0440\\>"},
+      \"uk": {"and": "\\%u0410 \\%u0442\\%u0430\\%u043a\\%u043e\\%u0436\\>\\|\\%u0422\\%u0430\\>\\|\\%u0406\\>", "background": "\\%u041f\\%u0435\\%u0440\\%u0435\\%u0434\\%u0443\\%u043c\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0435\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043a\\%u043b\\%u0430\\%u0434\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0456\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e, \\%u0449\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e\\>\\|\\%u041d\\%u0435\\%u0445\\%u0430\\%u0439\\>\\|\\%u0414\\%u0430\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u044e\\>", "then": "\\%u0422\\%u043e\\%u0434\\%u0456\\>\\|\\%u0422\\%u043e\\>", "when": "\\%u042f\\%u043a\\%u0449\\%u043e\\>\\|\\%u041a\\%u043e\\%u043b\\%u0438\\>"},
       \"uz": {"and": "\\%u0412\\%u0430\\>", "background": "\\%u0422\\%u0430\\%u0440\\%u0438\\%u0445\\>", "but": "\\%u041b\\%u0435\\%u043a\\%u0438\\%u043d\\>\\|\\%u0411\\%u0438\\%u0440\\%u043e\\%u043a\\>\\|\\%u0410\\%u043c\\%u043c\\%u043e\\>", "examples": "\\%u041c\\%u0438\\%u0441\\%u043e\\%u043b\\%u043b\\%u0430\\%u0440\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u0410\\%u0433\\%u0430\\%u0440\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439 \\%u0441\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430\\%u0441\\%u0438\\>", "then": "\\%u0423\\%u043d\\%u0434\\%u0430\\>", "when": "\\%u0410\\%u0433\\%u0430\\%u0440\\>"},
       \"vi": {"and": "V\\%u00e0\\>", "background": "B\\%u1ed1i c\\%u1ea3nh\\>", "but": "Nh\\%u01b0ng\\>", "examples": "D\\%u1eef li\\%u1ec7u\\>", "feature": "T\\%u00ednh n\\%u0103ng\\>", "given": "Bi\\%u1ebft\\>\\|Cho\\>", "scenario": "T\\%u00ecnh hu\\%u1ed1ng\\>\\|K\\%u1ecbch b\\%u1ea3n\\>", "scenario_outline": "Khung t\\%u00ecnh hu\\%u1ed1ng\\>\\|Khung k\\%u1ecbch b\\%u1ea3n\\>", "then": "Th\\%u00ec\\>", "when": "Khi\\>"},
-      \"zh-CN": {"and": "\\%u800c\\%u4e14", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982", "scenario": "\\%u573a\\%u666f\\>", "scenario_outline": "\\%u573a\\%u666f\\%u5927\\%u7eb2\\>", "then": "\\%u90a3\\%u4e48", "when": "\\%u5f53"},
-      \"zh-TW": {"and": "\\%u800c\\%u4e14\\|\\%u4e26\\%u4e14", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u8a2d", "scenario": "\\%u5834\\%u666f\\>\\|\\%u5287\\%u672c\\>", "scenario_outline": "\\%u5834\\%u666f\\%u5927\\%u7db1\\>\\|\\%u5287\\%u672c\\%u5927\\%u7db1\\>", "then": "\\%u90a3\\%u9ebc", "when": "\\%u7576"}}
+      \"zh-CN": {"and": "\\%u800c\\%u4e14\\|\\%u5e76\\%u4e14\\|\\%u540c\\%u65f6", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982\\|\\%u5047\\%u8bbe\\|\\%u5047\\%u5b9a", "scenario": "\\%u573a\\%u666f\\>\\|\\%u5267\\%u672c\\>", "scenario_outline": "\\%u573a\\%u666f\\%u5927\\%u7eb2\\>\\|\\%u5267\\%u672c\\%u5927\\%u7eb2\\>", "then": "\\%u90a3\\%u4e48", "when": "\\%u5f53"},
+      \"zh-TW": {"and": "\\%u800c\\%u4e14\\|\\%u4e26\\%u4e14\\|\\%u540c\\%u6642", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982\\|\\%u5047\\%u8a2d\\|\\%u5047\\%u5b9a", "scenario": "\\%u5834\\%u666f\\>\\|\\%u5287\\%u672c\\>", "scenario_outline": "\\%u5834\\%u666f\\%u5927\\%u7db1\\>\\|\\%u5287\\%u672c\\%u5927\\%u7db1\\>", "then": "\\%u90a3\\%u9ebc", "when": "\\%u7576"}}
 
 function! s:pattern(key)
   let language = matchstr(getline(1),'#\s*language:\s*\zs\S\+')
@@ -71,13 +83,15 @@ function! s:pattern(key)
 endfunction
 
 function! s:Add(name)
-  let next = " skipempty skipwhite nextgroup=".join(map(["Region","AndRegion","ButRegion","Comment","Table"],'"cucumber".a:name.v:val'),",")
+  let next = " skipempty skipwhite nextgroup=".join(map(["Region","AndRegion","ButRegion","Comment","String","Table"],'"cucumber".a:name.v:val'),",")
   exe "syn region cucumber".a:name.'Region matchgroup=cucumber'.a:name.' start="\%(^\s*\)\@<=\%('.s:pattern(tolower(a:name)).'\)" end="$"'.next
   exe 'syn region cucumber'.a:name.'AndRegion matchgroup=cucumber'.a:name.'And start="\%(^\s*\)\@<='.s:pattern('and').'" end="$" contained'.next
   exe 'syn region cucumber'.a:name.'ButRegion matchgroup=cucumber'.a:name.'But start="\%(^\s*\)\@<='.s:pattern('but').'" end="$" contained'.next
   exe 'syn match cucumber'.a:name.'Comment "\%(^\s*\)\@<=#.*" contained'.next
+  exe 'syn region cucumber'.a:name.'String start=+\%(^\s*\)\@<="""+ end=+"""+ contained'.next
   exe 'syn match cucumber'.a:name.'Table "\%(^\s*\)\@<=|.*" contained contains=cucumberDelimiter'.next
   exe 'hi def link cucumber'.a:name.'Comment cucumberComment'
+  exe 'hi def link cucumber'.a:name.'String cucumberString'
   exe 'hi def link cucumber'.a:name.'But cucumber'.a:name.'And'
   exe 'hi def link cucumber'.a:name.'And cucumber'.a:name
   exe 'syn cluster cucumberStepRegions add=cucumber'.a:name.'Region,cucumber'.a:name.'AndRegion,cucumber'.a:name.'ButRegion'
@@ -97,9 +111,8 @@ exe 'syn match cucumberExamples "\%(^\s*\)\@<='.s:pattern('examples').':" nextgr
 
 syn match   cucumberPlaceholder   "<[^<>]*>" contained containedin=@cucumberStepRegions
 syn match   cucumberExampleTable  "\%(^\s*\)\@<=|.*" contains=cucumberDelimiter
-syn match   cucumberDelimiter     "|" contained
-syn match   cucumberTags          "\%(^\s*\)\@<=\%(@[^@[:space:]]\+\s\+\)*@[^@[:space:]]\+\s*$"
-syn region  cucumberString   start=+\%(^\s*\)\@<="""+ end=+"""+
+syn match   cucumberDelimiter     "\\\@<!\%(\\\\\)*\zs|" contained
+syn match   cucumberTags          "\%(^\s*\)\@<=\%(@[^@[:space:]]\+\s\+\)*@[^@[:space:]]\+\s*$" contains=@NoSpell
 
 call s:Add('Then')
 call s:Add('When')
@@ -123,4 +136,7 @@ hi def link cucumberThen              Type
 
 let b:current_syntax = "cucumber"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set sts=2 sw=2:
index 9f804c7..545d873 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    CUPL
-" Maintainer:  John Cook <john.cook@kla-tencor.com>
-" Last Change: 2001 Apr 25
+" Maintainer:  John Cook <johncook3@gmail.com>
+" Last Change: 2011 Dec 27
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " this language is oblivious to case.
 syn case ignore
 
@@ -127,4 +130,8 @@ if version >= 508 || !exists("did_cupl_syn_inits")
 endif
 
 let b:current_syntax = "cupl"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:ts=8
index 4062b0a..39b593d 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    CWEB
 " Maintainer:  Andreas Scherer <andreas.scherer@pobox.com>
-" Last Change: April 30, 2001
+" Last Change: 2011 Dec 25 by Thilo Six
 
 " Details of the CWEB language can be found in the article by Donald E. Knuth
 " and Silvio Levy, "The CWEB System of Structured Documentation", included as
@@ -36,6 +36,9 @@ endif
 " C/C++ section of a CWEB chunk or in inner C/C++ context in "|...|" groups.
 syntax include @webIncludedC <sfile>:p:h/cpp.vim
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Inner C/C++ context (ICC) should be quite simple as it's comprised of
 " material in "|...|"; however the naive definition for this region would
 " hickup at the innocious "\|" TeX macro.  Note: For the time being we expect
@@ -77,4 +80,6 @@ endif
 
 let b:current_syntax = "cweb"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index 964936e..6540864 100644 (file)
@@ -1,18 +1,23 @@
-" Vim syntax file for the D programming language (version 1.053 and 2.039).
+" Vim syntax file for the D programming language (version 1.076 and 2.063).
 "
-" Language:    D
-" Maintainer:  Jason Mills<jasonmills@nf.sympatico.ca>
-" Last Change: 2010 Jan 07
-" Version:     0.18
+" Language:     D
+" Maintainer:   Jesse Phillips <Jesse.K.Phillips+D@gmail.com>
+" Last Change:  2013 May 21
+" Version:      0.25
 "
 " Contributors:
-"   - Kirk McDonald: version 0.17 updates, with minor modifications
-"     (http://paste.dprogramming.com/dplmb7qx?view=hidelines)
-"   - Jesse K. Phillips: patch for some keywords and attributes (annotations), with modifications
-"   - Tim Keating: patch to fix a bug in highlighting the `\` literal
-"   - Frank Benoit: Fixed a bug that caused some identifiers and numbers to highlight as octal number errors.
+"   - Jason Mills: original Maintainer
+"   - Kirk McDonald
+"   - Tim Keating
+"   - Frank Benoit
+"   - Shougo Matsushita
+"   - Ellery Newcomer
+"   - Steven N. Oliver
+"   - Sohgo Takeuchi
+"   - Robert Clipsham
 "
-" Please email me with bugs, comments, and suggestions.
+" Please submit bugs/comments/suggestions to the github repo: 
+" https://github.com/JesseKPhillips/d.vim
 "
 " Options:
 "   d_comment_strings - Set to highlight strings and numbers in comments.
 "   d_hl_operator_overload - Set to highlight D's specially named functions
 "   that when overloaded implement unary and binary operators (e.g. opCmp).
 "
-" Todo:
-"   - Determine a better method of sync'ing than simply setting minlines
-"   to a large number.
-"
-"   - Several keywords (e.g., in, out, inout) are both storage class and
-"   statements, depending on their context. Perhaps use pattern matching to
-"   figure out which and highlight appropriately. For now I have made such
-"   keywords storage classes so their highlighting is consistent with other
-"   keywords that are commonly used with them, but are true storage classes,
-"   such as lazy. Similarly, I made some statement keywords (e.g. body) storage
-"   classes.
-"
-"   - Mark contents of the asm statement body as special
-"
-"   - Maybe highlight the 'exit', 'failure', and 'success' parts of the
-"   scope() statement.
-"
-"   - Highlighting DDoc comments.
-"
+"   d_hl_object_types - Set to highlight some common types from object.di.
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+" Support cpoptions
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Set the current syntax to be known as d
+let b:current_syntax = "d"
+
 " Keyword definitions
 "
-syn keyword dExternal          import package module extern
-syn keyword dConditional       if else switch
-syn keyword dBranch            goto break continue
-syn keyword dRepeat            while for do foreach foreach_reverse
-syn keyword dBoolean           true false
-syn keyword dConstant          null
-syn keyword dConstant          __FILE__ __LINE__ __EOF__ __VERSION__
-syn keyword dConstant          __DATE__ __TIME__ __TIMESTAMP__ __VENDOR__
-
-syn keyword dTypedef           alias typedef
-syn keyword dStructure         template interface class struct union
-syn keyword dEnum              enum
-syn keyword dOperator          new delete typeof typeid cast align is
-syn keyword dOperator          this super
+syn keyword dExternal              contained import module
+syn keyword dAssert                assert
+syn keyword dConditional           if else switch
+syn keyword dBranch                goto break continue
+syn keyword dRepeat                while for do foreach foreach_reverse
+syn keyword dBoolean               true false
+syn keyword dConstant              null
+syn keyword dConstant              __FILE__ __LINE__ __EOF__ __VERSION__
+syn keyword dConstant              __DATE__ __TIME__ __TIMESTAMP__ __VENDOR__
+syn keyword dConstant              __MODULE__ __FUNCTION__ __PRETTY_FUNCTION__
+syn keyword dTypedef               alias typedef
+syn keyword dStructure             template interface class struct union
+syn keyword dEnum                  enum
+syn keyword dOperator              new delete typeof typeid cast align is
+syn keyword dOperator              this super
 if exists("d_hl_operator_overload")
-  syn keyword dOpOverload      opNeg opCom opPostInc opPostDec opCast opAdd opSub opSub_r
-  syn keyword dOpOverload      opMul opDiv opDiv_r opMod opMod_r opAnd opOr opXor
-  syn keyword dOpOverload      opShl opShl_r opShr opShr_r opUShr opUShr_r opCat
-  syn keyword dOpOverload      opCat_r opEquals opEquals opCmp
-  syn keyword dOpOverload      opAssign opAddAssign opSubAssign opMulAssign opDivAssign
-  syn keyword dOpOverload      opModAssign opAndAssign opOrAssign opXorAssign
-  syn keyword dOpOverload      opShlAssign opShrAssign opUShrAssign opCatAssign
-  syn keyword dOpOverload      opIndex opIndexAssign opCall opSlice opSliceAssign opPos
-  syn keyword dOpOverload      opAdd_r opMul_r opAnd_r opOr_r opXor_r opIn opIn_r
-  syn keyword dOpOverload      opPow opDispatch opStar opDot opApply opApplyReverse
+  syn keyword dOpOverload          opNeg opCom opPostInc opPostDec opCast opAdd
+  syn keyword dOpOverload          opSub opSub_r opMul opDiv opDiv_r opMod 
+  syn keyword dOpOverload          opMod_r opAnd opOr opXor opShl opShl_r opShr
+  syn keyword dOpOverload          opShr_r opUShr opUShr_r opCat
+  syn keyword dOpOverload          opCat_r opEquals opCmp
+  syn keyword dOpOverload          opAssign opAddAssign opSubAssign opMulAssign
+  syn keyword dOpOverload          opDivAssign opModAssign opAndAssign 
+  syn keyword dOpOverload          opOrAssign opXorAssign opShlAssign 
+  syn keyword dOpOverload          opShrAssign opUShrAssign opCatAssign
+  syn keyword dOpOverload          opIndex opIndexAssign opIndexOpAssign
+  syn keyword dOpOverload          opCall opSlice opSliceAssign opSliceOpAssign 
+  syn keyword dOpOverload          opPos opAdd_r opMul_r opAnd_r opOr_r opXor_r
+  syn keyword dOpOverload          opIn opIn_r opPow opDispatch opStar opDot 
+  syn keyword dOpOverload          opApply opApplyReverse opDollar
+  syn keyword dOpOverload          opUnary opIndexUnary opSliceUnary
+  syn keyword dOpOverload          opBinary opBinaryRight
+endif
+
+syn keyword dType                  byte ubyte short ushort int uint long ulong cent ucent
+syn keyword dType                  void bool Object
+syn keyword dType                  float double real
+syn keyword dType                  ushort int uint long ulong float
+syn keyword dType                  char wchar dchar string wstring dstring
+syn keyword dType                  ireal ifloat idouble creal cfloat cdouble
+syn keyword dType                  size_t ptrdiff_t sizediff_t equals_t hash_t
+if exists("d_hl_object_types")
+  syn keyword dType                Object Throwable AssociativeArray Error Exception
+  syn keyword dType                Interface OffsetTypeInfo TypeInfo TypeInfo_Typedef
+  syn keyword dType                TypeInfo_Enum TypeInfo_Pointer TypeInfo_Array
+  syn keyword dType                TypeInfo_StaticArray TypeInfo_AssociativeArray
+  syn keyword dType                TypeInfo_Function TypeInfo_Delegate TypeInfo_Class
+  syn keyword dType                ClassInfo TypeInfo_Interface TypeInfo_Struct
+  syn keyword dType                TypeInfo_Tuple TypeInfo_Const TypeInfo_Invariant
+  syn keyword dType                TypeInfo_Shared TypeInfo_Inout MemberInfo
+  syn keyword dType                MemberInfo_field MemberInfo_function ModuleInfo
 endif
-syn keyword dType              ushort int uint long ulong float
-syn keyword dType              void byte ubyte double bit char wchar ucent cent
-syn keyword dType              short bool dchar string wstring dstring
-syn keyword dType              real ireal ifloat idouble creal cfloat cdouble
-syn keyword dDebug             deprecated unittest
-syn keyword dExceptions                throw try catch finally
-syn keyword dScopeDecl         public protected private export
-syn keyword dStatement         version debug return with
-syn keyword dStatement         function delegate __traits asm mixin macro
-syn keyword dStorageClass      in out inout ref lazy scope body
-syn keyword dStorageClass      pure nothrow
-syn keyword dStorageClass      auto static override final abstract volatile __gshared __thread
-syn keyword dStorageClass      synchronized immutable shared const invariant lazy
-syn keyword dPragma            pragma
+syn keyword dDebug                 deprecated unittest invariant
+syn keyword dExceptions            throw try catch finally
+syn keyword dScopeDecl             public protected private export package 
+syn keyword dStatement             debug return with
+syn keyword dStatement             function delegate __ctfe mixin macro __simd
+syn keyword dStatement             in out body
+syn keyword dStorageClass          contained in out scope
+syn keyword dStorageClass          inout ref lazy pure nothrow
+syn keyword dStorageClass          auto static override final abstract volatile
+syn keyword dStorageClass          __gshared __vector
+syn keyword dStorageClass          synchronized shared immutable const lazy
+syn keyword dIdentifier            _arguments _argptr __vptr __monitor
+syn keyword dIdentifier             _ctor _dtor __argTypes __overloadset
+syn keyword dScopeIdentifier       contained exit success failure
+syn keyword dTraitsIdentifier      contained isAbstractClass isArithmetic
+syn keyword dTraitsIdentifier      contained isAssociativeArray isFinalClass
+syn keyword dTraitsIdentifier      contained isPOD isNested isFloating
+syn keyword dTraitsIdentifier      contained isIntegral isScalar isStaticArray
+syn keyword dTraitsIdentifier      contained isUnsigned isVirtualFunction
+syn keyword dTraitsIdentifier      contained isVirtualMethod isAbstractFunction
+syn keyword dTraitsIdentifier      contained isFinalFunction isStaticFunction
+syn keyword dTraitsIdentifier      contained isRef isOut isLazy hasMember
+syn keyword dTraitsIdentifier      contained identifier getAttributes getMember
+syn keyword dTraitsIdentifier      contained getOverloads getProtection
+syn keyword dTraitsIdentifier      contained getVirtualFunctions
+syn keyword dTraitsIdentifier      contained getVirtualMethods parent
+syn keyword dTraitsIdentifier      contained classInstanceSize allMembers
+syn keyword dTraitsIdentifier      contained derivedMembers isSame compiles
+syn keyword dPragmaIdentifier      contained lib msg startaddress GNU_asm
+syn keyword dExternIdentifier      contained Windows Pascal Java System D
+syn keyword dAttribute             contained safe trusted system
+syn keyword dAttribute             contained property disable
+syn keyword dVersionIdentifier     contained DigitalMars GNU LDC SDC D_NET
+syn keyword dVersionIdentifier     contained X86 X86_64 ARM PPC PPC64 IA64 MIPS MIPS64 Alpha
+syn keyword dVersionIdentifier     contained SPARC SPARC64 S390 S390X HPPA HPPA64 SH SH64
+syn keyword dVersionIdentifier     contained linux Posix OSX FreeBSD Windows Win32 Win64
+syn keyword dVersionIdentifier     contained OpenBSD BSD Solaris AIX SkyOS SysV3 SysV4 Hurd
+syn keyword dVersionIdentifier     contained Cygwin MinGW
+syn keyword dVersionIdentifier     contained LittleEndian BigEndian
+syn keyword dVersionIdentifier     contained D_InlineAsm_X86 D_InlineAsm_X86_64
+syn keyword dVersionIdentifier     contained D_Version2 D_Coverage D_Ddoc D_LP64 D_PIC
+syn keyword dVersionIdentifier     contained unittest none all
+
+syn cluster dComment contains=dNestedComment,dBlockComment,dLineComment
+
+" Highlight the sharpbang
+syn match dSharpBang "\%^#!.*"     display
 
 " Attributes/annotations
-syn match dAnnotation  "@[_$a-zA-Z][_$a-zA-Z0-9_]*\>"
+syn match dAnnotation  "@[_$a-zA-Z][_$a-zA-Z0-9_]*\>" contains=dAttribute
+
+" Version Identifiers
+syn match dVersion      "\<version\>"
+syn match dVersion      "\<version\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+7 contains=dVersionIdentifier
+
+" Scope Identifiers
+syn match dStatement    "\<scope\>"
+syn match dStatement    "\<scope\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+5 contains=dScopeIdentifier
 
-" Assert is a statement and a module name.
-syn match dAssert "^assert\>"
-syn match dAssert "[^.]\s*\<assert\>"ms=s+1
+" Traits Statement
+syn match dStatement    "\<__traits\>"
+syn match dStatement    "\<__traits\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+8 contains=dTraitsIdentifier
+
+" Pragma Statement
+syn match dPragma       "\<pragma\>"
+syn match dPragma       "\<pragma\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+8 contains=dPragmaIdentifier
+
+" Necessary to highlight C++ in extern modifiers.
+syn match dExternIdentifier "C\(++\)\?" contained
+
+" Extern Identifiers
+syn match dExternal     "\<extern\>"
+syn match dExtern       "\<extern\s*([_a-zA-Z][_a-zA-Z0-9\+]*\>"he=s+6 contains=dExternIdentifier
+
+" Make import a region to prevent highlighting keywords
+syn region dImport start="import" end=";" contains=dExternal,@dComment
+
+" Make module a region to prevent highlighting keywords
+syn region dImport start="module" end=";" contains=dExternal,@dComment
 
 " dTokens is used by the token string highlighting
 syn cluster dTokens contains=dExternal,dConditional,dBranch,dRepeat,dBoolean
 syn cluster dTokens add=dConstant,dTypedef,dStructure,dOperator,dOpOverload
 syn cluster dTokens add=dType,dDebug,dExceptions,dScopeDecl,dStatement
-syn cluster dTokens add=dStorageClass,dPragma,dAssert,dAnnotation
+syn cluster dTokens add=dStorageClass,dPragma,dAssert,dAnnotation,dEnum
 
-" Marks contents of the asm statment body as special
-"
-" TODO
-"syn match dAsmStatement "\<asm\>"
-"syn region dAsmBody start="asm[\n]*\s*{"hs=e+1 end="}"he=e-1 contains=dAsmStatement
-"
-"hi def link dAsmBody dUnicode
-"hi def link dAsmStatement dStatement
+" Create a match for parameter lists to identify storage class
+syn region paramlist start="(" end=")" contains=@dTokens
 
 " Labels
 "
 " We contain dScopeDecl so public: private: etc. are not highlighted like labels
 syn match dUserLabel    "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDecl,dEnum
-syn keyword dLabel     case default
+syn keyword dLabel      case default
 
 syn cluster dTokens add=dUserLabel,dLabel
 
 " Comments
 "
-syn keyword dTodo      contained TODO FIXME TEMP REFACTOR REVIEW HACK BUG XXX
+syn keyword dTodo                                                                contained TODO FIXME TEMP REFACTOR REVIEW HACK BUG XXX
 syn match dCommentStar contained "^\s*\*[^/]"me=e-1
 syn match dCommentStar contained "^\s*\*$"
 syn match dCommentPlus contained "^\s*+[^/]"me=e-1
@@ -129,12 +201,12 @@ if exists("d_comment_strings")
   syn region dBlockCommentString       contained start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=dCommentStar,dUnicode,dEscSequence,@Spell
   syn region dNestedCommentString      contained start=+"+ end=+"+ end="+"me=s-1,he=s-1 contains=dCommentPlus,dUnicode,dEscSequence,@Spell
   syn region dLineCommentString                contained start=+"+ end=+$\|"+ contains=dUnicode,dEscSequence,@Spell
-  syn region dBlockComment     start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
-  syn region dNestedComment    start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
+  syn region dBlockComment     start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell fold
+  syn region dNestedComment    start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell fold
   syn match  dLineComment      "//.*" contains=dLineCommentString,dTodo,@Spell
 else
-  syn region dBlockComment     start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
-  syn region dNestedComment    start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
+  syn region dBlockComment     start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell fold
+  syn region dNestedComment    start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell fold
   syn match  dLineComment      "//.*" contains=dLineCommentString,dTodo,@Spell
 endif
 
@@ -248,54 +320,241 @@ syn case match
 " TODO: Highlight following Integer and optional Filespec.
 syn region  dPragma start="#\s*\(line\>\)" skip="\\$" end="$"
 
+" Block
+"
+syn region dBlock      start="{" end="}" transparent fold
+
 
 " The default highlighting.
 "
-hi def link dBinary            Number
-hi def link dDec               Number
-hi def link dHex               Number
-hi def link dOctal             Number
-hi def link dFloat             Float
-hi def link dHexFloat          Float
-hi def link dDebug             Debug
-hi def link dBranch            Conditional
-hi def link dConditional       Conditional
-hi def link dLabel             Label
-hi def link dUserLabel         Label
-hi def link dRepeat            Repeat
-hi def link dExceptions                Exception
-hi def link dAssert            Statement
-hi def link dStatement         Statement
-hi def link dScopeDecl         dStorageClass
-hi def link dStorageClass      StorageClass
-hi def link dBoolean           Boolean
-hi def link dUnicode           Special
-hi def link dTokenStringBrack  String
-hi def link dHereString                String
-hi def link dNestString                String
-hi def link dDelimString       String
-hi def link dRawString         String
-hi def link dString            String
-hi def link dHexString         String
-hi def link dCharacter         Character
-hi def link dEscSequence       SpecialChar
-hi def link dSpecialCharError  Error
-hi def link dOctalError                Error
-hi def link dOperator          Operator
-hi def link dOpOverload                Identifier
-hi def link dConstant          Constant
-hi def link dTypedef           Typedef
-hi def link dEnum              Structure
-hi def link dStructure         Structure
-hi def link dTodo              Todo
-hi def link dType              Type
-hi def link dLineComment       Comment
-hi def link dBlockComment      Comment
-hi def link dNestedComment     Comment
-hi def link dExternal          Include
-hi def link dPragma            PreProc
-hi def link dAnnotation                PreProc
+hi def link dBinary              Number
+hi def link dDec                 Number
+hi def link dHex                 Number
+hi def link dOctal               Number
+hi def link dFloat               Float
+hi def link dHexFloat            Float
+hi def link dDebug               Debug
+hi def link dBranch              Conditional
+hi def link dConditional         Conditional
+hi def link dLabel               Label
+hi def link dUserLabel           Label
+hi def link dRepeat              Repeat
+hi def link dExceptions          Exception
+hi def link dAssert              Statement
+hi def link dStatement           Statement
+hi def link dScopeDecl           dStorageClass
+hi def link dStorageClass        StorageClass
+hi def link dBoolean             Boolean
+hi def link dUnicode             Special
+hi def link dTokenStringBrack    String
+hi def link dHereString          String
+hi def link dNestString          String
+hi def link dDelimString         String
+hi def link dRawString           String
+hi def link dString              String
+hi def link dHexString           String
+hi def link dCharacter           Character
+hi def link dEscSequence         SpecialChar
+hi def link dSpecialCharError    Error
+hi def link dOctalError          Error
+hi def link dOperator            Operator
+hi def link dOpOverload          Identifier
+hi def link dConstant            Constant
+hi def link dTypedef             Typedef
+hi def link dEnum                Structure
+hi def link dStructure           Structure
+hi def link dTodo                Todo
+hi def link dType                Type
+hi def link dLineComment         Comment
+hi def link dBlockComment        Comment
+hi def link dNestedComment       Comment
+hi def link dExternal            Include
+hi def link dAnnotation          PreProc
+hi def link dSharpBang           PreProc
+hi def link dAttribute           StorageClass
+hi def link dIdentifier          Identifier
+hi def link dVersion             dStatement
+hi def link dVersionIdentifier   Identifier
+hi def link dScopeIdentifier     Identifier
+hi def link dTraitsIdentifier    Identifier
+hi def link dPragma              PreProc
+hi def link dPragmaIdentifier    Identifier
+hi def link dExtern              dExternal
+hi def link dExternIdentifier    Identifier
 
-let b:current_syntax = "d"
+" Marks contents of the asm statment body as special
 
-" vim: ts=8 noet
+syn match dAsmStatement "\<asm\>"
+syn region dAsmBody start="asm[\n]*\s*{"hs=e+1 end="}"he=e-1 contains=dAsmStatement,dAsmOpCode,@dComment,DUserLabel
+
+hi def link dAsmBody dUnicode
+hi def link dAsmStatement dStatement
+hi def link dAsmOpCode Identifier
+
+syn keyword dAsmOpCode contained       aaa             aad             aam             aas
+syn keyword dAsmOpCode contained       add             addpd           addps           addsd
+syn keyword dAsmOpCode contained       and             andnpd          andnps          andpd
+syn keyword dAsmOpCode contained       arpl            bound           bsf             bsr
+syn keyword dAsmOpCode contained       bt              btc             btr             bts
+syn keyword dAsmOpCode contained       call            bswap           andps           addss
+syn keyword dAsmOpCode contained       cbw             cdq             clc             cld
+syn keyword dAsmOpCode contained       cli             clts            cmc             cmova
+syn keyword dAsmOpCode contained       cmovb           cmovbe          cmovc           cmove
+syn keyword dAsmOpCode contained       cmovge          cmovl           cmovle          cmovna
+syn keyword dAsmOpCode contained       cmovnae         cmovg           cmovae          clflush
+syn keyword dAsmOpCode contained       cmovnb          cmovnbe         cmovnc          cmovne
+syn keyword dAsmOpCode contained       cmovnge         cmovnl          cmovnle         cmovno
+syn keyword dAsmOpCode contained       cmovns          cmovnz          cmovo           cmovp
+syn keyword dAsmOpCode contained       cmovpo          cmovs           cmovz           cmp
+syn keyword dAsmOpCode contained       cmppd           cmovpe          cmovnp          cmovng
+syn keyword dAsmOpCode contained       cmpps           cmps            cmpsb           cmpsd
+syn keyword dAsmOpCode contained       cmpsw           cmpxch8b        cmpxchg         comisd
+syn keyword dAsmOpCode contained       cpuid           cvtdq2pd        cvtdq2ps        cvtpd2dq
+syn keyword dAsmOpCode contained       cvtpd2ps        cvtpi2pd        cvtpi2ps        cvtps2dq
+syn keyword dAsmOpCode contained       cvtps2pd        cvtpd2pi        comiss          cmpss
+syn keyword dAsmOpCode contained       cvtps2pi        cvtsd2si        cvtsd2ss        cvtsi2sd
+syn keyword dAsmOpCode contained       cvtss2sd        cvtss2si        cvttpd2dq       cvttpd2pi
+syn keyword dAsmOpCode contained       cvttps2pi       cvttsd2si       cvttss2si       cwd
+syn keyword dAsmOpCode contained       da              daa             das             db
+syn keyword dAsmOpCode contained       dd              cwde            cvttps2dq       cvtsi2ss
+syn keyword dAsmOpCode contained       de              dec             df              di
+syn keyword dAsmOpCode contained       divpd           divps           divsd           divss
+syn keyword dAsmOpCode contained       dq              ds              dt              dw
+syn keyword dAsmOpCode contained       enter           f2xm1           fabs            fadd
+syn keyword dAsmOpCode contained       faddp           emms            dl              div
+syn keyword dAsmOpCode contained       fbld            fbstp           fchs            fclex
+syn keyword dAsmOpCode contained       fcmovbe         fcmove          fcmovnb         fcmovnbe
+syn keyword dAsmOpCode contained       fcmovnu         fcmovu          fcom            fcomi
+syn keyword dAsmOpCode contained       fcomp           fcompp          fcos            fdecstp
+syn keyword dAsmOpCode contained       fdisi           fcomip          fcmovne         fcmovb
+syn keyword dAsmOpCode contained       fdiv            fdivp           fdivr           fdivrp
+syn keyword dAsmOpCode contained       ffree           fiadd           ficom           ficomp
+syn keyword dAsmOpCode contained       fidivr          fild            fimul           fincstp
+syn keyword dAsmOpCode contained       fist            fistp           fisub           fisubr
+syn keyword dAsmOpCode contained       fld             finit           fidiv           feni
+syn keyword dAsmOpCode contained       fld1            fldcw           fldenv          fldl2e
+syn keyword dAsmOpCode contained       fldlg2          fldln2          fldpi           fldz
+syn keyword dAsmOpCode contained       fmulp           fnclex          fndisi          fneni
+syn keyword dAsmOpCode contained       fnop            fnsave          fnstcw          fnstenv
+syn keyword dAsmOpCode contained       fnstsw          fninit          fmul            fldl2t
+syn keyword dAsmOpCode contained       fpatan          fprem           fprem1          fptan
+syn keyword dAsmOpCode contained       frstor          fsave           fscale          fsetpm
+syn keyword dAsmOpCode contained       fsincos         fsqrt           fst             fstcw
+syn keyword dAsmOpCode contained       fstp            fstsw           fsub            fsubp
+syn keyword dAsmOpCode contained       fsubr           fstenv          fsin            frndint
+syn keyword dAsmOpCode contained       fsubrp          ftst            fucom           fucomi
+syn keyword dAsmOpCode contained       fucomp          fucompp         fwait           fxam
+syn keyword dAsmOpCode contained       fxrstor         fxsave          fxtract         fyl2x
+syn keyword dAsmOpCode contained       hlt             idiv            imul            in
+syn keyword dAsmOpCode contained       inc             fyl2xp1         fxch            fucomip
+syn keyword dAsmOpCode contained       ins             insb            insd            insw
+syn keyword dAsmOpCode contained       into            invd            invlpg          iret
+syn keyword dAsmOpCode contained       ja              jae             jb              jbe
+syn keyword dAsmOpCode contained       jcxz            je              jecxz           jg
+syn keyword dAsmOpCode contained       jge             jc              iretd           int
+syn keyword dAsmOpCode contained       jl              jle             jmp             jna
+syn keyword dAsmOpCode contained       jnb             jnbe            jnc             jne
+syn keyword dAsmOpCode contained       jnge            jnl             jnle            jno
+syn keyword dAsmOpCode contained       jns             jnz             jo              jp
+syn keyword dAsmOpCode contained       jpe             jnp             jng             jnae
+syn keyword dAsmOpCode contained       jpo             js              jz              lahf
+syn keyword dAsmOpCode contained       ldmxcsr         lds             lea             leave
+syn keyword dAsmOpCode contained       lfence          lfs             lgdt            lgs
+syn keyword dAsmOpCode contained       lldt            lmsw            lock            lods
+syn keyword dAsmOpCode contained       lodsb           lidt            les             lar
+syn keyword dAsmOpCode contained       lodsd           lodsw           loop            loope
+syn keyword dAsmOpCode contained       loopnz          loopz           lsl             lss
+syn keyword dAsmOpCode contained       maskmovdqu      maskmovq        maxpd           maxps
+syn keyword dAsmOpCode contained       maxss           mfence          minpd           minps
+syn keyword dAsmOpCode contained       minsd           maxsd           ltr             loopne
+syn keyword dAsmOpCode contained       minss           mov             movapd          movaps
+syn keyword dAsmOpCode contained       movdq2q         movdqa          movdqu          movhlps
+syn keyword dAsmOpCode contained       movhps          movlhps         movlpd          movlps
+syn keyword dAsmOpCode contained       movmskps        movntdq         movnti          movntpd
+syn keyword dAsmOpCode contained       movntps         movmskpd        movhpd          movd
+syn keyword dAsmOpCode contained       movntq          movq            movq2dq         movs
+syn keyword dAsmOpCode contained       movsd           movss           movsw           movsx
+syn keyword dAsmOpCode contained       movups          movzx           mul             mulpd
+syn keyword dAsmOpCode contained       mulsd           mulss           neg             nop
+syn keyword dAsmOpCode contained       not             mulps           movupd          movsb
+syn keyword dAsmOpCode contained       or              orpd            orps            out
+syn keyword dAsmOpCode contained       outsb           outsd           outsw           packssdw
+syn keyword dAsmOpCode contained       packuswb        paddb           paddd           paddq
+syn keyword dAsmOpCode contained       paddsw          paddusb         paddusw         paddw
+syn keyword dAsmOpCode contained       pand            paddsb          packsswb        outs
+syn keyword dAsmOpCode contained       pandn           pavgb           pavgw           pcmpeqb
+syn keyword dAsmOpCode contained       pcmpeqw         pcmpgtb         pcmpgtd         pcmpgtw
+syn keyword dAsmOpCode contained       pinsrw          pmaddwd         pmaxsw          pmaxub
+syn keyword dAsmOpCode contained       pminub          pmovmskb        pmulhuw         pmulhw
+syn keyword dAsmOpCode contained       pmullw          pminsw          pextrw          pcmpeqd
+syn keyword dAsmOpCode contained       pmuludq         pop             popa            popad
+syn keyword dAsmOpCode contained       popfd           por             prefetchnta     prefetcht0
+syn keyword dAsmOpCode contained       prefetcht2      psadbw          pshufd          pshufhw
+syn keyword dAsmOpCode contained       pshufw          pslld           pslldq          psllq
+syn keyword dAsmOpCode contained       psllw           pshuflw         prefetcht1      popf
+syn keyword dAsmOpCode contained       psrad           psraw           psrld           psrldq
+syn keyword dAsmOpCode contained       psrlw           psubb           psubd           psubq
+syn keyword dAsmOpCode contained       psubsw          psubusb         psubusw         psubw
+syn keyword dAsmOpCode contained       punpckhdq       punpckhqdq      punpckhwd       punpcklbw
+syn keyword dAsmOpCode contained       punpckldq       punpckhbw       psubsb          psrlq
+syn keyword dAsmOpCode contained       punpcklqdq      punpcklwd       push            pusha
+syn keyword dAsmOpCode contained       pushf           pushfd          pxor            rcl
+syn keyword dAsmOpCode contained       rcpss           rcr             rdmsr           rdpmc
+syn keyword dAsmOpCode contained       rep             repe            repne           repnz
+syn keyword dAsmOpCode contained       repz            rdtsc           rcpps           pushad
+syn keyword dAsmOpCode contained       ret             retf            rol             ror
+syn keyword dAsmOpCode contained       rsqrtps         rsqrtss         sahf            sal
+syn keyword dAsmOpCode contained       sbb             scas            scasb           scasd
+syn keyword dAsmOpCode contained       seta            setae           setb            setbe
+syn keyword dAsmOpCode contained       setc            scasw           sar             rsm
+syn keyword dAsmOpCode contained       sete            setg            setge           setl
+syn keyword dAsmOpCode contained       setna           setnae          setnb           setnbe
+syn keyword dAsmOpCode contained       setne           setng           setnge          setnl
+syn keyword dAsmOpCode contained       setno           setnp           setns           setnz
+syn keyword dAsmOpCode contained       seto            setnle          setnc           setle
+syn keyword dAsmOpCode contained       setp            setpe           setpo           sets
+syn keyword dAsmOpCode contained       sfence          sgdt            shl             shld
+syn keyword dAsmOpCode contained       shrd            shufpd          shufps          sidt
+syn keyword dAsmOpCode contained       smsw            sqrtpd          sqrtps          sqrtsd
+syn keyword dAsmOpCode contained       sqrtss          sldt            shr             setz
+syn keyword dAsmOpCode contained       stc             std             sti             stmxcsr
+syn keyword dAsmOpCode contained       stosb           stosd           stosw           str
+syn keyword dAsmOpCode contained       subpd           subps           subsd           subss
+syn keyword dAsmOpCode contained       sysexit         test            ucomisd         ucomiss
+syn keyword dAsmOpCode contained       ud2             sysenter        sub             stos
+syn keyword dAsmOpCode contained       unpckhpd        unpckhps        unpcklpd        unpcklps
+syn keyword dAsmOpCode contained       verw            wbinvd          wrmsr           xadd
+syn keyword dAsmOpCode contained       xchg            xlatb           xor             xorpd
+syn keyword dAsmOpCode contained       xorps           pfrcpit1        pfmin           movddup
+syn keyword dAsmOpCode contained       addsubpd        addsubps        fisttp          haddps
+syn keyword dAsmOpCode contained       hsubpd          hsubps          lddqu           monitor
+syn keyword dAsmOpCode contained       haddpd          xlat            wait            verr
+syn keyword dAsmOpCode contained       movshdup        movsldup        mwait           pfcmpeq
+syn keyword dAsmOpCode contained       pavgusb         pf2id           pfacc           pfadd
+syn keyword dAsmOpCode contained       pfcmpge         pfcmpgt         pfmax           pfmul
+syn keyword dAsmOpCode contained       pfnacc          pfpnacc         pfrcp           pfrcpit1
+syn keyword dAsmOpCode contained       pfrsqit1        pfrsqrt         pfsub           pfsubr
+syn keyword dAsmOpCode contained       pmulhrw         pswapd          syscall         sysret
+syn keyword dAsmOpCode contained       vpmuldq         xgetbv          cmpxchg8b       cmpxchg16b
+syn keyword dAsmOpCode contained       pabsb           pabsd           pabsw           palignr
+syn keyword dAsmOpCode contained       phaddd          phaddsw         phaddw          phsubd
+syn keyword dAsmOpCode contained       phsubsw         phsubw          pmaddubsw       pmulhrsw
+syn keyword dAsmOpCode contained       pshufb          psignb          psignd          psignw
+syn keyword dAsmOpCode contained       popfq           pushfq          blendpd         blendps
+syn keyword dAsmOpCode contained       blendvpd        blendvps        extractps       insertps
+syn keyword dAsmOpCode contained       movntdqa        mpsadbw         packusdw        pblendvb
+syn keyword dAsmOpCode contained       pblendw         pcmpeqq         pextrb          pextrd
+syn keyword dAsmOpCode contained       pextrq          phminposuw      pinsrb          pinsrd
+syn keyword dAsmOpCode contained       pinsrq          pmaxsb          pmaxsd          pmaxud
+syn keyword dAsmOpCode contained       pmaxuw          pminsb          pminsd          pminud
+syn keyword dAsmOpCode contained       pminuw          pmulld          ptest           roundpd
+syn keyword dAsmOpCode contained       roundps         roundsd         roundss         pmuldq
+syn keyword dAsmOpCode contained       pmovsxbd        pmovsxdq        pmovzxbq        pmovzxdq
+syn keyword dAsmOpCode contained       pmovsxbq        pmovsxwd        pmovzxbq        pmovzxwd
+syn keyword dAsmOpCode contained       pmovsxbw        pmovsxwq        pmovzxbw        pmovzxwq
+syn keyword dAsmOpCode contained       crc32           pcmpestri       pcmpestrm       pcmpgtq
+syn keyword dAsmOpCode contained       pcmpistri       pcmpistrm       popcnt          pi2fd
+syn keyword dAsmOpCode contained       adc
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index b51f418..76f977a 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    Datascript
 " Maintainer:  Dominique Pelle <dominique.pelle@gmail.com>
-" Last Change: 2010-08-01
+" Last Change: 2012 Apr 30
 "
 " DataScript is a formal language for modelling binary datatypes,
 " bitstreams or file formats. For more information, see:
@@ -12,6 +12,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn keyword dsPackage      import package
 syn keyword dsType         bit string
@@ -88,3 +90,6 @@ hi def link cCommentL           dsComment
 hi def link dsComment           Comment
 
 let b:current_syntax = "datascript"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index e808c8f..b1d7a31 100644 (file)
@@ -3,8 +3,8 @@
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2010 May 06
-" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debchangelog.vim
+" Last Change: 2013 May 05
+" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debchangelog.vim
 
 " Standard syntax initialization
 if version < 600
@@ -19,7 +19,7 @@ syn case ignore
 " Define some common expressions we can use later on
 syn match debchangelogName     contained "^[[:alnum:]][[:alnum:].+-]\+ "
 syn match debchangelogUrgency  contained "; urgency=\(low\|medium\|high\|critical\|emergency\)\( \S.*\)\="
-syn match debchangelogTarget   contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|%(etch|lenny)-%(backports|volatile)|%(dapper|hardy|jaunty|karmic|lucid|maverick)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
+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))=)+"
 syn match debchangelogVersion  contained "(.\{-})"
 syn match debchangelogCloses   contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*"
 syn match debchangelogLP       contained "\clp:\s\+#\d\+\(,\s*#\d\+\)*"
index 7340732..3ca17a8 100644 (file)
@@ -3,8 +3,8 @@
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2009 Aug 17
-" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debcontrol.vim
+" Last Change: 2013 May 05
+" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debcontrol.vim
 
 " Standard syntax initialization
 if version < 600
@@ -24,10 +24,11 @@ syn match debControlComma ", *"
 syn match debControlSpace " "
 
 " Define some common expressions we can use later on
-syn match debcontrolArchitecture contained "\%(all\|any\|alpha\|amd64\|arm\%(e[bl]\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\|hurd-i386\|kfreebsd-\%(i386\|amd64\|gnu\)\|knetbsd-i386\|kopensolaris-i386\|netbsd-\%(alpha\|i386\)\)"
+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\)"
+syn match debcontrolMultiArch contained "\%(no\|foreign\|allowed\|same\)"
 syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
 syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
-syn match debcontrolSection contained "\v((contrib|non-free|non-US/main|non-US/contrib|non-US/non-free|restricted|universe|multiverse)/)?(admin|cli-mono|comm|database|debian-installer|debug|devel|doc|editors|electronics|embedded|fonts|games|gnome|gnustep|gnu-r|graphics|hamradio|haskell|httpd|interpreters|java|kde|kernel|libs|libdevel|lisp|localization|mail|math|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|science|shells|sound|text|tex|utils|vcs|video|web|x11|xfce|zope)"
+syn match debcontrolSection contained "\v((contrib|non-free|non-US/main|non-US/contrib|non-US/non-free|restricted|universe|multiverse)/)?(admin|cli-mono|comm|database|debian-installer|debug|devel|doc|editors|education|electronics|embedded|fonts|games|gnome|gnustep|gnu-r|graphics|hamradio|haskell|httpd|interpreters|introspection|java|kde|kernel|libs|libdevel|lisp|localization|mail|math|metapackages|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|science|shells|sound|text|tex|utils|vcs|video|web|x11|xfce|zope)"
 syn match debcontrolPackageType contained "u\?deb"
 syn match debcontrolVariable contained "\${.\{-}}"
 syn match debcontrolDmUpload contained "\cyes"
@@ -37,36 +38,40 @@ syn match debcontrolDmUpload contained "\cyes"
 syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
 syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
 syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
-syn match debcontrolVcsGit contained "\v%(git|http)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
+syn match debcontrolVcsGit contained "\v%(git|http)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?%(\s+-b\s+[^ ~^:?*[\\]+)?$"
 
 " An email address
 syn match      debcontrolEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
 syn match      debcontrolEmail "<.\{-}>"
 
 " #-Comments
-syn match debcontrolComment "^#.*$"
+syn match debcontrolComment "^#.*$" contains=@Spell
 
 syn case ignore
 
 " List of all legal keys
-syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Essential\|Architecture\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|XC-Package-Type\|\%(XS-\)\=DM-Upload-Allowed\): *"
+syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Essential\|Architecture\|Multi-Arch\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|\%(XC-\)\=Package-Type\): *"
+
+syn match debcontrolDeprecatedKey contained "^\%(\%(XS-\)\=DM-Upload-Allowed\): *"
 
 " Fields for which we do strict syntax checking
 syn region debcontrolStrictField start="^Architecture" end="$" contains=debcontrolKey,debcontrolArchitecture,debcontrolSpace oneline
+syn region debcontrolStrictField start="^Multi-Arch" end="$" contains=debcontrolKey,debcontrolMultiArch oneline
 syn region debcontrolStrictField start="^\(Package\|Source\)" end="$" contains=debcontrolKey,debcontrolName oneline
 syn region debcontrolStrictField start="^Priority" end="$" contains=debcontrolKey,debcontrolPriority oneline
 syn region debcontrolStrictField start="^Section" end="$" contains=debcontrolKey,debcontrolSection oneline
-syn region debcontrolStrictField start="^XC-Package-Type" end="$" contains=debcontrolKey,debcontrolPackageType oneline
+syn region debcontrolStrictField start="^\%(XC-\)\=Package-Type" end="$" contains=debcontrolKey,debcontrolPackageType oneline
 syn region debcontrolStrictField start="^Homepage" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
 syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\)" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
 syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Svn" end="$" contains=debcontrolKey,debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
 syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Cvs" end="$" contains=debcontrolKey,debcontrolVcsCvs oneline keepend
 syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Git" end="$" contains=debcontrolKey,debcontrolVcsGit oneline keepend
-syn region debcontrolStrictField start="^\%(XS-\)\=DM-Upload-Allowed" end="$" contains=debcontrolKey,debcontrolDmUpload oneline
+syn region debcontrolStrictField start="^\%(XS-\)\=DM-Upload-Allowed" end="$" contains=debcontrolDeprecatedKey,debcontrolDmUpload oneline
 
 " Catch-all for the other legal fields
 syn region debcontrolField start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Essential\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\):" end="$" contains=debcontrolKey,debcontrolVariable,debcontrolEmail oneline
 syn region debcontrolMultiField start="^\%(Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Uploaders\|Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment
+syn region debcontrolMultiFieldSpell start="^\%(Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell
 
 " Associate our matches and regions with pretty colours
 if version >= 508 || !exists("did_debcontrol_syn_inits")
@@ -80,8 +85,10 @@ if version >= 508 || !exists("did_debcontrol_syn_inits")
   HiLink debcontrolKey         Keyword
   HiLink debcontrolField       Normal
   HiLink debcontrolStrictField Error
+  HiLink debcontrolDeprecatedKey       Error
   HiLink debcontrolMultiField  Normal
   HiLink debcontrolArchitecture        Normal
+  HiLink debcontrolMultiArch   Normal
   HiLink debcontrolName                Normal
   HiLink debcontrolPriority    Normal
   HiLink debcontrolSection     Normal
index bd53981..f3dd2a5 100644 (file)
@@ -2,8 +2,8 @@
 " Language:     Debian sources.list
 " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
-" Last Change: 2010 May 06
-" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debsources.vim
+" Last Change: 2013 May 05
+" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debsources.vim
 
 " Standard syntax initialization
 if version < 600
@@ -23,7 +23,7 @@ syn match debsourcesComment        /#.*/  contains=@Spell
 
 " Match uri's
 syn match debsourcesUri            +\(http://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^'   <>"]\++
-syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(etch\|lenny\|squeeze\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|dapper\|hardy\|jaunty\|karmic\|lucid\|maverick\)\([-[:alnum:]_./]*\)+
+syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(squeeze\|wheezy\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|lucid\|precise\|quantal\|raring\|saucy\)\([-[:alnum:]_./]*\)+
 
 " Associate our matches and regions with pretty colours
 hi def link debsourcesLine            Error
index 62a70bf..484e2cc 100644 (file)
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:    Diff (context or unified)
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2010 Aug 03
+"               Translations by Jakson Alves de Aquino.
+" Last Change: 2013 Jul 24
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
@@ -14,275 +15,309 @@ syn match diffIdentical   "^Files .* and .* are identical$"
 syn match diffDiffer   "^Files .* and .* differ$"
 syn match diffBDiffer  "^Binary files .* and .* differ$"
 syn match diffIsA      "^File .* is a .* while file .* is a .*"
-syn match diffNoEOL    "^No newline at end of file .*"
+syn match diffNoEOL    "^\\ No newline at end of file .*"
 syn match diffCommon   "^Common subdirectories: .*"
 
 " ca
-syn match diffOnly     "^Només a .*: .*$"
+syn match diffOnly     "^Només a .*"
 syn match diffIdentical        "^Els fitxers .* i .* són idèntics$"
 syn match diffDiffer   "^Els fitxers .* i .* difereixen$"
 syn match diffBDiffer  "^Els fitxers .* i .* difereixen$"
-syn match diffIsA      "^El fitxer .* Ã©s un .* mentre que el fitxer .* Ã©s un .*$"
-syn match diffNoEOL    "^No hi ha cap caràcter de salt de línia al final del fitxer"
-syn match diffCommon   "^Subdirectoris comuns: .* i .*$"
+syn match diffIsA      "^El fitxer .* Ã©s un .* mentre que el fitxer .* Ã©s un .*"
+syn match diffNoEOL    "^\\ No hi ha cap caràcter de salt de línia al final del fitxer"
+syn match diffCommon   "^Subdirectoris comuns: .* i .*"
 
 " cs
-syn match diffOnly     "^Pouze v .*: .*$"
+syn match diffOnly     "^Pouze v .*"
 syn match diffIdentical        "^Soubory .* a .* jsou identické$"
 syn match diffDiffer   "^Soubory .* a .* jsou různé$"
+syn match diffBDiffer  "^Binární soubory .* a .* jsou rozdílné$"
 syn match diffBDiffer  "^Soubory .* a .* jsou různé$"
-syn match diffIsA      "^Soubor .* je .* pokud soubor .* je .*$"
-syn match diffNoEOL    "^Chybí znak konce Å™Ã¡dku na konci souboru"
-syn match diffCommon   "^SpoleÄné podadresáře: .* a .*$"
+syn match diffIsA      "^Soubor .* je .* pokud soubor .* je .*"
+syn match diffNoEOL    "^\\ Chybí znak konce Å™Ã¡dku na konci souboru"
+syn match diffCommon   "^SpoleÄné podadresáře: .* a .*"
 
 " da
-syn match diffOnly     "^Kun i .*: .*$"
+syn match diffOnly     "^Kun i .*"
 syn match diffIdentical        "^Filerne .* og .* er identiske$"
 syn match diffDiffer   "^Filerne .* og .* er forskellige$"
 syn match diffBDiffer  "^Binære filer .* og .* er forskellige$"
-syn match diffIsA      "^Filen .* er en .* mens filen .* er en .*$"
-syn match diffNoEOL    "^Intet linjeskift ved filafslutning"
-syn match diffCommon   "^Identiske underkataloger: .* og .*$"
+syn match diffIsA      "^Filen .* er en .* mens filen .* er en .*"
+syn match diffNoEOL    "^\\ Intet linjeskift ved filafslutning"
+syn match diffCommon   "^Identiske underkataloger: .* og .*"
 
 " de
-syn match diffOnly     "^Nur in .*: .*.$"
+syn match diffOnly     "^Nur in .*"
 syn match diffIdentical        "^Dateien .* und .* sind identisch.$"
 syn match diffDiffer   "^Dateien .* und .* sind verschieden.$"
 syn match diffBDiffer  "^Binärdateien .* and .* sind verschieden.$"
+syn match diffBDiffer  "^Binärdateien .* und .* sind verschieden.$"
 syn match diffIsA      "^Datei .* ist ein .* während Datei .* ein .* ist.$"
-syn match diffNoEOL    "^Kein Zeilenumbruch am Dateiende."
+syn match diffNoEOL    "^\\ Kein Zeilenumbruch am Dateiende."
 syn match diffCommon   "^Gemeinsame Unterverzeichnisse: .* und .*.$"
 
 " el
-syn match diffOnly     "^Μόνο ÏƒÏ„ο .*: .*$"
+syn match diffOnly     "^Μόνο ÏƒÏ„ο .*"
 syn match diffIdentical        "^Τα Î±Ïχεία .* ÎºÎ±Î¯ .* ÎµÎ¯Î½Î±Î¹ Ï€Î±Î½Î¿Î¼Î¿Î¹ÏŒÏ„υπα$"
 syn match diffDiffer   "^Τα Î±Ïχεία .* ÎºÎ±Î¹ .* Î´Î¹Î±Ï†Î­Ïουν$"
 syn match diffBDiffer  "^Τα Î±Ïχεία .* ÎºÎ±Î¹ .* Î´Î¹Î±Ï†Î­Ïουν$"
-syn match diffIsA      "^Το Î±Ïχείο .* ÎµÎ¯Î½Î±Î¹ .* ÎµÎ½ÏŽ Ï„ο Î±Ïχείο .* ÎµÎ¯Î½Î±Î¹ .*$"
-syn match diffNoEOL    "^Δεν Ï…πάÏχει Ï‡Î±ÏακτήÏας Î½Î­Î±Ï‚ Î³Ïαμμής ÏƒÏ„ο Ï„έλος Ï„ου Î±Ïχείου"
+syn match diffIsA      "^Το Î±Ïχείο .* ÎµÎ¯Î½Î±Î¹ .* ÎµÎ½ÏŽ Ï„ο Î±Ïχείο .* ÎµÎ¯Î½Î±Î¹ .*"
+syn match diffNoEOL    "^\\ Î”εν Ï…πάÏχει Ï‡Î±ÏακτήÏας Î½Î­Î±Ï‚ Î³Ïαμμής ÏƒÏ„ο Ï„έλος Ï„ου Î±Ïχείου"
 syn match diffCommon   "^Οι Ï…ποκατάλογοι .* ÎºÎ±Î¹ .* ÎµÎ¯Î½Î±Î¹ Ï„αυτόσημοι$"
 
 " eo
-syn match diffOnly     "^Nur en .*: .*$"
+syn match diffOnly     "^Nur en .*"
 syn match diffIdentical        "^Dosieroj .* kaj .* estas samaj$"
 syn match diffDiffer   "^Dosieroj .* kaj .* estas malsamaj$"
 syn match diffBDiffer  "^Dosieroj .* kaj .* estas malsamaj$"
-syn match diffIsA      "^Dosiero .* estas .*, dum dosiero .* estas .*$"
-syn match diffNoEOL    "^Mankas linifino Ä‰e fino de dosiero"
-syn match diffCommon   "^Komunaj subdosierujoj: .* kaj .*$"
+syn match diffIsA      "^Dosiero .* estas .*, dum dosiero .* estas .*"
+syn match diffNoEOL    "^\\ Mankas linifino Ä‰e fino de dosiero"
+syn match diffCommon   "^Komunaj subdosierujoj: .* kaj .*"
 
 " es
-syn match diffOnly     "^Sólo en .*: .*$"
+syn match diffOnly     "^Sólo en .*"
 syn match diffIdentical        "^Los ficheros .* y .* son idénticos$"
 syn match diffDiffer   "^Los ficheros .* y .* son distintos$"
 syn match diffBDiffer  "^Los ficheros binarios .* y .* son distintos$"
-syn match diffIsA      "^El fichero .* es un .* mientras que el .* es un .*$"
-syn match diffNoEOL    "^No hay ningún carácter de nueva línea al final del fichero"
-syn match diffCommon   "^Subdirectorios comunes: .* y .*$"
+syn match diffIsA      "^El fichero .* es un .* mientras que el .* es un .*"
+syn match diffNoEOL    "^\\ No hay ningún carácter de nueva línea al final del fichero"
+syn match diffCommon   "^Subdirectorios comunes: .* y .*"
 
 " fi
-syn match diffOnly     "^Vain hakemistossa .*: .*$"
+syn match diffOnly     "^Vain hakemistossa .*"
 syn match diffIdentical        "^Tiedostot .* ja .* ovat identtiset$"
 syn match diffDiffer   "^Tiedostot .* ja .* eroavat$"
 syn match diffBDiffer  "^Binääritiedostot .* ja .* eroavat$"
-syn match diffIsA      "^Tiedosto .* on .*, kun taas tiedosto .* on .*$"
-syn match diffNoEOL    "^Ei rivinvaihtoa tiedoston lopussa"
-syn match diffCommon   "^Yhteiset alihakemistot: .* ja .*$"
+syn match diffIsA      "^Tiedosto .* on .*, kun taas tiedosto .* on .*"
+syn match diffNoEOL    "^\\ Ei rivinvaihtoa tiedoston lopussa"
+syn match diffCommon   "^Yhteiset alihakemistot: .* ja .*"
 
 " fr
-syn match diffOnly     "^Seulement dans .*: .*$"
-syn match diffIdentical        "^Les fichiers .* et .* sont identiques.$"
-syn match diffDiffer   "^Les fichiers .* et .* sont différents.$"
-syn match diffBDiffer  "^Les fichiers binaires .* et .* sont différents.$"
-syn match diffIsA      "^Le fichier .* est un .* alors que le fichier .* est un .*$"
-syn match diffNoEOL    "^Pas de fin de ligne Ã  la fin du fichier."
-syn match diffCommon   "^Les sous-répertoires .* et .* sont identiques.$"
+syn match diffOnly     "^Seulement dans .*"
+syn match diffIdentical        "^Les fichiers .* et .* sont identiques.*"
+syn match diffDiffer   "^Les fichiers .* et .* sont différents.*"
+syn match diffBDiffer  "^Les fichiers binaires .* et .* sont différents.*"
+syn match diffIsA      "^Le fichier .* est un .* alors que le fichier .* est un .*"
+syn match diffNoEOL    "^\\ Pas de fin de ligne Ã  la fin du fichier.*"
+syn match diffCommon   "^Les sous-répertoires .* et .* sont identiques.*"
 
 " ga
-syn match diffOnly     "^I .* amháin: .*$"
-syn match diffIdentical        "^Is comhionann iad na comhaid .* agus .*$"
-syn match diffDiffer   "^Tá difríocht idir na comhaid .* agus .*$"
-syn match diffBDiffer  "^Tá difríocht idir na comhaid .* agus .*$"
-syn match diffIsA      "^Tá comhad .* ina .* ach tá comhad .* ina .*$"
-syn match diffNoEOL    "^Gan líne nua ag an chomhadchríoch"
-syn match diffCommon   "^Fochomhadlanna i gcoitianta: .* agus .*$"
+syn match diffOnly     "^I .* amháin: .*"
+syn match diffIdentical        "^Is comhionann iad na comhaid .* agus .*"
+syn match diffDiffer   "^Tá difríocht idir na comhaid .* agus .*"
+syn match diffBDiffer  "^Tá difríocht idir na comhaid .* agus .*"
+syn match diffIsA      "^Tá comhad .* ina .* ach tá comhad .* ina .*"
+syn match diffNoEOL    "^\\ Gan líne nua ag an chomhadchríoch"
+syn match diffCommon   "^Fochomhadlanna i gcoitianta: .* agus .*"
 
 " gl
-syn match diffOnly     "^Só en .*: .*$"
+syn match diffOnly     "^Só en .*"
 syn match diffIdentical        "^Os ficheiros .* e .* son idénticos$"
 syn match diffDiffer   "^Os ficheiros .* e .* son diferentes$"
 syn match diffBDiffer  "^Os ficheiros binarios .* e .* son diferentes$"
-syn match diffIsA      "^O ficheiro .* Ã© un .* mentres que o ficheiro .* Ã© un .*$"
-syn match diffNoEOL    "^Non hai un salto de liña na fin da liña"
-syn match diffCommon   "^Subdirectorios comúns: .* e .*$"
+syn match diffIsA      "^O ficheiro .* Ã© un .* mentres que o ficheiro .* Ã© un .*"
+syn match diffNoEOL    "^\\ Non hai un salto de liña na fin da liña"
+syn match diffCommon   "^Subdirectorios comúns: .* e .*"
 
 " he
-syn match diffOnly     "^.*-ב ×§×¨ ×צמנ .*$"
+syn match diffOnly     "^.*-ב ×§×¨ ×צמנ .*"
 syn match diffIdentical        "^××™×”×– ×× ×™×” .*-ו .* ×יצבקה$"
 syn match diffDiffer   "^הזמ ×”×– ×ינוש `.*'-ו `.*' ×יצבקה$"
 syn match diffBDiffer  "^הזמ ×”×– ×ינוש `.*'-ו `.*' ×יירניב ×יצבק$"
 syn match diffIsA      "^.* .*-ל .* .* ×ª×•×•×©×”ל ×Ÿ×ª×™×  ×ל$"
-syn match diffNoEOL    "^ץבוקה ×£×•×¡×‘ ×”שדח-הרוש ×•×ª ×¨×¡×—"
+syn match diffNoEOL    "^\\ ×¥×‘וקה ×£×•×¡×‘ ×”שדח-הרוש ×•×ª ×¨×¡×—"
 syn match diffCommon   "^.*-ו .* :תוהז ×ª×•×™×§×™×ª-תת$"
 
+" hr
+syn match diffOnly     "^Samo u .*"
+syn match diffIdentical        "^Datoteke .* i .* su identiÄne$"
+syn match diffDiffer   "^Datoteke .* i .* se razlikuju$"
+syn match diffBDiffer  "^Binarne datoteke .* i .* se razlikuju$"
+syn match diffIsA      "^Datoteka .* je .*, a datoteka .* je .*"
+syn match diffNoEOL    "^\\ Nema novog retka na kraju datoteke"
+syn match diffCommon   "^UobiÄajeni poddirektoriji: .* i .*"
+
 " hu
-syn match diffOnly     "^Csak .* -ben: .*$"
+syn match diffOnly     "^Csak .* -ben: .*"
 syn match diffIdentical        "^.* Ã©s .* fájlok azonosak$"
 syn match diffDiffer   "^A(z) .* Ã©s a(z) .* fájlok különböznek$"
 syn match diffBDiffer  "^A(z) .* Ã©s a(z) .* fájlok különböznek$"
-syn match diffIsA      "^A(z) .* fájl egy .*, viszont a(z) .* fájl egy .*$"
-syn match diffNoEOL    "^Nincs Ãºjsor a fájl végén"
-syn match diffCommon   "^Közös alkönyvtárak: .* Ã©s .*$"
+syn match diffIsA      "^A(z) .* fájl egy .*, viszont a(z) .* fájl egy .*"
+syn match diffNoEOL    "^\\ Nincs Ãºjsor a fájl végén"
+syn match diffCommon   "^Közös alkönyvtárak: .* Ã©s .*"
 
 " id
-syn match diffOnly     "^Hanya dalam .*: .*$"
+syn match diffOnly     "^Hanya dalam .*"
 syn match diffIdentical        "^File .* dan .* identik$"
 syn match diffDiffer   "^Berkas .* dan .* berbeda$"
 syn match diffBDiffer  "^File biner .* dan .* berbeda$"
-syn match diffIsA      "^File .* adalah .* sementara file .* adalah .*$"
-syn match diffNoEOL    "^Tidak ada baris-baru di akhir dari berkas"
-syn match diffCommon   "^Subdirektori sama: .* dan .*$"
+syn match diffIsA      "^File .* adalah .* sementara file .* adalah .*"
+syn match diffNoEOL    "^\\ Tidak ada baris-baru di akhir dari berkas"
+syn match diffCommon   "^Subdirektori sama: .* dan .*"
 
 " it
-syn match diffOnly     "^Solo in .*: .*$"
+syn match diffOnly     "^Solo in .*"
 syn match diffIdentical        "^I file .* e .* sono identici$"
 syn match diffDiffer   "^I file .* e .* sono diversi$"
 syn match diffBDiffer  "^I file .* e .* sono diversi$"
-syn match diffIsA      "^File .* Ã¨ un .* mentre file .* Ã¨ un .*$"
-syn match diffNoEOL    "^Manca newline alla fine del file"
-syn match diffCommon   "^Sottodirectory in comune: .* e .*$"
+syn match diffBDiffer  "^I file binari .* e .* sono diversi$"
+syn match diffIsA      "^File .* Ã¨ un .* mentre file .* Ã¨ un .*"
+syn match diffNoEOL    "^\\ Manca newline alla fine del file"
+syn match diffCommon   "^Sottodirectory in comune: .* e .*"
 
 " ja
-syn match diffOnly     "^.*ã ã‘ã«ç™ºè¦‹: .*$"
+syn match diffOnly     "^.*ã ã‘ã«ç™ºè¦‹: .*"
 syn match diffIdentical        "^ファイル.*ã¨.*ã¯åŒä¸€$"
 syn match diffDiffer   "^ファイル.*ã¨.*ã¯é•ã„ã¾ã™$"
 syn match diffBDiffer  "^ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ»ãƒ•ã‚¡ã‚¤ãƒ«.*ã¨.*ã¯é•ã„ã¾ã™$"
-syn match diffIsA      "^ファイル.*ã¯.*ã€ãƒ•ã‚¡ã‚¤ãƒ«.*ã¯.*$"
-syn match diffNoEOL    "^ファイル末尾ã«æ”¹è¡ŒãŒã‚ã‚Šã¾ã›ã‚“"
-syn match diffCommon   "^共通ã®ä¸‹ä½ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼: .*ã¨.*$"
+syn match diffIsA      "^ファイル.*ã¯.*ã€ãƒ•ã‚¡ã‚¤ãƒ«.*ã¯.*"
+syn match diffNoEOL    "^\\ ãƒ•ã‚¡ã‚¤ãƒ«æœ«å°¾ã«æ”¹è¡ŒãŒã‚ã‚Šã¾ã›ã‚“"
+syn match diffCommon   "^共通ã®ä¸‹ä½ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼: .*ã¨.*"
+
+" ja DiffUtils 3.3
+syn match diffOnly     "^.* ã®ã¿ã«å­˜åœ¨: .*"
+syn match diffIdentical        "^ファイル .* ã¨ .* ã¯åŒä¸€ã§ã™$"
+syn match diffDiffer   "^ファイル .* ã¨ .* ã¯ç•°ãªã‚Šã¾ã™$"
+syn match diffBDiffer  "^ãƒã‚¤ãƒŠãƒªãƒ¼ãƒ•ã‚¡ã‚¤ãƒ« .* ã¨.* ã¯ç•°ãªã‚Šã¾ã™$"
+syn match diffIsA      "^ファイル .* ã¯ .* ã§ã™ã€‚一方ã€ãƒ•ã‚¡ã‚¤ãƒ« .* ã¯ .* ã§ã™$"
+syn match diffNoEOL    "^\\ ãƒ•ã‚¡ã‚¤ãƒ«æœ«å°¾ã«æ”¹è¡ŒãŒã‚ã‚Šã¾ã›ã‚“"
+syn match diffCommon   "^共通ã®ã‚µãƒ–ディレクトリー: .* ã¨ .*"
 
 " lv
-syn match diffOnly     "^Tikai iekÅ¡ .*: .*$"
+syn match diffOnly     "^Tikai iekÅ¡ .*"
 syn match diffIdentical        "^Fails .* un .* ir identiski$"
 syn match diffDiffer   "^Faili .* un .* atÅ¡Ä·iras$"
 syn match diffBDiffer  "^Faili .* un .* atÅ¡Ä·iras$"
-syn match diffIsA      "^Fails .* ir .* kamÄ“r fails .* ir .*$"
-syn match diffNoEOL    "^Nav jaunu rindu faila beigÄs"
-syn match diffCommon   "^KopÄ“jÄs apakÅ¡direktorijas: .* un .*$"
+syn match diffBDiffer  "^BinÄrie faili .* un .* atÅ¡Ä·iras$"
+syn match diffIsA      "^Fails .* ir .* kamÄ“r fails .* ir .*"
+syn match diffNoEOL    "^\\ Nav jaunu rindu faila beigÄs"
+syn match diffCommon   "^KopÄ“jÄs apakÅ¡direktorijas: .* un .*"
 
 " ms
+syn match diffOnly     "^Hanya dalam .*"
 syn match diffIdentical        "^Fail .* dan .* adalah serupa$"
 syn match diffDiffer   "^Fail .* dan .* berbeza$"
 syn match diffBDiffer  "^Fail .* dan .* berbeza$"
-syn match diffIsA      "^Fail .* adalah .* manakala fail .* adalah .*$"
-syn match diffNoEOL    "^Tiada baris baru pada penghujung fail"
-syn match diffCommon   "^Subdirektori umum: .* dan .*$"
+syn match diffIsA      "^Fail .* adalah .* manakala fail .* adalah .*"
+syn match diffNoEOL    "^\\ Tiada baris baru pada penghujung fail"
+syn match diffCommon   "^Subdirektori umum: .* dan .*"
 
 " nl
-syn match diffOnly     "^Alleen in .*: .*$"
+syn match diffOnly     "^Alleen in .*"
 syn match diffIdentical        "^Bestanden .* en .* zijn identiek$"
 syn match diffDiffer   "^Bestanden .* en .* zijn verschillend$"
 syn match diffBDiffer  "^Bestanden .* en .* zijn verschillend$"
+syn match diffBDiffer  "^Binaire bestanden .* en .* zijn verschillend$"
 syn match diffIsA      "^Bestand .* is een .* terwijl bestand .* een .* is$"
-syn match diffNoEOL    "^Geen regeleindeteken (LF) aan einde van bestand"
-syn match diffCommon   "^Gemeenschappelijke submappen: .* en .*$"
+syn match diffNoEOL    "^\\ Geen regeleindeteken (LF) aan einde van bestand"
+syn match diffCommon   "^Gemeenschappelijke submappen: .* en .*"
 
 " pl
-syn match diffOnly     "^Tylko w .*: .*$"
+syn match diffOnly     "^Tylko w .*"
 syn match diffIdentical        "^Pliki .* i .* sÄ… identyczne$"
 syn match diffDiffer   "^Pliki .* i .* różniÄ… siÄ™$"
 syn match diffBDiffer  "^Pliki .* i .* różniÄ… siÄ™$"
-syn match diffIsA      "^Plik .* jest .*, podczas gdy plik .* jest .*$"
-syn match diffNoEOL    "^Brak znaku nowej linii na koÅ„cu pliku"
-syn match diffCommon   "^Wspólne podkatalogi: .* i .*$"
+syn match diffBDiffer  "^Binarne pliki .* i .* różniÄ… siÄ™$"
+syn match diffIsA      "^Plik .* jest .*, podczas gdy plik .* jest .*"
+syn match diffNoEOL    "^\\ Brak znaku nowej linii na koÅ„cu pliku"
+syn match diffCommon   "^Wspólne podkatalogi: .* i .*"
 
 " pt_BR
-syn match diffOnly     "^Somente em .*: .*$"
-syn match diffOnly     "^Apenas em .*: .*$"
+syn match diffOnly     "^Somente em .*"
+syn match diffOnly     "^Apenas em .*"
 syn match diffIdentical        "^Os aquivos .* e .* são idênticos$"
 syn match diffDiffer   "^Os arquivos .* e .* são diferentes$"
 syn match diffBDiffer  "^Os arquivos binários .* e .* são diferentes$"
-syn match diffIsA      "^O arquivo .* Ã© .* enquanto o arquivo .* Ã© .*$"
-syn match diffNoEOL    "^Falta o caracter nova linha no final do arquivo"
-syn match diffCommon   "^Subdiretórios idênticos: .* e .*$"
+syn match diffIsA      "^O arquivo .* Ã© .* enquanto o arquivo .* Ã© .*"
+syn match diffNoEOL    "^\\ Falta o caracter nova linha no final do arquivo"
+syn match diffCommon   "^Subdiretórios idênticos: .* e .*"
 
 " ro
-syn match diffOnly     "^Doar Ã®n .*: .*$"
+syn match diffOnly     "^Doar Ã®n .*"
 syn match diffIdentical        "^FiÅŸierele .* ÅŸi .* sunt identice$"
 syn match diffDiffer   "^FiÅŸierele .* ÅŸi .* diferă$"
 syn match diffBDiffer  "^FiÅŸierele binare .* ÅŸi .* diferă$"
 syn match diffIsA      "^FiÅŸierul .* este un .* pe când fiÅŸierul .* este un .*.$"
-syn match diffNoEOL    "^Nici un element de linie nouă la sfârÅŸitul fiÅŸierului"
+syn match diffNoEOL    "^\\ Nici un element de linie nouă la sfârÅŸitul fiÅŸierului"
 syn match diffCommon   "^Subdirectoare comune: .* ÅŸi .*.$"
 
 " ru
-syn match diffOnly     "^Только Ð² .*: .*$"
+syn match diffOnly     "^Только Ð² .*"
 syn match diffIdentical        "^Файлы .* Ð¸ .* Ð¸Ð´ÐµÐ½Ñ‚ичны$"
 syn match diffDiffer   "^Файлы .* Ð¸ .* Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð°ÑŽÑ‚ÑÑ$"
 syn match diffBDiffer  "^Файлы .* Ð¸ .* Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð°ÑŽÑ‚ÑÑ$"
-syn match diffIsA      "^Файл .* Ñто .*, Ñ‚огда ÐºÐ°Ðº Ñ„айл .* -- .*$"
-syn match diffNoEOL    "^Ð’ ÐºÐ¾Ð½Ñ†Ðµ Ñ„айла Ð½ÐµÑ‚ Ð½Ð¾Ð²Ð¾Ð¹ Ñтроки"
-syn match diffCommon   "^Общие Ð¿Ð¾Ð´ÐºÐ°Ñ‚алоги: .* Ð¸ .*$"
+syn match diffIsA      "^Файл .* Ñто .*, Ñ‚огда ÐºÐ°Ðº Ñ„айл .* -- .*"
+syn match diffNoEOL    "^\\ Ð’ ÐºÐ¾Ð½Ñ†Ðµ Ñ„айла Ð½ÐµÑ‚ Ð½Ð¾Ð²Ð¾Ð¹ Ñтроки"
+syn match diffCommon   "^Общие Ð¿Ð¾Ð´ÐºÐ°Ñ‚алоги: .* Ð¸ .*"
 
 " sr
-syn match diffOnly     "^Само Ñƒ .*: .*$"
+syn match diffOnly     "^Само Ñƒ .*"
 syn match diffIdentical        "^Датотеке â€ž.*“ Ð¸ â€ž.*“ Ñе Ð¿Ð¾Ð´ÑƒÐ´Ð°Ñ€Ð°Ñ˜Ñƒ$"
 syn match diffDiffer   "^Датотеке .* Ð¸ .* Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚е$"
 syn match diffBDiffer  "^Бинарне Ð´Ð°Ñ‚отеке .* Ð¸ .* Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ‚е$"
 syn match diffIsA      "^Датотека â€ž.*“ Ñ˜Ðµ â€ž.*“ Ð´Ð¾Ðº Ñ˜Ðµ Ð´Ð°Ñ‚отека â€ž.*“ â€ž.*“$"
-syn match diffNoEOL    "^Без Ð½Ð¾Ð²Ð¾Ð³ Ñ€ÐµÐ´Ð° Ð½Ð° ÐºÑ€Ð°Ñ˜Ñƒ Ð´Ð°Ñ‚отеке"
-syn match diffCommon   "^Заједнички Ð¿Ð¾Ð´Ð´Ð¸Ñ€ÐµÐºÑ‚оријуми: .* Ð¸ .*$"
+syn match diffNoEOL    "^\\ Ð‘ез Ð½Ð¾Ð²Ð¾Ð³ Ñ€ÐµÐ´Ð° Ð½Ð° ÐºÑ€Ð°Ñ˜Ñƒ Ð´Ð°Ñ‚отеке"
+syn match diffCommon   "^Заједнички Ð¿Ð¾Ð´Ð´Ð¸Ñ€ÐµÐºÑ‚оријуми: .* Ð¸ .*"
 
 " sv
-syn match diffOnly     "^Endast i .*: .*$"
+syn match diffOnly     "^Endast i .*"
 syn match diffIdentical        "^Filerna .* och .* Ã¤r lika$"
 syn match diffDiffer   "^Filerna .* och .* skiljer$"
 syn match diffBDiffer  "^Filerna .* och .* skiljer$"
-syn match diffIsA      "^Fil .* Ã¤r en .* medan fil .* Ã¤r en .*$"
-syn match diffNoEOL    "^Ingen nyrad vid filslut"
-syn match diffCommon   "^Lika underkataloger: .* och .*$"
+syn match diffIsA      "^Fil .* Ã¤r en .* medan fil .* Ã¤r en .*"
+syn match diffBDiffer  "^De binära filerna .* och .* skiljer$"
+syn match diffIsA      "^Filen .* Ã¤r .* medan filen .* Ã¤r .*"
+syn match diffNoEOL    "^\\ Ingen nyrad vid filslut"
+syn match diffCommon   "^Lika underkataloger: .* och .*"
 
 " tr
-syn match diffOnly     "^Yalnızca .*'da: .*$"
+syn match diffOnly     "^Yalnızca .*'da: .*"
 syn match diffIdentical        "^.* ve .* dosyaları birbirinin aynı$"
 syn match diffDiffer   "^.* ve .* dosyaları birbirinden farklı$"
 syn match diffBDiffer  "^.* ve .* dosyaları birbirinden farklı$"
-syn match diffIsA      "^.* dosyası, bir .*, halbuki .* dosyası bir .*$"
-syn match diffNoEOL    "^Dosya sonunda yenisatır yok."
-syn match diffCommon   "^Ortak alt dizinler: .* ve .*$"
+syn match diffBDiffer  "^Ä°kili .* ve .* birbirinden farklı$"
+syn match diffIsA      "^.* dosyası, bir .*, halbuki .* dosyası bir .*"
+syn match diffNoEOL    "^\\ Dosya sonunda yenisatır yok."
+syn match diffCommon   "^Ortak alt dizinler: .* ve .*"
 
 " uk
-syn match diffOnly     "^Лише Ñƒ .*: .*$"
+syn match diffOnly     "^Лише Ñƒ .*"
 syn match diffIdentical        "^Файли .* Ñ‚а .* Ñ–дентичні$"
 syn match diffDiffer   "^Файли .* Ñ‚а .* Ð²Ñ–дрізнÑÑŽÑ‚ÑŒÑÑ$"
 syn match diffBDiffer  "^Файли .* Ñ‚а .* Ð²Ñ–дрізнÑÑŽÑ‚ÑŒÑÑ$"
-syn match diffIsA      "^Файл .* Ñ†Ðµ .*, Ñ‚оді Ñк Ñ„айл .* -- .*$"
-syn match diffNoEOL    "^Ðаприкінці Ñ„айлу Ð½ÐµÐ¼Ð°Ñ” Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ñдка"
-syn match diffCommon   "^Спільні Ð¿Ñ–дкаталоги: .* Ñ‚а .*$"
+syn match diffBDiffer  "^Двійкові Ñ„айли .* Ñ‚а .* Ð²Ñ–дрізнÑÑŽÑ‚ÑŒÑÑ$"
+syn match diffIsA      "^Файл .* Ñ†Ðµ .*, Ñ‚оді Ñк Ñ„айл .* -- .*"
+syn match diffNoEOL    "^\\ Ðаприкінці Ñ„айлу Ð½ÐµÐ¼Ð°Ñ” Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ñ€Ñдка"
+syn match diffCommon   "^Спільні Ð¿Ñ–дкаталоги: .* Ñ‚а .*"
 
 " vi
-syn match diffOnly     "^Chỉ trong .*: .*$"
+syn match diffOnly     "^Chỉ trong .*"
 syn match diffIdentical        "^Hai tập tin .* và .* là bằng nhau.$"
+syn match diffIdentical        "^Cả .* và .* là cùng má»™t tập tin$"
 syn match diffDiffer   "^Hai tập tin .* và .* là khác nhau.$"
+syn match diffBDiffer  "^Hai tập tin nhị phân .* và .* khác nhau$"
+syn match diffIsA      "^Tập tin .* là má»™t .* trong khi tập tin .* là má»™t .*.$"
 syn match diffBDiffer  "^Hai tập tin .* và .* là khác nhau.$"
 syn match diffIsA      "^Tập tin .* là má»™t .* còn tập tin .* là má»™t .*.$"
-syn match diffNoEOL    "^Không có ký tá»± dòng má»›i tại kêt thức tập tin."
-syn match diffCommon   "^ThÆ° mục con chung: .* và .*$"
+syn match diffNoEOL    "^\\ Không có ký tá»± dòng má»›i tại kêt thức tập tin."
+syn match diffCommon   "^ThÆ° mục con chung: .* và .*"
 
 " zh_CN
-syn match diffOnly     "^åªåœ¨ .* å­˜åœ¨ï¼š.*$"
+syn match diffOnly     "^åªåœ¨ .* å­˜åœ¨ï¼š.*"
 syn match diffIdentical        "^檔案 .* å’Œ .* ç›¸åŒ$"
 syn match diffDiffer   "^文件 .* å’Œ .* ä¸åŒ$"
 syn match diffBDiffer  "^文件 .* å’Œ .* ä¸åŒ$"
-syn match diffIsA      "^文件 .* æ˜¯.*而文件 .* æ˜¯.*$"
-syn match diffNoEOL    "^文件尾没有 newline å­—符"
+syn match diffIsA      "^文件 .* æ˜¯.*而文件 .* æ˜¯.*"
+syn match diffNoEOL    "^\\ æ–‡ä»¶å°¾æ²¡æœ‰ newline å­—符"
 syn match diffCommon   "^.* å’Œ .* æœ‰å…±åŒçš„å­ç›®å½•$"
 
 " zh_TW
+syn match diffOnly     "^åªåœ¨ .* å­˜åœ¨ï¼š.*"
+syn match diffIdentical        "^檔案 .* å’Œ .* ç›¸åŒ$"
 syn match diffDiffer   "^檔案 .* èˆ‡ .* ä¸åŒ$"
 syn match diffBDiffer  "^二元碼檔 .* èˆ‡ .* ä¸åŒ$"
-syn match diffIsA      "^檔案 .* æ˜¯.*而檔案 .* æ˜¯.*$"
-syn match diffNoEOL    "^檔案末沒有 newline å­—å…ƒ"
+syn match diffIsA      "^檔案 .* æ˜¯.*而檔案 .* æ˜¯.*"
+syn match diffNoEOL    "^\\ æª”案末沒有 newline å­—å…ƒ"
 syn match diffCommon   "^.* å’Œ .* æœ‰å…±åŒçš„副目錄$"
 
 
@@ -303,8 +338,8 @@ syn match diffLine  "^\d\+\(,\d\+\)\=[cda]\d\+\>.*"
 
 syn match diffFile     "^diff.*"
 syn match diffFile     "^+++ .*"
-syn match diffFile     "^Index: .*$"
-syn match diffFile     "^==== .*$"
+syn match diffFile     "^Index: .*"
+syn match diffFile     "^==== .*"
 syn match diffOldFile  "^\*\*\* .*"
 syn match diffNewFile  "^--- .*"
 
index 7a0b1e8..fe1fcae 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         dircolors(1) input file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-06-23
+" Latest Revision:  2012-04-25
 
 if exists("b:current_syntax")
   finish
@@ -17,6 +17,8 @@ syn region  dircolorsComment    start='#' end='$' contains=dircolorsTodo,@Spell
 syn keyword dircolorsKeyword    TERM LEFT LEFTCODE RIGHT RIGHTCODE END ENDCODE
 
 syn keyword dircolorsKeyword    NORMAL NORM FILE DIR LNK LINK SYMLINK ORPHAN
+                                \ RESET MULTIHARDLINK CAPABILITY SETUID SETGID
+                                \ STICKY STICKY_OTHER_WRITABLE OTHER_WRITABLE 
                                 \ MISSING FIFO PIPE SOCK BLK BLOCK CHR CHAR
                                 \ DOOR EXEC
                                 \ nextgroup=@dircolorsColors skipwhite
diff --git a/runtime/syntax/dirpager.vim b/runtime/syntax/dirpager.vim
new file mode 100644 (file)
index 0000000..1a60063
--- /dev/null
@@ -0,0 +1,56 @@
+" Vim syntax file
+" Maintainer:    Thilo Six
+" Contact:       <vim-dev at vim dot org>
+"                http://www.vim.org/maillist.php#vim-dev
+"
+" Description:   display directory content inside Vim with syntax
+"                highlighting
+" File:                  runtime/syntax/dirpager.vim
+" Last Change:   2012 May 19
+" Modeline:      vim: ts=8:sw=2:sts=2:
+"
+" Credits:       dirpager.vim is derived from Nikolai Weibulls dircolors.vim
+"
+" License:       VIM License
+"                Vim is Charityware, see ":help Uganda"
+"
+" Usage:         $ ls -la | view -c "set ft=dirpager" -
+"
+"
+",----[ ls(1posix) ]--------------------------------------------------
+"
+" The  <entry type> character shall describe the type of file, as
+"       follows:
+"
+"       d      Directory.
+"       b      Block special file.
+"       c      Character special file.
+"       l (ell)        Symbolic link.
+"       p      FIFO.
+"       -      Regular file.
+"
+
+if exists("b:current_syntax") || &compatible
+  finish
+endif
+
+setlocal nowrap
+
+syn keyword  DirPagerTodo      contained FIXME TODO XXX NOTE
+
+syn region   DirPagerExe       start='^...x\|^......x\|^.........x' end='$'    contains=DirPagerTodo,@Spell
+syn region   DirPagerDir       start='^d' end='$'      contains=DirPagerTodo,@Spell
+syn region   DirPagerLink      start='^l' end='$'      contains=DirPagerTodo,@Spell
+syn region   DirPagerSpecial   start='^b' end='$'      contains=DirPagerTodo,@Spell
+syn region   DirPagerSpecial   start='^c' end='$'      contains=DirPagerTodo,@Spell
+syn region   DirPagerFifo      start='^p' end='$'      contains=DirPagerTodo,@Spell
+
+hi def link  DirPagerTodo      Todo
+hi def      DirPagerExe        ctermfg=Green       guifg=Green
+hi def      DirPagerDir        ctermfg=Blue        guifg=Blue
+hi def      DirPagerLink       ctermfg=Cyan        guifg=Cyan
+hi def      DirPagerSpecial    ctermfg=Yellow      guifg=Yellow
+hi def      DirPagerFifo       ctermfg=Brown       guifg=Brown
+
+let b:current_syntax = "dirpager"
+
index 67c46b7..04abcc9 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    Django template
 " Maintainer:  Dave Hodder <dmh@dmh.org.uk>
-" Last Change: 2010 May 19
+" Last Change: 2012 Apr 09
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -21,7 +21,7 @@ syn match djangoError "%}\|}}\|#}"
 syn keyword djangoStatement contained autoescape csrf_token empty
 " FIXME ==, !=, <, >, <=, and >= should be djangoStatements:
 " syn keyword djangoStatement contained == != < > <= >=
-syn keyword djangoStatement contained and as block endblock by cycle debug else
+syn keyword djangoStatement contained and as block endblock by cycle debug else elif
 syn keyword djangoStatement contained extends filter endfilter firstof for
 syn keyword djangoStatement contained endfor if endif ifchanged endifchanged
 syn keyword djangoStatement contained ifequal endifequal ifnotequal
@@ -45,7 +45,7 @@ syn keyword djangoFilter contained linebreaks linebreaksbr linenumbers ljust
 syn keyword djangoFilter contained lower make_list phone2numeric pluralize
 syn keyword djangoFilter contained pprint random removetags rjust slice slugify
 syn keyword djangoFilter contained safe safeseq stringformat striptags
-syn keyword djangoFilter contained time timesince timeuntil title
+syn keyword djangoFilter contained time timesince timeuntil title truncatechars
 syn keyword djangoFilter contained truncatewords truncatewords_html unordered_list upper urlencode
 syn keyword djangoFilter contained urlize urlizetrunc wordcount wordwrap yesno
 
diff --git a/runtime/syntax/dnsmasq.vim b/runtime/syntax/dnsmasq.vim
new file mode 100644 (file)
index 0000000..ebee808
--- /dev/null
@@ -0,0 +1,229 @@
+" Vim syntax file
+" Maintainer:  Thilo Six
+" Contact:     <vim-dev at vim dot org>
+"              http://www.vim.org/maillist.php#vim-dev
+"
+" Description: highlight dnsmasq configuration files
+" File:                runtime/syntax/dnsmasq.vim
+" Version:     2.61-1
+" Last Change: 2012 May 19
+" Modeline:    vim: ts=8:sw=2:sts=2:
+"
+" Credits:     Igor N. Prischepoff
+"              Doug Kearns
+"              David Ne\v{c}as
+"              Christian Brabandt
+"
+" License:     VIM License
+"              Vim is Charityware, see ":help Uganda"
+"
+" Options:     You might want to add this to your vimrc:
+"
+"              if &background == "dark"
+"                " dnsmasq.vim
+"                  let dnsmasq_backrgound_light = 0
+"              else
+"                  let dnsmasq_backrgound_light = 1
+"              endif
+"
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+    syntax clear
+elseif exists("b:current_syntax") || &compatible
+    finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if !exists("b:dnsmasq_backrgound_light")
+       if exists("dnsmasq_backrgound_light")
+               let b:dnsmasq_backrgound_light = dnsmasq_backrgound_light
+       else
+               let b:dnsmasq_backrgound_light = 0
+       endif
+endif
+
+
+" case on
+syn case match
+
+syn match   DnsmasqValues   "=.*"hs=s+1 contains=DnsmasqComment,DnsmasqSpecial
+syn match   DnsmasqSpecial  display '=\|@\|,\|!\|:'      nextgroup=DnsmasqValues
+syn match   DnsmasqSpecial  "#"
+
+syn match   DnsmasqIPv4            "\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>"   nextgroup=DnsmasqSubnet2,DnsmasqRange
+syn match   DnsmasqSubnet   "\<255.\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{2\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>"
+syn match   DnsmasqSubnet2  contained "\/\([0-4]\?[0-9]\)\>"
+syn match   DnsmasqRange    contained "-"
+syn match   DnsmasqMac     "\<\(\x\x\?:\)\{5}\x\x\?"
+
+syn match   DnsmasqTime            "\<\(\d\{1,3}\)[hm]\>"
+
+" String
+syn match   DnsmasqString   "\".*\""  contains=@Spell
+syn match   DnsmasqString   "'.*'"    contains=@Spell
+
+" Comments
+syn keyword DnsmasqTodo            FIXME TODO XXX NOTE contained
+syn match   DnsmasqComment  "\(^\|\s\+\)#.*$"   contains=@Spell,DnsmasqTodo
+
+" highlight trailing spaces
+syn match   DnsmasqTrailSpace     "[ \t]\+$"
+syn match   DnsmasqTrailSpace     "[ \t]\+$" containedin=ALL
+
+syn match DnsmasqKeywordSpecial    "\<set\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<tag\>:"me=e-1
+syn match DnsmasqKeywordSpecial    ",\<static\>"hs=s+1   contains=DnsmasqSpecial
+syn match DnsmasqKeywordSpecial    ",\<infinite\>"hs=s+1  contains=DnsmasqSpecial
+syn match DnsmasqKeywordSpecial    "\<encap\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<interface\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<vi-encap\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<net\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<vendor\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<opt\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<option\>:"me=e-1
+syn match DnsmasqKeywordSpecial    ",\<ignore\>"hs=s+1   contains=DnsmasqSpecial
+syn match DnsmasqKeywordSpecial    "\<id\>:"me=e-1
+
+syn match DnsmasqKeyword    "^\s*add-mac\>"
+syn match DnsmasqKeyword    "^\s*addn-hosts\>"
+syn match DnsmasqKeyword    "^\s*address\>"
+syn match DnsmasqKeyword    "^\s*alias\>"
+syn match DnsmasqKeyword    "^\s*all-servers\>"
+syn match DnsmasqKeyword    "^\s*bind-interfaces\>"
+syn match DnsmasqKeyword    "^\s*bogus-nxdomain\>"
+syn match DnsmasqKeyword    "^\s*bogus-priv\>"
+syn match DnsmasqKeyword    "^\s*bootp-dynamic\>"
+syn match DnsmasqKeyword    "^\s*bridge-interface\>"
+syn match DnsmasqKeyword    "^\s*cache-size\>"
+syn match DnsmasqKeyword    "^\s*clear-on-reload\>"
+syn match DnsmasqKeyword    "^\s*cname\>"
+syn match DnsmasqKeyword    "^\s*conf-dir\>"
+syn match DnsmasqKeyword    "^\s*conf-file\>"
+syn match DnsmasqKeyword    "^\s*conntrack\>"
+syn match DnsmasqKeyword    "^\s*dhcp-alternate-port\>"
+syn match DnsmasqKeyword    "^\s*dhcp-authoritative\>"
+syn match DnsmasqKeyword    "^\s*dhcp-boot\>"
+syn match DnsmasqKeyword    "^\s*dhcp-broadcast\>"
+syn match DnsmasqKeyword    "^\s*dhcp-circuitid\>"
+syn match DnsmasqKeyword    "^\s*dhcp-client-update\>"
+syn match DnsmasqKeyword    "^\s*dhcp-duid\>"
+syn match DnsmasqKeyword    "^\s*dhcp-fqdn\>"
+syn match DnsmasqKeyword    "^\s*dhcp-generate-names\>"
+syn match DnsmasqKeyword    "^\s*dhcp-host\>"
+syn match DnsmasqKeyword    "^\s*dhcp-hostsfile\>"
+syn match DnsmasqKeyword    "^\s*dhcp-ignore\>"
+syn match DnsmasqKeyword    "^\s*dhcp-ignore-names\>"
+syn match DnsmasqKeyword    "^\s*dhcp-lease-max\>"
+syn match DnsmasqKeyword    "^\s*dhcp-leasefile\>"
+syn match DnsmasqKeyword    "^\s*dhcp-luascript\>"
+syn match DnsmasqKeyword    "^\s*dhcp-mac\>"
+syn match DnsmasqKeyword    "^\s*dhcp-match\>"
+syn match DnsmasqKeyword    "^\s*dhcp-no-override\>"
+syn match DnsmasqKeyword    "^\s*dhcp-option\>"
+syn match DnsmasqKeyword    "^\s*dhcp-option-force\>"
+syn match DnsmasqKeyword    "^\s*dhcp-optsfile\>"
+syn match DnsmasqKeyword    "^\s*dhcp-proxy\>"
+syn match DnsmasqKeyword    "^\s*dhcp-range\>"
+syn match DnsmasqKeyword    "^\s*dhcp-remoteid\>"
+syn match DnsmasqKeyword    "^\s*dhcp-script\>"
+syn match DnsmasqKeyword    "^\s*dhcp-scriptuser\>"
+syn match DnsmasqKeyword    "^\s*dhcp-sequential-ip\>"
+syn match DnsmasqKeyword    "^\s*dhcp-subscrid\>"
+syn match DnsmasqKeyword    "^\s*dhcp-userclass\>"
+syn match DnsmasqKeyword    "^\s*dhcp-vendorclass\>"
+syn match DnsmasqKeyword    "^\s*dns-forward-max\>"
+syn match DnsmasqKeyword    "^\s*domain\>"
+syn match DnsmasqKeyword    "^\s*domain-needed\>"
+syn match DnsmasqKeyword    "^\s*edns-packet-max\>"
+syn match DnsmasqKeyword    "^\s*enable-dbus\>"
+syn match DnsmasqKeyword    "^\s*enable-ra\>"
+syn match DnsmasqKeyword    "^\s*enable-tftp\>"
+syn match DnsmasqKeyword    "^\s*except-interface\>"
+syn match DnsmasqKeyword    "^\s*expand-hosts\>"
+syn match DnsmasqKeyword    "^\s*filterwin2k\>"
+syn match DnsmasqKeyword    "^\s*group\>"
+syn match DnsmasqKeyword    "^\s*host-record\>"
+syn match DnsmasqKeyword    "^\s*interface\>"
+syn match DnsmasqKeyword    "^\s*interface-name\>"
+syn match DnsmasqKeyword    "^\s*keep-in-foreground\>"
+syn match DnsmasqKeyword    "^\s*leasefile-ro\>"
+syn match DnsmasqKeyword    "^\s*listen-address\>"
+syn match DnsmasqKeyword    "^\s*local\>"
+syn match DnsmasqKeyword    "^\s*localmx\>"
+syn match DnsmasqKeyword    "^\s*local-ttl\>"
+syn match DnsmasqKeyword    "^\s*localise-queries\>"
+syn match DnsmasqKeyword    "^\s*log-async\>"
+syn match DnsmasqKeyword    "^\s*log-dhcp\>"
+syn match DnsmasqKeyword    "^\s*log-facility\>"
+syn match DnsmasqKeyword    "^\s*log-queries\>"
+syn match DnsmasqKeyword    "^\s*max-ttl\>"
+syn match DnsmasqKeyword    "^\s*min-port\>"
+syn match DnsmasqKeyword    "^\s*mx-host\>"
+syn match DnsmasqKeyword    "^\s*mx-target\>"
+syn match DnsmasqKeyword    "^\s*naptr-record\>"
+syn match DnsmasqKeyword    "^\s*neg-ttl\>"
+syn match DnsmasqKeyword    "^\s*no-daemon\>"
+syn match DnsmasqKeyword    "^\s*no-dhcp-interface\>"
+syn match DnsmasqKeyword    "^\s*no-hosts\>"
+syn match DnsmasqKeyword    "^\s*no-negcache\>"
+syn match DnsmasqKeyword    "^\s*no-ping\>"
+syn match DnsmasqKeyword    "^\s*no-poll\>"
+syn match DnsmasqKeyword    "^\s*no-resolv\>"
+syn match DnsmasqKeyword    "^\s*pid-file\>"
+syn match DnsmasqKeyword    "^\s*port\>"
+syn match DnsmasqKeyword    "^\s*proxy-dnssec\>"
+syn match DnsmasqKeyword    "^\s*ptr-record\>"
+syn match DnsmasqKeyword    "^\s*pxe-prompt\>"
+syn match DnsmasqKeyword    "^\s*pxe-service\>"
+syn match DnsmasqKeyword    "^\s*query-port\>"
+syn match DnsmasqKeyword    "^\s*read-ethers\>"
+syn match DnsmasqKeyword    "^\s*rebind-domain-ok\>"
+syn match DnsmasqKeyword    "^\s*rebind-localhost-ok\>"
+syn match DnsmasqKeyword    "^\s*resolv-file\>"
+syn match DnsmasqKeyword    "^\s*selfmx\>"
+syn match DnsmasqKeyword    "^\s*server\>"
+syn match DnsmasqKeyword    "^\s*srv-host\>"
+syn match DnsmasqKeyword    "^\s*stop-dns-rebind\>"
+syn match DnsmasqKeyword    "^\s*strict-order\>"
+syn match DnsmasqKeyword    "^\s*tag-if\>"
+syn match DnsmasqKeyword    "^\s*test\>"
+syn match DnsmasqKeyword    "^\s*tftp-max\>"
+syn match DnsmasqKeyword    "^\s*tftp-lowercase\>"
+syn match DnsmasqKeyword    "^\s*tftp-no-blocksize\>"
+syn match DnsmasqKeyword    "^\s*tftp-port-range\>"
+syn match DnsmasqKeyword    "^\s*tftp-root\>"
+syn match DnsmasqKeyword    "^\s*tftp-secure\>"
+syn match DnsmasqKeyword    "^\s*tftp-unique-root\>"
+syn match DnsmasqKeyword    "^\s*txt-record\>"
+syn match DnsmasqKeyword    "^\s*user\>"
+syn match DnsmasqKeyword    "^\s*version\>"
+
+
+if b:dnsmasq_backrgound_light == 1
+    hi def DnsmasqKeyword      ctermfg=DarkGreen guifg=DarkGreen
+else
+    hi def link DnsmasqKeyword  Keyword
+endif
+hi def link DnsmasqKeywordSpecial Type
+hi def link DnsmasqTodo                Todo
+hi def link DnsmasqSpecial     Constant
+hi def link DnsmasqIPv4                Identifier
+hi def link DnsmasqSubnet2     DnsmasqSubnet
+hi def link DnsmasqSubnet      DnsmasqMac
+hi def link DnsmasqRange       DnsmasqMac
+hi def link DnsmasqMac         Preproc
+hi def link DnsmasqTime                Preproc
+hi def link DnsmasqComment     Comment
+hi def link DnsmasqTrailSpace  DiffDelete
+hi def link DnsmasqString      Constant
+hi def link DnsmasqValues      Normal
+
+let b:current_syntax = "dnsmasq"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
index 73c1cb4..fc679ee 100644 (file)
@@ -1,9 +1,10 @@
 " Vim syntax file
 " Language:    DocBook
 " Maintainer:  Devin Weaver <vim@tritarget.com>
+" Last Updated By: Shlomi Fish
 " URL:         http://tritarget.com/pub/vim/syntax/docbk.vim
-" Last Change: $Date: 2005/06/23 22:31:01 $
-" Version:     $Revision: 1.2 $
+" Last Change: 2012 Nov 28
+" Version:     1.2 (and modified after that)
 " Thanks to Johannes Zellner <johannes@zellner.org> for the default to XML
 " suggestion.
 
@@ -28,6 +29,15 @@ if !exists('b:docbk_type')
     let b:docbk_type = 'xml'
   endif
 endif
+
+if !exists('b:docbk_ver')
+  if exists('docbk_ver')
+    let b:docbk_ver = docbk_ver
+  else
+    let b:docbk_ver = 4
+  endif
+end
+
 if 'xml' == b:docbk_type
     doau Syntax xml
     syn cluster xmlTagHook add=docbkKeyword
@@ -40,81 +50,121 @@ elseif 'sgml' == b:docbk_type
     syn case ignore
 endif
 
-" <comment> has been removed and replace with <remark> in DocBook 4.0
-" <comment> kept for backwards compatability.
-syn keyword docbkKeyword abbrev abstract accel ackno acronym action contained
-syn keyword docbkKeyword address affiliation alt anchor answer appendix contained
-syn keyword docbkKeyword application area areaset areaspec arg artheader contained
-syn keyword docbkKeyword article articleinfo artpagenums attribution audiodata contained
-syn keyword docbkKeyword audioobject author authorblurb authorgroup contained
-syn keyword docbkKeyword authorinitials beginpage bibliodiv biblioentry contained
-syn keyword docbkKeyword bibliography bibliomisc bibliomixed bibliomset contained
-syn keyword docbkKeyword biblioset blockquote book bookbiblio bookinfo contained
-syn keyword docbkKeyword bridgehead callout calloutlist caption caution contained
-syn keyword docbkKeyword chapter citation citerefentry citetitle city contained
-syn keyword docbkKeyword classname cmdsynopsis co collab collabname contained
-syn keyword docbkKeyword colophon colspec command comment computeroutput contained
-syn keyword docbkKeyword confdates confgroup confnum confsponsor conftitle contained
-syn keyword docbkKeyword constant contractnum contractsponsor contrib contained
-syn keyword docbkKeyword copyright corpauthor corpname country database contained
-syn keyword docbkKeyword date dedication docinfo edition editor email contained
-syn keyword docbkKeyword emphasis entry entrytbl envar epigraph equation contained
-syn keyword docbkKeyword errorcode errorname errortype example fax figure contained
-syn keyword docbkKeyword filename firstname firstterm footnote footnoteref contained
+syn keyword docbkKeyword abbrev abstract accel acronym address contained
+syn keyword docbkKeyword affiliation alt anchor answer appendix contained
+syn keyword docbkKeyword application area areaset areaspec arg contained
+syn keyword docbkKeyword article artpagenums attribution audiodata contained
+syn keyword docbkKeyword audioobject author authorgroup contained
+syn keyword docbkKeyword authorinitials bibliocoverage bibliodiv contained
+syn keyword docbkKeyword biblioentry bibliography biblioid contained
+syn keyword docbkKeyword bibliolist bibliomisc bibliomixed contained
+syn keyword docbkKeyword bibliomset biblioref bibliorelation contained
+syn keyword docbkKeyword biblioset bibliosource blockquote book contained
+syn keyword docbkKeyword bridgehead callout calloutlist caption contained
+syn keyword docbkKeyword caution chapter citation citebiblioid contained
+syn keyword docbkKeyword citerefentry citetitle city classname contained
+syn keyword docbkKeyword classsynopsis classsynopsisinfo cmdsynopsis contained
+syn keyword docbkKeyword co code col colgroup collab colophon contained
+syn keyword docbkKeyword colspec command computeroutput confdates contained
+syn keyword docbkKeyword confgroup confnum confsponsor conftitle contained
+syn keyword docbkKeyword constant constructorsynopsis contractnum contained
+syn keyword docbkKeyword contractsponsor contrib copyright coref contained
+syn keyword docbkKeyword country database date dedication contained
+syn keyword docbkKeyword destructorsynopsis edition editor email contained
+syn keyword docbkKeyword emphasis entry entrytbl envar epigraph contained
+syn keyword docbkKeyword equation errorcode errorname errortext contained
+syn keyword docbkKeyword errortype example exceptionname fax contained
+syn keyword docbkKeyword fieldsynopsis figure filename firstname contained
+syn keyword docbkKeyword firstterm footnote footnoteref contained
 syn keyword docbkKeyword foreignphrase formalpara funcdef funcparams contained
 syn keyword docbkKeyword funcprototype funcsynopsis funcsynopsisinfo contained
-syn keyword docbkKeyword function glossary glossdef glossdiv glossentry contained
-syn keyword docbkKeyword glosslist glosssee glossseealso glossterm graphic contained
-syn keyword docbkKeyword graphicco group guibutton guiicon guilabel contained
+syn keyword docbkKeyword function glossary glossdef glossdiv contained
+syn keyword docbkKeyword glossentry glosslist glosssee glossseealso contained
+syn keyword docbkKeyword glossterm group guibutton guiicon guilabel contained
 syn keyword docbkKeyword guimenu guimenuitem guisubmenu hardware contained
-syn keyword docbkKeyword highlights holder honorific imagedata imageobject contained
-syn keyword docbkKeyword imageobjectco important index indexdiv indexentry contained
-syn keyword docbkKeyword indexterm informalequation informalexample contained
-syn keyword docbkKeyword informalfigure informaltable inlineequation contained
-syn keyword docbkKeyword inlinegraphic inlinemediaobject interface contained
-syn keyword docbkKeyword interfacedefinition invpartnumber isbn issn contained
-syn keyword docbkKeyword issuenum itemizedlist itermset jobtitle keycap contained
-syn keyword docbkKeyword keycode keycombo keysym keyword keywordset label contained
-syn keyword docbkKeyword legalnotice lineage lineannotation link listitem contained
-syn keyword docbkKeyword literal literallayout lot lotentry manvolnum contained
-syn keyword docbkKeyword markup medialabel mediaobject mediaobjectco contained
-syn keyword docbkKeyword member menuchoice modespec mousebutton msg msgaud contained
-syn keyword docbkKeyword msgentry msgexplan msginfo msglevel msgmain contained
-syn keyword docbkKeyword msgorig msgrel msgset msgsub msgtext note contained
-syn keyword docbkKeyword objectinfo olink option optional orderedlist contained
-syn keyword docbkKeyword orgdiv orgname otheraddr othercredit othername contained
-syn keyword docbkKeyword pagenums para paramdef parameter part partintro contained
-syn keyword docbkKeyword phone phrase pob postcode preface primary contained
-syn keyword docbkKeyword primaryie printhistory procedure productname contained
-syn keyword docbkKeyword productnumber programlisting programlistingco contained
-syn keyword docbkKeyword prompt property pubdate publisher publishername contained
-syn keyword docbkKeyword pubsnumber qandadiv qandaentry qandaset question contained
-syn keyword docbkKeyword quote refclass refdescriptor refentry contained
+syn keyword docbkKeyword holder honorific imagedata imageobject contained
+syn keyword docbkKeyword imageobjectco important index indexdiv contained
+syn keyword docbkKeyword indexentry indexterm informalequation contained
+syn keyword docbkKeyword informalexample informalfigure contained
+syn keyword docbkKeyword informaltable initializer inlineequation contained
+syn keyword docbkKeyword inlinemediaobject interfacename issuenum contained
+syn keyword docbkKeyword itemizedlist itermset jobtitle keycap contained
+syn keyword docbkKeyword keycode keycombo keysym keyword keywordset contained
+syn keyword docbkKeyword label legalnotice lineage lineannotation contained
+syn keyword docbkKeyword link listitem literal literallayout contained
+syn keyword docbkKeyword manvolnum markup mathphrase mediaobject contained
+syn keyword docbkKeyword member menuchoice methodname methodparam contained
+syn keyword docbkKeyword methodsynopsis modifier mousebutton msg contained
+syn keyword docbkKeyword msgaud msgentry msgexplan msginfo msglevel contained
+syn keyword docbkKeyword msgmain msgorig msgrel msgset msgsub contained
+syn keyword docbkKeyword msgtext note olink ooclass ooexception contained
+syn keyword docbkKeyword oointerface option optional orderedlist contained
+syn keyword docbkKeyword orgdiv orgname otheraddr othercredit contained
+syn keyword docbkKeyword othername package pagenums para paramdef contained
+syn keyword docbkKeyword parameter part partintro personblurb contained
+syn keyword docbkKeyword personname phone phrase pob postcode contained
+syn keyword docbkKeyword preface primary primaryie printhistory contained
+syn keyword docbkKeyword procedure productname productnumber contained
+syn keyword docbkKeyword programlisting programlistingco prompt contained
+syn keyword docbkKeyword property pubdate publisher publishername contained
+syn keyword docbkKeyword qandadiv qandaentry qandaset question quote contained
+syn keyword docbkKeyword refclass refdescriptor refentry contained
 syn keyword docbkKeyword refentrytitle reference refmeta refmiscinfo contained
 syn keyword docbkKeyword refname refnamediv refpurpose refsect1 contained
-syn keyword docbkKeyword refsect1info refsect2 refsect2info refsect3 contained
-syn keyword docbkKeyword refsect3info refsynopsisdiv refsynopsisdivinfo contained
-syn keyword docbkKeyword releaseinfo remark replaceable returnvalue revhistory contained
-syn keyword docbkKeyword revision revnumber revremark row sbr screen contained
-syn keyword docbkKeyword screenco screeninfo screenshot secondary contained
-syn keyword docbkKeyword secondaryie sect1 sect1info sect2 sect2info sect3 contained
-syn keyword docbkKeyword sect3info sect4 sect4info sect5 sect5info section contained
-syn keyword docbkKeyword sectioninfo see seealso seealsoie seeie seg contained
-syn keyword docbkKeyword seglistitem segmentedlist segtitle seriesinfo contained
-syn keyword docbkKeyword seriesvolnums set setindex setinfo sgmltag contained
-syn keyword docbkKeyword shortaffil shortcut sidebar simpara simplelist contained
-syn keyword docbkKeyword simplesect spanspec state step street structfield contained
-syn keyword docbkKeyword structname subject subjectset subjectterm contained
-syn keyword docbkKeyword subscript substeps subtitle superscript surname contained
-syn keyword docbkKeyword symbol synopfragment synopfragmentref synopsis contained
-syn keyword docbkKeyword systemitem table tbody term tertiary tertiaryie contained
-syn keyword docbkKeyword textobject tfoot tgroup thead tip title contained
-syn keyword docbkKeyword titleabbrev toc tocback tocchap tocentry tocfront contained
-syn keyword docbkKeyword toclevel1 toclevel2 toclevel3 toclevel4 toclevel5 contained
-syn keyword docbkKeyword tocpart token trademark type ulink userinput contained
+syn keyword docbkKeyword refsect2 refsect3 refsection refsynopsisdiv contained
+syn keyword docbkKeyword releaseinfo remark replaceable returnvalue contained
+syn keyword docbkKeyword revdescription revhistory revision contained
+syn keyword docbkKeyword revnumber revremark row sbr screen screenco contained
+syn keyword docbkKeyword screenshot secondary secondaryie sect1 contained
+syn keyword docbkKeyword sect2 sect3 sect4 sect5 section see seealso contained
+syn keyword docbkKeyword seealsoie seeie seg seglistitem contained
+syn keyword docbkKeyword segmentedlist segtitle seriesvolnums set contained
+syn keyword docbkKeyword setindex shortaffil shortcut sidebar contained
+syn keyword docbkKeyword simpara simplelist simplemsgentry contained
+syn keyword docbkKeyword simplesect spanspec state step contained
+syn keyword docbkKeyword stepalternatives street subject subjectset contained
+syn keyword docbkKeyword subjectterm subscript substeps subtitle contained
+syn keyword docbkKeyword superscript surname symbol synopfragment contained
+syn keyword docbkKeyword synopfragmentref synopsis systemitem table contained
+syn keyword docbkKeyword task taskprerequisites taskrelated contained
+syn keyword docbkKeyword tasksummary tbody td term termdef tertiary contained
+syn keyword docbkKeyword tertiaryie textdata textobject tfoot tgroup contained
+syn keyword docbkKeyword th thead tip title titleabbrev toc tocentry contained
+syn keyword docbkKeyword token tr trademark type uri userinput contained
 syn keyword docbkKeyword varargs variablelist varlistentry varname contained
-syn keyword docbkKeyword videodata videoobject void volumenum warning contained
-syn keyword docbkKeyword wordasword xref year contained
+syn keyword docbkKeyword videodata videoobject void volumenum contained
+syn keyword docbkKeyword warning wordasword xref year contained
+
+if b:docbk_ver == 4
+  syn keyword docbkKeyword ackno action appendixinfo articleinfo contained
+  syn keyword docbkKeyword authorblurb beginpage bibliographyinfo contained
+  syn keyword docbkKeyword blockinfo bookinfo chapterinfo contained
+  syn keyword docbkKeyword collabname corpauthor corpcredit contained
+  syn keyword docbkKeyword corpname glossaryinfo graphic graphicco contained
+  syn keyword docbkKeyword highlights indexinfo inlinegraphic contained
+  syn keyword docbkKeyword interface invpartnumber isbn issn lot contained
+  syn keyword docbkKeyword lotentry medialabel mediaobjectco contained
+  syn keyword docbkKeyword modespec objectinfo partinfo contained
+  syn keyword docbkKeyword prefaceinfo pubsnumber refentryinfo contained
+  syn keyword docbkKeyword referenceinfo refsect1info refsect2info contained
+  syn keyword docbkKeyword refsect3info refsectioninfo contained
+  syn keyword docbkKeyword refsynopsisdivinfo screeninfo sect1info contained
+  syn keyword docbkKeyword sect2info sect3info sect4info sect5info contained
+  syn keyword docbkKeyword sectioninfo setindexinfo setinfo contained
+  syn keyword docbkKeyword sgmltag sidebarinfo structfield contained
+  syn keyword docbkKeyword structname tocback tocchap tocfront contained
+  syn keyword docbkKeyword toclevel1 toclevel2 toclevel3 toclevel4 contained
+  syn keyword docbkKeyword toclevel5 tocpart ulink contained
+
+else
+  syn keyword docbkKeyword acknowledgements annotation arc contained
+  syn keyword docbkKeyword constraint constraintdef cover contained
+  syn keyword docbkKeyword extendedlink givenname info lhs locator contained
+  syn keyword docbkKeyword multimediaparam nonterminal org person contained
+  syn keyword docbkKeyword production productionrecap contained
+  syn keyword docbkKeyword productionset rhs tag tocdiv topic contained
+
+endif
 
 " Add special emphasis on some regions. Thanks to Rory Hunter <roryh@dcs.ed.ac.uk> for these ideas.
 syn region docbkRegion start="<emphasis>"lc=10 end="</emphasis>"me=e-11 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend
index 219384f..e474f21 100644 (file)
@@ -1,9 +1,12 @@
 " Vim syntax file
-" Language:    Configuration File (ini file) for MSDOS/MS Windows
-" Version Info: @(#)dosini.vim 1.6 97/12/15 08:54:12
-" Author:       Sean M. McKee <mckee@misslink.net>
-" Maintainer:   Nima Talebi <nima@it.net.au>
-" Last Change: Mon, 26 Jun 2006 22:07:28 +1000
+" Language:               Configuration File (ini file) for MSDOS/MS Windows
+" Version:                2.1
+" Original Author:        Sean M. McKee <mckee@misslink.net>
+" Previous Maintainer:    Nima Talebi <nima@it.net.au>
+" Current Maintainer:     Hong Xu <xuhdev@gmail.com>
+" Homepage:               http://www.vim.org/scripts/script.php?script_id=3747
+"                         https://bitbucket.org/xuhdev/syntax-dosini.vim
+" Last Change:            2011 Nov 8
 
 
 " For version 5.x: Clear all syntax items
@@ -17,9 +20,12 @@ endif
 " shut case off
 syn case ignore
 
-syn match  dosiniLabel         "^.\{-}="
-syn region dosiniHeader                start="^\[" end="\]"
-syn match  dosiniComment       "^;.*$"
+syn match  dosiniNumber   "\<\d\+\>"
+syn match  dosiniNumber   "\<\d*\.\d\+\>"
+syn match  dosiniNumber   "\<\d\+e[+-]\=\d\+\>"
+syn match  dosiniLabel    "^.\{-}="
+syn region dosiniHeader   start="^\s*\[" end="\]"
+syn match  dosiniComment  "^[#;].*$"
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -32,13 +38,14 @@ if version >= 508 || !exists("did_dosini_syntax_inits")
     command -nargs=+ HiLink hi def link <args>
   endif
 
-       HiLink dosiniHeader     Special
-       HiLink dosiniComment    Comment
-       HiLink dosiniLabel      Type
+  HiLink dosiniNumber   Number
+  HiLink dosiniHeader   Special
+  HiLink dosiniComment  Comment
+  HiLink dosiniLabel    Type
 
   delcommand HiLink
 endif
 
 let b:current_syntax = "dosini"
 
-" vim:ts=8
+" vim: sts=2 sw=2 et
index 507f72e..4cc6f4f 100644 (file)
@@ -3,7 +3,7 @@
 " Filenames:    *.dot
 " Maintainer:   Markus Mottl  <markus.mottl@gmail.com>
 " URL:          http://www.ocaml.info/vim/syntax/dot.vim
-" Last Change:  2006 Feb 05
+" Last Change:  2011 May 17 - improved identifier matching + two new keywords
 "               2001 May 04 - initial version
 
 " For version 5.x: Clear all syntax items
@@ -47,10 +47,10 @@ syn keyword  dotType shape shapefile sides skew width
 
 " Edge attributes
 syn keyword  dotType arrowhead arrowsize arrowtail constraint decorateP
-syn keyword  dotType dir headclip headlabel labelangle labeldistance
+syn keyword  dotType dir headclip headlabel headport labelangle labeldistance
 syn keyword  dotType labelfontcolor labelfontname labelfontsize
 syn keyword  dotType minlen port_label_distance samehead sametail
-syn keyword  dotType tailclip taillabel weight
+syn keyword  dotType tailclip taillabel tailport weight
 
 " Shared attributes (graphs, nodes, edges)
 syn keyword  dotType color
@@ -67,7 +67,7 @@ syn match    dotKeyChar  ";"
 syn match    dotKeyChar  "->"
 
 " Identifier
-syn match    dotIdentifier /\<\w\+\>/
+syn match    dotIdentifier /\<\w\+\(:\w\+\)\?\>/
 
 " Synchronization
 syn sync minlines=50
index 1aea3bf..cadbf54 100644 (file)
@@ -2,7 +2,7 @@
 " Language:     doxygen on top of c, cpp, idl, java, php
 " Maintainer:   Michael Geddes <vimmer@frog.wheelycreek.net>
 " Author:       Michael Geddes
-" Last Change:  Jan 2009
+" Last Change:  Jan 2009 (\tparam by Domnique Pelle, Aug 2013)
 " Version:      1.23
 "
 " Copyright 2004-2008 Michael Geddes
@@ -179,7 +179,7 @@ endif
 
   " Match parameters and retvals (highlighting the first word as special).
   syn match doxygenParamDirection contained "\v\[(\s*in>((]\s*\[|\s*,\s*)out>)=|out>((]\s*\[|\s*,\s*)in>)=)\]" nextgroup=doxygenParamName skipwhite
-  syn keyword doxygenParam contained param nextgroup=doxygenParamName,doxygenParamDirection skipwhite
+  syn keyword doxygenParam contained param tparam nextgroup=doxygenParamName,doxygenParamDirection skipwhite
   syn match doxygenParamName contained +[A-Za-z0-9_:]\++ nextgroup=doxygenSpecialMultilineDesc skipwhite
   syn keyword doxygenRetval contained retval throw exception nextgroup=doxygenParamName skipwhite
 
index 76778ba..001dbbd 100644 (file)
 " TODO:
 "   - improve synchronizing.
 
-if version < 600
-    syntax clear
-    let __dtd_cpo_save__ = &cpo
-    set cpo&
-else
-    if exists("b:current_syntax")
-       finish
-    endif
-    let s:dtd_cpo_save = &cpo
-    set cpo&vim
+if exists("b:current_syntax")
+    finish
 endif
+let s:dtd_cpo_save = &cpo
+set cpo&vim
 
 if !exists("dtd_ignore_case")
     " I prefer having the case takes into consideration.
@@ -168,13 +162,8 @@ if version >= 508 || !exists("did_dtd_syn_inits")
     delcommand HiLink
 endif
 
-if version < 600
-    let &cpo = __dtd_cpo_save__
-    unlet __dtd_cpo_save__
-else
-    let &cpo = s:dtd_cpo_save
-    unlet s:dtd_cpo_save
-endif
+let &cpo = s:dtd_cpo_save
+unlet s:dtd_cpo_save
 
 let b:current_syntax = "dtd"
 
diff --git a/runtime/syntax/dts.vim b/runtime/syntax/dts.vim
new file mode 100644 (file)
index 0000000..d7663cf
--- /dev/null
@@ -0,0 +1,28 @@
+" Vim syntax file
+" Language:    dts/dtsi (device tree files)
+" Maintainer:  Daniel Mack <vim@zonque.org>
+" Last Change: 2013 Apr 05
+
+if exists("b:current_syntax")
+  finish
+endif
+
+syntax region dtsComment        start="/\*"  end="\*/"
+syntax match  dtsReference      "&[[:alpha:][:digit:]_]\+"
+syntax region dtsBinaryProperty start="\[" end="\]" 
+syntax match  dtsStringProperty "\".*\""
+syntax match  dtsKeyword        "/.*/"
+syntax match  dtsLabel          "^[[:space:]]*[[:alpha:][:digit:]_]\+:"
+syntax match  dtsNode           /[[:alpha:][:digit:]-_]\+\(@[0-9a-fA-F]\+\|\)[[:space:]]*{/he=e-1
+syntax region dtsCellProperty   start="<" end=">" contains=dtsReference,dtsBinaryProperty,dtsStringProperty,dtsComment
+syntax region dtsCommentInner   start="/\*"  end="\*/"
+
+hi def link dtsCellProperty     Number
+hi def link dtsBinaryProperty   Number
+hi def link dtsStringProperty   String
+hi def link dtsKeyword          Include
+hi def link dtsLabel            Label
+hi def link dtsNode             Structure
+hi def link dtsReference        Macro
+hi def link dtsComment          Comment
+hi def link dtsCommentInner     Comment 
index af6eee9..a91f85d 100644 (file)
@@ -1,10 +1,10 @@
 " Eiffel syntax file
 " Language:    Eiffel
-" Maintainer:  Reimer Behrends <behrends@cse.msu.edu>
-"              With much input from Jocelyn Fiat <fiat@eiffel.com>
-" See http://www.cse.msu.edu/~behrends/vim/ for the most current version.
-" Last Change: 2001 May 09
-
+" Maintainer: Jocelyn Fiat <jfiat@eiffel.com>
+" Previous maintainer: Reimer Behrends <behrends@cse.msu.edu>
+" Contributions from: Thilo Six
+" 
+" URL: https://github.com/eiffelhub/vim-eiffel
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
 if version < 600
@@ -13,6 +13,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:keepcpo= &cpo
+set cpo&vim
+
 " Option handling
 
 if exists("eiffel_ignore_case")
@@ -40,7 +43,7 @@ endif
 
 " Keyword definitions
 
-syn keyword eiffelTopStruct    indexing feature creation inherit
+syn keyword eiffelTopStruct    note indexing feature creation inherit
 syn match   eiffelTopStruct    "\<class\>"
 syn match   eiffelKeyword      "\<end\>"
 syn match   eiffelTopStruct    "^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName
@@ -48,27 +51,30 @@ syn match   eiffelBrackets  "[[\]]"
 syn match eiffelBracketError   "\]"
 syn region eiffelGeneric       transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError,eiffelGenericDecl,eiffelStringError,eiffelStringEscape,eiffelGenericCreate,eiffelTopStruct
 if exists("eiffel_ise")
+  syn match   eiffelAgent      "\<agent\>"
+  syn match   eiffelConvert    "\<convert\>"
   syn match   eiffelCreate     "\<create\>"
   syn match   eiffelTopStruct  contained "\<create\>"
+  syn match   eiffelTopStruct  contained "\<convert\>"
   syn match   eiffelGenericCreate  contained "\<create\>"
   syn match   eiffelTopStruct  "^create\>"
   syn region  eiffelGenericDecl        transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets
   syn region  eiffelClassHeader        start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets
 endif
-syn keyword eiffelDeclaration  is do once deferred unique local
-syn keyword eiffelDeclaration  Unique
+syn keyword eiffelDeclaration  is do once deferred unique local attribute assign
+syn keyword eiffelDeclaration  attached detachable Unique
 syn keyword eiffelProperty     expanded obsolete separate frozen
 syn keyword eiffelProperty     prefix infix
 syn keyword eiffelInheritClause        rename redefine undefine select export as
 syn keyword eiffelAll          all
-syn keyword eiffelKeyword      external alias
+syn keyword eiffelKeyword      external alias some
 syn keyword eiffelStatement    if else elseif inspect
 syn keyword eiffelStatement    when then
 syn match   eiffelAssertion    "\<require\(\s\+else\)\=\>"
 syn match   eiffelAssertion    "\<ensure\(\s\+then\)\=\>"
 syn keyword eiffelAssertion    check
 syn keyword eiffelDebug                debug
-syn keyword eiffelStatement    from until loop
+syn keyword eiffelStatement    across from until loop
 syn keyword eiffelAssertion    variant
 syn match   eiffelAssertion    "\<invariant\>"
 syn match   eiffelTopStruct    "^invariant\>"
@@ -126,6 +132,11 @@ syn match   eiffelClassName        "\<[A-Z][A-Z0-9_]*\>"
 syn match eiffelParenError     ")"
 syn region eiffelParen         transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape
 
+if exists("eiffel_fold")
+"    setlocal foldmethod=indent
+"    syn sync fromstart
+endif
+
 " Should suffice for even very long strings and expressions
 syn sync lines=40
 
@@ -150,6 +161,8 @@ if version >= 508 || !exists("did_eiffel_syntax_inits")
   HiLink eiffelException       Statement
   HiLink eiffelGenericCreate   Statement
 
+  HiLink eiffelAgent           Statement
+  HiLink eiffelConvert         Statement
 
   HiLink eiffelTopStruct       PreProc
 
@@ -193,4 +206,7 @@ endif
 
 let b:current_syntax = "eiffel"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: ts=8
index 2f39d61..02597e7 100644 (file)
 " Vim syntax file
-" Language:    erlang (ERicsson LANGuage)
-"              http://www.erlang.se
-"              http://www.erlang.org
-" Maintainer:  Csaba Hoch <csaba.hoch@gmail.com>
-" Former Maintainer:  KreÄ…imir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr>
-" Last update: 12-Mar-2008
-" Filenames:   .erl
-
-
-" There are three sets of highlighting in here:
-" One is "erlang_characters", second is "erlang_functions" and third
-" is "erlang_keywords".
-" If you want to disable keywords highlighting, put in your .vimrc:
-"       let erlang_keywords=1
-" If you want to disable erlang BIF highlighting, put in your .vimrc
-" this:
-"       let erlang_functions=1
-" If you want to disable special characters highlighting, put in
-" your .vimrc:
-"       let erlang_characters=1
-
+" Language:     Erlang (http://www.erlang.org)
+" Maintainer:   Csaba Hoch <csaba.hoch@gmail.com>
+" Last Update:  2013-Jul-25
+" License:      Vim license
+" URL:          https://github.com/hcs42/vim-erlang
+
+" Acknowledgements: This script was originally created by Kresimir Marzic [1].
+" The script was then revamped by Csaba Hoch [2]. During the revamp, the new
+" highlighting style and some code was taken from the Erlang syntax script
+" that is part of vimerl [3], created by Oscar Hellström [4] and improved by
+" Ricardo Catalinas Jiménez [5].
+
+" [1]: KreÄ…imir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr>
+" [2]: Csaba Hoch <csaba.hoch@gmail.com>
+" [3]: https://github.com/jimenezrick/vimerl
+" [4]: Oscar Hellström <oscar@oscarh.net> (http://oscar.hellstrom.st)
+" [5]: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+
+" Customization:
+"
+" To use the old highlighting style, add this to your .vimrc:
+"
+"     let g:erlang_old_style_highlight = 1
+"
+" To highlight further module attributes, add them to
+" ~/.vim/after/syntax/erlang.vim:
+"
+"     syn keyword erlangAttribute myattr1 myattr2 contained
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
 if version < 600
     syntax clear
-elseif exists ("b:current_syntax")
+elseif exists("b:current_syntax")
     finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
 
 " Case sensitive
 syn case match
 
-
-if ! exists ("erlang_characters")
-
-    " Basic elements
-    syn match   erlangComment          "%.*$" contains=erlangAnnotation,erlangTodo
-    syn match   erlangAnnotation       " \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)" contained
-    syn match   erlangAnnotation       "`[^']*'" contained
-    syn keyword erlangTodo             TODO FIXME XXX contained
-    syn match   erlangModifier         "\~\a\|\\\a\|\\\\" contained
-    syn match   erlangSpecialCharacter ":\|_\|@\|\\\|\"\|\."
-    syn match   erlangSeparator        "(\|)\|{\|}\|\[\|]\||\|||\|;\|,\|?\|->\|#" contained
-    syn region  erlangString           start=+"+ skip=+\\.+ end=+"+ contains=erlangModifier
-    syn region  erlangAtom             start=+'+ skip=+\\'+ end=+'+
-
-    " Operators
-    syn match   erlangOperator         "+\|-\|\*\|\/"
-    syn keyword erlangOperator         div rem or xor bor bxor bsl bsr
-    syn keyword erlangOperator         and band not bnot andalso orelse
-    syn match   erlangOperator         "==\|/=\|=:=\|=/=\|<\|=<\|>\|>="
-    syn match   erlangOperator         "++\|--\|=\|!\|<-"
-
-    " Numbers
-    syn match   erlangNumberInteger    "\d\+" contains=erlangSeparator
-    syn match   erlangNumberFloat1     "\d\+\.\d\+" contains=erlangSeparator
-    syn match   erlangNumberFloat2     "\d\+\(\.\d\+\)\=[eE][+-]\=\d\+\(\.\d\+\)\=" contains=erlangSeparator
-    syn match   erlangNumberFloat3     "\d\+[#]\x\+" contains=erlangSeparator
-    syn match   erlangNumberHex        "$\x\+" contains=erlangSeparator
-
-    " Ignore '_' and '-' in words
-    syn match   erlangWord             "\h\+\w*"
-
-    syn match   erlangChar             /\$./
-endif
-
-if ! exists ("erlang_functions")
-    " Functions call
-    syn match   erlangFCall      "\%(\w\+\s*\.\s*\)*\w\+\s*[:@]\s*\w\+"
-
-    " build-in-functions (BIFs)
-    syn keyword erlangBIF        abs alive apply atom_to_list
-    syn keyword erlangBIF        binary_to_list binary_to_term
-    syn keyword erlangBIF        concat_binary
-    syn keyword erlangBIF        date disconnect_node
-    syn keyword erlangBIF        element erase exit
-    syn keyword erlangBIF        float float_to_list
-    syn keyword erlangBIF        get get_keys group_leader
-    syn keyword erlangBIF        halt hd
-    syn keyword erlangBIF        integer_to_list is_alive
-    syn keyword erlangBIF        length link list_to_atom list_to_binary
-    syn keyword erlangBIF        list_to_float list_to_integer list_to_pid
-    syn keyword erlangBIF        list_to_tuple load_module
-    syn keyword erlangBIF        make_ref monitor_node
-    syn keyword erlangBIF        node nodes now
-    syn keyword erlangBIF        open_port
-    syn keyword erlangBIF        pid_to_list process_flag
-    syn keyword erlangBIF        process_info process put
-    syn keyword erlangBIF        register registered round
-    syn keyword erlangBIF        self setelement size spawn
-    syn keyword erlangBIF        spawn_link split_binary statistics
-    syn keyword erlangBIF        term_to_binary throw time tl trunc
-    syn keyword erlangBIF        tuple_to_list
-    syn keyword erlangBIF        unlink unregister
-    syn keyword erlangBIF        whereis
-
-    " Other BIFs
-    syn keyword erlangBIF        atom binary constant function integer
-    syn keyword erlangBIF        list number pid ports port_close port_info
-    syn keyword erlangBIF        reference record
-
-    " erlang:BIFs
-    syn keyword erlangBIF        check_process_code delete_module
-    syn keyword erlangBIF        get_cookie hash math module_loaded
-    syn keyword erlangBIF        preloaded processes purge_module set_cookie
-    syn keyword erlangBIF        set_node
-
-    " functions of math library
-    syn keyword erlangFunction   acos asin atan atan2 cos cosh exp
-    syn keyword erlangFunction   log log10 pi pow power sin sinh sqrt
-    syn keyword erlangFunction   tan tanh
-
-    " Other functions
-    syn keyword erlangFunction   call module_info parse_transform
-    syn keyword erlangFunction   undefined_function
-
-    " Modules
-    syn keyword erlangModule     error_handler
-endif
-
-if ! exists ("erlang_keywords")
-    " Constants and Directives
-    syn match   erlangDirective  "-behaviour\|-behavior"
-    syn match   erlangDirective  "-compile\|-define\|-else\|-endif\|-export\|-file"
-    syn match   erlangDirective  "-ifdef\|-ifndef\|-import\|-include_lib\|-include"
-    syn match   erlangDirective  "-module\|-record\|-undef"
-
-    syn match   erlangConstant   "-author\|-copyright\|-doc\|-vsn"
-
-    " Keywords
-    syn keyword erlangKeyword    after begin case catch
-    syn keyword erlangKeyword    cond end fun if
-    syn keyword erlangKeyword    let of query receive
-    syn keyword erlangKeyword    when
-    syn keyword erlangKeyword    try
-
-    " Processes
-    syn keyword erlangProcess    creation current_function dictionary
-    syn keyword erlangProcess    group_leader heap_size high initial_call
-    syn keyword erlangProcess    linked low memory_in_use message_queue
-    syn keyword erlangProcess    net_kernel node normal priority
-    syn keyword erlangProcess    reductions registered_name runnable
-    syn keyword erlangProcess    running stack_trace status timer
-    syn keyword erlangProcess    trap_exit waiting
-
-    " Ports
-    syn keyword erlangPort       command count_in count_out creation in
-    syn keyword erlangPort       in_format linked node out owner packeting
-
-    " Nodes
-    syn keyword erlangNode       atom_tables communicating creation
-    syn keyword erlangNode       current_gc current_reductions current_runtime
-    syn keyword erlangNode       current_wall_clock distribution_port
-    syn keyword erlangNode       entry_points error_handler friends
-    syn keyword erlangNode       garbage_collection magic_cookie magic_cookies
-    syn keyword erlangNode       module_table monitored_nodes name next_ref
-    syn keyword erlangNode       ports preloaded processes reductions
-    syn keyword erlangNode       ref_state registry runtime wall_clock
-
-    " Reserved
-    syn keyword erlangReserved   apply_lambda module_info module_lambdas
-    syn keyword erlangReserved   record record_index record_info
-
-    " Extras
-    syn keyword erlangExtra      badarg nocookie false fun true
-
-    " Signals
-    syn keyword erlangSignal     badsig kill killed exit normal
+if version >= 600
+  setlocal iskeyword+=$,@-@
 endif
 
+" Comments
+syn match erlangComment           '%.*$' contains=erlangCommentAnnotation,erlangTodo
+syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained
+syn match erlangCommentAnnotation /`[^']*'/ contained
+syn keyword erlangTodo            TODO FIXME XXX contained
+syn match erlangShebang           '^#!.*'
+
+" Numbers (minimum base is 2, maximum is 36.)
+syn match erlangNumberInteger '\<\d\+\>'
+syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>'
+syn match erlangNumberFloat   '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>'
+
+" Strings, atoms, characters
+syn region erlangString            start=/"/ end=/"/ contains=erlangStringModifier
+syn region erlangQuotedAtom        start=/'/ end=/'/ contains=erlangQuotedAtomModifier
+syn match erlangStringModifier     '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
+syn match erlangQuotedAtomModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
+syn match erlangModifier           '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)'
+
+" Operators, separators
+syn match erlangOperator   '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/'
+syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse
+syn match erlangBracket    '{\|}\|\[\|]\||\|||'
+syn match erlangPipe       '|'
+syn match erlangRightArrow '->'
+
+" Atoms, function calls (order is important)
+syn match erlangAtom           '\<\l[[:alnum:]_@]*' contains=erlangBoolean
+syn keyword erlangBoolean      true false contained
+syn match erlangLocalFuncCall  '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangBIF
+syn match erlangLocalFuncRef   '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@='
+syn match erlangGlobalFuncCall '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangComment
+syn match erlangGlobalFuncRef  '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' contains=erlangComment
+
+" Variables, macros, records
+syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*'
+syn match erlangMacro    '??\=[[:alnum:]_@]\+'
+syn match erlangMacro    '\%(-define(\)\@<=[[:alnum:]_@]\+'
+syn match erlangRecord   '#\s*\l[[:alnum:]_@]*'
+
+" Bitstrings
+syn match erlangBitType '\%(\/\%(\s\|\n\|%.*\n\)*\)\@<=\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\%(\%(\s\|\n\|%.*\n\)*-\%(\s\|\n\|%.*\n\)*\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\)*' contains=erlangComment
+
+" Constants and Directives
+syn match erlangUnknownAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment
+syn match erlangAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\(_type\)\=\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\)\>' contains=erlangComment
+syn match erlangInclude   '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment
+syn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment
+syn match erlangDefine    '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment
+syn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment
+syn match erlangType      '^\s*-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|callback\)\>' contains=erlangComment
+
+" Keywords
+syn keyword erlangKeyword after begin case catch cond end fun if let of query
+syn keyword erlangKeyword receive when try
+
+" Build-in-functions (BIFs)
+syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list contained
+syn keyword erlangBIF binary_part binary_to_atom contained
+syn keyword erlangBIF binary_to_existing_atom binary_to_float contained
+syn keyword erlangBIF binary_to_integer bitstring_to_list contained
+syn keyword erlangBIF binary_to_list binary_to_term bit_size contained
+syn keyword erlangBIF byte_size check_old_code check_process_code contained
+syn keyword erlangBIF concat_binary date delete_module demonitor contained
+syn keyword erlangBIF disconnect_node element erase error exit contained
+syn keyword erlangBIF float float_to_binary float_to_list contained
+syn keyword erlangBIF garbage_collect get get_keys group_leader contained
+syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained
+syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained
+syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained
+syn keyword erlangBIF is_float is_function is_integer is_list contained
+syn keyword erlangBIF is_number is_pid is_port is_process_alive contained
+syn keyword erlangBIF is_record is_reference is_tuple length link contained
+syn keyword erlangBIF list_to_atom list_to_binary contained
+syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained
+syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained
+syn keyword erlangBIF list_to_tuple load_module make_ref max min contained
+syn keyword erlangBIF module_loaded monitor monitor_node node contained
+syn keyword erlangBIF nodes now open_port pid_to_list port_close contained
+syn keyword erlangBIF port_command port_connect pre_loaded contained
+syn keyword erlangBIF process_flag process_flag process_info contained
+syn keyword erlangBIF process purge_module put register registered contained
+syn keyword erlangBIF round self setelement size spawn spawn_link contained
+syn keyword erlangBIF spawn_monitor spawn_opt split_binary contained
+syn keyword erlangBIF statistics term_to_binary throw time tl contained
+syn keyword erlangBIF trunc tuple_size tuple_to_list unlink contained
+syn keyword erlangBIF unregister whereis contained
+
+" Sync at the beginning of functions: if this is not used, multiline string
+" are not always recognized, and the indentation script cannot use the
+" "searchpair" (because it would not always skip strings and comments when
+" looking for keywords and opening parens/brackets).
+syn sync match erlangSync grouphere NONE "^[a-z]\s*("
+let b:erlang_syntax_synced = 1
+
+" Define the default highlighting. See ":help group-name" for the groups and
+" their colors.
+
+let s:old_style = (exists("g:erlang_old_style_highlight") &&
+                  \g:erlang_old_style_highlight == 1)
 
-
-" Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
 " For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists ("did_erlang_inits")
-    if version < 508
-        let did_erlang_inits = 1
-        command -nargs=+ HiLink hi link <args>
-    else
-        command -nargs=+ HiLink hi def link <args>
-    endif
-
-    " erlang_characters
-    HiLink erlangComment Comment
-    HiLink erlangAnnotation Special
-    HiLink erlangTodo Todo
-    HiLink erlangSpecialCharacter Special
-    HiLink erlangSeparator Normal
-    HiLink erlangModifier Special
-    HiLink erlangOperator Operator
-    HiLink erlangString String
-    HiLink erlangAtom Type
-
-    HiLink erlangNumberInteger Number
-    HiLink erlangNumberFloat1 Float
-    HiLink erlangNumberFloat2 Float
-    HiLink erlangNumberFloat3 Float
-    HiLink erlangNumberFloat4 Float
-    HiLink erlangNumberHex Number
-
-    HiLink erlangWord Normal
-
-    " erlang_functions
-    HiLink erlangFCall Function
-    HiLink erlangBIF Function
-    HiLink erlangFunction Function
-    HiLink erlangModuleFunction Function
-
-    " erlang_keywords
-    HiLink erlangDirective Type
-    HiLink erlangConstant Type
-    HiLink erlangKeyword Keyword
-    HiLink erlangProcess Special
-    HiLink erlangPort Special
-    HiLink erlangNode Special
-    HiLink erlangReserved Statement
+if version >= 508 || !exists("did_erlang_inits")
+  if version < 508
+    let did_erlang_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  " Comments
+  HiLink erlangComment Comment
+  HiLink erlangCommentAnnotation Special
+  HiLink erlangTodo Todo
+  HiLink erlangShebang Comment
+
+  " Numbers
+  HiLink erlangNumberInteger Number
+  HiLink erlangNumberFloat Float
+
+  " Strings, atoms, characters
+  HiLink erlangString String
+
+  if s:old_style
+    HiLink erlangQuotedAtom Type
+  else
+    HiLink erlangQuotedAtom String
+  endif
+
+  HiLink erlangStringModifier Special
+  HiLink erlangQuotedAtomModifier Special
+  HiLink erlangModifier Special
+
+  " Operators, separators
+  HiLink erlangOperator Operator
+  HiLink erlangRightArrow Operator
+  if s:old_style
+    HiLink erlangBracket Normal
+    HiLink erlangPipe Normal
+  else
+    HiLink erlangBracket Delimiter
+    HiLink erlangPipe Delimiter
+  endif
+
+  " Atoms, functions, variables, macros
+  if s:old_style
+    HiLink erlangAtom Normal
+    HiLink erlangLocalFuncCall Normal
+    HiLink erlangLocalFuncRef Normal
+    HiLink erlangGlobalFuncCall Function
+    HiLink erlangGlobalFuncRef Function
+    HiLink erlangVariable Normal
+    HiLink erlangMacro Normal
+    HiLink erlangRecord Normal
+  else
+    HiLink erlangAtom String
+    HiLink erlangLocalFuncCall Normal
+    HiLink erlangLocalFuncRef Normal
+    HiLink erlangGlobalFuncCall Normal
+    HiLink erlangGlobalFuncRef Normal
+    HiLink erlangVariable Identifier
+    HiLink erlangMacro Macro
+    HiLink erlangRecord Structure
+  endif
+
+  " Bitstrings
+  if !s:old_style
+    HiLink erlangBitType Type
+  endif
+
+  " Constants and Directives
+  if s:old_style
+    HiLink erlangAttribute Type
+    HiLink erlangMacroDef Type
+    HiLink erlangUnknownAttribute Normal
+    HiLink erlangInclude Type
+    HiLink erlangRecordDef Type
+    HiLink erlangDefine Type
+    HiLink erlangPreCondit Type
+    HiLink erlangType Type
+  else
+    HiLink erlangAttribute Keyword
+    HiLink erlangMacroDef Macro
+    HiLink erlangUnknownAttribute Normal
+    HiLink erlangInclude Include
+    HiLink erlangRecordDef Keyword
+    HiLink erlangDefine Define
+    HiLink erlangPreCondit PreCondit
+    HiLink erlangType Type
+  endif
+
+  " Keywords
+  HiLink erlangKeyword Keyword
+
+  " Build-in-functions (BIFs)
+  HiLink erlangBIF Function
+
+  if s:old_style
+    HiLink erlangBoolean Statement
+    HiLink erlangExtra Statement
+    HiLink erlangSignal Statement
+  else
+    HiLink erlangBoolean Boolean
     HiLink erlangExtra Statement
     HiLink erlangSignal Statement
+  endif
 
-    delcommand HiLink
+  delcommand HiLink
 endif
 
-
 let b:current_syntax = "erlang"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: sw=2 et
index 42c8b51..c20b086 100644 (file)
@@ -1,9 +1,7 @@
 " Vim syntax file
 " Language:            eRuby
 " Maintainer:          Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:         2010 Apr 15
-" URL:                 http://vim-ruby.rubyforge.org
-" Anon CVS:            See above site
+" URL:                 https://github.com/vim-ruby/vim-ruby
 " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
 
 if exists("b:current_syntax")
@@ -18,13 +16,12 @@ if !exists("g:eruby_default_subtype")
   let g:eruby_default_subtype = "html"
 endif
 
-if !exists("b:eruby_subtype") && main_syntax == 'eruby'
+if &filetype =~ '^eruby\.'
+  let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
+elseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
   let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
   let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
   if b:eruby_subtype == ''
-    let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
-  endif
-  if b:eruby_subtype == ''
     let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+$')
   endif
   if b:eruby_subtype == 'rhtml'
@@ -61,7 +58,7 @@ syn cluster erubyRegions contains=erubyOneLiner,erubyBlock,erubyExpression,eruby
 exe 'syn region  erubyOneLiner   matchgroup=erubyDelimiter start="^%\{1,'.b:eruby_nest_level.'\}%\@!"    end="$"     contains=@rubyTop      containedin=ALLBUT,@erubyRegions keepend oneline'
 exe 'syn region  erubyBlock      matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}%\@!-\=" end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=@rubyTop  containedin=ALLBUT,@erubyRegions keepend'
 exe 'syn region  erubyExpression matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}=\{1,4}" end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=@rubyTop  containedin=ALLBUT,@erubyRegions keepend'
-exe 'syn region  erubyComment    matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}#"       end="%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend'
+exe 'syn region  erubyComment    matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}-\=#"    end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend'
 
 " Define the default highlighting.
 
index b36739a..b22b1a1 100644 (file)
@@ -12,23 +12,23 @@ elseif exists("b:current_syntax")
 endif
 
 "All options
-:syntax keyword        esmtprcOptions hostname username password starttls certificate_passphrase preconnect identity mda
+syntax keyword esmtprcOptions hostname username password starttls certificate_passphrase preconnect identity mda
 
 "All keywords
-:syntax keyword esmtprcIdentifier default enabled disabled required
+syntax keyword esmtprcIdentifier default enabled disabled required
 
 "We're trying to be smarer than /."*@.*/ :)
-:syntax match esmtprcAddress /[a-z0-9_.-]*[a-z0-9]\+@[a-z0-9_.-]*[a-z0-9]\+\.[a-z]\+/
-:syntax match esmtprcFulladd /[a-z0-9_.-]*[a-z0-9]\+\.[a-z]\+:[0-9]\+/
+syntax match esmtprcAddress /[a-z0-9_.-]*[a-z0-9]\+@[a-z0-9_.-]*[a-z0-9]\+\.[a-z]\+/
+syntax match esmtprcFulladd /[a-z0-9_.-]*[a-z0-9]\+\.[a-z]\+:[0-9]\+/
  
 "String..
-:syntax region esmtprcString start=/"/ end=/"/
+syntax region esmtprcString start=/"/ end=/"/
 
 
-:highlight link esmtprcOptions         Label
-:highlight link esmtprcString          String
-:highlight link esmtprcAddress         Type
-:highlight link esmtprcIdentifier      Identifier
-:highlight link esmtprcFulladd         Include
+highlight link esmtprcOptions          Label
+highlight link esmtprcString           String
+highlight link esmtprcAddress          Type
+highlight link esmtprcIdentifier       Identifier
+highlight link esmtprcFulladd          Include
 
-let b:current_syntax="esmtprc"
+let b:current_syntax = "esmtprc"
index 1886e2b..6ff7d41 100644 (file)
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:    Expect
 " Maintainer:  Ralph Jennings <knowbudy@oro.net>
-" Last Change: 2001 May 09
+" Last Change: 2012 Jun 01
+"              (Dominique Pelle added @Spell)
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -72,11 +73,12 @@ syn case ignore
   "syn match  expectIdentifier "\<[a-z_][a-z0-9_]*\>"
 syn case match
 
-syn region  expectString       start=+"+  end=+"+  contains=expectVariables,expectSpecial
+syn region  expectString       start=+"+  end=+"+  contains=@Spell,expectVariables,expectSpecial
 
 " Are these really comments in Expect? (I never use it, so I'm just guessing).
 syn keyword expectTodo         contained TODO
-syn match   expectComment              "#.*$" contains=expectTodo
+syn match   expectComment      "#.*$" contains=@Spell,expectTodo
+syn match   expectSharpBang    "\%^#!.*"
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -89,6 +91,7 @@ if version >= 508 || !exists("did_expect_syntax_inits")
     command -nargs=+ HiLink hi def link <args>
   endif
 
+  HiLink expectSharpBang       PreProc
   HiLink expectVariables       Special
   HiLink expectCommand         Function
   HiLink expectStatement       Statement
diff --git a/runtime/syntax/falcon.vim b/runtime/syntax/falcon.vim
new file mode 100644 (file)
index 0000000..1f6fefa
--- /dev/null
@@ -0,0 +1,199 @@
+" Vim syntax file
+" Language:     Falcon
+" Maintainer:   Steven Oliver <oliver.steven@gmail.com>
+" Website:      http://github.com/steveno/vim-files/blob/master/syntax/falcon.vim
+" Credits:      Thanks the ruby.vim authors, I borrowed a lot!
+"               Thanks to the lisp authors for the rainbow code!
+" -------------------------------------------------------------------------------
+
+" When wanted, highlight the trailing whitespace.
+if exists("c_space_errors")
+    if !exists("c_no_trail_space_error")
+        syn match falconSpaceError "\s\+$"
+    endif
+
+    if !exists("c_no_tab_space_error")
+        syn match falconSpaceError " \+\t"me=e-1
+    endif
+endif
+
+" Symbols
+syn match falconSymbol "\(;\|,\|\.\)"
+syn match falconSymbolOther "\(#\|@\)" display
+
+" Operators
+syn match falconOperator "\(+\|-\|\*\|/\|=\|<\|>\|\*\*\|!=\|\~=\)"
+syn match falconOperator "\(<=\|>=\|=>\|\.\.\|<<\|>>\|\"\)"
+
+" Clusters
+syn region falconSymbol start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@falconStringSpecial fold
+syn case match
+
+" Keywords
+syn keyword falconKeyword all allp any anyp as attributes brigade cascade catch choice class const
+syn keyword falconKeyword continue def directive do list dropping enum eq eval exit export from function
+syn keyword falconKeyword give global has hasnt in init innerfunc lambda launch launch len List list
+syn keyword falconKeyword load notin object pass print printl provides raise return self sender static to
+syn keyword falconKeyword try xamp
+
+" Error Type Keywords
+syn keyword falconKeyword CloneError CodeError Error InterruprtedError IoError MathError
+syn keyword falconKeyword ParamError RangeError SyntaxError TraceStep TypeError
+
+" Todo
+syn keyword falconTodo DEBUG FIXME NOTE TODO XXX
+
+" Conditionals
+syn keyword falconConditional and case default else end if iff
+syn keyword falconConditional elif or not switch select
+syn match   falconConditional "end\s\if"
+
+" Loops
+syn keyword falconRepeat break for loop forfirst forlast formiddle while
+
+" Booleans
+syn keyword falconBool true false
+
+" Constants
+syn keyword falconConst PI E nil
+syn match   falconConstant  "\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
+
+" Comments
+syn match falconCommentSkip contained "^\s*\*\($\|\s\+\)"
+syn region falconComment start="/\*" end="\*/" contains=@falconCommentGroup,falconSpaceError,falconTodo
+syn region falconCommentL start="//" end="$" keepend contains=@falconCommentGroup,falconSpaceError,falconTodo
+syn match falconSharpBang "\%^#!.*" display
+syn sync ccomment falconComment
+
+" Numbers
+syn match falconNumbers transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=falconIntLiteral,falconFloatLiteral,falconHexadecimal,falconOctal
+syn match falconNumbersCom contained transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=falconIntLiteral,falconFloatLiteral,falconHexadecimal,falconOctal
+syn match falconHexadecimal contained "\<0x\x\+\>"
+syn match falconOctal contained "\<0\o\+\>"
+syn match falconIntLiteral contained "[+-]\<d\+\(\d\+\)\?\>"
+syn match falconFloatLiteral contained "[+-]\=\d\+\.\d*"
+syn match falconFloatLiteral contained "[+-]\=\d*\.\d*"
+
+" Includes
+syn keyword falconInclude load import
+
+" Expression Substitution and Backslash Notation
+syn match falconStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
+syn match falconStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
+syn region falconSymbol start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=falconStringEscape fold
+
+" Normal String and Shell Command Output
+syn region falconString matchgroup=falconStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=falconStringEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="'" end="'" skip="\\\\\|\\'" fold
+syn region falconString matchgroup=falconStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=falconStringEscape fold
+
+" Generalized Single Quoted String, Symbol and Array of Strings
+syn region falconString matchgroup=falconStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"  end="\z1" skip="\\\\\|\\\z1" fold
+syn region falconString matchgroup=falconStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" fold contains=falconDelimEscape
+syn region falconString matchgroup=falconStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" fold contains=falconDelimEscape
+syn region falconString matchgroup=falconStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" fold contains=falconDelimEscape
+syn region falconString matchgroup=falconStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" fold contains=falconDelimEscape
+syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
+syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]{" end="}" skip="\\\\\|\\}" fold contains=falconDelimEscape
+syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]<" end=">" skip="\\\\\|\\>" fold contains=falconDelimEscape
+syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]\[" end="\]" skip="\\\\\|\\\]" fold contains=falconDelimEscape
+syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s](" end=")" skip="\\\\\|\\)" fold contains=falconDelimEscape
+
+" Generalized Double Quoted String and Array of Strings and Shell Command Output
+syn region falconString matchgroup=falconStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=falconStringEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=falconStringEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=falconStringEscape,falconDelimEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=falconStringEscape,falconDelimEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=falconStringEscape,falconDelimEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=falconStringEscape,falconDelimEscape fold
+
+syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<\z(\h\w*\)\ze+hs=s+2 matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<"\z([^"]*\)"\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<'\z([^']*\)'\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<`\z([^`]*\)`\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
+
+syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-\z(\h\w*\)\ze+hs=s+3 matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
+
+" Falcon rainbox to highlight parens in varying colors
+if exists("g:falcon_rainbow") && g:falcon_rainbow != 0
+    syn region falconParen0           matchgroup=hlLevel0 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen1
+    syn region falconParen1 contained matchgroup=hlLevel1 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen2
+    syn region falconParen2 contained matchgroup=hlLevel2 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen3
+    syn region falconParen3 contained matchgroup=hlLevel3 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen4
+    syn region falconParen4 contained matchgroup=hlLevel4 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen5
+    syn region falconParen5 contained matchgroup=hlLevel5 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen6
+    syn region falconParen6 contained matchgroup=hlLevel6 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen7
+    syn region falconParen7 contained matchgroup=hlLevel7 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen8
+    syn region falconParen8 contained matchgroup=hlLevel8 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen9
+    syn region falconParen9 contained matchgroup=hlLevel9 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen0
+endif
+
+" Setup the colors for the rainbox
+if exists("g:falcon_rainbow") && g:falcon_rainbow != 0
+    if &bg == "dark"
+        hi def hlLevel0 ctermfg=red         guifg=red1
+        hi def hlLevel1 ctermfg=yellow      guifg=orange1
+        hi def hlLevel2 ctermfg=green       guifg=yellow1
+        hi def hlLevel3 ctermfg=cyan        guifg=greenyellow
+        hi def hlLevel4 ctermfg=magenta     guifg=green1
+        hi def hlLevel5 ctermfg=red         guifg=springgreen1
+        hi def hlLevel6 ctermfg=yellow      guifg=cyan1
+        hi def hlLevel7 ctermfg=green       guifg=slateblue1
+        hi def hlLevel8 ctermfg=cyan        guifg=magenta1
+        hi def hlLevel9 ctermfg=magenta     guifg=purple1
+    else
+        hi def hlLevel0 ctermfg=red         guifg=red3
+        hi def hlLevel1 ctermfg=darkyellow  guifg=orangered3
+        hi def hlLevel2 ctermfg=darkgreen   guifg=orange2
+        hi def hlLevel3 ctermfg=blue        guifg=yellow3
+        hi def hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
+        hi def hlLevel5 ctermfg=red         guifg=green4
+        hi def hlLevel6 ctermfg=darkyellow  guifg=paleturquoise3
+        hi def hlLevel7 ctermfg=darkgreen   guifg=deepskyblue4
+        hi def hlLevel8 ctermfg=blue        guifg=darkslateblue
+        hi def hlLevel9 ctermfg=darkmagenta guifg=darkviolet
+    endif
+endif
+
+" Syntax Synchronizing
+syn sync minlines=10 maxlines=100
+
+" Define the default highlighting
+if !exists("did_falcon_syn_inits")
+    command -nargs=+ HiLink hi def link <args>
+
+    HiLink falconKeyword          Keyword
+    HiLink falconCommentString    String
+    HiLink falconTodo             Todo
+    HiLink falconConditional      Keyword
+    HiLink falconRepeat           Repeat
+    HiLink falconcommentSkip      Comment
+    HiLink falconComment          Comment
+    HiLink falconCommentL         Comment
+    HiLink falconConst            Constant
+    HiLink falconConstants        Constant
+    HiLink falconOperator         Operator
+    HiLink falconSymbol           Normal
+    HiLink falconSpaceError       Error
+    HiLink falconHexadecimal      Number
+    HiLink falconOctal            Number
+    HiLink falconIntLiteral       Number
+    HiLink falconFloatLiteral     Float
+    HiLink falconStringEscape     Special
+    HiLink falconStringDelimiter  Delimiter
+    HiLink falconString           String
+    HiLink falconBool             Constant
+    HiLink falconSharpBang        PreProc
+    HiLink falconInclude          Include
+    HiLink falconSymbol           Constant
+    HiLink falconSymbolOther      Delimiter
+    delcommand HiLink
+endif
+
+let b:current_syntax = "falcon"
+
+" vim: set sw=4 sts=4 et tw=80 :
+
index 01bdc83..696e05b 100644 (file)
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:    Flat Assembler (FASM)
 " Maintainer:  Ron Aaron <ron@ronware.org>
-" Last Change: 2004 May 16
+" Last Change: 2012/02/13
 " Vim URL:     http://www.vim.org/lang.html
 " FASM Home:   http://flatassembler.net/
-" FASM Version: 1.52
+" FASM Version: 1.56
 
 if version < 600
   syntax clear
@@ -12,6 +12,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 setlocal iskeyword=a-z,A-Z,48-57,.,_
 setlocal isident=a-z,A-Z,48-57,.,_
 syn case ignore
@@ -97,7 +100,7 @@ syn keyword fasmDirective    align binary code coff console discardable display dl
 syn keyword fasmDirective      elf entry executable export extern far fixups format gui
 syn keyword fasmDirective      import label ms mz native near notpageable pe public readable
 syn keyword fasmDirective      repeat resource section segment shareable stack times
-syn keyword fasmDirective      use16 use32 virtual wdm writeable
+syn keyword fasmDirective      use16 use32 virtual wdm writable writeable
 syn keyword fasmOperator       as at defined eq eqtype from mod on ptr rva used
 
 syn match      fasmNumericOperator     "[+-/*]"
@@ -142,4 +145,8 @@ hi def link fasmInstr keyword
 hi def link    fasmLabel label
 hi def link    fasmPrefix preproc
 let b:current_syntax = "fasm"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8 sw=8 :
index bbdced2..99e9400 100644 (file)
@@ -1,13 +1,13 @@
 " Vim syntax file
 " Language:    FORTH
 " Maintainer:  Christian V. J. Brüssow <cvjb@cvjb.de>
-" Last Change: Di 07 Jul 2009 21:38:45 CEST
+" Last Change: So 27 Mai 2012 15:56:28 CEST
 " Filenames:   *.fs,*.ft
 " URL:        http://www.cvjb.de/comp/vim/forth.vim
 
-" $Id: forth.vim,v 1.12 2008/07/07 21:39:12 bruessow Exp $
+" $Id: forth.vim,v 1.14 2012/05/27 15:57:22 bruessow Exp $
 
-" The list of keywords is incomplete, compared with the offical ANS
+" The list of keywords is incomplete, compared with the official ANS
 " wordlist. If you use this language, please improve it, and send me
 " the patches.
 "
 
 " Many Thanks to...
 "
+" 2012-05-13:
+" Dominique Pellé <dominique dot pelle at gmail dot com> for sending the
+" patch to allow spellchecking of strings, comments, ...
+" 
+" 2012-01-07:
+" Thilo Six <T.Six at gmx dot de> send a patch for cpoptions.
+" See the discussion at http://thread.gmane.org/gmane.editors.vim.devel/32151
+"
 " 2009-06-28:
 " Josh Grams send a patch to allow the parenthesis comments at the
 " beginning of a line. That patch also fixed a typo in one of the
 " Bill McCarthy <WJMc@...> and Ilya Sher <ilya-vim@...>
 " Who found a bug in the ccomment line in 2004!!!
 " I'm really very sorry, that it has taken two years to fix that
-" in the offical version of this file. Shame on me.
+" in the official version of this file. Shame on me.
 " I think my face will be red the next ten years...
 "
 " 2006-05-21:
 " Thomas E. Vaughan <tevaugha at ball dot com> send me a patch
 " for the parenthesis comment word, so words with a trailing
 " parenthesis will not start the highlighting for such comments.
-" 
+"
 " 2003-05-10:
 " Andrew Gaul <andrew at gaul.org> send me a patch for
 " forthOperators.
@@ -80,6 +88,9 @@ elseif exists("b:current_syntax")
     finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Synchronization method
 syn sync ccomment
 syn sync maxlines=200
@@ -125,7 +136,7 @@ syn keyword forthOperators F~REL F~ABS F~
 syn keyword forthOperators 0< 0<= 0<> 0= 0> 0>= < <= <> = > >= U< U<=
 syn keyword forthOperators U> U>= D0< D0<= D0<> D0= D0> D0>= D< D<= D<>
 syn keyword forthOperators D= D> D>= DU< DU<= DU> DU>= WITHIN ?NEGATE
-syn keyword forthOperators ?DNEGATE 
+syn keyword forthOperators ?DNEGATE
 
 " stack manipulations
 syn keyword forthStack DROP NIP DUP OVER TUCK SWAP ROT -ROT ?DUP PICK ROLL
@@ -171,7 +182,7 @@ syn keyword forthDefine LITERAL CREATE-INTERPRET/COMPILE INTERPRETATION>
 syn keyword forthDefine <INTERPRETATION COMPILATION> <COMPILATION ] LASTXT
 syn keyword forthDefine COMP' POSTPONE, FIND-NAME NAME>INT NAME?INT NAME>COMP
 syn keyword forthDefine NAME>STRING STATE C; CVARIABLE
-syn keyword forthDefine , 2, F, C, 
+syn keyword forthDefine , 2, F, C,
 syn match forthDefine "\[IFDEF]"
 syn match forthDefine "\[IFUNDEF]"
 syn match forthDefine "\[THEN]"
@@ -210,7 +221,7 @@ syn match forthCharOps '\<\[char\]\s\S\s'
 syn region forthCharOps start=+."\s+ skip=+\\"+ end=+"+
 
 " char-number conversion
-syn keyword forthConversion <<# <# # #> #>> #S (NUMBER) (NUMBER?) CONVERT D>F 
+syn keyword forthConversion <<# <# # #> #>> #S (NUMBER) (NUMBER?) CONVERT D>F
 syn keyword forthConversion D>S DIGIT DPL F>D HLD HOLD NUMBER S>D SIGN >NUMBER
 syn keyword forthConversion F>S S>F
 
@@ -225,7 +236,7 @@ syn keyword forthVocs ONLY FORTH ALSO ROOT SEAL VOCS ORDER CONTEXT #VOCS
 syn keyword forthVocs VOCABULARY DEFINITIONS
 
 " File keywords
-syn keyword forthFileMode R/O R/W W/O BIN 
+syn keyword forthFileMode R/O R/W W/O BIN
 syn keyword forthFileWords OPEN-FILE CREATE-FILE CLOSE-FILE DELETE-FILE
 syn keyword forthFileWords RENAME-FILE READ-FILE READ-LINE KEY-FILE
 syn keyword forthFileWords KEY?-FILE WRITE-FILE WRITE-LINE EMIT-FILE
@@ -249,22 +260,22 @@ syn match forthInteger '\<%[0-1]*[0-1]\+\>'
 syn match forthFloat '\<-\=\d*[.]\=\d\+[DdEe]\d\+\>'
 syn match forthFloat '\<-\=\d*[.]\=\d\+[DdEe][-+]\d\+\>'
 
-" XXX If you find this overkill you can remove it. this has to come after the
+" XXX If you find this overkill you can remove it. This has to come after the
 " highlighting for numbers otherwise it has no effect.
 syn region forthComment start='0 \[if\]' end='\[endif\]' end='\[then\]' contains=forthTodo
 
 " Strings
-syn region forthString start=+\.*\"+ end=+"+ end=+$+
+syn region forthString start=+\.*\"+ end=+"+ end=+$+ contains=@Spell
 " XXX
-syn region forthString start=+s\"+ end=+"+ end=+$+
-syn region forthString start=+c\"+ end=+"+ end=+$+
+syn region forthString start=+s\"+ end=+"+ end=+$+ contains=@Spell
+syn region forthString start=+c\"+ end=+"+ end=+$+ contains=@Spell
 
 " Comments
-syn match forthComment '\\\s.*$' contains=forthTodo,forthSpaceError
-syn region forthComment start='\\S\s' end='.*' contains=forthTodo,forthSpaceError
-syn match forthComment '\.(\s[^)]*)' contains=forthTodo,forthSpaceError
-syn region forthComment start='\(^\|\s\)\zs(\s' skip='\\)' end=')' contains=forthTodo,forthSpaceError
-syn region forthComment start='/\*' end='\*/' contains=forthTodo,forthSpaceError
+syn match forthComment '\\\s.*$' contains=@Spell,forthTodo,forthSpaceError
+syn region forthComment start='\\S\s' end='.*' contains=@Spell,forthTodo,forthSpaceError
+syn match forthComment '\.(\s[^)]*)' contains=@Spell,forthTodo,forthSpaceError
+syn region forthComment start='\(^\|\s\)\zs(\s' skip='\\)' end=')' contains=@Spell,forthTodo,forthSpaceError
+syn region forthComment start='/\*' end='\*/' contains=@Spell,forthTodo,forthSpaceError
 
 " Include files
 syn match forthInclude '^INCLUDE\s\+\k\+'
@@ -288,7 +299,7 @@ if version >= 508 || !exists("did_forth_syn_inits")
        command -nargs=+ HiLink hi def link <args>
     endif
 
-    " The default methods for highlighting. Can be overriden later.
+    " The default methods for highlighting. Can be overridden later.
     HiLink forthTodo Todo
     HiLink forthOperators Operator
     HiLink forthMath Number
@@ -331,4 +342,6 @@ endif
 
 let b:current_syntax = "forth"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim:ts=8:sw=4:nocindent:smartindent:
index 1c43a3a..df33793 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
-" Language:    Fortran95 (and Fortran90, Fortran77, F and elf90)
-" Version:     0.89
-" Last Change: 2010 July 21
+" Language:    Fortran 2008 (and earlier versions: 2003, 95, 90, and 77)
+" Version:     0.94
+" Last Change: 2012 June 18
 " Maintainer:  Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
 " Usage:       For instructions, do :help fortran-syntax from Vim
 " Credits:
 "  Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman,
 "  Andrew Griffiths, Joe Krahn, and Hendrik Merx.
 
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit if a syntax file is already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
+if exists("b:current_syntax")
   finish
 endif
 
-" let b:fortran_dialect = fortran_dialect if set correctly by user
-if exists("fortran_dialect")
-  if fortran_dialect =~ '\<\(f\(9[05]\|77\)\|elf\|F\)\>'
-    let b:fortran_dialect = matchstr(fortran_dialect,'\<\(f\(9[05]\|77\)\|elf\|F\)\>')
-  else
-    echohl WarningMsg | echo "Unknown value of fortran_dialect" | echohl None
-    let b:fortran_dialect = "unknown"
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Choose fortran_dialect using the priority:
+" source file directive > buffer-local value > global value > default
+" try using directive in first three lines of file
+let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
+if b:fortran_retype =~? '\<fortran_dialect\s*=\s*F\>'
+  let b:fortran_dialect = "F"
+elseif b:fortran_retype =~? '\<fortran_dialect\s*=\s*f08\>'
+  let b:fortran_dialect = "f08"
+elseif !exists("b:fortran_dialect")
+  if exists("g:fortran_dialect") && g:fortran_dialect =~# '\<F\|f08\>'
+    " try global variable
+    let b:fortran_dialect = g:fortran_dialect
+  else         " nothing found, so use default
+    let b:fortran_dialect = "f08"
   endif
-else
-  let b:fortran_dialect = "unknown"
 endif
-
-" fortran_dialect not set or set incorrectly by user,
-if b:fortran_dialect == "unknown"
-  " set b:fortran_dialect from directive in first three lines of file
-  let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
-  if b:fortran_retype =~ '\<fortran_dialect\s*=\s*F\>'
-    let b:fortran_dialect = "F"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*elf\>'
-    let b:fortran_dialect = "elf"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f90\>'
-    let b:fortran_dialect = "f90"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f95\>'
-    let b:fortran_dialect = "f95"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f77\>'
-    let b:fortran_dialect = "f77"
-  else
-    " no directive found, so assume f95
-    let b:fortran_dialect = "f95"
-  endif
-  unlet b:fortran_retype
+unlet! b:fortran_retype
+" make sure buffer-local value is not invalid
+if b:fortran_dialect !~# '\<F\|f08\>'
+  let b:fortran_dialect = "f08"
 endif
 
 " Choose between fixed and free source form if this hasn't been done yet
 if !exists("b:fortran_fixed_source")
-  if b:fortran_dialect == "elf" || b:fortran_dialect == "F"
-    " elf and F require free source form
+  if b:fortran_dialect == "F"
+    " F requires free source form
     let b:fortran_fixed_source = 0
-  elseif b:fortran_dialect == "f77"
-    " f77 requires fixed source form
-    let b:fortran_fixed_source = 1
   elseif exists("fortran_free_source")
-    " User guarantees free source form for all f90 and f95 files
+    " User guarantees free source form for all fortran files
     let b:fortran_fixed_source = 0
   elseif exists("fortran_fixed_source")
-    " User guarantees fixed source form for all f90 and f95 files
+    " User guarantees fixed source form for all fortran files
     let b:fortran_fixed_source = 1
   else
-    " f90 and f95 allow both fixed and free source form.
+    " Modern fortran still allows both free and fixed source form.
     " Assume fixed source form unless signs of free source form
     " are detected in the first five columns of the first s:lmax lines.
     " Detection becomes more accurate and time-consuming if more lines
@@ -93,29 +78,18 @@ endif
 
 syn case ignore
 
-if b:fortran_dialect !=? "f77"
-  if version >= 600
-    if b:fortran_fixed_source == 1
-      syn match fortranConstructName   "^\s\{6,}\zs\a\w*\ze\s*:"
-    else
-      syn match fortranConstructName   "^\s*\zs\a\w*\ze\s*:"
-    endif
-    if exists("fortran_more_precise")
-      syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
-      syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
-      syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
-    endif
-  else
-    if b:fortran_fixed_source == 1
-      syn match fortranConstructName   "^\s\{6,}\a\w*\s*:"
-    else
-      syn match fortranConstructName   "^\s*\a\w*\s*:"
-    endif
-  endif
+if b:fortran_fixed_source == 1
+  syn match fortranConstructName       "^\s\{6,}\zs\a\w*\ze\s*:"
+else
+  syn match fortranConstructName       "^\s*\zs\a\w*\ze\s*:"
+endif
+if exists("fortran_more_precise")
+  syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
+  syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
+  syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
 endif
 
-syn match   fortranUnitHeader  "\<end\>"
-
+syn match fortranUnitHeader    "\<end\>"
 syn match fortranType          "\<character\>"
 syn match fortranType          "\<complex\>"
 syn match fortranType          "\<integer\>"
@@ -130,6 +104,7 @@ syn match fortranUnitHeader "\<program\>"
 syn keyword fortranKeyword     return stop
 syn keyword fortranConditional else then
 syn match fortranConditional   "\<if\>"
+syn match fortranConditionalOb "\<if\s*(.*)\s*\d\+\s*,\s*\d\+\s*,\s*\d\+\s*$"
 syn match fortranRepeat                "\<do\>"
 
 syn keyword fortranTodo                contained todo fixme
@@ -141,6 +116,7 @@ syn match  fortranParenError   ")"
 syn match fortranOperator      "\.\s*n\=eqv\s*\."
 syn match fortranOperator      "\.\s*\(and\|or\|not\)\s*\."
 syn match fortranOperator      "\(+\|-\|/\|\*\)"
+syn match fortranTypeOb                "\<character\s*\*"
 
 syn match fortranBoolean       "\.\s*\(true\|false\)\s*\."
 
@@ -155,17 +131,17 @@ endif
 
 syn keyword fortranIO          access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit
 
-syn keyword fortran66Intrinsic         alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl
+syn keyword fortranIntrinsicR          alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl
 
 " Intrinsics provided by some vendors
-syn keyword fortranExtraIntrinsic      algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama erf erfc gamma iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh
+syn keyword fortranExtraIntrinsic      algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh
 
-syn keyword fortran77Intrinsic abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh
-syn match fortran77Intrinsic   "\<len\s*[(,]"me=s+3
-syn match fortran77Intrinsic   "\<real\s*("me=s+4
+syn keyword fortranIntrinsic   abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh
+syn match fortranIntrinsic     "\<len\s*[(,]"me=s+3
+syn match fortranIntrinsic     "\<real\s*("me=s+4
 syn match fortranType          "\<implicit\s\+real"
 syn match fortranType          "^\s*real\>"
-syn match fortran90Intrinsic   "\<logical\s*("me=s+7
+syn match fortranIntrinsic     "\<logical\s*("me=s+7
 syn match fortranType          "\<implicit\s\+logical"
 syn match fortranType          "^\s*logical\>"
 
@@ -173,13 +149,13 @@ syn match fortranType             "^\s*logical\>"
 " Integers
 syn match fortranNumber        display "\<\d\+\(_\a\w*\)\=\>"
 " floating point number, without a decimal point
-syn match fortranFloatNoDec    display "\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
+syn match fortranFloatIll      display "\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
 " floating point number, starting with a decimal point
-syn match fortranFloatIniDec   display "\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+syn match fortranFloatIll      display "\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " floating point number, no digits after decimal
-syn match fortranFloatEndDec   display "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+syn match fortranFloatIll      display "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " floating point number, D or Q exponents
-syn match fortranFloatDExp     display "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+syn match fortranFloatIll      display "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " floating point number
 syn match fortranFloat display "\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " Numbers in formats
@@ -197,131 +173,131 @@ syn match fortranLabelNumber    display "^  \d\{1,3}\s"ms=s+2,me=e-1
 syn match fortranLabelNumber   display "^   \d\d\=\s"ms=s+3,me=e-1
 syn match fortranLabelNumber   display "^    \d\s"ms=s+4,me=e-1
 
-if version >= 600 && exists("fortran_more_precise")
+if exists("fortran_more_precise")
   " Numbers as targets
   syn match fortranTarget      display "\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>"
   syn match fortranTarget      display "\(\<do\s\+\)\@<=\d\+\>"
   syn match fortranTarget      display "\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>"
 endif
 
-syn keyword fortranTypeEx      external
-syn keyword fortranIOEx                format
-syn match fortranKeywordEx     "\<continue\>"
+syn keyword fortranType      external
+syn keyword fortranIOR         format
+syn match fortranKeyword     "\<continue\>"
 syn match fortranKeyword       "^\s*\d\+\s\+continue\>"
-syn match fortranKeywordEx     "\<go\s*to\>"
-syn region fortranStringEx     start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
-syn keyword fortran77IntrinsicEx       dim lge lgt lle llt mod
-syn keyword fortranKeywordOb   assign pause to
-
-if b:fortran_dialect != "f77"
-
-  syn match fortranType         "\<type\>"
-  syn keyword fortranType      none
-
-  syn keyword fortranStructure private public intent optional
-  syn keyword fortranStructure pointer target allocatable
-  syn keyword fortranStorageClass      in out
-  syn match fortranStorageClass        "\<kind\s*="me=s+4
-  syn match fortranStorageClass        "\<len\s*="me=s+3
-
-  syn match fortranUnitHeader  "\<module\>"
-  syn keyword fortranUnitHeader        use only contains
-  syn keyword fortranUnitHeader        result operator assignment
-  syn match fortranUnitHeader  "\<interface\>"
-  syn match fortranUnitHeader  "\<recursive\>"
-  syn keyword fortranKeyword   allocate deallocate nullify cycle exit
-  syn match fortranConditional "\<select\>"
-  syn keyword fortranConditional       case default where elsewhere
-
-  syn match fortranOperator    "\(\(>\|<\)=\=\|==\|/=\|=\)"
-  syn match fortranOperator    "=>"
-
-  syn region fortranString     start=+"+ end=+"+       contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
-  syn keyword fortranIO                pad position action delim readwrite
-  syn keyword fortranIO                eor advance nml
-
-  syn keyword fortran90Intrinsic       adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack precision present product radix random_number random_seed range repeat reshape rrspacing
-  syn keyword fortran90Intrinsic       scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
-  syn match fortran90Intrinsic         "\<not\>\(\s*\.\)\@!"me=s+3
-  syn match fortran90Intrinsic "\<kind\>\s*[(,]"me=s+4
-
-  syn match  fortranUnitHeader "\<end\s*function"
-  syn match  fortranUnitHeader "\<end\s*interface"
-  syn match  fortranUnitHeader "\<end\s*module"
-  syn match  fortranUnitHeader "\<end\s*program"
-  syn match  fortranUnitHeader "\<end\s*subroutine"
-  syn match  fortranRepeat     "\<end\s*do"
-  syn match  fortranConditional        "\<end\s*where"
-  syn match  fortranConditional        "\<select\s*case"
-  syn match  fortranConditional        "\<end\s*select"
-  syn match  fortranType       "\<end\s*type"
-  syn match  fortranType       "\<in\s*out"
-
-  syn keyword fortranUnitHeaderEx      procedure
-  syn keyword fortranIOEx              namelist
-  syn keyword fortranConditionalEx     while
-  syn keyword fortran90IntrinsicEx     achar iachar transfer
-
-  syn keyword fortranInclude           include
-  syn keyword fortran90StorageClassR   sequence
-endif
+syn match fortranKeyword       "\<go\s*to\>"
+syn match fortranKeywordDel    "\<go\s*to\ze\s\+.*,\s*(.*$"
+syn match fortranKeywordOb     "\<go\s*to\ze\s*(\d\+.*$"
+syn region fortranStringR      start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
+syn keyword fortranIntrinsicR  dim lge lgt lle llt mod
+syn keyword fortranKeywordDel  assign pause
+
+syn match fortranType           "\<type\>"
+syn keyword fortranType                none
+
+syn keyword fortranStructure   private public intent optional
+syn keyword fortranStructure   pointer target allocatable
+syn keyword fortranStorageClass        in out
+syn match fortranStorageClass  "\<kind\s*="me=s+4
+syn match fortranStorageClass  "\<len\s*="me=s+3
+
+syn match fortranUnitHeader    "\<module\>"
+syn keyword fortranUnitHeader  use only contains
+syn keyword fortranUnitHeader  result operator assignment
+syn match fortranUnitHeader    "\<interface\>"
+syn match fortranUnitHeader    "\<recursive\>"
+syn keyword fortranKeyword     allocate deallocate nullify cycle exit
+syn match fortranConditional   "\<select\>"
+syn keyword fortranConditional case default where elsewhere
+
+syn match fortranOperator      "\(\(>\|<\)=\=\|==\|/=\|=\)"
+syn match fortranOperator      "=>"
+
+syn region fortranString       start=+"+ end=+"+       contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
+syn keyword fortranIO          pad position action delim readwrite
+syn keyword fortranIO          eor advance nml
+
+syn keyword fortranIntrinsic   adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack precision present product radix random_number random_seed range repeat reshape rrspacing
+syn keyword fortranIntrinsic   scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
+syn match fortranIntrinsic             "\<not\>\(\s*\.\)\@!"me=s+3
+syn match fortranIntrinsic     "\<kind\>\s*[(,]"me=s+4
+
+syn match  fortranUnitHeader   "\<end\s*function"
+syn match  fortranUnitHeader   "\<end\s*interface"
+syn match  fortranUnitHeader   "\<end\s*module"
+syn match  fortranUnitHeader   "\<end\s*program"
+syn match  fortranUnitHeader   "\<end\s*subroutine"
+syn match  fortranRepeat       "\<end\s*do"
+syn match  fortranConditional  "\<end\s*where"
+syn match  fortranConditional  "\<select\s*case"
+syn match  fortranConditional  "\<end\s*select"
+syn match  fortranType "\<end\s*type"
+syn match  fortranType "\<in\s*out"
+
+syn keyword fortranType                procedure
+syn match  fortranType         "\<module\ze\s\+procedure\>"
+syn keyword fortranIOR         namelist
+syn keyword fortranConditionalR        while
+syn keyword fortranIntrinsicR  achar iachar transfer
+
+syn keyword fortranInclude             include
+syn keyword fortranStorageClassR       sequence
 
 syn match   fortranConditional "\<end\s*if"
 syn match   fortranIO          contains=fortranOperator "\<e\(nd\|rr\)\s*=\s*\d\+"
 syn match   fortranConditional "\<else\s*if"
 
-syn keyword fortranUnitHeaderR entry
+syn keyword fortranUnitHeaderOb        entry
 syn match fortranTypeR         display "double\s\+precision"
 syn match fortranTypeR         display "double\s\+complex"
 syn match fortranUnitHeaderR   display "block\s\+data"
 syn keyword fortranStorageClassR       common equivalence data
-syn keyword fortran77IntrinsicR        dble dprod
-syn match   fortran77OperatorR "\.\s*[gl][et]\s*\."
-syn match   fortran77OperatorR "\.\s*\(eq\|ne\)\s*\."
-
-if b:fortran_dialect == "f95" || b:fortran_dialect == "F"
-  syn keyword fortranRepeat            forall
-  syn match fortranRepeat              "\<end\s*forall"
-  syn keyword fortran95Intrinsic       null cpu_time
-  syn match fortranType                        "\<elemental\>"
-  syn match fortranType                        "\<pure\>"
-  if exists("fortran_more_precise")
-    syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
-  endif
+syn keyword fortranIntrinsicR  dble dprod
+syn match   fortranOperatorR   "\.\s*[gl][et]\s*\."
+syn match   fortranOperatorR   "\.\s*\(eq\|ne\)\s*\."
+
+syn keyword fortranRepeat              forall
+syn match fortranRepeat                "\<end\s*forall"
+syn keyword fortranIntrinsic   null cpu_time
+syn match fortranType                  "\<elemental\>"
+syn match fortranType                  "\<pure\>"
+if exists("fortran_more_precise")
+  syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
 endif
 
-if b:fortran_dialect == "f95"
+if b:fortran_dialect == "f08"
   " F2003
-  syn keyword fortran03Intrinsic        command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of
+  syn keyword fortranIntrinsic        command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of
   " ISO_C_binding
-  syn keyword fortran03Constant         c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
-  syn keyword fortran03Constant         c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr
-  syn keyword fortran03Intrinsic        iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_f_procpointer
-  syn keyword fortran03Type             c_ptr c_funptr
+  syn keyword fortranConstant         c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
+  syn keyword fortranConstant         c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr
+  syn keyword fortranIntrinsic        iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_f_procpointer
+  syn keyword fortranType             c_ptr c_funptr
   " ISO_Fortran_env
-  syn keyword fortran03Constant         iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
+  syn keyword fortranConstant         iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
   " IEEE_arithmetic
-  syn keyword fortran03Intrinsic        ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
-
-  syn keyword fortran03ReadWrite       flush wait
-  syn keyword fortran03IO              decimal round iomsg
-  syn keyword fortran03Type             asynchronous nopass non_overridable pass protected volatile abstract extends import
-  syn keyword fortran03Type             non_intrinsic value bind deferred generic final enumerator class
-  syn match fortran03Type               "\<associate\>"
-  syn match fortran03Type               "\<end\s*associate"
-  syn match fortran03Type               "\<enum\s*,\s*bind\s*(\s*c\s*)"
-  syn match fortran03Type               "\<end\s*enum"
-  syn match fortran03Conditional       "\<select\s*type"
-  syn match fortran03Conditional        "\<type\s*is\>"
-  syn match fortran03UnitHeader         "\<abstract\s*interface\>"
-  syn match fortran03Operator           "\([\|]\)"
+  syn keyword fortranIntrinsic        ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
+
+  syn keyword fortranReadWrite flush wait
+  syn keyword fortranIO              decimal round iomsg
+  syn keyword fortranType             asynchronous nopass non_overridable pass protected volatile abstract extends import
+  syn keyword fortranType             non_intrinsic value bind deferred generic final enumerator
+  syn match fortranType               "\<class\>"
+  syn match fortranType               "\<associate\>"
+  syn match fortranType               "\<end\s*associate"
+  syn match fortranType               "\<enum\s*,\s*bind\s*(\s*c\s*)"
+  syn match fortranType               "\<end\s*enum"
+  syn match fortranConditional "\<select\s*type"
+  syn match fortranConditional        "\<type\s*is\>"
+  syn match fortranConditional        "\<class\s*is\>"
+  syn match fortranUnitHeader         "\<abstract\s*interface\>"
+  syn match fortranOperator           "\([\|]\)"
 
   " F2008
-  syn keyword fortran08Intrinsic        acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
-  syn keyword fortran08Intrinsic        atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
-  syn keyword fortran08Intrinsic        bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image
-  syn keyword fortran08IO               newunit
-  syn keyword fortran08Type             contiguous
+  syn keyword fortranIntrinsic        acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
+  syn keyword fortranIntrinsic        atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
+  syn keyword fortranIntrinsic        bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image
+  syn keyword fortranIO               newunit
+  syn keyword fortranType             contiguous
 endif
 
 syn cluster fortranCommentGroup contains=fortranTodo
@@ -341,9 +317,7 @@ else
   syn match fortranContinueMark                display "&"
 endif
 
-if b:fortran_dialect != "f77"
-  syn match fortranComment     excludenl "!.*$" contains=@fortranCommentGroup,@spell
-endif
+syn match fortranComment       excludenl "!.*$" contains=@fortranCommentGroup,@spell
 
 "cpp is often used with Fortran
 syn match      cPreProc                "^\s*#\s*\(define\|ifdef\)\>.*"
@@ -363,7 +337,7 @@ else
   syn sync minlines=30
 endif
 
-if version >= 600 && exists("fortran_fold")
+if exists("fortran_fold")
 
   if (b:fortran_fixed_source == 1)
     syn region fortranProgram transparent fold keepend start="^\s*program\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(program\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranModule
@@ -407,134 +381,95 @@ if version >= 600 && exists("fortran_fold")
 endif
 
 " Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_fortran_syn_inits")
-  if version < 508
-    let did_fortran_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
-
-  " The default highlighting differs for each dialect.
-  " Transparent groups:
-  " fortranParen, fortranLeftMargin
-  " fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
-  " fortranBlockData
-  " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
-  " fortranMultiCommentLines
-  HiLink fortranKeyword        Keyword
-  HiLink fortranConstructName  Identifier
-  HiLink fortran03Conditional  fortranConditional
-  HiLink fortranConditional    Conditional
-  HiLink fortranRepeat         Repeat
-  HiLink fortranTodo           Todo
-  if (b:fortran_fixed_source == 1)
-    HiLink fortranContinueMark Todo
-  else
-    HiLink fortranContinueMark Keyword
-  endif
-  HiLink fortranString         String
-  HiLink fortranNumber         Number
-  HiLink fortran03Operator     fortranOperator
-  HiLink fortranOperator       Operator
-  HiLink fortranBoolean                Boolean
-  HiLink fortranLabelError     Error
-  HiLink fortranObsolete       Todo
-  HiLink fortran03Type         fortranType
-  HiLink fortran08Type         fortranType
-  HiLink fortranType           Type
-  HiLink fortranStructure      Type
-  HiLink fortranStorageClass   StorageClass
-  HiLink fortranCall           Function
-  HiLink fortran03UnitHeader   fortranUnitHeader
-  HiLink fortranUnitHeader     fortranPreCondit
-  HiLink fortran03ReadWrite    fortranReadWrite
-  HiLink fortranReadWrite      Keyword
-  HiLink fortran03IO           fortranIO
-  HiLink fortran08IO           fortranIO
-  HiLink fortranIO             Keyword
-  HiLink fortran95Intrinsic    fortran90Intrinsic
-  HiLink fortran77Intrinsic    fortran90Intrinsic
-  HiLink fortran90Intrinsic    Function
-  HiLink fortran03Intrinsic    Function
-  HiLink fortran08Intrinsic    Function
-  HiLink fortran03Constant     Function
-
-  if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" )
-    HiLink fortranKeywordOb    fortranObsolete
-    HiLink fortran66Intrinsic  fortranObsolete
-    HiLink fortran77IntrinsicR fortranObsolete
-    HiLink fortranUnitHeaderR  fortranObsolete
-    HiLink fortranTypeR                fortranObsolete
-    HiLink fortranStorageClassR        fortranObsolete
-    HiLink fortran90StorageClassR      fortranObsolete
-    HiLink fortran77OperatorR  fortranObsolete
-    HiLink fortranInclude      fortranObsolete
-  else
-    HiLink fortranKeywordOb    fortranKeyword
-    HiLink fortran66Intrinsic  fortran90Intrinsic
-    HiLink fortran77IntrinsicR fortran90Intrinsic
-    HiLink fortranUnitHeaderR  fortranPreCondit
-    HiLink fortranTypeR                fortranType
-    HiLink fortranStorageClassR        fortranStorageClass
-    HiLink fortran77OperatorR  fortranOperator
-    HiLink fortranInclude      Include
-    HiLink fortran90StorageClassR      fortranStorageClass
-  endif
-
-  if ( b:fortran_dialect == "F" )
-    HiLink fortranLabelNumber  fortranObsolete
-    HiLink fortranTarget       fortranObsolete
-    HiLink fortranFormatSpec   fortranObsolete
-    HiLink fortranFloatDExp    fortranObsolete
-    HiLink fortranFloatNoDec   fortranObsolete
-    HiLink fortranFloatIniDec  fortranObsolete
-    HiLink fortranFloatEndDec  fortranObsolete
-    HiLink fortranTypeEx       fortranObsolete
-    HiLink fortranIOEx         fortranObsolete
-    HiLink fortranKeywordEx    fortranObsolete
-    HiLink fortranStringEx     fortranObsolete
-    HiLink fortran77IntrinsicEx        fortranObsolete
-    HiLink fortranUnitHeaderEx fortranObsolete
-    HiLink fortranConditionalEx        fortranObsolete
-    HiLink fortran90IntrinsicEx        fortranObsolete
-  else
-    HiLink fortranLabelNumber  Special
-    HiLink fortranTarget       Special
-    HiLink fortranFormatSpec   Identifier
-    HiLink fortranFloatDExp    fortranFloat
-    HiLink fortranFloatNoDec   fortranFloat
-    HiLink fortranFloatIniDec  fortranFloat
-    HiLink fortranFloatEndDec  fortranFloat
-    HiLink fortranTypeEx       fortranType
-    HiLink fortranIOEx         fortranIO
-    HiLink fortranKeywordEx    fortranKeyword
-    HiLink fortranStringEx     fortranString
-    HiLink fortran77IntrinsicEx        fortran90Intrinsic
-    HiLink fortranUnitHeaderEx fortranUnitHeader
-    HiLink fortranConditionalEx        fortranConditional
-    HiLink fortran90IntrinsicEx        fortran90Intrinsic
-  endif
-
-  HiLink fortranFloat          Float
-  HiLink fortranPreCondit      PreCondit
-  HiLink fortranInclude                Include
-  HiLink cIncluded             fortranString
-  HiLink cInclude              Include
-  HiLink cPreProc              PreProc
-  HiLink cPreCondit            PreCondit
-  HiLink fortranParenError     Error
-  HiLink fortranComment                Comment
-  HiLink fortranSerialNumber   Todo
-  HiLink fortranTab            Error
-  " Vendor extensions
-  HiLink fortranExtraIntrinsic Function
-
-  delcommand HiLink
+" The default highlighting differs for each dialect.
+" Transparent groups:
+" fortranParen, fortranLeftMargin
+" fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
+" fortranBlockData
+" fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
+" fortranMultiCommentLines
+hi def link fortranKeyword     Keyword
+hi def link fortranConstructName       Identifier
+hi def link fortranConditional Conditional
+hi def link fortranRepeat      Repeat
+hi def link fortranTodo                Todo
+hi def link fortranContinueMark        Special
+hi def link fortranString      String
+hi def link fortranNumber      Number
+hi def link fortranOperator    Operator
+hi def link fortranBoolean     Boolean
+hi def link fortranLabelError  Error
+hi def link fortranObsolete    Todo
+hi def link fortranType                Type
+hi def link fortranStructure   Type
+hi def link fortranStorageClass        StorageClass
+hi def link fortranCall                Function
+hi def link fortranUnitHeader  fortranPreCondit
+hi def link fortranReadWrite   Keyword
+hi def link fortranIO          Keyword
+hi def link fortranIntrinsic   Function
+hi def link fortranConstant    Constant
+
+" To stop deleted & obsolescent features being highlighted as Todo items,
+" comment out the next 5 lines and uncomment the 5 lines after that
+hi def link fortranUnitHeaderOb    fortranObsolete
+hi def link fortranKeywordOb       fortranObsolete
+hi def link fortranConditionalOb   fortranObsolete
+hi def link fortranTypeOb          fortranObsolete
+hi def link fortranKeywordDel      fortranObsolete
+"hi def link fortranUnitHeaderOb    fortranUnitHeader
+"hi def link fortranKeywordOb       fortranKeyword
+"hi def link fortranConditionalOb   fortranConditional
+"hi def link fortranTypeOb          fortranType
+"hi def link fortranKeywordDel      fortranKeyword
+
+if b:fortran_dialect == "F"
+  hi! def link fortranIntrinsicR       fortranObsolete
+  hi! def link fortranUnitHeaderR      fortranObsolete
+  hi! def link fortranTypeR            fortranObsolete
+  hi! def link fortranStorageClassR    fortranObsolete
+  hi! def link fortranOperatorR        fortranObsolete
+  hi! def link fortranInclude          fortranObsolete
+  hi! def link fortranLabelNumber      fortranObsolete
+  hi! def link fortranTarget           fortranObsolete
+  hi! def link fortranFloatIll         fortranObsolete
+  hi! def link fortranIOR              fortranObsolete
+  hi! def link fortranKeywordR         fortranObsolete
+  hi! def link fortranStringR          fortranObsolete
+  hi! def link fortranConditionalR     fortranObsolete
+else
+  hi! def link fortranIntrinsicR       fortranIntrinsic
+  hi! def link fortranUnitHeaderR      fortranPreCondit
+  hi! def link fortranTypeR            fortranType
+  hi! def link fortranStorageClassR    fortranStorageClass
+  hi! def link fortranOperatorR                fortranOperator
+  hi! def link fortranInclude          Include
+  hi! def link fortranLabelNumber      Special
+  hi! def link fortranTarget           Special
+  hi! def link fortranFloatIll         fortranFloat
+  hi! def link fortranIOR              fortranIO
+  hi! def link fortranKeywordR         fortranKeyword
+  hi! def link fortranStringR          fortranString
+  hi! def link fortranConditionalR     fortranConditional
 endif
 
+hi def link fortranFormatSpec  Identifier
+hi def link fortranFloat       Float
+hi def link fortranPreCondit   PreCondit
+hi def link cIncluded          fortranString
+hi def link cInclude           Include
+hi def link cPreProc           PreProc
+hi def link cPreCondit         PreCondit
+hi def link fortranParenError  Error
+hi def link fortranComment     Comment
+hi def link fortranSerialNumber        Todo
+hi def link fortranTab         Error
+
+" Uncomment the next line if you use extra intrinsics provided by vendors
+"hi def link fortranExtraIntrinsic     Function
+
 let b:current_syntax = "fortran"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8 tw=132
index 9bee894..3006d21 100644 (file)
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language: fstab file
-" Maintaner: Radu Dineiu <radu.dineiu@gmail.com>
-" URL: http://ld.yi.org/vim/fstab.vim
-" Last Change: 2009 Feb 04
-" Version: 0.93
+" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
+" URL: https://raw.github.com/rid9/vim-fstab/master/fstab.vim
+" Last Change: 2013 May 21
+" Version: 1.0
 "
 " Credits:
 "   David Necas (Yeti) <yeti@physics.muni.cz>
 "   Georgi Georgiev <chutz@gg3.net>
 "   James Vega <jamessan@debian.org>
 "   Elias Probst <mail@eliasprobst.eu>
-"
+
 " Options:
 "   let fstab_unknown_fs_errors = 1
 "     highlight unknown filesystems as errors
+"
+"   let fstab_unknown_device_errors = 0
+"     do not highlight unknown devices as errors
 
 if version < 600
        syntax clear
@@ -22,15 +25,18 @@ elseif exists("b:current_syntax")
        finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " General
 syn cluster fsGeneralCluster contains=fsComment
-syn match fsComment /\s*#.*/
+syn match fsComment /\s*#.*/ contains=@Spell
 syn match fsOperator /[,=:#]/
 
 " Device
 syn cluster fsDeviceCluster contains=fsOperator,fsDeviceKeyword,fsDeviceError
 syn match fsDeviceError /\%([^a-zA-Z0-9_\/#@:\.-]\|^\w\{-}\ze\W\)/ contained
-syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts sysfs usbfs
+syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts devtmpfs sysfs usbfs
 syn keyword fsDeviceKeyword contained LABEL nextgroup=fsDeviceLabel
 syn keyword fsDeviceKeyword contained UUID nextgroup=fsDeviceUUID
 syn keyword fsDeviceKeyword contained sshfs nextgroup=fsDeviceSshfs
@@ -47,7 +53,7 @@ syn keyword fsMountPointKeyword contained none swap
 " Type
 syn cluster fsTypeCluster contains=fsTypeKeyword,fsTypeUnknown
 syn match fsTypeUnknown /\s\+\zs\w\+/ contained
-syn keyword fsTypeKeyword contained adfs ados affs atfs audiofs auto autofs befs bfs cd9660 cfs cifs coda cramfs devfs devpts e2compr efs ext2 ext2fs ext3 ext4 fdesc ffs filecore fuse hfs hpfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix msdos ncpfs nfs none ntfs null nwfs overlay ovlfs portal proc procfs ptyfs qnx4 reiserfs romfs shm smbfs sshfs std subfs swap sysfs sysv tcfs tmpfs udf ufs umap umsdos union usbfs userfs vfat vs3fs vxfs wrapfs wvfs xfs zisofs
+syn keyword fsTypeKeyword contained adfs ados affs anon_inodefs atfs audiofs auto autofs bdev befs bfs btrfs binfmt_misc cd9660 cfs cgroup cifs coda configfs cpuset cramfs devfs devpts devtmpfs e2compr efs ext2 ext2fs ext3 ext4 fdesc ffs filecore fuse fuseblk fusectl hfs hpfs hugetlbfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix mqueue msdos ncpfs nfs nfsd nilfs2 none ntfs null nwfs overlay ovlfs pipefs portal proc procfs pstore ptyfs qnx4 reiserfs ramfs romfs securityfs shm smbfs squashfs sockfs sshfs std subfs swap sysfs sysv tcfs tmpfs udf ufs umap umsdos union usbfs userfs vfat vs3fs vxfs wrapfs wvfs xenfs xfs zisofs
 
 " Options
 " -------
@@ -71,6 +77,11 @@ syn match fsOptionsKeywords contained /\<\%(prefix\|volume\|root\)=/ nextgroup=f
 syn match fsOptionsKeywords contained /\<bs=/ nextgroup=fsOptionsSize
 syn keyword fsOptionsKeywords contained protect usemp verbose
 
+" Options: btrfs
+syn match fsOptionsKeywords contained /\<\%(subvol\|subvolid\|subvolrootid\|device\|compress\|compress-force\|fatal_errors\)=/ nextgroup=fsOptionsString
+syn match fsOptionsKeywords contained /\<\%(max_inline\|alloc_start\|thread_pool\|metadata_ratio\|check_int_print_mask\)=/ nextgroup=fsOptionsNumber
+syn keyword fsOptionsKeywords contained degraded nodatasum nodatacow nobarrier ssd ssd_spread noacl notreelog flushoncommit space_cache nospace_cache clear_cache user_subvol_rm_allowed autodefrag inode_cache enospc_debug recovery check_int check_int_data skip_balance discard
+
 " Options: cd9660
 syn keyword fsOptionsKeywords contained extatt gens norrip nostrictjoilet
 
@@ -84,7 +95,7 @@ syn match fsOptionsKeywords contained /\<\%(res[gu]id\|sb\)=/ nextgroup=fsOption
 syn keyword fsOptionsExt2Check contained none normal strict
 syn keyword fsOptionsExt2Errors contained continue panic
 syn match fsOptionsExt2Errors contained /\<remount-ro\>/
-syn keyword fsOptionsKeywords contained acl bsddf minixdf debug grpid bsdgroups minixdf noacl nocheck nogrpid oldalloc orlov sysvgroups nouid32 nobh user_xattr nouser_xattr
+syn keyword fsOptionsKeywords contained acl bsddf minixdf debug grpid bsdgroups minixdf nocheck nogrpid oldalloc orlov sysvgroups nouid32 nobh user_xattr nouser_xattr
 
 " Options: ext3
 syn match fsOptionsKeywords contained /\<journal=/ nextgroup=fsOptionsExt3Journal
@@ -92,7 +103,7 @@ syn match fsOptionsKeywords contained /\<data=/ nextgroup=fsOptionsExt3Data
 syn match fsOptionsKeywords contained /\<commit=/ nextgroup=fsOptionsNumber
 syn keyword fsOptionsExt3Journal contained update inum
 syn keyword fsOptionsExt3Data contained journal ordered writeback
-syn keyword fsOptionsKeywords contained noload user_xattr nouser_xattr acl noacl
+syn keyword fsOptionsKeywords contained noload user_xattr nouser_xattr acl
 
 " Options: ext4
 syn match fsOptionsKeywords contained /\<journal=/ nextgroup=fsOptionsExt4Journal
@@ -216,7 +227,7 @@ syn match fsOptions /\s\+.\{-}\s/me=e-1 nextgroup=fsFreqPass contains=@fsOptions
 syn match fsFreqPass /\s\+.\{-}$/ contains=@fsFreqPassCluster,@fsGeneralCluster contained
 
 " Whole line comments
-syn match fsCommentLine /^#.*$/
+syn match fsCommentLine /^#.*$/ contains=@Spell
 
 if version >= 508 || !exists("did_config_syntax_inits")
        if version < 508
@@ -241,7 +252,10 @@ if version >= 508 || !exists("did_config_syntax_inits")
                HiLink fsTypeUnknown Error
        endif
 
-       HiLink fsDeviceError Error
+       if !exists('fstab_unknown_device_errors') || fstab_unknown_device_errors == 1
+               HiLink fsDeviceError Error
+       endif
+
        HiLink fsMountPointError Error
        HiLink fsMountPointKeyword Keyword
        HiLink fsFreqPassError Error
@@ -277,4 +291,7 @@ endif
 
 let b:current_syntax = "fstab"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8 ft=vim
index 29112fc..2f96bab 100644 (file)
@@ -12,6 +12,8 @@
 if exists("b:current_syntax")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Fvwm configuration files are case insensitive
 syn case ignore
@@ -635,3 +637,6 @@ hi def link fvwmShortcutKey SpecialChar
 hi def link fvwmModuleName     Function
 
 let b:current_syntax = "fvwm"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index aada70e..64e89cc 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    GDB command files
 " Maintainer:  Claudio Fleiner <claudio@fleiner.com>
 " URL:         http://www.fleiner.com/vim/syntax/gdb.vim
-" Last Change: 2009 May 25
+" Last Change: 2012 Oct 05
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn keyword gdbInfo contained address architecture args breakpoints catch common copying dcache
 syn keyword gdbInfo contained display files float frame functions handle line
 syn keyword gdbInfo contained locals program registers scope set sharedlibrary signals
@@ -32,7 +35,7 @@ syn match gdbFuncDef "\<define\>.*"
 syn match gdbStatmentContainer "^\s*\S\+" contains=gdbStatement,gdbFuncDef
 syn match gdbStatement "^\s*info" nextgroup=gdbInfo skipwhite skipempty
 
-" some commonly used abreviations
+" some commonly used abbreviations
 syn keyword gdbStatement c disp undisp disas p
 
 syn region gdbDocument matchgroup=gdbFuncDef start="\<document\>.*$" matchgroup=gdbFuncDef end="^end\s*$"
@@ -65,12 +68,12 @@ syn match gdbSet "\<input-radix\>"
 syn match gdbSet "\<demangle-style\>"
 syn match gdbSet "\<output-radix\>"
 
-syn match gdbComment "^\s*#.*"
+syn match gdbComment "^\s*#.*" contains=@Spell
 
 syn match gdbVariable "\$\K\k*"
 
 " Strings and constants
-syn region  gdbString          start=+"+  skip=+\\\\\|\\"+  end=+"+
+syn region  gdbString          start=+"+  skip=+\\\\\|\\"+  end=+"+ contains=@Spell
 syn match   gdbCharacter       "'[^']*'" contains=gdbSpecialChar,gdbSpecialCharError
 syn match   gdbCharacter       "'\\''" contains=gdbSpecialChar
 syn match   gdbCharacter       "'[^\\]'"
@@ -108,4 +111,6 @@ endif
 
 let b:current_syntax = "gdb"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index 08a6b35..86c6d5c 100644 (file)
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:    GDMO
 "              (ISO-10165-4; Guidelines for the Definition of Managed Object)
-" Maintainer:  Gyuman Kim <violino@dooly.modacom.co.kr>
-" URL:         http://dooly.modacom.co.kr/gdmo.vim
-" Last change: 2001 Sep 02
+" Maintainer:  Gyuman (Chester) Kim <violkim@gmail.com>
+" URL:         http://classicalprogrammer.wikidot.com/local--files/vim-syntax-file-for-gdmo/gdmo.vim
+" Last change: 8th June, 2011
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
index 07447ca..b0315a9 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    git commit file
 " Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:   *.git/COMMIT_EDITMSG
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 if exists("b:current_syntax")
   finish
@@ -16,7 +16,7 @@ if has("spell")
 endif
 
 syn include @gitcommitDiff syntax/diff.vim
-syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^$\|^#\@=/ contains=@gitcommitDiff
+syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|#\)\@=/ fold contains=@gitcommitDiff
 
 syn match   gitcommitFirstLine "\%^[^#].*"  nextgroup=gitcommitBlank skipnl
 syn match   gitcommitSummary   "^.\{0,50\}" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
@@ -26,7 +26,7 @@ syn match   gitcommitComment  "^#.*"
 syn match   gitcommitHead      "^\%(#   .*\n\)\+#$" contained transparent
 syn match   gitcommitOnBranch  "\%(^# \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
 syn match   gitcommitOnBranch  "\%(^# \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
-syn match   gitcommitBranch    "[^ \t']\+" contained
+syn match   gitcommitBranch    "[^ ']\+" contained
 syn match   gitcommitNoBranch  "\%(^# \)\@<=Not currently on any branch." contained containedin=gitcommitComment
 syn match   gitcommitHeader    "\%(^# \)\@<=.*:$"      contained containedin=gitcommitComment
 syn region  gitcommitAuthor    matchgroup=gitCommitHeader start=/\%(^# \)\@<=\%(Author\|Committer\):/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent
@@ -35,7 +35,7 @@ syn match   gitcommitNoChanges        "\%(^# \)\@<=No changes$" contained containedin=g
 syn region  gitcommitUntracked start=/^# Untracked files:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUntrackedFile fold
 syn match   gitcommitUntrackedFile  "\t\@<=.*" contained
 
-syn region  gitcommitDiscarded start=/^# Changed but not updated:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitDiscardedType fold
+syn region  gitcommitDiscarded start=/^# Change\%(s not staged for commit\|d but not updated\):/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitDiscardedType fold
 syn region  gitcommitSelected  start=/^# Changes to be committed:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitSelectedType fold
 syn region  gitcommitUnmerged  start=/^# Unmerged paths:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUnmergedType fold
 
diff --git a/runtime/syntax/gitolite.vim b/runtime/syntax/gitolite.vim
new file mode 100644 (file)
index 0000000..718aad0
--- /dev/null
@@ -0,0 +1,86 @@
+" Vim syntax file
+" Language:    gitolite configuration
+" URL:         https://github.com/tmatilai/gitolite.vim
+" Maintainer:  Teemu Matilainen <teemu.matilainen@iki.fi>
+" Last Change: 2011-12-25
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Comment
+syn match      gitoliteComment         "\(^\|\s\)#.*" contains=gitoliteTodo
+syn keyword    gitoliteTodo            TODO FIXME XXX NOT contained
+
+" Groups, users and repos
+syn match      gitoliteGroupDef        "\(^\s*\)\@<=@[^=]\{-1,}\(\s*=\)\@=" contains=gitoliteSpaceError,gitoliteUserError nextgroup=gitoliteGroupDefSep
+syn match      gitoliteGroupDefSep     "\s*=" contained nextgroup=gitoliteRepoLine
+syn match      gitoliteRepoDef         "^\s*repo\s" nextgroup=gitoliteRepoLine
+
+syn match      gitoliteRepoLine        ".*" contained transparent contains=gitoliteGroup,gitoliteWildRepo,gitoliteCreator,gitoliteExtCmdHelper,gitoliteRepoError,gitoliteComment
+syn match      gitoliteUserLine        ".*" contained transparent contains=gitoliteGroup,gitolitePreProc,gitoliteUserError,gitoliteComment
+
+syn match      gitoliteWildRepo        "[ \t=]\@<=[^ \t]*[\\^$|()[\]*?{},][^ \t]*" contained contains=gitoliteCreator,gitoliteRepoError
+syn match      gitoliteGroup           "[ \t=]\@<=@[^ \t]\+" contained contains=gitoliteUserError
+
+syn keyword    gitoliteCreator         CREATER CREATOR contained
+syn keyword    gitolitePreProc         CREATER CREATOR READERS WRITERS contained
+
+syn match      gitoliteExtCmdHelper    "[ \t=]\@<=EXTCMD/" contained nextgroup=gitoliteExtCmd
+syn match      gitoliteExtCmd          "rsync\(\s\|$\)" contained
+
+" Illegal characters
+syn match      gitoliteRepoError       "[^ \t0-9a-zA-Z._@+/\\^$|()[\]*?{},-]\+" contained
+syn match      gitoliteUserError       "[^ \t0-9a-zA-Z._@+-]\+" contained
+syn match      gitoliteSpaceError      "\s\+" contained
+
+" Permission
+syn match      gitoliteKeyword         "^\s*\(C\|R\|RW\|RW+\|RWC\|RW+C\|RWD\|RW+D\|RWCD\|RW+CD\)[ \t=]\@=" nextgroup=gitoliteRefex
+syn match      gitoliteKeyword         "^\s*-[ \t=]\@=" nextgroup=gitoliteDenyRefex
+syn match      gitoliteRefex           "[^=]*="he=e-1 contained contains=gitoliteSpecialRefex,gitoliteGroup nextgroup=gitoliteUserLine
+syn match      gitoliteDenyRefex       "[^=]*="he=e-1 contained contains=gitoliteSpecialRefex,gitoliteGroup nextgroup=gitoliteDenyUsers
+syn match      gitoliteSpecialRefex    "\sNAME/"he=e-1 contained
+syn match      gitoliteSpecialRefex    "/USER/"hs=s+1,he=e-1 contained
+syn match      gitoliteDenyUsers       ".*" contained contains=gitoliteUserError,gitoliteComment
+
+" Configuration
+syn match      gitoliteKeyword         "^\s*config\s\+" nextgroup=gitoliteConfVariable
+syn match      gitoliteConfVariable    "[^=]*" contained
+
+" Include
+syn match      gitoliteInclude         "^\s*\(include\|subconf\)\s"
+
+" String
+syn region     gitoliteString          start=+"+ end=+"+ oneline
+
+" Define the default highlighting
+hi def link gitoliteComment            Comment
+hi def link gitoliteTodo               Todo
+hi def link gitoliteGroupDef           gitoliteGroup
+hi def link gitoliteGroup              Identifier
+hi def link gitoliteWildRepo           Special
+hi def link gitoliteRepoError          gitoliteError
+hi def link gitoliteUserError          gitoliteError
+hi def link gitoliteSpaceError         gitoliteError
+hi def link gitoliteError              Error
+hi def link gitoliteCreator            gitolitePreProc
+hi def link gitolitePreProc            PreProc
+hi def link gitoliteExtCmdHelper       PreProc
+hi def link gitoliteExtCmd             Special
+hi def link gitoliteRepoDef            Type
+hi def link gitoliteKeyword            Keyword
+hi def link gitoliteRefex              String
+hi def link gitoliteDenyRefex          gitoliteRefex
+hi def link gitoliteSpecialRefex       PreProc
+hi def link gitoliteDenyUsers          WarningMsg
+hi def link gitoliteConfVariable       Identifier
+hi def link gitoliteInclude            Include
+hi def link gitoliteString             String
+
+let b:current_syntax = "gitolite"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index ba1745d..a746028 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    git rebase --interactive
 " Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:   git-rebase-todo
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 if exists("b:current_syntax")
   finish
@@ -17,7 +17,9 @@ syn match   gitrebaseReword "\v^r%(eword)=>" nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseEdit   "\v^e%(dit)=>"   nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseSquash "\v^s%(quash)=>" nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseFixup  "\v^f%(ixup)=>"  nextgroup=gitrebaseCommit skipwhite
+syn match   gitrebaseExec   "\v^%(x|exec)>" nextgroup=gitrebaseCommand skipwhite
 syn match   gitrebaseSummary ".*"               contains=gitrebaseHash contained
+syn match   gitrebaseCommand ".*"                                      contained
 syn match   gitrebaseComment "^#.*"             contains=gitrebaseHash
 syn match   gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite
 
@@ -28,6 +30,7 @@ hi def link gitrebaseReword         Number
 hi def link gitrebaseEdit           PreProc
 hi def link gitrebaseSquash         Type
 hi def link gitrebaseFixup          Special
+hi def link gitrebaseExec           Function
 hi def link gitrebaseSummary        String
 hi def link gitrebaseComment        Comment
 hi def link gitrebaseSquashError    Error
diff --git a/runtime/syntax/gnash.vim b/runtime/syntax/gnash.vim
new file mode 100644 (file)
index 0000000..f9e2b51
--- /dev/null
@@ -0,0 +1,99 @@
+" Vim syntax file
+" Maintainer:  Thilo Six
+" Contact:     <vim-dev at vim dot org>
+"              http://www.vim.org/maillist.php#vim-dev
+"
+" Description:         highlight gnash configuration files
+"              http://www.gnu.org/software/gnash/manual/gnashuser.html#gnashrc
+" File:                runtime/syntax/gnash.vim
+" Last Change:         2012 May 19
+" Modeline:    vim: ts=8:sw=2:sts=2:
+"
+" Credits:     derived from Nikolai Weibulls readline.vim
+"
+" License:     VIM License
+"              Vim is Charityware, see ":help Uganda"
+"
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+    syntax clear
+elseif exists("b:current_syntax") || &compatible
+    finish
+endif
+
+syn case match
+syn keyword GnashTodo      contained TODO FIXME XXX NOTE
+
+" Comments
+syn match   GnashComment    "^#.*$"   contains=@Spell,GnashTodo
+syn match   GnashComment    "\s#.*$"  contains=@Spell,GnashTodo
+
+syn match   GnashNumber            display '\<\d\+\>'
+
+syn case ignore
+syn keyword GnashOn        ON YES TRUE
+syn keyword GnashOff       OFF NO FALSE
+
+syn match GnashSet         '^\s*set\>'
+syn match GnashSet         '^\s*append\>'
+
+syn match GnashKeyword     '\<CertDir\>'
+syn match GnashKeyword      '\<ASCodingErrorsVerbosity\>'
+syn match GnashKeyword      '\<CertFile\>'
+syn match GnashKeyword      '\<EnableExtensions\>'
+syn match GnashKeyword      '\<HWAccel\>'
+syn match GnashKeyword      '\<LCShmKey\>'
+syn match GnashKeyword      '\<LocalConnection\>'
+syn match GnashKeyword      '\<MalformedSWFVerbosity\>'
+syn match GnashKeyword      '\<Renderer\>'
+syn match GnashKeyword      '\<RootCert\>'
+syn match GnashKeyword      '\<SOLReadOnly\>'
+syn match GnashKeyword      '\<SOLSafeDir\>'
+syn match GnashKeyword      '\<SOLreadonly\>'
+syn match GnashKeyword      '\<SOLsafedir\>'
+syn match GnashKeyword      '\<StartStopped\>'
+syn match GnashKeyword      '\<StreamsTimeout\>'
+syn match GnashKeyword      '\<URLOpenerFormat\>'
+syn match GnashKeyword      '\<XVideo\>'
+syn match GnashKeyword      '\<actionDump\>'
+syn match GnashKeyword      '\<blacklist\>'
+syn match GnashKeyword      '\<debugger\>'
+syn match GnashKeyword      '\<debuglog\>'
+syn match GnashKeyword      '\<delay\>'
+syn match GnashKeyword      '\<enableExtensions\>'
+syn match GnashKeyword      '\<flashSystemManufacturer\>'
+syn match GnashKeyword      '\<flashSystemOS\>'
+syn match GnashKeyword      '\<flashVersionString\>'
+syn match GnashKeyword      '\<ignoreFSCommand\>'
+syn match GnashKeyword      '\<ignoreShowMenu\>'
+syn match GnashKeyword      '\<insecureSSL\>'
+syn match GnashKeyword      '\<localSandboxPath\>'
+syn match GnashKeyword      '\<localdomain\>'
+syn match GnashKeyword      '\<localhost\>'
+syn match GnashKeyword      '\<microphoneDevice\>'
+syn match GnashKeyword      '\<parserDump\>'
+syn match GnashKeyword      '\<pluginsound\>'
+syn match GnashKeyword      '\<quality\>'
+syn match GnashKeyword      '\<solLocalDomain\>'
+syn match GnashKeyword      '\<sound\>'
+syn match GnashKeyword      '\<splashScreen\>'
+syn match GnashKeyword      '\<startStopped\>'
+syn match GnashKeyword      '\<streamsTimeout\>'
+syn match GnashKeyword      '\<urlOpenerFormat\>'
+syn match GnashKeyword      '\<verbosity\>'
+syn match GnashKeyword      '\<webcamDevice\>'
+syn match GnashKeyword      '\<whitelist\>'
+syn match GnashKeyword      '\<writelog\>'
+
+hi def link GnashOn        Identifier
+hi def link GnashOff       Preproc
+hi def link GnashComment    Comment
+hi def link GnashTodo      Todo
+hi def link GnashNumber            Type
+hi def link GnashSet       String
+hi def link GnashKeyword    Keyword
+
+let b:current_syntax = "gnash"
+
index 2793aa4..f46a465 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
-" Language:    gp (version 2.4)
+" Language:    gp (version 2.5)
 " Maintainer:  Karim Belabas <Karim.Belabas@math.u-bordeaux.fr>
-" Last change: 2007 Oct 1
+" Last change: 2012 Jan 08
 " URL:         http://pari.math.u-bordeaux.fr
 
 if version < 600
@@ -10,21 +10,30 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " control statements
 syntax keyword gpStatement     break return next
 syntax keyword gpConditional   if
-syntax keyword gpRepeat                until while for fordiv forprime forstep forvec
+syntax keyword gpRepeat                until while for fordiv forell forprime 
+syntax keyword gpRepeat                forsubgroup forstep forvec
 " storage class
 syntax keyword gpScope         my local global
 " defaults
-syntax keyword gpInterfaceKey  colors compatible datadir debug debugfiles
-syntax keyword gpInterfaceKey  debugmem echo factor_add_primes format help
-syntax keyword gpInterfaceKey  histsize lines log logfile new_galois_format
+syntax keyword gpInterfaceKey  breakloop colors compatible
+syntax keyword gpInterfaceKey  datadir debug debugfiles debugmem 
+syntax keyword gpInterfaceKey  echo factor_add_primes factor_proven format 
+syntax keyword gpInterfaceKey  graphcolormap graphcolors
+syntax keyword gpInterfaceKey  help histfile histsize 
+syntax keyword gpInterfaceKey  lines linewrap log logfile new_galois_format
 syntax keyword gpInterfaceKey  output parisize path prettyprinter primelimit
-syntax keyword gpInterfaceKey  prompt prompt_cont psfile realprecision secure
-syntax keyword gpInterfaceKey  seriesprecision simplify strictmatch TeXstyle timer
+syntax keyword gpInterfaceKey  prompt prompt_cont psfile 
+syntax keyword gpInterfaceKey  readline realprecision recover 
+syntax keyword gpInterfaceKey  secure seriesprecision simplify strictmatch
+syntax keyword gpInterfaceKey  TeXstyle timer
 
-syntax match   gpInterface     "^\s*\\[a-z].*"
+syntax match gpInterface       "^\s*\\[a-z].*"
 syntax keyword gpInterface     default
 syntax keyword gpInput         read input
 
@@ -79,4 +88,6 @@ if version >= 508 || !exists("did_gp_syn_inits")
 endif
 
 let b:current_syntax = "gp"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index 0f73b17..cde21ee 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         gpg(1) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2007-06-17
+" Latest Revision:  2010-10-14
 
 if exists("b:current_syntax")
   finish
@@ -54,7 +54,7 @@ syn keyword gpgOption   contained skipwhite nextgroup=gpgArg
                         \ personal-digest-preferences photo-viewer
                         \ recipient s2k-cipher-algo s2k-digest-algo s2k-mode
                         \ secret-keyring set-filename set-policy-url status-fd
-                        \ trusted-key verify-options
+                        \ trusted-key verify-options keyid-format list-options
 syn keyword gpgOption   contained skipwhite nextgroup=gpgArgError
                         \ allow-freeform-uid allow-non-selfsigned-uid
                         \ allow-secret-key-import always-trust
diff --git a/runtime/syntax/gprof.vim b/runtime/syntax/gprof.vim
new file mode 100644 (file)
index 0000000..381a3c6
--- /dev/null
@@ -0,0 +1,69 @@
+" Vim syntax file
+" Language: Syntax for Gprof Output
+" Maintainer: Dominique Pelle <dominique.pelle@gmail.com>
+" Last Change: 2013 Jun 09
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+       finish
+endif
+let s:keepcpo= &cpo
+set cpo&vim
+
+syn case match
+syn sync minlines=100
+
+" Flat profile
+syn match gprofFlatProfileTitle
+  \ "^Flat profile:$" 
+syn region gprofFlatProfileHeader 
+  \ start="^Each sample counts as.*"
+  \ end="^ time.*name\s*$"
+syn region gprofFlatProfileTrailer
+  \ start="^\s*%\s\+the percentage of the total running time.*"
+  \ end="^\s*the gprof listing if it were to be printed\."
+
+" Call graph
+syn match gprofCallGraphTitle "Call graph (explanation follows)"
+syn region gprofCallGraphHeader
+  \ start="^granularity: each sample hit covers.*"
+  \ end="^\s*index % time\s\+self\s\+children\s\+called\s\+name$"
+syn match gprofCallGraphFunction "\s\+\(\d\+\.\d\+\s\+\)\{3}\([0-9+]\+\)\?\s\+[a-zA-Z_<].*\ze\["
+syn match gprofCallGraphSeparator "^-\+$"
+syn region gprofCallGraphTrailer
+  \ start="This table describes the call tree of the program"
+  \ end="^\s*the cycle\.$"
+
+" Index
+syn region gprofIndex
+  \ start="^Index by function name$"
+  \ end="\%$"
+
+syn match gprofIndexFunctionTitle "^Index by function name$"
+
+syn match gprofNumbers "^\s\+[0-9 ./+]\+"
+syn match gprofFunctionIndex "\[\d\+\]"
+syn match gprofSpecial "<\(spontaneous\|cycle \d\+\)>"
+
+hi def link gprofFlatProfileTitle      Title
+hi def link gprofFlatProfileHeader     Comment
+hi def link gprofFlatProfileFunction   Number
+hi def link gprofFlatProfileTrailer    Comment
+
+hi def link gprofCallGraphTitle        Title
+hi def link gprofCallGraphHeader       Comment
+hi def link gprofFlatProfileFunction   Number
+hi def link gprofCallGraphFunction     Special
+hi def link gprofCallGraphTrailer      Comment
+hi def link gprofCallGraphSeparator    Label
+
+hi def link gprofFunctionIndex         Label
+hi def link gprofSpecial               SpecialKey
+hi def link gprofNumbers               Number
+
+hi def link gprofIndexFunctionTitle Title
+
+let b:current_syntax = "gprof"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index d2f3496..2056bd1 100644 (file)
@@ -1,13 +1,16 @@
 " Vim syntax file
 " Language:    Groovy
-" Maintainer:  Alessio Pace <billy.corgan@tiscali.it>
-" Version:     0.1.9b
-" URL:   http://www.vim.org/scripts/script.php?script_id=945   
-" Last Change: 6/4/2004
+" Original Author:     Alessio Pace <billy.corgan@tiscali.it>
+" Maintainer:  Tobias Rapp <yahuxo@gmx.de>
+" Version:     0.1.13
+" URL:   http://www.vim.org/scripts/script.php?script_id=945
+" Last Change: 2013 Apr 24
 
+" THE ORIGINAL AUTHOR'S NOTES:
+"
 " This is my very first vim script, I hope to have
 " done it the right way.
-" 
+"
 " I must directly or indirectly thank the author of java.vim and ruby.vim:
 " I copied from them most of the stuff :-)
 "
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
 "
-" HOWTO USE IT (INSTALL):
-" [groovy is still not recognized by vim! :-( ]
+" HOWTO USE IT (INSTALL) when not part of the distribution:
 "
 " 1) copy the file in the (global or user's $HOME/.vim/syntax/) syntax folder
-" 
+"
 " 2) add this line to recognize groovy files by filename extension:
 "
 " au BufNewFile,BufRead *.groovy  setf groovy
@@ -36,7 +38,7 @@
 "  endif
 "
 "  in the global scripts.vim file or in $HOME/.vim/scripts.vim
-" 
+"
 " 4) open/write a .groovy file or a groovy script :-)
 "
 " Let me know if you like it or send me patches, so that I can improve it
@@ -53,6 +55,9 @@ if !exists("main_syntax")
   let main_syntax='groovy'
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " don't use standard HiLink, it will not work with included syntax files
 if version < 508
   command! -nargs=+ GroovyHiLink hi link <args>
@@ -69,7 +74,7 @@ endif
 
 " keyword definitions
 syn keyword groovyExternal        native package
-syn match groovyExternal          "\<import\(\s\+static\>\)\?"
+syn match groovyExternal          "\<import\>\(\s\+static\>\)\?"
 syn keyword groovyError           goto const
 syn keyword groovyConditional     if else switch
 syn keyword groovyRepeat          while for do
@@ -99,11 +104,11 @@ syn keyword groovyScopeDecl       public protected private abstract
 if exists("groovy_highlight_groovy_lang_ids") || exists("groovy_highlight_groovy_lang") || exists("groovy_highlight_all")
   " groovy.lang.*
   syn keyword groovyLangClass  Closure MetaMethod GroovyObject
-  
+
   syn match groovyJavaLangClass "\<System\>"
   syn keyword groovyJavaLangClass  Cloneable Comparable Runnable Serializable Boolean Byte Class Object
   syn keyword groovyJavaLangClass  Character CharSequence ClassLoader Compiler
-  " syn keyword groovyJavaLangClass  Integer Double Float Long 
+  " syn keyword groovyJavaLangClass  Integer Double Float Long
   syn keyword groovyJavaLangClass  InheritableThreadLocal Math Number Object Package Process
   syn keyword groovyJavaLangClass  Runtime RuntimePermission InheritableThreadLocal
   syn keyword groovyJavaLangClass  SecurityManager Short StrictMath StackTraceElement
@@ -157,18 +162,18 @@ syn match groovyExceptions        "\<Exception\>\|\<[A-Z]\{1,}[a-zA-Z0-9]*Except
 
 " Groovy JDK stuff
 syn keyword groovyJDKBuiltin    as def in
-syn keyword groovyJDKOperOverl  div minus plus abs round power multiply 
-syn keyword groovyJDKMethods   each call inject sort print println 
+syn keyword groovyJDKOperOverl  div minus plus abs round power multiply
+syn keyword groovyJDKMethods   each call inject sort print println
 syn keyword groovyJDKMethods    getAt putAt size push pop toList getText writeLine eachLine readLines
-syn keyword groovyJDKMethods    withReader withStream withWriter withPrintWriter write read leftShift 
+syn keyword groovyJDKMethods    withReader withStream withWriter withPrintWriter write read leftShift
 syn keyword groovyJDKMethods    withWriterAppend readBytes splitEachLine
-syn keyword groovyJDKMethods    newInputStream newOutputStream newPrintWriter newReader newWriter 
-syn keyword groovyJDKMethods    compareTo next previous isCase 
+syn keyword groovyJDKMethods    newInputStream newOutputStream newPrintWriter newReader newWriter
+syn keyword groovyJDKMethods    compareTo next previous isCase
 syn keyword groovyJDKMethods    times step toInteger upto any collect dump every find findAll grep
-syn keyword groovyJDKMethods    inspect invokeMethods join 
+syn keyword groovyJDKMethods    inspect invokeMethods join
 syn keyword groovyJDKMethods    getErr getIn getOut waitForOrKill
 syn keyword groovyJDKMethods    count tokenize asList flatten immutable intersect reverse reverseEach
-syn keyword groovyJDKMethods    subMap append asWritable eachByte eachLine eachFile 
+syn keyword groovyJDKMethods    subMap append asWritable eachByte eachLine eachFile
 syn cluster groovyTop add=groovyJDKBuiltin,groovyJDKOperOverl,groovyJDKMethods
 
 " no useful I think, so I comment it..
@@ -245,11 +250,17 @@ syn match   groovyComment          "/\*\*/"
 " Strings and constants
 syn match   groovySpecialError     contained "\\."
 syn match   groovySpecialCharError contained "[^']"
-syn match   groovySpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
+syn match   groovySpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\|\$\)"
+syn match   groovyRegexChar        contained "\\."
 syn region  groovyString          start=+"+ end=+"+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
-syn region  groovyString          start=+'+ end=+'+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
+syn region  groovyString          start=+'+ end=+'+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell
+syn region  groovyString          start=+"""+ end=+"""+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
+syn region  groovyString          start=+'''+ end=+'''+ contains=groovySpecialChar,groovySpecialError,@Spell
+" regex string
+syn region groovyString           start='/[^/]'  end='/' contains=groovySpecialChar,groovyRegexChar,groovyELExpr
 " syn region groovyELExpr start=+${+ end=+}+ keepend contained
- syn match groovyELExpr /\${.\{-}}/ contained
+syn match groovyELExpr /\${.\{-}}/ contained
+syn match groovyELExpr /\$[a-zA-Z_][a-zA-Z0-9_.]*/ contained
 GroovyHiLink groovyELExpr Identifier
 
 " TODO: better matching. I am waiting to understand how it really works in groovy
@@ -327,7 +338,7 @@ if exists("groovy_highlight_debug")
     GroovyHiLink groovyDebugSpecialCharacter DebugSpecial
     GroovyHiLink groovyDebugCharacter        DebugString
     GroovyHiLink groovyDebugParen            Debug
-  
+
     GroovyHiLink DebugString               String
     GroovyHiLink DebugSpecial              Special
     GroovyHiLink DebugBoolean              Boolean
@@ -335,7 +346,7 @@ if exists("groovy_highlight_debug")
   endif
 endif
 
-" Match all Exception classes 
+" Match all Exception classes
 syn match groovyExceptions        "\<Exception\>\|\<[A-Z]\{1,}[a-zA-Z0-9]*Exception\>"
 
 
@@ -345,7 +356,7 @@ endif
 exec "syn sync ccomment groovyComment minlines=" . groovy_minlines
 
 
-" ################### 
+" ###################
 " Groovy stuff
 " syn match groovyOperator             "|[ ,a-zA-Z0-9_*]\+|"
 
@@ -408,6 +419,7 @@ if version >= 508 || !exists("did_groovy_syn_inits")
   GroovyHiLink groovySpecialError      Error
   GroovyHiLink groovySpecialCharError  Error
   GroovyHiLink groovyString            String
+  GroovyHiLink groovyRegexChar         String
   GroovyHiLink groovyCharacter         Character
   GroovyHiLink groovySpecialChar       SpecialChar
   GroovyHiLink groovyNumber            Number
@@ -421,15 +433,15 @@ if version >= 508 || !exists("did_groovy_syn_inits")
   GroovyHiLink groovyConstant          Constant
   GroovyHiLink groovyTypedef           Typedef
   GroovyHiLink groovyTodo              Todo
-  
+
   GroovyHiLink groovyCommentTitle      SpecialComment
   GroovyHiLink groovyDocTags           Special
   GroovyHiLink groovyDocParam          Function
   GroovyHiLink groovyCommentStar       groovyComment
-  
+
   GroovyHiLink groovyType              Type
   GroovyHiLink groovyExternal          Include
-  
+
   GroovyHiLink htmlComment             Special
   GroovyHiLink htmlCommentPart         Special
   GroovyHiLink groovySpaceError                Error
@@ -448,4 +460,7 @@ endif
 
 let b:spell_options="contained"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
index ae5bfd8..ab2d56d 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         group(5) user group file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2012-08-05
 
 if exists("b:current_syntax")
   finish
@@ -12,7 +12,7 @@ set cpo&vim
 
 syn match   groupBegin          display '^' nextgroup=groupName
 
-syn match   groupName           contained display '[a-z_][a-z0-9_-]\{0,15}'
+syn match   groupName           contained display '[^:]\+'
                                 \ nextgroup=groupPasswordColon
 
 syn match   groupPasswordColon  contained display ':'
@@ -30,7 +30,7 @@ syn match   groupGID            contained display '\d*'
 
 syn match   groupUserListColon  contained display ':' nextgroup=groupUserList
 
-syn match   groupUserList       contained '[a-z_][a-z0-9_-]*'
+syn match   groupUserList       contained '[^,]\+'
                                 \ nextgroup=groupUserListSep
 
 syn match   groupUserListSep    contained display ',' nextgroup=groupUserList
index e7766c5..e7b1b16 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    GSP - GNU Server Pages (v. 0.86)
 " Created By:  Nathaniel Harward nharward@yahoo.com
-" Last Changed: Dec. 12, 2000
+" Last Changed: 2012 Jan 08 by Thilo Six
 " Filenames:    *.gsp
 " URL:         http://www.constructicon.com/~nharward/vim/syntax/gsp.vim
 
@@ -34,6 +34,9 @@ else
   syn include @gspJava syntax/java.vim
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Add <java> as an HTML tag name along with its args
 syn keyword htmlTagName contained java
 syn keyword htmlArg     contained type file page
@@ -57,3 +60,6 @@ let b:current_syntax = "gsp"
 if main_syntax == 'gsp'
   unlet main_syntax
 endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 6df3054..d4de3ff 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    Hyper Builder
 " Maintainer:  Alejandro Forero Cuervo
 " URL:         http://bachue.com/hb/vim/syntax/hb.vim
-" Last Change: 2001 Sep 02
+" Last Change: 2012 Jan 08 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Read the HTML syntax to start with
 "syn include @HTMLStuff <sfile>:p:h/htmlhb.vim
 
@@ -94,4 +97,6 @@ syn sync match Normal grouphere NONE "^:\s*include\s\+[^ \t]\+$"
 
 let b:current_syntax = "hb"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index d926f37..807c78b 100644 (file)
@@ -1,17 +1,24 @@
 " Vim syntax file
 " Language:    Vim help file
 " Maintainer:  Bram Moolenaar (Bram@vim.org)
-" Last Change: 2009 May 18
+" Last Change: 2013 Jul 07
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn match helpHeadline         "^[-A-Z .][-A-Z0-9 .()]*[ \t]\+\*"me=e-1
-syn match helpSectionDelim     "^=\{3,}.*===$"
-syn match helpSectionDelim     "^-\{3,}.*--$"
-syn region helpExample         matchgroup=helpIgnore start=" >$" start="^>$" end="^[^ \t]"me=e-1 end="^<"
+syn match helpSectionDelim     "^===.*===$"
+syn match helpSectionDelim     "^---.*--$"
+if has("conceal")
+  syn region helpExample       matchgroup=helpIgnore start=" >$" start="^>$" end="^[^ \t]"me=e-1 end="^<" concealends
+else
+  syn region helpExample       matchgroup=helpIgnore start=" >$" start="^>$" end="^[^ \t]"me=e-1 end="^<"
+endif
 if has("ebcdic")
   syn match helpHyperTextJump  "\\\@<!|[^"*|]\+|" contains=helpBar
   syn match helpHyperTextEntry "\*[^"*|]\+\*\s"he=e-1 contains=helpStar
@@ -21,16 +28,30 @@ else
   syn match helpHyperTextEntry "\*[#-)!+-~]\+\*\s"he=e-1 contains=helpStar
   syn match helpHyperTextEntry "\*[#-)!+-~]\+\*$" contains=helpStar
 endif
-syn match helpBar              contained "|" conceal
-syn match helpStar             contained "\*" conceal
+if has("conceal")
+  syn match helpBar            contained "|" conceal
+  syn match helpBacktick       contained "`" conceal
+  syn match helpStar           contained "\*" conceal
+else
+  syn match helpBar            contained "|"
+  syn match helpBacktick       contained "`"
+  syn match helpStar           contained "\*"
+endif
 syn match helpNormal           "|.*====*|"
+syn match helpNormal           "|||"
 syn match helpNormal           ":|vim:|"       " for :help modeline
 syn match helpVim              "Vim version [0-9.a-z]\+"
 syn match helpVim              "VIM REFERENCE.*"
 syn match helpOption           "'[a-z]\{2,\}'"
 syn match helpOption           "'t_..'"
+syn match helpCommand          "`[^` ]\+`"hs=s+1,he=e-1 contains=helpBacktick
 syn match helpHeader           "\s*\zs.\{-}\ze\s\=\~$" nextgroup=helpIgnore
-syn match helpIgnore           "." contained conceal
+syn match helpGraphic          ".* \ze`$" nextgroup=helpIgnore
+if has("conceal")
+  syn match helpIgnore         "." contained conceal
+else
+  syn match helpIgnore         "." contained
+endif
 syn keyword helpNote           note Note NOTE note: Note: NOTE: Notes Notes:
 syn match helpSpecial          "\<N\>"
 syn match helpSpecial          "\<N\.$"me=e-1
@@ -41,7 +62,6 @@ syn match helpSpecial         "\[N]"
 syn match helpSpecial          "N  N"he=s+1
 syn match helpSpecial          "Nth"me=e-2
 syn match helpSpecial          "N-1"me=e-2
-syn match helpSpecial          "{[-a-zA-Z0-9'":%#=[\]<>.,]\+}"
 syn match helpSpecial          "{[-a-zA-Z0-9'"*+/:%#=[\]<>.,]\+}"
 syn match helpSpecial          "\s\[[-a-z^A-Z0-9_]\{2,}]"ms=s+1
 syn match helpSpecial          "<[-a-zA-Z0-9_]\+>"
@@ -135,12 +155,14 @@ syn sync minlines=40
 hi def link helpIgnore         Ignore
 hi def link helpHyperTextJump  Subtitle
 hi def link helpBar            Ignore
+hi def link helpBacktick       Ignore
 hi def link helpStar           Ignore
 hi def link helpHyperTextEntry String
 hi def link helpHeadline       Statement
 hi def link helpHeader         PreProc
 hi def link helpSectionDelim   PreProc
 hi def link helpVim            Identifier
+hi def link helpCommand                Comment
 hi def link helpExample                Comment
 hi def link helpOption         Type
 hi def link helpNotVi          Special
@@ -185,4 +207,6 @@ hi def link helpURL         String
 
 let b:current_syntax = "help"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8 sw=2
diff --git a/runtime/syntax/hgcommit.vim b/runtime/syntax/hgcommit.vim
new file mode 100644 (file)
index 0000000..37fe9db
--- /dev/null
@@ -0,0 +1,27 @@
+" Vim syntax file
+" Language:    hg (Mercurial) commit file
+" Maintainer:  Ken Takata <kentkt at csc dot jp>
+" Last Change: 2012 Aug 23
+" Filenames:   hg-editor-*.txt
+" License:     VIM License
+" URL:         https://github.com/k-takata/hg-vim
+
+if exists("b:current_syntax")
+  finish
+endif
+
+syn match hgcommitComment "^HG:.*$"             contains=@NoSpell
+syn match hgcommitUser    "^HG: user: \zs.*$"   contains=@NoSpell contained containedin=hgcommitComment
+syn match hgcommitBranch  "^HG: branch \zs.*$"  contains=@NoSpell contained containedin=hgcommitComment
+syn match hgcommitAdded   "^HG: \zsadded .*$"   contains=@NoSpell contained containedin=hgcommitComment
+syn match hgcommitChanged "^HG: \zschanged .*$" contains=@NoSpell contained containedin=hgcommitComment
+syn match hgcommitRemoved "^HG: \zsremoved .*$" contains=@NoSpell contained containedin=hgcommitComment
+
+hi def link hgcommitComment Comment
+hi def link hgcommitUser    String
+hi def link hgcommitBranch  String
+hi def link hgcommitAdded   Identifier
+hi def link hgcommitChanged Special
+hi def link hgcommitRemoved Constant
+
+let b:current_syntax = "hgcommit"
diff --git a/runtime/syntax/hostsaccess.vim b/runtime/syntax/hostsaccess.vim
new file mode 100644 (file)
index 0000000..8a9f02e
--- /dev/null
@@ -0,0 +1,27 @@
+" Vim syntax file
+" Language:    hosts.deny, hosts.allow configuration files
+" Maintainer:  Thilo Six <T.Six@gmx.de>
+" Last Change: 2011 May 01
+" Derived From: conf.vim
+" Credits:     Bram Moolenaar
+"
+" This file is there to get at least a minimal highlighting.
+" A later version may be improved.
+
+
+" Quit when a (custom) syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" For a starter we just use conf.vim for highlighting
+if version < 600
+  so <sfile>:p:h/conf.vim
+else
+  runtime! syntax/conf.vim
+  unlet b:current_syntax
+endif
+
+
+let b:current_syntax = "hostsaccess"
+" vim: ts=8 sw=2
index 137c13c..d59126d 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    HTML
 " Maintainer:  Claudio Fleiner <claudio@fleiner.com>
 " URL:         http://www.fleiner.com/vim/syntax/html.vim
-" Last Change:  2006 Jun 19
+" Last Change: 2012 Oct 05
 
 " Please check :help html.vim for some comments and a description of the options
 
@@ -17,6 +17,9 @@ if !exists("main_syntax")
   let main_syntax = 'html'
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " don't use standard HiLink, it will not work with included syntax files
 if version < 508
   command! -nargs=+ HtmlHiLink hi link <args>
@@ -37,7 +40,7 @@ syn region  htmlString   contained start=+"+ end=+"+ contains=htmlSpecialChar,ja
 syn region  htmlString   contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
 syn match   htmlValue    contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1   contains=javaScriptExpression,@htmlPreproc
 syn region  htmlEndTag             start=+</+      end=+>+ contains=htmlTagN,htmlTagError
-syn region  htmlTag                start=+<[^/]+   end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
+syn region  htmlTag                start=+<[^/]+   end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
 syn match   htmlTagN     contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
 syn match   htmlTagN     contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
 syn match   htmlTagError contained "[^>]<"ms=s+1
@@ -98,11 +101,11 @@ syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"
 
 " Comments (the real ones or the old netscape ones)
 if exists("html_wrong_comments")
-  syn region htmlComment                start=+<!--+    end=+--\s*>+
+  syn region htmlComment                start=+<!--+    end=+--\s*>+ contains=@Spell
 else
-  syn region htmlComment                start=+<!+      end=+>+   contains=htmlCommentPart,htmlCommentError
+  syn region htmlComment                start=+<!+      end=+>+   contains=htmlCommentPart,htmlCommentError,@Spell
   syn match  htmlCommentError contained "[^><!]"
-  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc
+  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc,@Spell
 endif
 syn region htmlComment                  start=+<!DOCTYPE+ keepend end=+>+
 
@@ -147,7 +150,8 @@ if !exists("html_no_rendering")
   syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
   syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
 
-  syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
+  syn match htmlLeadingSpace "^\s\+" contained
+  syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLeadingSpace,javaScript,@htmlPreproc
   syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
   syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
   syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
@@ -164,8 +168,8 @@ if main_syntax != 'java' || exists("java_javascript")
   " JAVA SCRIPT
   syn include @htmlJavaScript syntax/javascript.vim
   unlet b:current_syntax
-  syn region  javaScript start=+<script[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
-  syn region  htmlScriptTag     contained start=+<script+ end=+>+       contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
+  syn region  javaScript start=+<script\_[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
+  syn region  htmlScriptTag     contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
   HtmlHiLink htmlScriptTag htmlTag
 
   " html events (i.e. arguments that include javascript commands)
@@ -189,7 +193,7 @@ if main_syntax != 'java' || exists("java_vb")
   " VB SCRIPT
   syn include @htmlVbScript syntax/vb.vim
   unlet b:current_syntax
-  syn region  javaScript start=+<script [^>]*language *=[^>]*vbscript[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
+  syn region  javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
 endif
 
 syn cluster htmlJavaScript      add=@htmlPreproc
@@ -246,6 +250,7 @@ if version >= 508 || !exists("did_html_syn_inits")
     HtmlHiLink htmlItalicBoldUnderline     htmlBoldUnderlineItalic
     HtmlHiLink htmlItalicUnderlineBold     htmlBoldUnderlineItalic
     HtmlHiLink htmlLink                    Underlined
+    HtmlHiLink htmlLeadingSpace            None
     if !exists("html_my_rendering")
       hi def htmlBold                term=bold cterm=bold gui=bold
       hi def htmlBoldUnderline       term=bold,underline cterm=bold,underline gui=bold,underline
@@ -289,4 +294,6 @@ if main_syntax == 'html'
   unlet main_syntax
 endif
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index 39041fc..c51850b 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    IDL (Interface Description Language)
 " Created By:  Jody Goldberg
 " Maintainer:  Michael Geddes <vim@frog.wheelycreek.net>
-" Last Change:  Thu Apr 13 2006
+" Last Change:  2012 Jan 11
 
 
 " This is an experiment.  IDL's structure is simple enough to permit a full
 " History:
 " 2.0: Michael's new version
 " 2.1: Support for Vim 7 spell (Anduin Withers)
-"      
+"
 
 if exists("b:current_syntax")
   finish
 endif
 
-if exists("idlsyntax_showerror")
-  syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
-endif
+let s:cpo_save = &cpo
+try
+  set cpo&vim
 
-syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
-
-" Misc basic
-syn match   idlId          contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
-syn match   idlEnumComma   contained ","
-syn match   idlEnumNumber  contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
-syn match   idlSemiColon   contained ";"
-syn match   idlCommaArg    contained ","                      skipempty skipwhite nextgroup=idlSimpDecl
-syn region  idlArraySize1  contained start=:\[: end=:\]:      skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
-syn match   idlSimpDecl    contained "[a-zA-Z][a-zA-Z0-9_]*"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
-syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
-syn match   idlLiteral     contained "[1-9]\d*\(\.\d*\)\="
-syn match   idlLiteral     contained "0"
-syn match   idlLiteral     contained "\.\d\+"
-syn match   idlLiteral     contained "0x[0-9A-Fa-f]\+"
-syn match   idlLiteral     contained "0[0-7]\+"
-syn keyword idlLiteral     contained TRUE FALSE
-
-" Comments
-syn keyword idlTodo        contained TODO FIXME XXX
-syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
-syn match  idlComment      "//.*" contains=idlTodo,@Spell
-syn match  idlCommentError "\*/"
-
-" C style Preprocessor
-syn region idlIncluded    contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
-syn match  idlIncluded    contained "<[^>]*>"
-syn match  idlInclude     "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
-syn region idlPreCondit   start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=idlComment,idlCommentError
-syn region idlDefine      start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
-
-" Constants
-syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
-
-" Attribute
-syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
-syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
-
-" Types
-syn region  idlD4          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
-syn keyword idlSeqType     contained sequence             skipempty skipwhite nextgroup=idlD4
-syn keyword idlBaseType    contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
-syn keyword idlBaseTypeInt contained short long           skipempty skipwhite nextgroup=idlSimpDecl
-syn keyword idlBaseType    contained unsigned             skipempty skipwhite nextgroup=idlBaseTypeInt
-syn region  idlD1          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
-syn keyword idlBaseType    contained string               skipempty skipwhite nextgroup=idlD1,idlSimpDecl
-syn match   idlBaseType    contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*"  skipempty skipwhite nextgroup=idlSimpDecl
-
-" Modules
-syn region  idlModuleContent contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
-syn match   idlModuleName  contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
-syn keyword idlModule      module                         skipempty skipwhite nextgroup=idlModuleName
-
-" Interfaces
-syn cluster idlCommentable contains=idlComment
-syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
-
-syn region  idlInterfaceContent contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
-syn match   idlInheritFrom2 contained ","                     skipempty skipwhite nextgroup=idlInheritFrom
-syn match   idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
-syn match   idlInherit contained ":"                            skipempty skipwhite nextgroup=idlInheritFrom
-syn match   idlInterfaceName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
-syn keyword idlInterface     interface dispinterface          skipempty skipwhite nextgroup=idlInterfaceName
-syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
-syn match   idlSectionColon contained ":"
-
-
-syn match   idlLibraryName  contained  "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
-syn keyword idlLibrary      library                           skipempty skipwhite nextgroup=idlLibraryName
-syn region  idlLibraryContent contained start="{" end="}"     skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
-
-syn keyword idlImportlib contained importlib                  skipempty skipwhite nextgroup=idlStringArg
-syn region idlStringArg contained start="(" end=")"           contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
-
-syn keyword idlCoclass coclass contained                      skipempty skipwhite nextgroup=idlCoclassName
-syn match   idlCoclassName "[a-zA-Z0-9_]\+" contained         skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
-
-syn region idlCoclassDefinition contained start="{" end="}"   contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
-syn region idlCoclassAttributes contained start=+\[+ end=+]+  skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
-syn keyword idlCoclassAttribute contained default source
-"syn keyword idlInterface       interface                      skipempty skipwhite nextgroup=idlInterfaceStubName
-
-syn match idlImportString       +"\f\+"+                      skipempty skipwhite nextgroup=idlError,idlSemiColon
-syn keyword idlImport           import                        skipempty skipwhite nextgroup=idlImportString
-
-syn region  idlAttributes start="\[" end="\]"                 contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
-syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
-if !exists('idl_no_ms_extensions')
-syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
-endif
-syn region idlAttributeParam contained start="(" end=")"      contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
-" skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
-syn match idlErrorBrace contained "}"
-syn match idlErrorBracket contained ")"
-syn match idlErrorSquareBracket contained "\]"
-
-syn match idlUuid         contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
-
-" Raises
-syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
-
-" Context
-syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
-
-" Operation
-syn match   idlParmList   contained ","                  skipempty skipwhite nextgroup=idlOpParms
-syn region  idlArraySize  contained start="\[" end="\]"  skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
-syn match   idlParmName   contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlParmList,idlArraySize
-syn keyword idlParmInt    contained short long           skipempty skipwhite nextgroup=idlParmName
-syn keyword idlParmType   contained unsigned             skipempty skipwhite nextgroup=idlParmInt
-syn region  idlD3         contained start="<" end=">"    skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
-syn keyword idlParmType   contained string               skipempty skipwhite nextgroup=idlD3,idlParmName
-syn keyword idlParmType   contained void float double char boolean octet any    skipempty skipwhite nextgroup=idlParmName
-syn match   idlParmType   contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
-syn keyword idlOpParms    contained in out inout         skipempty skipwhite nextgroup=idlParmType
-
-if !exists('idl_no_ms_extensions')
-syn keyword idlOpParms    contained retval optional      skipempty skipwhite nextgroup=idlParmType
-  syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
-
-  syn keyword idlVariantType  contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
-  syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
-endif
+  if exists("idlsyntax_showerror")
+    syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
+  endif
 
-syn region  idlOpContents contained start="(" end=")"    skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
-syn match   idlOpName   contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlOpContents
-syn keyword idlOpInt    contained short long             skipempty skipwhite nextgroup=idlOpName
-syn region  idlD2       contained start="<" end=">"      skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
-syn keyword idlOp       contained unsigned               skipempty skipwhite nextgroup=idlOpInt
-syn keyword idlOp       contained string                 skipempty skipwhite nextgroup=idlD2,idlOpName
-syn keyword idlOp       contained void float double char boolean octet any  skipempty skipwhite nextgroup=idlOpName
-syn match   idlOp       contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
-syn keyword idlOp       contained void                   skipempty skipwhite nextgroup=idlOpName
-syn keyword idlOneWayOp contained oneway                 skipempty skipwhite nextgroup=idOp
-
-" Enum
-syn region  idlEnumContents contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
-syn match   idlEnumName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlEnumContents
-syn keyword idlEnum     enum                             skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
-
-" Typedef
-syn keyword idlTypedef typedef                          skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
-
-if !exists('idl_no_extensions')
-  syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
-
-  syn region  idlDefAttributes        contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
-
-  syn keyword idlDefBaseType      contained float double char boolean octet any  skipempty skipwhite nextgroup=idlTypedefDecl,idlError
-  syn keyword idlDefBaseTypeInt   contained short long                           skipempty skipwhite nextgroup=idlTypedefDecl,idlError
-  syn match idlDefOtherType       contained +\<\k\+\>+ skipempty                 nextgroup=idlTypedefDecl,idlError
-  " syn keyword idlDefSeqType     contained sequence                             skipempty skipwhite nextgroup=idlD4
-
-  " Enum typedef
-  syn keyword idlDefEnum          contained enum skipempty                       skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
-  syn match   idlDefEnumName      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
-  syn region  idlDefEnumContents  contained start="{" end="}"                    skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
-
-  syn match   idlTypedefDecl      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlError,idlSemiColon
-endif
+  syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
+
+  " Misc basic
+  syn match   idlId          contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
+  syn match   idlEnumComma   contained ","
+  syn match   idlEnumNumber  contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
+  syn match   idlSemiColon   contained ";"
+  syn match   idlCommaArg    contained ","                      skipempty skipwhite nextgroup=idlSimpDecl
+  syn region  idlArraySize1  contained start=:\[: end=:\]:      skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
+  syn match   idlSimpDecl    contained "[a-zA-Z][a-zA-Z0-9_]*"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
+  syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
+  syn match   idlLiteral     contained "[1-9]\d*\(\.\d*\)\="
+  syn match   idlLiteral     contained "0"
+  syn match   idlLiteral     contained "\.\d\+"
+  syn match   idlLiteral     contained "0x[0-9A-Fa-f]\+"
+  syn match   idlLiteral     contained "0[0-7]\+"
+  syn keyword idlLiteral     contained TRUE FALSE
+
+  " Comments
+  syn keyword idlTodo        contained TODO FIXME XXX
+  syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
+  syn match  idlComment      "//.*" contains=idlTodo,@Spell
+  syn match  idlCommentError "\*/"
+
+  " C style Preprocessor
+  syn region idlIncluded    contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
+  syn match  idlIncluded    contained "<[^>]*>"
+  syn match  idlInclude     "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
+  syn region idlPreCondit   start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=idlComment,idlCommentError
+  syn region idlDefine      start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
+
+  " Constants
+  syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
+
+  " Attribute
+  syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
+  syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
+
+  " Types
+  syn region  idlD4          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
+  syn keyword idlSeqType     contained sequence             skipempty skipwhite nextgroup=idlD4
+  syn keyword idlBaseType    contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
+  syn keyword idlBaseTypeInt contained short long           skipempty skipwhite nextgroup=idlSimpDecl
+  syn keyword idlBaseType    contained unsigned             skipempty skipwhite nextgroup=idlBaseTypeInt
+  syn region  idlD1          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
+  syn keyword idlBaseType    contained string               skipempty skipwhite nextgroup=idlD1,idlSimpDecl
+  syn match   idlBaseType    contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*"  skipempty skipwhite nextgroup=idlSimpDecl
+
+  " Modules
+  syn region  idlModuleContent contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
+  syn match   idlModuleName  contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
+  syn keyword idlModule      module                         skipempty skipwhite nextgroup=idlModuleName
+
+  " Interfaces
+  syn cluster idlCommentable contains=idlComment
+  syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
+
+  syn region  idlInterfaceContent contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
+  syn match   idlInheritFrom2 contained ","                     skipempty skipwhite nextgroup=idlInheritFrom
+  syn match   idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
+  syn match   idlInherit contained ":"                            skipempty skipwhite nextgroup=idlInheritFrom
+  syn match   idlInterfaceName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
+  syn keyword idlInterface     interface dispinterface          skipempty skipwhite nextgroup=idlInterfaceName
+  syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
+  syn match   idlSectionColon contained ":"
+
+
+  syn match   idlLibraryName  contained  "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
+  syn keyword idlLibrary      library                           skipempty skipwhite nextgroup=idlLibraryName
+  syn region  idlLibraryContent contained start="{" end="}"     skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
+
+  syn keyword idlImportlib contained importlib                  skipempty skipwhite nextgroup=idlStringArg
+  syn region idlStringArg contained start="(" end=")"           contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
+
+  syn keyword idlCoclass coclass contained                      skipempty skipwhite nextgroup=idlCoclassName
+  syn match   idlCoclassName "[a-zA-Z0-9_]\+" contained         skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
+
+  syn region idlCoclassDefinition contained start="{" end="}"   contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
+  syn region idlCoclassAttributes contained start=+\[+ end=+]+  skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
+  syn keyword idlCoclassAttribute contained default source
+  "syn keyword idlInterface       interface                      skipempty skipwhite nextgroup=idlInterfaceStubName
+
+  syn match idlImportString       +"\f\+"+                      skipempty skipwhite nextgroup=idlError,idlSemiColon
+  syn keyword idlImport           import                        skipempty skipwhite nextgroup=idlImportString
+
+  syn region  idlAttributes start="\[" end="\]"                 contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
+  syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
+  if !exists('idl_no_ms_extensions')
+  syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
+  endif
+  syn region idlAttributeParam contained start="(" end=")"      contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
+  " skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
+  syn match idlErrorBrace contained "}"
+  syn match idlErrorBracket contained ")"
+  syn match idlErrorSquareBracket contained "\]"
+
+  syn match idlUuid         contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
+
+  " Raises
+  syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
+
+  " Context
+  syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
+
+  " Operation
+  syn match   idlParmList   contained ","                  skipempty skipwhite nextgroup=idlOpParms
+  syn region  idlArraySize  contained start="\[" end="\]"  skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
+  syn match   idlParmName   contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlParmList,idlArraySize
+  syn keyword idlParmInt    contained short long           skipempty skipwhite nextgroup=idlParmName
+  syn keyword idlParmType   contained unsigned             skipempty skipwhite nextgroup=idlParmInt
+  syn region  idlD3         contained start="<" end=">"    skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
+  syn keyword idlParmType   contained string               skipempty skipwhite nextgroup=idlD3,idlParmName
+  syn keyword idlParmType   contained void float double char boolean octet any    skipempty skipwhite nextgroup=idlParmName
+  syn match   idlParmType   contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
+  syn keyword idlOpParms    contained in out inout         skipempty skipwhite nextgroup=idlParmType
+
+  if !exists('idl_no_ms_extensions')
+  syn keyword idlOpParms    contained retval optional      skipempty skipwhite nextgroup=idlParmType
+    syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
+
+    syn keyword idlVariantType  contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
+    syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
+  endif
 
-" Struct
-syn region  idlStructContent   contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
-syn match   idlStructName      contained "[a-zA-Z0-9_]\+"    skipempty skipwhite nextgroup=idlStructContent
-syn keyword idlStruct          struct                        skipempty skipwhite nextgroup=idlStructName
-
-" Exception
-syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
-
-" Union
-syn match   idlColon            contained ":"                skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
-syn region  idlCaseLabel        contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
-syn keyword idlCase             contained case               skipempty skipwhite nextgroup=idlCaseLabel
-syn keyword idlCase             contained default            skipempty skipwhite nextgroup=idlColon
-syn region  idlUnionContent     contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
-syn region  idlSwitchType       contained start="(" end=")"  skipempty skipwhite nextgroup=idlUnionContent
-syn keyword idlUnionSwitch      contained switch             skipempty skipwhite nextgroup=idlSwitchType
-syn match   idlUnionName        contained "[a-zA-Z0-9_]\+"   skipempty skipwhite nextgroup=idlUnionSwitch
-syn keyword idlUnion            union                        skipempty skipwhite nextgroup=idlUnionName
-
-if !exists('idl_no_extensions')
-  syn sync match  idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
-  syn sync maxlines=1000 minlines=100
-else
-  syn sync lines=200
-endif
-" syn sync fromstart
-
-if !exists("did_idl_syntax_inits")
-  let did_idl_syntax_inits = 1
-  " The default methods for highlighting.  Can be overridden later
-  command -nargs=+ HiLink hi def link <args>
-
-  HiLink idlInclude             Include
-  HiLink idlPreProc             PreProc
-  HiLink idlPreCondit           PreCondit
-  HiLink idlDefine              Macro
-  HiLink idlIncluded            String
-  HiLink idlString              String
-  HiLink idlComment             Comment
-  HiLink idlTodo                Todo
-  HiLink idlLiteral             Number
-  HiLink idlUuid                Number
-  HiLink idlType                Type
-  HiLink idlVariantType         idlType
-
-  HiLink idlModule              Keyword
-  HiLink idlInterface           Keyword
-  HiLink idlEnum                Keyword
-  HiLink idlStruct              Keyword
-  HiLink idlUnion               Keyword
-  HiLink idlTypedef             Keyword
-  HiLink idlException           Keyword
-  HiLink idlTypedefOtherTypeQualifier keyword
-
-  HiLink idlModuleName          Typedef
-  HiLink idlInterfaceName       Typedef
-  HiLink idlEnumName            Typedef
-  HiLink idlStructName          Typedef
-  HiLink idlUnionName           Typedef
-
-  HiLink idlBaseTypeInt         idlType
-  HiLink idlBaseType            idlType
-  HiLink idlSeqType             idlType
-  HiLink idlD1                  Paren
-  HiLink idlD2                  Paren
-  HiLink idlD3                  Paren
-  HiLink idlD4                  Paren
-  "HiLink idlArraySize          Paren
-  "HiLink idlArraySize1         Paren
-  HiLink idlModuleContent       Paren
-  HiLink idlUnionContent        Paren
-  HiLink idlStructContent       Paren
-  HiLink idlEnumContents        Paren
-  HiLink idlInterfaceContent    Paren
-
-  HiLink idlSimpDecl            Identifier
-  HiLink idlROAttr              StorageClass
-  HiLink idlAttr                Keyword
-  HiLink idlConst               StorageClass
-
-  HiLink idlOneWayOp            StorageClass
-  HiLink idlOp                  idlType
-  HiLink idlParmType            idlType
-  HiLink idlOpName              Function
-  HiLink idlOpParms             SpecialComment
-  HiLink idlParmName            Identifier
-  HiLink idlInheritFrom         Identifier
-  HiLink idlAttribute           SpecialComment
-
-  HiLink idlId                  Constant
-  "HiLink idlCase               Keyword
-  HiLink idlCaseLabel           Constant
-
-  HiLink idlErrorBracket        Error
-  HiLink idlErrorBrace          Error
-  HiLink idlErrorSquareBracket  Error
-
-  HiLink idlImport              Keyword
-  HiLink idlImportString        idlString
-  HiLink idlCoclassAttribute    StorageClass
-  HiLink idlLibrary             Keyword
-  HiLink idlImportlib           Keyword
-  HiLink idlCoclass             Keyword
-  HiLink idlLibraryName         Typedef
-  HiLink idlCoclassName         Typedef
-  " hi idlLibraryContent guifg=red
-  HiLink idlTypedefDecl         Typedef
-  HiLink idlDefEnum             Keyword
-  HiLink idlDefv1Enum           Keyword
-  HiLink idlDefEnumName         Typedef
-  HiLink idlDefEnumContents     Paren
-  HiLink idlDefBaseTypeInt      idlType
-  HiLink idlDefBaseType         idlType
-  HiLink idlDefSeqType          idlType
-  HiLink idlInterfaceSections   Label
+  syn region  idlOpContents contained start="(" end=")"    skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
+  syn match   idlOpName   contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlOpContents
+  syn keyword idlOpInt    contained short long             skipempty skipwhite nextgroup=idlOpName
+  syn region  idlD2       contained start="<" end=">"      skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
+  syn keyword idlOp       contained unsigned               skipempty skipwhite nextgroup=idlOpInt
+  syn keyword idlOp       contained string                 skipempty skipwhite nextgroup=idlD2,idlOpName
+  syn keyword idlOp       contained void float double char boolean octet any  skipempty skipwhite nextgroup=idlOpName
+  syn match   idlOp       contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
+  syn keyword idlOp       contained void                   skipempty skipwhite nextgroup=idlOpName
+  syn keyword idlOneWayOp contained oneway                 skipempty skipwhite nextgroup=idOp
+
+  " Enum
+  syn region  idlEnumContents contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
+  syn match   idlEnumName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlEnumContents
+  syn keyword idlEnum     enum                             skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
+
+  " Typedef
+  syn keyword idlTypedef typedef                          skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
+
+  if !exists('idl_no_extensions')
+    syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
+
+    syn region  idlDefAttributes        contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
+
+    syn keyword idlDefBaseType      contained float double char boolean octet any  skipempty skipwhite nextgroup=idlTypedefDecl,idlError
+    syn keyword idlDefBaseTypeInt   contained short long                           skipempty skipwhite nextgroup=idlTypedefDecl,idlError
+    syn match idlDefOtherType       contained +\<\k\+\>+ skipempty                 nextgroup=idlTypedefDecl,idlError
+    " syn keyword idlDefSeqType     contained sequence                             skipempty skipwhite nextgroup=idlD4
+
+    " Enum typedef
+    syn keyword idlDefEnum          contained enum skipempty                       skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
+    syn match   idlDefEnumName      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
+    syn region  idlDefEnumContents  contained start="{" end="}"                    skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
+
+    syn match   idlTypedefDecl      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlError,idlSemiColon
+  endif
 
-  if exists("idlsyntax_showerror")
-    if exists("idlsyntax_showerror_soft")
-      hi default idlError guibg=#d0ffd0
-    else
-      HiLink idlError Error
+  " Struct
+  syn region  idlStructContent   contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
+  syn match   idlStructName      contained "[a-zA-Z0-9_]\+"    skipempty skipwhite nextgroup=idlStructContent
+  syn keyword idlStruct          struct                        skipempty skipwhite nextgroup=idlStructName
+
+  " Exception
+  syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
+
+  " Union
+  syn match   idlColon            contained ":"                skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
+  syn region  idlCaseLabel        contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
+  syn keyword idlCase             contained case               skipempty skipwhite nextgroup=idlCaseLabel
+  syn keyword idlCase             contained default            skipempty skipwhite nextgroup=idlColon
+  syn region  idlUnionContent     contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
+  syn region  idlSwitchType       contained start="(" end=")"  skipempty skipwhite nextgroup=idlUnionContent
+  syn keyword idlUnionSwitch      contained switch             skipempty skipwhite nextgroup=idlSwitchType
+  syn match   idlUnionName        contained "[a-zA-Z0-9_]\+"   skipempty skipwhite nextgroup=idlUnionSwitch
+  syn keyword idlUnion            union                        skipempty skipwhite nextgroup=idlUnionName
+
+  if !exists('idl_no_extensions')
+    syn sync match  idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
+    syn sync maxlines=1000 minlines=100
+  else
+    syn sync lines=200
+  endif
+  " syn sync fromstart
+
+  if !exists("did_idl_syntax_inits")
+    let did_idl_syntax_inits = 1
+    " The default methods for highlighting.  Can be overridden later
+    command -nargs=+ HiLink hi def link <args>
+
+    HiLink idlInclude             Include
+    HiLink idlPreProc             PreProc
+    HiLink idlPreCondit           PreCondit
+    HiLink idlDefine              Macro
+    HiLink idlIncluded            String
+    HiLink idlString              String
+    HiLink idlComment             Comment
+    HiLink idlTodo                Todo
+    HiLink idlLiteral             Number
+    HiLink idlUuid                Number
+    HiLink idlType                Type
+    HiLink idlVariantType         idlType
+
+    HiLink idlModule              Keyword
+    HiLink idlInterface           Keyword
+    HiLink idlEnum                Keyword
+    HiLink idlStruct              Keyword
+    HiLink idlUnion               Keyword
+    HiLink idlTypedef             Keyword
+    HiLink idlException           Keyword
+    HiLink idlTypedefOtherTypeQualifier keyword
+
+    HiLink idlModuleName          Typedef
+    HiLink idlInterfaceName       Typedef
+    HiLink idlEnumName            Typedef
+    HiLink idlStructName          Typedef
+    HiLink idlUnionName           Typedef
+
+    HiLink idlBaseTypeInt         idlType
+    HiLink idlBaseType            idlType
+    HiLink idlSeqType             idlType
+    HiLink idlD1                  Paren
+    HiLink idlD2                  Paren
+    HiLink idlD3                  Paren
+    HiLink idlD4                  Paren
+    "HiLink idlArraySize          Paren
+    "HiLink idlArraySize1         Paren
+    HiLink idlModuleContent       Paren
+    HiLink idlUnionContent        Paren
+    HiLink idlStructContent       Paren
+    HiLink idlEnumContents        Paren
+    HiLink idlInterfaceContent    Paren
+
+    HiLink idlSimpDecl            Identifier
+    HiLink idlROAttr              StorageClass
+    HiLink idlAttr                Keyword
+    HiLink idlConst               StorageClass
+
+    HiLink idlOneWayOp            StorageClass
+    HiLink idlOp                  idlType
+    HiLink idlParmType            idlType
+    HiLink idlOpName              Function
+    HiLink idlOpParms             SpecialComment
+    HiLink idlParmName            Identifier
+    HiLink idlInheritFrom         Identifier
+    HiLink idlAttribute           SpecialComment
+
+    HiLink idlId                  Constant
+    "HiLink idlCase               Keyword
+    HiLink idlCaseLabel           Constant
+
+    HiLink idlErrorBracket        Error
+    HiLink idlErrorBrace          Error
+    HiLink idlErrorSquareBracket  Error
+
+    HiLink idlImport              Keyword
+    HiLink idlImportString        idlString
+    HiLink idlCoclassAttribute    StorageClass
+    HiLink idlLibrary             Keyword
+    HiLink idlImportlib           Keyword
+    HiLink idlCoclass             Keyword
+    HiLink idlLibraryName         Typedef
+    HiLink idlCoclassName         Typedef
+    " hi idlLibraryContent guifg=red
+    HiLink idlTypedefDecl         Typedef
+    HiLink idlDefEnum             Keyword
+    HiLink idlDefv1Enum           Keyword
+    HiLink idlDefEnumName         Typedef
+    HiLink idlDefEnumContents     Paren
+    HiLink idlDefBaseTypeInt      idlType
+    HiLink idlDefBaseType         idlType
+    HiLink idlDefSeqType          idlType
+    HiLink idlInterfaceSections   Label
+
+    if exists("idlsyntax_showerror")
+      if exists("idlsyntax_showerror_soft")
+        hi default idlError guibg=#d0ffd0
+      else
+        HiLink idlError Error
+      endif
     endif
+    delcommand HiLink
   endif
-  delcommand HiLink
-endif
-
-let b:current_syntax = "idl"
 
+  let b:current_syntax = "idl"
+finally
+  let &cpo = s:cpo_save
+  unlet s:cpo_save
+endtry
 " vim: sw=2 et
index 9d567e5..670d080 100644 (file)
@@ -1,6 +1,6 @@
 " Interactive Data Language syntax file (IDL, too  [:-)]
 " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
-" Last change: 2003 Apr 25
+" Last change: 2011 Apr 11
 " Created by: Hermann Rochholz <Hermann.Rochholz AT gmx.de>
 
 " Remove any old syntax stuff hanging around
@@ -113,7 +113,7 @@ syn keyword idlangRoutine EXPAND_PATH EXPINT EXTRAC EXTRACT_SLICE F_CVF
 syn keyword idlangRoutine F_PDF FACTORIAL FFT FILE_CHMOD FILE_DELETE
 syn keyword idlangRoutine FILE_EXPAND_PATH FILE_MKDIR FILE_TEST FILE_WHICH
 syn keyword idlangRoutine FILEPATH FINDFILE FINDGEN FINITE FIX FLICK FLOAT
-syn keyword idlangRoutine FLOOR FLOW3 FLTARR FLUSH FOR FORMAT_AXIS_VALUES
+syn keyword idlangRoutine FLOOR FLOW3 FLTARR FLUSH FORMAT_AXIS_VALUES
 syn keyword idlangRoutine FORWARD_FUNCTION FREE_LUN FSTAT FULSTR FUNCT
 syn keyword idlangRoutine FV_TEST FX_ROOT FZ_ROOTS GAMMA GAMMA_CT
 syn keyword idlangRoutine GAUSS_CVF GAUSS_PDF GAUSS2DFIT GAUSSFIT GAUSSINT
index fd0005e..131d833 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    Makeindex style file, *.ist
 " Maintainer:  Peter Meszaros <pmeszaros@effice.hu>
-" Last Change: May 4, 2001
+" Last Change: 2012 Jan 08 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 if version >= 600
   setlocal iskeyword=$,@,48-57,_
 else
@@ -67,4 +70,6 @@ endif
 
 let b:current_syntax = "ist"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8 sw=2
index 9fe6678..cbd99bb 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    JAM
 " Maintainer:  Ralf Lemke (ralflemk@t-online.de)
-" Last change: 09-10-2000
+" Last change: 2012 Jan 08 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 if version >= 600
   setlocal iskeyword=@,48-57,_,-
 else
@@ -249,4 +252,6 @@ endif
 
 let b:current_syntax = "jam"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index d11afa8..e5491b2 100644 (file)
@@ -1,7 +1,8 @@
-" Vim syntax file " Language:    Java
+" Vim syntax file
+" Language:    Java
 " Maintainer:  Claudio Fleiner <claudio@fleiner.com>
 " URL:         http://www.fleiner.com/vim/syntax/java.vim
-" Last Change: 2010 March 23
+" Last Change: 2012 Oct 05
 
 " Please check :help java.vim for comments on some of the options available.
 
@@ -17,6 +18,9 @@ if !exists("main_syntax")
   syn region javaFold start="{" end="}" transparent fold
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " don't use standard HiLink, it will not work with included syntax files
 if version < 508
   command! -nargs=+ JavaHiLink hi link <args>
@@ -26,7 +30,8 @@ endif
 
 " some characters that cannot be in a java program (outside a string)
 syn match javaError "[\\@`]"
-syn match javaError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/"
+syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|[^-]->\|\*\/"
+
 syn match javaOK "\.\.\."
 
 " use separate name so that it can be deleted in javacc.vim
@@ -120,11 +125,8 @@ syn region  javaLabelRegion        transparent matchgroup=javaLabel start="\<case\>" ma
 syn match   javaUserLabel      "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
 syn keyword javaLabel          default
 
-if !exists("java_allow_cpp_keywords")
-  syn keyword javaError auto delete extern friend inline redeclared
-  syn keyword javaError register signed sizeof struct template typedef union
-  syn keyword javaError unsigned operator
-endif
+" highlighting C++ keywords as errors removed, too many people find it
+" annoying.  Was: if !exists("java_allow_cpp_keywords")
 
 " The following cluster contains all java groups except the contained ones
 syn cluster javaTop add=javaExternal,javaError,javaError,javaBranch,javaLabelRegion,javaLabel,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaClassDecl,javaClassDecl,javaScopeDecl,javaError,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg
@@ -164,7 +166,7 @@ if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
   syn region  javaDocComment   start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
   syn region  javaCommentTitle contained matchgroup=javaDocComment start="/\*\*"   matchgroup=javaCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,@Spell,javaDocTags,javaDocSeeTag
 
-  syn region javaDocTags        contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
+  syn region javaDocTags        contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
   syn match  javaDocTags        contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
   syn match  javaDocParam       contained "\s\S\+"
   syn match  javaDocTags        contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
@@ -344,5 +346,7 @@ if main_syntax == 'java'
 endif
 
 let b:spell_options="contained"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " vim: ts=8
index 57c57b5..5458de7 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    JavaCC, a Java Compiler Compiler written by JavaSoft
 " Maintainer:  Claudio Fleiner <claudio@fleiner.com>
 " URL:         http://www.fleiner.com/vim/syntax/javacc.vim
-" Last Change: 2001 Jun 20
+" Last Change: 2012 Oct 05
 
 " Uses java.vim, and adds a few special things for JavaCC Parser files.
 " Those files usually have the extension  *.jj
@@ -15,6 +15,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " source the java.vim file
 if version < 600
   source <sfile>:p:h/java.vim
@@ -44,7 +47,7 @@ syn keyword javaccPackages options DEBUG_PARSER DEBUG_LOOKAHEAD DEBUG_TOKEN_MANA
 syn keyword javaccPackages COMMON_TOKEN_ACTION IGNORE_CASE CHOICE_AMBIGUITY_CHECK
 syn keyword javaccPackages OTHER_AMBIGUITY_CHECK STATIC LOOKAHEAD ERROR_REPORTING
 syn keyword javaccPackages USER_TOKEN_MANAGER  USER_CHAR_STREAM JAVA_UNICODE_ESCAPE
-syn keyword javaccPackages UNICODE_INPUT
+syn keyword javaccPackages UNICODE_INPUT JDK_VERSION
 syn match javaccPackages "PARSER_END([^)]*)"
 syn match javaccPackages "PARSER_BEGIN([^)]*)"
 syn match javaccSpecToken "<EOF>"
@@ -73,5 +76,7 @@ if version >= 508 || !exists("did_css_syn_inits")
 endif
 
 let b:current_syntax = "javacc"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " vim: ts=8
index b293eb8..1b20f98 100644 (file)
@@ -7,7 +7,8 @@
 "              (ss) repaired several quoting and grouping glitches
 "              (ss) fixed regex parsing issue with multiple qualifiers [gi]
 "              (ss) additional factoring of keywords, globals, and members
-" Last Change: 2010 Mar 25
+" Last Change: 2012 Oct 05
+"              2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -21,8 +22,13 @@ if !exists("main_syntax")
     finish
   endif
   let main_syntax = 'javascript'
+elseif exists("b:current_syntax") && b:current_syntax == "javascript"
+  finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Drop fold if it set but vim doesn't support it.
 if version < 600 && exists("javaScript_fold")
   unlet javaScript_fold
@@ -39,7 +45,7 @@ syn region  javaScriptStringS        start=+'+  skip=+\\\\\|\\'+  end=+'\|$+  con
 
 syn match   javaScriptSpecialCharacter "'\\.'"
 syn match   javaScriptNumber          "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
-syn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
+syn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gim]\{0,2\}\s*$+ end=+/[gim]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
 
 syn keyword javaScriptConditional      if else switch
 syn keyword javaScriptRepeat           while for do in
@@ -131,5 +137,7 @@ let b:current_syntax = "javascript"
 if main_syntax == 'javascript'
   unlet main_syntax
 endif
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " vim: ts=8
diff --git a/runtime/syntax/jovial.vim b/runtime/syntax/jovial.vim
new file mode 100644 (file)
index 0000000..7c63841
--- /dev/null
@@ -0,0 +1,110 @@
+" Vim syntax file
+" Language: JOVIAL J73
+" Version: 1.2
+" Maintainer: Paul McGinnis <paulmcg@aol.com>
+" Last Change: 2011/06/17
+" Remark: Based on MIL-STD-1589C for JOVIAL J73 language
+
+" Quit when a (custom) syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+syn case ignore
+
+syn keyword jovialTodo TODO FIXME XXX contained
+
+" JOVIAL beads - first digit is number of bits, [0-9A-V] is the bit value
+" representing 0-31 (for 5 bits on the bead)
+syn match jovialBitConstant "[1-5]B'[0-9A-V]'"
+
+syn match jovialNumber "\<\d\+\>"
+
+syn match jovialFloat "\d\+E[-+]\=\d\+"
+syn match jovialFloat "\d\+\.\d*\(E[-+]\=\d\+\)\="
+syn match jovialFloat "\.\d\+\(E[-+]\=\d\+\)\="
+
+syn region jovialComment start=/"/ end=/"/ contains=jovialTodo
+syn region jovialComment start=/%/ end=/%/ contains=jovialTodo
+
+" JOVIAL variable names. This rule is to prevent conflicts with strings.
+" Handle special case where ' character can be part of a JOVIAL variable name.
+syn match jovialIdentifier "[A-Z\$][A-Z0-9'\$]\+"
+
+syn region jovialString start="\s*'" skip=/''/ end=/'/ oneline
+
+" JOVIAL compiler directives -- see Section 9 in MIL-STD-1589C
+syn region jovialPreProc start="\s*![A-Z]\+" end=/;/
+
+syn keyword jovialOperator AND OR NOT XOR EQV MOD
+
+" See Section 2.1 in MIL-STD-1589C for data types
+syn keyword jovialType ITEM B C P V
+syn match jovialType "\<S\(,R\|,T\|,Z\)\=\>"
+syn match jovialType "\<U\(,R\|,T\|,Z\)\=\>"
+syn match jovialType "\<F\(,R\|,T\|,Z\)\=\>"
+syn match jovialType "\<A\(,R\|,T\|,Z\)\=\>"
+
+syn keyword jovialStorageClass STATIC CONSTANT PARALLEL BLOCK N M D W
+
+syn keyword jovialStructure TABLE STATUS
+
+syn keyword jovialConstant NULL
+
+syn keyword jovialBoolean FALSE TRUE
+
+syn keyword jovialTypedef TYPE
+
+syn keyword jovialStatement ABORT BEGIN BY BYREF BYRES BYVAL CASE COMPOOL
+syn keyword jovialStatement DEF DEFAULT DEFINE ELSE END EXIT FALLTHRU FOR
+syn keyword jovialStatement GOTO IF INLINE INSTANCE LABEL LIKE OVERLAY POS
+syn keyword jovialStatement PROC PROGRAM REC REF RENT REP RETURN START STOP
+syn keyword jovialStatement TERM THEN WHILE
+
+" JOVIAL extensions, see section 8.2.2 in MIL-STD-1589C
+syn keyword jovialStatement CONDITION ENCAPSULATION EXPORTS FREE HANDLER IN INTERRUPT NEW
+syn keyword jovialStatement PROTECTED READONLY REGISTER SIGNAL TO UPDATE WITH WRITEONLY ZONE
+
+" implementation specific constants and functions, see section 1.4 in MIL-STD-1589C
+syn keyword jovialConstant BITSINBYTE BITSINWORD LOCSINWORD
+syn keyword jovialConstant BYTESINWORD BITSINPOINTER INTPRECISION
+syn keyword jovialConstant FLOATPRECISION FIXEDPRECISION FLOATRADIX
+syn keyword jovialConstant MAXFLOATPRECISION MAXFIXEDPRECISION
+syn keyword jovialConstant MAXINTSIZE MAXBYTES MAXBITS
+syn keyword jovialConstant MAXTABLESIZE MAXSTOP MINSTOP MAXSIGDIGITS
+syn keyword jovialFunction BYTEPOS MAXINT MININT
+syn keyword jovialFunction IMPLFLOATPRECISION IMPLFIXEDPRECISION IMPLINTSIZE
+syn keyword jovialFunction MINSIZE MINFRACTION MINSCALE MINRELPRECISION
+syn keyword jovialFunction MAXFLOAT MINFLOAT FLOATRELPRECISION
+syn keyword jovialFunction FLOATUNDERFLOW MAXFIXED MINFIXED
+
+" JOVIAL built-in functions
+syn keyword jovialFunction LOC NEXT BIT BYTE SHIFTL SHIFTR ABS SGN BITSIZE
+syn keyword jovialFunction BYTESIZE WORDSIZE LBOUND UBOUND NWDSEN FIRST
+syn keyword jovialFunction LAST NENT
+
+" Define the default highlighting.
+hi def link jovialBitConstant Number
+hi def link jovialBoolean Boolean
+hi def link jovialComment Comment
+hi def link jovialConstant Constant
+hi def link jovialFloat Float
+hi def link jovialFunction Function
+" No color highlighting for JOVIAL identifiers. See above,
+" this is to prevent confusion with JOVIAL strings
+"hi def link jovialIdentifier Identifier
+hi def link jovialNumber Number
+hi def link jovialOperator Operator
+hi def link jovialPreProc PreProc
+hi def link jovialStatement Statement
+hi def link jovialStorageClass StorageClass
+hi def link jovialString String
+hi def link jovialStructure Structure
+hi def link jovialTodo Todo
+hi def link jovialType Type
+hi def link jovialTypedef Typedef
+
+
+let b:current_syntax = "jovial"
+
+" vim: ts=8
index 47be7a8..4c2c9d9 100644 (file)
@@ -1,6 +1,6 @@
 " Vim syntax file
 " Language:    kimwitu++
-" Maintainer:  Michael Piefel <piefel@informatik.hu-berlin.de>
+" Maintainer:  Michael Piefel <entwurf@piefel.de>
 " Last Change: 2 May 2001
 
 " For version 5.x: Clear all syntax items
index 68ae632..b7aff34 100644 (file)
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:    Lex
-" Maintainer:  Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change: Sep 11, 2009
-" Version:     10
+" Maintainer:  Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Nov 14, 2012
+" Version:     14
 " URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Option:
@@ -17,28 +17,23 @@ elseif exists("b:current_syntax")
 endif
 
 " Read the C/C++ syntax to start with
-if version >= 600
-  if exists("lex_uses_cpp")
-    runtime! syntax/cpp.vim
-  else
-    runtime! syntax/c.vim
-  endif
-  unlet b:current_syntax
-else
-  if exists("lex_uses_cpp")
-    so <sfile>:p:h/cpp.vim
-  else
-    so <sfile>:p:h/c.vim
+let s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:lex_uses_cpp")? "/cpp.vim" : "/c.vim"))
+if !filereadable(s:Cpath)
+ for s:Cpath in split(globpath(&rtp,(exists("g:lex_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n")
+  if filereadable(fnameescape(s:Cpath))
+   let s:Cpath= fnameescape(s:Cpath)
+   break
   endif
+ endfor
 endif
+exe "syn include @lexCcode ".s:Cpath
 
 " --- ========= ---
 " --- Lex stuff ---
 " --- ========= ---
 
-"I'd prefer to use lex.* , but vim doesn't handle forward definitions yet
-syn cluster lexListGroup               contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatString,lexPatTag,lexPatTag,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,lexPatCode,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
-syn cluster lexListPatCodeGroup        contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatTag,lexPatTag,lexPatTagZoneStart,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
+" Options Section
+syn match lexOptions '^%\s*option\>.*$' contains=lexPatString
 
 " Abbreviations Section
 if has("folding")
@@ -50,50 +45,69 @@ syn match  lexAbbrv         "^\I\i*\s"me=e-1                        skipwhite       contained nextgroup=lexAbbrvRe
 syn match  lexAbbrv            "^%[sx]"                                        contained
 syn match  lexAbbrvRegExp      "\s\S.*$"lc=1                           contained nextgroup=lexAbbrv,lexInclude
 if has("folding")
- syn region lexInclude fold matchgroup=lexSep  start="^%{"     end="%}"        contained       contains=ALLBUT,@lexListGroup
+ syn region lexInclude fold matchgroup=lexSep  start="^%{"     end="%}"        contained       contains=@lexCcode
  syn region lexAbbrvComment    fold                    start="^\s\+/\*"        end="\*/"       contains=@Spell
+ syn region lexAbbrvComment    fold                    start="\%^/\*"  end="\*/"       contains=@Spell
  syn region lexStartState      fold matchgroup=lexAbbrv        start="^%\a\+"  end="$" contained
 else
- syn region lexInclude matchgroup=lexSep               start="^%{"     end="%}"        contained       contains=ALLBUT,@lexListGroup
+ syn region lexInclude matchgroup=lexSep               start="^%{"     end="%}"        contained       contains=@lexCcode
  syn region lexAbbrvComment                            start="^\s\+/\*"        end="\*/"       contains=@Spell
+ syn region lexAbbrvComment                            start="\%^/\*"  end="\*/"       contains=@Spell
  syn region lexStartState      matchgroup=lexAbbrv             start="^%\a\+"  end="$" contained
 endif
 
 "%% : Patterns {Actions}
 if has("folding")
- syn region lexPatBlock        fold matchgroup=Todo    start="^%%$" matchgroup=Todo    end="^%%$"      skipnl skipwhite        contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat
- syn region lexPat             fold                    start=+\S+ skip="\\\\\|\\."     end="\s"me=e-1          contained nextgroup=lexMorePat,lexPatSep contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
+ syn region lexPatBlock        fold matchgroup=Todo    start="^%%$" matchgroup=Todo    end="^%\ze%$"   skipnl  skipwhite       nextgroup=lexFinalCodeBlock     contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatInclude
+ syn region lexPat             fold                    start=+\S+ skip="\\\\\|\\."     end="\s"me=e-1  skipwhite       contained nextgroup=lexMorePat,lexPatSep,lexPattern contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
+ syn region lexPatInclude      fold matchgroup=lexSep  start="^%{"     end="%}"        contained       contains=lexPatCode
  syn region lexBrace   fold                    start="\[" skip=+\\\\\|\\+      end="]"                 contained
  syn region lexPatString       fold matchgroup=String  start=+"+       skip=+\\\\\|\\"+        matchgroup=String end=+"+       contained
 else
- syn region lexPatBlock        matchgroup=Todo         start="^%%$" matchgroup=Todo    end="^%%$"      skipnl skipwhite        contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat
- syn region lexPat                                     start=+\S+ skip="\\\\\|\\."     end="\s"me=e-1          contained nextgroup=lexMorePat,lexPatSep contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
+ syn region lexPatBlock        matchgroup=Todo         start="^%%$" matchgroup=Todo    end="^%%$"      skipnl  skipwhite       nextgroup=lexFinalCodeBlock     contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatInclude
+ syn region lexPat                                     start=+\S+ skip="\\\\\|\\."     end="\s"me=e-1  skipwhite       contained nextgroup=lexMorePat,lexPatSep,lexPattern contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
+ syn region lexPatInclude      matchgroup=lexSep               start="^%{"     end="%}"        contained       contains=lexPatCode
  syn region lexBrace                           start="\[" skip=+\\\\\|\\+      end="]"                 contained
  syn region lexPatString       matchgroup=String               start=+"+       skip=+\\\\\|\\"+        matchgroup=String end=+"+       contained
 endif
 syn match  lexPatTag   "^<\I\i*\(,\I\i*\)*>"                   contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
-syn match  lexPatTagZone       "^<\I\i*\(,\I\i*\)*>\s*\ze{"            contained nextgroup=lexPatTagZoneStart
+syn match  lexPatTagZone       "^<\I\i*\(,\I\i*\)*>\s\+\ze{"                   contained nextgroup=lexPatTagZoneStart
 syn match  lexPatTag   +^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+              contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
+
+" Lex Patterns
+syn region lexPattern  start='[^ \t{}]'        end="$"                 contained       contains=lexPatRange
+syn region lexPatRange matchgroup=Delimiter    start='\['      skip='\\\\\|\\.'        end='\]'        contains=lexEscape
+syn match  lexEscape   '\%(\\\\\)*\\.'                         contained
+
 if has("folding")
- syn region  lexPatTagZoneStart matchgroup=lexPatTag   fold    start='{' end='}'       contained contains=lexPat,lexPatComment
+ syn region lexPatTagZoneStart matchgroup=lexPatTag    fold    start='{' end='}'       contained contains=lexPat,lexPatComment
  syn region lexPatComment      start="\s\+/\*" end="\*/"       fold    skipnl  contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
 else
- syn region  lexPatTagZoneStart matchgroup=lexPatTag           start='{' end='}'       contained contains=lexPat,lexPatComment
+ syn region lexPatTagZoneStart matchgroup=lexPatTag            start='{' end='}'       contained contains=lexPat,lexPatComment
  syn region lexPatComment      start="\s\+/\*" end="\*/"               skipnl  contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
 endif
-syn match  lexPatCodeLine      ".*$"                                   contained contains=ALLBUT,@lexListGroup
+syn match  lexPatCodeLine      "[^{\[].*"                              contained contains=@lexCcode
 syn match  lexMorePat  "\s*|\s*$"                      skipnl  contained nextgroup=lexPat,lexPatTag,lexPatComment
 syn match  lexPatSep   "\s\+"                                  contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine
 syn match  lexSlashQuote       +\(\\\\\)*\\"+                          contained
 if has("folding")
- syn region lexPatCode matchgroup=Delimiter start="{" end="}"  fold    skipnl contained contains=ALLBUT,@lexListPatCodeGroup
+ syn region lexPatCode matchgroup=Delimiter start="{" end="}"  fold    skipnl contained contains=@lexCcode,lexCFunctions
 else
- syn region lexPatCode matchgroup=Delimiter start="{" end="}"          skipnl contained contains=ALLBUT,@lexListPatCodeGroup
+ syn region lexPatCode matchgroup=Delimiter start="{" end="}"  skipnl  contained contains=@lexCcode,lexCFunctions
 endif
 
+" Lex "functions" which may appear in C/C++ code blocks
 syn keyword lexCFunctions      BEGIN   input   unput   woutput yyleng  yylook  yytext
 syn keyword lexCFunctions      ECHO    output  winput  wunput  yyless  yymore  yywrap
 
+" %%
+"  lexAbbrevBlock
+" %%
+"  lexPatBlock
+" %%
+"  lexFinalCodeBlock
+syn region lexFinalCodeBlock matchgroup=Todo start="%$"me=e-1 end="\%$"        contained       contains=@lexCcode
+
 " <c.vim> includes several ALLBUTs; these have to be treated so as to exclude lex* groups
 syn cluster cParenGroup        add=lex.*
 syn cluster cDefineGroup       add=lex.*
@@ -102,26 +116,27 @@ syn cluster cMultiGroup   add=lex.*
 
 " Synchronization
 syn sync clear
-syn sync minlines=300
+syn sync minlines=500
 syn sync match lexSyncPat      grouphere  lexPatBlock  "^%[a-zA-Z]"
 syn sync match lexSyncPat      groupthere lexPatBlock  "^<$"
 syn sync match lexSyncPat      groupthere lexPatBlock  "^%%$"
 
 " The default highlighting.
 hi def link lexAbbrvComment    lexPatComment
-hi def link lexBrace   lexPat
-hi def link lexPatTagZone      lexPatTag
-hi def link lexSlashQuote      lexPat
-
 hi def link lexAbbrvRegExp     Macro
 hi def link lexAbbrv   SpecialChar
+hi def link lexBrace   lexPat
 hi def link lexCFunctions      Function
+hi def link lexCstruct cStructure
 hi def link lexMorePat SpecialChar
+hi def link lexOptions PreProc
 hi def link lexPatComment      Comment
 hi def link lexPat             Function
 hi def link lexPatString       Function
 hi def link lexPatTag  Special
+hi def link lexPatTagZone      lexPatTag
 hi def link lexSep             Delimiter
+hi def link lexSlashQuote      lexPat
 hi def link lexStartState      Statement
 
 let b:current_syntax = "lex"
index 20e5f38..295a917 100644 (file)
@@ -2,7 +2,7 @@
 " Language:     Liquid
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:    *.liquid
-" Last Change: 2010 May 21
+" Last Change: 2013 May 30
 
 if exists('b:current_syntax')
   finish
@@ -71,8 +71,9 @@ endif
 syn region  liquidStatement  matchgroup=liquidDelimiter start="{%" end="%}" contains=@liquidStatement containedin=ALLBUT,@liquidExempt keepend
 syn region  liquidExpression matchgroup=liquidDelimiter start="{{" end="}}" contains=@liquidExpression  containedin=ALLBUT,@liquidExempt keepend
 syn region  liquidComment    matchgroup=liquidDelimiter start="{%\s*comment\s*%}" end="{%\s*endcomment\s*%}" contains=liquidTodo,@Spell containedin=ALLBUT,@liquidExempt keepend
+syn region  liquidRaw        matchgroup=liquidDelimiter start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" contains=TOP,@liquidExempt containedin=ALLBUT,@liquidExempt keepend
 
-syn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,@liquidStatement,liquidYamlHead
+syn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,liquidRaw,@liquidStatement,liquidYamlHead
 syn cluster liquidStatement contains=liquidConditional,liquidRepeat,liquidKeyword,@liquidExpression
 syn cluster liquidExpression contains=liquidOperator,liquidString,liquidNumber,liquidFloat,liquidBoolean,liquidNull,liquidEmpty,liquidPipe,liquidForloop
 
index fd44f60..74ec20b 100644 (file)
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:    Lisp
 " Maintainer:  Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change: Mar 05, 2009
-" Version:     21
+" Last Change: Nov 16, 2010
+" Version:     22
 " URL:        http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 "  Thanks to F Xavier Noria for a list of 978 Common Lisp symbols
@@ -32,7 +32,7 @@ endif
 " ---------------------------------------------------------------------
 " Clusters: {{{1
 syn cluster                    lispAtomCluster         contains=lispAtomBarSymbol,lispAtomList,lispAtomNmbr0,lispComment,lispDecl,lispFunc,lispLeadWhite
-syn cluster                    lispBaseListCluster     contains=lispAtom,lispAtomBarSymbol,lispAtomMark,lispBQList,lispBarSymbol,lispComment,lispConcat,lispDecl,lispFunc,lispKey,lispList,lispNumber,lispSpecial,lispSymbol,lispVar,lispLeadWhite
+syn cluster                    lispBaseListCluster     contains=lispAtom,lispAtomBarSymbol,lispAtomMark,lispBQList,lispBarSymbol,lispComment,lispConcat,lispDecl,lispFunc,lispKey,lispList,lispNumber,lispEscapeSpecial,lispSymbol,lispVar,lispLeadWhite
 if exists("g:lisp_instring")
  syn cluster                   lispListCluster         contains=@lispBaseListCluster,lispString,lispInString,lispInStringString
 else
@@ -68,7 +68,7 @@ syn match lispAtom                    "'("me=e-1                      contains=lispAtomMark   nextgroup=lispAtomList
 syn match lispAtom                     "'[^ \t()]\+"                   contains=lispAtomMark
 syn match lispAtomBarSymbol            !'|..\{-}|!                     contains=lispAtomMark
 syn region lispAtom                    start=+'"+                      skip=+\\"+ end=+"+
-syn region lispAtomList                        contained                       matchgroup=Special start="("    skip="|.\{-}|" matchgroup=Special end=")"       contains=@lispAtomCluster,lispString,lispSpecial
+syn region lispAtomList                        contained                       matchgroup=Special start="("    skip="|.\{-}|" matchgroup=Special end=")"       contains=@lispAtomCluster,lispString,lispEscapeSpecial
 syn match lispAtomNmbr                 contained                       "\<\d\+"
 syn match lispLeadWhite                        contained                       "^\s\+"
 
@@ -537,16 +537,16 @@ endif
 syn match lispNumber           "-\=\(\.\d\+\|\d\+\(\.\d*\)\=\)\([dDeEfFlL][-+]\=\d\+\)\="
 syn match lispNumber           "-\=\(\d\+/\d\+\)"
 
-syn match lispSpecial          "\*\w[a-z_0-9-]*\*"
-syn match lispSpecial          !#|[^()'`,"; \t]\+|#!
-syn match lispSpecial          !#x\x\+!
-syn match lispSpecial          !#o\o\+!
-syn match lispSpecial          !#b[01]\+!
-syn match lispSpecial          !#\\[ -}\~]!
-syn match lispSpecial          !#[':][^()'`,"; \t]\+!
-syn match lispSpecial          !#([^()'`,"; \t]\+)!
-syn match lispSpecial          !#\\\%(Space\|Newline\|Tab\|Page\|Rubout\|Linefeed\|Return\|Backspace\)!
-syn match lispSpecial          "\<+[a-zA-Z_][a-zA-Z_0-9-]*+\>"
+syn match lispEscapeSpecial            "\*\w[a-z_0-9-]*\*"
+syn match lispEscapeSpecial            !#|[^()'`,"; \t]\+|#!
+syn match lispEscapeSpecial            !#x\x\+!
+syn match lispEscapeSpecial            !#o\o\+!
+syn match lispEscapeSpecial            !#b[01]\+!
+syn match lispEscapeSpecial            !#\\[ -}\~]!
+syn match lispEscapeSpecial            !#[':][^()'`,"; \t]\+!
+syn match lispEscapeSpecial            !#([^()'`,"; \t]\+)!
+syn match lispEscapeSpecial            !#\\\%(Space\|Newline\|Tab\|Page\|Rubout\|Linefeed\|Return\|Backspace\)!
+syn match lispEscapeSpecial            "\<+[a-zA-Z_][a-zA-Z_0-9-]*+\>"
 
 syn match lispConcat           "\s\.\s"
 syn match lispParenError       ")"
@@ -585,7 +585,7 @@ if version >= 508
   HiLink lispMark              Delimiter
   HiLink lispNumber            Number
   HiLink lispParenError                Error
-  HiLink lispSpecial           Type
+  HiLink lispEscapeSpecial     Type
   HiLink lispString            String
   HiLink lispTodo              Todo
   HiLink lispVar               Statement
index 7c2b122..59d18e7 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         login.defs(5) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2010-11-29
 
 if exists("b:current_syntax")
   finish
@@ -10,83 +10,163 @@ endif
 let s:cpo_save = &cpo
 set cpo&vim
 
-syn keyword logindefsTodo       contained TODO FIXME XXX NOTE
-
-syn region  logindefsComment    display oneline start='^\s*#' end='$'
-                                \ contains=logindefsTodo,@Spell
-
-syn match   logindefsString     contained '[[:graph:]]\+'
-
-syn match   logindefsPath       contained '[[:graph:]]\+'
-
-syn match   logindefsPaths      contained '[[:graph:]]\+'
-                                \ nextgroup=logindefsPathDelim
-
-syn match   logindefsPathDelim  contained ':' nextgroup=logindefsPaths
-
-syn keyword logindefsBoolean    contained yes no
-
-syn match   logindefsDecimal    contained '\<\d\+\>'
-
-syn match   logindefsOctal      contained display '\<0\o\+\>'
-                                \ contains=logindefsOctalZero
-syn match   logindefsOctalZero  contained display '\<0'
-syn match   logindefsOctalError contained display '\<0\o*[89]\d*\>'
-
-syn match   logindefsHex        contained display '\<0x\x\+\>'
-
-syn cluster logindefsNumber     contains=logindefsDecimal,logindefsOctal,
-                                \ logindefsOctalError,logindefsHex
-
-syn match   logindefsBegin      display '^'
-                                \ nextgroup=logindefsKeyword,logindefsComment
-                                \ skipwhite
-
-syn keyword logindefsKeyword    contained CHFN_AUTH CLOSE_SESSIONS CREATE_HOME
-                                \ DEFAULT_HOME FAILLOG_ENAB LASTLOG_ENAB
-                                \ LOG_OK_LOGINS LOG_UNKFAIL_ENAB MAIL_CHECK_ENAB
-                                \ MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB
-                                \ PASS_ALWAYS_WARN PORTTIME_CHECKS_ENAB
-                                \ QUOTAS_ENAB SU_WHEEL_ONLY SYSLOG_SG_ENAB
-                                \ SYSLOG_SU_ENAB USERGROUPS_ENAB
-                                \ nextgroup=logindefsBoolean skipwhite
-
-syn keyword logindefsKeyword    contained CHFN_RESTRICT CONSOLE CONSOLE_GROUPS
-                                \ ENV_TZ ENV_HZ FAKE_SHELL SU_NAME LOGIN_STRING
-                                \ NOLOGIN_STR TTYGROUP USERDEL_CMD
-                                \ nextgroup=logindefsString skipwhite
-
-syn keyword logindefsKeyword    contained ENVIRON_FILE FTMP_FILE HUSHLOGIN_FILE
-                                \ ISSUE_FILE MAIL_DIR MAIL_FILE NOLOGINS_FILE
-                                \ NOLOGINS_FILE TTYTYPE_FILE QMAIL_DIR
-                                \ SULOG_FILE
-                                \ nextgroup=logindefsPath skipwhite
-
-syn keyword logindefsKeyword    contained CRACKLIB_DICTPATH ENV_PATH
-                                \ ENV_ROOTPATH ENV_SUPATH MOTD_FILE
-                                \ nextgroup=logindefsPaths skipwhite
-
-syn keyword logindefsKeyword    contained ERASECHAR FAIL_DELAY GETPASS_ASTERISKS
-                                \ GID_MAX GID_MIN KILLCHAR LOGIN_RETRIES
-                                \ LOGIN_TIMEOUT PASS_CHANGE_TRIES PASS_MAX_DAYS
-                                \ PASS_MAX_LEN PASS_MIN_DAYS PASS_MIN_LEN
-                                \ PASS_WARN_AGE TTYPERM UID_MAX UID_MIN ULIMIT
-                                \ UMASK
-                                \ nextgroup=@logindefsNumber skipwhite
-
-hi def link logindefsTodo       Todo
-hi def link logindefsComment    Comment
-hi def link logindefsString     String
-hi def link logindefsPath       String
-hi def link logindefsPaths      logindefsPath
-hi def link logindefsPathDelim  Delimiter
-hi def link logindefsBoolean    Boolean
-hi def link logindefsDecimal    Number
-hi def link logindefsOctal      Number
-hi def link logindefsOctalZero  PreProc
-hi def link logindefsOctalError Error
-hi def link logindefsHex        Number
-hi def link logindefsKeyword    Keyword
+syn match   logindefsBegin          display '^'
+                                    \ nextgroup=
+                                    \   logindefsComment,
+                                    \   @logindefsKeyword
+                                    \ skipwhite
+
+syn region  logindefsComment        display oneline start='^\s*#' end='$'
+                                    \ contains=logindefsTodo,@Spell
+
+syn keyword logindefsTodo           contained TODO FIXME XXX NOTE
+
+syn cluster logindefsKeyword        contains=
+                                    \ logindefsBooleanKeyword,
+                                    \ logindefsEncryptKeyword,
+                                    \ logindefsNumberKeyword,
+                                    \ logindefsPathKeyword,
+                                    \ logindefsPathsKeyword,
+                                    \ logindefsStringKeyword
+
+syn keyword logindefsBooleanKeyword contained
+                                    \ CHFN_AUTH
+                                    \ CHSH_AUTH
+                                    \ CREATE_HOME
+                                    \ DEFAULT_HOME
+                                    \ FAILLOG_ENAB
+                                    \ LASTLOG_ENAB
+                                    \ LOG_OK_LOGINS
+                                    \ LOG_UNKFAIL_ENAB
+                                    \ MAIL_CHECK_ENAB
+                                    \ MD5_CRYPT_ENAB
+                                    \ OBSCURE_CHECKS_ENAB
+                                    \ PASS_ALWAYS_WARN
+                                    \ PORTTIME_CHECKS_ENAB
+                                    \ QUOTAS_ENAB
+                                    \ SU_WHEEL_ONLY
+                                    \ SYSLOG_SG_ENAB
+                                    \ SYSLOG_SU_ENAB
+                                    \ USERGROUPS_ENAB
+                                    \ nextgroup=logindefsBoolean skipwhite
+
+syn keyword logindefsBoolean        contained yes no
+
+syn keyword logindefsEncryptKeyword contained
+                                    \ ENCRYPT_METHOD
+                                    \ nextgroup=logindefsEncryptMethod skipwhite
+
+syn keyword logindefsEncryptMethod  contained
+                                    \ DES
+                                    \ MD5
+                                    \ SHA256
+                                    \ SHA512
+
+syn keyword logindefsNumberKeyword  contained
+                                    \ ERASECHAR
+                                    \ FAIL_DELAY
+                                    \ GID_MAX
+                                    \ GID_MIN
+                                    \ KILLCHAR
+                                    \ LOGIN_RETRIES
+                                    \ LOGIN_TIMEOUT
+                                    \ MAX_MEMBERS_PER_GROUP
+                                    \ PASS_CHANGE_TRIES
+                                    \ PASS_MAX_DAYS
+                                    \ PASS_MIN_DAYS
+                                    \ PASS_WARN_AGE
+                                    \ PASS_MAX_LEN
+                                    \ PASS_MIN_LEN
+                                    \ SHA_CRYPT_MAX_ROUNDS
+                                    \ SHA_CRYPT_MIN_ROUNDS
+                                    \ SYS_GID_MAX
+                                    \ SYS_GID_MIN
+                                    \ SYS_UID_MAX
+                                    \ SYS_UID_MIN
+                                    \ UID_MAX
+                                    \ UID_MIN
+                                    \ ULIMIT
+                                    \ UMASK
+                                    \ nextgroup=@logindefsNumber skipwhite
+
+syn cluster logindefsNumber         contains=
+                                    \ logindefsDecimal,
+                                    \ logindefsHex,
+                                    \ logindefsOctal,
+                                    \ logindefsOctalError
+
+syn match   logindefsDecimal        contained '\<\d\+\>'
+
+syn match   logindefsHex            contained display '\<0x\x\+\>'
+
+syn match   logindefsOctal          contained display '\<0\o\+\>'
+                                    \ contains=logindefsOctalZero
+syn match   logindefsOctalZero      contained display '\<0'
+
+syn match   logindefsOctalError     contained display '\<0\o*[89]\d*\>'
+
+syn keyword logindefsPathKeyword    contained
+                                    \ ENVIRON_FILE
+                                    \ FAKE_SHELL
+                                    \ FTMP_FILE
+                                    \ HUSHLOGIN_FILE
+                                    \ ISSUE_FILE
+                                    \ MAIL_DIR
+                                    \ MAIL_FILE
+                                    \ NOLOGINS_FILE
+                                    \ SULOG_FILE
+                                    \ TTYTYPE_FILE
+                                    \ nextgroup=logindefsPath skipwhite
+
+syn match   logindefsPath           contained '[[:graph:]]\+'
+
+syn keyword logindefsPathsKeyword   contained
+                                    \ CONSOLE
+                                    \ ENV_PATH
+                                    \ ENV_SUPATH
+                                    \ MOTD_FILE
+                                    \ nextgroup=logindefsPaths skipwhite
+
+syn match   logindefsPaths          contained '[^:]\+'
+                                    \ nextgroup=logindefsPathDelim
+
+syn match   logindefsPathDelim      contained ':' nextgroup=logindefsPaths
+
+syn keyword logindefsStringKeyword  contained
+                                    \ CHFN_RESTRICT
+                                    \ CONSOLE_GROUPS
+                                    \ ENV_HZ
+                                    \ ENV_TZ
+                                    \ LOGIN_STRING
+                                    \ SU_NAME
+                                    \ TTYGROUP
+                                    \ TTYPERM
+                                    \ USERDEL_CMD
+                                    \ nextgroup=logindefsString skipwhite
+
+syn match   logindefsString         contained '[[:graph:]]\+'
+
+hi def link logindefsComment        Comment
+hi def link logindefsTodo           Todo
+hi def link logindefsKeyword        Keyword
+hi def link logindefsBooleanKeyword logindefsKeyword
+hi def link logindefsEncryptKeyword logindefsKeyword
+hi def link logindefsNumberKeyword  logindefsKeyword
+hi def link logindefsPathKeyword    logindefsKeyword
+hi def link logindefsPathsKeyword   logindefsKeyword
+hi def link logindefsStringKeyword  logindefsKeyword
+hi def link logindefsBoolean        Boolean
+hi def link logindefsEncryptMethod  Type
+hi def link logindefsNumber         Number
+hi def link logindefsDecimal        logindefsNumber
+hi def link logindefsHex            logindefsNumber
+hi def link logindefsOctal          logindefsNumber
+hi def link logindefsOctalZero      PreProc
+hi def link logindefsOctalError     Error
+hi def link logindefsPath           String
+hi def link logindefsPaths          logindefsPath
+hi def link logindefsPathDelim      Delimiter
+hi def link logindefsString         String
 
 let b:current_syntax = "logindefs"
 
index 7d90cd8..be34c7e 100644 (file)
@@ -2,7 +2,7 @@
 "
 " Language:    Logtalk
 " Maintainer:  Paulo Moura <pmoura@logtalk.org>
-" Last Change: Oct 31, 2008
+" Last Change: February 4, 2012
 
 
 " Quit when a syntax file was already loaded:
@@ -13,6 +13,8 @@ elseif exists("b:current_syntax")
        finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
 
 " Logtalk is case sensitive:
 
@@ -75,8 +77,13 @@ syn region   logtalkEntityRel        matchgroup=logtalkEntityRelTag  start="complements("
 
 " Logtalk directives
 
+syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- if("                  matchgroup=logtalkDirTag        end=")\."       contains=ALL
+syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- elif("                matchgroup=logtalkDirTag        end=")\."       contains=ALL
+syn match      logtalkDirTag           ":- else\."
+syn match      logtalkDirTag           ":- endif\."
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- alias("               matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- calls("               matchgroup=logtalkDirTag        end=")\."       contains=ALL
+syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- coinductive("         matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- encoding("            matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- initialization("      matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- info("                matchgroup=logtalkDirTag        end=")\."       contains=ALL
@@ -89,17 +96,27 @@ syn region  logtalkDir              matchgroup=logtalkDirTag        start=":- public("              matchgroup=l
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- protected("           matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- private("             matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- meta_predicate("      matchgroup=logtalkDirTag        end=")\."       contains=ALL
+syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- meta_non_terminal("   matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- op("                  matchgroup=logtalkDirTag        end=")\."       contains=ALL
+syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- set_logtalk_flag("    matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- synchronized("        matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn match      logtalkDirTag           ":- synchronized\."
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- uses("                matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn match      logtalkDirTag           ":- threaded\."
 
 
+" Prolog directives
+
+syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- ensure_loaded("       matchgroup=logtalkDirTag        end=")\."       contains=ALL
+syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- include("             matchgroup=logtalkDirTag        end=")\."       contains=ALL
+syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- set_prolog_flag("     matchgroup=logtalkDirTag        end=")\."       contains=ALL
+
+
 " Module directives
 
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- module("              matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- export("              matchgroup=logtalkDirTag        end=")\."       contains=ALL
+syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- reexport("            matchgroup=logtalkDirTag        end=")\."       contains=ALL
 syn region     logtalkDir              matchgroup=logtalkDirTag        start=":- use_module("          matchgroup=logtalkDirTag        end=")\."       contains=ALL
 
 
@@ -109,7 +126,7 @@ syn match   logtalkBuiltIn          "\<\(abolish\|c\(reate\|urrent\)\)_\(object\|protocol\
 
 syn match      logtalkBuiltIn          "\<\(object\|protocol\|category\)_property\ze("
 
-syn match      logtalkBuiltIn          "\<complements_object\ze("
+syn match      logtalkBuiltIn          "\<co\(mplements_object\|nforms_to_protocol\)\ze("
 syn match      logtalkBuiltIn          "\<extends_\(object\|protocol\|category\)\ze("
 syn match      logtalkBuiltIn          "\<imp\(orts_category\|lements_protocol\)\ze("
 syn match      logtalkBuiltIn          "\<\(instantiat\|specializ\)es_class\ze("
@@ -119,7 +136,7 @@ syn match   logtalkBuiltIn          "\<current_event\ze("
 
 syn match      logtalkBuiltIn          "\<\(curren\|se\)t_logtalk_flag\ze("
 
-syn match      logtalkBuiltIn          "\<logtalk_\(compile\|l\(ibrary_path\|oad\)\)\ze("
+syn match      logtalkBuiltIn          "\<logtalk_\(compile\|l\(ibrary_path\|oad\|oad_context\)\)\ze("
 
 syn match      logtalkBuiltIn          "\<\(for\|retract\)all\ze("
 
@@ -145,7 +162,7 @@ syn match   logtalkBuiltInMethod    "\<f\(ind\|or\)all\ze("
 syn match      logtalkBuiltInMethod    "\<before\ze("
 syn match      logtalkBuiltInMethod    "\<after\ze("
 
-syn match      logtalkBuiltInMethod    "\<expand_term\ze("
+syn match      logtalkBuiltInMethod    "\<expand_\(goal\|term\)\ze("
 syn match      logtalkBuiltInMethod    "\<\(goal\|term\)_expansion\ze("
 syn match      logtalkBuiltInMethod    "\<phrase\ze("
 
@@ -182,12 +199,14 @@ syn match logtalkKeyword          "\<var\ze("
 syn match      logtalkKeyword          "\<atom\(ic\)\?\ze("
 syn match      logtalkKeyword          "\<integer\ze("
 syn match      logtalkKeyword          "\<float\ze("
-syn match      logtalkKeyword          "\<compound\ze("
+syn match      logtalkKeyword          "\<c\(allable\|ompound\)\ze("
 syn match      logtalkKeyword          "\<n\(onvar\|umber\)\ze("
+syn match      logtalkKeyword          "\<ground\ze("
 
 
 " Term comparison
 
+syn match      logtalkKeyword          "\<compare\ze("
 syn match      logtalkOperator         "@=<"
 syn match      logtalkOperator         "=="
 syn match      logtalkOperator         "\\=="
@@ -202,6 +221,7 @@ syn match   logtalkKeyword          "\<functor\ze("
 syn match      logtalkKeyword          "\<arg\ze("
 syn match      logtalkOperator         "=\.\."
 syn match      logtalkKeyword          "\<copy_term\ze("
+syn match      logtalkKeyword          "\<numbervars\ze("
 
 
 " Arithemtic evaluation
@@ -250,6 +270,7 @@ syn match   logtalkKeyword          "\<\(current_\)\?char_conversion\ze("
 " Logic and control
 
 syn match      logtalkOperator         "\\+"
+syn match      logtalkKeyword          "\<ignore\ze("
 syn match      logtalkKeyword          "\<once\ze("
 syn match      logtalkKeyword          "\<repeat\>"
 
@@ -269,6 +290,11 @@ syn match  logtalkKeyword          "\<halt\ze("
 syn match      logtalkKeyword          "\<halt\>"
 
 
+" Sorting
+
+syn match      logtalkKeyword          "\<\(key\)\?sort\ze("
+
+
 " Evaluable functors
 
 syn match      logtalkOperator         "+"
@@ -277,6 +303,8 @@ syn match   logtalkOperator         "\*"
 syn match      logtalkOperator         "//"
 syn match      logtalkOperator         "/"
 syn match      logtalkKeyword          "\<r\(ound\|em\)\ze("
+syn match      logtalkKeyword          "\<e\>"
+syn match      logtalkKeyword          "\<pi\>"
 syn match      logtalkKeyword          "\<rem\>"
 syn match      logtalkKeyword          "\<mod\ze("
 syn match      logtalkKeyword          "\<mod\>"
@@ -311,7 +339,12 @@ syn match  logtalkOperator         "\\"
 syn match      logtalkOperator         "|"
 
 
-" Logtalk numbers
+" Logtalk existential quantifier operator
+
+syn match      logtalkOperator         "\^"
+
+
+" Logtalk numbers 
 
 syn match      logtalkNumber           "\<\d\+\>"
 syn match      logtalkNumber           "\<\d\+\.\d\+\>"
@@ -333,6 +366,17 @@ syn match  logtalkOperator         "\."
 syn region     logtalkBlockComment     start="/\*"     end="\*/"       fold
 syn match      logtalkLineComment      "%.*"
 
+syn cluster    logtalkComment          contains=logtalkBlockComment,logtalkLineComment
+
+
+" Logtalk conditional compilation folding
+
+syn region logtalkIfContainer transparent keepend extend start=":- if(" end=":- endif\." containedin=ALLBUT,@logtalkComment contains=NONE
+syn region logtalkIf transparent fold keepend start=":- if(" end=":- \(else\.\|elif(\)"ms=s-1,me=s-1 contained containedin=logtalkIfContainer nextgroup=logtalkElseIf,logtalkElse contains=TOP
+syn region logtalkElseIf transparent fold keepend start=":- elif(" end=":- \(else\.\|elif(\)"ms=s-1,me=s-1 contained containedin=logtalkIfContainer nextgroup=logtalkElseIf,logtalkElse contains=TOP
+syn region logtalkElse transparent fold keepend start=":- else\." end=":- endif\." contained containedin=logtalkIfContainer contains=TOP
+
+
 
 " Logtalk entity folding
 
@@ -362,6 +406,11 @@ if version >= 508 || !exists("did_logtalk_syn_inits")
        HiLink  logtalkOpenEntityDir    Normal
        HiLink  logtalkOpenEntityDirTag PreProc
 
+       HiLink  logtalkIfContainer      PreProc
+       HiLink  logtalkIf               PreProc
+       HiLink  logtalkElseIf           PreProc
+       HiLink  logtalkElse             PreProc
+
        HiLink  logtalkEntity           Normal
 
        HiLink  logtalkEntityRel        Normal
@@ -396,3 +445,6 @@ endif
 
 
 let b:current_syntax = "logtalk"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 2a0a72c..9a34328 100644 (file)
@@ -1,13 +1,21 @@
 " Vim syntax file
 " Language:    Lout
 " Maintainer:  Christian V. J. Brüssow <cvjb@cvjb.de>
-" Last Change: Son 22 Jun 2003 20:43:26 CEST
+" Last Change: So 12 Feb 2012 15:15:03 CET
 " Filenames:   *.lout,*.lt
-" URL:                 http://www.cvjb.de/comp/vim/lout.vim
-" $Id: lout.vim,v 1.1 2004/06/13 17:52:18 vimboss Exp $
+" URL:         http://www.cvjb.de/comp/vim/lout.vim
+
+" $Id: lout.vim,v 1.4 2012/02/12 15:16:17 bruessow Exp $
 "
 " Lout: Basser Lout document formatting system.
 
+" Many Thanks to...
+" 
+" 2012-02-12:
+" Thilo Six <T.Six at gmx dot de> send a patch for cpoptions.
+" See the discussion at http://thread.gmane.org/gmane.editors.vim.devel/32151
+
+
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
 if version < 600
@@ -16,6 +24,9 @@ elseif exists("b:current_syntax")
        finish
 endif
 
+let s:cpo_save=&cpo
+set cpo&vim
+
 " Lout is case sensitive
 syn case match
 
@@ -136,4 +147,7 @@ endif
 
 let b:current_syntax = "lout"
 
+let &cpo=s:cpo_save
+unlet s:cpo_save
+
 " vim:ts=8:sw=4:nocindent:smartindent:
index 7665c1a..e948f3d 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    LPC
 " Maintainer:  Shizhu Pan <poet@mudbuilder.net>
 " URL:         http://poet.tomud.com/pub/lpc.vim.bz2
-" Last Change: 2003 May 11
+" Last Change: 2011 Dec 10 by Thilo Six
 " Comments:    If you are using Vim 6.2 or later, see :h lpc.vim for
 "              file type recognizing, if not, you had to use modeline.
 
@@ -17,6 +17,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Nodule: Keywords {{{1
 
 " LPC keywords
@@ -345,7 +348,6 @@ exec "syn sync ccomment lpcComment minlines=" . b:c_minlines
 setlocal cindent
 setlocal fo-=t fo+=croql
 setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
-set cpo-=C
 
 " Win32 can filter files in the browse dialog
 if has("gui_win32") && !exists("b:browsefilter")
@@ -451,5 +453,8 @@ endif
 
 let b:current_syntax = "lpc"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:ts=8:nosta:sw=2:ai:si:
 " vim600:set fdm=marker: }}}1
index 3f24816..3b2baa0 100644 (file)
@@ -1,12 +1,14 @@
 " Vim syntax file
 " Language:    Linden Scripting Language
 " Maintainer:  Timo Frenay <timo@frenay.net>
-" Last Change: 2008 Mar 29
+" Last Change: 2012 Apr 30
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Initializations
 syn case match
@@ -269,4 +271,7 @@ hi def link lslComment      Comment
 
 let b:current_syntax = "lsl"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: ts=8
index c40c628..3ff80b1 100644 (file)
@@ -1,11 +1,11 @@
 " Vim syntax file
-" Language:    Lua 4.0, Lua 5.0 and Lua 5.1
-" Maintainer:  Marcus Aurelius Farias <marcus.cf 'at' bol com br>
+" Language:    Lua 4.0, Lua 5.0, Lua 5.1 and Lua 5.2
+" Maintainer:  Marcus Aurelius Farias <masserahguard-lua 'at' yahoo com>
 " First Author:        Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
-" Last Change: 2006 Aug 10
+" Last Change: 2012 Aug 12
 " Options:     lua_version = 4 or 5
-"              lua_subversion = 0 (4.0, 5.0) or 1 (5.1)
-"              default 5.1
+"              lua_subversion = 0 (4.0, 5.0) or 1 (5.1) or 2 (5.2)
+"              default 5.2
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -15,10 +15,13 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 if !exists("lua_version")
-  " Default is lua 5.1
+  " Default is lua 5.2
   let lua_version = 5
-  let lua_subversion = 1
+  let lua_subversion = 2
 elseif !exists("lua_subversion")
   " lua_version exists, but lua_subversion doesn't. So, set it to 0
   let lua_subversion = 0
@@ -30,14 +33,14 @@ syn case match
 syn sync minlines=100
 
 " Comments
-syn keyword luaTodo             contained TODO FIXME XXX
-syn match   luaComment          "--.*$" contains=luaTodo,@Spell
+syn keyword luaTodo            contained TODO FIXME XXX
+syn match   luaComment         "--.*$" contains=luaTodo,@Spell
 if lua_version == 5 && lua_subversion == 0
-  syn region  luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell
-  syn region  luaInnerComment   contained transparent start="\[\[" end="\]\]"
+  syn region luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell
+  syn region luaInnerComment   contained transparent start="\[\[" end="\]\]"
 elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
   " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
-  syn region  luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell
+  syn region luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell
 endif
 
 " First line may start with #!
@@ -45,60 +48,69 @@ syn match luaComment "\%^#!.*"
 
 " catch errors caused by wrong parenthesis and wrong curly brackets or
 " keywords placed outside their respective blocks
+syn region luaParen      transparent                     start='(' end=')' contains=ALLBUT,luaParenError,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaBlock,luaLoopBlock,luaIn,luaStatement
+syn region luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaBraceError,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaBlock,luaLoopBlock,luaIn,luaStatement
 
-syn region luaParen transparent start='(' end=')' contains=ALLBUT,luaError,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
-syn match  luaError ")"
-syn match  luaError "}"
+syn match  luaParenError ")"
+syn match  luaBraceError "}"
 syn match  luaError "\<\%(end\|else\|elseif\|then\|until\|in\)\>"
 
-" Function declaration
-syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+" function ... end
+syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
 
-" if then else elseif end
-syn keyword luaCond contained else
+" if ... then
+syn region luaIfThen transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4           contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaIn nextgroup=luaThenEnd skipwhite skipempty
 
 " then ... end
-syn region luaCondEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaRepeat
+syn region luaThenEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaThenEnd,luaIn
 
 " elseif ... then
-syn region luaCondElseif contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+syn region luaElseifThen contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
 
-" if ... then
-syn region luaCondStart transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaCondEnd skipwhite skipempty
+" else
+syn keyword luaElse contained else
 
 " do ... end
-syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>"          contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
 
 " repeat ... until
-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>"   contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
 
 " while ... do
-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaBlock skipwhite skipempty
+syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaIn nextgroup=luaBlock skipwhite skipempty
 
 " for ... do and for ... in ... do
-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd nextgroup=luaBlock skipwhite skipempty
+syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2   contains=ALLBUT,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd nextgroup=luaBlock skipwhite skipempty
 
-" Following 'else' example. This is another item to those
-" contains=ALLBUT,... because only the 'for' luaRepeatBlock contains it.
-syn keyword luaRepeat contained in
+syn keyword luaIn contained in
 
 " other keywords
 syn keyword luaStatement return local break
-syn keyword luaOperator  and or not
-syn keyword luaConstant  nil
+if lua_version > 5 || (lua_version == 5 && lua_subversion >= 2)
+  syn keyword luaStatement goto
+  syn match luaLabel "::\I\i*::"
+endif
+syn keyword luaOperator and or not
+syn keyword luaConstant nil
 if lua_version > 4
   syn keyword luaConstant true false
 endif
 
 " Strings
 if lua_version < 5
-  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
-elseif lua_version == 5 && lua_subversion == 0
-  syn match  luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}"
-  syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell
-elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
-  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
-  syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell
+  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\[[:digit:]]\{,3}"
+elseif lua_version == 5
+  if lua_subversion == 0
+    syn match  luaSpecial contained #\\[\\abfnrtv'"[\]]\|\\[[:digit:]]\{,3}#
+    syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell
+  else
+    if lua_subversion == 1
+      syn match  luaSpecial contained #\\[\\abfnrtv'"]\|\\[[:digit:]]\{,3}#
+    else " Lua 5.2
+      syn match  luaSpecial contained #\\[\\abfnrtvz'"]\|\\x[[:xdigit:]]\{2}\|\\[[:digit:]]\{,3}#
+    endif
+    syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell
+  endif
 endif
 syn region luaString  start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial,@Spell
 syn region luaString  start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial,@Spell
@@ -106,20 +118,21 @@ syn region luaString  start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial,@Sp
 " integer number
 syn match luaNumber "\<\d\+\>"
 " floating point number, with dot, optional exponent
-syn match luaFloat  "\<\d\+\.\d*\%(e[-+]\=\d\+\)\=\>"
+syn match luaNumber  "\<\d\+\.\d*\%([eE][-+]\=\d\+\)\=\>"
 " floating point number, starting with a dot, optional exponent
-syn match luaFloat  "\.\d\+\%(e[-+]\=\d\+\)\=\>"
+syn match luaNumber  "\.\d\+\%([eE][-+]\=\d\+\)\=\>"
 " floating point number, without dot, with exponent
-syn match luaFloat  "\<\d\+e[-+]\=\d\+\>"
+syn match luaNumber  "\<\d\+[eE][-+]\=\d\+\>"
 
 " hex numbers
-if lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
-  syn match luaNumber "\<0x\x\+\>"
+if lua_version >= 5
+  if lua_subversion == 1
+    syn match luaNumber "\<0[xX]\x\+\>"
+  elseif lua_subversion >= 2
+    syn match luaNumber "\<0[xX][[:xdigit:].]\+\%([pP][-+]\=\d\+\)\=\>"
+  endif
 endif
 
-" tables
-syn region  luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
-
 syn keyword luaFunc assert collectgarbage dofile error next
 syn keyword luaFunc print rawget rawset tonumber tostring type _VERSION
 
@@ -144,127 +157,170 @@ if lua_version == 4
   syn keyword luaFunc format strfind gsub
   syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook
 elseif lua_version == 5
-  " Not sure if all these functions need to be highlighted...
-  syn keyword luaFunc _G getfenv getmetatable ipairs loadfile
-  syn keyword luaFunc loadstring pairs pcall rawequal
-  syn keyword luaFunc require setfenv setmetatable unpack xpcall
+  syn keyword luaFunc getmetatable setmetatable
+  syn keyword luaFunc ipairs pairs
+  syn keyword luaFunc pcall xpcall
+  syn keyword luaFunc _G loadfile rawequal require
   if lua_subversion == 0
+    syn keyword luaFunc getfenv setfenv
+    syn keyword luaFunc loadstring unpack
     syn keyword luaFunc gcinfo loadlib LUA_PATH _LOADED _REQUIREDNAME
-  elseif lua_subversion == 1
-    syn keyword luaFunc load module select
-    syn match luaFunc /package\.cpath/
-    syn match luaFunc /package\.loaded/
-    syn match luaFunc /package\.loadlib/
-    syn match luaFunc /package\.path/
-    syn match luaFunc /package\.preload/
-    syn match luaFunc /package\.seeall/
-    syn match luaFunc /coroutine\.running/
+  else
+    syn keyword luaFunc load select
+    syn match   luaFunc /\<package\.cpath\>/
+    syn match   luaFunc /\<package\.loaded\>/
+    syn match   luaFunc /\<package\.loadlib\>/
+    syn match   luaFunc /\<package\.path\>/
+    if lua_subversion == 1
+      syn keyword luaFunc getfenv setfenv
+      syn keyword luaFunc loadstring module unpack
+      syn match   luaFunc /\<package\.loaders\>/
+      syn match   luaFunc /\<package\.preload\>/
+      syn match   luaFunc /\<package\.seeall\>/
+    elseif lua_subversion == 2
+      syn keyword luaFunc _ENV rawlen
+      syn match   luaFunc /\<package\.config\>/
+      syn match   luaFunc /\<package\.preload\>/
+      syn match   luaFunc /\<package\.searchers\>/
+      syn match   luaFunc /\<package\.searchpath\>/
+      syn match   luaFunc /\<bit32\.arshift\>/
+      syn match   luaFunc /\<bit32\.band\>/
+      syn match   luaFunc /\<bit32\.bnot\>/
+      syn match   luaFunc /\<bit32\.bor\>/
+      syn match   luaFunc /\<bit32\.btest\>/
+      syn match   luaFunc /\<bit32\.bxor\>/
+      syn match   luaFunc /\<bit32\.extract\>/
+      syn match   luaFunc /\<bit32\.lrotate\>/
+      syn match   luaFunc /\<bit32\.lshift\>/
+      syn match   luaFunc /\<bit32\.replace\>/
+      syn match   luaFunc /\<bit32\.rrotate\>/
+      syn match   luaFunc /\<bit32\.rshift\>/
+    endif
+    syn match luaFunc /\<coroutine\.running\>/
   endif
-  syn match   luaFunc /coroutine\.create/
-  syn match   luaFunc /coroutine\.resume/
-  syn match   luaFunc /coroutine\.status/
-  syn match   luaFunc /coroutine\.wrap/
-  syn match   luaFunc /coroutine\.yield/
-  syn match   luaFunc /string\.byte/
-  syn match   luaFunc /string\.char/
-  syn match   luaFunc /string\.dump/
-  syn match   luaFunc /string\.find/
-  syn match   luaFunc /string\.len/
-  syn match   luaFunc /string\.lower/
-  syn match   luaFunc /string\.rep/
-  syn match   luaFunc /string\.sub/
-  syn match   luaFunc /string\.upper/
-  syn match   luaFunc /string\.format/
-  syn match   luaFunc /string\.gsub/
+  syn match   luaFunc /\<coroutine\.create\>/
+  syn match   luaFunc /\<coroutine\.resume\>/
+  syn match   luaFunc /\<coroutine\.status\>/
+  syn match   luaFunc /\<coroutine\.wrap\>/
+  syn match   luaFunc /\<coroutine\.yield\>/
+  syn match   luaFunc /\<string\.byte\>/
+  syn match   luaFunc /\<string\.char\>/
+  syn match   luaFunc /\<string\.dump\>/
+  syn match   luaFunc /\<string\.find\>/
+  syn match   luaFunc /\<string\.format\>/
+  syn match   luaFunc /\<string\.gsub\>/
+  syn match   luaFunc /\<string\.len\>/
+  syn match   luaFunc /\<string\.lower\>/
+  syn match   luaFunc /\<string\.rep\>/
+  syn match   luaFunc /\<string\.sub\>/
+  syn match   luaFunc /\<string\.upper\>/
   if lua_subversion == 0
-    syn match luaFunc /string\.gfind/
-    syn match luaFunc /table\.getn/
-    syn match luaFunc /table\.setn/
-    syn match luaFunc /table\.foreach/
-    syn match luaFunc /table\.foreachi/
-  elseif lua_subversion == 1
-    syn match luaFunc /string\.gmatch/
-    syn match luaFunc /string\.match/
-    syn match luaFunc /string\.reverse/
-    syn match luaFunc /table\.maxn/
+    syn match luaFunc /\<string\.gfind\>/
+  else
+    syn match luaFunc /\<string\.gmatch\>/
+    syn match luaFunc /\<string\.match\>/
+    syn match luaFunc /\<string\.reverse\>/
   endif
-  syn match   luaFunc /table\.concat/
-  syn match   luaFunc /table\.sort/
-  syn match   luaFunc /table\.insert/
-  syn match   luaFunc /table\.remove/
-  syn match   luaFunc /math\.abs/
-  syn match   luaFunc /math\.acos/
-  syn match   luaFunc /math\.asin/
-  syn match   luaFunc /math\.atan/
-  syn match   luaFunc /math\.atan2/
-  syn match   luaFunc /math\.ceil/
-  syn match   luaFunc /math\.sin/
-  syn match   luaFunc /math\.cos/
-  syn match   luaFunc /math\.tan/
-  syn match   luaFunc /math\.deg/
-  syn match   luaFunc /math\.exp/
-  syn match   luaFunc /math\.floor/
-  syn match   luaFunc /math\.log/
-  syn match   luaFunc /math\.log10/
-  syn match   luaFunc /math\.max/
-  syn match   luaFunc /math\.min/
   if lua_subversion == 0
-    syn match luaFunc /math\.mod/
+    syn match luaFunc /\<table\.getn\>/
+    syn match luaFunc /\<table\.setn\>/
+    syn match luaFunc /\<table\.foreach\>/
+    syn match luaFunc /\<table\.foreachi\>/
   elseif lua_subversion == 1
-    syn match luaFunc /math\.fmod/
-    syn match luaFunc /math\.modf/
-    syn match luaFunc /math\.cosh/
-    syn match luaFunc /math\.sinh/
-    syn match luaFunc /math\.tanh/
+    syn match luaFunc /\<table\.maxn\>/
+  elseif lua_subversion == 2
+    syn match luaFunc /\<table\.pack\>/
+    syn match luaFunc /\<table\.unpack\>/
+  endif
+  syn match   luaFunc /\<table\.concat\>/
+  syn match   luaFunc /\<table\.sort\>/
+  syn match   luaFunc /\<table\.insert\>/
+  syn match   luaFunc /\<table\.remove\>/
+  syn match   luaFunc /\<math\.abs\>/
+  syn match   luaFunc /\<math\.acos\>/
+  syn match   luaFunc /\<math\.asin\>/
+  syn match   luaFunc /\<math\.atan\>/
+  syn match   luaFunc /\<math\.atan2\>/
+  syn match   luaFunc /\<math\.ceil\>/
+  syn match   luaFunc /\<math\.sin\>/
+  syn match   luaFunc /\<math\.cos\>/
+  syn match   luaFunc /\<math\.tan\>/
+  syn match   luaFunc /\<math\.deg\>/
+  syn match   luaFunc /\<math\.exp\>/
+  syn match   luaFunc /\<math\.floor\>/
+  syn match   luaFunc /\<math\.log\>/
+  syn match   luaFunc /\<math\.max\>/
+  syn match   luaFunc /\<math\.min\>/
+  if lua_subversion == 0
+    syn match luaFunc /\<math\.mod\>/
+    syn match luaFunc /\<math\.log10\>/
+  else
+    if lua_subversion == 1
+      syn match luaFunc /\<math\.log10\>/
+    endif
+    syn match luaFunc /\<math\.huge\>/
+    syn match luaFunc /\<math\.fmod\>/
+    syn match luaFunc /\<math\.modf\>/
+    syn match luaFunc /\<math\.cosh\>/
+    syn match luaFunc /\<math\.sinh\>/
+    syn match luaFunc /\<math\.tanh\>/
   endif
-  syn match   luaFunc /math\.pow/
-  syn match   luaFunc /math\.rad/
-  syn match   luaFunc /math\.sqrt/
-  syn match   luaFunc /math\.frexp/
-  syn match   luaFunc /math\.ldexp/
-  syn match   luaFunc /math\.random/
-  syn match   luaFunc /math\.randomseed/
-  syn match   luaFunc /math\.pi/
-  syn match   luaFunc /io\.stdin/
-  syn match   luaFunc /io\.stdout/
-  syn match   luaFunc /io\.stderr/
-  syn match   luaFunc /io\.close/
-  syn match   luaFunc /io\.flush/
-  syn match   luaFunc /io\.input/
-  syn match   luaFunc /io\.lines/
-  syn match   luaFunc /io\.open/
-  syn match   luaFunc /io\.output/
-  syn match   luaFunc /io\.popen/
-  syn match   luaFunc /io\.read/
-  syn match   luaFunc /io\.tmpfile/
-  syn match   luaFunc /io\.type/
-  syn match   luaFunc /io\.write/
-  syn match   luaFunc /os\.clock/
-  syn match   luaFunc /os\.date/
-  syn match   luaFunc /os\.difftime/
-  syn match   luaFunc /os\.execute/
-  syn match   luaFunc /os\.exit/
-  syn match   luaFunc /os\.getenv/
-  syn match   luaFunc /os\.remove/
-  syn match   luaFunc /os\.rename/
-  syn match   luaFunc /os\.setlocale/
-  syn match   luaFunc /os\.time/
-  syn match   luaFunc /os\.tmpname/
-  syn match   luaFunc /debug\.debug/
-  syn match   luaFunc /debug\.gethook/
-  syn match   luaFunc /debug\.getinfo/
-  syn match   luaFunc /debug\.getlocal/
-  syn match   luaFunc /debug\.getupvalue/
-  syn match   luaFunc /debug\.setlocal/
-  syn match   luaFunc /debug\.setupvalue/
-  syn match   luaFunc /debug\.sethook/
-  syn match   luaFunc /debug\.traceback/
+  syn match   luaFunc /\<math\.pow\>/
+  syn match   luaFunc /\<math\.rad\>/
+  syn match   luaFunc /\<math\.sqrt\>/
+  syn match   luaFunc /\<math\.frexp\>/
+  syn match   luaFunc /\<math\.ldexp\>/
+  syn match   luaFunc /\<math\.random\>/
+  syn match   luaFunc /\<math\.randomseed\>/
+  syn match   luaFunc /\<math\.pi\>/
+  syn match   luaFunc /\<io\.close\>/
+  syn match   luaFunc /\<io\.flush\>/
+  syn match   luaFunc /\<io\.input\>/
+  syn match   luaFunc /\<io\.lines\>/
+  syn match   luaFunc /\<io\.open\>/
+  syn match   luaFunc /\<io\.output\>/
+  syn match   luaFunc /\<io\.popen\>/
+  syn match   luaFunc /\<io\.read\>/
+  syn match   luaFunc /\<io\.stderr\>/
+  syn match   luaFunc /\<io\.stdin\>/
+  syn match   luaFunc /\<io\.stdout\>/
+  syn match   luaFunc /\<io\.tmpfile\>/
+  syn match   luaFunc /\<io\.type\>/
+  syn match   luaFunc /\<io\.write\>/
+  syn match   luaFunc /\<os\.clock\>/
+  syn match   luaFunc /\<os\.date\>/
+  syn match   luaFunc /\<os\.difftime\>/
+  syn match   luaFunc /\<os\.execute\>/
+  syn match   luaFunc /\<os\.exit\>/
+  syn match   luaFunc /\<os\.getenv\>/
+  syn match   luaFunc /\<os\.remove\>/
+  syn match   luaFunc /\<os\.rename\>/
+  syn match   luaFunc /\<os\.setlocale\>/
+  syn match   luaFunc /\<os\.time\>/
+  syn match   luaFunc /\<os\.tmpname\>/
+  syn match   luaFunc /\<debug\.debug\>/
+  syn match   luaFunc /\<debug\.gethook\>/
+  syn match   luaFunc /\<debug\.getinfo\>/
+  syn match   luaFunc /\<debug\.getlocal\>/
+  syn match   luaFunc /\<debug\.getupvalue\>/
+  syn match   luaFunc /\<debug\.setlocal\>/
+  syn match   luaFunc /\<debug\.setupvalue\>/
+  syn match   luaFunc /\<debug\.sethook\>/
+  syn match   luaFunc /\<debug\.traceback\>/
   if lua_subversion == 1
-    syn match luaFunc /debug\.getfenv/
-    syn match luaFunc /debug\.getmetatable/
-    syn match luaFunc /debug\.getregistry/
-    syn match luaFunc /debug\.setfenv/
-    syn match luaFunc /debug\.setmetatable/
+    syn match luaFunc /\<debug\.getfenv\>/
+    syn match luaFunc /\<debug\.setfenv\>/
+    syn match luaFunc /\<debug\.getmetatable\>/
+    syn match luaFunc /\<debug\.setmetatable\>/
+    syn match luaFunc /\<debug\.getregistry\>/
+  elseif lua_subversion == 2
+    syn match luaFunc /\<debug\.getmetatable\>/
+    syn match luaFunc /\<debug\.setmetatable\>/
+    syn match luaFunc /\<debug\.getregistry\>/
+    syn match luaFunc /\<debug\.getuservalue\>/
+    syn match luaFunc /\<debug\.setuservalue\>/
+    syn match luaFunc /\<debug\.upvalueid\>/
+    syn match luaFunc /\<debug\.upvaluejoin\>/
   endif
 endif
 
@@ -281,24 +337,31 @@ if version >= 508 || !exists("did_lua_syntax_inits")
 
   HiLink luaStatement          Statement
   HiLink luaRepeat             Repeat
+  HiLink luaFor                        Repeat
   HiLink luaString             String
   HiLink luaString2            String
   HiLink luaNumber             Number
-  HiLink luaFloat              Float
   HiLink luaOperator           Operator
+  HiLink luaIn                 Operator
   HiLink luaConstant           Constant
   HiLink luaCond               Conditional
+  HiLink luaElse               Conditional
   HiLink luaFunction           Function
   HiLink luaComment            Comment
   HiLink luaTodo               Todo
   HiLink luaTable              Structure
   HiLink luaError              Error
+  HiLink luaParenError         Error
+  HiLink luaBraceError         Error
   HiLink luaSpecial            SpecialChar
   HiLink luaFunc               Identifier
+  HiLink luaLabel              Label
 
   delcommand HiLink
 endif
 
 let b:current_syntax = "lua"
 
-" vim: et ts=8
+let &cpo = s:cpo_save
+unlet s:cpo_save
+" vim: et ts=8 sw=2
index 2e37ff6..fa7c26f 100644 (file)
@@ -1,10 +1,9 @@
 " Vim syntax file
 " Language:    Lynx configuration file (lynx.cfg)
 " Maintainer:  Doug Kearns <dougkearns@gmail.com>
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/syntax/lynx.vim
-" Last Change: 2007 Mar 20
+" Last Change: 2013 Jun 20
 
-" Lynx 2.8.5
+" Lynx 2.8.7
 
 if exists("b:current_syntax")
   finish
@@ -13,77 +12,124 @@ endif
 let s:cpo_save = &cpo
 set cpo&vim
 
-syn match   lynxLeadingWS  "^\s*" transparent nextgroup=lynxOption
+syn match lynxStart "^" transparent skipwhite nextgroup=lynxOption
 
-syn match   lynxComment    "\(^\|\s\+\)#.*$" contains=lynxTodo
+syn match lynxComment "\(^\|\s\+\)#.*$" contains=lynxTodo
 
-syn keyword lynxTodo      TODO NOTE FIXME XXX contained
+syn keyword lynxTodo TODO NOTE FIXME XXX contained
 
-syn match   lynxDelimiter  ":" contained nextgroup=lynxBoolean,lynxNumber
+syn match lynxDelimiter ":" skipwhite nextgroup=lynxBoolean,lynxNumber,lynxNone,lynxRCOption
 
 syn case ignore
-syn keyword lynxBoolean    TRUE FALSE contained
+syn keyword lynxBoolean TRUE FALSE ON OFF contained
+syn keyword lynxNone    NONE             contained
 syn case match
 
-syn match   lynxNumber    "-\=\<\d\+\>" contained
+syn match lynxNumber "-\=\<\d\+\>" contained
 
+"{{{ Options
 syn case ignore
-syn keyword lynxOption ACCEPT_ALL_COOKIES ALERTSECS ALWAYS_RESUBMIT_POSTS ALWAYS_TRUSTED_EXEC ASSUME_CHARSET
-                    \ ASSUMED_COLOR ASSUMED_DOC_CHARSET_CHOICE ASSUME_LOCAL_CHARSET ASSUME_UNREC_CHARSET AUTO_UNCACHE_DIRLISTS
-                    \ BIBP_BIBHOST BIBP_GLOBAL_SERVER BLOCK_MULTI_BOOKMARKS BOLD_H1 BOLD_HEADERS
-                    \ BOLD_NAME_ANCHORS CASE_SENSITIVE_ALWAYS_ON CHARACTER_SET CHARSETS_DIRECTORY CHARSET_SWITCH_RULES
-                    \ CHECKMAIL COLLAPSE_BR_TAGS COLOR CONNECT_TIMEOUT COOKIE_ACCEPT_DOMAINS
-                    \ COOKIE_FILE COOKIE_LOOSE_INVALID_DOMAINS COOKIE_QUERY_INVALID_DOMAINS COOKIE_REJECT_DOMAINS COOKIE_SAVE_FILE
-                    \ COOKIE_STRICT_INVALID_DOMAINS CSO_PROXY CSWING_PATH DEBUGSECS DEFAULT_BOOKMARK_FILE
-                    \ DEFAULT_CACHE_SIZE DEFAULT_EDITOR DEFAULT_INDEX_FILE DEFAULT_KEYPAD_MODE DEFAULT_KEYPAD_MODE_IS_NUMBERS_AS_ARROWS
-                    \ DEFAULT_USER_MODE DEFAULT_VIRTUAL_MEMORY_SIZE DIRED_MENU DISPLAY_CHARSET_CHOICE DOWNLOADER
-                    \ EMACS_KEYS_ALWAYS_ON ENABLE_LYNXRC ENABLE_SCROLLBACK EXTERNAL FINGER_PROXY
-                    \ FOCUS_WINDOW FORCE_8BIT_TOUPPER FORCE_COOKIE_PROMPT FORCE_EMPTY_HREFLESS_A FORCE_SSL_COOKIES_SECURE
-                    \ FORCE_SSL_PROMPT FORMS_OPTIONS FTP_PASSIVE FTP_PROXY GLOBAL_EXTENSION_MAP
-                    \ GLOBAL_MAILCAP GOPHER_PROXY GOTOBUFFER HELPFILE HIDDEN_LINK_MARKER
-                    \ HISTORICAL_COMMENTS HTMLSRC_ATTRNAME_XFORM HTMLSRC_TAGNAME_XFORM HTTP_PROXY HTTPS_PROXY
-                    \ INCLUDE INFOSECS JUMPBUFFER JUMPFILE JUMP_PROMPT
-                    \ JUSTIFY JUSTIFY_MAX_VOID_PERCENT KEYBOARD_LAYOUT KEYMAP LEFTARROW_IN_TEXTFIELD_PROMPT
-                    \ LIST_FORMAT LIST_NEWS_DATES LIST_NEWS_NUMBERS LOCAL_DOMAIN LOCALE_CHARSET
-                    \ LOCAL_EXECUTION_LINKS_ALWAYS_ON LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE LOCALHOST_ALIAS LYNXCGI_DOCUMENT_ROOT LYNXCGI_ENVIRONMENT
-                    \ LYNX_HOST_NAME LYNX_SIG_FILE MAIL_ADRS MAIL_SYSTEM_ERROR_LOGGING MAKE_LINKS_FOR_ALL_IMAGES
-                    \ MAKE_PSEUDO_ALTS_FOR_INLINES MESSAGESECS MINIMAL_COMMENTS MULTI_BOOKMARK_SUPPORT NCR_IN_BOOKMARKS
-                    \ NEWS_CHUNK_SIZE NEWS_MAX_CHUNK NEWS_POSTING NEWSPOST_PROXY NEWS_PROXY
-                    \ NEWSREPLY_PROXY NNTP_PROXY NNTPSERVER NO_DOT_FILES NO_FILE_REFERER
-                    \ NO_FORCED_CORE_DUMP NO_FROM_HEADER NO_ISMAP_IF_USEMAP NONRESTARTING_SIGWINCH NO_PROXY
-                    \ NO_REFERER_HEADER NO_TABLE_CENTER NUMBER_FIELDS_ON_LEFT NUMBER_LINKS_ON_LEFT OUTGOING_MAIL_CHARSET
-                    \ PARTIAL PARTIAL_THRES PERSISTENT_COOKIES PERSONAL_EXTENSION_MAP PERSONAL_MAILCAP
-                    \ PREFERRED_CHARSET PREFERRED_LANGUAGE PREPEND_BASE_TO_SOURCE PREPEND_CHARSET_TO_SOURCE PRETTYSRC
-                    \ PRETTYSRC_SPEC PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING PRINTER QUIT_DEFAULT_YES REFERER_WITH_QUERY
-                    \ REPLAYSECS REUSE_TEMPFILES RULE RULESFILE SAVE_SPACE
-                    \ SCAN_FOR_BURIED_NEWS_REFS SCREEN_SIZE SCROLLBAR SCROLLBAR_ARROW SEEK_FRAG_AREA_IN_CUR
-                    \ SEEK_FRAG_MAP_IN_CUR SET_COOKIES SHOW_CURSOR SHOW_KB_NAME SHOW_KB_RATE
-                    \ SNEWSPOST_PROXY SNEWS_PROXY SNEWSREPLY_PROXY SOFT_DQUOTES SOURCE_CACHE
-                    \ SOURCE_CACHE_FOR_ABORTED STARTFILE STRIP_DOTDOT_URLS SUBSTITUTE_UNDERSCORES SUFFIX
-                    \ SUFFIX_ORDER SYSTEM_EDITOR SYSTEM_MAIL SYSTEM_MAIL_FLAGS TAGSOUP
-                    \ TEXTFIELDS_NEED_ACTIVATION TIMEOUT TRIM_INPUT_FIELDS TRUSTED_EXEC TRUSTED_LYNXCGI
-                    \ UNDERLINE_LINKS UPLOADER URL_DOMAIN_PREFIXES URL_DOMAIN_SUFFIXES USE_FIXED_RECORDS
-                    \ USE_MOUSE USE_SELECT_POPUPS VERBOSE_IMAGES VIEWER VI_KEYS_ALWAYS_ON
-                    \ WAIS_PROXY XLOADIMAGE_COMMAND contained nextgroup=lynxDelimiter
-syn keyword lynxOption BZIP2_PATH CHMOD_PATH COMPRESS_PATH COPY_PATH GZIP_PATH
-                    \ INSTALL_PATH MKDIR_PATH MV_PATH RLOGIN_PATH RMDIR_PATH
-                    \ RM_PATH TAR_PATH TELNET_PATH TN3270_PATH TOUCH_PATH
-                    \ UNCOMPRESS_PATH UNZIP_PATH UUDECODE_PATH ZCAT_PATH ZIP_PATH contained nextgroup=lynxDelimiter
+syn keyword lynxOption ACCEPT_ALL_COOKIES ALERTSECS ALWAYS_RESUBMIT_POSTS
+       \ ALWAYS_TRUSTED_EXEC ANONFTP_PASSWORD ASSUMED_COLOR
+       \ ASSUMED_DOC_CHARSET_CHOICE ASSUME_CHARSET ASSUME_LOCAL_CHARSET
+       \ ASSUME_UNREC_CHARSET AUTO_SESSION AUTO_UNCACHE_DIRLISTS BAD_HTML
+       \ BIBP_BIBHOST BIBP_GLOBAL_SERVER BLOCK_MULTI_BOOKMARKS BOLD_H1
+       \ BOLD_HEADERS BOLD_NAME_ANCHORS BOOKMARK_FILE BROKEN_FTP_EPSV
+       \ BROKEN_FTP_RETR BZIP2_PATH CASE_SENSITIVE_ALWAYS_ON
+       \ CASE_SENSITIVE_SEARCHING CHARACTER_SET CHARSETS_DIRECTORY
+       \ CHARSET_SWITCH_RULES CHECKMAIL CHMOD_PATH COLLAPSE_BR_TAGS COLOR
+       \ COLOR_STYLE COMPRESS_PATH CONNECT_TIMEOUT COOKIE_ACCEPT_DOMAINS
+       \ COOKIE_FILE COOKIE_LOOSE_INVALID_DOMAINS
+       \ COOKIE_QUERY_INVALID_DOMAINS COOKIE_REJECT_DOMAINS COOKIE_SAVE_FILE
+       \ COOKIE_STRICT_INVALID_DOMAINS COPY_PATH CSO_PROXY CSWING_PATH
+       \ DEBUGSECS DEFAULT_BOOKMARK_FILE DEFAULT_CACHE_SIZE DEFAULT_COLORS
+       \ DEFAULT_EDITOR DEFAULT_INDEX_FILE DEFAULT_KEYPAD_MODE
+       \ DEFAULT_KEYPAD_MODE_IS_NUMBERS_AS_ARROWS DEFAULT_USER_MODE
+       \ DEFAULT_VIRTUAL_MEMORY_SIZE DELAYSECS DIRED_MENU DIR_LIST_ORDER
+       \ DIR_LIST_STYLE DISPLAY DISPLAY_CHARSET_CHOICE DOWNLOADER EMACS_KEYS
+       \ EMACS_KEYS_ALWAYS_ON ENABLE_LYNXRC ENABLE_SCROLLBACK EXTERNAL
+       \ FILE_EDITOR FILE_SORTING_METHOD FINGER_PROXY FOCUS_WINDOW
+       \ FORCE_8BIT_TOUPPER FORCE_COOKIE_PROMPT FORCE_EMPTY_HREFLESS_A
+       \ FORCE_SSL_COOKIES_SECURE FORCE_SSL_PROMPT FORMS_OPTIONS FTP_FORMAT
+       \ FTP_PASSIVE FTP_PROXY GLOBAL_EXTENSION_MAP GLOBAL_MAILCAP
+       \ GOPHER_PROXY GOTOBUFFER GZIP_PATH HELPFILE HIDDEN_LINK_MARKER
+       \ HISTORICAL_COMMENTS HTMLSRC_ATTRNAME_XFORM HTMLSRC_TAGNAME_XFORM
+       \ HTTPS_PROXY HTTP_PROXY INCLUDE INFLATE_PATH INFOSECS INSTALL_PATH
+       \ JUMPBUFFER JUMPFILE JUMP_PROMPT JUSTIFY JUSTIFY_MAX_VOID_PERCENT
+       \ KBLAYOUT KEYBOARD_LAYOUT KEYMAP KEYPAD_MODE
+       \ LEFTARROW_IN_TEXTFIELD_PROMPT LINEEDIT_MODE LIST_FORMAT
+       \ LIST_NEWS_DATES LIST_NEWS_NUMBERS LOCALE_CHARSET LOCALHOST_ALIAS
+       \ LOCAL_DOMAIN LOCAL_EXECUTION_LINKS_ALWAYS_ON
+       \ LOCAL_EXECUTION_LINKS_ON_BUT_NOT_REMOTE LYNXCGI_DOCUMENT_ROOT
+       \ LYNXCGI_ENVIRONMENT LYNX_HOST_NAME LYNX_SIG_FILE MAIL_ADRS
+       \ MAIL_SYSTEM_ERROR_LOGGING MAKE_LINKS_FOR_ALL_IMAGES
+       \ MAKE_PSEUDO_ALTS_FOR_INLINES MAX_COOKIES_BUFFER MAX_COOKIES_DOMAIN
+       \ MAX_COOKIES_GLOBAL MESSAGESECS MINIMAL_COMMENTS MKDIR_PATH
+       \ MULTI_BOOKMARK MULTI_BOOKMARK_SUPPORT MV_PATH NCR_IN_BOOKMARKS
+       \ NESTED_TABLES NEWSPOST_PROXY NEWSREPLY_PROXY NEWS_CHUNK_SIZE
+       \ NEWS_MAX_CHUNK NEWS_POSTING NEWS_PROXY NNTPSERVER NNTP_PROXY
+       \ NONRESTARTING_SIGWINCH NO_DOT_FILES NO_FILE_REFERER
+       \ NO_FORCED_CORE_DUMP NO_FROM_HEADER NO_ISMAP_IF_USEMAP NO_MARGINS
+       \ NO_PAUSE NO_PROXY NO_REFERER_HEADER NO_TABLE_CENTER NO_TITLE
+       \ NUMBER_FIELDS_ON_LEFT NUMBER_LINKS_ON_LEFT OUTGOING_MAIL_CHARSET
+       \ PARTIAL PARTIAL_THRES PERSISTENT_COOKIES PERSONAL_EXTENSION_MAP
+       \ PERSONAL_MAILCAP PERSONAL_MAIL_ADDRESS POSITIONABLE_EDITOR
+       \ PREFERRED_CHARSET PREFERRED_ENCODING PREFERRED_LANGUAGE
+       \ PREFERRED_MEDIA_TYPES PREPEND_BASE_TO_SOURCE
+       \ PREPEND_CHARSET_TO_SOURCE PRETTYSRC PRETTYSRC_SPEC
+       \ PRETTYSRC_VIEW_NO_ANCHOR_NUMBERING PRINTER QUIT_DEFAULT_YES RAW_MODE
+       \ READ_TIMEOUT REFERER_WITH_QUERY REPLAYSECS REUSE_TEMPFILES
+       \ RLOGIN_PATH RM_PATH RMDIR_PATH RULE RULESFILE
+       \ RUN_ALL_EXECUTION_LINKS RUN_EXECUTION_LINKS_LOCAL SAVE_SPACE
+       \ SCAN_FOR_BURIED_NEWS_REFS SCREEN_SIZE SCROLLBAR SCROLLBAR_ARROW
+       \ SEEK_FRAG_AREA_IN_CUR SEEK_FRAG_MAP_IN_CUR SELECT_POPUPS
+       \ SEND_USERAGENT SESSION_FILE SESSION_LIMIT SET_COOKIES SETFONT_PATH
+       \ SHOW_COLOR SHOW_CURSOR SHOW_DOTFILES SHOW_KB_NAME SHOW_KB_RATE
+       \ SNEWSPOST_PROXY SNEWSREPLY_PROXY SNEWS_PROXY SOFT_DQUOTES
+       \ SOURCE_CACHE SOURCE_CACHE_FOR_ABORTED SSL_CERT_FILE STARTFILE
+       \ STATUS_BUFFER_SIZE STRIP_DOTDOT_URLS SUBSTITUTE_UNDERSCORES
+       \ SUB_BOOKMARKS SUFFIX SUFFIX_ORDER SYSLOG_REQUESTED_URLS SYSLOG_TEXT
+       \ SYSTEM_EDITOR SYSTEM_MAIL SYSTEM_MAIL_FLAGS TAGSOUP TAR_PATH
+       \ TELNET_PATH TEXTFIELDS_NEED_ACTIVATION TIMEOUT TN3270_PATH
+       \ TOUCH_PATH TRIM_INPUT_FIELDS TRUSTED_EXEC TRUSTED_LYNXCGI
+       \ UNCOMPRESS_PATH UNDERLINE_LINKS UNZIP_PATH UPLOADER
+       \ URL_DOMAIN_PREFIXES URL_DOMAIN_SUFFIXES USERAGENT USER_MODE
+       \ USE_FIXED_RECORDS USE_MOUSE USE_SELECT_POPUPS UUDECODE_PATH
+       \ VERBOSE_IMAGES VIEWER VISITED_LINKS VI_KEYS VI_KEYS_ALWAYS_ON
+       \ WAIS_PROXY XHTML_PARSING XLOADIMAGE_COMMAND ZCAT_PATH ZIP_PATH
+       \ contained nextgroup=lynxDelimiter
+syn keyword lynxRCOption accept_all_cookies assume_charset auto_session
+       \ bookmark_file case_sensitive_searching character_set
+       \ cookie_accept_domains cookie_file cookie_loose_invalid_domains
+       \ cookie_query_invalid_domains cookie_reject_domains
+       \ cookie_strict_invalid_domains dir_list_style display emacs_keys
+       \ file_editor file_sorting_method force_cookie_prompt force_ssl_prompt
+       \ ftp_passive kblayout keypad_mode lineedit_mode locale_charset
+       \ make_links_for_all_images make_pseudo_alts_for_inlines
+       \ multi_bookmark no_pause personal_mail_address preferred_charset
+       \ preferred_encoding preferred_language preferred_media_types raw_mode
+       \ run_all_execution_links run_execution_links_on_local_files scrollbar
+       \ select_popups send_useragent session_file set_cookies show_color
+       \ show_cursor show_dotfiles show_kb_rate sub_bookmarks tagsoup
+       \ underline_links user_mode useragent verbose_images vi_keys
+       \ visited_links
+       \ contained nextgroup=lynxDelimiter
 syn case match
+" }}}
 
-" NOTE: set this if you want the cfg2html.pl formatting directives to be highlighted
-if exists("lynx_formatting_directives")
-  syn match lynxFormatDir  "^\.\(h1\|h2\)\s.*$"
-  syn match lynxFormatDir  "^\.\(ex\|nf\)\(\s\+\d\+\)\=$"
-  syn match lynxFormatDir  "^\.fi$"
-endif
+" cfg2html.pl formatting directives
+syn match lynxFormatDir  "^\.h\d\s.*$"
+syn match lynxFormatDir  "^\.\(ex\|nf\)\(\s\+\d\+\)\=$"
+syn match lynxFormatDir  "^\.fi$"
 
 hi def link lynxBoolean                Boolean
 hi def link lynxComment                Comment
 hi def link lynxDelimiter      Special
 hi def link lynxFormatDir      Special
+hi def link lynxNone           Constant
 hi def link lynxNumber         Number
 hi def link lynxOption         Identifier
+hi def link lynxRCOption       lynxOption
 hi def link lynxTodo           Todo
 
 let b:current_syntax = "lynx"
@@ -91,4 +137,4 @@ let b:current_syntax = "lynx"
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
-" vim: ts=8
+" vim: ts=8 fdm=marker:
index c89d2de..823c6b4 100644 (file)
@@ -1,14 +1,17 @@
 " Vim syntax file
 " Language:            Mail file
 " Previous Maintainer: Felix von Leitner <leitner@math.fu-berlin.de>
-" Maintainer:          Gautam Iyer <gi1242@users.sourceforge.net>
-" Last Change:         Thu 06 Nov 2008 10:10:55 PM PST
+" Maintainer:          GI <a@b.c>, where a='gi1242+vim', b='gmail', c='com'
+" Last Change:         Thu 02 Feb 2012 08:47:04 PM EST
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " The mail header is recognized starting with a "keyword:" line and ending
 " with an empty line or other line that can't be in the header. All lines of
 " the header are highlighted. Headers of quoted messages (quoted with >) are
@@ -89,7 +92,7 @@ hi def link mailSignature     PreProc
 hi def link mailHeaderEmail    mailEmail
 hi def link mailEmail          Special
 hi def link mailURL            String
-hi def link mailSubject                LineNR
+hi def link mailSubject                Title
 hi def link mailQuoted1                Comment
 hi def link mailQuoted3                mailQuoted1
 hi def link mailQuoted5                mailQuoted1
@@ -104,3 +107,6 @@ hi def link mailQuoteExp5   mailQuoted5
 hi def link mailQuoteExp6      mailQuoted6
 
 let b:current_syntax = "mail"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 547db73..bd23040 100644 (file)
@@ -1,54 +1,35 @@
 " Vim syntax file
 " Language:    Mailcap configuration file
-" Maintainer:  Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" Last Change: 2004 Nov 27
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/syntax/mailcap.vim
-
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2013 Jun 01
+
+if exists("b:current_syntax")
   finish
 endif
 
-syn match  mailcapComment      "^#.*"
+syn match  mailcapComment "^#.*"
 
-syn region mailcapString       start=+"+ end=+"+ contains=mailcapSpecial oneline
+syn region mailcapString start=+"+ end=+"+ contains=mailcapSpecial oneline
 
-syn match  mailcapDelimiter    "\\\@<!;"
+syn match  mailcapDelimiter "\\\@<!;"
 
-syn match  mailcapSpecial      "\\\@<!%[nstF]"
-syn match  mailcapSpecial      "\\\@<!%{[^}]*}"
+syn match  mailcapSpecial "\\\@<!%[nstF]"
+syn match  mailcapSpecial "\\\@<!%{[^}]*}"
 
 syn case ignore
-syn match  mailcapFlag         "\(=\s*\)\@<!\<\(needsterminal\|copiousoutput\|x-\w\+\)\>"
-syn match  mailcapFieldname    "\<\(compose\|composetyped\|print\|edit\|test\|x11-bitmap\|nametemplate\|textualnewlines\|description\|x-\w+\)\>\ze\s*="
-syn match  mailcapTypeField    "^\(text\|image\|audio\|video\|application\|message\|multipart\|model\|x-[[:graph:]]\+\)\(/\(\*\|[[:graph:]]\+\)\)\=\ze\s*;"
+syn match  mailcapFlag     "\(=\s*\)\@<!\<\(needsterminal\|copiousoutput\|x-\w\+\)\>"
+syn match  mailcapFieldname "\<\(compose\|composetyped\|print\|edit\|test\|x11-bitmap\|nametemplate\|textualnewlines\|description\|x-\w+\)\>\ze\s*="
+syn match  mailcapTypeField "^\(text\|image\|audio\|video\|application\|message\|multipart\|model\|x-[[:graph:]]\+\)\(/\(\*\|[[:graph:]]\+\)\)\=\ze\s*;"
 syn case match
 
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_mailcap_syntax_inits")
-  if version < 508
-    let did_mailcap_syntax_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
-
-  HiLink mailcapComment                Comment
-  HiLink mailcapDelimiter      Delimiter
-  HiLink mailcapFlag           Statement
-  HiLink mailcapFieldname      Statement
-  HiLink mailcapSpecial                Identifier
-  HiLink mailcapTypeField      Type
-  HiLink mailcapString         String
-
-  delcommand HiLink
-endif
+hi def link mailcapComment     Comment
+hi def link mailcapDelimiter   Delimiter
+hi def link mailcapFlag                Statement
+hi def link mailcapFieldname   Statement
+hi def link mailcapSpecial     Identifier
+hi def link mailcapTypeField   Type
+hi def link mailcapString      String
 
 let b:current_syntax = "mailcap"
 
-" vim: tabstop=8
+" vim: ts=8
index e9d7ee9..6fd46aa 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    Makefile
 " Maintainer:  Claudio Fleiner <claudio@fleiner.com>
 " URL:         http://www.fleiner.com/vim/syntax/make.vim
-" Last Change: 2008 Aug 04
+" Last Change: 2012 Oct 05
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,10 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
+
 " some special characters
 syn match makeSpecial  "^\s*[@+-]\+"
 syn match makeNextLine "\\\n\s*"
@@ -25,8 +29,8 @@ syn match makeOverride        "^ *override"
 hi link makeOverride makeStatement
 hi link makeExport makeStatement
 
-" Koehler: catch unmatched define/endef keywords.  endef only matches it is by itself on a line
-syn region makeDefine start="^\s*define\s" end="^\s*endef\s*$" contains=makeStatement,makeIdent,makePreCondit,makeDefine
+" catch unmatched define/endef keywords.  endef only matches it is by itself on a line, possibly followed by a commend
+syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$" contains=makeStatement,makeIdent,makePreCondit,makeDefine
 
 " Microsoft Makefile specials
 syn case ignore
@@ -48,8 +52,8 @@ syn match makeConfig "@[A-Za-z0-9_]\+@"
 
 " make targets
 " syn match makeSpecTarget     "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>"
-syn match makeImplicit         "^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource
 syn match makeImplicit         "^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1 nextgroup=makeSource
+syn match makeImplicit         "^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource
 
 syn region makeTarget  transparent matchgroup=makeTarget start="^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"rs=e-1 end=";"re=e-1,me=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine skipnl nextGroup=makeCommands
 syn match makeTarget           "^[A-Za-z0-9_./$()%*@-][A-Za-z0-9_./\t $()%*@-]*::\=\s*$" contains=makeIdent,makeSpecTarget skipnl nextgroup=makeCommands,makeCommandError
@@ -134,4 +138,6 @@ endif
 
 let b:current_syntax = "make"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff --git a/runtime/syntax/mallard.vim b/runtime/syntax/mallard.vim
new file mode 100644 (file)
index 0000000..b2a77b0
--- /dev/null
@@ -0,0 +1,37 @@
+" Vim syntax file
+" Language:    Mallard
+" Maintainer:  Jaromir Hradilek <jhradilek@gmail.com>
+" URL:         https://github.com/jhradilek/vim-syntax
+" Last Change: 11 February 2013
+" Description: A syntax file for the Mallard markup language according to
+"              Mallard 1.0 DRAFT as of 2013-02-11.
+
+if exists("b:current_syntax")
+  finish
+endif
+
+do Syntax xml
+syn cluster xmlTagHook add=mallardTagName
+syn spell toplevel
+syn case match
+
+syn keyword mallardTagName app cite cmd code col colgroup comment contained
+syn keyword mallardTagName credit desc em email example figure contained
+syn keyword mallardTagName file gui guiseq info input item key contained
+syn keyword mallardTagName keyseq license link links list listing contained
+syn keyword mallardTagName media name note output p page quote contained
+syn keyword mallardTagName revision screen section span steps contained
+syn keyword mallardTagName subtitle synopsis sys table tbody td contained
+syn keyword mallardTagName terms tfoot thead title tr tree var contained
+syn keyword mallardTagName years contained
+
+syn region mallardComment start="<comment\>" end="</comment>"me=e-10 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend
+syn region mallardEmphasis start="<em\>" end="</em>"me=e-5 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend
+syn region mallardTitle start="<title\>" end="</title>"me=e-8 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend
+
+hi def link mallardComment  Comment
+hi def link mallardTagName  Statement
+hi def link mallardTitle    Title
+hi def mallardEmphasis term=italic cterm=italic gui=italic
+
+let b:current_syntax = "mallard"
index 4ec5dd5..068115e 100644 (file)
@@ -2,50 +2,66 @@
 " Language:     Markdown
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:    *.markdown
-" Last Change: 2010 May 21
+" Last Change:  2013 May 30
 
 if exists("b:current_syntax")
   finish
 endif
 
+if !exists('main_syntax')
+  let main_syntax = 'markdown'
+endif
+
 runtime! syntax/html.vim
 unlet! b:current_syntax
 
+if !exists('g:markdown_fenced_languages')
+  let g:markdown_fenced_languages = []
+endif
+for s:type in map(copy(g:markdown_fenced_languages),'matchstr(v:val,"[^=]*$")')
+  if s:type =~ '\.'
+    let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*')
+  endif
+  exe 'syn include @markdownHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim'
+  unlet! b:current_syntax
+endfor
+unlet! s:type
+
 syn sync minlines=10
 syn case ignore
 
-syn match markdownValid '[<>]\S\@!'
+syn match markdownValid '[<>]\c[a-z/$!]\@!'
 syn match markdownValid '&\%(#\=\w*;\)\@!'
 
-syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock
+syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock,htmlSpecialChar
 
 syn cluster markdownBlock contains=markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6,markdownBlockquote,markdownListMarker,markdownOrderedListMarker,markdownCodeBlock,markdownRule
-syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop
+syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError
 
-syn match markdownH1 ".\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule
-syn match markdownH2 ".\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule
+syn match markdownH1 "^.\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
+syn match markdownH2 "^.\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
 
 syn match markdownHeadingRule "^[=-]\+$" contained
 
-syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!"      end="#*\s*$" keepend oneline contains=@markdownInline contained
-syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!"     end="#*\s*$" keepend oneline contains=@markdownInline contained
-syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!"    end="#*\s*$" keepend oneline contains=@markdownInline contained
-syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!"   end="#*\s*$" keepend oneline contains=@markdownInline contained
-syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!"  end="#*\s*$" keepend oneline contains=@markdownInline contained
-syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline contained
+syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!"      end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!"     end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!"    end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!"   end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!"  end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
 
-syn match markdownBlockquote ">\s" contained nextgroup=@markdownBlock
+syn match markdownBlockquote ">\%(\s\|$\)" contained nextgroup=@markdownBlock
 
 syn region markdownCodeBlock start="    \|\t" end="$" contained
 
 " TODO: real nesting
-syn match markdownListMarker " \{0,4\}[-*+]\%(\s\+\S\)\@=" contained
-syn match markdownOrderedListMarker " \{0,4}\<\d\+\.\%(\s*\S\)\@=" contained
+syn match markdownListMarker "\%(\t\| \{0,4\}\)[-*+]\%(\s\+\S\)\@=" contained
+syn match markdownOrderedListMarker "\%(\t\| \{0,4}\)\<\d\+\.\%(\s\+\S\)\@=" contained
 
 syn match markdownRule "\* *\* *\*[ *]*$" contained
 syn match markdownRule "- *- *-[ -]*$" contained
 
-syn match markdownLineBreak "\s\{2,\}$"
+syn match markdownLineBreak " \{2,\}$"
 
 syn region markdownIdDeclaration matchgroup=markdownLinkDelimiter start="^ \{0,3\}!\=\[" end="\]:" oneline keepend nextgroup=markdownUrl skipwhite
 syn match markdownUrl "\S\+" nextgroup=markdownUrlTitle skipwhite contained
@@ -61,14 +77,23 @@ syn region markdownAutomaticLink matchgroup=markdownUrlDelimiter start="<\%(\w\+
 
 syn region markdownItalic start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" keepend contains=markdownLineStart
 syn region markdownItalic start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart
-syn region markdownBold start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart
-syn region markdownBold start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart
+syn region markdownBold start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart,markdownItalic
+syn region markdownBold start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart,markdownItalic
 syn region markdownBoldItalic start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" keepend contains=markdownLineStart
 syn region markdownBoldItalic start="\S\@<=___\|___\S\@=" end="\S\@<=___\|___\S\@=" keepend contains=markdownLineStart
-syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" transparent keepend contains=markdownLineStart
+syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" keepend contains=markdownLineStart
 syn region markdownCode matchgroup=markdownCodeDelimiter start="`` \=" end=" \=``" keepend contains=markdownLineStart
+syn region markdownCode matchgroup=markdownCodeDelimiter start="^\s*```.*$" end="^\s*```\ze\s*$" keepend
+
+if main_syntax ==# 'markdown'
+  for s:type in g:markdown_fenced_languages
+    exe 'syn region markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*```'.matchstr(s:type,'[^=]*').'\>.*$" end="^\s*```\ze\s*$" keepend contains=@markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g')
+  endfor
+  unlet! s:type
+endif
 
 syn match markdownEscape "\\[][\\`*_{}()#+.!-]"
+syn match markdownError "\w\@<=_\w\@="
 
 hi def link markdownH1                    htmlH1
 hi def link markdownH2                    htmlH2
@@ -99,7 +124,11 @@ hi def link markdownBoldItalic            htmlBoldItalic
 hi def link markdownCodeDelimiter         Delimiter
 
 hi def link markdownEscape                Special
+hi def link markdownError                 Error
 
 let b:current_syntax = "markdown"
+if main_syntax ==# 'markdown'
+  unlet main_syntax
+endif
 
 " vim:set sw=2:
index 4ffd22b..1711601 100644 (file)
@@ -2,8 +2,8 @@
 " Language:    Microsoft Macro Assembler (80x86)
 " Orig Author: Rob Brady <robb@datatone.com>
 " Maintainer:  Wu Yongwei <wuyongwei@gmail.com>
-" Last Change: $Date: 2007/04/21 13:20:15 $
-" $Revision: 1.44 $
+" Last Change: $Date: 2012/02/04 12:45:39 $
+" $Revision: 1.46 $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -13,6 +13,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 
@@ -184,6 +187,12 @@ syn keyword masmRegister   DR0 DR1 DR2 DR3 DR6 DR7
 syn keyword masmRegister       TR3 TR4 TR5 TR6 TR7
 syn match   masmRegister       "ST([0-7])"
 
+" x86-64 registers
+syn keyword masmRegister       RAX RBX RCX RDX RSI RDI RBP RSP
+syn keyword masmRegister       R8 R9 R10 R11 R12 R13 R14 R15
+syn keyword masmRegister       R8D R9D R10D R11D R12D R13D R14D R15D
+syn keyword masmRegister       R8W R9W R10W R11W R12W R13W R14W R15W
+syn keyword masmRegister       R8B R9B R10B R11B R12B R13B R14B R15B
 
 " Instruction prefixes
 syn keyword masmOpcode         LOCK REP REPE REPNE REPNZ REPZ
@@ -340,4 +349,7 @@ endif
 
 let b:current_syntax = "masm"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
index 7d20368..3828f3e 100644 (file)
@@ -4,6 +4,8 @@
 " Credits:     Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
 "              Original author: Mario Eusebio
 " Last Change: Wed Jan 13 11:12:34 CET 2010
+"              sinh added to matlab implicit commands
+" Change History:
 "              - 'global' and 'persistent' keyword are now recognized
 
 " For version 5.x: Clear all syntax items
@@ -68,7 +70,7 @@ syn keyword matlabOperator            ceil floor size clear zeros eye mean std cov
 syn keyword matlabFunction             error eval function
 
 syn keyword matlabImplicit             abs acos atan asin cos cosh exp log prod sum
-syn keyword matlabImplicit             log10 max min sign sin sqrt tan reshape
+syn keyword matlabImplicit             log10 max min sign sin sinh sqrt tan reshape
 
 syn match matlabError  "-\=\<\d\+\.\d\+\.[^*/\\^]"
 syn match matlabError  "-\=\<\d\+\.\d\+[eEdD][-+]\=\d\+\.\([^*/\\^]\)"
index f48dcce..c63beb1 100644 (file)
@@ -1,12 +1,12 @@
 " Vim syntax file
 " Language:     Mathematica
 " Maintainer:   steve layland <layland@wolfram.com>
-" Last Change:  Thu May 19 21:36:04 CDT 2005
+" Last Change:  2012 Feb 03 by Thilo Six
 " Source:       http://members.wri.com/layland/vim/syntax/mma.vim
 "               http://vim.sourceforge.net/scripts/script.php?script_id=1273
 " Id:           $Id: mma.vim,v 1.4 2006/04/14 20:40:38 vimboss Exp $
 " NOTE:
-" 
+"
 " Empty .m files will automatically be presumed as Matlab files
 " unless you have the following in your .vimrc:
 "
@@ -14,7 +14,7 @@
 "
 " I also recommend setting the default 'Comment' hilighting to something
 " other than the color used for 'Function', since both are plentiful in
-" most mathematica files, and they are often the same color (when using 
+" most mathematica files, and they are often the same color (when using
 " background=dark).
 "
 " Credits:
 "    from the Java vim syntax file by Claudio Fleiner.  Thanks!
 " o  Everything else written by steve <layland@wolfram.com>
 "
-" Bugs: 
-" o  Vim 6.1 didn't really have support for character classes 
+" Bugs:
+" o  Vim 6.1 didn't really have support for character classes
 "    of other named character classes.  For example, [\a\d]
 "    didn't work.  Therefore, a lot of this code uses explicit
-"    character classes instead: [0-9a-zA-Z] 
+"    character classes instead: [0-9a-zA-Z]
 "
 " TODO:
 "   folding
@@ -41,6 +41,9 @@ elseif exists("b:current_syntax")
     finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Group Definitions:
 syntax cluster mmaNotes contains=mmaTodo,mmaFixme
 syntax cluster mmaComments contains=mmaComment,mmaFunctionComment,mmaItem,mmaFunctionTitle,mmaCommentStar
@@ -58,7 +61,7 @@ syntax cluster mmaTop contains=mmaOperator,mmaGenericFunction,mmaPureFunction,mm
 syntax keyword mmaVariable True False None Automatic All Null C General
 
 " mathematical constants:
-syntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher 
+syntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher
 
 " stream data / atomic heads:
 syntax keyword mmaVariable Byte Character Expression Number Real String Word EndOfFile Integer Symbol
@@ -80,7 +83,7 @@ syntax keyword mmaVariable Above Below Left Right
 syntax keyword mmaVariable Black Blue Brown Cyan Gray Green Magenta Orange Pink Purple Red White Yellow
 
 " function attributes
-syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub 
+syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub
 
 " Comment Sections:
 "   this:
@@ -135,25 +138,25 @@ syntax region mmaCommentString oneline start=+\\\@<!"+ skip=+\\\@<!\\\%(\\\\\)*"
 
 " Patterns:
 "   Each pattern marker below can be Blank[] (_), BlankSequence[] (__)
-"   or BlankNullSequence[] (___).  Most examples below can also be 
+"   or BlankNullSequence[] (___).  Most examples below can also be
 "   combined, for example Pattern tests with Default values.
-"   
+"
 "   _Head                   Anonymous patterns
-"   name_Head 
+"   name_Head
 "   name:(_Head|_Head2)     Named patterns
-"    
+"
 "   _Head : val
 "   name:_Head:val          Default values
 "
-"   _Head?testQ, 
+"   _Head?testQ,
 "   _Head?(test[#]&)        Pattern tests
 "
 "   name_Head/;test[name]   Conditionals
-"   
+"
 "   _Head:.                 Predefined Default
 "
 "   .. ...                  Pattern Repeat
-   
+
 syntax match mmaPatternError "\%(_\{4,}\|)\s*&\s*)\@!\)" contained
 
 "pattern name:
@@ -172,7 +175,7 @@ syntax match mmaPattern "[A-Za-z0-9`]*_\+\%(\a\+\)\=\%(?([^)]\+)\|?[^\]},]\+\)\=
 "   >= <= < >
 "   += -= *=
 "   /= ++ --    Math
-"   ^* 
+"   ^*
 "   -> :>       Rules
 "   @@ @@@      Apply
 "   /@ //@      Map
@@ -200,7 +203,7 @@ syntax match mmaPureFunction "#\%(#\|\d\+\)\="
 syntax match mmaPureFunction "&"
 
 " Named Functions:
-" Since everything is pretty much a function, get this straight 
+" Since everything is pretty much a function, get this straight
 " from context
 syntax match mmaGenericFunction "[A-Za-z0-9`]\+\s*\%([@[]\|/:\|/\=/@\)\@=" contains=mmaOperator
 syntax match mmaGenericFunction "\~\s*[^~]\+\s*\~"hs=s+1,he=e-1 contains=mmaOperator,mmaBoring
@@ -223,7 +226,7 @@ syntax match mmaError "\*)" containedin=ALLBUT,@mmaComments,@mmaStrings
 syntax match mmaError "\%([/]{3,}\|[&:|+*?~-]\{3,}\|[.=]\{4,}\|_\@<=\.\{2,}\|`\{2,}\)" containedin=ALLBUT,@mmaComments,@mmaStrings
 
 " Punctuation:
-" things that shouldn't really be highlighted, or highlighted 
+" things that shouldn't really be highlighted, or highlighted
 " in they're own group if you _really_ want. :)
 "  ( ) { }
 " TODO - use Delimiter group?
@@ -251,9 +254,9 @@ set commentstring='(*%s*)'
 
 "function MmaFoldText()
 "    let line = getline(v:foldstart)
-"    
+"
 "    let lines = v:foldend-v:foldstart+1
-"    
+"
 "    let sub = substitute(line, '(\*\+|\*\+)|[-*_]\+', '', 'g')
 "
 "    if match(line, '(\*') != -1
@@ -264,7 +267,7 @@ set commentstring='(*%s*)'
 "
 "    return v:folddashes.' '.lines.' '.sub
 "endf
-    
+
 "this is slow for computing folds, but it does so accurately
 syntax sync fromstart
 
@@ -288,8 +291,8 @@ if version >= 508 || !exists("did_mma_syn_inits")
                command -nargs=+ HiLink hi def link <args>
        endif
 
-    " NOTE - the following links are not guaranteed to 
-    " look good under all colorschemes.  You might need to 
+    " NOTE - the following links are not guaranteed to
+    " look good under all colorschemes.  You might need to
     " :so $VIMRUNTIME/syntax/hitest.vim and tweak these to
     " look good in yours
 
@@ -323,3 +326,6 @@ if version >= 508 || !exists("did_mma_syn_inits")
 endif
 
 let b:current_syntax = "mma"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 5b6a443..79ca781 100644 (file)
@@ -1,12 +1,13 @@
 " Vim syntax file
 " Language:    MMIX
 " Maintainer:  Dirk Hüsken, <huesken@informatik.uni-tuebingen.de>
-" Last Change: Wed Apr 24 01:18:52 CEST 2002
+" Last Change: 2012 Jun 01
+"              (Dominique Pelle added @Spell)
 " Filenames:   *.mms
 " URL: http://homepages.uni-tuebingen.de/student/dirk.huesken/vim/syntax/mmix.vim
 
 " Limitations: Comments must start with either % or //
-"              (preferrably %, Knuth-Style)
+"              (preferably %, Knuth-Style)
 
 if version < 600
   syntax clear
@@ -23,7 +24,7 @@ syn keyword mmixType  byte wyde tetra octa
 syn match decNumber            "[0-9]*"
 syn match octNumber            "0[0-7][0-7]\+"
 syn match hexNumber            "#[0-9a-fA-F]\+"
-syn region mmixString          start=+"+ skip=+\\"+ end=+"+
+syn region mmixString          start=+"+ skip=+\\"+ end=+"+ contains=@Spell
 syn match mmixChar             "'.'"
 
 " ...and more special MMIX stuff
@@ -40,9 +41,9 @@ syn match mmixLabel           "[0-9][HBF]"
 syn keyword mmixPseudo         is loc greg
 
 " comments
-syn match mmixComment          "%.*"
-syn match mmixComment          "//.*"
-syn match mmixComment          "^\*.*"
+syn match mmixComment          "%.*" contains=@Spell
+syn match mmixComment          "//.*" contains=@Spell
+syn match mmixComment          "^\*.*" contains=@Spell
 
 
 syn keyword mmixOpcode trap fcmp fun feql fadd fix fsub fixu
index 560b79c..afe2b56 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language: Monk (See-Beyond Technologies)
 " Maintainer: Mike Litherland <litherm@ccf.org>
-" Last Change: March 6, 2002
+" Last Change: 2012 Feb 03 by Thilo Six
 
 " This syntax file is good enough for my needs, but others
 " may desire more features.  Suggestions and bug reports
@@ -29,6 +29,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 " Fascist highlighting: everything that doesn't fit the rules is an error...
@@ -226,3 +229,6 @@ if version >= 508 || !exists("did_monk_syntax_inits")
 endif
 
 let b:current_syntax = "monk"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 878021e..2ef434d 100644 (file)
@@ -1,13 +1,16 @@
-" Created      : Wed 26 Apr 2006 01:20:53 AM CDT
-" Modified     : Mon 27 Aug 2007 12:10:37 PM PDT
-" Author       : Gautam Iyer <gi1242@users.sourceforge.net>
 " Description  : Vim syntax file for mrxvtrc (for mrxvt-0.5.0 and up)
+" Created      : Wed 26 Apr 2006 01:20:53 AM CDT
+" Modified     : Thu 02 Feb 2012 08:37:45 PM EST
+" Maintainer   : GI <a@b.c>, where a='gi1242+vim', b='gmail', c='com'
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case match
 
 " Errors
@@ -274,3 +277,6 @@ hi def link mrxvtrcCmd              PreProc
 hi def link mrxvtrcSubwin      mrxvtrcStrVal
 
 let b:current_syntax = "mrxvtrc"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index cf270ee..79585be 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:     MS IDL (Microsoft dialect of Interface Description Language)
 " Maintainer:   Vadim Zeitlin <vadim@wxwindows.org>
-" Last Change:  2003 May 11
+" Last Change:  2012 Feb 12 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Misc basic
 syn match   msidlId            "[a-zA-Z][a-zA-Z0-9_]*"
 syn match   msidlUUID          "{\?[[:xdigit:]]\{8}-\([[:xdigit:]]\{4}-\)\{3}[[:xdigit:]]\{12}}\?"
@@ -89,4 +92,6 @@ endif
 
 let b:current_syntax = "msidl"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vi: set ts=8 sw=4:
index 0037f8f..abe9bfd 100644 (file)
@@ -2,9 +2,9 @@
 " Language:    Mutt setup files
 " Original:    Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
 " Maintainer:  Kyle Wheeler <kyle-muttrc.vim@memoryhole.net>
-" Last Change: 9 Aug 2010
+" Last Change: 2 Feb 2012
 
-" This file covers mutt version 1.5.20 (and most of the mercurial tip)
+" This file covers mutt version 1.5.21 (and most of the mercurial tip)
 " Included are also a few features from 1.4.2.1
 
 " For version 5.x: Clear all syntax items
@@ -15,6 +15,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Set the keyword characters
 if version < 600
   set isk=@,48-57,_,-
@@ -22,6 +25,11 @@ else
   setlocal isk=@,48-57,_,-
 endif
 
+" handling optional variables
+if !exists("use_mutt_sidebar")
+  let use_mutt_sidebar=0
+endif
+
 syn match muttrcComment                "^# .*$" contains=@Spell
 syn match muttrcComment                "^#[^ ].*$"
 syn match muttrcComment                "^#$"
@@ -98,7 +106,7 @@ syn region  muttrcKey                contained start=+"+ skip=+\\\\\|\\"+ end=+"+    contains=mut
 syn region  muttrcKey          contained start=+'+ skip=+\\\\\|\\'+ end=+'+    contains=muttrcKeySpecial,muttrcKeyName
 syn match   muttrcKeyName      contained "\<f\%(\d\|10\)\>"
 syn match   muttrcKeyName      contained "\\[trne]"
-syn match   muttrcKeyName      contained "\c<\%(BackSpace\|Delete\|Down\|End\|Enter\|Esc\|Home\|Insert\|Left\|PageDown\|PageUp\|Return\|Right\|Space\|Tab\|Up\)>"
+syn match   muttrcKeyName      contained "\c<\%(BackSpace\|BackTab\|Delete\|Down\|End\|Enter\|Esc\|Home\|Insert\|Left\|PageDown\|PageUp\|Return\|Right\|Space\|Tab\|Up\)>"
 syn match   muttrcKeyName      contained "<F[0-9]\+>"
 
 syn keyword muttrcVarBool      skipwhite contained allow_8bit allow_ansi arrow_cursor ascii_chars askbcc askcc attach_split auto_tag autoedit beep beep_new nextgroup=muttrcSetBoolAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
@@ -207,6 +215,9 @@ syn keyword muttrcVarBool   skipwhite contained invstrict_threads invsuspend invte
 syn keyword muttrcVarBool      skipwhite contained invthread_received invtilde invuncollapse_jump invuse_8bitmime nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarBool      skipwhite contained invuse_domain invuse_envelope_from invuse_from invuse_idn invuse_ipv6 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarBool      skipwhite contained invuser_agent invwait_key invweed invwrap_search invwrite_bcc nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+if use_mutt_sidebar == 1
+    syn keyword muttrcVarBool skipwhite contained sidebar_visible sidebar_sort nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+endif
 
 syn keyword muttrcVarQuad      skipwhite contained abort_nosubject abort_unmodified bounce copy nextgroup=muttrcSetQuadAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarQuad      skipwhite contained crypt_verify_sig delete fcc_attach forward_edit honor_followup_to nextgroup=muttrcSetQuadAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
@@ -232,6 +243,9 @@ syn keyword muttrcVarNum    skipwhite contained pop_checkinterval read_inc save_his
 syn keyword muttrcVarNum       skipwhite contained score_threshold_flag score_threshold_read search_context sendmail_wait sleep_time nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarNum       skipwhite contained smime_timeout ssl_min_dh_prime_bits timeout time_inc wrap wrapmargin nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarNum       skipwhite contained write_inc nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+if use_mutt_sidebar == 1
+    syn keyword muttrcVarNum skipwhite contained sidebar_width nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+endif
 
 syn match muttrcFormatErrors contained /%./
 
@@ -372,6 +386,9 @@ syn keyword muttrcVarStr    contained skipwhite smime_keys smime_sign_as nextgroup=
 syn keyword muttrcVarStr       contained skipwhite smtp_url smtp_authenticators smtp_pass sort sort_alias sort_aux nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarStr       contained skipwhite sort_browser spam_separator spoolfile ssl_ca_certificates_file ssl_client_cert nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarStr       contained skipwhite status_chars tmpdir to_chars tunnel visual nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+if use_mutt_sidebar == 1
+    syn keyword muttrcVarStr skipwhite contained sidebar_delim nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+endif
 
 " Present in 1.4.2.1 (pgp_create_traditional was a bool then)
 syn keyword muttrcVarBool      contained skipwhite imap_force_ssl noimap_force_ssl invimap_force_ssl nextgroup=muttrcSetBoolAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
@@ -417,7 +434,10 @@ syn keyword muttrcSubscribeKeyword unsubscribe nextgroup=muttrcAsterisk,muttrcCo
 syn keyword muttrcAlternateKeyword contained alternates unalternates
 syn region muttrcAlternatesLine keepend start=+^\s*\%(un\)\?alternates\s+ skip=+\\$+ end=+$+ contains=muttrcAlternateKeyword,muttrcGroupDef,muttrcRXPat,muttrcUnHighlightSpace,muttrcComment
 
-syn match muttrcVariable       contained "\\\@<!\$[a-zA-Z_-]\+"
+" muttrcVariable includes a prefix because partial strings are considered
+" valid.
+syn match muttrcVariable       contained "\\\@<![a-zA-Z_-]*\$[a-zA-Z_-]\+" contains=muttrcVariableInner
+syn match muttrcVariableInner  contained "\$[a-zA-Z_-]\+"
 syn match muttrcEscapedVariable        contained "\\\$[a-zA-Z_-]\+"
 
 syn match muttrcBadAction      contained "[^<>]\+" contains=muttrcEmail
@@ -450,6 +470,9 @@ syn match muttrcFunction    contained "\<undelete-\%(pattern\|subthread\)\>"
 syn match muttrcFunction       contained "\<collapse-\%(parts\|thread\|all\)\>"
 syn match muttrcFunction       contained "\<view-\%(attach\|attachments\|file\|mailcap\|name\|text\)\>"
 syn match muttrcFunction       contained "\<\%(backspace\|backward-char\|bol\|bottom\|bottom-page\|buffy-cycle\|clear-flag\|complete\%(-query\)\?\|copy-file\|create-alias\|detach-file\|eol\|exit\|extract-keys\|\%(imap-\)\?fetch-mail\|forget-passphrase\|forward-char\|group-reply\|help\|ispell\|jump\|limit\|list-reply\|mail\|mail-key\|mark-as-new\|middle-page\|new-mime\|noop\|pgp-menu\|query\|query-append\|quit\|quote-char\|read-subthread\|redraw-screen\|refresh\|rename-file\|reply\|select-new\|set-flag\|shell-escape\|skip-quoted\|sort\|subscribe\|sync-mailbox\|top\|top-page\|transpose-chars\|unsubscribe\|untag-pattern\|verify-key\|what-key\|write-fcc\)\>"
+if use_mutt_sidebar == 1
+    syn match muttrcFunction    contained "\<sidebar-\%(prev\|next\|open\|scroll-up\|scroll-down\)"
+endif
 syn match muttrcAction         contained "<[^>]\{-}>" contains=muttrcBadAction,muttrcFunction,muttrcKeyName
 
 syn keyword muttrcCommand      set     skipwhite nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
@@ -523,7 +546,7 @@ syn match muttrcSimplePat contained "!\?\^\?[~][mnXz]\s*\%([<>-][0-9]\+[kM]\?\|[
 syn match muttrcSimplePat contained "!\?\^\?[~][dr]\s*\%(\%(-\?[0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)\|\%(\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)-\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)\?\)\?\)\|\%([<>=][0-9]\+[ymwd]\)\|\%(`[^`]\+`\)\|\%(\$[a-zA-Z0-9_-]\+\)\)" contains=muttrcShellString,muttrcVariable
 syn match muttrcSimplePat contained "!\?\^\?[~][bBcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatRXContainer
 syn match muttrcSimplePat contained "!\?\^\?[%][bBcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString
-syn match muttrcSimplePat contained "!\?\^\?[=][bh]\s*" nextgroup=muttrcSimplePatString
+syn match muttrcSimplePat contained "!\?\^\?[=][bcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString
 syn region muttrcSimplePat contained keepend start=+!\?\^\?[~](+ end=+)+ contains=muttrcSimplePat
 "syn match muttrcSimplePat contained /'[^~=%][^']*/ contains=muttrcRXString
 syn region muttrcSimplePatString contained keepend start=+"+ end=+"+ skip=+\\"+
@@ -557,9 +580,12 @@ syn region muttrcColorRXPat        contained start=+\s*'+ skip=+\\'+ end=+'\s*+ keepend
 syn region muttrcColorRXPat    contained start=+\s*"+ skip=+\\"+ end=+"\s*+ keepend skipwhite contains=muttrcRXString2 nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
 syn keyword muttrcColorField   contained attachment body bold error hdrdefault header index indicator markers message normal quoted search signature status tilde tree underline
 syn match   muttrcColorField   contained "\<quoted\d\=\>"
+if use_mutt_sidebar == 1
+    syn keyword muttrcColorField contained sidebar_new
+endif
 syn keyword muttrcColor        contained black blue cyan default green magenta red white yellow
 syn keyword muttrcColor        contained brightblack brightblue brightcyan brightdefault brightgreen brightmagenta brightred brightwhite brightyellow
-syn match   muttrcColor        contained "\<\%(bright\)\=color\d\{1,2}\>"
+syn match   muttrcColor        contained "\<\%(bright\)\=color\d\{1,3}\>"
 " Now for the structure of the color line
 syn match muttrcColorRXNL      contained skipnl "\s*\\$" nextgroup=muttrcColorRXPat,muttrcColorRXNL
 syn match muttrcColorBG        contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorRXPat,muttrcColorRXNL
@@ -641,7 +667,7 @@ if version >= 508 || !exists("did_muttrc_syntax_inits")
   HiLink muttrcSetQuadAssignment       Boolean
   HiLink muttrcSetStrAssignment        String
   HiLink muttrcEmail           Special
-  HiLink muttrcVariable                Special
+  HiLink muttrcVariableInner   Special
   HiLink muttrcEscapedVariable String
   HiLink muttrcHeader          Type
   HiLink muttrcKeySpecial      SpecialChar
@@ -765,4 +791,6 @@ endif
 
 let b:current_syntax = "muttrc"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 "EOF   vim: ts=8 noet tw=100 sw=8 sts=0 ft=vim
index 6bbf33a..a6ed056 100644 (file)
@@ -1,9 +1,10 @@
 " Vim syntax file
 " Language:    NASM - The Netwide Assembler (v0.98)
-" Maintainer:  Manuel M.H. Stol        <mmh.stol@gmx.net>
-" Last Change: 2003 May 11
-" Vim URL:     http://www.vim.org/lang.html
-" NASM Home:   http://www.cryogen.com/Nasm/
+" Maintainer:  Andriy Sokolov  <andriy145@gmail.com>
+" Original Author:     Manuel M.H. Stol        <Manuel.Stol@allieddata.nl>
+" Former Maintainer:   Manuel M.H. Stol        <Manuel.Stol@allieddata.nl>
+" Last Change: 2012 Feb 7
+" NASM Home:   http://www.nasm.us/
 
 
 
@@ -47,14 +48,14 @@ syn cluster nasmGrpComments contains=@nasmGrpInComments,nasmComment,nasmSpecialC
 "  in NASM: 'Everything is a Label'
 "  Definition Label = label defined by %[i]define or %[i]assign
 "  Identifier Label = label defined as first non-keyword on a line or %[i]macro
-syn match   nasmLabelError     "$\=\(\d\+\K\|[#\.@]\|\$\$\k\)\k*\>"
+syn match   nasmLabelError     "$\=\(\d\+\K\|[#.@]\|\$\$\k\)\k*\>"
 syn match   nasmLabel          "\<\(\h\|[?@]\)\k*\>"
 syn match   nasmLabel          "[\$\~]\(\h\|[?@]\)\k*\>"lc=1
 "  Labels starting with one or two '.' are special
 syn match   nasmLocalLabel     "\<\.\(\w\|[#$?@~]\)\k*\>"
 syn match   nasmLocalLabel     "\<\$\.\(\w\|[#$?@~]\)\k*\>"ms=s+1
 if !exists("nasm_no_warn")
-  syn match  nasmLabelWarn     "\<\~\=\$\=[_\.][_\.\~]*\>"
+  syn match  nasmLabelWarn     "\<\~\=\$\=[_.][_.\~]*\>"
 endif
 if exists("nasm_loose_syntax")
   syn match   nasmSpecialLabel "\<\.\.@\k\+\>"
@@ -91,7 +92,6 @@ syn keyword nasmFltNumber     Inf Infinity Indefinite NaN SNaN QNaN
 syn match   nasmNumberError    "\<\~\s*\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
 
 
-
 " Netwide Assembler Storage Directives:
 "  Storage types
 syn keyword nasmTypeError      DF EXTRN FWORD RESF TBYTE
@@ -160,6 +160,7 @@ syn region  nasmInMacStrucDef       contained transparent matchgroup=nasmStructure kee
 "syn region  nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnMacro
 "syn region  nasmInMacStrucDef contained transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure
 syn region  nasmInMacPreConDef contained transparent matchgroup=nasmInMacPreCondit start="^\s*%ifnidni\>"hs=e-7 start="^\s*%if\(idni\|n\(ctx\|def\|idn\|num\|str\)\)\>"hs=e-6 start="^\s*%if\(ctx\|def\|idn\|nid\|num\|str\)\>"hs=e-5 start="^\s*%ifid\>"hs=e-4 start="^\s*%if\>"hs=e-2 end="%endif\>" contains=@nasmGrpCntnMacro,nasmInMacPreCondit,nasmInPreCondit
+" Todo: allow STRUC/ISTRUC to be used inside preprocessor conditional block
 syn match   nasmInMacPreCondit contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
 syn match   nasmInMacPreCondit contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
 syn match   nasmInMacPreCondit contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
@@ -179,7 +180,7 @@ if exists("nasm_ctx_outside_macro")
   syn region nasmPreConditDef  transparent matchgroup=nasmCtxPreCondit start="^\s*%ifnctx\>"hs=e-6 start="^\s*%ifctx\>"hs=e-5 end="%endif\>" contains=@nasmGrpCntnPreCon
   syn match  nasmCtxPreProc    "^\s*%pop\>"hs=e-3
   if exists("nasm_loose_syntax")
-    syn match   nasmCtxLocLabel        "%$\+\(\w\|[#\.?@~]\)\k*\>"
+    syn match   nasmCtxLocLabel        "%$\+\(\w\|[#.?@~]\)\k*\>"
   else
     syn match   nasmCtxLocLabel        "%$\+\(\h\|[?@]\)\k*\>"
   endif
@@ -210,15 +211,17 @@ syn cluster nasmGrpInPreCondits   contains=nasmPreCondit,nasmInPreCondit,nasmCtxPr
 syn cluster nasmGrpPreCondits  contains=nasmPreConditDef,@nasmGrpInPreCondits,nasmCtxPreProc,nasmCtxLocLabel
 
 "  Other pre-processor statements
-syn match   nasmPreProc                "^\s*%rep\>"hs=e-3
+syn match   nasmPreProc                "^\s*%\(rep\|use\)\>"hs=e-3
 syn match   nasmPreProc                "^\s*%line\>"hs=e-4
-syn match   nasmPreProc                "^\s*%\(clear\|error\)\>"hs=e-5
-syn match   nasmPreProc                "^\s*%endrep\>"hs=e-6
-syn match   nasmPreProc                "^\s*%exitrep\>"hs=e-7
+syn match   nasmPreProc                "^\s*%\(clear\|error\|fatal\)\>"hs=e-5
+syn match   nasmPreProc                "^\s*%\(endrep\|strlen\|substr\)\>"hs=e-6
+syn match   nasmPreProc                "^\s*%\(exitrep\|warning\)\>"hs=e-7
 syn match   nasmDefine         "^\s*%undef\>"hs=e-5
 syn match   nasmDefine         "^\s*%\(assign\|define\)\>"hs=e-6
 syn match   nasmDefine         "^\s*%i\(assign\|define\)\>"hs=e-7
+syn match   nasmDefine         "^\s*%unmacro\>"hs=e-7
 syn match   nasmInclude                "^\s*%include\>"hs=e-7
+" Todo: Treat the line tail after %fatal, %error, %warning as text
 
 "  Multiple pre-processor instructions on single line detection (obsolete)
 "syn match   nasmPreProcError  +^\s*\([^\t "%';][^"%';]*\|[^\t "';][^"%';]\+\)%\a\+\>+
@@ -231,6 +234,7 @@ syn cluster nasmGrpPreProcs contains=nasmMacroDef,@nasmGrpInMacros,@nasmGrpPreCo
 syn match   nasmGen08Register  "\<[A-D][HL]\>"
 syn match   nasmGen16Register  "\<\([A-D]X\|[DS]I\|[BS]P\)\>"
 syn match   nasmGen32Register  "\<E\([A-D]X\|[DS]I\|[BS]P\)\>"
+syn match   nasmGen64Register  "\<R\([A-D]X\|[DS]I\|[BS]P\|[89]\|1[0-5]\|[89][WD]\|1[0-5][WD]\)\>"
 syn match   nasmSegRegister    "\<[C-GS]S\>"
 syn match   nasmSpcRegister    "\<E\=IP\>"
 syn match   nasmFpuRegister    "\<ST\o\>"
@@ -244,10 +248,10 @@ syn match   nasmRegisterError     "\<X\=MM[8-9]\>"
 syn match   nasmRegisterError  "\<ST\((\d)\|[8-9]\>\)"
 syn match   nasmRegisterError  "\<E\([A-D][HL]\|[C-GS]S\)\>"
 "  Memory reference operand (address):
-syn match   nasmMemRefError    "[\[\]]"
+syn match   nasmMemRefError    "[[\]]"
 syn cluster nasmGrpCntnMemRef  contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefError
-syn match   nasmInMacMemRef    contained "\[[^;\[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam
-syn match   nasmMemReference   "\[[^;\[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel
+syn match   nasmInMacMemRef    contained "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam
+syn match   nasmMemReference   "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel
 
 
 
@@ -298,20 +302,21 @@ syn match   nasmStdInstruction    "\<\(CMOV\|J\|SET\)\(N\=\([ABGL]E\=\|[CEOSZ]\)\|P
 syn match   nasmStdInstruction "\<POP\>"
 syn keyword nasmStdInstruction AAA AAD AAM AAS ADC ADD AND
 syn keyword nasmStdInstruction BOUND BSF BSR BSWAP BT[C] BTR BTS
-syn keyword nasmStdInstruction CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW
-syn keyword nasmStdInstruction CMPXCHG CMPXCHG8B CPUID CWD[E]
+syn keyword nasmStdInstruction CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW CMPSQ
+syn keyword nasmStdInstruction CMPXCHG CMPXCHG8B CPUID CWD[E] CQO
 syn keyword nasmStdInstruction DAA DAS DEC DIV ENTER
-syn keyword nasmStdInstruction IDIV IMUL INC INT[O] IRET[D] IRETW
+syn keyword nasmStdInstruction IDIV IMUL INC INT[O] IRET[D] IRETW IRETQ
 syn keyword nasmStdInstruction JCXZ JECXZ JMP
-syn keyword nasmStdInstruction LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD
+syn keyword nasmStdInstruction LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD LODSQ
 syn keyword nasmStdInstruction LODSW LOOP[E] LOOPNE LOOPNZ LOOPZ LSS
-syn keyword nasmStdInstruction MOVSB MOVSD MOVSW MOVSX MOVZX MUL NEG NOP NOT
-syn keyword nasmStdInstruction OR POPA[D] POPAW POPF[D] POPFW
-syn keyword nasmStdInstruction PUSH[AD] PUSHAW PUSHF[D] PUSHFW
+syn keyword nasmStdInstruction MOVSB MOVSD MOVSW MOVSX MOVSQ MOVZX MUL NEG NOP NOT
+syn keyword nasmStdInstruction OR POPA[D] POPAW POPF[D] POPFW POPFQ
+syn keyword nasmStdInstruction PUSH[AD] PUSHAW PUSHF[D] PUSHFW PUSHFQ
 syn keyword nasmStdInstruction RCL RCR RETF RET[N] ROL ROR
 syn keyword nasmStdInstruction SAHF SAL SAR SBB SCASB SCASD SCASW
-syn keyword nasmStdInstruction SHL[D] SHR[D] STC STD STOSB STOSD STOSW SUB
+syn keyword nasmStdInstruction SHL[D] SHR[D] STC STD STOSB STOSD STOSW STOSQ SUB
 syn keyword nasmStdInstruction TEST XADD XCHG XLATB XOR
+syn keyword nasmStdInstruction LFENCE MFENCE SFENCE
 
 
 " System Instructions: (usually privileged)
index 2628151..4fbc916 100644 (file)
@@ -1,9 +1,9 @@
 " Vim syntax file
 "
 " Language:    NATURAL
-" Version:     2.1.0.3
+" Version:     2.1.0.5
 " Maintainer:  Marko von Oppen <marko@von-oppen.com>
-" Last Changed:        2008-07-29 01:40:52
+" Last Changed:        2012-02-05 18:50:43
 " Support:     http://www.von-oppen.com/
 
 " For version 5.x: Clear all syntax items
@@ -17,6 +17,9 @@ else
   setlocal iskeyword+=-,*,#,+,_,/
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " NATURAL is case insensitive
 syntax case ignore
 
@@ -206,4 +209,7 @@ endif
 
 let b:current_syntax = "natural"
 
-" vim:set ts=8 sw=8 noet ft=vim:
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:set ts=8 sw=8 noet ft=vim list:
index f6fd66c..a319d7c 100644 (file)
@@ -1,7 +1,7 @@
 " Language   : Netrw Remote-Directory Listing Syntax
 " Maintainer : Charles E. Campbell, Jr.
-" Last change: Jan 14, 2009
-" Version    : 16
+" Last change: Dec 18, 2012
+" Version    : 17
 " ---------------------------------------------------------------------
 
 " Syntax Clearing: {{{1
@@ -22,7 +22,7 @@ syn match  netrwDir           "\.\{1,2}/"                                             contains=netrwClassify,@NoSpell
 syn match  netrwDir            "\%(\S\+ \)*\S\+/"                                      contains=netrwClassify,@NoSpell
 syn match  netrwSizeDate       "\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s"    skipwhite       contains=netrwDateSep,@NoSpell  nextgroup=netrwTime
 syn match  netrwSymLink                "\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"                    contains=netrwClassify,@NoSpell
-syn match  netrwExe            "\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)"                   contains=netrwClassify,@NoSpell
+syn match  netrwExe            "\%(\S\+ \)*\S*[^~]\*\ze\%(\s\{2,}\|$\)"                contains=netrwClassify,@NoSpell
 syn match  netrwTreeBar                "^\%([-+|] \)\+"                                        contains=netrwTreeBarSpace      nextgroup=@netrwTreeGroup
 syn match  netrwTreeBarSpace   " "                                     contained
 
@@ -56,14 +56,17 @@ if exists("g:netrw_special_syntax") && netrw_special_syntax
  if has("unix")
   syn match netrwCoreDump      "\<core\%(\.\d\+\)\=\>"                         contains=netrwTreeBar,@NoSpell
  endif
+ syn match netrwLex            "\(\S\+ \)*\S\+\.\%(l\|lex\)\>"                 contains=netrwTreeBar,@NoSpell
+ syn match netrwYacc           "\(\S\+ \)*\S\+\.y\>"                           contains=netrwTreeBar,@NoSpell
  syn match netrwData           "\(\S\+ \)*\S\+\.dat\>"                         contains=netrwTreeBar,@NoSpell
- syn match netrwHdr            "\(\S\+ \)*\S\+\.h\>"                           contains=netrwTreeBar,@NoSpell
+ syn match netrwDoc            "\(\S\+ \)*\S\+\.\%(doc\|txt\|pdf\|ps\)"        contains=netrwTreeBar,@NoSpell
+ syn match netrwHdr            "\(\S\+ \)*\S\+\.\%(h\|hpp\)\>"                 contains=netrwTreeBar,@NoSpell
  syn match netrwLib            "\(\S\+ \)*\S*\.\%(a\|so\|lib\|dll\)\>"         contains=netrwTreeBar,@NoSpell
  syn match netrwMakeFile       "\<[mM]akefile\>\|\(\S\+ \)*\S\+\.mak\>"        contains=netrwTreeBar,@NoSpell
  syn match netrwObj            "\(\S\+ \)*\S*\.\%(o\|obj\)\>"                  contains=netrwTreeBar,@NoSpell
- syn match netrwTags           "\<tags\>"                                      contains=netrwTreeBar,@NoSpell
  syn match netrwTags           "\<\(ANmenu\|ANtags\)\>"                        contains=netrwTreeBar,@NoSpell
- syn match netrwTilde          "\(\S\+ \)*\S\+\~\>"                            contains=netrwTreeBar,@NoSpell
+ syn match netrwTags           "\<tags\>"                                      contains=netrwTreeBar,@NoSpell
+ syn match netrwTilde          "\(\S\+ \)*\S\+\~\*\=\>"                        contains=netrwTreeBar,@NoSpell
  syn match netrwTmp            "\<tmp\(\S\+ \)*\S\+\>\|\(\S\+ \)*\S*tmp\>"     contains=netrwTreeBar,@NoSpell
 endif
 
@@ -88,19 +91,22 @@ if !exists("did_drchip_netrwlist_syntax")
  hi default link netrwTimeSep  netrwDateSep
  hi default link netrwComma    netrwComment
  hi default link netrwHide     netrwComment
- hi default link netrwMarkFile Identifier
+ hi default link netrwMarkFile TabLineSel
 
  " special syntax highlighting (see :he g:netrw_special_syntax)
  hi default link netrwBak      NonText
  hi default link netrwCompress Folded
  hi default link netrwCoreDump WarningMsg
  hi default link netrwData     DiffChange
+ hi default link netrwHdr      netrwPlain
+ hi default link netrwLex      netrwPlain
  hi default link netrwLib      DiffChange
  hi default link netrwMakefile DiffChange
  hi default link netrwObj      Folded
  hi default link netrwTilde    Folded
  hi default link netrwTmp      Folded
  hi default link netrwTags     Folded
+ hi default link netrwYacc     netrwPlain
 endif
 
 " Current Syntax: {{{1
diff --git a/runtime/syntax/ninja.vim b/runtime/syntax/ninja.vim
new file mode 100644 (file)
index 0000000..d813267
--- /dev/null
@@ -0,0 +1,81 @@
+" ninja build file syntax.
+" Language: ninja build file as described at
+"           http://martine.github.com/ninja/manual.html
+" Version: 1.3
+" Last Change: 2013/04/16
+" Maintainer: Nicolas Weber <nicolasweber@gmx.de>
+" Version 1.3 of this script is in the upstream vim repository and will be
+" included in the next vim release. If you change this, please send your change
+" upstream.
+
+" ninja lexer and parser are at
+" https://github.com/martine/ninja/blob/master/src/lexer.in.cc
+" https://github.com/martine/ninja/blob/master/src/manifest_parser.cc
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn case match
+
+syn match ninjaComment /#.*/  contains=@Spell
+
+" Toplevel statements are the ones listed here and
+" toplevel variable assignments (ident '=' value).
+" lexer.in.cc, ReadToken() and manifest_parser.cc, Parse()
+syn match ninjaKeyword "^build\>"
+syn match ninjaKeyword "^rule\>"
+syn match ninjaKeyword "^pool\>"
+syn match ninjaKeyword "^default\>"
+syn match ninjaKeyword "^include\>"
+syn match ninjaKeyword "^subninja\>"
+
+" Both 'build' and 'rule' begin a variable scope that ends
+" on the first line without indent. 'rule' allows only a
+" limited set of magic variables, 'build' allows general
+" let assignments.
+" manifest_parser.cc, ParseRule()
+syn region ninjaRule start="^rule" end="^\ze\S" contains=ALL transparent
+syn keyword ninjaRuleCommand contained command deps depfile description generator
+                                     \ pool restat rspfile rspfile_content
+
+syn region ninjaPool start="^pool" end="^\ze\S" contains=ALL transparent
+syn keyword ninjaPoolCommand contained depth
+
+" Strings are parsed as follows:
+" lexer.in.cc, ReadEvalString()
+" simple_varname = [a-zA-Z0-9_-]+;
+" varname = [a-zA-Z0-9_.-]+;
+" $$ -> $
+" $\n -> line continuation
+" '$ ' -> escaped space
+" $simple_varname -> variable
+" ${varname} -> variable
+
+syn match   ninjaWrapLineOperator "\$$"
+syn match   ninjaSimpleVar "\$[a-zA-Z0-9_-]\+"
+syn match   ninjaVar       "\${[a-zA-Z0-9_.-]\+}"
+
+" operators are:
+" variable assignment =
+" rule definition :
+" implicit dependency |
+" order-only dependency ||
+syn match ninjaOperator "\(=\|:\||\|||\)\ze\s"
+
+hi def link ninjaComment Comment
+hi def link ninjaKeyword Keyword
+hi def link ninjaRuleCommand Statement
+hi def link ninjaPoolCommand Statement
+hi def link ninjaWrapLineOperator ninjaOperator
+hi def link ninjaOperator Operator
+hi def link ninjaSimpleVar ninjaVar
+hi def link ninjaVar Identifier
+
+let b:current_syntax = "ninja"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 6f2a131..280ba9e 100644 (file)
@@ -1,8 +1,8 @@
 " VIM syntax file
 " Language:    nroff/groff
-" Maintainer:  Alejandro López-Valencia <dradul@yahoo.com>
-" URL:         http://dradul.tripod.com/vim
-" Last Change: 2006 Apr 14
+" Maintainer:  Pedro Alejandro López-Valencia <palopezv@gmail.com>
+" URL:         http://vorbote.wordpress.com/
+" Last Change: 2012 Feb 2
 "
 " {{{1 Acknowledgements
 "
@@ -31,6 +31,9 @@ elseif exists("b:current_syntax")
        finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 "
 " {{{1 plugin settings...
 "
@@ -256,4 +259,6 @@ endif
 
 let b:current_syntax = "nroff"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim600: set fdm=marker fdl=2:
index c575cf2..1f61e50 100644 (file)
 " Vim syntax file
-" Language:        Objective C
-" Maintainer:      Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
-" Ex-maintainer:    Anthony Hodsdon <ahodsdon@fastmail.fm>
-" First Author:            Valentino Kyriakides <1kyriaki@informatik.uni-hamburg.de>
-" Last Change:     2007 Feb 21
-
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
+" Language:     Objective-C
+" Maintainer:   Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
+" Last Change:  2013 Jun 13
+" Remark:       Modern Objective-C Edition
+
+""" Preparation for loading ObjC stuff
+if exists("b:current_syntax")
   finish
 endif
-
 if &filetype != 'objcpp'
-  " Read the C syntax to start with
-  if version < 600
-    source <sfile>:p:h/c.vim
-  else
-    runtime! syntax/c.vim
-  endif
+  syn clear
+  runtime! syntax/c.vim
 endif
+let s:cpo_save = &cpo
+set cpo&vim
+
+""" ObjC proper stuff follows...
+
+syn keyword objcPreProcMacro __OBJC__ __OBJC2__ __clang__
+
+" Defined Types
+syn keyword objcPrincipalType id Class SEL IMP BOOL instancetype
+syn keyword objcUsefulTerm nil Nil NO YES
+
+" Preprocessor Directives
+syn region objcImported display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match objcImported display contained "<[^>]*>"
+syn match objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported
 
-" Objective C extentions follow below
-"
-" NOTE: Objective C is abbreviated to ObjC/objc
-" and uses *.h, *.m as file extensions!
-
-
-" ObjC keywords, types, type qualifiers etc.
-syn keyword objcStatement      self super _cmd
-syn keyword objcType           id Class SEL IMP BOOL
-syn keyword objcTypeModifier   bycopy in out inout oneway
-syn keyword objcConstant       nil Nil
-
-" Match the ObjC #import directive (like C's #include)
-syn region objcImported display contained start=+"+  skip=+\\\\\|\\"+  end=+"+
-syn match  objcImported display contained "<[-_0-9a-zA-Z.\/]*>"
-syn match  objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported
-
-" Match the important ObjC directives
-syn match  objcScopeDecl    "@public\|@private\|@protected"
-syn match  objcDirective    "@interface\|@implementation"
-syn match  objcDirective    "@class\|@end\|@defs"
-syn match  objcDirective    "@encode\|@protocol\|@selector"
-syn match  objcDirective    "@try\|@catch\|@finally\|@throw\|@synchronized"
-
-" Match the ObjC method types
-"
-" NOTE: here I match only the indicators, this looks
-" much nicer and reduces cluttering color highlightings.
-" However, if you prefer full method declaration matching
-" append .* at the end of the next two patterns!
-"
-syn match objcInstMethod    "^\s*-\s*"
-syn match objcFactMethod    "^\s*+\s*"
-
-" To distinguish from a header inclusion from a protocol list.
-syn match objcProtocol display "<[_a-zA-Z][_a-zA-Z0-9]*>" contains=objcType,cType,Type
-
-
-" To distinguish labels from the keyword for a method's parameter.
-syn region objcKeyForMethodParam display
-    \ start="^\s*[_a-zA-Z][_a-zA-Z0-9]*\s*:\s*("
-    \ end=")\s*[_a-zA-Z][_a-zA-Z0-9]*"
-    \ contains=objcType,objcTypeModifier,cType,cStructure,cStorageClass,Type
-
-" Objective-C Constant Strings
-syn match objcSpecial display "%@" contained
+" ObjC Compiler Directives
+syn match objcObjDef display /@interface\>\|@implementation\>\|@end\>\|@class\>/
+syn match objcProtocol display /@protocol\>\|@optional\>\|@required\>/
+syn match objcProperty display /@property\>\|@synthesize\>\|@dynamic\>/
+syn match objcIvarScope display /@private\>\|@protected\>\|@public\>/
+syn match objcInternalRep display /@selector\>\|@encode\>/
+syn match objcException display /@try\>\|@throw\>\|@catch\|@finally\>/
+syn match objcThread display /@synchronized\>/
+syn match objcPool display /@autoreleasepool\>/
+syn match objcModuleImport display /@import\>/
+
+" ObjC Constant Strings
+syn match objcSpecial display contained "%@"
 syn region objcString start=+\(@"\|"\)+ skip=+\\\\\|\\"+ end=+"+ contains=cFormat,cSpecial,objcSpecial
 
+" ObjC Hidden Arguments
+syn keyword objcHiddenArgument self _cmd super
+
+" ObjC Type Qualifiers for Blocks
+syn keyword objcBlocksQualifier __block
+" ObjC Type Qualifiers for Object Lifetime
+syn keyword objcObjectLifetimeQualifier __strong __weak __unsafe_unretained __autoreleasing
+" ObjC Type Qualifiers for Toll-Free Bridge
+syn keyword objcTollFreeBridgeQualifier __bridge __bridge_retained __bridge_transfer
+
+" ObjC Type Qualifiers for Remote Messaging
+syn match objcRemoteMessagingQualifier display contained /\((\s*oneway\s\+\|(\s*in\s\+\|(\s*out\s\+\|(\s*inout\s\+\|(\s*bycopy\s\+\(in\(out\)\?\|out\)\?\|(\s*byref\s\+\(in\(out\)\?\|out\)\?\)/hs=s+1
+
+" shorthand
+syn cluster objcTypeQualifier contains=objcBlocksQualifier,objcObjectLifetimeQualifier,objcTollFreeBridgeQualifier,objcRemoteMessagingQualifier
+
+" ObjC Fast Enumeration
+syn match objcFastEnumKeyword display /\sin\(\s\|$\)/
+
+" ObjC Literal Syntax
+syn match objcLiteralSyntaxNumber display /@\(YES\>\|NO\>\|\d\|-\|+\)/ contains=cNumber,cFloat,cOctal
+syn match objcLiteralSyntaxSpecialChar display /@'/ contains=cSpecialCharacter
+syn match objcLiteralSyntaxChar display /@'[^\\]'/ 
+syn match objcLiteralSyntaxOp display /@\((\|\[\|{\)/me=e-1,he=e-1
+
+" ObjC Declared Property Attributes
+syn match objDeclPropAccessorNameAssign display /\s*=\s*/ contained
+syn region objcDeclPropAccessorName display start=/\(getter\|setter\)/ end=/\h\w*/ contains=objDeclPropAccessorNameAssign
+syn keyword objcDeclPropAccessorType readonly readwrite contained
+syn keyword objcDeclPropAssignSemantics assign retain copy contained
+syn keyword objcDeclPropAtomicity nonatomic contained
+syn keyword objcDeclPropARC strong weak contained
+syn region objcDeclProp display transparent keepend start=/@property\s*(/ end=/)/ contains=objcProperty,objcDeclPropAccessorName,objcDeclPropAccessorType,objcDeclPropAssignSemantics,objcDeclPropAtomicity,objcDeclPropARC
+
+" To distinguish colons in methods and dictionaries from those in C's labels.
+syn match objcColon display /^\s*\h\w*\s*\:\(\s\|.\)/me=e-1,he=e-1
+
+" To distinguish a protocol list from system header files
+syn match objcProtocolList display /<\h\w*\(\s*,\s*\h\w*\)*>/ contains=objcPrincipalType,cType,Type
+
+" shorthand
+syn cluster objcCEntities contains=cType,cStructure,cStorageClass,cString,cCharacter,cSpecialCharacter,cNumbers,cConstant,cOperator,cComment,cCommentL,cStatement,cLabel,cConditional,cRepeat
+syn cluster objcObjCEntities contains=objcHiddenArgument,objcPrincipalType,objcString,objcUsefulTerm,objcProtocol,objcInternalRep,objcException,objcThread,objcPool,objcModuleImport,@objcTypeQualifier,objcLiteralSyntaxNumber,objcLiteralSyntaxOp,objcLiteralSyntaxChar,objcLiteralSyntaxSpecialChar,objcProtocolList,objcColon,objcFastEnumKeyword,objcType,objcClass,objcMacro,objcEnum,objcEnumValue,objcExceptionValue,objcNotificationValue,objcConstVar,objcPreProcMacro
+
 " Objective-C Message Expressions
-syn region objcMessage display start="\[" end="\]" contains=objcMessage,objcStatement,objcType,objcTypeModifier,objcString,objcConstant,objcDirective,cType,cStructure,cStorageClass,cString,cCharacter,cSpecialCharacter,cNumbers,cConstant,cOperator,cComment,cCommentL,Type
-
-syn cluster cParenGroup add=objcMessage
-syn cluster cPreProcGroup add=objcMessage
-
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_objc_syntax_inits")
-  if version < 508
-    let did_objc_syntax_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
-
-  HiLink objcImport            Include
-  HiLink objcImported          cString
-  HiLink objcTypeModifier      objcType
-  HiLink objcType              Type
-  HiLink objcScopeDecl         Statement
-  HiLink objcInstMethod                Function
-  HiLink objcFactMethod                Function
-  HiLink objcStatement         Statement
-  HiLink objcDirective         Statement
-  HiLink objcKeyForMethodParam None
-  HiLink objcString            cString
-  HiLink objcSpecial           Special
-  HiLink objcProtocol          None
-  HiLink objcConstant          cConstant
-
-  delcommand HiLink
-endif
+syn region objcMethodCall start=/\[/ end=/\]/ contains=objcMethodCall,objcBlocks,@objcObjCEntities,@objcCEntities
+
+" To distinguish class method and instance method
+syn match objcInstanceMethod display /^s*-\s*/
+syn match objcClassMethod display /^s*+\s*/
+
+" ObjC Blocks
+syn region objcBlocks start=/\(\^\s*([^)]\+)\s*{\|\^\s*{\)/ end=/}/ contains=objcBlocks,objcMethodCall,@objcObjCEntities,@objcCEntities
+
+syn cluster cParenGroup add=objcMethodCall
+syn cluster cPreProcGroup add=objcMethodCall
+
+""" Foundation Framework
+syn match objcClass /Protocol\s*\*/me=s+8,he=s+8
+
+"""""""""""""""""
+" NSObjCRuntime.h
+syn keyword objcType NSInteger NSUInteger NSComparator
+syn keyword objcEnum NSComparisonResult
+syn keyword objcEnumValue NSOrderedAscending NSOrderedSame NSOrderedDescending
+syn keyword objcEnum NSEnumerationOptions
+syn keyword objcEnumValue NSEnumerationConcurrent NSEnumerationReverse
+syn keyword objcEnum NSSortOptions
+syn keyword objcEnumValue NSSortConcurrent NSSortStable
+syn keyword objcEnumValue NSNotFound
+syn keyword objcMacro NSIntegerMax NSIntegerMin NSUIntegerMax
+" NSRange.h
+syn keyword objcType NSRange NSRangePointer
+" NSGeometry.h
+syn keyword objcType NSPoint NSPointPointer NSPointArray NSSize NSSizePointer NSSizeArray NSRect NSRectPointer NSRectArray
+syn keyword objcEnum NSRectEdge
+syn keyword objcEnumValue NSMinXEdge NSMinYEdge NSMaxXEdge NSMaxYEdge
+syn keyword objcConstVar NSZeroPoint NSZeroSize NSZeroRect
+syn keyword cType CGFloat CGPoint CGSize CGRect
+syn keyword objcEnum NSAlignmentOptions
+syn keyword objcEnumValue NSAlignMinXInward NSAlignMinYInward NSAlignMaxXInward NSAlignMaxYInward NSAlignWidthInward NSAlignHeightInward NSAlignMinXOutward NSAlignMinYOutward NSAlignMaxXOutward NSAlignMaxYOutward NSAlignWidthOutward NSAlignHeightOutward NSAlignMinXNearest NSAlignMinYNearest NSAlignMaxXNearest NSAlignMaxYNearest NSAlignWidthNearest NSAlignHeightNearest NSAlignRectFlipped NSAlignAllEdgesInward NSAlignAllEdgesOutward NSAlignAllEdgesNearest
+" NSDecimal.h
+syn keyword objcType NSDecimal
+syn keyword objcEnum  NSRoundingMode
+syn keyword objcEnumValue NSRoundPlain NSRoundDown NSRoundUp NSRoundBankers
+syn keyword objcEnum NSCalculationError
+syn keyword objcEnumValue NSCalculationNoError NSCalculationLossOfPrecision NSCalculationUnderflow NSCalculationOverflow NSCalculationDivideByZero
+" NSDate.h
+syn match objcClass /NSDate\s*\*/me=s+6,he=s+6
+syn keyword objcType NSTimeInterval
+syn keyword objcNotificationValue NSSystemClockDidChangeNotification
+syn keyword objcMacro NSTimeIntervalSince1970
+" NSZone.h
+syn match objcType /NSZone\s*\*/me=s+6,he=s+6
+" NSError.h
+syn match objcClass /NSError\s*\*/me=s+7,he=s+7
+syn keyword objcConstVar NSCocoaErrorDomain NSPOSIXErrorDomain NSOSStatusErrorDomain NSMachErrorDomain NSUnderlyingErrorKey NSLocalizedDescriptionKey NSLocalizedFailureReasonErrorKey NSLocalizedRecoverySuggestionErrorKey NSLocalizedRecoveryOptionsErrorKey NSRecoveryAttempterErrorKey NSHelpAnchorErrorKey NSStringEncodingErrorKey NSURLErrorKey NSFilePathErrorKey
+" NSException.h
+syn match objcClass /NSException\s*\*/me=s+11,he=s+11
+syn keyword objcType NSUncaughtExceptionHandler
+syn keyword objcConstVar NSGenericException NSRangeException NSInvalidArgumentException NSInternalInconsistencyException NSMallocException NSObjectInaccessibleException NSObjectNotAvailableException NSDestinationInvalidException NSPortTimeoutException NSInvalidSendPortException NSInvalidReceivePortException NSPortSendException NSPortReceiveException NSOldStyleException
+" NSNotification.h
+syn match objcClass /NSNotification\s*\*/me=s+14,he=s+14
+syn match objcClass /NSNotificationCenter\s*\*/me=s+20,he=s+20
+" NSDistributedNotificationCenter.h
+syn match objcClass /NSDistributedNotificationCenter\s*\*/me=s+31,he=s+31
+syn keyword objcConstVar NSLocalNotificationCenterType
+syn keyword objcEnum NSNotificationSuspensionBehavior
+syn keyword objcEnumValue NSNotificationSuspensionBehaviorDrop NSNotificationSuspensionBehaviorCoalesce NSNotificationSuspensionBehaviorHold NSNotificationSuspensionBehaviorHold NSNotificationSuspensionBehaviorDeliverImmediately
+syn keyword objcEnumValue NSNotificationDeliverImmediately NSNotificationPostToAllSessions
+" NSNotificationQueue.h
+syn match objcClass /NSNotificationQueue\s*\*/me=s+19,he=s+19
+syn keyword objcEnum NSPostingStyle
+syn keyword objcEnumValue NSPostWhenIdle NSPostASAP NSPostNow
+syn keyword objcEnum NSNotificationCoalescing
+syn keyword objcEnumValue NSNotificationNoCoalescing NSNotificationCoalescingOnName NSNotificationCoalescingOnSender
+" NSEnumerator.h
+syn match objcClass /NSEnumerator\s*\*/me=s+12,he=s+12
+" NSIndexSet.h
+syn match objcClass /NSIndexSet\s*\*/me=s+10,he=s+10
+syn match objcClass /NSMutableIndexSet\s*\*/me=s+17,he=s+17
+" NSCharecterSet.h
+syn match objcClass /NSCharacterSet\s*\*/me=s+14,he=s+14
+" NSURL.h
+syn match objcClass /NSURL\s*\*/me=s+5,he=s+5
+syn keyword objcEnum NSURLBookmarkCreationOptions
+syn keyword objcEnumValue NSURLBookmarkCreationPreferFileIDResolution NSURLBookmarkCreationMinimalBookmark NSURLBookmarkCreationSuitableForBookmarkFile NSURLBookmarkCreationWithSecurityScope NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess
+syn keyword objcEnum NSURLBookmarkResolutionOptions
+syn keyword objcEnumValue NSURLBookmarkResolutionWithoutUI NSURLBookmarkResolutionWithoutMounting NSURLBookmarkResolutionWithSecurityScope
+syn keyword objcType NSURLBookmarkFileCreationOptions
+syn keyword objcConstVar NSURLFileScheme NSURLKeysOfUnsetValuesKey
+syn keyword objcConstVar NSURLNameKey NSURLLocalizedNameKey NSURLIsRegularFileKey NSURLIsDirectoryKey NSURLIsSymbolicLinkKey NSURLIsVolumeKey NSURLIsPackageKey NSURLIsSystemImmutableKey NSURLIsUserImmutableKey NSURLIsHiddenKey NSURLHasHiddenExtensionKey NSURLCreationDateKey NSURLContentAccessDateKey NSURLContentModificationDateKey NSURLAttributeModificationDateKey NSURLLinkCountKey NSURLParentDirectoryURLKey NSURLVolumeURLKey NSURLTypeIdentifierKey NSURLLocalizedTypeDescriptionKey NSURLLabelNumberKey NSURLLabelColorKey NSURLLocalizedLabelKey NSURLEffectiveIconKey NSURLCustomIconKey NSURLFileResourceIdentifierKey NSURLVolumeIdentifierKey NSURLPreferredIOBlockSizeKey NSURLIsReadableKey NSURLIsWritableKey NSURLIsExecutableKey NSURLFileSecurityKey NSURLIsExcludedFromBackupKey NSURLPathKey NSURLIsMountTriggerKey NSURLFileResourceTypeKey
+syn keyword objcConstVar NSURLFileResourceTypeNamedPipe NSURLFileResourceTypeCharacterSpecial NSURLFileResourceTypeDirectory NSURLFileResourceTypeBlockSpecial NSURLFileResourceTypeRegular NSURLFileResourceTypeSymbolicLink NSURLFileResourceTypeSocket NSURLFileResourceTypeUnknown
+syn keyword objcConstVar NSURLFileSizeKey NSURLFileAllocatedSizeKey NSURLTotalFileSizeKey NSURLTotalFileAllocatedSizeKey NSURLIsAliasFileKey
+syn keyword objcConstVar NSURLVolumeLocalizedFormatDescriptionKey NSURLVolumeTotalCapacityKey NSURLVolumeAvailableCapacityKey NSURLVolumeResourceCountKey NSURLVolumeSupportsPersistentIDsKey NSURLVolumeSupportsSymbolicLinksKey NSURLVolumeSupportsHardLinksKey NSURLVolumeSupportsJournalingKey NSURLVolumeIsJournalingKey NSURLVolumeSupportsSparseFilesKey NSURLVolumeSupportsZeroRunsKey NSURLVolumeSupportsCaseSensitiveNamesKey NSURLVolumeSupportsCasePreservedNamesKey NSURLVolumeSupportsRootDirectoryDatesKey NSURLVolumeSupportsVolumeSizesKey NSURLVolumeSupportsRenamingKey NSURLVolumeSupportsAdvisoryFileLockingKey NSURLVolumeSupportsExtendedSecurityKey NSURLVolumeIsBrowsableKey NSURLVolumeMaximumFileSizeKey NSURLVolumeIsEjectableKey NSURLVolumeIsRemovableKey NSURLVolumeIsInternalKey NSURLVolumeIsAutomountedKey NSURLVolumeIsLocalKey NSURLVolumeIsReadOnlyKey NSURLVolumeCreationDateKey NSURLVolumeURLForRemountingKey NSURLVolumeUUIDStringKey NSURLVolumeNameKey NSURLVolumeLocalizedNameKey
+syn keyword objcConstVar NSURLIsUbiquitousItemKey NSURLUbiquitousItemHasUnresolvedConflictsKey NSURLUbiquitousItemIsDownloadedKey NSURLUbiquitousItemIsDownloadingKey NSURLUbiquitousItemIsUploadedKey NSURLUbiquitousItemIsUploadingKey NSURLUbiquitousItemPercentDownloadedKey NSURLUbiquitousItemPercentUploadedKey
+""""""""""""
+" NSString.h
+syn match objcClass /NSString\s*\*/me=s+8,he=s+8
+syn match objcClass /NSMutableString\s*\*/me=s+15,he=s+15
+syn keyword objcType unichar
+syn keyword objcExceptionValue NSParseErrorException NSCharacterConversionException
+syn keyword objcMacro NSMaximumStringLength
+syn keyword objcEnum NSStringCompareOptions
+syn keyword objcEnumValue NSCaseInsensitiveSearch NSLiteralSearch NSBackwardsSearch NSAnchoredSearch NSNumericSearch NSDiacriticInsensitiveSearch NSWidthInsensitiveSearch NSForcedOrderingSearch NSRegularExpressionSearch 
+syn keyword objcEnum NSStringEncoding
+syn keyword objcEnumValue NSASCIIStringEncoding NSNEXTSTEPStringEncoding NSJapaneseEUCStringEncoding NSUTF8StringEncoding NSISOLatin1StringEncoding NSSymbolStringEncoding NSNonLossyASCIIStringEncoding NSShiftJISStringEncoding NSISOLatin2StringEncoding NSUnicodeStringEncoding NSWindowsCP1251StringEncoding NSWindowsCP1252StringEncoding NSWindowsCP1253StringEncoding NSWindowsCP1254StringEncoding NSWindowsCP1250StringEncoding NSISO2022JPStringEncoding NSMacOSRomanStringEncoding NSUTF16StringEncoding NSUTF16BigEndianStringEncoding NSUTF16LittleEndianStringEncoding NSUTF32StringEncoding NSUTF32BigEndianStringEncoding NSUTF32LittleEndianStringEncoding
+syn keyword objcEnum NSStringEncodingConversionOptions
+syn keyword objcEnumValue NSStringEncodingConversionAllowLossy NSStringEncodingConversionExternalRepresentation
+syn keyword objcEnum NSStringEnumerationOptions
+syn keyword objcEnumValue NSStringEnumerationByLines NSStringEnumerationByParagraphs NSStringEnumerationByComposedCharacterSequences NSStringEnumerationByWords NSStringEnumerationBySentences NSStringEnumerationReverse NSStringEnumerationSubstringNotRequired NSStringEnumerationLocalized
+" NSAttributedString.h
+syn match objcClass /NSAttributedString\s*\*/me=s+18,he=s+18
+syn match objcClass /NSMutableAttributedString\s*\*/me=s+25,he=s+25
+syn keyword objcEnum NSAttributedStringEnumerationOptions
+syn keyword objcEnumValue NSAttributedStringEnumerationReverse NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
+" NSValue.h
+syn match objcClass /NSValue\s*\*/me=s+7,he=s+7
+syn match objcClass /NSNumber\s*\*/me=s+8,he=s+8
+" NSDecimalNumber.h
+syn match objcClass /NSDecimalNumber\s*\*/me=s+15,he=s+15
+syn match objcClass /NSDecimalNumberHandler\s*\*/me=s+22,he=s+22
+syn keyword objcExceptionValue NSDecimalNumberExactnessException NSDecimalNumberOverflowException NSDecimalNumberUnderflowException NSDecimalNumberDivideByZeroException
+" NSData.h
+syn match objcClass /NSData\s*\*/me=s+6,he=s+6
+syn match objcClass /NSMutableData\s*\*/me=s+13,he=s+13
+syn keyword objcEnum NSDataReadingOptions
+syn keyword objcEnumValue NSDataReadingMappedIfSafe NSDataReadingUncached NSDataReadingMappedAlways NSDataReadingMapped NSMappedRead NSUncachedRead
+syn keyword objcEnum NSDataWritingOptions
+syn keyword objcEnumValue NSDataWritingAtomic NSDataWritingWithoutOverwriting NSDataWritingFileProtectionNone NSDataWritingFileProtectionComplete NSDataWritingFileProtectionCompleteUnlessOpen NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication NSDataWritingFileProtectionMask NSAtomicWrite
+syn keyword objcEnum NSDataSearchOptions
+syn keyword objcEnumValue NSDataSearchBackwards NSDataSearchAnchored
+" NSArray.h
+syn match objcClass /NSArray\s*\*/me=s+7,he=s+7
+syn match objcClass /NSMutableArray\s*\*/me=s+14,he=s+14
+syn keyword objcEnum NSBinarySearchingOptions
+syn keyword objcEnumValue NSBinarySearchingFirstEqual NSBinarySearchingLastEqual NSBinarySearchingInsertionIndex
+" NSDictionary.h
+syn match objcClass /NSDictionary\s*\*/me=s+12,he=s+12
+syn match objcClass /NSMutableDictionary\s*\*/me=s+19,he=s+19
+" NSSet.h
+syn match objcClass /NSSet\s*\*/me=s+5,me=s+5
+syn match objcClass /NSMutableSet\s*\*/me=s+12,me=s+12
+syn match objcClass /NSCountedSet\s*\*/me=s+12,me=s+12
+" NSOrderedSet.h
+syn match objcClass /NSOrderedSet\s*\*/me=s+12,me=s+12
+syn match objcClass /NSMutableOrderedSet\s*\*/me=s+19,me=s+19
+"""""""""""""""""""
+" NSPathUtilities.h
+syn keyword objcEnum NSSearchPathDirectory
+syn keyword objcEnumValue NSApplicationDirectory NSDemoApplicationDirectory NSDeveloperApplicationDirectory NSAdminApplicationDirectory NSLibraryDirectory NSDeveloperDirectory NSUserDirectory NSDocumentationDirectory NSDocumentDirectory NSCoreServiceDirectory NSAutosavedInformationDirectory NSDesktopDirectory NSCachesDirectory NSApplicationSupportDirectory NSDownloadsDirectory NSInputMethodsDirectory NSMoviesDirectory NSMusicDirectory NSPicturesDirectory NSPrinterDescriptionDirectory NSSharedPublicDirectory NSPreferencePanesDirectory NSApplicationScriptsDirectory NSItemReplacementDirectory NSAllApplicationsDirectory NSAllLibrariesDirectory NSTrashDirectory
+syn keyword objcEnum NSSearchPathDomainMask
+syn keyword objcEnumValue NSUserDomainMask NSLocalDomainMask NSNetworkDomainMask NSSystemDomainMask NSAllDomainsMask
+" NSFileManger.h
+syn match objcClass /NSFileManager\s*\*/me=s+13,he=s+13
+syn match objcClass /NSDirectoryEnumerator\s*\*/me=s+21,he=s+21
+syn keyword objcEnum NSVolumeEnumerationOptions
+syn keyword objcEnumValue NSVolumeEnumerationSkipHiddenVolumes NSVolumeEnumerationProduceFileReferenceURLs 
+syn keyword objcEnum NSDirectoryEnumerationOptions
+syn keyword objcEnumValue NSDirectoryEnumerationSkipsSubdirectoryDescendants NSDirectoryEnumerationSkipsPackageDescendants NSDirectoryEnumerationSkipsHiddenFiles 
+syn keyword objcEnum NSFileManagerItemReplacementOptions
+syn keyword objcEnumValue NSFileManagerItemReplacementUsingNewMetadataOnly NSFileManagerItemReplacementWithoutDeletingBackupItem
+syn keyword objcNotificationValue NSUbiquityIdentityDidChangeNotification
+syn keyword objcConstVar NSFileType NSFileTypeDirectory NSFileTypeRegular NSFileTypeSymbolicLink NSFileTypeSocket NSFileTypeCharacterSpecial NSFileTypeBlockSpecial NSFileTypeUnknown NSFileSize NSFileModificationDate NSFileReferenceCount NSFileDeviceIdentifier NSFileOwnerAccountName NSFileGroupOwnerAccountName NSFilePosixPermissions NSFileSystemNumber NSFileSystemFileNumber NSFileExtensionHidden NSFileHFSCreatorCode NSFileHFSTypeCode NSFileImmutable NSFileAppendOnly NSFileCreationDate NSFileOwnerAccountID NSFileGroupOwnerAccountID NSFileBusy NSFileProtectionKey NSFileProtectionNone NSFileProtectionComplete NSFileProtectionCompleteUnlessOpen NSFileProtectionCompleteUntilFirstUserAuthentication NSFileSystemSize NSFileSystemFreeSize NSFileSystemNodes NSFileSystemFreeNodes
+" NSFileHandle.h
+syn match objcClass /NSFileHandle\s*\*/me=s+12,he=s+12
+syn keyword objcExceptionValue NSFileHandleOperationException
+syn keyword objcNotificationValue NSFileHandleReadCompletionNotification NSFileHandleReadToEndOfFileCompletionNotification NSFileHandleConnectionAcceptedNotification NSFileHandleDataAvailableNotification NSFileHandleNotificationDataItem NSFileHandleNotificationFileHandleItem NSFileHandleNotificationMonitorModes
+syn match objcClass /NSPipe\s*\*/me=s+6,he=s+6
+""""""""""""
+" NSLocale.h
+syn match objcClass /NSLocale\s*\*/me=s+8,he=s+8
+syn keyword objcEnum NSLocaleLanguageDirection
+syn keyword objcEnumValue NSLocaleLanguageDirectionUnknown NSLocaleLanguageDirectionLeftToRight NSLocaleLanguageDirectionRightToLeft NSLocaleLanguageDirectionTopToBottom NSLocaleLanguageDirectionBottomToTop
+syn keyword objcNotificationValue NSCurrentLocaleDidChangeNotification
+syn keyword objcConstVar NSLocaleIdentifier NSLocaleLanguageCode NSLocaleCountryCode NSLocaleScriptCode NSLocaleVariantCode NSLocaleExemplarCharacterSet NSLocaleCalendar NSLocaleCollationIdentifier NSLocaleUsesMetricSystem NSLocaleMeasurementSystem NSLocaleDecimalSeparator NSLocaleGroupingSeparator NSLocaleCurrencySymbol NSLocaleCurrencyCode NSLocaleCollatorIdentifier NSLocaleQuotationBeginDelimiterKey NSLocaleQuotationEndDelimiterKey NSLocaleAlternateQuotationBeginDelimiterKey NSLocaleAlternateQuotationEndDelimiterKey NSGregorianCalendar NSBuddhistCalendar NSChineseCalendar NSHebrewCalendar NSIslamicCalendar NSIslamicCivilCalendar NSJapaneseCalendar NSRepublicOfChinaCalendar NSPersianCalendar NSIndianCalendar NSISO8601Calendar 
+" NSFormatter.h
+syn match objcClass /NSFormatter\s*\*/me=s+11,he=s+11
+" NSNumberFormatter.h
+syn match objcClass /NSNumberFormatter\s*\*/me=s+17,he=s+17
+syn keyword objcEnum NSNumberFormatterStyle
+syn keyword objcEnumValue NSNumberFormatterNoStyle NSNumberFormatterDecimalStyle NSNumberFormatterCurrencyStyle NSNumberFormatterPercentStyle NSNumberFormatterScientificStyle NSNumberFormatterSpellOutStyle
+syn keyword objcEnum NSNumberFormatterBehavior
+syn keyword objcEnumValue NSNumberFormatterBehaviorDefault NSNumberFormatterBehavior10_0 NSNumberFormatterBehavior10_4
+syn keyword objcEnum NSNumberFormatterPadPosition
+syn keyword objcEnumValue NSNumberFormatterPadBeforePrefix NSNumberFormatterPadAfterPrefix NSNumberFormatterPadBeforeSuffix NSNumberFormatterPadAfterSuffix
+syn keyword objcEnum NSNumberFormatterRoundingMode
+syn keyword objcEnumValue NSNumberFormatterRoundCeiling NSNumberFormatterRoundFloor NSNumberFormatterRoundDown NSNumberFormatterRoundUp NSNumberFormatterRoundHalfEven NSNumberFormatterRoundHalfDown NSNumberFormatterRoundHalfUp
+" NSDateFormatter.h
+syn match objcClass /NSDateFormatter\s*\*/me=s+15,he=s+15
+syn keyword objcEnum NSDateFormatterStyle
+syn keyword objcEnumValue NSDateFormatterNoStyle NSDateFormatterShortStyle NSDateFormatterMediumStyle NSDateFormatterLongStyle NSDateFormatterFullStyle
+syn keyword objcEnum NSDateFormatterBehavior
+syn keyword objcEnumValue NSDateFormatterBehaviorDefault NSDateFormatterBehavior10_0 NSDateFormatterBehavior10_4
+" NSCalendar.h
+syn match objcClass /NSCalendar\s*\*/me=s+10,he=s+10
+syn keyword objcEnum NSCalendarUnit
+syn keyword objcEnumValue NSEraCalendarUnit NSYearCalendarUnit NSMonthCalendarUnit NSDayCalendarUnit NSHourCalendarUnit NSMinuteCalendarUnit NSSecondCalendarUnit NSWeekCalendarUnit NSWeekdayCalendarUnit NSWeekdayOrdinalCalendarUnit NSQuarterCalendarUnit NSWeekOfMonthCalendarUnit NSWeekOfYearCalendarUnit NSYearForWeekOfYearCalendarUnit NSCalendarCalendarUnit NSTimeZoneCalendarUnit
+syn keyword objcEnumValue NSWrapCalendarComponents NSUndefinedDateComponent
+syn match objcClass /NSDateComponents\s*\*/me=s+16,he=s+16
+" NSTimeZone.h
+syn match objcClass /NSTimeZone\s*\*/me=s+10,he=s+10
+syn keyword objcEnum NSTimeZoneNameStyle
+syn keyword objcEnumValue NSTimeZoneNameStyleStandard NSTimeZoneNameStyleShortStandard NSTimeZoneNameStyleDaylightSaving NSTimeZoneNameStyleShortDaylightSaving NSTimeZoneNameStyleGeneric NSTimeZoneNameStyleShortGeneric
+syn keyword objcNotificationValue NSSystemTimeZoneDidChangeNotification
+"""""""""""
+" NSCoder.h
+syn match objcClass /NSCoder\s*\*/me=s+7,he=s+7
+" NSArchiver.h
+syn match objcClass /NSArchiver\s*\*/me=s+10,he=s+10
+syn match objcClass /NSUnarchiver\s*\*/me=s+12,he=s+12
+syn keyword objcExceptionValue NSInconsistentArchiveException
+" NSKeyedArchiver.h
+syn match objcClass /NSKeyedArchiver\s*\*/me=s+15,he=s+15
+syn match objcClass /NSKeyedUnarchiver\s*\*/me=s+17,he=s+17
+syn keyword objcExceptionValue NSInvalidArchiveOperationException NSInvalidUnarchiveOperationException
+""""""""""""""""""
+" NSPropertyList.h
+syn keyword objcEnum NSPropertyListMutabilityOptions
+syn keyword objcEnumValue NSPropertyListImmutable NSPropertyListMutableContainers NSPropertyListMutableContainersAndLeaves
+syn keyword objcEnum NSPropertyListFormat
+syn keyword objcEnumValue NSPropertyListOpenStepFormat NSPropertyListXMLFormat_v1_0 NSPropertyListBinaryFormat_v1_0
+syn keyword objcType NSPropertyListReadOptions NSPropertyListWriteOptions
+" NSUserDefaults.h
+syn match objcClass /NSUserDefaults\s*\*/me=s+14,he=s+14
+syn keyword objcConstVar NSGlobalDomain NSArgumentDomain NSRegistrationDomain
+syn keyword objcNotificationValue NSUserDefaultsDidChangeNotification
+" NSBundle.h
+syn match objcClass /NSBundle\s*\*/me=s+8,he=s+8
+syn keyword objcEnumValue NSBundleExecutableArchitectureI386 NSBundleExecutableArchitecturePPC NSBundleExecutableArchitectureX86_64 NSBundleExecutableArchitecturePPC64
+syn keyword objcNotificationValue NSBundleDidLoadNotification NSLoadedClasses
+"""""""""""""""""
+" NSProcessInfo.h
+syn match objcClass /NSProcessInfo\s*\*/me=s+13,he=s+13
+syn keyword objcEnumValue NSWindowsNTOperatingSystem NSWindows95OperatingSystem NSSolarisOperatingSystem NSHPUXOperatingSystem NSMACHOperatingSystem NSSunOSOperatingSystem NSOSF1OperatingSystem
+" NSTask.h
+syn match objcClass /NSTask\s*\*/me=s+6,he=s+6
+syn keyword objcEnum NSTaskTerminationReason
+syn keyword objcEnumValue NSTaskTerminationReasonExit NSTaskTerminationReasonUncaughtSignal
+syn keyword objcNotificationValue NSTaskDidTerminateNotification
+" NSThread.h
+syn match objcClass /NSThread\s*\*/me=s+8,he=s+8
+syn keyword objcNotificationValue NSWillBecomeMultiThreadedNotification NSDidBecomeSingleThreadedNotification NSThreadWillExitNotification
+" NSLock.h
+syn match objcClass /NSLock\s*\*/me=s+6,he=s+6
+syn match objcClass /NSConditionLock\s*\*/me=s+15,he=s+15
+syn match objcClass /NSRecursiveLock\s*\*/me=s+15,he=s+15
+" NSDictributedLock
+syn match objcClass /NSDistributedLock\s*\*/me=s+17,he=s+17
+" NSOperation.h
+""""""""""""""""
+syn match objcClass /NSOperation\s*\*/me=s+11,he=s+11
+syn keyword objcEnum NSOperationQueuePriority
+syn keyword objcEnumValue NSOperationQueuePriorityVeryLow NSOperationQueuePriorityLow NSOperationQueuePriorityNormal NSOperationQueuePriorityHigh NSOperationQueuePriorityVeryHigh
+syn match objcClass /NSBlockOperation\s*\*/me=s+16,he=s+16
+syn match objcClass /NSInvocationOperation\s*\*/me=s+21,he=s+21
+syn keyword objcExceptionValue NSInvocationOperationVoidResultException NSInvocationOperationCancelledException
+syn match objcClass /NSOperationQueue\s*\*/me=s+16,he=s+16
+syn keyword objcEnumValue NSOperationQueueDefaultMaxConcurrentOperationCount
+" NSConnection.h
+syn match objcClass /NSConnection\s*\*/me=s+12,he=s+12
+syn keyword objcConstVar NSConnectionReplyMode
+syn keyword objcNotificationValue NSConnectionDidDieNotification NSConnectionDidInitializeNotification
+syn keyword objcExceptionValue NSFailedAuthenticationException
+" NSPort.h
+syn match objcClass /NSPort\s*\*/me=s+6,he=s+6
+syn keyword objcType NSSocketNativeHandle
+syn keyword objcNotificationValue NSPortDidBecomeInvalidNotification
+syn match objcClass /NSMachPort\s*\*/me=s+10,he=s+10
+syn keyword objcEnumValue NSMachPortDeallocateNone NSMachPortDeallocateSendRight NSMachPortDeallocateReceiveRight
+syn match objcClass /NSMessagePort\s*\*/me=s+13,he=s+13
+syn match objcClass /NSSocketPort\s*\*/me=s+12,he=s+12
+" NSPortMessage.h
+syn match objcClass /NSPortMessage\s*\*/me=s+13,he=s+13
+" NSDistantObject.h
+syn match objcClass /NSDistantObject\s*\*/me=s+15,he=s+15
+" NSPortNameServer.h
+syn match objcClass /NSPortNameServer\s*\*/me=s+16,he=s+16
+syn match objcClass /NSMessagePortNameServer\s*\*/me=s+23,he=s+23
+syn match objcClass /NSSocketPortNameServer\s*\*/me=s+22,he=s+22
+" NSHost.h
+syn match objcClass /NSHost\s*\*/me=s+6,he=s+6
+" NSInvocation.h
+syn match objcClass /NSInvocation\s*\*/me=s+12,he=s+12
+" NSMethodSignature.h
+syn match objcClass /NSMethodSignature\s*\*/me=s+17,he=s+17
+"""""
+" NSScanner.h
+syn match objcClass /NSScanner\s*\*/me=s+9,he=s+9
+" NSTimer.h
+syn match objcClass /NSTimer\s*\*/me=s+7,he=s+7
+" NSAutoreleasePool.h
+syn match objcClass /NSAutoreleasePool\s*\*/me=s+17,he=s+17
+" NSRunLoop.h
+syn match objcClass /NSRunLoop\s*\*/me=s+9,he=s+9
+syn keyword objcConstVar NSDefaultRunLoopMode NSRunLoopCommonModes
+" NSNull.h
+syn match objcClass /NSNull\s*\*/me=s+6,he=s+6
+" NSProxy.h
+syn match objcClass /NSProxy\s*\*/me=s+7,he=s+7
+" NSObject.h
+syn match objcClass /NSObject\s*\*/me=s+8,he=s+8
+
+""" Default Highlighting
+hi def link objcPreProcMacro                cConstant
+hi def link objcPrincipalType               cType
+hi def link objcUsefulTerm                  cConstant
+hi def link objcImport                      cInclude
+hi def link objcImported                    cString
+hi def link objcObjDef                      cOperator
+hi def link objcProtocol                    cOperator
+hi def link objcProperty                    cOperator
+hi def link objcIvarScope                   cOperator
+hi def link objcInternalRep                 cOperator
+hi def link objcException                   cOperator
+hi def link objcThread                      cOperator
+hi def link objcPool                        cOperator
+hi def link objcModuleImport                cOperator
+hi def link objcSpecial                     cSpecial
+hi def link objcString                      cString
+hi def link objcHiddenArgument              cStatement
+hi def link objcBlocksQualifier             cStorageClass
+hi def link objcObjectLifetimeQualifier     cStorageClass
+hi def link objcTollFreeBridgeQualifier     cStorageClass
+hi def link objcRemoteMessagingQualifier    cStorageClass
+hi def link objcFastEnumKeyword             cStatement
+hi def link objcLiteralSyntaxNumber         cNumber
+hi def link objcLiteralSyntaxChar           cCharacter
+hi def link objcLiteralSyntaxSpecialChar    cCharacter
+hi def link objcLiteralSyntaxOp             cOperator
+hi def link objcDeclPropAccessorName        cConstant
+hi def link objcDeclPropAccessorType        cConstant
+hi def link objcDeclPropAssignSemantics     cConstant
+hi def link objcDeclPropAtomicity           cConstant
+hi def link objcDeclPropARC                 cConstant
+hi def link objcInstanceMethod              Function
+hi def link objcClassMethod                 Function
+hi def link objcType                        cType
+hi def link objcClass                       cType
+hi def link objcMacro                       cConstant
+hi def link objcEnum                        cType
+hi def link objcEnumValue                   cConstant
+hi def link objcExceptionValue              cConstant
+hi def link objcNotificationValue           cConstant
+hi def link objcConstVar                    cConstant
 
+""" Final step
 let b:current_syntax = "objc"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
-" vim: ts=8
+" vim: ts=8 sw=2 sts=2
index 27eb390..24116f0 100644 (file)
@@ -5,9 +5,9 @@
 "               Karl-Heinz Sylla  <Karl-Heinz.Sylla@gmd.de>
 "               Issac Trotts      <ijtrotts@ucdavis.edu>
 " URL:          http://www.ocaml.info/vim/syntax/ocaml.vim
-" Last Change:  2007 Apr 13 - Added highlighting of nativeints (MM)
-"               2006 Oct 09 - More highlighting improvements to numbers (MM)
-"               2006 Sep 19 - Improved highlighting of numbers (Florent Monnier)
+" Last Change:  2012 May 12 - Added Dominique Pellé's spell checking patch (MM)
+"               2012 Feb 01 - Improved module path highlighting (MM)
+"               2010 Oct 11 - Added highlighting of lnot (MM, thanks to Erick Matsen)
 
 " A minor patch was applied to the official version so that object/end
 " can be distinguished from begin/end, which is used for indentation,
@@ -24,14 +24,14 @@ endif
 " OCaml is case sensitive.
 syn case match
 
+" Access to the method of an object
+syn match    ocamlMethod       "#"
+
 " Script headers highlighted like comments
-syn match    ocamlComment   "^#!.*"
+syn match    ocamlComment   "^#!.*" contains=@Spell
 
 " Scripting directives
-syn match    ocamlScript "^#\<\(quit\|labels\|warnings\|directory\|cd\|load\|use\|install_printer\|remove_printer\|require\|thread\|trace\|untrace\|untrace_all\|print_depth\|print_length\)\>"
-
-" Script headers highlighted like comments
-syn match    ocamlComment      "^#!.*"
+syn match    ocamlScript "^#\<\(quit\|labels\|warnings\|directory\|cd\|load\|use\|install_printer\|remove_printer\|require\|thread\|trace\|untrace\|untrace_all\|print_depth\|print_length\|camlp4o\)\>"
 
 " lowercase identifier - the standard way to match
 syn match    ocamlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/
@@ -69,7 +69,7 @@ syn cluster  ocamlAllErrs contains=ocamlBraceErr,ocamlBrackErr,ocamlParenErr,oca
 
 syn cluster  ocamlAENoParen contains=ocamlBraceErr,ocamlBrackErr,ocamlCommentErr,ocamlCountErr,ocamlDoErr,ocamlDoneErr,ocamlEndErr,ocamlThenErr
 
-syn cluster  ocamlContained contains=ocamlTodo,ocamlPreDef,ocamlModParam,ocamlModParam1,ocamlPreMPRestr,ocamlMPRestr,ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3,ocamlModRHS,ocamlFuncWith,ocamlFuncStruct,ocamlModTypeRestr,ocamlModTRWith,ocamlWith,ocamlWithRest,ocamlModType,ocamlFullMod
+syn cluster  ocamlContained contains=ocamlTodo,ocamlPreDef,ocamlModParam,ocamlModParam1,ocamlPreMPRestr,ocamlMPRestr,ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3,ocamlModRHS,ocamlFuncWith,ocamlFuncStruct,ocamlModTypeRestr,ocamlModTRWith,ocamlWith,ocamlWithRest,ocamlModType,ocamlFullMod,ocamlVal
 
 
 " Enclosing delimiters
@@ -80,7 +80,7 @@ syn region   ocamlEncl transparent matchgroup=ocamlKeyword start="\[|" matchgrou
 
 
 " Comments
-syn region   ocamlComment start="(\*" end="\*)" contains=ocamlComment,ocamlTodo
+syn region   ocamlComment start="(\*" end="\*)" contains=@Spell,ocamlComment,ocamlTodo
 syn keyword  ocamlTodo contained TODO FIXME XXX NOTE
 
 
@@ -109,23 +109,20 @@ syn region   ocamlNone matchgroup=ocamlKeyword start="\<if\>" matchgroup=ocamlKe
 
 "" Modules
 
-" "struct"
-syn region   ocamlStruct matchgroup=ocamlModule start="\<struct\>" matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
-
 " "sig"
 syn region   ocamlSig matchgroup=ocamlModule start="\<sig\>" matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr,ocamlModule
 syn region   ocamlModSpec matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contained contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlModTRWith,ocamlMPRestr
 
 " "open"
-syn region   ocamlNone matchgroup=ocamlKeyword start="\<open\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*\>" contains=@ocamlAllErrs,ocamlComment
+syn region   ocamlNone matchgroup=ocamlKeyword start="\<open\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\( *\. *\u\(\w\|'\)*\)*\>" contains=@ocamlAllErrs,ocamlComment
 
 " "include"
 syn match    ocamlKeyword "\<include\>" skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
 
 " "module" - somewhat complicated stuff ;-)
 syn region   ocamlModule matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlPreDef
-syn region   ocamlPreDef start="."me=e-1 matchgroup=ocamlKeyword end="\l\|="me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlModTypeRestr,ocamlModTRWith nextgroup=ocamlModPreRHS
-syn region   ocamlModParam start="([^*]" end=")" contained contains=@ocamlAENoParen,ocamlModParam1
+syn region   ocamlPreDef start="."me=e-1 matchgroup=ocamlKeyword end="\l\|=\|)"me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlModTypeRestr,ocamlModTRWith nextgroup=ocamlModPreRHS
+syn region   ocamlModParam start="([^*]" end=")" contained contains=@ocamlAENoParen,ocamlModParam1,ocamlVal
 syn match    ocamlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=ocamlPreMPRestr
 
 syn region   ocamlPreMPRestr start="."me=e-1 end=")"me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlMPRestr,ocamlModTypeRestr
@@ -133,22 +130,27 @@ syn region   ocamlPreMPRestr start="."me=e-1 end=")"me=e-1 contained contains=@o
 syn region   ocamlMPRestr start=":" end="."me=e-1 contained contains=@ocamlComment skipwhite skipempty nextgroup=ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3
 syn region   ocamlMPRestr1 matchgroup=ocamlModule start="\ssig\s\=" matchgroup=ocamlModule end="\<end\>" contained contains=ALLBUT,@ocamlContained,ocamlEndErr,ocamlModule
 syn region   ocamlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=ocamlKeyword end="->" contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam skipwhite skipempty nextgroup=ocamlFuncWith,ocamlMPRestr2
-syn match    ocamlMPRestr3 "\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*" contained
+syn match    ocamlMPRestr3 "\w\(\w\|'\)*\( *\. *\w\(\w\|'\)*\)*" contained
 syn match    ocamlModPreRHS "=" contained skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
-syn region   ocamlModRHS start="." end=".\w\|([^*]"me=e-2 contained contains=ocamlComment skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
-syn match    ocamlFullMod "\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=ocamlFuncWith
+syn keyword  ocamlKeyword val
+syn region   ocamlVal matchgroup=ocamlKeyword start="\<val\>" matchgroup=ocamlLCIdentifier end="\<\l\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment,ocamlFullMod skipwhite skipempty nextgroup=ocamlMPRestr
+syn region   ocamlModRHS start="." end=". *\w\|([^*]"me=e-2 contained contains=ocamlComment skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
+syn match    ocamlFullMod "\<\u\(\w\|'\)*\( *\. *\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=ocamlFuncWith
 
 syn region   ocamlFuncWith start="([^*]"me=e-1 end=")" contained contains=ocamlComment,ocamlWith,ocamlFuncStruct skipwhite skipempty nextgroup=ocamlFuncWith
 syn region   ocamlFuncStruct matchgroup=ocamlModule start="[^a-zA-Z]struct\>"hs=s+1 matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
 
-syn match    ocamlModTypeRestr "\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contained
+syn match    ocamlModTypeRestr "\<\w\(\w\|'\)*\( *\. *\w\(\w\|'\)*\)*\>" contained
 syn region   ocamlModTRWith start=":\s*("hs=s+1 end=")" contained contains=@ocamlAENoParen,ocamlWith
-syn match    ocamlWith "\<\(\u\(\w\|'\)*\.\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=ocamlWithRest
+syn match    ocamlWith "\<\(\u\(\w\|'\)* *\. *\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=ocamlWithRest
 syn region   ocamlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@ocamlContained
 
+" "struct"
+syn region   ocamlStruct matchgroup=ocamlModule start="\<\(module\s\+\)\=struct\>" matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+
 " "module type"
-syn region   ocamlKeyword start="\<module\>\s*\<type\>" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
-syn match    ocamlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s
+syn region   ocamlKeyword start="\<module\>\s*\<type\>\(\s*\<of\>\)\=" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
+syn match    ocamlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s+1 skipwhite skipempty nextgroup=ocamlFullMod
 
 syn keyword  ocamlKeyword  and as assert class
 syn keyword  ocamlKeyword  constraint else
@@ -159,7 +161,7 @@ syn keyword  ocamlKeyword  land lazy let match
 syn keyword  ocamlKeyword  method mutable new of
 syn keyword  ocamlKeyword  parser private raise rec
 syn keyword  ocamlKeyword  try type
-syn keyword  ocamlKeyword  val virtual when while with
+syn keyword  ocamlKeyword  virtual when while with
 
 if exists("ocaml_revised")
   syn keyword  ocamlKeyword  do value
@@ -174,7 +176,7 @@ syn keyword  ocamlType     array bool char exn float format format4
 syn keyword  ocamlType     int int32 int64 lazy_t list nativeint option
 syn keyword  ocamlType     string unit
 
-syn keyword  ocamlOperator asr lor lsl lsr lxor mod not
+syn keyword  ocamlOperator asr lnot lor lsl lsr lxor mod not
 
 syn match    ocamlConstructor  "(\s*)"
 syn match    ocamlConstructor  "\[\s*\]"
@@ -186,12 +188,13 @@ syn match    ocamlConstructor  "\u\(\w\|'\)*\>"
 syn match    ocamlConstructor  "`\w\(\w\|'\)*\>"
 
 " Module prefix
-syn match    ocamlModPath      "\u\(\w\|'\)*\."he=e-1
+syn match    ocamlModPath      "\u\(\w\|'\)* *\."he=e-1
 
 syn match    ocamlCharacter    "'\\\d\d\d'\|'\\[\'ntbr]'\|'.'"
+syn match    ocamlCharacter    "'\\x\x\x'"
 syn match    ocamlCharErr      "'\\\d\d'\|'\\\d'"
 syn match    ocamlCharErr      "'\\[^\'ntbr]'"
-syn region   ocamlString       start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn region   ocamlString       start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell
 
 syn match    ocamlFunDef       "->"
 syn match    ocamlRefAssign    ":="
@@ -220,7 +223,7 @@ syn match    ocamlNumber        "\<-\=\d\(_\|\d\)*[l|L|n]\?\>"
 syn match    ocamlNumber        "\<-\=0[x|X]\(\x\|_\)\+[l|L|n]\?\>"
 syn match    ocamlNumber        "\<-\=0[o|O]\(\o\|_\)\+[l|L|n]\?\>"
 syn match    ocamlNumber        "\<-\=0[b|B]\([01]\|_\)\+[l|L|n]\?\>"
-syn match    ocamlFloat         "\<-\=\d\(_\|\d\)*\.\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
+syn match    ocamlFloat         "\<-\=\d\(_\|\d\)*\.\?\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
 
 " Labels
 syn match    ocamlLabel        "\~\(\l\|_\)\(\w\|'\)*"lc=1
@@ -294,6 +297,7 @@ if version >= 508 || !exists("did_ocaml_syntax_inits")
 
   HiLink ocamlConstructor  Constant
 
+  HiLink ocamlVal          Keyword
   HiLink ocamlModPreRHS    Keyword
   HiLink ocamlMPRestr2    Keyword
   HiLink ocamlKeyword     Keyword
index aa3cb9e..1b07e35 100644 (file)
@@ -1,6 +1,7 @@
 " Vim syntax file
 " Language:    OPL
 " Maintainer:  Czo <Olivier.Sirol@lip6.fr>
+" Last Change: 2012 Feb 03 by Thilo Six
 " $Id: opl.vim,v 1.1 2004/06/13 17:34:11 vimboss Exp $
 
 " Open Psion Language... (EPOC16/EPOC32)
@@ -13,6 +14,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " case is not significant
 syn case ignore
 
@@ -93,4 +97,6 @@ endif
 
 let b:current_syntax = "opl"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index 46cd3c3..e3c8ba8 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         pam(8) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2011-08-03
 
 
 if exists("b:current_syntax")
@@ -33,7 +33,7 @@ syn match   pamconfTypeLineCont     contained '\\$'
                                     \ pamconfTypeLineCont skipwhite skipnl
 
 syn keyword pamconfControl          contained requisite required sufficient
-                                    \ optional
+                                    \ optional include substack
                                     \ nextgroup=pamconfMPath,
                                     \ pamconfControlLineContH skipwhite
 
@@ -57,7 +57,9 @@ syn keyword pamconfControlValues    contained success open_err symbol_err
                                     \ bad_item and default
                                     \ nextgroup=pamconfControlValueEq
 
-syn match   pamconfControlValueEq   contained '=' nextgroup=pamconfControlAction
+syn match   pamconfControlValueEq   contained '='
+                                    \ nextgroup=pamconfControlActionN,
+                                    \           pamconfControlAction
 
 syn match   pamconfControlActionN   contained '\d\+\>'
                                     \ nextgroup=pamconfControlValues,
index 5510c4b..c09373a 100644 (file)
@@ -1,22 +1,24 @@
 " Vim syntax file
-" Language:     Perl 5
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl/tree/master
-" Last Change:  2010-08-10
-" Contributors: Andy Lester <andy@petdance.com>
-"               Hinrik Ã–rn Sigurðsson <hinrik.sig@gmail.com>
-"               Lukas Mai <l.mai.web.de>
-"               Nick Hibma <nick@van-laarhoven.org>
-"               Sonia Heimann <niania@netsurf.org>
-"               and many others.
+" Language:      Perl 5
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl/tree/master
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-23
+" Contributors:  Andy Lester <andy@petdance.com>
+"                Hinrik Ã–rn Sigurðsson <hinrik.sig@gmail.com>
+"                Lukas Mai <l.mai.web.de>
+"                Nick Hibma <nick@van-laarhoven.org>
+"                Sonia Heimann <niania@netsurf.org>
+"                Rob Hoelz <rob@hoelz.ro>
+"                and many others.
 "
-" Please download most recent version first before mailing
+" Please download the most recent version first, before mailing
 " any comments.
 "
 " The following parameters are available for tuning the
 " perl syntax highlighting, with defaults given:
 "
-" unlet perl_include_pod
+" let perl_include_pod = 1
 " unlet perl_no_scope_in_variables
 " unlet perl_no_extended_vars
 " unlet perl_string_as_statement
 " let perl_sync_dist = 100
 " unlet perl_fold
 " unlet perl_fold_blocks
-" let perl_nofold_packages = 1
+" unlet perl_nofold_packages
 " let perl_nofold_subs = 1
+" unlet perl_fold_anonymous_subs
 
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
+if exists('&regexpengine')
+  let s:regexpengine=&regexpengine
+  set regexpengine=1
+endif
 
 " POD starts with ^=<word> and ends with ^=cut
 
-if exists("perl_include_pod")
+if !exists("perl_include_pod") || perl_include_pod == 1
   " Include a while extra syntax file
   syn include @Pod syntax/pod.vim
   unlet b:current_syntax
   if exists("perl_fold")
-    syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold
-    syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold
+    syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold extend
+    syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold extend
   else
     syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend
     syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend
@@ -57,16 +67,19 @@ endif
 
 
 syn cluster perlTop            contains=TOP
-syn region  perlGenericBlock   matchgroup=perlGenericBlock start="{" end="}" contained transparent
 
+syn region perlBraces start="{" end="}" transparent extend
 
 " All keywords
 "
 syn match perlConditional              "\<\%(if\|elsif\|unless\|given\|when\|default\)\>"
-syn match perlConditional              "\<else\>" nextgroup=perlElseIfError skipwhite skipnl skipempty
+syn match perlConditional              "\<else\%(\%(\_s\*if\>\)\|\>\)" contains=perlElseIfError skipwhite skipnl skipempty
 syn match perlRepeat                   "\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"
 syn match perlOperator                 "\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"
-syn match perlControl                  "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>"
+" for some reason, adding this as the nextgroup for perlControl fixes BEGIN
+" folding issues...
+syn match perlFakeGroup                "" contained
+syn match perlControl                  "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup
 
 syn match perlStatementStorage         "\<\%(my\|our\|local\|state\)\>"
 syn match perlStatementControl         "\<\%(return\|last\|next\|redo\|goto\|break\)\>"
@@ -82,20 +95,20 @@ syn match perlStatementVector               "\<vec\>"
 syn match perlStatementFiles           "\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>"
 syn match perlStatementFiles           "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
 syn match perlStatementFlow            "\<\%(caller\|die\|dump\|eval\|exit\|wantarray\)\>"
-syn match perlStatementInclude         "\<require\>"
+syn match perlStatementInclude         "\<\%(require\|import\)\>"
 syn match perlStatementInclude         "\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|autouse\|parent\|base\|big\%(int\|num\|rat\)\|blib\|bytes\|charnames\|constant\|diagnostics\|encoding\%(::warnings\)\=\|feature\|fields\|filetest\|if\|integer\|less\|lib\|locale\|mro\|open\|ops\|overload\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\="
 syn match perlStatementProc            "\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>"
-syn match perlStatementSocket          "\<\%(acept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>"
+syn match perlStatementSocket          "\<\%(accept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>"
 syn match perlStatementIPC             "\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>"
 syn match perlStatementNetwork         "\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>"
 syn match perlStatementPword           "\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>"
 syn match perlStatementTime            "\<\%(gmtime\|localtime\|time\)\>"
 
-syn match perlStatementMisc            "\<\%(warn\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
+syn match perlStatementMisc            "\<\%(warn\|format\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
 
-syn keyword perlTodo                   TODO TBD FIXME XXX NOTE contained
+syn keyword perlTodo                   TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained
 
-syn region perlStatementIndirObjWrap   matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|print\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlGenericBlock
+syn region perlStatementIndirObjWrap   matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlBraces extend
 
 syn match perlLabel      "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
 
@@ -140,20 +153,20 @@ else
 endif
 
 if !exists("perl_no_extended_vars")
-  syn cluster perlExpr         contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ,perlArrow,perlGenericBlock
+  syn cluster perlExpr         contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ,perlArrow,perlBraces
   syn region perlArrow         matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
   syn region perlArrow         matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
   syn region perlArrow         matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
   syn match  perlArrow         "->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
   syn region perlArrow         matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
-  syn region perlVarBlock      matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn region perlVarBlock2     matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn match  perlVarPlain2     "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn match  perlVarPlain      "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn region perlVarMember     matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn match  perlVarSimpleMember       "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained
+  syn region perlVarBlock      matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
+  syn region perlVarBlock2     matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
+  syn match  perlVarPlain2     "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
+  syn match  perlVarPlain      "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
+  syn region perlVarMember     matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
+  syn match  perlVarSimpleMember       "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained extend
   syn match  perlVarSimpleMemberName   "\I\i*" contained
-  syn region perlVarMember     matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn region perlVarMember     matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
   syn match perlPackageConst   "__PACKAGE__" nextgroup=perlMethod
   syn match  perlMethod                "->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod
 endif
@@ -168,13 +181,13 @@ syn match  perlFiledescStatement  "\u\w*" contained
 
 " Special characters in strings and matches
 syn match  perlSpecialString   "\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend
-syn match  perlSpecialStringU2 "\\." extend contained transparent contains=NONE
+syn match  perlSpecialStringU2 "\\." extend contained contains=NONE
 syn match  perlSpecialStringU  "\\\\" contained
 syn match  perlSpecialMatch    "\\[1-9]" contained extend
 syn match  perlSpecialMatch    "\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained
 syn match  perlSpecialMatch    "\\k\%(<\h\w*>\|'\h\w*'\)" contained
 syn match  perlSpecialMatch    "{\d\+\%(,\%(\d\+\)\=\)\=}" contained
-syn match  perlSpecialMatch    "\[[]-]\=[^\[\]]*[]-]\=\]" contained
+syn match  perlSpecialMatch    "\[[]-]\=[^\[\]]*[]-]\=\]" contained extend
 syn match  perlSpecialMatch    "[+*()?.]" contained
 syn match  perlSpecialMatch    "(?[#:=!]" contained
 syn match  perlSpecialMatch    "(?[impsx]*\%(-[imsx]\+\)\=)" contained
@@ -186,10 +199,9 @@ syn match  perlSpecialMatch        "(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\
 "
 " Highlight lines with only whitespace (only in blank delimited here documents) as errors
 syn match  perlNotEmptyLine    "^\s\+$" contained
-" Highlight '} else if (...) {', it should be '} else { if (...) { ' or
-" '} elsif (...) {'.
-syn match perlElseIfError      "\s\+if" contained
-syn keyword perlElseIfError    elseif
+" Highlight "} else if (...) {", it should be "} else { if (...) { " or "} elsif (...) {"
+syn match perlElseIfError      "else\_s*if" containedin=perlConditional
+syn keyword perlElseIfError    elseif containedin=perlConditional
 
 " Variable interpolation
 "
@@ -211,56 +223,56 @@ syn region  perlShellCommand      matchgroup=perlMatchStartEnd start="`" end="`" cont
 syn match  perlNumber  "\<\%(0\%(x\x[[:xdigit:]_]*\|b[01][01_]*\|\o[0-7_]*\|\)\|[1-9][[:digit:]_]*\)\>"
 syn match  perlFloat   "\<\d[[:digit:]_]*[eE][\-+]\=\d\+"
 syn match  perlFloat   "\<\d[[:digit:]_]*\.[[:digit:]_]*\%([eE][\-+]\=\d\+\)\="
-syn match  perlFloat   "\.[[:digit:]_]\+\%([eE][\-+]\=\d\+\)\="
+syn match  perlFloat    "\.[[:digit:]][[:digit:]_]*\%([eE][\-+]\=\d\+\)\="
 
 syn match  perlString  "\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV
 syn match  perlVStringV        "\<v" contained
 
 
-syn region perlParensSQ                start=+(+ end=+)+ extend contained transparent contains=perlParensSQ,@perlInterpSQ keepend
-syn region perlBracketsSQ      start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsSQ,@perlInterpSQ keepend
-syn region perlBracesSQ                start=+{+ end=+}+ extend contained transparent contains=perlBracesSQ,@perlInterpSQ keepend
-syn region perlAnglesSQ                start=+<+ end=+>+ extend contained transparent contains=perlAnglesSQ,@perlInterpSQ keepend
+syn region perlParensSQ                start=+(+ end=+)+ extend contained contains=perlParensSQ,@perlInterpSQ keepend
+syn region perlBracketsSQ      start=+\[+ end=+\]+ extend contained contains=perlBracketsSQ,@perlInterpSQ keepend
+syn region perlBracesSQ                start=+{+ end=+}+ extend contained contains=perlBracesSQ,@perlInterpSQ keepend
+syn region perlAnglesSQ                start=+<+ end=+>+ extend contained contains=perlAnglesSQ,@perlInterpSQ keepend
 
-syn region perlParensDQ                start=+(+ end=+)+ extend contained transparent contains=perlParensDQ,@perlInterpDQ keepend
-syn region perlBracketsDQ      start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsDQ,@perlInterpDQ keepend
-syn region perlBracesDQ                start=+{+ end=+}+ extend contained transparent contains=perlBracesDQ,@perlInterpDQ keepend
-syn region perlAnglesDQ                start=+<+ end=+>+ extend contained transparent contains=perlAnglesDQ,@perlInterpDQ keepend
+syn region perlParensDQ                start=+(+ end=+)+ extend contained contains=perlParensDQ,@perlInterpDQ keepend
+syn region perlBracketsDQ      start=+\[+ end=+\]+ extend contained contains=perlBracketsDQ,@perlInterpDQ keepend
+syn region perlBracesDQ                start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend
+syn region perlAnglesDQ                start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend
 
 
 " Simple version of searches and matches
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[cgimopsx]*+ contains=@perlInterpMatch keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[cgimopsx]*+ contains=@perlInterpMatch keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[cgimopsx]*+ contains=@perlInterpSQ keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[cgimopsx]*+ contains=@perlInterpMatch,perlParensDQ keepend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[msixpodualgc]*+ contains=@perlInterpMatch keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[msixpodualgc]*+ contains=@perlInterpMatch keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[msixpodualgc]*+ contains=@perlInterpSQ keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[msixpodualgc]*+ contains=@perlInterpMatch,perlParensDQ keepend extend
 
 " A special case for m{}, m<> and m[] which allows for comments and extra whitespace in the pattern
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[cgimopsx]*+ contains=@perlInterpMatch,perlAnglesDQ keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[msixpodualgc]*+ contains=@perlInterpMatch,perlAnglesDQ keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend extend
 
 " Below some hacks to recognise the // variant. This is virtually impossible to catch in all
 " cases as the / is used in so many other ways, but these should be the most obvious ones.
-syn region perlMatch   matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash
+syn region perlMatch   matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash extend
 
 
 " Substitutions
 " perlMatch is the first part, perlSubstitution* is the substitution part
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+  end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+  end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+  end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
-syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
-syn region perlSubstitutionGQQ         matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[ecgimopsx]*+ keepend contained contains=@perlInterpDQ
-syn region perlSubstitutionGQQ         matchgroup=perlMatchStartEnd start=+(+ end=+)[ecgimopsx]*+ contained contains=@perlInterpDQ,perlParensDQ keepend
-syn region perlSubstitutionGQQ         matchgroup=perlMatchStartEnd start=+\[+ end=+\][ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend
-syn region perlSubstitutionGQQ         matchgroup=perlMatchStartEnd start=+{+ end=+}[ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend
-syn region perlSubstitutionGQQ         matchgroup=perlMatchStartEnd start=+<+ end=+>[ecgimopsx]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend
-syn region perlSubstitutionSQ          matchgroup=perlMatchStartEnd start=+'+  end=+'[ecgimopsx]*+ contained contains=@perlInterpSQ keepend 
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+  end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+  end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+  end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
+syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
+syn region perlSubstitutionGQQ         matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[msixpodualgcer]*+ keepend contained contains=@perlInterpDQ extend
+syn region perlSubstitutionGQQ         matchgroup=perlMatchStartEnd start=+(+ end=+)[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlParensDQ keepend extend
+syn region perlSubstitutionGQQ         matchgroup=perlMatchStartEnd start=+\[+ end=+\][msixpodualgcer]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend extend
+syn region perlSubstitutionGQQ         matchgroup=perlMatchStartEnd start=+{+ end=+}[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend extend extend
+syn region perlSubstitutionGQQ         matchgroup=perlMatchStartEnd start=+<+ end=+>[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend extend
+syn region perlSubstitutionSQ          matchgroup=perlMatchStartEnd start=+'+  end=+'[msixpodualgcer]*+ contained contains=@perlInterpSQ keepend extend
 
 " Translations
 " perlMatch is the first part, perlTranslation* is the second, translator part.
@@ -270,48 +282,48 @@ syn region perlMatch      matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(
 syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
 syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
 syn region perlMatch   matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
-syn region perlTranslationGQ           matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cds]*+ contained
-syn region perlTranslationGQ           matchgroup=perlMatchStartEnd start=+(+ end=+)[cds]*+ contains=perlParensSQ contained
-syn region perlTranslationGQ           matchgroup=perlMatchStartEnd start=+\[+ end=+\][cds]*+ contains=perlBracketsSQ contained
-syn region perlTranslationGQ           matchgroup=perlMatchStartEnd start=+{+ end=+}[cds]*+ contains=perlBracesSQ contained
-syn region perlTranslationGQ           matchgroup=perlMatchStartEnd start=+<+ end=+>[cds]*+ contains=perlAnglesSQ contained
+syn region perlTranslationGQ           matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cdsr]*+ contained
+syn region perlTranslationGQ           matchgroup=perlMatchStartEnd start=+(+ end=+)[cdsr]*+ contains=perlParensSQ contained
+syn region perlTranslationGQ           matchgroup=perlMatchStartEnd start=+\[+ end=+\][cdsr]*+ contains=perlBracketsSQ contained
+syn region perlTranslationGQ           matchgroup=perlMatchStartEnd start=+{+ end=+}[cdsr]*+ contains=perlBracesSQ contained
+syn region perlTranslationGQ           matchgroup=perlMatchStartEnd start=+<+ end=+>[cdsr]*+ contains=perlAnglesSQ contained
 
 
 " Strings and q, qq, qw and qr expressions
 
-syn region perlStringUnexpanded        matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend
-syn region perlString          matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
-
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend
-
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+  end=+\z1+ contains=@perlInterpSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+  end=+#+ contains=@perlInterpSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+  end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+  end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+  end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+  end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
-
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+  end=+\z1[imosx]*+ contains=@perlInterpMatch keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+  end=+/[imosx]*+ contains=@perlInterpSlash keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+  end=+#[imosx]*+ contains=@perlInterpMatch keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+  end=+'[imosx]*+ contains=@perlInterpSQ keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+  end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend
+syn region perlStringUnexpanded        matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend extend
+syn region perlString          matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
+
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend extend
+
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+  end=+\z1+ contains=@perlInterpSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+  end=+#+ contains=@perlInterpSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+  end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+  end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+  end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+  end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
+
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+  end=+\z1[imosx]*+ contains=@perlInterpMatch keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+  end=+/[imosx]*+ contains=@perlInterpSlash keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+  end=+#[imosx]*+ contains=@perlInterpMatch keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+  end=+'[imosx]*+ contains=@perlInterpSQ keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+  end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend extend
 
 " A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+  end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+  end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend
-syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+  end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+  end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+  end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend
+syn region perlQQ              matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+  end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend extend
 
 " Constructs such as print <<EOF [...] EOF, 'here' documents
 "
@@ -319,14 +331,14 @@ syn region perlQQ         matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s
 " 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it
 " seems due to the 'auto-extending nature' of regions.
 if exists("perl_fold")
-  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ fold
-  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold
-  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold
-  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine fold
-  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*''+           end=+^$+    contains=@perlInterpSQ,perlNotEmptyLine fold
-  syn region perlAutoload      matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold
+  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ fold extend
+  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold extend
+  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold extend
+  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine fold extend
+  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*''+           end=+^$+    contains=@perlInterpSQ,perlNotEmptyLine fold extend
+  syn region perlAutoload      matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold extend
 else
-  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+    end=+^\z1$+ contains=@perlInterpDQ
+  syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ
   syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ
   syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ
   syn region perlHereDoc       matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine
@@ -349,13 +361,13 @@ if v:version == 701 && !has('patch221')  " XXX I hope that's the right one
 else
     syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained
     syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ
-    syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError
+    syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError,perlFakeGroup
     syn match perlSubAttributes "" contained nextgroup=perlSubError
     syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe
 endif
 syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained
-syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes contained contains=perlSubPrototypeError
-syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype
+syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes,perlComment contained contains=perlSubPrototypeError
+syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype,perlComment
 
 syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName
 
@@ -371,7 +383,7 @@ endif
 syn match  perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="
 
 " All other # are comments, except ^#!
-syn match  perlComment         "#.*" contains=perlTodo,@Spell
+syn match  perlComment         "#.*" contains=perlTodo,@Spell extend
 syn match  perlSharpBang       "^#!.*"
 
 " Formats
@@ -385,9 +397,11 @@ syn match  perlFormatField "@$" contained
 
 " __END__ and __DATA__ clauses
 if exists("perl_fold")
-  syntax region perlDATA               start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA fold
+  syntax region perlDATA               start="^__DATA__$" skip="." end="." fold
+  syntax region perlDATA               start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA fold
 else
-  syntax region perlDATA               start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA
+  syntax region perlDATA               start="^__DATA__$" skip="." end="."
+  syntax region perlDATA               start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA
 endif
 
 "
@@ -400,8 +414,13 @@ if exists("perl_fold")
     syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
   endif
   if !exists("perl_nofold_subs")
-    syn region perlSubFold     start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
-    syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
+    if exists("perl_fold_anonymous_subs") && perl_fold_anonymous_subs
+      syn region perlSubFold     start="\<sub\>[^\n;]*{" end="}" transparent fold keepend extend
+      syn region perlSubFold     start="\<\%(BEGIN\|END\|CHECK\|INIT\)\>\s*{" end="}" transparent fold keepend
+    else
+      syn region perlSubFold     start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
+      syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
+    endif
   endif
 
   if exists("perl_fold_blocks")
@@ -418,6 +437,9 @@ endif
 
 command -nargs=+ HiLink hi def link <args>
 
+" NOTE: If you're linking new highlight groups to perlString, please also put
+"       them into b:match_skip in ftplugin/perl.vim.
+
 " The default highlighting.
 HiLink perlSharpBang           PreProc
 HiLink perlControl             PreProc
@@ -505,6 +527,22 @@ HiLink perlSpecialStringU  perlSpecial
 HiLink perlSpecialMatch                perlSpecial
 HiLink perlDATA                        perlComment
 
+" NOTE: Due to a bug in Vim (or more likely, a misunderstanding on my part),
+"       I had to remove the transparent property from the following regions
+"       in order to get them to highlight correctly.  Feel free to remove
+"       these and reinstate the transparent property if you know how.
+HiLink perlParensSQ            perlString
+HiLink perlBracketsSQ          perlString
+HiLink perlBracesSQ            perlString
+HiLink perlAnglesSQ            perlString
+
+HiLink perlParensDQ            perlString
+HiLink perlBracketsDQ          perlString
+HiLink perlBracesDQ            perlString
+HiLink perlAnglesDQ            perlString
+
+HiLink perlSpecialStringU2     perlString
+
 " Possible errors
 HiLink perlNotEmptyLine                Error
 HiLink perlElseIfError         Error
@@ -539,5 +577,13 @@ syn sync match perlSyncPOD grouphere NONE "^=cut"
 
 let b:current_syntax = "perl"
 
+if exists('&regexpengine')
+  let &regexpengine=s:regexpengine
+  unlet s:regexpengine
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " XXX Change to sts=4:sw=4
 " vim:ts=8:sts=2:sw=2:expandtab:ft=vim
index 6a3baba..3d82ced 100644 (file)
@@ -1,12 +1,13 @@
 " Vim syntax file
-" Language:     Perl 6
-" Maintainer:   Andy Lester <andy@petdance.com>
-" Homepage:     http://github.com/petdance/vim-perl/tree/master
-" Last Change:  2009-07-04
-
-" Contributors: Luke Palmer <fibonaci@babylonia.flatirons.org>
-"               Moritz Lenz <moritz@faui2k3.org>
-"               Hinrik Ã–rn Sigurðsson <hinrik.sig@gmail.com>
+" Language:      Perl 6
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl/tree/master
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-21
+
+" Contributors:  Luke Palmer <fibonaci@babylonia.flatirons.org>
+"                Moritz Lenz <moritz@faui2k3.org>
+"                Hinrik Ã–rn Sigurðsson <hinrik.sig@gmail.com>
 "
 " This is a big undertaking. Perl 6 is the sort of language that only Perl
 " can parse. But I'll do my best to get vim to.
@@ -67,6 +68,8 @@ if version < 600
 elseif exists("b:current_syntax")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " identifiers
 syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*"
@@ -1021,7 +1024,7 @@ syn match p6PackageScope display "\%(\K\%(\k\|[-']\K\@=\)*\)\?::" nextgroup=p6Pa
 " TODO: mostly stolen from perl.vim, might need more work
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%([$@%&*]\@<!\%(\<\%(split\|while\|until\|if\|unless\)\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=//\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\%(\<\%(split\|while\|until\|if\|unless\)\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=//\@!"
     \ start="^//\@!"
     \ start=+\s\@<=/[^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!/\@!+
     \ skip="\\/"
@@ -1031,7 +1034,7 @@ syn region p6Match
 " m/foo/, mm/foo/, rx/foo/
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=//\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=//\@!"
     \ skip="\\/"
     \ end="/"
     \ keepend
@@ -1040,7 +1043,7 @@ syn region p6Match
 " m!foo!, mm!foo!, rx!foo!
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!!\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!!\@!"
     \ skip="\\!"
     \ end="!"
     \ keepend
@@ -1049,7 +1052,7 @@ syn region p6Match
 " m$foo$, mm$foo$, rx$foo$, m|foo|, mm|foo|, rx|foo|, etc
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)\$\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)\$\@!"
     \ skip="\\\z1"
     \ end="\z1"
     \ keepend
@@ -1058,7 +1061,7 @@ syn region p6Match
 " m (foo), mm (foo), rx (foo)
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!)\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!)\@!"
     \ skip="\\)"
     \ end=")"
     \ contains=@p6Regexen,@p6Variables
@@ -1066,7 +1069,7 @@ syn region p6Match
 " m[foo], mm[foo], rx[foo]
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!]\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!]\@!"
     \ skip="\\]"
     \ end="]"
     \ contains=@p6Regexen,@p6Variables
@@ -1074,7 +1077,7 @@ syn region p6Match
 " m{foo}, mm{foo}, rx{foo}
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!}\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!}\@!"
     \ skip="\\}"
     \ end="}"
     \ contains=@p6Regexen,@p6Variables
@@ -1082,7 +1085,7 @@ syn region p6Match
 " m<foo>, mm<foo>, rx<foo>
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!>\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!>\@!"
     \ skip="\\>"
     \ end=">"
     \ contains=@p6Regexen,@p6Variables
@@ -1090,7 +1093,7 @@ syn region p6Match
 " m«foo», mm«foo», rx«foo»
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!»\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!»\@!"
     \ skip="\\»"
     \ end="»"
     \ contains=@p6Regexen,@p6Variables
@@ -1100,7 +1103,7 @@ syn region p6Match
 " s/foo/bar/
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=/"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=/"
     \ skip="\\/"
     \ end="/"me=e-1
     \ keepend
@@ -1119,7 +1122,7 @@ syn region p6Substitution
 " s!foo!bar!
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!"
     \ skip="\\!"
     \ end="!"me=e-1
     \ keepend
@@ -1138,7 +1141,7 @@ syn region p6Substitution
 " s$foo$bar$, s|foo|bar, etc
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)"
     \ skip="\\\z1"
     \ end="\z1"me=e-1
     \ keepend
@@ -1157,7 +1160,7 @@ syn region p6Substitution
 " s{foo}
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!"
     \ skip="\\}"
     \ end="}"
     \ contains=@p6Regexen,@p6Variables
@@ -1165,7 +1168,7 @@ syn region p6Match
 " s[foo]
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!"
     \ skip="\\]"
     \ end="]"
     \ contains=@p6Regexen,@p6Variables
@@ -1173,7 +1176,7 @@ syn region p6Match
 " s<foo>
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!"
     \ skip="\\>"
     \ end=">"
     \ contains=@p6Regexen,@p6Variables
@@ -1181,7 +1184,7 @@ syn region p6Match
 " s«foo»
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!"
     \ skip="\\»"
     \ end="»"
     \ contains=@p6Regexen,@p6Variables
@@ -1189,7 +1192,7 @@ syn region p6Match
 " s (foo)
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!"
     \ skip="\\)"
     \ end=")"
     \ contains=@p6Regexen,@p6Variables
@@ -1199,7 +1202,7 @@ syn region p6Match
 " m:P5//
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=/"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/"
     \ skip="\\/"
     \ end="/"
     \ contains=@p6RegexP5,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
@@ -1207,7 +1210,7 @@ syn region p6Match
 " m:P5!!
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=!"
     \ skip="\\!"
     \ end="!"
     \ contains=@p6RegexP5,p6Variable,p6VarSlash,p6VarMatch,p6VarNum
@@ -1215,7 +1218,7 @@ syn region p6Match
 " m:P5$$, m:P5||, etc
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)"
     \ skip="\\\z1"
     \ end="\z1"
     \ contains=@p6RegexP5,@p6Variables
@@ -1223,7 +1226,7 @@ syn region p6Match
 " m:P5 ()
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!"
     \ skip="\\)"
     \ end=")"
     \ contains=@p6RegexP5,@p6Variables
@@ -1231,7 +1234,7 @@ syn region p6Match
 " m:P5[]
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!"
     \ skip="\\]"
     \ end="]"
     \ contains=@p6RegexP5,@p6Variables
@@ -1239,7 +1242,7 @@ syn region p6Match
 " m:P5{}
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!"
     \ skip="\\}"
     \ end="}"
     \ contains=@p6RegexP5,p6Variables
@@ -1247,7 +1250,7 @@ syn region p6Match
 " m:P5<>
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!"
     \ skip="\\>"
     \ end=">"
     \ contains=@p6RegexP5,p6Variables
@@ -1255,7 +1258,7 @@ syn region p6Match
 " m:P5«»
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!"
     \ skip="\\»"
     \ end="»"
     \ contains=@p6RegexP5,p6Variables
@@ -1265,7 +1268,7 @@ syn region p6Match
 " tr/foo/bar/, tr|foo|bar, etc
 syn region p6String
     \ matchgroup=p6Quote
-    \ start="\%(\<tr\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([/\"'`|!,$]\)"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<tr\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([/\"'`|!,$]\)"
     \ skip="\\\z1"
     \ end="\z1"me=e-1
     \ contains=p6RxRange
@@ -2246,4 +2249,7 @@ setlocal foldmethod=syntax
 
 let b:current_syntax = "perl6"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:ts=8:sts=4:sw=4:expandtab:ft=vim
index 394cfb3..1a8f34b 100644 (file)
@@ -1,7 +1,8 @@
 " pf syntax file
-" Language:    OpenBSD packet filter configuration (pf.conf)
-" Maintainer:  Camiel Dobbelaar <cd@sentia.nl>
-" Last Change: 2003 May 27
+" Language:        OpenBSD packet filter configuration (pf.conf)
+" Original Author: Camiel Dobbelaar <cd@sentia.nl>
+" Maintainer:      Lauri Tirkkonen <lotheac@iki.fi>
+" Last Change:     2013 Apr 02
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -14,7 +15,7 @@ endif
 setlocal foldmethod=syntax
 syn sync fromstart
 
-syn cluster    pfNotLS         contains=pfComment,pfTodo,pfVarAssign
+syn cluster    pfNotLS         contains=pfTodo,pfVarAssign
 syn keyword    pfCmd           altq anchor antispoof binat nat pass
 syn keyword    pfCmd           queue rdr scrub table set
 syn keyword    pfService       auth bgp domain finger ftp http https ident
index 233c8d9..a090445 100644 (file)
@@ -1,10 +1,11 @@
 " Vim syntax file
 " Language:    Postfix main.cf configuration
 " Maintainer:  KELEMEN Peter <Peter dot Kelemen at cern dot ch>
-" Last Change: 2006 Apr 15
-" Version:     0.20
+" Last Update:  Hong Xu
+" Last Change: 2011 May 14
+" Version:     0.40
 " URL:         http://cern.ch/fuji/vim/syntax/pfmain.vim
-" Comment:     Based on Postfix 2.3.x defaults.
+" Comment:     Based on Postfix 2.9 defaults.
 
 if version < 600
        syntax clear
@@ -22,7 +23,9 @@ syntax case match
 syntax sync minlines=1
 
 syntax keyword pfmainConf 2bounce_notice_recipient
+syntax keyword pfmainConf access_map_defer_code
 syntax keyword pfmainConf access_map_reject_code
+syntax keyword pfmainConf address_verify_cache_cleanup_interval
 syntax keyword pfmainConf address_verify_default_transport
 syntax keyword pfmainConf address_verify_local_transport
 syntax keyword pfmainConf address_verify_map
@@ -36,6 +39,7 @@ syntax keyword pfmainConf address_verify_positive_refresh_time
 syntax keyword pfmainConf address_verify_relay_transport
 syntax keyword pfmainConf address_verify_relayhost
 syntax keyword pfmainConf address_verify_sender
+syntax keyword pfmainConf address_verify_sender_dependent_default_transport_maps
 syntax keyword pfmainConf address_verify_sender_dependent_relayhost_maps
 syntax keyword pfmainConf address_verify_service_name
 syntax keyword pfmainConf address_verify_transport_maps
@@ -83,22 +87,31 @@ syntax keyword pfmainConf connection_cache_service_name
 syntax keyword pfmainConf connection_cache_status_update_time
 syntax keyword pfmainConf connection_cache_ttl_limit
 syntax keyword pfmainConf content_filter
+syntax keyword pfmainConf cyrus_sasl_config_path
 syntax keyword pfmainConf daemon_directory
 syntax keyword pfmainConf daemon_timeout
+syntax keyword pfmainConf data_directory
 syntax keyword pfmainConf debug_peer_level
 syntax keyword pfmainConf debug_peer_list
 syntax keyword pfmainConf default_database_type
 syntax keyword pfmainConf default_delivery_slot_cost
 syntax keyword pfmainConf default_delivery_slot_discount
 syntax keyword pfmainConf default_delivery_slot_loan
+syntax keyword pfmainConf default_destination_concurrency_failed_cohort_limit
 syntax keyword pfmainConf default_destination_concurrency_limit
+syntax keyword pfmainConf default_destination_concurrency_negative_feedback
+syntax keyword pfmainConf default_destination_concurrency_positive_feedback
+syntax keyword pfmainConf default_destination_rate_delay
 syntax keyword pfmainConf default_destination_recipient_limit
 syntax keyword pfmainConf default_extra_recipient_limit
+syntax keyword pfmainConf default_filter_nexthop
 syntax keyword pfmainConf default_minimum_delivery_slots
 syntax keyword pfmainConf default_privs
 syntax keyword pfmainConf default_process_limit
 syntax keyword pfmainConf default_rbl_reply
 syntax keyword pfmainConf default_recipient_limit
+syntax keyword pfmainConf default_recipient_refill_delay
+syntax keyword pfmainConf default_recipient_refill_limit
 syntax keyword pfmainConf default_transport
 syntax keyword pfmainConf default_verp_delimiters
 syntax keyword pfmainConf defer_code
@@ -109,15 +122,22 @@ syntax keyword pfmainConf delay_notice_recipient
 syntax keyword pfmainConf delay_warning_time
 syntax keyword pfmainConf deliver_lock_attempts
 syntax keyword pfmainConf deliver_lock_delay
+syntax keyword pfmainConf destination_concurrency_feedback_debug
+syntax keyword pfmainConf detect_8bit_encoding_header
 syntax keyword pfmainConf disable_dns_lookups
 syntax keyword pfmainConf disable_mime_input_processing
 syntax keyword pfmainConf disable_mime_output_conversion
 syntax keyword pfmainConf disable_verp_bounces
 syntax keyword pfmainConf disable_vrfy_command
+syntax keyword pfmainConf dnsblog_reply_delay
+syntax keyword pfmainConf dnsblog_service_name
 syntax keyword pfmainConf dont_remove
 syntax keyword pfmainConf double_bounce_sender
 syntax keyword pfmainConf duplicate_filter_limit
+syntax keyword pfmainConf empty_address_default_transport_maps_lookup_key
 syntax keyword pfmainConf empty_address_recipient
+syntax keyword pfmainConf empty_address_relayhost_maps_lookup_key
+syntax keyword pfmainConf enable_long_queue_ids
 syntax keyword pfmainConf enable_original_recipient
 syntax keyword pfmainConf error_notice_recipient
 syntax keyword pfmainConf error_service_name
@@ -151,13 +171,16 @@ syntax keyword pfmainConf in_flow_delay
 syntax keyword pfmainConf inet_interfaces
 syntax keyword pfmainConf inet_protocols
 syntax keyword pfmainConf initial_destination_concurrency
+syntax keyword pfmainConf internal_mail_filter_classes
 syntax keyword pfmainConf invalid_hostname_reject_code
 syntax keyword pfmainConf ipc_idle
 syntax keyword pfmainConf ipc_timeout
 syntax keyword pfmainConf ipc_ttl
 syntax keyword pfmainConf line_length_limit
+syntax keyword pfmainConf lmtp_address_preference
 syntax keyword pfmainConf lmtp_bind_address
 syntax keyword pfmainConf lmtp_bind_address6
+syntax keyword pfmainConf lmtp_body_checks
 syntax keyword pfmainConf lmtp_cname_overrides_servername
 syntax keyword pfmainConf lmtp_connect_timeout
 syntax keyword pfmainConf lmtp_connection_cache_destinations
@@ -172,23 +195,34 @@ syntax keyword pfmainConf lmtp_destination_concurrency_limit
 syntax keyword pfmainConf lmtp_destination_recipient_limit
 syntax keyword pfmainConf lmtp_discard_lhlo_keyword_address_maps
 syntax keyword pfmainConf lmtp_discard_lhlo_keywords
+syntax keyword pfmainConf lmtp_dns_resolver_options
 syntax keyword pfmainConf lmtp_enforce_tls
 syntax keyword pfmainConf lmtp_generic_maps
+syntax keyword pfmainConf lmtp_header_checks
 syntax keyword pfmainConf lmtp_host_lookup
 syntax keyword pfmainConf lmtp_lhlo_name
 syntax keyword pfmainConf lmtp_lhlo_timeout
 syntax keyword pfmainConf lmtp_line_length_limit
 syntax keyword pfmainConf lmtp_mail_timeout
+syntax keyword pfmainConf lmtp_mime_header_checks
 syntax keyword pfmainConf lmtp_mx_address_limit
 syntax keyword pfmainConf lmtp_mx_session_limit
+syntax keyword pfmainConf lmtp_nested_header_checks
+syntax keyword pfmainConf lmtp_per_record_deadline
 syntax keyword pfmainConf lmtp_pix_workaround_delay_time
+syntax keyword pfmainConf lmtp_pix_workaround_maps
 syntax keyword pfmainConf lmtp_pix_workaround_threshold_time
+syntax keyword pfmainConf lmtp_pix_workarounds
 syntax keyword pfmainConf lmtp_quit_timeout
 syntax keyword pfmainConf lmtp_quote_rfc821_envelope
 syntax keyword pfmainConf lmtp_randomize_addresses
 syntax keyword pfmainConf lmtp_rcpt_timeout
+syntax keyword pfmainConf lmtp_reply_filter
 syntax keyword pfmainConf lmtp_rset_timeout
+syntax keyword pfmainConf lmtp_sasl_auth_cache_name
+syntax keyword pfmainConf lmtp_sasl_auth_cache_time
 syntax keyword pfmainConf lmtp_sasl_auth_enable
+syntax keyword pfmainConf lmtp_sasl_auth_soft_bounce
 syntax keyword pfmainConf lmtp_sasl_mechanism_filter
 syntax keyword pfmainConf lmtp_sasl_password_maps
 syntax keyword pfmainConf lmtp_sasl_path
@@ -201,10 +235,34 @@ syntax keyword pfmainConf lmtp_sender_dependent_authentication
 syntax keyword pfmainConf lmtp_skip_5xx_greeting
 syntax keyword pfmainConf lmtp_starttls_timeout
 syntax keyword pfmainConf lmtp_tcp_port
+syntax keyword pfmainConf lmtp_tls_CAfile
+syntax keyword pfmainConf lmtp_tls_CApath
+syntax keyword pfmainConf lmtp_tls_block_early_mail_reply
+syntax keyword pfmainConf lmtp_tls_cert_file
+syntax keyword pfmainConf lmtp_tls_ciphers
+syntax keyword pfmainConf lmtp_tls_dcert_file
+syntax keyword pfmainConf lmtp_tls_dkey_file
+syntax keyword pfmainConf lmtp_tls_eccert_file
+syntax keyword pfmainConf lmtp_tls_eckey_file
 syntax keyword pfmainConf lmtp_tls_enforce_peername
+syntax keyword pfmainConf lmtp_tls_exclude_ciphers
+syntax keyword pfmainConf lmtp_tls_fingerprint_cert_match
+syntax keyword pfmainConf lmtp_tls_fingerprint_digest
+syntax keyword pfmainConf lmtp_tls_key_file
+syntax keyword pfmainConf lmtp_tls_loglevel
+syntax keyword pfmainConf lmtp_tls_mandatory_ciphers
+syntax keyword pfmainConf lmtp_tls_mandatory_exclude_ciphers
+syntax keyword pfmainConf lmtp_tls_mandatory_protocols
 syntax keyword pfmainConf lmtp_tls_note_starttls_offer
 syntax keyword pfmainConf lmtp_tls_per_site
+syntax keyword pfmainConf lmtp_tls_policy_maps
+syntax keyword pfmainConf lmtp_tls_protocols
 syntax keyword pfmainConf lmtp_tls_scert_verifydepth
+syntax keyword pfmainConf lmtp_tls_secure_cert_match
+syntax keyword pfmainConf lmtp_tls_security_level
+syntax keyword pfmainConf lmtp_tls_session_cache_database
+syntax keyword pfmainConf lmtp_tls_session_cache_timeout
+syntax keyword pfmainConf lmtp_tls_verify_cert_match
 syntax keyword pfmainConf lmtp_use_tls
 syntax keyword pfmainConf lmtp_xforward_timeout
 syntax keyword pfmainConf local_command_shell
@@ -229,6 +287,7 @@ syntax keyword pfmainConf mailq_path
 syntax keyword pfmainConf manpage_directory
 syntax keyword pfmainConf maps_rbl_domains
 syntax keyword pfmainConf maps_rbl_reject_code
+syntax keyword pfmainConf master_service_disable
 syntax keyword pfmainConf masquerade_classes
 syntax keyword pfmainConf masquerade_domains
 syntax keyword pfmainConf masquerade_exceptions
@@ -239,10 +298,31 @@ syntax keyword pfmainConf maximal_queue_lifetime
 syntax keyword pfmainConf message_reject_characters
 syntax keyword pfmainConf message_size_limit
 syntax keyword pfmainConf message_strip_characters
+syntax keyword pfmainConf milter_command_timeout
+syntax keyword pfmainConf milter_connect_macros
+syntax keyword pfmainConf milter_connect_timeout
+syntax keyword pfmainConf milter_content_timeout
+syntax keyword pfmainConf milter_data_macros
+syntax keyword pfmainConf milter_default_action
+syntax keyword pfmainConf milter_end_of_data_macros
+syntax keyword pfmainConf milter_end_of_header_macros
+syntax keyword pfmainConf milter_header_checks
+syntax keyword pfmainConf milter_helo_macros
+syntax keyword pfmainConf milter_macro_daemon_name
+syntax keyword pfmainConf milter_macro_v
+syntax keyword pfmainConf milter_mail_macros
+syntax keyword pfmainConf milter_protocol
+syntax keyword pfmainConf milter_rcpt_macros
+syntax keyword pfmainConf milter_unknown_command_macros
 syntax keyword pfmainConf mime_boundary_length_limit
 syntax keyword pfmainConf mime_header_checks
 syntax keyword pfmainConf mime_nesting_limit
 syntax keyword pfmainConf minimal_backoff_time
+syntax keyword pfmainConf multi_instance_directories
+syntax keyword pfmainConf multi_instance_enable
+syntax keyword pfmainConf multi_instance_group
+syntax keyword pfmainConf multi_instance_name
+syntax keyword pfmainConf multi_instance_wrapper
 syntax keyword pfmainConf multi_recipient_bounce_reject_code
 syntax keyword pfmainConf mydestination
 syntax keyword pfmainConf mydomain
@@ -253,23 +333,74 @@ syntax keyword pfmainConf myorigin
 syntax keyword pfmainConf nested_header_checks
 syntax keyword pfmainConf newaliases_path
 syntax keyword pfmainConf non_fqdn_reject_code
+syntax keyword pfmainConf non_smtpd_milters
 syntax keyword pfmainConf notify_classes
 syntax keyword pfmainConf owner_request_special
 syntax keyword pfmainConf parent_domain_matches_subdomains
 syntax keyword pfmainConf permit_mx_backup_networks
 syntax keyword pfmainConf pickup_service_name
 syntax keyword pfmainConf plaintext_reject_code
+syntax keyword pfmainConf postmulti_control_commands
+syntax keyword pfmainConf postmulti_start_commands
+syntax keyword pfmainConf postmulti_stop_commands
+syntax keyword pfmainConf postscreen_access_list
+syntax keyword pfmainConf postscreen_bare_newline_action
+syntax keyword pfmainConf postscreen_bare_newline_enable
+syntax keyword pfmainConf postscreen_bare_newline_ttl
+syntax keyword pfmainConf postscreen_blacklist_action
+syntax keyword pfmainConf postscreen_cache_cleanup_interval
+syntax keyword pfmainConf postscreen_cache_map
+syntax keyword pfmainConf postscreen_cache_retention_time
+syntax keyword pfmainConf postscreen_client_connection_count_limit
+syntax keyword pfmainConf postscreen_command_count_limit
+syntax keyword pfmainConf postscreen_command_filter
+syntax keyword pfmainConf postscreen_command_time_limit
+syntax keyword pfmainConf postscreen_disable_vrfy_command
+syntax keyword pfmainConf postscreen_discard_ehlo_keyword_address_maps
+syntax keyword pfmainConf postscreen_discard_ehlo_keywords
+syntax keyword pfmainConf postscreen_dnsbl_action
+syntax keyword pfmainConf postscreen_dnsbl_reply_map
+syntax keyword pfmainConf postscreen_dnsbl_sites
+syntax keyword pfmainConf postscreen_dnsbl_threshold
+syntax keyword pfmainConf postscreen_dnsbl_ttl
+syntax keyword pfmainConf postscreen_enforce_tls
+syntax keyword pfmainConf postscreen_expansion_filter
+syntax keyword pfmainConf postscreen_forbidden_commands
+syntax keyword pfmainConf postscreen_greet_action
+syntax keyword pfmainConf postscreen_greet_banner
+syntax keyword pfmainConf postscreen_greet_ttl
+syntax keyword pfmainConf postscreen_greet_wait
+syntax keyword pfmainConf postscreen_helo_required
+syntax keyword pfmainConf postscreen_non_smtp_command_action
+syntax keyword pfmainConf postscreen_non_smtp_command_enable
+syntax keyword pfmainConf postscreen_non_smtp_command_ttl
+syntax keyword pfmainConf postscreen_pipelining_action
+syntax keyword pfmainConf postscreen_pipelining_enable
+syntax keyword pfmainConf postscreen_pipelining_ttl
+syntax keyword pfmainConf postscreen_post_queue_limit
+syntax keyword pfmainConf postscreen_pre_queue_limit
+syntax keyword pfmainConf postscreen_reject_footer
+syntax keyword pfmainConf postscreen_tls_security_level
+syntax keyword pfmainConf postscreen_use_tls
+syntax keyword pfmainConf postscreen_watchdog_timeout
+syntax keyword pfmainConf postscreen_whitelist_interfaces
 syntax keyword pfmainConf prepend_delivered_header
+syntax keyword pfmainConf process_id
 syntax keyword pfmainConf process_id_directory
+syntax keyword pfmainConf process_name
 syntax keyword pfmainConf propagate_unmatched_extensions
 syntax keyword pfmainConf proxy_interfaces
 syntax keyword pfmainConf proxy_read_maps
+syntax keyword pfmainConf proxy_write_maps
+syntax keyword pfmainConf proxymap_service_name
+syntax keyword pfmainConf proxywrite_service_name
 syntax keyword pfmainConf qmgr_clog_warn_time
 syntax keyword pfmainConf qmgr_fudge_factor
 syntax keyword pfmainConf qmgr_message_active_limit
 syntax keyword pfmainConf qmgr_message_recipient_limit
 syntax keyword pfmainConf qmgr_message_recipient_minimum
 syntax keyword pfmainConf qmqpd_authorized_clients
+syntax keyword pfmainConf qmqpd_client_port_logging
 syntax keyword pfmainConf qmqpd_error_delay
 syntax keyword pfmainConf qmqpd_timeout
 syntax keyword pfmainConf queue_directory
@@ -285,6 +416,7 @@ syntax keyword pfmainConf recipient_canonical_classes
 syntax keyword pfmainConf recipient_canonical_maps
 syntax keyword pfmainConf recipient_delimiter
 syntax keyword pfmainConf reject_code
+syntax keyword pfmainConf reject_tempfail_action
 syntax keyword pfmainConf relay_clientcerts
 syntax keyword pfmainConf relay_destination_concurrency_limit
 syntax keyword pfmainConf relay_destination_recipient_limit
@@ -296,23 +428,28 @@ syntax keyword pfmainConf relayhost
 syntax keyword pfmainConf relocated_maps
 syntax keyword pfmainConf remote_header_rewrite_domain
 syntax keyword pfmainConf require_home_directory
+syntax keyword pfmainConf reset_owner_alias
 syntax keyword pfmainConf resolve_dequoted_address
 syntax keyword pfmainConf resolve_null_domain
 syntax keyword pfmainConf resolve_numeric_domain
 syntax keyword pfmainConf rewrite_service_name
 syntax keyword pfmainConf sample_directory
+syntax keyword pfmainConf send_cyrus_sasl_authzid
 syntax keyword pfmainConf sender_bcc_maps
 syntax keyword pfmainConf sender_canonical_classes
 syntax keyword pfmainConf sender_canonical_maps
+syntax keyword pfmainConf sender_dependent_default_transport_maps
 syntax keyword pfmainConf sender_dependent_relayhost_maps
 syntax keyword pfmainConf sendmail_path
 syntax keyword pfmainConf service_throttle_time
 syntax keyword pfmainConf setgid_group
 syntax keyword pfmainConf show_user_unknown_table_name
 syntax keyword pfmainConf showq_service_name
+syntax keyword pfmainConf smtp_address_preference
 syntax keyword pfmainConf smtp_always_send_ehlo
 syntax keyword pfmainConf smtp_bind_address
 syntax keyword pfmainConf smtp_bind_address6
+syntax keyword pfmainConf smtp_body_checks
 syntax keyword pfmainConf smtp_cname_overrides_servername
 syntax keyword pfmainConf smtp_connect_timeout
 syntax keyword pfmainConf smtp_connection_cache_destinations
@@ -327,25 +464,35 @@ syntax keyword pfmainConf smtp_destination_concurrency_limit
 syntax keyword pfmainConf smtp_destination_recipient_limit
 syntax keyword pfmainConf smtp_discard_ehlo_keyword_address_maps
 syntax keyword pfmainConf smtp_discard_ehlo_keywords
+syntax keyword pfmainConf smtp_dns_resolver_options
 syntax keyword pfmainConf smtp_enforce_tls
 syntax keyword pfmainConf smtp_fallback_relay
 syntax keyword pfmainConf smtp_generic_maps
+syntax keyword pfmainConf smtp_header_checks
 syntax keyword pfmainConf smtp_helo_name
 syntax keyword pfmainConf smtp_helo_timeout
 syntax keyword pfmainConf smtp_host_lookup
 syntax keyword pfmainConf smtp_line_length_limit
 syntax keyword pfmainConf smtp_mail_timeout
+syntax keyword pfmainConf smtp_mime_header_checks
 syntax keyword pfmainConf smtp_mx_address_limit
 syntax keyword pfmainConf smtp_mx_session_limit
+syntax keyword pfmainConf smtp_nested_header_checks
 syntax keyword pfmainConf smtp_never_send_ehlo
 syntax keyword pfmainConf smtp_pix_workaround_delay_time
+syntax keyword pfmainConf smtp_pix_workaround_maps
 syntax keyword pfmainConf smtp_pix_workaround_threshold_time
+syntax keyword pfmainConf smtp_pix_workarounds
 syntax keyword pfmainConf smtp_quit_timeout
 syntax keyword pfmainConf smtp_quote_rfc821_envelope
 syntax keyword pfmainConf smtp_randomize_addresses
 syntax keyword pfmainConf smtp_rcpt_timeout
+syntax keyword pfmainConf smtp_reply_filter
 syntax keyword pfmainConf smtp_rset_timeout
+syntax keyword pfmainConf smtp_sasl_auth_cache_name
+syntax keyword pfmainConf smtp_sasl_auth_cache_time
 syntax keyword pfmainConf smtp_sasl_auth_enable
+syntax keyword pfmainConf smtp_sasl_auth_soft_bounce
 syntax keyword pfmainConf smtp_sasl_mechanism_filter
 syntax keyword pfmainConf smtp_sasl_password_maps
 syntax keyword pfmainConf smtp_sasl_path
@@ -360,18 +507,33 @@ syntax keyword pfmainConf smtp_skip_quit_response
 syntax keyword pfmainConf smtp_starttls_timeout
 syntax keyword pfmainConf smtp_tls_CAfile
 syntax keyword pfmainConf smtp_tls_CApath
+syntax keyword pfmainConf smtp_tls_block_early_mail_reply
 syntax keyword pfmainConf smtp_tls_cert_file
 syntax keyword pfmainConf smtp_tls_cipherlist
+syntax keyword pfmainConf smtp_tls_ciphers
 syntax keyword pfmainConf smtp_tls_dcert_file
 syntax keyword pfmainConf smtp_tls_dkey_file
+syntax keyword pfmainConf smtp_tls_eccert_file
+syntax keyword pfmainConf smtp_tls_eckey_file
 syntax keyword pfmainConf smtp_tls_enforce_peername
+syntax keyword pfmainConf smtp_tls_exclude_ciphers
+syntax keyword pfmainConf smtp_tls_fingerprint_cert_match
+syntax keyword pfmainConf smtp_tls_fingerprint_digest
 syntax keyword pfmainConf smtp_tls_key_file
 syntax keyword pfmainConf smtp_tls_loglevel
+syntax keyword pfmainConf smtp_tls_mandatory_ciphers
+syntax keyword pfmainConf smtp_tls_mandatory_exclude_ciphers
+syntax keyword pfmainConf smtp_tls_mandatory_protocols
 syntax keyword pfmainConf smtp_tls_note_starttls_offer
 syntax keyword pfmainConf smtp_tls_per_site
+syntax keyword pfmainConf smtp_tls_policy_maps
+syntax keyword pfmainConf smtp_tls_protocols
 syntax keyword pfmainConf smtp_tls_scert_verifydepth
+syntax keyword pfmainConf smtp_tls_secure_cert_match
+syntax keyword pfmainConf smtp_tls_security_level
 syntax keyword pfmainConf smtp_tls_session_cache_database
 syntax keyword pfmainConf smtp_tls_session_cache_timeout
+syntax keyword pfmainConf smtp_tls_verify_cert_match
 syntax keyword pfmainConf smtp_use_tls
 syntax keyword pfmainConf smtp_xforward_timeout
 syntax keyword pfmainConf smtpd_authorized_verp_clients
@@ -383,8 +545,10 @@ syntax keyword pfmainConf smtpd_client_connection_rate_limit
 syntax keyword pfmainConf smtpd_client_event_limit_exceptions
 syntax keyword pfmainConf smtpd_client_message_rate_limit
 syntax keyword pfmainConf smtpd_client_new_tls_session_rate_limit
+syntax keyword pfmainConf smtpd_client_port_logging
 syntax keyword pfmainConf smtpd_client_recipient_rate_limit
 syntax keyword pfmainConf smtpd_client_restrictions
+syntax keyword pfmainConf smtpd_command_filter
 syntax keyword pfmainConf smtpd_data_restrictions
 syntax keyword pfmainConf smtpd_delay_open_until_valid_rcpt
 syntax keyword pfmainConf smtpd_delay_reject
@@ -401,18 +565,22 @@ syntax keyword pfmainConf smtpd_helo_required
 syntax keyword pfmainConf smtpd_helo_restrictions
 syntax keyword pfmainConf smtpd_history_flush_threshold
 syntax keyword pfmainConf smtpd_junk_command_limit
+syntax keyword pfmainConf smtpd_milters
 syntax keyword pfmainConf smtpd_noop_commands
 syntax keyword pfmainConf smtpd_null_access_lookup_key
 syntax keyword pfmainConf smtpd_peername_lookup
+syntax keyword pfmainConf smtpd_per_record_deadline
 syntax keyword pfmainConf smtpd_policy_service_max_idle
 syntax keyword pfmainConf smtpd_policy_service_max_ttl
 syntax keyword pfmainConf smtpd_policy_service_timeout
 syntax keyword pfmainConf smtpd_proxy_ehlo
 syntax keyword pfmainConf smtpd_proxy_filter
+syntax keyword pfmainConf smtpd_proxy_options
 syntax keyword pfmainConf smtpd_proxy_timeout
 syntax keyword pfmainConf smtpd_recipient_limit
 syntax keyword pfmainConf smtpd_recipient_overshoot_limit
 syntax keyword pfmainConf smtpd_recipient_restrictions
+syntax keyword pfmainConf smtpd_reject_footer
 syntax keyword pfmainConf smtpd_reject_unlisted_recipient
 syntax keyword pfmainConf smtpd_reject_unlisted_sender
 syntax keyword pfmainConf smtpd_restriction_classes
@@ -426,59 +594,142 @@ syntax keyword pfmainConf smtpd_sasl_tls_security_options
 syntax keyword pfmainConf smtpd_sasl_type
 syntax keyword pfmainConf smtpd_sender_login_maps
 syntax keyword pfmainConf smtpd_sender_restrictions
+syntax keyword pfmainConf smtpd_service_name
 syntax keyword pfmainConf smtpd_soft_error_limit
 syntax keyword pfmainConf smtpd_starttls_timeout
 syntax keyword pfmainConf smtpd_timeout
 syntax keyword pfmainConf smtpd_tls_CAfile
 syntax keyword pfmainConf smtpd_tls_CApath
+syntax keyword pfmainConf smtpd_tls_always_issue_session_ids
 syntax keyword pfmainConf smtpd_tls_ask_ccert
 syntax keyword pfmainConf smtpd_tls_auth_only
 syntax keyword pfmainConf smtpd_tls_ccert_verifydepth
 syntax keyword pfmainConf smtpd_tls_cert_file
 syntax keyword pfmainConf smtpd_tls_cipherlist
+syntax keyword pfmainConf smtpd_tls_ciphers
 syntax keyword pfmainConf smtpd_tls_dcert_file
 syntax keyword pfmainConf smtpd_tls_dh1024_param_file
 syntax keyword pfmainConf smtpd_tls_dh512_param_file
 syntax keyword pfmainConf smtpd_tls_dkey_file
+syntax keyword pfmainConf smtpd_tls_eccert_file
+syntax keyword pfmainConf smtpd_tls_eckey_file
+syntax keyword pfmainConf smtpd_tls_eecdh_grade
+syntax keyword pfmainConf smtpd_tls_exclude_ciphers
+syntax keyword pfmainConf smtpd_tls_fingerprint_digest
 syntax keyword pfmainConf smtpd_tls_key_file
 syntax keyword pfmainConf smtpd_tls_loglevel
+syntax keyword pfmainConf smtpd_tls_mandatory_ciphers
+syntax keyword pfmainConf smtpd_tls_mandatory_exclude_ciphers
+syntax keyword pfmainConf smtpd_tls_mandatory_protocols
+syntax keyword pfmainConf smtpd_tls_protocols
 syntax keyword pfmainConf smtpd_tls_received_header
 syntax keyword pfmainConf smtpd_tls_req_ccert
+syntax keyword pfmainConf smtpd_tls_security_level
 syntax keyword pfmainConf smtpd_tls_session_cache_database
 syntax keyword pfmainConf smtpd_tls_session_cache_timeout
 syntax keyword pfmainConf smtpd_tls_wrappermode
 syntax keyword pfmainConf smtpd_use_tls
 syntax keyword pfmainConf soft_bounce
 syntax keyword pfmainConf stale_lock_time
+syntax keyword pfmainConf stress
 syntax keyword pfmainConf strict_7bit_headers
 syntax keyword pfmainConf strict_8bitmime
 syntax keyword pfmainConf strict_8bitmime_body
 syntax keyword pfmainConf strict_mime_encoding_domain
 syntax keyword pfmainConf strict_rfc821_envelopes
+syntax keyword pfmainConf strict_7bit_headers
+syntax keyword pfmainConf strict_8bitmime
+syntax keyword pfmainConf strict_8bitmime_body
+syntax keyword pfmainConf strict_mailbox_ownership
+syntax keyword pfmainConf strict_mime_encoding_domain
+syntax keyword pfmainConf strict_rfc821_envelopes
 syntax keyword pfmainConf sun_mailtool_compatibility
 syntax keyword pfmainConf swap_bangpath
 syntax keyword pfmainConf syslog_facility
 syntax keyword pfmainConf syslog_name
+syntax keyword pfmainConf tcp_windowsize
+syntax keyword pfmainConf tls_append_default_CA
 syntax keyword pfmainConf tls_daemon_random_bytes
+syntax keyword pfmainConf tls_disable_workarounds
+syntax keyword pfmainConf tls_eecdh_strong_curve
+syntax keyword pfmainConf tls_eecdh_ultra_curve
+syntax keyword pfmainConf tls_export_cipherlist
+syntax keyword pfmainConf tls_high_cipherlist
+syntax keyword pfmainConf tls_low_cipherlist
+syntax keyword pfmainConf tls_medium_cipherlist
+syntax keyword pfmainConf tls_null_cipherlist
+syntax keyword pfmainConf tls_preempt_cipherlist
 syntax keyword pfmainConf tls_random_bytes
 syntax keyword pfmainConf tls_random_exchange_name
 syntax keyword pfmainConf tls_random_prng_update_period
 syntax keyword pfmainConf tls_random_reseed_period
 syntax keyword pfmainConf tls_random_source
+syntax keyword pfmainConf tlsproxy_enforce_tls
+syntax keyword pfmainConf tlsproxy_service_name
+syntax keyword pfmainConf tlsproxy_tls_CAfile
+syntax keyword pfmainConf tlsproxy_tls_CApath
+syntax keyword pfmainConf tlsproxy_tls_always_issue_session_ids
+syntax keyword pfmainConf tlsproxy_tls_ask_ccert
+syntax keyword pfmainConf tlsproxy_tls_ccert_verifydepth
+syntax keyword pfmainConf tlsproxy_tls_cert_file
+syntax keyword pfmainConf tlsproxy_tls_ciphers
+syntax keyword pfmainConf tlsproxy_tls_dcert_file
+syntax keyword pfmainConf tlsproxy_tls_dh1024_param_file
+syntax keyword pfmainConf tlsproxy_tls_dh512_param_file
+syntax keyword pfmainConf tlsproxy_tls_dkey_file
+syntax keyword pfmainConf tlsproxy_tls_eccert_file
+syntax keyword pfmainConf tlsproxy_tls_eckey_file
+syntax keyword pfmainConf tlsproxy_tls_eecdh_grade
+syntax keyword pfmainConf tlsproxy_tls_exclude_ciphers
+syntax keyword pfmainConf tlsproxy_tls_fingerprint_digest
+syntax keyword pfmainConf tlsproxy_tls_key_file
+syntax keyword pfmainConf tlsproxy_tls_loglevel
+syntax keyword pfmainConf tlsproxy_tls_mandatory_ciphers
+syntax keyword pfmainConf tlsproxy_tls_mandatory_exclude_ciphers
+syntax keyword pfmainConf tlsproxy_tls_mandatory_protocols
+syntax keyword pfmainConf tlsproxy_tls_protocols
+syntax keyword pfmainConf tlsproxy_tls_req_ccert
+syntax keyword pfmainConf tlsproxy_tls_security_level
+syntax keyword pfmainConf tlsproxy_tls_session_cache_timeout
+syntax keyword pfmainConf tlsproxy_use_tls
+syntax keyword pfmainConf tlsproxy_watchdog_timeout
 syntax keyword pfmainConf trace_service_name
+syntax keyword pfmainConf transport_delivery_slot_cost
+syntax keyword pfmainConf transport_delivery_slot_discount
+syntax keyword pfmainConf transport_delivery_slot_loan
+syntax keyword pfmainConf transport_destination_concurrency_failed_cohort_limit
+syntax keyword pfmainConf transport_destination_concurrency_limit
+syntax keyword pfmainConf transport_destination_concurrency_negative_feedback
+syntax keyword pfmainConf transport_destination_concurrency_positive_feedback
+syntax keyword pfmainConf transport_destination_rate_delay
+syntax keyword pfmainConf transport_destination_recipient_limit
+syntax keyword pfmainConf transport_extra_recipient_limit
+syntax keyword pfmainConf transport_initial_destination_concurrency
 syntax keyword pfmainConf transport_maps
+syntax keyword pfmainConf transport_minimum_delivery_slots
+syntax keyword pfmainConf transport_recipient_limit
+syntax keyword pfmainConf transport_recipient_refill_delay
+syntax keyword pfmainConf transport_recipient_refill_limit
 syntax keyword pfmainConf transport_retry_time
 syntax keyword pfmainConf trigger_timeout
 syntax keyword pfmainConf undisclosed_recipients_header
 syntax keyword pfmainConf unknown_address_reject_code
+syntax keyword pfmainConf unknown_address_tempfail_action
 syntax keyword pfmainConf unknown_client_reject_code
+syntax keyword pfmainConf unknown_helo_hostname_tempfail_action
 syntax keyword pfmainConf unknown_hostname_reject_code
 syntax keyword pfmainConf unknown_local_recipient_reject_code
 syntax keyword pfmainConf unknown_relay_recipient_reject_code
 syntax keyword pfmainConf unknown_virtual_alias_reject_code
 syntax keyword pfmainConf unknown_virtual_mailbox_reject_code
+syntax keyword pfmainConf unverified_recipient_defer_code
 syntax keyword pfmainConf unverified_recipient_reject_code
+syntax keyword pfmainConf unverified_recipient_reject_reason
+syntax keyword pfmainConf unverified_recipient_tempfail_action
+syntax keyword pfmainConf unverified_sender_defer_code
 syntax keyword pfmainConf unverified_sender_reject_code
+syntax keyword pfmainConf unverified_sender_reject_reason
+syntax keyword pfmainConf unverified_sender_tempfail_action
 syntax keyword pfmainConf verp_delimiter_filter
 syntax keyword pfmainConf virtual_alias_domains
 syntax keyword pfmainConf virtual_alias_expansion_limit
@@ -496,7 +747,9 @@ syntax keyword pfmainConf virtual_minimum_uid
 syntax keyword pfmainConf virtual_transport
 syntax keyword pfmainConf virtual_uid_maps
 syntax match pfmainRef "$\<2bounce_notice_recipient\>"
+syntax match pfmainRef "$\<access_map_defer_code\>"
 syntax match pfmainRef "$\<access_map_reject_code\>"
+syntax match pfmainRef "$\<address_verify_cache_cleanup_interval\>"
 syntax match pfmainRef "$\<address_verify_default_transport\>"
 syntax match pfmainRef "$\<address_verify_local_transport\>"
 syntax match pfmainRef "$\<address_verify_map\>"
@@ -510,6 +763,7 @@ syntax match pfmainRef "$\<address_verify_positive_refresh_time\>"
 syntax match pfmainRef "$\<address_verify_relay_transport\>"
 syntax match pfmainRef "$\<address_verify_relayhost\>"
 syntax match pfmainRef "$\<address_verify_sender\>"
+syntax match pfmainRef "$\<address_verify_sender_dependent_default_transport_maps\>"
 syntax match pfmainRef "$\<address_verify_sender_dependent_relayhost_maps\>"
 syntax match pfmainRef "$\<address_verify_service_name\>"
 syntax match pfmainRef "$\<address_verify_transport_maps\>"
@@ -557,22 +811,31 @@ syntax match pfmainRef "$\<connection_cache_service_name\>"
 syntax match pfmainRef "$\<connection_cache_status_update_time\>"
 syntax match pfmainRef "$\<connection_cache_ttl_limit\>"
 syntax match pfmainRef "$\<content_filter\>"
+syntax match pfmainRef "$\<cyrus_sasl_config_path\>"
 syntax match pfmainRef "$\<daemon_directory\>"
 syntax match pfmainRef "$\<daemon_timeout\>"
+syntax match pfmainRef "$\<data_directory\>"
 syntax match pfmainRef "$\<debug_peer_level\>"
 syntax match pfmainRef "$\<debug_peer_list\>"
 syntax match pfmainRef "$\<default_database_type\>"
 syntax match pfmainRef "$\<default_delivery_slot_cost\>"
 syntax match pfmainRef "$\<default_delivery_slot_discount\>"
 syntax match pfmainRef "$\<default_delivery_slot_loan\>"
+syntax match pfmainRef "$\<default_destination_concurrency_failed_cohort_limit\>"
 syntax match pfmainRef "$\<default_destination_concurrency_limit\>"
+syntax match pfmainRef "$\<default_destination_concurrency_negative_feedback\>"
+syntax match pfmainRef "$\<default_destination_concurrency_positive_feedback\>"
+syntax match pfmainRef "$\<default_destination_rate_delay\>"
 syntax match pfmainRef "$\<default_destination_recipient_limit\>"
 syntax match pfmainRef "$\<default_extra_recipient_limit\>"
+syntax match pfmainRef "$\<default_filter_nexthop\>"
 syntax match pfmainRef "$\<default_minimum_delivery_slots\>"
 syntax match pfmainRef "$\<default_privs\>"
 syntax match pfmainRef "$\<default_process_limit\>"
 syntax match pfmainRef "$\<default_rbl_reply\>"
 syntax match pfmainRef "$\<default_recipient_limit\>"
+syntax match pfmainRef "$\<default_recipient_refill_delay\>"
+syntax match pfmainRef "$\<default_recipient_refill_limit\>"
 syntax match pfmainRef "$\<default_transport\>"
 syntax match pfmainRef "$\<default_verp_delimiters\>"
 syntax match pfmainRef "$\<defer_code\>"
@@ -583,15 +846,22 @@ syntax match pfmainRef "$\<delay_notice_recipient\>"
 syntax match pfmainRef "$\<delay_warning_time\>"
 syntax match pfmainRef "$\<deliver_lock_attempts\>"
 syntax match pfmainRef "$\<deliver_lock_delay\>"
+syntax match pfmainRef "$\<destination_concurrency_feedback_debug\>"
+syntax match pfmainRef "$\<detect_8bit_encoding_header\>"
 syntax match pfmainRef "$\<disable_dns_lookups\>"
 syntax match pfmainRef "$\<disable_mime_input_processing\>"
 syntax match pfmainRef "$\<disable_mime_output_conversion\>"
 syntax match pfmainRef "$\<disable_verp_bounces\>"
 syntax match pfmainRef "$\<disable_vrfy_command\>"
+syntax match pfmainRef "$\<dnsblog_reply_delay\>"
+syntax match pfmainRef "$\<dnsblog_service_name\>"
 syntax match pfmainRef "$\<dont_remove\>"
 syntax match pfmainRef "$\<double_bounce_sender\>"
 syntax match pfmainRef "$\<duplicate_filter_limit\>"
+syntax match pfmainRef "$\<empty_address_default_transport_maps_lookup_key\>"
 syntax match pfmainRef "$\<empty_address_recipient\>"
+syntax match pfmainRef "$\<empty_address_relayhost_maps_lookup_key\>"
+syntax match pfmainRef "$\<enable_long_queue_ids\>"
 syntax match pfmainRef "$\<enable_original_recipient\>"
 syntax match pfmainRef "$\<error_notice_recipient\>"
 syntax match pfmainRef "$\<error_service_name\>"
@@ -625,13 +895,16 @@ syntax match pfmainRef "$\<in_flow_delay\>"
 syntax match pfmainRef "$\<inet_interfaces\>"
 syntax match pfmainRef "$\<inet_protocols\>"
 syntax match pfmainRef "$\<initial_destination_concurrency\>"
+syntax match pfmainRef "$\<internal_mail_filter_classes\>"
 syntax match pfmainRef "$\<invalid_hostname_reject_code\>"
 syntax match pfmainRef "$\<ipc_idle\>"
 syntax match pfmainRef "$\<ipc_timeout\>"
 syntax match pfmainRef "$\<ipc_ttl\>"
 syntax match pfmainRef "$\<line_length_limit\>"
+syntax match pfmainRef "$\<lmtp_address_preference\>"
 syntax match pfmainRef "$\<lmtp_bind_address\>"
 syntax match pfmainRef "$\<lmtp_bind_address6\>"
+syntax match pfmainRef "$\<lmtp_body_checks\>"
 syntax match pfmainRef "$\<lmtp_cname_overrides_servername\>"
 syntax match pfmainRef "$\<lmtp_connect_timeout\>"
 syntax match pfmainRef "$\<lmtp_connection_cache_destinations\>"
@@ -646,23 +919,34 @@ syntax match pfmainRef "$\<lmtp_destination_concurrency_limit\>"
 syntax match pfmainRef "$\<lmtp_destination_recipient_limit\>"
 syntax match pfmainRef "$\<lmtp_discard_lhlo_keyword_address_maps\>"
 syntax match pfmainRef "$\<lmtp_discard_lhlo_keywords\>"
+syntax match pfmainRef "$\<lmtp_dns_resolver_options\>"
 syntax match pfmainRef "$\<lmtp_enforce_tls\>"
 syntax match pfmainRef "$\<lmtp_generic_maps\>"
+syntax match pfmainRef "$\<lmtp_header_checks\>"
 syntax match pfmainRef "$\<lmtp_host_lookup\>"
 syntax match pfmainRef "$\<lmtp_lhlo_name\>"
 syntax match pfmainRef "$\<lmtp_lhlo_timeout\>"
 syntax match pfmainRef "$\<lmtp_line_length_limit\>"
 syntax match pfmainRef "$\<lmtp_mail_timeout\>"
+syntax match pfmainRef "$\<lmtp_mime_header_checks\>"
 syntax match pfmainRef "$\<lmtp_mx_address_limit\>"
 syntax match pfmainRef "$\<lmtp_mx_session_limit\>"
+syntax match pfmainRef "$\<lmtp_nested_header_checks\>"
+syntax match pfmainRef "$\<lmtp_per_record_deadline\>"
 syntax match pfmainRef "$\<lmtp_pix_workaround_delay_time\>"
+syntax match pfmainRef "$\<lmtp_pix_workaround_maps\>"
 syntax match pfmainRef "$\<lmtp_pix_workaround_threshold_time\>"
+syntax match pfmainRef "$\<lmtp_pix_workarounds\>"
 syntax match pfmainRef "$\<lmtp_quit_timeout\>"
 syntax match pfmainRef "$\<lmtp_quote_rfc821_envelope\>"
 syntax match pfmainRef "$\<lmtp_randomize_addresses\>"
 syntax match pfmainRef "$\<lmtp_rcpt_timeout\>"
+syntax match pfmainRef "$\<lmtp_reply_filter\>"
 syntax match pfmainRef "$\<lmtp_rset_timeout\>"
+syntax match pfmainRef "$\<lmtp_sasl_auth_cache_name\>"
+syntax match pfmainRef "$\<lmtp_sasl_auth_cache_time\>"
 syntax match pfmainRef "$\<lmtp_sasl_auth_enable\>"
+syntax match pfmainRef "$\<lmtp_sasl_auth_soft_bounce\>"
 syntax match pfmainRef "$\<lmtp_sasl_mechanism_filter\>"
 syntax match pfmainRef "$\<lmtp_sasl_password_maps\>"
 syntax match pfmainRef "$\<lmtp_sasl_path\>"
@@ -675,10 +959,31 @@ syntax match pfmainRef "$\<lmtp_sender_dependent_authentication\>"
 syntax match pfmainRef "$\<lmtp_skip_5xx_greeting\>"
 syntax match pfmainRef "$\<lmtp_starttls_timeout\>"
 syntax match pfmainRef "$\<lmtp_tcp_port\>"
+syntax match pfmainRef "$\<lmtp_tls_CAfile\>"
+syntax match pfmainRef "$\<lmtp_tls_CApath\>"
+syntax match pfmainRef "$\<lmtp_tls_block_early_mail_reply\>"
+syntax match pfmainRef "$\<lmtp_tls_cert_file\>"
+syntax match pfmainRef "$\<lmtp_tls_ciphers\>"
+syntax match pfmainRef "$\<lmtp_tls_dcert_file\>"
+syntax match pfmainRef "$\<lmtp_tls_dkey_file\>"
+syntax match pfmainRef "$\<lmtp_tls_eccert_file\>"
+syntax match pfmainRef "$\<lmtp_tls_eckey_file\>"
 syntax match pfmainRef "$\<lmtp_tls_enforce_peername\>"
+syntax match pfmainRef "$\<lmtp_tls_exclude_ciphers\>"
+syntax match pfmainRef "$\<lmtp_tls_fingerprint_cert_match\>"
+syntax match pfmainRef "$\<lmtp_tls_fingerprint_digest\>"
+syntax match pfmainRef "$\<lmtp_tls_key_file\>"
+syntax match pfmainRef "$\<lmtp_tls_loglevel\>"
+syntax match pfmainRef "$\<lmtp_tls_mandatory_ciphers\>"
+syntax match pfmainRef "$\<lmtp_tls_mandatory_exclude_ciphers\>"
+syntax match pfmainRef "$\<lmtp_tls_mandatory_protocols\>"
 syntax match pfmainRef "$\<lmtp_tls_note_starttls_offer\>"
 syntax match pfmainRef "$\<lmtp_tls_per_site\>"
+syntax match pfmainRef "$\<lmtp_tls_policy_maps\>"
+syntax match pfmainRef "$\<lmtp_tls_protocols\>"
 syntax match pfmainRef "$\<lmtp_tls_scert_verifydepth\>"
+syntax match pfmainRef "$\<lmtp_tls_session_cache_timeout\>"
+syntax match pfmainRef "$\<lmtp_tls_verify_cert_match\>"
 syntax match pfmainRef "$\<lmtp_use_tls\>"
 syntax match pfmainRef "$\<lmtp_xforward_timeout\>"
 syntax match pfmainRef "$\<local_command_shell\>"
@@ -703,6 +1008,7 @@ syntax match pfmainRef "$\<mailq_path\>"
 syntax match pfmainRef "$\<manpage_directory\>"
 syntax match pfmainRef "$\<maps_rbl_domains\>"
 syntax match pfmainRef "$\<maps_rbl_reject_code\>"
+syntax match pfmainRef "$\<master_service_disable\>"
 syntax match pfmainRef "$\<masquerade_classes\>"
 syntax match pfmainRef "$\<masquerade_domains\>"
 syntax match pfmainRef "$\<masquerade_exceptions\>"
@@ -713,10 +1019,31 @@ syntax match pfmainRef "$\<maximal_queue_lifetime\>"
 syntax match pfmainRef "$\<message_reject_characters\>"
 syntax match pfmainRef "$\<message_size_limit\>"
 syntax match pfmainRef "$\<message_strip_characters\>"
+syntax match pfmainRef "$\<milter_command_timeout\>"
+syntax match pfmainRef "$\<milter_connect_macros\>"
+syntax match pfmainRef "$\<milter_connect_timeout\>"
+syntax match pfmainRef "$\<milter_content_timeout\>"
+syntax match pfmainRef "$\<milter_data_macros\>"
+syntax match pfmainRef "$\<milter_default_action\>"
+syntax match pfmainRef "$\<milter_end_of_data_macros\>"
+syntax match pfmainRef "$\<milter_end_of_header_macros\>"
+syntax match pfmainRef "$\<milter_header_checks\>"
+syntax match pfmainRef "$\<milter_helo_macros\>"
+syntax match pfmainRef "$\<milter_macro_daemon_name\>"
+syntax match pfmainRef "$\<milter_macro_v\>"
+syntax match pfmainRef "$\<milter_mail_macros\>"
+syntax match pfmainRef "$\<milter_protocol\>"
+syntax match pfmainRef "$\<milter_rcpt_macros\>"
+syntax match pfmainRef "$\<milter_unknown_command_macros\>"
 syntax match pfmainRef "$\<mime_boundary_length_limit\>"
 syntax match pfmainRef "$\<mime_header_checks\>"
 syntax match pfmainRef "$\<mime_nesting_limit\>"
 syntax match pfmainRef "$\<minimal_backoff_time\>"
+syntax match pfmainRef "$\<multi_instance_directories\>"
+syntax match pfmainRef "$\<multi_instance_enable\>"
+syntax match pfmainRef "$\<multi_instance_group\>"
+syntax match pfmainRef "$\<multi_instance_name\>"
+syntax match pfmainRef "$\<multi_instance_wrapper\>"
 syntax match pfmainRef "$\<multi_recipient_bounce_reject_code\>"
 syntax match pfmainRef "$\<mydestination\>"
 syntax match pfmainRef "$\<mydomain\>"
@@ -727,23 +1054,77 @@ syntax match pfmainRef "$\<myorigin\>"
 syntax match pfmainRef "$\<nested_header_checks\>"
 syntax match pfmainRef "$\<newaliases_path\>"
 syntax match pfmainRef "$\<non_fqdn_reject_code\>"
+syntax match pfmainRef "$\<non_smtpd_milters\>"
 syntax match pfmainRef "$\<notify_classes\>"
 syntax match pfmainRef "$\<owner_request_special\>"
 syntax match pfmainRef "$\<parent_domain_matches_subdomains\>"
 syntax match pfmainRef "$\<permit_mx_backup_networks\>"
 syntax match pfmainRef "$\<pickup_service_name\>"
 syntax match pfmainRef "$\<plaintext_reject_code\>"
+syntax match pfmainRef "$\<postmulti_control_commands\>"
+syntax match pfmainRef "$\<postmulti_start_commands\>"
+syntax match pfmainRef "$\<postmulti_stop_commands\>"
+syntax match pfmainRef "$\<postscreen_access_list\>"
+syntax match pfmainRef "$\<postscreen_bare_newline_action\>"
+syntax match pfmainRef "$\<postscreen_bare_newline_enable\>"
+syntax match pfmainRef "$\<postscreen_bare_newline_ttl\>"
+syntax match pfmainRef "$\<postscreen_blacklist_action\>"
+syntax match pfmainRef "$\<postscreen_cache_cleanup_interval\>"
+syntax match pfmainRef "$\<postscreen_cache_map\>"
+syntax match pfmainRef "$\<postscreen_cache_retention_time\>"
+syntax match pfmainRef "$\<postscreen_client_connection_count_limit\>"
+syntax match pfmainRef "$\<postscreen_command_count_limit\>"
+syntax match pfmainRef "$\<postscreen_command_filter\>"
+syntax match pfmainRef "$\<postscreen_command_time_limit\>"
+syntax match pfmainRef "$\<postscreen_disable_vrfy_command\>"
+syntax match pfmainRef "$\<postscreen_discard_ehlo_keyword_address_maps\>"
+syntax match pfmainRef "$\<postscreen_discard_ehlo_keywords\>"
+syntax match pfmainRef "$\<postscreen_dnsbl_action\>"
+syntax match pfmainRef "$\<postscreen_dnsbl_reply_map\>"
+syntax match pfmainRef "$\<postscreen_dnsbl_sites\>"
+syntax match pfmainRef "$\<postscreen_dnsbl_threshold\>"
+syntax match pfmainRef "$\<postscreen_dnsbl_ttl\>"
+syntax match pfmainRef "$\<postscreen_enforce_tls\>"
+syntax match pfmainRef "$\<postscreen_expansion_filter\>"
+syntax match pfmainRef "$\<postscreen_forbidden_commands\>"
+syntax match pfmainRef "$\<postscreen_greet_action\>"
+syntax match pfmainRef "$\<postscreen_greet_banner\>"
+syntax match pfmainRef "$\<postscreen_greet_ttl\>"
+syntax match pfmainRef "$\<postscreen_greet_wait\>"
+syntax match pfmainRef "$\<postscreen_helo_required\>"
+syntax match pfmainRef "$\<postscreen_non_smtp_command_action\>"
+syntax match pfmainRef "$\<postscreen_non_smtp_command_enable\>"
+syntax match pfmainRef "$\<postscreen_non_smtp_command_ttl\>"
+syntax match pfmainRef "$\<postscreen_pipelining_action\>"
+syntax match pfmainRef "$\<postscreen_pipelining_enable\>"
+syntax match pfmainRef "$\<postscreen_pipelining_ttl\>"
+syntax match pfmainRef "$\<postscreen_post_queue_limit\>"
+syntax match pfmainRef "$\<postscreen_pre_queue_limit\>"
+syntax match pfmainRef "$\<postscreen_reject_footer\>"
+syntax match pfmainRef "$\<postscreen_tls_security_level\>"
+syntax match pfmainRef "$\<lmtp_tls_secure_cert_match\>"
+syntax match pfmainRef "$\<lmtp_tls_security_level\>"
+syntax match pfmainRef "$\<lmtp_tls_session_cache_database\>"
+syntax match pfmainRef "$\<postscreen_use_tls\>"
+syntax match pfmainRef "$\<postscreen_watchdog_timeout\>"
+syntax match pfmainRef "$\<postscreen_whitelist_interfaces\>"
 syntax match pfmainRef "$\<prepend_delivered_header\>"
+syntax match pfmainRef "$\<process_id\>"
 syntax match pfmainRef "$\<process_id_directory\>"
+syntax match pfmainRef "$\<process_name\>"
 syntax match pfmainRef "$\<propagate_unmatched_extensions\>"
 syntax match pfmainRef "$\<proxy_interfaces\>"
 syntax match pfmainRef "$\<proxy_read_maps\>"
+syntax match pfmainRef "$\<proxy_write_maps\>"
+syntax match pfmainRef "$\<proxymap_service_name\>"
+syntax match pfmainRef "$\<proxywrite_service_name\>"
 syntax match pfmainRef "$\<qmgr_clog_warn_time\>"
 syntax match pfmainRef "$\<qmgr_fudge_factor\>"
 syntax match pfmainRef "$\<qmgr_message_active_limit\>"
 syntax match pfmainRef "$\<qmgr_message_recipient_limit\>"
 syntax match pfmainRef "$\<qmgr_message_recipient_minimum\>"
 syntax match pfmainRef "$\<qmqpd_authorized_clients\>"
+syntax match pfmainRef "$\<qmqpd_client_port_logging\>"
 syntax match pfmainRef "$\<qmqpd_error_delay\>"
 syntax match pfmainRef "$\<qmqpd_timeout\>"
 syntax match pfmainRef "$\<queue_directory\>"
@@ -759,6 +1140,7 @@ syntax match pfmainRef "$\<recipient_canonical_classes\>"
 syntax match pfmainRef "$\<recipient_canonical_maps\>"
 syntax match pfmainRef "$\<recipient_delimiter\>"
 syntax match pfmainRef "$\<reject_code\>"
+syntax match pfmainRef "$\<reject_tempfail_action\>"
 syntax match pfmainRef "$\<relay_clientcerts\>"
 syntax match pfmainRef "$\<relay_destination_concurrency_limit\>"
 syntax match pfmainRef "$\<relay_destination_recipient_limit\>"
@@ -770,23 +1152,28 @@ syntax match pfmainRef "$\<relayhost\>"
 syntax match pfmainRef "$\<relocated_maps\>"
 syntax match pfmainRef "$\<remote_header_rewrite_domain\>"
 syntax match pfmainRef "$\<require_home_directory\>"
+syntax match pfmainRef "$\<reset_owner_alias\>"
 syntax match pfmainRef "$\<resolve_dequoted_address\>"
 syntax match pfmainRef "$\<resolve_null_domain\>"
 syntax match pfmainRef "$\<resolve_numeric_domain\>"
 syntax match pfmainRef "$\<rewrite_service_name\>"
 syntax match pfmainRef "$\<sample_directory\>"
+syntax match pfmainRef "$\<send_cyrus_sasl_authzid\>"
 syntax match pfmainRef "$\<sender_bcc_maps\>"
 syntax match pfmainRef "$\<sender_canonical_classes\>"
 syntax match pfmainRef "$\<sender_canonical_maps\>"
+syntax match pfmainRef "$\<sender_dependent_default_transport_maps\>"
 syntax match pfmainRef "$\<sender_dependent_relayhost_maps\>"
 syntax match pfmainRef "$\<sendmail_path\>"
 syntax match pfmainRef "$\<service_throttle_time\>"
 syntax match pfmainRef "$\<setgid_group\>"
 syntax match pfmainRef "$\<show_user_unknown_table_name\>"
 syntax match pfmainRef "$\<showq_service_name\>"
+syntax match pfmainRef "$\<smtp_address_preference\>"
 syntax match pfmainRef "$\<smtp_always_send_ehlo\>"
 syntax match pfmainRef "$\<smtp_bind_address\>"
 syntax match pfmainRef "$\<smtp_bind_address6\>"
+syntax match pfmainRef "$\<smtp_body_checks\>"
 syntax match pfmainRef "$\<smtp_cname_overrides_servername\>"
 syntax match pfmainRef "$\<smtp_connect_timeout\>"
 syntax match pfmainRef "$\<smtp_connection_cache_destinations\>"
@@ -801,25 +1188,35 @@ syntax match pfmainRef "$\<smtp_destination_concurrency_limit\>"
 syntax match pfmainRef "$\<smtp_destination_recipient_limit\>"
 syntax match pfmainRef "$\<smtp_discard_ehlo_keyword_address_maps\>"
 syntax match pfmainRef "$\<smtp_discard_ehlo_keywords\>"
+syntax match pfmainRef "$\<smtp_dns_resolver_options\>"
 syntax match pfmainRef "$\<smtp_enforce_tls\>"
 syntax match pfmainRef "$\<smtp_fallback_relay\>"
 syntax match pfmainRef "$\<smtp_generic_maps\>"
+syntax match pfmainRef "$\<smtp_header_checks\>"
 syntax match pfmainRef "$\<smtp_helo_name\>"
 syntax match pfmainRef "$\<smtp_helo_timeout\>"
 syntax match pfmainRef "$\<smtp_host_lookup\>"
 syntax match pfmainRef "$\<smtp_line_length_limit\>"
 syntax match pfmainRef "$\<smtp_mail_timeout\>"
+syntax match pfmainRef "$\<smtp_mime_header_checks\>"
 syntax match pfmainRef "$\<smtp_mx_address_limit\>"
 syntax match pfmainRef "$\<smtp_mx_session_limit\>"
+syntax match pfmainRef "$\<smtp_nested_header_checks\>"
 syntax match pfmainRef "$\<smtp_never_send_ehlo\>"
 syntax match pfmainRef "$\<smtp_pix_workaround_delay_time\>"
+syntax match pfmainRef "$\<smtp_pix_workaround_maps\>"
 syntax match pfmainRef "$\<smtp_pix_workaround_threshold_time\>"
+syntax match pfmainRef "$\<smtp_pix_workarounds\>"
 syntax match pfmainRef "$\<smtp_quit_timeout\>"
 syntax match pfmainRef "$\<smtp_quote_rfc821_envelope\>"
 syntax match pfmainRef "$\<smtp_randomize_addresses\>"
 syntax match pfmainRef "$\<smtp_rcpt_timeout\>"
+syntax match pfmainRef "$\<smtp_reply_filter\>"
 syntax match pfmainRef "$\<smtp_rset_timeout\>"
+syntax match pfmainRef "$\<smtp_sasl_auth_cache_name\>"
+syntax match pfmainRef "$\<smtp_sasl_auth_cache_time\>"
 syntax match pfmainRef "$\<smtp_sasl_auth_enable\>"
+syntax match pfmainRef "$\<smtp_sasl_auth_soft_bounce\>"
 syntax match pfmainRef "$\<smtp_sasl_mechanism_filter\>"
 syntax match pfmainRef "$\<smtp_sasl_password_maps\>"
 syntax match pfmainRef "$\<smtp_sasl_path\>"
@@ -834,18 +1231,33 @@ syntax match pfmainRef "$\<smtp_skip_quit_response\>"
 syntax match pfmainRef "$\<smtp_starttls_timeout\>"
 syntax match pfmainRef "$\<smtp_tls_CAfile\>"
 syntax match pfmainRef "$\<smtp_tls_CApath\>"
+syntax match pfmainRef "$\<smtp_tls_block_early_mail_reply\>"
 syntax match pfmainRef "$\<smtp_tls_cert_file\>"
 syntax match pfmainRef "$\<smtp_tls_cipherlist\>"
+syntax match pfmainRef "$\<smtp_tls_ciphers\>"
 syntax match pfmainRef "$\<smtp_tls_dcert_file\>"
 syntax match pfmainRef "$\<smtp_tls_dkey_file\>"
+syntax match pfmainRef "$\<smtp_tls_eccert_file\>"
+syntax match pfmainRef "$\<smtp_tls_eckey_file\>"
 syntax match pfmainRef "$\<smtp_tls_enforce_peername\>"
+syntax match pfmainRef "$\<smtp_tls_exclude_ciphers\>"
+syntax match pfmainRef "$\<smtp_tls_fingerprint_cert_match\>"
+syntax match pfmainRef "$\<smtp_tls_fingerprint_digest\>"
 syntax match pfmainRef "$\<smtp_tls_key_file\>"
 syntax match pfmainRef "$\<smtp_tls_loglevel\>"
+syntax match pfmainRef "$\<smtp_tls_mandatory_ciphers\>"
+syntax match pfmainRef "$\<smtp_tls_mandatory_exclude_ciphers\>"
+syntax match pfmainRef "$\<smtp_tls_mandatory_protocols\>"
 syntax match pfmainRef "$\<smtp_tls_note_starttls_offer\>"
 syntax match pfmainRef "$\<smtp_tls_per_site\>"
+syntax match pfmainRef "$\<smtp_tls_policy_maps\>"
+syntax match pfmainRef "$\<smtp_tls_protocols\>"
 syntax match pfmainRef "$\<smtp_tls_scert_verifydepth\>"
+syntax match pfmainRef "$\<smtp_tls_secure_cert_match\>"
+syntax match pfmainRef "$\<smtp_tls_security_level\>"
 syntax match pfmainRef "$\<smtp_tls_session_cache_database\>"
 syntax match pfmainRef "$\<smtp_tls_session_cache_timeout\>"
+syntax match pfmainRef "$\<smtp_tls_verify_cert_match\>"
 syntax match pfmainRef "$\<smtp_use_tls\>"
 syntax match pfmainRef "$\<smtp_xforward_timeout\>"
 syntax match pfmainRef "$\<smtpd_authorized_verp_clients\>"
@@ -857,8 +1269,10 @@ syntax match pfmainRef "$\<smtpd_client_connection_rate_limit\>"
 syntax match pfmainRef "$\<smtpd_client_event_limit_exceptions\>"
 syntax match pfmainRef "$\<smtpd_client_message_rate_limit\>"
 syntax match pfmainRef "$\<smtpd_client_new_tls_session_rate_limit\>"
+syntax match pfmainRef "$\<smtpd_client_port_logging\>"
 syntax match pfmainRef "$\<smtpd_client_recipient_rate_limit\>"
 syntax match pfmainRef "$\<smtpd_client_restrictions\>"
+syntax match pfmainRef "$\<smtpd_command_filter\>"
 syntax match pfmainRef "$\<smtpd_data_restrictions\>"
 syntax match pfmainRef "$\<smtpd_delay_open_until_valid_rcpt\>"
 syntax match pfmainRef "$\<smtpd_delay_reject\>"
@@ -875,18 +1289,22 @@ syntax match pfmainRef "$\<smtpd_helo_required\>"
 syntax match pfmainRef "$\<smtpd_helo_restrictions\>"
 syntax match pfmainRef "$\<smtpd_history_flush_threshold\>"
 syntax match pfmainRef "$\<smtpd_junk_command_limit\>"
+syntax match pfmainRef "$\<smtpd_milters\>"
 syntax match pfmainRef "$\<smtpd_noop_commands\>"
 syntax match pfmainRef "$\<smtpd_null_access_lookup_key\>"
 syntax match pfmainRef "$\<smtpd_peername_lookup\>"
+syntax match pfmainRef "$\<smtpd_per_record_deadline\>"
 syntax match pfmainRef "$\<smtpd_policy_service_max_idle\>"
 syntax match pfmainRef "$\<smtpd_policy_service_max_ttl\>"
 syntax match pfmainRef "$\<smtpd_policy_service_timeout\>"
 syntax match pfmainRef "$\<smtpd_proxy_ehlo\>"
 syntax match pfmainRef "$\<smtpd_proxy_filter\>"
+syntax match pfmainRef "$\<smtpd_proxy_options\>"
 syntax match pfmainRef "$\<smtpd_proxy_timeout\>"
 syntax match pfmainRef "$\<smtpd_recipient_limit\>"
 syntax match pfmainRef "$\<smtpd_recipient_overshoot_limit\>"
 syntax match pfmainRef "$\<smtpd_recipient_restrictions\>"
+syntax match pfmainRef "$\<smtpd_reject_footer\>"
 syntax match pfmainRef "$\<smtpd_reject_unlisted_recipient\>"
 syntax match pfmainRef "$\<smtpd_reject_unlisted_sender\>"
 syntax match pfmainRef "$\<smtpd_restriction_classes\>"
@@ -900,59 +1318,142 @@ syntax match pfmainRef "$\<smtpd_sasl_tls_security_options\>"
 syntax match pfmainRef "$\<smtpd_sasl_type\>"
 syntax match pfmainRef "$\<smtpd_sender_login_maps\>"
 syntax match pfmainRef "$\<smtpd_sender_restrictions\>"
+syntax match pfmainRef "$\<smtpd_service_name\>"
 syntax match pfmainRef "$\<smtpd_soft_error_limit\>"
 syntax match pfmainRef "$\<smtpd_starttls_timeout\>"
 syntax match pfmainRef "$\<smtpd_timeout\>"
 syntax match pfmainRef "$\<smtpd_tls_CAfile\>"
 syntax match pfmainRef "$\<smtpd_tls_CApath\>"
+syntax match pfmainRef "$\<smtpd_tls_always_issue_session_ids\>"
 syntax match pfmainRef "$\<smtpd_tls_ask_ccert\>"
 syntax match pfmainRef "$\<smtpd_tls_auth_only\>"
 syntax match pfmainRef "$\<smtpd_tls_ccert_verifydepth\>"
 syntax match pfmainRef "$\<smtpd_tls_cert_file\>"
 syntax match pfmainRef "$\<smtpd_tls_cipherlist\>"
+syntax match pfmainRef "$\<smtpd_tls_ciphers\>"
 syntax match pfmainRef "$\<smtpd_tls_dcert_file\>"
 syntax match pfmainRef "$\<smtpd_tls_dh1024_param_file\>"
 syntax match pfmainRef "$\<smtpd_tls_dh512_param_file\>"
 syntax match pfmainRef "$\<smtpd_tls_dkey_file\>"
+syntax match pfmainRef "$\<smtpd_tls_eccert_file\>"
+syntax match pfmainRef "$\<smtpd_tls_eckey_file\>"
+syntax match pfmainRef "$\<smtpd_tls_eecdh_grade\>"
+syntax match pfmainRef "$\<smtpd_tls_exclude_ciphers\>"
+syntax match pfmainRef "$\<smtpd_tls_fingerprint_digest\>"
 syntax match pfmainRef "$\<smtpd_tls_key_file\>"
 syntax match pfmainRef "$\<smtpd_tls_loglevel\>"
+syntax match pfmainRef "$\<smtpd_tls_mandatory_ciphers\>"
+syntax match pfmainRef "$\<smtpd_tls_mandatory_exclude_ciphers\>"
+syntax match pfmainRef "$\<smtpd_tls_mandatory_protocols\>"
+syntax match pfmainRef "$\<smtpd_tls_protocols\>"
 syntax match pfmainRef "$\<smtpd_tls_received_header\>"
 syntax match pfmainRef "$\<smtpd_tls_req_ccert\>"
+syntax match pfmainRef "$\<smtpd_tls_security_level\>"
 syntax match pfmainRef "$\<smtpd_tls_session_cache_database\>"
 syntax match pfmainRef "$\<smtpd_tls_session_cache_timeout\>"
 syntax match pfmainRef "$\<smtpd_tls_wrappermode\>"
 syntax match pfmainRef "$\<smtpd_use_tls\>"
 syntax match pfmainRef "$\<soft_bounce\>"
 syntax match pfmainRef "$\<stale_lock_time\>"
+syntax match pfmainRef "$\<stress\>"
 syntax match pfmainRef "$\<strict_7bit_headers\>"
 syntax match pfmainRef "$\<strict_8bitmime\>"
 syntax match pfmainRef "$\<strict_8bitmime_body\>"
 syntax match pfmainRef "$\<strict_mime_encoding_domain\>"
 syntax match pfmainRef "$\<strict_rfc821_envelopes\>"
+syntax match pfmainRef "$\<strict_7bit_headers\>"
+syntax match pfmainRef "$\<strict_8bitmime\>"
+syntax match pfmainRef "$\<strict_8bitmime_body\>"
+syntax match pfmainRef "$\<strict_mailbox_ownership\>"
+syntax match pfmainRef "$\<strict_mime_encoding_domain\>"
+syntax match pfmainRef "$\<strict_rfc821_envelopes\>"
 syntax match pfmainRef "$\<sun_mailtool_compatibility\>"
 syntax match pfmainRef "$\<swap_bangpath\>"
 syntax match pfmainRef "$\<syslog_facility\>"
 syntax match pfmainRef "$\<syslog_name\>"
+syntax match pfmainRef "$\<tcp_windowsize\>"
+syntax match pfmainRef "$\<tls_append_default_CA\>"
 syntax match pfmainRef "$\<tls_daemon_random_bytes\>"
+syntax match pfmainRef "$\<tls_disable_workarounds\>"
+syntax match pfmainRef "$\<tls_eecdh_strong_curve\>"
+syntax match pfmainRef "$\<tls_eecdh_ultra_curve\>"
+syntax match pfmainRef "$\<tls_export_cipherlist\>"
+syntax match pfmainRef "$\<tls_high_cipherlist\>"
+syntax match pfmainRef "$\<tls_low_cipherlist\>"
+syntax match pfmainRef "$\<tls_medium_cipherlist\>"
+syntax match pfmainRef "$\<tls_null_cipherlist\>"
+syntax match pfmainRef "$\<tls_preempt_cipherlist\>"
 syntax match pfmainRef "$\<tls_random_bytes\>"
 syntax match pfmainRef "$\<tls_random_exchange_name\>"
 syntax match pfmainRef "$\<tls_random_prng_update_period\>"
 syntax match pfmainRef "$\<tls_random_reseed_period\>"
 syntax match pfmainRef "$\<tls_random_source\>"
+syntax match pfmainRef "$\<tlsproxy_enforce_tls\>"
+syntax match pfmainRef "$\<tlsproxy_service_name\>"
+syntax match pfmainRef "$\<tlsproxy_tls_CAfile\>"
+syntax match pfmainRef "$\<tlsproxy_tls_CApath\>"
+syntax match pfmainRef "$\<tlsproxy_tls_always_issue_session_ids\>"
+syntax match pfmainRef "$\<tlsproxy_tls_ask_ccert\>"
+syntax match pfmainRef "$\<tlsproxy_tls_ccert_verifydepth\>"
+syntax match pfmainRef "$\<tlsproxy_tls_cert_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_ciphers\>"
+syntax match pfmainRef "$\<tlsproxy_tls_dcert_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_dh1024_param_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_dh512_param_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_dkey_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_eccert_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_eckey_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_eecdh_grade\>"
+syntax match pfmainRef "$\<tlsproxy_tls_exclude_ciphers\>"
+syntax match pfmainRef "$\<tlsproxy_tls_fingerprint_digest\>"
+syntax match pfmainRef "$\<tlsproxy_tls_key_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_loglevel\>"
+syntax match pfmainRef "$\<tlsproxy_tls_mandatory_ciphers\>"
+syntax match pfmainRef "$\<tlsproxy_tls_mandatory_exclude_ciphers\>"
+syntax match pfmainRef "$\<tlsproxy_tls_mandatory_protocols\>"
+syntax match pfmainRef "$\<tlsproxy_tls_protocols\>"
+syntax match pfmainRef "$\<tlsproxy_tls_req_ccert\>"
+syntax match pfmainRef "$\<tlsproxy_tls_security_level\>"
+syntax match pfmainRef "$\<tlsproxy_tls_session_cache_timeout\>"
+syntax match pfmainRef "$\<tlsproxy_use_tls\>"
+syntax match pfmainRef "$\<tlsproxy_watchdog_timeout\>"
 syntax match pfmainRef "$\<trace_service_name\>"
+syntax match pfmainRef "$\<transport_delivery_slot_cost\>"
+syntax match pfmainRef "$\<transport_delivery_slot_discount\>"
+syntax match pfmainRef "$\<transport_delivery_slot_loan\>"
+syntax match pfmainRef "$\<transport_destination_concurrency_failed_cohort_limit\>"
+syntax match pfmainRef "$\<transport_destination_concurrency_limit\>"
+syntax match pfmainRef "$\<transport_destination_concurrency_negative_feedback\>"
+syntax match pfmainRef "$\<transport_destination_concurrency_positive_feedback\>"
+syntax match pfmainRef "$\<transport_destination_rate_delay\>"
+syntax match pfmainRef "$\<transport_destination_recipient_limit\>"
+syntax match pfmainRef "$\<transport_extra_recipient_limit\>"
+syntax match pfmainRef "$\<transport_initial_destination_concurrency\>"
 syntax match pfmainRef "$\<transport_maps\>"
+syntax match pfmainRef "$\<transport_minimum_delivery_slots\>"
+syntax match pfmainRef "$\<transport_recipient_limit\>"
+syntax match pfmainRef "$\<transport_recipient_refill_delay\>"
+syntax match pfmainRef "$\<transport_recipient_refill_limit\>"
 syntax match pfmainRef "$\<transport_retry_time\>"
 syntax match pfmainRef "$\<trigger_timeout\>"
 syntax match pfmainRef "$\<undisclosed_recipients_header\>"
 syntax match pfmainRef "$\<unknown_address_reject_code\>"
+syntax match pfmainRef "$\<unknown_address_tempfail_action\>"
 syntax match pfmainRef "$\<unknown_client_reject_code\>"
+syntax match pfmainRef "$\<unknown_helo_hostname_tempfail_action\>"
 syntax match pfmainRef "$\<unknown_hostname_reject_code\>"
 syntax match pfmainRef "$\<unknown_local_recipient_reject_code\>"
 syntax match pfmainRef "$\<unknown_relay_recipient_reject_code\>"
 syntax match pfmainRef "$\<unknown_virtual_alias_reject_code\>"
 syntax match pfmainRef "$\<unknown_virtual_mailbox_reject_code\>"
+syntax match pfmainRef "$\<unverified_recipient_defer_code\>"
 syntax match pfmainRef "$\<unverified_recipient_reject_code\>"
+syntax match pfmainRef "$\<unverified_recipient_reject_reason\>"
+syntax match pfmainRef "$\<unverified_recipient_tempfail_action\>"
+syntax match pfmainRef "$\<unverified_sender_defer_code\>"
 syntax match pfmainRef "$\<unverified_sender_reject_code\>"
+syntax match pfmainRef "$\<unverified_sender_reject_reason\>"
+syntax match pfmainRef "$\<unverified_sender_tempfail_action\>"
 syntax match pfmainRef "$\<verp_delimiter_filter\>"
 syntax match pfmainRef "$\<virtual_alias_domains\>"
 syntax match pfmainRef "$\<virtual_alias_expansion_limit\>"
@@ -969,6 +1470,7 @@ syntax match pfmainRef "$\<virtual_mailbox_maps\>"
 syntax match pfmainRef "$\<virtual_minimum_uid\>"
 syntax match pfmainRef "$\<virtual_transport\>"
 syntax match pfmainRef "$\<virtual_uid_maps\>"
+
 syntax keyword pfmainWord all
 syntax keyword pfmainWord check_address_map
 syntax keyword pfmainWord check_ccert_access
@@ -987,17 +1489,29 @@ syntax keyword pfmainWord check_sender_access
 syntax keyword pfmainWord check_sender_mx_access
 syntax keyword pfmainWord check_sender_ns_access
 syntax keyword pfmainWord class
+syntax keyword pfmainWord client_address
+syntax keyword pfmainWord client_port
 syntax keyword pfmainWord defer_if_permit
 syntax keyword pfmainWord defer_if_reject
 syntax keyword pfmainWord dns
+syntax keyword pfmainWord drop
+syntax keyword pfmainWord dunno
+syntax keyword pfmainWord enforce
 syntax keyword pfmainWord envelope_recipient
 syntax keyword pfmainWord envelope_sender
+syntax keyword pfmainWord export
 syntax keyword pfmainWord header_recipient
 syntax keyword pfmainWord header_sender
+syntax keyword pfmainWord high
 syntax keyword pfmainWord host
+syntax keyword pfmainWord ignore
 syntax keyword pfmainWord ipv4
 syntax keyword pfmainWord ipv6
+syntax keyword pfmainWord localtime
+syntax keyword pfmainWord low
+syntax keyword pfmainWord medium
 syntax keyword pfmainWord native
+syntax keyword pfmainWord null
 syntax keyword pfmainWord permit
 syntax keyword pfmainWord permit_auth_destination
 syntax keyword pfmainWord permit_inet_interfaces
@@ -1008,6 +1522,7 @@ syntax keyword pfmainWord permit_sasl_authenticated
 syntax keyword pfmainWord permit_tls_all_clientcerts
 syntax keyword pfmainWord permit_tls_clientcerts
 syntax keyword pfmainWord reject
+syntax keyword pfmainWord reject_authenticated_sender_login_mismatch
 syntax keyword pfmainWord reject_invalid_helo_hostname
 syntax keyword pfmainWord reject_invalid_hostname
 syntax keyword pfmainWord reject_maps_rbl
@@ -1041,8 +1556,23 @@ syntax keyword pfmainWord reject_unverified_recipient
 syntax keyword pfmainWord reject_unverified_sender
 syntax keyword pfmainWord sleep
 syntax keyword pfmainWord smtpd_access_maps
+syntax keyword pfmainWord server_name
+syntax keyword pfmainWord speed_adjust
 syntax keyword pfmainWord subnet
 syntax keyword pfmainWord warn_if_reject
+syntax keyword pfmainWord CRYPTOPRO_TLSEXT_BUG
+syntax keyword pfmainWord DONT_INSERT_EMPTY_FRAGMENTS
+syntax keyword pfmainWord LEGACY_SERVER_CONNECT
+syntax keyword pfmainWord MICROSOFT_BIG_SSLV3_BUFFER
+syntax keyword pfmainWord MICROSOFT_SESS_ID_BUG
+syntax keyword pfmainWord MSIE_SSLV2_RSA_PADDING
+syntax keyword pfmainWord NETSCAPE_CHALLENGE_BUG
+syntax keyword pfmainWord NETSCAPE_REUSE_CIPHER_CHANGE_BUG
+syntax keyword pfmainWord SSLEAY_080_CLIENT_DH_BUG
+syntax keyword pfmainWord SSLREF2_REUSE_CERT_TYPE_BUG
+syntax keyword pfmainWord TLS_BLOCK_PADDING_BUG
+syntax keyword pfmainWord TLS_D5_BUG
+syntax keyword pfmainWord TLS_ROLLBACK_BUG
 
 syntax keyword pfmainDict      btree cidr environ hash nis pcre proxy regexp sdbm sdbm static tcp unix
 syntax keyword pfmainQueueDir  incoming active deferred corrupt hold
index 4e6b95c..ac3b20c 100644 (file)
@@ -1,11 +1,10 @@
 " Vim syntax file
 " Language: php PHP 3/4/5
-" Maintainer: Peter Hodge <toomuchphp-vim@yahoo.com>
-" Last Change:  June 9, 2006
-" URL: http://www.vim.org/scripts/script.php?script_id=1571
-"
-" Former Maintainer:  Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Former URL: http://svn.debian.org/wsvn/pkg-vim/trunk/runtime/syntax/php.vim?op=file&rev=0&sc=0
+" Maintainer: Jason Woofenden <jason@jasonwoof.com>
+" Last Change: Dec 11, 2012
+" URL: https://gitorious.org/jasonwoof/vim-syntax/blobs/master/php.vim
+" Former Maintainers: Peter Hodge <toomuchphp-vim@yahoo.com>
+"         Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 "
 " Note: If you are using a colour terminal with dark background, you will probably find
 "       the 'elflord' colorscheme is much better for PHP's syntax than the default
 "        the string would be highlighted as an error, what is incorrect.
 "    ii) Same problem if you are setting php_folding = 2 with a closing
 "        } inside an string on the first line of this string.
-"
-"  - A double-quoted string like this:
-"      "$foo->someVar->someOtherVar->bar"
-"    will highight '->someOtherVar->bar' as though they will be parsed
-"    as object member variables, but PHP only recognizes the first
-"    object member variable ($foo->someVar).
-"
-"
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -119,6 +110,10 @@ if exists( "php_htmlInStrings")
   syn cluster phpAddStrings add=@htmlTop
 endif
 
+" make sure we can use \ at the begining of the line to do a continuation
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case match
 
 " Env Variables
@@ -132,7 +127,7 @@ syn keyword phpCoreConstant PHP_VERSION PHP_OS DEFAULT_INCLUDE_PATH PEAR_INSTALL
 
 syn case ignore
 
-syn keyword phpConstant  __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__  contained
+syn keyword phpConstant  __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__ __DIR__ __NAMESPACE__  contained
 
 
 " Function and Methods ripped from php_manual_de.tar.gz Jan 2003
@@ -187,6 +182,7 @@ syn keyword phpFunctions  assert_options assert dl extension_loaded get_cfg_var
 syn keyword phpFunctions  ingres_autocommit ingres_close ingres_commit ingres_connect ingres_fetch_array ingres_fetch_object ingres_fetch_row ingres_field_length ingres_field_name ingres_field_nullable ingres_field_precision ingres_field_scale ingres_field_type ingres_num_fields ingres_num_rows ingres_pconnect ingres_query ingres_rollback  contained
 syn keyword phpFunctions  ircg_channel_mode ircg_disconnect ircg_fetch_error_msg ircg_get_username ircg_html_encode ircg_ignore_add ircg_ignore_del ircg_is_conn_alive ircg_join ircg_kick ircg_lookup_format_messages ircg_msg ircg_nick ircg_nickname_escape ircg_nickname_unescape ircg_notice ircg_part ircg_pconnect ircg_register_format_messages ircg_set_current ircg_set_file ircg_set_on_die ircg_topic ircg_whois  contained
 syn keyword phpFunctions  java_last_exception_clear java_last_exception_get contained
+syn keyword phpFunctions  json_decode json_encode json_last_error contained
 syn keyword phpFunctions  ldap_8859_to_t61 ldap_add ldap_bind ldap_close ldap_compare ldap_connect ldap_count_entries ldap_delete ldap_dn2ufn ldap_err2str ldap_errno ldap_error ldap_explode_dn ldap_first_attribute ldap_first_entry ldap_first_reference ldap_free_result ldap_get_attributes ldap_get_dn ldap_get_entries ldap_get_option ldap_get_values_len ldap_get_values ldap_list ldap_mod_add ldap_mod_del ldap_mod_replace ldap_modify ldap_next_attribute ldap_next_entry ldap_next_reference ldap_parse_reference ldap_parse_result ldap_read ldap_rename ldap_search ldap_set_option ldap_set_rebind_proc ldap_sort ldap_start_tls ldap_t61_to_8859 ldap_unbind  contained
 syn keyword phpFunctions  lzf_compress lzf_decompress lzf_optimized_for contained
 syn keyword phpFunctions  ezmlm_hash mail contained
@@ -274,7 +270,7 @@ syn keyword phpRepeat as do endfor endforeach endwhile for foreach while  contai
 syn keyword phpLabel  case default switch contained
 
 " Statement
-syn keyword phpStatement  return break continue exit  contained
+syn keyword phpStatement  return break continue exit goto  contained
 
 " Keyword
 syn keyword phpKeyword  var const contained
@@ -283,7 +279,7 @@ syn keyword phpKeyword  var const contained
 syn keyword phpType bool[ean] int[eger] real double float string array object NULL  contained
 
 " Structure
-syn keyword phpStructure  extends implements instanceof parent self contained
+syn keyword phpStructure  namespace extends implements instanceof parent self contained
 
 " Operator
 syn match phpOperator "[-=+%^&|*!.~?:]" contained display
@@ -303,11 +299,41 @@ syn match phpIdentifierSimply "${\h\w*}"  contains=phpOperator,phpParent  contai
 syn region  phpIdentifierComplex  matchgroup=phpParent start="{\$"rs=e-1 end="}"  contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierComplexP contained extend
 syn region  phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contains=@phpClInside contained
 
+" Interpolated indentifiers (inside strings)
+       syn match phpBrackets "[][}{]" contained display
+       " errors
+               syn match phpInterpSimpleError "\[[^]]*\]" contained display  " fallback (if nothing else matches)
+               syn match phpInterpSimpleError "->[^a-zA-Z_]" contained display
+               " make sure these stay above the correct DollarCurlies so they don't take priority
+               syn match phpInterpBogusDollarCurley "${[^}]*}" contained display  " fallback (if nothing else matches)
+       syn match phpinterpSimpleBracketsInner "\w\+" contained
+       syn match phpInterpSimpleBrackets "\[\h\w*]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
+       syn match phpInterpSimpleBrackets "\[\d\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
+       syn match phpInterpSimpleBrackets "\[0[xX]\x\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
+       syn match phpInterpSimple "\$\h\w*\(\[[^]]*\]\|->\h\w*\)\?" contained contains=phpInterpSimpleBrackets,phpIdentifier,phpInterpSimpleError,phpMethods,phpMemberSelector display
+       syn match phpInterpVarname "\h\w*" contained
+       syn match phpInterpMethodName "\h\w*" contained " default color
+       syn match phpInterpSimpleCurly "\${\h\w*}"  contains=phpInterpVarname contained extend
+       syn region phpInterpDollarCurley1Helper matchgroup=phpParent start="{" end="\[" contains=phpInterpVarname contained
+       syn region phpInterpDollarCurly1 matchgroup=phpParent start="\${\h\w*\["rs=s+1 end="]}" contains=phpInterpDollarCurley1Helper,@phpClConst contained extend
+
+       syn match phpInterpDollarCurley2Helper "{\h\w*->" contains=phpBrackets,phpInterpVarname,phpMemberSelector contained
+
+       syn region phpInterpDollarCurly2 matchgroup=phpParent start="\${\h\w*->"rs=s+1 end="}" contains=phpInterpDollarCurley2Helper,phpInterpMethodName contained
+
+       syn match phpInterpBogusDollarCurley "${\h\w*->}" contained display
+       syn match phpInterpBogusDollarCurley "${\h\w*\[]}" contained display
+
+       syn region phpInterpComplex matchgroup=phpParent start="{\$"rs=e-1 end="}" contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierComplexP contained extend
+       syn region phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contains=@phpClInside contained
+       " define a cluster to get all interpolation syntaxes for double-quoted strings
+       syn cluster phpInterpDouble contains=phpInterpSimple,phpInterpSimpleCurly,phpInterpDollarCurly1,phpInterpDollarCurly2,phpInterpBogusDollarCurley,phpInterpComplex
+
 " Methoden
 syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display
 
 " Include
-syn keyword phpInclude  include require include_once require_once contained
+syn keyword phpInclude  include require include_once require_once use contained
 
 " Peter Hodge - added 'clone' keyword
 " Define
@@ -323,10 +349,18 @@ syn match phpNumber "\<0x\x\{1,8}\>"  contained display
 " Float
 syn match phpFloat  "\(-\=\<\d+\|-\=\)\.\d\+\>" contained display
 
-" SpecialChar
-syn match phpSpecialChar  "\\[abcfnrtyv\\]" contained display
-syn match phpSpecialChar  "\\\d\{3}"  contained contains=phpOctalError display
-syn match phpSpecialChar  "\\x\x\{2}" contained display
+" Backslash escapes
+       syn case match
+       " for double quotes and heredoc
+       syn match phpBackslashSequences  "\\[fnrtv\\\"$]" contained display
+       syn match phpBackslashSequences  "\\\d\{1,3}"  contained contains=phpOctalError display
+       syn match phpBackslashSequences  "\\x\x\{1,2}" contained display
+       " additional sequence for double quotes only
+       syn match phpBackslashDoubleQuote "\\[\"]" contained display
+       " for single quotes only
+       syn match phpBackslashSingleQuote "\\[\\']" contained display
+       syn case ignore
+
 
 " Error
 syn match phpOctalError "[89]"  contained display
@@ -355,23 +389,32 @@ endif
 
 " String
 if exists("php_parent_error_open")
-  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained keepend
-  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained keepend
-  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings contained keepend
+  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpBackslashSequences,phpBackslashDoubleQuote,@phpInterpDouble contained keepend
+  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpBackslashSequences,phpIdentifierSimply,phpIdentifierComplex contained keepend
+  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings,phpBackslashSingleQuote contained keepend
 else
-  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
-  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
-  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings contained keepend extend
+  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpBackslashSequences,phpBackslashDoubleQuote,@phpInterpDouble contained extend keepend
+  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpBackslashSequences,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
+  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings,phpBackslashSingleQuote contained keepend extend
 endif
 
-" HereDoc
+" HereDoc and NowDoc
 if version >= 600
   syn case match
-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\I\i*\)$" end="^\z1\(;\=$\)\@=" contained contains=phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+
+  " HereDoc
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\I\i*\)\2$" end="^\z1\(;\=$\)\@=" contained contains=phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+" including HTML,JavaScript,SQL even if not enabled via options
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@="  contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@="  contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+
+  " NowDoc
+  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\I\i*\)'$" end="^\z1\(;\=$\)\@=" contained keepend extend
 " including HTML,JavaScript,SQL even if not enabled via options
-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="  contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="  contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@="  contained contains=@htmlTop keepend extend
+  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop keepend extend
+  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@="  contained contains=@htmlJavascript keepend extend
   syn case ignore
 endif
 
@@ -388,7 +431,7 @@ else
 endif
 
 syn cluster phpClConst  contains=phpFunctions,phpIdentifier,phpConditional,phpRepeat,phpStatement,phpOperator,phpRelation,phpStringSingle,phpStringDouble,phpBacktick,phpNumber,phpFloat,phpKeyword,phpType,phpBoolean,phpStructure,phpMethodsVar,phpConstant,phpCoreConstant,phpException
-syn cluster phpClInside contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc
+syn cluster phpClInside contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc,phpNowDoc
 syn cluster phpClFunction contains=@phpClInside,phpDefine,phpParentError,phpStorageClass
 syn cluster phpClTop  contains=@phpClFunction,phpFoldFunction,phpFoldClass,phpFoldInterface,phpFoldTry,phpFoldCatch
 
@@ -451,17 +494,14 @@ else
   syn keyword phpStorageClass final global private protected public static  contained
 endif
 
+" TODO: fold on "trait". For now just make sure it gets colored:
+syn keyword phpStructure trait
+
 " ================================================================
 " Peter Hodge - June 9, 2006
 " Some of these changes (highlighting isset/unset/echo etc) are not so
 " critical, but they make things more colourful. :-)
 
-" corrected highlighting for an escaped '\$' inside a double-quoted string
-syn match phpSpecialChar  "\\\$"  contained display
-
-" highlight object variables inside strings
-syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display containedin=phpStringDouble
-
 " highlight constant E_STRICT
 syntax case match
 syntax keyword phpCoreConstant E_STRICT contained
@@ -612,11 +652,21 @@ if version >= 508 || !exists("did_php_syn_inits")
   HiLink   phpType  Type
   HiLink   phpInclude Include
   HiLink   phpDefine  Define
-  HiLink   phpSpecialChar SpecialChar
+  HiLink   phpBackslashSequences SpecialChar
+  HiLink   phpBackslashDoubleQuote SpecialChar
+  HiLink   phpBackslashSingleQuote SpecialChar
   HiLink   phpParent  Delimiter
+  HiLink   phpBrackets  Delimiter
   HiLink   phpIdentifierConst Delimiter
   HiLink   phpParentError Error
   HiLink   phpOctalError  Error
+  HiLink   phpInterpSimpleError Error
+  HiLink   phpInterpBogusDollarCurley Error
+  HiLink   phpInterpDollarCurly1 Error
+  HiLink   phpInterpDollarCurly2 Error
+  HiLink   phpInterpSimpleBracketsInner String
+  HiLink   phpInterpSimpleCurly Delimiter
+  HiLink   phpInterpVarname Identifier
   HiLink   phpTodo  Todo
   HiLink   phpMemberSelector  Structure
   if exists("php_oldStyle")
@@ -628,13 +678,13 @@ if version >= 508 || !exists("did_php_syn_inits")
   hi  phpIdentifier guifg=DarkGray ctermfg=Brown
   hi  phpIdentifierSimply guifg=DarkGray ctermfg=Brown
   else
-  HiLink  phpIntVar Identifier
-  HiLink  phpEnvVar Identifier
-  HiLink  phpOperator Operator
-  HiLink  phpVarSelector  Operator
-  HiLink  phpRelation Operator
-  HiLink  phpIdentifier Identifier
-  HiLink  phpIdentifierSimply Identifier
+  HiLink   phpIntVar Identifier
+  HiLink   phpEnvVar Identifier
+  HiLink   phpOperator Operator
+  HiLink   phpVarSelector  Operator
+  HiLink   phpRelation Operator
+  HiLink   phpIdentifier Identifier
+  HiLink   phpIdentifierSimply Identifier
   endif
 
   delcommand HiLink
@@ -646,4 +696,8 @@ if main_syntax == 'php'
   unlet main_syntax
 endif
 
+" put cpoptions back the way we found it
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8 sts=2 sw=2 expandtab
index 749535e..4c64b9b 100644 (file)
@@ -12,9 +12,9 @@ elseif exists("b:current_syntax")
 endif
 
 if version >= 600
-  setlocal iskeyword=@,48-57,_,128-167,224-235,-,
+  setlocal iskeyword=@,48-57,_,128-167,224-235,-
 else
-  set iskeyword=@,48-57,_,128-167,224-235,-,
+  set iskeyword=@,48-57,_,128-167,224-235,-
 endif
 
 syn keyword pineConfig addrbook-sort-rule
diff --git a/runtime/syntax/pli.vim b/runtime/syntax/pli.vim
new file mode 100644 (file)
index 0000000..f8d7e51
--- /dev/null
@@ -0,0 +1,278 @@
+" Vim syntax file
+" Modified from  http://plnet.org/files/vim/
+" using keywords from http://www.kednos.com/pli/docs/reference_manual/6291pro_contents.html
+"    2012-11-13 Alan Thompson
+
+if version < 600
+    syntax clear
+elseif exists("b:current_syntax")
+    finish
+endif
+
+syn case ignore
+
+" Todo.
+syn keyword pl1Todo TODO FIXME XXX DEBUG NOTE
+
+" pl1CommentGroup allows adding matches for special things in comments
+" 20010723az: Added this so that these could be matched in comments...  
+syn cluster pl1CommentGroup contains=pl1Todo
+
+syn match   pl1Garbage        "[^ \t()]"
+syn match   pl1Identifier     "[a-z][a-z0-9$_#]*"
+syn match   pl1HostIdentifier ":[a-z][a-z0-9$_#]*"
+
+" 20010723az: When wanted, highlight the trailing whitespace -- this is
+" based on c_space_errors 
+if exists("c_space_errors")
+    if !exists("c_no_trail_space_error")
+        syn match pl1SpaceError "\s\+$"
+    endif
+    if !exists("c_no_tab_space_error")
+        syn match pl1SpaceError " \+\t"me=e-1
+    endif
+endif
+
+" Symbols.  
+syn match   pl1Symbol         "\(;\|,\|\.\)"
+syn match   pl1PreProcSym     "%"
+
+" Operators.
+syn match   pl1Operator       "\(&\|:\|!\|+\|-\|\*\|/\|=\|<\|>\|@\|\*\*\|!=\|\~=\)"
+syn match   pl1Operator       "\(\^\|\^=\|<=\|>=\|:=\|=>\|\.\.\|||\|<<\|>>\|\"\)"
+
+" Attributes
+syn keyword pl1Attribute BACKWARDS BUFFERED BUF CONNECTED CONN CONSTANT EVENT
+syn keyword pl1Attribute EXCLUSIVE EXCL FORMAT GENERIC IRREDUCIBLE IRRED LOCAL
+syn keyword pl1Attribute REDUCIBLE RED TASK TRANSIENT UNBUFFERED UNBUF ALIGNED ANY
+syn keyword pl1Attribute AREA AUTOMATIC AUTO BASED BUILTIN CONDITION COND CONTROLLED
+syn keyword pl1Attribute CTL DEFINED DEF DIRECT ENVIRONMENT ENV EXTERNAL EXT FILE
+syn keyword pl1Attribute GLOBALDEF GLOBALREF INITIAL INIT INPUT INTERNAL INT KEYED
+syn keyword pl1Attribute LABEL LIKE LIST MEMBER NONVARYING NONVAR OPTIONAL OPTIONS
+syn keyword pl1Attribute OUTPUT PARAMETER PARM PICTURE PIC POSITION POS PRECISION
+syn keyword pl1Attribute PREC PRINT READONLY RECORD REFER RETURNS SEQUENTIAL SEQL
+syn keyword pl1Attribute STATIC STREAM STRUCTURE TRUNCATE UNALIGNED UNAL UNION UPDATE
+syn keyword pl1Attribute VARIABLE VARYING VAR COMPLEX CPLX REAL BINARY BIN BIT
+syn keyword pl1Attribute CHARACTER CHAR DECIMAL DEC DESCRIPTOR DESC DIMENSION DIM
+syn keyword pl1Attribute FIXED FLOAT OFFSET POINTER PTR REFERENCE VALUE VAL 
+
+" Functions
+syn keyword pl1Function AFTER ALL ANY BEFORE COMPLETION CPLN CONJG COUNT
+syn keyword pl1Function CURRENTSTORAGE CSTG DATAFIELD DECAT DOT ERF ERFC IMAG
+syn keyword pl1Function ONCOUNT ONFIELD ONLOC POLY PRIORITY REPEAT SAMEKEY STATUS
+syn keyword pl1Function STORAGE STG ABS ACOS ACTUALCOUNT ADD ADDR ADDREL ALLOCATION
+syn keyword pl1Function ALLOCN ASIN ATAN ATAND ATANH BOOL BYTE BYTESIZE CEIL COLLATE
+syn keyword pl1Function COPY COS COSD COSH DATE DATETIME DECODE DISPLAY DIVIDE EMPTY
+syn keyword pl1Function ENCODE ERROR EVERY EXP EXTEND FLOOR FLUSH FREE HBOUND HIGH
+syn keyword pl1Function INDEX INFORM INT LBOUND LENGTH LINE LINENO LOG LOG10 LOG2
+syn keyword pl1Function LOW LTRIM MAX MAXLENGTH MIN MOD MULTIPLY NEXT_VOLUME NULL
+syn keyword pl1Function ONARGSLIST ONCHAR ONCODE ONFILE ONKEY ONSOURCE PAGENO POSINT
+syn keyword pl1Function PRESENT PROD RANK RELEASE RESIGNAL REVERSE REWIND ROUND
+syn keyword pl1Function RTRIM SEARCH SIGN SIN SIND SINH SIZE SOME SPACEBLOCK SQRT
+syn keyword pl1Function STRING SUBSTR SUBTRACT SUM TAN TAND TANH TIME TRANSLATE TRIM
+syn keyword pl1Function TRUNC UNSPEC VALID VARIANT VERIFY WARN 
+
+" Other keywords
+syn keyword pl1Other ATTENTION ATTN C CONVERSION CONV DATA NAME NOCONVERSION
+syn keyword pl1Other NOCONV NOFIXEDOVERFLOW NOFOFL NOOVERFLOW NOSIZE
+syn keyword pl1Other NOSTRINGRANGE NOSTRG NOSTRINGSIZE NOSTRZ NOSUBSCRIPTRANGE
+syn keyword pl1Other NOSUBRG NOZERODIVIDE NOZDIV OVERFLOW OFL PENDING RECORD
+syn keyword pl1Other REENTRANT SIZE STRINGRANGE STRG STRINGSIZE STRZ
+syn keyword pl1Other SUBSCRIPTRANGE SUBRG TRANSMIT A ANYCONDITION APPEND B B1 B2
+syn keyword pl1Other B3 B4 BACKUP_DATE BATCH BLOCK_BOUNDARY_FORMAT BLOCK_IO
+syn keyword pl1Other BLOCK_SIZE BUCKET_SIZE BY CANCEL_CONTROL_O
+syn keyword pl1Other CARRIAGE_RETURN_FORMAT COLUMN COL CONTIGUOUS
+syn keyword pl1Other CONTIGUOUS_BEST_TRY CONVERSION CONV CREATION_DATE
+syn keyword pl1Other CURRENT_POSITION DEFAULT_FILE_NAME DEFERRED_WRITE E EDIT
+syn keyword pl1Other ENDFILE ENDPAGE EXPIRATION_DATE EXTENSION_SIZE F FAST_DELETE
+syn keyword pl1Other FILE_ID FILE_ID_TO FILE_SIZE FINISH FIXEDOVERFLOW FOFL
+syn keyword pl1Other FIXED_CONTROL_FROM FIXED_CONTROL_SIZE FIXED_CONTROL_SIZE_TO
+syn keyword pl1Other FIXED_CONTROL_TO FIXED_LENGTH_RECORDS FROM GROUP_PROTECTION
+syn keyword pl1Other IDENT IGNORE_LINE_MARKS IN INDEXED INDEX_NUMBER INITIAL_FILL
+syn keyword pl1Other INTO KEY KEYFROM KEYTO LINESIZE LOCK_ON_READ LOCK_ON_WRITE
+syn keyword pl1Other MAIN MANUAL_UNLOCKING MATCH_GREATER MATCH_GREATER_EQUAL
+syn keyword pl1Other MATCH_NEXT MATCH_NEXT_EQUAL MAXIMUM_RECORD_NUMBER
+syn keyword pl1Other MAXIMUM_RECORD_SIZE MULTIBLOCK_COUNT MULTIBUFFER_COUNT
+syn keyword pl1Other NOLOCK NONEXISTENT_RECORD NONRECURSIVE NO_ECHO NO_FILTER
+syn keyword pl1Other NO_SHARE OVERFLOW OFL OWNER_GROUP OWNER_ID OWNER_MEMBER
+syn keyword pl1Other OWNER_PROTECTION P PAGE PAGESIZE PRINTER_FORMAT PROMPT
+syn keyword pl1Other PURGE_TYPE_AHEAD R READ_AHEAD READ_CHECK READ_REGARDLESS
+syn keyword pl1Other RECORD_ID RECORD_ID_ACCESS RECORD_ID_TO RECURSIVE REPEAT
+syn keyword pl1Other RETRIEVAL_POINTERS REVISION_DATE REWIND_ON_CLOSE
+syn keyword pl1Other REWIND_ON_OPEN SCALARVARYING SET SHARED_READ SHARED_WRITE
+syn keyword pl1Other SKIP SPOOL STORAGE STRINGRANGE STRG SUBSCRIPTRANGE SUBRG
+syn keyword pl1Other SUPERSEDE SYSIN SYSPRINT SYSTEM_PROTECTION TAB TEMPORARY
+syn keyword pl1Other TIMEOUT_PERIOD TITLE TO UNDEFINEDFILE UNDF UNDERFLOW UFL
+syn keyword pl1Other UNTIL USER_OPEN VAXCONDITION WAIT_FOR_RECORD WHILE
+syn keyword pl1Other WORLD_PROTECTION WRITE_BEHIND WRITE_CHECK X ZERODIVIDE ZDIV 
+
+" PreProcessor keywords
+syn keyword pl1PreProc ACTIVATE DEACTIVATE DECLARE DCL DICTIONARY DO END ERROR
+syn keyword pl1PreProc FATAL GOTO IF INCLUDE INFORM LIST NOLIST PAGE PROCEDURE PROC
+syn keyword pl1PreProc REPLACE RETURN SBTTL TITLE WARN THEN ELSE 
+
+" Statements
+syn keyword pl1Statement CALL SUB ENTRY BY NAME CASE CHECK COPY DEFAULT DFT DELAY
+syn keyword pl1Statement DESCRIPTORS DISPLAY EXIT FETCH HALT IGNORE LIST LOCATE
+syn keyword pl1Statement NOCHECK NOLOCK NONE ORDER RANGE RELEASE REORDER REPLY SNAP
+syn keyword pl1Statement SYSTEM TAB UNLOCK WAIT ALLOCATE ALLOC BEGIN CALL CLOSE
+syn keyword pl1Statement DECLARE DCL DELETE DO ELSE END FORMAT GET GOTO GO TO IF
+syn keyword pl1Statement LEAVE NORESCAN ON OPEN OTHERWISE OTHER PROCEDURE PROC PUT
+syn keyword pl1Statement READ RESCAN RETURN REVERT REWRITE SELECT SIGNAL SNAP
+syn keyword pl1Statement STATEMENT STOP SYSTEM THEN WHEN WRITE 
+
+" PL1's own keywords
+" syn match   pl1Keyword "\<END\>"
+" syn match   pl1Keyword "\.COUNT\>"hs=s+1
+" syn match   pl1Keyword "\.EXISTS\>"hs=s+1
+" syn match   pl1Keyword "\.FIRST\>"hs=s+1
+" syn match   pl1Keyword "\.LAST\>"hs=s+1
+" syn match   pl1Keyword "\.DELETE\>"hs=s+1
+" syn match   pl1Keyword "\.PREV\>"hs=s+1
+" syn match   pl1Keyword "\.NEXT\>"hs=s+1
+
+if exists("pl1_highlight_triggers")
+    syn keyword pl1Trigger  INSERTING UPDATING DELETING
+endif
+
+" Conditionals.
+syn keyword pl1Conditional ELSIF ELSE IF
+syn match   pl1Conditional "\<END\s\+IF\>"
+
+" Loops.
+syn keyword pl1Repeat FOR LOOP WHILE FORALL
+syn match   pl1Repeat "\<END\s\+LOOP\>"
+
+" Various types of comments.
+" 20010723az: Added the ability to treat strings within comments just like
+" C does.
+if exists("c_comment_strings")
+    syntax match pl1CommentSkip contained "^\s*\*\($\|\s\+\)"
+    syntax region pl1CommentString contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=pl1CommentSkip
+    syntax region pl1Comment2String contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end="$"
+    syntax region pl1CommentL start="--" skip="\\$" end="$" keepend contains=@pl1CommentGroup,pl1Comment2String,pl1CharLiteral,pl1BooleanLiteral,pl1NumbersCom,pl1SpaceError
+    syntax region pl1Comment start="/\*" end="\*/" contains=@pl1CommentGroup,pl1Comment2String,pl1CharLiteral,pl1BooleanLiteral,pl1NumbersCom,pl1SpaceError
+else
+    syntax region pl1CommentL start="--" skip="\\$" end="$" keepend contains=@pl1CommentGroup,pl1SpaceError
+    syntax region pl1Comment start="/\*" end="\*/" contains=@pl1CommentGroup,pl1SpaceError
+endif
+
+" 20010723az: These are the old comment commands ... commented out.
+" syn match   pl1Comment    "--.*$" contains=pl1Todo
+" syn region  pl1Comment    start="/\*" end="\*/" contains=pl1Todo
+syn sync ccomment pl1Comment
+syn sync ccomment pl1CommentL
+
+" To catch unterminated string literals.
+syn match   pl1StringError    "'.*$"
+
+" Various types of literals.
+" 20010723az: Added stuff for comment matching.
+syn match pl1Numbers transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=pl1IntLiteral,pl1FloatLiteral
+syn match pl1NumbersCom contained transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=pl1IntLiteral,pl1FloatLiteral
+syn match pl1IntLiteral contained "[+-]\=\d\+"
+syn match pl1FloatLiteral contained "[+-]\=\d\+\.\d*"
+syn match pl1FloatLiteral contained "[+-]\=\d*\.\d*"
+"syn match pl1FloatLiteral "[+-]\=\([0-9]*\.[0-9]\+\|[0-9]\+\.[0-9]\+\)\(e[+-]\=[0-9]\+\)\="
+syn match   pl1CharLiteral    "'[^']'"
+syn match   pl1StringLiteral  "'\([^']\|''\)*'"
+syn keyword pl1BooleanLiteral TRUE FALSE NULL
+
+" The built-in types.
+syn keyword pl1Storage ANYDATA ANYTYPE BFILE BINARY_INTEGER BLOB BOOLEAN
+syn keyword pl1Storage BYTE CHAR CHARACTER CLOB CURSOR DATE DAY DEC DECIMAL
+syn keyword pl1Storage DOUBLE DSINTERVAL_UNCONSTRAINED FLOAT HOUR
+syn keyword pl1Storage INT INTEGER INTERVAL LOB LONG MINUTE
+syn keyword pl1Storage MLSLABEL MONTH NATURAL NATURALN NCHAR NCHAR_CS NCLOB
+syn keyword pl1Storage NUMBER NUMERIC NVARCHAR PLS_INT PLS_INTEGER
+syn keyword pl1Storage POSITIVE POSITIVEN PRECISION RAW REAL RECORD
+syn keyword pl1Storage SECOND SIGNTYPE SMALLINT STRING SYS_REFCURSOR TABLE TIME
+syn keyword pl1Storage TIMESTAMP TIMESTAMP_UNCONSTRAINED
+syn keyword pl1Storage TIMESTAMP_TZ_UNCONSTRAINED
+syn keyword pl1Storage TIMESTAMP_LTZ_UNCONSTRAINED UROWID VARCHAR
+syn keyword pl1Storage VARCHAR2 YEAR YMINTERVAL_UNCONSTRAINED ZONE
+
+" A type-attribute is really a type.
+" 20020916bp: Removed leading part of pattern to avoid highlighting the
+"             object
+syn match   pl1TypeAttribute  "%\(TYPE\|ROWTYPE\)\>"
+
+" All other attributes.
+syn match   pl1Attribute "%\(BULK_EXCEPTIONS\|BULK_ROWCOUNT\|ISOPEN\|FOUND\|NOTFOUND\|ROWCOUNT\)\>"
+
+" Catch errors caused by wrong parentheses and brackets
+" 20010723az: significantly more powerful than the values -- commented out
+" below the replaced values. This adds the C functionality to PL/SQL.
+syn cluster pl1ParenGroup contains=pl1ParenError,@pl1CommentGroup,pl1CommentSkip,pl1IntLiteral,pl1FloatLiteral,pl1NumbersCom
+if exists("c_no_bracket_error")
+    syn region pl1Paren transparent start='(' end=')' contains=ALLBUT,@pl1ParenGroup
+    syn match pl1ParenError ")"
+    syn match pl1ErrInParen contained "[{}]"
+else
+    syn region pl1Paren transparent start='(' end=')' contains=ALLBUT,@pl1ParenGroup,pl1ErrInBracket
+    syn match pl1ParenError "[\])]"
+    syn match pl1ErrInParen contained "[{}]"
+    syn region pl1Bracket transparent start='\[' end=']' contains=ALLBUT,@pl1ParenGroup,pl1ErrInParen
+    syn match pl1ErrInBracket contained "[);{}]"
+endif
+" syn region pl1Paren       transparent start='(' end=')' contains=ALLBUT,pl1ParenError
+" syn match pl1ParenError   ")"
+
+" Syntax Synchronizing
+syn sync minlines=10 maxlines=100
+
+" Define the default highlighting.
+" For version 5.x and earlier, only when not done already.
+" For version 5.8 and later, only when and item doesn't have highlighting
+" yet.
+if version >= 508 || !exists("did_pl1_syn_inits")
+    if version < 508
+        let did_pl1_syn_inits = 1
+        command -nargs=+ HiLink hi link <args>
+    else
+        command -nargs=+ HiLink hi def link <args>
+    endif
+
+    HiLink pl1Attribute       Macro
+    HiLink pl1BlockError      Error
+    HiLink pl1BooleanLiteral  Boolean
+    HiLink pl1CharLiteral     Character
+    HiLink pl1Comment         Comment
+    HiLink pl1CommentL        Comment
+    HiLink pl1Conditional     Conditional
+    HiLink pl1Error           Error
+    HiLink pl1ErrInBracket    Error
+    HiLink pl1ErrInBlock      Error
+    HiLink pl1ErrInParen      Error
+    HiLink pl1Exception       Function
+    HiLink pl1FloatLiteral    Float
+    HiLink pl1Function        Function
+    HiLink pl1Garbage         Error
+    HiLink pl1HostIdentifier  Label
+    HiLink pl1Identifier      Normal
+    HiLink pl1IntLiteral      Number
+    HiLink pl1Operator        Operator
+    HiLink pl1Paren           Normal
+    HiLink pl1ParenError      Error
+    HiLink pl1SpaceError      Error
+    HiLink pl1Pseudo          PreProc
+    HiLink pl1PreProc         PreProc
+    HiLink pl1PreProcSym      PreProc
+    HiLink pl1Keyword         Keyword
+    HiLink pl1Other           Keyword
+    HiLink pl1Repeat          Repeat
+    HiLink pl1Statement       Keyword
+    HiLink pl1Storage         StorageClass
+    HiLink pl1StringError     Error
+    HiLink pl1StringLiteral   String
+    HiLink pl1CommentString   String
+    HiLink pl1Comment2String  String
+    HiLink pl1Symbol          Normal
+    HiLink pl1Trigger         Function
+    HiLink pl1TypeAttribute   StorageClass
+    HiLink pl1Todo            Todo
+
+    delcommand HiLink
+endif
+
+let b:current_syntax = "pl1"
index 4475417..c09b960 100644 (file)
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:    po (gettext)
 " Maintainer:  Dwayne Bailey <dwayne@translate.org.za>
-" Last Change: 2008 Sep 17
+" Last Change: 2012 Apr 30
 " Contributors: Dwayne Bailey (Most advanced syntax highlighting)
 "               Leonardo Fontenelle (Spell checking)
-"               SungHyun Nam <goweol@gmail.com> (Original maintainer)
+"               Nam SungHyun <namsh@kldp.org> (Original maintainer)
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -13,6 +13,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn sync minlines=10
 
@@ -39,7 +41,7 @@ syn region poStringSTR        start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
                             \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable
 
 " Header and Copyright
-syn match     poHeaderItem "\(Project-Id-Version\|Report-Msgid-Bugs-To\|POT-Creation-Date\|PO-Revision-Date\|Last-Translator\|Language-Team\|MIME-Version\|Content-Type\|Content-Transfer-Encoding\|Plural-Forms\|X-Generator\): " contained
+syn match     poHeaderItem "\(Project-Id-Version\|Report-Msgid-Bugs-To\|POT-Creation-Date\|PO-Revision-Date\|Last-Translator\|Language-Team\|Language\|MIME-Version\|Content-Type\|Content-Transfer-Encoding\|Plural-Forms\|X-Generator\): " contained
 syn match     poHeaderUndefined "\(PACKAGE VERSION\|YEAR-MO-DA HO:MI+ZONE\|FULL NAME <EMAIL@ADDRESS>\|LANGUAGE <LL@li.org>\|CHARSET\|ENCODING\|INTEGER\|EXPRESSION\)" contained
 syn match     poCopyrightUnset "SOME DESCRIPTIVE TITLE\|FIRST AUTHOR <EMAIL@ADDRESS>, YEAR\|Copyright (C) YEAR Free Software Foundation, Inc\|YEAR THE PACKAGE\'S COPYRIGHT HOLDER\|PACKAGE" contained
 
@@ -132,4 +134,7 @@ endif
 
 let b:current_syntax = "po"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set ts=8 sts=2 sw=2 noet:
index 041c7c4..b9f2e08 100644 (file)
@@ -1,9 +1,10 @@
 " Vim syntax file
-" Language:     Perl POD format
-" Maintainer:   Andy Lester <andy@petdance.com>
-" Previously:   Scott Bigham <dsb@killerbunnies.org>
-" URL:          http://github.com/petdance/vim-perl
-" Last Change:  2009-08-14
+" Language:      Perl POD format
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Previously:    Scott Bigham <dsb@killerbunnies.org>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-21
 
 " To add embedded POD documentation highlighting to your syntax file, add
 " the commands:
@@ -26,7 +27,11 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " POD commands
+syn match podCommand    "^=encoding"  nextgroup=podCmdText contains=@NoSpell
 syn match podCommand    "^=head[1234]"  nextgroup=podCmdText contains=@NoSpell
 syn match podCommand    "^=item"        nextgroup=podCmdText contains=@NoSpell
 syn match podCommand    "^=over"        nextgroup=podOverIndent skipwhite contains=@NoSpell
@@ -85,6 +90,100 @@ if version >= 508 || !exists("did_pod_syntax_inits")
   delcommand HiLink
 endif
 
+if exists("perl_pod_spellcheck_headings")
+  " Spell-check headings
+  syn clear podCmdText
+  syn match podCmdText    ".*$" contained contains=podFormat
+endif
+
+if exists("perl_pod_formatting")
+  " By default, escapes like C<> are not checked for spelling. Remove B<>
+  " and I<> from the list of escapes.
+  syn clear podFormat
+  syn region podFormat start="[CLF]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
+  syn region podFormat start="[CLF]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
+
+  " Don't spell-check inside E<>, but ensure that the E< itself isn't
+  " marked as a spelling mistake.
+  syn match podFormat   "E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
+
+  " Z<> is a mock formatting code. Ensure Z<> on its own isn't marked as a
+  " spelling mistake.
+  syn match podFormat   "Z<>" contains=podEscape,podEscape2,@NoSpell
+
+  " These are required so that whatever is *within* B<...>, I<...>, etc. is
+  " spell-checked, but not the B, I, ... itself.
+  syn match podBoldOpen    "B<" contains=@NoSpell
+  syn match podItalicOpen  "I<" contains=@NoSpell
+  syn match podNoSpaceOpen "S<" contains=@NoSpell
+  syn match podIndexOpen   "X<" contains=@NoSpell
+
+  " Same as above but for the << >> syntax.
+  syn match podBoldAlternativeDelimOpen    "B<< " contains=@NoSpell
+  syn match podItalicAlternativeDelimOpen  "I<< " contains=@NoSpell
+  syn match podNoSpaceAlternativeDelimOpen "S<< " contains=@NoSpell
+  syn match podIndexAlternativeDelimOpen   "X<< " contains=@NoSpell
+
+  " Add support for spell checking text inside B<>, I<>, S<> and X<>.
+  syn region podBold start="B<[^<]"me=e end=">" oneline contains=podBoldItalic,podBoldOpen
+  syn region podBoldAlternativeDelim start="B<<\s" end="\s>>" oneline contains=podBoldAlternativeDelimOpen
+
+  syn region podItalic start="I<[^<]"me=e end=">" oneline contains=podItalicBold,podItalicOpen
+  syn region podItalicAlternativeDelim start="I<<\s" end="\s>>" oneline contains=podItalicAlternativeDelimOpen
+
+  " Nested bold/italic and vice-versa
+  syn region podBoldItalic contained start="I<[^<]"me=e end=">" oneline
+  syn region podItalicBold contained start="B<[^<]"me=e end=">" oneline
+
+  syn region podNoSpace start="S<[^<]"ms=s-2 end=">"me=e oneline contains=podNoSpaceOpen
+  syn region podNoSpaceAlternativeDelim start="S<<\s"ms=s-2 end="\s>>"me=e oneline contains=podNoSpaceAlternativeDelimOpen
+
+  syn region podIndex start="X<[^<]"ms=s-2 end=">"me=e oneline contains=podIndexOpen
+  syn region podIndexAlternativeDelim start="X<<\s"ms=s-2 end="\s>>"me=e oneline contains=podIndexAlternativeDelimOpen
+
+  " Restore this (otherwise B<> is shown as bold inside verbatim)
+  syn match podVerbatimLine    "^\s.*$" contains=@NoSpell
+
+  " Ensure formatted text can be displayed in headings and items
+  syn clear podCmdText
+
+  if exists("perl_pod_spellcheck_headings")
+    syn match podCmdText ".*$" contained contains=podFormat,podBold,
+          \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
+          \podBoldOpen,podItalicOpen,podBoldAlternativeDelimOpen,
+          \podItalicAlternativeDelimOpen,podNoSpaceOpen
+  else
+    syn match podCmdText ".*$" contained contains=podFormat,podBold,
+          \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
+          \@NoSpell
+  endif
+
+  " Specify how to display these
+  hi def podBold term=bold cterm=bold gui=bold
+
+  hi link podBoldAlternativeDelim podBold
+  hi link podBoldAlternativeDelimOpen podBold
+  hi link podBoldOpen podBold
+
+  hi link podNoSpace                 Identifier
+  hi link podNoSpaceAlternativeDelim Identifier
+
+  hi link podIndex                   Identifier
+  hi link podIndexAlternativeDelim   Identifier
+
+  hi def podItalic term=italic cterm=italic gui=italic
+
+  hi link podItalicAlternativeDelim podItalic
+  hi link podItalicAlternativeDelimOpen podItalic
+  hi link podItalicOpen podItalic
+
+  hi def podBoldItalic term=italic,bold cterm=italic,bold gui=italic,bold
+  hi def podItalicBold term=italic,bold cterm=italic,bold gui=italic,bold
+endif
+
 let b:current_syntax = "pod"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
index 700bb31..4c1fd96 100644 (file)
@@ -1,9 +1,7 @@
 " Vim syntax file
-" This is a GENERATED FILE. Please always refer to source file at the URI below.
-" Language: PoV-Ray(tm) 3.5 Scene Description Language
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2003 Apr 25
-" URL: http://physics.muni.cz/~yeti/download/syntax/pov.vim
+" Language: PoV-Ray(tm) 3.7 Scene Description Language
+" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2011-04-23
 " Required Vim Version: 6.0
 
 " Setup
@@ -22,20 +20,21 @@ syn case match
 
 " Top level stuff
 syn keyword povCommands global_settings
-syn keyword povObjects array atmosphere background bicubic_patch blob box camera component cone cubic cylinder disc fog height_field isosurface julia_fractal lathe light_group light_source mesh mesh2 object parametric pattern photons plane poly polygon prism quadric quartic rainbow sky_sphere smooth_triangle sor sphere sphere_sweep spline superellipsoid text torus triangle
+syn keyword povObjects array atmosphere background bicubic_patch blob box camera component cone cubic cylinder disc fog height_field isosurface julia_fractal lathe light_group light_source mesh mesh2 object ovus parametric pattern photons plane poly polygon polynomial prism quadric quartic rainbow sky_sphere smooth_triangle sor sphere sphere_sweep spline superellipsoid text torus triangle
 syn keyword povCSG clipped_by composite contained_by difference intersection merge union
 syn keyword povAppearance interior material media texture interior_texture texture_list
 syn keyword povGlobalSettings ambient_light assumed_gamma charset hf_gray_16 irid_wavelength max_intersections max_trace_level number_of_waves radiosity noise_generator
 syn keyword povTransform inverse matrix rotate scale translate transform
 
 " Descriptors
-syn keyword povDescriptors finish normal pigment uv_mapping uv_vectors vertex_vectors
-syn keyword povDescriptors adc_bailout always_sample brightness count error_bound distance_maximum gray_threshold load_file low_error_factor max_sample media minimum_reuse nearest_count normal pretrace_end pretrace_start recursion_limit save_file
-syn keyword povDescriptors color colour gray rgb rgbt rgbf rgbft red green blue
+syn keyword povDescriptors finish inside_vector normal pigment uv_mapping uv_vectors vertex_vectors
+syn keyword povDescriptors adc_bailout always_sample brightness count error_bound distance_maximum gray_threshold load_file low_error_factor maximum_reuse max_sample media minimum_reuse mm_per_unit nearest_count normal pretrace_end pretrace_start recursion_limit save_file
+syn keyword povDescriptors color colour rgb rgbt rgbf rgbft srgb srgbf srgbt srgbft
+syn match povDescriptors "\<\(red\|green\|blue\|gray\)\>"
 syn keyword povDescriptors bump_map color_map colour_map image_map material_map pigment_map quick_color quick_colour normal_map texture_map image_pattern pigment_pattern
-syn keyword povDescriptors ambient brilliance conserve_energy crand diffuse fresnel irid metallic phong phong_size refraction reflection reflection_exponent roughness specular
-syn keyword povDescriptors cylinder fisheye omnimax orthographic panoramic perspective spherical ultra_wide_angle
-syn keyword povDescriptors agate average brick boxed bozo bumps cells checker crackle cylindrical dents facets function gradient granite hexagon julia leopard magnet mandel marble onion planar quilted radial ripples slope spherical spiral1 spiral2 spotted tiles tiles2 toroidal waves wood wrinkles
+syn keyword povDescriptors ambient brilliance conserve_energy crand diffuse fresnel irid metallic phong phong_size refraction reflection reflection_exponent roughness specular subsurface
+syn keyword povDescriptors cylinder fisheye mesh_camera omnimax orthographic panoramic perspective spherical ultra_wide_angle
+syn keyword povDescriptors agate aoi average brick boxed bozo bumps cells checker crackle cylindrical dents facets function gradient granite hexagon julia leopard magnet mandel marble onion pavement planar quilted radial ripples slope spherical spiral1 spiral2 spotted square tiles tile2 tiling toroidal triangular waves wood wrinkles
 syn keyword povDescriptors density_file
 syn keyword povDescriptors area_light shadowless spotlight parallel
 syn keyword povDescriptors absorption confidence density emission intervals ratio samples scattering variance
@@ -46,32 +45,35 @@ syn keyword povDescriptors target
 " Modifiers
 syn keyword povModifiers caustics dispersion dispersion_samples fade_color fade_colour fade_distance fade_power ior
 syn keyword povModifiers bounded_by double_illuminate hierarchy hollow no_shadow open smooth sturm threshold water_level
+syn keyword povModifiers importance no_radiosity
 syn keyword povModifiers hypercomplex max_iteration precision quaternion slice
 syn keyword povModifiers conic_sweep linear_sweep
 syn keyword povModifiers flatness type u_steps v_steps
-syn keyword povModifiers aa_level aa_threshold adaptive falloff jitter looks_like media_attenuation media_interaction method point_at radius tightness
-syn keyword povModifiers angle aperture blur_samples confidence direction focal_point h_angle location look_at right sky up v_angle variance
-syn keyword povModifiers all bump_size filter interpolate map_type once slope_map transmit use_alpha use_color use_colour use_index
+syn keyword povModifiers aa_level aa_threshold adaptive area_illumination falloff jitter looks_like media_attenuation media_interaction method point_at radius tightness
+syn keyword povModifiers angle aperture bokeh blur_samples confidence direction focal_point h_angle location look_at right sky up v_angle variance
+syn keyword povModifiers all bump_size gamma interpolate map_type once premultiplied slope_map use_alpha use_color use_colour use_index
+syn match povModifiers "\<\(filter\|transmit\)\>"
 syn keyword povModifiers black_hole agate_turb brick_size control0 control1 cubic_wave density_map flip frequency interpolate inverse lambda metric mortar octaves offset omega phase poly_wave ramp_wave repeat scallop_wave sine_wave size strength triangle_wave thickness turbulence turb_depth type warp
 syn keyword povModifiers eccentricity extinction
 syn keyword povModifiers arc_angle falloff_angle width
 syn keyword povModifiers accuracy all_intersections altitude autostop circular collect coords cutaway_textures dist_exp expand_thresholds exponent exterior gather global_lights major_radius max_trace no_bump_scale no_image no_reflection orient orientation pass_through precompute projected_through range_divider solid spacing split_union tolerance
 
 " Words not marked `reserved' in documentation, but...
-syn keyword povBMPType alpha gif iff jpeg pgm png pot ppm sys tga tiff contained
+syn keyword povBMPType alpha exr gif hdr iff jpeg pgm png pot ppm sys tga tiff
 syn keyword povFontType ttf contained
 syn keyword povDensityType df3 contained
 syn keyword povCharset ascii utf8 contained
 
 " Math functions on floats, vectors and strings
-syn keyword povFunctions abs acos acosh asc asin asinh atan atan2 atanh ceil cos cosh defined degrees dimensions dimension_size div exp file_exists floor int internal ln log max min mod pow radians rand seed select sin sinh sqrt strcmp strlen tan tanh val vdot vlength vstr vturbulence
+syn keyword povFunctions abs acos acosh asc asin asinh atan atan2 atanh bitwise_and bitwise_or bitwise_xor ceil cos cosh defined degrees dimensions dimension_size div exp file_exists floor inside int internal ln log max min mod pow prod radians rand seed select sin sinh sqrt strcmp strlen sum tan tanh val vdot vlength vstr vturbulence
 syn keyword povFunctions min_extent max_extent trace vcross vrotate vaxis_rotate vnormalize vturbulence
-syn keyword povFunctions chr concat substr str strupr strlwr
+syn keyword povFunctions chr concat datetime now substr str strupr strlwr
 syn keyword povJuliaFunctions acosh asinh atan cosh cube pwr reciprocal sinh sqr tanh
 
 " Specialities
-syn keyword povConsts clock clock_delta clock_on final_clock final_frame frame_number initial_clock initial_frame image_width image_height false no off on pi t true u v version x y yes z
-syn match povDotItem "\.\@<=\(blue\|green\|filter\|red\|transmit\|t\|u\|v\|x\|y\|z\)\>" display
+syn keyword povConsts clock clock_delta clock_on final_clock final_frame frame_number initial_clock initial_frame input_file_name image_width image_height false no off on pi true version yes
+syn match povConsts "\<[tuvxyz]\>"
+syn match povDotItem "\.\@<=\(blue\|green\|gray\|filter\|red\|transmit\|hf\|t\|u\|v\|x\|y\|z\)\>" display
 
 " Comments
 syn region povComment start="/\*" end="\*/" contains=povTodo,povComment
@@ -83,16 +85,18 @@ syn keyword povTodo TODO FIXME XXX NOT contained
 syn cluster povPRIVATE add=povTodo
 
 " Language directives
-syn match povConditionalDir "#\s*\(else\|end\|if\|ifdef\|ifndef\|switch\|while\)\>"
+syn match povConditionalDir "#\s*\(else\|end\|for\|if\|ifdef\|ifndef\|switch\|while\)\>"
 syn match povLabelDir "#\s*\(break\|case\|default\|range\)\>"
-syn match povDeclareDir "#\s*\(declare\|default\|local\|macro\|undef\|version\)\>"
+syn match povDeclareDir "#\s*\(declare\|default\|local\|macro\|undef\|version\)\>" nextgroup=povDeclareOption skipwhite
+syn keyword povDeclareOption deprecated once contained nextgroup=povDeclareOption skipwhite
 syn match povIncludeDir "#\s*include\>"
 syn match povFileDir "#\s*\(fclose\|fopen\|read\|write\)\>"
+syn keyword povFileDataType uint8 sint8 unit16be uint16le sint16be sint16le sint32le sint32be
 syn match povMessageDir "#\s*\(debug\|error\|render\|statistics\|warning\)\>"
 syn region povFileOpen start="#\s*fopen\>" skip=+"[^"]*"+ matchgroup=povOpenType end="\<\(read\|write\|append\)\>" contains=ALLBUT,PovParenError,PovBraceError,@PovPRIVATE transparent keepend
 
 " Literal strings
-syn match povSpecialChar "\\\d\d\d\|\\." contained
+syn match povSpecialChar "\\u\x\{4}\|\\\d\d\d\|\\." contained
 syn region povString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=povSpecialChar oneline
 syn cluster povPRIVATE add=povSpecialChar
 
@@ -112,7 +116,7 @@ hi def link povNumber Number
 hi def link povString String
 hi def link povFileOpen Constant
 hi def link povConsts Constant
-hi def link povDotItem Constant
+hi def link povDotItem povSpecial
 hi def link povBMPType povSpecial
 hi def link povCharset povSpecial
 hi def link povDensityType povSpecial
@@ -123,8 +127,10 @@ hi def link povSpecial Special
 hi def link povConditionalDir PreProc
 hi def link povLabelDir PreProc
 hi def link povDeclareDir Define
+hi def link povDeclareOption Define
 hi def link povIncludeDir Include
 hi def link povFileDir PreProc
+hi def link povFileDataType Special
 hi def link povMessageDir Debug
 hi def link povAppearance povDescriptors
 hi def link povObjects povDescriptors
index 02169ea..726fe1f 100644 (file)
@@ -1,9 +1,7 @@
 " Vim syntax file
-" This is a GENERATED FILE. Please always refer to source file at the URI below.
-" Language: PoV-Ray(tm) 3.5 configuration/initialization files
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2002-06-01
-" URL: http://physics.muni.cz/~yeti/download/syntax/povini.vim
+" Language: PoV-Ray(tm) 3.7 configuration/initialization files
+" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2011-04-24
 " Required Vim Version: 6.0
 
 " Setup
@@ -25,15 +23,17 @@ syn match poviniInclude "^\s*[^[+-;]\S*\s*$" contains=poviniSection
 syn match poviniLabel "^.\{-1,}\ze=" transparent contains=poviniKeyword nextgroup=poviniBool,poviniNumber
 syn keyword poviniBool On Off True False Yes No
 syn match poviniNumber "\<\d*\.\=\d\+\>"
-syn keyword poviniKeyword Clock Initial_Frame Final_Frame Initial_Clock Final_Clock Subset_Start_Frame Subset_End_Frame Cyclic_Animation Field_Render Odd_Field
+syn keyword poviniKeyword Clock Initial_Frame Final_Frame Frame_Final Frame_Step Initial_Clock Final_Clock Subset_Start_Frame Subset_End_Frame Cyclic_Animation Clockless_Animation Real_Time_Raytracing Field_Render Odd_Field Work_Threads
 syn keyword poviniKeyword Width Height Start_Column Start_Row End_Column End_Row Test_Abort Test_Abort_Count Continue_Trace Create_Ini
-syn keyword poviniKeyword Display Video_Mode Palette Display_Gamma Pause_When_Done Verbose Draw_Vistas Preview_Start_Size Preview_End_Size
-syn keyword poviniKeyword Output_to_File Output_File_Type Output_Alpha Bits_Per_Color Output_File_Name Buffer_Output Buffer_Size
+syn keyword poviniKeyword Display Video_Mode Palette Display_Gamma Pause_When_Done Verbose Draw_Vistas Preview_Start_Size Preview_End_Size Render_Block_Size Render_Block_Step Render_Pattern Max_Image_Buffer_Memory
+syn keyword poviniKeyword Output_to_File Output_File_Type Output_Alpha Bits_Per_Color Output_File_Name Buffer_Output Buffer_Size Dither Dither_Method File_Gamma
+syn keyword poviniKeyword BSP_Base BSP_Child BSP_Isect BSP_Max BSP_Miss
 syn keyword poviniKeyword Histogram_Type Histogram_Grid_Size Histogram_Name
 syn keyword poviniKeyword Input_File_Name Include_Header Library_Path Version
 syn keyword poviniKeyword Debug_Console Fatal_Console Render_Console Statistic_Console Warning_Console All_Console Debug_File Fatal_File Render_File Statistic_File Warning_File All_File Warning_Level
-syn keyword poviniKeyword Quality Radiosity Bounding Bounding_Threshold Light_Buffer Vista_Buffer Remove_Bounds Split_Unions Antialias Sampling_Method Antialias_Threshold Jitter Jitter_Amount Antialias_Depth
+syn keyword poviniKeyword Quality Bounding Bounding_Method Bounding_Threshold Light_Buffer Vista_Buffer Remove_Bounds Split_Unions Antialias Sampling_Method Antialias_Threshold Jitter Jitter_Amount Antialias_Depth Antialias_Gamma
 syn keyword poviniKeyword Pre_Scene_Return Pre_Frame_Return Post_Scene_Return Post_Frame_Return User_Abort_Return Fatal_Error_Return
+syn keyword poviniKeyword Radiosity Radiosity_File_Name Radiosity_From_File Radiosity_To_File Radiosity_Vain_Pretrace High_Reproducibility
 syn match poviniShellOut "^\s*\(Pre_Scene_Command\|Pre_Frame_Command\|Post_Scene_Command\|Post_Frame_Command\|User_Abort_Command\|Fatal_Error_Command\)\>" nextgroup=poviniShellOutEq skipwhite
 syn match poviniShellOutEq "=" nextgroup=poviniShellOutRHS skipwhite contained
 syn match poviniShellOutRHS "[^;]\+" skipwhite contained contains=poviniShellOutSpecial
index 6816548..85a54a6 100644 (file)
@@ -3,14 +3,15 @@
 " Filename extensions: *.p (collides with Pascal),
 "                      *.i (collides with assembler)
 "                      *.w (collides with cweb)
-" Maintainer:          Philip Uren             <philuSPAX@ieee.org> Remove "SPAX" spam block
-" Contributors:         Chris Ruprecht         <chrup@mac.com> (Chris, where are you now?)
-"                      Mikhail Kuperblum       <mikhail@whasup.com>
-"                      John Florian            <jflorian@voyager.net>
-" Last Change:         Wed Apr 12 08:55:35 EST 2006
-" $Id: progress.vim,v 1.3 2006/04/12 21:48:47 vimboss Exp $
-
-" For version 5.x: Clear all syntax items
+" Maintainer:          Philip Uren             <philuSPAXY@ieee.org> Remove SPAXY spam block
+" Contributors:         Matthew Stickney       <mtstickneySPAXY@gmail.com>
+"                      Chris Ruprecht          <chrisSPAXY@ruprecht.org>
+"                      Mikhail Kuperblum       <mikhailSPAXY@whasup.com>
+"                      John Florian            <jflorianSPAXY@voyager.net>
+" Version:              13
+" Last Change:         Nov 11 2012
+
+" For version 5.x: Clear all syntax item
 " For version 6.x: Quit when a syntax file was already loaded
 if version < 600
        syntax clear
@@ -18,6 +19,9 @@ elseif exists("b:current_syntax")
        finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 if version >= 600
   setlocal iskeyword=@,48-57,_,-,!,#,$,%
 else
@@ -30,159 +34,250 @@ set expandtab
 syn case ignore
 
 " Progress Blocks of code and mismatched "end." errors.
-syn match      ProgressEndError        "\<end\>"
-syn region     ProgressDoBlock         transparent matchgroup=ProgressDo start="\<do\>" matchgroup=ProgressDo end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
-syn region     ProgressForBlock        transparent matchgroup=ProgressFor start="\<for\>" matchgroup=ProgressFor end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
-syn region     ProgressRepeatBlock     transparent matchgroup=ProgressRepeat start="\<repeat\>" matchgroup=ProgressRepeat end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
-syn region     ProgressCaseBlock       transparent matchgroup=ProgressCase start="\<case\>" matchgroup=ProgressCase end="\<end\scase\>\|\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+syn match   ProgressEndError           "\<end\>"
+syn region ProgressDoBlock transparent matchgroup=ProgressDo start="\<do\>" matchgroup=ProgressDo end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+syn region ProgressForBlock transparent matchgroup=ProgressFor start="\<for\>" matchgroup=ProgressFor end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+syn region ProgressRepeatBlock transparent matchgroup=ProgressRepeat start="\<repeat\>" matchgroup=ProgressRepeat end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+syn region ProgressCaseBlock transparent matchgroup=ProgressCase start="\<case\>" matchgroup=ProgressCase end="\<end\scase\>\|\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
 
 " These are Progress reserved words,
 " and they could go in ProgressReserved,
 " but I found it more helpful to highlight them in a different color.
-syn keyword    ProgressConditional     if else then when otherwise
-syn keyword    ProgressFor             each where
+syn keyword ProgressConditional        if else then when otherwise
+syn keyword ProgressFor                                each where
 
 " Make those TODO and debugging notes stand out!
-syn keyword    ProgressTodo            contained       TODO BUG FIX
-syn keyword    ProgressDebug           contained       DEBUG
-syn keyword    ProgressDebug           debugger
-syn match      ProgressTodo            contained       "NEED[S]*\s\s*WORK"
+syn keyword ProgressTodo                       contained       TODO BUG FIX
+syn keyword ProgressDebug                      contained       DEBUG
+syn keyword ProgressDebug                      debugger
 
 " If you like to highlight the whole line of
 " the start and end of procedures
 " to make the whole block of code stand out:
-syn match      ProgressProcedure       "^\s*procedure.*"
-syn match      ProgressProcedure       "^\s*end\s\s*procedure.*"
-syn match      ProgressFunction        "^\s*function.*"
-syn match      ProgressFunction        "^\s*end\s\s*function.*"
+syn match ProgressProcedure            "^\s*procedure.*"
+syn match ProgressProcedure            "^\s*end\s\s*procedure.*"
+syn match ProgressFunction             "^\s*function.*"
+syn match ProgressFunction             "^\s*end\s\s*function.*"
 " ... otherwise use this:
 " syn keyword ProgressFunction procedure function
 
-syn keyword    ProgressReserved        accum[ulate] active-window add alias all alter ambig[uous] analyz[e] and any apply as asc[ending] assign at attr[-space]
-syn keyword    ProgressReserved        authorization auto-ret[urn] avail[able] back[ground] before-h[ide] begins bell between blank break btos by call can-do can-find
-syn keyword    ProgressReserved        center[ed] character check chr clear clipboard col colon color col[umn] column-lab[el] col[umns] compiler connected control count-of
-syn keyword    ProgressReserved        cpstream create ctos current current-changed current-lang[uage] current-window current_date curs[or] database dataservers
-syn keyword    ProgressReserved        dbcodepage dbcollation dbname dbrest[rictions] dbtaskid dbtype dbvers[ion] dde deblank debug-list debugger decimal decimals declare
-syn keyword    ProgressReserved        def default default-noxl[ate] default-window def[ine] delete delimiter desc[ending] dict[ionary] disable discon[nect] disp
-syn keyword    ProgressReserved        disp[lay] distinct dos down drop editing enable encode entry error-stat[us] escape etime except exclusive
-syn keyword    ProgressReserved        exclusive[-lock] exclusive-web-us[er] exists export false fetch field field[s] file-info[rmation] fill find find-case-sensitive
-syn keyword    ProgressReserved        find-global find-next-occurrence find-prev-occurrence find-select find-wrap-around first first-of focus font form form[at]
-syn keyword    ProgressReserved        fram[e] frame-col frame-db frame-down frame-field frame-file frame-inde[x] frame-line frame-name frame-row frame-val[ue]
-syn keyword    ProgressReserved        from from-c[hars] from-p[ixels] gateway[s] get-byte get-codepage[s] get-coll[ations] get-key-val[ue] getbyte global go-on
-syn keyword    ProgressReserved        go-pend[ing] grant graphic-e[dge] group having header help hide import in index indicator input input-o[utput] insert
-syn keyword    ProgressReserved        integer into is is-attr[-space] join kblabel key-code key-func[tion] key-label keycode keyfunc[tion] keylabel keys keyword label
-syn keyword    ProgressReserved        last last-even[t] last-key last-of lastkey ldbname leave library like line-count[er] listi[ng] locked lookup machine-class
-syn keyword    ProgressReserved        map member message message-lines mouse mpe new next next-prompt no no-attr[-space] no-error no-f[ill] no-help no-hide no-label[s]
-syn keyword    ProgressReserved        no-lock no-map no-mes[sage] no-pause no-prefe[tch] no-undo no-val[idate] no-wait not null num-ali[ases] num-dbs num-entries
-syn keyword    ProgressReserved        of off old on open opsys option or os-append os-command os-copy os-create-dir os-delete os-dir os-drive[s] os-error os-rename
-syn keyword    ProgressReserved        os2 os400 output overlay page page-bot[tom] page-num[ber] page-top param[eter] pause pdbname persist[ent] pixels
-syn keyword    ProgressReserved        preproc[ess] privileges proc-ha[ndle] proc-st[atus] process program-name Progress prompt prompt[-for] promsgs propath provers[ion]
-syn keyword    ProgressReserved        put put-byte put-key-val[ue] putbyte query query-tuning quit r-index rcode-informatio[n] readkey recid record-len[gth] rect[angle]
-syn keyword    ProgressReserved        release reposition retain retry return return-val[ue] revert revoke run save schema screen screen-io screen-lines
-syn keyword    ProgressReserved        scroll sdbname search seek select self session set setuser[id] share[-lock] shared show-stat[s] skip some space status stream
-syn keyword    ProgressReserved        stream-io string-xref system-dialog table term term[inal] text text-cursor text-seg[-growth] this-procedure time title
-syn keyword    ProgressReserved        to today top-only trans trans[action] trigger triggers trim true underl[ine] undo unform[atted] union unique unix up update
-syn keyword    ProgressReserved        use-index use-revvideo use-underline user user[id] using v6frame value values variable view view-as vms wait-for web-con[text]
-syn keyword    ProgressReserved        window window-maxim[ized] window-minim[ized] window-normal with work-tab[le] workfile write xcode xref yes _cbit
-syn keyword    ProgressReserved        _control _list _memory _msg _pcontrol _serial[-num] _trace 
+syn keyword ProgressReserved   accum[ulate] active-form active-window add alias all alter ambig[uous] analyz[e] and any apply as asc[ending]
+syn keyword ProgressReserved   assign asynchronous at attr[-space] audit-control audit-policy authorization auto-ret[urn] avail[able] back[ground]
+syn keyword ProgressReserved   before-h[ide] begins bell between big-endian blank break buffer-comp[are] buffer-copy by by-pointer by-variant-point[er] call
+syn keyword ProgressReserved   can-do can-find case case-sen[sitive] cast center[ed] check chr clear clipboard codebase-locator colon color column-lab[el]
+syn keyword ProgressReserved   col[umns] com-self compiler connected control copy-lob count-of cpstream create current current-changed current-lang[uage]
+syn keyword ProgressReserved   current-window current_date curs[or] database dataservers dataset dataset-handle db-remote-host dbcodepage dbcollation dbname
+syn keyword ProgressReserved   dbparam dbrest[rictions] dbtaskid dbtype dbvers[ion] dde deblank debug-list debugger decimals declare default
+syn keyword ProgressReserved   default-noxl[ate] default-window def[ine] delete delimiter desc[ending] dict[ionary] disable discon[nect] disp[lay] distinct do dos
+syn keyword ProgressReserved   down drop dynamic-cast dynamic-func[tion] dynamic-new each editing else enable encode end entry error-stat[us] escape
+syn keyword ProgressReserved   etime event-procedure except exclusive[-lock] exclusive-web[-user] exists export false fetch field[s] file-info[rmation]
+syn keyword ProgressReserved   fill find find-case-sensitive find-global find-next-occurrence find-prev-occurrence find-select find-wrap-around first
+syn keyword ProgressReserved   first-of focus font for form[at] fram[e] frame-col frame-db frame-down frame-field frame-file frame-inde[x] frame-line
+syn keyword ProgressReserved   frame-name frame-row frame-val[ue] from from-c[hars] from-p[ixels] function-call-type gateway[s] get-attr-call-type get-byte
+syn keyword ProgressReserved   get-codepage[s] get-coll[ations] get-column get-error-column get-error-row get-file-name get-file-offse[t] get-key-val[ue]
+syn keyword ProgressReserved   get-message-type get-row getbyte global go-on go-pend[ing] grant graphic-e[dge] group having header help hide host-byte-order if
+syn keyword ProgressReserved   import in index indicator input input-o[utput] insert into is is-attr[-space] join kblabel key-code key-func[tion] key-label
+syn keyword ProgressReserved   keycode keyfunc[tion] keylabel keys keyword label last last-even[t] last-key last-of lastkey ldbname leave library like
+syn keyword ProgressReserved   like-sequential line-count[er] listi[ng] little-endian locked log-manager lookup machine-class map member message message-lines mouse
+syn keyword ProgressReserved   mpe new next next-prompt no no-attr[-space] no-error no-f[ill] no-help no-hide no-label[s] no-lobs no-lock no-map
+syn keyword ProgressReserved   no-mes[sage] no-pause no-prefe[tch] no-return-val[ue] no-undo no-val[idate] no-wait not now null num-ali[ases] num-dbs num-entries
+syn keyword ProgressReserved   of off old on open opsys option or os-append os-command os-copy os-create-dir os-delete os-dir os-drive[s] os-error
+syn keyword ProgressReserved   os-rename otherwise output overlay page page-bot[tom] page-num[ber] page-top param[eter] password-field pause pdbname
+syn keyword ProgressReserved   persist[ent] pixels preproc[ess] privileges proc-ha[ndle] proc-st[atus] procedure-call-type process profiler program-name progress
+syn keyword ProgressReserved   prompt[-for] promsgs propath provers[ion] publish put put-byte put-key-val[ue] putbyte query query-tuning quit r-index
+syn keyword ProgressReserved   rcode-info[rmation] read-available read-exact-num readkey recid record-len[gth] rect[angle] release repeat reposition retain retry return
+syn keyword ProgressReserved   return-val[ue] revert revoke row-created row-deleted row-modified row-unmodified run save sax-comple[te] sax-parser-error
+syn keyword ProgressReserved   sax-running sax-uninitialized sax-write-begin sax-write-complete sax-write-content sax-write-element sax-write-error
+syn keyword ProgressReserved   sax-write-idle sax-write-tag schema screen screen-io screen-lines scroll sdbname search search-self search-target security-policy
+syn keyword ProgressReserved   seek select self session set set-attr-call-type setuser[id] share[-lock] shared show-stat[s] skip some source-procedure
+syn keyword ProgressReserved   space status stream stream-handle stream-io string-xref subscribe super system-dialog table table-handle target-procedure
+syn keyword ProgressReserved   term[inal] text text-cursor text-seg[-grow] then this-object this-procedure time title to today top-only trans[action] trigger
+syn keyword ProgressReserved   triggers trim true underl[ine] undo unform[atted] union unique unix unless-hidden unsubscribe up update use-index use-revvideo
+syn keyword ProgressReserved   use-underline user[id] using value values view view-as wait-for web-con[text] when where while window window-delayed-min[imize]
+syn keyword ProgressReserved   window-maxim[ized] window-minim[ized] window-normal with work-tab[le] workfile write xcode xcode-session-key xref xref-xml yes
 
 " Strings. Handles embedded quotes.
 " Note that, for some reason, Progress doesn't use the backslash, "\"
 " as the escape character; it uses tilde, "~".
-syn region     ProgressString          matchgroup=ProgressQuote        start=+"+ end=+"+       skip=+\~'\|\~\~+
-syn region     ProgressString          matchgroup=ProgressQuote        start=+'+ end=+'+       skip=+\~'\|\~\~+
+syn region ProgressString matchgroup=ProgressQuote start=+"+ end=+"+ skip=+\~'\|\~\~\|\~"+ contains=@Spell
+syn region ProgressString matchgroup=ProgressQuote start=+'+ end=+'+ skip=+\~'\|\~\~\|\~"+ contains=@Spell
 
-syn match      ProgressIdentifier      "\<[a-zA-Z_%#]+\>()"
+syn match  ProgressIdentifier          "\<[a-zA-Z_][a-zA-Z0-9_]*\>()"
 
-" syn match    ProgressDelimiter       "()"
+" syn match  ProgressDelimiter         "()"
 
-syn match      ProgressMatrixDelimiter "[][]"
-" If you prefer you can highlight the range
-"syn match     ProgressMatrixDelimiter "[\d\+\.\.\d\+]"
+syn match  ProgressMatrixDelimiter     "[][]"
+" If you prefer you can highlight the range:
+"syn match  ProgressMatrixDelimiter    "[\d\+\.\.\d\+]"
 
-syn match      ProgressNumber          "\<\-\=\d\+\(u\=l\=\|lu\|f\)\>"
-syn match      ProgressByte            "\$[0-9a-fA-F]\+"
+syn match  ProgressNumber              "\<\-\=\d\+\(u\=l\=\|lu\|f\)\>"
+syn match  ProgressByte                        "\$[0-9a-fA-F]\+"
 
 " More values: Logicals, and Progress's unknown value, ?.
-syn match      ProgressNumber          "?"
-syn keyword    ProgressNumber          true false yes no
+syn match   ProgressNumber                             "?"
+syn keyword ProgressNumber             true false yes no
 
 " If you don't like tabs:
-syn match      ProgressShowTab         "\t"
+syn match ProgressShowTab "\t"
 
-" If you don't like white space on the end of lines:
-" syn match    ProgressSpaceError      "\s\+$"
+" If you don't like white space on the end of lines, uncomment this:
+" syn match   ProgressSpaceError "\s\+$"
 
-syn region     ProgressComment         start="/\*" end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug
-syn region     ProgressInclude         start="^[       ]*[{][^&]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment
-syn region     ProgressPreProc         start="&" end="\>" contained
+syn region ProgressComment             start="/\*"  end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug,@Spell
+syn region ProgressInclude             start="^[       ]*[{]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment
+syn region ProgressPreProc             start="&" end="\>" contained
 
 " This next line works reasonably well.
-" syn match    ProgressOperator        "[!;|)(:.><+*=-]"
+" syn match ProgressOperator        "[!;|)(:.><+*=-]"
 "
 " Progress allows a '-' to be part of an identifier.  To be considered
 " the subtraction/negation operation operator it needs a non-word
 " character on either side.  Also valid are cases where the minus
 " operation appears at the beginning or end of a line.
 " This next line trips up on "no-undo" etc.
-" syn match    ProgressOperator        "[!;|)(:.><+*=]\|\W-\W\|^-\W\|\W-$"
-syn match      ProgressOperator        "[!;|)(:.><+*=]\|\s-\s\|^-\s\|\s-$"
-
-syn keyword    ProgressOperator        <= <> >= abs[olute] accelerator across add-first add-last advise alert-box allow-replication ansi-only anywhere append appl-alert[-boxes] application as-cursor ask-overwrite
-syn keyword    ProgressOperator        attach[ment] auto-end-key auto-endkey auto-go auto-ind[ent] auto-resize auto-z[ap] available-formats ave[rage] avg backward[s] base-key batch[-mode] bgc[olor] binary
-syn keyword    ProgressOperator        bind-where block-iteration-display border-bottom border-bottom-ch[ars] border-bottom-pi[xels] border-left border-left-char[s] border-left-pixe[ls] border-right border-right-cha[rs]
-syn keyword    ProgressOperator        border-right-pix[els] border-t[op] border-t[op-chars] border-top-pixel[s] both bottom box box-select[able] browse browse-header buffer buffer-chars buffer-lines
-syn keyword    ProgressOperator        button button[s] byte cache cache-size can-query can-set cancel-break cancel-button caps careful-paint case-sensitive cdecl char[acter] character_length charset
-syn keyword    ProgressOperator        checked choose clear-select[ion] close code codepage codepage-convert col-of colon-align[ed] color-table column-bgc[olor] column-dcolor column-fgc[olor] column-font
-syn keyword    ProgressOperator        column-label-bgc[olor] column-label-dcolor column-label-fgc[olor] column-label-font column-of column-pfc[olor] column-sc[rolling] combo-box command compile complete
-syn keyword    ProgressOperator        connect constrained contents context context-pop[up] control-containe[r] c[ontrol-form] convert-to-offse[t] convert count cpcase cpcoll cpint[ernal] cplog
-syn keyword    ProgressOperator        cpprint cprcodein cprcodeout cpterm crc-val[ue] c[reate-control] create-result-list-entry create-test-file current-column current-environm[ent] current-iteration
-syn keyword    ProgressOperator        current-result-row current-row-modified current-value cursor-char cursor-line cursor-offset data-entry-retur[n] data-t[ype] date date-f[ormat] day db-references
-syn keyword    ProgressOperator        dcolor dde-error dde-i[d] dde-item dde-name dde-topic debu[g] dec[imal] default-b[utton] default-extensio[n] defer-lob-fetch define defined delete-char delete-current-row
-syn keyword    ProgressOperator        delete-line delete-selected-row delete-selected-rows deselect-focused-row deselect-rows deselect-selected-row d[esign-mode] dialog-box dialog-help dir disabled display-message
-syn keyword    ProgressOperator        display-t[ype] double drag-enabled drop-down drop-down-list dump dynamic echo edge edge[-chars] edge-p[ixels] editor empty end-key endkey entered eq error error-col[umn]
-syn keyword    ProgressOperator        error-row event-t[ype] event[s] exclusive-id execute exp expand extended extent external extract fetch-selected-row fgc[olor] file file-name file-off[set] file-type
-syn keyword    ProgressOperator        filename fill-in filled filters first-child first-column first-proc[edure] first-tab-i[tem] fixed-only float focused-row font-based-layout font-table force-file
-syn keyword    ProgressOperator        fore[ground] form-input forward[s] frame-spa[cing] frame-x frame-y frequency from-cur[rent] full-height full-height-char[s] full-height-pixe[ls] full-pathn[ame]
-syn keyword    ProgressOperator        full-width full-width[-chars] full-width-pixel[s] ge get get-blue[-value] g[et-char-property] get-double get-dynamic get-file get-float get-green[-value]
-syn keyword    ProgressOperator        get-iteration get-license get-long get-message get-number get-pointer-value get-red[-value] get-repositioned-row get-selected-wid[get] get-short get-signature get-size
-syn keyword    ProgressOperator        get-string get-tab-item get-text-height get-text-height-char[s] get-text-height-pixe[ls] get-text-width get-text-width-c[hars] get-text-width-pixel[s] get-unsigned-short
-syn keyword    ProgressOperator        grayed grid-factor-horizont[al] grid-factor-vert[ical] grid-set grid-snap grid-unit-height grid-unit-height-cha[rs] grid-unit-height-pix[els] grid-unit-width grid-unit-width-char[s]
-syn keyword    ProgressOperator        grid-unit-width-pixe[ls] grid-visible gt handle height height[-chars] height-p[ixels] help-con[text] helpfile-n[ame] hidden hint hori[zontal] hwnd image image-down
-syn keyword    ProgressOperator        image-insensitive image-size image-size-c[hars] image-size-pixel[s] image-up immediate-display index-hint indexed-reposition info[rmation] init init[ial] initial-dir
-syn keyword    ProgressOperator        initial-filter initiate inner inner-chars inner-lines insert-b[acktab] insert-file insert-row insert-string insert-t[ab] int[eger] internal-entries is-lead-byte
-syn keyword    ProgressOperator        is-row-selected is-selected item items-per-row join-by-sqldb keep-frame-z-ord[er] keep-messages keep-tab-order key keyword-all label-bgc[olor] label-dc[olor] label-fgc[olor]
-syn keyword    ProgressOperator        label-font label-pfc[olor] labels language[s] large large-to-small last-child last-tab-i[tem] last-proce[dure] lc le leading left left-align[ed] left-trim length
-syn keyword    ProgressOperator        line list-events list-items list-query-attrs list-set-attrs list-widgets load l[oad-control] load-icon load-image load-image-down load-image-insensitive load-image-up
-syn keyword    ProgressOperator        load-mouse-point[er] load-small-icon log logical lookahead lower lt manual-highlight margin-extra margin-height margin-height-ch[ars] margin-height-pi[xels] margin-width
-syn keyword    ProgressOperator        margin-width-cha[rs] margin-width-pix[els] matches max max-chars max-data-guess max-height max-height[-chars] max-height-pixel[s] max-rows max-size max-val[ue] max-width
-syn keyword    ProgressOperator        max-width[-chars] max-width-p[ixels] maximize max[imum] memory menu menu-bar menu-item menu-k[ey] menu-m[ouse] menubar message-area message-area-font message-line
-syn keyword    ProgressOperator        min min-height min-height[-chars] min-height-pixel[s] min-size min-val[ue] min-width min-width[-chars] min-width-p[ixels] min[imum] mod modified mod[ulo] month mouse-p[ointer]
-syn keyword    ProgressOperator        movable move-after-tab-i[tem] move-before-tab-[item] move-col[umn] move-to-b[ottom] move-to-eof move-to-t[op] multiple multiple-key multitasking-interval must-exist
-syn keyword    ProgressOperator        name native ne new-row next-col[umn] next-sibling next-tab-ite[m] next-value no-apply no-assign no-bind-where no-box no-column-scroll[ing] no-convert no-current-value
-syn keyword    ProgressOperator        no-debug no-drag no-echo no-index-hint no-join-by-sqldb no-lookahead no-row-markers no-scrolling no-separate-connection no-separators no-und[erline] no-word-wrap
-syn keyword    ProgressOperator        none num-but[tons] num-col[umns] num-copies num-formats num-items num-iterations num-lines num-locked-colum[ns] num-messages num-results num-selected num-selected-rows
-syn keyword    ProgressOperator        num-selected-widgets num-tabs num-to-retain numeric numeric-f[ormat] octet_length ok ok-cancel on-frame[-border] ordered-join ordinal orientation os-getenv outer
-syn keyword    ProgressOperator        outer-join override owner page-size page-wid[th] paged parent partial-key pascal pathname pfc[olor] pinnable pixels-per-colum[n] pixels-per-row popup-m[enu] popup-o[nly]
-syn keyword    ProgressOperator        position precision presel[ect] prev prev-col[umn] prev-sibling prev-tab-i[tem] primary printer-control-handle printer-setup private-d[ata] profiler Progress-s[ource]
-syn keyword    ProgressOperator        publish put-double put-float put-long put-short put-string put-unsigned-short query-off-end question radio-buttons radio-set random raw raw-transfer read-file read-only
-syn keyword    ProgressOperator        real recursive refresh refreshable replace replace-selection-text replication-create replication-delete replication-write request resiza[ble] resize retry-cancel
-syn keyword    ProgressOperator        return-ins[erted] return-to-start-di[r] reverse-from right right-align[ed] right-trim round row row-ma[rkers] row-of rowid rule rule-row rule-y save-as save-file
-syn keyword    ProgressOperator        screen-val[ue] scroll-bars scroll-delta scroll-horiz-value scroll-offset scroll-to-current-row scroll-to-i[tem] scroll-to-selected-row scroll-vert-value scrollable
-syn keyword    ProgressOperator        scrollbar-horizo[ntal] scrollbar-vertic[al] scrolled-row-positio[n] scrolling se-check-pools se-enable-of[f] se-enable-on se-num-pools se-use-messa[ge] section select-focused-row
-syn keyword    ProgressOperator        select-next-row select-prev-row select-repositioned-row select-row selectable selected selected-items selection-end selection-list selection-start selection-text
-syn keyword    ProgressOperator        send sensitive separate-connection separators set-blue[-value] set-break set-cell-focus set-contents set-dynamic set-green[-value] set-leakpoint set-pointer-valu[e]
-syn keyword    ProgressOperator        s[et-property] set-red[-value] set-repositioned-row set-selection set-size set-wait[-state] side-lab side-lab[e] side-lab[el] side-label-handl[e] side-lab[els] silent
-syn keyword    ProgressOperator        simple single size size-c[hars] size-p[ixels] slider smallint sort source source-procedure sql sqrt start status-area status-area-font status-bar stdcall stenciled stop stoppe[d]
-syn keyword    ProgressOperator        stored-proc[edure] string sub-ave[rage] sub-count sub-max[imum] sub-me[nu] sub-menu-help sub-min[imum] sub-total subscribe subst[itute] substr[ing] subtype sum super suppress-warning[s]
-syn keyword    ProgressOperator        system-alert-box[es] system-help tab-position tabbable target target-procedure temp-dir[ectory] temp-table terminate text-selected three-d through thru tic-marks time-source title-bgc[olor]
-syn keyword    ProgressOperator        title-dc[olor] title-fgc[olor] title-fo[nt] to-rowid toggle-box tool-bar top topic total trailing trunc[ate] type unbuff[ered] unique-id unload unsubscribe upper use use-dic[t-exps]
-syn keyword    ProgressOperator        use-filename use-text v6display valid-event valid-handle validate validate-condition validate-message var[iable] vert[ical] virtual-height virtual-height-c[hars]
-syn keyword    ProgressOperator        virtual-height-pixel[s] virtual-width virtual-width-ch[ars] virtual-width-pi[xels] visible wait warning weekday widget widget-e[nter] widget-h[andle] widget-l[eave]
-syn keyword    ProgressOperator        widget-pool width width[-chars] width-p[ixels] window-name window-sta[te] window-sys[tem] word-wrap x-of y-of year yes-no yes-no-cancel _dcm
-
-syn keyword    ProgressType            char[acter] int[eger] format
-syn keyword    ProgressType            var[iable] log[ical] da[te]
+" syn match ProgressOperator    "[!;|)(:.><+*=]\|\W-\W\|^-\W\|\W-$"
+syn match ProgressOperator      "[!;|)(:.><+*=]\|\s-\s\|^-\s\|\s-$"
+
+syn keyword ProgressOperator   <= <> >=
+syn keyword ProgressOperator   abs[olute] accelerator accept-changes accept-row-changes across active actor add-buffer add-calc-col[umn]
+syn keyword ProgressOperator   add-columns-from add-events-proc[edure] add-fields-from add-first add-header-entry add-index-field add-interval add-last
+syn keyword ProgressOperator   add-like-col[umn] add-like-field add-like-index add-new-field add-new-index add-rel[ation] add-schema-location add-source-buffer
+syn keyword ProgressOperator   add-super-proc[edure] adm-data advise after-buffer after-rowid after-table alert-box allow-column-searching allow-replication alternate-key
+syn keyword ProgressOperator   always-on-top ansi-only anywhere append append-child appl-alert[-boxes] appl-context-id application apply-callback appserver-info
+syn keyword ProgressOperator   appserver-password appserver-userid array-m[essage] ask-overwrite assembly async-request-count async-request-handle attach-data-source
+syn keyword ProgressOperator   attached-pairlist attach attribute-names audit-enabled audit-event-context authentication-failed auto-comp[letion] auto-delete
+syn keyword ProgressOperator   auto-delete-xml auto-end-key auto-endkey auto-go auto-ind[ent] auto-resize auto-synchronize auto-val[idate] auto-z[ap] automatic
+syn keyword ProgressOperator   available-formats ave[rage] avg backward[s] base-ade base-key basic-logging batch[-mode] batch-size before-buffer before-rowid
+syn keyword ProgressOperator   before-table begin-event-group bgc[olor] binary bind bind-where blob block-iteration-display border-b[ottom-chars]
+syn keyword ProgressOperator   border-bottom-p[ixels] border-l[eft-chars] border-left-p[ixels] border-r[ight-chars] border-right-p[ixels] border-t[op-chars]
+syn keyword ProgressOperator   border-top-p[ixels] both bottom box box-select[able] browse buffer buffer-chars buffer-create buffer-delete buffer-field buffer-handle
+syn keyword ProgressOperator   buffer-lines buffer-n[ame] buffer-releas[e] buffer-validate buffer-value button[s] by-reference by-value byte bytes-read
+syn keyword ProgressOperator   bytes-written cache cache-size call-name call-type can-crea[te] can-dele[te] can-query can-read can-set can-writ[e] cancel-break
+syn keyword ProgressOperator   cancel-button cancel-requests cancelled caps careful-paint catch cdecl chained char[acter] character_length charset checked
+syn keyword ProgressOperator   child-buffer child-num choose class class-type clear-appl-context clear-log clear-select[ion] clear-sort-arrow[s]
+syn keyword ProgressOperator   client-connection-id client-principal client-tty client-type client-workstation clob clone-node close close-log code codepage
+syn keyword ProgressOperator   codepage-convert col-of collate colon-align[ed] color-table column-bgc[olor] column-codepage column-dcolor column-fgc[olor]
+syn keyword ProgressOperator   column-font column-movable column-of column-pfc[olor] column-read-only column-resizable column-sc[rolling] com-handle combo-box
+syn keyword ProgressOperator   command compare[s] compile complete config-name connect constructor contents context context-help context-help-file
+syn keyword ProgressOperator   context-help-id context-pop[up] control-box control-fram[e] convert convert-to-offs[et] copy-dataset copy-sax-attributes
+syn keyword ProgressOperator   copy-temp-table count cpcase cpcoll cpint[ernal] cplog cpprint cprcodein cprcodeout cpterm crc-val[ue] create-like
+syn keyword ProgressOperator   create-like-sequential create-node create-node-namespace create-result-list-entry create-test-file current-column current-env[ironment]
+syn keyword ProgressOperator   current-iteration current-query current-result-row current-row-modified current-value cursor-char cursor-line cursor-offset data-b[ind]
+syn keyword ProgressOperator   data-entry-ret[urn] data-rel[ation] data-source data-source-complete-map data-source-modified data-source-rowid data-t[ype] date
+syn keyword ProgressOperator   date-f[ormat] day db-references dcolor dde-error dde-i[d] dde-item dde-name dde-topic debu[g] debug-alert
+syn keyword ProgressOperator   declare-namespace decrypt default-buffer-handle default-but[ton] default-commit default-ex[tension] default-string
+syn keyword ProgressOperator   default-value define-user-event-manager defined delete-char delete-current-row delete-header-entry delete-line delete-node
+syn keyword ProgressOperator   delete-result-list-entry delete-selected-row delete-selected-rows descript[ion] deselect-focused-row deselect-rows deselect-selected-row
+syn keyword ProgressOperator   destructor detach-data-source dialog-box dir directory disable-auto-zap disable-connections disable-dump-triggers
+syn keyword ProgressOperator   disable-load-triggers disabled display-message display-timezone display-t[ype] domain-description domain-name domain-type double
+syn keyword ProgressOperator   drag-enabled drop-down drop-down-list drop-target dump dump-logging-now dynamic dynamic-current-value dynamic-next-value echo
+syn keyword ProgressOperator   edge[-chars] edge-p[ixels] edit-can-paste edit-can-undo edit-clear edit-copy edit-cut edit-paste edit-undo editor empty
+syn keyword ProgressOperator   empty-dataset empty-temp-table enable-connections enabled encoding encrypt encrypt-audit-mac-key encryption-salt end-document
+syn keyword ProgressOperator   end-element end-event-group end-file-drop end-key end-user-prompt endkey entered entry-types-list eq error error-col[umn]
+syn keyword ProgressOperator   error-object-detail error-row error-stack-trace error-string event-group-id event-procedure-context event-t[ype] events exclusive-id
+syn keyword ProgressOperator   execute execution-log exp expand expandable expire explicit export-principal extended extent external extract
+syn keyword ProgressOperator   fetch-selected-row fgc[olor] file file-create-d[ate] file-create-t[ime] file-mod-d[ate] file-mod-t[ime] file-name file-off[set]
+syn keyword ProgressOperator   file-size file-type filename fill-in fill-mode fill-where-string filled filters final finally find-by-rowid find-current
+syn keyword ProgressOperator   find-first find-last find-unique finder first-async[-request] first-buffer first-child first-column first-data-source
+syn keyword ProgressOperator   first-dataset first-form first-object first-proc[edure] first-query first-serv[er] first-server-socket first-socket
+syn keyword ProgressOperator   first-tab-i[tem] fit-last-column fix-codepage fixed-only flat-button float focused-row focused-row-selected font-table force-file
+syn keyword ProgressOperator   fore[ground] foreign-key-hidden form-input form-long-input formatte[d] forward-only forward[s] fragmen[t] frame-spa[cing] frame-x
+syn keyword ProgressOperator   frame-y frequency from-cur[rent] full-height[-chars] full-height-p[ixels] full-pathn[ame] full-width[-chars]
+syn keyword ProgressOperator   full-width-p[ixels] function ge generate-pbe-key generate-pbe-salt generate-random-key generate-uuid get get-attribute get-attribute-node
+syn keyword ProgressOperator   get-binary-data get-bits get-blue[-value] get-browse-col[umn] get-buffer-handle get-byte-order get-bytes get-bytes-available
+syn keyword ProgressOperator   get-callback-proc-context get-callback-proc-name get-cgi-list get-cgi-long-value get-cgi-value get-changes get-child get-child-rel[ation]
+syn keyword ProgressOperator   get-config-value get-curr[ent] get-dataset-buffer get-dir get-document-element get-double get-dropped-file get-dynamic get-file
+syn keyword ProgressOperator   get-firs[t] get-float get-green[-value] get-header-entr[y] get-index-by-namespace-name get-index-by-qname get-iteration get-last
+syn keyword ProgressOperator   get-localname-by-index get-long get-message get-next get-node get-number get-parent get-pointer-value get-prev get-printers get-property
+syn keyword ProgressOperator   get-qname-by-index get-red[-value] get-rel[ation] get-repositioned-row get-rgb[-value] get-selected[-widget] get-serialized get-short
+syn keyword ProgressOperator   get-signature get-size get-socket-option get-source-buffer get-string get-tab-item get-text-height[-chars] get-text-height-p[ixels]
+syn keyword ProgressOperator   get-text-width[-chars] get-text-width-p[ixels] get-top-buffer get-type-by-index get-type-by-namespace-name get-type-by-qname
+syn keyword ProgressOperator   get-unsigned-long get-unsigned-short get-uri-by-index get-value-by-index get-value-by-namespace-name get-value-by-qname
+syn keyword ProgressOperator   get-wait[-state] grayed grid-factor-h[orizontal] grid-factor-v[ertical] grid-snap grid-unit-height[-chars] grid-unit-height-p[ixels]
+syn keyword ProgressOperator   grid-unit-width[-chars] grid-unit-width-p[ixels] grid-visible group-box gt guid handle handler has-lobs has-records height[-chars]
+syn keyword ProgressOperator   height-p[ixels] help-topic hex-decode hex-encode hidden hint hori[zontal] html-charset html-end-of-line html-end-of-page
+syn keyword ProgressOperator   html-frame-begin html-frame-end html-header-begin html-header-end html-title-begin html-title-end hwnd icfparam[eter] icon
+syn keyword ProgressOperator   ignore-current-mod[ified] image image-down image-insensitive image-size image-size-c[hars] image-size-p[ixels] image-up immediate-display
+syn keyword ProgressOperator   implements import-node import-principal in-handle increment-exclusive-id index-hint index-info[rmation] indexed-reposition
+syn keyword ProgressOperator   info[rmation] inherit-bgc[olor] inherit-fgc[olor] inherits init[ial] initial-dir initial-filter initialize-document-type initiate
+syn keyword ProgressOperator   inner inner-chars inner-lines input-value insert-attribute insert-b[acktab] insert-before insert-file insert-row
+syn keyword ProgressOperator   insert-string insert-t[ab] instantiating-procedure int[eger] interface internal-entries interval invoke is-clas[s]
+syn keyword ProgressOperator   is-codepage-fixed is-column-codepage is-lead-byte is-open is-parameter-set is-row-selected is-selected is-xml iso-date item
+syn keyword ProgressOperator   items-per-row join-by-sqldb keep-connection-open keep-frame-z[-order] keep-messages keep-security-cache keep-tab-order key
+syn keyword ProgressOperator   keyword-all label-bgc[olor] label-dc[olor] label-fgc[olor] label-font label-pfc[olor] labels landscape language[s] large
+syn keyword ProgressOperator   large-to-small last-async[-request] last-batch last-child last-form last-object last-proce[dure] last-serv[er] last-server-socket
+syn keyword ProgressOperator   last-socket last-tab-i[tem] lc le leading left left-align[ed] left-trim length line list-events list-item-pairs list-items
+syn keyword ProgressOperator   list-property-names list-query-attrs list-set-attrs list-widgets literal-question load load-domains load-icon load-image load-image-down
+syn keyword ProgressOperator   load-image-insensitive load-image-up load-mouse-p[ointer] load-picture load-small-icon lob-dir local-host local-name local-port
+syn keyword ProgressOperator   locator-column-number locator-line-number locator-public-id locator-system-id locator-type lock-registration log log-audit-event
+syn keyword ProgressOperator   log-entry-types log-threshold logfile-name logging-level logical login-expiration-timestamp login-host login-state logout long[char]
+syn keyword ProgressOperator   longchar-to-node-value lookahead lower lt mandatory manual-highlight margin-extra margin-height[-chars] margin-height-p[ixels]
+syn keyword ProgressOperator   margin-width[-chars] margin-width-p[ixels] mark-new mark-row-state matches max-button max-chars max-data-guess max-height[-chars]
+syn keyword ProgressOperator   max-height-p[ixels] max-rows max-size max-val[ue] max-width[-chars] max-width-p[ixels] maximize max[imum] maximum-level memory memptr
+syn keyword ProgressOperator   memptr-to-node-value menu menu-bar menu-item menu-k[ey] menu-m[ouse] menubar merge-by-field merge-changes merge-row-changes message-area
+syn keyword ProgressOperator   message-area-font method min-button min-column-width-c[hars] min-column-width-p[ixels] min-height[-chars] min-height-p[ixels]
+syn keyword ProgressOperator   min-schema-marshal min-size min-val[ue] min-width[-chars] min-width-p[ixels] min[imum] modified mod[ulo] month mouse-p[ointer] movable
+syn keyword ProgressOperator   move-after[-tab-item] move-befor[e-tab-item] move-col[umn] move-to-b[ottom] move-to-eof move-to-t[op] mtime multi-compile multiple
+syn keyword ProgressOperator   multiple-key multitasking-interval must-exist must-understand name namespace-prefix namespace-uri native ne needs-appserver-prompt
+syn keyword ProgressOperator   needs-prompt nested new-instance new-row next-col[umn] next-rowid next-sibling next-tab-ite[m] next-value no-apply
+syn keyword ProgressOperator   no-array-m[essage] no-assign no-attr-l[ist] no-auto-validate no-bind-where no-box no-console no-convert no-current-value no-debug
+syn keyword ProgressOperator   no-drag no-echo no-empty-space no-focus no-index-hint no-inherit-bgc[olor] no-inherit-fgc[olor] no-join-by-sqldb no-lookahead
+syn keyword ProgressOperator   no-row-markers no-schema-marshal no-scrollbar-v[ertical] no-separate-connection no-separators no-tab[-stop] no-und[erline]
+syn keyword ProgressOperator   no-word-wrap node-value node-value-to-longchar node-value-to-memptr nonamespace-schema-location none normalize not-active
+syn keyword ProgressOperator   num-buffers num-but[tons] num-child-relations num-children num-col[umns] num-copies num-dropped-files num-fields num-formats
+syn keyword ProgressOperator   num-header-entries num-items num-iterations num-lines num-locked-col[umns] num-log-files num-messages num-parameters num-references
+syn keyword ProgressOperator   num-relations num-repl[aced] num-results num-selected-rows num-selected[-widgets] num-source-buffers num-tabs num-to-retain
+syn keyword ProgressOperator   num-top-buffers num-visible-col[umns] numeric numeric-dec[imal-point] numeric-f[ormat] numeric-sep[arator] object ok ok-cancel
+syn keyword ProgressOperator   on-frame[-border] ordered-join ordinal orientation origin-handle origin-rowid os-getenv outer outer-join override owner owner-document
+syn keyword ProgressOperator   page-size page-wid[th] paged parent parent-buffer parent-rel[ation] parse-status partial-key pascal pathname
+syn keyword ProgressOperator   pbe-hash-alg[orithm] pbe-key-rounds perf[ormance] persistent-cache-disabled persistent-procedure pfc[olor] pixels-per-col[umn]
+syn keyword ProgressOperator   pixels-per-row popup-m[enu] popup-o[nly] portrait position precision prefer-dataset prepare-string prepared presel[ect] prev
+syn keyword ProgressOperator   prev-col[umn] prev-sibling prev-tab-i[tem] primary printer printer-control-handle printer-hdc printer-name printer-port
+syn keyword ProgressOperator   printer-setup private private-d[ata] proce[dure] procedure-name progress-s[ource] property protected proxy proxy-password
+syn keyword ProgressOperator   proxy-userid public public-id published-events put-bits put-bytes put-double put-float put-long put-short put-string
+syn keyword ProgressOperator   put-unsigned-long put-unsigned-short query-close query-off-end query-open query-prepare question quoter radio-buttons radio-set random
+syn keyword ProgressOperator   raw raw-transfer read read-file read-only read-xml read-xmlschema real recursive reference-only refresh
+syn keyword ProgressOperator   refresh-audit-policy refreshable register-domain reject-changes reject-row-changes rejected relation-fi[elds] relations-active remote
+syn keyword ProgressOperator   remote-host remote-port remove-attribute remove-child remove-events-proc[edure] remove-super-proc[edure] replace replace-child
+syn keyword ProgressOperator   replace-selection-text replication-create replication-delete replication-write reposition-back[ward] reposition-forw[ard] reposition-to-row
+syn keyword ProgressOperator   reposition-to-rowid request reset resiza[ble] resize restart-row restart-rowid result retain-s[hape] retry-cancel return-ins[erted]
+syn keyword ProgressOperator   return-to-start-di[r] return-value-data-type returns reverse-from rgb-v[alue] right right-align[ed] right-trim roles round rounded
+syn keyword ProgressOperator   routine-level row row-height[-chars] row-height-p[ixels] row-ma[rkers] row-of row-resizable row-state rowid rule run-proc[edure]
+syn keyword ProgressOperator   save-as save-file save-row-changes save-where-string sax-attributes sax-parse sax-parse-first sax-parse-next sax-reader
+syn keyword ProgressOperator   sax-writer schema-change schema-location schema-marshal schema-path screen-val[ue] scroll-bars scroll-delta scroll-offset
+syn keyword ProgressOperator   scroll-to-current-row scroll-to-i[tem] scroll-to-selected-row scrollable scrollbar-h[orizontal] scrollbar-v[ertical]
+syn keyword ProgressOperator   scrolled-row-pos[ition] scrolling seal seal-timestamp section select-all select-focused-row select-next-row select-prev-row select-row
+syn keyword ProgressOperator   selectable selected selection-end selection-list selection-start selection-text send sensitive separate-connection
+syn keyword ProgressOperator   separator-fgc[olor] separators server server-connection-bo[und] server-connection-bound-re[quest] server-connection-co[ntext]
+syn keyword ProgressOperator   server-connection-id server-operating-mode server-socket session-end session-id set-actor set-appl-context set-attribute
+syn keyword ProgressOperator   set-attribute-node set-blue[-value] set-break set-buffers set-byte-order set-callback set-callback-procedure set-client set-commit
+syn keyword ProgressOperator   set-connect-procedure set-contents set-db-client set-dynamic set-green[-value] set-input-source set-must-understand set-node
+syn keyword ProgressOperator   set-numeric-form[at] set-option set-output-destination set-parameter set-pointer-val[ue] set-property set-read-response-procedure
+syn keyword ProgressOperator   set-red[-value] set-repositioned-row set-rgb[-value] set-rollback set-selection set-serialized set-size set-socket-option
+syn keyword ProgressOperator   set-sort-arrow set-wait[-state] short show-in-task[bar] side-label-h[andle] side-lab[els] silent simple single single-character size
+syn keyword ProgressOperator   size-c[hars] size-p[ixels] skip-deleted-rec[ord] slider small-icon small-title smallint soap-fault soap-fault-actor
+syn keyword ProgressOperator   soap-fault-code soap-fault-detail soap-fault-string soap-header soap-header-entryref socket sort sort-ascending sort-number source
+syn keyword ProgressOperator   sql sqrt ssl-server-name standalone start-document start-element start[ing] startup-parameters state-detail static
+syn keyword ProgressOperator   status-area status-area-font stdcall stop stop-parsing stoppe[d] stored-proc[edure] stretch-to-fit strict string string-value
+syn keyword ProgressOperator   sub-ave[rage] sub-count sub-max[imum] sub-menu sub-menu-help sub-min[imum] sub-total subst[itute] substr[ing] subtype sum
+syn keyword ProgressOperator   super-proc[edures] suppress-namespace-processing suppress-w[arnings] suspend symmetric-encryption-algorithm symmetric-encryption-iv
+syn keyword ProgressOperator   symmetric-encryption-key symmetric-support synchronize system-alert[-boxes] system-help system-id tab-position tab-stop table-crc-list
+syn keyword ProgressOperator   table-list table-num[ber] target temp-dir[ectory] temp-table temp-table-prepar[e] terminate text-selected three-d through throw
+syn keyword ProgressOperator   thru tic-marks time-source timezone title-bgc[olor] title-dc[olor] title-fgc[olor] title-fo[nt] to-rowid toggle-box
+syn keyword ProgressOperator   tooltip tooltips top top-nav-query topic total tracking-changes trailing trans-init-proc[edure] transaction-mode
+syn keyword ProgressOperator   transpar[ent] trunc[ate] ttcodepage type type-of unbox unbuff[ered] unique-id unique-match unload unsigned-byte unsigned-integer
+syn keyword ProgressOperator   unsigned-long unsigned-short update-attribute upper url url-decode url-encode url-password url-userid use use-dic[t-exps]
+syn keyword ProgressOperator   use-filename use-text use-widget-pool user-id valid-event valid-handle valid-object validate validate-expressio[n]
+syn keyword ProgressOperator   validate-message validate-seal validate-xml validation-enabled var[iable] verb[ose] version vert[ical] view-first-column-on-reopen
+syn keyword ProgressOperator   virtual-height[-chars] virtual-height-p[ixels] virtual-width[-chars] virtual-width-p[ixels] visible void wait warning weekday where-string
+syn keyword ProgressOperator   widget widget-e[nter] widget-h[andle] widget-id widget-l[eave] widget-pool width[-chars] width-p[ixels] window-name
+syn keyword ProgressOperator   window-sta[te] window-sys[tem] word-index word-wrap work-area-height-p[ixels] work-area-width-p[ixels] work-area-x work-area-y
+syn keyword ProgressOperator   write-cdata write-characters write-comment write-data-element write-empty-element write-entity-ref write-external-dtd
+syn keyword ProgressOperator   write-fragment write-message write-processing-instruction write-status write-xml write-xmlschema x x-document x-noderef x-of
+syn keyword ProgressOperator   xml-data-type xml-node-name xml-node-type xml-schema-pat[h] xml-suppress-namespace-processing y y-of year year-offset yes-no
+syn keyword ProgressOperator   yes-no-cancel
+
+syn keyword ProgressType       char[acter] int[eger] int64 dec[imal] log[ical] da[te] datetime datetime-tz
 
 syn sync lines=800
 
@@ -190,42 +285,45 @@ syn sync lines=800
 " For version 5.7 and earlier: only when not done already
 " For version 5.8 and later: only when an item doesn't have highlighting yet
 if version >= 508 || !exists("did_progress_syntax_inits")
-  if version < 508
-       let did_progress_syntax_inits = 1
-       command -nargs=+ HiLink hi link <args>
-  else
-       command -nargs=+ HiLink hi def link <args>
-  endif
-
-  " The default methods for highlighting. Can be overridden later.
-  HiLink ProgressByte                  Number
-  HiLink ProgressCase                  Repeat
-  HiLink ProgressComment               Comment
-  HiLink ProgressConditional           Conditional
-  HiLink ProgressDebug                 Debug
-  HiLink ProgressDo                    Repeat
-  HiLink ProgressEndError              Error
-  HiLink ProgressFor                   Repeat
-  HiLink ProgressFunction              Procedure
-  HiLink ProgressIdentifier            Identifier
-  HiLink ProgressInclude               Include
-  HiLink ProgressMatrixDelimiter       Identifier
-  HiLink ProgressNumber                        Number
-  HiLink ProgressOperator              Operator
-  HiLink ProgressPreProc               PreProc
-  HiLink ProgressProcedure             Procedure
-  HiLink ProgressQuote                 Delimiter
-  HiLink ProgressRepeat                        Repeat
-  HiLink ProgressReserved              Statement
-  HiLink ProgressSpaceError            Error
-  HiLink ProgressString                        String
-  HiLink ProgressTodo                  Todo
-  HiLink ProgressType                  Statement
-  HiLink ProgressShowTab               Error
-
-  delcommand HiLink
+       if version < 508
+               let did_progress_syntax_inits = 1
+               command -nargs=+ HiLink hi link <args>
+       else
+               command -nargs=+ HiLink hi def link <args>
+       endif
+
+       " The default methods for highlighting. Can be overridden later.
+       HiLink ProgressByte             Number
+       HiLink ProgressCase             Repeat
+       HiLink ProgressComment          Comment
+       HiLink ProgressConditional      Conditional
+       HiLink ProgressDebug            Debug
+       HiLink ProgressDo               Repeat
+       HiLink ProgressEndError         Error
+       HiLink ProgressFor              Repeat
+       HiLink ProgressFunction         Procedure
+       HiLink ProgressIdentifier       Identifier
+       HiLink ProgressInclude          Include
+       HiLink ProgressMatrixDelimiter  Identifier
+       HiLink ProgressNumber           Number
+       HiLink ProgressOperator         Operator
+       HiLink ProgressPreProc          PreProc
+       HiLink ProgressProcedure        Procedure
+       HiLink ProgressQuote            Delimiter
+       HiLink ProgressRepeat           Repeat
+       HiLink ProgressReserved         Statement
+       HiLink ProgressSpaceError       Error
+       HiLink ProgressString           String
+       HiLink ProgressTodo             Todo
+       HiLink ProgressType             Statement
+       HiLink ProgressShowTab          Error
+
+       delcommand HiLink
 endif
 
 let b:current_syntax = "progress"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8 sw=8
index 58de71f..f5f0e67 100644 (file)
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:    PROLOG
 " Maintainers: Thomas Koehler <jean-luc@picard.franken.de>
-" Last Change: 2009 Dec 04
-" URL:        http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/prolog.vim
+" Last Change: 2013 May 23
+" URL:         http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/prolog.vim
 
 " There are two sets of highlighting in here:
 " If the "prolog_highlighting_clean" variable exists, it is rather sparse.
@@ -21,14 +21,14 @@ syn case match
 " Very simple highlighting for comments, clause heads and
 " character codes.  It respects prolog strings and atoms.
 
-syn region   prologCComment    start=+/\*+ end=+\*/+
-syn match    prologComment     +%.*+
+syn region   prologCComment start=+/\*+ end=+\*/+
+syn match    prologComment  +%.*+
 
-syn keyword  prologKeyword     module meta_predicate multifile dynamic
-syn match    prologCharCode    +0'\\\=.+
-syn region   prologString      start=+"+ skip=+\\\\\|\\"+ end=+"+
-syn region   prologAtom                start=+'+ skip=+\\\\\|\\'+ end=+'+
-syn region   prologClauseHead   start=+^[a-z][^(]*(+ skip=+\.[^                ]+ end=+:-\|\.$\|\.[     ]\|-->+ contains=prologComment,prologCComment,prologString
+syn keyword  prologKeyword  module meta_predicate multifile dynamic
+syn match    prologCharCode +0'\\\=.+
+syn region   prologString   start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn region   prologAtom     start=+'+ skip=+\\\\\|\\'+ end=+'+
+syn region   prologClause   matchgroup=prologClauseHead start=+^\s*[a-z]\w*+ matchgroup=Normal end=+\.\s\|\.$+ contains=ALLBUT,prologClause
 
 if !exists("prolog_highlighting_clean")
 
@@ -40,12 +40,12 @@ if !exists("prolog_highlighting_clean")
   syn keyword prologKeyword   arg     current_prolog_flag     put_char
   syn keyword prologKeyword   asserta fail    put_code
   syn keyword prologKeyword   assertz findall read
-  syn keyword prologKeyword   at_end_of_stream       float   read_term
+  syn keyword prologKeyword   at_end_of_stream        float   read_term
   syn keyword prologKeyword   atom    flush_output    repeat
   syn keyword prologKeyword   atom_chars      functor retract
-  syn keyword prologKeyword   atom_codes      get_byte       set_input
-  syn keyword prologKeyword   atom_concat     get_char       set_output
-  syn keyword prologKeyword   atom_length     get_code       set_prolog_flag
+  syn keyword prologKeyword   atom_codes      get_byte        set_input
+  syn keyword prologKeyword   atom_concat     get_char        set_output
+  syn keyword prologKeyword   atom_length     get_code        set_prolog_flag
   syn keyword prologKeyword   atomic  halt    set_stream_position
   syn keyword prologKeyword   bagof   integer setof
   syn keyword prologKeyword   call    is      stream_property
@@ -54,7 +54,7 @@ if !exists("prolog_highlighting_clean")
   syn keyword prologKeyword   char_conversion number  true
   syn keyword prologKeyword   clause  number_chars    unify_with_occurs_check
   syn keyword prologKeyword   close   number_codes    var
-  syn keyword prologKeyword   compound       once    write
+  syn keyword prologKeyword   compound        once    write
   syn keyword prologKeyword   copy_term       op      write_canonical
   syn keyword prologKeyword   current_char_conversion open    write_term
   syn keyword prologKeyword   current_input   peek_byte       writeq
@@ -63,11 +63,13 @@ if !exists("prolog_highlighting_clean")
   syn match   prologOperator "=\\=\|=:=\|\\==\|=<\|==\|>=\|\\=\|\\+\|<\|>\|="
   syn match   prologAsIs     "===\|\\===\|<=\|=>"
 
-  syn match   prologNumber           "\<[0123456789]*\>'\@!"
+  syn match   prologNumber            "\<[0123456789]*\>'\@!"
   syn match   prologCommentError      "\*/"
   syn match   prologSpecialCharacter  ";"
   syn match   prologSpecialCharacter  "!"
-  syn match   prologQuestion         "?-.*\."  contains=prologNumber
+  syn match   prologSpecialCharacter  ":-"
+  syn match   prologSpecialCharacter  "-->"
+  syn match   prologQuestion          "?-.*\."  contains=prologNumber
 
 
 endif
@@ -87,27 +89,29 @@ if version >= 508 || !exists("did_prolog_syn_inits")
   endif
 
   " The default highlighting.
-  HiLink prologComment         Comment
-  HiLink prologCComment                Comment
-  HiLink prologCharCode                Special
+  HiLink prologComment          Comment
+  HiLink prologCComment         Comment
+  HiLink prologCharCode         Special
 
   if exists ("prolog_highlighting_clean")
 
-    HiLink prologKeyword       Statement
-    HiLink prologClauseHead    Statement
+    HiLink prologKeyword        Statement
+    HiLink prologClauseHead     Statement
+    HiLink prologClause Normal
 
   else
 
-    HiLink prologKeyword       Keyword
-    HiLink prologClauseHead    Constant
-    HiLink prologQuestion      PreProc
+    HiLink prologKeyword        Keyword
+    HiLink prologClauseHead     Constant
+    HiLink prologClause Normal
+    HiLink prologQuestion       PreProc
     HiLink prologSpecialCharacter Special
-    HiLink prologNumber                Number
-    HiLink prologAsIs          Normal
-    HiLink prologCommentError  Error
-    HiLink prologAtom          String
-    HiLink prologString                String
-    HiLink prologOperator      Operator
+    HiLink prologNumber         Number
+    HiLink prologAsIs           Normal
+    HiLink prologCommentError   Error
+    HiLink prologAtom           String
+    HiLink prologString         String
+    HiLink prologOperator       Operator
 
   endif
 
diff --git a/runtime/syntax/proto.vim b/runtime/syntax/proto.vim
new file mode 100644 (file)
index 0000000..4d6a77e
--- /dev/null
@@ -0,0 +1,74 @@
+" syntax file for Protocol Buffers - Google's data interchange format
+"
+" Copyright 2008 Google Inc.  All rights reserved.
+"
+" Permission is hereby granted, free of charge, to any person obtaining a copy
+" of this software and associated documentation files (the "Software"), to deal
+" in the Software without restriction, including without limitation the rights
+" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+" copies of the Software, and to permit persons to whom the Software is
+" furnished to do so, subject to the following conditions:
+"
+" The above copyright notice and this permission notice shall be included in
+" all copies or substantial portions of the Software.
+"
+" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+" THE SOFTWARE.
+"
+" http://code.google.com/p/protobuf/
+
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+syn case match
+
+syn keyword protoTodo       contained TODO FIXME XXX
+syn cluster protoCommentGrp contains=protoTodo
+
+syn keyword protoSyntax     syntax import option
+syn keyword protoStructure  package message group
+syn keyword protoRepeat     optional required repeated
+syn keyword protoDefault    default
+syn keyword protoExtend     extend extensions to max
+syn keyword protoRPC        service rpc returns
+
+syn keyword protoType      int32 int64 uint32 uint64 sint32 sint64
+syn keyword protoType      fixed32 fixed64 sfixed32 sfixed64
+syn keyword protoType      float double bool string bytes
+syn keyword protoTypedef   enum
+syn keyword protoBool      true false
+
+syn match   protoInt     /-\?\<\d\+\>/
+syn match   protoInt     /\<0[xX]\x+\>/
+syn match   protoFloat   /\<-\?\d*\(\.\d*\)\?/
+syn region  protoComment start="\/\*" end="\*\/" contains=@protoCommentGrp
+syn region  protoComment start="//" skip="\\$" end="$" keepend contains=@protoCommentGrp
+syn region  protoString  start=/"/ skip=/\\./ end=/"/
+syn region  protoString  start=/'/ skip=/\\./ end=/'/
+
+hi def link protoTodo         Todo
+
+hi def link protoSyntax       Include
+hi def link protoStructure    Structure
+hi def link protoRepeat       Repeat
+hi def link protoDefault      Keyword
+hi def link protoExtend       Keyword
+hi def link protoRPC          Keyword
+hi def link protoType         Type
+hi def link protoTypedef      Typedef
+hi def link protoBool         Boolean
+
+hi def link protoInt          Number
+hi def link protoFloat        Float
+hi def link protoComment      Comment
+hi def link protoString       String
+
+let b:current_syntax = "proto"
index d590743..71b4405 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    Python
 " Maintainer:  Neil Schemenauer <nas@python.ca>
-" Last Change: 2009-10-13
+" Last Change: 2013 Feb 26
 " Credits:     Zvezdan Petkovic <zpetkovic@acm.org>
 "              Neil Schemenauer <nas@python.ca>
 "              Dmitry Vasiliev
@@ -45,6 +45,11 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+" We need nocompatible mode in order to continue lines with backslashes.
+" Original setting will be restored.
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Keep Python keywords in alphabetical order inside groups for easy
 " comparison with the table in the 'Python Language Reference'
 " http://docs.python.org/reference/lexical_analysis.html#keywords.
@@ -231,7 +236,7 @@ endif
 " Notice that the end of a string, either ''', or """, will end the contained
 " doctest too.  Thus, we do *not* need to have it as an end pattern.
 if !exists("python_no_doctest_highlight")
-  if !exists("python_no_doctest_code_higlight")
+  if !exists("python_no_doctest_code_highlight")
     syn region pythonDoctest
          \ start="^\s*>>>\s" end="^\s*$"
          \ contained contains=ALLBUT,pythonDoctest,@Spell
@@ -292,4 +297,7 @@ endif
 
 let b:current_syntax = "python"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:set sw=2 sts=2 ts=8 noet:
index f3e730e..5e76e7a 100644 (file)
 " Vim syntax file
-" Language:    R (GNU S)
-" Maintainer:  Vaidotas Zemlys <zemlys@gmail.com>
-" Last Change:  2006 Apr 30
-" Filenames:   *.R *.Rout *.r *.Rhistory *.Rt *.Rout.save *.Rout.fail
-" URL:         http://uosis.mif.vu.lt/~zemlys/vim-syntax/r.vim
-
-" First maintainer Tom Payne <tom@tompayne.org>
-" Modified to make syntax less colourful and added the highlighting of
-" R assignment arrow
-
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
+" Language:          R (GNU S)
+" Maintainer:        Jakson Aquino <jalvesaq@gmail.com>
+" Former Maintainers: Vaidotas Zemlys <zemlys@gmail.com>
+"                    Tom Payne <tom@tompayne.org>
+" Last Change:       Sun May 19, 2013  05:59PM
+" Filenames:         *.R *.r *.Rhistory *.Rt
+" 
+" NOTE: The highlighting of R functions is defined in the
+" r-plugin/functions.vim, which is part of vim-r-plugin2:
+" http://www.vim.org/scripts/script.php?script_id=2628
+"
+" CONFIGURATION:
+"   syntax folding can be turned on by
+"
+"      let r_syntax_folding = 1
+"
+" Some lines of code were borrowed from Zhuojun Chen.
+
+if exists("b:current_syntax")
   finish
 endif
 
-if version >= 600
-  setlocal iskeyword=@,48-57,_,.
-else
-  set iskeyword=@,48-57,_,.
+setlocal iskeyword=@,48-57,_,.
+
+if exists("g:r_syntax_folding")
+  setlocal foldmethod=syntax
 endif
 
 syn case match
 
 " Comment
-syn match rComment /\#.*/
+syn match rComment contains=@Spell "#.*"
+
+" Roxygen
+syn match rOKeyword contained "@\(param\|return\|name\|rdname\|examples\|include\|docType\)"
+syn match rOKeyword contained "@\(S3method\|TODO\|aliases\|alias\|assignee\|author\|callGraphDepth\|callGraph\)"
+syn match rOKeyword contained "@\(callGraphPrimitives\|concept\|exportClass\|exportMethod\|exportPattern\|export\|formals\)"
+syn match rOKeyword contained "@\(format\|importClassesFrom\|importFrom\|importMethodsFrom\|import\|keywords\)"
+syn match rOKeyword contained "@\(method\|nord\|note\|references\|seealso\|setClass\|slot\|source\|title\|usage\)"
+syn match rOComment contains=@Spell,rOKeyword "#'.*"
+
+
+if &filetype == "rhelp"
+  " string enclosed in double quotes
+  syn region rString contains=rSpecial,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
+  " string enclosed in single quotes
+  syn region rString contains=rSpecial,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
+else
+  " string enclosed in double quotes
+  syn region rString contains=rSpecial,rStrError,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
+  " string enclosed in single quotes
+  syn region rString contains=rSpecial,rStrError,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
+endif
 
-" Constant
-" string enclosed in double quotes
-syn region rString start=/"/ skip=/\\\\\|\\"/ end=/"/
-" string enclosed in single quotes
-syn region rString start=/'/ skip=/\\\\\|\\'/ end=/'/
-" number with no fractional part or exponent
-syn match rNumber /\d\+/
-" floating point number with integer and fractional parts and optional exponent
-syn match rFloat /\d\+\.\d*\([Ee][-+]\=\d\+\)\=/
-" floating point number with no integer part and optional exponent
-syn match rFloat /\.\d\+\([Ee][-+]\=\d\+\)\=/
-" floating point number with no fractional part and optional exponent
-syn match rFloat /\d\+[Ee][-+]\=\d\+/
+syn match rStrError display contained "\\."
+
+
+" New line, carriage return, tab, backspace, bell, feed, vertical tab, backslash
+syn match rSpecial display contained "\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"
+
+" Hexadecimal and Octal digits
+syn match rSpecial display contained "\\\(x\x\{1,2}\|[0-8]\{1,3}\)"
 
-" Identifier
-" identifier with leading letter and optional following keyword characters
-syn match rIdentifier /\a\k*/
-" identifier with leading period, one or more digits, and at least one non-digit keyword character
-syn match rIdentifier /\.\d*\K\k*/
+" Unicode characters
+syn match rSpecial display contained "\\u\x\{1,4}"
+syn match rSpecial display contained "\\U\x\{1,8}"
+syn match rSpecial display contained "\\u{\x\{1,4}}"
+syn match rSpecial display contained "\\U{\x\{1,8}}"
 
 " Statement
 syn keyword rStatement   break next return
 syn keyword rConditional if else
 syn keyword rRepeat      for in repeat while
 
-" Constant
-syn keyword rConstant LETTERS letters month.ab month.name pi
+" Constant (not really)
+syn keyword rConstant T F LETTERS letters month.abb month.name pi
+syn keyword rConstant R.version.string
+
+syn keyword rNumber   NA_integer_ NA_real_ NA_complex_ NA_character_ 
+
+" Constants
 syn keyword rConstant NULL
 syn keyword rBoolean  FALSE TRUE
-syn keyword rNumber   NA
-syn match rArrow /<\{1,2}-/
+syn keyword rNumber   NA Inf NaN 
 
-" Type
-syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame 
+" integer
+syn match rInteger "\<\d\+L"
+syn match rInteger "\<0x\([0-9]\|[a-f]\|[A-F]\)\+L"
+syn match rInteger "\<\d\+[Ee]+\=\d\+L"
+
+" number with no fractional part or exponent
+syn match rNumber "\<\d\+\>"
+" hexadecimal number 
+syn match rNumber "\<0x\([0-9]\|[a-f]\|[A-F]\)\+"
+
+" floating point number with integer and fractional parts and optional exponent
+syn match rFloat "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\="
+" floating point number with no integer part and optional exponent
+syn match rFloat "\<\.\d\+\([Ee][-+]\=\d\+\)\="
+" floating point number with no fractional part and optional exponent
+syn match rFloat "\<\d\+[Ee][-+]\=\d\+"
+
+" complex number
+syn match rComplex "\<\d\+i"
+syn match rComplex "\<\d\++\d\+i"
+syn match rComplex "\<0x\([0-9]\|[a-f]\|[A-F]\)\+i"
+syn match rComplex "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=i"
+syn match rComplex "\<\.\d\+\([Ee][-+]\=\d\+\)\=i"
+syn match rComplex "\<\d\+[Ee][-+]\=\d\+i"
+
+syn match rOperator    "&"
+syn match rOperator    '-'
+syn match rOperator    '\*'
+syn match rOperator    '+'
+syn match rOperator    '='
+if &filetype != "rmd" && &filetype != "rrst"
+  syn match rOperator    "[|!<>^~/:]"
+else
+  syn match rOperator    "[|!<>^~`/:]"
+endif
+syn match rOperator    "%\{2}\|%\S*%"
+syn match rOpError  '\*\{3}'
+syn match rOpError  '//'
+syn match rOpError  '&&&'
+syn match rOpError  '|||'
+syn match rOpError  '<<'
+syn match rOpError  '>>'
+
+syn match rArrow "<\{1,2}-"
+syn match rArrow "->\{1,2}"
 
 " Special
-syn match rDelimiter /[,;:]/
+syn match rDelimiter "[,;:]"
 
 " Error
-syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError
-syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError
-syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError
-syn match rError      /[)\]}]/
-syn match rBraceError /[)}]/ contained
-syn match rCurlyError /[)\]]/ contained
-syn match rParenError /[\]}]/ contained
+if exists("g:r_syntax_folding")
+  syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold
+  syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError fold
+  syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError fold
+else
+  syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError
+  syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError
+  syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError
+endif
 
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_r_syn_inits")
-  if version < 508
-    let did_r_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
-  HiLink rComment     Comment
-  HiLink rConstant    Constant
-  HiLink rString      String
-  HiLink rNumber      Number
-  HiLink rBoolean     Boolean
-  HiLink rFloat       Float
-  HiLink rStatement   Statement
-  HiLink rConditional Conditional
-  HiLink rRepeat      Repeat
-  HiLink rIdentifier  Normal
-  HiLink rArrow              Statement 
-  HiLink rType        Type
-  HiLink rDelimiter   Delimiter
-  HiLink rError       Error
-  HiLink rBraceError  Error
-  HiLink rCurlyError  Error
-  HiLink rParenError  Error
-  delcommand HiLink
+syn match rError      "[)\]}]"
+syn match rBraceError "[)}]" contained
+syn match rCurlyError "[)\]]" contained
+syn match rParenError "[\]}]" contained
+
+" Source list of R functions. The list is produced by the Vim-R-plugin
+" http://www.vim.org/scripts/script.php?script_id=2628
+runtime r-plugin/functions.vim
+
+syn match rDollar display contained "\$"
+syn match rDollar display contained "@"
+
+" List elements will not be highlighted as functions:
+syn match rLstElmt "\$[a-zA-Z0-9\\._]*" contains=rDollar
+syn match rLstElmt "@[a-zA-Z0-9\\._]*" contains=rDollar
+
+" Functions that may add new objects
+syn keyword rPreProc     library require attach detach source
+
+if &filetype == "rhelp"
+    syn match rHelpIdent '\\method'
+    syn match rHelpIdent '\\S4method'
 endif
 
+" Type
+syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame 
+
+" Name of object with spaces
+if &filetype != "rmd" && &filetype != "rrst"
+  syn region rNameWSpace start="`" end="`"
+endif
+
+if &filetype == "rhelp"
+  syn match rhPreProc "^#ifdef.*" 
+  syn match rhPreProc "^#endif.*" 
+  syn match rhSection "\\dontrun\>"
+endif
+
+" Define the default highlighting.
+hi def link rArrow       Statement     
+hi def link rBoolean     Boolean
+hi def link rBraceError  Error
+hi def link rComment     Comment
+hi def link rOComment    Comment
+hi def link rComplex     Number
+hi def link rConditional Conditional
+hi def link rConstant    Constant
+hi def link rCurlyError  Error
+hi def link rDelimiter   Delimiter
+hi def link rDollar      SpecialChar
+hi def link rError       Error
+hi def link rFloat       Float
+hi def link rFunction    Function
+hi def link rHelpIdent   Identifier
+hi def link rhPreProc    PreProc
+hi def link rhSection    PreCondit
+hi def link rInteger     Number
+hi def link rLstElmt    Normal
+hi def link rNameWSpace  Normal
+hi def link rNumber      Number
+hi def link rOperator    Operator
+hi def link rOpError     Error
+hi def link rParenError  Error
+hi def link rPreProc     PreProc
+hi def link rRepeat      Repeat
+hi def link rSpecial     SpecialChar
+hi def link rStatement   Statement
+hi def link rString      String
+hi def link rStrError    Error
+hi def link rType        Type
+hi def link rOKeyword    Title
+
 let b:current_syntax="r"
 
 " vim: ts=8 sw=2
-
index b147560..9fc59be 100644 (file)
@@ -1,8 +1,9 @@
 " Vim syntax file
 " Language:    Ratpoison configuration/commands file ( /etc/ratpoisonrc ~/.ratpoisonrc )
-" Maintainer:  Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/syntax/ratpoison.vim
-" Last Change: 2005 Oct 06
+" Maintainer:  Magnus Woldrich <m@japh.se>
+" URL:         http://github.com/trapd00r/vim-syntax-ratpoison
+" Last Change: 2011 Apr 11
+" Previous Maintainer: Doug Kearns <djkea2@gus.gscit.monash.edu.au>
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -94,6 +95,13 @@ syn keyword ratpoisonSetArg  barpadding      contained nextgroup=ratpoisonNumberArg
 syn keyword ratpoisonSetArg    bgcolor
 syn keyword ratpoisonSetArg    border          contained nextgroup=ratpoisonNumberArg
 syn keyword ratpoisonSetArg    fgcolor
+syn keyword ratpoisonSetArg    fwcolor
+syn keyword ratpoisonSetArg    bwcolor
+syn keyword ratpoisonSetArg    historysize
+syn keyword ratpoisonSetArg    historycompaction
+syn keyword ratpoisonSetArg    historyexpansion
+syn keyword ratpoisonSetArg    topkmap
+syn keyword ratpoisonSetArg    barinpadding
 syn keyword ratpoisonSetArg    font
 syn keyword ratpoisonSetArg    framesels
 syn keyword ratpoisonSetArg    inputwidth      contained nextgroup=ratpoisonNumberArg
index 04a2cce..e45d5fd 100644 (file)
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:     RCS file
-" Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
-" URL:          http://www.hlabs.spb.ru/vim/rcs.vim
-" Revision:     $Id: rcs.vim,v 1.2 2006/03/27 16:41:00 vimboss Exp $
+" Maintainer:   Dmitry Vasiliev <dima at hlabs dot org>
+" URL:          https://github.com/hdima/vim-scripts/blob/master/syntax/rcs.vim
+" Last Change:  2012-02-11
 " Filenames:    *,v
-" Version:      1.11
+" Version:      1.12
 
 " Options:
 "   rcs_folding = 1   For folding strings
index 91094c7..091722e 100644 (file)
@@ -1,11 +1,11 @@
 " Vim syntax file
 " Language:         readline(3) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2009-05-25
+" Latest Revision:  2012-04-25
 "   readline_has_bash - if defined add support for bash specific
 "                       settings/functions
 
-if exists("b:current_syntax")
+if exists('b:current_syntax')
   finish
 endif
 
@@ -14,163 +14,382 @@ set cpo&vim
 
 setlocal iskeyword+=-
 
-syn keyword readlineTodo        contained TODO FIXME XXX NOTE
+syn match   readlineKey         contained
+                              \ '\S'
+                              \ nextgroup=readlineKeyTerminator
 
-syn region  readlineComment     display oneline start='^\s*#' end='$'
-                                \ contains=readlineTodo,@Spell
+syn match   readlineBegin       display '^'
+                              \ nextgroup=readlineComment,
+                              \           readlineConditional,
+                              \           readlineInclude,
+                              \           readlineKeyName,
+                              \           readlineKey,
+                              \           readlineKeySeq,
+                              \           readlineKeyword
+                              \ skipwhite
 
-syn match   readlineString      '^\s*[A-Za-z-]\+:'me=e-1 contains=readlineKeys
-syn region  readlineString      display oneline start=+"+ skip=+\\\\\|\\"+
-                                \ end=+"+ contains=readlineKeysTwo
+syn region  readlineComment     contained display oneline
+                                \ start='#'
+                                \ end='$'
+                                \ contains=readlineTodo,
+                                \          @Spell
+
+syn keyword readlineTodo        contained
+                              \ TODO
+                              \ FIXME
+                              \ XXX
+                              \ NOTE
+
+syn match   readlineConditional contained
+                              \ '$if\>'
+                              \ nextgroup=readlineTest,
+                              \           readlineTestApp
+                              \ skipwhite
+
+syn keyword readlineTest        contained
+                              \ mode
+                              \ nextgroup=readlineTestModeEq
+
+syn match   readlineTestModeEq  contained
+                              \ '='
+                              \ nextgroup=readlineEditingMode
+
+syn keyword readlineTest        contained
+                              \ term
+                              \ nextgroup=readlineTestTermEq
+
+syn match   readlineTestTermEq  contained
+                              \ '='
+                              \ nextgroup=readlineTestTerm
+
+syn match   readlineTestTerm    contained
+                              \ '\S\+'
+
+syn match   readlineTestApp     contained
+                              \ '\S\+'
+
+syn match   readlineConditional contained display
+                              \ '$\%(else\|endif\)\>'
+
+syn match   readlineInclude     contained display
+                              \ '$include\>'
+                              \ nextgroup=readlinePath
+
+syn match   readlinePath        contained display
+                              \ '.\+'
 
 syn case ignore
-syn keyword readlineKeys        contained Control Meta Del Esc Escape LFD
-                                \ Newline Ret Return Rubout Space Spc Tab
+syn match   readlineKeyName     contained display
+                              \ nextgroup=readlineKeySeparator,
+                              \           readlineKeyTerminator
+                              \ '\%(Control\|Del\|Esc\|Escape\|LFD\|Meta\|Newline\|Ret\|Return\|Rubout\|Space\|Spc\|Tab\)'
 syn case match
 
-syn match   readlineKeysTwo     contained display
-                                \ +\\\([CM]-\|[e\\"'abdfnrtv]\|\o\{3}\|x\x\{3}\)+
+syn match   readlineKeySeparator  contained
+                                \ '-'
+                                \ nextgroup=readlineKeyName,
+                                \           readlineKey
+
+syn match   readlineKeyTerminator contained
+                                \ ':'
+                                \ nextgroup=readlineFunction
+                                \ skipwhite
 
-syn match   readlineKeymaps     contained display
-                                \ 'emacs\(-standard\|-meta\|-ctlx\)\='
-syn match   readlineKeymaps     contained display
-                                \ 'vi\(-move\|-command\|-insert\)\='
+syn region  readlineKeySeq     contained display oneline
+                              \ start=+"+
+                              \ skip=+\\\\\|\\"+
+                              \ end=+"+
+                              \ contains=readlineKeyEscape
+                              \ nextgroup=readlineKeyTerminator
 
-syn keyword readlineBellStyles  contained audible visible none
+syn match   readlineKeyEscape   contained display
+                              \ +\\\([CM]-\|[e\\"'abdfnrtv]\|\o\{3}\|x\x\{2}\)+
 
-syn match   readlineNumber      contained display '\<\d\+\>'
+syn keyword readlineKeyword     contained
+                              \ set
+                              \ nextgroup=readlineVariable
+                              \ skipwhite
+
+syn keyword readlineVariable    contained 
+                              \ nextgroup=readlineBellStyle
+                              \ skipwhite
+                              \ bell-style
+
+syn keyword readlineVariable    contained
+                              \ nextgroup=readlineBoolean
+                              \ skipwhite
+                              \ bind-tty-special-chars
+                              \ completion-ignore-case
+                              \ completion-map-case
+                              \ convert-meta
+                              \ disable-completion
+                              \ echo-control-characters
+                              \ enable-keypad
+                              \ enable-meta-key
+                              \ expand-tilde
+                              \ history-preserve-point
+                              \ horizontal-scroll-mode
+                              \ input-meta
+                              \ meta-flag
+                              \ mark-directories
+                              \ mark-modified-lines
+                              \ mark-symlinked-directories
+                              \ match-hidden-files
+                              \ menu-complete-display-prefix
+                              \ output-meta
+                              \ page-completions
+                              \ print-completions-horizontally
+                              \ revert-all-at-newline
+                              \ show-all-if-ambiguous
+                              \ show-all-if-unmodified
+                              \ skip-completed-text
+                              \ visible-stats
+
+syn keyword readlineVariable    contained
+                              \ nextgroup=readlineString
+                              \ skipwhite
+                              \ comment-begin
+                              \ isearch-terminators
+
+syn keyword readlineVariable    contained
+                              \ nextgroup=readlineNumber
+                              \ skipwhite
+                              \ completion-display-width
+                              \ completion-prefix-display-length
+                              \ completion-query-items
+                              \ history-size
+
+syn keyword readlineVariable    contained
+                              \ nextgroup=readlineEditingMode
+                              \ skipwhite
+                              \ editing-mode
+
+syn keyword readlineVariable    contained
+                              \ nextgroup=readlineKeymap
+                              \ skipwhite
+                              \ keymap
+
+syn keyword readlineBellStyle   contained
+                              \ audible
+                              \ visible
+                              \ none
 
 syn case ignore
-syn keyword readlineBoolean     contained on off
+syn keyword readlineBoolean     contained
+                              \ on
+                              \ off
 syn case match
 
-syn keyword readlineIfOps       contained mode term
-
-syn region  readlineConditional display oneline transparent
-                                \ matchgroup=readlineConditional
-                                \ start='^\s*$if' end="$"
-                                \ contains=readlineIfOps,readlineKeymaps
-syn match   readlineConditional display '^\s*$\(else\|endif\)\>'
-
-syn match   readlineInclude     display '^\s*$include\>'
-
-syn region  readlineSet         display oneline transparent
-                                \ matchgroup=readlineKeyword start='^\s*set\>'
-                                \ end="$"me=e-1 contains=readlineNumber,
-                                \ readlineBoolean,readlineKeymaps,
-                                \ readlineBellStyles,readlineSettings
-
-syn keyword readlineSettings    contained bell-style comment-begin
-                                \ completion-ignore-case completion-query-items
-                                \ convert-meta disable-completion editing-mode
-                                \ enable-keypad expand-tilde
-                                \ horizontal-scroll-mode mark-directories
-                                \ keymap mark-modified-lines meta-flag
-                                \ input-meta output-meta
-                                \ print-completions-horizontally
-                                \ show-all-if-ambiguous visible-stats
-                                \ prefer-visible-bell blink-matching-paren
-                                \ match-hidden-files history-preserve-point
-                                \ isearch-terminators
-
-syn region  readlineBinding     display oneline transparent
-                                \ matchgroup=readlineKeyword start=':' end='$'
-                                \ contains=readlineKeys,readlineFunctions
-
-syn keyword readlineFunctions   contained display
-                                \ beginning-of-line end-of-line forward-char
-                                \ backward-char forward-word backward-word
-                                \ clear-screen redraw-current-line
-                                \ accept-line previous-history
-                                \ next-history beginning-of-history
-                                \ end-of-history reverse-search-history
-                                \ forward-search-history
-                                \ non-incremental-reverse-search-history
-                                \ non-incremental-forward-search-history
-                                \ history-search-forward
-                                \ history-search-backward
-                                \ yank-nth-arg yank-last-arg
-                                \ delete-char backward-delete-char
-                                \ forward-backward-delete-char quoted-insert
-                                \ tab-insert self-insert transpose-chars
-                                \ transpose-words upcase-word downcase-word
-                                \ capitalize-word overwrite-mode kill-line
-                                \ backward-kill-line unix-line-discard
-                                \ kill-whole-line kill-word backward-kill-word
-                                \ unix-word-rubout unix-filename-rubout
-                                \ delete-horizontal-space kill-region
-                                \ copy-region-as-kill copy-backward-word
-                                \ copy-forward-word yank yank-pop
-                                \ digit-argument universal-argument complete
-                                \ possible-completions insert-completions
-                                \ menu-complete delete-char-or-list
-                                \ start-kbd-macro end-kbd-macro
-                                \ call-last-kbd-macro re-read-init-file
-                                \ abort do-uppercase-version prefix-meta
-                                \ undo revert-line tilde-expand set-mark
-                                \ exchange-point-and-mark character-search
-                                \ character-search-backward insert-comment
-                                \ dump-functions dump-variables dump-macros
-                                \ emacs-editing-mode vi-editing-mode
-                                \ vi-complete vi-char-search vi-redo
-                                \ vi-search vi-arg-digit vi-append-eol
-                                \ vi-prev-word vi-change-to vi-delete-to
-                                \ vi-end-word vi-fetch-history vi-insert-beg
-                                \ vi-search-again vi-put vi-replace
-                                \ vi-subst vi-yank-to vi-first-print
-                                \ vi-yank-arg vi-goto-mark vi-append-mode
-                                \ vi-insertion-mode prev-history vi-set-mark
-                                \ vi-search-again vi-put vi-change-char
-                                \ vi-subst vi-delete vi-yank-to
-                                \ vi-column vi-change-case vi-overstrike
-                                \ vi-overstrike-delete do-lowercase-version
-                                \ delete-char-or-list tty-status
-                                \ arrow-key-prefix vi-back-to-indent vi-bword
-                                \ vi-bWord vi-eword vi-eWord vi-fword vi-fWord
-                                \ vi-next-word
-                                \ vi-movement-mode
+syn region  readlineString      contained display oneline
+                              \ matchgroup=readlineStringDelimiter
+                              \ start=+"+
+                              \ skip=+\\\\\|\\"+
+                              \ end=+"+
+
+syn match   readlineNumber      contained display
+                              \ '[+-]\d\+\>'
+
+syn keyword readlineEditingMode contained
+                              \ emacs
+                              \ vi
+
+syn match   readlineKeymap      contained display
+                              \ 'emacs\%(-\%(standard\|meta\|ctlx\)\)\=\|vi\%(-\%(move\|command\|insert\)\)\='
+
+syn keyword readlineFunction    contained
+                              \ beginning-of-line
+                              \ end-of-line
+                              \ forward-char
+                              \ backward-char
+                              \ forward-word
+                              \ backward-word
+                              \ clear-screen
+                              \ redraw-current-line
+                              \
+                              \ accept-line
+                              \ previous-history
+                              \ next-history
+                              \ beginning-of-history
+                              \ end-of-history
+                              \ reverse-search-history
+                              \ forward-search-history
+                              \ non-incremental-reverse-search-history
+                              \ non-incremental-forward-search-history
+                              \ history-search-forward
+                              \ history-search-backward
+                              \ yank-nth-arg
+                              \ yank-last-arg
+                              \
+                              \ delete-char
+                              \ backward-delete-char
+                              \ forward-backward-delete-char
+                              \ quoted-insert
+                              \ tab-insert
+                              \ self-insert
+                              \ transpose-chars
+                              \ transpose-words
+                              \ upcase-word
+                              \ downcase-word
+                              \ capitalize-word
+                              \ overwrite-mode
+                              \
+                              \ kill-line
+                              \ backward-kill-line
+                              \ unix-line-discard
+                              \ kill-whole-line
+                              \ kill-word
+                              \ backward-kill-word
+                              \ unix-word-rubout
+                              \ unix-filename-rubout
+                              \ delete-horizontal-space
+                              \ kill-region
+                              \ copy-region-as-kill
+                              \ copy-backward-word
+                              \ copy-forward-word
+                              \ yank
+                              \ yank-pop
+                              \
+                              \ digit-argument
+                              \ universal-argument
+                              \
+                              \ complete
+                              \ possible-completions
+                              \ insert-completions
+                              \ menu-complete
+                              \ menu-complete-backward
+                              \ delete-char-or-list
+                              \
+                              \ start-kbd-macro
+                              \ end-kbd-macro
+                              \ call-last-kbd-macro
+                              \
+                              \ re-read-init-file
+                              \ abort
+                              \ do-uppercase-version
+                              \ prefix-meta
+                              \ undo
+                              \ revert-line
+                              \ tilde-expand
+                              \ set-mark
+                              \ exchange-point-and-mark
+                              \ character-search
+                              \ character-search-backward
+                              \ skip-csi-sequence
+                              \ insert-comment
+                              \ dump-functions
+                              \ dump-variables
+                              \ dump-macros
+                              \ emacs-editing-mode
+                              \ vi-editing-mode
+                              \
+                              \ vi-eof-maybe
+                              \ vi-movement-mode
+                              \ vi-undo
+                              \ vi-match
+                              \ vi-tilde-expand
+                              \ vi-complete
+                              \ vi-char-search
+                              \ vi-redo
+                              \ vi-search
+                              \ vi-arg-digit
+                              \ vi-append-eol
+                              \ vi-prev-word
+                              \ vi-change-to
+                              \ vi-delete-to
+                              \ vi-end-word
+                              \ vi-char-search
+                              \ vi-fetch-history
+                              \ vi-insert-beg
+                              \ vi-search-again
+                              \ vi-put
+                              \ vi-replace
+                              \ vi-subst
+                              \ vi-char-search
+                              \ vi-next-word
+                              \ vi-yank-to
+                              \ vi-first-print
+                              \ vi-yank-arg
+                              \ vi-goto-mark
+                              \ vi-append-mode
+                              \ vi-prev-word
+                              \ vi-change-to
+                              \ vi-delete-to
+                              \ vi-end-word
+                              \ vi-char-search
+                              \ vi-insert-mode
+                              \ vi-set-mark
+                              \ vi-search-again
+                              \ vi-put
+                              \ vi-change-char
+                              \ vi-subst
+                              \ vi-char-search
+                              \ vi-undo
+                              \ vi-next-word
+                              \ vi-delete
+                              \ vi-yank-to
+                              \ vi-column
+                              \ vi-change-case
 
 if exists("readline_has_bash")
-  syn keyword readlineFunctions contained
-                                \ shell-expand-line history-expand-line
-                                \ magic-space alias-expand-line
-                                \ history-and-alias-expand-line
-                                \ insert-last-argument operate-and-get-next
-                                \ forward-backward-delete-char
-                                \ delete-char-or-list complete-filename
-                                \ possible-filename-completions
-                                \ complete-username
-                                \ possible-username-completions
-                                \ complete-variable
-                                \ possible-variable-completions
-                                \ complete-hostname
-                                \ possible-hostname-completions
-                                \ complete-command
-                                \ possible-command-completions
-                                \ dynamic-complete-history
-                                \ complete-into-braces
-                                \ glob-expand-word glob-list-expansions
-                                \ display-shell-version glob-complete-word
-                                \ edit-and-execute-command
+  syn keyword readlineFunction  contained
+                              \ shell-expand-line
+                              \ history-expand-line
+                              \ magic-space
+                              \ alias-expand-line
+                              \ history-and-alias-expand-line
+                              \ insert-last-argument
+                              \ operate-and-get-next
+                              \ forward-backward-delete-char
+                              \ delete-char-or-list
+                              \ complete-filename
+                              \ possible-filename-completions
+                              \ complete-username
+                              \ possible-username-completions
+                              \ complete-variable
+                              \ possible-variable-completions
+                              \ complete-hostname
+                              \ possible-hostname-completions
+                              \ complete-command
+                              \ possible-command-completions
+                              \ dynamic-complete-history
+                              \ complete-into-braces
+                              \ glob-expand-word
+                              \ glob-list-expansions
+                              \ display-shell-version
+                              \ glob-complete-word
+                              \ edit-and-execute-command
 endif
 
-hi def link readlineComment     Comment
-hi def link readlineTodo        Todo
-hi def link readlineString      String
-hi def link readlineKeys        SpecialChar
-hi def link readlineKeysTwo     SpecialChar
-hi def link readlineKeymaps     Constant
-hi def link readlineBellStyles  Constant
-hi def link readlineNumber      Number
-hi def link readlineBoolean     Boolean
-hi def link readlineIfOps       Type
-hi def link readlineConditional Conditional
-hi def link readlineInclude     Include
-hi def link readlineKeyword     Keyword
-hi def link readlineSettings    Type
-hi def link readlineFunctions   Type
-
-let b:current_syntax = "readline"
+hi def link readlineKey           readlineKeySeq
+hi def link readlineComment       Comment
+hi def link readlineTodo          Todo
+hi def link readlineConditional   Conditional
+hi def link readlineTest          Type
+hi def link readlineDelimiter     Delimiter
+hi def link readlineTestModeEq    readlineEq
+hi def link readlineTestTermEq    readlineEq
+hi def link readlineTestTerm      readlineString
+hi def link readlineTestAppEq     readlineEq
+hi def link readlineTestApp       readlineString
+hi def link readlineInclude       Include
+hi def link readlinePath          String
+hi def link readlineKeyName       SpecialChar
+hi def link readlineKeySeparator  readlineKeySeq
+hi def link readlineKeyTerminator readlineDelimiter
+hi def link readlineKeySeq        String
+hi def link readlineKeyEscape     SpecialChar
+hi def link readlineKeyword       Keyword
+hi def link readlineVariable      Identifier
+hi def link readlineBellStyle     Constant
+hi def link readlineBoolean       Boolean
+hi def link readlineString        String
+hi def link readlineStringDelimiter readlineString
+hi def link readlineNumber        Number
+hi def link readlineEditingMode   Constant
+hi def link readlineKeymap        Constant
+hi def link readlineFunction      Function
+
+let b:current_syntax = 'readline'
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff --git a/runtime/syntax/redif.vim b/runtime/syntax/redif.vim
new file mode 100644 (file)
index 0000000..1b83c07
--- /dev/null
@@ -0,0 +1,972 @@
+" Vim syntax file
+" Language:          ReDIF
+" Maintainer:        Axel Castellane <axel.castellane@polytechnique.edu>
+" Last Change:       2013 April 17
+" Original Author:   Axel Castellane
+" Source:            http://openlib.org/acmes/root/docu/redif_1.html
+" File Extension:    rdf
+" Note:              The ReDIF format is used by RePEc.
+
+" To be compatible with Vim 5.8 use:
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+" ReDIF is case-insensitive
+syntax case ignore
+
+" Structure: Some fields determine what fields can come next. For example:
+"       Template-Type
+"       *-Name
+"       File-URL
+"       *-Institution
+" Those fields span a syntax region over several lines so that these regions
+" can only contain their respective items.
+
+" Any line which is not a correct template or part of an argument is an error.
+" This comes at the very beginning, so it has the lowest priority and will
+" only match if nothing else did.
+syntax match redifWrongLine /^.\+/ display
+
+highlight def link redifWrongLine redifError
+
+" Comments must start with # and it must be the first character of the line,
+" otherwise I believe that they are considered as part of an argument.
+syntax match redifComment /^#.*/ containedin=ALL display
+
+" Defines the 9 possible multi-lines regions of Template-Type and the fields
+" they can contain.
+syntax region redifRegionTemplatePaper start=/^Template-Type:\_s*ReDIF-Paper \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsPaper,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
+syntax region redifRegionTemplateArticle start=/^Template-Type:\_s*ReDIF-Article \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsArticle,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
+syntax region redifRegionTemplateChapter start=/^Template-Type:\_s*ReDIF-Chapter \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsChapter,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
+syntax region redifRegionTemplateBook start=/^Template-Type:\_s*ReDIF-Book \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsBook,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
+syntax region redifRegionTemplateSoftware start=/^Template-Type:\_s*ReDIF-Software \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsSoftware,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
+syntax region redifRegionTemplateArchive start=/^Template-Type:\_s*ReDIF-Archive \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsArchive,redifWrongLine fold
+syntax region redifRegionTemplateSeries start=/^Template-Type:\_s*ReDIF-Series \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsSeries,redifWrongLine,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
+syntax region redifRegionTemplateInstitution start=/^Template-Type:\_s*ReDIF-Institution \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsInstitution,redifWrongLine,redifRegionClusterPrimary,redifRegionClusterSecondary,redifRegionClusterTertiary,redifRegionClusterQuaternary fold
+syntax region redifRegionTemplatePerson start=/^Template-Type:\_s*ReDIF-Person \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsPerson,redifWrongLine,redifRegionClusterWorkplace fold
+
+" All fields are foldable (These come before clusters, so they have lower
+" priority). So they are contained in a foldable syntax region.
+syntax region redifContainerFieldsPaper start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldLanguage,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNumber,redifFieldCreationDate,redifFieldRevisionDate,redifFieldPublicationStatus,redifFieldNote,redifFieldLength,redifFieldSeries,redifFieldAvailability,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldRestriction,redifFieldPrice,redifFieldNotification,redifFieldPublicationType,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsArticle start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldLanguage,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNumber,redifFieldCreationDate,redifFieldPublicationStatus,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldRestriction,redifFieldPrice,redifFieldNotification,redifFieldPublicationType,redifFieldJournal,redifFieldVolume,redifFieldYear,redifFieldIssue,redifFieldMonth,redifFieldPages,redifFieldNumber,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsChapter start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfWork,redifFieldTitle,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldBookTitle,redifFieldYear,redifFieldMonth,redifFieldPages,redifFieldChapter,redifFieldVolume,redifFieldEdition,redifFieldSeries,redifFieldISBN,redifFieldPublicationStatus,redifFieldNote,redifFieldInBook,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsBook start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldContactEmail,redifFieldYear,redifFieldMonth,redifFieldVolume,redifFieldEdition,redifFieldSeries,redifFieldISBN,redifFieldPublicationStatus,redifFieldNote,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldHasChapter,redifFieldPrice,redifFieldOrderURL,redifFieldNumber,redifFieldCreationDate,redifFieldPublicationDate,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsSoftware start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfWork,redifFieldTitle,redifFieldProgrammingLanguage,redifFieldAbstract,redifFieldNumber,redifFieldVersion,redifFieldClassificationJEL,redifFieldKeywords,redifFieldSize,redifFieldSeries,redifFieldCreationDate,redifFieldRevisionDate,redifFieldNote,redifFieldRequires,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsArchive start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfArchive,redifFieldURL,redifFieldMaintainerEmail,redifFieldName,redifFieldMaintainerName,redifFieldMaintainerPhone,redifFieldMaintainerFax,redifFieldClassificationJEL,redifFieldHomepage,redifFieldDescription,redifFieldNotification,redifFieldRestriction,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsSeries start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldName,redifFieldHandleOfSeries,redifFieldMaintainerEmail,redifFieldType,redifFieldOrderEmail,redifFieldOrderHomepage,redifFieldOrderPostal,redifFieldPrice,redifFieldRestriction,redifFieldMaintainerPhone,redifFieldMaintainerFax,redifFieldMaintainerName,redifFieldDescription,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNotification,redifFieldISSN,redifFieldFollowup,redifFieldPredecessor,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsInstitution start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfInstitution,redifFieldPrimaryDefunct,redifFieldSecondaryDefunct,redifFieldTertiaryDefunct,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsPerson start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfPerson,redifFieldNameFull,redifFieldNameFirst,redifFieldNameLast,redifFieldNamePrefix,redifFieldNameMiddle,redifFieldNameSuffix,redifFieldNameASCII,redifFieldEmail,redifFieldHomepage,redifFieldFax,redifFieldPostal,redifFieldPhone,redifFieldWorkplaceOrganization,redifFieldAuthorPaper,redifFieldAuthorArticle,redifFieldAuthorSoftware,redifFieldAuthorBook,redifFieldAuthorChapter,redifFieldEditorBook,redifFieldEditorSeries,redifFieldClassificationJEL,redifFieldShortId,redifFieldLastLoginDate,redifFieldRegisteredDate,redifWrongLine contained transparent fold
+
+" Defines the 10 possible clusters and what they can contain
+" A field not in the cluster ends the cluster.
+syntax region redifRegionClusterWorkplace start=/^Workplace-Name:/ skip=/^Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsWorkplace fold
+syntax region redifRegionClusterPrimary start=/^Primary-Name:/ skip=/^Primary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsPrimary fold
+syntax region redifRegionClusterSecondary start=/^Secondary-Name:/ skip=/^Secondary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsSecondary fold
+syntax region redifRegionClusterTertiary start=/^Tertiary-Name:/ skip=/^Tertiary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsTertiary fold
+syntax region redifRegionClusterQuaternary start=/^Quaternary-Name:/ skip=/^Quaternary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsQuaternary fold
+syntax region redifRegionClusterProvider start=/^Provider-Name:/ skip=/^Provider-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsProvider fold
+syntax region redifRegionClusterPublisher start=/^Publisher-Name:/ skip=/^Publisher-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsPublisher fold
+syntax region redifRegionClusterAuthor start=/^Author-Name:/ skip=/^Author-\%(Name\%(-First\|-Last\)\|Homepage\|Email\|Fax\|Postal\|Phone\|Person\|Workplace-Name\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifRegionClusterAuthorWorkplace,redifContainerFieldsAuthor fold
+syntax region redifRegionClusterEditor start=/^Editor-Name:/ skip=/^Editor-\%(Name\%(-First\|-Last\)\|Homepage\|Email\|Fax\|Postal\|Phone\|Person\|Workplace-Name\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifRegionClusterEditorWorkplace,redifContainerFieldsEditor fold
+syntax region redifRegionClusterFile start=/^File-URL:/ skip=/^File-\%(Format\|Function\|Size\|Restriction\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsFile fold
+
+" The foldable containers of the clusters.
+syntax region redifContainerFieldsWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldWorkplaceName,redifFieldWorkplaceHomepage,redifFieldWorkplaceNameEnglish,redifFieldWorkplacePostal,redifFieldWorkplaceLocation,redifFieldWorkplaceEmail,redifFieldWorkplacePhone,redifFieldWorkplaceFax,redifFieldWorkplaceInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsPrimary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldPrimaryName,redifFieldPrimaryHomepage,redifFieldPrimaryNameEnglish,redifFieldPrimaryPostal,redifFieldPrimaryLocation,redifFieldPrimaryEmail,redifFieldPrimaryPhone,redifFieldPrimaryFax,redifFieldPrimaryInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsSecondary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldSecondaryName,redifFieldSecondaryHomepage,redifFieldSecondaryNameEnglish,redifFieldSecondaryPostal,redifFieldSecondaryLocation,redifFieldSecondaryEmail,redifFieldSecondaryPhone,redifFieldSecondaryFax,redifFieldSecondaryInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsTertiary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTertiaryName,redifFieldTertiaryHomepage,redifFieldTertiaryNameEnglish,redifFieldTertiaryPostal,redifFieldTertiaryLocation,redifFieldTertiaryEmail,redifFieldTertiaryPhone,redifFieldTertiaryFax,redifFieldTertiaryInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsQuaternary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldQuaternaryName,redifFieldQuaternaryHomepage,redifFieldQuaternaryNameEnglish,redifFieldQuaternaryPostal,redifFieldQuaternaryLocation,redifFieldQuaternaryEmail,redifFieldQuaternaryPhone,redifFieldQuaternaryFax,redifFieldQuaternaryInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsProvider start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldProviderName,redifFieldProviderHomepage,redifFieldProviderNameEnglish,redifFieldProviderPostal,redifFieldProviderLocation,redifFieldProviderEmail,redifFieldProviderPhone,redifFieldProviderFax,redifFieldProviderInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsPublisher start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldPublisherName,redifFieldPublisherHomepage,redifFieldPublisherNameEnglish,redifFieldPublisherPostal,redifFieldPublisherLocation,redifFieldPublisherEmail,redifFieldPublisherPhone,redifFieldPublisherFax,redifFieldPublisherInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsAuthor start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldAuthorName,redifFieldAuthorNameFirst,redifFieldAuthorNameLast,redifFieldAuthorHomepage,redifFieldAuthorEmail,redifFieldAuthorFax,redifFieldAuthorPostal,redifFieldAuthorPhone,redifFieldAuthorPerson,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsEditor start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldEditorName,redifFieldEditorNameFirst,redifFieldEditorNameLast,redifFieldEditorHomepage,redifFieldEditorEmail,redifFieldEditorFax,redifFieldEditorPostal,redifFieldEditorPhone,redifFieldEditorPerson,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsFile start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldFileURL,redifFieldFileFormat,redifFieldFileFunction,redifFieldFileSize,redifFieldFileRestriction,redifWrongLine contained transparent fold
+
+" The two clusters in cluster (must be presented after to have priority over
+" fields containers)
+syntax region redifRegionClusterAuthorWorkplace start=/^Author-Workplace-Name:/ skip=/^Author-Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsAuthorWorkplace fold
+syntax region redifRegionClusterEditorWorkplace start=/^Editor-Workplace-Name:/ skip=/^Editor-Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsEditorWorkplace fold
+
+" Their foldable fields containers
+syntax region redifContainerFieldsAuthorWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldAuthorWorkplaceName,redifFieldAuthorWorkplaceHomepage,redifFieldAuthorWorkplaceNameEnglish,redifFieldAuthorWorkplacePostal,redifFieldAuthorWorkplaceLocation,redifFieldAuthorWorkplaceEmail,redifFieldAuthorWorkplacePhone,redifFieldAuthorWorkplaceFax,redifFieldAuthorWorkplaceInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsEditorWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldEditorWorkplaceName,redifFieldEditorWorkplaceHomepage,redifFieldEditorWorkplaceNameEnglish,redifFieldEditorWorkplacePostal,redifFieldEditorWorkplaceLocation,redifFieldEditorWorkplaceEmail,redifFieldEditorWorkplacePhone,redifFieldEditorWorkplaceFax,redifFieldEditorWorkplaceInstitution,redifWrongLine contained transparent fold
+
+" All the possible fields
+"     Note: The "Handle" field is handled a little bit differently, because it
+"     does not have the same meaning depending on the Template-Type. See:
+"        /redifFieldHandleOf....
+syntax match redifFieldAbstract /^Abstract:/ skipwhite skipempty nextgroup=redifArgumentAbstract contained
+syntax match redifFieldArticleHandle /^Article-Handle:/ skipwhite skipempty nextgroup=redifArgumentArticleHandle contained
+syntax match redifFieldAuthorArticle /^Author-Article:/ skipwhite skipempty nextgroup=redifArgumentAuthorArticle contained
+syntax match redifFieldAuthorBook /^Author-Book:/ skipwhite skipempty nextgroup=redifArgumentAuthorBook contained
+syntax match redifFieldAuthorChapter /^Author-Chapter:/ skipwhite skipempty nextgroup=redifArgumentAuthorChapter contained
+syntax match redifFieldAuthorEmail /^Author-Email:/ skipwhite skipempty nextgroup=redifArgumentAuthorEmail contained
+syntax match redifFieldAuthorFax /^Author-Fax:/ skipwhite skipempty nextgroup=redifArgumentAuthorFax contained
+syntax match redifFieldAuthorHomepage /^Author-Homepage:/ skipwhite skipempty nextgroup=redifArgumentAuthorHomepage contained
+syntax match redifFieldAuthorName /^Author-Name:/ skipwhite skipempty nextgroup=redifArgumentAuthorName contained
+syntax match redifFieldAuthorNameFirst /^Author-Name-First:/ skipwhite skipempty nextgroup=redifArgumentAuthorNameFirst contained
+syntax match redifFieldAuthorNameLast /^Author-Name-Last:/ skipwhite skipempty nextgroup=redifArgumentAuthorNameLast contained
+syntax match redifFieldAuthorPaper /^Author-Paper:/ skipwhite skipempty nextgroup=redifArgumentAuthorPaper contained
+syntax match redifFieldAuthorPerson /^Author-Person:/ skipwhite skipempty nextgroup=redifArgumentAuthorPerson contained
+syntax match redifFieldAuthorPhone /^Author-Phone:/ skipwhite skipempty nextgroup=redifArgumentAuthorPhone contained
+syntax match redifFieldAuthorPostal /^Author-Postal:/ skipwhite skipempty nextgroup=redifArgumentAuthorPostal contained
+syntax match redifFieldAuthorSoftware /^Author-Software:/ skipwhite skipempty nextgroup=redifArgumentAuthorSoftware contained
+syntax match redifFieldAuthorWorkplaceEmail /^Author-Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceEmail contained
+syntax match redifFieldAuthorWorkplaceFax /^Author-Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceFax contained
+syntax match redifFieldAuthorWorkplaceHomepage /^Author-Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceHomepage contained
+syntax match redifFieldAuthorWorkplaceInstitution /^Author-Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceInstitution contained
+syntax match redifFieldAuthorWorkplaceLocation /^Author-Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceLocation contained
+syntax match redifFieldAuthorWorkplaceName /^Author-Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceName contained
+syntax match redifFieldAuthorWorkplaceNameEnglish /^Author-Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceNameEnglish contained
+syntax match redifFieldAuthorWorkplacePhone /^Author-Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplacePhone contained
+syntax match redifFieldAuthorWorkplacePostal /^Author-Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplacePostal contained
+syntax match redifFieldAvailability /^Availability:/ skipwhite skipempty nextgroup=redifArgumentAvailability contained
+syntax match redifFieldBookHandle /^Book-Handle:/ skipwhite skipempty nextgroup=redifArgumentBookHandle contained
+syntax match redifFieldBookTitle /^Book-Title:/ skipwhite skipempty nextgroup=redifArgumentBookTitle contained
+syntax match redifFieldChapterHandle /^Chapter-Handle:/ skipwhite skipempty nextgroup=redifArgumentChapterHandle contained
+syntax match redifFieldChapter /^Chapter:/ skipwhite skipempty nextgroup=redifArgumentChapter contained
+syntax match redifFieldClassificationJEL /^Classification-JEL:/ skipwhite skipempty nextgroup=redifArgumentClassificationJEL contained
+syntax match redifFieldContactEmail /^Contact-Email:/ skipwhite skipempty nextgroup=redifArgumentContactEmail contained
+syntax match redifFieldCreationDate /^Creation-Date:/ skipwhite skipempty nextgroup=redifArgumentCreationDate contained
+syntax match redifFieldDescription /^Description:/ skipwhite skipempty nextgroup=redifArgumentDescription contained
+syntax match redifFieldEdition /^Edition:/ skipwhite skipempty nextgroup=redifArgumentEdition contained
+syntax match redifFieldEditorBook /^Editor-Book:/ skipwhite skipempty nextgroup=redifArgumentEditorBook contained
+syntax match redifFieldEditorEmail /^Editor-Email:/ skipwhite skipempty nextgroup=redifArgumentEditorEmail contained
+syntax match redifFieldEditorFax /^Editor-Fax:/ skipwhite skipempty nextgroup=redifArgumentEditorFax contained
+syntax match redifFieldEditorHomepage /^Editor-Homepage:/ skipwhite skipempty nextgroup=redifArgumentEditorHomepage contained
+syntax match redifFieldEditorName /^Editor-Name:/ skipwhite skipempty nextgroup=redifArgumentEditorName contained
+syntax match redifFieldEditorNameFirst /^Editor-Name-First:/ skipwhite skipempty nextgroup=redifArgumentEditorNameFirst contained
+syntax match redifFieldEditorNameLast /^Editor-Name-Last:/ skipwhite skipempty nextgroup=redifArgumentEditorNameLast contained
+syntax match redifFieldEditorPerson /^Editor-Person:/ skipwhite skipempty nextgroup=redifArgumentEditorPerson contained
+syntax match redifFieldEditorPhone /^Editor-Phone:/ skipwhite skipempty nextgroup=redifArgumentEditorPhone contained
+syntax match redifFieldEditorPostal /^Editor-Postal:/ skipwhite skipempty nextgroup=redifArgumentEditorPostal contained
+syntax match redifFieldEditorSeries /^Editor-Series:/ skipwhite skipempty nextgroup=redifArgumentEditorSeries contained
+syntax match redifFieldEditorWorkplaceEmail /^Editor-Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceEmail contained
+syntax match redifFieldEditorWorkplaceFax /^Editor-Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceFax contained
+syntax match redifFieldEditorWorkplaceHomepage /^Editor-Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceHomepage contained
+syntax match redifFieldEditorWorkplaceInstitution /^Editor-Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceInstitution contained
+syntax match redifFieldEditorWorkplaceLocation /^Editor-Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceLocation contained
+syntax match redifFieldEditorWorkplaceName /^Editor-Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceName contained
+syntax match redifFieldEditorWorkplaceNameEnglish /^Editor-Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceNameEnglish contained
+syntax match redifFieldEditorWorkplacePhone /^Editor-Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplacePhone contained
+syntax match redifFieldEditorWorkplacePostal /^Editor-Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplacePostal contained
+syntax match redifFieldEmail /^Email:/ skipwhite skipempty nextgroup=redifArgumentEmail contained
+syntax match redifFieldFax /^Fax:/ skipwhite skipempty nextgroup=redifArgumentFax contained
+syntax match redifFieldFileFormat /^File-Format:/ skipwhite skipempty nextgroup=redifArgumentFileFormat contained
+syntax match redifFieldFileFunction /^File-Function:/ skipwhite skipempty nextgroup=redifArgumentFileFunction contained
+syntax match redifFieldFileRestriction /^File-Restriction:/ skipwhite skipempty nextgroup=redifArgumentFileRestriction contained
+syntax match redifFieldFileSize /^File-Size:/ skipwhite skipempty nextgroup=redifArgumentFileSize contained
+syntax match redifFieldFileURL /^File-URL:/ skipwhite skipempty nextgroup=redifArgumentFileURL contained
+syntax match redifFieldFollowup /^Followup:/ skipwhite skipempty nextgroup=redifArgumentFollowup contained
+syntax match redifFieldHandleOfArchive /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfArchive contained
+syntax match redifFieldHandleOfInstitution /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfInstitution contained
+syntax match redifFieldHandleOfPerson /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfPerson contained
+syntax match redifFieldHandleOfSeries /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfSeries contained
+syntax match redifFieldHandleOfWork /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfWork contained
+syntax match redifFieldHasChapter /^HasChapter:/ skipwhite skipempty nextgroup=redifArgumentHasChapter contained
+syntax match redifFieldHomepage /^Homepage:/ skipwhite skipempty nextgroup=redifArgumentHomepage contained
+syntax match redifFieldInBook /^In-Book:/ skipwhite skipempty nextgroup=redifArgumentInBook contained
+syntax match redifFieldISBN /^ISBN:/ skipwhite skipempty nextgroup=redifArgumentISBN contained
+syntax match redifFieldISSN /^ISSN:/ skipwhite skipempty nextgroup=redifArgumentISSN contained
+syntax match redifFieldIssue /^Issue:/ skipwhite skipempty nextgroup=redifArgumentIssue contained
+syntax match redifFieldJournal /^Journal:/ skipwhite skipempty nextgroup=redifArgumentJournal contained
+syntax match redifFieldKeywords /^Keywords:/ skipwhite skipempty nextgroup=redifArgumentKeywords contained
+syntax match redifFieldKeywords /^Keywords:/ skipwhite skipempty nextgroup=redifArgumentKeywords contained
+syntax match redifFieldLanguage /^Language:/ skipwhite skipempty nextgroup=redifArgumentLanguage contained
+syntax match redifFieldLastLoginDate /^Last-Login-Date:/ skipwhite skipempty nextgroup=redifArgumentLastLoginDate contained
+syntax match redifFieldLength /^Length:/ skipwhite skipempty nextgroup=redifArgumentLength contained
+syntax match redifFieldMaintainerEmail /^Maintainer-Email:/ skipwhite skipempty nextgroup=redifArgumentMaintainerEmail contained
+syntax match redifFieldMaintainerFax /^Maintainer-Fax:/ skipwhite skipempty nextgroup=redifArgumentMaintainerFax contained
+syntax match redifFieldMaintainerName /^Maintainer-Name:/ skipwhite skipempty nextgroup=redifArgumentMaintainerName contained
+syntax match redifFieldMaintainerPhone /^Maintainer-Phone:/ skipwhite skipempty nextgroup=redifArgumentMaintainerPhone contained
+syntax match redifFieldMonth /^Month:/ skipwhite skipempty nextgroup=redifArgumentMonth contained
+syntax match redifFieldNameASCII /^Name-ASCII:/ skipwhite skipempty nextgroup=redifArgumentNameASCII contained
+syntax match redifFieldNameFirst /^Name-First:/ skipwhite skipempty nextgroup=redifArgumentNameFirst contained
+syntax match redifFieldNameFull /^Name-Full:/ skipwhite skipempty nextgroup=redifArgumentNameFull contained
+syntax match redifFieldNameLast /^Name-Last:/ skipwhite skipempty nextgroup=redifArgumentNameLast contained
+syntax match redifFieldNameMiddle /^Name-Middle:/ skipwhite skipempty nextgroup=redifArgumentNameMiddle contained
+syntax match redifFieldNamePrefix /^Name-Prefix:/ skipwhite skipempty nextgroup=redifArgumentNamePrefix contained
+syntax match redifFieldNameSuffix /^Name-Suffix:/ skipwhite skipempty nextgroup=redifArgumentNameSuffix contained
+syntax match redifFieldName /^Name:/ skipwhite skipempty nextgroup=redifArgumentName contained
+syntax match redifFieldNote /^Note:/ skipwhite skipempty nextgroup=redifArgumentNote contained
+syntax match redifFieldNotification /^Notification:/ skipwhite skipempty nextgroup=redifArgumentNotification contained
+syntax match redifFieldNumber /^Number:/ skipwhite skipempty nextgroup=redifArgumentNumber contained
+syntax match redifFieldOrderEmail /^Order-Email:/ skipwhite skipempty nextgroup=redifArgumentOrderEmail contained
+syntax match redifFieldOrderHomepage /^Order-Homepage:/ skipwhite skipempty nextgroup=redifArgumentOrderHomepage contained
+syntax match redifFieldOrderPostal /^Order-Postal:/ skipwhite skipempty nextgroup=redifArgumentOrderPostal contained
+syntax match redifFieldOrderURL /^Order-URL:/ skipwhite skipempty nextgroup=redifArgumentOrderURL contained
+syntax match redifFieldPages /^Pages:/ skipwhite skipempty nextgroup=redifArgumentPages contained
+syntax match redifFieldPaperHandle /^Paper-Handle:/ skipwhite skipempty nextgroup=redifArgumentPaperHandle contained
+syntax match redifFieldPhone /^Phone:/ skipwhite skipempty nextgroup=redifArgumentPhone contained
+syntax match redifFieldPostal /^Postal:/ skipwhite skipempty nextgroup=redifArgumentPostal contained
+syntax match redifFieldPredecessor /^Predecessor:/ skipwhite skipempty nextgroup=redifArgumentPredecessor contained
+syntax match redifFieldPrice /^Price:/ skipwhite skipempty nextgroup=redifArgumentPrice contained
+syntax match redifFieldPrimaryDefunct /^Primary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentPrimaryDefunct contained
+syntax match redifFieldPrimaryEmail /^Primary-Email:/ skipwhite skipempty nextgroup=redifArgumentPrimaryEmail contained
+syntax match redifFieldPrimaryFax /^Primary-Fax:/ skipwhite skipempty nextgroup=redifArgumentPrimaryFax contained
+syntax match redifFieldPrimaryHomepage /^Primary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentPrimaryHomepage contained
+syntax match redifFieldPrimaryInstitution /^Primary-Institution:/ skipwhite skipempty nextgroup=redifArgumentPrimaryInstitution contained
+syntax match redifFieldPrimaryLocation /^Primary-Location:/ skipwhite skipempty nextgroup=redifArgumentPrimaryLocation contained
+syntax match redifFieldPrimaryName /^Primary-Name:/ skipwhite skipempty nextgroup=redifArgumentPrimaryName contained
+syntax match redifFieldPrimaryNameEnglish /^Primary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentPrimaryNameEnglish contained
+syntax match redifFieldPrimaryPhone /^Primary-Phone:/ skipwhite skipempty nextgroup=redifArgumentPrimaryPhone contained
+syntax match redifFieldPrimaryPostal /^Primary-Postal:/ skipwhite skipempty nextgroup=redifArgumentPrimaryPostal contained
+syntax match redifFieldProgrammingLanguage /^Programming-Language:/ skipwhite skipempty nextgroup=redifArgumentProgrammingLanguage contained
+syntax match redifFieldProviderEmail /^Provider-Email:/ skipwhite skipempty nextgroup=redifArgumentProviderEmail contained
+syntax match redifFieldProviderFax /^Provider-Fax:/ skipwhite skipempty nextgroup=redifArgumentProviderFax contained
+syntax match redifFieldProviderHomepage /^Provider-Homepage:/ skipwhite skipempty nextgroup=redifArgumentProviderHomepage contained
+syntax match redifFieldProviderInstitution /^Provider-Institution:/ skipwhite skipempty nextgroup=redifArgumentProviderInstitution contained
+syntax match redifFieldProviderLocation /^Provider-Location:/ skipwhite skipempty nextgroup=redifArgumentProviderLocation contained
+syntax match redifFieldProviderName /^Provider-Name:/ skipwhite skipempty nextgroup=redifArgumentProviderName contained
+syntax match redifFieldProviderNameEnglish /^Provider-Name-English:/ skipwhite skipempty nextgroup=redifArgumentProviderNameEnglish contained
+syntax match redifFieldProviderPhone /^Provider-Phone:/ skipwhite skipempty nextgroup=redifArgumentProviderPhone contained
+syntax match redifFieldProviderPostal /^Provider-Postal:/ skipwhite skipempty nextgroup=redifArgumentProviderPostal contained
+syntax match redifFieldPublicationDate /^Publication-Date:/ skipwhite skipempty nextgroup=redifArgumentPublicationDate contained
+syntax match redifFieldPublicationStatus /^Publication-Status:/ skipwhite skipempty nextgroup=redifArgumentPublicationStatus contained
+syntax match redifFieldPublicationType /^Publication-Type:/ skipwhite skipempty nextgroup=redifArgumentPublicationType contained
+syntax match redifFieldQuaternaryEmail /^Quaternary-Email:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryEmail contained
+syntax match redifFieldQuaternaryFax /^Quaternary-Fax:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryFax contained
+syntax match redifFieldQuaternaryHomepage /^Quaternary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryHomepage contained
+syntax match redifFieldQuaternaryInstitution /^Quaternary-Institution:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryInstitution contained
+syntax match redifFieldQuaternaryLocation /^Quaternary-Location:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryLocation contained
+syntax match redifFieldQuaternaryName /^Quaternary-Name:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryName contained
+syntax match redifFieldQuaternaryNameEnglish /^Quaternary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryNameEnglish contained
+syntax match redifFieldQuaternaryPhone /^Quaternary-Phone:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryPhone contained
+syntax match redifFieldQuaternaryPostal /^Quaternary-Postal:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryPostal contained
+syntax match redifFieldRegisteredDate /^Registered-Date:/ skipwhite skipempty nextgroup=redifArgumentRegisteredDate contained
+syntax match redifFieldRequires /^Requires:/ skipwhite skipempty nextgroup=redifArgumentRequires contained
+syntax match redifFieldRestriction /^Restriction:/ skipwhite skipempty nextgroup=redifArgumentRestriction contained
+syntax match redifFieldRevisionDate /^Revision-Date:/ skipwhite skipempty nextgroup=redifArgumentRevisionDate contained
+syntax match redifFieldSecondaryDefunct /^Secondary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentSecondaryDefunct contained
+syntax match redifFieldSecondaryEmail /^Secondary-Email:/ skipwhite skipempty nextgroup=redifArgumentSecondaryEmail contained
+syntax match redifFieldSecondaryFax /^Secondary-Fax:/ skipwhite skipempty nextgroup=redifArgumentSecondaryFax contained
+syntax match redifFieldSecondaryHomepage /^Secondary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentSecondaryHomepage contained
+syntax match redifFieldSecondaryInstitution /^Secondary-Institution:/ skipwhite skipempty nextgroup=redifArgumentSecondaryInstitution contained
+syntax match redifFieldSecondaryLocation /^Secondary-Location:/ skipwhite skipempty nextgroup=redifArgumentSecondaryLocation contained
+syntax match redifFieldSecondaryName /^Secondary-Name:/ skipwhite skipempty nextgroup=redifArgumentSecondaryName contained
+syntax match redifFieldSecondaryNameEnglish /^Secondary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentSecondaryNameEnglish contained
+syntax match redifFieldSecondaryPhone /^Secondary-Phone:/ skipwhite skipempty nextgroup=redifArgumentSecondaryPhone contained
+syntax match redifFieldSecondaryPostal /^Secondary-Postal:/ skipwhite skipempty nextgroup=redifArgumentSecondaryPostal contained
+syntax match redifFieldSeries /^Series:/ skipwhite skipempty nextgroup=redifArgumentSeries contained
+syntax match redifFieldShortId /^Short-Id:/ skipwhite skipempty nextgroup=redifArgumentShortId contained
+syntax match redifFieldSize /^Size:/ skipwhite skipempty nextgroup=redifArgumentSize contained
+syntax match redifFieldSoftwareHandle /^Software-Handle:/ skipwhite skipempty nextgroup=redifArgumentSoftwareHandle contained
+syntax match redifFieldTemplateType /^Template-Type:/ skipwhite skipempty nextgroup=redifArgumentTemplateType contained
+syntax match redifFieldTertiaryDefunct /^Tertiary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentTertiaryDefunct contained
+syntax match redifFieldTertiaryEmail /^Tertiary-Email:/ skipwhite skipempty nextgroup=redifArgumentTertiaryEmail contained
+syntax match redifFieldTertiaryFax /^Tertiary-Fax:/ skipwhite skipempty nextgroup=redifArgumentTertiaryFax contained
+syntax match redifFieldTertiaryHomepage /^Tertiary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentTertiaryHomepage contained
+syntax match redifFieldTertiaryInstitution /^Tertiary-Institution:/ skipwhite skipempty nextgroup=redifArgumentTertiaryInstitution contained
+syntax match redifFieldTertiaryLocation /^Tertiary-Location:/ skipwhite skipempty nextgroup=redifArgumentTertiaryLocation contained
+syntax match redifFieldTertiaryName /^Tertiary-Name:/ skipwhite skipempty nextgroup=redifArgumentTertiaryName contained
+syntax match redifFieldTertiaryNameEnglish /^Tertiary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentTertiaryNameEnglish contained
+syntax match redifFieldTertiaryPhone /^Tertiary-Phone:/ skipwhite skipempty nextgroup=redifArgumentTertiaryPhone contained
+syntax match redifFieldTertiaryPostal /^Tertiary-Postal:/ skipwhite skipempty nextgroup=redifArgumentTertiaryPostal contained
+syntax match redifFieldTitle /^Title:/ skipwhite skipempty nextgroup=redifArgumentTitle contained
+syntax match redifFieldType /^Type:/ skipwhite skipempty nextgroup=redifArgumentType contained
+syntax match redifFieldURL /^URL:/ skipwhite skipempty nextgroup=redifArgumentURL contained
+syntax match redifFieldVersion /^Version:/ skipwhite skipempty nextgroup=redifArgumentVersion contained
+syntax match redifFieldVolume /^Volume:/ skipwhite skipempty nextgroup=redifArgumentVolume contained
+syntax match redifFieldWorkplaceEmail /^Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceEmail contained
+syntax match redifFieldWorkplaceFax /^Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceFax contained
+syntax match redifFieldWorkplaceHomepage /^Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceHomepage contained
+syntax match redifFieldWorkplaceInstitution /^Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceInstitution contained
+syntax match redifFieldWorkplaceLocation /^Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceLocation contained
+syntax match redifFieldWorkplaceName /^Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceName contained
+syntax match redifFieldWorkplaceNameEnglish /^Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceNameEnglish contained
+syntax match redifFieldWorkplaceOrganization /^Workplace-Organization:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceOrganization contained
+syntax match redifFieldWorkplacePhone /^Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentWorkplacePhone contained
+syntax match redifFieldWorkplacePostal /^Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentWorkplacePostal contained
+syntax match redifFieldYear /^Year:/ skipwhite skipempty nextgroup=redifArgumentYear contained
+
+highlight def link redifFieldAbstract redifField
+highlight def link redifFieldArticleHandle redifField
+highlight def link redifFieldAuthorArticle redifField
+highlight def link redifFieldAuthorBook redifField
+highlight def link redifFieldAuthorChapter redifField
+highlight def link redifFieldAuthorEmail redifField
+highlight def link redifFieldAuthorFax redifField
+highlight def link redifFieldAuthorHomepage redifField
+highlight def link redifFieldAuthorName redifField
+highlight def link redifFieldAuthorNameFirst redifField
+highlight def link redifFieldAuthorNameLast redifField
+highlight def link redifFieldAuthorPaper redifField
+highlight def link redifFieldAuthorPerson redifField
+highlight def link redifFieldAuthorPhone redifField
+highlight def link redifFieldAuthorPostal redifField
+highlight def link redifFieldAuthorSoftware redifField
+highlight def link redifFieldAuthorWorkplaceEmail redifField
+highlight def link redifFieldAuthorWorkplaceFax redifField
+highlight def link redifFieldAuthorWorkplaceHomepage redifField
+highlight def link redifFieldAuthorWorkplaceInstitution redifField
+highlight def link redifFieldAuthorWorkplaceLocation redifField
+highlight def link redifFieldAuthorWorkplaceName redifField
+highlight def link redifFieldAuthorWorkplaceNameEnglish redifField
+highlight def link redifFieldAuthorWorkplacePhone redifField
+highlight def link redifFieldAuthorWorkplacePostal redifField
+highlight def link redifFieldAvailability redifField
+highlight def link redifFieldBookHandle redifField
+highlight def link redifFieldBookTitle redifField
+highlight def link redifFieldChapterHandle redifField
+highlight def link redifFieldChapter redifField
+highlight def link redifFieldClassificationJEL redifField
+highlight def link redifFieldContactEmail redifField
+highlight def link redifFieldCreationDate redifField
+highlight def link redifFieldDescription redifField
+highlight def link redifFieldEdition redifField
+highlight def link redifFieldEditorBook redifField
+highlight def link redifFieldEditorEmail redifField
+highlight def link redifFieldEditorFax redifField
+highlight def link redifFieldEditorHomepage redifField
+highlight def link redifFieldEditorName redifField
+highlight def link redifFieldEditorNameFirst redifField
+highlight def link redifFieldEditorNameLast redifField
+highlight def link redifFieldEditorPerson redifField
+highlight def link redifFieldEditorPhone redifField
+highlight def link redifFieldEditorPostal redifField
+highlight def link redifFieldEditorSeries redifField
+highlight def link redifFieldEditorWorkplaceEmail redifField
+highlight def link redifFieldEditorWorkplaceFax redifField
+highlight def link redifFieldEditorWorkplaceHomepage redifField
+highlight def link redifFieldEditorWorkplaceInstitution redifField
+highlight def link redifFieldEditorWorkplaceLocation redifField
+highlight def link redifFieldEditorWorkplaceName redifField
+highlight def link redifFieldEditorWorkplaceNameEnglish redifField
+highlight def link redifFieldEditorWorkplacePhone redifField
+highlight def link redifFieldEditorWorkplacePostal redifField
+highlight def link redifFieldEmail redifField
+highlight def link redifFieldFax redifField
+highlight def link redifFieldFileFormat redifField
+highlight def link redifFieldFileFunction redifField
+highlight def link redifFieldFileRestriction redifField
+highlight def link redifFieldFileSize redifField
+highlight def link redifFieldFileURL redifField
+highlight def link redifFieldFollowup redifField
+highlight def link redifFieldHandleOfArchive redifField
+highlight def link redifFieldHandleOfInstitution redifField
+highlight def link redifFieldHandleOfPerson redifField
+highlight def link redifFieldHandleOfSeries redifField
+highlight def link redifFieldHandleOfWork redifField
+highlight def link redifFieldHasChapter redifField
+highlight def link redifFieldHomepage redifField
+highlight def link redifFieldInBook redifField
+highlight def link redifFieldISBN redifField
+highlight def link redifFieldISSN redifField
+highlight def link redifFieldIssue redifField
+highlight def link redifFieldJournal redifField
+highlight def link redifFieldKeywords redifField
+highlight def link redifFieldKeywords redifField
+highlight def link redifFieldLanguage redifField
+highlight def link redifFieldLastLoginDate redifField
+highlight def link redifFieldLength redifField
+highlight def link redifFieldMaintainerEmail redifField
+highlight def link redifFieldMaintainerFax redifField
+highlight def link redifFieldMaintainerName redifField
+highlight def link redifFieldMaintainerPhone redifField
+highlight def link redifFieldMonth redifField
+highlight def link redifFieldNameASCII redifField
+highlight def link redifFieldNameFirst redifField
+highlight def link redifFieldNameFull redifField
+highlight def link redifFieldNameLast redifField
+highlight def link redifFieldNameMiddle redifField
+highlight def link redifFieldNamePrefix redifField
+highlight def link redifFieldNameSuffix redifField
+highlight def link redifFieldName redifField
+highlight def link redifFieldNote redifField
+highlight def link redifFieldNotification redifField
+highlight def link redifFieldNumber redifField
+highlight def link redifFieldOrderEmail redifField
+highlight def link redifFieldOrderHomepage redifField
+highlight def link redifFieldOrderPostal redifField
+highlight def link redifFieldOrderURL redifField
+highlight def link redifFieldPages redifField
+highlight def link redifFieldPaperHandle redifField
+highlight def link redifFieldPhone redifField
+highlight def link redifFieldPostal redifField
+highlight def link redifFieldPredecessor redifField
+highlight def link redifFieldPrice redifField
+highlight def link redifFieldPrimaryDefunct redifField
+highlight def link redifFieldPrimaryEmail redifField
+highlight def link redifFieldPrimaryFax redifField
+highlight def link redifFieldPrimaryHomepage redifField
+highlight def link redifFieldPrimaryInstitution redifField
+highlight def link redifFieldPrimaryLocation redifField
+highlight def link redifFieldPrimaryName redifField
+highlight def link redifFieldPrimaryNameEnglish redifField
+highlight def link redifFieldPrimaryPhone redifField
+highlight def link redifFieldPrimaryPostal redifField
+highlight def link redifFieldProgrammingLanguage redifField
+highlight def link redifFieldProviderEmail redifField
+highlight def link redifFieldProviderFax redifField
+highlight def link redifFieldProviderHomepage redifField
+highlight def link redifFieldProviderInstitution redifField
+highlight def link redifFieldProviderLocation redifField
+highlight def link redifFieldProviderName redifField
+highlight def link redifFieldProviderNameEnglish redifField
+highlight def link redifFieldProviderPhone redifField
+highlight def link redifFieldProviderPostal redifField
+highlight def link redifFieldPublicationDate redifField
+highlight def link redifFieldPublicationStatus redifField
+highlight def link redifFieldPublicationType redifField
+highlight def link redifFieldQuaternaryEmail redifField
+highlight def link redifFieldQuaternaryFax redifField
+highlight def link redifFieldQuaternaryHomepage redifField
+highlight def link redifFieldQuaternaryInstitution redifField
+highlight def link redifFieldQuaternaryLocation redifField
+highlight def link redifFieldQuaternaryName redifField
+highlight def link redifFieldQuaternaryNameEnglish redifField
+highlight def link redifFieldQuaternaryPhone redifField
+highlight def link redifFieldQuaternaryPostal redifField
+highlight def link redifFieldRegisteredDate redifField
+highlight def link redifFieldRequires redifField
+highlight def link redifFieldRestriction redifField
+highlight def link redifFieldRevisionDate redifField
+highlight def link redifFieldSecondaryDefunct redifField
+highlight def link redifFieldSecondaryEmail redifField
+highlight def link redifFieldSecondaryFax redifField
+highlight def link redifFieldSecondaryHomepage redifField
+highlight def link redifFieldSecondaryInstitution redifField
+highlight def link redifFieldSecondaryLocation redifField
+highlight def link redifFieldSecondaryName redifField
+highlight def link redifFieldSecondaryNameEnglish redifField
+highlight def link redifFieldSecondaryPhone redifField
+highlight def link redifFieldSecondaryPostal redifField
+highlight def link redifFieldSeries redifField
+highlight def link redifFieldShortId redifField
+highlight def link redifFieldSize redifField
+highlight def link redifFieldSoftwareHandle redifField
+highlight def link redifFieldTemplateType redifField
+highlight def link redifFieldTertiaryDefunct redifField
+highlight def link redifFieldTertiaryEmail redifField
+highlight def link redifFieldTertiaryFax redifField
+highlight def link redifFieldTertiaryHomepage redifField
+highlight def link redifFieldTertiaryInstitution redifField
+highlight def link redifFieldTertiaryLocation redifField
+highlight def link redifFieldTertiaryName redifField
+highlight def link redifFieldTertiaryNameEnglish redifField
+highlight def link redifFieldTertiaryPhone redifField
+highlight def link redifFieldTertiaryPostal redifField
+highlight def link redifFieldTitle redifField
+highlight def link redifFieldTitle redifField
+highlight def link redifFieldType redifField
+highlight def link redifFieldURL redifField
+highlight def link redifFieldVersion redifField
+highlight def link redifFieldVolume redifField
+highlight def link redifFieldWorkplaceEmail redifField
+highlight def link redifFieldWorkplaceFax redifField
+highlight def link redifFieldWorkplaceHomepage redifField
+highlight def link redifFieldWorkplaceInstitution redifField
+highlight def link redifFieldWorkplaceLocation redifField
+highlight def link redifFieldWorkplaceName redifField
+highlight def link redifFieldWorkplaceNameEnglish redifField
+highlight def link redifFieldWorkplaceOrganization redifField
+highlight def link redifFieldWorkplacePhone redifField
+highlight def link redifFieldWorkplacePostal redifField
+highlight def link redifFieldYear redifField
+
+" Deprecated
+"     same as Provider-*
+"     nextgroup=redifArgumentProvider*
+syntax match redifFieldPublisherEmail /^Publisher-Email:/ skipwhite skipempty nextgroup=redifArgumentProviderEmail contained
+syntax match redifFieldPublisherFax /^Publisher-Fax:/ skipwhite skipempty nextgroup=redifArgumentProviderFax contained
+syntax match redifFieldPublisherHomepage /^Publisher-Homepage:/ skipwhite skipempty nextgroup=redifArgumentProviderHomepage contained
+syntax match redifFieldPublisherInstitution /^Publisher-Institution:/ skipwhite skipempty nextgroup=redifArgumentProviderInstitution contained
+syntax match redifFieldPublisherLocation /^Publisher-Location:/ skipwhite skipempty nextgroup=redifArgumentProviderLocation contained
+syntax match redifFieldPublisherName /^Publisher-Name:/ skipwhite skipempty nextgroup=redifArgumentProviderName contained
+syntax match redifFieldPublisherNameEnglish /^Publisher-Name-English:/ skipwhite skipempty nextgroup=redifArgumentProviderNameEnglish contained
+syntax match redifFieldPublisherPhone /^Publisher-Phone:/ skipwhite skipempty nextgroup=redifArgumentProviderPhone contained
+syntax match redifFieldPublisherPostal /^Publisher-Postal:/ skipwhite skipempty nextgroup=redifArgumentProviderPostal contained
+
+highlight def link redifFieldPublisherEmail redifFieldDeprecated
+highlight def link redifFieldPublisherFax redifFieldDeprecated
+highlight def link redifFieldPublisherHomepage redifFieldDeprecated
+highlight def link redifFieldPublisherInstitution redifFieldDeprecated
+highlight def link redifFieldPublisherLocation redifFieldDeprecated
+highlight def link redifFieldPublisherName redifFieldDeprecated
+highlight def link redifFieldPublisherNameEnglish redifFieldDeprecated
+highlight def link redifFieldPublisherPhone redifFieldDeprecated
+highlight def link redifFieldPublisherPostal redifFieldDeprecated
+
+" Standard arguments
+"    By default, they contain all the argument until another field is started:
+"        start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1
+"    For arguments that must not span more than one line, use a match:
+"        /\%(^\S\{-}:\)\@!\S.*/
+"        AND ADD "display"
+"    This is faster.
+"
+"    Those arguments are not highlighted so far. They are here for future
+"    extensions.
+"    TODO Find more RegEx for these arguments
+"      TODO Fax, Phone
+"      TODO URL, Homepage
+"      TODO Keywords
+"      TODO Classification-JEL
+"      TODO Short-Id, Author-Person, Editor-Person
+"
+"    Arguments that may span several lines:
+syntax region redifArgumentAuthorWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentFileFunction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentIssue start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentJournal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentOrderPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrice start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentRequires start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSize start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentVersion start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+
+" Arguments that may not span several lines:
+"    If you are sure that these arguments cannot span several lines, change
+"    them to a match:
+"        /\%(^\S\{-}:\)\@!\S.*/
+"    AND ADD "display" after "contained"
+"        You can use this command on each line that you want to change:
+"        :s+\Vregion \(\w\+\) start=/\\%(^\\S\\{-}:\\)\\@!\\S/ end=/^\\S\\{-}:/me=s-1 contained+match \1 /\\%(^\\S\\{-}:\\)\\@!\\S.*/ contained display
+syntax region redifArgumentAuthorFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorPerson start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorPerson start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentFileURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentMaintainerFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentMaintainerName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentMaintainerPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNameFull start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNameMiddle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNamePrefix start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNameSuffix start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNumber start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentOrderHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentOrderURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSeries start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentShortId start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceOrganization start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+
+" Special arguments
+"    Those arguments require special values
+"    TODO Improve some RegEx
+"      TODO Improve Emails
+"      TODO Improve ISBN
+"      TODO Improve ISSN
+"      TODO Improve spell check (add words from economics.
+"         expl=macroeconometrics, Schumpeterian, IS-LM, etc.)
+"
+"    Template-Type
+syntax match redifArgumentTemplateType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectTemplateType contained display
+syntax match redifCorrectTemplateType /ReDIF-\%(Paper\|Article\|Chapter\|Book\|Software\|Archive\|Series\|Institution\|Person\)/ nextgroup=redifTemplateVersionNumberContainer contained display
+syntax match redifTemplateVersionNumberContainer /.\+/ contains=redifTemplateVersionNumber contained display
+syntax match redifTemplateVersionNumber / \d\+\.\d\+/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentTemplateType redifError
+highlight def link redifCorrectTemplateType Constant
+highlight def link redifTemplateVersionNumber Number
+highlight def link redifTemplateVersionNumberContainer redifError
+
+"    Handles:
+"
+"        Handles of Works:
+syntax match redifArgumentHandleOfWork /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentAuthorArticle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentAuthorBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentAuthorChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentAuthorPaper /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentAuthorSoftware /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentEditorBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentEditorSeries /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentInBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentHasChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentArticleHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentBookHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentChapterHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentPaperHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentSoftwareHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifCorrectHandleOfWork /RePEc:\a\a\a:\%(_\@!\w\)\{6}:\S\+/ contains=redifForbiddenCharactersInHandle,redifBestPracticeInHandle nextgroup=redifWrongLineEnding contained display
+" TODO Are those characters really forbidden???
+syntax match redifForbiddenCharactersInHandle /[\/*?"<>|]/ contained display
+syntax match redifBestPracticeInHandle /\<\%([vi]:[1-9]\d*\|y:[1-9]\d\{3}\|p:[1-9]\d*-[1-9]\d*\|i:\%(jan\|feb\|mar\|apr\|may\|jun\|jul\|aug\|sep\|oct\|nov\|dec\|spr\|sum\|aut\|win\|spe\|Q[1-4]\|\d\d-\d\d\)\|Q:[1-4]\)\>/ contained display
+
+highlight def link redifArgumentHandleOfWork redifError
+highlight def link redifArgumentAuthorArticle redifError
+highlight def link redifArgumentAuthorBook redifError
+highlight def link redifArgumentAuthorChapter redifError
+highlight def link redifArgumentAuthorPaper redifError
+highlight def link redifArgumentAuthorSoftware redifError
+highlight def link redifArgumentEditorBook redifError
+highlight def link redifArgumentEditorSeries redifError
+highlight def link redifArgumentInBook redifError
+highlight def link redifArgumentHasChapter redifError
+highlight def link redifArgumentArticleHandle redifError
+highlight def link redifArgumentBookHandle redifError
+highlight def link redifArgumentChapterHandle redifError
+highlight def link redifArgumentPaperHandle redifError
+highlight def link redifArgumentSoftwareHandle redifError
+highlight def link redifForbiddenCharactersInHandle redifError
+highlight def link redifBestPracticeInHandle redifSpecial
+
+"        Handles of Series:
+syntax match redifArgumentHandleOfSeries /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
+syntax match redifArgumentFollowup /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
+syntax match redifArgumentPredecessor /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
+syntax match redifCorrectHandleOfSeries /RePEc:\a\a\a:\%(_\@!\w\)\{6}/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentHandleOfSeries redifError
+highlight def link redifArgumentFollowup redifError
+highlight def link redifArgumentPredecessor redifError
+
+"        Handles of Archives:
+syntax match redifArgumentHandleOfArchive /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfArchive contained display
+syntax match redifCorrectHandleOfArchive /RePEc:\a\a\a/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentHandleOfArchive redifError
+
+"        Handles of Person:
+syntax match redifArgumentHandleOfPerson /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfPerson contained display
+syntax match redifCorrectHandleOfPerson /\%(\%(:\@!\S\)\{-}:\)\{2}[1-9]\d\{3}\%(-02\%(-[12]\d\|-0[1-9]\)\|-\%(0[469]\|11\)\%(-30\|-[12]\d\|-0[1-9]\)\|-\%(0[13578]\|1[02]\)\%(-3[01]\|-[12]\d\|-0[1-9]\)\):\S\+/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentHandleOfPerson redifError
+
+"        Handles of Institution:
+syntax match redifArgumentAuthorWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentEditorWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentPrimaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentProviderInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentPublisherInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentQuaternaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentSecondaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentTertiaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentHandleOfInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentPrimaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentSecondaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentTertiaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+" TODO Are digits authorized? Apparently not.
+" Country codes:
+" http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm
+syntax match redifCorrectHandleOfInstitution /RePEc:\a\a\a:\a\{5}\(ea\|af\|ax\|al\|dz\|as\|ad\|ao\|ai\|aq\|ag\|ar\|am\|aw\|au\|at\|az\|bs\|bh\|bd\|bb\|by\|be\|bz\|bj\|bm\|bt\|bo\|bq\|ba\|bw\|bv\|br\|io\|bn\|bg\|bf\|bi\|kh\|cm\|ca\|cv\|ky\|cf\|td\|cl\|cn\|cx\|cc\|co\|km\|cg\|cd\|ck\|cr\|ci\|hr\|cu\|cw\|cy\|cz\|dk\|dj\|dm\|do\|ec\|eg\|sv\|gq\|er\|ee\|et\|fk\|fo\|fj\|fi\|fr\|gf\|pf\|tf\|ga\|gm\|ge\|de\|gh\|gi\|gr\|gl\|gd\|gp\|gu\|gt\|gg\|gn\|gw\|gy\|ht\|hm\|va\|hn\|hk\|hu\|is\|in\|id\|ir\|iq\|ie\|im\|il\|it\|jm\|jp\|je\|jo\|kz\|ke\|ki\|kp\|kr\|kw\|kg\|la\|lv\|lb\|ls\|lr\|ly\|li\|lt\|lu\|mo\|mk\|mg\|mw\|my\|mv\|ml\|mt\|mh\|mq\|mr\|mu\|yt\|mx\|fm\|md\|mc\|mn\|me\|ms\|ma\|mz\|mm\|na\|nr\|np\|nl\|nc\|nz\|ni\|ne\|ng\|nu\|nf\|mp\|no\|om\|pk\|pw\|ps\|pa\|pg\|py\|pe\|ph\|pn\|pl\|pt\|pr\|qa\|re\|ro\|ru\|rw\|bl\|sh\|kn\|lc\|mf\|pm\|vc\|ws\|sm\|st\|sa\|sn\|rs\|sc\|sl\|sg\|sx\|sk\|si\|sb\|so\|za\|gs\|ss\|es\|lk\|sd\|sr\|sj\|sz\|se\|ch\|sy\|tw\|tj\|tz\|th\|tl\|tg\|tk\|to\|tt\|tn\|tr\|tm\|tc\|tv\|ug\|ua\|ae\|gb\|us\|um\|uy\|uz\|vu\|ve\|vn\|vg\|vi\|wf\|eh\|ye\|zm\|zw\)/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentHandleOfInstitution redifError
+highlight def link redifArgumentPrimaryDefunct redifError
+highlight def link redifArgumentSecondaryDefunct redifError
+highlight def link redifArgumentTertiaryDefunct redifError
+
+"    Emails:
+syntax match redifArgumentAuthorEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentAuthorWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentContactEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentEditorEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentEditorWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentMaintainerEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentOrderEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentPrimaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentProviderEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentPublisherEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentQuaternaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentSecondaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentTertiaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifCorrectEmail /\%(@\@!\S\)\+@\%(@\@!\S\)\+/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentAuthorEmail redifError
+highlight def link redifArgumentAuthorWorkplaceEmail redifError
+highlight def link redifArgumentContactEmail redifError
+highlight def link redifArgumentEditorEmail redifError
+highlight def link redifArgumentEditorWorkplaceEmail redifError
+highlight def link redifArgumentEmail redifError
+highlight def link redifArgumentMaintainerEmail redifError
+highlight def link redifArgumentOrderEmail redifError
+highlight def link redifArgumentPrimaryEmail redifError
+highlight def link redifArgumentProviderEmail redifError
+highlight def link redifArgumentPublisherEmail redifError
+highlight def link redifArgumentQuaternaryEmail redifError
+highlight def link redifArgumentSecondaryEmail redifError
+highlight def link redifArgumentTertiaryEmail redifError
+highlight def link redifArgumentWorkplaceEmail redifError
+
+"    Language
+"    Source: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
+syntax match redifArgumentLanguage /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectLanguage contained display
+syntax match redifCorrectLanguage /\<\(aa\|ab\|af\|ak\|als\|am\|an\|ang\|ar\|arc\|as\|ast\|av\|ay\|az\|ba\|bar\|bat-smg\|bcl\|be\|be-x-old\|bg\|bh\|bi\|bm\|bn\|bo\|bpy\|br\|bs\|bug\|bxr\|ca\|ce\|ceb\|ch\|cho\|chr\|chy\|co\|cr\|cs\|csb\|cu\|cv\|cy\|da\|de\|diq\|dsb\|dv\|dz\|ee\|el\|en\|eo\|es\|et\|eu\|ext\|fa\|ff\|fi\|fiu-vro\|fj\|fo\|fr\|frp\|fur\|fy\|ga\|gd\|gil\|gl\|gn\|got\|gu\|gv\|ha\|haw\|he\|hi\|ho\|hr\|ht\|hu\|hy\|hz\|ia\|id\|ie\|ig\|ii\|ik\|ilo\|io\|is\|it\|iu\|ja\|jbo\|jv\|ka\|kg\|ki\|kj\|kk\|kl\|km\|kn\|khw\|ko\|kr\|ks\|ksh\|ku\|kv\|kw\|ky\|la\|lad\|lan\|lb\|lg\|li\|lij\|lmo\|ln\|lo\|lt\|lv\|map-bms\|mg\|mh\|mi\|mk\|ml\|mn\|mo\|mr\|ms\|mt\|mus\|my\|na\|nah\|nap\|nd\|nds\|nds-nl\|ne\|new\|ng\|nl\|nn\|no\|nr\|nso\|nrm\|nv\|ny\|oc\|oj\|om\|or\|os\|pa\|pag\|pam\|pap\|pdc\|pi\|pih\|pl\|pms\|ps\|pt\|qu\|rm\|rmy\|rn\|ro\|roa-rup\|ru\|rw\|sa\|sc\|scn\|sco\|sd\|se\|sg\|sh\|si\|simple\|sk\|sl\|sm\|sn\|so\|sq\|sr\|ss\|st\|su\|sv\|sw\|ta\|te\|tet\|tg\|th\|ti\|tk\|tl\|tlh\|tn\|to\|tpi\|tr\|ts\|tt\|tum\|tw\|ty\|udm\|ug\|uk\|ur\|uz\|ve\|vi\|vec\|vls\|vo\|wa\|war\|wo\|xal\|xh\|yi\|yo\|za\|zh\|zh-min-nan\|zh-yue\|zu\)\>/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentLanguage redifError
+highlight def link redifCorrectLanguage redifSpecial
+
+"    Length
+"    Based on the example in the documentation. But apparently any field is
+"    possible
+syntax region redifArgumentLength start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifGoodLength contained
+syntax match redifGoodLength /1 page\|[1-9]\d*\%( pages\)\=/ contained display
+
+highlight def link redifGoodLength redifSpecial
+
+"    Publication-Type
+syntax match redifArgumentPublicationType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectPublicationType contained display
+syntax match redifCorrectPublicationType /\<\(journal article\|book\|book chapter\|working paper\|conference paper\|report\|other\)\>/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentPublicationType redifError
+highlight def link redifCorrectPublicationType redifSpecial
+
+"    Publication-Status
+syntax region redifArgumentPublicationStatus start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifSpecialPublicationStatus contained
+syntax match redifSpecialPublicationStatus /published\|forthcoming/ nextgroup=redifCorrectPublicationStatus contained display
+syntax region redifCorrectPublicationStatus start=/./ end=/^\S\{-}:/me=s-1 contained
+
+highlight def link redifArgumentPublicationStatus redifError
+highlight def link redifSpecialPublicationStatus redifSpecial
+
+"    Month
+"    TODO Are numbers also allowed?
+syntax match redifArgumentMonth /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodMonth contained display
+syntax match redifGoodMonth /\<\(Jan\%(uary\)\=\|Feb\%(ruary\)\=\|Mar\%(ch\)\=\|Apr\%(il\)\=\|May\|June\=\|July\=\|Aug\%(ust\)\=\|Sep\%(tember\)\=\|Oct\%(ober\)\=\|Nov\%(ember\)\=\|Dec\%(ember\)\=\)\>/ contained display
+
+highlight def link redifGoodMonth redifSpecial
+
+"    Integers: Volume, Chapter
+syntax match redifArgumentVolume /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
+syntax match redifArgumentChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
+syntax match redifCorrectInteger /[1-9]\d*/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentVolume redifError
+highlight def link redifArgumentChapter redifError
+
+"    Year
+syntax match redifArgumentYear /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectYear contained display
+syntax match redifCorrectYear /[1-9]\d\{3}/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentYear redifError
+
+"    Edition
+"    Based on the example in the documentation.
+syntax match redifArgumentEdition /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodEdition contained display
+syntax match redifGoodEdition /1st\|2nd\|3rd\|[4-9]th\|[1-9]\d*\%(1st\|2nd\|3rd\|[4-9]th\)\|[1-9]\d*/ contained display
+
+highlight def link redifGoodEdition redifSpecial
+
+"    ISBN
+syntax match redifArgumentISBN /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodISBN contained display
+syntax match redifGoodISBN /\d[0-9-]\{8,15}\d/ contained display
+
+highlight def link redifGoodISBN redifSpecial
+
+"    ISSN
+syntax match redifArgumentISSN /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodISSN contained display
+syntax match redifGoodISSN /\d\{4}-\d\{3}[0-9X]/ contained display
+
+highlight def link redifGoodISSN redifSpecial
+
+"    File-Size
+"    Based on the example in the documentation.
+syntax region redifArgumentFileSize start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifGoodSize contained
+syntax match redifGoodSize /kb\|bytes/ contained display
+
+highlight def link redifGoodSize redifSpecial
+
+"    Type
+syntax match redifArgumentType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectType contained display
+syntax match redifCorrectType /ReDIF-Paper\|ReDIF-Software\|ReDIF-Article\|ReDIF-Chapter\|ReDIF-Book/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentType redifError
+highlight def link redifCorrectType redifSpecial
+
+"    Dates: Publication-Date, Creation-Date, Revision-Date,
+"    Last-Login-Date, Registration-Date
+syntax match redifArgumentCreationDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
+syntax match redifArgumentLastLoginDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
+syntax match redifArgumentPublicationDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
+syntax match redifArgumentRegisteredDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
+syntax match redifArgumentRevisionDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
+syntax match redifCorrectDate /[1-9]\d\{3}\%(-02\%(-[12]\d\|-0[1-9]\)\=\|-\%(0[469]\|11\)\%(-30\|-[12]\d\|-0[1-9]\)\=\|-\%(0[13578]\|1[02]\)\%(-3[01]\|-[12]\d\|-0[1-9]\)\=\)\=/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentCreationDate redifError
+highlight def link redifArgumentLastLoginDate redifError
+highlight def link redifArgumentPublicationDate redifError
+highlight def link redifArgumentRegisteredDate redifError
+highlight def link redifArgumentRevisionDate redifError
+
+"    Classification-JEL
+syntax match redifArgumentClassificationJEL /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectJEL contained display
+syntax match redifCorrectJEL /\<\%(\u\d\{,2}[,; \t]\s*\)*\u\d\{,2}/ contains=redifSpecialJEL nextgroup=redifWrongLineEnding contained display
+syntax match redifSpecialJEL /\<\u\d\{,2}/ contained display
+
+highlight def link redifArgumentClassificationJEL redifError
+highlight def link redifSpecialJEL redifSpecial
+
+"    Pages
+syntax match redifArgumentPages /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectPages contained display
+syntax match redifCorrectPages /[1-9]\d*-[1-9]\d*/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentPages redifError
+
+"    Name-ASCII
+syntax match redifArgumentNameASCII /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectNameASCII contained display
+syntax match redifCorrectNameASCII /[ -~]/ contained display
+
+highlight def link redifArgumentNameASCII redifError
+
+"    Programming-Language
+syntax match redifArgumentProgrammingLanguage /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodProgrammingLanguage contained display
+syntax match redifGoodProgrammingLanguage /\<c++\|\<\%(c\|dos executable\|executable\|fortran\|gauss\|gretl\|java\|mathematica\|matlab\|octave\|ox\|perl\|python\|rats\|r\|shazam\|s-plus\|stata\|tsp international\)\>/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifGoodProgrammingLanguage redifSpecial
+
+"    File-Format
+"    TODO The link in the documentation that gives the list of possible formats is broken.
+"    ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/media-types
+"    These are based on the examples in the documentation.
+syntax match redifArgumentFileFormat /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodFormat contained display
+syntax match redifGoodFormat "\a\+/[[:alpha:]+-]\+" nextgroup=redifWrongLineEnding contains=redifSpecialFormat contained display
+syntax match redifSpecialFormat "application/atom+xml\|application/ecmascript\|application/EDI-X12\|application/EDIFACT\|application/json\|application/javascript\|application/octet-stream\|application/ogg\|application/pdf\|application/postscript\|application/rdf+xml\|application/rss+xml\|application/soap+xml\|application/font-woff\|application/xhtml+xml\|application/xml\|application/xml-dtd\|application/xop+xml\|application/zip\|application/gzip\|audio/basic\|audio/L24\|audio/mp4\|audio/mpeg\|audio/ogg\|audio/vorbis\|audio/vnd.rn-realaudio\|audio/vnd.wave\|audio/webm\|image/gif\|image/jpeg\|image/pjpeg\|image/png\|image/svg+xml\|image/tiff\|image/vnd.microsoft.icon\|message/http\|message/imdn+xml\|message/partial\|message/rfc822\|model/example\|model/iges\|model/mesh\|model/vrml\|model/x3d+binary\|model/x3d+vrml\|model/x3d+xml\|multipart/mixed\|multipart/alternative\|multipart/related\|multipart/form-data\|multipart/signed\|multipart/encrypted\|text/cmd\|text/css\|text/csv\|text/html\|text/javascript\|text/plain\|text/vcard\|text/xml\|video/mpeg\|video/mp4\|video/ogg\|video/quicktime\|video/webm\|video/x-matroska\|video/x-ms-wmv\|video/x-flv" contained display
+
+highlight def link redifSpecialFormat redifSpecial
+highlight def link redifArgumentFileFormat redifError
+
+" Keywords
+"     Spell checked
+syntax match redifArgumentKeywords /\%(^\S\{-}:\)\@!\S.*/ contains=@Spell,redifKeywordsSemicolon contained
+syntax match redifKeywordsSemicolon /;/ contained
+
+highlight def link redifKeywordsSemicolon redifSpecial
+
+" Other spell-checked arguments
+"    Very useful when copy-pasting abstracts that may contain hyphens or
+"    ligatures.
+syntax region redifArgumentAbstract start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentAvailability start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentBookTitle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentDescription start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentFileRestriction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentNote start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentNotification start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentRestriction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentTitle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+
+" Wrong line ending
+syntax match redifWrongLineEnding /.\+/ contained display
+
+highlight def link redifWrongLineEnding redifError
+
+" Final highlight
+highlight def link redifComment Comment
+highlight def link redifError Error
+highlight def link redifField Identifier
+highlight def link redifFieldDeprecated Identifier
+highlight def link redifSpecial Special
+" For deprecated fields:
+highlight redifFieldDeprecated term=undercurl cterm=undercurl gui=undercurl guisp=DarkGrey
+
+" Sync: The template-type (ReDIF-Paper, ReDIF-Archive, etc.) influences which
+" fields can follow. Thus sync must search backwards for it.
+"
+" I would like to simply ask VIM to search backward for the first occurence of
+" /^Template-Type:/, but it does not seem to be possible, so I have to start
+" from the beginning of the file... This might slow down a lot for files that
+" contain a lot of Template-Type statements.
+syntax sync fromstart
+
+" The problem with syntax sync match (tried below), it is that, for example,
+" it cannot realize when it is inside a Author-Name cluster, which is inside a
+" Template-Type template...
+"
+" TODO Is this linecont pattern really useful? It seems to work anyway...
+"syntax sync linecont /^\(Template-Type:\)\=\s*$/
+" TODO This sync is surprising... It seems to work on several lines even
+" though I replaced \_s* by \s*, even without the linecont pattern...
+"syntax sync match redifSyncForTemplatePaper groupthere redifRegionTemplatePaper /^Template-Type:\s*ReDIF-Paper \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateArticle groupthere redifRegionTemplateArticle /^Template-Type:\s*ReDIF-Article \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateChapter groupthere redifRegionTemplateChapter /^Template-Type:\s*ReDIF-Chapter \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateBook groupthere redifRegionTemplateBook /^Template-Type:\s*ReDIF-Book \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateSoftware groupthere redifRegionTemplateSoftware /^Template-Type:\s*ReDIF-Software \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateArchive groupthere redifRegionTemplateArchive /^Template-Type:\s*ReDIF-Archive \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateSeries groupthere redifRegionTemplateSeries /^Template-Type:\s*ReDIF-Series \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateInstitution groupthere redifRegionTemplateInstitution /^Template-Type:\s*ReDIF-Institution \d\+\.\d\+/
+"syntax sync match redifSyncForTemplatePerson groupthere redifRegionTemplatePerson /^Template-Type:\s*ReDIF-Person \d\+\.\d\+/
+
+" I do not really know how sync linebreaks works, but it helps when making
+" changes on the argument when this argument is not on the same line than its
+" field. I just assume that people won't leave more than one line of
+" whitespace between fields and arguments (which is already very unlikely)
+" hence the value of 2.
+syntax sync linebreaks=2
+
+" Since folding is defined by the syntax, set foldmethod to syntax.
+set foldmethod=syntax
+
+" Set "b:current_syntax" to the name of the syntax at the end:
+let b:current_syntax="redif"
index 6ec42d2..06d6885 100644 (file)
@@ -1,11 +1,13 @@
 " Vim syntax file
 " Language: resolver configuration file
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Original Maintaner: Radu Dineiu <littledragon@altern.org>
-" License: This file can be redistribued and/or modified under the same terms
-"   as Vim itself.
-" URL: http://trific.ath.cx/Ftp/vim/syntax/resolv.vim
-" Last Change: 2006-04-16
+" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
+" URL: https://raw.github.com/rid9/vim-resolv/master/resolv.vim
+" Last Change: 2013 May 21
+" Version: 1.0
+"
+" Credits:
+"   David Necas (Yeti) <yeti@physics.muni.cz>
+"   Stefano Zacchiroli <zack@debian.org>
 
 if version < 600
        syntax clear
@@ -42,8 +44,6 @@ syn match resolvSortList /^\s*sortlist\>/ nextgroup=resolvIPNetmaskSortList skip
 syn match resolvOptions /^\s*options\>/ nextgroup=resolvOption skipwhite
 
 " Options
-" FIXME: The manual page and the source code do not exactly agree on the set
-" of allowed options
 syn match resolvOption /\<\%(debug\|no_tld_query\|rotate\|no-check-names\|inet6\)\>/ contained nextgroup=resolvOption skipwhite
 syn match resolvOption /\<\%(ndots\|timeout\|attempts\):\d\+\>/ contained contains=resolvOperator nextgroup=resolvOption skipwhite
 
index 7e11ffe..03dfc9d 100644 (file)
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:    Reva Forth
-" Version:     7.1
-" Last Change: 2008/01/11
+" Version:     2011.2
+" Last Change: 2012/02/13
 " Maintainer:  Ron Aaron <ron@ronware.org>
 " URL:         http://ronware.org/reva/
-" Filetypes:   *.rf *.frt 
+" Filetypes:   *.rf *.frt
 " NOTE:        You should also have the ftplugin/reva.vim file to set 'isk'
 
 " For version 5.x: Clear all syntax items and don't load
@@ -17,10 +17,13 @@ elseif exists("b:current_syntax")
    finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn clear
 
 " Synchronization method
-syn sync ccomment 
+syn sync ccomment
 syn sync maxlines=100
 
 
@@ -39,7 +42,7 @@ syn region revaEOF start='\<|||\>' end='{$}' contains=revaHelpStuff
 syn case match
 " basic mathematical and logical operators
 syn keyword revaoperators + - * / mod /mod negate abs min max umin umax
-syn keyword revaoperators and or xor not invert 1+ 1- 
+syn keyword revaoperators and or xor not invert 1+ 1-
 syn keyword revaoperators m+ */ */mod m* um* m*/ um/mod fm/mod sm/rem
 syn keyword revaoperators d+ d- dnegate dabs dmin dmax > < = >> << u< <>
 
@@ -53,10 +56,10 @@ syn keyword revastack >r r> r@ rdrop
 " address operations
 syn keyword revamemory @ ! +! c@ c! 2@ 2! align aligned allot allocate here free resize
 syn keyword revaadrarith chars char+ cells cell+ cell cell- 2cell+ 2cell- 3cell+ 4cell+
-syn keyword revamemblks move fill 
+syn keyword revamemblks move fill
 
 " conditionals
-syn keyword revacond if else then =if >if <if <>if if0  ;; catch throw 
+syn keyword revacond if else then =if >if <if <>if if0  ;; catch throw
 
 " iterations
 syn keyword revaloop while repeat until again
@@ -66,18 +69,18 @@ syn keyword revaloop do loop i j leave  unloop skip more
 syn match revaColonDef '\<noname:\|\<:\s+' contains=revaComment
 syn keyword revaEndOfColonDef ; ;inline
 syn keyword revadefine constant constant, variable create variable,
-syn keyword revadefine user value to +to defer! defer@ defer is does> immediate 
+syn keyword revadefine user value to +to defer! defer@ defer is does> immediate
 syn keyword revadefine compile literal ' [']
 
 " Built in words
 com! -nargs=+ Builtin syn keyword revaBuiltin <args>
 Builtin execute ahead interp bye >body here pad words make
 Builtin accept close cr creat delete ekey emit fsize ioerr key?
-Builtin mtime open/r open/rw read rename seek space spaces stat 
+Builtin mtime open/r open/rw read rename seek space spaces stat
 Builtin tell type type_ write (seek) (argv) (save) 0; 0drop;
 Builtin >class >lz >name >xt alias alias: appname argc asciiz, asciizl,
 Builtin body> clamp depth disassemble findprev fnvhash getenv here,
-Builtin iterate last! last@ later link lz> lzmax os parse/ peek 
+Builtin iterate last! last@ later link lz> lzmax os parse/ peek
 Builtin peek-n pop prior push put rp@ rpick save setenv slurp
 Builtin stack-empty? stack-iterate stack-size stack: THROW_BADFUNC
 Builtin THROW_BADLIB THROW_GENERIC used xt>size z,
@@ -88,21 +91,21 @@ Builtin chdir g32 k32 u32 getcwd getpid hinst osname stdin stdout
 Builtin (-lib) (bye) (call) (else) (find) (func) (here) (if (lib) (s0) (s^)
 Builtin (to~) (while) >in >rel ?literal appstart cold compiling? context? d0 default_class
 Builtin defer? dict dolstr dostr find-word h0 if) interp isa onexit
-Builtin onstartup pdoes pop>ebx prompt rel> rp0 s0 src srcstr state str0 then,> then> tib 
+Builtin onstartup pdoes pop>ebx prompt rel> rp0 s0 src srcstr state str0 then,> then> tib
 Builtin tp vector vector! word? xt? .ver revaver revaver# && '' 'constant 'context
 Builtin 'create 'defer 'does 'forth 'inline 'macro 'macront 'notail 'value 'variable
 Builtin (.r) (context) (create) (header) (hide) (inline) (p.r) (words~) (xfind)
 Builtin ++ -- , -2drop -2nip -link -swap . .2x .classes .contexts .funcs .libs .needs .r
 Builtin .rs .x 00; 0do 0if 1, 2, 3, 2* 2/ 2constant 2variable 3dup 4dup ;then >base >defer
 Builtin >rr ? ?do @execute @rem appdir argv as back base base! between chain cleanup-libs
-Builtin cmove> context?? ctrl-c ctx>name data: defer: defer@def dictgone do_cr eleave 
-Builtin endcase endof eval exception exec false find func: header heapgone help help/ 
+Builtin cmove> context?? ctrl-c ctx>name data: defer: defer@def dictgone do_cr eleave
+Builtin endcase endof eval exception exec false find func: header heapgone help help/
 Builtin hex# hide inline{ last lastxt lib libdir literal, makeexename mnotail ms ms@
-Builtin newclass noop nosavedict notail nul of off on p: padchar parse parseln 
-Builtin parsews rangeof rdepth remains reset reva revaused rol8 rr> scratch setclass sp 
+Builtin newclass noop nosavedict notail nul of off on p: padchar parse parseln
+Builtin parsews rangeof rdepth remains reset reva revaused rol8 rr> scratch setclass sp
 Builtin strof super> temp time&date true turnkey? undo vfunc: w! w@
 Builtin xchg xchg2 xfind xt>name xwords { {{ }} }  _+ _1+ _1- pathsep case \||
-" p[ [''] [ ['] 
+" p[ [''] [ [']
 
 
 " debugging
@@ -116,11 +119,11 @@ syn keyword revadebug .s dump see
 " syn region revaCharOps start=+."\s+ skip=+\\"+ end=+"+
 
 " char-number conversion
-syn keyword revaconversion s>d >digit digit> >single >double >number >float 
+syn keyword revaconversion s>d >digit digit> >single >double >number >float
 
 " contexts
-syn keyword revavocs forth macro inline  
-syn keyword revavocs context: 
+syn keyword revavocs forth macro inline
+syn keyword revavocs context:
 syn match revavocs /\<\~[^~ ]*/
 syn match revavocs /[^~ ]*\~\>/
 
@@ -135,7 +138,7 @@ syn match revainteger "\<'.\>"
 
 " Strings
 " syn region revaString start=+\.\?\"+ end=+"+ end=+$+
-syn region revaString start=/"/ skip=/\\"/ end=/"/ 
+syn region revaString start=/"/ skip=/\\"/ end=/"/
 
 " Comments
 syn region revaComment start='\\S\s' end='.*' contains=revaTodo
@@ -187,5 +190,7 @@ if !exists("did_reva_syntax_inits")
 endif
 
 let b:current_syntax = "reva"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " vim: ts=8:sw=4:nocindent:smartindent:
index b4d0732..ef698a5 100644 (file)
@@ -1,14 +1,8 @@
 " Vim syntax file
 " Language:    Rexx
 " Maintainer:  Thomas Geulig <geulig@nentec.de>
-" Last Change:  2005 Dez  9, added some <http://www.ooRexx.org>-coloring,
-"                            line comments, do *over*, messages, directives,
-"                            highlighting classes, methods, routines and requires
-"               2007 Oct 17, added support for new ooRexx 3.2 features
-"               Rony G. Flatscher <rony.flatscher@wu-wien.ac.at>
-"
+" Last Change:  2012 Sep 14, added support for new ooRexx 4.0 features
 " URL:         http://www.geulig.de/vim/rexx.vim
-"
 " Special Thanks to Dan Sharp <dwsharp@hotmail.com> and Rony G. Flatscher
 " <Rony.Flatscher@wu-wien.ac.at> for comments and additions
 
@@ -54,7 +48,7 @@ syn match rexxKeyword contained "\<use\>\s*\(strict\s*\)\?\<arg\>"
 syn match rexxRegularCallSignal contained "\<\(call\|signal\)\s\(\s*on\>\|\s*off\>\)\@!\(\k\+\ze\|\ze(\)\(\s*\|;\|$\|(\)"
 syn region rexxLabel contained start="\<\(call\|signal\)\>\s*\zs\(\k*\|(\)" end="\ze\(\s*\|;\|$\|(\)" containedin=rexxRegularCallSignal
 
-syn match rexxExceptionHandling contained "\<\(call\|signal\)\>\s\+\<\(on\|off\)\>.*\(;\|$\)"
+syn match rexxExceptionHandling contained "\<\(call\|signal\)\>\s\+\<\(on\|off\)\>.*\(;\|$\)" contains=rexxComment
 
 " hilite label given after keyword "name"
 syn match rexxLabel "name\s\+\zs\k\+\ze" containedin=rexxExceptionHandling
@@ -74,13 +68,14 @@ syn match rexxConditional "\<\(then\|else\|when\|otherwise\)\(\s*\|;\|\_$\|\)\>"
 syn match rexxLoopKeywords "\<\(to\|by\|for\|until\|while\|over\)\>" containedin=doLoopSelectLabelRegion
 
 " must be after Conditional phrases!
-syn match doLoopSelectLabelRegion "\<\(do\|loop\|select\)\>\s\+\(label\s\+\)\?\(\s\+\k\+\s\+\zs\<over\>\)\?\k*\(\s\+forever\)\?\(\s\|;\|$\)" 
+syn match doLoopSelectLabelRegion "\<\(do\|loop\|select\)\>\s\+\(label\s\+\)\?\(\s\+\k\+\s\+\zs\<over\>\)\?\k*\(\s\+forever\)\?\(\s\|;\|$\)" contains=doLoopSelectLabelRegion,rexxStartValueAssignment,rexxLoopKeywords
 
 " color label's name
 syn match rexxLabel2 "\<\(do\|loop\|select\)\>\s\+label\s\+\zs\k*\ze" containedin=doLoopSelectLabelRegion
 
 " make sure control variable is normal
-syn match rexxControlVariable        "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\s\+\<over\>" containedin=doLoopSelectLabelRegion
+" TODO: re-activate ?
+"rgf syn match rexxControlVariable        "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\s\+\<over\>" containedin=doLoopSelectLabelRegion
 
 " make sure control variable assignment is normal
 syn match rexxStartValueAssignment       "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\(=.*\)\?\s\+\<to\>" containedin=doLoopSelectLabelRegion
@@ -96,7 +91,8 @@ syn match rexxGuard "\(^\|;\|:\)\s*\<guard\>\s\+\<\(on\|off\)\>"
 syn match rexxTrace "\(^\|;\|:\)\s*\<trace\>\s\+\<\K\k*\>"
 
 " Raise statement
-syn match rexxRaise "\(^\|;\|:\)\s\+\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
+" syn match rexxRaise "\(^\|;\|:\)\s\+\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
+syn match rexxRaise "\(^\|;\|:\)\s*\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
 syn match rexxRaise2 "\<\(additional\|array\|description\|exit\|propagate\|return\)\>" containedin=rexxRaise
 
 " Forward statement
@@ -142,19 +138,36 @@ syn keyword rexxSpecialVariable  sigl rc result self super
 syn keyword rexxSpecialVariable  .environment .error .input .local .methods .output .rs .stderr .stdin .stdout .stdque
 
 " Constants
-syn keyword rexxConst .true .false .nil .endOfLine .line
+syn keyword rexxConst .true .false .nil .endOfLine .line .context
+
+" Rexx numbers
+" int like number
+syn match rexxNumber '\d\+' contained
+syn match rexxNumber '[-+]\s*\d\+' contained
+
+" Floating point number with decimal
+syn match rexxNumber '\d\+\.\d*' contained
+syn match rexxNumber '[-+]\s*\d\+\.\d*' contained
+
+" Floating point like number with E
+syn match rexxNumber '[-+]\s*\d*[eE][\-+]\d\+' contained
+syn match rexxNumber '\d*[eE][\-+]\d\+' contained
+
+" Floating point like number with E and decimal point (+,-)
+syn match rexxNumber '[-+]\s*\d*\.\d*[eE][\-+]\d\+' contained
+syn match rexxNumber '\d*\.\d*[eE][\-+]\d\+' contained
 
-syn match rexxNumber "\(-\|+\)\?\s*\zs\<\(\d\+\.\?\|\d*\.\d\+\(E\(+\|-\)\d\{2,2}\)\?\)\?\>"
 
 " ooRexx builtin classes (as of version 3.2.0, fall 2007), first define dot to be o.k. in keywords
 syn keyword rexxBuiltinClass .Alarm .ArgUtil .Array .Bag .CaselessColumnComparator
 syn keyword rexxBuiltinClass .CaselessComparator .CaselessDescendingComparator .CircularQueue
 syn keyword rexxBuiltinClass .Class .Collection .ColumnComparator .Comparable .Comparator
-syn keyword rexxBuiltinClass .DateTime .DescendingComparator .Directory .InputOutputStream
+syn keyword rexxBuiltinClass .DateTime .DescendingComparator .Directory .File .InputOutputStream
 syn keyword rexxBuiltinClass .InputStream .InvertingComparator .List .MapCollection
 syn keyword rexxBuiltinClass .Message .Method .Monitor .MutableBuffer .Object
-syn keyword rexxBuiltinClass .OrderedCollection .OutputStream .Properties .Queue
-syn keyword rexxBuiltinClass .Relation .RexxQueue .Set .SetCollection .Stem .Stream
+syn keyword rexxBuiltinClass .OrderedCollection .OutputStream .Package .Properties .Queue
+syn keyword rexxBuiltinClass .RegularExpression .Relation .RexxContext .RexxQueue .Routine
+syn keyword rexxBuiltinClass .Set .SetCollection .Stem .Stream
 syn keyword rexxBuiltinClass .StreamSupplier .String .Supplier .Table .TimeSpan
 
 " Windows-only classes
@@ -163,7 +176,8 @@ syn keyword rexxBuiltinClass .CategoryDialog .CheckBox .CheckList .ComboBox .Dia
 syn keyword rexxBuiltinClass .DialogExtensions .DlgArea .DlgAreaU .DynamicDialog
 syn keyword rexxBuiltinClass .EditControl .InputBox .IntegerBox .ListBox .ListChoice
 syn keyword rexxBuiltinClass .ListControl .MenuObject .MessageExtensions .MultiInputBox
-syn keyword rexxBuiltinClass .MultiListChoice .PasswordBox .PlainBaseDialog .PlainUserDialog
+syn keyword rexxBuiltinClass .MultiListChoice .OLEObject .OLEVariant
+syn keyword rexxBuiltinClass .PasswordBox .PlainBaseDialog .PlainUserDialog
 syn keyword rexxBuiltinClass .ProgressBar .ProgressIndicator .PropertySheet .RadioButton
 syn keyword rexxBuiltinClass .RcDialog .ResDialog .ScrollBar .SingleSelection .SliderControl
 syn keyword rexxBuiltinClass .StateIndicator .StaticControl .TabControl .TimedMessage
@@ -171,22 +185,34 @@ syn keyword rexxBuiltinClass .TreeControl .UserDialog .VirtualKeyCodes .WindowBa
 syn keyword rexxBuiltinClass .WindowExtensions .WindowObject .WindowsClassesBase .WindowsClipboard
 syn keyword rexxBuiltinClass .WindowsEventLog .WindowsManager .WindowsProgramManager .WindowsRegistry
 
+" BSF4ooRexx classes
+syn keyword rexxBuiltinClass .BSF .bsf.dialog .bsf_proxy
+syn keyword rexxBuiltinClass .UNO .UNO_ENUM .UNO_CONSTANTS .UNO_PROPERTIES
+
 " ooRexx directives, ---rgf location important, otherwise directives in top of file not matched!
 syn region rexxClassDirective     start="::\s*class\s*"ms=e+1    end="\ze\(\s\|;\|$\)"
 syn region rexxMethodDirective    start="::\s*method\s*"ms=e+1   end="\ze\(\s\|;\|$\)"
 syn region rexxRequiresDirective  start="::\s*requires\s*"ms=e+1 end="\ze\(\s\|;\|$\)"
 syn region rexxRoutineDirective   start="::\s*routine\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
 syn region rexxAttributeDirective start="::\s*attribute\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
+" rgf, 2012-09-09
+syn region rexxOptionsDirective   start="::\s*options\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
+syn region rexxConstantDirective  start="::\s*constant\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
+
+syn region rexxDirective start="\(^\|;\)\s*::\s*\w\+"  end="\($\|;\)" contains=rexxString,rexxNumber,rexxComment,rexxLineComment,rexxClassDirective,rexxMethodDirective,rexxRoutineDirective,rexxRequiresDirective,rexxAttributeDirective,rexxOptionsDirective,rexxConstantDirective keepend
+
+syn match rexxOptionsDirective2 "\<\(digits\|form\|fuzz\|trace\)\>" containedin = rexxOptionsDirective3
+syn region rexxOptionsDirective3 start="\(^\|;\)\s*::\s*options\s"ms=e+1  end="\($\|;\)" contains=rexxString,rexxNumber,rexxVariable,rexxComment,rexxLineComment containedin = rexxDirective
 
-syn region rexxDirective start="\(^\|;\)\s*::\s*\w\+"  end="\($\|;\)" contains=rexxString,rexxComment,rexxLineComment,rexxClassDirective,rexxMethodDirective,rexxRoutineDirective,rexxRequiresDirective,rexxAttributeDirective keepend
 
 syn region rexxVariable start="\zs\<\(\.\)\@!\K\k\+\>\ze\s*\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)" end="\(\_$\|.\)"me=e-1
-syn match rexxVariable "\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)\s*\zs\K\k*\ze" 
+syn match rexxVariable "\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)\s*\zs\K\k*\ze"
 
 " rgf, 2007-07-22: unfortunately, the entire region is colored (not only the
 " patterns), hence useless (vim 7.0)! (syntax-docs hint that that should work)
 " attempt: just colorize the parenthesis in matching colors, keep content
 "          transparent to keep the formatting already done to it!
+" TODO: test on 7.3
 " syn region par1 matchgroup=par1 start="(" matchgroup=par1 end=")" transparent contains=par2
 " syn region par2 matchgroup=par2 start="(" matchgroup=par2 end=")" transparent contains=par3 contained
 " syn region par3 matchgroup=par3 start="(" matchgroup=par3 end=")" transparent contains=par4 contained
@@ -200,11 +226,11 @@ syn match rexxVariable "\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)\s*\zs\K\k*\ze
 " syn region par4 matchgroup=par4 start="(" end=")" contains=par5 contained
 " syn region par5 matchgroup=par5 start="(" end=")" contains=par1 contained
 
-hi par1 ctermfg=red            guifg=red
-hi par2 ctermfg=blue           guifg=blue
-hi par3 ctermfg=darkgreen      guifg=darkgreen
-hi par4 ctermfg=darkyellow     guifg=darkyellow
-hi par5 ctermfg=darkgrey       guifg=darkgrey
+hi par1 ctermfg=red            guifg=red          "guibg=grey
+hi par2 ctermfg=blue           guifg=blue         "guibg=grey
+hi par3 ctermfg=darkgreen      guifg=darkgreen    "guibg=grey
+hi par4 ctermfg=darkyellow     guifg=darkyellow   "guibg=grey
+hi par5 ctermfg=darkgrey       guifg=darkgrey     "guibg=grey
 
 " line continuation (trailing comma or single dash)
 syn sync linecont "\(,\|-\ze-\@!\)\ze\s*\(--.*\|\/\*.*\)*$"
@@ -214,7 +240,7 @@ syn sync linecont "\(,\|-\ze-\@!\)\ze\s*\(--.*\|\/\*.*\)*$"
 " endif
 " exec "syn sync ccomment rexxComment minlines=" . rexx_minlines
 
-" always scan from start, PCs are powerful enough for that in 2007 !
+" always scan from start, PCs have long become to be powerful enough for that
 exec "syn sync fromstart"
 
 " Define the default highlighting.
@@ -236,7 +262,7 @@ if version >= 508 || !exists("did_rexx_syn_inits")
   HiLink endIterateLeaveLabelRegion    rexxKeyword
   HiLink rexxLoopKeywords      rexxKeyword " Todo
 
-  HiLink rexxNumber            Normal  
+  HiLink rexxNumber            Normal "DiffChange
 "  HiLink rexxIdentifier               DiffChange
 
   HiLink rexxRegularCallSignal Statement
@@ -249,7 +275,7 @@ if version >= 508 || !exists("did_rexx_syn_inits")
   HiLink rexxCommentError      rexxError
   HiLink rexxError             Error
   HiLink rexxKeyword           Statement
-  HiLink rexxKeywordStatements Statement  
+  HiLink rexxKeywordStatements Statement
 
   HiLink rexxFunction          Function
   HiLink rexxString            String
@@ -271,6 +297,13 @@ if version >= 508 || !exists("did_rexx_syn_inits")
   HiLink rexxRequiresDirective Include
   HiLink rexxRoutineDirective  rexxFunction
 
+" rgf, 2012-09-09
+  HiLink rexxOptionsDirective  rexxFunction
+  HiLink rexxOptionsDirective2  rexxOptionsDirective
+  HiLink rexxOptionsDirective3  Normal " rexxOptionsDirective
+
+  HiLink rexxConstantDirective rexxFunction
+
   HiLink rexxConst             Constant
   HiLink rexxTypeSpecifier     Type
   HiLink rexxBuiltinClass      rexxTypeSpecifier
index 98e5bc0..0c07861 100644 (file)
@@ -1,10 +1,11 @@
 " Vim syntax file
 " Language:    R Help File
-" Maintainer:  Johannes Ranke <jranke@uni-bremen.de>
-" Last Change: 2010 Apr 22
-" Version:     0.7.3
-" SVN:            $Id: rhelp.vim 88 2010-04-22 19:37:09Z ranke $
-" Remarks:     - Now includes R syntax highlighting in the appropriate
+" Maintainer: Jakson Aquino <jalvesaq@gmail.com>
+" Former Maintainer: Johannes Ranke <jranke@uni-bremen.de>
+" Last Change: Fri Oct 14, 2011  09:54PM
+" Version:     0.7.4
+" SVN:            $Id: rhelp.vim 90 2010-11-22 10:58:11Z ranke $
+" Remarks:     - Includes R syntax highlighting in the appropriate
 "                sections if an r.vim file is in the same directory or in the
 "                default debian location.
 "              - There is no Latex markup in equations
@@ -24,30 +25,40 @@ endif
 
 syn case match
 
-" R help identifiers {{{
+" R help identifiers {{{1
 syn region rhelpIdentifier matchgroup=rhelpSection     start="\\name{" end="}" 
 syn region rhelpIdentifier matchgroup=rhelpSection     start="\\alias{" end="}" 
-syn region rhelpIdentifier matchgroup=rhelpSection     start="\\pkg{" end="}" 
-syn region rhelpIdentifier matchgroup=rhelpSection     start="\\item{" end="}" contained contains=rhelpDots
-syn region rhelpIdentifier matchgroup=rhelpSection start="\\method{" end=/}/ contained
+syn region rhelpIdentifier matchgroup=rhelpSection     start="\\pkg{" end="}" contains=rhelpLink
+syn region rhelpIdentifier matchgroup=rhelpSection start="\\method{" end="}" contained
+syn region rhelpIdentifier matchgroup=rhelpSection start="\\Rdversion{" end="}"
 
 " Highlighting of R code using an existing r.vim syntax file if available {{{1
 syn include @R syntax/r.vim
-syn match rhelpDots            "\\dots" containedin=@R
-syn region rhelpRcode matchgroup=Delimiter start="\\examples{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpSection
-syn region rhelpRcode matchgroup=Delimiter start="\\usage{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpIdentifier,rhelpS4method
-syn region rhelpRcode matchgroup=Delimiter start="\\synopsis{" matchgroup=Delimiter transparent end=/}/ contains=@R
-syn region rhelpRcode matchgroup=Delimiter start="\\special{" matchgroup=Delimiter transparent end=/}/ contains=@R contained
-syn region rhelpRcode matchgroup=Delimiter start="\\code{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpLink contained
-syn region rhelpS4method matchgroup=Delimiter start="\\S4method{.*}(" matchgroup=Delimiter transparent end=/)/ contains=@R,rhelpDots contained
-syn region rhelpSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter transparent end=/}/ contains=@R
 
 " Strings {{{1
-syn region rhelpString start=/"/ end=/"/ 
+syn region rhelpString start=/"/ skip=/\\"/ end=/"/ contains=rhelpSpecialChar,rhelpCodeSpecial,rhelpLink contained
+
+" Special characters in R strings
+syn match rhelpCodeSpecial display contained "\\\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"
 
-" Special characters  ( \$ \& \% \# \{ \} \_) {{{1
+" Special characters  ( \$ \& \% \# \{ \} \_)
 syn match rhelpSpecialChar        "\\[$&%#{}_]"
 
+
+" R code {{{1
+syn match rhelpDots            "\\dots" containedin=@R
+syn region rhelpRcode matchgroup=Delimiter start="\\examples{" matchgroup=Delimiter transparent end="}" contains=@R,rhelpLink,rhelpIdentifier,rhelpString,rhelpSpecialChar,rhelpSection
+syn region rhelpRcode matchgroup=Delimiter start="\\usage{" matchgroup=Delimiter transparent end="}" contains=@R,rhelpIdentifier,rhelpS4method
+syn region rhelpRcode matchgroup=Delimiter start="\\synopsis{" matchgroup=Delimiter transparent end="}" contains=@R
+syn region rhelpRcode matchgroup=Delimiter start="\\special{" matchgroup=Delimiter transparent end="}" contains=@R
+syn region rhelpRcode matchgroup=Delimiter start="\\code{" skip='\\\@<!{.\{-}\\\@<!}' transparent end="}" contains=@R,rhelpDots,rhelpString,rhelpSpecialChar,rhelpLink keepend
+syn region rhelpS4method matchgroup=Delimiter start="\\S4method{.*}(" matchgroup=Delimiter transparent end=")" contains=@R,rhelpDots
+syn region rhelpSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter transparent end="}" contains=@R
+
+" PreProc {{{1
+syn match rhelpPreProc "^#ifdef.*" 
+syn match rhelpPreProc "^#endif.*" 
+
 " Special Delimiters {{{1
 syn match rhelpDelimiter               "\\cr"
 syn match rhelpDelimiter               "\\tab "
@@ -111,9 +122,13 @@ syn match rhelpKeyword     "\\Psi"
 syn match rhelpKeyword "\\Omega"
 
 " Links {{{1
-syn region rhelpLink matchgroup=rhelpSection start="\\link{" end="}" contained keepend
-syn region rhelpLink matchgroup=rhelpSection start="\\link\[.\{-}\]{" end="}" contained keepend
-syn region rhelpLink matchgroup=rhelpSection start="\\linkS4class{" end="}" contained keepend
+syn region rhelpLink matchgroup=rhelpSection start="\\link{" end="}" contained keepend extend
+syn region rhelpLink matchgroup=rhelpSection start="\\link\[.\{-}\]{" end="}" contained keepend extend
+syn region rhelpLink matchgroup=rhelpSection start="\\linkS4class{" end="}" contained keepend extend
+
+" Verbatim like {{{1
+syn region rhelpVerbatim matchgroup=rhelpType start="\\samp{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment
+syn region rhelpVerbatim matchgroup=rhelpType start="\\verb{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment
 
 " Type Styles {{{1
 syn match rhelpType            "\\emph\>"
@@ -123,16 +138,18 @@ syn match rhelpType               "\\sQuote\>"
 syn match rhelpType            "\\dQuote\>"
 syn match rhelpType            "\\preformatted\>"
 syn match rhelpType            "\\kbd\>"
-syn match rhelpType            "\\samp\>"
 syn match rhelpType            "\\eqn\>"
 syn match rhelpType            "\\deqn\>"
 syn match rhelpType            "\\file\>"
 syn match rhelpType            "\\email\>"
 syn match rhelpType            "\\url\>"
+syn match rhelpType            "\\href\>"
 syn match rhelpType            "\\var\>"
 syn match rhelpType            "\\env\>"
 syn match rhelpType            "\\option\>"
 syn match rhelpType            "\\command\>"
+syn match rhelpType            "\\newcommand\>"
+syn match rhelpType            "\\renewcommand\>"
 syn match rhelpType            "\\dfn\>"
 syn match rhelpType            "\\cite\>"
 syn match rhelpType            "\\acronym\>"
@@ -140,6 +157,7 @@ syn match rhelpType         "\\acronym\>"
 " rhelp sections {{{1
 syn match rhelpSection         "\\encoding\>"
 syn match rhelpSection         "\\title\>"
+syn match rhelpSection         "\\item\>"
 syn match rhelpSection         "\\description\>"
 syn match rhelpSection         "\\concept\>"
 syn match rhelpSection         "\\arguments\>"
@@ -153,11 +171,11 @@ syn match rhelpSection            "\\keyword\>"
 syn match rhelpSection         "\\docType\>"
 syn match rhelpSection         "\\format\>"
 syn match rhelpSection         "\\source\>"
-syn match rhelpSection     "\\itemize\>"
-syn match rhelpSection     "\\describe\>"
-syn match rhelpSection     "\\enumerate\>"
-syn match rhelpSection     "\\item "
-syn match rhelpSection     "\\item$"
+syn match rhelpSection    "\\itemize\>"
+syn match rhelpSection    "\\describe\>"
+syn match rhelpSection    "\\enumerate\>"
+syn match rhelpSection    "\\item "
+syn match rhelpSection    "\\item$"
 syn match rhelpSection         "\\tabular{[lcr]*}"
 syn match rhelpSection         "\\dontrun\>"
 syn match rhelpSection         "\\dontshow\>"
@@ -165,16 +183,18 @@ syn match rhelpSection            "\\testonly\>"
 syn match rhelpSection         "\\donttest\>"
 
 " Freely named Sections {{{1
-syn region rhelpFreesec matchgroup=Delimiter start="\\section{" matchgroup=Delimiter transparent end=/}/ 
-syn region rhelpFreesubsec matchgroup=Delimiter start="\\subsection{" matchgroup=Delimiter transparent end=/}/ 
+syn region rhelpFreesec matchgroup=Delimiter start="\\section{" matchgroup=Delimiter transparent end="}"
+syn region rhelpFreesubsec matchgroup=Delimiter start="\\subsection{" matchgroup=Delimiter transparent end="}" 
+
+syn match rhelpDelimiter "{\|\[\|(\|)\|\]\|}"
 
 " R help file comments {{{1
-syn match rhelpComment /%.*$/ contained 
+syn match rhelpComment /%.*$/
 
 " Error {{{1
-syn region rhelpRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rhelpError,rhelpBraceError,rhelpCurlyError
-syn region rhelpRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rhelpError,rhelpBraceError,rhelpParenError
-syn region rhelpRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rhelpError,rhelpCurlyError,rhelpParenError
+syn region rhelpRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim
+syn region rhelpRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim
+syn region rhelpRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim
 syn match rhelpError      /[)\]}]/
 syn match rhelpBraceError /[)}]/ contained
 syn match rhelpCurlyError /[)\]]/ contained
@@ -190,17 +210,21 @@ if version >= 508 || !exists("did_rhelp_syntax_inits")
   else
     command -nargs=+ HiLink hi def link <args>
   endif
+  HiLink rhelpVerbatim    String
+  HiLink rhelpDelimiter   Delimiter
   HiLink rhelpIdentifier  Identifier
   HiLink rhelpString      String
+  HiLink rhelpCodeSpecial Special
   HiLink rhelpKeyword     Keyword
   HiLink rhelpDots        Keyword
   HiLink rhelpLink        Underlined
-  HiLink rhelpType           Type
+  HiLink rhelpType        Type
   HiLink rhelpSection     PreCondit
   HiLink rhelpError       Error
   HiLink rhelpBraceError  Error
   HiLink rhelpCurlyError  Error
   HiLink rhelpParenError  Error
+  HiLink rhelpPreProc     PreProc
   HiLink rhelpDelimiter   Delimiter
   HiLink rhelpComment     Comment
   HiLink rhelpRComment    Comment
diff --git a/runtime/syntax/rng.vim b/runtime/syntax/rng.vim
new file mode 100644 (file)
index 0000000..1ef864c
--- /dev/null
@@ -0,0 +1,25 @@
+" Vim syntax file
+" Language:    RELAX NG
+" Maintainer:  Jaromir Hradilek <jhradilek@gmail.com>
+" URL:         https://github.com/jhradilek/vim-rng
+" Last Change: 25 March 2013
+" Description: A syntax file for RELAX NG, a schema language for XML
+
+if exists('b:current_syntax')
+  finish
+endif
+
+do Syntax xml
+syn spell toplevel
+syn cluster xmlTagHook add=rngTagName
+syn case match
+
+syn keyword rngTagName anyName attribute choice data define div contained
+syn keyword rngTagName element empty except externalRef grammar contained
+syn keyword rngTagName group include interleave list mixed name contained
+syn keyword rngTagName notAllowed nsName oneOrMore optional param contained
+syn keyword rngTagName parentRef ref start text value zeroOrMore contained
+
+hi def link rngTagName Statement
+
+let b:current_syntax = 'rng'
index bc50475..6457803 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    RPL/2
 " Version:     0.15.15 against RPL/2 version 4.00pre7i
-" Last Change: 2003 august 24
+" Last Change: 2012 Feb 03 by Thilo Six
 " Maintainer:  Joël BERTRAND <rpl2@free.fr>
 " URL:         http://www.makalis.fr/~bertrand/rpl2/download/vim/indent/rpl.vim
 " Credits:     Nothing
@@ -14,6 +14,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Keyword characters (not used)
 " set iskeyword=33-127
 
@@ -488,4 +491,6 @@ endif
 
 let b:current_syntax = "rpl"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8 tw=132
index acb5616..159d14e 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         reStructuredText documentation format
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2010-01-23
+" Latest Revision:  2013-06-03
 
 if exists("b:current_syntax")
   finish
@@ -135,14 +135,34 @@ execute 'syn match rstHyperlinkReference' .
 syn match   rstStandaloneHyperlink  contains=@NoSpell
       \ "\<\%(\%(\%(https\=\|file\|ftp\|gopher\)://\|\%(mailto\|news\):\)[^[:space:]'\"<>]\+\|www[[:alnum:]_-]*\.[[:alnum:]_-]\+\.[^[:space:]'\"<>]\+\)[[:alnum:]/]"
 
-" TODO: Use better syncing.  I don’t know the specifics of syncing well enough,
-" though.
-syn sync minlines=50 linebreaks=1
+syn region rstCodeBlock contained matchgroup=rstDirective
+      \ start=+\%(sourcecode\|code\%(-block\)\=\)::\s+
+      \ skip=+^$+
+      \ end=+^\s\@!+ 
+      \ contains=@NoSpell
+syn cluster rstDirectives add=rstCodeBlock
+
+if !exists('g:rst_syntax_code_list')
+    let g:rst_syntax_code_list = ['vim', 'java', 'cpp', 'lisp', 'php', 'python', 'perl']
+endif
+
+for code in g:rst_syntax_code_list
+    unlet! b:current_syntax
+    exe 'syn include @rst'.code.' syntax/'.code.'.vim'
+    exe 'syn region rstDirective'.code.' matchgroup=rstDirective fold '
+                \.'start=#\%(sourcecode\|code\%(-block\)\=\)::\s\+'.code.'\s*$# '
+                \.'skip=#^$# '
+                \.'end=#^\s\@!# contains=@NoSpell,@rst'.code
+    exe 'syn cluster rstDirectives add=rstDirective'.code
+endfor
+
+" TODO: Use better syncing.
+syn sync minlines=50 linebreaks=2
 
 hi def link rstTodo                         Todo
 hi def link rstComment                      Comment
-hi def link rstSections                     Type
-hi def link rstTransition                   Type
+hi def link rstSections                     Title
+hi def link rstTransition                   rstSections
 hi def link rstLiteralBlock                 String
 hi def link rstQuotedLiteralBlock           String
 hi def link rstDoctestBlock                 PreProc
@@ -168,6 +188,7 @@ hi def link rstFootnoteReference            Identifier
 hi def link rstCitationReference            Identifier
 hi def link rstHyperLinkReference           Identifier
 hi def link rstStandaloneHyperlink          Identifier
+hi def link rstCodeBlock                    String
 
 let b:current_syntax = "rst"
 
index e3aee12..28f553d 100644 (file)
@@ -1,9 +1,7 @@
 " Vim syntax file
 " Language:            Ruby
 " Maintainer:          Doug Kearns <dougkearns@gmail.com>
-" Last Change:         2009 Dec 2
-" URL:                 http://vim-ruby.rubyforge.org
-" Anon CVS:            See above site
+" URL:                 https://github.com/vim-ruby/vim-ruby
 " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
 " ----------------------------------------------------------------------------
 "
@@ -32,8 +30,8 @@ endif
 
 " Operators
 if exists("ruby_operators")
-  syn match  rubyOperator       "\%([~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::\)"
-  syn match  rubyPseudoOperator  "\%(-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!=\)"
+  syn match  rubyOperator "[~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::"
+  syn match  rubyOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!="
   syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop
 endif
 
@@ -95,86 +93,89 @@ syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contain
 syn match rubyBlockArgument        "&[_[:lower:]][_[:alnum:]]"          contains=NONE display transparent
 
 syn match  rubyConstant                "\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
-syn match  rubyClassVariable   "@@\h\w*" display
-syn match  rubyInstanceVariable "@\h\w*"  display
-syn match  rubyGlobalVariable  "$\%(\h\w*\|-.\)"
-syn match  rubySymbol          "[]})\"':]\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
+syn match  rubyClassVariable   "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
+syn match  rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"  display
+syn match  rubyGlobalVariable  "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)"
+syn match  rubySymbol          "[]})\"':]\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
 syn match  rubySymbol          "[]})\"':]\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
-syn match  rubySymbol          "[]})\"':]\@<!:\%(\$\|@@\=\)\=\h\w*"
-syn match  rubySymbol          "[]})\"':]\@<!:\h\w*\%([?!=]>\@!\)\="
+syn match  rubySymbol          "[]})\"':]\@<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"
+syn match  rubySymbol          "[]})\"':]\@<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\="
 syn match  rubySymbol          "\%([{(,]\_s*\)\@<=\l\w*[!?]\=::\@!"he=e-1
-syn match  rubySymbol          "[]})\"':]\@<!\h\w*[!?]\=:\s\@="he=e-1
+syn match  rubySymbol          "[]})\"':]\@<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@="he=e-1
+syn match  rubySymbol          "\%([{(,]\_s*\)\@<=[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1
+syn match  rubySymbol          "[[:space:],{]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@="hs=s+1,he=e-1
 syn region rubySymbol          start="[]})\"':]\@<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape fold
 syn region rubySymbol          start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
 
-syn match  rubyBlockParameter    "\h\w*" contained
+syn match  rubyBlockParameter    "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained
 syn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\s*\)\@<=|" end="|" oneline display contains=rubyBlockParameter
 
 syn match rubyInvalidVariable   "$[^ A-Za-z_-]"
-syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
+syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]#
+syn match rubyPredefinedVariable "$\d\+"                                                                                  display
 syn match rubyPredefinedVariable "$_\>"                                                                                           display
 syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"                                                                      display
 syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"                                          display
 syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
 syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
-syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
-syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
-"Obsolete Global Constants
-"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
-"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
+syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\)\>\%(\s*(\)\@!"
+syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
+syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!"
 
 " Normal Regular Expression
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial keepend fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
 syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
 
 " Generalized Regular Expression
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"        end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"                               end="}[iomxneus]*"   skip="\\\\\|\\}"   contains=@rubyRegexpSpecial fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"                               end=">[iomxneus]*"   skip="\\\\\|\\>"   contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["                              end="\][iomxneus]*"  skip="\\\\\|\\\]"  contains=@rubyRegexpSpecial fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("                               end=")[iomxneus]*"   skip="\\\\\|\\)"   contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.? /]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"                                end="}[iomxneus]*"   skip="\\\\\|\\}"   contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"                                end=">[iomxneus]*"   skip="\\\\\|\\>"   contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["                               end="\][iomxneus]*"  skip="\\\\\|\\\]"  contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("                                end=")[iomxneus]*"   skip="\\\\\|\\)"   contains=@rubyRegexpSpecial fold
 
 " Normal String and Shell Command Output
-syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
-syn region rubyString matchgroup=rubyStringDelimiter start="'" end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial,@Spell fold
+syn region rubyString matchgroup=rubyStringDelimiter start="'" end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape,@Spell    fold
 syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`"  skip="\\\\\|\\`"  contains=@rubyStringSpecial fold
 
 " Generalized Single Quoted String, Symbol and Array of Strings
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{"                               end="}"   skip="\\\\\|\\}"   fold contains=rubyNestedCurlyBraces,rubyDelimEscape
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<"                               end=">"   skip="\\\\\|\\>"   fold contains=rubyNestedAngleBrackets,rubyDelimEscape
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\["                              end="\]"  skip="\\\\\|\\\]"  fold contains=rubyNestedSquareBrackets,rubyDelimEscape
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]("                               end=")"   skip="\\\\\|\\)"   fold contains=rubyNestedParentheses,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"  end="\z1" skip="\\\\\|\\\z1" fold
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]{"                                end="}"   skip="\\\\\|\\}"   fold contains=rubyNestedCurlyBraces,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]<"                                end=">"   skip="\\\\\|\\>"   fold contains=rubyNestedAngleBrackets,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]\["                               end="\]"  skip="\\\\\|\\\]"  fold contains=rubyNestedSquareBrackets,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]("                                end=")"   skip="\\\\\|\\)"   fold contains=rubyNestedParentheses,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]{"                              end="}"   skip="\\\\\|\\}"   fold contains=rubyNestedCurlyBraces,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]<"                              end=">"   skip="\\\\\|\\>"   fold contains=rubyNestedAngleBrackets,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]\["                             end="\]"  skip="\\\\\|\\\]"  fold contains=rubyNestedSquareBrackets,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]("                              end=")"   skip="\\\\\|\\)"   fold contains=rubyNestedParentheses,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%q "                                  end=" "   skip="\\\\\|\\)"   fold
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.? /]\)"   end="\z1" skip="\\\\\|\\\z1" fold
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{"                                  end="}"   skip="\\\\\|\\}"   fold contains=rubyNestedCurlyBraces,rubyDelimEscape
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<"                                  end=">"   skip="\\\\\|\\>"   fold contains=rubyNestedAngleBrackets,rubyDelimEscape
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\["                                 end="\]"  skip="\\\\\|\\\]"  fold contains=rubyNestedSquareBrackets,rubyDelimEscape
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s("                                  end=")"   skip="\\\\\|\\)"   fold contains=rubyNestedParentheses,rubyDelimEscape
 
 " Generalized Double Quoted String and Array of Strings and Shell Command Output
 " Note: %= is not matched here as the beginning of a double quoted string
 syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"      end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"                             end="}"   skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape    fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"                             end=">"   skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape  fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["                                    end="\]"  skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("                             end=")"   skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\={"                                    end="}"   skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=<"                                    end=">"   skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape  fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=\["                                   end="\]"  skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=("                                    end=")"   skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx] "                                end=" "   skip="\\\\\|\\)"   contains=@rubyStringSpecial fold
 
 " Here Document
-syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs\%(\h\w*\)+  end=+$+ oneline contains=ALLBUT,@rubyNotTop
+syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+    end=+$+ oneline contains=ALLBUT,@rubyNotTop
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
 
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<\z(\h\w*\)\ze+hs=s+2   matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<"\z([^"]*\)"\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<'\z([^']*\)'\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart                    fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<`\z([^`]*\)`\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2      matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc                        fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
 
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-\z(\h\w*\)\ze+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart                   fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-"\z([^"]*\)"\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart                    fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
 
 if exists('main_syntax') && main_syntax == 'eruby'
   let b:ruby_no_expensive = 1
@@ -187,7 +188,7 @@ syn match  rubyClassDeclaration    "[^[:space:];#<]\+"       contained contains=rubyC
 syn match  rubyModuleDeclaration   "[^[:space:];#<]\+"  contained contains=rubyConstant,rubyOperator
 syn match  rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration
 syn match  rubyFunction "\%(\s\|^\)\@<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
-syn match  rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|==\|=\~\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
+syn match  rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
 
 syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyFunction,rubyBlockParameter
 
@@ -198,7 +199,7 @@ syn match   rubyControl            "\<\%(and\|break\|in\|next\|not\|or\|redo\|rescue
 syn match   rubyOperator       "\<defined?" display
 syn match   rubyKeyword               "\<\%(super\|yield\)\>[?!]\@!"
 syn match   rubyBoolean               "\<\%(true\|false\)\>[?!]\@!"
-syn match   rubyPseudoVariable "\<\%(nil\|self\|__FILE__\|__LINE__\)\>[?!]\@!"
+syn match   rubyPseudoVariable "\<\%(nil\|self\|__ENCODING__\|__FILE__\|__LINE__\|__callee__\|__method__\)\>[?!]\@!" " TODO: reorganise
 syn match   rubyBeginEnd       "\<\%(BEGIN\|END\)\>[?!]\@!"
 
 " Expensive Mode - match 'end' with the appropriate opening keyword for syntax
@@ -220,13 +221,13 @@ if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
 
   syn region rubyDoBlock      matchgroup=rubyControl start="\<do\>" end="\<end\>"                 contains=ALLBUT,@rubyNotTop fold
   " curly bracket block or hash literal
-  syn region rubyCurlyBlock   start="{" end="}"                                                          contains=ALLBUT,@rubyNotTop fold
-  syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold
+  syn region rubyCurlyBlock    matchgroup=rubyCurlyBlockDelimiter  start="{" end="}"                           contains=ALLBUT,@rubyNotTop fold
+  syn region rubyArrayLiteral  matchgroup=rubyArrayDelimiter       start="\%(\w\|[\]})]\)\@<!\[" end="]"       contains=ALLBUT,@rubyNotTop fold
 
   " statements without 'do'
   syn region rubyBlockExpression       matchgroup=rubyControl    start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
   syn region rubyCaseExpression               matchgroup=rubyConditional start="\<case\>"  end="\<end\>" contains=ALLBUT,@rubyNotTop fold
-  syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
+  syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
 
   syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!" contained containedin=rubyCaseExpression
   syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression
@@ -239,7 +240,7 @@ if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
   syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold
 
   if !exists("ruby_minlines")
-    let ruby_minlines = 50
+    let ruby_minlines = 500
   endif
   exec "syn sync minlines=" . ruby_minlines
 
@@ -253,7 +254,7 @@ endif
 
 " Special Methods
 if !exists("ruby_no_special_methods")
-  syn keyword rubyAccess    public protected private module_function
+  syn keyword rubyAccess    public protected private public_class_method private_class_method public_constant private_constant module_function
   " attr is a common variable name
   syn match   rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!"
   syn keyword rubyAttribute attr_accessor attr_reader attr_writer
@@ -262,17 +263,17 @@ if !exists("ruby_no_special_methods")
   syn keyword rubyException raise fail catch throw
   " false positive with 'include?'
   syn match   rubyInclude   "\<include\>[?!]\@!"
-  syn keyword rubyInclude   autoload extend load require
+  syn keyword rubyInclude   autoload extend load prepend require require_relative
   syn keyword rubyKeyword   callcc caller lambda proc
 endif
 
 " Comments and Documentation
 syn match   rubySharpBang "\%^#!.*" display
-syn keyword rubyTodo     FIXME NOTE TODO OPTIMIZE XXX contained
+syn keyword rubyTodo     FIXME NOTE TODO OPTIMIZE XXX todo contained
 syn match   rubyComment   "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
 if !exists("ruby_no_comment_fold")
   syn region rubyMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
-  syn region rubyDocumentation   start="^=begin\ze\%(\s.*\)\=$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell fold
+  syn region rubyDocumentation   start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold
 else
   syn region rubyDocumentation   start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
 endif
@@ -286,12 +287,12 @@ syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until
 syn match rubyKeywordAsMethod "\<\%(alias\|begin\|case\|class\|def\|do\|end\)[?!]" transparent contains=NONE
 syn match rubyKeywordAsMethod "\<\%(if\|module\|undef\|unless\|until\|while\)[?!]" transparent contains=NONE
 
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"   transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"      transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"               transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>"              transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>"               transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"      transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"          transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>"    transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"                   transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|prepend\|private\|proc\|protected\)\>"         transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|require_relative\|raise\|throw\|trap\)\>" transparent contains=NONE
 
 " __END__ Directive
 syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
@@ -330,7 +331,6 @@ hi def link rubyPredefinedVariable  rubyPredefinedIdentifier
 hi def link rubySymbol                 Constant
 hi def link rubyKeyword                        Keyword
 hi def link rubyOperator               Operator
-hi def link rubyPseudoOperator         rubyOperator
 hi def link rubyBeginEnd               Statement
 hi def link rubyAccess                 Statement
 hi def link rubyAttribute              Statement
@@ -351,6 +351,7 @@ hi def link rubySharpBang           PreProc
 hi def link rubyRegexpDelimiter                rubyStringDelimiter
 hi def link rubySymbolDelimiter                rubyStringDelimiter
 hi def link rubyStringDelimiter                Delimiter
+hi def link rubyHeredoc                        rubyString
 hi def link rubyString                 String
 hi def link rubyRegexpEscape           rubyRegexpSpecial
 hi def link rubyRegexpQuantifier       rubyRegexpSpecial
index 976dca2..dc70e1f 100644 (file)
@@ -1,7 +1,9 @@
 " Vim syntax file
 " Language:    SAS
 " Maintainer:  James Kidd <james.kidd@covance.com>
-" Last Change:  18 Jul 2008 by Paulo Tanimoto <ptanimoto@gmail.com>
+" Last Change:  2012 Apr 20
+"               Corrected bug causing some keywords to appear as strings instead
+"               18 Jul 2008 by Paulo Tanimoto <ptanimoto@gmail.com>
 "               Fixed comments with * taking multiple lines.
 "               Fixed highlighting of macro keywords.
 "               Added words to cases that didn't fit anywhere.
@@ -211,16 +213,7 @@ syn keyword sasTodo        TODO TBD FIXME contained
 
 " These don't fit anywhere else (Bob Heckel).
 " Added others that were missing.
-syn match sasUnderscore        "_ALL_"
-syn match sasUnderscore "_AUTOMATIC_"
-syn match sasUnderscore        "_CHARACTER_"
-syn match sasUnderscore        "_INFILE_"
-syn match sasUnderscore        "_N_"
-syn match sasUnderscore "_NAME_"
-syn match sasUnderscore        "_NULL_"
-syn match sasUnderscore        "_NUMERIC_"
-syn match sasUnderscore "_USER_"
-syn match sasUnderscore        "_WEBOUT_"
+syn keyword sasUnderscore      _ALL_ _AUTOMATIC_ _CHARACTER_ _INFILE_ _N_ _NAME_ _NULL_ _NUMERIC_ _USER_ _WEBOUT_
 
 " End of SAS Functions
 
index aa5f5e9..2ea0722 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    Sass
 " Maintainer:  Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:   *.sass
-" Last Change: 2010 Aug 9
+" Last Change: 2013 May 30
 
 if exists("b:current_syntax")
   finish
@@ -17,8 +17,8 @@ syn cluster sassCssAttributes contains=css.*Attr,scssComment,cssValue.*,cssColor
 
 syn region sassDefinition matchgroup=cssBraces start="{" end="}" contains=TOP
 
-syn match sassProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition
-syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
+syn match sassProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition
+syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
 syn match sassProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
 syn match sassCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@sassCssAttributes,sassVariable,sassFunction,sassInterpolation
 syn match sassDefault "!default\>" contained
@@ -34,14 +34,19 @@ syn match sassFunction "\<\%(unquote\|quote\)\>(\@=" contained
 syn match sassFunction "\<\%(percentage\|round\|ceil\|floor\|abs\)\>(\@=" contained
 syn match sassFunction "\<\%(type-of\|unit\|unitless\|comparable\)\>(\@=" contained
 
-syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,sassProperty
+syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,cssPseudoClass,sassProperty
 
 syn match sassMixinName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
-syn match sassMixin  "^="               nextgroup=sassMixinName
+syn match sassMixin  "^="               nextgroup=sassMixinName skipwhite
 syn match sassMixin  "\%([{};]\s*\|^\s*\)\@<=@mixin"   nextgroup=sassMixinName skipwhite
 syn match sassMixing "^\s\+\zs+"        nextgroup=sassMixinName
 syn match sassMixing "\%([{};]\s*\|^\s*\)\@<=@include" nextgroup=sassMixinName skipwhite
 syn match sassExtend "\%([{};]\s*\|^\s*\)\@<=@extend"
+syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%"   nextgroup=sassMixinName skipwhite
+
+syn match sassFunctionName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
+syn match sassFunctionDecl "\%([{};]\s*\|^\s*\)\@<=@function"   nextgroup=sassFunctionName skipwhite
+syn match sassReturn "\%([{};]\s*\|^\s*\)\@<=@return"
 
 syn match sassEscape     "^\s*\zs\\"
 syn match sassIdChar     "#[[:alnum:]_-]\@=" nextgroup=sassId
@@ -53,11 +58,11 @@ syn match sassAmpersand  "&"
 " TODO: Attribute namespaces
 " TODO: Arithmetic (including strings and concatenation)
 
-syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssURL,cssUnicodeEscape,cssMediaType
+syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType
 syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction
 syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction
-syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction
-syn keyword sassFor from to through contained
+syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\|each\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction
+syn keyword sassFor from to through in contained
 
 syn keyword sassTodo        FIXME NOTE TODO OPTIMIZE XXX contained
 syn region  sassComment     start="^\z(\s*\)//"  end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
@@ -70,7 +75,10 @@ hi def link sassVariable                Identifier
 hi def link sassFunction                Function
 hi def link sassMixing                  PreProc
 hi def link sassMixin                   PreProc
+hi def link sassPlaceholder             PreProc
 hi def link sassExtend                  PreProc
+hi def link sassFunctionDecl            PreProc
+hi def link sassReturn                  PreProc
 hi def link sassTodo                    Todo
 hi def link sassInclude                 Include
 hi def link sassDebug                   sassControl
index f987034..a210b0c 100644 (file)
@@ -1,13 +1,13 @@
 " Vim syntax file
 " Language:    Scheme (R5RS + some R6RS extras)
-" Last Change: 2009 Nov 27
+" Last Change: 2012 May 13
 " Maintainer:  Sergey Khorev <sergey.khorev@gmail.com>
 " Original author:     Dirk van Deun <dirk@igwe.vub.ac.be>
 
 " This script incorrectly recognizes some junk input as numerals:
 " parsing the complete system of Scheme numerals using the pattern
 " language is practically impossible: I did a lax approximation.
+
 " MzScheme extensions can be activated with setting is_mzscheme variable
 
 " Suggestions and bug reports are solicited by the author.
@@ -22,6 +22,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 " Fascist highlighting: everything that doesn't fit the rules is an error...
@@ -117,7 +120,7 @@ syn keyword schemeFunc hashtable? hashtable-size hashtable-ref hashtable-set!
 syn keyword schemeFunc hashtable-delete! hashtable-contains? hashtable-update!
 syn keyword schemeFunc hashtable-copy hashtable-clear! hashtable-keys
 syn keyword schemeFunc hashtable-entries hashtable-equivalence-function hashtable-hash-function
-syn keyword schemeFunc hashtable-mutable? equal-hash string-hash string-ci-hash symbol-hash 
+syn keyword schemeFunc hashtable-mutable? equal-hash string-hash string-ci-hash symbol-hash
 syn keyword schemeFunc find for-all exists filter partition fold-left fold-right
 syn keyword schemeFunc remp remove remv remq memp assp cons*
 
@@ -154,11 +157,11 @@ syn region schemeStruc matchgroup=Delimiter start="\[" matchgroup=Delimiter end=
 syn region schemeStruc matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALL
 
 " Simple literals:
-syn region schemeString start=+\%(\\\)\@<!"+ skip=+\\[\\"]+ end=+"+
+syn region schemeString start=+\%(\\\)\@<!"+ skip=+\\[\\"]+ end=+"+ contains=@Spell
 
 " Comments:
 
-syn match      schemeComment   ";.*$"
+syn match      schemeComment   ";.*$" contains=@Spell
 
 
 " Writing out the complete description of Scheme numerals without
@@ -189,7 +192,7 @@ syn match schemeCharacter "#\\x[0-9a-fA-F]\+"
 if exists("b:is_mzscheme") || exists("is_mzscheme")
     " MzScheme extensions
     " multiline comment
-    syn region schemeComment start="#|" end="|#"
+    syn region schemeComment start="#|" end="|#" contains=@Spell
 
     " #%xxx are the special MzScheme identifiers
     syn match schemeOther "#%[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
@@ -207,7 +210,7 @@ if exists("b:is_mzscheme") || exists("is_mzscheme")
     syn keyword schemeExtSyntax free-identifier=? bound-identifier=? module-identifier=? syntax-object->datum
     syn keyword schemeExtSyntax datum->syntax-object
     syn keyword schemeExtSyntax let-values let*-values letrec-values set!-values fluid-let parameterize begin0
-    syn keyword schemeExtSyntax error raise opt-lambda define-values unit unit/sig define-signature 
+    syn keyword schemeExtSyntax error raise opt-lambda define-values unit unit/sig define-signature
     syn keyword schemeExtSyntax invoke-unit/sig define-values/invoke-unit/sig compound-unit/sig import export
     syn keyword schemeExtSyntax link syntax quasisyntax unsyntax with-syntax
 
@@ -231,7 +234,7 @@ if exists("b:is_mzscheme") || exists("is_mzscheme")
     syn keyword schemeExtFunc exn:i/o:tcp? exn:i/o:udp? exn:misc? exn:misc:application? exn:misc:unsupported? exn:module? exn:read? exn:read:non-char?
     syn keyword schemeExtFunc exn:special-comment? exn:syntax? exn:thread? exn:user? exn:variable? exn:application:mismatch?
     " Command-line parsing
-    syn keyword schemeExtFunc command-line current-command-line-arguments once-any help-labels multi once-each 
+    syn keyword schemeExtFunc command-line current-command-line-arguments once-any help-labels multi once-each
 
     " syntax quoting, unquoting and quasiquotation
     syn region schemeUnquote matchgroup=Delimiter start="#," end=![ \t\[\]()";]!me=e-1 contains=ALL
@@ -247,7 +250,7 @@ endif
 
 if exists("b:is_chicken") || exists("is_chicken")
     " multiline comment
-    syntax region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeMultilineComment
+    syntax region schemeMultilineComment start=/#|/ end=/|#/ contains=@Spell,schemeMultilineComment
 
     syn match schemeOther "##[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
     syn match schemeExtSyntax "#:[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
@@ -262,8 +265,8 @@ if exists("b:is_chicken") || exists("is_chicken")
     syn keyword schemeExtFunc ##core#inline ##sys#error ##sys#update-errno
 
     " here-string
-    syn region schemeString start=+#<<\s*\z(.*\)+ end=+^\z1$+
+    syn region schemeString start=+#<<\s*\z(.*\)+ end=+^\z1$+ contains=@Spell
+
     if filereadable(expand("<sfile>:p:h")."/cpp.vim")
        unlet! b:current_syntax
        syn include @ChickenC <sfile>:p:h/cpp.vim
@@ -282,7 +285,7 @@ if exists("b:is_chicken") || exists("is_chicken")
 
     " suggested by Alex Queiroz
     syn match schemeExtSyntax "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
-    syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ 
+    syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ contains=@Spell
 endif
 
 " Synchronization and the wrapping up...
@@ -322,3 +325,6 @@ if version >= 508 || !exists("did_scheme_syntax_inits")
 endif
 
 let b:current_syntax = "scheme"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index bb201ca..7fa0e04 100644 (file)
@@ -3,7 +3,7 @@
 " License: This file can be redistribued and/or modified under the same terms
 "   as Vim itself.
 " URL: http://netstudent.polito.it/vim_syntax/
-" Last Change: 2006-09-27
+" Last Change: 2012 Feb 03 by Thilo Six
 
 if version < 600
         syntax clear
@@ -11,6 +11,9 @@ elseif exists("b:current_syntax")
         finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Always ignore case
 syn case ignore
 
@@ -24,13 +27,13 @@ syn match sdIPSpecial /\%(127\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}\)/ contained
 syn match sdIP contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}/ contains=@sdIPCluster
 
 " Statements
-syn keyword sdStatement AGGREGATE AUDIO_CHANNELS 
+syn keyword sdStatement AGGREGATE AUDIO_CHANNELS
 syn keyword sdStatement BYTE_PER_PCKT BIT_PER_SAMPLE BITRATE
 syn keyword sdStatement CLOCK_RATE CODING_TYPE CREATOR
 syn match sdStatement /^\s*CODING_TYPE\>/ nextgroup=sdCoding skipwhite
 syn match sdStatement /^\s*ENCODING_NAME\>/ nextgroup=sdEncoding skipwhite
 syn keyword sdStatement FILE_NAME FRAME_LEN FRAME_RATE FORCE_FRAME_RATE
-syn keyword sdStatement LICENSE 
+syn keyword sdStatement LICENSE
 syn match sdStatement /^\s*MEDIA_SOURCE\>/ nextgroup=sdSource skipwhite
 syn match sdStatement /^\s*MULTICAST\>/ nextgroup=sdIP skipwhite
 syn keyword sdStatement PAYLOAD_TYPE PKT_LEN PRIORITY
@@ -73,3 +76,6 @@ if version >= 508 || !exists("did_config_syntax_inits")
 endif
 
 let b:current_syntax = "sd"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index d0165e7..b524b72 100644 (file)
@@ -1,6 +1,6 @@
 " Vim syntax file
 " Language:    SDL
-" Maintainer:  Michael Piefel <piefel@informatik.hu-berlin.de>
+" Maintainer:  Michael Piefel <entwurf@piefel.de>
 " Last Change: 2 May 2001
 
 " For version 5.x: Clear all syntax items
index 28a26e6..6cf9395 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language: FreeBSD send-pr file
 " Maintainer: Hendrik Scholz <hendrik@scholz.net>
-" Last Change: 2002 Mar 21
+" Last Change: 2012 Feb 03
 "
 " http://raisdorf.net/files/misc/send-pr.vim
 
@@ -13,6 +13,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn match sendprComment /^SEND-PR:/
 " email address
 syn match sendprType /<[a-zA-Z0-9\-\_\.]*@[a-zA-Z0-9\-\_\.]*>/
@@ -30,3 +33,6 @@ hi def link sendprComment   Comment
 hi def link sendprType      Type
 hi def link sendprString    String
 hi def link sendprLabel     Label
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 6a69fc5..13551b2 100644 (file)
@@ -12,6 +12,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case ignore
 
@@ -76,4 +78,8 @@ if version >= 508 || !exists("did_sgmldecl_syntax_init")
 endif
 
 let b:current_syntax = "sgmldecl"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set tw=78 ts=4:
index 99e6ea2..28224f6 100644 (file)
@@ -1,8 +1,7 @@
 " Vim syntax file
 " Language:    SGML-linuxdoc (supported by old sgmltools-1.x)
-"              (for more information, visit www.sgmltools.org)
 " Maintainer:  SungHyun Nam <goweol@gmail.com>
-" Last Change: 2008 Sep 17
+" Last Change: 2013 May 13
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -29,7 +28,7 @@ syn region sgmllnxSpecial     oneline start="&" end=";"
 syn keyword sgmllnxTagName contained article author date toc title sect verb
 syn keyword sgmllnxTagName contained abstract tscreen p itemize item enum
 syn keyword sgmllnxTagName contained descrip quote htmlurl code ref
-syn keyword sgmllnxTagName contained tt tag bf
+syn keyword sgmllnxTagName contained tt tag bf it url
 syn match   sgmllnxTagName contained "sect\d\+"
 
 " Comments
index 26df32d..0bec249 100644 (file)
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:            shell (sh) Korn shell (ksh) bash (sh)
-" Maintainer:          Dr. Charles E. Campbell, Jr.  <NdrOchipS@PcampbellAfamily.Mbiz>
+" Maintainer:          Charles E. Campbell  <NdrOchipS@PcampbellAfamily.Mbiz>
 " Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int>
-" Last Change:         Aug 04, 2010
-" Version:             114
+" Last Change:         Jul 02, 2013
+" Version:             131
 " URL:         http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 " For options and settings, please use:      :help ft-sh-syntax
 " This file includes many ideas from ?ric Brunet (eric.brunet@ens.fr)
@@ -16,12 +16,42 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+" AFAICT "." should be considered part of the iskeyword.  Using iskeywords in
+" syntax is dicey, so the following code permits the user to
+"  g:sh_isk set to a string    : specify iskeyword.
+"  g:sh_noisk exists   : don't change iskeyword
+"  g:sh_noisk does not exist   : (default) append "." to iskeyword
+if exists("g:sh_isk") && type(g:sh_isk) == 1   " user specifying iskeyword
+ exe "setl isk=".g:sh_isk
+elseif !exists("g:sh_noisk")           " optionally prevent appending '.' to iskeyword
+ setl isk+=.
+endif
+
+" trying to answer the question: which shell is /bin/sh, really?
+" If the user has not specified any of g:is_kornshell, g:is_bash, g:is_posix, g:is_sh, then guess.
+if !exists("g:is_kornshell") && !exists("g:is_bash") && !exists("g:is_posix") && !exists("g:is_sh")
+ let s:shell = ""
+ if executable("/bin/sh")
+  let s:shell = resolve("/bin/sh")
+ elseif executable("/usr/bin/sh")
+  let s:shell = resolve("/usr/bin/sh")
+ endif
+ if     s:shell =~ 'bash$'
+  let g:is_bash= 1
+ elseif s:shell =~ 'ksh$'
+  let g:is_kornshell = 1
+ elseif s:shell =~ 'dash$'
+  let g:is_posix = 1
+ endif
+ unlet s:shell
+endif
+
 " handling /bin/sh with is_kornshell/is_sh {{{1
 " b:is_sh is set when "#! /bin/sh" is found;
 " However, it often is just a masquerade by bash (typically Linux)
 " or kornshell (typically workstations with Posix "sh").
-" So, when the user sets "is_bash" or "is_kornshell",
-" a b:is_sh is converted into b:is_bash/b:is_kornshell,
+" So, when the user sets "g:is_bash", "g:is_kornshell",
+" or "g:is_posix", a b:is_sh is converted into b:is_bash/b:is_kornshell,
 " respectively.
 if !exists("b:is_kornshell") && !exists("b:is_bash")
   if exists("g:is_posix") && !exists("g:is_kornshell")
@@ -50,16 +80,19 @@ elseif g:sh_fold_enabled != 0 && !has("folding")
  echomsg "Ignoring g:sh_fold_enabled=".g:sh_fold_enabled."; need to re-compile vim for +fold support"
 endif
 if !exists("s:sh_fold_functions")
- let s:sh_fold_functions = 1
+ let s:sh_fold_functions= and(g:sh_fold_enabled,1)
 endif
 if !exists("s:sh_fold_heredoc")
- let s:sh_fold_heredoc   = 2
+ let s:sh_fold_heredoc  = and(g:sh_fold_enabled,2)
 endif
 if !exists("s:sh_fold_ifdofor")
- let s:sh_fold_ifdofor   = 4
+ let s:sh_fold_ifdofor  = and(g:sh_fold_enabled,4)
 endif
 if g:sh_fold_enabled && &fdm == "manual"
- setlocal fdm=syntax
+ " Given that  the     user provided g:sh_fold_enabled
+ "     AND     g:sh_fold_enabled is manual (usual default)
+ "     implies a desire for syntax-based folding
+ setl fdm=syntax
 endif
 
 " sh syntax is case sensitive {{{1
@@ -74,17 +107,17 @@ endif
 syn cluster shArithParenList   contains=shArithmetic,shCaseEsac,shDeref,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement
 syn cluster shArithList        contains=@shArithParenList,shParenError
 syn cluster shCaseEsacList     contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange
-syn cluster shCaseList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq
-syn cluster shColonList        contains=@shCaseList
-syn cluster shCommandSubList   contains=shArithmetic,shDeref,shDerefSimple,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shSingleQuote,shExDoubleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest,shCtrlSeq,shSpecial
+syn cluster shCaseList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq
+"syn cluster shColonList       contains=@shCaseList
+syn cluster shCommandSubList   contains=shArithmetic,shDeref,shDerefSimple,shEcho,shEscape,shNumber,shOption,shPosnParm,shExSingleQuote,shSingleQuote,shExDoubleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest,shCtrlSeq,shSpecial,shCmdParenRegion
 syn cluster shCurlyList        contains=shNumber,shComma,shDeref,shDerefSimple,shDerefSpecial
-syn cluster shDblQuoteList     contains=shCommandSub,shDeref,shDerefSimple,shPosnParm,shCtrlSeq,shSpecial
+syn cluster shDblQuoteList     contains=shCommandSub,shDeref,shDerefSimple,shEscape,shPosnParm,shCtrlSeq,shSpecial
 syn cluster shDerefList        contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError,shDerefPPS
 syn cluster shDerefVarList     contains=shDerefOp,shDerefVarArray,shDerefOpError
-syn cluster shEchoList contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shExpr,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote
+syn cluster shEchoList contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shEscape,shExpr,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote
 syn cluster shExprList1        contains=shCharClass,shNumber,shOperator,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shDblBrace,shDeref,shDerefSimple,shCtrlSeq
 syn cluster shExprList2        contains=@shExprList1,@shCaseList,shTest
-syn cluster shFunctionList     contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq
+syn cluster shFunctionList     contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn cluster shFunctionList    add=shRepeat
  syn cluster shFunctionList    add=shDblBrace,shDblParen
@@ -92,16 +125,16 @@ endif
 syn cluster shHereBeginList    contains=@shCommandSubList
 syn cluster shHereList contains=shBeginHere,shHerePayload
 syn cluster shHereListDQ       contains=shBeginHere,@shDblQuoteList,shHerePayload
-syn cluster shIdList   contains=shCommandSub,shWrapLineOperator,shSetOption,shDeref,shDerefSimple,shRedir,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq,shStringSpecial
-syn cluster shLoopList contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest,@shErrorList,shSet
-syn cluster shSubShList        contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator
-syn cluster shTestList contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shExDoubleQuote,shDoubleQuote,shExpr,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shTestOpr,shTest,shCtrlSeq
-
+syn cluster shIdList   contains=shCommandSub,shWrapLineOperator,shSetOption,shDeref,shDerefSimple,shRedir,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq,shStringSpecial,shAtExpr
+syn cluster shIfList   contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey,shFunctionOne,shFunctionTwo
+syn cluster shLoopList contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest,@shErrorList,shSet,shOption
+syn cluster shSubShList        contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator
+syn cluster shTestList contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shExDoubleQuote,shDoubleQuote,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shTestOpr,shTest,shCtrlSeq
 " Echo: {{{1
 " ====
 " This one is needed INSIDE a CommandSub, so that `echo bla` be correct
-syn region shEcho matchgroup=shStatement start="\<echo\>"  skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment
-syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment
+syn region shEcho matchgroup=shStatement start="\<echo\>"  skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment
+syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment
 syn match  shEchoQuote contained       '\%(\\\\\)*\\["`'()]'
 
 " This must be after the strings, so that ... \" will be correct
@@ -111,29 +144,31 @@ syn region shEmbeddedEcho contained matchgroup=shStatement start="\<print\>" ski
 " =====
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn match shStatement "\<alias\>"
- syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\w\+\)\@=" skip="\\$" end="\>\|`"
- syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\w\+=\)\@=" skip="\\$" end="="
+ syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+\)\@="  skip="\\$" end="\>\|`"
+ syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+=\)\@=" skip="\\$" end="="
 endif
 
 " Error Codes: {{{1
 " ============
-syn match   shDoError "\<done\>"
-syn match   shIfError "\<fi\>"
-syn match   shInError "\<in\>"
-syn match   shCaseError ";;"
-syn match   shEsacError "\<esac\>"
-syn match   shCurlyError "}"
-syn match   shParenError ")"
-syn match   shOK       '\.\(done\|fi\|in\|esac\)'
-if exists("b:is_kornshell")
- syn match     shDTestError "]]"
+if !exists("g:sh_no_error")
+ syn match   shDoError "\<done\>"
+ syn match   shIfError "\<fi\>"
+ syn match   shInError "\<in\>"
+ syn match   shCaseError ";;"
+ syn match   shEsacError "\<esac\>"
+ syn match   shCurlyError "}"
+ syn match   shParenError ")"
+ syn match   shOK      '\.\(done\|fi\|in\|esac\)'
+ if exists("b:is_kornshell")
+  syn match     shDTestError "]]"
+ endif
+ syn match     shTestError "]"
 endif
-syn match     shTestError "]"
 
 " Options: {{{1
 " ====================
-syn match   shOption   "\s\zs[-+][-_a-zA-Z0-9]\+\>"
-syn match   shOption   "\s\zs--[^ \t$`'"|]\+"
+syn match   shOption   "\s\zs[-+][-_a-zA-Z0-9#]\+"
+syn match   shOption   "\s\zs--[^ \t$`'"|);]\+"
 
 " File Redirection Highlighted As Operators: {{{1
 "===========================================
@@ -152,8 +187,8 @@ syn match   shPattern       "\<\S\+\())\)\@="       contained contains=shExSingleQuote,shSin
 
 " Subshells: {{{1
 " ==========
-syn region shExpr  transparent matchgroup=shExprRegion  start="{" end="}"      contains=@shExprList2 nextgroup=shMoreSpecial
-syn region shSubSh transparent matchgroup=shSubShRegion start="(" end=")"      contains=@shSubShList nextgroup=shMoreSpecial
+syn region shExpr  transparent matchgroup=shExprRegion  start="{" end="}"              contains=@shExprList2 nextgroup=shMoreSpecial
+syn region shSubSh transparent matchgroup=shSubShRegion start="[^(]\zs(" end=")"       contains=@shSubShList nextgroup=shMoreSpecial
 
 " Tests: {{{1
 "=======
@@ -162,7 +197,7 @@ syn region shTest   transparent matchgroup=shStatement start="\<test\s" skip=+\\\\
 syn match  shTestOpr   contained       "<=\|>=\|!=\|==\|-.\>\|-\(nt\|ot\|ef\|eq\|ne\|lt\|le\|gt\|ge\)\>\|[!<>]"
 syn match  shTestOpr   contained       '=' skipwhite nextgroup=shTestDoubleQuote,shTestSingleQuote,shTestPattern
 syn match  shTestPattern       contained       '\w\+'
-syn match  shTestDoubleQuote   contained       '"[^"]*"'
+syn match  shTestDoubleQuote   contained       '\%(\%(\\\\\)*\\\)\@<!"[^"]*"'
 syn match  shTestSingleQuote   contained       '\\.'
 syn match  shTestSingleQuote   contained       "'[^']*'"
 if exists("b:is_kornshell") || exists("b:is_bash")
@@ -176,14 +211,15 @@ syn match   shCharClass   contained       "\[:\(backspace\|escape\|return\|xdigit\|alnum
 
 " Loops: do, if, while, until {{{1
 " ======
-if (g:sh_fold_enabled % (s:sh_fold_ifdofor * 2))/s:sh_fold_ifdofor
+if s:sh_fold_ifdofor
  syn region shDo       fold transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList
- syn region shIf       fold transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional end="\<;\_s*then\>" end="\<fi\>"   contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey
- syn region shFor      fold matchgroup=shLoop start="\<for\_s" end="\<in\_s" end="\<do\>"me=e-2        contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
+ syn region shIf       fold transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>"   contains=@shIfList
+ syn region shFor      fold matchgroup=shLoop start="\<for\ze\_s\s*\%(((\)\@!" end="\<in\_s" end="\<do\>"me=e-2        contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
 else
  syn region shDo       transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList
- syn region shIf       transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional end="\<;\_s*then\>" end="\<fi\>"   contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey
- syn region shFor      matchgroup=shLoop start="\<for\_s" end="\<in\>" end="\<do\>"me=e-2      contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
+ syn region shIf       transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>"   contains=@shIfList
+ syn region shFor      matchgroup=shLoop start="\<for\ze\_s\s*\%(((\)\@!" end="\<in\>" end="\<do\>"me=e-2      contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
+ syn match  shForPP    '\<for\>\ze\_s*(('
 endif
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn cluster shCaseList        add=shRepeat
@@ -202,7 +238,7 @@ syn match  shComma     contained    ","
 " ====
 syn match   shCaseBar  contained skipwhite "\(^\|[^\\]\)\(\\\\\)*\zs|"         nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
 syn match   shCaseStart        contained skipwhite skipnl "("                  nextgroup=shCase,shCaseBar
-if (g:sh_fold_enabled % (s:sh_fold_ifdofor * 2))/s:sh_fold_ifdofor
+if s:sh_fold_ifdofor
  syn region  shCase    fold contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)"  end=";;" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment
  syn region  shCaseEsac        fold matchgroup=shConditional start="\<case\>" end="\<esac\>"   contains=@shCaseEsacList
 else
@@ -212,19 +248,23 @@ endif
 syn keyword shCaseIn   contained skipwhite skipnl in                   nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
 if exists("b:is_bash")
  syn region  shCaseExSingleQuote       matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial,shSpecial      skipwhite skipnl nextgroup=shCaseBar    contained
-else
+elseif !exists("g:sh_no_error")
  syn region  shCaseExSingleQuote       matchgroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+   contains=shStringSpecial        skipwhite skipnl nextgroup=shCaseBar    contained
 endif
 syn region  shCaseSingleQuote  matchgroup=shQuote start=+'+ end=+'+            contains=shStringSpecial                skipwhite skipnl nextgroup=shCaseBar    contained
 syn region  shCaseDoubleQuote  matchgroup=shQuote start=+"+ skip=+\\\\\|\\.+ end=+"+   contains=@shDblQuoteList,shStringSpecial        skipwhite skipnl nextgroup=shCaseBar    contained
 syn region  shCaseCommandSub   start=+`+ skip=+\\\\\|\\.+ end=+`+              contains=@shCommandSubList              skipwhite skipnl nextgroup=shCaseBar    contained
-syn region  shCaseRange        matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+]+     contained
-
+if exists("b:is_bash")
+ syn region  shCaseRange       matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+\]+    contained       contains=shCharClass
+ syn match   shCharClass       '\[:\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|or\|xdigit\):\]'                       contained
+else
+ syn region  shCaseRange       matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+\]+    contained
+endif
 " Misc: {{{1
 "======
 syn match   shWrapLineOperator "\\$"
-syn region  shCommandSub   start="`" skip="\\\\\|\\." end="`" contains=@shCommandSubList
-syn match   shEscape   contained       '\\.'
+syn region  shCommandSub   start="`" skip="\\\\\|\\." end="`"  contains=@shCommandSubList
+syn match   shEscape   contained       '\%(^\)\@!\%(\\\\\)*\\.'
 
 " $() and $(()): {{{1
 " $(..) is not supported by sh (Bourne shell).  However, apparently
@@ -235,30 +275,35 @@ syn match   shEscape      contained       '\\.'
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn region shCommandSub matchgroup=shCmdSubRegion start="\$("  skip='\\\\\|\\.' end=")"  contains=@shCommandSubList
  syn region shArithmetic matchgroup=shArithRegion  start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList
+ syn region shArithmetic matchgroup=shArithRegion  start="\$\[" skip='\\\\\|\\.' end="\]" contains=@shArithList
  syn match  shSkipInitWS contained     "^\s\+"
-else
+elseif !exists("g:sh_no_error")
  syn region shCommandSub matchgroup=Error start="\$(" end=")" contains=@shCommandSubList
 endif
+syn region shCmdParenRegion matchgroup=shCmdSubRegion start="(" skip='\\\\\|\\.' end=")"       contains=@shCommandSubList
 
 if exists("b:is_bash")
  syn cluster shCommandSubList add=bashSpecialVariables,bashStatement
  syn cluster shCaseList add=bashAdminStatement,bashStatement
- syn keyword bashSpecialVariables contained BASH BASH_ENV BASH_VERSINFO BASH_VERSION CDPATH DIRSTACK EUID FCEDIT FIGNORE GLOBIGNORE GROUPS HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_MESSAGES LINENO MACHTYPE MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS PPID PROMPT_COMMAND PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELLOPTS SHLVL TIMEFORMAT TIMEOUT UID auto_resume histchars
- syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep install less ls mkdir mv rm rmdir rpm sed sleep sort strip tail touch
+ syn keyword bashSpecialVariables contained auto_resume BASH BASH_ALIASES BASH_ALIASES BASH_ARGC BASH_ARGC BASH_ARGV BASH_ARGV BASH_CMDS BASH_CMDS BASH_COMMAND BASH_COMMAND BASH_ENV BASH_EXECUTION_STRING BASH_EXECUTION_STRING BASH_LINENO BASH_LINENO BASHOPTS BASHOPTS BASHPID BASHPID BASH_REMATCH BASH_REMATCH BASH_SOURCE BASH_SOURCE BASH_SUBSHELL BASH_SUBSHELL BASH_VERSINFO BASH_VERSION BASH_XTRACEFD BASH_XTRACEFD CDPATH COLUMNS COLUMNS COMP_CWORD COMP_CWORD COMP_KEY COMP_KEY COMP_LINE COMP_LINE COMP_POINT COMP_POINT COMPREPLY COMPREPLY COMP_TYPE COMP_TYPE COMP_WORDBREAKS COMP_WORDBREAKS COMP_WORDS COMP_WORDS COPROC COPROC DIRSTACK EMACS EMACS ENV ENV EUID FCEDIT FIGNORE FUNCNAME FUNCNAME FUNCNEST FUNCNEST GLOBIGNORE GROUPS histchars HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HISTTIMEFORMAT HISTTIMEFORMAT HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_CTYPE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_NUMERIC LINENO LINES LINES MACHTYPE MAIL MAILCHECK MAILPATH MAPFILE MAPFILE OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS POSIXLY_CORRECT POSIXLY_CORRECT PPID PROMPT_COMMAND PS1 PS2 PS3 PS4 PWD RANDOM READLINE_LINE READLINE_LINE READLINE_POINT READLINE_POINT REPLY SECONDS SHELL SHELL SHELLOPTS SHLVL TIMEFORMAT TIMEOUT TMPDIR TMPDIR UID
+ syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep less ls mkdir mv rm rmdir rpm sed sleep sort strip tail touch
  syn keyword bashAdminStatement daemon killall killproc nice reload restart start status stop
+ syn keyword bashStatement     command compgen
 endif
 
 if exists("b:is_kornshell")
  syn cluster shCommandSubList add=kshSpecialVariables,kshStatement
  syn cluster shCaseList add=kshStatement
  syn keyword kshSpecialVariables contained CDPATH COLUMNS EDITOR ENV ERRNO FCEDIT FPATH HISTFILE HISTSIZE HOME IFS LINENO LINES MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTIND PATH PPID PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL TMOUT VISUAL
- syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep install killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail touch tput
+ syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail touch tput
+ syn keyword kshStatement command setgroups setsenv
 endif
 
 syn match   shSource   "^\.\s"
 syn match   shSource   "\s\.\s"
 "syn region  shColon   start="^\s*:" end="$" end="\s#"me=e-2 contains=@shColonList
-syn region  shColon    start="^\s*\zs:" end="$" end="\s#"me=e-2
+"syn region  shColon   start="^\s*\zs:" end="$" end="\s#"me=e-2
+syn match   shColon    '^\s*\zs:'
 
 " String And Character Constants: {{{1
 "================================
@@ -270,16 +315,17 @@ endif
 if exists("b:is_bash")
  syn region  shExSingleQuote   matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial,shSpecial
  syn region  shExDoubleQuote   matchgroup=shQuote start=+\$"+ skip=+\\\\\|\\.\|\\"+ end=+"+    contains=@shDblQuoteList,shStringSpecial,shSpecial
-else
+elseif !exists("g:sh_no_error")
  syn region  shExSingleQuote   matchGroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+   contains=shStringSpecial
  syn region  shExDoubleQuote   matchGroup=Error start=+\$"+ skip=+\\\\\|\\.+ end=+"+   contains=shStringSpecial
 endif
 syn region  shSingleQuote      matchgroup=shQuote start=+'+ end=+'+            contains=@Spell
-syn region  shDoubleQuote      matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell
+syn region  shDoubleQuote      matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\"+ end=+"+    contains=@shDblQuoteList,shStringSpecial,@Spell
+"syn region  shDoubleQuote     matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell
 syn match   shStringSpecial    "[^[:print:] \t]"       contained
 syn match   shStringSpecial    "\%(\\\\\)*\\[\\"'`$()#]"
-syn match   shSpecial  "[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial
-syn match   shSpecial  "^\%(\\\\\)*\\[\\"'`$()#]"
+syn match   shSpecial  "[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial,shComment
+syn match   shSpecial  "^\%(\\\\\)*\\[\\"'`$()#]"      nextgroup=shComment
 syn match   shMoreSpecial      "\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial contained
 
 " Comments: {{{1
@@ -288,68 +334,71 @@ syn cluster       shCommentGroup  contains=shTodo,@Spell
 syn keyword    shTodo  contained               COMBAK FIXME TODO XXX
 syn match      shComment               "^\s*\zs#.*$"   contains=@shCommentGroup
 syn match      shComment               "\s\zs#.*$"     contains=@shCommentGroup
+syn match      shComment       contained       "#.*$"  contains=@shCommentGroup
 syn match      shQuickComment  contained       "#.*$"
 
 " Here Documents: {{{1
 " =========================================
 if version < 600
- syn region shHereDoc matchgroup=shRedir start="<<\s*\**END[a-zA-Z_0-9]*\**"  matchgroup=shRedir end="^END[a-zA-Z_0-9]*$" contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\**END[a-zA-Z_0-9]*\**" matchgroup=shRedir end="^\s*END[a-zA-Z_0-9]*$" contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<\s*\**EOF\**"        matchgroup=shRedir      end="^EOF$"     contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\**EOF\**" matchgroup=shRedir    end="^\s*EOF$"  contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<\s*\**\.\**" matchgroup=shRedir      end="^\.$"      contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\**\.\**"        matchgroup=shRedir      end="^\s*\.$"   contains=@shDblQuoteList
-
-elseif (g:sh_fold_enabled % (s:sh_fold_heredoc * 2))/s:sh_fold_heredoc
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\z(\S*\)"            matchgroup=shRedir end="^\z1\s*$"       contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\"\z(\S*\)\""                matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*'\z(\S*\)'"          matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\z(\S*\)"           matchgroup=shRedir end="^\s*\z1\s*$"    contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\"\z(\S*\)\""               matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*'\z(\S*\)'"         matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\z(\S*\)"           matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\"\z(\S*\)\""       matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*'\z(\S*\)'"                matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\z(\S*\)"          matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\"\z(\S*\)\""      matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*'\z(\S*\)'"         matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<\\\z(\S*\)"             matchgroup=shRedir end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir01 start="<<\s*\**END[a-zA-Z_0-9]*\**"                 matchgroup=shRedir01 end="^END[a-zA-Z_0-9]*$"   contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir02 start="<<-\s*\**END[a-zA-Z_0-9]*\**"                matchgroup=shRedir02 end="^\s*END[a-zA-Z_0-9]*$"        contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir03 start="<<\s*\**EOF\**"              matchgroup=shRedir03    end="^EOF$"     contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir04 start="<<-\s*\**EOF\**"             matchgroup=shRedir04    end="^\s*EOF$"  contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir05 start="<<\s*\**\.\**"               matchgroup=shRedir05    end="^\.$"      contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir06 start="<<-\s*\**\.\**"              matchgroup=shRedir06    end="^\s*\.$"   contains=@shDblQuoteList
+
+elseif s:sh_fold_heredoc
+ syn region shHereDoc matchgroup=shRedir07 fold start="<<\s*\z([^ \t|]*\)"             matchgroup=shRedir07 end="^\z1\s*$"     contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir08 fold start="<<\s*\"\z([^ \t|]*\)\""         matchgroup=shRedir08 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir09 fold start="<<\s*'\z([^ \t|]*\)'"           matchgroup=shRedir09 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir10 fold start="<<-\s*\z([^ \t|]*\)"            matchgroup=shRedir10 end="^\s*\z1\s*$"  contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir11 fold start="<<-\s*\"\z([^ \t|]*\)\""                matchgroup=shRedir11 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir12 fold start="<<-\s*'\z([^ \t|]*\)'"          matchgroup=shRedir12 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir13 fold start="<<\s*\\\_$\_s*\z([^ \t|]*\)"    matchgroup=shRedir13 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir14 fold start="<<\s*\\\_$\_s*\"\z([^ \t|]*\)\""        matchgroup=shRedir14 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir15 fold start="<<-\s*\\\_$\_s*'\z([^ \t|]*\)'" matchgroup=shRedir15 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir16 fold start="<<-\s*\\\_$\_s*\z([^ \t|]*\)"   matchgroup=shRedir16 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir17 fold start="<<-\s*\\\_$\_s*\"\z([^ \t|]*\)\""       matchgroup=shRedir17 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir18 fold start="<<\s*\\\_$\_s*'\z([^ \t|]*\)'"  matchgroup=shRedir18 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir19 fold start="<<\\\z([^ \t|]*\)"              matchgroup=shRedir19 end="^\z1\s*$"
 
 else
- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\=\z(\S*\)"     matchgroup=shRedir end="^\z1\s*$"    contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<\s*\"\z(\S*\)\""     matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\z(\S*\)"                matchgroup=shRedir end="^\s*\z1\s*$" contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<-\s*'\z(\S*\)'"      matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<\s*'\z(\S*\)'"       matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\"\z(\S*\)\""    matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\z(\S*\)"        matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\z(\S*\)"       matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*'\z(\S*\)'"     matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*'\z(\S*\)'"      matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\"\z(\S*\)\""    matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\"\z(\S*\)\""   matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<\\\z(\S*\)"          matchgroup=shRedir end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir20 start="<<\s*\\\=\z([^ \t|]*\)"              matchgroup=shRedir20 end="^\z1\s*$"    contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir21 start="<<\s*\"\z([^ \t|]*\)\""              matchgroup=shRedir21 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir22 start="<<-\s*\z([^ \t|]*\)"         matchgroup=shRedir22 end="^\s*\z1\s*$" contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir23 start="<<-\s*'\z([^ \t|]*\)'"               matchgroup=shRedir23 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir24 start="<<\s*'\z([^ \t|]*\)'"                matchgroup=shRedir24 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir25 start="<<-\s*\"\z([^ \t|]*\)\""             matchgroup=shRedir25 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir26 start="<<\s*\\\_$\_s*\z([^ \t|]*\)"         matchgroup=shRedir26 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir27 start="<<-\s*\\\_$\_s*\z([^ \t|]*\)"                matchgroup=shRedir27 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir28 start="<<-\s*\\\_$\_s*'\z([^ \t|]*\)'"      matchgroup=shRedir28 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir29 start="<<\s*\\\_$\_s*'\z([^ \t|]*\)'"       matchgroup=shRedir29 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir30 start="<<\s*\\\_$\_s*\"\z([^ \t|]*\)\""     matchgroup=shRedir30 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir31 start="<<-\s*\\\_$\_s*\"\z([^ \t|]*\)\""    matchgroup=shRedir31 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir32 start="<<\\\z([^ \t|]*\)"           matchgroup=shRedir32 end="^\z1\s*$"
 endif
 
 " Here Strings: {{{1
 " =============
-if exists("b:is_bash")
- syn match shRedir "<<<"
+" available for: bash; ksh (really should be ksh93 only) but not if its a posix
+if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("g:is_posix"))
+ syn match shRedir "<<<"       skipwhite       nextgroup=shCmdParenRegion
 endif
 
 " Identifiers: {{{1
 "=============
 syn match  shSetOption "\s\zs[-+][a-zA-Z0-9]\+\>"      contained
 syn match  shVariable  "\<\([bwglsav]:\)\=[a-zA-Z0-9.!@_%+,]*\ze="     nextgroup=shSetIdentifier
-syn match  shSetIdentifier     "="             contained       nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote
+syn match  shSetIdentifier     "="             contained       nextgroup=shCmdParenRegion,shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote
+syn region shAtExpr    contained       start="@(" end=")" contains=@shIdList
 if exists("b:is_bash")
- syn region shSetList oneline matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$"   matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+#\|=" contains=@shIdList
- syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$"                        matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$"   matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+#\|="    contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$"                        matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+="       contains=@shIdList
 elseif exists("b:is_kornshell")
- syn region shSetList oneline matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$"           matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
- syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="$"                          matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$"           matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]"    contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="$"                          matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]"    contains=@shIdList
 else
- syn region shSetList oneline matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$"               matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$"               matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]"    contains=@shIdList
 endif
 
 " Functions: {{{1
@@ -358,15 +407,15 @@ if !exists("g:is_posix")
 endif
 
 if exists("b:is_bash")
- if (g:sh_fold_enabled % (s:sh_fold_functions * 2))/s:sh_fold_functions
-  syn region shFunctionOne fold        matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{" end="}"    contains=@shFunctionList                        skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
+ if s:sh_fold_functions
+  syn region shFunctionOne fold        matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{"    end="}" contains=@shFunctionList                        skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
   syn region shFunctionTwo fold        matchgroup=shFunction start="\h[-a-zA-Z_0-9]*\s*\%(()\)\=\_s*{" end="}" contains=shFunctionKey,@shFunctionList contained        skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
  else
   syn region shFunctionOne     matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{"    end="}" contains=@shFunctionList
   syn region shFunctionTwo     matchgroup=shFunction start="\h[-a-zA-Z_0-9]*\s*\%(()\)\=\_s*{" end="}" contains=shFunctionKey,@shFunctionList contained
  endif
 else
- if (g:sh_fold_enabled % (s:sh_fold_functions * 2))/s:sh_fold_functions
+ if s:sh_fold_functions
   syn region shFunctionOne fold        matchgroup=shFunction start="^\s*\h\w*\s*()\_s*{" end="}"       contains=@shFunctionList                        skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
   syn region shFunctionTwo fold        matchgroup=shFunction start="\h\w*\s*\%(()\)\=\_s*{"    end="}" contains=shFunctionKey,@shFunctionList contained        skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
  else
@@ -377,9 +426,11 @@ endif
 
 " Parameter Dereferencing: {{{1
 " ========================
-syn match  shDerefSimple       "\$\%(\h\w*\|\d\)"
+syn match  shDerefSimple       "\$\%(\k\+\|\d\)"
 syn region shDeref     matchgroup=PreProc start="\${" end="}"  contains=@shDerefList,shDerefVarArray
-syn match  shDerefWordError    "[^}$[]"        contained
+if !exists("g:sh_no_error")
+ syn match  shDerefWordError   "[^}$[]"        contained
+endif
 syn match  shDerefSimple       "\$[-#*@!?]"
 syn match  shDerefSimple       "\$\$"
 if exists("b:is_bash") || exists("b:is_kornshell")
@@ -391,12 +442,12 @@ endif
 " ====================================
 if exists("b:is_bash")
  syn region shDeref    matchgroup=PreProc start="\${!" end="\*\=}"     contains=@shDerefList,shDerefOp
- syn match  shDerefVar contained       "{\@<=!\w\+"            nextgroup=@shDerefVarList
+ syn match  shDerefVar contained       "{\@<=!\k\+"            nextgroup=@shDerefVarList
 endif
 
 syn match  shDerefSpecial      contained       "{\@<=[-*@?0]"          nextgroup=shDerefOp,shDerefOpError
 syn match  shDerefSpecial      contained       "\({[#!]\)\@<=[[:alnum:]*@_]\+" nextgroup=@shDerefVarList,shDerefOp
-syn match  shDerefVar  contained       "{\@<=\w\+"             nextgroup=@shDerefVarList
+syn match  shDerefVar  contained       "{\@<=\k\+"             nextgroup=@shDerefVarList
 
 " sh ksh bash : ${var[... ]...}  array reference: {{{1
 syn region  shDerefVarArray   contained        matchgroup=shDeref start="\[" end="]"   contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError
@@ -410,8 +461,14 @@ syn region  shDerefVarArray   contained    matchgroup=shDeref start="\[" end="]"   co
 "    ksh bash : ${parameter##pattern} remove large left  pattern
 "    ksh bash : ${parameter%pattern}  remove small right pattern
 "    ksh bash : ${parameter%%pattern} remove large right pattern
+"        bash : ${parameter^pattern}  Case modification
+"        bash : ${parameter^^pattern} Case modification
+"        bash : ${parameter,pattern}  Case modification
+"        bash : ${parameter,,pattern} Case modification
 syn cluster shDerefPatternList contains=shDerefPattern,shDerefString
-syn match shDerefOpError       contained       ":[[:punct:]]"
+if !exists("g:sh_no_error")
+ syn match shDerefOpError      contained       ":[[:punct:]]"
+endif
 syn match  shDerefOp   contained       ":\=[-=?]"      nextgroup=@shDerefPatternList
 syn match  shDerefOp   contained       ":\=+"  nextgroup=@shDerefPatternList
 if exists("b:is_bash") || exists("b:is_kornshell")
@@ -421,6 +478,9 @@ if exists("b:is_bash") || exists("b:is_kornshell")
  syn region shDerefPattern     contained       start="{" end="}"       contains=shDeref,shDerefSimple,shDerefString,shCommandSub nextgroup=shDerefPattern
  syn match  shDerefEscape      contained       '\%(\\\\\)*\\.'
 endif
+if exists("b:is_bash")
+ syn match  shDerefOp  contained       "[,^]\{1,2}"    nextgroup=@shDerefPatternList
+endif
 syn region shDerefString       contained       matchgroup=shDerefDelim start=+\%(\\\)\@<!'+ end=+'+            contains=shStringSpecial
 syn region shDerefString       contained       matchgroup=shDerefDelim start=+\%(\\\)\@<!"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial
 syn match  shDerefString       contained       "\\["']"        nextgroup=shDerefPattern
@@ -434,18 +494,21 @@ if exists("b:is_bash")
  " bash : ${parameter//pattern/string}
  " bash : ${parameter//pattern}
  syn match  shDerefPPS contained       '/\{1,2}'       nextgroup=shDerefPPSleft
- syn region shDerefPPSleft     contained       start='.'       skip=@\%(\\\)\/@ matchgroup=shDerefOp end='/' end='\ze}' nextgroup=shDerefPPSright contains=@shCommandSubList
- syn region shDerefPPSright    contained       start='.'       end='\ze}'      contains=@shCommandSubList
+ syn region shDerefPPSleft     contained       start='.'       skip=@\%(\\\\\)*\\/@ matchgroup=shDerefOp       end='/' end='\ze}' nextgroup=shDerefPPSright contains=@shCommandSubList
+ syn region shDerefPPSright    contained       start='.'       skip=@\%(\\\\\)\+@              end='\ze}'      contains=@shCommandSubList
 endif
 
 " Arithmetic Parenthesized Expressions: {{{1
-syn region shParen matchgroup=shArithRegion start='(\ze[^(]' end=')' contains=@shArithParenList
+"syn region shParen matchgroup=shArithRegion start='[^$]\zs(\%(\ze[^(]\|$\)' end=')' contains=@shArithParenList
+syn region shParen matchgroup=shArithRegion start='\$\@!(\%(\ze[^(]\|$\)' end=')' contains=@shArithParenList
 
 " Useful sh Keywords: {{{1
 " ===================
 syn keyword shStatement break cd chdir continue eval exec exit kill newgrp pwd read readonly return shift test trap ulimit umask wait
 syn keyword shConditional contained elif else then
-syn keyword shCondError elif else then
+if !exists("g:sh_no_error")
+ syn keyword shCondError elif else then
+endif
 
 " Useful ksh Keywords: {{{1
 " ====================
@@ -489,6 +552,7 @@ syn sync match shWhileSync  grouphere       shRepeat        "\<while\>"
 " Default Highlighting: {{{1
 " =====================
 hi def link shArithRegion      shShellVariables
+hi def link shAtExpr   shSetList
 hi def link shBeginHere        shRedir
 hi def link shCaseBar  shConditional
 hi def link shCaseCommandSub   shCommandSub
@@ -512,6 +576,7 @@ hi def link shDoubleQuote   shString
 hi def link shEcho     shString
 hi def link shEchoDelim        shOperator
 hi def link shEchoQuote        shString
+hi def link shForPP    shLoop
 hi def link shEmbeddedEcho     shString
 hi def link shEscape   shCommandSub
 hi def link shExDoubleQuote    shDoubleQuote
@@ -547,6 +612,7 @@ if exists("b:is_bash")
   hi def link bashStatement            shStatement
   hi def link shFunctionParen          Delimiter
   hi def link shFunctionDelim          Delimiter
+  hi def link shCharClass              shSpecial
 endif
 if exists("b:is_kornshell")
   hi def link kshSpecialVariables      shShellVariables
@@ -554,20 +620,22 @@ if exists("b:is_kornshell")
   hi def link shFunctionParen          Delimiter
 endif
 
-hi def link shCaseError                Error
-hi def link shCondError                Error
-hi def link shCurlyError               Error
-hi def link shDerefError               Error
-hi def link shDerefOpError             Error
-hi def link shDerefWordError           Error
-hi def link shDoError          Error
-hi def link shEsacError                Error
-hi def link shIfError          Error
-hi def link shInError          Error
-hi def link shParenError               Error
-hi def link shTestError                Error
-if exists("b:is_kornshell")
-  hi def link shDTestError             Error
+if !exists("g:sh_no_error")
+ hi def link shCaseError               Error
+ hi def link shCondError               Error
+ hi def link shCurlyError              Error
+ hi def link shDerefError              Error
+ hi def link shDerefOpError            Error
+ hi def link shDerefWordError          Error
+ hi def link shDoError         Error
+ hi def link shEsacError               Error
+ hi def link shIfError         Error
+ hi def link shInError         Error
+ hi def link shParenError              Error
+ hi def link shTestError               Error
+ if exists("b:is_kornshell")
+   hi def link shDTestError            Error
+ endif
 endif
 
 hi def link shArithmetic               Special
@@ -591,6 +659,38 @@ hi def link shStatement            Statement
 hi def link shString           String
 hi def link shTodo             Todo
 hi def link shAlias            Identifier
+hi def link shRedir01          shRedir
+hi def link shRedir02          shRedir
+hi def link shRedir03          shRedir
+hi def link shRedir04          shRedir
+hi def link shRedir05          shRedir
+hi def link shRedir06          shRedir
+hi def link shRedir07          shRedir
+hi def link shRedir08          shRedir
+hi def link shRedir09          shRedir
+hi def link shRedir10          shRedir
+hi def link shRedir11          shRedir
+hi def link shRedir12          shRedir
+hi def link shRedir13          shRedir
+hi def link shRedir14          shRedir
+hi def link shRedir15          shRedir
+hi def link shRedir16          shRedir
+hi def link shRedir17          shRedir
+hi def link shRedir18          shRedir
+hi def link shRedir19          shRedir
+hi def link shRedir20          shRedir
+hi def link shRedir21          shRedir
+hi def link shRedir22          shRedir
+hi def link shRedir23          shRedir
+hi def link shRedir24          shRedir
+hi def link shRedir25          shRedir
+hi def link shRedir26          shRedir
+hi def link shRedir27          shRedir
+hi def link shRedir28          shRedir
+hi def link shRedir29          shRedir
+hi def link shRedir30          shRedir
+hi def link shRedir31          shRedir
+hi def link shRedir32          shRedir
 
 " Set Current Syntax: {{{1
 " ===================
index 6944782..23d7325 100644 (file)
@@ -1,6 +1,8 @@
-"SiSU Vim syntax file
-"SiSU Maintainer: Ralph Amissah <ralph@amissah.com>
-"SiSU Markup:     SiSU (sisu-2.0.1, 2010-03-17)
+" SiSU Vim syntax file
+" SiSU Maintainer: Ralph Amissah <ralph@amissah.com>
+" SiSU Markup:     SiSU (sisu-4.0.9)
+" Last Change:     2013-02-22
+" URL (sisu-4.1.0): <http://git.sisudoc.org/?p=code/sisu.git;a=blob;f=data/sisu/conf/editor-syntax-etc/vim/syntax/sisu.vim;hb=HEAD>
 "(originally looked at Ruby Vim by Mirko Nasato)
 
 if version < 600
@@ -9,15 +11,18 @@ elseif exists("b:current_syntax")
   finish
 else
 endif
+let s:cpo_save = &cpo
+set cpo&vim
 
-" Errors:
+"% "Errors:
 syn match sisu_error contains=sisu_link,sisu_error_wspace "<![^ei]\S\+!>"
 
-" Markers Identifiers:
+"% "Markers Identifiers:
 if !exists("sisu_no_identifiers")
   syn match   sisu_mark_endnote                                           "\~^"
-  syn match   sisu_break               contains=@NoSpell                  "<br>\|<br />"
-  syn match   sisu_control             contains=@NoSpell                  "<:p[bn]>"
+  syn match   sisu_break               contains=@NoSpell                  " \\\\\( \|$\)\|<br>\|<br />"
+  syn match   sisu_control             contains=@NoSpell                  "^\(-\\\\-\|=\\\\=\|-\.\.-\|<:p[bn]>\)\s*$"
+  syn match   sisu_control             contains=@NoSpell                  "^<:\(bo\|---\)>\s*$"
   syn match   sisu_marktail                                               "[~-]#"
   syn match   sisu_control                                                "\""
   syn match   sisu_underline                                              "\(^\| \)_[a-zA-Z0-9]\+_\([ .,]\|$\)"
@@ -28,14 +33,19 @@ if !exists("sisu_no_identifiers")
   syn match   sisu_require             contains=@NoSpell                  "^<<\s*[a-zA-Z0-9^._-]\+\.ss[it]$"
   syn match   sisu_require             contains=@NoSpell                  "^<<{[a-zA-Z0-9^._-]\+\.ss[it]}$"
   syn match   sisu_structure                                              "^:A\~$"
-  syn match   sisu_sub_header_title                                       "^\s\+:\(subtitle\|short\|edition\|language\|note\):\s" "group=sisu_header_content
-  syn match   sisu_sub_header_creator                                     "^\s\+:\(author\|translator\|illustrator\|photographer\|audio\|digitized_by\|prepared_by\):\s"
-  syn match   sisu_sub_header_rights                                      "^\s\+:\(copyright\|text\|translation\|illustrations\|photographs\|audio\|digitization\|license\|all\):\s"                                         "access_rights license
-  syn match   sisu_sub_header_classify                                    "^\s\+:\(type\|subject\|topic_register\|keywords\|coverage\|relation\|format\|identifier\|isbn\|dewey\|loc\|pg\):\s"
-  syn match   sisu_sub_header_dates                                       "^\s\+:\(published\|available\|created\|issued\|valid\|modified\|added_to_site\|translated\|original_publication\):\s"
-  syn match   sisu_sub_header_original                                    "^\s\+:\(publisher\|date\|language\|institution\|nationality\|source\):\s"
-  syn match   sisu_sub_header_make                                        "^\s\+:\(headings\|num_top\|breaks\|italics\|bold\|skin\|stamp\|promo\|ad\|manpage\):\s"
-  syn match   sisu_sub_header_notes                                       "^\s\+:\(comment\|abstract\|description\|history\|prefix\|prefix_[ab]\):\s"
+
+"% "Document Sub Headers:
+  syn match   sisu_sub_header_title                                       "^\s\+:\(subtitle\|short\|edition\|language\|lang_char\|note\):\s" "group=sisu_header_content
+  syn match   sisu_sub_header_creator                                     "^\s\+:\(author\|editor\|contributor\|illustrator\|photographer\|translator\|digitized_by\|prepared_by\|audio\|video\):\s"                               " &hon &institution
+  syn match   sisu_sub_header_rights                                      "^\s\+:\(copyright\|text\|translation\|illustrations\|photographs\|preparation\|digitization\|audio\|video\|license\|all\):\s"                   " access_rights license
+  syn match   sisu_sub_header_classify                                    "^\s\+:\(topic_register\|keywords\|subject\|dewey\|loc\):\s"
+  syn match   sisu_sub_header_identifier                                  "^\s\+:\(oclc\|isbn\):\s"
+  syn match   sisu_sub_header_date                                        "^\s\+:\(added_to_site\|available\|created\|issued\|modified\|published\|valid\|translated\|original_publication\):\s"
+  syn match   sisu_sub_header_original                                    "^\s\+:\(publisher\|date\|language\|lang_char\|institution\|nationality\|source\):\s"
+  syn match   sisu_sub_header_make                                        "^\s\+:\(headings\|num_top\|breaks\|language\|italics\|bold\|emphasis\|substitute\|omit\|plaintext_wrap\|texpdf_font_mono\|texpdf_font\|stamp\|promo\|ad\|manpage\|home_button_text\|home_button_image\|cover_image\|footer\):\s"
+  syn match   sisu_sub_header_notes                                       "^\s\+:\(description\|abstract\|comment\|coverage\|relation\|source\|history\|type\|format\|prefix\|prefix_[ab]\|suffix\):\s"
+
+"% "semantic markers: (ignore)
   syn match   sisu_sem_marker                                             ";{\|};[a-z._]*[a-z]"
   syn match   sisu_sem_marker_block                                       "\([a-z][a-z._]*\|\):{\|}:[a-z._]*[a-z]"
   syn match   sisu_sem_ex_marker                                          ";\[\|\];[a-z._]*[a-z]"
@@ -46,80 +56,128 @@ if !exists("sisu_no_identifiers")
   syn match   sisu_sem_ex_content contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker ";\[[^}].\{-}\];[a-z]\+"
 endif
 
-"URLs Numbers And ASCII Codes:
+"% "URLs Numbers And ASCII Codes:
 syn match   sisu_number                              "\<\(0x\x\+\|0b[01]\+\|0\o\+\|0\.\d\+\|0\|[1-9][\.0-9_]*\)\>"
 syn match   sisu_number                              "?\(\\M-\\C-\|\\c\|\\C-\|\\M-\)\=\(\\\o\{3}\|\\x\x\{2}\|\\\=\w\)"
 
-"Tuned Error: (is error if not already matched)
+"% "Tuned Error: (is error if not already matched)
 syn match sisu_error             contains=sisu_error "[\~/\*!_]{\|}[\~/\*!_]"
 syn match sisu_error             contains=sisu_error "<a href\|</a>]"
 
-"Simple Paired Enclosed Markup:
+"% "Simple Paired Enclosed Markup:
 "url/link
 syn region sisu_link contains=sisu_error,sisu_error_wspace matchgroup=sisu_action start="^<<\s*|[a-zA-Z0-9^._-]\+|@|[a-zA-Z0-9^._-]\+|"rs=s+2 end="$"
-"header
+
+"% "Document Header:
+" title
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_title matchgroup=sisu_header start="^[@]title:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" creator
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_creator matchgroup=sisu_header start="^[@]creator:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" dates
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_date matchgroup=sisu_header start="^[@]date:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" publisher
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_publisher matchgroup=sisu_header start="^[@]publisher:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" rights
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_rights matchgroup=sisu_header start="^[@]rights:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" classify document
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_classify matchgroup=sisu_header start="^[@]classify:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_dates matchgroup=sisu_header start="^[@]date:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_make matchgroup=sisu_header start="^[@]make:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_publisher matchgroup=sisu_header start="^[@]publisher:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_notes matchgroup=sisu_header start="^[@]notes:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" identifier document
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_identifier matchgroup=sisu_header start="^[@]identifier:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" original language (depreciated)
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_original matchgroup=sisu_header start="^[@]original:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_source matchgroup=sisu_header start="^[@]source:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" notes
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_notes matchgroup=sisu_header start="^[@]notes:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" links of interest
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_linked,sisu_sub_header_links matchgroup=sisu_header start="^[@]links:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-"headings
-syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-8]\|:\?[A-C]\)\~\(\S\+\|[^-]\)" end="$"
-"grouped text
-syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table"
-syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$"
-syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^\(alt\|group\|poem\){" end="^}\(alt\|group\|poem\)"
+" make, processing instructions
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_make matchgroup=sisu_header start="^[@]make:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+
+"% "Headings:
+syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-8]\|:\?[A-C]\)\~\(\S\+\|[^-]\)" end="$"
+
+"% "Block Group Text:
+" table
+syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table"
+" table
+syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$"
+" block, group, poem, alt
+syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^\(block\|group\|poem\|alt\){" end="^}\(block\|group\|poem\|alt\)"
+" code
 syn region sisu_content_alt contains=sisu_error matchgroup=sisu_contain start="^code{" end="^}code"
-"endnotes
-syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n"
-syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n"
-syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$"
-"links and images
-syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|\.\./\)\S\+" oneline
-syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline
-syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_link start="{" end="}image" oneline
-"some line operations
-syn region sisu_control contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_control start="\(\(^\| \)!_ \|<:b>\)" end="$"
-syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$"
+
+"% "Endnotes:
+" regular endnote or asterisk or plus sign endnote
+syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n"
+" numbered asterisk or plus sign endnote
+syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n"
+" endnote content marker (for binary content marking)
+syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$"
+
+"% "Links And Images:
+" image with url link (and possibly footnote of url)
+syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|:\|\.\.\/\|#\)\S\+" oneline
+" sisu outputs, short notation
+syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline
+" image
+syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_link start="{" end="}image" oneline
+
+"% "Some Line Operations:
+" bold line
+syn region sisu_bold contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^!_ " end=" \\\\\|$"
+" indent and bullet paragraph
+syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$"
+" indent and bullet (bold start) paragraph
+syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\)!_\? " end=" \\\\\|$"
+" hanging indent paragraph [proposed]
+syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9] " end="$"
+" hanging indent (bold start/ definition) paragraph [proposed]
+syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9]!_\? " end=" \\\\\|$"
+" list numbering
 syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^\(#[ 1]\|_# \)" end="$"
-"font face curly brackets
+
+"% "Font Face Curly Brackets:
 "syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_sem start="\S\+:{" end="}:[^<>,.!?:; ]\+" oneline
+" book index:
 syn region sisu_index matchgroup=sisu_index_block start="^={" end="}"
-syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*"
-syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!"
-syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_"
-syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="/{" end="}/"
-syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="+{" end="}+"
-syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\^{" end="}\^"
-syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start=",{" end="},"
+" emphasis:
+syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*"
+" bold:
+syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!"
+" underscore:
+syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_"
+" italics:
+syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="/{" end="}/"
+" added:
+syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="+{" end="}+"
+" superscript:
+syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\^{" end="}\^"
+" subscript:
+syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start=",{" end="},"
+" monospace:
+syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="#{" end="}#"
+" strikethrough:
 syn region sisu_strikeout contains=sisu_error matchgroup=sisu_fontface start="-{" end="}-"
-syn region sisu_html contains=sisu_error contains=sisu_strikeout matchgroup=sisu_contain start="<a href=\".\{-}\">" end="</a>" oneline
-"single words bold italicise etc. "workon
-syn region sisu_control contains=sisu_error matchgroup=sisu_control start="\([ (]\|^\)\*[^\|{\n\~\\]"hs=e-1 end="\*"he=e-0 skip="[a-zA-Z0-9']" oneline
+
+"% "Single Words Bold Italicise Etc: (depreciated)
+syn region sisu_bold contains=sisu_error matchgroup=sisu_bold start="\([ (]\|^\)\*[^\|{\n\~\\]"hs=e-1 end="\*"he=e-0 skip="[a-zA-Z0-9']" oneline
 syn region sisu_identifier contains=sisu_error matchgroup=sisu_content_alt start="\([ ]\|^\)/[^{ \|\n\\]"hs=e-1 end="/\[ \.\]" skip="[a-zA-Z0-9']" oneline
 "misc
 syn region sisu_identifier contains=sisu_error matchgroup=sisu_fontface start="\^[^ {\|\n\\]"rs=s+1 end="\^[ ,.;:'})\\\n]" skip="[a-zA-Z0-9']" oneline
 
-"Expensive Mode:
+"% "Expensive Mode:
 if !exists("sisu_no_expensive")
 else " not Expensive
   syn region  sisu_content_alt  matchgroup=sisu_control start="^\s*def\s" matchgroup=NONE end="[?!]\|\>" skip="\.\|\(::\)" oneline
 endif " Expensive?
 
-"Headers And Headings: (Document Instructions)
+"% "Headers And Headings: (Document Instructions)
 syn match sisu_control contains=sisu_error,sisu_error_wspace "4\~! \S\+"
 syn region  sisu_markpara contains=sisu_error,sisu_error_wspace start="^=begin" end="^=end.*$"
 
-"Errors:
+"% "Errors:
 syn match sisu_error_wspace contains=sisu_error_wspace "^\s\+[^:]"
 syn match sisu_error_wspace contains=sisu_error_wspace "\s\s\+"
-syn match sisu_error_wspace contains=sisu_error_wspace " \s*$"
+syn match sisu_error_wspace contains=sisu_error_wspace "\s\+$"
 syn match sisu_error contains=sisu_error_wspace "\t\+"
 syn match sisu_error contains=sisu_error,sisu_error_wspace "\([^ (][_\\]\||[^ (}]\)https\?:\S\+"
 syn match sisu_error contains=sisu_error "_\?https\?:\S\+[}><]"
@@ -140,37 +198,38 @@ syn match sisu_error contains=sisu_error "<dir>"
 syn match sisu_error contains=sisu_error,sisu_match,sisu_strikeout,sisu_contain,sisu_content_alt,sisu_mark,sisu_break,sisu_number "<[a-zA-Z\/]\+>"
 syn match sisu_error  "/\?<\([biu]\)>[^(</\1>)]\{-}\n$"
 
-"Error Exceptions:
+"% "Error Exceptions:
 syn match sisu_control "\n$" "contains=ALL
-syn match sisu_control " //"
+"syn match sisu_control " //"
 syn match sisu_error   "%{"
 syn match sisu_error   "<br>_\?https\?:\S\+\|_\?https\?:\S\+<br>"
 syn match sisu_error   "[><]_\?https\?:\S\+\|_\?https\?:\S\+[><]"
 syn match sisu_comment "^%\{1,2\}.\+"
 
-"Definitions Default Highlighting:
+"% "Definitions Default Highlighting:
 hi def link sisu_normal                Normal
+hi def link sisu_bold                  Statement
 hi def link sisu_header                PreProc
 hi def link sisu_header_content        Normal
 hi def link sisu_sub_header_title      Statement
 hi def link sisu_sub_header_creator    Statement
+hi def link sisu_sub_header_date       Statement
+hi def link sisu_sub_header_publisher  Statement
 hi def link sisu_sub_header_rights     Statement
 hi def link sisu_sub_header_classify   Statement
-hi def link sisu_sub_header_dates      Statement
-hi def link sisu_sub_header_make       Statement
+hi def link sisu_sub_header_identifier Statement
+hi def link sisu_sub_header_original   Statement
 hi def link sisu_sub_header_links      Statement
-hi def link sisu_sub_header_publisher  Statement
 hi def link sisu_sub_header_notes      Statement
-hi def link sisu_sub_header_original   Statement
-hi def link sisu_sub_header_source     Statement
+hi def link sisu_sub_header_make       Statement
 hi def link sisu_heading               Title
 hi def link sisu_structure             Operator
 hi def link sisu_contain               Include
-hi def link sisu_mark_endnote          Include
+hi def link sisu_mark_endnote          Delimiter
 hi def link sisu_require               NonText
 hi def link sisu_link                  NonText
 hi def link sisu_linked                String
-hi def link sisu_fontface              Include
+hi def link sisu_fontface              Delimiter
 hi def link sisu_strikeout             DiffDelete
 hi def link sisu_content_alt           Special
 hi def link sisu_sem_content           SpecialKey
@@ -186,7 +245,7 @@ hi def link sisu_sem_ex_block          Comment
 hi def link sisu_index                 SpecialKey
 hi def link sisu_index_block           Visual
 hi def link sisu_content_endnote       Special
-hi def link sisu_control               Define
+hi def link sisu_control               Delimiter
 hi def link sisu_ocn                   Include
 hi def link sisu_number                Number
 hi def link sisu_identifier            Function
@@ -202,3 +261,5 @@ hi def link sisu_error_sem_marker      Error
 hi def link sisu_error_wspace          Error
 hi def link sisu_error                 Error
 let b:current_syntax = "sisu"
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 8a4d675..4e2f9a8 100644 (file)
@@ -20,6 +20,7 @@ syn keyword sliceQualifier  const extends idempotent implements local nonmutatin
 syn keyword sliceBoolean    false true
 
 " Include directives
+syn region  sliceIncluded    display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
 syn match   sliceIncluded   display contained "<[^>]*>"
 syn match   sliceInclude    display "^\s*#\s*include\>\s*["<]" contains=sliceIncluded
 
index 0b53d8e..6b5a002 100644 (file)
@@ -2,7 +2,7 @@
 " Language:    SMIL (Synchronized Multimedia Integration Language)
 " Maintainer:  Herve Foucher <Herve.Foucher@helio.org>
 " URL:         http://www.helio.org/vim/syntax/smil.vim
-" Last Change: 2003 May 11
+" Last Change: 2012 Feb 03 by Thilo Six
 
 " To learn more about SMIL, please refer to http://www.w3.org/AudioVideo/
 " and to http://www.helio.org/products/smil/tutorial/
@@ -15,6 +15,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " SMIL is case sensitive
 syn case match
 
@@ -151,4 +154,6 @@ if main_syntax == 'smil'
   unlet main_syntax
 endif
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index 3c07fad..5bfa48e 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    SNNS pattern file
 " Maintainer:  Davide Alberani <alberanid@bigfoot.com>
-" Last Change: 28 Apr 2001
+" Last Change: 2012 Feb 03 by Thilo Six
 " Version:     0.2
 " URL:         http://digilander.iol.it/alberanid/vim/syntax/snnspat.vim
 "
@@ -14,6 +14,8 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
 
 " anything that isn't part of the header, a comment or a number
 " is wrong
@@ -65,4 +67,6 @@ endif
 
 let b:current_syntax = "snnspat"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8 sw=2
index ee1433e..200e1aa 100644 (file)
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:    Spice circuit simulator input netlist
 " Maintainer:  Noam Halevy <Noam.Halevy.motorola.com>
-" Last Change: 12/08/99
+" Last Change: 2012 Jun 01
+"              (Dominique Pelle added @Spell)
 "
 " This is based on sh.vim by Lennart Schultz
 " but greatly simplified
@@ -19,8 +20,8 @@ syn case ignore
 
 syn keyword    spiceTodo       contained TODO
 
-syn match spiceComment  "^ \=\*.*$"
-syn match spiceComment  "\$.*$"
+syn match spiceComment  "^ \=\*.*$" contains=@Spell
+syn match spiceComment  "\$.*$" contains=@Spell
 
 " Numbers, all with engineering suffixes and optional units
 "==========================================================
index af57737..07e9708 100644 (file)
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:     Speedup, plant simulator from AspenTech
 " Maintainer:   Stefan.Schwarzer <s.schwarzer@ndh.net>
-" URL:                 http://www.ndh.net/home/sschwarzer/download/spup.vim
-" Last Change:  2003 May 11
+" URL:         http://www.ndh.net/home/sschwarzer/download/spup.vim
+" Last Change:  2012 Feb 03 by Thilo Six
 " Filename:     spup.vim
 
 " Bugs
@@ -25,6 +25,9 @@ elseif exists("b:current_syntax")
     finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " don't hightlight several keywords like subsections
 "let strict_subsections = 1
 
@@ -43,7 +46,7 @@ endif
 
 " Speedup SECTION regions
 syn case ignore
-syn region spupCdi               matchgroup=spupSection start="^CDI"            end="^\*\*\*\*" contains=spupCdiSubs,@spupOrdinary
+syn region spupCdi       matchgroup=spupSection start="^CDI"        end="^\*\*\*\*" contains=spupCdiSubs,@spupOrdinary
 syn region spupConditions matchgroup=spupSection start="^CONDITIONS" end="^\*\*\*\*" contains=spupConditionsSubs,@spupOrdinary,spupConditional,spupOperator,spupCode
 syn region spupDeclare    matchgroup=spupSection start="^DECLARE"    end="^\*\*\*\*" contains=spupDeclareSubs,@spupOrdinary,spupTypes,spupCode
 syn region spupEstimation matchgroup=spupSection start="^ESTIMATION" end="^\*\*\*\*" contains=spupEstimationSubs,@spupOrdinary
@@ -63,7 +66,7 @@ syn region spupTitle      matchgroup=spupSection start="^TITLE"      end="^\*\*\
 syn region spupUnit       matchgroup=spupSection start="^UNIT"       end="^\*\*\*\*" contains=spupUnitSubs,@spupOrdinary
 
 " Subsections
-syn keyword spupCdiSubs                   INPUT FREE OUTPUT LINEARTIME MINNONZERO CALCULATE FILES SCALING contained
+syn keyword spupCdiSubs               INPUT FREE OUTPUT LINEARTIME MINNONZERO CALCULATE FILES SCALING contained
 syn keyword spupDeclareSubs    TYPE STREAM contained
 syn keyword spupEstimationSubs ESTIMATE SSEXP DYNEXP RESULT contained
 syn keyword spupExternalSubs   TRANSMIT RECEIVE contained
@@ -183,7 +186,7 @@ syn sync minlines=100
 syn sync maxlines=500
 
 syn sync match spupSyncOperation  grouphere spupOperation  "^OPERATION"
-syn sync match spupSyncCdi               grouphere spupCdi                "^CDI"
+syn sync match spupSyncCdi       grouphere spupCdi        "^CDI"
 syn sync match spupSyncConditions grouphere spupConditions "^CONDITIONS"
 syn sync match spupSyncDeclare    grouphere spupDeclare    "^DECLARE"
 syn sync match spupSyncEstimation grouphere spupEstimation "^ESTIMATION"
@@ -207,71 +210,73 @@ syn sync match spupSyncUnit       grouphere spupUnit       "^UNIT"
 " For version 5.8 and later: only when an item doesn't have highlighting yet
 if version >= 508 || !exists("did_spup_syn_inits")
     if version < 508
-               let did_spup_syn_inits = 1
-               command -nargs=+ HiLink hi link <args>
-       else
-               command -nargs=+ HiLink hi def link <args>
+       let did_spup_syn_inits = 1
+       command -nargs=+ HiLink hi link <args>
+    else
+       command -nargs=+ HiLink hi def link <args>
     endif
 
-       HiLink spupCdi                  spupSection
-       HiLink spupConditions   spupSection
-       HiLink spupDeclare              spupSection
-       HiLink spupEstimation   spupSection
-       HiLink spupExternal             spupSection
-       HiLink spupFlowsheet    spupSection
-       HiLink spupFunction             spupSection
-       HiLink spupGlobal               spupSection
-       HiLink spupHomotopy             spupSection
-       HiLink spupMacro                spupSection
-       HiLink spupModel                spupSection
-       HiLink spupOperation    spupSection
-       HiLink spupOptions              spupSection
-       HiLink spupProcedure    spupSection
-       HiLink spupProfiles             spupSection
-       HiLink spupReport               spupSection
-       HiLink spupTitle                spupConstant  " this is correct, truly ;)
-       HiLink spupUnit                 spupSection
+    HiLink spupCdi         spupSection
+    HiLink spupConditions   spupSection
+    HiLink spupDeclare     spupSection
+    HiLink spupEstimation   spupSection
+    HiLink spupExternal            spupSection
+    HiLink spupFlowsheet    spupSection
+    HiLink spupFunction            spupSection
+    HiLink spupGlobal      spupSection
+    HiLink spupHomotopy            spupSection
+    HiLink spupMacro       spupSection
+    HiLink spupModel       spupSection
+    HiLink spupOperation    spupSection
+    HiLink spupOptions     spupSection
+    HiLink spupProcedure    spupSection
+    HiLink spupProfiles            spupSection
+    HiLink spupReport      spupSection
+    HiLink spupTitle       spupConstant  " this is correct, truly ;)
+    HiLink spupUnit        spupSection
 
-       HiLink spupCdiSubs                spupSubs
-       HiLink spupConditionsSubs spupSubs
-       HiLink spupDeclareSubs    spupSubs
-       HiLink spupEstimationSubs spupSubs
-       HiLink spupExternalSubs   spupSubs
-       HiLink spupFlowsheetSubs  spupSubs
-       HiLink spupFunctionSubs   spupSubs
-       HiLink spupHomotopySubs   spupSubs
-       HiLink spupMacroSubs      spupSubs
-       HiLink spupModelSubs      spupSubs
-       HiLink spupOperationSubs  spupSubs
-       HiLink spupOptionsSubs    spupSubs
-       HiLink spupProcedureSubs  spupSubs
-       HiLink spupReportSubs     spupSubs
-       HiLink spupUnitSubs               spupSubs
+    HiLink spupCdiSubs       spupSubs
+    HiLink spupConditionsSubs spupSubs
+    HiLink spupDeclareSubs    spupSubs
+    HiLink spupEstimationSubs spupSubs
+    HiLink spupExternalSubs   spupSubs
+    HiLink spupFlowsheetSubs  spupSubs
+    HiLink spupFunctionSubs   spupSubs
+    HiLink spupHomotopySubs   spupSubs
+    HiLink spupMacroSubs      spupSubs
+    HiLink spupModelSubs      spupSubs
+    HiLink spupOperationSubs  spupSubs
+    HiLink spupOptionsSubs    spupSubs
+    HiLink spupProcedureSubs  spupSubs
+    HiLink spupReportSubs     spupSubs
+    HiLink spupUnitSubs              spupSubs
 
-       HiLink spupCode                    Normal
-       HiLink spupComment                 Comment
-       HiLink spupComment2                spupComment
-       HiLink spupConditional     Statement
-       HiLink spupConstant                Constant
-       HiLink spupError                   Error
-       HiLink spupHelp                    Normal
-       HiLink spupIdentifier      Identifier
-       HiLink spupNumber                  Constant
-       HiLink spupOperator                Special
-       HiLink spupOpenBrace       spupError
-       HiLink spupSection                 Statement
-       HiLink spupSpecial                 spupTextprocGeneric
-       HiLink spupStreams                 Type
-       HiLink spupString                  Constant
-       HiLink spupSubs                    Statement
-       HiLink spupSymbol                  Special
-       HiLink spupTextprocError   Normal
-       HiLink spupTextprocGeneric PreProc
-       HiLink spupTypes                   Type
+    HiLink spupCode           Normal
+    HiLink spupComment        Comment
+    HiLink spupComment2               spupComment
+    HiLink spupConditional     Statement
+    HiLink spupConstant               Constant
+    HiLink spupError          Error
+    HiLink spupHelp           Normal
+    HiLink spupIdentifier      Identifier
+    HiLink spupNumber         Constant
+    HiLink spupOperator               Special
+    HiLink spupOpenBrace       spupError
+    HiLink spupSection        Statement
+    HiLink spupSpecial        spupTextprocGeneric
+    HiLink spupStreams        Type
+    HiLink spupString         Constant
+    HiLink spupSubs           Statement
+    HiLink spupSymbol         Special
+    HiLink spupTextprocError   Normal
+    HiLink spupTextprocGeneric PreProc
+    HiLink spupTypes          Type
 
     delcommand HiLink
 endif
 
 let b:current_syntax = "spup"
 
-" vim:ts=4
+let &cpo = s:cpo_save
+unlet s:cpo_save
+" vim:ts=8
index 5abab38..05b05c9 100644 (file)
@@ -1,11 +1,12 @@
-
 " Vim syntax file
 " Language:    SQL, Adaptive Server Anywhere
-" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: 2009 Mar 15
-" Version:     11.0.1
+" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+" Last Change: 2013 May 13
+" Version:     16.0.0
 
-" Description: Updated to Adaptive Server Anywhere 11.0.1
+" Description: Updated to Adaptive Server Anywhere 16.0.0
+"              Updated to Adaptive Server Anywhere 12.0.1 (including spatial data)
+"              Updated to Adaptive Server Anywhere 11.0.1
 "              Updated to Adaptive Server Anywhere 10.0.1
 "              Updated to Adaptive Server Anywhere  9.0.2
 "              Updated to Adaptive Server Anywhere  9.0.1
@@ -26,33 +27,34 @@ syn case ignore
 syn keyword sqlSpecial  false null true
 
 " common functions
-syn keyword sqlFunction         count sum avg min max debug_eng isnull
-syn keyword sqlFunction         greater lesser argn string ymd todate
-syn keyword sqlFunction         totimestamp date today now utc_now
-syn keyword sqlFunction         number identity years months weeks days
-syn keyword sqlFunction         hours minutes seconds second minute hour
-syn keyword sqlFunction         day month year dow date_format substr
-syn keyword sqlFunction         substring byte_substr length byte_length
-syn keyword sqlFunction         datalength ifnull evaluate list
-syn keyword sqlFunction         soundex similar difference like_start
-syn keyword sqlFunction         like_end regexp_compile
-syn keyword sqlFunction         regexp_compile_patindex remainder abs
-syn keyword sqlFunction         graphical_plan plan explanation ulplan
-syn keyword sqlFunction         graphical_ulplan long_ulplan
-syn keyword sqlFunction         short_ulplan rewrite watcomsql
-syn keyword sqlFunction         transactsql dialect estimate
-syn keyword sqlFunction         estimate_source index_estimate
-syn keyword sqlFunction         experience_estimate traceback wsql_state
-syn keyword sqlFunction         lang_message dateadd datediff datepart
-syn keyword sqlFunction         datename dayname monthname quarter
-syn keyword sqlFunction         tsequal hextoint inttohex rand textptr
-syn keyword sqlFunction         rowid grouping stddev variance rank
-syn keyword sqlFunction         dense_rank density percent_rank user_name
-syn keyword sqlFunction         user_id str stuff char_length nullif
-syn keyword sqlFunction         sortkey compare ts_index_statistics
-syn keyword sqlFunction         ts_table_statistics isdate isnumeric
-syn keyword sqlFunction         get_identity lookup newid uuidtostr
-syn keyword sqlFunction         strtouuid varexists
+syn keyword sqlFunction  abs argn avg bintohex bintostr
+syn keyword sqlFunction  byte_length byte_substr char_length
+syn keyword sqlFunction  compare count count_big datalength date
+syn keyword sqlFunction  date_format dateadd datediff datename
+syn keyword sqlFunction  datepart day dayname days debug_eng
+syn keyword sqlFunction  dense_rank density dialect difference
+syn keyword sqlFunction  dow estimate estimate_source evaluate
+syn keyword sqlFunction  experience_estimate explanation
+syn keyword sqlFunction  get_identity graphical_plan
+syn keyword sqlFunction  graphical_ulplan greater grouping
+syn keyword sqlFunction  hextobin hextoint hour hours identity
+syn keyword sqlFunction  ifnull index_estimate inttohex isdate
+syn keyword sqlFunction  isencrypted isnull isnumeric
+syn keyword sqlFunction  lang_message length lesser like_end
+syn keyword sqlFunction  like_start list long_ulplan lookup max
+syn keyword sqlFunction  min minute minutes month monthname
+syn keyword sqlFunction  months newid now nullif number
+syn keyword sqlFunction  percent_rank plan quarter rand rank
+syn keyword sqlFunction  regexp_compile regexp_compile_patindex
+syn keyword sqlFunction  remainder rewrite rowid second seconds
+syn keyword sqlFunction  short_ulplan similar sortkey soundex
+syn keyword sqlFunction  stddev stack_trace str string strtobin strtouuid stuff
+syn keyword sqlFunction  subpartition substr substring sum switchoffset sysdatetimeoffset
+syn keyword sqlFunction  textptr todate todatetimeoffset today totimestamp traceback transactsql
+syn keyword sqlFunction  ts_index_statistics ts_table_statistics
+syn keyword sqlFunction  tsequal ulplan user_id user_name utc_now
+syn keyword sqlFunction  uuidtostr varexists variance watcomsql
+syn keyword sqlFunction  weeks wsql_state year years ymd
 
 " 9.0.1 functions
 syn keyword sqlFunction         acos asin atan atn2 cast ceiling convert cos cot
@@ -68,6 +70,9 @@ syn keyword sqlFunction        hash compress decompress encrypt decrypt
 syn keyword sqlFunction         connection_extended_property text_handle_vector_match
 syn keyword sqlFunction         read_client_file write_client_file
 
+" 12.0.1 functions
+syn keyword sqlFunction         http_response_header
+
 " string functions
 syn keyword sqlFunction         ascii char left ltrim repeat
 syn keyword sqlFunction         space right rtrim trim lcase ucase
@@ -359,7 +364,7 @@ syn keyword sqlFunction  xp_write_file
 
 " http functions
 syn keyword sqlFunction         http_header http_variable
-syn keyword sqlFunction         next_http_header next_http_variable
+syn keyword sqlFunction         next_http_header next_http_response_header next_http_variable
 syn keyword sqlFunction         sa_set_http_header sa_set_http_option
 syn keyword sqlFunction         sa_http_variable_info sa_http_header_info
 
@@ -367,119 +372,244 @@ syn keyword sqlFunction  sa_http_variable_info sa_http_header_info
 syn keyword sqlFunction         http_encode http_decode
 syn keyword sqlFunction         html_encode html_decode
 
+" XML function support
+syn keyword sqlFunction         openxml xmlelement xmlforest xmlgen xmlconcat xmlagg
+syn keyword sqlFunction         xmlattributes
+
+" Spatial Compatibility Functions
+syn keyword sqlFunction  ST_BdMPolyFromText
+syn keyword sqlFunction  ST_BdMPolyFromWKB
+syn keyword sqlFunction  ST_BdPolyFromText
+syn keyword sqlFunction  ST_BdPolyFromWKB
+syn keyword sqlFunction  ST_CPolyFromText
+syn keyword sqlFunction  ST_CPolyFromWKB
+syn keyword sqlFunction  ST_CircularFromTxt
+syn keyword sqlFunction  ST_CircularFromWKB
+syn keyword sqlFunction  ST_CompoundFromTxt
+syn keyword sqlFunction  ST_CompoundFromWKB
+syn keyword sqlFunction  ST_GeomCollFromTxt
+syn keyword sqlFunction  ST_GeomCollFromWKB
+syn keyword sqlFunction  ST_GeomFromText
+syn keyword sqlFunction  ST_GeomFromWKB
+syn keyword sqlFunction  ST_LineFromText
+syn keyword sqlFunction  ST_LineFromWKB
+syn keyword sqlFunction  ST_MCurveFromText
+syn keyword sqlFunction  ST_MCurveFromWKB
+syn keyword sqlFunction  ST_MLineFromText
+syn keyword sqlFunction  ST_MLineFromWKB
+syn keyword sqlFunction  ST_MPointFromText
+syn keyword sqlFunction  ST_MPointFromWKB
+syn keyword sqlFunction  ST_MPolyFromText
+syn keyword sqlFunction  ST_MPolyFromWKB
+syn keyword sqlFunction  ST_MSurfaceFromTxt
+syn keyword sqlFunction  ST_MSurfaceFromWKB
+syn keyword sqlFunction  ST_OrderingEquals
+syn keyword sqlFunction  ST_PointFromText
+syn keyword sqlFunction  ST_PointFromWKB
+syn keyword sqlFunction  ST_PolyFromText
+syn keyword sqlFunction  ST_PolyFromWKB
+" Spatial Structural Methods
+syn keyword sqlFunction  ST_CoordDim
+syn keyword sqlFunction  ST_CurveN
+syn keyword sqlFunction  ST_Dimension
+syn keyword sqlFunction  ST_EndPoint
+syn keyword sqlFunction  ST_ExteriorRing
+syn keyword sqlFunction  ST_GeometryN
+syn keyword sqlFunction  ST_GeometryType
+syn keyword sqlFunction  ST_InteriorRingN
+syn keyword sqlFunction  ST_Is3D
+syn keyword sqlFunction  ST_IsClosed
+syn keyword sqlFunction  ST_IsEmpty
+syn keyword sqlFunction  ST_IsMeasured
+syn keyword sqlFunction  ST_IsRing
+syn keyword sqlFunction  ST_IsSimple
+syn keyword sqlFunction  ST_IsValid
+syn keyword sqlFunction  ST_NumCurves
+syn keyword sqlFunction  ST_NumGeometries
+syn keyword sqlFunction  ST_NumInteriorRing
+syn keyword sqlFunction  ST_NumPoints
+syn keyword sqlFunction  ST_PointN
+syn keyword sqlFunction  ST_StartPoint
+"Spatial Computation
+syn keyword sqlFunction  ST_Length
+syn keyword sqlFunction  ST_Area
+syn keyword sqlFunction  ST_Centroid
+syn keyword sqlFunction  ST_Area
+syn keyword sqlFunction  ST_Centroid
+syn keyword sqlFunction  ST_IsWorld
+syn keyword sqlFunction  ST_Perimeter
+syn keyword sqlFunction  ST_PointOnSurface
+syn keyword sqlFunction  ST_Distance
+" Spatial Input/Output
+syn keyword sqlFunction  ST_AsBinary
+syn keyword sqlFunction  ST_AsGML
+syn keyword sqlFunction  ST_AsGeoJSON
+syn keyword sqlFunction  ST_AsSVG
+syn keyword sqlFunction  ST_AsSVGAggr
+syn keyword sqlFunction  ST_AsText
+syn keyword sqlFunction  ST_AsWKB
+syn keyword sqlFunction  ST_AsWKT
+syn keyword sqlFunction  ST_AsXML
+syn keyword sqlFunction  ST_GeomFromBinary
+syn keyword sqlFunction  ST_GeomFromShape
+syn keyword sqlFunction  ST_GeomFromText
+syn keyword sqlFunction  ST_GeomFromWKB
+syn keyword sqlFunction  ST_GeomFromWKT
+syn keyword sqlFunction  ST_GeomFromXML
+" Spatial Cast Methods
+syn keyword sqlFunction  ST_CurvePolyToPoly
+syn keyword sqlFunction  ST_CurveToLine
+syn keyword sqlFunction  ST_ToCircular
+syn keyword sqlFunction  ST_ToCompound
+syn keyword sqlFunction  ST_ToCurve
+syn keyword sqlFunction  ST_ToCurvePoly
+syn keyword sqlFunction  ST_ToGeomColl
+syn keyword sqlFunction  ST_ToLineString
+syn keyword sqlFunction  ST_ToMultiCurve
+syn keyword sqlFunction  ST_ToMultiLine
+syn keyword sqlFunction  ST_ToMultiPoint
+syn keyword sqlFunction  ST_ToMultiPolygon
+syn keyword sqlFunction  ST_ToMultiSurface
+syn keyword sqlFunction  ST_ToPoint
+syn keyword sqlFunction  ST_ToPolygon
+syn keyword sqlFunction  ST_ToSurface
+
+" Array functions 16.x
+syn keyword sqlFunction         array array_agg array_max_cardinality trim_array
+syn keyword sqlFunction         error_line error_message error_procedure
+syn keyword sqlFunction         error_sqlcode error_sqlstate error_stack_trace
+
+
 " keywords
-syn keyword sqlKeyword  absolute accent action active add address aes_decrypt
-syn keyword sqlKeyword  after aggregate algorithm allow_dup_row allowed
-syn keyword sqlKeyword  alter and ansi_substring any as append apply asc ascii ase
-syn keyword sqlKeyword  assign at atan2 atomic attach attended audit authorization
+syn keyword sqlKeyword  absolute accent access account action active activate add address admin
+syn keyword sqlKeyword  aes_decrypt after aggregate algorithm allow_dup_row allow allowed alter
+syn keyword sqlKeyword  always and angular ansi_substring any as append apply
+syn keyword sqlKeyword  arbiter array asc ascii ase
+syn keyword sqlKeyword  assign at atan2 atomic attended
+syn keyword sqlKeyword  audit auditing authentication authorization axis
 syn keyword sqlKeyword  autoincrement autostop batch bcp before
 syn keyword sqlKeyword  between bit_and bit_length bit_or bit_substr bit_xor
 syn keyword sqlKeyword  blank blanks block
-syn keyword sqlKeyword  both bottom unbounded break breaker bufferpool
+syn keyword sqlKeyword  both bottom unbounded breaker bufferpool
 syn keyword sqlKeyword  build bulk by byte bytes cache calibrate calibration
-syn keyword sqlKeyword  cancel capability cascade cast
-syn keyword sqlKeyword  catalog ceil changes char char_convert check checksum
-syn keyword sqlKeyword  class classes client cmp
+syn keyword sqlKeyword  cancel capability cardinality cascade cast
+syn keyword sqlKeyword  catalog catch ceil change changes char char_convert
+syn keyword sqlKeyword  check checkpointlog checksum class classes client cmp
 syn keyword sqlKeyword  cluster clustered collation
 syn keyword sqlKeyword  column columns
-syn keyword sqlKeyword  command comment committed comparisons
+syn keyword sqlKeyword  command comments committed commitid comparisons
 syn keyword sqlKeyword  compatible component compressed compute computes
 syn keyword sqlKeyword  concat configuration confirm conflict connection
 syn keyword sqlKeyword  console consolidate consolidated
-syn keyword sqlKeyword  constraint constraints content continue
-syn keyword sqlKeyword  convert coordinator copy count count_set_bits
-syn keyword sqlKeyword  crc createtime cross cube cume_dist
+syn keyword sqlKeyword  constraint constraints content
+syn keyword sqlKeyword  convert coordinate coordinator copy count count_set_bits
+syn keyword sqlKeyword  crc createtime critical cross cube cume_dist
 syn keyword sqlKeyword  current cursor data data database
-syn keyword sqlKeyword  current_timestamp current_user
+syn keyword sqlKeyword  current_timestamp current_user cycle
 syn keyword sqlKeyword  databases datatype dba dbfile
 syn keyword sqlKeyword  dbspace dbspaces dbspacename debug decoupled
 syn keyword sqlKeyword  decrypted default defaults default_dbspace deferred
 syn keyword sqlKeyword  definer definition
 syn keyword sqlKeyword  delay deleting delimited dependencies desc
-syn keyword sqlKeyword  description detach deterministic directory
-syn keyword sqlKeyword  disable disabled distinct do domain download duplicate
-syn keyword sqlKeyword  dsetpass dttm dynamic each editproc ejb
-syn keyword sqlKeyword  else elseif empty enable encapsulated encrypted end
-syn keyword sqlKeyword  encoding endif engine environment erase error escape escapes event
-syn keyword sqlKeyword  event_parameter every except exception exclude excluded exclusive exec
+syn keyword sqlKeyword  description deterministic directory
+syn keyword sqlKeyword  disable disabled disallow distinct disksandbox disk_sandbox
+syn keyword sqlKeyword  dn do domain download duplicate
+syn keyword sqlKeyword  dsetpass dttm dynamic each earth editproc effective ejb
+syn keyword sqlKeyword  elimination ellipsoid else elseif
+syn keyword sqlKeyword  email empty enable encapsulated encrypted encryption end
+syn keyword sqlKeyword  encoding endif engine environment erase error errors escape escapes event
+syn keyword sqlKeyword  event_parameter every exception exclude excluded exclusive exec
 syn keyword sqlKeyword  existing exists expanded expiry express exprtype extended_property
 syn keyword sqlKeyword  external externlogin factor failover false
-syn keyword sqlKeyword  fastfirstrow fieldproc file files filler
-syn keyword sqlKeyword  fillfactor finish first first_keyword first_value
-syn keyword sqlKeyword  following force foreign format forxml forxml_sep fp frame
-syn keyword sqlKeyword  freepage french fresh full function gb get_bit go global
+syn keyword sqlKeyword  fastfirstrow feature fieldproc file files filler
+syn keyword sqlKeyword  fillfactor final finish first first_keyword first_value
+syn keyword sqlKeyword  flattening
+syn keyword sqlKeyword  following force foreign format forjson forxml forxml_sep fp frame
+syn keyword sqlKeyword  free freepage french fresh full function
+syn keyword sqlKeyword  gb generic get_bit go global grid
 syn keyword sqlKeyword  group handler hash having header hexadecimal
 syn keyword sqlKeyword  hidden high history hg hng hold holdlock host
 syn keyword sqlKeyword  hours http_body http_session_timeout id identified identity ignore
 syn keyword sqlKeyword  ignore_dup_key ignore_dup_row immediate
-syn keyword sqlKeyword  in inactiv inactive inactivity included incremental
-syn keyword sqlKeyword  index index_enabled index_lparen indexonly info
-syn keyword sqlKeyword  inline inner inout insensitive inserting
-syn keyword sqlKeyword  instead integrated
-syn keyword sqlKeyword  internal intersection into introduced invoker iq is isolation
+syn keyword sqlKeyword  in inactiv inactive inactivity included increment incremental
+syn keyword sqlKeyword  index index_enabled index_lparen indexonly info information
+syn keyword sqlKeyword  inheritance inline inner inout insensitive inserting
+syn keyword sqlKeyword  instead
+syn keyword sqlKeyword  internal intersection into introduced inverse invoker
+syn keyword sqlKeyword  iq is isolation
 syn keyword sqlKeyword  jar java java_location java_main_userid java_vm_options
-syn keyword sqlKeyword  jconnect jdk join kb key keep kerberos language last
-syn keyword sqlKeyword  last_keyword last_value lateral ld left len lf ln level like
+syn keyword sqlKeyword  jconnect jdk join json kb key keys keep language last
+syn keyword sqlKeyword  last_keyword last_value lateral latitude
+syn keyword sqlKeyword  ld ldap left len linear lf ln level like
 syn keyword sqlKeyword  limit local location log
-syn keyword sqlKeyword  logging login logscan long low lru main manual mark
-syn keyword sqlKeyword  match matched materialized max maximum mb membership
-syn keyword sqlKeyword  merge metadata methods minimum minutes mirror mode modify monitor move mru
-syn keyword sqlKeyword  multiplex name named national native natural new next no
-syn keyword sqlKeyword  noholdlock nolock nonclustered none not
-syn keyword sqlKeyword  notify null nullable_constant nulls object oem_string of off offline
-syn keyword sqlKeyword  old on online only openstring optimization optimizer option
-syn keyword sqlKeyword  or order others out outer over
+syn keyword sqlKeyword  logging logical login logscan long longitude low lru ls
+syn keyword sqlKeyword  main major manage manual mark master
+syn keyword sqlKeyword  match matched materialized max maxvalue maximum mb measure median membership
+syn keyword sqlKeyword  merge metadata methods migrate minimum minor minutes minvalue mirror
+syn keyword sqlKeyword  mode modify monitor move mru multiplex
+syn keyword sqlKeyword  name named namespaces national native natural new next nextval
+syn keyword sqlKeyword  ngram no noholdlock nolock nonclustered none normal not
+syn keyword sqlKeyword  notify null nullable_constant nulls
+syn keyword sqlKeyword  object objects oem_string of off offline offset olap
+syn keyword sqlKeyword  old on online only openstring operator
+syn keyword sqlKeyword  optimization optimizer option
+syn keyword sqlKeyword  or order ordinality organization others out outer over owner
 syn keyword sqlKeyword  package packetsize padding page pages
-syn keyword sqlKeyword  paglock parallel part partial partition partitions partner password path
-syn keyword sqlKeyword  pctfree plan policy populate port postfilter preceding precision
-syn keyword sqlKeyword  prefetch prefilter prefix preserve preview primary
-syn keyword sqlKeyword  prior priority priqty private privileges procedure profile
+syn keyword sqlKeyword  paglock parallel parameter parent part partial
+syn keyword sqlKeyword  partition partitions partner password path pctfree
+syn keyword sqlKeyword  permissions perms plan planar policy polygon populate port postfilter preceding
+syn keyword sqlKeyword  precisionprefetch prefilter prefix preserve preview previous
+syn keyword sqlKeyword  primary prior priority priqty private privilege privileges procedure profile profiling
 syn keyword sqlKeyword  property_is_cumulative property_is_numeric public publication publish publisher
 syn keyword sqlKeyword  quiesce quote quotes range readclientfile readcommitted reader readfile readonly
 syn keyword sqlKeyword  readpast readuncommitted readwrite rebuild
 syn keyword sqlKeyword  received recompile recover recursive references
-syn keyword sqlKeyword  referencing refresh regex regexp regexp_substr relative relocate
-syn keyword sqlKeyword  rename repeatable repeatableread
-syn keyword sqlKeyword  replicate request_timeout required rereceive resend reserve reset
-syn keyword sqlKeyword  resizing resolve resource respect
-syn keyword sqlKeyword  restrict result retain
-syn keyword sqlKeyword  returns reverse right role
-syn keyword sqlKeyword  rollup root row row_number rowlock rows save
+syn keyword sqlKeyword  referencing regex regexp regexp_substr relative relocate
+syn keyword sqlKeyword  rename repeatable repeatableread replicate replication
+syn keyword sqlKeyword  requests request_timeout required rereceive resend reserve reset
+syn keyword sqlKeyword  resizing resolve resource respect restart
+syn keyword sqlKeyword  restrict result retain retries
+syn keyword sqlKeyword  returns reverse right role roles
+syn keyword sqlKeyword  rollup root row row_number rowlock rows rowtype
 syn keyword sqlKeyword  sa_index_hash sa_internal_fk_verify sa_internal_termbreak
 syn keyword sqlKeyword  sa_order_preserving_hash sa_order_preserving_hash_big sa_order_preserving_hash_prefix
-syn keyword sqlKeyword  schedule schema scope scripted scroll seconds secqty security
-syn keyword sqlKeyword  send sensitive sent serializable
-syn keyword sqlKeyword  server server session set_bit set_bits sets
-syn keyword sqlKeyword  share simple since site size skip
-syn keyword sqlKeyword  snapshot soapheader soap_header split some sorted_data
-syn keyword sqlKeyword  sqlcode sqlid sqlflagger sqlstate sqrt square
-syn keyword sqlKeyword  stacker stale statement statistics status stddev_pop stddev_samp
-syn keyword sqlKeyword  stemmer stogroup stoplist store
+syn keyword sqlKeyword  sa_file_free_pages sa_internal_type_from_catalog sa_internal_valid_hash
+syn keyword sqlKeyword  sa_internal_validate_value sa_json_element
+syn keyword sqlKeyword  scale schedule schema scope script scripted scroll search seconds secqty security
+syn keyword sqlKeyword  semi send sensitive sent sequence serializable
+syn keyword sqlKeyword  server severity session set_bit set_bits sets
+syn keyword sqlKeyword  shapefile share side simple since site size skip
+syn keyword sqlKeyword  snap snapshot soapheader soap_header
+syn keyword sqlKeyword  spatial split some sorted_data
+syn keyword sqlKeyword  sql sqlcode sqlid sqlflagger sqlstate sqrt square
+syn keyword sqlKeyword  stacker stale state statement statistics status stddev_pop stddev_samp
+syn keyword sqlKeyword  stemmer stogroup stoplist storage store
 syn keyword sqlKeyword  strip stripesizekb striping subpages subscribe subscription
-syn keyword sqlKeyword  subtransaction suser_id suser_name synchronization
-syn keyword sqlKeyword  syntax_error table tablock
-syn keyword sqlKeyword  tablockx tb temp template temporary term then
-syn keyword sqlKeyword  ties timezone to to_char to_nchar top traced_plan tracing
-syn keyword sqlKeyword  transfer transaction transactional tries true
-syn keyword sqlKeyword  tsequal type tune uncommitted unconditionally
-syn keyword sqlKeyword  unenforced unicode unique union unistr unknown unlimited unload
+syn keyword sqlKeyword  subtransaction suser_id suser_name suspend synchronization
+syn keyword sqlKeyword  syntax_error table tables tablock
+syn keyword sqlKeyword  tablockx target tb temp template temporary term then ties
+syn keyword sqlKeyword  timezone timeout tls to to_char to_nchar tolerance top
+syn keyword sqlKeyword  trace traced_plan tracing
+syn keyword sqlKeyword  transfer transform transaction transactional treat tries
+syn keyword sqlKeyword  true try tsequal type tune uncommitted unconditionally
+syn keyword sqlKeyword  unenforced unicode unique unistr unit unknown unlimited unload
 syn keyword sqlKeyword  unpartition unquiesce updatetime updating updlock upgrade upload
-syn keyword sqlKeyword  upper use user
+syn keyword sqlKeyword  upper usage use user
 syn keyword sqlKeyword  using utc utilities validproc
 syn keyword sqlKeyword  value values varchar variable
-syn keyword sqlKeyword  varying var_pop var_samp vcat verify versions view virtual wait
-syn keyword sqlKeyword  warning wd web when where window with with_auto
+syn keyword sqlKeyword  varying var_pop var_samp vcat verbosity
+syn keyword sqlKeyword  verify versions view virtual wait
+syn keyword sqlKeyword  warning wd web when where with with_auto
 syn keyword sqlKeyword  with_auto with_cube with_rollup without
 syn keyword sqlKeyword  with_lparen within word work workload write writefile
-syn keyword sqlKeyword  writeclientfile writer writers writeserver xlock zeros
-" XML function support
-syn keyword sqlFunction         openxml xmlelement xmlforest xmlgen xmlconcat xmlagg
-syn keyword sqlFunction         xmlattributes
+syn keyword sqlKeyword  writeclientfile writer writers writeserver xlock
+syn keyword sqlKeyword  war xml zeros zone
+" XML
 syn keyword sqlKeyword  raw auto elements explicit
 " HTTP support
 syn keyword sqlKeyword  authorization secure url service next_soap_header
 " HTTP 9.0.2 new procedure keywords
-syn keyword sqlKeyword  namespace certificate clientport proxy
+syn keyword sqlKeyword  namespace certificate certificates clientport proxy trusted_certificates_file
 " OLAP support 9.0.0
 syn keyword sqlKeyword  covar_pop covar_samp corr regr_slope regr_intercept
 syn keyword sqlKeyword  regr_count regr_r2 regr_avgx regr_avgy
@@ -489,37 +619,123 @@ syn keyword sqlKeyword    regr_sxx regr_syy regr_sxy
 syn keyword sqlKeyword  character dec options proc reference
 syn keyword sqlKeyword  subtrans tran syn keyword
 
+" Login Mode Options
+syn keyword sqlKeywordLogin     standard integrated kerberos LDAPUA
+syn keyword sqlKeywordLogin     cloudadmin mixed
+
+" Spatial Predicates
+syn keyword sqlKeyword   ST_Contains
+syn keyword sqlKeyword   ST_ContainsFilter
+syn keyword sqlKeyword   ST_CoveredBy
+syn keyword sqlKeyword   ST_CoveredByFilter
+syn keyword sqlKeyword   ST_Covers
+syn keyword sqlKeyword   ST_CoversFilter
+syn keyword sqlKeyword   ST_Crosses
+syn keyword sqlKeyword   ST_Disjoint
+syn keyword sqlKeyword   ST_Equals
+syn keyword sqlKeyword   ST_EqualsFilter
+syn keyword sqlKeyword   ST_Intersects
+syn keyword sqlKeyword   ST_IntersectsFilter
+syn keyword sqlKeyword   ST_IntersectsRect
+syn keyword sqlKeyword   ST_OrderingEquals
+syn keyword sqlKeyword   ST_Overlaps
+syn keyword sqlKeyword   ST_Relate
+syn keyword sqlKeyword   ST_Touches
+syn keyword sqlKeyword   ST_Within
+syn keyword sqlKeyword   ST_WithinFilter
+" Spatial Set operations
+syn keyword sqlKeyword   ST_Affine
+syn keyword sqlKeyword   ST_Boundary
+syn keyword sqlKeyword   ST_Buffer
+syn keyword sqlKeyword   ST_ConvexHull
+syn keyword sqlKeyword   ST_ConvexHullAggr
+syn keyword sqlKeyword   ST_Difference
+syn keyword sqlKeyword   ST_Intersection
+syn keyword sqlKeyword   ST_IntersectionAggr
+syn keyword sqlKeyword   ST_SymDifference
+syn keyword sqlKeyword   ST_Union
+syn keyword sqlKeyword   ST_UnionAggr
+" Spatial Bounds
+syn keyword sqlKeyword   ST_Envelope
+syn keyword sqlKeyword   ST_EnvelopeAggr
+syn keyword sqlKeyword   ST_Lat
+syn keyword sqlKeyword   ST_LatMax
+syn keyword sqlKeyword   ST_LatMin
+syn keyword sqlKeyword   ST_Long
+syn keyword sqlKeyword   ST_LongMax
+syn keyword sqlKeyword   ST_LongMin
+syn keyword sqlKeyword   ST_M
+syn keyword sqlKeyword   ST_MMax
+syn keyword sqlKeyword   ST_MMin
+syn keyword sqlKeyword   ST_Point
+syn keyword sqlKeyword   ST_X
+syn keyword sqlKeyword   ST_XMax
+syn keyword sqlKeyword   ST_XMin
+syn keyword sqlKeyword   ST_Y
+syn keyword sqlKeyword   ST_YMax
+syn keyword sqlKeyword   ST_YMin
+syn keyword sqlKeyword   ST_Z
+syn keyword sqlKeyword   ST_ZMax
+syn keyword sqlKeyword   ST_ZMin
+" Spatial Collection Aggregates
+syn keyword sqlKeyword   ST_GeomCollectionAggr
+syn keyword sqlKeyword   ST_LineStringAggr
+syn keyword sqlKeyword   ST_MultiCurveAggr
+syn keyword sqlKeyword   ST_MultiLineStringAggr
+syn keyword sqlKeyword   ST_MultiPointAggr
+syn keyword sqlKeyword   ST_MultiPolygonAggr
+syn keyword sqlKeyword   ST_MultiSurfaceAggr
+syn keyword sqlKeyword   ST_Perimeter
+syn keyword sqlKeyword   ST_PointOnSurface
+" Spatial SRS
+syn keyword sqlKeyword   ST_CompareWKT
+syn keyword sqlKeyword   ST_FormatWKT
+syn keyword sqlKeyword   ST_ParseWKT
+syn keyword sqlKeyword   ST_TransformGeom
+syn keyword sqlKeyword   ST_GeometryTypeFromBaseType
+syn keyword sqlKeyword   ST_SnapToGrid
+syn keyword sqlKeyword   ST_Transform
+syn keyword sqlKeyword   ST_SRID
+syn keyword sqlKeyword   ST_SRIDFromBaseType
+syn keyword sqlKeyword   ST_LoadConfigurationData
+" Spatial Indexes
+syn keyword sqlKeyword   ST_LinearHash
+syn keyword sqlKeyword   ST_LinearUnHash
 
 syn keyword sqlOperator         in any some all between exists
 syn keyword sqlOperator         like escape not is and or
-syn keyword sqlOperator  intersect minus
-syn keyword sqlOperator  prior distinct
+syn keyword sqlOperator  minus
+syn keyword sqlOperator  prior distinct unnest
 
-syn keyword sqlStatement allocate alter backup begin call case
-syn keyword sqlStatement checkpoint clear close commit configure connect
-syn keyword sqlStatement create deallocate declare delete describe
-syn keyword sqlStatement disconnect drop execute exit explain fetch
+syn keyword sqlStatement allocate alter attach backup begin break call case catch
+syn keyword sqlStatement checkpoint clear close comment commit configure connect
+syn keyword sqlStatement continue create deallocate declare delete describe
+syn keyword sqlStatement detach disconnect drop except execute exit explain fetch
 syn keyword sqlStatement for forward from get goto grant help if include
-syn keyword sqlStatement input insert install leave load lock loop
-syn keyword sqlStatement message open output parameter parameters passthrough
-syn keyword sqlStatement prepare print put raiserror read readtext release
+syn keyword sqlStatement input insert install intersect leave load lock loop
+syn keyword sqlStatement message open output parameters passthrough
+syn keyword sqlStatement prepare print put raiserror read readtext refresh release
 syn keyword sqlStatement remote remove reorganize resignal restore resume
-syn keyword sqlStatement return revoke rollback savepoint select
+syn keyword sqlStatement return revoke rollback save savepoint select
 syn keyword sqlStatement set setuser signal start stop synchronize
-syn keyword sqlStatement system trigger truncate unload update
-syn keyword sqlStatement validate waitfor whenever while writetext
+syn keyword sqlStatement system trigger truncate try union unload update
+syn keyword sqlStatement validate waitfor whenever while window writetext
 
 
-syn keyword sqlType     char long varchar text
-syn keyword sqlType     bigint decimal double float int integer numeric
+syn keyword sqlType     char nchar long varchar nvarchar text ntext uniqueidentifierstr xml
+syn keyword sqlType     bigint bit decimal double varbit
+syn keyword sqlType     float int integer numeric
 syn keyword sqlType     smallint tinyint real
 syn keyword sqlType     money smallmoney
-syn keyword sqlType     bit
-syn keyword sqlType     date datetime smalldate time timestamp
-syn keyword sqlType     binary image varbinary uniqueidentifier
-syn keyword sqlType     xml unsigned
-" New types 10.0.0
-syn keyword sqlType     varbit nchar nvarchar
+syn keyword sqlType     date datetime datetimeoffset smalldatetime time timestamp
+syn keyword sqlType     binary image varray varbinary uniqueidentifier
+syn keyword sqlType     unsigned
+" Spatial types
+syn keyword sqlType     st_geometry st_point st_curve st_surface st_geomcollection
+syn keyword sqlType     st_linestring st_circularstring st_compoundcurve
+syn keyword sqlType     st_curvepolygon st_polygon
+syn keyword sqlType     st_multipoint st_multicurve st_multisurface
+syn keyword sqlType     st_multilinestring st_multipolygon
 
 syn keyword sqlOption    Allow_nulls_by_default
 syn keyword sqlOption    Allow_read_client_file
@@ -533,8 +749,10 @@ syn keyword sqlOption    Ansi_update_constraints
 syn keyword sqlOption    Ansinull
 syn keyword sqlOption    Auditing
 syn keyword sqlOption    Auditing_options
+syn keyword sqlOption    Auto_commit_on_create_local_temp_index
 syn keyword sqlOption    Background_priority
 syn keyword sqlOption    Blocking
+syn keyword sqlOption    Blocking_others_timeout
 syn keyword sqlOption    Blocking_timeout
 syn keyword sqlOption    Chained
 syn keyword sqlOption    Checkpoint_time
@@ -551,23 +769,29 @@ syn keyword sqlOption    Cooperative_commits
 syn keyword sqlOption    Database_authentication
 syn keyword sqlOption    Date_format
 syn keyword sqlOption    Date_order
+syn keyword sqlOption    db_publisher
 syn keyword sqlOption    Debug_messages
 syn keyword sqlOption    Dedicated_task
 syn keyword sqlOption    Default_dbspace
 syn keyword sqlOption    Default_timestamp_increment
 syn keyword sqlOption    Delayed_commit_timeout
 syn keyword sqlOption    Delayed_commits
+syn keyword sqlOption    Divide_by_zero_error
 syn keyword sqlOption    Escape_character
 syn keyword sqlOption    Exclude_operators
 syn keyword sqlOption    Extended_join_syntax
+syn keyword sqlOption    Extern_login_credentials
 syn keyword sqlOption    Fire_triggers
 syn keyword sqlOption    First_day_of_week
 syn keyword sqlOption    For_xml_null_treatment
 syn keyword sqlOption    Force_view_creation
 syn keyword sqlOption    Global_database_id
 syn keyword sqlOption    Http_session_timeout
+syn keyword sqlOption    Http_connection_pool_basesize
+syn keyword sqlOption    Http_connection_pool_timeout
 syn keyword sqlOption    Integrated_server_name
 syn keyword sqlOption    Isolation_level
+syn keyword sqlOption    Java_class_path
 syn keyword sqlOption    Java_location
 syn keyword sqlOption    Java_main_userid
 syn keyword sqlOption    Java_vm_options
@@ -586,6 +810,7 @@ syn keyword sqlOption    Max_recursive_iterations
 syn keyword sqlOption    Max_statement_count
 syn keyword sqlOption    Max_temp_space
 syn keyword sqlOption    Min_password_length
+syn keyword sqlOption    Min_role_admins
 syn keyword sqlOption    Nearest_century
 syn keyword sqlOption    Non_keywords
 syn keyword sqlOption    Odbc_describe_binary_as_varbinary
@@ -603,6 +828,7 @@ syn keyword sqlOption    Prefetch
 syn keyword sqlOption    Preserve_source_format
 syn keyword sqlOption    Prevent_article_pkey_update
 syn keyword sqlOption    Priority
+syn keyword sqlOption    Progress_messages
 syn keyword sqlOption    Query_mem_timeout
 syn keyword sqlOption    Quoted_identifier
 syn keyword sqlOption    Read_past_deleted
@@ -610,6 +836,7 @@ syn keyword sqlOption    Recovery_time
 syn keyword sqlOption    Remote_idle_timeout
 syn keyword sqlOption    Replicate_all
 syn keyword sqlOption    Request_timeout
+syn keyword sqlOption    Reserved_keywords
 syn keyword sqlOption    Return_date_time_as_string
 syn keyword sqlOption    Rollback_on_deadlock
 syn keyword sqlOption    Row_counts
@@ -619,6 +846,12 @@ syn keyword sqlOption    Sort_collation
 syn keyword sqlOption    Sql_flagger_error_level
 syn keyword sqlOption    Sql_flagger_warning_level
 syn keyword sqlOption    String_rtruncation
+syn keyword sqlOption    st_geometry_asbinary_format
+syn keyword sqlOption    st_geometry_astext_format
+syn keyword sqlOption    st_geometry_asxml_format
+syn keyword sqlOption    st_geometry_describe_type
+syn keyword sqlOption    st_geometry_interpolation
+syn keyword sqlOption    st_geometry_on_invalid
 syn keyword sqlOption    Subsume_row_locks
 syn keyword sqlOption    Suppress_tds_debugging
 syn keyword sqlOption    Synchronize_mirror_on_commit
@@ -627,6 +860,7 @@ syn keyword sqlOption    Temp_space_limit_check
 syn keyword sqlOption    Time_format
 syn keyword sqlOption    Time_zone_adjustment
 syn keyword sqlOption    Timestamp_format
+syn keyword sqlOption    Timestamp_with_time_zone_format
 syn keyword sqlOption    Truncate_timestamp_values
 syn keyword sqlOption    Tsql_outer_joins
 syn keyword sqlOption    Tsql_variables
@@ -634,9 +868,11 @@ syn keyword sqlOption    Updatable_statement_isolation
 syn keyword sqlOption    Update_statistics
 syn keyword sqlOption    Upgrade_database_capability
 syn keyword sqlOption    User_estimates
+syn keyword sqlOption    Uuid_has_hyphens
 syn keyword sqlOption    Verify_password_function
 syn keyword sqlOption    Wait_for_commit
 syn keyword sqlOption    Webservice_namespace_host
+syn keyword sqlOption    Webservice_sessionid_name
 
 " Strings and characters:
 syn region sqlString           start=+"+    end=+"+ contains=@Spell
@@ -654,32 +890,18 @@ syn sync ccomment sqlComment
 syn sync ccomment sqlDashComment
 syn sync ccomment sqlSlashComment
 
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_sql_syn_inits")
-    if version < 508
-        let did_sql_syn_inits = 1
-        command -nargs=+ HiLink hi link <args>
-    else
-        command -nargs=+ HiLink hi link <args>
-    endif
-
-    HiLink sqlDashComment      Comment
-    HiLink sqlSlashComment     Comment
-    HiLink sqlMultiComment     Comment
-    HiLink sqlNumber           Number
-    HiLink sqlOperator         Operator
-    HiLink sqlSpecial          Special
-    HiLink sqlKeyword          Keyword
-    HiLink sqlStatement                Statement
-    HiLink sqlString           String
-    HiLink sqlType             Type
-    HiLink sqlFunction         Function
-    HiLink sqlOption           PreProc
-
-    delcommand HiLink
-endif
+hi def link sqlDashComment     Comment
+hi def link sqlSlashComment    Comment
+hi def link sqlMultiComment    Comment
+hi def link sqlNumber          Number
+hi def link sqlOperator                Operator
+hi def link sqlSpecial         Special
+hi def link sqlKeyword         Keyword
+hi def link sqlStatement       Statement
+hi def link sqlString          String
+hi def link sqlType            Type
+hi def link sqlFunction                Function
+hi def link sqlOption          PreProc
 
 let b:current_syntax = "sqlanywhere"
 
diff --git a/runtime/syntax/sqlhana.vim b/runtime/syntax/sqlhana.vim
new file mode 100644 (file)
index 0000000..1410e99
--- /dev/null
@@ -0,0 +1,293 @@
+" Vim syntax file
+" Language:    SQL, SAP HANA In Memory Database
+" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+" Last Change: 2012 Oct 23
+" Version:     SP4 b (Q2 2012)
+" Homepage:    http://www.vim.org/scripts/script.php?script_id=4275
+
+" Description: Updated to SAP HANA SP4
+"
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+    syntax clear
+elseif exists("b:current_syntax")
+    finish
+endif
+
+syn case ignore
+
+" The SQL reserved words, defined as keywords.
+" These were pulled from the following SQL reference:
+"     http://help.sap.com/hana/hana_sql_en.pdf
+" An easy approach is to copy all text from the PDF
+" into a Vim buffer.  The keywords are in UPPER case,
+" so you can run the following commands to be left with
+" mainly the UPPER case words:
+"   1.  Delete all words that do not begin with a Capital
+"       %s/\(\<[^A-Z]\w*\>\)//g
+"   2.  Remove all words where the 2nd letter is not a Capital
+"       %s/\(\<[A-Z][^A-Z]\w*\>\)//g
+"   3.  Remove all non-word (or space) characters
+"       %s/[^0-9A-Za-z_ ]*//g
+"   4.  Remove some known words
+"       %s/\<\(SAP\|HANA\|OK\|AG\|IBM\|DB2\|AIX\|POWER\d\+\|UNIX\)\>//g
+"   5.  Remove blank lines and trailing spaces
+"       %s/\s\+$//g
+"       %s/^\s\+//g
+"       %s/^$\n//g
+"   6.  Convert spaces to newlines remove single character
+"       %s/[ ]\+/\r/g
+"       %g/^\w$/d
+"   7.  Sort and remove duplicates
+"       :sort
+"       :Uniq
+"   8.  Use the WhatsMissing plugin against the sqlhana.vim file.
+"   9.  Generated a file of all UPPER cased words which should not
+"       be in the syntax file.  These items should be removed
+"       from the list in step 7.  You can use WhatsNotMissing
+"       between step 7 and this new file to weed out the words
+"       we know are not syntax related.
+"  10.  Use the WhatsMissingRemoveMatches to remove the words
+"       from step 9.
+
+syn keyword sqlSpecial  false null true
+
+" Supported Functions for Date/Time types
+syn keyword sqlFunction         ADD_DAYS ADD_MONTHS ADD_SECONDS ADD_YEARS COALESCE
+syn keyword sqlFunction         CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_UTCDATE
+syn keyword sqlFunction         CURRENT_UTCTIME CURRENT_UTCTIMESTAMP
+syn keyword sqlFunction         DAYNAME DAYOFMONTH DAYOFYEAR DAYS_BETWEEN EXTRACT
+syn keyword sqlFunction         GREATEST HOUR IFNULL ISOWEEK LAST_DAY LEAST LOCALTOUTC
+syn keyword sqlFunction         MINUTE MONTH MONTHNAME NEXT_DAY NOW QUARTER SECOND
+syn keyword sqlFunction         SECONDS_BETWEEN UTCTOLOCAL WEEK WEEKDAY YEAR
+
+syn keyword sqlFunction         TO_CHAR TO_DATE TO_DATS TO_NCHAR TO_TIME TO_TIMESTAMP UTCTOLOCAL
+
+" Aggregate
+syn keyword sqlFunction         COUNT MIN MAX SUM AVG STDDEV VAR
+
+" Datatype conversion
+syn keyword sqlFunction         CAST TO_ALPHANUM TO_BIGINT TO_BINARY TO_BLOB TO_CHAR TO_CLOB
+syn keyword sqlFunction         TO_DATE TO_DATS TO_DECIMAL TO_DOUBLE TO_INT TO_INTEGER TO_NCHAR
+syn keyword sqlFunction         TO_NCLOB TO_NVARCHAR TO_REAL TO_SECONDDATE TO_SMALLDECIMAL
+syn keyword sqlFunction         TO_SMALLINT TO_TIME TO_TIMESTAMP TO_TINYINT TO_VARCHAR TO_VARBINARY
+
+" Number functions
+syn keyword sqlFunction         ABS ACOS ASIN ATAN ATAN2 BINTOHEX BITAND CEIL COS COSH COT
+syn keyword sqlFunction         EXP FLOOR GREATEST HEXTOBIN LEAST LN LOG MOD POWER ROUND
+syn keyword sqlFunction         SIGN SIN SINH SQRT TAN TANH UMINUS
+
+" String functions
+syn keyword sqlFunction         ASCII CHAR CONCAT LCASE LENGTH LOCATE LOWER LPAD LTRIM
+syn keyword sqlFunction         NCHAR REPLACE RPAD RTRIM SUBSTR_AFTER SUBSTR_BEFORE
+syn keyword sqlFunction         SUBSTRING TRIM UCASE UNICODE UPPER
+
+" Miscellaneous functions
+syn keyword sqlFunction         COALESCE CURRENT_CONNECTION CURRENT_SCHEMA CURRENT_USER
+syn keyword sqlFunction         GROUPING_ID IFNULL MAP NULLIF SESSION_CONTEXT SESSION_USER SYSUUIDSQL
+syn keyword sqlFunction         GET_NUM_SERVERS
+
+
+" sp_ procedures
+" syn keyword sqlFunction  sp_addalias
+
+
+" Reserved keywords
+syn keyword sqlkeyword   ALL AS AT BEFORE
+syn keyword sqlkeyword   BEGIN BOTH BY
+syn keyword sqlkeyword   CONDITION
+syn keyword sqlkeyword   CURRVAL CURSOR DECLARE
+syn keyword sqlkeyword   DISTINCT DO ELSE ELSEIF ELSIF
+syn keyword sqlkeyword   END EXCEPTION EXEC
+syn keyword sqlkeyword   FOR FROM GROUP
+syn keyword sqlkeyword   HAVING IN
+syn keyword sqlkeyword   INOUT INTO IS
+syn keyword sqlkeyword   LEADING
+syn keyword sqlkeyword   LOOP MINUS NATURAL NEXTVAL
+syn keyword sqlkeyword   OF ON ORDER OUT
+syn keyword sqlkeyword   PRIOR RETURN RETURNS REVERSE
+syn keyword sqlkeyword   ROWID SELECT
+syn keyword sqlkeyword   SQL START STOP SYSDATE
+syn keyword sqlkeyword   SYSTIME SYSTIMESTAMP SYSUUID
+syn keyword sqlkeyword   TRAILING USING UTCDATE
+syn keyword sqlkeyword   UTCTIME UTCTIMESTAMP VALUES
+syn keyword sqlkeyword   WHILE
+syn keyword sqlkeyword   ANY SOME EXISTS ESCAPE
+
+" IF keywords
+syn keyword sqlkeyword  IF
+
+" CASE keywords
+syn keyword sqlKeyword  WHEN THEN
+
+" Syntax rules common to TEXT and SHORTTEXT keywords
+syn keyword sqlKeyword  LANGUAGE DETECTION LINGUISTIC
+syn keyword sqlkeyword   MIME TYPE
+syn keyword sqlkeyword   EXACT WEIGHT FUZZY FUZZINESSTHRESHOLD SEARCH
+syn keyword sqlkeyword   PHRASE INDEX RATIO REBUILD
+syn keyword sqlkeyword   CONFIGURATION
+syn keyword sqlkeyword   SEARCH ONLY
+syn keyword sqlkeyword   FAST PREPROCESS
+syn keyword sqlkeyword   SYNC SYNCHRONOUS ASYNC ASYNCHRONOUS FLUSH QUEUE
+syn keyword sqlkeyword   EVERY AFTER MINUTES DOCUMENTS SUSPEND
+
+" Statement keywords (i.e. after ALTER or CREATE)
+syn keyword sqlkeyword   AUDIT POLICY
+syn keyword sqlkeyword   FULLTEXT
+syn keyword sqlkeyword   SEQUENCE RESTART
+syn keyword sqlkeyword   TABLE
+syn keyword sqlkeyword   PROCEDURE STATISTICS
+syn keyword sqlkeyword   SCHEMA
+syn keyword sqlkeyword   SYNONYM
+syn keyword sqlkeyword   VIEW
+syn keyword sqlkeyword   COLUMN
+syn keyword sqlkeyword   SYSTEM LICENSE
+syn keyword sqlkeyword   SESSION
+syn keyword sqlkeyword   CANCEL WORK
+syn keyword sqlkeyword   PLAN CACHE
+syn keyword sqlkeyword   LOGGING NOLOGGING RETENTION
+syn keyword sqlkeyword   RECONFIGURE SERVICE
+syn keyword sqlkeyword   RESET MONITORING
+syn keyword sqlkeyword   SAVE DURATION PERFTRACE FUNCTION_PROFILER
+syn keyword sqlkeyword   SAVEPOINT
+syn keyword sqlkeyword   USER
+syn keyword sqlkeyword   ROLE
+syn keyword sqlkeyword   ASC DESC
+syn keyword sqlkeyword   OWNED
+syn keyword sqlkeyword   DEPENDENCIES SCRAMBLE
+
+" Create sequence
+syn keyword sqlkeyword   INCREMENT MAXVALUE MINVALUE CYCLE
+
+" Create table
+syn keyword sqlkeyword   HISTORY GLOBAL LOCAL TEMPORARY
+
+" Create trigger
+syn keyword sqlkeyword   TRIGGER REFERENCING EACH DEFAULT
+syn keyword sqlkeyword   SIGNAL RESIGNAL MESSAGE_TEXT OLD NEW
+syn keyword sqlkeyword   EXIT HANDLER SQL_ERROR_CODE
+syn keyword sqlkeyword   TARGET CONDITION SIGNAL
+
+" Alter table
+syn keyword sqlkeyword   ADD DROP MODIFY GENERATED ALWAYS
+syn keyword sqlkeyword   UNIQUE BTREE CPBTREE PRIMARY KEY
+syn keyword sqlkeyword   CONSTRAINT PRELOAD NONE
+syn keyword sqlkeyword   ROW THREADS BATCH
+syn keyword sqlkeyword   MOVE PARTITION TO LOCATION PHYSICAL OTHERS
+syn keyword sqlkeyword   ROUNDROBIN PARTITIONS HASH RANGE VALUE
+syn keyword sqlkeyword   PERSISTENT DELTA AUTO AUTOMERGE
+
+" Create audit policy
+syn keyword sqlkeyword   AUDITING SUCCESSFUL UNSUCCESSFUL
+syn keyword sqlkeyword  PRIVILEGE STRUCTURED CHANGE LEVEL
+syn keyword sqlkeyword  EMERGENCY ALERT CRITICAL WARNING INFO
+
+" Privileges
+syn keyword sqlkeyword   DEBUG EXECUTE
+
+" Schema
+syn keyword sqlkeyword   CASCADE RESTRICT PARAMETERS SCAN
+
+" Traces
+syn keyword sqlkeyword   CLIENT CRASHDUMP EMERGENCYDUMP
+syn keyword sqlkeyword   INDEXSERVER NAMESERVER DAEMON
+syn keyword sqlkeyword   CLEAR REMOVE TRACES
+
+" Reclaim
+syn keyword sqlkeyword   RECLAIM DATA VOLUME VERSION SPACE DEFRAGMENT SPARSIFY
+
+" Join
+syn keyword sqlkeyword   INNER OUTER LEFT RIGHT FULL CROSS JOIN
+syn keyword sqlkeyword   GROUPING SETS ROLLUP CUBE
+syn keyword sqlkeyword   BEST LIMIT OFFSET
+syn keyword sqlkeyword   WITH SUBTOTAL BALANCE TOTAL
+syn keyword sqlkeyword   TEXT_FILTER FILL UP SORT MATCHES TOP
+syn keyword sqlkeyword   RESULT OVERVIEW PREFIX MULTIPLE RESULTSETS
+
+" Lock
+syn keyword sqlkeyword   EXCLUSIVE MODE NOWAIT
+
+" Transaction
+syn keyword sqlkeyword   TRANSACTION ISOLATION READ COMMITTED
+syn keyword sqlkeyword   REPEATABLE SERIALIZABLE WRITE
+
+" Saml
+syn keyword sqlkeyword   SAML ASSERTION PROVIDER SUBJECT ISSUER
+
+" User
+syn keyword sqlkeyword   PASSWORD IDENTIFIED EXTERNALLY ATTEMPTS ATTEMPTS
+syn keyword sqlkeyword  ENABLE DISABLE OFF LIFETIME FORCE DEACTIVATE
+syn keyword sqlkeyword  ACTIVATE IDENTITY KERBEROS
+
+" Grant
+syn keyword sqlkeyword   ADMIN BACKUP CATALOG SCENARIO INIFILE MONITOR
+syn keyword sqlkeyword   OPTIMIZER OPTION
+syn keyword sqlkeyword   RESOURCE STRUCTUREDPRIVILEGE TRACE
+
+" Import
+syn keyword sqlkeyword   CSV FILE CONTROL NO CHECK SKIP FIRST LIST
+syn keyword sqlkeyword  RECORD DELIMITED FIELD OPTIONALLY ENCLOSED FORMAT
+
+" Roles
+syn keyword sqlkeyword   PUBLIC CONTENT_ADMIN MODELING MONITORING
+
+" Miscellaneous
+syn keyword sqlkeyword   APPLICATION BINARY IMMEDIATE COREFILE SECURITY DEFINER
+syn keyword sqlkeyword   DUMMY INVOKER MATERIALIZED MESSEGE_TEXT PARAMETER PARAMETERS
+syn keyword sqlkeyword   PART
+syn keyword sqlkeyword   CONSTANT SQLEXCEPTION SQLWARNING
+
+syn keyword sqlOperator  WHERE BETWEEN LIKE NULL CONTAINS
+syn keyword sqlOperator  AND OR NOT CASE
+syn keyword sqlOperator  UNION INTERSECT EXCEPT
+
+syn keyword sqlStatement ALTER CALL CALLS CREATE DROP RENAME TRUNCATE
+syn keyword sqlStatement DELETE INSERT UPDATE EXPLAIN
+syn keyword sqlStatement MERGE REPLACE UPSERT SELECT
+syn keyword sqlStatement SET UNSET LOAD UNLOAD
+syn keyword sqlStatement CONNECT DISCONNECT COMMIT LOCK ROLLBACK
+syn keyword sqlStatement GRANT REVOKE
+syn keyword sqlStatement EXPORT IMPORT
+
+
+syn keyword sqlType     DATE TIME SECONDDATE TIMESTAMP TINYINT SMALLINT
+syn keyword sqlType     INT INTEGER BIGINT SMALLDECIMAL DECIMAL
+syn keyword sqlType     REAL DOUBLE FLOAT
+syn keyword sqlType     VARCHAR NVARCHAR ALPHANUM SHORTTEXT VARBINARY
+syn keyword sqlType     BLOB CLOB NCLOB TEXT DAYDATE
+
+syn keyword sqlOption    Webservice_namespace_host
+
+" Strings and characters:
+syn region sqlString           start=+"+    end=+"+ contains=@Spell
+syn region sqlString           start=+'+    end=+'+ contains=@Spell
+
+" Numbers:
+syn match sqlNumber            "-\=\<\d*\.\=[0-9_]\>"
+
+" Comments:
+syn region sqlDashComment      start=/--/ end=/$/ contains=@Spell
+syn region sqlSlashComment     start=/\/\// end=/$/ contains=@Spell
+syn region sqlMultiComment     start="/\*" end="\*/" contains=sqlMultiComment,@Spell
+syn cluster sqlComment contains=sqlDashComment,sqlSlashComment,sqlMultiComment,@Spell
+syn sync ccomment sqlComment
+syn sync ccomment sqlDashComment
+syn sync ccomment sqlSlashComment
+
+hi def link sqlDashComment     Comment
+hi def link sqlSlashComment    Comment
+hi def link sqlMultiComment    Comment
+hi def link sqlNumber          Number
+hi def link sqlOperator                Operator
+hi def link sqlSpecial         Special
+hi def link sqlKeyword         Keyword
+hi def link sqlStatement       Statement
+hi def link sqlString          String
+hi def link sqlType            Type
+hi def link sqlFunction                Function
+hi def link sqlOption          PreProc
+
+let b:current_syntax = "sqlhana"
+
+" vim:sw=4:
index 8749447..8c9e7b4 100644 (file)
@@ -43,11 +43,11 @@ syn keyword    sqrSection     begin-program begin-report begin-setup
 syn keyword    sqrSection     end-footing end-heading end-procedure
 syn keyword    sqrSection     end-program end-report end-setup
 
-syn keyword    sqrParagraph   alter-color-map alter-conection
+syn keyword    sqrParagraph   alter-color-map alter-connection
 syn keyword    sqrParagraph   alter-locale alter-printer alter-report
 syn keyword    sqrParagraph   begin-document begin-execute begin-select
 syn keyword    sqrParagraph   begin-sql declare-chart declare-image
-syn keyword    sqrParagraph   declare-color-map declare-conection
+syn keyword    sqrParagraph   declare-color-map declare-connection
 syn keyword    sqrParagraph   declare-layout declare-printer
 syn keyword    sqrParagraph   declare-report declare-procedure
 syn keyword    sqrParagraph   declare-toc declare-variable end-declare
@@ -224,16 +224,16 @@ if version >= 600
   " See also the sqrString section above for handling of ! characters
   " inside of strings.  (Those patterns override the ones below.)
   syn match    sqrComment      /!\@<!!\([^!=].*\|$\)/ contains=sqrTodo
-  "                              the ! can't be preceeded by another !,
+  "                              the ! can't be preceded by another !,
   "                              and must be followed by at least one
   "                              character other than ! or =, or immediately
   "                              by the end-of-line
   syn match    sqrComment      /^!=.*/ contains=sqrTodo
   syn match    sqrComment      /^!!.*/ contains=sqrTodo
   syn match    sqrError        /^\s\+\zs!=.*/
-  "                              it's an error to have "!=" preceeded by
+  "                              it's an error to have "!=" preceded by
   "                              just whitespace on the line ("!="
-  "                              preceeded by non-whitespace is treated
+  "                              preceded by non-whitespace is treated
   "                              as neither a comment nor an error, since
   "                              it is often correct, i.e.
   "                                if #count != 7
@@ -259,7 +259,7 @@ endif
 
 " Define the default highlighting.
 " For version 5.7 and earlier, only when not done already.
-" For version 5.8 and later, only when an item doesn;t have hightlighting yet.
+" For version 5.8 and later, only when an item doesn't have highlighting yet.
 if version >= 508 || !exists("did_sqr_syn_inits")
   if version < 508
     let did_sqr_syn_inits = 1
index 45947f2..6d4de6c 100644 (file)
@@ -1,7 +1,10 @@
 " Vim syntax file
-" Language: OpenSSH client configuration file (ssh_config)
-" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2009-07-09
+" Language:    OpenSSH client configuration file (ssh_config)
+" Author:      David Necas (Yeti)
+" Maintainer:   Leonard Ehrenfried <leonard.ehrenfried@web.de> 
+" Last Change: 2012 Feb 24 
+" SSH Version: 5.9p1
+"
 
 " Setup
 if version >= 600
@@ -18,70 +21,162 @@ else
   set iskeyword=_,-,a-z,A-Z,48-57
 endif
 
-syn case ignore
+
+" case on
+syn case match
+
 
 " Comments
-syn match sshconfigComment "#.*$" contains=sshconfigTodo
-syn keyword sshconfigTodo TODO FIXME NOT contained
+syn match sshconfigComment "^#.*$" contains=sshconfigTodo
+syn match sshconfigComment "\s#.*$" contains=sshconfigTodo
+
+syn keyword sshconfigTodo TODO FIXME NOTE contained
+
 
 " Constants
 syn keyword sshconfigYesNo yes no ask
 syn keyword sshconfigYesNo any auto
-syn keyword sshconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
-syn keyword sshconfigCipher aes192-cbc aes256-cbc aes128-ctr aes256-ctr
-syn keyword sshconfigCipher arcfour arcfour128 arcfour256 cast128-cbc
+syn keyword sshconfigYesNo force autoask none
+
+syn keyword sshconfigCipher  3des blowfish
+syn keyword sshconfigCiphers aes128-cbc 3des-cbc blowfish blowfish-cbc cast128-cbc
+syn keyword sshconfigCiphers aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr
+syn keyword sshconfigCiphers arcfour arcfour128 arcfour256 cast128-cbc
+
 syn keyword sshconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96
 syn keyword sshconfigMAC hmac-md5-96
-syn match sshconfigMAC "\<umac-64@openssh\.com\>"
+syn keyword sshconfigMAC hmac-sha2-256 hmac-sha2-256-96 hmac-sha2-512
+syn keyword sshconfigMAC hmac-sha2-512-96
+syn match   sshconfigMAC "\<umac-64@openssh\.com\>"
+
 syn keyword sshconfigHostKeyAlg ssh-rsa ssh-dss
-syn keyword sshconfigPreferredAuth hostbased publickey password
+syn match   sshconfigHostKeyAlg "\<ecdsa-sha2-nistp256-cert-v01@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ecdsa-sha2-nistp384-cert-v01@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ecdsa-sha2-nistp521-cert-v01@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ssh-rsa-cert-v01@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ssh-dss-cert-v01@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ssh-rsa-cert-v00@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ssh-dss-cert-v00@openssh\.com\>"
+syn keyword sshconfigHostKeyAlg ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521
+
+syn keyword sshconfigPreferredAuth hostbased publickey password gssapi-with-mic
 syn keyword sshconfigPreferredAuth keyboard-interactive
+
 syn keyword sshconfigLogLevel QUIET FATAL ERROR INFO VERBOSE
 syn keyword sshconfigLogLevel DEBUG DEBUG1 DEBUG2 DEBUG3
 syn keyword sshconfigSysLogFacility DAEMON USER AUTH AUTHPRIV LOCAL0 LOCAL1
 syn keyword sshconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
-syn match sshconfigVar "%[rhpldun]\>"
+syn keyword sshconfigAddressFamily  inet inet6
+
+syn match   sshconfigIPQoS     "af1[1234]"
+syn match   sshconfigIPQoS     "af2[23]"
+syn match   sshconfigIPQoS     "af3[123]"
+syn match   sshconfigIPQoS     "af4[123]"
+syn match   sshconfigIPQoS     "cs[0-7]"
+syn keyword sshconfigIPQoS     ef lowdelay throughput reliability
+syn keyword sshconfigKbdInteractive bsdauth pam skey
+
+syn keyword sshconfigKexAlgo   ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521
+syn keyword sshconfigKexAlgo   diffie-hellman-group-exchange-sha256
+syn keyword sshconfigKexAlgo   diffie-hellman-group-exchange-sha1
+syn keyword sshconfigKexAlgo   diffie-hellman-group14-sha1
+syn keyword sshconfigKexAlgo   diffie-hellman-group1-sha1
+
+syn keyword sshconfigTunnel    point-to-point ethernet
+
+syn match sshconfigVar "%[rhplLdun]\>"
 syn match sshconfigSpecial "[*?]"
 syn match sshconfigNumber "\d\+"
 syn match sshconfigHostPort "\<\(\d\{1,3}\.\)\{3}\d\{1,3}\(:\d\+\)\?\>"
 syn match sshconfigHostPort "\<\([-a-zA-Z0-9]\+\.\)\+[-a-zA-Z0-9]\{2,}\(:\d\+\)\?\>"
 syn match sshconfigHostPort "\<\(\x\{,4}:\)\+\x\{,4}[:/]\d\+\>"
+syn match sshconfigHostPort "\(Host \)\@<=.\+"
+syn match sshconfigHostPort "\(HostName \)\@<=.\+"
+
+" case off
+syn case ignore
+
 
 " Keywords
 syn keyword sshconfigHostSect Host
+
 syn keyword sshconfigKeyword AddressFamily
-syn keyword sshconfigKeyword BatchMode BindAddress
-syn keyword sshconfigKeyword ChallengeResponseAuthentication CheckHostIP
-syn keyword sshconfigKeyword Cipher Ciphers ClearAllForwardings
-syn keyword sshconfigKeyword Compression CompressionLevel ConnectTimeout
-syn keyword sshconfigKeyword ConnectionAttempts ControlMaster
-syn keyword sshconfigKeyword ControlPath DynamicForward
-syn keyword sshconfigKeyword EnableSSHKeysign EscapeChar ExitOnForwardFailure
-syn keyword sshconfigKeyword ForwardAgent ForwardX11
+syn keyword sshconfigKeyword BatchMode
+syn keyword sshconfigKeyword BindAddress
+syn keyword sshconfigKeyword ChallengeResponseAuthentication
+syn keyword sshconfigKeyword CheckHostIP
+syn keyword sshconfigKeyword Cipher
+syn keyword sshconfigKeyword Ciphers
+syn keyword sshconfigKeyword ClearAllForwardings
+syn keyword sshconfigKeyword Compression
+syn keyword sshconfigKeyword CompressionLevel
+syn keyword sshconfigKeyword ConnectTimeout
+syn keyword sshconfigKeyword ConnectionAttempts
+syn keyword sshconfigKeyword ControlMaster
+syn keyword sshconfigKeyword ControlPath
+syn keyword sshconfigKeyword ControlPersist
+syn keyword sshconfigKeyword DynamicForward
+syn keyword sshconfigKeyword EnableSSHKeysign
+syn keyword sshconfigKeyword EscapeChar
+syn keyword sshconfigKeyword ExitOnForwardFailure
+syn keyword sshconfigKeyword ForwardAgent
+syn keyword sshconfigKeyword ForwardX11
+syn keyword sshconfigKeyword ForwardX11Timeout
 syn keyword sshconfigKeyword ForwardX11Trusted
 syn keyword sshconfigKeyword GSSAPIAuthentication
-syn keyword sshconfigKeyword GSSAPIDelegateCredentials GatewayPorts
+syn keyword sshconfigKeyword GSSAPIClientIdentity
+syn keyword sshconfigKeyword GSSAPIDelegateCredentials
+syn keyword sshconfigKeyword GSSAPIKeyExchange
+syn keyword sshconfigKeyword GSSAPIRenewalForcesRekey
+syn keyword sshconfigKeyword GSSAPIServerIdentity
+syn keyword sshconfigKeyword GSSAPITrustDNS
+syn keyword sshconfigKeyword GSSAPITrustDns
+syn keyword sshconfigKeyword GatewayPorts
 syn keyword sshconfigKeyword GlobalKnownHostsFile
-syn keyword sshconfigKeyword HostKeyAlgorithms HashKnownHosts
-syn keyword sshconfigKeyword HostKeyAlias HostName HostbasedAuthentication
-syn keyword sshconfigKeyword IdentitiesOnly IdentityFile
-syn keyword sshconfigKeyword KbdInteractiveAuthentication KbdInteractiveDevices
-syn keyword sshconfigKeyword LocalCommand LocalForward LogLevel
+syn keyword sshconfigKeyword HashKnownHosts
+syn keyword sshconfigKeyword HostKeyAlgorithms
+syn keyword sshconfigKeyword HostKeyAlias
+syn keyword sshconfigKeyword HostName
+syn keyword sshconfigKeyword HostbasedAuthentication
+syn keyword sshconfigKeyword IPQoS
+syn keyword sshconfigKeyword IdentitiesOnly
+syn keyword sshconfigKeyword IdentityFile
+syn keyword sshconfigKeyword KbdInteractiveAuthentication
+syn keyword sshconfigKeyword KbdInteractiveDevices
+syn keyword sshconfigKeyword KexAlgorithms
+syn keyword sshconfigKeyword LocalCommand
+syn keyword sshconfigKeyword LocalForward
+syn keyword sshconfigKeyword LogLevel
 syn keyword sshconfigKeyword MACs
 syn keyword sshconfigKeyword NoHostAuthenticationForLocalhost
 syn keyword sshconfigKeyword NumberOfPasswordPrompts
-syn keyword sshconfigKeyword PasswordAuthentication PermitLocalCommand
-syn keyword sshconfigKeyword Port PreferredAuthentications Protocol
-syn keyword sshconfigKeyword ProxyCommand PubkeyAuthentication
+syn keyword sshconfigKeyword PKCS11Provider
+syn keyword sshconfigKeyword PasswordAuthentication
 syn keyword sshconfigKeyword PermitLocalCommand
-syn keyword sshconfigKeyword RSAAuthentication RemoteForward RekeyLimit
+syn keyword sshconfigKeyword Port
+syn keyword sshconfigKeyword PreferredAuthentications
+syn keyword sshconfigKeyword Protocol
+syn keyword sshconfigKeyword ProxyCommand
+syn keyword sshconfigKeyword PubkeyAuthentication
+syn keyword sshconfigKeyword RSAAuthentication
+syn keyword sshconfigKeyword RekeyLimit
+syn keyword sshconfigKeyword RemoteForward
+syn keyword sshconfigKeyword RequestTTY
 syn keyword sshconfigKeyword RhostsRSAAuthentication
-syn keyword sshconfigKeyword SendEnv ServerAliveCountMax ServerAliveInterval
-syn keyword sshconfigKeyword SmartcardDevice StrictHostKeyChecking
-syn keyword sshconfigKeyword Tunnel TunnelDevice
-syn keyword sshconfigKeyword TCPKeepAlive UsePrivilegedPort User
+syn keyword sshconfigKeyword SendEnv
+syn keyword sshconfigKeyword ServerAliveCountMax
+syn keyword sshconfigKeyword ServerAliveInterval
+syn keyword sshconfigKeyword SmartcardDevice
+syn keyword sshconfigKeyword StrictHostKeyChecking
+syn keyword sshconfigKeyword TCPKeepAlive
+syn keyword sshconfigKeyword Tunnel
+syn keyword sshconfigKeyword TunnelDevice
+syn keyword sshconfigKeyword UseBlacklistedKeys
+syn keyword sshconfigKeyword UsePrivilegedPort
+syn keyword sshconfigKeyword User
 syn keyword sshconfigKeyword UserKnownHostsFile
-syn keyword sshconfigKeyword VerifyHostKeyDNS VisualHostKey
+syn keyword sshconfigKeyword VerifyHostKeyDNS
+syn keyword sshconfigKeyword VisualHostKey
 syn keyword sshconfigKeyword XAuthLocation
 
 " Define the default highlighting
@@ -100,10 +195,16 @@ if version >= 508 || !exists("did_sshconfig_syntax_inits")
   HiLink sshconfigConstant       Constant
   HiLink sshconfigYesNo          sshconfigEnum
   HiLink sshconfigCipher         sshconfigEnum
+  HiLink sshconfigCiphers       sshconfigEnum
   HiLink sshconfigMAC            sshconfigEnum
   HiLink sshconfigHostKeyAlg     sshconfigEnum
   HiLink sshconfigLogLevel       sshconfigEnum
   HiLink sshconfigSysLogFacility sshconfigEnum
+  HiLink sshconfigAddressFamily  sshconfigEnum
+  HiLink sshconfigIPQoS                 sshconfigEnum
+  HiLink sshconfigKbdInteractive sshconfigEnum
+  HiLink sshconfigKexAlgo       sshconfigEnum
+  HiLink sshconfigTunnel        sshconfigEnum
   HiLink sshconfigPreferredAuth  sshconfigEnum
   HiLink sshconfigVar            sshconfigEnum
   HiLink sshconfigEnum           Identifier
@@ -114,3 +215,5 @@ if version >= 508 || !exists("did_sshconfig_syntax_inits")
 endif
 
 let b:current_syntax = "sshconfig"
+
+" vim:set ts=8 sw=2 sts=2:
index 97ee8f8..53bc09d 100644 (file)
@@ -1,7 +1,12 @@
 " Vim syntax file
-" Language: OpenSSH server configuration file (sshd_config)
-" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2009-07-09
+" Language:    OpenSSH server configuration file (sshd_config)
+" Maintainer:  David Necas (Yeti)
+" Maintainer:   Leonard Ehrenfried <leonard.ehrenfried@web.de> 
+" Modified By: Thilo Six
+" Originally:  2009-07-09
+" Last Change: 2011 Oct 31 
+" SSH Version: 5.9p1
+"
 
 " Setup
 if version >= 600
@@ -18,27 +23,63 @@ else
   set iskeyword=_,-,a-z,A-Z,48-57
 endif
 
-syn case ignore
+
+" case on
+syn case match
+
 
 " Comments
-syn match sshdconfigComment "#.*$" contains=sshdconfigTodo
-syn keyword sshdconfigTodo TODO FIXME NOT contained
+syn match sshdconfigComment "^#.*$" contains=sshdconfigTodo
+syn match sshdconfigComment "\s#.*$" contains=sshdconfigTodo
+
+syn keyword sshdconfigTodo TODO FIXME NOTE contained
 
 " Constants
 syn keyword sshdconfigYesNo yes no none
+
 syn keyword sshdconfigAddressFamily any inet inet6
+
 syn keyword sshdconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
-syn keyword sshdconfigCipher aes192-cbc aes256-cbc aes128-ctr aes256-ctr
+syn keyword sshdconfigCipher aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr
 syn keyword sshdconfigCipher arcfour arcfour128 arcfour256 cast128-cbc
+
 syn keyword sshdconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96
 syn keyword sshdconfigMAC hmac-md5-96
-syn match sshdconfigMAC "\<umac-64@openssh\.com\>"
+syn keyword sshdconfigMAC hmac-sha2-256 hmac-sha256-96 hmac-sha2-512
+syn keyword sshdconfigMAC hmac-sha2-512-96
+syn match   sshdconfigMAC "\<umac-64@openssh\.com\>"
+
 syn keyword sshdconfigRootLogin without-password forced-commands-only
+
 syn keyword sshdconfigLogLevel QUIET FATAL ERROR INFO VERBOSE
 syn keyword sshdconfigLogLevel DEBUG DEBUG1 DEBUG2 DEBUG3
 syn keyword sshdconfigSysLogFacility DAEMON USER AUTH AUTHPRIV LOCAL0 LOCAL1
 syn keyword sshdconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
+
+syn keyword sshdconfigCompression    delayed
+
+syn match   sshdconfigIPQoS    "af1[1234]"
+syn match   sshdconfigIPQoS    "af2[23]"
+syn match   sshdconfigIPQoS    "af3[123]"
+syn match   sshdconfigIPQoS    "af4[123]"
+syn match   sshdconfigIPQoS    "cs[0-7]"
+syn keyword sshdconfigIPQoS    ef lowdelay throughput reliability
+
+syn keyword sshdconfigKexAlgo  ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521
+syn keyword sshdconfigKexAlgo  diffie-hellman-group-exchange-sha256
+syn keyword sshdconfigKexAlgo  diffie-hellman-group-exchange-sha1
+syn keyword sshdconfigKexAlgo  diffie-hellman-group14-sha1
+syn keyword sshdconfigKexAlgo  diffie-hellman-group1-sha1
+
+syn keyword sshdconfigTunnel   point-to-point ethernet
+
+syn keyword sshdconfigSubsystem internal-sftp
+
+syn match sshdconfigVar            "%[hu]\>"
+syn match sshdconfigVar            "%%"
+
 syn match sshdconfigSpecial "[*?]"
+
 syn match sshdconfigNumber "\d\+"
 syn match sshdconfigHostPort "\<\(\d\{1,3}\.\)\{3}\d\{1,3}\(:\d\+\)\?\>"
 syn match sshdconfigHostPort "\<\([-a-zA-Z0-9]\+\.\)\+[-a-zA-Z0-9]\{2,}\(:\d\+\)\?\>"
@@ -46,38 +87,93 @@ syn match sshdconfigHostPort "\<\([-a-zA-Z0-9]\+\.\)\+[-a-zA-Z0-9]\{2,}\(:\d\+\)
 syn match sshdconfigHostPort "\<\(\x\{,4}:\)\+\x\{,4}:\d\+\>"
 syn match sshdconfigTime "\<\(\d\+[sSmMhHdDwW]\)\+\>"
 
+
+" case off
+syn case ignore
+
+
 " Keywords
 syn keyword sshdconfigMatch Host User Group Address
-syn keyword sshdconfigKeyword AcceptEnv AddressFamily AllowAgentForwarding
-syn keyword sshdconfigKeyword AllowGroups AllowTcpForwarding
-syn keyword sshdconfigKeyword AllowUsers AuthorizedKeysFile
+
+syn keyword sshdconfigKeyword AcceptEnv
+syn keyword sshdconfigKeyword AddressFamily
+syn keyword sshdconfigKeyword AllowAgentForwarding
+syn keyword sshdconfigKeyword AllowGroups
+syn keyword sshdconfigKeyword AllowTcpForwarding
+syn keyword sshdconfigKeyword AllowUsers
+syn keyword sshdconfigKeyword AuthorizedKeysFile
+syn keyword sshdconfigKeyword AuthorizedPrincipalsFile
 syn keyword sshdconfigKeyword Banner
-syn keyword sshdconfigKeyword ChallengeResponseAuthentication ChrootDirectory
-syn keyword sshdconfigKeyword Ciphers ClientAliveCountMax
-syn keyword sshdconfigKeyword ClientAliveInterval Compression
-syn keyword sshdconfigKeyword DenyGroups DenyUsers
+syn keyword sshdconfigKeyword ChallengeResponseAuthentication
+syn keyword sshdconfigKeyword ChrootDirectory
+syn keyword sshdconfigKeyword Ciphers
+syn keyword sshdconfigKeyword ClientAliveCountMax
+syn keyword sshdconfigKeyword ClientAliveInterval
+syn keyword sshdconfigKeyword Compression
+syn keyword sshdconfigKeyword DebianBanner
+syn keyword sshdconfigKeyword DenyGroups
+syn keyword sshdconfigKeyword DenyUsers
 syn keyword sshdconfigKeyword ForceCommand
-syn keyword sshdconfigKeyword GatewayPorts GSSAPIAuthentication
+syn keyword sshdconfigKeyword GSSAPIAuthentication
 syn keyword sshdconfigKeyword GSSAPICleanupCredentials
-syn keyword sshdconfigKeyword HostbasedAuthentication HostKey
-syn keyword sshdconfigKeyword IgnoreRhosts IgnoreUserKnownHosts
-syn keyword sshdconfigKeyword KerberosAuthentication KerberosGetAFSToken
-syn keyword sshdconfigKeyword KerberosOrLocalPasswd KerberosTicketCleanup
+syn keyword sshdconfigKeyword GSSAPIKeyExchange
+syn keyword sshdconfigKeyword GSSAPIStoreCredentialsOnRekey
+syn keyword sshdconfigKeyword GSSAPIStrictAcceptorCheck
+syn keyword sshdconfigKeyword GatewayPorts
+syn keyword sshdconfigKeyword HostCertificate
+syn keyword sshdconfigKeyword HostKey
+syn keyword sshdconfigKeyword HostbasedAuthentication
+syn keyword sshdconfigKeyword HostbasedUsesNameFromPacketOnly
+syn keyword sshdconfigKeyword IPQoS
+syn keyword sshdconfigKeyword IgnoreRhosts
+syn keyword sshdconfigKeyword IgnoreUserKnownHosts
+syn keyword sshdconfigKeyword KbdInteractiveAuthentication
+syn keyword sshdconfigKeyword KerberosAuthentication
+syn keyword sshdconfigKeyword KerberosGetAFSToken
+syn keyword sshdconfigKeyword KerberosOrLocalPasswd
+syn keyword sshdconfigKeyword KerberosTicketCleanup
+syn keyword sshdconfigKeyword KexAlgorithms
 syn keyword sshdconfigKeyword KeyRegenerationInterval
-syn keyword sshdconfigKeyword ListenAddress LoginGraceTime LogLevel
-syn keyword sshdconfigKeyword MACs Match MaxAuthTries MaxSessions MaxStartups
-syn keyword sshdconfigKeyword PasswordAuthentication PermitEmptyPasswords
-syn keyword sshdconfigKeyword PermitRootLogin PermitOpen PermitTunnel
-syn keyword sshdconfigKeyword PermitUserEnvironment PidFile Port
-syn keyword sshdconfigKeyword PrintLastLog PrintMotd Protocol
+syn keyword sshdconfigKeyword ListenAddress
+syn keyword sshdconfigKeyword LogLevel
+syn keyword sshdconfigKeyword LoginGraceTime
+syn keyword sshdconfigKeyword MACs
+syn keyword sshdconfigKeyword Match
+syn keyword sshdconfigKeyword MaxAuthTries
+syn keyword sshdconfigKeyword MaxSessions
+syn keyword sshdconfigKeyword MaxStartups
+syn keyword sshdconfigKeyword PasswordAuthentication
+syn keyword sshdconfigKeyword PermitBlacklistedKeys
+syn keyword sshdconfigKeyword PermitEmptyPasswords
+syn keyword sshdconfigKeyword PermitOpen
+syn keyword sshdconfigKeyword PermitRootLogin
+syn keyword sshdconfigKeyword PermitTunnel
+syn keyword sshdconfigKeyword PermitUserEnvironment
+syn keyword sshdconfigKeyword PidFile
+syn keyword sshdconfigKeyword Port
+syn keyword sshdconfigKeyword PrintLastLog
+syn keyword sshdconfigKeyword PrintMotd
+syn keyword sshdconfigKeyword Protocol
 syn keyword sshdconfigKeyword PubkeyAuthentication
-syn keyword sshdconfigKeyword RhostsRSAAuthentication RSAAuthentication
-syn keyword sshdconfigKeyword ServerKeyBits ShowPatchLevel StrictModes
-syn keyword sshdconfigKeyword Subsystem SyslogFacility
+syn keyword sshdconfigKeyword RSAAuthentication
+syn keyword sshdconfigKeyword RevokedKeys
+syn keyword sshdconfigKeyword RhostsRSAAuthentication
+syn keyword sshdconfigKeyword ServerKeyBits
+syn keyword sshdconfigKeyword ShowPatchLevel
+syn keyword sshdconfigKeyword StrictModes
+syn keyword sshdconfigKeyword Subsystem
+syn keyword sshdconfigKeyword SyslogFacility
 syn keyword sshdconfigKeyword TCPKeepAlive
-syn keyword sshdconfigKeyword UseDNS UseLogin UsePAM UsePrivilegeSeparation
-syn keyword sshdconfigKeyword X11DisplayOffset X11Forwarding
-syn keyword sshdconfigKeyword X11UseLocalhost XAuthLocation
+syn keyword sshdconfigKeyword TrustedUserCAKeys
+syn keyword sshdconfigKeyword UseDNS
+syn keyword sshdconfigKeyword UseLogin
+syn keyword sshdconfigKeyword UsePAM
+syn keyword sshdconfigKeyword UsePrivilegeSeparation
+syn keyword sshdconfigKeyword X11DisplayOffset
+syn keyword sshdconfigKeyword X11Forwarding
+syn keyword sshdconfigKeyword X11UseLocalhost
+syn keyword sshdconfigKeyword XAuthLocation
+
 
 " Define the default highlighting
 if version >= 508 || !exists("did_sshdconfig_syntax_inits")
@@ -101,6 +197,12 @@ if version >= 508 || !exists("did_sshdconfig_syntax_inits")
   HiLink sshdconfigRootLogin      sshdconfigEnum
   HiLink sshdconfigLogLevel       sshdconfigEnum
   HiLink sshdconfigSysLogFacility sshdconfigEnum
+  HiLink sshdconfigVar           sshdconfigEnum
+  HiLink sshdconfigCompression    sshdconfigEnum
+  HiLink sshdconfigIPQoS         sshdconfigEnum
+  HiLink sshdconfigKexAlgo       sshdconfigEnum
+  HiLink sshdconfigTunnel        sshdconfigEnum
+  HiLink sshdconfigSubsystem     sshdconfigEnum
   HiLink sshdconfigEnum           Function
   HiLink sshdconfigSpecial        Special
   HiLink sshdconfigKeyword        Keyword
@@ -109,3 +211,5 @@ if version >= 508 || !exists("did_sshdconfig_syntax_inits")
 endif
 
 let b:current_syntax = "sshdconfig"
+
+" vim:set ts=8 sw=2 sts=2:
index d629eb4..47aa07d 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    Smalltalk
 " Maintainer:  Arndt Hesse <hesse@self.de>
-" Last Change: 2001 May 09
+" Last Change: 2012 Feb 12 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " some Smalltalk keywords and standard methods
 syn keyword    stKeyword       super self class true false new not
 syn keyword    stKeyword       notNil isNil inspect out nil
@@ -100,3 +103,6 @@ if version >= 508 || !exists("did_st_syntax_inits")
 endif
 
 let b:current_syntax = "st"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 1bcd03f..fffc1cf 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         sudoers(5) configuration files
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2007-08-02
+" Latest Revision:  2011-02-24
 
 if exists("b:current_syntax")
   finish
@@ -149,10 +149,86 @@ syn match   sudoersDefaultTypeGreaterThan contained '>' nextgroup=@sudoersUser s
 
 " TODO: could also deal with special characters here
 syn match   sudoersBooleanParameter contained '!' nextgroup=sudoersBooleanParameter skipwhite skipnl
-syn keyword sudoersBooleanParameter contained long_opt_prompt ignore_dot mail_always mail_badpass mail_no_user mail_no_perms tty_tickets lecture authenticate root_sudo log_host log_year shell_noargs set_home always_set_home path_info preserve_groups fqdn insults requiretty env_editor rootpw runaspw targetpw set_logname stay_setuid env_reset use_loginclass nextgroup=sudoersParameterListComma skipwhite skipnl
-syn keyword sudoersIntegerParameter contained passwd_tries loglinelen timestamp_timeout passwd_timeout umask nextgroup=sudoersIntegerParameterEquals skipwhite skipnl
-syn keyword sudoersStringParameter  contained mailsub badpass_message timestampdir timestampowner passprompt runas_default syslog_goodpri syslog_badpri editor logfile syslog mailerpath mailerflags mailto exempt_group verifypw listpw nextgroup=sudoersStringParameterEquals skipwhite skipnl
-syn keyword sudoersListParameter    contained env_check env_delete env_keep nextgroup=sudoersListParameterEquals skipwhite skipnl
+syn keyword sudoersBooleanParameter contained skipwhite skipnl
+                                  \ always_set_home
+                                  \ authenticate
+                                  \ closefrom_override
+                                  \ env_editor
+                                  \ env_reset
+                                  \ fqdn
+                                  \ ignore_dot
+                                  \ ignore_local_sudoers
+                                  \ insults
+                                  \ log_host
+                                  \ log_year
+                                  \ long_otp_prompt
+                                  \ mail_always
+                                  \ mail_badpass
+                                  \ mail_no_host
+                                  \ mail_no_perms
+                                  \ mail_no_user
+                                  \ noexec
+                                  \ path_info
+                                  \ passprompt_override
+                                  \ preserve_groups
+                                  \ requiretty
+                                  \ root_sudo
+                                  \ rootpw
+                                  \ runaspw
+                                  \ set_home
+                                  \ set_logname
+                                  \ setenv
+                                  \ shell_noargs
+                                  \ stay_setuid
+                                  \ targetpw
+                                  \ tty_tickets
+                                  \ visiblepw
+
+syn keyword sudoersIntegerParameter contained
+                                  \ nextgroup=sudoersIntegerParameterEquals
+                                  \ skipwhite skipnl
+                                  \ closefrom
+                                  \ passwd_tries
+                                  \ loglinelen
+                                  \ passwd_timeout
+                                  \ timestamp_timeout
+                                  \ umask
+
+syn keyword sudoersStringParameter  contained
+                                  \ nextgroup=sudoersStringParameterEquals
+                                  \ skipwhite skipnl
+                                  \ badpass_message
+                                  \ editor
+                                  \ mailsub
+                                  \ noexec_file
+                                  \ passprompt
+                                  \ runas_default
+                                  \ syslog_badpri
+                                  \ syslog_goodpri
+                                  \ sudoers_locale
+                                  \ timestampdir
+                                  \ timestampowner
+                                  \ askpass
+                                  \ env_file
+                                  \ exempt_group
+                                  \ lecture
+                                  \ lecture_file
+                                  \ listpw
+                                  \ logfile
+                                  \ mailerflags
+                                  \ mailerpath
+                                  \ mailfrom
+                                  \ mailto
+                                  \ secure_path
+                                  \ syslog
+                                  \ verifypw
+
+syn keyword sudoersListParameter    contained
+                                  \ nextgroup=sudoersListParameterEquals
+                                  \ skipwhite skipnl
+                                  \ env_check
+                                  \ env_delete
+                                  \ env_keep
 
 syn match   sudoersParameterListComma contained ',' nextgroup=@sudoersParameter skipwhite skipnl
 
index 0cd770a..83803e3 100644 (file)
@@ -1,14 +1,16 @@
 " Vim syntax file
 " Language:     Subversion (svn) commit file
-" Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
-" URL:          http://www.hlabs.spb.ru/vim/svn.vim
-" Revision:     $Id: svn.vim 683 2008-07-30 11:52:38Z hdima $
+" Maintainer:   Dmitry Vasiliev <dima at hlabs dot org>
+" URL:          https://github.com/hdima/vim-scripts/blob/master/syntax/svn.vim
+" Last Change:  2012-07-21
 " Filenames:    svn-commit*.tmp
-" Version:      1.6
+" Version:      1.9
 
 " Contributors:
 "   Stefano Zacchiroli
 "   A. S. Budden
+"   Myk Taylor
+"   Ingo Karkat
 
 " For version 5.x: Clear all syntax items.
 " For version 6.x: Quit when a syntax file was already loaded.
@@ -18,11 +20,14 @@ elseif exists("b:current_syntax")
   finish
 endif
 
-syn region svnRegion    start="^--.*--$" end="\%$" contains=ALL contains=@NoSpell
+syn region svnText      start="\%^" end="^--.*--$"me=s-1 contains=@Spell
+
+syn region svnRegion    start="^--.*--$" end="\%$" contains=ALL
 syn match svnRemoved    "^D    .*$" contained
-syn match svnAdded      "^A[ M]   .*$" contained
-syn match svnModified   "^M[ M]   .*$" contained
-syn match svnProperty   "^_M   .*$" contained
+syn match svnRenamed    "^R[ M][ U][ +] .*$" contained
+syn match svnAdded      "^A[ M][ U][ +] .*$" contained
+syn match svnModified   "^M[ M][ U]  .*$" contained
+syn match svnProperty   "^_M[ U]  .*$" contained
 
 " Synchronization.
 syn sync clear
@@ -44,6 +49,7 @@ if version >= 508 || !exists("did_svn_syn_inits")
   HiLink svnAdded       Identifier
   HiLink svnModified    Special
   HiLink svnProperty    Special
+  HiLink svnRenamed     Special
 
   delcommand HiLink
 endif
index 178595c..48b5956 100644 (file)
@@ -1,6 +1,6 @@
 " Vim syntax support file
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2010 Aug 08
+" Last Change: 2012 Sep 25
 
 " This file sets up for syntax highlighting.
 " It is loaded from "syntax.vim" and "manual.vim".
@@ -46,6 +46,8 @@ fun! s:SynSet()
       echohl None
     endif
     let s = &filetype
+  elseif s == "OFF"
+    let s = ""
   endif
 
   if s != ""
@@ -59,7 +61,7 @@ endfun
 
 
 " Handle adding doxygen to other languages (C, C++, C#, IDL)
-au Syntax c,cpp,cs,idl
+au Syntax c,cpp,cs,idl,php
        \ if (exists('b:load_doxygen_syntax') && b:load_doxygen_syntax)
        \       || (exists('g:load_doxygen_syntax') && g:load_doxygen_syntax)
        \   | runtime! syntax/doxygen.vim
index d16d458..748054f 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         sysctl.conf(5) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2011-05-02
 
 if exists("b:current_syntax")
   finish
@@ -13,7 +13,7 @@ set cpo&vim
 syn match   sysctlBegin   display '^'
                           \ nextgroup=sysctlToken,sysctlComment skipwhite
 
-syn match   sysctlToken   contained display '\S\+'
+syn match   sysctlToken   contained display '[^=]\+'
                           \ nextgroup=sysctlTokenEq skipwhite
 
 syn match   sysctlTokenEq contained display '=' nextgroup=sysctlValue skipwhite
index 79186e0..b37c70c 100644 (file)
@@ -11,6 +11,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Key Names for values.
 syn keyword taskdataKey                description due end entry imask mask parent
@@ -40,4 +42,7 @@ hi def link taskdataUndo      Type
 
 let b:current_syntax = "taskdata"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:noexpandtab
index c7e0ea7..170153c 100644 (file)
@@ -11,6 +11,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn match taskeditHeading      "^\s*#\s*Name\s\+Editable details\s*$" contained
 syn match taskeditHeading      "^\s*#\s*-\+\s\+-\+\s*$" contained
@@ -32,4 +34,7 @@ hi def link taskeditString    String
 
 let b:current_syntax = "taskedit"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:noexpandtab
index 1cfc121..2f85596 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language: TASM: turbo assembler by Borland
 " Maintaner: FooLman of United Force <foolman@bigfoot.com>
-" Last change: 22 aug 2000
+" Last Change: 2012 Feb 03 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 syn match tasmLabel "^[\ \t]*[@a-z_$][a-z0-9_$@]*\ *:"
 syn keyword tasmDirective ALIAS ALIGN ARG ASSUME %BIN CATSRT CODESEG
@@ -120,3 +123,6 @@ if version >= 508 || !exists("did_tasm_syntax_inits")
 endif
 
 let b:curret_syntax = "tasm"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 5e6fc7f..7bb2815 100644 (file)
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:    TeX
-" Maintainer:  Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
-" Last Change: Aug 12, 2010 
-" Version:     57
-" URL:         http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
+" Maintainer:  Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
+" Last Change: Jun 24, 2013
+" Version:     79
+" URL:         http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
 "
 " Notes: {{{1
 "
@@ -37,6 +37,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 scriptencoding utf-8
 
 " Define the default highlighting. {{{1
@@ -50,14 +52,29 @@ if version >= 508 || !exists("did_tex_syntax_inits")
   command -nargs=+ HiLink hi def link <args>
  endif
 endif
-if exists("g:tex_tex") && !exists("g:tex_no_error")
- let g:tex_no_error= 1
+if exists("g:tex_no_error") && g:tex_no_error
+ let s:tex_no_error= 1
+endif
+
+" by default, enable all region-based highlighting
+let s:tex_fast= "bcmMprsSvV"
+if exists("g:tex_fast")
+ if type(g:tex_fast) != 1
+  " g:tex_fast exists and is not a string, so
+  " turn off all optional region-based highighting
+  let s:tex_fast= ""
+ else
+  let s:tex_fast= g:tex_fast
+ endif
+ let s:tex_no_error= 1
+else
+ let s:tex_fast= "bcmMprsSvV"
 endif
 
 " let user determine which classes of concealment will be supported
 "   a=accents/ligatures d=delimiters m=math symbols  g=Greek  s=superscripts/subscripts
 if !exists("g:tex_conceal")
- let s:tex_conceal= 'admgs'
+ let s:tex_conceal= 'abdmgsS'
 else
  let s:tex_conceal= g:tex_conceal
 endif
@@ -67,11 +84,11 @@ endif
 "   g:tex_stylish to 1      (for    "*.sty" mode)
 "    or to           0 else (normal "*.tex" mode)
 " or on a buffer-by-buffer basis with b:tex_stylish
-let b:extfname=expand("%:e")
+let s:extfname=expand("%:e")
 if exists("g:tex_stylish")
  let b:tex_stylish= g:tex_stylish
 elseif !exists("b:tex_stylish")
- if b:extfname == "sty" || b:extfname == "cls" || b:extfname == "clo" || b:extfname == "dtx" || b:extfname == "ltx"
+ if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
   let b:tex_stylish= 1
  else
   let b:tex_stylish= 0
@@ -89,30 +106,40 @@ if g:tex_fold_enabled && &fdm == "manual"
  setl fdm=syntax
 endif
 
-" (La)TeX keywords: only use the letters a-zA-Z {{{1
+" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
 " but _ is the only one that causes problems.
-if version < 600
-  set isk-=_
-  if b:tex_stylish
-    set isk+=@
-  endif
+" One may override this iskeyword setting by providing
+" g:tex_isk
+if exists("g:tex_isk")
+ exe "setlocal isk=".g:tex_isk
 else
-  setlocal isk-=_
-  if b:tex_stylish
-    setlocal isk+=@
-  endif
+ setlocal isk=48-57,a-z,A-Z,192-255
+endif
+if b:tex_stylish
+  setlocal isk+=@-@
+endif
+if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell")
+ let g:tex_comment_nospell= 1
 endif
 
 " Clusters: {{{1
 " --------
-syn cluster texCmdGroup                contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSectionMarker,texSectionName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
-if !exists("g:tex_no_error")
+syn cluster texCmdGroup                contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
+if !exists("s:tex_no_error")
  syn cluster texCmdGroup       add=texMathError
 endif
 syn cluster texEnvGroup                contains=texMatcher,texMathDelim,texSpecialChar,texStatement
-syn cluster texFoldGroup       contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texSectionMarker,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract
-syn cluster texMatchGroup      contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
-syn cluster texStyleGroup      contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
+syn cluster texFoldGroup       contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texNoSpell
+syn cluster texBoldGroup       contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell
+syn cluster texItalGroup       contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texItalBoldStyle,texNoSpell
+if !exists("g:tex_nospell") || !g:tex_nospell
+ syn cluster texMatchGroup     contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
+ syn cluster texStyleGroup     contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
+else
+ syn cluster texMatchGroup     contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
+ syn cluster texStyleGroup     contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher
+endif
+syn cluster texPreambleMatchGroup      contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
 syn cluster texRefGroup                contains=texMatcher,texComment,texDelimiter
 if !exists("tex_no_math")
  syn cluster texMathZones      contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
@@ -120,7 +147,7 @@ if !exists("tex_no_math")
  syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
  syn cluster texMathMatchGroup contains=@texMathZones,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathMatcher,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone
  syn cluster texMathZoneGroup  contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
- if !exists("g:tex_no_error")
+ if !exists("s:tex_no_error")
   syn cluster texMathMatchGroup        add=texMathError
   syn cluster texMathZoneGroup add=texMathError
  endif
@@ -141,22 +168,30 @@ if !exists("tex_no_math")
 endif
 
 " Try to flag {} and () mismatches: {{{1
-if !exists("g:tex_no_error")
- syn region texMatcher         matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"      end="}"         contains=@texMatchGroup,texError
- syn region texMatcher         matchgroup=Delimiter start="\["                         end="]"         contains=@texMatchGroup,texError
-else
- syn region texMatcher         matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"      end="}"         contains=@texMatchGroup
- syn region texMatcher         matchgroup=Delimiter start="\["                         end="]"         contains=@texMatchGroup
+if s:tex_fast =~ 'm'
+  if !exists("s:tex_no_error")
+   syn region texMatcher               matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"      end="}"         contains=@texMatchGroup,texError
+   syn region texMatcher               matchgroup=Delimiter start="\["                         end="]"         contains=@texMatchGroup,texError,@NoSpell
+  else
+   syn region texMatcher               matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"      end="}"         contains=@texMatchGroup
+   syn region texMatcher               matchgroup=Delimiter start="\["                         end="]"         contains=@texMatchGroup
+  endif
+  if !exists("g:tex_nospell") || !g:tex_nospell
+   syn region texParen         start="("                                               end=")"         contains=@texMatchGroup,@Spell
+  else
+   syn region texParen         start="("                                               end=")"         contains=@texMatchGroup
+  endif
 endif
-syn region texParen            start="("                                               end=")"         contains=@texMatchGroup,@Spell
-if !exists("g:tex_no_error")
+if !exists("s:tex_no_error")
  syn match  texError           "[}\])]"
 endif
-if !exists("tex_no_math")
- if !exists("g:tex_no_error")
-  syn match  texMathError      "}"     contained
- endif
- syn region texMathMatcher     matchgroup=Delimiter start="{"  skip="\\\\\|\\}"  end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
+if s:tex_fast =~ 'M'
+  if !exists("tex_no_math")
+   if !exists("s:tex_no_error")
+    syn match  texMathError    "}"     contained
+   endif
+   syn region texMathMatcher   matchgroup=Delimiter    start="{"          skip="\\\\\|\\}"     end="}" end="%stopzone\>"       contained contains=@texMathMatchGroup
+  endif
 endif
 
 " TeX/LaTeX keywords: {{{1
@@ -166,7 +201,7 @@ if exists("g:tex_tex") || b:tex_stylish
   syn match texStatement       "\\[a-zA-Z@]\+"
 else
   syn match texStatement       "\\\a\+"
-  if !exists("g:tex_no_error")
+  if !exists("s:tex_no_error")
    syn match texError          "\\\a*@[a-zA-Z@]*"
   endif
 endif
@@ -174,9 +209,10 @@ endif
 " TeX/LaTeX delimiters: {{{1
 syn match texDelimiter         "&"
 syn match texDelimiter         "\\\\"
+syn match texDelimiter         "[{}]"
 
 " Tex/Latex Options: {{{1
-syn match texOption    "[^\\]\zs#\d\+\|^#\d\+"
+syn match texOption            "[^\\]\zs#\d\+\|^#\d\+"
 
 " texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
 if b:tex_stylish
@@ -192,17 +228,21 @@ syn match texAccent               +\\['=t'.c^ud"vb~Hr]{\a}+
 syn match texLigature          "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
 
 " \begin{}/\end{} section markers: {{{1
-syn match  texSectionMarker    "\\begin\>\|\\end\>" nextgroup=texSectionName
-syn region texSectionName      matchgroup=Delimiter start="{" end="}"  contained       nextgroup=texSectionModifier    contains=texComment
-syn region texSectionModifier  matchgroup=Delimiter start="\[" end="]" contained       contains=texComment
+syn match  texBeginEnd         "\\begin\>\|\\end\>" nextgroup=texBeginEndName
+if s:tex_fast =~ 'm'
+  syn region texBeginEndName   matchgroup=Delimiter    start="{"               end="}" contained       nextgroup=texBeginEndModifier   contains=texComment
+  syn region texBeginEndModifier       matchgroup=Delimiter    start="\["              end="]" contained       contains=texComment,@NoSpell
+endif
 
 " \documentclass, \documentstyle, \usepackage: {{{1
-syn match  texDocType          "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"  nextgroup=texSectionName,texDocTypeArgs
-syn region texDocTypeArgs      matchgroup=Delimiter start="\[" end="]"                 contained       nextgroup=texSectionName        contains=texComment
+syn match  texDocType          "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"  nextgroup=texBeginEndName,texDocTypeArgs
+if s:tex_fast =~ 'm'
+  syn region texDocTypeArgs    matchgroup=Delimiter start="\[" end="]"                 contained       nextgroup=texBeginEndName       contains=texComment,@NoSpell
+endif
 
 " Preamble syntax-based folding support: {{{1
 if g:tex_fold_enabled && has("folding")
- syn region texPreamble        transparent fold        start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texMatchGroup
+ syn region texPreamble        transparent fold        start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
 endif
 
 " TeX input: {{{1
@@ -210,7 +250,9 @@ syn match texInput          "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7                            contains=texStatemen
 syn match texInputFile         "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"        contains=texStatement,texInputCurlies,texInputFileOpt
 syn match texInputFile         "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"         contains=texStatement,texInputCurlies,texInputFileOpt
 syn match texInputCurlies      "[{}]"                                                          contained
-syn region texInputFileOpt     matchgroup=Delimiter start="\[" end="\]"                        contained       contains=texComment
+if s:tex_fast =~ 'm'
+ syn region texInputFileOpt    matchgroup=Delimiter start="\[" end="\]"                        contained       contains=texComment
+endif
 
 " Type Styles (LaTeX 2.09): {{{1
 syn match texTypeStyle         "\\rm\>"
@@ -223,8 +265,10 @@ syn match texTypeStyle             "\\sc\>"
 syn match texTypeStyle         "\\tt\>"
 
 " Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
-syn match texTypeStyle         "\\textbf\>"
-syn match texTypeStyle         "\\textit\>"
+if s:tex_conceal !~ 'b'
+ syn match texTypeStyle                "\\textbf\>"
+ syn match texTypeStyle                "\\textit\>"
+endif
 syn match texTypeStyle         "\\textmd\>"
 syn match texTypeStyle         "\\textrm\>"
 syn match texTypeStyle         "\\textsc\>"
@@ -274,32 +318,70 @@ syn match texSpaceCode            "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=
 syn match texSpaceCodeChar    "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
 
 " Sections, subsections, etc: {{{1
-if g:tex_fold_enabled && has("folding")
- syn region texDocZone                 matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'                                                                                 fold contains=@texFoldGroup,@texDocGroup,@Spell
- syn region texPartZone                        matchgroup=texSection start='\\part\>'                   end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'                                                              fold contains=@texFoldGroup,@texPartGroup,@Spell
- syn region texChapterZone             matchgroup=texSection start='\\chapter\>'                end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                                   fold contains=@texFoldGroup,@texChapterGroup,@Spell
- syn region texSectionZone             matchgroup=texSection start='\\section\>'                end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                        fold contains=@texFoldGroup,@texSectionGroup,@Spell
- syn region texSubSectionZone          matchgroup=texSection start='\\subsection\>'             end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                              fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
- syn region texSubSubSectionZone       matchgroup=texSection start='\\subsubsection\>'          end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                           fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
- syn region texParaZone                        matchgroup=texSection start='\\paragraph\>'              end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                  fold contains=@texFoldGroup,@texParaGroup,@Spell
- syn region texSubParaZone             matchgroup=texSection start='\\subparagraph\>'           end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'        fold contains=@texFoldGroup,@Spell
- syn region texTitle                   matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'                                                                                                        fold contains=@texFoldGroup,@Spell
- syn region texAbstract                        matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'                                                                                 fold contains=@texFoldGroup,@Spell
-else
- syn region texDocZone                 matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'                                                                                 contains=@texFoldGroup,@texDocGroup,@Spell
- syn region texPartZone                        matchgroup=texSection start='\\part\>'                   end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'                                                              contains=@texFoldGroup,@texPartGroup,@Spell
- syn region texChapterZone             matchgroup=texSection start='\\chapter\>'                end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                                   contains=@texFoldGroup,@texChapterGroup,@Spell
- syn region texSectionZone             matchgroup=texSection start='\\section\>'                end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                        contains=@texFoldGroup,@texSectionGroup,@Spell
- syn region texSubSectionZone          matchgroup=texSection start='\\subsection\>'             end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                              contains=@texFoldGroup,@texSubSectionGroup,@Spell
- syn region texSubSubSectionZone       matchgroup=texSection start='\\subsubsection\>'          end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                           contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
- syn region texParaZone                        matchgroup=texSection start='\\paragraph\>'              end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                  contains=@texFoldGroup,@texParaGroup,@Spell
- syn region texSubParaZone             matchgroup=texSection start='\\subparagraph\>'           end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'        contains=@texFoldGroup,@Spell
- syn region texTitle                   matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'                                                                                                        contains=@texFoldGroup,@Spell
- syn region texAbstract                        matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'                                                                                 contains=@texFoldGroup,@Spell
+if s:tex_fast =~ 'p'
+  if !exists("g:tex_nospell") || !g:tex_nospell
+   if g:tex_fold_enabled && has("folding")
+    syn region texDocZone                      matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'                                                                                 fold contains=@texFoldGroup,@texDocGroup,@Spell
+    syn region texPartZone             matchgroup=texSection start='\\part\>'                   end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'                                                              fold contains=@texFoldGroup,@texPartGroup,@Spell
+    syn region texChapterZone          matchgroup=texSection start='\\chapter\>'                end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                                   fold contains=@texFoldGroup,@texChapterGroup,@Spell
+    syn region texSectionZone          matchgroup=texSection start='\\section\>'                end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                        fold contains=@texFoldGroup,@texSectionGroup,@Spell
+    syn region texSubSectionZone               matchgroup=texSection start='\\subsection\>'             end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                              fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
+    syn region texSubSubSectionZone    matchgroup=texSection start='\\subsubsection\>'          end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                           fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
+    syn region texParaZone             matchgroup=texSection start='\\paragraph\>'              end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                  fold contains=@texFoldGroup,@texParaGroup,@Spell
+    syn region texSubParaZone          matchgroup=texSection start='\\subparagraph\>'           end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'        fold contains=@texFoldGroup,@Spell
+    syn region texTitle                        matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'                                                                                                        fold contains=@texFoldGroup,@Spell
+    syn region texAbstract             matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'                                                                                 fold contains=@texFoldGroup,@Spell
+   else
+    syn region texDocZone                      matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'                                                                                 contains=@texFoldGroup,@texDocGroup,@Spell
+    syn region texPartZone             matchgroup=texSection start='\\part\>'                   end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'                                                              contains=@texFoldGroup,@texPartGroup,@Spell
+    syn region texChapterZone          matchgroup=texSection start='\\chapter\>'                end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                                   contains=@texFoldGroup,@texChapterGroup,@Spell
+    syn region texSectionZone          matchgroup=texSection start='\\section\>'                end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                        contains=@texFoldGroup,@texSectionGroup,@Spell
+    syn region texSubSectionZone               matchgroup=texSection start='\\subsection\>'             end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                              contains=@texFoldGroup,@texSubSectionGroup,@Spell
+    syn region texSubSubSectionZone    matchgroup=texSection start='\\subsubsection\>'          end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                           contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
+    syn region texParaZone             matchgroup=texSection start='\\paragraph\>'              end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                  contains=@texFoldGroup,@texParaGroup,@Spell
+    syn region texSubParaZone          matchgroup=texSection start='\\subparagraph\>'           end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'        contains=@texFoldGroup,@Spell
+    syn region texTitle                        matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'                                                                                                        contains=@texFoldGroup,@Spell
+    syn region texAbstract             matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'                                                                                 contains=@texFoldGroup,@Spell
+   endif
+  else
+   if g:tex_fold_enabled && has("folding")
+    syn region texDocZone                      matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'                                                                                 fold contains=@texFoldGroup,@texDocGroup
+    syn region texPartZone             matchgroup=texSection start='\\part\>'                   end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'                                                              fold contains=@texFoldGroup,@texPartGroup
+    syn region texChapterZone          matchgroup=texSection start='\\chapter\>'                end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                                   fold contains=@texFoldGroup,@texChapterGroup
+    syn region texSectionZone          matchgroup=texSection start='\\section\>'                end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                        fold contains=@texFoldGroup,@texSectionGroup
+    syn region texSubSectionZone               matchgroup=texSection start='\\subsection\>'             end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                              fold contains=@texFoldGroup,@texSubSectionGroup
+    syn region texSubSubSectionZone    matchgroup=texSection start='\\subsubsection\>'          end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                           fold contains=@texFoldGroup,@texSubSubSectionGroup
+    syn region texParaZone             matchgroup=texSection start='\\paragraph\>'              end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                  fold contains=@texFoldGroup,@texParaGroup
+    syn region texSubParaZone          matchgroup=texSection start='\\subparagraph\>'           end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'        fold contains=@texFoldGroup
+    syn region texTitle                        matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'                                                                                                        fold contains=@texFoldGroup
+    syn region texAbstract             matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'                                                                                 fold contains=@texFoldGroup
+   else
+    syn region texDocZone                      matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'                                                                                 contains=@texFoldGroup,@texDocGroup
+    syn region texPartZone             matchgroup=texSection start='\\part\>'                   end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'                                                              contains=@texFoldGroup,@texPartGroup
+    syn region texChapterZone          matchgroup=texSection start='\\chapter\>'                end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                                   contains=@texFoldGroup,@texChapterGroup
+    syn region texSectionZone          matchgroup=texSection start='\\section\>'                end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                                        contains=@texFoldGroup,@texSectionGroup
+    syn region texSubSectionZone               matchgroup=texSection start='\\subsection\>'             end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                              contains=@texFoldGroup,@texSubSectionGroup
+    syn region texSubSubSectionZone    matchgroup=texSection start='\\subsubsection\>'          end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                           contains=@texFoldGroup,@texSubSubSectionGroup
+    syn region texParaZone             matchgroup=texSection start='\\paragraph\>'              end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'                  contains=@texFoldGroup,@texParaGroup
+    syn region texSubParaZone          matchgroup=texSection start='\\subparagraph\>'           end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'        contains=@texFoldGroup
+    syn region texTitle                        matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'                                                                                                        contains=@texFoldGroup
+    syn region texAbstract             matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'                                                                                 contains=@texFoldGroup
+   endif
+  endif
+endif
+
+" particular support for bold and italic {{{1
+if s:tex_fast =~ 'b'
+  if s:tex_conceal =~ 'b'
+   syn region texBoldStyle     matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
+   syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
+   syn region texItalStyle     matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
+   syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
+  endif
 endif
 
 " Bad Math (mismatched): {{{1
-if !exists("tex_no_math")
+if !exists("g:tex_no_math") && !exists("s:tex_no_error")
  syn match texBadMath          "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
  syn match texBadMath          "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
  syn match texBadMath          "\\[\])]"
@@ -320,17 +402,21 @@ if !exists("tex_no_math")
     let foldcmd= ""
    endif
    exe "syn cluster texMathZones add=".grpname
-   exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
-   exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
-   exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+   if s:tex_fast =~ 'M'
+    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
+    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+   endif
    exe 'hi def link '.grpname.' texMath'
    if a:starform
     let grpname  = "texMathZone".a:sfx.'S'
     let syncname = "texSyncMathZone".a:sfx.'S'
     exe "syn cluster texMathZones add=".grpname
-    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
-    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
-    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+    if s:tex_fast =~ 'M'
+     exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
+     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+    endif
     exe 'hi def link '.grpname.' texMath'
    endif
  endfun
@@ -350,42 +436,85 @@ if !exists("tex_no_math")
  call TexNewMathZone("L","xxalignat",0)
 
  " Inline Math Zones: {{{2
- if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
-  syn region texMathZoneV      matchgroup=Delimiter start="\\("                        matchgroup=Delimiter end="\\)\|%stopzone\>"     keepend concealends contains=@texMathZoneGroup
-  syn region texMathZoneW      matchgroup=Delimiter start="\\\["                       matchgroup=Delimiter end="\\]\|%stopzone\>"     keepend concealends contains=@texMathZoneGroup
-  syn region texMathZoneX      matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"       matchgroup=Delimiter end="\$" end="%stopzone\>"         concealends contains=@texMathZoneGroup
-  syn region texMathZoneY      matchgroup=Delimiter start="\$\$"                       matchgroup=Delimiter end="\$\$" end="%stopzone\>"       concealends keepend             contains=@texMathZoneGroup
- else
-  syn region texMathZoneV      matchgroup=Delimiter start="\\("                        matchgroup=Delimiter end="\\)\|%stopzone\>"     keepend contains=@texMathZoneGroup
-  syn region texMathZoneW      matchgroup=Delimiter start="\\\["                       matchgroup=Delimiter end="\\]\|%stopzone\>"     keepend contains=@texMathZoneGroup
-  syn region texMathZoneX      matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"       matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
-  syn region texMathZoneY      matchgroup=Delimiter start="\$\$"                       matchgroup=Delimiter end="\$\$" end="%stopzone\>"       keepend         contains=@texMathZoneGroup
+ if s:tex_fast =~ 'M'
+  if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
+   syn region texMathZoneV     matchgroup=Delimiter start="\\("                        matchgroup=Delimiter end="\\)\|%stopzone\>"     keepend concealends contains=@texMathZoneGroup
+   syn region texMathZoneW     matchgroup=Delimiter start="\\\["                       matchgroup=Delimiter end="\\]\|%stopzone\>"     keepend concealends contains=@texMathZoneGroup
+   syn region texMathZoneX     matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"       matchgroup=Delimiter end="\$" end="%stopzone\>"         concealends contains=@texMathZoneGroup
+   syn region texMathZoneY     matchgroup=Delimiter start="\$\$"                       matchgroup=Delimiter end="\$\$" end="%stopzone\>"       concealends keepend             contains=@texMathZoneGroup
+  else
+   syn region texMathZoneV     matchgroup=Delimiter start="\\("                        matchgroup=Delimiter end="\\)\|%stopzone\>"     keepend contains=@texMathZoneGroup
+   syn region texMathZoneW     matchgroup=Delimiter start="\\\["                       matchgroup=Delimiter end="\\]\|%stopzone\>"     keepend contains=@texMathZoneGroup
+   syn region texMathZoneX     matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"       matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
+   syn region texMathZoneY     matchgroup=Delimiter start="\$\$"                       matchgroup=Delimiter end="\$\$" end="%stopzone\>"       keepend         contains=@texMathZoneGroup
+  endif
+  syn region texMathZoneZ      matchgroup=texStatement start="\\ensuremath\s*{"        matchgroup=texStatement end="}" end="%stopzone\>"       contains=@texMathZoneGroup
  endif
- syn region texMathZoneZ       matchgroup=texStatement start="\\ensuremath\s*{"        matchgroup=texStatement end="}" end="%stopzone\>"       contains=@texMathZoneGroup
 
  syn match texMathOper         "[_^=]" contained
 
  " Text Inside Math Zones: {{{2
- syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'        end='}' contains=@texFoldGroup,@Spell
+ if s:tex_fast =~ 'M'
+  if !exists("g:tex_nospell") || !g:tex_nospell
+   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'      end='}' contains=@texFoldGroup,@Spell
+  else
+   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'      end='}' contains=@texFoldGroup
+  endif
+ endif
 
  " \left..something.. and \right..something.. support: {{{2
  syn match   texMathDelimBad   contained               "\S"
  if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
   syn match   texMathDelim     contained               "\\left\\{\>"   skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
   syn match   texMathDelim     contained               "\\right\\}\>"  skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
+  let s:texMathDelimList=[
+     \ ['<'            , '<'] ,
+     \ ['>'            , '>'] ,
+     \ ['('            , '('] ,
+     \ [')'            , ')'] ,
+     \ ['\['           , '['] ,
+     \ [']'            , ']'] ,
+     \ ['\\{'          , '{'] ,
+     \ ['\\}'          , '}'] ,
+     \ ['|'            , '|'] ,
+     \ ['\\|'          , '‖'] ,
+     \ ['\\backslash'  , '\'] ,
+     \ ['\\downarrow'  , '↓'] ,
+     \ ['\\Downarrow'  , '⇓'] ,
+     \ ['\\langle'     , '<'] ,
+     \ ['\\lbrace'     , '['] ,
+     \ ['\\lceil'      , '⌈'] ,
+     \ ['\\lfloor'     , '⌊'] ,
+     \ ['\\lgroup'     , '⌊'] ,
+     \ ['\\lmoustache' , '⎛'] ,
+     \ ['\\rangle'     , '>'] ,
+     \ ['\\rbrace'     , ']'] ,
+     \ ['\\rceil'      , '⌉'] ,
+     \ ['\\rfloor'     , '⌋'] ,
+     \ ['\\rgroup'     , '⌋'] ,
+     \ ['\\rmoustache' , '⎞'] ,
+     \ ['\\uparrow'    , '↑'] ,
+     \ ['\\Uparrow'    , '↑'] ,
+     \ ['\\updownarrow', '↕'] ,
+     \ ['\\Updownarrow', '⇕']]
+  syn match texMathDelim       '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
+  for texmath in s:texMathDelimList
+   exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."'   contained conceal cchar=".texmath[1]
+  endfor
+
  else
   syn match   texMathDelim     contained               "\\\(left\|right\)\>"   skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
+  syn match   texMathDelim     contained               "\\[bB]igg\=[lr]\=\>"   skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
+  syn match   texMathDelimSet2 contained       "\\"            nextgroup=texMathDelimKey,texMathDelimBad
+  syn match   texMathDelimSet1 contained       "[<>()[\]|/.]\|\\[{}|]"
+  syn keyword texMathDelimKey  contained       backslash       lceil           lVert           rgroup          uparrow
+  syn keyword texMathDelimKey  contained       downarrow       lfloor          rangle          rmoustache      Uparrow
+  syn keyword texMathDelimKey  contained       Downarrow       lgroup          rbrace          rvert           updownarrow
+  syn keyword texMathDelimKey  contained       langle          lmoustache      rceil           rVert           Updownarrow
+  syn keyword texMathDelimKey  contained       lbrace          lvert           rfloor
  endif
- syn match   texMathDelim      contained               "\\\([bB]igg\=[lr]\)\>"                 skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
  syn match   texMathDelim      contained               "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
  syn match   texMathDelim      contained               "\\lefteqn\>"
- syn match   texMathDelimSet2  contained       "\\"            nextgroup=texMathDelimKey,texMathDelimBad
- syn match   texMathDelimSet1  contained       "[<>()[\]|/.]\|\\[{}|]"
- syn keyword texMathDelimKey   contained       backslash       lceil           lVert           rgroup          uparrow
- syn keyword texMathDelimKey   contained       downarrow       lfloor          rangle          rmoustache      Uparrow
- syn keyword texMathDelimKey   contained       Downarrow       lgroup          rbrace          rvert           updownarrow
- syn keyword texMathDelimKey   contained       langle          lmoustache      rceil           rVert           Updownarrow
- syn keyword texMathDelimKey   contained       lbrace          lvert           rfloor
 endif
 
 " Special TeX characters  ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
@@ -400,6 +529,13 @@ if !exists("tex_no_math")
  syn match texOnlyMath         "[_^]"
 endif
 syn match texSpecialChar       "\^\^[0-9a-f]\{2}\|\^\^\S"
+if s:tex_conceal !~ 'S'
+ syn match texSpecialChar      '\\glq\>'       contained conceal cchar=‚
+ syn match texSpecialChar      '\\grq\>'       contained conceal cchar=‘
+ syn match texSpecialChar      '\\glqq\>'      contained conceal cchar=„
+ syn match texSpecialChar      '\\grqq\>'      contained conceal cchar=“
+ syn match texSpecialChar      '\\hyp\>'       contained conceal cchar=-
+endif
 
 " Comments: {{{1
 "    Normal TeX LaTeX     :   %....
@@ -412,81 +548,85 @@ endif
 syn case ignore
 syn keyword texTodo            contained               combak  fixme   todo    xxx
 syn case match
-if b:extfname == "dtx"
+if s:extfname == "dtx"
   syn match texComment         "\^\^A.*$"      contains=@texCommentGroup
   syn match texComment         "^%\+"          contains=@texCommentGroup
 else
   if g:tex_fold_enabled
    " allows syntax-folding of 2 or more contiguous comment lines
    " single-line comments are not folded
-   syn match  texComment       "%.*$"          contains=@texCommentGroup
-   syn region texComment       start="^\zs\s*%.*\_s*%" skip="^\s*%"    end='^\ze\s*[^%]' fold
+   syn match  texComment       "%.*$"                  contains=@texCommentGroup
+   if s:tex_fast =~ 'c'
+    syn region texComment      start="^\zs\s*%.*\_s*%" skip="^\s*%"    end='^\ze\s*[^%]' fold
+    syn region texNoSpell      contained fold          matchgroup=texComment start="%\s*nospell\s*{"   end="%\s*nospell\s*}"   contains=@texFoldGroup,@NoSpell
+   endif
   else
-   syn match texComment                "%.*$"          contains=@texCommentGroup
+   syn match texComment                "%.*$"                  contains=@texCommentGroup
+   if s:tex_fast =~ 'c'
+    syn region texNoSpell      contained               matchgroup=texComment start="%\s*nospell\s*{"   end="%\s*nospell\s*}"   contains=@texFoldGroup,@NoSpell
+   endif
   endif
 endif
 
 " Separate lines used for verb` and verb# so that the end conditions {{{1
 " will appropriately terminate.
 " If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
-if exists("g:tex_verbspell") && g:tex_verbspell
- syn region texZone            start="\\begin{[vV]erbatim}"            end="\\end{[vV]erbatim}\|%stopzone\>"   contains=@Spell
- " listings package:
- syn region texZone            start="\\begin{lstlisting}"             end="\\end{lstlisting}\|%stopzone\>"    contains=@Spell
- " moreverb package:
- syn region texZone            start="\\begin{verbatimtab}"            end="\\end{verbatimtab}\|%stopzone\>"   contains=@Spell
- syn region texZone            start="\\begin{verbatimwrite}"          end="\\end{verbatimwrite}\|%stopzone\>" contains=@Spell
- syn region texZone            start="\\begin{boxedverbatim}"          end="\\end{boxedverbatim}\|%stopzone\>" contains=@Spell
- if version < 600
-  syn region texZone           start="\\verb\*\=`"                     end="`\|%stopzone\>"                    contains=@Spell
-  syn region texZone           start="\\verb\*\=#"                     end="#\|%stopzone\>"                    contains=@Spell
- else
-   if b:tex_stylish
-    syn region texZone         start="\\verb\*\=\z([^\ta-zA-Z@]\)"     end="\z1\|%stopzone\>"                  contains=@Spell
+if s:tex_fast =~ 'v'
+  if exists("g:tex_verbspell") && g:tex_verbspell
+   syn region texZone          start="\\begin{[vV]erbatim}"            end="\\end{[vV]erbatim}\|%stopzone\>"   contains=@Spell
+   " listings package:
+   syn region texZone          start="\\begin{lstlisting}"             end="\\end{lstlisting}\|%stopzone\>"    contains=@Spell
+   if version < 600
+    syn region texZone         start="\\verb\*\=`"                     end="`\|%stopzone\>"                    contains=@Spell
+    syn region texZone         start="\\verb\*\=#"                     end="#\|%stopzone\>"                    contains=@Spell
    else
-    syn region texZone         start="\\verb\*\=\z([^\ta-zA-Z]\)"      end="\z1\|%stopzone\>"                  contains=@Spell
+     if b:tex_stylish
+      syn region texZone               start="\\verb\*\=\z([^\ta-zA-Z@]\)"     end="\z1\|%stopzone\>"                  contains=@Spell
+     else
+      syn region texZone               start="\\verb\*\=\z([^\ta-zA-Z]\)"      end="\z1\|%stopzone\>"                  contains=@Spell
+     endif
    endif
- endif
-else
- syn region texZone            start="\\begin{[vV]erbatim}"            end="\\end{[vV]erbatim}\|%stopzone\>"
- " listings package:
- syn region texZone            start="\\begin{lstlisting}"             end="\\end{lstlisting}\|%stopzone\>"
- " moreverb package:
- syn region texZone            start="\\begin{verbatimtab}"            end="\\end{verbatimtab}\|%stopzone\>"
- syn region texZone            start="\\begin{verbatimwrite}"          end="\\end{verbatimwrite}\|%stopzone\>"
- syn region texZone            start="\\begin{boxedverbatim}"          end="\\end{boxedverbatim}\|%stopzone\>"
- if version < 600
-  syn region texZone           start="\\verb\*\=`"                     end="`\|%stopzone\>"
-  syn region texZone           start="\\verb\*\=#"                     end="#\|%stopzone\>"
- else
-   if b:tex_stylish
-     syn region texZone                start="\\verb\*\=\z([^\ta-zA-Z@]\)"     end="\z1\|%stopzone\>"
+  else
+   syn region texZone          start="\\begin{[vV]erbatim}"            end="\\end{[vV]erbatim}\|%stopzone\>"
+   if version < 600
+    syn region texZone         start="\\verb\*\=`"                     end="`\|%stopzone\>"
+    syn region texZone         start="\\verb\*\=#"                     end="#\|%stopzone\>"
    else
-     syn region texZone                start="\\verb\*\=\z([^\ta-zA-Z]\)"      end="\z1\|%stopzone\>"
+     if b:tex_stylish
+       syn region texZone              start="\\verb\*\=\z([^\ta-zA-Z@]\)"     end="\z1\|%stopzone\>"
+     else
+       syn region texZone              start="\\verb\*\=\z([^\ta-zA-Z]\)"      end="\z1\|%stopzone\>"
+     endif
    endif
- endif
 endif
 endif
 
 " Tex Reference Zones: {{{1
-syn region texZone             matchgroup=texStatement start="@samp{"                  end="}\|%stopzone\>"    contains=@texRefGroup
-syn region texRefZone          matchgroup=texStatement start="\\nocite{"               end="}\|%stopzone\>"    contains=@texRefGroup
-syn region texRefZone          matchgroup=texStatement start="\\bibliography{"         end="}\|%stopzone\>"    contains=@texRefGroup
-syn region texRefZone          matchgroup=texStatement start="\\label{"                end="}\|%stopzone\>"    contains=@texRefGroup
-syn region texRefZone          matchgroup=texStatement start="\\\(page\|eq\)ref{"      end="}\|%stopzone\>"    contains=@texRefGroup
-syn region texRefZone          matchgroup=texStatement start="\\v\=ref{"               end="}\|%stopzone\>"    contains=@texRefGroup
+if s:tex_fast =~ 'r'
+  syn region texZone           matchgroup=texStatement start="@samp{"                  end="}\|%stopzone\>"    contains=@texRefGroup
+  syn region texRefZone                matchgroup=texStatement start="\\nocite{"               end="}\|%stopzone\>"    contains=@texRefGroup
+  syn region texRefZone                matchgroup=texStatement start="\\bibliography{"         end="}\|%stopzone\>"    contains=@texRefGroup
+  syn region texRefZone                matchgroup=texStatement start="\\label{"                end="}\|%stopzone\>"    contains=@texRefGroup
+  syn region texRefZone                matchgroup=texStatement start="\\\(page\|eq\)ref{"      end="}\|%stopzone\>"    contains=@texRefGroup
+  syn region texRefZone                matchgroup=texStatement start="\\v\=ref{"               end="}\|%stopzone\>"    contains=@texRefGroup
+  syn region texRefOption      contained       matchgroup=Delimiter start='\[' end=']'         contains=@texRefGroup,texRefZone        nextgroup=texRefOption,texCite
+  syn region texCite   contained       matchgroup=Delimiter start='{' end='}'          contains=@texRefGroup,texRefZone,texCite
+endif
 syn match  texRefZone          '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
-syn region texRefOption        contained       matchgroup=Delimiter start='\[' end=']'         contains=@texRefGroup,texRefZone        nextgroup=texRefOption,texCite
-syn region texCite     contained       matchgroup=Delimiter start='{' end='}'          contains=@texRefGroup,texRefZone,texCite
 
 " Handle newcommand, newenvironment : {{{1
 syn match  texNewCmd                           "\\newcommand\>"                        nextgroup=texCmdName skipwhite skipnl
-syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"          nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
-syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"          nextgroup=texCmdBody skipwhite skipnl
-syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"       matchgroup=Delimiter end="}" contains=@texCmdGroup
+if s:tex_fast =~ 'V'
+  syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"                nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
+  syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"                nextgroup=texCmdBody skipwhite skipnl
+  syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"     matchgroup=Delimiter end="}" contains=@texCmdGroup
+endif
 syn match  texNewEnv                           "\\newenvironment\>"                    nextgroup=texEnvName skipwhite skipnl
-syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"          nextgroup=texEnvBgn skipwhite skipnl
-syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"          nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
-syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"          skipwhite skipnl contains=@texEnvGroup
+if s:tex_fast =~ 'V'
+  syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"                nextgroup=texEnvBgn skipwhite skipnl
+  syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"                nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
+  syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"                skipwhite skipnl contains=@texEnvGroup
+endif
 
 " Definitions/Commands: {{{1
 syn match texDefCmd                            "\\def\>"                               nextgroup=texDefName skipwhite skipnl
@@ -507,11 +647,15 @@ syn match  texLength              "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\
 syn match texString            "\(``\|''\|,,\)"
 
 " makeatletter -- makeatother sections
-if !exists("g:tex_no_error")
- syn region texStyle                   matchgroup=texStatement start='\\makeatletter' end='\\makeatother'      contains=@texStyleGroup contained
+if !exists("s:tex_no_error")
+ if s:tex_fast =~ 'S'
+  syn region texStyle                  matchgroup=texStatement start='\\makeatletter' end='\\makeatother'      contains=@texStyleGroup contained
+ endif
  syn match  texStyleStatement          "\\[a-zA-Z@]\+" contained
- syn region texStyleMatcher            matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"      end="}"         contains=@texStyleGroup,texError        contained
- syn region texStyleMatcher            matchgroup=Delimiter start="\["                         end="]"         contains=@texStyleGroup,texError        contained
+ if s:tex_fast =~ 'S'
+  syn region texStyleMatcher           matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"      end="}"         contains=@texStyleGroup,texError        contained
+  syn region texStyleMatcher           matchgroup=Delimiter start="\["                         end="]"         contains=@texStyleGroup,texError        contained
+ endif
 endif
 
 " Conceal mode support (supports set cole=2) {{{1
@@ -521,30 +665,38 @@ if has("conceal") && &enc == 'utf-8'
  " (many of these symbols were contributed by Björn Winckler)
  if s:tex_conceal =~ 'm'
   let s:texMathList=[
+    \ ['|'             , '‖'],
+    \ ['aleph'         , 'ℵ'],
+    \ ['amalg'         , 'âˆ'],
     \ ['angle'         , '∠'],
     \ ['approx'                , '≈'],
     \ ['ast'           , '∗'],
     \ ['asymp'         , 'â‰'],
     \ ['backepsilon'   , 'âˆ'],
     \ ['backsimeq'     , '≃'],
+    \ ['backslash'     , '∖'],
     \ ['barwedge'      , '⊼'],
     \ ['because'       , '∵'],
     \ ['between'       , '≬'],
     \ ['bigcap'                , '∩'],
+    \ ['bigcirc'       , 'â—‹'],
     \ ['bigcup'                , '∪'],
     \ ['bigodot'       , '⊙'],
     \ ['bigoplus'      , '⊕'],
     \ ['bigotimes'     , '⊗'],
     \ ['bigsqcup'      , '⊔'],
     \ ['bigtriangledown', '∇'],
+    \ ['bigtriangleup' , '∆'],
     \ ['bigvee'                , 'â‹'],
     \ ['bigwedge'      , 'â‹€'],
     \ ['blacksquare'   , '∎'],
     \ ['bot'           , '⊥'],
+    \ ['bowtie'                , '⋈'],
     \ ['boxdot'                , '⊡'],
     \ ['boxminus'      , '⊟'],
     \ ['boxplus'       , '⊞'],
     \ ['boxtimes'      , '⊠'],
+    \ ['bullet'                , '•'],
     \ ['bumpeq'                , 'â‰'],
     \ ['Bumpeq'                , '≎'],
     \ ['cap'           , '∩'],
@@ -557,29 +709,36 @@ if has("conceal") && &enc == 'utf-8'
     \ ['circlearrowright', '↻'],
     \ ['circledast'    , '⊛'],
     \ ['circledcirc'   , '⊚'],
+    \ ['clubsuit'      , '♣'],
     \ ['complement'    , 'âˆ'],
     \ ['cong'          , '≅'],
     \ ['coprod'                , 'âˆ'],
+    \ ['copyright'     , '©'],
     \ ['cup'           , '∪'],
     \ ['Cup'           , 'â‹“'],
     \ ['curlyeqprec'   , 'â‹ž'],
     \ ['curlyeqsucc'   , 'â‹Ÿ'],
     \ ['curlyvee'      , 'â‹Ž'],
     \ ['curlywedge'    , 'â‹'],
+    \ ['dagger'                , '†'],
     \ ['dashv'         , '⊣'],
+    \ ['ddagger'       , '‡'],
+    \ ['ddots'         , '⋱'],
     \ ['diamond'       , 'â‹„'],
+    \ ['diamondsuit'   , '♢'],
     \ ['div'           , '÷'],
     \ ['doteq'         , 'â‰'],
     \ ['doteqdot'      , '≑'],
     \ ['dotplus'       , '∔'],
+    \ ['dots'          , '…'],
     \ ['dotsb'         , '⋯'],
     \ ['dotsc'         , '…'],
-    \ ['dots'          , '…'],
     \ ['dotsi'         , '⋯'],
     \ ['dotso'         , '…'],
     \ ['doublebarwedge'        , 'â©ž'],
     \ ['downarrow'     , '↓'],
     \ ['Downarrow'     , '⇓'],
+    \ ['ell'           , 'â„“'],
     \ ['emptyset'      , '∅'],
     \ ['eqcirc'                , '≖'],
     \ ['eqsim'         , '≂'],
@@ -588,52 +747,67 @@ if has("conceal") && &enc == 'utf-8'
     \ ['equiv'         , '≡'],
     \ ['exists'                , '∃'],
     \ ['fallingdotseq' , '≒'],
+    \ ['flat'          , 'â™­'],
     \ ['forall'                , '∀'],
+    \ ['frown'         , 'â”'],
     \ ['ge'            , '≥'],
     \ ['geq'           , '≥'],
     \ ['geqq'          , '≧'],
     \ ['gets'          , 'â†'],
+    \ ['gg'            , '⟫'],
     \ ['gneqq'         , '≩'],
     \ ['gtrdot'                , 'â‹—'],
     \ ['gtreqless'     , 'â‹›'],
     \ ['gtrless'       , '≷'],
     \ ['gtrsim'                , '≳'],
+    \ ['hbar'          , 'â„'],
+    \ ['heartsuit'     , '♡'],
     \ ['hookleftarrow' , '↩'],
     \ ['hookrightarrow'        , '↪'],
     \ ['iiint'         , '∭'],
     \ ['iint'          , '∬'],
     \ ['Im'            , 'â„‘'],
+    \ ['imath'         , 'É©'],
     \ ['in'            , '∈'],
     \ ['infty'         , '∞'],
     \ ['int'           , '∫'],
     \ ['lceil'         , '⌈'],
     \ ['ldots'         , '…'],
     \ ['le'            , '≤'],
-    \ ['leftarrow'     , '⟵'],
-    \ ['Leftarrow'     , '⟸'],
-    \ ['leftarrowtail' , '↢'],
+    \ ['leadsto'       , 'â†'],
     \ ['left('         , '('],
     \ ['left\['                , '['],
     \ ['left\\{'       , '{'],
+    \ ['leftarrow'     , '⟵'],
+    \ ['Leftarrow'     , '⟸'],
+    \ ['leftarrowtail' , '↢'],
+    \ ['leftharpoondown', '↽'],
+    \ ['leftharpoonup' , '↼'],
+    \ ['leftrightarrow'        , '↔'],
     \ ['Leftrightarrow'        , '⇔'],
     \ ['leftrightsquigarrow', '↭'],
     \ ['leftthreetimes'        , 'â‹‹'],
     \ ['leq'           , '≤'],
+    \ ['leq'           , '≤'],
     \ ['leqq'          , '≦'],
     \ ['lessdot'       , 'â‹–'],
     \ ['lesseqgtr'     , 'â‹š'],
     \ ['lesssim'       , '≲'],
     \ ['lfloor'                , '⌊'],
+    \ ['ll'            , '≪'],
+    \ ['lmoustache'     , 'â•­'],
     \ ['lneqq'         , '≨'],
     \ ['ltimes'                , '⋉'],
     \ ['mapsto'                , '↦'],
     \ ['measuredangle' , '∡'],
     \ ['mid'           , '∣'],
+    \ ['models'                , 'â•ž'],
     \ ['mp'            , '∓'],
     \ ['nabla'         , '∇'],
+    \ ['natural'       , 'â™®'],
     \ ['ncong'         , '≇'],
-    \ ['nearrow'       , '↗'],
     \ ['ne'            , '≠'],
+    \ ['nearrow'       , '↗'],
     \ ['neg'           , '¬'],
     \ ['neq'           , '≠'],
     \ ['nexists'       , '∄'],
@@ -669,35 +843,45 @@ if has("conceal") && &enc == 'utf-8'
     \ ['oslash'                , '⊘'],
     \ ['otimes'                , '⊗'],
     \ ['owns'          , '∋'],
+    \ ['P'             , '¶'],
+    \ ['parallel'      , 'â•‘'],
     \ ['partial'       , '∂'],
     \ ['perp'          , '⊥'],
     \ ['pitchfork'     , 'â‹”'],
     \ ['pm'            , '±'],
-    \ ['precapprox'    , '⪷'],
     \ ['prec'          , '≺'],
+    \ ['precapprox'    , '⪷'],
     \ ['preccurlyeq'   , '≼'],
     \ ['preceq'                , '⪯'],
     \ ['precnapprox'   , '⪹'],
     \ ['precneqq'      , '⪵'],
     \ ['precsim'       , '≾'],
+    \ ['prime'         , '′'],
     \ ['prod'          , 'âˆ'],
     \ ['propto'                , 'âˆ'],
     \ ['rceil'         , '⌉'],
     \ ['Re'            , 'â„œ'],
     \ ['rfloor'                , '⌋'],
-    \ ['rightarrow'    , '⟶'],
-    \ ['Rightarrow'    , '⟹'],
-    \ ['rightarrowtail'        , '↣'],
     \ ['right)'                , ')'],
     \ ['right]'                , ']'],
     \ ['right\\}'      , '}'],
+    \ ['rightarrow'    , '⟶'],
+    \ ['Rightarrow'    , '⟹'],
+    \ ['rightarrowtail'        , '↣'],
+    \ ['rightleftharpoons', '⇌'],
     \ ['rightsquigarrow', 'â†'],
     \ ['rightthreetimes', 'â‹Œ'],
     \ ['risingdotseq'  , '≓'],
+    \ ['rmoustache'     , 'â•®'],
     \ ['rtimes'                , 'â‹Š'],
+    \ ['S'             , '§'],
     \ ['searrow'       , '↘'],
     \ ['setminus'      , '∖'],
+    \ ['sharp'         , '♯'],
     \ ['sim'           , '∼'],
+    \ ['simeq'         , 'â‹'],
+    \ ['smile'         , '‿'],
+    \ ['spadesuit'     , 'â™ '],
     \ ['sphericalangle'        , '∢'],
     \ ['sqcap'         , '⊓'],
     \ ['sqcup'         , '⊔'],
@@ -705,20 +889,22 @@ if has("conceal") && &enc == 'utf-8'
     \ ['sqsubseteq'    , '⊑'],
     \ ['sqsupset'      , 'âŠ'],
     \ ['sqsupseteq'    , '⊒'],
+    \ ['star'          , '✫'],
     \ ['subset'                , '⊂'],
     \ ['Subset'                , 'â‹'],
     \ ['subseteq'      , '⊆'],
     \ ['subseteqq'     , 'â«…'],
     \ ['subsetneq'     , '⊊'],
     \ ['subsetneqq'    , 'â«‹'],
-    \ ['succapprox'    , '⪸'],
     \ ['succ'          , '≻'],
+    \ ['succapprox'    , '⪸'],
     \ ['succcurlyeq'   , '≽'],
     \ ['succeq'                , '⪰'],
     \ ['succnapprox'   , '⪺'],
     \ ['succneqq'      , '⪶'],
     \ ['succsim'       , '≿'],
     \ ['sum'           , '∑'],
+    \ ['supset'                , '⊃'],
     \ ['Supset'                , 'â‹‘'],
     \ ['supseteq'      , '⊇'],
     \ ['supseteqq'     , '⫆'],
@@ -730,6 +916,7 @@ if has("conceal") && &enc == 'utf-8'
     \ ['times'         , '×'],
     \ ['to'            , '→'],
     \ ['top'           , '⊤'],
+    \ ['triangle'      , '∆'],
     \ ['triangleleft'  , '⊲'],
     \ ['trianglelefteq'        , '⊴'],
     \ ['triangleq'     , '≜'],
@@ -747,13 +934,21 @@ if has("conceal") && &enc == 'utf-8'
     \ ['vDash'         , '⊨'],
     \ ['Vdash'         , '⊩'],
     \ ['vdots'         , 'â‹®'],
-    \ ['veebar'                , '⊻'],
     \ ['vee'           , '∨'],
+    \ ['veebar'                , '⊻'],
     \ ['Vvdash'                , '⊪'],
     \ ['wedge'         , '∧'],
+    \ ['wp'            , '℘'],
     \ ['wr'            , '≀']]
+"    \ ['jmath'                , 'X']
+"    \ ['uminus'       , 'X']
+"    \ ['uplus'                , 'X']
   for texmath in s:texMathList
-   exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
+   if texmath[0] =~ '\w$'
+    exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
+   else
+    exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
+   endif
   endfor
 
   if &ambw == "double"
@@ -763,6 +958,27 @@ if has("conceal") && &enc == 'utf-8'
    syn match texMathSymbol '\\gg\>'                    contained conceal cchar=⟫
    syn match texMathSymbol '\\ll\>'                    contained conceal cchar=⟪
   endif
+
+  syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
+  syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
+  syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
+  syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
+  syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
+  syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
+  syn match texMathSymbol '\\hat{g}' contained conceal cchar=Ä
+  syn match texMathSymbol '\\hat{G}' contained conceal cchar=Äœ
+  syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
+  syn match texMathSymbol '\\hat{I}' contained conceal cchar=ÃŽ
+  syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
+  syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
+  syn match texMathSymbol '\\hat{s}' contained conceal cchar=Å
+  syn match texMathSymbol '\\hat{S}' contained conceal cchar=Åœ
+  syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
+  syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
+  syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
+  syn match texMathSymbol '\\hat{W}' contained conceal cchar=Å´
+  syn match texMathSymbol '\\hat{y}' contained conceal cchar=Å·
+  syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
  endif
 
  " Greek {{{2
@@ -814,8 +1030,10 @@ if has("conceal") && &enc == 'utf-8'
 
  " Superscripts/Subscripts {{{2
  if s:tex_conceal =~ 's'
-  syn region texSuperscript    matchgroup=Delimiter start='\^{'        end='}' contained concealends contains=texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
-  syn region texSubscript      matchgroup=Delimiter start='_{'         end='}' contained concealends contains=texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
+  if s:tex_fast =~ 's'
+   syn region texSuperscript   matchgroup=Delimiter start='\^{'        skip="\\\\\|\\[{}]" end='}'     contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
+   syn region texSubscript     matchgroup=Delimiter start='_{'         skip="\\\\\|\\[{}]" end='}'     contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
+  endif
   fun! s:SuperSub(group,leader,pat,cchar)
     exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
     exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
@@ -873,6 +1091,9 @@ if has("conceal") && &enc == 'utf-8'
   call s:SuperSub('texSuperscript','\^','T','áµ€')
   call s:SuperSub('texSuperscript','\^','U','áµ')
   call s:SuperSub('texSuperscript','\^','W','ᵂ')
+  call s:SuperSub('texSuperscript','\^',',','ï¸')
+  call s:SuperSub('texSuperscript','\^',':','︓')
+  call s:SuperSub('texSuperscript','\^',';','︔')
   call s:SuperSub('texSuperscript','\^','+','âº')
   call s:SuperSub('texSuperscript','\^','-','â»')
   call s:SuperSub('texSuperscript','\^','<','Ë‚')
@@ -897,6 +1118,7 @@ if has("conceal") && &enc == 'utf-8'
   call s:SuperSub('texSubscript','_','i','áµ¢')
   call s:SuperSub('texSubscript','_','o','â‚’')
   call s:SuperSub('texSubscript','_','u','ᵤ')
+  call s:SuperSub('texSubscript','_',',','ï¸')
   call s:SuperSub('texSubscript','_','+','â‚Š')
   call s:SuperSub('texSubscript','_','-','â‚‹')
   call s:SuperSub('texSubscript','_','/','Ë')
@@ -939,18 +1161,23 @@ if has("conceal") && &enc == 'utf-8'
      endfor
    endfun
    "                  \`  \'  \^  \"  \~  \.  \c  \H  \k  \r  \u  \v
-   call s:Accents('a','à','á','â','ä','ã',' ',' ',' ','Ä…','Ã¥','ă','ă')
-   call s:Accents('A','À','Ã','Â','Ä','Ã',' ',' ',' ','Ä„','Ã…','Ä‚','Ä‚')
+   call s:Accents('a','à','á','â','ä','ã','ȧ',' ',' ','Ä…','Ã¥','ă','ă')
+   call s:Accents('A','À','Ã','Â','Ä','Ã','Ȧ',' ',' ','Ä„','Ã…','Ä‚','Ä‚')
    call s:Accents('c',' ','ć','ĉ',' ',' ','Ä‹','ç',' ',' ',' ',' ','Ä')
    call s:Accents('C',' ','Ć','Ĉ',' ',' ','ÄŠ','Ç',' ',' ',' ',' ','ÄŒ')
    call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ä')
    call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ÄŽ')
    call s:Accents('e','è','é','ê','ë','ẽ','Ä—','È©',' ','Ä™',' ','Ä•','Ä›')
    call s:Accents('E','È','É','Ê','Ë','Ẽ','Ä–','Ȩ',' ','Ę',' ','Ä”','Äš')
-   call s:Accents('g',' ',' ',' ',' ',' ','Ä¡','Ä£',' ',' ',' ','ÄŸ',' ')
-   call s:Accents('G',' ',' ',' ',' ',' ','Ä ','Ä¢',' ',' ',' ','Äž',' ')
+   call s:Accents('g',' ','ǵ','Ä',' ',' ','Ä¡','Ä£',' ',' ',' ','ÄŸ',' ')
+   call s:Accents('G',' ','Ç´','Äœ',' ',' ','Ä ','Ä¢',' ',' ',' ','Äž',' ')
+   call s:Accents('h',' ',' ','Ä¥',' ',' ',' ',' ',' ',' ',' ',' ','ÈŸ')
+   call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Èž')
    call s:Accents('i','ì','í','î','ï','Ä©','į',' ',' ',' ',' ','Ä­',' ')
    call s:Accents('I','ÃŒ','Ã','ÃŽ','Ã','Ĩ','Ä°',' ',' ',' ',' ','Ĭ',' ')
+   call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ç°')
+   call s:Accents('k',' ',' ',' ',' ',' ',' ','Ä·',' ',' ',' ',' ',' ')
+   call s:Accents('K',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ',' ')
    call s:Accents('l',' ','ĺ','ľ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
    call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ','Ä»',' ',' ',' ',' ','Ľ')
    call s:Accents('n',' ','Å„',' ',' ','ñ',' ','ņ',' ',' ',' ',' ','ň')
@@ -959,12 +1186,12 @@ if has("conceal") && &enc == 'utf-8'
    call s:Accents('O','Ã’','Ó','Ô','Ö','Õ','È®',' ','Å','Ǫ',' ','ÅŽ',' ')
    call s:Accents('r',' ','Å•',' ',' ',' ',' ','Å—',' ',' ',' ',' ','Å™')
    call s:Accents('R',' ','Å”',' ',' ',' ',' ','Å–',' ',' ',' ',' ','Ř')
-   call s:Accents('s',' ','Å›','Å',' ',' ',' ','ÅŸ',' ',' ',' ',' ','Å¡')
+   call s:Accents('s',' ','Å›','Å',' ',' ',' ','ÅŸ',' ','È¿',' ',' ','Å¡')
    call s:Accents('S',' ','Åš','Åœ',' ',' ',' ','Åž',' ',' ',' ',' ','Å ')
    call s:Accents('t',' ',' ',' ',' ',' ',' ','Å£',' ',' ',' ',' ','Å¥')
    call s:Accents('T',' ',' ',' ',' ',' ',' ','Å¢',' ',' ',' ',' ','Ť')
-   call s:Accents('u','ù','ú','û','ü','Å©',' ',' ','ű',' ','ů','Å­',' ')
-   call s:Accents('U','Ù','Ú','Û','Ãœ','Ũ',' ',' ','Å°',' ','Å®','Ŭ',' ')
+   call s:Accents('u','ù','ú','û','ü','Å©',' ',' ','ű','ų','ů','Å­','Ç”')
+   call s:Accents('U','Ù','Ú','Û','Ãœ','Ũ',' ',' ','Å°','Ų','Å®','Ŭ','Ç“')
    call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
    call s:Accents('W',' ',' ','Å´',' ',' ',' ',' ',' ',' ',' ',' ',' ')
    call s:Accents('y','ỳ','ý','Å·','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ')
@@ -1015,8 +1242,8 @@ endif
 if did_tex_syntax_inits == 1
  let did_tex_syntax_inits= 2
   " TeX highlighting groups which should share similar highlighting
-  if !exists("g:tex_no_error")
-   if !exists("tex_no_math")
+  if !exists("s:tex_no_error")
+   if !exists("g:tex_no_math")
     HiLink texBadMath          texError
     HiLink texMathDelimBad     texError
     HiLink texMathError                texError
@@ -1027,6 +1254,10 @@ if did_tex_syntax_inits == 1
    HiLink texError             Error
   endif
 
+  hi texBoldStyle              gui=bold        cterm=bold
+  hi texItalStyle              gui=italic      cterm=italic
+  hi texBoldItalStyle          gui=bold,italic cterm=bold,italic
+  hi texItalBoldStyle          gui=bold,italic cterm=bold,italic
   HiLink texCite               texRefZone
   HiLink texDefCmd             texDef
   HiLink texDefName            texDef
@@ -1044,6 +1275,8 @@ if did_tex_syntax_inits == 1
    HiLink texGreek             texStatement
    HiLink texSuperscript       texStatement
    HiLink texSubscript         texStatement
+   HiLink texSuperscripts      texSuperscript
+   HiLink texSubscripts        texSubscript
    HiLink texMathSymbol                texStatement
    HiLink texMathZoneV         texMath
    HiLink texMathZoneW         texMath
@@ -1052,8 +1285,8 @@ if did_tex_syntax_inits == 1
    HiLink texMathZoneV         texMath
    HiLink texMathZoneZ         texMath
   endif
-  HiLink texSectionMarker      texCmdName
-  HiLink texSectionName                texSection
+  HiLink texBeginEnd           texCmdName
+  HiLink texBeginEndName       texSection
   HiLink texSpaceCode          texStatement
   HiLink texStyleStatement     texStatement
   HiLink texTypeSize           texType
@@ -1088,7 +1321,9 @@ if did_tex_syntax_inits == 1
   delcommand HiLink
 endif
 
-" Current Syntax: {{{1
-unlet b:extfname
+" Cleanup: {{{1
+unlet s:extfname
 let   b:current_syntax = "tex"
+let &cpo               = s:keepcpo
+unlet s:keepcpo
 " vim: ts=8 fdm=marker
index b23dc3a..c24796e 100644 (file)
 " Vim syntax file
-" Language:    HMTL Tidy configuration file ( /etc/tidyrc ~/.tidyrc )
-" Maintainer:  Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:         http://gus.gscit.monash.edu.au/~djkea2/vim/syntax/tidy.vim
-" Last Change: 2005 Oct 06
+" Language:    HMTL Tidy configuration file (/etc/tidyrc ~/.tidyrc)
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2013 June 01
 
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
+if exists("b:current_syntax")
   finish
 endif
 
-if version < 600
-  set iskeyword=@,48-57,-
-else
-  setlocal iskeyword=@,48-57,-
-endif
+setlocal iskeyword=@,48-57,-
 
-syn match      tidyComment             "^\s*//.*$" contains=tidyTodo
-syn match      tidyComment             "^\s*#.*$"  contains=tidyTodo
-syn keyword    tidyTodo                TODO NOTE FIXME XXX contained
+syn match      tidyComment     "^\s*//.*$" contains=tidyTodo
+syn match      tidyComment     "^\s*#.*$"  contains=tidyTodo
+syn keyword    tidyTodo        TODO NOTE FIXME XXX contained
 
-syn match      tidyAssignment          "^[a-z0-9-]\+:\s*.*$" contains=tidyOption,@tidyValue,tidyDelimiter
-syn match      tidyDelimiter           ":" contained
+syn match      tidyAssignment  "^[a-z0-9-]\+:\s*.*$" contains=tidyOption,@tidyValue,tidyDelimiter
+syn match      tidyDelimiter   ":" contained
 
 syn match      tidyNewTagAssignment    "^new-\l\+-tags:\s*.*$" contains=tidyNewTagOption,tidyNewTagDelimiter,tidyNewTagValue,tidyDelimiter
 syn match      tidyNewTagDelimiter     "," contained
 syn match      tidyNewTagValue         "\<\w\+\>" contained
 
 syn case ignore
-syn keyword    tidyBoolean             t[rue] f[alse] y[es] n[o] contained
+syn keyword    tidyBoolean t[rue] f[alse] y[es] n[o] contained
 syn case match
-syn match      tidyDoctype             "\<omit\|auto\|strict\|loose\|transitional\|user\>" contained
+syn match      tidyDoctype "\<\%(omit\|auto\|strict\|loose\|transitional\|user\)\>" contained
 " NOTE: use match rather than keyword here so that tidyEncoding 'raw' does not
 "       always have precedence over tidyOption 'raw'
-syn match      tidyEncoding            "\<\(ascii\|latin0\|latin1\|raw\|utf8\|iso2022\|mac\|utf16le\|utf16be\|utf16\|win1252\|ibm858\|big5\|shiftjis\)\>" contained
-syn match      tidyNewline             "\<\(LF\|CRLF\|CR\)\>"
-syn match      tidyNumber              "\<\d\+\>" contained
-syn match      tidyRepeat              "\<keep-first\|keep-last\>" contained
-syn region     tidyString              start=+"+ skip=+\\\\\|\\"+ end=+"+ contained oneline
-syn region     tidyString              start=+'+ skip=+\\\\\|\\'+ end=+'+ contained oneline
-syn cluster    tidyValue               contains=tidyBoolean,tidyDoctype,tidyEncoding,tidyNewline,tidyNumber,tidyRepeat,tidyString
-
-syn match      tidyOption              "^accessibility-check"          contained
-syn match      tidyOption              "^add-xml-decl"                 contained
-syn match      tidyOption              "^add-xml-pi"                   contained
-syn match      tidyOption              "^add-xml-space"                contained
-syn match      tidyOption              "^alt-text"                     contained
-syn match      tidyOption              "^ascii-chars"                  contained
-syn match      tidyOption              "^assume-xml-procins"           contained
-syn match      tidyOption              "^bare"                         contained
-syn match      tidyOption              "^break-before-br"              contained
-syn match      tidyOption              "^char-encoding"                contained
-syn match      tidyOption              "^clean"                        contained
-syn match      tidyOption              "^css-prefix"                   contained
-syn match      tidyOption              "^doctype"                      contained
-syn match      tidyOption              "^doctype-mode"                 contained
-syn match      tidyOption              "^drop-empty-paras"             contained
-syn match      tidyOption              "^drop-font-tags"               contained
-syn match      tidyOption              "^drop-proprietary-attributes"  contained
-syn match      tidyOption              "^enclose-block-text"           contained
-syn match      tidyOption              "^enclose-text"                 contained
-syn match      tidyOption              "^error-file"                   contained
-syn match      tidyOption              "^escape-cdata"                 contained
-syn match      tidyOption              "^fix-backslash"                contained
-syn match      tidyOption              "^fix-bad-comments"             contained
-syn match      tidyOption              "^fix-uri"                      contained
-syn match      tidyOption              "^force-output"                 contained
-syn match      tidyOption              "^gnu-emacs"                    contained
-syn match      tidyOption              "^gnu-emacs-file"               contained
-syn match      tidyOption              "^hide-comments"                contained
-syn match      tidyOption              "^hide-endtags"                 contained
-syn match      tidyOption              "^indent"                       contained
-syn match      tidyOption              "^indent-attributes"            contained
-syn match      tidyOption              "^indent-cdata"                 contained
-syn match      tidyOption              "^indent-spaces"                contained
-syn match      tidyOption              "^input-encoding"               contained
-syn match      tidyOption              "^input-xml"                    contained
-syn match      tidyOption              "^join-classes"                 contained
-syn match      tidyOption              "^join-styles"                  contained
-syn match      tidyOption              "^keep-time"                    contained
-syn match      tidyOption              "^language"                     contained
-syn match      tidyOption              "^literal-attributes"           contained
-syn match      tidyOption              "^logical-emphasis"             contained
-syn match      tidyOption              "^lower-literals"               contained
-syn match      tidyOption              "^markup"                       contained
-syn match      tidyOption              "^merge-divs"                   contained
-syn match      tidyOption              "^ncr"                          contained
-syn match      tidyOption              "^newline"                      contained
-syn match      tidyOption              "^numeric-entities"             contained
-syn match      tidyOption              "^output-bom"                   contained
-syn match      tidyOption              "^output-encoding"              contained
-syn match      tidyOption              "^output-file"                  contained
-syn match      tidyOption              "^output-html"                  contained
-syn match      tidyOption              "^output-xhtml"                 contained
-syn match      tidyOption              "^output-xml"                   contained
-syn match      tidyOption              "^punctuation-wrap"             contained
-syn match      tidyOption              "^quiet"                        contained
-syn match      tidyOption              "^quote-ampersand"              contained
-syn match      tidyOption              "^quote-marks"                  contained
-syn match      tidyOption              "^quote-nbsp"                   contained
-syn match      tidyOption              "^raw"                          contained
-syn match      tidyOption              "^repeated-attributes"          contained
-syn match      tidyOption              "^replace-color"                contained
-syn match      tidyOption              "^show-body-only"               contained
-syn match      tidyOption              "^show-errors"                  contained
-syn match      tidyOption              "^show-warnings"                contained
-syn match      tidyOption              "^slide-style"                  contained
-syn match      tidyOption              "^split"                        contained
-syn match      tidyOption              "^tab-size"                     contained
-syn match      tidyOption              "^tidy-mark"                    contained
-syn match      tidyOption              "^uppercase-attributes"         contained
-syn match      tidyOption              "^uppercase-tags"               contained
-syn match      tidyOption              "^word-2000"                    contained
-syn match      tidyOption              "^wrap"                         contained
-syn match      tidyOption              "^wrap-asp"                     contained
-syn match      tidyOption              "^wrap-attributes"              contained
-syn match      tidyOption              "^wrap-jste"                    contained
-syn match      tidyOption              "^wrap-php"                     contained
-syn match      tidyOption              "^wrap-script-literals"         contained
-syn match      tidyOption              "^wrap-sections"                contained
-syn match      tidyOption              "^write-back"                   contained
-syn match      tidyOption              "^vertical-space"               contained
-syn match      tidyNewTagOption        "^new-blocklevel-tags"          contained
-syn match      tidyNewTagOption        "^new-empty-tags"               contained
-syn match      tidyNewTagOption        "^new-inline-tags"              contained
-syn match      tidyNewTagOption        "^new-pre-tags"                 contained
+syn match      tidyEncoding    "\<\%(ascii\|latin0\|latin1\|raw\|utf8\|iso2022\|mac\|utf16le\|utf16be\|utf16\|win1252\|ibm858\|big5\|shiftjis\)\>" contained
+syn match      tidyNewline     "\<\%(LF\|CRLF\|CR\)\>"
+syn match      tidyNumber      "\<\d\+\>" contained
+syn match      tidyRepeat      "\<\%(keep-first\|keep-last\)\>" contained
+syn region     tidyString      start=+"+ skip=+\\\\\|\\"+ end=+"+ contained oneline
+syn region     tidyString      start=+'+ skip=+\\\\\|\\'+ end=+'+ contained oneline
+syn cluster    tidyValue       contains=tidyBoolean,tidyDoctype,tidyEncoding,tidyNewline,tidyNumber,tidyRepeat,tidyString
 
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_tidy_syn_inits")
-  if version < 508
-    let did_tidy_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
+syn match tidyOption "^accessibility-check"            contained
+syn match tidyOption "^add-xml-decl"                   contained
+syn match tidyOption "^add-xml-pi"                     contained
+syn match tidyOption "^add-xml-space"                  contained
+syn match tidyOption "^alt-text"                       contained
+syn match tidyOption "^anchor-as-name"                 contained
+syn match tidyOption "^ascii-chars"                    contained
+syn match tidyOption "^assume-xml-procins"             contained
+syn match tidyOption "^bare"                           contained
+syn match tidyOption "^break-before-br"                        contained
+syn match tidyOption "^char-encoding"                  contained
+syn match tidyOption "^clean"                          contained
+syn match tidyOption "^css-prefix"                     contained
+syn match tidyOption "^decorate-inferred-ul"           contained
+syn match tidyOption "^doctype"                                contained
+syn match tidyOption "^doctype-mode"                   contained
+syn match tidyOption "^drop-empty-paras"               contained
+syn match tidyOption "^drop-font-tags"                 contained
+syn match tidyOption "^drop-proprietary-attributes"    contained
+syn match tidyOption "^enclose-block-text"             contained
+syn match tidyOption "^enclose-text"                   contained
+syn match tidyOption "^error-file"                     contained
+syn match tidyOption "^escape-cdata"                   contained
+syn match tidyOption "^fix-backslash"                  contained
+syn match tidyOption "^fix-bad-comments"               contained
+syn match tidyOption "^fix-uri"                                contained
+syn match tidyOption "^force-output"                   contained
+syn match tidyOption "^gnu-emacs"                      contained
+syn match tidyOption "^gnu-emacs-file"                 contained
+syn match tidyOption "^hide-comments"                  contained
+syn match tidyOption "^hide-endtags"                   contained
+syn match tidyOption "^indent"                         contained
+syn match tidyOption "^indent-attributes"              contained
+syn match tidyOption "^indent-cdata"                   contained
+syn match tidyOption "^indent-spaces"                  contained
+syn match tidyOption "^input-encoding"                 contained
+syn match tidyOption "^input-xml"                      contained
+syn match tidyOption "^join-classes"                   contained
+syn match tidyOption "^join-styles"                    contained
+syn match tidyOption "^keep-time"                      contained
+syn match tidyOption "^language"                       contained
+syn match tidyOption "^literal-attributes"             contained
+syn match tidyOption "^logical-emphasis"               contained
+syn match tidyOption "^lower-literals"                 contained
+syn match tidyOption "^markup"                         contained
+syn match tidyOption "^merge-divs"                     contained
+syn match tidyOption "^merge-spans"                    contained
+syn match tidyOption "^ncr"                            contained
+syn match tidyOption "^newline"                                contained
+syn match tidyOption "^numeric-entities"               contained
+syn match tidyOption "^output-bom"                     contained
+syn match tidyOption "^output-encoding"                        contained
+syn match tidyOption "^output-file"                    contained
+syn match tidyOption "^output-html"                    contained
+syn match tidyOption "^output-xhtml"                   contained
+syn match tidyOption "^output-xml"                     contained
+syn match tidyOption "^preserve-entities"              contained
+syn match tidyOption "^punctuation-wrap"               contained
+syn match tidyOption "^quiet"                          contained
+syn match tidyOption "^quote-ampersand"                        contained
+syn match tidyOption "^quote-marks"                    contained
+syn match tidyOption "^quote-nbsp"                     contained
+syn match tidyOption "^raw"                            contained
+syn match tidyOption "^repeated-attributes"            contained
+syn match tidyOption "^replace-color"                  contained
+syn match tidyOption "^show-body-only"                 contained
+syn match tidyOption "^show-errors"                    contained
+syn match tidyOption "^show-warnings"                  contained
+syn match tidyOption "^slide-style"                    contained
+syn match tidyOption "^sort-attributes"                        contained
+syn match tidyOption "^split"                          contained
+syn match tidyOption "^tab-size"                       contained
+syn match tidyOption "^tidy-mark"                      contained
+syn match tidyOption "^uppercase-attributes"           contained
+syn match tidyOption "^uppercase-tags"                 contained
+syn match tidyOption "^word-2000"                      contained
+syn match tidyOption "^wrap"                           contained
+syn match tidyOption "^wrap-asp"                       contained
+syn match tidyOption "^wrap-attributes"                        contained
+syn match tidyOption "^wrap-jste"                      contained
+syn match tidyOption "^wrap-php"                       contained
+syn match tidyOption "^wrap-script-literals"           contained
+syn match tidyOption "^wrap-sections"                  contained
+syn match tidyOption "^write-back"                     contained
+syn match tidyOption "^vertical-space"                 contained
 
-  HiLink tidyBoolean           Boolean
-  HiLink tidyComment           Comment
-  HiLink tidyDelimiter         Special
-  HiLink tidyDoctype           Constant
-  HiLink tidyEncoding          Constant
-  HiLink tidyNewline           Constant
-  HiLink tidyNewTagDelimiter   Special
-  HiLink tidyNewTagOption      Identifier
-  HiLink tidyNewTagValue       Constant
-  HiLink tidyNumber            Number
-  HiLink tidyOption            Identifier
-  HiLink tidyRepeat            Constant
-  HiLink tidyString            String
-  HiLink tidyTodo              Todo
+syn match tidyNewTagOption "^new-blocklevel-tags"      contained
+syn match tidyNewTagOption "^new-empty-tags"           contained
+syn match tidyNewTagOption "^new-inline-tags"          contained
+syn match tidyNewTagOption "^new-pre-tags"             contained
 
-  delcommand HiLink
-endif
+hi def link tidyBoolean                Boolean
+hi def link tidyComment                Comment
+hi def link tidyDelimiter      Special
+hi def link tidyDoctype                Constant
+hi def link tidyEncoding       Constant
+hi def link tidyNewline                Constant
+hi def link tidyNewTagDelimiter        Special
+hi def link tidyNewTagOption   Identifier
+hi def link tidyNewTagValue    Constant
+hi def link tidyNumber         Number
+hi def link tidyOption         Identifier
+hi def link tidyRepeat         Constant
+hi def link tidyString         String
+hi def link tidyTodo           Todo
 
 let b:current_syntax = "tidy"
 
diff --git a/runtime/syntax/treetop.vim b/runtime/syntax/treetop.vim
new file mode 100644 (file)
index 0000000..921c5be
--- /dev/null
@@ -0,0 +1,110 @@
+" Vim syntax file
+" Language:         Treetop
+" Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2011-03-14
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn keyword treetopTodo
+      \ contained
+      \ TODO
+      \ FIXME
+      \ XXX
+      \ NOTE
+
+syn match treetopComment
+                        \ '#.*'
+                        \ display
+                        \ contains=treetopTodo
+
+syn include @treetopRuby syntax/ruby.vim
+unlet b:current_syntax
+
+syn keyword treetopKeyword
+                         \ require
+                         \ end
+syn region  treetopKeyword
+                         \ matchgroup=treetopKeyword
+                         \ start='\<\%(grammar\|include\|module\)\>\ze\s'
+                         \ end='$'
+                         \ transparent
+                         \ oneline
+                         \ keepend
+                         \ contains=@treetopRuby
+syn keyword treetopKeyword
+                         \ rule
+                         \ nextgroup=treetopRuleName
+                         \ skipwhite skipnl
+
+syn match   treetopGrammarName
+                             \ '\u\w*'
+                             \ contained
+
+syn match   treetopRubyModuleName
+                                \ '\u\w*'
+                                \ contained
+
+syn match   treetopRuleName
+                          \ '\h\w*'
+                          \ contained
+
+syn region  treetopString
+                        \ matchgroup=treetopStringDelimiter
+                        \ start=+"+
+                        \ end=+"+
+syn region  treetopString
+                        \ matchgroup=treetopStringDelimiter
+                        \ start=+'+
+                        \ end=+'+
+
+syn region  treetopCharacterClass
+                                \ matchgroup=treetopCharacterClassDelimiter
+                                \ start=+\[+
+                                \ skip=+\\\]+
+                                \ end=+\]+
+
+syn region  treetopRubyBlock
+                           \ matchgroup=treetopRubyBlockDelimiter
+                           \ start=+{+
+                           \ end=+}+
+                           \ contains=@treetopRuby
+
+syn region  treetopSemanticPredicate
+                           \ matchgroup=treetopSemanticPredicateDelimiter
+                           \ start=+[!&]{+
+                           \ end=+}+
+                           \ contains=@treetopRuby
+
+syn region  treetopSubclassDeclaration
+                           \ matchgroup=treetopSubclassDeclarationDelimiter
+                           \ start=+<+
+                           \ end=+>+
+                           \ contains=@treetopRuby
+
+syn match   treetopEllipsis
+                          \ +''+
+
+hi def link treetopTodo                         Todo
+hi def link treetopComment                      Comment
+hi def link treetopKeyword                      Keyword
+hi def link treetopGrammarName                  Constant
+hi def link treetopRubyModuleName               Constant
+hi def link treetopRuleName                     Identifier
+hi def link treetopString                       String
+hi def link treetopStringDelimiter              treetopString
+hi def link treetopCharacterClass               treetopString
+hi def link treetopCharacterClassDelimiter      treetopCharacterClass
+hi def link treetopRubyBlockDelimiter           PreProc
+hi def link treetopSemanticPredicateDelimiter   PreProc
+hi def link treetopSubclassDeclarationDelimiter PreProc
+hi def link treetopEllipsis                     Special
+
+let b:current_syntax = 'treetop'
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
index 56f1755..887d6b7 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    Telix (Modem Comm Program) SALT Script
 " Maintainer:  Sean M. McKee <mckee@misslink.net>
-" Last Change: 2001 May 09
+" Last Change: 2012 Feb 03 by Thilo Six
 " Version Info: @(#)tsalt.vim  1.5     97/12/16 08:11:15
 
 " For version 5.x: Clear all syntax items
@@ -12,6 +12,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " turn case matching off
 syn case ignore
 
@@ -211,4 +214,6 @@ endif
 
 let b:current_syntax = "tsalt"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff --git a/runtime/syntax/tt2.vim b/runtime/syntax/tt2.vim
new file mode 100644 (file)
index 0000000..5321e27
--- /dev/null
@@ -0,0 +1,210 @@
+" Language:      TT2 (Perl Template Toolkit)
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Author:        Moriki, Atsushi <4woods+vim@gmail.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-21
+"
+" Instration:
+"   put tt2.vim and tt2html.vim in to your syntax diretory.
+"
+"   add below in your filetype.vim.
+"       au BufNewFile,BufRead *.tt2 setf tt2
+"           or
+"       au BufNewFile,BufRead *.tt2
+"           \ if ( getline(1) . getline(2) . getline(3) =~ '<\chtml' |
+"           \           && getline(1) . getline(2) . getline(3) !~ '<[%?]' ) |
+"           \   || getline(1) =~ '<!DOCTYPE HTML' |
+"           \   setf tt2html |
+"           \ else |
+"           \   setf tt2 |
+"           \ endif
+"
+"   define START_TAG, END_TAG
+"       "ASP"
+"       :let b:tt2_syn_tags = '<% %>'
+"       "PHP"
+"       :let b:tt2_syn_tags = '<? ?>'
+"       "TT2 and HTML"
+"       :let b:tt2_syn_tags = '\[% %] <!-- -->'
+"
+" Changes:
+"           0.1.3
+"               Changed fileformat from 'dos' to 'unix'
+"               Deleted 'echo' that print obstructive message
+"           0.1.2
+"               Added block comment syntax
+"               e.g. [%# COMMENT
+"                        COMMENT TOO %]
+"                    [%# IT'S SAFE %]  HERE IS OUTSIDE OF TT2 DIRECTIVE
+"                    [% # WRONG!! %]   HERE STILL BE COMMENT
+"           0.1.1
+"               Release
+"           0.1.0
+"               Internal
+"
+" License: follow Vim :help uganda
+"
+
+if !exists("b:tt2_syn_tags")
+    let b:tt2_syn_tags = '\[% %]'
+    "let b:tt2_syn_tags = '\[% %] \[\* \*]'
+endif
+
+if !exists("b:tt2_syn_inc_perl")
+    let b:tt2_syn_inc_perl = 1
+endif
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn case match
+
+syn cluster tt2_top_cluster contains=tt2_perlcode,tt2_tag_region
+
+" TT2 TAG Region
+if exists("b:tt2_syn_tags")
+
+    let s:str = b:tt2_syn_tags . ' '
+    let s:str = substitute(s:str,'^ \+','','g')
+    let s:str = substitute(s:str,' \+',' ','g')
+
+    while stridx(s:str,' ') > 0
+
+        let s:st = strpart(s:str,0,stridx(s:str,' '))
+        let s:str = substitute(s:str,'[^ ]* ','',"")
+
+        let s:ed = strpart(s:str,0,stridx(s:str,' '))
+        let s:str = substitute(s:str,'[^ ]* ','',"")
+
+        exec 'syn region  tt2_tag_region '.
+                    \ 'matchgroup=tt2_tag '.
+                    \ 'start=+\(' . s:st .'\)[-]\=+ '.
+                    \ 'end=+[-]\=\(' . s:ed . '\)+ '.
+                    \ 'contains=@tt2_statement_cluster keepend extend'
+
+        exec 'syn region  tt2_commentblock_region '.
+                    \ 'matchgroup=tt2_tag '.
+                    \ 'start=+\(' . s:st .'\)[-]\=\(#\)\@=+ '.
+                    \ 'end=+[-]\=\(' . s:ed . '\)+ '.
+                    \ 'keepend extend'
+
+        "Include Perl syntax when 'PERL' 'RAWPERL' block
+        if b:tt2_syn_inc_perl
+            syn include @Perl $VIMRUNTIME/syntax/perl.vim
+            exec 'syn region tt2_perlcode '.
+                        \ 'start=+\(\(RAW\)\=PERL\s*[-]\=' . s:ed . '\(\n\)\=\)\@<=+ ' .
+                        \ 'end=+' . s:st . '[-]\=\s*END+me=s-1 contains=@Perl keepend'
+        endif
+
+        "echo 'TAGS ' . s:st . ' ' . s:ed
+        unlet s:st
+        unlet s:ed
+    endwhile
+
+else
+
+    syn region  tt2_tag_region
+                \ matchgroup=tt2_tag
+                \ start=+\(\[%\)[-]\=+
+                \ end=+[-]\=%\]+
+                \ contains=@tt2_statement_cluster keepend extend
+
+    syn region  tt2_commentblock_region
+                \ matchgroup=tt2_tag
+                \ start=+\(\[%\)[-]\=#+
+                \ end=+[-]\=%\]+
+                \ keepend extend
+
+    "Include Perl syntax when 'PERL' 'RAWPERL' block
+    if b:tt2_syn_inc_perl
+        syn include @Perl $VIMRUNTIME/syntax/perl.vim
+        syn region tt2_perlcode
+                    \ start=+\(\(RAW\)\=PERL\s*[-]\=%]\(\n\)\=\)\@<=+
+                    \ end=+\[%[-]\=\s*END+me=s-1
+                    \ contains=@Perl keepend
+    endif
+endif
+
+" Directive
+syn keyword tt2_directive contained
+            \ GET CALL SET DEFAULT DEBUG
+            \ LAST NEXT BREAK STOP BLOCK
+            \ IF IN UNLESS ELSIF FOR FOREACH WHILE SWITCH CASE
+            \ USE PLUGIN MACRO META
+            \ TRY FINAL RETURN LAST
+            \ CLEAR TO STEP AND OR NOT MOD DIV
+            \ ELSE PERL RAWPERL END
+syn match   tt2_directive +|+ contained
+syn keyword tt2_directive contained nextgroup=tt2_string_q,tt2_string_qq,tt2_blockname skipwhite skipempty
+            \ INSERT INCLUDE PROCESS WRAPPER FILTER
+            \ THROW CATCH
+syn keyword tt2_directive contained nextgroup=tt2_def_tag skipwhite skipempty
+            \ TAGS
+
+syn match   tt2_def_tag "\S\+\s\+\S\+\|\<\w\+\>" contained
+
+syn match   tt2_variable  +\I\w*+                           contained
+syn match   tt2_operator  "[+*/%:?-]"                       contained
+syn match   tt2_operator  "\<\(mod\|div\|or\|and\|not\)\>"  contained
+syn match   tt2_operator  "[!=<>]=\=\|&&\|||"               contained
+syn match   tt2_operator  "\(\s\)\@<=_\(\s\)\@="            contained
+syn match   tt2_operator  "=>\|,"                           contained
+syn match   tt2_deref     "\([[:alnum:]_)\]}]\s*\)\@<=\."   contained
+syn match   tt2_comment   +#.*$+                            contained extend
+syn match   tt2_func      +\<\I\w*\(\s*(\)\@=+              contained nextgroup=tt2_bracket_r skipempty skipwhite
+"
+syn region  tt2_bracket_r  start=+(+ end=+)+                contained contains=@tt2_statement_cluster keepend extend
+syn region  tt2_bracket_b start=+\[+ end=+]+                contained contains=@tt2_statement_cluster keepend extend
+syn region  tt2_bracket_b start=+{+  end=+}+                contained contains=@tt2_statement_cluster keepend extend
+
+syn region  tt2_string_qq start=+"+ end=+"+ skip=+\\"+      contained contains=tt2_ivariable keepend extend
+syn region  tt2_string_q  start=+'+ end=+'+ skip=+\\'+      contained keepend extend
+
+syn match   tt2_ivariable  +\$\I\w*\>\(\.\I\w*\>\)*+        contained
+syn match   tt2_ivariable  +\${\I\w*\>\(\.\I\w*\>\)*}+      contained
+
+syn match   tt2_number    "\d\+"        contained
+syn match   tt2_number    "\d\+\.\d\+"  contained
+syn match   tt2_number    "0x\x\+"      contained
+syn match   tt2_number    "0\o\+"       contained
+
+syn match   tt2_blockname "\f\+"                       contained                        nextgroup=tt2_blockname_joint skipwhite skipempty
+syn match   tt2_blockname "$\w\+"                      contained contains=tt2_ivariable nextgroup=tt2_blockname_joint skipwhite skipempty
+syn region  tt2_blockname start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable nextgroup=tt2_blockname_joint keepend skipwhite skipempty
+syn region  tt2_blockname start=+'+ end=+'+ skip=+\\'+ contained                        nextgroup=tt2_blockname_joint keepend skipwhite skipempty
+syn match   tt2_blockname_joint "+"                    contained                        nextgroup=tt2_blockname skipwhite skipempty
+
+syn cluster tt2_statement_cluster contains=tt2_directive,tt2_variable,tt2_operator,tt2_string_q,tt2_string_qq,tt2_deref,tt2_comment,tt2_func,tt2_bracket_b,tt2_bracket_r,tt2_number
+
+" Synchronizing
+syn sync minlines=50
+
+hi def link tt2_tag         Type
+hi def link tt2_tag_region  Type
+hi def link tt2_commentblock_region Comment
+hi def link tt2_directive   Statement
+hi def link tt2_variable    Identifier
+hi def link tt2_ivariable   Identifier
+hi def link tt2_operator    Statement
+hi def link tt2_string_qq   String
+hi def link tt2_string_q    String
+hi def link tt2_blockname   String
+hi def link tt2_comment     Comment
+hi def link tt2_func        Function
+hi def link tt2_number      Number
+
+if exists("b:tt2_syn_tags")
+    unlet b:tt2_syn_tags
+endif
+
+let b:current_syntax = "tt2"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:ts=4:sw=4
diff --git a/runtime/syntax/tt2html.vim b/runtime/syntax/tt2html.vim
new file mode 100644 (file)
index 0000000..ac5744f
--- /dev/null
@@ -0,0 +1,20 @@
+" Language:      TT2 embedded with HTML
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Author:        Moriki, Atsushi <4woods+vim@gmail.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-21
+
+if exists("b:current_syntax")
+    finish
+endif
+
+runtime! syntax/html.vim
+unlet b:current_syntax
+
+runtime! syntax/tt2.vim
+unlet b:current_syntax
+
+syn cluster htmlPreProc add=@tt2_top_cluster
+
+let b:current_syntax = "tt2html"
diff --git a/runtime/syntax/tt2js.vim b/runtime/syntax/tt2js.vim
new file mode 100644 (file)
index 0000000..350df57
--- /dev/null
@@ -0,0 +1,20 @@
+" Language:      TT2 embedded with Javascript
+" Maintainer:    Andy Lester <andy@petdance.com>
+" Author:        Yates, Peter <pd.yates@gmail.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-07-21
+
+if exists("b:current_syntax")
+    finish
+endif
+
+runtime! syntax/javascript.vim
+unlet b:current_syntax
+
+runtime! syntax/tt2.vim
+unlet b:current_syntax
+
+syn cluster javascriptPreProc add=@tt2_top_cluster
+
+let b:current_syntax = "tt2js"
index a439984..b5421bc 100644 (file)
@@ -1,10 +1,9 @@
 " Vim syntax file
 " Language:    Motif UIL (User Interface Language)
 " Maintainer:  Thomas Koehler <jean-luc@picard.franken.de>
-" Last Change: 2009 Dec 04
+" Last Change: 2013 May 23
 " URL:         http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/uil.vim
 
-
 " Quit when a syntax file was already loaded
 if version < 600
    syntax clear
@@ -21,22 +20,22 @@ syn keyword uilType user_defined    xbitmapfile
 
 syn keyword uilTodo contained  TODO
 
-" String and Character contstants
+" String and Character constants
 " Highlight special characters (those which have a backslash) differently
 syn match   uilSpecial contained "\\\d\d\d\|\\."
-syn region  uilString          start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=uilSpecial
+syn region  uilString          start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=@Spell,uilSpecial
 syn match   uilCharacter       "'[^\\]'"
-syn region  uilString          start=+'+  skip=+\\\\\|\\"+  end=+'+  contains=uilSpecial
+syn region  uilString          start=+'+  skip=+\\\\\|\\'+  end=+'+  contains=@Spell,uilSpecial
 syn match   uilSpecialCharacter        "'\\.'"
-syn match   uilSpecialStatement        "Xm[^ =(){}]*"
+syn match   uilSpecialStatement        "Xm[^    =(){}:;]*"
 syn match   uilSpecialFunction "MrmNcreateCallback"
-syn match   uilRessource       "XmN[^ =(){}]*"
+syn match   uilRessource       "XmN[^   =(){}:;]*"
 
 syn match  uilNumber           "-\=\<\d*\.\=\d\+\(e\=f\=\|[uU]\=[lL]\=\)\>"
-syn match  uilNumber           "0[xX][0-9a-fA-F]\+\>"
+syn match  uilNumber           "0[xX]\x\+\>"
 
-syn region uilComment          start="/\*"  end="\*/" contains=uilTodo
-syn match  uilComment          "!.*" contains=uilTodo
+syn region uilComment          start="/\*"  end="\*/" contains=@Spell,uilTodo
+syn match  uilComment          "!.*" contains=@Spell,uilTodo
 syn match  uilCommentError     "\*/"
 
 syn region uilPreCondit                start="^#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=uilComment,uilString,uilCharacter,uilNumber,uilCommentError
diff --git a/runtime/syntax/upstart.vim b/runtime/syntax/upstart.vim
new file mode 100644 (file)
index 0000000..b3f2b9e
--- /dev/null
@@ -0,0 +1,112 @@
+" Vim syntax file
+" Language:    Upstart job files
+" Maintainer:  Michael Biebl <biebl@debian.org>
+"              James Hunt <james.hunt@ubuntu.com>
+" Last Change: 2012 Jan 16
+" License:     The Vim license
+" Version:     0.4
+" Remark:      Syntax highlighting for Upstart (init(8)) job files.
+"
+" It is inspired by the initng syntax file and includes sh.vim to do the
+" highlighting of script blocks.
+
+if version < 600
+       syntax clear
+elseif exists("b:current_syntax")
+       finish
+endif
+
+let is_bash = 1
+syn include @Shell syntax/sh.vim
+
+syn case match
+
+" avoid need to use 'match' for most events
+setlocal iskeyword+=-
+
+syn match upstartComment /#.*$/ contains=upstartTodo
+syn keyword upstartTodo TODO FIXME contained
+
+syn region upstartString start=/"/ end=/"/ skip=/\\"/
+
+syn region upstartScript matchgroup=upstartStatement start="script" end="end script" contains=@upstartShellCluster
+
+syn cluster upstartShellCluster contains=@Shell
+
+" one argument
+syn keyword upstartStatement description author version instance expect
+syn keyword upstartStatement pid kill normal console env exit export
+syn keyword upstartStatement umask nice oom chroot chdir exec
+
+" two arguments
+syn keyword upstartStatement limit
+
+" one or more arguments (events)
+syn keyword upstartStatement emits
+
+syn keyword upstartStatement on start stop
+
+" flag, no parameter
+syn keyword upstartStatement respawn service instance manual debug task
+
+" prefix for exec or script 
+syn keyword upstartOption pre-start post-start pre-stop post-stop
+
+" option for kill
+syn keyword upstartOption timeout
+" option for oom
+syn keyword upstartOption never
+" options for console
+syn keyword upstartOption output owner
+" options for expect
+syn keyword upstartOption fork daemon
+" options for limit
+syn keyword upstartOption unlimited
+
+" 'options' for start/stop on
+syn keyword upstartOption and or
+
+" Upstart itself and associated utilities
+syn keyword upstartEvent runlevel
+syn keyword upstartEvent started
+syn keyword upstartEvent starting
+syn keyword upstartEvent startup
+syn keyword upstartEvent stopped
+syn keyword upstartEvent stopping
+syn keyword upstartEvent control-alt-delete
+syn keyword upstartEvent keyboard-request
+syn keyword upstartEvent power-status-changed
+
+" D-Bus
+syn keyword upstartEvent dbus-activation
+
+" Display Manager (ie gdm)
+syn keyword upstartEvent desktop-session-start
+syn keyword upstartEvent login-session-start
+
+" mountall
+syn keyword upstartEvent all-swaps
+syn keyword upstartEvent filesystem
+syn keyword upstartEvent mounted
+syn keyword upstartEvent mounting
+syn keyword upstartEvent local-filesystems
+syn keyword upstartEvent remote-filesystems
+syn keyword upstartEvent virtual-filesystems
+
+" SysV umountnfs.sh
+syn keyword upstartEvent mounted-remote-filesystems
+
+" upstart-udev-bridge and ifup/down
+syn match   upstartEvent /\<\i\{-1,}-device-\(added\|removed\|up\|down\)/
+
+" upstart-socket-bridge
+syn keyword upstartEvent socket
+
+hi def link upstartComment   Comment
+hi def link upstartTodo             Todo
+hi def link upstartString    String
+hi def link upstartStatement Statement
+hi def link upstartOption    Type
+hi def link upstartEvent     Define
+
+let b:current_syntax = "upstart"
diff --git a/runtime/syntax/upstreamdat.vim b/runtime/syntax/upstreamdat.vim
new file mode 100644 (file)
index 0000000..7be8067
--- /dev/null
@@ -0,0 +1,296 @@
+" Vim syntax file
+" Language:            Innovation Data Processing upstream.dat file
+" Maintainer:          Rob Owens <rowens@fdrinnovation.com>
+" Latest Revision:     2013-06-17
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+syn keyword upstreamdat_Parameter ACCEPTPCREMOTE 
+syn keyword upstreamdat_Parameter ACCEPTREMOTE 
+syn keyword upstreamdat_Parameter ACTION 
+syn keyword upstreamdat_Parameter ACTIVATEONENTRY 
+syn keyword upstreamdat_Parameter ARCHIVEBIT 
+syn keyword upstreamdat_Parameter ARCHIVEBIT 
+syn keyword upstreamdat_Parameter ASCTOEBC 
+syn keyword upstreamdat_Parameter ASRBACKUP 
+syn keyword upstreamdat_Parameter ATTENDED 
+syn keyword upstreamdat_Parameter AUTHORITATIVE 
+syn keyword upstreamdat_Parameter AUTHORITATIVERESTORE 
+syn keyword upstreamdat_Parameter AUTHORITATIVERESTORE 
+syn keyword upstreamdat_Parameter BACKUPPROFILE 
+syn keyword upstreamdat_Parameter BACKUPPROFILE2 
+syn keyword upstreamdat_Parameter BACKUPREPARSEFILES 
+syn keyword upstreamdat_Parameter BACKUPREPARSEFILES 
+syn keyword upstreamdat_Parameter BACKUPVERIFY 
+syn keyword upstreamdat_Parameter BLANKTRUNC 
+syn keyword upstreamdat_Parameter CALCDASDSIZE 
+syn keyword upstreamdat_Parameter CHANGEDIRATTRIBS 
+syn keyword upstreamdat_Parameter CHANGEDIRATTRIBS 
+syn keyword upstreamdat_Parameter COMPRESSLEVEL 
+syn keyword upstreamdat_Parameter CONTROLFILE 
+syn keyword upstreamdat_Parameter DASDOVERRIDE 
+syn keyword upstreamdat_Parameter DATELIMIT 
+syn keyword upstreamdat_Parameter DATELIMIT 
+syn keyword upstreamdat_Parameter DAYSOLD 
+syn keyword upstreamdat_Parameter DAYSOLD 
+syn keyword upstreamdat_Parameter DELETED 
+syn keyword upstreamdat_Parameter DELETED 
+syn keyword upstreamdat_Parameter DELETEPROMPTS 
+syn keyword upstreamdat_Parameter DELETEPROMPTS 
+syn keyword upstreamdat_Parameter DESTINATION 
+syn keyword upstreamdat_Parameter DESTINATION 
+syn keyword upstreamdat_Parameter DIRDELETE 
+syn keyword upstreamdat_Parameter DIRECTORVMC 
+syn keyword upstreamdat_Parameter DIRONLYRESTOREOK 
+syn keyword upstreamdat_Parameter DIRSONLY 
+syn keyword upstreamdat_Parameter DIRSONLY 
+syn keyword upstreamdat_Parameter DISASTERRECOVERY 
+syn keyword upstreamdat_Parameter DISPLAY 
+syn keyword upstreamdat_Parameter DRIVEALIAS 
+syn keyword upstreamdat_Parameter DRIVEALIAS 
+syn keyword upstreamdat_Parameter DUALCOPY 
+syn keyword upstreamdat_Parameter DUPDAYS 
+syn keyword upstreamdat_Parameter DUPLICATE 
+syn keyword upstreamdat_Parameter EBCTOASC 
+syn keyword upstreamdat_Parameter ENCRYPT 
+syn keyword upstreamdat_Parameter ENCRYPTLEVEL 
+syn keyword upstreamdat_Parameter EXCLUDELISTNAME 
+syn keyword upstreamdat_Parameter FAILBACKUPONERROR 
+syn keyword upstreamdat_Parameter FAILBACKUPONERROR 
+syn keyword upstreamdat_Parameter FAILIFNOFILES 
+syn keyword upstreamdat_Parameter FAILIFNOFILES 
+syn keyword upstreamdat_Parameter FAILIFSKIP 
+syn keyword upstreamdat_Parameter FAILJOB 
+syn keyword upstreamdat_Parameter FAILRESTOREONERROR 
+syn keyword upstreamdat_Parameter FAILRESTOREONERROR 
+syn keyword upstreamdat_Parameter FILEDATE 
+syn keyword upstreamdat_Parameter FILEDATE 
+syn keyword upstreamdat_Parameter FILEDELETE 
+syn keyword upstreamdat_Parameter FILEDELETE 
+syn keyword upstreamdat_Parameter FILES 
+syn keyword upstreamdat_Parameter FILES 
+syn keyword upstreamdat_Parameter FILESOPENFORUPDAT 
+syn keyword upstreamdat_Parameter FILESOPENFORUPDAT 
+syn keyword upstreamdat_Parameter FILETRANSFER 
+syn keyword upstreamdat_Parameter GETREMOTEFILES 
+syn keyword upstreamdat_Parameter HARDLINKDB 
+syn keyword upstreamdat_Parameter HARDLINKS 
+syn keyword upstreamdat_Parameter HARDLINKS 
+syn keyword upstreamdat_Parameter HIDDENFILES 
+syn keyword upstreamdat_Parameter HIDDENFILES 
+syn keyword upstreamdat_Parameter HOLDTAPE 
+syn keyword upstreamdat_Parameter HOLDUSERDIRS 
+syn keyword upstreamdat_Parameter HOSTFILENAME 
+syn keyword upstreamdat_Parameter HOSTRECORD 
+syn keyword upstreamdat_Parameter HOSTSORT 
+syn keyword upstreamdat_Parameter IGNOREPLUGINSFORRESTORE 
+syn keyword upstreamdat_Parameter INCRDB 
+syn keyword upstreamdat_Parameter INCRDBARCHIVEBIT 
+syn keyword upstreamdat_Parameter INCRDBDELETEDFILES 
+syn keyword upstreamdat_Parameter INCREMENTAL 
+syn keyword upstreamdat_Parameter INCREMENTAL 
+syn keyword upstreamdat_Parameter INQOPTIONS 
+syn keyword upstreamdat_Parameter INSTALLWIN2KAGENT 
+syn keyword upstreamdat_Parameter INSTALLWIN2KAGENT 
+syn keyword upstreamdat_Parameter JOBOPTIONS 
+syn keyword upstreamdat_Parameter JOBRETURNCODEMAP 
+syn keyword upstreamdat_Parameter JOBWAITTIMELIMIT 
+syn keyword upstreamdat_Parameter KEEPALIVE 
+syn keyword upstreamdat_Parameter LANINTERFACE 
+syn keyword upstreamdat_Parameter LANWSNAME 
+syn keyword upstreamdat_Parameter LANWSPASSWORD 
+syn keyword upstreamdat_Parameter LASTACCESS 
+syn keyword upstreamdat_Parameter LASTACCESS 
+syn keyword upstreamdat_Parameter LATESTDATE 
+syn keyword upstreamdat_Parameter LATESTDATE 
+syn keyword upstreamdat_Parameter LATESTTIME 
+syn keyword upstreamdat_Parameter LATESTTIME 
+syn keyword upstreamdat_Parameter LATESTVERSION 
+syn keyword upstreamdat_Parameter LINEBLOCK 
+syn keyword upstreamdat_Parameter LINETRUNC 
+syn keyword upstreamdat_Parameter LISTENFORREMOTE 
+syn keyword upstreamdat_Parameter LOCALBACKUP 
+syn keyword upstreamdat_Parameter LOCALBACKUPDIR 
+syn keyword upstreamdat_Parameter LOCALBACKUPMAX 
+syn keyword upstreamdat_Parameter LOCALBACKUPMAXFILESIZE 
+syn keyword upstreamdat_Parameter LOCALBACKUPMAXSIZE 
+syn keyword upstreamdat_Parameter LOCALEXCLUDEFILE 
+syn keyword upstreamdat_Parameter LOCALPARAMETERS 
+syn keyword upstreamdat_Parameter LOCALPASSWORD 
+syn keyword upstreamdat_Parameter LOCALRESTORE 
+syn keyword upstreamdat_Parameter LOCALUSER 
+syn keyword upstreamdat_Parameter LOFS 
+syn keyword upstreamdat_Parameter LOGNONFATAL 
+syn keyword upstreamdat_Parameter MAXBACKUPFILESFAIL 
+syn keyword upstreamdat_Parameter MAXBACKUPTIME 
+syn keyword upstreamdat_Parameter MAXDUPS 
+syn keyword upstreamdat_Parameter MAXFILENAMESIZE 
+syn keyword upstreamdat_Parameter MAXKFILESIZE 
+syn keyword upstreamdat_Parameter MAXLOGDAYS 
+syn keyword upstreamdat_Parameter MAXRESTOREFILESFAIL 
+syn keyword upstreamdat_Parameter MAXRESTORETIME 
+syn keyword upstreamdat_Parameter MAXRETRY 
+syn keyword upstreamdat_Parameter MAXRPTDAYS 
+syn keyword upstreamdat_Parameter MERGE 
+syn keyword upstreamdat_Parameter MIGRBITS 
+syn keyword upstreamdat_Parameter MIGRBITS 
+syn keyword upstreamdat_Parameter MINCOMPRESSSIZE 
+syn keyword upstreamdat_Parameter MINIMIZE 
+syn keyword upstreamdat_Parameter MODIFYFILE 
+syn keyword upstreamdat_Parameter MOUNTPOINTS 
+syn keyword upstreamdat_Parameter MOUNTPOINTS 
+syn keyword upstreamdat_Parameter NDS 
+syn keyword upstreamdat_Parameter NDS 
+syn keyword upstreamdat_Parameter NEWFILECOMPARE 
+syn keyword upstreamdat_Parameter NFSBELOW 
+syn keyword upstreamdat_Parameter NODATAOK 
+syn keyword upstreamdat_Parameter NODIRFORINCREMENTAL 
+syn keyword upstreamdat_Parameter NODIRFORINCREMENTAL 
+syn keyword upstreamdat_Parameter NONFILEDATABITMAP 
+syn keyword upstreamdat_Parameter NONFILEDATABITMAP 
+syn keyword upstreamdat_Parameter NOPOINTRESTORE 
+syn keyword upstreamdat_Parameter NOSPECINHERITANCE 
+syn keyword upstreamdat_Parameter NOTIFYEVENTS 
+syn keyword upstreamdat_Parameter NOTIFYFAILUREATTACHMENT 
+syn keyword upstreamdat_Parameter NOTIFYSUCCESSATTACHMENT 
+syn keyword upstreamdat_Parameter NOTIFYTARGETS 
+syn keyword upstreamdat_Parameter NOUIDGIDNAMES 
+syn keyword upstreamdat_Parameter NOUIDGIDNAMES 
+syn keyword upstreamdat_Parameter NOVELLMIGRATE 
+syn keyword upstreamdat_Parameter NOVELLMIGRATE 
+syn keyword upstreamdat_Parameter NOVELLMIGRATEADDEXT 
+syn keyword upstreamdat_Parameter NOVELLMIGRATEADDEXT 
+syn keyword upstreamdat_Parameter NOVELLPROFILE 
+syn keyword upstreamdat_Parameter NOVELLRECALL 
+syn keyword upstreamdat_Parameter NTFSADDPERMISSION 
+syn keyword upstreamdat_Parameter NTFSADDPERMISSION 
+syn keyword upstreamdat_Parameter NTREGRESTORE 
+syn keyword upstreamdat_Parameter OSTYPE 
+syn keyword upstreamdat_Parameter OUTPORT 
+syn keyword upstreamdat_Parameter PACKFLUSHAFTERFILE 
+syn keyword upstreamdat_Parameter PACKRECSIZE 
+syn keyword upstreamdat_Parameter PARAMETER 
+syn keyword upstreamdat_Parameter PASSWORD 
+syn keyword upstreamdat_Parameter PATHNAME 
+syn keyword upstreamdat_Parameter PATHNAME 
+syn keyword upstreamdat_Parameter PERFORMBITMAP 
+syn keyword upstreamdat_Parameter PERFORMNUMRECORDS 
+syn keyword upstreamdat_Parameter PERFORMRECORDSIZE 
+syn keyword upstreamdat_Parameter PLUGIN 
+syn keyword upstreamdat_Parameter PLUGIN 
+syn keyword upstreamdat_Parameter PLUGINPARAMETERS 
+syn keyword upstreamdat_Parameter PLUGINPARAMETERS 
+syn keyword upstreamdat_Parameter POSTJOB 
+syn keyword upstreamdat_Parameter PREJOB 
+syn keyword upstreamdat_Parameter PRTYCLASS 
+syn keyword upstreamdat_Parameter PRTYLEVEL 
+syn keyword upstreamdat_Parameter RECALLCLEANUP 
+syn keyword upstreamdat_Parameter RECALLOFFLINEFILES 
+syn keyword upstreamdat_Parameter RECALLOFFLINEFILES 
+syn keyword upstreamdat_Parameter RECORDSIZE 
+syn keyword upstreamdat_Parameter REMOTEADDR 
+syn keyword upstreamdat_Parameter REMOTEAPPLPREF 
+syn keyword upstreamdat_Parameter REMOTEAPPLRETRY 
+syn keyword upstreamdat_Parameter REMOTECONNECTTYPE 
+syn keyword upstreamdat_Parameter REMOTEFLAGS 
+syn keyword upstreamdat_Parameter REMOTEIPADAPTER 
+syn keyword upstreamdat_Parameter REMOTELOCALPARAMETERS 
+syn keyword upstreamdat_Parameter REMOTELOGMODE 
+syn keyword upstreamdat_Parameter REMOTELUNAME 
+syn keyword upstreamdat_Parameter REMOTEMAXRETRIES 
+syn keyword upstreamdat_Parameter REMOTEMODENAME 
+syn keyword upstreamdat_Parameter REMOTEPARAMETERFILE 
+syn keyword upstreamdat_Parameter REMOTEPORT 
+syn keyword upstreamdat_Parameter REMOTEREQUEST 
+syn keyword upstreamdat_Parameter REMOTERESTART 
+syn keyword upstreamdat_Parameter REMOTEROUTE 
+syn keyword upstreamdat_Parameter REMOTETARGETNAME 
+syn keyword upstreamdat_Parameter REMOTETCP 
+syn keyword upstreamdat_Parameter REMOTETIMEOUT 
+syn keyword upstreamdat_Parameter REMOTETMAXRETRY 
+syn keyword upstreamdat_Parameter REMOTETPN 
+syn keyword upstreamdat_Parameter REMOTEUSAPPL 
+syn keyword upstreamdat_Parameter REMOTEVERIFY 
+syn keyword upstreamdat_Parameter REMOTEWTOCOMP 
+syn keyword upstreamdat_Parameter REPORTNAME 
+syn keyword upstreamdat_Parameter REPORTOPTIONS 
+syn keyword upstreamdat_Parameter RESTARTLASTFILE 
+syn keyword upstreamdat_Parameter RESTART 
+syn keyword upstreamdat_Parameter RESTARTTYPE 
+syn keyword upstreamdat_Parameter RESTARTVERSIONDATE 
+syn keyword upstreamdat_Parameter RESTOREARCHIVEBIT 
+syn keyword upstreamdat_Parameter RESTORECHECKPOINT 
+syn keyword upstreamdat_Parameter RESTOREDATELIMIT 
+syn keyword upstreamdat_Parameter RESTOREDATELIMIT 
+syn keyword upstreamdat_Parameter RESTOREFILEFAIL 
+syn keyword upstreamdat_Parameter RESTOREMOUNTPOINTS 
+syn keyword upstreamdat_Parameter RESTOREMOUNTPOINTS 
+syn keyword upstreamdat_Parameter RESTORESEGMENTS 
+syn keyword upstreamdat_Parameter RESTORESEGMENTS 
+syn keyword upstreamdat_Parameter RESTORETODIFFFS 
+syn keyword upstreamdat_Parameter RETAIN 
+syn keyword upstreamdat_Parameter RETAIN 
+syn keyword upstreamdat_Parameter ROOTENTRY 
+syn keyword upstreamdat_Parameter ROOTENTRY 
+syn keyword upstreamdat_Parameter SAN 
+syn keyword upstreamdat_Parameter SCHEDULENAME 
+syn keyword upstreamdat_Parameter SEGMENTEDFILESIZE 
+syn keyword upstreamdat_Parameter SEGMENTEDFILESIZE 
+syn keyword upstreamdat_Parameter SEGMENTSIZE 
+syn keyword upstreamdat_Parameter SEGMENTSIZE 
+syn keyword upstreamdat_Parameter SENDHOSTDETAILS 
+syn keyword upstreamdat_Parameter SINGLEFS 
+syn keyword upstreamdat_Parameter SIZETRC 
+syn keyword upstreamdat_Parameter SKIP 
+syn keyword upstreamdat_Parameter SKIPBACKUPSCAN 
+syn keyword upstreamdat_Parameter SKIPOLD 
+syn keyword upstreamdat_Parameter SKIPOLD 
+syn keyword upstreamdat_Parameter SMSTARGETSERVICENAME 
+syn keyword upstreamdat_Parameter SMSTSA 
+syn keyword upstreamdat_Parameter SOLO 
+syn keyword upstreamdat_Parameter SORTBACKUP 
+syn keyword upstreamdat_Parameter SOSDISK 
+syn keyword upstreamdat_Parameter SOSDISK 
+syn keyword upstreamdat_Parameter SOSTIMESTAMP 
+syn keyword upstreamdat_Parameter SOSTIMESTAMP 
+syn keyword upstreamdat_Parameter SOSTIMESTAMPPATH 
+syn keyword upstreamdat_Parameter SOSTIMESTAMPPATH 
+syn keyword upstreamdat_Parameter SPECNUMBER 
+syn keyword upstreamdat_Parameter SPECNUMBER 
+syn keyword upstreamdat_Parameter SPECTYPE 
+syn keyword upstreamdat_Parameter SPECTYPE 
+syn keyword upstreamdat_Parameter STARTTIME 
+syn keyword upstreamdat_Parameter STORAGETYPE 
+syn keyword upstreamdat_Parameter SUBDIRECTORIES 
+syn keyword upstreamdat_Parameter SUBDIRECTORIES 
+syn keyword upstreamdat_Parameter SWITCHTOTAPEMB 
+syn keyword upstreamdat_Parameter TCPADDRESS 
+syn keyword upstreamdat_Parameter TCPTIMEOUT 
+syn keyword upstreamdat_Parameter TIMEOVERRIDE 
+syn keyword upstreamdat_Parameter TRACE 
+syn keyword upstreamdat_Parameter TRANSLATE 
+syn keyword upstreamdat_Parameter ULTRACOMP 
+syn keyword upstreamdat_Parameter ULTREG 
+syn keyword upstreamdat_Parameter ULTUPD 
+syn keyword upstreamdat_Parameter UNCMACHINEALIAS 
+syn keyword upstreamdat_Parameter UNCMACHINEALIAS 
+syn keyword upstreamdat_Parameter USEALEBRA 
+syn keyword upstreamdat_Parameter USECONTROLFILE 
+syn keyword upstreamdat_Parameter USEGID 
+syn keyword upstreamdat_Parameter USERID 
+syn keyword upstreamdat_Parameter USEUID 
+syn keyword upstreamdat_Parameter USNOUIDGIDERRORS 
+syn keyword upstreamdat_Parameter UTF8 
+syn keyword upstreamdat_Parameter VAULTNUMBER 
+syn keyword upstreamdat_Parameter VERSIONDATE 
+syn keyword upstreamdat_Parameter WRITESPARSE 
+syn keyword upstreamdat_Parameter XFERECORDSIZE 
+syn keyword upstreamdat_Parameter XFERRECSEP 
+syn keyword upstreamdat_Parameter XFERRECUSECR 
+
+hi def link upstreamdat_Parameter Type
+
+let b:current_syntax = "upstreamdat"
diff --git a/runtime/syntax/upstreaminstalllog.vim b/runtime/syntax/upstreaminstalllog.vim
new file mode 100644 (file)
index 0000000..fb23fdc
--- /dev/null
@@ -0,0 +1,27 @@
+" Vim syntax file
+" Language:             Innovation Data Processing UPSTREAMInstall.log file
+" Maintainer:           Rob Owens <rowens@fdrinnovation.com>
+" Latest Revision:      2013-06-17
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" Date:
+syn match upstreaminstalllog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/
+" Msg Types:
+syn match upstreaminstalllog_MsgD /Msg #MSI\d\{4,5}D/
+syn match upstreaminstalllog_MsgE /Msg #MSI\d\{4,5}E/
+syn match upstreaminstalllog_MsgI /Msg #MSI\d\{4,5}I/
+syn match upstreaminstalllog_MsgW /Msg #MSI\d\{4,5}W/
+" IP Address:
+syn match upstreaminstalllog_IPaddr / \d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
+
+hi def link upstreaminstalllog_Date    Underlined
+hi def link upstreaminstalllog_MsgD    Type
+hi def link upstreaminstalllog_MsgE    Error
+hi def link upstreaminstalllog_MsgW    Constant
+hi def link upstreaminstalllog_IPaddr  Identifier
+
+let b:current_syntax = "upstreaminstalllog"
diff --git a/runtime/syntax/upstreamlog.vim b/runtime/syntax/upstreamlog.vim
new file mode 100644 (file)
index 0000000..1161ecf
--- /dev/null
@@ -0,0 +1,53 @@
+" Vim syntax file
+" Language:             Innovation Data Processing upstream.log file
+" Maintainer:           Rob Owens <rowens@fdrinnovation.com>
+" Latest Revision:      2013-07-26
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" Date:
+syn match upstreamlog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/
+" Msg Types:
+syn match upstreamlog_MsgD /Msg #\(Agt\|PC\|Srv\)\d\{4,5}D/ nextgroup=upstreamlog_Process skipwhite
+syn match upstreamlog_MsgE /Msg #\(Agt\|PC\|Srv\)\d\{4,5}E/ nextgroup=upstreamlog_Process skipwhite
+syn match upstreamlog_MsgI /Msg #\(Agt\|PC\|Srv\)\d\{4,5}I/ nextgroup=upstreamlog_Process skipwhite
+syn match upstreamlog_MsgW /Msg #\(Agt\|PC\|Srv\)\d\{4,5}W/ nextgroup=upstreamlog_Process skipwhite
+" Processes:
+syn region upstreamlog_Process start="(" end=")" contained
+" IP Address:
+syn match upstreamlog_IPaddr /\( \|(\)\zs\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
+" Profile:
+syn match upstreamlog_Profile /Using default configuration for profile \zs\S\{1,8}\ze/
+syn match upstreamlog_Profile /Now running profile \zs\S\{1,8}\ze/
+syn match upstreamlog_Profile /in profile set \zs\S\{1,8}\ze/
+syn match upstreamlog_Profile /Migrate disk backup from profile \zs\S\{1,8}\ze/
+syn match upstreamlog_Profile /Profileset=\zs\S\{1,8}\ze,/
+syn match upstreamlog_Profile /Vault \(disk\|tape\) backup to vault \d\{1,4} from profile \zs\S\{1,8}\ze/
+syn match upstreamlog_Profile /Profile name \zs\"\S\{1,8}\"/
+syn match upstreamlog_Profile / Profile: \zs\S\{1,8}/
+syn match upstreamlog_Profile /  Profile: \zs\S\{1,8}\ze, /
+syn match upstreamlog_Profile /, profile: \zs\S\{1,8}\ze,/
+syn match upstreamlog_Profile /found Profile: \zs\S\{1,8}\ze,/
+syn match upstreamlog_Profile /Backup Profile: \zs\ze Version date/
+syn match upstreamlog_Profile /Full of \zs\S\{1,8}\ze$/
+syn match upstreamlog_Profile /Incr. of \zs\S\{1,8}\ze$/
+syn match upstreamlog_Profile /Profile=\zs\S\{1,8}\ze,/
+" Target:
+syn region upstreamlog_Target start="Computer: \zs" end="\ze[\]\)]" 
+syn region upstreamlog_Target start="Computer name \zs" end="\ze," 
+syn region upstreamlog_Target start="request to registered name \zs" end=" "
+
+
+hi def link upstreamlog_Date   Underlined
+hi def link upstreamlog_MsgD   Type
+hi def link upstreamlog_MsgE   Error
+hi def link upstreamlog_MsgW   Constant
+hi def link upstreamlog_Process        Statement
+hi def link upstreamlog_IPaddr Identifier
+hi def link upstreamlog_Profile        Identifier
+hi def link upstreamlog_Target Identifier
+
+let b:current_syntax = "upstreamlog"
diff --git a/runtime/syntax/usserverlog.vim b/runtime/syntax/usserverlog.vim
new file mode 100644 (file)
index 0000000..7cd50b3
--- /dev/null
@@ -0,0 +1,59 @@
+" Vim syntax file
+" Language:             Innovation Data Processing usserver.log file
+" Maintainer:           Rob Owens <rowens@fdrinnovation.com>
+" Latest Revision:      2013-07-26
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" Date:
+syn match usserverlog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/
+" Msg Types:
+syn match usserverlog_MsgD /Msg #\(Agt\|PC\|Srv\)\d\{4,5}D/ nextgroup=usserverlog_Process skipwhite
+syn match usserverlog_MsgE /Msg #\(Agt\|PC\|Srv\)\d\{4,5}E/ nextgroup=usserverlog_Process skipwhite
+syn match usserverlog_MsgI /Msg #\(Agt\|PC\|Srv\)\d\{4,5}I/ nextgroup=usserverlog_Process skipwhite
+syn match usserverlog_MsgW /Msg #\(Agt\|PC\|Srv\)\d\{4,5}W/ nextgroup=usserverlog_Process skipwhite
+" Processes:
+syn region usserverlog_Process start="(" end=")" contained
+" IP Address:
+syn match usserverlog_IPaddr /\( \|(\)\zs\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
+" Profile:
+syn match usserverlog_Profile /Using default configuration for profile \zs\S\{1,8}\ze/
+syn match usserverlog_Profile /Now running profile \zs\S\{1,8}\ze/
+syn match usserverlog_Profile /in profile set \zs\S\{1,8}\ze/
+syn match usserverlog_Profile /Migrate disk backup from profile \zs\S\{1,8}\ze/
+syn match usserverlog_Profile /Using profile prefix for profile \zs\S\{1,8}\ze/
+syn match usserverlog_Profile /Add\/update profile \zs\S\{1,8}\ze/
+syn match usserverlog_Profile /Profileset=\zs\S\{1,8}\ze,/
+syn match usserverlog_Profile /profileset=\zs\S\{1,8}\ze/
+syn match usserverlog_Profile /Vault \(disk\|tape\) backup to vault \d\{1,4} from profile \zs\S\{1,8}\ze/
+syn match usserverlog_Profile /Profile name \zs\"\S\{1,8}\"/
+syn match usserverlog_Profile / Profile: \zs\S\{1,8}/
+syn match usserverlog_Profile /  Profile: \zs\S\{1,8}\ze, /
+syn match usserverlog_Profile /, profile: \zs\S\{1,8}\ze,/
+syn match usserverlog_Profile /Expecting Profile: \zs\S\{1,8}\ze,/
+syn match usserverlog_Profile /found Profile: \zs\S\{1,8}\ze,/
+syn match usserverlog_Profile /Profile \zs\S\{1,8} \zeis a member of group: /
+syn match usserverlog_Profile /Backup Profile: \zs\ze Version date/
+syn match usserverlog_Profile /Full of \zs\S\{1,8}\ze$/
+syn match usserverlog_Profile /Incr. of \zs\S\{1,8}\ze$/
+syn match usserverlog_Profile /Profile=\zs\S\{1,8}\ze,/
+" Target:
+syn region usserverlog_Target start="Computer: \zs" end="\ze[\]\)]" 
+syn region usserverlog_Target start="Computer name \zs" end="\ze," 
+syn region usserverlog_Target start="Registration add request successful \zs" end="$"
+syn region usserverlog_Target start="request to registered name \zs" end=" "
+syn region usserverlog_Target start=", sending to \zs" end="$"
+
+hi def link usserverlog_Date   Underlined
+hi def link usserverlog_MsgD   Type
+hi def link usserverlog_MsgE   Error
+hi def link usserverlog_MsgW   Constant
+hi def link usserverlog_Process        Statement
+hi def link usserverlog_IPaddr Identifier
+hi def link usserverlog_Profile        Identifier
+hi def link usserverlog_Target Identifier
+
+let b:current_syntax = "usserverlog"
diff --git a/runtime/syntax/usw2kagtlog.vim b/runtime/syntax/usw2kagtlog.vim
new file mode 100644 (file)
index 0000000..9315731
--- /dev/null
@@ -0,0 +1,49 @@
+" Vim syntax file
+" Language:             Innovation Data Processing USW2KAgt.log file
+" Maintainer:           Rob Owens <rowens@fdrinnovation.com>
+" Latest Revision:      2013-07-26
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" Date:
+syn match usw2kagtlog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/
+" Msg Types:
+syn match usw2kagtlog_MsgD /Msg #\(Agt\|PC\|Srv\)\d\{4,5}D/ nextgroup=usw2kagtlog_Process skipwhite
+syn match usw2kagtlog_MsgE /Msg #\(Agt\|PC\|Srv\)\d\{4,5}E/ nextgroup=usw2kagtlog_Process skipwhite
+syn match usw2kagtlog_MsgI /Msg #\(Agt\|PC\|Srv\)\d\{4,5}I/ nextgroup=usw2kagtlog_Process skipwhite
+syn match usw2kagtlog_MsgW /Msg #\(Agt\|PC\|Srv\)\d\{4,5}W/ nextgroup=usw2kagtlog_Process skipwhite
+" Processes:
+syn region usw2kagtlog_Process start="(" end=")" contained
+syn region usw2kagtlog_Process start="Starting the processing for a \zs\"" end="\ze client request"
+syn region usw2kagtlog_Process start="Ending the processing for a \zs\"" end="\ze client request"
+" IP Address:
+syn match usw2kagtlog_IPaddr / \d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
+" Profile:
+
+syn match usw2kagtlog_Profile /Profile name \zs\"\S\{1,8}\"/
+syn match usw2kagtlog_Profile / Profile: \zs\S\{1,8}/
+syn match usw2kagtlog_Profile /  Profile: \zs\S\{1,8}\ze, /
+syn match usw2kagtlog_Profile /Backup Profile: \zs\ze Version date/
+syn match usw2kagtlog_Profile /Full of \zs\S\{1,8}\ze$/
+syn match usw2kagtlog_Profile /Incr. of \zs\S\{1,8}\ze$/
+syn match usw2kagtlog_Profile /profile name "\zs\S\{1,8}\ze"/
+" Target:
+syn region usw2kagtlog_Target start="Computer: \zs" end="\ze[\]\)]" 
+syn region usw2kagtlog_Target start="Computer name \zs" end="\ze," 
+" Agent Keywords:
+syn keyword usw2kagtlog_Agentword opened closed
+
+hi def link usw2kagtlog_Date           Underlined
+hi def link usw2kagtlog_MsgD           Type
+hi def link usw2kagtlog_MsgE           Error
+hi def link usw2kagtlog_MsgW           Constant
+hi def link usw2kagtlog_Process                Statement
+hi def link usw2kagtlog_IPaddr         Identifier
+hi def link usw2kagtlog_Profile                Identifier
+hi def link usw2kagtlog_Target         Identifier
+hi def link usw2kagtlog_Agentword      Special
+
+let b:current_syntax = "usw2kagentlog"
index f23b792..48e9564 100644 (file)
@@ -2,7 +2,7 @@
 " Language: Valgrind Memory Debugger Output
 " Maintainer: Roger Luethi <rl@hellgate.ch>
 " Program URL: http://devel-home.kde.org/~sewardj/
-" Last Change: 2002 Apr 07
+" Last Change: 2012 Apr 30
 "
 " Notes: mostly based on strace.vim and xml.vim
 
@@ -10,6 +10,8 @@
 if exists("b:current_syntax")
        finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case match
 syn sync minlines=50
@@ -97,3 +99,6 @@ hi def link valgrindBin               Comment
 hi def link valgrindSrc                Statement
 
 let b:current_syntax = "valgrind"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
index 01f312f..f4d21d0 100644 (file)
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:    Verilog
 " Maintainer:  Mun Johl <Mun.Johl@emulex.com>
-" Last Update:  Fri Oct 13 11:44:32 PDT 2006
+" Last Update:  Wed Jul 20 16:04:19 PDT 2011
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,11 +11,13 @@ elseif exists("b:current_syntax")
    finish
 endif
 
-" Set the local value of the 'iskeyword' option
+" Set the local value of the 'iskeyword' option.
+" NOTE: '?' was added so that verilogNumber would be processed correctly when
+"       '?' is the last character of the number.
 if version >= 600
-   setlocal iskeyword=@,48-57,_,192-255
+   setlocal iskeyword=@,48-57,63,_,192-255
 else
-   set iskeyword=@,48-57,_,192-255
+   set iskeyword=@,48-57,63,_,192-255
 endif
 
 " A bunch of useful Verilog keywords
@@ -48,7 +50,7 @@ syn keyword verilogLabel       begin end fork join
 syn keyword verilogConditional if else case casex casez default endcase
 syn keyword verilogRepeat      forever repeat while for
 
-syn keyword verilogTodo contained TODO
+syn keyword verilogTodo contained TODO FIXME
 
 syn match   verilogOperator "[&|~><!)(*#%@+/=?:;}{,.\^\-\[\]]"
 
@@ -113,17 +115,17 @@ if version >= 508 || !exists("did_verilog_syn_inits")
    " The default highlighting.
    HiLink verilogCharacter       Character
    HiLink verilogConditional     Conditional
-   HiLink verilogRepeat                 Repeat
-   HiLink verilogString                 String
-   HiLink verilogTodo           Todo
-   HiLink verilogComment        Comment
-   HiLink verilogConstant       Constant
-   HiLink verilogLabel          Label
-   HiLink verilogNumber                 Number
-   HiLink verilogOperator       Special
-   HiLink verilogStatement      Statement
-   HiLink verilogGlobal                 Define
-   HiLink verilogDirective      SpecialComment
+   HiLink verilogRepeat          Repeat
+   HiLink verilogString          String
+   HiLink verilogTodo            Todo
+   HiLink verilogComment         Comment
+   HiLink verilogConstant        Constant
+   HiLink verilogLabel           Label
+   HiLink verilogNumber          Number
+   HiLink verilogOperator        Special
+   HiLink verilogStatement       Statement
+   HiLink verilogGlobal          Define
+   HiLink verilogDirective       SpecialComment
    HiLink verilogEscape                 Special
 
    delcommand HiLink
index 4ac3b6d..5d978cc 100644 (file)
@@ -2,7 +2,8 @@
 " Language:    VHDL
 " Maintainer:  Czo <Olivier.Sirol@lip6.fr>
 " Credits:     Stephan Hegel <stephan.hegel@snc.siemens.com.cn>
-" $Id: vhdl.vim,v 1.1 2004/06/13 15:34:56 vimboss Exp $
+" Last Change: 2012 Jun 01
+"              (Dominique Pelle added @Spell)
 
 " VHSIC Hardware Description Language
 " Very High Scale Integrated Circuit
@@ -15,6 +16,9 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " This is not VHDL. I use the C-Preprocessor cpp to generate different binaries
 " from one VHDL source file. Unfortunately there is no preprocessor for VHDL
 " available. If you don't like this, please remove the following lines.
@@ -53,11 +57,11 @@ syn match   vhdlStatement "\<\(if\|else\)\>"
 syn match   vhdlNone      "\<else\s\+if\>$"
 syn match   vhdlNone      "\<else\s\+if\>\s"
 
-" Predifined VHDL types
+" Predefined VHDL types
 syn keyword vhdlType bit bit_vector
 syn keyword vhdlType character boolean integer real time
 syn keyword vhdlType string severity_level
-" Predifined standard ieee VHDL types
+" Predefined standard ieee VHDL types
 syn keyword vhdlType positive natural signed unsigned
 syn keyword vhdlType line text
 syn keyword vhdlType std_logic std_logic_vector
@@ -125,7 +129,7 @@ syn match  vhdlVector "B\"[01_]\+\""
 syn match  vhdlVector "O\"[0-7_]\+\""
 syn match  vhdlVector "X\"[0-9a-f_]\+\""
 syn match  vhdlCharacter "'.'"
-syn region vhdlString start=+"+  end=+"+
+syn region vhdlString start=+"+  end=+"+ contains=@Spell
 
 " floating numbers
 syn match vhdlNumber "-\=\<\d\+\.\d\+\(E[+\-]\=\d\+\)\>"
@@ -147,7 +151,7 @@ syn match   vhdlSpecial  "[().,;]"
 syn match vhdlTime "\<\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>"
 syn match vhdlTime "\<\d\+\.\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>"
 
-syn match vhdlComment "--.*$"
+syn match vhdlComment "--.*$" contains=@Spell
 " syn match vhdlGlobal "[\'$#~!%@?\^\[\]{}\\]"
 
 " Define the default highlighting.
@@ -181,4 +185,6 @@ endif
 
 let b:current_syntax = "vhdl"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
index d94d180..b3914e7 100644 (file)
@@ -1,14 +1,16 @@
 " Vim syntax file
 " Language:    Vim 7.3 script
 " Maintainer:  Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change: August 04, 2010
-" Version:     7.3-04
+" Last Change: Jul 05, 2013
+" Version:     7.3-26
 " Automatically generated keyword lists: {{{1
 
 " Quit when a syntax file was already loaded {{{2
 if exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " vimTodo: contains common special-notices for comments {{{2
 " Use the vimCommentGroup cluster to add your own.
@@ -16,31 +18,32 @@ syn keyword vimTodo contained       COMBAK  FIXME   TODO    XXX
 syn cluster vimCommentGroup    contains=vimTodo,@Spell
 
 " regular vim commands {{{2
-syn keyword vimCommand contained       abc[lear] argdo argu[ment] bel[owright] bN[ext] breakd[el] b[uffer] caddb[uffer] cb[uffer] cex[pr] cg[etfile] checkt[ime] cnew[er] col[der] con[tinue] cq[uit] delc[ommand] diffoff diffu[pdate] dr[op] echom[sg] em[enu] endt[ry] exi[t] fina[lly] fix[del] foldd[oopen] go[to] hid[e] ij[ump] isp[lit] k laddb[uffer] la[st] lch[dir] lex[pr] lgete[xpr] l[ist] lmak[e] lN[ext] loc[kmarks] lpf[ile] lt[ag] lv[imgrep] ma[rk] mk[exrc] mkv[imrc] mz[scheme] new noh[lsearch] on[ly] ped[it] popu prev[ious] prof[ile] pta[g] ptn[ext] pts[elect] py[thon] r[ead] redr[aw] ret[ab] rightb[elow] rundo san[dbox] sbf[irst] sbN[ext] scripte[ncoding] setg[lobal] sh[ell] sla[st] sme sni[ff] sor[t] spelli[nfo] sp[lit] startg[replace] st[op] sunme syncbind tabd[o] tabl[ast] tabN[ext] tabs tcld[o] th[row] tm[enu] tp[revious] tu undoj[oin] uns[ilent] vert[ical] vi[sual] wa[ll] winp[os] wp[revious] ws[verb] xa[ll] xmenu xnoremenu
-syn keyword vimCommand contained       abo[veleft] arge[dit] as[cii] bf[irst] bo[tright] breakl[ist] buffers cad[dexpr] cc cf[ile] c[hange] cla[st] cn[ext] colo[rscheme] cope[n] cr[ewind] d[elete] diffpatch dig[raphs] ds[earch] echon emenu* endw[hile] f[ile] fin[d] fo[ld] foldo[pen] gr[ep] his[tory] il[ist] iuna[bbrev] keepalt lad[dexpr] later lcl[ose] lf[ile] lg[etfile] ll lmapc[lear] lnf[ile] lockv[ar] lp[revious] lua lvimgrepa[dd] marks mks[ession] mod[e] nbc[lose] n[ext] nu[mber] o[pen] pe[rl] popu[p] p[rint] promptf[ind] ptf[irst] ptN[ext] pu[t] qa[ll] rec[over] redraws[tatus] retu[rn] rub[y] ru[ntime] sa[rgument] sbl[ast] sbp[revious] scrip[tnames] setl[ocal] sign sl[eep] smenu sno[magic] so[urce] spellr[epall] spr[evious] star[tinsert] stopi[nsert] sunmenu t tabe[dit] tabm[ove] tabo[nly] ta[g] tclf[ile] tj[ump] tn[ext] tr[ewind] tu[nmenu] undol[ist] up[date] vie[w] vmapc[lear] wh[ile] win[size] wq wundo x[it] XMLent xunme
-syn keyword vimCommand contained       al[l] argg[lobal] bad[d] bl[ast] bp[revious] br[ewind] bun[load] caddf[ile] ccl[ose] cfir[st] changes cl[ist] cN[ext] comc[lear] co[py] cuna[bbrev] delf[unction] diffpu[t] di[splay] dsp[lit] e[dit] endfo[r] ene[w] files fini[sh] foldc[lose] for grepa[dd] iabc[lear] imapc[lear] j[oin] keepj[umps] laddf[ile] lb[uffer] le[ft] lfir[st] lgr[ep] lla[st] lnew[er] lNf[ile] lol[der] lr[ewind] luado lw[indow] mat[ch] mksp[ell] m[ove] nb[key] N[ext] ol[dfiles] opt[ions] perld[o] pp[op] P[rint] promptr[epl] ptj[ump] ptp[revious] pw[d] q[uit] redi[r] reg[isters] rew[ind] rubyd[o] rv[iminfo] sav[eas] sbm[odified] sbr[ewind] se[t] sf[ind] sil[ent] sm[agic] sn[ext] snoreme spelld[ump] spellu[ndo] sre[wind] startr[eplace] sts[elect] sus[pend] tab tabf[ind] tabnew tabp[revious] tags te[aroff] tl[ast] tN[ext] try una[bbreviate] unh[ide] verb[ose] vim[grep] vne[w] winc[md] wn[ext] wqa[ll] wv[iminfo] xmapc[lear] XMLns xunmenu
-syn keyword vimCommand contained       arga[dd] argl[ocal] ba[ll] bm[odified] brea[k] bro[wse] bw[ipeout] cal[l] cd cgetb[uffer] chd[ir] clo[se] cnf[ile] comp[iler] cpf[ile] cw[indow] delm[arks] diffsplit dj[ump] earlier el[se] endf[unction] ex filetype fir[st] folddoc[losed] fu[nction] ha[rdcopy] if is[earch] ju[mps] kee[pmarks] lan[guage] lc[d] lefta[bove] lgetb[uffer] lgrepa[dd] lli[st] lne[xt] lo[adview] lop[en] ls luafile mak[e] menut[ranslate] mkvie[w] mzf[ile] nbs[tart] nmapc[lear] omapc[lear] pc[lose] po[p] pre[serve] profd[el] ps[earch] ptl[ast] ptr[ewind] pyf[ile] quita[ll] red[o] res[ize] ri[ght] rubyf[ile] sal[l] sba[ll] sbn[ext] sb[uffer] setf[iletype] sfir[st] sim[alt] sm[ap] sN[ext] snoremenu spe[llgood] spellw[rong] sta[g] stj[ump] sun[hide] sv[iew] tabc[lose] tabfir[st] tabn[ext] tabr[ewind] tc[l] tf[irst] tm to[pleft] ts[elect] u[ndo] unlo[ckvar] ve[rsion] vimgrepa[dd] vs[plit] windo wN[ext] w[rite] X xme xnoreme y[ank]
-syn keyword vimCommand contained       argd[elete] ar[gs] bd[elete] bn[ext] breaka[dd] bufdo cabc[lear] cat[ch] ce[nter] cgete[xpr] che[ckpath] cmapc[lear] cNf[ile] conf[irm] cp[revious] debugg[reedy] diffg[et] diffthis dl[ist] echoe[rr] elsei[f] en[dif] 
-syn match   vimCommand contained       "\<z[-+^.=]"
+syn keyword vimCommand contained       a arga[dd] ar[gs] bar bn[ext] breaka[dd] bu bw[ipeout] caddf[ile] cd cgete[xpr] checkt[ime] cmdname cnf com con[tinue] cq[uit] cw[indow] delc[ommand] diffg[et] diffpu[t] dig[raphs] dr[op] earlier el[se] endfo[r] ene[w] filename fin[d] folddoc[losed] fu[nction] gui helpg[rep] ia in j[oin] kee[pmarks] laddf[ile] lb[uffer] le[ft] lgetb[uffer] l[ist] lN lNf lo[adview] lpf[ile] luado mak[e] menut[ranslate] mks[ession] mod[e] n new noautocmd on[ly] pc[lose] popu p[rint] promptr[epl] ptn pts[elect] py[thon] quote redi[r] res[ize] ru rv[iminfo] sbf[irst] sbr[ewind] scscope sfir[st] sim[alt] sme snoreme spe spellw[rong] star st[op] sunmenu syn ta tabf[ind] tabnew tabr[ewind] tcld[o] tj[ump] tN tp[revious] tu u[ndo] unlo[ckvar] verb[ose] vim[grep] vne[w] win wn[ext] w[rite] xa[ll] XMLent xunme
+syn keyword vimCommand contained       ab argd[elete] argu[ment] bd[elete] bN[ext] breakd[el] buf c cal[l] ce[nter] cg[etfile] cl cn cNf comc[lear] cope[n] cr[ewind] d d[elete] diffo diffsplit di[splay] ds[earch] ec elsei[f] endfun ex files fini[sh] foldd[oopen] g gvim helpt[ags] iabc[lear] index ju[mps] l lan lc[d] lefta[bove] lgete[xpr] ll lne lnf[ile] locale lp[revious] luafile Man mes mksp[ell] m[ove] N n[ext] noh[lsearch] o[pen] pe popu[p] P[rint] ps[earch] ptN pu[t] python3 r red[o] ret[ab] rub[y] sal[l] sbl[ast] sb[uffer] se[t] sh[ell] sl smenu snoremenu spelld[ump] sp[lit] start stopi[nsert] sus[pend] sync tab tabfir[st] tabn[ext] tabs tclf[ile] tl[ast] tn[ext] tr tu[nmenu] undoj[oin] uns[ilent] ve[rsion] vimgrepa[dd] vs[plit] winc[md] wN[ext] ws[verb] x[it] XMLns xunmenu
+syn keyword vimCommand contained       abc[lear] argdo as[cii] bel[owright] bo[tright] breakl[ist] bufdo cabc[lear] cat[ch] cex[pr] c[hange] cla[st] cN cnf[ile] comment co[py] cs de delf diffoff difft dj[ump] dsp[lit] echoe[rr] em[enu] endf[unction] exi[t] filet fir[st] foldo[pen] get h hi if intro k la lan[guage] lch[dir] let@ lg[etfile] lla[st] lnew[er] lNf[ile] loc[kmarks] lr[ewind] lv[imgrep] ma[rk] messages mkv mv nbc[lose] N[ext] nu[mber] opt[ions] ped[it] pp[op] pro pta[g] ptn[ext] pw[d] q re redr[aw] retu[rn] rubyd[o] san[dbox] sbm[odified] scrip setf[iletype] si sla[st] sn[ext] s@\n@\=\r" spe[llgood] spr[evious] startg[replace] sts[elect] sv[iew] syncbind tabc[lose] tabl[ast] tabN[ext] ta[g] te[aroff] tm tN[ext] tr[ewind] u undol[ist] up[date] vert[ical] vi[sual] w windo wp[revious] wundo xmapc[lear] xnoreme xwininfo
+syn keyword vimCommand contained       abo[veleft] arge[dit] au bf[irst] bp[revious] br[ewind] b[uffer] cad cb[uffer] cf[ile] changes cl[ist] cnew[er] cNf[ile] comp[iler] count cscope debug delf[unction] DiffOrig diffthis dl[ist] dwim echom[sg] emenu* en[dif] exu[sage] filetype fix[del] for go[to] ha[rdcopy] hid[e] ij[ump] is[earch] keepa lad la[st] lcl[ose] lex[pr] lgr[ep] lli[st] lne[xt] lo lockv[ar] ls lvimgrepa[dd] marks mk mkvie[w] mz nb[key] nkf o ownsyntax pe[rl] pr profd[el] ptf[irst] ptN[ext] py qa[ll] r[ead] redraws[tatus] rew[ind] rubyf[ile] sa[rgument] sbn[ext] scripte[ncoding] setg[lobal] sig sl[eep] sN[ext] so spelli[nfo] sre[wind] star[tinsert] sun[hide] sw[apname] synlist tabd[o] tabm[ove] tabo[nly] tags tf[irst] tm[enu] TOhtml try un unh[ide] v vi viu[sage] wa[ll] winp[os] wq wv[iminfo] xme xnoremenu y[ank]
+syn keyword vimCommand contained       al[l] argg[lobal] bad[d] bl[ast] br bro[wse] buffers caddb[uffer] cc cfir[st] chd[ir] clo[se] cn[ext] col[der] con cpf[ile] cstag debugg[reedy] delm[arks] diffp diffu[pdate] do e echon en endt[ry] f fin fo[ld] fu gr[ep] h[elp] his[tory] il[ist] isp[lit] keepalt laddb[uffer] lat lcs lf[ile] lgrepa[dd] lmak[e] lN[ext] loadk lol[der] lt[ag] lw[indow] mat[ch] mkdir mkv[imrc] mzf[ile] nbs[tart] nmapc[lear] ol[dfiles] p perld[o] pre[serve] prof[ile] ptj[ump] ptp[revious] py3 q[uit] rec[over] reg[isters] ri[ght] rundo sav[eas] sbN[ext] scrip[tnames] setl[ocal] sign sm[agic] sni[ff] sor[t] spellr[epall] st startr[eplace] sunme sy t tabe[dit] tabN tabp[revious] tc[l] th[row] tn to[pleft] ts[elect] una[bbreviate] unl ve vie[w] vmapc[lear] wh[ile] win[size] wqa[ll] x xmenu xterm errormsg
+syn keyword vimCommand contained       ar argl[ocal] ba[ll] bm[odified] brea[k] browseset bun[load] cad[dexpr] ccl[ose] cgetb[uffer] che[ckpath] cmapc[lear] cN[ext] colo[rscheme] conf[irm] cp[revious] cuna[bbrev] del di diffpatch dig doau ea e[dit] endf endw[hile] f[ile] fina[lly] foldc[lose] fun grepa[dd] helpf[ind] i imapc[lear] iuna[bbrev] keepj[umps] lad[dexpr] later lcscope lfir[st] lh[elpgrep] lmapc[lear] lnf loadkeymap lop[en] lua ma menut mk[exrc] mo mz[scheme] ne noa omapc[lear] P po[p] prev[ious] promptf[ind] ptl[ast] ptr[ewind] pyf[ile] quita[ll] red Ren rightb[elow] ru[ntime] sba[ll] sbp[revious] scs sf[ind] sil[ent] sm[ap] sno[magic] so[urce] spellu[ndo] sta[g] stj[ump] 
+syn match   vimCommand contained       "\<z[-+^.=]\="
 
 " vimOptions are caught only when contained in a vimSet {{{2
-syn keyword vimOption contained        acd ambiwidth arabicshape autowriteall backupdir bdlay binary breakat bufhidden cd ci cinw co commentstring confirm cpoptions cscopetag csto cwh dg dip eadirection ek equalprg ex fdi fen fileencodings flp foldexpr foldnestmax fp gfm grepformat guifontwide helpheight highlight hlg im imi incsearch infercase isk keymap langmenu linespace loadplugins macatsui maxcombine mef mls modelines mousehide mp nu omnifunc paragraphs penc pm printdevice printoptions quoteescape restorescreen rnu rulerformat scr sect sft shellredir shm showmode sj smd spell splitbelow ssl stl sw sxq tabpagemax tags tbis terse thesaurus titleold toolbariconsize tsr ttyfast tx undofile ut verbosefile virtualedit wb wfw wildcharm winaltkeys winminwidth wmnu write
-syn keyword vimOption contained        ai ambw ari aw backupext beval biosk brk buflisted cdpath cin cinwords cocu compatible consk cpt cscopetagorder csverb debug dict dir eb enc errorbells expandtab fdl fenc fileformat fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatekey iminsert inde insertmode iskeyword keymodel laststatus lisp lpl magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste pex pmbcs printencoding prompt rdt revins ro runtimepath scroll sections sh shellslash shortmess showtabline slm sn spellcapcheck splitright ssop stmp swapfile syn tabstop tagstack tbs textauto tildeop titlestring top ttimeout ttym uc undolevels vb vfile visualbell wc wh wildignore window winwidth wmw writeany
-syn keyword vimOption contained        akm anti arshape awa backupskip bex bioskey browsedir buftype cedit cindent clipboard cole complete conskey crb cscopeverbose cuc deco dictionary directory ed encoding errorfile exrc fdls fencs fileformats fmr foldlevel foldtext fsync gfs gtl guioptions hf hk hlsearch imak ims indentexpr is isp keywordprg lazyredraw lispwords ls makeef maxmapdepth mfd mmd modified mousemodel msm numberwidth operatorfunc pastetoggle pexpr pmbfn printexpr pt readonly ri rs sb scrollbind secure shcf shelltemp shortname shq sm so spellfile spr st sts swapsync synmaxcol tag tal tenc textmode timeout tl tpm ttimeoutlen ttymouse udf undoreload vbs vi vop wcm whichwrap wildmenu winfixheight wiv wop writebackup
-syn keyword vimOption contained        al antialias autochdir background balloondelay bexpr bk bs casemap cf cink cmdheight colorcolumn completefunc copyindent cryptmethod cspc cul def diff display edcompatible endofline errorformat fcl fdm fex filetype fo foldlevelstart formatexpr ft gfw gtt guipty hh hkmap ic imc imsearch indentkeys isf isprint km lbr list lsp makeprg maxmem mh mmp more mouses mzq nuw opfunc patchexpr pfn popt printfont pumheight redrawtime rightleft rtp sbo scrolljump sel shell shelltype showbreak si smartcase softtabstop spelllang sps sta su swb syntax tagbsearch tb term textwidth timeoutlen tm tr ttm ttyscroll udir updatecount vdir viewdir wa wd wi wildmode winfixwidth wiw wrap writedelay
-syn keyword vimOption contained        aleph ar autoindent backspace ballooneval bg bkc bsdir cb cfu cinkeys cmdwinheight columns completeopt cot cscopepathcomp csprg cursorbind define diffexpr dy ef eol esckeys fcs fdn ff fillchars foldclose foldmarker formatlistpat gcr ghr guicursor guitablabel hi hkmapp icon imcmdline inc indk isfname joinspaces kmp lcs listchars lw mat maxmempattern mis mmt mouse mouseshape mzquantum odev osfiletype patchmode ph preserveindent printheader pvh relativenumber rightleftcmd ru sbr scrolloff selection shellcmdflag shellxquote showcmd sidescroll smartindent sol spellsuggest sr stal sua swf ta taglength tbi termbidi tf title to ts tty ttytype ul updatetime ve viewoptions wak weirdinvert wig wildoptions winheight wm wrapmargin ws
-syn keyword vimOption contained        allowrevins arab autoread backup balloonexpr bh bl bsk cc ch cino cmp com concealcursor cp cscopeprg csqf cursorcolumn delcombine diffopt ea efm ep et fdc fdo ffs fk foldcolumn foldmethod formatoptions gd go guifont guitabtooltip hid hkp iconstring imd include inex isi js kp linebreak lm lz matchpairs maxmemtot mkspellmem mod mousef mouset nf oft pa path pheader previewheight printmbcharset pvw remap rl ruf sc scrollopt selectmode shellpipe shiftround showfulltag sidescrolloff smarttab sp spf srr startofline suffixes switchbuf tabline tagrelative tbidi termencoding tgst titlelen toolbar tsl ttybuiltin tw undodir ur verbose viminfo warn wfh wildchar wim winminheight wmh wrapscan ww
-syn keyword vimOption contained        altkeymap arabic autowrite backupcopy bdir bin bomb bt ccv charconvert cinoptions cms comments conceallevel cpo cscopequickfix cst cursorline dex digraph ead ei equalalways eventignore fde fdt fileencoding fkmap foldenable foldminlines formatprg gdefault gp guifontset helpfile hidden hl ignorecase imdisable includeexpr inf isident key langmap lines lmap ma matchtime mco ml modeline mousefocus mousetime nrformats ofu para pdev pi previewwindow printmbfont qe report rlc ruler scb scs sessionoptions shellquote shiftwidth showmatch siso smc spc spl ss statusline suffixesadd sws 
+syn keyword vimOption contained        acd ambiwidth arabicshape autowriteall backupdir bdlay binary breakat bufhidden cd ci cinw co commentstring confirm cpoptions cscoperelative csre cursorcolumn delcombine diffopt ea efm ep et fdc fdo ffs fk foldcolumn foldmethod formatoptions gd go guifont guitabtooltip hid hkp iconstring imd include inex isi js kp linebreak lm lz matchpairs maxmemtot mkspellmem mod mousef mouset nf oft pa path pheader previewheight printmbcharset pvw remap rl ruf sc scrollopt selectmode shellpipe shellxquote showcmd sidescroll smartindent sol spellsuggest sr stal sua swf syntax taglength tbidi terse tildeop tl tpm ttimeoutlen ttymouse udf undoreload vbs vi vop wcm whichwrap wildignore winaltkeys winminwidth wmnu write
+syn keyword vimOption contained        ai ambw ari aw backupext beval biosk brk buflisted cdpath cin cinwords cocu compatible consk cpt cscopetag cst cursorline dex digraph ead ei equalalways eventignore fde fdt fileencoding fkmap foldenable foldminlines formatprg gdefault gp guifontset helpfile hidden hl ignorecase imdisable includeexpr inf isident key langmap lines lmap ma matchtime mco ml modeline mousefocus mousetime nrformats ofu para pdev pi previewwindow printmbfont qe report rlc ruler scb scs sessionoptions shellquote shiftround showfulltag sidescrolloff smarttab sp spf srr startofline suffixes switchbuf ta tagrelative tbis textauto timeout tm tr ttm ttyscroll udir updatecount vdir viewdir wa wd wi wildignorecase window winwidth wmw writeany
+syn keyword vimOption contained        akm anti arshape awa backupskip bex bioskey browsedir buftype cedit cindent clipboard cole complete conskey crb cscopetagorder csto cwh dg dip eadirection ek equalprg ex fdi fen fileencodings flp foldexpr foldnestmax fp gfm grepformat guifontwide helpheight highlight hlg im imi incsearch infercase isk keymap langmenu linespace loadplugins macatsui maxcombine mef mls modelines mousehide mp nu omnifunc paragraphs penc pm printdevice printoptions quoteescape restorescreen rnu rulerformat scr sect sft shellredir shiftwidth showmatch siso smc spc spl ss statusline suffixesadd sws tabline tags tbs textmode timeoutlen to ts tty ttytype ul updatetime ve viewoptions wak weirdinvert wic wildmenu winfixheight wiv wop writebackup
+syn keyword vimOption contained        al antialias autochdir background balloondelay bexpr bk bs casemap cf cink cmdheight colorcolumn completefunc copyindent cryptmethod cscopeverbose csverb debug dict dir eb enc errorbells expandtab fdl fenc fileformat fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatekey iminsert inde insertmode iskeyword keymodel laststatus lisp lpl magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste pex pmbcs printencoding prompt rdt revins ro runtimepath scroll sections sh shellslash shm showmode sj smd spell splitbelow ssl stl sw sxe tabpagemax tagstack tenc textwidth title toolbar tsl ttybuiltin tw undodir ur verbose viminfo warn wfh wig wildmode winfixwidth wiw wrap writedelay
+syn keyword vimOption contained        aleph ar autoindent backspace ballooneval bg bkc bsdir cb cfu cinkeys cmdwinheight columns completeopt cot cscopepathcomp cspc cuc deco dictionary directory ed encoding errorfile exrc fdls fencs fileformats fmr foldlevel foldtext fsync gfs gtl guioptions hf hk hlsearch imak ims indentexpr is isp keywordprg lazyredraw lispwords ls makeef maxmapdepth mfd mmd modified mousemodel msm numberwidth operatorfunc pastetoggle pexpr pmbfn printexpr pt readonly ri rs sb scrollbind secure shcf shelltemp shortmess showtabline slm sn spellcapcheck splitright ssop stmp swapfile sxq tabstop tal term tf titlelen toolbariconsize tsr ttyfast tx undofile ut verbosefile virtualedit wb wfw wildchar wildoptions winheight wm wrapmargin ws
+syn keyword vimOption contained        allowrevins arab autoread backup balloonexpr bh bl bsk cc ch cino cmp com concealcursor cp cscopeprg csprg cul def diff display edcompatible endofline errorformat fcl fdm fex filetype fo foldlevelstart formatexpr ft gfw gtt guipty hh hkmap ic imc imsearch indentkeys isf isprint km lbr list lsp makeprg maxmem mh mmp more mouses mzq nuw opfunc patchexpr pfn popt printfont pumheight redrawtime rightleft rtp sbo scrolljump sel shell shelltype shortname shq sm so spellfile spr st sts swapsync syn tag tb termbidi tgst titleold top ttimeout ttym uc undolevels vb vfile visualbell wc wh wildcharm wim winminheight wmh wrapscan ww
+syn keyword vimOption contained        altkeymap arabic autowrite backupcopy bdir bin bomb bt ccv charconvert cinoptions cms comments conceallevel cpo cscopequickfix csqf cursorbind define diffexpr dy ef eol esckeys fcs fdn ff fillchars foldclose foldmarker formatlistpat gcr ghr guicursor guitablabel hi hkmapp icon imcmdline inc indk isfname joinspaces kmp lcs listchars lw mat maxmempattern mis mmt mouse mouseshape mzquantum odev osfiletype patchmode ph preserveindent printheader pvh relativenumber rightleftcmd ru sbr scrolloff selection shellcmdflag shellxescape showbreak si smartcase softtabstop spelllang sps sta su swb synmaxcol tagbsearch tbi termencoding thesaurus titlestring 
 
 " vimOptions: These are the turn-off setting variants {{{2
-syn keyword vimOption contained        noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscopetag nocsverb nocursorbind nodeco nodiff noeb noek noeol noerrorbells noet noexpandtab nofen nofkmap nogd noguipty nohidden nohkmap nohkp nohlsearch noicon noim noimcmdline noimdisable noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx novisualbell nowarn noweirdinvert nowfw nowinfixheight nowiv nowrap nowrite nowritebackup
-syn keyword vimOption contained        noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nocf nocindent noconsk nocp nocscopeverbose nocuc nocursorcolumn nodelcombine nodigraph noed noendofline noequalalways noesckeys noex noexrc nofk nofoldenable nogdefault nohid nohk nohkmapp nohls noic noignorecase noimc noimd noincsearch noinfercase nois nojs nolbr nolisp noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly noremap norevins norightleft nornu nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast novb nowa nowb nowfh nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
-syn keyword vimOption contained        noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb noci nocompatible noconskey nocrb nocst nocul nocursorline nodg noea noedcompatible 
+syn keyword vimOption contained        noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscopetag nocsverb nocursorbind nodeco nodiff noeb noek noequalalways noesckeys noex noexrc nofk nofoldenable nogdefault nohid nohk nohkmapp nohls noic noignorecase noimc noimd noincsearch noinfercase nois nojs nolbr nolisp noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly noremap norevins norightleft nornu nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast novb nowa nowb nowfh nowildignorecase* * nowinfixheight nowiv nowrap nowrite nowritebackup
+syn keyword vimOption contained        noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nocf nocindent noconsk nocp nocscopeverbose nocuc nocursorcolumn nodelcombine nodigraph noed noendofline noerrorbells noet noexpandtab nofen nofkmap nogd noguipty nohidden nohkmap nohkp nohlsearch noicon noim noimcmdline noimdisable noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx novisualbell nowarn noweirdinvert nowfw nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
+syn keyword vimOption contained        noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb noci nocompatible noconskey nocrb nocst nocul nocursorline nodg noea noedcompatible noeol 
 
 " vimOptions: These are the invertible variants {{{2
-syn keyword vimOption contained        invacd invallowrevins invantialias invarabic invarshape invautoread invaw invballooneval invbinary invbk invbuflisted invcin invconfirm invcopyindent invcscopetag invcsverb invcursorbind invdeco invdiff inveb invek inveol inverrorbells invet invexpandtab invfen invfkmap invgd invguipty invhidden invhkmap invhkp invhlsearch invicon invim invimcmdline invimdisable invinf invinsertmode invjoinspaces invlazyredraw invlinebreak invlist invlpl invma invmagic invml invmodeline invmodified invmousef invmousehide invnumber invopendevice invpi invpreviewwindow invpvw invrelativenumber invrestorescreen invri invrl invro invru invsb invscb invscs invsft invshelltemp invshortname invshowfulltag invshowmode invsm invsmartindent invsmd invsol invsplitbelow invspr invssl invstartofline invswapfile invta invtagrelative invtbi invtbs invterse invtextmode invtgst invtimeout invto invtr invttybuiltin invtx invvisualbell invwarn invweirdinvert invwfw invwinfixheight invwiv invwrap invwrite invwritebackup
-syn keyword vimOption contained        invai invaltkeymap invar invarabicshape invautochdir invautowrite invawa invbeval invbiosk invbl invcf invcindent invconsk invcp invcscopeverbose invcuc invcursorcolumn invdelcombine invdigraph inved invendofline invequalalways invesckeys invex invexrc invfk invfoldenable invgdefault invhid invhk invhkmapp invhls invic invignorecase invimc invimd invincsearch invinfercase invis invjs invlbr invlisp invloadplugins invlz invmacatsui invmh invmod invmodifiable invmore invmousefocus invnu invodev invpaste invpreserveindent invprompt invreadonly invremap invrevins invrightleft invrnu invrs invruler invsc invscrollbind invsecure invshellslash invshiftround invshowcmd invshowmatch invsi invsmartcase invsmarttab invsn invspell invsplitright invsr invsta invstmp invswf invtagbsearch invtagstack invtbidi invtermbidi invtextauto invtf invtildeop invtitle invtop invttimeout invttyfast invvb invwa invwb invwfh invwildmenu invwinfixwidth invwmnu invwrapscan invwriteany invws
-syn keyword vimOption contained        invakm invanti invarab invari invautoindent invautowriteall invbackup invbin invbioskey invbomb invci invcompatible invconskey invcrb invcst invcul invcursorline invdg invea invedcompatible 
+syn keyword vimOption contained        invacd invallowrevins invantialias invarabic invarshape invautoread invaw invballooneval invbinary invbk invbuflisted invcin invconfirm invcopyindent invcscopetag invcsverb invcursorbind invdeco invdiff inveb invek invequalalways invesckeys invex invexrc invfk invfoldenable invgdefault invhid invhk invhkmapp invhls invic invignorecase invimc invimd invincsearch invinfercase invis invjs invlbr invlisp invloadplugins invlz invmacatsui invmh invmod invmodifiable invmore invmousefocus invnu invodev invpaste invpreserveindent invprompt invreadonly invremap invrevins invrightleft invrnu invrs invruler invsc invscrollbind invsecure invshellslash invshiftround invshowcmd invshowmatch invsi invsmartcase invsmarttab invsn invspell invsplitright invsr invsta invstmp invswf invtagbsearch invtagstack invtbidi invtermbidi invtextauto invtf invtildeop invtitle invtop invttimeout invttyfast invvb invwa invwb invwfh invwildignorecase* * invwinfixheight invwiv invwrap invwrite invwritebackup
+syn keyword vimOption contained        invai invaltkeymap invar invarabicshape invautochdir invautowrite invawa invbeval invbiosk invbl invcf invcindent invconsk invcp invcscopeverbose invcuc invcursorcolumn invdelcombine invdigraph inved invendofline inverrorbells invet invexpandtab invfen invfkmap invgd invguipty invhidden invhkmap invhkp invhlsearch invicon invim invimcmdline invimdisable invinf invinsertmode invjoinspaces invlazyredraw invlinebreak invlist invlpl invma invmagic invml invmodeline invmodified invmousef invmousehide invnumber invopendevice invpi invpreviewwindow invpvw invrelativenumber invrestorescreen invri invrl invro invru invsb invscb invscs invsft invshelltemp invshortname invshowfulltag invshowmode invsm invsmartindent invsmd invsol invsplitbelow invspr invssl invstartofline invswapfile invta invtagrelative invtbi invtbs invterse invtextmode invtgst invtimeout invto invtr invttybuiltin invtx invvisualbell invwarn invweirdinvert invwfw invwildmenu invwinfixwidth invwmnu invwrapscan invwriteany invws
+syn keyword vimOption contained        invakm invanti invarab invari invautoindent invautowriteall invbackup invbin invbioskey invbomb invci invcompatible invconskey invcrb invcst invcul invcursorline invdg invea invedcompatible inveol 
 
 " termcap codes (which can also be set) {{{2
 syn keyword vimOption contained        t_AB t_al t_bc t_ce t_cl t_Co t_cs t_Cs t_CS t_CV t_da t_db t_dl t_DL t_EI t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_fs t_IE t_IS t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_ke t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RI t_RV t_Sb t_se t_Sf t_SI t_so t_sr t_te t_ti t_ts t_ue t_us t_ut t_vb t_ve t_vi t_vs t_WP t_WS t_xs t_ZH t_ZR
@@ -59,7 +62,7 @@ syn keyword vimErrSetting contained   hardtabs ht w1200 w300 w9600
 
 " AutoCmd Events {{{2
 syn case ignore
-syn keyword vimAutoEvent contained     BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre Cmd-event CmdwinEnter CmdwinLeave ColorScheme CursorHold CursorHoldI CursorMoved CursorMovedI EncodingChanged FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertEnter InsertLeave MenuPopup QuickFixCmdPost QuickFixCmdPre RemoteReply SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabEnter TabLeave TermChanged TermResponse User UserGettingBored VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave 
+syn keyword vimAutoEvent contained     BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre Cmd-event CmdwinEnter CmdwinLeave ColorScheme CursorHold CursorHoldI CursorMoved CursorMovedI EncodingChanged FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave MenuPopup QuickFixCmdPost QuickFixCmdPre RemoteReply SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabEnter TabLeave TermChanged TermResponse User UserGettingBored VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave 
 
 " Highlight commonly used Groupnames {{{2
 syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo 
@@ -70,11 +73,11 @@ syn match vimHLGroup contained      "Conceal"
 syn case match
 
 " Function Names {{{2
-syn keyword vimFuncName contained      abs append argv atan2 bufexists bufname byte2line ceil cindent complete confirm cosh cursor did_filetype empty eventhandler exp extend filewritable findfile fmod foldclosed foldtext function getbufline getcharmod getcmdtype getfperm getftype getmatches getqflist gettabvar getwinposy globpath haslocaldir histdel hlexists iconv input inputrestore insert items len line localtime map match matchdelete matchstr min mode nextnonblank pathshorten prevnonblank pumvisible readfile reltimestr remote_foreground remote_read remove repeat reverse search searchpair searchpos serverlist setcmdpos setloclist setpos setreg settabwinvar shellescape sin sort spellbadword split str2float strchars strftime string strpart strtrans submatch synconcealed synIDattr synstack tabpagebuflist tabpagewinnr taglist tanh tolower tr type undotree virtcol winbufnr winheight winnr winrestview winwidth
-syn keyword vimFuncName contained      acos argc asin browse buflisted bufnr byteidx changenr clearmatches complete_add copy count deepcopy diff_filler escape executable expand feedkeys filter float2nr fnameescape foldclosedend foldtextresult garbagecollect getbufvar getcmdline getcwd getfsize getline getpid getreg gettabwinvar getwinvar has hasmapto histget hlID indent inputdialog inputsave isdirectory join libcall line2byte log maparg matchadd matchend max mkdir mzeval nr2char pow printf range reltime remote_expr remote_peek remote_send rename resolve round searchdecl searchpairpos server2client setbufvar setline setmatches setqflist settabvar setwinvar simplify sinh soundfold spellsuggest sqrt str2nr strdisplaywidth stridx strlen strridx strwidth substitute synID synIDtrans system tabpagenr tagfiles tan tempname toupper trunc undofile values visualmode wincol winline winrestcmd winsaveview writefile
-syn keyword vimFuncName contained      add argidx atan browsedir bufloaded bufwinnr call char2nr col complete_check cos cscope_connection delete diff_hlID eval exists expr8 filereadable finddir floor fnamemodify foldlevel foreground get getchar getcmdpos getfontname getftime getloclist getpos getregtype getwinposx glob has_key histadd histnr hostname index inputlist inputsecret islocked keys libcallnr lispindent log10 mapcheck matcharg matchlist 
+syn keyword vimFuncName contained      abs and argidx atan browsedir bufloaded bufwinnr call char2nr col complete_check cos cscope_connection delete diff_hlID eval exists expr8 filereadable finddir floor fnamemodify foldlevel foreground get getchar getcmdpos getfontname getftime getloclist getpos getregtype getwinposx glob has_key histadd histnr hostname index inputlist inputsecret isdirectory join libcall line2byte log map match matchdelete matchstr mkdir nextnonblank pathshorten printf pyeval reltime remote_foreground remote_read remove repeat reverse search searchpair searchpos serverlist setcmdpos setloclist setpos setreg settabwinvar shellescape simplify sinh soundfold spellsuggest sqrt str2nr strdisplaywidth stridx strlen strridx strwidth substitute synID synIDtrans system tabpagenr tagfiles tan tempname toupper trunc undofile values visualmode wincol winline winrestcmd winsaveview writefile
+syn keyword vimFuncName contained      acos append argv atan2 bufexists bufname byte2line ceil cindent complete confirm cosh cursor did_filetype empty eventhandler exp extend filewritable findfile fmod foldclosed foldtext function getbufline getcharmod getcmdtype getfperm getftype getmatches getqflist gettabvar getwinposy globpath haslocaldir histdel hlexists iconv input inputrestore insert islocked keys libcallnr lispindent log10 maparg matchadd matchend max mode nr2char pow pumvisible range reltimestr remote_peek remote_send rename resolve round searchdecl searchpairpos server2client setbufvar setline setmatches setqflist settabvar setwinvar shiftwidth sin sort spellbadword split str2float strchars strftime string strpart strtrans submatch synconcealed synIDattr synstack tabpagebuflist tabpagewinnr taglist tanh tolower tr type undotree virtcol winbufnr winheight winnr winrestview winwidth xor
+syn keyword vimFuncName contained      add argc asin browse buflisted bufnr byteidx changenr clearmatches complete_add copy count deepcopy diff_filler escape executable expand feedkeys filter float2nr fnameescape foldclosedend foldtextresult garbagecollect getbufvar getcmdline getcwd getfsize getline getpid getreg gettabwinvar getwinvar has hasmapto histget hlID indent inputdialog inputsave invert items len line localtime luaeval mapcheck matcharg matchlist min mzeval or prevnonblank py3eval readfile remote_expr 
 
-"--- syntax above generated by mkvimvim ---
+"--- syntax here and above generated by mkvimvim ---
 " Special Vim Highlighting (not automatic) {{{1
 
 " commands not picked up by the generator (due to non-standard format)
@@ -93,17 +96,17 @@ endif
 
 " Numbers {{{2
 " =======
-syn match vimNumber    "\<\d\+\([lL]\|\.\d\+\)\="
-syn match vimNumber    "-\d\+\([lL]\|\.\d\+\)\="
+syn match vimNumber    "\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
+syn match vimNumber    "-\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\="  skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
 syn match vimNumber    "\<0[xX]\x\+"
 syn match vimNumber    "#\x\{6}"
 
 " All vimCommands are contained by vimIsCommands. {{{2
 syn match vimCmdSep    "[:|]\+"        skipwhite nextgroup=vimAddress,vimAutoCmd,vimCommand,vimExtCmd,vimFilter,vimLet,vimMap,vimMark,vimSet,vimSyntax,vimUserCmd
 syn match vimIsCommand "\<\h\w*\>"     contains=vimCommand
-syn match vimVar               "\<[bwglsav]:\K\k*\>"
-syn match vimVar        contained      "\<\K\k*\>"
-syn match vimFBVar      contained   "\<[bwglsav]:\K\k*\>"
+syn match vimVar        contained      "\<\h[a-zA-Z0-9#_]*\>"
+syn match vimVar               "\<[bwglsav]:\h[a-zA-Z0-9#_]*\>"
+syn match vimFBVar      contained   "\<[bwglsav]:\h[a-zA-Z0-9#_]*\>"
 syn keyword vimCommand  contained      in
 
 " Insertions And Appends: insert append {{{2
@@ -116,14 +119,14 @@ syn region vimInsert      matchgroup=vimCommand start="^[: \t]*\(\d\+\(,\d\+\)\=\)\=i
 " =======
 syn match   vimBehave  "\<be\%[have]\>" skipwhite nextgroup=vimBehaveModel,vimBehaveError
 syn keyword vimBehaveModel contained   mswin   xterm
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
  syn match   vimBehaveError contained  "[^ ]\+"
 endif
 
 " Filetypes {{{2
 " =========
 syn match   vimFiletype        "\<filet\%[ype]\(\s\+\I\i*\)*"  skipwhite contains=vimFTCmd,vimFTOption,vimFTError
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
  syn match   vimFTError  contained     "\I\i*"
 endif
 syn keyword vimFTCmd    contained      filet[ype]
@@ -131,41 +134,42 @@ syn keyword vimFTOption contained detect indent off on plugin
 
 " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
-syn cluster vimAugroupList     contains=vimIsCommand,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
+syn cluster vimAugroupList     contains=vimIsCommand,vimCommand,vimUserCmd,vimExecute,vimNotFunc,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
 if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'a'
- syn region  vimAugroup        fold start="\<aug\%[roup]\>\s\+\K\k*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"   contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
+ syn region  vimAugroup        fold start="\<aug\%[roup]\>\s\+\h\w*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"   contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
 else
- syn region  vimAugroup        start="\<aug\%[roup]\>\s\+\K\k*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"        contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
+ syn region  vimAugroup        start="\<aug\%[roup]\>\s\+\h\w*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"        contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
 endif
 syn match   vimAugroup "aug\%[roup]!" contains=vimAugroupKey
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
  syn match   vimAugroupError   "\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
 endif
 syn keyword vimAugroupKey contained    aug[roup]
 
 " Operators: {{{2
 " =========
-syn cluster    vimOperGroup    contains=vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue
+" COMBAK: vimOperParen used to have "oneline"
+syn cluster    vimOperGroup    contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue
 syn match      vimOper "\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}"       skipwhite nextgroup=vimString,vimSpecFile
 syn match      vimOper "||\|&&\|[-+.]" skipwhite nextgroup=vimString,vimSpecFile
-syn region     vimOperParen    oneline matchgroup=vimParenSep  start="(" end=")" contains=@vimOperGroup
-syn region     vimOperParen    oneline matchgroup=vimSep       start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
-if !exists("g:vimsyn_noerror")
+syn region     vimOperParen    matchgroup=vimParenSep  start="(" end=")" contains=@vimOperGroup
+syn region     vimOperParen    matchgroup=vimSep       start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
  syn match     vimOperError    ")"
 endif
 
 " Functions : Tag is provided for those who wish to highlight tagged functions {{{2
 " =========
 syn cluster    vimFuncList     contains=vimCommand,vimFunctionError,vimFuncKey,Tag,vimFuncSID
-syn cluster    vimFuncBodyList contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIf,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimHighlight,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUserCommand
+syn cluster    vimFuncBodyList contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIf,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimHighlight,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUnmap,vimUserCommand
 syn match      vimFunction     "\<fu\%[nction]!\=\s\+\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*("   contains=@vimFuncList nextgroup=vimFuncBody
 
 if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'f'
  syn region    vimFuncBody  contained  fold start="\ze("       matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)"             contains=@vimFuncBodyList
-else                                                                                                          
+else
  syn region    vimFuncBody  contained  start="\ze("    matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)"             contains=@vimFuncBodyList
 endif
-syn match      vimFuncVar   contained  "a:\(\K\k*\|\d\+\)"
+syn match      vimFuncVar   contained  "a:\(\h\w*\|\d\+\)"
 syn match      vimFuncSID   contained  "\c<sid>\|\<s:"
 syn keyword    vimFuncKey   contained  fu[nction]
 syn match      vimFuncBlank contained  "\s\+"
@@ -194,14 +198,14 @@ syn match vimUserAttrb    contained       "-cou\%[nt]=\d\+"       contains=vimNumber,vimOper,vi
 syn match      vimUserAttrb    contained       "-bang\=\>"     contains=vimOper,vimUserAttrbKey
 syn match      vimUserAttrb    contained       "-bar\>"        contains=vimOper,vimUserAttrbKey
 syn match      vimUserAttrb    contained       "-re\%[gister]\>"       contains=vimOper,vimUserAttrbKey
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
  syn match     vimUserCmdError contained       "\S\+\>"
 endif
 syn case ignore
 syn keyword    vimUserAttrbKey   contained     bar     ban[g]  cou[nt] ra[nge] com[plete]      n[args] re[gister]
-syn keyword    vimUserAttrbCmplt contained     augroup buffer command dir environment event expression file function help highlight mapping menu option shellcmd something tag tag_listfiles var
+syn keyword    vimUserAttrbCmplt contained     augroup buffer color command compiler cscope dir environment event expression file file_in_path filetype function help highlight locale mapping menu option shellcmd sign syntax tag tag_listfiles var
 syn keyword    vimUserAttrbCmplt contained     custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
-syn match      vimUserAttrbCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%(#\u\w*\)\+\|\u\w*\)"hs=s+1 nextgroup=vimUserCmdError
+syn match      vimUserAttrbCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%(#\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
 
 syn case match
 syn match      vimUserAttrbCmplt contained     "custom,\u\w*"
@@ -241,7 +245,7 @@ syn match   vimStringCont   contained       +\(\\\\\|.\)\{-}[^\\]"+
 syn cluster    vimSubstList    contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
 syn cluster    vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
 syn cluster    vimSubstList    add=vimCollection
-syn match      vimSubst        "\(:\+\s*\|^\s*\||\s*\)\<s\%[ubstitute][:[:alpha:]]\@!" nextgroup=vimSubstPat
+syn match      vimSubst        "\(:\+\s*\|^\s*\||\s*\)\<\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[:[:alpha:]]\@!" nextgroup=vimSubstPat
 syn match      vimSubst        "s\%[ubstitute][:#[:alpha:]]\@!"        nextgroup=vimSubstPat contained
 syn match      vimSubst        "/\zss\%[ubstitute]\ze/"        nextgroup=vimSubstPat
 syn match      vimSubst1       contained       "s\%[ubstitute]\>"      nextgroup=vimSubstPat
@@ -267,7 +271,7 @@ syn match   vimMark "\<norm\%[al]\s\zs'[a-zA-Z0-9]" nextgroup=vimOper,vimMarkNumbe
 syn match      vimMarkNumber   "[-+]\d\+"              nextgroup=vimSubst contained contains=vimOper
 syn match      vimPlainMark contained  "'[a-zA-Z0-9]"
 
-syn match      vimRegister     '[^,;[{]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":]'
+syn match      vimRegister     '[^,;[{]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
 syn match      vimRegister     '\<norm\s\+\zs"[a-zA-Z0-9]'
 syn match      vimRegister     '\<normal\s\+\zs"[a-zA-Z0-9]'
 syn match      vimRegister     '@"'
@@ -277,15 +281,15 @@ syn match vimAddress      ",\zs[.$]"      skipwhite nextgroup=vimSubst1
 syn match      vimAddress      "%\ze\a"        skipwhite nextgroup=vimString,vimSubst1
 
 syn match      vimFilter contained     "^!.\{-}\(|\|$\)"               contains=vimSpecFile
-syn match      vimFilter contained     "\A!.\{-}\(|\|$\)"ms=s+1        contains=vimSpecFile
+syn match      vimFilter contained     "\A!.\{-}\(|\|$\)"ms=s+1        contains=vimSpecFile,vimFunction,vimFuncName,vimOperParen
 
 " Complex repeats (:h complex-repeat) {{{2
-syn match      vimCmplxRepeat  '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]'lc=1
-syn match      vimCmplxRepeat  '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\)'
+syn match      vimCmplxRepeat  '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
+syn match      vimCmplxRepeat  '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
 
 " Set command and associated set-options (vimOptions) with comment {{{2
 syn region     vimSet          matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\." end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend oneline contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vimSetString,vimSetMod
-syn region     vimSetEqual     contained       start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation oneline
+syn region     vimSetEqual     contained       start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar oneline
 syn region     vimSetString    contained       start=+="+hs=s+1        skip=+\\\\\|\\"+  end=+"+       contains=vimCtrlChar
 syn match      vimSetSep       contained       "[,:]"
 syn match      vimSetMod       contained       "&vim\=\|[!&?<]\|all&"
@@ -318,13 +322,13 @@ syn case match
 " ====
 syn match      vimMap          "\<map\>!\=\ze\s*[^(]" skipwhite nextgroup=vimMapMod,vimMapLhs
 syn keyword    vimMap          cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] smap snor[emap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
-syn keyword    vimMap          mapc[lear]
+syn keyword    vimMap          mapc[lear] smapc[lear]
 syn keyword    vimUnmap                cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] unm[ap] unm[ap] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
 syn match      vimMapLhs       contained       "\S\+"                  contains=vimNotation,vimCtrlChar skipwhite nextgroup=vimMapRhs
 syn match      vimMapBang      contained       "!"                     skipwhite nextgroup=vimMapMod,vimMapLhs
 syn match      vimMapMod       contained       "\c<\(buffer\|expr\|\(local\)\=leader\|plug\|script\|sid\|unique\|silent\)\+>" contains=vimMapModKey,vimMapModErr skipwhite nextgroup=vimMapMod,vimMapLhs
 syn match      vimMapRhs       contained       ".*" contains=vimNotation,vimCtrlChar   skipnl nextgroup=vimMapRhsExtend
-syn match      vimMapRhsExtend contained       "^\s*\\.*$"                     contains=vimContinue
+syn match      vimMapRhsExtend contained       "^\s*\\.*$"                     contains=vimNotation,vimCtrlChar,vimContinue    skipnl nextgroup=vimMapRhsExtend
 syn case ignore
 syn keyword    vimMapModKey    contained       buffer  expr    leader  localleader     plug    script  sid     silent  unique
 syn case match
@@ -344,7 +348,7 @@ syn match   vimMenuBang     "!"     contained skipwhite nextgroup=@vimMenuList
 " Angle-Bracket Notation (tnx to Michael Geddes) {{{2
 " ======================
 syn case ignore
-syn match      vimNotation     "\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|space\|k\=\(page\)\=\(\|down\|up\)\)>" contains=vimBracket
+syn match      vimNotation     "\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\(page\)\=\(\|down\|up\|k\d\>\)\)>" contains=vimBracket
 syn match      vimNotation     "\(\\\|<lt>\)\=<\([scam2-4]-\)\{0,4}\(right\|left\|middle\)\(mouse\)\=\(drag\|release\)\=>"     contains=vimBracket
 syn match      vimNotation     "\(\\\|<lt>\)\=<\(bslash\|plug\|sid\|space\|bar\|nop\|nul\|lt\)>"               contains=vimBracket
 syn match      vimNotation     '\(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1                     contains=vimBracket
@@ -356,13 +360,13 @@ syn case match
 " User Function Highlighting {{{2
 " (following Gautam Iyer's suggestion)
 " ==========================
-syn match vimFunc              "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("             contains=vimFuncName,vimUserFunc,vimExecute
-syn match vimUserFunc contained        "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"       contains=vimNotation
+syn match vimFunc              "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("              contains=vimFuncName,vimUserFunc,vimExecute
+syn match vimUserFunc contained        "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_]\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"        contains=vimNotation
 syn match vimNotFunc   "\<if\>\|\<el\%[seif]\>\|\<return\>\|\<while\>"
 
 " Errors And Warnings: {{{2
 " ====================
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
  syn match     vimFunctionError        "\s\zs[a-z0-9]\i\{-}\ze\s*("                    contained contains=vimFuncKey,vimFuncBlank
 " syn match    vimFunctionError        "\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)[0-9]\i\{-}\ze\s*("   contained contains=vimFuncKey,vimFuncBlank
  syn match     vimElseIfErr    "\<else\s\+if\>"
@@ -379,7 +383,7 @@ syn match   vimNormCmds contained   ".*$"
 syn match      vimGroupList    contained       "@\=[^ \t,]*"   contains=vimGroupSpecial,vimPatSep
 syn match      vimGroupList    contained       "@\=[^ \t,]*,"  nextgroup=vimGroupList contains=vimGroupSpecial,vimPatSep
 syn keyword    vimGroupSpecial contained       ALL     ALLBUT  CONTAINED       TOP
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
  syn match     vimSynError     contained       "\i\+"
  syn match     vimSynError     contained       "\i\+=" nextgroup=vimGroupList
 endif
@@ -389,10 +393,11 @@ syn match vimSynNextgroup contained       "nextgroup="    nextgroup=vimGroupList
 
 syn match      vimSyntax       "\<sy\%[ntax]\>"        contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
 syn match      vimAuSyntax     contained       "\s+sy\%[ntax]" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
+syn cluster vimFuncBodyList add=vimSyntax
 
 " Syntax: case {{{2
 syn keyword    vimSynType      contained       case    skipwhite nextgroup=vimSynCase,vimSynCaseError
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
  syn match     vimSynCaseError contained       "\i\+"
 endif
 syn keyword    vimSynCase      contained       ignore  match
@@ -402,28 +407,32 @@ syn keyword       vimSynType      contained       clear   skipwhite nextgroup=vimGroupList
 
 " Syntax: cluster {{{2
 syn keyword    vimSynType      contained       cluster skipwhite nextgroup=vimClusterName
-syn region     vimClusterName  contained       matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="$\||" contains=vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
+syn region     vimClusterName  contained       matchgroup=vimGroupName start="\h\w*" skip="\\\\\|\\|" matchgroup=vimSep end="$\||" contains=vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
 syn match      vimGroupAdd     contained       "add="  nextgroup=vimGroupList
 syn match      vimGroupRem     contained       "remove="       nextgroup=vimGroupList
+syn cluster vimFuncBodyList add=vimSynType,vimGroupAdd,vimGroupRem
 
 " Syntax: include {{{2
 syn keyword    vimSynType      contained       include skipwhite nextgroup=vimGroupList
+syn cluster vimFuncBodyList add=vimSynType
 
 " Syntax: keyword {{{2
 syn cluster    vimSynKeyGroup  contains=vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
 syn keyword    vimSynType      contained       keyword skipwhite nextgroup=vimSynKeyRegion
-syn region     vimSynKeyRegion contained oneline keepend       matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="|\|$" contains=@vimSynKeyGroup
+syn region     vimSynKeyRegion contained oneline keepend       matchgroup=vimGroupName start="\h\w*" skip="\\\\\|\\|" matchgroup=vimSep end="|\|$" contains=@vimSynKeyGroup
 syn match      vimSynKeyOpt    contained       "\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
+syn cluster vimFuncBodyList add=vimSynType
 
 " Syntax: match {{{2
 syn cluster    vimSynMtchGroup contains=vimMtchComment,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation
 syn keyword    vimSynType      contained       match   skipwhite nextgroup=vimSynMatchRegion
-syn region     vimSynMatchRegion       contained keepend       matchgroup=vimGroupName start="\k\+" matchgroup=vimSep end="|\|$" contains=@vimSynMtchGroup
+syn region     vimSynMatchRegion       contained keepend       matchgroup=vimGroupName start="\h\w*" matchgroup=vimSep end="|\|$" contains=@vimSynMtchGroup
 syn match      vimSynMtchOpt   contained       "\<\(conceal\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
 if has("conceal")
- syn match     vimSynMtchOpt   contained       "\<cchar="      nextgroup=VimSynMtchCchar
+ syn match     vimSynMtchOpt   contained       "\<cchar="      nextgroup=vimSynMtchCchar
  syn match     vimSynMtchCchar contained       "\S"
 endif
+syn cluster vimFuncBodyList add=vimSynMtchGroup
 
 " Syntax: off and on {{{2
 syn keyword    vimSynType      contained       enable  list    manual  off     on      reset
@@ -432,7 +441,7 @@ syn keyword vimSynType      contained       enable  list    manual  off     on      reset
 syn cluster    vimSynRegPatGroup       contains=vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
 syn cluster    vimSynRegGroup  contains=vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
 syn keyword    vimSynType      contained       region  skipwhite nextgroup=vimSynRegion
-syn region     vimSynRegion    contained keepend       matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" end="|\|$" contains=@vimSynRegGroup
+syn region     vimSynRegion    contained keepend       matchgroup=vimGroupName start="\h\w*" skip="\\\\\|\\|" end="|\|$" contains=@vimSynRegGroup
 syn match      vimSynRegOpt    contained       "\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
 syn match      vimSynReg       contained       "\(start\|skip\|end\)="he=e-1   nextgroup=vimSynRegPat
 syn match      vimSynMtchGrp   contained       "matchgroup="   nextgroup=vimGroup,vimHLGroup
@@ -444,11 +453,12 @@ syn match vimSynPatMod    contained       "lc=\d\+," nextgroup=vimSynPatMod
 syn region     vimSynPatRange  contained       start="\["      skip="\\\\\|\\]"   end="]"
 syn match      vimSynNotPatRange       contained       "\\\\\|\\\["
 syn match      vimMtchComment  contained       '"[^"]\+$'
+syn cluster vimFuncBodyList add=vimSynType
 
 " Syntax: sync {{{2
 " ============
 syn keyword vimSynType contained       sync    skipwhite       nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
  syn match     vimSyncError    contained       "\i\+"
 endif
 syn keyword    vimSyncC        contained       ccomment        clear   fromstart
@@ -457,9 +467,9 @@ syn keyword vimSyncRegion   contained       region  skipwhite       nextgroup=vimSynReg
 syn match      vimSyncLinebreak        contained       "\<linebreaks=" skipwhite       nextgroup=vimNumber
 syn keyword    vimSyncLinecont contained       linecont        skipwhite       nextgroup=vimSynRegPat
 syn match      vimSyncLines    contained       "\(min\|max\)\=lines="  nextgroup=vimNumber
-syn match      vimSyncGroupName        contained       "\k\+"  skipwhite       nextgroup=vimSyncKey
+syn match      vimSyncGroupName        contained       "\h\w*" skipwhite       nextgroup=vimSyncKey
 syn match      vimSyncKey      contained       "\<groupthere\|grouphere\>"     skipwhite nextgroup=vimSyncGroup
-syn match      vimSyncGroup    contained       "\k\+"  skipwhite       nextgroup=vimSynRegPat,vimSyncNone
+syn match      vimSyncGroup    contained       "\h\w*" skipwhite       nextgroup=vimSynRegPat,vimSyncNone
 syn keyword    vimSyncNone     contained       NONE
 
 " Additional IsCommand, here by reasons of precedence {{{2
@@ -469,9 +479,12 @@ syn match  vimIsCommand    "<Bar>\s*\a\+"  transparent contains=vimCommand,vimNotatio
 " Highlighting {{{2
 " ============
 syn cluster    vimHighlightCluster             contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
+ syn match     vimHiCtermError contained       "[^0-9]\i*"
+endif
 syn match      vimHighlight    "\<hi\%[ghlight]\>"     skipwhite nextgroup=vimHiBang,@vimHighlightCluster
 syn match      vimHiBang       contained       "!"     skipwhite nextgroup=@vimHighlightCluster
-               
+
 syn match      vimHiGroup      contained       "\i\+"
 syn case ignore
 syn keyword    vimHiAttrib     contained       none bold inverse italic reverse standout underline undercurl
@@ -480,36 +493,36 @@ syn case match
 syn match      vimHiAttribList contained       "\i\+"  contains=vimHiAttrib
 syn match      vimHiAttribList contained       "\i\+,"he=e-1   contains=vimHiAttrib nextgroup=vimHiAttribList
 syn case ignore
-syn keyword    vimHiCtermColor contained       black blue brown cyan darkBlue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow
+syn keyword    vimHiCtermColor contained       black blue brown cyan darkblue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow
+syn match      vimHiCtermColor contained       "\<color\d\{1,3}\>"
 
 syn case match
 syn match      vimHiFontname   contained       "[a-zA-Z\-*]\+"
 syn match      vimHiGuiFontname        contained       "'[a-zA-Z\-* ]\+'"
 syn match      vimHiGuiRgb     contained       "#\x\{6}"
-if !exists("g:vimsyn_noerror")
- syn match     vimHiCtermError contained       "[^0-9]\i*"
-endif
 
 " Highlighting: hi group key=arg ... {{{2
 syn cluster    vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
 syn region     vimHiKeyList    contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||"      contains=@vimHiCluster
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
  syn match     vimHiKeyError   contained       "\i\+="he=e-1
 endif
 syn match      vimHiTerm       contained       "\cterm="he=e-1         nextgroup=vimHiAttribList
 syn match      vimHiStartStop  contained       "\c\(start\|stop\)="he=e-1      nextgroup=vimHiTermcap,vimOption
 syn match      vimHiCTerm      contained       "\ccterm="he=e-1                nextgroup=vimHiAttribList
-syn match      vimHiCtermFgBg  contained       "\ccterm[fb]g="he=e-1   nextgroup=vimNumber,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
+syn match      vimHiCtermFgBg  contained       "\ccterm[fb]g="he=e-1   nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
 syn match      vimHiGui        contained       "\cgui="he=e-1          nextgroup=vimHiAttribList
 syn match      vimHiGuiFont    contained       "\cfont="he=e-1         nextgroup=vimHiFontname
 syn match      vimHiGuiFgBg    contained       "\cgui\%([fb]g\|sp\)="he=e-1    nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
 syn match      vimHiTermcap    contained       "\S\+"          contains=vimNotation
+syn match      vimHiNmbr       contained       '\d\+'
 
 " Highlight: clear {{{2
 syn keyword    vimHiClear      contained       clear   nextgroup=vimHiGroup
 
 " Highlight: link {{{2
-syn region     vimHiLink       contained oneline matchgroup=vimCommand start="\<\(def\s\+\)\=link\>\|\<def\>" end="$"  contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
+syn region     vimHiLink       contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$"     contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
+syn cluster vimFuncBodyList add=vimHiLink
 
 " Control Characters {{{2
 " ==================
@@ -527,8 +540,8 @@ syn match   vimCommentTitleLeader   '"\s\+'ms=s+1   contained
 " ====================
 syn match      vimSearch       '^\s*[/?].*'            contains=vimSearchDelim
 syn match      vimSearchDelim  '^\s*\zs[/?]\|[/?]$'    contained
-syn region     vimGlobal       matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/'
-syn region     vimGlobal       matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/'
+syn region     vimGlobal       matchgroup=Statement start='\<g\%[lobal]!\=/'  skip='\\.' end='/'       skipwhite nextgroup=vimSubst
+syn region     vimGlobal       matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/'       skipwhite nextgroup=vimSubst
 
 " Scripts  : perl,ruby : Benoit Cerrina {{{2
 " =======    python,tcl: Johannes Zellner
@@ -548,11 +561,16 @@ if !exists("g:vimsyn_embed")
 endif
 
 " [-- lua --] {{{3
-let s:luapath= expand("<sfile>:p:h")."/lua.vim"
+let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
 if !filereadable(s:luapath)
- let s:luapath= globpath(&rtp,"syntax/lua.vim")
+ for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
+  if filereadable(fnameescape(s:luapath))
+   let s:luapath= fnameescape(s:luapath)
+   break
+  endif
+ endfor
 endif
-if (g:vimsyn_embed =~ 'p' && has("lua")) && filereadable(s:luapath)
+if (g:vimsyn_embed =~ 'l' && has("lua")) && filereadable(s:luapath)
  unlet! b:current_syntax
  exe "syn include @vimLuaScript ".s:luapath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'l'
@@ -570,9 +588,14 @@ endif
 unlet s:luapath
 
 " [-- perl --] {{{3
-let s:perlpath= expand("<sfile>:p:h")."/perl.vim"
+let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
 if !filereadable(s:perlpath)
- let s:perlpath= globpath(&rtp,"syntax/perl.vim")
+ for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
+  if filereadable(fnameescape(s:perlpath))
+   let s:perlpath= fnameescape(s:perlpath)
+   break
+  endif
+ endfor
 endif
 if (g:vimsyn_embed =~ 'p' && has("perl")) && filereadable(s:perlpath)
  unlet! b:current_syntax
@@ -592,9 +615,14 @@ endif
 unlet s:perlpath
 
 " [-- ruby --] {{{3
-let s:rubypath= expand("<sfile>:p:h")."/ruby.vim"
+let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
 if !filereadable(s:rubypath)
- let s:rubypath= globpath(&rtp,"syntax/ruby.vim")
+ for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
+  if filereadable(fnameescape(s:rubypath))
+   let s:rubypath= fnameescape(s:rubypath)
+   break
+  endif
+ endfor
 endif
 if (g:vimsyn_embed =~ 'r' && has("ruby")) && filereadable(s:rubypath)
  unlet! b:current_syntax
@@ -613,11 +641,16 @@ endif
 unlet s:rubypath
 
 " [-- python --] {{{3
-let s:pythonpath= expand("<sfile>:p:h")."/python.vim"
+let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
 if !filereadable(s:pythonpath)
- let s:pythonpath= globpath(&rtp,"syntax/python.vim")
+ for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
+  if filereadable(fnameescape(s:pythonpath))
+   let s:pythonpath= fnameescape(s:pythonpath)
+   break
+  endif
+ endfor
 endif
-if (g:vimsyn_embed =~ 'P' && has("python")) && filereadable(s:pythonpath)
+if g:vimsyn_embed =~ 'P' && (has("python") || has("python3")) && filereadable(s:pythonpath)
  unlet! b:current_syntax
  exe "syn include @vimPythonScript ".s:pythonpath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'P'
@@ -642,9 +675,14 @@ else
  let s:trytcl= 1
 endif
 if s:trytcl
- let s:tclpath= expand("<sfile>:p:h")."/tcl.vim"
+ let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
  if !filereadable(s:tclpath)
-  let s:tclpath= globpath(&rtp,"syntax/tcl.vim")
+  for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
+   if filereadable(fnameescape(s:tclpath))
+    let s:tclpath= fnameescape(s:tclpath)
+    break
+   endif
+  endfor
  endif
  if (g:vimsyn_embed =~ 't' && has("tcl")) && filereadable(s:tclpath)
   unlet! b:current_syntax
@@ -669,9 +707,14 @@ endif
 unlet s:trytcl
 
 " [-- mzscheme --] {{{3
-let s:mzschemepath= expand("<sfile>:p:h")."/scheme.vim"
+let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
 if !filereadable(s:mzschemepath)
- let s:mzschemepath= globpath(&rtp,"syntax/scheme.vim")
+ for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
+  if filereadable(fnameescape(s:mzschemepath))
+   let s:mzschemepath= fnameescape(s:mzschemepath)
+   break
+  endif
+ endfor
 endif
 if (g:vimsyn_embed =~ 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
  unlet! b:current_syntax
@@ -709,9 +752,6 @@ syn sync match vimAugroupSyncA      groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
 " Highlighting Settings {{{2
 " ====================
 
-hi def link vimAuHighlight     vimHighlight
-hi def link vimSubst1  vimSubst
-hi def link vimBehaveModel     vimBehave
 
 if !exists("g:vimsyn_noerror")
  hi def link vimBehaveError    vimError
@@ -734,21 +774,44 @@ endif
 hi def link vimAbb     vimCommand
 hi def link vimAddress vimMark
 hi def link vimAugroupKey      vimCommand
+hi def link vimAuHighlight     vimHighlight
 hi def link vimAutoCmdOpt      vimOption
 hi def link vimAutoCmd vimCommand
+hi def link vimAutoEvent       Type
 hi def link vimAutoSet vimCommand
+hi def link vimBehaveModel     vimBehave
 hi def link vimBehave  vimCommand
+hi def link vimBracket Delimiter
+hi def link vimCmplxRepeat     SpecialChar
+hi def link vimCommand Statement
+hi def link vimComment Comment
 hi def link vimCommentString   vimString
+hi def link vimCommentTitle    PreProc
 hi def link vimCondHL  vimCommand
+hi def link vimContinue        Special
+hi def link vimCtrlChar        SpecialChar
 hi def link vimEchoHLNone      vimGroup
 hi def link vimEchoHL  vimCommand
+hi def link vimElseIfErr       Error
 hi def link vimElseif  vimCondHL
+hi def link vimEnvvar  PreProc
+hi def link vimError   Error
+hi def link vimFBVar   vimVar
 hi def link vimFgBgAttrib      vimHiAttrib
+hi def link vimFold    Folded
 hi def link vimFTCmd   vimCommand
 hi def link vimFTOption        vimSynType
 hi def link vimFuncKey vimCommand
+hi def link vimFuncName        Function
+hi def link vimFuncSID Special
+hi def link vimFuncVar Identifier
 hi def link vimGroupAdd        vimSynOption
+hi def link vimGroupName       vimGroup
 hi def link vimGroupRem        vimSynOption
+hi def link vimGroupSpecial    Special
+hi def link vimGroup   Type
+hi def link vimHiAttrib        PreProc
+hi def link vimHiClear vimHighlight
 hi def link vimHiCtermFgBg     vimHiTerm
 hi def link vimHiCTerm vimHiTerm
 hi def link vimHighlight       vimCommand
@@ -757,114 +820,103 @@ hi def link vimHiGuiFgBg        vimHiTerm
 hi def link vimHiGuiFont       vimHiTerm
 hi def link vimHiGuiRgb        vimNumber
 hi def link vimHiGui   vimHiTerm
+hi def link vimHiNmbr  Number
 hi def link vimHiStartStop     vimHiTerm
+hi def link vimHiTerm  Type
 hi def link vimHLGroup vimGroup
+hi def link vimHLMod   PreProc
 hi def link vimInsert  vimString
 hi def link vimKeyCode vimSpecFile
+hi def link vimKeyword Statement
 hi def link vimLet     vimCommand
 hi def link vimLineComment     vimComment
 hi def link vimMapBang vimCommand
 hi def link vimMapModKey       vimFuncSID
 hi def link vimMapMod  vimBracket
 hi def link vimMap     vimCommand
+hi def link vimMark    Number
 hi def link vimMarkNumber      vimNumber
 hi def link vimMenuMod vimMapMod
 hi def link vimMenuNameMore    vimMenuName
+hi def link vimMenuName        PreProc
 hi def link vimMtchComment     vimComment
 hi def link vimNorm    vimCommand
+hi def link vimNotation        Special
 hi def link vimNotFunc vimCommand
 hi def link vimNotPatSep       vimString
+hi def link vimNumber  Number
+hi def link vimOperError       Error
+hi def link vimOper    Operator
+hi def link vimOption  PreProc
+hi def link vimParenSep        Delimiter
 hi def link vimPatSepErr       vimPatSep
 hi def link vimPatSepR vimPatSep
+hi def link vimPatSep  SpecialChar
 hi def link vimPatSepZone      vimString
 hi def link vimPatSepZ vimPatSep
+hi def link vimPattern Type
 hi def link vimPlainMark       vimMark
 hi def link vimPlainRegister   vimRegister
+hi def link vimRegister        SpecialChar
+hi def link vimScriptDelim     Comment
+hi def link vimSearchDelim     Statement
 hi def link vimSearch  vimString
+hi def link vimSep     Delimiter
 hi def link vimSetMod  vimOption
+hi def link vimSetSep  Statement
 hi def link vimSetString       vimString
+hi def link vimSpecFile        Identifier
 hi def link vimSpecFileMod     vimSpecFile
+hi def link vimSpecial Type
+hi def link vimStatement       Statement
 hi def link vimStringCont      vimString
+hi def link vimString  String
+hi def link vimSubst1  vimSubst
+hi def link vimSubstDelim      Delimiter
+hi def link vimSubstFlags      Special
+hi def link vimSubstSubstr     SpecialChar
 hi def link vimSubstTwoBS      vimString
 hi def link vimSubst   vimCommand
+hi def link vimSynCaseError    Error
+hi def link vimSynCase Type
+hi def link vimSyncC   Type
+hi def link vimSyncError       Error
 hi def link vimSyncGroupName   vimGroupName
 hi def link vimSyncGroup       vimGroupName
+hi def link vimSyncKey Type
+hi def link vimSyncNone        Type
 hi def link vimSynContains     vimSynOption
+hi def link vimSynError        Error
 hi def link vimSynKeyContainedin       vimSynContains
 hi def link vimSynKeyOpt       vimSynOption
 hi def link vimSynMtchGrp      vimSynOption
 hi def link vimSynMtchOpt      vimSynOption
 hi def link vimSynNextgroup    vimSynOption
 hi def link vimSynNotPatRange  vimSynRegPat
+hi def link vimSynOption       Special
 hi def link vimSynPatRange     vimString
 hi def link vimSynRegOpt       vimSynOption
 hi def link vimSynRegPat       vimString
+hi def link vimSynReg  Type
 hi def link vimSyntax  vimCommand
 hi def link vimSynType vimSpecial
+hi def link vimTodo    Todo
 hi def link vimUnmap   vimMap
+hi def link vimUserAttrbCmpltFunc      Special
 hi def link vimUserAttrbCmplt  vimSpecial
 hi def link vimUserAttrbKey    vimOption
 hi def link vimUserAttrb       vimSpecial
-hi def link vimUserCommand     vimCommand
-
-hi def link vimAutoEvent       Type
-hi def link vimBracket Delimiter
-hi def link vimCmplxRepeat     SpecialChar
-hi def link vimCommand Statement
-hi def link vimComment Comment
-hi def link vimCommentTitle    PreProc
-hi def link vimContinue        Special
-hi def link vimCtrlChar        SpecialChar
-hi def link vimElseIfErr       Error
-hi def link vimEnvvar  PreProc
-hi def link vimError   Error
-hi def link vimFold    Folded
-hi def link vimFuncName        Function
-hi def link vimFuncSID Special
-hi def link vimFuncVar Identifier
-hi def link vimGroupSpecial    Special
-hi def link vimGroup   Type
-hi def link vimHiAttrib        PreProc
-hi def link vimHiTerm  Type
-hi def link vimHLMod   PreProc
-hi def link vimKeyword Statement
-hi def link vimMark    Number
-hi def link vimMenuName        PreProc
-hi def link vimNotation        Special
-hi def link vimNumber  Number
-hi def link vimOperError       Error
-hi def link vimOper    Operator
-hi def link vimOption  PreProc
-hi def link vimParenSep        Delimiter
-hi def link vimPatSep  SpecialChar
-hi def link vimPattern Type
-hi def link vimRegister        SpecialChar
-hi def link vimScriptDelim     Comment
-hi def link vimSearchDelim     Statement
-hi def link vimSep     Delimiter
-hi def link vimSetSep  Statement
-hi def link vimSpecFile        Identifier
-hi def link vimSpecial Type
-hi def link vimStatement       Statement
-hi def link vimString  String
-hi def link vimSubstDelim      Delimiter
-hi def link vimSubstFlags      Special
-hi def link vimSubstSubstr     SpecialChar
-hi def link vimSynCaseError    Error
-hi def link vimSynCase Type
-hi def link vimSyncC   Type
-hi def link vimSyncError       Error
-hi def link vimSyncKey Type
-hi def link vimSyncNone        Type
-hi def link vimSynError        Error
-hi def link vimSynOption       Special
-hi def link vimSynReg  Type
-hi def link vimTodo    Todo
-hi def link vimUserAttrbCmpltFunc      Special
 hi def link vimUserCmdError    Error
+hi def link vimUserCommand     vimCommand
 hi def link vimUserFunc        Normal
+hi def link vimVar     Identifier
 hi def link vimWarn    WarningMsg
 
 " Current Syntax Variable: {{{2
 let b:current_syntax = "vim"
+
+" ---------------------------------------------------------------------
+" Cleanup: {{{1
+let &cpo = s:keepcpo
+unlet s:keepcpo
 " vim:ts=18  fdm=marker
index d174edf..7af3b89 100644 (file)
@@ -1,13 +1,16 @@
 " Vim syntax file
 " Language:    Vim .viminfo file
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2005 Jun 20
+" Last Change: 2012 Feb 03
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " The lines that are NOT recognized
 syn match viminfoError "^[^\t].*"
 
@@ -35,4 +38,7 @@ hi def link viminfoStatement  Statement
 
 let b:current_syntax = "viminfo"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8 sw=2
index de8f558..2587022 100644 (file)
-" Wget syntax file
-" Filename:     wget.vim
-" Language:     Wget configuration file ( /etc/wgetrc ~/.wgetrc )
-" Maintainer:   Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:          http://gus.gscit.monash.edu.au/~djkea2/vim/syntax/wget.vim
-" Last Change:  2005 Jul 24
+" Vim syntax file
+" Language:     Wget configuration file (/etc/wgetrc ~/.wgetrc)
+" Maintainer:  Doug Kearns <dougkearns@gmail.com>
+" Last Change: 2013 Jun 1
 
-" TODO: all commands are actually underscore and hyphen insensitive, though
-"       they are normally named as listed below
-
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
+if exists("b:current_syntax")
   finish
 endif
 
-syn match   wgetComment "^\s*#.*$" contains=wgetTodo
-
-syn keyword wgetTodo TODO NOTE FIXME XXX contained
-
-syn match   wgetAssignment "^\s*[A-Za-z0-9_-]\+\s*=\s*.*$" contains=wgetCommand,wgetAssignmentOperator,wgetString,wgetBoolean,wgetNumber,wgetValue,wgetQuota,wgetRestriction,wgetTime
-
-syn match   wgetAssignmentOperator "=" contained
+let s:cpo_save = &cpo
+set cpo&vim
 
-syn region  wgetString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained oneline
-syn region  wgetString start=+'+ skip=+\\\\\|\\'+ end=+'+ contained oneline
+syn match wgetComment "#.*$" contains=wgetTodo contained
 
-" Note: make this a match so that always_rest matches properly
-syn case ignore
-syn match   wgetBoolean        "\<on\|off\|always\|never\|1\|0\>" contained
-syn case match
+syn keyword wgetTodo TODO NOTE FIXME XXX contained
 
-syn match   wgetNumber "\<\d\+\|inf\>"         contained
-syn match   wgetQuota  "\<\d\+[kKmM]\?\>"      contained
-syn match   wgetTime   "\<\d\+[smhdw]\>"       contained
+syn region wgetString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained oneline
+syn region wgetString start=+'+ skip=+\\\\\|\\'+ end=+'+ contained oneline
 
 syn case ignore
-syn keyword wgetValue  default binary mega giga micro contained
+syn keyword wgetBoolean on off contained
+syn keyword wgetNumber  inf    contained
 syn case match
 
-syn match   wgetRestriction  "\<\%(windows\|unix\)\%(,nocontrol\)\=\>" contained
-syn match   wgetRestriction  "\<nocontrol\>"                           contained
+syn match wgetNumber "\<\%(\d\+\|inf\)\>" contained
+syn match wgetQuota  "\<\d\+[kKmM]\>"     contained
+syn match wgetTime   "\<\d\+[smhdw]\>"    contained
+
+"{{{ Commands
+let s:commands = map([
+        \ "accept",
+       \ "add_hostdir",
+       \ "adjust_extension",
+       \ "always_rest",
+       \ "ask_password",
+       \ "auth_no_challenge",
+       \ "background",
+       \ "backup_converted",
+       \ "backups",
+       \ "base",
+       \ "bind_address",
+       \ "ca_certificate",
+       \ "ca_directory",
+       \ "cache",
+       \ "certificate",
+       \ "certificate_type",
+       \ "check_certificate",
+       \ "connect_timeout",
+       \ "content_disposition",
+       \ "continue",
+       \ "convert_links",
+       \ "cookies",
+       \ "cut_dirs",
+       \ "debug",
+       \ "default_page",
+       \ "delete_after",
+       \ "dns_cache",
+       \ "dns_timeout",
+       \ "dir_prefix",
+       \ "dir_struct",
+       \ "domains",
+       \ "dot_bytes",
+       \ "dots_in_line",
+       \ "dot_spacing",
+       \ "dot_style",
+       \ "egd_file",
+       \ "exclude_directories",
+       \ "exclude_domains",
+       \ "follow_ftp",
+       \ "follow_tags",
+       \ "force_html",
+       \ "ftp_passwd",
+       \ "ftp_password",
+       \ "ftp_user",
+       \ "ftp_proxy",
+       \ "glob",
+       \ "header",
+       \ "html_extension",
+       \ "htmlify",
+       \ "http_keep_alive",
+       \ "http_passwd",
+       \ "http_password",
+       \ "http_proxy",
+       \ "https_proxy",
+       \ "http_user",
+       \ "ignore_case",
+       \ "ignore_length",
+       \ "ignore_tags",
+       \ "include_directories",
+       \ "inet4_only",
+       \ "inet6_only",
+       \ "input",
+       \ "iri",
+       \ "keep_session_cookies",
+       \ "kill_longer",
+       \ "limit_rate",
+       \ "load_cookies",
+       \ "locale",
+       \ "local_encoding",
+       \ "logfile",
+       \ "login",
+       \ "max_redirect",
+       \ "mirror",
+       \ "netrc",
+       \ "no_clobber",
+       \ "no_parent",
+       \ "no_proxy",
+       \ "numtries",
+       \ "output_document",
+       \ "page_requisites",
+       \ "passive_ftp",
+       \ "passwd",
+       \ "password",
+       \ "post_data",
+       \ "post_file",
+       \ "prefer_family",
+       \ "preserve_permissions",
+       \ "private_key",
+       \ "private_key_type",
+       \ "progress",
+       \ "protocol_directories",
+       \ "proxy_passwd",
+       \ "proxy_password",
+       \ "proxy_user",
+       \ "quiet",
+       \ "quota",
+       \ "random_file",
+       \ "random_wait",
+       \ "read_timeout",
+       \ "reclevel",
+       \ "recursive",
+       \ "referer",
+       \ "reject",
+       \ "relative_only",
+       \ "remote_encoding",
+       \ "remove_listing",
+       \ "restrict_file_names",
+       \ "retr_symlinks",
+       \ "retry_connrefused",
+       \ "robots",
+       \ "save_cookies",
+       \ "save_headers",
+       \ "secure_protocol",
+       \ "server_response",
+       \ "show_all_dns_entries",
+       \ "simple_host_check",
+       \ "span_hosts",
+       \ "spider",
+       \ "strict_comments",
+       \ "sslcertfile",
+       \ "sslcertkey",
+       \ "timeout",
+       \ "time_stamping",
+       \ "use_server_timestamps",
+       \ "tries",
+       \ "trust_server_names",
+       \ "user",
+       \ "use_proxy",
+       \ "user_agent",
+       \ "verbose",
+       \ "wait",
+       \ "wait_retry"],
+       \ "substitute(v:val, '_', '[-_]\\\\=', 'g')")
+"}}}
 
 syn case ignore
-syn match wgetCommand "^\s*accept" contained
-syn match wgetCommand "^\s*add[-_]\=hostdir" contained
-syn match wgetCommand "^\s*always[-_]\=rest" contained
-syn match wgetCommand "^\s*background" contained
-syn match wgetCommand "^\s*backup[-_]\=converted" contained
-syn match wgetCommand "^\s*backups" contained
-syn match wgetCommand "^\s*base" contained
-syn match wgetCommand "^\s*bind[-_]\=address" contained
-syn match wgetCommand "^\s*ca[-_]\=certificate" contained
-syn match wgetCommand "^\s*ca[-_]\=directory" contained
-syn match wgetCommand "^\s*cache" contained
-syn match wgetCommand "^\s*certificate" contained
-syn match wgetCommand "^\s*certificate[-_]\=type" contained
-syn match wgetCommand "^\s*check[-_]\=certificate" contained
-syn match wgetCommand "^\s*connect[-_]\=timeout" contained
-syn match wgetCommand "^\s*continue" contained
-syn match wgetCommand "^\s*convert[-_]\=links" contained
-syn match wgetCommand "^\s*cookies" contained
-syn match wgetCommand "^\s*cut[-_]\=dirs" contained
-syn match wgetCommand "^\s*debug" contained
-syn match wgetCommand "^\s*delete[-_]\=after" contained
-syn match wgetCommand "^\s*dns[-_]\=cache" contained
-syn match wgetCommand "^\s*dns[-_]\=timeout" contained
-syn match wgetCommand "^\s*dir[-_]\=prefix" contained
-syn match wgetCommand "^\s*dir[-_]\=struct" contained
-syn match wgetCommand "^\s*domains" contained
-syn match wgetCommand "^\s*dot[-_]\=bytes" contained
-syn match wgetCommand "^\s*dots[-_]\=in[-_]\=line" contained
-syn match wgetCommand "^\s*dot[-_]\=spacing" contained
-syn match wgetCommand "^\s*dot[-_]\=style" contained
-syn match wgetCommand "^\s*egd[-_]\=file" contained
-syn match wgetCommand "^\s*exclude[-_]\=directories" contained
-syn match wgetCommand "^\s*exclude[-_]\=domains" contained
-syn match wgetCommand "^\s*follow[-_]\=ftp" contained
-syn match wgetCommand "^\s*follow[-_]\=tags" contained
-syn match wgetCommand "^\s*force[-_]\=html" contained
-syn match wgetCommand "^\s*ftp[-_]\=passw\(or\)\=d" contained
-syn match wgetCommand "^\s*ftp[-_]\=user" contained
-syn match wgetCommand "^\s*ftp[-_]\=proxy" contained
-syn match wgetCommand "^\s*glob" contained
-syn match wgetCommand "^\s*header" contained
-syn match wgetCommand "^\s*html[-_]\=extension" contained
-syn match wgetCommand "^\s*htmlify" contained
-syn match wgetCommand "^\s*http[-_]\=keep[-_]\=alive" contained
-syn match wgetCommand "^\s*http[-_]\=passwd" contained
-syn match wgetCommand "^\s*http[-_]\=password" contained
-syn match wgetCommand "^\s*http[-_]\=proxy" contained
-syn match wgetCommand "^\s*https[-_]\=proxy" contained
-syn match wgetCommand "^\s*http[-_]\=user" contained
-syn match wgetCommand "^\s*ignore[-_]\=length" contained
-syn match wgetCommand "^\s*ignore[-_]\=tags" contained
-syn match wgetCommand "^\s*include[-_]\=directories" contained
-syn match wgetCommand "^\s*inet4[-_]\=only" contained
-syn match wgetCommand "^\s*inet6[-_]\=only" contained
-syn match wgetCommand "^\s*input" contained
-syn match wgetCommand "^\s*keep[-_]\=session[-_]\=cookies" contained
-syn match wgetCommand "^\s*kill[-_]\=longer" contained
-syn match wgetCommand "^\s*limit[-_]\=rate" contained
-syn match wgetCommand "^\s*load[-_]\=cookies" contained
-syn match wgetCommand "^\s*logfile" contained
-syn match wgetCommand "^\s*login" contained
-syn match wgetCommand "^\s*mirror" contained
-syn match wgetCommand "^\s*netrc" contained
-syn match wgetCommand "^\s*no[-_]\=clobber" contained
-syn match wgetCommand "^\s*no[-_]\=parent" contained
-syn match wgetCommand "^\s*no[-_]\=proxy" contained
-" Note: this option is deprecated, use 'tries' instead
-syn match wgetCommand "^\s*numtries" contained
-syn match wgetCommand "^\s*output[-_]\=document" contained
-syn match wgetCommand "^\s*page[-_]\=requisites" contained
-syn match wgetCommand "^\s*passive[-_]\=ftp" contained
-syn match wgetCommand "^\s*passwd" contained
-syn match wgetCommand "^\s*password" contained
-syn match wgetCommand "^\s*post[-_]\=data" contained
-syn match wgetCommand "^\s*post[-_]\=file" contained
-syn match wgetCommand "^\s*prefer[-_]\=family" contained
-syn match wgetCommand "^\s*preserve[-_]\=permissions" contained
-syn match wgetCommand "^\s*private[-_]\=key" contained
-syn match wgetCommand "^\s*private[-_]\=key[-_]\=type" contained
-syn match wgetCommand "^\s*progress" contained
-syn match wgetCommand "^\s*protocol[-_]\=directories" contained
-syn match wgetCommand "^\s*proxy[-_]\=passwd" contained
-syn match wgetCommand "^\s*proxy[-_]\=password" contained
-syn match wgetCommand "^\s*proxy[-_]\=user" contained
-syn match wgetCommand "^\s*quiet" contained
-syn match wgetCommand "^\s*quota" contained
-syn match wgetCommand "^\s*random[-_]\=file" contained
-syn match wgetCommand "^\s*random[-_]\=wait" contained
-syn match wgetCommand "^\s*read[-_]\=timeout" contained
-syn match wgetCommand "^\s*reclevel" contained
-syn match wgetCommand "^\s*recursive" contained
-syn match wgetCommand "^\s*referer" contained
-syn match wgetCommand "^\s*reject" contained
-syn match wgetCommand "^\s*relative[-_]\=only" contained
-syn match wgetCommand "^\s*remove[-_]\=listing" contained
-syn match wgetCommand "^\s*restrict[-_]\=file[-_]\=names" contained
-syn match wgetCommand "^\s*retr[-_]\=symlinks" contained
-syn match wgetCommand "^\s*retry[-_]\=connrefused" contained
-syn match wgetCommand "^\s*robots" contained
-syn match wgetCommand "^\s*save[-_]\=cookies" contained
-syn match wgetCommand "^\s*save[-_]\=headers" contained
-syn match wgetCommand "^\s*secure[-_]\=protocol" contained
-syn match wgetCommand "^\s*server[-_]\=response" contained
-" Note: this option was removed in wget 1.8
-syn match wgetCommand "^\s*simple[-_]\=host[-_]\=check" contained
-syn match wgetCommand "^\s*span[-_]\=hosts" contained
-syn match wgetCommand "^\s*spider" contained
-syn match wgetCommand "^\s*strict[-_]\=comments" contained
-syn match wgetCommand "^\s*sslcertfile" contained
-syn match wgetCommand "^\s*sslcertkey" contained
-syn match wgetCommand "^\s*timeout" contained
-syn match wgetCommand "^\s*time[-_]\=stamping" contained
-syn match wgetCommand "^\s*tries" contained
-syn match wgetCommand "^\s*user" contained
-syn match wgetCommand "^\s*use[-_]\=proxy" contained
-syn match wgetCommand "^\s*user[-_]\=agent" contained
-syn match wgetCommand "^\s*verbose" contained
-syn match wgetCommand "^\s*wait" contained
-syn match wgetCommand "^\s*wait[-_]\=retry" contained
+for cmd in s:commands
+  exe 'syn match wgetCommand "' . cmd . '" nextgroup=wgetAssignmentOperator skipwhite contained'
+endfor
 syn case match
 
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_wget_syn_inits")
-  if version < 508
-    let did_wget_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
+syn match wgetStart "^" nextgroup=wgetCommand,wgetComment skipwhite
+syn match wgetAssignmentOperator "=" nextgroup=wgetString,wgetBoolean,wgetNumber,wgetQuota,wgetTime skipwhite contained
 
-  HiLink wgetAssignmentOperator Special
-  HiLink wgetBoolean            Boolean
-  HiLink wgetCommand            Identifier
-  HiLink wgetComment            Comment
-  HiLink wgetNumber             Number
-  HiLink wgetQuota              Number
-  HiLink wgetString             String
-  HiLink wgetTodo               Todo
-  HiLink wgetValue              Constant
-
-  delcommand HiLink
-endif
+hi def link wgetAssignmentOperator Special
+hi def link wgetBoolean                   Boolean
+hi def link wgetCommand                   Identifier
+hi def link wgetComment                   Comment
+hi def link wgetNumber            Number
+hi def link wgetQuota             Number
+hi def link wgetString            String
+hi def link wgetTodo              Todo
 
 let b:current_syntax = "wget"
 
-" vim: ts=8
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: ts=8 fdm=marker:
index d7f1172..5e38952 100644 (file)
@@ -33,7 +33,7 @@ endif
 
 
 " syn region  xdefaultsLabel   start=+^[^:]\{-}:+he=e-1 skip=+\\+ end="$"
-syn match   xdefaultsLabel   +[^:]\{-}:+he=e-1                       contains=xdefaultsPunct,xdefaultsSpecial,xdefaultsLineEnd
+syn match   xdefaultsLabel   +^[^:]\{-}:+he=e-1                       contains=xdefaultsPunct,xdefaultsSpecial,xdefaultsLineEnd
 syn region  xdefaultsValue   keepend start=+:+lc=1 skip=+\\+ end=+$+ contains=xdefaultsSpecial,xdefaultsLabel,xdefaultsLineEnd
 
 syn match   xdefaultsSpecial   contained +#override+
@@ -75,9 +75,9 @@ endif
 syn region     xdefaultsIncluded       contained start=+"+ skip=+\\\\\|\\"+ end=+"+
 syn match      xdefaultsIncluded       contained "<[^>]*>"
 syn match      xdefaultsInclude        "^\s*#\s*include\>\s*["<]" contains=xdefaultsIncluded
-syn cluster    xdefaultsPreProcGroup   contains=xdefaultsPreProc,xdefaultsIncluded,xdefaultsInclude,xdefaultsDefine
-syn region     xdefaultsDefine         start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine
-syn region     xdefaultsPreProc        start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine
+syn cluster    xdefaultsPreProcGroup   contains=xdefaultsPreProc,xdefaultsIncluded,xdefaultsInclude,xdefaultsDefine,xdefaultsCppOut,xdefaultsCppOut2,xdefaultsCppSkip
+syn region     xdefaultsDefine         start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine,xdefaultsLabel,xdefaultsValue
+syn region     xdefaultsPreProc        start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine,xdefaultsLabel,xdefaultsValue
 
 
 
index 4658b46..62784d2 100644 (file)
@@ -1,8 +1,8 @@
 " Vim syntax file
 " This is a GENERATED FILE. Please always refer to source file at the URI below.
 " Language: XF86Config (XFree86 configuration file)
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2005 Jul 12
+" Former Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2010 Nov 01
 " URL: http://trific.ath.cx/Ftp/vim/syntax/xf86conf.vim
 " Required Vim Version: 6.0
 "
@@ -63,7 +63,7 @@ syn match xf86confModeLineValue "\"[^\"]\+\"\(\_s\+[0-9.]\+\)\{9}" nextgroup=xf8
 
 " Sections and subsections
 if b:xf86conf_xfree86_version >= 4
-       syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,xf86confSectionError
+       syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\|InputClass\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,xf86confSectionError
        syn region xf86confSectionModule matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Module\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionAny,xf86confComment,xf86confOption,xf86confKeyword
        syn region xf86confSectionMonitor matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Monitor\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment,xf86confOption,xf86confKeyword
        syn region xf86confSectionModes matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Modes\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment
@@ -165,7 +165,7 @@ syn match xf86confSync "\(\s\+[+-][CHV]_*Sync\)\+" contained
 
 " Synchronization
 if b:xf86conf_xfree86_version >= 4
-       syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\)\""
+       syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\|InputClass\)\""
        syn sync match xf86confSyncSectionModule grouphere xf86confSectionModule "^\s*Section\s\+\"Module\""
        syn sync match xf86confSyncSectionModes groupthere xf86confSectionModes "^\s*Section\s\+\"Modes\""
 else
index 58d6db0..7b503ab 100644 (file)
@@ -3,7 +3,7 @@
 " Maintainer:  Johannes Zellner <johannes@zellner.org>
 "              Author and previous maintainer:
 "              Paul Siegmann <pauls@euronet.nl>
-" Last Change: 2009-07-13 21:26:55
+" Last Change: 2013 Jun 07
 " Filenames:   *.xml
 " $Id: xml.vim,v 1.3 2006/04/11 21:32:00 vimboss Exp $
 
@@ -81,7 +81,7 @@ syn match   xmlEqual +=+ display
 "      ^^^^^^^^^^^^^
 "
 syn match   xmlAttrib
-    \ +[-'"<]\@<!\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>\(['">]\@!\|$\)+
+    \ +[-'"<]\@1<!\<[a-zA-Z:_][-.0-9a-zA-Z:_]*\>\%(['">]\@!\|$\)+
     \ contained
     \ contains=xmlAttribPunct,@xmlAttribHook
     \ display
@@ -98,14 +98,14 @@ syn match   xmlAttrib
 "
 if exists("g:xml_namespace_transparent")
 syn match   xmlNamespace
-    \ +\(<\|</\)\@<=[^ /!?<>"':]\+[:]\@=+
+    \ +\(<\|</\)\@2<=[^ /!?<>"':]\+[:]\@=+
     \ contained
     \ contains=@xmlNamespaceHook
     \ transparent
     \ display
 else
 syn match   xmlNamespace
-    \ +\(<\|</\)\@<=[^ /!?<>"':]\+[:]\@=+
+    \ +\(<\|</\)\@2<=[^ /!?<>"':]\+[:]\@=+
     \ contained
     \ contains=@xmlNamespaceHook
     \ display
@@ -122,7 +122,7 @@ endif
 "  ^^^
 "
 syn match   xmlTagName
-    \ +[<]\@<=[^ /!?<>"']\++
+    \ +<\@1<=[^ /!?<>"']\++
     \ contained
     \ contains=xmlNamespace,xmlAttribPunct,@xmlTagHook
     \ display
index b057946..74b3c66 100644 (file)
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:    X Pixmap v2
 " Maintainer:  Steve Wall (hitched97@velnet.com)
-" Last Change: 2008 May 28
+" Last Change: 2012 Jun 01
+"              (Dominique Pelle added @Spell)
 " Version:     5.8
 "
 " Made from xpm.vim by Ronald Schild <rs@scutum.de>
@@ -14,9 +15,12 @@ elseif exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn region  xpm2PixelString    start="^"  end="$"  contains=@xpm2Colors
 syn keyword xpm2Todo           TODO FIXME XXX  contained
-syn match   xpm2Comment                "\!.*$"  contains=xpm2Todo
+syn match   xpm2Comment                "\!.*$"  contains=@Spell,xpm2Todo
 
 
 if version < 508
@@ -159,4 +163,6 @@ delcommand Hi
 
 let b:current_syntax = "xpm2"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8:sw=2:noet:
index dcb2685..0c6b72a 100644 (file)
@@ -1,10 +1,11 @@
 " Vim syntax file
 " Language:    XQuery
-" Author:      Jean-Marc Vanel <http://jmvanel.free.fr/>
+" Author: René Neumann <necoro@necoro.eu>
+" Author: Steve Spigarelli <http://spig.net/>
+" Original Author:     Jean-Marc Vanel <http://jmvanel.free.fr/>
 " Last Change: mar jui 12 18:04:05 CEST 2005
 " Filenames:   *.xq
 " URL:         http://jmvanel.free.fr/vim/xquery.vim
-" $Id: xquery.vim,v 1.1 2005/07/18 21:44:56 vimboss Exp $
 
 " REFERENCES:
 "   [1] http://www.w3.org/TR/xquery/
@@ -14,22 +15,26 @@ if exists("b:current_syntax")
     finish
 endif
 
+" - is allowed in keywords
+setlocal iskeyword+=-
+
 runtime syntax/xml.vim
 
 syn case match
 
 " From XQuery grammar:
-syn    keyword xqueryStatement ancestor ancestor-or-self and as ascending at attribute base-uri by case cast castable child collation construction declare default descendant descendant-or-self descending div document element else empty encoding eq every except external following following-sibling for function ge greatest gt idiv if import in inherit-namespaces instance intersect is le least let lt mod module namespace ne no of or order ordered ordering parent preceding preceding-sibling preserve return satisfies schema self some stable strip then to treat typeswitch union unordered validate variable version where xmlspace xquery yes
+syn keyword xqStatement ancestor ancestor-or-self and as ascending at attribute base-uri boundary-space by case cast castable child collation construction declare default descendant descendant-or-self descending div document element else empty encoding eq every except external following following-sibling for function ge greatest gt idiv if import in inherit-namespaces instance intersect is le least let lt mod module namespace ne no of or order ordered ordering parent preceding preceding-sibling preserve return satisfies schema self some stable strip then to treat typeswitch union unordered validate variable version where xmlspace xquery yes
 
 " TODO contains clashes with vim keyword
-syn    keyword xqueryFunction abs adjust-date-to-timezone adjust-date-to-timezone adjust-dateTime-to-timezone adjust-dateTime-to-timezone adjust-time-to-timezone adjust-time-to-timezone avg base-uri base-uri boolean ceiling codepoint-equal codepoints-to-string collection collection compare concat count current-date current-dateTime current-time data dateTime day-from-date day-from-dateTime days-from-duration deep-equal deep-equal default-collation distinct-values distinct-values doc doc-available document-uri empty ends-with ends-with error error error error escape-uri exactly-one exists false floor hours-from-dateTime hours-from-duration hours-from-time id id idref idref implicit-timezone in-scope-prefixes index-of index-of insert-before lang lang last local-name local-name local-name-from-QName lower-case matches matches max max min min minutes-from-dateTime minutes-from-duration minutes-from-time month-from-date month-from-dateTime months-from-duration name name namespace-uri namespace-uri namespace-uri-for-prefix namespace-uri-from-QName nilled node-name normalize-space normalize-space normalize-unicode normalize-unicode not number number one-or-more position prefix-from-QName QName remove replace replace resolve-QName resolve-uri resolve-uri reverse root root round round-half-to-even round-half-to-even seconds-from-dateTime seconds-from-duration seconds-from-time starts-with starts-with static-base-uri string string string-join string-length string-length string-to-codepoints subsequence subsequence substring substring substring-after substring-after substring-before substring-before sum sum timezone-from-date timezone-from-dateTime timezone-from-time tokenize tokenize trace translate true unordered upper-case year-from-date year-from-dateTime years-from-duration zero-or-one
+syn    keyword xqFunction abs adjust-date-to-timezone adjust-date-to-timezone adjust-dateTime-to-timezone adjust-dateTime-to-timezone adjust-time-to-timezone adjust-time-to-timezone avg base-uri base-uri boolean ceiling codepoint-equal codepoints-to-string collection collection compare concat count current-date current-dateTime current-time data dateTime day-from-date day-from-dateTime days-from-duration deep-equal deep-equal default-collation distinct-values distinct-values doc doc-available document-uri empty ends-with ends-with error error error error escape-uri exactly-one exists false floor hours-from-dateTime hours-from-duration hours-from-time id id idref idref implicit-timezone in-scope-prefixes index-of index-of insert-before lang lang last local-name local-name local-name-from-QName lower-case matches matches max max min min minutes-from-dateTime minutes-from-duration minutes-from-time month-from-date month-from-dateTime months-from-duration name name namespace-uri namespace-uri namespace-uri-for-prefix namespace-uri-from-QName nilled node-name normalize-space normalize-space normalize-unicode normalize-unicode not number number one-or-more position prefix-from-QName QName remove replace replace resolve-QName resolve-uri resolve-uri reverse root root round round-half-to-even round-half-to-even seconds-from-dateTime seconds-from-duration seconds-from-time starts-with starts-with static-base-uri string string string-join string-length string-length string-to-codepoints subsequence subsequence substring substring substring-after substring-after substring-before substring-before sum sum timezone-from-date timezone-from-dateTime timezone-from-time tokenize tokenize trace translate true unordered upper-case year-from-date year-from-dateTime years-from-duration zero-or-one
+
+syn keyword xqOperator add-dayTimeDuration-to-date add-dayTimeDuration-to-dateTime add-dayTimeDuration-to-time add-dayTimeDurations add-yearMonthDuration-to-date add-yearMonthDuration-to-dateTime add-yearMonthDurations base64Binary-equal boolean-equal boolean-greater-than boolean-less-than concatenate date-equal date-greater-than date-less-than dateTime-equal dateTime-greater-than dateTime-less-than dayTimeDuration-equal dayTimeDuration-greater-than dayTimeDuration-less-than divide-dayTimeDuration divide-dayTimeDuration-by-dayTimeDuration divide-yearMonthDuration divide-yearMonthDuration-by-yearMonthDuration except gDay-equal gMonth-equal gMonthDay-equal gYear-equal gYearMonth-equal hexBinary-equal intersect is-same-node multiply-dayTimeDuration multiply-yearMonthDuration node-after node-before NOTATION-equal numeric-add numeric-divide numeric-equal numeric-greater-than numeric-integer-divide numeric-less-than numeric-mod numeric-multiply numeric-subtract numeric-unary-minus numeric-unary-plus QName-equal subtract-dates-yielding-dayTimeDuration subtract-dateTimes-yielding-dayTimeDuration subtract-dayTimeDuration-from-date subtract-dayTimeDuration-from-dateTime subtract-dayTimeDuration-from-time subtract-dayTimeDurations subtract-times subtract-yearMonthDuration-from-date subtract-yearMonthDuration-from-dateTime subtract-yearMonthDurations time-equal time-greater-than time-less-than to union yearMonthDuration-equal yearMonthDuration-greater-than yearMonthDuration-less-than
 
-syn    keyword xqueryOperator add-dayTimeDuration-to-date add-dayTimeDuration-to-dateTime add-dayTimeDuration-to-time add-dayTimeDurations add-yearMonthDuration-to-date add-yearMonthDuration-to-dateTime add-yearMonthDurations base64Binary-equal boolean-equal boolean-greater-than boolean-less-than concatenate date-equal date-greater-than date-less-than dateTime-equal dateTime-greater-than dateTime-less-than dayTimeDuration-equal dayTimeDuration-greater-than dayTimeDuration-less-than divide-dayTimeDuration divide-dayTimeDuration-by-dayTimeDuration divide-yearMonthDuration divide-yearMonthDuration-by-yearMonthDuration except gDay-equal gMonth-equal gMonthDay-equal gYear-equal gYearMonth-equal hexBinary-equal intersect is-same-node multiply-dayTimeDuration multiply-yearMonthDuration node-after node-before NOTATION-equal numeric-add numeric-divide numeric-equal numeric-greater-than numeric-integer-divide numeric-less-than numeric-mod numeric-multiply numeric-subtract numeric-unary-minus numeric-unary-plus QName-equal subtract-dates-yielding-dayTimeDuration subtract-dateTimes-yielding-dayTimeDuration subtract-dayTimeDuration-from-date subtract-dayTimeDuration-from-dateTime subtract-dayTimeDuration-from-time subtract-dayTimeDurations subtract-times subtract-yearMonthDuration-from-date subtract-yearMonthDuration-from-dateTime subtract-yearMonthDurations time-equal time-greater-than time-less-than to union yearMonthDuration-equal yearMonthDuration-greater-than yearMonthDuration-less-than
+syn match xqType "xs:\(\|Datatype\|primitive\|string\|boolean\|float\|double\|decimal\|duration\|dateTime\|time\|date\|gYearMonth\|gYear\|gMonthDay\|gDay\|gMonth\|hexBinary\|base64Binary\|anyURI\|QName\|NOTATION\|\|normalizedString\|token\|language\|IDREFS\|ENTITIES\|NMTOKEN\|NMTOKENS\|Name\|NCName\|ID\|IDREF\|ENTITY\|integer\|nonPositiveInteger\|negativeInteger\|long\|int\|short\|byte\|nonNegativeInteger\|unsignedLong\|unsignedInt\|unsignedShort\|unsignedByte\|positiveInteger\)"
 
-syn    match   xqueryType "xs:\(\|Datatype\|primitive\|string\|boolean\|float\|double\|decimal\|duration\|dateTime\|time\|date\|gYearMonth\|gYear\|gMonthDay\|gDay\|gMonth\|hexBinary\|base64Binary\|anyURI\|QName\|NOTATION\|\|normalizedString\|token\|language\|IDREFS\|ENTITIES\|NMTOKEN\|NMTOKENS\|Name\|NCName\|ID\|IDREF\|ENTITY\|integer\|nonPositiveInteger\|negativeInteger\|long\|int\|short\|byte\|nonNegativeInteger\|unsignedLong\|unsignedInt\|unsignedShort\|unsignedByte\|positiveInteger\)"
 
 " From XPath grammar:
-syn    keyword xqueryXPath some every in in satisfies if then else to div idiv mod union intersect except instance of treat castable cast eq ne lt le gt ge is child descendant attribute self descendant-or-self following-sibling following namespace parent ancestor preceding-sibling preceding ancestor-or-self void item node document-node text comment processing-instruction attribute schema-attribute schema-element
+syn keyword xqXPath some every in in satisfies if then else to div idiv mod union intersect except instance of treat castable cast eq ne lt le gt ge is child descendant attribute self descendant-or-self following-sibling following namespace parent ancestor preceding-sibling preceding ancestor-or-self void item node document-node text comment processing-instruction attribute schema-attribute schema-element
 
 " eXist extensions
 syn    match xqExist "&="
@@ -37,44 +42,41 @@ syn match xqExist "&="
 " XQdoc
 syn    match   XQdoc contained "@\(param\|return\|author\)\>" 
 
-highlight def link     xqueryStatement Statement
-highlight def link     xqueryFunction  Function
-highlight def link     xqueryOperator  Operator
-highlight def link     xqueryType              Type
-highlight def link     xqueryXPath             Operator
-highlight def link     XQdoc                   Special
-highlight def link     xqExist                 Operator
-
-
-"floating point number, with dot, optional exponent
-syn match      cFloat          "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
-"floating point number, starting with a dot, optional exponent
-syn match      cFloat          "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
-"floating point number, without dot, with exponent
-syn match      cFloat          "\d\+e[-+]\=\d\+[fl]\=\>"
-syn match      cNumber         "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
-syn match      cNumber          "\<\d\+\>"
-highlight def link     cNumber Number
-highlight def link     cFloat  Number
-
-syn region     xqComment       start='(:' excludenl end=':)' contains=XQdoc
-highlight def link     xqComment       Comment
-" syntax match xqVariable      "$\w\+"
-syntax match   xqVariable      +$\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>+
-highlight def link     xqVariable      Identifier
-
-" Redefine the default XML highlighting:
-highlight def link     xmlTag          Structure
-highlight def link     xmlTagName      Structure
-highlight def link     xmlEndTag       Structure
-
-syntax match   xqSeparator     ",\|;"
-highlight link xqSeparator     Operator
-
-syn region     xqCode  transparent contained start='{' excludenl end='}' contains=xmlRegionBis,xqComment,xqueryStatement,xmlString,xqSeparator,cNumber,xqVariable keepend extend
+" floating point number, with dot, optional exponent
+syn match xqFloat   "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+" floating point number, starting with a dot, optional exponent
+syn match xqFloat   "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+" floating point number, without dot, with exponent
+syn match xqFloat   "\d\+e[-+]\=\d\+[fl]\=\>"
+syn match xqNumber  "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+syn match xqNumber  "\<\d\+\>"
 
-syn region xmlRegionBis start=+<\z([^ /!?<>"']\+\)+ skip=+<!--\_.\{-}-->+ end=+</\z1\_\s\{-}>+ end=+/>+ fold contains=xmlTag,xmlEndTag,xmlCdata,xmlRegionBis,xmlComment,xmlEntity,xmlProcessing,xqCode keepend extend
+syn region xqString  start=+\z(['"]\)+ skip=+\\.+ end=+\z1+
+syn region xqComment start='(:' excludenl end=':)' contains=XQdoc
 
-syn region     List    transparent start='(' excludenl end=')' contains=xqCode,xmlRegion,xqComment,xqSeparator,xqueryStatement,xqVariable,xqueryType  keepend extend
+syn match xqVariable "$\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>"
+syn match xqSeparator ",\|;"
+syn region xqCode transparent contained start='{' excludenl end='}' contains=xqFunction,xqCode,xmlRegionBis,xqComment,xqStatement,xmlString,xqSeparator,xqNumber,xqVariable,xqString keepend extend
 
+syn region xmlRegionBis start=+<\z([^ /!?<>"']\+\)+ skip=+<!--\_.\{-}-->+ end=+</\z1\_\s\{-}>+ end=+/>+ fold contains=xmlTag,xmlEndTag,xmlCdata,xmlRegionBis,xmlComment,xmlEntity,xmlProcessing,xqCode keepend extend
 
+hi def link xqNumber    Number
+hi def link xqFloat     Number
+hi def link xqString    String
+hi def link xqVariable  Identifier
+hi def link xqComment   Comment
+hi def link xqSeparator Operator
+hi def link xqStatement Statement
+hi def link xqFunction  Function
+hi def link xqOperator  Operator
+hi def link xqType      Type
+hi def link xqXPath     Operator
+hi def link XQdoc       Special
+hi def link xqExist     Operator
+
+" override the xml highlighting
+"hi link xmlTag      Structure
+"hi link xmlTagName  Structure
+"hi link xmlEndTag   Structure
+
+let b:current_syntax = "xquery"
index 888b140..6fd0a46 100644 (file)
 " Vim syntax file
-" Language:     XS (Perl extension interface language)
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl
-" Last Change:  2009-08-14
-
-" Quit when a syntax file was already loaded
-if exists("b:current_syntax")
-    finish
+" Language:    XS (Perl extension interface language)
+" Author:      Autogenerated from perl headers, on an original basis of Michael W. Dodge <sarge@pobox.com>
+" Maintainer:  vim-perl <vim-perl@googlegroups.com>
+" Previous:    Vincent Pit <perl@profvince.com>
+" Last Change: 2013-05-12
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
 endif
 
 " Read the C syntax to start with
-runtime! syntax/c.vim
-
-" XS extentions
-" TODO: Figure out how to look for trailing '='.
-syn keyword xsKeyword   MODULE PACKAGE PREFIX
-syn keyword xsKeyword   OUTPUT: CODE: INIT: PREINIT: INPUT:
-syn keyword xsKeyword   PPCODE: REQUIRE: CLEANUP: BOOT:
-syn keyword xsKeyword   VERSIONCHECK: PROTOTYPES: PROTOTYPE:
-syn keyword xsKeyword   ALIAS: INCLUDE: CASE:
-" TODO: Figure out how to look for trailing '('.
-syn keyword xsMacro     SV EXTEND PUSHs
-syn keyword xsVariable  RETVAL NO_INIT
-"syn match xsCast       "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
-"syn match xsCast       "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
-
-" Define the default highlighting, but only when an item doesn't have highlighting yet
-command -nargs=+ HiLink hi def link <args>
-
-HiLink xsKeyword    Keyword
-HiLink xsMacro      Macro
-HiLink xsVariable   Identifier
-
-delcommand HiLink
+if version < 600
+  source <sfile>:p:h/c.vim
+else
+  runtime! syntax/c.vim
+endif
+
+let xs_superseded = 1 " mark C functions superseded by Perl replacements
+let xs_not_core   = 1 " mark private core functions
+
+if exists("xs_superseded") && xs_superseded
+syn keyword xsSuperseded atof atol calloc clearerr exit fclose feof ferror
+syn keyword xsSuperseded fflush fgetc fgetpos fgets fopen fprintf fputc fputs
+syn keyword xsSuperseded fread free freopen fseek fsetpos fwrite getc getenv
+syn keyword xsSuperseded isalnum isalpha iscntrl isdigit isgraph islower
+syn keyword xsSuperseded isprint ispunct isspace isupper isxdigit malloc
+syn keyword xsSuperseded memcpy memmove memset printf putc rand realloc
+syn keyword xsSuperseded rewind setenv sprintf srand stderr stdin stdout
+syn keyword xsSuperseded strcat strcmp strcpy strdup strlen strncat strncmp
+syn keyword xsSuperseded strncpy strstr strtod strtol strtoul system tolower
+syn keyword xsSuperseded toupper ungetc
+endif
+if exists("xs_not_core") && xs_not_core
+syn keyword xsPrivate F0convert Perl__add_range_to_invlist
+syn keyword xsPrivate Perl__core_swash_init Perl__invlist_contents
+syn keyword xsPrivate Perl__invlist_intersection_maybe_complement_2nd
+syn keyword xsPrivate Perl__invlist_invert Perl__invlist_invert_prop
+syn keyword xsPrivate Perl__invlist_populate_swatch
+syn keyword xsPrivate Perl__invlist_union_maybe_complement_2nd
+syn keyword xsPrivate Perl__is_utf8__perl_idstart Perl__new_invlist
+syn keyword xsPrivate Perl__swash_inversion_hash Perl__swash_to_invlist
+syn keyword xsPrivate Perl__to_fold_latin1 Perl_av_reify Perl_emulate_cop_io
+syn keyword xsPrivate Perl_find_rundefsvoffset Perl_get_re_arg
+syn keyword xsPrivate Perl_is_utf8_X_L Perl_is_utf8_X_LV Perl_is_utf8_X_LVT
+syn keyword xsPrivate Perl_is_utf8_X_LV_LVT_V Perl_is_utf8_X_T
+syn keyword xsPrivate Perl_is_utf8_X_V Perl_is_utf8_X_begin
+syn keyword xsPrivate Perl_is_utf8_X_extend Perl_is_utf8_X_non_hangul
+syn keyword xsPrivate Perl_is_utf8_X_prepend Perl_is_utf8_char
+syn keyword xsPrivate Perl_new_warnings_bitfield Perl_op_clear
+syn keyword xsPrivate Perl_ptr_table_clear Perl_qerror Perl_reg_named_buff
+syn keyword xsPrivate Perl_reg_named_buff_iter Perl_reg_numbered_buff_fetch
+syn keyword xsPrivate Perl_reg_numbered_buff_length
+syn keyword xsPrivate Perl_reg_numbered_buff_store Perl_reg_qr_package
+syn keyword xsPrivate Perl_reg_temp_copy Perl_regprop Perl_report_uninit
+syn keyword xsPrivate Perl_sv_compile_2op Perl_sv_setsv_cow
+syn keyword xsPrivate Perl_try_amagic_bin Perl_try_amagic_un
+syn keyword xsPrivate Perl_utf8_to_uvchr Perl_utf8_to_uvuni
+syn keyword xsPrivate Perl_vivify_defelem Perl_yylex S_F0convert S_Slab_to_rw
+syn keyword xsPrivate S__append_range_to_invlist S__new_invlist_C_array
+syn keyword xsPrivate S_add_alternate S_add_data S_add_utf16_textfilter
+syn keyword xsPrivate S_adjust_stack_on_leave S_amagic_cmp
+syn keyword xsPrivate S_amagic_cmp_locale S_amagic_i_ncmp S_amagic_ncmp
+syn keyword xsPrivate S_anonymise_cv_maybe S_ao S_apply_attrs
+syn keyword xsPrivate S_apply_attrs_my S_assert_uft8_cache_coherent
+syn keyword xsPrivate S_bad_type_pv S_bad_type_sv S_bytes_to_uni
+syn keyword xsPrivate S_check_locale_boundary_crossing S_check_type_and_open
+syn keyword xsPrivate S_check_uni S_checkcomma S_checkposixcc S_ckwarn_common
+syn keyword xsPrivate S_cl_and S_cl_anything S_cl_init S_cl_is_anything
+syn keyword xsPrivate S_cl_or S_clear_placeholders S_closest_cop S_cop_free
+syn keyword xsPrivate S_core_regclass_swash S_cr_textfilter S_curmad S_curse
+syn keyword xsPrivate S_cv_dump S_deb_curcv S_deb_stack_n S_debprof
+syn keyword xsPrivate S_debug_start_match S_del_sv
+syn keyword xsPrivate S_deprecate_commaless_var_list S_destroy_matcher
+syn keyword xsPrivate S_div128 S_do_chomp S_do_delete_local S_do_oddball
+syn keyword xsPrivate S_do_smartmatch S_do_trans_complex
+syn keyword xsPrivate S_do_trans_complex_utf8 S_do_trans_count
+syn keyword xsPrivate S_do_trans_count_utf8 S_do_trans_simple
+syn keyword xsPrivate S_do_trans_simple_utf8 S_docatch S_doeval S_dofindlabel
+syn keyword xsPrivate S_doform S_dooneliner S_doopen_pm S_doparseform
+syn keyword xsPrivate S_dopoptoeval S_dopoptogiven S_dopoptolabel
+syn keyword xsPrivate S_dopoptoloop S_dopoptosub_at S_dopoptowhen
+syn keyword xsPrivate S_dump_exec_pos S_dump_trie S_dump_trie_interim_list
+syn keyword xsPrivate S_dump_trie_interim_table S_dumpuntil S_dup_attrlist
+syn keyword xsPrivate S_exec_failed S_expect_number S_filter_gets
+syn keyword xsPrivate S_finalize_op S_find_and_forget_pmops
+syn keyword xsPrivate S_find_array_subscript S_find_beginning S_find_byclass
+syn keyword xsPrivate S_find_hash_subscript S_find_in_my_stash
+syn keyword xsPrivate S_find_uninit_var S_first_symbol S_fold_constants
+syn keyword xsPrivate S_forbid_setid S_force_ident S_force_list S_force_next
+syn keyword xsPrivate S_force_strict_version S_force_version S_force_word
+syn keyword xsPrivate S_forget_pmop S_gen_constant_list S_get_aux_mg
+syn keyword xsPrivate S_get_num S_glob_2number S_glob_assign_glob
+syn keyword xsPrivate S_glob_assign_ref S_grok_bslash_c S_grok_bslash_o
+syn keyword xsPrivate S_group_end S_gv_ename S_gv_get_super_pkg
+syn keyword xsPrivate S_gv_init_svtype S_gv_magicalize_isa
+syn keyword xsPrivate S_gv_magicalize_overload S_hfreeentries S_hsplit
+syn keyword xsPrivate S_hv_auxinit S_hv_delete_common S_hv_free_ent_ret
+syn keyword xsPrivate S_hv_magic_check S_hv_notallowed S_incline S_incpush
+syn keyword xsPrivate S_incpush_if_exists S_incpush_use_sep S_ingroup
+syn keyword xsPrivate S_init_ids S_init_interp S_init_main_stash
+syn keyword xsPrivate S_init_perllib S_init_postdump_symbols
+syn keyword xsPrivate S_init_predump_symbols S_inplace_aassign
+syn keyword xsPrivate S_intuit_method S_intuit_more S_invlist_extend
+syn keyword xsPrivate S_invlist_iternext S_invlist_search
+syn keyword xsPrivate S_invoke_exception_hook S_is_an_int
+syn keyword xsPrivate S_is_handle_constructor S_is_list_assignment
+syn keyword xsPrivate S_is_utf8_char_slow S_is_utf8_common S_isa_lookup
+syn keyword xsPrivate S_join_exact S_listkids S_looks_like_bool
+syn keyword xsPrivate S_magic_methcall1 S_make_matcher S_make_trie
+syn keyword xsPrivate S_make_trie_failtable S_matcher_matches_sv
+syn keyword xsPrivate S_mayberelocate S_measure_struct S_mem_log_common
+syn keyword xsPrivate S_mess_alloc S_method_common S_minus_v S_missingterm
+syn keyword xsPrivate S_modkids S_more_sv S_mro_clean_isarev
+syn keyword xsPrivate S_mro_gather_and_rename S_mro_get_linear_isa_dfs
+syn keyword xsPrivate S_mul128 S_mulexp10 S_my_exit_jump S_my_kid S_need_utf8
+syn keyword xsPrivate S_newDEFSVOP S_newGIVWHENOP S_new_constant S_new_he
+syn keyword xsPrivate S_new_logop S_next_symbol S_nextchar
+syn keyword xsPrivate S_no_bareword_allowed S_no_fh_allowed S_no_op
+syn keyword xsPrivate S_not_a_number S_nuke_stacks S_num_overflow
+syn keyword xsPrivate S_open_script S_opt_scalarhv S_pack_rec
+syn keyword xsPrivate S_pad_alloc_name S_pad_check_dup S_pad_findlex
+syn keyword xsPrivate S_pad_reset S_parse_body S_path_is_absolute S_pidgone
+syn keyword xsPrivate S_pm_description S_pmtrans S_printbuf
+syn keyword xsPrivate S_process_special_blocks S_ptr_table_find S_put_byte
+syn keyword xsPrivate S_qsortsvu S_re_croak2 S_readpipe_override
+syn keyword xsPrivate S_ref_array_or_hash S_refcounted_he_value S_refkids
+syn keyword xsPrivate S_refto S_reg S_reg_check_named_buff_matched
+syn keyword xsPrivate S_reg_namedseq S_reg_node S_reg_recode S_reg_scan_name
+syn keyword xsPrivate S_reg_skipcomment S_reganode S_regatom S_regbranch
+syn keyword xsPrivate S_regclass S_regcppop S_regcppush S_regdump_extflags
+syn keyword xsPrivate S_reghop3 S_reghop4 S_reghopmaybe3 S_reginclass
+syn keyword xsPrivate S_reginsert S_regmatch S_regpiece S_regpposixcc
+syn keyword xsPrivate S_regrepeat S_regtail S_regtail_study S_regtry S_reguni
+syn keyword xsPrivate S_regwhite S_require_tie_mod S_restore_magic S_run_body
+syn keyword xsPrivate S_run_user_filter S_rxres_free S_rxres_restore
+syn keyword xsPrivate S_save_hek_flags S_save_lines S_save_magic
+syn keyword xsPrivate S_save_pushptri32ptr S_save_scalar_at S_scalar_mod_type
+syn keyword xsPrivate S_scalarboolean S_scalarkids S_scalarseq S_scan_commit
+syn keyword xsPrivate S_scan_const S_scan_formline S_scan_heredoc
+syn keyword xsPrivate S_scan_ident S_scan_inputsymbol S_scan_pat S_scan_str
+syn keyword xsPrivate S_scan_subst S_scan_trans S_scan_word S_search_const
+syn keyword xsPrivate S_sequence_num S_set_regclass_bit_fold
+syn keyword xsPrivate S_share_hek_flags S_simplify_sort S_skipspace
+syn keyword xsPrivate S_skipspace0 S_skipspace1 S_skipspace2 S_sortcv
+syn keyword xsPrivate S_sortcv_stacked S_sortcv_xsub
+syn keyword xsPrivate S_space_join_names_mortal S_start_force S_stdize_locale
+syn keyword xsPrivate S_strip_return S_study_chunk S_sublex_done
+syn keyword xsPrivate S_sublex_push S_sublex_start S_sv_2iuv_common
+syn keyword xsPrivate S_sv_2iuv_non_preserve S_sv_add_arena S_sv_dup_common
+syn keyword xsPrivate S_sv_dup_inc_multiple S_sv_exp_grow S_sv_i_ncmp
+syn keyword xsPrivate S_sv_ncmp S_sv_pos_b2u_midway S_sv_pos_u2b_cached
+syn keyword xsPrivate S_sv_pos_u2b_forwards S_sv_pos_u2b_midway
+syn keyword xsPrivate S_sv_release_COW S_swallow_bom S_swatch_get
+syn keyword xsPrivate S_to_byte_substr S_to_lower_latin1 S_to_utf8_substr
+syn keyword xsPrivate S_tokenize_use S_tokeq S_tokereport
+syn keyword xsPrivate S_too_few_arguments_pv S_too_few_arguments_sv
+syn keyword xsPrivate S_too_many_arguments_pv S_too_many_arguments_sv
+syn keyword xsPrivate S_uiv_2buf S_unpack_rec S_unreferenced_to_tmp_stack
+syn keyword xsPrivate S_unshare_hek_or_pvn S_unwind_handler_stack
+syn keyword xsPrivate S_update_debugger_info S_usage S_utf16_textfilter
+syn keyword xsPrivate S_utf8_mg_len_cache_update S_utf8_mg_pos_cache_update
+syn keyword xsPrivate S_validate_suid S_visit S_with_queued_errors
+syn keyword xsPrivate S_write_no_mem S_xmldump_attr S_yywarn Slab_to_rw
+syn keyword xsPrivate _add_range_to_invlist _append_range_to_invlist
+syn keyword xsPrivate _core_swash_init _invlist_array_init _invlist_contents
+syn keyword xsPrivate _invlist_intersection
+syn keyword xsPrivate _invlist_intersection_maybe_complement_2nd
+syn keyword xsPrivate _invlist_invert _invlist_invert_prop
+syn keyword xsPrivate _invlist_populate_swatch _invlist_subtract
+syn keyword xsPrivate _invlist_union _invlist_union_maybe_complement_2nd
+syn keyword xsPrivate _is_utf8__perl_idstart _new_invlist
+syn keyword xsPrivate _new_invlist_C_array _swash_inversion_hash
+syn keyword xsPrivate _swash_to_invlist _to_fold_latin1 add_alternate
+syn keyword xsPrivate add_cp_to_invlist add_data add_utf16_textfilter
+syn keyword xsPrivate adjust_stack_on_leave amagic_cmp amagic_cmp_locale
+syn keyword xsPrivate amagic_i_ncmp amagic_ncmp anonymise_cv_maybe ao
+syn keyword xsPrivate apply_attrs apply_attrs_my assert_uft8_cache_coherent
+syn keyword xsPrivate av_reify bad_type_pv bad_type_sv bytes_to_uni
+syn keyword xsPrivate check_locale_boundary_crossing check_type_and_open
+syn keyword xsPrivate check_uni checkcomma checkposixcc ckwarn_common cl_and
+syn keyword xsPrivate cl_anything cl_init cl_is_anything cl_or
+syn keyword xsPrivate clear_placeholders closest_cop cop_free
+syn keyword xsPrivate core_regclass_swash cr_textfilter curmad curse cv_dump
+syn keyword xsPrivate deb_curcv deb_stack_n debprof debug_start_match del_sv
+syn keyword xsPrivate deprecate_commaless_var_list destroy_matcher div128
+syn keyword xsPrivate do_aexec do_chomp do_delete_local do_exec do_oddball
+syn keyword xsPrivate do_smartmatch do_trans_complex do_trans_complex_utf8
+syn keyword xsPrivate do_trans_count do_trans_count_utf8 do_trans_simple
+syn keyword xsPrivate do_trans_simple_utf8 docatch doeval dofindlabel doform
+syn keyword xsPrivate dooneliner doopen_pm doparseform dopoptoeval
+syn keyword xsPrivate dopoptogiven dopoptolabel dopoptoloop dopoptosub_at
+syn keyword xsPrivate dopoptowhen dump_exec_pos dump_trie
+syn keyword xsPrivate dump_trie_interim_list dump_trie_interim_table
+syn keyword xsPrivate dumpuntil dup_attrlist exec_failed expect_number
+syn keyword xsPrivate filter_gets finalize_op find_and_forget_pmops
+syn keyword xsPrivate find_array_subscript find_beginning find_byclass
+syn keyword xsPrivate find_hash_subscript find_in_my_stash
+syn keyword xsPrivate find_rundefsvoffset find_uninit_var first_symbol
+syn keyword xsPrivate fold_constants forbid_setid force_ident force_list
+syn keyword xsPrivate force_next force_strict_version force_version
+syn keyword xsPrivate force_word gen_constant_list get_aux_mg
+syn keyword xsPrivate get_invlist_iter_addr get_invlist_len_addr
+syn keyword xsPrivate get_invlist_version_id_addr get_invlist_zero_addr
+syn keyword xsPrivate get_num glob_2number glob_assign_glob glob_assign_ref
+syn keyword xsPrivate grok_bslash_c grok_bslash_o group_end gv_ename
+syn keyword xsPrivate gv_get_super_pkg gv_init_svtype gv_magicalize_isa
+syn keyword xsPrivate gv_magicalize_overload hfreeentries hsplit hv_auxinit
+syn keyword xsPrivate hv_delete_common hv_free_ent_ret hv_magic_check
+syn keyword xsPrivate hv_notallowed incline incpush incpush_if_exists
+syn keyword xsPrivate incpush_use_sep ingroup init_ids init_interp
+syn keyword xsPrivate init_main_stash init_perllib init_postdump_symbols
+syn keyword xsPrivate init_predump_symbols inplace_aassign intuit_method
+syn keyword xsPrivate intuit_more invlist_array invlist_clone invlist_extend
+syn keyword xsPrivate invlist_iterinit invlist_iternext invlist_len
+syn keyword xsPrivate invlist_max invlist_search invlist_set_len invlist_trim
+syn keyword xsPrivate invoke_exception_hook is_an_int is_handle_constructor
+syn keyword xsPrivate is_list_assignment is_utf8_X_L is_utf8_X_LV
+syn keyword xsPrivate is_utf8_X_LVT is_utf8_X_LV_LVT_V is_utf8_X_T
+syn keyword xsPrivate is_utf8_X_V is_utf8_X_begin is_utf8_X_extend
+syn keyword xsPrivate is_utf8_X_non_hangul is_utf8_X_prepend is_utf8_char
+syn keyword xsPrivate is_utf8_char_slow is_utf8_common isa_lookup join_exact
+syn keyword xsPrivate listkids looks_like_bool magic_methcall1 make_matcher
+syn keyword xsPrivate make_trie make_trie_failtable matcher_matches_sv
+syn keyword xsPrivate mayberelocate measure_struct mem_log_common mess_alloc
+syn keyword xsPrivate method_common minus_v missingterm modkids more_sv
+syn keyword xsPrivate mro_clean_isarev mro_gather_and_rename
+syn keyword xsPrivate mro_get_linear_isa_dfs mul128 mulexp10 my_exit_jump
+syn keyword xsPrivate my_kid need_utf8 newDEFSVOP newGIVWHENOP new_he
+syn keyword xsPrivate new_logop next_symbol nextchar no_bareword_allowed
+syn keyword xsPrivate no_fh_allowed no_op not_a_number nuke_stacks
+syn keyword xsPrivate num_overflow op_clear open_script opt_scalarhv pack_rec
+syn keyword xsPrivate pad_alloc_name pad_check_dup pad_findlex pad_reset
+syn keyword xsPrivate parse_body path_is_absolute pidgone pm_description
+syn keyword xsPrivate pmtrans printbuf process_special_blocks ptr_table_clear
+syn keyword xsPrivate ptr_table_find put_byte qerror qsortsvu re_croak2
+syn keyword xsPrivate readpipe_override ref_array_or_hash refcounted_he_value
+syn keyword xsPrivate refkids refto reg reg_check_named_buff_matched
+syn keyword xsPrivate reg_named_buff reg_named_buff_iter reg_namedseq
+syn keyword xsPrivate reg_node reg_numbered_buff_fetch
+syn keyword xsPrivate reg_numbered_buff_length reg_numbered_buff_store
+syn keyword xsPrivate reg_qr_package reg_recode reg_scan_name reg_skipcomment
+syn keyword xsPrivate reg_temp_copy reganode regatom regbranch regclass
+syn keyword xsPrivate regcppop regcppush regcurly regdump_extflags reghop3
+syn keyword xsPrivate reghop4 reghopmaybe3 reginclass reginsert regmatch
+syn keyword xsPrivate regpiece regpposixcc regprop regrepeat regtail
+syn keyword xsPrivate regtail_study regtry reguni regwhite report_uninit
+syn keyword xsPrivate require_tie_mod restore_magic run_body run_user_filter
+syn keyword xsPrivate rxres_free rxres_restore save_hek_flags save_lines
+syn keyword xsPrivate save_magic save_pushptri32ptr save_scalar_at
+syn keyword xsPrivate scalar_mod_type scalarboolean scalarkids scalarseq
+syn keyword xsPrivate scan_commit scan_const scan_formline scan_heredoc
+syn keyword xsPrivate scan_ident scan_inputsymbol scan_pat scan_str
+syn keyword xsPrivate scan_subst scan_trans scan_word search_const
+syn keyword xsPrivate sequence_num set_regclass_bit set_regclass_bit_fold
+syn keyword xsPrivate share_hek_flags simplify_sort skipspace skipspace0
+syn keyword xsPrivate skipspace1 skipspace2 sortcv sortcv_stacked sortcv_xsub
+syn keyword xsPrivate space_join_names_mortal start_force stdize_locale
+syn keyword xsPrivate strip_return study_chunk sublex_done sublex_push
+syn keyword xsPrivate sublex_start sv_2iuv_common sv_2iuv_non_preserve
+syn keyword xsPrivate sv_add_arena sv_compile_2op sv_dup_common
+syn keyword xsPrivate sv_dup_inc_multiple sv_exp_grow sv_i_ncmp sv_ncmp
+syn keyword xsPrivate sv_pos_b2u_midway sv_pos_u2b_cached sv_pos_u2b_forwards
+syn keyword xsPrivate sv_pos_u2b_midway sv_release_COW sv_setsv_cow
+syn keyword xsPrivate swallow_bom swatch_get to_byte_substr to_lower_latin1
+syn keyword xsPrivate to_utf8_substr tokenize_use tokeq tokereport
+syn keyword xsPrivate too_few_arguments_pv too_few_arguments_sv
+syn keyword xsPrivate too_many_arguments_pv too_many_arguments_sv uiv_2buf
+syn keyword xsPrivate unpack_rec unreferenced_to_tmp_stack unshare_hek_or_pvn
+syn keyword xsPrivate unwind_handler_stack update_debugger_info usage
+syn keyword xsPrivate utf16_textfilter utf8_mg_len_cache_update
+syn keyword xsPrivate utf8_mg_pos_cache_update utf8_to_uvchr utf8_to_uvuni
+syn keyword xsPrivate visit vivify_defelem with_queued_errors write_no_mem
+syn keyword xsPrivate xmldump_attr yylex yywarn
+endif
+syn keyword xsType AMT AMTS ANY AV BHK BINOP BLOCK CHECKPOINT CLONE_PARAMS
+syn keyword xsType COP COPHH CV DB_Hash_t DB_Prefix_t DEBUG_t Direntry_t
+syn keyword xsType Fpos_t Free_t GP GV Gid_t Groups_t HE HEK HV I16 I32 I64
+syn keyword xsType I8 IO IV Int64 JMPENV LISTOP LOGOP LOOP MADPROP MAGIC MGS
+syn keyword xsType MGVTBL Malloc_t Mmap_t Mode_t NEXTTOKE NV Netdb_hlen_t
+syn keyword xsType Netdb_host_t Netdb_name_t Netdb_net_t OP OPCODE OP_4tree
+syn keyword xsType Off_t Optype PAD PADLIST PADOFFSET PADOP PERL_CONTEXT
+syn keyword xsType PERL_SI PMOP PTR_TBL_ENT_t PTR_TBL_t PVOP PerlIO
+syn keyword xsType PerlIO_funcs PerlIO_list_s PerlIO_list_t PerlIOl
+syn keyword xsType PerlInterpreter Pid_t Quad_t REGEXP Rand_seed_t SSize_t
+syn keyword xsType STRLEN STRUCT_SV SUBLEXINFO SV SVOP Select_fd_set_t
+syn keyword xsType Shmat_t Signal_t Sigsave_t Size_t Sock_size_t Stat_t TM64
+syn keyword xsType TOKEN Time64_T Time_t U16 U32 U64 U8 UNOP UV Uid_t Uquad_t
+syn keyword xsType XOP XPV XPVAV XPVBM XPVCV XPVFM XPVGV XPVHV XPVIO XPVIV
+syn keyword xsType XPVLV XPVMG XPVNV XPVUV Year _PerlIO _PerlIO_funcs
+syn keyword xsType _pMY_CXT _pTHX _reg_ac_data _reg_trie_data _reg_trie_state
+syn keyword xsType _reg_trie_trans _reg_trie_trans_list_elem _sublex_info
+syn keyword xsType _xhvnameu _xivu _xmgu _xnvu am_table am_table_short
+syn keyword xsType block_eval block_format block_givwhen block_hooks
+syn keyword xsType block_loop block_sub bool clone_params custom_op
+syn keyword xsType cv_flags_t expectation gccbug_semun line_t madprop magic
+syn keyword xsType mem_log_type mgvtbl mro_alg mro_meta my_cxt_t opcode p5rx
+syn keyword xsType pMY_CXT pMY_CXT_ pTHX pTHX_ padtidy_type perl_cond
+syn keyword xsType perl_debug_pad perl_key perl_memory_debug_header
+syn keyword xsType perl_mstats perl_mstats_t perl_mutex perl_os_thread
+syn keyword xsType perl_phase perl_vars perl_wait_queue pthread_addr_t
+syn keyword xsType ptr_tbl ptr_tbl_ent re_save_state refcounted_he
+syn keyword xsType reg_ac_data reg_data reg_substr_data reg_substr_datum
+syn keyword xsType reg_trie_data reg_trie_state reg_trie_trans
+syn keyword xsType reg_trie_trans_le regex_charset regnode regnode_1
+syn keyword xsType regnode_2 regnode_2L regnode_charclass
+syn keyword xsType regnode_charclass_class regnode_string semun shared_he
+syn keyword xsType svtype thread_intern ufuncs xpv xpvav xpvcv xpvfm xpvgv
+syn keyword xsType xpvhv xpvhv_aux xpvio xpviv xpvlv xpvmg xpvnv xpvuv
+syn keyword xsType yytokentype
+syn keyword xsString IVdf NVef NVff NVgf SVf SVf256 SVf32 SVf_ UVof UVuf UVxf
+syn keyword xsConstant CXt_BLOCK CXt_EVAL CXt_FORMAT CXt_GIVEN CXt_LOOP_FOR
+syn keyword xsConstant CXt_LOOP_LAZYIV CXt_LOOP_LAZYSV CXt_LOOP_PLAIN
+syn keyword xsConstant CXt_NULL CXt_SUB CXt_SUBST CXt_WHEN FALSE G_ARRAY
+syn keyword xsConstant G_DISCARD G_EVAL G_FAKINGEVAL G_KEEPERR G_METHOD
+syn keyword xsConstant G_NOARGS G_NODEBUG G_SCALAR G_UNDEF_FILL G_VOID G_WANT
+syn keyword xsConstant G_WARN_ALL_MASK G_WARN_ALL_OFF G_WARN_ALL_ON
+syn keyword xsConstant G_WARN_OFF G_WARN_ON G_WARN_ONCE G_WRITING_TO_STDERR
+syn keyword xsConstant OA_AVREF OA_BASEOP OA_BASEOP_OR_UNOP OA_BINOP
+syn keyword xsConstant OA_CLASS_MASK OA_COP OA_CVREF OA_DANGEROUS OA_DEFGV
+syn keyword xsConstant OA_FILEREF OA_FILESTATOP OA_FOLDCONST OA_HVREF OA_LIST
+syn keyword xsConstant OA_LISTOP OA_LOGOP OA_LOOP OA_LOOPEXOP OA_MARK
+syn keyword xsConstant OA_OPTIONAL OA_OTHERINT OA_PADOP OA_PMOP
+syn keyword xsConstant OA_PVOP_OR_SVOP OA_RETSCALAR OA_SCALAR OA_SCALARREF
+syn keyword xsConstant OA_SVOP OA_TARGET OA_TARGLEX OA_UNOP OP_AASSIGN OP_ABS
+syn keyword xsConstant OP_ACCEPT OP_ADD OP_AEACH OP_AELEM OP_AELEMFAST
+syn keyword xsConstant OP_AELEMFAST_LEX OP_AKEYS OP_ALARM OP_AND OP_ANDASSIGN
+syn keyword xsConstant OP_ANONCODE OP_ANONHASH OP_ANONLIST OP_ASLICE OP_ATAN2
+syn keyword xsConstant OP_AV2ARYLEN OP_AVALUES OP_BACKTICK OP_BIND OP_BINMODE
+syn keyword xsConstant OP_BIT_AND OP_BIT_OR OP_BIT_XOR OP_BLESS OP_BOOLKEYS
+syn keyword xsConstant OP_BREAK OP_CALLER OP_CHDIR OP_CHMOD OP_CHOMP OP_CHOP
+syn keyword xsConstant OP_CHOWN OP_CHR OP_CHROOT OP_CLOSE OP_CLOSEDIR
+syn keyword xsConstant OP_COMPLEMENT OP_CONCAT OP_COND_EXPR OP_CONNECT
+syn keyword xsConstant OP_CONST OP_CONTINUE OP_COREARGS OP_COS OP_CRYPT
+syn keyword xsConstant OP_CUSTOM OP_DBMCLOSE OP_DBMOPEN OP_DBSTATE OP_DEFINED
+syn keyword xsConstant OP_DELETE OP_DIE OP_DIVIDE OP_DOFILE OP_DOR
+syn keyword xsConstant OP_DORASSIGN OP_DUMP OP_EACH OP_EGRENT OP_EHOSTENT
+syn keyword xsConstant OP_ENETENT OP_ENTER OP_ENTEREVAL OP_ENTERGIVEN
+syn keyword xsConstant OP_ENTERITER OP_ENTERLOOP OP_ENTERSUB OP_ENTERTRY
+syn keyword xsConstant OP_ENTERWHEN OP_ENTERWRITE OP_EOF OP_EPROTOENT
+syn keyword xsConstant OP_EPWENT OP_EQ OP_ESERVENT OP_EXEC OP_EXISTS OP_EXIT
+syn keyword xsConstant OP_EXP OP_FC OP_FCNTL OP_FILENO OP_FLIP OP_FLOCK
+syn keyword xsConstant OP_FLOP OP_FORK OP_FORMLINE OP_FTATIME OP_FTBINARY
+syn keyword xsConstant OP_FTBLK OP_FTCHR OP_FTCTIME OP_FTDIR OP_FTEEXEC
+syn keyword xsConstant OP_FTEOWNED OP_FTEREAD OP_FTEWRITE OP_FTFILE OP_FTIS
+syn keyword xsConstant OP_FTLINK OP_FTMTIME OP_FTPIPE OP_FTREXEC OP_FTROWNED
+syn keyword xsConstant OP_FTRREAD OP_FTRWRITE OP_FTSGID OP_FTSIZE OP_FTSOCK
+syn keyword xsConstant OP_FTSUID OP_FTSVTX OP_FTTEXT OP_FTTTY OP_FTZERO OP_GE
+syn keyword xsConstant OP_GELEM OP_GETC OP_GETLOGIN OP_GETPEERNAME OP_GETPGRP
+syn keyword xsConstant OP_GETPPID OP_GETPRIORITY OP_GETSOCKNAME OP_GGRENT
+syn keyword xsConstant OP_GGRGID OP_GGRNAM OP_GHBYADDR OP_GHBYNAME
+syn keyword xsConstant OP_GHOSTENT OP_GLOB OP_GMTIME OP_GNBYADDR OP_GNBYNAME
+syn keyword xsConstant OP_GNETENT OP_GOTO OP_GPBYNAME OP_GPBYNUMBER
+syn keyword xsConstant OP_GPROTOENT OP_GPWENT OP_GPWNAM OP_GPWUID
+syn keyword xsConstant OP_GREPSTART OP_GREPWHILE OP_GSBYNAME OP_GSBYPORT
+syn keyword xsConstant OP_GSERVENT OP_GSOCKOPT OP_GT OP_GV OP_GVSV OP_HELEM
+syn keyword xsConstant OP_HEX OP_HINTSEVAL OP_HSLICE OP_INDEX OP_INT OP_IOCTL
+syn keyword xsConstant OP_ITER OP_I_ADD OP_I_DIVIDE OP_I_EQ OP_I_GE OP_I_GT
+syn keyword xsConstant OP_I_LE OP_I_LT OP_I_MODULO OP_I_MULTIPLY OP_I_NCMP
+syn keyword xsConstant OP_I_NE OP_I_NEGATE OP_I_POSTDEC OP_I_POSTINC
+syn keyword xsConstant OP_I_PREDEC OP_I_PREINC OP_I_SUBTRACT OP_JOIN OP_KEYS
+syn keyword xsConstant OP_KILL OP_LAST OP_LC OP_LCFIRST OP_LE OP_LEAVE
+syn keyword xsConstant OP_LEAVEEVAL OP_LEAVEGIVEN OP_LEAVELOOP OP_LEAVESUB
+syn keyword xsConstant OP_LEAVESUBLV OP_LEAVETRY OP_LEAVEWHEN OP_LEAVEWRITE
+syn keyword xsConstant OP_LEFT_SHIFT OP_LENGTH OP_LINESEQ OP_LINK OP_LIST
+syn keyword xsConstant OP_LISTEN OP_LOCALTIME OP_LOCK OP_LOG OP_LSLICE
+syn keyword xsConstant OP_LSTAT OP_LT OP_MAPSTART OP_MAPWHILE OP_MATCH
+syn keyword xsConstant OP_METHOD OP_METHOD_NAMED OP_MKDIR OP_MODULO OP_MSGCTL
+syn keyword xsConstant OP_MSGGET OP_MSGRCV OP_MSGSND OP_MULTIPLY OP_NCMP
+syn keyword xsConstant OP_NE OP_NEGATE OP_NEXT OP_NEXTSTATE OP_NOT OP_NULL
+syn keyword xsConstant OP_OCT OP_ONCE OP_OPEN OP_OPEN_DIR OP_OR OP_ORASSIGN
+syn keyword xsConstant OP_ORD OP_PACK OP_PADANY OP_PADAV OP_PADHV OP_PADSV
+syn keyword xsConstant OP_PIPE_OP OP_POP OP_POS OP_POSTDEC OP_POSTINC OP_POW
+syn keyword xsConstant OP_PREDEC OP_PREINC OP_PRINT OP_PROTOTYPE OP_PRTF
+syn keyword xsConstant OP_PUSH OP_PUSHMARK OP_PUSHRE OP_QR OP_QUOTEMETA
+syn keyword xsConstant OP_RAND OP_RANGE OP_RCATLINE OP_REACH OP_READ
+syn keyword xsConstant OP_READDIR OP_READLINE OP_READLINK OP_RECV OP_REDO
+syn keyword xsConstant OP_REF OP_REFGEN OP_REGCMAYBE OP_REGCOMP OP_REGCRESET
+syn keyword xsConstant OP_RENAME OP_REPEAT OP_REQUIRE OP_RESET OP_RETURN
+syn keyword xsConstant OP_REVERSE OP_REWINDDIR OP_RIGHT_SHIFT OP_RINDEX
+syn keyword xsConstant OP_RKEYS OP_RMDIR OP_RUNCV OP_RV2AV OP_RV2CV OP_RV2GV
+syn keyword xsConstant OP_RV2HV OP_RV2SV OP_RVALUES OP_SASSIGN OP_SAY
+syn keyword xsConstant OP_SCALAR OP_SCHOMP OP_SCHOP OP_SCMP OP_SCOPE OP_SEEK
+syn keyword xsConstant OP_SEEKDIR OP_SELECT OP_SEMCTL OP_SEMGET OP_SEMOP
+syn keyword xsConstant OP_SEND OP_SEQ OP_SETPGRP OP_SETPRIORITY OP_SGE
+syn keyword xsConstant OP_SGRENT OP_SGT OP_SHIFT OP_SHMCTL OP_SHMGET
+syn keyword xsConstant OP_SHMREAD OP_SHMWRITE OP_SHOSTENT OP_SHUTDOWN OP_SIN
+syn keyword xsConstant OP_SLE OP_SLEEP OP_SLT OP_SMARTMATCH OP_SNE OP_SNETENT
+syn keyword xsConstant OP_SOCKET OP_SOCKPAIR OP_SORT OP_SPLICE OP_SPLIT
+syn keyword xsConstant OP_SPRINTF OP_SPROTOENT OP_SPWENT OP_SQRT OP_SRAND
+syn keyword xsConstant OP_SREFGEN OP_SSELECT OP_SSERVENT OP_SSOCKOPT OP_STAT
+syn keyword xsConstant OP_STRINGIFY OP_STUB OP_STUDY OP_SUBST OP_SUBSTCONT
+syn keyword xsConstant OP_SUBSTR OP_SUBTRACT OP_SYMLINK OP_SYSCALL OP_SYSOPEN
+syn keyword xsConstant OP_SYSREAD OP_SYSSEEK OP_SYSTEM OP_SYSWRITE OP_TELL
+syn keyword xsConstant OP_TELLDIR OP_TIE OP_TIED OP_TIME OP_TMS OP_TRANS
+syn keyword xsConstant OP_TRANSR OP_TRUNCATE OP_UC OP_UCFIRST OP_UMASK
+syn keyword xsConstant OP_UNDEF OP_UNLINK OP_UNPACK OP_UNSHIFT OP_UNSTACK
+syn keyword xsConstant OP_UNTIE OP_UTIME OP_VALUES OP_VEC OP_WAIT OP_WAITPID
+syn keyword xsConstant OP_WANTARRAY OP_WARN OP_XOR OP_max OPf_KIDS OPf_KNOW
+syn keyword xsConstant OPf_LIST OPf_MOD OPf_PARENS OPf_REF OPf_SPECIAL
+syn keyword xsConstant OPf_STACKED OPf_WANT OPf_WANT_LIST OPf_WANT_SCALAR
+syn keyword xsConstant OPf_WANT_VOID OPpALLOW_FAKE OPpASSIGN_BACKWARDS
+syn keyword xsConstant OPpASSIGN_COMMON OPpASSIGN_CV_TO_GV OPpCONST_BARE
+syn keyword xsConstant OPpCONST_ENTERED OPpCONST_NOVER OPpCONST_SHORTCIRCUIT
+syn keyword xsConstant OPpCONST_STRICT OPpCONST_WARNING OPpCOREARGS_DEREF1
+syn keyword xsConstant OPpCOREARGS_DEREF2 OPpCOREARGS_PUSHMARK
+syn keyword xsConstant OPpCOREARGS_SCALARMOD OPpDEREF OPpDEREF_AV OPpDEREF_HV
+syn keyword xsConstant OPpDEREF_SV OPpDONT_INIT_GV OPpEARLY_CV
+syn keyword xsConstant OPpENTERSUB_AMPER OPpENTERSUB_DB OPpENTERSUB_HASTARG
+syn keyword xsConstant OPpENTERSUB_INARGS OPpENTERSUB_LVAL_MASK
+syn keyword xsConstant OPpENTERSUB_NOPAREN OPpEVAL_BYTES OPpEVAL_COPHH
+syn keyword xsConstant OPpEVAL_HAS_HH OPpEVAL_UNICODE OPpEXISTS_SUB
+syn keyword xsConstant OPpEXIT_VMSISH OPpFLIP_LINENUM OPpFT_ACCESS
+syn keyword xsConstant OPpFT_AFTER_t OPpFT_STACKED OPpFT_STACKING OPpGREP_LEX
+syn keyword xsConstant OPpHUSH_VMSISH OPpITER_DEF OPpITER_REVERSED
+syn keyword xsConstant OPpLIST_GUESSED OPpLVAL_DEFER OPpLVAL_INTRO
+syn keyword xsConstant OPpMAYBE_LVSUB OPpMAY_RETURN_CONSTANT OPpOFFBYONE
+syn keyword xsConstant OPpOPEN_IN_CRLF OPpOPEN_IN_RAW OPpOPEN_OUT_CRLF
+syn keyword xsConstant OPpOPEN_OUT_RAW OPpOUR_INTRO OPpPAD_STATE
+syn keyword xsConstant OPpPV_IS_UTF8 OPpREFCOUNTED OPpREPEAT_DOLIST
+syn keyword xsConstant OPpREVERSE_INPLACE OPpRUNTIME OPpSLICE OPpSORT_DESCEND
+syn keyword xsConstant OPpSORT_INPLACE OPpSORT_INTEGER OPpSORT_NUMERIC
+syn keyword xsConstant OPpSORT_QSORT OPpSORT_REVERSE OPpSORT_STABLE
+syn keyword xsConstant OPpSUBSTR_REPL_FIRST OPpTARGET_MY OPpTRANS_ALL
+syn keyword xsConstant OPpTRANS_COMPLEMENT OPpTRANS_DELETE OPpTRANS_FROM_UTF
+syn keyword xsConstant OPpTRANS_GROWS OPpTRANS_IDENTICAL OPpTRANS_SQUASH
+syn keyword xsConstant OPpTRANS_TO_UTF PERL_MAGIC_READONLY_ACCEPTABLE
+syn keyword xsConstant PERL_MAGIC_TYPE_IS_VALUE_MAGIC
+syn keyword xsConstant PERL_MAGIC_TYPE_READONLY_ACCEPTABLE
+syn keyword xsConstant PERL_MAGIC_UTF8_CACHESIZE PERL_MAGIC_VALUE_MAGIC
+syn keyword xsConstant PERL_MAGIC_VTABLE_MASK PERL_MAGIC_arylen
+syn keyword xsConstant PERL_MAGIC_arylen_p PERL_MAGIC_backref PERL_MAGIC_bm
+syn keyword xsConstant PERL_MAGIC_checkcall PERL_MAGIC_collxfrm
+syn keyword xsConstant PERL_MAGIC_dbfile PERL_MAGIC_dbline PERL_MAGIC_defelem
+syn keyword xsConstant PERL_MAGIC_env PERL_MAGIC_envelem PERL_MAGIC_ext
+syn keyword xsConstant PERL_MAGIC_fm PERL_MAGIC_hints PERL_MAGIC_hintselem
+syn keyword xsConstant PERL_MAGIC_isa PERL_MAGIC_isaelem PERL_MAGIC_nkeys
+syn keyword xsConstant PERL_MAGIC_overload PERL_MAGIC_overload_elem
+syn keyword xsConstant PERL_MAGIC_overload_table PERL_MAGIC_pos PERL_MAGIC_qr
+syn keyword xsConstant PERL_MAGIC_regdata PERL_MAGIC_regdatum
+syn keyword xsConstant PERL_MAGIC_regex_global PERL_MAGIC_rhash
+syn keyword xsConstant PERL_MAGIC_shared PERL_MAGIC_shared_scalar
+syn keyword xsConstant PERL_MAGIC_sig PERL_MAGIC_sigelem PERL_MAGIC_study
+syn keyword xsConstant PERL_MAGIC_substr PERL_MAGIC_sv PERL_MAGIC_symtab
+syn keyword xsConstant PERL_MAGIC_taint PERL_MAGIC_tied PERL_MAGIC_tiedelem
+syn keyword xsConstant PERL_MAGIC_tiedscalar PERL_MAGIC_utf8 PERL_MAGIC_uvar
+syn keyword xsConstant PERL_MAGIC_uvar_elem PERL_MAGIC_vec PERL_MAGIC_vstring
+syn keyword xsConstant REGEX_ASCII_MORE_RESTRICTED_CHARSET
+syn keyword xsConstant REGEX_ASCII_RESTRICTED_CHARSET REGEX_DEPENDS_CHARSET
+syn keyword xsConstant REGEX_LOCALE_CHARSET REGEX_UNICODE_CHARSET SVfARG
+syn keyword xsConstant SVf_AMAGIC SVf_BREAK SVf_FAKE SVf_IOK SVf_IVisUV
+syn keyword xsConstant SVf_NOK SVf_OK SVf_OOK SVf_POK SVf_READONLY SVf_ROK
+syn keyword xsConstant SVf_THINKFIRST SVf_UTF8 SVp_IOK SVp_NOK SVp_POK
+syn keyword xsConstant SVp_SCREAM SVpad_NAME SVpad_OUR SVpad_STATE
+syn keyword xsConstant SVpad_TYPED SVpav_REAL SVpav_REIFY SVpbm_TAIL
+syn keyword xsConstant SVpbm_VALID SVpgv_GP SVphv_CLONEABLE SVphv_HASKFLAGS
+syn keyword xsConstant SVphv_LAZYDEL SVphv_REHASH SVphv_SHAREKEYS
+syn keyword xsConstant SVprv_PCS_IMPORTED SVprv_WEAKREF SVs_GMG SVs_OBJECT
+syn keyword xsConstant SVs_PADMY SVs_PADSTALE SVs_PADTMP SVs_RMG SVs_SMG
+syn keyword xsConstant SVs_TEMP SVt_BIND SVt_IV SVt_LAST SVt_NULL SVt_NV
+syn keyword xsConstant SVt_PV SVt_PVAV SVt_PVBM SVt_PVCV SVt_PVFM SVt_PVGV
+syn keyword xsConstant SVt_PVHV SVt_PVIO SVt_PVIV SVt_PVLV SVt_PVMG SVt_PVNV
+syn keyword xsConstant SVt_REGEXP SVt_RV TRUE XATTRBLOCK XATTRTERM XBLOCK
+syn keyword xsConstant XOPERATOR XREF XSTATE XTERM XTERMBLOCK XTERMORDORDOR
+syn keyword xsConstant padtidy_FORMAT padtidy_SUB padtidy_SUBCLONE
+syn keyword xsException XCPT_CATCH XCPT_RETHROW XCPT_TRY_END XCPT_TRY_START
+syn keyword xsException dXCPT
+syn keyword xsKeyword ALIAS: BOOT: CASE: CLEANUP: CODE: C_ARGS: DISABLE
+syn keyword xsKeyword ENABLE FALLBACK: IN INCLUDE: INIT: INPUT: INTERFACE:
+syn keyword xsKeyword INTERFACE_MACRO: IN_OUT IN_OUTLIST MODULE NO_INIT:
+syn keyword xsKeyword NO_OUTPUT: OUT OUTLIST OUTPUT: OVERLOAD: PACKAGE
+syn keyword xsKeyword POSTCALL: PPCODE: PREFIX PREINIT: PROTOTYPE:
+syn keyword xsKeyword PROTOTYPES: REQUIRE: SCOPE: VERSIONCHECK: length
+syn keyword xsFunction GetVars Gv_AMupdate PerlIO_clearerr PerlIO_close
+syn keyword xsFunction PerlIO_eof PerlIO_error PerlIO_fileno PerlIO_fill
+syn keyword xsFunction PerlIO_flush PerlIO_get_base PerlIO_get_bufsiz
+syn keyword xsFunction PerlIO_get_cnt PerlIO_get_ptr PerlIO_read PerlIO_seek
+syn keyword xsFunction PerlIO_set_cnt PerlIO_set_ptrcnt PerlIO_setlinebuf
+syn keyword xsFunction PerlIO_stderr PerlIO_stdin PerlIO_stdout PerlIO_tell
+syn keyword xsFunction PerlIO_unread PerlIO_write Perl_GetVars
+syn keyword xsFunction Perl_Gv_AMupdate Perl_PerlIO_clearerr
+syn keyword xsFunction Perl_PerlIO_close Perl_PerlIO_context_layers
+syn keyword xsFunction Perl_PerlIO_eof Perl_PerlIO_error Perl_PerlIO_fileno
+syn keyword xsFunction Perl_PerlIO_fill Perl_PerlIO_flush
+syn keyword xsFunction Perl_PerlIO_get_base Perl_PerlIO_get_bufsiz
+syn keyword xsFunction Perl_PerlIO_get_cnt Perl_PerlIO_get_ptr
+syn keyword xsFunction Perl_PerlIO_read Perl_PerlIO_seek Perl_PerlIO_set_cnt
+syn keyword xsFunction Perl_PerlIO_set_ptrcnt Perl_PerlIO_setlinebuf
+syn keyword xsFunction Perl_PerlIO_stderr Perl_PerlIO_stdin
+syn keyword xsFunction Perl_PerlIO_stdout Perl_PerlIO_tell Perl_PerlIO_unread
+syn keyword xsFunction Perl_PerlIO_write Perl_Slab_Alloc Perl_Slab_Free
+syn keyword xsFunction Perl__is_utf8_quotemeta Perl__to_uni_fold_flags
+syn keyword xsFunction Perl__to_utf8_fold_flags Perl__to_utf8_lower_flags
+syn keyword xsFunction Perl__to_utf8_title_flags Perl__to_utf8_upper_flags
+syn keyword xsFunction Perl_amagic_call Perl_amagic_deref_call Perl_any_dup
+syn keyword xsFunction Perl_apply_attrs_string Perl_atfork_lock
+syn keyword xsFunction Perl_atfork_unlock Perl_av_arylen_p Perl_av_clear
+syn keyword xsFunction Perl_av_create_and_push Perl_av_create_and_unshift_one
+syn keyword xsFunction Perl_av_delete Perl_av_exists Perl_av_extend
+syn keyword xsFunction Perl_av_fetch Perl_av_fill Perl_av_iter_p Perl_av_len
+syn keyword xsFunction Perl_av_make Perl_av_pop Perl_av_push Perl_av_shift
+syn keyword xsFunction Perl_av_store Perl_av_undef Perl_av_unshift
+syn keyword xsFunction Perl_block_gimme Perl_blockhook_register
+syn keyword xsFunction Perl_bytes_cmp_utf8 Perl_bytes_from_utf8
+syn keyword xsFunction Perl_bytes_to_utf8 Perl_call_argv Perl_call_atexit
+syn keyword xsFunction Perl_call_list Perl_call_method Perl_call_pv
+syn keyword xsFunction Perl_call_sv Perl_caller_cx Perl_calloc Perl_cast_i32
+syn keyword xsFunction Perl_cast_iv Perl_cast_ulong Perl_cast_uv
+syn keyword xsFunction Perl_ck_entersub_args_list Perl_ck_entersub_args_proto
+syn keyword xsFunction Perl_ck_entersub_args_proto_or_list Perl_ck_warner
+syn keyword xsFunction Perl_ck_warner_d Perl_ckwarn Perl_ckwarn_d
+syn keyword xsFunction Perl_clone_params_del Perl_clone_params_new
+syn keyword xsFunction Perl_cop_fetch_label Perl_cop_store_label Perl_croak
+syn keyword xsFunction Perl_croak_no_modify Perl_croak_nocontext
+syn keyword xsFunction Perl_croak_sv Perl_croak_xs_usage Perl_csighandler
+syn keyword xsFunction Perl_custom_op_desc Perl_custom_op_name
+syn keyword xsFunction Perl_custom_op_register Perl_custom_op_xop
+syn keyword xsFunction Perl_cv_clone Perl_cv_const_sv
+syn keyword xsFunction Perl_cv_get_call_checker Perl_cv_set_call_checker
+syn keyword xsFunction Perl_cv_undef Perl_cx_dump Perl_cx_dup Perl_cxinc
+syn keyword xsFunction Perl_deb Perl_deb_nocontext Perl_debop
+syn keyword xsFunction Perl_debprofdump Perl_debstack Perl_debstackptrs
+syn keyword xsFunction Perl_delimcpy Perl_despatch_signals Perl_die
+syn keyword xsFunction Perl_die_nocontext Perl_die_sv Perl_dirp_dup
+syn keyword xsFunction Perl_do_aspawn Perl_do_binmode Perl_do_close
+syn keyword xsFunction Perl_do_gv_dump Perl_do_gvgv_dump Perl_do_hv_dump
+syn keyword xsFunction Perl_do_join Perl_do_magic_dump Perl_do_op_dump
+syn keyword xsFunction Perl_do_open9 Perl_do_openn Perl_do_pmop_dump
+syn keyword xsFunction Perl_do_spawn Perl_do_spawn_nowait Perl_do_sprintf
+syn keyword xsFunction Perl_do_sv_dump Perl_doing_taint Perl_doref
+syn keyword xsFunction Perl_dounwind Perl_dowantarray Perl_dump_all
+syn keyword xsFunction Perl_dump_eval Perl_dump_fds Perl_dump_form
+syn keyword xsFunction Perl_dump_indent Perl_dump_mstats Perl_dump_packsubs
+syn keyword xsFunction Perl_dump_sub Perl_dump_vindent Perl_eval_pv
+syn keyword xsFunction Perl_eval_sv Perl_fbm_compile Perl_fbm_instr
+syn keyword xsFunction Perl_filter_add Perl_filter_del Perl_filter_read
+syn keyword xsFunction Perl_find_runcv Perl_find_rundefsv Perl_foldEQ
+syn keyword xsFunction Perl_foldEQ_latin1 Perl_foldEQ_locale
+syn keyword xsFunction Perl_foldEQ_utf8_flags Perl_form Perl_form_nocontext
+syn keyword xsFunction Perl_fp_dup Perl_fprintf_nocontext
+syn keyword xsFunction Perl_free_global_struct Perl_free_tmps Perl_get_av
+syn keyword xsFunction Perl_get_context Perl_get_cv Perl_get_cvn_flags
+syn keyword xsFunction Perl_get_hv Perl_get_mstats Perl_get_op_descs
+syn keyword xsFunction Perl_get_op_names Perl_get_ppaddr Perl_get_sv
+syn keyword xsFunction Perl_get_vtbl Perl_getcwd_sv Perl_gp_dup Perl_gp_free
+syn keyword xsFunction Perl_gp_ref Perl_grok_bin Perl_grok_hex
+syn keyword xsFunction Perl_grok_number Perl_grok_numeric_radix Perl_grok_oct
+syn keyword xsFunction Perl_gv_add_by_type Perl_gv_autoload_pv
+syn keyword xsFunction Perl_gv_autoload_pvn Perl_gv_autoload_sv Perl_gv_check
+syn keyword xsFunction Perl_gv_const_sv Perl_gv_dump Perl_gv_efullname
+syn keyword xsFunction Perl_gv_efullname4 Perl_gv_fetchfile
+syn keyword xsFunction Perl_gv_fetchfile_flags Perl_gv_fetchmeth_pv
+syn keyword xsFunction Perl_gv_fetchmeth_pv_autoload Perl_gv_fetchmeth_pvn
+syn keyword xsFunction Perl_gv_fetchmeth_pvn_autoload Perl_gv_fetchmeth_sv
+syn keyword xsFunction Perl_gv_fetchmeth_sv_autoload
+syn keyword xsFunction Perl_gv_fetchmethod_autoload
+syn keyword xsFunction Perl_gv_fetchmethod_pv_flags
+syn keyword xsFunction Perl_gv_fetchmethod_pvn_flags
+syn keyword xsFunction Perl_gv_fetchmethod_sv_flags Perl_gv_fetchpv
+syn keyword xsFunction Perl_gv_fetchpvn_flags Perl_gv_fetchsv
+syn keyword xsFunction Perl_gv_fullname Perl_gv_fullname4 Perl_gv_handler
+syn keyword xsFunction Perl_gv_init_pv Perl_gv_init_pvn Perl_gv_init_sv
+syn keyword xsFunction Perl_gv_name_set Perl_gv_stashpv Perl_gv_stashpvn
+syn keyword xsFunction Perl_gv_stashsv Perl_he_dup Perl_hek_dup
+syn keyword xsFunction Perl_hv_assert Perl_hv_clear
+syn keyword xsFunction Perl_hv_clear_placeholders Perl_hv_common
+syn keyword xsFunction Perl_hv_common_key_len Perl_hv_copy_hints_hv
+syn keyword xsFunction Perl_hv_delayfree_ent Perl_hv_eiter_p
+syn keyword xsFunction Perl_hv_eiter_set Perl_hv_fill Perl_hv_free_ent
+syn keyword xsFunction Perl_hv_iterinit Perl_hv_iterkey Perl_hv_iterkeysv
+syn keyword xsFunction Perl_hv_iternext_flags Perl_hv_iternextsv
+syn keyword xsFunction Perl_hv_iterval Perl_hv_ksplit Perl_hv_name_set
+syn keyword xsFunction Perl_hv_placeholders_get Perl_hv_placeholders_p
+syn keyword xsFunction Perl_hv_placeholders_set Perl_hv_riter_p
+syn keyword xsFunction Perl_hv_riter_set Perl_hv_scalar
+syn keyword xsFunction Perl_init_global_struct Perl_init_i18nl10n
+syn keyword xsFunction Perl_init_i18nl14n Perl_init_stacks Perl_init_tm
+syn keyword xsFunction Perl_instr Perl_is_ascii_string Perl_is_lvalue_sub
+syn keyword xsFunction Perl_is_uni_alnum Perl_is_uni_alnum_lc
+syn keyword xsFunction Perl_is_uni_alpha Perl_is_uni_alpha_lc
+syn keyword xsFunction Perl_is_uni_ascii Perl_is_uni_ascii_lc
+syn keyword xsFunction Perl_is_uni_cntrl Perl_is_uni_cntrl_lc
+syn keyword xsFunction Perl_is_uni_digit Perl_is_uni_digit_lc
+syn keyword xsFunction Perl_is_uni_graph Perl_is_uni_graph_lc
+syn keyword xsFunction Perl_is_uni_idfirst Perl_is_uni_idfirst_lc
+syn keyword xsFunction Perl_is_uni_lower Perl_is_uni_lower_lc
+syn keyword xsFunction Perl_is_uni_print Perl_is_uni_print_lc
+syn keyword xsFunction Perl_is_uni_punct Perl_is_uni_punct_lc
+syn keyword xsFunction Perl_is_uni_space Perl_is_uni_space_lc
+syn keyword xsFunction Perl_is_uni_upper Perl_is_uni_upper_lc
+syn keyword xsFunction Perl_is_uni_xdigit Perl_is_uni_xdigit_lc
+syn keyword xsFunction Perl_is_utf8_alnum Perl_is_utf8_alpha
+syn keyword xsFunction Perl_is_utf8_ascii Perl_is_utf8_char_buf
+syn keyword xsFunction Perl_is_utf8_cntrl Perl_is_utf8_digit
+syn keyword xsFunction Perl_is_utf8_graph Perl_is_utf8_idcont
+syn keyword xsFunction Perl_is_utf8_idfirst Perl_is_utf8_lower
+syn keyword xsFunction Perl_is_utf8_mark Perl_is_utf8_perl_space
+syn keyword xsFunction Perl_is_utf8_perl_word Perl_is_utf8_posix_digit
+syn keyword xsFunction Perl_is_utf8_print Perl_is_utf8_punct
+syn keyword xsFunction Perl_is_utf8_space Perl_is_utf8_string
+syn keyword xsFunction Perl_is_utf8_string_loclen Perl_is_utf8_upper
+syn keyword xsFunction Perl_is_utf8_xdigit Perl_is_utf8_xidcont
+syn keyword xsFunction Perl_is_utf8_xidfirst Perl_leave_scope
+syn keyword xsFunction Perl_lex_bufutf8 Perl_lex_discard_to
+syn keyword xsFunction Perl_lex_grow_linestr Perl_lex_next_chunk
+syn keyword xsFunction Perl_lex_peek_unichar Perl_lex_read_space
+syn keyword xsFunction Perl_lex_read_to Perl_lex_read_unichar Perl_lex_start
+syn keyword xsFunction Perl_lex_stuff_pv Perl_lex_stuff_pvn Perl_lex_stuff_sv
+syn keyword xsFunction Perl_lex_unstuff Perl_load_module
+syn keyword xsFunction Perl_load_module_nocontext Perl_looks_like_number
+syn keyword xsFunction Perl_magic_dump Perl_malloc Perl_markstack_grow
+syn keyword xsFunction Perl_mess Perl_mess_nocontext Perl_mess_sv Perl_mfree
+syn keyword xsFunction Perl_mg_clear Perl_mg_copy Perl_mg_dup Perl_mg_find
+syn keyword xsFunction Perl_mg_findext Perl_mg_free Perl_mg_free_type
+syn keyword xsFunction Perl_mg_get Perl_mg_length Perl_mg_magical Perl_mg_set
+syn keyword xsFunction Perl_mg_size Perl_mini_mktime Perl_moreswitches
+syn keyword xsFunction Perl_mro_get_from_name Perl_mro_get_linear_isa
+syn keyword xsFunction Perl_mro_get_private_data Perl_mro_method_changed_in
+syn keyword xsFunction Perl_mro_register Perl_mro_set_mro
+syn keyword xsFunction Perl_mro_set_private_data Perl_my_atof Perl_my_atof2
+syn keyword xsFunction Perl_my_bcopy Perl_my_bzero Perl_my_chsize
+syn keyword xsFunction Perl_my_cxt_index Perl_my_cxt_init Perl_my_dirfd
+syn keyword xsFunction Perl_my_exit Perl_my_failure_exit Perl_my_fflush_all
+syn keyword xsFunction Perl_my_fork Perl_my_htonl Perl_my_memcmp
+syn keyword xsFunction Perl_my_memset Perl_my_ntohl Perl_my_pclose
+syn keyword xsFunction Perl_my_popen Perl_my_popen_list Perl_my_setenv
+syn keyword xsFunction Perl_my_snprintf Perl_my_socketpair Perl_my_sprintf
+syn keyword xsFunction Perl_my_strftime Perl_my_strlcat Perl_my_strlcpy
+syn keyword xsFunction Perl_my_swap Perl_my_vsnprintf Perl_newANONATTRSUB
+syn keyword xsFunction Perl_newANONHASH Perl_newANONLIST Perl_newANONSUB
+syn keyword xsFunction Perl_newASSIGNOP Perl_newATTRSUB Perl_newAVREF
+syn keyword xsFunction Perl_newBINOP Perl_newCONDOP Perl_newCONSTSUB
+syn keyword xsFunction Perl_newCONSTSUB_flags Perl_newCVREF Perl_newFORM
+syn keyword xsFunction Perl_newFOROP Perl_newGIVENOP Perl_newGVOP
+syn keyword xsFunction Perl_newGVREF Perl_newGVgen_flags Perl_newHVREF
+syn keyword xsFunction Perl_newHVhv Perl_newLISTOP Perl_newLOGOP
+syn keyword xsFunction Perl_newLOOPEX Perl_newLOOPOP Perl_newMYSUB
+syn keyword xsFunction Perl_newNULLLIST Perl_newOP Perl_newPADOP Perl_newPMOP
+syn keyword xsFunction Perl_newPROG Perl_newPVOP Perl_newRANGE Perl_newRV
+syn keyword xsFunction Perl_newRV_noinc Perl_newSLICEOP Perl_newSTATEOP
+syn keyword xsFunction Perl_newSV Perl_newSVOP Perl_newSVREF Perl_newSV_type
+syn keyword xsFunction Perl_newSVhek Perl_newSViv Perl_newSVnv Perl_newSVpv
+syn keyword xsFunction Perl_newSVpv_share Perl_newSVpvf
+syn keyword xsFunction Perl_newSVpvf_nocontext Perl_newSVpvn
+syn keyword xsFunction Perl_newSVpvn_flags Perl_newSVpvn_share Perl_newSVrv
+syn keyword xsFunction Perl_newSVsv Perl_newSVuv Perl_newUNOP Perl_newWHENOP
+syn keyword xsFunction Perl_newWHILEOP Perl_newXS Perl_newXS_flags
+syn keyword xsFunction Perl_new_collate Perl_new_ctype Perl_new_numeric
+syn keyword xsFunction Perl_new_stackinfo Perl_new_version Perl_ninstr
+syn keyword xsFunction Perl_nothreadhook Perl_op_append_elem
+syn keyword xsFunction Perl_op_append_list Perl_op_contextualize Perl_op_dump
+syn keyword xsFunction Perl_op_free Perl_op_linklist Perl_op_null
+syn keyword xsFunction Perl_op_prepend_elem Perl_op_refcnt_lock
+syn keyword xsFunction Perl_op_refcnt_unlock Perl_op_scope Perl_pack_cat
+syn keyword xsFunction Perl_packlist Perl_pad_add_anon Perl_pad_add_name_pv
+syn keyword xsFunction Perl_pad_add_name_pvn Perl_pad_add_name_sv
+syn keyword xsFunction Perl_pad_alloc Perl_pad_compname_type
+syn keyword xsFunction Perl_pad_findmy_pv Perl_pad_findmy_pvn
+syn keyword xsFunction Perl_pad_findmy_sv Perl_pad_new Perl_pad_setsv
+syn keyword xsFunction Perl_pad_sv Perl_pad_tidy Perl_parse_arithexpr
+syn keyword xsFunction Perl_parse_barestmt Perl_parse_block
+syn keyword xsFunction Perl_parse_fullexpr Perl_parse_fullstmt
+syn keyword xsFunction Perl_parse_label Perl_parse_listexpr
+syn keyword xsFunction Perl_parse_stmtseq Perl_parse_termexpr Perl_parser_dup
+syn keyword xsFunction Perl_pmop_dump Perl_pop_scope Perl_pregcomp
+syn keyword xsFunction Perl_pregexec Perl_pregfree Perl_pregfree2
+syn keyword xsFunction Perl_prescan_version Perl_printf_nocontext
+syn keyword xsFunction Perl_ptr_table_fetch Perl_ptr_table_free
+syn keyword xsFunction Perl_ptr_table_new Perl_ptr_table_split
+syn keyword xsFunction Perl_ptr_table_store Perl_push_scope Perl_pv_display
+syn keyword xsFunction Perl_pv_escape Perl_pv_pretty Perl_pv_uni_display
+syn keyword xsFunction Perl_re_compile Perl_re_dup_guts Perl_re_intuit_start
+syn keyword xsFunction Perl_re_intuit_string Perl_realloc Perl_reentrant_free
+syn keyword xsFunction Perl_reentrant_init Perl_reentrant_retry
+syn keyword xsFunction Perl_reentrant_size Perl_reg_named_buff_all
+syn keyword xsFunction Perl_reg_named_buff_exists Perl_reg_named_buff_fetch
+syn keyword xsFunction Perl_reg_named_buff_firstkey
+syn keyword xsFunction Perl_reg_named_buff_nextkey Perl_reg_named_buff_scalar
+syn keyword xsFunction Perl_regclass_swash Perl_regdump Perl_regdupe_internal
+syn keyword xsFunction Perl_regexec_flags Perl_regfree_internal
+syn keyword xsFunction Perl_reginitcolors Perl_regnext Perl_repeatcpy
+syn keyword xsFunction Perl_require_pv Perl_rninstr Perl_rsignal
+syn keyword xsFunction Perl_rsignal_state Perl_runops_debug
+syn keyword xsFunction Perl_runops_standard Perl_rv2cv_op_cv Perl_rvpv_dup
+syn keyword xsFunction Perl_safesyscalloc Perl_safesysfree Perl_safesysmalloc
+syn keyword xsFunction Perl_safesysrealloc Perl_save_I16 Perl_save_I32
+syn keyword xsFunction Perl_save_I8 Perl_save_adelete Perl_save_aelem_flags
+syn keyword xsFunction Perl_save_alloc Perl_save_aptr Perl_save_ary
+syn keyword xsFunction Perl_save_bool Perl_save_clearsv Perl_save_delete
+syn keyword xsFunction Perl_save_destructor Perl_save_destructor_x
+syn keyword xsFunction Perl_save_generic_pvref Perl_save_generic_svref
+syn keyword xsFunction Perl_save_gp Perl_save_hash Perl_save_hdelete
+syn keyword xsFunction Perl_save_helem_flags Perl_save_hints Perl_save_hptr
+syn keyword xsFunction Perl_save_int Perl_save_item Perl_save_iv
+syn keyword xsFunction Perl_save_list Perl_save_long Perl_save_nogv
+syn keyword xsFunction Perl_save_padsv_and_mortalize Perl_save_pptr
+syn keyword xsFunction Perl_save_pushi32ptr Perl_save_pushptr
+syn keyword xsFunction Perl_save_pushptrptr Perl_save_re_context
+syn keyword xsFunction Perl_save_scalar Perl_save_set_svflags
+syn keyword xsFunction Perl_save_shared_pvref Perl_save_sptr Perl_save_svref
+syn keyword xsFunction Perl_save_vptr Perl_savepv Perl_savepvn
+syn keyword xsFunction Perl_savesharedpv Perl_savesharedpvn
+syn keyword xsFunction Perl_savesharedsvpv Perl_savestack_grow
+syn keyword xsFunction Perl_savestack_grow_cnt Perl_savesvpv Perl_scan_bin
+syn keyword xsFunction Perl_scan_hex Perl_scan_num Perl_scan_oct
+syn keyword xsFunction Perl_scan_version Perl_scan_vstring Perl_screaminstr
+syn keyword xsFunction Perl_seed Perl_set_context Perl_set_numeric_local
+syn keyword xsFunction Perl_set_numeric_radix Perl_set_numeric_standard
+syn keyword xsFunction Perl_setdefout Perl_share_hek Perl_si_dup Perl_sortsv
+syn keyword xsFunction Perl_sortsv_flags Perl_ss_dup Perl_stack_grow
+syn keyword xsFunction Perl_start_subparse Perl_stashpv_hvname_match
+syn keyword xsFunction Perl_str_to_version Perl_sv_2bool_flags Perl_sv_2cv
+syn keyword xsFunction Perl_sv_2io Perl_sv_2iv_flags Perl_sv_2mortal
+syn keyword xsFunction Perl_sv_2nv_flags Perl_sv_2pv_flags Perl_sv_2pvbyte
+syn keyword xsFunction Perl_sv_2pvutf8 Perl_sv_2uv_flags Perl_sv_backoff
+syn keyword xsFunction Perl_sv_bless Perl_sv_cat_decode Perl_sv_catpv
+syn keyword xsFunction Perl_sv_catpv_flags Perl_sv_catpv_mg Perl_sv_catpvf
+syn keyword xsFunction Perl_sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
+syn keyword xsFunction Perl_sv_catpvf_nocontext Perl_sv_catpvn_flags
+syn keyword xsFunction Perl_sv_catsv_flags Perl_sv_chop Perl_sv_clear
+syn keyword xsFunction Perl_sv_cmp Perl_sv_cmp_flags Perl_sv_cmp_locale
+syn keyword xsFunction Perl_sv_cmp_locale_flags Perl_sv_collxfrm_flags
+syn keyword xsFunction Perl_sv_copypv Perl_sv_dec Perl_sv_dec_nomg
+syn keyword xsFunction Perl_sv_derived_from Perl_sv_derived_from_pv
+syn keyword xsFunction Perl_sv_derived_from_pvn Perl_sv_derived_from_sv
+syn keyword xsFunction Perl_sv_destroyable Perl_sv_does Perl_sv_does_pv
+syn keyword xsFunction Perl_sv_does_pvn Perl_sv_does_sv Perl_sv_dump
+syn keyword xsFunction Perl_sv_dup Perl_sv_dup_inc Perl_sv_eq_flags
+syn keyword xsFunction Perl_sv_force_normal_flags Perl_sv_free Perl_sv_gets
+syn keyword xsFunction Perl_sv_grow Perl_sv_inc Perl_sv_inc_nomg
+syn keyword xsFunction Perl_sv_insert_flags Perl_sv_isa Perl_sv_isobject
+syn keyword xsFunction Perl_sv_iv Perl_sv_len Perl_sv_len_utf8 Perl_sv_magic
+syn keyword xsFunction Perl_sv_magicext Perl_sv_mortalcopy Perl_sv_newmortal
+syn keyword xsFunction Perl_sv_newref Perl_sv_nosharing Perl_sv_nounlocking
+syn keyword xsFunction Perl_sv_nv Perl_sv_peek Perl_sv_pos_b2u
+syn keyword xsFunction Perl_sv_pos_u2b Perl_sv_pos_u2b_flags Perl_sv_pvbyten
+syn keyword xsFunction Perl_sv_pvbyten_force Perl_sv_pvn
+syn keyword xsFunction Perl_sv_pvn_force_flags Perl_sv_pvn_nomg
+syn keyword xsFunction Perl_sv_pvutf8n Perl_sv_pvutf8n_force
+syn keyword xsFunction Perl_sv_recode_to_utf8 Perl_sv_reftype Perl_sv_replace
+syn keyword xsFunction Perl_sv_report_used Perl_sv_reset Perl_sv_rvweaken
+syn keyword xsFunction Perl_sv_setiv Perl_sv_setiv_mg Perl_sv_setnv
+syn keyword xsFunction Perl_sv_setnv_mg Perl_sv_setpv Perl_sv_setpv_mg
+syn keyword xsFunction Perl_sv_setpvf Perl_sv_setpvf_mg
+syn keyword xsFunction Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_nocontext
+syn keyword xsFunction Perl_sv_setpviv Perl_sv_setpviv_mg Perl_sv_setpvn
+syn keyword xsFunction Perl_sv_setpvn_mg Perl_sv_setref_iv Perl_sv_setref_nv
+syn keyword xsFunction Perl_sv_setref_pv Perl_sv_setref_pvn Perl_sv_setref_uv
+syn keyword xsFunction Perl_sv_setsv_flags Perl_sv_setsv_mg Perl_sv_setuv
+syn keyword xsFunction Perl_sv_setuv_mg Perl_sv_tainted Perl_sv_true
+syn keyword xsFunction Perl_sv_uni_display Perl_sv_unmagic Perl_sv_unmagicext
+syn keyword xsFunction Perl_sv_unref_flags Perl_sv_untaint Perl_sv_upgrade
+syn keyword xsFunction Perl_sv_usepvn_flags Perl_sv_utf8_decode
+syn keyword xsFunction Perl_sv_utf8_downgrade Perl_sv_utf8_encode
+syn keyword xsFunction Perl_sv_utf8_upgrade_flags_grow Perl_sv_uv
+syn keyword xsFunction Perl_sv_vcatpvf Perl_sv_vcatpvf_mg Perl_sv_vcatpvfn
+syn keyword xsFunction Perl_sv_vsetpvf Perl_sv_vsetpvf_mg Perl_sv_vsetpvfn
+syn keyword xsFunction Perl_swash_fetch Perl_swash_init Perl_sys_init
+syn keyword xsFunction Perl_sys_init3 Perl_sys_intern_clear
+syn keyword xsFunction Perl_sys_intern_dup Perl_sys_intern_init Perl_sys_term
+syn keyword xsFunction Perl_taint_env Perl_taint_proper Perl_tmps_grow
+syn keyword xsFunction Perl_to_uni_lower Perl_to_uni_lower_lc
+syn keyword xsFunction Perl_to_uni_title Perl_to_uni_title_lc
+syn keyword xsFunction Perl_to_uni_upper Perl_to_uni_upper_lc
+syn keyword xsFunction Perl_to_utf8_case Perl_unlnk Perl_unpack_str
+syn keyword xsFunction Perl_unpackstring Perl_unsharepvn Perl_upg_version
+syn keyword xsFunction Perl_utf16_to_utf8 Perl_utf16_to_utf8_reversed
+syn keyword xsFunction Perl_utf8_distance Perl_utf8_hop Perl_utf8_length
+syn keyword xsFunction Perl_utf8_to_bytes Perl_utf8_to_uvchr_buf
+syn keyword xsFunction Perl_utf8_to_uvuni_buf Perl_utf8n_to_uvchr
+syn keyword xsFunction Perl_utf8n_to_uvuni Perl_uvchr_to_utf8
+syn keyword xsFunction Perl_uvchr_to_utf8_flags Perl_uvuni_to_utf8_flags
+syn keyword xsFunction Perl_valid_utf8_to_uvchr Perl_valid_utf8_to_uvuni
+syn keyword xsFunction Perl_vcmp Perl_vcroak Perl_vdeb Perl_vform
+syn keyword xsFunction Perl_vload_module Perl_vmess Perl_vnewSVpvf
+syn keyword xsFunction Perl_vnormal Perl_vnumify Perl_vstringify Perl_vverify
+syn keyword xsFunction Perl_vwarn Perl_vwarner Perl_warn Perl_warn_nocontext
+syn keyword xsFunction Perl_warn_sv Perl_warner Perl_warner_nocontext
+syn keyword xsFunction Perl_whichsig_pv Perl_whichsig_pvn Perl_whichsig_sv
+syn keyword xsFunction Perl_wrap_op_checker Slab_Alloc Slab_Free
+syn keyword xsFunction _is_utf8_quotemeta _to_uni_fold_flags
+syn keyword xsFunction _to_utf8_fold_flags _to_utf8_lower_flags
+syn keyword xsFunction _to_utf8_title_flags _to_utf8_upper_flags amagic_call
+syn keyword xsFunction amagic_deref_call any_dup apply_attrs_string
+syn keyword xsFunction atfork_lock atfork_unlock av_clear av_delete av_exists
+syn keyword xsFunction av_extend av_fetch av_fill av_len av_make av_pop
+syn keyword xsFunction av_push av_shift av_store av_undef av_unshift
+syn keyword xsFunction block_gimme bytes_cmp_utf8 bytes_from_utf8
+syn keyword xsFunction bytes_to_utf8 call_argv call_atexit call_list
+syn keyword xsFunction call_method call_pv call_sv caller_cx cast_i32 cast_iv
+syn keyword xsFunction cast_ulong cast_uv ck_entersub_args_list
+syn keyword xsFunction ck_entersub_args_proto ck_entersub_args_proto_or_list
+syn keyword xsFunction ck_warner ck_warner_d croak croak_no_modify
+syn keyword xsFunction croak_nocontext croak_sv croak_xs_usage csighandler
+syn keyword xsFunction custom_op_desc custom_op_name cv_clone cv_const_sv
+syn keyword xsFunction cv_get_call_checker cv_set_call_checker cv_undef
+syn keyword xsFunction cx_dump cx_dup cxinc deb deb_nocontext debop
+syn keyword xsFunction debprofdump debstack debstackptrs delimcpy
+syn keyword xsFunction despatch_signals die die_nocontext die_sv dirp_dup
+syn keyword xsFunction do_aspawn do_binmode do_close do_gv_dump do_gvgv_dump
+syn keyword xsFunction do_hv_dump do_join do_magic_dump do_op_dump do_open9
+syn keyword xsFunction do_openn do_pmop_dump do_spawn do_spawn_nowait
+syn keyword xsFunction do_sprintf do_sv_dump doing_taint doref dounwind
+syn keyword xsFunction dowantarray dump_all dump_eval dump_fds dump_form
+syn keyword xsFunction dump_indent dump_mstats dump_packsubs dump_sub
+syn keyword xsFunction dump_vindent eval_pv eval_sv fbm_compile fbm_instr
+syn keyword xsFunction filter_add filter_del filter_read find_runcv
+syn keyword xsFunction find_rundefsv foldEQ foldEQ_latin1 foldEQ_locale
+syn keyword xsFunction foldEQ_utf8_flags form form_nocontext fp_dup
+syn keyword xsFunction fprintf_nocontext free_global_struct free_tmps get_av
+syn keyword xsFunction get_context get_cv get_cvn_flags get_hv get_mstats
+syn keyword xsFunction get_op_descs get_op_names get_ppaddr get_sv get_vtbl
+syn keyword xsFunction getcwd_sv gp_dup gp_free gp_ref grok_bin grok_hex
+syn keyword xsFunction grok_number grok_numeric_radix grok_oct gv_add_by_type
+syn keyword xsFunction gv_autoload_pv gv_autoload_pvn gv_autoload_sv gv_check
+syn keyword xsFunction gv_const_sv gv_dump gv_efullname gv_efullname4
+syn keyword xsFunction gv_fetchfile gv_fetchfile_flags gv_fetchmeth_pv
+syn keyword xsFunction gv_fetchmeth_pv_autoload gv_fetchmeth_pvn
+syn keyword xsFunction gv_fetchmeth_pvn_autoload gv_fetchmeth_sv
+syn keyword xsFunction gv_fetchmeth_sv_autoload gv_fetchmethod_autoload
+syn keyword xsFunction gv_fetchmethod_pv_flags gv_fetchmethod_pvn_flags
+syn keyword xsFunction gv_fetchmethod_sv_flags gv_fetchpv gv_fetchpvn_flags
+syn keyword xsFunction gv_fetchsv gv_fullname gv_fullname4 gv_handler
+syn keyword xsFunction gv_init_pv gv_init_pvn gv_init_sv gv_name_set
+syn keyword xsFunction gv_stashpv gv_stashpvn gv_stashsv he_dup hek_dup
+syn keyword xsFunction hv_clear hv_clear_placeholders hv_common
+syn keyword xsFunction hv_common_key_len hv_copy_hints_hv hv_delayfree_ent
+syn keyword xsFunction hv_free_ent hv_iterinit hv_iterkey hv_iterkeysv
+syn keyword xsFunction hv_iternext_flags hv_iternextsv hv_iterval hv_ksplit
+syn keyword xsFunction hv_name_set hv_scalar init_global_struct init_i18nl10n
+syn keyword xsFunction init_i18nl14n init_stacks init_tm instr
+syn keyword xsFunction is_ascii_string is_lvalue_sub is_uni_alnum
+syn keyword xsFunction is_uni_alnum_lc is_uni_alpha is_uni_alpha_lc
+syn keyword xsFunction is_uni_ascii is_uni_ascii_lc is_uni_cntrl
+syn keyword xsFunction is_uni_cntrl_lc is_uni_digit is_uni_digit_lc
+syn keyword xsFunction is_uni_graph is_uni_graph_lc is_uni_idfirst
+syn keyword xsFunction is_uni_idfirst_lc is_uni_lower is_uni_lower_lc
+syn keyword xsFunction is_uni_print is_uni_print_lc is_uni_punct
+syn keyword xsFunction is_uni_punct_lc is_uni_space is_uni_space_lc
+syn keyword xsFunction is_uni_upper is_uni_upper_lc is_uni_xdigit
+syn keyword xsFunction is_uni_xdigit_lc is_utf8_alnum is_utf8_alpha
+syn keyword xsFunction is_utf8_ascii is_utf8_char_buf is_utf8_cntrl
+syn keyword xsFunction is_utf8_digit is_utf8_graph is_utf8_idcont
+syn keyword xsFunction is_utf8_idfirst is_utf8_lower is_utf8_mark
+syn keyword xsFunction is_utf8_perl_space is_utf8_perl_word
+syn keyword xsFunction is_utf8_posix_digit is_utf8_print is_utf8_punct
+syn keyword xsFunction is_utf8_space is_utf8_string is_utf8_string_loclen
+syn keyword xsFunction is_utf8_upper is_utf8_xdigit is_utf8_xidcont
+syn keyword xsFunction is_utf8_xidfirst leave_scope lex_bufutf8
+syn keyword xsFunction lex_discard_to lex_grow_linestr lex_next_chunk
+syn keyword xsFunction lex_peek_unichar lex_read_space lex_read_to
+syn keyword xsFunction lex_read_unichar lex_start lex_stuff_pv lex_stuff_pvn
+syn keyword xsFunction lex_stuff_sv lex_unstuff load_module
+syn keyword xsFunction load_module_nocontext looks_like_number magic_dump
+syn keyword xsFunction markstack_grow mess mess_nocontext mess_sv mg_clear
+syn keyword xsFunction mg_copy mg_dup mg_find mg_findext mg_free mg_free_type
+syn keyword xsFunction mg_get mg_length mg_magical mg_set mg_size mini_mktime
+syn keyword xsFunction moreswitches mro_get_linear_isa mro_method_changed_in
+syn keyword xsFunction my_atof my_atof2 my_bcopy my_bzero my_chsize my_dirfd
+syn keyword xsFunction my_exit my_failure_exit my_fflush_all my_fork my_htonl
+syn keyword xsFunction my_memcmp my_memset my_ntohl my_pclose my_popen
+syn keyword xsFunction my_popen_list my_setenv my_socketpair my_strftime
+syn keyword xsFunction my_swap newANONATTRSUB newANONHASH newANONLIST
+syn keyword xsFunction newANONSUB newASSIGNOP newATTRSUB newAVREF newBINOP
+syn keyword xsFunction newCONDOP newCONSTSUB newCONSTSUB_flags newCVREF
+syn keyword xsFunction newFORM newFOROP newGIVENOP newGVOP newGVREF
+syn keyword xsFunction newGVgen_flags newHVREF newHVhv newLISTOP newLOGOP
+syn keyword xsFunction newLOOPEX newLOOPOP newMYSUB newNULLLIST newOP
+syn keyword xsFunction newPADOP newPMOP newPROG newPVOP newRANGE newRV
+syn keyword xsFunction newRV_noinc newSLICEOP newSTATEOP newSV newSVOP
+syn keyword xsFunction newSVREF newSV_type newSVhek newSViv newSVnv newSVpv
+syn keyword xsFunction newSVpv_share newSVpvf newSVpvf_nocontext newSVpvn
+syn keyword xsFunction newSVpvn_flags newSVpvn_share newSVrv newSVsv newSVuv
+syn keyword xsFunction newUNOP newWHENOP newWHILEOP newXS newXS_flags
+syn keyword xsFunction new_collate new_ctype new_numeric new_stackinfo
+syn keyword xsFunction new_version ninstr nothreadhook op_append_elem
+syn keyword xsFunction op_append_list op_contextualize op_dump op_free
+syn keyword xsFunction op_linklist op_null op_prepend_elem op_refcnt_lock
+syn keyword xsFunction op_refcnt_unlock op_scope pack_cat packlist
+syn keyword xsFunction pad_add_anon pad_add_name_pv pad_add_name_pvn
+syn keyword xsFunction pad_add_name_sv pad_alloc pad_compname_type
+syn keyword xsFunction pad_findmy_pv pad_findmy_pvn pad_findmy_sv pad_new
+syn keyword xsFunction pad_setsv pad_sv pad_tidy parse_arithexpr
+syn keyword xsFunction parse_barestmt parse_block parse_fullexpr
+syn keyword xsFunction parse_fullstmt parse_label parse_listexpr
+syn keyword xsFunction parse_stmtseq parse_termexpr parser_dup pmop_dump
+syn keyword xsFunction pop_scope pregcomp pregexec pregfree pregfree2
+syn keyword xsFunction prescan_version printf_nocontext ptr_table_fetch
+syn keyword xsFunction ptr_table_free ptr_table_new ptr_table_split
+syn keyword xsFunction ptr_table_store push_scope pv_display pv_escape
+syn keyword xsFunction pv_pretty pv_uni_display re_compile re_dup_guts
+syn keyword xsFunction re_intuit_start re_intuit_string reentrant_free
+syn keyword xsFunction reentrant_init reentrant_retry reentrant_size
+syn keyword xsFunction reg_named_buff_all reg_named_buff_exists
+syn keyword xsFunction reg_named_buff_fetch reg_named_buff_firstkey
+syn keyword xsFunction reg_named_buff_nextkey reg_named_buff_scalar
+syn keyword xsFunction regclass_swash regdump regdupe_internal regexec_flags
+syn keyword xsFunction regfree_internal reginitcolors regnext repeatcpy
+syn keyword xsFunction require_pv rninstr rsignal rsignal_state runops_debug
+syn keyword xsFunction runops_standard rv2cv_op_cv rvpv_dup safesyscalloc
+syn keyword xsFunction safesysfree safesysmalloc safesysrealloc save_I16
+syn keyword xsFunction save_I32 save_I8 save_adelete save_aelem_flags
+syn keyword xsFunction save_alloc save_aptr save_ary save_bool save_clearsv
+syn keyword xsFunction save_delete save_destructor save_destructor_x
+syn keyword xsFunction save_generic_pvref save_generic_svref save_gp
+syn keyword xsFunction save_hash save_hdelete save_helem_flags save_hints
+syn keyword xsFunction save_hptr save_int save_item save_iv save_list
+syn keyword xsFunction save_long save_nogv save_padsv_and_mortalize save_pptr
+syn keyword xsFunction save_pushi32ptr save_pushptr save_pushptrptr
+syn keyword xsFunction save_re_context save_scalar save_set_svflags
+syn keyword xsFunction save_shared_pvref save_sptr save_svref save_vptr
+syn keyword xsFunction savepv savepvn savesharedpv savesharedpvn
+syn keyword xsFunction savesharedsvpv savestack_grow savestack_grow_cnt
+syn keyword xsFunction savesvpv scan_bin scan_hex scan_num scan_oct
+syn keyword xsFunction scan_version scan_vstring screaminstr seed set_context
+syn keyword xsFunction set_numeric_local set_numeric_radix
+syn keyword xsFunction set_numeric_standard setdefout share_hek si_dup sortsv
+syn keyword xsFunction sortsv_flags ss_dup stack_grow start_subparse
+syn keyword xsFunction stashpv_hvname_match str_to_version sv_2bool_flags
+syn keyword xsFunction sv_2cv sv_2io sv_2iv_flags sv_2mortal sv_2nv_flags
+syn keyword xsFunction sv_2pv_flags sv_2pvbyte sv_2pvutf8 sv_2uv_flags
+syn keyword xsFunction sv_backoff sv_bless sv_cat_decode sv_catpv
+syn keyword xsFunction sv_catpv_flags sv_catpv_mg sv_catpvf sv_catpvf_mg
+syn keyword xsFunction sv_catpvf_mg_nocontext sv_catpvf_nocontext
+syn keyword xsFunction sv_catpvn_flags sv_catsv_flags sv_chop sv_clear
+syn keyword xsFunction sv_cmp_flags sv_cmp_locale_flags sv_collxfrm_flags
+syn keyword xsFunction sv_copypv sv_dec sv_dec_nomg sv_derived_from
+syn keyword xsFunction sv_derived_from_pv sv_derived_from_pvn
+syn keyword xsFunction sv_derived_from_sv sv_destroyable sv_does sv_does_pv
+syn keyword xsFunction sv_does_pvn sv_does_sv sv_dump sv_dup sv_dup_inc
+syn keyword xsFunction sv_eq_flags sv_force_normal_flags sv_free sv_gets
+syn keyword xsFunction sv_grow sv_inc sv_inc_nomg sv_insert_flags sv_isa
+syn keyword xsFunction sv_isobject sv_iv sv_len sv_len_utf8 sv_magic
+syn keyword xsFunction sv_magicext sv_mortalcopy sv_newmortal sv_newref
+syn keyword xsFunction sv_nosharing sv_nounlocking sv_nv sv_peek sv_pos_b2u
+syn keyword xsFunction sv_pos_u2b sv_pos_u2b_flags sv_pvbyten
+syn keyword xsFunction sv_pvbyten_force sv_pvn sv_pvn_force_flags sv_pvn_nomg
+syn keyword xsFunction sv_pvutf8n sv_pvutf8n_force sv_recode_to_utf8
+syn keyword xsFunction sv_reftype sv_replace sv_report_used sv_reset
+syn keyword xsFunction sv_rvweaken sv_setiv sv_setiv_mg sv_setnv sv_setnv_mg
+syn keyword xsFunction sv_setpv sv_setpv_mg sv_setpvf sv_setpvf_mg
+syn keyword xsFunction sv_setpvf_mg_nocontext sv_setpvf_nocontext sv_setpviv
+syn keyword xsFunction sv_setpviv_mg sv_setpvn sv_setpvn_mg sv_setref_iv
+syn keyword xsFunction sv_setref_nv sv_setref_pv sv_setref_pvn sv_setref_uv
+syn keyword xsFunction sv_setsv_flags sv_setsv_mg sv_setuv sv_setuv_mg
+syn keyword xsFunction sv_tainted sv_true sv_uni_display sv_unmagic
+syn keyword xsFunction sv_unmagicext sv_unref_flags sv_untaint sv_upgrade
+syn keyword xsFunction sv_usepvn_flags sv_utf8_decode sv_utf8_downgrade
+syn keyword xsFunction sv_utf8_encode sv_utf8_upgrade_flags_grow sv_uv
+syn keyword xsFunction sv_vcatpvf sv_vcatpvf_mg sv_vcatpvfn sv_vsetpvf
+syn keyword xsFunction sv_vsetpvf_mg sv_vsetpvfn swash_fetch swash_init
+syn keyword xsFunction sys_intern_clear sys_intern_dup sys_intern_init
+syn keyword xsFunction taint_env taint_proper tmps_grow to_uni_lower
+syn keyword xsFunction to_uni_lower_lc to_uni_title to_uni_title_lc
+syn keyword xsFunction to_uni_upper to_uni_upper_lc to_utf8_case unlnk
+syn keyword xsFunction unpack_str unpackstring unsharepvn upg_version
+syn keyword xsFunction utf16_to_utf8 utf16_to_utf8_reversed utf8_distance
+syn keyword xsFunction utf8_hop utf8_length utf8_to_bytes utf8_to_uvchr_buf
+syn keyword xsFunction utf8_to_uvuni_buf utf8n_to_uvchr utf8n_to_uvuni
+syn keyword xsFunction uvchr_to_utf8 uvchr_to_utf8_flags uvuni_to_utf8_flags
+syn keyword xsFunction valid_utf8_to_uvchr valid_utf8_to_uvuni vcmp vcroak
+syn keyword xsFunction vdeb vform vload_module vmess vnewSVpvf vnormal
+syn keyword xsFunction vnumify vstringify vverify vwarn vwarner warn
+syn keyword xsFunction warn_nocontext warn_sv warner warner_nocontext
+syn keyword xsFunction whichsig_pv whichsig_pvn whichsig_sv wrap_op_checker
+syn keyword xsVariable MARK MY_CXT ORIGMARK PL_I PL_No PL_Vars PL_VarsPtr
+syn keyword xsVariable PL_Yes PL_a2e PL_bincompat_options PL_bitcount
+syn keyword xsVariable PL_block_type PL_bufend PL_bufptr PL_charclass
+syn keyword xsVariable PL_check PL_copline PL_core_reg_engine PL_cshname
+syn keyword xsVariable PL_curforce PL_e2a PL_e2utf PL_endwhite PL_error_count
+syn keyword xsVariable PL_expect PL_faketokens PL_fold PL_fold_latin1
+syn keyword xsVariable PL_fold_locale PL_force_link_funcs PL_freq
+syn keyword xsVariable PL_global_struct_size PL_hexdigit PL_in_my
+syn keyword xsVariable PL_in_my_stash PL_interp_size PL_interp_size_5_16_0
+syn keyword xsVariable PL_last_lop PL_last_lop_op PL_last_uni PL_lasttoke
+syn keyword xsVariable PL_latin1_lc PL_lex_allbrackets PL_lex_brackets
+syn keyword xsVariable PL_lex_brackstack PL_lex_casemods PL_lex_casestack
+syn keyword xsVariable PL_lex_defer PL_lex_dojoin PL_lex_expect
+syn keyword xsVariable PL_lex_fakeeof PL_lex_formbrack PL_lex_inpat
+syn keyword xsVariable PL_lex_inwhat PL_lex_op PL_lex_repl PL_lex_starts
+syn keyword xsVariable PL_lex_state PL_lex_stuff PL_linestart PL_linestr
+syn keyword xsVariable PL_magic_data PL_magic_vtable_names PL_memory_wrap
+syn keyword xsVariable PL_mod_latin1_uc PL_multi_close PL_multi_end
+syn keyword xsVariable PL_multi_open PL_multi_start PL_nexttoke PL_nexttype
+syn keyword xsVariable PL_nextval PL_nextwhite PL_no_aelem PL_no_dir_func
+syn keyword xsVariable PL_no_func PL_no_helem_sv PL_no_localize_ref PL_no_mem
+syn keyword xsVariable PL_no_modify PL_no_myglob PL_no_security
+syn keyword xsVariable PL_no_sock_func PL_no_symref PL_no_symref_sv
+syn keyword xsVariable PL_no_usym PL_no_wrongref PL_oldbufptr PL_oldoldbufptr
+syn keyword xsVariable PL_op_desc PL_op_name PL_opargs PL_pending_ident
+syn keyword xsVariable PL_phase_names PL_ppaddr PL_preambled
+syn keyword xsVariable PL_realtokenstart PL_reg_extflags_name PL_reg_name
+syn keyword xsVariable PL_regkind PL_revision PL_rsfp PL_rsfp_filters
+syn keyword xsVariable PL_runops_dbg PL_runops_std PL_sh_path PL_sig_name
+syn keyword xsVariable PL_sig_num PL_simple PL_simple_bitmask PL_skipwhite
+syn keyword xsVariable PL_sublex_info PL_subversion PL_thisclose PL_thismad
+syn keyword xsVariable PL_thisopen PL_thisstuff PL_thistoken PL_thiswhite
+syn keyword xsVariable PL_tokenbuf PL_utf2e PL_utf8skip PL_uudmap PL_uuemap
+syn keyword xsVariable PL_valid_types_IVX PL_valid_types_IV_set
+syn keyword xsVariable PL_valid_types_NVX PL_valid_types_NV_set
+syn keyword xsVariable PL_valid_types_PVX PL_valid_types_RV PL_varies
+syn keyword xsVariable PL_varies_bitmask PL_version PL_warn_nl PL_warn_nosemi
+syn keyword xsVariable PL_warn_reserved PL_warn_uninit PL_warn_uninit_sv
+syn keyword xsVariable RETVAL SP TARG _aMY_CXT _aTHX aMY_CXT aMY_CXT_ aTHX
+syn keyword xsVariable aTHX_ items
+syn keyword xsMacro ABORT ACCEPT ADDOP AHOCORASICK AHOCORASICKC
+syn keyword xsMacro ALLOC_THREAD_KEY ALNUM ALNUMA ALNUML ALNUMU AMG_CALLun
+syn keyword xsMacro AMG_CALLunary AMGf_assign AMGf_noleft AMGf_noright
+syn keyword xsMacro AMGf_numeric AMGf_set AMGf_unary AMGfallNEVER AMGfallNO
+syn keyword xsMacro AMGfallYES AMT_AMAGIC AMT_AMAGIC_off AMT_AMAGIC_on
+syn keyword xsMacro AMT_OVERLOADED AMT_OVERLOADED_off AMT_OVERLOADED_on
+syn keyword xsMacro AMTf_AMAGIC AMTf_OVERLOADED ANDAND ANDOP ANONSUB ANYOF
+syn keyword xsMacro ANYOFV ANYOF_ALNUM ANYOF_ALNUMC ANYOF_ALNUML ANYOF_ALPHA
+syn keyword xsMacro ANYOF_ASCII ANYOF_BIT ANYOF_BITMAP ANYOF_BITMAP_BYTE
+syn keyword xsMacro ANYOF_BITMAP_CLEAR ANYOF_BITMAP_CLEARALL ANYOF_BITMAP_SET
+syn keyword xsMacro ANYOF_BITMAP_SETALL ANYOF_BITMAP_SIZE ANYOF_BITMAP_TEST
+syn keyword xsMacro ANYOF_BITMAP_TESTALLSET ANYOF_BITMAP_ZERO ANYOF_BLANK
+syn keyword xsMacro ANYOF_CLASS ANYOF_CLASSBITMAP_SIZE ANYOF_CLASS_BYTE
+syn keyword xsMacro ANYOF_CLASS_CLEAR ANYOF_CLASS_SET ANYOF_CLASS_SETALL
+syn keyword xsMacro ANYOF_CLASS_SIZE ANYOF_CLASS_SKIP ANYOF_CLASS_TEST
+syn keyword xsMacro ANYOF_CLASS_TEST_ANY_SET ANYOF_CLASS_ZERO ANYOF_CNTRL
+syn keyword xsMacro ANYOF_DIGIT ANYOF_EOS ANYOF_FLAGS ANYOF_FLAGS_ALL
+syn keyword xsMacro ANYOF_FOLD_SHARP_S ANYOF_GRAPH ANYOF_HORIZWS ANYOF_INVERT
+syn keyword xsMacro ANYOF_IS_SYNTHETIC ANYOF_LARGE ANYOF_LOCALE
+syn keyword xsMacro ANYOF_LOC_NONBITMAP_FOLD ANYOF_LOWER ANYOF_MAX
+syn keyword xsMacro ANYOF_NALNUM ANYOF_NALNUMC ANYOF_NALNUML ANYOF_NALPHA
+syn keyword xsMacro ANYOF_NASCII ANYOF_NBLANK ANYOF_NCNTRL ANYOF_NDIGIT
+syn keyword xsMacro ANYOF_NGRAPH ANYOF_NHORIZWS ANYOF_NLOWER ANYOF_NONBITMAP
+syn keyword xsMacro ANYOF_NONBITMAP_EMPTY ANYOF_NONBITMAP_NON_UTF8
+syn keyword xsMacro ANYOF_NON_UTF8_LATIN1_ALL ANYOF_NPRINT ANYOF_NPSXSPC
+syn keyword xsMacro ANYOF_NPUNCT ANYOF_NSPACE ANYOF_NSPACEL ANYOF_NUPPER
+syn keyword xsMacro ANYOF_NVERTWS ANYOF_NXDIGIT ANYOF_PRINT ANYOF_PSXSPC
+syn keyword xsMacro ANYOF_PUNCT ANYOF_SIZE ANYOF_SKIP ANYOF_SPACE
+syn keyword xsMacro ANYOF_SPACEL ANYOF_UNICODE_ALL ANYOF_UPPER ANYOF_VERTWS
+syn keyword xsMacro ANYOF_XDIGIT ARCHLIB ARCHLIB_EXP ARCHNAME ARG ARG1
+syn keyword xsMacro ARG1_LOC ARG1_SET ARG2 ARG2L ARG2L_LOC ARG2L_SET ARG2_LOC
+syn keyword xsMacro ARG2_SET ARGTARG ARG_LOC ARG_SET ARG_VALUE ARG__SET ARROW
+syn keyword xsMacro ASCII_MORE_RESTRICT_PAT_MODS ASCII_RESTRICT_PAT_MOD
+syn keyword xsMacro ASCII_RESTRICT_PAT_MODS ASCII_TO_NATIVE ASCII_TO_NEED
+syn keyword xsMacro ASCTIME_R_PROTO ASSERT_CURPAD_ACTIVE ASSERT_CURPAD_LEGAL
+syn keyword xsMacro ASSIGNOP Atof Atol Atoul AvALLOC AvARRAY AvARYLEN AvFILL
+syn keyword xsMacro AvFILLp AvMAX AvREAL AvREALISH AvREAL_off AvREAL_on
+syn keyword xsMacro AvREAL_only AvREIFY AvREIFY_off AvREIFY_on AvREIFY_only
+syn keyword xsMacro BACK BADVERSION BASEOP BHKf_bhk_eval BHKf_bhk_post_end
+syn keyword xsMacro BHKf_bhk_pre_end BHKf_bhk_start BIN BIN_EXP BITANDOP
+syn keyword xsMacro BITMAP_BYTE BITMAP_TEST BITOROP BIT_BUCKET BIT_DIGITS BOL
+syn keyword xsMacro BOUND BOUNDA BOUNDL BOUNDU BRANCH BRANCHJ BRANCH_next
+syn keyword xsMacro BRANCH_next_fail BSD_GETPGRP BSD_SETPGRP BSDish BUFSIZ
+syn keyword xsMacro BYTEORDER BhkDISABLE BhkENABLE BhkENTRY BhkENTRY_set
+syn keyword xsMacro BhkFLAGS Bit BmFLAGS BmPREVIOUS BmRARE BmUSEFUL
+syn keyword xsMacro CALLREGCOMP CALLREGCOMP_ENG CALLREGDUPE CALLREGDUPE_PVT
+syn keyword xsMacro CALLREGEXEC CALLREGFREE CALLREGFREE_PVT
+syn keyword xsMacro CALLREG_INTUIT_START CALLREG_INTUIT_STRING
+syn keyword xsMacro CALLREG_NAMED_BUFF_ALL CALLREG_NAMED_BUFF_CLEAR
+syn keyword xsMacro CALLREG_NAMED_BUFF_COUNT CALLREG_NAMED_BUFF_DELETE
+syn keyword xsMacro CALLREG_NAMED_BUFF_EXISTS CALLREG_NAMED_BUFF_FETCH
+syn keyword xsMacro CALLREG_NAMED_BUFF_FIRSTKEY CALLREG_NAMED_BUFF_NEXTKEY
+syn keyword xsMacro CALLREG_NAMED_BUFF_SCALAR CALLREG_NAMED_BUFF_STORE
+syn keyword xsMacro CALLREG_NUMBUF_FETCH CALLREG_NUMBUF_LENGTH
+syn keyword xsMacro CALLREG_NUMBUF_STORE CALLREG_PACKAGE CALLRUNOPS
+syn keyword xsMacro CALL_BLOCK_HOOKS CALL_FPTR CANY CAN_COW_FLAGS
+syn keyword xsMacro CAN_COW_MASK CAN_PROTOTYPE CAN_VAPROTO
+syn keyword xsMacro CASE_STD_PMMOD_FLAGS_PARSE_SET CASTFLAGS CASTNEGFLOAT
+syn keyword xsMacro CAT2 CATCH_GET CATCH_SET CHARBITS CHARSET_PAT_MODS
+syn keyword xsMacro CHECK_MALLOC_TAINT CHECK_MALLOC_TOO_LATE_FOR
+syn keyword xsMacro CHECK_MALLOC_TOO_LATE_FOR_ CLEAR_ARGARRAY CLEAR_ERRSV
+syn keyword xsMacro CLONEf_CLONE_HOST CLONEf_COPY_STACKS CLONEf_JOIN_IN
+syn keyword xsMacro CLONEf_KEEP_PTR_TABLE CLOSE CLUMP CLUMP_2IV CLUMP_2UV
+syn keyword xsMacro COLONATTR COMMIT COMMIT_next COMMIT_next_fail
+syn keyword xsMacro COND_BROADCAST COND_DESTROY COND_INIT COND_SIGNAL
+syn keyword xsMacro COND_WAIT CONTINUE CONTINUE_PAT_MOD COPHH_KEY_UTF8
+syn keyword xsMacro COP_SEQ_RANGE_HIGH COP_SEQ_RANGE_LOW CPERLarg CPERLarg_
+syn keyword xsMacro CPERLscope CPPLAST CPPMINUS CPPRUN CPPSTDIN CRYPT_R_PROTO
+syn keyword xsMacro CSH CTERMID_R_PROTO CTIME_R_PROTO CTYPE256 CURLY CURLYM
+syn keyword xsMacro CURLYM_A CURLYM_A_fail CURLYM_B CURLYM_B_fail CURLYN
+syn keyword xsMacro CURLYX CURLYX_end CURLYX_end_fail CURLY_B_max
+syn keyword xsMacro CURLY_B_max_fail CURLY_B_min CURLY_B_min_fail
+syn keyword xsMacro CURLY_B_min_known CURLY_B_min_known_fail
+syn keyword xsMacro CURRENT_FEATURE_BUNDLE CURRENT_HINTS CUTGROUP
+syn keyword xsMacro CUTGROUP_next CUTGROUP_next_fail CVf_ANON CVf_AUTOLOAD
+syn keyword xsMacro CVf_BUILTIN_ATTRS CVf_CLONE CVf_CLONED CVf_CONST
+syn keyword xsMacro CVf_CVGV_RC CVf_DYNFILE CVf_ISXSUB CVf_LVALUE CVf_METHOD
+syn keyword xsMacro CVf_NODEBUG CVf_UNIQUE CVf_WEAKOUTSIDE CXINC CXTYPEMASK
+syn keyword xsMacro CX_CURPAD_SAVE CX_CURPAD_SV CXp_FOR_DEF CXp_HASARGS
+syn keyword xsMacro CXp_MULTICALL CXp_ONCE CXp_REAL CXp_TRYBLOCK C_ARRAY_END
+syn keyword xsMacro C_ARRAY_LENGTH C_FAC_POSIX CopFILE CopFILEAV CopFILEAVx
+syn keyword xsMacro CopFILEGV CopFILEGV_set CopFILESV CopFILE_free
+syn keyword xsMacro CopFILE_set CopFILE_setn CopHINTHASH_get CopHINTHASH_set
+syn keyword xsMacro CopHINTS_get CopHINTS_set CopLABEL CopLABEL_alloc
+syn keyword xsMacro CopLABEL_len CopLABEL_len_flags CopLINE CopLINE_dec
+syn keyword xsMacro CopLINE_inc CopLINE_set CopSTASH CopSTASHPV
+syn keyword xsMacro CopSTASHPV_set CopSTASH_eq CopSTASH_free CopSTASH_len
+syn keyword xsMacro CopSTASH_len_set CopSTASH_ne CopSTASH_set Copy CopyD Ctl
+syn keyword xsMacro CvANON CvANON_off CvANON_on CvAUTOLOAD CvAUTOLOAD_off
+syn keyword xsMacro CvAUTOLOAD_on CvCLONE CvCLONED CvCLONED_off CvCLONED_on
+syn keyword xsMacro CvCLONE_off CvCLONE_on CvCONST CvCONST_off CvCONST_on
+syn keyword xsMacro CvCVGV_RC CvCVGV_RC_off CvCVGV_RC_on CvDEPTH CvDYNFILE
+syn keyword xsMacro CvDYNFILE_off CvDYNFILE_on CvEVAL CvEVAL_off CvEVAL_on
+syn keyword xsMacro CvFILE CvFILEGV CvFILE_set_from_cop CvFLAGS CvGV CvGV_set
+syn keyword xsMacro CvISXSUB CvISXSUB_off CvISXSUB_on CvLVALUE CvLVALUE_off
+syn keyword xsMacro CvLVALUE_on CvMETHOD CvMETHOD_off CvMETHOD_on CvNODEBUG
+syn keyword xsMacro CvNODEBUG_off CvNODEBUG_on CvOUTSIDE CvOUTSIDE_SEQ
+syn keyword xsMacro CvPADLIST CvPROTO CvPROTOLEN CvROOT CvSPECIAL
+syn keyword xsMacro CvSPECIAL_off CvSPECIAL_on CvSTART CvSTASH CvSTASH_set
+syn keyword xsMacro CvUNIQUE CvUNIQUE_off CvUNIQUE_on CvWEAKOUTSIDE
+syn keyword xsMacro CvWEAKOUTSIDE_off CvWEAKOUTSIDE_on CvXSUB CvXSUBANY
+syn keyword xsMacro CxFOREACH CxFOREACHDEF CxHASARGS CxITERVAR
+syn keyword xsMacro CxITERVAR_PADSV CxLABEL CxLABEL_len CxLABEL_len_flags
+syn keyword xsMacro CxLVAL CxMULTICALL CxOLD_IN_EVAL CxOLD_OP_TYPE CxONCE
+syn keyword xsMacro CxPADLOOP CxREALEVAL CxTRYBLOCK CxTYPE CxTYPE_is_LOOP
+syn keyword xsMacro DBL_DIG DBL_MAX DBL_MIN DBM_ckFilter DBM_setFilter
+syn keyword xsMacro DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG
+syn keyword xsMacro DB_VERSION_PATCH_CFG DEBUG_A DEBUG_A_FLAG DEBUG_A_TEST
+syn keyword xsMacro DEBUG_A_TEST_ DEBUG_B DEBUG_BUFFERS_r DEBUG_B_FLAG
+syn keyword xsMacro DEBUG_B_TEST DEBUG_B_TEST_ DEBUG_C DEBUG_COMPILE_r
+syn keyword xsMacro DEBUG_CX DEBUG_C_FLAG DEBUG_C_TEST DEBUG_C_TEST_ DEBUG_D
+syn keyword xsMacro DEBUG_DB_RECURSE_FLAG DEBUG_DUMP_r DEBUG_D_FLAG
+syn keyword xsMacro DEBUG_D_TEST DEBUG_D_TEST_ DEBUG_EXECUTE_r DEBUG_EXTRA_r
+syn keyword xsMacro DEBUG_FLAGS_r DEBUG_GPOS_r DEBUG_H DEBUG_H_FLAG
+syn keyword xsMacro DEBUG_H_TEST DEBUG_H_TEST_ DEBUG_INTUIT_r DEBUG_J_FLAG
+syn keyword xsMacro DEBUG_J_TEST DEBUG_J_TEST_ DEBUG_M DEBUG_MASK
+syn keyword xsMacro DEBUG_MATCH_r DEBUG_M_FLAG DEBUG_M_TEST DEBUG_M_TEST_
+syn keyword xsMacro DEBUG_OFFSETS_r DEBUG_OPTIMISE_MORE_r DEBUG_OPTIMISE_r
+syn keyword xsMacro DEBUG_P DEBUG_PARSE_r DEBUG_P_FLAG DEBUG_P_TEST
+syn keyword xsMacro DEBUG_P_TEST_ DEBUG_Pv DEBUG_Pv_TEST DEBUG_Pv_TEST_
+syn keyword xsMacro DEBUG_R DEBUG_R_FLAG DEBUG_R_TEST DEBUG_R_TEST_
+syn keyword xsMacro DEBUG_SCOPE DEBUG_STACK_r DEBUG_STATE_r DEBUG_T
+syn keyword xsMacro DEBUG_TOP_FLAG DEBUG_TRIE_COMPILE_MORE_r
+syn keyword xsMacro DEBUG_TRIE_COMPILE_r DEBUG_TRIE_EXECUTE_MORE_r
+syn keyword xsMacro DEBUG_TRIE_EXECUTE_r DEBUG_TRIE_r DEBUG_T_FLAG
+syn keyword xsMacro DEBUG_T_TEST DEBUG_T_TEST_ DEBUG_U DEBUG_U_FLAG
+syn keyword xsMacro DEBUG_U_TEST DEBUG_U_TEST_ DEBUG_Uv DEBUG_Uv_TEST
+syn keyword xsMacro DEBUG_Uv_TEST_ DEBUG_X DEBUG_X_FLAG DEBUG_X_TEST
+syn keyword xsMacro DEBUG_X_TEST_ DEBUG_Xv DEBUG_Xv_TEST DEBUG_Xv_TEST_
+syn keyword xsMacro DEBUG__ DEBUG_c DEBUG_c_FLAG DEBUG_c_TEST DEBUG_c_TEST_
+syn keyword xsMacro DEBUG_f DEBUG_f_FLAG DEBUG_f_TEST DEBUG_f_TEST_ DEBUG_l
+syn keyword xsMacro DEBUG_l_FLAG DEBUG_l_TEST DEBUG_l_TEST_ DEBUG_m
+syn keyword xsMacro DEBUG_m_FLAG DEBUG_m_TEST DEBUG_m_TEST_ DEBUG_o
+syn keyword xsMacro DEBUG_o_FLAG DEBUG_o_TEST DEBUG_o_TEST_ DEBUG_p
+syn keyword xsMacro DEBUG_p_FLAG DEBUG_p_TEST DEBUG_p_TEST_ DEBUG_q
+syn keyword xsMacro DEBUG_q_FLAG DEBUG_q_TEST DEBUG_q_TEST_ DEBUG_r
+syn keyword xsMacro DEBUG_r_FLAG DEBUG_r_TEST DEBUG_r_TEST_ DEBUG_s
+syn keyword xsMacro DEBUG_s_FLAG DEBUG_s_TEST DEBUG_s_TEST_ DEBUG_t_FLAG
+syn keyword xsMacro DEBUG_t_TEST DEBUG_t_TEST_ DEBUG_u DEBUG_u_FLAG
+syn keyword xsMacro DEBUG_u_TEST DEBUG_u_TEST_ DEBUG_v DEBUG_v_FLAG
+syn keyword xsMacro DEBUG_v_TEST DEBUG_v_TEST_ DEBUG_x DEBUG_x_FLAG
+syn keyword xsMacro DEBUG_x_TEST DEBUG_x_TEST_ DEFAULT DEFAULT_PAT_MOD
+syn keyword xsMacro DEFINEP DEFSV DEFSV_set DEPENDS_PAT_MOD DEPENDS_PAT_MODS
+syn keyword xsMacro DETACH DIE DIGIT DIGITA DIGITL DIR DM_ARRAY_ISA DM_DELAY
+syn keyword xsMacro DM_EGID DM_EUID DM_GID DM_RGID DM_RUID DM_UID DO DOINIT
+syn keyword xsMacro DOLSHARP DONT_DECLARE_STD DORDOR DOROP DOSISH DOTDOT
+syn keyword xsMacro DOUBLESIZE DO_UTF8 DPTR2FPTR DRAND48_R_PROTO DUP_WARNINGS
+syn keyword xsMacro Drand01 ELSE ELSIF EMBEDMYMALLOC END ENDGRENT_R_PROTO
+syn keyword xsMacro ENDHOSTENT_R_PROTO ENDLIKE ENDNETENT_R_PROTO
+syn keyword xsMacro ENDPROTOENT_R_PROTO ENDPWENT_R_PROTO ENDSERVENT_R_PROTO
+syn keyword xsMacro END_EXTERN_C ENTER ENTER_with_name ENTRY_PROBE ENUM_BOOL
+syn keyword xsMacro EOF EOL EOS EQOP ERRHV ERRSV EVAL EVAL_AB EVAL_AB_fail
+syn keyword xsMacro EVAL_INEVAL EVAL_INREQUIRE EVAL_KEEPERR EVAL_NULL
+syn keyword xsMacro EVAL_WARNONLY EXACT EXACTF EXACTFA EXACTFL EXACTFU
+syn keyword xsMacro EXACTFU_SS EXACTFU_TRICKYFOLD EXEC_ARGV_CAST EXEC_PAT_MOD
+syn keyword xsMacro EXEC_PAT_MODS EXPECT EXT EXTCONST EXTEND EXTEND_MORTAL
+syn keyword xsMacro EXTERN_C EXTPERLIO EXTRA_SIZE EXTRA_STEP_2ARGS EXT_MGVTBL
+syn keyword xsMacro EXT_PAT_MODS FAKE_BIT_BUCKET FAKE_DEFAULT_SIGNAL_HANDLERS
+syn keyword xsMacro FAKE_PERSISTENT_SIGNAL_HANDLERS FBMcf_TAIL
+syn keyword xsMacro FBMcf_TAIL_DOLLAR FBMcf_TAIL_DOLLARM FBMcf_TAIL_Z
+syn keyword xsMacro FBMcf_TAIL_z FBMrf_MULTILINE FCNTL_CAN_LOCK FD_CLR
+syn keyword xsMacro FD_ISSET FD_SET FD_ZERO FEATURE_ARYBASE_IS_ENABLED
+syn keyword xsMacro FEATURE_BUNDLE_510 FEATURE_BUNDLE_511 FEATURE_BUNDLE_515
+syn keyword xsMacro FEATURE_BUNDLE_CUSTOM FEATURE_BUNDLE_DEFAULT
+syn keyword xsMacro FEATURE_EVALBYTES_IS_ENABLED FEATURE_FC_IS_ENABLED
+syn keyword xsMacro FEATURE_IS_ENABLED FEATURE_SAY_IS_ENABLED
+syn keyword xsMacro FEATURE_STATE_IS_ENABLED FEATURE_SWITCH_IS_ENABLED
+syn keyword xsMacro FEATURE_UNICODE_IS_ENABLED FEATURE_UNIEVAL_IS_ENABLED
+syn keyword xsMacro FEATURE___SUB___IS_ENABLED FFLUSH_NULL FF_0DECIMAL
+syn keyword xsMacro FF_BLANK FF_CHECKCHOP FF_CHECKNL FF_CHOP FF_DECIMAL
+syn keyword xsMacro FF_END FF_FETCH FF_HALFSPACE FF_ITEM FF_LINEGLOB
+syn keyword xsMacro FF_LINEMARK FF_LINESNGL FF_LITERAL FF_MORE FF_NEWLINE
+syn keyword xsMacro FF_SKIP FF_SPACE FILE FILE_base FILE_bufsiz FILE_cnt
+syn keyword xsMacro FILE_ptr FILL_ADVANCE_NODE FILL_ADVANCE_NODE_ARG
+syn keyword xsMacro FILTER_DATA FILTER_ISREADER FILTER_READ FITS_IN_8_BITS
+syn keyword xsMacro FLAGS FLEXFILENAMES FOLDEQ_S1_ALREADY_FOLDED
+syn keyword xsMacro FOLDEQ_S2_ALREADY_FOLDED FOLDEQ_UTF8_LOCALE
+syn keyword xsMacro FOLDEQ_UTF8_NOMIX_ASCII FOLD_FLAGS_FULL FOLD_FLAGS_LOCALE
+syn keyword xsMacro FOR FORMAT FPTR2DPTR FREETMPS FREE_THREAD_KEY FSEEKSIZE
+syn keyword xsMacro FUNC FUNC0 FUNC0OP FUNC0SUB FUNC1 FUNCMETH FUNCTION__
+syn keyword xsMacro F_atan2_amg F_cos_amg F_exp_amg F_log_amg F_pow_amg
+syn keyword xsMacro F_sin_amg F_sqrt_amg Fflush FmLINES FreeOp Fstat
+syn keyword xsMacro GDBMNDBM_H_USES_PROTOTYPES GETATARGET GETGRENT_R_PROTO
+syn keyword xsMacro GETGRGID_R_PROTO GETGRNAM_R_PROTO GETHOSTBYADDR_R_PROTO
+syn keyword xsMacro GETHOSTBYNAME_R_PROTO GETHOSTENT_R_PROTO GETLOGIN_R_PROTO
+syn keyword xsMacro GETNETBYADDR_R_PROTO GETNETBYNAME_R_PROTO
+syn keyword xsMacro GETNETENT_R_PROTO GETPROTOBYNAME_R_PROTO
+syn keyword xsMacro GETPROTOBYNUMBER_R_PROTO GETPROTOENT_R_PROTO
+syn keyword xsMacro GETPWENT_R_PROTO GETPWNAM_R_PROTO GETPWUID_R_PROTO
+syn keyword xsMacro GETSERVBYNAME_R_PROTO GETSERVBYPORT_R_PROTO
+syn keyword xsMacro GETSERVENT_R_PROTO GETSPNAM_R_PROTO GETTARGET
+syn keyword xsMacro GETTARGETSTACKED GET_RE_DEBUG_FLAGS
+syn keyword xsMacro GET_RE_DEBUG_FLAGS_DECL GIMME GIMME_V GIVEN
+syn keyword xsMacro GLOBAL_PAT_MOD GMTIME_MAX GMTIME_MIN GMTIME_R
+syn keyword xsMacro GMTIME_R_PROTO GOSTART GOSUB GPOS GRAMBARESTMT GRAMBLOCK
+syn keyword xsMacro GRAMEXPR GRAMFULLSTMT GRAMPROG GRAMSTMTSEQ
+syn keyword xsMacro GREEK_CAPITAL_LETTER_MU GREEK_SMALL_LETTER_MU
+syn keyword xsMacro GROK_NUMERIC_RADIX GROUPP GRPASSWD GV_ADD GV_ADDINEVAL
+syn keyword xsMacro GV_ADDMG GV_ADDMULTI GV_ADDWARN GV_AUTOLOAD
+syn keyword xsMacro GV_AUTOLOAD_ISMETHOD GV_CROAK GV_NOADD_MASK
+syn keyword xsMacro GV_NOADD_NOINIT GV_NOEXPAND GV_NOINIT GV_NOTQUAL
+syn keyword xsMacro GV_NO_SVGMAGIC GVf_ASSUMECV GVf_IMPORTED GVf_IMPORTED_AV
+syn keyword xsMacro GVf_IMPORTED_CV GVf_IMPORTED_HV GVf_IMPORTED_SV GVf_INTRO
+syn keyword xsMacro GVf_IN_PAD GVf_MULTI Gconvert Gid_t_f Gid_t_sign
+syn keyword xsMacro Gid_t_size GvASSIGN_GENERATION GvASSIGN_GENERATION_set
+syn keyword xsMacro GvASSUMECV GvASSUMECV_off GvASSUMECV_on GvAV GvAVn GvCV
+syn keyword xsMacro GvCVGEN GvCV_set GvCVu GvEGV GvEGVx GvENAME GvENAMELEN
+syn keyword xsMacro GvENAMEUTF8 GvENAME_HEK GvESTASH GvFILE GvFILEGV
+syn keyword xsMacro GvFILE_HEK GvFLAGS GvFORM GvGP GvGP_set GvHV GvHVn
+syn keyword xsMacro GvIMPORTED GvIMPORTED_AV GvIMPORTED_AV_off
+syn keyword xsMacro GvIMPORTED_AV_on GvIMPORTED_CV GvIMPORTED_CV_off
+syn keyword xsMacro GvIMPORTED_CV_on GvIMPORTED_HV GvIMPORTED_HV_off
+syn keyword xsMacro GvIMPORTED_HV_on GvIMPORTED_SV GvIMPORTED_SV_off
+syn keyword xsMacro GvIMPORTED_SV_on GvIMPORTED_off GvIMPORTED_on GvINTRO
+syn keyword xsMacro GvINTRO_off GvINTRO_on GvIN_PAD GvIN_PAD_off GvIN_PAD_on
+syn keyword xsMacro GvIO GvIOn GvIOp GvLINE GvMULTI GvMULTI_off GvMULTI_on
+syn keyword xsMacro GvNAME GvNAMELEN GvNAMELEN_get GvNAMEUTF8 GvNAME_HEK
+syn keyword xsMacro GvNAME_get GvREFCNT GvSTASH GvSV GvSVn GvXPVGV Gv_AMG
+syn keyword xsMacro HASATTRIBUTE_DEPRECATED HASATTRIBUTE_FORMAT
+syn keyword xsMacro HASATTRIBUTE_MALLOC HASATTRIBUTE_NONNULL
+syn keyword xsMacro HASATTRIBUTE_NORETURN HASATTRIBUTE_PURE
+syn keyword xsMacro HASATTRIBUTE_UNUSED HASATTRIBUTE_WARN_UNUSED_RESULT
+syn keyword xsMacro HASCONST HASHBRACK HASVOLATILE HAS_64K_LIMIT HAS_ACCESS
+syn keyword xsMacro HAS_ALARM HAS_ATOLL HAS_BCMP HAS_BCOPY HAS_BOOL
+syn keyword xsMacro HAS_BUILTIN_CHOOSE_EXPR HAS_BUILTIN_EXPECT HAS_BZERO
+syn keyword xsMacro HAS_C99_VARIADIC_MACROS HAS_CHOWN HAS_CHROOT HAS_CLEARENV
+syn keyword xsMacro HAS_COPYSIGNL HAS_CRYPT HAS_CTERMID HAS_CUSERID
+syn keyword xsMacro HAS_DBL_DIG HAS_DBMINIT_PROTO HAS_DIFFTIME HAS_DIRFD
+syn keyword xsMacro HAS_DLERROR HAS_DRAND48_PROTO HAS_DUP2 HAS_EACCESS
+syn keyword xsMacro HAS_ENDGRENT HAS_ENDHOSTENT HAS_ENDNETENT HAS_ENDPROTOENT
+syn keyword xsMacro HAS_ENDPWENT HAS_ENDSERVENT HAS_FAST_STDIO HAS_FCHDIR
+syn keyword xsMacro HAS_FCHMOD HAS_FCHOWN HAS_FCNTL HAS_FD_SET HAS_FGETPOS
+syn keyword xsMacro HAS_FINITE HAS_FINITEL HAS_FLOCK HAS_FLOCK_PROTO HAS_FORK
+syn keyword xsMacro HAS_FPATHCONF HAS_FREXPL HAS_FSEEKO HAS_FSETPOS
+syn keyword xsMacro HAS_FSTATFS HAS_FSTATVFS HAS_FSYNC HAS_FTELLO HAS_FUTIMES
+syn keyword xsMacro HAS_GETADDRINFO HAS_GETCWD HAS_GETGRENT HAS_GETGROUPS
+syn keyword xsMacro HAS_GETHOSTBYADDR HAS_GETHOSTBYNAME HAS_GETHOSTENT
+syn keyword xsMacro HAS_GETHOSTNAME HAS_GETHOST_PROTOS HAS_GETITIMER
+syn keyword xsMacro HAS_GETLOGIN HAS_GETMNTENT HAS_GETNAMEINFO
+syn keyword xsMacro HAS_GETNETBYADDR HAS_GETNETBYNAME HAS_GETNETENT
+syn keyword xsMacro HAS_GETNET_PROTOS HAS_GETPAGESIZE HAS_GETPGID HAS_GETPGRP
+syn keyword xsMacro HAS_GETPPID HAS_GETPRIORITY HAS_GETPROTOBYNAME
+syn keyword xsMacro HAS_GETPROTOBYNUMBER HAS_GETPROTOENT HAS_GETPROTO_PROTOS
+syn keyword xsMacro HAS_GETPWENT HAS_GETSERVBYNAME HAS_GETSERVBYPORT
+syn keyword xsMacro HAS_GETSERVENT HAS_GETSERV_PROTOS HAS_GETSPNAM
+syn keyword xsMacro HAS_GETTIMEOFDAY HAS_GNULIBC HAS_GROUP HAS_HASMNTOPT
+syn keyword xsMacro HAS_HTOVL HAS_HTOVS HAS_ILOGBL HAS_INETNTOP HAS_INETPTON
+syn keyword xsMacro HAS_INET_ATON HAS_INT64_T HAS_IOCTL HAS_IPV6_MREQ
+syn keyword xsMacro HAS_ISASCII HAS_ISBLANK HAS_ISINF HAS_ISNAN HAS_ISNANL
+syn keyword xsMacro HAS_KILL HAS_KILLPG HAS_LCHOWN HAS_LDBL_DIG HAS_LINK
+syn keyword xsMacro HAS_LOCALECONV HAS_LOCKF HAS_LONG_DOUBLE HAS_LONG_LONG
+syn keyword xsMacro HAS_LSEEK_PROTO HAS_LSTAT HAS_MADVISE HAS_MBLEN
+syn keyword xsMacro HAS_MBSTOWCS HAS_MBTOWC HAS_MEMCHR HAS_MEMCMP HAS_MEMCPY
+syn keyword xsMacro HAS_MEMMOVE HAS_MEMSET HAS_MKDIR HAS_MKDTEMP HAS_MKFIFO
+syn keyword xsMacro HAS_MKSTEMP HAS_MKSTEMPS HAS_MKTIME HAS_MMAP HAS_MODFL
+syn keyword xsMacro HAS_MODFL_PROTO HAS_MPROTECT HAS_MSG HAS_MSG_CTRUNC
+syn keyword xsMacro HAS_MSG_DONTROUTE HAS_MSG_OOB HAS_MSG_PEEK HAS_MSG_PROXY
+syn keyword xsMacro HAS_MSYNC HAS_MUNMAP HAS_NICE HAS_NL_LANGINFO HAS_OPEN3
+syn keyword xsMacro HAS_PASSWD HAS_PATHCONF HAS_PAUSE HAS_PIPE HAS_POLL
+syn keyword xsMacro HAS_PRCTL HAS_PRCTL_SET_NAME HAS_PROCSELFEXE
+syn keyword xsMacro HAS_PTHREAD_ATTR_SETSCOPE
+syn keyword xsMacro HAS_PTHREAD_UNCHECKED_GETSPECIFIC_NP HAS_READDIR
+syn keyword xsMacro HAS_READLINK HAS_READV HAS_RECVMSG HAS_RENAME
+syn keyword xsMacro HAS_REWINDDIR HAS_RMDIR HAS_SANE_MEMCMP HAS_SBRK_PROTO
+syn keyword xsMacro HAS_SCALBNL HAS_SCHED_YIELD HAS_SCM_RIGHTS HAS_SEEKDIR
+syn keyword xsMacro HAS_SELECT HAS_SEM HAS_SENDMSG HAS_SETEGID HAS_SETEUID
+syn keyword xsMacro HAS_SETGRENT HAS_SETGROUPS HAS_SETHOSTENT HAS_SETITIMER
+syn keyword xsMacro HAS_SETLINEBUF HAS_SETLOCALE HAS_SETNETENT HAS_SETPGID
+syn keyword xsMacro HAS_SETPGRP HAS_SETPRIORITY HAS_SETPROTOENT HAS_SETPWENT
+syn keyword xsMacro HAS_SETREGID HAS_SETRESGID HAS_SETRESUID HAS_SETREUID
+syn keyword xsMacro HAS_SETSERVENT HAS_SETSID HAS_SETVBUF HAS_SHM
+syn keyword xsMacro HAS_SHMAT_PROTOTYPE HAS_SIGACTION HAS_SIGNBIT
+syn keyword xsMacro HAS_SIGPROCMASK HAS_SIGSETJMP HAS_SIN6_SCOPE_ID
+syn keyword xsMacro HAS_SNPRINTF HAS_SOCKADDR_IN6 HAS_SOCKATMARK
+syn keyword xsMacro HAS_SOCKATMARK_PROTO HAS_SOCKET HAS_SQRTL
+syn keyword xsMacro HAS_STATIC_INLINE HAS_STRCHR HAS_STRCOLL HAS_STRFTIME
+syn keyword xsMacro HAS_STRTOD HAS_STRTOL HAS_STRTOLD HAS_STRTOLL HAS_STRTOQ
+syn keyword xsMacro HAS_STRTOUL HAS_STRTOULL HAS_STRTOUQ HAS_STRUCT_CMSGHDR
+syn keyword xsMacro HAS_STRUCT_MSGHDR HAS_STRUCT_STATFS
+syn keyword xsMacro HAS_STRUCT_STATFS_F_FLAGS HAS_STRXFRM HAS_SYMLINK
+syn keyword xsMacro HAS_SYSCALL HAS_SYSCALL_PROTO HAS_SYSCONF HAS_SYSTEM
+syn keyword xsMacro HAS_SYS_ERRLIST HAS_TCGETPGRP HAS_TCSETPGRP HAS_TELLDIR
+syn keyword xsMacro HAS_TELLDIR_PROTO HAS_TIME HAS_TIMEGM HAS_TIMES
+syn keyword xsMacro HAS_TM_TM_GMTOFF HAS_TM_TM_ZONE HAS_TRUNCATE HAS_TZNAME
+syn keyword xsMacro HAS_UALARM HAS_UMASK HAS_UNAME HAS_UNSETENV HAS_USLEEP
+syn keyword xsMacro HAS_USLEEP_PROTO HAS_USTAT HAS_UTIME HAS_VPRINTF
+syn keyword xsMacro HAS_VSNPRINTF HAS_VTOHL HAS_VTOHS HAS_WAIT HAS_WAIT4
+syn keyword xsMacro HAS_WAITPID HAS_WCSTOMBS HAS_WCTOMB HAS_WRITEV
+syn keyword xsMacro HAVE_THREAD_INTERN HEK_BASESIZE HEK_FLAGS HEK_HASH
+syn keyword xsMacro HEK_KEY HEK_LEN HEK_REHASH HEK_REHASH_on HEK_UTF8
+syn keyword xsMacro HEK_UTF8_off HEK_UTF8_on HEK_WASUTF8 HEK_WASUTF8_off
+syn keyword xsMacro HEK_WASUTF8_on HEKf HEKf256 HEKfARG HE_SVSLOT HEf_SVKEY
+syn keyword xsMacro HINTS_REFCNT_INIT HINTS_REFCNT_LOCK HINTS_REFCNT_TERM
+syn keyword xsMacro HINTS_REFCNT_UNLOCK HINT_BLOCK_SCOPE HINT_BYTES
+syn keyword xsMacro HINT_EXPLICIT_STRICT_REFS HINT_EXPLICIT_STRICT_SUBS
+syn keyword xsMacro HINT_EXPLICIT_STRICT_VARS HINT_FEATURE_MASK
+syn keyword xsMacro HINT_FEATURE_SHIFT HINT_FILETEST_ACCESS HINT_INTEGER
+syn keyword xsMacro HINT_LEXICAL_IO_IN HINT_LEXICAL_IO_OUT HINT_LOCALE
+syn keyword xsMacro HINT_LOCALE_NOT_CHARS HINT_LOCALIZE_HH HINT_NEW_BINARY
+syn keyword xsMacro HINT_NEW_FLOAT HINT_NEW_INTEGER HINT_NEW_RE
+syn keyword xsMacro HINT_NEW_STRING HINT_NO_AMAGIC HINT_RE_EVAL HINT_RE_FLAGS
+syn keyword xsMacro HINT_RE_TAINT HINT_SORT_MERGESORT HINT_SORT_QUICKSORT
+syn keyword xsMacro HINT_SORT_SORT_BITS HINT_SORT_STABLE HINT_STRICT_REFS
+syn keyword xsMacro HINT_STRICT_SUBS HINT_STRICT_VARS HINT_UNI_8_BIT
+syn keyword xsMacro HINT_UTF8 HORIZWS HV_DELETE HV_DISABLE_UVAR_XKEY
+syn keyword xsMacro HV_FETCH_EMPTY_HE HV_FETCH_ISEXISTS HV_FETCH_ISSTORE
+syn keyword xsMacro HV_FETCH_JUST_SV HV_FETCH_LVALUE
+syn keyword xsMacro HV_ITERNEXT_WANTPLACEHOLDERS HV_NAME_SETALL
+syn keyword xsMacro HVhek_ENABLEHVKFLAGS HVhek_FREEKEY HVhek_KEYCANONICAL
+syn keyword xsMacro HVhek_MASK HVhek_PLACEHOLD HVhek_REHASH HVhek_UNSHARED
+syn keyword xsMacro HVhek_UTF8 HVhek_WASUTF8 HVrhek_IV HVrhek_PV
+syn keyword xsMacro HVrhek_PV_UTF8 HVrhek_UV HVrhek_delete HVrhek_typemask
+syn keyword xsMacro HVrhek_undef H_PERL HeHASH HeKEY HeKEY_hek HeKEY_sv
+syn keyword xsMacro HeKFLAGS HeKLEN HeKLEN_UTF8 HeKREHASH HeKUTF8 HeKWASUTF8
+syn keyword xsMacro HeNEXT HePV HeSVKEY HeSVKEY_force HeSVKEY_set HeUTF8
+syn keyword xsMacro HeVAL HvARRAY HvAUX HvEITER HvEITER_get HvEITER_set
+syn keyword xsMacro HvENAME HvENAMELEN HvENAMELEN_get HvENAMEUTF8 HvENAME_HEK
+syn keyword xsMacro HvENAME_HEK_NN HvENAME_get HvFILL HvHASKFLAGS
+syn keyword xsMacro HvHASKFLAGS_off HvHASKFLAGS_on HvKEYS HvLAZYDEL
+syn keyword xsMacro HvLAZYDEL_off HvLAZYDEL_on HvMAX HvMROMETA HvNAME
+syn keyword xsMacro HvNAMELEN HvNAMELEN_get HvNAMEUTF8 HvNAME_HEK
+syn keyword xsMacro HvNAME_HEK_NN HvNAME_get HvPLACEHOLDERS
+syn keyword xsMacro HvPLACEHOLDERS_get HvPLACEHOLDERS_set HvREHASH
+syn keyword xsMacro HvREHASH_off HvREHASH_on HvRITER HvRITER_get HvRITER_set
+syn keyword xsMacro HvSHAREKEYS HvSHAREKEYS_off HvSHAREKEYS_on HvTOTALKEYS
+syn keyword xsMacro HvUSEDKEYS I16SIZE I16TYPE I16_MAX I16_MIN I286 I32SIZE
+syn keyword xsMacro I32TYPE I32_MAX I32_MAX_P1 I32_MIN I64SIZE I64TYPE I8SIZE
+syn keyword xsMacro I8TYPE I8_TO_NATIVE IF IFMATCH IFMATCH_A IFMATCH_A_fail
+syn keyword xsMacro IFTHEN IGNORE_PAT_MOD INIT INIT_THREADS
+syn keyword xsMacro INIT_TRACK_MEMPOOL INSUBP INT2PTR INT32_MIN INT64_C
+syn keyword xsMacro INT64_MIN INTSIZE INT_64_T INT_PAT_MODS
+syn keyword xsMacro INVERSION_UNAFFECTED_FLAGS IN_BYTES IN_LOCALE
+syn keyword xsMacro IN_LOCALE_COMPILETIME IN_LOCALE_RUNTIME
+syn keyword xsMacro IN_PERL_COMPILETIME IN_PERL_RUNTIME IN_SOME_LOCALE_FORM
+syn keyword xsMacro IN_SOME_LOCALE_FORM_COMPILETIME
+syn keyword xsMacro IN_SOME_LOCALE_FORM_RUNTIME IN_UNI_8_BIT IOCPARM_LEN
+syn keyword xsMacro IOf_ARGV IOf_DIDTOP IOf_FAKE_DIRP IOf_FLUSH IOf_NOLINE
+syn keyword xsMacro IOf_START IOf_UNTAINT ISHISH IS_ANYOF_TRIE
+syn keyword xsMacro IS_NUMBER_GREATER_THAN_UV_MAX IS_NUMBER_INFINITY
+syn keyword xsMacro IS_NUMBER_IN_UV IS_NUMBER_NAN IS_NUMBER_NEG
+syn keyword xsMacro IS_NUMBER_NOT_INT IS_NUMERIC_RADIX IS_PADCONST IS_PADGV
+syn keyword xsMacro IS_TRIE_AC IS_UTF8_CHAR IS_UTF8_CHAR_1 IS_UTF8_CHAR_2
+syn keyword xsMacro IS_UTF8_CHAR_3 IS_UTF8_CHAR_3a IS_UTF8_CHAR_3b
+syn keyword xsMacro IS_UTF8_CHAR_3c IS_UTF8_CHAR_3d IS_UTF8_CHAR_4
+syn keyword xsMacro IS_UTF8_CHAR_4a IS_UTF8_CHAR_4b IS_UTF8_CHAR_4c
+syn keyword xsMacro IS_UTF8_CHAR_5 IS_UTF8_CHAR_5a IS_UTF8_CHAR_5b
+syn keyword xsMacro IS_UTF8_CHAR_FAST IVSIZE IVTYPE IV_DIG IV_MAX IV_MAX_P1
+syn keyword xsMacro IV_MIN I_32 I_ARPA_INET I_ASSERT I_CRYPT I_DBM I_DIRENT
+syn keyword xsMacro I_DLFCN I_FLOAT I_GDBM I_GDBMNDBM I_GRP I_INTTYPES
+syn keyword xsMacro I_LANGINFO I_LIMITS I_LOCALE I_MATH I_MNTENT I_NETDB
+syn keyword xsMacro I_NETINET_IN I_NETINET_TCP I_POLL I_PTHREAD I_PWD
+syn keyword xsMacro I_SHADOW I_STDARG I_STDBOOL I_STDDEF I_STDLIB I_STRING
+syn keyword xsMacro I_SYSLOG I_SYSUIO I_SYSUTSNAME I_SYS_DIR I_SYS_FILE
+syn keyword xsMacro I_SYS_IOCTL I_SYS_MOUNT I_SYS_PARAM I_SYS_POLL
+syn keyword xsMacro I_SYS_RESOURCE I_SYS_SELECT I_SYS_STAT I_SYS_STATFS
+syn keyword xsMacro I_SYS_STATVFS I_SYS_TIME I_SYS_TIMES I_SYS_TYPES I_SYS_UN
+syn keyword xsMacro I_SYS_VFS I_SYS_WAIT I_TERMIOS I_TIME I_UNISTD I_USTAT
+syn keyword xsMacro I_UTIME I_V I_VALUES IoANY IoBOTTOM_GV IoBOTTOM_NAME
+syn keyword xsMacro IoDIRP IoFLAGS IoFMT_GV IoFMT_NAME IoIFP IoLINES
+syn keyword xsMacro IoLINES_LEFT IoOFP IoPAGE IoPAGE_LEN IoTOP_GV IoTOP_NAME
+syn keyword xsMacro IoTYPE IoTYPE_APPEND IoTYPE_CLOSED IoTYPE_IMPLICIT
+syn keyword xsMacro IoTYPE_NUMERIC IoTYPE_PIPE IoTYPE_RDONLY IoTYPE_RDWR
+syn keyword xsMacro IoTYPE_SOCKET IoTYPE_STD IoTYPE_WRONLY IsSet
+syn keyword xsMacro JMPENV_BOOTSTRAP JMPENV_JUMP JMPENV_POP JMPENV_PUSH JOIN
+syn keyword xsMacro KEEPCOPY_PAT_MOD KEEPCOPY_PAT_MODS KEEPS KEEPS_next
+syn keyword xsMacro KEEPS_next_fail KEYWORD_PLUGIN_DECLINE
+syn keyword xsMacro KEYWORD_PLUGIN_EXPR KEYWORD_PLUGIN_STMT KEY_AUTOLOAD
+syn keyword xsMacro KEY_BEGIN KEY_CHECK KEY_CORE KEY_DESTROY KEY_END KEY_INIT
+syn keyword xsMacro KEY_NULL KEY_UNITCHECK KEY___DATA__ KEY___END__
+syn keyword xsMacro KEY___FILE__ KEY___LINE__ KEY___PACKAGE__ KEY___SUB__
+syn keyword xsMacro KEY_abs KEY_accept KEY_alarm KEY_and KEY_atan2 KEY_bind
+syn keyword xsMacro KEY_binmode KEY_bless KEY_break KEY_caller KEY_chdir
+syn keyword xsMacro KEY_chmod KEY_chomp KEY_chop KEY_chown KEY_chr KEY_chroot
+syn keyword xsMacro KEY_close KEY_closedir KEY_cmp KEY_connect KEY_continue
+syn keyword xsMacro KEY_cos KEY_crypt KEY_dbmclose KEY_dbmopen KEY_default
+syn keyword xsMacro KEY_defined KEY_delete KEY_die KEY_do KEY_dump KEY_each
+syn keyword xsMacro KEY_else KEY_elsif KEY_endgrent KEY_endhostent
+syn keyword xsMacro KEY_endnetent KEY_endprotoent KEY_endpwent KEY_endservent
+syn keyword xsMacro KEY_eof KEY_eq KEY_eval KEY_evalbytes KEY_exec KEY_exists
+syn keyword xsMacro KEY_exit KEY_exp KEY_fc KEY_fcntl KEY_fileno KEY_flock
+syn keyword xsMacro KEY_for KEY_foreach KEY_fork KEY_format KEY_formline
+syn keyword xsMacro KEY_ge KEY_getc KEY_getgrent KEY_getgrgid KEY_getgrnam
+syn keyword xsMacro KEY_gethostbyaddr KEY_gethostbyname KEY_gethostent
+syn keyword xsMacro KEY_getlogin KEY_getnetbyaddr KEY_getnetbyname
+syn keyword xsMacro KEY_getnetent KEY_getpeername KEY_getpgrp KEY_getppid
+syn keyword xsMacro KEY_getpriority KEY_getprotobyname KEY_getprotobynumber
+syn keyword xsMacro KEY_getprotoent KEY_getpwent KEY_getpwnam KEY_getpwuid
+syn keyword xsMacro KEY_getservbyname KEY_getservbyport KEY_getservent
+syn keyword xsMacro KEY_getsockname KEY_getsockopt KEY_given KEY_glob
+syn keyword xsMacro KEY_gmtime KEY_goto KEY_grep KEY_gt KEY_hex KEY_if
+syn keyword xsMacro KEY_index KEY_int KEY_ioctl KEY_join KEY_keys KEY_kill
+syn keyword xsMacro KEY_last KEY_lc KEY_lcfirst KEY_le KEY_length KEY_link
+syn keyword xsMacro KEY_listen KEY_local KEY_localtime KEY_lock KEY_log
+syn keyword xsMacro KEY_lstat KEY_lt KEY_m KEY_map KEY_mkdir KEY_msgctl
+syn keyword xsMacro KEY_msgget KEY_msgrcv KEY_msgsnd KEY_my KEY_ne KEY_next
+syn keyword xsMacro KEY_no KEY_not KEY_oct KEY_open KEY_opendir KEY_or
+syn keyword xsMacro KEY_ord KEY_our KEY_pack KEY_package KEY_pipe KEY_pop
+syn keyword xsMacro KEY_pos KEY_print KEY_printf KEY_prototype KEY_push KEY_q
+syn keyword xsMacro KEY_qq KEY_qr KEY_quotemeta KEY_qw KEY_qx KEY_rand
+syn keyword xsMacro KEY_read KEY_readdir KEY_readline KEY_readlink
+syn keyword xsMacro KEY_readpipe KEY_recv KEY_redo KEY_ref KEY_rename
+syn keyword xsMacro KEY_require KEY_reset KEY_return KEY_reverse
+syn keyword xsMacro KEY_rewinddir KEY_rindex KEY_rmdir KEY_s KEY_say
+syn keyword xsMacro KEY_scalar KEY_seek KEY_seekdir KEY_select KEY_semctl
+syn keyword xsMacro KEY_semget KEY_semop KEY_send KEY_setgrent KEY_sethostent
+syn keyword xsMacro KEY_setnetent KEY_setpgrp KEY_setpriority KEY_setprotoent
+syn keyword xsMacro KEY_setpwent KEY_setservent KEY_setsockopt KEY_shift
+syn keyword xsMacro KEY_shmctl KEY_shmget KEY_shmread KEY_shmwrite
+syn keyword xsMacro KEY_shutdown KEY_sin KEY_sleep KEY_socket KEY_socketpair
+syn keyword xsMacro KEY_sort KEY_splice KEY_split KEY_sprintf KEY_sqrt
+syn keyword xsMacro KEY_srand KEY_stat KEY_state KEY_study KEY_sub KEY_substr
+syn keyword xsMacro KEY_symlink KEY_syscall KEY_sysopen KEY_sysread
+syn keyword xsMacro KEY_sysseek KEY_system KEY_syswrite KEY_tell KEY_telldir
+syn keyword xsMacro KEY_tie KEY_tied KEY_time KEY_times KEY_tr KEY_truncate
+syn keyword xsMacro KEY_uc KEY_ucfirst KEY_umask KEY_undef KEY_unless
+syn keyword xsMacro KEY_unlink KEY_unpack KEY_unshift KEY_untie KEY_until
+syn keyword xsMacro KEY_use KEY_utime KEY_values KEY_vec KEY_wait KEY_waitpid
+syn keyword xsMacro KEY_wantarray KEY_warn KEY_when KEY_while KEY_write KEY_x
+syn keyword xsMacro KEY_xor KEY_y LABEL
+syn keyword xsMacro LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE
+syn keyword xsMacro LATIN_CAPITAL_LETTER_SHARP_S
+syn keyword xsMacro LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS
+syn keyword xsMacro LATIN_SMALL_LETTER_A_WITH_RING_ABOVE
+syn keyword xsMacro LATIN_SMALL_LETTER_SHARP_S
+syn keyword xsMacro LATIN_SMALL_LETTER_Y_WITH_DIAERESIS LDBL_DIG LEAVE
+syn keyword xsMacro LEAVESUB LEAVE_SCOPE LEAVE_with_name LEX_DONT_CLOSE_RSFP
+syn keyword xsMacro LEX_EVALBYTES LEX_IGNORE_UTF8_HINTS LEX_KEEP_PREVIOUS
+syn keyword xsMacro LEX_NOTPARSING LEX_START_COPIED LEX_START_FLAGS
+syn keyword xsMacro LEX_START_SAME_FILTER LEX_STUFF_UTF8 LIBERAL
+syn keyword xsMacro LIBM_LIB_VERSION LIB_INVARG LIKELY LINKLIST LNBREAK LOCAL
+syn keyword xsMacro LOCALE_PAT_MOD LOCALE_PAT_MODS LOCALTIME_MAX
+syn keyword xsMacro LOCALTIME_MIN LOCALTIME_R LOCALTIME_R_PROTO
+syn keyword xsMacro LOCAL_PATCH_COUNT LOCK_DOLLARZERO_MUTEX LOC_SED LOGICAL
+syn keyword xsMacro LONGJMP LONGLONGSIZE LONGSIZE LONG_DOUBLESIZE
+syn keyword xsMacro LONG_DOUBLE_EQUALS_DOUBLE LOOPEX LOOP_PAT_MODS LSEEKSIZE
+syn keyword xsMacro LSTOP LSTOPSUB LVRET L_R_TZSET LvFLAGS LvTARG LvTARGLEN
+syn keyword xsMacro LvTARGOFF LvTYPE MADPROP_IN_BASEOP MAD_NULL MAD_OP MAD_PV
+syn keyword xsMacro MAD_SV MALLOC_CHECK_TAINT MALLOC_CHECK_TAINT2
+syn keyword xsMacro MALLOC_CTL_H MALLOC_INIT MALLOC_OVERHEAD MALLOC_TERM
+syn keyword xsMacro MALLOC_TOO_LATE_FOR MARKPOINT MARKPOINT_next
+syn keyword xsMacro MARKPOINT_next_fail MASK MATCHOP MAXARG MAXO MAXPATHLEN
+syn keyword xsMacro MAXSYSFD MAX_CHARSET_NAME_LENGTH MAX_FEATURE_LEN
+syn keyword xsMacro MAX_PORTABLE_UTF8_TWO_BYTE
+syn keyword xsMacro MAX_RECURSE_EVAL_NOCHANGE_DEPTH MAYBE_DEREF_GV
+syn keyword xsMacro MAYBE_DEREF_GV_flags MAYBE_DEREF_GV_nomg MBOL
+syn keyword xsMacro MEMBER_TO_FPTR MEM_ALIGNBYTES MEM_LOG_ALLOC MEM_LOG_FREE
+syn keyword xsMacro MEM_LOG_REALLOC MEM_SIZE MEM_SIZE_MAX MEM_WRAP_CHECK
+syn keyword xsMacro MEM_WRAP_CHECK_ MEM_WRAP_CHECK_1 MEM_WRAP_CHECK_2 MEOL
+syn keyword xsMacro METHOD MEXTEND MGf_COPY MGf_DUP MGf_GSKIP MGf_LOCAL
+syn keyword xsMacro MGf_MINMATCH MGf_REFCOUNTED MGf_TAINTEDDIR MICRO_SIGN
+syn keyword xsMacro MINMOD MJD_OFFSET_DEBUG MRO_GET_PRIVATE_DATA MSPAGAIN
+syn keyword xsMacro MULOP MULTICALL MULTILINE_PAT_MOD MULTIPLICITY MUTABLE_AV
+syn keyword xsMacro MUTABLE_CV MUTABLE_GV MUTABLE_HV MUTABLE_IO MUTABLE_PTR
+syn keyword xsMacro MUTABLE_SV MUTEX_DESTROY MUTEX_INIT
+syn keyword xsMacro MUTEX_INIT_CALLS_MALLOC MUTEX_INIT_NEEDS_MUTEX_ZEROED
+syn keyword xsMacro MUTEX_LOCK MUTEX_UNLOCK MY MYSUB MYSWAP MY_CXT_CLONE
+syn keyword xsMacro MY_CXT_INDEX MY_CXT_INIT MY_CXT_INIT_ARG
+syn keyword xsMacro MY_CXT_INIT_INTERP M_PAT_MODS M_VOID MgPV MgPV_const
+syn keyword xsMacro MgPV_nolen_const MgTAINTEDDIR MgTAINTEDDIR_off
+syn keyword xsMacro MgTAINTEDDIR_on Mkdir Move MoveD NALNUM NALNUMA NALNUML
+syn keyword xsMacro NALNUMU NATIVE8_TO_UNI NATIVE_IS_INVARIANT
+syn keyword xsMacro NATIVE_TO_ASCII NATIVE_TO_I8 NATIVE_TO_NEED NATIVE_TO_UNI
+syn keyword xsMacro NATIVE_TO_UTF NBOUND NBOUNDA NBOUNDL NBOUNDU
+syn keyword xsMacro NDBM_H_USES_PROTOTYPES NDIGIT NDIGITA NDIGITL
+syn keyword xsMacro NEED_PTHREAD_INIT NEED_VA_COPY NEGATIVE_INDICES_VAR
+syn keyword xsMacro NETDB_R_OBSOLETE NEWSV NEXTOPER NEXT_LINE_CHAR NEXT_OFF
+syn keyword xsMacro NGROUPP NHORIZWS NOAMP NODE_ALIGN NODE_ALIGN_FILL
+syn keyword xsMacro NODE_STEP_B NODE_STEP_REGNODE NODE_SZ_STR NOLINE
+syn keyword xsMacro NONDESTRUCT_PAT_MOD NONDESTRUCT_PAT_MODS NOOP
+syn keyword xsMacro NORETURN_FUNCTION_END NORMAL NOTHING NOTOP NOT_IN_PAD
+syn keyword xsMacro NO_ENV_ARRAY_IN_MAIN NO_LOCALE
+syn keyword xsMacro NO_LOCALECONV_MON_THOUSANDS_SEP NREF NREFF NREFFA NREFFL
+syn keyword xsMacro NREFFU NSIG NSPACE NSPACEA NSPACEL NSPACEU NUM2PTR
+syn keyword xsMacro NVERTWS NVSIZE NVTYPE NV_DIG NV_EPSILON NV_INF
+syn keyword xsMacro NV_MANT_DIG NV_MAX NV_MAX_10_EXP NV_MIN NV_MIN_10_EXP
+syn keyword xsMacro NV_NAN NV_OVERFLOWS_INTEGERS_AT NV_PRESERVES_UV_BITS
+syn keyword xsMacro NV_WITHIN_IV NV_WITHIN_UV New NewOp NewOpSz Newc Newx
+syn keyword xsMacro Newxc Newxz Newz NofAMmeth Null Nullav Nullch Nullcv
+syn keyword xsMacro Nullfp Nullgv Nullhe Nullhek Nullhv Nullop Nullsv OASHIFT
+syn keyword xsMacro OCSHIFT ONCE_PAT_MOD ONCE_PAT_MODS OPEN OPERAND OPFAIL
+syn keyword xsMacro OPTIMIZED OP_BINARY OP_CHECK_MUTEX_INIT
+syn keyword xsMacro OP_CHECK_MUTEX_LOCK OP_CHECK_MUTEX_TERM
+syn keyword xsMacro OP_CHECK_MUTEX_UNLOCK OP_CLASS OP_DESC OP_GIMME
+syn keyword xsMacro OP_GIMME_REVERSE OP_IS_DIRHOP OP_IS_FILETEST
+syn keyword xsMacro OP_IS_FILETEST_ACCESS OP_IS_NUMCOMPARE OP_IS_SOCKET
+syn keyword xsMacro OP_LVALUE_NO_CROAK OP_MEM_TO_REG OP_NAME OP_REFCNT_INIT
+syn keyword xsMacro OP_REFCNT_LOCK OP_REFCNT_TERM OP_REFCNT_UNLOCK
+syn keyword xsMacro OP_REG_TO_MEM OROP OROR OSNAME OSVERS O_CREAT O_RDONLY
+syn keyword xsMacro O_RDWR O_TEXT O_WRONLY Off Off_t_size OpREFCNT_dec
+syn keyword xsMacro OpREFCNT_inc OpREFCNT_set OutCopFILE PAD_BASE_SV
+syn keyword xsMacro PAD_CLONE_VARS PAD_COMPNAME_FLAGS
+syn keyword xsMacro PAD_COMPNAME_FLAGS_isOUR PAD_COMPNAME_GEN
+syn keyword xsMacro PAD_COMPNAME_GEN_set PAD_COMPNAME_OURSTASH
+syn keyword xsMacro PAD_COMPNAME_PV PAD_COMPNAME_SV PAD_COMPNAME_TYPE
+syn keyword xsMacro PAD_FAKELEX_ANON PAD_FAKELEX_MULTI PAD_RESTORE_LOCAL
+syn keyword xsMacro PAD_SAVE_LOCAL PAD_SAVE_SETNULLPAD PAD_SETSV PAD_SET_CUR
+syn keyword xsMacro PAD_SET_CUR_NOSAVE PAD_SV PAD_SVl PARENT_FAKELEX_FLAGS
+syn keyword xsMacro PARENT_PAD_INDEX PARSE_OPTIONAL PATCHLEVEL PEG PERLDB_ALL
+syn keyword xsMacro PERLDB_GOTO PERLDB_INTER PERLDB_LINE PERLDB_NAMEANON
+syn keyword xsMacro PERLDB_NAMEEVAL PERLDB_NOOPT PERLDB_SAVESRC
+syn keyword xsMacro PERLDB_SAVESRC_INVALID PERLDB_SAVESRC_NOSUBS
+syn keyword xsMacro PERLDB_SINGLE PERLDB_SUB PERLDB_SUBLINE PERLDB_SUB_NN
+syn keyword xsMacro PERLDBf_GOTO PERLDBf_INTER PERLDBf_LINE PERLDBf_NAMEANON
+syn keyword xsMacro PERLDBf_NAMEEVAL PERLDBf_NONAME PERLDBf_NOOPT
+syn keyword xsMacro PERLDBf_SAVESRC PERLDBf_SAVESRC_INVALID
+syn keyword xsMacro PERLDBf_SAVESRC_NOSUBS PERLDBf_SINGLE PERLDBf_SUB
+syn keyword xsMacro PERLDBf_SUBLINE PERLIOBUF_DEFAULT_BUFSIZ PERLIO_DUP_CLONE
+syn keyword xsMacro PERLIO_DUP_FD PERLIO_FUNCS_CAST PERLIO_FUNCS_CONST
+syn keyword xsMacro PERLIO_FUNCS_DECL PERLIO_F_APPEND PERLIO_F_CANREAD
+syn keyword xsMacro PERLIO_F_CANWRITE PERLIO_F_CLEARED PERLIO_F_CRLF
+syn keyword xsMacro PERLIO_F_EOF PERLIO_F_ERROR PERLIO_F_FASTGETS
+syn keyword xsMacro PERLIO_F_LINEBUF PERLIO_F_NOTREG PERLIO_F_OPEN
+syn keyword xsMacro PERLIO_F_RDBUF PERLIO_F_TEMP PERLIO_F_TRUNCATE
+syn keyword xsMacro PERLIO_F_TTY PERLIO_F_UNBUF PERLIO_F_UTF8 PERLIO_F_WRBUF
+syn keyword xsMacro PERLIO_INIT PERLIO_IS_STDIO PERLIO_K_BUFFERED
+syn keyword xsMacro PERLIO_K_CANCRLF PERLIO_K_DESTRUCT PERLIO_K_DUMMY
+syn keyword xsMacro PERLIO_K_FASTGETS PERLIO_K_MULTIARG PERLIO_K_RAW
+syn keyword xsMacro PERLIO_K_UTF8 PERLIO_LAYERS PERLIO_NOT_STDIO
+syn keyword xsMacro PERLIO_STDTEXT PERLIO_TERM PERLIO_USING_CRLF
+syn keyword xsMacro PERLSI_DESTROY PERLSI_DIEHOOK PERLSI_MAGIC PERLSI_MAIN
+syn keyword xsMacro PERLSI_OVERLOAD PERLSI_REQUIRE PERLSI_SIGNAL PERLSI_SORT
+syn keyword xsMacro PERLSI_UNDEF PERLSI_UNKNOWN PERLSI_WARNHOOK PERL_ABS
+syn keyword xsMacro PERL_ALLOC_CHECK PERL_API_REVISION PERL_API_SUBVERSION
+syn keyword xsMacro PERL_API_VERSION PERL_API_VERSION_STRING
+syn keyword xsMacro PERL_ARENA_ROOTS_SIZE PERL_ARENA_SIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_ADD_ALTERNATE PERL_ARGS_ASSERT_ADD_DATA
+syn keyword xsMacro PERL_ARGS_ASSERT_ADD_UTF16_TEXTFILTER
+syn keyword xsMacro PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE
+syn keyword xsMacro PERL_ARGS_ASSERT_ALLOCMY PERL_ARGS_ASSERT_AMAGIC_CALL
+syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_CMP
+syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_CMP_LOCALE
+syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL
+syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_I_NCMP
+syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_NCMP
+syn keyword xsMacro PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE
+syn keyword xsMacro PERL_ARGS_ASSERT_ANY_DUP PERL_ARGS_ASSERT_APPLY
+syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS
+syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS_MY
+syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS_STRING
+syn keyword xsMacro PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_ARYLEN_P PERL_ARGS_ASSERT_AV_CLEAR
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_DELETE PERL_ARGS_ASSERT_AV_EXISTS
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_EXTEND PERL_ARGS_ASSERT_AV_FETCH
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_FILL PERL_ARGS_ASSERT_AV_ITER_P
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_LEN PERL_ARGS_ASSERT_AV_MAKE
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_POP PERL_ARGS_ASSERT_AV_PUSH
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_REIFY PERL_ARGS_ASSERT_AV_SHIFT
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_STORE PERL_ARGS_ASSERT_AV_UNDEF
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_UNSHIFT PERL_ARGS_ASSERT_BAD_TYPE_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_BAD_TYPE_SV PERL_ARGS_ASSERT_BIND_MATCH
+syn keyword xsMacro PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER
+syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_CMP_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_FROM_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_TO_UNI
+syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_TO_UTF8 PERL_ARGS_ASSERT_CALL_ARGV
+syn keyword xsMacro PERL_ARGS_ASSERT_CALL_LIST PERL_ARGS_ASSERT_CALL_METHOD
+syn keyword xsMacro PERL_ARGS_ASSERT_CALL_PV PERL_ARGS_ASSERT_CALL_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_CANDO PERL_ARGS_ASSERT_CHECKCOMMA
+syn keyword xsMacro PERL_ARGS_ASSERT_CHECKPOSIXCC
+syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_LOCALE_BOUNDARY_CROSSING
+syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN
+syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_UTF8_PRINT
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_ANONCODE PERL_ARGS_ASSERT_CK_BITOP
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_CHDIR PERL_ARGS_ASSERT_CK_CMP
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_CONCAT PERL_ARGS_ASSERT_CK_DEFINED
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_DELETE PERL_ARGS_ASSERT_CK_DIE
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_EACH
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_EOF PERL_ARGS_ASSERT_CK_EVAL
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_EXEC PERL_ARGS_ASSERT_CK_EXISTS
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_EXIT PERL_ARGS_ASSERT_CK_FTST
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_FUN PERL_ARGS_ASSERT_CK_GLOB
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_GREP PERL_ARGS_ASSERT_CK_INDEX
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_JOIN PERL_ARGS_ASSERT_CK_LENGTH
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_LFUN PERL_ARGS_ASSERT_CK_LISTIOB
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_MATCH PERL_ARGS_ASSERT_CK_METHOD
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_NULL PERL_ARGS_ASSERT_CK_OPEN
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_READLINE PERL_ARGS_ASSERT_CK_REPEAT
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_REQUIRE PERL_ARGS_ASSERT_CK_RETURN
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_RFUN PERL_ARGS_ASSERT_CK_RVCONST
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_SASSIGN PERL_ARGS_ASSERT_CK_SELECT
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_SHIFT PERL_ARGS_ASSERT_CK_SMARTMATCH
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_SORT PERL_ARGS_ASSERT_CK_SPAIR
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_SPLIT PERL_ARGS_ASSERT_CK_SUBR
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_SUBSTR PERL_ARGS_ASSERT_CK_SVCONST
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_TELL PERL_ARGS_ASSERT_CK_TRUNC
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_WARNER PERL_ARGS_ASSERT_CK_WARNER_D
+syn keyword xsMacro PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS
+syn keyword xsMacro PERL_ARGS_ASSERT_CLONE_PARAMS_DEL
+syn keyword xsMacro PERL_ARGS_ASSERT_CLONE_PARAMS_NEW
+syn keyword xsMacro PERL_ARGS_ASSERT_CLOSEST_COP PERL_ARGS_ASSERT_CL_AND
+syn keyword xsMacro PERL_ARGS_ASSERT_CL_ANYTHING PERL_ARGS_ASSERT_CL_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT_CL_IS_ANYTHING PERL_ARGS_ASSERT_CL_OR
+syn keyword xsMacro PERL_ARGS_ASSERT_COP_FETCH_LABEL
+syn keyword xsMacro PERL_ARGS_ASSERT_COP_FREE
+syn keyword xsMacro PERL_ARGS_ASSERT_COP_STORE_LABEL
+syn keyword xsMacro PERL_ARGS_ASSERT_CORESUB_OP
+syn keyword xsMacro PERL_ARGS_ASSERT_CORE_PROTOTYPE
+syn keyword xsMacro PERL_ARGS_ASSERT_CORE_REGCLASS_SWASH
+syn keyword xsMacro PERL_ARGS_ASSERT_CROAK_SV PERL_ARGS_ASSERT_CROAK_XS_USAGE
+syn keyword xsMacro PERL_ARGS_ASSERT_CURSE PERL_ARGS_ASSERT_CUSTOM_OP_DESC
+syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_NAME
+syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER
+syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_XOP PERL_ARGS_ASSERT_CVGV_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_CVSTASH_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_CV_CLONE PERL_ARGS_ASSERT_CV_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER
+syn keyword xsMacro PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER
+syn keyword xsMacro PERL_ARGS_ASSERT_CV_UNDEF PERL_ARGS_ASSERT_CX_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_CX_DUP PERL_ARGS_ASSERT_DEB
+syn keyword xsMacro PERL_ARGS_ASSERT_DEBOP PERL_ARGS_ASSERT_DEBPROF
+syn keyword xsMacro PERL_ARGS_ASSERT_DEBUG_START_MATCH
+syn keyword xsMacro PERL_ARGS_ASSERT_DEB_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_DEB_STACK_N PERL_ARGS_ASSERT_DELIMCPY
+syn keyword xsMacro PERL_ARGS_ASSERT_DEL_SV PERL_ARGS_ASSERT_DESTROY_MATCHER
+syn keyword xsMacro PERL_ARGS_ASSERT_DIE_SV PERL_ARGS_ASSERT_DIE_UNWIND
+syn keyword xsMacro PERL_ARGS_ASSERT_DIRP_DUP PERL_ARGS_ASSERT_DIV128
+syn keyword xsMacro PERL_ARGS_ASSERT_DOFILE PERL_ARGS_ASSERT_DOFINDLABEL
+syn keyword xsMacro PERL_ARGS_ASSERT_DOFORM PERL_ARGS_ASSERT_DOONELINER
+syn keyword xsMacro PERL_ARGS_ASSERT_DOOPEN_PM PERL_ARGS_ASSERT_DOPARSEFORM
+syn keyword xsMacro PERL_ARGS_ASSERT_DOPOPTOLABEL
+syn keyword xsMacro PERL_ARGS_ASSERT_DOPOPTOSUB_AT PERL_ARGS_ASSERT_DOREF
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_AEXEC PERL_ARGS_ASSERT_DO_AEXEC5
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_ASPAWN PERL_ARGS_ASSERT_DO_BINMODE
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_CHOMP PERL_ARGS_ASSERT_DO_DUMP_PAD
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_EOF PERL_ARGS_ASSERT_DO_EXEC
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_EXEC3 PERL_ARGS_ASSERT_DO_GVGV_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_GV_DUMP PERL_ARGS_ASSERT_DO_HV_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_IPCCTL PERL_ARGS_ASSERT_DO_IPCGET
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_JOIN PERL_ARGS_ASSERT_DO_MAGIC_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_MSGRCV PERL_ARGS_ASSERT_DO_MSGSND
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_NCMP PERL_ARGS_ASSERT_DO_ODDBALL
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_OPEN PERL_ARGS_ASSERT_DO_OPEN9
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_OPENN PERL_ARGS_ASSERT_DO_OP_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_OP_XMLDUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_PMOP_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_PMOP_XMLDUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_PRINT PERL_ARGS_ASSERT_DO_SEMOP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_SHMIO PERL_ARGS_ASSERT_DO_SPAWN
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_SPAWN_NOWAIT
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_SPRINTF PERL_ARGS_ASSERT_DO_SV_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_SYSSEEK PERL_ARGS_ASSERT_DO_TELL
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COMPLEX
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COMPLEX_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COUNT
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COUNT_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_SIMPLE
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_SIMPLE_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_VECGET PERL_ARGS_ASSERT_DO_VECSET
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_VOP PERL_ARGS_ASSERT_DUMPUNTIL
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_EXEC_POS PERL_ARGS_ASSERT_DUMP_FDS
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_FORM PERL_ARGS_ASSERT_DUMP_INDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_MSTATS
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_PACKSUBS
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_PACKSUBS_PERL
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_SUB PERL_ARGS_ASSERT_DUMP_SUB_PERL
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_SV_CHILD PERL_ARGS_ASSERT_DUMP_TRIE
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_LIST
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_TABLE
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_VINDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_DUP_ATTRLIST
+syn keyword xsMacro PERL_ARGS_ASSERT_EMULATE_COP_IO PERL_ARGS_ASSERT_EVAL_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_EVAL_SV PERL_ARGS_ASSERT_EXEC_FAILED
+syn keyword xsMacro PERL_ARGS_ASSERT_EXPECT_NUMBER PERL_ARGS_ASSERT_F0CONVERT
+syn keyword xsMacro PERL_ARGS_ASSERT_FBM_COMPILE PERL_ARGS_ASSERT_FBM_INSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_FEATURE_IS_ENABLED
+syn keyword xsMacro PERL_ARGS_ASSERT_FILTER_DEL PERL_ARGS_ASSERT_FILTER_GETS
+syn keyword xsMacro PERL_ARGS_ASSERT_FILTER_READ PERL_ARGS_ASSERT_FINALIZE_OP
+syn keyword xsMacro PERL_ARGS_ASSERT_FINALIZE_OPTREE
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_BEGINNING
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_BYCLASS
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_IN_MY_STASH
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_RUNDEFSV2
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_SCRIPT
+syn keyword xsMacro PERL_ARGS_ASSERT_FIRST_SYMBOL PERL_ARGS_ASSERT_FOLDEQ
+syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_LATIN1
+syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_LOCALE
+syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_UTF8_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_FOLD_CONSTANTS
+syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_IDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_STRICT_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_WORD PERL_ARGS_ASSERT_FORGET_PMOP
+syn keyword xsMacro PERL_ARGS_ASSERT_FORM PERL_ARGS_ASSERT_FORM_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_FPRINTF_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_FP_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_FREE_GLOBAL_STRUCT
+syn keyword xsMacro PERL_ARGS_ASSERT_GETCWD_SV PERL_ARGS_ASSERT_GETENV_LEN
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_AUX_MG PERL_ARGS_ASSERT_GET_AV
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_CV PERL_ARGS_ASSERT_GET_CVN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_DB_SUB
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_DEBUG_OPTS PERL_ARGS_ASSERT_GET_HV
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_LEN_ADDR
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_VERSION_ID_ADDR
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_ZERO_ADDR
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_MSTATS PERL_ARGS_ASSERT_GET_NUM
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_SV PERL_ARGS_ASSERT_GLOB_2NUMBER
+syn keyword xsMacro PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB
+syn keyword xsMacro PERL_ARGS_ASSERT_GLOB_ASSIGN_REF PERL_ARGS_ASSERT_GP_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_GROK_BIN PERL_ARGS_ASSERT_GROK_BSLASH_O
+syn keyword xsMacro PERL_ARGS_ASSERT_GROK_HEX PERL_ARGS_ASSERT_GROK_NUMBER
+syn keyword xsMacro PERL_ARGS_ASSERT_GROK_NUMERIC_RADIX
+syn keyword xsMacro PERL_ARGS_ASSERT_GROK_OCT PERL_ARGS_ASSERT_GROUP_END
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_AMUPDATE
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_SV PERL_ARGS_ASSERT_GV_CHECK
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_CONST_SV PERL_ARGS_ASSERT_GV_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME3
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME4 PERL_ARGS_ASSERT_GV_ENAME
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHFILE
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHPV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHSV PERL_ARGS_ASSERT_GV_FULLNAME
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FULLNAME3
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FULLNAME4
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_GET_SUPER_PKG
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_PV PERL_ARGS_ASSERT_GV_INIT_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_SVTYPE
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_MAGICALIZE_OVERLOAD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_NAME_SET PERL_ARGS_ASSERT_GV_STASHPV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_STASHPVN PERL_ARGS_ASSERT_GV_STASHSV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE
+syn keyword xsMacro PERL_ARGS_ASSERT_HEK_DUP PERL_ARGS_ASSERT_HE_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_HFREEENTRIES
+syn keyword xsMacro PERL_ARGS_ASSERT_HFREE_NEXT_ENTRY PERL_ARGS_ASSERT_HSPLIT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ASSERT PERL_ARGS_ASSERT_HV_AUXINIT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_BACKREFERENCES_P
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_CLEAR_PLACEHOLDERS
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_COMMON_KEY_LEN
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_DELAYFREE_ENT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_DELETE PERL_ARGS_ASSERT_HV_DELETE_ENT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_EITER_P PERL_ARGS_ASSERT_HV_EITER_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ENAME_ADD
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ENAME_DELETE
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_EXISTS PERL_ARGS_ASSERT_HV_EXISTS_ENT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_FETCH PERL_ARGS_ASSERT_HV_FETCH_ENT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_FILL PERL_ARGS_ASSERT_HV_FREE_ENT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_FREE_ENT_RET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERINIT PERL_ARGS_ASSERT_HV_ITERKEY
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERKEYSV
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXTSV
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXT_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERVAL
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_KILL_BACKREFS
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_KSPLIT PERL_ARGS_ASSERT_HV_MAGIC
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_MAGIC_CHECK
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_NAME_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_NOTALLOWED
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_GET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_P
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_RITER_P PERL_ARGS_ASSERT_HV_RITER_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_SCALAR PERL_ARGS_ASSERT_INCLINE
+syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH
+syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH_IF_EXISTS
+syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH_USE_SEP
+syn keyword xsMacro PERL_ARGS_ASSERT_INIT_ARGV_SYMBOLS
+syn keyword xsMacro PERL_ARGS_ASSERT_INIT_POSTDUMP_SYMBOLS
+syn keyword xsMacro PERL_ARGS_ASSERT_INIT_TM PERL_ARGS_ASSERT_INPLACE_AASSIGN
+syn keyword xsMacro PERL_ARGS_ASSERT_INSTR PERL_ARGS_ASSERT_INTUIT_METHOD
+syn keyword xsMacro PERL_ARGS_ASSERT_INTUIT_MORE
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ARRAY
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_CLONE
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_EXTEND
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ITERINIT
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ITERNEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_LEN PERL_ARGS_ASSERT_INVLIST_MAX
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_SEARCH
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_SET_LEN
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_TRIM PERL_ARGS_ASSERT_IO_CLOSE
+syn keyword xsMacro PERL_ARGS_ASSERT_ISA_LOOKUP PERL_ARGS_ASSERT_IS_AN_INT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_ASCII_STRING
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ALNUM
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ALPHA
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ASCII
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR_SLOW
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CNTRL
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_COMMON
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_DIGIT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_GRAPH
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_IDCONT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_IDFIRST
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_LOWER
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_MARK
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PERL_SPACE
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PERL_WORD
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_POSIX_DIGIT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PRINT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PUNCT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_SPACE
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING_LOC
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING_LOCLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_UPPER
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XDIGIT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XIDCONT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XIDFIRST
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_BEGIN
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_EXTEND
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_L
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_LV
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_LVT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_LV_LVT_V
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_NON_HANGUL
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_PREPEND
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_T PERL_ARGS_ASSERT_IS_UTF8_X_V
+syn keyword xsMacro PERL_ARGS_ASSERT_JMAYBE PERL_ARGS_ASSERT_JOIN_EXACT
+syn keyword xsMacro PERL_ARGS_ASSERT_KEYWORD
+syn keyword xsMacro PERL_ARGS_ASSERT_KEYWORD_PLUGIN_STANDARD
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_DISCARD_TO
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_READ_TO
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_UNSTUFF PERL_ARGS_ASSERT_LOAD_MODULE
+syn keyword xsMacro PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_LOCALIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL
+syn keyword xsMacro PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER PERL_ARGS_ASSERT_LOP
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARENV
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARHINT
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARHINTS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARISA
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARSIG
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_EXISTSPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_FREEOVRLD
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GET
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETARYLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETDEFELEM
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETNKEYS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETPOS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETSIG
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETSUBSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETTAINT
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETUVAR
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETVEC
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_LEN
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHCALL
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHCALL1
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_NEXTPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SCALARPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETAMAGIC
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETARYLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETDBLINE
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETDEFELEM
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETENV
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETHINT
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETISA
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETMGLOB
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETNKEYS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETPOS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETREGEXP
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETSIG
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETSUBSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETTAINT
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETUTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETUVAR
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETVEC
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETVSTRING
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SIZEPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_WIPEPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAKE_MATCHER PERL_ARGS_ASSERT_MAKE_TRIE
+syn keyword xsMacro PERL_ARGS_ASSERT_MAKE_TRIE_FAILTABLE
+syn keyword xsMacro PERL_ARGS_ASSERT_MALLOCED_SIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_MATCHER_MATCHES_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_MAYBERELOCATE
+syn keyword xsMacro PERL_ARGS_ASSERT_MEASURE_STRUCT
+syn keyword xsMacro PERL_ARGS_ASSERT_MEM_COLLXFRM
+syn keyword xsMacro PERL_ARGS_ASSERT_MEM_LOG_COMMON PERL_ARGS_ASSERT_MESS
+syn keyword xsMacro PERL_ARGS_ASSERT_MESS_NOCONTEXT PERL_ARGS_ASSERT_MESS_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_METHOD_COMMON PERL_ARGS_ASSERT_MG_CLEAR
+syn keyword xsMacro PERL_ARGS_ASSERT_MG_COPY PERL_ARGS_ASSERT_MG_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_MG_FREE PERL_ARGS_ASSERT_MG_FREE_TYPE
+syn keyword xsMacro PERL_ARGS_ASSERT_MG_GET PERL_ARGS_ASSERT_MG_LENGTH
+syn keyword xsMacro PERL_ARGS_ASSERT_MG_LOCALIZE PERL_ARGS_ASSERT_MG_MAGICAL
+syn keyword xsMacro PERL_ARGS_ASSERT_MG_SET PERL_ARGS_ASSERT_MG_SIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_MINI_MKTIME
+syn keyword xsMacro PERL_ARGS_ASSERT_MORESWITCHES
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_CLEAN_ISAREV
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GATHER_AND_RENAME
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_FROM_NAME
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA_DFS
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_PRIVATE_DATA
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_ISA_CHANGED_IN
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_META_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_META_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_METHOD_CHANGED_IN
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_PACKAGE_MOVED
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_REGISTER
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_SET_MRO
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_SET_PRIVATE_DATA
+syn keyword xsMacro PERL_ARGS_ASSERT_MUL128
+syn keyword xsMacro PERL_ARGS_ASSERT_MUNGE_QWLIST_TO_PAREN_LIST
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_ATOF PERL_ARGS_ASSERT_MY_ATOF2
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_ATTRS PERL_ARGS_ASSERT_MY_BCOPY
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_BZERO PERL_ARGS_ASSERT_MY_CXT_INDEX
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_CXT_INIT PERL_ARGS_ASSERT_MY_KID
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_MEMCMP PERL_ARGS_ASSERT_MY_MEMSET
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_POPEN PERL_ARGS_ASSERT_MY_POPEN_LIST
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_SNPRINTF PERL_ARGS_ASSERT_MY_SPRINTF
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_STRFTIME PERL_ARGS_ASSERT_MY_SWABN
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_VSNPRINTF PERL_ARGS_ASSERT_NEED_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWAVREF PERL_ARGS_ASSERT_NEWCONDOP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWFOROP PERL_ARGS_ASSERT_NEWGIVENOP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWGIVWHENOP PERL_ARGS_ASSERT_NEWGP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWGVGEN_FLAGS PERL_ARGS_ASSERT_NEWGVOP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWHVREF PERL_ARGS_ASSERT_NEWLOGOP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWLOOPEX PERL_ARGS_ASSERT_NEWMADSV
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWPADOP PERL_ARGS_ASSERT_NEWPROG
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWRANGE PERL_ARGS_ASSERT_NEWRV
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWRV_NOINC PERL_ARGS_ASSERT_NEWSVOP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVPVF
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVREF PERL_ARGS_ASSERT_NEWSVRV
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWWHENOP PERL_ARGS_ASSERT_NEWXS
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWXS_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_NEW_CONSTANT PERL_ARGS_ASSERT_NEW_CTYPE
+syn keyword xsMacro PERL_ARGS_ASSERT_NEW_LOGOP PERL_ARGS_ASSERT_NEW_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_NEW_WARNINGS_BITFIELD
+syn keyword xsMacro PERL_ARGS_ASSERT_NEXTARGV PERL_ARGS_ASSERT_NEXTCHAR
+syn keyword xsMacro PERL_ARGS_ASSERT_NEXT_SYMBOL PERL_ARGS_ASSERT_NINSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_NOT_A_NUMBER
+syn keyword xsMacro PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED
+syn keyword xsMacro PERL_ARGS_ASSERT_NO_FH_ALLOWED PERL_ARGS_ASSERT_NO_OP
+syn keyword xsMacro PERL_ARGS_ASSERT_OOPSAV PERL_ARGS_ASSERT_OOPSHV
+syn keyword xsMacro PERL_ARGS_ASSERT_OPEN_SCRIPT
+syn keyword xsMacro PERL_ARGS_ASSERT_OPT_SCALARHV PERL_ARGS_ASSERT_OP_CLEAR
+syn keyword xsMacro PERL_ARGS_ASSERT_OP_CONTEXTUALIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_OP_DUMP PERL_ARGS_ASSERT_OP_INTEGERIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_OP_LINKLIST PERL_ARGS_ASSERT_OP_NULL
+syn keyword xsMacro PERL_ARGS_ASSERT_OP_REFCNT_DEC
+syn keyword xsMacro PERL_ARGS_ASSERT_OP_STD_INIT PERL_ARGS_ASSERT_OP_XMLDUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_PACKAGE PERL_ARGS_ASSERT_PACKAGE_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_PACKLIST PERL_ARGS_ASSERT_PACK_CAT
+syn keyword xsMacro PERL_ARGS_ASSERT_PACK_REC PERL_ARGS_ASSERT_PADLIST_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_ANON
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ALLOC_NAME
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_CHECK_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDLEX
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FIXUP_INNER_ANONS
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_PEG PERL_ARGS_ASSERT_PAD_PUSH
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_SETSV PERL_ARGS_ASSERT_PARSER_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_PARSER_FREE
+syn keyword xsMacro PERL_ARGS_ASSERT_PARSE_UNICODE_OPTS
+syn keyword xsMacro PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE
+syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_READ
+syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_UNREAD
+syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_WRITE
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_ALLOC_USING
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CLONE
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CLONE_USING
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CONSTRUCT
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_DESTRUCT PERL_ARGS_ASSERT_PERL_FREE
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_PARSE PERL_ARGS_ASSERT_PERL_RUN
+syn keyword xsMacro PERL_ARGS_ASSERT_PMRUNTIME PERL_ARGS_ASSERT_PMTRANS
+syn keyword xsMacro PERL_ARGS_ASSERT_PM_DESCRIPTION
+syn keyword xsMacro PERL_ARGS_ASSERT_POPULATE_ISA PERL_ARGS_ASSERT_PREGCOMP
+syn keyword xsMacro PERL_ARGS_ASSERT_PREGEXEC PERL_ARGS_ASSERT_PREGFREE2
+syn keyword xsMacro PERL_ARGS_ASSERT_PRESCAN_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_PRINTBUF
+syn keyword xsMacro PERL_ARGS_ASSERT_PRINTF_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS
+syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_FETCH
+syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_FIND
+syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_SPLIT
+syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_STORE
+syn keyword xsMacro PERL_ARGS_ASSERT_PUT_BYTE PERL_ARGS_ASSERT_PV_DISPLAY
+syn keyword xsMacro PERL_ARGS_ASSERT_PV_ESCAPE PERL_ARGS_ASSERT_PV_PRETTY
+syn keyword xsMacro PERL_ARGS_ASSERT_PV_UNI_DISPLAY PERL_ARGS_ASSERT_QERROR
+syn keyword xsMacro PERL_ARGS_ASSERT_QSORTSVU
+syn keyword xsMacro PERL_ARGS_ASSERT_REENTRANT_RETRY
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE
+syn keyword xsMacro PERL_ARGS_ASSERT_REFTO PERL_ARGS_ASSERT_REG
+syn keyword xsMacro PERL_ARGS_ASSERT_REGANODE PERL_ARGS_ASSERT_REGATOM
+syn keyword xsMacro PERL_ARGS_ASSERT_REGBRANCH PERL_ARGS_ASSERT_REGCLASS
+syn keyword xsMacro PERL_ARGS_ASSERT_REGCLASS_SWASH PERL_ARGS_ASSERT_REGCPPOP
+syn keyword xsMacro PERL_ARGS_ASSERT_REGCURLY PERL_ARGS_ASSERT_REGDUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_REGDUPE_INTERNAL
+syn keyword xsMacro PERL_ARGS_ASSERT_REGEXEC_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_REGFREE_INTERNAL
+syn keyword xsMacro PERL_ARGS_ASSERT_REGHOP3 PERL_ARGS_ASSERT_REGHOP4
+syn keyword xsMacro PERL_ARGS_ASSERT_REGHOPMAYBE3 PERL_ARGS_ASSERT_REGINCLASS
+syn keyword xsMacro PERL_ARGS_ASSERT_REGINSERT PERL_ARGS_ASSERT_REGMATCH
+syn keyword xsMacro PERL_ARGS_ASSERT_REGPIECE PERL_ARGS_ASSERT_REGPPOSIXCC
+syn keyword xsMacro PERL_ARGS_ASSERT_REGPROP PERL_ARGS_ASSERT_REGREPEAT
+syn keyword xsMacro PERL_ARGS_ASSERT_REGTAIL PERL_ARGS_ASSERT_REGTAIL_STUDY
+syn keyword xsMacro PERL_ARGS_ASSERT_REGTRY PERL_ARGS_ASSERT_REGUNI
+syn keyword xsMacro PERL_ARGS_ASSERT_REGWHITE
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_CHECK_NAMED_BUFF_MATCHED
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMEDSEQ
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_ALL
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_EXISTS
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_FETCH
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_FIRSTKEY
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_ITER
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_NEXTKEY
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_SCALAR
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NODE
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_FETCH
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_LENGTH
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_STORE
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_QR_PACKAGE
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_RECODE
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_SCAN_NAME
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_SKIPCOMMENT
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_TEMP_COPY PERL_ARGS_ASSERT_REPEATCPY
+syn keyword xsMacro PERL_ARGS_ASSERT_REPORT_REDEFINED_CV
+syn keyword xsMacro PERL_ARGS_ASSERT_REQUIRE_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_REQUIRE_TIE_MOD
+syn keyword xsMacro PERL_ARGS_ASSERT_RE_COMPILE PERL_ARGS_ASSERT_RE_CROAK2
+syn keyword xsMacro PERL_ARGS_ASSERT_RE_DUP_GUTS
+syn keyword xsMacro PERL_ARGS_ASSERT_RE_INTUIT_START
+syn keyword xsMacro PERL_ARGS_ASSERT_RE_INTUIT_STRING
+syn keyword xsMacro PERL_ARGS_ASSERT_RNINSTR PERL_ARGS_ASSERT_RSIGNAL_SAVE
+syn keyword xsMacro PERL_ARGS_ASSERT_RUN_USER_FILTER
+syn keyword xsMacro PERL_ARGS_ASSERT_RV2CV_OP_CV PERL_ARGS_ASSERT_RVPV_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_FREE
+syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_RESTORE
+syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_SAVE PERL_ARGS_ASSERT_SAME_DIRENT
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVESHAREDSVPV PERL_ARGS_ASSERT_SAVESVPV
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_ADELETE
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_AELEM_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_APTR PERL_ARGS_ASSERT_SAVE_ARY
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_BOOL PERL_ARGS_ASSERT_SAVE_CLEARSV
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_DELETE
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_DESTRUCTOR
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GENERIC_PVREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GENERIC_SVREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GP PERL_ARGS_ASSERT_SAVE_HASH
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HDELETE
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HEK_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HELEM_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HPTR PERL_ARGS_ASSERT_SAVE_I16
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_I32 PERL_ARGS_ASSERT_SAVE_I8
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_INT PERL_ARGS_ASSERT_SAVE_ITEM
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_IV PERL_ARGS_ASSERT_SAVE_LINES
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_LIST PERL_ARGS_ASSERT_SAVE_LONG
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_MAGIC
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_MORTALIZESV
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_NOGV PERL_ARGS_ASSERT_SAVE_PPTR
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SCALAR
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SCALAR_AT
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SET_SVFLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SHARED_PVREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SPTR PERL_ARGS_ASSERT_SAVE_SVREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_VPTR PERL_ARGS_ASSERT_SCALARBOOLEAN
+syn keyword xsMacro PERL_ARGS_ASSERT_SCALARVOID PERL_ARGS_ASSERT_SCAN_BIN
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_COMMIT PERL_ARGS_ASSERT_SCAN_CONST
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_FORMLINE
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_HEREDOC PERL_ARGS_ASSERT_SCAN_HEX
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_IDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_INPUTSYMBOL
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_NUM PERL_ARGS_ASSERT_SCAN_OCT
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_PAT PERL_ARGS_ASSERT_SCAN_STR
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_SUBST PERL_ARGS_ASSERT_SCAN_TRANS
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_VSTRING PERL_ARGS_ASSERT_SCAN_WORD
+syn keyword xsMacro PERL_ARGS_ASSERT_SCREAMINSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_SEARCH_CONST
+syn keyword xsMacro PERL_ARGS_ASSERT_SET_CONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SET_REGCLASS_BIT
+syn keyword xsMacro PERL_ARGS_ASSERT_SET_REGCLASS_BIT_FOLD
+syn keyword xsMacro PERL_ARGS_ASSERT_SHARE_HEK
+syn keyword xsMacro PERL_ARGS_ASSERT_SHARE_HEK_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SIMPLIFY_SORT PERL_ARGS_ASSERT_SI_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_SKIPSPACE PERL_ARGS_ASSERT_SKIPSPACE0
+syn keyword xsMacro PERL_ARGS_ASSERT_SKIPSPACE1 PERL_ARGS_ASSERT_SKIPSPACE2
+syn keyword xsMacro PERL_ARGS_ASSERT_SLAB_FREE PERL_ARGS_ASSERT_SLAB_TO_RW
+syn keyword xsMacro PERL_ARGS_ASSERT_SOFTREF2XV PERL_ARGS_ASSERT_SORTCV
+syn keyword xsMacro PERL_ARGS_ASSERT_SORTCV_STACKED
+syn keyword xsMacro PERL_ARGS_ASSERT_SORTCV_XSUB PERL_ARGS_ASSERT_SORTSV
+syn keyword xsMacro PERL_ARGS_ASSERT_SORTSV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SPACE_JOIN_NAMES_MORTAL
+syn keyword xsMacro PERL_ARGS_ASSERT_SS_DUP PERL_ARGS_ASSERT_STACK_GROW
+syn keyword xsMacro PERL_ARGS_ASSERT_START_GLOB
+syn keyword xsMacro PERL_ARGS_ASSERT_STASHPV_HVNAME_MATCH
+syn keyword xsMacro PERL_ARGS_ASSERT_STDIZE_LOCALE
+syn keyword xsMacro PERL_ARGS_ASSERT_STRIP_RETURN
+syn keyword xsMacro PERL_ARGS_ASSERT_STR_TO_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_STUDY_CHUNK
+syn keyword xsMacro PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2BOOL_FLAGS PERL_ARGS_ASSERT_SV_2CV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2IO PERL_ARGS_ASSERT_SV_2IUV_COMMON
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2NUM PERL_ARGS_ASSERT_SV_2PVBYTE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVBYTE_NOLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVUTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVUTF8_NOLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PV_NOLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_ADD_ARENA
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_ADD_BACKREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_BACKOFF PERL_ARGS_ASSERT_SV_BLESS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV PERL_ARGS_ASSERT_SV_CATPVF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV_MG PERL_ARGS_ASSERT_SV_CATSV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATSV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATSV_MG PERL_ARGS_ASSERT_SV_CATXMLPV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATXMLPVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATXMLSV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CAT_DECODE PERL_ARGS_ASSERT_SV_CHOP
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CLEAR
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_COMPILE_2OP
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_COPYPV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DEL_BACKREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DOES PERL_ARGS_ASSERT_SV_DOES_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DOES_PVN PERL_ARGS_ASSERT_SV_DOES_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUMP PERL_ARGS_ASSERT_SV_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_COMMON
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_INC
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_EXP_GROW
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_FORCE_NORMAL
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_FREE2 PERL_ARGS_ASSERT_SV_GETS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_GROW PERL_ARGS_ASSERT_SV_INSERT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_INSERT_FLAGS PERL_ARGS_ASSERT_SV_ISA
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_IV PERL_ARGS_ASSERT_SV_I_NCMP
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_KILL_BACKREFS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_MAGIC PERL_ARGS_ASSERT_SV_MAGICEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_NCMP PERL_ARGS_ASSERT_SV_NV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_B2U
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_CACHED
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY PERL_ARGS_ASSERT_SV_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVBYTE PERL_ARGS_ASSERT_SV_PVBYTEN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE PERL_ARGS_ASSERT_SV_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_FORCE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_NOMG PERL_ARGS_ASSERT_SV_PVUTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVUTF8N
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_REF PERL_ARGS_ASSERT_SV_REFTYPE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_RELEASE_COW
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_REPLACE PERL_ARGS_ASSERT_SV_RESET
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_RVWEAKEN PERL_ARGS_ASSERT_SV_SETHEK
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETIV PERL_ARGS_ASSERT_SV_SETIV_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETNV PERL_ARGS_ASSERT_SV_SETNV_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPV PERL_ARGS_ASSERT_SV_SETPVF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVIV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVIV_MG PERL_ARGS_ASSERT_SV_SETPVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVN_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPV_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_IV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_NV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_UV PERL_ARGS_ASSERT_SV_SETSV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_COW
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_MG PERL_ARGS_ASSERT_SV_SETUV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETUV_MG PERL_ARGS_ASSERT_SV_TAINT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_TAINTED PERL_ARGS_ASSERT_SV_UNGLOB
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNI_DISPLAY
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNMAGIC
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNMAGICEXT PERL_ARGS_ASSERT_SV_UNREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNREF_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNTAINT PERL_ARGS_ASSERT_SV_UPGRADE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_DECODE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_ENCODE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_UPGRADE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UV PERL_ARGS_ASSERT_SV_VCATPVF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_VCATPVFN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_VCATPVF_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_VSETPVF PERL_ARGS_ASSERT_SV_VSETPVFN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_VSETPVF_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_XMLPEEK PERL_ARGS_ASSERT_SWALLOW_BOM
+syn keyword xsMacro PERL_ARGS_ASSERT_SWASH_FETCH PERL_ARGS_ASSERT_SWASH_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT_SWATCH_GET PERL_ARGS_ASSERT_SYS_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT_SYS_INIT3
+syn keyword xsMacro PERL_ARGS_ASSERT_SYS_INTERN_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_TAINT_PROPER
+syn keyword xsMacro PERL_ARGS_ASSERT_TIED_METHOD
+syn keyword xsMacro PERL_ARGS_ASSERT_TOKENIZE_USE PERL_ARGS_ASSERT_TOKEN_FREE
+syn keyword xsMacro PERL_ARGS_ASSERT_TOKEN_GETMAD PERL_ARGS_ASSERT_TOKEQ
+syn keyword xsMacro PERL_ARGS_ASSERT_TOKEREPORT
+syn keyword xsMacro PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_BYTE_SUBSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_LOWER
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_TITLE
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_UPPER
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_CASE
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_FOLD
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_LOWER
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_SUBSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_TITLE
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_UPPER
+syn keyword xsMacro PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS
+syn keyword xsMacro PERL_ARGS_ASSERT_UIV_2BUF PERL_ARGS_ASSERT_UNLNK
+syn keyword xsMacro PERL_ARGS_ASSERT_UNPACKSTRING PERL_ARGS_ASSERT_UNPACK_REC
+syn keyword xsMacro PERL_ARGS_ASSERT_UNPACK_STR
+syn keyword xsMacro PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK
+syn keyword xsMacro PERL_ARGS_ASSERT_UPG_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TEXTFILTER
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TO_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TO_UTF8_REVERSED
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8N_TO_UVCHR
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8N_TO_UVUNI
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_DISTANCE PERL_ARGS_ASSERT_UTF8_HOP
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_LENGTH
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_BYTES
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVCHR
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVUNI
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVUNI_BUF
+syn keyword xsMacro PERL_ARGS_ASSERT_UTILIZE PERL_ARGS_ASSERT_UVCHR_TO_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_UVCHR_TO_UTF8_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_UVUNI_TO_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_VALIDATE_SUID
+syn keyword xsMacro PERL_ARGS_ASSERT_VALID_UTF8_TO_UVCHR
+syn keyword xsMacro PERL_ARGS_ASSERT_VALID_UTF8_TO_UVUNI
+syn keyword xsMacro PERL_ARGS_ASSERT_VCMP PERL_ARGS_ASSERT_VDEB
+syn keyword xsMacro PERL_ARGS_ASSERT_VFORM PERL_ARGS_ASSERT_VISIT
+syn keyword xsMacro PERL_ARGS_ASSERT_VIVIFY_DEFELEM
+syn keyword xsMacro PERL_ARGS_ASSERT_VIVIFY_REF PERL_ARGS_ASSERT_VLOAD_MODULE
+syn keyword xsMacro PERL_ARGS_ASSERT_VMESS PERL_ARGS_ASSERT_VNEWSVPVF
+syn keyword xsMacro PERL_ARGS_ASSERT_VNORMAL PERL_ARGS_ASSERT_VNUMIFY
+syn keyword xsMacro PERL_ARGS_ASSERT_VSTRINGIFY PERL_ARGS_ASSERT_VVERIFY
+syn keyword xsMacro PERL_ARGS_ASSERT_VWARN PERL_ARGS_ASSERT_VWARNER
+syn keyword xsMacro PERL_ARGS_ASSERT_WAIT4PID PERL_ARGS_ASSERT_WARN
+syn keyword xsMacro PERL_ARGS_ASSERT_WARNER PERL_ARGS_ASSERT_WARNER_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_WARN_NOCONTEXT PERL_ARGS_ASSERT_WARN_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_WATCH PERL_ARGS_ASSERT_WHICHSIG_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_WHICHSIG_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_WHICHSIG_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_WITH_QUEUED_ERRORS
+syn keyword xsMacro PERL_ARGS_ASSERT_WRAP_OP_CHECKER
+syn keyword xsMacro PERL_ARGS_ASSERT_WRITE_TO_STDERR
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_ATTR
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_FORM
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_INDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_PACKSUBS
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_PACKSUBS_PERL
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_SUB
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_SUB_PERL
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_VINDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_XS_APIVERSION_BOOTCHECK
+syn keyword xsMacro PERL_ARGS_ASSERT_XS_VERSION_BOOTCHECK
+syn keyword xsMacro PERL_ARGS_ASSERT_YYERROR PERL_ARGS_ASSERT_YYERROR_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_YYERROR_PVN PERL_ARGS_ASSERT_YYWARN
+syn keyword xsMacro PERL_ARGS_ASSERT__APPEND_RANGE_TO_INVLIST
+syn keyword xsMacro PERL_ARGS_ASSERT__CORE_SWASH_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_ARRAY_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_CONTENTS
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INVERT
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INVERT_PROP
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_POPULATE_SWATCH
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND
+syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_QUOTEMETA
+syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8__PERL_IDSTART
+syn keyword xsMacro PERL_ARGS_ASSERT__NEW_INVLIST_C_ARRAY
+syn keyword xsMacro PERL_ARGS_ASSERT__SWASH_INVERSION_HASH
+syn keyword xsMacro PERL_ARGS_ASSERT__SWASH_TO_INVLIST
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_FOLD_LATIN1
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UPPER_TITLE_LATIN1
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS PERL_ASYNC_CHECK
+syn keyword xsMacro PERL_BITFIELD16 PERL_BITFIELD32 PERL_BITFIELD8
+syn keyword xsMacro PERL_CALLCONV PERL_CHECK_INITED PERL_CKDEF PERL_DEB
+syn keyword xsMacro PERL_DEBUG PERL_DEBUG_PAD PERL_DEBUG_PAD_ZERO
+syn keyword xsMacro PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
+syn keyword xsMacro PERL_DONT_CREATE_GVSV
+syn keyword xsMacro PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS
+syn keyword xsMacro PERL_ENABLE_EXTENDED_TRIE_OPTIMISATION
+syn keyword xsMacro PERL_ENABLE_POSITIVE_ASSERTION_STUDY
+syn keyword xsMacro PERL_ENABLE_TRIE_OPTIMISATION PERL_EXIT_DESTRUCT_END
+syn keyword xsMacro PERL_EXIT_EXPECTED PERL_EXPORT_C PERL_FILE_IS_ABSOLUTE
+syn keyword xsMacro PERL_FILTER_EXISTS PERL_FLUSHALL_FOR_CHILD PERL_FPU_INIT
+syn keyword xsMacro PERL_FPU_POST_EXEC PERL_FPU_PRE_EXEC PERL_FS_VERSION
+syn keyword xsMacro PERL_FS_VER_FMT PERL_GCC_BRACE_GROUPS_FORBIDDEN
+syn keyword xsMacro PERL_GET_CONTEXT PERL_GET_INTERP PERL_GET_THX
+syn keyword xsMacro PERL_GET_VARS PERL_GIT_UNPUSHED_COMMITS
+syn keyword xsMacro PERL_GLOBAL_STRUCT PERL_GPROF_MONCONTROL PERL_HASH
+syn keyword xsMacro PERL_HASH_INTERNAL PERL_HASH_INTERNAL_ PERL_HASH_SEED
+syn keyword xsMacro PERL_HV_ARRAY_ALLOC_BYTES PERL_IMPLICIT_CONTEXT
+syn keyword xsMacro PERL_INTERPRETER_SIZE_UPTO_MEMBER PERL_INT_MAX
+syn keyword xsMacro PERL_INT_MIN PERL_LOADMOD_DENY PERL_LOADMOD_IMPORT_OPS
+syn keyword xsMacro PERL_LOADMOD_NOIMPORT PERL_LONG_MAX PERL_LONG_MIN
+syn keyword xsMacro PERL_MALLOC_WRAP PERL_MG_UFUNC PERL_MY_SNPRINTF_GUARDED
+syn keyword xsMacro PERL_MY_VSNPRINTF_GUARDED PERL_NEED_MY_BETOH16
+syn keyword xsMacro PERL_NEED_MY_BETOH32 PERL_NEED_MY_BETOHI
+syn keyword xsMacro PERL_NEED_MY_BETOHL PERL_NEED_MY_BETOHS
+syn keyword xsMacro PERL_NEED_MY_HTOBE16 PERL_NEED_MY_HTOBE32
+syn keyword xsMacro PERL_NEED_MY_HTOBEI PERL_NEED_MY_HTOBEL
+syn keyword xsMacro PERL_NEED_MY_HTOBES PERL_NEED_MY_HTOLE16
+syn keyword xsMacro PERL_NEED_MY_HTOLE32 PERL_NEED_MY_HTOLEI
+syn keyword xsMacro PERL_NEED_MY_HTOLEL PERL_NEED_MY_HTOLES
+syn keyword xsMacro PERL_NEED_MY_LETOH16 PERL_NEED_MY_LETOH32
+syn keyword xsMacro PERL_NEED_MY_LETOHI PERL_NEED_MY_LETOHL
+syn keyword xsMacro PERL_NEED_MY_LETOHS PERL_NO_DEV_RANDOM PERL_OBJECT_THIS
+syn keyword xsMacro PERL_OBJECT_THIS_ PERL_PADSEQ_INTRO PERL_PATCHNUM
+syn keyword xsMacro PERL_PPADDR_INITED PERL_PPDEF PERL_PRESERVE_IVUV
+syn keyword xsMacro PERL_PRIeldbl PERL_PRIfldbl PERL_PRIgldbl
+syn keyword xsMacro PERL_PV_ESCAPE_ALL PERL_PV_ESCAPE_FIRSTCHAR
+syn keyword xsMacro PERL_PV_ESCAPE_NOBACKSLASH PERL_PV_ESCAPE_NOCLEAR
+syn keyword xsMacro PERL_PV_ESCAPE_NONASCII PERL_PV_ESCAPE_QUOTE
+syn keyword xsMacro PERL_PV_ESCAPE_RE PERL_PV_ESCAPE_UNI
+syn keyword xsMacro PERL_PV_ESCAPE_UNI_DETECT PERL_PV_PRETTY_DUMP
+syn keyword xsMacro PERL_PV_PRETTY_ELLIPSES PERL_PV_PRETTY_LTGT
+syn keyword xsMacro PERL_PV_PRETTY_NOCLEAR PERL_PV_PRETTY_QUOTE
+syn keyword xsMacro PERL_PV_PRETTY_REGPROP PERL_QUAD_MAX PERL_QUAD_MIN
+syn keyword xsMacro PERL_REENTR_API PERL_REGMATCH_SLAB_SLOTS PERL_REVISION
+syn keyword xsMacro PERL_SCAN_ALLOW_UNDERSCORES PERL_SCAN_DISALLOW_PREFIX
+syn keyword xsMacro PERL_SCAN_GREATER_THAN_UV_MAX PERL_SCAN_SILENT_ILLDIGIT
+syn keyword xsMacro PERL_SCAN_SILENT_NON_PORTABLE PERL_SCNfldbl
+syn keyword xsMacro PERL_SCRIPT_MODE PERL_SET_CONTEXT PERL_SET_INTERP
+syn keyword xsMacro PERL_SET_PHASE PERL_SET_THX PERL_SHORT_MAX PERL_SHORT_MIN
+syn keyword xsMacro PERL_SIGNALS_UNSAFE_FLAG PERL_STACK_OVERFLOW_CHECK
+syn keyword xsMacro PERL_STATIC_INLINE PERL_STRLEN_EXPAND_SHIFT
+syn keyword xsMacro PERL_STRLEN_ROUNDUP PERL_STRLEN_ROUNDUP_QUANTUM
+syn keyword xsMacro PERL_SUBVERSION PERL_SUB_DEPTH_WARN PERL_SYS_INIT
+syn keyword xsMacro PERL_SYS_INIT3 PERL_SYS_INIT3_BODY PERL_SYS_INIT_BODY
+syn keyword xsMacro PERL_SYS_TERM PERL_SYS_TERM_BODY PERL_TARGETARCH
+syn keyword xsMacro PERL_UCHAR_MAX PERL_UCHAR_MIN PERL_UINT_MAX PERL_UINT_MIN
+syn keyword xsMacro PERL_ULONG_MAX PERL_ULONG_MIN PERL_UNICODE_ALL_FLAGS
+syn keyword xsMacro PERL_UNICODE_ARGV PERL_UNICODE_ARGV_FLAG
+syn keyword xsMacro PERL_UNICODE_DEFAULT_FLAGS PERL_UNICODE_IN
+syn keyword xsMacro PERL_UNICODE_INOUT PERL_UNICODE_INOUT_FLAG
+syn keyword xsMacro PERL_UNICODE_IN_FLAG PERL_UNICODE_LOCALE
+syn keyword xsMacro PERL_UNICODE_LOCALE_FLAG PERL_UNICODE_MAX
+syn keyword xsMacro PERL_UNICODE_OUT PERL_UNICODE_OUT_FLAG PERL_UNICODE_STD
+syn keyword xsMacro PERL_UNICODE_STDERR PERL_UNICODE_STDERR_FLAG
+syn keyword xsMacro PERL_UNICODE_STDIN PERL_UNICODE_STDIN_FLAG
+syn keyword xsMacro PERL_UNICODE_STDOUT PERL_UNICODE_STDOUT_FLAG
+syn keyword xsMacro PERL_UNICODE_STD_FLAG PERL_UNICODE_UTF8CACHEASSERT
+syn keyword xsMacro PERL_UNICODE_UTF8CACHEASSERT_FLAG
+syn keyword xsMacro PERL_UNICODE_WIDESYSCALLS PERL_UNICODE_WIDESYSCALLS_FLAG
+syn keyword xsMacro PERL_UNUSED_ARG PERL_UNUSED_CONTEXT PERL_UNUSED_DECL
+syn keyword xsMacro PERL_UNUSED_VAR PERL_UQUAD_MAX PERL_UQUAD_MIN
+syn keyword xsMacro PERL_USES_PL_PIDSTATUS PERL_USE_GCC_BRACE_GROUPS
+syn keyword xsMacro PERL_USHORT_MAX PERL_USHORT_MIN PERL_VERSION
+syn keyword xsMacro PERL_VERSION_STRING PERL_WAIT_FOR_CHILDREN
+syn keyword xsMacro PERL_WARNHOOK_FATAL PERL_WRITE_MSG_TO_CONSOLE
+syn keyword xsMacro PERL_XS_EXPORT_C PHASE_CHANGE_PROBE PHOSTNAME
+syn keyword xsMacro PIPESOCK_MODE PIPE_OPEN_MODE PLUGEXPR PLUGSTMT PLUS
+syn keyword xsMacro PL_ASCII PL_AboveLatin1 PL_Argv PL_Cmd PL_DBcv PL_DBgv
+syn keyword xsMacro PL_DBline PL_DBsignal PL_DBsingle PL_DBsub PL_DBtrace
+syn keyword xsMacro PL_Dir PL_Env PL_Gappctx PL_Gcheck PL_Gcheck_mutex
+syn keyword xsMacro PL_Gcsighandlerp PL_Gcurinterp PL_Gdo_undump
+syn keyword xsMacro PL_Gdollarzero_mutex PL_Gfold_locale PL_Ghints_mutex
+syn keyword xsMacro PL_Gkeyword_plugin PL_Gmalloc_mutex PL_Gmmap_page_size
+syn keyword xsMacro PL_Gmy_ctx_mutex PL_Gmy_cxt_index PL_Gop_mutex PL_Gop_seq
+syn keyword xsMacro PL_Gop_sequence PL_Gperlio_debug_fd PL_Gperlio_fd_refcnt
+syn keyword xsMacro PL_Gperlio_fd_refcnt_size PL_Gperlio_mutex PL_Gppaddr
+syn keyword xsMacro PL_Gsh_path PL_Gsig_defaulting PL_Gsig_handlers_initted
+syn keyword xsMacro PL_Gsig_ignoring PL_Gsig_trapped PL_Gsigfpe_saved
+syn keyword xsMacro PL_Gsv_placeholder PL_Gthr_key PL_Gtimesbase
+syn keyword xsMacro PL_Guse_safe_putenv PL_Gveto_cleanup PL_Gwatch_pvx
+syn keyword xsMacro PL_L1Cased PL_L1PosixAlnum PL_L1PosixAlpha
+syn keyword xsMacro PL_L1PosixGraph PL_L1PosixLower PL_L1PosixPrint
+syn keyword xsMacro PL_L1PosixPunct PL_L1PosixUpper PL_L1PosixWord PL_LIO
+syn keyword xsMacro PL_Latin1 PL_Mem PL_MemParse PL_MemShared
+syn keyword xsMacro PL_OP_SLAB_ALLOC PL_OpPtr PL_OpSlab PL_OpSpace
+syn keyword xsMacro PL_PerlSpace PL_PosixAlnum PL_PosixAlpha PL_PosixBlank
+syn keyword xsMacro PL_PosixCntrl PL_PosixDigit PL_PosixGraph PL_PosixLower
+syn keyword xsMacro PL_PosixPrint PL_PosixPunct PL_PosixSpace PL_PosixUpper
+syn keyword xsMacro PL_PosixWord PL_PosixXDigit PL_Proc PL_Sock PL_StdIO
+syn keyword xsMacro PL_Sv PL_VertSpace PL_XPerlSpace PL_XPosixBlank
+syn keyword xsMacro PL_XPosixCntrl PL_XPosixSpace PL_XPosixXDigit PL_Xpv
+syn keyword xsMacro PL_amagic_generation PL_an PL_apiversion PL_appctx
+syn keyword xsMacro PL_argvgv PL_argvout_stack PL_argvoutgv PL_basetime
+syn keyword xsMacro PL_beginav PL_beginav_save PL_blockhooks PL_body_arenas
+syn keyword xsMacro PL_body_roots PL_bodytarget PL_bostr PL_breakable_sub_gen
+syn keyword xsMacro PL_check_mutex PL_checkav PL_checkav_save PL_chopset
+syn keyword xsMacro PL_clocktick PL_collation_ix PL_collation_name
+syn keyword xsMacro PL_collation_standard PL_collxfrm_base PL_collxfrm_mult
+syn keyword xsMacro PL_colors PL_colorset PL_compcv PL_compiling PL_comppad
+syn keyword xsMacro PL_comppad_name PL_comppad_name_fill
+syn keyword xsMacro PL_comppad_name_floor PL_cop_seqmax PL_cryptseen
+syn keyword xsMacro PL_cshlen PL_csighandlerp PL_curcop PL_curcopdb
+syn keyword xsMacro PL_curinterp PL_curpad PL_curpm PL_curstack
+syn keyword xsMacro PL_curstackinfo PL_curstash PL_curstname
+syn keyword xsMacro PL_custom_op_descs PL_custom_op_names PL_custom_ops
+syn keyword xsMacro PL_cv_has_eval PL_dbargs PL_debstash PL_debug
+syn keyword xsMacro PL_debug_pad PL_def_layerlist PL_defgv PL_defoutgv
+syn keyword xsMacro PL_defstash PL_delaymagic PL_delaymagic_egid
+syn keyword xsMacro PL_delaymagic_euid PL_delaymagic_gid PL_delaymagic_uid
+syn keyword xsMacro PL_destroyhook PL_diehook PL_dirty PL_do_undump
+syn keyword xsMacro PL_dollarzero_mutex PL_doswitches PL_dowarn PL_dumper_fd
+syn keyword xsMacro PL_dumpindent PL_e_script PL_efloatbuf PL_efloatsize
+syn keyword xsMacro PL_encoding PL_endav PL_envgv PL_errgv PL_errors
+syn keyword xsMacro PL_eval_root PL_eval_start PL_evalseq PL_exit_flags
+syn keyword xsMacro PL_exitlist PL_exitlistlen PL_fdpid PL_filemode
+syn keyword xsMacro PL_firstgv PL_forkprocess PL_formfeed PL_formtarget
+syn keyword xsMacro PL_generation PL_gensym PL_glob_index PL_globalstash
+syn keyword xsMacro PL_globhook PL_hash_seed PL_hintgv PL_hints
+syn keyword xsMacro PL_hints_mutex PL_hv_fetch_ent_mh PL_in_clean_all
+syn keyword xsMacro PL_in_clean_objs PL_in_eval PL_in_load_module PL_incgv
+syn keyword xsMacro PL_initav PL_inplace PL_isarev PL_keyword_plugin
+syn keyword xsMacro PL_known_layers PL_last_in_gv PL_last_swash_hv
+syn keyword xsMacro PL_last_swash_key PL_last_swash_klen PL_last_swash_slen
+syn keyword xsMacro PL_last_swash_tmps PL_lastfd PL_lastgotoprobe
+syn keyword xsMacro PL_laststatval PL_laststype PL_localizing PL_localpatches
+syn keyword xsMacro PL_lockhook PL_madskills PL_main_cv PL_main_root
+syn keyword xsMacro PL_main_start PL_mainstack PL_malloc_mutex PL_markstack
+syn keyword xsMacro PL_markstack_max PL_markstack_ptr PL_max_intro_pending
+syn keyword xsMacro PL_maxo PL_maxsysfd PL_memory_debug_header PL_mess_sv
+syn keyword xsMacro PL_min_intro_pending PL_minus_E PL_minus_F PL_minus_a
+syn keyword xsMacro PL_minus_c PL_minus_l PL_minus_n PL_minus_p
+syn keyword xsMacro PL_mmap_page_size PL_modcount PL_modglobal
+syn keyword xsMacro PL_my_ctx_mutex PL_my_cxt_index PL_my_cxt_keys
+syn keyword xsMacro PL_my_cxt_list PL_my_cxt_size PL_nomemok PL_nrs
+syn keyword xsMacro PL_numeric_local PL_numeric_name PL_numeric_radix_sv
+syn keyword xsMacro PL_numeric_standard PL_ofsgv PL_oldname PL_op PL_op_mask
+syn keyword xsMacro PL_op_mutex PL_op_seq PL_op_sequence PL_opfreehook
+syn keyword xsMacro PL_opsave PL_origalen PL_origargc PL_origargv
+syn keyword xsMacro PL_origenviron PL_origfilename PL_ors_sv PL_osname
+syn keyword xsMacro PL_pad_reset_pending PL_padix PL_padix_floor PL_parser
+syn keyword xsMacro PL_patchlevel PL_peepp PL_perl_destruct_level PL_perldb
+syn keyword xsMacro PL_perlio PL_perlio_debug_fd PL_perlio_fd_refcnt
+syn keyword xsMacro PL_perlio_fd_refcnt_size PL_perlio_mutex PL_phase
+syn keyword xsMacro PL_pidstatus PL_preambleav PL_profiledata PL_psig_name
+syn keyword xsMacro PL_psig_pend PL_psig_ptr PL_ptr_table PL_reentrant_buffer
+syn keyword xsMacro PL_reentrant_retint PL_reg_curpm PL_reg_eval_set
+syn keyword xsMacro PL_reg_flags PL_reg_leftiter PL_reg_magic
+syn keyword xsMacro PL_reg_match_utf8 PL_reg_maxiter PL_reg_oldcurpm
+syn keyword xsMacro PL_reg_oldpos PL_reg_oldsaved PL_reg_oldsavedlen
+syn keyword xsMacro PL_reg_poscache PL_reg_poscache_size PL_reg_start_tmp
+syn keyword xsMacro PL_reg_start_tmpl PL_reg_starttry PL_reg_state
+syn keyword xsMacro PL_regdummy PL_regeol PL_regex_pad PL_regex_padav
+syn keyword xsMacro PL_reginput PL_reginterp_cnt PL_registered_mros
+syn keyword xsMacro PL_reglastcloseparen PL_reglastparen PL_regmatch_slab
+syn keyword xsMacro PL_regmatch_state PL_regoffs PL_regsize PL_rehash_seed
+syn keyword xsMacro PL_rehash_seed_set PL_replgv PL_restartjmpenv
+syn keyword xsMacro PL_restartop PL_rpeepp PL_rs PL_runops PL_savebegin
+syn keyword xsMacro PL_savestack PL_savestack_ix PL_savestack_max
+syn keyword xsMacro PL_sawampersand PL_scopestack PL_scopestack_ix
+syn keyword xsMacro PL_scopestack_max PL_scopestack_name PL_secondgv
+syn keyword xsMacro PL_sharehook PL_sig_defaulting PL_sig_handlers_initted
+syn keyword xsMacro PL_sig_ignoring PL_sig_pending PL_sig_trapped
+syn keyword xsMacro PL_sigfpe_saved PL_sighandlerp PL_signalhook PL_signals
+syn keyword xsMacro PL_slab_count PL_slabs PL_sort_RealCmp PL_sortcop
+syn keyword xsMacro PL_sortstash PL_splitstr PL_srand_called PL_stack_base
+syn keyword xsMacro PL_stack_max PL_stack_sp PL_start_env PL_stashcache
+syn keyword xsMacro PL_statbuf PL_statcache PL_statgv PL_statname
+syn keyword xsMacro PL_statusvalue PL_statusvalue_posix PL_statusvalue_vms
+syn keyword xsMacro PL_stderrgv PL_stdingv PL_strtab PL_sub_generation
+syn keyword xsMacro PL_subline PL_subname PL_sv_arenaroot PL_sv_count
+syn keyword xsMacro PL_sv_no PL_sv_objcount PL_sv_placeholder PL_sv_root
+syn keyword xsMacro PL_sv_serial PL_sv_undef PL_sv_yes PL_sys_intern
+syn keyword xsMacro PL_taint_warn PL_tainted PL_tainting PL_thr_key
+syn keyword xsMacro PL_threadhook PL_timesbase PL_timesbuf PL_tmps_floor
+syn keyword xsMacro PL_tmps_ix PL_tmps_max PL_tmps_stack PL_top_env
+syn keyword xsMacro PL_toptarget PL_unicode PL_unitcheckav
+syn keyword xsMacro PL_unitcheckav_save PL_unlockhook PL_unsafe
+syn keyword xsMacro PL_use_safe_putenv PL_utf8_X_L PL_utf8_X_LV PL_utf8_X_LVT
+syn keyword xsMacro PL_utf8_X_LV_LVT_V PL_utf8_X_T PL_utf8_X_V
+syn keyword xsMacro PL_utf8_X_begin PL_utf8_X_extend PL_utf8_X_non_hangul
+syn keyword xsMacro PL_utf8_X_prepend PL_utf8_alnum PL_utf8_alpha
+syn keyword xsMacro PL_utf8_digit PL_utf8_foldable PL_utf8_foldclosures
+syn keyword xsMacro PL_utf8_graph PL_utf8_idcont PL_utf8_idstart
+syn keyword xsMacro PL_utf8_lower PL_utf8_mark PL_utf8_perl_idstart
+syn keyword xsMacro PL_utf8_print PL_utf8_punct PL_utf8_quotemeta
+syn keyword xsMacro PL_utf8_space PL_utf8_tofold PL_utf8_tolower
+syn keyword xsMacro PL_utf8_totitle PL_utf8_toupper PL_utf8_upper
+syn keyword xsMacro PL_utf8_xdigit PL_utf8_xidcont PL_utf8_xidstart
+syn keyword xsMacro PL_utf8cache PL_utf8locale PL_veto_cleanup PL_vtbl_amagic
+syn keyword xsMacro PL_vtbl_amagicelem PL_vtbl_arylen PL_vtbl_arylen_p
+syn keyword xsMacro PL_vtbl_backref PL_vtbl_bm PL_vtbl_collxfrm
+syn keyword xsMacro PL_vtbl_dbline PL_vtbl_defelem PL_vtbl_env
+syn keyword xsMacro PL_vtbl_envelem PL_vtbl_fm PL_vtbl_hints
+syn keyword xsMacro PL_vtbl_hintselem PL_vtbl_isa PL_vtbl_isaelem
+syn keyword xsMacro PL_vtbl_mglob PL_vtbl_nkeys PL_vtbl_ovrld PL_vtbl_pack
+syn keyword xsMacro PL_vtbl_packelem PL_vtbl_pos PL_vtbl_regdata
+syn keyword xsMacro PL_vtbl_regdatum PL_vtbl_regexp PL_vtbl_sigelem
+syn keyword xsMacro PL_vtbl_substr PL_vtbl_sv PL_vtbl_taint PL_vtbl_utf8
+syn keyword xsMacro PL_vtbl_uvar PL_vtbl_vec PL_vtbl_vstring PL_warnhook
+syn keyword xsMacro PL_watch_pvx PL_watchaddr PL_watchok PL_xmlfp PMFUNC
+syn keyword xsMacro PM_GETRE PM_SETRE PMf_BASE_SHIFT PMf_COMPILETIME
+syn keyword xsMacro PMf_CONST PMf_CONTINUE PMf_EVAL PMf_EXTENDED PMf_FOLD
+syn keyword xsMacro PMf_GLOBAL PMf_KEEP PMf_KEEPCOPY PMf_MAYBE_CONST
+syn keyword xsMacro PMf_MULTILINE PMf_NONDESTRUCT PMf_ONCE PMf_RETAINT
+syn keyword xsMacro PMf_SINGLELINE PMf_USED POPBLOCK POPEVAL POPFORMAT
+syn keyword xsMacro POPLOOP POPMARK POPSTACK POPSTACK_TO POPSUB POPSUBST
+syn keyword xsMacro POP_MULTICALL POP_SAVEARRAY POPi POPl POPn POPp POPpbytex
+syn keyword xsMacro POPpconstx POPpx POPq POPs POPu POPul POPuq POSTDEC
+syn keyword xsMacro POSTINC POWOP PP PREC_LOW PREDEC PREGf_CUTGROUP_SEEN
+syn keyword xsMacro PREGf_IMPLICIT PREGf_NAUGHTY PREGf_SKIP
+syn keyword xsMacro PREGf_VERBARG_SEEN PREINC PREVOPER PRINTF_FORMAT_NULL_OK
+syn keyword xsMacro PRIVATEREF PRIVLIB PRIVLIB_EXP PRIVSHIFT PROCSELFEXE_PATH
+syn keyword xsMacro PRUNE PSEUDO PTHREAD_ATFORK PTHREAD_ATTR_SETDETACHSTATE
+syn keyword xsMacro PTHREAD_CREATE PTHREAD_CREATE_JOINABLE
+syn keyword xsMacro PTHREAD_GETSPECIFIC PTHREAD_GETSPECIFIC_INT PTR2IV PTR2NV
+syn keyword xsMacro PTR2UV PTR2nat PTR2ul PTRSIZE PTRV PUSHBLOCK PUSHEVAL
+syn keyword xsMacro PUSHFORMAT PUSHGIVEN PUSHLOOP_FOR PUSHLOOP_PLAIN PUSHMARK
+syn keyword xsMacro PUSHSTACK PUSHSTACKi PUSHSUB PUSHSUBST PUSHSUB_BASE
+syn keyword xsMacro PUSHSUB_DB PUSHTARG PUSHWHEN PUSH_MULTICALL PUSHi
+syn keyword xsMacro PUSHmortal PUSHn PUSHp PUSHs PUSHu PUTBACK PWGECOS
+syn keyword xsMacro PWPASSWD Pause PeRl_CaTiFy PeRl_StGiFy PerlDir_chdir
+syn keyword xsMacro PerlDir_close PerlDir_mapA PerlDir_mapW PerlDir_mkdir
+syn keyword xsMacro PerlDir_open PerlDir_read PerlDir_rewind PerlDir_rmdir
+syn keyword xsMacro PerlDir_seek PerlDir_tell PerlEnv_ENVgetenv
+syn keyword xsMacro PerlEnv_ENVgetenv_len PerlEnv_clearenv
+syn keyword xsMacro PerlEnv_free_childdir PerlEnv_free_childenv
+syn keyword xsMacro PerlEnv_get_child_IO PerlEnv_get_childdir
+syn keyword xsMacro PerlEnv_get_childenv PerlEnv_getenv PerlEnv_getenv_len
+syn keyword xsMacro PerlEnv_lib_path PerlEnv_os_id PerlEnv_putenv
+syn keyword xsMacro PerlEnv_sitelib_path PerlEnv_uname PerlEnv_vendorlib_path
+syn keyword xsMacro PerlIOArg PerlIOBase PerlIONext PerlIOSelf PerlIOValid
+syn keyword xsMacro PerlIO_canset_cnt PerlIO_exportFILE PerlIO_fast_gets
+syn keyword xsMacro PerlIO_fdopen PerlIO_findFILE PerlIO_getc PerlIO_getname
+syn keyword xsMacro PerlIO_has_base PerlIO_has_cntptr PerlIO_importFILE
+syn keyword xsMacro PerlIO_isutf8 PerlIO_open PerlIO_printf PerlIO_putc
+syn keyword xsMacro PerlIO_puts PerlIO_releaseFILE PerlIO_reopen
+syn keyword xsMacro PerlIO_rewind PerlIO_sprintf PerlIO_stdoutf
+syn keyword xsMacro PerlIO_tmpfile PerlIO_ungetc PerlIO_vprintf
+syn keyword xsMacro PerlLIO_access PerlLIO_chmod PerlLIO_chown PerlLIO_chsize
+syn keyword xsMacro PerlLIO_close PerlLIO_dup PerlLIO_dup2 PerlLIO_flock
+syn keyword xsMacro PerlLIO_fstat PerlLIO_ioctl PerlLIO_isatty PerlLIO_link
+syn keyword xsMacro PerlLIO_lseek PerlLIO_lstat PerlLIO_mkstemp
+syn keyword xsMacro PerlLIO_mktemp PerlLIO_open PerlLIO_open3 PerlLIO_read
+syn keyword xsMacro PerlLIO_rename PerlLIO_setmode PerlLIO_stat
+syn keyword xsMacro PerlLIO_tmpnam PerlLIO_umask PerlLIO_unlink PerlLIO_utime
+syn keyword xsMacro PerlLIO_write PerlMemParse_calloc PerlMemParse_free
+syn keyword xsMacro PerlMemParse_free_lock PerlMemParse_get_lock
+syn keyword xsMacro PerlMemParse_is_locked PerlMemParse_malloc
+syn keyword xsMacro PerlMemParse_realloc PerlMemShared_calloc
+syn keyword xsMacro PerlMemShared_free PerlMemShared_free_lock
+syn keyword xsMacro PerlMemShared_get_lock PerlMemShared_is_locked
+syn keyword xsMacro PerlMemShared_malloc PerlMemShared_realloc PerlMem_calloc
+syn keyword xsMacro PerlMem_free PerlMem_free_lock PerlMem_get_lock
+syn keyword xsMacro PerlMem_is_locked PerlMem_malloc PerlMem_realloc
+syn keyword xsMacro PerlProc_DynaLoad PerlProc_GetOSError PerlProc__exit
+syn keyword xsMacro PerlProc_abort PerlProc_crypt PerlProc_execl
+syn keyword xsMacro PerlProc_execv PerlProc_execvp PerlProc_exit
+syn keyword xsMacro PerlProc_fork PerlProc_getegid PerlProc_geteuid
+syn keyword xsMacro PerlProc_getgid PerlProc_getlogin PerlProc_getpid
+syn keyword xsMacro PerlProc_gettimeofday PerlProc_getuid PerlProc_kill
+syn keyword xsMacro PerlProc_killpg PerlProc_lasthost PerlProc_longjmp
+syn keyword xsMacro PerlProc_pause PerlProc_pclose PerlProc_pipe
+syn keyword xsMacro PerlProc_popen PerlProc_popen_list PerlProc_setgid
+syn keyword xsMacro PerlProc_setjmp PerlProc_setuid PerlProc_signal
+syn keyword xsMacro PerlProc_sleep PerlProc_spawnvp PerlProc_times
+syn keyword xsMacro PerlProc_wait PerlProc_waitpid PerlSIO_canset_cnt
+syn keyword xsMacro PerlSIO_clearerr PerlSIO_fast_gets PerlSIO_fclose
+syn keyword xsMacro PerlSIO_fdopen PerlSIO_fdupopen PerlSIO_feof
+syn keyword xsMacro PerlSIO_ferror PerlSIO_fflush PerlSIO_fgetc
+syn keyword xsMacro PerlSIO_fgetpos PerlSIO_fgets PerlSIO_fileno
+syn keyword xsMacro PerlSIO_fopen PerlSIO_fputc PerlSIO_fputs PerlSIO_fread
+syn keyword xsMacro PerlSIO_freopen PerlSIO_fseek PerlSIO_fsetpos
+syn keyword xsMacro PerlSIO_ftell PerlSIO_fwrite PerlSIO_get_base
+syn keyword xsMacro PerlSIO_get_bufsiz PerlSIO_get_cnt PerlSIO_get_ptr
+syn keyword xsMacro PerlSIO_has_base PerlSIO_has_cntptr PerlSIO_init
+syn keyword xsMacro PerlSIO_printf PerlSIO_rewind PerlSIO_set_cnt
+syn keyword xsMacro PerlSIO_set_ptr PerlSIO_setbuf PerlSIO_setlinebuf
+syn keyword xsMacro PerlSIO_setvbuf PerlSIO_stderr PerlSIO_stdin
+syn keyword xsMacro PerlSIO_stdout PerlSIO_stdoutf PerlSIO_tmpfile
+syn keyword xsMacro PerlSIO_ungetc PerlSIO_vprintf PerlSock_accept
+syn keyword xsMacro PerlSock_bind PerlSock_closesocket PerlSock_connect
+syn keyword xsMacro PerlSock_endhostent PerlSock_endnetent
+syn keyword xsMacro PerlSock_endprotoent PerlSock_endservent
+syn keyword xsMacro PerlSock_gethostbyaddr PerlSock_gethostbyname
+syn keyword xsMacro PerlSock_gethostent PerlSock_gethostname
+syn keyword xsMacro PerlSock_getnetbyaddr PerlSock_getnetbyname
+syn keyword xsMacro PerlSock_getnetent PerlSock_getpeername
+syn keyword xsMacro PerlSock_getprotobyname PerlSock_getprotobynumber
+syn keyword xsMacro PerlSock_getprotoent PerlSock_getservbyname
+syn keyword xsMacro PerlSock_getservbyport PerlSock_getservent
+syn keyword xsMacro PerlSock_getsockname PerlSock_getsockopt PerlSock_htonl
+syn keyword xsMacro PerlSock_htons PerlSock_inet_addr PerlSock_inet_ntoa
+syn keyword xsMacro PerlSock_listen PerlSock_ntohl PerlSock_ntohs
+syn keyword xsMacro PerlSock_recv PerlSock_recvfrom PerlSock_select
+syn keyword xsMacro PerlSock_send PerlSock_sendto PerlSock_sethostent
+syn keyword xsMacro PerlSock_setnetent PerlSock_setprotoent
+syn keyword xsMacro PerlSock_setservent PerlSock_setsockopt PerlSock_shutdown
+syn keyword xsMacro PerlSock_socket PerlSock_socketpair Perl_assert
+syn keyword xsMacro Perl_atan2 Perl_atof Perl_atof2 Perl_ceil Perl_cos
+syn keyword xsMacro Perl_debug_log Perl_error_log Perl_exp Perl_floor
+syn keyword xsMacro Perl_fmod Perl_fp_class Perl_fp_class_denorm
+syn keyword xsMacro Perl_fp_class_inf Perl_fp_class_nan Perl_fp_class_ndenorm
+syn keyword xsMacro Perl_fp_class_ninf Perl_fp_class_nnorm Perl_fp_class_norm
+syn keyword xsMacro Perl_fp_class_nzero Perl_fp_class_pdenorm
+syn keyword xsMacro Perl_fp_class_pinf Perl_fp_class_pnorm
+syn keyword xsMacro Perl_fp_class_pzero Perl_fp_class_qnan Perl_fp_class_snan
+syn keyword xsMacro Perl_fp_class_zero Perl_frexp Perl_isfinite Perl_isinf
+syn keyword xsMacro Perl_isnan Perl_log Perl_malloc_good_size Perl_modf
+syn keyword xsMacro Perl_pow Perl_pp_accept Perl_pp_aelemfast_lex
+syn keyword xsMacro Perl_pp_andassign Perl_pp_avalues Perl_pp_bind
+syn keyword xsMacro Perl_pp_bit_xor Perl_pp_chmod Perl_pp_chomp
+syn keyword xsMacro Perl_pp_connect Perl_pp_cos Perl_pp_custom
+syn keyword xsMacro Perl_pp_dbmclose Perl_pp_dofile Perl_pp_dor
+syn keyword xsMacro Perl_pp_dorassign Perl_pp_dump Perl_pp_egrent
+syn keyword xsMacro Perl_pp_enetent Perl_pp_eprotoent Perl_pp_epwent
+syn keyword xsMacro Perl_pp_eservent Perl_pp_exp Perl_pp_fcntl
+syn keyword xsMacro Perl_pp_ftatime Perl_pp_ftbinary Perl_pp_ftblk
+syn keyword xsMacro Perl_pp_ftchr Perl_pp_ftctime Perl_pp_ftdir
+syn keyword xsMacro Perl_pp_fteexec Perl_pp_fteowned Perl_pp_fteread
+syn keyword xsMacro Perl_pp_ftewrite Perl_pp_ftfile Perl_pp_ftmtime
+syn keyword xsMacro Perl_pp_ftpipe Perl_pp_ftrexec Perl_pp_ftrwrite
+syn keyword xsMacro Perl_pp_ftsgid Perl_pp_ftsize Perl_pp_ftsock
+syn keyword xsMacro Perl_pp_ftsuid Perl_pp_ftsvtx Perl_pp_ftzero
+syn keyword xsMacro Perl_pp_getpeername Perl_pp_getsockname Perl_pp_ggrgid
+syn keyword xsMacro Perl_pp_ggrnam Perl_pp_ghbyaddr Perl_pp_ghbyname
+syn keyword xsMacro Perl_pp_gnbyaddr Perl_pp_gnbyname Perl_pp_gpbyname
+syn keyword xsMacro Perl_pp_gpbynumber Perl_pp_gpwnam Perl_pp_gpwuid
+syn keyword xsMacro Perl_pp_gsbyname Perl_pp_gsbyport Perl_pp_gsockopt
+syn keyword xsMacro Perl_pp_hex Perl_pp_i_postdec Perl_pp_i_postinc
+syn keyword xsMacro Perl_pp_i_predec Perl_pp_i_preinc Perl_pp_keys
+syn keyword xsMacro Perl_pp_kill Perl_pp_lcfirst Perl_pp_lineseq
+syn keyword xsMacro Perl_pp_listen Perl_pp_localtime Perl_pp_log
+syn keyword xsMacro Perl_pp_lstat Perl_pp_mapstart Perl_pp_msgctl
+syn keyword xsMacro Perl_pp_msgget Perl_pp_msgrcv Perl_pp_msgsnd
+syn keyword xsMacro Perl_pp_orassign Perl_pp_padany Perl_pp_pop
+syn keyword xsMacro Perl_pp_postdec Perl_pp_predec Perl_pp_reach Perl_pp_read
+syn keyword xsMacro Perl_pp_recv Perl_pp_regcmaybe Perl_pp_rindex
+syn keyword xsMacro Perl_pp_rv2hv Perl_pp_rvalues Perl_pp_say Perl_pp_scalar
+syn keyword xsMacro Perl_pp_schomp Perl_pp_scope Perl_pp_seek Perl_pp_semop
+syn keyword xsMacro Perl_pp_send Perl_pp_sge Perl_pp_sgrent Perl_pp_sgt
+syn keyword xsMacro Perl_pp_shmctl Perl_pp_shmget Perl_pp_shmread
+syn keyword xsMacro Perl_pp_shutdown Perl_pp_slt Perl_pp_snetent
+syn keyword xsMacro Perl_pp_socket Perl_pp_sprotoent Perl_pp_spwent
+syn keyword xsMacro Perl_pp_sqrt Perl_pp_sservent Perl_pp_ssockopt
+syn keyword xsMacro Perl_pp_symlink Perl_pp_transr Perl_pp_unlink
+syn keyword xsMacro Perl_pp_utime Perl_pp_values Perl_safesysmalloc_size
+syn keyword xsMacro Perl_sharepvn Perl_signbit Perl_sin Perl_sqrt
+syn keyword xsMacro Perl_va_copy PmopSTASH PmopSTASHPV PmopSTASHPV_set
+syn keyword xsMacro PmopSTASH_flags PmopSTASH_flags_set PmopSTASH_free
+syn keyword xsMacro PmopSTASH_set Poison PoisonFree PoisonNew PoisonWith
+syn keyword xsMacro QR_PAT_MODS QUADKIND QUAD_IS_INT QUAD_IS_INT64_T
+syn keyword xsMacro QUAD_IS_LONG QUAD_IS_LONG_LONG QUAD_IS___INT64 QWLIST
+syn keyword xsMacro RANDBITS RANDOM_R_PROTO RD_NODATA READDIR64_R_PROTO
+syn keyword xsMacro READDIR_R_PROTO REENTRANT_PROTO_B_B REENTRANT_PROTO_B_BI
+syn keyword xsMacro REENTRANT_PROTO_B_BW REENTRANT_PROTO_B_CCD
+syn keyword xsMacro REENTRANT_PROTO_B_CCS REENTRANT_PROTO_B_IBI
+syn keyword xsMacro REENTRANT_PROTO_B_IBW REENTRANT_PROTO_B_SB
+syn keyword xsMacro REENTRANT_PROTO_B_SBI REENTRANT_PROTO_I_BI
+syn keyword xsMacro REENTRANT_PROTO_I_BW REENTRANT_PROTO_I_CCSBWR
+syn keyword xsMacro REENTRANT_PROTO_I_CCSD REENTRANT_PROTO_I_CII
+syn keyword xsMacro REENTRANT_PROTO_I_CIISD REENTRANT_PROTO_I_CSBI
+syn keyword xsMacro REENTRANT_PROTO_I_CSBIR REENTRANT_PROTO_I_CSBWR
+syn keyword xsMacro REENTRANT_PROTO_I_CSBWRE REENTRANT_PROTO_I_CSD
+syn keyword xsMacro REENTRANT_PROTO_I_CWISBWRE REENTRANT_PROTO_I_CWISD
+syn keyword xsMacro REENTRANT_PROTO_I_D REENTRANT_PROTO_I_H
+syn keyword xsMacro REENTRANT_PROTO_I_IBI REENTRANT_PROTO_I_IBW
+syn keyword xsMacro REENTRANT_PROTO_I_ICBI REENTRANT_PROTO_I_ICSBWR
+syn keyword xsMacro REENTRANT_PROTO_I_ICSD REENTRANT_PROTO_I_ID
+syn keyword xsMacro REENTRANT_PROTO_I_IISD REENTRANT_PROTO_I_ISBWR
+syn keyword xsMacro REENTRANT_PROTO_I_ISD REENTRANT_PROTO_I_LISBI
+syn keyword xsMacro REENTRANT_PROTO_I_LISD REENTRANT_PROTO_I_LS
+syn keyword xsMacro REENTRANT_PROTO_I_SB REENTRANT_PROTO_I_SBI
+syn keyword xsMacro REENTRANT_PROTO_I_SBIE REENTRANT_PROTO_I_SBIH
+syn keyword xsMacro REENTRANT_PROTO_I_SBIR REENTRANT_PROTO_I_SBWR
+syn keyword xsMacro REENTRANT_PROTO_I_SBWRE REENTRANT_PROTO_I_SD
+syn keyword xsMacro REENTRANT_PROTO_I_ST REENTRANT_PROTO_I_St
+syn keyword xsMacro REENTRANT_PROTO_I_TISD REENTRANT_PROTO_I_TS
+syn keyword xsMacro REENTRANT_PROTO_I_TSBI REENTRANT_PROTO_I_TSBIR
+syn keyword xsMacro REENTRANT_PROTO_I_TSBWR REENTRANT_PROTO_I_TSR
+syn keyword xsMacro REENTRANT_PROTO_I_TsISBWRE REENTRANT_PROTO_I_UISBWRE
+syn keyword xsMacro REENTRANT_PROTO_I_iS REENTRANT_PROTO_I_lS
+syn keyword xsMacro REENTRANT_PROTO_I_uISBWRE REENTRANT_PROTO_S_CBI
+syn keyword xsMacro REENTRANT_PROTO_S_CCSBI REENTRANT_PROTO_S_CIISBIE
+syn keyword xsMacro REENTRANT_PROTO_S_CSBI REENTRANT_PROTO_S_CSBIE
+syn keyword xsMacro REENTRANT_PROTO_S_CWISBIE REENTRANT_PROTO_S_CWISBWIE
+syn keyword xsMacro REENTRANT_PROTO_S_ICSBI REENTRANT_PROTO_S_ISBI
+syn keyword xsMacro REENTRANT_PROTO_S_LISBI REENTRANT_PROTO_S_SBI
+syn keyword xsMacro REENTRANT_PROTO_S_SBIE REENTRANT_PROTO_S_SBW
+syn keyword xsMacro REENTRANT_PROTO_S_TISBI REENTRANT_PROTO_S_TSBI
+syn keyword xsMacro REENTRANT_PROTO_S_TSBIE REENTRANT_PROTO_S_TWISBIE
+syn keyword xsMacro REENTRANT_PROTO_V_D REENTRANT_PROTO_V_H
+syn keyword xsMacro REENTRANT_PROTO_V_ID REENTR_H REENTR_MEMZERO REF
+syn keyword xsMacro REFCOUNTED_HE_EXISTS REFCOUNTED_HE_KEY_UTF8 REFF REFFA
+syn keyword xsMacro REFFL REFFU REFGEN REF_HE_KEY REGMATCH_STATE_MAX
+syn keyword xsMacro REGNODE_MAX REGNODE_SIMPLE REGNODE_VARIES REG_ANY
+syn keyword xsMacro REG_INFTY REG_MAGIC REG_SEEN_CANY REG_SEEN_CUTGROUP
+syn keyword xsMacro REG_SEEN_EVAL REG_SEEN_EXACTF_SHARP_S REG_SEEN_GPOS
+syn keyword xsMacro REG_SEEN_LOOKBEHIND REG_SEEN_RECURSE
+syn keyword xsMacro REG_SEEN_RUN_ON_COMMENT REG_SEEN_SANY REG_SEEN_VERBARG
+syn keyword xsMacro REG_SEEN_ZERO_LEN REG_TOP_LEVEL_BRANCHES RELOP RENUM
+syn keyword xsMacro REQUIRE RESTORE_ERRNO RESTORE_NUMERIC_LOCAL
+syn keyword xsMacro RESTORE_NUMERIC_STANDARD RETPUSHNO RETPUSHUNDEF
+syn keyword xsMacro RETPUSHYES RETSETNO RETSETUNDEF RETSETYES RETURN RETURNOP
+syn keyword xsMacro RETURNX RETURN_PROBE REXEC_CHECKED REXEC_COPY_STR
+syn keyword xsMacro REXEC_IGNOREPOS REXEC_NOT_FIRST REXEC_SCREAM
+syn keyword xsMacro RE_DEBUG_COMPILE_DUMP RE_DEBUG_COMPILE_FLAGS
+syn keyword xsMacro RE_DEBUG_COMPILE_MASK RE_DEBUG_COMPILE_OPTIMISE
+syn keyword xsMacro RE_DEBUG_COMPILE_PARSE RE_DEBUG_COMPILE_TRIE
+syn keyword xsMacro RE_DEBUG_EXECUTE_INTUIT RE_DEBUG_EXECUTE_MASK
+syn keyword xsMacro RE_DEBUG_EXECUTE_MATCH RE_DEBUG_EXECUTE_TRIE
+syn keyword xsMacro RE_DEBUG_EXTRA_BUFFERS RE_DEBUG_EXTRA_GPOS
+syn keyword xsMacro RE_DEBUG_EXTRA_MASK RE_DEBUG_EXTRA_OFFDEBUG
+syn keyword xsMacro RE_DEBUG_EXTRA_OFFSETS RE_DEBUG_EXTRA_OPTIMISE
+syn keyword xsMacro RE_DEBUG_EXTRA_STACK RE_DEBUG_EXTRA_STATE
+syn keyword xsMacro RE_DEBUG_EXTRA_TRIE RE_DEBUG_FLAG RE_DEBUG_FLAGS
+syn keyword xsMacro RE_PV_COLOR_DECL RE_PV_QUOTED_DECL RE_SV_DUMPLEN
+syn keyword xsMacro RE_SV_ESCAPE RE_SV_TAIL RE_TRACK_PATTERN_OFFSETS
+syn keyword xsMacro RE_TRIE_MAXBUF_INIT RE_TRIE_MAXBUF_NAME RMS_DIR RMS_FAC
+syn keyword xsMacro RMS_FEX RMS_FNF RMS_IFI RMS_ISI RMS_PRV RUNOPS_DEFAULT
+syn keyword xsMacro RV2CVOPCV_MARK_EARLY RV2CVOPCV_RETURN_NAME_GV
+syn keyword xsMacro RX_ANCHORED_SUBSTR RX_ANCHORED_UTF8 RX_BUFF_IDX_FULLMATCH
+syn keyword xsMacro RX_BUFF_IDX_POSTMATCH RX_BUFF_IDX_PREMATCH
+syn keyword xsMacro RX_CHECK_SUBSTR RX_ENGINE RX_EXTFLAGS RX_FLOAT_SUBSTR
+syn keyword xsMacro RX_FLOAT_UTF8 RX_GOFS RX_HAS_CUTGROUP RX_LASTCLOSEPAREN
+syn keyword xsMacro RX_LASTPAREN RX_MATCH_COPIED RX_MATCH_COPIED_off
+syn keyword xsMacro RX_MATCH_COPIED_on RX_MATCH_COPIED_set RX_MATCH_COPY_FREE
+syn keyword xsMacro RX_MATCH_TAINTED RX_MATCH_TAINTED_off RX_MATCH_TAINTED_on
+syn keyword xsMacro RX_MATCH_TAINTED_set RX_MATCH_UTF8 RX_MATCH_UTF8_off
+syn keyword xsMacro RX_MATCH_UTF8_on RX_MATCH_UTF8_set RX_MINLEN RX_MINLENRET
+syn keyword xsMacro RX_NPARENS RX_OFFS RX_PRECOMP RX_PRECOMP_const RX_PRELEN
+syn keyword xsMacro RX_REFCNT RX_SAVED_COPY RX_SEEN_EVALS RX_SUBBEG RX_SUBLEN
+syn keyword xsMacro RX_UTF8 RX_WRAPLEN RX_WRAPPED RX_WRAPPED_const RXapif_ALL
+syn keyword xsMacro RXapif_CLEAR RXapif_DELETE RXapif_EXISTS RXapif_FETCH
+syn keyword xsMacro RXapif_FIRSTKEY RXapif_NEXTKEY RXapif_ONE RXapif_REGNAME
+syn keyword xsMacro RXapif_REGNAMES RXapif_REGNAMES_COUNT RXapif_SCALAR
+syn keyword xsMacro RXapif_STORE RXf_ANCH RXf_ANCH_BOL RXf_ANCH_GPOS
+syn keyword xsMacro RXf_ANCH_MBOL RXf_ANCH_SBOL RXf_ANCH_SINGLE
+syn keyword xsMacro RXf_BASE_SHIFT RXf_CANY_SEEN RXf_CHECK_ALL RXf_COPY_DONE
+syn keyword xsMacro RXf_EVAL_SEEN RXf_GPOS_CHECK RXf_GPOS_FLOAT RXf_GPOS_SEEN
+syn keyword xsMacro RXf_INTUIT_TAIL RXf_LOOKBEHIND_SEEN RXf_MATCH_UTF8
+syn keyword xsMacro RXf_NOSCAN RXf_NULL RXf_PMf_CHARSET RXf_PMf_COMPILETIME
+syn keyword xsMacro RXf_PMf_EXTENDED RXf_PMf_FOLD RXf_PMf_KEEPCOPY
+syn keyword xsMacro RXf_PMf_MULTILINE RXf_PMf_SINGLELINE RXf_PMf_STD_PMMOD
+syn keyword xsMacro RXf_PMf_STD_PMMOD_SHIFT RXf_SKIPWHITE RXf_SPLIT
+syn keyword xsMacro RXf_START_ONLY RXf_TAINTED RXf_TAINTED_SEEN
+syn keyword xsMacro RXf_USE_INTUIT RXf_USE_INTUIT_ML RXf_USE_INTUIT_NOML
+syn keyword xsMacro RXf_WHITE RXi_GET RXi_GET_DECL RXi_SET RXp_EXTFLAGS
+syn keyword xsMacro RXp_MATCH_COPIED RXp_MATCH_COPIED_off RXp_MATCH_COPIED_on
+syn keyword xsMacro RXp_MATCH_TAINTED RXp_MATCH_UTF8 RXp_PAREN_NAMES
+syn keyword xsMacro ReREFCNT_dec ReREFCNT_inc Renew Renewc RsPARA RsRECORD
+syn keyword xsMacro RsSIMPLE RsSNARF SAFE_TRIE_NODENUM SANY SAVEADELETE
+syn keyword xsMacro SAVEBOOL SAVECLEARSV SAVECOMPILEWARNINGS SAVECOMPPAD
+syn keyword xsMacro SAVECOPFILE SAVECOPFILE_FREE SAVECOPLINE SAVECOPSTASH
+syn keyword xsMacro SAVECOPSTASH_FREE SAVEDELETE SAVEDESTRUCTOR
+syn keyword xsMacro SAVEDESTRUCTOR_X SAVEFREECOPHH SAVEFREEOP SAVEFREEPV
+syn keyword xsMacro SAVEFREESV SAVEGENERICPV SAVEGENERICSV SAVEHDELETE
+syn keyword xsMacro SAVEHINTS SAVEI16 SAVEI32 SAVEI8 SAVEINT SAVEIV SAVELONG
+syn keyword xsMacro SAVEMORTALIZESV SAVEOP SAVEPADSVANDMORTALIZE SAVEPARSER
+syn keyword xsMacro SAVEPPTR SAVESETSVFLAGS SAVESHAREDPV SAVESPTR
+syn keyword xsMacro SAVESTACK_ALLOC_FOR_RE_SAVE_STATE SAVESTACK_CXPOS
+syn keyword xsMacro SAVESTACK_POS SAVESWITCHSTACK SAVETMPS SAVEVPTR
+syn keyword xsMacro SAVE_DEFSV SAVE_ERRNO SAVE_MASK SAVE_TIGHT_SHIFT
+syn keyword xsMacro SAVEf_KEEPOLDELEM SAVEf_SETMAGIC SAVEt_ADELETE
+syn keyword xsMacro SAVEt_AELEM SAVEt_ALLOC SAVEt_APTR SAVEt_AV SAVEt_BOOL
+syn keyword xsMacro SAVEt_CLEARSV SAVEt_COMPILE_WARNINGS SAVEt_COMPPAD
+syn keyword xsMacro SAVEt_DELETE SAVEt_DESTRUCTOR SAVEt_DESTRUCTOR_X
+syn keyword xsMacro SAVEt_FREECOPHH SAVEt_FREEOP SAVEt_FREEPV SAVEt_FREESV
+syn keyword xsMacro SAVEt_GENERIC_PVREF SAVEt_GENERIC_SVREF SAVEt_GP
+syn keyword xsMacro SAVEt_GVSV SAVEt_HELEM SAVEt_HINTS SAVEt_HPTR SAVEt_HV
+syn keyword xsMacro SAVEt_I16 SAVEt_I32 SAVEt_I32_SMALL SAVEt_I8 SAVEt_INT
+syn keyword xsMacro SAVEt_INT_SMALL SAVEt_ITEM SAVEt_IV SAVEt_LONG
+syn keyword xsMacro SAVEt_MORTALIZESV SAVEt_NSTAB SAVEt_OP
+syn keyword xsMacro SAVEt_PADSV_AND_MORTALIZE SAVEt_PARSER SAVEt_PPTR
+syn keyword xsMacro SAVEt_REGCONTEXT SAVEt_RE_STATE SAVEt_SAVESWITCHSTACK
+syn keyword xsMacro SAVEt_SET_SVFLAGS SAVEt_SHARED_PVREF SAVEt_SPTR
+syn keyword xsMacro SAVEt_STACK_CXPOS SAVEt_STACK_POS SAVEt_SV SAVEt_SVREF
+syn keyword xsMacro SAVEt_VPTR SBOL SCAN_DEF SCAN_REPL SCAN_TR SCHEDULE
+syn keyword xsMacro SCHED_YIELD SCOPE_SAVES_SIGNAL_MASK SEEK_CUR SEEK_END
+syn keyword xsMacro SEEK_SET SELECT_MIN_BITS SEOL SETERRNO SETGRENT_R_PROTO
+syn keyword xsMacro SETHOSTENT_R_PROTO SETLOCALE_R_PROTO SETNETENT_R_PROTO
+syn keyword xsMacro SETPROTOENT_R_PROTO SETPWENT_R_PROTO SETSERVENT_R_PROTO
+syn keyword xsMacro SETTARG SET_MARK_OFFSET SET_NUMERIC_LOCAL
+syn keyword xsMacro SET_NUMERIC_STANDARD SET_THR SET_THREAD_SELF SETi SETn
+syn keyword xsMacro SETp SETs SETsv SETsvUN SETu SHARP_S_SKIP SHIFTOP
+syn keyword xsMacro SHORTSIZE SH_PATH SIGABRT SIGILL SIG_NAME SIG_NUM
+syn keyword xsMacro SIG_SIZE SINGLE_PAT_MOD SITEARCH SITEARCH_EXP SITELIB
+syn keyword xsMacro SITELIB_EXP SITELIB_STEM SIZE_ALIGN SIZE_ONLY SKIP
+syn keyword xsMacro SKIP_next SKIP_next_fail SLOPPYDIVIDE SOCKET_OPEN_MODE
+syn keyword xsMacro SPACE SPACEA SPACEL SPACEU SPAGAIN SPRINTF_RETURNS_STRLEN
+syn keyword xsMacro SRAND48_R_PROTO SRANDOM_R_PROTO SSCHECK SSGROW SSNEW
+syn keyword xsMacro SSNEWa SSNEWat SSNEWt SSPOPBOOL SSPOPDPTR SSPOPDXPTR
+syn keyword xsMacro SSPOPINT SSPOPIV SSPOPLONG SSPOPPTR SSPOPUV SSPTR SSPTRt
+syn keyword xsMacro SSPUSHBOOL SSPUSHDPTR SSPUSHDXPTR SSPUSHINT SSPUSHIV
+syn keyword xsMacro SSPUSHLONG SSPUSHPTR SSPUSHUV SS_ACCVIO SS_DEVOFFLINE
+syn keyword xsMacro SS_IVCHAN SS_NORMAL ST STANDARD_C STAR STARTPERL
+syn keyword xsMacro START_EXTERN_C START_MY_CXT STATIC STATUS_ALL_FAILURE
+syn keyword xsMacro STATUS_ALL_SUCCESS STATUS_CURRENT STATUS_EXIT
+syn keyword xsMacro STATUS_EXIT_SET STATUS_NATIVE STATUS_NATIVE_CHILD_SET
+syn keyword xsMacro STATUS_UNIX STATUS_UNIX_EXIT_SET STATUS_UNIX_SET STDCHAR
+syn keyword xsMacro STDIO_PTR_LVALUE STDIO_PTR_LVAL_SETS_CNT
+syn keyword xsMacro STDIO_STREAM_ARRAY STD_PAT_MODS STD_PMMOD_FLAGS_CLEAR
+syn keyword xsMacro STMT_END STMT_START STORE_NUMERIC_LOCAL_SET_STANDARD
+syn keyword xsMacro STORE_NUMERIC_STANDARD_SET_LOCAL STRERROR_R_PROTO STRING
+syn keyword xsMacro STRINGIFY STRUCT_OFFSET STRUCT_SV STR_LEN STR_SZ
+syn keyword xsMacro STR_WITH_LEN ST_INO_SIGN ST_INO_SIZE SUB
+syn keyword xsMacro SUBST_TAINT_BOOLRET SUBST_TAINT_PAT SUBST_TAINT_REPL
+syn keyword xsMacro SUBST_TAINT_RETAINT SUBST_TAINT_STR SUBVERSION SUCCEED
+syn keyword xsMacro SUSPEND SVTYPEMASK SV_CATBYTES SV_CATUTF8
+syn keyword xsMacro SV_CHECK_THINKFIRST SV_CHECK_THINKFIRST_COW_DROP
+syn keyword xsMacro SV_CONST_RETURN SV_COW_DROP_PV SV_COW_OTHER_PVS
+syn keyword xsMacro SV_COW_SHARED_HASH_KEYS SV_DO_COW_SVSETSV
+syn keyword xsMacro SV_FORCE_UTF8_UPGRADE SV_GMAGIC SV_HAS_TRAILING_NUL
+syn keyword xsMacro SV_IMMEDIATE_UNREF SV_MUTABLE_RETURN SV_NOSTEAL
+syn keyword xsMacro SV_SAVED_COPY SV_SKIP_OVERLOAD SV_SMAGIC
+syn keyword xsMacro SV_UNDEF_RETURNS_NULL SV_UTF8_NO_ENCODING SVrepl_EVAL
+syn keyword xsMacro SVt_MASK SWITCHSTACK SYMBIAN SYSTEM_GMTIME_MAX
+syn keyword xsMacro SYSTEM_GMTIME_MIN SYSTEM_LOCALTIME_MAX
+syn keyword xsMacro SYSTEM_LOCALTIME_MIN S_IEXEC S_IFIFO S_IFMT S_IREAD
+syn keyword xsMacro S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISBLK
+syn keyword xsMacro S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISLNK S_ISREG S_ISSOCK
+syn keyword xsMacro S_ISUID S_IWGRP S_IWOTH S_IWRITE S_IWUSR S_IXGRP S_IXOTH
+syn keyword xsMacro S_IXUSR S_PAT_MODS Safefree Semctl Sigjmp_buf Siglongjmp
+syn keyword xsMacro Sigsetjmp Size_t_size StGiFy StashHANDLER Stat Strerror
+syn keyword xsMacro Strtol Strtoul StructCopy SvAMAGIC SvAMAGIC_off
+syn keyword xsMacro SvAMAGIC_on SvANY SvCANEXISTDELETE SvCOMPILED
+syn keyword xsMacro SvCOMPILED_off SvCOMPILED_on SvCUR SvCUR_set
+syn keyword xsMacro SvDESTROYABLE SvEND SvEND_set SvENDx SvEVALED
+syn keyword xsMacro SvEVALED_off SvEVALED_on SvFAKE SvFAKE_off SvFAKE_on
+syn keyword xsMacro SvFLAGS SvGAMAGIC SvGETMAGIC SvGMAGICAL SvGMAGICAL_off
+syn keyword xsMacro SvGMAGICAL_on SvGROW SvGROW_mutable SvIMMORTAL SvIOK
+syn keyword xsMacro SvIOK_UV SvIOK_notUV SvIOK_off SvIOK_on SvIOK_only
+syn keyword xsMacro SvIOK_only_UV SvIOKp SvIOKp_on SvIS_FREED SvIV SvIVX
+syn keyword xsMacro SvIVXx SvIV_nomg SvIV_please SvIV_please_nomg SvIV_set
+syn keyword xsMacro SvIVx SvIsCOW SvIsCOW_normal SvIsCOW_shared_hash SvIsUV
+syn keyword xsMacro SvIsUV_off SvIsUV_on SvLEN SvLEN_set SvLENx SvLOCK
+syn keyword xsMacro SvMAGIC SvMAGICAL SvMAGICAL_off SvMAGICAL_on SvMAGIC_set
+syn keyword xsMacro SvNIOK SvNIOK_off SvNIOKp SvNOK SvNOK_off SvNOK_on
+syn keyword xsMacro SvNOK_only SvNOKp SvNOKp_on SvNV SvNVX SvNVXx SvNV_nomg
+syn keyword xsMacro SvNV_set SvNVx SvOBJECT SvOBJECT_off SvOBJECT_on SvOK
+syn keyword xsMacro SvOK_off SvOK_off_exc_UV SvOKp SvOOK SvOOK_off
+syn keyword xsMacro SvOOK_offset SvOOK_on SvOURSTASH SvOURSTASH_set SvPADMY
+syn keyword xsMacro SvPADMY_on SvPADSTALE SvPADSTALE_off SvPADSTALE_on
+syn keyword xsMacro SvPADTMP SvPADTMP_off SvPADTMP_on SvPAD_OUR SvPAD_OUR_on
+syn keyword xsMacro SvPAD_STATE SvPAD_STATE_on SvPAD_TYPED SvPAD_TYPED_on
+syn keyword xsMacro SvPCS_IMPORTED SvPCS_IMPORTED_off SvPCS_IMPORTED_on
+syn keyword xsMacro SvPEEK SvPOK SvPOK_off SvPOK_on SvPOK_only
+syn keyword xsMacro SvPOK_only_UTF8 SvPOKp SvPOKp_on SvPV SvPVX SvPVX_const
+syn keyword xsMacro SvPVX_mutable SvPVXx SvPV_const SvPV_flags
+syn keyword xsMacro SvPV_flags_const SvPV_flags_const_nolen
+syn keyword xsMacro SvPV_flags_mutable SvPV_force SvPV_force_flags
+syn keyword xsMacro SvPV_force_flags_mutable SvPV_force_flags_nolen
+syn keyword xsMacro SvPV_force_mutable SvPV_force_nolen SvPV_force_nomg
+syn keyword xsMacro SvPV_force_nomg_nolen SvPV_free SvPV_mutable SvPV_nolen
+syn keyword xsMacro SvPV_nolen_const SvPV_nomg SvPV_nomg_const
+syn keyword xsMacro SvPV_nomg_const_nolen SvPV_nomg_nolen SvPV_renew SvPV_set
+syn keyword xsMacro SvPV_shrink_to_cur SvPVbyte SvPVbyte_force SvPVbyte_nolen
+syn keyword xsMacro SvPVbytex SvPVbytex_force SvPVbytex_nolen SvPVutf8
+syn keyword xsMacro SvPVutf8_force SvPVutf8_nolen SvPVutf8x SvPVutf8x_force
+syn keyword xsMacro SvPVx SvPVx_const SvPVx_force SvPVx_nolen
+syn keyword xsMacro SvPVx_nolen_const SvREADONLY SvREADONLY_off SvREADONLY_on
+syn keyword xsMacro SvREFCNT SvREFCNT_dec SvREFCNT_inc SvREFCNT_inc_NN
+syn keyword xsMacro SvREFCNT_inc_simple SvREFCNT_inc_simple_NN
+syn keyword xsMacro SvREFCNT_inc_simple_void SvREFCNT_inc_simple_void_NN
+syn keyword xsMacro SvREFCNT_inc_void SvREFCNT_inc_void_NN SvRELEASE_IVX
+syn keyword xsMacro SvRELEASE_IVX_ SvRMAGICAL SvRMAGICAL_off SvRMAGICAL_on
+syn keyword xsMacro SvROK SvROK_off SvROK_on SvRV SvRV_const SvRV_set SvRVx
+syn keyword xsMacro SvRX SvRXOK SvSCREAM SvSCREAM_off SvSCREAM_on SvSETMAGIC
+syn keyword xsMacro SvSHARE SvSHARED_HASH SvSHARED_HEK_FROM_PV SvSMAGICAL
+syn keyword xsMacro SvSMAGICAL_off SvSMAGICAL_on SvSTASH SvSTASH_set
+syn keyword xsMacro SvSetMagicSV SvSetMagicSV_nosteal SvSetSV SvSetSV_and
+syn keyword xsMacro SvSetSV_nosteal SvSetSV_nosteal_and SvTAIL SvTAIL_off
+syn keyword xsMacro SvTAIL_on SvTAINT SvTAINTED SvTAINTED_off SvTAINTED_on
+syn keyword xsMacro SvTEMP SvTEMP_off SvTEMP_on SvTHINKFIRST SvTIED_mg
+syn keyword xsMacro SvTIED_obj SvTRUE SvTRUE_nomg SvTRUEx SvTYPE SvUNLOCK
+syn keyword xsMacro SvUOK SvUPGRADE SvUTF8 SvUTF8_off SvUTF8_on SvUV SvUVX
+syn keyword xsMacro SvUVXx SvUV_nomg SvUV_set SvUVx SvVALID SvVALID_off
+syn keyword xsMacro SvVALID_on SvVOK SvVSTRING_mg SvWEAKREF SvWEAKREF_off
+syn keyword xsMacro SvWEAKREF_on Sv_Grow TAIL TAINT TAINT_ENV TAINT_IF
+syn keyword xsMacro TAINT_NOT TAINT_PROPER THING THR THREAD_CREATE
+syn keyword xsMacro THREAD_CREATE_NEEDS_STACK THREAD_POST_CREATE
+syn keyword xsMacro THREAD_RET_CAST THREAD_RET_TYPE
+syn keyword xsMacro TIED_METHOD_ARGUMENTS_ON_STACK
+syn keyword xsMacro TIED_METHOD_MORTALIZE_NOT_NEEDED TIED_METHOD_SAY
+syn keyword xsMacro TIME64_CONFIG_H TIME64_H TM TMPNAM_R_PROTO TOO_LATE_FOR
+syn keyword xsMacro TOO_LATE_FOR_ TOPBLOCK TOPMARK TOPi TOPl TOPm1s TOPn TOPp
+syn keyword xsMacro TOPp1s TOPpx TOPq TOPs TOPu TOPul TOPuq TRIE TRIEC
+syn keyword xsMacro TRIE_BITMAP TRIE_BITMAP_BYTE TRIE_BITMAP_CLEAR
+syn keyword xsMacro TRIE_BITMAP_SET TRIE_BITMAP_TEST TRIE_CHARCOUNT
+syn keyword xsMacro TRIE_NODEIDX TRIE_NODENUM TRIE_WORDS_OFFSET TRIE_next
+syn keyword xsMacro TRIE_next_fail TTYNAME_R_PROTO TWO_BYTE_UTF8_TO_UNI
+syn keyword xsMacro TYPE_CHARS TYPE_DIGITS Timeval U16SIZE U16TYPE U16_CONST
+syn keyword xsMacro U16_MAX U16_MIN U32SIZE U32TYPE U32_ALIGNMENT_REQUIRED
+syn keyword xsMacro U32_CONST U32_MAX U32_MAX_P1 U32_MAX_P1_HALF U32_MIN
+syn keyword xsMacro U64SIZE U64TYPE U64_CONST U8SIZE U8TYPE U8_MAX U8_MIN
+syn keyword xsMacro UCHARAT UINT32_MIN UINT64_C UINT64_MIN UMINUS UNDERBAR
+syn keyword xsMacro UNICODE_ALLOW_ANY UNICODE_ALLOW_SUPER
+syn keyword xsMacro UNICODE_ALLOW_SURROGATE UNICODE_BYTE_ORDER_MARK
+syn keyword xsMacro UNICODE_DISALLOW_FE_FF
+syn keyword xsMacro UNICODE_DISALLOW_ILLEGAL_INTERCHANGE
+syn keyword xsMacro UNICODE_DISALLOW_NONCHAR UNICODE_DISALLOW_SUPER
+syn keyword xsMacro UNICODE_DISALLOW_SURROGATE
+syn keyword xsMacro UNICODE_GREEK_CAPITAL_LETTER_SIGMA
+syn keyword xsMacro UNICODE_GREEK_SMALL_LETTER_FINAL_SIGMA
+syn keyword xsMacro UNICODE_GREEK_SMALL_LETTER_SIGMA
+syn keyword xsMacro UNICODE_IS_BYTE_ORDER_MARK UNICODE_IS_FE_FF
+syn keyword xsMacro UNICODE_IS_NONCHAR UNICODE_IS_REPLACEMENT
+syn keyword xsMacro UNICODE_IS_SUPER UNICODE_IS_SURROGATE UNICODE_LINE_SEPA_0
+syn keyword xsMacro UNICODE_LINE_SEPA_1 UNICODE_LINE_SEPA_2
+syn keyword xsMacro UNICODE_PARA_SEPA_0 UNICODE_PARA_SEPA_1
+syn keyword xsMacro UNICODE_PARA_SEPA_2 UNICODE_PAT_MOD UNICODE_PAT_MODS
+syn keyword xsMacro UNICODE_REPLACEMENT UNICODE_SURROGATE_FIRST
+syn keyword xsMacro UNICODE_SURROGATE_LAST UNICODE_WARN_FE_FF
+syn keyword xsMacro UNICODE_WARN_ILLEGAL_INTERCHANGE UNICODE_WARN_NONCHAR
+syn keyword xsMacro UNICODE_WARN_SUPER UNICODE_WARN_SURROGATE UNIOP UNIOPSUB
+syn keyword xsMacro UNISKIP UNI_DISPLAY_BACKSLASH UNI_DISPLAY_ISPRINT
+syn keyword xsMacro UNI_DISPLAY_QQ UNI_DISPLAY_REGEX UNI_IS_INVARIANT
+syn keyword xsMacro UNI_TO_NATIVE UNLESS UNLESSM UNLIKELY UNLINK
+syn keyword xsMacro UNLOCK_DOLLARZERO_MUTEX UNTIL USE USE_64_BIT_ALL
+syn keyword xsMacro USE_64_BIT_INT USE_64_BIT_RAWIO USE_64_BIT_STDIO
+syn keyword xsMacro USE_BSDPGRP USE_DYNAMIC_LOADING USE_ENVIRON_ARRAY
+syn keyword xsMacro USE_HASH_SEED USE_HEAP_INSTEAD_OF_STACK USE_LARGE_FILES
+syn keyword xsMacro USE_LEFT USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE
+syn keyword xsMacro USE_LOCALE_NUMERIC USE_PERLIO USE_REENTRANT_API
+syn keyword xsMacro USE_SEMCTL_SEMID_DS USE_SEMCTL_SEMUN USE_STAT_BLOCKS
+syn keyword xsMacro USE_STAT_RDEV USE_STDIO USE_STDIO_BASE USE_STDIO_PTR
+syn keyword xsMacro USE_STRUCT_COPY USE_SYSTEM_GMTIME USE_SYSTEM_LOCALTIME
+syn keyword xsMacro USE_THREADS USE_TM64 USE_UTF8_IN_NAMES UTF8SKIP
+syn keyword xsMacro UTF8_ACCUMULATE UTF8_ALLOW_ANY UTF8_ALLOW_ANYUV
+syn keyword xsMacro UTF8_ALLOW_CONTINUATION UTF8_ALLOW_DEFAULT
+syn keyword xsMacro UTF8_ALLOW_EMPTY UTF8_ALLOW_FFFF UTF8_ALLOW_LONG
+syn keyword xsMacro UTF8_ALLOW_NON_CONTINUATION UTF8_ALLOW_SHORT
+syn keyword xsMacro UTF8_ALLOW_SURROGATE UTF8_CHECK_ONLY UTF8_DISALLOW_FE_FF
+syn keyword xsMacro UTF8_DISALLOW_ILLEGAL_INTERCHANGE UTF8_DISALLOW_NONCHAR
+syn keyword xsMacro UTF8_DISALLOW_SUPER UTF8_DISALLOW_SURROGATE
+syn keyword xsMacro UTF8_EIGHT_BIT_HI UTF8_EIGHT_BIT_LO
+syn keyword xsMacro UTF8_FIRST_PROBLEMATIC_CODE_POINT_FIRST_BYTE
+syn keyword xsMacro UTF8_IS_CONTINUATION UTF8_IS_CONTINUED
+syn keyword xsMacro UTF8_IS_DOWNGRADEABLE_START UTF8_IS_INVARIANT
+syn keyword xsMacro UTF8_IS_NONCHAR_
+syn keyword xsMacro UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC
+syn keyword xsMacro UTF8_IS_START UTF8_IS_SUPER UTF8_IS_SURROGATE
+syn keyword xsMacro UTF8_MAXBYTES UTF8_MAXBYTES_CASE UTF8_MAXLEN
+syn keyword xsMacro UTF8_MAX_FOLD_CHAR_EXPAND UTF8_QUAD_MAX UTF8_TWO_BYTE_HI
+syn keyword xsMacro UTF8_TWO_BYTE_HI_nocast UTF8_TWO_BYTE_LO
+syn keyword xsMacro UTF8_TWO_BYTE_LO_nocast UTF8_WARN_FE_FF
+syn keyword xsMacro UTF8_WARN_ILLEGAL_INTERCHANGE UTF8_WARN_NONCHAR
+syn keyword xsMacro UTF8_WARN_SUPER UTF8_WARN_SURROGATE
+syn keyword xsMacro UTF_ACCUMULATION_OVERFLOW_MASK UTF_ACCUMULATION_SHIFT
+syn keyword xsMacro UTF_CONTINUATION_MARK UTF_CONTINUATION_MASK
+syn keyword xsMacro UTF_START_MARK UTF_START_MASK UTF_TO_NATIVE UVSIZE UVTYPE
+syn keyword xsMacro UVXf UV_DIG UV_MAX UV_MAX_P1 UV_MAX_P1_HALF UV_MIN UVf
+syn keyword xsMacro U_32 U_I U_L U_S U_V Uid_t_f Uid_t_sign Uid_t_size
+syn keyword xsMacro VAL_EAGAIN VAL_O_NONBLOCK VDf VERB VERTWS VOIDFLAGS
+syn keyword xsMacro VOIDUSED VOL VTBL_amagic VTBL_amagicelem VTBL_arylen
+syn keyword xsMacro VTBL_bm VTBL_collxfrm VTBL_dbline VTBL_defelem VTBL_env
+syn keyword xsMacro VTBL_envelem VTBL_fm VTBL_glob VTBL_isa VTBL_isaelem
+syn keyword xsMacro VTBL_mglob VTBL_nkeys VTBL_pack VTBL_packelem VTBL_pos
+syn keyword xsMacro VTBL_regdata VTBL_regdatum VTBL_regexp VTBL_sigelem
+syn keyword xsMacro VTBL_substr VTBL_sv VTBL_taint VTBL_uvar VTBL_vec
+syn keyword xsMacro WARN_ALL WARN_ALLstring WARN_AMBIGUOUS WARN_BAREWORD
+syn keyword xsMacro WARN_CLOSED WARN_CLOSURE WARN_DEBUGGING WARN_DEPRECATED
+syn keyword xsMacro WARN_DIGIT WARN_EXEC WARN_EXITING WARN_GLOB
+syn keyword xsMacro WARN_ILLEGALPROTO WARN_IMPRECISION WARN_INPLACE
+syn keyword xsMacro WARN_INTERNAL WARN_IO WARN_LAYER WARN_MALLOC WARN_MISC
+syn keyword xsMacro WARN_NEWLINE WARN_NONCHAR WARN_NONEstring
+syn keyword xsMacro WARN_NON_UNICODE WARN_NUMERIC WARN_ONCE WARN_OVERFLOW
+syn keyword xsMacro WARN_PACK WARN_PARENTHESIS WARN_PIPE WARN_PORTABLE
+syn keyword xsMacro WARN_PRECEDENCE WARN_PRINTF WARN_PROTOTYPE WARN_QW
+syn keyword xsMacro WARN_RECURSION WARN_REDEFINE WARN_REGEXP WARN_RESERVED
+syn keyword xsMacro WARN_SEMICOLON WARN_SEVERE WARN_SIGNAL WARN_SUBSTR
+syn keyword xsMacro WARN_SURROGATE WARN_SYNTAX WARN_TAINT WARN_THREADS
+syn keyword xsMacro WARN_UNINITIALIZED WARN_UNOPENED WARN_UNPACK WARN_UNTIE
+syn keyword xsMacro WARN_UTF8 WARN_VOID WARNshift WARNsize WEXITSTATUS WHEN
+syn keyword xsMacro WHILE WHILEM WHILEM_A_max WHILEM_A_max_fail WHILEM_A_min
+syn keyword xsMacro WHILEM_A_min_fail WHILEM_A_pre WHILEM_A_pre_fail
+syn keyword xsMacro WHILEM_B_max WHILEM_B_max_fail WHILEM_B_min
+syn keyword xsMacro WHILEM_B_min_fail WIDEST_UTYPE WIFEXITED WIFSIGNALED
+syn keyword xsMacro WIFSTOPPED WIN32SCK_IS_STDSCK WNOHANG WORD WSTOPSIG
+syn keyword xsMacro WTERMSIG WUNTRACED XHvTOTALKEYS XOPd_xop_class
+syn keyword xsMacro XOPd_xop_desc XOPd_xop_name XOPd_xop_peep XOPf_xop_class
+syn keyword xsMacro XOPf_xop_desc XOPf_xop_name XOPf_xop_peep XPUSHTARG
+syn keyword xsMacro XPUSHi XPUSHmortal XPUSHn XPUSHp XPUSHs XPUSHu XPUSHundef
+syn keyword xsMacro XS XSANY XSINTERFACE_CVT XSINTERFACE_CVT_ANON
+syn keyword xsMacro XSINTERFACE_FUNC XSINTERFACE_FUNC_SET XSPROTO XSRETURN
+syn keyword xsMacro XSRETURN_EMPTY XSRETURN_IV XSRETURN_NO XSRETURN_NV
+syn keyword xsMacro XSRETURN_PV XSRETURN_PVN XSRETURN_UNDEF XSRETURN_UV
+syn keyword xsMacro XSRETURN_YES XST_mIV XST_mNO XST_mNV XST_mPV XST_mPVN
+syn keyword xsMacro XST_mUNDEF XST_mUV XST_mYES XS_APIVERSION_BOOTCHECK
+syn keyword xsMacro XS_DYNAMIC_FILENAME XS_EXTERNAL XS_INTERNAL
+syn keyword xsMacro XS_VERSION_BOOTCHECK XSprePUSH XTENDED_PAT_MOD XopDISABLE
+syn keyword xsMacro XopENABLE XopENTRY XopENTRY_set XopFLAGS YADAYADA YIELD
+syn keyword xsMacro YYEMPTY YYSTYPE_IS_DECLARED YYSTYPE_IS_TRIVIAL
+syn keyword xsMacro YYTOKENTYPE Zero ZeroD _ _CANNOT _CC_ALNUMC_A
+syn keyword xsMacro _CC_ALNUMC_L1 _CC_ALPHA_A _CC_ALPHA_L1 _CC_BLANK_A
+syn keyword xsMacro _CC_BLANK_L1 _CC_CHARNAME_CONT _CC_CNTRL_A _CC_CNTRL_L1
+syn keyword xsMacro _CC_DIGIT_A _CC_GRAPH_A _CC_GRAPH_L1 _CC_IDFIRST_A
+syn keyword xsMacro _CC_IDFIRST_L1 _CC_LOWER_A _CC_LOWER_L1
+syn keyword xsMacro _CC_NONLATIN1_FOLD _CC_OCTAL_A _CC_PRINT_A _CC_PRINT_L1
+syn keyword xsMacro _CC_PSXSPC_A _CC_PSXSPC_L1 _CC_PUNCT_A _CC_PUNCT_L1
+syn keyword xsMacro _CC_QUOTEMETA _CC_SPACE_A _CC_SPACE_L1 _CC_UPPER_A
+syn keyword xsMacro _CC_UPPER_L1 _CC_WORDCHAR_A _CC_WORDCHAR_L1 _CC_XDIGIT_A
+syn keyword xsMacro _CPERLarg _GNU_SOURCE
+syn keyword xsMacro _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C
+syn keyword xsMacro _INC_PERL_XSUB_H _PERLIOL_H _PERLIO_H _PERL_OBJECT_THIS
+syn keyword xsMacro _REGEXP_COMMON _RXf_PMf_CHARSET_SHIFT _RXf_PMf_SHIFT_NEXT
+syn keyword xsMacro _SOCKADDR_LEN _STDIO_H _STDIO_INCLUDED _V _XPVCV_COMMON
+syn keyword xsMacro _XPV_HEAD __Inc__IPerl___ __PATCHLEVEL_H_INCLUDED__
+syn keyword xsMacro __STDIO_LOADED __attribute__deprecated__
+syn keyword xsMacro __attribute__format__ __attribute__format__null_ok__
+syn keyword xsMacro __attribute__malloc__ __attribute__nonnull__
+syn keyword xsMacro __attribute__noreturn__ __attribute__pure__
+syn keyword xsMacro __attribute__unused__ __attribute__warn_unused_result__
+syn keyword xsMacro __filbuf __flsbuf __perlapi_h__ _config_h_ _exit _filbuf
+syn keyword xsMacro _flsbuf _isQUOTEMETA _stdopen _swab_16_ _swab_32_
+syn keyword xsMacro _swab_64_ aTHXo aTHXo_ aTHXx aTHXx_ abort accept access
+syn keyword xsMacro anchored_end_shift anchored_offset anchored_substr
+syn keyword xsMacro anchored_utf8 asctime assert assert_not_ROK
+syn keyword xsMacro assert_not_glob atoll bcmp bind blk_eval blk_format
+syn keyword xsMacro blk_gimme blk_givwhen blk_loop blk_oldcop blk_oldmarksp
+syn keyword xsMacro blk_oldpm blk_oldscopesp blk_oldsp blk_sub blk_u16 boolSV
+syn keyword xsMacro cBINOP cBINOPo cBINOPx cBOOL cCOP cCOPo cCOPx cGVOP_gv
+syn keyword xsMacro cGVOPo_gv cGVOPx_gv cLISTOP cLISTOPo cLISTOPx cLOGOP
+syn keyword xsMacro cLOGOPo cLOGOPx cLOOP cLOOPo cLOOPx cPADOP cPADOPo
+syn keyword xsMacro cPADOPx cPMOP cPMOPo cPMOPx cPVOP cPVOPo cPVOPx cSVOP
+syn keyword xsMacro cSVOP_sv cSVOPo cSVOPo_sv cSVOPx cSVOPx_sv cSVOPx_svp
+syn keyword xsMacro cUNOP cUNOPo cUNOPx chdir check_end_shift
+syn keyword xsMacro check_offset_max check_offset_min check_substr check_utf8
+syn keyword xsMacro child_offset_bits chmod chsize ckDEAD ckWARN ckWARN2
+syn keyword xsMacro ckWARN2_d ckWARN3 ckWARN3_d ckWARN4 ckWARN4_d ckWARN_d
+syn keyword xsMacro close closedir connect cop_hints_2hv cop_hints_fetch_pv
+syn keyword xsMacro cop_hints_fetch_pvn cop_hints_fetch_pvs
+syn keyword xsMacro cop_hints_fetch_sv cophh_2hv cophh_copy cophh_delete_pv
+syn keyword xsMacro cophh_delete_pvn cophh_delete_pvs cophh_delete_sv
+syn keyword xsMacro cophh_fetch_pv cophh_fetch_pvn cophh_fetch_pvs
+syn keyword xsMacro cophh_fetch_sv cophh_free cophh_new_empty cophh_store_pv
+syn keyword xsMacro cophh_store_pvn cophh_store_pvs cophh_store_sv crypt
+syn keyword xsMacro ctermid ctime cv_ckproto cx_type cxstack cxstack_ix
+syn keyword xsMacro cxstack_max dATARGET dAX dAXMARK dEXT dEXTCONST dITEMS
+syn keyword xsMacro dJMPENV dMARK dMULTICALL dMY_CXT dMY_CXT_INTERP
+syn keyword xsMacro dMY_CXT_SV dNOOP dORIGMARK dPOPPOPiirl dPOPPOPnnrl
+syn keyword xsMacro dPOPPOPssrl dPOPTOPiirl dPOPTOPiirl_nomg
+syn keyword xsMacro dPOPTOPiirl_ul_nomg dPOPTOPnnrl dPOPTOPnnrl_nomg
+syn keyword xsMacro dPOPTOPssrl dPOPXiirl dPOPXiirl_ul_nomg dPOPXnnrl
+syn keyword xsMacro dPOPXssrl dPOPiv dPOPnv dPOPnv_nomg dPOPqv dPOPss dPOPuqv
+syn keyword xsMacro dPOPuv dSAVEDERRNO dSAVE_ERRNO dSP dTARG dTARGET
+syn keyword xsMacro dTARGETSTACKED dTHR dTHX dTHXa dTHXo dTHXoa dTHXs dTHXx
+syn keyword xsMacro dTOPiv dTOPnv dTOPqv dTOPss dTOPuqv dTOPuv dUNDERBAR dVAR
+syn keyword xsMacro dXSARGS dXSFUNCTION dXSI32 dXSTARG dXSUB_SYS deprecate
+syn keyword xsMacro djSP do_open drand48 dup dup2 endgrent endhostent
+syn keyword xsMacro endnetent endprotoent endpwent endservent environ execl
+syn keyword xsMacro execv execvp fcntl fd_set fdopen fileno float_end_shift
+syn keyword xsMacro float_max_offset float_min_offset float_substr float_utf8
+syn keyword xsMacro flock flockfile foldEQ_utf8 frewind fscanf fstat ftell
+syn keyword xsMacro ftruncate ftrylockfile funlockfile fwrite1 generic_uni
+syn keyword xsMacro generic_utf8 get_cvs getc_unlocked getegid geteuid getgid
+syn keyword xsMacro getgrent getgrgid getgrnam gethostbyaddr gethostbyname
+syn keyword xsMacro gethostent gethostname getlogin getnetbyaddr getnetbyname
+syn keyword xsMacro getnetent getpeername getpid getprotobyname
+syn keyword xsMacro getprotobynumber getprotoent getpwent getpwnam getpwuid
+syn keyword xsMacro getservbyname getservbyport getservent getsockname
+syn keyword xsMacro getsockopt getspnam gettimeofday getuid getw gv_AVadd
+syn keyword xsMacro gv_HVadd gv_IOadd gv_SVadd gv_autoload4 gv_efullname3
+syn keyword xsMacro gv_fetchmeth gv_fetchmeth_autoload gv_fetchmethod
+syn keyword xsMacro gv_fetchmethod_flags gv_fetchpvn gv_fetchpvs
+syn keyword xsMacro gv_fetchsv_nomg gv_fullname3 gv_init gv_stashpvs htoni
+syn keyword xsMacro htonl htons htovl htovs hv_delete hv_delete_ent hv_exists
+syn keyword xsMacro hv_exists_ent hv_fetch hv_fetch_ent hv_fetchs hv_iternext
+syn keyword xsMacro hv_magic hv_store hv_store_ent hv_store_flags hv_stores
+syn keyword xsMacro hv_undef ibcmp ibcmp_locale ibcmp_utf8 inet_addr
+syn keyword xsMacro inet_ntoa init_os_extras init_thread_intern ioctl isALNUM
+syn keyword xsMacro isALNUMC isALNUMC_A isALNUMC_L1 isALNUMC_LC
+syn keyword xsMacro isALNUMC_LC_utf8 isALNUMU isALNUM_LC isALNUM_LC_utf8
+syn keyword xsMacro isALNUM_LC_uvchr isALNUM_lazy isALNUM_lazy_if isALNUM_uni
+syn keyword xsMacro isALNUM_utf8 isALPHA isALPHAU isALPHA_A isALPHA_L1
+syn keyword xsMacro isALPHA_LC isALPHA_LC_utf8 isALPHA_LC_uvchr isALPHA_uni
+syn keyword xsMacro isALPHA_utf8 isASCII isASCII_A isASCII_L1 isASCII_LC
+syn keyword xsMacro isASCII_uni isASCII_utf8 isBLANK isBLANK_A isBLANK_L1
+syn keyword xsMacro isBLANK_LC isBLANK_LC_uni isBLANK_LC_utf8 isBLANK_uni
+syn keyword xsMacro isBLANK_utf8 isCHARNAME_CONT isCNTRL isCNTRL_A isCNTRL_L1
+syn keyword xsMacro isCNTRL_LC isCNTRL_LC_utf8 isCNTRL_LC_uvchr isCNTRL_uni
+syn keyword xsMacro isCNTRL_utf8 isDIGIT isDIGIT_A isDIGIT_L1 isDIGIT_LC
+syn keyword xsMacro isDIGIT_LC_utf8 isDIGIT_LC_uvchr isDIGIT_uni isDIGIT_utf8
+syn keyword xsMacro isGRAPH isGRAPH_A isGRAPH_L1 isGRAPH_LC isGRAPH_LC_utf8
+syn keyword xsMacro isGRAPH_LC_uvchr isGRAPH_uni isGRAPH_utf8 isGV
+syn keyword xsMacro isGV_with_GP isGV_with_GP_off isGV_with_GP_on
+syn keyword xsMacro isIDCONT_utf8 isIDFIRST isIDFIRST_A isIDFIRST_L1
+syn keyword xsMacro isIDFIRST_LC isIDFIRST_LC_utf8 isIDFIRST_LC_uvchr
+syn keyword xsMacro isIDFIRST_lazy isIDFIRST_lazy_if isIDFIRST_uni
+syn keyword xsMacro isIDFIRST_utf8 isLEXWARN_off isLEXWARN_on isLOWER
+syn keyword xsMacro isLOWER_A isLOWER_L1 isLOWER_LC isLOWER_LC_utf8
+syn keyword xsMacro isLOWER_LC_uvchr isLOWER_uni isLOWER_utf8 isOCTAL
+syn keyword xsMacro isOCTAL_A isOCTAL_L1 isPRINT isPRINT_A isPRINT_L1
+syn keyword xsMacro isPRINT_LC isPRINT_LC_utf8 isPRINT_LC_uvchr isPRINT_uni
+syn keyword xsMacro isPRINT_utf8 isPSXSPC isPSXSPC_A isPSXSPC_L1 isPSXSPC_LC
+syn keyword xsMacro isPSXSPC_LC_uni isPSXSPC_LC_utf8 isPSXSPC_uni
+syn keyword xsMacro isPSXSPC_utf8 isPUNCT isPUNCT_A isPUNCT_L1 isPUNCT_LC
+syn keyword xsMacro isPUNCT_LC_utf8 isPUNCT_LC_uvchr isPUNCT_uni isPUNCT_utf8
+syn keyword xsMacro isSPACE isSPACE_A isSPACE_L1 isSPACE_LC isSPACE_LC_utf8
+syn keyword xsMacro isSPACE_LC_uvchr isSPACE_uni isSPACE_utf8 isUPPER
+syn keyword xsMacro isUPPER_A isUPPER_L1 isUPPER_LC isUPPER_LC_utf8
+syn keyword xsMacro isUPPER_LC_uvchr isUPPER_uni isUPPER_utf8 isWARN_ONCE
+syn keyword xsMacro isWARN_on isWARNf_on isWORDCHAR isWORDCHAR_A
+syn keyword xsMacro isWORDCHAR_L1 isXDIGIT isXDIGIT_A isXDIGIT_L1
+syn keyword xsMacro isXDIGIT_uni isXDIGIT_utf8 is_HORIZWS is_HORIZWS_cp
+syn keyword xsMacro is_HORIZWS_latin1 is_HORIZWS_latin1_safe is_HORIZWS_safe
+syn keyword xsMacro is_HORIZWS_utf8 is_HORIZWS_utf8_safe is_LAX_VERSION
+syn keyword xsMacro is_LNBREAK is_LNBREAK_latin1 is_LNBREAK_latin1_safe
+syn keyword xsMacro is_LNBREAK_safe is_LNBREAK_utf8 is_LNBREAK_utf8_safe
+syn keyword xsMacro is_STRICT_VERSION is_TRICKYFOLD is_TRICKYFOLD_cp
+syn keyword xsMacro is_TRICKYFOLD_safe is_VERTWS is_VERTWS_cp
+syn keyword xsMacro is_VERTWS_latin1 is_VERTWS_latin1_safe is_VERTWS_safe
+syn keyword xsMacro is_VERTWS_utf8 is_VERTWS_utf8_safe is_utf8_string_loc
+syn keyword xsMacro isatty kBINOP kCOP kGVOP_gv kLISTOP kLOGOP kLOOP kPADOP
+syn keyword xsMacro kPMOP kPVOP kSVOP kSVOP_sv kUNOP kill killpg
+syn keyword xsMacro lex_stuff_pvs link listen lockf longjmp lseek lstat
+syn keyword xsMacro mPUSHi mPUSHn mPUSHp mPUSHs mPUSHu mXPUSHi mXPUSHn
+syn keyword xsMacro mXPUSHp mXPUSHs mXPUSHu memEQ memEQs memNE memNEs memchr
+syn keyword xsMacro memcmp memzero mkdir mktemp my my_betoh16 my_betoh32
+syn keyword xsMacro my_betoh64 my_betohi my_betohl my_betohn my_betohs
+syn keyword xsMacro my_binmode my_htobe16 my_htobe32 my_htobe64 my_htobei
+syn keyword xsMacro my_htobel my_htoben my_htobes my_htole16 my_htole32
+syn keyword xsMacro my_htole64 my_htolei my_htolel my_htolen my_htoles
+syn keyword xsMacro my_letoh16 my_letoh32 my_letoh64 my_letohi my_letohl
+syn keyword xsMacro my_letohn my_letohs my_lstat my_snprintf my_sprintf
+syn keyword xsMacro my_stat my_strlcat my_strlcpy my_vsnprintf newAV newGVgen
+syn keyword xsMacro newHV newIO newRV_inc newSUB newSVpvn_utf8 newSVpvs
+syn keyword xsMacro newSVpvs_flags newSVpvs_share newXSproto ntohi ntohl
+syn keyword xsMacro ntohs opASSIGN op_getmad op_lvalue open opendir pTHX_1
+syn keyword xsMacro pTHX_2 pTHX_3 pTHX_4 pTHX_5 pTHX_6 pTHX_7 pTHX_8 pTHX_9
+syn keyword xsMacro pTHX_FORMAT pTHX_VALUE pTHX_VALUE_ pTHX__FORMAT
+syn keyword xsMacro pTHX__VALUE pTHX__VALUE_ pTHXo pTHXo_ pTHXx pTHXx_ pVAR
+syn keyword xsMacro pWARN_ALL pWARN_NONE pWARN_STD packWARN packWARN2
+syn keyword xsMacro packWARN3 packWARN4 pad_add_name_pvs pad_findmy_pvs
+syn keyword xsMacro pad_peg padadd_NO_DUP_CHECK padadd_OUR padadd_STATE
+syn keyword xsMacro padadd_UTF8_NAME padnew_CLONE padnew_SAVE padnew_SAVESUB
+syn keyword xsMacro panic_write2 pause pclose pipe popen prepare_SV_for_RV
+syn keyword xsMacro pthread_attr_init pthread_condattr_default pthread_create
+syn keyword xsMacro pthread_key_create pthread_keycreate
+syn keyword xsMacro pthread_mutexattr_default pthread_mutexattr_init
+syn keyword xsMacro pthread_mutexattr_settype putc_unlocked putenv putw
+syn keyword xsMacro random read readdir readdir64 recv recvfrom ref
+syn keyword xsMacro refcounted_he_fetch_pvs refcounted_he_new_pvs rename
+syn keyword xsMacro rewinddir rmdir sTHX safecalloc safefree safemalloc
+syn keyword xsMacro saferealloc save_aelem save_freeop save_freepv
+syn keyword xsMacro save_freesv save_helem save_mortalizesv save_op savepvs
+syn keyword xsMacro savesharedpvs sb_dstr sb_iters sb_m sb_maxiters
+syn keyword xsMacro sb_oldsave sb_orig sb_rflags sb_rx sb_rxres sb_rxtainted
+syn keyword xsMacro sb_s sb_strend sb_targ seedDrand01 seekdir select send
+syn keyword xsMacro sendto setbuf setgid setgrent sethostent setjmp
+syn keyword xsMacro setlinebuf setlocale setmode setnetent setprotoent
+syn keyword xsMacro setpwent setregid setreuid setservent setsockopt setuid
+syn keyword xsMacro setvbuf share_hek_hek sharepvn shutdown signal sleep
+syn keyword xsMacro socket socketpair specialWARN srand48 srandom stat
+syn keyword xsMacro stdoutf strEQ strGE strGT strLE strLT strNE strchr
+syn keyword xsMacro strerror stringify stringify_immed strnEQ strnNE strrchr
+syn keyword xsMacro strtoll strtoull sv_2bool sv_2iv sv_2nv sv_2pv
+syn keyword xsMacro sv_2pv_nolen sv_2pv_nomg sv_2pvbyte_nolen
+syn keyword xsMacro sv_2pvutf8_nolen sv_2uv sv_catpv_nomg sv_catpvn
+syn keyword xsMacro sv_catpvn_mg sv_catpvn_nomg sv_catpvn_utf8_upgrade
+syn keyword xsMacro sv_catpvs sv_catpvs_flags sv_catpvs_mg sv_catpvs_nomg
+syn keyword xsMacro sv_catsv sv_catsv_mg sv_catsv_nomg sv_catxmlpvs sv_cmp
+syn keyword xsMacro sv_cmp_locale sv_collxfrm sv_eq sv_force_normal sv_insert
+syn keyword xsMacro sv_nolocking sv_nounlocking sv_pv sv_pvbyte sv_pvn_force
+syn keyword xsMacro sv_pvn_force_nomg sv_pvutf8 sv_setpvs sv_setpvs_mg
+syn keyword xsMacro sv_setref_pvs sv_setsv sv_setsv_nomg sv_taint sv_unref
+syn keyword xsMacro sv_usepvn sv_usepvn_mg sv_utf8_upgrade
+syn keyword xsMacro sv_utf8_upgrade_flags sv_utf8_upgrade_nomg tTHX telldir
+syn keyword xsMacro times tmpfile tmpnam toCTRL toFOLD_uni toLOWER
+syn keyword xsMacro toLOWER_LATIN1 toLOWER_LC toLOWER_uni toLOWER_utf8
+syn keyword xsMacro toTITLE_uni toTITLE_utf8 toUPPER toUPPER_LATIN1_MOD
+syn keyword xsMacro toUPPER_LC toUPPER_uni toUPPER_utf8 to_uni_fold
+syn keyword xsMacro to_utf8_fold to_utf8_lower to_utf8_title to_utf8_upper
+syn keyword xsMacro truncate tryAMAGICbin_MG tryAMAGICunDEREF
+syn keyword xsMacro tryAMAGICunTARGET tryAMAGICun_MG ttyname umask uname
+syn keyword xsMacro unlink unpackWARN1 unpackWARN2 unpackWARN3 unpackWARN4
+syn keyword xsMacro utf8n_to_uvchr utime uvchr_to_utf8 uvuni_to_utf8 vTHX
+syn keyword xsMacro vfprintf vtohl vtohs wait want_vtbl_bm want_vtbl_fm
+syn keyword xsMacro what_TRICKYFOLD what_TRICKYFOLD_safe what_len_TRICKYFOLD
+syn keyword xsMacro what_len_TRICKYFOLD_safe whichsig write xio_any xio_dirp
+syn keyword xsMacro xiv_iv xuv_uv yystype
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_xs_syntax_inits")
+  if version < 508
+    let did_xs_syntax_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink xsPrivate    Error
+  HiLink xsSuperseded Error
+  HiLink xsType       Type
+  HiLink xsString     String
+  HiLink xsConstant   Constant
+  HiLink xsException  Exception
+  HiLink xsKeyword    Keyword
+  HiLink xsFunction   Function
+  HiLink xsVariable   Identifier
+  HiLink xsMacro      Macro
+
+  delcommand HiLink
+endif
 
 let b:current_syntax = "xs"
 
index c3916d0..3da7ffc 100644 (file)
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:    Yacc
-" Maintainer:  Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change: Aug 2, 2010
-" Version:     8
+" Maintainer:  Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change: Nov 14, 2012
+" Version:     10
 " URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Options: {{{1
@@ -20,37 +20,44 @@ endif
 " ---------------------------------------------------------------------
 "  Folding Support {{{1
 if has("folding")
- com! -nargs=+ HiFold  <args> fold
+ com! -nargs=+ SynFold <args> fold
 else
- com! -nargs=+ HiFold  <args>
+ com! -nargs=+ SynFold <args>
 endif
 
 " ---------------------------------------------------------------------
 " Read the C syntax to start with {{{1
-if exists("g:yacc_uses_cpp")
- syn include @yaccCode <sfile>:p:h/cpp.vim
-else
- syn include @yaccCode <sfile>:p:h/c.vim
+" Read the C/C++ syntax to start with
+let s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:yacc_uses_cpp")? "/cpp.vim" : "/c.vim"))
+if !filereadable(s:Cpath)
+ for s:Cpath in split(globpath(&rtp,(exists("g:yacc_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n")
+  if filereadable(fnameescape(s:Cpath))
+   let s:Cpath= fnameescape(s:Cpath)
+   break
+  endif
+ endfor
 endif
+exe "syn include @yaccCode ".s:Cpath
 
 " ---------------------------------------------------------------------
 "  Yacc Clusters: {{{1
-syn cluster yaccInitCluster    contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam
+syn cluster yaccInitCluster    contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam,yaccParseOption
 syn cluster yaccRulesCluster   contains=yaccNonterminal,yaccString
 
 " ---------------------------------------------------------------------
 "  Yacc Sections: {{{1
-HiFold syn     region  yaccInit        start='.'ms=s-1,rs=s-1  matchgroup=yaccSectionSep       end='^%%$'me=e-2,re=e-2 contains=@yaccInitCluster       nextgroup=yaccRules     skipwhite skipempty contained
-HiFold syn     region  yaccInit2      start='\%^.'ms=s-1,rs=s-1        matchgroup=yaccSectionSep       end='^%%$'me=e-2,re=e-2 contains=@yaccInitCluster       nextgroup=yaccRules     skipwhite skipempty
-HiFold syn     region  yaccHeader2     matchgroup=yaccSep      start="^\s*\zs%{"       end="^\s*%}"            contains=@yaccCode      nextgroup=yaccInit      skipwhite skipempty contained
-HiFold syn     region  yaccHeader      matchgroup=yaccSep      start="^\s*\zs%{"       end="^\s*%}"            contains=@yaccCode      nextgroup=yaccInit      skipwhite skipempty
-HiFold syn     region  yaccRules       matchgroup=yaccSectionSep       start='^%%$'            end='^%%$'me=e-2,re=e-2 contains=@yaccRulesCluster      nextgroup=yaccEndCode   skipwhite skipempty contained
-HiFold syn     region  yaccEndCode     matchgroup=yaccSectionSep       start='^%%$'            end='\%$'               contains=@yaccCode      contained
+SynFold syn    region  yaccInit        start='.'ms=s-1,rs=s-1  matchgroup=yaccSectionSep       end='^%%$'me=e-2,re=e-2 contains=@yaccInitCluster       nextgroup=yaccRules     skipwhite skipempty contained
+SynFold syn    region  yaccInit2      start='\%^.'ms=s-1,rs=s-1        matchgroup=yaccSectionSep       end='^%%$'me=e-2,re=e-2 contains=@yaccInitCluster       nextgroup=yaccRules     skipwhite skipempty
+SynFold syn    region  yaccHeader2     matchgroup=yaccSep      start="^\s*\zs%{"       end="^\s*%}"            contains=@yaccCode      nextgroup=yaccInit      skipwhite skipempty contained
+SynFold syn    region  yaccHeader      matchgroup=yaccSep      start="^\s*\zs%{"       end="^\s*%}"            contains=@yaccCode      nextgroup=yaccInit      skipwhite skipempty
+SynFold syn    region  yaccRules       matchgroup=yaccSectionSep       start='^%%$'            end='^%%$'me=e-2,re=e-2 contains=@yaccRulesCluster      nextgroup=yaccEndCode   skipwhite skipempty contained
+SynFold syn    region  yaccEndCode     matchgroup=yaccSectionSep       start='^%%$'            end='\%$'               contains=@yaccCode      contained
 
 " ---------------------------------------------------------------------
 " Yacc Commands: {{{1
 syn    match   yaccDefines     '^%define\s\+.*$'
-syn    match   yaccParseParam  '%parse-param\>'        skipwhite       nextgroup=yaccParseParamStr
+syn    match   yaccParseParam  '%\(parse\|lex\)-param\>'               skipwhite       nextgroup=yaccParseParamStr
+syn    match   yaccParseOption '%\%(api\.pure\|pure-parser\|locations\|error-verbose\)\>'
 syn    region  yaccParseParamStr       contained matchgroup=Delimiter  start='{'       end='}' contains=cStructure
 
 syn    match   yaccDelim       "[:|]"  contained
@@ -62,11 +69,11 @@ syn match   yaccKey "\$\(<[a-zA-Z_][a-zA-Z_0-9]*>\)\=[\$0-9]\+"     contained
 syn    keyword yaccKeyActn     yyerrok yyclearin       contained
 
 syn    match   yaccUnionStart  "^%union"       skipwhite skipnl nextgroup=yaccUnion    contained
-HiFold syn     region  yaccUnion       matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode  contained
+SynFold syn    region  yaccUnion       matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode  contained
 syn    match   yaccBrkt        "[<>]"  contained
 syn    match   yaccType        "<[a-zA-Z_][a-zA-Z0-9_]*>"      contains=yaccBrkt       contained
 
-HiFold syn     region  yaccNonterminal start="^\s*\a\w*\ze\_s*\(/\*\_.\{-}\*/\)\=\_s*:"        matchgroup=yaccDelim end=";"    matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=yaccAction,yaccDelim,yaccString,yaccComment  contained
+SynFold syn    region  yaccNonterminal start="^\s*\a\w*\ze\_s*\(/\*\_.\{-}\*/\)\=\_s*:"        matchgroup=yaccDelim end=";"    matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=yaccAction,yaccDelim,yaccString,yaccComment  contained
 syn    region  yaccComment     start="/\*"     end="\*/"
 syn    match   yaccString      "'[^']*'"       contained
 
@@ -74,7 +81,8 @@ syn   match   yaccString      "'[^']*'"       contained
 " ---------------------------------------------------------------------
 " I'd really like to highlight just the outer {}.  Any suggestions??? {{{1
 syn    match   yaccCurlyError  "[{}]"
-HiFold syn     region  yaccAction      matchgroup=yaccCurly start="{" end="}" contains=@yaccCode       contained
+SynFold syn    region  yaccAction      matchgroup=yaccCurly start="{" end="}"  contains=@yaccCode,yaccVar              contained
+syn    match   yaccVar '\$\d\+\|\$\$\|\$<\I\i*>\$\|\$<\I\i*>\d\+'      containedin=cParen,cPreProc,cMulti      contained
 
 " ---------------------------------------------------------------------
 " Yacc synchronization: {{{1
@@ -83,38 +91,30 @@ syn sync fromstart
 " ---------------------------------------------------------------------
 " Define the default highlighting. {{{1
 if !exists("did_yacc_syn_inits")
-  command -nargs=+ HiLink hi def link <args>
-
-  " Internal yacc highlighting links {{{2
-  HiLink yaccBrkt      yaccStmt
-  HiLink yaccKey       yaccStmt
-  HiLink yaccOper      yaccStmt
-  HiLink yaccUnionStart        yaccKey
-
-  " External yacc highlighting links {{{2
-  HiLink yaccComment   Comment
-  HiLink yaccCurly     Delimiter
-  HiLink yaccCurlyError        Error
-  HiLink yaccDefines   cDefine
-  HiLink yaccParseParam        cDefine
-  HiLink yaccNonterminal       Function
-  HiLink yaccDelim     Delimiter
-  HiLink yaccKeyActn   Special
-  HiLink yaccSectionSep        Todo
-  HiLink yaccSep       Delimiter
-  HiLink yaccString    String
-  HiLink yaccStmt      Statement
-  HiLink yaccType      Type
-
-  " since Bram doesn't like my Delimiter :| {{{2
-  HiLink Delimiter     Type
-
-  delcommand HiLink
+  hi def link yaccBrkt yaccStmt
+  hi def link yaccComment      Comment
+  hi def link yaccCurly        Delimiter
+  hi def link yaccCurlyError   Error
+  hi def link yaccDefines      cDefine
+  hi def link yaccDelim        Delimiter
+  hi def link yaccKeyActn      Special
+  hi def link yaccKey  yaccStmt
+  hi def link yaccNonterminal  Function
+  hi def link yaccOper yaccStmt
+  hi def link yaccParseOption  cDefine
+  hi def link yaccParseParam   yaccParseOption
+  hi def link yaccSectionSep   Todo
+  hi def link yaccSep  Delimiter
+  hi def link yaccStmt Statement
+  hi def link yaccString       String
+  hi def link yaccType Type
+  hi def link yaccUnionStart   yaccKey
+  hi def link yaccVar  Special
 endif
 
 " ---------------------------------------------------------------------
 "  Cleanup: {{{1
-delcommand HiFold
+delcommand SynFold
 let b:current_syntax = "yacc"
 
 " ---------------------------------------------------------------------
index 1ff4fff..1e54aff 100644 (file)
 " Vim syntax file
-" Language:         YAML (YAML Ain't Markup Language)
-" Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2010-08-12
+" Language:         YAML (YAML Ain't Markup Language) 1.2
+" Maintainer:       Nikolai Pavlov <zyx.vim@gmail.com>
+" First author:     Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2010-10-08
 
-if exists("b:current_syntax")
-  finish
+if exists('b:current_syntax')
+    finish
 endif
 
 let s:cpo_save = &cpo
 set cpo&vim
 
+let s:ns_char = '\%(\%([\n\r\uFEFF \t]\)\@!\p\)'
+let s:ns_word_char = '\%(\w\|-\)'
+let s:ns_uri_char  = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$,.!~*''()\[\]]\)'
+let s:ns_tag_char  = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$.~*''()]\)'
+let s:c_ns_anchor_char = '\%(\%([\n\r\uFEFF \t,\[\]{}]\)\@!\p\)'
+let s:c_indicator      = '[\-?:,\[\]{}#&*!|>''"%@`]'
+let s:c_flow_indicator = '[,\[\]{}]'
+
+let s:c_verbatim_tag = '!<'.s:ns_uri_char.'\+>'
+let s:c_named_tag_handle     = '!'.s:ns_word_char.'\+!'
+let s:c_secondary_tag_handle = '!!'
+let s:c_primary_tag_handle   = '!'
+let s:c_tag_handle = '\%('.s:c_named_tag_handle.
+            \         '\|'.s:c_secondary_tag_handle.
+            \         '\|'.s:c_primary_tag_handle.'\)'
+let s:c_ns_shorthand_tag = s:c_tag_handle . s:ns_tag_char.'\+'
+let s:c_non_specific_tag = '!'
+let s:c_ns_tag_property = s:c_verbatim_tag.
+            \        '\|'.s:c_ns_shorthand_tag.
+            \        '\|'.s:c_non_specific_tag
+
+let s:c_ns_anchor_name = s:c_ns_anchor_char.'\+'
+let s:c_ns_anchor_property =  '&'.s:c_ns_anchor_name
+let s:c_ns_alias_node      = '\*'.s:c_ns_anchor_name
+
+let s:ns_directive_name = s:ns_char.'\+'
+
+let s:ns_local_tag_prefix  = '!'.s:ns_uri_char.'*'
+let s:ns_global_tag_prefix = s:ns_tag_char.s:ns_uri_char.'*'
+let s:ns_tag_prefix = s:ns_local_tag_prefix.
+            \    '\|'.s:ns_global_tag_prefix
+
+let s:ns_plain_safe_out = s:ns_char
+let s:ns_plain_safe_in  = '\%('.s:c_flow_indicator.'\@!'.s:ns_char.'\)'
+
+let s:ns_plain_first_in  = '\%('.s:c_indicator.'\@!'.s:ns_char.'\|[?:\-]\%('.s:ns_plain_safe_in.'\)\@=\)'
+let s:ns_plain_first_out = '\%('.s:c_indicator.'\@!'.s:ns_char.'\|[?:\-]\%('.s:ns_plain_safe_out.'\)\@=\)'
+
+let s:ns_plain_char_in  = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_in.'\|[:#]\@!'.s:ns_plain_safe_in.'\)'
+let s:ns_plain_char_out = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_out.'\|[:#]\@!'.s:ns_plain_safe_out.'\)'
+
+let s:ns_plain_out = s:ns_plain_first_out . s:ns_plain_char_out.'*'
+let s:ns_plain_in  = s:ns_plain_first_in  . s:ns_plain_char_in.'*'
+
+
 syn keyword yamlTodo            contained TODO FIXME XXX NOTE
 
-syn region  yamlComment         display oneline start='\%(^\|\s\)#' end='$'
-                                \ contains=yamlTodo,@Spell
-
-syn match   yamlNodeProperty    '!\%(![^\\^%     ]\+\|[^!][^:/   ]*\)'
-
-syn match   yamlAnchor          '&.\+'
-
-syn match   yamlAlias           '\*.\+'
-
-syn match   yamlDelimiter       '[-,:]'
-syn match   yamlBlock           '[\[\]{}>|]'
-syn match   yamlOperator        '[?+-]'
-syn match   yamlKey             '\w\+\(\s\+\w\+\)*\ze\s*:'
-
-syn region  yamlString          matchgroup=yamlStringDelimiter
-                                \ start=+"+ skip=+\\"+ end=+"+
-                                \ contains=yamlEscape
-syn region  yamlString          matchgroup=yamlStringDelimiter
-                                \ start=+'+ skip=+''+ end=+'+
-                                \ contains=yamlSingleEscape
-syn match   yamlEscape          contained display +\\[\\"abefnrtv^0_ NLP]+
-syn match   yamlEscape          contained display '\\x\x\{2}'
-syn match   yamlEscape          contained display '\\u\x\{4}'
-syn match   yamlEscape          contained display '\\U\x\{8}'
-" TODO: how do we get 0x85, 0x2028, and 0x2029 into this?
-syn match   yamlEscape          display '\\\%(\r\n\|[\r\n]\)'
-syn match   yamlSingleEscape    contained +''+
-
-" TODO: sexagecimal and fixed (20:30.15 and 1,230.15)
-syn match   yamlNumber          display
-                                \ '\<[+-]\=\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\='
-syn match   yamlNumber          display '0\o\+'
-syn match   yamlNumber          display '0x\x\+'
-syn match   yamlNumber          display '([+-]\=[iI]nf)'
-syn match   yamlNumber          display '(NaN)'
-
-syn match   yamlConstant        '\<[~yn]\>'
-syn keyword yamlConstant        true True TRUE false False FALSE
-syn keyword yamlConstant        yes Yes on ON no No off OFF
-syn keyword yamlConstant        null Null NULL nil Nil NIL
-
-syn match   yamlTimestamp       '\d\d\d\d-\%(1[0-2]\|\d\)-\%(3[0-2]\|2\d\|1\d\|\d\)\%( \%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\d\d [+-]\%([01]\d\|2[0-3]\):[0-5]\d\|t\%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\d\d[+-]\%([01]\d\|2[0-3]\):[0-5]\d\|T\%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\dZ\)\='
-
-syn region  yamlDocumentHeader  start='---' end='$' contains=yamlDirective
-syn match   yamlDocumentEnd     '\.\.\.'
-
-syn match   yamlDirective       contained '%[^:]\+:.\+'
-
-hi def link yamlTodo            Todo
-hi def link yamlComment         Comment
-hi def link yamlDocumentHeader  PreProc
-hi def link yamlDocumentEnd     PreProc
-hi def link yamlDirective       Keyword
-hi def link yamlNodeProperty    Type
-hi def link yamlAnchor          Type
-hi def link yamlAlias           Type
-hi def link yamlDelimiter       Delimiter
-hi def link yamlBlock           Operator
-hi def link yamlOperator        Operator
-hi def link yamlKey             Identifier
-hi def link yamlString          String
-hi def link yamlStringDelimiter yamlString
-hi def link yamlEscape          SpecialChar
-hi def link yamlSingleEscape    SpecialChar
-hi def link yamlNumber          Number
-hi def link yamlConstant        Constant
-hi def link yamlTimestamp       Number
+syn region  yamlComment         display oneline start='\%\(^\|\s\)#' end='$'
+            \                   contains=yamlTodo
+
+execute 'syn region yamlDirective oneline start='.string('^\ze%'.s:ns_directive_name.'\s\+').' '.
+            \                            'end="$" '.
+            \                            'contains=yamlTAGDirective,'.
+            \                                     'yamlYAMLDirective,'.
+            \                                     'yamlReservedDirective '.
+            \                            'keepend'
+
+syn match yamlTAGDirective '%TAG\s\+' contained nextgroup=yamlTagHandle
+execute 'syn match yamlTagHandle contained nextgroup=yamlTagPrefix '.string(s:c_tag_handle.'\s\+')
+execute 'syn match yamlTagPrefix contained nextgroup=yamlComment ' . string(s:ns_tag_prefix)
+
+syn match yamlYAMLDirective '%YAML\s\+'  contained nextgroup=yamlYAMLVersion
+syn match yamlYAMLVersion   '\d\+\.\d\+' contained nextgroup=yamlComment
+
+execute 'syn match yamlReservedDirective contained nextgroup=yamlComment '.
+            \string('%\%(\%(TAG\|YAML\)\s\)\@!'.s:ns_directive_name)
+
+syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start='"' skip='\\"' end='"'
+            \ contains=yamlEscape
+            \ nextgroup=yamlKeyValueDelimiter
+syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start="'" skip="''"  end="'"
+            \ contains=yamlSingleEscape
+            \ nextgroup=yamlKeyValueDelimiter
+syn match  yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)'
+syn match  yamlSingleEscape contained "''"
+
+syn match yamlBlockScalarHeader contained '\s\+\zs[|>]\%([+-]\=[1-9]\|[1-9]\=[+-]\)\='
+
+syn cluster yamlFlow contains=yamlFlowString,yamlFlowMapping,yamlFlowCollection
+syn cluster yamlFlow      add=yamlFlowMappingKey,yamlFlowMappingMerge
+syn cluster yamlFlow      add=yamlConstant,yamlPlainScalar,yamlFloat
+syn cluster yamlFlow      add=yamlTimestamp,yamlInteger,yamlMappingKeyStart
+syn cluster yamlFlow      add=yamlComment
+syn region yamlFlowMapping    matchgroup=yamlFlowIndicator start='{' end='}' contains=@yamlFlow
+syn region yamlFlowCollection matchgroup=yamlFlowIndicator start='\[' end='\]' contains=@yamlFlow
+
+execute 'syn match yamlPlainScalar /'.s:ns_plain_out.'/'
+execute 'syn match yamlPlainScalar contained /'.s:ns_plain_in.'/'
+
+syn match yamlMappingKeyStart '?\ze\s'
+syn match yamlMappingKeyStart '?' contained
+
+execute 'syn match yamlFlowMappingKey /'.s:ns_plain_in.'\ze\s*:/ contained '.
+            \'nextgroup=yamlKeyValueDelimiter'
+syn match yamlFlowMappingMerge /<<\ze\s*:/ contained nextgroup=yamlKeyValueDelimiter
+
+syn match yamlBlockCollectionItemStart '^\s*\zs-\%(\s\+-\)*\s' nextgroup=yamlBlockMappingKey,yamlBlockMappingMerge
+execute 'syn match yamlBlockMappingKey /^\s*\zs'.s:ns_plain_out.'\ze\s*:\%(\s\|$\)/ '.
+            \'nextgroup=yamlKeyValueDelimiter'
+execute 'syn match yamlBlockMappingKey /\s*\zs'.s:ns_plain_out.'\ze\s*:\%(\s\|$\)/ contained '.
+            \'nextgroup=yamlKeyValueDelimiter'
+syn match yamlBlockMappingMerge /^\s*\zs<<\ze:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter
+syn match yamlBlockMappingMerge /<<\ze\s*:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter contained
+
+syn match   yamlKeyValueDelimiter /\s*:/ contained
+syn match   yamlKeyValueDelimiter /\s*:/ contained
+
+syn keyword yamlConstant true True TRUE false False FALSE
+syn keyword yamlConstant null Null NULL
+syn match   yamlConstant '\<\~\>'
+
+syn match   yamlTimestamp /\%([\[\]{}, \t]\@!\p\)\@<!\%(\d\{4}-\d\d\=-\d\d\=\%(\%([Tt]\|\s\+\)\%(\d\d\=\):\%(\d\d\):\%(\d\d\)\%(\.\%(\d*\)\)\=\%(\s*\%(Z\|[+-]\d\d\=\%(:\d\d\)\=\)\)\=\)\=\)\%([\[\]{}, \t]\@!\p\)\@!/
+
+syn match   yamlInteger /\%([\[\]{}, \t]\@!\p\)\@<!\%([+-]\=\%(0\%(b[0-1_]\+\|[0-7_]\+\|x[0-9a-fA-F_]\+\)\=\|\%([1-9][0-9_]*\%(:[0-5]\=\d\)\+\)\)\|[1-9][0-9_]*\)\%([\[\]{}, \t]\@!\p\)\@!/
+syn match   yamlFloat   /\%([\[\]{}, \t]\@!\p\)\@<!\%([+-]\=\%(\%(\d[0-9_]*\)\.[0-9_]*\%([eE][+-]\d\+\)\=\|\.[0-9_]\+\%([eE][-+][0-9]\+\)\=\|\d[0-9_]*\%(:[0-5]\=\d\)\+\.[0-9_]*\|\.\%(inf\|Inf\|INF\)\)\|\%(\.\%(nan\|NaN\|NAN\)\)\)\%([\[\]{}, \t]\@!\p\)\@!/
+
+execute 'syn match yamlNodeTag '.string(s:c_ns_tag_property)
+execute 'syn match yamlAnchor  '.string(s:c_ns_anchor_property)
+execute 'syn match yamlAlias   '.string(s:c_ns_alias_node)
+
+syn match yamlDocumentStart '^---\ze\%(\s\|$\)'
+syn match yamlDocumentEnd   '^\.\.\.\ze\%(\s\|$\)'
+
+hi def link yamlTodo                     Todo
+hi def link yamlComment                  Comment
+
+hi def link yamlDocumentStart            PreProc
+hi def link yamlDocumentEnd              PreProc
+
+hi def link yamlDirectiveName            Keyword
+
+hi def link yamlTAGDirective             yamlDirectiveName
+hi def link yamlTagHandle                String
+hi def link yamlTagPrefix                String
+
+hi def link yamlYAMLDirective            yamlDirectiveName
+hi def link yamlReservedDirective        Error
+hi def link yamlYAMLVersion              Number
+
+hi def link yamlString                   String
+hi def link yamlFlowString               yamlString
+hi def link yamlFlowStringDelimiter      yamlString
+hi def link yamlEscape                   SpecialChar
+hi def link yamlSingleEscape             SpecialChar
+
+hi def link yamlBlockCollectionItemStart Label
+hi def link yamlBlockMappingKey          Identifier
+hi def link yamlBlockMappingMerge        Special
+
+hi def link yamlFlowMappingKey           Identifier
+hi def link yamlFlowMappingMerge         Special
+
+hi def link yamlMappingKeyStart          Special
+hi def link yamlFlowIndicator            Special
+hi def link yamlKeyValueDelimiter        Special
+
+hi def link yamlConstant                 Constant
+
+hi def link yamlAnchor                   Type
+hi def link yamlAlias                    Type
+hi def link yamlNodeTag                  Type
+
+hi def link yamlInteger                  Number
+hi def link yamlFloat                    Float
+hi def link yamlTimestamp                Number
 
 let b:current_syntax = "yaml"
 
+unlet s:ns_word_char s:ns_uri_char s:c_verbatim_tag s:c_named_tag_handle s:c_secondary_tag_handle s:c_primary_tag_handle s:c_tag_handle s:ns_tag_char s:c_ns_shorthand_tag s:c_non_specific_tag s:c_ns_tag_property s:c_ns_anchor_char s:c_ns_anchor_name s:c_ns_anchor_property s:c_ns_alias_node s:ns_char s:ns_directive_name s:ns_local_tag_prefix s:ns_global_tag_prefix s:ns_tag_prefix s:c_indicator s:ns_plain_safe_out s:c_flow_indicator s:ns_plain_safe_in s:ns_plain_first_in s:ns_plain_first_out s:ns_plain_char_in s:ns_plain_char_out s:ns_plain_out s:ns_plain_in
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
+
diff --git a/runtime/syntax/zimbu.vim b/runtime/syntax/zimbu.vim
new file mode 100644 (file)
index 0000000..c859a2f
--- /dev/null
@@ -0,0 +1,130 @@
+" Vim syntax file
+" Language:    Zimbu
+" Maintainer:  Bram Moolenaar
+" Last Change: 2012 Jun 01
+
+if exists("b:current_syntax")
+  finish
+endif
+
+syn include @Ccode syntax/c.vim
+
+syn keyword zimbuTodo          TODO FIXME XXX contained
+syn match   zimbuNoBar          "|" contained
+syn match   zimbuParam         "|[^| ]\+|" contained contains=zimbuNoBar
+syn match   zimbuComment       "#.*$" contains=zimbuTodo,zimbuParam,@Spell
+
+syn match   zimbuChar  "'\\\=.'"
+
+syn keyword zimbuBasicType     bool status
+syn keyword zimbuBasicType     int1 int2 int3 int4 int5 int6 int7
+syn keyword zimbuBasicType     int9 int10 int11 int12 int13 int14 int15
+syn keyword zimbuBasicType     int int8 int16 int32 int64 bigInt
+syn keyword zimbuBasicType     nat nat8 byte nat16 nat32 nat64 bigNat
+syn keyword zimbuBasicType     nat1 nat2 nat3 nat4 nat5 nat6 nat7
+syn keyword zimbuBasicType     nat9 nat10 nat11 nat12 nat13 nat14 nat15
+syn keyword zimbuBasicType     float float32 float64 float80 float128
+syn keyword zimbuBasicType     fixed1 fixed2 fixed3 fixed4 fixed5 fixed6
+syn keyword zimbuBasicType     fixed7 fixed8 fixed9 fixed10 fixed11 fixed12
+syn keyword zimbuBasicType     fixed13 fixed14 fixed15
+
+syn keyword zimbuCompType      string stringval cstring varstring
+syn keyword zimbuCompType      bytes varbytes
+syn keyword zimbuCompType      tuple array list dict multiDict set multiSet
+syn keyword zimbuCompType      complex complex32 complex64 complex80 complex128
+syn keyword zimbuCompType      proc func def thread evalThread lock cond pipe
+
+syn keyword zimbuType   VAR ANY USE GET
+syn match zimbuType    "IO.File"
+syn match zimbuType    "IO.Stat"
+
+syn keyword zimbuStatement IF ELSE ELSEIF WHILE REPEAT FOR IN TO STEP
+syn keyword zimbuStatement DO UNTIL SWITCH WITH
+syn keyword zimbuStatement TRY CATCH FINALLY
+syn keyword zimbuStatement GENERATE_IF GENERATE_ELSE GENERATE_ELSEIF
+syn keyword zimbuStatement CASE DEFAULT FINAL ABSTRACT VIRTUAL DEFINE REPLACE
+syn keyword zimbuStatement IMPLEMENTS EXTENDS PARENT LOCAL
+syn keyword zimbuStatement PART ALIAS CONNECT WRAP
+syn keyword zimbuStatement BREAK CONTINUE PROCEED
+syn keyword zimbuStatement RETURN EXIT THROW
+syn keyword zimbuStatement IMPORT AS OPTIONS MAIN
+syn keyword zimbuStatement INTERFACE MODULE ENUM BITS SHARED
+syn match zimbuStatement "\<\(FUNC\|PROC\|DEF\)\>"
+syn match zimbuStatement "\<CLASS\>"
+syn match zimbuStatement "}"
+
+syn match zimbuAttribute "@backtrace=no\>"
+syn match zimbuAttribute "@backtrace=yes\>"
+syn match zimbuAttribute "@abstract\>"
+syn match zimbuAttribute "@earlyInit\>"
+syn match zimbuAttribute "@default\>"
+syn match zimbuAttribute "@define\>"
+syn match zimbuAttribute "@replace\>"
+syn match zimbuAttribute "@final\>"
+
+syn match zimbuAttribute "@private\>"
+syn match zimbuAttribute "@protected\>"
+syn match zimbuAttribute "@public\>"
+syn match zimbuAttribute "@file\>"
+syn match zimbuAttribute "@directory\>"
+syn match zimbuAttribute "@read=private\>"
+syn match zimbuAttribute "@read=protected\>"
+syn match zimbuAttribute "@read=public\>"
+syn match zimbuAttribute "@read=file\>"
+syn match zimbuAttribute "@read=directory\>"
+syn match zimbuAttribute "@items=private\>"
+syn match zimbuAttribute "@items=protected\>"
+syn match zimbuAttribute "@items=public\>"
+syn match zimbuAttribute "@items=file\>"
+syn match zimbuAttribute "@items=directory\>"
+
+syn keyword zimbuMethod NEW EQUAL COPY COMPARE SIZE GET SET
+
+syn keyword zimbuOperator IS ISNOT ISA ISNOTA
+
+syn keyword zimbuModule  ARG CHECK E IO PROTO SYS HTTP ZC ZWT TIME THREAD
+
+syn match zimbuString  +"\([^"\\]\|\\.\)*\("\|$\)+
+syn match zimbuString  +R"\([^"]\|""\)*\("\|$\)+
+syn region zimbuString  start=+'''+ end=+'''+
+
+syn keyword zimbuFixed  TRUE FALSE NIL THIS THISTYPE FAIL OK
+syn keyword zimbuError  NULL
+
+" trailing whitespace
+syn match   zimbuSpaceError   display excludenl "\S\s\+$"ms=s+1
+" mixed tabs and spaces
+syn match   zimbuSpaceError   display " \+\t"
+syn match   zimbuSpaceError   display "\t\+ "
+
+syn match zimbuUses contained "uses([a-zA-Z_ ,]*)"
+syn match zimbuBlockComment contained " #.*"
+
+syn region zimbuCregion matchgroup=zimbuCblock start="^>>>" end="^<<<.*" contains=@Ccode,zimbuUses,zimbuBlockComment keepend
+
+syn sync minlines=2000
+
+hi def link zimbuBasicType     Type
+hi def link zimbuCompType      Type
+hi def link zimbuType          Type
+hi def link zimbuStatement     Statement
+hi def link zimbuOperator      Statement
+hi def link zimbuMethod                PreProc
+hi def link zimbuModule                PreProc
+hi def link zimbuUses          PreProc
+hi def link zimbuAttribute     PreProc
+hi def link zimbuString                Constant
+hi def link zimbuChar          Constant
+hi def link zimbuFixed         Constant
+hi def link zimbuComment       Comment
+hi def link zimbuBlockComment  Comment
+hi def link zimbuCblock                Comment
+hi def link zimbuTodo          Todo
+hi def link zimbuParam         Constant
+hi def link zimbuNoBar         Ignore
+hi def link zimbuSpaceError    Error
+hi def link zimbuError         Error
+
+let b:current_syntax = "zimbu"
+
+" vim: ts=8
index ff658c9..3c12a8c 100644 (file)
@@ -11,7 +11,7 @@ so you would normally compile it with one of the following:
     cc -D_IRIX    ccfilter.c -o ccfilter
     cc -D_SOLARIS ccfilter.c -o ccfilter
     cc -D_HPUX    ccfilter.c -o ccfilter
-You can then copy ccfilter to it's target destination (i.e: /usr/local/bin).
+You can then copy ccfilter to its target destination (i.e: /usr/local/bin).
 The man page ccfilter.1 has to be copied to somewhere in your MANPATH,
 under a man1 directory (i.e: /usr/local/man/man1).
 
index 570d6e7..1aab2d4 100755 (executable)
@@ -3,7 +3,7 @@
 # vimparse.pl - Reformats the error messages of the Perl interpreter for use
 # with the quickfix mode of Vim
 #
-# Copyright (©) 2001 by Jörg Ziefle <joerg.ziefle@gmx.de>
+# Copyright (c) 2001 by Joerg Ziefle <joerg.ziefle@gmx.de>
 # You may use and distribute this software under the same terms as Perl itself.
 #
 # Usage: put one of the two configurations below in your ~/.vimrc (without the
index 6307d95..bea6353 100644 (file)
@@ -7,12 +7,12 @@
 @rem      Arguments - +$(CurLine) $(ItemPath)
 @rem      Init Dir  - Empty
 @rem
-@rem Coutesy of Brian Sturk
+@rem Courtesy of Brian Sturk
 @rem
 @rem --remote-silent +%1 is a command +954, move ahead 954 lines
 @rem --remote-silent %2 full path to file
 @rem In Vim
-@rem    :h --remote-silent for mor details
+@rem    :h --remote-silent for more details
 @rem
 @rem --servername VS_NET
 @rem This will create a new instance of vim called VS_NET.  So if you
index 7f4df75..35fe821 100644 (file)
@@ -6,7 +6,7 @@
 # Similarly for Russian and Korean
 
 all: tutor.utf-8 \
-       tutor.bj \
+       tutor.bar \
        tutor.ca.utf-8 \
        tutor.de.utf-8 \
        tutor.el tutor.el.cp737 \
@@ -18,6 +18,7 @@ all: tutor.utf-8 \
        tutor.it.utf-8 \
        tutor.ja.sjis tutor.ja.euc \
        tutor.ko.euc \
+       tutor.nl \
        tutor.no.utf-8 \
        tutor.nb \
        tutor.nb.utf-8 \
@@ -28,8 +29,8 @@ all: tutor.utf-8 \
 tutor.utf-8: tutor
        iconv -f ISO-8859-1 -t UTF-8 tutor > tutor.utf-8
 
-tutor.bj: tutor.bj.utf-8
-       iconv -f UTF-8 -t ISO-8859-1 tutor.bj.utf-8 > tutor.bj
+tutor.bar: tutor.bar.utf-8
+       iconv -f UTF-8 -t ISO-8859-1 tutor.bar.utf-8 > tutor.bar
 
 tutor.ca.utf-8: tutor.ca
        iconv -f ISO-8859-1 -t UTF-8 tutor.ca > tutor.ca.utf-8
@@ -73,6 +74,9 @@ tutor.ja.euc: tutor.ja.utf-8
 tutor.ko.euc: tutor.ko.utf-8
        iconv -f UTF-8 -t EUC-KR tutor.ko.utf-8 > tutor.ko.euc
 
+tutor.nl: tutor.nl.utf-8
+       iconv -f UTF-8 -t ISO-8859-1 tutor.nl.utf-8 > tutor.nl
+
 tutor.no.utf-8: tutor.no
        iconv -f ISO-8859-1 -t UTF-8 tutor.no > tutor.no.utf-8
 
index daf42b6..da28a15 100644 (file)
@@ -658,7 +658,7 @@ NOTE: If you were to exit Vim and start it again with  vim TEST , the file
   4. Type  w TEST  , where TEST is a filename that does not exist yet.  Verify
      that you see  :'<,'>w TEST  before you press <ENTER>.
 
-  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  !ls
+  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  :!ls
      to see it.  Do not remove it yet!  We will use it in the next lesson.
 
 NOTE:  Pressing  v  starts Visual selection.  You can move the cursor around
similarity index 80%
rename from runtime/tutor/tutor.bj
rename to runtime/tutor/tutor.bar
index 642a8f3..43fcdb8 100644 (file)
@@ -1,5 +1,5 @@
 ===============================================================================
-=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7D   =
+=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7    =
 ===============================================================================
 
    Dyr Wimm ist ayn gro mächtigs Blat, dös was mit aynn Wösn Befelh aufwartt; z
    OBACHT:
    Die Faudungen,  wost daader finddst,  gaand istig  s Gwort Ã¶ndern.  Dösswögn
    machst eyn n Böstn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
-   dös Gwort daader  mit n Befelh "vimtutor bj"  ausherlaassn,  ist s ee schoon
+   dös Gwort daader mit n Befelh  "vimtutor bar"  ausherlaassn, ist s ee schoon
    ayn Aamum.
    Mir kan s  nit oft gnueg  sagn,  däß  der Schainer daader  istig  gan n Ãœebn
-   ghoert.  Also muesst schoon aau die Befelh ausfüern,  wennst ys gscheid ler-
+   ghoert.  Also muesst schoon aau die Befelh +ausfüern, wennst ys gscheid ler-
    nen willst. Mit n Lösn yllain ist s +nit taan!
 
    Ietz schaust grad non, däß dein Föststölltastn nit druckt ist; und aft geest
@@ -24,7 +24,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                       Letzn 1.1: MIT N MÖRKL UMAYNANDFARN
 
-**  Dyrmitst mit n Mörkl umaynandkimmst, druck h, j, k und l wie unt zaigt.  **
+** Dyrmitst mit n Mörkl umaynandkimmst, druck  h, j, k und l  wie unt zaigt. **
             ^            Ayn Ã–slsbrugg:
             k            De Tastn  h  ist winster und +geet aau gan winster.
    < h             l >   S  l  leit zesm und richtt si gan zesm.
             v            Mit n  k  kimmst gan n KOPF.            
   1. Ietz ruedertst ainfach mit n Mörkl auf n Bildschirm umaynand,  hinst däßst
      di sicher füelst.
-  2. Halt  d Abhin-Tastn (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
+  2. Halt d Abhin-Tastn  (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
      kimmst gan dyr naehstn Letzn.
      
   3. Wie gsait, ietz bewögst di also mit derer Tastn gan dyr Letzn 1.2.
 
 Non Ã¶bbs: Allweil, wenn dyr niemer ganz wol ist, wasst Ã¶bbenn druckt haast, aft
-          zipfst  <ESC>;  naacherd bist wider ganz gwon in dyr Befelhs-Artweis.
+          zipfst  <ESC>  ; naacher bist wider ganz gwon in dyr Befelhs-Artweis.
 
       
           Nöbnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
@@ -53,17 +53,17 @@ Non 
 
   1. Druck d <ESC>-Tastn, dyrmitst aau gwiß in dyr Befelhs-Artweis bist.
   
-  2. Demmlt  :q! <EIN>.
+  2. Demmlt  :q!<EIN>  .
      Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst Ã¶bbenn  göndert
      haast.
 
   3. Balst Ã¶nn Eingib seghst, gib dö Faudung ein,  wo di zo dönn Schainer brun-
-     gen haat, also    vimtutor bj <EIN>.
+     gen haat, also   vimtutor bar<EIN>  .
 
   4. Also, wenn ietz allsse sitzt, naacherd füerst d Schritt 1 hinst 3 aus, mit
      wasst ys Blat verlaasst und aft wider einhinkimmst.
 
-Anmörkung: Mit  :q! <EIN> verwirffst allss, wasst göndert older enther gschribn
+Anmörkung: Mit  :q!<EIN>  verwirffst allss, wasst göndert older enther gschribn
            haast. In aynn Ã–ttlych Letznen lernst acht, wiest dös allss in ayner
            Dautticht speichertst.
 
@@ -73,7 +73,7 @@ Anm
          
          ** Druck  x  , dyrmitst dös Zaichen unter n Mörkl löschst. **
 
-  1. Bewög di mit n Mörkl auf de mit  ---> angmörkte Zeil unt.
+  1. Bewög di mit n Mörkl auf de mit  --->  angmörkte Zeil unt.
 
   2. Zo n Faeler Verbössern  farst mit n Mörkl  netty  auf dös Zaichen,  dös wo
      glöscht ghoert.
@@ -96,14 +96,14 @@ Und ganz wichtig:  Dyrweilst d
 
                   **  Druck  i  , dyrmitst Ã¶bbs einfüegst. **
 
-  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen Zeil, wo mit ---> angeet.
+  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen Zeil, wo mit  --->  angeet.
 
   2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewög Ã¶nn Mörkl  auf dös
      eerste Zaichen NAACH derer Stöll, daa wo s Gwort eingfüegt werdn sollt.
 
   3. Druck  i  und gib dös ein, was abgeet.
 
-  4. Wenn ieweils ayn Faeler verweitert ist, aft druck <ESC>; und dyrmit kimmst
+  4. Wenn ieweils ayn Faeler verweitert ist, aft druck   <ESC>  ; dyrmit kimmst
      gan dyr Befelhsartweis zrugg.
      So, und ietz tuest ainfach yso weiter, hinst däß dyr Saz stimmt.
 
@@ -119,15 +119,15 @@ Und ganz wichtig:  Dyrweilst d
 
                       ** Druck  A  gan n Gwort Anfüegn. **
 
-  1. Gee mit n Mörkl gan dyr eerstn untignen Zeil, wo ayn ---> dyrvor haat.
+  1. Gee mit n Mörkl gan dyr eerstn untignen Zeil, wo ayn  --->  dyrvor haat.
      Daa ist s gleich, wo gnaun dyr Mörkl in derer Zeil steet.  
 
   2. Demmlt  A  und gib de entspröchetn Ergöntzungen ein.
 
-  3. Wennst  mit n Anfüegn förtig bist,  aft druckst <ESC>,  däßst wider eyn de
+  3. Wennst mit n Anfüegn förtig bist, aft druckst  <ESC>  , däßst wider eyn de
      Befelhsartweis zruggkimmst.
 
-  4. So,  und ietz geest aft non gan dyr zwaittn  mit ---> angmörktn Zeil;  und
+  4. So,  und ietz geest aft non gan dyr zwaittn mit  --->  angmörktn Zeil; und
      daadl machst ys netty yso.
 
 ---> In derer Zeil gee  
@@ -147,14 +147,14 @@ Und ganz wichtig:  Dyrweilst d
 
   1. Verlaaß also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
 
-  2. Gib dö Faudung eyn n Eingib ein:  vim Schainer <EIN> . 'vim' ruefft s Blat
-     auf,  und 'Schainer'  haisst de Dautticht,  wost barechtn  willst.  Dyrmit
+  2. Gib dö Faudung eyn n Eingib ein:  vim Schainer<EIN>  . 'vim' ruefft s Blat
+     auf,  und  'Schainer'  haisst de Dautticht,  wost barechtn willst.  Dyrmit
      haast also ayn Dautticht, dö wost barechtn kanst.
 
   3. Ietz  füegst Ã¶bbs ein older löschst Ã¶bbs,  wiest ys in de vorignen Letznen
      glernt haast.
 
-  4. Speichert de gönderte Dautticht und verlaaߠönn Wimm mit  :wq  <EIN>  .
+  4. Speichert de gönderte Dautticht und verlaaߠönn Wimm mit  :wq<EIN>  .
 
   5. Schmeiߠönn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
 
@@ -166,31 +166,31 @@ Und ganz wichtig:  Dyrweilst d
   1. Dyr Mörkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
               h (winst)     j (ab)        k (auf)       l (zes)
 
-  2. Um Ã¶nn Wimm umbb n Eingib aus z ginnen, demmlt: vim DAUTTICHT <EIN> .
+  2. Um Ã¶nn Wimm umbb n Eingib aus z ginnen, demmlt:  vim DAUTTICHT<EIN>  .
 
   3. Willst Ã¶nn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
-                <ESC>  :q!  <EIN> .
-     Gan n Verlaassn und Speichern aber zipfst <ESC>  :wq  <EIN>.
+                <ESC>  und  :q!<EIN>  .
+     Gan n Verlaassn und Speichern aber zipfst  <ESC>  und  :wq<EIN>  .
 
   4. Willst dös Zaichen löschn, daa wo dyr Mörkl drauf ist, demmltst  x  .
 
   5. Willst Ã¶bbs vor n Mörkl eingöbn, zipfst  i  und drafter  <ESC>  .
      Mechst ys aber eyn s Zeilnend anhinhöngen, benutzt ys   A  .
-     Und ainfach naach n Mörkl füegst ys mit  a  ein  .
+     Und ainfach naach n Mörkl füegst ys mit  a  ein.
 
-Anmörkung:  Druckst <ESC>, kimmst eyn de Befelhsartweis zrugg older brichst ayn
-            Faudung ab, dö wo dyr schiefgangen ist.
+Anmörkung:  Druckst  <ESC>  ,  kimmst eyn de Befelhsartweis zrugg older brichst
+            ayn Faudung ab, dö wo dyr schiefgangen ist.
 
      Ietz tue mit dyr Letzn 2 weiter.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            Letzn 2.1.: LÖSHFAUDUNGEN
 
 
-                 ** Demmlt  dw  , dyrmitst ayn Wort löschst **
+                 ** Demmlt  dw  , dyrmitst ayn Wort löschst. **
 
-  1. Druck  <ESC>, dyrmit s aau gwiß ist, däßst in dyr Befelhsartweis bist.
+  1. Druck  <ESC>  ,  dyrmit s aau gwiß ist,  däßst in dyr Befelhsartweis bist.
 
-  2. Bewög Ã¶nn Mörkl zo dyr mit ---> angmörktn Zeil unt.
+  2. Bewög Ã¶nn Mörkl zo dyr mit  --->  angmörktn Zeil unt.
 
   3. Und daa geest ietz auf n Anfang von aynn Wort, dös wo glöscht ghoert.
 
@@ -211,9 +211,9 @@ Anm
 
             ** Gib  d$  ein, däßst hinst eyn s Zeilnend löschst. **
 
-  1. Druck <ESC> , dyrmitst aau gwiß in dyr Befelhsartweis bist.
+  1. Druck  <ESC>  , dyrmitst aau gwiß in dyr Befelhsartweis bist.
 
-  2. Bewög Ã¶nn Mörkl hinst eyn de mit ---> angmörkte Zeil untn.
+  2. Bewög Ã¶nn Mörkl hinst eyn de mit  --->  angmörkte Zeil untn.
 
   3. Gee mit n Mörkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
 
@@ -243,11 +243,11 @@ Anm
 
 
   Daader also, was i wie löschn kan:
-    w - hinst eyn n Anfang von n naehstn Wort AANE dönn sein eersts Zaichen.
-    e - gan n End von n ietzundn Wort MIT dönn seinn lösstn Zaichen.
-    $ - zo n End von dyr Zeil MIT derer irn lösstn Zaichen.
+     w  -  hinst eyn n Anfang von n naehstn Wort AANE dönn sein eersts Zaichen.
+     e  -  gan n End von n ietzundn Wort MIT dönn seinn lösstn Zaichen.
+     $  -  zo n End von dyr Zeil MIT derer irn lösstn Zaichen.
 
-  Also löscht de Tastnfolg  de  umbb n Mörkl hinst eyn s Wortend.
+  Also löscht de Tastnfolg  de  allss umbb n Mörkl hinst eyn s Wortend.
 Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mörkl
              entspröchet weiter.
 
@@ -255,9 +255,9 @@ Anm
                    Letzn 2.4: MIT AYNN ZÖLER D WOLENDER Ã„FERN
 
 
     ** Gib i ayn Zal vor aynn Wolend ein, werd dös Sel halt widerholt. **
** Gib i ayn Zal vor aynn Wolend ein, werd dös Sel entspröchet oft gangen. **
 
-  1. Bewög Ã¶nn Mörkl gan n Anfang von dyr Zeil mit ---> dyrvor unt.
+  1. Bewög Ã¶nn Mörkl gan n Anfang von dyr Zeil mit  --->  dyrvor unt.
 
   2. Zipf  2w  , däßst mit n Mörkl zwai Wörter weitergeest.
 
@@ -278,13 +278,13 @@ Anm
                  Letzn 2.5: DURCH AYNN ZÖLER GLEI MEERER LÖSCHN
 
 
-              ** Ayn Zal vor aynn Pfemerer Ã¤fert dönn um seln Werd. **
+        ** Ayn Zal vor aynn Pfemerer füert dönn entspröchet oft aus. **
 
   Also, i mecht löschn,  und zwaar Ã¶bbs Bestimmts,  und dös so und so oft:  Daa
   dyrzue benutz i aynn Zöler:
                               d  Zöler  Wolend (also Ã¶nn Bewögungsschrit)
 
-  1. Bewög Ã¶nn Mörkl  gan n eerstn Wort in GROOSSBUECHSTABN in dyr mit ---> an-
+  1. Bewög Ã¶nn Mörkl zo n eerstn Wort in GROOSSBUECHSTABN in dyr mit  --->  an-
      gmörktn Zeil.
 
   2. Demmlt  d2w  , dyrmitst de ganz grooßgschribnen Wörter löschst.
@@ -325,9 +325,9 @@ Anm
 
 
              ** Zipf  u  , dyrmitst de lösstn Faudungen ruggltst **
-              ** older  U  , um ayn gantze Zeil widerherzstölln. **
+             ** older   U  , um ayn gantze Zeil widerherzstölln. **
 
-  1. Bewög Ã¶nn Mörkl  gan dyr mit ---> angmörktn Zeil unt  und gee dyrmit auf n
+  1. Bewög Ã¶nn Mörkl gan dyr mit  --->  angmörktn Zeil unt und gee dyrmit auf n
      eerstn Faeler.
   2. Zipf  x  , däßst dös eerste z vile Zaichen löschst.
   3. Ietz demmlt  u  , dyrmitst de lösste Faudung ruggltst.
@@ -358,13 +358,13 @@ Anm
       Dyr PFEMERER gibt an, WAS taan ghoert, Ã¶bbenn   d   =  löschn (»delete«).
       [ZAL] - Ayn Zal KAN myn angöbn, wenn myn halt ayn Wolend Ã¶fter habn will.
       S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  Ã¶bbenn
-      auf ayn Wort (  w  ), s End von dyr Zeil (  $  ) und so weiter.
+      auf aynn Wortanfang (  w  ), s End von dyr Zeil (  $  ) und so weiter.
 
   6. Däßst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
 
   7. Um Ã¶bbs Vorigs wider z ruggln, gib ein:                u (klain also)
      Um allsand Ã–nderungen in ayner Zeil z ruggln, haast:   U (also grooß)
-     Um "rugg-z-ruggln", also allss wider herzstölln, zipf: <STRG>r   
+     Um "rugg-z-ruggln", also allss wider herzstölln, zipf:  <STRG>r   
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            Letzn 3.1: ANFÃœEGN (»put«) 
@@ -372,10 +372,10 @@ Anm
 
      ** Zipf  p  , dyrmitst Ã¶bbs gnetty Glöschts naach n Mörkl anfüegst. **
 
-  1. Bewög Ã¶nn Mörkl gan dyr eerstn untignen Zeil mit   --->   dyrvor.
+  1. Bewög Ã¶nn Mörkl gan dyr eerstn untignen Zeil mit  --->  dyrvor.
 
-  2. Zipf  dd  , um sele Zeil z löschn  und dyrmit  in aynn Wimm-"Roster"  zo n
-     speichern.
+  2. Zipf  dd  ,  um sele Zeil z löschn und dyrmit in ayner Wimm-Osn zo n Spei-
+     chern.
 
   3. Bewög Ã¶nn Mörkl gan dyr Zeil c),  ÃœBER derer, daa wo de glöschte Zeil ein-
      hinkemmen sollt.
@@ -395,7 +395,7 @@ Anm
 
       ** Zipf  rx  , um dös Zaichen unter n Mörkl durch  x  z ersötzn. **
 
-  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen Zeil mit   --->   dyrvor.
+  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen Zeil mit  --->  dyrvor.
 
   2. Bewög Ã¶nn Mörkl, hinst däß yr auf n eerstn Faeler steet.
 
@@ -418,13 +418,13 @@ Anm
 
               ** Um hinst eyn s Wortend z Ã¶ndern, zipf  ce  . **
 
-  1. Gee mit n Mörkl auf de eerste mit ---> angmörkte Zeil.
+  1. Gee mit n Mörkl auf de eerste mit  --->  angmörkte Zeil.
 
   2. Ietz farst netty auf s  "s"  von Wstwr hin.
 
   3. Zipf  ce  ein und aft d Wortberichtigung, daader also  Ã¶rter  .
 
-  4. Druck <ESC> und bewög Ã¶nn Mörkl gan n naehstn Zaichen,  wo göndert ghoert.
+  4. Druck  <ESC>  und bewög Ã¶nn Mörkl zo n naehstn Zaichen, wo göndert ghoert.
 
   5. Ã„fert  d Schritt 3 und 4,  hinst däß  dyr eerste Saz  wie dyr zwaitte ist.
 
@@ -443,12 +443,12 @@ ce  l
 
   1. Dyr Ã–nder-Pfemerer arechtt anleich wie d Löshfaudung mit   d  ,  und zwaar
      yso:
-         c    [Zal]   Bewögungsschritt (Wolend)
+         c    [Zal]   Bewögungsschrit (Wolend)
 
-  2. D Wolender  seind  de gleichn,  Ã¶bbenn  w  für Wort und  $ für s Zeilnend.
+  2. D Wolender seind  de gleichn,  Ã¶bbenn  w  für Wort und  $  für s Zeilnend.
 
 
-  3. Bewög di zo dyr eerstn untignen Zeil mit ---> .
+  3. Bewög di zo dyr eerstn untignen Zeil mit  --->  .
 
   4. Ietz geest auf dönn eerstn Faeler.
 
@@ -494,14 +494,14 @@ Anm
      Mörk dyr de Zeilnnummer für n Schrit 3.
 
 Anmörkung:  Müglicherweis  seghst aau Ã¶nn Mörklbefand  in n zesmen untern Bild-
-            schirmögg. Aft ist s "Lindl" (»ruler«) eingstöllt; schau dyrzue mit
-            n Befelh   :help 'ruler'   naach.
+            schirmögg. Aft ist s "Lindl" (»ruler«) eingstöllt;  meerer Ã¼ber dös
+            laasst dyr dyr Befelh   :help 'ruler'   ausher.
   2. Druck  G  , um an s End von dyr Dautticht z kemmen.
      gg  gibst ein, däßst gan n Anfang von dyr Dautticht aufhinkimmst.
 
   3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
      Dös bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest dös eerste
-     Maal <STRG>g gadruckst.
+     Maal  <STRG>g  gadruckst.
 
   4. Wennst di sicher gnueg füelst, aft füer d Schritt 1 hinst 3 aus.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -513,15 +513,15 @@ Anm
   1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. Dös sel wie aau dyr
      Mörkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
 
-  2. Ietz zipf 'Faeeler' <EIN>. Netty um dös 'Faeeler' willst ietz suechen.
+  2. Ietz zipf  Faeeler<EIN>  . Netty um dös 'Faeeler' willst ietz suechen.
 
   3. Willst um gnaun dönn Ausdruk weitersuechen, zipf ainfach  n  (wie Â»next«).
      Willst hinzrugg suechen, aft gibst  N  ein.
 
   4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
 
-  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, druck <STRG>o,  und dös
-     Ã¶fter,  wennst weiter zrugg willst.  Mit <STRG>i widerum  kimmst vorwärts.
+  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, nimm  <STRG>o , und dös
+     Ã¶fter,  wennst weiter zrugg willst. Mit  <STRG>i  widerum kimmst vorwärts.
 
 --->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
 
@@ -534,7 +534,7 @@ Anm
    ** Zipf  %  , um de entspröchete Klammer  )  ,  ]  older  }  z finddn. **
 
   1. Sötz Ã¶nn Mörkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
-     in dyr untignen Zeil, wo mit ---> angmörkt ist.
+     in dyr untignen Zeil, wo mit  --->  angmörkt ist.
 
   2. Ietzet zipf s Zaichen  %  .
 
@@ -556,7 +556,7 @@ Anm
 
         ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n Ersötzn. **
 
-  1. Gee mit n Mörkl zo dyr unt steehetn mit ---> angmörktn Zeil.
+  1. Gee mit n Mörkl zo dyr unt steehetn mit  --->  angmörktn Zeil.
 
   2. Zipf  :s/dee/de <EIN>  . Der Befelh ersötzt alsnan grad dös +eerste "dee",
      wo vürkimmt.
@@ -577,60 +577,60 @@ Anm
                          ZAMMENFASSUNG VON DYR LETZN 4
                         
   1. <STRG>g   zaigt dönn ietzundn Dauttichtbefand  und Ã¶nn Darstand dyrvon an.
-           G  bringt di an s End von dyr Dautticht.
-     <Zal> G  bringt di gan dyr entspröchetn Zeilnnummer.
-          gg  bringt di zo dyr eerstn Zeil.
-          
+           G   bringt di an s End von dyr Dautticht.
+      <Zal>G   bringt di gan dyr entspröchetn Zeilnnummer.
+     <Zal>gg   geet +grad yso.
+          gg   bringt di zo dyr eerstn Zeil.
   2. D Eingaab von  /  mit aynn Ausdruk suecht VÃœRSHLING um dönn Ausdruk.
      Gibst  ?  und aynn Suechbegrif ein, suecht s um dönn Ã„RSHLING.
      Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
-     gsuecht. Mit  N geet s umkeerter weiter.
-     <STRG>o bringt di zo Ã¶lterne Befändd zrugg, <STRG>i zo neuerne.
+     gsuecht. Mit  N  geet s umkeerter weiter.
+     <STRG>o  bringt di zo Ã¶lterne Befändd zrugg,  <STRG>i  zo neuerne.
 
   3. D Eingaab von  % , wenn dyr Mörkl auf ainer von dene Klammern steet:   ({[
      )]}  , bringt di zo dyr Gögnklammer.
 
-  4. Um dös eerste Vürkemmen  von "alt"  in ayner Zeil  durch "neu"  z ersötzn,
-     zipf   :s/alt/neu   .
-     Um allsand in ayner Zeil z ersötzn, zipf   :s/alt/neu/g   .
+  4. Um dös eerste Vürkemmen von  "alt"  in ayner Zeil durch  "neu"  z ersötzn,
+     zipf  :s/alt/neu  .
+     Um allsand in ayner Zeil z ersötzn, zipf  :s/alt/neu/g  .
      Mechst allss in zwo Zeiln ersötzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
-     Mechst allss in dyr gantzn Dautticht ersötzn, gib ein:   :%s/alt/neu/g   .
+     Mechst allss in dyr gantzn Dautticht ersötzn, gib ein:  :%s/alt/neu/g    .
      Willst ayn ieds Maal bstaetln, höng 'c' wie Â»confirm« hint anhin.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
             Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFÃœERN 
             
 
-  ** Willst ayn Gfäßfaudung ausfüern, gib ainfach dö sel naach   :!   ein. **
+   ** Willst ayn Gfäßfaudung ausfüern, gib ainfach dö sel naach  :!  ein. **
  
   1. Zipf  dönn bekanntn Befelh   :  ,  dyrmitst  mit n Mörkl  auf n Bildschirm
      ganz abhin kimmst. Draufhin kanst aynn gwonen Gfäßbefelh eingöbn.
 
-  2. Zeerst  kimmt aber non ayn Ruefzaichen   !   .  Und ietz haast de Müglich-
+  2. Zeerst  kimmt aber non ayn Ruefzaichen   !  .  Und ietzet haast d Müglich-
      keit, ayn beliebige ausserige Gfäßfaudung auszfüern.
 
-  3. Als Beispil zipf   :!ls <EIN>  ; und schoon haast ayn Auflistung von deinn
+  3. Als Beispil zipf   :!ls<EIN>  ;  und schoon haast ayn Auflistung von deinn
      Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wärst.  Geet   ls
-     aus iewign aynn Grund nit, aft pröblt s mit  :!dir <EIN>  .
+     aus iewign aynn Grund nit, aft pröblt s mit  :!dir<EIN>  .
 
 Also non aynmaal: Mit dönn Angang kan ayn iede beliebige ausserige Faudung aus-
                   gfüert werdn, aau mit Auerwerdd.
 
-Und wolgmörkt:    Allsand Befelh, wo mit  :  angeend,  müessend mit <EIN> bstö-
-                  tigt werdn. Dös dyrsagn myr vürbaß niemer.
+Und wolgmörkt:    Alle Befelh,  wo mit  :  angeend,  müessend mit  <EIN>  bstö-
+                  tigt werdn. Dös dyrsagn myr fürbaß +niemer.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            Letzn 5.2: NON MEERER DRÃœBER, WIE MYN DAUTTICHTN SCHREIBT
 
 
-      ** Um Ã¶bbs Gönderts neu z speichern, zipf :w NEUER_DAUTTICHTNAM. **
+     ** Um Ã¶bbs Gönderts neu z speichern, zipf  :w NEUER_DAUTTICHTNAM  . **
 
   1. Zipf  :!dir   older  :!ls  ,  däßst dyr ayn Auflistung von deinn Verzaich-
-     niss ausherlaasst.  Däßst dyrnaach <EIN> eingöbn muesst, waisst ee schoon.
+     niss ausherlaasst. Däßst drafter  <EIN>  eingöbn muesst, waisst ee schoon.
 
-  2. Suech dyr aynn Dauttichtnam aus, dönn wo s non nit geit, Ã¶bbenn POCH.
+  2. Suech dyr aynn Dauttichtnam aus, dönn wo s non nit geit, Ã¶bbenn  POCH  .
 
-  3. Ietz demmlt:  :w POCH   (also mit POCH als dönn neuen Dauttichtnam).
+  3. Ietz demmlt:  :w POCH  (also mit POCH als dönn neuen Dauttichtnam).
 
   4. Dös speichert ietz de gantze Dautticht, also Ã¶nn Wimmschainer,  unter dönn
      Nam POCH. Dös kanst leicht Ã¼berprüeffen, indem däßst ainfach  :!ls   older
@@ -641,7 +641,7 @@ Anm
             wiest n gspeichert haast.
 
   5. Ietz verweitert dö Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
-     beziehungsweis bei aynn Ainslgebäu mit   :!rm POCH   .
+     beziehungsweis bei aynn Unixgebäu mit   :!rm POCH   .
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
             Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
 
@@ -655,15 +655,15 @@ Anm
   3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
 
   4. Zipf  w POCH  , wobei s dönn Dauttichtnam POCH  non nit geit.  Vergwiß di,
-     däßst dös  :'<,'>w POCH aau +seghst, ee wennst <EIN> druckst.
+     däßst dös  :'<,'>w POCH  aau +seghst, ee wennst  <EIN>  druckst.
 
-  5. Dyr Wimm schreibt de ausgwaltn Zeil  eyn de Dautticht POCH einhin.  Benutz
+  5. Dyr Wimm schreibt de ausgwaltn Zeiln eyn de Dautticht POCH einhin.  Benutz
      :!dir  older  :!ls  ,  däßst dös Ã¼berprüeffst. Lösh s fein nit Ã¶bbenn! Mir
      brauchend s nömlich für de naehste Letzn.
 
 Anmörkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n Mörkl um-
             aynandfarn,  um d Auswal  z veröndern.  Drafter kan myn mit yn aynn
-            Pfemerer  mit dönn Gwort  Ã¶bbs machen.  Zo n Beispil löscht  d  dös
+            Pfemerer mit dönn Gwort Ã¶bbs machen.  Zo n Beispil löscht   d   dös
             Gwort.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                Letzn 5.4: EINLÖSN UND ZAMMENFÃœERN VON DAUTTICHTN   
@@ -692,10 +692,10 @@ Anm
                          ZAMMENFASSUNG VON DYR LETZN 5
 
 
-  1. :!FAUDUNG füert aynn ausserignen Befelh aus.
+  1. :!FAUDUNG  füert aynn ausserignen Befelh aus.
 
       Daader ayn Ã–ttlych gwänddte Beispiler:
-      (Fenstl)              (Ainsl - Leinsl)
+      (Fenstl)              (Unix - Linux)
       :!dir                 :!ls                - listt s Verzaichniss auf.
       :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
 
@@ -715,19 +715,19 @@ Anm
                         Letzn 6.1: ZEIL Ã–FFNEN (»open«)
 
 
-        ** Zipf o, um ayn Zeil unterhalb n Mörkl z Ã¶ffnen und eyn d **
+       ** Zipf  o  , um ayn Zeil unterhalb n Mörkl z Ã¶ffnen und eyn d **
                         ** Einfüegartweis z kemmen. **
 
-  1. Bewög Ã¶nn Mörkl zo dyr eerstn mit ---> angmörktn Zeil unt.
+  1. Bewög Ã¶nn Mörkl zo dyr eerstn mit  --->  angmörktn Zeil unt.
 
-  2. Zipf o (klain),  um ayn Zeil  UNTERHALB n Mörkl z Ã¶ffnen  und mit dyr Ein-
+  2. Zipf  o  (klain),  um ayn Zeil UNTERHALB n Mörkl z Ã¶ffnen und mit dyr Ein-
      füegartweis weiterztuen.
 
-  3. Ietz zipf ayn Weeng ayn Gwort und druck <ESC>,  um d Einfüegartweis z ver-
+  3. Ietzet zipf ayn Weeng Ã¶bbs  und druck  <ESC>  , um d Einfüegartweis z ver-
      laassn.
----> Mit  o  werd dyr Mörkl auf de offene Zeil in dyr Einfüegartweis gsötzt.
+---> Mit  o  werd dyr Mörkl in dyr Einfüegartweis auf de offene Zeil gsötzt.
 
-  4. Um ayn Zeil OBERHALB n Mörkl aufzmachen,  gib ainfach aynn groosss O statt
+  4. Um ayn Zeil  OBERHALB n Mörkl aufzmachen,  gib ainfach ayn groosss O statt
      yn aynn klainen ein. Versuech dös auf dyr untignen Zeil.
 
 ---> Ã–ffnet ayn Zeil Ã¼ber derer daader mit  O  ,  wenn dyr Mörkl auf derer Zeil
@@ -740,14 +740,14 @@ Anm
 
                 ** Zipf  a  , um Ã¶bbs NAACH n Mörkl einzfüegn. **
 
-  1. Bewög Ã¶nn Mörkl gan n Anfang von dyr eerstn Ãœebungszeil mit ---> unt.
+  1. Bewög Ã¶nn Mörkl gan n Anfang von dyr eerstn Ãœebungszeil mit  --->  unt.
 
   2. Druck  e  , hinst däß dyr Mörkl an n End von  Zei  steet.
 
   3. Zipf ayn klains  a  , um Ã¶bbs NAACH n Mörkl anzfüegn.
 
-  4. Vergöntz dös Wort wie in dyr Zeil drunter.  Druck <ESC>, um d Schreib-Art-
-     weis z verlaassn.
+  4. Vergöntz dös Wort  wie in dyr Zeil drunter.  Druck  <ESC>  , um d Schreib-
+     Artweis z verlaassn.
 
   5. Bewög di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
      4.
@@ -763,13 +763,13 @@ Anm
 
  ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z ersötzn. **
 
-  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen, mit ---> angmörktn Zeil.
+  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen, mit  --->  angmörktn Zeil.
      Gee mit n Mörkl gan n Anfang von n eerstn  xxx  .
 
   2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
      yso däß de sel s xxx ersötzt.
 
-  3. Druck <ESC> ,  um d Ersötzungsartweis  z verlaassn.  Du gspannst,  däß dyr
+  3. Druck  <ESC>  ,  um d Ersötzungsartweis z verlaassn.  Du gspannst, däß dyr
      Rest von dyr Zeil unveröndert bleibt.
 
   4. Ã„fert die Schritt, um dös Ã¼berblibne xxx z ersötzn.
@@ -795,14 +795,14 @@ Anm
 
   5. Demmlt  p  , um dös Gwort einzfüegn, und aft:  a zwaitte <ESC>  .
 
-  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln,  aam s pfelfs  y,  be-
+  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln, aam s mittls  y  , be-
      wög di gan n End von dyr naehstn Zeil mit  j$   und füeg s Gwort dortn mit
      p  an.
 
 --->  a) dös ist dyr eerste Eintrag.
       b)
-
-Anmörkung: Du kanst  y  aau als Pfemerer verwenddn;  yw  aamt ain Wort.
+Anmörkung:   Du kanst   y   aau als Pfemerer verwenddn;   yw  zo n Beispil aamt
+             hinst eyn n naehstn Wortanfang (aane dönn selber).
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            Letzn 6.5: SCHALTTER SÖTZN
 
@@ -829,18 +829,18 @@ Anm
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          ZAMMENFASSUNG VON DYR LETZN 6
 
-  1. Zipf  o  ,  um ayn Zeil  UNTERHALB n Mörkl z Ã¶ffnen und d Einfüegartweis z
-                 ginnen.
-     Zipf  O  ,  um ayn Zeil OBERHALB n Mörkl z Ã¶ffnen.
+  1. Zipf  o  , um ayn Zeil  UNTERHALB  n Mörkl z Ã¶ffnen und d Einfüegartweis z
+                ginnen.
+     Zipf  O  , um ayn Zeil OBERHALB n Mörkl z Ã¶ffnen.
 
-  2. Zipf  a  ,  um NAACH n Mörkl ayn Gwort einzfüegn.
-     Zipf  A  ,  um ayn Gwort naach n Zeilnend anzfüegn.
+  2. Zipf  a  , um NAACH n Mörkl ayn Gwort einzfüegn.
+     Zipf  A  , um ayn Gwort naach n Zeilnend anzfüegn.
 
   3. D Faudung  e  bringt di gan n End von aynn Wort.
 
   4. Dyr Pfemerer  y  (»yank«) aamt Ã¶bbs,  p  (»put«) füegt dös ein.
 
-  5. Ayn groosss  R  geet eyn d Ersötzungsartweis,  hinst däß myn <ESC> druckt.
+  5. Ayn groosss  R  geet eyn d Ersötzungsartweis, hinst däß myn  <ESC> druckt.
 
   6. D Eingaab von ":set xxx"  sötzt de Zwisl "xxx".  Ayn Ã–ttlych Zwisln seind:
      'ic' 'ignorecase'   Grooß/klain wurst bei ayner Suech
@@ -853,7 +853,7 @@ Anm
                       Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
 
 
-            ** Nutz dös einbaute Hilfgebäu, de "Betribsanlaittung" **
+           ** Nutz dös einbaute Hilfgebäu, de "Betribsanlaittung". **
 
   Eyn n Wimm  ist ayn ausfüerliche "Gebrauchsanweisung"  einbaut.  Für s Eerste
   pröblt ainfach ains von dene dreu aus:
@@ -866,7 +866,7 @@ Anm
   Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
 
   Du kanst zo so guet wie allssand ayn Hilf finddn,  indem däßst yn dyr Faudung
-  :help   aynn Auerwerd naachstöllst und istig <EIN> nit vergisst.  Pröblt dös:
+  :help  aynn Auerwerd naachstöllst und istig  <EIN>  nit vergisst. Pröblt dös:
 
      :help w
      :help c_CTRL-D
@@ -876,14 +876,14 @@ Anm
                        Letzn 7.2: ERSTÖLL AYN GIN-SCHRIPF
 
 
-            ** Mutz Ã¶nn Wimm mit de einbautn Faehigkeitn auf **
+              ** Mutz Ã¶nn Wimm mit de einbautn Faehigkeitn auf. **
 
   Dyr Wimm besitzt ayn Wösn Schäftungen,  wo Ã¼ber n Urwimm aushingeend, aber de
   meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
   ausherholst, erstöllst ayn "vimrc"-Dautticht.
 
   1. Lög ayn "vimrc"-Dautticht an;  dös geet  ie naach Betribsgebäu  verschidn:
-     :e ~/.vimrc     für s Ainsl
+     :e ~/.vimrc     für s Unix
      :e $VIM/_vimrc  bei n Fenstl
 
   2. Ietz lis Ã¶nn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
@@ -892,14 +892,14 @@ Anm
   3. Speichert de Dautticht mit:
      :w
 
-  4. Bei n naehstn Gin von n Wimm  ist aft d Füegnussvürherhöbung  zuegschaltt.
+  4. Bei n naehstn Gin von n Wimm  ist aft d Füegnussvürherhöbung zuegschalttn.
      Du kanst dyr allss  eyn dö Dautticht  einhinschreibn,  wasst bständig habn
      willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                               Letzn 7.3: VERGÖNTZN
 
 
-               ** Befelhszeilnvergöntzung mit <STRG>d und <TAB> **
+            ** Befelhszeilnvergöntzung mit  <STRG>d  und  <TAB>  **
 
   1. Vergwiß di, däß dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
 
@@ -907,22 +907,22 @@ Anm
      older   :!dir
   3. Zipf Ã¶nn Anfang von ayner Faudung:   :e
 
-  4. Druck  <STRG>d  ,  und dyr Wimm zaigt ayn Listn von Faudungen,  wo mit "e"
+  4. Druck  <STRG>d  , und dyr Wimm zaigt ayn Listn von Faudungen, wo mit   "e"
      angeend.
-  5. Druck  <TAB>  ,  und dyr Wimm vervollstöndigt  Ã¶nn Faudungsnam zo ":edit".
+  5. Druck  <TAB>  , und dyr Wimm vervollstöndigt Ã¶nn Faudungsnam zo   ":edit".
 
   6. Füeg  ayn Laerzaichen  und Ã¶nn Anfang  von ayner  besteehetn Dautticht an:
      :edit DAU
 
-  7. Druck <TAB>.  Dyr Wimm vergöntzt Ã¶nn Nam,  dös haisst,  wenn yr aindeuttig
+  7. Druck  <TAB>  . Dyr Wimm vergöntzt Ã¶nn Nam, dös haisst, wenn yr aindeuttig
      ist.
 Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfach
-           <STRG>d  und  <TAB>.  Bsunders nützlich ist dös bei   :help  .
+            <STRG>d  und  <TAB>  . Bsunders nützlich ist dös bei   :help  .
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          ZAMMENFASSUNG VON DYR LETZN 7
 
 
-  1. Zipf  :help   older druck <F1> older <HILF>,  um ayn Hilffenster z Ã¶ffnen.
+  1. Zipf  :help  oder druck  <F1>  oder  <HILF> , um ayn Hilffenster z Ã¶ffnen.
 
   2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
 
@@ -932,9 +932,9 @@ Anm
 
   5. Erstöll ayn vimrc-Ginschripf  zuer Sicherung von deine Mötzneinstöllungen.
 
-  6. Druck <STRG>d, aft däßst naach  :  mit ayner Faudung angfangt haast,  dyr-
+  6. Druck  <STRG>d  , aft däßst naach   :   ayn Faudung  angfangt haast,  dyr-
      mitst mügliche Vergöntzungen anzaigt kriegst.
-     Druck <TAB> für ain Vervollstöndigung yllain.
+     Druck  <TAB>  für ain Vervollstöndigung yllain.
 
 
 
@@ -944,10 +944,10 @@ Anm
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
   Dös wär ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
-  und bündignen Ãœberblik Ã¼ber s Blat  WIMM z lifern,  netty vil gnueg,  däß myn
+  und bündignen Ãœberblik  Ã¼ber s Blat WIMM z lifern,  netty vil gnueg,  däß myn
   für s Eerste  wirklich Ã¶bbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
   Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
-  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual   .
+  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual
 
   Zo n Weiterlösn und Weiterlernen wör dös Buech daader zo n Empfelhen:
     Vim - Vi Improved - von n OUALLINE Steve
@@ -962,26 +962,20 @@ Anm
   3897211262
   In dönn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
   De söxte Ausgaab enthaltt aau schoon Ã¶bbs Ã¼ber n Wimm.
-  Als ietzunde Bezugniss  für d Fassung  6.2  und ayn pfrenge Einfüerung  dient
-  dös folgete Buech:
+  Als ietzunde Bezugniss für d Fassung 7  und ayn pfrenge Einfüerung  dient dös
+  folgete Buech:
     vim ge-packt  von n WOBST Reinhard
-    mitp-Verlaag, Buechlaittzal 3-8266-1425-9
+    mitp-Verlaag, Buechlaittzal 978-3-8266-1781-2
   Trotz dyr recht pfrengen Darstöllung  ist s durch seine viln nützlichnen Bei-
   spiler aau für Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
-  seind zesig zo n Kriegn; see http://iccf-holland.org/click5.html
+  seind zesig zo n Kriegn; see   http://iccf-holland.org/click5.html
 
   Verfasst habnd dönn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
   Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwürff, wo
   dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
-  zuer Verfüegung gstöllt haat. Gundpost: bware@mines.colorado.edu.
+  zuer Verfüegung gstöllt haat. Gundpost:   bware@mines.colorado.edu
   Für n Wimm haat n dyr MOOLENAAR Bram barechtt.
-  De bairische Ãœbersötzung stammt von n HELL Sepp 2009. Sein Gundpostbrächt ist
-  sturmibund@t-online.de 
+  De bairische Ãœbersötzung  stammt von n HELL Sepp 2009,  ayn Weeng Ã¼berarechtt
+  2011. Sein Gundpostbrächt ist   sturmibund@t-online.de
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  
-
-
-
-
similarity index 81%
rename from runtime/tutor/tutor.bj.utf-8
rename to runtime/tutor/tutor.bar.utf-8
index 80c3ade..b8e4d10 100644 (file)
@@ -1,5 +1,5 @@
 ===============================================================================
-=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7D   =
+=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7    =
 ===============================================================================
 
    Dyr Wimm ist ayn gro mächtigs Blat, dös was mit aynn Wösn Befelh aufwartt; z
    OBACHT:
    Die Faudungen,  wost daader finddst,  gaand istig  s Gwort Ã¶ndern.  Dösswögn
    machst eyn n Böstn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
-   dös Gwort daader  mit n Befelh "vimtutor bj"  ausherlaassn,  ist s ee schoon
+   dös Gwort daader mit n Befelh  "vimtutor bar"  ausherlaassn, ist s ee schoon
    ayn Aamum.
    Mir kan s  nit oft gnueg  sagn,  däß  der Schainer daader  istig  gan n Ãœebn
-   ghoert.  Also muesst schoon aau die Befelh ausfüern,  wennst ys gscheid ler-
+   ghoert.  Also muesst schoon aau die Befelh +ausfüern, wennst ys gscheid ler-
    nen willst. Mit n Lösn yllain ist s +nit taan!
 
    Ietz schaust grad non, däß dein Föststölltastn nit druckt ist; und aft geest
@@ -24,7 +24,7 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                       Letzn 1.1: MIT N MÖRKL UMAYNANDFARN
 
-**  Dyrmitst mit n Mörkl umaynandkimmst, druck h, j, k und l wie unt zaigt.  **
+** Dyrmitst mit n Mörkl umaynandkimmst, druck  h, j, k und l  wie unt zaigt. **
             ^            Ayn Ã–slsbrugg:
             k            De Tastn  h  ist winster und +geet aau gan winster.
    < h             l >   S  l  leit zesm und richtt si gan zesm.
             v            Mit n  k  kimmst gan n KOPF.            
   1. Ietz ruedertst ainfach mit n Mörkl auf n Bildschirm umaynand,  hinst däßst
      di sicher füelst.
-  2. Halt  d Abhin-Tastn (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
+  2. Halt d Abhin-Tastn  (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
      kimmst gan dyr naehstn Letzn.
      
   3. Wie gsait, ietz bewögst di also mit derer Tastn gan dyr Letzn 1.2.
 
 Non Ã¶bbs: Allweil, wenn dyr niemer ganz wol ist, wasst Ã¶bbenn druckt haast, aft
-          zipfst  <ESC>;  naacherd bist wider ganz gwon in dyr Befelhs-Artweis.
+          zipfst  <ESC>  ; naacher bist wider ganz gwon in dyr Befelhs-Artweis.
 
       
           Nöbnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
@@ -53,17 +53,17 @@ Non Ã¶bbs: Allweil, wenn dyr niemer ganz wol ist, wasst Ã¶bbenn druckt haast, af
 
   1. Druck d <ESC>-Tastn, dyrmitst aau gwiß in dyr Befelhs-Artweis bist.
   
-  2. Demmlt  :q! <EIN>.
+  2. Demmlt  :q!<EIN>  .
      Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst Ã¶bbenn  göndert
      haast.
 
   3. Balst Ã¶nn Eingib seghst, gib dö Faudung ein,  wo di zo dönn Schainer brun-
-     gen haat, also    vimtutor bj <EIN>.
+     gen haat, also   vimtutor bar<EIN>  .
 
   4. Also, wenn ietz allsse sitzt, naacherd füerst d Schritt 1 hinst 3 aus, mit
      wasst ys Blat verlaasst und aft wider einhinkimmst.
 
-Anmörkung: Mit  :q! <EIN> verwirffst allss, wasst göndert older enther gschribn
+Anmörkung: Mit  :q!<EIN>  verwirffst allss, wasst göndert older enther gschribn
            haast. In aynn Ã–ttlych Letznen lernst acht, wiest dös allss in ayner
            Dautticht speichertst.
 
@@ -73,7 +73,7 @@ Anmörkung: Mit  :q! <EIN> verwirffst allss, wasst göndert older enther gschrib
          
          ** Druck  x  , dyrmitst dös Zaichen unter n Mörkl löschst. **
 
-  1. Bewög di mit n Mörkl auf de mit  ---> angmörkte Zeil unt.
+  1. Bewög di mit n Mörkl auf de mit  --->  angmörkte Zeil unt.
 
   2. Zo n Faeler Verbössern  farst mit n Mörkl  netty  auf dös Zaichen,  dös wo
      glöscht ghoert.
@@ -96,14 +96,14 @@ Und ganz wichtig:  Dyrweilst dönn Schainer durcharechtst,  versuech nit Ã¶bbenn
 
                   **  Druck  i  , dyrmitst Ã¶bbs einfüegst. **
 
-  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen Zeil, wo mit ---> angeet.
+  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen Zeil, wo mit  --->  angeet.
 
   2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewög Ã¶nn Mörkl  auf dös
      eerste Zaichen NAACH derer Stöll, daa wo s Gwort eingfüegt werdn sollt.
 
   3. Druck  i  und gib dös ein, was abgeet.
 
-  4. Wenn ieweils ayn Faeler verweitert ist, aft druck <ESC>; und dyrmit kimmst
+  4. Wenn ieweils ayn Faeler verweitert ist, aft druck   <ESC>  ; dyrmit kimmst
      gan dyr Befelhsartweis zrugg.
      So, und ietz tuest ainfach yso weiter, hinst däß dyr Saz stimmt.
 
@@ -119,15 +119,15 @@ Und ganz wichtig:  Dyrweilst dönn Schainer durcharechtst,  versuech nit Ã¶bbenn
 
                       ** Druck  A  gan n Gwort Anfüegn. **
 
-  1. Gee mit n Mörkl gan dyr eerstn untignen Zeil, wo ayn ---> dyrvor haat.
+  1. Gee mit n Mörkl gan dyr eerstn untignen Zeil, wo ayn  --->  dyrvor haat.
      Daa ist s gleich, wo gnaun dyr Mörkl in derer Zeil steet.  
 
   2. Demmlt  A  und gib de entspröchetn Ergöntzungen ein.
 
-  3. Wennst  mit n Anfüegn förtig bist,  aft druckst <ESC>,  däßst wider eyn de
+  3. Wennst mit n Anfüegn förtig bist, aft druckst  <ESC>  , däßst wider eyn de
      Befelhsartweis zruggkimmst.
 
-  4. So,  und ietz geest aft non gan dyr zwaittn  mit ---> angmörktn Zeil;  und
+  4. So,  und ietz geest aft non gan dyr zwaittn mit  --->  angmörktn Zeil; und
      daadl machst ys netty yso.
 
 ---> In derer Zeil gee  
@@ -147,14 +147,14 @@ Und ganz wichtig:  Dyrweilst dönn Schainer durcharechtst,  versuech nit Ã¶bbenn
 
   1. Verlaaß also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
 
-  2. Gib dö Faudung eyn n Eingib ein:  vim Schainer <EIN> . 'vim' ruefft s Blat
-     auf,  und 'Schainer'  haisst de Dautticht,  wost barechtn  willst.  Dyrmit
+  2. Gib dö Faudung eyn n Eingib ein:  vim Schainer<EIN>  . 'vim' ruefft s Blat
+     auf,  und  'Schainer'  haisst de Dautticht,  wost barechtn willst.  Dyrmit
      haast also ayn Dautticht, dö wost barechtn kanst.
 
   3. Ietz  füegst Ã¶bbs ein older löschst Ã¶bbs,  wiest ys in de vorignen Letznen
      glernt haast.
 
-  4. Speichert de gönderte Dautticht und verlaaߠönn Wimm mit  :wq  <EIN>  .
+  4. Speichert de gönderte Dautticht und verlaaߠönn Wimm mit  :wq<EIN>  .
 
   5. Schmeiߠönn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
 
@@ -166,31 +166,31 @@ Und ganz wichtig:  Dyrweilst dönn Schainer durcharechtst,  versuech nit Ã¶bbenn
   1. Dyr Mörkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
               h (winst)     j (ab)        k (auf)       l (zes)
 
-  2. Um Ã¶nn Wimm umbb n Eingib aus z ginnen, demmlt: vim DAUTTICHT <EIN> .
+  2. Um Ã¶nn Wimm umbb n Eingib aus z ginnen, demmlt:  vim DAUTTICHT<EIN>  .
 
   3. Willst Ã¶nn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
-                <ESC>  :q!  <EIN> .
-     Gan n Verlaassn und Speichern aber zipfst <ESC>  :wq  <EIN>.
+                <ESC>  und  :q!<EIN>  .
+     Gan n Verlaassn und Speichern aber zipfst  <ESC>  und  :wq<EIN>  .
 
   4. Willst dös Zaichen löschn, daa wo dyr Mörkl drauf ist, demmltst  x  .
 
   5. Willst Ã¶bbs vor n Mörkl eingöbn, zipfst  i  und drafter  <ESC>  .
      Mechst ys aber eyn s Zeilnend anhinhöngen, benutzt ys   A  .
-     Und ainfach naach n Mörkl füegst ys mit  a  ein  .
+     Und ainfach naach n Mörkl füegst ys mit  a  ein.
 
-Anmörkung:  Druckst <ESC>, kimmst eyn de Befelhsartweis zrugg older brichst ayn
-            Faudung ab, dö wo dyr schiefgangen ist.
+Anmörkung:  Druckst  <ESC>  ,  kimmst eyn de Befelhsartweis zrugg older brichst
+            ayn Faudung ab, dö wo dyr schiefgangen ist.
 
      Ietz tue mit dyr Letzn 2 weiter.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            Letzn 2.1.: LÖSHFAUDUNGEN
 
 
-                 ** Demmlt  dw  , dyrmitst ayn Wort löschst **
+                 ** Demmlt  dw  , dyrmitst ayn Wort löschst. **
 
-  1. Druck  <ESC>, dyrmit s aau gwiß ist, däßst in dyr Befelhsartweis bist.
+  1. Druck  <ESC>  ,  dyrmit s aau gwiß ist,  däßst in dyr Befelhsartweis bist.
 
-  2. Bewög Ã¶nn Mörkl zo dyr mit ---> angmörktn Zeil unt.
+  2. Bewög Ã¶nn Mörkl zo dyr mit  --->  angmörktn Zeil unt.
 
   3. Und daa geest ietz auf n Anfang von aynn Wort, dös wo glöscht ghoert.
 
@@ -211,9 +211,9 @@ Anmörkung:  Druckst <ESC>, kimmst eyn de Befelhsartweis zrugg older brichst ayn
 
             ** Gib  d$  ein, däßst hinst eyn s Zeilnend löschst. **
 
-  1. Druck <ESC> , dyrmitst aau gwiß in dyr Befelhsartweis bist.
+  1. Druck  <ESC>  , dyrmitst aau gwiß in dyr Befelhsartweis bist.
 
-  2. Bewög Ã¶nn Mörkl hinst eyn de mit ---> angmörkte Zeil untn.
+  2. Bewög Ã¶nn Mörkl hinst eyn de mit  --->  angmörkte Zeil untn.
 
   3. Gee mit n Mörkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
 
@@ -243,11 +243,11 @@ Anmörkung:  Druckst <ESC>, kimmst eyn de Befelhsartweis zrugg older brichst ayn
 
 
   Daader also, was i wie löschn kan:
-    w - hinst eyn n Anfang von n naehstn Wort AANE dönn sein eersts Zaichen.
-    e - gan n End von n ietzundn Wort MIT dönn seinn lösstn Zaichen.
-    $ - zo n End von dyr Zeil MIT derer irn lösstn Zaichen.
+     w  -  hinst eyn n Anfang von n naehstn Wort AANE dönn sein eersts Zaichen.
+     e  -  gan n End von n ietzundn Wort MIT dönn seinn lösstn Zaichen.
+     $  -  zo n End von dyr Zeil MIT derer irn lösstn Zaichen.
 
-  Also löscht de Tastnfolg  de  umbb n Mörkl hinst eyn s Wortend.
+  Also löscht de Tastnfolg  de  allss umbb n Mörkl hinst eyn s Wortend.
 Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mörkl
              entspröchet weiter.
 
@@ -255,9 +255,9 @@ Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mör
                    Letzn 2.4: MIT AYNN ZÖLER D WOLENDER Ã„FERN
 
 
     ** Gib i ayn Zal vor aynn Wolend ein, werd dös Sel halt widerholt. **
** Gib i ayn Zal vor aynn Wolend ein, werd dös Sel entspröchet oft gangen. **
 
-  1. Bewög Ã¶nn Mörkl gan n Anfang von dyr Zeil mit ---> dyrvor unt.
+  1. Bewög Ã¶nn Mörkl gan n Anfang von dyr Zeil mit  --->  dyrvor unt.
 
   2. Zipf  2w  , däßst mit n Mörkl zwai Wörter weitergeest.
 
@@ -278,13 +278,13 @@ Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mör
                  Letzn 2.5: DURCH AYNN ZÖLER GLEI MEERER LÖSCHN
 
 
-              ** Ayn Zal vor aynn Pfemerer Ã¤fert dönn um seln Werd. **
+        ** Ayn Zal vor aynn Pfemerer füert dönn entspröchet oft aus. **
 
   Also, i mecht löschn,  und zwaar Ã¶bbs Bestimmts,  und dös so und so oft:  Daa
   dyrzue benutz i aynn Zöler:
                               d  Zöler  Wolend (also Ã¶nn Bewögungsschrit)
 
-  1. Bewög Ã¶nn Mörkl  gan n eerstn Wort in GROOSSBUECHSTABN in dyr mit ---> an-
+  1. Bewög Ã¶nn Mörkl zo n eerstn Wort in GROOSSBUECHSTABN in dyr mit  --->  an-
      gmörktn Zeil.
 
   2. Demmlt  d2w  , dyrmitst de ganz grooßgschribnen Wörter löschst.
@@ -325,9 +325,9 @@ Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mör
 
 
              ** Zipf  u  , dyrmitst de lösstn Faudungen ruggltst **
-              ** older  U  , um ayn gantze Zeil widerherzstölln. **
+             ** older   U  , um ayn gantze Zeil widerherzstölln. **
 
-  1. Bewög Ã¶nn Mörkl  gan dyr mit ---> angmörktn Zeil unt  und gee dyrmit auf n
+  1. Bewög Ã¶nn Mörkl gan dyr mit  --->  angmörktn Zeil unt und gee dyrmit auf n
      eerstn Faeler.
   2. Zipf  x  , däßst dös eerste z vile Zaichen löschst.
   3. Ietz demmlt  u  , dyrmitst de lösste Faudung ruggltst.
@@ -358,13 +358,13 @@ Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mör
       Dyr PFEMERER gibt an, WAS taan ghoert, Ã¶bbenn   d   =  löschn (»delete«).
       [ZAL] - Ayn Zal KAN myn angöbn, wenn myn halt ayn Wolend Ã¶fter habn will.
       S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  Ã¶bbenn
-      auf ayn Wort (  w  ), s End von dyr Zeil (  $  ) und so weiter.
+      auf aynn Wortanfang (  w  ), s End von dyr Zeil (  $  ) und so weiter.
 
   6. Däßst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
 
   7. Um Ã¶bbs Vorigs wider z ruggln, gib ein:                u (klain also)
      Um allsand Ã–nderungen in ayner Zeil z ruggln, haast:   U (also grooß)
-     Um "rugg-z-ruggln", also allss wider herzstölln, zipf: <STRG>r   
+     Um "rugg-z-ruggln", also allss wider herzstölln, zipf:  <STRG>r   
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            Letzn 3.1: ANFÃœEGN (»put«) 
@@ -372,10 +372,10 @@ Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mör
 
      ** Zipf  p  , dyrmitst Ã¶bbs gnetty Glöschts naach n Mörkl anfüegst. **
 
-  1. Bewög Ã¶nn Mörkl gan dyr eerstn untignen Zeil mit   --->   dyrvor.
+  1. Bewög Ã¶nn Mörkl gan dyr eerstn untignen Zeil mit  --->  dyrvor.
 
-  2. Zipf  dd  , um sele Zeil z löschn  und dyrmit  in aynn Wimm-"Roster"  zo n
-     speichern.
+  2. Zipf  dd  ,  um sele Zeil z löschn und dyrmit in ayner Wimm-Osn zo n Spei-
+     chern.
 
   3. Bewög Ã¶nn Mörkl gan dyr Zeil c),  ÃœBER derer, daa wo de glöschte Zeil ein-
      hinkemmen sollt.
@@ -395,7 +395,7 @@ Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mör
 
       ** Zipf  rx  , um dös Zaichen unter n Mörkl durch  x  z ersötzn. **
 
-  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen Zeil mit   --->   dyrvor.
+  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen Zeil mit  --->  dyrvor.
 
   2. Bewög Ã¶nn Mörkl, hinst däß yr auf n eerstn Faeler steet.
 
@@ -418,13 +418,13 @@ Anmörkung: Vergiß nit drauf, däßst mit n Anwenddn lernen solltst und nit Ã¶b
 
               ** Um hinst eyn s Wortend z Ã¶ndern, zipf  ce  . **
 
-  1. Gee mit n Mörkl auf de eerste mit ---> angmörkte Zeil.
+  1. Gee mit n Mörkl auf de eerste mit  --->  angmörkte Zeil.
 
   2. Ietz farst netty auf s  "s"  von Wstwr hin.
 
   3. Zipf  ce  ein und aft d Wortberichtigung, daader also  Ã¶rter  .
 
-  4. Druck <ESC> und bewög Ã¶nn Mörkl gan n naehstn Zaichen,  wo göndert ghoert.
+  4. Druck  <ESC>  und bewög Ã¶nn Mörkl zo n naehstn Zaichen, wo göndert ghoert.
 
   5. Ã„fert  d Schritt 3 und 4,  hinst däß  dyr eerste Saz  wie dyr zwaitte ist.
 
@@ -443,12 +443,12 @@ ce  löscht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
 
   1. Dyr Ã–nder-Pfemerer arechtt anleich wie d Löshfaudung mit   d  ,  und zwaar
      yso:
-         c    [Zal]   Bewögungsschritt (Wolend)
+         c    [Zal]   Bewögungsschrit (Wolend)
 
-  2. D Wolender  seind  de gleichn,  Ã¶bbenn  w  für Wort und  $ für s Zeilnend.
+  2. D Wolender seind  de gleichn,  Ã¶bbenn  w  für Wort und  $  für s Zeilnend.
 
 
-  3. Bewög di zo dyr eerstn untignen Zeil mit ---> .
+  3. Bewög di zo dyr eerstn untignen Zeil mit  --->  .
 
   4. Ietz geest auf dönn eerstn Faeler.
 
@@ -494,14 +494,14 @@ Anmörkung: Lis dö gantze Letzn daader durch, ee wennst iewign Ã¶bbs unternimms
      Mörk dyr de Zeilnnummer für n Schrit 3.
 
 Anmörkung:  Müglicherweis  seghst aau Ã¶nn Mörklbefand  in n zesmen untern Bild-
-            schirmögg. Aft ist s "Lindl" (»ruler«) eingstöllt; schau dyrzue mit
-            n Befelh   :help 'ruler'   naach.
+            schirmögg. Aft ist s "Lindl" (»ruler«) eingstöllt;  meerer Ã¼ber dös
+            laasst dyr dyr Befelh   :help 'ruler'   ausher.
   2. Druck  G  , um an s End von dyr Dautticht z kemmen.
      gg  gibst ein, däßst gan n Anfang von dyr Dautticht aufhinkimmst.
 
   3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
      Dös bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest dös eerste
-     Maal <STRG>g gadruckst.
+     Maal  <STRG>g  gadruckst.
 
   4. Wennst di sicher gnueg füelst, aft füer d Schritt 1 hinst 3 aus.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -513,15 +513,15 @@ Anmörkung:  Müglicherweis  seghst aau Ã¶nn Mörklbefand  in n zesmen untern Bi
   1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. Dös sel wie aau dyr
      Mörkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
 
-  2. Ietz zipf 'Faeeler' <EIN>. Netty um dös 'Faeeler' willst ietz suechen.
+  2. Ietz zipf  Faeeler<EIN>  . Netty um dös 'Faeeler' willst ietz suechen.
 
   3. Willst um gnaun dönn Ausdruk weitersuechen, zipf ainfach  n  (wie Â»next«).
      Willst hinzrugg suechen, aft gibst  N  ein.
 
   4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
 
-  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, druck <STRG>o,  und dös
-     Ã¶fter,  wennst weiter zrugg willst.  Mit <STRG>i widerum  kimmst vorwärts.
+  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, nimm  <STRG>o , und dös
+     Ã¶fter,  wennst weiter zrugg willst. Mit  <STRG>i  widerum kimmst vorwärts.
 
 --->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
 
@@ -534,7 +534,7 @@ Anmörkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
    ** Zipf  %  , um de entspröchete Klammer  )  ,  ]  older  }  z finddn. **
 
   1. Sötz Ã¶nn Mörkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
-     in dyr untignen Zeil, wo mit ---> angmörkt ist.
+     in dyr untignen Zeil, wo mit  --->  angmörkt ist.
 
   2. Ietzet zipf s Zaichen  %  .
 
@@ -556,7 +556,7 @@ Anmörkung:  Um dö Müglichkeit gaast bsunders froo sein,  wennst aynmaal in ay
 
         ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n Ersötzn. **
 
-  1. Gee mit n Mörkl zo dyr unt steehetn mit ---> angmörktn Zeil.
+  1. Gee mit n Mörkl zo dyr unt steehetn mit  --->  angmörktn Zeil.
 
   2. Zipf  :s/dee/de <EIN>  . Der Befelh ersötzt alsnan grad dös +eerste "dee",
      wo vürkimmt.
@@ -577,60 +577,60 @@ Anmörkung:  Um dö Müglichkeit gaast bsunders froo sein,  wennst aynmaal in ay
                          ZAMMENFASSUNG VON DYR LETZN 4
                         
   1. <STRG>g   zaigt dönn ietzundn Dauttichtbefand  und Ã¶nn Darstand dyrvon an.
-           G  bringt di an s End von dyr Dautticht.
-     <Zal> G  bringt di gan dyr entspröchetn Zeilnnummer.
-          gg  bringt di zo dyr eerstn Zeil.
-          
+           G   bringt di an s End von dyr Dautticht.
+      <Zal>G   bringt di gan dyr entspröchetn Zeilnnummer.
+     <Zal>gg   geet +grad yso.
+          gg   bringt di zo dyr eerstn Zeil.
   2. D Eingaab von  /  mit aynn Ausdruk suecht VÃœRSHLING um dönn Ausdruk.
      Gibst  ?  und aynn Suechbegrif ein, suecht s um dönn Ã„RSHLING.
      Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
-     gsuecht. Mit  N geet s umkeerter weiter.
-     <STRG>o bringt di zo Ã¶lterne Befändd zrugg, <STRG>i zo neuerne.
+     gsuecht. Mit  N  geet s umkeerter weiter.
+     <STRG>o  bringt di zo Ã¶lterne Befändd zrugg,  <STRG>i  zo neuerne.
 
   3. D Eingaab von  % , wenn dyr Mörkl auf ainer von dene Klammern steet:   ({[
      )]}  , bringt di zo dyr Gögnklammer.
 
-  4. Um dös eerste Vürkemmen  von "alt"  in ayner Zeil  durch "neu"  z ersötzn,
-     zipf   :s/alt/neu   .
-     Um allsand in ayner Zeil z ersötzn, zipf   :s/alt/neu/g   .
+  4. Um dös eerste Vürkemmen von  "alt"  in ayner Zeil durch  "neu"  z ersötzn,
+     zipf  :s/alt/neu  .
+     Um allsand in ayner Zeil z ersötzn, zipf  :s/alt/neu/g  .
      Mechst allss in zwo Zeiln ersötzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
-     Mechst allss in dyr gantzn Dautticht ersötzn, gib ein:   :%s/alt/neu/g   .
+     Mechst allss in dyr gantzn Dautticht ersötzn, gib ein:  :%s/alt/neu/g    .
      Willst ayn ieds Maal bstaetln, höng 'c' wie Â»confirm« hint anhin.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
             Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFÃœERN 
             
 
-  ** Willst ayn Gfäßfaudung ausfüern, gib ainfach dö sel naach   :!   ein. **
+   ** Willst ayn Gfäßfaudung ausfüern, gib ainfach dö sel naach  :!  ein. **
  
   1. Zipf  dönn bekanntn Befelh   :  ,  dyrmitst  mit n Mörkl  auf n Bildschirm
      ganz abhin kimmst. Draufhin kanst aynn gwonen Gfäßbefelh eingöbn.
 
-  2. Zeerst  kimmt aber non ayn Ruefzaichen   !   .  Und ietz haast de Müglich-
+  2. Zeerst  kimmt aber non ayn Ruefzaichen   !  .  Und ietzet haast d Müglich-
      keit, ayn beliebige ausserige Gfäßfaudung auszfüern.
 
-  3. Als Beispil zipf   :!ls <EIN>  ; und schoon haast ayn Auflistung von deinn
+  3. Als Beispil zipf   :!ls<EIN>  ;  und schoon haast ayn Auflistung von deinn
      Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wärst.  Geet   ls
-     aus iewign aynn Grund nit, aft pröblt s mit  :!dir <EIN>  .
+     aus iewign aynn Grund nit, aft pröblt s mit  :!dir<EIN>  .
 
 Also non aynmaal: Mit dönn Angang kan ayn iede beliebige ausserige Faudung aus-
                   gfüert werdn, aau mit Auerwerdd.
 
-Und wolgmörkt:    Allsand Befelh, wo mit  :  angeend,  müessend mit <EIN> bstö-
-                  tigt werdn. Dös dyrsagn myr vürbaß niemer.
+Und wolgmörkt:    Alle Befelh,  wo mit  :  angeend,  müessend mit  <EIN>  bstö-
+                  tigt werdn. Dös dyrsagn myr fürbaß +niemer.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            Letzn 5.2: NON MEERER DRÃœBER, WIE MYN DAUTTICHTN SCHREIBT
 
 
-      ** Um Ã¶bbs Gönderts neu z speichern, zipf :w NEUER_DAUTTICHTNAM. **
+     ** Um Ã¶bbs Gönderts neu z speichern, zipf  :w NEUER_DAUTTICHTNAM  . **
 
   1. Zipf  :!dir   older  :!ls  ,  däßst dyr ayn Auflistung von deinn Verzaich-
-     niss ausherlaasst.  Däßst dyrnaach <EIN> eingöbn muesst, waisst ee schoon.
+     niss ausherlaasst. Däßst drafter  <EIN>  eingöbn muesst, waisst ee schoon.
 
-  2. Suech dyr aynn Dauttichtnam aus, dönn wo s non nit geit, Ã¶bbenn POCH.
+  2. Suech dyr aynn Dauttichtnam aus, dönn wo s non nit geit, Ã¶bbenn  POCH  .
 
-  3. Ietz demmlt:  :w POCH   (also mit POCH als dönn neuen Dauttichtnam).
+  3. Ietz demmlt:  :w POCH  (also mit POCH als dönn neuen Dauttichtnam).
 
   4. Dös speichert ietz de gantze Dautticht, also Ã¶nn Wimmschainer,  unter dönn
      Nam POCH. Dös kanst leicht Ã¼berprüeffen, indem däßst ainfach  :!ls   older
@@ -641,7 +641,7 @@ Anmörkung:  Stigst ietz aus n Wimm aus und gännst n aft wider mit   vim POCH
             wiest n gspeichert haast.
 
   5. Ietz verweitert dö Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
-     beziehungsweis bei aynn Ainslgebäu mit   :!rm POCH   .
+     beziehungsweis bei aynn Unixgebäu mit   :!rm POCH   .
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
             Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
 
@@ -655,15 +655,15 @@ Anmörkung:  Stigst ietz aus n Wimm aus und gännst n aft wider mit   vim POCH
   3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
 
   4. Zipf  w POCH  , wobei s dönn Dauttichtnam POCH  non nit geit.  Vergwiß di,
-     däßst dös  :'<,'>w POCH aau +seghst, ee wennst <EIN> druckst.
+     däßst dös  :'<,'>w POCH  aau +seghst, ee wennst  <EIN>  druckst.
 
-  5. Dyr Wimm schreibt de ausgwaltn Zeil  eyn de Dautticht POCH einhin.  Benutz
+  5. Dyr Wimm schreibt de ausgwaltn Zeiln eyn de Dautticht POCH einhin.  Benutz
      :!dir  older  :!ls  ,  däßst dös Ã¼berprüeffst. Lösh s fein nit Ã¶bbenn! Mir
      brauchend s nömlich für de naehste Letzn.
 
 Anmörkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n Mörkl um-
             aynandfarn,  um d Auswal  z veröndern.  Drafter kan myn mit yn aynn
-            Pfemerer  mit dönn Gwort  Ã¶bbs machen.  Zo n Beispil löscht  d  dös
+            Pfemerer mit dönn Gwort Ã¶bbs machen.  Zo n Beispil löscht   d   dös
             Gwort.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                Letzn 5.4: EINLÖSN UND ZAMMENFÃœERN VON DAUTTICHTN   
@@ -692,10 +692,10 @@ Anmörkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlösn.  Zo n Bei
                          ZAMMENFASSUNG VON DYR LETZN 5
 
 
-  1. :!FAUDUNG füert aynn ausserignen Befelh aus.
+  1. :!FAUDUNG  füert aynn ausserignen Befelh aus.
 
       Daader ayn Ã–ttlych gwänddte Beispiler:
-      (Fenstl)              (Ainsl - Leinsl)
+      (Fenstl)              (Unix - Linux)
       :!dir                 :!ls                - listt s Verzaichniss auf.
       :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
 
@@ -715,19 +715,19 @@ Anmörkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlösn.  Zo n Bei
                         Letzn 6.1: ZEIL Ã–FFNEN (»open«)
 
 
-        ** Zipf o, um ayn Zeil unterhalb n Mörkl z Ã¶ffnen und eyn d **
+       ** Zipf  o  , um ayn Zeil unterhalb n Mörkl z Ã¶ffnen und eyn d **
                         ** Einfüegartweis z kemmen. **
 
-  1. Bewög Ã¶nn Mörkl zo dyr eerstn mit ---> angmörktn Zeil unt.
+  1. Bewög Ã¶nn Mörkl zo dyr eerstn mit  --->  angmörktn Zeil unt.
 
-  2. Zipf o (klain),  um ayn Zeil  UNTERHALB n Mörkl z Ã¶ffnen  und mit dyr Ein-
+  2. Zipf  o  (klain),  um ayn Zeil UNTERHALB n Mörkl z Ã¶ffnen und mit dyr Ein-
      füegartweis weiterztuen.
 
-  3. Ietz zipf ayn Weeng ayn Gwort und druck <ESC>,  um d Einfüegartweis z ver-
+  3. Ietzet zipf ayn Weeng Ã¶bbs  und druck  <ESC>  , um d Einfüegartweis z ver-
      laassn.
----> Mit  o  werd dyr Mörkl auf de offene Zeil in dyr Einfüegartweis gsötzt.
+---> Mit  o  werd dyr Mörkl in dyr Einfüegartweis auf de offene Zeil gsötzt.
 
-  4. Um ayn Zeil OBERHALB n Mörkl aufzmachen,  gib ainfach aynn groosss O statt
+  4. Um ayn Zeil  OBERHALB n Mörkl aufzmachen,  gib ainfach ayn groosss O statt
      yn aynn klainen ein. Versuech dös auf dyr untignen Zeil.
 
 ---> Ã–ffnet ayn Zeil Ã¼ber derer daader mit  O  ,  wenn dyr Mörkl auf derer Zeil
@@ -740,14 +740,14 @@ Anmörkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlösn.  Zo n Bei
 
                 ** Zipf  a  , um Ã¶bbs NAACH n Mörkl einzfüegn. **
 
-  1. Bewög Ã¶nn Mörkl gan n Anfang von dyr eerstn Ãœebungszeil mit ---> unt.
+  1. Bewög Ã¶nn Mörkl gan n Anfang von dyr eerstn Ãœebungszeil mit  --->  unt.
 
   2. Druck  e  , hinst däß dyr Mörkl an n End von  Zei  steet.
 
   3. Zipf ayn klains  a  , um Ã¶bbs NAACH n Mörkl anzfüegn.
 
-  4. Vergöntz dös Wort wie in dyr Zeil drunter.  Druck <ESC>, um d Schreib-Art-
-     weis z verlaassn.
+  4. Vergöntz dös Wort  wie in dyr Zeil drunter.  Druck  <ESC>  , um d Schreib-
+     Artweis z verlaassn.
 
   5. Bewög di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
      4.
@@ -763,13 +763,13 @@ Anmörkung:   a  ,  i  und  A  bringend ainn gleichermaaßn eyn d Einfüegartwei
 
  ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z ersötzn. **
 
-  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen, mit ---> angmörktn Zeil.
+  1. Bewög Ã¶nn Mörkl zo dyr eerstn untignen, mit  --->  angmörktn Zeil.
      Gee mit n Mörkl gan n Anfang von n eerstn  xxx  .
 
   2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
      yso däß de sel s xxx ersötzt.
 
-  3. Druck <ESC> ,  um d Ersötzungsartweis  z verlaassn.  Du gspannst,  däß dyr
+  3. Druck  <ESC>  ,  um d Ersötzungsartweis z verlaassn.  Du gspannst, däß dyr
      Rest von dyr Zeil unveröndert bleibt.
 
   4. Ã„fert die Schritt, um dös Ã¼berblibne xxx z ersötzn.
@@ -795,14 +795,14 @@ Anmörkung: D Ersötzungsartweis ist wie d Einfüegartweis,  aber ayn ieds einde
 
   5. Demmlt  p  , um dös Gwort einzfüegn, und aft:  a zwaitte <ESC>  .
 
-  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln,  aam s pfelfs  y,  be-
+  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln, aam s mittls  y  , be-
      wög di gan n End von dyr naehstn Zeil mit  j$   und füeg s Gwort dortn mit
      p  an.
 
 --->  a) dös ist dyr eerste Eintrag.
       b)
-
-Anmörkung: Du kanst  y  aau als Pfemerer verwenddn;  yw  aamt ain Wort.
+Anmörkung:   Du kanst   y   aau als Pfemerer verwenddn;   yw  zo n Beispil aamt
+             hinst eyn n naehstn Wortanfang (aane dönn selber).
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            Letzn 6.5: SCHALTTER SÖTZN
 
@@ -829,18 +829,18 @@ Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          ZAMMENFASSUNG VON DYR LETZN 6
 
-  1. Zipf  o  ,  um ayn Zeil  UNTERHALB n Mörkl z Ã¶ffnen und d Einfüegartweis z
-                 ginnen.
-     Zipf  O  ,  um ayn Zeil OBERHALB n Mörkl z Ã¶ffnen.
+  1. Zipf  o  , um ayn Zeil  UNTERHALB  n Mörkl z Ã¶ffnen und d Einfüegartweis z
+                ginnen.
+     Zipf  O  , um ayn Zeil OBERHALB n Mörkl z Ã¶ffnen.
 
-  2. Zipf  a  ,  um NAACH n Mörkl ayn Gwort einzfüegn.
-     Zipf  A  ,  um ayn Gwort naach n Zeilnend anzfüegn.
+  2. Zipf  a  , um NAACH n Mörkl ayn Gwort einzfüegn.
+     Zipf  A  , um ayn Gwort naach n Zeilnend anzfüegn.
 
   3. D Faudung  e  bringt di gan n End von aynn Wort.
 
   4. Dyr Pfemerer  y  (»yank«) aamt Ã¶bbs,  p  (»put«) füegt dös ein.
 
-  5. Ayn groosss  R  geet eyn d Ersötzungsartweis,  hinst däß myn <ESC> druckt.
+  5. Ayn groosss  R  geet eyn d Ersötzungsartweis, hinst däß myn  <ESC> druckt.
 
   6. D Eingaab von ":set xxx"  sötzt de Zwisl "xxx".  Ayn Ã–ttlych Zwisln seind:
      'ic' 'ignorecase'   Grooß/klain wurst bei ayner Suech
@@ -853,7 +853,7 @@ Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \
                       Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
 
 
-            ** Nutz dös einbaute Hilfgebäu, de "Betribsanlaittung" **
+           ** Nutz dös einbaute Hilfgebäu, de "Betribsanlaittung". **
 
   Eyn n Wimm  ist ayn ausfüerliche "Gebrauchsanweisung"  einbaut.  Für s Eerste
   pröblt ainfach ains von dene dreu aus:
@@ -866,7 +866,7 @@ Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \
   Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
 
   Du kanst zo so guet wie allssand ayn Hilf finddn,  indem däßst yn dyr Faudung
-  :help   aynn Auerwerd naachstöllst und istig <EIN> nit vergisst.  Pröblt dös:
+  :help  aynn Auerwerd naachstöllst und istig  <EIN>  nit vergisst. Pröblt dös:
 
      :help w
      :help c_CTRL-D
@@ -876,14 +876,14 @@ Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \
                        Letzn 7.2: ERSTÖLL AYN GIN-SCHRIPF
 
 
-            ** Mutz Ã¶nn Wimm mit de einbautn Faehigkeitn auf **
+              ** Mutz Ã¶nn Wimm mit de einbautn Faehigkeitn auf. **
 
   Dyr Wimm besitzt ayn Wösn Schäftungen,  wo Ã¼ber n Urwimm aushingeend, aber de
   meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
   ausherholst, erstöllst ayn "vimrc"-Dautticht.
 
   1. Lög ayn "vimrc"-Dautticht an;  dös geet  ie naach Betribsgebäu  verschidn:
-     :e ~/.vimrc     für s Ainsl
+     :e ~/.vimrc     für s Unix
      :e $VIM/_vimrc  bei n Fenstl
 
   2. Ietz lis Ã¶nn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
@@ -892,14 +892,14 @@ Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \
   3. Speichert de Dautticht mit:
      :w
 
-  4. Bei n naehstn Gin von n Wimm  ist aft d Füegnussvürherhöbung  zuegschaltt.
+  4. Bei n naehstn Gin von n Wimm  ist aft d Füegnussvürherhöbung zuegschalttn.
      Du kanst dyr allss  eyn dö Dautticht  einhinschreibn,  wasst bständig habn
      willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                               Letzn 7.3: VERGÖNTZN
 
 
-               ** Befelhszeilnvergöntzung mit <STRG>d und <TAB> **
+            ** Befelhszeilnvergöntzung mit  <STRG>d  und  <TAB>  **
 
   1. Vergwiß di, däß dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
 
@@ -907,22 +907,22 @@ Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \
      older   :!dir
   3. Zipf Ã¶nn Anfang von ayner Faudung:   :e
 
-  4. Druck  <STRG>d  ,  und dyr Wimm zaigt ayn Listn von Faudungen,  wo mit "e"
+  4. Druck  <STRG>d  , und dyr Wimm zaigt ayn Listn von Faudungen, wo mit   "e"
      angeend.
-  5. Druck  <TAB>  ,  und dyr Wimm vervollstöndigt  Ã¶nn Faudungsnam zo ":edit".
+  5. Druck  <TAB>  , und dyr Wimm vervollstöndigt Ã¶nn Faudungsnam zo   ":edit".
 
   6. Füeg  ayn Laerzaichen  und Ã¶nn Anfang  von ayner  besteehetn Dautticht an:
      :edit DAU
 
-  7. Druck <TAB>.  Dyr Wimm vergöntzt Ã¶nn Nam,  dös haisst,  wenn yr aindeuttig
+  7. Druck  <TAB>  . Dyr Wimm vergöntzt Ã¶nn Nam, dös haisst, wenn yr aindeuttig
      ist.
 Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfach
-           <STRG>d  und  <TAB>.  Bsunders nützlich ist dös bei   :help  .
+            <STRG>d  und  <TAB>  . Bsunders nützlich ist dös bei   :help  .
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          ZAMMENFASSUNG VON DYR LETZN 7
 
 
-  1. Zipf  :help   older druck <F1> older <HILF>,  um ayn Hilffenster z Ã¶ffnen.
+  1. Zipf  :help  oder druck  <F1>  oder  <HILF> , um ayn Hilffenster z Ã¶ffnen.
 
   2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
 
@@ -932,9 +932,9 @@ Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfa
 
   5. Erstöll ayn vimrc-Ginschripf  zuer Sicherung von deine Mötzneinstöllungen.
 
-  6. Druck <STRG>d, aft däßst naach  :  mit ayner Faudung angfangt haast,  dyr-
+  6. Druck  <STRG>d  , aft däßst naach   :   ayn Faudung  angfangt haast,  dyr-
      mitst mügliche Vergöntzungen anzaigt kriegst.
-     Druck <TAB> für ain Vervollstöndigung yllain.
+     Druck  <TAB>  für ain Vervollstöndigung yllain.
 
 
 
@@ -944,10 +944,10 @@ Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfa
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
   Dös wär ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
-  und bündignen Ãœberblik Ã¼ber s Blat  WIMM z lifern,  netty vil gnueg,  däß myn
+  und bündignen Ãœberblik  Ã¼ber s Blat WIMM z lifern,  netty vil gnueg,  däß myn
   für s Eerste  wirklich Ã¶bbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
   Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
-  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual   .
+  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual
 
   Zo n Weiterlösn und Weiterlernen wör dös Buech daader zo n Empfelhen:
     Vim - Vi Improved - von n OUALLINE Steve
@@ -962,26 +962,20 @@ Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfa
   3897211262
   In dönn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
   De söxte Ausgaab enthaltt aau schoon Ã¶bbs Ã¼ber n Wimm.
-  Als ietzunde Bezugniss  für d Fassung  6.2  und ayn pfrenge Einfüerung  dient
-  dös folgete Buech:
+  Als ietzunde Bezugniss für d Fassung 7  und ayn pfrenge Einfüerung  dient dös
+  folgete Buech:
     vim ge-packt  von n WOBST Reinhard
-    mitp-Verlaag, Buechlaittzal 3-8266-1425-9
+    mitp-Verlaag, Buechlaittzal 978-3-8266-1781-2
   Trotz dyr recht pfrengen Darstöllung  ist s durch seine viln nützlichnen Bei-
   spiler aau für Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
-  seind zesig zo n Kriegn; see http://iccf-holland.org/click5.html
+  seind zesig zo n Kriegn; see   http://iccf-holland.org/click5.html
 
   Verfasst habnd dönn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
   Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwürff, wo
   dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
-  zuer Verfüegung gstöllt haat. Gundpost: bware@mines.colorado.edu.
+  zuer Verfüegung gstöllt haat. Gundpost:   bware@mines.colorado.edu
   Für n Wimm haat n dyr MOOLENAAR Bram barechtt.
-  De bairische Ãœbersötzung stammt von n HELL Sepp 2009. Sein Gundpostbrächt ist
-  sturmibund@t-online.de 
+  De bairische Ãœbersötzung  stammt von n HELL Sepp 2009,  ayn Weeng Ã¼berarechtt
+  2011. Sein Gundpostbrächt ist   sturmibund@t-online.de
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  
-
-
-
-
index 7438c96..a78335a 100644 (file)
@@ -374,7 +374,7 @@ Bemerkung:  Die Eingabe lediglich des Bewegungsteils im Normalmodus bewegt den
 
   1. Bewege den Cursor zur ersten unten stehenden mit ---> markierten Zeile.
 
-  2. Tippe  dd  , um die Zeile zu löschen und sie in eimem Vim-Register zu
+  2. Tippe  dd  , um die Zeile zu löschen und sie in einem Vim-Register zu
      speichern.
 
   3. Bewege den Cursor zur Zeile c), ÃœBER derjenigen, wo die gelöschte Zeile
index 7b39abe..9d5f668 100644 (file)
@@ -374,7 +374,7 @@ Bemerkung:  Die Eingabe lediglich des Bewegungsteils im Normalmodus bewegt den
 
   1. Bewege den Cursor zur ersten unten stehenden mit ---> markierten Zeile.
 
-  2. Tippe  dd  , um die Zeile zu löschen und sie in eimem Vim-Register zu
+  2. Tippe  dd  , um die Zeile zu löschen und sie in einem Vim-Register zu
      speichern.
 
   3. Bewege den Cursor zur Zeile c), ÃœBER derjenigen, wo die gelöschte Zeile
index 958d393..c075ec7 100644 (file)
@@ -1,5 +1,5 @@
 ==============================================================================
-=  B o n v e n o n  al  la  I n s t r u i l o  de  V I M  -  Versio 1.7.eo.3 =
+=  B o n v e n o n   al   la   I n s t r u i l o  de  V I M  -  Versio 1.7   =
 ==============================================================================
 
    Vim estas tre potenca redaktilo, kiu havas multajn komandojn, tro da ili
@@ -108,7 +108,7 @@ RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
      reøimo. Ripetu la paþojn 2 Ã¸is 4 por korekti la frazon.
 
 ---> Mank en Ã¦i linio.
----> Mankas tekston en Ã¦i tiu linio.
+---> Mankas teksto en Ã¦i tiu linio.
 
   5. Kiam vi sentas vin komforta pri enmeto de teksto, moviøu al la
      leciono 1.5.
@@ -160,7 +160,7 @@ RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
 
   4. Konservu la dosieron kun Ã¾anøoj kaj eliru el Vim per:  :wq  <Enenklavo>
 
-  5. Se vi eliris la instruilon vimtutor en paþo 1, restartu la intruilon
+  5. Se vi eliris la instruilon vimtutor en paþo 1, restartigu la intruilon
      vimtutor kaj moviøu suben al la sekvanta resumo.
 
   6. Post kiam vi legis la suprajn paþojn, kaj komprenis ilin: faru ilin.
@@ -640,12 +640,12 @@ RIMARKO: 
   1. Tajpu  !dir  aý  !ls  por akiri liston de via dosierujo.
      Vi jam scias, ke vi devas tajpi <Enenklavo> post tio.
 
-  2. Elektu dosieron, kiu ne jam ekzistas, kiel ekzemple TESTO.
+  2. Elektu dosieron, kiu ankoraý ne ekzistas, kiel ekzemple TESTO.
 
   3. Nun tajpu:   :w TESTO   (kie TESTO estas la elektita dosiernomo)
 
   4. Tio konservas la tutan dosieron (instruilon de Vim) kun la nomo TESTO.
-     Por kontroli tion, tajpu   :!dir   aý   !ls   denove por vidigi vian
+     Por kontroli tion, tajpu   :!dir   aý   :!ls   denove por vidigi vian
      dosierujon.
 
 RIMARKO: Se vi volus eliri el Vim kaj restartigi Ã¸in denove per  vim TESTO,
@@ -669,7 +669,7 @@ RIMARKO: Se vi volus eliri el Vim kaj restartigi 
 
   3. Premu la  :  signon.  Ã†e la fino de la ekrano  :'<,'>  aperos.
 
-  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ne jam ekzistas.
+  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ankoraý ne ekzistas.
      Kontrolu, ke vi vidas  :'<,'>w TESTO  antaý premi <Enenklavo>.
 
   5. Vim konservos la apartigitajn liniojn al la dosiero TESTO.  Uzu  :dir
@@ -984,8 +984,8 @@ RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
 
   Modifita por Vim de Bram Moolenaar.
 
-  Tradukita en Esperanto de Dominique Pellé, 2008-04-01
+  Esperantigita fare de Dominique Pellé, 2008-04-01
   Retpoþto: dominique.pelle@gmail.com
-  Lasta Ã¾anøo: 2010-05-23
+  Lasta Ã¾anøo: 2011-11-27
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
index febf2f9..44d7b29 100644 (file)
@@ -1,5 +1,5 @@
 ==============================================================================
-=  B o n v e n o n  al  la  I n s t r u i l o  de  V I M  -  Versio 1.7.eo.3 =
+=  B o n v e n o n   al   la   I n s t r u i l o  de  V I M  -  Versio 1.7   =
 ==============================================================================
 
    Vim estas tre potenca redaktilo, kiu havas multajn komandojn, tro da ili
@@ -108,7 +108,7 @@ RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
      reÄimo. Ripetu la paÅojn 2 Äis 4 por korekti la frazon.
 
 ---> Mank en Ä‰i linio.
----> Mankas tekston en Ä‰i tiu linio.
+---> Mankas teksto en Ä‰i tiu linio.
 
   5. Kiam vi sentas vin komforta pri enmeto de teksto, moviÄu al la
      leciono 1.5.
@@ -160,7 +160,7 @@ RIMARKO: Trairante la instruilon, ne provu memori, lernu per la uzo.
 
   4. Konservu la dosieron kun ÅanÄoj kaj eliru el Vim per:  :wq  <Enenklavo>
 
-  5. Se vi eliris la instruilon vimtutor en paÅo 1, restartu la intruilon
+  5. Se vi eliris la instruilon vimtutor en paÅo 1, restartigu la intruilon
      vimtutor kaj moviÄu suben al la sekvanta resumo.
 
   6. Post kiam vi legis la suprajn paÅojn, kaj komprenis ilin: faru ilin.
@@ -640,12 +640,12 @@ RIMARKO: Äˆiuj  :  komandoj devas finiÄi per tajpo de <Enenklavo>
   1. Tajpu  !dir  aÅ­  !ls  por akiri liston de via dosierujo.
      Vi jam scias, ke vi devas tajpi <Enenklavo> post tio.
 
-  2. Elektu dosieron, kiu ne jam ekzistas, kiel ekzemple TESTO.
+  2. Elektu dosieron, kiu ankoraÅ­ ne ekzistas, kiel ekzemple TESTO.
 
   3. Nun tajpu:   :w TESTO   (kie TESTO estas la elektita dosiernomo)
 
   4. Tio konservas la tutan dosieron (instruilon de Vim) kun la nomo TESTO.
-     Por kontroli tion, tajpu   :!dir   aÅ­   !ls   denove por vidigi vian
+     Por kontroli tion, tajpu   :!dir   aÅ­   :!ls   denove por vidigi vian
      dosierujon.
 
 RIMARKO: Se vi volus eliri el Vim kaj restartigi Äin denove per  vim TESTO,
@@ -669,7 +669,7 @@ RIMARKO: Se vi volus eliri el Vim kaj restartigi Äin denove per  vim TESTO,
 
   3. Premu la  :  signon.  Äˆe la fino de la ekrano  :'<,'>  aperos.
 
-  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ne jam ekzistas.
+  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ankoraÅ­ ne ekzistas.
      Kontrolu, ke vi vidas  :'<,'>w TESTO  antaÅ­ premi <Enenklavo>.
 
   5. Vim konservos la apartigitajn liniojn al la dosiero TESTO.  Uzu  :dir
@@ -984,8 +984,8 @@ RIMARKO: Kompletigo funkcias por multaj komandoj. Nur provu premi CTRL-D kaj
 
   Modifita por Vim de Bram Moolenaar.
 
-  Tradukita en Esperanto de Dominique Pellé, 2008-04-01
+  Esperantigita fare de Dominique Pellé, 2008-04-01
   RetpoÅto: dominique.pelle@gmail.com
-  Lasta ÅanÄo: 2010-05-23
+  Lasta ÅanÄo: 2011-11-27
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
index abb53d1..ec85235 100644 (file)
@@ -1,5 +1,5 @@
 ===============================================================================
-= B i e n v e n u e  dans le  T u t o r i e l  de  V I M  -  Version 1.7.fr.2 =
+=    B i e n v e n u e  dans  l e  T u t o r i e l  de  V I M  -  Version 1.7 =
 ===============================================================================
 
      Vim est un Ã©diteur très puissant qui a trop de commandes pour pouvoir
@@ -67,7 +67,7 @@ NOTE : Les touches fl
   4. Si vous avez mémorisé ces Ã©tapes et Ãªtes confiant, effectuez les Ã©tapes
      1 Ã  3 pour sortir puis rentrer dans l'éditeur.
 
-NOTE :  :q! <Entrée> annule tous les changements que vous avez fait. Dans
+NOTE :  :q! <Entrée> annule tous les changements que vous avez faits. Dans
          quelques leçons, vous apprendrez Ã  enregistrer les changements.
 
   5. Déplacez le curseur Ã  la Leçon 1.3.
@@ -260,7 +260,7 @@ NOTE : La lettre  d  appara
 
   Une courte liste de mouvements :
     w - jusqu'au début du prochain mot, en EXCLUANT son premier caractère.
-    e - jusqu'à la fin du mot courant, en EXCLUANT son denier caractère.
+    e - jusqu'à la fin du mot courant, en EXCLUANT son dernier caractère.
     $ - jusqu'à la fin de la ligne, en INCLUANT son dernier caractère.
 
   Ainsi, taper  de  va effacer depuis le curseur jusqu'à la fin du mot.
@@ -299,7 +299,7 @@ NOTE : Le seul appui d'un mouvement en mode Normal, sans commande, d
 
   Outre la combinaison de l'opérateur d'effacement avec un déplacement
   mentionné ci-dessus, vous pouvez insérer un nombre (quantificateur)
-  pour effacez encore plus :
+  pour effacer encore plus :
        d   nombre   déplacement
 
   1. Déplacez le curseur vers le premier mot en MAJUSCULES dans la ligne
@@ -451,7 +451,7 @@ NOTE : N'oubliez pas que vous devriez apprendre par la pratique, pas par
   3. Tapez  ce  et corrigez le mot (dans notre cas, tapez  'igne'.)
 
   4. Appuyez <Échap> et placez-vous sur le prochain caractère qui doit
-     Ãªtre changé).
+     Ãªtre changé.
 
   5. Répétez les Ã©tapes 3 et 4 jusqu'à ce que la première phrase soit
      identique Ã  la seconde.
@@ -560,7 +560,7 @@ NOTE : Vous pouvez peut-
 ---> erreur ne s'écrit pas "errreuur" ; errreuur est une erreur.
 
 NOTE : Quand la recherche atteint la fin du fichier, elle reprend au début
-       sauf si l'option 'wrapscan' est déactivée.
+       sauf si l'option 'wrapscan' est désactivée.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -704,10 +704,10 @@ NOTE : Si vous quittez Vim et le red
   3. Appuyez  :  . En bas de l'écran  :'<,'> va apparaître.
 
   4. Tapez   w TEST  , où TEST est un nom de fichier qui n'existe pas.
-     Vérifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur Entrée.
+     Vérifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur <Entrée>.
 
   5. Vim va enregistrer les lignes sélectionnées dans le fichier TEST.
-     Utilisez  :!dir  ou  !ls pour le voir. Ne l'effacez pas encore !
+     Utilisez  :!dir  ou  :!ls pour le voir. Ne l'effacez pas encore !
      Nous allons l'utiliser dans la leçon suivante.
 
 NOTE : L'appui de  v  démarre la sélection Visuelle. Vous pouvez déplacer le
@@ -725,7 +725,7 @@ NOTE : L'appui de  v  d
   1. Placez le curseur juste au-dessus de cette ligne.
 
 NOTE :  Après avoir exécuté l'étape 2 vous verrez du texte de la Leçon 5.3.
-        Puis déplacez vous vers le bas pour voir cette leçon Ã  nouveau.
+        Puis déplacez-vous vers le bas pour voir cette leçon Ã  nouveau.
 
   2. Maintenant récupérez votre fichier TEST en utilisant la commande  :r TEST
      où TEST est le nom de votre fichier.
@@ -853,8 +853,8 @@ NOTE : Le mode Remplacement est comme le mode Insertion, mais tous les
 
   5. Tapez  p  pour coller le texte. Puis tapez :  un second <Échap> .
 
-  6. Utilisez le mode Visuel pour sélectionner "élément", copiez le avec  y  ,
-     déplacez vous Ã  la fin de la ligne suivant avec  j$  et collez le texte
+  6. Utilisez le mode Visuel pour sélectionner "élément", copiez-le avec  y  ,
+     déplacez-vous Ã  la fin de la ligne suivant avec  j$  et collez le texte
      Ã  cet endroit avec  p .
 
 --->  a) ceci est le premier Ã©lément.
@@ -1012,8 +1012,8 @@ NOTE : Le compl
   Ceci conclut le Tutoriel Vim. Le but Ã©tait de vous donner un bref aperçu de
   l'éditeur Vim, juste assez pour vous permettre d'utiliser l'éditeur
   relativement facilement. Il est loin d'être complet, vu que Vim a beaucoup
-  beaucoup plus de commandes. Un Manuel de l'utilisateur est disponible en
-  anglais :  :help user-manual .
+  plus de commandes. Un Manuel de l'utilisateur est disponible en anglais :
+    :help user-manual
 
   Pour continuer Ã  découvrir et Ã  apprendre Vim, il existe un livre traduit en
   français. Il parle plus de Vi que de Vim, mais pourra vous Ãªtre utile.
@@ -1030,9 +1030,9 @@ NOTE : Le compl
   Université d'État du Colorado. E-mail : bware@mines.colorado.edu.
 
   Modifié pour Vim par Bram Moolenar.
-  Traduit en Français par Adrien Beau, en avril 2001.
+  Traduit en français par Adrien Beau, en avril 2001.
   Dernières mises Ã  jour par Dominique Pellé.
 
   E-mail :      dominique.pelle@gmail.com
-  Last Change : 2010 May 23
+  Last Change : 2013 May 10
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
index 24d8bfa..d07d1ba 100644 (file)
@@ -1,5 +1,5 @@
 ===============================================================================
-= B i e n v e n u e  dans le  T u t o r i e l  de  V I M  -  Version 1.7.fr.2 =
+=    B i e n v e n u e  dans  l e  T u t o r i e l  de  V I M  -  Version 1.7 =
 ===============================================================================
 
      Vim est un Ã©diteur très puissant qui a trop de commandes pour pouvoir
@@ -67,7 +67,7 @@ NOTE : Les touches fléchées devraient Ã©galement fonctionner. Mais en utilisan
   4. Si vous avez mémorisé ces Ã©tapes et Ãªtes confiant, effectuez les Ã©tapes
      1 Ã  3 pour sortir puis rentrer dans l'éditeur.
 
-NOTE :  :q! <Entrée> annule tous les changements que vous avez fait. Dans
+NOTE :  :q! <Entrée> annule tous les changements que vous avez faits. Dans
          quelques leçons, vous apprendrez Ã  enregistrer les changements.
 
   5. Déplacez le curseur Ã  la Leçon 1.3.
@@ -260,7 +260,7 @@ NOTE : La lettre  d  apparaîtra sur la dernière ligne de l'écran lors de
 
   Une courte liste de mouvements :
     w - jusqu'au début du prochain mot, en EXCLUANT son premier caractère.
-    e - jusqu'à la fin du mot courant, en EXCLUANT son denier caractère.
+    e - jusqu'à la fin du mot courant, en EXCLUANT son dernier caractère.
     $ - jusqu'à la fin de la ligne, en INCLUANT son dernier caractère.
 
   Ainsi, taper  de  va effacer depuis le curseur jusqu'à la fin du mot.
@@ -299,7 +299,7 @@ NOTE : Le seul appui d'un mouvement en mode Normal, sans commande, déplace le
 
   Outre la combinaison de l'opérateur d'effacement avec un déplacement
   mentionné ci-dessus, vous pouvez insérer un nombre (quantificateur)
-  pour effacez encore plus :
+  pour effacer encore plus :
        d   nombre   déplacement
 
   1. Déplacez le curseur vers le premier mot en MAJUSCULES dans la ligne
@@ -451,7 +451,7 @@ NOTE : N'oubliez pas que vous devriez apprendre par la pratique, pas par
   3. Tapez  ce  et corrigez le mot (dans notre cas, tapez  'igne'.)
 
   4. Appuyez <Échap> et placez-vous sur le prochain caractère qui doit
-     Ãªtre changé).
+     Ãªtre changé.
 
   5. Répétez les Ã©tapes 3 et 4 jusqu'à ce que la première phrase soit
      identique Ã  la seconde.
@@ -560,7 +560,7 @@ NOTE : Vous pouvez peut-être voir le curseur en bas Ã  droite de l'écran.
 ---> erreur ne s'écrit pas "errreuur" ; errreuur est une erreur.
 
 NOTE : Quand la recherche atteint la fin du fichier, elle reprend au début
-       sauf si l'option 'wrapscan' est déactivée.
+       sauf si l'option 'wrapscan' est désactivée.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -704,10 +704,10 @@ NOTE : Si vous quittez Vim et le redémarrez de nouveau avec le fichier TEST,
   3. Appuyez  :  . En bas de l'écran  :'<,'> va apparaître.
 
   4. Tapez   w TEST  , où TEST est un nom de fichier qui n'existe pas.
-     Vérifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur Entrée.
+     Vérifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur <Entrée>.
 
   5. Vim va enregistrer les lignes sélectionnées dans le fichier TEST.
-     Utilisez  :!dir  ou  !ls pour le voir. Ne l'effacez pas encore !
+     Utilisez  :!dir  ou  :!ls pour le voir. Ne l'effacez pas encore !
      Nous allons l'utiliser dans la leçon suivante.
 
 NOTE : L'appui de  v  démarre la sélection Visuelle. Vous pouvez déplacer le
@@ -725,7 +725,7 @@ NOTE : L'appui de  v  démarre la sélection Visuelle. Vous pouvez déplacer le
   1. Placez le curseur juste au-dessus de cette ligne.
 
 NOTE :  Après avoir exécuté l'étape 2 vous verrez du texte de la Leçon 5.3.
-        Puis déplacez vous vers le bas pour voir cette leçon Ã  nouveau.
+        Puis déplacez-vous vers le bas pour voir cette leçon Ã  nouveau.
 
   2. Maintenant récupérez votre fichier TEST en utilisant la commande  :r TEST
      où TEST est le nom de votre fichier.
@@ -853,8 +853,8 @@ NOTE : Le mode Remplacement est comme le mode Insertion, mais tous les
 
   5. Tapez  p  pour coller le texte. Puis tapez :  un second <Échap> .
 
-  6. Utilisez le mode Visuel pour sélectionner "élément", copiez le avec  y  ,
-     déplacez vous Ã  la fin de la ligne suivant avec  j$  et collez le texte
+  6. Utilisez le mode Visuel pour sélectionner "élément", copiez-le avec  y  ,
+     déplacez-vous Ã  la fin de la ligne suivant avec  j$  et collez le texte
      Ã  cet endroit avec  p .
 
 --->  a) ceci est le premier Ã©lément.
@@ -1012,8 +1012,8 @@ NOTE : Le complètement fonctionne pour de nombreuses commandes. Essayez
   Ceci conclut le Tutoriel Vim. Le but Ã©tait de vous donner un bref aperçu de
   l'éditeur Vim, juste assez pour vous permettre d'utiliser l'éditeur
   relativement facilement. Il est loin d'être complet, vu que Vim a beaucoup
-  beaucoup plus de commandes. Un Manuel de l'utilisateur est disponible en
-  anglais :  :help user-manual .
+  plus de commandes. Un Manuel de l'utilisateur est disponible en anglais :
+    :help user-manual
 
   Pour continuer Ã  découvrir et Ã  apprendre Vim, il existe un livre traduit en
   français. Il parle plus de Vi que de Vim, mais pourra vous Ãªtre utile.
@@ -1030,9 +1030,9 @@ NOTE : Le complètement fonctionne pour de nombreuses commandes. Essayez
   Université d'État du Colorado. E-mail : bware@mines.colorado.edu.
 
   Modifié pour Vim par Bram Moolenar.
-  Traduit en Français par Adrien Beau, en avril 2001.
+  Traduit en français par Adrien Beau, en avril 2001.
   Dernières mises Ã  jour par Dominique Pellé.
 
   E-mail :      dominique.pelle@gmail.com
-  Last Change : 2010 May 23
+  Last Change : 2013 May 10
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
index f1d346c..90443bf 100644 (file)
@@ -659,7 +659,7 @@ NAPOMENA:  Ako bi napustili Vim i ponovno ga pokrenuli sa vim TEST ,
      Provjerite da zaista pi¹e  :'<,'>w TEST
      prije nego Â¹to pritisnite <ENTER>.
 
-  5. Vim Ã¦e spremiti oznaèeni tekst u TEST.  Provjerite sa :!dir  ili  !ls .
+  5. Vim Ã¦e spremiti oznaèeni tekst u TEST.  Provjerite sa :!dir  ili  :!ls .
      Nemojte je jo¹ brisati!  Koristiti Ã¦e te je u sljedeæoj lekciji.
 
 NAPOMENA:  Tipka  v  zapoèinje Vizualno oznaèavanje.  Mo¾ete pomicati kursor
index 92771ab..1956a8a 100644 (file)
@@ -659,7 +659,7 @@ NAPOMENA:  Ako bi napustili Vim i ponovno ga pokrenuli sa vim TEST ,
      Provjerite da zaista pi\9ae  :'<,'>w TEST
      prije nego \9ato pritisnite <ENTER>.
 
-  5. Vim Ã¦e spremiti oznaèeni tekst u TEST.  Provjerite sa :!dir  ili  !ls .
+  5. Vim Ã¦e spremiti oznaèeni tekst u TEST.  Provjerite sa :!dir  ili  :!ls .
      Nemojte je jo\9a brisati!  Koristiti Ã¦e te je u sljedeæoj lekciji.
 
 NAPOMENA:  Tipka  v  zapoèinje Vizualno oznaèavanje.  Mo\9eete pomicati kursor
index 396bdfe..79838ec 100644 (file)
@@ -659,7 +659,7 @@ NAPOMENA:  Ako bi napustili Vim i ponovno ga pokrenuli sa vim TEST ,
      Provjerite da zaista piÅ¡e  :'<,'>w TEST
      prije nego Å¡to pritisnite <ENTER>.
 
-  5. Vim Ä‡e spremiti oznaÄeni tekst u TEST.  Provjerite sa :!dir  ili  !ls .
+  5. Vim Ä‡e spremiti oznaÄeni tekst u TEST.  Provjerite sa :!dir  ili  :!ls .
      Nemojte je joÅ¡ brisati!  Koristiti Ä‡e te je u sljedećoj lekciji.
 
 NAPOMENA:  Tipka  v  zapoÄinje Vizualno oznaÄavanje.  Možete pomicati kursor
index 6fb3270..2a7afce 100644 (file)
@@ -2,16 +2,16 @@
 == Ãœ d v Ã¶ z Ã¶ l j Ã¼ k   a   V I M - o k t a t Ã³ b a n  -    1.5-ös  verzió  ==
 ===============================================================================
 
-     A Vim egy nagyon hatékony szerkesztõ, amelnyek rengeteg utasítása
+     A Vim egy nagyon hatékony szerkesztõ, amelynek rengeteg utasítása
      van, túl sok, hogy egy ilyen oktatóban (tutorban), mint az itteni
      mindet elmagyarázzuk. Ez az oktató arra törekszik, hogy annyit
      elmagyarázzon, amennyi elég, hogy könnyedén használjuk a Vim-et, az
      Ã¡ltalános célú szövegszerkesztõt.
 
      A feladatok megoldásához 25-30 perc szükséges attól függõen,
-     mennyit töltünk a kisérletezéssel.
+     mennyit töltünk a kísérletezéssel.
 
-     A leckében szereplõ utasítások módosítani fogják a szövegek.
+     A leckében szereplõ utasítások módosítani fogják a szöveget.
      Készítsen másolatot errõl a fájlról, ha gyakorolni akar.
      (Ha "vimtutor"-ral indította, akkor ez már egy másolat.)
 
@@ -81,7 +81,7 @@ Megj: A kurzor gomboknak is m
   2. A hibák kijavításához mozgassa a kurzort amíg a törlendõ karakter
      fölé nem Ã©r.
 
-  3. Nyomja meg az  x  gombot, hogy törölje a nemkívánt karaktert.
+  3. Nyomja meg az  x  gombot, hogy törölje a nem kívánt karaktert.
 
   4. Ismételje a 2, 3, 4-es lépéseket, hogy kijavítsa a mondatot.
 
@@ -172,7 +172,7 @@ Most folytassuk a 2. leck
 
   3. Mozgassa a kurzort a helyes sor végére (az elsõ . UTÃN)!
 
-  4. d$  begépeléséveltörölje a sor végét!
+  4. d$  begépelésével törölje a sor végét!
 
 ---> Valaki a sor végét kétszer gépelte be. kétszer gépelte be.
 
@@ -184,30 +184,30 @@ Most folytassuk a 2. leck
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                    2.3.  lecke: UTASÃTÃSOKRÓL Ã‰S OBJEKTUMOKRÓL
+                    2.3.  lecke: UTASÃTÃSOKRÓL Ã‰S MOZGÃSOKRÓL
 
 
   A  d  (delete=törlés) utasítás formája a következõ:
 
-        [szám]   d     objektum           VAGY      d   [szám] objektum
+        [szám]   d     mozgás     VAGY      d   [szám] mozgás
   Ahol:
     szám - hányszor hajtódjon végre a parancs (elhagyható, alapérték=1).
     d - a törlés (delete) utasítás.
-    objektum - amin a parancsnak teljesülnie kell (alább listázva).
+    mozgás - amin a parancsnak teljesülnie kell (alább listázva).
 
-  Objektumok rövid listája:
+  Mozgások rövid listája:
     w - a kurzortól a szó végéig, beleértve a szóközt.
     e - a kurzortól a szó végéig, NEM beleértve a szóközt.
     $ - a kurzortól a sor végéig.
 
-MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs nélkül
-       a kurzor oda kerül, amit az objektumlista megad.
+MEGJ:  Csupán a mozgás begépelésével (parancs nélkül)
+       a kurzor mozgás Ã¡ltal megadott helyre kerül.
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-               2.4.  lecke: EGY KIVÉTEL A  'PARANCSOBJEKTUM' ALÓL
+               2.4.  lecke: EGÉSZ SOROK FELDOLGOZÃSA
 
 
               ** dd beírásával törölheti az egész sort. **
@@ -217,8 +217,8 @@ MEGJ:  V
 
   1. Mozgassa a kurzort az alábbi kifejezések második sorára!
   2. dd begépelésével törölje a sort!
-  3. Menjen a 4. (eredetileg 5.) sorra!
-  4. 2dd   (ugyebár szám-utasítás-objektum) begépelésével töröljön két sort!
+  3. Menjen a 3. (eredetileg 4.) sorra!
+  4. 2dd   (ugyebár szám-utasítás-mozgás) begépelésével töröljön két sort!
 
       1)  Alvó szegek a jéghideg homokban,
       2)  - kezdi a költõ -
@@ -238,9 +238,9 @@ MEGJ:  V
   1. Menjünk az alábbi ---> kezdetû sor elsõ hibájára!
   2. x  lenyomásával törölje az elsõ felesleges karaktert!
   3. u megnyomásával vonja vissza az utolsónak végrehajtott utasítást!
-  4. Másodjára javítson ki minden hibát a sorben az x utasítással!
+  4. Másodjára javítson ki minden hibát a sorban az x utasítással!
   5. Most nagy  U  -val Ã¡llítsa vissza a sor eredeti Ã¡llapotát!
-  6. Nyomja meg az u gombot párszor, hogy az U Ã©s sz elõzõ utasításokat
+  6. Nyomja meg az u gombot párszor, hogy az U Ã©s az azt megelõzõ utasításokat
      visszaállítsa!
   7. CTRL-R (CTRL gomb lenyomása mellett Ã¼ssön R-t) párszor csinálja Ãºjra a
      visszavont parancsokat (redo)!
@@ -263,11 +263,11 @@ MEGJ:  V
 
   4. Egy utasítás alakja normál módban:
 
-       [szám]   utasítás   objektum   VAGY   utasítás  [szám] objektum
+       [szám]   utasítás   mozgás   VAGY   utasítás    [szám] mozgás
      ahol:
        szám - hányszor ismételjük a parancsot
        utasítás - mit tegyünk, pl. d  a törléskor
-       objektum - mire hasson az utasítás, például w (szó=word),
+       mozgás - mire hasson az utasítás, például w (szó=word),
                $ (a sor végéig), stb.
 
   5. Az elõzõ tett visszavonása (undo):             u   (kis u)
@@ -278,11 +278,11 @@ MEGJ:  V
                3.1.  lecke: A BEILLESZTÉS (PUT) PARANCS
 
 
-  ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
+  ** p  leütésével az utolsónak töröltet a kurzor után illeszthetjük. **
 
   1. Mozgassuk a kurzort az alábbi sorok elsõ sorára.
 
-  2. dd leütésével töröljük a sort Ã©s eltérolódik a Vim pufferében.
+  2. dd leütésével töröljük a sort Ã©s eltárolódik a Vim pufferében.
 
   3. Mozgassuk a kurzort azelõtt a  sor ELÕTTI sorba, ahová mozgatni
      szeretnénk a törölt sort.
@@ -350,13 +350,13 @@ Vegy
                       3.4.  lecke: TÖBBFÉLE VÃLTOZTATÃS c-VEL
 
 
- ** A c utasítás használható ugyanazokkal az objektumokkal mint a törlés **
+ ** A c utasítás használható ugyanazokkal az mozgásokkal mint a törlés **
 
   1. A change utasítás a törléssel azonosan viselkedik.  A forma:
 
-       [szám]   c   objektum      OR       c   [szám]   objektum
+       [szám]   c   mozgás        OR       c   [szám]   mozgás
 
-  2. Az objektumok is azonosak, pl.   w (szó), $ (sorvég), stb.
+  2. A mozgások is azonosak, pl.   w (szó), $ (sorvég), stb.
 
   3. Mozgassuk a kurzort az elsõ ---> kezdetû sorra!
 
@@ -374,18 +374,18 @@ Vegy
 
 
   1. A már törölt sort beillesztéséhez nyomjunk p-t. Ez a törölt szöveget
-     a kurzor UTÃN helyezi (ha sor került törlésre, a kurzor allatti sorba).
+     a kurzor UTÃN helyezi (ha sor került törlésre, a kurzor alatti sorba).
 
   2. A kurzor alatti karakter Ã¡tírásához az r-et Ã©s azt a karaktert
      nyomjuk, amellyel az eredetit felül szeretnénk Ã­rni.
 
-  3. A változtatás (c) utasítás a karaktertõl az objektum végéig
-     változtatja meg az objektumot. Például a cw a kurzortól a szó végéig,
+  3. A változtatás (c) utasítás a karaktertõl az mozgás végéig
+     változtatja meg az mozgást. Például a cw a kurzortól a szó végéig,
      a c$ a sor végéig.
 
   4. A változtatás formátuma:
 
-        [szám]   c     objektum        VAGY    c   [szám]   objektum
+        [szám]   c     mozgás  VAGY    c   [szám]   mozgás
 
 Ugorjunk a következõ leckére!
 
@@ -428,7 +428,7 @@ Ugorjunk a k
   3. A kifejezés Ãºjabb kereséséhez Ã¼ssük le egyszerûen:  n .
      A kifejezés ellenkezõ irányban történõ kereséséhez ezt Ã¼ssük be: Shift-N .
 
-  4. Ha visszafelé szeretne keresni, akkor ? kell a ! helyett.
+  4. Ha visszafelé szeretne keresni, akkor ? kell a / helyett.
 
 ---> "hiibaa" nem a helyes módja a hiba leírásának; a hiibaa egy hiba.
 
@@ -462,7 +462,7 @@ Megj: Ez nagyon hasznos, ha olyan programot debugolunk, amelyben a
                  4.4.  lecke: A HIBÃK KIJAVÃTÃSÃNAK EGY MÓDJA
 
 
-    ** :s/új/régi/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
+    ** :s/régi/új/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
 
   1. Menjünk a ---> kezdetû sorra!
 
@@ -579,7 +579,7 @@ Megj: Ha 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                  5.4.  lecke: RETRIEVING AND MERGING FILES
+                  5.4.  lecke: FÃJLOK VISSZAÃLLÃTÃSA Ã‰S Ã–SSZEFÛZÉSE
 
 
        ** Egy fájl tartalmának beillesztéséhez Ã­rja   :r FÃJLNÉV **
@@ -592,11 +592,11 @@ MEGJ:  A 3. l
        keresse meg ismét ezt a leckét.
 
   3. Most szúrja be a TESZT nevû fájlt a   :r TESZT   paranccsal, ahol
-     TESZT az Ã–n fájljénak a neve.
+     TESZT az Ã–n fájljának a neve.
 
 MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
 
-  4. Hogy ellenõrizzük, hogy a fájlt tényleg beillsztettük, menjen
+  4. Hogy ellenõrizzük, hogy a fájlt tényleg beillesztettük, menjen
      vissza, Ã©s nézze meg, hogy kétszer szerepel az 5.3. lecke! Az eredeti
      mellett a fájlból bemásolt is ott van.
 
@@ -616,11 +616,11 @@ MEGJ:  A f
   2.  :w FÃJLNÉV  kiírja a jelenlegi Vim-fájlt a lemezre FÃJNÉV néven.
 
   3.  :#,#w FÃJLNÉV  kiírja a két sorszám (#) közötti sorokat FÃJLNÉV-be
-      Másik lehetõség, hogy a kezdõsornál Ctrl-v-t nyom lemegy az utolsó
+      Másik lehetõség, hogy a kezdõsornál Shift-v-t nyom lemegy az utolsó
       sorra, majd ezt Ã¼ti be  :w FÃJLNÉV
 
   4.  :r FÃJLNÉV  beolvassa a FÃJLNÉV fájlt Ã©s behelyezi a jelenlegi fájlba
-      a kurzorpozició utáni sorba.
+      a kurzorpozíció utáni sorba.
 
 
 
@@ -629,7 +629,7 @@ MEGJ:  A f
                   6.1.  lecke: A MEGNYITÃS (OPEN) PARANCS
 
 
-** o  beírásával nyithat egy Ãºj sort a kurzor alatt Ã©s válthat beszúró módba **
+** o  beírásával nyit egy Ãºj sort a kurzor alatt Ã©s beszúró módba vált **
 
   1. Mozgassuk a kurzort a ---> kezdetû sorra.
 
@@ -641,7 +641,7 @@ MEGJ:  A f
 
 ---> Az o lenyomása után a kurzor a következõ sor elején Ã¡ll beszúró módban.
 
-  4. A kurzor FELETTI for megnyitásához egyzserûen a nagy O betût Ã­rjon
+  4. A kurzor FELETTI sor megnyitásához egyszerûen nagy O betût Ã­rjon
 kicsi helyett. Próbálja ki a következõ soron!
 Nyisson egy Ãºj sort efelett Shift-O megnyomásával, mialatt a kurzor
 ezen a soron Ã¡ll.
@@ -654,16 +654,16 @@ ezen a soron 
                        6.2.  lecke: AZ APPEND PARANCS
 
 
-        ** a  lenyomásával a kuror UTÃN szúrhatunk szöveget. **
+        ** a  lenyomásával a kurzor UTÃN szúrhatunk szöveget. **
 
   1. Mozgassuk a kurzort a következõ ---> kezdetû sor végére Ãºgy,
-     hogy normál módban  $  Ã­r be.
+     hogy  normál  módban  $-t  Ã­r be.
 
-  2. a  (kicsi) leütésével szöveget szúrhat be AMöGÉ a karakter mögé,
+  2. Kis "a" leütésével szöveget szúrhat be AMÖGÉ a karakter mögé,
      amelyen a kurzor Ã¡ll.
-     (A nagy  A  az egész sor végére Ã­rja a szöveget.)
+     (A nagy "A" az egész sor végére Ã­rja a szöveget.)
 
-Megj: A Vimben a sor legvégére is lehet Ã¡llni, azonba ez elõdjében
+Megj: A Vimben a sor legvégére is lehet Ã¡llni, azonban ez elõdjében
       a Vi-ban nem lehetséges, ezért abban az a nélkül elég körülményes
       a sor végéhez szöveget Ã­rni.
 
@@ -687,13 +687,13 @@ Megj: A Vimben a sor legv
   2. Helyezze a kurzort az elsõ szó elejére amely eltér a második
      ---> kezdetû sor tartalmától (a 'az utolsóval' résztõl).
 
-  3. Nyomjon R karaktert Ã©s Ã­rja Ã©t a szöveg maradékát az elsõ sorban
+  3. Nyomjon R karaktert Ã©s Ã­rja Ã¡t a szöveg maradékát az elsõ sorban
      Ãºgy, hogy a  két sor egyezõ legyen.
 
 ---> Az elsõ sort tegye azonossá az utolsóval: használja a gombokat.
 ---> Az elsõ sort tegye azonossá a másodikkal: Ã­rjon R-t Ã©s az Ãºj szöveget.
 
-  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanuk hagyott
+  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanul hagyott
      szövegek változatlanok maradnak.
 
 
@@ -826,5 +826,5 @@ Megj: A Vimben a sor legv
 
   A Vimhez idomította Bram Moolenaar.
 
-  Magyarította: Horváth Ãrpád <horvath.arpad@roik.bmf.hu>, 2006-2008
+  Magyarította: Horváth Ãrpád <horvath.arpad@arek.uni-opbuda.hu>, 2006-2012
 
index 6fb3270..2a7afce 100644 (file)
@@ -2,16 +2,16 @@
 == Ãœ d v Ã¶ z Ã¶ l j Ã¼ k   a   V I M - o k t a t Ã³ b a n  -    1.5-ös  verzió  ==
 ===============================================================================
 
-     A Vim egy nagyon hatékony szerkesztõ, amelnyek rengeteg utasítása
+     A Vim egy nagyon hatékony szerkesztõ, amelynek rengeteg utasítása
      van, túl sok, hogy egy ilyen oktatóban (tutorban), mint az itteni
      mindet elmagyarázzuk. Ez az oktató arra törekszik, hogy annyit
      elmagyarázzon, amennyi elég, hogy könnyedén használjuk a Vim-et, az
      Ã¡ltalános célú szövegszerkesztõt.
 
      A feladatok megoldásához 25-30 perc szükséges attól függõen,
-     mennyit töltünk a kisérletezéssel.
+     mennyit töltünk a kísérletezéssel.
 
-     A leckében szereplõ utasítások módosítani fogják a szövegek.
+     A leckében szereplõ utasítások módosítani fogják a szöveget.
      Készítsen másolatot errõl a fájlról, ha gyakorolni akar.
      (Ha "vimtutor"-ral indította, akkor ez már egy másolat.)
 
@@ -81,7 +81,7 @@ Megj: A kurzor gomboknak is m
   2. A hibák kijavításához mozgassa a kurzort amíg a törlendõ karakter
      fölé nem Ã©r.
 
-  3. Nyomja meg az  x  gombot, hogy törölje a nemkívánt karaktert.
+  3. Nyomja meg az  x  gombot, hogy törölje a nem kívánt karaktert.
 
   4. Ismételje a 2, 3, 4-es lépéseket, hogy kijavítsa a mondatot.
 
@@ -172,7 +172,7 @@ Most folytassuk a 2. leck
 
   3. Mozgassa a kurzort a helyes sor végére (az elsõ . UTÃN)!
 
-  4. d$  begépeléséveltörölje a sor végét!
+  4. d$  begépelésével törölje a sor végét!
 
 ---> Valaki a sor végét kétszer gépelte be. kétszer gépelte be.
 
@@ -184,30 +184,30 @@ Most folytassuk a 2. leck
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                    2.3.  lecke: UTASÃTÃSOKRÓL Ã‰S OBJEKTUMOKRÓL
+                    2.3.  lecke: UTASÃTÃSOKRÓL Ã‰S MOZGÃSOKRÓL
 
 
   A  d  (delete=törlés) utasítás formája a következõ:
 
-        [szám]   d     objektum           VAGY      d   [szám] objektum
+        [szám]   d     mozgás     VAGY      d   [szám] mozgás
   Ahol:
     szám - hányszor hajtódjon végre a parancs (elhagyható, alapérték=1).
     d - a törlés (delete) utasítás.
-    objektum - amin a parancsnak teljesülnie kell (alább listázva).
+    mozgás - amin a parancsnak teljesülnie kell (alább listázva).
 
-  Objektumok rövid listája:
+  Mozgások rövid listája:
     w - a kurzortól a szó végéig, beleértve a szóközt.
     e - a kurzortól a szó végéig, NEM beleértve a szóközt.
     $ - a kurzortól a sor végéig.
 
-MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs nélkül
-       a kurzor oda kerül, amit az objektumlista megad.
+MEGJ:  Csupán a mozgás begépelésével (parancs nélkül)
+       a kurzor mozgás Ã¡ltal megadott helyre kerül.
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-               2.4.  lecke: EGY KIVÉTEL A  'PARANCSOBJEKTUM' ALÓL
+               2.4.  lecke: EGÉSZ SOROK FELDOLGOZÃSA
 
 
               ** dd beírásával törölheti az egész sort. **
@@ -217,8 +217,8 @@ MEGJ:  V
 
   1. Mozgassa a kurzort az alábbi kifejezések második sorára!
   2. dd begépelésével törölje a sort!
-  3. Menjen a 4. (eredetileg 5.) sorra!
-  4. 2dd   (ugyebár szám-utasítás-objektum) begépelésével töröljön két sort!
+  3. Menjen a 3. (eredetileg 4.) sorra!
+  4. 2dd   (ugyebár szám-utasítás-mozgás) begépelésével töröljön két sort!
 
       1)  Alvó szegek a jéghideg homokban,
       2)  - kezdi a költõ -
@@ -238,9 +238,9 @@ MEGJ:  V
   1. Menjünk az alábbi ---> kezdetû sor elsõ hibájára!
   2. x  lenyomásával törölje az elsõ felesleges karaktert!
   3. u megnyomásával vonja vissza az utolsónak végrehajtott utasítást!
-  4. Másodjára javítson ki minden hibát a sorben az x utasítással!
+  4. Másodjára javítson ki minden hibát a sorban az x utasítással!
   5. Most nagy  U  -val Ã¡llítsa vissza a sor eredeti Ã¡llapotát!
-  6. Nyomja meg az u gombot párszor, hogy az U Ã©s sz elõzõ utasításokat
+  6. Nyomja meg az u gombot párszor, hogy az U Ã©s az azt megelõzõ utasításokat
      visszaállítsa!
   7. CTRL-R (CTRL gomb lenyomása mellett Ã¼ssön R-t) párszor csinálja Ãºjra a
      visszavont parancsokat (redo)!
@@ -263,11 +263,11 @@ MEGJ:  V
 
   4. Egy utasítás alakja normál módban:
 
-       [szám]   utasítás   objektum   VAGY   utasítás  [szám] objektum
+       [szám]   utasítás   mozgás   VAGY   utasítás    [szám] mozgás
      ahol:
        szám - hányszor ismételjük a parancsot
        utasítás - mit tegyünk, pl. d  a törléskor
-       objektum - mire hasson az utasítás, például w (szó=word),
+       mozgás - mire hasson az utasítás, például w (szó=word),
                $ (a sor végéig), stb.
 
   5. Az elõzõ tett visszavonása (undo):             u   (kis u)
@@ -278,11 +278,11 @@ MEGJ:  V
                3.1.  lecke: A BEILLESZTÉS (PUT) PARANCS
 
 
-  ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
+  ** p  leütésével az utolsónak töröltet a kurzor után illeszthetjük. **
 
   1. Mozgassuk a kurzort az alábbi sorok elsõ sorára.
 
-  2. dd leütésével töröljük a sort Ã©s eltérolódik a Vim pufferében.
+  2. dd leütésével töröljük a sort Ã©s eltárolódik a Vim pufferében.
 
   3. Mozgassuk a kurzort azelõtt a  sor ELÕTTI sorba, ahová mozgatni
      szeretnénk a törölt sort.
@@ -350,13 +350,13 @@ Vegy
                       3.4.  lecke: TÖBBFÉLE VÃLTOZTATÃS c-VEL
 
 
- ** A c utasítás használható ugyanazokkal az objektumokkal mint a törlés **
+ ** A c utasítás használható ugyanazokkal az mozgásokkal mint a törlés **
 
   1. A change utasítás a törléssel azonosan viselkedik.  A forma:
 
-       [szám]   c   objektum      OR       c   [szám]   objektum
+       [szám]   c   mozgás        OR       c   [szám]   mozgás
 
-  2. Az objektumok is azonosak, pl.   w (szó), $ (sorvég), stb.
+  2. A mozgások is azonosak, pl.   w (szó), $ (sorvég), stb.
 
   3. Mozgassuk a kurzort az elsõ ---> kezdetû sorra!
 
@@ -374,18 +374,18 @@ Vegy
 
 
   1. A már törölt sort beillesztéséhez nyomjunk p-t. Ez a törölt szöveget
-     a kurzor UTÃN helyezi (ha sor került törlésre, a kurzor allatti sorba).
+     a kurzor UTÃN helyezi (ha sor került törlésre, a kurzor alatti sorba).
 
   2. A kurzor alatti karakter Ã¡tírásához az r-et Ã©s azt a karaktert
      nyomjuk, amellyel az eredetit felül szeretnénk Ã­rni.
 
-  3. A változtatás (c) utasítás a karaktertõl az objektum végéig
-     változtatja meg az objektumot. Például a cw a kurzortól a szó végéig,
+  3. A változtatás (c) utasítás a karaktertõl az mozgás végéig
+     változtatja meg az mozgást. Például a cw a kurzortól a szó végéig,
      a c$ a sor végéig.
 
   4. A változtatás formátuma:
 
-        [szám]   c     objektum        VAGY    c   [szám]   objektum
+        [szám]   c     mozgás  VAGY    c   [szám]   mozgás
 
 Ugorjunk a következõ leckére!
 
@@ -428,7 +428,7 @@ Ugorjunk a k
   3. A kifejezés Ãºjabb kereséséhez Ã¼ssük le egyszerûen:  n .
      A kifejezés ellenkezõ irányban történõ kereséséhez ezt Ã¼ssük be: Shift-N .
 
-  4. Ha visszafelé szeretne keresni, akkor ? kell a ! helyett.
+  4. Ha visszafelé szeretne keresni, akkor ? kell a / helyett.
 
 ---> "hiibaa" nem a helyes módja a hiba leírásának; a hiibaa egy hiba.
 
@@ -462,7 +462,7 @@ Megj: Ez nagyon hasznos, ha olyan programot debugolunk, amelyben a
                  4.4.  lecke: A HIBÃK KIJAVÃTÃSÃNAK EGY MÓDJA
 
 
-    ** :s/új/régi/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
+    ** :s/régi/új/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
 
   1. Menjünk a ---> kezdetû sorra!
 
@@ -579,7 +579,7 @@ Megj: Ha 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                  5.4.  lecke: RETRIEVING AND MERGING FILES
+                  5.4.  lecke: FÃJLOK VISSZAÃLLÃTÃSA Ã‰S Ã–SSZEFÛZÉSE
 
 
        ** Egy fájl tartalmának beillesztéséhez Ã­rja   :r FÃJLNÉV **
@@ -592,11 +592,11 @@ MEGJ:  A 3. l
        keresse meg ismét ezt a leckét.
 
   3. Most szúrja be a TESZT nevû fájlt a   :r TESZT   paranccsal, ahol
-     TESZT az Ã–n fájljénak a neve.
+     TESZT az Ã–n fájljának a neve.
 
 MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
 
-  4. Hogy ellenõrizzük, hogy a fájlt tényleg beillsztettük, menjen
+  4. Hogy ellenõrizzük, hogy a fájlt tényleg beillesztettük, menjen
      vissza, Ã©s nézze meg, hogy kétszer szerepel az 5.3. lecke! Az eredeti
      mellett a fájlból bemásolt is ott van.
 
@@ -616,11 +616,11 @@ MEGJ:  A f
   2.  :w FÃJLNÉV  kiírja a jelenlegi Vim-fájlt a lemezre FÃJNÉV néven.
 
   3.  :#,#w FÃJLNÉV  kiírja a két sorszám (#) közötti sorokat FÃJLNÉV-be
-      Másik lehetõség, hogy a kezdõsornál Ctrl-v-t nyom lemegy az utolsó
+      Másik lehetõség, hogy a kezdõsornál Shift-v-t nyom lemegy az utolsó
       sorra, majd ezt Ã¼ti be  :w FÃJLNÉV
 
   4.  :r FÃJLNÉV  beolvassa a FÃJLNÉV fájlt Ã©s behelyezi a jelenlegi fájlba
-      a kurzorpozició utáni sorba.
+      a kurzorpozíció utáni sorba.
 
 
 
@@ -629,7 +629,7 @@ MEGJ:  A f
                   6.1.  lecke: A MEGNYITÃS (OPEN) PARANCS
 
 
-** o  beírásával nyithat egy Ãºj sort a kurzor alatt Ã©s válthat beszúró módba **
+** o  beírásával nyit egy Ãºj sort a kurzor alatt Ã©s beszúró módba vált **
 
   1. Mozgassuk a kurzort a ---> kezdetû sorra.
 
@@ -641,7 +641,7 @@ MEGJ:  A f
 
 ---> Az o lenyomása után a kurzor a következõ sor elején Ã¡ll beszúró módban.
 
-  4. A kurzor FELETTI for megnyitásához egyzserûen a nagy O betût Ã­rjon
+  4. A kurzor FELETTI sor megnyitásához egyszerûen nagy O betût Ã­rjon
 kicsi helyett. Próbálja ki a következõ soron!
 Nyisson egy Ãºj sort efelett Shift-O megnyomásával, mialatt a kurzor
 ezen a soron Ã¡ll.
@@ -654,16 +654,16 @@ ezen a soron 
                        6.2.  lecke: AZ APPEND PARANCS
 
 
-        ** a  lenyomásával a kuror UTÃN szúrhatunk szöveget. **
+        ** a  lenyomásával a kurzor UTÃN szúrhatunk szöveget. **
 
   1. Mozgassuk a kurzort a következõ ---> kezdetû sor végére Ãºgy,
-     hogy normál módban  $  Ã­r be.
+     hogy  normál  módban  $-t  Ã­r be.
 
-  2. a  (kicsi) leütésével szöveget szúrhat be AMöGÉ a karakter mögé,
+  2. Kis "a" leütésével szöveget szúrhat be AMÖGÉ a karakter mögé,
      amelyen a kurzor Ã¡ll.
-     (A nagy  A  az egész sor végére Ã­rja a szöveget.)
+     (A nagy "A" az egész sor végére Ã­rja a szöveget.)
 
-Megj: A Vimben a sor legvégére is lehet Ã¡llni, azonba ez elõdjében
+Megj: A Vimben a sor legvégére is lehet Ã¡llni, azonban ez elõdjében
       a Vi-ban nem lehetséges, ezért abban az a nélkül elég körülményes
       a sor végéhez szöveget Ã­rni.
 
@@ -687,13 +687,13 @@ Megj: A Vimben a sor legv
   2. Helyezze a kurzort az elsõ szó elejére amely eltér a második
      ---> kezdetû sor tartalmától (a 'az utolsóval' résztõl).
 
-  3. Nyomjon R karaktert Ã©s Ã­rja Ã©t a szöveg maradékát az elsõ sorban
+  3. Nyomjon R karaktert Ã©s Ã­rja Ã¡t a szöveg maradékát az elsõ sorban
      Ãºgy, hogy a  két sor egyezõ legyen.
 
 ---> Az elsõ sort tegye azonossá az utolsóval: használja a gombokat.
 ---> Az elsõ sort tegye azonossá a másodikkal: Ã­rjon R-t Ã©s az Ãºj szöveget.
 
-  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanuk hagyott
+  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanul hagyott
      szövegek változatlanok maradnak.
 
 
@@ -826,5 +826,5 @@ Megj: A Vimben a sor legv
 
   A Vimhez idomította Bram Moolenaar.
 
-  Magyarította: Horváth Ãrpád <horvath.arpad@roik.bmf.hu>, 2006-2008
+  Magyarította: Horváth Ãrpád <horvath.arpad@arek.uni-opbuda.hu>, 2006-2012
 
index ec486d9..67adcc5 100644 (file)
@@ -2,16 +2,16 @@
 == Ãœ d v Ã¶ z Ã¶ l j Ã¼ k   a   V I M - o k t a t Ã³ b a n  -    1.5-ös  verzió  ==
 ===============================================================================
 
-     A Vim egy nagyon hatékony szerkesztÅ‘, amelnyek rengeteg utasítása
+     A Vim egy nagyon hatékony szerkesztÅ‘, amelynek rengeteg utasítása
      van, túl sok, hogy egy ilyen oktatóban (tutorban), mint az itteni
      mindet elmagyarázzuk. Ez az oktató arra törekszik, hogy annyit
      elmagyarázzon, amennyi elég, hogy könnyedén használjuk a Vim-et, az
      Ã¡ltalános célú szövegszerkesztÅ‘t.
 
      A feladatok megoldásához 25-30 perc szükséges attól függÅ‘en,
-     mennyit töltünk a kisérletezéssel.
+     mennyit töltünk a kísérletezéssel.
 
-     A leckében szereplÅ‘ utasítások módosítani fogják a szövegek.
+     A leckében szereplÅ‘ utasítások módosítani fogják a szöveget.
      Készítsen másolatot errÅ‘l a fájlról, ha gyakorolni akar.
      (Ha "vimtutor"-ral indította, akkor ez már egy másolat.)
 
@@ -81,7 +81,7 @@ Megj: A kurzor gomboknak is működniük kell, de a hjkl használatával
   2. A hibák kijavításához mozgassa a kurzort amíg a törlendÅ‘ karakter
      fölé nem Ã©r.
 
-  3. Nyomja meg az  x  gombot, hogy törölje a nemkívánt karaktert.
+  3. Nyomja meg az  x  gombot, hogy törölje a nem kívánt karaktert.
 
   4. Ismételje a 2, 3, 4-es lépéseket, hogy kijavítsa a mondatot.
 
@@ -172,7 +172,7 @@ Most folytassuk a 2. leckével!
 
   3. Mozgassa a kurzort a helyes sor végére (az elsÅ‘ . UTÃN)!
 
-  4. d$  begépeléséveltörölje a sor végét!
+  4. d$  begépelésével törölje a sor végét!
 
 ---> Valaki a sor végét kétszer gépelte be. kétszer gépelte be.
 
@@ -184,30 +184,30 @@ Most folytassuk a 2. leckével!
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                    2.3.  lecke: UTASÃTÃSOKRÓL Ã‰S OBJEKTUMOKRÓL
+                    2.3.  lecke: UTASÃTÃSOKRÓL Ã‰S MOZGÃSOKRÓL
 
 
   A  d  (delete=törlés) utasítás formája a következÅ‘:
 
-        [szám]   d    objektum           VAGY      d   [szám] objektum
+        [szám]   d    mozgás    VAGY      d   [szám] mozgás
   Ahol:
     szám - hányszor hajtódjon végre a parancs (elhagyható, alapérték=1).
     d - a törlés (delete) utasítás.
-    objektum - amin a parancsnak teljesülnie kell (alább listázva).
+    mozgás - amin a parancsnak teljesülnie kell (alább listázva).
 
-  Objektumok rövid listája:
+  Mozgások rövid listája:
     w - a kurzortól a szó végéig, beleértve a szóközt.
     e - a kurzortól a szó végéig, NEM beleértve a szóközt.
     $ - a kurzortól a sor végéig.
 
-MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs nélkül
-       a kurzor oda kerül, amit az objektumlista megad.
+MEGJ:  Csupán a mozgás begépelésével (parancs nélkül)
+       a kurzor mozgás Ã¡ltal megadott helyre kerül.
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-               2.4.  lecke: EGY KIVÉTEL A  'PARANCSOBJEKTUM' ALÓL
+               2.4.  lecke: EGÉSZ SOROK FELDOLGOZÃSA
 
 
               ** dd beírásával törölheti az egész sort. **
@@ -217,8 +217,8 @@ MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs
 
   1. Mozgassa a kurzort az alábbi kifejezések második sorára!
   2. dd begépelésével törölje a sort!
-  3. Menjen a 4. (eredetileg 5.) sorra!
-  4. 2dd   (ugyebár szám-utasítás-objektum) begépelésével töröljön két sort!
+  3. Menjen a 3. (eredetileg 4.) sorra!
+  4. 2dd   (ugyebár szám-utasítás-mozgás) begépelésével töröljön két sort!
 
       1)  Alvó szegek a jéghideg homokban,
       2)  - kezdi a költÅ‘ -
@@ -238,9 +238,9 @@ MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs
   1. Menjünk az alábbi ---> kezdetű sor elsÅ‘ hibájára!
   2. x  lenyomásával törölje az elsÅ‘ felesleges karaktert!
   3. u megnyomásával vonja vissza az utolsónak végrehajtott utasítást!
-  4. Másodjára javítson ki minden hibát a sorben az x utasítással!
+  4. Másodjára javítson ki minden hibát a sorban az x utasítással!
   5. Most nagy  U  -val Ã¡llítsa vissza a sor eredeti Ã¡llapotát!
-  6. Nyomja meg az u gombot párszor, hogy az U Ã©s sz elÅ‘zÅ‘ utasításokat
+  6. Nyomja meg az u gombot párszor, hogy az U Ã©s az azt megelÅ‘zÅ‘ utasításokat
      visszaállítsa!
   7. CTRL-R (CTRL gomb lenyomása mellett Ã¼ssön R-t) párszor csinálja Ãºjra a
      visszavont parancsokat (redo)!
@@ -263,11 +263,11 @@ MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs
 
   4. Egy utasítás alakja normál módban:
 
-       [szám]   utasítás   objektum   VAGY   utasítás     [szám] objektum
+       [szám]   utasítás   mozgás   VAGY   utasítás      [szám] mozgás
      ahol:
        szám - hányszor ismételjük a parancsot
        utasítás - mit tegyünk, pl. d  a törléskor
-       objektum - mire hasson az utasítás, például w (szó=word),
+       mozgás - mire hasson az utasítás, például w (szó=word),
                $ (a sor végéig), stb.
 
   5. Az elÅ‘zÅ‘ tett visszavonása (undo):          u   (kis u)
@@ -278,11 +278,11 @@ MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs
                3.1.  lecke: A BEILLESZTÉS (PUT) PARANCS
 
 
-  ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
+  ** p  leütésével az utolsónak töröltet a kurzor után illeszthetjük. **
 
   1. Mozgassuk a kurzort az alábbi sorok elsÅ‘ sorára.
 
-  2. dd leütésével töröljük a sort ÃƒÂ©s eltérolódik a Vim pufferében.
+  2. dd leütésével töröljük a sort ÃƒÂ©s eltárolódik a Vim pufferében.
 
   3. Mozgassuk a kurzort azelÅ‘tt a  sor ELÅTTI sorba, ahová mozgatni
      szeretnénk a törölt sort.
@@ -350,13 +350,13 @@ Vegyük Ã©szre, hogy a  cw  nem csak a szót Ã­rja Ã¡t, hanem beszúró
                       3.4.  lecke: TÖBBFÉLE VÃLTOZTATÃS c-VEL
 
 
- ** A c utasítás használható ugyanazokkal az objektumokkal mint a törlés **
+ ** A c utasítás használható ugyanazokkal az mozgásokkal mint a törlés **
 
   1. A change utasítás a törléssel azonosan viselkedik.  A forma:
 
-       [szám]   c   objektum     OR       c   [szám]   objektum
+       [szám]   c   mozgás      OR       c   [szám]   mozgás
 
-  2. Az objektumok is azonosak, pl.   w (szó), $ (sorvég), stb.
+  2. A mozgások is azonosak, pl.   w (szó), $ (sorvég), stb.
 
   3. Mozgassuk a kurzort az elsÅ‘ ---> kezdetű sorra!
 
@@ -374,18 +374,18 @@ Vegyük Ã©szre, hogy a  cw  nem csak a szót Ã­rja Ã¡t, hanem beszúró
 
 
   1. A már törölt sort beillesztéséhez nyomjunk p-t. Ez a törölt szöveget
-     a kurzor UTÃN helyezi (ha sor került törlésre, a kurzor allatti sorba).
+     a kurzor UTÃN helyezi (ha sor került törlésre, a kurzor alatti sorba).
 
   2. A kurzor alatti karakter Ã¡tírásához az r-et Ã©s azt a karaktert
      nyomjuk, amellyel az eredetit felül szeretnénk Ã­rni.
 
-  3. A változtatás (c) utasítás a karaktertÅ‘l az objektum végéig
-     változtatja meg az objektumot. Például a cw a kurzortól a szó végéig,
+  3. A változtatás (c) utasítás a karaktertÅ‘l az mozgás végéig
+     változtatja meg az mozgást. Például a cw a kurzortól a szó végéig,
      a c$ a sor végéig.
 
   4. A változtatás formátuma:
 
-        [szám]   c    objektum        VAGY    c   [szám]   objektum
+        [szám]   c    mozgás VAGY    c   [szám]   mozgás
 
 Ugorjunk a következÅ‘ leckére!
 
@@ -428,7 +428,7 @@ Ugorjunk a következÅ‘ leckére!
   3. A kifejezés Ãºjabb kereséséhez Ã¼ssük le egyszerűen:  n .
      A kifejezés ellenkezÅ‘ irányban történÅ‘ kereséséhez ezt Ã¼ssük be: Shift-N .
 
-  4. Ha visszafelé szeretne keresni, akkor ? kell a ! helyett.
+  4. Ha visszafelé szeretne keresni, akkor ? kell a / helyett.
 
 ---> "hiibaa" nem a helyes módja a hiba leírásának; a hiibaa egy hiba.
 
@@ -462,7 +462,7 @@ Megj: Ez nagyon hasznos, ha olyan programot debugolunk, amelyben a
                  4.4.  lecke: A HIBÃK KIJAVÃTÃSÃNAK EGY MÓDJA
 
 
-    ** :s/új/régi/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
+    ** :s/régi/új/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
 
   1. Menjünk a ---> kezdetű sorra!
 
@@ -579,7 +579,7 @@ Megj: Ha Ã–n kilépne a VimbÅ‘l Ã©s Ã©s visszatérne a TESZT fájlnévvel, akkor
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                  5.4.  lecke: RETRIEVING AND MERGING FILES
+                  5.4.  lecke: FÃJLOK VISSZAÃLLÃTÃSA Ã‰S Ã–SSZEFÅ°ZÉSE
 
 
        ** Egy fájl tartalmának beillesztéséhez Ã­rja   :r FÃJLNÉV **
@@ -592,11 +592,11 @@ MEGJ:  A 3. lépés után az 5.3. leckét fogja látni. Azután LEFELÉ indulva
        keresse meg ismét ezt a leckét.
 
   3. Most szúrja be a TESZT nevű fájlt a   :r TESZT   paranccsal, ahol
-     TESZT az Ãƒ\96n fájljénak a neve.
+     TESZT az Ãƒ\96n fájljának a neve.
 
 MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
 
-  4. Hogy ellenÅ‘rizzük, hogy a fájlt tényleg beillsztettük, menjen
+  4. Hogy ellenÅ‘rizzük, hogy a fájlt tényleg beillesztettük, menjen
      vissza, Ã©s nézze meg, hogy kétszer szerepel az 5.3. lecke! Az eredeti
      mellett a fájlból bemásolt is ott van.
 
@@ -616,11 +616,11 @@ MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
   2.  :w FÃJLNÉV  kiírja a jelenlegi Vim-fájlt a lemezre FÃJNÉV néven.
 
   3.  :#,#w FÃJLNÉV  kiírja a két sorszám (#) közötti sorokat FÃJLNÉV-be
-      Másik lehetÅ‘ség, hogy a kezdÅ‘sornál Ctrl-v-t nyom lemegy az utolsó
+      Másik lehetÅ‘ség, hogy a kezdÅ‘sornál Shift-v-t nyom lemegy az utolsó
       sorra, majd ezt Ã¼ti be  :w FÃJLNÉV
 
   4.  :r FÃJLNÉV  beolvassa a FÃJLNÉV fájlt Ã©s behelyezi a jelenlegi fájlba
-      a kurzorpozició utáni sorba.
+      a kurzorpozíció utáni sorba.
 
 
 
@@ -629,7 +629,7 @@ MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
                   6.1.  lecke: A MEGNYITÃS (OPEN) PARANCS
 
 
-** o  beírásával nyithat egy Ãºj sort a kurzor alatt Ã©s válthat beszúró módba **
+** o  beírásával nyit egy Ãºj sort a kurzor alatt Ã©s beszúró módba vált **
 
   1. Mozgassuk a kurzort a ---> kezdetű sorra.
 
@@ -641,7 +641,7 @@ MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
 
 ---> Az o lenyomása után a kurzor a következÅ‘ sor elején Ã¡ll beszúró módban.
 
-  4. A kurzor FELETTI for megnyitásához egyzserűen a nagy O betűt Ã­rjon
+  4. A kurzor FELETTI sor megnyitásához egyszerűen nagy O betűt Ã­rjon
 kicsi helyett. Próbálja ki a következÅ‘ soron!
 Nyisson egy Ãºj sort efelett Shift-O megnyomásával, mialatt a kurzor
 ezen a soron Ã¡ll.
@@ -654,16 +654,16 @@ ezen a soron Ã¡ll.
                        6.2.  lecke: AZ APPEND PARANCS
 
 
-        ** a  lenyomásával a kuror UTÃN szúrhatunk szöveget. **
+        ** a  lenyomásával a kurzor UTÃN szúrhatunk szöveget. **
 
   1. Mozgassuk a kurzort a következÅ‘ ---> kezdetű sor végére Ãºgy,
-     hogy normál módban  $  Ã­r be.
+     hogy  normál  módban  $-t  Ã­r be.
 
-  2. a  (kicsi) leütésével szöveget szúrhat be AMöGÉ a karakter mögé,
+  2. Kis "a" leütésével szöveget szúrhat be AMÖGÉ a karakter mögé,
      amelyen a kurzor Ã¡ll.
-     (A nagy  A  az egész sor végére Ã­rja a szöveget.)
+     (A nagy "A" az egész sor végére Ã­rja a szöveget.)
 
-Megj: A Vimben a sor legvégére is lehet Ã¡llni, azonba ez elÅ‘djében
+Megj: A Vimben a sor legvégére is lehet Ã¡llni, azonban ez elÅ‘djében
       a Vi-ban nem lehetséges, ezért abban az a nélkül elég körülményes
       a sor végéhez szöveget Ã­rni.
 
@@ -687,13 +687,13 @@ Megj: A Vimben a sor legvégére is lehet Ã¡llni, azonba ez elÅ‘djében
   2. Helyezze a kurzort az elsÅ‘ szó elejére amely eltér a második
      ---> kezdetű sor tartalmától (a 'az utolsóval' résztÅ‘l).
 
-  3. Nyomjon R karaktert ÃƒÂ©s ÃƒÂ­rja ÃƒÂ©t a szöveg maradékát az elsÅ‘ sorban
+  3. Nyomjon R karaktert ÃƒÂ©s ÃƒÂ­rja ÃƒÂ¡t a szöveg maradékát az elsÅ‘ sorban
      Ãºgy, hogy a  két sor egyezÅ‘ legyen.
 
 ---> Az elsÅ‘ sort tegye azonossá az utolsóval: használja a gombokat.
 ---> Az elsÅ‘ sort tegye azonossá a másodikkal: Ã­rjon R-t Ã©s az Ãºj szöveget.
 
-  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanuk hagyott
+  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanul hagyott
      szövegek változatlanok maradnak.
 
 
@@ -826,5 +826,5 @@ Megj: A Vimben a sor legvégére is lehet Ã¡llni, azonba ez elÅ‘djében
 
   A Vimhez idomította Bram Moolenaar.
 
-  Magyarította: Horváth Ãrpád <horvath.arpad@roik.bmf.hu>, 2006-2008
+  Magyarította: Horváth Ãrpád <horvath.arpad@arek.uni-opbuda.hu>, 2006-2012
 
index 5134393..2160e00 100644 (file)
 
   3. Â²Â¼Â¤Ã˜Â¤ÃŽÂ¥Â­Â¡Â¼Â¤Ã²Â»ÃˆÂ¤ÃƒÂ¤Ã†Â¡Â¢Â¥Ã¬Â¥ÃƒÂ¥Â¹Â¥Ã³1.2 Â¤Ã‹Â°ÃœÃ†Â°Â¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
 
-Note: Â²Â¿Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·¤Æ¤¤¤ë¤«È½¤é¤Ê¤¯¤Ê¤Ã¤¿¤é¡¢<ESC>¤ò²¡¤·¤Æ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ë¤·
+NOTE: Â²Â¿Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·¤Æ¤¤¤ë¤«È½¤é¤Ê¤¯¤Ê¤Ã¤¿¤é¡¢<ESC>¤ò²¡¤·¤Æ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤Ë¤·
       Â¤ÃžÂ¤Â¹Â¡Â£Â¤Â½Â¤Ã¬Â¤Â«Â¤Ã©Ã†Ã¾ÃŽÃ¤·¤è¤¦¤È¤·¤Æ¤¤¤¿¥³¥Þ¥ó¥É¤òºÆÆþÎä·¤Þ¤·¤ç¤¦¡£
 
-Note: Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¥Â­Â¡Â¼Â¤Ã‡Â¤Ã¢Â°ÃœÃ†Â°Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â¹Â¡Â£Â¤Â·Â¤Â«Â¤Â· hjkl Â¤Ã‹Â°Ã¬Ã…Ù´·¤ì¤Æ¤·¤Þ¤¨¤Ã¡¢¤Ã¤ë¤«
+NOTE: Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¥Â­Â¡Â¼Â¤Ã‡Â¤Ã¢Â°ÃœÃ†Â°Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â¹Â¡Â£Â¤Â·Â¤Â«Â¤Â· hjkl Â¤Ã‹Â°Ã¬Ã…Ù´·¤ì¤Æ¤·¤Þ¤¨¤Ã¡¢¤Ã¤ë¤«
       Â¤Ã‹Ã‚®¤¯°ÜÆ°¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤Ç¤·¤ç¤¦¡£¤¤¤ä¥Þ¥¸¤Ç!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -109,7 +109,7 @@ NOTE: 
 ---> Â¤Â³Â¤ÃŽ Â¤Ã‹Â¤Ã Ã‚­¤ê¤Ê¤¤ Â¥Ã†Â¥Â­Â¥Â¹Â¥Ãˆ Â¤Â¢Â¤Ã«Â¡Â£
 ---> Â¤Â³Â¤ÃŽ Â¹Ã” Â¤Ã‹Â¤Ã Â´Ã¶Â¤Ã„¤« Ã‚­¤ê¤Ê¤¤ Â¥Ã†Â¥Â­Â¥Â¹Â¥Ãˆ Â¤Â¬ Â¤Â¢Â¤Ã«Â¡Â£
 
-  5. ÃÞÆþ¤ÎÊýË¡¤¬¤ï¤«¤Ã¤¿¤é²¼¤Î¥ì¥Ã¥¹¥ó1¤ÎÃ×Ìó¤ò¸«¤Þ¤·¤ç¤¦¡£
+  5. ÃÞÆþ¤ÎÊýË¡¤¬¤ï¤«¤Ã¤¿¤é¥ì¥Ã¥¹¥ó 1.5 Â¤Ã˜Â¿ÃŠÂ¤ÃŸÂ¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
 
 
 
@@ -117,7 +117,7 @@ NOTE: 
                     Â¥Ã¬Â¥ÃƒÂ¥Â¹Â¥Ã³ 1.5: Â¥Ã†Â¥Â­Â¥Â¹Â¥ÃˆÃŠÃ”½¸ - Ã„ɲÃ
 
 
-                ** Â¥Ã†Â¥Â­Â¥Â¹Â¥ÃˆÃ„ɲ乤ë¤Ë¤àA Â¤Ã²Â²Â¡Â¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦ **
+                ** Â¥Ã†Â¥Â­Â¥Â¹Â¥ÃˆÂ¤Ã²Ã„ɲ乤ë¤Ë¤àA Â¤Ã²Â²Â¡Â¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦ **
 
   1. Â°ÃŠÂ²Â¼Â¤ÃŽ ---> Â¤ÃˆÂ¼Â¨Â¤ÂµÂ¤Ã¬Â¤Â¿ÂºÃ‡Â½Ã©Â¤ÃŽÂ¹Ã”¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
      Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤Â¬Â¤Â½Â¤ÃŽÃŠÂ¸Â»ÃºÂ¾Ã¥Â¤Ã‹Â¤Â¢Â¤ÃƒÂ¤Ã†Â¤Ã¢Â¤Â«Â¤ÃžÂ¤Â¤Â¤ÃžÂ¤Â»Â¤Ã³Â¡Â£
@@ -126,8 +126,8 @@ NOTE: 
 
   3. Â¥Ã†Â¥Â­Â¥Â¹Â¥ÃˆÂ¤Ã²Ã„ɲä·½ª¤¨¤¿¤é¡¢ <ESC> Â¤Ã²Â²Â¡Â¤Â·Â¤Ã†Â¥ÃŽÂ¡Â¼Â¥ÃžÂ¥Ã«Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤Ã‹ÃŒÃ¡Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
 
-  4. 2¹ÔÌܤΠ---> Â¤ÃˆÂ¼Â¨Â¤ÂµÂ¤Ã¬Â¤Â¿Â¾Ã¬Â½ÃªÂ¤Ã˜Â°ÃœÃ†Â°Â¤Â·Â¡Â¢Â¥Â¹Â¥Ã†Â¥ÃƒÂ¥Ã— 2 Â¤Â«Â¤Ã© 3 Â·Â«Â¤ÃªÃŠÃ–¤·¤Æʸˡ¤ò
-     Â½Â¤Ã€ÂµÂ¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
+  4. 2¹ÔÌܤΠ---> Â¤ÃˆÂ¼Â¨Â¤ÂµÂ¤Ã¬Â¤Â¿Â¾Ã¬Â½ÃªÂ¤Ã˜Â°ÃœÃ†Â°Â¤Â·Â¡Â¢Â¥Â¹Â¥Ã†Â¥ÃƒÂ¥Ã— 2 Â¤Â«Â¤Ã© 3 Â¤Ã²Â·Â«Â¤ÃªÃŠÃ–¤·¤Æʸˡ
+     Â¤Ã²Â½Â¤Ã€ÂµÂ¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
 
 ---> Â¤Â³Â¤Â³Â¤Ã‹Â¤Ã´Ö°ã¤Ã¤¿¥Æ¥­¥¹¥È¤¬¤¢¤ê
      Â¤Â³Â¤Â³Â¤Ã‹Â¤Ã´Ö°ã¤Ã¤¿¥Æ¥­¥¹¥È¤¬¤¢¤ê¤Þ¤¹¡£
@@ -145,7 +145,8 @@ NOTE: 
   !! NOTE: Â°ÃŠÂ²Â¼Â¤ÃŽÂ¥Â¹Â¥Ã†Â¥ÃƒÂ¥Ã—¤ò¼Â¹Ô¤¹¤ëð¤Ë¡¢¤Þ¤ºÃ´ÂΤòÆɤó¤Ç¤¯¤À¤µ¤¤!!
 
   1. Â¥Ã¬Â¥ÃƒÂ¥Â¹Â¥Ã³ 1.2 Â¤Ã‡Â¤Ã¤Â¤ÃƒÂ¤Â¿Â¤Ã¨Â¤Â¦Â¤Ã‹ :q! Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·¤Æ¡¢¤³¤Î¥Ã¥å¡¼¥È¥ê¥¢¥ë¤ò½ªÎ»
-     Â¤Â·Â¤ÃžÂ¤Â¹Â¡Â£
+     Â¤Â·Â¤ÃžÂ¤Â¹Â¡Â£Â¤Â¢Â¤Ã«Â¤Â¤Â¤Ã¡¢Ê̤ÎüËö¤¬¤¢¤ë¾ì¹ç¤Ã¤½¤³¤Ç°Ê²¼¤ÎÆâÃƤò¹Ô¤Ã¤Æ¤â¤«¤Þ¤¤
+     Â¤ÃžÂ¤Â»Â¤Ã³Â¡Â£
 
   2. Â¥Â·Â¥Â§Â¥Ã«Â¥Ã—¥í¥ó¥×¥È¤Ç¤³¤Î¥³¥Þ¥ó¥É¤ò¥¿¥¤¥×¤·¤Þ¤¹:  vim tutor <ENTER>
      'vim'¤¬ Vim Â¥Â¨Â¥Ã‡Â¥Â£Â¥Â¿Â¤Ã²ÂµÂ¯Ã†Â°Â¤Â¹Â¤Ã«Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¡Â¢'tutor' Â¤ÃÊÔ½¸¤·¤¿¤¤¥Õ¥¡¥¤¥ë¤Î
@@ -155,7 +156,8 @@ NOTE: 
 
   4. ÃŠÃ‘¹¹¤ò¥Õ¥¡¥¤¥ë¤ËÊø¤·¤Þ¤¹:  :wq  <ENTER>
 
-  5. vimtutor Â¤Ã²ÂºÃ†Ã…Ùµ¯Æ°¤·¡¢°Ê²¼¤ÎÃ×Ìó¤Ø¿Ê¤ß¤Þ¤·¤ç¤¦¡£
+  5. Â¥Â¹Â¥Ã†Â¥ÃƒÂ¥Ã— 1 Â¤Ã‡ vimtutuor Â¤Ã²Â½ÂªÃŽÂ»Â¤Â·Â¤Â¿Â¾Ã¬Â¹Ã§Â¤Ã vimtutor Â¤Ã²ÂºÃ†Ã…Ùµ¯Æ°¤·¡¢°Ê²¼¤Î
+     Ã×Ìó¤Ø¿Ê¤ß¤Þ¤·¤ç¤¦¡£
 
   6. Â°ÃŠÂ¾Ã¥Â¤ÃŽÂ¥Â¹Â¥Ã†Â¥ÃƒÂ¥Ã—¤òÆɤó¤ÇÃý²ò¤·¤¿¾å¤Ç¤³¤ì¤ò¼Â¹Ô¤·¤Þ¤·¤ç¤¦¡£
   
@@ -215,7 +217,7 @@ NOTE: <ESC> 
 
   2. Â°ÃŠÂ²Â¼Â¤ÃŽ ---> Â¤ÃˆÂ¼Â¨Â¤ÂµÂ¤Ã¬Â¤Â¿Â¹Ã”¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
 
-  3. Ã€ÂµÂ¤Â·Â¤Â¤ÃŠÂ¸Â¤ÃŽÃ‹Ã¶ÃˆÃ¸Â¤Ã˜Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤Ã²Â°ÃœÃ†Â°Â¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦(ºÇ½é¤Î . Â¤ÃŽÂ¸Ã¥Â¤Ã‡Â¤Â¹)¡£
+  3. Ã€ÂµÂ¤Â·Â¤Â¤ÃŠÂ¸Â¤ÃŽÃ‹Ã¶ÃˆÃ¸Â¤Ã˜Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤Ã²Â°ÃœÃ†Â°Â¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦(ºÇ½é¤Î Â¡Â£ Â¤ÃŽÂ¸Ã¥Â¤Ã‡Â¤Â¹)¡£
 
   4. Â¹Ã”Ëö¤Þ¤Çºï½ü¤¹¤ë¤Î¤Ë d$ Â¤ÃˆÂ¥Â¿Â¥Â¤Â¥Ã—¤·¤Þ¤·¤ç¤¦¡£
 
@@ -232,7 +234,7 @@ NOTE: <ESC> 
                     Â¥Ã¬Â¥ÃƒÂ¥Â¹Â¥Ã³ 2.3: Â¥ÂªÂ¥ÃšÂ¥Ã¬Â¡Â¼Â¥Â¿Â¤ÃˆÂ¥Ã¢Â¡Â¼Â¥Â·Â¥Ã§Â¥Ã³
 
 
-  Ã‚¿¤¯¤Î¥³¥Þ¥ó¥É¤Ã¥ª¥Ú¥ì¡¼¥¿¤È¥â¡¼¥·¥ç¥ó¤«¤é¥Æ¥­¥¹¥È¤ËÊѹ¹¤ò²Ã¤Þ¤¹¡£
+  Ã‚¿¤¯¤Î¥³¥Þ¥ó¥É¤Ã¥ª¥Ú¥ì¡¼¥¿¤È¥â¡¼¥·¥ç¥ó¤«¤é¥Æ¥­¥¹¥È¤ËÊѹ¹¤ò²Ã¤¨¤Þ¤¹¡£
   ÂºÃ¯Â½Ã¼Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰ d Â¤ÃŽÂ¥ÂªÂ¥ÃšÂ¥Ã¬Â¡Â¼Â¥Â¿Â¤Ã¼¡¤ÎÃäˤʤäƤ¤¤Þ¤¹:
 
        d   Â¥Ã¢Â¡Â¼Â¥Â·Â¥Ã§Â¥Ã³
@@ -259,13 +261,13 @@ NOTE: 
 
   1. Â°ÃŠÂ²Â¼Â¤ÃŽ ---> Â¤ÃˆÂ¼Â¨Â¤ÂµÂ¤Ã¬Â¤Â¿Â¹Ã”¤ÎÀèƬ¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤¹¡£
 
-  2. 2dw Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·¤Æñ¸ì2¤Äʬ°ÜÆ°¤·¤Þ¤¹¡£
+  2. 2w Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·¤Æñ¸ì2¤Äʬð¤Ë°ÜÆ°¤·¤Þ¤¹¡£
 
   3. 3e Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·¤Æ3¤ÄÌܤÎñ¸ì¤Î½ªÃ¼¤Ë°ÜÆ°¤·¤Þ¤¹¡£
 
   4. 0 (¥¼¥í)¤ò¥¿¥¤¥×¤·¤Æ¹ÔƬ¤Ë°ÜÆ°¤·¤Þ¤¹¡£
 
-  5. Â¥Â¹Â¥Ã†Â¥ÃƒÂ¥Ã— 2 Â¤Ãˆ 3 Â¤Ã²Â°Ã£Â¤Â¦Â¿Ã´ÃƒÃ¤È»È¤Ã¤Æ·«¤êÊÖ¤·¤Þ¤¹¡£
+  5. Â¥Â¹Â¥Ã†Â¥ÃƒÂ¥Ã— 2 Â¤Ãˆ 3 Â¤Ã²Â°Ã£Â¤Â¦Â¿Ã´ÃƒÃ¤ò»È¤Ã¤Æ·«¤êÊÖ¤·¤Þ¤¹¡£
 
 ---> This is just a line with words you can move around in.
 
@@ -286,7 +288,7 @@ NOTE: 
 
   1. ---> Â¤ÃˆÂ¼Â¨Â¤ÂµÂ¤Ã¬Â¤Â¿Â¹Ã”¤Î¹ÔƬÉôʬ¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¤Þ¤·¤ç¤¦¡£
 
-  2. UPPER CASE Â¤ÃŽÃƒÂ±Â¸Ã¬2¤Ä¤ò 2dw Â¤ÃˆÂ¥Â¿Â¥Â¤Â¥Ã—¤·¤Æºï½ü¤·¤Þ¤¹¡£
+  2. UPPER CASE Â¤ÃŽÃƒÂ±Â¸Ã¬2¤Ä¤ò d2w Â¤ÃˆÂ¥Â¿Â¥Â¤Â¥Ã—¤·¤Æºï½ü¤·¤Þ¤¹¡£
 
   3. UPPER CASE Â¤ÃˆÂ¤Â¤Â¤Â¦Ã¢Â³¤·¤¿Ã±¸ì¤ò¡¢1¤Ä¤Î¥³¥Þ¥ó¥É¤È°Û¤Ê¤ë¥«¥¦¥ó¥È¤ò»ØÄꤷ¡¢
      Â¥Â¹Â¥Ã†Â¥ÃƒÂ¥Ã— 1 Â¤Ãˆ 2 Â¤Ã²Â·Â«Â¤ÃªÃŠÃ–¤·¤Þ¤¹¡£
@@ -326,8 +328,8 @@ NOTE:  
 
   ** ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã²Â¼Ã¨Â¤ÃªÂ¾ÃƒÂ¤Â¹Â¤Ã‹Â¤Ã u Â¤Ã²Â²Â¡Â¤Â·Â¤ÃžÂ¤Â¹Â¡Â£U Â¤Ã¹ÔôÂΤμè¾Ã¤Ç¤¹¡£ **
 
-  1. Â°ÃŠÂ²Â¼Â¤ÃŽ ---> Â¤ÃˆÂ¼Â¨Â¤ÂµÂ¤Ã¬Â¤Â¿Â¹Ã”¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¡¢ºÇ½é¤Î´Ö°ã¤¤¤Ë¥«¡¼¥½
-     Â¥Ã«Â¤Ã²Â°ÃœÃ†Â°Â¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
+  1. Â°ÃŠÂ²Â¼Â¤ÃŽ ---> Â¤ÃˆÂ¼Â¨Â¤ÂµÂ¤Ã¬Â¤Â¿Â¹Ã”¤Ë¥«¡¼¥½¥ë¤ò°ÜÆ°¤·¡¢ºÇ½é¤Î´Ö°ã¤¤¤Ë¥«¡¼¥½¥ë
+     Â¤Ã²Â°ÃœÃ†Â°Â¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
   2. x Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·¤Æ¤¤¤é¤Ê¤¤ÀèƬ¤Îʸ»ú¤òºï½ü¤·¤Þ¤·¤ç¤¦¡£
   3. Â¤ÂµÂ¤Â¡Â¡Â¢u Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·¤ÆºÇ¸å¤Ë¼Â¹Ô¤·¤¿¥³¥Þ¥ó¥É¤ò¼è¤ê¾Ã¤·¤Þ¤·¤ç¤¦¡£
   4. ÂºÂ£Ã…٤á¢x Â¤Ã²Â»ÃˆÃѤ·¤Æ¸í¤ê¤òô¤Æ½¤Àµ¤·¤Þ¤·¤ç¤¦¡£
@@ -406,7 +408,7 @@ NOTE:  
 --->  Â¤Â³Â¤ÃŽÂ¹Ã§Â¤Ã²Â¿ÃÎä·¤¿»þ¤Ã¡¢¤½¤Î¿Ã¤Ã´ö¤Ä¤«Ìä°ã¤Ã¤¿¥­¡¼¤ò²¡¤·¤â¤·¤¿!
 --->  Â¤Â³Â¤ÃŽÂ¹Ã”¤òÆþÎä·¤¿»þ¤Ë¡¢¤½¤Î¿Ã¤Ã´ö¤Ä¤«´Ö°ã¤Ã¤¿¥­¡¼¤ò²¡¤·¤Þ¤·¤¿!
 
-  5. Â¤ÂµÂ¤Â¡Â¡Â¢Â¥Ã¬Â¥ÃƒÂ¥Â¹Â¥Ã³ 3.2 Â¤Ã˜Â¿ÃŠÂ¤ÃŸÂ¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
+  5. Â¤ÂµÂ¤Â¡Â¡Â¢Â¥Ã¬Â¥ÃƒÂ¥Â¹Â¥Ã³ 3.3 Â¤Ã˜Â¿ÃŠÂ¤ÃŸÂ¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
 
 NOTE: Â¼Ã‚ºÃ¤Ë»î¤·¤Þ¤·¤ç¤¦¡£·è¤·¤Æ³Ã¤¨¤ë¤À¤±¤Ë¤Ã¤·¤Ê¤¤¤³¤È¡£
 
@@ -428,8 +430,8 @@ NOTE: 
 
   5. ÂºÃ‡Â½Ã©Â¤ÃŽÂ¹Ã”¤¬¼¡¤Î¹Ô¤ÎÃäˤʤë¤Þ¤Ç¥¹¥Æ¥Ã¥× 3 Â¤Ãˆ 4 Â¤Ã²Â·Â«Â¤ÃªÃŠÃ–¤·¤Þ¤¹¡£
 
----> This lubw has a few wptfd that mrrf changing usf the change command.
----> This line has a few words that need changing using the change command.
+---> This lubw has a few wptfd that mrrf changing usf the change operator.
+---> This line has a few words that need changing using the change operator.
 
 cw Â¤Ãñ¸ì¤òÊѹ¹¤¹¤ë¤À¤±¤Ç¤Ê¤¯¡¢ÃÞÆþ¤â¹Ô¤¨¤ë¤³¤È¤ËÃí°Õ¤·¤Þ¤·¤ç¤¦¡£
 
@@ -494,7 +496,7 @@ NOTE:  
      Â¤Ã‹Â¹Ã”ÈÖ¹æ¤ò³Ã¤¨¤Æ¤ª¤­¤Þ¤·¤ç¤¦¡£
 
 NOTE:  Â²Ã¨ÃŒÃŒÂ¤ÃŽÂ±Â¦Â²Â¼Â¶Ã¹Â¤Ã‹Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤ÃŽÂ°ÃŒÃƒÃ–¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤³¤ì¤Ã
-       'ruler' Â¥ÂªÂ¥Ã—¥·¥ç¥ó(¥ì¥Ã¥¹¥ó6¤ÇÀâÌÀ)¤òÀßÄꤹ¤ë¤³¤È¤Çɽ¼¨¤µ¤ì¤Þ¤¹¡£
+       'ruler' Â¥ÂªÂ¥Ã—¥·¥ç¥ó(:help 'ruler' Â¤Ã²Â»Â²Â¾Ãˆ)¤òÀßÄꤹ¤ë¤³¤È¤Çɽ¼¨¤µ¤ì¤Þ¤¹¡£
 
   2. ÂºÃ‡Â²Â¼Â¹Ã”¤Ë°ÜÆ°¤¹¤ë¤¿¤á¤Ë G Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·¤Þ¤·¤ç¤¦¡£
      Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃ€Ã¨Ã†Â¬Â¤Ã‹Â°ÃœÃ†Â°Â¤Â¹Â¤Ã«Â¤Ã‹Â¤Ã gg Â¤ÃˆÂ¥Â¿Â¥Â¤Â¥Ã—¤·¤Þ¤·¤ç¤¦¡£
@@ -523,8 +525,8 @@ NOTE:  
   5. Â¸ÂµÂ¤ÃŽÂ¾Ã¬Â½ÃªÂ¤Ã‹ÃŒÃ¡Â¤Ã«Â¤Ã‹Â¤Ã CTRL-O (Ctrl Â¤Ã²Â²Â¡Â¤Â·Ã‚³¤±¤Ê¤¬¤é o ÃŠÂ¸Â»ÃºÂ¥Â¿Â¥Â¤Â¥Ã—)¤ò¥¿¥¤¥×¤·
      Â¤ÃžÂ¤Â¹Â¡Â£Â¤ÂµÂ¤Ã©Â¤Ã‹ÃŒÃ¡Â¤Ã«Â¤Ã‹Â¤Ã¤³¤ì¤ò·«¤êÊÖ¤·¤Þ¤¹¡£CTRL-I Â¤ÃðÊý¸þ¤Ç¤¹¡£
 
-Note: "errroor" Â¤Ã error Â¤ÃˆÂ¥Â¹Â¥ÃšÂ¥Ã«Â¤Â¬Â°Ã£Â¤Â¤Â¤ÃžÂ¤Â¹;  errroor Â¤Ã¤¤¤ï¤æ¤ë error Â¤Ã‡Â¤Â¹Â¡Â£
-Note: Â¸Â¡ÂºÃ·Â¤Â¬Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ½ÂªÂ¤Ã¯Â¤ÃªÂ¤Ã‹ÃƒÂ£Â¤Â¹Â¤Ã«Â¤ÃˆÂ¡Â¢Â¥ÂªÂ¥Ã—¥·¥ç¥ó 'wrapscan' Â¤Â¬Ã€ÃŸÃ„ꤵ¤ì¤Æ¤¤¤ë
+--->  "errroor" Â¤Ã error Â¤ÃˆÂ¥Â¹Â¥ÃšÂ¥Ã«Â¤Â¬Â°Ã£Â¤Â¤Â¤ÃžÂ¤Â¹;  errroor Â¤Ã¤¤¤ï¤æ¤ë error Â¤Ã‡Â¤Â¹Â¡Â£
+NOTE: Â¸Â¡ÂºÃ·Â¤Â¬Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ½ÂªÂ¤Ã¯Â¤ÃªÂ¤Ã‹ÃƒÂ£Â¤Â¹Â¤Ã«Â¤ÃˆÂ¡Â¢Â¥ÂªÂ¥Ã—¥·¥ç¥ó 'wrapscan' Â¤Â¬Ã€ÃŸÃ„ꤵ¤ì¤Æ¤¤¤ë
       Â¾Ã¬Â¹Ã§Â¤Ã¡¢¥Õ¥¡¥¤¥ë¤ÎÀèƬ¤«¤é¸¡º÷¤ò³¹Ô¤·¤Þ¤¹¡£
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -541,7 +543,7 @@ Note: 
 
   4. ÂºÃ‡Â½Ã©Â¤ÃŽÂ³Ã§Â¸ÃŒÂ¤Ã‹Â°ÃœÃ†Â°Â¤Â¹Â¤Ã«Â¤Ã‹Â¤Ã % Â¤ÃˆÂ¥Â¿Â¥Â¤Â¥Ã—¤·¤Þ¤·¤ç¤¦¡£
 
-  5. Ã‚¾¤Î (,),[,],{ or } Â¤Ã‡Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤Ã²Â°ÃœÃ†Â°Â¤Â·Â¡Â¢% Â¤Â¬Â²Â¿Â¤Ã²Â¤Â·Â¤Ã†Â¤Â¤Â¤Ã«Â¤Â«Â³ÃŽÃ‡Â§Â¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
+  5. Ã‚¾¤Î (,),[,],{ Â¤Ã¤ } Â¤Ã‡Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤Ã²Â°ÃœÃ†Â°Â¤Â·Â¡Â¢% Â¤Â¬Â²Â¿Â¤Ã²Â¤Â·Â¤Ã†Â¤Â¤Â¤Ã«Â¤Â«Â³ÃŽÃ‡Â§Â¤Â·Â¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦Â¡Â£
 
 ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
 
@@ -612,10 +614,10 @@ NOTE: 
      Â¥Â·Â¥Â§Â¥Ã«Â¥Ã—¥í¥ó¥×¥È¤Î¤è¤¦¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤Î°ìÃ÷¤¬É½¼¨¤µ¤ì¤ë¤Ã¤º¤Ç¤¹¡£
      Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã ls Â¤Â¬Ã†Â°Â¤Â«Â¤ÃŠÂ¤Â¤Â¤ÃŠÂ¤Ã©Â¤Ã :!dir Â¤Ã²Â»ÃˆÃѤ·¤Þ¤·¤ç¤¦¡£
 
-Note:  Â¤Â³Â¤ÃŽÃŠÃ½Ã‹Â¡Â¤Ã‹Â¤Ã¨Â¤ÃƒÂ¤Ã†Â¤Â¢Â¤Ã©Â¤Ã¦Â¤Ã«Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬Â¼Ã‚¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤â¤Ã¤í¤ó°ú¿ô
+NOTE:  Â¤Â³Â¤ÃŽÃŠÃ½Ã‹Â¡Â¤Ã‹Â¤Ã¨Â¤ÃƒÂ¤Ã†Â¤Â¢Â¤Ã©Â¤Ã¦Â¤Ã«Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬Â¼Ã‚¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤â¤Ã¤í¤ó°ú¿ô
        Â¤Ã¢Ã¿¤¨¤é¤ì¤Þ¤¹¡£
 
-Note:  Ã´¤Æ¤Î : Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã <ENTER> Â¤Ã²Â²Â¡Â¤Â·Â¤Ã†Â½ÂªÃŽÂ»Â¤Â·Â¤ÃŠÂ¤Â±Â¤Ã¬Â¤Ã¤Ê¤ê¤Þ¤»¤ó¡£
+NOTE:  Ã´¤Æ¤Î : Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã <ENTER> Â¤Ã²Â²Â¡Â¤Â·Â¤Ã†Â½ÂªÃŽÂ»Â¤Â·Â¤ÃŠÂ¤Â±Â¤Ã¬Â¤Ã¤Ê¤ê¤Þ¤»¤ó¡£
        Â°ÃŠÂ¹ÃŸÂ¤Ã‡Â¤Ã¤³¤Î¤³¤È¤Ë¸ÀµÚ¤·¤Þ¤»¤ó¡£
 
 
@@ -633,9 +635,9 @@ Note:  
   3. Â¤Ã‡Â¤Ã :w TEST Â¤ÃˆÂ¥Â¿Â¥Â¤Â¥Ã—¤·¤Þ¤·¤ç¤¦ (TEST Â¤Ã¡¢Ãª¤ó¤À¥Õ¥¡¥¤¥ë̾¤Ç¤¹)¡£
 
   4. Â¤Â³Â¤Ã¬Â¤Ã‹Â¤Ã¨Â¤ÃªÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Ã´ÂΤ¬ TEST Â¤ÃˆÂ¤Â¤Â¤Â¦ÃŒÂ¾Ã°¤ÇÊø¤µ¤ì¤Þ¤¹¡£
-     Â¤Ã¢Â¤Â¦Â°Ã¬Ã…Ù :!dir Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã !ls Â¤ÃˆÂ¥Â¿Â¥Â¤Â¥Ã—¤·¤Æ³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
+     Â¤Ã¢Â¤Â¦Â°Ã¬Ã…Ù :!dir Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã :!ls Â¤ÃˆÂ¥Â¿Â¥Â¤Â¥Ã—¤·¤Æ³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
 
-Note: Â¤Â³Â¤Â³Â¤Ã‡ Vim Â¤Ã²Â½ÂªÃŽÂ»Â¤Â·Â¡Â¢Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾ TEST Â¤ÃˆÂ¶Â¦Â¤Ã‹ÂµÂ¯Ã†Â°Â¤Â¹Â¤Ã«Â¤ÃˆÂ¡Â¢ÃŠÃ¸¤·¤¿»þ¤Î
+NOTE: Â¤Â³Â¤Â³Â¤Ã‡ Vim Â¤Ã²Â½ÂªÃŽÂ»Â¤Â·Â¡Â¢Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾ TEST Â¤ÃˆÂ¶Â¦Â¤Ã‹ÂµÂ¯Ã†Â°Â¤Â¹Â¤Ã«Â¤ÃˆÂ¡Â¢ÃŠÃ¸¤·¤¿»þ¤Î
      Â¥Ã¥å¡¼¥È¥ê¥¢¥ë¤ÎÊ£À½¤¬¤Ç¤­¾å¤¬¤ë¤Ã¤º¤Ç¤¹¡£
 
   5. Â¤ÂµÂ¤Ã©Â¤Ã‹Â¡Â¢Â¼Â¡Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤Ã‹Â¥Â¿Â¥Â¤Â¥Ã—¤·¤Æ¥Õ¥¡¥¤¥ë¤ò¾Ã¤·¤Þ¤·¤ç¤¦(MS-DOS):  :!del TEST
@@ -655,8 +657,8 @@ Note: 
 
   3. ÃŠÂ¸Â»Ãº : Â¤Ã²Â²Â¡Â¤Â¹Â¤ÃˆÂ¡Â¢Â²Ã¨ÃŒÃŒÂ¤ÃŽÂºÃ‡Â²Â¼Ã‰Ã´Â¤Ã‹ :'<,'> Â¤Â¬Â¸Â½Â¤Ã¬Â¤ÃžÂ¤Â¹Â¡Â£
 
-  4. w TEST (TESET Â¤Ã¸ºß¤·¤Ê¤¤¥Õ¥¡¥¤¥ë̾)¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£
-     Enter Â¤Ã²Â²Â¡Â¤Â¹Ã°¤Ë :'<,'>w TEST Â¤ÃˆÂ¤ÃŠÂ¤ÃƒÂ¤Ã†Â¤Â¤Â¤Ã«Â¤Â³Â¤ÃˆÂ¤Ã²Â³ÃŽÃ‡Â§Â¤Â·Â¤Ã†Â²Â¼Â¤ÂµÂ¤Â¤Â¡Â£
+  4. w TEST (TEST Â¤Ã¸ºß¤·¤Ê¤¤¥Õ¥¡¥¤¥ë̾)¤ò¥¿¥¤¥×¤·¤Þ¤¹¡£
+     <ENTER> Â¤Ã²Â²Â¡Â¤Â¹Ã°¤Ë :'<,'>w TEST Â¤ÃˆÂ¤ÃŠÂ¤ÃƒÂ¤Ã†Â¤Â¤Â¤Ã«Â¤Â³Â¤ÃˆÂ¤Ã²Â³ÃŽÃ‡Â§Â¤Â·Â¤Ã†Â²Â¼Â¤ÂµÂ¤Â¤Â¡Â£
 
   5. Vim Â¤Ã TEST Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹ÃªÂò¤µ¤ì¤¿¹Ô¤ò½ñ¤­¹þ¤à¤Ç¤·¤ç¤¦¡£
      !dir Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã !ls Â¤Ã‡Â¤Â½Â¤Ã¬Â¤Ã²Â³ÃŽÃ‡Â§Â¤Â·Â¤ÃžÂ¤Â¹Â¡Â£
@@ -747,7 +749,7 @@ NOTE: 
 
   3. Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤ÃŽÂ¸Ã¥Â¤Ã­Â¤Ã‹Â¥Ã†Â¥Â­Â¥Â¹Â¥ÃˆÂ¤Ã²Ã„ɲ乤뤿¤á¤Ë a (¾®Ê¸»ú) Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·¤Þ¤¹¡£
 
-  4. Â¤Â½Â¤ÃŽÂ²Â¼Â¤ÃŽÂ¹Ã”¤Î¤Î¤è¤¦¤Êñ¸ì¤Ë´°À®¤µ¤»¤Þ¤¹¡£ÃÞÆþ¥â¡¼¥É¤òÈ´¤±¤ë°Ù¤Ë <ESC> Â¤Ã‹Â²Â¡
+  4. Â¤Â½Â¤ÃŽÂ²Â¼Â¤ÃŽÂ¹Ã”¤Î¤è¤¦¤Êñ¸ì¤Ë´°À®¤µ¤»¤Þ¤¹¡£ÃÞÆþ¥â¡¼¥É¤òÈ´¤±¤ë°Ù¤Ë <ESC> Â¤Ã²Â²Â¡
      Â¤Â·Â¤ÃžÂ¤Â¹Â¡Â£
 
   5. e Â¤Ã²Â»ÃˆÂ¤ÃƒÂ¤Ã†Â¼Â¡Â¤ÃŽÃ‰Ã”´°Ã´¤Êñ¸ì¤Ø°ÜÆ°¤·¡¢¥¹¥Æ¥Ã¥× 3 Â¤Ãˆ 4 Â¤Ã²Â·Â«Â¤ÃªÃŠÃ–¤·¤Þ¤¹¡£
@@ -755,7 +757,7 @@ NOTE: 
 ---> This li will allow you to pract appendi text to a line.
 ---> This line will allow you to practice appending text to a line.
 
-Note: a, i Â¤Ãˆ A Â¤ÃƱ¤¸ÃÞÆþ¥â¡¼¥É¤Ø°Ü¤ê¤Þ¤¹¤¬¡¢Ê¸»ú¤¬ÃÞÆþ¤µ¤ì¤ë°ÌÃÖ¤À¤±¤¬°Û¤Ê¤ê
+NOTE: a, i Â¤Ãˆ A Â¤ÃƱ¤¸ÃÞÆþ¥â¡¼¥É¤Ø°Ü¤ê¤Þ¤¹¤¬¡¢Ê¸»ú¤¬ÃÞÆþ¤µ¤ì¤ë°ÌÃÖ¤À¤±¤¬°Û¤Ê¤ê
       Â¤ÃžÂ¤Â¹Â¡Â£
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -772,7 +774,7 @@ Note: a, i 
   3. ÃƒÃ–´¹¥â¡¼¥É¤òÈ´¤±¤ë¤Ë¤à<ESC> Â¤Ã²Â²Â¡Â¤Â·Â¤ÃžÂ¤Â¹Â¡Â£Â¹Ã”¤Î»Ä¤ê¤¬Êѹ¹¤µ¤ì¤Æ¤¤¤Ê¤¤¤Þ¤Þ¤Ë
      Â¤ÃŠÂ¤Ã«Â¤Â³Â¤ÃˆÂ¤Ã‹ÃƒÃ­Â°Ã•Â¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤Â¡Â£
 
-  5. Â»Ã„¤Ã¤¿ xxx Â¤Ã²Â¥Â¹Â¥Ã†Â¥ÃƒÂ¥Ã—¤ò·«¤êÊÖ¤·¤ÆÃÖ´¹¤·¤Þ¤·¤ç¤¦¡£
+  4. Â»Ã„¤Ã¤¿ xxx Â¤Ã²Â¥Â¹Â¥Ã†Â¥ÃƒÂ¥Ã—¤ò·«¤êÊÖ¤·¤ÆÃÖ´¹¤·¤Þ¤·¤ç¤¦¡£
 
 ---> Adding 123 to xxx gives you xxx.
 ---> Adding 123 to 456 gives you 579.
@@ -803,7 +805,7 @@ NOTE: 
 --->  a) this is the first item.
       b)
 
-  Note: ÃƒÂ±Â¸Ã¬Â¤Ã²1¤Ä yank Â¤Â¹Â¤Ã«Â¤ÃŽÂ¤Ã‹ y Â¤Ã²Â¥ÂªÂ¥ÃšÂ¥Ã¬Â¡Â¼Â¥Â¿Â¤ÃˆÂ¤Â·Â¤Ã† yw Â¤ÃˆÂ¤Â¹Â¤Ã«Â¤Â³Â¤ÃˆÂ¤Ã¢Â½ÃÃè¤Þ¤¹¡£
+  NOTE: ÃƒÂ±Â¸Ã¬Â¤Ã²1¤Ä yank Â¤Â¹Â¤Ã«Â¤ÃŽÂ¤Ã‹ y Â¤Ã²Â¥ÂªÂ¥ÃšÂ¥Ã¬Â¡Â¼Â¥Â¿Â¤ÃˆÂ¤Â·Â¤Ã† yw Â¤ÃˆÂ¤Â¹Â¤Ã«Â¤Â³Â¤ÃˆÂ¤Ã¢Â½ÃÃè¤Þ¤¹¡£
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                       Â¥Ã¬Â¥ÃƒÂ¥Â¹Â¥Ã³ 6.5: Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤ÎÀßÄê
 
@@ -824,8 +826,8 @@ NOTE: 
 
   6. Ã‚çʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò̵¸ú¤Ë¤¹¤ë¤Ë¤Ã¼¡¤ÎÃäËÆþÎä·¤Þ¤¹:  :set noic
 
-Note: Â¥ÃžÂ¥ÃƒÂ¥Ã¤Î¶¯Ä´É½¼¨¤ò¤ä¤á¤ë¤Ë¤Ã¼¡¤ÎÃäËÆþÎä·¤Þ¤¹: :nohlsearch
-Note: 1¤Ä¤Î¸¡º÷¥³¥Þ¥ó¥É¤À¤±Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò¤ä¤á¤¿¤¤¤Ê¤é¤Ã¡¢¥Õ¥ì¡¼¥º¤Ë \c
+NOTE: Â¥ÃžÂ¥ÃƒÂ¥Ã¤Î¶¯Ä´É½¼¨¤ò¤ä¤á¤ë¤Ë¤Ã¼¡¤ÎÃäËÆþÎä·¤Þ¤¹: :nohlsearch
+NOTE: 1¤Ä¤Î¸¡º÷¥³¥Þ¥ó¥É¤À¤±Âçʸ»ú¾®Ê¸»ú¤Î¶èÊ̤ò¤ä¤á¤¿¤¤¤Ê¤é¤Ã¡¢¥Õ¥ì¡¼¥º¤Ë \c
       Â¤Ã²Â»ÃˆÃѤ·¤Þ¤¹:  /ignore\c  <ENTER>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                Â¥Ã¬Â¥ÃƒÂ¥Â¹Â¥Ã³ 6 Ã×Ìó
@@ -869,16 +871,16 @@ Note: 1
   ":help" Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã‹Â°ÃºÂ¿Ã´Â¤Ã²Ã¿¤¨¤ë¤³¤È¤Ë¤è¤ê¡¢¤¢¤é¤æ¤ëÂê̾¤Î¥Ø¥ë¥×¤ò¸«¤Ä¤±¤ë¤³¤È
   Â¤Â¬Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â¹Â¡Â£Â¤Â³Â¤Ã¬Â¤Ã©Â¤Ã²Â»Ã®Â¤Â·Â¤Ã†Â¤ÃŸÂ¤ÃžÂ¤Â·Â¤Ã§Â¤Â¦(<ENTER> Â¤Ã²Â¥Â¿Â¥Â¤Â¥Ã—¤·Ëº¤ì¤Ê¤¤¤è¤¦¤Ë):
 
-  :help w
-  :help c_<T
-  :help insert-index
-  :help user-manual
+       :help w
+       :help c_CTRL-D
+       :help insert-index
+       :help user-manual
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      Â¥Ã¬Â¥ÃƒÂ¥Â¹Â¥Ã³ 7.2: ÂµÂ¯Ã†Â°Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È¤ÎºîÀ®
 
                         ** Vim Â¤ÃŽÃ†ÃƒÃ„§¤òȯ´ø¤¹¤ë **
 
-  Vim Â¤Ã‹Â¤Ã Vi Â¤Ã¨Â¤ÃªÂ¤Ã¢Ã‚¿¤¯¤ÎÆÃħ¤òƧ¤Þ¤¨¤Æ¤¤¤Þ¤¬¡¢¤½¤Î¤Û¤È¤ó¤É¤Ã½é´ü¾õÂ֤ˤÆ
+  Vim Â¤Ã‹Â¤Ã Vi Â¤Ã¨Â¤ÃªÂ¤Ã¢Ã‚¿¤¯¤ÎÆÃħ¤òƧ¤Þ¤¨¤Æ¤¤¤Þ¤¹¤¬¡¢¤½¤Î¤Û¤È¤ó¤É¤Ã½é´ü¾õÂ֤ˤÆ
   Â»ÃˆÃÑÉԲĤȤʤäƤ¤¤Þ¤¹¡£¤è¤ê¿¤¯¤ÎÆÃħ¤ò»È¤¤¤Ã¤¸¤á¤ë¤Ë¤à"vimrc" Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«
   Â¤Ã²ÂºÃ®Ã€Â®Â¤Â·Â¤ÃžÂ¤Â¹Â¡Â£
 
@@ -947,7 +949,7 @@ NOTE: 
   Â¤Â³Â¤Ã¬Â¤Ã‹Â¤Ã† Vim Â¤ÃŽÂ¥Ã¥å¡¼¥È¥ê¥¢¥ë¤ò½ª¤ï¤ê¤Þ¤¹¡£¥¨¥Ç¥£¥¿¤ò´Êñ¤Ë¡¢¤·¤«¤â½¼Ê¬¤Ë
   Â»ÃˆÂ¤Â¦Â¤Â³Â¤ÃˆÂ¤Â¬Â¤Ã‡Â¤Â­Â¤Ã«Â¤Ã¨Â¤Â¦Â¤Ã‹Â¤ÃˆÂ¡Â¢Vim Â¤ÃŽÂ»Ã½Â¤Ã„³µÇ°¤ÎÃ×ÅÀ¤Î¤ß¤òÅ䨤褦¤È¤·¤Þ¤·¤¿¡£
   Vim Â¤Ã‹Â¤Ã¤µ¤é¤Ë¿¤¯¤Î¥³¥Þ¥ó¥É¤¬¤¢¤ê¡¢¤³¤³¤Çô¤Æ¤òÀâÌÀ¤¹¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó¡£
-  Â°ÃŠÂ¹ÃŸÂ¤Ã¥æ¡¼¥¶¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È¤¯¤À¤µ¤¤: "help :user-manual"
+  Â°ÃŠÂ¹ÃŸÂ¤Ã¥æ¡¼¥¶¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È¤¯¤À¤µ¤¤: ":help user-manual"
 
   Â¤Â³Â¤Ã¬Â°ÃŠÂ¸Ã¥Â¤ÃŽÂ³Ã˜Â½Â¬Â¤ÃŽÂ¤Â¿Â¤Ã¡Â¤Ã‹Â¡Â¢Â¼Â¡Â¤ÃŽÃ‹ÃœÂ¤Ã²Â¿Ã¤Ã¦¤·¤Þ¤¹¡£
        Vim - Vi Improved - by Steve Oualline
index 7be2120..2a6de3a 100644 (file)
 
   3. \89º\82Ö\82ÃŒ\83L\81[\82ð\8eg\82Ã\82Ä\81A\83\8c\83b\83X\83\931.2 \82É\88Ú\93®\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
-Note\89½\82ð\83^\83C\83v\82µ\82Ä\82¢\82é\82©\94»\82ç\82È\82­\82È\82Ã\82½\82ç\81A<ESC>\82ð\89\9f\82µ\82Ä\83m\81[\83}\83\8b\83\82\81[\83h\82É\82µ
+NOTE\89½\82ð\83^\83C\83v\82µ\82Ä\82¢\82é\82©\94»\82ç\82È\82­\82È\82Ã\82½\82ç\81A<ESC>\82ð\89\9f\82µ\82Ä\83m\81[\83}\83\8b\83\82\81[\83h\82É\82µ
       \82Ãœ\82·\81B\82»\82ê\82©\82ç\93ü\97Ã\82µ\82æ\82¤\82Æ\82µ\82Ä\82¢\82½\83R\83}\83\93\83h\82ð\8dÄ\93ü\97Ã\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
-Note\83J\81[\83\\83\8b\83L\81[\82Ã…\82à\88Ú\93®\82Ã…\82«\82Ãœ\82·\81B\82µ\82©\82µ hjkl \82É\88ê\93x\8aµ\82ê\82Ä\82µ\82Ãœ\82¦\82ÃŽ\81A\82Ã\82é\82©
+NOTE\83J\81[\83\\83\8b\83L\81[\82Ã…\82à\88Ú\93®\82Ã…\82«\82Ãœ\82·\81B\82µ\82©\82µ hjkl \82É\88ê\93x\8aµ\82ê\82Ä\82µ\82Ãœ\82¦\82ÃŽ\81A\82Ã\82é\82©
       \82É\91¬\82­\88Ú\93®\82·\82é\82±\82Æ\82ª\82Ã…\82«\82é\82Ã…\82µ\82Ã¥\82¤\81B\82¢\82â\83}\83W\82Ã…!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -109,7 +109,7 @@ NOTE: 
 ---> \82±\82ÃŒ \82É\82à\91«\82è\82È\82¢ \83e\83L\83X\83\82 \82é\81B
 ---> \82±\82ÃŒ \8d\82É\82à\8aô\82Â\82© \91«\82è\82È\82¢ \83e\83L\83X\83\82ª \82 \82é\81B
 
-  5. \91}\93ü\82ÃŒ\95û\96@\82ª\82í\82©\82Ã\82½\82ç\89º\82ÃŒ\83\8c\83b\83X\83\931\82ÃŒ\97v\96ñ\82ð\8c©\82Ãœ\82µ\82Ã¥\82¤\81B
+  5. \91}\93ü\82ÃŒ\95û\96@\82ª\82í\82©\82Ã\82½\82ç\83\8c\83b\83X\83\93 1.5 \82Ö\90i\82Ã\82Ãœ\82µ\82Ã¥\82¤\81B
 
 
 
@@ -117,7 +117,7 @@ NOTE: 
                     \83\8c\83b\83X\83\93 1.5: \83e\83L\83X\83g\95Ã’\8fW - \92Ç\89Ã
 
 
-                ** \83e\83L\83X\83g\92Ç\89Ã\82·\82é\82É\82àA \82ð\89\9f\82µ\82Ãœ\82µ\82Ã¥\82¤ **
+                ** \83e\83L\83X\83g\82ð\92Ç\89Ã\82·\82é\82É\82àA \82ð\89\9f\82µ\82Ãœ\82µ\82Ã¥\82¤ **
 
   1. \88È\89º\82ÃŒ ---> \82Æ\8e¦\82³\82ê\82½\8dÃ…\8f\89\82ÃŒ\8ds\82É\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
      \83J\81[\83\\83\8b\82ª\82»\82ÃŒ\95¶\8e\9a\8fã\82É\82 \82Ã\82Ä\82à\82©\82Ãœ\82¢\82Ãœ\82¹\82ñ\81B
@@ -126,8 +126,8 @@ NOTE: 
 
   3. \83e\83L\83X\83g\82ð\92Ç\89Ã\82µ\8fI\82¦\82½\82ç\81A <ESC> \82ð\89\9f\82µ\82Ä\83m\81[\83}\83\8b\83\82\81[\83h\82É\96ß\82è\82Ãœ\82µ\82Ã¥\82¤\81B
 
-  4. 2\8ds\96Ú\82ÃŒ ---> \82Æ\8e¦\82³\82ê\82½\8fê\8f\8a\82Ö\88Ú\93®\82µ\81A\83X\83e\83b\83v 2 \82©\82ç 3 \8cJ\82è\95Ô\82µ\82Ä\95¶\96@\82ð
-     \8fC\90³\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
+  4. 2\8ds\96Ú\82ÃŒ ---> \82Æ\8e¦\82³\82ê\82½\8fê\8f\8a\82Ö\88Ú\93®\82µ\81A\83X\83e\83b\83v 2 \82©\82ç 3 \82ð\8cJ\82è\95Ô\82µ\82Ä\95¶\96@
+     \82ð\8fC\90³\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
 ---> \82±\82±\82É\82Ã\8aÔ\88á\82Ã\82½\83e\83L\83X\83g\82ª\82 \82è
      \82±\82±\82É\82Ã\8aÔ\88á\82Ã\82½\83e\83L\83X\83g\82ª\82 \82è\82Ãœ\82·\81B
@@ -145,7 +145,8 @@ NOTE: 
   !! NOTE: \88È\89º\82ÃŒ\83X\83e\83b\83v\82ð\8eÀ\8ds\82·\82é\91O\82É\81A\82Ãœ\82¸\91S\91ÃŒ\82ð\93Ç\82ñ\82Ã…\82­\82¾\82³\82¢!!
 
   1. \83\8c\83b\83X\83\93 1.2 \82Ã…\82â\82Ã\82½\82æ\82¤\82É :q! \82ð\83^\83C\83v\82µ\82Ä\81A\82±\82ÃŒ\83`\83\85\81[\83g\83\8a\83A\83\8b\82ð\8fI\97¹
-     \82µ\82Ãœ\82·\81B
+     \82µ\82Ãœ\82·\81B\82 \82é\82¢\82Ã\81A\95Ê\82ÃŒ\92[\96\96\82ª\82 \82é\8fê\8d\87\82Ã\82»\82±\82Ã…\88È\89º\82ÃŒ\93à\97e\82ð\8ds\82Ã\82Ä\82à\82©\82Ãœ\82¢
+     \82Ãœ\82¹\82ñ\81B
 
   2. \83V\83F\83\8b\83v\83\8d\83\93\83v\83g\82Ã…\82±\82ÃŒ\83R\83}\83\93\83h\82ð\83^\83C\83v\82µ\82Ãœ\82·:  vim tutor <ENTER>
      'vim'\82ª Vim \83G\83f\83B\83^\82ð\8bN\93®\82·\82é\83R\83}\83\93\83h\81A'tutor' \82Ã\95Ã’\8fW\82µ\82½\82¢\83t\83@\83C\83\8b\82ÃŒ
@@ -155,7 +156,8 @@ NOTE: 
 
   4. \95Ã\8dX\82ð\83t\83@\83C\83\8b\82É\95Û\91¶\82µ\82Ãœ\82·:  :wq  <ENTER>
 
-  5. vimtutor \82ð\8dÄ\93x\8bN\93®\82µ\81A\88È\89º\82ÃŒ\97v\96ñ\82Ö\90i\82Ã\82Ãœ\82µ\82Ã¥\82¤\81B
+  5. \83X\83e\83b\83v 1 \82Ã… vimtutuor \82ð\8fI\97¹\82µ\82½\8fê\8d\87\82àvimtutor \82ð\8dÄ\93x\8bN\93®\82µ\81A\88È\89º\82ÃŒ
+     \97v\96ñ\82Ö\90i\82Ã\82Ãœ\82µ\82Ã¥\82¤\81B
 
   6. \88È\8fã\82ÃŒ\83X\83e\83b\83v\82ð\93Ç\82ñ\82Ã…\97\9d\89ð\82µ\82½\8fã\82Ã…\82±\82ê\82ð\8eÀ\8ds\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
   
@@ -215,7 +217,7 @@ NOTE: <ESC> 
 
   2. \88È\89º\82ÃŒ ---> \82Æ\8e¦\82³\82ê\82½\8ds\82É\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
-  3. \90³\82µ\82¢\95¶\82ÃŒ\96\96\94ö\82Ö\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\82Ãœ\82µ\82Ã¥\82¤(\8dÃ…\8f\89\82ÃŒ . \82ÃŒ\8cã\82Ã…\82·)\81B
+  3. \90³\82µ\82¢\95¶\82ÃŒ\96\96\94ö\82Ö\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\82Ãœ\82µ\82Ã¥\82¤(\8dÃ…\8f\89\82ÃŒ \81B \82ÃŒ\8cã\82Ã…\82·)\81B
 
   4. \8ds\96\96\82Ãœ\82Ã…\8dí\8f\9c\82·\82é\82ÃŒ\82É d$ \82Æ\83^\83C\83v\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
@@ -232,7 +234,7 @@ NOTE: <ESC> 
                     \83\8c\83b\83X\83\93 2.3: \83I\83y\83\8c\81[\83^\82Æ\83\82\81[\83V\83\87\83\93
 
 
-  \91½\82­\82ÃŒ\83R\83}\83\93\83h\82Ã\83I\83y\83\8c\81[\83^\82Æ\83\82\81[\83V\83\87\83\93\82©\82ç\83e\83L\83X\83g\82É\95Ã\8dX\82ð\89Ã\82Ãœ\82·\81B
+  \91½\82­\82ÃŒ\83R\83}\83\93\83h\82Ã\83I\83y\83\8c\81[\83^\82Æ\83\82\81[\83V\83\87\83\93\82©\82ç\83e\83L\83X\83g\82É\95Ã\8dX\82ð\89Ã\82¦\82Ãœ\82·\81B
   \8dí\8f\9c\83R\83}\83\93\83h d \82ÃŒ\83I\83y\83\8c\81[\83^\82Ã\8e\9f\82ÃŒ\97l\82É\82È\82Ã\82Ä\82¢\82Ãœ\82·:
 
        d   \83\82\81[\83V\83\87\83\93
@@ -259,13 +261,13 @@ NOTE: 
 
   1. \88È\89º\82ÃŒ ---> \82Æ\8e¦\82³\82ê\82½\8ds\82ÃŒ\90æ\93ª\82É\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\82Ãœ\82·\81B
 
-  2. 2dw \82ð\83^\83C\83v\82µ\82Ä\92P\8cê2\82Â\95ª\88Ú\93®\82µ\82Ãœ\82·\81B
+  2. 2\82ð\83^\83C\83v\82µ\82Ä\92P\8cê2\82Â\95ª\91O\82É\88Ú\93®\82µ\82Ãœ\82·\81B
 
   3. 3e \82ð\83^\83C\83v\82µ\82Ä3\82Â\96Ú\82ÃŒ\92P\8cê\82ÃŒ\8fI\92[\82É\88Ú\93®\82µ\82Ãœ\82·\81B
 
   4. 0 (\83[\83\8d)\82ð\83^\83C\83v\82µ\82Ä\8ds\93ª\82É\88Ú\93®\82µ\82Ãœ\82·\81B
 
-  5. \83X\83e\83b\83v 2 \82Æ 3 \82ð\88á\82¤\90\94\92l\82Æ\8eg\82Ã\82Ä\8cJ\82è\95Ô\82µ\82Ãœ\82·\81B
+  5. \83X\83e\83b\83v 2 \82Æ 3 \82ð\88á\82¤\90\94\92l\82ð\8eg\82Ã\82Ä\8cJ\82è\95Ô\82µ\82Ãœ\82·\81B
 
 ---> This is just a line with words you can move around in.
 
@@ -286,7 +288,7 @@ NOTE: 
 
   1. ---> \82Æ\8e¦\82³\82ê\82½\8ds\82ÃŒ\8ds\93ª\95\94\95ª\82É\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
-  2. UPPER CASE \82ÃŒ\92P\8cê2\82Â\82ð 2d\82Æ\83^\83C\83v\82µ\82Ä\8dí\8f\9c\82µ\82Ãœ\82·\81B
+  2. UPPER CASE \82ÃŒ\92P\8cê2\82Â\82ð d2\82Æ\83^\83C\83v\82µ\82Ä\8dí\8f\9c\82µ\82Ãœ\82·\81B
 
   3. UPPER CASE \82Æ\82¢\82¤\98A\91±\82µ\82½\92P\8cê\82ð\81A1\82Â\82ÃŒ\83R\83}\83\93\83h\82Æ\88Ù\82È\82é\83J\83E\83\93\83g\82ð\8ew\92è\82µ\81A
      \83X\83e\83b\83v 1 \82Æ 2 \82ð\8cJ\82è\95Ô\82µ\82Ãœ\82·\81B
@@ -326,8 +328,8 @@ NOTE:  
 
   ** \8dÃ…\8cã\82ÃŒ\83R\83}\83\93\83h\82ð\8eæ\82è\8fÃ\82·\82É\82àu \82ð\89\9f\82µ\82Ãœ\82·\81BU \82Ã\8ds\91S\91ÃŒ\82ÃŒ\8eæ\8fÃ\82Ã…\82·\81B **
 
-  1. \88È\89º\82ÃŒ ---> \82Æ\8e¦\82³\82ê\82½\8ds\82É\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\81A\8dÃ…\8f\89\82ÃŒ\8aÔ\88á\82¢\82É\83J\81[\83\
-     \83\8b\82ð\88Ú\93®\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
+  1. \88È\89º\82ÃŒ ---> \82Æ\8e¦\82³\82ê\82½\8ds\82É\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\81A\8dÃ…\8f\89\82ÃŒ\8aÔ\88á\82¢\82É\83J\81[\83\\83\8b
+     \82ð\88Ú\93®\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
   2. x \82ð\83^\83C\83v\82µ\82Ä\82¢\82ç\82È\82¢\90æ\93ª\82ÃŒ\95¶\8e\9a\82ð\8dí\8f\9c\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
   3. \82³\82\9f\81Au \82ð\83^\83C\83v\82µ\82Ä\8dÃ…\8cã\82É\8eÀ\8ds\82µ\82½\83R\83}\83\93\83h\82ð\8eæ\82è\8fÃ\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
   4. \8d¡\93x\82Ã\81Ax \82ð\8eg\97p\82µ\82Ä\8cë\82è\82ð\91S\82Ä\8fC\90³\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
@@ -406,7 +408,7 @@ NOTE:  
 --->  \82±\82ÃŒ\8d\87\82ð\90l\97Ã\82µ\82½\8e\9e\82Ë\81A\82»\82ÃŒ\90l\82Ã\8aô\82Â\82©\96â\88á\82Ã\82½\83L\81[\82ð\89\9f\82µ\82à\82µ\82½!
 --->  \82±\82ÃŒ\8ds\82ð\93ü\97Ã\82µ\82½\8e\9e\82É\81A\82»\82ÃŒ\90l\82Ã\8aô\82Â\82©\8aÔ\88á\82Ã\82½\83L\81[\82ð\89\9f\82µ\82Ãœ\82µ\82½!
 
-  5. \82³\82\9f\81A\83\8c\83b\83X\83\93 3.2 \82Ö\90i\82Ã\82Ãœ\82µ\82Ã¥\82¤\81B
+  5. \82³\82\9f\81A\83\8c\83b\83X\83\93 3.3 \82Ö\90i\82Ã\82Ãœ\82µ\82Ã¥\82¤\81B
 
 NOTE: \8eÀ\8dÛ\82É\8e\8e\82µ\82Ãœ\82µ\82Ã¥\82¤\81B\8c\88\82µ\82Ä\8ao\82¦\82é\82¾\82¯\82É\82Ã\82µ\82È\82¢\82±\82Æ\81B
 
@@ -428,8 +430,8 @@ NOTE: 
 
   5. \8dÃ…\8f\89\82ÃŒ\8ds\82ª\8e\9f\82ÃŒ\8ds\82ÃŒ\97l\82É\82È\82é\82Ãœ\82Ã…\83X\83e\83b\83v 3 \82Æ 4 \82ð\8cJ\82è\95Ô\82µ\82Ãœ\82·\81B
 
----> This lubw has a few wptfd that mrrf changing usf the change command.
----> This line has a few words that need changing using the change command.
+---> This lubw has a few wptfd that mrrf changing usf the change operator.
+---> This line has a few words that need changing using the change operator.
 
 cw \82Ã\92P\8cê\82ð\95Ã\8dX\82·\82é\82¾\82¯\82Ã…\82È\82­\81A\91}\93ü\82à\8ds\82¦\82é\82±\82Æ\82É\92\8d\88Ó\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
@@ -494,7 +496,7 @@ NOTE:  
      \82É\8ds\94Ô\8d\86\82ð\8ao\82¦\82Ä\82¨\82«\82Ãœ\82µ\82Ã¥\82¤\81B
 
 NOTE:  \89æ\96Ê\82ÃŒ\89E\89º\8b÷\82É\83J\81[\83\\83\8b\82ÃŒ\88Ê\92u\82ª\95\\8e¦\82³\82ê\82Ä\82¢\82é\82©\82à\82µ\82ê\82Ãœ\82¹\82ñ\81B\82±\82ê\82Ã
-       'ruler' \83I\83v\83V\83\87\83\93(\83\8c\83b\83X\83\936\82Ã…\90à\96¾)\82ð\90Ã\92è\82·\82é\82±\82Æ\82Ã…\95\\8e¦\82³\82ê\82Ãœ\82·\81B
+       'ruler' \83I\83v\83V\83\87\83\93(:help 'ruler' \82ð\8eQ\8fÆ)\82ð\90Ã\92è\82·\82é\82±\82Æ\82Ã…\95\\8e¦\82³\82ê\82Ãœ\82·\81B
 
   2. \8dÃ…\89º\8ds\82É\88Ú\93®\82·\82é\82½\82ß\82É G \82ð\83^\83C\83v\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
      \83t\83@\83C\83\8b\82ÃŒ\90æ\93ª\82É\88Ú\93®\82·\82é\82É\82àgg \82Æ\83^\83C\83v\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
@@ -523,8 +525,8 @@ NOTE:  
   5. \8c³\82ÃŒ\8fê\8f\8a\82É\96ß\82é\82É\82àCTRL-O (Ctrl \82ð\89\9f\82µ\91±\82¯\82È\82ª\82ç o \95¶\8e\9a\83^\83C\83v)\82ð\83^\83C\83v\82µ
      \82Ãœ\82·\81B\82³\82ç\82É\96ß\82é\82É\82Ã\82±\82ê\82ð\8cJ\82è\95Ô\82µ\82Ãœ\82·\81BCTRL-I \82Ã\91O\95û\8cü\82Ã…\82·\81B
 
-Note: "errroor" \82àerror \82Æ\83X\83y\83\8b\82ª\88á\82¢\82Ãœ\82·;  errroor \82Ã\82¢\82í\82ä\82é error \82Ã…\82·\81B
-Note\8c\9f\8dõ\82ª\83t\83@\83C\83\8b\82ÃŒ\8fI\82í\82è\82É\92B\82·\82é\82Æ\81A\83I\83v\83V\83\87\83\93 'wrapscan' \82ª\90Ã\92è\82³\82ê\82Ä\82¢\82é
+--->  "errroor" \82àerror \82Æ\83X\83y\83\8b\82ª\88á\82¢\82Ãœ\82·;  errroor \82Ã\82¢\82í\82ä\82é error \82Ã…\82·\81B
+NOTE\8c\9f\8dõ\82ª\83t\83@\83C\83\8b\82ÃŒ\8fI\82í\82è\82É\92B\82·\82é\82Æ\81A\83I\83v\83V\83\87\83\93 'wrapscan' \82ª\90Ã\92è\82³\82ê\82Ä\82¢\82é
       \8fê\8d\87\82Ã\81A\83t\83@\83C\83\8b\82ÃŒ\90æ\93ª\82©\82ç\8c\9f\8dõ\82ð\91±\8ds\82µ\82Ãœ\82·\81B
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -541,7 +543,7 @@ Note: 
 
   4. \8dÃ…\8f\89\82ÃŒ\8a\87\8cÊ\82É\88Ú\93®\82·\82é\82É\82à% \82Æ\83^\83C\83v\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
-  5. \91¼\82ÃŒ (,),[,],{ or } \82Ã…\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\81A% \82ª\89½\82ð\82µ\82Ä\82¢\82é\82©\8am\94F\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
+  5. \91¼\82ÃŒ (,),[,],{ \82â } \82Ã…\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\81A% \82ª\89½\82ð\82µ\82Ä\82¢\82é\82©\8am\94F\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
 ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
 
@@ -612,10 +614,10 @@ NOTE: 
      \83V\83F\83\8b\83v\83\8d\83\93\83v\83g\82ÃŒ\82æ\82¤\82É\83f\83B\83\8c\83N\83g\83\8a\82ÃŒ\88ê\97\97\82ª\95\\8e¦\82³\82ê\82é\82Ã\82¸\82Ã…\82·\81B
      \82à\82µ\82­\82àls \82ª\93®\82©\82È\82¢\82È\82ç\82ÃŽ :!dir \82ð\8eg\97p\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
-Note:  \82±\82ÃŒ\95û\96@\82É\82æ\82Ã\82Ä\82 \82ç\82ä\82é\83R\83}\83\93\83h\82ª\8eÀ\8ds\82·\82é\82±\82Æ\82ª\82Ã…\82«\82Ãœ\82·\81B\82à\82¿\82ë\82ñ\88ø\90\94
+NOTE:  \82±\82ÃŒ\95û\96@\82É\82æ\82Ã\82Ä\82 \82ç\82ä\82é\83R\83}\83\93\83h\82ª\8eÀ\8ds\82·\82é\82±\82Æ\82ª\82Ã…\82«\82Ãœ\82·\81B\82à\82¿\82ë\82ñ\88ø\90\94
        \82à\97^\82¦\82ç\82ê\82Ãœ\82·\81B
 
-Note:  \91S\82Ä\82ÃŒ : \83R\83}\83\93\83h\82à<ENTER> \82ð\89\9f\82µ\82Ä\8fI\97¹\82µ\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ\81B
+NOTE:  \91S\82Ä\82ÃŒ : \83R\83}\83\93\83h\82à<ENTER> \82ð\89\9f\82µ\82Ä\8fI\97¹\82µ\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ\81B
        \88È\8d~\82Ã…\82Ã\82±\82ÃŒ\82±\82Æ\82É\8c¾\8by\82µ\82Ãœ\82¹\82ñ\81B
 
 
@@ -633,9 +635,9 @@ Note:  
   3. \82Ã…\82à:w TEST \82Æ\83^\83C\83v\82µ\82Ãœ\82µ\82Ã¥\82¤ (TEST \82Ã\81A\91I\82ñ\82¾\83t\83@\83C\83\8b\96¼\82Ã…\82·)\81B
 
   4. \82±\82ê\82É\82æ\82è\83t\83@\83C\83\8b\91S\91ÃŒ\82ª TEST \82Æ\82¢\82¤\96¼\91O\82Ã…\95Û\91¶\82³\82ê\82Ãœ\82·\81B
-     \82à\82¤\88ê\93x :!dir \82à\82µ\82­\82à!ls \82Æ\83^\83C\83v\82µ\82Ä\8am\94F\82µ\82Ä\82Ã\82Ãœ\82µ\82Ã¥\82¤\81B
+     \82à\82¤\88ê\93x :!dir \82à\82µ\82­\82à:!ls \82Æ\83^\83C\83v\82µ\82Ä\8am\94F\82µ\82Ä\82Ã\82Ãœ\82µ\82Ã¥\82¤\81B
 
-Note\82±\82±\82Ã… Vim \82ð\8fI\97¹\82µ\81A\83t\83@\83C\83\8b\96¼ TEST \82Æ\8b¤\82É\8bN\93®\82·\82é\82Æ\81A\95Û\91¶\82µ\82½\8e\9e\82ÃŒ
+NOTE\82±\82±\82Ã… Vim \82ð\8fI\97¹\82µ\81A\83t\83@\83C\83\8b\96¼ TEST \82Æ\8b¤\82É\8bN\93®\82·\82é\82Æ\81A\95Û\91¶\82µ\82½\8e\9e\82ÃŒ
      \83`\83\85\81[\83g\83\8a\83A\83\8b\82ÃŒ\95¡\90»\82ª\82Ã…\82«\8fã\82ª\82é\82Ã\82¸\82Ã…\82·\81B
 
   5. \82³\82ç\82É\81A\8e\9f\82ÃŒ\82æ\82¤\82É\83^\83C\83v\82µ\82Ä\83t\83@\83C\83\8b\82ð\8fÃ\82µ\82Ãœ\82µ\82Ã¥\82¤(MS-DOS):  :!del TEST
@@ -655,8 +657,8 @@ Note: 
 
   3. \95¶\8e\9a : \82ð\89\9f\82·\82Æ\81A\89æ\96Ê\82ÃŒ\8dÃ…\89º\95\94\82É :'<,'> \82ª\8c»\82ê\82Ãœ\82·\81B
 
-  4. w TEST (TESE\82Ã\91¶\8dÃ\82µ\82È\82¢\83t\83@\83C\83\8b\96¼)\82ð\83^\83C\83v\82µ\82Ãœ\82·\81B
-     Enter \82ð\89\9f\82·\91O\82É :'<,'>w TEST \82Æ\82È\82Ã\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\89º\82³\82¢\81B
+  4. w TEST (TEST \82Ã\91¶\8dÃ\82µ\82È\82¢\83t\83@\83C\83\8b\96¼)\82ð\83^\83C\83v\82µ\82Ãœ\82·\81B
+     <ENTER> \82ð\89\9f\82·\91O\82É :'<,'>w TEST \82Æ\82È\82Ã\82Ä\82¢\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\89º\82³\82¢\81B
 
   5. Vim \82àTEST \82Æ\82¢\82¤\83t\83@\83C\83\8b\82É\91I\91ð\82³\82ê\82½\8ds\82ð\8f\91\82«\8d\9e\82Þ\82Ã…\82µ\82Ã¥\82¤\81B
      !dir \82à\82µ\82­\82à!ls \82Ã…\82»\82ê\82ð\8am\94F\82µ\82Ãœ\82·\81B
@@ -747,7 +749,7 @@ NOTE: 
 
   3. \83J\81[\83\\83\8b\82ÃŒ\8cã\82ë\82É\83e\83L\83X\83g\82ð\92Ç\89Ã\82·\82é\82½\82ß\82É a (\8f¬\95¶\8e\9a\82ð\83^\83C\83v\82µ\82Ãœ\82·\81B
 
-  4. \82»\82ÃŒ\89º\82ÃŒ\8ds\82ÃŒ\82ÃŒ\82æ\82¤\82È\92P\8cê\82É\8a®\90¬\82³\82¹\82Ãœ\82·\81B\91}\93ü\83\82\81[\83h\82ð\94²\82¯\82é\88×\82É <ESC> \82É\89\9f
+  4. \82»\82ÃŒ\89º\82ÃŒ\8ds\82ÃŒ\82æ\82¤\82È\92P\8cê\82É\8a®\90¬\82³\82¹\82Ãœ\82·\81B\91}\93ü\83\82\81[\83h\82ð\94²\82¯\82é\88×\82É <ESC> \82ð\89\9f
      \82µ\82Ãœ\82·\81B
 
   5. e \82ð\8eg\82Ã\82Ä\8e\9f\82ÃŒ\95s\8a®\91S\82È\92P\8cê\82Ö\88Ú\93®\82µ\81A\83X\83e\83b\83v 3 \82Æ 4 \82ð\8cJ\82è\95Ô\82µ\82Ãœ\82·\81B
@@ -755,7 +757,7 @@ NOTE: 
 ---> This li will allow you to pract appendi text to a line.
 ---> This line will allow you to practice appending text to a line.
 
-Note: a, i \82Æ A \82Ã\93¯\82¶\91}\93ü\83\82\81[\83h\82Ö\88Ú\82è\82Ãœ\82·\82ª\81A\95¶\8e\9a\82ª\91}\93ü\82³\82ê\82é\88Ê\92u\82¾\82¯\82ª\88Ù\82È\82è
+NOTE: a, i \82Æ A \82Ã\93¯\82¶\91}\93ü\83\82\81[\83h\82Ö\88Ú\82è\82Ãœ\82·\82ª\81A\95¶\8e\9a\82ª\91}\93ü\82³\82ê\82é\88Ê\92u\82¾\82¯\82ª\88Ù\82È\82è
       \82Ãœ\82·\81B
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -772,7 +774,7 @@ Note: a, i 
   3. \92u\8a·\83\82\81[\83h\82ð\94²\82¯\82é\82É\82à<ESC> \82ð\89\9f\82µ\82Ãœ\82·\81B\8ds\82ÃŒ\8ec\82è\82ª\95Ã\8dX\82³\82ê\82Ä\82¢\82È\82¢\82Ãœ\82Ãœ\82É
      \82È\82é\82±\82Æ\82É\92\8d\88Ó\82µ\82Ä\82­\82¾\82³\82¢\81B
 
-  5\8ec\82Ã\82½ xxx \82ð\83X\83e\83b\83v\82ð\8cJ\82è\95Ô\82µ\82Ä\92u\8a·\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
+  4\8ec\82Ã\82½ xxx \82ð\83X\83e\83b\83v\82ð\8cJ\82è\95Ô\82µ\82Ä\92u\8a·\82µ\82Ãœ\82µ\82Ã¥\82¤\81B
 
 ---> Adding 123 to xxx gives you xxx.
 ---> Adding 123 to 456 gives you 579.
@@ -803,7 +805,7 @@ NOTE: 
 --->  a) this is the first item.
       b)
 
-  Note\92P\8cê\82ð1\82 yank \82·\82é\82ÃŒ\82É y \82ð\83I\83y\83\8c\81[\83^\82Æ\82µ\82Ä yw \82Æ\82·\82é\82±\82Æ\82à\8fo\97\88\82Ãœ\82·\81B
+  NOTE\92P\8cê\82ð1\82 yank \82·\82é\82ÃŒ\82É y \82ð\83I\83y\83\8c\81[\83^\82Æ\82µ\82Ä yw \82Æ\82·\82é\82±\82Æ\82à\8fo\97\88\82Ãœ\82·\81B
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                       \83\8c\83b\83X\83\93 6.5: \83I\83v\83V\83\87\83\93\82ÃŒ\90Ã\92è
 
@@ -824,8 +826,8 @@ NOTE: 
 
   6. \91Ã¥\95¶\8e\9a\8f¬\95¶\8e\9a\82ÃŒ\8bæ\95Ê\82ð\96³\8cø\82É\82·\82é\82É\82Ã\8e\9f\82ÃŒ\97l\82É\93ü\97Ã\82µ\82Ãœ\82·:  :set noic
 
-Note\83}\83b\83`\82ÃŒ\8b­\92²\95\\8e¦\82ð\82â\82ß\82é\82É\82Ã\8e\9f\82ÃŒ\97l\82É\93ü\97Ã\82µ\82Ãœ\82·: :nohlsearch
-Note: 1\82Â\82ÃŒ\8c\9f\8dõ\83R\83}\83\93\83h\82¾\82¯\91Ã¥\95¶\8e\9a\8f¬\95¶\8e\9a\82ÃŒ\8bæ\95Ê\82ð\82â\82ß\82½\82¢\82È\82ç\82ÃŽ\81A\83t\83\8c\81[\83Y\82É \c
+NOTE\83}\83b\83`\82ÃŒ\8b­\92²\95\\8e¦\82ð\82â\82ß\82é\82É\82Ã\8e\9f\82ÃŒ\97l\82É\93ü\97Ã\82µ\82Ãœ\82·: :nohlsearch
+NOTE: 1\82Â\82ÃŒ\8c\9f\8dõ\83R\83}\83\93\83h\82¾\82¯\91Ã¥\95¶\8e\9a\8f¬\95¶\8e\9a\82ÃŒ\8bæ\95Ê\82ð\82â\82ß\82½\82¢\82È\82ç\82ÃŽ\81A\83t\83\8c\81[\83Y\82É \c
       \82ð\8eg\97p\82µ\82Ãœ\82·:  /ignore\c  <ENTER>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                \83\8c\83b\83X\83\93 6 \97v\96ñ
@@ -869,16 +871,16 @@ Note: 1
   ":help" \83R\83}\83\93\83h\82É\88ø\90\94\82ð\97^\82¦\82é\82±\82Æ\82É\82æ\82è\81A\82 \82ç\82ä\82é\91è\96¼\82ÃŒ\83w\83\8b\83v\82ð\8c©\82Â\82¯\82é\82±\82Æ
   \82ª\82Ã…\82«\82Ãœ\82·\81B\82±\82ê\82ç\82ð\8e\8e\82µ\82Ä\82Ã\82Ãœ\82µ\82Ã¥\82¤(<ENTER> \82ð\83^\83C\83v\82µ\96Y\82ê\82È\82¢\82æ\82¤\82É):
 
-  :help w
-  :help c_<T
-  :help insert-index
-  :help user-manual
+       :help w
+       :help c_CTRL-D
+       :help insert-index
+       :help user-manual
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      \83\8c\83b\83X\83\93 7.2: \8bN\93®\83X\83N\83\8a\83v\83g\82ÃŒ\8dì\90¬
 
                         ** Vim \82ÃŒ\93Ã\92Â¥\82ð\94­\8aö\82·\82é **
 
-  Vim \82É\82àVi \82æ\82è\82à\91½\82­\82ÃŒ\93Ã\92Â¥\82ð\93Â¥\82Ãœ\82¦\82Ä\82¢\82Ãœ\82ª\81A\82»\82ÃŒ\82Ù\82Æ\82ñ\82Ç\82Ã\8f\89\8aú\8fó\91Ô\82É\82Ä
+  Vim \82É\82àVi \82æ\82è\82à\91½\82­\82ÃŒ\93Ã\92Â¥\82ð\93Â¥\82Ãœ\82¦\82Ä\82¢\82Ãœ\82·\82ª\81A\82»\82ÃŒ\82Ù\82Æ\82ñ\82Ç\82Ã\8f\89\8aú\8fó\91Ô\82É\82Ä
   \8eg\97p\95s\89Â\82Æ\82È\82Ã\82Ä\82¢\82Ãœ\82·\81B\82æ\82è\91½\82­\82ÃŒ\93Ã\92Â¥\82ð\8eg\82¢\82Ã\82¶\82ß\82é\82É\82à"vimrc" \83t\83@\83C\83\8b
   \82ð\8dì\90¬\82µ\82Ãœ\82·\81B
 
@@ -947,7 +949,7 @@ NOTE: 
   \82±\82ê\82É\82Ä Vim \82ÃŒ\83`\83\85\81[\83g\83\8a\83A\83\8b\82ð\8fI\82í\82è\82Ãœ\82·\81B\83G\83f\83B\83^\82ð\8aÈ\92P\82É\81A\82µ\82©\82à\8f[\95ª\82É
   \8eg\82¤\82±\82Æ\82ª\82Ã…\82«\82é\82æ\82¤\82É\82Æ\81AVim \82ÃŒ\8e\9d\82Â\8aT\94O\82ÃŒ\97v\93_\82ÃŒ\82Ã\82ð\93`\82¦\82æ\82¤\82Æ\82µ\82Ãœ\82µ\82½\81B
   Vim \82É\82Ã\82³\82ç\82É\91½\82­\82ÃŒ\83R\83}\83\93\83h\82ª\82 \82è\81A\82±\82±\82Ã…\91S\82Ä\82ð\90à\96¾\82·\82é\82±\82Æ\82Ã\82Ã…\82«\82Ãœ\82¹\82ñ\81B
-  \88È\8d~\82Ã\83\86\81[\83U\83}\83j\83\85\83A\83\8b\82ð\8eQ\8fÆ\82­\82¾\82³\82¢: "help :user-manual"
+  \88È\8d~\82Ã\83\86\81[\83U\83}\83j\83\85\83A\83\8b\82ð\8eQ\8fÆ\82­\82¾\82³\82¢: ":help user-manual"
 
   \82±\82ê\88È\8cã\82ÃŒ\8aw\8fK\82ÃŒ\82½\82ß\82É\81A\8e\9f\82ÃŒ\96{\82ð\90\84\91E\82µ\82Ãœ\82·\81B
        Vim - Vi Improved - by Steve Oualline
index 95e108e..66a818a 100644 (file)
 
   3. ä¸‹ã¸ã®ã‚­ãƒ¼ã‚’使ã£ã¦ã€ãƒ¬ãƒƒã‚¹ãƒ³1.2 ã«ç§»å‹•ã—ã¾ã—ょã†ã€‚
 
-Note: ä½•ã‚’タイプã—ã¦ã„ã‚‹ã‹åˆ¤ã‚‰ãªããªã£ãŸã‚‰ã€<ESC>を押ã—ã¦ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ã—
+NOTE: ä½•ã‚’タイプã—ã¦ã„ã‚‹ã‹åˆ¤ã‚‰ãªããªã£ãŸã‚‰ã€<ESC>を押ã—ã¦ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ã—
       ã¾ã™ã€‚ãã‚Œã‹ã‚‰å…¥åŠ›ã—よã†ã¨ã—ã¦ã„ãŸã‚³ãƒžãƒ³ãƒ‰ã‚’å†å…¥åŠ›ã—ã¾ã—ょã†ã€‚
 
-Note: ã‚«ãƒ¼ã‚½ãƒ«ã‚­ãƒ¼ã§ã‚‚移動ã§ãã¾ã™ã€‚ã—ã‹ã— hjkl ã«ä¸€åº¦æ…£ã‚Œã¦ã—ã¾ãˆã°ã€ã¯ã‚‹ã‹
+NOTE: ã‚«ãƒ¼ã‚½ãƒ«ã‚­ãƒ¼ã§ã‚‚移動ã§ãã¾ã™ã€‚ã—ã‹ã— hjkl ã«ä¸€åº¦æ…£ã‚Œã¦ã—ã¾ãˆã°ã€ã¯ã‚‹ã‹
       ã«é€Ÿã移動ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã§ã—ょã†ã€‚ã„やマジã§!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -109,7 +109,7 @@ NOTE: å…¨ã¦ã®ãƒ¬ãƒƒã‚¹ãƒ³ã‚’通ã˜ã¦ã€è¦šãˆã‚ˆã†ã¨ã™ã‚‹ã®ã§ã¯ãªã
 ---> ã“ã® ã«ã¯ è¶³ã‚Šãªã„ ãƒ†ã‚­ã‚¹ãƒˆ ã‚る。
 ---> ã“ã® è¡Œ ã«ã¯ å¹¾ã¤ã‹ è¶³ã‚Šãªã„ ãƒ†ã‚­ã‚¹ãƒˆ ãŒ ã‚る。
 
-  5. æŒ¿å…¥ã®æ–¹æ³•ãŒã‚ã‹ã£ãŸã‚‰ä¸‹ã®ãƒ¬ãƒƒã‚¹ãƒ³1ã®è¦ç´„を見ã¾ã—ょã†ã€‚
+  5. æŒ¿å…¥ã®æ–¹æ³•ãŒã‚ã‹ã£ãŸã‚‰ãƒ¬ãƒƒã‚¹ãƒ³ 1.5 ã¸é€²ã¿ã¾ã—ょã†ã€‚
 
 
 
@@ -117,7 +117,7 @@ NOTE: å…¨ã¦ã®ãƒ¬ãƒƒã‚¹ãƒ³ã‚’通ã˜ã¦ã€è¦šãˆã‚ˆã†ã¨ã™ã‚‹ã®ã§ã¯ãªã
                     ãƒ¬ãƒƒã‚¹ãƒ³ 1.5: ãƒ†ã‚­ã‚¹ãƒˆç·¨é›† - è¿½åŠ 
 
 
-                ** ãƒ†ã‚­ã‚¹ãƒˆè¿½åŠ ã™ã‚‹ã«ã¯ A ã‚’押ã—ã¾ã—ょㆠ**
+                ** ãƒ†ã‚­ã‚¹ãƒˆã‚’追加ã™ã‚‹ã«ã¯ A ã‚’押ã—ã¾ã—ょㆠ**
 
   1. ä»¥ä¸‹ã® ---> ã¨ç¤ºã•ã‚ŒãŸæœ€åˆã®è¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
      ã‚«ãƒ¼ã‚½ãƒ«ãŒãã®æ–‡å­—上ã«ã‚ã£ã¦ã‚‚ã‹ã¾ã„ã¾ã›ã‚“。
@@ -126,8 +126,8 @@ NOTE: å…¨ã¦ã®ãƒ¬ãƒƒã‚¹ãƒ³ã‚’通ã˜ã¦ã€è¦šãˆã‚ˆã†ã¨ã™ã‚‹ã®ã§ã¯ãªã
 
   3. ãƒ†ã‚­ã‚¹ãƒˆã‚’追加ã—終ãˆãŸã‚‰ã€ <ESC> ã‚’押ã—ã¦ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«æˆ»ã‚Šã¾ã—ょã†ã€‚
 
-  4. 2行目㮠---> ã¨ç¤ºã•ã‚ŒãŸå ´æ‰€ã¸ç§»å‹•ã—ã€ã‚¹ãƒ†ãƒƒãƒ— 2 ã‹ã‚‰ 3 ç¹°ã‚Šè¿”ã—ã¦æ–‡æ³•ã‚’
-     ä¿®æ­£ã—ã¾ã—ょã†ã€‚
+  4. 2行目㮠---> ã¨ç¤ºã•ã‚ŒãŸå ´æ‰€ã¸ç§»å‹•ã—ã€ã‚¹ãƒ†ãƒƒãƒ— 2 ã‹ã‚‰ 3 ã‚’ç¹°ã‚Šè¿”ã—ã¦æ–‡æ³•
+     ã‚’修正ã—ã¾ã—ょã†ã€‚
 
 ---> ã“ã“ã«ã¯é–“é•ã£ãŸãƒ†ã‚­ã‚¹ãƒˆãŒã‚ã‚Š
      ã“ã“ã«ã¯é–“é•ã£ãŸãƒ†ã‚­ã‚¹ãƒˆãŒã‚ã‚Šã¾ã™ã€‚
@@ -145,7 +145,8 @@ NOTE: å…¨ã¦ã®ãƒ¬ãƒƒã‚¹ãƒ³ã‚’通ã˜ã¦ã€è¦šãˆã‚ˆã†ã¨ã™ã‚‹ã®ã§ã¯ãªã
   !! NOTE: ä»¥ä¸‹ã®ã‚¹ãƒ†ãƒƒãƒ—を実行ã™ã‚‹å‰ã«ã€ã¾ãšå…¨ä½“を読んã§ãã ã•ã„!!
 
   1. ãƒ¬ãƒƒã‚¹ãƒ³ 1.2 ã§ã‚„ã£ãŸã‚ˆã†ã« :q! ã‚’タイプã—ã¦ã€ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’終了
-     ã—ã¾ã™ã€‚
+     ã—ã¾ã™ã€‚ã‚ã‚‹ã„ã¯ã€åˆ¥ã®ç«¯æœ«ãŒã‚ã‚‹å ´åˆã¯ãã“ã§ä»¥ä¸‹ã®å†…容を行ã£ã¦ã‚‚ã‹ã¾ã„
+     ã¾ã›ã‚“。
 
   2. ã‚·ã‚§ãƒ«ãƒ—ロンプトã§ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’タイプã—ã¾ã™:  vim tutor <ENTER>
      'vim'㌠Vim ã‚¨ãƒ‡ã‚£ã‚¿ã‚’èµ·å‹•ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã€'tutor' ã¯ç·¨é›†ã—ãŸã„ファイルã®
@@ -155,7 +156,8 @@ NOTE: å…¨ã¦ã®ãƒ¬ãƒƒã‚¹ãƒ³ã‚’通ã˜ã¦ã€è¦šãˆã‚ˆã†ã¨ã™ã‚‹ã®ã§ã¯ãªã
 
   4. å¤‰æ›´ã‚’ファイルã«ä¿å­˜ã—ã¾ã™:  :wq  <ENTER>
 
-  5. vimtutor ã‚’å†åº¦èµ·å‹•ã—ã€ä»¥ä¸‹ã®è¦ç´„ã¸é€²ã¿ã¾ã—ょã†ã€‚
+  5. ã‚¹ãƒ†ãƒƒãƒ— 1 ã§ vimtutuor ã‚’終了ã—ãŸå ´åˆã¯ vimtutor ã‚’å†åº¦èµ·å‹•ã—ã€ä»¥ä¸‹ã®
+     è¦ç´„ã¸é€²ã¿ã¾ã—ょã†ã€‚
 
   6. ä»¥ä¸Šã®ã‚¹ãƒ†ãƒƒãƒ—を読んã§ç†è§£ã—ãŸä¸Šã§ã“れを実行ã—ã¾ã—ょã†ã€‚
   
@@ -215,7 +217,7 @@ NOTE: <ESC> ã‚­ãƒ¼ã‚’押ã™ã¨ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ç§»è¡Œã—ã¾ã™ã€‚ãã®
 
   2. ä»¥ä¸‹ã® ---> ã¨ç¤ºã•ã‚ŒãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
 
-  3. æ­£ã—ã„æ–‡ã®æœ«å°¾ã¸ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†(最åˆã® . ã®å¾Œã§ã™)。
+  3. æ­£ã—ã„æ–‡ã®æœ«å°¾ã¸ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†(最åˆã® ã€‚ ã®å¾Œã§ã™)。
 
   4. è¡Œæœ«ã¾ã§å‰Šé™¤ã™ã‚‹ã®ã« d$ ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚
 
@@ -232,7 +234,7 @@ NOTE: <ESC> ã‚­ãƒ¼ã‚’押ã™ã¨ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ç§»è¡Œã—ã¾ã™ã€‚ãã®
                     ãƒ¬ãƒƒã‚¹ãƒ³ 2.3: ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ã¨ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³
 
 
-  å¤šãã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ã¨ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³ã‹ã‚‰ãƒ†ã‚­ã‚¹ãƒˆã«å¤‰æ›´ã‚’加ã¾ã™ã€‚
+  Ã¥Â¤\9aã\81\8fã\81®ã\82³ã\83\9eã\83³ã\83\89ã\81¯ã\82ªã\83\9aã\83‹\83¼ã\82¿ã\81¨ã\83¢ã\83¼ã\82·ã\83§ã\83³ã\81\8bã\82\89ã\83\86ã\82­ã\82¹ã\83\88ã\81«å¤\89æ\9b´ã\82\92Ã¥\8a ã\81\88ã\81¾ã\81\99ã\80\82
   å‰Šé™¤ã‚³ãƒžãƒ³ãƒ‰ d ã®ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ã¯æ¬¡ã®æ§˜ã«ãªã£ã¦ã„ã¾ã™:
 
        d   ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³
@@ -259,13 +261,13 @@ NOTE: å†’険ã—ãŸã„人ã¯ã€ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ã¦ã‚³ãƒžãƒ³ãƒ‰ãªã—ã«
 
   1. ä»¥ä¸‹ã® ---> ã¨ç¤ºã•ã‚ŒãŸè¡Œã®å…ˆé ­ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã™ã€‚
 
-  2. 2dw ã‚’タイプã—ã¦å˜èªž2ã¤åˆ†ç§»å‹•ã—ã¾ã™ã€‚
+  2. 2w ã‚’タイプã—ã¦å˜èªž2ã¤åˆ†å‰ã«ç§»å‹•ã—ã¾ã™ã€‚
 
   3. 3e ã‚’タイプã—ã¦3ã¤ç›®ã®å˜èªžã®çµ‚端ã«ç§»å‹•ã—ã¾ã™ã€‚
 
   4. 0 (ゼロ)をタイプã—ã¦è¡Œé ­ã«ç§»å‹•ã—ã¾ã™ã€‚
 
-  5. Ã£\82¹ã\83\86ã\83\83ã\83\97 2 Ã£\81¨ 3 Ã£\82\92é\81\95ã\81\86æ\95°å\80¤ã\81¨使ã£ã¦ç¹°ã‚Šè¿”ã—ã¾ã™ã€‚
+  5. Ã£\82¹ã\83\86ã\83\83ã\83\97 2 Ã£\81¨ 3 Ã£\82\92é\81\95ã\81\86æ\95°å\80¤ã\82\92使ã£ã¦ç¹°ã‚Šè¿”ã—ã¾ã™ã€‚
 
 ---> This is just a line with words you can move around in.
 
@@ -286,7 +288,7 @@ NOTE: å†’険ã—ãŸã„人ã¯ã€ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ã¦ã‚³ãƒžãƒ³ãƒ‰ãªã—ã«
 
   1. ---> ã¨ç¤ºã•ã‚ŒãŸè¡Œã®è¡Œé ­éƒ¨åˆ†ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚
 
-  2. UPPER CASE ã®å˜èªž2ã¤ã‚’ 2dw ã¨ã‚¿ã‚¤ãƒ—ã—ã¦å‰Šé™¤ã—ã¾ã™ã€‚
+  2. UPPER CASE ã®å˜èªž2ã¤ã‚’ d2w ã¨ã‚¿ã‚¤ãƒ—ã—ã¦å‰Šé™¤ã—ã¾ã™ã€‚
 
   3. UPPER CASE ã¨ã„ã†é€£ç¶šã—ãŸå˜èªžã‚’ã€1ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã¨ç•°ãªã‚‹ã‚«ã‚¦ãƒ³ãƒˆã‚’指定ã—ã€
      ã‚¹ãƒ†ãƒƒãƒ— 1 ã¨ 2 ã‚’ç¹°ã‚Šè¿”ã—ã¾ã™ã€‚
@@ -326,8 +328,8 @@ NOTE:  ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ d ã¨ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³ã®é–“ã«ã‚«ã‚¦ãƒ³ãƒˆã‚’使ã£ãŸå ´
 
   ** æœ€å¾Œã®ã‚³ãƒžãƒ³ãƒ‰ã‚’å–り消ã™ã«ã¯ u ã‚’押ã—ã¾ã™ã€‚U ã¯è¡Œå…¨ä½“ã®å–消ã§ã™ã€‚ **
 
-  1. ä»¥ä¸‹ã® ---> ã¨ç¤ºã•ã‚ŒãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã€æœ€åˆã®é–“é•ã„ã«ã‚«ãƒ¼ã‚½
-     Ã£\83«ã\82\92移å\8b\95ã\81\97ã\81¾ã\81\97ã\82\87ã\81\86ã\80\82
+  1. ä»¥ä¸‹ã® ---> ã¨ç¤ºã•ã‚ŒãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã€æœ€åˆã®é–“é•ã„ã«ã‚«ãƒ¼ã‚½ãƒ«
+     ã‚’移動ã—ã¾ã—ょã†ã€‚
   2. x ã‚’タイプã—ã¦ã„らãªã„先頭ã®æ–‡å­—を削除ã—ã¾ã—ょã†ã€‚
   3. ã•ãã€u ã‚’タイプã—ã¦æœ€å¾Œã«å®Ÿè¡Œã—ãŸã‚³ãƒžãƒ³ãƒ‰ã‚’å–り消ã—ã¾ã—ょã†ã€‚
   4. ä»Šåº¦ã¯ã€x ã‚’使用ã—ã¦èª¤ã‚Šã‚’å…¨ã¦ä¿®æ­£ã—ã¾ã—ょã†ã€‚
@@ -406,7 +408,7 @@ NOTE:  ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ d ã¨ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³ã®é–“ã«ã‚«ã‚¦ãƒ³ãƒˆã‚’使ã£ãŸå ´
 --->  ã“ã®åˆã‚’人力ã—ãŸæ™‚ã­ã€ãã®äººã¯å¹¾ã¤ã‹å•é•ã£ãŸã‚­ãƒ¼ã‚’押ã—ã‚‚ã—ãŸ!
 --->  ã“ã®è¡Œã‚’入力ã—ãŸæ™‚ã«ã€ãã®äººã¯å¹¾ã¤ã‹é–“é•ã£ãŸã‚­ãƒ¼ã‚’押ã—ã¾ã—ãŸ!
 
-  5. ã•ãã€ãƒ¬ãƒƒã‚¹ãƒ³ 3.2 ã¸é€²ã¿ã¾ã—ょã†ã€‚
+  5. ã•ãã€ãƒ¬ãƒƒã‚¹ãƒ³ 3.3 ã¸é€²ã¿ã¾ã—ょã†ã€‚
 
 NOTE: å®Ÿéš›ã«è©¦ã—ã¾ã—ょã†ã€‚決ã—ã¦è¦šãˆã‚‹ã ã‘ã«ã¯ã—ãªã„ã“ã¨ã€‚
 
@@ -428,8 +430,8 @@ NOTE: å®Ÿéš›ã«è©¦ã—ã¾ã—ょã†ã€‚決ã—ã¦è¦šãˆã‚‹ã ã‘ã«ã¯ã—ãªã„ã“
 
   5. æœ€åˆã®è¡ŒãŒæ¬¡ã®è¡Œã®æ§˜ã«ãªã‚‹ã¾ã§ã‚¹ãƒ†ãƒƒãƒ— 3 ã¨ 4 ã‚’ç¹°ã‚Šè¿”ã—ã¾ã™ã€‚
 
----> This lubw has a few wptfd that mrrf changing usf the change command.
----> This line has a few words that need changing using the change command.
+---> This lubw has a few wptfd that mrrf changing usf the change operator.
+---> This line has a few words that need changing using the change operator.
 
 cw ã¯å˜èªžã‚’変更ã™ã‚‹ã ã‘ã§ãªãã€æŒ¿å…¥ã‚‚è¡Œãˆã‚‹ã“ã¨ã«æ³¨æ„ã—ã¾ã—ょã†ã€‚
 
@@ -494,7 +496,7 @@ NOTE:  ã‚¿ã‚¤ãƒ—中ã®é–“é•ã„ã¯ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¹ã‚­ãƒ¼ã‚’使ã£ã¦ç›´ã™
      ã«è¡Œç•ªå·ã‚’覚ãˆã¦ãŠãã¾ã—ょã†ã€‚
 
 NOTE:  ç”»é¢ã®å³ä¸‹éš…ã«ã‚«ãƒ¼ã‚½ãƒ«ã®ä½ç½®ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ã“ã‚Œã¯
-       'ruler' ã‚ªãƒ—ション(レッスン6ã§èª¬æ˜Ž)を設定ã™ã‚‹ã“ã¨ã§è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+       'ruler' ã‚ªãƒ—ション(:help 'ruler' ã‚’å‚ç…§)を設定ã™ã‚‹ã“ã¨ã§è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
 
   2. æœ€ä¸‹è¡Œã«ç§»å‹•ã™ã‚‹ãŸã‚ã« G ã‚’タイプã—ã¾ã—ょã†ã€‚
      ãƒ•ã‚¡ã‚¤ãƒ«ã®å…ˆé ­ã«ç§»å‹•ã™ã‚‹ã«ã¯ gg ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚
@@ -523,8 +525,8 @@ NOTE:  ç”»é¢ã®å³ä¸‹éš…ã«ã‚«ãƒ¼ã‚½ãƒ«ã®ä½ç½®ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã‚‹ã‹ã‚‚
   5. å…ƒã®å ´æ‰€ã«æˆ»ã‚‹ã«ã¯ CTRL-O (Ctrl ã‚’押ã—続ã‘ãªãŒã‚‰ o æ–‡å­—タイプ)をタイプã—
      ã¾ã™ã€‚ã•ã‚‰ã«æˆ»ã‚‹ã«ã¯ã“れを繰り返ã—ã¾ã™ã€‚CTRL-I ã¯å‰æ–¹å‘ã§ã™ã€‚
 
-Note: "errroor" ã¯ error ã¨ã‚¹ãƒšãƒ«ãŒé•ã„ã¾ã™;  errroor ã¯ã„ã‚ゆる error ã§ã™ã€‚
-Note: æ¤œç´¢ãŒãƒ•ã‚¡ã‚¤ãƒ«ã®çµ‚ã‚ã‚Šã«é”ã™ã‚‹ã¨ã€ã‚ªãƒ—ション 'wrapscan' ãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹
+--->  "errroor" ã¯ error ã¨ã‚¹ãƒšãƒ«ãŒé•ã„ã¾ã™;  errroor ã¯ã„ã‚ゆる error ã§ã™ã€‚
+NOTE: æ¤œç´¢ãŒãƒ•ã‚¡ã‚¤ãƒ«ã®çµ‚ã‚ã‚Šã«é”ã™ã‚‹ã¨ã€ã‚ªãƒ—ション 'wrapscan' ãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹
       å ´åˆã¯ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®å…ˆé ­ã‹ã‚‰æ¤œç´¢ã‚’続行ã—ã¾ã™ã€‚
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -541,7 +543,7 @@ Note: æ¤œç´¢ãŒãƒ•ã‚¡ã‚¤ãƒ«ã®çµ‚ã‚ã‚Šã«é”ã™ã‚‹ã¨ã€ã‚ªãƒ—ション 'wrapsc
 
   4. æœ€åˆã®æ‹¬å¼§ã«ç§»å‹•ã™ã‚‹ã«ã¯ % ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょã†ã€‚
 
-  5. ä»–ã® (,),[,],{ or } ã§ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã€% ãŒä½•ã‚’ã—ã¦ã„ã‚‹ã‹ç¢ºèªã—ã¾ã—ょã†ã€‚
+  5. ä»–ã® (,),[,],{ ã‚„ } ã§ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã€% ãŒä½•ã‚’ã—ã¦ã„ã‚‹ã‹ç¢ºèªã—ã¾ã—ょã†ã€‚
 
 ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
 
@@ -612,10 +614,10 @@ NOTE: ã“ã®æ©Ÿèƒ½ã¯æ‹¬å¼§ãŒä¸€è‡´ã—ã¦ã„ãªã„プログラムをデãƒãƒƒ
      ã‚·ã‚§ãƒ«ãƒ—ロンプトã®ã‚ˆã†ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä¸€è¦§ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã¯ãšã§ã™ã€‚
      ã‚‚ã—ã㯠ls ãŒå‹•ã‹ãªã„ãªã‚‰ã° :!dir ã‚’使用ã—ã¾ã—ょã†ã€‚
 
-Note:  ã“ã®æ–¹æ³•ã«ã‚ˆã£ã¦ã‚らゆるコマンドãŒå®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã‚‚ã¡ã‚ん引数
+NOTE:  ã“ã®æ–¹æ³•ã«ã‚ˆã£ã¦ã‚らゆるコマンドãŒå®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã‚‚ã¡ã‚ん引数
        ã‚‚与ãˆã‚‰ã‚Œã¾ã™ã€‚
 
-Note:  å…¨ã¦ã® : ã‚³ãƒžãƒ³ãƒ‰ã¯ <ENTER> ã‚’押ã—ã¦çµ‚了ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
+NOTE:  å…¨ã¦ã® : ã‚³ãƒžãƒ³ãƒ‰ã¯ <ENTER> ã‚’押ã—ã¦çµ‚了ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
        ä»¥é™ã§ã¯ã“ã®ã“ã¨ã«è¨€åŠã—ã¾ã›ã‚“。
 
 
@@ -633,9 +635,9 @@ Note:  å…¨ã¦ã® : ã‚³ãƒžãƒ³ãƒ‰ã¯ <ENTER> ã‚’押ã—ã¦çµ‚了ã—ãªã‘ã‚Œã°ãª
   3. ã§ã¯ :w TEST ã¨ã‚¿ã‚¤ãƒ—ã—ã¾ã—ょㆠ(TEST ã¯ã€é¸ã‚“ã ãƒ•ã‚¡ã‚¤ãƒ«åã§ã™)。
 
   4. ã“ã‚Œã«ã‚ˆã‚Šãƒ•ã‚¡ã‚¤ãƒ«å…¨ä½“㌠TEST ã¨ã„ã†åå‰ã§ä¿å­˜ã•ã‚Œã¾ã™ã€‚
-     ã‚‚ã†ä¸€åº¦ :!dir ã‚‚ã—ã㯠!ls ã¨ã‚¿ã‚¤ãƒ—ã—ã¦ç¢ºèªã—ã¦ã¿ã¾ã—ょã†ã€‚
+     ã‚‚ã†ä¸€åº¦ :!dir ã‚‚ã—ã㯠:!ls ã¨ã‚¿ã‚¤ãƒ—ã—ã¦ç¢ºèªã—ã¦ã¿ã¾ã—ょã†ã€‚
 
-Note: ã“ã“㧠Vim ã‚’終了ã—ã€ãƒ•ã‚¡ã‚¤ãƒ«å TEST ã¨å…±ã«èµ·å‹•ã™ã‚‹ã¨ã€ä¿å­˜ã—ãŸæ™‚ã®
+NOTE: ã“ã“㧠Vim ã‚’終了ã—ã€ãƒ•ã‚¡ã‚¤ãƒ«å TEST ã¨å…±ã«èµ·å‹•ã™ã‚‹ã¨ã€ä¿å­˜ã—ãŸæ™‚ã®
      ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã®è¤‡è£½ãŒã§ã上ãŒã‚‹ã¯ãšã§ã™ã€‚
 
   5. ã•ã‚‰ã«ã€æ¬¡ã®ã‚ˆã†ã«ã‚¿ã‚¤ãƒ—ã—ã¦ãƒ•ã‚¡ã‚¤ãƒ«ã‚’消ã—ã¾ã—ょã†(MS-DOS):  :!del TEST
@@ -655,8 +657,8 @@ Note: ã“ã“㧠Vim ã‚’終了ã—ã€ãƒ•ã‚¡ã‚¤ãƒ«å TEST ã¨å…±ã«èµ·å‹•ã™ã‚‹ã¨
 
   3. æ–‡å­— : ã‚’押ã™ã¨ã€ç”»é¢ã®æœ€ä¸‹éƒ¨ã« :'<,'> ãŒç¾ã‚Œã¾ã™ã€‚
 
-  4. w TEST (TESET ã¯å­˜åœ¨ã—ãªã„ファイルå)をタイプã—ã¾ã™ã€‚
-     Enter ã‚’押ã™å‰ã« :'<,'>w TEST ã¨ãªã£ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ä¸‹ã•ã„。
+  4. w TEST (TEST ã¯å­˜åœ¨ã—ãªã„ファイルå)をタイプã—ã¾ã™ã€‚
+     <ENTER> ã‚’押ã™å‰ã« :'<,'>w TEST ã¨ãªã£ã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ä¸‹ã•ã„。
 
   5. Vim ã¯ TEST ã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ã«é¸æŠžã•ã‚ŒãŸè¡Œã‚’書ã込むã§ã—ょã†ã€‚
      !dir ã‚‚ã—ã㯠!ls ã§ãれを確èªã—ã¾ã™ã€‚
@@ -747,7 +749,7 @@ NOTE: å¤–部コマンドã®å‡ºåŠ›ã‚’読ã¿è¾¼ã‚€ã“ã¨ã‚‚出æ¥ã¾ã™ã€‚例ãˆ
 
   3. ã‚«ãƒ¼ã‚½ãƒ«ã®å¾Œã‚ã«ãƒ†ã‚­ã‚¹ãƒˆã‚’追加ã™ã‚‹ãŸã‚ã« a (å°æ–‡å­—) ã‚’タイプã—ã¾ã™ã€‚
 
-  4. Ã£\81\9dã\81®ä¸\8bã\81®è¡\8cã\81®ã\81®ã\82\88ã\81\86ã\81ªå\8d\98èª\9eã\81«å®\8cæ\88\90ã\81\95ã\81\9bã\81¾ã\81\99ã\80\82æ\8c¿å\85¥ã\83¢ã\83¼ã\83\89ã\82\92æ\8a\9cã\81\91ã\82\8bç\82ºã\81« <ESC> Ã£\81«押
+  4. Ã£\81\9dã\81®ä¸\8bã\81®è¡\8cã\81®ã\82\88ã\81\86ã\81ªå\8d\98èª\9eã\81«å®\8cæ\88\90ã\81\95ã\81\9bã\81¾ã\81\99ã\80\82æ\8c¿å\85¥ã\83¢ã\83¼ã\83\89ã\82\92æ\8a\9cã\81\91ã\82\8bç\82ºã\81« <ESC> Ã£\82\92押
      ã—ã¾ã™ã€‚
 
   5. e ã‚’使ã£ã¦æ¬¡ã®ä¸å®Œå…¨ãªå˜èªžã¸ç§»å‹•ã—ã€ã‚¹ãƒ†ãƒƒãƒ— 3 ã¨ 4 ã‚’ç¹°ã‚Šè¿”ã—ã¾ã™ã€‚
@@ -755,7 +757,7 @@ NOTE: å¤–部コマンドã®å‡ºåŠ›ã‚’読ã¿è¾¼ã‚€ã“ã¨ã‚‚出æ¥ã¾ã™ã€‚例ãˆ
 ---> This li will allow you to pract appendi text to a line.
 ---> This line will allow you to practice appending text to a line.
 
-Note: a, i ã¨ A ã¯åŒã˜æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã¸ç§»ã‚Šã¾ã™ãŒã€æ–‡å­—ãŒæŒ¿å…¥ã•ã‚Œã‚‹ä½ç½®ã ã‘ãŒç•°ãªã‚Š
+NOTE: a, i ã¨ A ã¯åŒã˜æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã¸ç§»ã‚Šã¾ã™ãŒã€æ–‡å­—ãŒæŒ¿å…¥ã•ã‚Œã‚‹ä½ç½®ã ã‘ãŒç•°ãªã‚Š
       ã¾ã™ã€‚
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -772,7 +774,7 @@ Note: a, i ã¨ A ã¯åŒã˜æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã¸ç§»ã‚Šã¾ã™ãŒã€æ–‡å­—ãŒæŒ¿å…¥ã•
   3. ç½®æ›ãƒ¢ãƒ¼ãƒ‰ã‚’抜ã‘ã‚‹ã«ã¯ <ESC> ã‚’押ã—ã¾ã™ã€‚è¡Œã®æ®‹ã‚ŠãŒå¤‰æ›´ã•ã‚Œã¦ã„ãªã„ã¾ã¾ã«
      ãªã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
 
-  5. æ®‹ã£ãŸ xxx ã‚’ステップを繰り返ã—ã¦ç½®æ›ã—ã¾ã—ょã†ã€‚
+  4. æ®‹ã£ãŸ xxx ã‚’ステップを繰り返ã—ã¦ç½®æ›ã—ã¾ã—ょã†ã€‚
 
 ---> Adding 123 to xxx gives you xxx.
 ---> Adding 123 to 456 gives you 579.
@@ -803,7 +805,7 @@ NOTE: ç½®æ›ãƒ¢ãƒ¼ãƒ‰ã¯æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã«ä¼¼ã¦ã„ã¾ã™ãŒã€å…¨ã¦ã®ã‚¿ã‚¤
 --->  a) this is the first item.
       b)
 
-  Note: å˜èªžã‚’1㤠yank ã™ã‚‹ã®ã« y ã‚’オペレータã¨ã—㦠yw ã¨ã™ã‚‹ã“ã¨ã‚‚出æ¥ã¾ã™ã€‚
+  NOTE: å˜èªžã‚’1㤠yank ã™ã‚‹ã®ã« y ã‚’オペレータã¨ã—㦠yw ã¨ã™ã‚‹ã“ã¨ã‚‚出æ¥ã¾ã™ã€‚
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                       ãƒ¬ãƒƒã‚¹ãƒ³ 6.5: ã‚ªãƒ—ションã®è¨­å®š
 
@@ -824,8 +826,8 @@ NOTE: ç½®æ›ãƒ¢ãƒ¼ãƒ‰ã¯æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã«ä¼¼ã¦ã„ã¾ã™ãŒã€å…¨ã¦ã®ã‚¿ã‚¤
 
   6. å¤§æ–‡å­—å°æ–‡å­—ã®åŒºåˆ¥ã‚’無効ã«ã™ã‚‹ã«ã¯æ¬¡ã®æ§˜ã«å…¥åŠ›ã—ã¾ã™:  :set noic
 
-Note: ãƒžãƒƒãƒã®å¼·èª¿è¡¨ç¤ºã‚’ã‚„ã‚ã‚‹ã«ã¯æ¬¡ã®æ§˜ã«å…¥åŠ›ã—ã¾ã™: :nohlsearch
-Note: 1ã¤ã®æ¤œç´¢ã‚³ãƒžãƒ³ãƒ‰ã ã‘大文字å°æ–‡å­—ã®åŒºåˆ¥ã‚’ã‚„ã‚ãŸã„ãªã‚‰ã°ã€ãƒ•ãƒ¬ãƒ¼ã‚ºã« \c
+NOTE: ãƒžãƒƒãƒã®å¼·èª¿è¡¨ç¤ºã‚’ã‚„ã‚ã‚‹ã«ã¯æ¬¡ã®æ§˜ã«å…¥åŠ›ã—ã¾ã™: :nohlsearch
+NOTE: 1ã¤ã®æ¤œç´¢ã‚³ãƒžãƒ³ãƒ‰ã ã‘大文字å°æ–‡å­—ã®åŒºåˆ¥ã‚’ã‚„ã‚ãŸã„ãªã‚‰ã°ã€ãƒ•ãƒ¬ãƒ¼ã‚ºã« \c
       ã‚’使用ã—ã¾ã™:  /ignore\c  <ENTER>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                ãƒ¬ãƒƒã‚¹ãƒ³ 6 è¦ç´„
@@ -869,16 +871,16 @@ Note: 1ã¤ã®æ¤œç´¢ã‚³ãƒžãƒ³ãƒ‰ã ã‘大文字å°æ–‡å­—ã®åŒºåˆ¥ã‚’ã‚„ã‚ãŸã„
   ":help" ã‚³ãƒžãƒ³ãƒ‰ã«å¼•æ•°ã‚’与ãˆã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚らゆる題åã®ãƒ˜ãƒ«ãƒ—を見ã¤ã‘ã‚‹ã“ã¨
   ãŒã§ãã¾ã™ã€‚ã“れらを試ã—ã¦ã¿ã¾ã—ょã†(<ENTER> ã‚’タイプã—忘れãªã„よã†ã«):
 
-  :help w
-  :help c_<T
-  :help insert-index
-  :help user-manual
+       :help w
+       :help c_CTRL-D
+       :help insert-index
+       :help user-manual
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      ãƒ¬ãƒƒã‚¹ãƒ³ 7.2: èµ·å‹•ã‚¹ã‚¯ãƒªãƒ—トã®ä½œæˆ
 
                         ** Vim ã®ç‰¹å¾´ã‚’発æ®ã™ã‚‹ **
 
-  Vim ã«ã¯ Vi ã‚ˆã‚Šã‚‚多ãã®ç‰¹å¾´ã‚’è¸ã¾ãˆã¦ã„ã¾ãŒã€ãã®ã»ã¨ã‚“ã©ã¯åˆæœŸçŠ¶æ…‹ã«ã¦
+  Vim Ã£\81«ã\81¯ Vi Ã£\82\88ã\82\8aã\82\82å¤\9aã\81\8fã\81®ç\89¹å¾´ã\82\92è¸\8fã\81¾ã\81\88ã\81¦ã\81\84ã\81¾ã\81\99ã\81\8cã\80\81ã\81\9dã\81®ã\81ȋ\81¨ã\82\93ã\81©ã\81¯å\88\9dæ\9c\9fç\8a¶æ\85\8bã\81«ã\81¦
   ä½¿ç”¨ä¸å¯ã¨ãªã£ã¦ã„ã¾ã™ã€‚より多ãã®ç‰¹å¾´ã‚’使ã„ã¯ã˜ã‚ã‚‹ã«ã¯ "vimrc" ãƒ•ã‚¡ã‚¤ãƒ«
   ã‚’作æˆã—ã¾ã™ã€‚
 
@@ -947,7 +949,7 @@ NOTE: è£œå®Œã¯å¤šãã®ã‚³ãƒžãƒ³ãƒ‰ã§å‹•ä½œã—ã¾ã™ã€‚ãã—㦠CTRL-D ã¨ <T
   ã“ã‚Œã«ã¦ Vim ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’終ã‚ã‚Šã¾ã™ã€‚エディタを簡å˜ã«ã€ã—ã‹ã‚‚充分ã«
   ä½¿ã†ã“ã¨ãŒã§ãるよã†ã«ã¨ã€Vim ã®æŒã¤æ¦‚念ã®è¦ç‚¹ã®ã¿ã‚’ä¼ãˆã‚ˆã†ã¨ã—ã¾ã—ãŸã€‚
   Vim ã«ã¯ã•ã‚‰ã«å¤šãã®ã‚³ãƒžãƒ³ãƒ‰ãŒã‚ã‚Šã€ã“ã“ã§å…¨ã¦ã‚’説明ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
-  ä»¥é™ã¯ãƒ¦ãƒ¼ã‚¶ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’å‚ç…§ãã ã•ã„: "help :user-manual"
+  ä»¥é™ã¯ãƒ¦ãƒ¼ã‚¶ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’å‚ç…§ãã ã•ã„: ":help user-manual"
 
   ã“れ以後ã®å­¦ç¿’ã®ãŸã‚ã«ã€æ¬¡ã®æœ¬ã‚’推薦ã—ã¾ã™ã€‚
        Vim - Vi Improved - by Steve Oualline
index ddfc5ac..95282f8 100644 (file)
@@ -551,7 +551,7 @@ cw 
 
         ** Ã†Ã„ÀÃÀǠÀúθ¦ Ã€ÃºÃ€Ã¥Ã‡Ã·Ã¸é,  :#,# w FILENAME  Ã‡Ã½Ê½Ã¿À. **
 
-  1. Â´Ã™Â½Ãƒ Ã‡Ã‘¹ø,  :!dir  Ã€ÃŒÂ³Âª  !ls Â¸Â¦ Ã€Ã”·ÂÇÿ© ÂµÃ°Â·ÂºÃ…丮ÀǠ¸ñ·ÃÀ» Â¹ÃžÂ¾Ã†Â¿Ã‚ ÃˆÃ„
+  1. Â´Ã™Â½Ãƒ Ã‡Ã‘¹ø,  :!dir  Ã€ÃŒÂ³Âª  :!ls Â¸Â¦ Ã€Ã”·ÂÇÿ© ÂµÃ°Â·ÂºÃ…丮ÀǠ¸ñ·ÃÀ» Â¹ÃžÂ¾Ã†Â¿Ã‚ ÃˆÃ„
      TEST Â°Â°Ã€Âº Ã€Ã»Ã‡Ã•Ã‡Ã‘ Ã€ÃŒÂ¸Â§Ã€Â» Â¼Â±Ã…ÃÇմôÙ.
 
   2. Ã„¿¼­¸¦ Ã€ÃŒ Ã†Ã¤Ã€ÃŒÃöÀǠóÀ½À¸·Î Â¿Ã…±ä ÃˆÃ„, Ctrl-g Â¸Â¦ Ã€Ã”·ÂÇÿ© Â±Ã— ÃÙÀÇ ÃÙ¹øÈ£¸¦
index 4498c9f..f19ce75 100644 (file)
@@ -551,7 +551,7 @@ cw ëŠ” ë‹¨ì–´ë¥¼ ì¹˜í™˜í•˜ëŠ” ê²ƒ ë¿ë§Œ ì•„니ë¼, ë‚´ìš©ì„ ì‚½ìž…í•  ìˆ˜ ìžˆ
 
         ** íŒŒì¼ì˜ ì¼ë¶€ë¥¼ ì €ìž¥í•˜ë ¤ë©´,  :#,# w FILENAME  í•˜ì‹­ì‹œì˜¤. **
 
-  1. ë‹¤ì‹œ í•œë²ˆ,  :!dir  ì´ë‚˜  !ls ë¥¼ ìž…력하여 ë””렉토리옠목ë¡ì„ ë°›ì•„온 í›„
+  1. ë‹¤ì‹œ í•œë²ˆ,  :!dir  ì´ë‚˜  :!ls ë¥¼ ìž…력하여 ë””렉토리옠목ë¡ì„ ë°›ì•„온 í›„
      TEST ê°™ì€ ì í•©í•œ ì´ë¦„ì„ ì„ íƒí•©ë‹ˆë‹¤.
 
   2. ì»¤ì„œë¥¼ ì´ íŽ˜ì´ì§€ì˜ ì²˜ìŒìœ¼ë¡œ ì˜®ê¸´ í›„, Ctrl-g ë¥¼ ìž…력하여 ê·¸ ì¤„옠줄번호를
index 17178df..2f1d14c 100644 (file)
@@ -658,7 +658,7 @@ Merk: Hvis du n
   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
      at du ser :'<,'>w TEST  før du trykker Enter.
 
-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
+  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
      for Ã¥ se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
 
 MERK: Ved Ã¥ trykke  v  startes visuelt valg. Du kan flytte markøren rundt for
index a7826b7..f9d49c2 100644 (file)
@@ -658,7 +658,7 @@ Merk: Hvis du nÃ¥ hadde avsluttet Vim og startet pÃ¥ nytt igjen med Â«vim TEST»
   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
      at du ser :'<,'>w TEST  før du trykker Enter.
 
-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
+  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
      for Ã¥ se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
 
 MERK: Ved Ã¥ trykke  v  startes visuelt valg. Du kan flytte markøren rundt for
diff --git a/runtime/tutor/tutor.nl b/runtime/tutor/tutor.nl
new file mode 100644 (file)
index 0000000..7b4d392
--- /dev/null
@@ -0,0 +1,950 @@
+  ==========================================================================
+  =    W e l k o m   b i j   d e   V I M   l e s s e n   -   Versie 1.7    =
+  ==========================================================================
+
+  Vim is een krachtige editor met veel commando's, te veel om uit te leggen
+  in lessen zoals deze. Deze lessen zijn bedoeld om voldoende commando's te
+  behandelen om je in staat te stellen met Vim te werken als een editor voor
+  algemeen gebruik.
+
+  Deze lessen zullen 25 tot 30 minuten in beslag nemen, afhankelijk van de
+  tijd die wordt besteed aan het uitproberen van de commando's.
+
+  LET OP:
+  Door de commando's in deze lessen verandert de tekst. Maak een kopie van
+  dit bestand om mee te oefenen (als je "vimtutor" uitvoerde, is dit al een
+  kopie).
+
+  Deze lessen zijn bedoeld om al doende te leren. Dat betekent dat je de
+  commando's moet uitvoeren om ze goed te leren kennen. Als je de tekst
+  alleen maar doorleest, zal je de commando's niet leren!
+
+  Zorg ervoor dat de <Caps Lock> toets NIET is ingedrukt en druk vaak genoeg
+  op de j-toets om de cursor zo te bewegen dat les 1.1 volledig op het
+  scherm staat.
+
+  LET OP: In deze lessen worden omwille van de duidelijkheid vaak spaties
+  gebruikt binnen een commando (bv. "40 G" of "operator [getal] beweging").
+  Tik deze spaties echter NIET. Ze verstoren de werking.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.1:  VERPLAATS DE CURSOR
+
+  ** De cursor wordt verplaatst met de toetsen h, j, k, l zoals aangegeven. **
+          ^
+          k       Hint:  De h is de meest linkse en beweegt naar links.
+      < h   l >          De l is de meest rechtse en beweegt naar rechts.
+          j              De j lijkt op een pijl naar beneden.
+          v
+
+  1. Beweeg de cursor over het scherm om er vertrouwd mee te raken.
+
+  2. Druk de omlaag-toets (j) tot hij repeteert.
+     Nu weet je hoe je de volgende les bereikt.
+
+  3. Gebruik de omlaag-toets om naar les 1.2 te gaan.
+
+  OPMERKING: Als je twijfelt aan wat je tikte, druk <ESC> om in de opdracht-
+             modus te komen. Tik daarna het commando dat bedoeld wordt.
+
+  OPMERKING: Pijltjes-toetsen werken ook. Met de hjkl-toetsen kan je sneller
+             rondbewegen, als je er eenmaal aan gewend bent. Echt waar!
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.2: VIM AFSLUITEN
+
+      !! LET OP: Lees deze les goed door voordat je iets uitvoert!!
+
+  1. Druk de <ESC> toets (om zeker in de opdrachtmodus te zitten).
+
+  2. Tik   :q! <ENTER>
+     Hiermee wordt de editor afgesloten. Alle veranderingen gaan VERLOREN.
+
+  3. Nu zie je de shell-prompt. Tik het commando waarmee je deze lessen
+     hebt opgeroepen. Dat is normaal gesproken:  vimtutor <ENTER>
+
+  4. Als je deze stappen goed hebt doorgelezen, voer dan de stappen 1 tot 3
+     uit om de editor te verlaten en weer op te starten.
+
+  LET OP: :q! <ENTER> verwerpt alle veranderingen die je aanbracht. Een paar
+          lessen verder zal je leren hoe veranderingen worden opgeslagen in
+          een bestand.
+
+  5. Beweeg de cursor omlaag naar les 1.3.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.3: TEKST BEWERKEN - WISSEN
+
+          ** Tik  x  om het teken onder de cursor te wissen. **
+
+  1. Ga met de cursor naar de regel verderop met --->.
+
+  2. Zet de cursor op een teken dat moet worden gewist om een fout te
+     herstellen.
+
+  3. Tik  x  om het ongewenste teken te wissen.
+
+  4. Herhaal deze stappen tot de regel goed is.
+
+  ---> Vi kkent eenn opdracccchtmodus en een invooegmmmmodus.
+
+  5. Nu de regel gecorrigeerd is kan je naar les 1.4 gaan.
+
+  LET OP: Probeer de lessen niet uit je hoofd te leren. Leer al doende.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.4: TEKST BEWERKEN - INVOEGEN
+
+              ** Tik  i  ('insert') om tekst in te voegen. **
+
+  1. Ga met de cursor naar de eerste regel verderop met --->.
+
+  2. Maak de eerste regel gelijk aan de tweede. Zet daarvoor de cursor op
+     de plaats waar tekst moet worden ingevoegd.
+
+  3. Tik  i  en daarna de nodige aanvullingen.
+
+  4. Tik <ESC> na elke herstelde fout om terug te keren in de opdrachtmodus.
+     Herhaal de stappen 2 tot 4 om de zin te verbeteren.
+
+  ---> Aan regel ontekt wat .
+  ---> Aan deze regel ontbreekt wat tekst.
+
+  5. Ga naar les 1.5 als je gewend bent aan het invoegen van tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.5: TEKST BEWERKEN - TOEVOEGEN
+
+             ** Tik  A  ('append') om tekst toe te voegen. **
+
+  1. Ga met de cursor naar de eerste regel verderop met --->.
+     Het maakt niet uit waar de cursor in deze regel staat.
+
+  2. Tik hoofdletter  A  en tik de nodige aanvullingen.
+
+  3. Tik <ESC> nadat de tekst is aangevuld. Zo keer je terug in de
+     opdrachtmodus.
+
+  4. Ga naar de tweede regel verderop met ---> en herhaal stap 2 en 3
+     om deze zin te corrigeren.
+
+  ---> Er ontbreekt wat tekst aan de
+       Er ontbreekt wat tekst aan deze regel.
+  ---> Hier ontbreekt ook w
+       Hier ontbreekt ook wat tekst.
+
+  5. Ga naar les 1.6 als je vertrouwd bent geraakt aan het toevoegen
+     van tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.6: EEN BESTAND EDITTEN
+
+    ** Gebruik  :wq  om een bestand op te slaan en de editor te verlaten. **
+
+  !! LET OP: Lees deze les helemaal door voordat je een van de volgende
+             stappen uitvoert!!
+
+  1. Verlaat deze les zoals je in les 1.2 deed:  :q!
+     Of gebruik een andere terminal als je daar de beschikking over hebt. Doe
+     daar het volgende.
+
+  2. Tik het volgende commando na de shell-prompt:  vim les <ENTER>
+     'vim' (vaak ook 'vi') is het commando om de Vim-editor te starten,
+     'les' is de naam van het bestand, dat je gaat bewerken. Kies een andere
+     naam als er al een bestand 'les' bestaat, dat niet veranderd mag worden.
+
+  3. Voeg naar eigen keus tekst toe, zoals je geleerd hebt in eerdere lessen.
+
+  4. Sla het bestand met de wijzigingen op en verlaat Vim met  :wq <ENTER>
+
+  5. Herstart vimtutor als je deze bij stap 1 hebt verlaten en ga verder met
+     de volgende samenvatting.
+
+  6. Voer deze stappen uit nadat je ze hebt gelezen en begrepen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 1
+
+  1. De cursor wordt bewogen met de pijltjestoetsen of de hjkl-toetsen.
+       h (links)   j (omlaag)  k (omhoog)  l (rechts)
+
+  2. Start Vim van de shell-prompt. Tik:  vim BESTANDSNAAM <ENTER>
+
+  3. Sluit Vim af met  <ESC> :q! <ENTER>  om de veranderingen weg te gooien.
+               OF tik  <ESC> :wq <ENTER>  om de veranderingen te bewaren.
+
+  4. Wis het teken onder de cursor met:  x
+
+  5. Invoegen of toevoegen van tekst, tik:
+     i  en daarna de in te voegen tekst  <ESC>   voeg in vanaf de cursor
+     A  en daarna de toe te voegen tekst  <ESC>  voeg toe achter de regel
+
+  OPMERKING: Met <ESC> kom je terug in opdrachtmodus en wordt een ongewenst
+             of gedeeltelijk uitgevoerd commando afgebroken.
+
+  Ga nu verder met les 2.1.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.1: WIS-COMMANDO'S
+
+       ** Tik  dw  ('delete word') om een woord te wissen. **
+
+  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
+
+  2. Ga naar de regel hieronder, die met ---> begint.
+
+  3. Ga met de cursor naar het begin van een woord dat moet worden gewist.
+
+  4. Met het tikken van  dw  verdwijnt het woord.
+
+  OPMERKING: De letter  d  verschijnt op de laatste regel van het scherm
+             zodra je hem tikt. Vim is aan het wachten tot je de  w  tikt.
+             Als je een ander teken dan  d  ziet, heb je iets verkeerds
+             getikt. Druk op <ESC> en begin opnieuw.
+
+  NOG EEN OPMERKING: Dit werkt alleen als de optie 'showcmd' is ingeschakeld.
+                     Dat gebeurt met  :set showcmd <ENTER>
+
+  ---> Er zijn een het paar ggg woorden, die niet in deze len zin thuishoren.
+
+  5. Herhaal de stappen 3 en 4 tot de zin goed is en ga naar les 2.2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.2: MEER WIS-COMMANDO'S
+
+        ** Tik  d$  om te wissen tot het einde van de regel. **
+
+  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
+
+  2. Ga naar de regel hieronder, die met ---> begint.
+
+  3. Ga met de cursor naar het einde van de correcte regel (NA de eerste  . ).
+
+  4. Tik  d$  om te wissen tot het einde van de regel.
+
+  ---> Iemand heeft het einde van deze regel dubbel getikt. dubbel getikt.
+
+  5. Ga naar les 2.3 voor uitleg.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.3: OVER OPERATOREN EN BEWEGINGEN
+
+  Veel commando's die de tekst veranderen, bestaan uit een operator en een
+  beweging. De samenstelling van een wis-commando met de operator  d  is:
+    d  beweging
+
+  Daarbij is:
+    d        - de wis-operator
+    beweging - het bereik waarop de operator werkt (zie het lijstje hieronder)
+
+  Een korte lijst van bewegingen vanaf de cursor:
+    w - tot het begin van het volgende woord, ZONDER het eerste teken daarvan.
+    e - tot het einde van het huidige woord, INCLUSIEF het laatste teken.
+    $ - tot het einde van de regel, INCLUSIEF het laatste teken.
+
+  Het tikken van  de  wist tekst vanaf de cursor tot het eind van het woord.
+
+  OPMERKING: Het intikken van alleen maar de beweging, zonder een operator,
+             in de opdrachtmodus beweegt de cursor (respectievelijk naar het
+             volgende woord, naar het eind van het huidige woord en naar het
+             eind van de regel).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.4: GEBRUIK VAN EEN TELLER BIJ EEN BEWEGING
+
+   ** Een getal voor een beweging herhaalt het zoveel keer. **
+
+  1. Ga naar de regel hieronder, die met ---> begint.
+
+  2. Tik  2w  zodat de cursor twee woorden vooruit gaat.
+
+  3. Tik  3e  zodat de cursor naar het einde van het derde woord gaat.
+
+  4. Tik  0  (nul) om naar het begin van de regel te gaan.
+
+  5. Herhaal de stappen 2 en 3 met andere getallen.
+
+  ---> Dit is een regel met woorden waarin je heen en weer kan bewegen.
+
+  6. Ga verder met les 2.5.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.5: GEBRUIK EEN TELLER OM MEER TE WISSEN
+
+  ** Een getal met een operator zorgt dat deze zoveel keer wordt herhaald. **
+
+  Bij de combinatie van wis-operator en beweging kan je voor de beweging een
+  teller zetten om meer te wissen:
+         d  [teller]  beweging
+
+  1. Ga naar het eerste woord in HOOFDLETTERS in de regel na --->.
+
+  2. Met  d2w  worden twee woorden (in dit voorbeeld in hoofdletters) gewist.
+
+  3. Herhaal de stappen 1 en 2 met verschillende tellers om de verschillende
+     woorden in hoofdletters met Ã©Ã©n commando te wissen.
+
+  ---> deze ABC DE regel FGHI JK LMN OP is QZ RS ontdaan van rommel.
+
+  OPMERKING: De teller kan ook aan het begin staan: d2w en 2dw werken allebei.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.6: BEWERKING VAN HELE REGELS
+
+               ** Tik  dd  om een hele regel te wissen. **
+
+  Omdat het wissen van een hele regel vaak voorkomt, besloten de ontwerpers
+  van Vi dat met het tikken van  dd  simpelweg een hele regel gewist wordt.
+
+  1. Ga met de cursor naar de tweede regel van de zinnetjes hieronder.
+
+  2. Tik  dd  om de regel te wissen.
+
+  3. Ga nu naar de vierde regel.
+
+  4. Tik  2dd  om twee regels te wissen.
+
+  --->  1)  Rozen zijn rood.
+  --->  2)  Modder is leuk.
+  --->  3)  Viooltjes zijn blauw.
+  --->  4)  Ik heb een auto.
+  --->  5)  De klok slaat de tijd.
+  --->  6)  Suiker is zoet.
+  --->  7)  En dat ben jij ook.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.7: HET COMMANDO HERSTEL
+
+  ** u  maakt het laatste commando ongedaan,  U  herstelt een hele regel. **
+
+  1. Ga met de cursor naar de regel hieronder met ---> en zet hem
+     op de eerste fout.
+
+  2. Tik  x  om het eerste ongewenste teken te wissen.
+
+  3. Tik nu  u  en maak daarmee het vorige commando ongedaan.
+
+  4. Herstel nu alle fouten in de regel met het  x  commando.
+
+  5. Tik een hoofdletter  U  om de regel in z'n oorspronkelijke staat terug
+     te brengen.
+
+  6. Tik nu een paar keer  u  en herstel daarmee de  U  en eerdere commando's.
+
+  7. Tik nu een paar keer CTRL-R (Ctrl-toets ingedrukt houden en R tikken) en
+     voer daarmee de commando's opnieuw uit: 'redo' oftewel 'undo de undo's'. 
+
+  ---> Heerstel de fouten inn deeze regel en brenng ze weer terugg met undo.
+
+  8. Dit zijn heel nuttige commando's. Ga verder met samenvatting van les 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 2
+
+  1. Wis van de cursor tot het volgende woord met    dw
+
+  2. Wis van de cursor tot het eind van de regel met d$
+
+  3. Wis de hele regel met                           dd
+
+  4. Herhaal een beweging door er een getal voor te zetten:  2w
+
+  5. De opbouw van een wijzigingscommando is:
+       operator  [getal]  beweging
+     daarbij is:
+       operator - wat er moet gebeuren, bijvoorbeeld  d  om te wissen
+       [getal]  - een (niet-verplichte) teller om 'beweging' te herhalen
+       beweging - een beweging door de te wijzigen tekst zoals w (woord)
+                  of $ (tot het einde van de regel) enz.
+
+  6. Ga naar het begin van de regel met nul:  0
+
+  7. Undo de voorgaande actie met              u (kleine letter)
+     Undo alle veranderingen in een regel met  U (hoofdletter)
+     Undo de undo's met                        CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.1: HET COMMANDO PLAK
+
+  ** Tik  p  ('put') en plak daarmee zojuist gewiste tekst na te cursor. **
+
+  1. Ga met de cursor naar de eerste regel met ---> hierna.
+
+  2. Wis de regel met  dd  en bewaar hem zodoende in een Vim-register.
+
+  3. Ga naar de c-regel, waar de gewiste regel ONDER moet komen.
+
+  4. Tik  p  om de regel terug te zetten onder de regel met de cursor.
+
+  5. Herhaal de stappen 2 tot 4 om de regels in de goede volgorde te zetten.
+
+---> d) Krijg je het ook onder de knie?
+---> b) Viooltjes zijn blauw,
+---> c) Begrip is te leren,
+---> a) Rozen zijn rood,
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.2: HET COMMANDO VERVANG
+
+  ** Tik rx ('replace') om het teken onder de cursor te vervangen door x. **
+
+  1. Ga naar de eerste regel hieronder met --->.
+
+  2. Zet de cursor op de eerste fout.
+
+  3. Tik  r  en dan het teken dat er hoort te staan.
+
+  4. Herhaal de stappen 2 en 3 tot de eerste regel gelijk is aan de tweede.
+
+  --->  Bij het tokken van dezf hegel heeft iemamd verklerde letters getikt.
+  --->  Bij het tikken van deze regel heeft iemand verkeerde letters getikt.
+
+  5. Ga nu naar les 3.3.
+
+  LET OP: Door het te doen, leer je beter dan door het uit je hoofd te leren.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.3: HET COMMANDO VERANDER
+
+     ** Tik  ce  om te veranderen tot het einde van een woord. **
+
+  1. Ga met de cursor naar de eerste regel hieronder met --->.
+
+  2. Zet de cursor op de  u  van ruch.
+
+  3. Tik  ce  en de juiste letters (in dit geval "egel").
+
+  4. Druk <ESC> en ga naar het volgende teken dat moet worden veranderd.
+
+  5. Herhaal de stappen 3 en 4 tot de eerste regel gelijk is aan de tweede.
+
+  ---> In deze ruch staan een paar weedrim die veranderd moud worden.
+  ---> In deze regel staan een paar woorden die veranderd moeten worden.
+
+  LET OP: Met  ce  wordt (het laatste deel van) een woord gewist en kom je
+          in de invoegmodus.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.4: MEER VERANDERINGEN MET c
+
+  1. Het commando verander ('change') werkt op dezelfde manier als wis. De
+     opbouw is:
+         c  [teller]  beweging
+
+  2. De bewegingen zijn hetzelfde, zoals  w  (woord) en  $  (einde regel).
+
+  3. Ga naar de eerste regel hieronder met --->.
+
+  4. Zet de cursor op de eerste fout.
+
+  5. Tik  c$  en tik de rest van de regel zodat hij gelijk wordt aan de
+     tweede en sluit af met <ESC>.
+
+  ---> Het einde van deze regel moet precies zo worden als de tweede regel.
+  ---> Het einde van deze regel moet gecorrigeerd worden met het commando c$.
+
+  OPMERKING: Je kan de toets <BACKSPACE> gebruiken om tikfouten te herstellen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 3 
+
+  1. Tik  p  om tekst terug te plakken, die zojuist is gewist. Dit zet de
+     gewiste tekst ACHTER de cursor (als een hele regel is gewist komt deze
+     op de regel ONDER de cursor.
+
+  2. Het teken waarop de cursor staat wordt vervangen met  r  gevolgd door
+     het teken dat je daar wilt hebben.
+
+  3. Het commando 'verander' stelt je in staat om tekst te veranderen vanaf
+     de cursor tot waar de 'beweging' je brengt. Dat wil zeggen: tik  ce  om
+     te veranderen vanaf de cursor tot het einde van het woord,  c$  om te
+     veranderen tot het einde van de regel.
+
+  4. De opbouw van het commando verander is:
+         c  [teller]  beweging
+
+  Ga nu naar de volgende les.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.1: PLAATS VAN DE CURSOR EN STATUS VAN HET BESTAND
+
+  ** CTRL-G laat zien waar (regelnummer) je je bevindt en wat de status van
+     het bestand is. Met [nummer] G  ga je naar een bepaalde regel. **
+
+  LET OP: Lees de hele les voordat je een stap uitvoert!!
+
+  1. Hou de Ctrl-toets ingedrukt en tik  g . Dit noemen we CTRL-G.
+     Onderaan de pagina verschijnt een boodschap met de bestandsnaam en de
+     positie in het bestand. Onthou het regelnummer voor stap 3.
+
+  OPMERKING: Als de optie 'ruler' aan staat, wordt de positie van de cursor
+             (regelnummer, kolom) steeds in de rechter-onderhoek van het
+             scherm vermeld. In dit geval vermeldt CTRL-G geen regelnummer.
+             CTRL-G geeft ook de status aan, namelijk of de tekst veranderd
+             is ('modified') sinds het de laatste keer is opgeslagen.  
+
+  2. Tik hoofdletter  G  om naar het einde van het bestand te gaan.
+     Tik  gg  om naar het begin van het bestand te gaan.
+
+  3. Tik het regelnummer waar je bij stap 1 was en daarna  G . Dit brengt je
+     terug naar de regel waar je was toen je de eerste keer CTRL-G tikte.
+
+  4. Voer de stappen 1 tot 3 uit als je dit goed hebt gelezen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.2: HET COMMANDO ZOEKEN
+
+  ** Met  /ZOEK  wordt naar de zoekterm (één of meer woorden) gezocht. **
+
+  1. Tik in de opdrachtmodus het teken  / . Je ziet dat het met de cursor
+     aan de onderkant van het scherm verschijnt, zoals bij het :-commando.
+
+  2. Tik nu 'ffouut' <ENTER>. Dit is het woord waarnaar gezocht wordt.
+
+  3. Tik  n  om verder te zoeken met dezelfde zoekterm.
+     Zoek met  N  met dezelfde zoekterm in de tegenovergestelde richting.
+
+  4. Zoek in achterwaartse richting met ?zoekterm in plaats van  / .
+
+  5. Keer terug naar de vorige hit met CTRL-O (hou Ctrl-toets ingedrukt en
+     tik letter o). Herhaal om verder terug te gaan. CTRL-I gaat vooruit.
+
+  ---> "ffouut" is niet de juiste spelling van fout, ffouut is een fout.
+
+  OPMERKING: Als zoeken het einde van het bestand bereikt, wordt vanaf het
+             begin doorgezocht, tenzij de optie 'wrapscan' is uitgeschakeld.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.3: GA NAAR CORRESPONDERENDE HAAKJES
+
+            ** Tik  %  om naar corresponderende ), ] of } te gaan. **
+
+  1. Zet de cursor op een (, [ of { in de regel hieronder met --->.
+
+  2. Tik dan het teken  % .
+
+  3. De cursor gaan naar het overeenkomstige haakje.
+
+  4. Met opnieuw  %  gaat de cursor terug naar het eerste haakje.
+
+  5. Plaats de cursor op een ander haakje en bekijk wat  %  doet.
+
+  ---> Dit ( is een testregel met  ('s, ['s ] en {'s } erin. ))
+
+  OPMERKING: Dit is nuttig bij het debuggen van een programma waarin haakjes
+             niet corresponderen. Met de optie 'showmatch' wordt ook
+             aangegeven of haakjes corresponderen, maar de cursor wordt niet
+             (blijvend) verplaatst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.4: HET VERVANG COMMANDO
+
+      ** Tik  :s/oud/nieuw/g  om 'oud' door 'nieuw' te vervangen. **
+
+  1. Ga met de cursor naar de regel hieronder met --->.
+
+  2. Tik  :s/dee/de <ENTER>. Zoals je ziet, vervangt ('substitute') dit
+     commando alleen de eerste "dee" in de regel.
+
+  3. Tik nu  :s/dee/de/g . Met de g-vlag ('global') wordt elke "dee" in de
+     regel vervangen.
+
+  ---> dee beste tijd om dee bloemen te zien is in dee lente.
+
+  4. Om in (een deel van) een tekst elk 'oud' te vervangen door 'nieuw':
+     tik   :#,#s/oud/nieuw/g   waar #,# de regelnummers zijn die het gebied
+                               begrenzen waarin wordt vervangen.
+     tik   :%s/oud/nieuw/g     om alles te vervangen in het hele bestand.
+     tik   :%s/oud/nieuw/gc    om elke 'oud' in het hele bestand te vinden
+                               en te vragen of er vervangen moet worden.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 4
+
+  1. CTRL-G   laat positie in het bestand zien en de status van het bestand.
+     G        verplaatst je naar het einde van het bestand.
+     nummer G verplaatst je naar regelnummer.
+     gg       verplaatst je naar de eerste regel.
+
+  2. Met  /  en een zoekterm wordt VOORWAARTS gezocht naar de term.
+     Met  ?  en een zoekterm wordt ACHTERWAARTS gezocht naar de term.
+     Tik  n  na een zoekopdracht om de volgende hit te vinden,
+     of tik  N  om in de andere richting te zoeken.
+     CTRL-O  brengt je naar eerdere hit,  CTRL-I naar nieuwere.
+
+  3. Tik  %  terwijl de cursor op een haakje ([{}]) staat, om naar het
+     corresponderende haakje te gaan.
+
+  4. :s/oud/nieuw      vervangt het eerste 'oud' in een regel door 'nieuw'.
+     :s/oud/nieuw/g    vervangt elk 'oud' in een regel door 'nieuw'.
+     :#,#s/oud/nieuw/g vervangt elk 'oud' door 'nieuw' tussen de regelnummers.
+     :%s/oud/nieuw/g    vervangt elk 'oud' door 'nieuw' in het hele bestand.
+     Voeg  c  toe (:%s/oud/nieuw/gc) om elke keer om bevestiging
+     ('confirmation') te vragen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.1: HOE EEN EXTERN COMMANDO WORDT UITGEVOERD
+
+     ** Tik  :!  gevolgd door een extern commando om dat uit te voeren. **
+
+  1. Tik het commando  :  waarmee de cursor op de onderste regel van het
+     scherm komt te staan. Nu kan je een opdracht geven via de commando-regel.
+
+  2. Tik een  !  (uitroepteken). Dit stelt je in staat om elk shell-commando
+     uit te voeren.
+
+  3. Tik bijvoorbeeld  ls  na het uitroepteken en daarna <ENTER>. Hiermee
+     krijg je de inhoud van je map te zien, net alsof je de opdracht gaf
+     vanaf de shell-prompt. Probeer  :!dir  als het niet werkt.
+
+  OPMERKING: Elk extern commando kan op deze manier uitgevoerd worden, ook
+             met argumenten.
+
+  OPMERKING: Alle commando's na  :  moeten worden afgesloten met <ENTER>.
+             Vanaf nu zullen we dat niet meer altijd vermelden.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.2: MEER OVER HET OPSLAAN VAN BESTANDEN
+
+     ** Tik :w BESTANDSNAAM om de tekst mèt veranderingen op te slaan. **
+
+  1. Tik  :!dir  of  :!ls  om de inhoud van je map te tonen. Je weet
+     inmiddels dat je daarna een <ENTER> moet tikken.
+
+  2. Kies een bestandsnaam die nog niet bestaat, bijvoorbeeld TEST.
+
+  3. Tik nu:  :w TEST  (als je de naam TEST hebt gekozen).
+
+  4. Hierdoor wordt het hele bestand (de VIM lessen) opgeslagen onder de
+     naam TEST. Tik weer  :!dir  of  :!ls  om dit te controleren.
+
+  OPMERKING: Als je Vim zou verlaten en opnieuw zou starten met  vim TEST  is
+             het bestand een exacte kopie van de lessen, zoals je ze opsloeg.
+
+  5. Wis het bestand nu met de opdracht (MS-DOS)  :!del TEST
+                                       of (Unix)  :!rm TEST
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.3: EEN DEEL VAN DE TEKST OPSLAAN
+
+     ** Sla een deel van het bestand op met  v beweging :w BESTANDSNAAM **
+
+  1. Ga naar deze regel.
+
+  2. Tik  v  en ga met de cursor naar stap 5 hieronder. Je ziet dat de
+     tekst oplicht.
+
+  3. Tik  : . Onderaan het scherm zal  :'<,'>  verschijnen.
+
+  4. Tik  w TEST  , waar TEST een bestandsnaam is, die nog niet bestaat.
+     Controleer dat je  :'<,'>w TEST  ziet staan voordat je <ENTER> tikt.
+
+  5. Vim slaat nu de geselecteerde regels op in het bestand TEST. Met
+     :!dir  of  !ls  kan je dat zien. Wis het nog niet! We zullen het in
+     de volgende les gebruiken.
+
+  OPMERKING: Het tikken van  v  zet zichtbare modus ('visual selection') aan.
+             Je kan de cursor rondbewegen om de selectie groter of kleiner
+             te maken. Vervolgens kan je een commando gebruiken om iets met
+             de tekst te doen. Met  d  bijvoorbeeld wis je de tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.4: OPHALEN EN SAMENVOEGEN VAN BESTANDEN
+
+     ** Tik  :r BESTANDSNAAM om de inhoud van een bestand in te voegen. **
+
+  1. Zet de cursor precies boven deze regel.
+
+  OPMERKING: Na het uitvoeren van stap 2 zie je tekst van les 5.3. Scrol
+             daarna naar beneden om deze les weer te zien.
+
+  2. Haal nu het bestand TEST op met het commando  :r TEST .
+     Het bestand dat je ophaalt komt onder de regel waarin de cursor staat.
+
+  3. Controleer dat er een bestand is opgehaald. Ga met de cursor omhoog.
+     Dan zie je de tekst van les 5.3 dubbel, het origineel en de versie uit
+     het bestand.
+
+  OPMERKING: Je kan ook de uitvoer van een extern commando inlezen. Om een
+             voorbeeld te geven:  :r !ls  leest de uitvoer van het commando
+             ls en zet dat onder de regel waarin de cursor staat.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 5
+
+  1. :!COMMANDO  voert een extern commando uit.
+     Enkele bruikbare voorbeelden zijn:
+        (MS-DOS)         (Unix)
+         :!dir            :!ls          - laat de inhoud van een map zien
+         :!del BESTAND    :!rm BESTAND  - wist bestand BESTAND
+
+  2. :w BESTANDSNAAM  schrijft het huidige Vim-bestand naar disk met de
+     naam BESTANDSNAAM.
+
+  3. v beweging :w BESTANDSNAAM  laat je in zichtbare modus een fragment
+     selecteren, dat wordt opgeslagen in het bestand BESTANDSNAAM.
+
+  4. :r BESTANDSNAAM  haalt het bestand BESTANDSNAAM op en voegt het onder
+     de cursor-positie in de tekst in.
+
+  5. :r !dir  leest de uitvoer van het externe commando dir en zet het onder
+     de cursor-positie.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.1: HET COMMANDO OPEN
+
+     ** Tik  o  om een regel onder de cursor te openen in invoegmodus. **
+
+  1. Ga naar de eerste regel beneden met --->.
+
+  2. Tik de kleine letter  o  en open daarmee een regel ONDER de cursor en
+     ga naar de invoegmodus.
+
+  3. Tik wat tekst in en sluit af met <ESC> om de invoegmodus te verlaten.
+
+  ---> Als je  o  tikt, komt de cursor in een nieuwe regel in invoegmodus.
+
+  4. Om een regel BOVEN de cursor te openen, moet je gewoon een hoofdletter
+     O  tikken in plaats van een kleine letter. Probeer dat vanaf de volgende
+     regel.
+
+  ---> Open een regel hierboven. Tik een O terwijl de cursor hier staat.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.2: HET COMMANDO TOEVOEGEN
+
+        ** Tik  a  om tekst toe te voegen ACHTER de cursor. **
+
+  1. Ga naar het begin van de regel beneden met --->.
+  2. Tik  e  tot de cursor op het einde van  "ste"  staat.
+
+  3. Tik een (kleine letter)  a  ('append') om toe te voegen ACHTER de cursor.
+
+  4. Vul het woord aan zoals in de volgende regel. Druk <ESC> om de
+     invoegmodus te verlaten.
+
+  5. Ga met  e  naar het einde van het volgende onvolledige woord en herhaal
+     de stappen 3 en 4.
+
+  ---> Deze regel ste je in staat om te oef in het toevo van tekst. 
+       Deze regel stelt je in staat om te oefenen in het toevoegen van tekst. 
+
+  OPMERKING: a, i en A openen allemaal dezelfde invoegmodus, het enige
+             verschil is waar tekens worden ingevoegd.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.3: VERVANGEN OP EEN ANDERE MANIER
+
+      ** Tik een hoofdletter  R  om meer dan Ã©Ã©n teken te vervangen. **
+
+  1. Ga naar de eerste regel beneden met --->. Ga met de cursor naar het
+     begin van de eerste  "xxx" .
+
+  2. Tik nu  R  en daarna het getal eronder in de tweede regel, zodat  xxx
+     wordt vervangen.
+
+  3. Druk <ESC> om de vervangmodus te verlaten. Je ziet dat de rest van de
+     regel ongewijzigd blijft.
+
+  4. Herhaal de stappen om de overgebleven  xxx  te vervangen.
+
+  ---> Optellen van 123 en xxx geeft je xxx.
+  ---> Optellen van 123 en 456 geeft je 579.
+
+  OPMERKING: Vervangmodus lijkt op invoegmodus, maar elk teken dat je tikt,
+             vervangt een bestaand teken.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.4: TEKST KOPIËREN EN PLAKKEN
+
+        ** Gebruik  y  om tekst te kopiëren en  p  om te plakken. **
+
+  1. Ga naar de regel beneden met ---> en zet de cursor achter "a)".
+
+  2. Zet zichtbare modus aan met  v  en zet de cursor juist voor "eerste".
+
+  3. Tik  y  ('yank') om de opgelichte tekst ("dit is het") te kopiëren.
+
+  4. Ga met  j$  met de cursor naar het einde van de volgende regel.
+
+  5. Plak de gekopieerde tekst met  p  en tik  a tweede <ESC>.
+
+  6. Selecteer in zichtbare modus "onderdeel", kopieer het met  y  en
+     ga met  j$  naar het einde van de tweede regel. Plak de tekst daar
+     met  p .
+
+  --->  a) dit is het eerste onderdeel
+        b)
+
+  OPMERKING: Je kan  y  ook als operator gebruiken;  yw  kopieert een woord,
+             yy  een hele regel.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.5: OPTIES GEBRUIKEN
+
+     ** Gebruik een optie voor al dan niet hoofdlettergevoelig zoeken. **
+
+  1. Zoek naar 'hoofdlettergevoelig' met  /hoofdlettergevoelig <ENTER>
+     Herhaal het zoeken enkele keren door  n  te tikken.
+  2. Schakel de optie 'ic' ('ignore case', niet-hoofdlettergevoelig) in
+     met  :set ic
+
+  3. Zoek met  n  opnieuw naar 'hoofdlettergevoelig'. Je ziet dat
+     Hoofdlettergevoelig en HOOFDLETTERGEVOELIG nu ook gevonden worden.
+
+  4. Schakel de opties 'hlsearch' (treffers oplichten) en 'incsearch' (toon
+     gedeeltelijke treffers bij intikken) in met  :set hls is
+
+  5. Tik weer /hoofdlettergevoelig <ENTER> en kijk wat er gebeurt.
+
+  6. Schakel 'hoofdlettergevoelig' weer in met  :set noic
+
+  OPMERKING: Schakel het oplichten van treffers uit met  :nohlsearch
+
+  OPMERKING: Om bij een enkel zoek-commando de hoofdlettergevoeligheid om
+             te draaien kan  \c  worden gebruikt na de zoekterm:
+             /hoofdlettergevoelig\c <ENTER>.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 6
+
+  1. Tik  o  om een regel te openen ONDER de cursor en invoegmodus te starten.
+     Tik  O  om een regel te openen BOVEN de cursor.
+
+  2. Tik  a  om tekst toe te voegen NA de cursor.
+     Tik  A  om tekst toe te voegen aan het einde van de regel.
+
+  3. Het commando  e  beweegt de cursor naar het einde van een woord.
+
+  4. De operator  y  yankt (kopieert) tekst,  p  zet het terug (plakt).
+
+  5. Met hoofdletter  R  wordt de vervangmodus geopend, met <ESC> afgesloten.
+
+  6. Met  :set xxx  wordt optie 'xxx' ingeschakeld. Opties zijn bijvoorbeeld:
+       ic   ignorecase  geen verschil hoofdletters/kleine letters bij zoeken
+       is   incsearch   toon gedeeltelijke treffers tijdens intikken zoekterm 
+       hls  hlsearch    laat alle treffers oplichten
+     Je kan zowel de lange als de korte naam van een optie gebruiken.
+  
+  7. Zet 'no' voor de naam om een optie uit te schakelen:  :set noic
+     schakelt 'ic' uit.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.1: HULP INROEPEN
+
+           ** Het gebruik van ingebouwde hulp. **
+
+  Vim heeft een uitgebreid ingebouwd hulpsysteem. Probeer, om te beginnen,
+  Ã©Ã©n van deze drie:
+    - druk de <HELP> toets (als je die hebt)
+    - druk de <F1> toets (als je die hebt)
+    - tik  :help <ENTER>
+
+  Lees de tekst in het help-venster om te leren hoe 'help' werkt.
+  Tik  CTRL-W CTRL-W  om van het ene venster naar het andere te gaan.
+  Met  :q <ENTER>  wordt het help-venster gesloten.
+
+  Je kan hulp vinden over nagenoeg elk onderwerp door een argument aan het
+  commando  :help  toe te voegen. Probeer deze (en vergeet <ENTER> niet):
+    :help w
+    :help c_CTRL-D
+    :help insert-index
+    :help user-manual
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.2: SCHRIJF EEN CONFIGURATIEBESTAND
+
+                    ** Mogelijkheden van Vim uitbreiden. **
+
+  Vim kent veel meer mogelijkheden dan Vi, maar de meeste zijn standaard
+  uitgeschakeld. Om meer functies te gebruiken moet je een 'vimrc'-bestand
+  schrijven.
+
+  1. Bewerk het bestand 'vimrc'. Hoe dat moet hangt af van je systeem:
+      :e ~/.vimrc              voor Unix
+      :e $VIM/_vimrc           voor MS-Windows
+
+  2. Lees de inhoud van het voorbeeld-bestand:
+      :r $VIMRUNTIME/vimrc_example.vim
+
+  3. Sla het bestand op met  :w
+
+  De volgende keer dat je Vim start wordt 'syntaxiskleuring' gebruiken.
+  Je kan al je voorkeursinstellingen toevoegen aan dit 'vimrc'-bestand.
+  Tik  :help vimrc-intro  voor meer informatie.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.3: AANVULLEN
+
+      ** Aanvullen van de 'command line' met CTRL-D en <TAB>. **
+
+  1. Zorg dat Vim niet in 'compatible mode' is met  :set nocp
+
+  2. Kijk welke bestanden zich in de map bevinden met  :!ls  of  :!dir
+
+  3. Tik het begin van een commando:  :e
+
+  4. Met  CTRL-D  toont Vim een lijst commando's, die met "e" beginnen.
+
+  5. Druk enkele keren <TAB>. Vim laat aanvullingen zien, zoals ":edit",
+     dat we hier gebruiken.
+
+  6. Voeg een spatie toe en de eerste letter(s) van een bestaande
+     bestandsnaam:  :edit BESTAND
+
+  7. Druk <TAB>. Vim vult de naam aan (als hij uniek is).
+
+  OPMERKING: Aanvullen werkt bij tal van commando's. Probeer gewoon CTRL-D
+             en <TAB>. Het is bijzonder nuttig bij  :help .
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 7
+
+  1. Tik  :help  of druk <F1> of <Help>  om een help-venster te openen.
+
+  2. Tik  :help CMD  voor hulp over  CMD .
+
+  3. Tik  CTRL-W CTRL-W  om naar een ander venster te gaan.
+
+  4. Tik  :q  om het help-venster te sluiten.
+
+  5. Maak een bestand met de naam 'vimrc' voor je voorkeursinstellingen.
+
+  6. Druk CTRL-D tijdens het intikken van een :-commando om mogelijke
+     aanvullingen te zien. Druk <TAB> om aanvullen te gebruiken.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  Hiermee komen de Vim-lessen tot een einde. Ze waren bedoeld om een kort
+  overzicht te geven van de Vim-editor, juist voldoende om de editor
+  redelijk makkelijk te gebruiken. Deze lessen zijn verre van volledig. Vim
+  kent veel meer commando's. Lees hierna de handleiding voor gebruikers:
+  ":help user-manual".
+
+  Voor verdere studie wordt aanbevolen:
+      Vim - Vi Improved - door Steve Oualline
+      Uitgever: New Riders
+  Dit is het eerste boek dat geheel aan Vim is gewijd. Speciaal geschikt
+  voor beginners. Met veel voorbeelden en afbeeldingen.
+  Zie http://iccf-holland.org/click5.html
+
+  Het volgende boek is ouder en gaat meer over Vi dan Vim, maar het wordt
+  toch aanbevolen:
+      Learning the Vi Editor - door Linda Lamb
+      Uitgever: O'Reilly & Associates Inc.
+  Het is een goed boek om nagenoeg alles te weten te komen dat je met Vi
+  zou willen doen. De zesde en vooral de nieuwe zevende druk (onder de
+  titel Learning the Vi and Vim Editors door Arnold Robbins, Elbert Hannah
+  & Linda Lamb) bevat ook informatie over Vim.
+
+  Deze lessen zijn geschreven door Michael C. Pierce en Robert K. Ware,
+  Colorado School of Mines met gebruikmaking van ideeën van Charles Smith
+  van de Colorado State University. E-mail: bware@mines.colorado.edu.
+
+  Aangepast voor Vim door Bram Moolenaar.
+
+  Nederlandse vertaling door Rob Bishoff, april 2012
+  e-mail: rob.bishoff@hccnet.nl)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.nl.utf-8 b/runtime/tutor/tutor.nl.utf-8
new file mode 100644 (file)
index 0000000..715c8d3
--- /dev/null
@@ -0,0 +1,950 @@
+  ==========================================================================
+  =    W e l k o m   b i j   d e   V I M   l e s s e n   -   Versie 1.7    =
+  ==========================================================================
+
+  Vim is een krachtige editor met veel commando's, te veel om uit te leggen
+  in lessen zoals deze. Deze lessen zijn bedoeld om voldoende commando's te
+  behandelen om je in staat te stellen met Vim te werken als een editor voor
+  algemeen gebruik.
+
+  Deze lessen zullen 25 tot 30 minuten in beslag nemen, afhankelijk van de
+  tijd die wordt besteed aan het uitproberen van de commando's.
+
+  LET OP:
+  Door de commando's in deze lessen verandert de tekst. Maak een kopie van
+  dit bestand om mee te oefenen (als je "vimtutor" uitvoerde, is dit al een
+  kopie).
+
+  Deze lessen zijn bedoeld om al doende te leren. Dat betekent dat je de
+  commando's moet uitvoeren om ze goed te leren kennen. Als je de tekst
+  alleen maar doorleest, zal je de commando's niet leren!
+
+  Zorg ervoor dat de <Caps Lock> toets NIET is ingedrukt en druk vaak genoeg
+  op de j-toets om de cursor zo te bewegen dat les 1.1 volledig op het
+  scherm staat.
+
+  LET OP: In deze lessen worden omwille van de duidelijkheid vaak spaties
+  gebruikt binnen een commando (bv. "40 G" of "operator [getal] beweging").
+  Tik deze spaties echter NIET. Ze verstoren de werking.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.1:  VERPLAATS DE CURSOR
+
+  ** De cursor wordt verplaatst met de toetsen h, j, k, l zoals aangegeven. **
+          ^
+          k       Hint:  De h is de meest linkse en beweegt naar links.
+      < h   l >          De l is de meest rechtse en beweegt naar rechts.
+          j              De j lijkt op een pijl naar beneden.
+          v
+
+  1. Beweeg de cursor over het scherm om er vertrouwd mee te raken.
+
+  2. Druk de omlaag-toets (j) tot hij repeteert.
+     Nu weet je hoe je de volgende les bereikt.
+
+  3. Gebruik de omlaag-toets om naar les 1.2 te gaan.
+
+  OPMERKING: Als je twijfelt aan wat je tikte, druk <ESC> om in de opdracht-
+             modus te komen. Tik daarna het commando dat bedoeld wordt.
+
+  OPMERKING: Pijltjes-toetsen werken ook. Met de hjkl-toetsen kan je sneller
+             rondbewegen, als je er eenmaal aan gewend bent. Echt waar!
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.2: VIM AFSLUITEN
+
+      !! LET OP: Lees deze les goed door voordat je iets uitvoert!!
+
+  1. Druk de <ESC> toets (om zeker in de opdrachtmodus te zitten).
+
+  2. Tik   :q! <ENTER>
+     Hiermee wordt de editor afgesloten. Alle veranderingen gaan VERLOREN.
+
+  3. Nu zie je de shell-prompt. Tik het commando waarmee je deze lessen
+     hebt opgeroepen. Dat is normaal gesproken:  vimtutor <ENTER>
+
+  4. Als je deze stappen goed hebt doorgelezen, voer dan de stappen 1 tot 3
+     uit om de editor te verlaten en weer op te starten.
+
+  LET OP: :q! <ENTER> verwerpt alle veranderingen die je aanbracht. Een paar
+          lessen verder zal je leren hoe veranderingen worden opgeslagen in
+          een bestand.
+
+  5. Beweeg de cursor omlaag naar les 1.3.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.3: TEKST BEWERKEN - WISSEN
+
+          ** Tik  x  om het teken onder de cursor te wissen. **
+
+  1. Ga met de cursor naar de regel verderop met --->.
+
+  2. Zet de cursor op een teken dat moet worden gewist om een fout te
+     herstellen.
+
+  3. Tik  x  om het ongewenste teken te wissen.
+
+  4. Herhaal deze stappen tot de regel goed is.
+
+  ---> Vi kkent eenn opdracccchtmodus en een invooegmmmmodus.
+
+  5. Nu de regel gecorrigeerd is kan je naar les 1.4 gaan.
+
+  LET OP: Probeer de lessen niet uit je hoofd te leren. Leer al doende.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.4: TEKST BEWERKEN - INVOEGEN
+
+              ** Tik  i  ('insert') om tekst in te voegen. **
+
+  1. Ga met de cursor naar de eerste regel verderop met --->.
+
+  2. Maak de eerste regel gelijk aan de tweede. Zet daarvoor de cursor op
+     de plaats waar tekst moet worden ingevoegd.
+
+  3. Tik  i  en daarna de nodige aanvullingen.
+
+  4. Tik <ESC> na elke herstelde fout om terug te keren in de opdrachtmodus.
+     Herhaal de stappen 2 tot 4 om de zin te verbeteren.
+
+  ---> Aan regel ontekt wat .
+  ---> Aan deze regel ontbreekt wat tekst.
+
+  5. Ga naar les 1.5 als je gewend bent aan het invoegen van tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.5: TEKST BEWERKEN - TOEVOEGEN
+
+             ** Tik  A  ('append') om tekst toe te voegen. **
+
+  1. Ga met de cursor naar de eerste regel verderop met --->.
+     Het maakt niet uit waar de cursor in deze regel staat.
+
+  2. Tik hoofdletter  A  en tik de nodige aanvullingen.
+
+  3. Tik <ESC> nadat de tekst is aangevuld. Zo keer je terug in de
+     opdrachtmodus.
+
+  4. Ga naar de tweede regel verderop met ---> en herhaal stap 2 en 3
+     om deze zin te corrigeren.
+
+  ---> Er ontbreekt wat tekst aan de
+       Er ontbreekt wat tekst aan deze regel.
+  ---> Hier ontbreekt ook w
+       Hier ontbreekt ook wat tekst.
+
+  5. Ga naar les 1.6 als je vertrouwd bent geraakt aan het toevoegen
+     van tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.6: EEN BESTAND EDITTEN
+
+    ** Gebruik  :wq  om een bestand op te slaan en de editor te verlaten. **
+
+  !! LET OP: Lees deze les helemaal door voordat je een van de volgende
+             stappen uitvoert!!
+
+  1. Verlaat deze les zoals je in les 1.2 deed:  :q!
+     Of gebruik een andere terminal als je daar de beschikking over hebt. Doe
+     daar het volgende.
+
+  2. Tik het volgende commando na de shell-prompt:  vim les <ENTER>
+     'vim' (vaak ook 'vi') is het commando om de Vim-editor te starten,
+     'les' is de naam van het bestand, dat je gaat bewerken. Kies een andere
+     naam als er al een bestand 'les' bestaat, dat niet veranderd mag worden.
+
+  3. Voeg naar eigen keus tekst toe, zoals je geleerd hebt in eerdere lessen.
+
+  4. Sla het bestand met de wijzigingen op en verlaat Vim met  :wq <ENTER>
+
+  5. Herstart vimtutor als je deze bij stap 1 hebt verlaten en ga verder met
+     de volgende samenvatting.
+
+  6. Voer deze stappen uit nadat je ze hebt gelezen en begrepen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 1
+
+  1. De cursor wordt bewogen met de pijltjestoetsen of de hjkl-toetsen.
+       h (links)   j (omlaag)  k (omhoog)  l (rechts)
+
+  2. Start Vim van de shell-prompt. Tik:  vim BESTANDSNAAM <ENTER>
+
+  3. Sluit Vim af met  <ESC> :q! <ENTER>  om de veranderingen weg te gooien.
+               OF tik  <ESC> :wq <ENTER>  om de veranderingen te bewaren.
+
+  4. Wis het teken onder de cursor met:  x
+
+  5. Invoegen of toevoegen van tekst, tik:
+     i  en daarna de in te voegen tekst  <ESC>   voeg in vanaf de cursor
+     A  en daarna de toe te voegen tekst  <ESC>  voeg toe achter de regel
+
+  OPMERKING: Met <ESC> kom je terug in opdrachtmodus en wordt een ongewenst
+             of gedeeltelijk uitgevoerd commando afgebroken.
+
+  Ga nu verder met les 2.1.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.1: WIS-COMMANDO'S
+
+       ** Tik  dw  ('delete word') om een woord te wissen. **
+
+  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
+
+  2. Ga naar de regel hieronder, die met ---> begint.
+
+  3. Ga met de cursor naar het begin van een woord dat moet worden gewist.
+
+  4. Met het tikken van  dw  verdwijnt het woord.
+
+  OPMERKING: De letter  d  verschijnt op de laatste regel van het scherm
+             zodra je hem tikt. Vim is aan het wachten tot je de  w  tikt.
+             Als je een ander teken dan  d  ziet, heb je iets verkeerds
+             getikt. Druk op <ESC> en begin opnieuw.
+
+  NOG EEN OPMERKING: Dit werkt alleen als de optie 'showcmd' is ingeschakeld.
+                     Dat gebeurt met  :set showcmd <ENTER>
+
+  ---> Er zijn een het paar ggg woorden, die niet in deze len zin thuishoren.
+
+  5. Herhaal de stappen 3 en 4 tot de zin goed is en ga naar les 2.2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.2: MEER WIS-COMMANDO'S
+
+        ** Tik  d$  om te wissen tot het einde van de regel. **
+
+  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
+
+  2. Ga naar de regel hieronder, die met ---> begint.
+
+  3. Ga met de cursor naar het einde van de correcte regel (NA de eerste  . ).
+
+  4. Tik  d$  om te wissen tot het einde van de regel.
+
+  ---> Iemand heeft het einde van deze regel dubbel getikt. dubbel getikt.
+
+  5. Ga naar les 2.3 voor uitleg.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.3: OVER OPERATOREN EN BEWEGINGEN
+
+  Veel commando's die de tekst veranderen, bestaan uit een operator en een
+  beweging. De samenstelling van een wis-commando met de operator  d  is:
+    d  beweging
+
+  Daarbij is:
+    d        - de wis-operator
+    beweging - het bereik waarop de operator werkt (zie het lijstje hieronder)
+
+  Een korte lijst van bewegingen vanaf de cursor:
+    w - tot het begin van het volgende woord, ZONDER het eerste teken daarvan.
+    e - tot het einde van het huidige woord, INCLUSIEF het laatste teken.
+    $ - tot het einde van de regel, INCLUSIEF het laatste teken.
+
+  Het tikken van  de  wist tekst vanaf de cursor tot het eind van het woord.
+
+  OPMERKING: Het intikken van alleen maar de beweging, zonder een operator,
+             in de opdrachtmodus beweegt de cursor (respectievelijk naar het
+             volgende woord, naar het eind van het huidige woord en naar het
+             eind van de regel).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.4: GEBRUIK VAN EEN TELLER BIJ EEN BEWEGING
+
+   ** Een getal voor een beweging herhaalt het zoveel keer. **
+
+  1. Ga naar de regel hieronder, die met ---> begint.
+
+  2. Tik  2w  zodat de cursor twee woorden vooruit gaat.
+
+  3. Tik  3e  zodat de cursor naar het einde van het derde woord gaat.
+
+  4. Tik  0  (nul) om naar het begin van de regel te gaan.
+
+  5. Herhaal de stappen 2 en 3 met andere getallen.
+
+  ---> Dit is een regel met woorden waarin je heen en weer kan bewegen.
+
+  6. Ga verder met les 2.5.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.5: GEBRUIK EEN TELLER OM MEER TE WISSEN
+
+  ** Een getal met een operator zorgt dat deze zoveel keer wordt herhaald. **
+
+  Bij de combinatie van wis-operator en beweging kan je voor de beweging een
+  teller zetten om meer te wissen:
+         d  [teller]  beweging
+
+  1. Ga naar het eerste woord in HOOFDLETTERS in de regel na --->.
+
+  2. Met  d2w  worden twee woorden (in dit voorbeeld in hoofdletters) gewist.
+
+  3. Herhaal de stappen 1 en 2 met verschillende tellers om de verschillende
+     woorden in hoofdletters met Ã©Ã©n commando te wissen.
+
+  ---> deze ABC DE regel FGHI JK LMN OP is QZ RS ontdaan van rommel.
+
+  OPMERKING: De teller kan ook aan het begin staan: d2w en 2dw werken allebei.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.6: BEWERKING VAN HELE REGELS
+
+               ** Tik  dd  om een hele regel te wissen. **
+
+  Omdat het wissen van een hele regel vaak voorkomt, besloten de ontwerpers
+  van Vi dat met het tikken van  dd  simpelweg een hele regel gewist wordt.
+
+  1. Ga met de cursor naar de tweede regel van de zinnetjes hieronder.
+
+  2. Tik  dd  om de regel te wissen.
+
+  3. Ga nu naar de vierde regel.
+
+  4. Tik  2dd  om twee regels te wissen.
+
+  --->  1)  Rozen zijn rood.
+  --->  2)  Modder is leuk.
+  --->  3)  Viooltjes zijn blauw.
+  --->  4)  Ik heb een auto.
+  --->  5)  De klok slaat de tijd.
+  --->  6)  Suiker is zoet.
+  --->  7)  En dat ben jij ook.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.7: HET COMMANDO HERSTEL
+
+  ** u  maakt het laatste commando ongedaan,  U  herstelt een hele regel. **
+
+  1. Ga met de cursor naar de regel hieronder met ---> en zet hem
+     op de eerste fout.
+
+  2. Tik  x  om het eerste ongewenste teken te wissen.
+
+  3. Tik nu  u  en maak daarmee het vorige commando ongedaan.
+
+  4. Herstel nu alle fouten in de regel met het  x  commando.
+
+  5. Tik een hoofdletter  U  om de regel in z'n oorspronkelijke staat terug
+     te brengen.
+
+  6. Tik nu een paar keer  u  en herstel daarmee de  U  en eerdere commando's.
+
+  7. Tik nu een paar keer CTRL-R (Ctrl-toets ingedrukt houden en R tikken) en
+     voer daarmee de commando's opnieuw uit: 'redo' oftewel 'undo de undo's'. 
+
+  ---> Heerstel de fouten inn deeze regel en brenng ze weer terugg met undo.
+
+  8. Dit zijn heel nuttige commando's. Ga verder met samenvatting van les 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 2
+
+  1. Wis van de cursor tot het volgende woord met    dw
+
+  2. Wis van de cursor tot het eind van de regel met d$
+
+  3. Wis de hele regel met                           dd
+
+  4. Herhaal een beweging door er een getal voor te zetten:  2w
+
+  5. De opbouw van een wijzigingscommando is:
+       operator  [getal]  beweging
+     daarbij is:
+       operator - wat er moet gebeuren, bijvoorbeeld  d  om te wissen
+       [getal]  - een (niet-verplichte) teller om 'beweging' te herhalen
+       beweging - een beweging door de te wijzigen tekst zoals w (woord)
+                  of $ (tot het einde van de regel) enz.
+
+  6. Ga naar het begin van de regel met nul:  0
+
+  7. Undo de voorgaande actie met              u (kleine letter)
+     Undo alle veranderingen in een regel met  U (hoofdletter)
+     Undo de undo's met                        CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.1: HET COMMANDO PLAK
+
+  ** Tik  p  ('put') en plak daarmee zojuist gewiste tekst na te cursor. **
+
+  1. Ga met de cursor naar de eerste regel met ---> hierna.
+
+  2. Wis de regel met  dd  en bewaar hem zodoende in een Vim-register.
+
+  3. Ga naar de c-regel, waar de gewiste regel ONDER moet komen.
+
+  4. Tik  p  om de regel terug te zetten onder de regel met de cursor.
+
+  5. Herhaal de stappen 2 tot 4 om de regels in de goede volgorde te zetten.
+
+---> d) Krijg je het ook onder de knie?
+---> b) Viooltjes zijn blauw,
+---> c) Begrip is te leren,
+---> a) Rozen zijn rood,
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.2: HET COMMANDO VERVANG
+
+  ** Tik rx ('replace') om het teken onder de cursor te vervangen door x. **
+
+  1. Ga naar de eerste regel hieronder met --->.
+
+  2. Zet de cursor op de eerste fout.
+
+  3. Tik  r  en dan het teken dat er hoort te staan.
+
+  4. Herhaal de stappen 2 en 3 tot de eerste regel gelijk is aan de tweede.
+
+  --->  Bij het tokken van dezf hegel heeft iemamd verklerde letters getikt.
+  --->  Bij het tikken van deze regel heeft iemand verkeerde letters getikt.
+
+  5. Ga nu naar les 3.3.
+
+  LET OP: Door het te doen, leer je beter dan door het uit je hoofd te leren.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.3: HET COMMANDO VERANDER
+
+     ** Tik  ce  om te veranderen tot het einde van een woord. **
+
+  1. Ga met de cursor naar de eerste regel hieronder met --->.
+
+  2. Zet de cursor op de  u  van ruch.
+
+  3. Tik  ce  en de juiste letters (in dit geval "egel").
+
+  4. Druk <ESC> en ga naar het volgende teken dat moet worden veranderd.
+
+  5. Herhaal de stappen 3 en 4 tot de eerste regel gelijk is aan de tweede.
+
+  ---> In deze ruch staan een paar weedrim die veranderd moud worden.
+  ---> In deze regel staan een paar woorden die veranderd moeten worden.
+
+  LET OP: Met  ce  wordt (het laatste deel van) een woord gewist en kom je
+          in de invoegmodus.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.4: MEER VERANDERINGEN MET c
+
+  1. Het commando verander ('change') werkt op dezelfde manier als wis. De
+     opbouw is:
+         c  [teller]  beweging
+
+  2. De bewegingen zijn hetzelfde, zoals  w  (woord) en  $  (einde regel).
+
+  3. Ga naar de eerste regel hieronder met --->.
+
+  4. Zet de cursor op de eerste fout.
+
+  5. Tik  c$  en tik de rest van de regel zodat hij gelijk wordt aan de
+     tweede en sluit af met <ESC>.
+
+  ---> Het einde van deze regel moet precies zo worden als de tweede regel.
+  ---> Het einde van deze regel moet gecorrigeerd worden met het commando c$.
+
+  OPMERKING: Je kan de toets <BACKSPACE> gebruiken om tikfouten te herstellen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 3 
+
+  1. Tik  p  om tekst terug te plakken, die zojuist is gewist. Dit zet de
+     gewiste tekst ACHTER de cursor (als een hele regel is gewist komt deze
+     op de regel ONDER de cursor.
+
+  2. Het teken waarop de cursor staat wordt vervangen met  r  gevolgd door
+     het teken dat je daar wilt hebben.
+
+  3. Het commando 'verander' stelt je in staat om tekst te veranderen vanaf
+     de cursor tot waar de 'beweging' je brengt. Dat wil zeggen: tik  ce  om
+     te veranderen vanaf de cursor tot het einde van het woord,  c$  om te
+     veranderen tot het einde van de regel.
+
+  4. De opbouw van het commando verander is:
+         c  [teller]  beweging
+
+  Ga nu naar de volgende les.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.1: PLAATS VAN DE CURSOR EN STATUS VAN HET BESTAND
+
+  ** CTRL-G laat zien waar (regelnummer) je je bevindt en wat de status van
+     het bestand is. Met [nummer] G  ga je naar een bepaalde regel. **
+
+  LET OP: Lees de hele les voordat je een stap uitvoert!!
+
+  1. Hou de Ctrl-toets ingedrukt en tik  g . Dit noemen we CTRL-G.
+     Onderaan de pagina verschijnt een boodschap met de bestandsnaam en de
+     positie in het bestand. Onthou het regelnummer voor stap 3.
+
+  OPMERKING: Als de optie 'ruler' aan staat, wordt de positie van de cursor
+             (regelnummer, kolom) steeds in de rechter-onderhoek van het
+             scherm vermeld. In dit geval vermeldt CTRL-G geen regelnummer.
+             CTRL-G geeft ook de status aan, namelijk of de tekst veranderd
+             is ('modified') sinds het de laatste keer is opgeslagen.  
+
+  2. Tik hoofdletter  G  om naar het einde van het bestand te gaan.
+     Tik  gg  om naar het begin van het bestand te gaan.
+
+  3. Tik het regelnummer waar je bij stap 1 was en daarna  G . Dit brengt je
+     terug naar de regel waar je was toen je de eerste keer CTRL-G tikte.
+
+  4. Voer de stappen 1 tot 3 uit als je dit goed hebt gelezen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.2: HET COMMANDO ZOEKEN
+
+  ** Met  /ZOEK  wordt naar de zoekterm (één of meer woorden) gezocht. **
+
+  1. Tik in de opdrachtmodus het teken  / . Je ziet dat het met de cursor
+     aan de onderkant van het scherm verschijnt, zoals bij het :-commando.
+
+  2. Tik nu 'ffouut' <ENTER>. Dit is het woord waarnaar gezocht wordt.
+
+  3. Tik  n  om verder te zoeken met dezelfde zoekterm.
+     Zoek met  N  met dezelfde zoekterm in de tegenovergestelde richting.
+
+  4. Zoek in achterwaartse richting met ?zoekterm in plaats van  / .
+
+  5. Keer terug naar de vorige hit met CTRL-O (hou Ctrl-toets ingedrukt en
+     tik letter o). Herhaal om verder terug te gaan. CTRL-I gaat vooruit.
+
+  ---> "ffouut" is niet de juiste spelling van fout, ffouut is een fout.
+
+  OPMERKING: Als zoeken het einde van het bestand bereikt, wordt vanaf het
+             begin doorgezocht, tenzij de optie 'wrapscan' is uitgeschakeld.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.3: GA NAAR CORRESPONDERENDE HAAKJES
+
+            ** Tik  %  om naar corresponderende ), ] of } te gaan. **
+
+  1. Zet de cursor op een (, [ of { in de regel hieronder met --->.
+
+  2. Tik dan het teken  % .
+
+  3. De cursor gaan naar het overeenkomstige haakje.
+
+  4. Met opnieuw  %  gaat de cursor terug naar het eerste haakje.
+
+  5. Plaats de cursor op een ander haakje en bekijk wat  %  doet.
+
+  ---> Dit ( is een testregel met  ('s, ['s ] en {'s } erin. ))
+
+  OPMERKING: Dit is nuttig bij het debuggen van een programma waarin haakjes
+             niet corresponderen. Met de optie 'showmatch' wordt ook
+             aangegeven of haakjes corresponderen, maar de cursor wordt niet
+             (blijvend) verplaatst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.4: HET VERVANG COMMANDO
+
+      ** Tik  :s/oud/nieuw/g  om 'oud' door 'nieuw' te vervangen. **
+
+  1. Ga met de cursor naar de regel hieronder met --->.
+
+  2. Tik  :s/dee/de <ENTER>. Zoals je ziet, vervangt ('substitute') dit
+     commando alleen de eerste "dee" in de regel.
+
+  3. Tik nu  :s/dee/de/g . Met de g-vlag ('global') wordt elke "dee" in de
+     regel vervangen.
+
+  ---> dee beste tijd om dee bloemen te zien is in dee lente.
+
+  4. Om in (een deel van) een tekst elk 'oud' te vervangen door 'nieuw':
+     tik   :#,#s/oud/nieuw/g   waar #,# de regelnummers zijn die het gebied
+                               begrenzen waarin wordt vervangen.
+     tik   :%s/oud/nieuw/g     om alles te vervangen in het hele bestand.
+     tik   :%s/oud/nieuw/gc    om elke 'oud' in het hele bestand te vinden
+                               en te vragen of er vervangen moet worden.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 4
+
+  1. CTRL-G   laat positie in het bestand zien en de status van het bestand.
+     G        verplaatst je naar het einde van het bestand.
+     nummer G verplaatst je naar regelnummer.
+     gg       verplaatst je naar de eerste regel.
+
+  2. Met  /  en een zoekterm wordt VOORWAARTS gezocht naar de term.
+     Met  ?  en een zoekterm wordt ACHTERWAARTS gezocht naar de term.
+     Tik  n  na een zoekopdracht om de volgende hit te vinden,
+     of tik  N  om in de andere richting te zoeken.
+     CTRL-O  brengt je naar eerdere hit,  CTRL-I naar nieuwere.
+
+  3. Tik  %  terwijl de cursor op een haakje ([{}]) staat, om naar het
+     corresponderende haakje te gaan.
+
+  4. :s/oud/nieuw      vervangt het eerste 'oud' in een regel door 'nieuw'.
+     :s/oud/nieuw/g    vervangt elk 'oud' in een regel door 'nieuw'.
+     :#,#s/oud/nieuw/g vervangt elk 'oud' door 'nieuw' tussen de regelnummers.
+     :%s/oud/nieuw/g    vervangt elk 'oud' door 'nieuw' in het hele bestand.
+     Voeg  c  toe (:%s/oud/nieuw/gc) om elke keer om bevestiging
+     ('confirmation') te vragen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.1: HOE EEN EXTERN COMMANDO WORDT UITGEVOERD
+
+     ** Tik  :!  gevolgd door een extern commando om dat uit te voeren. **
+
+  1. Tik het commando  :  waarmee de cursor op de onderste regel van het
+     scherm komt te staan. Nu kan je een opdracht geven via de commando-regel.
+
+  2. Tik een  !  (uitroepteken). Dit stelt je in staat om elk shell-commando
+     uit te voeren.
+
+  3. Tik bijvoorbeeld  ls  na het uitroepteken en daarna <ENTER>. Hiermee
+     krijg je de inhoud van je map te zien, net alsof je de opdracht gaf
+     vanaf de shell-prompt. Probeer  :!dir  als het niet werkt.
+
+  OPMERKING: Elk extern commando kan op deze manier uitgevoerd worden, ook
+             met argumenten.
+
+  OPMERKING: Alle commando's na  :  moeten worden afgesloten met <ENTER>.
+             Vanaf nu zullen we dat niet meer altijd vermelden.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.2: MEER OVER HET OPSLAAN VAN BESTANDEN
+
+     ** Tik :w BESTANDSNAAM om de tekst mèt veranderingen op te slaan. **
+
+  1. Tik  :!dir  of  :!ls  om de inhoud van je map te tonen. Je weet
+     inmiddels dat je daarna een <ENTER> moet tikken.
+
+  2. Kies een bestandsnaam die nog niet bestaat, bijvoorbeeld TEST.
+
+  3. Tik nu:  :w TEST  (als je de naam TEST hebt gekozen).
+
+  4. Hierdoor wordt het hele bestand (de VIM lessen) opgeslagen onder de
+     naam TEST. Tik weer  :!dir  of  :!ls  om dit te controleren.
+
+  OPMERKING: Als je Vim zou verlaten en opnieuw zou starten met  vim TEST  is
+             het bestand een exacte kopie van de lessen, zoals je ze opsloeg.
+
+  5. Wis het bestand nu met de opdracht (MS-DOS)  :!del TEST
+                                       of (Unix)  :!rm TEST
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.3: EEN DEEL VAN DE TEKST OPSLAAN
+
+     ** Sla een deel van het bestand op met  v beweging :w BESTANDSNAAM **
+
+  1. Ga naar deze regel.
+
+  2. Tik  v  en ga met de cursor naar stap 5 hieronder. Je ziet dat de
+     tekst oplicht.
+
+  3. Tik  : . Onderaan het scherm zal  :'<,'>  verschijnen.
+
+  4. Tik  w TEST  , waar TEST een bestandsnaam is, die nog niet bestaat.
+     Controleer dat je  :'<,'>w TEST  ziet staan voordat je <ENTER> tikt.
+
+  5. Vim slaat nu de geselecteerde regels op in het bestand TEST. Met
+     :!dir  of  !ls  kan je dat zien. Wis het nog niet! We zullen het in
+     de volgende les gebruiken.
+
+  OPMERKING: Het tikken van  v  zet zichtbare modus ('visual selection') aan.
+             Je kan de cursor rondbewegen om de selectie groter of kleiner
+             te maken. Vervolgens kan je een commando gebruiken om iets met
+             de tekst te doen. Met  d  bijvoorbeeld wis je de tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.4: OPHALEN EN SAMENVOEGEN VAN BESTANDEN
+
+     ** Tik  :r BESTANDSNAAM om de inhoud van een bestand in te voegen. **
+
+  1. Zet de cursor precies boven deze regel.
+
+  OPMERKING: Na het uitvoeren van stap 2 zie je tekst van les 5.3. Scrol
+             daarna naar beneden om deze les weer te zien.
+
+  2. Haal nu het bestand TEST op met het commando  :r TEST .
+     Het bestand dat je ophaalt komt onder de regel waarin de cursor staat.
+
+  3. Controleer dat er een bestand is opgehaald. Ga met de cursor omhoog.
+     Dan zie je de tekst van les 5.3 dubbel, het origineel en de versie uit
+     het bestand.
+
+  OPMERKING: Je kan ook de uitvoer van een extern commando inlezen. Om een
+             voorbeeld te geven:  :r !ls  leest de uitvoer van het commando
+             ls en zet dat onder de regel waarin de cursor staat.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 5
+
+  1. :!COMMANDO  voert een extern commando uit.
+     Enkele bruikbare voorbeelden zijn:
+        (MS-DOS)         (Unix)
+         :!dir            :!ls          - laat de inhoud van een map zien
+         :!del BESTAND    :!rm BESTAND  - wist bestand BESTAND
+
+  2. :w BESTANDSNAAM  schrijft het huidige Vim-bestand naar disk met de
+     naam BESTANDSNAAM.
+
+  3. v beweging :w BESTANDSNAAM  laat je in zichtbare modus een fragment
+     selecteren, dat wordt opgeslagen in het bestand BESTANDSNAAM.
+
+  4. :r BESTANDSNAAM  haalt het bestand BESTANDSNAAM op en voegt het onder
+     de cursor-positie in de tekst in.
+
+  5. :r !dir  leest de uitvoer van het externe commando dir en zet het onder
+     de cursor-positie.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.1: HET COMMANDO OPEN
+
+     ** Tik  o  om een regel onder de cursor te openen in invoegmodus. **
+
+  1. Ga naar de eerste regel beneden met --->.
+
+  2. Tik de kleine letter  o  en open daarmee een regel ONDER de cursor en
+     ga naar de invoegmodus.
+
+  3. Tik wat tekst in en sluit af met <ESC> om de invoegmodus te verlaten.
+
+  ---> Als je  o  tikt, komt de cursor in een nieuwe regel in invoegmodus.
+
+  4. Om een regel BOVEN de cursor te openen, moet je gewoon een hoofdletter
+     O  tikken in plaats van een kleine letter. Probeer dat vanaf de volgende
+     regel.
+
+  ---> Open een regel hierboven. Tik een O terwijl de cursor hier staat.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.2: HET COMMANDO TOEVOEGEN
+
+        ** Tik  a  om tekst toe te voegen ACHTER de cursor. **
+
+  1. Ga naar het begin van de regel beneden met --->.
+  2. Tik  e  tot de cursor op het einde van  "ste"  staat.
+
+  3. Tik een (kleine letter)  a  ('append') om toe te voegen ACHTER de cursor.
+
+  4. Vul het woord aan zoals in de volgende regel. Druk <ESC> om de
+     invoegmodus te verlaten.
+
+  5. Ga met  e  naar het einde van het volgende onvolledige woord en herhaal
+     de stappen 3 en 4.
+
+  ---> Deze regel ste je in staat om te oef in het toevo van tekst. 
+       Deze regel stelt je in staat om te oefenen in het toevoegen van tekst. 
+
+  OPMERKING: a, i en A openen allemaal dezelfde invoegmodus, het enige
+             verschil is waar tekens worden ingevoegd.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.3: VERVANGEN OP EEN ANDERE MANIER
+
+      ** Tik een hoofdletter  R  om meer dan Ã©Ã©n teken te vervangen. **
+
+  1. Ga naar de eerste regel beneden met --->. Ga met de cursor naar het
+     begin van de eerste  "xxx" .
+
+  2. Tik nu  R  en daarna het getal eronder in de tweede regel, zodat  xxx
+     wordt vervangen.
+
+  3. Druk <ESC> om de vervangmodus te verlaten. Je ziet dat de rest van de
+     regel ongewijzigd blijft.
+
+  4. Herhaal de stappen om de overgebleven  xxx  te vervangen.
+
+  ---> Optellen van 123 en xxx geeft je xxx.
+  ---> Optellen van 123 en 456 geeft je 579.
+
+  OPMERKING: Vervangmodus lijkt op invoegmodus, maar elk teken dat je tikt,
+             vervangt een bestaand teken.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.4: TEKST KOPIËREN EN PLAKKEN
+
+        ** Gebruik  y  om tekst te kopiëren en  p  om te plakken. **
+
+  1. Ga naar de regel beneden met ---> en zet de cursor achter "a)".
+
+  2. Zet zichtbare modus aan met  v  en zet de cursor juist voor "eerste".
+
+  3. Tik  y  ('yank') om de opgelichte tekst ("dit is het") te kopiëren.
+
+  4. Ga met  j$  met de cursor naar het einde van de volgende regel.
+
+  5. Plak de gekopieerde tekst met  p  en tik  a tweede <ESC>.
+
+  6. Selecteer in zichtbare modus "onderdeel", kopieer het met  y  en
+     ga met  j$  naar het einde van de tweede regel. Plak de tekst daar
+     met  p .
+
+  --->  a) dit is het eerste onderdeel
+        b)
+
+  OPMERKING: Je kan  y  ook als operator gebruiken;  yw  kopieert een woord,
+             yy  een hele regel.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.5: OPTIES GEBRUIKEN
+
+     ** Gebruik een optie voor al dan niet hoofdlettergevoelig zoeken. **
+
+  1. Zoek naar 'hoofdlettergevoelig' met  /hoofdlettergevoelig <ENTER>
+     Herhaal het zoeken enkele keren door  n  te tikken.
+  2. Schakel de optie 'ic' ('ignore case', niet-hoofdlettergevoelig) in
+     met  :set ic
+
+  3. Zoek met  n  opnieuw naar 'hoofdlettergevoelig'. Je ziet dat
+     Hoofdlettergevoelig en HOOFDLETTERGEVOELIG nu ook gevonden worden.
+
+  4. Schakel de opties 'hlsearch' (treffers oplichten) en 'incsearch' (toon
+     gedeeltelijke treffers bij intikken) in met  :set hls is
+
+  5. Tik weer /hoofdlettergevoelig <ENTER> en kijk wat er gebeurt.
+
+  6. Schakel 'hoofdlettergevoelig' weer in met  :set noic
+
+  OPMERKING: Schakel het oplichten van treffers uit met  :nohlsearch
+
+  OPMERKING: Om bij een enkel zoek-commando de hoofdlettergevoeligheid om
+             te draaien kan  \c  worden gebruikt na de zoekterm:
+             /hoofdlettergevoelig\c <ENTER>.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 6
+
+  1. Tik  o  om een regel te openen ONDER de cursor en invoegmodus te starten.
+     Tik  O  om een regel te openen BOVEN de cursor.
+
+  2. Tik  a  om tekst toe te voegen NA de cursor.
+     Tik  A  om tekst toe te voegen aan het einde van de regel.
+
+  3. Het commando  e  beweegt de cursor naar het einde van een woord.
+
+  4. De operator  y  yankt (kopieert) tekst,  p  zet het terug (plakt).
+
+  5. Met hoofdletter  R  wordt de vervangmodus geopend, met <ESC> afgesloten.
+
+  6. Met  :set xxx  wordt optie 'xxx' ingeschakeld. Opties zijn bijvoorbeeld:
+       ic   ignorecase  geen verschil hoofdletters/kleine letters bij zoeken
+       is   incsearch   toon gedeeltelijke treffers tijdens intikken zoekterm 
+       hls  hlsearch    laat alle treffers oplichten
+     Je kan zowel de lange als de korte naam van een optie gebruiken.
+  
+  7. Zet 'no' voor de naam om een optie uit te schakelen:  :set noic
+     schakelt 'ic' uit.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.1: HULP INROEPEN
+
+           ** Het gebruik van ingebouwde hulp. **
+
+  Vim heeft een uitgebreid ingebouwd hulpsysteem. Probeer, om te beginnen,
+  Ã©Ã©n van deze drie:
+    - druk de <HELP> toets (als je die hebt)
+    - druk de <F1> toets (als je die hebt)
+    - tik  :help <ENTER>
+
+  Lees de tekst in het help-venster om te leren hoe 'help' werkt.
+  Tik  CTRL-W CTRL-W  om van het ene venster naar het andere te gaan.
+  Met  :q <ENTER>  wordt het help-venster gesloten.
+
+  Je kan hulp vinden over nagenoeg elk onderwerp door een argument aan het
+  commando  :help  toe te voegen. Probeer deze (en vergeet <ENTER> niet):
+    :help w
+    :help c_CTRL-D
+    :help insert-index
+    :help user-manual
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.2: SCHRIJF EEN CONFIGURATIEBESTAND
+
+                    ** Mogelijkheden van Vim uitbreiden. **
+
+  Vim kent veel meer mogelijkheden dan Vi, maar de meeste zijn standaard
+  uitgeschakeld. Om meer functies te gebruiken moet je een 'vimrc'-bestand
+  schrijven.
+
+  1. Bewerk het bestand 'vimrc'. Hoe dat moet hangt af van je systeem:
+      :e ~/.vimrc              voor Unix
+      :e $VIM/_vimrc           voor MS-Windows
+
+  2. Lees de inhoud van het voorbeeld-bestand:
+      :r $VIMRUNTIME/vimrc_example.vim
+
+  3. Sla het bestand op met  :w
+
+  De volgende keer dat je Vim start wordt 'syntaxiskleuring' gebruiken.
+  Je kan al je voorkeursinstellingen toevoegen aan dit 'vimrc'-bestand.
+  Tik  :help vimrc-intro  voor meer informatie.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.3: AANVULLEN
+
+      ** Aanvullen van de 'command line' met CTRL-D en <TAB>. **
+
+  1. Zorg dat Vim niet in 'compatible mode' is met  :set nocp
+
+  2. Kijk welke bestanden zich in de map bevinden met  :!ls  of  :!dir
+
+  3. Tik het begin van een commando:  :e
+
+  4. Met  CTRL-D  toont Vim een lijst commando's, die met "e" beginnen.
+
+  5. Druk enkele keren <TAB>. Vim laat aanvullingen zien, zoals ":edit",
+     dat we hier gebruiken.
+
+  6. Voeg een spatie toe en de eerste letter(s) van een bestaande
+     bestandsnaam:  :edit BESTAND
+
+  7. Druk <TAB>. Vim vult de naam aan (als hij uniek is).
+
+  OPMERKING: Aanvullen werkt bij tal van commando's. Probeer gewoon CTRL-D
+             en <TAB>. Het is bijzonder nuttig bij  :help .
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 7
+
+  1. Tik  :help  of druk <F1> of <Help>  om een help-venster te openen.
+
+  2. Tik  :help CMD  voor hulp over  CMD .
+
+  3. Tik  CTRL-W CTRL-W  om naar een ander venster te gaan.
+
+  4. Tik  :q  om het help-venster te sluiten.
+
+  5. Maak een bestand met de naam 'vimrc' voor je voorkeursinstellingen.
+
+  6. Druk CTRL-D tijdens het intikken van een :-commando om mogelijke
+     aanvullingen te zien. Druk <TAB> om aanvullen te gebruiken.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  Hiermee komen de Vim-lessen tot een einde. Ze waren bedoeld om een kort
+  overzicht te geven van de Vim-editor, juist voldoende om de editor
+  redelijk makkelijk te gebruiken. Deze lessen zijn verre van volledig. Vim
+  kent veel meer commando's. Lees hierna de handleiding voor gebruikers:
+  ":help user-manual".
+
+  Voor verdere studie wordt aanbevolen:
+      Vim - Vi Improved - door Steve Oualline
+      Uitgever: New Riders
+  Dit is het eerste boek dat geheel aan Vim is gewijd. Speciaal geschikt
+  voor beginners. Met veel voorbeelden en afbeeldingen.
+  Zie http://iccf-holland.org/click5.html
+
+  Het volgende boek is ouder en gaat meer over Vi dan Vim, maar het wordt
+  toch aanbevolen:
+      Learning the Vi Editor - door Linda Lamb
+      Uitgever: O'Reilly & Associates Inc.
+  Het is een goed boek om nagenoeg alles te weten te komen dat je met Vi
+  zou willen doen. De zesde en vooral de nieuwe zevende druk (onder de
+  titel Learning the Vi and Vim Editors door Arnold Robbins, Elbert Hannah
+  & Linda Lamb) bevat ook informatie over Vim.
+
+  Deze lessen zijn geschreven door Michael C. Pierce en Robert K. Ware,
+  Colorado School of Mines met gebruikmaking van ideeën van Charles Smith
+  van de Colorado State University. E-mail: bware@mines.colorado.edu.
+
+  Aangepast voor Vim door Bram Moolenaar.
+
+  Nederlandse vertaling door Rob Bishoff, april 2012
+  e-mail: rob.bishoff@hccnet.nl)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
index 17178df..2f1d14c 100644 (file)
@@ -658,7 +658,7 @@ Merk: Hvis du n
   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
      at du ser :'<,'>w TEST  før du trykker Enter.
 
-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
+  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
      for Ã¥ se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
 
 MERK: Ved Ã¥ trykke  v  startes visuelt valg. Du kan flytte markøren rundt for
index a7826b7..f9d49c2 100644 (file)
@@ -658,7 +658,7 @@ Merk: Hvis du nÃ¥ hadde avsluttet Vim og startet pÃ¥ nytt igjen med Â«vim TEST»
   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
      at du ser :'<,'>w TEST  før du trykker Enter.
 
-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
+  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
      for Ã¥ se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
 
 MERK: Ved Ã¥ trykke  v  startes visuelt valg. Du kan flytte markøren rundt for
index 2291aad..bae1398 100644 (file)
@@ -671,7 +671,7 @@ Pozn
   4. Napí¹ w TEST  , kde TEST je meno súboru, ktorý zatial neexistuje.
      Skontroluj, e vidí¹  :'<,'>w TEST  predtým ne¾ stlaèí¹ Enter.
 
-  5. Vim zapí¹e oznaèené riadky do súboru TEST. Pou¾i :!dir  alebo  !ls
+  5. Vim zapí¹e oznaèené riadky do súboru TEST. Pou¾i :!dir  alebo  :!ls
      pre overenie. Zatial ho e¹te nema¾! Pou¾ijeme ho v Ã¯al¹ej lekcii.
 
 POZNÃMKA: Stlaèením klávesy  v  sa spustí vizuálne oznaèovanie.
index f32c9b1..c4e7b3d 100644 (file)
@@ -671,7 +671,7 @@ Pozn
   4. Napí\9a w TEST  , kde TEST je meno súboru, ktorý zatial neexistuje.
      Skontroluj, e vidí\9a  :'<,'>w TEST  predtým ne\9e stlaèí\9a Enter.
 
-  5. Vim zapí\9ae oznaèené riadky do súboru TEST. Pou\9ei :!dir  alebo  !ls
+  5. Vim zapí\9ae oznaèené riadky do súboru TEST. Pou\9ei :!dir  alebo  :!ls
      pre overenie. Zatial ho e\9ate nema\9e! Pou\9eijeme ho v Ã¯al\9aej lekcii.
 
 POZNÃMKA: Stlaèením klávesy  v  sa spustí vizuálne oznaèovanie.
index c4e0c4f..51c5b4f 100644 (file)
@@ -671,7 +671,7 @@ Poznámka: Å¾e ak ukonÄíš prácu s editorom Vim a znovu ho spustíš príkazo
   4. Napíš w TEST  , kde TEST je meno súboru, ktorý zatial neexistuje.
      Skontroluj, e vidíš  :'<,'>w TEST  predtým než stlaÄíš Enter.
 
-  5. Vim zapíše oznaÄené riadky do súboru TEST. Použi :!dir  alebo  !ls
+  5. Vim zapíše oznaÄené riadky do súboru TEST. Použi :!dir  alebo  :!ls
      pre overenie. Zatial ho eÅ¡te nemaž! Použijeme ho v ÄalÅ¡ej lekcii.
 
 POZNÃMKA: StlaÄením klávesy  v  sa spustí vizuálne oznaÄovanie.
index daf42b6..da28a15 100644 (file)
@@ -658,7 +658,7 @@ NOTE: If you were to exit Vim and start it again with  vim TEST , the file
   4. Type  w TEST  , where TEST is a filename that does not exist yet.  Verify
      that you see  :'<,'>w TEST  before you press <ENTER>.
 
-  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  !ls
+  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  :!ls
      to see it.  Do not remove it yet!  We will use it in the next lesson.
 
 NOTE:  Pressing  v  starts Visual selection.  You can move the cursor around
index 11584d5..a48ff6a 100644 (file)
@@ -1,7 +1,7 @@
 " Vim tutor support file
 " Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
 " Maintainer: Bram Moolenaar
-" Last Change: 2008 Jul 21
+" Last Change: 2012 Sep 21
 
 " This Vim script is used for detecting if a translation of the
 " tutor file exist, i.e., a tutor.xx file, where xx is the language.
@@ -72,14 +72,20 @@ if s:ext =~? '\.ko'
   endif
 endif
 
-" The Chinese tutor is available in two encodings, guess which one to use
+" The Chinese tutor is available in three encodings, guess which one to use
 " This segment is from the above lines and modified by
 " Mendel L Chan <beos@turbolinux.com.cn> for Chinese vim tutorial
+" When 'encoding' is utf-8, choose between China (simplified) and Taiwan
+" (traditional) based on the language, suggested by Alick Zhao.
 if s:ext =~? '\.zh'
   if &enc =~ 'big5\|cp950'
     let s:ext = ".zh.big5"
   elseif &enc != 'utf-8'
     let s:ext = ".zh.euc"
+  elseif s:ext =~? 'zh_tw' || (exists("s:lang") && s:lang =~? 'zh_tw')
+    let s:ext = ".zh_tw"
+  else
+    let s:ext = ".zh_cn"
   endif
 endif
 
index 7f80f69..df59c32 100644 (file)
@@ -1,30 +1,32 @@
 ===============================================================================
-=      Â»Â¶     Ã“­     Ã”Ä     Â¶Ã   Â¡Â¶ V I M  Â½ÃŒ  Â³ÃŒ Â¡Â·   Â¡ÂªÂ¡Âª     Â°Ã¦Â±Â¾ 1.5      =
+=      Â»Â¶     Ã“­     Ã”Ä     Â¶Ã   Â¡Â¶ V I M  Â½ÃŒ  Â³ÃŒ Â¡Â·   Â¡ÂªÂ¡Âª      Â°Ã¦Â±Â¾ 1.7       =
 ===============================================================================
-     vim ÃŠÃ‡Ã’»¸ö¾ßÓúܶàÃüÃîµÄ¹¦Äܷdz£Ç¿´óµÄ±à¼­Æ÷¡£ÃÞÓÚƪ·ù£¬ÔÚ±¾½Ì³Ìµ±ÖÃ
+
+     Vim ÃŠÃ‡Ã’»¸ö¾ßÓúܶàÃüÃîµÄ¹¦Äܷdz£Ç¿´óµÄ±à¼­Æ÷¡£ÃÞÓÚƪ·ù£¬ÔÚ±¾½Ì³Ìµ±ÖÃ
      Â¾Ã²»Ãêø½éÉÜÃË¡£±¾½Ì³ÌµÄÉè¼ÆÄ¿±êÊǽ²Êöһé±ØÒªµÄ»ù±¾ÃüÃ¶øÕÆÎÕºÃÕâ
-     Ã©ÃüÃÄú¾ÃÄܹ»ºÜÈÃÒ×½«vimµ±×÷Ò»¸öèÓõÄÃòÄܱ༭Æ÷À´Ê¹ÓÃÃË¡£
+     Ã©ÃüÃÄú¾ÃÄܹ»ºÜÈÃÒ׵ؽ« Vim ÂµÂ±Ã—÷Ò»¸öèÓñ༭Æ÷À´Ê¹ÓÃÃË¡£
 
      Ãê³É±¾½Ì³ÌµÄÄÚÈôóÔ¼ÃèÒª25-30·ÖÖÓ£¬È¡¾öÓÚÄúѵ÷µÄʱ¼ä¡£
 
+     Ã—¢Ò⣺
      ÃƒÂ¿Ã’»½ÚµÄÃüÃî²Ù×÷½«»á¸ü¸Ä±¾ÎÄ¡£ÃƼöÄú¸´ÖƱ¾ÎĵÄÒ»¸ö¸±±¾£¬È»ºóÔÚ¸±±¾ÉÃ
      Â½Ã¸ÃÃѵ÷(Èç¹ûÄúÊÇè¹ý"vimtutor"À´Æô¶¯½Ì³ÌµÄ£¬ÄÇô±¾ÎľÃÒѾ­ÊǸ±±¾ÃË)¡£
 
-     Ã‡Ã¼ÇÒ»µã¡Ã±¾½Ì³ÌµÄÉè¼Æ˼·ÊÇÔÚʹÓÃÖýøÃÃѧðµÄ¡£Ò²¾ÃÊÇ˵£¬ÄúÃèҪè¹ý
+     Ã‡Ã¼ÇÒ»µã£º±¾½Ì³ÌµÄÉè¼Æ˼·ÊÇÔÚʹÓÃÖýøÃÃѧðµÄ¡£Ò²¾ÃÊÇ˵£¬ÄúÃèҪè¹ý
      Ã–´ÃÃÃüÃîÀ´Ñ§Ã°ËüÃDZ¾ÉíµÄÕýÈ·Ó÷¨¡£Èç¹ûÄúÖ»ÊÇÔĶöø²»²Ù×÷£¬ÄÇôÄú¿ÉÄÜ
      Â»Ã¡ÂºÃœÂ¿Ã¬Ã’Ã…ÃüÕâéÃüÃîµÄ£¡
 
      ÂºÃƒÃË£¬ÃÖÔÚÇëÈ·¶¨ÄúµÄShift-Lock(´óáôËø¶¨¼ü)»¹Ã»Óð´Ã£¬È»ºó°´¼üÅÌÉÃ
-     ÂµÃ„×Öĸ¼ü j Ã—ã¹»¶àµÄ´ÎÊýÀ´Òƶ¯¹â±ê£¬Ö±µ½µÚÒ»½ÚµÄÄÚÈÃÄܹ»ÃêÈ«³äÂúÆÃÄ»¡£
+     ÂµÃ„×Öĸ¼ü j Ã—ã¹»¶à´ÎÀ´Òƶ¯¹â±ê£¬Ö±µ½µÚÒ»½ÚµÄÄÚÈÃÄܹ»ÃêÈ«³äÂúÆÃÄ»¡£
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       ÂµÃšÃ’»½²µÚÒ»½Ú¡ÃÒƶ¯¹â±ê
+                       ÂµÃšÃ’»½²µÚÒ»½Ú£ºÒƶ¯¹â±ê
 
 
-   Â¡Ã¹Â¡Ã¹ Ã’ªÒƶ¯¹â±ê£¬ÇëÒÀÕÕ˵Ã÷·Ö±ð°´Ã h¡¢j¡¢k¡¢l Â¼Ã¼Â¡Â£ Â¡Ã¹Â¡Ã¹
+            ** Ã’ªÒƶ¯¹â±ê£¬ÇëÒÀÕÕ˵Ã÷·Ö±ð°´Ã h¡¢j¡¢k¡¢l Â¼Ã¼Â¡Â£ **
 
             ^
-            k              ÃŒÃ¡ÃŠÂ¾Â¡Ãƒ h ÂµÃ„¼üλÓÚ×ó±ß£¬Ã¿´Î°´Ã¾ÃȇÃò×óÒƶ¯¡£
+            k              ÃŒÃ¡ÃŠÂ¾Â£Âº h ÂµÃ„¼üλÓÚ×ó±ß£¬Ã¿´Î°´Ã¾ÃȇÃò×óÒƶ¯¡£
        < h      l >               l ÂµÃ„¼üλÓÚÓұߣ¬Ã¿´Î°´Ã¾ÃȇÃòÓÒÒƶ¯¡£
             j                     j Â¼Ã¼Â¿Â´Ã†Ã°Ã€Â´ÂºÃœÃóÒ»Ö§¼â¶Ë·½Ãò³¯Ãµļý÷¡£
             v
 
 ---> ÃÖÔÚÄúÓ¦¸ÃÒѾ­Ñ§»áÈçºÎÒƶ¯µ½ÃÂÒ»½²°É¡£
 
-  3. ÃÖÔÚÇëʹÓÃÃÂÃüü£¬½«¹â±êÒƶ¯µ½µÚ¶þ½²¡£
+  3. ÃÖÔÚÇëʹÓÃÃÂÃüü£¬½«¹â±êÒƶ¯µ½µÚÒ»½²µÚ¶þ½Ú¡£
 
-Ìáʾ¡ÃÈç¹ûÄú²»¸ÒÈ·¶¨ÄúËù°´ÃµÄ×Öĸ£¬Çë°´ÃÂ<ESC>¼ü»Øµ½Õý³£(Normal)ģʽ¡£
+Ìáʾ£ºÈç¹ûÄú²»¸ÒÈ·¶¨ÄúËù°´ÃµÄ×Öĸ£¬Çë°´ÃÂ<ESC>¼ü»Øµ½Õý³£(Normal)ģʽ¡£
       ÃˆÂ»ÂºÃ³Ã”ٴδӼüÅÌÊäÈëÄúÃëÒªµÄÃüÃî¡£
 
-Ìáʾ¡Ã¹â±ê¼üÓ¦µ±Ò²ÄÜÕý³£¹¤×÷µÄ¡£µ«ÊÇʹÓÃhjkl¼ü£¬ÔÚð¹ßÖ®ºóÄú¾ÃÄܹ»¿ìËÙ
-      ÂµÃ˜Ã”ÚÆÃÄ»ÄÚËÄ´¦Òƶ¯¹â±êÃË¡£
+Ìáʾ£º¹â±ê¼üÓ¦µ±Ò²ÄÜÕý³£¹¤×÷µÄ¡£µ«ÊÇʹÓÃhjkl¼ü£¬ÔÚð¹ßÖ®ºóÄú¾ÃÄܹ»¸ü¿ì
+      ÂµÃ˜Ã”ÚÆÃÄ»ÄÚËÄ´¦Òƶ¯¹â±ê¡£ÕæµÄÊÇÕâÑù£¡
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       ÂµÃšÃ’»½²µÚ¶þ½Ú¡ÃVIMµÄ½øÈëºÃÃ˳ö
-
+                       ÂµÃšÃ’»½²µÚ¶þ½Ú£ºVIMµÄ½øÈëºÃÃ˳ö
 
-  !! ÃŒÃ˜Â±Ã°ÃŒÃ¡ÃŠÂ¾Â¡ÃƒÂ¾Â´Ã‡Ã«Ã”ĶÃÃêÕû±¾Ò»½ÚµÄÄÚÈã¬È»ºó²ÅÄÜÖ´ÃÃÒÔÃÂËù½²½âµÄÃüÃî¡£
 
-  1. Ã‡Ã«Â°Â´<ESC>¼ü(ÕâÊÇΪÃËÈ·±£Äú´¦ÔÚÕý³£Ä£Ê½)¡£
+  !! ÃŒÃ˜Â±Ã°ÃŒÃ¡ÃŠÂ¾Â£ÂºÂ¾Â´Ã‡Ã«Ã”Ķñ¾Ò»½ÚµÄÃêÕûÄÚÈã¬È»ºóÔÙÖ´ÃÃÒÔÃÂËù½²½âµÄÃüÃî¡£
 
-  2. ÃˆÂ»ÂºÃ³ÃŠÃ¤ÃˆÃ«Â¡Ãƒ                        :q! <»Ø³µ>
+  1. Â°Â´<ESC>¼ü(ÕâÊÇΪÃËÈ·±£Äú´¦ÔÚÕý³£Ä£Ê½)¡£
 
----> Ã•Ã¢Ã–Ö·½Ê½µÄÃ˳ö±à¼­Æ÷¾ø²»»á±£´æÄú½øÈë±à¼­Æ÷ÒÔÀ´Ëù×öµÄ¸Ä¶¯¡£
-     ÃˆÃ§Â¹Ã»Ã„úÃë±£´æ¸ü¸ÄÔÙÃ˳ö£¬ÇëÊäÈë¡Ã
-                               :wq  <»Ø³µ>
+  2. ÃˆÂ»ÂºÃ³ÃŠÃ¤ÃˆÃ«Â£Âº                        :q! <»Ø³µ>
+     Ã•Ã¢Ã–Ö·½Ê½µÄÃ˳ö±à¼­Æ÷»á¶ªÆúÄú½øÈë±à¼­Æ÷ÒÔÀ´Ëù×öµÄ¸Ä¶¯¡£
 
-  3. ÃˆÃ§Â¹Ã»Ã„ú¿´µ½ÃËÃüÃîÃÃÌáʾ·û£¬ÇëÊäÈëÄܹ»´øÄú»Øµ½±¾½Ì³ÌµÄÃüÃÄǾÃÊÇ¡Ã
+  3. ÃˆÃ§Â¹Ã»Ã„ú¿´µ½ÃËÃüÃîÃÃÌáʾ·û£¬ÇëÊäÈëÄܹ»´øÄú»Øµ½±¾½Ì³ÌµÄÃüÃÄǾÃÊÇ£º
+     vimtutor <»Ø³µ>
 
-               vimtutor <»Ø³µ>
+  4. ÃˆÃ§Â¹Ã»Ã„ú×ÔÃÅÒѾ­ÀÎÀμÇסÃËÕâé²½ÖèµÄ»°£¬Çë´Ó²½Öè1Ö´Ãõ½²½Öè3Ã˳ö£¬È»
+     ÂºÃ³Ã”ٴνøÈë±à¼­Æ÷¡£
 
-     Ã¨³£Çé¿öÃÂÄúÒ²¿ÉÒÔÓÃÕâÖÖ·½Ê½¡Ã
+Ìáʾ£º :q! <»Ø³µ> Â»Ã¡Â¶ÂªÃ†ÃºÃ„úËù×öµÄÈκθĶ¯¡£¼¸½²Ö®ºóÄú½«Ñ§»áÈçºÎ±£´æ¸Ä¶¯µ½Îļþ¡£
 
-               vim tutor <»Ø³µ>
+  5. Â½Â«Â¹Ã¢Â±ÃªÃÂÒƵ½µÚÒ»½²µÚÈý½Ú¡£
 
----> Ã•Ã¢Ã€Ã¯ÂµÃ„ 'vim' Â±Ã­ÃŠÂ¾Â½Ã¸ÃˆÃ«vim±à¼­Æ÷£¬¶ø 'tutor'ÔòÊÇÄú×¼±¸Òª±à¼­µÄÎļþ¡£
-
-  4. ÃˆÃ§Â¹Ã»Ã„ú×ÔÃÅÒѾ­ÀÎÀμÇסÃËÕâé²½ÖèµÄ»°£¬Çë´Ó²½Öè1Ö´Ãõ½²½Öè3Ã˳ö£¬È»
-     ÂºÃ³Ã”ٴνøÈë±à¼­Æ÷¡£½Ó׎«¹â±êÒƶ¯µ½µÚÒ»½²µÚÈý½ÚÀ´¼ÌÃøÎÒÃǵĽ̳̽²½â¡£
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       ÂµÃšÃ’»½²µÚÈý½Ú¡ÃÎı¾±à¼­Ö®É¾³ý
+                       ÂµÃšÃ’»½²µÚÈý½Ú£ºÎı¾±à¼­Ö®É¾³ý
 
 
    ** Ã”ÚÕý³£(Normal)ģʽ㬿ÉÒÔ°´Ã x Â¼Ã¼Ã€Â´Ã‰Â¾Â³Ã½Â¹Ã¢Â±ÃªÃ‹Ã¹Ã”ÚλÖõÄ×Ö·û¡£**
 
 ---> The ccow jumpedd ovverr thhe mooon.
 
-  5. ÂºÃƒÃË£¬¸ÃÃÃÒѾ­ÃÞÕýÃË£¬ÃÂÒ»½ÚÄÚÈÃÊǵÚÒ»½²µÚËĽڡ£
+  5. ÂºÃƒÃË£¬¸ÃÃÃÒѾ­ÃÞÕýÃË£¬ÃÂÃæÊǵÚÒ»½²µÚËĽڡ£
 
-ÌرðÌáʾ¡ÃÔÚÄúä¯ÀÀ±¾½Ì³Ìʱ£¬²»ÒªÇ¿ÃüÇÒä¡£¼Çסһµã¡ÃÔÚʹÓÃÖÃѧð¡£
+ÌرðÌáʾ£ºÔÚä¯ÀÀ±¾½Ì³Ìʱ£¬²»ÒªÇ¿ÃüÇÒä¡£¼Çסһµã£ºÔÚʹÓÃÖÃѧð¡£
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                    ÂµÃšÃ’»½²µÚËĽڡÃÎı¾±à¼­Ö®²åÈë
+                    ÂµÃšÃ’»½²µÚËĽڣºÎı¾±à¼­Ö®²åÈë
 
 
         ** Ã”ÚÕý³£Ä£Ê½Ã£¬¿ÉÒÔ°´Ã i Â¼Ã¼Ã€Â´Â²Ã¥ÃˆÃ«ÃŽÃ„±¾¡£**
 
   1. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„µÚÒ»Ãá£
 
-  2. ÃŽÂªÃËʹµÃµÚÒ»ÃÃÄÚÈÃÀ×ìÓÚµÚ¶þÃã¬Ç뽫¹â±êÒÆÖÃÎı¾µÚÒ»¸ö×Ö·û×¼±¸²åÈë
+  2. ÃŽÂªÃËʹµÃµÚÒ»ÃÃÄÚÈÃÀ×ìÓÚµÚ¶þÃã¬Ç뽫¹â±êÒÆÖÃÎı¾µÚÒ»¸ö×¼±¸²åÈë×Ö·û
      ÂµÃ„λÖá£
 
   3. ÃˆÂ»ÂºÃ³Â°Â´Ã i Â¼Ã¼Â£Â¬Â½Ã“×ÅÊäÈë±ØÒªµÄÎı¾×Ö·û¡£
 
-  4. Ã‹Ã¹Ã“ÃÎı¾¶¼ÃÞÕýÃê±Ã£¬Ç밴à<ESC> Â¼Ã¼Â·ÂµÂ»Ã˜Ã•Ã½Â³Â£Ã„£Ê½¡£
+  4. ÃƒÂ¿Â¸Ã¶Â´Ã­ÃŽÃ³ÃÞÕýÃê±Ãºó£¬Ç밴à<ESC> Â¼Ã¼Â·ÂµÂ»Ã˜Ã•Ã½Â³Â£Ã„£Ê½¡£
      Ã–ظ´²½Öè2Öò½Öè4ÒÔ±ãÃÞÕý¾ä×Ó¡£
 
 ---> There is text misng this .
 ---> There is some text missing from this line.
 
-  5. ÃˆÃ§Â¹Ã»Ã„ú¶ÔÎı¾²åÈë²Ù×÷ÒѾ­ºÜÂúÒ⣬Çë½Ó×ÅÔĶÃÃÂÃæµÄá½á¡£
+  5. ÃˆÃ§Â¹Ã»Ã„ú¶ÔÎı¾²åÈë²Ù×÷ÒѾ­ºÜÂúÒ⣬Çë½Ó×ÅÔĶÃÃÂÃæµÄµÚÒ»½²µÚÎå½Ú¡£
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                              ÂµÃšÃ’»½²Ã¡½á
+                    ÂµÃšÃ’»½²µÚÎå½Ú£ºÎı¾±à¼­Ö®Ìí¼Ó
 
 
-  1. Â¹Ã¢Â±ÃªÃ”ÚÆÃÄ»Îı¾ÖõÄÒƶ¯¼È¿ÉÒÔÓüý÷¼ü£¬Ò²¿ÉÒÔʹÓàhjkl Ã—Öĸ¼ü¡£
-        h (×óÒÆ)       j (ÃÂÃÃ)       k (ÉÃÃÃ)     l (ÓÒÒÆ)
+                       ** Â°Â´ A Â¼Ã¼Ã’ÔÌí¼ÓÎı¾¡£ **
+
+  1. Ã’ƶ¯¹â±êµ½ÃÂÃæµÚÒ»¸ö±ê¼ÇÓà---> ÂµÃ„Ò»Ãá£
+     Â¹Ã¢Â±ÃªÂ·Ã…ÔÚÄÇÒ»ÃõÄÄĸö×Ö·ûÉò¢²»ÖØÒª¡£
+
+  2. Â°Â´ A Â¼Ã¼ÃŠÃ¤ÃˆÃ«Â±Ã˜Ã’ªµÄÌí¼ÓÄÚÈá£
+
+  3. ÃŽÃ„±¾Ìí¼ÓÃê±Ãºó£¬°´ <ESC> Â¼Ã¼Â»Ã˜ÂµÂ½Ã•Ã½Â³Â£Ã„£Ê½¡£
+
+  4. Ã’ƶ¯¹â±êµ½ÃÂÃæµÚ¶þ¸ö±ê¼ÇÓà---> ÂµÃ„Ò»Ãá£Öظ´²½Öè2ºÃ²½Öè3ÒÔ¸ÄÕýÕâ¸ö¾ä×Ó¡£
+
+---> There is some text missing from th
+     There is some text missing from this line.
+---> There is also some text miss
+     There is also some text missing here.
+
+  5. ÂµÂ±Ã„ú¶ÔÌí¼ÓÎı¾²Ù×÷¸Ãµ½ÂúÒâʱ£¬Çë¼ÌÃøѧðµÚÒ»½²µÚÃù½Ú¡£
 
-  2. Ã“û½øÈëvim±à¼­Æ÷(´ÓÃüÃîÃÃÌáʾ·û)£¬ÇëÊäÈë¡Ãvim ÃŽÃ„¼þÃû <»Ø³µ>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ÂµÃšÃ’»½²µÚÃù½Ú£º±à¼­Îļþ
+
+                   ** ÃŠÂ¹Ã“à:wq Ã’Ô±£´æÎļþ²¢Ã˳ö¡£ **
+
+  ÃŒÃ˜Â±Ã°ÃŒÃ¡ÃŠÂ¾Â£ÂºÃ”ÚÖ´ÃÃÒÔò½Öè֮ǰ£¬ÇëÃȶÃÃêÕû¸öá½Ú£¡
+
+  1. ÃˆÃ§Ã„úÔÚµÚÒ»½²µÚ¶þ½ÚÖÃËù×öµÄÄÇÑùÃ˳ö±¾½Ì³Ì£º :q!
+     Â»Ã²Ã•ÃŸÂ£Â¬ÃˆÃ§Â¹Ã»Ã„ú¿ÉÒÔ·ÃÎÊÃíÒ»¸öÖնˣ¬ÇëÔÚÄÇÀïÖ´ÃÃÒÔòÙ×÷¡£
+
+  2. Ã”Ú shell ÂµÃ„Ìáʾ·ûÃÂÊäÈëÃüÃ vim tutor <»Ø³µ>
+     'vim'ÊÇÆô¶¯ Vim Â±Ã Â¼Â­Ã†Ã·ÂµÃ„ÃüÃ'tutor'ÊÇÄúãÃû±à¼­µÄÎļþµÄÃû×Ö¡£
+     Ã‡Ã«ÃŠÂ¹Ã“ÃÒ»¸ö¿ÉÒԸĶ¯µÄÎļþ¡£
+
+  3. ÃŠÂ¹Ã“ÃÄúÔÚÇ°ÃæµÄ½Ì³ÌÖÃѧµ½µÄÃüÃî²åÈëɾ³ýÎı¾¡£
+
+  4. Â±Â£Â´Ã¦Â¸Ã„¶¯¹ýµÄÎļþ²¢Ã˳ö Vim£¬°´Õâé¼ü£º :wq  <»Ø³µ>
 
-  3. Ã“ûÃ˳övim±à¼­Æ÷£¬ÇëÊäÈëÒÔÃÂÃüÃî·ÅÆúËùÓÃÃ޸ġÃ
+  5. ÃˆÃ§Â¹Ã»Ã„úÔÚ²½Öè1ÖÃÒѾ­Ã˳ö vimtutor£¬ÇëÖØÆô vimtutor Ã’ƶ¯µ½ÃÂÃæµÄá½áÒ»½Ú¡£
 
-       <ESC>   :q!      <»Ø³µ>
+  6. Ã”ĶÃÃêÒÔÉò½Ö裬Ū¶®ËüÃǵÄÒâÒ壬ȻºóÔÚʵ¼ùÖýøÃÃ÷ð¡£
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ÂµÃšÃ’»½²Ã¡½á
+
+
+  1. Â¹Ã¢Â±ÃªÃ”ÚÆÃÄ»Îı¾ÖõÄÒƶ¯¼È¿ÉÒÔÓüý÷¼ü£¬Ò²¿ÉÒÔʹÓàhjkl Ã—Öĸ¼ü¡£
+        h (×óÒÆ)       j (ÃÂÃÃ)       k (ÉÃÃÃ)     l (ÓÒÒÆ)
 
-     Â»Ã²Ã•ÃŸÃŠÃ¤ÃˆÃ«Ã’ÔÃÂÃüÃî±£´æËùÓÃÃ޸ġÃ
+  2. Ã“û½øÈë Vim Â±Ã Â¼Â­Ã†Ã·(´ÓÃüÃîÃÃÌáʾ·û)£¬ÇëÊäÈ룺vim ÃŽÃ„¼þÃû <»Ø³µ>
 
-       <ESC>   :wq      <»Ø³µ>
+  3. Ã“ûÃ˳ö Vim Â±Ã Â¼Â­Ã†Ã·Â£Â¬Ã‡Ã«ÃŠÃ¤ÃˆÃ« <ESC>   :q!   <»Ø³µ> Â·Ã…ÆúËùÓøĶ¯¡£
+                      Â»Ã²Ã•ÃŸÃŠÃ¤ÃˆÃ« <ESC>   :wq   <»Ø³µ> Â±Â£Â´Ã¦Â¸Ã„¶¯¡£
 
-  4. Ã”ÚÕý³£Ä£Ê½ÃÂɾ³ý¹â±êËùÔÚλÖõÄ×Ö·û£¬Çë°´¡Ã x
+  4. Ã”ÚÕý³£Ä£Ê½ÃÂɾ³ý¹â±êËùÔÚλÖõÄ×Ö·û£¬Çë°´£º x
 
-  5. Ã”ÚÕý³£Ä£Ê½ÃÂÒªÔÚ¹â±êËùÔÚλÖÿªÊ¼²åÈëÎı¾£¬Çë°´¡Ã
+  5. Ã“û²åÈë»òÌí¼ÓÎı¾£¬ÇëÊäÈ룺
 
-        i     ÃŠÃ¤ÃˆÃ«Â±Ã˜Ã’ªÎı¾     <ESC>
+        i   ÃŠÃ¤ÃˆÃ«Ã“û²åÈëÎı¾   <ESC>             Ã”Ú¹â±êÇ°²åÈëÎı¾
+        A   ÃŠÃ¤ÃˆÃ«Ã“ûÌí¼ÓÎı¾   <ESC>             Ã”ÚÒ»ÃúóÌí¼ÓÎı¾
 
-ÌرðÌáʾ¡Ã°´Ã <ESC> Â¼Ã¼Â»Ã¡Â´Ã¸Ã„ú»Øµ½Õý³£Ä£Ê½»òÕßÈ¡ÃûÒ»¸ö²»ÆÚÃû»òÕß²¿·ÖÃê³É
+ÌرðÌáʾ£º°´Ã <ESC> Â¼Ã¼Â»Ã¡Â´Ã¸Ã„ú»Øµ½Õý³£Ä£Ê½»òÕß³·ÃûÒ»¸ö²»ÃëÊäÈë»ò²¿·ÖÃêÕû
 ÂµÃ„ÃüÃî¡£
 
 ÂºÃƒÃË£¬µÚÒ»½²µ½´Ë½áÊø¡£ÃÂÃæ½ÓÃÂÀ´¼ÌÃøµÚ¶þ½²µÄÄÚÈá£
 
 
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÃ’»½Ú¡Ãɾ³ýÀàÃüÃî
+                       ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÃ’»½Ú£ºÉ¾³ýÀàÃüÃî
 
 
-           ** ÃŠÃ¤ÃˆÃ« dw Â¿Ã‰Ã’Ô´Ó¹â±ê´¦É¾³ýÖÃÒ»¸öµ¥×Ö/µ¥´ÊµÄĩβ¡£**
+           ** ÃŠÃ¤ÃˆÃ« dw Â¿Ã‰Ã’Ô´Ó¹â±ê´¦É¾³ýÖÃÒ»¸öµ¥´ÊµÄĩβ¡£**
 
   1. Ã‡Ã«Â°Â´Ã <ESC> Â¼Ã¼ÃˆÂ·Â±Â£Ã„ú´¦ÓÚÕý³£Ä£Ê½¡£
 
   2. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„ÄÇÒ»Ãá£
 
-  3. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ÆÖÃ×¼±¸ÒªÉ¾³ýµÄµ¥´ÊµÄ¿ªÊ¼¡£
+  3. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ÆÖÃ×¼±¸ÒªÉ¾³ýµÄµ¥´ÊµÄÆðʼ´¦¡£
 
   4. Â½Ã“×ÅÊäÈë dw Ã‰Â¾Â³Ã½ÂµÃ´Â¸ÃƒÂµÂ¥Â´ÃŠÂ¡Â£
 
-  ÃŒÃ˜Â±Ã°ÃŒÃ¡ÃŠÂ¾Â¡ÃƒÃ„úËùÊäÈëµÄ dw Â»Ã¡Ã”ÚÄúÊäÈëµÄìʱ³öÃÖÔÚÆÃÄ»µÄ×îºóÒ»Ãá£Èç¹ûÄúÊä
-  ÃˆÃ«Ã“ÃÎó£¬Ç밴à<ESC> Â¼Ã¼ÃˆÂ¡Ãû£¬È»ºóÖØÃÂÔÙÀ´¡£
+  ÃŒÃ˜Â±Ã°ÃŒÃ¡ÃŠÂ¾Â£ÂºÂµÂ±Ã„úÊäÈëʱ£¬×Öĸ d Â»Ã¡Ã¬Ê±³öÃÖÔÚÆÃÄ»µÄ×îºóÒ»Ãá£Vim Ã”ڵȴýÄúÊäÈë
+  Ã—Öĸ w¡£Èç¹ûÄú¿´µ½µÄÊdzý d ÃâµÄÆäËû×Ö·û£¬ÄDZíÃ÷Äú°´´íÃË£»Ç밴à<ESC> Â¼Ã¼Â£Â¬
+  ÃˆÂ»ÂºÃ³Ã–ØÃÂÔÙÀ´¡£
 
 ---> There are a some words fun that don't belong paper in this sentence.
 
-  5. Ã–ظ´²½Öè3Öò½Öè4£¬Ö±Öþä×ÓÃÞÕýÃê±Ã¡£½Ó׿ÌÃøµÚ¶þ½²µÚ¶þ½ÚÄÚÈá£
-
+  5. Ã–ظ´²½Öè3ºÃ²½Öè4£¬Ö±Öþä×ÓÃÞÕýÃê±Ã¡£½Ó׿ÌÃøµÚ¶þ½²µÚ¶þ½ÚÄÚÈá£
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                     ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÂ¶Ã¾Â½ÃšÂ¡ÃƒÃ†Ã¤Ã‹Ã»Ã‰Â¾Â³Ã½Ã€Ã ÃƒÃ¼Ãî
+                     ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÂ¶Ã¾Â½ÃšÂ£ÂºÂ¸Ã¼Â¶Ã Ã‰Â¾Â³Ã½Ã€Ã ÃƒÃ¼Ãî
 
 
                   ** ÃŠÃ¤ÃˆÃ« d$ Â´Ã“µ±Ç°¹â±êɾ³ýµ½ÃÃÄ©¡£**
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                    ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÃˆÃ½Â½ÃšÂ¡ÃƒÂ¹Ã˜Ã“ÚÃüÃîºÃ¶ÔÃó
+                    ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÃˆÃ½Â½ÃšÂ£ÂºÂ¹Ã˜Ã“ÚÃüÃîºÃ¶ÔÃó
 
 
-  Ã‰Â¾Â³Ã½ÃƒÃ¼Ãî d ÂµÃ„¸ñʽÈçáÃ
+  Ãí¶à¸Ä±äÎı¾µÄÃüÃÓÉÒ»¸ö²Ù×÷·ûºÃÒ»¸ö¶¯×÷¹¹³É¡£
+  ÃŠÂ¹Ã“Ãɾ³ý²Ù×÷·û d ÂµÃ„ɾ³ýÃüÃîµÄ¸ñʽÈçÃ壼
 
-        [number]   d   object      Â»Ã²Ã•ÃŸ     d   [number]   object
+       d   motion
 
-  Ã†Ã¤Ã’âÈçáÃ
-    number - Â´ÃºÂ±Ã­Ã–´ÃÃÃüÃîµÄ´ÎÊý(¿ÉÑ¡ÃȱʡÉèÖÃΪ 1 )¡£
-    d - Â´ÃºÂ±Ã­Ã‰Â¾Â³Ã½Â¡Â£
-    object - Â´ÃºÂ±Ã­ÃƒÃ¼ÃîËùÒª²Ù×÷µÄ¶ÔÃó(ÃÂÃæÓÃÃà¹Ø½éÉÜ)¡£
+  Ã†Ã¤Ã–ãº
+    d      - Ã‰Â¾Â³Ã½Â²Ã™Ã—÷·û¡£
+    motion - Â²Ã™Ã—÷·ûµÄ²Ù×÷¶ÔÃó(ÔÚÃÂÃæÃóö)¡£
 
-  Ã’»¸ö¼ò¶ÌµÄ¶ÔÃóÃñí¡Ã
-    w - Â´Ã“µ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µ½µ¥×Ö/µ¥´Êĩ⣬°üÀ¨¿Õ¸ñ¡£
-    e - Â´Ã“µ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µ½µ¥×Ö/µ¥´Êĩ⣬µ«ÊÇ *²»* Â°Ã¼Ã€Â¨Â¿Ã•Â¸Ã±Â¡Â£
+  Ã’»¸ö¼ò¶ÌµÄ¶¯×÷ÃÃ񡜧
+    w - Â´Ã“µ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µ½ÃÂÒ»¸öµ¥´ÊÆðʼ´¦£¬²»°üÀ¨ËüµÄµÚÒ»¸ö×Ö·û¡£
+    e - Â´Ã“µ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µ½µ¥´Êĩ⣬°üÀ¨×îºóÒ»¸ö×Ö·û¡£
     $ - Â´Ã“µ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µ½µ±Ç°ÃÃÄ©¡£
 
-ÌرðÌáʾ¡Ã
-    Â¶Ã”ÓÚÓÂÓÚ̽Ë÷Õߣ¬ÇëÔÚÕý³£Ä£Ê½ÃÂÃæ½ö°´´ú±íÃàÓ¦¶ÔÃóµÄ¼ü¶ø²»Ê¹ÓÃÃüÃÔò
+  Ã’ò´ËÊäÈë de Â»Ã¡Â´Ã“µ±Ç°¹â±êλÖÃɾ³ýµ½µ¥´Êĩβ¡£
+
+ÌرðÌáʾ£º
+    Â¶Ã”ÓÚÓÂÓÚ̽Ë÷Õߣ¬ÇëÔÚÕý³£Ä£Ê½ÃÂÃæ½ö°´´ú±íÃàÓ¦¶¯×÷µÄ¼ü¶ø²»Ê¹ÓòÙ×÷·û£¬Äú
     Â½Â«Â¿Â´ÂµÂ½Â¹Ã¢Â±ÃªÂµÃ„Òƶ¯ÕýÈçÉÃÃæµÄ¶ÔÃóÃñíËù´ú±íµÄÒ»Ñù¡£
 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÃ‹Ã„½Ú£ºÊ¹ÓüÆÊýÖ¸¶¨¶¯×÷
+
+
+             ** Ã”Ú¶¯×÷Ç°ÊäÈëÊý×Ö»áʹËüÖظ´ÄÇô¶à´Î¡£ **
+
+  1. Ã’ƶ¯¹â±êµ½ÃÂÃæ±ê¼ÇÓà---> ÂµÃ„Ò»ÃõĿªÊ¼¡£
+
+  2. ÃŠÃ¤ÃˆÃ« 2w ÃŠÂ¹Â¹Ã¢Â±ÃªÃòÇ°Òƶ¯Ã½¸öµ¥´Ê¡£
+
+  3. ÃŠÃ¤ÃˆÃ« 3e ÃŠÂ¹Â¹Ã¢Â±ÃªÃòÇ°Òƶ¯µ½µÚÈý¸öµ¥´ÊµÄĩβ¡£
+
+  4. ÃŠÃ¤ÃˆÃ« 0 (Êý×ÖÃã) Ã’ƶ¯¹â±êµ½ÃÃÊס£
+
+  5. Ã–ظ´²½Öè2ºÃ²½Öè3£¬³¢ÊÔ²»Ã¬µÄÊý×Ö¡£
+
+---> This is just a line with words you can move around in.
+
+  6. Ã‡Ã«Â¼ÃŒÃøѧðµÚ¶þ½²µÚÎå½Ú¡£
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÃŽÃ¥Â½ÃšÂ£ÂºÃŠÂ¹Ã“üÆÊýÒÔɾ³ý¸ü¶à
+
+
+              ** ÃŠÂ¹Ã“òÙ×÷·ûʱÊäÈëÊý×Ö¿ÉÒÔʹËüÖظ´ÄÇô¶à´Î¡£ **
+
+  Ã‰ÃÃæÒѾ­Ìáµ½¹ýɾ³ý²Ù×÷·ûºÃ¶¯×÷µÄ×éºÃ£¬Äú¿ÉÒÔÔÚ×éºÃÖö¯×÷֮ǰ²åÈëÒ»¸öÊý×ÖÒÔ
+  Ã‰Â¾Â³Ã½Â¸Ã¼Â¶Ã Â£Âº
+        d   number(Êý×Ö)   motion
+
+  1. Ã’ƶ¯¹â±êµ½ÃÂÃæ±ê¼ÇÓà---> ÂµÃ„Ò»ÃÃÖõÚÒ»¸ö´óô×Öĸµ¥´ÊÉá£
+
+  2. ÃŠÃ¤ÃˆÃ« d2w Ã’Ôɾ³ýý¸ö´óô×Öĸµ¥´Ê¡£
+
+  3. Ã–ظ´²½Öè1ºÃ²½Öè2£¬Ê¹Óò»Ã¬µÄÊý×ÖʹµÃÓÃÒ»¸öÃüÃî¾ÃÄÜɾ³ýÈ«²¿ÃàÃڵĴóô×Öĸ
+     ÂµÂ¥Â´ÃŠ
+
+--->  this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
+
+
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-               ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÃ‹Ã„½Ú¡Ã¶ÔÃóÃüÃîµÄÌØÊâÇé¿ö
+                           ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÃù½Ú£º²Ù×÷ÕûÃÃ
 
 
-              ** ÃŠÃ¤ÃˆÃ« dd Â¿Ã‰Ã’Ôɾ³ýÕûÒ»¸öµ±Ç°Ãᣠ**
+                    ** ÃŠÃ¤ÃˆÃ« dd Â¿Ã‰Ã’Ôɾ³ýÕûÒ»¸öµ±Ç°Ãᣠ**
 
-  Â¼Ã¸Ã“ÚÕûÃÃɾ³ýµÄ¸ßƵ¶È£¬VIM ÂµÃ„Éè¼ÆÕß¾ö¶¨Òª¼ò»¯ÕûÃÃɾ³ý£¬½öÃèÒªÔÚìһÃÃÉÃ
+  Â¼Ã¸Ã“ÚÕûÃÃɾ³ýµÄ¸ßƵ¶È£¬Vi ÂµÃ„Éè¼ÆÕß¾ö¶¨Òª¼ò»¯ÕûÃÃɾ³ý²Ù×÷£¬Äú½öÃèÒªÔÚìһÃÃÉÃ
   Â»Ã·Â´Ã²Ã½´Î d Â¾Ã¿ÉÒÔɾ³ýµô¹â±êËùÔÚµÄÕûÃÃÃË¡£
 
   1. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæµÄ¶Ì¾ä¶ÎÂäÖõĵڶþÃá£
   2. ÃŠÃ¤ÃˆÃ« dd Ã‰Â¾Â³Ã½Â¸ÃƒÃá£
   3. ÃˆÂ»ÂºÃ³Ã’ƶ¯µ½µÚËÄÃá£
-  4. Â½Ã“×ÅÊäÈë 2dd (»¹¼ÇµÃÇ°Ãæ½²¹ýµÄ number-command-object Ã‚ð£¿) Ã‰Â¾Â³Ã½Ã½Ãá£
+  4. Â½Ã“×ÅÊäÈë 2dd Ã‰Â¾Â³Ã½Ã½Ãá£
 
-      1)  Roses are red,
-      2)  Mud is fun,
-      3)  Violets are blue,
-      4)  I have a car,
-      5)  Clocks tell time,
-      6)  Sugar is sweet
-      7)  And so are you.
+--->  1)  Roses are red,
+--->  2)  Mud is fun,
+--->  3)  Violets are blue,
+--->  4)  I have a car,
+--->  5)  Clocks tell time,
+--->  6)  Sugar is sweet
+--->  7)  And so are you.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                        ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÃŽÃ¥Â½ÃšÂ¡ÃƒÂ³Â·ÃûÀàÃüÃî
+                          ÂµÃšÂ¶Ã¾Â½Â²ÂµÃšÃ†ÃŸÂ½ÃšÂ£ÂºÂ³Â·ÃûÀàÃüÃî
 
 
-        ** ÃŠÃ¤ÃˆÃ« u Ã€Â´Â³Â·Ãû×îºóÖ´ÃõÄÃüÃÊäÈë U Ã€Â´ÃÞÕýÕûÃá£**
+       ** ÃŠÃ¤ÃˆÃ« u Ã€Â´Â³Â·Ãû×îºóÖ´ÃõÄÃüÃÊäÈë U Ã€Â´Â³Â·Ãû¶ÔÕûÃõÄÃ޸ġ£ **
 
   1. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„ÄÇÒ»Ã㬲¢½«ÆäÖÃÓÚµÚÒ»¸ö´íÎó
      Â´Â¦Â¡Â£
   4. Ã•Ã¢Â´ÃŽÃ’ªÊ¹Óàx ÃÞÕý±¾ÃõÄËùÓôíÎó¡£
   5. ÃÖÔÚÊäÈëÒ»¸ö´óôµÄ U Â£Â¬Â»Ã–¸´µ½¸ÃÃõÄԭʼ״̬¡£
   6. Â½Ã“×Ŷà´ÎÊäÈë u Ã’Ô³·Ãû U Ã’Ô¼°¸üÇ°µÄÃüÃî¡£
-  7. ÃˆÂ»ÂºÃ³Â¶Ã Â´ÃŽÃŠÃ¤ÃˆÃ« CTRL-R (ÃÈ°´Ã CTRL Â¼Ã¼Â²Â»Â·Ã…¿ª£¬½Ó×ÅÊäÈë R Â¼Ã¼) Â£Â¬Ã•Ã¢Ã‘ù¾Ã
-     Â¿Ã‰Ã’ÔÖ´Ãûָ´ÃüÃҲ¾ÃÊdz·Ãûµô³·ÃûÃüÃî¡£
+  7. ÃˆÂ»ÂºÃ³Â¶Ã Â´ÃŽÃŠÃ¤ÃˆÃ« CTRL-R (ÃÈ°´Ã CTRL Â¼Ã¼Â²Â»Â·Ã…¿ª£¬½Ó×Å°´ R Â¼Ã¼)£¬ÕâÑù¾Ã
+     Â¿Ã‰Ã’ÔÖØ×ö±»³·ÃûµÄÃüÃҲ¾ÃÊdz·Ãûµô³·ÃûÃüÃî¡£
 
 ---> Fiix the errors oon thhis line and reeplace them witth undo.
 
                               ÂµÃšÂ¶Ã¾Â½Â²Ã¡½á
 
 
-  1. Ã“û´Óµ±Ç°¹â±êɾ³ýÖõ¥×Ö/µ¥´Êĩ⣬ÇëÊäÈë¡Ãdw
-
-  2. Ã“û´Óµ±Ç°¹â±êɾ³ýÖõ±Ç°ÃÃĩ⣬ÇëÊäÈë¡Ãd$
-
-  3. Ã“ûɾ³ýÕûÃã¬ÇëÊäÈë¡Ãdd
+  1. Ã“û´Óµ±Ç°¹â±êɾ³ýÖÃÃÂÒ»¸öµ¥´Ê£¬ÇëÊäÈ룺dw
+  2. Ã“û´Óµ±Ç°¹â±êɾ³ýÖõ±Ç°ÃÃĩ⣬ÇëÊäÈ룺d$
+  3. Ã“ûɾ³ýÕûÃã¬ÇëÊäÈ룺dd
 
-  4. Ã”ÚÕý³£Ä£Ê½ÃÂÒ»¸öÃüÃîµÄ¸ñʽÊÇ¡Ã
+  4. Ã“ûÖظ´Ò»¸ö¶¯×÷£¬ÇëÔÚËüÇ°Ãæ¼ÓÉÃÒ»¸öÊý×Ö£º2w
+  5. Ã”ÚÕý³£Ä£Ê½ÃÂÃÞ¸ÄÃüÃîµÄ¸ñʽÊÇ£º
+               operator   [number]   motion
+     Ã†Ã¤Ã–ãº
+       operator - Â²Ã™Ã—÷·û£¬´ú±íÒª×öµÄÊÂÇ飬±ÈÈç d Â´ÃºÂ±Ã­Ã‰Â¾Â³Ã½
+       [number] - Â¿Ã‰Ã’Ô¸½¼ÓµÄÊý×Ö£¬´ú±í¶¯×÷Öظ´µÄ´ÎÊý
+       motion   - Â¶Â¯Ã—÷£¬´ú±íÔÚËù²Ù×÷µÄÎı¾ÉõÄÒƶ¯£¬ÀýÈç w Â´ÃºÂ±Ã­ÂµÂ¥Â´ÃŠ(word)£¬
+                 $ Â´ÃºÂ±Ã­ÃÃÄ©µÈµÈ¡£
 
-       [number]   command   object     Â»Ã²Ã•ÃŸ     command        [number]   object
-     Ã†Ã¤Ã’âÊÇ¡Ã
-       number - Â´ÃºÂ±Ã­ÂµÃ„ÊÇÃüÃîÖ´ÃõĴÎÊý
-       command - Â´ÃºÂ±Ã­Ã’ª×öµÄÊÂÇ飬±ÈÈç d Â´ÃºÂ±Ã­Ã‰Â¾Â³Ã½
-       object - Â´ÃºÂ±Ã­Ã’ª²Ù×÷µÄ¶ÔÃ󣬱ÈÈç w Â´ÃºÂ±Ã­ÂµÂ¥Ã—Ö/µ¥´Ê£¬$ Â´ÃºÂ±Ã­ÂµÂ½ÃÃÄ©µÈµÈ¡£
-               $ (to the end of line), etc.
+  6. Ã“ûÒƶ¯¹â±êµ½ÃÃÊ×£¬Çë°´Êý×Ö0¼ü£º0
 
-  5. Ã“û³·ÃûÒÔÇ°µÄ²Ù×÷£¬ÇëÊäÈë¡Ãu (áôµÄu)
-     Ã“û³·ÃûÔÚÒ»ÃÃÖÃËù×öµÄ¸Ä¶¯£¬ÇëÊäÈë¡ÃU (´óôµÄU)
-     Ã“û³·ÃûÒÔÇ°µÄ³·ÃûÃüÃ»Ö¸´ÒÔÇ°µÄ²Ù×÷½á¹û£¬ÇëÊäÈë¡ÃCTRL-R
+  7. Ã“û³·ÃûÒÔÇ°µÄ²Ù×÷£¬ÇëÊäÈ룺u (áôµÄu)
+     Ã“û³·ÃûÔÚÒ»ÃÃÖÃËù×öµÄ¸Ä¶¯£¬ÇëÊäÈ룺U (´óôµÄU)
+     Ã“û³·ÃûÒÔÇ°µÄ³·ÃûÃüÃ»Ö¸´ÒÔÇ°µÄ²Ù×÷½á¹û£¬ÇëÊäÈ룺CTRL-R
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                        ÂµÃšÃˆÃ½Â½Â²ÂµÃšÃ’»½Ú¡ÃÖÃÈëÀàÃüÃî
+                          ÂµÃšÃˆÃ½Â½Â²ÂµÃšÃ’»½Ú£ºÖÃÈëÀàÃüÃî
 
 
-              ** ÃŠÃ¤ÃˆÃ« p Â½Â«Ã—îºóÒ»´Îɾ³ýµÄÄÚÈÃÖÃÈë¹â±êÖ®ºó **
+               ** ÃŠÃ¤ÃˆÃ« p Â½Â«Ã—îºóÒ»´Îɾ³ýµÄÄÚÈÃÖÃÈë¹â±êÖ®ºó¡£ **
 
-  1. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæʾ·¶¶ÎÂäµÄÊ×Ãá£
+  1. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæµÚÒ»¸ö±ê¼ÇÓà---> ÂµÃ„Ò»Ãá£
 
-  2. ÃŠÃ¤ÃˆÃ« dd Â½Â«Â¸ÃƒÃÃɾ³ý£¬ÕâÑù»á½«¸ÃÃñ£´æµ½vimµÄ»º³åÇøÖá£
+  2. ÃŠÃ¤ÃˆÃ« dd Â½Â«Â¸ÃƒÃÃɾ³ý£¬ÕâÑù»á½«¸ÃÃñ£´æµ½ Vim ÂµÃ„Ò»¸ö¼Ä´æÆ÷Öá£
 
-  3. Â½Ã“׎«¹â±êÒƶ¯µ½×¼±¸ÖÃÈëµÄλÖõÄÉ÷½¡£¼Çס¡ÃÊÇÉ÷½Å¶¡£
+  3. Â½Ã“׎«¹â±êÒƶ¯µ½ c) Ã’»Ã㬼´×¼±¸ÖÃÈëµÄλÖõÄÉ÷½¡£¼Çס£ºÊÇÉ÷½Å¶¡£
 
-  4. ÃˆÂ»ÂºÃ³Ã”ÚÕý³£Ä£Ê½ÃÂ(<ESC>¼ü½øÈë)£¬ÊäÈë p Â½Â«Â¸ÃƒÃÃÕ³ÌùÖÃÈë¡£
+  4. ÃˆÂ»ÂºÃ³Ã”ÚÕý³£Ä£Ê½ÃÂ(<ESC>¼ü½øÈë)ÊäÈë p Â½Â«Â¸ÃƒÃÃÕ³ÌùÖÃÈë¡£
 
   5. Ã–ظ´²½Öè2Öò½Öè4£¬½«ËùÓõÄÃÃÒÀÃò·ÅÖõ½ÕýÈ·µÄλÖÃÉá£
 
-     d) Can you learn too?
-     b) Violets are blue,
-     c) Intelligence is learned,
-     a) Roses are red,
+---> d) Can you learn too?
+---> b) Violets are blue,
+---> c) Intelligence is learned,
+---> a) Roses are red,
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      ÂµÃšÃˆÃ½Â½Â²ÂµÃšÂ¶Ã¾Â½ÃšÂ¡ÃƒÃŒÃ¦Â»Â»Ã€Ã ÃƒÃ¼Ãî
+                          ÂµÃšÃˆÃ½Â½Â²ÂµÃšÂ¶Ã¾Â½ÃšÂ£ÂºÃŒÃ¦Â»Â»Ã€Ã ÃƒÃ¼Ãî
 
 
          ** ÃŠÃ¤ÃˆÃ« r ÂºÃÒ»¸ö×Ö·ûÌæ»»¹â±êËùÔÚλÖõÄ×Ö·û¡£**
 
   1. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„µÚÒ»Ãá£
 
-  2. Ã‡Ã«Ã’ƶ¯¹â±êµ½µÚÒ»¸ö´íÎóµÄÊʵ±Î»Öá£
+  2. Ã‡Ã«Ã’ƶ¯¹â±êµ½µÚÒ»¸ö³ö´íµÄλÖá£
 
-  3. Â½Ã“×ÅÊäÈë r Â£Â¬Ã•Ã¢Ã‘ù¾ÃÄܽ«´íÎóÌæ»»µôÃË¡£
+  3. Â½Ã“×ÅÊäÈë r ÂºÃÒªÌæ»»³ÉµÄ×Ö·û£¬ÕâÑù¾ÃÄܽ«´íÎóÌæ»»µôÃË¡£
 
   4. Ã–ظ´²½Öè2ºÃ²½Öè3£¬Ö±µ½µÚÒ»ÃÃÒѾ­ÃÞ¸ÄÃê±Ã¡£
 
 --->  Whan this lime was tuoed in, someone presswd some wrojg keys!
 --->  When this line was typed in, someone pressed some wrong keys!
 
-  5. ÃˆÂ»ÂºÃ³ÃŽÃ’ÃǼÌÃøÑ§УµÚÈý½²µÚÈý½Ú¡£
+  5. ÃˆÂ»ÂºÃ³ÃŽÃ’ÃǼÌÃøѧϰµÚÈý½²µÚÈý½Ú¡£
 
-ÌرðÌáʾ¡ÃÇüÇÄúÒªÔÚʹÓÃÖÃѧ𣬶ø²»ÊÇÔÚ¼ÇÒäÖÃѧð¡£
+ÌرðÌáʾ£ºÇüÇÄúÒªÔÚʹÓÃÖÃѧ𣬶ø²»ÊÇÔÚ¼ÇÒäÖÃѧð¡£
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       ÂµÃšÃˆÃ½Â½Â²ÂµÃšÃˆÃ½Â½ÃšÂ¡ÃƒÂ¸Ã¼Â¸Ã„ˈ̟Ãî
+                       ÂµÃšÃˆÃ½Â½Â²ÂµÃšÃˆÃ½Â½ÃšÂ£ÂºÂ¸Ã¼Â¸Ã„ˈ̟Ãî
 
 
-          ** Ã’ª¸Ä±äÒ»¸öµ¥×Ö/µ¥´ÊµÄ²¿·Ö»òÕßÈ«²¿£¬ÇëÊäÈë cw **
+                ** Ã’ª¸Ä±äÎı¾Ö±µ½Ò»¸öµ¥´ÊµÄĩ⣬ÇëÊäÈë ce **
 
   1. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„µÚÒ»Ãá£
 
   2. Â½Ã“×Űѹâ±ê·ÅÔÚµ¥´Ê lubw ÂµÃ„×Öĸ u ÂµÃ„λÖÃÄÇÀï¡£
 
-  3. ÃˆÂ»ÂºÃ³ÃŠÃ¤ÃˆÃ« cw Â¾Ã¿ÉÒÔÃÞÕý¸Ãµ¥´ÊÃË(ÔÚ±¾ÀýÕâÀïÊÇÊäÈë ine Â¡Â£)
+  3. ÃˆÂ»ÂºÃ³ÃŠÃ¤ÃˆÃ« cw Ã’Ô¼°ÕýÈ·µÄµ¥´Ê(ÔÚ±¾ÀýÖÃÊÇÊäÈë ine )¡£
 
   4. Ã—îºó°´ <ESC> Â¼Ã¼Â£Â¬ÃˆÂ»ÂºÃ³Â¹Ã¢Â±ÃªÂ¶Â¨ÃŽÂ»ÂµÂ½ÃÂÒ»¸ö´íÎóµÚÒ»¸ö×¼±¸¸ü¸ÄµÄ×Öĸ´¦¡£
 
   5. Ã–ظ´²½Öè3ºÃ²½Öè4£¬Ö±µ½µÚÒ»¸ö¾ä×ÓÃêÈ«À×ìµÚ¶þ¸ö¾ä×Ó¡£
 
----> This lubw has a few wptfd that mrrf changing usf the change command.
----> This line has a few words that need changing using the change command.
+---> This lubw has a few wptfd that mrrf changing usf the change operator.
+---> This line has a few words that need changing using the change operator.
 
-Ìáʾ¡ÃÇë×¢Òâ cw ÃƒÃ¼Ãî²»½ö½öÊÇÌæ»»ÃËÒ»¸öµ¥´Ê£¬Ò²ÈÃÄú½øÈëÎı¾²åÈë״̬ÃË¡£
+Ìáʾ£ºÇë×¢Òâ ce ÃƒÃ¼Ãî²»½ö½öÊÇɾ³ýÃËÒ»¸öµ¥´Ê£¬ËüÒ²ÈÃÄú½øÈë²åÈëģʽÃË¡£
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      ÂµÃšÃˆÃ½Â½Â²ÂµÃšÃ‹Ã„½Ú¡ÃʹÓÃcÖ¸ÃîµÄÆäËû¸ü¸ÄÀàÃüÃî
+                      ÂµÃšÃˆÃ½Â½Â²ÂµÃšÃ‹Ã„½Ú£ºÊ¹ÓÃc¸ü¸Ä¸ü¶à
 
 
-            ** Â¸Ã¼Â¸Ã„ÀàÖ¸Ãî¿ÉÒÔʹÓÃìɾ³ýÀàÃüÃîËùʹÓõĶÔÃó²ÎÊý¡£**
+          ** Â¸Ã¼Â¸Ã„Àà²Ù×÷·û¿ÉÒÔÓëɾ³ýÖÃʹÓõÄìÑùµÄ¶¯×÷ÅäºÃʹÓᣠ**
 
-  1. Â¸Ã¼Â¸Ã„ÀàÖ¸ÃîµÄ¹¤×÷·½Ê½¸úɾ³ýÀàÃüÃîÊÇÒ»Öµġ£²Ù×÷¸ñʽÊÇ¡Ã
+  1. Â¸Ã¼Â¸Ã„Àà²Ù×÷·ûµÄ¹¤×÷·½Ê½¸úɾ³ýÀàÊÇÒ»Öµġ£²Ù×÷¸ñʽÊÇ£º
 
-       [number]   c   object      Â»Ã²Ã•ÃŸ     c   [number]   object
+         c    [number]   motion
 
-  2. Â¶Ã”Ãó²ÎÊýÒ²ÊÇÒ»ÑùµÄ£¬±ÈÈç w Â´ÃºÂ±Ã­ÂµÂ¥Ã—Ö/µ¥´Ê£¬$´ú±íÃÃÄ©µÈµÈ¡£
+  2. Â¶Â¯Ã—÷²ÎÊý(motion)Ò²ÊÇÒ»ÑùµÄ£¬±ÈÈç w Â´ÃºÂ±Ã­ÂµÂ¥Â´ÃŠÂ£Â¬$´ú±íÃÃÄ©µÈµÈ¡£
 
   3. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„µÚÒ»Ãá£
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                              ÂµÃšÃˆÃ½Â½Â²Ã¡½á
+                                 ÂµÃšÃˆÃ½Â½Â²Ã¡½á
 
 
-  1. Ã’ªÖØÃÂÖÃÈëÒѾ­É¾³ýµÄÎı¾ÄÚÈã¬ÇëÊäÈëáô×Öĸ p¡£¸Ã²Ù×÷¿ÉÒÔ½«ÒÑɾ³ý
+  1. Ã’ªÖØÃÂÖÃÈëÒѾ­É¾³ýµÄÎı¾ÄÚÈã¬Ç밴áô×Öĸ p Â¼Ã¼Â¡Â£Â¸ÃƒÂ²Ã™Ã—÷¿ÉÒÔ½«ÒÑɾ³ý
      ÂµÃ„Îı¾ÄÚÈÃÖÃÓÚ¹â±êÖ®ºó¡£Èç¹û×îºóÒ»´Îɾ³ýµÄÊÇÒ»¸öÕûÃã¬ÄÇô¸ÃÃý«ÖÃ
      Ã“Úµ±Ç°¹â±êËùÔÚÃõÄÃÂÒ»Ãá£
 
   2. Ã’ªÌæ»»¹â±êËùÔÚλÖõÄ×Ö·û£¬ÇëÊäÈëáôµÄ r ÂºÃÒªÌæ»»µôԭλÖÃ×Ö·ûµÄÃÂ×Ö
      Â·Ã»Â¼Â´Â¿Ã‰Â¡Â£
 
-  3. Â¸Ã¼Â¸Ã„ˈ̟ÃîÔÊÃíÄú¸Ä±äÖ¸¶¨µÄ¶ÔÃ󣬴ӵ±Ç°¹â±êËùÔÚλÖÃÖ±µ½¶ÔÃóµÄĩβ¡£
-     Â±ÃˆÃˆÃ§ÃŠÃ¤ÃˆÃ« cw Â¿Ã‰Ã’ÔÌæ»»µ±Ç°¹â±êµ½µ¥´ÊµÄĩβµÄÄÚÈã»ÊäÈë c$ Â¿Ã‰Ã’ÔÌæ»»µ±
+  3. Â¸Ã¼Â¸Ã„ˈ̟ÃîÔÊÃíÄú¸Ä±ä´Óµ±Ç°¹â±êËùÔÚλÖÃÖ±µ½¶¯×÷ָʾµÄλÖÃÖüäµÄÎı¾¡£
+     Â±ÃˆÃˆÃ§ÃŠÃ¤ÃˆÃ« ce Â¿Ã‰Ã’ÔÌæ»»µ±Ç°¹â±êµ½µ¥´ÊµÄĩβµÄÄÚÈã»ÊäÈë c$ Â¿Ã‰Ã’ÔÌæ»»µ±
      Ã‡Â°Â¹Ã¢Â±ÃªÂµÂ½ÃÃÄ©µÄÄÚÈá£
 
-  4. Â¸Ã¼Â¸Ã„ˈ̟ÃîµÄ¸ñʽÊÇ¡Ã
+  4. Â¸Ã¼Â¸Ã„ˈ̟ÃîµÄ¸ñʽÊÇ£º
 
-        [number]   c   object        Â»Ã²Ã•ÃŸ      c   [number]   object
+        c   [number]   motion
 
ÂÃæÎÒÃǼÌÃøѧðÃÂÒ»½²¡£
ÖÔÚÎÒÃǼÌÃøѧðÃÂÒ»½²¡£
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                    ÂµÃšÃ‹Ã„½²µÚÒ»½Ú¡Ã¶¨Î»¼°Îļþ״̬
+                    ÂµÃšÃ‹Ã„½²µÚÒ»½Ú£º¶¨Î»¼°Îļþ״̬
 
+  ** ÃŠÃ¤ÃˆÃ« CTRL-G ÃÔʾµ±Ç°±à¼­ÎļþÖõ±Ç°¹â±êËùÔÚÃÃλÖÃÒÔ¼°Îļþ״̬ÃÅâ¡£
+     ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´ G Ã”òÖ±½ÓÌøתµ½ÎļþÖõÄijһָ¶¨Ãá£**
 
-  ** ÃŠÃ¤ÃˆÃ« CTRL-g ÃÔʾµ±Ç°±à¼­ÎļþÖõ±Ç°¹â±êËùÔÚÃÃλÖÃÒÔ¼°Îļþ״̬ÃÅâ¡£
-     ÃŠÃ¤ÃˆÃ« SHIFT-G Ã”òÖ±½ÓÌøתµ½ÎļþÖõÄijһָ¶¨Ãá£**
+  ÃŒÃ¡ÃŠÂ¾Â£ÂºÃ‡Ã¼ÇÒªÃÈè¶Ã±¾½ÚÄÚÈã¬Ö®ºó²Å¿ÉÒÔÖ´ÃÃÒÔò½Öè!!!
 
-  ÃŒÃ¡ÃŠÂ¾Â¡ÃƒÃ‡Ã¼ÇÒªÃÈè¶Ã±¾½ÚÄÚÈã¬Ö®ºó²Å¿ÉÒÔÖ´ÃÃÒÔò½Öè!!!
+  1. Â°Â´Ã CTRL Â¼Ã¼Â²Â»Â·Ã…¿ªÈ»ºó°´ g Â¼Ã¼Â¡Â£ÃŽÃ’ÃdzÆÕâ¸ö¼ü×éºÃΪ CTRL-G¡£
+     Ã„ú»á¿´µ½Ò³Ãæ×îµ×²¿³öÃÖÒ»¸ö״̬ÃÅâÃã¬ÃÔʾµÄÄÚÈÃÊǵ±Ç°±à¼­µÄÎļþÃû
+     ÂºÃÎļþÖùâ±êλÖá£Çë¼ÇסÃúţ¬Ëü»áÔÚ²½Öè3ÖÃÓõ½¡£
 
-  1. Â°Â´Ã CTRL Â¼Ã¼Â²Â»Â·Ã…¿ªÈ»ºó°´ g Â¼Ã¼Â¡Â£ÃˆÂ»ÂºÃ³Â¾Ã»á¿´µ½Ò³Ãæ×îµ×²¿³öÃÖÒ»¸ö״̬ÃÃ…
-     Ã¢Ãã¬ÃÔʾµÄÄÚÈÃÊǵ±Ç°±à¼­µÄÎļþÃûºÃÎļþµÄ×ÜÃÃÊý¡£Çë¼Çס²½Öè3µÄÃúš£
+Ìáʾ£ºÄúÒ²Ãí»áÔÚÆÃÄ»µÄÓÒýǿ´µ½¹â±êλÖã¬Õâ»áÔÚ 'ruler' Ã‘¡ÃîÉèÖÃʱ·¢Éú
+      (²Î¼û :help 'ruler')
 
-  2. Â°Â´Ã SHIFT-G Â¼Ã¼Â¿Ã‰Ã’ÔʹµÃµ±Ç°¹â±êÖ±½ÓÌøתµ½Îļþ×îºóÒ»Ãá£
-
-  3. ÃŠÃ¤ÃˆÃ«Ã„úÔøãÃôµÄÃúţ¬È»ºó°´Ã SHIFT-G¡£ÕâÑù¾Ã¿ÉÒÔ·µ»Øµ½ÄúµÚÒ»´Î°´ÃÂ
-     CTRL-g ÃŠÂ±Ã‹Ã¹Ã”ÚµÄÃúÃÃË¡£×¢Òâ¡ÃÊäÈëÃúÅʱ£¬ÃúÅÊDz»»áÔÚÆÃÄ»ÉÃÃÔʾ³öÀ´
-     ÂµÃ„¡£
-
-  4. ÃˆÃ§Â¹Ã»Ã”¸Ò⣬Äú¿ÉÒÔ¼ÌÃøÖ´Ãò½Öè1Öò½ÖèÈý¡£
+  2. ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´ G Â¿Ã‰Ã’ÔʹµÃµ±Ç°¹â±êÖ±½ÓÌøתµ½Îļþ×îºóÒ»Ãá£
+     ÃŠÃ¤ÃˆÃ« gg Â¿Ã‰Ã’ÔʹµÃµ±Ç°¹â±êÖ±½ÓÌøתµ½ÎļþµÚÒ»Ãá£
 
+  3. ÃŠÃ¤ÃˆÃ«Ã„úÔøãÃôµÄÃúţ¬È»ºóÊäÈë´óô G¡£ÕâÑù¾Ã¿ÉÒÔ·µ»Øµ½ÄúµÚÒ»´Î°´ÃÂ
+     CTRL-G ÃŠÂ±Ã‹Ã¹Ã”ÚµÄÃÃÃË¡£
 
+  4. ÃˆÃ§Â¹Ã»Ã„ú¾õµÃûÎÊÌâµÄ»°£¬ÇëÖ´Ãò½Öè1Öò½Öè3µÄ²Ù×÷½øÃÃ÷ð¡£
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       ÂµÃšÃ‹Ã„½²µÚ¶þ½Ú¡ÃËÑË÷ÀàÃüÃî
+                       ÂµÃšÃ‹Ã„½²µÚ¶þ½Ú£ºËÑË÷ÀàÃüÃî
 
 
-     ** ÃŠÃ¤ÃˆÃ« / Ã’Ô¼°Î²ËæµÄ×Ö·û´®¿ÉÒÔÓÃÒÔÔÚµ±Ç°ÎļþÖòéÕÒ¸Ã×Ö·û´®¡£**
+     ** ÃŠÃ¤ÃˆÃ« / Â¼Ã“ÉÃÒ»¸ö×Ö·û´®¿ÉÒÔÓÃÒÔÔÚµ±Ç°ÎļþÖòéÕÒ¸Ã×Ö·û´®¡£**
 
   1. Ã”ÚÕý³£Ä£Ê½ÃÂÊäÈë / Ã—Ö·û¡£Äú´Ëʱ»á×¢Òâµ½¸Ã×Ö·ûºÃ¹â±ê¶¼»á³öÃÖÔÚÆÃÄ»µ×
      Â²Â¿Â£Â¬Ã•Ã¢Â¸Ãº : ÃƒÃ¼ÃîÊÇÒ»ÑùµÄ¡£
   2. Â½Ã“×ÅÊäÈë errroor <»Ø³µ>¡£ÄǸöerrroor¾ÃÊÇÄúÒª²éÕÒµÄ×Ö·û´®¡£
 
   3. Ã’ª²éÕÒÃÃÒ»´ÎµÄ×Ö·û´®£¬Ö»ÃèÒª°´ n Â¼Ã¼Â¡Â£Ã’ªÃòÃà·´·½Ãò²éÕÒÃÃÒ»´ÎµÄ×Ö
-     Â·Ã»Â´Â®Â£Â¬Ã‡Ã«ÃŠÃ¤ÃˆÃ« Shift-N Â¼Â´Â¿Ã‰Â¡Â£
+     Â·Ã»Â´Â®Â£Â¬Ã‡Ã«ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´ N Â¼Â´Â¿Ã‰Â¡Â£
 
   4. ÃˆÃ§Â¹Ã»Ã„úÃëÄæÃò²éÕÒ×Ö·û´®£¬ÇëʹÓà? Â´ÃºÃŒÃ¦ / Â½Ã¸Ãá£
 
----> When the search reaches the end of the file it will continue at the start.
-
-  "errroor" is not the way to spell error;  errroor is an error.
-
-  ÃŒÃ¡ÃŠÂ¾Â¡ÃƒÃˆÃ§Â¹Ã»Â²Ã©Ã•Ã’ÒѾ­µ½´ïÎļþĩ⣬²éÕÒ»á×Ô¶¯´ÓÎļþ÷²¿¼ÌÃø²éÕÒ¡£
-
+  5. Ã’ª»Øµ½Äú֮ǰµÄλÖð´ CTRL-O (°´×¡ Ctrl Â¼Ã¼Â²Â»Â·Ã…ìʱ°´ÃÂ×Öĸ o)¡£Öظ´°´¿ÉÒÔ
+     Â»Ã˜Ã˸ü¶à²½¡£CTRL-I Â»Ã¡ÃŒÃ¸Ã—ªµ½½ÃõÄλÖá£
 
+--->  "errroor" is not the way to spell error;  errroor is an error.
+Ìáʾ£ºÈç¹û²éÕÒÒѾ­µ½´ïÎļþĩ⣬²éÕÒ»á×Ô¶¯´ÓÎļþ÷²¿¼ÌÃø²éÕÒ£¬³ý·Ç
+      'wrapscan' Ã‘¡Ãî±»¸´Î»¡£
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                  ÂµÃšÃ‹Ã„½²µÚÈý½Ú¡ÃÅä¶ÔÀ¨ºÅµÄ²éÕÒ
+                  ÂµÃšÃ‹Ã„½²µÚÈý½Ú£ºÅä¶ÔÀ¨ºÅµÄ²éÕÒ
 
 
-             ** Â°Â´ % Â¿Ã‰Ã’Ô²éÕÒÅä¶ÔµÄÀ¨ºÅ )¡¢]¡¢}¡£**
+             ** ÃŠÃ¤ÃˆÃ« % Â¿Ã‰Ã’Ô²éÕÒÅä¶ÔµÄÀ¨ºÅ )¡¢]¡¢}¡£**
 
   1. Â°Ã‘¹â±ê·ÅÔÚ±¾½ÚÃÂÃæ±ê¼ÇÓà--> Ã„ÇÒ»ÃÃÖõÄÈκÎÒ»¸ö (¡¢[ Â»Ã² { Â´Â¦Â¡Â£
 
 
   4. Ã”ٴΰ´ % Â¾Ã¿ÉÒÔÌø»ØÅä¶ÔµÄµÚÒ»¸öÀ¨ºÅ´¦¡£
 
----> This ( is a test line with ('s, ['s ] and {'s } in it. ))
-
-Ìáʾ¡ÃÔÚ³ÌÃòµ÷ÊÔʱ£¬Õâ¸ö¹¦ÄÜÓÃÀ´²éÕÒ²»Åä¶ÔµÄÀ¨ºÅÊǺÜÓÃÓõġ£
+  5. Ã’ƶ¯¹â±êµ½ÃíÒ»¸ö (¡¢)¡¢[¡¢]¡¢{ Â»Ã² } Â´Â¦Â£Â¬Â°Â´ % Â²Ã©Â¿Â´Ã†Ã¤Ã‹Ã¹Ã—÷ËùΪ¡£
 
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
 
 
+Ìáʾ£ºÔÚ³ÌÃòµ÷ÊÔʱ£¬Õâ¸ö¹¦ÄÜÓÃÀ´²éÕÒ²»Åä¶ÔµÄÀ¨ºÅÊǺÜÓÃÓõġ£
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                     ÂµÃšÃ‹Ã„½²µÚËĽڡÃÃÞÕý´íÎóµÄ·½·¨Ö®Ò»
+                     ÂµÃšÃ‹Ã„½²µÚËĽڣºÌæ»»ÃüÃî
 
 
                ** ÃŠÃ¤ÃˆÃ« :s/old/new/g Â¿Ã‰Ã’ÔÌæ»» old ÃŽÂª new¡£**
   2. ÃŠÃ¤ÃˆÃ« :s/thee/the <»Ø³µ> Â¡Â£Ã‡Ã«Ã—¢Òâ¸ÃÃüÃîÖ»¸Ä±ä¹â±êËùÔÚÃõĵÚÒ»¸öÆ¥Åä
      Â´Â®Â¡Â£
 
-  3. ÃŠÃ¤ÃˆÃ« :s/thee/the/g        Ã”òÊÇÌ滻ȫÃõÄÆ¥Åä´®¡£
-
----> the best time to see thee flowers is in thee spring.
-
-  4. Ã’ªÌ滻ýÃÃÖ®¼ä³öÃÖµÄÿ¸öÆ¥Åä´®£¬ÇëÊäÈë :#,#s/old/new/g (#,#´ú±íµÄÊÇ
-     Ã½ÃõÄÃúÅ)¡£ÊäÈë :%s/old/new/g Ã”òÊÇÌæ»»Õû¸öÎļþÖõÄÿ¸öÆ¥Åä´®¡£
-
+  3. ÃŠÃ¤ÃˆÃ« :s/thee/the/g        Ã”òÊÇÌ滻ȫÃõÄÆ¥Åä´®£¬¸ÃÃÃÖÃËùÓõĠ"thee" Â¶Â¼Â»Ã¡Â±Â»
+     Â¸Ã„񄭜
 
+---> thee best time to see thee flowers is in thee spring.
 
+  4. Ã’ªÌ滻ýÃÃÖ®¼ä³öÃÖµÄÿ¸öÆ¥Åä´®£¬Çë
+     ÃŠÃ¤ÃˆÃ«   :#,#s/old/new/g   Ã†Ã¤Ã–à#,# Â´ÃºÂ±Ã­ÂµÃ„ÊÇÌæ»»²Ù×÷µÄÈô¸ÉÃÃÖÃ
+                              ÃŠÃ—βýÃõÄÃúš£
+     ÃŠÃ¤ÃˆÃ«   :%s/old/new/g     Ã”òÊÇÌæ»»Õû¸öÎļþÖõÄÿ¸öÆ¥Åä´®¡£
+     ÃŠÃ¤ÃˆÃ«   :%s/old/new/gc    Â»Ã¡Ã•Ã’µ½Õû¸öÎļþÖõÄÿ¸öÆ¥Åä´®£¬²¢ÇÒ¶Ôÿ¸öÆ¥Åä´®
+                              ÃŒÃ¡ÃŠÂ¾ÃŠÃ‡Â·Ã±Â½Ã¸ÃÃÌæ»»¡£
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                               ÂµÃšÃ‹Ã„½²Ã¡½á
 
 
-  1. Ctrl-g Ã“ÃÓÚÃÔʾµ±Ç°¹â±êËùÔÚλÖúÃÎļþ״̬ÃÅâ¡£Shift-G Ã“ÃÓÚ½«¹â±êÌø
-     Ã—ªÖÃÎļþ×îºóÒ»Ãá£ÃÈÇÃÈëÒ»¸öÃúÅÈ»ºó°´ Shift-G Ã”òÊǽ«¹â±êÒƶ¯ÖøÃÃÃ
-     ÂºÃ…´ú±íµÄÃá£
+  1. CTRL-G Ã“ÃÓÚÃÔʾµ±Ç°¹â±êËùÔÚλÖúÃÎļþ״̬ÃÅâ¡£
+     G Ã“ÃÓÚ½«¹â±êÌøתÖÃÎļþ×îºóÒ»Ãá£
+     ÃÈÇÃÈëÒ»¸öÃúÅÈ»ºóÊäÈë´óô G Ã”òÊǽ«¹â±êÒƶ¯ÖøÃÃúŴú±íµÄÃá£
+     gg Ã“ÃÓÚ½«¹â±êÌøתÖÃÎļþµÚÒ»Ãá£
 
-  2. ÃŠÃ¤ÃˆÃ« / ÃˆÂ»ÂºÃ³Â½Ã´Ã‹Ã¦Ã’»¸ö×Ö·û´®ÊÇÔòÊÇÔÚµ±Ç°Ëù±à¼­µÄÎĵµÖÃÃòºó²éÕÒ¸Ã×Ö·û´®¡£
-     ÃŠÃ¤ÃˆÃ«ÃŽÃŠÂºÃ… ? ÃˆÂ»ÂºÃ³Â½Ã´Ã‹Ã¦Ã’»¸ö×Ö·û´®ÊÇÔòÊÇÔÚµ±Ç°Ëù±à¼­µÄÎĵµÖÃÃòÇ°²éÕÒ¸Ã×Ö
-     Â·Ã»Â´Â®Â¡Â£Ãê³ÉÒ»´Î²éÕÒÖ®ºó°´ n Â¼Ã¼Ã”òÊÇÖظ´ÉÃÒ»´ÎµÄÃüÃ¿ÉÔÚìһ·½ÃòÉòé
-     Ã•Ã’ÃÂÒ»¸ö×Ö·û´®ËùÔÚ£»»òÕß°´ Shift-N ÃòÃà·´·½Ãò²éÕÒøÃ×Ö·û´®ËùÔÚ¡£
+  2. ÃŠÃ¤ÃˆÃ« / ÃˆÂ»ÂºÃ³Â½Ã´Ã‹Ã¦Ã’»¸ö×Ö·û´®ÊÇÔÚµ±Ç°Ëù±à¼­µÄÎĵµÖÃÕýÃò²éÕÒ¸Ã×Ö·û´®¡£
+     ÃŠÃ¤ÃˆÃ« ? ÃˆÂ»ÂºÃ³Â½Ã´Ã‹Ã¦Ã’»¸ö×Ö·û´®ÔòÊÇÔÚµ±Ç°Ëù±à¼­µÄÎĵµÖ÷´Ãò²éÕÒ¸Ã×Ö·û´®¡£
+     Ãê³ÉÒ»´Î²éÕÒÖ®ºó°´ n Â¼Ã¼ÃŠÃ‡Ã–ظ´ÉÃÒ»´ÎµÄÃüÃ¿ÉÔÚìһ·½ÃòÉòé
+     Ã•Ã’ÃÂÒ»¸öÆ¥Åä×Ö·û´®ËùÔÚ£»»òÕß°´´óô N ÃòÃà·´·½Ãò²éÕÒÃÂһƥÅä×Ö·û´®ËùÔÚ¡£
+     CTRL-O Â´Ã¸Ã„úÌøת»Ø½Ã¾ÉµÄλÖã¬CTRL-I Ã”ò´øÄúµ½½ÃõÄλÖá£
 
-  3. ÃˆÃ§Â¹Ã»Â¹Ã¢Â±ÃªÂµÂ±Ã‡Â°ÃŽÂ»Ã–ÃÊÇÀ¨ºÅ(¡¢)¡¢[¡¢]¡¢{¡¢}£¬°´ % Â¿Ã‰Ã’Ô½«¹â±êÒƶ¯µ½Åä¶ÔµÄ
-     Ã€Â¨ÂºÃ…Éá£
+  3. ÃˆÃ§Â¹Ã»Â¹Ã¢Â±ÃªÂµÂ±Ã‡Â°ÃŽÂ»Ã–ÃÊÇÀ¨ºÅ(¡¢)¡¢[¡¢]¡¢{¡¢}£¬°´ % Â»Ã¡Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½Åä¶ÔµÄÀ¨ºÅÉá£
 
   4. Ã”ÚÒ»ÃÃÄÚÌ滻÷һ¸ö×Ö·û´® old ÃŽÂªÃµÄ×Ö·û´® new£¬ÇëÊäÈë  :s/old/new
      Ã”ÚÒ»ÃÃÄÚÌæ»»ËùÓõÄ×Ö·û´® old ÃŽÂªÃµÄ×Ö·û´® new£¬ÇëÊäÈë  :s/old/new/g
      Ã”ÚýÃÃÄÚÌæ»»ËùÓõÄ×Ö·û´® old ÃŽÂªÃµÄ×Ö·û´® new£¬ÇëÊäÈë  :#,#s/old/new/g
      Ã”ÚÎļþÄÚÌæ»»ËùÓõÄ×Ö·û´® old ÃŽÂªÃµÄ×Ö·û´® new£¬ÇëÊäÈë  :%s/old/new/g
-     Â½Ã¸ÃÃÈ«ÎÄÌ滻ʱѯÎÊÓû§È·ÈÃÿ¸öÌæ»»ÃèÌí¼Ó c Ã‘¡ÃÇëÊäÈë :%s/old/new/gc
-
+     Â½Ã¸ÃÃÈ«ÎÄÌ滻ʱѯÎÊÓû§È·ÈÃÿ¸öÌæ»»ÃèÌí¼Ó c Â±ÃªÃ–¾        :%s/old/new/gc
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-               ÂµÃšÃŽÃ¥Â½Â²ÂµÃšÃ’»½Ú¡ÃÔÚ VIM Ã„ÚÖ´ÃÃÃⲿÃüÃîµÄ·½·¨
+               ÂµÃšÃŽÃ¥Â½Â²ÂµÃšÃ’»½Ú£ºÔÚ VIM Ã„ÚÖ´ÃÃÃⲿÃüÃîµÄ·½·¨
 
 
-          ** ÃŠÃ¤ÃˆÃ« :! ÃˆÂ»ÂºÃ³Â½Ã´Ã‹Ã¦Ã–øÊäÈëÒ»¸öÃⲿÃüÃî¿ÉÒÔÖ´ÃøÃÃⲿÃüÃî¡£**
+          ** ÃŠÃ¤ÃˆÃ« :! ÃˆÂ»ÂºÃ³Â½Ã´Â½Ã“×ÅÊäÈëÒ»¸öÃⲿÃüÃî¿ÉÒÔÖ´ÃøÃÃⲿÃüÃî¡£**
 
-  1. Â°Â´ÃÂÎÒÃÇËùÊìäµÄ : ÃƒÃ¼ÃîÉèÖùâ±êµ½ÆÃÄ»µ×²¿¡£ÕâÑù¾Ã¿ÉÒÔÈÃÄúÊäÈëÃüÃîÃË¡£
+  1. Â°Â´ÃÂÎÒÃÇËùÊìäµÄ : ÃƒÃ¼Ãîʹ¹â±êÒƶ¯µ½ÆÃÄ»µ×²¿¡£ÕâÑùÄú¾Ã¿ÉÒÔÊäÈëÒ»ÃÃÃüÃîÃË¡£
 
   2. Â½Ã“×ÅÊäÈë¸Ã̾ºÅ ! Ã•Ã¢Â¸Ã¶Ã—Ö·û£¬ÕâÑù¾ÃÔÊÃíÄúÖ´ÃÃÃⲿµÄ shell ÃƒÃ¼ÃîÃË¡£
 
      Ã„ÚÈ㬾ÃÈçìÄúÔÚÃüÃîÃÃÌáʾ·ûÃÂÊäÈë ls ÃƒÃ¼ÃîµÄ½á¹ûÒ»Ñù¡£Èç¹û !ls ÃƒÂ»Ã†Ã°
      Ã—÷Óã¬Äú¿ÉÒÔÊÔÊÔ :!dir Â¿Â´Â¿Â´Â¡Â£
 
----> ÃŒÃ¡ÃŠÂ¾Â¡Ãƒ Ã‹Ã¹Ã“õÄÃⲿÃüÃ¿ÉÒÔÒÔÕâÖÖ·½Ê½Ö´Ãá£
+Ìáʾ£ºËùÓõÄÃⲿÃüÃ¿ÉÒÔÒÔÕâÖÖ·½Ê½Ö´Ã㬰üÀ¨´øÃüÃîÃòÎÊýµÄÄÇé¡£
+
+Ìáʾ£ºËùÓõĠ: ÃƒÃ¼Ã±ØÃëÒÔÇà<»Ø³µ> Â¼Ã¼Â½Ã¡ÃŠÃ¸Â¡Â£Â´Ã“½ñÒÔºóÎÒÃǾò»»á×ÜÊÇÌáµ½ÕâÒ»µã
+      ÃË¡£
 
----> ÃŒÃ¡ÃŠÂ¾Â¡Ãƒ Ã‹Ã¹Ã“õĠ: ÃƒÃ¼Ã±ØÃëÒÔ <»Ø³µ> Â¸Ã¦Ã–Õ¡£
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                     ÂµÃšÃŽÃ¥Â½Â²ÂµÃšÂ¶Ã¾Â½ÃšÂ¡ÃƒÂ¹Ã˜Ã“Ú±£´æÎļþµÄ¸ü¶àÃÅâ
+                     ÂµÃšÃŽÃ¥Â½Â²ÂµÃšÂ¶Ã¾Â½ÃšÂ£ÂºÂ¹Ã˜Ã“Ú±£´æÎļþµÄ¸ü¶àÃÅâ
 
 
             ** Ã’ª½«¶ÔÎļþµÄ¸Ä¶¯±£´æµ½ÎļþÖã¬ÇëÊäÈë :w FILENAME Â¡Â£**
   1. ÃŠÃ¤ÃˆÃ« :!dir Â»Ã²Ã•ÃŸ :!ls Â»Ã±Ã–ªµ±Ç°Ä¿Â¼µÄÄÚÈá£ÄúÓ¦µ±ÒÑÖªµÀ×îºó»¹µÃÇÃ
      <»Ø³µ> Â°Ã‰Â¡Â£
 
-  2. Ã‘¡ÔñÒ»¸öÉÃδ´æÔÚÎļþÃû£¬±ÈÈç TEST Â¡Â£
+  2. Ã‘¡ÔñÒ»¸öδ±»Óõ½µÄÎļþÃû£¬±ÈÈç TEST¡£
 
   3. Â½Ã“×ÅÊäÈë :w TEST  (´Ë´¦ TEST ÃŠÃ‡Ã„úËùÑ¡ÔñµÄÎļþÃû¡£)
 
-  4. Â¸ÃƒÃƒÃ¼Ãî»áÒÔ TEST ÃŽÂªÃŽÃ„¼þÃû±£´æÕû¸öÎļþ (VIM Â½ÃŒÂ³ÃŒ)¡£ÎªÃËÈ·±£ÕýÈ·±£´æ£¬
-     Ã‡Ã«Ã”Ù´ÎÊäÈë :!dir Â²Ã©Â¿Â´Ã„úµÄĿ¼ÃñíÄÚÈá£
+  4. Â¸ÃƒÃƒÃ¼Ãî»áÒÔ TEST ÃŽÂªÃŽÃ„¼þÃû±£´æÕû¸öÎļþ (Vim Â½ÃŒÂ³ÃŒ)¡£ÎªÃËÑéÖ¤ÕâÒ»µã£¬
+     Ã‡Ã«Ã”Ù´ÎÊäÈë :!dir Â»Ã² :!ls Â²Ã©Â¿Â´Ã„úµÄĿ¼ÃñíÄÚÈá£
 
----> Ã‡Ã«Ã—¢Òâ¡ÃÈç¹ûÄúÃ˳ö VIM ÃˆÂ»ÂºÃ³Ã”ÚÒÔÎļþÃû TEST ÃŽÂªÂ²ÃŽÃŠÃ½Â½Ã¸ÃˆÃ«Â£Â¬Ã„Çô¸ÃÎļþÄÚ
+Çë×¢Ò⣺Èç¹ûÄúÃ˳ö Vim ÃˆÂ»ÂºÃ³Ã”ÚÒÔÃüÃî vim TEST Ã”Ù´ÎÆô¶¯ Vim£¬ÄÇô¸ÃÎļþÄÚ
      ÃˆÃÓ¦¸ÃìÄú±£´æʱµÄÎļþÄÚÈÃÊÇÃêÈ«Ò»ÑùµÄ¡£
 
-  5. ÃÖÔÚÄú¿ÉÒÔè¹ýÊäÈë :!rm TEST Ã€Â´Ã‰Â¾Â³Ã½ TEST ÃŽÃ„¼þÃË¡£
-
+  5. ÃÖÔÚÄú¿ÉÒÔɾ³ý TEST ÃŽÃ„¼þÃË¡£ÔÚ MS-DOS Ã£¬ÇëÊäÈ룺   :!del TEST
+                                 Ã”Ú Unix Ã£¬ÇëÊäÈ룺     :!rm TEST
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                   ÂµÃšÃŽÃ¥Â½Â²ÂµÃšÃˆÃ½Â½ÃšÂ¡ÃƒÃ’»¸ö¾ßÓÃÑ¡ÔñÃԵı£´æÃüÃî
+                   ÂµÃšÃŽÃ¥Â½Â²ÂµÃšÃˆÃ½Â½ÃšÂ£ÂºÃ’»¸ö¾ßÓÃÑ¡ÔñÃԵı£´æÃüÃî
 
 
-               ** Ã’ª±£´æÎļþµÄ²¿·ÖÄÚÈã¬ÇëÊäÈë :#,# w FILENAME **
+           ** Ã’ª±£´æÎļþµÄ²¿·ÖÄÚÈã¬ÇëÊäÈë v motion :w FILENAME **
 
-  1. Ã”ÙÀ´Ö´ÃÃÒ»´Î :!dir Â»Ã²Ã•ÃŸ :!ls Â»Ã±Ã–ªµ±Ç°Ä¿Â¼µÄÄÚÈã¬È»ºóÑ¡ÔñÒ»¸öºÃÊʵÄ
-     Â²Â»Ã–ØÃûµÄÎļþÃû£¬±ÈÈç TEST Â¡Â£
+  1. Ã’ƶ¯¹â±êµ½±¾Ãá£
 
-  2. Â½Ã“׎«¹â±êÒƶ¯Öñ¾Ò³µÄ×¶Ë£¬È»ºó°´ CTRL-g Ã•Ã’µ½¸ÃÃõÄÃúš£±ðÃüÃË
-     ÃúÅŶ¡£
+  2. Â½Ã“×Å°´ v Â¼Ã¼Â£Â¬Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯ÖÃÃÂÃæµÚÎå¸öÌõÄ¿Éá£Äú»á×¢Òâµ½Ö®¼äµÄÎı¾±»¸ßÃÃÃË¡£
 
-  3. Â½Ã“×Űѹâ±êÒƶ¯Öñ¾Ò³µÄ×îµ×¶Ë£¬ÔÙ°´Ò»´Î CTRL-g Â¡Â£Ã’²±ðÃüÃËÕâ¸öÃúÃŶ¡£
+  3. ÃˆÂ»ÂºÃ³Â°Â´ : Ã—Ö·û¡£Äú½«¿´µ½ÆÃÄ»µ×²¿»á³öÃÖ :'<,'> Â¡Â£
 
-  4. ÃŽÂªÃËÖ»±£´æÎÄÕµÄij¸ö²¿·Ö£¬ÇëÊäÈë :#,# w TEST Â¡Â£Ã•Ã¢Ã€Ã¯ÂµÃ„ #,# Â¾ÃÊÇÉÃÃæ
-     Ã’ªÇóÄú¼ÇסµÄÃúÅ(¶¥¶ËÃúÅ,µ×¶ËÃúÅ)£¬¶ø TEST Â¾ÃÊÇÑ¡¶¨µÄÎļþÃû¡£
-
-  5. Ã—îºó£¬Óà:!dir ÃˆÂ·ÃˆÃÎļþÊÇ·ñÕýÈ·±£´æ¡£µ«ÊÇÕâ´ÎÃȱðɾ³ýµô¡£
+  4. ÃÖÔÚÇëÊäÈë w TEST£¬ÆäÖàTEST ÃŠÃ‡Ã’»¸öδ±»Ê¹ÓõÄÎļþÃû¡£È·ÈÃÄú¿´µ½ÃË
+     :'<,'>w TEST Ã–®ºó°´ <»Ø³µ> Â¼Ã¼Â¡Â£
 
+  5. Ã•Ã¢ÃŠÂ± Vim Â»Ã¡Â°Ã‘Ñ¡ÖõÄÃÃôÈëµ½ÒÔ TEST ÃƒÃ¼ÃƒÃ»ÂµÃ„ÎļþÖÃÈ¥¡£Ê¹Óà:!dir Â»Ã² :!ls
+     ÃˆÂ·ÃˆÃÎļþ±»ÕýÈ·±£´æ¡£Õâ´ÎÃȱðɾ³ýËü£¡ÎÒÃÇÔÚÃÂÒ»½²ÖûáÓõ½Ëü¡£
 
+Ìáʾ£º°´ v Â¼Ã¼ÃŠÂ¹ Vim Â½Ã¸ÃˆÃ«Â¿Ã‰ÃŠÃ“ģʽ½øÃÃÑ¡È¡¡£Äú¿ÉÒÔËÄ´¦Òƶ¯¹â±êʹѡȡÇøÓò±ä´ó»ò
+      Â±Ã¤Ã¡¡£½Ó×ÅÄú¿ÉÒÔʹÓÃÒ»¸ö²Ù×÷·û¶ÔÑ¡ÖÃÎı¾½øÃòÙ×÷¡£ÀýÈ磬°´ d Â¼Ã¼Â»Ã¡Ã‰Â¾Â³Ã½
+      Ã‘¡ÖõÄÎı¾ÄÚÈá£
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                  ÂµÃšÃŽÃ¥Â½Â²ÂµÃšÃ‹Ã„½Ú¡ÃÌáÈ¡ºÃºÃ²¢Îļþ
+                  ÂµÃšÃŽÃ¥Â½Â²ÂµÃšÃ‹Ã„½Ú£ºÌáÈ¡ºÃºÃ²¢Îļþ
 
 
        ** Ã’ªÃòµ±Ç°ÎļþÖòåÈëÃíÃâµÄÎļþµÄÄÚÈã¬ÇëÊäÈë :r FILENAME **
 
-  1. Ã‡Ã«Â¼Ã¼ÃˆÃ« :!dir ÃˆÂ·ÃˆÃÄúÇ°Ãæ´´½¨µÄ TEST ÃŽÃ„¼þ»¹ÔÚ¡£
+  1. Ã‡Ã«Â°Ã‘¹â±êÒƶ¯µ½±¾ÃÃÉÃÃæÒ»Ãá£
 
-  2. ÃˆÂ»ÂºÃ³Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯Öõ±Ç°Ò³ÃæµÄ¶¥¶Ë¡£
+ÌرðÌáʾ£ºÖ´Ãò½Öè2Ö®ºóÄú½«¿´µ½µÚÎå½²µÚÈý½ÚµÄÎÄ×Ö£¬Çë½ìʱÃùÃÂÒƶ¯
+          Ã’ÔÔٴο´µ½±¾½²ÄÚÈá£
 
-ÌرðÌáʾ¡Ã Ã–´Ãò½Öè3Ö®ºóÄú½«¿´µ½µÚÎå½²µÚÈý½Ú£¬Çë½ìʱÔÙÃùÃÂÒƶ¯»Øµ½ÕâÀïÀ´¡£
+  2. Â½Ã“×Åè¹ýÃüÃî :r TEST Â½Â«Ã‡Â°ÃƒÃ¦Â´Â´Â½Â¨ÂµÃ„ÃûΪ TEST ÂµÃ„ÎļþÌáÈ¡½øÀ´¡£
+     Ã„úËùÌáÈ¡½øÀ´µÄÎļþ½«´Ó¹â±êËùÔÚλÖô¦¿ªÊ¼ÖÃÈë¡£
 
-  3. Â½Ã“×Åè¹ý :r TEST Â½Â«Ã‡Â°ÃƒÃ¦Â´Â´Â½Â¨ÂµÃ„ÃûΪ TEST ÂµÃ„ÎļþÌáÈ¡½øÀ´¡£
+  3. ÃŽÂªÃËÈ·ÈÃÎļþÒѾ­ÌáÈ¡³É¹¦£¬Òƶ¯¹â±ê»Øµ½Ô­À´µÄλÖþÿÉÒÔ×¢ÒâÓÃý·ÃµÚ
+     ÃŽÃ¥Â½Â²ÂµÃšÃˆÃ½Â½ÃšÂµÃ„ÄÚÈã¬Ò»·ÃÊÇԭʼÄÚÈã¬ÃíÃâÒ»·ÃÊÇÀ´×ÔÎļþµÄ¸±±¾¡£
 
-ÌرðÌáʾ¡ÃÄúËùÌáÈ¡½øÀ´µÄÎļþ½«´Ó¹â±êËùÔÚλÖô¦¿ªÊ¼ÖÃÈë¡£
+Ìáʾ£ºÄú»¹¿ÉÒÔ¶ÃÈ¡ÃⲿÃüÃîµÄÊä³ö¡£ÀýÈ磬 :r !ls Â¿Ã‰Ã’Ô¶ÃÈ¡ ls ÃƒÃ¼ÃîµÄÊä³ö£¬²¢
+      Â°Ã‘Ëü·ÅÖÃÔÚ¹â±êÃÂÃæ¡£
 
-  4. ÃŽÂªÃËÈ·ÈÃÎļþÒѾ­ÌáÈ¡³É¹¦£¬Òƶ¯¹â±ê»Øµ½Ô­À´µÄλÖþÿÉÒÔ×¢ÒâÓÃý·ÃµÚ
-     ÃŽÃ¥Â½Â²ÂµÃšÃˆÃ½Â½ÃšÂ£Â¬Ã’»·ÃÊÇÔ­±¾£¬ÃíÃâÒ»·ÃÊÇÀ´×ÔÎļþµÄ¸±±¾¡£
 
 
 
 
   1. :!command Ã“ÃÓÚÖ´ÃÃÒ»¸öÃⲿÃüÃî command¡£
 
-     Ã‡Ã«Â¿Â´Ã’»Ã©Êµ¼ÊÀý×Ó¡Ã
-         :!dir  -  Ã“ÃÓÚÃÔʾµ±Ç°Ä¿Â¼µÄÄÚÈá£
-         :!rm FILENAME  -      Ã“ÃÓÚɾ³ýÃûΪ FILENAME ÂµÃ„Îļþ¡£
+     Ã‡Ã«Â¿Â´Ã’»Ã©Êµ¼ÊÀý×Ó£º
+        (MS-DOS)         (Unix)
+         :!dir            :!ls            -  Ã“ÃÓÚÃÔʾµ±Ç°Ä¿Â¼µÄÄÚÈá£
+         :!del FILENAME   :!rm FILENAME   -  Ã“ÃÓÚɾ³ýÃûΪ FILENAME ÂµÃ„Îļþ¡£
 
   2. :w FILENAME  Â¿Ã‰Â½Â«ÂµÂ±Ã‡Â° VIM Ã–ÃÕýÔڱ༭µÄÎļþ±£´æµ½ÃûΪ FILENAME ÂµÃ„ÎÄ
      Â¼Ã¾Ã–á£
 
-  3. :#,#w FILENAME Â¿Ã‰Â½Â«ÂµÂ±Ã‡Â°Â±Ã Â¼Â­ÃŽÃ„¼þµÚ # ÃÃÖõڠ# ÃõÄÄÚÈñ£´æµ½Îļþ
+  3. v motion :w FILENAME Â¿Ã‰Â½Â«ÂµÂ±Ã‡Â°Â±Ã Â¼Â­ÃŽÃ„¼þÖÿÉÊÓģʽÃÂÑ¡ÖõÄÄÚÈñ£´æµ½Îļþ
      FILENAME Ã–á£
 
   4. :r FILENAME Â¿Ã‰ÃŒÃ¡ÃˆÂ¡Â´Ã…ÅÌÎļþ FILENAME Â²Â¢Â½Â«Ã†Ã¤Â²Ã¥ÃˆÃ«ÂµÂ½ÂµÂ±Ã‡Â°ÃŽÃ„¼þµÄ¹â±êλÖÃ
      ÂºÃ³ÃƒÃ¦Â¡Â£
 
-
-
-
-
+  5. :r !dir Â¿Ã‰Ã’Ô¶ÃÈ¡ dir ÃƒÃ¼ÃîµÄÊä³ö²¢½«Æä·ÅÖõ½µ±Ç°ÎļþµÄ¹â±êλÖúóÃæ¡£
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                        ÂµÃšÃù½²µÚÒ»½Ú¡Ã´ò¿ªÀàÃüÃî
+                        ÂµÃšÃù½²µÚÒ»½Ú£º´ò¿ªÀàÃüÃî
 
 
         ** ÃŠÃ¤ÃˆÃ« o Â½Â«Ã”Ú¹â±êµÄ÷½´ò¿ªÃµÄÒ»Ãò¢½øÈë²åÈëģʽ¡£**
 
   1. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„ÄÇÒ»Ãá£
 
-  2. Â½Ã“×ÅÊäÈëáôµÄ o Ã”Ú¹â±ê *÷½* Â´Ã²Â¿ÂªÃµÄÒ»Ãò¢½øÈë²åÈëģʽ¡£
+  2. Â½Ã“×ÅÊäÈëáôµÄ o Ã”Ú¹â±ê *÷½* Â´Ã²Â¿ÂªÃµÄÒ»Ãã¬Õâ¸öÃüÃî»áʹÄú
+     Â½Ã¸ÃˆÃ«Â²Ã¥ÃˆÃ«Ã„£Ê½¡£
 
-  3. ÃˆÂ»ÂºÃ³Â¸Â´Ã–Ʊê¼ÇÓà---> ÂµÃ„Ãò¢°´ <ESC> Â¼Ã¼Ã˳ö²åÈëģʽ¶ø½øÈëÕý³£Ä£Ê½¡£
+  3. ÃˆÂ»ÂºÃ³ÃŠÃ¤ÃˆÃ«Ã’»Ã©ÎÄ×Ö£¬Ö®ºó°´ <ESC> Â¼Ã¼Ã˳ö²åÈëģʽ¶ø½øÈëÕý³£Ä£Ê½¡£
 
 ---> After typing  o  the cursor is placed on the open line in Insert mode.
 
   4. ÃŽÂªÃËÔÚ¹â±ê *É÷½* Â´Ã²Â¿ÂªÃµÄÒ»Ãã¬Ö»ÃèÒªÊäÈë´óôµÄ O Â¶Ã¸Â²Â»ÃŠÃ‡Ã¡Ã´µÄ o
-     Â¾Ã¿ÉÒÔÃË¡£ÇëÔÚÃÂÃòâÊÔһðɡ£µ±¹â±ê´¦ÔÚÔÚ¸ÃÃÃÉÃʱ£¬°´ Shift-O¿ÉÒÔ
-     Ã”Ú¸ÃÃÃÉ÷½Ã¿ªÒ»Ãá£
-
-Open up a line above this by typing Shift-O while the cursor is on this line.
+     Â¾Ã¿ÉÒÔÃË¡£ÇëÔÚÃÂÃòâÊÔһðɡ£
 
+---> Open up a line above this by typing O while the cursor is on this line.
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       ÂµÃšÃù½²µÚ¶þ½Ú¡Ã¹â±êºó²åÈëÀàÃüÃî
+                       ÂµÃšÃù½²µÚ¶þ½Ú£º¸½¼ÓÀàÃüÃî
 
 
                     ** ÃŠÃ¤ÃˆÃ« a Â½Â«Â¿Ã‰Ã”Ú¹â±êÖ®ºó²åÈëÎı¾¡£ **
 
-  1. Ã‡Ã«Ã”ÚÕý³£Ä£Ê½ÃÂè¹ýÊäÈë $ Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„µÚÒ»ÃÃ
-     ÂµÃ„ĩβ¡£
+  1. Ã‡Ã«Ã”ÚÕý³£Ä£Ê½Ã½«¹â±êÒƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„µÚÒ»ÃõÄÃÃÊס£
+
+  2. Â½Ã“×ÅÊäÈë e Ã–±µ½¹â±êλÓÚ li ÂµÃ„ĩβ¡£
 
-  2. Â½Ã“×ÅÊäÈëáôµÄ a Ã”ò¿ÉÔÚ¹â±êÖ®ºó²åÈëÎı¾ÃË¡£´óôµÄ A Ã”ò¿ÉÒÔÖ±½ÓÔÚÃÃ
-     Ã„©²åÈëÎı¾¡£
+  3. ÃŠÃ¤ÃˆÃ«Ã¡Ã´µÄ a Ã”ò¿ÉÔÚ¹â±êÖ®ºó²åÈëÎı¾ÃË¡£
 
-Ìáʾ¡ÃÊäÈë´óô A ÂµÃ„²Ù×÷·½·¨¿ÉÒÔÔÚÃÃÄ©²åÈëÎı¾£¬±ÜÃâÃËÊäÈë i£¬¹â±ê¶¨Î»µ½
-      Ã—îºóÒ»¸ö×Ö·û£¬ÊäÈëµÄÎı¾£¬<ESC> Â»Ã˜Â¸Â´Ã•Ã½Â³Â£Ã„£Ê½£¬¼ý÷ÓÒ¼üÒƶ¯¹â±êÒÔ¼°
-      x Ã‰Â¾Â³Ã½ÂµÂ±Ã‡Â°Â¹Ã¢Â±ÃªÃ‹Ã¹Ã”ÚλÖÃ×Ö·ûµÈµÈÖî¶à·±ÔӵIJÙ×÷¡£
+  4. Â½Â«ÂµÂ¥Â´ÃŠÂ²Â¹Â³Ã¤ÃêÕû£¬¾ÃÃñÃÂÒ»ÃÃÖõÄÄÇÑù¡£Ö®ºó°´ <ESC> Â¼Ã¼Ã˳ö²åÈëģʽ»Øµ½
+     Ã•Ã½Â³Â£Ã„£Ê½¡£
 
-  3. Â²Ã™Ã—÷Ö®ºóµÚÒ»ÃþÿÉÒÔ²¹³äÃêÕûÃË¡£Çë×¢Òâ¹â±êºó²åÈëÎı¾Óë²åÈëģʽÊÇ»ù
-     Â±Â¾ÃêÈ«Ò»Öµģ¬Ö»ÊÇÎı¾²åÈëµÄλÖö¨Î»ÉÔÓò»Ã¬°ÕÃË¡£
+  5. ÃŠÂ¹Ã“àe Ã’ƶ¯¹â±êµ½ÃÂÒ»²½²»ÃêÕûµÄµ¥´Ê£¬Öظ´²½Öè3ºÃ²½Öè4¡£
 
----> This line will allow you to practice
----> This line will allow you to practice appending text to the end of a line.
+---> This li will allow you to pract appendi text to a line.
+---> This line will allow you to practice appending text to a line.
 
+Ìáʾ£ºa¡¢i ÂºÃ A Â¶Â¼Â»Ã¡Â´Ã¸Ã„ú½øÈë²åÈëģʽ£¬Î©Ò»µÄÇø±ðÔÚÓÚ×Ö·û²åÈëµÄλÖá£
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                   ÂµÃšÃù½²µÚÈý½Ú¡ÃÃíÃâÒ»¸öÖû»ÀàÃüÃîµÄ°æ±¾
+                   ÂµÃšÃù½²µÚÈý½Ú£ºÃíÃâÒ»¸öÖû»ÀàÃüÃîµÄ°æ±¾
 
 
                      ** ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´µÄ R Â¿Ã‰Ã¬ÃøÌæ»»¶à¸ö×Ö·û¡£**
 
-  1. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„µÚÒ»Ãá£
-
-  2. Ã’ƶ¯¹â±êµ½µÚÒ»ÃÃÖò»Ã¬ÓÚ±êÓà---> ÂµÃ„µÚ¶þÃõĵÚÒ»¸öµ¥´ÊµÄ¿ªÊ¼£¬¼´µ¥
-     Â´ÃŠ last Â´Â¦Â¡Â£
+  1. Ã‡Ã«Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½±¾½ÚÖÃÃÂÃæ±ê¼ÇÓà---> ÂµÃ„µÚÒ»Ãá£Òƶ¯¹â±êµ½µÚÒ»¸ö xxx ÂµÃ„
+     Ã†Ã°ÃŠÂ¼ÃŽÂ»Ã–á£
 
-  3. ÃˆÂ»ÂºÃ³ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´µÄ R Â¿ÂªÃŠÂ¼Â°Ã‘µÚÒ»ÃÃÖõIJ»Ã¬ÓÚµÚ¶þÃõÄÊ£Óà×Ö·ûÖðÒ»ÊäÈ룬¾Ã
+  2. ÃˆÂ»ÂºÃ³ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´µÄ R Â¿ÂªÃŠÂ¼Â°Ã‘µÚÒ»ÃÃÖõIJ»Ã¬ÓÚµÚ¶þÃõÄÊ£Óà×Ö·ûÖðÒ»ÊäÈ룬¾Ã
      Â¿Ã‰Ã’ÔÈ«²¿Ìæ»»µôÔ­ÓõÄ×Ö·û¶øʹµÃµÚÒ»ÃÃÃêÈ«À×ìµÚ¶þÃÃÃË¡£
 
----> To make the first line the same as the last on this page use the keys.
----> To make the first line the same as the second, type R and the new text.
+  3. Â½Ã“×Å°´ <ESC> Â¼Ã¼Ã˳öÌ滻ģʽ»Øµ½Õý³£Ä£Ê½¡£Äú¿ÉÒÔ×¢Òâµ½ÉÃδÌæ»»µÄÎı¾
+     ÃˆÃ”È»±£³ÖÔ­×´¡£
 
-  4. Ã‡Ã«Ã—¢Òâ¡ÃÈç¹ûÄú°´ <ESC> Ã˳öÖû»Ä£Ê½»Ø¸´Õý³£Ä£Ê½£¬ÉÃδÌæ»»µÄÎı¾½«ÈÔ
-     ÃˆÂ»Â±Â£Â³Ã–Ô­×´¡£
+  4. Ã–ظ´ÒÔÉò½Ö裬½«Ê£ÓàµÄ xxx Ã’²Ìæ»»µô¡£
 
+---> Adding 123 to xxx gives you xxx.
+---> Adding 123 to 456 gives you 579.
 
+Ìáʾ£ºÌ滻ģʽÓë²åÈëģʽÃàËÆ£¬²»¹ýÿ¸öÊäÈëµÄ×Ö·û¶¼»áɾ³ýÒ»¸öÒÑÓõÄ×Ö·û¡£
 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ÂµÃšÃù½²µÚËĽڣº¸´ÖÆÕ³ÌùÎı¾
 
 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                           ÂµÃšÃù½²µÚËĽڡÃÉèÖÃÀàÃüÃîµÄÑ¡Ãî
+                ** ÃŠÂ¹Ã“òÙ×÷·û y Â¸Â´Ã–ÆÎı¾£¬Ê¹Óàp Ã•Â³ÃŒÃ¹ÃŽÃ„±¾ **
 
+  1. Â¶Â¨ÃŽÂ»ÂµÂ½ÃÂÃæ±ê¼ÇÓà---> ÂµÃ„Ò»Ã㬽«¹â±êÒƶ¯µ½ "a)" Ã–®ºó¡£
 
-                 ** Ã‰Ã¨Ã–ÿÉʹ²éÕÒ»òÕßÌæ»»¿ÉºöÂÔ´óáôµÄÑ¡Ãî **
+  2. Â½Ã“×ÅʹÓàv Â½Ã¸ÃˆÃ«Â¿Ã‰ÃŠÃ“ģʽ£¬Òƶ¯¹â±êµ½ "first" ÂµÃ„Ç°Ãæ¡£
 
+  3. ÃÖÔÚÊäÈë y Ã’Ô³é³ö(¸´ÖÆ)¸ßÃõÄÎı¾¡£
 
-  1. Ã’ª²éÕÒµ¥´Ê ignore Â¿Ã‰Ã”ÚÕý³£Ä£Ê½ÃÂÊäÈë /ignore Â¡Â£Ã’ªÖظ´²éÕҸôʣ¬¿ÉÒÔ
-     Ã–ظ´°´ n Â¼Ã¼Â¡Â£
+  4. ÃˆÂ»ÂºÃ³Ã’ƶ¯¹â±êµ½ÃÂÒ»ÃõÄĩβ£ºj$
 
-  2. ÃˆÂ»ÂºÃ³Ã‰Ã¨Ã–àic Ã‘¡Ãî(ic¾ÃÊÇÓ¢ÎĺöÂÔ´óáôIgnore CaseµÄÊ××ÖĸËõô´Ê)£¬¼´
-     ÃŠÃ¤ÃˆÃ«Â¡Ãƒ
-       :set ic
+  5. Â½Ã“×ÅÊäÈë p Ã’Ô·ÅÖÃ(Õ³Ìù)¸´ÖÆÃ˵ÄÎı¾¡£È»ºóÊäÈ룺a second <ESC>¡£
 
-  3. ÃÖÔÚ¿ÉÒÔè¹ý¼üÈë n Â¼Ã¼Ã”ٴβéÕÒµ¥´Ê ignore¡£Öظ´²éÕÒ¿ÉÒÔÖظ´¼üÈë n Â¼Ã¼Â¡Â£
+  6. ÃŠÂ¹Ã“ÿÉÊÓģʽѡÖà" item."£¬Óày Â¸Â´Ã–Æ£¬ÔÙÓàj$ Â½Â«Â¹Ã¢Â±ÃªÃ’ƶ¯µ½ÃÂÒ»ÃÃĩ⣬
+     Ã“àp Â½Â«ÃŽÃ„±¾Õ³Ìùµ½ÄÇÀï¡£
 
-  4. ÃˆÂ»ÂºÃ³Ã‰Ã¨Ã–àhlsearch ÂºÃ incsearch Ã•Ã¢Ã½¸öÑ¡ÃÊäÈëÒÔÃÂÄÚÈáÃ
-     :set hls is
+--->  a) this is the first item.
+      b)
 
-  5. ÃÖÔÚ¿ÉÒÔÔÙ´ÎÊäÈë²éÕÒÃüÃ¿´¿´»áÓÃʲôç¹û¡Ã
-     /ignore
+  ÃŒÃ¡ÃŠÂ¾Â£ÂºÃ„ú»¹¿ÉÒÔ°Ñ y ÂµÂ±Ã—÷²Ù×÷·ûÀ´Ê¹Óã»ÀýÈç yw Â¿Ã‰Ã’ÔÓÃÀ´¸´ÖÆÒ»¸öµ¥´Ê¡£
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                              ÂµÃšÃù½²Ã¡½á
+                           ÂµÃšÃù½²µÚÎå½Ú£ºÉèÖÃÀàÃüÃîµÄÑ¡Ãî
 
 
-  1. ÃŠÃ¤ÃˆÃ«Ã¡Ã´µÄ o Â¿Ã‰Ã’ÔÔÚ¹â±ê÷½´ò¿ªÃµÄÒ»Ãò¢½«¹â±êÖÃÓÚÿªµÄÃÃÊ×£¬½øÈë
-     Â²Ã¥ÃˆÃ«Ã„£Ê½¡£
-     ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´µÄ O Â¿Ã‰Ã’ÔÔÚ¹â±êÉ÷½´ò¿ªÃµÄÒ»Ãò¢½«¹â±êÖÃÓÚÿªµÄÃÃÊ×£¬½øÈë
-     Â²Ã¥ÃˆÃ«Ã„£Ê½¡£
+                 ** Ã‰Ã¨Ã–ÿÉʹ²éÕÒ»òÕßÌæ»»¿ÉºöÂÔ´óáôµÄÑ¡Ãî **
 
-  2. ÃŠÃ¤ÃˆÃ«Ã¡Ã´µÄ a Â¿Ã‰Ã’ÔÔÚ¹â±êËùÔÚλÖÃÖ®ºó²åÈëÎı¾¡£
-     ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´µÄ A Â¿Ã‰Ã’ÔÔÚ¹â±êËùÔÚÃõÄÃÃÄ©Ö®ºó²åÈëÎı¾¡£
+  1. Ã’ª²éÕÒµ¥´Ê ignore Â¿Ã‰Ã”ÚÕý³£Ä£Ê½ÃÂÊäÈë /ignore <»Ø³µ>¡£
+     Ã’ªÖظ´²éÕҸôʣ¬¿ÉÒÔÖظ´°´ n Â¼Ã¼Â¡Â£
+
+  2. ÃˆÂ»ÂºÃ³Ã‰Ã¨Ã–àic Ã‘¡Ãî(Ignore Case£¬ºöÂÔ´óáô)£¬ÇëÊäÈ룺 :set ic
+
+  3. ÃÖÔÚ¿ÉÒÔè¹ý¼üÈë n Â¼Ã¼Ã”ٴβéÕÒµ¥´Ê ignore¡£×¢Òâµ½ Ignore ÂºÃ IGNORE ÃÖÔÚ
+     Ã’²±»ÕÒµ½ÃË¡£
 
-  3. ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´µÄ R Â½Â«Â½Ã¸ÃˆÃ«ÃŒÃ¦Â»Â»Ã„£Ê½£¬Ö±Öð´ <ESC> Â¼Ã¼Ã˳öÌ滻ģʽ¶ø½øÈëÕý³£
-     Ã„£Ê½¡£
+  4. ÃˆÂ»ÂºÃ³Ã‰Ã¨Ã–àhlsearch ÂºÃ incsearch Ã•Ã¢Ã½¸öÑ¡ÃÇëÊäÈ룺 :set hls is
 
-  4. ÃŠÃ¤ÃˆÃ« :set xxx Â¿Ã‰Ã’ÔÉèÖàxxx Ã‘¡Ãî¡£
+  5. ÃÖÔÚ¿ÉÒÔÔÙ´ÎÊäÈë²éÕÒÃüÃ¿´¿´»áÓÃʲôç¹û£º /ignore <»Ø³µ>
 
+  6. Ã’ª½ûÓúöÂÔ´óáô£¬ÇëÊäÈ룺 :set noic
+
+Ìáʾ£ºÒªÒƳýÆ¥ÅäÃîµÄ¸ßÃÃÃÔʾ£¬ÇëÊäÈ룺  :nohlsearch
+Ìáʾ£ºÈç¹ûÄúÃëÒª½öÔÚÒ»´Î²éÕÒʱºöÂÔ×Öĸ´óáô£¬Äú¿ÉÒÔʹÓà\c£º
+      /ignore\c <»Ø³µ>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ÂµÃšÃù½²Ã¡½á
 
+  1. ÃŠÃ¤ÃˆÃ«Ã¡Ã´µÄ o Â¿Ã‰Ã’ÔÔÚ¹â±ê÷½´ò¿ªÃµÄÒ»Ãò¢½øÈë²åÈëģʽ¡£
+     ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´µÄ O Â¿Ã‰Ã’ÔÔÚ¹â±êÉ÷½´ò¿ªÃµÄÒ»Ãá£
 
+  2. ÃŠÃ¤ÃˆÃ«Ã¡Ã´µÄ a Â¿Ã‰Ã’ÔÔÚ¹â±êËùÔÚλÖÃÖ®ºó²åÈëÎı¾¡£
+     ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´µÄ A Â¿Ã‰Ã’ÔÔÚ¹â±êËùÔÚÃõÄÃÃÄ©Ö®ºó²åÈëÎı¾¡£
 
+  3. e ÃƒÃ¼Ãî¿ÉÒÔʹ¹â±êÒƶ¯µ½µ¥´Êĩβ¡£
 
+  4. Â²Ã™Ã—÷·û y Â¸Â´Ã–ÆÎı¾£¬p Ã•Â³ÃŒÃ¹ÃÈÇ°¸´ÖƵÄÎı¾¡£
 
+  5. ÃŠÃ¤ÃˆÃ«Â´Ã³Ã´µÄ R Â½Â«Â½Ã¸ÃˆÃ«ÃŒÃ¦Â»Â»Ã„£Ê½£¬Ö±Öð´ <ESC> Â¼Ã¼Â»Ã˜ÂµÂ½Ã•Ã½Â³Â£Ã„£Ê½¡£
 
+  6. ÃŠÃ¤ÃˆÃ« :set xxx Â¿Ã‰Ã’ÔÉèÖàxxx Ã‘¡ÃһéÓÃÓõÄÑ¡ÃîÈçÃ壼
+       'ic' 'ignorecase'       Â²Ã©Ã•Ã’ʱºöÂÔ×Öĸ´óáô
+       'is' 'incsearch'        Â²Ã©Ã•Ã’¶ÌÓïʱÃÔʾ²¿·ÖÆ¥Åä
+       'hls' 'hlsearch'        Â¸ÃŸÃÃÃÔʾËùÓõÄÆ¥Åä¶ÌÓï
+     Ã‘¡ÃîÃû¿ÉÒÔÓÃÃêÕû°æ±¾£¬Ò²¿ÉÒÔÓÃËõÂÔ°æ±¾¡£
 
+  7. Ã”ÚÑ¡ÃîÇ°¼ÓÉàno Â¿Ã‰Ã’ԹرÕÑ¡Ã  :set noic
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      ÂµÃšÃ†ÃŸÂ½Â²Â¡ÃƒÃ”ÚÃß°ïÖúÃüÃî
+                         ÂµÃšÃ†ÃŸÂ½Â²ÂµÃšÃ’»½Ú£º»ñÈ¡°ïÖúÃÅâ
+
 
                      ** ÃŠÂ¹Ã“ÃÔÚÃß°ïÖúõó **
 
   Vim Ã“µÓÃÒ»¸öøÖÂÈ«ÃæµÄÔÚÃß°ïÖúõó¡£ÒªÆô¶¯¸Ã°ïÖúõó£¬ÇëÑ¡ÔñÈçÃÂÈýÖÖ·½
-  Â·Â¨Ã–®Ò»¡Ã
+  Â·Â¨Ã–®Ò»£º
        - Â°Â´Ã <HELP> Â¼Ã¼ (Èç¹û¼üÅÌÉÃÓõĻ°)
        - Â°Â´Ã <F1> Â¼Ã¼ (Èç¹û¼üÅÌÉÃÓõĻ°)
        - ÃŠÃ¤ÃˆÃ«  :help <»Ø³µ>
 
+  Ã‡Ã«Ã”ĶðïÖú´°¿ÚÖõÄÎÄ×ÖÒÔÃ˽â°ïÖúÊÇÈçºÎ¹¤×÷µÄ¡£
+  ÃŠÃ¤ÃˆÃ« CTRL-W CTRL-W   Â¿Ã‰Ã’ÔʹÄúÔÚ´°¿ÚÖ®¼äÌøת¡£
   ÃŠÃ¤ÃˆÃ« :q <»Ø³µ> Â¿Ã‰Ã’ԹرհïÖú´°¿Ú¡£
 
   ÃŒÃ¡Â¹Â©Ã’»¸öÕýÈ·µÄ²ÎÊý¸ø":help"ÃüÃÄú¿ÉÒÔÕÒµ½¹ØÓÚ¸ÃÖ÷ÌâµÄ°ïÖú¡£ÇëÊÔÑéÒÔ
-  Ã²ÎÊý(¿É±ðÃüÃË°´»Ø³µ¼üŶ¡£:)¡Ã
+  Ã²ÎÊý(¿É±ðÃüÃË°´»Ø³µ¼üŶ)£º
+
+       :help w
+       :help c_CTRL-D
+       :help insert-index
+       :help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ÂµÃšÃ†ÃŸÂ½Â²ÂµÃšÂ¶Ã¾Â½ÃšÂ£ÂºÂ´Â´Â½Â¨Ã†Ã´Â¶Â¯Â½Ã…±¾
+
 
-         :help w <»Ø³µ>
-         :help c_<T <»Ø³µ>
-         :help insert-index <»Ø³µ>
-         :help user-manual <»Ø³µ>
+                         ** Ã†Ã´Ã“àVim ÂµÃ„ÌØÃÔ **
 
+  Vim ÂµÃ„¹¦ÄÜÌØÃÔÒª±È Vi Â¶Ã ÂµÃƒÂ¶Ã Â£Â¬ÂµÂ«Ã†Ã¤Ã–ô󲿷ֶ¼Ã»ÓÃȱʡÆôÓá£ÎªÃËʹÓøü¶àµÄ
+  ÃŒÃ˜ÃÔ£¬ÄúµÃ´´½¨Ò»¸ö vimrc ÃŽÃ„¼þ¡£
 
+  1. Â¿ÂªÃŠÂ¼Â±Ã Â¼Â­ vimrc ÃŽÃ„¼þ£¬¾ßÌåÃüÃîÈ¡¾öÓÚÄúËùʹÓõIJÙ×÷õó£º
+        :edit ~/.vimrc         Ã•Ã¢ÃŠÃ‡ Unix ÃµÃ³ËùʹÓõÄÃüÃî
+        :edit $VIM/_vimrc      Ã•Ã¢ÃŠÃ‡ MS-Windows ÃµÃ³ËùʹÓõÄÃüÃî
 
+  2. Â½Ã“×ŶÃÈ¡ vimrc ÃŠÂ¾Ã€Ã½ÃŽÃ„¼þµÄÄÚÈãº
+        :r $VIMRUNTIME/vimrc_example.vim
+
+  3. Â±Â£Â´Ã¦ÃŽÃ„¼þ£¬ÃüÃîΪ£º
+        :write
+
+  Ã´ÎÄúÆô¶¯ Vim ÃŠÂ±Â£Â¬Â±Ã Â¼Â­Ã†Ã·Â¾Ã»áÓÃÃËÓï·¨¸ßÃõŦÄÜ¡£
+  Ã„ú¿ÉÒÔ°ÑÄúò»¶µÄ¸÷ÖÖÉèÖÃÌí¼Óµ½Õâ¸ö vimrc ÃŽÃ„¼þÖá£
+  Ã’ªÃ˽â¸ü¶àÃÅâÇëÊäÈë :help vimrc-intro
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      ÂµÃšÂ°Ã‹Â½Â²Â¡ÃƒÂ´Â´Â½Â¨Ã’»¸öÆô¶¯½Å±¾
+                           ÂµÃšÃ†ÃŸÂ½Â²ÂµÃšÃˆÃ½Â½ÃšÂ£ÂºÂ²Â¹ÃˆÂ«Â¹Â¦Ã„Ãœ
 
-                         ** Ã†Ã´Ã“ÃvimµÄ¹¦ÄÜ **
 
-  VimµÄ¹¦ÄÜÌØÃÔÒª±Èvi¶àµÃ¶à£¬µ«´ó²¿·Ö¹¦Äܶ¼Ã»ÓÃȱʡ¼¤»î¡£ÎªÃËÆô¶¯¸ü¶àµÄ
-  Â¹Â¦Ã„Ü£¬ÄúµÃ´´½¨Ò»¸övimrcÎļþ¡£
+             ** ÃŠÂ¹Ã“àCTRL-D ÂºÃ <TAB> Â¿Ã‰Ã’Ô½øÃÃÃüÃîÃò¹È« **
 
-  1. Â¿ÂªÃŠÂ¼Â±Ã Â¼Â­vimrcÎļþ£¬ÕâÈ¡¾öÓÚÄúËùʹÓõIJÙ×÷õó¡Ã
+  1. Ã‡Ã«ÃˆÂ·Â±Â£ Vim Â²Â»ÃŠÃ‡Ã”ÚÒÔ¼æÈÃģʽÔËÃ㺠:set nocp
 
-     :edit ~/.vimrc            Ã•Ã¢ÃŠÃ‡UnixõóËùʹÓõÄÃüÃî
-     :edit $VIM/_vimrc         Ã•Ã¢ÃŠÃ‡WindowsõóËùʹÓõÄÃüÃî
+  2. Â²Ã©Â¿Â´Ã’»Ãµ±Ç°Ä¿Â¼ÃÂÒѾ­´æÔÚÄÄéÎļþ£¬ÊäÈ룺 :!ls   Â»Ã²Ã•ÃŸ  :!dir
 
-  2. Â½Ã“×ŵ¼Èëvimrc·¶ÀýÎļþ¡Ã
+  3. ÃÖÔÚÊäÈëÒ»¸öĿ¼µÄÆðʼ²¿·Ö£¬ÀýÈçÊäÈ룺 :e
 
-     :read $VIMRUNTIME/vimrc_example.vim
+  4. Â½Ã“×Å°´ CTRL-D Â¼Ã¼Â£Â¬Vim Â»Ã¡ÃÔʾÒÔ e Â¿ÂªÃŠÂ¼ÂµÃ„ÃüÃîµÄÃÃ񡭜
 
-  3. Â±Â£Â´Ã¦ÃŽÃ„¼þ£¬ÃüÃîΪ¡Ã
+  5. ÃˆÂ»ÂºÃ³Â°Â´ <TAB> Â¼Ã¼Â£Â¬Vim Â»Ã¡Â²Â¹ÃˆÂ«ÃƒÃ¼ÃîΪ :edit Â¡Â£
 
-     :write
+  6. ÃÖÔÚÌí¼ÓÒ»¸ö¿Õ¸ñ£¬ÒÔ¼°Ò»¸öÒÑÓÃÎļþµÄÎļþÃûµÄÆðʼ²¿·Ö£¬ÀýÈ磺 :edit FIL
 
-  Ã”ÚôÎÄúÆô¶¯vimµÄʱºò£¬±à¼­Æ÷¾Ã»áÓÃÃËÓï·¨¸ßÃõŦÄÜ¡£Äú¿ÉÒÔ¼ÌÃø°ÑÄúò
-  Â»Â¶ÂµÃ„ÆäËü¹¦ÄÜÉèÖÃÌí¼Óµ½Õâ¸övimrcÎļþÖá£
+  7. Â½Ã“×Å°´ <TAB> Â¼Ã¼Â£Â¬Vim Â»Ã¡Â²Â¹ÃˆÂ«ÃŽÃ„¼þÃû(Èç¹ûËüÊÇΩһƥÅäµÄ)¡£
+
+Ìáʾ£º²¹È«¶ÔÓÚÃí¶àÃüÃÓÃç¡£ÄúÖ»Ãè³¢ÊÔ°´ CTRL-D ÂºÃ <TAB>¡£
+      Ã‹Ã¼Â¶Ã”ÓÚ :help ÃƒÃ¼Ãî·Ç³£ÓÃ
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                                 ÂµÃšÃ†ÃŸÂ½Â²Ã¡½á
 
-  vim Â½ÃŒÂ³ÃŒÂµÂ½Â´Ã‹Â½Ã¡ÃŠÃ¸Â¡Â£Â±Â¾Â½ÃŒÂ³ÃŒÃ–»ÊÇΪÃ˼òÃ÷µØ½éÉÜÒ»ÃÂvim±à¼­Æ÷£¬µ«ÒÑ×ãÒÔÈÃÄú
-  ÂºÃœÃˆÃÒ×ѧ»áʹÓñ¾±à¼­Æ÷ÃË¡£ÎãÓ¹ÖÊÒÉ£¬vim»¹ÓúܶàºÜ¶àµÄÃüÃ±¾½Ì³ÌËù½é
-  Ã‰ÃœÂµÃ„»¹²îµÃÔ¶ÖøÄØ¡£ËùÒÔÄúÒª¾«Ã¨µÄ»°£¬»¹Ãû¼ÌÃøŬæŶ¡£ÃÂÒ»²½Äú¿ÉÒÔÔĶÃ
-  vimÊֲᣬʹÓõÄÃüÃîÊÇ¡Ã
-       :help user-manual
 
-  ÃŽÂªÃ˸ü½øÒ»²½µÄ²Î¿¼ºÃѧð£¬ÒÔÃÂÕâ±¾ÊéÖµµÃÃƼö¡Ã
+  1. ÃŠÃ¤ÃˆÃ« :help Â»Ã²Ã•ÃŸÂ°Â´ <F1> Â¼Ã¼Â»Ã² <Help> Â¼Ã¼Â¿Ã‰Ã’Ô´ò¿ª°ïÖú´°¿Ú¡£
 
-       Vim - Vi Improved - Ã—÷Õß¡ÃSteve Oualline
-       Â³Ã¶Â°Ã¦Ã‰Ã§Â¡ÃƒNew Riders
+  2. ÃŠÃ¤ÃˆÃ« :help cmd Â¿Ã‰Ã’ÔÕÒµ½¹ØÓÚ cmd ÃƒÃ¼ÃîµÄ°ïÖú¡£
 
-  Ã•Ã¢ÃŠÃ‡ÂµÃšÃ’»±¾ÃêÈ«½²½âvimµÄÊé¼®¡£¶ÔÓÚ³õѧÕßÌرðÓÃÓá£ÆäÖû¹°üº¬ÓôóÿʵÀý
-  ÂºÃüʾ¡£ÓûÖªÃêÇ飬Çë·ÃÎÊ http://iccf-holland.org/click5.html
+  3. ÃŠÃ¤ÃˆÃ« CTRL-W CTRL-W  Â¿Ã‰Ã’ÔʹÄúÔÚ´°¿ÚÖ®¼äÌøת¡£
 
-  Ã’ÔÃÂÕâ±¾Êé±È½ÃÀÃÃ˶øÇÒÄÚÈÃÖ÷ÒªÊÇvi¶ø²»ÊÇvim£¬µ«ÊÇÒ²ÖµµÃÃƼö¡Ã
+  4. ÃŠÃ¤ÃˆÃ« :q Ã’ԹرհïÖú´°¿Ú
 
-       Learning the Vi Editor - Ã—÷Õß¡ÃLinda Lamb
-       Â³Ã¶Â°Ã¦Ã‰Ã§Â¡ÃƒO'Reilly & Associates Inc.
+  5. Ã„ú¿ÉÒÔ´´½¨Ò»¸ö vimrc Ã†Ã´Â¶Â¯Â½Ã…±¾ÎļþÓÃÀ´±£´æÄúÆ«ºÃµÄÉèÖá£
 
-  Ã•Ã¢ÃŠÃ‡Ã’»±¾²»´íµÄÊ飬è¹ýËüÄú¼¸ºõÄܹ»Ã˽⵽ȫ²¿viÄܹ»×öµ½µÄÊÂÇé¡£´ËÊéµÄµÚ
-  Ãù¸ö°æ±¾Ò²°üº¬ÃËһé¹ØÓÚvimµÄÃÅâ¡£
+  6. ÂµÂ±ÃŠÃ¤ÃˆÃ« : ÃƒÃ¼Ãîʱ£¬°´ CTRL-D Â¿Ã‰Ã’Բ鿴¿ÉÄܵIJ¹È«½á¹û¡£
+     Â°Â´ <TAB> Â¿Ã‰Ã’ÔʹÓÃÒ»¸ö²¹È«¡£
 
-  Â±Â¾Â½ÃŒÂ³ÃŒÃŠÃ‡Ã“ÉÀ´×ÔCalorado School of MineseµÄMichael C. Pierce¡¢Robert K.
-  Ware Ã‹Ã¹Â±Ã Ã´µÄ£¬ÆäÖÃÀ´×ÔColorado State UniversityµÄCharles SmithÌṩÃË
-  ÂºÃœÂ¶Ã Â´Â´Ã’â¡£±àÕßèÃŵØÖ·ÊÇ¡Ã
 
-       bware@mines.colorado.edu
 
-  Â±Â¾Â½ÃŒÂ³ÃŒÃ’ÑÓÉBram MoolenaarרΪvim½øÃÃÃÞ¶©¡£
 
 
 
-  Ã’ëÖÆÕ߸½ÑÔ¡Ã
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  vim Â½ÃŒÂ³ÃŒÂµÂ½Â´Ã‹Â¾Ã½áÊøÃË¡£±¾½Ì³ÌÖ»ÊÇΪÃ˼òÃ÷µØ½éÉÜһàVim Â±Ã Â¼Â­Ã†Ã·Â£Â¬ÂµÂ«Ã’Ñ×ãÒÔÈÃÄú
+  ÂºÃœÃˆÃÒ×ʹÓÃÕâ¸ö±à¼­Æ÷ÃË¡£ÎãÓ¹ÖÊÒÉ£¬vim»¹ÓúܶàºÜ¶àµÄÃüÃ±¾½Ì³ÌËù½é
+  Ã‰ÃœÂµÃ„¾àÀëÃêÕûµÄ²îµÃºÜÔ¶¡£ËùÒÔÄúÒª¾«Ã¨µÄ»°£¬»¹Ãû¼ÌÃøŬæŶ¡£ÃÂÒ»²½Äú¿ÉÒÔÔĶÃ
+  Vim ÂµÃ„Óû§ÊֲᣬʹÓõÄÃüÃîÊÇ£º :help user-manual
+
+  ÃÂÃæÕâ±¾ÊéÖµµÃÃƼöÓÃÓÚ¸ü½øÒ»²½µÄÔĶúÃѧð£º
+       Vim - Vi Improved - Ã—÷ÕߣºSteve Oualline
+       Â³Ã¶Â°Ã¦Ã‰Ã§Â£ÂºNew Riders
+  Ã•Ã¢ÃŠÃ‡ÂµÃšÃ’»±¾ÃêÈ«½²½â Vim ÂµÃ„Êé¼®¡£Ëü¶ÔÓÚ³õѧÕßÌرðÓÃÓá£ÆäÖðüº¬ÓôóÿʵÀý
+  ÂºÃüʾ¡£
+  Ã“ûÖªÃêÇ飬Çë·ÃÎÊ http://iccf-holland.org/click5.html
+
+  Ã’ÔÃÂÕâ±¾Êé±È½ÃÀÃÃ˶øÇÒÄÚÈøü¶àÊǹØÓÚ Vi Â¶Ã¸Â·Ã‡ Vim£¬µ«ÊÇÒ²ÖµµÃÃƼö£º
+       Learning the Vi Editor - Ã—÷ÕߣºLinda Lamb
+       Â³Ã¶Â°Ã¦Ã‰Ã§Â£ÂºO'Reilly & Associates Inc.
+  Ã•Ã¢ÃŠÃ‡Ã’»±¾²»´íµÄÊ飬è¹ýËüÄú¼¸ºõÄܹ»Ã˽⵽ÈκÎÄúÃëҪʹÓàVi Ã—öµÄÊÂÇé¡£
+  Â´Ã‹ÃŠÃ©ÂµÃ„µÚÃù¸ö°æ±¾Ò²°üº¬ÃËһé¹ØÓÚ Vim ÂµÃ„ÃÅâ¡£
+
+  Â±Â¾Â½ÃŒÂ³ÃŒÃŠÃ‡Ã“ÉÀ´×Ô Calorado School of Mines ÂµÃ„ Michael C. Pierce ÂºÃ
+  Robert K. Ware Ã‹Ã¹Â±Ã Ã´µÄ£¬ÆäÖúܶഴÒâÓÉÀ´×Ô Colorado State University ÂµÃ„
+  Charles Smith ÃŒÃ¡Â¹Â©Â¡Â£Â±Ã Ã•ÃŸÂµÃ„µç×ÓÓÊÃäÊÇ£ºbware@mines.colorado.edu
+
+  Â±Â¾Â½ÃŒÂ³ÃŒÃ’ÑÓÉ Bram Moolenaar Ã—¨Îª Vim Â½Ã¸ÃÃÃÞ¶©¡£
+
+  Ã’ëÖÆÕ߸½ÑÔ£º
   ===========
       Â¼Ã²ÃŒÃ¥Ã–ÃÎĽ̷̳­Òë°æÖ®ÒëÖÆÕßΪú²ýÌ© <beos@turbolinux.com.cn>£¬»¹ÓÃ
-      ÃíÃâÒ»¸öêõµØÖ·¡Ãlinuxrat@gnuchina.org¡£
+      ÃíÃâÒ»¸öêõµØÖ·£ºlinuxrat@gnuchina.org¡£
 
       Â·Â±ÃŒÃ¥Ã–ÃÎĽ̳ÌÊÇ´Ó¼òÌåÖÃÎĽ̷̳­Òë°æʹÓàDebian GNU/Linux Ã–ÃÎÄÃîĿá
       Ã—éµÄÓÚ¹ã»ÔÃÈÉú±àôµÄÖÃÎĺº×ÖתÂëÆ÷  autoconvert Ã—ª»»¶ø³ÉµÄ£¬²¢¶Ôת
       Â»Â»ÂµÃ„½á¹û×öÃËһéø½ÚµÄ¸Ä¶¯¡£
 
-  Â±Ã¤Â¸Ã¼Â¼Ã‡Ã‚¼¡Ã
+  Â±Ã¤Â¸Ã¼Â¼Ã‡Ã‚¼£º
   =========
+      2012Äê10ÔÂ01ÈՠÕÔÌΠ<alick9188@gmail.com>
+      Â½Â« vimtutor Ã–ÃÒë°æ´Ó 1.5 Ã‰Ã½Â¼Â¶ÂµÂ½ 1.7¡£
+
       2002Äê08ÔÂ30Èՠú²ýÌ© <beos@turbolinux.com.cn>
       Â¸Ãû RMS@SMTH ÂµÃ„Ö¸Õý£¬½«¶à´¦´íÎóÃÞÕý¡£
 
diff --git a/runtime/tutor/tutor.zh_cn.utf-8 b/runtime/tutor/tutor.zh_cn.utf-8
new file mode 100644 (file)
index 0000000..3ff031f
--- /dev/null
@@ -0,0 +1,996 @@
+===============================================================================
+=      æ¬¢     è¿Ž     é˜…     è¯»   ã€Š V I M  æ•™  ç¨‹ ã€‹   â€”—      ç‰ˆæœ¬ 1.7       =
+===============================================================================
+
+     Vim æ˜¯ä¸€ä¸ªå…·æœ‰å¾ˆå¤šå‘½ä»¤çš„功能éžå¸¸å¼ºå¤§çš„编辑器。é™äºŽç¯‡å¹…,在本教程当中
+     å°±ä¸è¯¦ç»†ä»‹ç»äº†ã€‚本教程的设计目标是讲述一些必è¦çš„基本命令,而掌æ¡å¥½è¿™
+     äº›å‘½ä»¤ï¼Œæ‚¨å°±èƒ½å¤Ÿå¾ˆå®¹æ˜“地将 Vim å½“作一个通用编辑器æ¥ä½¿ç”¨äº†ã€‚
+
+     å®Œæˆæœ¬æ•™ç¨‹çš„内容大约需è¦25-30分钟,å–决于您训练的时间。
+
+     æ³¨æ„:
+     æ¯ä¸€èŠ‚的命令æ“作将会更改本文。推è您å¤åˆ¶æœ¬æ–‡çš„一个副本,然åŽåœ¨å‰¯æœ¬ä¸Š
+     è¿›è¡Œè®­ç»ƒ(如果您是通过"vimtutor"æ¥å¯åŠ¨æ•™ç¨‹çš„,那么本文就已ç»æ˜¯å‰¯æœ¬äº†)。
+
+     åˆ‡è®°ä¸€ç‚¹ï¼šæœ¬æ•™ç¨‹çš„设计æ€è·¯æ˜¯åœ¨ä½¿ç”¨ä¸­è¿›è¡Œå­¦ä¹ çš„。也就是说,您需è¦é€šè¿‡
+     æ‰§è¡Œå‘½ä»¤æ¥å­¦ä¹ å®ƒä»¬æœ¬èº«çš„正确用法。如果您åªæ˜¯é˜…读而ä¸æ“作,那么您å¯èƒ½
+     ä¼šå¾ˆå¿«é—忘这些命令的ï¼
+
+     å¥½äº†ï¼ŒçŽ°åœ¨è¯·ç¡®å®šæ‚¨çš„Shift-Lock(大å°å†™é”定键)还没有按下,然åŽæŒ‰é”®ç›˜ä¸Š
+     çš„å­—æ¯é”® j è¶³å¤Ÿå¤šæ¬¡æ¥ç§»åŠ¨å…‰æ ‡ï¼Œç›´åˆ°ç¬¬ä¸€èŠ‚的内容能够完全充满å±å¹•ã€‚
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬ä¸€è®²ç¬¬ä¸€èŠ‚:移动光标
+
+
+            ** è¦ç§»åŠ¨å…‰æ ‡ï¼Œè¯·ä¾ç…§è¯´æ˜Žåˆ†åˆ«æŒ‰ä¸‹ hã€jã€kã€l é”®ã€‚ **
+
+            ^
+            k              æ示: h çš„é”®ä½äºŽå·¦è¾¹ï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±ä¼šå‘左移动。
+       < h      l >               l çš„é”®ä½äºŽå³è¾¹ï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±ä¼šå‘å³ç§»åŠ¨ã€‚
+            j                     j é”®çœ‹èµ·æ¥å¾ˆè±¡ä¸€æ”¯å°–端方å‘æœä¸‹çš„箭头。
+            v
+
+  1. è¯·éšæ„在å±å¹•å†…移动光标,直至您觉得舒æœä¸ºæ­¢ã€‚
+
+  2. æŒ‰ä¸‹ä¸‹è¡Œé”®(j),直到出现光标é‡å¤ä¸‹è¡Œã€‚
+
+---> çŽ°åœ¨æ‚¨åº”该已ç»å­¦ä¼šå¦‚何移动到下一讲å§ã€‚
+
+  3. çŽ°åœ¨è¯·ä½¿ç”¨ä¸‹è¡Œé”®ï¼Œå°†å…‰æ ‡ç§»åŠ¨åˆ°ç¬¬ä¸€è®²ç¬¬äºŒèŠ‚。
+
+æ示:如果您ä¸æ•¢ç¡®å®šæ‚¨æ‰€æŒ‰ä¸‹çš„å­—æ¯ï¼Œè¯·æŒ‰ä¸‹<ESC>键回到正常(Normal)模å¼ã€‚
+      ç„¶åŽå†æ¬¡ä»Žé”®ç›˜è¾“入您想è¦çš„命令。
+
+æ示:光标键应当也能正常工作的。但是使用hjkl键,在习惯之åŽæ‚¨å°±èƒ½å¤Ÿæ›´å¿«
+      åœ°åœ¨å±å¹•å†…四处移动光标。真的是这样ï¼
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬ä¸€è®²ç¬¬äºŒèŠ‚:VIM的进入和退出
+
+
+  !! ç‰¹åˆ«æ示:敬请阅读本一节的完整内容,然åŽå†æ‰§è¡Œä»¥ä¸‹æ‰€è®²è§£çš„命令。
+
+  1. æŒ‰<ESC>é”®(这是为了确ä¿æ‚¨å¤„在正常模å¼)。
+
+  2. ç„¶åŽè¾“入:                   :q! <回车>
+     è¿™ç§æ–¹å¼çš„退出编辑器会丢弃您进入编辑器以æ¥æ‰€åšçš„改动。
+
+  3. å¦‚果您看到了命令行æ示符,请输入能够带您回到本教程的命令,那就是:
+     vimtutor <回车>
+
+  4. å¦‚果您自信已ç»ç‰¢ç‰¢è®°ä½äº†è¿™äº›æ­¥éª¤çš„è¯ï¼Œè¯·ä»Žæ­¥éª¤1执行到步骤3退出,然
+     åŽå†æ¬¡è¿›å…¥ç¼–辑器。
+
+æ示: :q! <回车> ä¼šä¸¢å¼ƒæ‚¨æ‰€åšçš„任何改动。几讲之åŽæ‚¨å°†å­¦ä¼šå¦‚何ä¿å­˜æ”¹åŠ¨åˆ°æ–‡ä»¶ã€‚
+
+  5. å°†å…‰æ ‡ä¸‹ç§»åˆ°ç¬¬ä¸€è®²ç¬¬ä¸‰èŠ‚。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬ä¸€è®²ç¬¬ä¸‰èŠ‚:文本编辑之删除
+
+
+   ** åœ¨æ­£å¸¸(Normal)模å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ x é”®æ¥åˆ é™¤å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符。**
+
+  1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„那一行。
+
+  2. ä¸ºäº†ä¿®æ­£è¾“入错误,请将光标移至准备删除的字符的ä½ç½®å¤„。
+
+  3. ç„¶åŽæŒ‰ä¸‹ x é”®å°†é”™è¯¯å­—符删除掉。
+
+  4. é‡å¤æ­¥éª¤2到步骤4,直到å¥å­ä¿®æ­£ä¸ºæ­¢ã€‚
+
+---> The ccow jumpedd ovverr thhe mooon.
+
+  5. å¥½äº†ï¼Œè¯¥è¡Œå·²ç»ä¿®æ­£äº†ï¼Œä¸‹é¢æ˜¯ç¬¬ä¸€è®²ç¬¬å››èŠ‚。
+
+特别æ示:在æµè§ˆæœ¬æ•™ç¨‹æ—¶ï¼Œä¸è¦å¼ºè¡Œè®°å¿†ã€‚è®°ä½ä¸€ç‚¹ï¼šåœ¨ä½¿ç”¨ä¸­å­¦ä¹ ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ç¬¬ä¸€è®²ç¬¬å››èŠ‚:文本编辑之æ’å…¥
+
+
+        ** åœ¨æ­£å¸¸æ¨¡å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ i é”®æ¥æ’入文本。**
+
+  1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„第一行。
+
+  2. ä¸ºäº†ä½¿å¾—第一行内容雷åŒäºŽç¬¬äºŒè¡Œï¼Œè¯·å°†å…‰æ ‡ç§»è‡³æ–‡æœ¬ç¬¬ä¸€ä¸ªå‡†å¤‡æ’入字符
+     çš„ä½ç½®ã€‚
+
+  3. ç„¶åŽæŒ‰ä¸‹ i é”®ï¼ŒæŽ¥ç€è¾“入必è¦çš„文本字符。
+
+  4. æ¯ä¸ªé”™è¯¯ä¿®æ­£å®Œæ¯•åŽï¼Œè¯·æŒ‰ä¸‹ <ESC> é”®è¿”回正常模å¼ã€‚
+     é‡å¤æ­¥éª¤2至步骤4以便修正å¥å­ã€‚
+
+---> There is text misng this .
+---> There is some text missing from this line.
+
+  5. å¦‚果您对文本æ’å…¥æ“作已ç»å¾ˆæ»¡æ„,请接ç€é˜…读下é¢çš„第一讲第五节。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ç¬¬ä¸€è®²ç¬¬äº”节:文本编辑之添加
+
+
+                       ** æŒ‰ A é”®ä»¥æ·»åŠ æ–‡æœ¬ã€‚ **
+
+  1. ç§»åŠ¨å…‰æ ‡åˆ°ä¸‹é¢ç¬¬ä¸€ä¸ªæ ‡è®°æœ‰ ---> çš„一行。
+     å…‰æ ‡æ”¾åœ¨é‚£ä¸€è¡Œçš„哪个字符上并ä¸é‡è¦ã€‚
+
+  2. æŒ‰ A é”®è¾“入必è¦çš„添加内容。
+
+  3. æ–‡æœ¬æ·»åŠ å®Œæ¯•åŽï¼ŒæŒ‰ <ESC> é”®å›žåˆ°æ­£å¸¸æ¨¡å¼ã€‚
+
+  4. ç§»åŠ¨å…‰æ ‡åˆ°ä¸‹é¢ç¬¬äºŒä¸ªæ ‡è®°æœ‰ ---> çš„一行。é‡å¤æ­¥éª¤2和步骤3以改正这个å¥å­ã€‚
+
+---> There is some text missing from th
+     There is some text missing from this line.
+---> There is also some text miss
+     There is also some text missing here.
+
+  5. å½“您对添加文本æ“作感到满æ„时,请继续学习第一讲第六节。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ç¬¬ä¸€è®²ç¬¬å…­èŠ‚:编辑文件
+
+                   ** ä½¿ç”¨ :wq ä»¥ä¿å­˜æ–‡ä»¶å¹¶é€€å‡ºã€‚ **
+
+  ç‰¹åˆ«æ示:在执行以下步骤之å‰ï¼Œè¯·å…ˆè¯»å®Œæ•´ä¸ªå°èŠ‚ï¼
+
+  1. å¦‚您在第一讲第二节中所åšçš„那样退出本教程: :q!
+     æˆ–者,如果您å¯ä»¥è®¿é—®å¦ä¸€ä¸ªç»ˆç«¯ï¼Œè¯·åœ¨é‚£é‡Œæ‰§è¡Œä»¥ä¸‹æ“作。
+
+  2. åœ¨ shell çš„æ示符下输入命令: vim tutor <回车>
+     'vim'是å¯åŠ¨ Vim ç¼–辑器的命令,'tutor'是您希望编辑的文件的å字。
+     è¯·ä½¿ç”¨ä¸€ä¸ªå¯ä»¥æ”¹åŠ¨çš„文件。
+
+  3. ä½¿ç”¨æ‚¨åœ¨å‰é¢çš„教程中学到的命令æ’入删除文本。
+
+  4. ä¿å­˜æ”¹åŠ¨è¿‡çš„文件并退出 Vim,按这些键: :wq  <回车>
+
+  5. å¦‚果您在步骤1中已ç»é€€å‡º vimtutor,请é‡å¯ vimtutor ç§»åŠ¨åˆ°ä¸‹é¢çš„å°ç»“一节。
+
+  6. é˜…读完以上步骤,弄懂它们的æ„义,然åŽåœ¨å®žè·µä¸­è¿›è¡Œç»ƒä¹ ã€‚
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬ä¸€è®²å°ç»“
+
+
+  1. å…‰æ ‡åœ¨å±å¹•æ–‡æœ¬ä¸­çš„移动既å¯ä»¥ç”¨ç®­å¤´é”®ï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ hjkl å­—æ¯é”®ã€‚
+        h (左移)     j (下行)       k (上行)         l (å³ç§»)
+
+  2. æ¬²è¿›å…¥ Vim ç¼–辑器(从命令行æ示符),请输入:vim æ–‡ä»¶å <回车>
+
+  3. æ¬²é€€å‡º Vim ç¼–辑器,请输入 <ESC>   :q!   <回车> æ”¾å¼ƒæ‰€æœ‰æ”¹åŠ¨ã€‚
+                      æˆ–者输入 <ESC>   :wq   <回车> ä¿å­˜æ”¹åŠ¨ã€‚
+
+  4. åœ¨æ­£å¸¸æ¨¡å¼ä¸‹åˆ é™¤å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符,请按: x
+
+  5. æ¬²æ’入或添加文本,请输入:
+
+        i   è¾“入欲æ’入文本   <ESC>              åœ¨å…‰æ ‡å‰æ’入文本
+        A   è¾“入欲添加文本   <ESC>             åœ¨ä¸€è¡ŒåŽæ·»åŠ æ–‡æœ¬
+
+特别æ示:按下 <ESC> é”®ä¼šå¸¦æ‚¨å›žåˆ°æ­£å¸¸æ¨¡å¼æˆ–者撤消一个ä¸æƒ³è¾“入或部分完整
+的命令。
+
+好了,第一讲到此结æŸã€‚下é¢æŽ¥ä¸‹æ¥ç»§ç»­ç¬¬äºŒè®²çš„内容。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬äºŒè®²ç¬¬ä¸€èŠ‚:删除类命令
+
+
+           ** è¾“å…¥ dw å¯ä»¥ä»Žå…‰æ ‡å¤„删除至一个å•è¯çš„末尾。**
+
+  1. è¯·æŒ‰ä¸‹ <ESC> é”®ç¡®ä¿æ‚¨å¤„于正常模å¼ã€‚
+
+  2. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„那一行。
+
+  3. è¯·å°†å…‰æ ‡ç§»è‡³å‡†å¤‡è¦åˆ é™¤çš„å•è¯çš„起始处。
+
+  4. æŽ¥ç€è¾“å…¥ dw åˆ é™¤æŽ‰è¯¥å•è¯ã€‚
+
+  ç‰¹åˆ«æ示:当您输入时,字毠d ä¼šåŒæ—¶å‡ºçŽ°åœ¨å±å¹•çš„最åŽä¸€è¡Œã€‚Vim åœ¨ç­‰å¾…您输入
+  å­—毠w。如果您看到的是除 d å¤–的其他字符,那表明您按错了;请按下 <ESC> é”®ï¼Œ
+  ç„¶åŽé‡æ–°å†æ¥ã€‚
+
+---> There are a some words fun that don't belong paper in this sentence.
+
+  5. é‡å¤æ­¥éª¤3和步骤4,直至å¥å­ä¿®æ­£å®Œæ¯•ã€‚接ç€ç»§ç»­ç¬¬äºŒè®²ç¬¬äºŒèŠ‚内容。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     ç¬¬äºŒè®²ç¬¬äºŒèŠ‚:更多删除类命令
+
+
+                  ** è¾“å…¥ d$ ä»Žå½“å‰å…‰æ ‡åˆ é™¤åˆ°è¡Œæœ«ã€‚**
+
+  1. è¯·æŒ‰ä¸‹ <ESC> é”®ç¡®ä¿æ‚¨å¤„于正常模å¼ã€‚
+
+  2. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„那一行。
+
+  3. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°è¯¥è¡Œçš„尾部(也就是在第一个点å·â€˜.’åŽé¢)。
+
+  4. ç„¶åŽè¾“å…¥ d$ ä»Žå…‰æ ‡å¤„删至当å‰è¡Œå°¾éƒ¨ã€‚
+
+---> Somebody typed the end of this line twice. end of this line twice.
+
+
+  5. è¯·ç»§ç»­å­¦ä¹ ç¬¬äºŒè®²ç¬¬ä¸‰èŠ‚就知é“是怎么回事了。
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ç¬¬äºŒè®²ç¬¬ä¸‰èŠ‚:关于命令和对象
+
+
+  è®¸å¤šæ”¹å˜æ–‡æœ¬çš„命令都由一个æ“作符和一个动作构æˆã€‚
+  ä½¿ç”¨åˆ é™¤æ“作符 d çš„删除命令的格å¼å¦‚下:
+
+       d   motion
+
+  å…¶ä¸­ï¼š
+    d      - åˆ é™¤æ“作符。
+    motion - æ“作符的æ“作对象(在下é¢åˆ—出)。
+
+  ä¸€ä¸ªç®€çŸ­çš„动作列表:
+    w - ä»Žå½“å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°ä¸‹ä¸€ä¸ªå•è¯èµ·å§‹å¤„,ä¸åŒ…括它的第一个字符。
+    e - ä»Žå½“å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°å•è¯æœ«å°¾ï¼ŒåŒ…括最åŽä¸€ä¸ªå­—符。
+    $ - ä»Žå½“å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°å½“å‰è¡Œæœ«ã€‚
+
+  å› æ­¤è¾“å…¥ de ä¼šä»Žå½“å‰å…‰æ ‡ä½ç½®åˆ é™¤åˆ°å•è¯æœ«å°¾ã€‚
+
+特别æ示:
+    å¯¹äºŽå‹‡äºŽæŽ¢ç´¢è€…,请在正常模å¼ä¸‹é¢ä»…按代表相应动作的键而ä¸ä½¿ç”¨æ“作符,您
+    å°†çœ‹åˆ°å…‰æ ‡çš„移动正如上é¢çš„对象列表所代表的一样。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ç¬¬äºŒè®²ç¬¬å››èŠ‚:使用计数指定动作
+
+
+             ** åœ¨åŠ¨ä½œå‰è¾“入数字会使它é‡å¤é‚£ä¹ˆå¤šæ¬¡ã€‚ **
+
+  1. ç§»åŠ¨å…‰æ ‡åˆ°ä¸‹é¢æ ‡è®°æœ‰ ---> çš„一行的开始。
+
+  2. è¾“å…¥ 2w ä½¿å…‰æ ‡å‘å‰ç§»åŠ¨ä¸¤ä¸ªå•è¯ã€‚
+
+  3. è¾“å…¥ 3e ä½¿å…‰æ ‡å‘å‰ç§»åŠ¨åˆ°ç¬¬ä¸‰ä¸ªå•è¯çš„末尾。
+
+  4. è¾“å…¥ 0 (数字零) ç§»åŠ¨å…‰æ ‡åˆ°è¡Œé¦–。
+
+  5. é‡å¤æ­¥éª¤2和步骤3,å°è¯•ä¸åŒçš„数字。
+
+---> This is just a line with words you can move around in.
+
+  6. è¯·ç»§ç»­å­¦ä¹ ç¬¬äºŒè®²ç¬¬äº”节。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      ç¬¬äºŒè®²ç¬¬äº”节:使用计数以删除更多
+
+
+              ** ä½¿ç”¨æ“作符时输入数字å¯ä»¥ä½¿å®ƒé‡å¤é‚£ä¹ˆå¤šæ¬¡ã€‚ **
+
+  ä¸Šé¢å·²ç»æ到过删除æ“作符和动作的组åˆï¼Œæ‚¨å¯ä»¥åœ¨ç»„åˆä¸­åŠ¨ä½œä¹‹å‰æ’入一个数字以
+  åˆ é™¤æ›´å¤šï¼š
+        d   number(æ•°å­—)   motion
+
+  1. ç§»åŠ¨å…‰æ ‡åˆ°ä¸‹é¢æ ‡è®°æœ‰ ---> çš„一行中第一个大写字æ¯å•è¯ä¸Šã€‚
+
+  2. è¾“å…¥ d2w ä»¥åˆ é™¤ä¸¤ä¸ªå¤§å†™å­—æ¯å•è¯ã€‚
+
+  3. é‡å¤æ­¥éª¤1和步骤2,使用ä¸åŒçš„数字使得用一个命令就能删除全部相邻的大写字æ¯
+     å•è¯
+
+--->  this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           ç¬¬äºŒè®²ç¬¬å…­èŠ‚:æ“作整行
+
+
+                    ** è¾“å…¥ dd å¯ä»¥åˆ é™¤æ•´ä¸€ä¸ªå½“å‰è¡Œã€‚ **
+
+  é‰´äºŽæ•´è¡Œåˆ é™¤çš„高频度,Vi çš„设计者决定è¦ç®€åŒ–整行删除æ“作,您仅需è¦åœ¨åŒä¸€è¡Œä¸Š
+  å‡»æ‰“两次 d å°±å¯ä»¥åˆ é™¤æŽ‰å…‰æ ‡æ‰€åœ¨çš„整行了。
+
+  1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢çš„短å¥æ®µè½ä¸­çš„第二行。
+  2. è¾“å…¥ dd åˆ é™¤è¯¥è¡Œã€‚
+  3. ç„¶åŽç§»åŠ¨åˆ°ç¬¬å››è¡Œã€‚
+  4. æŽ¥ç€è¾“å…¥ 2dd åˆ é™¤ä¸¤è¡Œã€‚
+
+--->  1)  Roses are red,
+--->  2)  Mud is fun,
+--->  3)  Violets are blue,
+--->  4)  I have a car,
+--->  5)  Clocks tell time,
+--->  6)  Sugar is sweet
+--->  7)  And so are you.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          ç¬¬äºŒè®²ç¬¬ä¸ƒèŠ‚:撤消类命令
+
+
+       ** è¾“å…¥ u æ¥æ’¤æ¶ˆæœ€åŽæ‰§è¡Œçš„命令,输入 U æ¥æ’¤æ¶ˆå¯¹æ•´è¡Œçš„修改。 **
+
+  1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„那一行,并将其置于第一个错误
+     å¤„。
+  2. è¾“å…¥ x åˆ é™¤ç¬¬ä¸€ä¸ªä¸æƒ³ä¿ç•™çš„å­—æ¯ã€‚
+  3. ç„¶åŽè¾“å…¥ u æ’¤æ¶ˆæœ€åŽæ‰§è¡Œçš„(一次)命令。
+  4. è¿™æ¬¡è¦ä½¿ç”¨ x ä¿®æ­£æœ¬è¡Œçš„所有错误。
+  5. çŽ°åœ¨è¾“入一个大写的 U ï¼Œæ¢å¤åˆ°è¯¥è¡Œçš„原始状æ€ã€‚
+  6. æŽ¥ç€å¤šæ¬¡è¾“å…¥ u ä»¥æ’¤æ¶ˆ U ä»¥åŠæ›´å‰çš„命令。
+  7. ç„¶åŽå¤šæ¬¡è¾“å…¥ CTRL-R (先按下 CTRL é”®ä¸æ”¾å¼€ï¼ŒæŽ¥ç€æŒ‰ R é”®),这样就
+     å¯ä»¥é‡åšè¢«æ’¤æ¶ˆçš„命令,也就是撤消掉撤消命令。
+
+---> Fiix the errors oon thhis line and reeplace them witth undo.
+
+  8. è¿™äº›éƒ½æ˜¯éžå¸¸æœ‰ç”¨çš„命令。下é¢æ˜¯ç¬¬äºŒè®²çš„å°ç»“了。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬äºŒè®²å°ç»“
+
+
+  1. æ¬²ä»Žå½“å‰å…‰æ ‡åˆ é™¤è‡³ä¸‹ä¸€ä¸ªå•è¯ï¼Œè¯·è¾“入:dw
+  2. æ¬²ä»Žå½“å‰å…‰æ ‡åˆ é™¤è‡³å½“å‰è¡Œæœ«å°¾ï¼Œè¯·è¾“入:d$
+  3. æ¬²åˆ é™¤æ•´è¡Œï¼Œè¯·è¾“入:dd
+
+  4. æ¬²é‡å¤ä¸€ä¸ªåŠ¨ä½œï¼Œè¯·åœ¨å®ƒå‰é¢åŠ ä¸Šä¸€ä¸ªæ•°å­—:2w
+  5. åœ¨æ­£å¸¸æ¨¡å¼ä¸‹ä¿®æ”¹å‘½ä»¤çš„æ ¼å¼æ˜¯ï¼š
+               operator   [number]   motion
+     å…¶ä¸­ï¼š
+       operator - æ“作符,代表è¦åšçš„事情,比如 d ä»£è¡¨åˆ é™¤
+       [number] - å¯ä»¥é™„加的数字,代表动作é‡å¤çš„次数
+       motion   - åŠ¨ä½œï¼Œä»£è¡¨åœ¨æ‰€æ“作的文本上的移动,例如 w ä»£è¡¨å•è¯(word),
+                 $ ä»£è¡¨è¡Œæœ«ç­‰ç­‰ã€‚
+
+  6. æ¬²ç§»åŠ¨å…‰æ ‡åˆ°è¡Œé¦–,请按数字0键:0
+
+  7. æ¬²æ’¤æ¶ˆä»¥å‰çš„æ“作,请输入:u (å°å†™çš„u)
+     æ¬²æ’¤æ¶ˆåœ¨ä¸€è¡Œä¸­æ‰€åšçš„改动,请输入:U (大写的U)
+     æ¬²æ’¤æ¶ˆä»¥å‰çš„撤消命令,æ¢å¤ä»¥å‰çš„æ“作结果,请输入:CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          ç¬¬ä¸‰è®²ç¬¬ä¸€èŠ‚:置入类命令
+
+
+               ** è¾“å…¥ p å°†æœ€åŽä¸€æ¬¡åˆ é™¤çš„内容置入光标之åŽã€‚ **
+
+  1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢ç¬¬ä¸€ä¸ªæ ‡è®°æœ‰ ---> çš„一行。
+
+  2. è¾“å…¥ dd å°†è¯¥è¡Œåˆ é™¤ï¼Œè¿™æ ·ä¼šå°†è¯¥è¡Œä¿å­˜åˆ° Vim çš„一个寄存器中。
+
+  3. æŽ¥ç€å°†å…‰æ ‡ç§»åŠ¨åˆ° c) ä¸€è¡Œï¼Œå³å‡†å¤‡ç½®å…¥çš„ä½ç½®çš„上方。记ä½ï¼šæ˜¯ä¸Šæ–¹å“¦ã€‚
+
+  4. ç„¶åŽåœ¨æ­£å¸¸æ¨¡å¼ä¸‹(<ESC>键进入)输入 p å°†è¯¥è¡Œç²˜è´´ç½®å…¥ã€‚
+
+  5. é‡å¤æ­¥éª¤2至步骤4,将所有的行ä¾åºæ”¾ç½®åˆ°æ­£ç¡®çš„ä½ç½®ä¸Šã€‚
+
+---> d) Can you learn too?
+---> b) Violets are blue,
+---> c) Intelligence is learned,
+---> a) Roses are red,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          ç¬¬ä¸‰è®²ç¬¬äºŒèŠ‚:替æ¢ç±»å‘½ä»¤
+
+
+         ** è¾“å…¥ r å’Œä¸€ä¸ªå­—符替æ¢å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符。**
+
+  1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„第一行。
+
+  2. è¯·ç§»åŠ¨å…‰æ ‡åˆ°ç¬¬ä¸€ä¸ªå‡ºé”™çš„ä½ç½®ã€‚
+
+  3. æŽ¥ç€è¾“å…¥ r å’Œè¦æ›¿æ¢æˆçš„字符,这样就能将错误替æ¢æŽ‰äº†ã€‚
+
+  4. é‡å¤æ­¥éª¤2和步骤3,直到第一行已ç»ä¿®æ”¹å®Œæ¯•ã€‚
+
+--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
+--->  When this line was typed in, someone pressed some wrong keys!
+
+  5. ç„¶åŽæˆ‘们继续学习第三讲第三节。
+
+特别æ示:切记您è¦åœ¨ä½¿ç”¨ä¸­å­¦ä¹ ï¼Œè€Œä¸æ˜¯åœ¨è®°å¿†ä¸­å­¦ä¹ ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬ä¸‰è®²ç¬¬ä¸‰èŠ‚:更改类命令
+
+
+                ** è¦æ”¹å˜æ–‡æœ¬ç›´åˆ°ä¸€ä¸ªå•è¯çš„末尾,请输入 ce **
+
+  1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„第一行。
+
+  2. æŽ¥ç€æŠŠå…‰æ ‡æ”¾åœ¨å•è¯ lubw çš„字毠u çš„ä½ç½®é‚£é‡Œã€‚
+
+  3. ç„¶åŽè¾“å…¥ cw ä»¥åŠæ­£ç¡®çš„å•è¯(在本例中是输入 ine )。
+
+  4. æœ€åŽæŒ‰ <ESC> é”®ï¼Œç„¶åŽå…‰æ ‡å®šä½åˆ°ä¸‹ä¸€ä¸ªé”™è¯¯ç¬¬ä¸€ä¸ªå‡†å¤‡æ›´æ”¹çš„å­—æ¯å¤„。
+
+  5. é‡å¤æ­¥éª¤3和步骤4,直到第一个å¥å­å®Œå…¨é›·åŒç¬¬äºŒä¸ªå¥å­ã€‚
+
+---> This lubw has a few wptfd that mrrf changing usf the change operator.
+---> This line has a few words that need changing using the change operator.
+
+æ示:请注愠ce å‘½ä»¤ä¸ä»…仅是删除了一个å•è¯ï¼Œå®ƒä¹Ÿè®©æ‚¨è¿›å…¥æ’入模å¼äº†ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      ç¬¬ä¸‰è®²ç¬¬å››èŠ‚:使用c更改更多
+
+
+          ** æ›´æ”¹ç±»æ“作符å¯ä»¥ä¸Žåˆ é™¤ä¸­ä½¿ç”¨çš„åŒæ ·çš„动作é…åˆä½¿ç”¨ã€‚ **
+
+  1. æ›´æ”¹ç±»æ“作符的工作方å¼è·Ÿåˆ é™¤ç±»æ˜¯ä¸€è‡´çš„。æ“作格å¼æ˜¯ï¼š
+
+         c    [number]   motion
+
+  2. åŠ¨ä½œå‚æ•°(motion)也是一样的,比如 w ä»£è¡¨å•è¯ï¼Œ$代表行末等等。
+
+  3. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„第一行。
+
+  4. æŽ¥ç€å°†å…‰æ ‡ç§»åŠ¨åˆ°ç¬¬ä¸€ä¸ªé”™è¯¯å¤„。
+
+  5. ç„¶åŽè¾“å…¥ c$ ä½¿å¾—该行剩下的部分更正得åŒç¬¬äºŒè¡Œä¸€æ ·ã€‚最åŽæŒ‰ <ESC> é”®ã€‚
+
+---> The end of this line needs some help to make it like the second.
+---> The end of this line needs to be corrected using the  c$  command.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                                 ç¬¬ä¸‰è®²å°ç»“
+
+
+  1. è¦é‡æ–°ç½®å…¥å·²ç»åˆ é™¤çš„文本内容,请按å°å†™å­—毠p é”®ã€‚该æ“作å¯ä»¥å°†å·²åˆ é™¤
+     çš„文本内容置于光标之åŽã€‚如果最åŽä¸€æ¬¡åˆ é™¤çš„是一个整行,那么该行将置
+     äºŽå½“å‰å…‰æ ‡æ‰€åœ¨è¡Œçš„下一行。
+
+  2. è¦æ›¿æ¢å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符,请输入å°å†™çš„ r å’Œè¦æ›¿æ¢æŽ‰åŽŸä½ç½®å­—符的新字
+     ç¬¦å³å¯ã€‚
+
+  3. æ›´æ”¹ç±»å‘½ä»¤å…许您改å˜ä»Žå½“å‰å…‰æ ‡æ‰€åœ¨ä½ç½®ç›´åˆ°åŠ¨ä½œæŒ‡ç¤ºçš„ä½ç½®ä¸­é—´çš„文本。
+     æ¯”如输入 ce å¯ä»¥æ›¿æ¢å½“å‰å…‰æ ‡åˆ°å•è¯çš„末尾的内容;输入 c$ å¯ä»¥æ›¿æ¢å½“
+     å‰å…‰æ ‡åˆ°è¡Œæœ«çš„内容。
+
+  4. æ›´æ”¹ç±»å‘½ä»¤çš„æ ¼å¼æ˜¯ï¼š
+
+        c   [number]   motion
+
+现在我们继续学习下一讲。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ç¬¬å››è®²ç¬¬ä¸€èŠ‚:定ä½åŠæ–‡ä»¶çŠ¶æ€
+
+  ** è¾“å…¥ CTRL-G æ˜¾ç¤ºå½“å‰ç¼–辑文件中当å‰å…‰æ ‡æ‰€åœ¨è¡Œä½ç½®ä»¥åŠæ–‡ä»¶çŠ¶æ€ä¿¡æ¯ã€‚
+     è¾“入大写 G åˆ™ç›´æŽ¥è·³è½¬åˆ°æ–‡ä»¶ä¸­çš„æŸä¸€æŒ‡å®šè¡Œã€‚**
+
+  æ示:切记è¦å…ˆé€šè¯»æœ¬èŠ‚内容,之åŽæ‰å¯ä»¥æ‰§è¡Œä»¥ä¸‹æ­¥éª¤!!!
+
+  1. æŒ‰ä¸‹ CTRL é”®ä¸æ”¾å¼€ç„¶åŽæŒ‰ g é”®ã€‚我们称这个键组åˆä¸º CTRL-G。
+     æ‚¨ä¼šçœ‹åˆ°é¡µé¢æœ€åº•éƒ¨å‡ºçŽ°ä¸€ä¸ªçŠ¶æ€ä¿¡æ¯è¡Œï¼Œæ˜¾ç¤ºçš„内容是当å‰ç¼–辑的文件å
+     å’Œæ–‡ä»¶ä¸­å…‰æ ‡ä½ç½®ã€‚请记ä½è¡Œå·ï¼Œå®ƒä¼šåœ¨æ­¥éª¤3中用到。
+
+æ示:您也许会在å±å¹•çš„å³ä¸‹è§’看到光标ä½ç½®ï¼Œè¿™ä¼šåœ¨ 'ruler' é€‰é¡¹è®¾ç½®æ—¶å‘生
+      (å‚觠:help 'ruler')
+
+  2. è¾“入大写 G å¯ä»¥ä½¿å¾—当å‰å…‰æ ‡ç›´æŽ¥è·³è½¬åˆ°æ–‡ä»¶æœ€åŽä¸€è¡Œã€‚
+     è¾“å…¥ gg å¯ä»¥ä½¿å¾—当å‰å…‰æ ‡ç›´æŽ¥è·³è½¬åˆ°æ–‡ä»¶ç¬¬ä¸€è¡Œã€‚
+
+  3. è¾“入您曾åœç•™çš„è¡Œå·ï¼Œç„¶åŽè¾“入大写 G。这样就å¯ä»¥è¿”回到您第一次按下
+     CTRL-G æ—¶æ‰€åœ¨çš„行了。
+
+  4. å¦‚果您觉得没问题的è¯ï¼Œè¯·æ‰§è¡Œæ­¥éª¤1至步骤3çš„æ“作进行练习。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬å››è®²ç¬¬äºŒèŠ‚:æœç´¢ç±»å‘½ä»¤
+
+
+     ** è¾“å…¥ / åŠ ä¸Šä¸€ä¸ªå­—符串å¯ä»¥ç”¨ä»¥åœ¨å½“å‰æ–‡ä»¶ä¸­æŸ¥æ‰¾è¯¥å­—符串。**
+
+  1. åœ¨æ­£å¸¸æ¨¡å¼ä¸‹è¾“å…¥ / å­—符。您此时会注æ„到该字符和光标都会出现在å±å¹•åº•
+     éƒ¨ï¼Œè¿™è·Ÿ : å‘½ä»¤æ˜¯ä¸€æ ·çš„。
+
+  2. æŽ¥ç€è¾“å…¥ errroor <回车>。那个errroor就是您è¦æŸ¥æ‰¾çš„字符串。
+
+  3. è¦æŸ¥æ‰¾åŒä¸Šä¸€æ¬¡çš„字符串,åªéœ€è¦æŒ‰ n é”®ã€‚è¦å‘相åæ–¹å‘查找åŒä¸Šä¸€æ¬¡çš„å­—
+     ç¬¦ä¸²ï¼Œè¯·è¾“入大写 N å³å¯ã€‚
+
+  4. å¦‚果您想逆å‘查找字符串,请使用 ? ä»£æ›¿ / è¿›è¡Œã€‚
+
+  5. è¦å›žåˆ°æ‚¨ä¹‹å‰çš„ä½ç½®æŒ‰ CTRL-O (按你Ctrl é”®ä¸æ”¾åŒæ—¶æŒ‰ä¸‹å­—毠o)。é‡å¤æŒ‰å¯ä»¥
+     å›žé€€æ›´å¤šæ­¥ã€‚CTRL-I ä¼šè·³è½¬åˆ°è¾ƒæ–°çš„ä½ç½®ã€‚
+
+--->  "errroor" is not the way to spell error;  errroor is an error.
+æ示:如果查找已ç»åˆ°è¾¾æ–‡ä»¶æœ«å°¾ï¼ŒæŸ¥æ‰¾ä¼šè‡ªåŠ¨ä»Žæ–‡ä»¶å¤´éƒ¨ç»§ç»­æŸ¥æ‰¾ï¼Œé™¤éž
+      'wrapscan' é€‰é¡¹è¢«å¤ä½ã€‚
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                  ç¬¬å››è®²ç¬¬ä¸‰èŠ‚:é…对括å·çš„查找
+
+
+             ** è¾“å…¥ % å¯ä»¥æŸ¥æ‰¾é…对的括巠)ã€]ã€}。**
+
+  1. æŠŠå…‰æ ‡æ”¾åœ¨æœ¬èŠ‚下é¢æ ‡è®°æœ‰ --> é‚£ä¸€è¡Œä¸­çš„任何一个 (ã€[ æˆ– { å¤„。
+
+  2. æŽ¥ç€æŒ‰ % å­—符。
+
+  3. æ­¤æ—¶å…‰æ ‡çš„ä½ç½®åº”当是在é…对的括å·å¤„。
+
+  4. å†æ¬¡æŒ‰ % å°±å¯ä»¥è·³å›žé…对的第一个括å·å¤„。
+
+  5. ç§»åŠ¨å…‰æ ‡åˆ°å¦ä¸€ä¸ª (ã€)ã€[ã€]ã€{ æˆ– } å¤„,按 % æŸ¥çœ‹å…¶æ‰€ä½œæ‰€ä¸ºã€‚
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+
+æ示:在程åºè°ƒè¯•æ—¶ï¼Œè¿™ä¸ªåŠŸèƒ½ç”¨æ¥æŸ¥æ‰¾ä¸é…对的括å·æ˜¯å¾ˆæœ‰ç”¨çš„。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     ç¬¬å››è®²ç¬¬å››èŠ‚:替æ¢å‘½ä»¤
+
+
+               ** è¾“å…¥ :s/old/new/g å¯ä»¥æ›¿æ¢ old ä¸º new。**
+
+  1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„那一行。
+
+  2. è¾“å…¥ :s/thee/the <回车> ã€‚请注æ„该命令åªæ”¹å˜å…‰æ ‡æ‰€åœ¨è¡Œçš„第一个匹é…
+     ä¸²ã€‚
+
+  3. è¾“å…¥ :s/thee/the/g      åˆ™æ˜¯æ›¿æ¢å…¨è¡Œçš„匹é…串,该行中所有的 "thee" éƒ½ä¼šè¢«
+     æ”¹å˜ã€‚
+
+---> thee best time to see thee flowers is in thee spring.
+
+  4. è¦æ›¿æ¢ä¸¤è¡Œä¹‹é—´å‡ºçŽ°çš„æ¯ä¸ªåŒ¹é…串,请
+     è¾“å…¥   :#,#s/old/new/g   å…¶ä¸­ #,# ä»£è¡¨çš„是替æ¢æ“作的若干行中
+                              é¦–尾两行的行å·ã€‚
+     è¾“å…¥   :%s/old/new/g     åˆ™æ˜¯æ›¿æ¢æ•´ä¸ªæ–‡ä»¶ä¸­çš„æ¯ä¸ªåŒ¹é…串。
+     è¾“å…¥   :%s/old/new/gc    ä¼šæ‰¾åˆ°æ•´ä¸ªæ–‡ä»¶ä¸­çš„æ¯ä¸ªåŒ¹é…串,并且对æ¯ä¸ªåŒ¹é…串
+                              æ示是å¦è¿›è¡Œæ›¿æ¢ã€‚
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬å››è®²å°ç»“
+
+
+  1. CTRL-G ç”¨äºŽæ˜¾ç¤ºå½“å‰å…‰æ ‡æ‰€åœ¨ä½ç½®å’Œæ–‡ä»¶çŠ¶æ€ä¿¡æ¯ã€‚
+     G ç”¨äºŽå°†å…‰æ ‡è·³è½¬è‡³æ–‡ä»¶æœ€åŽä¸€è¡Œã€‚
+     å…ˆæ•²å…¥ä¸€ä¸ªè¡Œå·ç„¶åŽè¾“入大写 G åˆ™æ˜¯å°†å…‰æ ‡ç§»åŠ¨è‡³è¯¥è¡Œå·ä»£è¡¨çš„行。
+     gg ç”¨äºŽå°†å…‰æ ‡è·³è½¬è‡³æ–‡ä»¶ç¬¬ä¸€è¡Œã€‚
+
+  2. è¾“å…¥ / ç„¶åŽç´§éšä¸€ä¸ªå­—符串是在当å‰æ‰€ç¼–辑的文档中正å‘查找该字符串。
+     è¾“å…¥ ? ç„¶åŽç´§éšä¸€ä¸ªå­—符串则是在当å‰æ‰€ç¼–辑的文档中åå‘查找该字符串。
+     å®Œæˆä¸€æ¬¡æŸ¥æ‰¾ä¹‹åŽæŒ‰ n é”®æ˜¯é‡å¤ä¸Šä¸€æ¬¡çš„命令,å¯åœ¨åŒä¸€æ–¹å‘上查
+     æ‰¾ä¸‹ä¸€ä¸ªåŒ¹é…字符串所在;或者按大写 N å‘相åæ–¹å‘查找下一匹é…字符串所在。
+     CTRL-O å¸¦æ‚¨è·³è½¬å›žè¾ƒæ—§çš„ä½ç½®ï¼ŒCTRL-I åˆ™å¸¦æ‚¨åˆ°è¾ƒæ–°çš„ä½ç½®ã€‚
+
+  3. å¦‚果光标当å‰ä½ç½®æ˜¯æ‹¬å·(ã€)ã€[ã€]ã€{ã€},按 % ä¼šå°†å…‰æ ‡ç§»åŠ¨åˆ°é…对的括å·ä¸Šã€‚
+
+  4. åœ¨ä¸€è¡Œå†…替æ¢å¤´ä¸€ä¸ªå­—符串 old ä¸ºæ–°çš„字符串 new,请输入  :s/old/new
+     åœ¨ä¸€è¡Œå†…替æ¢æ‰€æœ‰çš„字符串 old ä¸ºæ–°çš„字符串 new,请输入  :s/old/new/g
+     åœ¨ä¸¤è¡Œå†…替æ¢æ‰€æœ‰çš„字符串 old ä¸ºæ–°çš„字符串 new,请输入  :#,#s/old/new/g
+     åœ¨æ–‡ä»¶å†…替æ¢æ‰€æœ‰çš„字符串 old ä¸ºæ–°çš„字符串 new,请输入  :%s/old/new/g
+     è¿›è¡Œå…¨æ–‡æ›¿æ¢æ—¶è¯¢é—®ç”¨æˆ·ç¡®è®¤æ¯ä¸ªæ›¿æ¢éœ€æ·»åŠ  c æ ‡å¿—        :%s/old/new/gc
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+               ç¬¬äº”讲第一节:在 VIM å†…执行外部命令的方法
+
+
+          ** è¾“å…¥ :! ç„¶åŽç´§æŽ¥ç€è¾“入一个外部命令å¯ä»¥æ‰§è¡Œè¯¥å¤–部命令。**
+
+  1. æŒ‰ä¸‹æˆ‘们所熟悉的 : å‘½ä»¤ä½¿å…‰æ ‡ç§»åŠ¨åˆ°å±å¹•åº•éƒ¨ã€‚这样您就å¯ä»¥è¾“入一行命令了。
+
+  2. æŽ¥ç€è¾“入感å¹å· ! è¿™ä¸ªå­—符,这样就å…许您执行外部的 shell å‘½ä»¤äº†ã€‚
+
+  3. æˆ‘们以 ls å‘½ä»¤ä¸ºä¾‹ã€‚输入 !ls <回车> ã€‚该命令就会列举出您当å‰ç›®å½•çš„
+     å†…容,就如åŒæ‚¨åœ¨å‘½ä»¤è¡Œæ示符下输入 ls å‘½ä»¤çš„结果一样。如果 !ls æ²¡èµ·
+     ä½œç”¨ï¼Œæ‚¨å¯ä»¥è¯•è¯• :!dir çœ‹çœ‹ã€‚
+
+æ示:所有的外部命令都å¯ä»¥ä»¥è¿™ç§æ–¹å¼æ‰§è¡Œï¼ŒåŒ…括带命令行å‚数的那些。
+
+æ示:所有的 : å‘½ä»¤éƒ½å¿…须以敲 <回车> é”®ç»“æŸã€‚从今以åŽæˆ‘们就ä¸ä¼šæ€»æ˜¯æ到这一点
+      äº†ã€‚
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     ç¬¬äº”讲第二节:关于ä¿å­˜æ–‡ä»¶çš„更多信æ¯
+
+
+            ** è¦å°†å¯¹æ–‡ä»¶çš„改动ä¿å­˜åˆ°æ–‡ä»¶ä¸­ï¼Œè¯·è¾“å…¥ :w FILENAME ã€‚**
+
+  1. è¾“å…¥ :!dir æˆ–者 :!ls èŽ·çŸ¥å½“å‰ç›®å½•çš„内容。您应当已知é“最åŽè¿˜å¾—敲
+     <回车> å§ã€‚
+
+  2. é€‰æ‹©ä¸€ä¸ªæœªè¢«ç”¨åˆ°çš„文件å,比如 TEST。
+
+  3. æŽ¥ç€è¾“å…¥ :w TEST  (此处 TEST æ˜¯æ‚¨æ‰€é€‰æ‹©çš„文件å。)
+
+  4. è¯¥å‘½ä»¤ä¼šä»¥ TEST ä¸ºæ–‡ä»¶åä¿å­˜æ•´ä¸ªæ–‡ä»¶ (Vim æ•™ç¨‹)。为了验è¯è¿™ä¸€ç‚¹ï¼Œ
+     è¯·å†æ¬¡è¾“å…¥ :!dir æˆ– :!ls æŸ¥çœ‹æ‚¨çš„目录列表内容。
+
+请注æ„:如果您退出 Vim ç„¶åŽåœ¨ä»¥å‘½ä»¤ vim TEST å†æ¬¡å¯åŠ¨ Vim,那么该文件内
+     å®¹åº”该åŒæ‚¨ä¿å­˜æ—¶çš„文件内容是完全一样的。
+
+  5. çŽ°åœ¨æ‚¨å¯ä»¥åˆ é™¤ TEST æ–‡ä»¶äº†ã€‚在 MS-DOS ä¸‹ï¼Œè¯·è¾“入:   :!del TEST
+                                 åœ¨ Unix ä¸‹ï¼Œè¯·è¾“入:     :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   ç¬¬äº”讲第三节:一个具有选择性的ä¿å­˜å‘½ä»¤
+
+
+           ** è¦ä¿å­˜æ–‡ä»¶çš„部分内容,请输入 v motion :w FILENAME **
+
+  1. ç§»åŠ¨å…‰æ ‡åˆ°æœ¬è¡Œã€‚
+
+  2. æŽ¥ç€æŒ‰ v é”®ï¼Œå°†å…‰æ ‡ç§»åŠ¨è‡³ä¸‹é¢ç¬¬äº”个æ¡ç›®ä¸Šã€‚您会注æ„到之间的文本被高亮了。
+
+  3. ç„¶åŽæŒ‰ : å­—符。您将看到å±å¹•åº•éƒ¨ä¼šå‡ºçŽ° :'<,'> ã€‚
+
+  4. çŽ°åœ¨è¯·è¾“å…¥ w TEST,其中 TEST æ˜¯ä¸€ä¸ªæœªè¢«ä½¿ç”¨çš„文件å。确认您看到了
+     :'<,'>w TEST ä¹‹åŽæŒ‰ <回车> é”®ã€‚
+
+  5. è¿™æ—¶ Vim ä¼šæŠŠé€‰ä¸­çš„行写入到以 TEST å‘½å的文件中去。使用 :!dir æˆ– :!ls
+     ç¡®è®¤æ–‡ä»¶è¢«æ­£ç¡®ä¿å­˜ã€‚这次先别删除它ï¼æˆ‘们在下一讲中会用到它。
+
+æ示:按 v é”®ä½¿ Vim è¿›å…¥å¯è§†æ¨¡å¼è¿›è¡Œé€‰å–。您å¯ä»¥å››å¤„移动光标使选å–区域å˜å¤§æˆ–
+      å˜å°ã€‚接ç€æ‚¨å¯ä»¥ä½¿ç”¨ä¸€ä¸ªæ“作符对选中文本进行æ“作。例如,按 d é”®ä¼šåˆ é™¤
+      é€‰ä¸­çš„文本内容。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                  ç¬¬äº”讲第四节:æå–å’Œåˆå¹¶æ–‡ä»¶
+
+
+       ** è¦å‘当å‰æ–‡ä»¶ä¸­æ’å…¥å¦å¤–的文件的内容,请输入 :r FILENAME **
+
+  1. è¯·æŠŠå…‰æ ‡ç§»åŠ¨åˆ°æœ¬è¡Œä¸Šé¢ä¸€è¡Œã€‚
+
+特别æ示:执行步骤2之åŽæ‚¨å°†çœ‹åˆ°ç¬¬äº”讲第三节的文字,请届时往下移动
+          ä»¥å†æ¬¡çœ‹åˆ°æœ¬è®²å†…容。
+
+  2. æŽ¥ç€é€šè¿‡å‘½ä»¤ :r TEST å°†å‰é¢åˆ›å»ºçš„å为 TEST çš„文件æå–è¿›æ¥ã€‚
+     æ‚¨æ‰€æå–è¿›æ¥çš„文件将从光标所在ä½ç½®å¤„开始置入。
+
+  3. ä¸ºäº†ç¡®è®¤æ–‡ä»¶å·²ç»æå–æˆåŠŸï¼Œç§»åŠ¨å…‰æ ‡å›žåˆ°åŽŸæ¥çš„ä½ç½®å°±å¯ä»¥æ³¨æ„有两份第
+     äº”讲第三节的内容,一份是原始内容,å¦å¤–一份是æ¥è‡ªæ–‡ä»¶çš„副本。
+
+æ示:您还å¯ä»¥è¯»å–外部命令的输出。例如, :r !ls å¯ä»¥è¯»å– ls å‘½ä»¤çš„输出,并
+      æŠŠå®ƒæ”¾ç½®åœ¨å…‰æ ‡ä¸‹é¢ã€‚
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬äº”讲å°ç»“
+
+
+  1. :!command ç”¨äºŽæ‰§è¡Œä¸€ä¸ªå¤–部命令 command。
+
+     è¯·çœ‹ä¸€äº›å®žé™…例å­ï¼š
+        (MS-DOS)         (Unix)
+         :!dir            :!ls            -  ç”¨äºŽæ˜¾ç¤ºå½“å‰ç›®å½•çš„内容。
+         :!del FILENAME   :!rm FILENAME   -  ç”¨äºŽåˆ é™¤å为 FILENAME çš„文件。
+
+  2. :w FILENAME  å¯å°†å½“剠VIM ä¸­æ­£åœ¨ç¼–辑的文件ä¿å­˜åˆ°å为 FILENAME çš„æ–‡
+     ä»¶ä¸­ã€‚
+
+  3. v motion :w FILENAME å¯å°†å½“å‰ç¼–辑文件中å¯è§†æ¨¡å¼ä¸‹é€‰ä¸­çš„内容ä¿å­˜åˆ°æ–‡ä»¶
+     FILENAME ä¸­ã€‚
+
+  4. :r FILENAME å¯æå–ç£ç›˜æ–‡ä»¶ FILENAME å¹¶å°†å…¶æ’入到当å‰æ–‡ä»¶çš„光标ä½ç½®
+     åŽé¢ã€‚
+
+  5. :r !dir å¯ä»¥è¯»å– dir å‘½ä»¤çš„输出并将其放置到当å‰æ–‡ä»¶çš„光标ä½ç½®åŽé¢ã€‚
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        ç¬¬å…­è®²ç¬¬ä¸€èŠ‚:打开类命令
+
+
+        ** è¾“å…¥ o å°†åœ¨å…‰æ ‡çš„下方打开新的一行并进入æ’入模å¼ã€‚**
+
+  1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„那一行。
+
+  2. æŽ¥ç€è¾“å…¥å°å†™çš„ o åœ¨å…‰æ ‡ *下方* æ‰“开新的一行,这个命令会使您
+     è¿›å…¥æ’入模å¼ã€‚
+
+  3. ç„¶åŽè¾“入一些文字,之åŽæŒ‰ <ESC> é”®é€€å‡ºæ’入模å¼è€Œè¿›å…¥æ­£å¸¸æ¨¡å¼ã€‚
+
+---> After typing  o  the cursor is placed on the open line in Insert mode.
+
+  4. ä¸ºäº†åœ¨å…‰æ ‡ *上方* æ‰“开新的一行,åªéœ€è¦è¾“入大写的 O è€Œä¸æ˜¯å°å†™çš„ o
+     å°±å¯ä»¥äº†ã€‚请在下行测试一下å§ã€‚
+
+---> Open up a line above this by typing O while the cursor is on this line.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬å…­è®²ç¬¬äºŒèŠ‚:附加类命令
+
+
+                    ** è¾“å…¥ a å°†å¯åœ¨å…‰æ ‡ä¹‹åŽæ’入文本。 **
+
+  1. è¯·åœ¨æ­£å¸¸æ¨¡å¼ä¸‹å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„第一行的行首。
+
+  2. æŽ¥ç€è¾“å…¥ e ç›´åˆ°å…‰æ ‡ä½äºŽ li çš„末尾。
+
+  3. è¾“å…¥å°å†™çš„ a åˆ™å¯åœ¨å…‰æ ‡ä¹‹åŽæ’入文本了。
+
+  4. å°†å•è¯è¡¥å……完整,就åƒä¸‹ä¸€è¡Œä¸­çš„那样。之åŽæŒ‰ <ESC> é”®é€€å‡ºæ’入模å¼å›žåˆ°
+     æ­£å¸¸æ¨¡å¼ã€‚
+
+  5. ä½¿ç”¨ e ç§»åŠ¨å…‰æ ‡åˆ°ä¸‹ä¸€æ­¥ä¸å®Œæ•´çš„å•è¯ï¼Œé‡å¤æ­¥éª¤3和步骤4。
+
+---> This li will allow you to pract appendi text to a line.
+---> This line will allow you to practice appending text to a line.
+
+æ示:aã€i å’Œ A éƒ½ä¼šå¸¦æ‚¨è¿›å…¥æ’入模å¼ï¼ŒæƒŸä¸€çš„区别在于字符æ’入的ä½ç½®ã€‚
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   ç¬¬å…­è®²ç¬¬ä¸‰èŠ‚:å¦å¤–一个置æ¢ç±»å‘½ä»¤çš„版本
+
+
+                     ** è¾“入大写的 R å¯è¿žç»­æ›¿æ¢å¤šä¸ªå­—符。**
+
+  1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚中下é¢æ ‡è®°æœ‰ ---> çš„第一行。移动光标到第一个 xxx çš„
+     èµ·å§‹ä½ç½®ã€‚
+
+  2. ç„¶åŽè¾“入大写的 R å¼€å§‹æŠŠç¬¬ä¸€è¡Œä¸­çš„ä¸åŒäºŽç¬¬äºŒè¡Œçš„剩余字符é€ä¸€è¾“入,就
+     å¯ä»¥å…¨éƒ¨æ›¿æ¢æŽ‰åŽŸæœ‰çš„字符而使得第一行完全雷åŒç¬¬äºŒè¡Œäº†ã€‚
+
+  3. æŽ¥ç€æŒ‰ <ESC> é”®é€€å‡ºæ›¿æ¢æ¨¡å¼å›žåˆ°æ­£å¸¸æ¨¡å¼ã€‚您å¯ä»¥æ³¨æ„到尚未替æ¢çš„文本
+     ä»ç„¶ä¿æŒåŽŸçŠ¶ã€‚
+
+  4. é‡å¤ä»¥ä¸Šæ­¥éª¤ï¼Œå°†å‰©ä½™çš„ xxx ä¹Ÿæ›¿æ¢æŽ‰ã€‚
+
+---> Adding 123 to xxx gives you xxx.
+---> Adding 123 to 456 gives you 579.
+
+æ示:替æ¢æ¨¡å¼ä¸Žæ’入模å¼ç›¸ä¼¼ï¼Œä¸è¿‡æ¯ä¸ªè¾“入的字符都会删除一个已有的字符。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ç¬¬å…­è®²ç¬¬å››èŠ‚:å¤åˆ¶ç²˜è´´æ–‡æœ¬
+
+
+                ** ä½¿ç”¨æ“作符 y å¤åˆ¶æ–‡æœ¬ï¼Œä½¿ç”¨ p ç²˜è´´æ–‡æœ¬ **
+
+  1. å®šä½åˆ°ä¸‹é¢æ ‡è®°æœ‰ ---> çš„一行,将光标移动到 "a)" ä¹‹åŽã€‚
+
+  2. æŽ¥ç€ä½¿ç”¨ v è¿›å…¥å¯è§†æ¨¡å¼ï¼Œç§»åŠ¨å…‰æ ‡åˆ° "first" çš„å‰é¢ã€‚
+
+  3. çŽ°åœ¨è¾“å…¥ y ä»¥æŠ½å‡º(å¤åˆ¶)高亮的文本。
+
+  4. ç„¶åŽç§»åŠ¨å…‰æ ‡åˆ°ä¸‹ä¸€è¡Œçš„末尾:j$
+
+  5. æŽ¥ç€è¾“å…¥ p ä»¥æ”¾ç½®(粘贴)å¤åˆ¶äº†çš„文本。然åŽè¾“入:a second <ESC>。
+
+  6. ä½¿ç”¨å¯è§†æ¨¡å¼é€‰ä¸­ " item.",用 y å¤åˆ¶ï¼Œå†ç”¨ j$ å°†å…‰æ ‡ç§»åŠ¨åˆ°ä¸‹ä¸€è¡Œæœ«å°¾ï¼Œ
+     ç”¨ p å°†æ–‡æœ¬ç²˜è´´åˆ°é‚£é‡Œã€‚
+
+--->  a) this is the first item.
+      b)
+
+  æ示:您还å¯ä»¥æŠŠ y å½“作æ“作符æ¥ä½¿ç”¨ï¼›ä¾‹å¦‚ yw å¯ä»¥ç”¨æ¥å¤åˆ¶ä¸€ä¸ªå•è¯ã€‚
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           ç¬¬å…­è®²ç¬¬äº”节:设置类命令的选项
+
+
+                 ** è®¾ç½®å¯ä½¿æŸ¥æ‰¾æˆ–者替æ¢å¯å¿½ç•¥å¤§å°å†™çš„选项 **
+
+  1. è¦æŸ¥æ‰¾å•è¯ ignore å¯åœ¨æ­£å¸¸æ¨¡å¼ä¸‹è¾“å…¥ /ignore <回车>。
+     è¦é‡å¤æŸ¥æ‰¾è¯¥è¯ï¼Œå¯ä»¥é‡å¤æŒ‰ n é”®ã€‚
+
+  2. ç„¶åŽè®¾ç½® ic é€‰é¡¹(Ignore Case,忽略大å°å†™),请输入: :set ic
+
+  3. çŽ°åœ¨å¯ä»¥é€šè¿‡é”®å…¥ n é”®å†æ¬¡æŸ¥æ‰¾å•è¯ ignore。注æ„到 Ignore å’Œ IGNORE çŽ°åœ¨
+     ä¹Ÿè¢«æ‰¾åˆ°äº†ã€‚
+
+  4. ç„¶åŽè®¾ç½® hlsearch å’Œ incsearch è¿™ä¸¤ä¸ªé€‰é¡¹ï¼Œè¯·è¾“入: :set hls is
+
+  5. çŽ°åœ¨å¯ä»¥å†æ¬¡è¾“入查找命令,看看会有什么效果: /ignore <回车>
+
+  6. è¦ç¦ç”¨å¿½ç•¥å¤§å°å†™ï¼Œè¯·è¾“入: :set noic
+
+æ示:è¦ç§»é™¤åŒ¹é…项的高亮显示,请输入:  :nohlsearch
+æ示:如果您想è¦ä»…在一次查找时忽略字æ¯å¤§å°å†™ï¼Œæ‚¨å¯ä»¥ä½¿ç”¨ \c:
+      /ignore\c <回车>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬å…­è®²å°ç»“
+
+  1. è¾“å…¥å°å†™çš„ o å¯ä»¥åœ¨å…‰æ ‡ä¸‹æ–¹æ‰“开新的一行并进入æ’入模å¼ã€‚
+     è¾“入大写的 O å¯ä»¥åœ¨å…‰æ ‡ä¸Šæ–¹æ‰“开新的一行。
+
+  2. è¾“å…¥å°å†™çš„ a å¯ä»¥åœ¨å…‰æ ‡æ‰€åœ¨ä½ç½®ä¹‹åŽæ’入文本。
+     è¾“入大写的 A å¯ä»¥åœ¨å…‰æ ‡æ‰€åœ¨è¡Œçš„行末之åŽæ’入文本。
+
+  3. e å‘½ä»¤å¯ä»¥ä½¿å…‰æ ‡ç§»åŠ¨åˆ°å•è¯æœ«å°¾ã€‚
+
+  4. æ“作符 y å¤åˆ¶æ–‡æœ¬ï¼Œp ç²˜è´´å…ˆå‰å¤åˆ¶çš„文本。
+
+  5. è¾“入大写的 R å°†è¿›å…¥æ›¿æ¢æ¨¡å¼ï¼Œç›´è‡³æŒ‰ <ESC> é”®å›žåˆ°æ­£å¸¸æ¨¡å¼ã€‚
+
+  6. è¾“å…¥ :set xxx å¯ä»¥è®¾ç½® xxx é€‰é¡¹ã€‚一些有用的选项如下:
+       'ic' 'ignorecase'       æŸ¥æ‰¾æ—¶å¿½ç•¥å­—æ¯å¤§å°å†™
+       'is' 'incsearch'        æŸ¥æ‰¾çŸ­è¯­æ—¶æ˜¾ç¤ºéƒ¨åˆ†åŒ¹é…
+       'hls' 'hlsearch'        é«˜äº®æ˜¾ç¤ºæ‰€æœ‰çš„匹é…短语
+     é€‰é¡¹åå¯ä»¥ç”¨å®Œæ•´ç‰ˆæœ¬ï¼Œä¹Ÿå¯ä»¥ç”¨ç¼©ç•¥ç‰ˆæœ¬ã€‚
+
+  7. åœ¨é€‰é¡¹å‰åŠ ä¸Š no å¯ä»¥å…³é—­é€‰é¡¹ï¼š  :set noic
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ç¬¬ä¸ƒè®²ç¬¬ä¸€èŠ‚:获å–帮助信æ¯
+
+
+                     ** ä½¿ç”¨åœ¨çº¿å¸®åŠ©ç³»ç»Ÿ **
+
+  Vim æ‹¥æœ‰ä¸€ä¸ªç»†è‡´å…¨é¢çš„在线帮助系统。è¦å¯åŠ¨è¯¥å¸®åŠ©ç³»ç»Ÿï¼Œè¯·é€‰æ‹©å¦‚下三ç§æ–¹
+  æ³•ä¹‹ä¸€ï¼š
+       - æŒ‰ä¸‹ <HELP> é”® (如果键盘上有的è¯)
+       - æŒ‰ä¸‹ <F1> é”® (如果键盘上有的è¯)
+       - è¾“å…¥        :help <回车>
+
+  è¯·é˜…读帮助窗å£ä¸­çš„文字以了解帮助是如何工作的。
+  è¾“å…¥ CTRL-W CTRL-W   å¯ä»¥ä½¿æ‚¨åœ¨çª—å£ä¹‹é—´è·³è½¬ã€‚
+  è¾“å…¥ :q <回车> å¯ä»¥å…³é—­å¸®åŠ©çª—å£ã€‚
+
+  æ供一个正确的å‚æ•°ç»™":help"命令,您å¯ä»¥æ‰¾åˆ°å…³äºŽè¯¥ä¸»é¢˜çš„帮助。请试验以
+  ä¸‹å‚æ•°(å¯åˆ«å¿˜äº†æŒ‰å›žè½¦é”®å“¦):
+
+       :help w
+       :help c_CTRL-D
+       :help insert-index
+       :help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ç¬¬ä¸ƒè®²ç¬¬äºŒèŠ‚:创建å¯åŠ¨è„šæœ¬
+
+
+                         ** å¯ç”¨ Vim çš„特性 **
+
+  Vim çš„功能特性è¦æ¯” Vi å¤šå¾—多,但其中大部分都没有缺çœå¯ç”¨ã€‚为了使用更多的
+  ç‰¹æ€§ï¼Œæ‚¨å¾—创建一个 vimrc æ–‡ä»¶ã€‚
+
+  1. å¼€å§‹ç¼–辑 vimrc æ–‡ä»¶ï¼Œå…·ä½“命令å–决于您所使用的æ“作系统:
+        :edit ~/.vimrc         è¿™æ˜¯ Unix ç³»ç»Ÿæ‰€ä½¿ç”¨çš„命令
+        :edit $VIM/_vimrc      è¿™æ˜¯ MS-Windows ç³»ç»Ÿæ‰€ä½¿ç”¨çš„命令
+
+  2. æŽ¥ç€è¯»å– vimrc ç¤ºä¾‹æ–‡ä»¶çš„内容:
+        :r $VIMRUNTIME/vimrc_example.vim
+
+  3. ä¿å­˜æ–‡ä»¶ï¼Œå‘½ä»¤ä¸ºï¼š
+        :write
+
+  ä¸‹æ¬¡æ‚¨å¯åŠ¨ Vim æ—¶ï¼Œç¼–辑器就会有了语法高亮的功能。
+  æ‚¨å¯ä»¥æŠŠæ‚¨å–œæ¬¢çš„å„ç§è®¾ç½®æ·»åŠ åˆ°è¿™ä¸ª vimrc æ–‡ä»¶ä¸­ã€‚
+  è¦äº†è§£æ›´å¤šä¿¡æ¯è¯·è¾“å…¥ :help vimrc-intro
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           ç¬¬ä¸ƒè®²ç¬¬ä¸‰èŠ‚:补全功能
+
+
+             ** ä½¿ç”¨ CTRL-D å’Œ <TAB> å¯ä»¥è¿›è¡Œå‘½ä»¤è¡Œè¡¥å…¨ **
+
+  1. è¯·ç¡®ä¿ Vim ä¸æ˜¯åœ¨ä»¥å…¼å®¹æ¨¡å¼è¿è¡Œï¼š :set nocp
+
+  2. æŸ¥çœ‹ä¸€ä¸‹å½“å‰ç›®å½•ä¸‹å·²ç»å­˜åœ¨å“ªäº›æ–‡ä»¶ï¼Œè¾“入: :!ls   æˆ–者  :!dir
+
+  3. çŽ°åœ¨è¾“入一个目录的起始部分,例如输入: :e
+
+  4. æŽ¥ç€æŒ‰ CTRL-D é”®ï¼ŒVim ä¼šæ˜¾ç¤ºä»¥ e å¼€å§‹çš„命令的列表。
+
+  5. ç„¶åŽæŒ‰ <TAB> é”®ï¼ŒVim ä¼šè¡¥å…¨å‘½ä»¤ä¸º :edit ã€‚
+
+  6. çŽ°åœ¨æ·»åŠ ä¸€ä¸ªç©ºæ ¼ï¼Œä»¥åŠä¸€ä¸ªå·²æœ‰æ–‡ä»¶çš„文件å的起始部分,例如: :edit FIL
+
+  7. æŽ¥ç€æŒ‰ <TAB> é”®ï¼ŒVim ä¼šè¡¥å…¨æ–‡ä»¶å(如果它是惟一匹é…çš„)。
+
+æ示:补全对于许多命令都有效。您åªéœ€å°è¯•æŒ‰ CTRL-D å’Œ <TAB>。
+      å®ƒå¯¹äºŽ :help å‘½ä»¤éžå¸¸æœ‰ç”¨ã€‚
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                                 ç¬¬ä¸ƒè®²å°ç»“
+
+
+  1. è¾“å…¥ :help æˆ–者按 <F1> é”®æˆ– <Help> é”®å¯ä»¥æ‰“开帮助窗å£ã€‚
+
+  2. è¾“å…¥ :help cmd å¯ä»¥æ‰¾åˆ°å…³äºŽ cmd å‘½ä»¤çš„帮助。
+
+  3. è¾“å…¥ CTRL-W CTRL-W  å¯ä»¥ä½¿æ‚¨åœ¨çª—å£ä¹‹é—´è·³è½¬ã€‚
+
+  4. è¾“å…¥ :q ä»¥å…³é—­å¸®åŠ©çª—å£
+
+  5. æ‚¨å¯ä»¥åˆ›å»ºä¸€ä¸ª vimrc å¯åŠ¨è„šæœ¬æ–‡ä»¶ç”¨æ¥ä¿å­˜æ‚¨å好的设置。
+
+  6. å½“输入 : å‘½ä»¤æ—¶ï¼ŒæŒ‰ CTRL-D å¯ä»¥æŸ¥çœ‹å¯èƒ½çš„补全结果。
+     æŒ‰ <TAB> å¯ä»¥ä½¿ç”¨ä¸€ä¸ªè¡¥å…¨ã€‚
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  vim æ•™ç¨‹åˆ°æ­¤å°±ç»“æŸäº†ã€‚本教程åªæ˜¯ä¸ºäº†ç®€æ˜Žåœ°ä»‹ç»ä¸€ä¸‹ Vim ç¼–辑器,但已足以让您
+  å¾ˆå®¹æ˜“使用这个编辑器了。毋庸质疑,vim还有很多很多的命令,本教程所介
+  ç»çš„è·ç¦»å®Œæ•´çš„差得很远。所以您è¦ç²¾é€šçš„è¯ï¼Œè¿˜æœ›ç»§ç»­åŠªåŠ›å“¦ã€‚下一步您å¯ä»¥é˜…读
+  Vim çš„用户手册,使用的命令是: :help user-manual
+
+  ä¸‹é¢è¿™æœ¬ä¹¦å€¼å¾—推è用于更进一步的阅读和学习:
+       Vim - Vi Improved - ä½œè€…:Steve Oualline
+       å‡ºç‰ˆç¤¾ï¼šNew Riders
+  è¿™æ˜¯ç¬¬ä¸€æœ¬å®Œå…¨è®²è§£ Vim çš„书ç±ã€‚它对于åˆå­¦è€…特别有用。其中包å«æœ‰å¤§é‡å®žä¾‹
+  å’Œå›¾ç¤ºã€‚
+  æ¬²çŸ¥è¯¦æƒ…,请访问 http://iccf-holland.org/click5.html
+
+  ä»¥ä¸‹è¿™æœ¬ä¹¦æ¯”较è€äº†è€Œä¸”内容更多是关于 Vi è€Œéž Vim,但是也值得推è:
+       Learning the Vi Editor - ä½œè€…:Linda Lamb
+       å‡ºç‰ˆç¤¾ï¼šO'Reilly & Associates Inc.
+  è¿™æ˜¯ä¸€æœ¬ä¸é”™çš„书,通过它您几乎能够了解到任何您想è¦ä½¿ç”¨ Vi åšçš„事情。
+  æ­¤ä¹¦çš„第六个版本也包å«äº†ä¸€äº›å…³äºŽ Vim çš„ä¿¡æ¯ã€‚
+
+  æœ¬æ•™ç¨‹æ˜¯ç”±æ¥è‡ª Calorado School of Mines çš„ Michael C. Pierce å’Œ
+  Robert K. Ware æ‰€ç¼–写的,其中很多创æ„ç”±æ¥è‡ª Colorado State University çš„
+  Charles Smith æ供。编者的电å­é‚®ç®±æ˜¯ï¼šbware@mines.colorado.edu
+
+  æœ¬æ•™ç¨‹å·²ç”± Bram Moolenaar ä¸“为 Vim è¿›è¡Œä¿®è®¢ã€‚
+
+  è¯‘制者附言:
+  ===========
+      ç®€ä½“中文教程翻译版之译制者为æ¢æ˜Œæ³° <beos@turbolinux.com.cn>,还有
+      å¦å¤–一个è”系地å€ï¼šlinuxrat@gnuchina.org。
+
+      ç¹ä½“中文教程是从简体中文教程翻译版使用 Debian GNU/Linux ä¸­æ–‡é¡¹ç›®å°
+      ç»„的于广辉先生编写的中文汉字转ç å™¨  autoconvert è½¬æ¢è€Œæˆçš„,并对转
+      æ¢çš„结果åšäº†ä¸€äº›ç»†èŠ‚的改动。
+
+  å˜æ›´è®°å½•ï¼š
+  =========
+      2012å¹´10月01æ—¥ èµµæ¶› <alick9188@gmail.com>
+      å°† vimtutor ä¸­è¯‘版从 1.5 å‡çº§åˆ° 1.7。
+
+      2002å¹´08月30æ—¥ æ¢æ˜Œæ³° <beos@turbolinux.com.cn>
+      æ„Ÿè°¢ RMS@SMTH çš„指正,将多处错误修正。
+
+      2002å¹´04月22æ—¥ æ¢æ˜Œæ³° <linuxrat@gnuchina.org>
+      æ„Ÿè°¢ xuandong@sh163.net çš„指正,将两处错别字修正。
+
+      2002å¹´03月18æ—¥ æ¢æ˜Œæ³° <linuxrat@gnuchina.org>
+      æ ¹æ®Bram Molenaar先生在2002å¹´03月16日的æ¥ä¿¡è¦æ±‚,将vimtutor1.4中译
+      ç‰ˆå‡çº§åˆ°vimtutor1.5。
+
+      2001å¹´11月15æ—¥ æ¢æ˜Œæ³° <linuxrat@gnuchina.org>
+      å°†vimtutor1.4中译版æ交给Bram Molenaarå’ŒSven Guckes。
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.zh_tw.utf-8 b/runtime/tutor/tutor.zh_tw.utf-8
new file mode 100644 (file)
index 0000000..21d7020
--- /dev/null
@@ -0,0 +1,852 @@
+===============================================================================
+=      æ­¡     è¿Ž     é–±     è®€   ã€Š V I M  æ•™  ç¨‹ ã€‹   â”€â”€     ç‰ˆæœ¬ 1.5      =
+===============================================================================
+     vim æ˜¯ä¸€å€‹å…·æœ‰å¾ˆå¤šå‘½ä»¤çš„功能éžå¸¸å¼·å¤§çš„編輯器。é™äºŽç¯‡å¹…,在本教程當中
+     ä¸å°±è©³ç´°ä»‹ç´¹äº†ã€‚本教程的設計目標是講述一些必è¦çš„基本命令,而掌æ¡å¥½é€™
+     äº›å‘½ä»¤ï¼Œæ‚¨å°±èƒ½å¤ å¾ˆå®¹æ˜“å°‡vim當作一個通用的è¬èƒ½ç·¨è¼¯å™¨ä¾†ä½¿ç”¨äº†ã€‚
+
+     å®Œæˆæœ¬æ•™ç¨‹çš„內容大約需è¦25-30分é˜ï¼Œå–決于您訓練的時間。
+
+     æ¯ä¸€ç¯€çš„命令æ“作將會更改本文。推薦您復制本文的一個副本,然後在副本上
+     é€²è¡Œè¨“ç·´(如果您是通éŽ"vimtutor"來啟動教程的,那麼本文就已經是副本了)。
+
+     åˆ‡è¨˜ä¸€é»žï¸°æœ¬æ•™ç¨‹çš„設計æ€è·¯æ˜¯åœ¨ä½¿ç”¨ä¸­é€²è¡Œå­¸ç¿’的。也就是說,您需è¦é€šéŽ
+     åŸ·è¡Œå‘½ä»¤ä¾†å­¸ç¿’它們本身的正確用法。如果您åªæ˜¯é–±è®€è€Œä¸æ“作,那麼您å¯èƒ½
+     æœƒå¾ˆå¿«éºå¿˜é€™äº›å‘½ä»¤çš„ï¼
+
+     å¥½äº†ï¼Œç¾åœ¨è«‹ç¢ºå®šæ‚¨çš„Shift-Lock(大å°å¯«éŽ–定éµ)還沒有按下,然後按éµç›¤ä¸Š
+     çš„å­—æ¯éµ j è¶³å¤ å¤šçš„次數來移動光標,直到第一節的內容能夠完全充滿å±å¹•ã€‚
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬ä¸€è¬›ç¬¬ä¸€ç¯€ï¸°ç§»å‹•å…‰æ¨™
+
+
+   â€»â€» è¦ç§»å‹•å…‰æ¨™ï¼Œè«‹ä¾ç…§èªªæ˜Žåˆ†åˆ¥æŒ‰ä¸‹ hã€jã€kã€l éµã€‚ â€»â€»
+
+            ^
+            k              æ示︰ h çš„éµä½äºŽå·¦é‚Šï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±æœƒå‘左移動。
+       < h      l >               l çš„éµä½äºŽå³é‚Šï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±æœƒå‘å³ç§»å‹•ã€‚
+            j                     j éµçœ‹èµ·ä¾†å¾ˆè±¡ä¸€æ”¯å°–端方å‘æœä¸‹çš„箭頭。
+            v
+
+  1. è«‹éš¨æ„在å±å¹•å…§ç§»å‹•å…‰æ¨™ï¼Œç›´è‡³æ‚¨è¦ºå¾—舒æœç‚ºæ­¢ã€‚
+
+  2. æŒ‰ä¸‹ä¸‹è¡Œéµ(j),直到出ç¾å…‰æ¨™é‡å¾©ä¸‹è¡Œã€‚
+
+---> ç¾åœ¨æ‚¨æ‡‰è©²å·²ç¶“學會如何移動到下一講å§ã€‚
+
+  3. ç¾åœ¨è«‹ä½¿ç”¨ä¸‹è¡Œéµï¼Œå°‡å…‰æ¨™ç§»å‹•åˆ°ç¬¬äºŒè¬›ã€‚
+
+æ示︰如果您ä¸æ•¢ç¢ºå®šæ‚¨æ‰€æŒ‰ä¸‹çš„å­—æ¯ï¼Œè«‹æŒ‰ä¸‹<ESC>éµå›žåˆ°æ­£å¸¸(Normal)模å¼ã€‚
+      ç„¶å¾Œå†æ¬¡å¾žéµç›¤è¼¸å…¥æ‚¨æƒ³è¦çš„命令。
+
+æ示︰光標éµæ‡‰ç•¶ä¹Ÿèƒ½æ­£å¸¸å·¥ä½œçš„。但是使用hjkléµï¼Œåœ¨ç¿’慣之後您就能夠快速
+      åœ°åœ¨å±å¹•å…§å››è™•ç§»å‹•å…‰æ¨™äº†ã€‚
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬ä¸€è¬›ç¬¬äºŒç¯€ï¸°VIM的進入和退出
+
+
+  !! ç‰¹åˆ¥æ示︰敬請閱讀完整本一節的內容,然後æ‰èƒ½åŸ·è¡Œä»¥ä¸‹æ‰€è¬›è§£çš„命令。
+
+  1. è«‹æŒ‰<ESC>éµ(這是為了確ä¿æ‚¨è™•åœ¨æ­£å¸¸æ¨¡å¼)。
+
+  2. ç„¶å¾Œè¼¸å…¥ï¸°                   :q! <回車>
+
+---> é€™ç¨®æ–¹å¼çš„退出編輯器絕ä¸æœƒä¿å­˜æ‚¨é€²å…¥ç·¨è¼¯å™¨ä»¥ä¾†æ‰€åšçš„改動。
+     å¦‚果您想ä¿å­˜æ›´æ”¹å†é€€å‡ºï¼Œè«‹è¼¸å…¥ï¸°
+                               :wq  <回車>
+
+  3. å¦‚果您看到了命令行æ示符,請輸入能夠帶您回到本教程的命令,那就是︰
+
+               vimtutor <回車>
+
+     é€šå¸¸æƒ…æ³ä¸‹æ‚¨ä¹Ÿå¯ä»¥ç”¨é€™ç¨®æ–¹å¼ï¸°
+
+               vim tutor <回車>
+
+---> é€™è£¡çš„ 'vim' è¡¨ç¤ºé€²å…¥vim編輯器,而 'tutor'則是您準備è¦ç·¨è¼¯çš„文件。
+
+  4. å¦‚果您自信已經牢牢記ä½äº†é€™äº›æ­¥é©Ÿçš„話,請從步驟1執行到步驟3退出,然
+     å¾Œå†æ¬¡é€²å…¥ç·¨è¼¯å™¨ã€‚接著將光標移動到第一講第三節來繼續我們的教程講解。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬ä¸€è¬›ç¬¬ä¸‰ç¯€ï¸°æ–‡æœ¬ç·¨è¼¯ä¹‹åˆªé™¤
+
+
+   ** åœ¨æ­£å¸¸(Normal)模å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ x éµä¾†åˆªé™¤å…‰æ¨™æ‰€åœ¨ä½ç½®çš„字符。**
+
+  1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„那一行。
+
+  2. ç‚ºäº†ä¿®æ­£è¼¸å…¥éŒ¯èª¤ï¼Œè«‹å°‡å…‰æ¨™ç§»è‡³æº–備刪除的字符的ä½ç½®è™•ã€‚
+
+  3. ç„¶å¾ŒæŒ‰ä¸‹ x éµå°‡éŒ¯èª¤å­—符刪除掉。
+
+  4. é‡å¾©æ­¥é©Ÿ2到步驟4,直到å¥å­ä¿®æ­£ç‚ºæ­¢ã€‚
+
+---> The ccow jumpedd ovverr thhe mooon.
+
+  5. å¥½äº†ï¼Œè©²è¡Œå·²ç¶“修正了,下一節內容是第一講第四節。
+
+特別æ示︰在您ç€è¦½æœ¬æ•™ç¨‹æ™‚,ä¸è¦å¼·è¡Œè¨˜æ†¶ã€‚記ä½ä¸€é»žï¸°åœ¨ä½¿ç”¨ä¸­å­¸ç¿’。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ç¬¬ä¸€è¬›ç¬¬å››ç¯€ï¸°æ–‡æœ¬ç·¨è¼¯ä¹‹æ’å…¥
+
+
+        ** åœ¨æ­£å¸¸æ¨¡å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ i éµä¾†æ’入文本。**
+
+  1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„第一行。
+
+  2. ç‚ºäº†ä½¿å¾—第一行內容雷åŒäºŽç¬¬äºŒè¡Œï¼Œè«‹å°‡å…‰æ¨™ç§»è‡³æ–‡æœ¬ç¬¬ä¸€å€‹å­—符準備æ’å…¥
+     çš„ä½ç½®ã€‚
+
+  3. ç„¶å¾ŒæŒ‰ä¸‹ i éµï¼ŒæŽ¥è‘—輸入必è¦çš„文本字符。
+
+  4. æ‰€æœ‰æ–‡æœ¬éƒ½ä¿®æ­£å®Œç•¢ï¼Œè«‹æŒ‰ä¸‹ <ESC> éµè¿”回正常模å¼ã€‚
+     é‡å¾©æ­¥é©Ÿ2至步驟4以便修正å¥å­ã€‚
+
+---> There is text misng this .
+---> There is some text missing from this line.
+
+  5. å¦‚果您å°æ–‡æœ¬æ’å…¥æ“作已經很滿æ„,請接著閱讀下é¢çš„å°çµã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬ä¸€è¬›å°çµ
+
+
+  1. å…‰æ¨™åœ¨å±å¹•æ–‡æœ¬ä¸­çš„移動既å¯ä»¥ç”¨ç®­é ­éµï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ hjkl å­—æ¯éµã€‚
+        h (左移)     j (下行)       k (上行)         l (å³ç§»)
+
+  2. æ¬²é€²å…¥vim編輯器(從命令行æ示符),請輸入︰vim æ–‡ä»¶å <回車>
+
+  3. æ¬²é€€å‡ºvim編輯器,請輸入以下命令放棄所有修改︰
+
+       <ESC>   :q!      <回車>
+
+     æˆ–者輸入以下命令ä¿å­˜æ‰€æœ‰ä¿®æ”¹ï¸°
+
+       <ESC>   :wq      <回車>
+
+  4. åœ¨æ­£å¸¸æ¨¡å¼ä¸‹åˆªé™¤å…‰æ¨™æ‰€åœ¨ä½ç½®çš„字符,請按︰ x
+
+  5. åœ¨æ­£å¸¸æ¨¡å¼ä¸‹è¦åœ¨å…‰æ¨™æ‰€åœ¨ä½ç½®é–‹å§‹æ’入文本,請按︰
+
+        i     è¼¸å…¥å¿…è¦æ–‡æœ¬       <ESC>
+
+特別æ示︰按下 <ESC> éµæœƒå¸¶æ‚¨å›žåˆ°æ­£å¸¸æ¨¡å¼æˆ–者å–消一個ä¸æœŸæœ›æˆ–者部分完æˆ
+的命令。
+
+好了,第一講到此çµæŸã€‚下é¢æŽ¥ä¸‹ä¾†ç¹¼çºŒç¬¬äºŒè¬›çš„內容。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬äºŒè¬›ç¬¬ä¸€ç¯€ï¸°åˆªé™¤é¡žå‘½ä»¤
+
+
+           ** è¼¸å…¥ dw å¯ä»¥å¾žå…‰æ¨™è™•åˆªé™¤è‡³ä¸€å€‹å–®å­—/單詞的末尾。**
+
+  1. è«‹æŒ‰ä¸‹ <ESC> éµç¢ºä¿æ‚¨è™•äºŽæ­£å¸¸æ¨¡å¼ã€‚
+
+  2. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„那一行。
+
+  3. è«‹å°‡å…‰æ¨™ç§»è‡³æº–å‚™è¦åˆªé™¤çš„單詞的開始。
+
+  4. æŽ¥è‘—輸入 dw åˆªé™¤æŽ‰è©²å–®è©žã€‚
+
+  ç‰¹åˆ¥æ示︰您所輸入的 dw æœƒåœ¨æ‚¨è¼¸å…¥çš„åŒæ™‚出ç¾åœ¨å±å¹•çš„最後一行。如果您輸
+  å…¥æœ‰èª¤ï¼Œè«‹æŒ‰ä¸‹ <ESC> éµå–消,然後é‡æ–°å†ä¾†ã€‚
+
+---> There are a some words fun that don't belong paper in this sentence.
+
+  5. é‡å¾©æ­¥é©Ÿ3至步驟4,直至å¥å­ä¿®æ­£å®Œç•¢ã€‚接著繼續第二講第二節內容。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     ç¬¬äºŒè¬›ç¬¬äºŒç¯€ï¸°å…¶ä»–刪除類命令
+
+
+                  ** è¼¸å…¥ d$ å¾žç•¶å‰å…‰æ¨™åˆªé™¤åˆ°è¡Œæœ«ã€‚**
+
+  1. è«‹æŒ‰ä¸‹ <ESC> éµç¢ºä¿æ‚¨è™•äºŽæ­£å¸¸æ¨¡å¼ã€‚
+
+  2. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„那一行。
+
+  3. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°è©²è¡Œçš„尾部(也就是在第一個點號‘.’後é¢)。
+
+  4. ç„¶å¾Œè¼¸å…¥ d$ å¾žå…‰æ¨™è™•åˆªè‡³ç•¶å‰è¡Œå°¾éƒ¨ã€‚
+
+---> Somebody typed the end of this line twice. end of this line twice.
+
+
+  5. è«‹ç¹¼çºŒå­¸ç¿’第二講第三節就知é“是怎麼回事了。
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ç¬¬äºŒè¬›ç¬¬ä¸‰ç¯€ï¸°é—œäºŽå‘½ä»¤å’Œå°è±¡
+
+
+  åˆªé™¤å‘½ä»¤ d çš„æ ¼å¼å¦‚下︰
+
+        [number]   d   object      æˆ–者     d         [number]   object
+
+  å…¶æ„如下︰
+    number - ä»£è¡¨åŸ·è¡Œå‘½ä»¤çš„次數(å¯é¸é …,缺çœè¨­ç½®ç‚º 1 )。
+    d - ä»£è¡¨åˆªé™¤ã€‚
+    object - ä»£è¡¨å‘½ä»¤æ‰€è¦æ“作的å°è±¡(下é¢æœ‰ç›¸é—œä»‹ç´¹)。
+
+  ä¸€å€‹ç°¡çŸ­çš„å°è±¡åˆ—表︰
+    w - å¾žç•¶å‰å…‰æ¨™ç•¶å‰ä½ç½®ç›´åˆ°å–®å­—/單詞末尾,包括空格。
+    e - å¾žç•¶å‰å…‰æ¨™ç•¶å‰ä½ç½®ç›´åˆ°å–®å­—/單詞末尾,但是 *ä¸* åŒ…括空格。
+    $ - å¾žç•¶å‰å…‰æ¨™ç•¶å‰ä½ç½®ç›´åˆ°ç•¶å‰è¡Œæœ«ã€‚
+
+特別æ示︰
+    å°äºŽå‹‡äºŽæŽ¢ç´¢è€…,請在正常模å¼ä¸‹é¢åƒ…按代表相應å°è±¡çš„éµè€Œä¸ä½¿ç”¨å‘½ä»¤ï¼Œå‰‡
+    å°‡çœ‹åˆ°å…‰æ¨™çš„移動正如上é¢çš„å°è±¡åˆ—表所代表的一樣。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+               ç¬¬äºŒè¬›ç¬¬å››ç¯€ï¸°å°è±¡å‘½ä»¤çš„特殊情æ³
+
+
+              ** è¼¸å…¥ dd å¯ä»¥åˆªé™¤æ•´ä¸€å€‹ç•¶å‰è¡Œã€‚ **
+
+  é‘’于整行刪除的高頻度,VIM çš„設計者決定è¦ç°¡åŒ–整行刪除,僅需è¦åœ¨åŒä¸€è¡Œä¸Š
+  æ“Šæ‰“兩次 d å°±å¯ä»¥åˆªé™¤æŽ‰å…‰æ¨™æ‰€åœ¨çš„整行了。
+
+  1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢çš„短å¥æ®µè½ä¸­çš„第二行。
+  2. è¼¸å…¥ dd åˆªé™¤è©²è¡Œã€‚
+  3. ç„¶å¾Œç§»å‹•åˆ°ç¬¬å››è¡Œã€‚
+  4. æŽ¥è‘—輸入 2dd (還記得å‰é¢è¬›éŽçš„ number-command-object å—Žï¼Ÿ) åˆªé™¤å…©è¡Œã€‚
+
+      1)  Roses are red,
+      2)  Mud is fun,
+      3)  Violets are blue,
+      4)  I have a car,
+      5)  Clocks tell time,
+      6)  Sugar is sweet
+      7)  And so are you.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        ç¬¬äºŒè¬›ç¬¬äº”節︰撤消類命令
+
+
+        ** è¼¸å…¥ u ä¾†æ’¤æ¶ˆæœ€å¾ŒåŸ·è¡Œçš„命令,輸入 U ä¾†ä¿®æ­£æ•´è¡Œã€‚**
+
+  1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„那一行,並將其置于第一個錯誤
+     è™•ã€‚
+  2. è¼¸å…¥ x åˆªé™¤ç¬¬ä¸€å€‹ä¸æƒ³ä¿ç•™çš„å­—æ¯ã€‚
+  3. ç„¶å¾Œè¼¸å…¥ u æ’¤æ¶ˆæœ€å¾ŒåŸ·è¡Œçš„(一次)命令。
+  4. é€™æ¬¡è¦ä½¿ç”¨ x ä¿®æ­£æœ¬è¡Œçš„所有錯誤。
+  5. ç¾åœ¨è¼¸å…¥ä¸€å€‹å¤§å¯«çš„ U ï¼Œæ¢å¾©åˆ°è©²è¡Œçš„原始狀態。
+  6. æŽ¥è‘—多次輸入 u ä»¥æ’¤æ¶ˆ U ä»¥åŠæ›´å‰çš„命令。
+  7. ç„¶å¾Œå¤šæ¬¡è¼¸å…¥ CTRL-R (先按下 CTRL éµä¸æ”¾é–‹ï¼ŒæŽ¥è‘—輸入 R éµ) ï¼Œé€™æ¨£å°±
+     å¯ä»¥åŸ·è¡Œæ¢å¾©å‘½ä»¤ï¼Œä¹Ÿå°±æ˜¯æ’¤æ¶ˆæŽ‰æ’¤æ¶ˆå‘½ä»¤ã€‚
+
+---> Fiix the errors oon thhis line and reeplace them witth undo.
+
+  8. é€™äº›éƒ½æ˜¯éžå¸¸æœ‰ç”¨çš„命令。下é¢æ˜¯ç¬¬äºŒè¬›çš„å°çµäº†ã€‚
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬äºŒè¬›å°çµ
+
+
+  1. æ¬²å¾žç•¶å‰å…‰æ¨™åˆªé™¤è‡³å–®å­—/單詞末尾,請輸入︰dw
+
+  2. æ¬²å¾žç•¶å‰å…‰æ¨™åˆªé™¤è‡³ç•¶å‰è¡Œæœ«å°¾ï¼Œè«‹è¼¸å…¥ï¸°d$
+
+  3. æ¬²åˆªé™¤æ•´è¡Œï¼Œè«‹è¼¸å…¥ï¸°dd
+
+  4. åœ¨æ­£å¸¸æ¨¡å¼ä¸‹ä¸€å€‹å‘½ä»¤çš„æ ¼å¼æ˜¯ï¸°
+
+       [number]   command   object     æˆ–者     command      [number]   object
+     å…¶æ„是︰
+       number - ä»£è¡¨çš„是命令執行的次數
+       command - ä»£è¡¨è¦åšçš„事情,比如 d ä»£è¡¨åˆªé™¤
+       object - ä»£è¡¨è¦æ“作的å°è±¡ï¼Œæ¯”如 w ä»£è¡¨å–®å­—/單詞,$ ä»£è¡¨åˆ°è¡Œæœ«ç­‰ç­‰ã€‚
+               $ (to the end of line), etc.
+
+  5. æ¬²æ’¤æ¶ˆä»¥å‰çš„æ“作,請輸入︰u (å°å¯«çš„u)
+     æ¬²æ’¤æ¶ˆåœ¨ä¸€è¡Œä¸­æ‰€åšçš„改動,請輸入︰U (大寫的U)
+     æ¬²æ’¤æ¶ˆä»¥å‰çš„撤消命令,æ¢å¾©ä»¥å‰çš„æ“作çµæžœï¼Œè«‹è¼¸å…¥ï¸°CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        ç¬¬ä¸‰è¬›ç¬¬ä¸€ç¯€ï¸°ç½®å…¥é¡žå‘½ä»¤
+
+
+              ** è¼¸å…¥ p å°‡æœ€å¾Œä¸€æ¬¡åˆªé™¤çš„內容置入光標之後 **
+
+  1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢ç¤ºèŒƒæ®µè½çš„首行。
+
+  2. è¼¸å…¥ dd å°‡è©²è¡Œåˆªé™¤ï¼Œé€™æ¨£æœƒå°‡è©²è¡Œä¿å­˜åˆ°vimçš„ç·©æ²–å€ä¸­ã€‚
+
+  3. æŽ¥è‘—將光標移動到準備置入的ä½ç½®çš„上方。記ä½ï¸°æ˜¯ä¸Šæ–¹å“¦ã€‚
+
+  4. ç„¶å¾Œåœ¨æ­£å¸¸æ¨¡å¼ä¸‹(<ESC>éµé€²å…¥),輸入 p å°‡è©²è¡Œç²˜è²¼ç½®å…¥ã€‚
+
+  5. é‡å¾©æ­¥é©Ÿ2至步驟4,將所有的行ä¾åºæ”¾ç½®åˆ°æ­£ç¢ºçš„ä½ç½®ä¸Šã€‚
+
+     d) Can you learn too?
+     b) Violets are blue,
+     c) Intelligence is learned,
+     a) Roses are red,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      ç¬¬ä¸‰è¬›ç¬¬äºŒç¯€ï¸°æ›¿æ›é¡žå‘½ä»¤
+
+
+         ** è¼¸å…¥ r å’Œä¸€å€‹å­—符替æ›å…‰æ¨™æ‰€åœ¨ä½ç½®çš„字符。**
+
+  1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„第一行。
+
+  2. è«‹ç§»å‹•å…‰æ¨™åˆ°ç¬¬ä¸€å€‹éŒ¯èª¤çš„é©ç•¶ä½ç½®ã€‚
+
+  3. æŽ¥è‘—輸入 r ï¼Œé€™æ¨£å°±èƒ½å°‡éŒ¯èª¤æ›¿æ›æŽ‰äº†ã€‚
+
+  4. é‡å¾©æ­¥é©Ÿ2和步驟3,直到第一行已經修改完畢。
+
+--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
+--->  When this line was typed in, someone pressed some wrong keys!
+
+  5. ç„¶å¾Œæˆ‘們繼續學校第三講第三節。
+
+特別æ示︰切記您è¦åœ¨ä½¿ç”¨ä¸­å­¸ç¿’,而ä¸æ˜¯åœ¨è¨˜æ†¶ä¸­å­¸ç¿’。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬ä¸‰è¬›ç¬¬ä¸‰ç¯€ï¸°æ›´æ”¹é¡žå‘½ä»¤
+
+
+          ** è¦æ”¹è®Šä¸€å€‹å–®å­—/單詞的部分或者全部,請輸入 cw **
+
+  1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„第一行。
+
+  2. æŽ¥è‘—把光標放在單詞 lubw çš„字毠u çš„ä½ç½®é‚£è£¡ã€‚
+
+  3. ç„¶å¾Œè¼¸å…¥ cw å°±å¯ä»¥ä¿®æ­£è©²å–®è©žäº†(在本例這裡是輸入 ine ã€‚)
+
+  4. æœ€å¾ŒæŒ‰ <ESC> éµï¼Œç„¶å¾Œå…‰æ¨™å®šä½åˆ°ä¸‹ä¸€å€‹éŒ¯èª¤ç¬¬ä¸€å€‹æº–備更改的字æ¯è™•ã€‚
+
+  5. é‡å¾©æ­¥é©Ÿ3和步驟4,直到第一個å¥å­å®Œå…¨é›·åŒç¬¬äºŒå€‹å¥å­ã€‚
+
+---> This lubw has a few wptfd that mrrf changing usf the change command.
+---> This line has a few words that need changing using the change command.
+
+æ示︰請注愠cw å‘½ä»¤ä¸åƒ…僅是替æ›äº†ä¸€å€‹å–®è©žï¼Œä¹Ÿè®“您進入文本æ’入狀態了。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      ç¬¬ä¸‰è¬›ç¬¬å››ç¯€ï¸°ä½¿ç”¨c指令的其他更改類命令
+
+
+            ** æ›´æ”¹é¡žæŒ‡ä»¤å¯ä»¥ä½¿ç”¨åŒåˆªé™¤é¡žå‘½ä»¤æ‰€ä½¿ç”¨çš„å°è±¡åƒæ•¸ã€‚**
+
+  1. æ›´æ”¹é¡žæŒ‡ä»¤çš„工作方å¼è·Ÿåˆªé™¤é¡žå‘½ä»¤æ˜¯ä¸€è‡´çš„。æ“作格å¼æ˜¯ï¸°
+
+       [number]   c   object      æˆ–者           c   [number]   object
+
+  2. å°è±¡åƒæ•¸ä¹Ÿæ˜¯ä¸€æ¨£çš„,比如 w ä»£è¡¨å–®å­—/單詞,$代表行末等等。
+
+  3. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„第一行。
+
+  4. æŽ¥è‘—將光標移動到第一個錯誤處。
+
+  5. ç„¶å¾Œè¼¸å…¥ c$ ä½¿å¾—該行剩下的部分更正得åŒç¬¬äºŒè¡Œä¸€æ¨£ã€‚最後按 <ESC> éµã€‚
+
+---> The end of this line needs some help to make it like the second.
+---> The end of this line needs to be corrected using the  c$  command.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬ä¸‰è¬›å°çµ
+
+
+  1. è¦é‡æ–°ç½®å…¥å·²ç¶“刪除的文本內容,請輸入å°å¯«å­—毠p。該æ“作å¯ä»¥å°‡å·²åˆªé™¤
+     çš„文本內容置于光標之後。如果最後一次刪除的是一個整行,那麼該行將置
+     äºŽç•¶å‰å…‰æ¨™æ‰€åœ¨è¡Œçš„下一行。
+
+  2. è¦æ›¿æ›å…‰æ¨™æ‰€åœ¨ä½ç½®çš„字符,請輸入å°å¯«çš„ r å’Œè¦æ›¿æ›æŽ‰åŽŸä½ç½®å­—符的新字
+     ç¬¦å³å¯ã€‚
+
+  3. æ›´æ”¹é¡žå‘½ä»¤å…許您改變指定的å°è±¡ï¼Œå¾žç•¶å‰å…‰æ¨™æ‰€åœ¨ä½ç½®ç›´åˆ°å°è±¡çš„末尾。
+     æ¯”如輸入 cw å¯ä»¥æ›¿æ›ç•¶å‰å…‰æ¨™åˆ°å–®è©žçš„末尾的內容;輸入 c$ å¯ä»¥æ›¿æ›ç•¶
+     å‰å…‰æ¨™åˆ°è¡Œæœ«çš„內容。
+
+  4. æ›´æ”¹é¡žå‘½ä»¤çš„æ ¼å¼æ˜¯ï¸°
+
+        [number]   c   object        æˆ–者    c   [number]   object
+
+下é¢æˆ‘們繼續學習下一講。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                    ç¬¬å››è¬›ç¬¬ä¸€ç¯€ï¸°å®šä½åŠæ–‡ä»¶ç‹€æ…‹
+
+
+  ** è¼¸å…¥ CTRL-g é¡¯ç¤ºç•¶å‰ç·¨è¼¯æ–‡ä»¶ä¸­ç•¶å‰å…‰æ¨™æ‰€åœ¨è¡Œä½ç½®ä»¥åŠæ–‡ä»¶ç‹€æ…‹ä¿¡æ¯ã€‚
+     è¼¸å…¥ SHIFT-G å‰‡ç›´æŽ¥è·³è½‰åˆ°æ–‡ä»¶ä¸­çš„æŸä¸€æŒ‡å®šè¡Œã€‚**
+
+  æ示︰切記è¦å…ˆé€šè®€æœ¬ç¯€å…§å®¹ï¼Œä¹‹å¾Œæ‰å¯ä»¥åŸ·è¡Œä»¥ä¸‹æ­¥é©Ÿ!!!
+
+  1. æŒ‰ä¸‹ CTRL éµä¸æ”¾é–‹ç„¶å¾ŒæŒ‰ g éµã€‚然後就會看到é é¢æœ€åº•éƒ¨å‡ºç¾ä¸€å€‹ç‹€æ…‹ä¿¡
+     æ¯è¡Œï¼Œé¡¯ç¤ºçš„內容是當å‰ç·¨è¼¯çš„文件å和文件的總行數。請記ä½æ­¥é©Ÿ3的行號。
+
+  2. æŒ‰ä¸‹ SHIFT-G éµå¯ä»¥ä½¿å¾—當å‰å…‰æ¨™ç›´æŽ¥è·³è½‰åˆ°æ–‡ä»¶æœ€å¾Œä¸€è¡Œã€‚
+
+  3. è¼¸å…¥æ‚¨æ›¾åœç•™çš„行號,然後按下 SHIFT-G。這樣就å¯ä»¥è¿”回到您第一次按下
+     CTRL-g æ™‚所在的行好了。注æ„︰輸入行號時,行號是ä¸æœƒåœ¨å±å¹•ä¸Šé¡¯ç¤ºå‡ºä¾†
+     çš„。
+
+  4. å¦‚果願æ„,您å¯ä»¥ç¹¼çºŒåŸ·è¡Œæ­¥é©Ÿ1至步驟三。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬å››è¬›ç¬¬äºŒç¯€ï¸°æœç´¢é¡žå‘½ä»¤
+
+
+     ** è¼¸å…¥ / ä»¥åŠå°¾éš¨çš„字符串å¯ä»¥ç”¨ä»¥åœ¨ç•¶å‰æ–‡ä»¶ä¸­æŸ¥æ‰¾è©²å­—符串。**
+
+  1. åœ¨æ­£å¸¸æ¨¡å¼ä¸‹è¼¸å…¥ / å­—符。您此時會注æ„到該字符和光標都會出ç¾åœ¨å±å¹•åº•
+     éƒ¨ï¼Œé€™è·Ÿ : å‘½ä»¤æ˜¯ä¸€æ¨£çš„。
+
+  2. æŽ¥è‘—輸入 errroor <回車>。那個errroor就是您è¦æŸ¥æ‰¾çš„字符串。
+
+  3. è¦æŸ¥æ‰¾åŒä¸Šä¸€æ¬¡çš„字符串,åªéœ€è¦æŒ‰ n éµã€‚è¦å‘相åæ–¹å‘查找åŒä¸Šä¸€æ¬¡çš„å­—
+     ç¬¦ä¸²ï¼Œè«‹è¼¸å…¥ Shift-N å³å¯ã€‚
+
+  4. å¦‚果您想逆å‘查找字符串,請使用 ? ä»£æ›¿ / é€²è¡Œã€‚
+
+---> When the search reaches the end of the file it will continue at the start.
+
+  "errroor" is not the way to spell error;  errroor is an error.
+
+  æ示︰如果查找已經到é”文件末尾,查找會自動從文件頭部繼續查找。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                  ç¬¬å››è¬›ç¬¬ä¸‰ç¯€ï¸°é…å°æ‹¬è™Ÿçš„查找
+
+
+             ** æŒ‰ % å¯ä»¥æŸ¥æ‰¾é…å°çš„括號 )ã€]ã€}。**
+
+  1. æŠŠå…‰æ¨™æ”¾åœ¨æœ¬ç¯€ä¸‹é¢æ¨™è¨˜æœ‰ --> é‚£ä¸€è¡Œä¸­çš„任何一個 (ã€[ æˆ– { è™•ã€‚
+
+  2. æŽ¥è‘—按 % å­—符。
+
+  3. æ­¤æ™‚光標的ä½ç½®æ‡‰ç•¶æ˜¯åœ¨é…å°çš„括號處。
+
+  4. å†æ¬¡æŒ‰ % å°±å¯ä»¥è·³å›žé…å°çš„第一個括號處。
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+æ示︰在程åºèª¿è©¦æ™‚,這個功能用來查找ä¸é…å°çš„括號是很有用的。
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     ç¬¬å››è¬›ç¬¬å››ç¯€ï¸°ä¿®æ­£éŒ¯èª¤çš„方法之一
+
+
+               ** è¼¸å…¥ :s/old/new/g å¯ä»¥æ›¿æ› old ç‚º new。**
+
+  1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„那一行。
+
+  2. è¼¸å…¥ :s/thee/the <回車> ã€‚請注æ„該命令åªæ”¹è®Šå…‰æ¨™æ‰€åœ¨è¡Œçš„第一個匹é…
+     ä¸²ã€‚
+
+  3. è¼¸å…¥ :s/thee/the/g      å‰‡æ˜¯æ›¿æ›å…¨è¡Œçš„匹é…串。
+
+---> the best time to see thee flowers is in thee spring.
+
+  4. è¦æ›¿æ›å…©è¡Œä¹‹é–“出ç¾çš„æ¯å€‹åŒ¹é…串,請輸入 :#,#s/old/new/g (#,#代表的是
+     å…©è¡Œçš„行號)。輸入 :%s/old/new/g å‰‡æ˜¯æ›¿æ›æ•´å€‹æ–‡ä»¶ä¸­çš„æ¯å€‹åŒ¹é…串。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬å››è¬›å°çµ
+
+
+  1. Ctrl-g ç”¨äºŽé¡¯ç¤ºç•¶å‰å…‰æ¨™æ‰€åœ¨ä½ç½®å’Œæ–‡ä»¶ç‹€æ…‹ä¿¡æ¯ã€‚Shift-G ç”¨äºŽå°‡å…‰æ¨™è·³
+     è½‰è‡³æ–‡ä»¶æœ€å¾Œä¸€è¡Œã€‚先敲入一個行號然後按 Shift-G å‰‡æ˜¯å°‡å…‰æ¨™ç§»å‹•è‡³è©²è¡Œ
+     è™Ÿä»£è¡¨çš„行。
+
+  2. è¼¸å…¥ / ç„¶å¾Œç·Šéš¨ä¸€å€‹å­—符串是則是在當å‰æ‰€ç·¨è¼¯çš„文檔中å‘後查找該字符串。
+     è¼¸å…¥å•è™Ÿ ? ç„¶å¾Œç·Šéš¨ä¸€å€‹å­—符串是則是在當å‰æ‰€ç·¨è¼¯çš„文檔中å‘å‰æŸ¥æ‰¾è©²å­—
+     ç¬¦ä¸²ã€‚完æˆä¸€æ¬¡æŸ¥æ‰¾ä¹‹å¾ŒæŒ‰ n éµå‰‡æ˜¯é‡å¾©ä¸Šä¸€æ¬¡çš„命令,å¯åœ¨åŒä¸€æ–¹å‘上查
+     æ‰¾ä¸‹ä¸€å€‹å­—符串所在;或者按 Shift-N å‘相åæ–¹å‘查找下該字符串所在。
+
+  3. å¦‚果光標當å‰ä½ç½®æ˜¯æ‹¬è™Ÿ(ã€)ã€[ã€]ã€{ã€},按 % å¯ä»¥å°‡å…‰æ¨™ç§»å‹•åˆ°é…å°çš„
+     æ‹¬è™Ÿä¸Šã€‚
+
+  4. åœ¨ä¸€è¡Œå…§æ›¿æ›é ­ä¸€å€‹å­—符串 old ç‚ºæ–°çš„字符串 new,請輸入  :s/old/new
+     åœ¨ä¸€è¡Œå…§æ›¿æ›æ‰€æœ‰çš„字符串 old ç‚ºæ–°çš„字符串 new,請輸入  :s/old/new/g
+     åœ¨å…©è¡Œå…§æ›¿æ›æ‰€æœ‰çš„字符串 old ç‚ºæ–°çš„字符串 new,請輸入  :#,#s/old/new/g
+     åœ¨æ–‡ä»¶å…§æ›¿æ›æ‰€æœ‰çš„字符串 old ç‚ºæ–°çš„字符串 new,請輸入  :%s/old/new/g
+     é€²è¡Œå…¨æ–‡æ›¿æ›æ™‚è©¢å•ç”¨æˆ¶ç¢ºèªæ¯å€‹æ›¿æ›éœ€æ·»åŠ  c é¸é …,請輸入 :%s/old/new/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+               ç¬¬äº”講第一節︰在 VIM å…§åŸ·è¡Œå¤–部命令的方法
+
+
+          ** è¼¸å…¥ :! ç„¶å¾Œç·Šéš¨è‘—輸入一個外部命令å¯ä»¥åŸ·è¡Œè©²å¤–部命令。**
+
+  1. æŒ‰ä¸‹æˆ‘們所熟悉的 : å‘½ä»¤è¨­ç½®å…‰æ¨™åˆ°å±å¹•åº•éƒ¨ã€‚這樣就å¯ä»¥è®“您輸入命令了。
+
+  2. æŽ¥è‘—輸入感嘆號 ! é€™å€‹å­—符,這樣就å…許您執行外部的 shell å‘½ä»¤äº†ã€‚
+
+  3. æˆ‘們以 ls å‘½ä»¤ç‚ºä¾‹ã€‚輸入 !ls <回車> ã€‚該命令就會列舉出您當å‰ç›®éŒ„çš„
+     å…§å®¹ï¼Œå°±å¦‚åŒæ‚¨åœ¨å‘½ä»¤è¡Œæ示符下輸入 ls å‘½ä»¤çš„çµæžœä¸€æ¨£ã€‚如果 !ls æ²’èµ·
+     ä½œç”¨ï¼Œæ‚¨å¯ä»¥è©¦è©¦ :!dir çœ‹çœ‹ã€‚
+
+---> æ示︰ æ‰€æœ‰çš„外部命令都å¯ä»¥ä»¥é€™ç¨®æ–¹å¼åŸ·è¡Œã€‚
+
+---> æ示︰ æ‰€æœ‰çš„ : å‘½ä»¤éƒ½å¿…須以 <回車> å‘Šçµ‚。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     ç¬¬äº”講第二節︰關于ä¿å­˜æ–‡ä»¶çš„更多信æ¯
+
+
+            ** è¦å°‡å°æ–‡ä»¶çš„改動ä¿å­˜åˆ°æ–‡ä»¶ä¸­ï¼Œè«‹è¼¸å…¥ :w FILENAME **
+
+  1. è¼¸å…¥ :!dir æˆ–者 :!ls ç²çŸ¥ç•¶å‰ç›®éŒ„的內容。您應當已知é“最後還得敲
+     <回車> å§ã€‚
+
+  2. é¸æ“‡ä¸€å€‹å°šæœªå­˜åœ¨æ–‡ä»¶å,比如 TEST ã€‚
+
+  3. æŽ¥è‘—輸入 :w TEST  (此處 TEST æ˜¯æ‚¨æ‰€é¸æ“‡çš„文件å。)
+
+  4. è©²å‘½ä»¤æœƒä»¥ TEST ç‚ºæ–‡ä»¶åä¿å­˜æ•´å€‹æ–‡ä»¶ (VIM æ•™ç¨‹)。為了確ä¿æ­£ç¢ºä¿å­˜ï¼Œ
+     è«‹å†æ¬¡è¼¸å…¥ :!dir æŸ¥çœ‹æ‚¨çš„目錄列表內容。
+
+---> è«‹æ³¨æ„︰如果您退出 VIM ç„¶å¾Œåœ¨ä»¥æ–‡ä»¶å TEST ç‚ºåƒæ•¸é€²å…¥ï¼Œé‚£éº¼è©²æ–‡ä»¶å…§
+     å®¹æ‡‰è©²åŒæ‚¨ä¿å­˜æ™‚的文件內容是完全一樣的。
+
+  5. ç¾åœ¨æ‚¨å¯ä»¥é€šéŽè¼¸å…¥ :!rm TEST ä¾†åˆªé™¤ TEST æ–‡ä»¶äº†ã€‚
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   ç¬¬äº”講第三節︰一個具有é¸æ“‡æ€§çš„ä¿å­˜å‘½ä»¤
+
+
+               ** è¦ä¿å­˜æ–‡ä»¶çš„部分內容,請輸入 :#,# w FILENAME **
+
+  1. å†ä¾†åŸ·è¡Œä¸€æ¬¡ :!dir æˆ–者 :!ls ç²çŸ¥ç•¶å‰ç›®éŒ„的內容,然後é¸æ“‡ä¸€å€‹åˆé©çš„
+     ä¸é‡å的文件å,比如 TEST ã€‚
+
+  2. æŽ¥è‘—將光標移動至本é çš„最頂端,然後按 CTRL-g æ‰¾åˆ°è©²è¡Œçš„行號。別忘了
+     è¡Œè™Ÿå“¦ã€‚
+
+  3. æŽ¥è‘—把光標移動至本é çš„最底端,å†æŒ‰ä¸€æ¬¡ CTRL-g ã€‚也別忘了這個行好哦。
+
+  4. ç‚ºäº†åªä¿å­˜æ–‡ç« çš„æŸå€‹éƒ¨åˆ†ï¼Œè«‹è¼¸å…¥ :#,# w TEST ã€‚這裡的 #,# å°±æ˜¯ä¸Šé¢
+     è¦æ±‚您記ä½çš„行號(頂端行號,底端行號),而 TEST å°±æ˜¯é¸å®šçš„文件å。
+
+  5. æœ€å¾Œï¼Œç”¨ :!dir ç¢ºèªæ–‡ä»¶æ˜¯å¦æ­£ç¢ºä¿å­˜ã€‚但是這次先別刪除掉。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                  ç¬¬äº”講第四節︰æå–å’Œåˆä¸¦æ–‡ä»¶
+
+
+       ** è¦å‘當å‰æ–‡ä»¶ä¸­æ’å…¥å¦å¤–的文件的內容,請輸入 :r FILENAME **
+
+  1. è«‹éµå…¥ :!dir ç¢ºèªæ‚¨å‰é¢å‰µå»ºçš„ TEST æ–‡ä»¶é‚„在。
+
+  2. ç„¶å¾Œå°‡å…‰æ¨™ç§»å‹•è‡³ç•¶å‰é é¢çš„頂端。
+
+特別æ示︰ åŸ·è¡Œæ­¥é©Ÿ3之後您將看到第五講第三節,請屆時å†å¾€ä¸‹ç§»å‹•å›žåˆ°é€™è£¡ä¾†ã€‚
+
+  3. æŽ¥è‘—通鎠:r TEST å°‡å‰é¢å‰µå»ºçš„å為 TEST çš„文件æå–進來。
+
+特別æ示︰您所æå–進來的文件將從光標所在ä½ç½®è™•é–‹å§‹ç½®å…¥ã€‚
+
+  4. ç‚ºäº†ç¢ºèªæ–‡ä»¶å·²ç¶“æå–æˆåŠŸï¼Œç§»å‹•å…‰æ¨™å›žåˆ°åŽŸä¾†çš„ä½ç½®å°±å¯ä»¥æ³¨æ„有兩份第
+     äº”講第三節,一份是原本,å¦å¤–一份是來自文件的副本。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬äº”講å°çµ
+
+
+  1. :!command ç”¨äºŽåŸ·è¡Œä¸€å€‹å¤–部命令 command。
+
+     è«‹çœ‹ä¸€äº›å¯¦éš›ä¾‹å­ï¸°
+        :!dir          -  ç”¨äºŽé¡¯ç¤ºç•¶å‰ç›®éŒ„的內容。
+        :!rm FILENAME  -  ç”¨äºŽåˆªé™¤å為 FILENAME çš„文件。
+
+  2. :w FILENAME  å¯å°‡ç•¶å‰ VIM ä¸­æ­£åœ¨ç·¨è¼¯çš„文件ä¿å­˜åˆ°å為 FILENAME
+     çš„文件中。
+
+  3. :#,#w FILENAME å¯å°‡ç•¶å‰ç·¨è¼¯æ–‡ä»¶ç¬¬ # è¡Œè‡³ç¬¬ # è¡Œçš„內容ä¿å­˜åˆ°æ–‡ä»¶
+     FILENAME ä¸­ã€‚
+
+  4. :r FILENAME å¯æå–ç£ç›¤æ–‡ä»¶ FILENAME ä¸¦å°‡å…¶æ’入到當å‰æ–‡ä»¶çš„光標ä½ç½®
+     å¾Œé¢ã€‚
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        ç¬¬å…­è¬›ç¬¬ä¸€ç¯€ï¸°æ‰“開類命令
+
+
+        ** è¼¸å…¥ o å°‡åœ¨å…‰æ¨™çš„下方打開新的一行並進入æ’入模å¼ã€‚**
+
+  1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„那一行。
+
+  2. æŽ¥è‘—輸入å°å¯«çš„ o åœ¨å…‰æ¨™ *下方* æ‰“開新的一行並進入æ’入模å¼ã€‚
+
+  3. ç„¶å¾Œå¾©åˆ¶æ¨™è¨˜æœ‰ ---> çš„行並按 <ESC> éµé€€å‡ºæ’入模å¼è€Œé€²å…¥æ­£å¸¸æ¨¡å¼ã€‚
+
+---> After typing  o  the cursor is placed on the open line in Insert mode.
+
+  4. ç‚ºäº†åœ¨å…‰æ¨™ *上方* æ‰“開新的一行,åªéœ€è¦è¼¸å…¥å¤§å¯«çš„ O è€Œä¸æ˜¯å°å¯«çš„ o
+     å°±å¯ä»¥äº†ã€‚請在下行測試一下å§ã€‚當光標處在在該行上時,按 Shift-Oå¯ä»¥
+     åœ¨è©²è¡Œä¸Šæ–¹æ–°é–‹ä¸€è¡Œã€‚
+
+Open up a line above this by typing Shift-O while the cursor is on this line.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       ç¬¬å…­è¬›ç¬¬äºŒç¯€ï¸°å…‰æ¨™å¾Œæ’入類命令
+
+
+                    ** è¼¸å…¥ a å°‡å¯åœ¨å…‰æ¨™ä¹‹å¾Œæ’入文本。 **
+
+  1. è«‹åœ¨æ­£å¸¸æ¨¡å¼ä¸‹é€šéŽè¼¸å…¥ $ å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„第一行
+     çš„末尾。
+
+  2. æŽ¥è‘—輸入å°å¯«çš„ a å‰‡å¯åœ¨å…‰æ¨™ä¹‹å¾Œæ’入文本了。大寫的 A å‰‡å¯ä»¥ç›´æŽ¥åœ¨è¡Œ
+     æœ«æ’入文本。
+
+æ示︰輸入大寫 A çš„æ“作方法å¯ä»¥åœ¨è¡Œæœ«æ’入文本,é¿å…了輸入 i,光標定ä½åˆ°
+      æœ€å¾Œä¸€å€‹å­—符,輸入的文本,<ESC> å›žå¾©æ­£å¸¸æ¨¡å¼ï¼Œç®­é ­å³éµç§»å‹•å…‰æ¨™ä»¥åŠ
+      x åˆªé™¤ç•¶å‰å…‰æ¨™æ‰€åœ¨ä½ç½®å­—符等等諸多ç¹é›œçš„æ“作。
+
+  3. æ“作之後第一行就å¯ä»¥è£œå……完整了。請注æ„光標後æ’入文本與æ’入模å¼æ˜¯åŸº
+     æœ¬å®Œå…¨ä¸€è‡´çš„,åªæ˜¯æ–‡æœ¬æ’入的ä½ç½®å®šä½ç¨æœ‰ä¸åŒç½·äº†ã€‚
+
+---> This line will allow you to practice
+---> This line will allow you to practice appending text to the end of a line.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   ç¬¬å…­è¬›ç¬¬ä¸‰ç¯€ï¸°å¦å¤–一個置æ›é¡žå‘½ä»¤çš„版本
+
+
+                     ** è¼¸å…¥å¤§å¯«çš„ R å¯é€£çºŒæ›¿æ›å¤šå€‹å­—符。**
+
+  1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> çš„第一行。
+
+  2. ç§»å‹•å…‰æ¨™åˆ°ç¬¬ä¸€è¡Œä¸­ä¸åŒäºŽæ¨™æœ‰ ---> çš„第二行的第一個單詞的開始,å³å–®
+     è©ž last è™•ã€‚
+
+  3. ç„¶å¾Œè¼¸å…¥å¤§å¯«çš„ R é–‹å§‹æŠŠç¬¬ä¸€è¡Œä¸­çš„ä¸åŒäºŽç¬¬äºŒè¡Œçš„剩余字符é€ä¸€è¼¸å…¥ï¼Œå°±
+     å¯ä»¥å…¨éƒ¨æ›¿æ›æŽ‰åŽŸæœ‰çš„字符而使得第一行完全雷åŒç¬¬äºŒè¡Œäº†ã€‚
+
+---> To make the first line the same as the last on this page use the keys.
+---> To make the first line the same as the second, type R and the new text.
+
+  4. è«‹æ³¨æ„︰如果您按 <ESC> é€€å‡ºç½®æ›æ¨¡å¼å›žå¾©æ­£å¸¸æ¨¡å¼ï¼Œå°šæœªæ›¿æ›çš„文本將ä»
+     ç„¶ä¿æŒåŽŸç‹€ã€‚
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           ç¬¬å…­è¬›ç¬¬å››ç¯€ï¸°è¨­ç½®é¡žå‘½ä»¤çš„é¸é …
+
+
+                 ** è¨­ç½®å¯ä½¿æŸ¥æ‰¾æˆ–者替æ›å¯å¿½ç•¥å¤§å°å¯«çš„é¸é … **
+
+
+  1. è¦æŸ¥æ‰¾å–®è©ž ignore å¯åœ¨æ­£å¸¸æ¨¡å¼ä¸‹è¼¸å…¥ /ignore ã€‚è¦é‡å¾©æŸ¥æ‰¾è©²è©žï¼Œå¯ä»¥
+     é‡å¾©æŒ‰ n éµã€‚
+
+  2. ç„¶å¾Œè¨­ç½® ic é¸é …(ic就是英文忽略大å°å¯«Ignore Case的首字æ¯ç¸®å¯«è©ž),å³
+     è¼¸å…¥ï¸°
+       :set ic
+
+  3. ç¾åœ¨å¯ä»¥é€šéŽéµå…¥ n éµå†æ¬¡æŸ¥æ‰¾å–®è©ž ignore。é‡å¾©æŸ¥æ‰¾å¯ä»¥é‡å¾©éµå…¥ n éµã€‚
+
+  4. ç„¶å¾Œè¨­ç½® hlsearch å’Œ incsearch é€™å…©å€‹é¸é …,輸入以下內容︰
+     :set hls is
+
+  5. ç¾åœ¨å¯ä»¥å†æ¬¡è¼¸å…¥æŸ¥æ‰¾å‘½ä»¤ï¼Œçœ‹çœ‹æœƒæœ‰ä»€éº¼æ•ˆæžœï¸°
+     /ignore
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              ç¬¬å…­è¬›å°çµ
+
+
+  1. è¼¸å…¥å°å¯«çš„ o å¯ä»¥åœ¨å…‰æ¨™ä¸‹æ–¹æ‰“開新的一行並將光標置于新開的行首,進入
+     æ’入模å¼ã€‚
+     è¼¸å…¥å¤§å¯«çš„ O å¯ä»¥åœ¨å…‰æ¨™ä¸Šæ–¹æ‰“開新的一行並將光標置于新開的行首,進入
+     æ’入模å¼ã€‚
+
+  2. è¼¸å…¥å°å¯«çš„ a å¯ä»¥åœ¨å…‰æ¨™æ‰€åœ¨ä½ç½®ä¹‹å¾Œæ’入文本。
+     è¼¸å…¥å¤§å¯«çš„ A å¯ä»¥åœ¨å…‰æ¨™æ‰€åœ¨è¡Œçš„行末之後æ’入文本。
+
+  3. è¼¸å…¥å¤§å¯«çš„ R å°‡é€²å…¥æ›¿æ›æ¨¡å¼ï¼Œç›´è‡³æŒ‰ <ESC> éµé€€å‡ºæ›¿æ›æ¨¡å¼è€Œé€²å…¥æ­£å¸¸
+     æ¨¡å¼ã€‚
+
+  4. è¼¸å…¥ :set xxx å¯ä»¥è¨­ç½® xxx é¸é …。
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      ç¬¬ä¸ƒè¬›ï¸°åœ¨ç·šå¹«åŠ©å‘½ä»¤
+
+                     ** ä½¿ç”¨åœ¨ç·šå¹«åŠ©ç³»çµ± **
+
+  Vim æ“有一個細致全é¢çš„在線幫助系統。è¦å•Ÿå‹•è©²å¹«åŠ©ç³»çµ±ï¼Œè«‹é¸æ“‡å¦‚下三種方
+  æ³•ä¹‹ä¸€ï¸°
+       - æŒ‰ä¸‹ <HELP> éµ (如果éµç›¤ä¸Šæœ‰çš„話)
+       - æŒ‰ä¸‹ <F1> éµ (如果éµç›¤ä¸Šæœ‰çš„話)
+       - è¼¸å…¥        :help <回車>
+
+  è¼¸å…¥ :q <回車> å¯ä»¥é—œé–‰å¹«åŠ©çª—å£ã€‚
+
+  æ供一個正確的åƒæ•¸çµ¦":help"命令,您å¯ä»¥æ‰¾åˆ°é—œäºŽè©²ä¸»é¡Œçš„幫助。請試驗以
+  ä¸‹åƒæ•¸(å¯åˆ¥å¿˜äº†æŒ‰å›žè»Šéµå“¦ã€‚:)︰
+
+         :help w <回車>
+         :help c_<T <回車>
+         :help insert-index <回車>
+         :help user-manual <回車>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     ç¬¬å…«è¬›ï¸°å‰µå»ºä¸€å€‹å•Ÿå‹•è…³æœ¬
+
+                        ** å•Ÿç”¨vim的功能 **
+
+  Vim的功能特性è¦æ¯”vi多得多,但大部分功能都沒有缺çœæ¿€æ´»ã€‚為了啟動更多的
+  åŠŸèƒ½ï¼Œæ‚¨å¾—創建一個vimrc文件。
+
+  1. é–‹å§‹ç·¨è¼¯vimrc文件,這å–決于您所使用的æ“作系統︰
+
+     :edit ~/.vimrc            é€™æ˜¯Unix系統所使用的命令
+     :edit $VIM/_vimrc         é€™æ˜¯Windows系統所使用的命令
+
+  2. æŽ¥è‘—å°Žå…¥vimrc范例文件︰
+
+     :read $VIMRUNTIME/vimrc_example.vim
+
+  3. ä¿å­˜æ–‡ä»¶ï¼Œå‘½ä»¤ç‚ºï¸°
+
+     :write
+
+  åœ¨ä¸‹æ¬¡æ‚¨å•Ÿå‹•vim的時候,編輯器就會有了語法高亮的功能。您å¯ä»¥ç¹¼çºŒæŠŠæ‚¨å–œ
+  æ­¡çš„其它功能設置添加到這個vimrc文件中。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  vim æ•™ç¨‹åˆ°æ­¤çµæŸã€‚本教程åªæ˜¯ç‚ºäº†ç°¡æ˜Žåœ°ä»‹ç´¹ä¸€ä¸‹vim編輯器,但已足以讓您
+  å¾ˆå®¹æ˜“學會使用本編輯器了。毋庸質疑,vim還有很多很多的命令,本教程所介
+  ç´¹çš„還差得é è‘—呢。所以您è¦ç²¾é€šçš„話,還望繼續努力哦。下一步您å¯ä»¥é–±è®€
+  vim手冊,使用的命令是︰
+       :help user-manual
+
+  ç‚ºäº†æ›´é€²ä¸€æ­¥çš„åƒè€ƒå’Œå­¸ç¿’,以下這本書值得推薦︰
+
+       Vim - Vi Improved - ä½œè€…︰Steve Oualline
+       å‡ºç‰ˆç¤¾ï¸°New Riders
+
+  é€™æ˜¯ç¬¬ä¸€æœ¬å®Œå…¨è¬›è§£vim的書ç±ã€‚å°äºŽåˆå­¸è€…特別有用。其中還包å«æœ‰å¤§é‡å¯¦ä¾‹
+  å’Œåœ–示。欲知詳情,請訪啠http://iccf-holland.org/click5.html
+
+  ä»¥ä¸‹é€™æœ¬æ›¸æ¯”較è€äº†è€Œä¸”內容主è¦æ˜¯vi而ä¸æ˜¯vim,但是也值得推薦︰
+
+       Learning the Vi Editor - ä½œè€…︰Linda Lamb
+       å‡ºç‰ˆç¤¾ï¸°O'Reilly & Associates Inc.
+
+  é€™æ˜¯ä¸€æœ¬ä¸éŒ¯çš„書,通éŽå®ƒæ‚¨å¹¾ä¹Žèƒ½å¤ äº†è§£åˆ°å…¨éƒ¨vi能夠åšåˆ°çš„事情。此書的第
+  å…­å€‹ç‰ˆæœ¬ä¹ŸåŒ…å«äº†ä¸€äº›é—œäºŽvimçš„ä¿¡æ¯ã€‚
+
+  æœ¬æ•™ç¨‹æ˜¯ç”±ä¾†è‡ªCalorado School of Mineseçš„Michael C. Pierceã€Robert K.
+  Ware æ‰€ç·¨å¯«çš„,其中來自Colorado State Universityçš„Charles Smithæ供了
+  å¾ˆå¤šå‰µæ„。編者通信地å€æ˜¯ï¸°
+
+       bware@mines.colorado.edu
+
+  æœ¬æ•™ç¨‹å·²ç”±Bram Moolenaar專為vim進行修訂。
+
+
+
+  è­¯åˆ¶è€…附言︰
+  ===========
+      ç°¡é«”中文教程翻譯版之譯制者為æ¢æ˜Œæ³° <beos@turbolinux.com.cn>,還有
+      å¦å¤–一個è¯ç³»åœ°å€ï¸°linuxrat@gnuchina.org。
+
+      ç¹é«”中文教程是從簡體中文教程翻譯版使用 Debian GNU/Linux ä¸­æ–‡é …ç›®å°
+      çµ„的于廣è¼å…ˆç”Ÿç·¨å¯«çš„中文漢字轉碼器  autoconvert è½‰æ›è€Œæˆçš„,並å°è½‰
+      æ›çš„çµæžœåšäº†ä¸€äº›ç´°ç¯€çš„改動。
+
+  è®Šæ›´è¨˜éŒ„︰
+  =========
+      2002å¹´08月30æ—¥ æ¢æ˜Œæ³° <beos@turbolinux.com.cn>
+      æ„Ÿè¬ RMS@SMTH çš„指正,將多處錯誤修正。
+
+      2002å¹´04月22æ—¥ æ¢æ˜Œæ³° <linuxrat@gnuchina.org>
+      æ„Ÿè¬ xuandong@sh163.net çš„指正,將兩處錯別字修正。
+
+      2002å¹´03月18æ—¥ æ¢æ˜Œæ³° <linuxrat@gnuchina.org>
+      æ ¹æ“šBram Molenaar先生在2002å¹´03月16日的來信è¦æ±‚,將vimtutor1.4中譯
+      ç‰ˆå‡ç´šåˆ°vimtutor1.5。
+
+      2001å¹´11月15æ—¥ æ¢æ˜Œæ³° <linuxrat@gnuchina.org>
+      å°‡vimtutor1.4中譯版æ交給Bram Molenaarå’ŒSven Guckes。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
index b35100c..3e9b56f 100644 (file)
@@ -1,7 +1,7 @@
 " An example for a vimrc file.
 "
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last change: 2008 Dec 17
+" Last change: 2011 Apr 15
 "
 " To use it, copy it to
 "     for Unix and OS/2:  ~/.vimrc
@@ -91,6 +91,6 @@ endif " has("autocmd")
 " file it was loaded from, thus the changes you made.
 " Only define it when not defined already.
 if !exists(":DiffOrig")
-  command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
+  command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
                  \ | wincmd p | diffthis
 endif
index a44ee4a..4c67b09 100644 (file)
@@ -15,6 +15,6 @@ REGEDIT4
 [HKEY_LOCAL_MACHINE\Software\Vim\Gvim]
    "path"="gvim.exe"
 
-[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 7.3]
-   "DisplayName"="Vim 7.3: Edit with Vim popup menu entry"
+[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Vim 7.4]
+   "DisplayName"="Vim 7.4: Edit with Vim popup menu entry"
    "UninstallString"="uninstal.exe"
diff --git a/src/GvimExt/Make_cyg.mak b/src/GvimExt/Make_cyg.mak
new file mode 100644 (file)
index 0000000..80a2a65
--- /dev/null
@@ -0,0 +1,77 @@
+# Project: gvimext
+# Generates gvimext.dll with gcc.
+# To be used with Cygwin.
+#
+# Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
+# Now it is allocated dymanically by the linker by evaluating all DLLs
+# already loaded in memory. The binary image contains as well information
+# for automatic pseudo-rebasing, if needed by the system. ALV 2004-02-29
+
+# If cross-compiling set this to yes, else set it to no
+CROSS = no
+#CROSS = yes
+# For the old MinGW 2.95 (the one you get e.g. with debian woody)
+# set the following variable to yes and check if the executables are
+# really named that way.
+# If you have a newer MinGW or you are using cygwin set it to no and
+# check also the executables
+MINGWOLD = no
+
+# Link against the shared versions of libgcc/libstdc++ by default.  Set
+# STATIC_STDCPLUS to "yes" to link against static versions instead.
+STATIC_STDCPLUS=no
+#STATIC_STDCPLUS=yes
+
+# Note: -static-libstdc++ is not available until gcc 4.5.x.
+LDFLAGS += -shared
+ifeq (yes, $(STATIC_STDCPLUS))
+LDFLAGS += -static-libgcc -static-libstdc++
+endif
+
+ifeq ($(CROSS),yes)
+DEL = rm
+ifeq ($(MINGWOLD),yes)
+CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
+else
+CXXFLAGS := -O2 -mno-cygwin
+endif
+else
+CXXFLAGS := -O2 -mno-cygwin
+ifneq (sh.exe, $(SHELL))
+DEL = rm
+else
+DEL = del
+endif
+endif
+CXX := $(CROSS_COMPILE)g++
+WINDRES := $(CROSS_COMPILE)windres
+WINDRES_CXX = $(CXX)
+WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
+LIBS :=  -luuid
+RES  := gvimext.res
+DEFFILE = gvimext_ming.def
+OBJ  := gvimext.o
+
+DLL  := gvimext.dll
+
+.PHONY: all all-before all-after clean clean-custom
+
+all: all-before $(DLL) all-after
+
+$(DLL): $(OBJ) $(RES) $(DEFFILE)
+       $(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
+               -Wl,--enable-auto-image-base \
+               -Wl,--enable-auto-import \
+               -Wl,--whole-archive \
+                       $^ \
+               -Wl,--no-whole-archive \
+                       $(LIBS)
+
+gvimext.o: gvimext.cpp
+       $(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
+
+$(RES): gvimext_ming.rc
+       $(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
+
+clean: clean-custom
+       -$(DEL)  $(OBJ) $(RES) $(DLL)
index 5997e7e..9c383b0 100644 (file)
@@ -1,6 +1,6 @@
 # Project: gvimext
 # Generates gvimext.dll with gcc.
-# Can be used for Cygwin and MingW (MingW ignores -mno-cygwin)
+# To be used with MingW.
 #
 # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
 # Now it is allocated dymanically by the linker by evaluating all DLLs
@@ -17,15 +17,26 @@ CROSS = no
 # check also the executables
 MINGWOLD = no
 
+# Link against the shared versions of libgcc/libstdc++ by default.  Set
+# STATIC_STDCPLUS to "yes" to link against static versions instead.
+STATIC_STDCPLUS=no
+#STATIC_STDCPLUS=yes
+
+# Note: -static-libstdc++ is not available until gcc 4.5.x.
+LDFLAGS += -shared
+ifeq (yes, $(STATIC_STDCPLUS))
+LDFLAGS += -static-libgcc -static-libstdc++
+endif
+
 ifeq ($(CROSS),yes)
 DEL = rm
 ifeq ($(MINGWOLD),yes)
-CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
+CXXFLAGS := -O2 -fvtable-thunks
 else
-CXXFLAGS := -O2 -mno-cygwin
+CXXFLAGS := -O2
 endif
 else
-CXXFLAGS := -O2 -mno-cygwin
+CXXFLAGS := -O2
 ifneq (sh.exe, $(SHELL))
 DEL = rm
 else
@@ -34,6 +45,8 @@ endif
 endif
 CXX := $(CROSS_COMPILE)g++
 WINDRES := $(CROSS_COMPILE)windres
+WINDRES_CXX = $(CXX)
+WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
 LIBS :=  -luuid
 RES  := gvimext.res
 DEFFILE = gvimext_ming.def
@@ -46,7 +59,7 @@ DLL  := gvimext.dll
 all: all-before $(DLL) all-after
 
 $(DLL): $(OBJ) $(RES) $(DEFFILE)
-       $(CXX) -shared $(CXXFLAGS) -s -o $@ \
+       $(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
                -Wl,--enable-auto-image-base \
                -Wl,--enable-auto-import \
                -Wl,--whole-archive \
@@ -58,8 +71,7 @@ gvimext.o: gvimext.cpp
        $(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
 
 $(RES): gvimext_ming.rc
-       $(WINDRES) --input-format=rc --output-format=coff -DMING $? -o $@
+       $(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
 
 clean: clean-custom
        -$(DEL)  $(OBJ) $(RES) $(DLL)
-
index 2488025..5c598c1 100644 (file)
@@ -10,7 +10,11 @@ APPVER=4.0
 NODEBUG = 1
 !endif
 
-!include <win32.mak>
+!ifdef SDK_INCLUDE_DIR
+!include $(SDK_INCLUDE_DIR)\Win32.mak
+!else
+!include <Win32.mak>
+!endif
 
 all: gvimext.dll
 
index 55d5a76..70448b8 100644 (file)
@@ -142,6 +142,7 @@ static char *null_libintl_bindtextdomain(const char *, const char *);
 static int dyn_libintl_init(char *dir);
 static void dyn_libintl_end(void);
 
+static wchar_t *oldenv = NULL;
 static HINSTANCE hLibintlDLL = 0;
 static char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
 static char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
@@ -339,8 +340,10 @@ DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID  /* lpReserved */)
 inc_cRefThisDLL()
 {
 #ifdef FEAT_GETTEXT
-    if (g_cRefThisDll == 0)
+    if (g_cRefThisDll == 0) {
        dyn_gettext_load();
+       oldenv = GetEnvironmentStringsW();
+    }
 #endif
     InterlockedIncrement((LPLONG)&g_cRefThisDll);
 }
@@ -349,8 +352,13 @@ inc_cRefThisDLL()
 dec_cRefThisDLL()
 {
 #ifdef FEAT_GETTEXT
-    if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0)
+    if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0) {
        dyn_gettext_free();
+       if (oldenv != NULL) {
+           FreeEnvironmentStringsW(oldenv);
+           oldenv = NULL;
+       }
+    }
 #else
     InterlockedDecrement((LPLONG)&g_cRefThisDll);
 #endif
@@ -519,7 +527,7 @@ STDMETHODIMP_(ULONG) CShellExt::Release()
 //
 //  PARAMETERS:
 //    pIDFolder - Specifies the parent folder
-//    pDataObj  - Spefifies the set of items selected in that folder.
+//    pDataObj  - Specifies the set of items selected in that folder.
 //    hRegKey   - Specifies the type of the focused item in the selection.
 //
 //  RETURN VALUE:
@@ -586,8 +594,23 @@ STDMETHODIMP CShellExt::QueryContextMenu(HMENU hMenu,
 
     // Initialize m_cntOfHWnd to 0
     m_cntOfHWnd = 0;
-    // Retrieve all the vim instances
-    EnumWindows(EnumWindowsProc, (LPARAM)this);
+
+    HKEY keyhandle;
+    bool showExisting = true;
+
+    // Check whether "Edit with existing Vim" entries are disabled.
+    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
+                                      KEY_READ, &keyhandle) == ERROR_SUCCESS)
+    {
+       if (RegQueryValueEx(keyhandle, "DisableEditWithExisting", 0, NULL,
+                                                NULL, NULL) == ERROR_SUCCESS)
+           showExisting = false;
+       RegCloseKey(keyhandle);
+    }
+
+    // Retrieve all the vim instances, unless disabled.
+    if (showExisting)
+       EnumWindows(EnumWindowsProc, (LPARAM)this);
 
     if (cbFiles > 1)
     {
@@ -890,8 +913,8 @@ STDMETHODIMP CShellExt::InvokeGvim(HWND hParent,
                        NULL,           // Process handle not inheritable.
                        NULL,           // Thread handle not inheritable.
                        FALSE,          // Set handle inheritance to FALSE.
-                       0,              // No creation flags.
-                       NULL,           // Use parent's environment block.
+                       oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
+                       oldenv,         // Use unmodified environment block.
                        NULL,           // Use parent's starting directory.
                        &si,            // Pointer to STARTUPINFO structure.
                        &pi)            // Pointer to PROCESS_INFORMATION structure.
@@ -972,8 +995,8 @@ STDMETHODIMP CShellExt::InvokeSingleGvim(HWND hParent,
                NULL,           // Process handle not inheritable.
                NULL,           // Thread handle not inheritable.
                FALSE,          // Set handle inheritance to FALSE.
-               0,              // No creation flags.
-               NULL,           // Use parent's environment block.
+               oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
+               oldenv,         // Use unmodified environment block.
                NULL,           // Use parent's starting directory.
                &si,            // Pointer to STARTUPINFO structure.
                &pi)            // Pointer to PROCESS_INFORMATION structure.
index 459d103..e6d66f4 100644 (file)
@@ -1,7 +1,7 @@
 ;gvimdef.def : Declares the module parameters for the DLL.
 
 LIBRARY      gvimext
-DESCRIPTION  'Vim Shell Extension'
+DESCRIPTION  'Vim Shell Extension'
 
 EXPORTS
     DllCanUnloadNow private
index 0b47d7d..b96e1d3 100644 (file)
@@ -3,7 +3,7 @@
 ;Hence this is the same file as gvimext.def with private removed
 
 LIBRARY      gvimext
-DESCRIPTION  'Vim Shell Extension build with MinGW'
+DESCRIPTION  'Vim Shell Extension build with MinGW'
 
 EXPORTS
     DllCanUnloadNow = DllCanUnloadNow@0
index dd50e0d..aa4b6e3 100644 (file)
@@ -6,9 +6,8 @@ executable version of Vim, you don't need this.
 Contents:
 1. Generic
 2. Unix
-3. RISC OS
-4. OS/2 (with EMX 0.9b)
-5. Atari MiNT
+3. OS/2 (with EMX 0.9b)
+4. Atari MiNT
 
 See INSTALLami.txt              for Amiga
 See INSTALLmac.txt              for Macintosh
@@ -174,25 +173,7 @@ And to not search for locally installed headers and libraries at all, use:
        ./configure --without-local-dir
 
 
-3. RISC OS
-=============
-
-Much file renaming is needed before you can compile anything.
-You'll need UnixLib to link against, GCC and GNU make.
-
-I suggest you get the RISC OS binary distribution, which includes the
-Templates file and the loader.
-
-Try here: http://www.ecs.soton.ac.uk/~tal197
-
-Do
-    :help riscos
-
-within the editor for more information, or read the
-../runtime/doc/os_risc.txt help file.
-
-
-4. OS/2
+3. OS/2
 =======
 
 Summary:
@@ -237,7 +218,7 @@ Prerequisites:
 Check ../runtime/doc/os_os2.txt for additional info on running Vim.
 
 
-5. Atari MiNT
+4. Atari MiNT
 =============
 
 [NOTE: this is quite old, it might not work anymore]
index a698b35..7ba2801 100644 (file)
@@ -11,9 +11,9 @@ The file "feature.h" can be edited to match your preferences. You can skip
 this, then you will get the default behavior as is documented, which should
 be fine for most people.
 
-With the exception of the last two sections (Windows 3.1 and MS-DOS),
-this document assumes that you are building Vim for Win32
-(Windows NT/2000/XP/2003/Vista and Windows 95/98/Me)
+With the exception of two sections (Windows 3.1 and MS-DOS), this document
+assumes that you are building Vim for Win32 or later.
+(Windows 95/98/Me/NT/2000/XP/2003/Vista/7)
 
 
 Contents:
@@ -27,9 +27,13 @@ Contents:
 8. Windows 3.1
 9. MS-DOS
 
+10. Installing after building from sources
+
+
 The currently preferred method is using the free Visual C++ Toolkit 2008
-|msvc-2008-express|.  If you need the executable to run on Windows 98 or ME,
-use the 2003 one |msvc-2003-toolkit|.
+|msvc-2008-express|, the produced binary runs on most MS-Windows systems.  If
+you need the executable to run on Windows 98 or ME, use the 2003 one
+|msvc-2003-toolkit|.
 
 
 1. Microsoft Visual C++
@@ -41,6 +45,10 @@ Visual Studio
 Building with Visual Studio (VS 98, VS .NET, VS .NET 2003, VS 2005, and VS 2008)
 is straightforward. (These instructions should also work for VS 4 and VS 5.)
 
+Using VS C++ 2008 Express is recommended, the binaries build with that run on
+nearly all platforms.  Binaries from later versions may not run on Windows 95
+or XP.
+
 To build Vim from the command line with MSVC, use Make_mvc.mak.
 Visual Studio installed a batch file called vcvars32.bat, which you must
 run to set up paths for nmake and MSVC.
@@ -168,6 +176,10 @@ This includes the IDE and the debugger.
 To set the environment execute the msvc2008.bat script.  You can then build
 Vim with Make_mvc.mak.
 
+For building 64 bit binaries you also need to install the SDK:
+"Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1"
+You don't need the examples and documentation.
+
 
 Visual C++ 2010 Express Edition       *msvc-2010-express*
 -------------------------------
@@ -176,7 +188,7 @@ Visual C++ 2010 Express Edition can be downloaded for free from:
     http://www.microsoft.com/express/vc/Default.aspx
 This includes the IDE and the debugger.
 
-To set the environment execute the msvc2008.bat script.  You can then build
+To set the environment execute the msvc2010.bat script.  You can then build
 Vim with Make_mvc.mak.
 
 
@@ -235,6 +247,12 @@ If you are dismayed by how big the EXE is, I strongly recommend you get 'UPX'
 found at
     http://www.upx.org/
 
+As of 2011, UPX still does not support compressing 64-bit EXE's; if you have
+built a 64-bit vim then an alternative to UPX is 'MPRESS'. MPRESS can be found
+at:
+    http://www.matcode.com/mpress.htm
+
+
 ADDITION: NLS support with MinGW
 
 (by Eduardo F. Amatria <eferna1@platea.pntic.mec.es>)
@@ -286,10 +304,12 @@ Now you have created the Windows binary from your Linux box!  Have fun...
 6. Building with Python support
 ===============================
 
-(written by Ron Aaron: <ronaharon@yahoo.com>)
+For building with MSVC 2008 the "Windows Installer" from www.python.org
+works fine.
+
+(rest written by Ron Aaron: <ronaharon@yahoo.com>)
 
-This has been tested with the mingw32 compiler, and the ActiveState
-ActivePython:
+Building with the mingw32 compiler, and the ActiveState ActivePython:
     http://www.ActiveState.com/Products/ActivePython/
 
 After installing the ActivePython, you will have to create a 'mingw32'
@@ -406,5 +426,61 @@ Windows exe (GUI or console mode), or a 16-bit MS-DOS version.
 NOTE: multi-byte support is broken in the Borland libraries, not everything
 will work properly!  Esp. handling multi-byte file names.
 
-If you get all kinds of strange error messages when compiling, try adding
-changing the file format from "unix" to "dos".
+If you get all kinds of strange error messages when compiling, try changing
+the file format from "unix" to "dos".
+
+
+10. Installing after building from sources
+==========================================
+
+[provided by Michael Soyka]
+
+After you've built the Vim binaries as described above, you're ready to
+install Vim on your system.  However, if you've obtained the Vim sources
+using Mercurial or by downloading them as a unix tar file, you must first 
+create a "vim73" directory.  If you instead downloaded the sources as
+zip files, you can skip this setup as the zip archives already have the
+correct directory structure.  
+
+  A.  Create a Vim "runtime" subdirectory named "vim73"
+  -----------------------------------------------------
+  If you obtained your Vim sources as zip files, you can skip this step.  
+  Otherwise, continue reading.
+
+  Go to the directory that contains the Vim "src" and "runtime"
+  directories and create a new subdirectory named "vim73".  
+  
+  Copy the "runtime" files into "vim73":
+     copy runtime\* vim73
+
+  B.  Copy the new binaries into the "vim73" directory
+  ----------------------------------------------------
+  Regardless of how you installed the Vim sources, you need to copy the
+  new binaries you created above into "vim73":
+
+     copy src\*.exe vim73
+     copy src\GvimExt\gvimext.dll vim73
+     copy src\xxd\xxd.exe vim73
+
+  C.  Move the "vim73" directory into the Vim installation subdirectory
+  ---------------------------------------------------------------------
+  Move the "vim73" subdirectory into the subdirectory where you want Vim
+  to be installed.  Typically, this subdirectory will be named "vim".  
+  If you already have a "vim73" subdirectory in "vim", delete it first
+  by running its uninstal.exe program.  
+
+  D.  Install Vim
+  ---------------
+  "cd" to your Vim installation subdirectory "vim\vim73" and run the
+  "install.exe" program.  It will ask you a number of questions about
+  how you would like to have your Vim setup.  Among these are:
+  - You can tell it to write a "_vimrc" file with your preferences in the
+    parent directory.
+  - It can also install an "Edit with Vim" entry in the Windows Explorer
+    popup menu.
+  - You can have it create batch files, so that you can run Vim from the
+    console or in a shell.  You can select one of the directories in your
+    PATH or add the directory to PATH using the Windows Control Panel.  
+  - Create entries for Vim on the desktop and in the Start menu.
+
+Happy Vimming!
index 400d856..cbcbc49 100644 (file)
@@ -330,7 +330,7 @@ perl_env :
      Also VMS_JACKETS.EXE from OpenVMS Porting Library.
 
      Please note, that GTK uses /name=(as_is,short)/float=ieee/ieee=denorm
-     complier directives that is not compatible with "standard" VMS usage,
+     compiler directives that is not compatible with "standard" VMS usage,
      therefore other external features might fail as PERL, PYTHON and TCL
      support.
 
index 739fc62..8172c1f 100644 (file)
@@ -694,7 +694,7 @@ vimobj = $(vimobj) \
 
 !if ($(OSTYPE)==WIN32)
 vimobj = $(vimobj) \
-       $(OBJDIR)\os_win32.obj $(OBJDIR)\os_mswin.obj
+       $(OBJDIR)\os_win32.obj $(OBJDIR)\os_mswin.obj $(OBJDIR)\winclip.obj
 !elif ($(OSTYPE)==DOS16)
 vimobj = $(vimobj) \
        $(OBJDIR)\os_msdos.obj
@@ -1006,10 +1006,10 @@ if_perl.c: if_perl.xs typemap
        $(PERL)\bin\perl.exe $(PERL)\lib\ExtUtils\xsubpp -prototypes -typemap \
            $(PERL)\lib\ExtUtils\typemap if_perl.xs > $@
 
-$(OBJDIR)\if_python.obj: if_python.c python.lib
+$(OBJDIR)\if_python.obj: if_python.c if_py_both.h python.lib
        $(CC) -I$(PYTHON)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python.c
 
-$(OBJDIR)\if_python3.obj: if_python3.c python3.lib
+$(OBJDIR)\if_python3.obj: if_python3.c if_py_both.h python3.lib
        $(CC) -I$(PYTHON3)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python3.c
 
 $(OBJDIR)\if_ruby.obj: if_ruby.c ruby.lib
index 0ca7115..f955b4d 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Makefile for VIM on Win32, using Cygnus gcc
-# Last updated by Dan Sharp.  Last Change: 2010 Feb 24
+# Last updated by Dan Sharp.  Last Change: 2013 Apr 22
 #
 # Also read INSTALLpc.txt!
 #
 #   TCL_VER    define to version of TCL being used (83)
 #   DYNAMIC_TCL no or yes: use yes to load the TCL DLL dynamically (yes)
 # RUBY         define to path to Ruby dir to get Ruby support (not defined)
-#   RUBY_VER   define to version of Ruby being used (16)
+#   RUBY_VER           define to version of Ruby being used (16)
+#   RUBY_VER_LONG      same, but in format with dot. (1.6)
+#          You must set RUBY_VER_LONG when changing RUBY_VER.
+#          You must set RUBY_API_VER version to RUBY_VER_LONG.
+#          Don't set ruby API version to RUBY_VER like 191.
 #   DYNAMIC_RUBY no or yes: use yes to load the Ruby DLL dynamically (yes)
 # MZSCHEME     define to path to MzScheme dir to get MZSCHEME support (not defined)
 #   MZSCHEME_VER      define to version of MzScheme being used (209_000)
 #   DYNAMIC_MZSCHEME  no or yes: use yes to load the MzScheme DLLs dynamically (yes)
 #   MZSCHEME_DLLS     path to MzScheme DLLs (libmzgc and libmzsch), for "static" build.
+#   MZSCHEME_USE_RACKET  define to use "racket" instead of "mzsch".
 # LUA  define to path to Lua dir to get Lua support (not defined)
 #   LUA_VER        define to version of Lua being used (51)
 #   DYNAMIC_LUA  no or yes: use yes to load the Lua DLL dynamically (yes)
 #               (i386)
 # USEDLL       no or yes: set to yes to use the Runtime library DLL (no)
 #              For USEDLL=yes the cygwin1.dll is required to run Vim.
-#              "no" does not work with latest version of Cygwin, use
-#              Make_ming.mak instead.  Or set CC to gcc-3 and add
+#              For "no" the mingw-gcc-g++ package or the mingw64-i686-gcc-g++
+#              package is required to compile Vim.  Or set CC to gcc-3 and add
 #              -L/lib/w32api to EXTRA_LIBS.
 # POSTSCRIPT   no or yes: set to yes for PostScript printing (no)
 # FEATURES     TINY, SMALL, NORMAL, BIG or HUGE (BIG)
-# WINVER       Lowest Win32 version to support.  (0x0400)
+# WINVER       Lowest Win32 version to support.  (0x0500)
 # CSCOPE       no or yes: to include cscope interface support (yes)
 # OPTIMIZE     SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
 # NETBEANS     no or yes: to include netbeans interface support (yes when GUI
@@ -84,7 +89,7 @@ ARCH = i386
 endif
 
 ifndef WINVER
-WINVER = 0x0400
+WINVER = 0x0500
 endif
 
 ifndef CSCOPE
@@ -101,17 +106,35 @@ ifndef OPTIMIZE
 OPTIMIZE = MAXSPEED
 endif
 
+
+# Link against the shared version of libstdc++ by default.  Set
+# STATIC_STDCPLUS to "yes" to link against static version instead.
+ifndef STATIC_STDCPLUS
+STATIC_STDCPLUS=no
+endif
+
 ### See feature.h for a list of optionals.
 ### Any other defines can be included here.
 
 DEFINES = -DWIN32 -DHAVE_PATHDEF -DFEAT_$(FEATURES) \
          -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)
+ifeq ($(ARCH),x86-64)
+DEFINES+=-DMS_WIN64
+endif
 INCLUDES = -march=$(ARCH) -Iproto
 
 #>>>>> name of the compiler and linker, name of lib directory
-CROSS_COMPILE =
+ifeq (yes, $(USEDLL))
+# CROSS_COMPILE is used for the gvimext DLL.
+CROSS_COMPILE = i686-pc-mingw32-
 CC = gcc
 RC = windres
+else
+# i686-pc-mingw32-gcc, i686-w64-mingw32-gcc or gcc-3 can be used.
+CROSS_COMPILE = i686-pc-mingw32-
+CC = $(CROSS_COMPILE)gcc
+RC = $(CROSS_COMPILE)windres
+endif
 
 ##############################
 # DYNAMIC_PERL=yes and no both work
@@ -188,36 +211,61 @@ endif
 ##############################
 ifdef RUBY
 
+ifndef DYNAMIC_RUBY
+DYNAMIC_RUBY=yes
+endif
+#  Set default value
 ifndef RUBY_VER
-RUBY_VER=16
+RUBY_VER = 16
 endif
-
 ifndef RUBY_VER_LONG
-RUBY_VER_LONG=1.6
+RUBY_VER_LONG = 1.6
 endif
-
-ifndef DYNAMIC_RUBY
-DYNAMIC_RUBY = yes
+ifndef RUBY_API_VER
+RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
 endif
 
-ifeq ($(RUBY_VER), 16)
 ifndef RUBY_PLATFORM
+ifeq ($(RUBY_VER), 16)
 RUBY_PLATFORM = i586-mswin32
-endif
-ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
-endif
 else
-ifndef RUBY_PLATFORM
+ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),)
+RUBY_PLATFORM = i386-mingw32
+else
+ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/x64-mingw32),)
+RUBY_PLATFORM = x64-mingw32
+else
 RUBY_PLATFORM = i386-mswin32
 endif
+endif
+endif
+endif
+
 ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
+ifeq ($(RUBY_VER), 16)
+RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
+else
+ifeq ($(ARCH),x86-64)
+RUBY_INSTALL_NAME = x64-msvcrt-ruby$(RUBY_API_VER)
+else
+RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
+endif
 endif
 endif
 
+ifeq (19, $(word 1,$(sort 19 $(RUBY_VER))))
+RUBY_19_OR_LATER = 1
+endif
+
 DEFINES += -DFEAT_RUBY
+ifneq ($(findstring w64-mingw32,$(CC)),)
+# A workaround for mingw-w64
+DEFINES += -DHAVE_STRUCT_TIMESPEC -DHAVE_STRUCT_TIMEZONE
+endif
 INCLUDES += -I$(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+ifdef RUBY_19_OR_LATER
+INCLUDES += -I$(RUBY)/include/ruby-$(RUBY_VER_LONG) -I$(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+endif
 EXTRA_OBJS += $(OUTDIR)/if_ruby.o
 
 ifeq (yes, $(DYNAMIC_RUBY))
@@ -254,16 +302,22 @@ ifndef MZSCHEME_GENERATE_BASE
 MZSCHEME_GENERATE_BASE=no
 endif
 
+ifndef MZSCHEME_USE_RACKET
+MZSCHEME_MAIN_LIB=mzsch
+else
+MZSCHEME_MAIN_LIB=racket
+endif
+
 ifeq (yes, $(DYNAMIC_MZSCHEME))
-DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
 else
 ifndef MZSCHEME_DLLS
 MZSCHEME_DLLS = $(MZSCHEME)
 endif
 ifeq (yes,$(MZSCHEME_PRECISE_GC))
-MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER)
+MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
 else
-MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
+MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
 endif
 EXTRA_LIBS += -L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)/lib $(MZSCHEME_LIB)
 endif
@@ -442,7 +496,12 @@ endif
 ifeq (yes, $(OLE))
 DEFINES += -DFEAT_OLE
 EXTRA_OBJS += $(OUTDIR)/if_ole.o
-EXTRA_LIBS += -loleaut32 -lstdc++
+EXTRA_LIBS += -loleaut32
+ifeq (yes, $(STATIC_STDCPLUS))
+EXTRA_LIBS += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+else
+EXTRA_LIBS += -lstdc++
+endif
 endif
 
 ##############################
@@ -499,6 +558,7 @@ OBJ = \
        $(OUTDIR)/option.o \
        $(OUTDIR)/os_win32.o \
        $(OUTDIR)/os_mswin.o \
+       $(OUTDIR)/winclip.o \
        $(OUTDIR)/pathdef.o \
        $(OUTDIR)/popupmnu.o \
        $(OUTDIR)/quickfix.o \
@@ -529,7 +589,7 @@ xxd/xxd.exe: xxd/xxd.c
        $(MAKE) -C xxd -f Make_cyg.mak CC=$(CC) USEDLL=$(USEDLL)
 
 GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
-       $(MAKE) -C GvimExt -f Make_ming.mak CROSS_COMPILE=$(CROSS_COMPILE)
+       $(MAKE) -C GvimExt -f Make_cyg.mak CROSS_COMPILE=$(CROSS_COMPILE)
 
 vimrun.exe: vimrun.c
        $(CC) $(CFLAGS) -o vimrun.exe vimrun.c  $(LIBS)
@@ -558,7 +618,7 @@ ifdef MZSCHEME
 endif
        -$(DEL) pathdef.c
        $(MAKE) -C xxd -f Make_cyg.mak clean
-       $(MAKE) -C GvimExt -f Make_ming.mak clean
+       $(MAKE) -C GvimExt -f Make_cyg.mak clean
 
 distclean: clean
        -$(DEL) obj$(DIRSLASH)*.o
@@ -582,16 +642,19 @@ $(OUTDIR)/ex_docmd.o:     ex_docmd.c $(INCL) ex_cmds.h
 $(OUTDIR)/ex_eval.o:   ex_eval.c $(INCL) ex_cmds.h
        $(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
 
+$(OUTDIR)/gui_w32.o:   gui_w32.c gui_w48.c $(INCL)
+       $(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
+
 $(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h
        $(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
 
 $(OUTDIR)/if_ole.o:    if_ole.cpp $(INCL)
        $(CC) -c $(CFLAGS) if_ole.cpp -o $(OUTDIR)/if_ole.o
 
-$(OUTDIR)/if_python.o : if_python.c $(INCL)
+$(OUTDIR)/if_python.o : if_python.c if_py_both.h $(INCL)
        $(CC) -c $(CFLAGS) -I$(PYTHON)/include $< -o $@
 
-$(OUTDIR)/if_python3.o : if_python3.c $(INCL)
+$(OUTDIR)/if_python3.o : if_python3.c if_py_both.h $(INCL)
        $(CC) -c $(CFLAGS) -I$(PYTHON3)/include $< -o $@
 
 if_perl.c: if_perl.xs typemap
@@ -612,6 +675,9 @@ endif
 $(OUTDIR)/netbeans.o:  netbeans.c $(INCL) $(NBDEBUG_DEP)
        $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
 
+$(OUTDIR)/regexp.o:            regexp.c regexp_nfa.c $(INCL)
+       $(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
+
 $(OUTDIR)/if_mzsch.o:  if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP)
        $(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
 
index 91f3bb6..16589ea 100644 (file)
@@ -241,6 +241,7 @@ LINK32_OBJS= \
        "$(INTDIR)/ops.obj" \
        "$(INTDIR)/option.obj" \
        "$(INTDIR)/os_mswin.obj" \
+       "$(INTDIR)/winclip.obj" \
        "$(INTDIR)/os_win32.obj" \
        "$(INTDIR)/popupmnu.obj" \
        "$(INTDIR)/quickfix.obj" \
@@ -600,6 +601,10 @@ SOURCE=.\os_mswin.c
 # End Source File
 # Begin Source File
 
+SOURCE=.\winclip.c
+# End Source File
+# Begin Source File
+
 SOURCE=.\os_win32.c
 # End Source File
 # Begin Source File
index 306dff9..7aa3994 100644 (file)
@@ -1,25 +1,28 @@
-# Makefile for VIM on Win32, using 'EGCS/mingw32 1.1.2'.
+# Makefile for VIM on Win32
+#
 # Info at http://www.mingw.org
-# Also requires 'GNU make 3.77', which you can get through a link
-# to 'JanJaap's page from the above page.
+# Alternative x86 and 64-builds: http://mingw-w64.sourceforge.net
+# Also requires GNU make, which you can download from the same sites.
 # Get missing libraries from http://gnuwin32.sf.net.
 #
 # Tested on Win32 NT 4 and Win95.
 #
-# To make everything, just 'make -f Make_ming.mak'
-# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'
-# After a run, you can 'make -f Make_ming.mak clean' to clean up
+# To make everything, just 'make -f Make_ming.mak'.
+# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'.
+# After a run, you can 'make -f Make_ming.mak clean' to clean up.
 #
 # NOTE: Sometimes 'GNU Make' will stop after building vimrun.exe -- I think
 # it's just run out of memory or something.  Run again, and it will continue
 # with 'xxd'.
 #
-# "make upx" makes *compressed* versions of the GUI and console EXEs, using the
-# excellent UPX compressor:
+# "make upx" makes *compressed* versions of the 32 bit GUI and console EXEs,
+# using the excellent UPX compressor:
 #     http://upx.sourceforge.net/
+# "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
+#     http://www.matcode.com/mpress.htm
 #
-# Maintained by Ron Aaron <ronaharon@yahoo.com>
-# updated 2003 Jan 20
+# Maintained by Ron Aaron <ronaharon@yahoo.com> et al.
+# Updated 2012 Sep 5.
 
 #>>>>> choose options:
 # set to yes for a debug build
@@ -29,33 +32,42 @@ OPTIMIZE=MAXSPEED
 # set to yes to make gvim, no for vim
 GUI=yes
 # FEATURES=[TINY | SMALL  | NORMAL | BIG | HUGE]
-# set to TINY to make minimal version (few features)
+# Set to TINY to make minimal version (few features).
 FEATURES=BIG
-# set to one of i386, i486, i586, i686 as the minimum target processor
+# Set to one of i386, i486, i586, i686 as the minimum target processor.
+# For amd64/x64 architecture set ARCH=x86-64 .
 ARCH=i386
-# set to yes to cross-compile from unix; no=native Windows
+# Set to yes to cross-compile from unix; no=native Windows.
 CROSS=no
-# set to path to iconv.h and libiconv.a to enable using 'iconv.dll'
+# Set to path to iconv.h and libiconv.a to enable using 'iconv.dll'.
 #ICONV="."
 ICONV=yes
 GETTEXT=yes
-# set to yes to include multibyte support
+# Set to yes to include multibyte support.
 MBYTE=yes
-# set to yes to include IME support
+# Set to yes to include IME support.
 IME=yes
 DYNAMIC_IME=yes
-# set to yes to enable writing a postscript file with :hardcopy
+# Set to yes to enable writing a postscript file with :hardcopy.
 POSTSCRIPT=no
-# set to yes to enable OLE support
+# Set to yes to enable OLE support.
 OLE=no
-# Set the default $(WINVER) to make it work with pre-Win2k
-WINVER = 0x0400
-# Set to yes to enable Cscope support
+# Set the default $(WINVER) to make it work with pre-Win2k.
+ifndef WINVER
+WINVER = 0x0500
+endif
+# Set to yes to enable Cscope support.
 CSCOPE=yes
-# Set to yes to enable Netbeans support
+# Set to yes to enable Netbeans support.
 NETBEANS=$(GUI)
 
 
+# Link against the shared version of libstdc++ by default.  Set
+# STATIC_STDCPLUS to "yes" to link against static version instead.
+ifndef STATIC_STDCPLUS
+STATIC_STDCPLUS=no
+endif
+
 # If the user doesn't want gettext, undefine it.
 ifeq (no, $(GETTEXT))
 GETTEXT=
@@ -81,7 +93,7 @@ INTLLIB=gnu_gettext
 
 # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
 # or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
-# uncomment the following, but I can't build a static versión with them, ?-(|
+# uncomment the following, but I can't build a static version with them, ?-(|
 #GETTEXT=c:/gettext-0.10.37-20010430
 #STATIC_GETTEXT=USE_STATIC_GETTEXT
 #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
@@ -102,6 +114,13 @@ endif
 # on NT, it's here:
 PERLLIB=$(PERL)/lib
 PERLLIBS=$(PERLLIB)/Core
+XSUBPPTRY=$(PERLLIB)/ExtUtils/xsubpp
+XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPPTRY)'")
+ifeq "$(XSUBPP_EXISTS)" ""
+XSUBPP=perl $(XSUBPPTRY)
+else
+XSUBPP=xsubpp
+endif
 endif
 
 # uncomment 'LUA' if you want a Lua-enabled version
@@ -141,11 +160,17 @@ ifndef MZSCHEME_GENERATE_BASE
 MZSCHEME_GENERATE_BASE=no
 endif
 
+ifndef MZSCHEME_USE_RACKET
+MZSCHEME_MAIN_LIB=mzsch
+else
+MZSCHEME_MAIN_LIB=racket
+endif
+
 ifeq (no,$(DYNAMIC_MZSCHEME))
 ifeq (yes,$(MZSCHEME_PRECISE_GC))
-MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER)
+MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
 else
-MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
+MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
 endif
 # the modern MinGW can dynamically link to dlls directly.
 # point MZSCHEME_DLLS to where you put libmzschXXXXXXX.dll and libgcXXXXXXX.dll
@@ -237,7 +262,9 @@ endif
 #        DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
 #        RUBY_VER=[Ruby version, eg 16, 17] (default is 16)
 #        RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.6)
-#          You must set RUBY_VER_LONG when change RUBY_VER.
+#          You must set RUBY_VER_LONG when changing RUBY_VER.
+#          You must set RUBY_API_VER version to RUBY_VER_LONG.
+#          Don't set ruby API version to RUBY_VER like 191.
 #RUBY=c:/ruby
 ifdef RUBY
 ifndef DYNAMIC_RUBY
@@ -250,6 +277,9 @@ endif
 ifndef RUBY_VER_LONG
 RUBY_VER_LONG = 1.6
 endif
+ifndef RUBY_API_VER
+RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
+endif
 
 ifndef RUBY_PLATFORM
 ifeq ($(RUBY_VER), 16)
@@ -258,20 +288,35 @@ else
 ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),)
 RUBY_PLATFORM = i386-mingw32
 else
+ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/x64-mingw32),)
+RUBY_PLATFORM = x64-mingw32
+else
 RUBY_PLATFORM = i386-mswin32
 endif
 endif
 endif
+endif
 
 ifndef RUBY_INSTALL_NAME
 ifeq ($(RUBY_VER), 16)
-RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
+RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
 else
-RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
+ifeq ($(ARCH),x86-64)
+RUBY_INSTALL_NAME = x64-msvcrt-ruby$(RUBY_API_VER)
+else
+RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
+endif
 endif
 endif
 
-RUBYINC =-I $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+ifeq (19, $(word 1,$(sort 19 $(RUBY_VER))))
+RUBY_19_OR_LATER = 1
+endif
+
+RUBYINC = -I $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+ifdef RUBY_19_OR_LATER
+RUBYINC += -I $(RUBY)/include/ruby-$(RUBY_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+endif
 ifeq (no, $(DYNAMIC_RUBY))
 RUBYLIB = -L$(RUBY)/lib -l$(RUBY_INSTALL_NAME)
 endif
@@ -283,6 +328,9 @@ endif # RUBY
 DEF_GUI=-DFEAT_GUI_W32 -DFEAT_CLIPBOARD
 DEFINES=-DWIN32 -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
        -DHAVE_PATHDEF -DFEAT_$(FEATURES)
+ifeq ($(ARCH),x86-64)
+DEFINES+=-DMS_WIN64
+endif
 ifeq ($(CROSS),yes)
 # cross-compiler prefix:
 CROSS_COMPILE = i586-pc-mingw32msvc-
@@ -304,11 +352,13 @@ endif
 endif
 CC := $(CROSS_COMPILE)gcc
 WINDRES := $(CROSS_COMPILE)windres
+WINDRES_CC = $(CC)
 
 #>>>>> end of choices
 ###########################################################################
 
 CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
+WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
 
 ifdef GETTEXT
 DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
@@ -343,7 +393,10 @@ endif
 ifdef MZSCHEME
 CFLAGS += -I$(MZSCHEME)/include -DFEAT_MZSCHEME -DMZSCHEME_COLLECTS=\"$(MZSCHEME)/collects\"
 ifeq (yes, $(DYNAMIC_MZSCHEME))
-CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+endif
+ifeq (yes, "$(MZSCHEME_DEBUG)")
+CFLAGS += -DMZSCHEME_FORCE_GC
 endif
 endif
 
@@ -401,11 +454,32 @@ endif
 endif
 endif
 
-ifdef XPM
 # Only allow XPM for a GUI build.
 ifeq (yes, $(GUI))
-CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include
+
+ifndef XPM
+ifeq ($(ARCH),i386)
+XPM = xpm/x86
+endif
+ifeq ($(ARCH),i486)
+XPM = xpm/x86
+endif
+ifeq ($(ARCH),i586)
+XPM = xpm/x86
+endif
+ifeq ($(ARCH),i686)
+XPM = xpm/x86
+endif
+ifeq ($(ARCH),x86-64)
+XPM = xpm/x64
+endif
+endif
+ifdef XPM
+ifneq ($(XPM),no)
+CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include -I $(XPM)/../include
+endif
 endif
+
 endif
 
 ifeq ($(DEBUG),yes)
@@ -460,6 +534,7 @@ OBJ = \
        $(OUTDIR)/option.o \
        $(OUTDIR)/os_win32.o \
        $(OUTDIR)/os_mswin.o \
+       $(OUTDIR)/winclip.o \
        $(OUTDIR)/pathdef.o \
        $(OUTDIR)/popupmnu.o \
        $(OUTDIR)/quickfix.o \
@@ -535,10 +610,10 @@ TARGET := gvim$(DEBUG_SUFFIX).exe
 DEFINES += $(DEF_GUI)
 OBJ += $(GUIOBJ)
 LFLAGS += -mwindows
-OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
+OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
 else
 TARGET := vim$(DEBUG_SUFFIX).exe
-OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
+OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
 endif
 
 ifdef GETTEXT
@@ -571,8 +646,13 @@ endif
 endif
 
 ifeq (yes, $(OLE))
-LIB += -loleaut32 -lstdc++
+LIB += -loleaut32
 OBJ += $(OUTDIR)/if_ole.o
+ifeq (yes, $(STATIC_STDCPLUS))
+LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+else
+LIB += -lstdc++
+endif
 endif
 
 ifeq (yes, $(MBYTE))
@@ -614,8 +694,12 @@ upx: exes
        upx gvim.exe
        upx vim.exe
 
+mpress: exes
+       mpress gvim.exe
+       mpress vim.exe
+
 xxd/xxd.exe: xxd/xxd.c
-       $(MAKE) -C xxd -f Make_cyg.mak CC=$(CC)
+       $(MAKE) -C xxd -f Make_ming.mak CC=$(CC)
 
 GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
        $(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
@@ -633,27 +717,25 @@ ifdef MZSCHEME
        -$(DEL) mzscheme_base.c
 endif
        $(MAKE) -C GvimExt -f Make_ming.mak clean
-       $(MAKE) -C xxd -f Make_cyg.mak clean
+       $(MAKE) -C xxd -f Make_ming.mak clean
 
 ###########################################################################
 INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
        structs.h regexp.h option.h ex_cmds.h proto.h globals.h farsi.h \
        gui.h
 
-$(OUTDIR)/if_python.o : if_python.c $(INCL)
+$(OUTDIR)/if_python.o : if_python.c if_py_both.h $(INCL)
        $(CC) -c $(CFLAGS) $(PYTHONINC) -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\" $< -o $@
 
-$(OUTDIR)/if_python3.o : if_python3.c $(INCL)
+$(OUTDIR)/if_python3.o : if_python3.c if_py_both.h $(INCL)
        $(CC) -c $(CFLAGS) $(PYTHON3INC) -DDYNAMIC_PYTHON3_DLL=\"PYTHON$(PYTHON3_VER).dll\" $< -o $@
 
 $(OUTDIR)/%.o : %.c $(INCL)
        $(CC) -c $(CFLAGS) $< -o $@
 
-$(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
-       $(WINDRES) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
-
-$(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
-       $(WINDRES) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
+$(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
+       $(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
+           --input-format=rc --output-format=coff -i vim.rc -o $@
 
 $(OUTDIR):
        $(MKDIR) $(OUTDIR)
@@ -664,6 +746,9 @@ $(OUTDIR)/ex_docmd.o:       ex_docmd.c $(INCL) ex_cmds.h
 $(OUTDIR)/ex_eval.o:   ex_eval.c $(INCL) ex_cmds.h
        $(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
 
+$(OUTDIR)/gui_w32.o:   gui_w32.c gui_w48.c $(INCL)
+       $(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
+
 $(OUTDIR)/if_cscope.o: if_cscope.c $(INCL) if_cscope.h
        $(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
 
@@ -677,12 +762,15 @@ ifeq (16, $(RUBY))
 endif
 
 if_perl.c: if_perl.xs typemap
-       perl $(PERLLIB)/ExtUtils/xsubpp -prototypes -typemap \
+       $(XSUBPP) -prototypes -typemap \
             $(PERLLIB)/ExtUtils/typemap if_perl.xs > $@
 
 $(OUTDIR)/netbeans.o:  netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
        $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
 
+$(OUTDIR)/regexp.o:            regexp.c regexp_nfa.c $(INCL)
+       $(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
+
 $(OUTDIR)/if_mzsch.o:  if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP)
        $(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
 
index 9d34633..f23258b 100644 (file)
@@ -1,7 +1,7 @@
 # Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me)
 # and Win64, using the Microsoft Visual C++ compilers. Known to work with
 # VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005),
-# VC9 (VS2008), and VC10 (VS2010).
+# VC9 (VS2008), VC10 (VS2010) and VC11 (VS2012)
 #
 # To build using other Windows compilers, see INSTALLpc.txt
 #
 # This will build the console version of Vim with no additional interfaces.
 # To add features, define any of the following:
 #
+#      For MSVC 11 you need to specify where the Win32.mak file is, e.g.:
+#         SDK_INCLUDE_DIR="C:\Program Files\Microsoft SDKs\Windows\v7.1\Include"
+#
 #      !!!!  After changing features do "nmake clean" first  !!!!
 #
-#       Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG)
+#      Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG)
 #
 #      GUI interface: GUI=yes (default is no)
 #
@@ -63,6 +66,8 @@
 #        RUBY_VER=[Ruby version, eg 16, 17] (default is 18)
 #        RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.8)
 #          You must set RUBY_VER_LONG when change RUBY_VER.
+#          You must set RUBY_API_VER to RUBY_VER_LONG.
+#          Don't set ruby API version to RUBY_VER like 191.
 #
 #      Tcl interface:
 #        TCL=[Path to Tcl directory]
 #        GETTEXT=[yes or no]  (default is yes)
 #      See http://sourceforge.net/projects/gettext/
 #
-#       PostScript printing: POSTSCRIPT=yes (default is no)
+#      PostScript printing: POSTSCRIPT=yes (default is no)
 #
-#       Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
+#      Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
 #
-#       XPM Image Support: XPM=[path to XPM directory]
+#      XPM Image Support: XPM=[path to XPM directory]
+#      Default is "xpm", using the files included in the distribution.
+#      Use "no" to disable this feature.
 #
-#       Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
+#      Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
 #
-#       Processor Version: CPUNR=[i386, i486, i586, i686, pentium4] (default is
-#       i386)
+#      Processor Version: CPUNR=[i386, i486, i586, i686, pentium4] (default is
+#      i386)
 #
-#       Version Support: WINVER=[0x0400, 0x0500] (default is 0x0400)
+#      Version Support: WINVER=[0x0400, 0x0500] (default is 0x0400)
 #
 #      Debug version: DEBUG=yes
 #      Mapfile: MAP=[no, yes or lines] (default is yes)
 #        yes:   Write a normal mapfile.
 #        lines: Write a mapfile with line numbers (only for VC6 and later)
 #
-#       Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
-#       doesn't work)
+#      Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
+#      doesn't work)
+#
+#      Visual C Version: MSVCVER=m.n (default derived from nmake if undefined)
 #
-#       Visual C Version: MSVCVER=m.n (default derived from nmake if undefined)
+#      Static Code Analysis: ANALYZE=yes (works with VS2012 only)
 #
 # You can combine any of these interfaces
 #
@@ -209,6 +218,7 @@ CPU = i386
 # We're on Windows 95
 CPU = i386
 !endif # !PROCESSOR_ARCHITECTURE
+OBJDIR = $(OBJDIR)$(CPU)
 
 # Build a retail version by default
 
@@ -222,7 +232,12 @@ MAKEFLAGS_GVIMEXT = DEBUG=yes
 
 # Get all sorts of useful, standard macros from the Platform SDK.
 
+!ifdef SDK_INCLUDE_DIR
+!include $(SDK_INCLUDE_DIR)\Win32.mak
+!else
 !include <Win32.mak>
+!endif
+
 
 # Flag to turn on Win64 compatibility warnings for VC7.x and VC8.
 WP64CHECK = /Wp64
@@ -277,13 +292,23 @@ NBDEBUG_SRC       = nbdebug.c
 NETBEANS_LIB   = WSock32.lib
 !endif
 
-!ifdef XPM
+!ifndef XPM
+# XPM is not set, use the included xpm files, depending on the architecture.
+!if "$(CPU)" == "AMD64"
+XPM = xpm\x64
+!elseif "$(CPU)" == "i386"
+XPM = xpm\x86
+!else
+XPM = no
+!endif
+!endif
+!if "$(XPM)" != "no"
 # XPM - Include support for XPM signs
-# you can get xpm.lib from http://iamphet.nm.ru/xpm or create it yourself
+# See the xpm directory for more information.
 XPM_OBJ   = $(OBJDIR)/xpm_w32.obj
 XPM_DEFS  = -DFEAT_XPM_W32
 XPM_LIB   = $(XPM)\lib\libXpm.lib
-XPM_INC          = -I $(XPM)\include
+XPM_INC          = -I $(XPM)\include -I $(XPM)\..\include
 !endif
 !endif
 
@@ -350,6 +375,10 @@ MSVCVER = 5.0
 MSVCVER = 6.0
 CPU = ix86
 !endif
+!if "$(_NMAKE_VER)" == "6.00.9782.0"
+MSVCVER = 6.0
+CPU = ix86
+!endif
 !if "$(_NMAKE_VER)" == "7.00.9466"
 MSVCVER = 7.0
 !endif
@@ -380,12 +409,24 @@ MSVCVER = 10.0
 !if "$(_NMAKE_VER)" == "10.00.30319.01"
 MSVCVER = 10.0
 !endif
-!if "$(_NMAKE_VER)" == "9.00.30729.01"
-MSVCVER = 9.0
+!if "$(_NMAKE_VER)" == "10.00.40219.01"
+MSVCVER = 10.0
+!endif
+!if "$(_NMAKE_VER)" == "11.00.50727.1"
+MSVCVER = 11.0
+!endif
+!if "$(_NMAKE_VER)" == "11.00.51106.1"
+MSVCVER = 11.0
+!endif
+!if "$(_NMAKE_VER)" == "11.00.60315.1"
+MSVCVER = 11.0
+!endif
+!if "$(_NMAKE_VER)" == "11.00.60610.1"
+MSVCVER = 11.0
 !endif
 !endif
 
-# Abort bulding VIM if version of VC is unrecognised.
+# Abort building VIM if version of VC is unrecognised.
 !ifndef MSVCVER
 !message *** ERROR
 !message Cannot determine Visual C version being used.  If you are using the
@@ -397,7 +438,7 @@ MSVCVER = 9.0
 !endif
 
 # Convert processor ID to MVC-compatible number
-!if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0")
+!if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0") && ("$(MSVCVER)" != "11.0")
 !if "$(CPUNR)" == "i386"
 CPUARG = /G3
 !elseif "$(CPUNR)" == "i486"
@@ -412,8 +453,8 @@ CPUARG = /G7 /arch:SSE2
 CPUARG =
 !endif
 !else
-# VC8/9 only allows specifying SSE architecture
-!if "$(CPUNR)" == "pentium4"
+# VC8/9/10 only allows specifying SSE architecture but only for 32bit
+!if "$(ASSEMBLY_ARCHITECTURE)" == "x86" && "$(CPUNR)" == "pentium4"
 CPUARG = /arch:SSE2
 !endif
 !endif
@@ -431,7 +472,7 @@ OPTFLAG = /O2
 OPTFLAG = /Ox
 !endif
 
-!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0")
+!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0")
 # Use link time code generation if not worried about size
 !if "$(OPTIMIZE)" != "SPACE"
 OPTFLAG = $(OPTFLAG) /GL
@@ -443,6 +484,11 @@ OPTFLAG = $(OPTFLAG) /GL
 CFLAGS=$(CFLAGS) $(WP64CHECK)
 !endif
 
+# Static code analysis generally available starting with VS2012
+!if ("$(ANALYZE)" == "yes") && ("$(MSVCVER)" == "11.0")
+CFLAGS=$(CFLAGS) /analyze
+!endif
+
 CFLAGS = $(CFLAGS) $(OPTFLAG) -DNDEBUG $(CPUARG)
 RCFLAGS = $(rcflags) $(rcvars) -DNDEBUG
 ! ifdef USE_MSVCRT
@@ -510,6 +556,7 @@ OBJ = \
        $(OUTDIR)\ops.obj \
        $(OUTDIR)\option.obj \
        $(OUTDIR)\os_mswin.obj \
+       $(OUTDIR)\winclip.obj \
        $(OUTDIR)\os_win32.obj \
        $(OUTDIR)\pathdef.obj \
        $(OUTDIR)\popupmnu.obj \
@@ -619,7 +666,7 @@ CFLAGS  = $(CFLAGS) -DFEAT_TCL -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"$(TCL_DLL)\" \
                -DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
 TCL_OBJ        = $(OUTDIR)\if_tcl.obj
 TCL_INC        = /I "$(TCL)\Include" /I "$(TCL)"
-TCL_LIB = $(TCL)\lib\tclstub$(TCL_VER).lib
+TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
 !else
 CFLAGS  = $(CFLAGS) -DFEAT_TCL
 TCL_OBJ        = $(OUTDIR)\if_tcl.obj
@@ -705,12 +752,18 @@ PYTHON3_LIB = $(PYTHON3)\libs\python$(PYTHON3_VER).lib
 MZSCHEME_VER = 205_000
 !endif
 CFLAGS = $(CFLAGS) -DFEAT_MZSCHEME -I $(MZSCHEME)\include
-!if EXIST("$(MZSCHEME)\collects\scheme\base.ss")
-# for MzScheme 4.x we need to include byte code for basic Scheme stuff
+!if EXIST("$(MZSCHEME)\collects\scheme\base.ss") \
+       || EXIST("$(MZSCHEME)\collects\scheme\base.rkt") 
+# for MzScheme >= 4 we need to include byte code for basic Scheme stuff
 MZSCHEME_EXTRA_DEP = mzscheme_base.c
 CFLAGS = $(CFLAGS) -DINCLUDE_MZSCHEME_BASE
 !endif
-!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib") \
+!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib")
+MZSCHEME_MAIN_LIB=mzsch
+!else
+MZSCHEME_MAIN_LIB=racket
+!endif
+!if EXIST("$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib") \
        && !EXIST("$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib")
 !message Building with Precise GC
 MZSCHEME_PRECISE_GC = yes
@@ -722,7 +775,7 @@ CFLAGS = $(CFLAGS) -DMZ_PRECISE_GC
 !endif
 !message MzScheme DLLs will be loaded dynamically
 CFLAGS = $(CFLAGS) -DDYNAMIC_MZSCHEME \
-               -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" \
+               -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" \
                -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
 !else
 !if "$(MZSCHEME_DEBUG)" == "yes"
@@ -730,13 +783,15 @@ CFLAGS = $(CFLAGS) -DMZSCHEME_FORCE_GC
 !endif
 !if "$(MZSCHEME_PRECISE_GC)" == "yes"
 # Precise GC does not use separate dll
-MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib
+MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
 !else
 MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib \
-               $(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib
+               $(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
 !endif
 !endif
 MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
+# increase stack size
+MZSCHEME_LIB = $(MZSCHEME_LIB) /STACK:8388608
 !endif
 
 # Perl interface
@@ -782,6 +837,11 @@ PERL_EXE = $(PERL)\Bin$(PERL_ARCH)\perl
 PERL_INC = /I $(PERL_INCDIR)
 PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
 XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
+!if exist($(XSUBPP))
+XSUBPP = $(PERL_EXE) $(XSUBPP)
+!else
+XSUBPP = xsubpp
+!endif
 XSUBPP_TYPEMAP = $(PERL)\lib\ExtUtils\typemap
 
 !endif
@@ -797,28 +857,31 @@ RUBY_VER = 18
 !ifndef RUBY_VER_LONG
 RUBY_VER_LONG = 1.8
 !endif
+!ifndef RUBY_API_VER
+RUBY_API_VER = $(RUBY_VER_LONG:.=)
+!endif
 
 !if $(RUBY_VER) >= 18
 !ifndef RUBY_PLATFORM
 RUBY_PLATFORM = i386-mswin32
 !endif
 !ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
+RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
 !endif
 !else
 !ifndef RUBY_PLATFORM
 RUBY_PLATFORM = i586-mswin32
 !endif
 !ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
+RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
 !endif
 !endif # $(RUBY_VER) >= 18
 
 !message Ruby requested (version $(RUBY_VER)) - root dir is "$(RUBY)"
 CFLAGS = $(CFLAGS) -DFEAT_RUBY
 RUBY_OBJ = $(OUTDIR)\if_ruby.obj
-!if $(RUBY_VER) >= 190
-RUBY_INC = /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)"
+!if $(RUBY_VER) >= 19
+RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
 !else
 RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
 !endif
@@ -880,7 +943,7 @@ LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(LIBC) $(OLE_LIB)  user32.lib $(SNIFF_LIB) \
 
 # Report link time code generation progress if used. 
 !ifdef NODEBUG
-!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0")
+!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0")
 !if "$(OPTIMIZE)" != "SPACE"
 LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
 !endif
@@ -1038,7 +1101,7 @@ $(OUTDIR)/if_lua.obj: $(OUTDIR) if_lua.c  $(INCL)
        $(CC) $(CFLAGS) $(LUA_INC) if_lua.c
 
 if_perl.c : if_perl.xs typemap
-       $(PERL_EXE) $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
+       $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
                -typemap typemap if_perl.xs > if_perl.c
 
 $(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c  $(INCL)
@@ -1047,16 +1110,16 @@ $(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c  $(INCL)
 $(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c  $(INCL)
        $(CC) $(CFLAGS) $(PERL_INC) if_perlsfio.c
 
-$(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c  $(INCL) $(MZSCHEME_EXTRA_DEP)
+$(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c if_mzsch.h $(INCL) $(MZSCHEME_EXTRA_DEP)
        $(CC) $(CFLAGS) if_mzsch.c \
                -DMZSCHEME_COLLECTS=\"$(MZSCHEME:\=\\)\\collects\"
 mzscheme_base.c:
        $(MZSCHEME)\mzc --c-mods mzscheme_base.c ++lib scheme/base
 
-$(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c  $(INCL)
+$(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c if_py_both.h $(INCL)
        $(CC) $(CFLAGS) $(PYTHON_INC) if_python.c
 
-$(OUTDIR)/if_python3.obj: $(OUTDIR) if_python3.c  $(INCL)
+$(OUTDIR)/if_python3.obj: $(OUTDIR) if_python3.c if_py_both.h $(INCL)
        $(CC) $(CFLAGS) $(PYTHON3_INC) if_python3.c
 
 $(OUTDIR)/if_ole.obj: $(OUTDIR) if_ole.cpp  $(INCL) if_ole.h
@@ -1100,6 +1163,8 @@ $(OUTDIR)/ops.obj:        $(OUTDIR) ops.c  $(INCL)
 
 $(OUTDIR)/os_mswin.obj:        $(OUTDIR) os_mswin.c  $(INCL)
 
+$(OUTDIR)/winclip.obj: $(OUTDIR) winclip.c  $(INCL)
+
 $(OUTDIR)/os_win32.obj:        $(OUTDIR) os_win32.c  $(INCL) os_win32.h
 
 $(OUTDIR)/os_w32exe.obj:       $(OUTDIR) os_w32exe.c  $(INCL)
@@ -1111,7 +1176,7 @@ $(OUTDIR)/popupmnu.obj:   $(OUTDIR) popupmnu.c  $(INCL)
 
 $(OUTDIR)/quickfix.obj:        $(OUTDIR) quickfix.c  $(INCL)
 
-$(OUTDIR)/regexp.obj:  $(OUTDIR) regexp.c  $(INCL)
+$(OUTDIR)/regexp.obj:  $(OUTDIR) regexp.c regexp_nfa.c  $(INCL)
 
 $(OUTDIR)/screen.obj:  $(OUTDIR) screen.c  $(INCL)
 
@@ -1156,6 +1221,10 @@ $(OUTDIR)/glbl_ime.obj:  $(OUTDIR) glbl_ime.cpp  dimm.h $(INCL)
 E0_CFLAGS = $(CFLAGS:\=\\)
 E_CFLAGS = $(E0_CFLAGS:"=\")
 # ") stop the string
+# $LINKARGS2 may contain backslashes and double quotes, escape them both.
+E0_LINKARGS2 = $(LINKARGS2:\=\\)
+E_LINKARGS2 = $(E0_LINKARGS2:"=\")
+# ") stop the string
 
 $(PATHDEF_SRC): auto
        @echo creating $(PATHDEF_SRC)
@@ -1164,7 +1233,7 @@ $(PATHDEF_SRC): auto
        @echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC:\=\\)"; >> $(PATHDEF_SRC)
        @echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR:\=\\)"; >> $(PATHDEF_SRC)
        @echo char_u *all_cflags = (char_u *)"$(CC:\=\\) $(E_CFLAGS)"; >> $(PATHDEF_SRC)
-       @echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(LINKARGS2:\=\\)"; >> $(PATHDEF_SRC)
+       @echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(E_LINKARGS2)"; >> $(PATHDEF_SRC)
        @echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> $(PATHDEF_SRC)
        @echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> $(PATHDEF_SRC)
 
@@ -1203,6 +1272,7 @@ proto.h: \
        proto/ops.pro \
        proto/option.pro \
        proto/os_mswin.pro \
+       proto/winclip.pro \
        proto/os_win32.pro \
        proto/popupmnu.pro \
        proto/quickfix.pro \
diff --git a/src/Make_ro.mak b/src/Make_ro.mak
deleted file mode 100644 (file)
index 203a18a..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-#
-# Makefile for Vim on RISC OS - Andy Wingate
-#
-
-GCC         = gcc -mthrowback
-CFLAGS     = -DRISCOS -DFEAT_GUI
-CC         = $(GCC) $(CFLAGS) -O2
-# -DUP_BC_PC_EXTERN for term.c needed as BC defined in termlib.c and term.c
-
-TERMFLAG   = -DUP_BC_PC_EXTERN
-
-ASMFLAGS   = -throwback -objasm -gcc
-
-OBJS =  o.buffer o.charset o.diff o.digraph o.edit o.eval o.ex_cmds o.ex_cmds2  \
-       o.ex_docmd o.ex_eval o.ex_getln o.fileio o.fold o.getchar \
-       o.hardcopy o.hashtab o.main o.mark o.mbyte  \
-       o.memfile o.memline o.menu o.message o.misc1 o.misc2 o.move     \
-       o.normal o.ops o.option o.popupmnu o.quickfix o.regexp o.screen \
-       o.search   \
-       o.spell o.syntax o.tag o.term o.termlib o.ui o.undo o.version   \
-       o.window o.os_riscos o.swis o.gui o.gui_riscos
-
-Vim: $(OBJS)
-       $(GCC) -o Vim $(OBJS)
-
-install: Vim
-       squeeze -v Vim @.!Vim.Vim
-
-clean: 
-       create o.!fake! 0
-       wipe o.* ~cf
-       remove Vim
-
-o.swis: s.swis
-       as $(ASMFLAGS) -o o.swis s.swis
-
-# Rules for object files
-
-o.%:   c.%
-       $(CC) -c $< -o $@
-
-o.buffer:      c.buffer
-
-o.charset:     c.charset
-
-o.digraph:     c.digraph
-
-o.diff:                c.diff
-
-o.edit:                c.edit
-
-o.eval:                c.eval
-
-o.ex_cmds:     c.ex_cmds
-
-o.ex_cmds2:    c.ex_cmds2
-
-o.ex_docmd:    c.ex_docmd
-
-o.ex_eval:     c.ex_eval
-
-o.ex_getln:    c.ex_getln
-
-o.fileio:      c.fileio
-
-o.fold:                c.fold
-
-o.getchar:     c.getchar
-
-o.hardcopy:    c.hardcopy
-
-o.hashtab:     c.hashtab
-
-o.gui:         c.gui
-
-o.gui_riscos:  c.gui_riscos
-
-o.main:                c.main
-
-o.mark:                c.mark
-
-o.mbyte:       c.mbyte
-
-o.memfile:     c.memfile
-
-o.memline:     c.memline
-
-o.menu:                c.menu
-
-o.message:     c.message
-
-o.misc1:       c.misc1
-
-o.misc2:       c.misc2
-
-o.move:                c.move
-
-o.normal:      c.normal
-
-o.ops:         c.ops
-
-o.option:      c.option
-
-o.os_riscos:   c.os_riscos
-
-o.pty:         c.pty
-
-o.popupmnu:    c.popupmnu
-
-o.quickfix:    c.quickfix
-
-o.regexp:      c.regexp
-
-o.screen:      c.screen
-
-o.search:      c.search
-
-o.spell:       c.spell
-
-o.syntax:      c.syntax
-
-o.tag:         c.tag
-
-o.term:                c.term
-       $(CC) $(TERMFLAG) -c c.term -o o.term
-
-o.termlib:     c.termlib
-
-o.ui:          c.ui
-
-o.undo:                c.undo
-
-o.version:     c.version
-
-o.window:      c.window
index ff678d1..bf57c0d 100644 (file)
@@ -251,7 +251,7 @@ clean:
 
 # generate GlobalSymbolTable, which speeds up the compile time.
 #
-# A preprocessing stage is used to work arounda bug in the GST generator, in
+# A preprocessing stage is used to work around a bug in the GST generator, in
 # that it does not handle nested makefiles properly in this stage.
 # Ignore error message for not producing any code (105).
 $(GST): scoptions vim.h keymap.h macros.h ascii.h term.h structs.h
@@ -283,7 +283,7 @@ $(PRO): $(GST) vim.h
 .c.pro:
        $(CC) $(CFLAGS) GPFILE=proto/$*.pro $(PROPT) $*.c
 
-# dependancies
+# dependencies
 blowfish.o:            blowfish.c
 proto/blowfish.pro:    blowfish.c
 buffer.o:              buffer.c
index 7cb5614..86b61d6 100644 (file)
@@ -34,7 +34,7 @@ DECC = YES
 # SMALL  - Few features enabled, as basic as possible
 # NORMAL - A default selection of features enabled
 # BIG    - Many features enabled, as rich as possible. (default)
-# HUGE   - All possible featues enabled.
+# HUGE   - All possible features enabled.
 # Please select one of these alternatives above.
 MODEL = HUGE
 
@@ -55,7 +55,7 @@ MODEL = HUGE
 # Comment out if you want the compiler version with :ver command.
 # NOTE: This part can make some complications if you're using some
 # predefined symbols/flags for your compiler. If does, just leave behind
-# the comment varialbe CCVER.
+# the comment variable CCVER.
 CCVER = YES
 
 # Uncomment if want a debug version. Resulting executable is DVIM.EXE
index 4e0cdcf..bc7809e 100644 (file)
@@ -4,7 +4,7 @@
 # *************************************************************
 # * WARNING!
 # * This was originally produced by the IDE, but has since been
-# * modifed to make it work properly. Adjust with care!
+# * modified to make it work properly. Adjust with care!
 # * In particular, leave LinkerLocalOptsAtW16_gvim16dexe alone
 # * unless you are a guru.
 # *************************************************************
@@ -107,6 +107,7 @@ ObjFiles = \
    $(INTDIR)\os_win16.obj\
    $(INTDIR)\os_msdos.obj\
    $(INTDIR)\os_mswin.obj\
+   $(INTDIR)\winclip.obj\
    $(INTDIR)\popupmnu.obj\
    $(INTDIR)\quickfix.obj\
    $(INTDIR)\regexp.obj\
index e582eed..c830378 100644 (file)
@@ -29,7 +29,7 @@
 #      - Uncomment the line "CONF_OPT_X = --without-x" if you have X11 but
 #        want to disable using X11 libraries.  This speeds up starting Vim,
 #        but the window title will not be set and the X11 selection can not
-#        used.
+#        be used.
 #      - Uncomment the line "CONF_OPT_XSMP = --disable-xsmp" if you have the
 #        X11 Session Management Protocol (XSMP) library (libSM) but do not
 #        want to use it.
 #Solaris 2.5 (sun4m)  cc (SC4.0)     +X11R6 +GUI (CDE) 4.6b (E) Andrew Large
 #Solaris 2.5         cc             +X11 +GUI Athena   4.2  (9) Sonia Heimann
 #Solaris 2.5         gcc 2.5.6      +X11 Motif         5.0m (R) Ant. Colombo
-#Solaris 2.6         gcc 2.8.1      ncursus            5.3  (G) Larry W. Virden
+#Solaris 2.6         gcc 2.8.1      ncurses            5.3  (G) Larry W. Virden
 #Solaris with -lthread                                 5.5  (W) K. Nagano
 #Solaris             gcc                                    (b) Riccardo
 #SunOS 4.1.x                        +X11 -GUI          5.1b (J) Bram Moolenaar
 # (D)  Uncomment lines below for QNX
 # (E)  You might want to use termlib instead of termcap, see below.
 # (F)  See below for instructions.
-# (G)  Using ncursus version 4.2 has reported to cause a crash.  Use the
-#      Sun cursus library instead.
+# (G)  Using ncurses version 4.2 has reported to cause a crash.  Use the
+#      Sun curses library instead.
 # (H)  See line for EXTRA_LIBS below.
 # (I)  SINIX-N 5.42 and 5.43 need some EXTRA_LIBS.  Also for Reliant-Unix.
 # (J)  If you get undefined symbols, see below for a solution.
@@ -283,12 +283,13 @@ CC=
 
 ######################## auto/config.mk ######################## {{{1
 # At this position auto/config.mk is included. When starting from the
-# distribution it is almost empty. After running auto/configure it contains
-# settings that have been discovered for your system. Settings below this
-# include override settings in auto/config.mk!
+# toplevel Makefile it is almost empty. After running auto/configure it
+# contains settings that have been discovered for your system. Settings below
+# this include override settings in auto/config.mk!
 
-# Note: if auto/config.mk is lost somehow (e.g., because configure was
-# interrupted), create an empty auto/config.mk file and do "make config".
+# Note: If make fails because auto/config.mk does not exist (it is not
+# included in the repository), do:
+#    cp config.mk.dist auto/config.mk
 
 # (X) How to include auto/config.mk depends on the version of "make" you have,
 #     if the current choice doesn't work, try the other one.
@@ -372,11 +373,20 @@ CClink = $(CC)
 #CONF_OPT_DARWIN = --with-mac-arch=ppc
 #CONF_OPT_DARWIN = --with-mac-arch=both
 
+# Uncomment the next line to fail if one of the requested language interfaces
+# cannot be configured.  Without this Vim will be build anyway, without
+# the failing interfaces.
+#CONF_OPT_FAIL = --enable-fail-if-missing
+
 # LUA
 # Uncomment one of these when you want to include the Lua interface.
 # First one is for static linking, second one for dynamic loading.
+# Use --with-luajit if you want to use LuaJIT instead of Lua.
+# Set PATH environment variable to find lua or luajit executable.
 #CONF_OPT_LUA = --enable-luainterp
 #CONF_OPT_LUA = --enable-luainterp=dynamic
+#CONF_OPT_LUA = --enable-luainterp --with-luajit
+#CONF_OPT_LUA = --enable-luainterp=dynamic --with-luajit
 # Lua installation dir (when not set uses $LUA_PREFIX or defaults to /usr)
 #CONF_OPT_LUA_PREFIX = --with-lua-prefix=/usr/local
 
@@ -396,7 +406,7 @@ CClink = $(CC)
 # to the command line. If you see strange flags during compilation, check in
 # auto/config.mk where they come from.  If it's PERL_CFLAGS, try commenting
 # the next line.
-# When you get an error for a missing "perl.exp" file, try creating an emtpy
+# When you get an error for a missing "perl.exp" file, try creating an empty
 # one: "touch perl.exp".
 # This requires at least "small" features, "tiny" doesn't work.
 #CONF_OPT_PERL = --enable-perlinterp
@@ -404,6 +414,7 @@ CClink = $(CC)
 
 # PYTHON
 # Uncomment this when you want to include the Python interface.
+# Requires small features or better, fails with tiny features.
 # NOTE: This may cause threading to be enabled, which has side effects (such
 # as using different libraries and debugging becomes more difficult).
 # NOTE: Using this together with Perl may cause a crash in initialization.
@@ -414,12 +425,16 @@ CClink = $(CC)
 # However, this may still cause problems, such as "import termios" failing.
 # Build two separate versions of Vim in that case.
 #CONF_OPT_PYTHON = --enable-pythoninterp
+#CONF_OPT_PYTHON = --enable-pythoninterp=dynamic
 #CONF_OPT_PYTHON3 = --enable-python3interp
+#CONF_OPT_PYTHON3 = --enable-python3interp=dynamic
 
 # RUBY
 # Uncomment this when you want to include the Ruby interface.
+# First one for static linking, second one for loading when used.
 # Note: you need the development package (e.g., ruby1.9.1-dev on Ubuntu).
 #CONF_OPT_RUBY = --enable-rubyinterp
+#CONF_OPT_RUBY = --enable-rubyinterp=dynamic
 #CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1
 
 # TCL
@@ -444,7 +459,7 @@ CClink = $(CC)
 
 # MULTIBYTE - To edit multi-byte characters.
 # Uncomment this when you want to edit a multibyte language.
-# It's automatically enabled with big features or IME support.
+# It's automatically enabled with normal features, GTK or IME support.
 # Note: Compile on a machine where setlocale() actually works, otherwise the
 # configure tests may fail.
 #CONF_OPT_MULTIBYTE = --enable-multibyte
@@ -556,8 +571,8 @@ CClink = $(CC)
 #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
 
 # Use this with GCC to check for mistakes, unused arguments, etc.
-#CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -D_FORTIFY_SOURCE=1 -DU_DEBUG
-#CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -D_FORTIFY_SOURCE=1 -DU_DEBUG
+#CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
+#CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DU_DEBUG
 #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
 #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
 
@@ -589,8 +604,9 @@ LINT_OPTIONS = -beprxzF
 
 # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof.
 # Might not work with GUI or Perl.
-# For unknown reasons adding "-lc" fixes a linking problem with GCC.  That's
-# probably a bug in the "-pg" implementation.
+# For unknown reasons adding "-lc" fixes a linking problem with some versions
+# of GCC.  That's probably a bug in the "-pg" implementation.
+# After running Vim see the profile result with: gprof vim gmon.out | vim -
 # Need to recompile everything after changing this: "make clean" "make".
 #PROFILE_CFLAGS = -pg -g -DWE_ARE_PROFILING
 #PROFILE_LIBS = -pg
@@ -601,8 +617,8 @@ LINT_OPTIONS = -beprxzF
 # Configuration is in the .ccmalloc or ~/.ccmalloc file.
 # Doesn't work very well, since memory linked to from global variables
 # (in libraries) is also marked as leaked memory.
-#PROFILE_CFLAGS = -DEXITFREE
-#PROFILE_LIBS = -lccmalloc
+#LEAK_CFLAGS = -DEXITFREE
+#LEAK_LIBS = -lccmalloc
 
 #####################################################
 ###  Specific systems, check if yours is listed!  ### {{{
@@ -724,12 +740,6 @@ LINT_OPTIONS = -beprxzF
 ### USL for Unix Systems Laboratories (SYSV 4.2)
 #EXTRA_DEFS = -DUSL
 
-### RISCos on MIPS without X11
-#EXTRA_DEFS = -DMIPS
-
-### RISCos on MIPS with X11
-#EXTRA_LIBS = -lsun
-
 ### (6)  A/UX 3.1.1 with gcc (Jim Jagielski)
 #CC= gcc -D_POSIX_SOURCE
 #CFLAGS= -O2
@@ -870,6 +880,10 @@ LINT_OPTIONS = -beprxzF
 #CFLAGS = -O -Qtarget=m88110compat
 #EXTRA_LIBS = -lgen
 
+# The value of QUOTESED comes from auto/config.mk.
+# Uncomment the next line to use the default value.
+# QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
+
 ##################### end of system specific lines ################### }}}
 
 ### Names of the programs and targets  {{{1
@@ -935,7 +949,7 @@ MAN1DIR = /man1
 
 ### Vim version (adjusted by a script)
 VIMMAJOR = 7
-VIMMINOR = 3
+VIMMINOR = 4
 
 ### Location of Vim files (should not need to be changed, and  {{{1
 ### some things might not work when they are changed!)
@@ -1047,8 +1061,9 @@ INSTALL_PROG      = cp
 INSTALL_DATA   = cp
 INSTALL_DATA_R = cp -r
 
-### Program to run on installed binary
+### Program to run on installed binary.  Use the second one to disable strip.
 #STRIP = strip
+#STRIP = /bin/true
 
 ### Permissions for binaries  {{{1
 BINMOD = 755
@@ -1284,7 +1299,7 @@ ALL_GUI_PRO  = gui.pro gui_gtk.pro gui_motif.pro gui_xmdlg.pro gui_athena.pro gu
 ### prototype headers are ignored due to -DPROTO, system
 ### headers #include <...> are ignored if we use the -MM option, as
 ### e.g. provided by gcc-cpp.
-### Include FEAT_GUI to get gependency on gui.h
+### Include FEAT_GUI to get dependency on gui.h
 ### Need to change "-I /<path>" to "-isystem /<path>" for GCC 3.x.
 CPP_DEPEND = $(CC) -I$(srcdir) -M$(CPP_MM) \
                `echo "$(DEPEND_CFLAGS)" $(DEPEND_CFLAGS_FILTER)`
@@ -1321,20 +1336,22 @@ SHELL = /bin/sh
 .SUFFIXES: .c .o .pro
 
 PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS)
-POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(RUBY_CFLAGS) $(EXTRA_DEFS)
+POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(EXTRA_DEFS)
 
-ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS)
+ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(LEAK_CFLAGS) $(POST_DEFS)
 
 # Exclude $CFLAGS for osdef.sh, for Mac 10.4 some flags don't work together
 # with "-E".
 OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
 
-LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
+LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
 
 LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
 
 DEPEND_CFLAGS = -DPROTO -DDEPEND -DFEAT_GUI $(LINT_CFLAGS)
 
+# Note: MZSCHEME_LIBS must come before LIBS, because LIBS adds -lm which is
+# needed by racket.
 ALL_LIB_DIRS = $(GUI_LIBS_DIR) $(X_LIBS_DIR)
 ALL_LIBS = \
           $(GUI_LIBS1) \
@@ -1343,16 +1360,17 @@ ALL_LIBS = \
           $(X_PRE_LIBS) \
           $(X_LIBS) \
           $(X_EXTRA_LIBS) \
+          $(MZSCHEME_LIBS) \
           $(LIBS) \
           $(EXTRA_LIBS) \
           $(LUA_LIBS) \
-          $(MZSCHEME_LIBS) \
           $(PERL_LIBS) \
           $(PYTHON_LIBS) \
           $(PYTHON3_LIBS) \
           $(TCL_LIBS) \
           $(RUBY_LIBS) \
-          $(PROFILE_LIBS)
+          $(PROFILE_LIBS) \
+          $(LEAK_LIBS)
 
 # abbreviations
 DEST_BIN = $(DESTDIR)$(BINDIR)
@@ -1387,6 +1405,7 @@ DEST_MAN_FR_U = $(DEST_MAN_TOP)/fr.UTF-8$(MAN1DIR)
 DEST_MAN_IT = $(DEST_MAN_TOP)/it$(MAN1DIR)
 DEST_MAN_IT_I = $(DEST_MAN_TOP)/it.ISO8859-1$(MAN1DIR)
 DEST_MAN_IT_U = $(DEST_MAN_TOP)/it.UTF-8$(MAN1DIR)
+DEST_MAN_JA_U = $(DEST_MAN_TOP)/ja$(MAN1DIR)
 DEST_MAN_PL = $(DEST_MAN_TOP)/pl$(MAN1DIR)
 DEST_MAN_PL_I = $(DEST_MAN_TOP)/pl.ISO8859-2$(MAN1DIR)
 DEST_MAN_PL_U = $(DEST_MAN_TOP)/pl.UTF-8$(MAN1DIR)
@@ -1474,8 +1493,15 @@ EXTRA_SRC = hangulin.c if_lua.c if_mzsch.c auto/if_perl.c if_perlsfio.c \
            if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \
            gui_beval.c workshop.c wsdebug.c integration.c netbeans.c
 
+# Unittest files
+MEMFILE_TEST_SRC = memfile_test.c
+MEMFILE_TEST_TARGET = memfile_test$(EXEEXT)
+
+UNITTEST_SRC = $(MEMFILE_TEST_SRC)
+UNITTEST_TARGETS = $(MEMFILE_TEST_TARGET)
+
 # All sources, also the ones that are not configured
-ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(EXTRA_SRC)
+ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) $(EXTRA_SRC)
 
 # Which files to check with lint.  Select one of these three lines.  ALL_SRC
 # checks more, but may not work well for checking a GUI that wasn't configured.
@@ -1486,7 +1512,7 @@ LINT_SRC = $(BASIC_SRC) $(GUI_SRC) $(HANGULIN_SRC) $(PYTHON_SRC) $(PYTHON3_SRC)
 #LINT_SRC = $(ALL_SRC)
 #LINT_SRC = $(BASIC_SRC)
 
-OBJ = \
+OBJ_COMMON = \
        objects/buffer.o \
        objects/blowfish.o \
        objects/charset.o \
@@ -1507,10 +1533,8 @@ OBJ = \
        $(HANGULIN_OBJ) \
        objects/if_cscope.o \
        objects/if_xcmdsrv.o \
-       objects/main.o \
        objects/mark.o \
-       objects/memfile.o \
-       objects/memline.o \
+        objects/memline.o \
        objects/menu.o \
        objects/message.o \
        objects/misc1.o \
@@ -1535,6 +1559,7 @@ OBJ = \
        objects/term.o \
        objects/ui.o \
        objects/undo.o \
+       objects/version.o \
        objects/window.o \
        $(GUI_OBJ) \
        $(LUA_OBJ) \
@@ -1549,6 +1574,13 @@ OBJ = \
        $(NETBEANS_OBJ) \
        $(WSDEBUG_OBJ)
 
+OBJ = $(OBJ_COMMON) \
+       objects/main.o \
+       objects/memfile.o
+
+MEMFILE_TEST_OBJ = $(OBJ_COMMON) \
+        objects/memfile_test.o
+
 PRO_AUTO = \
        blowfish.pro \
        buffer.pro \
@@ -1612,7 +1644,7 @@ PRO_AUTO = \
 RSRC_DIR = os_mac_rsrc
 
 PRO_MANUAL = os_amiga.pro os_msdos.pro os_win16.pro os_win32.pro \
-       os_mswin.pro os_beos.pro os_vms.pro os_riscos.pro $(PERL_PRO)
+       os_mswin.pro winclip.pro os_beos.pro os_vms.pro $(PERL_PRO)
 
 # Default target is making the executable and tools
 all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
@@ -1629,11 +1661,17 @@ tools: $(TOOLS)
 # sure configure is run when it's needed.
 #
 config auto/config.mk: auto/configure config.mk.in config.h.in
+       if test -f auto/config.cache && \
+           grep '^ac_cv_env_CFLAGS_value=' auto/config.cache > /dev/null && \
+           ! grep -x -F 'ac_cv_env_CFLAGS_value=$(CFLAGS)' auto/config.cache > /dev/null; then \
+               rm auto/config.cache; \
+       fi
        GUI_INC_LOC="$(GUI_INC_LOC)" GUI_LIB_LOC="$(GUI_LIB_LOC)" \
                CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
                LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
                ./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \
-               $(CONF_OPT_DARWIN) $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
+               $(CONF_OPT_DARWIN) $(CONF_OPT_FAIL) \
+               $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
                $(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \
                $(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
                $(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
@@ -1690,15 +1728,16 @@ CCC = $(CC) -c -I$(srcdir) $(ALL_CFLAGS)
 
 
 # Link the target for normal use or debugging.
-# A shell script is used to try linking without unneccesary libraries.
+# A shell script is used to try linking without unnecessary libraries.
 $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h
        $(CCC) version.c -o objects/version.o
        @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
-               -o $(VIMTARGET) $(OBJ) objects/version.o $(ALL_LIBS)" \
-               MAKE="$(MAKE)" sh $(srcdir)/link.sh
+               -o $(VIMTARGET) $(OBJ) $(ALL_LIBS)" \
+               MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
+               sh $(srcdir)/link.sh
 
 xxd/xxd$(EXEEXT): xxd/xxd.c
-       cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
+       cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
                $(MAKE) -f Makefile
 
 # Build the language specific files if they were unpacked.
@@ -1727,10 +1766,11 @@ proto: $(PRO_AUTO) $(PRO_MANUAL)
 # Filter out arguments that cproto doesn't support.
 # Don't pass "-pthread" to cproto, it sees it as a list of individual flags.
 # Don't pass "-fstack-protector" to cproto, for the same reason.
+# Don't pass "-g" to cproto.
 # The -E"gcc -E" argument must be separate to avoid problems with shell
 # quoting.
 CPROTO = cproto $(PROTO_FLAGS) -DPROTO \
-        `echo '$(LINT_CFLAGS)' | sed -e 's/-pthread//g' -e 's/-fstack-protector//g'`
+        `echo '$(LINT_CFLAGS)' | sed -e 's/-pthread//g' -e 's/-fstack-protector//g' -e 's/\ -g\ / /g'`
 
 ### Would be nice if this would work for "normal" make.
 ### Currently it only works for (Free)BSD make.
@@ -1763,6 +1803,10 @@ os_mswin.pro: os_mswin.c
        $(CPROTO) -DWIN16 -DWIN32 -UHAVE_CONFIG_H $< > proto/$@
        echo "/* vim: set ft=c : */" >> proto/$@
 
+winclip.pro: winclip.c
+       $(CPROTO) -DWIN16 -DWIN32 -UHAVE_CONFIG_H $< > proto/$@
+       echo "/* vim: set ft=c : */" >> proto/$@
+
 os_beos.pro: os_beos.c
        $(CPROTO) -D__BEOS__ -UHAVE_CONFIG_H $< > proto/$@
        echo "/* vim: set ft=c : */" >> proto/$@
@@ -1804,20 +1848,42 @@ types.vim: $(TAGS_SRC) $(TAGS_INCL)
 #
 # This will produce a lot of garbage on your screen, including a few error
 # messages.  Don't worry about that.
-# If there is a real error, there will be a difference between "test.out" and
-# a "test99.ok" file.
+# If there is a real error, there will be a difference between "testXX.out" and
+# a "testXX.ok" file.
 # If everything is alright, the final message will be "ALL DONE".  If not you
 # get "TEST FAILURE".
 #
 test check:
        $(MAKE) -f Makefile $(VIMTARGET)
-       -if test -n "$(MAKEMO)" -a -f $(PODIR)/Makefile; then \
+       if test -n "$(MAKEMO)" -a -f $(PODIR)/Makefile; then \
                cd $(PODIR); $(MAKE) -f Makefile check VIM=../$(VIMTARGET); \
        fi
        -if test $(VIMTARGET) != vim -a ! -r vim; then \
                ln -s $(VIMTARGET) vim; \
        fi
        cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG)
+       $(MAKE) -f Makefile unittest
+
+unittesttargets:
+       $(MAKE) -f Makefile $(UNITTEST_TARGETS)
+
+unittest unittests: $(UNITTEST_TARGETS)
+       @for t in $(UNITTEST_TARGETS); do \
+               ./$$t || exit 1; echo $$t passed; \
+       done
+
+# Run individual test, assuming that Vim was already compiled.
+test1 test2 test3 test4 test5 test6 test7 test8 test9 \
+       test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
+       test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
+       test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \
+       test40 test41 test42 test43 test44 test45 test46 test47 test48 test49 \
+       test50 test51 test52 test53 test54 test55 test56 test57 test58 test59 \
+       test60 test61 test62 test63 test64 test65 test66 test67 test68 test69 \
+       test70 test71 test72 test73 test74 test75 test76 test77 test78 test79 \
+       test80 test81 test82 test83 test84 test85 test86 test87 test88 test89 \
+       test90 test91 test92 test93 test94 test95 test96 test97 test98 test99:
+       cd testdir; rm $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTARGET)
 
 testclean:
        cd testdir; $(MAKE) -f Makefile clean
@@ -1825,6 +1891,17 @@ testclean:
                cd $(PODIR); $(MAKE) checkclean; \
        fi
 
+# Unittests
+# It's build just like Vim to satisfy all dependencies.
+$(MEMFILE_TEST_TARGET): auto/config.mk objects $(MEMFILE_TEST_OBJ)
+       $(CCC) version.c -o objects/version.o
+       @LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
+               -o $(MEMFILE_TEST_TARGET) $(MEMFILE_TEST_OBJ) $(ALL_LIBS)" \
+               MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
+               sh $(srcdir)/link.sh
+
+# install targets
+
 install: $(GUI_INSTALL)
 
 install_normal: installvim installtools $(INSTALL_LANGS) install-icons
@@ -2013,6 +2090,7 @@ install-tool-languages:
        -$(SHELL) ./installman.sh xxd $(DEST_MAN_IT) "-it" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh xxd $(DEST_MAN_IT_I) "-it" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh xxd $(DEST_MAN_IT_U) "-it.UTF-8" $(INSTALLMANARGS)
+       -$(SHELL) ./installman.sh xxd $(DEST_MAN_JA_U) "-ja.UTF-8" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh xxd $(DEST_MAN_PL) "-pl" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh xxd $(DEST_MAN_PL_I) "-pl" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh xxd $(DEST_MAN_PL_U) "-pl.UTF-8" $(INSTALLMANARGS)
@@ -2027,6 +2105,7 @@ install-languages: languages $(DEST_LANG) $(DEST_KMAP)
        -$(SHELL) ./installman.sh install $(DEST_MAN_IT) "-it" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh install $(DEST_MAN_IT_I) "-it" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh install $(DEST_MAN_IT_U) "-it.UTF-8" $(INSTALLMANARGS)
+       -$(SHELL) ./installman.sh install $(DEST_MAN_JA_U) "-ja.UTF-8" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh install $(DEST_MAN_PL) "-pl" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh install $(DEST_MAN_PL_I) "-pl" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh install $(DEST_MAN_PL_U) "-pl.UTF-8" $(INSTALLMANARGS)
@@ -2045,6 +2124,8 @@ install-languages: languages $(DEST_LANG) $(DEST_KMAP)
        -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
                $(DEST_MAN_IT_U) $(INSTALLMLARGS)
        -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
+               $(DEST_MAN_JA_U) $(INSTALLMLARGS)
+       -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
                $(DEST_MAN_PL) $(INSTALLMLARGS)
        -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \
                $(DEST_MAN_PL_I) $(INSTALLMLARGS)
@@ -2190,6 +2271,7 @@ uninstall_runtime:
        -$(SHELL) ./installman.sh uninstall $(DEST_MAN_IT) "" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh uninstall $(DEST_MAN_IT_I) "" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh uninstall $(DEST_MAN_IT_U) "" $(INSTALLMANARGS)
+       -$(SHELL) ./installman.sh uninstall $(DEST_MAN_JA_U) "" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh uninstall $(DEST_MAN_PL) "" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh uninstall $(DEST_MAN_PL_I) "" $(INSTALLMANARGS)
        -$(SHELL) ./installman.sh uninstall $(DEST_MAN_PL_U) "" $(INSTALLMANARGS)
@@ -2210,6 +2292,8 @@ uninstall_runtime:
        -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
                $(DEST_MAN_IT_U) $(INSTALLMLARGS)
        -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
+               $(DEST_MAN_JA_U) $(INSTALLMLARGS)
+       -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
                $(DEST_MAN_PL) $(INSTALLMLARGS)
        -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \
                $(DEST_MAN_PL_I) $(INSTALLMLARGS)
@@ -2222,6 +2306,7 @@ uninstall_runtime:
        -rm -f $(DEST_MAN)/xxd.1
        -rm -f $(DEST_MAN_FR)/xxd.1 $(DEST_MAN_FR_I)/xxd.1 $(DEST_MAN_FR_U)/xxd.1
        -rm -f $(DEST_MAN_IT)/xxd.1 $(DEST_MAN_IT_I)/xxd.1 $(DEST_MAN_IT_U)/xxd.1
+       -rm -f $(DEST_MAN_JA_U)/xxd.1
        -rm -f $(DEST_MAN_PL)/xxd.1 $(DEST_MAN_PL_I)/xxd.1 $(DEST_MAN_PL_U)/xxd.1
        -rm -f $(DEST_MAN_RU)/xxd.1 $(DEST_MAN_RU_U)/xxd.1
        -rm -f $(DEST_HELP)/*.txt $(DEST_HELP)/tags $(DEST_HELP)/*.pl
@@ -2245,7 +2330,7 @@ uninstall_runtime:
        -rm -rf $(DEST_COMP)
        -rm -f $(DEST_PRINT)/*.ps
        -rmdir $(DEST_HELP) $(DEST_PRINT) $(DEST_COL) $(DEST_SYN) $(DEST_IND)
-       -rm -rf $(DEST_FTP)/*.vim $(DEST_FTP)/README.txt
+       -rm -rf $(DEST_FTP)/*.vim $(DEST_FTP)/README.txt $(DEST_FTP)/logtalk.dict
        -rm -f $(DEST_AUTO)/*.vim $(DEST_AUTO)/README.txt $(DEST_AUTO)/xml/*.vim
        -rm -f $(DEST_PLUG)/*.vim $(DEST_PLUG)/README.txt
        -rmdir $(DEST_FTP) $(DEST_AUTO)/xml $(DEST_AUTO) $(DEST_PLUG) $(DEST_RT)
@@ -2258,6 +2343,7 @@ clean celan: testclean
        -rm -f *.o objects/* core $(VIMTARGET).core $(VIMTARGET) vim xxd/*.o
        -rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c
        -rm -f conftest* *~ auto/link.sed
+       -rm -f $(UNITTEST_TARGETS)
        -rm -f runtime pixmaps
        -rm -rf $(APPDIR)
        -rm -rf mzscheme_base.c
@@ -2271,9 +2357,11 @@ SHADOWDIR = shadow
 
 shadow:        runtime pixmaps
        mkdir $(SHADOWDIR)
-       cd $(SHADOWDIR); ln -s ../*.[ch] ../*.in ../*.sh ../*.xs ../*.xbm ../toolcheck ../proto ../po ../vimtutor ../gvimtutor ../mkinstalldirs .
+       cd $(SHADOWDIR); ln -s ../*.[ch] ../*.in ../*.sh ../*.xs ../*.xbm ../toolcheck ../proto ../vimtutor ../gvimtutor ../mkinstalldirs .
        mkdir $(SHADOWDIR)/auto
        cd $(SHADOWDIR)/auto; ln -s ../../auto/configure .
+       mkdir $(SHADOWDIR)/po
+       cd $(SHADOWDIR)/po; ln -s ../../po/*.po ../../po/*.mak ../../po/*.vim ../../po/Makefile .
        cd $(SHADOWDIR); rm -f auto/link.sed
        cp Makefile configure $(SHADOWDIR)
        rm -f $(SHADOWDIR)/auto/config.mk $(SHADOWDIR)/config.mk.dist
@@ -2291,6 +2379,8 @@ shadow:   runtime pixmaps
                                 ../../testdir/vimrc.unix \
                                 ../../testdir/*.in \
                                 ../../testdir/*.vim \
+                                ../../testdir/python* \
+                                ../../testdir/test83-tags? \
                                 ../../testdir/*.ok .
 
 # Link needed for doing "make install" in a shadow directory.
@@ -2367,7 +2457,6 @@ auto/if_perl.c: if_perl.xs
 auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
        CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
 
-QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
 auto/pathdef.c: Makefile auto/config.mk
        -@echo creating $@
        -@echo '/* pathdef.c */' > $@
@@ -2512,19 +2601,11 @@ objects/if_perl.o: auto/if_perl.c
 objects/if_perlsfio.o: if_perlsfio.c
        $(CCC) $(PERL_CFLAGS) -o $@ if_perlsfio.c
 
-objects/py_config.o: $(PYTHON_CONFDIR)/config.c
-       $(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/config.c \
-               -I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
-
 objects/py_getpath.o: $(PYTHON_CONFDIR)/getpath.c
        $(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/getpath.c \
                -I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN \
                $(PYTHON_GETPATH_CFLAGS)
 
-objects/py3_config.o: $(PYTHON3_CONFDIR)/config.c
-       $(CCC) $(PYTHON3_CFLAGS) -o $@ $(PYTHON3_CONFDIR)/config.c \
-               -I$(PYTHON3_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
-
 objects/if_python.o: if_python.c if_py_both.h
        $(CCC) $(PYTHON_CFLAGS) $(PYTHON_CFLAGS_EXTRA) -o $@ if_python.c
 
@@ -2532,7 +2613,7 @@ objects/if_python3.o: if_python3.c if_py_both.h
        $(CCC) $(PYTHON3_CFLAGS) $(PYTHON3_CFLAGS_EXTRA) -o $@ if_python3.c
 
 objects/if_ruby.o: if_ruby.c
-       $(CCC) -o $@ if_ruby.c
+       $(CCC) $(RUBY_CFLAGS) -o $@ if_ruby.c
 
 objects/if_sniff.o: if_sniff.c
        $(CCC) -o $@ if_sniff.c
@@ -2552,6 +2633,9 @@ objects/mark.o: mark.c
 objects/memfile.o: memfile.c
        $(CCC) -o $@ memfile.c
 
+objects/memfile_test.o: memfile_test.c
+       $(CCC) -o $@ memfile_test.c
+
 objects/memline.o: memline.c
        $(CCC) -o $@ memline.c
 
@@ -2597,6 +2681,12 @@ objects/os_mac_conv.o: os_mac_conv.c
 objects/os_unix.o: os_unix.c
        $(CCC) -o $@ os_unix.c
 
+objects/os_mswin.o: os_mswin.c
+       $(CCC) -o $@ os_mswin.c
+
+objects/winclip.o: winclip.c
+       $(CCC) -o $@ winclip.c
+
 objects/pathdef.o: auto/pathdef.c
        $(CCC) -o $@ auto/pathdef.c
 
@@ -2609,7 +2699,7 @@ objects/popupmnu.o: popupmnu.c
 objects/quickfix.o: quickfix.c
        $(CCC) -o $@ quickfix.c
 
-objects/regexp.o: regexp.c
+objects/regexp.o: regexp.c regexp_nfa.c
        $(CCC) -o $@ regexp.c
 
 objects/screen.o: screen.c
@@ -2724,9 +2814,9 @@ bundle-rsrc: os_mac.rsr.hqx
        mv gui_mac.rsrc.rsrcfork $(RESDIR)/$(VIMNAME).rsrc
 
 # po/Make_osx.pl says something about generating a Mac message file
-# for Ukrananian.  Would somebody using Mac OS X in Ukranian
+# for Ukrainian.  Would somebody using Mac OS X in Ukrainian
 # *really* be upset that Carbon Vim was not localised in
-# Ukranian?
+# Ukrainian?
 #
 #bundle-language: bundle-dir po/Make_osx.pl
 #      cd po && perl Make_osx.pl --outdir ../$(RESDIR) $(MULTILANG)
@@ -2886,7 +2976,7 @@ objects/quickfix.o: quickfix.c vim.h auto/config.h feature.h os_unix.h \
 objects/regexp.o: regexp.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
- arabic.h
+ arabic.h regexp_nfa.c
 objects/screen.o: screen.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
@@ -3009,6 +3099,10 @@ objects/gui_at_fs.o: gui_at_fs.c vim.h auto/config.h feature.h os_unix.h \
 objects/pty.o: pty.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
  keymap.h term.h macros.h option.h structs.h regexp.h gui.h gui_beval.h \
  proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h arabic.h
+objects/memfile_test.o: memfile_test.c main.c vim.h auto/config.h feature.h \
+ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h \
+ structs.h regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h \
+ proto.h globals.h farsi.h arabic.h farsi.c arabic.c memfile.c
 objects/hangulin.o: hangulin.c vim.h auto/config.h feature.h os_unix.h \
  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
@@ -3041,7 +3135,7 @@ objects/if_tcl.o: if_tcl.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h
  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
  arabic.h
-objects/if_ruby.o: if_ruby.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+objects/if_ruby.o: if_ruby.c auto/config.h vim.h feature.h os_unix.h auto/osdef.h \
  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
  arabic.h version.h
index a346dea..111b163 100644 (file)
@@ -549,7 +549,7 @@ static BOOL VimOpenFile(BSTR& FileName, long LineNr)
        if (g_bNewTabs)
        {
                sprintf(VimCmd, ":tab drop ");
-               s = VimCmd + 11;
+               s = VimCmd + 10;
        }
        else
        {
@@ -557,8 +557,7 @@ static BOOL VimOpenFile(BSTR& FileName, long LineNr)
                s = VimCmd + 6;
        }
        sprintf(FileNameTmp, "%S", (char *)FileName);
-       for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4;
-                                                                         ++p)
+       for (p = FileNameTmp; *p != '\0' && s < VimCmd + MAX_OLE_STR - 4; ++p)
                if (*p == '\\')
                        *s++ = '/';
                else
index f96b03d..6902df9 100644 (file)
@@ -654,7 +654,7 @@ void COleAutomationControl::ErrDiag ()
        }
 
        char Buf[256];
-       sprintf (Buf, "An OLE error occured:\r\nCode = %s\r\nResult = %lx.",
+       sprintf (Buf, "An OLE error occurred:\r\nCode = %s\r\nResult = %lx.",
                 (char*) ErrName, m_hResult);
        MessageBox (NULL, Buf, "OLE Error", MB_OK);
 }
index 31c7299..25b0fbd 100644 (file)
@@ -17,12 +17,16 @@ own window.
 VisVim is based upon VisEmacs by Christopher Payne
 (Copyright (C) Christopher Payne 1997).
 
-Author: Heiko Erhardt <Heiko.Erhardt@munich.netsurf.de>
+Author: Heiko Erhardt <heiko.erhardt@gmx.net>
 Based upon: VisEmacs by Christopher Payne <payneca@sagian.com>
 Version: 1.0
 Created: 23 Oct 1997
 Date: 23 Oct 1997
 
+VisVim was originally GNU GPL licensed, as stated below.  On March 21 2012
+Heiko Erhardt declared this work to be relicensed under the Vim license, as
+stated in ../../runtime/doc/uganda.txt (or ":help uganda" in Vim).
+
 VisVim is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2, or (at your option)
@@ -216,7 +220,7 @@ Troubleshooting
                 2. Close Visual Studio.
                 3. Delete VisVim.dll or move it somewhere it can't be found.
                 4. Run Visual Studio.
-                5. Tools -> Cursomize ->Add-ins and Macro-Files.
+                5. Tools -> Customize ->Add-ins and Macro-Files.
                 6. A message appears:
                    ".../VisVim.dll" "This add-in no longer exists.  It will
                    no longer be displayed."
@@ -278,7 +282,7 @@ No new features, just some fine tuning:
   occasionally still seems to happen, but it's more stable now).
   (Vince Negri)
 - Added support for the new CTRL-\ CTRL-N command of Vim 5.4a.
-  This prevents Vim from beeping when a VisVim command is executed an Vim is
+  This prevents Vim from beeping when a VisVim command is executed and Vim is
   not in insert mode.
 
 
@@ -294,7 +298,7 @@ P9  Switching to DevStudio using ALT-TAB may get annoying. Would be nice to
 P8  Execute :tag command in Vim for word under cursor in DevStudio
 
 P7  Controlling the Visual Studio Debugger from inside Vim
-    See message above. Also a 'Debug' highligh group and a
+    See message above. Also a 'Debug' highlight group and a
     command to highlight a certain line would be necessary.
 
 P6  Provide an option to open the current file in VisVim in
@@ -318,5 +322,5 @@ Known Problems
 Have fun!
 
 Heiko Erhardt
-Heiko.Erhardt@munich.netsurf.de
+heiko.erhardt@gmx.net
 
index 8c1f64c..72c64b5 100644 (file)
@@ -1066,7 +1066,7 @@ arabic_shape(c, ccp, c1p, prev_c, prev_c1, next_c)
 
     if (curr_c != c && ccp != NULL)
     {
-       char_u buf[MB_MAXBYTES];
+       char_u buf[MB_MAXBYTES + 1];
 
        /* Update the first byte of the character. */
        (*mb_char2bytes)(curr_c, buf);
index b920d41..a3cfecf 100644 (file)
 #define DCS            0x90    /* Device Control String */
 #define STERM          0x9c    /* String Terminator */
 
-#define POUND          '£'
+#define POUND          0xB1
 
 #define CTRL_F_STR     "\056"
 #define CTRL_H_STR     "\026"
@@ -183,11 +183,6 @@ extern char MetaCharTable[];
 # define PATHSEP       psepc
 # define PATHSEPSTR    pseps
 #else
-# ifdef RISCOS
-#  define PATHSEP      '.'
-#  define PATHSEPSTR   "."
-# else
-#  define PATHSEP      '/'
-#  define PATHSEPSTR   "/"
-# endif
+# define PATHSEP       '/'
+# define PATHSEPSTR    "/"
 #endif
index d09ee92..a9755a0 100755 (executable)
@@ -593,6 +593,7 @@ ac_includes_default="\
 
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
+LINK_AS_NEEDED
 DEPEND_CFLAGS_FILTER
 MAKEMO
 MSGFMT
@@ -673,6 +674,8 @@ LUA_LIBS
 LUA_PRO
 LUA_OBJ
 LUA_SRC
+vi_cv_path_plain_lua
+vi_cv_path_luajit
 vi_cv_path_lua
 compiledby
 dogvimdiff
@@ -740,6 +743,7 @@ SHELL'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_fail_if_missing
 enable_darwin
 with_mac_arch
 with_developer_dir
@@ -756,6 +760,7 @@ enable_xsmp
 enable_xsmp_interact
 enable_luainterp
 with_lua_prefix
+with_luajit
 enable_mzschemeinterp
 with_plthome
 enable_perlinterp
@@ -1417,6 +1422,8 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-fail-if-missing    Fail if dependencies on additional features
+     specified on the command line are missing.
   --disable-darwin        Disable Darwin (Mac OS X) support.
   --disable-selinux      Don't check for SELinux support.
   --disable-xsmp          Disable XSMP session management
@@ -1427,7 +1434,7 @@ Optional Features:
   --enable-pythoninterp=OPTS   Include Python interpreter. default=no OPTS=no/yes/dynamic
   --enable-python3interp=OPTS   Include Python3 interpreter. default=no OPTS=no/yes/dynamic
   --enable-tclinterp      Include Tcl interpreter.
-  --enable-rubyinterp     Include Ruby interpreter.
+  --enable-rubyinterp=OPTS     Include Ruby interpreter.  default=no OPTS=no/yes/dynamic
   --enable-cscope         Include cscope interface.
   --enable-workshop       Include Sun Visual Workshop support.
   --disable-netbeans      Disable NetBeans integration support.
@@ -1465,6 +1472,7 @@ Optional Packages:
   --with-features=TYPE    tiny, small, normal, big or huge (default: normal)
   --with-compiledby=NAME  name to show in :version message
   --with-lua-prefix=PFX   Prefix where Lua is installed.
+  --with-luajit           Link with LuaJIT instead of Lua.
   --with-plthome=PLTHOME   Use PLTHOME.
   --with-python-config-dir=PATH  Python's config directory
   --with-python3-config-dir=PATH  Python's config directory
@@ -3948,6 +3956,19 @@ $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
 fi
 
 
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-fail-if-missing argument" >&5
+$as_echo_n "checking --enable-fail-if-missing argument... " >&6; }
+# Check whether --enable-fail_if_missing was given.
+if test "${enable_fail_if_missing+set}" = set; then :
+  enableval=$enable_fail_if_missing; fail_if_missing="yes"
+else
+  fail_if_missing="no"
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $fail_if_missing" >&5
+$as_echo "$fail_if_missing" >&6; }
+
 if test -z "$CFLAGS"; then
   CFLAGS="-O"
   test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
@@ -4409,15 +4430,18 @@ case `uname` in
                  echo ""
                  echo "------------------------------------------"
                  echo " On z/OS Unix, the environment variable"
-                 echo " __CC_${ccn}MODE must be set to \"1\"!"
+                 echo " _CC_${ccn}MODE must be set to \"1\"!"
                  echo " Do:"
                  echo "    export _CC_${ccn}MODE=1"
                  echo " and then call configure again."
                  echo "------------------------------------------"
                  exit 1
                fi
-               CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
-                LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
+               # Set CFLAGS for configure process.
+               # This will be reset later for config.mk.
+               # Use haltonmsg to force error for missing H files.
+               CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
+               LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
                { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
                ;;
@@ -4626,26 +4650,95 @@ $as_echo "not set, default to /usr" >&6; }
     fi
   fi
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-luajit" >&5
+$as_echo_n "checking --with-luajit... " >&6; }
+
+# Check whether --with-luajit was given.
+if test "${with_luajit+set}" = set; then :
+  withval=$with_luajit; vi_cv_with_luajit="$withval"
+else
+  vi_cv_with_luajit="no"
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_with_luajit" >&5
+$as_echo "$vi_cv_with_luajit" >&6; }
+
   LUA_INC=
   if test "X$vi_cv_path_lua_pfx" != "X"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5
-$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; }
-    if test -f $vi_cv_path_lua_pfx/include/lua.h; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+    if test "x$vi_cv_with_luajit" != "xno"; then
+            # Extract the first word of "luajit", so it can be a program name with args.
+set dummy luajit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_vi_cv_path_luajit+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $vi_cv_path_luajit in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_vi_cv_path_luajit="$vi_cv_path_luajit" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_vi_cv_path_luajit="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+vi_cv_path_luajit=$ac_cv_path_vi_cv_path_luajit
+if test -n "$vi_cv_path_luajit"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_luajit" >&5
+$as_echo "$vi_cv_path_luajit" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
+fi
+
+
+      if test "X$vi_cv_path_luajit" != "X"; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking LuaJIT version" >&5
+$as_echo_n "checking LuaJIT version... " >&6; }
+if test "${vi_cv_version_luajit+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+   vi_cv_version_luajit=`${vi_cv_path_luajit} -v | sed 's/LuaJIT \([0-9.]*\)\.[0-9] .*/\1/'`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_version_luajit" >&5
+$as_echo "$vi_cv_version_luajit" >&6; }
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version of LuaJIT" >&5
+$as_echo_n "checking Lua version of LuaJIT... " >&6; }
+if test "${vi_cv_version_lua_luajit+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+   vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_version_lua_luajit" >&5
+$as_echo "$vi_cv_version_lua_luajit" >&6; }
+       vi_cv_path_lua="$vi_cv_path_luajit"
+       vi_cv_version_lua="$vi_cv_version_lua_luajit"
+      fi
+    else
             # Extract the first word of "lua", so it can be a program name with args.
 set dummy lua; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_vi_cv_path_lua+set}" = set; then :
+if test "${ac_cv_path_vi_cv_path_plain_lua+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-  case $vi_cv_path_lua in
+  case $vi_cv_path_plain_lua in
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_vi_cv_path_lua="$vi_cv_path_lua" # Let the user override the test with a path.
+  ac_cv_path_vi_cv_path_plain_lua="$vi_cv_path_plain_lua" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -4655,7 +4748,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_vi_cv_path_lua="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_path_vi_cv_path_plain_lua="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4666,65 +4759,180 @@ IFS=$as_save_IFS
   ;;
 esac
 fi
-vi_cv_path_lua=$ac_cv_path_vi_cv_path_lua
-if test -n "$vi_cv_path_lua"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_lua" >&5
-$as_echo "$vi_cv_path_lua" >&6; }
+vi_cv_path_plain_lua=$ac_cv_path_vi_cv_path_plain_lua
+if test -n "$vi_cv_path_plain_lua"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_plain_lua" >&5
+$as_echo "$vi_cv_path_plain_lua" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-      if test "X$vi_cv_path_lua" != "X"; then
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
+      if test "X$vi_cv_path_plain_lua" != "X"; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
 $as_echo_n "checking Lua version... " >&6; }
-if test "${vi_cv_version_lua+set}" = set; then :
+if test "${vi_cv_version_plain_lua+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
-   vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'`
+   vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'`
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_version_lua" >&5
-$as_echo "$vi_cv_version_lua" >&6; }
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_version_plain_lua" >&5
+$as_echo "$vi_cv_version_plain_lua" >&6; }
+      fi
+      vi_cv_path_lua="$vi_cv_path_plain_lua"
+      vi_cv_version_lua="$vi_cv_version_plain_lua"
+    fi
+    if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit" >&5
+$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit... " >&6; }
+      if test -f $vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       LUA_INC=/luajit-$vi_cv_version_luajit
+      fi
+    fi
+    if test "X$LUA_INC" = "X"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5
+$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; }
+      if test -f $vi_cv_path_lua_pfx/include/lua.h; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+      else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5
 $as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua... " >&6; }
-        if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+       if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
+         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-          LUA_INC=/lua$vi_cv_version_lua
-        else
-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+         LUA_INC=/lua$vi_cv_version_lua
+       else
+         { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-          vi_cv_path_lua_pfx=
-        fi
+         vi_cv_path_lua_pfx=
+       fi
       fi
     fi
   fi
 
   if test "X$vi_cv_path_lua_pfx" != "X"; then
-    if test "X$vi_cv_version_lua" != "X"; then
-            LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
+    if test "x$vi_cv_with_luajit" != "xno"; then
+      multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
+      if test "X$multiarch" != "X"; then
+       lib_multiarch="lib/${multiarch}"
+      else
+       lib_multiarch="lib"
+      fi
+      if test "X$vi_cv_version_lua" = "X"; then
+       LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
+      else
+       LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
+      fi
+    else
+      if test "X$LUA_INC" != "X"; then
+               LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
+      else
+       LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
+      fi
+    fi
+    if test "$enable_luainterp" = "dynamic"; then
+      lua_ok="yes"
     else
-      LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking if link with ${LUA_LIBS} is sane" >&5
+$as_echo_n "checking if link with ${LUA_LIBS} is sane... " >&6; }
+      libs_save=$LIBS
+      LIBS="$LIBS $LUA_LIBS"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; lua_ok="yes"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }; lua_ok="no"; LUA_LIBS=""
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS=$libs_save
     fi
-    LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
-    LUA_SRC="if_lua.c"
-    LUA_OBJ="objects/if_lua.o"
-    LUA_PRO="if_lua.pro"
-    $as_echo "#define FEAT_LUA 1" >>confdefs.h
+    if test "x$lua_ok" = "xyes"; then
+      LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
+      LUA_SRC="if_lua.c"
+      LUA_OBJ="objects/if_lua.o"
+      LUA_PRO="if_lua.pro"
+      $as_echo "#define FEAT_LUA 1" >>confdefs.h
 
+    fi
     if test "$enable_luainterp" = "dynamic"; then
-                  for i in 0 1 2 3 4 5 6 7 8 9; do
-       if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
-         LUA_SONAME=".$i"
-         break
+      if test "x$vi_cv_with_luajit" != "xno"; then
+       luajit="jit"
+      fi
+      if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
+       vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
+      else
+       if test "x$MACOSX" = "xyes"; then
+         ext="dylib"
+         indexes=""
+       else
+         ext="so"
+         indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
+         multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
+         if test "X$multiarch" != "X"; then
+           lib_multiarch="lib/${multiarch}"
+         fi
        fi
-      done
+                       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx" >&5
+$as_echo_n "checking if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx... " >&6; }
+       for subdir in "${lib_multiarch}" lib64 lib; do
+         if test -z "$subdir"; then
+           continue
+         fi
+         for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
+           ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
+           for i in $indexes ""; do
+             if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
+               sover2="$i"
+               break 3
+             fi
+           done
+         done
+         sover=""
+       done
+       if test "X$sover" = "X"; then
+         { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+         lua_ok="no"
+         vi_cv_dll_name_lua="liblua${luajit}.${ext}"
+       else
+         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+         lua_ok="yes"
+         vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
+       fi
+      fi
       $as_echo "#define DYNAMIC_LUA 1" >>confdefs.h
 
       LUA_LIBS=""
-      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
+      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
     fi
+    if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
+       test "x$MACOSX" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
+       test "`(uname -m) 2>/dev/null`" = "x86_64"; then
+            LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
+    fi
+  fi
+  if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
+    as_fn_error "could not configure lua" "$LINENO" 5
   fi
 
 
@@ -4862,16 +5070,36 @@ $as_echo "yes" >&6; }
       else
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/plt/" >&5
-$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; }
-       if test -f /usr/include/plt/scheme.h; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket" >&5
+$as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket... " >&6; }
+       if test -f $vi_cv_path_mzscheme_pfx/include/racket/scheme.h; then
          { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-         SCHEME_INC=/usr/include/plt
+         SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
        else
          { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-         vi_cv_path_mzscheme_pfx=
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/plt/" >&5
+$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; }
+         if test -f /usr/include/plt/scheme.h; then
+           { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+           SCHEME_INC=/usr/include/plt
+         else
+           { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+           { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/racket/" >&5
+$as_echo_n "checking if scheme.h can be found in /usr/include/racket/... " >&6; }
+           if test -f /usr/include/racket/scheme.h; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+             SCHEME_INC=/usr/include/racket
+           else
+             { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+             vi_cv_path_mzscheme_pfx=
+           fi
+         fi
        fi
       fi
     fi
@@ -4879,16 +5107,27 @@ $as_echo "no" >&6; }
 
   if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
     if test "x$MACOSX" = "xyes"; then
-      MZSCHEME_LIBS="-framework PLT_MzScheme"
+      MZSCHEME_LIBS="-framework Racket"
+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
-    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
     else
             if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
        MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
+       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
       else
         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
       fi
@@ -4899,21 +5138,135 @@ $as_echo "no" >&6; }
        MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib"
       fi
     fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for racket collects directory" >&5
+$as_echo_n "checking for racket collects directory... " >&6; }
     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
-      SCHEME_COLLECTS=lib/plt/
+      SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
+    else
+      if test -d $vi_cv_path_mzscheme_pfx/lib/racket/collects; then
+       SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
+      else
+       if test -d $vi_cv_path_mzscheme_pfx/share/racket/collects; then
+         SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
+       else
+         if test -d $vi_cv_path_mzscheme_pfx/collects; then
+           SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
+         fi
+       fi
+      fi
+    fi
+    if test "X$SCHEME_COLLECTS" != "X" ; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${SCHEME_COLLECTS}" >&5
+$as_echo "${SCHEME_COLLECTS}" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+    fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mzscheme_base.c" >&5
+$as_echo_n "checking for mzscheme_base.c... " >&6; }
+    if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
+      MZSCHEME_EXTRA="mzscheme_base.c"
+    else
+      if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
+       MZSCHEME_EXTRA="mzscheme_base.c"
+      fi
     fi
-    if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
-            MZSCHEME_EXTRA="mzscheme_base.c"
-      MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
+    if test "X$MZSCHEME_EXTRA" != "X" ; then
+            MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: needed" >&5
+$as_echo "needed" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: not needed" >&5
+$as_echo "not needed" >&6; }
     fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ffi_type_void in -lffi" >&5
+$as_echo_n "checking for ffi_type_void in -lffi... " >&6; }
+if test "${ac_cv_lib_ffi_ffi_type_void+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lffi  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ffi_type_void ();
+int
+main ()
+{
+return ffi_type_void ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_ffi_ffi_type_void=yes
+else
+  ac_cv_lib_ffi_ffi_type_void=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ffi_ffi_type_void" >&5
+$as_echo "$ac_cv_lib_ffi_ffi_type_void" >&6; }
+if test "x$ac_cv_lib_ffi_ffi_type_void" = x""yes; then :
+  MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"
+fi
+
+
     MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
-      -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'"
-    MZSCHEME_SRC="if_mzsch.c"
-    MZSCHEME_OBJ="objects/if_mzsch.o"
-    MZSCHEME_PRO="if_mzsch.pro"
-    $as_echo "#define FEAT_MZSCHEME 1" >>confdefs.h
+      -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compile and link flags for MzScheme are sane" >&5
+$as_echo_n "checking if compile and link flags for MzScheme are sane... " >&6; }
+    cflags_save=$CFLAGS
+    libs_save=$LIBS
+    CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
+    LIBS="$LIBS $MZSCHEME_LIBS"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; mzs_ok=yes
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no: MZSCHEME DISABLED" >&5
+$as_echo "no: MZSCHEME DISABLED" >&6; }; mzs_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    CFLAGS=$cflags_save
+    LIBS=$libs_save
+    if test $mzs_ok = yes; then
+      MZSCHEME_SRC="if_mzsch.c"
+      MZSCHEME_OBJ="objects/if_mzsch.o"
+      MZSCHEME_PRO="if_mzsch.pro"
+      $as_echo "#define FEAT_MZSCHEME 1" >>confdefs.h
+
+    else
+      MZSCHEME_CFLAGS=
+      MZSCHEME_LIBS=
+      MZSCHEME_EXTRA=
+      MZSCHEME_MZC=
+    fi
   fi
 
 
@@ -5026,6 +5379,7 @@ $as_echo_n "checking if compile and link flags for Perl are sane... " >&6; }
       ldflags_save=$LDFLAGS
       CFLAGS="$CFLAGS $perlcppflags"
       LIBS="$LIBS $perllibs"
+      perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
       LDFLAGS="$perlldflags $LDFLAGS"
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -5055,7 +5409,9 @@ rm -f core conftest.err conftest.$ac_objext \
                  PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[^ ]*//'`
        fi
        if test "X$perlldflags" != "X"; then
-         LDFLAGS="$perlldflags $LDFLAGS"
+         if test "X`echo \"$LDFLAGS\" | grep -F -e \"$perlldflags\"`" = "X"; then
+           LDFLAGS="$perlldflags $LDFLAGS"
+         fi
        fi
        PERL_LIBS=$perllibs
        PERL_SRC="auto/if_perl.c if_perlsfio.c"
@@ -5099,6 +5455,10 @@ $as_echo ">>> too old; need Perl version 5.003_01 or later <<<" >&6; }
       PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
+    as_fn_error "could not configure perl" "$LINENO" 5
+  fi
 fi
 
 
@@ -5119,8 +5479,10 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_pythoninterp" >&5
 $as_echo "$enable_pythoninterp" >&6; }
 if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
-    # Extract the first word of "python", so it can be a program name with args.
-set dummy python; ac_word=$2
+    for ac_prog in python2 python
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_path_vi_cv_path_python+set}" = set; then :
@@ -5159,6 +5521,9 @@ $as_echo "no" >&6; }
 fi
 
 
+  test -n "$vi_cv_path_python" && break
+done
+
   if test "X$vi_cv_path_python" != "X"; then
 
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5
@@ -5173,10 +5538,10 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python_version" >&5
 $as_echo "$vi_cv_var_python_version" >&6; }
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 1.4 or better" >&5
-$as_echo_n "checking Python is 1.4 or better... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 2.3 or better" >&5
+$as_echo_n "checking Python is 2.3 or better... " >&6; }
     if ${vi_cv_path_python} -c \
-       "import sys; sys.exit(${vi_cv_var_python_version} < 1.4)"
+       "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
     then
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yep" >&5
 $as_echo "yep" >&6; }
@@ -5231,14 +5596,19 @@ if test "${vi_cv_path_python_conf+set}" = set; then :
 else
 
        vi_cv_path_python_conf=
-       for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
-         for subdir in lib64 lib share; do
-           d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
-           if test -d "$d" && test -f "$d/config.c"; then
-             vi_cv_path_python_conf="$d"
-           fi
+       d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
+       if test -d "$d" && test -f "$d/config.c"; then
+         vi_cv_path_python_conf="$d"
+       else
+         for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
+           for subdir in lib64 lib share; do
+             d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
+             if test -d "$d" && test -f "$d/config.c"; then
+               vi_cv_path_python_conf="$d"
+             fi
+           done
          done
-       done
+       fi
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python_conf" >&5
@@ -5263,6 +5633,7 @@ __:
        @echo "python_LIBS='$(LIBS)'"
        @echo "python_SYSLIBS='$(SYSLIBS)'"
        @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
+       @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
        @echo "python_INSTSONAME='$(INSTSONAME)'"
 eof
                    eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
@@ -5283,22 +5654,21 @@ eof
 fi
 
 
+       if test "X$python_DLLLIBRARY" != "X"; then
+         python_INSTSONAME="$python_DLLLIBRARY"
+       fi
        PYTHON_LIBS="${vi_cv_path_python_plibs}"
        if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
-         PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
+         PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
        else
-         PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
+         PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
        fi
        PYTHON_SRC="if_python.c"
-               if test "x$MACOSX" = "xyes"; then
-         PYTHON_OBJ="objects/if_python.o"
-       else
-         PYTHON_OBJ="objects/if_python.o objects/py_config.o"
-       fi
+       PYTHON_OBJ="objects/if_python.o"
        if test "${vi_cv_var_python_version}" = "1.4"; then
           PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
        fi
-       PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
+    PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
 
                                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
 $as_echo_n "checking if -pthread should be used... " >&6; }
@@ -5310,6 +5680,9 @@ $as_echo_n "checking if -pthread should be used... " >&6; }
            threadsafe_flag="-D_THREAD_SAFE"
            thread_lib="-pthread"
          fi
+         if test "`(uname) 2>/dev/null`" = SunOS; then
+           threadsafe_flag="-pthreads"
+         fi
        fi
        libs_save_old=$LIBS
        if test -n "$threadsafe_flag"; then
@@ -5381,13 +5754,16 @@ rm -f core conftest.err conftest.$ac_objext \
          PYTHON_LIBS=
          PYTHON_CFLAGS=
        fi
-
       fi
     else
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: too old" >&5
 $as_echo "too old" >&6; }
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
+    as_fn_error "could not configure python" "$LINENO" 5
+  fi
 fi
 
 
@@ -5410,8 +5786,10 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_python3interp" >&5
 $as_echo "$enable_python3interp" >&6; }
 if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
-    # Extract the first word of "python3", so it can be a program name with args.
-set dummy python3; ac_word=$2
+    for ac_prog in python3 python
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_path_vi_cv_path_python3+set}" = set; then :
@@ -5450,6 +5828,9 @@ $as_echo "no" >&6; }
 fi
 
 
+  test -n "$vi_cv_path_python3" && break
+done
+
   if test "X$vi_cv_path_python3" != "X"; then
 
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5
@@ -5464,38 +5845,63 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_version" >&5
 $as_echo "$vi_cv_var_python3_version" >&6; }
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 3.0 or better" >&5
+$as_echo_n "checking Python is 3.0 or better... " >&6; }
+    if ${vi_cv_path_python3} -c \
+      "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
+    then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yep" >&5
+$as_echo "yep" >&6; }
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's abiflags" >&5
+$as_echo_n "checking Python's abiflags... " >&6; }
+if test "${vi_cv_var_python3_abiflags+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+       vi_cv_var_python3_abiflags=
+       if ${vi_cv_path_python3} -c \
+           "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
+       then
+         vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
+           "import sys; print(sys.abiflags)"`
+       fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_abiflags" >&5
+$as_echo "$vi_cv_var_python3_abiflags" >&6; }
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
 $as_echo_n "checking Python's install prefix... " >&6; }
 if test "${vi_cv_path_python3_pfx+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
    vi_cv_path_python3_pfx=`
-     ${vi_cv_path_python3} -c \
-     "import sys; print(sys.prefix)"`
+       ${vi_cv_path_python3} -c \
+       "import sys; print(sys.prefix)"`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3_pfx" >&5
 $as_echo "$vi_cv_path_python3_pfx" >&6; }
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's execution prefix" >&5
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's execution prefix" >&5
 $as_echo_n "checking Python's execution prefix... " >&6; }
 if test "${vi_cv_path_python3_epfx+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
    vi_cv_path_python3_epfx=`
-     ${vi_cv_path_python3} -c \
-     "import sys; print(sys.exec_prefix)"`
+       ${vi_cv_path_python3} -c \
+       "import sys; print(sys.exec_prefix)"`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3_epfx" >&5
 $as_echo "$vi_cv_path_python3_epfx" >&6; }
 
 
-    if test "${vi_cv_path_python3path+set}" = set; then :
+      if test "${vi_cv_path_python3path+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
    vi_cv_path_python3path=`
-     unset PYTHONPATH;
-     ${vi_cv_path_python3} -c \
-     "import sys, string; print(':'.join(sys.path))"`
+       unset PYTHONPATH;
+       ${vi_cv_path_python3} -c \
+       "import sys, string; print(':'.join(sys.path))"`
 fi
 
 
@@ -5507,87 +5913,95 @@ if test "${with_python3_config_dir+set}" = set; then :
 fi
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's configuration directory" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's configuration directory" >&5
 $as_echo_n "checking Python's configuration directory... " >&6; }
 if test "${vi_cv_path_python3_conf+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
 
-     vi_cv_path_python3_conf=
-     for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
-       for subdir in lib64 lib share; do
-         d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
-         if test -d "$d" && test -f "$d/config.c"; then
-           vi_cv_path_python3_conf="$d"
-         fi
-       done
-     done
+       vi_cv_path_python3_conf=
+       config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+       d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
+       if test -d "$d" && test -f "$d/config.c"; then
+         vi_cv_path_python3_conf="$d"
+       else
+         for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+          for subdir in lib64 lib share; do
+            d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
+            if test -d "$d" && test -f "$d/config.c"; then
+              vi_cv_path_python3_conf="$d"
+            fi
+          done
+         done
+       fi
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3_conf" >&5
 $as_echo "$vi_cv_path_python3_conf" >&6; }
 
-    PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
+      PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
 
-    if test "X$PYTHON3_CONFDIR" = "X"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: can't find it!" >&5
+      if test "X$PYTHON3_CONFDIR" = "X"; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: can't find it!" >&5
 $as_echo "can't find it!" >&6; }
-    else
+      else
 
-                  if test "${vi_cv_path_python3_plibs+set}" = set; then :
+                        if test "${vi_cv_path_python3_plibs+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
 
-          pwd=`pwd`
-          tmp_mkf="$pwd/config-PyMake$$"
-          cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
+            pwd=`pwd`
+            tmp_mkf="$pwd/config-PyMake$$"
+            cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
 __:
        @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
        @echo "python3_LIBS='$(LIBS)'"
        @echo "python3_SYSLIBS='$(SYSLIBS)'"
-       @echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
+       @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
        @echo "python3_INSTSONAME='$(INSTSONAME)'"
 eof
-                    eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
-          rm -f -- "${tmp_mkf}"
-          vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
-          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
-                    vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
-          vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+                        eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+            rm -f -- "${tmp_mkf}"
+           vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+            vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+                        vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+            vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
 
 fi
 
 
-      PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
-      if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}"
-      else
-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}"
-      fi
-      PYTHON3_SRC="if_python3.c"
-            if test "x$MACOSX" = "xyes"; then
+        if test "X$python3_DLLLIBRARY" != "X"; then
+         python3_INSTSONAME="$python3_DLLLIBRARY"
+        fi
+        PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+        if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+        else
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+        fi
+        PYTHON3_SRC="if_python3.c"
         PYTHON3_OBJ="objects/if_python3.o"
-      else
-        PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
-      fi
 
-                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
+                                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
 $as_echo_n "checking if -pthread should be used... " >&6; }
-      threadsafe_flag=
-      thread_lib=
-            if test "`(uname) 2>/dev/null`" != Darwin; then
-        test "$GCC" = yes && threadsafe_flag="-pthread"
-        if test "`(uname) 2>/dev/null`" = FreeBSD; then
-          threadsafe_flag="-D_THREAD_SAFE"
-          thread_lib="-pthread"
+        threadsafe_flag=
+        thread_lib=
+                if test "`(uname) 2>/dev/null`" != Darwin; then
+          test "$GCC" = yes && threadsafe_flag="-pthread"
+          if test "`(uname) 2>/dev/null`" = FreeBSD; then
+            threadsafe_flag="-D_THREAD_SAFE"
+            thread_lib="-pthread"
+          fi
+          if test "`(uname) 2>/dev/null`" = SunOS; then
+            threadsafe_flag="-pthreads"
+          fi
         fi
-      fi
-      libs_save_old=$LIBS
-      if test -n "$threadsafe_flag"; then
-        cflags_save=$CFLAGS
-        CFLAGS="$CFLAGS $threadsafe_flag"
-        LIBS="$LIBS $thread_lib"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        libs_save_old=$LIBS
+        if test -n "$threadsafe_flag"; then
+          cflags_save=$CFLAGS
+          CFLAGS="$CFLAGS $threadsafe_flag"
+          LIBS="$LIBS $thread_lib"
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -5608,19 +6022,19 @@ $as_echo "no" >&6; }; LIBS=$libs_save_old
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-        CFLAGS=$cflags_save
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+          CFLAGS=$cflags_save
+        else
+          { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-      fi
+        fi
 
-                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compile and link flags for Python 3 are sane" >&5
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compile and link flags for Python 3 are sane" >&5
 $as_echo_n "checking if compile and link flags for Python 3 are sane... " >&6; }
-      cflags_save=$CFLAGS
-      libs_save=$LIBS
-      CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
-      LIBS="$LIBS $PYTHON3_LIBS"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        cflags_save=$CFLAGS
+        libs_save=$LIBS
+        CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+        LIBS="$LIBS $PYTHON3_LIBS"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -5640,20 +6054,27 @@ $as_echo "no: PYTHON3 DISABLED" >&6; }; python3_ok=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-      CFLAGS=$cflags_save
-      LIBS=$libs_save
-      if test "$python3_ok" = yes; then
-        $as_echo "#define FEAT_PYTHON3 1" >>confdefs.h
+        CFLAGS=$cflags_save
+        LIBS=$libs_save
+        if test "$python3_ok" = yes; then
+          $as_echo "#define FEAT_PYTHON3 1" >>confdefs.h
 
-      else
-        LIBS=$libs_save_old
-        PYTHON3_SRC=
-        PYTHON3_OBJ=
-        PYTHON3_LIBS=
-        PYTHON3_CFLAGS=
+        else
+          LIBS=$libs_save_old
+          PYTHON3_SRC=
+          PYTHON3_OBJ=
+          PYTHON3_LIBS=
+          PYTHON3_CFLAGS=
+        fi
       fi
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: too old" >&5
+$as_echo "too old" >&6; }
     fi
   fi
+  if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
+    as_fn_error "could not configure python3" "$LINENO" 5
+  fi
 fi
 
 
@@ -5667,12 +6088,12 @@ if test "$python_ok" = yes && test "$python3_ok" = yes; then
 
   $as_echo "#define DYNAMIC_PYTHON3 1" >>confdefs.h
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL" >&5
-$as_echo_n "checking whether we can do without RTLD_GLOBAL... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python" >&5
+$as_echo_n "checking whether we can do without RTLD_GLOBAL for Python... " >&6; }
   cflags_save=$CFLAGS
-  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
   ldflags_save=$LDFLAGS
-  LDFLAGS="$LDFLAGS -ldl"
+    LDFLAGS="-ldl $LDFLAGS"
   if test "$cross_compiling" = yes; then :
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
@@ -5686,18 +6107,20 @@ else
     /* If this program fails, then RTLD_GLOBAL is needed.
      * RTLD_GLOBAL will be used and then it is not possible to
      * have both python versions enabled in the same vim instance.
-     * Only the first pyhton version used will be switched on.
+     * Only the first python version used will be switched on.
      */
 
-    int no_rtl_global_needed_for(char *python_instsoname)
+    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
     {
       int needed = 0;
       void* pylib = dlopen(python_instsoname, RTLD_LAZY);
       if (pylib != 0)
       {
+          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
           void (*init)(void) = dlsym(pylib, "Py_Initialize");
           int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
           void (*final)(void) = dlsym(pylib, "Py_Finalize");
+          (*pfx)(prefix);
           (*init)();
           needed = (*simple)("import termios") == -1;
           (*final)();
@@ -5709,7 +6132,7 @@ else
     int main(int argc, char** argv)
     {
       int not_needed = 0;
-      if (no_rtl_global_needed_for("libpython2.7.so.1.0") && no_rtl_global_needed_for("libpython3.1.so.1.0"))
+      if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
             not_needed = 1;
       return !not_needed;
     }
@@ -5726,8 +6149,76 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
+
   CFLAGS=$cflags_save
   LDFLAGS=$ldflags_save
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python3" >&5
+$as_echo_n "checking whether we can do without RTLD_GLOBAL for Python3... " >&6; }
+  cflags_save=$CFLAGS
+  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+  ldflags_save=$LDFLAGS
+    LDFLAGS="-ldl $LDFLAGS"
+  if test "$cross_compiling" = yes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot run test program while cross compiling
+See \`config.log' for more details." "$LINENO" 5; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+    #include <dlfcn.h>
+    #include <wchar.h>
+    /* If this program fails, then RTLD_GLOBAL is needed.
+     * RTLD_GLOBAL will be used and then it is not possible to
+     * have both python versions enabled in the same vim instance.
+     * Only the first python version used will be switched on.
+     */
+
+    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
+    {
+      int needed = 0;
+      void* pylib = dlopen(python_instsoname, RTLD_LAZY);
+      if (pylib != 0)
+      {
+          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
+          void (*init)(void) = dlsym(pylib, "Py_Initialize");
+          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
+          void (*final)(void) = dlsym(pylib, "Py_Finalize");
+          (*pfx)(prefix);
+          (*init)();
+          needed = (*simple)("import termios") == -1;
+          (*final)();
+          dlclose(pylib);
+      }
+      return !needed;
+    }
+
+    int main(int argc, char** argv)
+    {
+      int not_needed = 0;
+      if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
+            not_needed = 1;
+      return !not_needed;
+    }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; };$as_echo "#define PY3_NO_RTLD_GLOBAL 1" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+  CFLAGS=$cflags_save
+  LDFLAGS=$ldflags_save
+
   PYTHON_SRC="if_python.c"
   PYTHON_OBJ="objects/if_python.o"
   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
@@ -5743,6 +6234,38 @@ elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
   PYTHON_OBJ="objects/if_python.o"
   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
   PYTHON_LIBS=
+elif test "$python_ok" = yes; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -fPIE can be added for Python" >&5
+$as_echo_n "checking if -fPIE can be added for Python... " >&6; }
+  cflags_save=$CFLAGS
+  libs_save=$LIBS
+  CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
+  LIBS="$LIBS $PYTHON_LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; fpie_ok=yes
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }; fpie_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$cflags_save
+  LIBS=$libs_save
+  if test $fpie_ok = yes; then
+    PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
+  fi
 elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
   $as_echo "#define DYNAMIC_PYTHON3 1" >>confdefs.h
 
@@ -5750,6 +6273,38 @@ elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
   PYTHON3_OBJ="objects/if_python3.o"
   PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${python3_INSTSONAME}\\\""
   PYTHON3_LIBS=
+elif test "$python3_ok" = yes; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -fPIE can be added for Python3" >&5
+$as_echo_n "checking if -fPIE can be added for Python3... " >&6; }
+  cflags_save=$CFLAGS
+  libs_save=$LIBS
+  CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
+  LIBS="$LIBS $PYTHON3_LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }; fpie_ok=yes
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }; fpie_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$cflags_save
+  LIBS=$libs_save
+  if test $fpie_ok = yes; then
+    PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
+  fi
 fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-tclinterp argument" >&5
@@ -6085,6 +6640,9 @@ $as_echo "<not found>" >&6; }
 $as_echo "too old; need Tcl version 8.0 or later" >&6; }
     fi
   fi
+  if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
+    as_fn_error "could not configure Tcl" "$LINENO" 5
+  fi
 fi
 
 
@@ -6103,20 +6661,20 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_rubyinterp" >&5
 $as_echo "$enable_rubyinterp" >&6; }
-if test "$enable_rubyinterp" = "yes"; then
+if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
 $as_echo_n "checking --with-ruby-command argument... " >&6; }
 
+
 # Check whether --with-ruby-command was given.
 if test "${with_ruby_command+set}" = set; then :
-  withval=$with_ruby_command; RUBY_CMD="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
+  withval=$with_ruby_command; RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
 $as_echo "$RUBY_CMD" >&6; }
 else
   RUBY_CMD="ruby"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaulting to $RUBY_CMD" >&5
 $as_echo "defaulting to $RUBY_CMD" >&6; }
 fi
 
-
   # Extract the first word of "$RUBY_CMD", so it can be a program name with args.
 set dummy $RUBY_CMD; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -6163,45 +6721,55 @@ $as_echo_n "checking Ruby version... " >&6; }
     if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5
 $as_echo "OK" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby rbconfig" >&5
+$as_echo_n "checking Ruby rbconfig... " >&6; }
+      ruby_rbconfig="RbConfig"
+      if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
+       ruby_rbconfig="Config"
+      fi
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ruby_rbconfig" >&5
+$as_echo "$ruby_rbconfig" >&6; }
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby header files" >&5
 $as_echo_n "checking Ruby header files... " >&6; }
-      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["rubyhdrdir"] || Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null`
+      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG['rubyhdrdir'] || $ruby_rbconfig::CONFIG['archdir'] || \\$hdrdir" 2>/dev/null`
       if test "X$rubyhdrdir" != "X"; then
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubyhdrdir" >&5
 $as_echo "$rubyhdrdir" >&6; }
        RUBY_CFLAGS="-I$rubyhdrdir"
-        rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["arch"]'`
+        rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['arch']"`
         if test -d "$rubyhdrdir/$rubyarch"; then
           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
         fi
-        rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["ruby_version"].gsub(/\./, "")[0,2]'`
+        rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['ruby_version'].gsub(/\./, '')[0,2]"`
+       if test "X$rubyversion" = "X"; then
+         rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[0,2]"`
+       fi
         RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
-       rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'`
+       rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LIBS']"`
        if test "X$rubylibs" != "X"; then
          RUBY_LIBS="$rubylibs"
        fi
-       librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
-       if test -f "$rubyhdrdir/$librubyarg"; then
-         librubyarg="$rubyhdrdir/$librubyarg"
-       else
-         rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
-         if test -f "$rubylibdir/$librubyarg"; then
-           librubyarg="$rubylibdir/$librubyarg"
-         elif test "$librubyarg" = "libruby.a"; then
-                   librubyarg="-lruby"
-         else
-           librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
-         fi
+       librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBYARG'])"`
+       librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBY_A'])"`
+       rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['libdir'])"`
+       if test -f "$rubylibdir/$librubya"; then
+         librubyarg="$librubyarg"
+         RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+       elif test "$librubyarg" = "libruby.a"; then
+                 librubyarg="-lruby"
+         RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
        fi
 
        if test "X$librubyarg" != "X"; then
          RUBY_LIBS="$librubyarg $RUBY_LIBS"
        fi
-       rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]'`
+       rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LDFLAGS']"`
        if test "X$rubyldflags" != "X"; then
                                  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
          if test "X$rubyldflags" != "X"; then
-           LDFLAGS="$rubyldflags $LDFLAGS"
+           if test "X`echo \"$LDFLAGS\" | grep -F -e \"$rubyldflags\"`" = "X"; then
+             LDFLAGS="$rubyldflags $LDFLAGS"
+           fi
          fi
        fi
        RUBY_SRC="if_ruby.c"
@@ -6209,6 +6777,13 @@ $as_echo "$rubyhdrdir" >&6; }
        RUBY_PRO="if_ruby.pro"
        $as_echo "#define FEAT_RUBY 1" >>confdefs.h
 
+       if test "$enable_rubyinterp" = "dynamic"; then
+         libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG['LIBRUBY_SO']"`
+         $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h
+
+         RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+         RUBY_LIBS=
+       fi
       else
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found; disabling Ruby" >&5
 $as_echo "not found; disabling Ruby" >&6; }
@@ -6218,6 +6793,10 @@ $as_echo "not found; disabling Ruby" >&6; }
 $as_echo "too old; need Ruby version 1.6.0 or later" >&6; }
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
+    as_fn_error "could not configure Ruby" "$LINENO" 5
+  fi
 fi
 
 
@@ -7422,7 +8001,11 @@ fi
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if X11 header files implicitly declare return values" >&5
 $as_echo_n "checking if X11 header files implicitly declare return values... " >&6; }
     cflags_save=$CFLAGS
-    CFLAGS="$CFLAGS $X_CFLAGS -Werror"
+        if test "$GCC" = yes; then
+      CFLAGS="$CFLAGS $X_CFLAGS -Werror"
+    else
+      CFLAGS="$CFLAGS $X_CFLAGS"
+    fi
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <X11/Xlib.h>
@@ -8078,9 +8661,9 @@ $as_echo "no" >&6; }
 
         GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for location of Motif GUI libs" >&5
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for location of Motif GUI libs" >&5
 $as_echo_n "checking for location of Motif GUI libs... " >&6; }
-    gui_libs="`echo $x_libraries|sed 's%/^/^/*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` `echo "$GUI_INC_LOC" | sed s/include/lib/` $GUI_LIB_LOC"
+    gui_libs="`echo $x_libraries|sed 's%/^/^/*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu `echo "$GUI_INC_LOC" | sed s/include/lib/` $GUI_LIB_LOC"
     GUI_LIB_LOC=
     for try in $gui_libs; do
       for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
@@ -8090,7 +8673,9 @@ $as_echo_n "checking for location of Motif GUI libs... " >&6; }
       done
     done
     if test -n "$GUI_LIB_LOC"; then
-            if test "$GUI_LIB_LOC" = /usr/lib; then
+            if test "$GUI_LIB_LOC" = /usr/lib \
+          -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
+          -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
        GUI_LIB_LOC=
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: in default path" >&5
 $as_echo "in default path" >&6; }
@@ -8528,8 +9113,13 @@ fi
 if test -z "$SKIP_MOTIF"; then
   cppflags_save=$CPPFLAGS
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-  for ac_header in Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
-                  Xm/UnhighlightT.h Xm/Notebook.h
+  if test "$zOSUnix" = "yes"; then
+       xmheader="Xm/Xm.h"
+  else
+       xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
+          Xm/UnhighlightT.h Xm/Notebook.h"
+  fi
+  for ac_header in $xmheader
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -8544,7 +9134,7 @@ fi
 done
 
 
-  if test $ac_cv_header_Xm_XpmP_h = yes; then
+  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmAttributes_21 in Xm/XpmP.h" >&5
 $as_echo_n "checking for XpmAttributes_21 in Xm/XpmP.h... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8616,6 +9206,27 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CYGWIN environment" >&5
+$as_echo_n "checking for CYGWIN environment... " >&6; }
+case `uname` in
+    CYGWIN*)    CYGWIN=yes; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CYGWIN clipboard support" >&5
+$as_echo_n "checking for CYGWIN clipboard support... " >&6; }
+                if test "x$with_x" = "xno" ; then
+                  OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                  $as_echo "#define FEAT_CYGWIN_WIN32_CLIPBOARD 1" >>confdefs.h
+
+                else
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - using X11" >&5
+$as_echo "no - using X11" >&6; }
+                fi ;;
+
+    *)          CYGWIN=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; };;
+esac
 
 if test "$enable_hangulinput" = "yes"; then
   if test "x$GUITYPE" = "xNONE"; then
@@ -9768,9 +10379,9 @@ rm -f core conftest.err conftest.$ac_objext \
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: empty: automatic terminal library selection" >&5
 $as_echo "empty: automatic terminal library selection" >&6; }
-              case "`uname -s 2>/dev/null`" in
-       OSF1|SCO_SV)    tlibs="ncurses curses termlib termcap";;
-       *)      tlibs="ncurses termlib termcap curses";;
+                case "`uname -s 2>/dev/null`" in
+       OSF1|SCO_SV)    tlibs="tinfo ncurses curses termlib termcap";;
+       *)      tlibs="tinfo ncurses termlib termcap curses";;
   esac
   for libname in $tlibs; do
     as_ac_Lib=`$as_echo "ac_cv_lib_${libname}''_tgetent" | $as_tr_sh`
@@ -10329,7 +10940,7 @@ if test "x$vim_cv_tty_group" != "xworld" ; then
 _ACEOF
 
   if test "x$vim_cv_tty_mode" = "x" ; then
-    as_fn_error "It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (propably 0620)" "$LINENO" 5
+    as_fn_error "It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (probably 0620)" "$LINENO" 5
   else
     $as_echo "#define PTYMODE 0620" >>confdefs.h
 
@@ -10462,7 +11073,7 @@ if test "x$vim_cv_getcwd_broken" = "xyes" ; then
 fi
 
 for ac_func in bcmp fchdir fchown fsync getcwd getpseudotty \
-       getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+       getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
        memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
        setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
        sigvec strcasecmp strerror strftime stricmp strncasecmp \
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get in -lsec" >&5
+$as_echo_n "checking for acl_get in -lsec... " >&6; }
+if test "${ac_cv_lib_sec_acl_get+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsec  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char acl_get ();
+int
+main ()
+{
+return acl_get ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_sec_acl_get=yes
+else
+  ac_cv_lib_sec_acl_get=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_acl_get" >&5
+$as_echo "$ac_cv_lib_sec_acl_get" >&6; }
+if test "x$ac_cv_lib_sec_acl_get" = x""yes; then :
+  LIBS="$LIBS -lsec"; $as_echo "#define HAVE_SOLARIS_ZFS_ACL 1" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
 $as_echo_n "checking for Solaris ACL support... " >&6; }
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -11186,6 +11837,8 @@ $as_echo "no" >&6; }
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
+fi
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AIX ACL support" >&5
 $as_echo_n "checking for AIX ACL support... " >&6; }
@@ -11461,7 +12114,7 @@ int
 main ()
 {
        struct sysinfo sinfo;
-       sinfo.mem_unit = 1;
+       sinfo.mem_unit = 1;
 
   ;
   return 0;
@@ -11642,7 +12295,8 @@ _ACEOF
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
 $as_echo_n "checking uint32_t is 32 bits... " >&6; }
 if test "$cross_compiling" = yes; then :
-  as_fn_error "could not compile program using uint32_t." "$LINENO" 5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check uint32_t when cross-compiling." >&5
+$as_echo "$as_me: WARNING: cannot check uint32_t when cross-compiling." >&2;}
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -11915,6 +12569,10 @@ $as_echo_n "checking how to create tags... " >&6; }
 test -f tags && mv tags tags.save
 if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
   TAGPRG="ctags -I INIT+ --fields=+S"
+elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+  TAGPRG="exctags -I INIT+ --fields=+S"
+elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+  TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
 else
   TAGPRG="ctags"
   (eval etags     /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
@@ -12326,6 +12984,10 @@ $as_echo "yes" >&6; }
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
   fi
+        if test "x$features" = "xtiny"; then
+    OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
+    OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
+  fi
 fi
 if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
   LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
@@ -12344,10 +13006,10 @@ $as_echo "yes" >&6; }
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
   fi
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
 $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
   if test "$gccmajor" -gt "3"; then
-    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
+    CFLAGS=`echo "$CFLAGS" | sed -e 's/ *-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
   else
@@ -12357,6 +13019,28 @@ $as_echo "no" >&6; }
 fi
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --as-needed support" >&5
+$as_echo_n "checking linker --as-needed support... " >&6; }
+LINK_AS_NEEDED=
+# Check if linker supports --as-needed and --no-as-needed options
+if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
+  LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
+  LINK_AS_NEEDED=yes
+fi
+if test "$LINK_AS_NEEDED" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# IBM z/OS reset CFLAGS for config.mk
+if test "$zOSUnix" = "yes"; then
+       CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
+fi
+
 ac_config_files="$ac_config_files auto/config.mk:config.mk.in"
 
 cat >confcache <<\_ACEOF
index 6ba89e6..ed98626 100644 (file)
@@ -1,3 +1,5 @@
 :: command to build big Vim with OLE, Perl, Python, Ruby and Tcl
-nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl512 DYNAMIC_PERL=yes PERL_VER=512 PYTHON=e:\python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=e:\python31 DYNAMIC_PYTHON3=yes PYTHON3_VER=31 RUBY=e:\ruby191 DYNAMIC_RUBY=yes RUBY_VER=191 RUBY_VER_LONG=1.9.1 TCL=e:\tcl DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes XPM=e:\xpm
+SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\"
+SET TOOLDIR=E:\
+%VCDIR%nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32 RUBY=%TOOLDIR%ruby192 DYNAMIC_RUBY=yes RUBY_VER=19 RUBY_VER_LONG=1.9.2 TCL=%TOOLDIR%tcl TCL_VER=85 TCL_VER_LONG=8.5 DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes
 
diff --git a/src/bigvim64.bat b/src/bigvim64.bat
new file mode 100644 (file)
index 0000000..6b58fa0
--- /dev/null
@@ -0,0 +1,7 @@
+:: command to build big Vim 64 bit with OLE, Perl, Python, Ruby and Tcl
+:: First run: %VCDIR%\vcvarsall.bat x86_amd64
+:: Ruby and Tcl are excluded, doesn't seem to work.
+SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\"
+SET TOOLDIR=E:\
+%VCDIR%\bin\nmake -f Make_mvc.mak CPU=AMD64 GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32  %1 IME=yes CSCOPE=yes
+
index ff84ccc..573a1da 100644 (file)
@@ -413,6 +413,7 @@ bf_key_init(password, salt, salt_len)
     int    salt_len;
 {
     int      i, j, keypos = 0;
+    unsigned u;
     UINT32_T val, data_l, data_r;
     char_u   *key;
     int      keylen;
@@ -432,8 +433,8 @@ bf_key_init(password, salt, salt_len)
     }
     for (i = 0; i < keylen; i++)
     {
-       sscanf((char *)&key[i * 2], "%2x", &j);
-       key[i] = j;
+       sscanf((char *)&key[i * 2], "%2x", &u);
+       key[i] = u;
     }
 
     mch_memmove(sbx, sbi, 4 * 4 * 256);
index 5e885b9..238af14 100644 (file)
@@ -57,13 +57,15 @@ static void clear_wininfo __ARGS((buf_T *buf));
 
 #if defined(FEAT_SIGNS)
 static void insert_sign __ARGS((buf_T *buf, signlist_T *prev, signlist_T *next, int id, linenr_T lnum, int typenr));
-static void buf_delete_signs __ARGS((buf_T *buf));
 #endif
 
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
 static char *msg_loclist = N_("[Location List]");
 static char *msg_qflist = N_("[Quickfix List]");
 #endif
+#ifdef FEAT_AUTOCMD
+static char *e_auabort = N_("E855: Autocommands caused command to abort");
+#endif
 
 /*
  * Open current buffer, that is: open the memfile and read the file into
@@ -80,6 +82,9 @@ open_buffer(read_stdin, eap, flags)
 #ifdef FEAT_AUTOCMD
     buf_T      *old_curbuf;
 #endif
+#ifdef FEAT_SYN_HL
+    long       old_tw = curbuf->b_p_tw;
+#endif
 
     /*
      * The 'readonly' flag is only set when BF_NEVERLOADED is being reset.
@@ -96,7 +101,7 @@ open_buffer(read_stdin, eap, flags)
         * There MUST be a memfile, otherwise we can't do anything
         * If we can't create one for the current buffer, take another buffer
         */
-       close_buffer(NULL, curbuf, 0);
+       close_buffer(NULL, curbuf, 0, FALSE);
        for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
            if (curbuf->b_ml.ml_mfp != NULL)
                break;
@@ -111,6 +116,10 @@ open_buffer(read_stdin, eap, flags)
        }
        EMSG(_("E83: Cannot allocate buffer, using other one..."));
        enter_buffer(curbuf);
+#ifdef FEAT_SYN_HL
+       if (old_tw != curbuf->b_p_tw)
+           check_colorcolumn(curwin);
+#endif
        return FAIL;
     }
 
@@ -316,12 +325,17 @@ buf_valid(buf)
  * get a new buffer very soon!
  *
  * The 'bufhidden' option can force freeing and deleting.
+ *
+ * When "abort_if_last" is TRUE then do not close the buffer if autocommands
+ * cause there to be only one window with this buffer.  e.g. when ":quit" is
+ * supposed to close the window but autocommands close all other windows.
  */
     void
-close_buffer(win, buf, action)
+close_buffer(win, buf, action, abort_if_last)
     win_T      *win;           /* if not NULL, set b_last_cursor */
     buf_T      *buf;
     int                action;
+    int                abort_if_last UNUSED;
 {
 #ifdef FEAT_AUTOCMD
     int                is_curbuf;
@@ -369,19 +383,35 @@ close_buffer(win, buf, action)
     /* When the buffer is no longer in a window, trigger BufWinLeave */
     if (buf->b_nwindows == 1)
     {
+       buf->b_closing = TRUE;
        apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
                                                                  FALSE, buf);
-       if (!buf_valid(buf))        /* autocommands may delete the buffer */
+       if (!buf_valid(buf))
+       {
+           /* Autocommands deleted the buffer. */
+aucmd_abort:
+           EMSG(_(e_auabort));
            return;
+       }
+       buf->b_closing = FALSE;
+       if (abort_if_last && one_window())
+           /* Autocommands made this the only window. */
+           goto aucmd_abort;
 
        /* When the buffer becomes hidden, but is not unloaded, trigger
         * BufHidden */
        if (!unload_buf)
        {
+           buf->b_closing = TRUE;
            apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
                                                                  FALSE, buf);
-           if (!buf_valid(buf))        /* autocmds may delete the buffer */
-               return;
+           if (!buf_valid(buf))
+               /* Autocommands deleted the buffer. */
+               goto aucmd_abort;
+           buf->b_closing = FALSE;
+           if (abort_if_last && one_window())
+               /* Autocommands made this the only window. */
+               goto aucmd_abort;
        }
 # ifdef FEAT_EVAL
        if (aborting())     /* autocmds may abort script processing */
@@ -416,6 +446,14 @@ close_buffer(win, buf, action)
 #endif
 
     buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
+    if (
+#ifdef FEAT_WINDOWS
+       win_valid(win) &&
+#else
+       win != NULL &&
+#endif
+                         win->w_buffer == buf)
+       win->w_buffer = NULL;  /* make sure we don't use the buffer now */
 
 #ifdef FEAT_AUTOCMD
     /* Autocommands may have deleted the buffer. */
@@ -527,6 +565,7 @@ buf_freeall(buf, flags)
 #ifdef FEAT_AUTOCMD
     int                is_curbuf = (buf == curbuf);
 
+    buf->b_closing = TRUE;
     apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf);
     if (!buf_valid(buf))           /* autocommands may delete the buffer */
        return;
@@ -543,6 +582,7 @@ buf_freeall(buf, flags)
        if (!buf_valid(buf))        /* autocommands may delete the buffer */
            return;
     }
+    buf->b_closing = FALSE;
 # ifdef FEAT_EVAL
     if (aborting())        /* autocmds may abort script processing */
        return;
@@ -560,6 +600,11 @@ buf_freeall(buf, flags)
 #ifdef FEAT_DIFF
     diff_buf_delete(buf);          /* Can't use 'diff' for unloaded buffer. */
 #endif
+#ifdef FEAT_SYN_HL
+    /* Remove any ownsyntax, unless exiting. */
+    if (firstwin != NULL && curwin->w_buffer == buf)
+       reset_synblock(curwin);
+#endif
 
 #ifdef FEAT_FOLDING
     /* No folds in an empty buffer. */
@@ -603,6 +648,9 @@ free_buffer(buf)
     buf_T      *buf;
 {
     free_buffer_stuff(buf, TRUE);
+#ifdef FEAT_EVAL
+    unref_var_dict(buf->b_vars);
+#endif
 #ifdef FEAT_LUA
     lua_buffer_free(buf);
 #endif
@@ -639,10 +687,13 @@ free_buffer_stuff(buf, free_options)
     {
        clear_wininfo(buf);             /* including window-local options */
        free_buf_options(buf, TRUE);
+#ifdef FEAT_SPELL
+       ga_clear(&buf->b_s.b_langp);
+#endif
     }
 #ifdef FEAT_EVAL
-    vars_clear(&buf->b_vars.dv_hashtab); /* free all internal variables */
-    hash_init(&buf->b_vars.dv_hashtab);
+    vars_clear(&buf->b_vars->dv_hashtab); /* free all internal variables */
+    hash_init(&buf->b_vars->dv_hashtab);
 #endif
 #ifdef FEAT_USR_CMDS
     uc_clear(&buf->b_ucmds);           /* clear local user commands */
@@ -661,9 +712,6 @@ free_buffer_stuff(buf, free_options)
     vim_free(buf->b_start_fenc);
     buf->b_start_fenc = NULL;
 #endif
-#ifdef FEAT_SPELL
-    ga_clear(&buf->b_s.b_langp);
-#endif
 }
 
 /*
@@ -748,6 +796,9 @@ handle_swap_exists(old_curbuf)
 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
     cleanup_T  cs;
 # endif
+#ifdef FEAT_SYN_HL
+    long       old_tw = curbuf->b_p_tw;
+#endif
 
     if (swap_exists_action == SEA_QUIT)
     {
@@ -762,11 +813,17 @@ handle_swap_exists(old_curbuf)
         * open a new, empty buffer. */
        swap_exists_action = SEA_NONE;  /* don't want it again */
        swap_exists_did_quit = TRUE;
-       close_buffer(curwin, curbuf, DOBUF_UNLOAD);
+       close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE);
        if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
            old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
        if (old_curbuf != NULL)
+       {
            enter_buffer(old_curbuf);
+#ifdef FEAT_SYN_HL
+           if (old_tw != curbuf->b_p_tw)
+               check_colorcolumn(curwin);
+#endif
+       }
        /* If "old_curbuf" is NULL we are in big trouble here... */
 
 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
@@ -874,7 +931,8 @@ do_bufdel(command, arg, addr_count, start_bnr, end_bnr, forceit)
                if (!VIM_ISDIGIT(*arg))
                {
                    p = skiptowhite_esc(arg);
-                   bnr = buflist_findpat(arg, p, command == DOBUF_WIPE, FALSE);
+                   bnr = buflist_findpat(arg, p, command == DOBUF_WIPE,
+                                                               FALSE, FALSE);
                    if (bnr < 0)            /* failed */
                        break;
                    arg = p;
@@ -926,6 +984,10 @@ do_bufdel(command, arg, addr_count, start_bnr, end_bnr, forceit)
 
     return errormsg;
 }
+#endif /* FEAT_LISTCMDS */
+
+#if defined(FEAT_LISTCMDS) || defined(FEAT_PYTHON) \
+       || defined(FEAT_PYTHON3) || defined(PROTO)
 
 /*
  * Implementation of the commands for the buffer list.
@@ -1109,7 +1171,7 @@ do_buffer(action, start, dir, count, forceit)
             * if the buffer still exists.
             */
            if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
-               close_buffer(NULL, buf, action);
+               close_buffer(NULL, buf, action, FALSE);
            return retval;
        }
 
@@ -1120,6 +1182,9 @@ do_buffer(action, start, dir, count, forceit)
         * a window with this buffer.
         */
        while (buf == curbuf
+# ifdef FEAT_AUTOCMD
+                  && !(curwin->w_closing || curwin->w_buffer->b_closing)
+# endif
                   && (firstwin != lastwin || first_tabpage->tp_next != NULL))
            win_close(curwin, FALSE);
 #endif
@@ -1133,7 +1198,7 @@ do_buffer(action, start, dir, count, forceit)
            close_windows(buf, FALSE);
 #endif
            if (buf != curbuf && buf_valid(buf) && buf->b_nwindows <= 0)
-               close_buffer(NULL, buf, action);
+               close_buffer(NULL, buf, action, FALSE);
            return OK;
        }
 
@@ -1288,9 +1353,12 @@ do_buffer(action, start, dir, count, forceit)
     /* Go to the other buffer. */
     set_curbuf(buf, action);
 
-#if defined(FEAT_LISTCMDS) && defined(FEAT_SCROLLBIND)
+#if defined(FEAT_LISTCMDS) \
+       && (defined(FEAT_SCROLLBIND) || defined(FEAT_CURSORBIND))
     if (action == DOBUF_SPLIT)
-       curwin->w_p_scb = FALSE;        /* reset 'scrollbind' */
+    {
+       RESET_BINDING(curwin);  /* reset 'scrollbind' and 'cursorbind' */
+    }
 #endif
 
 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
@@ -1300,8 +1368,7 @@ do_buffer(action, start, dir, count, forceit)
 
     return OK;
 }
-
-#endif /* FEAT_LISTCMDS */
+#endif
 
 /*
  * Set current buffer to "buf".  Executes autocommands and closes current
@@ -1320,6 +1387,9 @@ set_curbuf(buf, action)
     buf_T      *prevbuf;
     int                unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
                                                     || action == DOBUF_WIPE);
+#ifdef FEAT_SYN_HL
+    long       old_tw = curbuf->b_p_tw;
+#endif
 
     setpcmark();
     if (!cmdmod.keepalt)
@@ -1343,6 +1413,10 @@ set_curbuf(buf, action)
 # endif
 #endif
     {
+#ifdef FEAT_SYN_HL
+       if (prevbuf == curwin->w_buffer)
+           reset_synblock(curwin);
+#endif
 #ifdef FEAT_WINDOWS
        if (unload)
            close_windows(prevbuf, FALSE);
@@ -1353,29 +1427,48 @@ set_curbuf(buf, action)
        if (buf_valid(prevbuf))
 #endif
        {
+#ifdef FEAT_WINDOWS
+           win_T  *previouswin = curwin;
+#endif
            if (prevbuf == curbuf)
                u_sync(FALSE);
            close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
                    unload ? action : (action == DOBUF_GOTO
                        && !P_HID(prevbuf)
-                       && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0);
+                       && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
+#ifdef FEAT_WINDOWS
+           if (curwin != previouswin && win_valid(previouswin))
+             /* autocommands changed curwin, Grr! */
+             curwin = previouswin;
+#endif
        }
     }
 #ifdef FEAT_AUTOCMD
     /* An autocommand may have deleted "buf", already entered it (e.g., when
-     * it did ":bunload") or aborted the script processing! */
+     * it did ":bunload") or aborted the script processing!
+     * If curwin->w_buffer is null, enter_buffer() will make it valid again */
+    if ((buf_valid(buf) && buf != curbuf
 # ifdef FEAT_EVAL
-    if (buf_valid(buf) && buf != curbuf && !aborting())
-# else
-    if (buf_valid(buf) && buf != curbuf)
+           && !aborting()
+# endif
+# ifdef FEAT_WINDOWS
+        ) || curwin->w_buffer == NULL
 # endif
+       )
 #endif
+    {
        enter_buffer(buf);
+#ifdef FEAT_SYN_HL
+       if (old_tw != curbuf->b_p_tw)
+           check_colorcolumn(curwin);
+#endif
+    }
 }
 
 /*
  * Enter a new current buffer.
- * Old curbuf must have been abandoned already!
+ * Old curbuf must have been abandoned already!  This also means "curbuf" may
+ * be pointing to freed memory.
  */
     void
 enter_buffer(buf)
@@ -1392,10 +1485,6 @@ enter_buffer(buf)
     foldUpdateAll(curwin);     /* update folds (later). */
 #endif
 
-#ifdef FEAT_SYN_HL
-    reset_synblock(curwin);
-    curwin->w_s = &(buf->b_s);
-#endif
     /* Get the buffer in the current window. */
     curwin->w_buffer = buf;
     curbuf = buf;
@@ -1406,6 +1495,10 @@ enter_buffer(buf)
        diff_buf_add(curbuf);
 #endif
 
+#ifdef FEAT_SYN_HL
+    curwin->w_s = &(buf->b_s);
+#endif
+
     /* Cursor on first line by default. */
     curwin->w_cursor.lnum = 1;
     curwin->w_cursor.col = 0;
@@ -1607,6 +1700,17 @@ buflist_new(ffname, sfname, lnum, flags)
            vim_free(ffname);
            return NULL;
        }
+#ifdef FEAT_EVAL
+       /* init b: variables */
+       buf->b_vars = dict_alloc();
+       if (buf->b_vars == NULL)
+       {
+           vim_free(ffname);
+           vim_free(buf);
+           return NULL;
+       }
+       init_var_dict(buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
+#endif
     }
 
     if (ffname != NULL)
@@ -1642,6 +1746,11 @@ buflist_new(ffname, sfname, lnum, flags)
 #endif
        /* buf->b_nwindows = 0; why was this here? */
        free_buffer_stuff(buf, FALSE);  /* delete local variables et al. */
+
+       /* Init the options. */
+       buf->b_p_initialized = FALSE;
+       buf_copy_options(buf, BCO_ENTER);
+
 #ifdef FEAT_KEYMAP
        /* need to reload lmaps and set b:keymap_name */
        curbuf->b_kmap_state |= KEYMAP_INIT;
@@ -1686,9 +1795,6 @@ buflist_new(ffname, sfname, lnum, flags)
     buf->b_wininfo->wi_fpos.lnum = lnum;
     buf->b_wininfo->wi_win = curwin;
 
-#ifdef FEAT_EVAL
-    init_var_dict(&buf->b_vars, &buf->b_bufvar);    /* init b: variables */
-#endif
 #ifdef FEAT_SYN_HL
     hash_init(&buf->b_s.b_keywtab);
     hash_init(&buf->b_s.b_keywtab_ic);
@@ -1795,7 +1901,7 @@ free_buf_options(buf, free_p_ff)
 #ifdef FEAT_SPELL
     clear_string_option(&buf->b_s.b_p_spc);
     clear_string_option(&buf->b_s.b_p_spf);
-    vim_free(buf->b_s.b_cap_prog);
+    vim_regfree(buf->b_s.b_cap_prog);
     buf->b_s.b_cap_prog = NULL;
     clear_string_option(&buf->b_s.b_p_spl);
 #endif
@@ -1805,9 +1911,6 @@ free_buf_options(buf, free_p_ff)
 #ifdef FEAT_AUTOCMD
     clear_string_option(&buf->b_p_ft);
 #endif
-#ifdef FEAT_OSFILETYPE
-    clear_string_option(&buf->b_p_oft);
-#endif
 #ifdef FEAT_CINDENT
     clear_string_option(&buf->b_p_cink);
     clear_string_option(&buf->b_p_cino);
@@ -1905,7 +2008,7 @@ buflist_getfile(n, lnum, options, forceit)
         * "buf" if one exists */
        if (swb_flags & SWB_USEOPEN)
            wp = buf_jump_open_win(buf);
-       /* If 'switchbuf' contians "usetab": jump to first window in any tab
+       /* If 'switchbuf' contains "usetab": jump to first window in any tab
         * page containing "buf" if one exists */
        if (wp == NULL && (swb_flags & SWB_USETAB))
            wp = buf_jump_open_tab(buf);
@@ -1917,9 +2020,7 @@ buflist_getfile(n, lnum, options, forceit)
                tabpage_new();
            else if (win_split(0, 0) == FAIL)   /* Open in a new window */
                return FAIL;
-# ifdef FEAT_SCROLLBIND
-           curwin->w_p_scb = FALSE;
-# endif
+           RESET_BINDING(curwin);
        }
     }
 #endif
@@ -2042,18 +2143,20 @@ buflist_findname_stat(ffname, stp)
     return NULL;
 }
 
-#if defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL) || defined(PROTO)
+#if defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL) \
+       || defined(PROTO)
 /*
  * Find file in buffer list by a regexp pattern.
  * Return fnum of the found buffer.
  * Return < 0 for error.
  */
     int
-buflist_findpat(pattern, pattern_end, unlisted, diffmode)
+buflist_findpat(pattern, pattern_end, unlisted, diffmode, curtab_only)
     char_u     *pattern;
     char_u     *pattern_end;   /* pointer to first char after pattern */
     int                unlisted;       /* find unlisted buffers */
     int                diffmode UNUSED; /* find diff-mode buffers only */
+    int                curtab_only;    /* find buffers in current tab only */
 {
     buf_T      *buf;
     regprog_T  *prog;
@@ -2121,6 +2224,23 @@ buflist_findpat(pattern, pattern_end, unlisted, diffmode)
 #endif
                            && buflist_match(prog, buf) != NULL)
                    {
+                       if (curtab_only)
+                       {
+                           /* Ignore the match if the buffer is not open in
+                            * the current tab. */
+#ifdef FEAT_WINDOWS
+                           win_T       *wp;
+
+                           for (wp = firstwin; wp != NULL; wp = wp->w_next)
+                               if (wp->w_buffer == buf)
+                                   break;
+                           if (wp == NULL)
+                               continue;
+#else
+                           if (curwin->w_buffer != buf)
+                               continue;
+#endif
+                       }
                        if (match >= 0)         /* already found a match */
                        {
                            match = -2;
@@ -2129,7 +2249,7 @@ buflist_findpat(pattern, pattern_end, unlisted, diffmode)
                        match = buf->b_fnum;    /* remember first match */
                    }
 
-               vim_free(prog);
+               vim_regfree(prog);
                if (match >= 0)                 /* found one match */
                    break;
            }
@@ -2238,14 +2358,14 @@ ExpandBufnames(pat, num_file, file, options)
                *file = (char_u **)alloc((unsigned)(count * sizeof(char_u *)));
                if (*file == NULL)
                {
-                   vim_free(prog);
+                   vim_regfree(prog);
                    if (patc != pat)
                        vim_free(patc);
                    return FAIL;
                }
            }
        }
-       vim_free(prog);
+       vim_regfree(prog);
        if (count)              /* match(es) found, break here */
            break;
     }
@@ -2294,12 +2414,7 @@ fname_match(prog, name)
     if (name != NULL)
     {
        regmatch.regprog = prog;
-#ifdef CASE_INSENSITIVE_FILENAME
-       regmatch.rm_ic = TRUE;          /* Always ignore case */
-#else
-       regmatch.rm_ic = FALSE;         /* Never ignore case */
-#endif
-
+       regmatch.rm_ic = p_fic; /* ignore case when 'fileignorecase' is set */
        if (vim_regexec(&regmatch, name, (colnr_T)0))
            match = name;
        else
@@ -2526,6 +2641,9 @@ get_winopts(buf)
     if (p_fdls >= 0)
        curwin->w_p_fdl = p_fdls;
 #endif
+#ifdef FEAT_SYN_HL
+    check_colorcolumn(curwin);
+#endif
 }
 
 /*
@@ -2576,7 +2694,7 @@ buflist_list(eap)
            continue;
        msg_putchar('\n');
        if (buf_spname(buf) != NULL)
-           STRCPY(NameBuff, buf_spname(buf));
+           vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
        else
            home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
 
@@ -2690,7 +2808,8 @@ setfname(buf, ffname, sfname, message)
                vim_free(ffname);
                return FAIL;
            }
-           close_buffer(NULL, obuf, DOBUF_WIPE); /* delete from the list */
+           /* delete from the list */
+           close_buffer(NULL, obuf, DOBUF_WIPE, FALSE);
        }
        sfname = vim_strsave(sfname);
        if (ffname == NULL || sfname == NULL)
@@ -2998,7 +3117,7 @@ fileinfo(fullname, shorthelp, dont_truncate)
 
     *p++ = '"';
     if (buf_spname(curbuf) != NULL)
-       STRCPY(p, buf_spname(curbuf));
+       vim_strncpy(p, buf_spname(curbuf), IOSIZE - (p - buffer) - 1);
     else
     {
        if (!fullname && curbuf->b_fname != NULL)
@@ -3023,7 +3142,7 @@ fileinfo(fullname, shorthelp, dont_truncate)
 #endif
                                        ? _("[New file]") : "",
            (curbuf->b_flags & BF_READERR) ? _("[Read errors]") : "",
-           curbuf->b_p_ro ? (shortmess(SHM_RO) ? "[RO]"
+           curbuf->b_p_ro ? (shortmess(SHM_RO) ? _("[RO]")
                                                      : _("[readonly]")) : "",
            (curbufIsChanged() || (curbuf->b_flags & BF_WRITE_MASK)
                                                          || curbuf->b_p_ro) ?
@@ -3174,12 +3293,15 @@ maketitle()
        {
            /* format: "fname + (path) (1 of 2) - VIM" */
 
+#define SPACE_FOR_FNAME (IOSIZE - 100)
+#define SPACE_FOR_DIR   (IOSIZE - 20)
+#define SPACE_FOR_ARGNR (IOSIZE - 10)  /* at least room for " - VIM" */
            if (curbuf->b_fname == NULL)
-               STRCPY(buf, _("[No Name]"));
+               vim_strncpy(buf, (char_u *)_("[No Name]"), SPACE_FOR_FNAME);
            else
            {
                p = transstr(gettail(curbuf->b_fname));
-               vim_strncpy(buf, p, IOSIZE - 100);
+               vim_strncpy(buf, p, SPACE_FOR_FNAME);
                vim_free(p);
            }
 
@@ -3203,7 +3325,7 @@ maketitle()
                buf[off++] = ' ';
                buf[off++] = '(';
                home_replace(curbuf, curbuf->b_ffname,
-                                              buf + off, IOSIZE - off, TRUE);
+                                       buf + off, SPACE_FOR_DIR - off, TRUE);
 #ifdef BACKSLASH_IN_FILENAME
                /* avoid "c:/name" to be reduced to "c" */
                if (isalpha(buf[off]) && buf[off + 1] == ':')
@@ -3214,24 +3336,34 @@ maketitle()
                if (p == buf + off)
                    /* must be a help buffer */
                    vim_strncpy(buf + off, (char_u *)_("help"),
-                                                 (size_t)(IOSIZE - off - 1));
+                                          (size_t)(SPACE_FOR_DIR - off - 1));
                else
                    *p = NUL;
 
-               /* translate unprintable chars */
-               p = transstr(buf + off);
-               vim_strncpy(buf + off, p, (size_t)(IOSIZE - off - 1));
-               vim_free(p);
+               /* Translate unprintable chars and concatenate.  Keep some
+                * room for the server name.  When there is no room (very long
+                * file name) use (...). */
+               if (off < SPACE_FOR_DIR)
+               {
+                   p = transstr(buf + off);
+                   vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off));
+                   vim_free(p);
+               }
+               else
+               {
+                   vim_strncpy(buf + off, (char_u *)"...",
+                                            (size_t)(SPACE_FOR_ARGNR - off));
+               }
                STRCAT(buf, ")");
            }
 
-           append_arg_number(curwin, buf, IOSIZE, FALSE);
+           append_arg_number(curwin, buf, SPACE_FOR_ARGNR, FALSE);
 
 #if defined(FEAT_CLIENTSERVER)
            if (serverName != NULL)
            {
                STRCAT(buf, " - ");
-               STRCAT(buf, serverName);
+               vim_strcat(buf, serverName, IOSIZE);
            }
            else
 #endif
@@ -3240,9 +3372,8 @@ maketitle()
            if (maxlen > 0)
            {
                /* make it shorter by removing a bit in the middle */
-               len = vim_strsize(buf);
-               if (len > maxlen)
-                   trunc_string(buf, buf, maxlen);
+               if (vim_strsize(buf) > maxlen)
+                   trunc_string(buf, buf, maxlen, IOSIZE);
            }
        }
     }
@@ -3278,7 +3409,7 @@ maketitle()
        else
        {
            if (buf_spname(curbuf) != NULL)
-               i_name = (char_u *)buf_spname(curbuf);
+               i_name = buf_spname(curbuf);
            else                    /* use file name only in icon */
                i_name = gettail(curbuf->b_ffname);
            *i_str = NUL;
@@ -3363,7 +3494,8 @@ free_titles()
  * or truncated if too long, fillchar is used for all whitespace.
  */
     int
-build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, tabtab)
+build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar,
+                                                     maxwidth, hltab, tabtab)
     win_T      *wp;
     char_u     *out;           /* buffer to write into != NameBuff */
     size_t     outlen;         /* length of out[] */
@@ -3377,7 +3509,7 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t
     char_u     *p;
     char_u     *s;
     char_u     *t;
-    char_u     *linecont;
+    int                byteval;
 #ifdef FEAT_EVAL
     win_T      *o_curwin;
     buf_T      *o_curbuf;
@@ -3444,12 +3576,21 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t
        fillchar = '-';
 #endif
 
-    /*
-     * Get line & check if empty (cursorpos will show "0-1").
-     * If inversion is possible we use it. Else '=' characters are used.
-     */
-    linecont = ml_get_buf(wp->w_buffer, wp->w_cursor.lnum, FALSE);
-    empty_line = (*linecont == NUL);
+    /* Get line & check if empty (cursorpos will show "0-1").  Note that
+     * p will become invalid when getting another buffer line. */
+    p = ml_get_buf(wp->w_buffer, wp->w_cursor.lnum, FALSE);
+    empty_line = (*p == NUL);
+
+    /* Get the byte value now, in case we need it below. This is more
+     * efficient than making a copy of the line. */
+    if (wp->w_cursor.col > (colnr_T)STRLEN(p))
+       byteval = 0;
+    else
+#ifdef FEAT_MBYTE
+       byteval = (*mb_ptr2char)(p + wp->w_cursor.col);
+#else
+       byteval = p[wp->w_cursor.col];
+#endif
 
     groupdepth = 0;
     p = out;
@@ -3458,6 +3599,18 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t
     prevchar_isitem = FALSE;
     for (s = usefmt; *s; )
     {
+       if (curitem == STL_MAX_ITEM)
+       {
+           /* There are too many items.  Add the error code to the statusline
+            * to give the user a hint about what went wrong. */
+           if (p + 6 < out + outlen)
+           {
+               mch_memmove(p, " E541", (size_t)5);
+               p += 5;
+           }
+           break;
+       }
+
        if (*s != NUL && *s != '%')
            prevchar_isflag = prevchar_isitem = FALSE;
 
@@ -3473,6 +3626,8 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t
         * Handle one '%' item.
         */
        s++;
+       if (*s == NUL)  /* ignore trailing % */
+           break;
        if (*s == '%')
        {
            if (p + 1 >= out + outlen)
@@ -3679,7 +3834,7 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t
        case STL_FILENAME:
            fillable = FALSE;   /* don't change ' ' to fillchar */
            if (buf_spname(wp->w_buffer) != NULL)
-               STRCPY(NameBuff, buf_spname(wp->w_buffer));
+               vim_strncpy(NameBuff, buf_spname(wp->w_buffer), MAXPATHL - 1);
            else
            {
                t = (opt == STL_FULLPATH) ? wp->w_buffer->b_ffname
@@ -3813,16 +3968,7 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t
        case STL_BYTEVAL_X:
            base = 'X';
        case STL_BYTEVAL:
-           if (wp->w_cursor.col > (colnr_T)STRLEN(linecont))
-               num = 0;
-           else
-           {
-#ifdef FEAT_MBYTE
-               num = (*mb_ptr2char)(linecont + wp->w_cursor.col);
-#else
-               num = linecont[wp->w_cursor.col];
-#endif
-           }
+           num = byteval;
            if (num == NL)
                num = 0;
            else if (num == CAR && get_fileformat(wp->w_buffer) == EOL_MAC)
@@ -3833,7 +3979,7 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t
        case STL_ROFLAG_ALT:
            itemisflag = TRUE;
            if (wp->w_buffer->b_p_ro)
-               str = (char_u *)((opt == STL_ROFLAG_ALT) ? ",RO" : "[RO]");
+               str = (char_u *)((opt == STL_ROFLAG_ALT) ? ",RO" : _("[RO]"));
            break;
 
        case STL_HELPFLAG:
@@ -4355,7 +4501,12 @@ do_arg_all(count, forceit, keep_tabs)
 {
     int                i;
     win_T      *wp, *wpnext;
-    char_u     *opened;        /* array of flags for which args are open */
+    char_u     *opened;        /* Array of weight for which args are open:
+                                *  0: not opened
+                                *  1: opened in other tab
+                                *  2: opened in curtab
+                                *  3: opened in curtab and curwin
+                                */
     int                opened_len;     /* length of opened[] */
     int                use_firstwin = FALSE;   /* use first window for arglist */
     int                split_ret = OK;
@@ -4364,6 +4515,8 @@ do_arg_all(count, forceit, keep_tabs)
     buf_T      *buf;
     tabpage_T  *tpnext;
     int                had_tab = cmdmod.tab;
+    win_T      *old_curwin, *last_curwin;
+    tabpage_T  *old_curtab, *last_curtab;
     win_T      *new_curwin = NULL;
     tabpage_T  *new_curtab = NULL;
 
@@ -4380,6 +4533,15 @@ do_arg_all(count, forceit, keep_tabs)
     if (opened == NULL)
        return;
 
+    /* Autocommands may do anything to the argument list.  Make sure it's not
+     * freed while we are working here by "locking" it.  We still have to
+     * watch out for its size to be changed. */
+    alist = curwin->w_alist;
+    ++alist->al_refcount;
+
+    old_curwin = curwin;
+    old_curtab = curtab;
+
 #ifdef FEAT_GUI
     need_mouse_correct = TRUE;
 #endif
@@ -4392,7 +4554,7 @@ do_arg_all(count, forceit, keep_tabs)
      * When the ":tab" modifier was used do this for all tab pages.
      */
     if (had_tab > 0)
-       goto_tabpage_tp(first_tabpage);
+       goto_tabpage_tp(first_tabpage, TRUE, TRUE);
     for (;;)
     {
        tpnext = curtab->tp_next;
@@ -4401,36 +4563,51 @@ do_arg_all(count, forceit, keep_tabs)
            wpnext = wp->w_next;
            buf = wp->w_buffer;
            if (buf->b_ffname == NULL
-                   || buf->b_nwindows > 1
+                   || (!keep_tabs && buf->b_nwindows > 1)
 #ifdef FEAT_VERTSPLIT
                    || wp->w_width != Columns
 #endif
                    )
-               i = ARGCOUNT;
+               i = opened_len;
            else
            {
                /* check if the buffer in this window is in the arglist */
-               for (i = 0; i < ARGCOUNT; ++i)
+               for (i = 0; i < opened_len; ++i)
                {
-                   if (ARGLIST[i].ae_fnum == buf->b_fnum
-                           || fullpathcmp(alist_name(&ARGLIST[i]),
-                                             buf->b_ffname, TRUE) & FPC_SAME)
+                   if (i < alist->al_ga.ga_len
+                           && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum
+                               || fullpathcmp(alist_name(&AARGLIST(alist)[i]),
+                                             buf->b_ffname, TRUE) & FPC_SAME))
                    {
-                       if (i < opened_len)
+                       int weight = 1;
+
+                       if (old_curtab == curtab)
                        {
-                           opened[i] = TRUE;
+                           ++weight;
+                           if (old_curwin == wp)
+                               ++weight;
+                       }
+
+                       if (weight > (int)opened[i])
+                       {
+                           opened[i] = (char_u)weight;
                            if (i == 0)
                            {
+                               if (new_curwin != NULL)
+                                   new_curwin->w_arg_idx = opened_len;
                                new_curwin = wp;
                                new_curtab = curtab;
                            }
                        }
-                       if (wp->w_alist != curwin->w_alist)
+                       else if (keep_tabs)
+                           i = opened_len;
+
+                       if (wp->w_alist != alist)
                        {
                            /* Use the current argument list for all windows
                             * containing a file from it. */
                            alist_unlink(wp->w_alist);
-                           wp->w_alist = curwin->w_alist;
+                           wp->w_alist = alist;
                            ++wp->w_alist->al_refcount;
                        }
                        break;
@@ -4439,7 +4616,7 @@ do_arg_all(count, forceit, keep_tabs)
            }
            wp->w_arg_idx = i;
 
-           if (i == ARGCOUNT && !keep_tabs)    /* close this window */
+           if (i == opened_len && !keep_tabs)/* close this window */
            {
                if (P_HID(buf) || forceit || buf->b_nwindows > 1
                                                        || !bufIsChanged(buf))
@@ -4461,7 +4638,8 @@ do_arg_all(count, forceit, keep_tabs)
                    }
 #ifdef FEAT_WINDOWS
                    /* don't close last window */
-                   if (firstwin == lastwin && first_tabpage->tp_next == NULL)
+                   if (firstwin == lastwin
+                           && (first_tabpage->tp_next == NULL || !had_tab))
 #endif
                        use_firstwin = TRUE;
 #ifdef FEAT_WINDOWS
@@ -4488,27 +4666,23 @@ do_arg_all(count, forceit, keep_tabs)
        if (!valid_tabpage(tpnext))
            tpnext = first_tabpage;     /* start all over...*/
 # endif
-       goto_tabpage_tp(tpnext);
+       goto_tabpage_tp(tpnext, TRUE, TRUE);
     }
 
     /*
      * Open a window for files in the argument list that don't have one.
      * ARGCOUNT may change while doing this, because of autocommands.
      */
-    if (count > ARGCOUNT || count <= 0)
-       count = ARGCOUNT;
-
-    /* Autocommands may do anything to the argument list.  Make sure it's not
-     * freed while we are working here by "locking" it.  We still have to
-     * watch out for its size to be changed. */
-    alist = curwin->w_alist;
-    ++alist->al_refcount;
+    if (count > opened_len || count <= 0)
+       count = opened_len;
 
 #ifdef FEAT_AUTOCMD
     /* Don't execute Win/Buf Enter/Leave autocommands here. */
     ++autocmd_no_enter;
     ++autocmd_no_leave;
 #endif
+    last_curwin = curwin;
+    last_curtab = curtab;
     win_enter(lastwin, FALSE);
 #ifdef FEAT_WINDOWS
     /* ":drop all" should re-use an empty window to avoid "--remote-tab"
@@ -4518,11 +4692,11 @@ do_arg_all(count, forceit, keep_tabs)
        use_firstwin = TRUE;
 #endif
 
-    for (i = 0; i < count && i < alist->al_ga.ga_len && !got_int; ++i)
+    for (i = 0; i < count && i < opened_len && !got_int; ++i)
     {
        if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
            arg_had_last = TRUE;
-       if (i < opened_len && opened[i])
+       if (opened[i] > 0)
        {
            /* Move the already present window to below the current window */
            if (curwin->w_arg_idx != i)
@@ -4531,7 +4705,13 @@ do_arg_all(count, forceit, keep_tabs)
                {
                    if (wpnext->w_arg_idx == i)
                    {
-                       win_move_after(wpnext, curwin);
+                       if (keep_tabs)
+                       {
+                           new_curwin = wpnext;
+                           new_curtab = curtab;
+                       }
+                       else
+                           win_move_after(wpnext, curwin);
                        break;
                    }
                }
@@ -4586,9 +4766,17 @@ do_arg_all(count, forceit, keep_tabs)
 #ifdef FEAT_AUTOCMD
     --autocmd_no_enter;
 #endif
+    /* restore last referenced tabpage's curwin */
+    if (last_curtab != new_curtab)
+    {
+       if (valid_tabpage(last_curtab))
+           goto_tabpage_tp(last_curtab, TRUE, TRUE);
+       if (win_valid(last_curwin))
+           win_enter(last_curwin, FALSE);
+    }
     /* to window with first arg */
     if (valid_tabpage(new_curtab))
-       goto_tabpage_tp(new_curtab);
+       goto_tabpage_tp(new_curtab, TRUE, TRUE);
     if (win_valid(new_curwin))
        win_enter(new_curwin, FALSE);
 
@@ -4640,7 +4828,7 @@ ex_buffer_all(eap)
      */
 #ifdef FEAT_WINDOWS
     if (had_tab > 0)
-       goto_tabpage_tp(first_tabpage);
+       goto_tabpage_tp(first_tabpage, TRUE, TRUE);
     for (;;)
     {
 #endif
@@ -4658,7 +4846,11 @@ ex_buffer_all(eap)
 #ifdef FEAT_WINDOWS
                    || (had_tab > 0 && wp != firstwin)
 #endif
-                   ) && firstwin != lastwin)
+                   ) && firstwin != lastwin
+#ifdef FEAT_AUTOCMD
+                   && !(wp->w_closing || wp->w_buffer->b_closing)
+#endif
+                   )
            {
                win_close(wp, FALSE);
 #ifdef FEAT_AUTOCMD
@@ -4676,7 +4868,7 @@ ex_buffer_all(eap)
        /* Without the ":tab" modifier only do the current tab page. */
        if (had_tab == 0 || tpnext == NULL)
            break;
-       goto_tabpage_tp(tpnext);
+       goto_tabpage_tp(tpnext, TRUE, TRUE);
     }
 #endif
 
@@ -4904,7 +5096,8 @@ chk_modeline(lnum, flags)
            if ((prev != -1 && STRNCMP(s, "ex:", (size_t)3) == 0)
                    || STRNCMP(s, "vi:", (size_t)3) == 0)
                break;
-           if (STRNCMP(s, "vim", 3) == 0)
+           /* Accept both "vim" and "Vim". */
+           if ((s[0] == 'v' || s[0] == 'V') && s[1] == 'i' && s[2] == 'm')
            {
                if (s[3] == '<' || s[3] == '=' || s[3] == '>')
                    e = s + 4;
@@ -4912,6 +5105,8 @@ chk_modeline(lnum, flags)
                    e = s + 3;
                vers = getdigits(&e);
                if (*e == ':'
+                       && (s[0] != 'V'
+                                 || STRNCMP(skipwhite(e + 1), "set", 3) == 0)
                        && (s[3] == ':'
                            || (VIM_VERSION_100 >= vers && isdigit(s[3]))
                            || (VIM_VERSION_100 < vers && s[3] == '<')
@@ -5111,28 +5306,24 @@ write_viminfo_bufferlist(fp)
  * Return special buffer name.
  * Returns NULL when the buffer has a normal file name.
  */
-    char *
+    char_u *
 buf_spname(buf)
     buf_T      *buf;
 {
 #if defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)
     if (bt_quickfix(buf))
     {
-       win_T       *win = NULL;
+       win_T       *win;
        tabpage_T   *tp;
 
        /*
         * For location list window, w_llist_ref points to the location list.
         * For quickfix window, w_llist_ref is NULL.
         */
-       FOR_ALL_TAB_WINDOWS(tp, win)
-           if (win->w_buffer == buf)
-               goto win_found;
-win_found:
-       if (win != NULL && win->w_llist_ref != NULL)
-           return _(msg_loclist);
+       if (find_win_for_buf(buf, &win, &tp) == OK && win->w_llist_ref != NULL)
+           return (char_u *)_(msg_loclist);
        else
-           return _(msg_qflist);
+           return (char_u *)_(msg_qflist);
     }
 #endif
 #ifdef FEAT_QUICKFIX
@@ -5141,15 +5332,37 @@ win_found:
     if (bt_nofile(buf))
     {
        if (buf->b_sfname != NULL)
-           return (char *)buf->b_sfname;
-       return _("[Scratch]");
+           return buf->b_sfname;
+       return (char_u *)_("[Scratch]");
     }
 #endif
     if (buf->b_fname == NULL)
-       return _("[No Name]");
+       return (char_u *)_("[No Name]");
     return NULL;
 }
 
+#if (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)) \
+       || defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) \
+       || defined(PROTO)
+/*
+ * Find a window for buffer "buf".
+ * If found OK is returned and "wp" and "tp" are set to the window and tabpage.
+ * If not found FAIL is returned.
+ */
+    int
+find_win_for_buf(buf, wp, tp)
+    buf_T     *buf;
+    win_T     **wp;
+    tabpage_T **tp;
+{
+    FOR_ALL_TAB_WINDOWS(*tp, *wp)
+       if ((*wp)->w_buffer == buf)
+           goto win_found;
+    return FAIL;
+win_found:
+    return OK;
+}
+#endif
 
 #if defined(FEAT_SIGNS) || defined(PROTO)
 /*
@@ -5417,7 +5630,7 @@ buf_signcount(buf, lnum)
 /*
  * Delete signs in buffer "buf".
  */
-    static void
+    void
 buf_delete_signs(buf)
     buf_T      *buf;
 {
@@ -5465,7 +5678,7 @@ sign_list_placed(rbuf)
        buf = firstbuf;
     else
        buf = rbuf;
-    while (buf != NULL)
+    while (buf != NULL && !got_int)
     {
        if (buf->b_signlist != NULL)
        {
@@ -5473,7 +5686,7 @@ sign_list_placed(rbuf)
            MSG_PUTS_ATTR(lbuf, hl_attr(HLF_D));
            msg_putchar('\n');
        }
-       for (p = buf->b_signlist; p != NULL; p = p->next)
+       for (p = buf->b_signlist; p != NULL && !got_int; p = p->next)
        {
            vim_snprintf(lbuf, BUFSIZ, _("    line=%ld  id=%d  name=%s"),
                           (long)p->lnum, p->id, sign_typenr2name(p->typenr));
@@ -5606,7 +5819,7 @@ wipe_buffer(buf, aucmd)
     if (!aucmd)                    /* Don't trigger BufDelete autocommands here. */
        block_autocmds();
 #endif
-    close_buffer(NULL, buf, DOBUF_WIPE);
+    close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
 #ifdef FEAT_AUTOCMD
     if (!aucmd)
        unblock_autocmds();
index 21fb4e5..fd4b500 100644 (file)
@@ -284,7 +284,12 @@ buf_init_chartab(buf, global)
                }
                ++c;
            }
+
+           c = *p;
            p = skip_to_option_part(p);
+           if (c == ',' && *p == NUL)
+               /* Trailing comma is not allowed. */
+               return FAIL;
        }
     }
     chartab_initialized = TRUE;
@@ -463,41 +468,42 @@ str_foldcase(str, orglen, buf, buflen)
            if (enc_utf8)
            {
                int     c = utf_ptr2char(STR_PTR(i));
-               int     ol = utf_ptr2len(STR_PTR(i));
+               int     olen = utf_ptr2len(STR_PTR(i));
                int     lc = utf_tolower(c);
 
                /* Only replace the character when it is not an invalid
                 * sequence (ASCII character or more than one byte) and
                 * utf_tolower() doesn't return the original character. */
-               if ((c < 0x80 || ol > 1) && c != lc)
+               if ((c < 0x80 || olen > 1) && c != lc)
                {
-                   int     nl = utf_char2len(lc);
+                   int     nlen = utf_char2len(lc);
 
                    /* If the byte length changes need to shift the following
                     * characters forward or backward. */
-                   if (ol != nl)
+                   if (olen != nlen)
                    {
-                       if (nl > ol)
+                       if (nlen > olen)
                        {
-                           if (buf == NULL ? ga_grow(&ga, nl - ol + 1) == FAIL
-                                                   : len + nl - ol >= buflen)
+                           if (buf == NULL
+                                   ? ga_grow(&ga, nlen - olen + 1) == FAIL
+                                   : len + nlen - olen >= buflen)
                            {
                                /* out of memory, keep old char */
                                lc = c;
-                               nl = ol;
+                               nlen = olen;
                            }
                        }
-                       if (ol != nl)
+                       if (olen != nlen)
                        {
                            if (buf == NULL)
                            {
-                               STRMOVE(GA_PTR(i) + nl, GA_PTR(i) + ol);
-                               ga.ga_len += nl - ol;
+                               STRMOVE(GA_PTR(i) + nlen, GA_PTR(i) + olen);
+                               ga.ga_len += nlen - olen;
                            }
                            else
                            {
-                               STRMOVE(buf + i + nl, buf + i + ol);
-                               len += nl - ol;
+                               STRMOVE(buf + i + nlen, buf + i + olen);
+                               len += nlen - olen;
                            }
                        }
                    }
@@ -763,7 +769,7 @@ ptr2cells(p)
 }
 
 /*
- * Return the number of characters string "s" will take on the screen,
+ * Return the number of character cells string "s" will take on the screen,
  * counting TABs as two characters: "^I".
  */
     int
@@ -774,8 +780,8 @@ vim_strsize(s)
 }
 
 /*
- * Return the number of characters string "s[len]" will take on the screen,
- * counting TABs as two characters: "^I".
+ * Return the number of character cells string "s[len]" will take on the
+ * screen, counting TABs as two characters: "^I".
  */
     int
 vim_strnsize(s, len)
@@ -904,6 +910,14 @@ vim_isIDc(c)
 vim_iswordc(c)
     int c;
 {
+    return vim_iswordc_buf(c, curbuf);
+}
+
+    int
+vim_iswordc_buf(c, buf)
+    int                c;
+    buf_T      *buf;
+{
 #ifdef FEAT_MBYTE
     if (c >= 0x100)
     {
@@ -913,7 +927,7 @@ vim_iswordc(c)
            return utf_class(c) >= 2;
     }
 #endif
-    return (c > 0 && c < 0x100 && GET_CHARTAB(curbuf, c) != 0);
+    return (c > 0 && c < 0x100 && GET_CHARTAB(buf, c) != 0);
 }
 
 /*
@@ -930,19 +944,17 @@ vim_iswordp(p)
     return GET_CHARTAB(curbuf, *p) != 0;
 }
 
-#if defined(FEAT_SYN_HL) || defined(PROTO)
     int
-vim_iswordc_buf(p, buf)
+vim_iswordp_buf(p, buf)
     char_u     *p;
     buf_T      *buf;
 {
-# ifdef FEAT_MBYTE
+#ifdef FEAT_MBYTE
     if (has_mbyte && MB_BYTE2LEN(*p) > 1)
        return mb_get_class(p) >= 2;
-# endif
+#endif
     return (GET_CHARTAB(buf, *p) != 0);
 }
-#endif
 
 /*
  * return TRUE if 'c' is a valid file-name character
@@ -1601,10 +1613,9 @@ vim_isxdigit(c)
 #define LATIN1LOWER 'l'
 #define LATIN1UPPER 'U'
 
-/*                                                                 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]%_'abcdefghijklmnopqrstuvwxyz{|}~                                  Â¡Â¢Â£Â¤Â¥Â¦Â§Â¨Â©ÂªÂ«Â¬Â­Â®Â¯Â°Â±Â²Â³Â´ÂµÂ¶Â·Â¸Â¹ÂºÂ»Â¼Â½Â¾Â¿Ã€ÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ×ØÙÚÛÜÃÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ */
 static char_u latin1flags[257] = "                                                                 UUUUUUUUUUUUUUUUUUUUUUUUUU      llllllllllllllllllllllllll                                                                     UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll";
-static char_u latin1upper[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\7f\80\81\82\83\84\85\86\87\88\89\8a\8b\8c\8d\8e\8f\90\91\92\93\94\95\96\97\98\99\9a\9b\9c\9d\9e\9f ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ×ØÙÚÛÜÃÞßÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖ÷ØÙÚÛÜÃÞÿ";
-static char_u latin1lower[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\7f\80\81\82\83\84\85\86\87\88\89\8a\8b\8c\8d\8e\8f\90\91\92\93\94\95\96\97\98\99\9a\9b\9c\9d\9e\9f ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿àáâãäåæçèéêëìíîïðñòóôõö×øùúûüýþßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ";
+static char_u latin1upper[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xf7\xd8\xd9\xda\xdb\xdc\xdd\xde\xff";
+static char_u latin1lower[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xd7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
 
     int
 vim_islower(c)
@@ -1829,7 +1840,7 @@ vim_str2nr(start, hexp, len, dooct, dohex, nptr, unptr)
                        hex = 0;        /* can't be octal */
                        break;
                    }
-                   if (ptr[n] > '0')
+                   if (ptr[n] >= '0')
                        hex = '0';      /* assume octal */
                }
            }
index f6c7fa4..422fd1f 100644 (file)
 #undef HAVE_FSYNC
 #undef HAVE_GETCWD
 #undef HAVE_GETPSEUDOTTY
+#undef HAVE_GETPWENT
 #undef HAVE_GETPWNAM
 #undef HAVE_GETPWUID
 #undef HAVE_GETRLIMIT
 /* Define if dynamic python does not require RTLD_GLOBAL */
 #undef PY_NO_RTLD_GLOBAL
 
+/* Define if dynamic python3 does not require RTLD_GLOBAL */
+#undef PY3_NO_RTLD_GLOBAL
+
 /* Define if you want to include the Ruby interpreter. */
 #undef FEAT_RUBY
 
+/* Define for linking via dlopen() or LoadLibrary() */
+#undef DYNAMIC_RUBY
+
 /* Define if you want to include the Tcl interpreter. */
 #undef FEAT_TCL
 
 
 /* Define if you want to add support for ACL */
 #undef HAVE_POSIX_ACL
+#undef HAVE_SOLARIS_ZFS_ACL
 #undef HAVE_SOLARIS_ACL
 #undef HAVE_AIX_ACL
 
 
 /* Define if fcntl()'s F_SETFD command knows about FD_CLOEXEC */
 #undef HAVE_FD_CLOEXEC
+
+/* Define if you want Cygwin to use the WIN32 clipboard, not compatible with X11*/
+#undef FEAT_CYGWIN_WIN32_CLIPBOARD
index 7154114..3b08766 100644 (file)
@@ -30,6 +30,7 @@ TAGPRG                = @TAGPRG@
 CPP            = @CPP@
 CPP_MM         = @CPP_MM@
 DEPEND_CFLAGS_FILTER = @DEPEND_CFLAGS_FILTER@
+LINK_AS_NEEDED = @LINK_AS_NEEDED@
 X_CFLAGS       = @X_CFLAGS@
 X_LIBS_DIR     = @X_LIBS@
 X_PRE_LIBS     = @X_PRE_LIBS@
index 152313b..ed30bed 100644 (file)
@@ -28,6 +28,16 @@ dnl in autoconf needs it, where it uses STDC_HEADERS.
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
 
+dnl Check for the flag that fails if stuff are missing.
+
+AC_MSG_CHECKING(--enable-fail-if-missing argument)
+AC_ARG_ENABLE(fail_if_missing,
+       [  --enable-fail-if-missing    Fail if dependencies on additional features
+     specified on the command line are missing.], 
+       [fail_if_missing="yes"],
+       [fail_if_missing="no"])
+AC_MSG_RESULT($fail_if_missing)
+
 dnl Set default value for CFLAGS if none is defined or it's empty
 if test -z "$CFLAGS"; then
   CFLAGS="-O"
@@ -296,7 +306,7 @@ esac
 AC_SUBST(line_break)
 
 if test "$cf_cv_ebcdic" = "yes"; then
-dnl If we have EBCDIC we most likley have z/OS Unix, let's test it!
+dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
 AC_MSG_CHECKING(for z/OS Unix)
 case `uname` in
     OS/390)    zOSUnix="yes";
@@ -319,15 +329,18 @@ case `uname` in
                  echo ""
                  echo "------------------------------------------"
                  echo " On z/OS Unix, the environment variable"
-                 echo " __CC_${ccn}MODE must be set to \"1\"!"
+                 echo " _CC_${ccn}MODE must be set to \"1\"!"
                  echo " Do:"
                  echo "    export _CC_${ccn}MODE=1"
                  echo " and then call configure again."
                  echo "------------------------------------------"
                  exit 1
                fi
-               CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
-                LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
+               # Set CFLAGS for configure process.
+               # This will be reset later for config.mk.
+               # Use haltonmsg to force error for missing H files.
+               CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
+               LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
                AC_MSG_RESULT(yes)
                ;;
     *)         zOSUnix="no";
@@ -440,56 +453,161 @@ if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then
     fi
   fi
 
+  AC_MSG_CHECKING(--with-luajit)
+  AC_ARG_WITH(luajit,
+       [  --with-luajit           Link with LuaJIT instead of Lua.],
+       [vi_cv_with_luajit="$withval"],
+       [vi_cv_with_luajit="no"])
+  AC_MSG_RESULT($vi_cv_with_luajit)
+
   LUA_INC=
   if test "X$vi_cv_path_lua_pfx" != "X"; then
-    AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
-    if test -f $vi_cv_path_lua_pfx/include/lua.h; then
-      AC_MSG_RESULT(yes)
+    if test "x$vi_cv_with_luajit" != "xno"; then
+      dnl -- try to find LuaJIT executable
+      AC_PATH_PROG(vi_cv_path_luajit, luajit)
+      if test "X$vi_cv_path_luajit" != "X"; then
+       dnl -- find LuaJIT version
+       AC_CACHE_CHECK(LuaJIT version, vi_cv_version_luajit,
+       [ vi_cv_version_luajit=`${vi_cv_path_luajit} -v | sed 's/LuaJIT \([[0-9.]]*\)\.[[0-9]] .*/\1/'` ])
+       AC_CACHE_CHECK(Lua version of LuaJIT, vi_cv_version_lua_luajit,
+       [ vi_cv_version_lua_luajit=`${vi_cv_path_luajit} -e "print(_VERSION)" | sed 's/.* //'` ])
+       vi_cv_path_lua="$vi_cv_path_luajit"
+       vi_cv_version_lua="$vi_cv_version_lua_luajit"
+      fi
     else
-      AC_MSG_RESULT(no)
       dnl -- try to find Lua executable
-      AC_PATH_PROG(vi_cv_path_lua, lua)
-      if test "X$vi_cv_path_lua" != "X"; then
-        dnl -- find Lua version
-        AC_CACHE_CHECK(Lua version, vi_cv_version_lua,
-        [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
-        AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
-        if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
-          AC_MSG_RESULT(yes)
-          LUA_INC=/lua$vi_cv_version_lua
-        else
-          AC_MSG_RESULT(no)
-          vi_cv_path_lua_pfx=
-        fi
+      AC_PATH_PROG(vi_cv_path_plain_lua, lua)
+      if test "X$vi_cv_path_plain_lua" != "X"; then
+       dnl -- find Lua version
+       AC_CACHE_CHECK(Lua version, vi_cv_version_plain_lua,
+       [ vi_cv_version_plain_lua=`${vi_cv_path_plain_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
+      fi
+      vi_cv_path_lua="$vi_cv_path_plain_lua"
+      vi_cv_version_lua="$vi_cv_version_plain_lua"
+    fi
+    if test "x$vi_cv_with_luajit" != "xno" && test "X$vi_cv_version_luajit" != "X"; then
+      AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit)
+      if test -f $vi_cv_path_lua_pfx/include/luajit-$vi_cv_version_luajit/lua.h; then
+       AC_MSG_RESULT(yes)
+       LUA_INC=/luajit-$vi_cv_version_luajit
+      fi
+    fi
+    if test "X$LUA_INC" = "X"; then
+      AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
+      if test -f $vi_cv_path_lua_pfx/include/lua.h; then
+       AC_MSG_RESULT(yes)
+      else
+       AC_MSG_RESULT(no)
+       AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
+       if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
+         AC_MSG_RESULT(yes)
+         LUA_INC=/lua$vi_cv_version_lua
+       else
+         AC_MSG_RESULT(no)
+         vi_cv_path_lua_pfx=
+       fi
       fi
     fi
   fi
 
   if test "X$vi_cv_path_lua_pfx" != "X"; then
-    if test "X$vi_cv_version_lua" != "X"; then
-      dnl Test alternate location using version
-      LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
+    if test "x$vi_cv_with_luajit" != "xno"; then
+      multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
+      if test "X$multiarch" != "X"; then
+       lib_multiarch="lib/${multiarch}"
+      else
+       lib_multiarch="lib"
+      fi
+      if test "X$vi_cv_version_lua" = "X"; then
+       LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit"
+      else
+       LUA_LIBS="-L${vi_cv_path_lua_pfx}/${lib_multiarch} -lluajit-$vi_cv_version_lua"
+      fi
     else
-      LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
+      if test "X$LUA_INC" != "X"; then
+       dnl Test alternate location using version
+       LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
+      else
+       LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
+      fi
     fi
-    LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
-    LUA_SRC="if_lua.c"
-    LUA_OBJ="objects/if_lua.o"
-    LUA_PRO="if_lua.pro"
-    AC_DEFINE(FEAT_LUA)
     if test "$enable_luainterp" = "dynamic"; then
-      dnl Determine the SONAME for the current version, but fallback to
-      dnl liblua${vi_cv_version_lua}.so if no SONAME-versioned file is found.
-      for i in 0 1 2 3 4 5 6 7 8 9; do
-       if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
-         LUA_SONAME=".$i"
-         break
+      lua_ok="yes"
+    else
+      AC_MSG_CHECKING([if link with ${LUA_LIBS} is sane])
+      libs_save=$LIBS
+      LIBS="$LIBS $LUA_LIBS"
+      AC_TRY_LINK(,[ ],
+       AC_MSG_RESULT(yes); lua_ok="yes",
+       AC_MSG_RESULT(no); lua_ok="no"; LUA_LIBS="")
+      LIBS=$libs_save
+    fi
+    if test "x$lua_ok" = "xyes"; then
+      LUA_CFLAGS="-I${vi_cv_path_lua_pfx}/include${LUA_INC}"
+      LUA_SRC="if_lua.c"
+      LUA_OBJ="objects/if_lua.o"
+      LUA_PRO="if_lua.pro"
+      AC_DEFINE(FEAT_LUA)
+    fi
+    if test "$enable_luainterp" = "dynamic"; then
+      if test "x$vi_cv_with_luajit" != "xno"; then
+       luajit="jit"
+      fi
+      if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
+       vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
+      else
+       if test "x$MACOSX" = "xyes"; then
+         ext="dylib"
+         indexes=""
+       else
+         ext="so"
+         indexes=".0 .1 .2 .3 .4 .5 .6 .7 .8 .9"
+         multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
+         if test "X$multiarch" != "X"; then
+           lib_multiarch="lib/${multiarch}"
+         fi
        fi
-      done
+       dnl Determine the sover for the current version, but fallback to
+       dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
+       AC_MSG_CHECKING(if liblua${luajit}*.${ext}* can be found in $vi_cv_path_lua_pfx)
+       for subdir in "${lib_multiarch}" lib64 lib; do
+         if test -z "$subdir"; then
+           continue
+         fi
+         for sover in "${vi_cv_version_lua}.${ext}" "-${vi_cv_version_lua}.${ext}" \
+           ".${vi_cv_version_lua}.${ext}" ".${ext}.${vi_cv_version_lua}"; do
+           for i in $indexes ""; do
+             if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${luajit}${sover}$i"; then
+               sover2="$i"
+               break 3
+             fi
+           done
+         done
+         sover=""
+       done
+       if test "X$sover" = "X"; then
+         AC_MSG_RESULT(no)
+         lua_ok="no"
+         vi_cv_dll_name_lua="liblua${luajit}.${ext}"
+       else
+         AC_MSG_RESULT(yes)
+         lua_ok="yes"
+         vi_cv_dll_name_lua="liblua${luajit}${sover}$sover2"
+       fi
+      fi
       AC_DEFINE(DYNAMIC_LUA)
       LUA_LIBS=""
-      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
+      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
     fi
+    if test "X$LUA_CFLAGS$LUA_LIBS" != "X" && \
+       test "x$MACOSX" = "xyes" && test "x$vi_cv_with_luajit" != "xno" && \
+       test "`(uname -m) 2>/dev/null`" = "x86_64"; then
+      dnl OSX/x64 requires these flags. See http://luajit.org/install.html
+      LUA_LIBS="-pagezero_size 10000 -image_base 100000000 $LUA_LIBS"
+    fi
+  fi
+  if test "$fail_if_missing" = "yes" -a "$lua_ok" != "yes"; then
+    AC_MSG_ERROR([could not configure lua])
   fi
   AC_SUBST(LUA_SRC)
   AC_SUBST(LUA_OBJ)
@@ -568,13 +686,27 @@ if test "$enable_mzschemeinterp" = "yes"; then
        SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
       else
        AC_MSG_RESULT(no)
-       AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
-       if test -f /usr/include/plt/scheme.h; then
+       AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
+       if test -f $vi_cv_path_mzscheme_pfx/include/racket/scheme.h; then
          AC_MSG_RESULT(yes)
-         SCHEME_INC=/usr/include/plt
+         SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
        else
          AC_MSG_RESULT(no)
-         vi_cv_path_mzscheme_pfx=
+         AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
+         if test -f /usr/include/plt/scheme.h; then
+           AC_MSG_RESULT(yes)
+           SCHEME_INC=/usr/include/plt
+         else
+           AC_MSG_RESULT(no)
+           AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
+           if test -f /usr/include/racket/scheme.h; then
+             AC_MSG_RESULT(yes)
+             SCHEME_INC=/usr/include/racket
+           else
+             AC_MSG_RESULT(no)
+             vi_cv_path_mzscheme_pfx=
+           fi
+         fi
        fi
       fi
     fi
@@ -582,17 +714,28 @@ if test "$enable_mzschemeinterp" = "yes"; then
 
   if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
     if test "x$MACOSX" = "xyes"; then
-      MZSCHEME_LIBS="-framework PLT_MzScheme"
+      MZSCHEME_LIBS="-framework Racket"
+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
-    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
     else
       dnl Using shared objects
       if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
        MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
+       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
       else
         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
       fi
@@ -605,21 +748,74 @@ if test "$enable_mzschemeinterp" = "yes"; then
        MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib"
       fi
     fi
+
+    AC_MSG_CHECKING(for racket collects directory)
     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
-      SCHEME_COLLECTS=lib/plt/
+      SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
+    else
+      if test -d $vi_cv_path_mzscheme_pfx/lib/racket/collects; then
+       SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
+      else
+       if test -d $vi_cv_path_mzscheme_pfx/share/racket/collects; then
+         SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
+       else
+         if test -d $vi_cv_path_mzscheme_pfx/collects; then
+           SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
+         fi
+       fi
+      fi
     fi
-    if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
-      dnl need to generate bytecode for MzScheme base
+    if test "X$SCHEME_COLLECTS" != "X" ; then
+      AC_MSG_RESULT(${SCHEME_COLLECTS})
+    else
+      AC_MSG_RESULT(not found)
+    fi
+
+    AC_MSG_CHECKING(for mzscheme_base.c)
+    if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
       MZSCHEME_EXTRA="mzscheme_base.c"
+    else
+      if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
+       MZSCHEME_EXTRA="mzscheme_base.c"
+      fi
+    fi
+    if test "X$MZSCHEME_EXTRA" != "X" ; then
+      dnl need to generate bytecode for MzScheme base
       MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
+      AC_MSG_RESULT(needed)
+    else
+      AC_MSG_RESULT(not needed)
     fi
+
+    dnl On Ubuntu this fixes "undefined reference to symbol 'ffi_type_void'".
+    AC_CHECK_LIB(ffi, ffi_type_void, [MZSCHEME_LIBS="$MZSCHEME_LIBS -lffi"])
+
     MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
-      -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'"
-    MZSCHEME_SRC="if_mzsch.c"
-    MZSCHEME_OBJ="objects/if_mzsch.o"
-    MZSCHEME_PRO="if_mzsch.pro"
-    AC_DEFINE(FEAT_MZSCHEME)
+      -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
+
+    dnl Test that we can compile a simple program with these CFLAGS and LIBS.
+    AC_MSG_CHECKING([if compile and link flags for MzScheme are sane])
+    cflags_save=$CFLAGS
+    libs_save=$LIBS
+    CFLAGS="$CFLAGS $MZSCHEME_CFLAGS"
+    LIBS="$LIBS $MZSCHEME_LIBS"
+    AC_TRY_LINK(,[ ],
+          AC_MSG_RESULT(yes); mzs_ok=yes,
+          AC_MSG_RESULT(no: MZSCHEME DISABLED); mzs_ok=no)
+    CFLAGS=$cflags_save
+    LIBS=$libs_save
+    if test $mzs_ok = yes; then
+      MZSCHEME_SRC="if_mzsch.c"
+      MZSCHEME_OBJ="objects/if_mzsch.o"
+      MZSCHEME_PRO="if_mzsch.pro"
+      AC_DEFINE(FEAT_MZSCHEME)
+    else
+      MZSCHEME_CFLAGS=
+      MZSCHEME_LIBS=
+      MZSCHEME_EXTRA=
+      MZSCHEME_MZC=
+    fi
   fi
   AC_SUBST(MZSCHEME_SRC)
   AC_SUBST(MZSCHEME_OBJ)
@@ -688,6 +884,7 @@ if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
       ldflags_save=$LDFLAGS
       CFLAGS="$CFLAGS $perlcppflags"
       LIBS="$LIBS $perllibs"
+      perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
       LDFLAGS="$perlldflags $LDFLAGS"
       AC_TRY_LINK(,[ ],
             AC_MSG_RESULT(yes); perl_ok=yes,
@@ -701,7 +898,9 @@ if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
          PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[[^ ]]*//'`
        fi
        if test "X$perlldflags" != "X"; then
-         LDFLAGS="$perlldflags $LDFLAGS"
+         if test "X`echo \"$LDFLAGS\" | grep -F -e \"$perlldflags\"`" = "X"; then
+           LDFLAGS="$perlldflags $LDFLAGS"
+         fi
        fi
        PERL_LIBS=$perllibs
        PERL_SRC="auto/if_perl.c if_perlsfio.c"
@@ -747,6 +946,10 @@ if test "$enable_perlinterp" = "yes" -o "$enable_perlinterp" = "dynamic"; then
       PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
+    AC_MSG_ERROR([could not configure perl])
+  fi
 fi
 AC_SUBST(shrpenv)
 AC_SUBST(PERL_SRC)
@@ -762,7 +965,7 @@ AC_ARG_ENABLE(pythoninterp,
 AC_MSG_RESULT($enable_pythoninterp)
 if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
   dnl -- find the python executable
-  AC_PATH_PROG(vi_cv_path_python, python)
+  AC_PATH_PROGS(vi_cv_path_python, python2 python)
   if test "X$vi_cv_path_python" != "X"; then
 
     dnl -- get its version number
@@ -771,10 +974,10 @@ if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; th
            ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
     ]])
 
-    dnl -- it must be at least version 1.4
-    AC_MSG_CHECKING(Python is 1.4 or better)
+    dnl -- it must be at least version 2.3
+    AC_MSG_CHECKING(Python is 2.3 or better)
     if ${vi_cv_path_python} -c \
-       "import sys; sys.exit(${vi_cv_var_python_version} < 1.4)"
+       "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
     then
       AC_MSG_RESULT(yep)
 
@@ -807,14 +1010,19 @@ if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; th
       AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
       [
        vi_cv_path_python_conf=
-       for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
-         for subdir in lib64 lib share; do
-           d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
-           if test -d "$d" && test -f "$d/config.c"; then
-             vi_cv_path_python_conf="$d"
-           fi
+       d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
+       if test -d "$d" && test -f "$d/config.c"; then
+         vi_cv_path_python_conf="$d"
+       else
+         for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
+           for subdir in lib64 lib share; do
+             d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
+             if test -d "$d" && test -f "$d/config.c"; then
+               vi_cv_path_python_conf="$d"
+             fi
+           done
          done
-       done
+       fi
       ])
 
       PYTHON_CONFDIR="${vi_cv_path_python_conf}"
@@ -835,6 +1043,7 @@ __:
        @echo "python_LIBS='$(LIBS)'"
        @echo "python_SYSLIBS='$(SYSLIBS)'"
        @echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
+       @echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
        @echo "python_INSTSONAME='$(INSTSONAME)'"
 eof
            dnl -- delete the lines from make about Entering/Leaving directory
@@ -855,23 +1064,21 @@ eof
            fi
        ])
 
+       if test "X$python_DLLLIBRARY" != "X"; then
+         python_INSTSONAME="$python_DLLLIBRARY"
+       fi
        PYTHON_LIBS="${vi_cv_path_python_plibs}"
        if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
-         PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
+         PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
        else
-         PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
+         PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
        fi
        PYTHON_SRC="if_python.c"
-       dnl For Mac OSX 10.2 config.o is included in the Python library.
-       if test "x$MACOSX" = "xyes"; then
-         PYTHON_OBJ="objects/if_python.o"
-       else
-         PYTHON_OBJ="objects/if_python.o objects/py_config.o"
-       fi
+       PYTHON_OBJ="objects/if_python.o"
        if test "${vi_cv_var_python_version}" = "1.4"; then
           PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
        fi
-       PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
+    PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
 
        dnl On FreeBSD linking with "-pthread" is required to use threads.
        dnl _THREAD_SAFE must be used for compiling then.
@@ -890,6 +1097,9 @@ eof
            threadsafe_flag="-D_THREAD_SAFE"
            thread_lib="-pthread"
          fi
+         if test "`(uname) 2>/dev/null`" = SunOS; then
+           threadsafe_flag="-pthreads"
+         fi
        fi
        libs_save_old=$LIBS
        if test -n "$threadsafe_flag"; then
@@ -926,12 +1136,15 @@ eof
          PYTHON_LIBS=
          PYTHON_CFLAGS=
        fi
-
       fi
     else
       AC_MSG_RESULT(too old)
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
+    AC_MSG_ERROR([could not configure python])
+  fi
 fi
 
 AC_SUBST(PYTHON_CONFDIR)
@@ -949,7 +1162,7 @@ AC_ARG_ENABLE(python3interp,
 AC_MSG_RESULT($enable_python3interp)
 if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
   dnl -- find the python3 executable
-  AC_PATH_PROG(vi_cv_path_python3, python3)
+  AC_PATH_PROGS(vi_cv_path_python3, python3 python)
   if test "X$vi_cv_path_python3" != "X"; then
 
     dnl -- get its version number
@@ -958,144 +1171,175 @@ if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic";
           ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
     ]])
 
-    dnl -- find where python3 thinks it was installed
-    AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
-    [ vi_cv_path_python3_pfx=`
-     ${vi_cv_path_python3} -c \
-     "import sys; print(sys.prefix)"` ])
-
-    dnl -- and where it thinks it runs
-    AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
-    [ vi_cv_path_python3_epfx=`
-     ${vi_cv_path_python3} -c \
-     "import sys; print(sys.exec_prefix)"` ])
-
-    dnl -- python3's internal library path
-
-    AC_CACHE_VAL(vi_cv_path_python3path,
-    [ vi_cv_path_python3path=`
-     unset PYTHONPATH;
-     ${vi_cv_path_python3} -c \
-     "import sys, string; print(':'.join(sys.path))"` ])
-
-    dnl -- where the Python implementation library archives are
-
-    AC_ARG_WITH(python3-config-dir,
-     [  --with-python3-config-dir=PATH  Python's config directory],
-     [ vi_cv_path_python3_conf="${withval}" ] )
-
-    AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
-    [
-     vi_cv_path_python3_conf=
-     for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
-       for subdir in lib64 lib share; do
-         d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
-         if test -d "$d" && test -f "$d/config.c"; then
-           vi_cv_path_python3_conf="$d"
-         fi
-       done
-     done
-    ])
-
-    PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
-
-    if test "X$PYTHON3_CONFDIR" = "X"; then
-      AC_MSG_RESULT([can't find it!])
-    else
+    dnl -- it must be at least version 3
+    AC_MSG_CHECKING(Python is 3.0 or better)
+    if ${vi_cv_path_python3} -c \
+      "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
+    then
+      AC_MSG_RESULT(yep)
 
-      dnl -- we need to examine Python's config/Makefile too
-      dnl    see what the interpreter is built from
-      AC_CACHE_VAL(vi_cv_path_python3_plibs,
+      dnl -- get abiflags for python 3.2 or higher (PEP 3149)
+      AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
       [
-          pwd=`pwd`
-          tmp_mkf="$pwd/config-PyMake$$"
-          cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
+       vi_cv_var_python3_abiflags=
+       if ${vi_cv_path_python3} -c \
+           "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
+       then
+         vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \    
+           "import sys; print(sys.abiflags)"`
+       fi ])
+  
+      dnl -- find where python3 thinks it was installed
+      AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
+      [ vi_cv_path_python3_pfx=`
+       ${vi_cv_path_python3} -c \
+       "import sys; print(sys.prefix)"` ])
+  
+      dnl -- and where it thinks it runs
+      AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
+      [ vi_cv_path_python3_epfx=`
+       ${vi_cv_path_python3} -c \
+       "import sys; print(sys.exec_prefix)"` ])
+  
+      dnl -- python3's internal library path
+  
+      AC_CACHE_VAL(vi_cv_path_python3path,
+      [ vi_cv_path_python3path=`
+       unset PYTHONPATH;
+       ${vi_cv_path_python3} -c \
+       "import sys, string; print(':'.join(sys.path))"` ])
+  
+      dnl -- where the Python implementation library archives are
+  
+      AC_ARG_WITH(python3-config-dir,
+       [  --with-python3-config-dir=PATH  Python's config directory],
+       [ vi_cv_path_python3_conf="${withval}" ] )
+  
+      AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
+      [
+       vi_cv_path_python3_conf=
+       config_dir="config-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+       d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
+       if test -d "$d" && test -f "$d/config.c"; then
+         vi_cv_path_python3_conf="$d"
+       else
+         for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+          for subdir in lib64 lib share; do
+            d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
+            if test -d "$d" && test -f "$d/config.c"; then
+              vi_cv_path_python3_conf="$d"
+            fi
+          done
+         done
+       fi
+      ])
+  
+      PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
+  
+      if test "X$PYTHON3_CONFDIR" = "X"; then
+        AC_MSG_RESULT([can't find it!])
+      else
+  
+        dnl -- we need to examine Python's config/Makefile too
+        dnl    see what the interpreter is built from
+        AC_CACHE_VAL(vi_cv_path_python3_plibs,
+        [
+            pwd=`pwd`
+            tmp_mkf="$pwd/config-PyMake$$"
+            cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
 __:
        @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
        @echo "python3_LIBS='$(LIBS)'"
        @echo "python3_SYSLIBS='$(SYSLIBS)'"
-       @echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
+       @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
        @echo "python3_INSTSONAME='$(INSTSONAME)'"
 eof
-          dnl -- delete the lines from make about Entering/Leaving directory
-          eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
-          rm -f -- "${tmp_mkf}"
-          vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
-          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
-          dnl remove -ltermcap, it can conflict with an earlier -lncurses
-          vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
-          vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
-      ])
-
-      PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
-      if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}"
-      else
-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}"
-      fi
-      PYTHON3_SRC="if_python3.c"
-      dnl For Mac OSX 10.2 config.o is included in the Python library.
-      if test "x$MACOSX" = "xyes"; then
+            dnl -- delete the lines from make about Entering/Leaving directory
+            eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+            rm -f -- "${tmp_mkf}"
+           vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+            vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+            dnl remove -ltermcap, it can conflict with an earlier -lncurses
+            vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+            vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+        ])
+  
+        if test "X$python3_DLLLIBRARY" != "X"; then
+         python3_INSTSONAME="$python3_DLLLIBRARY"
+        fi
+        PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+        if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+        else
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+        fi
+        PYTHON3_SRC="if_python3.c"
         PYTHON3_OBJ="objects/if_python3.o"
-      else
-        PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
-      fi
-
-      dnl On FreeBSD linking with "-pthread" is required to use threads.
-      dnl _THREAD_SAFE must be used for compiling then.
-      dnl The "-pthread" is added to $LIBS, so that the following check for
-      dnl sigaltstack() will look in libc_r (it's there in libc!).
-      dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS.  GCC
-      dnl will then define target-specific defines, e.g., -D_REENTRANT.
-      dnl Don't do this for Mac OSX, -pthread will generate a warning.
-      AC_MSG_CHECKING([if -pthread should be used])
-      threadsafe_flag=
-      thread_lib=
-      dnl if test "x$MACOSX" != "xyes"; then
-      if test "`(uname) 2>/dev/null`" != Darwin; then
-        test "$GCC" = yes && threadsafe_flag="-pthread"
-        if test "`(uname) 2>/dev/null`" = FreeBSD; then
-          threadsafe_flag="-D_THREAD_SAFE"
-          thread_lib="-pthread"
+  
+        dnl On FreeBSD linking with "-pthread" is required to use threads.
+        dnl _THREAD_SAFE must be used for compiling then.
+        dnl The "-pthread" is added to $LIBS, so that the following check for
+        dnl sigaltstack() will look in libc_r (it's there in libc!).
+        dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS.  GCC
+        dnl will then define target-specific defines, e.g., -D_REENTRANT.
+        dnl Don't do this for Mac OSX, -pthread will generate a warning.
+        AC_MSG_CHECKING([if -pthread should be used])
+        threadsafe_flag=
+        thread_lib=
+        dnl if test "x$MACOSX" != "xyes"; then
+        if test "`(uname) 2>/dev/null`" != Darwin; then
+          test "$GCC" = yes && threadsafe_flag="-pthread"
+          if test "`(uname) 2>/dev/null`" = FreeBSD; then
+            threadsafe_flag="-D_THREAD_SAFE"
+            thread_lib="-pthread"
+          fi
+          if test "`(uname) 2>/dev/null`" = SunOS; then
+            threadsafe_flag="-pthreads"
+          fi
         fi
-      fi
-      libs_save_old=$LIBS
-      if test -n "$threadsafe_flag"; then
+        libs_save_old=$LIBS
+        if test -n "$threadsafe_flag"; then
+          cflags_save=$CFLAGS
+          CFLAGS="$CFLAGS $threadsafe_flag"
+          LIBS="$LIBS $thread_lib"
+          AC_TRY_LINK(,[ ],
+             AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
+             AC_MSG_RESULT(no); LIBS=$libs_save_old
+             )
+          CFLAGS=$cflags_save
+        else
+          AC_MSG_RESULT(no)
+        fi
+  
+        dnl check that compiling a simple program still works with the flags
+        dnl added for Python.
+        AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
         cflags_save=$CFLAGS
-        CFLAGS="$CFLAGS $threadsafe_flag"
-        LIBS="$LIBS $thread_lib"
+        libs_save=$LIBS
+        CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+        LIBS="$LIBS $PYTHON3_LIBS"
         AC_TRY_LINK(,[ ],
-           AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
-           AC_MSG_RESULT(no); LIBS=$libs_save_old
-           )
+               AC_MSG_RESULT(yes); python3_ok=yes,
+               AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
         CFLAGS=$cflags_save
-      else
-        AC_MSG_RESULT(no)
-      fi
-
-      dnl check that compiling a simple program still works with the flags
-      dnl added for Python.
-      AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
-      cflags_save=$CFLAGS
-      libs_save=$LIBS
-      CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
-      LIBS="$LIBS $PYTHON3_LIBS"
-      AC_TRY_LINK(,[ ],
-             AC_MSG_RESULT(yes); python3_ok=yes,
-             AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
-      CFLAGS=$cflags_save
-      LIBS=$libs_save
-      if test "$python3_ok" = yes; then
-        AC_DEFINE(FEAT_PYTHON3)
-      else
-        LIBS=$libs_save_old
-        PYTHON3_SRC=
-        PYTHON3_OBJ=
-        PYTHON3_LIBS=
-        PYTHON3_CFLAGS=
+        LIBS=$libs_save
+        if test "$python3_ok" = yes; then
+          AC_DEFINE(FEAT_PYTHON3)
+        else
+          LIBS=$libs_save_old
+          PYTHON3_SRC=
+          PYTHON3_OBJ=
+          PYTHON3_LIBS=
+          PYTHON3_CFLAGS=
+        fi
       fi
+    else
+      AC_MSG_RESULT(too old)
     fi
   fi
+  if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
+    AC_MSG_ERROR([could not configure python3])
+  fi
 fi
 
 AC_SUBST(PYTHON3_CONFDIR)
@@ -1109,28 +1353,31 @@ dnl with dlopen(), dlsym(), dlclose()
 if test "$python_ok" = yes && test "$python3_ok" = yes; then
   AC_DEFINE(DYNAMIC_PYTHON)
   AC_DEFINE(DYNAMIC_PYTHON3)
-  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL)
+  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
   cflags_save=$CFLAGS
-  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
   ldflags_save=$LDFLAGS
-  LDFLAGS="$LDFLAGS -ldl"
+  dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+  LDFLAGS="-ldl $LDFLAGS"
   AC_RUN_IFELSE([
     #include <dlfcn.h>
     /* If this program fails, then RTLD_GLOBAL is needed.
      * RTLD_GLOBAL will be used and then it is not possible to
      * have both python versions enabled in the same vim instance.
-     * Only the first pyhton version used will be switched on.
+     * Only the first python version used will be switched on.
      */
 
-    int no_rtl_global_needed_for(char *python_instsoname)
+    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
     {
       int needed = 0;
       void* pylib = dlopen(python_instsoname, RTLD_LAZY);
       if (pylib != 0)
       {
+          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
           void (*init)(void) = dlsym(pylib, "Py_Initialize");
           int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
           void (*final)(void) = dlsym(pylib, "Py_Finalize");
+          (*pfx)(prefix);
           (*init)();
           needed = (*simple)("import termios") == -1;
           (*final)();
@@ -1142,13 +1389,61 @@ if test "$python_ok" = yes && test "$python3_ok" = yes; then
     int main(int argc, char** argv)
     {
       int not_needed = 0;
-      if (no_rtl_global_needed_for("libpython2.7.so.1.0") && no_rtl_global_needed_for("libpython3.1.so.1.0"))
+      if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
             not_needed = 1;
       return !not_needed;
     }],
     [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
+
   CFLAGS=$cflags_save
   LDFLAGS=$ldflags_save
+
+  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
+  cflags_save=$CFLAGS
+  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+  ldflags_save=$LDFLAGS
+  dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+  LDFLAGS="-ldl $LDFLAGS"
+  AC_RUN_IFELSE([
+    #include <dlfcn.h>
+    #include <wchar.h>
+    /* If this program fails, then RTLD_GLOBAL is needed.
+     * RTLD_GLOBAL will be used and then it is not possible to
+     * have both python versions enabled in the same vim instance.
+     * Only the first python version used will be switched on.
+     */
+
+    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
+    {
+      int needed = 0;
+      void* pylib = dlopen(python_instsoname, RTLD_LAZY);
+      if (pylib != 0)
+      {
+          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
+          void (*init)(void) = dlsym(pylib, "Py_Initialize");
+          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
+          void (*final)(void) = dlsym(pylib, "Py_Finalize");
+          (*pfx)(prefix);
+          (*init)();
+          needed = (*simple)("import termios") == -1;
+          (*final)();
+          dlclose(pylib);
+      }
+      return !needed;
+    }
+
+    int main(int argc, char** argv)
+    {
+      int not_needed = 0;
+      if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
+            not_needed = 1;
+      return !not_needed;
+    }],
+    [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
+
+  CFLAGS=$cflags_save
+  LDFLAGS=$ldflags_save
+
   PYTHON_SRC="if_python.c"
   PYTHON_OBJ="objects/if_python.o"
   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
@@ -1163,12 +1458,44 @@ elif test "$python_ok" = yes && test "$enable_pythoninterp" = "dynamic"; then
   PYTHON_OBJ="objects/if_python.o"
   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
   PYTHON_LIBS=
+elif test "$python_ok" = yes; then
+  dnl Check that adding -fPIE works.  It may be needed when using a static
+  dnl Python library.
+  AC_MSG_CHECKING([if -fPIE can be added for Python])
+  cflags_save=$CFLAGS
+  libs_save=$LIBS
+  CFLAGS="$CFLAGS $PYTHON_CFLAGS -fPIE"
+  LIBS="$LIBS $PYTHON_LIBS"
+  AC_TRY_LINK(,[ ],
+        AC_MSG_RESULT(yes); fpie_ok=yes,
+        AC_MSG_RESULT(no); fpie_ok=no)
+  CFLAGS=$cflags_save
+  LIBS=$libs_save
+  if test $fpie_ok = yes; then
+    PYTHON_CFLAGS="$PYTHON_CFLAGS -fPIE"
+  fi
 elif test "$python3_ok" = yes && test "$enable_python3interp" = "dynamic"; then
   AC_DEFINE(DYNAMIC_PYTHON3)
   PYTHON3_SRC="if_python3.c"
   PYTHON3_OBJ="objects/if_python3.o"
   PYTHON3_CFLAGS="$PYTHON3_CFLAGS -DDYNAMIC_PYTHON3_DLL=\\\"${python3_INSTSONAME}\\\""
   PYTHON3_LIBS=
+elif test "$python3_ok" = yes; then
+  dnl Check that adding -fPIE works.  It may be needed when using a static
+  dnl Python library.
+  AC_MSG_CHECKING([if -fPIE can be added for Python3])
+  cflags_save=$CFLAGS
+  libs_save=$LIBS
+  CFLAGS="$CFLAGS $PYTHON3_CFLAGS -fPIE"
+  LIBS="$LIBS $PYTHON3_LIBS"
+  AC_TRY_LINK(,[ ],
+        AC_MSG_RESULT(yes); fpie_ok=yes,
+        AC_MSG_RESULT(no); fpie_ok=no)
+  CFLAGS=$cflags_save
+  LIBS=$libs_save
+  if test $fpie_ok = yes; then
+    PYTHON3_CFLAGS="$PYTHON3_CFLAGS -fPIE"
+  fi
 fi
 
 AC_MSG_CHECKING(--enable-tclinterp argument)
@@ -1290,6 +1617,9 @@ if test "$enable_tclinterp" = "yes"; then
       AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
     fi
   fi
+  if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
+    AC_MSG_ERROR([could not configure Tcl])
+  fi
 fi
 AC_SUBST(TCL_SRC)
 AC_SUBST(TCL_OBJ)
@@ -1299,67 +1629,81 @@ AC_SUBST(TCL_LIBS)
 
 AC_MSG_CHECKING(--enable-rubyinterp argument)
 AC_ARG_ENABLE(rubyinterp,
-       [  --enable-rubyinterp     Include Ruby interpreter.], ,
+       [  --enable-rubyinterp[=OPTS]     Include Ruby interpreter.  [default=no] [OPTS=no/yes/dynamic]], ,
        [enable_rubyinterp="no"])
 AC_MSG_RESULT($enable_rubyinterp)
-if test "$enable_rubyinterp" = "yes"; then
+if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
   AC_MSG_CHECKING(--with-ruby-command argument)
+  AC_SUBST(vi_cv_path_ruby)
   AC_ARG_WITH(ruby-command, [  --with-ruby-command=RUBY  name of the Ruby command (default: ruby)],
-       RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD),
+       RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
        RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
-  AC_SUBST(vi_cv_path_ruby)
   AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
   if test "X$vi_cv_path_ruby" != "X"; then
     AC_MSG_CHECKING(Ruby version)
     if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
       AC_MSG_RESULT(OK)
+      AC_MSG_CHECKING(Ruby rbconfig)
+      ruby_rbconfig="RbConfig"
+      if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
+       ruby_rbconfig="Config"
+      fi
+      AC_MSG_RESULT($ruby_rbconfig)
       AC_MSG_CHECKING(Ruby header files)
-      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["rubyhdrdir"]] || Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null`
+      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG[['rubyhdrdir']] || $ruby_rbconfig::CONFIG[['archdir']] || \\$hdrdir" 2>/dev/null`
       if test "X$rubyhdrdir" != "X"; then
        AC_MSG_RESULT($rubyhdrdir)
        RUBY_CFLAGS="-I$rubyhdrdir"
-        rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["arch"]]'`
+        rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['arch']]"`
         if test -d "$rubyhdrdir/$rubyarch"; then
           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
         fi
-        rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["ruby_version"]].gsub(/\./, "")[[0,2]]'`
+        rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
+       if test "X$rubyversion" = "X"; then
+         rubyversion=`$vi_cv_path_ruby -e "print ((VERSION rescue RUBY_VERSION)).gsub(/\./, '')[[0,2]]"`
+       fi
         RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
-       rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'`
+       rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
        if test "X$rubylibs" != "X"; then
          RUBY_LIBS="$rubylibs"
        fi
-       librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
-       if test -f "$rubyhdrdir/$librubyarg"; then
-         librubyarg="$rubyhdrdir/$librubyarg"
-       else
-         rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
-         if test -f "$rubylibdir/$librubyarg"; then
-           librubyarg="$rubylibdir/$librubyarg"
-         elif test "$librubyarg" = "libruby.a"; then
-           dnl required on Mac OS 10.3 where libruby.a doesn't exist
-           librubyarg="-lruby"
-         else
-           librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
-         fi
+       librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
+       librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
+       rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
+       if test -f "$rubylibdir/$librubya"; then
+         librubyarg="$librubyarg"
+         RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+       elif test "$librubyarg" = "libruby.a"; then
+         dnl required on Mac OS 10.3 where libruby.a doesn't exist
+         librubyarg="-lruby"
+         RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
        fi
 
        if test "X$librubyarg" != "X"; then
          RUBY_LIBS="$librubyarg $RUBY_LIBS"
        fi
-       rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'`
+       rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
        if test "X$rubyldflags" != "X"; then
          dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
          dnl be included if requested by passing --with-mac-arch to
          dnl configure, so strip these flags first (if present)
          rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
          if test "X$rubyldflags" != "X"; then
-           LDFLAGS="$rubyldflags $LDFLAGS"
+           if test "X`echo \"$LDFLAGS\" | grep -F -e \"$rubyldflags\"`" = "X"; then
+             LDFLAGS="$rubyldflags $LDFLAGS"
+           fi
          fi
        fi
        RUBY_SRC="if_ruby.c"
        RUBY_OBJ="objects/if_ruby.o"
        RUBY_PRO="if_ruby.pro"
        AC_DEFINE(FEAT_RUBY)
+       if test "$enable_rubyinterp" = "dynamic"; then
+         libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
+         AC_DEFINE(DYNAMIC_RUBY)
+         RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+         RUBY_LIBS=
+       fi
       else
        AC_MSG_RESULT(not found; disabling Ruby)
       fi
@@ -1367,6 +1711,10 @@ if test "$enable_rubyinterp" = "yes"; then
       AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
+    AC_MSG_ERROR([could not configure Ruby])
+  fi
 fi
 AC_SUBST(RUBY_SRC)
 AC_SUBST(RUBY_OBJ)
@@ -1576,7 +1924,12 @@ else
     dnl Check that the X11 header files don't use implicit declarations
     AC_MSG_CHECKING(if X11 header files implicitly declare return values)
     cflags_save=$CFLAGS
-    CFLAGS="$CFLAGS $X_CFLAGS -Werror"
+    dnl -Werror is GCC only, others like Solaris Studio might not like it
+    if test "$GCC" = yes; then
+      CFLAGS="$CFLAGS $X_CFLAGS -Werror"
+    else
+      CFLAGS="$CFLAGS $X_CFLAGS"
+    fi
     AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
        AC_MSG_RESULT(no),
        CFLAGS="$CFLAGS -Wno-implicit-int"
@@ -2069,8 +2422,10 @@ if test -z "$SKIP_MOTIF"; then
     dnl Remove "-L" from before $GUI_LIB_LOC if it's there
     GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
 
+    dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere.  The
+    dnl linker will figure out which one to use, we only check if one exists.
     AC_MSG_CHECKING(for location of Motif GUI libs)
-    gui_libs="`echo $x_libraries|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` `echo "$GUI_INC_LOC" | sed s/include/lib/` $GUI_LIB_LOC"
+    gui_libs="`echo $x_libraries|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu `echo "$GUI_INC_LOC" | sed s/include/lib/` $GUI_LIB_LOC"
     GUI_LIB_LOC=
     for try in $gui_libs; do
       for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
@@ -2081,7 +2436,9 @@ if test -z "$SKIP_MOTIF"; then
     done
     if test -n "$GUI_LIB_LOC"; then
       dnl Remove /usr/lib, it causes trouble on some systems
-      if test "$GUI_LIB_LOC" = /usr/lib; then
+      if test "$GUI_LIB_LOC" = /usr/lib \
+          -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
+          -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
        GUI_LIB_LOC=
        AC_MSG_RESULT(in default path)
       else
@@ -2248,10 +2605,15 @@ dnl Only use the Xm directory when compiling Motif, don't use it for Athena
 if test -z "$SKIP_MOTIF"; then
   cppflags_save=$CPPFLAGS
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-  AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
-                  Xm/UnhighlightT.h Xm/Notebook.h)
+  if test "$zOSUnix" = "yes"; then
+       xmheader="Xm/Xm.h"
+  else
+       xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
+          Xm/UnhighlightT.h Xm/Notebook.h"  
+  fi    
+  AC_CHECK_HEADERS($xmheader)
 
-  if test $ac_cv_header_Xm_XpmP_h = yes; then
+  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
     dnl Solaris uses XpmAttributes_21, very annoying.
     AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
     AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
@@ -2303,6 +2665,21 @@ dnl ---------------------------------------------------------------------------
 dnl end of GUI-checking
 dnl ---------------------------------------------------------------------------
 
+dnl Check for Cygwin, which needs an extra source file if not using X11
+AC_MSG_CHECKING(for CYGWIN environment)
+case `uname` in
+    CYGWIN*)    CYGWIN=yes; AC_MSG_RESULT(yes)
+                AC_MSG_CHECKING(for CYGWIN clipboard support)
+                if test "x$with_x" = "xno" ; then
+                  OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
+                  AC_MSG_RESULT(yes)
+                  AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
+                else
+                  AC_MSG_RESULT(no - using X11)
+                fi ;;
+
+    *)          CYGWIN=no; AC_MSG_RESULT(no);;
+esac
 
 dnl Only really enable hangul input when GUI and XFONTSET are available
 if test "$enable_hangulinput" = "yes"; then
@@ -2529,13 +2906,14 @@ else
   AC_MSG_RESULT([empty: automatic terminal library selection])
   dnl  On HP-UX 10.10 termcap or termlib should be used instead of
   dnl  curses, because curses is much slower.
-  dnl  Newer versions of ncurses are preferred over anything.
+  dnl  Newer versions of ncurses are preferred over anything, except
+  dnl  when tinfo has been split off, it contains all we need.
   dnl  Older versions of ncurses have bugs, get a new one!
   dnl  Digital Unix (OSF1) should use curses (Ronald Schild).
   dnl  On SCO Openserver should prefer termlib (Roger Cornelius).
   case "`uname -s 2>/dev/null`" in
-       OSF1|SCO_SV)    tlibs="ncurses curses termlib termcap";;
-       *)      tlibs="ncurses termlib termcap curses";;
+       OSF1|SCO_SV)    tlibs="tinfo ncurses curses termlib termcap";;
+       *)      tlibs="tinfo ncurses termlib termcap curses";;
   esac
   for libname in $tlibs; do
     AC_CHECK_LIB(${libname}, tgetent,,)
@@ -2801,7 +3179,7 @@ rm -f conftest_grp
 if test "x$vim_cv_tty_group" != "xworld" ; then
   AC_DEFINE_UNQUOTED(PTYGROUP,$vim_cv_tty_group)
   if test "x$vim_cv_tty_mode" = "x" ; then
-    AC_MSG_ERROR([It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (propably 0620)])
+    AC_MSG_ERROR([It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (probably 0620)])
   else
     AC_DEFINE(PTYMODE, 0620)
   fi
@@ -2865,7 +3243,7 @@ fi
 dnl Check for functions in one big call, to reduce the size of configure.
 dnl Can only be used for functions that do not require any include.
 AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
-       getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+       getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
        memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
        setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
        sigvec strcasecmp strerror strftime stricmp strncasecmp \
@@ -2975,6 +3353,7 @@ AC_TRY_LINK([
 
 dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
 dnl when -lacl works, also try to use -lattr (required for Debian).
+dnl On Solaris, use the acl_get/set functions in libsec, if present.
 AC_MSG_CHECKING(--disable-acl argument)
 AC_ARG_ENABLE(acl,
        [  --disable-acl           Don't check for ACL support.],
@@ -2997,6 +3376,7 @@ acl_t acl;], [acl = acl_get_file("foo", ACL_TYPE_ACCESS);
        AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
        AC_MSG_RESULT(no))
 
+AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
 AC_MSG_CHECKING(for Solaris ACL support)
 AC_TRY_LINK([
 #ifdef HAVE_SYS_ACL_H
@@ -3004,7 +3384,7 @@ AC_TRY_LINK([
 #endif], [acl("foo", GETACLCNT, 0, NULL);
        ],
        AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
-       AC_MSG_RESULT(no))
+       AC_MSG_RESULT(no)))
 
 AC_MSG_CHECKING(for AIX ACL support)
 AC_TRY_LINK([
@@ -3143,7 +3523,7 @@ AC_TRY_COMPILE(
 [#include <sys/types.h>
 #include <sys/sysinfo.h>],
 [      struct sysinfo sinfo;
-       sinfo.mem_unit = 1;
+       sinfo.mem_unit = 1;
        ],
        AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
        AC_MSG_RESULT(no))
@@ -3180,7 +3560,7 @@ main() {
 }],
 AC_MSG_RESULT(ok),
 AC_MSG_ERROR([WRONG!  uint32_t not defined correctly.]),
-AC_MSG_ERROR([could not compile program using uint32_t.]))
+AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
 
 dnl Check for memmove() before bcopy(), makes memmove() be used when both are
 dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
@@ -3280,7 +3660,7 @@ dnl Link with xpg4, it is said to make Korean locale working
 AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
 
 dnl Check how we can run ctags.  Default to "ctags" when nothing works.
-dnl --version for Exuberant ctags (preferred)
+dnl Use --version to detect Exuberant ctags (preferred)
 dnl       Add --fields=+S to get function signatures for omni completion.
 dnl -t for typedefs (many ctags have this)
 dnl -s for static functions (Elvis ctags only?)
@@ -3290,6 +3670,10 @@ AC_MSG_CHECKING(how to create tags)
 test -f tags && mv tags tags.save
 if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
   TAGPRG="ctags -I INIT+ --fields=+S"
+elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+  TAGPRG="exctags -I INIT+ --fields=+S"
+elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+  TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
 else
   TAGPRG="ctags"
   (eval etags     /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
@@ -3454,6 +3838,13 @@ if test "x$MACOSX" = "xyes"; then
   else
     AC_MSG_RESULT(no)
   fi
+  dnl As mentioned above, tiny build implies os_macosx.m isn't needed.  
+  dnl Exclude it from OS_EXTRA_SRC so that linker won't complain about
+  dnl missing Objective-C symbols.
+  if test "x$features" = "xtiny"; then
+    OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
+    OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
+  fi
 fi
 if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
   LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
@@ -3477,9 +3868,10 @@ if test "$GCC" = yes; then
   dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
   dnl declared as char x[1] but actually longer.  Introduced in gcc 4.0.
   dnl Also remove duplicate _FORTIFY_SOURCE arguments.
+  dnl And undefine it first to avoid a warning.
   AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
   if test "$gccmajor" -gt "3"; then
-    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
+    CFLAGS=`echo "$CFLAGS" | sed -e 's/ *-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
     AC_MSG_RESULT(yes)
   else
     AC_MSG_RESULT(no)
@@ -3487,6 +3879,28 @@ if test "$GCC" = yes; then
 fi
 AC_SUBST(DEPEND_CFLAGS_FILTER)
 
+dnl link.sh tries to avoid overlinking in a hackish way.
+dnl At least GNU ld supports --as-needed which provides the same functionality
+dnl at linker level. Let's use it.
+AC_MSG_CHECKING(linker --as-needed support)
+LINK_AS_NEEDED=
+# Check if linker supports --as-needed and --no-as-needed options
+if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
+  LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
+  LINK_AS_NEEDED=yes
+fi
+if test "$LINK_AS_NEEDED" = yes; then
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST(LINK_AS_NEEDED)
+
+# IBM z/OS reset CFLAGS for config.mk
+if test "$zOSUnix" = "yes"; then
+       CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
+fi
+
 dnl write output files
 AC_OUTPUT(auto/config.mk:config.mk.in)
 
index 9c9cefb..34d9ae4 100644 (file)
@@ -1,7 +1,10 @@
 # Python script to get both the data and resource fork from a BinHex encoded
 # file.
-# Author: Taro Muraoka
-# Last Change: 2003 Oct 25
+# Author: MURAOKA Taro <koron.kaoriya@gmail.com>
+# Last Change: 2012 Jun 29
+#
+# Copyright (C) 2003,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 import sys
 import binhex
index 9b6d279..80f4473 100644 (file)
@@ -615,11 +615,13 @@ diff_redraw(dofold)
 #endif
            /* A change may have made filler lines invalid, need to take care
             * of that for other windows. */
-           if (wp != curwin && wp->w_topfill > 0)
+           n = diff_check(wp, wp->w_topline);
+           if ((wp != curwin && wp->w_topfill > 0) || n > 0)
            {
-               n = diff_check(wp, wp->w_topline);
                if (wp->w_topfill > n)
                    wp->w_topfill = (n < 0 ? 0 : n);
+               else if (n > 0 && n > wp->w_topfill)
+                   wp->w_topfill = n;
            }
        }
 }
@@ -783,6 +785,15 @@ ex_diffupdate(eap)
        goto theend;
     }
 
+    /* :diffupdate! */
+    if (eap != NULL && eap->forceit)
+       for (idx_new = idx_orig; idx_new < DB_COUNT; ++idx_new)
+       {
+           buf = curtab->tp_diffbuf[idx_new];
+           if (buf_valid(buf))
+               buf_check_timestamp(buf, FALSE);
+       }
+
     /* Write the first buffer to a tempfile. */
     buf = curtab->tp_diffbuf[idx_orig];
     if (diff_write(buf, tmp_orig) == FAIL)
@@ -1099,7 +1110,7 @@ ex_diffsplit(eap)
 }
 
 /*
- * Set options to show difs for the current window.
+ * Set options to show diffs for the current window.
  */
     void
 ex_diffthis(eap)
@@ -1127,19 +1138,36 @@ diff_win_options(wp, addbuf)
 # endif
 
     wp->w_p_diff = TRUE;
+
+    /* Use 'scrollbind' and 'cursorbind' when available */
+#ifdef FEAT_SCROLLBIND
+    if (!wp->w_p_diff_saved)
+       wp->w_p_scb_save = wp->w_p_scb;
+    wp->w_p_scb = TRUE;
+#endif
 #ifdef FEAT_CURSORBIND
-    /* Use cursorbind if it's available */
+    if (!wp->w_p_diff_saved)
+       wp->w_p_crb_save = wp->w_p_crb;
     wp->w_p_crb = TRUE;
 #endif
-    wp->w_p_scb = TRUE;
+    if (!wp->w_p_diff_saved)
+       wp->w_p_wrap_save = wp->w_p_wrap;
     wp->w_p_wrap = FALSE;
 # ifdef FEAT_FOLDING
     curwin = wp;
     curbuf = curwin->w_buffer;
+    if (!wp->w_p_diff_saved)
+       wp->w_p_fdm_save = vim_strsave(wp->w_p_fdm);
     set_string_option_direct((char_u *)"fdm", -1, (char_u *)"diff",
                                                       OPT_LOCAL|OPT_FREE, 0);
     curwin = old_curwin;
     curbuf = curwin->w_buffer;
+    if (!wp->w_p_diff_saved)
+    {
+       wp->w_p_fdc_save = wp->w_p_fdc;
+       wp->w_p_fen_save = wp->w_p_fen;
+       wp->w_p_fdl_save = wp->w_p_fdl;
+    }
     wp->w_p_fdc = diff_foldcolumn;
     wp->w_p_fen = TRUE;
     wp->w_p_fdl = 0;
@@ -1151,6 +1179,8 @@ diff_win_options(wp, addbuf)
     if (vim_strchr(p_sbo, 'h') == NULL)
        do_cmdline_cmd((char_u *)"set sbo+=hor");
 #endif
+    /* Saved the current values, to be restored in ex_diffoff(). */
+    wp->w_p_diff_saved = TRUE;
 
     if (addbuf)
        diff_buf_add(wp->w_buffer);
@@ -1175,28 +1205,57 @@ ex_diffoff(eap)
     {
        if (wp == curwin || (eap->forceit && wp->w_p_diff))
        {
-           /* Set 'diff', 'scrollbind' off and 'wrap' on. */
+           /* Set 'diff', 'scrollbind' off and 'wrap' on. If option values
+            * were saved in diff_win_options() restore them. */
            wp->w_p_diff = FALSE;
+
+#ifdef FEAT_SCROLLBIND
+           if (wp->w_p_scb)
+               wp->w_p_scb = wp->w_p_diff_saved ? wp->w_p_scb_save : FALSE;
+#endif
 #ifdef FEAT_CURSORBIND
-           wp->w_p_crb = FALSE;
+           if (wp->w_p_crb)
+               wp->w_p_crb = wp->w_p_diff_saved ? wp->w_p_crb_save : FALSE;
 #endif
-           wp->w_p_scb = FALSE;
-           wp->w_p_wrap = TRUE;
+           if (!wp->w_p_wrap)
+               wp->w_p_wrap = wp->w_p_diff_saved ? wp->w_p_wrap_save : TRUE;
 #ifdef FEAT_FOLDING
            curwin = wp;
            curbuf = curwin->w_buffer;
-           set_string_option_direct((char_u *)"fdm", -1,
+           if (wp->w_p_diff_saved)
+           {
+               free_string_option(wp->w_p_fdm);
+               wp->w_p_fdm = wp->w_p_fdm_save;
+               wp->w_p_fdm_save = empty_option;
+           }
+           else
+               set_string_option_direct((char_u *)"fdm", -1,
                                   (char_u *)"manual", OPT_LOCAL|OPT_FREE, 0);
            curwin = old_curwin;
            curbuf = curwin->w_buffer;
-           wp->w_p_fdc = 0;
-           wp->w_p_fen = FALSE;
-           wp->w_p_fdl = 0;
+           if (wp->w_p_fdc == diff_foldcolumn)
+               wp->w_p_fdc = wp->w_p_diff_saved ? wp->w_p_fdc_save : 0;
+           if (wp->w_p_fdl == 0 && wp->w_p_diff_saved)
+               wp->w_p_fdl = wp->w_p_fdl_save;
+
+           if (wp->w_p_fen)
+           {
+               /* Only restore 'foldenable' when 'foldmethod' is not
+                * "manual", otherwise we continue to show the diff folds. */
+               if (foldmethodIsManual(wp) || !wp->w_p_diff_saved)
+                   wp->w_p_fen = FALSE;
+               else
+                   wp->w_p_fen = wp->w_p_fen_save;
+           }
+
            foldUpdateAll(wp);
            /* make sure topline is not halfway a fold */
            changed_window_setting_win(wp);
 #endif
+           /* Note: 'sbo' is not restored, it's a global option. */
            diff_buf_adjust(wp);
+
+           wp->w_p_diff_saved = FALSE;
        }
 #ifdef FEAT_SCROLLBIND
        diffwin |= wp->w_p_diff;
@@ -2142,7 +2201,7 @@ ex_diffgetput(eap)
            i = atol((char *)eap->arg);
        else
        {
-           i = buflist_findpat(eap->arg, p, FALSE, TRUE);
+           i = buflist_findpat(eap->arg, p, FALSE, TRUE, FALSE);
            if (i < 0)
                return;         /* error message already given */
        }
index ed22b34..fc29ac7 100644 (file)
@@ -2080,13 +2080,13 @@ get_digraph(cmdline)
 /*
  * Lookup the pair "char1", "char2" in the digraph tables.
  * If no match, return "char2".
- * If "meta" is TRUE and "char1" is a space, return "char2" | 0x80.
+ * If "meta_char" is TRUE and "char1" is a space, return "char2" | 0x80.
  */
     static int
-getexactdigraph(char1, char2, meta)
+getexactdigraph(char1, char2, meta_char)
     int                char1;
     int                char2;
-    int                meta;
+    int                meta_char;
 {
     int                i;
     int                retval = 0;
@@ -2159,7 +2159,7 @@ getexactdigraph(char1, char2, meta)
 
     if (retval == 0)           /* digraph deleted or not found */
     {
-       if (char1 == ' ' && meta)       /* <space> <char> --> meta-char */
+       if (char1 == ' ' && meta_char)  /* <space> <char> --> meta-char */
            return (char2 | 0x80);
        return char2;
     }
@@ -2171,16 +2171,16 @@ getexactdigraph(char1, char2, meta)
  * Allow for both char1-char2 and char2-char1
  */
     int
-getdigraph(char1, char2, meta)
+getdigraph(char1, char2, meta_char)
     int        char1;
     int        char2;
-    int        meta;
+    int        meta_char;
 {
     int            retval;
 
-    if (((retval = getexactdigraph(char1, char2, meta)) == char2)
+    if (((retval = getexactdigraph(char1, char2, meta_char)) == char2)
            && (char1 != char2)
-           && ((retval = getexactdigraph(char2, char1, meta)) == char1))
+           && ((retval = getexactdigraph(char2, char1, meta_char)) == char1))
        return char2;
     return retval;
 }
index 0ff8e69..3c5e59b 100644 (file)
@@ -375,7 +375,7 @@ get_vim_env(void)
 
     /* First get $VIMRUNTIME.  If it's set, remove the tail. */
     vim = getenv("VIMRUNTIME");
-    if (vim != NULL && *vim != 0)
+    if (vim != NULL && *vim != 0 && strlen(vim) < BUFSIZE)
     {
        strcpy(buf, vim);
        remove_tail(buf);
@@ -1609,7 +1609,7 @@ change_openwith_choice(int idx)
 
 /*
  * Only add the choice for the open-with menu entry when gvim.exe was found
- * and and regedit.exe exist.
+ * and regedit.exe exist.
  */
     static void
 init_openwith_choice(void)
index 04a17eb..b76ebe5 100644 (file)
@@ -58,6 +58,10 @@ static char *ctrl_x_msgs[] =
 };
 
 static char e_hitend[] = N_("Hit end of paragraph");
+#ifdef FEAT_COMPL_FUNC
+static char e_complwin[] = N_("E839: Completion function changed window");
+static char e_compldel[] = N_("E840: Completion function deleted text");
+#endif
 
 /*
  * Structure used to store one match for insert completion.
@@ -131,6 +135,8 @@ static char_u         *compl_orig_text = NULL;  /* text as it was before
 static int       compl_cont_mode = 0;
 static expand_T          compl_xp;
 
+static int       compl_opt_refresh_always = FALSE;
+
 static void ins_ctrl_x __ARGS((void));
 static int  has_compl_option __ARGS((int dict_opt));
 static int  ins_compl_accept_char __ARGS((int c));
@@ -149,16 +155,19 @@ static char_u *find_line_end __ARGS((char_u *ptr));
 static void ins_compl_free __ARGS((void));
 static void ins_compl_clear __ARGS((void));
 static int  ins_compl_bs __ARGS((void));
+static int  ins_compl_need_restart __ARGS((void));
 static void ins_compl_new_leader __ARGS((void));
 static void ins_compl_addleader __ARGS((int c));
-static int ins_compl_len __ARGS((void));
+static int  ins_compl_len __ARGS((void));
 static void ins_compl_restart __ARGS((void));
 static void ins_compl_set_original_text __ARGS((char_u *str));
 static void ins_compl_addfrommatch __ARGS((void));
 static int  ins_compl_prep __ARGS((int c));
+static void ins_compl_fixRedoBufForLeader __ARGS((char_u *ptr_arg));
 static buf_T *ins_compl_next_buf __ARGS((buf_T *buf, int flag));
 #if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
 static void ins_compl_add_list __ARGS((list_T *list));
+static void ins_compl_add_dict __ARGS((dict_T *dict));
 #endif
 static int  ins_compl_get_exp __ARGS((pos_T *ini));
 static void ins_compl_delete __ARGS((void));
@@ -244,12 +253,14 @@ static int  ins_eol __ARGS((int c));
 #ifdef FEAT_DIGRAPHS
 static int  ins_digraph __ARGS((void));
 #endif
-static int  ins_copychar __ARGS((linenr_T lnum));
 static int  ins_ctrl_ey __ARGS((int tc));
 #ifdef FEAT_SMARTINDENT
 static void ins_try_si __ARGS((int c));
 #endif
 static colnr_T get_nolist_virtcol __ARGS((void));
+#ifdef FEAT_AUTOCMD
+static char_u *do_insert_char_pre __ARGS((int c));
+#endif
 
 static colnr_T Insstart_textlen;       /* length of line when insert started */
 static colnr_T Insstart_blank_vcol;    /* vcol for first inserted blank */
@@ -361,6 +372,8 @@ edit(cmdchar, startln, count)
      */
     if (cmdchar != 'r' && cmdchar != 'v')
     {
+       pos_T   save_cursor = curwin->w_cursor;
+
 # ifdef FEAT_EVAL
        if (cmdchar == 'R')
            ptr = (char_u *)"r";
@@ -369,8 +382,29 @@ edit(cmdchar, startln, count)
        else
            ptr = (char_u *)"i";
        set_vim_var_string(VV_INSERTMODE, ptr, 1);
+       set_vim_var_string(VV_CHAR, NULL, -1);  /* clear v:char */
 # endif
        apply_autocmds(EVENT_INSERTENTER, NULL, NULL, FALSE, curbuf);
+
+       /* Make sure the cursor didn't move.  Do call check_cursor_col() in
+        * case the text was modified.  Since Insert mode was not started yet
+        * a call to check_cursor_col() may move the cursor, especially with
+        * the "A" command, thus set State to avoid that. Also check that the
+        * line number is still valid (lines may have been deleted).
+        * Do not restore if v:char was set to a non-empty string. */
+       if (!equalpos(curwin->w_cursor, save_cursor)
+# ifdef FEAT_EVAL
+               && *get_vim_var_str(VV_CHAR) == NUL
+# endif
+               && save_cursor.lnum <= curbuf->b_ml.ml_line_count)
+       {
+           int save_state = State;
+
+           curwin->w_cursor = save_cursor;
+           State = INSERT;
+           check_cursor_col();
+           State = save_state;
+       }
     }
 #endif
 
@@ -775,7 +809,20 @@ edit(cmdchar, startln, count)
                 * completion: Add to "compl_leader". */
                if (ins_compl_accept_char(c))
                {
-                   ins_compl_addleader(c);
+#ifdef FEAT_AUTOCMD
+                   /* Trigger InsertCharPre. */
+                   char_u *str = do_insert_char_pre(c);
+                   char_u *p;
+
+                   if (str != NULL)
+                   {
+                       for (p = str; *p != NUL; mb_ptr_adv(p))
+                           ins_compl_addleader(PTR2CHAR(p));
+                       vim_free(str);
+                   }
+                   else
+#endif
+                       ins_compl_addleader(c);
                    continue;
                }
 
@@ -1377,10 +1424,42 @@ docomplete:
                goto do_intr;
 #endif
 
+normalchar:
            /*
-            * Insert a nomal character.
+            * Insert a normal character.
             */
-normalchar:
+#ifdef FEAT_AUTOCMD
+           if (!p_paste)
+           {
+               /* Trigger InsertCharPre. */
+               char_u *str = do_insert_char_pre(c);
+               char_u *p;
+
+               if (str != NULL)
+               {
+                   if (*str != NUL && stop_arrow() != FAIL)
+                   {
+                       /* Insert the new value of v:char literally. */
+                       for (p = str; *p != NUL; mb_ptr_adv(p))
+                       {
+                           c = PTR2CHAR(p);
+                           if (c == CAR || c == K_KENTER || c == NL)
+                               ins_eol(c);
+                           else
+                               ins_char(c);
+                       }
+                       AppendToRedobuffLit(str, -1);
+                   }
+                   vim_free(str);
+                   c = NUL;
+               }
+
+               /* If the new value is already inserted or an empty string
+                * then don't insert any character. */
+               if (c == NUL)
+                   break;
+           }
+#endif
 #ifdef FEAT_SMARTINDENT
            /* Try to perform smart-indenting. */
            ins_try_si(c);
@@ -1398,13 +1477,16 @@ normalchar:
                    Insstart_blank_vcol = get_nolist_virtcol();
            }
 
-           if (vim_iswordc(c) || !echeck_abbr(
+           /* Insert a normal character and check for abbreviations on a
+            * special character.  Let CTRL-] expand abbreviations without
+            * inserting it. */
+           if (vim_iswordc(c) || (!echeck_abbr(
 #ifdef FEAT_MBYTE
                        /* Add ABBR_OFF for characters above 0x100, this is
                         * what check_abbr() expects. */
                        (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
 #endif
-                       c))
+                      c) && c != Ctrl_RSB))
            {
                insert_special(c, FALSE, FALSE);
 #ifdef FEAT_RIGHTLEFT
@@ -1519,6 +1601,21 @@ ins_redraw(ready)
            last_cursormoved = curwin->w_cursor;
        }
 #endif
+#ifdef FEAT_AUTOCMD
+       /* Trigger TextChangedI if b_changedtick differs. */
+       if (!ready && has_textchangedI()
+               && last_changedtick != curbuf->b_changedtick
+# ifdef FEAT_INS_EXPAND
+               && !pum_visible()
+# endif
+               )
+       {
+           if (last_changedtick_buf == curbuf)
+               apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
+           last_changedtick_buf = curbuf;
+           last_changedtick = curbuf->b_changedtick;
+       }
+#endif
        if (must_redraw)
            update_screen(0);
        else if (clear_cmdline || redraw_cmdline)
@@ -1549,12 +1646,16 @@ ins_redraw(ready)
 ins_ctrl_v()
 {
     int                c;
+    int                did_putchar = FALSE;
 
     /* may need to redraw when no more chars available now */
     ins_redraw(FALSE);
 
     if (redrawing() && !char_avail())
+    {
        edit_putchar('^', TRUE);
+       did_putchar = TRUE;
+    }
     AppendToRedobuff((char_u *)CTRL_V_STR);    /* CTRL-V */
 
 #ifdef FEAT_CMDL_INFO
@@ -1562,8 +1663,10 @@ ins_ctrl_v()
 #endif
 
     c = get_literal();
-    edit_unputchar();  /* when line fits in 'columns' the '^' is at the start
-                         of the next line and will not be redrawn */
+    if (did_putchar)
+       /* when the line fits in 'columns' the '^' is at the start of the next
+        * line and will not removed by the redraw */
+       edit_unputchar();
 #ifdef FEAT_CMDL_INFO
     clear_showcmd();
 #endif
@@ -1583,11 +1686,7 @@ static int  pc_status;
 #define PC_STATUS_RIGHT        1       /* right halve of double-wide char */
 #define PC_STATUS_LEFT 2       /* left halve of double-wide char */
 #define PC_STATUS_SET  3       /* pc_bytes was filled */
-#ifdef FEAT_MBYTE
 static char_u pc_bytes[MB_MAXBYTES + 1]; /* saved bytes */
-#else
-static char_u pc_bytes[2];             /* saved bytes */
-#endif
 static int  pc_attr;
 static int  pc_row;
 static int  pc_col;
@@ -1713,9 +1812,9 @@ display_dollar(col)
     static void
 undisplay_dollar()
 {
-    if (dollar_vcol)
+    if (dollar_vcol >= 0)
     {
-       dollar_vcol = 0;
+       dollar_vcol = -1;
        redrawWinline(curwin->w_cursor.lnum, FALSE);
     }
 }
@@ -2133,7 +2232,7 @@ vim_is_ctrl_x_key(c)
                    || c == Ctrl_I || c == Ctrl_D || c == Ctrl_P
                    || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V
                    || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O
-                   || c == Ctrl_S || c == 's');
+                   || c == Ctrl_S || c == Ctrl_K || c == 's');
        case CTRL_X_SCROLL:
            return (c == Ctrl_Y || c == Ctrl_E);
        case CTRL_X_WHOLE_LINE:
@@ -2658,6 +2757,7 @@ set_completion(startcol, list)
     if (stop_arrow() == FAIL)
        return;
 
+    compl_direction = FORWARD;
     if (startcol > curwin->w_cursor.col)
        startcol = curwin->w_cursor.col;
     compl_col = startcol;
@@ -3034,7 +3134,7 @@ ins_compl_dictionaries(dict_start, pat, flags, thesaurus)
 
 theend:
     p_scs = save_p_scs;
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
     vim_free(buf);
 }
 
@@ -3295,7 +3395,7 @@ ins_compl_bs()
     /* Deleted more than what was used to find matches or didn't finish
      * finding all matches: need to look for matches all over again. */
     if (curwin->w_cursor.col <= compl_col + compl_length
-                                                    || compl_was_interrupted)
+                                                 || ins_compl_need_restart())
        ins_compl_restart();
 
     vim_free(compl_leader);
@@ -3303,12 +3403,29 @@ ins_compl_bs()
     if (compl_leader != NULL)
     {
        ins_compl_new_leader();
+       if (compl_shown_match != NULL)
+           /* Make sure current match is not a hidden item. */
+           compl_curr_match = compl_shown_match;
        return NUL;
     }
     return K_BS;
 }
 
 /*
+ * Return TRUE when we need to find matches again, ins_compl_restart() is to
+ * be called.
+ */
+    static int
+ins_compl_need_restart()
+{
+    /* Return TRUE if we didn't complete finding matches or when the
+     * 'completefunc' returned "always" in the "refresh" dictionary item. */
+    return compl_was_interrupted
+       || ((ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
+                                                 && compl_opt_refresh_always);
+}
+
+/*
  * Called after changing "compl_leader".
  * Show the popup menu with a different set of matches.
  * May also search for matches again if the previous search was interrupted.
@@ -3350,6 +3467,7 @@ ins_compl_new_leader()
     }
 
     compl_enter_selects = !compl_used_match;
+    compl_shown_match = compl_curr_match = compl_first_match;
 
     /* Show the popup menu with a different set of matches. */
     ins_compl_show_pum();
@@ -3391,20 +3509,32 @@ ins_compl_addleader(c)
        (*mb_char2bytes)(c, buf);
        buf[cc] = NUL;
        ins_char_bytes(buf, cc);
+       if (compl_opt_refresh_always)
+           AppendToRedobuff(buf);
     }
     else
 #endif
+    {
        ins_char(c);
+       if (compl_opt_refresh_always)
+           AppendCharToRedobuff(c);
+    }
 
     /* If we didn't complete finding matches we must search again. */
-    if (compl_was_interrupted)
+    if (ins_compl_need_restart())
        ins_compl_restart();
 
-    vim_free(compl_leader);
-    compl_leader = vim_strnsave(ml_get_curline() + compl_col,
+    /* When 'always' is set, don't reset compl_leader. While completing,
+     * cursor doesn't point original position, changing compl_leader would
+     * break redo. */
+    if (!compl_opt_refresh_always)
+    {
+       vim_free(compl_leader);
+       compl_leader = vim_strnsave(ml_get_curline() + compl_col,
                                     (int)(curwin->w_cursor.col - compl_col));
-    if (compl_leader != NULL)
-       ins_compl_new_leader();
+       if (compl_leader != NULL)
+           ins_compl_new_leader();
+    }
 }
 
 /*
@@ -3480,11 +3610,7 @@ ins_compl_addfrommatch()
            return;
     }
     p += len;
-#ifdef FEAT_MBYTE
-    c = mb_ptr2char(p);
-#else
-    c = *p;
-#endif
+    c = PTR2CHAR(p);
     ins_compl_addleader(c);
 }
 
@@ -3653,9 +3779,6 @@ ins_compl_prep(c)
             * memory that was used, and make sure we can redo the insert. */
            if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
            {
-               char_u  *p;
-               int     temp = 0;
-
                /*
                 * If any of the original typed text has been changed, eg when
                 * ignorecase is set, we must add back-spaces to the redo
@@ -3666,25 +3789,9 @@ ins_compl_prep(c)
                 */
                if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
                    ptr = compl_curr_match->cp_str;
-               else if (compl_leader != NULL)
-                   ptr = compl_leader;
                else
-                   ptr = compl_orig_text;
-               if (compl_orig_text != NULL)
-               {
-                   p = compl_orig_text;
-                   for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
-                                                                      ++temp)
-                       ;
-#ifdef FEAT_MBYTE
-                   if (temp > 0)
-                       temp -= (*mb_head_off)(compl_orig_text, p + temp);
-#endif
-                   for (p += temp; *p != NUL; mb_ptr_adv(p))
-                       AppendCharToRedobuff(K_BS);
-               }
-               if (ptr != NULL)
-                   AppendToRedobuffLit(ptr + temp, -1);
+                   ptr = NULL;
+               ins_compl_fixRedoBufForLeader(ptr);
            }
 
 #ifdef FEAT_CINDENT
@@ -3759,8 +3866,19 @@ ins_compl_prep(c)
            if (want_cindent && in_cinkeys(KEY_COMPLETE, ' ', inindent(0)))
                do_c_expr_indent();
 #endif
+#ifdef FEAT_AUTOCMD
+           /* Trigger the CompleteDone event to give scripts a chance to act
+            * upon the completion. */
+           apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
+#endif
        }
     }
+#ifdef FEAT_AUTOCMD
+    else if (ctrl_x_mode == CTRL_X_LOCAL_MSG)
+       /* Trigger the CompleteDone event to give scripts a chance to act
+        * upon the (possibly failed) completion. */
+       apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
+#endif
 
     /* reset continue_* if we left expansion-mode, if we stay they'll be
      * (re)set properly in ins_complete() */
@@ -3774,6 +3892,44 @@ ins_compl_prep(c)
 }
 
 /*
+ * Fix the redo buffer for the completion leader replacing some of the typed
+ * text.  This inserts backspaces and appends the changed text.
+ * "ptr" is the known leader text or NUL.
+ */
+    static void
+ins_compl_fixRedoBufForLeader(ptr_arg)
+    char_u *ptr_arg;
+{
+    int            len;
+    char_u  *p;
+    char_u  *ptr = ptr_arg;
+
+    if (ptr == NULL)
+    {
+       if (compl_leader != NULL)
+           ptr = compl_leader;
+       else
+           return;  /* nothing to do */
+    }
+    if (compl_orig_text != NULL)
+    {
+       p = compl_orig_text;
+       for (len = 0; p[len] != NUL && p[len] == ptr[len]; ++len)
+           ;
+#ifdef FEAT_MBYTE
+       if (len > 0)
+           len -= (*mb_head_off)(p, p + len);
+#endif
+       for (p += len; *p != NUL; mb_ptr_adv(p))
+           AppendCharToRedobuff(K_BS);
+    }
+    else
+       len = 0;
+    if (ptr != NULL)
+       AppendToRedobuffLit(ptr + len, -1);
+}
+
+/*
  * Loops through the list of windows, loaded-buffers or non-loaded-buffers
  * (depending on flag) starting from buf and looking for a non-scanned
  * buffer (other than curbuf). curbuf is special, if it is called with
@@ -3829,10 +3985,14 @@ expand_by_function(type, base)
     int                type;       /* CTRL_X_OMNI or CTRL_X_FUNCTION */
     char_u     *base;
 {
-    list_T      *matchlist;
+    list_T      *matchlist = NULL;
+    dict_T     *matchdict = NULL;
     char_u     *args[2];
     char_u     *funcname;
     pos_T      pos;
+    win_T      *curwin_save;
+    buf_T      *curbuf_save;
+    typval_T   rettv;
 
     funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
     if (*funcname == NUL)
@@ -3843,13 +4003,50 @@ expand_by_function(type, base)
     args[1] = base;
 
     pos = curwin->w_cursor;
-    matchlist = call_func_retlist(funcname, 2, args, FALSE);
+    curwin_save = curwin;
+    curbuf_save = curbuf;
+
+    /* Call a function, which returns a list or dict. */
+    if (call_vim_function(funcname, 2, args, FALSE, FALSE, &rettv) == OK)
+    {
+       switch (rettv.v_type)
+       {
+           case VAR_LIST:
+               matchlist = rettv.vval.v_list;
+               break;
+           case VAR_DICT:
+               matchdict = rettv.vval.v_dict;
+               break;
+           default:
+               /* TODO: Give error message? */
+               clear_tv(&rettv);
+               break;
+       }
+    }
+
+    if (curwin_save != curwin || curbuf_save != curbuf)
+    {
+       EMSG(_(e_complwin));
+       goto theend;
+    }
     curwin->w_cursor = pos;    /* restore the cursor position */
-    if (matchlist == NULL)
-       return;
+    check_cursor();
+    if (!equalpos(curwin->w_cursor, pos))
+    {
+       EMSG(_(e_compldel));
+       goto theend;
+    }
+
+    if (matchlist != NULL)
+       ins_compl_add_list(matchlist);
+    else if (matchdict != NULL)
+       ins_compl_add_dict(matchdict);
 
-    ins_compl_add_list(matchlist);
-    list_unref(matchlist);
+theend:
+    if (matchdict != NULL)
+       dict_unref(matchdict);
+    if (matchlist != NULL)
+       list_unref(matchlist);
 }
 #endif /* FEAT_COMPL_FUNC */
 
@@ -3876,6 +4073,33 @@ ins_compl_add_list(list)
 }
 
 /*
+ * Add completions from a dict.
+ */
+    static void
+ins_compl_add_dict(dict)
+    dict_T     *dict;
+{
+    dictitem_T *di_refresh;
+    dictitem_T *di_words;
+
+    /* Check for optional "refresh" item. */
+    compl_opt_refresh_always = FALSE;
+    di_refresh = dict_find(dict, (char_u *)"refresh", 7);
+    if (di_refresh != NULL && di_refresh->di_tv.v_type == VAR_STRING)
+    {
+       char_u  *v = di_refresh->di_tv.vval.v_string;
+
+       if (v != NULL && STRCMP(v, (char_u *)"always") == 0)
+           compl_opt_refresh_always = TRUE;
+    }
+
+    /* Add completions from a "words" list. */
+    di_words = dict_find(dict, (char_u *)"words", 5);
+    if (di_words != NULL && di_words->di_tv.v_type == VAR_LIST)
+       ins_compl_add_list(di_words->di_tv.vval.v_list);
+}
+
+/*
  * Add a match to the list of matches from a typeval_T.
  * If the given string is already in the list of completions, then return
  * NOTDONE, otherwise add it to the list and return OK.  If there is an error,
@@ -3889,6 +4113,7 @@ ins_compl_add_tv(tv, dir)
     char_u     *word;
     int                icase = FALSE;
     int                adup = FALSE;
+    int                aempty = FALSE;
     char_u     *(cptext[CPT_COUNT]);
 
     if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
@@ -3906,13 +4131,15 @@ ins_compl_add_tv(tv, dir)
            icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
        if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
            adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
+       if (get_dict_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
+           aempty = get_dict_number(tv->vval.v_dict, (char_u *)"empty");
     }
     else
     {
        word = get_tv_string_chk(tv);
        vim_memset(cptext, 0, sizeof(cptext));
     }
-    if (word == NULL || *word == NUL)
+    if (word == NULL || (!aempty && *word == NUL))
        return FAIL;
     return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
 }
@@ -4015,8 +4242,8 @@ ins_compl_get_exp(ini)
                        ins_buf->b_fname == NULL
                            ? buf_spname(ins_buf)
                            : ins_buf->b_sfname == NULL
-                               ? (char *)ins_buf->b_fname
-                               : (char *)ins_buf->b_sfname);
+                               ? ins_buf->b_fname
+                               : ins_buf->b_sfname);
                (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
            }
            else if (*e_cpt == NUL)
@@ -4118,13 +4345,7 @@ ins_compl_get_exp(ini)
 
                /* May change home directory back to "~". */
                tilde_replace(compl_pattern, num_matches, matches);
-               ins_compl_add_matches(num_matches, matches,
-#ifdef CASE_INSENSITIVE_FILENAME
-                       TRUE
-#else
-                       FALSE
-#endif
-                       );
+               ins_compl_add_matches(num_matches, matches, p_fic || p_wic);
            }
            break;
 
@@ -4403,6 +4624,11 @@ ins_compl_next(allow_get_expansion, count, insert_match)
     int            found_end = FALSE;
     int            advance;
 
+    /* When user complete function return -1 for findstart which is next
+     * time of 'always', compl_shown_match become NULL. */
+    if (compl_shown_match == NULL)
+       return -1;
+
     if (compl_leader != NULL
                        && (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
     {
@@ -4994,6 +5220,8 @@ ins_complete(c)
            int         col;
            char_u      *funcname;
            pos_T       pos;
+           win_T       *curwin_save;
+           buf_T       *curbuf_save;
 
            /* Call 'completefunc' or 'omnifunc' and get pattern length as a
             * string */
@@ -5009,8 +5237,40 @@ ins_complete(c)
            args[0] = (char_u *)"1";
            args[1] = NULL;
            pos = curwin->w_cursor;
+           curwin_save = curwin;
+           curbuf_save = curbuf;
            col = call_func_retnr(funcname, 2, args, FALSE);
+           if (curwin_save != curwin || curbuf_save != curbuf)
+           {
+               EMSG(_(e_complwin));
+               return FAIL;
+           }
            curwin->w_cursor = pos;     /* restore the cursor position */
+           check_cursor();
+           if (!equalpos(curwin->w_cursor, pos))
+           {
+               EMSG(_(e_compldel));
+               return FAIL;
+           }
+
+           /* Return value -2 means the user complete function wants to
+            * cancel the complete without an error.
+            * Return value -3 does the same as -2 and leaves CTRL-X mode.*/
+           if (col == -2)
+               return FAIL;
+           if (col == -3)
+           {
+               ctrl_x_mode = 0;
+               edit_submode = NULL;
+               msg_clr_cmdline();
+               return FAIL;
+           }
+
+           /*
+            * Reset extended parameters of completion, when start new
+            * completion.
+            */
+           compl_opt_refresh_always = FALSE;
 
            if (col < 0)
                col = curs_col;
@@ -5089,6 +5349,10 @@ ins_complete(c)
        else
            edit_submode = (char_u *)_(CTRL_X_MSG(ctrl_x_mode));
 
+       /* If any of the original typed text has been changed we need to fix
+        * the redo buffer. */
+       ins_compl_fixRedoBufForLeader(NULL);
+
        /* Always add completion for the original text. */
        vim_free(compl_orig_text);
        compl_orig_text = vim_strnsave(line + compl_col, compl_length);
@@ -5249,7 +5513,7 @@ ins_complete(c)
                                compl_curr_match->cp_number);
                edit_submode_extra = match_ref;
                edit_submode_highl = HLF_R;
-               if (dollar_vcol)
+               if (dollar_vcol >= 0)
                    curs_columns(FALSE);
            }
        }
@@ -5558,6 +5822,16 @@ insert_special(c, allow_modmask, ctrlv)
 # define WHITECHAR(cc) vim_iswhite(cc)
 #endif
 
+/*
+ * "flags": INSCHAR_FORMAT - force formatting
+ *         INSCHAR_CTRLV  - char typed just after CTRL-V
+ *         INSCHAR_NO_FEX - don't use 'formatexpr'
+ *
+ *   NOTE: passes the flags value straight through to internal_format() which,
+ *        beside INSCHAR_FORMAT (above), is also looking for these:
+ *         INSCHAR_DO_COM   - format comments
+ *         INSCHAR_COM_LIST - format comments with num list or 2nd line indent
+ */
     void
 insertchar(c, flags, second_indent)
     int                c;                      /* character to insert or NUL */
@@ -5636,7 +5910,7 @@ insertchar(c, flags, second_indent)
         * Need to remove existing (middle) comment leader and insert end
         * comment leader.  First, check what comment leader we can find.
         */
-       i = get_leader_len(line = ml_get_curline(), &p, FALSE);
+       i = get_leader_len(line = ml_get_curline(), &p, FALSE, TRUE);
        if (i > 0 && vim_strchr(p, COM_MIDDLE) != NULL) /* Just checking */
        {
            /* Skip middle-comment string */
@@ -5691,6 +5965,8 @@ insertchar(c, flags, second_indent)
      * Don't do this when 'cindent' or 'indentexpr' is set, because we might
      * need to re-indent at a ':', or any other character (but not what
      * 'paste' is set)..
+     * Don't do this when there an InsertCharPre autocommand is defined,
+     * because we need to fire the event for every character.
      */
 #ifdef USE_ON_FLY_SCROLL
     dont_scroll = FALSE;               /* allow scrolling here */
@@ -5708,6 +5984,9 @@ insertchar(c, flags, second_indent)
 #ifdef FEAT_RIGHTLEFT
            && !p_ri
 #endif
+#ifdef FEAT_AUTOCMD
+           && !has_insertcharpre()
+#endif
               )
     {
 #define INPUT_BUFLEN 100
@@ -5795,6 +6074,9 @@ insertchar(c, flags, second_indent)
 
 /*
  * Format text at the current insert position.
+ *
+ * If the INSCHAR_COM_LIST flag is present, then the value of second_indent
+ * will be the comment leader length sent to open_line().
  */
     static void
 internal_format(textwidth, second_indent, flags, format_only, c)
@@ -5869,7 +6151,7 @@ internal_format(textwidth, second_indent, flags, format_only, c)
 
        /* Don't break until after the comment leader */
        if (do_comments)
-           leader_len = get_leader_len(ml_get_curline(), NULL, FALSE);
+           leader_len = get_leader_len(ml_get_curline(), NULL, FALSE, TRUE);
        else
            leader_len = 0;
 
@@ -5902,6 +6184,7 @@ internal_format(textwidth, second_indent, flags, format_only, c)
         * Stop at first entered white when 'formatoptions' has 'v'
         */
        while ((!fo_ins_blank && !has_format_option(FO_INS_VI))
+                   || (flags & INSCHAR_FORMAT)
                    || curwin->w_cursor.lnum != Insstart.lnum
                    || curwin->w_cursor.col >= Insstart.col)
        {
@@ -6072,23 +6355,59 @@ internal_format(textwidth, second_indent, flags, format_only, c)
                + (fo_white_par ? OPENLINE_KEEPTRAIL : 0)
 #ifdef FEAT_COMMENTS
                + (do_comments ? OPENLINE_DO_COM : 0)
+               + ((flags & INSCHAR_COM_LIST) ? OPENLINE_COM_LIST : 0)
 #endif
-               , old_indent);
-       old_indent = 0;
+               , ((flags & INSCHAR_COM_LIST) ? second_indent : old_indent));
+       if (!(flags & INSCHAR_COM_LIST))
+           old_indent = 0;
 
        replace_offset = 0;
        if (first_line)
        {
-           if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
-               second_indent = get_number_indent(curwin->w_cursor.lnum -1);
-           if (second_indent >= 0)
+           if (!(flags & INSCHAR_COM_LIST))
            {
+               /*
+                * This section is for auto-wrap of numeric lists.  When not
+                * in insert mode (i.e. format_lines()), the INSCHAR_COM_LIST
+                * flag will be set and open_line() will handle it (as seen
+                * above).  The code here (and in get_number_indent()) will
+                * recognize comments if needed...
+                */
+               if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
+                   second_indent =
+                                get_number_indent(curwin->w_cursor.lnum - 1);
+               if (second_indent >= 0)
+               {
 #ifdef FEAT_VREPLACE
-               if (State & VREPLACE_FLAG)
-                   change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE);
-               else
+                   if (State & VREPLACE_FLAG)
+                       change_indent(INDENT_SET, second_indent,
+                                                           FALSE, NUL, TRUE);
+                   else
 #endif
-                   (void)set_indent(second_indent, SIN_CHANGED);
+#ifdef FEAT_COMMENTS
+                       if (leader_len > 0 && second_indent - leader_len > 0)
+                   {
+                       int i;
+                       int padding = second_indent - leader_len;
+
+                       /* We started at the first_line of a numbered list
+                        * that has a comment.  the open_line() function has
+                        * inserted the proper comment leader and positioned
+                        * the cursor at the end of the split line.  Now we
+                        * add the additional whitespace needed after the
+                        * comment leader for the numbered list.  */
+                       for (i = 0; i < padding; i++)
+                           ins_str((char_u *)" ");
+                       changed_bytes(curwin->w_cursor.lnum, leader_len);
+                   }
+                   else
+                   {
+#endif
+                       (void)set_indent(second_indent, SIN_CHANGED);
+#ifdef FEAT_COMMENTS
+                   }
+#endif
+               }
            }
            first_line = FALSE;
        }
@@ -6194,7 +6513,7 @@ auto_format(trailblank, prev_line)
     /* With the 'c' flag in 'formatoptions' and 't' missing: only format
      * comments. */
     if (has_format_option(FO_WRAP_COMS) && !has_format_option(FO_WRAP)
-                                    && get_leader_len(old, NULL, FALSE) == 0)
+                                    && get_leader_len(old, NULL, FALSE, TRUE) == 0)
        return;
 #endif
 
@@ -6598,11 +6917,7 @@ set_last_insert(c)
     char_u     *s;
 
     vim_free(last_insert);
-#ifdef FEAT_MBYTE
     last_insert = alloc(MB_MAXBYTES * 3 + 5);
-#else
-    last_insert = alloc(6);
-#endif
     if (last_insert != NULL)
     {
        s = last_insert;
@@ -6640,7 +6955,7 @@ add_char2buf(c, s)
     char_u     *s;
 {
 #ifdef FEAT_MBYTE
-    char_u     temp[MB_MAXBYTES];
+    char_u     temp[MB_MAXBYTES + 1];
     int                i;
     int                len;
 
@@ -6856,7 +7171,7 @@ cursor_up(n, upd_topline)
            /*
             * Count each sequence of folded lines as one logical line.
             */
-           /* go to the the start of the current fold */
+           /* go to the start of the current fold */
            (void)hasFolding(lnum, &lnum, NULL);
 
            while (n--)
@@ -6907,7 +7222,7 @@ cursor_down(n, upd_topline)
        (void)hasFolding(lnum, NULL, &lnum);
 #endif
        /* This fails if the cursor is already in the last line or would move
-        * beyound the last line and '-' is in 'cpoptions' */
+        * beyond the last line and '-' is in 'cpoptions' */
        if (lnum >= curbuf->b_ml.ml_line_count
                || (lnum + n > curbuf->b_ml.ml_line_count
                    && vim_strchr(p_cpo, CPO_MINUS) != NULL))
@@ -7202,7 +7517,7 @@ mb_replace_pop_ins(cc)
     int                cc;
 {
     int                n;
-    char_u     buf[MB_MAXBYTES];
+    char_u     buf[MB_MAXBYTES + 1];
     int                i;
     int                c;
 
@@ -7409,7 +7724,7 @@ fix_indent()
 /*
  * return TRUE if 'cinkeys' contains the key "keytyped",
  * when == '*':            Only if key is preceded with '*'    (indent before insert)
- * when == '!':            Only if key is prededed with '!'    (don't insert)
+ * when == '!':            Only if key is preceded with '!'    (don't insert)
  * when == ' ':            Only if key is not preceded with '*'(indent afterwards)
  *
  * "keytyped" can have a few special values:
@@ -7812,16 +8127,18 @@ ins_reg()
     --no_mapping;
 
 #ifdef FEAT_EVAL
-    /*
-     * Don't call u_sync() while getting the expression,
-     * evaluating it or giving an error message for it!
-     */
+    /* Don't call u_sync() while typing the expression or giving an error
+     * message for it. Only call it explicitly. */
     ++no_u_sync;
     if (regname == '=')
     {
 # ifdef USE_IM_CONTROL
        int     im_on = im_get_status();
 # endif
+       /* Sync undo when evaluating the expression calls setline() or
+        * append(), so that it can be undone separately. */
+       u_sync_once = 2;
+
        regname = get_expr_register();
 # ifdef USE_IM_CONTROL
        /* Restore the Input Method. */
@@ -7861,6 +8178,9 @@ ins_reg()
 #ifdef FEAT_EVAL
     }
     --no_u_sync;
+    if (u_sync_once == 1)
+       ins_need_undo = TRUE;
+    u_sync_once = 0;
 #endif
 #ifdef FEAT_CMDL_INFO
     clear_showcmd();
@@ -8235,7 +8555,7 @@ ins_start_select(c)
 #endif
 
 /*
- * <Insert> key in Insert mode: toggle insert/remplace mode.
+ * <Insert> key in Insert mode: toggle insert/replace mode.
  */
     static void
 ins_insert(replaceState)
@@ -8352,7 +8672,7 @@ ins_del()
     {
        temp = curwin->w_cursor.col;
        if (!can_bs(BS_EOL)             /* only if "eol" included */
-               || do_join(2, FALSE, TRUE) == FAIL)
+               || do_join(2, FALSE, TRUE, FALSE) == FAIL)
            vim_beep();
        else
            curwin->w_cursor.col = temp;
@@ -8533,7 +8853,7 @@ ins_bs(c, mode, inserted_space_p)
                        ptr[len - 1] = NUL;
                }
 
-               (void)do_join(2, FALSE, FALSE);
+               (void)do_join(2, FALSE, FALSE, FALSE);
                if (temp == NUL && gchar_cursor() != NUL)
                    inc_cursor();
            }
@@ -8612,7 +8932,7 @@ ins_bs(c, mode, inserted_space_p)
         */
        if (       mode == BACKSPACE_CHAR
                && ((p_sta && in_indent)
-                   || (curbuf->b_p_sts != 0
+                   || (get_sts_value() != 0
                        && curwin->w_cursor.col > 0
                        && (*(ml_get_cursor() - 1) == TAB
                            || (*(ml_get_cursor() - 1) == ' '
@@ -8626,9 +8946,9 @@ ins_bs(c, mode, inserted_space_p)
 
            *inserted_space_p = FALSE;
            if (p_sta && in_indent)
-               ts = curbuf->b_p_sw;
+               ts = (int)get_sw_value();
            else
-               ts = curbuf->b_p_sts;
+               ts = (int)get_sts_value();
            /* Compute the virtual column where we want to be.  Since
             * 'showbreak' may get in the way, need to get the last column of
             * the previous character. */
@@ -8768,7 +9088,7 @@ ins_bs(c, mode, inserted_space_p)
      * We can emulate the vi behaviour by pretending there is a dollar
      * displayed even when there isn't.
      *  --pkv Sun Jan 19 01:56:40 EST 2003 */
-    if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == 0)
+    if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == -1)
        dollar_vcol = curwin->w_virtcol;
 
 #ifdef FEAT_FOLDING
@@ -8845,9 +9165,8 @@ ins_mousescroll(dir)
 
     tpos = curwin->w_cursor;
 
-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
-    /* Currently the mouse coordinates are only known in the GUI. */
-    if (gui.in_use && mouse_row >= 0 && mouse_col >= 0)
+# ifdef FEAT_WINDOWS
+    if (mouse_row >= 0 && mouse_col >= 0)
     {
        int row, col;
 
@@ -8897,7 +9216,7 @@ ins_mousescroll(dir)
 # endif
     }
 
-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
+# ifdef FEAT_WINDOWS
     curwin->w_redr_status = TRUE;
 
     curwin = old_curwin;
@@ -9316,8 +9635,8 @@ ins_tab()
      * When nothing special, insert TAB like a normal character
      */
     if (!curbuf->b_p_et
-           && !(p_sta && ind && curbuf->b_p_ts != curbuf->b_p_sw)
-           && curbuf->b_p_sts == 0)
+           && !(p_sta && ind && curbuf->b_p_ts != get_sw_value())
+           && get_sts_value() == 0)
        return TRUE;
 
     if (stop_arrow() == FAIL)
@@ -9332,9 +9651,9 @@ ins_tab()
     AppendToRedobuff((char_u *)"\t");
 
     if (p_sta && ind)          /* insert tab in indent, use 'shiftwidth' */
-       temp = (int)curbuf->b_p_sw;
-    else if (curbuf->b_p_sts > 0) /* use 'softtabstop' when set */
-       temp = (int)curbuf->b_p_sts;
+       temp = (int)get_sw_value();
+    else if (curbuf->b_p_sts != 0) /* use 'softtabstop' when set */
+       temp = (int)get_sts_value();
     else                       /* otherwise use 'tabstop' */
        temp = (int)curbuf->b_p_ts;
     temp -= get_nolist_virtcol() % temp;
@@ -9362,7 +9681,7 @@ ins_tab()
     /*
      * When 'expandtab' not set: Replace spaces by TABs where possible.
      */
-    if (!curbuf->b_p_et && (curbuf->b_p_sts || (p_sta && ind)))
+    if (!curbuf->b_p_et && (get_sts_value() || (p_sta && ind)))
     {
        char_u          *ptr;
 #ifdef FEAT_VREPLACE
@@ -9598,6 +9917,7 @@ ins_digraph()
 {
     int            c;
     int            cc;
+    int            did_putchar = FALSE;
 
     pc_status = PC_STATUS_UNSET;
     if (redrawing() && !char_avail())
@@ -9606,6 +9926,7 @@ ins_digraph()
        ins_redraw(FALSE);
 
        edit_putchar('?', TRUE);
+       did_putchar = TRUE;
 #ifdef FEAT_CMDL_INFO
        add_to_showcmd_c(Ctrl_K);
 #endif
@@ -9622,8 +9943,10 @@ ins_digraph()
     c = plain_vgetc();
     --no_mapping;
     --allow_keys;
-    edit_unputchar();  /* when line fits in 'columns' the '?' is at the start
-                         of the next line and will not be redrawn */
+    if (did_putchar)
+       /* when the line fits in 'columns' the '?' is at the start of the next
+        * line and will not be removed by the redraw */
+       edit_unputchar();
 
     if (IS_SPECIAL(c) || mod_mask)         /* special key */
     {
@@ -9635,6 +9958,7 @@ ins_digraph()
     }
     if (c != ESC)
     {
+       did_putchar = FALSE;
        if (redrawing() && !char_avail())
        {
            /* may need to redraw when no more chars available now */
@@ -9642,11 +9966,9 @@ ins_digraph()
 
            if (char2cells(c) == 1)
            {
-               /* first remove the '?', otherwise it's restored when typing
-                * an ESC next */
-               edit_unputchar();
                ins_redraw(FALSE);
                edit_putchar(c, TRUE);
+               did_putchar = TRUE;
            }
 #ifdef FEAT_CMDL_INFO
            add_to_showcmd_c(c);
@@ -9657,8 +9979,10 @@ ins_digraph()
        cc = plain_vgetc();
        --no_mapping;
        --allow_keys;
-       edit_unputchar();  /* when line fits in 'columns' the '?' is at the
-                             start of the next line and will not be redrawn */
+       if (did_putchar)
+           /* when the line fits in 'columns' the '?' is at the start of the
+            * next line and will not be removed by a redraw */
+           edit_unputchar();
        if (cc != ESC)
        {
            AppendToRedobuff((char_u *)CTRL_V_STR);
@@ -9680,7 +10004,7 @@ ins_digraph()
  * Handle CTRL-E and CTRL-Y in Insert mode: copy char from other line.
  * Returns the char to be inserted, or NUL if none found.
  */
-    static int
+    int
 ins_copychar(lnum)
     linenr_T   lnum;
 {
@@ -9870,3 +10194,52 @@ get_nolist_virtcol()
     validate_virtcol();
     return curwin->w_virtcol;
 }
+
+#ifdef FEAT_AUTOCMD
+/*
+ * Handle the InsertCharPre autocommand.
+ * "c" is the character that was typed.
+ * Return a pointer to allocated memory with the replacement string.
+ * Return NULL to continue inserting "c".
+ */
+    static char_u *
+do_insert_char_pre(c)
+    int c;
+{
+    char_u     *res;
+    char_u     buf[MB_MAXBYTES + 1];
+
+    /* Return quickly when there is nothing to do. */
+    if (!has_insertcharpre())
+       return NULL;
+
+#ifdef FEAT_MBYTE
+    if (has_mbyte)
+       buf[(*mb_char2bytes)(c, buf)] = NUL;
+    else
+#endif
+    {
+       buf[0] = c;
+       buf[1] = NUL;
+    }
+
+    /* Lock the text to avoid weird things from happening. */
+    ++textlock;
+    set_vim_var_string(VV_CHAR, buf, -1);  /* set v:char */
+
+    res = NULL;
+    if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
+    {
+       /* Get the value of v:char.  It may be empty or more than one
+        * character.  Only use it when changed, otherwise continue with the
+        * original character to avoid breaking autoindent. */
+       if (STRCMP(buf, get_vim_var_str(VV_CHAR)) != 0)
+           res = vim_strsave(get_vim_var_str(VV_CHAR));
+    }
+
+    set_vim_var_string(VV_CHAR, NULL, -1);  /* clear v:char */
+    --textlock;
+
+    return res;
+}
+#endif
index fc01006..b9d739d 100644 (file)
@@ -10,9 +10,6 @@
 /*
  * eval.c: Expression evaluation.
  */
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"    /* for mch_open(), must be before vim.h */
-#endif
 
 #include "vim.h"
 
@@ -115,13 +112,11 @@ static char *e_dictrange = N_("E719: Cannot use [:] with a Dictionary");
 static char *e_letwrong = N_("E734: Wrong variable type for %s=");
 static char *e_nofunc = N_("E130: Unknown function: %s");
 static char *e_illvar = N_("E461: Illegal variable name: %s");
+#ifdef FEAT_FLOAT
+static char *e_float_as_string = N_("E806: using Float as a String");
+#endif
 
-/*
- * All user-defined global variables are stored in dictionary "globvardict".
- * "globvars_var" is the variable that is used for "g:".
- */
-static dict_T          globvardict;
-static dictitem_T      globvars_var;
+static dictitem_T      globvars_var;           /* variable used for g: */
 #define globvarht globvardict.dv_hashtab
 
 /*
@@ -355,13 +350,14 @@ static struct vimvar
     {VV_NAME("swapname",        VAR_STRING), VV_RO},
     {VV_NAME("swapchoice",      VAR_STRING), 0},
     {VV_NAME("swapcommand",     VAR_STRING), VV_RO},
-    {VV_NAME("char",            VAR_STRING), VV_RO},
+    {VV_NAME("char",            VAR_STRING), 0},
     {VV_NAME("mouse_win",       VAR_NUMBER), 0},
     {VV_NAME("mouse_lnum",      VAR_NUMBER), 0},
     {VV_NAME("mouse_col",       VAR_NUMBER), 0},
     {VV_NAME("operator",        VAR_STRING), VV_RO},
     {VV_NAME("searchforward",   VAR_NUMBER), 0},
     {VV_NAME("oldfiles",        VAR_LIST), 0},
+    {VV_NAME("windowid",        VAR_NUMBER), VV_RO},
 };
 
 /* shorthand */
@@ -372,19 +368,11 @@ static struct vimvar
 #define vv_list                vv_di.di_tv.vval.v_list
 #define vv_tv          vv_di.di_tv
 
-/*
- * The v: variables are stored in dictionary "vimvardict".
- * "vimvars_var" is the variable that is used for the "l:" scope.
- */
-static dict_T          vimvardict;
-static dictitem_T      vimvars_var;
+static dictitem_T      vimvars_var;            /* variable used for v: */
 #define vimvarht  vimvardict.dv_hashtab
 
 static void prepare_vimvar __ARGS((int idx, typval_T *save_tv));
 static void restore_vimvar __ARGS((int idx, typval_T *save_tv));
-#if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
-static int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, typval_T *rettv));
-#endif
 static int ex_let_vars __ARGS((char_u *arg, typval_T *tv, int copy, int semicolon, int var_count, char_u *nextchars));
 static char_u *skip_var_list __ARGS((char_u *arg, int *var_count, int *semicolon));
 static char_u *skip_var_one __ARGS((char_u *arg));
@@ -405,8 +393,6 @@ static char_u *get_lval __ARGS((char_u *name, typval_T *rettv, lval_T *lp, int u
 static void clear_lval __ARGS((lval_T *lp));
 static void set_var_lval __ARGS((lval_T *lp, char_u *endp, typval_T *rettv, int copy, char_u *op));
 static int tv_op __ARGS((typval_T *tv1, typval_T *tv2, char_u  *op));
-static void list_add_watch __ARGS((list_T *l, listwatch_T *lw));
-static void list_rem_watch __ARGS((list_T *l, listwatch_T *lwrem));
 static void list_fix_watch __ARGS((list_T *l, listitem_T *item));
 static void ex_unletlock __ARGS((exarg_T *eap, char_u *argstart, int deep));
 static int do_unlet_var __ARGS((lval_T *lp, char_u *name_end, int forceit));
@@ -429,32 +415,21 @@ static int get_string_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
 static int get_lit_string_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
 static int get_list_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
 static int rettv_list_alloc __ARGS((typval_T *rettv));
-static listitem_T *listitem_alloc __ARGS((void));
-static void listitem_free __ARGS((listitem_T *item));
-static void listitem_remove __ARGS((list_T *l, listitem_T *item));
 static long list_len __ARGS((list_T *l));
-static int list_equal __ARGS((list_T *l1, list_T *l2, int ic));
-static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic));
-static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic));
-static listitem_T *list_find __ARGS((list_T *l, long n));
+static int list_equal __ARGS((list_T *l1, list_T *l2, int ic, int recursive));
+static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic, int recursive));
+static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic, int recursive));
 static long list_find_nr __ARGS((list_T *l, long idx, int *errorp));
 static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
-static void list_append __ARGS((list_T *l, listitem_T *item));
 static int list_append_number __ARGS((list_T *l, varnumber_T n));
-static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
 static int list_extend __ARGS((list_T  *l1, list_T *l2, listitem_T *bef));
 static int list_concat __ARGS((list_T *l1, list_T *l2, typval_T *tv));
 static list_T *list_copy __ARGS((list_T *orig, int deep, int copyID));
-static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
 static char_u *list2string __ARGS((typval_T *tv, int copyID));
+static int list_join_inner __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo_style, int copyID, garray_T *join_gap));
 static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID));
 static int free_unref_items __ARGS((int copyID));
-static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
-static void set_ref_in_list __ARGS((list_T *l, int copyID));
-static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
 static int rettv_dict_alloc __ARGS((typval_T *rettv));
-static void dict_unref __ARGS((dict_T *d));
-static void dict_free __ARGS((dict_T *d, int recurse));
 static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
 static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
 static dict_T *dict_copy __ARGS((dict_T *orig, int deep, int copyID));
@@ -480,6 +455,7 @@ static void f_abs __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_acos __ARGS((typval_T *argvars, typval_T *rettv));
 #endif
 static void f_add __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_and __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_argidx __ARGS((typval_T *argvars, typval_T *rettv));
@@ -608,6 +584,7 @@ static void f_inputrestore __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_inputsave __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_inputsecret __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_insert __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_invert __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_isdirectory __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_islocked __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_items __ARGS((typval_T *argvars, typval_T *rettv));
@@ -625,6 +602,9 @@ static void f_localtime __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_log __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_log10 __ARGS((typval_T *argvars, typval_T *rettv));
 #endif
+#ifdef FEAT_LUA
+static void f_luaeval __ARGS((typval_T *argvars, typval_T *rettv));
+#endif
 static void f_map __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_maparg __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
@@ -646,6 +626,7 @@ static void f_mzeval __ARGS((typval_T *argvars, typval_T *rettv));
 #endif
 static void f_nextnonblank __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_nr2char __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_or __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_pathshorten __ARGS((typval_T *argvars, typval_T *rettv));
 #ifdef FEAT_FLOAT
 static void f_pow __ARGS((typval_T *argvars, typval_T *rettv));
@@ -653,6 +634,12 @@ static void f_pow __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_prevnonblank __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_printf __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_pumvisible __ARGS((typval_T *argvars, typval_T *rettv));
+#ifdef FEAT_PYTHON3
+static void f_py3eval __ARGS((typval_T *argvars, typval_T *rettv));
+#endif
+#ifdef FEAT_PYTHON
+static void f_pyeval __ARGS((typval_T *argvars, typval_T *rettv));
+#endif
 static void f_range __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_readfile __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_reltime __ARGS((typval_T *argvars, typval_T *rettv));
@@ -670,6 +657,10 @@ static void f_reverse __ARGS((typval_T *argvars, typval_T *rettv));
 #ifdef FEAT_FLOAT
 static void f_round __ARGS((typval_T *argvars, typval_T *rettv));
 #endif
+static void f_screenattr __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_screenchar __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_screencol __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_screenrow __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_search __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_searchdecl __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_searchpair __ARGS((typval_T *argvars, typval_T *rettv));
@@ -688,7 +679,11 @@ static void f_setreg __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_settabvar __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_settabwinvar __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_setwinvar __ARGS((typval_T *argvars, typval_T *rettv));
+#ifdef FEAT_CRYPT
+static void f_sha256 __ARGS((typval_T *argvars, typval_T *rettv));
+#endif /* FEAT_CRYPT */
 static void f_shellescape __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_shiftwidth __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_simplify __ARGS((typval_T *argvars, typval_T *rettv));
 #ifdef FEAT_FLOAT
 static void f_sin __ARGS((typval_T *argvars, typval_T *rettv));
@@ -747,6 +742,7 @@ static void f_undotree __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_values __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_virtcol __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_visualmode __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_wildmenumode __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_winbufnr __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_wincol __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_winheight __ARGS((typval_T *argvars, typval_T *rettv));
@@ -757,6 +753,7 @@ static void f_winrestview __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_winsaveview __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_winwidth __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_xor __ARGS((typval_T *argvars, typval_T *rettv));
 
 static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
 static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
@@ -782,7 +779,7 @@ static char_u *get_tv_string __ARGS((typval_T *varp));
 static char_u *get_tv_string_buf __ARGS((typval_T *varp, char_u *buf));
 static char_u *get_tv_string_buf_chk __ARGS((typval_T *varp, char_u *buf));
 static dictitem_T *find_var __ARGS((char_u *name, hashtab_T **htp));
-static dictitem_T *find_var_in_ht __ARGS((hashtab_T *ht, char_u *varname, int writing));
+static dictitem_T *find_var_in_ht __ARGS((hashtab_T *ht, int htname, char_u *varname, int writing));
 static hashtab_T *find_var_ht __ARGS((char_u *name, char_u **varname));
 static void vars_clear_ext __ARGS((hashtab_T *ht, int free_val));
 static void delete_var __ARGS((hashtab_T *ht, hashitem_T *hi));
@@ -791,6 +788,8 @@ static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_
 static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
 static int var_check_ro __ARGS((int flags, char_u *name));
 static int var_check_fixed __ARGS((int flags, char_u *name));
+static int var_check_func_name __ARGS((char_u *name, int new_var));
+static int valid_varname __ARGS((char_u *varname));
 static int tv_check_lock __ARGS((int lock, char_u *name));
 static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID));
 static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags));
@@ -820,8 +819,6 @@ static int script_autoload __ARGS((char_u *name, int reload));
 static char_u *autoload_name __ARGS((char_u *name));
 static void cat_func_name __ARGS((char_u *buf, ufunc_T *fp));
 static void func_free __ARGS((ufunc_T *fp));
-static void func_unref __ARGS((char_u *name));
-static void func_ref __ARGS((char_u *name));
 static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict));
 static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ;
 static void free_funccal __ARGS((funccall_T *fc, int free_val));
@@ -838,10 +835,6 @@ static int compare_func_name __ARGS((const void *s1, const void *s2));
 static void sortFunctions __ARGS(());
 #endif
 
-
-/* Character used as separated in autoload function/variable names. */
-#define AUTOLOAD_CHAR '#'
-
 /*
  * Initialize the global and v: variables.
  */
@@ -851,8 +844,9 @@ eval_init()
     int                    i;
     struct vimvar   *p;
 
-    init_var_dict(&globvardict, &globvars_var);
-    init_var_dict(&vimvardict, &vimvars_var);
+    init_var_dict(&globvardict, &globvars_var, VAR_DEF_SCOPE);
+    init_var_dict(&vimvardict, &vimvars_var, VAR_SCOPE);
+    vimvardict.dv_lock = VAR_FIXED;
     hash_init(&compat_hashtab);
     hash_init(&func_hashtab);
 
@@ -875,10 +869,11 @@ eval_init()
            hash_add(&compat_hashtab, p->vv_di.di_key);
     }
     set_vim_var_nr(VV_SEARCHFORWARD, 1L);
+    set_reg_var(0);  /* default for v:register is not 0 but '"' */
 
 #ifdef EBCDIC
     /*
-     * Sort the function table, to enable binary sort.
+     * Sort the function table, to enable binary search.
      */
     sortFunctions();
 #endif
@@ -910,6 +905,9 @@ eval_clear()
     hash_clear(&compat_hashtab);
 
     free_scriptnames();
+# if defined(FEAT_CMDL_COMPL)
+    free_locales();
+# endif
 
     /* global variables */
     vars_clear(&globvarht);
@@ -1355,7 +1353,11 @@ eval_to_string(arg, nextcmd, convert)
        {
            ga_init2(&ga, (int)sizeof(char), 80);
            if (tv.vval.v_list != NULL)
+           {
                list_join(&ga, tv.vval.v_list, (char_u *)"\n", TRUE, 0);
+               if (tv.vval.v_list->lv_len > 0)
+                   ga_append(&ga, NL);
+           }
            ga_append(&ga, NUL);
            retval = (char_u *)ga.ga_data;
        }
@@ -1549,20 +1551,19 @@ eval_expr(arg, nextcmd)
 }
 
 
-#if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
-       || defined(FEAT_COMPL_FUNC) || defined(PROTO)
 /*
  * Call some vimL function and return the result in "*rettv".
  * Uses argv[argc] for the function arguments.  Only Number and String
  * arguments are currently supported.
  * Returns OK or FAIL.
  */
-    static int
-call_vim_function(func, argc, argv, safe, rettv)
+    int
+call_vim_function(func, argc, argv, safe, str_arg_only, rettv)
     char_u      *func;
     int                argc;
     char_u      **argv;
     int                safe;           /* use the sandbox */
+    int                str_arg_only;   /* all arguments are strings */
     typval_T   *rettv;
 {
     typval_T   *argvars;
@@ -1587,8 +1588,11 @@ call_vim_function(func, argc, argv, safe, rettv)
            continue;
        }
 
-       /* Recognize a number argument, the others must be strings. */
-       vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
+       if (str_arg_only)
+           len = 0;
+       else
+           /* Recognize a number argument, the others must be strings. */
+           vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
        if (len != 0 && len == (int)STRLEN(argv[i]))
        {
            argvars[i].v_type = VAR_NUMBER;
@@ -1624,51 +1628,54 @@ call_vim_function(func, argc, argv, safe, rettv)
     return ret;
 }
 
-# if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
 /*
- * Call vimL function "func" and return the result as a string.
- * Returns NULL when calling the function fails.
+ * Call vimL function "func" and return the result as a number.
+ * Returns -1 when calling the function fails.
  * Uses argv[argc] for the function arguments.
  */
-    void *
-call_func_retstr(func, argc, argv, safe)
+    long
+call_func_retnr(func, argc, argv, safe)
     char_u      *func;
     int                argc;
     char_u      **argv;
     int                safe;           /* use the sandbox */
 {
     typval_T   rettv;
-    char_u     *retval;
+    long       retval;
 
-    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
-       return NULL;
+    /* All arguments are passed as strings, no conversion to number. */
+    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+       return -1;
 
-    retval = vim_strsave(get_tv_string(&rettv));
+    retval = get_tv_number_chk(&rettv, NULL);
     clear_tv(&rettv);
     return retval;
 }
-# endif
 
-# if defined(FEAT_COMPL_FUNC) || defined(PROTO)
+#if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
+       || defined(FEAT_COMPL_FUNC) || defined(PROTO)
+
+# if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
 /*
- * Call vimL function "func" and return the result as a number.
- * Returns -1 when calling the function fails.
+ * Call vimL function "func" and return the result as a string.
+ * Returns NULL when calling the function fails.
  * Uses argv[argc] for the function arguments.
  */
-    long
-call_func_retnr(func, argc, argv, safe)
+    void *
+call_func_retstr(func, argc, argv, safe)
     char_u      *func;
     int                argc;
     char_u      **argv;
     int                safe;           /* use the sandbox */
 {
     typval_T   rettv;
-    long       retval;
+    char_u     *retval;
 
-    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
-       return -1;
+    /* All arguments are passed as strings, no conversion to number. */
+    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+       return NULL;
 
-    retval = get_tv_number_chk(&rettv, NULL);
+    retval = vim_strsave(get_tv_string(&rettv));
     clear_tv(&rettv);
     return retval;
 }
@@ -1688,7 +1695,8 @@ call_func_retlist(func, argc, argv, safe)
 {
     typval_T   rettv;
 
-    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
+    /* All arguments are passed as strings, no conversion to number. */
+    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
        return NULL;
 
     if (rettv.v_type != VAR_LIST)
@@ -1701,7 +1709,6 @@ call_func_retlist(func, argc, argv, safe)
 }
 #endif
 
-
 /*
  * Save the current function call pointer, and set it to NULL.
  * Used when executing autocommands and for ":source".
@@ -2111,7 +2118,7 @@ list_buf_vars(first)
 {
     char_u     numbuf[NUMBUFLEN];
 
-    list_hashtable_vars(&curbuf->b_vars.dv_hashtab, (char_u *)"b:",
+    list_hashtable_vars(&curbuf->b_vars->dv_hashtab, (char_u *)"b:",
                                                                 TRUE, first);
 
     sprintf((char *)numbuf, "%ld", (long)curbuf->b_changedtick);
@@ -2126,7 +2133,7 @@ list_buf_vars(first)
 list_win_vars(first)
     int *first;
 {
-    list_hashtable_vars(&curwin->w_vars.dv_hashtab,
+    list_hashtable_vars(&curwin->w_vars->dv_hashtab,
                                                 (char_u *)"w:", TRUE, first);
 }
 
@@ -2138,7 +2145,7 @@ list_win_vars(first)
 list_tab_vars(first)
     int *first;
 {
-    list_hashtable_vars(&curtab->tp_vars.dv_hashtab,
+    list_hashtable_vars(&curtab->tp_vars->dv_hashtab,
                                                 (char_u *)"t:", TRUE, first);
 }
 #endif
@@ -2325,7 +2332,7 @@ ex_let_one(arg, tv, copy, endchars, op)
            else if (endchars != NULL
                             && vim_strchr(endchars, *skipwhite(arg)) == NULL)
                EMSG(_(e_letunexp));
-           else
+           else if (!check_secure())
            {
                c1 = name[len];
                name[len] = NUL;
@@ -2718,8 +2725,41 @@ get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
            lp->ll_list = NULL;
            lp->ll_dict = lp->ll_tv->vval.v_dict;
            lp->ll_di = dict_find(lp->ll_dict, key, len);
+
+           /* When assigning to a scope dictionary check that a function and
+            * variable name is valid (only variable name unless it is l: or
+            * g: dictionary). Disallow overwriting a builtin function. */
+           if (rettv != NULL && lp->ll_dict->dv_scope != 0)
+           {
+               int prevval;
+               int wrong;
+
+               if (len != -1)
+               {
+                   prevval = key[len];
+                   key[len] = NUL;
+               }
+               else
+                   prevval = 0; /* avoid compiler warning */
+               wrong = (lp->ll_dict->dv_scope == VAR_DEF_SCOPE
+                              && rettv->v_type == VAR_FUNC
+                              && var_check_func_name(key, lp->ll_di == NULL))
+                       || !valid_varname(key);
+               if (len != -1)
+                   key[len] = prevval;
+               if (wrong)
+                   return NULL;
+           }
+
            if (lp->ll_di == NULL)
            {
+               /* Can't add "v:" variable. */
+               if (lp->ll_dict == &vimvardict)
+               {
+                   EMSG2(_(e_illvar), name);
+                   return NULL;
+               }
+
                /* Key does not exist in dict: may need to add it. */
                if (*p == '[' || *p == '.' || unlet)
                {
@@ -2739,6 +2779,10 @@ get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
                    p = NULL;
                break;
            }
+           /* existing variable, need to check if it can be changed */
+           else if (var_check_ro(lp->ll_di->di_flags, name))
+               return NULL;
+
            if (len == -1)
                clear_tv(&var1);
            lp->ll_tv = &lp->ll_di->di_tv;
@@ -2770,6 +2814,8 @@ get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
            {
                if (lp->ll_range && !lp->ll_empty2)
                    clear_tv(&var2);
+               if (!quiet)
+                   EMSGN(_(e_listidx), lp->ll_n1);
                return NULL;
            }
 
@@ -2787,7 +2833,11 @@ get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
                {
                    ni = list_find(lp->ll_list, lp->ll_n2);
                    if (ni == NULL)
+                   {
+                       if (!quiet)
+                           EMSGN(_(e_listidx), lp->ll_n2);
                        return NULL;
+                   }
                    lp->ll_n2 = list_idx_of_item(lp->ll_list, ni);
                }
 
@@ -2795,7 +2845,11 @@ get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
                if (lp->ll_n1 < 0)
                    lp->ll_n1 = list_idx_of_item(lp->ll_list, lp->ll_li);
                if (lp->ll_n2 < lp->ll_n1)
+               {
+                   if (!quiet)
+                       EMSGN(_(e_listidx), lp->ll_n2);
                    return NULL;
+               }
            }
 
            lp->ll_tv = &lp->ll_li->li_tv;
@@ -3051,7 +3105,7 @@ tv_op(tv1, tv2, op)
 /*
  * Add a watcher to a list.
  */
-    static void
+    void
 list_add_watch(l, lw)
     list_T     *l;
     listwatch_T        *lw;
@@ -3064,7 +3118,7 @@ list_add_watch(l, lw)
  * Remove a watcher from a list.
  * No warning when it isn't found...
  */
-    static void
+    void
 list_rem_watch(l, lwrem)
     list_T     *l;
     listwatch_T        *lwrem;
@@ -3174,7 +3228,7 @@ next_for_item(fi_void, arg)
     void       *fi_void;
     char_u     *arg;
 {
-    forinfo_T    *fi = (forinfo_T *)fi_void;
+    forinfo_T  *fi = (forinfo_T *)fi_void;
     int                result;
     listitem_T *item;
 
@@ -3337,6 +3391,18 @@ ex_call(eap)
     int                failed = FALSE;
     funcdict_T fudi;
 
+    if (eap->skip)
+    {
+       /* trans_function_name() doesn't work well when skipping, use eval0()
+        * instead to skip to any following command, e.g. for:
+        *   :if 0 | call dict.foo().bar() | endif  */
+       ++emsg_skip;
+       if (eval0(eap->arg, &rettv, &eap->nextcmd, FALSE) != FAIL)
+           clear_tv(&rettv);
+       --emsg_skip;
+       return;
+    }
+
     tofree = trans_function_name(&arg, eap->skip, TFN_INT, &fudi);
     if (fudi.fd_newkey != NULL)
     {
@@ -3386,6 +3452,9 @@ ex_call(eap)
        {
            curwin->w_cursor.lnum = lnum;
            curwin->w_cursor.col = 0;
+#ifdef FEAT_VIRTUALEDIT
+           curwin->w_cursor.coladd = 0;
+#endif
        }
        arg = startarg;
        if (get_func_tv(name, (int)STRLEN(name), &rettv, &arg,
@@ -3868,7 +3937,7 @@ get_user_var_name(xp, idx)
     }
 
     /* b: variables */
-    ht = &curbuf->b_vars.dv_hashtab;
+    ht = &curbuf->b_vars->dv_hashtab;
     if (bdone < ht->ht_used)
     {
        if (bdone++ == 0)
@@ -3886,7 +3955,7 @@ get_user_var_name(xp, idx)
     }
 
     /* w: variables */
-    ht = &curwin->w_vars.dv_hashtab;
+    ht = &curwin->w_vars->dv_hashtab;
     if (wdone < ht->ht_used)
     {
        if (wdone++ == 0)
@@ -3900,7 +3969,7 @@ get_user_var_name(xp, idx)
 
 #ifdef FEAT_WINDOWS
     /* t: variables */
-    ht = &curtab->tp_vars.dv_hashtab;
+    ht = &curtab->tp_vars->dv_hashtab;
     if (tdone < ht->ht_used)
     {
        if (tdone++ == 0)
@@ -4349,7 +4418,8 @@ eval4(arg, rettv, evaluate)
                else
                {
                    /* Compare two Lists for being equal or unequal. */
-                   n1 = list_equal(rettv->vval.v_list, var2.vval.v_list, ic);
+                   n1 = list_equal(rettv->vval.v_list, var2.vval.v_list,
+                                                                  ic, FALSE);
                    if (type == TYPE_NEQUAL)
                        n1 = !n1;
                }
@@ -4378,7 +4448,8 @@ eval4(arg, rettv, evaluate)
                else
                {
                    /* Compare two Dictionaries for being equal or unequal. */
-                   n1 = dict_equal(rettv->vval.v_dict, var2.vval.v_dict, ic);
+                   n1 = dict_equal(rettv->vval.v_dict, var2.vval.v_dict,
+                                                                  ic, FALSE);
                    if (type == TYPE_NEQUAL)
                        n1 = !n1;
                }
@@ -4496,7 +4567,7 @@ eval4(arg, rettv, evaluate)
                            if (regmatch.regprog != NULL)
                            {
                                n1 = vim_regexec_nl(&regmatch, s1, (colnr_T)0);
-                               vim_free(regmatch.regprog);
+                               vim_regfree(regmatch.regprog);
                                if (type == TYPE_NOMATCH)
                                    n1 = !n1;
                            }
@@ -5082,6 +5153,16 @@ eval7(arg, rettv, evaluate, want_string)
                ret = get_func_tv(s, len, rettv, arg,
                          curwin->w_cursor.lnum, curwin->w_cursor.lnum,
                          &len, evaluate, NULL);
+
+               /* If evaluate is FALSE rettv->v_type was not set in
+                * get_func_tv, but it's needed in handle_subscript() to parse
+                * what follows. So set it here. */
+               if (rettv->v_type == VAR_UNKNOWN && !evaluate && **arg == '(')
+               {
+                   rettv->vval.v_string = vim_strsave((char_u *)"");
+                   rettv->v_type = VAR_FUNC;
+               }
+
                /* Stop the expression evaluation when immediately
                 * aborting on error, or when an interrupt occurred or
                 * an exception was thrown but not caught. */
@@ -5097,9 +5178,7 @@ eval7(arg, rettv, evaluate, want_string)
            else
                ret = OK;
        }
-
-       if (alias != NULL)
-           vim_free(alias);
+       vim_free(alias);
     }
 
     *arg = skipwhite(*arg);
@@ -5192,16 +5271,20 @@ eval_index(arg, rettv, evaluate, verbose)
     char_u     *s;
     char_u     *key = NULL;
 
-    if (rettv->v_type == VAR_FUNC
-#ifdef FEAT_FLOAT
-           || rettv->v_type == VAR_FLOAT
-#endif
-           )
+    if (rettv->v_type == VAR_FUNC)
     {
        if (verbose)
            EMSG(_("E695: Cannot index a Funcref"));
        return FAIL;
     }
+#ifdef FEAT_FLOAT
+    else if (rettv->v_type == VAR_FLOAT)
+    {
+       if (verbose)
+           EMSG(_(e_float_as_string));
+       return FAIL;
+    }
+#endif
 
     if (**arg == '.')
     {
@@ -5868,7 +5951,7 @@ list_free(l, recurse)
 /*
  * Allocate a list item.
  */
-    static listitem_T *
+    listitem_T *
 listitem_alloc()
 {
     return (listitem_T *)alloc(sizeof(listitem_T));
@@ -5877,7 +5960,7 @@ listitem_alloc()
 /*
  * Free a list item.  Also clears the value.  Does not notify watchers.
  */
-    static void
+    void
 listitem_free(item)
     listitem_T *item;
 {
@@ -5888,7 +5971,7 @@ listitem_free(item)
 /*
  * Remove a list item from a List and free it.  Also clears the value.
  */
-    static void
+    void
 listitem_remove(l, item)
     list_T  *l;
     listitem_T *item;
@@ -5913,10 +5996,11 @@ list_len(l)
  * Return TRUE when two lists have exactly the same values.
  */
     static int
-list_equal(l1, l2, ic)
+list_equal(l1, l2, ic, recursive)
     list_T     *l1;
     list_T     *l2;
     int                ic;     /* ignore case for strings */
+    int                recursive;  /* TRUE when used recursively */
 {
     listitem_T *item1, *item2;
 
@@ -5930,7 +6014,7 @@ list_equal(l1, l2, ic)
     for (item1 = l1->lv_first, item2 = l2->lv_first;
            item1 != NULL && item2 != NULL;
                               item1 = item1->li_next, item2 = item2->li_next)
-       if (!tv_equal(&item1->li_tv, &item2->li_tv, ic))
+       if (!tv_equal(&item1->li_tv, &item2->li_tv, ic, recursive))
            return FALSE;
     return item1 == NULL && item2 == NULL;
 }
@@ -5952,10 +6036,11 @@ dict_lookup(hi)
  * Return TRUE when two dictionaries have exactly the same key/values.
  */
     static int
-dict_equal(d1, d2, ic)
+dict_equal(d1, d2, ic, recursive)
     dict_T     *d1;
     dict_T     *d2;
     int                ic;     /* ignore case for strings */
+    int                recursive; /* TRUE when used recursively */
 {
     hashitem_T *hi;
     dictitem_T *item2;
@@ -5976,7 +6061,7 @@ dict_equal(d1, d2, ic)
            item2 = dict_find(d2, hi->hi_key, -1);
            if (item2 == NULL)
                return FALSE;
-           if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic))
+           if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic, recursive))
                return FALSE;
            --todo;
        }
@@ -5984,41 +6069,54 @@ dict_equal(d1, d2, ic)
     return TRUE;
 }
 
+static int tv_equal_recurse_limit;
+
 /*
  * Return TRUE if "tv1" and "tv2" have the same value.
  * Compares the items just like "==" would compare them, but strings and
  * numbers are different.  Floats and numbers are also different.
  */
     static int
-tv_equal(tv1, tv2, ic)
+tv_equal(tv1, tv2, ic, recursive)
     typval_T *tv1;
     typval_T *tv2;
-    int            ic;     /* ignore case */
+    int             ic;            /* ignore case */
+    int             recursive;     /* TRUE when used recursively */
 {
     char_u     buf1[NUMBUFLEN], buf2[NUMBUFLEN];
     char_u     *s1, *s2;
-    static int  recursive = 0;     /* cach recursive loops */
+    static int  recursive_cnt = 0;         /* catch recursive loops */
     int                r;
 
     if (tv1->v_type != tv2->v_type)
        return FALSE;
+
     /* Catch lists and dicts that have an endless loop by limiting
-     * recursiveness to 1000.  We guess they are equal then. */
-    if (recursive >= 1000)
+     * recursiveness to a limit.  We guess they are equal then.
+     * A fixed limit has the problem of still taking an awful long time.
+     * Reduce the limit every time running into it. That should work fine for
+     * deeply linked structures that are not recursively linked and catch
+     * recursiveness quickly. */
+    if (!recursive)
+       tv_equal_recurse_limit = 1000;
+    if (recursive_cnt >= tv_equal_recurse_limit)
+    {
+       --tv_equal_recurse_limit;
        return TRUE;
+    }
 
     switch (tv1->v_type)
     {
        case VAR_LIST:
-           ++recursive;
-           r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
-           --recursive;
+           ++recursive_cnt;
+           r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic, TRUE);
+           --recursive_cnt;
            return r;
 
        case VAR_DICT:
-           ++recursive;
-           r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
-           --recursive;
+           ++recursive_cnt;
+           r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic, TRUE);
+           --recursive_cnt;
            return r;
 
        case VAR_FUNC:
@@ -6049,7 +6147,7 @@ tv_equal(tv1, tv2, ic)
  * A negative index is counted from the end; -1 is the last item.
  * Returns NULL when "n" is out of range.
  */
-    static listitem_T *
+    listitem_T *
 list_find(l, n)
     list_T     *l;
     long       n;
@@ -6191,7 +6289,7 @@ list_idx_of_item(l, item)
 /*
  * Append item "item" to the end of list "l".
  */
-    static void
+    void
 list_append(l, item)
     list_T     *l;
     listitem_T *item;
@@ -6304,7 +6402,7 @@ list_append_number(l, n)
  * If "item" is NULL append at the end.
  * Return FAIL when out of memory.
  */
-    static int
+    int
 list_insert_tv(l, tv, item)
     list_T     *l;
     typval_T   *tv;
@@ -6449,7 +6547,7 @@ list_copy(orig, deep, copyID)
  * Remove items "item" to "item2" from list "l".
  * Does not free the listitem or the value!
  */
-    static void
+    void
 list_remove(l, item, item2)
     list_T     *l;
     listitem_T *item;
@@ -6502,47 +6600,119 @@ list2string(tv, copyID)
     return (char_u *)ga.ga_data;
 }
 
-/*
- * Join list "l" into a string in "*gap", using separator "sep".
- * When "echo" is TRUE use String as echoed, otherwise as inside a List.
- * Return FAIL or OK.
- */
+typedef struct join_S {
+    char_u     *s;
+    char_u     *tofree;
+} join_T;
+
     static int
-list_join(gap, l, sep, echo, copyID)
-    garray_T   *gap;
+list_join_inner(gap, l, sep, echo_style, copyID, join_gap)
+    garray_T   *gap;           /* to store the result in */
     list_T     *l;
     char_u     *sep;
-    int                echo;
+    int                echo_style;
     int                copyID;
+    garray_T   *join_gap;      /* to keep each list item string */
 {
+    int                i;
+    join_T     *p;
+    int                len;
+    int                sumlen = 0;
     int                first = TRUE;
     char_u     *tofree;
     char_u     numbuf[NUMBUFLEN];
     listitem_T *item;
     char_u     *s;
 
+    /* Stringify each item in the list. */
     for (item = l->lv_first; item != NULL && !got_int; item = item->li_next)
     {
-       if (first)
-           first = FALSE;
-       else
-           ga_concat(gap, sep);
-
-       if (echo)
+       if (echo_style)
            s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
        else
            s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
-       if (s != NULL)
-           ga_concat(gap, s);
-       vim_free(tofree);
        if (s == NULL)
            return FAIL;
+
+       len = (int)STRLEN(s);
+       sumlen += len;
+
+       ga_grow(join_gap, 1);
+       p = ((join_T *)join_gap->ga_data) + (join_gap->ga_len++);
+       if (tofree != NULL || s != numbuf)
+       {
+           p->s = s;
+           p->tofree = tofree;
+       }
+       else
+       {
+           p->s = vim_strnsave(s, len);
+           p->tofree = p->s;
+       }
+
+       line_breakcheck();
+    }
+
+    /* Allocate result buffer with its total size, avoid re-allocation and
+     * multiple copy operations.  Add 2 for a tailing ']' and NUL. */
+    if (join_gap->ga_len >= 2)
+       sumlen += (int)STRLEN(sep) * (join_gap->ga_len - 1);
+    if (ga_grow(gap, sumlen + 2) == FAIL)
+       return FAIL;
+
+    for (i = 0; i < join_gap->ga_len && !got_int; ++i)
+    {
+       if (first)
+           first = FALSE;
+       else
+           ga_concat(gap, sep);
+       p = ((join_T *)join_gap->ga_data) + i;
+
+       if (p->s != NULL)
+           ga_concat(gap, p->s);
        line_breakcheck();
     }
+
     return OK;
 }
 
 /*
+ * Join list "l" into a string in "*gap", using separator "sep".
+ * When "echo_style" is TRUE use String as echoed, otherwise as inside a List.
+ * Return FAIL or OK.
+ */
+    static int
+list_join(gap, l, sep, echo_style, copyID)
+    garray_T   *gap;
+    list_T     *l;
+    char_u     *sep;
+    int                echo_style;
+    int                copyID;
+{
+    garray_T   join_ga;
+    int                retval;
+    join_T     *p;
+    int                i;
+
+    ga_init2(&join_ga, (int)sizeof(join_T), l->lv_len);
+    retval = list_join_inner(gap, l, sep, echo_style, copyID, &join_ga);
+
+    /* Dispose each item in join_ga. */
+    if (join_ga.ga_data != NULL)
+    {
+       p = (join_T *)join_ga.ga_data;
+       for (i = 0; i < join_ga.ga_len; ++i)
+       {
+           vim_free(p->tofree);
+           ++p;
+       }
+       ga_clear(&join_ga);
+    }
+
+    return retval;
+}
+
+/*
  * Garbage collection for lists and dictionaries.
  *
  * We use reference counts to be able to free most items right away when they
@@ -6610,16 +6780,20 @@ garbage_collect()
 
     /* buffer-local variables */
     for (buf = firstbuf; buf != NULL; buf = buf->b_next)
-       set_ref_in_ht(&buf->b_vars.dv_hashtab, copyID);
+       set_ref_in_item(&buf->b_bufvar.di_tv, copyID);
 
     /* window-local variables */
     FOR_ALL_TAB_WINDOWS(tp, wp)
-       set_ref_in_ht(&wp->w_vars.dv_hashtab, copyID);
+       set_ref_in_item(&wp->w_winvar.di_tv, copyID);
+#ifdef FEAT_AUTOCMD
+    if (aucmd_win != NULL)
+       set_ref_in_item(&aucmd_win->w_winvar.di_tv, copyID);
+#endif
 
 #ifdef FEAT_WINDOWS
     /* tabpage-local variables */
     for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
-       set_ref_in_ht(&tp->tp_vars.dv_hashtab, copyID);
+       set_ref_in_item(&tp->tp_winvar.di_tv, copyID);
 #endif
 
     /* global variables */
@@ -6635,6 +6809,18 @@ garbage_collect()
     /* v: vars */
     set_ref_in_ht(&vimvarht, copyID);
 
+#ifdef FEAT_LUA
+    set_ref_in_lua(copyID);
+#endif
+
+#ifdef FEAT_PYTHON
+    set_ref_in_python(copyID);
+#endif
+
+#ifdef FEAT_PYTHON3
+    set_ref_in_python3(copyID);
+#endif
+
     /*
      * 2. Free lists and dictionaries that are not referenced.
      */
@@ -6720,7 +6906,7 @@ free_unref_items(copyID)
 /*
  * Mark all lists and dicts referenced through hashtab "ht" with "copyID".
  */
-    static void
+    void
 set_ref_in_ht(ht, copyID)
     hashtab_T  *ht;
     int                copyID;
@@ -6740,7 +6926,7 @@ set_ref_in_ht(ht, copyID)
 /*
  * Mark all lists and dicts referenced through list "l" with "copyID".
  */
-    static void
+    void
 set_ref_in_list(l, copyID)
     list_T     *l;
     int                copyID;
@@ -6754,7 +6940,7 @@ set_ref_in_list(l, copyID)
 /*
  * Mark all lists and dicts referenced through typval "tv" with "copyID".
  */
-    static void
+    void
 set_ref_in_item(tv, copyID)
     typval_T   *tv;
     int                copyID;
@@ -6798,7 +6984,7 @@ dict_alloc()
     d = (dict_T *)alloc(sizeof(dict_T));
     if (d != NULL)
     {
-       /* Add the list to the list of dicts for garbage collection. */
+       /* Add the dict to the list of dicts for garbage collection. */
        if (first_dict != NULL)
            first_dict->dv_used_prev = d;
        d->dv_used_next = first_dict;
@@ -6807,6 +6993,7 @@ dict_alloc()
 
        hash_init(&d->dv_hashtab);
        d->dv_lock = 0;
+       d->dv_scope = 0;
        d->dv_refcount = 0;
        d->dv_copyID = 0;
     }
@@ -6837,7 +7024,7 @@ rettv_dict_alloc(rettv)
  * Unreference a Dictionary: decrement the reference count and free it when it
  * becomes zero.
  */
-    static void
+    void
 dict_unref(d)
     dict_T *d;
 {
@@ -6849,7 +7036,7 @@ dict_unref(d)
  * Free a Dictionary, including all items it contains.
  * Ignores the reference count.
  */
-    static void
+    void
 dict_free(d, recurse)
     dict_T  *d;
     int            recurse;    /* Free Lists and Dictionaries recursively. */
@@ -7075,7 +7262,7 @@ dict_add_nr_str(d, key, nr, str)
 }
 
 /*
- * Add a list  entry to dictionary "d".
+ * Add a list entry to dictionary "d".
  * Returns FAIL when out of memory and when key already exists.
  */
     int
@@ -7097,6 +7284,7 @@ dict_add_list(d, key, list)
        dictitem_free(item);
        return FAIL;
     }
+    ++list->lv_refcount;
     return OK;
 }
 
@@ -7649,6 +7837,7 @@ static struct fst
     {"acos",           1, 1, f_acos},  /* WJMc */
 #endif
     {"add",            2, 2, f_add},
+    {"and",            2, 2, f_and},
     {"append",         2, 2, f_append},
     {"argc",           0, 0, f_argc},
     {"argidx",         0, 0, f_argidx},
@@ -7676,7 +7865,7 @@ static struct fst
     {"ceil",           1, 1, f_ceil},
 #endif
     {"changenr",       0, 0, f_changenr},
-    {"char2nr",                1, 1, f_char2nr},
+    {"char2nr",                1, 2, f_char2nr},
     {"cindent",                1, 1, f_cindent},
     {"clearmatches",   0, 0, f_clearmatches},
     {"col",            1, 1, f_col},
@@ -7708,7 +7897,7 @@ static struct fst
 #ifdef FEAT_FLOAT
     {"exp",            1, 1, f_exp},
 #endif
-    {"expand",         1, 2, f_expand},
+    {"expand",         1, 3, f_expand},
     {"extend",         2, 3, f_extend},
     {"feedkeys",       1, 2, f_feedkeys},
     {"file_readable",  1, 1, f_filereadable},  /* obsolete */
@@ -7734,7 +7923,7 @@ static struct fst
     {"garbagecollect", 0, 1, f_garbagecollect},
     {"get",            2, 3, f_get},
     {"getbufline",     2, 3, f_getbufline},
-    {"getbufvar",      2, 2, f_getbufvar},
+    {"getbufvar",      2, 3, f_getbufvar},
     {"getchar",                0, 1, f_getchar},
     {"getcharmod",     0, 0, f_getcharmod},
     {"getcmdline",     0, 0, f_getcmdline},
@@ -7754,12 +7943,12 @@ static struct fst
     {"getqflist",      0, 0, f_getqflist},
     {"getreg",         0, 2, f_getreg},
     {"getregtype",     0, 1, f_getregtype},
-    {"gettabvar",      2, 2, f_gettabvar},
-    {"gettabwinvar",   3, 3, f_gettabwinvar},
+    {"gettabvar",      2, 3, f_gettabvar},
+    {"gettabwinvar",   3, 4, f_gettabwinvar},
     {"getwinposx",     0, 0, f_getwinposx},
     {"getwinposy",     0, 0, f_getwinposy},
-    {"getwinvar",      2, 2, f_getwinvar},
-    {"glob",           1, 2, f_glob},
+    {"getwinvar",      2, 3, f_getwinvar},
+    {"glob",           1, 3, f_glob},
     {"globpath",       2, 3, f_globpath},
     {"has",            1, 1, f_has},
     {"has_key",                2, 2, f_has_key},
@@ -7784,6 +7973,7 @@ static struct fst
     {"inputsave",      0, 0, f_inputsave},
     {"inputsecret",    1, 2, f_inputsecret},
     {"insert",         2, 3, f_insert},
+    {"invert",         1, 1, f_invert},
     {"isdirectory",    1, 1, f_isdirectory},
     {"islocked",       1, 1, f_islocked},
     {"items",          1, 1, f_items},
@@ -7801,8 +7991,11 @@ static struct fst
     {"log",            1, 1, f_log},
     {"log10",          1, 1, f_log10},
 #endif
+#ifdef FEAT_LUA
+    {"luaeval",         1, 2, f_luaeval},
+#endif
     {"map",            2, 2, f_map},
-    {"maparg",         1, 3, f_maparg},
+    {"maparg",         1, 4, f_maparg},
     {"mapcheck",       1, 3, f_mapcheck},
     {"match",          2, 4, f_match},
     {"matchadd",       2, 4, f_matchadd},
@@ -7821,7 +8014,8 @@ static struct fst
     {"mzeval",         1, 1, f_mzeval},
 #endif
     {"nextnonblank",   1, 1, f_nextnonblank},
-    {"nr2char",                1, 1, f_nr2char},
+    {"nr2char",                1, 2, f_nr2char},
+    {"or",             2, 2, f_or},
     {"pathshorten",    1, 1, f_pathshorten},
 #ifdef FEAT_FLOAT
     {"pow",            2, 2, f_pow},
@@ -7829,6 +8023,12 @@ static struct fst
     {"prevnonblank",   1, 1, f_prevnonblank},
     {"printf",         2, 19, f_printf},
     {"pumvisible",     0, 0, f_pumvisible},
+#ifdef FEAT_PYTHON3
+    {"py3eval",                1, 1, f_py3eval},
+#endif
+#ifdef FEAT_PYTHON
+    {"pyeval",         1, 1, f_pyeval},
+#endif
     {"range",          1, 3, f_range},
     {"readfile",       1, 3, f_readfile},
     {"reltime",                0, 2, f_reltime},
@@ -7846,6 +8046,10 @@ static struct fst
 #ifdef FEAT_FLOAT
     {"round",          1, 1, f_round},
 #endif
+    {"screenattr",     2, 2, f_screenattr},
+    {"screenchar",     2, 2, f_screenchar},
+    {"screencol",      0, 0, f_screencol},
+    {"screenrow",      0, 0, f_screenrow},
     {"search",         1, 4, f_search},
     {"searchdecl",     1, 3, f_searchdecl},
     {"searchpair",     3, 7, f_searchpair},
@@ -7864,13 +8068,17 @@ static struct fst
     {"settabvar",      3, 3, f_settabvar},
     {"settabwinvar",   4, 4, f_settabwinvar},
     {"setwinvar",      3, 3, f_setwinvar},
+#ifdef FEAT_CRYPT
+    {"sha256",         1, 1, f_sha256},
+#endif
     {"shellescape",    1, 2, f_shellescape},
+    {"shiftwidth",     0, 0, f_shiftwidth},
     {"simplify",       1, 1, f_simplify},
 #ifdef FEAT_FLOAT
     {"sin",            1, 1, f_sin},
     {"sinh",           1, 1, f_sinh},
 #endif
-    {"sort",           1, 2, f_sort},
+    {"sort",           1, 3, f_sort},
     {"soundfold",      1, 1, f_soundfold},
     {"spellbadword",   0, 1, f_spellbadword},
     {"spellsuggest",   1, 3, f_spellsuggest},
@@ -7923,6 +8131,7 @@ static struct fst
     {"values",         1, 1, f_values},
     {"virtcol",                1, 1, f_virtcol},
     {"visualmode",     0, 1, f_visualmode},
+    {"wildmenumode",   0, 0, f_wildmenumode},
     {"winbufnr",       1, 1, f_winbufnr},
     {"wincol",         0, 0, f_wincol},
     {"winheight",      1, 1, f_winheight},
@@ -7933,6 +8142,7 @@ static struct fst
     {"winsaveview",    0, 0, f_winsaveview},
     {"winwidth",       1, 1, f_winwidth},
     {"writefile",      2, 3, f_writefile},
+    {"xor",            2, 2, f_xor},
 };
 
 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
@@ -8150,7 +8360,7 @@ get_func_tv(name, len, rettv, arg, firstline, lastline, doesrange,
 
 /*
  * Call a function with its resolved parameters
- * Return OK when the function can't be called,  FAIL otherwise.
+ * Return FAIL when the function can't be called,  OK otherwise.
  * Also returns OK when an error was encountered while executing the function.
  */
     static int
@@ -8497,7 +8707,7 @@ f_add(argvars, rettv)
     if (argvars[0].v_type == VAR_LIST)
     {
        if ((l = argvars[0].vval.v_list) != NULL
-               && !tv_check_lock(l->lv_lock, (char_u *)"add()")
+               && !tv_check_lock(l->lv_lock, (char_u *)_("add() argument"))
                && list_append_tv(l, &argvars[1]) == OK)
            copy_tv(&argvars[0], rettv);
     }
@@ -8506,6 +8716,18 @@ f_add(argvars, rettv)
 }
 
 /*
+ * "and(expr, expr)" function
+ */
+    static void
+f_and(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
+                                       & get_tv_number_chk(&argvars[1], NULL);
+}
+
+/*
  * "append(lnum, string/list)" function
  */
     static void
@@ -8520,6 +8742,14 @@ f_append(argvars, rettv)
     typval_T   *tv;
     long       added = 0;
 
+    /* When coming here from Insert mode, sync undo, so that this can be
+     * undone separately from what was previously inserted. */
+    if (u_sync_once == 2)
+    {
+       u_sync_once = 1; /* notify that u_sync() was called */
+       u_sync(TRUE);
+    }
+
     lnum = get_tv_lnum(argvars);
     if (lnum >= 0
            && lnum <= curbuf->b_ml.ml_line_count
@@ -8796,14 +9026,15 @@ f_bufloaded(argvars, rettv)
     rettv->vval.v_number = (buf != NULL && buf->b_ml.ml_mfp != NULL);
 }
 
-static buf_T *get_buf_tv __ARGS((typval_T *tv));
+static buf_T *get_buf_tv __ARGS((typval_T *tv, int curtab_only));
 
 /*
  * Get buffer by number or pattern.
  */
     static buf_T *
-get_buf_tv(tv)
+get_buf_tv(tv, curtab_only)
     typval_T   *tv;
+    int                curtab_only;
 {
     char_u     *name = tv->vval.v_string;
     int                save_magic;
@@ -8826,7 +9057,7 @@ get_buf_tv(tv)
     p_cpo = (char_u *)"";
 
     buf = buflist_findnr(buflist_findpat(name, name + STRLEN(name),
-                                                               TRUE, FALSE));
+                                                   TRUE, FALSE, curtab_only));
 
     p_magic = save_magic;
     p_cpo = save_cpo;
@@ -8850,7 +9081,7 @@ f_bufname(argvars, rettv)
 
     (void)get_tv_number(&argvars[0]);      /* issue errmsg if type error */
     ++emsg_off;
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], FALSE);
     rettv->v_type = VAR_STRING;
     if (buf != NULL && buf->b_fname != NULL)
        rettv->vval.v_string = vim_strsave(buf->b_fname);
@@ -8873,7 +9104,7 @@ f_bufnr(argvars, rettv)
 
     (void)get_tv_number(&argvars[0]);      /* issue errmsg if type error */
     ++emsg_off;
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], FALSE);
     --emsg_off;
 
     /* If the buffer isn't found and the second argument is not zero create a
@@ -8908,7 +9139,7 @@ f_bufwinnr(argvars, rettv)
 
     (void)get_tv_number(&argvars[0]);      /* issue errmsg if type error */
     ++emsg_off;
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], TRUE);
 #ifdef FEAT_WINDOWS
     for (wp = firstwin; wp; wp = wp->w_next)
     {
@@ -8980,34 +9211,69 @@ f_byteidx(argvars, rettv)
 #endif
 }
 
-/*
- * "call(func, arglist)" function
- */
-    static void
-f_call(argvars, rettv)
-    typval_T   *argvars;
+    int
+func_call(name, args, selfdict, rettv)
+    char_u     *name;
+    typval_T   *args;
+    dict_T     *selfdict;
     typval_T   *rettv;
 {
-    char_u     *func;
+    listitem_T *item;
     typval_T   argv[MAX_FUNC_ARGS + 1];
     int                argc = 0;
-    listitem_T *item;
     int                dummy;
-    dict_T     *selfdict = NULL;
+    int                r = 0;
 
-    if (argvars[1].v_type != VAR_LIST)
+    for (item = args->vval.v_list->lv_first; item != NULL;
+                                                        item = item->li_next)
     {
-       EMSG(_(e_listreq));
-       return;
+       if (argc == MAX_FUNC_ARGS)
+       {
+           EMSG(_("E699: Too many arguments"));
+           break;
+       }
+       /* Make a copy of each argument.  This is needed to be able to set
+        * v_lock to VAR_FIXED in the copy without changing the original list.
+        */
+       copy_tv(&item->li_tv, &argv[argc++]);
     }
-    if (argvars[1].vval.v_list == NULL)
-       return;
 
-    if (argvars[0].v_type == VAR_FUNC)
-       func = argvars[0].vval.v_string;
-    else
-       func = get_tv_string(&argvars[0]);
-    if (*func == NUL)
+    if (item == NULL)
+       r = call_func(name, (int)STRLEN(name), rettv, argc, argv,
+                                curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+                                                     &dummy, TRUE, selfdict);
+
+    /* Free the arguments. */
+    while (argc > 0)
+       clear_tv(&argv[--argc]);
+
+    return r;
+}
+
+/*
+ * "call(func, arglist)" function
+ */
+    static void
+f_call(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    char_u     *func;
+    dict_T     *selfdict = NULL;
+
+    if (argvars[1].v_type != VAR_LIST)
+    {
+       EMSG(_(e_listreq));
+       return;
+    }
+    if (argvars[1].vval.v_list == NULL)
+       return;
+
+    if (argvars[0].v_type == VAR_FUNC)
+       func = argvars[0].vval.v_string;
+    else
+       func = get_tv_string(&argvars[0]);
+    if (*func == NUL)
        return;         /* type error or empty name */
 
     if (argvars[2].v_type != VAR_UNKNOWN)
@@ -9020,28 +9286,7 @@ f_call(argvars, rettv)
        selfdict = argvars[2].vval.v_dict;
     }
 
-    for (item = argvars[1].vval.v_list->lv_first; item != NULL;
-                                                        item = item->li_next)
-    {
-       if (argc == MAX_FUNC_ARGS)
-       {
-           EMSG(_("E699: Too many arguments"));
-           break;
-       }
-       /* Make a copy of each argument.  This is needed to be able to set
-        * v_lock to VAR_FIXED in the copy without changing the original list.
-        */
-       copy_tv(&item->li_tv, &argv[argc++]);
-    }
-
-    if (item == NULL)
-       (void)call_func(func, (int)STRLEN(func), rettv, argc, argv,
-                                curwin->w_cursor.lnum, curwin->w_cursor.lnum,
-                                                     &dummy, TRUE, selfdict);
-
-    /* Free the arguments. */
-    while (argc > 0)
-       clear_tv(&argv[--argc]);
+    (void)func_call(func, &argvars[1], selfdict, rettv);
 }
 
 #ifdef FEAT_FLOAT
@@ -9084,7 +9329,17 @@ f_char2nr(argvars, rettv)
 {
 #ifdef FEAT_MBYTE
     if (has_mbyte)
-       rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0]));
+    {
+       int     utf8 = 0;
+
+       if (argvars[1].v_type != VAR_UNKNOWN)
+           utf8 = get_tv_number_chk(&argvars[1], NULL);
+
+       if (utf8)
+           rettv->vval.v_number = (*utf_ptr2char)(get_tv_string(&argvars[0]));
+       else
+           rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0]));
+    }
     else
 #endif
     rettv->vval.v_number = get_tv_string(&argvars[0])[0];
@@ -9095,7 +9350,7 @@ f_char2nr(argvars, rettv)
  */
     static void
 f_cindent(argvars, rettv)
-    typval_T   *argvars;
+    typval_T   *argvars UNUSED;
     typval_T   *rettv;
 {
 #ifdef FEAT_CINDENT
@@ -9298,7 +9553,7 @@ f_confirm(argvars, rettv)
 
     if (!error)
        rettv->vval.v_number = do_dialog(type, NULL, message, buttons,
-                                                                  def, NULL);
+                                                           def, NULL, FALSE);
 #endif
 }
 
@@ -9389,7 +9644,7 @@ f_count(argvars, rettv)
            }
 
            for ( ; li != NULL; li = li->li_next)
-               if (tv_equal(&li->li_tv, &argvars[1], ic))
+               if (tv_equal(&li->li_tv, &argvars[1], ic, FALSE))
                    ++n;
        }
     }
@@ -9416,7 +9671,7 @@ f_count(argvars, rettv)
                if (!HASHITEM_EMPTY(hi))
                {
                    --todo;
-                   if (tv_equal(&HI2DI(hi)->di_tv, &argvars[1], ic))
+                   if (tv_equal(&HI2DI(hi)->di_tv, &argvars[1], ic, FALSE))
                        ++n;
                }
            }
@@ -9857,17 +10112,36 @@ f_expand(argvars, rettv)
     char_u     *s;
     int                len;
     char_u     *errormsg;
-    int                flags = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
+    int                options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
     expand_T   xpc;
     int                error = FALSE;
+    char_u     *result;
 
     rettv->v_type = VAR_STRING;
+    if (argvars[1].v_type != VAR_UNKNOWN
+           && argvars[2].v_type != VAR_UNKNOWN
+           && get_tv_number_chk(&argvars[2], &error)
+           && !error)
+    {
+       rettv->v_type = VAR_LIST;
+       rettv->vval.v_list = NULL;
+    }
+
     s = get_tv_string(&argvars[0]);
     if (*s == '%' || *s == '#' || *s == '<')
     {
        ++emsg_off;
-       rettv->vval.v_string = eval_vars(s, s, &len, NULL, &errormsg, NULL);
+       result = eval_vars(s, s, &len, NULL, &errormsg, NULL);
        --emsg_off;
+       if (rettv->v_type == VAR_LIST)
+       {
+           if (rettv_list_alloc(rettv) != FAIL && result != NULL)
+               list_append_string(rettv->vval.v_list, result, -1);
+           else
+               vim_free(result);
+       }
+       else
+           rettv->vval.v_string = result;
     }
     else
     {
@@ -9875,12 +10149,25 @@ f_expand(argvars, rettv)
         * for 'wildignore' and don't put matches for 'suffixes' at the end. */
        if (argvars[1].v_type != VAR_UNKNOWN
                                    && get_tv_number_chk(&argvars[1], &error))
-           flags |= WILD_KEEP_ALL;
+           options |= WILD_KEEP_ALL;
        if (!error)
        {
            ExpandInit(&xpc);
            xpc.xp_context = EXPAND_FILES;
-           rettv->vval.v_string = ExpandOne(&xpc, s, NULL, flags, WILD_ALL);
+           if (p_wic)
+               options += WILD_ICASE;
+           if (rettv->v_type == VAR_STRING)
+               rettv->vval.v_string = ExpandOne(&xpc, s, NULL,
+                                                          options, WILD_ALL);
+           else if (rettv_list_alloc(rettv) != FAIL)
+           {
+               int i;
+
+               ExpandOne(&xpc, s, NULL, options, WILD_ALL_KEEP);
+               for (i = 0; i < xpc.xp_numfiles; i++)
+                   list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
+               ExpandCleanup(&xpc);
+           }
        }
        else
            rettv->vval.v_string = NULL;
@@ -9888,6 +10175,62 @@ f_expand(argvars, rettv)
 }
 
 /*
+ * Go over all entries in "d2" and add them to "d1".
+ * When "action" is "error" then a duplicate key is an error.
+ * When "action" is "force" then a duplicate key is overwritten.
+ * Otherwise duplicate keys are ignored ("action" is "keep").
+ */
+    void
+dict_extend(d1, d2, action)
+    dict_T     *d1;
+    dict_T     *d2;
+    char_u     *action;
+{
+    dictitem_T *di1;
+    hashitem_T *hi2;
+    int                todo;
+
+    todo = (int)d2->dv_hashtab.ht_used;
+    for (hi2 = d2->dv_hashtab.ht_array; todo > 0; ++hi2)
+    {
+       if (!HASHITEM_EMPTY(hi2))
+       {
+           --todo;
+           di1 = dict_find(d1, hi2->hi_key, -1);
+           if (d1->dv_scope != 0)
+           {
+               /* Disallow replacing a builtin function in l: and g:.
+                * Check the key to be valid when adding to any
+                * scope. */
+               if (d1->dv_scope == VAR_DEF_SCOPE
+                       && HI2DI(hi2)->di_tv.v_type == VAR_FUNC
+                       && var_check_func_name(hi2->hi_key,
+                                                        di1 == NULL))
+                   break;
+               if (!valid_varname(hi2->hi_key))
+                   break;
+           }
+           if (di1 == NULL)
+           {
+               di1 = dictitem_copy(HI2DI(hi2));
+               if (di1 != NULL && dict_add(d1, di1) == FAIL)
+                   dictitem_free(di1);
+           }
+           else if (*action == 'e')
+           {
+               EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
+               break;
+           }
+           else if (*action == 'f' && HI2DI(hi2) != di1)
+           {
+               clear_tv(&di1->di_tv);
+               copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
+           }
+       }
+    }
+}
+
+/*
  * "extend(list, list [, idx])" function
  * "extend(dict, dict [, action])" function
  */
@@ -9896,6 +10239,8 @@ f_extend(argvars, rettv)
     typval_T   *argvars;
     typval_T   *rettv;
 {
+    char      *arg_errmsg = N_("extend() argument");
+
     if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST)
     {
        list_T          *l1, *l2;
@@ -9905,7 +10250,7 @@ f_extend(argvars, rettv)
 
        l1 = argvars[0].vval.v_list;
        l2 = argvars[1].vval.v_list;
-       if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)"extend()")
+       if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)_(arg_errmsg))
                && l2 != NULL)
        {
            if (argvars[2].v_type != VAR_UNKNOWN)
@@ -9935,16 +10280,13 @@ f_extend(argvars, rettv)
     }
     else if (argvars[0].v_type == VAR_DICT && argvars[1].v_type == VAR_DICT)
     {
-       dict_T          *d1, *d2;
-       dictitem_T      *di1;
-       char_u          *action;
-       int             i;
-       hashitem_T      *hi2;
-       int             todo;
+       dict_T  *d1, *d2;
+       char_u  *action;
+       int     i;
 
        d1 = argvars[0].vval.v_dict;
        d2 = argvars[1].vval.v_dict;
-       if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)"extend()")
+       if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)_(arg_errmsg))
                && d2 != NULL)
        {
            /* Check the third argument. */
@@ -9967,33 +10309,7 @@ f_extend(argvars, rettv)
            else
                action = (char_u *)"force";
 
-           /* Go over all entries in the second dict and add them to the
-            * first dict. */
-           todo = (int)d2->dv_hashtab.ht_used;
-           for (hi2 = d2->dv_hashtab.ht_array; todo > 0; ++hi2)
-           {
-               if (!HASHITEM_EMPTY(hi2))
-               {
-                   --todo;
-                   di1 = dict_find(d1, hi2->hi_key, -1);
-                   if (di1 == NULL)
-                   {
-                       di1 = dictitem_copy(HI2DI(hi2));
-                       if (di1 != NULL && dict_add(d1, di1) == FAIL)
-                           dictitem_free(di1);
-                   }
-                   else if (*action == 'e')
-                   {
-                       EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
-                       break;
-                   }
-                   else if (*action == 'f')
-                   {
-                       clear_tv(&di1->di_tv);
-                       copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
-                   }
-               }
-           }
+           dict_extend(d1, d2, action);
 
            copy_tv(&argvars[0], rettv);
        }
@@ -10097,9 +10413,9 @@ static void findfilendir __ARGS((typval_T *argvars, typval_T *rettv, int find_wh
 
     static void
 findfilendir(argvars, rettv, find_what)
-    typval_T   *argvars;
+    typval_T   *argvars UNUSED;
     typval_T   *rettv;
-    int                find_what;
+    int                find_what UNUSED;
 {
 #ifdef FEAT_SEARCHPATH
     char_u     *fname;
@@ -10140,7 +10456,7 @@ findfilendir(argvars, rettv, find_what)
     {
        do
        {
-           if (rettv->v_type == VAR_STRING)
+           if (rettv->v_type == VAR_STRING || rettv->v_type == VAR_LIST)
                vim_free(fresult);
            fresult = find_file_in_path_option(first ? fname : NULL,
                                               first ? (int)STRLEN(fname) : 0,
@@ -10186,20 +10502,22 @@ filter_map(argvars, rettv, map)
     typval_T   save_key;
     int                rem;
     int                todo;
-    char_u     *ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
+    char_u     *ermsg = (char_u *)(map ? "map()" : "filter()");
+    char       *arg_errmsg = (map ? N_("map() argument")
+                                  : N_("filter() argument"));
     int                save_did_emsg;
     int                idx = 0;
 
     if (argvars[0].v_type == VAR_LIST)
     {
        if ((l = argvars[0].vval.v_list) == NULL
-               || (map && tv_check_lock(l->lv_lock, ermsg)))
+               || tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
            return;
     }
     else if (argvars[0].v_type == VAR_DICT)
     {
        if ((d = argvars[0].vval.v_dict) == NULL
-               || (map && tv_check_lock(d->dv_lock, ermsg)))
+               || tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
            return;
     }
     else
@@ -10236,7 +10554,8 @@ filter_map(argvars, rettv, map)
                {
                    --todo;
                    di = HI2DI(hi);
-                   if (tv_check_lock(di->di_tv.v_lock, ermsg))
+                   if (tv_check_lock(di->di_tv.v_lock,
+                                                    (char_u *)_(arg_errmsg)))
                        break;
                    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
                    if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
@@ -10255,7 +10574,7 @@ filter_map(argvars, rettv, map)
 
            for (li = l->lv_first; li != NULL; li = nli)
            {
-               if (tv_check_lock(li->li_tv.v_lock, ermsg))
+               if (tv_check_lock(li->li_tv.v_lock, (char_u *)_(arg_errmsg)))
                    break;
                nli = li->li_next;
                vimvars[VV_KEY].vv_nr = idx;
@@ -10466,9 +10785,9 @@ static void foldclosed_both __ARGS((typval_T *argvars, typval_T *rettv, int end)
  */
     static void
 foldclosed_both(argvars, rettv, end)
-    typval_T   *argvars;
+    typval_T   *argvars UNUSED;
     typval_T   *rettv;
-    int                end;
+    int                end UNUSED;
 {
 #ifdef FEAT_FOLDING
     linenr_T   lnum;
@@ -10517,8 +10836,8 @@ f_foldclosedend(argvars, rettv)
  */
     static void
 f_foldlevel(argvars, rettv)
-    typval_T   *argvars;
-    typval_T   *rettv;
+    typval_T   *argvars UNUSED;
+    typval_T   *rettv UNUSED;
 {
 #ifdef FEAT_FOLDING
     linenr_T   lnum;
@@ -10667,7 +10986,26 @@ f_function(argvars, rettv)
        EMSG2(_("E700: Unknown function: %s"), s);
     else
     {
-       rettv->vval.v_string = vim_strsave(s);
+       if (STRNCMP(s, "s:", 2) == 0 || STRNCMP(s, "<SID>", 5) == 0)
+       {
+           char        sid_buf[25];
+           int         off = *s == 's' ? 2 : 5;
+
+           /* Expand s: and <SID> into <SNR>nr_, so that the function can
+            * also be called from another script. Using trans_function_name()
+            * would also work, but some plugins depend on the name being
+            * printable text. */
+           sprintf(sid_buf, "<SNR>%ld_", (long)current_SID);
+           rettv->vval.v_string =
+                           alloc((int)(STRLEN(sid_buf) + STRLEN(s + off) + 1));
+           if (rettv->vval.v_string != NULL)
+           {
+               STRCPY(rettv->vval.v_string, sid_buf);
+               STRCAT(rettv->vval.v_string, s + off);
+           }
+       }
+       else
+           rettv->vval.v_string = vim_strsave(s);
        rettv->v_type = VAR_FUNC;
     }
 }
@@ -10798,7 +11136,7 @@ f_getbufline(argvars, rettv)
 
     (void)get_tv_number(&argvars[0]);      /* issue errmsg if type error */
     ++emsg_off;
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], FALSE);
     --emsg_off;
 
     lnum = get_tv_lnum_buf(&argvars[1], buf);
@@ -10822,11 +11160,12 @@ f_getbufvar(argvars, rettv)
     buf_T      *save_curbuf;
     char_u     *varname;
     dictitem_T *v;
+    int                done = FALSE;
 
     (void)get_tv_number(&argvars[0]);      /* issue errmsg if type error */
     varname = get_tv_string_chk(&argvars[1]);
     ++emsg_off;
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], FALSE);
 
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = NULL;
@@ -10838,24 +11177,37 @@ f_getbufvar(argvars, rettv)
        curbuf = buf;
 
        if (*varname == '&')    /* buffer-local-option */
-           get_option_tv(&varname, rettv, TRUE);
+       {
+           if (get_option_tv(&varname, rettv, TRUE) == OK)
+               done = TRUE;
+       }
+       else if (STRCMP(varname, "changedtick") == 0)
+       {
+           rettv->v_type = VAR_NUMBER;
+           rettv->vval.v_number = curbuf->b_changedtick;
+           done = TRUE;
+       }
        else
        {
-           if (*varname == NUL)
-               /* let getbufvar({nr}, "") return the "b:" dictionary.  The
-                * scope prefix before the NUL byte is required by
-                * find_var_in_ht(). */
-               varname = (char_u *)"b:" + 2;
-           /* look up the variable */
-           v = find_var_in_ht(&curbuf->b_vars.dv_hashtab, varname, FALSE);
+           /* Look up the variable. */
+           /* Let getbufvar({nr}, "") return the "b:" dictionary. */
+           v = find_var_in_ht(&curbuf->b_vars->dv_hashtab,
+                                                        'b', varname, FALSE);
            if (v != NULL)
+           {
                copy_tv(&v->di_tv, rettv);
+               done = TRUE;
+           }
        }
 
        /* restore previous notion of curbuf */
        curbuf = save_curbuf;
     }
 
+    if (!done && argvars[2].v_type != VAR_UNKNOWN)
+       /* use the default value */
+       copy_tv(&argvars[2], rettv);
+
     --emsg_off;
 }
 
@@ -10930,27 +11282,7 @@ f_getchar(argvars, rettv)
        rettv->vval.v_string = vim_strsave(temp);
 
 #ifdef FEAT_MOUSE
-       if (n == K_LEFTMOUSE
-               || n == K_LEFTMOUSE_NM
-               || n == K_LEFTDRAG
-               || n == K_LEFTRELEASE
-               || n == K_LEFTRELEASE_NM
-               || n == K_MIDDLEMOUSE
-               || n == K_MIDDLEDRAG
-               || n == K_MIDDLERELEASE
-               || n == K_RIGHTMOUSE
-               || n == K_RIGHTDRAG
-               || n == K_RIGHTRELEASE
-               || n == K_X1MOUSE
-               || n == K_X1DRAG
-               || n == K_X1RELEASE
-               || n == K_X2MOUSE
-               || n == K_X2DRAG
-               || n == K_X2RELEASE
-               || n == K_MOUSELEFT
-               || n == K_MOUSERIGHT
-               || n == K_MOUSEDOWN
-               || n == K_MOUSEUP)
+       if (is_mouse_key(n))
        {
            int         row = mouse_row;
            int         col = mouse_col;
@@ -11039,18 +11371,22 @@ f_getcwd(argvars, rettv)
     typval_T   *argvars UNUSED;
     typval_T   *rettv;
 {
-    char_u     cwd[MAXPATHL];
+    char_u     *cwd;
 
     rettv->v_type = VAR_STRING;
-    if (mch_dirname(cwd, MAXPATHL) == FAIL)
-       rettv->vval.v_string = NULL;
-    else
+    rettv->vval.v_string = NULL;
+    cwd = alloc(MAXPATHL);
+    if (cwd != NULL)
     {
-       rettv->vval.v_string = vim_strsave(cwd);
+       if (mch_dirname(cwd, MAXPATHL) != FAIL)
+       {
+           rettv->vval.v_string = vim_strsave(cwd);
 #ifdef BACKSLASH_IN_FILENAME
-       if (rettv->vval.v_string != NULL)
-           slash_adjust(rettv->vval.v_string);
+           if (rettv->vval.v_string != NULL)
+               slash_adjust(rettv->vval.v_string);
 #endif
+       }
+       vim_free(cwd);
     }
 }
 
@@ -11289,7 +11625,7 @@ f_getline(argvars, rettv)
     static void
 f_getmatches(argvars, rettv)
     typval_T   *argvars UNUSED;
-    typval_T   *rettv;
+    typval_T   *rettv UNUSED;
 {
 #ifdef FEAT_SEARCH_EXTRA
     dict_T     *dict;
@@ -11477,6 +11813,7 @@ f_gettabvar(argvars, rettv)
     tabpage_T  *tp;
     dictitem_T *v;
     char_u     *varname;
+    int                done = FALSE;
 
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = NULL;
@@ -11486,10 +11823,16 @@ f_gettabvar(argvars, rettv)
     if (tp != NULL && varname != NULL)
     {
        /* look up the variable */
-       v = find_var_in_ht(&tp->tp_vars.dv_hashtab, varname, FALSE);
+       v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 0, varname, FALSE);
        if (v != NULL)
+       {
            copy_tv(&v->di_tv, rettv);
+           done = TRUE;
+       }
     }
+
+    if (!done && argvars[2].v_type != VAR_UNKNOWN)
+       copy_tv(&argvars[2], rettv);
 }
 
 /*
@@ -11549,7 +11892,7 @@ f_getwinposy(argvars, rettv)
     static win_T *
 find_win_by_nr(vp, tp)
     typval_T   *vp;
-    tabpage_T  *tp;        /* NULL for current tab page */
+    tabpage_T  *tp UNUSED;     /* NULL for current tab page */
 {
 #ifdef FEAT_WINDOWS
     win_T      *wp;
@@ -11599,7 +11942,9 @@ getwinvar(argvars, rettv, off)
     win_T      *win, *oldcurwin;
     char_u     *varname;
     dictitem_T *v;
-    tabpage_T  *tp;
+    tabpage_T  *tp = NULL;
+    tabpage_T  *oldtabpage;
+    int                done = FALSE;
 
 #ifdef FEAT_WINDOWS
     if (off == 1)
@@ -11616,32 +11961,35 @@ getwinvar(argvars, rettv, off)
 
     if (win != NULL && varname != NULL)
     {
-       /* Set curwin to be our win, temporarily.  Also set curbuf, so
-        * that we can get buffer-local options. */
-       oldcurwin = curwin;
-       curwin = win;
-       curbuf = win->w_buffer;
+       /* Set curwin to be our win, temporarily.  Also set the tabpage,
+        * otherwise the window is not valid. */
+       switch_win(&oldcurwin, &oldtabpage, win, tp, TRUE);
 
        if (*varname == '&')    /* window-local-option */
-           get_option_tv(&varname, rettv, 1);
+       {
+           if (get_option_tv(&varname, rettv, 1) == OK)
+               done = TRUE;
+       }
        else
        {
-           if (*varname == NUL)
-               /* let getwinvar({nr}, "") return the "w:" dictionary.  The
-                * scope prefix before the NUL byte is required by
-                * find_var_in_ht(). */
-               varname = (char_u *)"w:" + 2;
-           /* look up the variable */
-           v = find_var_in_ht(&win->w_vars.dv_hashtab, varname, FALSE);
+           /* Look up the variable. */
+           /* Let getwinvar({nr}, "") return the "w:" dictionary. */
+           v = find_var_in_ht(&win->w_vars->dv_hashtab, 'w', varname, FALSE);
            if (v != NULL)
+           {
                copy_tv(&v->di_tv, rettv);
+               done = TRUE;
+           }
        }
 
        /* restore previous notion of curwin */
-       curwin = oldcurwin;
-       curbuf = curwin->w_buffer;
+       restore_win(oldcurwin, oldtabpage, TRUE);
     }
 
+    if (!done && argvars[off + 2].v_type != VAR_UNKNOWN)
+       /* use the default return value */
+       copy_tv(&argvars[off + 2], rettv);
+
     --emsg_off;
 }
 
@@ -11653,22 +12001,44 @@ f_glob(argvars, rettv)
     typval_T   *argvars;
     typval_T   *rettv;
 {
-    int                flags = WILD_SILENT|WILD_USE_NL;
+    int                options = WILD_SILENT|WILD_USE_NL;
     expand_T   xpc;
     int                error = FALSE;
 
     /* When the optional second argument is non-zero, don't remove matches
-    * for 'wildignore' and don't put matches for 'suffixes' at the end. */
-    if (argvars[1].v_type != VAR_UNKNOWN
-                               && get_tv_number_chk(&argvars[1], &error))
-       flags |= WILD_KEEP_ALL;
+     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
     rettv->v_type = VAR_STRING;
+    if (argvars[1].v_type != VAR_UNKNOWN)
+    {
+       if (get_tv_number_chk(&argvars[1], &error))
+           options |= WILD_KEEP_ALL;
+       if (argvars[2].v_type != VAR_UNKNOWN
+                                   && get_tv_number_chk(&argvars[2], &error))
+       {
+           rettv->v_type = VAR_LIST;
+           rettv->vval.v_list = NULL;
+       }
+    }
     if (!error)
     {
        ExpandInit(&xpc);
        xpc.xp_context = EXPAND_FILES;
-       rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
-                                                      NULL, flags, WILD_ALL);
+       if (p_wic)
+           options += WILD_ICASE;
+       if (rettv->v_type == VAR_STRING)
+           rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
+                                                    NULL, options, WILD_ALL);
+       else if (rettv_list_alloc(rettv) != FAIL)
+       {
+         int i;
+
+         ExpandOne(&xpc, get_tv_string(&argvars[0]),
+                                               NULL, options, WILD_ALL_KEEP);
+         for (i = 0; i < xpc.xp_numfiles; i++)
+             list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
+
+         ExpandCleanup(&xpc);
+       }
     }
     else
        rettv->vval.v_string = NULL;
@@ -11741,9 +12111,6 @@ f_has(argvars, rettv)
 #ifdef __QNX__
        "qnx",
 #endif
-#ifdef RISCOS
-       "riscos",
-#endif
 #ifdef UNIX
        "unix",
 #endif
@@ -11786,6 +12153,11 @@ f_has(argvars, rettv)
        "all_builtin_terms",
 # endif
 #endif
+#if defined(FEAT_BROWSE) && (defined(USE_FILE_CHOOSER) \
+       || defined(FEAT_GUI_W32) \
+       || defined(FEAT_GUI_MOTIF))
+       "browsefilter",
+#endif
 #ifdef FEAT_BYTEOFF
        "byte_offset",
 #endif
@@ -11856,7 +12228,7 @@ f_has(argvars, rettv)
 #ifdef FEAT_SEARCHPATH
        "file_in_path",
 #endif
-#if defined(UNIX) && !defined(USE_SYSTEM)
+#ifdef FEAT_FILTERPIPE
        "filterpipe",
 #endif
 #ifdef FEAT_FIND_ID
@@ -11978,9 +12350,15 @@ f_has(argvars, rettv)
 # ifdef FEAT_MOUSE_PTERM
        "mouse_pterm",
 # endif
+# ifdef FEAT_MOUSE_SGR
+       "mouse_sgr",
+# endif
 # ifdef FEAT_SYSMOUSE
        "mouse_sysmouse",
 # endif
+# ifdef FEAT_MOUSE_URXVT
+       "mouse_urxvt",
+# endif
 # ifdef FEAT_MOUSE_XTERM
        "mouse_xterm",
 # endif
@@ -12002,9 +12380,6 @@ f_has(argvars, rettv)
 #ifdef FEAT_OLE
        "ole",
 #endif
-#ifdef FEAT_OSFILETYPE
-       "osfiletype",
-#endif
 #ifdef FEAT_PATH_EXTRA
        "path_extra",
 #endif
@@ -12116,6 +12491,9 @@ f_has(argvars, rettv)
 #ifdef FEAT_TOOLBAR
        "toolbar",
 #endif
+#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+       "unnamedplus",
+#endif
 #ifdef FEAT_USR_CMDS
        "user-commands",    /* was accidentally included in 5.4 */
        "user_commands",
@@ -12159,6 +12537,9 @@ f_has(argvars, rettv)
 #ifdef FEAT_XFONTSET
        "xfontset",
 #endif
+#ifdef FEAT_XPM_W32
+       "xpm_w32",
+#endif
 #ifdef USE_XSMP
        "xsmp",
 #endif
@@ -12572,7 +12953,7 @@ f_index(argvars, rettv)
        }
 
        for ( ; item != NULL; item = item->li_next, ++idx)
-           if (tv_equal(&item->li_tv, &argvars[1], ic))
+           if (tv_equal(&item->li_tv, &argvars[1], ic, FALSE))
            {
                rettv->vval.v_number = idx;
                break;
@@ -12648,6 +13029,7 @@ get_user_input(argvars, rettv, inputdialog)
                int     xp_namelen;
                long    argt;
 
+               /* input() with a third argument: completion */
                rettv->vval.v_string = NULL;
 
                xp_name = get_tv_string_buf_chk(&argvars[2], buf);
@@ -12666,6 +13048,11 @@ get_user_input(argvars, rettv, inputdialog)
            rettv->vval.v_string =
                getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
                                  xp_type, xp_arg);
+       if (inputdialog && rettv->vval.v_string == NULL
+               && argvars[1].v_type != VAR_UNKNOWN
+               && argvars[2].v_type != VAR_UNKNOWN)
+           rettv->vval.v_string = vim_strsave(get_tv_string_buf(
+                                                          &argvars[2], buf));
 
        vim_free(xp_arg);
 
@@ -12712,7 +13099,7 @@ f_inputdialog(argvars, rettv)
            IObuff[0] = NUL;
        if (message != NULL && defstr != NULL
                && do_dialog(VIM_QUESTION, NULL, message,
-                               (char_u *)_("&OK\n&Cancel"), 1, IObuff) == 1)
+                         (char_u *)_("&OK\n&Cancel"), 1, IObuff, FALSE) == 1)
            rettv->vval.v_string = vim_strsave(IObuff);
        else
        {
@@ -12850,7 +13237,7 @@ f_insert(argvars, rettv)
     if (argvars[0].v_type != VAR_LIST)
        EMSG2(_(e_listarg), "insert()");
     else if ((l = argvars[0].vval.v_list) != NULL
-           && !tv_check_lock(l->lv_lock, (char_u *)"insert()"))
+           && !tv_check_lock(l->lv_lock, (char_u *)_("insert() argument")))
     {
        if (argvars[2].v_type != VAR_UNKNOWN)
            before = get_tv_number_chk(&argvars[2], &error);
@@ -12877,6 +13264,17 @@ f_insert(argvars, rettv)
 }
 
 /*
+ * "invert(expr)" function
+ */
+    static void
+f_invert(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    rettv->vval.v_number = ~get_tv_number_chk(&argvars[0], NULL);
+}
+
+/*
  * "isdirectory()" function
  */
     static void
@@ -13245,7 +13643,7 @@ f_line2byte(argvars, rettv)
  */
     static void
 f_lispindent(argvars, rettv)
-    typval_T   *argvars;
+    typval_T   *argvars UNUSED;
     typval_T   *rettv;
 {
 #ifdef FEAT_LISP
@@ -13290,8 +13688,10 @@ get_maparg(argvars, rettv, exact)
     char_u     *keys_buf = NULL;
     char_u     *rhs;
     int                mode;
-    garray_T   ga;
     int                abbr = FALSE;
+    int                get_dict = FALSE;
+    mapblock_T *mp;
+    int                buffer_local;
 
     /* return empty string for failure */
     rettv->v_type = VAR_STRING;
@@ -13305,7 +13705,11 @@ get_maparg(argvars, rettv, exact)
     {
        which = get_tv_string_buf_chk(&argvars[1], buf);
        if (argvars[2].v_type != VAR_UNKNOWN)
+       {
            abbr = get_tv_number(&argvars[2]);
+           if (argvars[3].v_type != VAR_UNKNOWN)
+               get_dict = get_tv_number(&argvars[3]);
+       }
     }
     else
        which = (char_u *)"";
@@ -13315,19 +13719,35 @@ get_maparg(argvars, rettv, exact)
     mode = get_map_mode(&which, 0);
 
     keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, FALSE);
-    rhs = check_map(keys, mode, exact, FALSE, abbr);
+    rhs = check_map(keys, mode, exact, FALSE, abbr, &mp, &buffer_local);
     vim_free(keys_buf);
-    if (rhs != NULL)
+
+    if (!get_dict)
     {
-       ga_init(&ga);
-       ga.ga_itemsize = 1;
-       ga.ga_growsize = 40;
+       /* Return a string. */
+       if (rhs != NULL)
+           rettv->vval.v_string = str2special_save(rhs, FALSE);
 
-       while (*rhs != NUL)
-           ga_concat(&ga, str2special(&rhs, FALSE));
+    }
+    else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL)
+    {
+       /* Return a dictionary. */
+       char_u      *lhs = str2special_save(mp->m_keys, TRUE);
+       char_u      *mapmode = map_mode_to_chars(mp->m_mode);
+       dict_T      *dict = rettv->vval.v_dict;
 
-       ga_append(&ga, NUL);
-       rettv->vval.v_string = (char_u *)ga.ga_data;
+       dict_add_nr_str(dict, "lhs",     0L, lhs);
+       dict_add_nr_str(dict, "rhs",     0L, mp->m_orig_str);
+       dict_add_nr_str(dict, "noremap", mp->m_noremap ? 1L : 0L , NULL);
+       dict_add_nr_str(dict, "expr",    mp->m_expr    ? 1L : 0L, NULL);
+       dict_add_nr_str(dict, "silent",  mp->m_silent  ? 1L : 0L, NULL);
+       dict_add_nr_str(dict, "sid",     (long)mp->m_script_ID, NULL);
+       dict_add_nr_str(dict, "buffer",  (long)buffer_local, NULL);
+       dict_add_nr_str(dict, "nowait",  mp->m_nowait  ? 1L : 0L, NULL);
+       dict_add_nr_str(dict, "mode",    0L, mapmode);
+
+       vim_free(lhs);
+       vim_free(mapmode);
     }
 }
 
@@ -13367,6 +13787,23 @@ f_log10(argvars, rettv)
 }
 #endif
 
+#ifdef FEAT_LUA
+/*
+ * "luaeval()" function
+ */
+    static void
+f_luaeval(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    char_u     *str;
+    char_u     buf[NUMBUFLEN];
+
+    str = get_tv_string_buf(&argvars[0], buf);
+    do_luaeval(str, argvars + 1, rettv);
+}
+#endif
+
 /*
  * "map()" function
  */
@@ -13577,7 +14014,7 @@ find_some_match(argvars, rettv, type)
                rettv->vval.v_number += (varnumber_T)(str - expr);
            }
        }
-       vim_free(regmatch.regprog);
+       vim_regfree(regmatch.regprog);
     }
 
 theend:
@@ -13601,8 +14038,8 @@ f_match(argvars, rettv)
  */
     static void
 f_matchadd(argvars, rettv)
-    typval_T   *argvars;
-    typval_T   *rettv;
+    typval_T   *argvars UNUSED;
+    typval_T   *rettv UNUSED;
 {
 #ifdef FEAT_SEARCH_EXTRA
     char_u     buf[NUMBUFLEN];
@@ -13639,7 +14076,7 @@ f_matchadd(argvars, rettv)
  */
     static void
 f_matcharg(argvars, rettv)
-    typval_T   *argvars;
+    typval_T   *argvars UNUSED;
     typval_T   *rettv;
 {
     if (rettv_list_alloc(rettv) == OK)
@@ -13671,8 +14108,8 @@ f_matcharg(argvars, rettv)
  */
     static void
 f_matchdelete(argvars, rettv)
-    typval_T   *argvars;
-    typval_T   *rettv;
+    typval_T   *argvars UNUSED;
+    typval_T   *rettv UNUSED;
 {
 #ifdef FEAT_SEARCH_EXTRA
     rettv->vval.v_number = match_delete(curwin,
@@ -13942,7 +14379,7 @@ f_mode(argvars, rettv)
     rettv->v_type = VAR_STRING;
 }
 
-#ifdef FEAT_MZSCHEME
+#if defined(FEAT_MZSCHEME) || defined(PROTO)
 /*
  * "mzeval()" function
  */
@@ -13957,6 +14394,22 @@ f_mzeval(argvars, rettv)
     str = get_tv_string_buf(&argvars[0], buf);
     do_mzeval(str, rettv);
 }
+
+    void
+mzscheme_call_vim(name, args, rettv)
+    char_u     *name;
+    typval_T   *args;
+    typval_T   *rettv;
+{
+    typval_T argvars[3];
+
+    argvars[0].v_type = VAR_STRING;
+    argvars[0].vval.v_string = name;
+    copy_tv(args, &argvars[1]);
+    argvars[2].v_type = VAR_UNKNOWN;
+    f_call(argvars, rettv);
+    clear_tv(&argvars[1]);
+}
 #endif
 
 /*
@@ -13994,7 +14447,16 @@ f_nr2char(argvars, rettv)
 
 #ifdef FEAT_MBYTE
     if (has_mbyte)
-       buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
+    {
+       int     utf8 = 0;
+
+       if (argvars[1].v_type != VAR_UNKNOWN)
+           utf8 = get_tv_number_chk(&argvars[1], NULL);
+       if (utf8)
+           buf[(*utf_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
+       else
+           buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
+    }
     else
 #endif
     {
@@ -14006,6 +14468,18 @@ f_nr2char(argvars, rettv)
 }
 
 /*
+ * "or(expr, expr)" function
+ */
+    static void
+f_or(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
+                                       | get_tv_number_chk(&argvars[1], NULL);
+}
+
+/*
  * "pathshorten()" function
  */
     static void
@@ -14125,6 +14599,40 @@ f_pumvisible(argvars, rettv)
 #endif
 }
 
+#ifdef FEAT_PYTHON3
+/*
+ * "py3eval()" function
+ */
+    static void
+f_py3eval(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    char_u     *str;
+    char_u     buf[NUMBUFLEN];
+
+    str = get_tv_string_buf(&argvars[0], buf);
+    do_py3eval(str, rettv);
+}
+#endif
+
+#ifdef FEAT_PYTHON
+/*
+ * "pyeval()" function
+ */
+    static void
+f_pyeval(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    char_u     *str;
+    char_u     buf[NUMBUFLEN];
+
+    str = get_tv_string_buf(&argvars[0], buf);
+    do_pyeval(str, rettv);
+}
+#endif
+
 /*
  * "range()" function
  */
@@ -14177,22 +14685,19 @@ f_readfile(argvars, rettv)
     typval_T   *rettv;
 {
     int                binary = FALSE;
+    int                failed = FALSE;
     char_u     *fname;
     FILE       *fd;
-    listitem_T *li;
-#define FREAD_SIZE 200     /* optimized for text lines */
-    char_u     buf[FREAD_SIZE];
-    int                readlen;    /* size of last fread() */
-    int                buflen;     /* nr of valid chars in buf[] */
-    int                filtd;      /* how much in buf[] was NUL -> '\n' filtered */
-    int                tolist;     /* first byte in buf[] still to be put in list */
-    int                chop;       /* how many CR to chop off */
-    char_u     *prev = NULL;   /* previously read bytes, if any */
-    int                prevlen = 0;    /* length of "prev" if not NULL */
-    char_u     *s;
-    int                len;
-    long       maxline = MAXLNUM;
-    long       cnt = 0;
+    char_u     buf[(IOSIZE/256)*256];  /* rounded to avoid odd + 1 */
+    int                io_size = sizeof(buf);
+    int                readlen;                /* size of last fread() */
+    char_u     *prev    = NULL;        /* previously read bytes, if any */
+    long       prevlen  = 0;           /* length of data in prev */
+    long       prevsize = 0;           /* size of prev buffer */
+    long       maxline  = MAXLNUM;
+    long       cnt      = 0;
+    char_u     *p;                     /* position in buf */
+    char_u     *start;                 /* start of current line */
 
     if (argvars[1].v_type != VAR_UNKNOWN)
     {
@@ -14214,49 +14719,61 @@ f_readfile(argvars, rettv)
        return;
     }
 
-    filtd = 0;
     while (cnt < maxline || maxline < 0)
     {
-       readlen = (int)fread(buf + filtd, 1, FREAD_SIZE - filtd, fd);
-       buflen = filtd + readlen;
-       tolist = 0;
-       for ( ; filtd < buflen || readlen <= 0; ++filtd)
+       readlen = (int)fread(buf, 1, io_size, fd);
+
+       /* This for loop processes what was read, but is also entered at end
+        * of file so that either:
+        * - an incomplete line gets written
+        * - a "binary" file gets an empty line at the end if it ends in a
+        *   newline.  */
+       for (p = buf, start = buf;
+               p < buf + readlen || (readlen <= 0 && (prevlen > 0 || binary));
+               ++p)
        {
-           if (buf[filtd] == '\n' || readlen <= 0)
+           if (*p == '\n' || readlen <= 0)
            {
-               /* Only when in binary mode add an empty list item when the
-                * last line ends in a '\n'. */
-               if (!binary && readlen == 0 && filtd == 0)
-                   break;
+               listitem_T  *li;
+               char_u      *s  = NULL;
+               long_u      len = p - start;
 
-               /* Found end-of-line or end-of-file: add a text line to the
-                * list. */
-               chop = 0;
-               if (!binary)
-                   while (filtd - chop - 1 >= tolist
-                                         && buf[filtd - chop - 1] == '\r')
-                       ++chop;
-               len = filtd - tolist - chop;
-               if (prev == NULL)
-                   s = vim_strnsave(buf + tolist, len);
+               /* Finished a line.  Remove CRs before NL. */
+               if (readlen > 0 && !binary)
+               {
+                   while (len > 0 && start[len - 1] == '\r')
+                       --len;
+                   /* removal may cross back to the "prev" string */
+                   if (len == 0)
+                       while (prevlen > 0 && prev[prevlen - 1] == '\r')
+                           --prevlen;
+               }
+               if (prevlen == 0)
+                   s = vim_strnsave(start, (int)len);
                else
                {
-                   s = alloc((unsigned)(prevlen + len + 1));
-                   if (s != NULL)
+                   /* Change "prev" buffer to be the right size.  This way
+                    * the bytes are only copied once, and very long lines are
+                    * allocated only once.  */
+                   if ((s = vim_realloc(prev, prevlen + len + 1)) != NULL)
                    {
-                       mch_memmove(s, prev, prevlen);
-                       vim_free(prev);
-                       prev = NULL;
-                       mch_memmove(s + prevlen, buf + tolist, len);
+                       mch_memmove(s + prevlen, start, len);
                        s[prevlen + len] = NUL;
+                       prev = NULL; /* the list will own the string */
+                       prevlen = prevsize = 0;
                    }
                }
-               tolist = filtd + 1;
+               if (s == NULL)
+               {
+                   do_outofmem_msg((long_u) prevlen + len + 1);
+                   failed = TRUE;
+                   break;
+               }
 
-               li = listitem_alloc();
-               if (li == NULL)
+               if ((li = listitem_alloc()) == NULL)
                {
                    vim_free(s);
+                   failed = TRUE;
                    break;
                }
                li->li_tv.v_type = VAR_STRING;
@@ -14264,71 +14781,111 @@ f_readfile(argvars, rettv)
                li->li_tv.vval.v_string = s;
                list_append(rettv->vval.v_list, li);
 
-               if (++cnt >= maxline && maxline >= 0)
-                   break;
-               if (readlen <= 0)
+               start = p + 1; /* step over newline */
+               if ((++cnt >= maxline && maxline >= 0) || readlen <= 0)
                    break;
            }
-           else if (buf[filtd] == NUL)
-               buf[filtd] = '\n';
+           else if (*p == NUL)
+               *p = '\n';
 #ifdef FEAT_MBYTE
-           else if (buf[filtd] == 0xef
-                   && enc_utf8
-                   && filtd + 2 < buflen
-                   && !binary
-                   && buf[filtd + 1] == 0xbb
-                   && buf[filtd + 2] == 0xbf)
+           /* Check for utf8 "bom"; U+FEFF is encoded as EF BB BF.  Do this
+            * when finding the BF and check the previous two bytes. */
+           else if (*p == 0xbf && enc_utf8 && !binary)
            {
-               /* remove utf-8 byte order mark */
-               mch_memmove(buf + filtd, buf + filtd + 3, buflen - filtd - 3);
-               --filtd;
-               buflen -= 3;
+               /* Find the two bytes before the 0xbf.  If p is at buf, or buf
+                * + 1, these may be in the "prev" string. */
+               char_u back1 = p >= buf + 1 ? p[-1]
+                                    : prevlen >= 1 ? prev[prevlen - 1] : NUL;
+               char_u back2 = p >= buf + 2 ? p[-2]
+                         : p == buf + 1 && prevlen >= 1 ? prev[prevlen - 1]
+                         : prevlen >= 2 ? prev[prevlen - 2] : NUL;
+
+               if (back2 == 0xef && back1 == 0xbb)
+               {
+                   char_u *dest = p - 2;
+
+                   /* Usually a BOM is at the beginning of a file, and so at
+                    * the beginning of a line; then we can just step over it.
+                    */
+                   if (start == dest)
+                       start = p + 1;
+                   else
+                   {
+                       /* have to shuffle buf to close gap */
+                       int adjust_prevlen = 0;
+
+                       if (dest < buf)
+                       {
+                           adjust_prevlen = (int)(buf - dest); /* must be 1 or 2 */
+                           dest = buf;
+                       }
+                       if (readlen > p - buf + 1)
+                           mch_memmove(dest, p + 1, readlen - (p - buf) - 1);
+                       readlen -= 3 - adjust_prevlen;
+                       prevlen -= adjust_prevlen;
+                       p = dest - 1;
+                   }
+               }
            }
 #endif
-       }
-       if (readlen <= 0)
-           break;
+       } /* for */
 
-       if (tolist == 0)
+       if (failed || (cnt >= maxline && maxline >= 0) || readlen <= 0)
+           break;
+       if (start < p)
        {
-           /* "buf" is full, need to move text to an allocated buffer */
-           if (prev == NULL)
-           {
-               prev = vim_strnsave(buf, buflen);
-               prevlen = buflen;
-           }
-           else
+           /* There's part of a line in buf, store it in "prev". */
+           if (p - start + prevlen >= prevsize)
            {
-               s = alloc((unsigned)(prevlen + buflen));
-               if (s != NULL)
+               /* need bigger "prev" buffer */
+               char_u *newprev;
+
+               /* A common use case is ordinary text files and "prev" gets a
+                * fragment of a line, so the first allocation is made
+                * small, to avoid repeatedly 'allocing' large and
+                * 'reallocing' small. */
+               if (prevsize == 0)
+                   prevsize = (long)(p - start);
+               else
+               {
+                   long grow50pc = (prevsize * 3) / 2;
+                   long growmin  = (long)((p - start) * 2 + prevlen);
+                   prevsize = grow50pc > growmin ? grow50pc : growmin;
+               }
+               newprev = prev == NULL ? alloc(prevsize)
+                                               : vim_realloc(prev, prevsize);
+               if (newprev == NULL)
                {
-                   mch_memmove(s, prev, prevlen);
-                   mch_memmove(s + prevlen, buf, buflen);
-                   vim_free(prev);
-                   prev = s;
-                   prevlen += buflen;
+                   do_outofmem_msg((long_u)prevsize);
+                   failed = TRUE;
+                   break;
                }
+               prev = newprev;
            }
-           filtd = 0;
-       }
-       else
-       {
-           mch_memmove(buf, buf + tolist, buflen - tolist);
-           filtd -= tolist;
+           /* Add the line part to end of "prev". */
+           mch_memmove(prev + prevlen, start, p - start);
+           prevlen += (long)(p - start);
        }
-    }
+    } /* while */
 
     /*
      * For a negative line count use only the lines at the end of the file,
      * free the rest.
      */
-    if (maxline < 0)
+    if (!failed && maxline < 0)
        while (cnt > -maxline)
        {
            listitem_remove(rettv->vval.v_list, rettv->vval.v_list->lv_first);
            --cnt;
        }
 
+    if (failed)
+    {
+       list_free(rettv->vval.v_list, TRUE);
+       /* readfile doc says an empty list is returned on error */
+       rettv->vval.v_list = list_alloc();
+    }
+
     vim_free(prev);
     fclose(fd);
 }
@@ -14369,8 +14926,8 @@ list2proftime(arg, tm)
  */
     static void
 f_reltime(argvars, rettv)
-    typval_T   *argvars;
-    typval_T   *rettv;
+    typval_T   *argvars UNUSED;
+    typval_T   *rettv UNUSED;
 {
 #ifdef FEAT_RELTIME
     proftime_T res;
@@ -14418,7 +14975,7 @@ f_reltime(argvars, rettv)
  */
     static void
 f_reltimestr(argvars, rettv)
-    typval_T   *argvars;
+    typval_T   *argvars UNUSED;
     typval_T   *rettv;
 {
 #ifdef FEAT_RELTIME
@@ -14691,13 +15248,14 @@ f_remove(argvars, rettv)
     char_u     *key;
     dict_T     *d;
     dictitem_T *di;
+    char       *arg_errmsg = N_("remove() argument");
 
     if (argvars[0].v_type == VAR_DICT)
     {
        if (argvars[2].v_type != VAR_UNKNOWN)
            EMSG2(_(e_toomanyarg), "remove()");
        else if ((d = argvars[0].vval.v_dict) != NULL
-               && !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
+               && !tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
        {
            key = get_tv_string_chk(&argvars[1]);
            if (key != NULL)
@@ -14717,7 +15275,7 @@ f_remove(argvars, rettv)
     else if (argvars[0].v_type != VAR_LIST)
        EMSG2(_(e_listdictarg), "remove()");
     else if ((l = argvars[0].vval.v_list) != NULL
-           && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
+           && !tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
     {
        int         error = FALSE;
 
@@ -14847,6 +15405,9 @@ f_resolve(argvars, rettv)
     typval_T   *rettv;
 {
     char_u     *p;
+#ifdef HAVE_READLINK
+    char_u     *buf = NULL;
+#endif
 
     p = get_tv_string(&argvars[0]);
 #ifdef FEAT_SHORTCUT
@@ -14862,7 +15423,6 @@ f_resolve(argvars, rettv)
 #else
 # ifdef HAVE_READLINK
     {
-       char_u  buf[MAXPATHL + 1];
        char_u  *cpy;
        int     len;
        char_u  *remain = NULL;
@@ -14879,7 +15439,10 @@ f_resolve(argvars, rettv)
 
        len = STRLEN(p);
        if (len > 0 && after_pathsep(p, p + len))
+       {
            has_trailing_pathsep = TRUE;
+           p[len - 1] = NUL; /* the trailing slash breaks readlink() */
+       }
 
        q = getnextcomp(p);
        if (*q != NUL)
@@ -14890,6 +15453,10 @@ f_resolve(argvars, rettv)
            q[-1] = NUL;
        }
 
+       buf = alloc(MAXPATHL + 1);
+       if (buf == NULL)
+           goto fail;
+
        for (;;)
        {
            for (;;)
@@ -15033,6 +15600,7 @@ f_resolve(argvars, rettv)
 
 #ifdef HAVE_READLINK
 fail:
+    vim_free(buf);
 #endif
     rettv->v_type = VAR_STRING;
 }
@@ -15051,7 +15619,7 @@ f_reverse(argvars, rettv)
     if (argvars[0].v_type != VAR_LIST)
        EMSG2(_(e_listarg), "reverse()");
     else if ((l = argvars[0].vval.v_list) != NULL
-           && !tv_check_lock(l->lv_lock, (char_u *)"reverse()"))
+           && !tv_check_lock(l->lv_lock, (char_u *)_("reverse() argument")))
     {
        li = l->lv_last;
        l->lv_first = l->lv_last = NULL;
@@ -15225,36 +15793,123 @@ search_cmn(argvars, match_pos, flagsp)
        check_cursor();
     }
 
-    /* If 'n' flag is used: restore cursor position. */
-    if (flags & SP_NOMOVE)
-       curwin->w_cursor = save_cursor;
+    /* If 'n' flag is used: restore cursor position. */
+    if (flags & SP_NOMOVE)
+       curwin->w_cursor = save_cursor;
+    else
+       curwin->w_set_curswant = TRUE;
+theend:
+    p_ws = save_p_ws;
+
+    return retval;
+}
+
+#ifdef FEAT_FLOAT
+
+/*
+ * round() is not in C90, use ceil() or floor() instead.
+ */
+    float_T
+vim_round(f)
+    float_T f;
+{
+    return f > 0 ? floor(f + 0.5) : ceil(f - 0.5);
+}
+
+/*
+ * "round({float})" function
+ */
+    static void
+f_round(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    float_T    f;
+
+    rettv->v_type = VAR_FLOAT;
+    if (get_float_arg(argvars, &f) == OK)
+       rettv->vval.v_float = vim_round(f);
+    else
+       rettv->vval.v_float = 0.0;
+}
+#endif
+
+/*
+ * "screenattr()" function
+ */
+    static void
+f_screenattr(argvars, rettv)
+    typval_T   *argvars UNUSED;
+    typval_T   *rettv;
+{
+    int                row;
+    int                col;
+    int                c;
+
+    row = get_tv_number_chk(&argvars[0], NULL) - 1;
+    col = get_tv_number_chk(&argvars[1], NULL) - 1;
+    if (row < 0 || row >= screen_Rows
+           || col < 0 || col >= screen_Columns)
+       c = -1;
     else
-       curwin->w_set_curswant = TRUE;
-theend:
-    p_ws = save_p_ws;
-
-    return retval;
+       c = ScreenAttrs[LineOffset[row] + col];
+    rettv->vval.v_number = c;
 }
 
-#ifdef FEAT_FLOAT
 /*
- * "round({float})" function
+ * "screenchar()" function
  */
     static void
-f_round(argvars, rettv)
-    typval_T   *argvars;
+f_screenchar(argvars, rettv)
+    typval_T   *argvars UNUSED;
     typval_T   *rettv;
 {
-    float_T    f;
+    int                row;
+    int                col;
+    int                off;
+    int                c;
 
-    rettv->v_type = VAR_FLOAT;
-    if (get_float_arg(argvars, &f) == OK)
-       /* round() is not in C90, use ceil() or floor() instead. */
-       rettv->vval.v_float = f > 0 ? floor(f + 0.5) : ceil(f - 0.5);
+    row = get_tv_number_chk(&argvars[0], NULL) - 1;
+    col = get_tv_number_chk(&argvars[1], NULL) - 1;
+    if (row < 0 || row >= screen_Rows
+           || col < 0 || col >= screen_Columns)
+       c = -1;
     else
-       rettv->vval.v_float = 0.0;
-}
+    {
+       off = LineOffset[row] + col;
+#ifdef FEAT_MBYTE
+       if (enc_utf8 && ScreenLinesUC[off] != 0)
+           c = ScreenLinesUC[off];
+       else
 #endif
+           c = ScreenLines[off];
+    }
+    rettv->vval.v_number = c;
+}
+
+/*
+ * "screencol()" function
+ *
+ * First column is 1 to be consistent with virtcol().
+ */
+    static void
+f_screencol(argvars, rettv)
+    typval_T   *argvars UNUSED;
+    typval_T   *rettv;
+{
+    rettv->vval.v_number = screen_screencol() + 1;
+}
+
+/*
+ * "screenrow()" function
+ */
+    static void
+f_screenrow(argvars, rettv)
+    typval_T   *argvars UNUSED;
+    typval_T   *rettv;
+{
+    rettv->vval.v_number = screen_screenrow() + 1;
+}
 
 /*
  * "search()" function
@@ -15428,7 +16083,7 @@ do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos,
     int                flags;      /* SP_SETPCMARK and other SP_ values */
     pos_T      *match_pos;
     linenr_T   lnum_stop;  /* stop at this line if not zero */
-    long       time_limit; /* stop after this many msec */
+    long       time_limit UNUSED; /* stop after this many msec */
 {
     char_u     *save_cpo;
     char_u     *pat, *pat2 = NULL, *pat3 = NULL;
@@ -15671,7 +16326,7 @@ f_setbufvar(argvars, rettv)
        return;
     (void)get_tv_number(&argvars[0]);      /* issue errmsg if type error */
     varname = get_tv_string_chk(&argvars[1]);
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], FALSE);
     varp = &argvars[2];
 
     if (buf != NULL && varname != NULL && varp != NULL)
@@ -15761,6 +16416,15 @@ f_setline(argvars, rettv)
        rettv->vval.v_number = 1;       /* FAIL */
        if (line == NULL || lnum < 1 || lnum > curbuf->b_ml.ml_line_count + 1)
            break;
+
+       /* When coming here from Insert mode, sync undo, so that this can be
+        * undone separately from what was previously inserted. */
+       if (u_sync_once == 2)
+       {
+           u_sync_once = 1; /* notify that u_sync() was called */
+           u_sync(TRUE);
+       }
+
        if (lnum <= curbuf->b_ml.ml_line_count)
        {
            /* existing line, replace it */
@@ -15824,7 +16488,8 @@ set_qf_ll_list(wp, list_arg, action_arg, rettv)
                action = *act;
        }
 
-       if (l != NULL && set_errorlist(wp, l, action, NULL) == OK)
+       if (l != NULL && set_errorlist(wp, l, action,
+              (char_u *)(wp == NULL ? "setqflist()" : "setloclist()")) == OK)
            rettv->vval.v_number = 0;
     }
 #endif
@@ -15852,8 +16517,8 @@ f_setloclist(argvars, rettv)
  */
     static void
 f_setmatches(argvars, rettv)
-    typval_T   *argvars;
-    typval_T   *rettv;
+    typval_T   *argvars UNUSED;
+    typval_T   *rettv UNUSED;
 {
 #ifdef FEAT_SEARCH_EXTRA
     list_T     *l;
@@ -16039,24 +16704,34 @@ f_settabvar(argvars, rettv)
     typval_T   *argvars;
     typval_T   *rettv;
 {
+#ifdef FEAT_WINDOWS
     tabpage_T  *save_curtab;
+    tabpage_T  *tp;
+#endif
     char_u     *varname, *tabvarname;
     typval_T   *varp;
-    tabpage_T  *tp;
 
     rettv->vval.v_number = 0;
 
     if (check_restricted() || check_secure())
        return;
 
+#ifdef FEAT_WINDOWS
     tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
+#endif
     varname = get_tv_string_chk(&argvars[1]);
     varp = &argvars[2];
 
-    if (tp != NULL && varname != NULL && varp != NULL)
+    if (varname != NULL && varp != NULL
+#ifdef FEAT_WINDOWS
+           && tp != NULL
+#endif
+           )
     {
+#ifdef FEAT_WINDOWS
        save_curtab = curtab;
-       goto_tabpage_tp(tp);
+       goto_tabpage_tp(tp, FALSE, FALSE);
+#endif
 
        tabvarname = alloc((unsigned)STRLEN(varname) + 3);
        if (tabvarname != NULL)
@@ -16067,9 +16742,11 @@ f_settabvar(argvars, rettv)
            vim_free(tabvarname);
        }
 
+#ifdef FEAT_WINDOWS
        /* Restore current tabpage */
        if (valid_tabpage(save_curtab))
-           goto_tabpage_tp(save_curtab);
+           goto_tabpage_tp(save_curtab, FALSE, FALSE);
+#endif
     }
 }
 
@@ -16098,6 +16775,7 @@ f_setwinvar(argvars, rettv)
 /*
  * "setwinvar()" and "settabwinvar()" functions
  */
+
     static void
 setwinvar(argvars, rettv, off)
     typval_T   *argvars;
@@ -16112,7 +16790,7 @@ setwinvar(argvars, rettv, off)
     char_u     *varname, *winvarname;
     typval_T   *varp;
     char_u     nbuf[NUMBUFLEN];
-    tabpage_T  *tp;
+    tabpage_T  *tp = NULL;
 
     if (check_restricted() || check_secure())
        return;
@@ -16130,14 +16808,8 @@ setwinvar(argvars, rettv, off)
     if (win != NULL && varname != NULL && varp != NULL)
     {
 #ifdef FEAT_WINDOWS
-       /* set curwin to be our win, temporarily */
-       save_curwin = curwin;
-       save_curtab = curtab;
-       goto_tabpage_tp(tp);
-       if (!win_valid(win))
+       if (switch_win(&save_curwin, &save_curtab, win, tp, TRUE) == FAIL)
            return;
-       curwin = win;
-       curbuf = curwin->w_buffer;
 #endif
 
        if (*varname == '&')
@@ -16165,19 +16837,29 @@ setwinvar(argvars, rettv, off)
        }
 
 #ifdef FEAT_WINDOWS
-       /* Restore current tabpage and window, if still valid (autocomands can
-        * make them invalid). */
-       if (valid_tabpage(save_curtab))
-           goto_tabpage_tp(save_curtab);
-       if (win_valid(save_curwin))
-       {
-           curwin = save_curwin;
-           curbuf = curwin->w_buffer;
-       }
+       restore_win(save_curwin, save_curtab, TRUE);
 #endif
     }
 }
 
+#ifdef FEAT_CRYPT
+/*
+ * "sha256({string})" function
+ */
+    static void
+f_sha256(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    char_u     *p;
+
+    p = get_tv_string(&argvars[0]);
+    rettv->vval.v_string = vim_strsave(
+                                   sha256_bytes(p, (int)STRLEN(p), NULL, 0));
+    rettv->v_type = VAR_STRING;
+}
+#endif /* FEAT_CRYPT */
+
 /*
  * "shellescape({string})" function
  */
@@ -16192,6 +16874,17 @@ f_shellescape(argvars, rettv)
 }
 
 /*
+ * shiftwidth() function
+ */
+    static void
+f_shiftwidth(argvars, rettv)
+    typval_T   *argvars UNUSED;
+    typval_T   *rettv;
+{
+    rettv->vval.v_number = get_sw_value();
+}
+
+/*
  * "simplify()" function
  */
     static void
@@ -16256,6 +16949,7 @@ static int
 
 static int     item_compare_ic;
 static char_u  *item_compare_func;
+static dict_T  *item_compare_selfdict;
 static int     item_compare_func_err;
 #define ITEM_COMPARE_FAIL 999
 
@@ -16315,7 +17009,8 @@ item_compare2(s1, s2)
 
     rettv.v_type = VAR_UNKNOWN;                /* clear_tv() uses this */
     res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
-                                &rettv, 2, argv, 0L, 0L, &dummy, TRUE, NULL);
+                                &rettv, 2, argv, 0L, 0L, &dummy, TRUE,
+                                item_compare_selfdict);
     clear_tv(&argv[0]);
     clear_tv(&argv[1]);
 
@@ -16348,7 +17043,8 @@ f_sort(argvars, rettv)
     else
     {
        l = argvars[0].vval.v_list;
-       if (l == NULL || tv_check_lock(l->lv_lock, (char_u *)"sort()"))
+       if (l == NULL || tv_check_lock(l->lv_lock,
+                                            (char_u *)_("sort() argument")))
            return;
        rettv->vval.v_list = l;
        rettv->v_type = VAR_LIST;
@@ -16360,8 +17056,10 @@ f_sort(argvars, rettv)
 
        item_compare_ic = FALSE;
        item_compare_func = NULL;
+       item_compare_selfdict = NULL;
        if (argvars[1].v_type != VAR_UNKNOWN)
        {
+           /* optional second argument: {func} */
            if (argvars[1].v_type == VAR_FUNC)
                item_compare_func = argvars[1].vval.v_string;
            else
@@ -16376,6 +17074,17 @@ f_sort(argvars, rettv)
                else
                    item_compare_func = get_tv_string(&argvars[1]);
            }
+
+           if (argvars[2].v_type != VAR_UNKNOWN)
+           {
+               /* optional third argument: {dict} */
+               if (argvars[2].v_type != VAR_DICT)
+               {
+                   EMSG(_(e_dictreq));
+                   return;
+               }
+               item_compare_selfdict = argvars[2].vval.v_dict;
+           }
        }
 
        /* Make an array with each entry pointing to an item in the List. */
@@ -16622,7 +17331,7 @@ f_split(argvars, rettv)
            str = regmatch.endp[0];
        }
 
-       vim_free(regmatch.regprog);
+       vim_regfree(regmatch.regprog);
     }
 
     p_cpo = save_cpo;
@@ -17512,18 +18221,22 @@ f_tagfiles(argvars, rettv)
     typval_T   *argvars UNUSED;
     typval_T   *rettv;
 {
-    char_u     fname[MAXPATHL + 1];
+    char_u     *fname;
     tagname_T  tn;
     int                first;
 
     if (rettv_list_alloc(rettv) == FAIL)
        return;
+    fname = alloc(MAXPATHL);
+    if (fname == NULL)
+       return;
 
     for (first = TRUE; ; first = FALSE)
        if (get_tagfname(&tn, first, fname) == FAIL
                || list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
            break;
     tagname_free(&tn);
+    vim_free(fname);
 }
 
 /*
@@ -17711,7 +18424,7 @@ f_tr(argvars, rettv)
     typval_T   *argvars;
     typval_T   *rettv;
 {
-    char_u     *instr;
+    char_u     *in_str;
     char_u     *fromstr;
     char_u     *tostr;
     char_u     *p;
@@ -17728,7 +18441,7 @@ f_tr(argvars, rettv)
     char_u     buf2[NUMBUFLEN];
     garray_T   ga;
 
-    instr = get_tv_string(&argvars[0]);
+    in_str = get_tv_string(&argvars[0]);
     fromstr = get_tv_string_buf_chk(&argvars[1], buf);
     tostr = get_tv_string_buf_chk(&argvars[2], buf2);
 
@@ -17754,19 +18467,19 @@ error:
        }
 
     /* fromstr and tostr have to contain the same number of chars */
-    while (*instr != NUL)
+    while (*in_str != NUL)
     {
 #ifdef FEAT_MBYTE
        if (has_mbyte)
        {
-           inlen = (*mb_ptr2len)(instr);
-           cpstr = instr;
+           inlen = (*mb_ptr2len)(in_str);
+           cpstr = in_str;
            cplen = inlen;
            idx = 0;
            for (p = fromstr; *p != NUL; p += fromlen)
            {
                fromlen = (*mb_ptr2len)(p);
-               if (fromlen == inlen && STRNCMP(instr, p, inlen) == 0)
+               if (fromlen == inlen && STRNCMP(in_str, p, inlen) == 0)
                {
                    for (p = tostr; *p != NUL; p += tolen)
                    {
@@ -17785,11 +18498,11 @@ error:
                ++idx;
            }
 
-           if (first && cpstr == instr)
+           if (first && cpstr == in_str)
            {
                /* Check that fromstr and tostr have the same number of
                 * (multi-byte) characters.  Done only once when a character
-                * of instr doesn't appear in fromstr. */
+                * of in_str doesn't appear in fromstr. */
                first = FALSE;
                for (p = tostr; *p != NUL; p += tolen)
                {
@@ -17804,18 +18517,18 @@ error:
            mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
            ga.ga_len += cplen;
 
-           instr += inlen;
+           in_str += inlen;
        }
        else
 #endif
        {
            /* When not using multi-byte chars we can do it faster. */
-           p = vim_strchr(fromstr, *instr);
+           p = vim_strchr(fromstr, *in_str);
            if (p != NULL)
                ga_append(&ga, tostr[p - fromstr]);
            else
-               ga_append(&ga, *instr);
-           ++instr;
+               ga_append(&ga, *in_str);
+           ++in_str;
        }
     }
 
@@ -17876,17 +18589,27 @@ f_type(argvars, rettv)
  */
     static void
 f_undofile(argvars, rettv)
-    typval_T   *argvars;
+    typval_T   *argvars UNUSED;
     typval_T   *rettv;
 {
     rettv->v_type = VAR_STRING;
 #ifdef FEAT_PERSISTENT_UNDO
     {
-       char_u *ffname = FullName_save(get_tv_string(&argvars[0]), FALSE);
+       char_u *fname = get_tv_string(&argvars[0]);
+
+       if (*fname == NUL)
+       {
+           /* If there is no file name there will be no undo file. */
+           rettv->vval.v_string = NULL;
+       }
+       else
+       {
+           char_u *ffname = FullName_save(fname, FALSE);
 
-       if (ffname != NULL)
-           rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
-       vim_free(ffname);
+           if (ffname != NULL)
+               rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
+           vim_free(ffname);
+       }
     }
 #else
     rettv->vval.v_string = NULL;
@@ -17980,6 +18703,20 @@ f_visualmode(argvars, rettv)
 }
 
 /*
+ * "wildmenumode()" function
+ */
+    static void
+f_wildmenumode(argvars, rettv)
+    typval_T   *argvars UNUSED;
+    typval_T   *rettv UNUSED;
+{
+#ifdef FEAT_WILDMENU
+    if (wild_menu_showing)
+       rettv->vval.v_number = 1;
+#endif
+}
+
+/*
  * "winbufnr(nr)" function
  */
     static void
@@ -18118,9 +18855,11 @@ f_winrestview(argvars, rettv)
        curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
 
        check_cursor();
-       changed_cline_bef_curs();
-       invalidate_botline();
-       redraw_later(VALID);
+       win_new_height(curwin, curwin->w_height);
+# ifdef FEAT_VERTSPLIT
+       win_new_width(curwin, W_WIDTH(curwin));
+# endif
+       changed_window_setting();
 
        if (curwin->w_topline == 0)
            curwin->w_topline = 1;
@@ -18258,6 +18997,19 @@ f_writefile(argvars, rettv)
 }
 
 /*
+ * "xor(expr, expr)" function
+ */
+    static void
+f_xor(argvars, rettv)
+    typval_T   *argvars;
+    typval_T   *rettv;
+{
+    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
+                                       ^ get_tv_number_chk(&argvars[1], NULL);
+}
+
+
+/*
  * Translate a String variable into a position.
  * Returns NULL when there is an error.
  */
@@ -18331,7 +19083,7 @@ var2fpos(varp, dollar_lnum, fnum)
 #endif
     if (name[0] == '\'')                       /* mark */
     {
-       pp = getmark_fnum(name[1], FALSE, fnum);
+       pp = getmark_buf_fnum(curbuf, name[1], FALSE, fnum);
        if (pp == NULL || pp == (pos_T *)-1 || pp->lnum <= 0)
            return NULL;
        return pp;
@@ -18768,11 +19520,7 @@ get_vim_var_list(idx)
 set_vim_var_char(c)
     int c;
 {
-#ifdef FEAT_MBYTE
-    char_u     buf[MB_MAXBYTES];
-#else
-    char_u     buf[2];
-#endif
+    char_u     buf[MB_MAXBYTES + 1];
 
 #ifdef FEAT_MBYTE
     if (has_mbyte)
@@ -19376,7 +20124,7 @@ get_tv_string_buf_chk(varp, buf)
            break;
 #ifdef FEAT_FLOAT
        case VAR_FLOAT:
-           EMSG(_("E806: using Float as a String"));
+           EMSG(_(e_float_as_string));
            break;
 #endif
        case VAR_STRING:
@@ -19410,16 +20158,17 @@ find_var(name, htp)
        *htp = ht;
     if (ht == NULL)
        return NULL;
-    return find_var_in_ht(ht, varname, htp != NULL);
+    return find_var_in_ht(ht, *name, varname, htp != NULL);
 }
 
 /*
- * Find variable "varname" in hashtab "ht".
+ * Find variable "varname" in hashtab "ht" with name "htname".
  * Returns NULL if not found.
  */
     static dictitem_T *
-find_var_in_ht(ht, varname, writing)
+find_var_in_ht(ht, htname, varname, writing)
     hashtab_T  *ht;
+    int                htname;
     char_u     *varname;
     int                writing;
 {
@@ -19428,7 +20177,7 @@ find_var_in_ht(ht, varname, writing)
     if (*varname == NUL)
     {
        /* Must be something like "s:", otherwise "ht" would be NULL. */
-       switch (varname[-2])
+       switch (htname)
        {
            case 's': return &SCRIPT_SV(current_SID)->sv_var;
            case 'g': return &globvars_var;
@@ -19453,9 +20202,14 @@ find_var_in_ht(ht, varname, writing)
         * worked find the variable again.  Don't auto-load a script if it was
         * loaded already, otherwise it would be loaded every time when
         * checking if a function name is a Funcref variable. */
-       if (ht == &globvarht && !writing
-                           && script_autoload(varname, FALSE) && !aborting())
+       if (ht == &globvarht && !writing)
+       {
+           /* Note: script_autoload() may make "hi" invalid. It must either
+            * be obtained again or not used. */
+           if (!script_autoload(varname, FALSE) || aborting())
+               return NULL;
            hi = hash_find(ht, varname);
+       }
        if (HASHITEM_EMPTY(hi))
            return NULL;
     }
@@ -19498,12 +20252,12 @@ find_var_ht(name, varname)
                               || vim_strchr(name + 2, AUTOLOAD_CHAR) != NULL)
        return NULL;
     if (*name == 'b')                          /* buffer variable */
-       return &curbuf->b_vars.dv_hashtab;
+       return &curbuf->b_vars->dv_hashtab;
     if (*name == 'w')                          /* window variable */
-       return &curwin->w_vars.dv_hashtab;
+       return &curwin->w_vars->dv_hashtab;
 #ifdef FEAT_WINDOWS
     if (*name == 't')                          /* tab page variable */
-       return &curtab->tp_vars.dv_hashtab;
+       return &curtab->tp_vars->dv_hashtab;
 #endif
     if (*name == 'v')                          /* v: variable */
        return &vimvarht;
@@ -19564,7 +20318,7 @@ new_script_vars(id)
        {
            sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
                (scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
-           init_var_dict(&sv->sv_dict, &sv->sv_var);
+           init_var_dict(&sv->sv_dict, &sv->sv_var, VAR_SCOPE);
            ++ga_scripts.ga_len;
        }
     }
@@ -19575,11 +20329,14 @@ new_script_vars(id)
  * point to it.
  */
     void
-init_var_dict(dict, dict_var)
+init_var_dict(dict, dict_var, scope)
     dict_T     *dict;
     dictitem_T *dict_var;
+    int                scope;
 {
     hash_init(&dict->dv_hashtab);
+    dict->dv_lock = 0;
+    dict->dv_scope = scope;
     dict->dv_refcount = DO_NOT_FREE_CNT;
     dict->dv_copyID = 0;
     dict_var->di_tv.vval.v_dict = dict;
@@ -19590,6 +20347,19 @@ init_var_dict(dict, dict_var)
 }
 
 /*
+ * Unreference a dictionary initialized by init_var_dict().
+ */
+    void
+unref_var_dict(dict)
+    dict_T     *dict;
+{
+    /* Now the dict needs to be freed if no one else is using it, go back to
+     * normal reference counting. */
+    dict->dv_refcount -= DO_NOT_FREE_CNT - 1;
+    dict_unref(dict);
+}
+
+/*
  * Clean up a list of internal variables.
  * Frees all allocated variables and the value they contain.
  * Clears hashtab "ht", does not free it.
@@ -19730,7 +20500,6 @@ set_var(name, tv, copy)
     dictitem_T *v;
     char_u     *varname;
     hashtab_T  *ht;
-    char_u     *p;
 
     ht = find_var_ht(name, &varname);
     if (ht == NULL || *varname == NUL)
@@ -19738,27 +20507,10 @@ set_var(name, tv, copy)
        EMSG2(_(e_illvar), name);
        return;
     }
-    v = find_var_in_ht(ht, varname, TRUE);
+    v = find_var_in_ht(ht, 0, varname, TRUE);
 
-    if (tv->v_type == VAR_FUNC)
-    {
-       if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
-               && !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
-                                                        ? name[2] : name[0]))
-       {
-           EMSG2(_("E704: Funcref variable name must start with a capital: %s"), name);
-           return;
-       }
-       /* Don't allow hiding a function.  When "v" is not NULL we migth be
-        * assigning another function to the same var, the type is checked
-        * below. */
-       if (v == NULL && function_exists(name))
-       {
-           EMSG2(_("E705: Variable name conflicts with existing function: %s"),
-                                                                       name);
-           return;
-       }
-    }
+    if (tv->v_type == VAR_FUNC && var_check_func_name(name, v == NULL))
+       return;
 
     if (v != NULL)
     {
@@ -19824,13 +20576,8 @@ set_var(name, tv, copy)
        }
 
        /* Make sure the variable name is valid. */
-       for (p = varname; *p != NUL; ++p)
-           if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
-                                                      && *p != AUTOLOAD_CHAR)
-           {
-               EMSG2(_(e_illvar), varname);
-               return;
-           }
+       if (!valid_varname(varname))
+           return;
 
        v = (dictitem_T *)alloc((unsigned)(sizeof(dictitem_T)
                                                          + STRLEN(varname)));
@@ -19895,6 +20642,55 @@ var_check_fixed(flags, name)
 }
 
 /*
+ * Check if a funcref is assigned to a valid variable name.
+ * Return TRUE and give an error if not.
+ */
+    static int
+var_check_func_name(name, new_var)
+    char_u *name;    /* points to start of variable name */
+    int    new_var;  /* TRUE when creating the variable */
+{
+    if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
+           && !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
+                                                    ? name[2] : name[0]))
+    {
+       EMSG2(_("E704: Funcref variable name must start with a capital: %s"),
+                                                                       name);
+       return TRUE;
+    }
+    /* Don't allow hiding a function.  When "v" is not NULL we might be
+     * assigning another function to the same var, the type is checked
+     * below. */
+    if (new_var && function_exists(name))
+    {
+       EMSG2(_("E705: Variable name conflicts with existing function: %s"),
+                                                                   name);
+       return TRUE;
+    }
+    return FALSE;
+}
+
+/*
+ * Check if a variable name is valid.
+ * Return FALSE and give an error if not.
+ */
+    static int
+valid_varname(varname)
+    char_u *varname;
+{
+    char_u *p;
+
+    for (p = varname; *p != NUL; ++p)
+       if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
+                                                  && *p != AUTOLOAD_CHAR)
+       {
+           EMSG2(_(e_illvar), varname);
+           return FALSE;
+       }
+    return TRUE;
+}
+
+/*
  * Return TRUE if typeval "tv" is set to be locked (immutable).
  * Also give an error message, using "name".
  */
@@ -20099,7 +20895,13 @@ ex_echo(eap)
                /* Call msg_start() after eval1(), evaluating the expression
                 * may cause a message to appear. */
                if (eap->cmdidx == CMD_echo)
+               {
+                   /* Mark the saved text as finishing the line, so that what
+                    * follows is displayed on a new line when scrolling back
+                    * at the more prompt. */
+                   msg_sb_eol();
                    msg_start();
+               }
            }
            else if (eap->cmdidx == CMD_echo)
                msg_puts_attr((char_u *)" ", echo_attr);
@@ -20302,9 +21104,11 @@ ex_function(eap)
     exarg_T    *eap;
 {
     char_u     *theline;
+    int                i;
     int                j;
     int                c;
     int                saved_did_emsg;
+    int                saved_wait_return = need_wait_return;
     char_u     *name = NULL;
     char_u     *p;
     char_u     *arg;
@@ -20380,7 +21184,7 @@ ex_function(eap)
                            list_func_head(fp, FALSE);
                    }
                }
-               vim_free(regmatch.regprog);
+               vim_regfree(regmatch.regprog);
            }
        }
        if (*p == '/')
@@ -20515,6 +21319,9 @@ ex_function(eap)
            if (arg[j] != NUL)
                emsg_funcname((char *)e_invarg2, arg);
        }
+       /* Disallow using the g: dict. */
+       if (fudi.fd_dict != NULL && fudi.fd_dict->dv_scope == VAR_DEF_SCOPE)
+           EMSG(_("E862: Cannot use g: here"));
     }
 
     /*
@@ -20548,6 +21355,15 @@ ex_function(eap)
            arg = vim_strsave(arg);
            if (arg == NULL)
                goto erret;
+
+           /* Check for duplicate argument name. */
+           for (i = 0; i < newargs.ga_len; ++i)
+               if (STRCMP(((char_u **)(newargs.ga_data))[i], arg) == 0)
+               {
+                   EMSG2(_("E853: Duplicate argument name: %s"), arg);
+                   goto erret;
+               }
+
            ((char_u **)(newargs.ga_data))[newargs.ga_len] = arg;
            *p = c;
            newargs.ga_len++;
@@ -20623,7 +21439,11 @@ ex_function(eap)
     nesting = 0;
     for (;;)
     {
-       msg_scroll = TRUE;
+       if (KeyTyped)
+       {
+           msg_scroll = TRUE;
+           saved_wait_return = FALSE;
+       }
        need_wait_return = FALSE;
        sourcing_lnum_off = sourcing_lnum;
 
@@ -20726,6 +21546,8 @@ ex_function(eap)
                                    && (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
                        || (p[0] == 't' && p[1] == 'c'
                                    && (!ASCII_ISALPHA(p[2]) || p[2] == 'l'))
+                       || (p[0] == 'l' && p[1] == 'u' && p[2] == 'a'
+                                   && !ASCII_ISALPHA(p[3]))
                        || (p[0] == 'r' && p[1] == 'u' && p[2] == 'b'
                                    && (!ASCII_ISALPHA(p[3]) || p[3] == 'y'))
                        || (p[0] == 'm' && p[1] == 'z'
@@ -20932,6 +21754,7 @@ ret_free:
     vim_free(fudi.fd_newkey);
     vim_free(name);
     did_emsg |= saved_did_emsg;
+    need_wait_return |= saved_wait_return;
 }
 
 /*
@@ -21190,6 +22013,12 @@ list_func_head(fp, indent)
        MSG_PUTS("...");
     }
     msg_putchar(')');
+    if (fp->uf_flags & FC_ABORT)
+       MSG_PUTS(" abort");
+    if (fp->uf_flags & FC_RANGE)
+       MSG_PUTS(" range");
+    if (fp->uf_flags & FC_DICT)
+       MSG_PUTS(" dict");
     msg_clr_eos();
     if (p_verbose > 0)
        last_set_msg(fp->uf_script_ID);
@@ -21229,6 +22058,15 @@ free_all_functions()
 }
 #endif
 
+    int
+translated_function_exists(name)
+    char_u     *name;
+{
+    if (builtin_function(name))
+       return find_internal_func(name) >= 0;
+    return find_func(name) != NULL;
+}
+
 /*
  * Return TRUE if a function "name" exists.
  */
@@ -21246,16 +22084,29 @@ function_exists(name)
     /* Only accept "funcname", "funcname ", "funcname (..." and
      * "funcname(...", not "funcname!...". */
     if (p != NULL && (*nm == NUL || *nm == '('))
-    {
-       if (builtin_function(p))
-           n = (find_internal_func(p) >= 0);
-       else
-           n = (find_func(p) != NULL);
-    }
+       n = translated_function_exists(p);
     vim_free(p);
     return n;
 }
 
+    char_u *
+get_expanded_name(name, check)
+    char_u     *name;
+    int                check;
+{
+    char_u     *nm = name;
+    char_u     *p;
+
+    p = trans_function_name(&nm, FALSE, TFN_INT|TFN_QUIET, NULL);
+
+    if (p != NULL && *nm == NUL)
+       if (!check || translated_function_exists(p))
+           return p;
+
+    vim_free(p);
+    return NULL;
+}
+
 /*
  * Return TRUE if "name" looks like a builtin function name: starts with a
  * lower case letter and doesn't contain a ':' or AUTOLOAD_CHAR.
@@ -21562,6 +22413,9 @@ get_user_func_name(xp, idx)
            ++hi;
        fp = HI2UF(hi);
 
+       if (fp->uf_flags & FC_DICT)
+           return (char_u *)""; /* don't show dict functions */
+
        if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
            return fp->uf_name; /* prevents overflow */
 
@@ -21689,7 +22543,7 @@ func_free(fp)
  * Unreference a Function: decrement the reference count and free it when it
  * becomes zero.  Only for numbered functions.
  */
-    static void
+    void
 func_unref(name)
     char_u     *name;
 {
@@ -21713,7 +22567,7 @@ func_unref(name)
 /*
  * Count a reference to a Function.
  */
-    static void
+    void
 func_ref(name)
     char_u     *name;
 {
@@ -21792,7 +22646,7 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
     /*
      * Init l: variables.
      */
-    init_var_dict(&fc->l_vars, &fc->l_vars_var);
+    init_var_dict(&fc->l_vars, &fc->l_vars_var, VAR_DEF_SCOPE);
     if (selfdict != NULL)
     {
        /* Set l:self to "selfdict".  Use "name" to avoid a warning from
@@ -21813,7 +22667,7 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
      * Set a:0 to "argcount".
      * Set a:000 to a list with room for the "..." arguments.
      */
-    init_var_dict(&fc->l_avars, &fc->l_avars_var);
+    init_var_dict(&fc->l_avars, &fc->l_avars_var, VAR_SCOPE);
     add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
                                (varnumber_T)(argcount - fp->uf_args.ga_len));
     /* Use "name" to avoid a warning from some compiler that checks the
@@ -21921,8 +22775,12 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
                        s = tv2string(&argvars[i], &tofree, numbuf2, 0);
                        if (s != NULL)
                        {
-                           trunc_string(s, buf, MSG_BUF_CLEN);
-                           msg_puts(buf);
+                           if (vim_strsize(s) > MSG_BUF_CLEN)
+                           {
+                               trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
+                               s = buf;
+                           }
+                           msg_puts(s);
                            vim_free(tofree);
                        }
                    }
@@ -22010,8 +22868,12 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
            s = tv2string(fc->rettv, &tofree, numbuf2, 0);
            if (s != NULL)
            {
-               trunc_string(s, buf, MSG_BUF_CLEN);
-               smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
+               if (vim_strsize(s) > MSG_BUF_CLEN)
+               {
+                   trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
+                   s = buf;
+               }
+               smsg((char_u *)_("%s returning %s"), sourcing_name, s);
                vim_free(tofree);
            }
        }
@@ -22519,18 +23381,21 @@ read_viminfo_varlist(virp, writing)
        if (tab != NULL)
        {
            *tab++ = '\0';      /* isolate the variable name */
-           if (*tab == 'S')    /* string var */
-               type = VAR_STRING;
+           switch (*tab)
+           {
+               case 'S': type = VAR_STRING; break;
 #ifdef FEAT_FLOAT
-           else if (*tab == 'F')
-               type = VAR_FLOAT;
+               case 'F': type = VAR_FLOAT; break;
 #endif
+               case 'D': type = VAR_DICT; break;
+               case 'L': type = VAR_LIST; break;
+           }
 
            tab = vim_strchr(tab, '\t');
            if (tab != NULL)
            {
                tv.v_type = type;
-               if (type == VAR_STRING)
+               if (type == VAR_STRING || type == VAR_DICT || type == VAR_LIST)
                    tv.vval.v_string = viminfo_readstring(virp,
                                       (int)(tab - virp->vir_line + 1), TRUE);
 #ifdef FEAT_FLOAT
@@ -22539,9 +23404,28 @@ read_viminfo_varlist(virp, writing)
 #endif
                else
                    tv.vval.v_number = atol((char *)tab + 1);
+               if (type == VAR_DICT || type == VAR_LIST)
+               {
+                   typval_T *etv = eval_expr(tv.vval.v_string, NULL);
+
+                   if (etv == NULL)
+                       /* Failed to parse back the dict or list, use it as a
+                        * string. */
+                       tv.v_type = VAR_STRING;
+                   else
+                   {
+                       vim_free(tv.vval.v_string);
+                       tv = *etv;
+                       vim_free(etv);
+                   }
+               }
+
                set_var(virp->vir_line + 1, &tv, FALSE);
-               if (type == VAR_STRING)
+
+               if (tv.v_type == VAR_STRING)
                    vim_free(tv.vval.v_string);
+               else if (tv.v_type == VAR_DICT || tv.v_type == VAR_LIST)
+                   clear_tv(&tv);
            }
        }
     }
@@ -22583,8 +23467,10 @@ write_viminfo_varlist(fp)
                    case VAR_STRING: s = "STR"; break;
                    case VAR_NUMBER: s = "NUM"; break;
 #ifdef FEAT_FLOAT
-                   case VAR_FLOAT: s = "FLO"; break;
+                   case VAR_FLOAT:  s = "FLO"; break;
 #endif
+                   case VAR_DICT:   s = "DIC"; break;
+                   case VAR_LIST:   s = "LIS"; break;
                    default: continue;
                }
                fprintf(fp, "!%s\t%s\t", this_var->di_key, s);
@@ -22656,7 +23542,7 @@ store_session_globals(fd)
                    f = -f;
                    sign = '-';
                }
-               if ((fprintf(fd, "let %s = %c&%f",
+               if ((fprintf(fd, "let %s = %c%f",
                                               this_var->di_key, sign, f) < 0)
                        || put_eol(fd) == FAIL)
                    return FAIL;
@@ -23019,6 +23905,7 @@ modify_fname(src, usedlen, fnamep, bufp, fnamelen)
     int                c;
     int                has_fullname = 0;
 #ifdef WIN3264
+    char_u     *fname_start = *fnamep;
     int                has_shortname = 0;
 #endif
 
@@ -23072,6 +23959,27 @@ repeat:
                return -1;
        }
 
+#ifdef WIN3264
+# if _WIN32_WINNT >= 0x0500
+       if (vim_strchr(*fnamep, '~') != NULL)
+       {
+           /* Expand 8.3 filename to full path.  Needed to make sure the same
+            * file does not have two different names.
+            * Note: problem does not occur if _WIN32_WINNT < 0x0500. */
+           p = alloc(_MAX_PATH + 1);
+           if (p != NULL)
+           {
+               if (GetLongPathName(*fnamep, p, MAXPATHL))
+               {
+                   vim_free(*bufp);
+                   *bufp = *fnamep = p;
+               }
+               else
+                   vim_free(p);
+           }
+       }
+# endif
+#endif
        /* Append a path separator to a directory. */
        if (mch_isdir(*fnamep))
        {
@@ -23193,24 +24101,25 @@ repeat:
     }
 
 #ifdef WIN3264
-    /* Check shortname after we have done 'heads' and before we do 'tails'
+    /*
+     * Handle ":8" after we have done 'heads' and before we do 'tails'.
      */
     if (has_shortname)
     {
-       pbuf = NULL;
-       /* Copy the string if it is shortened by :h */
-       if (*fnamelen < (int)STRLEN(*fnamep))
+       /* Copy the string if it is shortened by :h and when it wasn't copied
+        * yet, because we are going to change it in place.  Avoids changing
+        * the buffer name for "%:8". */
+       if (*fnamelen < (int)STRLEN(*fnamep) || *fnamep == fname_start)
        {
            p = vim_strnsave(*fnamep, *fnamelen);
-           if (p == 0)
+           if (p == NULL)
                return -1;
            vim_free(*bufp);
            *bufp = *fnamep = p;
        }
 
        /* Split into two implementations - makes it easier.  First is where
-        * there isn't a full name already, second is where there is.
-        */
+        * there isn't a full name already, second is where there is. */
        if (!has_fullname && !vim_isAbsName(*fnamep))
        {
            if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
@@ -23218,18 +24127,16 @@ repeat:
        }
        else
        {
-           int         l;
+           int         l = *fnamelen;
 
-           /* Simple case, already have the full-name
+           /* Simple case, already have the full-name.
             * Nearly always shorter, so try first time. */
-           l = *fnamelen;
            if (get_short_pathname(fnamep, bufp, &l) == FAIL)
                return -1;
 
            if (l == 0)
            {
-               /* Couldn't find the filename.. search the paths.
-                */
+               /* Couldn't find the filename, search the paths. */
                l = *fnamelen;
                if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
                    return -1;
@@ -23435,7 +24342,7 @@ do_string_sub(str, pat, sub, flags)
        if (ga.ga_data != NULL)
            STRCPY((char *)ga.ga_data + ga.ga_len, tail);
 
-       vim_free(regmatch.regprog);
+       vim_regfree(regmatch.regprog);
     }
 
     ret = vim_strsave(ga.ga_data == NULL ? str : (char_u *)ga.ga_data);
index f78bf96..b79a259 100644 (file)
  * ex_cmds.c: some functions for command line commands
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"    /* for mch_open(), must be before vim.h */
-#endif
-
 #include "vim.h"
 #include "version.h"
 
@@ -29,7 +25,6 @@ static int viminfo_encoding __ARGS((vir_T *virp));
 static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
 #endif
 
-static int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
 static int check_readonly __ARGS((int *forceit, buf_T *buf));
 #ifdef FEAT_AUTOCMD
 static void delbuf_msg __ARGS((char_u *name));
@@ -323,7 +318,8 @@ sort_compare(s1, s2)
     /* When sorting numbers "start_col_nr" is the number, not the column
      * number. */
     if (sort_nr)
-       result = l1.start_col_nr - l2.start_col_nr;
+       result = l1.start_col_nr == l2.start_col_nr ? 0
+                                : l1.start_col_nr > l2.start_col_nr ? 1 : -1;
     else
     {
        /* We need to copy one line into "sortbuf1", because there is no
@@ -419,8 +415,15 @@ ex_sort(eap)
            }
            *s = NUL;
            /* Use last search pattern if sort pattern is empty. */
-           if (s == p + 1 && last_search_pat() != NULL)
+           if (s == p + 1)
+           {
+               if (last_search_pat() == NULL)
+               {
+                   EMSG(_(e_noprevre));
+                   goto sortend;
+               }
                regmatch.regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
+           }
            else
                regmatch.regprog = vim_regcomp(p + 1, RE_MAGIC);
            if (regmatch.regprog == NULL)
@@ -482,7 +485,7 @@ ex_sort(eap)
             * of the match, by temporarily terminating the string there */
            s2 = s + end_col;
            c = *s2;
-           (*s2) = 0;
+           *s2 = NUL;
            /* Sorting on number: Store the number itself. */
            p = s + start_col;
            if (sort_hex)
@@ -491,9 +494,13 @@ ex_sort(eap)
                s = skiptodigit(p);
            if (s > p && s[-1] == '-')
                --s;  /* include preceding negative sign */
-           vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
-                                       &nrs[lnum - eap->line1].start_col_nr, NULL);
-           (*s2) = c;
+           if (*s == NUL)
+               /* empty line should sort before any number */
+               nrs[lnum - eap->line1].start_col_nr = -MAXLNUM;
+           else
+               vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
+                                 &nrs[lnum - eap->line1].start_col_nr, NULL);
+           *s2 = c;
        }
        else
        {
@@ -564,7 +571,7 @@ sortend:
     vim_free(nrs);
     vim_free(sortbuf1);
     vim_free(sortbuf2);
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
     if (got_int)
        EMSG(_(e_interr));
 }
@@ -777,6 +784,7 @@ do_move(line1, line2, dest)
      */
     last_line = curbuf->b_ml.ml_line_count;
     mark_adjust(line1, line2, last_line - line2, 0L);
+    changed_lines(last_line - num_lines + 1, 0, last_line + 1, num_lines);
     if (dest >= line2)
     {
        mark_adjust(line2 + 1, dest, -num_lines, 0L);
@@ -792,6 +800,7 @@ do_move(line1, line2, dest)
     curbuf->b_op_start.col = curbuf->b_op_end.col = 0;
     mark_adjust(last_line - num_lines + 1, last_line,
                                             -(last_line - dest - extra), 0L);
+    changed_lines(last_line - num_lines + 1, 0, last_line + 1, -extra);
 
     /*
      * Now we delete the original text -- webb
@@ -819,7 +828,13 @@ do_move(line1, line2, dest)
        curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
 
     if (line1 < dest)
-       changed_lines(line1, 0, dest + num_lines + 1, 0L);
+    {
+       dest += num_lines + 1;
+       last_line = curbuf->b_ml.ml_line_count;
+       if (dest > last_line + 1)
+           dest = last_line + 1;
+       changed_lines(line1, 0, dest, 0L);
+    }
     else
        changed_lines(dest + 1, 0, line1 + num_lines, 0L);
 
@@ -898,9 +913,6 @@ free_prev_shellcmd()
  * Handle the ":!cmd" command. Also for ":r !cmd" and ":w !cmd"
  * Bangs in the argument are replaced with the previously entered command.
  * Remember the argument.
- *
- * RISCOS: Bangs only replaced when followed by a space, since many
- * pathnames contain one.
  */
     void
 do_bang(addr_count, eap, forceit, do_in, do_out)
@@ -979,11 +991,7 @@ do_bang(addr_count, eap, forceit, do_in, do_out)
        trailarg = NULL;
        while (*p)
        {
-           if (*p == '!'
-#ifdef RISCOS
-                       && (p[1] == ' ' || p[1] == NUL)
-#endif
-                                       )
+           if (*p == '!')
            {
                if (p > newcmd && p[-1] == '\\')
                    STRMOVE(p - 1, p);
@@ -1113,7 +1121,7 @@ do_filter(line1, line2, eap, cmd, do_in, do_out)
     if (do_out)
        shell_flags |= SHELL_DOOUT;
 
-#if !defined(USE_SYSTEM) && defined(UNIX)
+#ifdef FEAT_FILTERPIPE
     if (!do_in && do_out && !p_stmp)
     {
        /* Use a pipe to fetch stdout of the command, do not use a temp file. */
@@ -1577,14 +1585,8 @@ make_filter_cmd(cmd, itmp, otmp)
            if (p != NULL)
                *p = NUL;
        }
-# ifdef RISCOS
-       STRCAT(buf, " { < ");   /* Use RISC OS notation for input. */
-       STRCAT(buf, itmp);
-       STRCAT(buf, " } ");
-# else
        STRCAT(buf, " <");      /* " < " causes problems on Amiga */
        STRCAT(buf, itmp);
-# endif
        if (*p_shq == NUL)
        {
            p = vim_strchr(cmd, '|');
@@ -1620,10 +1622,14 @@ append_redir(buf, buflen, opt, fname)
     char_u     *end;
 
     end = buf + STRLEN(buf);
-    /* find "%s", skipping "%%" */
+    /* find "%s" */
     for (p = opt; (p = vim_strchr(p, '%')) != NULL; ++p)
-       if (p[1] == 's')
+    {
+       if (p[1] == 's') /* found %s */
            break;
+       if (p[1] == '%') /* skip %% */
+           ++p;
+    }
     if (p != NULL)
     {
        *end = ' '; /* not really needed? Not with sh, ksh or bash */
@@ -1633,16 +1639,9 @@ append_redir(buf, buflen, opt, fname)
     else
        vim_snprintf((char *)end, (size_t)(buflen - (end - buf)),
 #ifdef FEAT_QUICKFIX
-# ifndef RISCOS
-               opt != p_sp ? " %s%s" :
-# endif
                " %s %s",
 #else
-# ifndef RISCOS
                " %s%s",        /* " > %s" causes problems on Amiga */
-# else
-               " %s %s",       /* But is needed for 'shellpipe' and RISC OS */
-# endif
 #endif
                (char *)opt, (char *)fname);
 }
@@ -1727,11 +1726,11 @@ read_viminfo(file, flags)
 }
 
 /*
- * write_viminfo() -- Write the viminfo file.  The old one is read in first so
- * that effectively a merge of current info and old info is done.  This allows
- * multiple vims to run simultaneously, without losing any marks etc.  If
- * forceit is TRUE, then the old file is not read in, and only internal info is
- * written to the file. -- webb
+ * Write the viminfo file.  The old one is read in first so that effectively a
+ * merge of current info and old info is done.  This allows multiple vims to
+ * run simultaneously, without losing any marks etc.
+ * If "forceit" is TRUE, then the old file is not read in, and only internal
+ * info is written to the file.
  */
     void
 write_viminfo(file, forceit)
@@ -1843,11 +1842,7 @@ write_viminfo(file, forceit)
 #ifdef VMS
                                    (char_u *)"-tmp",
 #else
-# ifdef RISCOS
-                                   (char_u *)"/tmp",
-# else
                                    (char_u *)".tmp",
-# endif
 #endif
                                    FALSE);
            if (tempname == NULL)               /* out of memory */
@@ -2056,6 +2051,7 @@ do_viminfo(fp_in, fp_out, flags)
     int                count = 0;
     int                eof = FALSE;
     vir_T      vir;
+    int                merge = FALSE;
 
     if ((vir.vir_line = alloc(LSIZE)) == NULL)
        return;
@@ -2067,9 +2063,12 @@ do_viminfo(fp_in, fp_out, flags)
     if (fp_in != NULL)
     {
        if (flags & VIF_WANT_INFO)
+       {
            eof = read_viminfo_up_to_marks(&vir,
                                         flags & VIF_FORCEIT, fp_out != NULL);
-       else
+           merge = TRUE;
+       }
+       else if (flags != 0)
            /* Skip info, find start of marks */
            while (!(eof = viminfo_readline(&vir))
                    && vir.vir_line[0] != '>')
@@ -2088,7 +2087,7 @@ do_viminfo(fp_in, fp_out, flags)
        write_viminfo_search_pattern(fp_out);
        write_viminfo_sub_string(fp_out);
 #ifdef FEAT_CMDHIST
-       write_viminfo_history(fp_out);
+       write_viminfo_history(fp_out, merge);
 #endif
        write_viminfo_registers(fp_out);
 #ifdef FEAT_EVAL
@@ -2124,7 +2123,7 @@ read_viminfo_up_to_marks(virp, forceit, writing)
     buf_T      *buf;
 
 #ifdef FEAT_CMDHIST
-    prepare_viminfo_history(forceit ? 9999 : 0);
+    prepare_viminfo_history(forceit ? 9999 : 0, writing);
 #endif
     eof = viminfo_readline(virp);
     while (!eof && virp->vir_line[0] != '>')
@@ -2172,7 +2171,7 @@ read_viminfo_up_to_marks(virp, forceit, writing)
            case '=':
            case '@':
 #ifdef FEAT_CMDHIST
-               eof = read_viminfo_history(virp);
+               eof = read_viminfo_history(virp, writing);
 #else
                eof = viminfo_readline(virp);
 #endif
@@ -2193,7 +2192,8 @@ read_viminfo_up_to_marks(virp, forceit, writing)
 
 #ifdef FEAT_CMDHIST
     /* Finish reading history items. */
-    finish_viminfo_history();
+    if (!writing)
+       finish_viminfo_history();
 #endif
 
     /* Change file names to buffer numbers for fmarks. */
@@ -2424,6 +2424,59 @@ print_line(lnum, use_number, list)
     info_message = FALSE;
 }
 
+    int
+rename_buffer(new_fname)
+    char_u     *new_fname;
+{
+    char_u     *fname, *sfname, *xfname;
+    buf_T      *buf;
+
+#ifdef FEAT_AUTOCMD
+    buf = curbuf;
+    apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
+    /* buffer changed, don't change name now */
+    if (buf != curbuf)
+       return FAIL;
+# ifdef FEAT_EVAL
+    if (aborting())        /* autocmds may abort script processing */
+       return FAIL;
+# endif
+#endif
+    /*
+     * The name of the current buffer will be changed.
+     * A new (unlisted) buffer entry needs to be made to hold the old file
+     * name, which will become the alternate file name.
+     * But don't set the alternate file name if the buffer didn't have a
+     * name.
+     */
+    fname = curbuf->b_ffname;
+    sfname = curbuf->b_sfname;
+    xfname = curbuf->b_fname;
+    curbuf->b_ffname = NULL;
+    curbuf->b_sfname = NULL;
+    if (setfname(curbuf, new_fname, NULL, TRUE) == FAIL)
+    {
+       curbuf->b_ffname = fname;
+       curbuf->b_sfname = sfname;
+       return FAIL;
+    }
+    curbuf->b_flags |= BF_NOTEDITED;
+    if (xfname != NULL && *xfname != NUL)
+    {
+       buf = buflist_new(fname, xfname, curwin->w_cursor.lnum, 0);
+       if (buf != NULL && !cmdmod.keepalt)
+           curwin->w_alt_fnum = buf->b_fnum;
+    }
+    vim_free(fname);
+    vim_free(sfname);
+#ifdef FEAT_AUTOCMD
+    apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
+#endif
+    /* Change directories when the 'acd' option is set. */
+    DO_AUTOCHDIR
+    return OK;
+}
+
 /*
  * ":file[!] [fname]".
  */
@@ -2431,9 +2484,6 @@ print_line(lnum, use_number, list)
 ex_file(eap)
     exarg_T    *eap;
 {
-    char_u     *fname, *sfname, *xfname;
-    buf_T      *buf;
-
     /* ":0file" removes the file name.  Check for illegal uses ":3file",
      * "0file name", etc. */
     if (eap->addr_count > 0
@@ -2447,49 +2497,8 @@ ex_file(eap)
 
     if (*eap->arg != NUL || eap->addr_count == 1)
     {
-#ifdef FEAT_AUTOCMD
-       buf = curbuf;
-       apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
-       /* buffer changed, don't change name now */
-       if (buf != curbuf)
-           return;
-# ifdef FEAT_EVAL
-       if (aborting())     /* autocmds may abort script processing */
-           return;
-# endif
-#endif
-       /*
-        * The name of the current buffer will be changed.
-        * A new (unlisted) buffer entry needs to be made to hold the old file
-        * name, which will become the alternate file name.
-        * But don't set the alternate file name if the buffer didn't have a
-        * name.
-        */
-       fname = curbuf->b_ffname;
-       sfname = curbuf->b_sfname;
-       xfname = curbuf->b_fname;
-       curbuf->b_ffname = NULL;
-       curbuf->b_sfname = NULL;
-       if (setfname(curbuf, eap->arg, NULL, TRUE) == FAIL)
-       {
-           curbuf->b_ffname = fname;
-           curbuf->b_sfname = sfname;
+       if (rename_buffer(eap->arg) == FAIL)
            return;
-       }
-       curbuf->b_flags |= BF_NOTEDITED;
-       if (xfname != NULL && *xfname != NUL)
-       {
-           buf = buflist_new(fname, xfname, curwin->w_cursor.lnum, 0);
-           if (buf != NULL && !cmdmod.keepalt)
-               curwin->w_alt_fnum = buf->b_fnum;
-       }
-       vim_free(fname);
-       vim_free(sfname);
-#ifdef FEAT_AUTOCMD
-       apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
-#endif
-       /* Change directories when the 'acd' option is set. */
-       DO_AUTOCHDIR
     }
     /* print full file name if :cd used */
     fileinfo(FALSE, FALSE, eap->forceit);
@@ -2700,6 +2709,10 @@ do_write(eap)
                                                                        TRUE);
                do_modelines(0);
            }
+
+           /* Autocommands may have changed buffer names, esp. when
+            * 'autochdir' is set. */
+           fname = curbuf->b_sfname;
 #endif
        }
 
@@ -2735,7 +2748,7 @@ theend:
  * May set eap->forceit if a dialog says it's OK to overwrite.
  * Return OK if it's OK, FAIL if it is not.
  */
-    static int
+    int
 check_overwrite(eap, buf, fname, ffname, other)
     exarg_T    *eap;
     buf_T      *buf;
@@ -2772,7 +2785,7 @@ check_overwrite(eap, buf, fname, ffname, other)
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
            if (p_confirm || cmdmod.confirm)
            {
-               char_u  buff[IOSIZE];
+               char_u  buff[DIALOG_MSG_SIZE];
 
                dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
                if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
@@ -2790,7 +2803,7 @@ check_overwrite(eap, buf, fname, ffname, other)
        /* For ":w! filename" check that no swap file exists for "filename". */
        if (other && !emsg_silent)
        {
-           char_u      dir[MAXPATHL];
+           char_u      *dir;
            char_u      *p;
            int         r;
            char_u      *swapname;
@@ -2801,20 +2814,29 @@ check_overwrite(eap, buf, fname, ffname, other)
             * Use 'shortname' of the current buffer, since there is no buffer
             * for the written file. */
            if (*p_dir == NUL)
+           {
+               dir = alloc(5);
+               if (dir == NULL)
+                   return FAIL;
                STRCPY(dir, ".");
+           }
            else
            {
+               dir = alloc(MAXPATHL);
+               if (dir == NULL)
+                   return FAIL;
                p = p_dir;
                copy_option_part(&p, dir, MAXPATHL, ",");
            }
            swapname = makeswapname(fname, ffname, curbuf, dir);
+           vim_free(dir);
            r = vim_fexists(swapname);
            if (r)
            {
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
                if (p_confirm || cmdmod.confirm)
                {
-                   char_u      buff[IOSIZE];
+                   char_u      buff[DIALOG_MSG_SIZE];
 
                    dialog_msg(buff,
                            _("Swap file \"%s\" exists, overwrite anyway?"),
@@ -2964,7 +2986,7 @@ check_readonly(forceit, buf)
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
        if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
        {
-           char_u      buff[IOSIZE];
+           char_u      buff[DIALOG_MSG_SIZE];
 
            if (buf->b_p_ro)
                dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
@@ -3391,9 +3413,16 @@ do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin)
                /* close the link to the current buffer */
                u_sync(FALSE);
                close_buffer(oldwin, curbuf,
-                                     (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
+                              (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD, FALSE);
 
 #ifdef FEAT_AUTOCMD
+               /* Autocommands may open a new window and leave oldwin open
+                * which leads to crashes since the above call sets
+                * oldwin->w_buffer to NULL. */
+               if (curwin != oldwin && oldwin != aucmd_win
+                            && win_valid(oldwin) && oldwin->w_buffer == NULL)
+                   win_close(oldwin, FALSE);
+
 # ifdef FEAT_EVAL
                if (aborting())     /* autocmds may abort script processing */
                {
@@ -3418,14 +3447,20 @@ do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin)
                     * and re-attach to buffer, perhaps.
                     */
                    if (curwin->w_s == &(curwin->w_buffer->b_s))
-                           curwin->w_s = &(buf->b_s);
+                       curwin->w_s = &(buf->b_s);
 #endif
                    curwin->w_buffer = buf;
                    curbuf = buf;
                    ++curbuf->b_nwindows;
-                   /* set 'fileformat' */
-                   if (*p_ffs && !oldbuf)
-                       set_fileformat(default_fileformat(), OPT_LOCAL);
+
+                   /* Set 'fileformat', 'binary' and 'fenc' when forced. */
+                   if (!oldbuf && eap != NULL)
+                   {
+                       set_file_options(TRUE, eap);
+#ifdef FEAT_MBYTE
+                       set_forced_fenc(eap);
+#endif
+                   }
                }
 
                /* May get the window options from the last time this buffer
@@ -3498,9 +3533,7 @@ do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin)
        curbuf->b_p_bin = FALSE;        /* reset 'bin' before reading file */
        curwin->w_p_nu = 0;             /* no line numbers */
        curwin->w_p_rnu = 0;            /* no relative line numbers */
-#ifdef FEAT_SCROLLBIND
-       curwin->w_p_scb = FALSE;        /* no scroll binding */
-#endif
+       RESET_BINDING(curwin);          /* no scroll or cursor binding */
 #ifdef FEAT_ARABIC
        curwin->w_p_arab = FALSE;       /* no arabic mode */
 #endif
@@ -3631,10 +3664,6 @@ do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin)
      */
     check_arg_idx(curwin);
 
-#ifdef FEAT_SYN_HL
-    reset_synblock(curwin);        /* remove any ownsyntax */
-#endif
-
 #ifdef FEAT_AUTOCMD
     if (!auto_buf)
 #endif
@@ -4109,8 +4138,8 @@ ex_z(eap)
     switch (*kind)
     {
        case '-':
-           start = lnum - bigness * (linenr_T)(x - kind);
-           end = start + bigness;
+           start = lnum - bigness * (linenr_T)(x - kind) + 1;
+           end = start + bigness - 1;
            curs = end;
            break;
 
@@ -4268,6 +4297,9 @@ do_sub(eap)
     int                endcolumn = FALSE;      /* cursor in last column when done */
     pos_T      old_cursor = curwin->w_cursor;
     int                start_nsubs;
+#ifdef FEAT_EVAL
+    int         save_ma = 0;
+#endif
 
     cmd = eap->arg;
     if (!global_busy)
@@ -4637,7 +4669,15 @@ do_sub(eap)
                         * for a match in this line again. */
                        skip_match = TRUE;
                    else
-                       ++matchcol; /* search for a match at next column */
+                   {
+                        /* search for a match at next column */
+#ifdef FEAT_MBYTE
+                       if (has_mbyte)
+                           matchcol += mb_ptr2len(sub_firstline + matchcol);
+                       else
+#endif
+                           ++matchcol;
+                   }
                    goto skip;
                }
 
@@ -4664,7 +4704,12 @@ do_sub(eap)
                    }
                    sub_nsubs++;
                    did_sub = TRUE;
-                   goto skip;
+#ifdef FEAT_EVAL
+                   /* Skip the substitution, unless an expression is used,
+                    * then it is evaluated in the sandbox. */
+                   if (!(sub[0] == '\\' && sub[1] == '='))
+#endif
+                       goto skip;
                }
 
                if (do_ask)
@@ -4715,6 +4760,8 @@ do_sub(eap)
                        }
                        else
                        {
+                           char_u *orig_line = NULL;
+                           int    len_change = 0;
 #ifdef FEAT_FOLDING
                            int save_p_fen = curwin->w_p_fen;
 
@@ -4725,9 +4772,43 @@ do_sub(eap)
                            temp = RedrawingDisabled;
                            RedrawingDisabled = 0;
 
+                           if (new_start != NULL)
+                           {
+                               /* There already was a substitution, we would
+                                * like to show this to the user.  We cannot
+                                * really update the line, it would change
+                                * what matches.  Temporarily replace the line
+                                * and change it back afterwards. */
+                               orig_line = vim_strsave(ml_get(lnum));
+                               if (orig_line != NULL)
+                               {
+                                   char_u *new_line = concat_str(new_start,
+                                                    sub_firstline + copycol);
+
+                                   if (new_line == NULL)
+                                   {
+                                       vim_free(orig_line);
+                                       orig_line = NULL;
+                                   }
+                                   else
+                                   {
+                                       /* Position the cursor relative to the
+                                        * end of the line, the previous
+                                        * substitute may have inserted or
+                                        * deleted characters before the
+                                        * cursor. */
+                                       len_change = (int)STRLEN(new_line)
+                                                    - (int)STRLEN(orig_line);
+                                       curwin->w_cursor.col += len_change;
+                                       ml_replace(lnum, new_line, FALSE);
+                                   }
+                               }
+                           }
+
                            search_match_lines = regmatch.endpos[0].lnum
                                                  - regmatch.startpos[0].lnum;
-                           search_match_endcol = regmatch.endpos[0].col;
+                           search_match_endcol = regmatch.endpos[0].col
+                                                                + len_change;
                            highlight_match = TRUE;
 
                            update_topline();
@@ -4769,6 +4850,10 @@ do_sub(eap)
                            msg_didout = FALSE; /* don't scroll up */
                            msg_col = 0;
                            gotocmdline(TRUE);
+
+                           /* restore the line */
+                           if (orig_line != NULL)
+                               ml_replace(lnum, orig_line, FALSE);
                        }
 
                        need_wait_return = FALSE; /* no hit-return prompt */
@@ -4826,7 +4911,7 @@ do_sub(eap)
                        goto skip;
                    }
                    if (got_quit)
-                       break;
+                       goto skip;
                }
 
                /* Move the cursor to the start of the match, so that we can
@@ -4836,10 +4921,27 @@ do_sub(eap)
                /*
                 * 3. substitute the string.
                 */
+#ifdef FEAT_EVAL
+               if (do_count)
+               {
+                   /* prevent accidentally changing the buffer by a function */
+                   save_ma = curbuf->b_p_ma;
+                   curbuf->b_p_ma = FALSE;
+                   sandbox++;
+               }
+#endif
                /* get length of substitution part */
                sublen = vim_regsub_multi(&regmatch,
                                    sub_firstlnum - regmatch.startpos[0].lnum,
                                    sub, sub_firstline, FALSE, p_magic, TRUE);
+#ifdef FEAT_EVAL
+               if (do_count)
+               {
+                   curbuf->b_p_ma = save_ma;
+                   sandbox--;
+                   goto skip;
+               }
+#endif
 
                /* When the match included the "$" of the last line it may
                 * go beyond the last line of the buffer. */
@@ -5016,14 +5118,10 @@ skip:
                 * The check for nmatch_tl is needed for when multi-line
                 * matching must replace the lines before trying to do another
                 * match, otherwise "\@<=" won't work.
-                * When asking the user we like to show the already replaced
-                * text, but don't do it when "\<@=" or "\<@!" is used, it
-                * changes what matches.
                 * When the match starts below where we start searching also
                 * need to replace the line first (using \zs after \n).
                 */
                if (lastone
-                       || (do_ask && !re_lookbehind(regmatch.regprog))
                        || nmatch_tl > 0
                        || (nmatch = vim_regexec_multi(&regmatch, curwin,
                                                        curbuf, sub_firstlnum,
@@ -5146,10 +5244,13 @@ outofmem:
 
        if (!global_busy)
        {
-           if (endcolumn)
-               coladvance((colnr_T)MAXCOL);
-           else
-               beginline(BL_WHITE | BL_FIX);
+           if (!do_ask)  /* when interactive leave cursor on the match */
+           {
+               if (endcolumn)
+                   coladvance((colnr_T)MAXCOL);
+               else
+                   beginline(BL_WHITE | BL_FIX);
+           }
            if (!do_sub_msg(do_count) && do_ask)
                MSG("");
        }
@@ -5168,7 +5269,13 @@ outofmem:
            EMSG2(_(e_patnotf2), get_search_pat());
     }
 
-    vim_free(regmatch.regprog);
+#ifdef FEAT_FOLDING
+    if (do_ask && hasAnyFolding(curwin))
+       /* Cursor position may require updating */
+       changed_window_setting();
+#endif
+
+    vim_regfree(regmatch.regprog);
 }
 
 /*
@@ -5232,7 +5339,7 @@ do_sub_msg(count_only)
  * is assumed to be 'p' if missing.
  *
  * This is implemented in two passes: first we scan the file for the pattern and
- * set a mark for each line that (not) matches. secondly we execute the command
+ * set a mark for each line that (not) matches. Secondly we execute the command
  * for each line that has a mark. This is required because after deleting
  * lines we do not know where to search for the next match.
  */
@@ -5337,13 +5444,13 @@ ex_global(eap)
        if (type == 'v')
            smsg((char_u *)_("Pattern found in every line: %s"), pat);
        else
-           smsg((char_u *)_(e_patnotf2), pat);
+           smsg((char_u *)_("Pattern not found: %s"), pat);
     }
     else
        global_exe(cmd);
 
     ml_clearmarked();     /* clear rest of the marks */
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 }
 
 /*
@@ -5353,8 +5460,9 @@ ex_global(eap)
 global_exe(cmd)
     char_u     *cmd;
 {
-    linenr_T   old_lcount;     /* b_ml.ml_line_count before the command */
-    linenr_T   lnum;           /* line number according to old situation */
+    linenr_T old_lcount;       /* b_ml.ml_line_count before the command */
+    buf_T    *old_buf = curbuf;        /* remember what buffer we started in */
+    linenr_T lnum;             /* line number according to old situation */
 
     /*
      * Set current position only once for a global command.
@@ -5398,8 +5506,10 @@ global_exe(cmd)
        msg_didout = FALSE;
 
     /* If substitutes done, report number of substitutes, otherwise report
-     * number of extra or deleted lines. */
-    if (!do_sub_msg(FALSE))
+     * number of extra or deleted lines.
+     * Don't report extra or deleted lines in the edge case where the buffer
+     * we are in after execution is different from the buffer we started in. */
+    if (!do_sub_msg(FALSE) && curbuf == old_buf)
        msgmore(curbuf->b_ml.ml_line_count - old_lcount);
 }
 
@@ -5409,7 +5519,7 @@ read_viminfo_sub_string(virp, force)
     vir_T      *virp;
     int                force;
 {
-    if (old_sub != NULL && force)
+    if (force)
        vim_free(old_sub);
     if (force || old_sub == NULL)
        old_sub = viminfo_readstring(virp, 1, TRUE);
@@ -5471,9 +5581,8 @@ prepare_tagpreview(undo_sync)
                return FALSE;
            curwin->w_p_pvw = TRUE;
            curwin->w_p_wfh = TRUE;
-# ifdef FEAT_SCROLLBIND
-           curwin->w_p_scb = FALSE;        /* don't take over 'scrollbind' */
-# endif
+           RESET_BINDING(curwin);          /* don't take over 'scrollbind'
+                                              and 'cursorbind' */
 # ifdef FEAT_DIFF
            curwin->w_p_diff = FALSE;       /* no 'diff' */
 # endif
@@ -5514,6 +5623,9 @@ ex_help(eap)
     int                len;
     char_u     *lang;
 #endif
+#ifdef FEAT_FOLDING
+    int                old_KeyTyped = KeyTyped;
+#endif
 
     if (eap != NULL)
     {
@@ -5533,7 +5645,7 @@ ex_help(eap)
        }
        arg = eap->arg;
 
-       if (eap->forceit && *arg == NUL)
+       if (eap->forceit && *arg == NUL && !curbuf->b_help)
        {
            EMSG(_("E478: Don't panic!"));
            return;
@@ -5677,6 +5789,12 @@ ex_help(eap)
     if (!p_im)
        restart_edit = 0;           /* don't want insert mode in help file */
 
+#ifdef FEAT_FOLDING
+    /* Restore KeyTyped, setting 'filetype=help' may reset it.
+     * It is needed for do_tag top open folds under the cursor. */
+    KeyTyped = old_KeyTyped;
+#endif
+
     if (tag != NULL)
        do_tag(tag, DT_HELP, 1, FALSE, TRUE);
 
@@ -5806,14 +5924,14 @@ find_help_tags(arg, num_matches, matches, keep_lang)
     int                i;
     static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*",
                               "/*", "/\\*", "\"*", "**",
-                              "/\\(\\)",
+                              "cpo-*", "/\\(\\)", "/\\%(\\)",
                               "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
                               "/\\?", "/\\z(\\)", "\\=", ":s\\=",
                               "[count]", "[quotex]", "[range]",
                               "[pattern]", "\\|", "\\%$"};
     static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
                               "/star", "/\\\\star", "quotestar", "starstar",
-                              "/\\\\(\\\\)",
+                              "cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
                               "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
                               "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
                               "\\[count]", "\\[quotex]", "\\[range]",
@@ -5853,9 +5971,14 @@ find_help_tags(arg, num_matches, matches, keep_lang)
        }
        else
        {
-         /* replace "[:...:]" with "\[:...:]"; "[+...]" with "\[++...]" */
-           if (arg[0] == '[' && (arg[1] == ':'
-                                        || (arg[1] == '+' && arg[2] == '+')))
+         /* Replace:
+          * "[:...:]" with "\[:...:]"
+          * "[++...]" with "\[++...]"
+          * "\{" with "\\{"
+          */
+           if ((arg[0] == '[' && (arg[1] == ':'
+                        || (arg[1] == '+' && arg[2] == '+')))
+                   || (arg[0] == '\\' && arg[1] == '{'))
              *d++ = '\\';
 
          for (s = arg; *s; ++s)
@@ -5896,8 +6019,8 @@ find_help_tags(arg, num_matches, matches, keep_lang)
            if (*s < ' ' || (*s == '^' && s[1] && (ASCII_ISALPHA(s[1])
                           || vim_strchr((char_u *)"?@[\\]^", s[1]) != NULL)))
            {
-               if (d > IObuff && d[-1] != '_')
-                   *d++ = '_';         /* prepend a '_' */
+               if (d > IObuff && d[-1] != '_' && d[-1] != '\\')
+                   *d++ = '_';         /* prepend a '_' to make x_CTRL-x */
                STRCPY(d, "CTRL-");
                d += 5;
                if (*s < ' ')
@@ -5946,6 +6069,29 @@ find_help_tags(arg, num_matches, matches, keep_lang)
                break;
          }
          *d = NUL;
+
+         if (*IObuff == '`')
+         {
+             if (d > IObuff + 2 && d[-1] == '`')
+             {
+                 /* remove the backticks from `command` */
+                 mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
+                 d[-2] = NUL;
+             }
+             else if (d > IObuff + 3 && d[-2] == '`' && d[-1] == ',')
+             {
+                 /* remove the backticks and comma from `command`, */
+                 mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
+                 d[-3] = NUL;
+             }
+             else if (d > IObuff + 4 && d[-3] == '`'
+                                            && d[-2] == '\\' && d[-1] == '.')
+             {
+                 /* remove the backticks and dot from `command`\. */
+                 mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
+                 d[-4] = NUL;
+             }
+         }
        }
     }
 
@@ -5979,6 +6125,7 @@ fix_help_buffer()
     char_u     *line;
     int                in_example = FALSE;
     int                len;
+    char_u     *fname;
     char_u     *p;
     char_u     *rt;
     int                mustfree;
@@ -6025,124 +6172,187 @@ fix_help_buffer()
     }
 
     /*
-     * In the "help.txt" file, add the locally added help files.
-     * This uses the very first line in the help file.
+     * In the "help.txt" and "help.abx" file, add the locally added help
+     * files.  This uses the very first line in the help file.
      */
-    if (fnamecmp(gettail(curbuf->b_fname), "help.txt") == 0)
+    fname = gettail(curbuf->b_fname);
+    if (fnamecmp(fname, "help.txt") == 0
+#ifdef FEAT_MULTI_LANG
+       || (fnamencmp(fname, "help.", 5) == 0
+           && ASCII_ISALPHA(fname[5])
+           && ASCII_ISALPHA(fname[6])
+           && TOLOWER_ASC(fname[7]) == 'x'
+           && fname[8] == NUL)
+#endif
+       )
     {
        for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
        {
            line = ml_get_buf(curbuf, lnum, FALSE);
-           if (strstr((char *)line, "*local-additions*") != NULL)
+           if (strstr((char *)line, "*local-additions*") == NULL)
+               continue;
+
+           /* Go through all directories in 'runtimepath', skipping
+            * $VIMRUNTIME. */
+           p = p_rtp;
+           while (*p != NUL)
            {
-               /* Go through all directories in 'runtimepath', skipping
-                * $VIMRUNTIME. */
-               p = p_rtp;
-               while (*p != NUL)
+               copy_option_part(&p, NameBuff, MAXPATHL, ",");
+               mustfree = FALSE;
+               rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
+               if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
                {
-                   copy_option_part(&p, NameBuff, MAXPATHL, ",");
-                   mustfree = FALSE;
-                   rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
-                   if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
-                   {
-                       int     fcount;
-                       char_u  **fnames;
-                       FILE    *fd;
-                       char_u  *s;
-                       int     fi;
+                   int         fcount;
+                   char_u      **fnames;
+                   FILE        *fd;
+                   char_u      *s;
+                   int         fi;
 #ifdef FEAT_MBYTE
-                       vimconv_T       vc;
-                       char_u          *cp;
+                   vimconv_T   vc;
+                   char_u      *cp;
 #endif
 
-                       /* Find all "doc/ *.txt" files in this directory. */
-                       add_pathsep(NameBuff);
-                       STRCAT(NameBuff, "doc/*.txt");
-                       if (gen_expand_wildcards(1, &NameBuff, &fcount,
-                                            &fnames, EW_FILE|EW_SILENT) == OK
-                               && fcount > 0)
+                   /* Find all "doc/ *.txt" files in this directory. */
+                   add_pathsep(NameBuff);
+#ifdef FEAT_MULTI_LANG
+                   STRCAT(NameBuff, "doc/*.??[tx]");
+#else
+                   STRCAT(NameBuff, "doc/*.txt");
+#endif
+                   if (gen_expand_wildcards(1, &NameBuff, &fcount,
+                                        &fnames, EW_FILE|EW_SILENT) == OK
+                           && fcount > 0)
+                   {
+#ifdef FEAT_MULTI_LANG
+                       int     i1;
+                       int     i2;
+                       char_u  *f1;
+                       char_u  *f2;
+                       char_u  *t1;
+                       char_u  *e1;
+                       char_u  *e2;
+
+                       /* If foo.abx is found use it instead of foo.txt in
+                        * the same directory. */
+                       for (i1 = 0; i1 < fcount; ++i1)
                        {
-                           for (fi = 0; fi < fcount; ++fi)
+                           for (i2 = 0; i2 < fcount; ++i2)
                            {
-                               fd = mch_fopen((char *)fnames[fi], "r");
-                               if (fd != NULL)
+                               if (i1 == i2)
+                                   continue;
+                               if (fnames[i1] == NULL || fnames[i2] == NULL)
+                                   continue;
+                               f1 = fnames[i1];
+                               f2 = fnames[i2];
+                               t1 = gettail(f1);
+                               if (fnamencmp(f1, f2, t1 - f1) != 0)
+                                   continue;
+                               e1 = vim_strrchr(t1, '.');
+                               e2 = vim_strrchr(gettail(f2), '.');
+                               if (e1 == NUL || e2 == NUL)
+                                   continue;
+                               if (fnamecmp(e1, ".txt") != 0
+                                   && fnamecmp(e1, fname + 4) != 0)
+                               {
+                                   /* Not .txt and not .abx, remove it. */
+                                   vim_free(fnames[i1]);
+                                   fnames[i1] = NULL;
+                                   continue;
+                               }
+                               if (fnamencmp(f1, f2, e1 - f1) != 0)
+                                   continue;
+                               if (fnamecmp(e1, ".txt") == 0
+                                   && fnamecmp(e2, fname + 4) == 0)
+                               {
+                                   /* use .abx instead of .txt */
+                                   vim_free(fnames[i1]);
+                                   fnames[i1] = NULL;
+                               }
+                           }
+                       }
+#endif
+                       for (fi = 0; fi < fcount; ++fi)
+                       {
+                           if (fnames[fi] == NULL)
+                               continue;
+                           fd = mch_fopen((char *)fnames[fi], "r");
+                           if (fd != NULL)
+                           {
+                               vim_fgets(IObuff, IOSIZE, fd);
+                               if (IObuff[0] == '*'
+                                       && (s = vim_strchr(IObuff + 1, '*'))
+                                                                 != NULL)
                                {
-                                   vim_fgets(IObuff, IOSIZE, fd);
-                                   if (IObuff[0] == '*'
-                                           && (s = vim_strchr(IObuff + 1, '*'))
-                                                                     != NULL)
-                                   {
 #ifdef FEAT_MBYTE
-                                       int     this_utf = MAYBE;
+                                   int this_utf = MAYBE;
 #endif
-                                       /* Change tag definition to a
-                                        * reference and remove <CR>/<NL>. */
-                                       IObuff[0] = '|';
-                                       *s = '|';
-                                       while (*s != NUL)
-                                       {
-                                           if (*s == '\r' || *s == '\n')
-                                               *s = NUL;
+                                   /* Change tag definition to a
+                                    * reference and remove <CR>/<NL>. */
+                                   IObuff[0] = '|';
+                                   *s = '|';
+                                   while (*s != NUL)
+                                   {
+                                       if (*s == '\r' || *s == '\n')
+                                           *s = NUL;
 #ifdef FEAT_MBYTE
-                                           /* The text is utf-8 when a byte
-                                            * above 127 is found and no
-                                            * illegal byte sequence is found.
-                                            */
-                                           if (*s >= 0x80 && this_utf != FALSE)
-                                           {
-                                               int     l;
-
-                                               this_utf = TRUE;
-                                               l = utf_ptr2len(s);
-                                               if (l == 1)
-                                                   this_utf = FALSE;
-                                               s += l - 1;
-                                           }
-#endif
-                                           ++s;
+                                       /* The text is utf-8 when a byte
+                                        * above 127 is found and no
+                                        * illegal byte sequence is found.
+                                        */
+                                       if (*s >= 0x80 && this_utf != FALSE)
+                                       {
+                                           int l;
+
+                                           this_utf = TRUE;
+                                           l = utf_ptr2len(s);
+                                           if (l == 1)
+                                               this_utf = FALSE;
+                                           s += l - 1;
                                        }
+#endif
+                                       ++s;
+                                   }
 #ifdef FEAT_MBYTE
-                                       /* The help file is latin1 or utf-8;
-                                        * conversion to the current
-                                        * 'encoding' may be required. */
-                                       vc.vc_type = CONV_NONE;
-                                       convert_setup(&vc, (char_u *)(
-                                                   this_utf == TRUE ? "utf-8"
-                                                         : "latin1"), p_enc);
-                                       if (vc.vc_type == CONV_NONE)
-                                           /* No conversion needed. */
+                                   /* The help file is latin1 or utf-8;
+                                    * conversion to the current
+                                    * 'encoding' may be required. */
+                                   vc.vc_type = CONV_NONE;
+                                   convert_setup(&vc, (char_u *)(
+                                               this_utf == TRUE ? "utf-8"
+                                                     : "latin1"), p_enc);
+                                   if (vc.vc_type == CONV_NONE)
+                                       /* No conversion needed. */
+                                       cp = IObuff;
+                                   else
+                                   {
+                                       /* Do the conversion.  If it fails
+                                        * use the unconverted text. */
+                                       cp = string_convert(&vc, IObuff,
+                                                                   NULL);
+                                       if (cp == NULL)
                                            cp = IObuff;
-                                       else
-                                       {
-                                           /* Do the conversion.  If it fails
-                                            * use the unconverted text. */
-                                           cp = string_convert(&vc, IObuff,
-                                                                       NULL);
-                                           if (cp == NULL)
-                                               cp = IObuff;
-                                       }
-                                       convert_setup(&vc, NULL, NULL);
+                                   }
+                                   convert_setup(&vc, NULL, NULL);
 
-                                       ml_append(lnum, cp, (colnr_T)0, FALSE);
-                                       if (cp != IObuff)
-                                           vim_free(cp);
+                                   ml_append(lnum, cp, (colnr_T)0, FALSE);
+                                   if (cp != IObuff)
+                                       vim_free(cp);
 #else
-                                       ml_append(lnum, IObuff, (colnr_T)0,
-                                                                      FALSE);
+                                   ml_append(lnum, IObuff, (colnr_T)0,
+                                                                  FALSE);
 #endif
-                                       ++lnum;
-                                   }
-                                   fclose(fd);
+                                   ++lnum;
                                }
+                               fclose(fd);
                            }
-                           FreeWild(fcount, fnames);
                        }
+                       FreeWild(fcount, fnames);
                    }
-                   if (mustfree)
-                       vim_free(rt);
                }
-               break;
+               if (mustfree)
+                   vim_free(rt);
            }
+           break;
        }
     }
 }
@@ -6209,10 +6419,10 @@ ex_helptags(eap)
     }
 
 #ifdef FEAT_MULTI_LANG
-    /* Get a list of all files in the directory. */
+    /* Get a list of all files in the help directory and in subdirectories. */
     STRCPY(NameBuff, dirname);
     add_pathsep(NameBuff);
-    STRCAT(NameBuff, "*");
+    STRCAT(NameBuff, "**");
     if (gen_expand_wildcards(1, &NameBuff, &filecount, &files,
                                                    EW_FILE|EW_SILENT) == FAIL
            || filecount == 0)
@@ -6301,8 +6511,8 @@ ex_helptags(eap)
 helptags_one(dir, ext, tagfname, add_help_tags)
     char_u     *dir;           /* doc directory */
     char_u     *ext;           /* suffix, ".txt", ".itx", ".frx", etc. */
-    char_u     *tagfname;      /* "tags" for English, "tags-fr" for French. */
-    int                add_help_tags;  /* add "help-tags" tag */
+    char_u     *tagfname;      /* "tags" for English, "tags-fr" for French. */
+    int                add_help_tags;  /* add "help-tags" tag */
 {
     FILE       *fd_tags;
     FILE       *fd;
@@ -6314,6 +6524,7 @@ helptags_one(dir, ext, tagfname, add_help_tags)
     char_u     *s;
     int                i;
     char_u     *fname;
+    int                dirlen;
 # ifdef FEAT_MBYTE
     int                utf8 = MAYBE;
     int                this_utf8;
@@ -6324,9 +6535,9 @@ helptags_one(dir, ext, tagfname, add_help_tags)
     /*
      * Find all *.txt files.
      */
+    dirlen = (int)STRLEN(dir);
     STRCPY(NameBuff, dir);
-    add_pathsep(NameBuff);
-    STRCAT(NameBuff, "*");
+    STRCAT(NameBuff, "/**/*");
     STRCAT(NameBuff, ext);
     if (gen_expand_wildcards(1, &NameBuff, &filecount, &files,
                                                    EW_FILE|EW_SILENT) == FAIL
@@ -6387,7 +6598,7 @@ helptags_one(dir, ext, tagfname, add_help_tags)
            EMSG2(_("E153: Unable to open %s for reading"), files[fi]);
            continue;
        }
-       fname = gettail(files[fi]);
+       fname = files[fi] + dirlen + 1;
 
 # ifdef FEAT_MBYTE
        firstline = TRUE;
@@ -6430,7 +6641,10 @@ helptags_one(dir, ext, tagfname, add_help_tags)
            p1 = vim_strchr(IObuff, '*');       /* find first '*' */
            while (p1 != NULL)
            {
-               p2 = vim_strchr(p1 + 1, '*');   /* find second '*' */
+               /* Use vim_strbyte() instead of vim_strchr() so that when
+                * 'encoding' is dbcs it still works, don't find '*' in the
+                * second byte. */
+               p2 = vim_strbyte(p1 + 1, '*');  /* find second '*' */
                if (p2 != NULL && p2 > p1 + 1)  /* skip "*" and "**" */
                {
                    for (s = p1 + 1; s < p2; ++s)
@@ -6559,8 +6773,7 @@ typedef struct sign sign_T;
 struct sign
 {
     sign_T     *sn_next;       /* next sign in list */
-    int                sn_typenr;      /* type number of sign (negative if not equal
-                                  to name) */
+    int                sn_typenr;      /* type number of sign */
     char_u     *sn_name;       /* name of sign */
     char_u     *sn_icon;       /* name of pixmap */
 #ifdef FEAT_SIGN_ICONS
@@ -6572,7 +6785,7 @@ struct sign
 };
 
 static sign_T  *first_sign = NULL;
-static int     last_sign_typenr = MAX_TYPENR;  /* is decremented */
+static int     next_sign_typenr = 1;
 
 static int sign_cmd_idx __ARGS((char_u *begin_cmd, char_u *end_cmd));
 static void sign_list_defined __ARGS((sign_T *sp));
@@ -6647,16 +6860,21 @@ ex_sign(eap)
        if (idx == SIGNCMD_LIST && *arg == NUL)
        {
            /* ":sign list": list all defined signs */
-           for (sp = first_sign; sp != NULL; sp = sp->sn_next)
+           for (sp = first_sign; sp != NULL && !got_int; sp = sp->sn_next)
                sign_list_defined(sp);
        }
        else if (*arg == NUL)
            EMSG(_("E156: Missing sign name"));
        else
        {
+           /* Isolate the sign name.  If it's a number skip leading zeroes,
+            * so that "099" and "99" are the same sign.  But keep "0". */
            p = skiptowhite(arg);
            if (*p != NUL)
                *p++ = NUL;
+           while (arg[0] == '0' && arg[1] != NUL)
+               ++arg;
+
            sp_prev = NULL;
            for (sp = first_sign; sp != NULL; sp = sp->sn_next)
            {
@@ -6669,46 +6887,52 @@ ex_sign(eap)
                /* ":sign define {name} ...": define a sign */
                if (sp == NULL)
                {
+                   sign_T      *lp;
+                   int         start = next_sign_typenr;
+
                    /* Allocate a new sign. */
                    sp = (sign_T *)alloc_clear((unsigned)sizeof(sign_T));
                    if (sp == NULL)
                        return;
-                   if (sp_prev == NULL)
-                       first_sign = sp;
-                   else
-                       sp_prev->sn_next = sp;
-                   sp->sn_name = vim_strnsave(arg, (int)(p - arg));
 
-                   /* If the name is a number use that for the typenr,
-                    * otherwise use a negative number. */
-                   if (VIM_ISDIGIT(*arg))
-                       sp->sn_typenr = atoi((char *)arg);
-                   else
+                   /* Check that next_sign_typenr is not already being used.
+                    * This only happens after wrapping around.  Hopefully
+                    * another one got deleted and we can use its number. */
+                   for (lp = first_sign; lp != NULL; )
                    {
-                       sign_T  *lp;
-                       int     start = last_sign_typenr;
-
-                       for (lp = first_sign; lp != NULL; lp = lp->sn_next)
+                       if (lp->sn_typenr == next_sign_typenr)
                        {
-                           if (lp->sn_typenr == last_sign_typenr)
+                           ++next_sign_typenr;
+                           if (next_sign_typenr == MAX_TYPENR)
+                               next_sign_typenr = 1;
+                           if (next_sign_typenr == start)
                            {
-                               --last_sign_typenr;
-                               if (last_sign_typenr == 0)
-                                   last_sign_typenr = MAX_TYPENR;
-                               if (last_sign_typenr == start)
-                               {
-                                   EMSG(_("E612: Too many signs defined"));
-                                   return;
-                               }
-                               lp = first_sign;
-                               continue;
+                               vim_free(sp);
+                               EMSG(_("E612: Too many signs defined"));
+                               return;
                            }
+                           lp = first_sign;  /* start all over */
+                           continue;
                        }
+                       lp = lp->sn_next;
+                   }
+
+                   sp->sn_typenr = next_sign_typenr;
+                   if (++next_sign_typenr == MAX_TYPENR)
+                       next_sign_typenr = 1; /* wrap around */
 
-                       sp->sn_typenr = last_sign_typenr--;
-                       if (last_sign_typenr == 0)
-                           last_sign_typenr = MAX_TYPENR; /* wrap around */
+                   sp->sn_name = vim_strsave(arg);
+                   if (sp->sn_name == NULL)  /* out of memory */
+                   {
+                       vim_free(sp);
+                       return;
                    }
+
+                   /* add the new sign to the list of signs */
+                   if (sp_prev == NULL)
+                       first_sign = sp;
+                   else
+                       sp_prev->sn_next = sp;
                }
 
                /* set values for a defined sign. */
@@ -6879,6 +7103,16 @@ ex_sign(eap)
                lnum = atoi((char *)arg);
                arg = skiptowhite(arg);
            }
+           else if (STRNCMP(arg, "*", 1) == 0 && idx == SIGNCMD_UNPLACE)
+           {
+               if (id != -1)
+               {
+                   EMSG(_(e_invarg));
+                   return;
+               }
+               id = -2;
+               arg = skiptowhite(arg + 1);
+           }
            else if (STRNCMP(arg, "name=", 5) == 0)
            {
                arg += 5;
@@ -6886,6 +7120,8 @@ ex_sign(eap)
                arg = skiptowhite(arg);
                if (*arg != NUL)
                    *arg++ = NUL;
+               while (sign_name[0] == '0' && sign_name[1] != NUL)
+                   ++sign_name;
            }
            else if (STRNCMP(arg, "file=", 5) == 0)
            {
@@ -6913,7 +7149,7 @@ ex_sign(eap)
        {
            EMSG2(_("E158: Invalid buffer name: %s"), arg);
        }
-       else if (id <= 0)
+       else if (id <= 0 && !(idx == SIGNCMD_UNPLACE && id == -2))
        {
            if (lnum >= 0 || sign_name != NULL)
                EMSG(_(e_invarg));
@@ -6954,11 +7190,17 @@ ex_sign(eap)
        }
        else if (idx == SIGNCMD_UNPLACE)
        {
-           /* ":sign unplace {id} file={fname}" */
            if (lnum >= 0 || sign_name != NULL)
                EMSG(_(e_invarg));
+           else if (id == -2)
+           {
+               /* ":sign unplace * file={fname}" */
+               redraw_buf_later(buf, NOT_VALID);
+               buf_delete_signs(buf);
+           }
            else
            {
+               /* ":sign unplace {id} file={fname}" */
                lnum = buf_delsign(buf, id);
                update_debug_sign(buf, lnum);
            }
index ee9098a..86bcead 100644 (file)
@@ -102,7 +102,7 @@ EX(CMD_abclear,             "abclear",      ex_abclear,
 EX(CMD_aboveleft,      "aboveleft",    ex_wrongmodifier,
                        NEEDARG|EXTRA|NOTRLCOM),
 EX(CMD_all,            "all",          ex_all,
-                       RANGE|NOTADR|COUNT|TRLBAR),
+                       BANG|RANGE|NOTADR|COUNT|TRLBAR),
 EX(CMD_amenu,          "amenu",        ex_menu,
                        RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
 EX(CMD_anoremenu,      "anoremenu",    ex_menu,
@@ -304,7 +304,7 @@ EX(CMD_delfunction, "delfunction",  ex_delfunction,
 EX(CMD_display,                "display",      ex_display,
                        EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN),
 EX(CMD_diffupdate,     "diffupdate",   ex_diffupdate,
-                       TRLBAR),
+                       BANG|TRLBAR),
 EX(CMD_diffget,                "diffget",      ex_diffgetput,
                        RANGE|EXTRA|TRLBAR|MODIFY),
 EX(CMD_diffoff,                "diffoff",      ex_diffoff,
@@ -662,7 +662,7 @@ EX(CMD_nunmap,              "nunmap",       ex_unmap,
 EX(CMD_nunmenu,                "nunmenu",      ex_menu,
                        EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
 EX(CMD_open,           "open",         ex_open,
-                       RANGE|EXTRA),
+                       RANGE|BANG|EXTRA),
 EX(CMD_oldfiles,       "oldfiles",     ex_oldfiles,
                        BANG|TRLBAR|SBOXOK|CMDWIN),
 EX(CMD_omap,           "omap",         ex_map,
@@ -739,10 +739,14 @@ EX(CMD_pwd,               "pwd",          ex_pwd,
                        TRLBAR|CMDWIN),
 EX(CMD_python,         "python",       ex_python,
                        RANGE|EXTRA|NEEDARG|CMDWIN),
+EX(CMD_pydo,           "pydo",         ex_pydo,
+                       RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
 EX(CMD_pyfile,         "pyfile",       ex_pyfile,
                        RANGE|FILE1|NEEDARG|CMDWIN),
 EX(CMD_py3,            "py3",          ex_py3,
                        RANGE|EXTRA|NEEDARG|CMDWIN),
+EX(CMD_py3do,          "py3do",        ex_py3do,
+                       RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
 EX(CMD_python3,                "python3",      ex_py3,
                        RANGE|EXTRA|NEEDARG|CMDWIN),
 EX(CMD_py3file,                "py3file",      ex_py3file,
@@ -788,7 +792,7 @@ EX(CMD_rubydo,              "rubydo",       ex_rubydo,
 EX(CMD_rubyfile,       "rubyfile",     ex_rubyfile,
                        RANGE|FILE1|NEEDARG|CMDWIN),
 EX(CMD_rundo,          "rundo",        ex_rundo,
-                       NEEDARG|EXTRA|XFILE),
+                       NEEDARG|FILE1),
 EX(CMD_rviminfo,       "rviminfo",     ex_viminfo,
                        BANG|FILE1|TRLBAR|CMDWIN),
 EX(CMD_substitute,     "substitute",   do_sub,
@@ -798,7 +802,7 @@ EX(CMD_sNext,               "sNext",        ex_previous,
 EX(CMD_sargument,      "sargument",    ex_argument,
                        BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR),
 EX(CMD_sall,           "sall",         ex_all,
-                       RANGE|NOTADR|COUNT|TRLBAR),
+                       BANG|RANGE|NOTADR|COUNT|TRLBAR),
 EX(CMD_sandbox,                "sandbox",      ex_wrongmodifier,
                        NEEDARG|EXTRA|NOTRLCOM),
 EX(CMD_saveas,         "saveas",       ex_write,
@@ -832,9 +836,9 @@ EX(CMD_set,         "set",          ex_set,
 EX(CMD_setfiletype,    "setfiletype",  ex_setfiletype,
                        TRLBAR|EXTRA|NEEDARG|CMDWIN),
 EX(CMD_setglobal,      "setglobal",    ex_set,
-                       TRLBAR|EXTRA|CMDWIN),
+                       TRLBAR|EXTRA|CMDWIN|SBOXOK),
 EX(CMD_setlocal,       "setlocal",     ex_set,
-                       TRLBAR|EXTRA|CMDWIN),
+                       TRLBAR|EXTRA|CMDWIN|SBOXOK),
 EX(CMD_sfind,          "sfind",        ex_splitview,
                        BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR),
 EX(CMD_sfirst,         "sfirst",       ex_rewind,
@@ -921,6 +925,8 @@ EX(CMD_swapname,    "swapname",     ex_swapname,
                        TRLBAR|CMDWIN),
 EX(CMD_syntax,         "syntax",       ex_syntax,
                        EXTRA|NOTRLCOM|CMDWIN),
+EX(CMD_syntime,                "syntime",      ex_syntime,
+                       NEEDARG|WORD1|TRLBAR|CMDWIN),
 EX(CMD_syncbind,       "syncbind",     ex_syncbind,
                        TRLBAR),
 EX(CMD_t,              "t",            ex_copymove,
@@ -944,7 +950,7 @@ EX(CMD_tabfind,             "tabfind",      ex_splitview,
 EX(CMD_tabfirst,       "tabfirst",     ex_tabnext,
                        TRLBAR),
 EX(CMD_tabmove,                "tabmove",      ex_tabmove,
-                       RANGE|NOTADR|ZEROR|COUNT|TRLBAR|ZEROR),
+                       RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR),
 EX(CMD_tablast,                "tablast",      ex_tabnext,
                        TRLBAR),
 EX(CMD_tabnext,                "tabnext",      ex_tabnext,
@@ -1078,7 +1084,7 @@ EX(CMD_wqall,             "wqall",        do_wqall,
 EX(CMD_wsverb,         "wsverb",       ex_wsverb,
                        EXTRA|NOTADR|NEEDARG),
 EX(CMD_wundo,          "wundo",        ex_wundo,
-                       BANG|NEEDARG|EXTRA|XFILE),
+                       BANG|NEEDARG|FILE1),
 EX(CMD_wviminfo,       "wviminfo",     ex_viminfo,
                        BANG|FILE1|TRLBAR|CMDWIN),
 EX(CMD_xit,            "xit",          ex_exit,
index f7ffb08..4a860ca 100644 (file)
  * ex_cmds2.c: some more functions for command line commands
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"    /* for mch_open(), must be before vim.h */
-#endif
-
 #include "vim.h"
 #include "version.h"
 
@@ -504,18 +500,10 @@ dbg_parsearg(arg, gap)
        /* Expand the file name in the same way as do_source().  This means
         * doing it twice, so that $DIR/file gets expanded when $DIR is
         * "~/dir". */
-#ifdef RISCOS
-       q = mch_munge_fname(p);
-#else
        q = expand_env_save(p);
-#endif
        if (q == NULL)
            return FAIL;
-#ifdef RISCOS
-       p = mch_munge_fname(q);
-#else
        p = expand_env_save(q);
-#endif
        vim_free(q);
        if (p == NULL)
            return FAIL;
@@ -608,10 +596,15 @@ ex_breakdel(eap)
     garray_T   *gap;
 
     gap = &dbg_breakp;
-#ifdef FEAT_PROFILE
     if (eap->cmdidx == CMD_profdel)
+    {
+#ifdef FEAT_PROFILE
        gap = &prof_ga;
+#else
+       ex_ni(eap);
+       return;
 #endif
+    }
 
     if (vim_isdigit(*eap->arg))
     {
@@ -659,7 +652,7 @@ ex_breakdel(eap)
        while (gap->ga_len > 0)
        {
            vim_free(DEBUGGY(gap, todel).dbg_name);
-           vim_free(DEBUGGY(gap, todel).dbg_prog);
+           vim_regfree(DEBUGGY(gap, todel).dbg_prog);
            --gap->ga_len;
            if (todel < gap->ga_len)
                mch_memmove(&DEBUGGY(gap, todel), &DEBUGGY(gap, todel + 1),
@@ -694,10 +687,12 @@ ex_breaklist(eap)
        for (i = 0; i < dbg_breakp.ga_len; ++i)
        {
            bp = &BREAKP(i);
+           if (bp->dbg_type == DBG_FILE)
+               home_replace(NULL, bp->dbg_name, NameBuff, MAXPATHL, TRUE);
            smsg((char_u *)_("%3d  %s %s  line %ld"),
                    bp->dbg_nr,
                    bp->dbg_type == DBG_FUNC ? "func" : "file",
-                   bp->dbg_name,
+                   bp->dbg_type == DBG_FUNC ? bp->dbg_name : NameBuff,
                    (long)bp->dbg_lnum);
        }
 }
@@ -963,6 +958,36 @@ profile_zero(tm)
 
 # endif  /* FEAT_PROFILE || FEAT_RELTIME */
 
+#if defined(FEAT_SYN_HL) && defined(FEAT_RELTIME) && defined(FEAT_FLOAT)
+# if defined(HAVE_MATH_H)
+#  include <math.h>
+# endif
+
+/*
+ * Divide the time "tm" by "count" and store in "tm2".
+ */
+    void
+profile_divide(tm, count, tm2)
+    proftime_T  *tm;
+    proftime_T  *tm2;
+    int                count;
+{
+    if (count == 0)
+       profile_zero(tm2);
+    else
+    {
+# ifdef WIN3264
+       tm2->QuadPart = tm->QuadPart / count;
+# else
+       double usec = (tm->tv_sec * 1000000.0 + tm->tv_usec) / count;
+
+       tm2->tv_sec = floor(usec / 1000000.0);
+       tm2->tv_usec = vim_round(usec - (tm2->tv_sec * 1000000.0));
+# endif
+    }
+}
+#endif
+
 # if defined(FEAT_PROFILE) || defined(PROTO)
 /*
  * Functions for profiling.
@@ -1055,7 +1080,7 @@ profile_equal(tm1, tm2)
  */
     int
 profile_cmp(tm1, tm2)
-    proftime_T *tm1, *tm2;
+    const proftime_T *tm1, *tm2;
 {
 # ifdef WIN3264
     return (int)(tm2->QuadPart - tm1->QuadPart);
@@ -1119,7 +1144,7 @@ ex_profile(eap)
 static enum
 {
     PEXP_SUBCMD,       /* expand :profile sub-commands */
-    PEXP_FUNC,         /* expand :profile func {funcname} */
+    PEXP_FUNC          /* expand :profile func {funcname} */
 } pexpand_what;
 
 static char *pexpand_cmds[] = {
@@ -1488,7 +1513,7 @@ browse_save_fname(buf)
 #endif
 
 /*
- * Ask the user what to do when abondoning a changed buffer.
+ * Ask the user what to do when abandoning a changed buffer.
  * Must check 'write' option first!
  */
     void
@@ -1496,9 +1521,10 @@ dialog_changed(buf, checkall)
     buf_T      *buf;
     int                checkall;       /* may abandon all changed buffers */
 {
-    char_u     buff[IOSIZE];
+    char_u     buff[DIALOG_MSG_SIZE];
     int                ret;
     buf_T      *buf2;
+    exarg_T     ea;
 
     dialog_msg(buff, _("Save changes to \"%s\"?"),
                        (buf->b_fname != NULL) ?
@@ -1508,13 +1534,19 @@ dialog_changed(buf, checkall)
     else
        ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
 
+    /* Init ea pseudo-structure, this is needed for the check_overwrite()
+     * function. */
+    ea.append = ea.forceit = FALSE;
+
     if (ret == VIM_YES)
     {
 #ifdef FEAT_BROWSE
        /* May get file name, when there is none */
        browse_save_fname(buf);
 #endif
-       if (buf->b_fname != NULL)   /* didn't hit Cancel */
+       if (buf->b_fname != NULL && check_overwrite(&ea, buf,
+                                   buf->b_fname, buf->b_ffname, FALSE) == OK)
+           /* didn't hit Cancel */
            (void)buf_write_all(buf, FALSE);
     }
     else if (ret == VIM_NO)
@@ -1542,7 +1574,9 @@ dialog_changed(buf, checkall)
                /* May get file name, when there is none */
                browse_save_fname(buf2);
 #endif
-               if (buf2->b_fname != NULL)   /* didn't hit Cancel */
+               if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
+                                 buf2->b_fname, buf2->b_ffname, FALSE) == OK)
+                   /* didn't hit Cancel */
                    (void)buf_write_all(buf2, FALSE);
 #ifdef FEAT_AUTOCMD
                /* an autocommand may have deleted the buffer */
@@ -1579,6 +1613,26 @@ can_abandon(buf, forceit)
                || forceit);
 }
 
+static void add_bufnum __ARGS((int *bufnrs, int *bufnump, int nr));
+
+/*
+ * Add a buffer number to "bufnrs", unless it's already there.
+ */
+    static void
+add_bufnum(bufnrs, bufnump, nr)
+    int            *bufnrs;
+    int            *bufnump;
+    int            nr;
+{
+    int i;
+
+    for (i = 0; i < *bufnump; ++i)
+       if (bufnrs[i] == nr)
+           return;
+    bufnrs[*bufnump] = nr;
+    *bufnump = *bufnump + 1;
+}
+
 /*
  * Return TRUE if any buffer was changed and cannot be abandoned.
  * That changed buffer becomes the current buffer.
@@ -1587,32 +1641,64 @@ can_abandon(buf, forceit)
 check_changed_any(hidden)
     int                hidden;         /* Only check hidden buffers */
 {
+    int                ret = FALSE;
     buf_T      *buf;
     int                save;
+    int                i;
+    int                bufnum = 0;
+    int                bufcount = 0;
+    int                *bufnrs;
 #ifdef FEAT_WINDOWS
+    tabpage_T   *tp;
     win_T      *wp;
 #endif
 
-    for (;;)
+    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+       ++bufcount;
+
+    if (bufcount == 0)
+       return FALSE;
+
+    bufnrs = (int *)alloc(sizeof(int) * bufcount);
+    if (bufnrs == NULL)
+       return FALSE;
+
+    /* curbuf */
+    bufnrs[bufnum++] = curbuf->b_fnum;
+#ifdef FEAT_WINDOWS
+    /* buf in curtab */
+    FOR_ALL_WINDOWS(wp)
+       if (wp->w_buffer != curbuf)
+           add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
+
+    /* buf in other tab */
+    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+       if (tp != curtab)
+           for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
+               add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
+#endif
+    /* any other buf */
+    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+       add_bufnum(bufnrs, &bufnum, buf->b_fnum);
+
+    for (i = 0; i < bufnum; ++i)
     {
-       /* check curbuf first: if it was changed we can't abandon it */
-       if (!hidden && curbufIsChanged())
-           buf = curbuf;
-       else
+       buf = buflist_findnr(bufnrs[i]);
+       if (buf == NULL)
+           continue;
+       if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
        {
-           for (buf = firstbuf; buf != NULL; buf = buf->b_next)
-               if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
-                   break;
+           /* Try auto-writing the buffer.  If this fails but the buffer no
+           * longer exists it's not changed, that's OK. */
+           if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
+               break;      /* didn't save - still changes */
        }
-       if (buf == NULL)    /* No buffers changed */
-           return FALSE;
-
-       /* Try auto-writing the buffer.  If this fails but the buffer no
-        * longer exists it's not changed, that's OK. */
-       if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
-           break;          /* didn't save - still changes */
     }
 
+    if (i >= bufnum)
+       goto theend;
+
+    ret = TRUE;
     exiting = FALSE;
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
     /*
@@ -1632,8 +1718,7 @@ check_changed_any(hidden)
            msg_didout = FALSE;
        }
        if (EMSG2(_("E162: No write since last change for buffer \"%s\""),
-                   buf_spname(buf) != NULL ? (char_u *)buf_spname(buf) :
-                   buf->b_fname))
+                   buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname))
        {
            save = no_wait_return;
            no_wait_return = FALSE;
@@ -1645,24 +1730,29 @@ check_changed_any(hidden)
 #ifdef FEAT_WINDOWS
     /* Try to find a window that contains the buffer. */
     if (buf != curbuf)
-       for (wp = firstwin; wp != NULL; wp = wp->w_next)
+       FOR_ALL_TAB_WINDOWS(tp, wp)
            if (wp->w_buffer == buf)
            {
-               win_goto(wp);
+               goto_tabpage_win(tp, wp);
 # ifdef FEAT_AUTOCMD
                /* Paranoia: did autocms wipe out the buffer with changes? */
                if (!buf_valid(buf))
-                   return TRUE;
+               {
+                   goto theend;
+               }
 # endif
-               break;
+               goto buf_found;
            }
+buf_found:
 #endif
 
     /* Open the changed buffer in the current window. */
     if (buf != curbuf)
        set_curbuf(buf, DOBUF_GOTO);
 
-    return TRUE;
+theend:
+    vim_free(bufnrs);
+    return ret;
 }
 
 /*
@@ -1789,22 +1879,28 @@ get_arglist(gap, str)
 #if defined(FEAT_QUICKFIX) || defined(FEAT_SYN_HL) || defined(PROTO)
 /*
  * Parse a list of arguments (file names), expand them and return in
- * "fnames[fcountp]".
+ * "fnames[fcountp]".  When "wig" is TRUE, removes files matching 'wildignore'.
  * Return FAIL or OK.
  */
     int
-get_arglist_exp(str, fcountp, fnamesp)
+get_arglist_exp(str, fcountp, fnamesp, wig)
     char_u     *str;
     int                *fcountp;
     char_u     ***fnamesp;
+    int                wig;
 {
     garray_T   ga;
     int                i;
 
     if (get_arglist(&ga, str) == FAIL)
        return FAIL;
-    i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
-                                      fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+    if (wig == TRUE)
+       i = expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
+                                       fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+    else
+       i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
+                                       fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+
     ga_clear(&ga);
     return i;
 }
@@ -1860,11 +1956,7 @@ do_arglist(str, what, after)
         * Delete the items: use each item as a regexp and find a match in the
         * argument list.
         */
-#ifdef CASE_INSENSITIVE_FILENAME
-       regmatch.rm_ic = TRUE;          /* Always ignore case */
-#else
-       regmatch.rm_ic = FALSE;         /* Never ignore case */
-#endif
+       regmatch.rm_ic = p_fic; /* ignore case when 'fileignorecase' is set */
        for (i = 0; i < new_ga.ga_len && !got_int; ++i)
        {
            p = ((char_u **)new_ga.ga_data)[i];
@@ -1893,7 +1985,7 @@ do_arglist(str, what, after)
                    --match;
                }
 
-           vim_free(regmatch.regprog);
+           vim_regfree(regmatch.regprog);
            vim_free(p);
            if (!didone)
                EMSG2(_(e_nomatch2), ((char_u **)new_ga.ga_data)[i]);
@@ -1949,7 +2041,7 @@ alist_check_arg_idx()
 }
 
 /*
- * Return TRUE if window "win" is editing then file at the current argument
+ * Return TRUE if window "win" is editing the file at the current argument
  * index.
  */
     static int
@@ -2165,9 +2257,7 @@ do_argfile(eap, argn)
        {
            if (win_split(0, 0) == FAIL)
                return;
-# ifdef FEAT_SCROLLBIND
-           curwin->w_p_scb = FALSE;
-# endif
+           RESET_BINDING(curwin);
        }
        else
 #endif
@@ -2422,7 +2512,7 @@ ex_listdo(eap)
                /* go to window "tp" */
                if (!valid_tabpage(tp))
                    break;
-               goto_tabpage_tp(tp);
+               goto_tabpage_tp(tp, TRUE, TRUE);
                tp = tp->tp_next;
            }
 #endif
@@ -2647,6 +2737,10 @@ source_runtime(name, all)
  * When "all" is TRUE repeat for all matches, otherwise only the first one is
  * used.
  * Returns OK when at least one match found, FAIL otherwise.
+ *
+ * If "name" is NULL calls callback for each entry in runtimepath. Cookie is 
+ * passed by reference in this case, setting it to NULL indicates that callback 
+ * has done its job.
  */
     int
 do_in_runtimepath(name, all, callback, cookie)
@@ -2678,7 +2772,7 @@ do_in_runtimepath(name, all, callback, cookie)
     buf = alloc(MAXPATHL);
     if (buf != NULL && rtp_copy != NULL)
     {
-       if (p_verbose > 1)
+       if (p_verbose > 1 && name != NULL)
        {
            verbose_enter();
            smsg((char_u *)_("Searching for \"%s\" in \"%s\""),
@@ -2692,7 +2786,13 @@ do_in_runtimepath(name, all, callback, cookie)
        {
            /* Copy the path from 'runtimepath' to buf[]. */
            copy_option_part(&rtp, buf, MAXPATHL, ",");
-           if (STRLEN(buf) + STRLEN(name) + 2 < MAXPATHL)
+           if (name == NULL)
+           {
+               (*callback)(buf, (void *) &cookie);
+               if (!did_one)
+                   did_one = (cookie == NULL);
+           }
+           else if (STRLEN(buf) + STRLEN(name) + 2 < MAXPATHL)
            {
                add_pathsep(buf);
                tail = buf + STRLEN(buf);
@@ -2731,7 +2831,7 @@ do_in_runtimepath(name, all, callback, cookie)
     }
     vim_free(buf);
     vim_free(rtp_copy);
-    if (p_verbose > 0 && !did_one)
+    if (p_verbose > 0 && !did_one && name != NULL)
     {
        verbose_enter();
        smsg((char_u *)_("not found in 'runtimepath': \"%s\""), name);
@@ -2791,7 +2891,7 @@ cmd_source(fname, eap)
        EMSG(_(e_argreq));
 
     else if (eap != NULL && eap->forceit)
-       /* ":source!": read Normal mdoe commands
+       /* ":source!": read Normal mode commands
         * Need to execute the commands directly.  This is required at least
         * for:
         * - ":g" command busy
@@ -2946,11 +3046,7 @@ do_source(fname, check_other, is_vimrc)
     proftime_T             wait_start;
 #endif
 
-#ifdef RISCOS
-    p = mch_munge_fname(fname);
-#else
     p = expand_env_save(fname);
-#endif
     if (p == NULL)
        return retval;
     fname_exp = fix_fname(p);
@@ -3286,7 +3382,11 @@ ex_scriptnames(eap)
 
     for (i = 1; i <= script_items.ga_len && !got_int; ++i)
        if (SCRIPT_ITEM(i).sn_name != NULL)
-           smsg((char_u *)"%3d: %s", i, SCRIPT_ITEM(i).sn_name);
+       {
+           home_replace(NULL, SCRIPT_ITEM(i).sn_name,
+                                                   NameBuff, MAXPATHL, TRUE);
+           smsg((char_u *)"%3d: %s", i, NameBuff);
+       }
 }
 
 # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
@@ -3412,7 +3512,7 @@ getsourceline(c, cookie, indent)
 {
     struct source_cookie *sp = (struct source_cookie *)cookie;
     char_u             *line;
-    char_u             *p, *s;
+    char_u             *p;
 
 #ifdef FEAT_EVAL
     /* If breakpoints have been added/deleted need to check for it. */
@@ -3451,28 +3551,49 @@ getsourceline(c, cookie, indent)
     {
        /* compensate for the one line read-ahead */
        --sourcing_lnum;
-       for (;;)
+
+       /* Get the next line and concatenate it when it starts with a
+        * backslash. We always need to read the next line, keep it in
+        * sp->nextline. */
+       sp->nextline = get_one_sourceline(sp);
+       if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\')
        {
-           sp->nextline = get_one_sourceline(sp);
-           if (sp->nextline == NULL)
-               break;
-           p = skipwhite(sp->nextline);
-           if (*p != '\\')
-               break;
-           s = alloc((unsigned)(STRLEN(line) + STRLEN(p)));
-           if (s == NULL)      /* out of memory */
-               break;
-           STRCPY(s, line);
-           STRCAT(s, p + 1);
+           garray_T    ga;
+
+           ga_init2(&ga, (int)sizeof(char_u), 400);
+           ga_concat(&ga, line);
+           ga_concat(&ga, p + 1);
+           for (;;)
+           {
+               vim_free(sp->nextline);
+               sp->nextline = get_one_sourceline(sp);
+               if (sp->nextline == NULL)
+                   break;
+               p = skipwhite(sp->nextline);
+               if (*p != '\\')
+                   break;
+               /* Adjust the growsize to the current length to speed up
+                * concatenating many lines. */
+               if (ga.ga_len > 400)
+               {
+                   if (ga.ga_len > 8000)
+                       ga.ga_growsize = 8000;
+                   else
+                       ga.ga_growsize = ga.ga_len;
+               }
+               ga_concat(&ga, p + 1);
+           }
+           ga_append(&ga, NUL);
            vim_free(line);
-           line = s;
-           vim_free(sp->nextline);
+           line = ga.ga_data;
        }
     }
 
 #ifdef FEAT_MBYTE
     if (line != NULL && sp->conv.vc_type != CONV_NONE)
     {
+       char_u  *s;
+
        /* Convert the encoding of the script line. */
        s = string_convert(&sp->conv, line, NULL);
        if (s != NULL)
@@ -4140,6 +4261,9 @@ ex_language(eap)
                if (what == LC_ALL)
                {
                    vim_setenv((char_u *)"LANG", name);
+
+                   /* Clear $LANGUAGE because GNU gettext uses it. */
+                   vim_setenv((char_u *)"LANGUAGE", (char_u *)"");
 # ifdef WIN32
                    /* Apparently MS-Windows printf() may cause a crash when
                     * we give it 8-bit text while it's expecting text in the
@@ -4166,11 +4290,90 @@ ex_language(eap)
            /* Set v:lang, v:lc_time and v:ctype to the final result. */
            set_lang_var();
 # endif
+# ifdef FEAT_TITLE
+           maketitle();
+# endif
        }
     }
 }
 
 # if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+
+static char_u  **locales = NULL;       /* Array of all available locales */
+static int     did_init_locales = FALSE;
+
+static void init_locales __ARGS((void));
+static char_u **find_locales __ARGS((void));
+
+/*
+ * Lazy initialization of all available locales.
+ */
+    static void
+init_locales()
+{
+    if (!did_init_locales)
+    {
+       did_init_locales = TRUE;
+       locales = find_locales();
+    }
+}
+
+/* Return an array of strings for all available locales + NULL for the
+ * last element.  Return NULL in case of error. */
+    static char_u **
+find_locales()
+{
+    garray_T   locales_ga;
+    char_u     *loc;
+
+    /* Find all available locales by running command "locale -a".  If this
+     * doesn't work we won't have completion. */
+    char_u *locale_a = get_cmd_output((char_u *)"locale -a",
+                                                       NULL, SHELL_SILENT);
+    if (locale_a == NULL)
+       return NULL;
+    ga_init2(&locales_ga, sizeof(char_u *), 20);
+
+    /* Transform locale_a string where each locale is separated by "\n"
+     * into an array of locale strings. */
+    loc = (char_u *)strtok((char *)locale_a, "\n");
+
+    while (loc != NULL)
+    {
+       if (ga_grow(&locales_ga, 1) == FAIL)
+           break;
+       loc = vim_strsave(loc);
+       if (loc == NULL)
+           break;
+
+       ((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
+       loc = (char_u *)strtok(NULL, "\n");
+    }
+    vim_free(locale_a);
+    if (ga_grow(&locales_ga, 1) == FAIL)
+    {
+       ga_clear(&locales_ga);
+       return NULL;
+    }
+    ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
+    return (char_u **)locales_ga.ga_data;
+}
+
+#  if defined(EXITFREE) || defined(PROTO)
+    void
+free_locales()
+{
+    int                        i;
+    if (locales != NULL)
+    {
+       for (i = 0; locales[i] != NULL; i++)
+           vim_free(locales[i]);
+       vim_free(locales);
+       locales = NULL;
+    }
+}
+#  endif
+
 /*
  * Function given to ExpandGeneric() to obtain the possible arguments of the
  * ":language" command.
@@ -4186,7 +4389,25 @@ get_lang_arg(xp, idx)
        return (char_u *)"ctype";
     if (idx == 2)
        return (char_u *)"time";
-    return NULL;
+
+    init_locales();
+    if (locales == NULL)
+       return NULL;
+    return locales[idx - 3];
+}
+
+/*
+ * Function given to ExpandGeneric() to obtain the available locales.
+ */
+    char_u *
+get_locales(xp, idx)
+    expand_T   *xp UNUSED;
+    int                idx;
+{
+    init_locales();
+    if (locales == NULL)
+       return NULL;
+    return locales[idx];
 }
 # endif
 
index b338ed5..24f80fb 100644 (file)
@@ -61,6 +61,7 @@ static char_u *do_one_cmd __ARGS((char_u **, int, struct condstack *, char_u *(*
 static char_u  *do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
 static int     if_level = 0;           /* depth in :if */
 #endif
+static void    append_command __ARGS((char_u *cmd));
 static char_u  *find_command __ARGS((exarg_T *eap, int *full));
 
 static void    ex_abbreviate __ARGS((exarg_T *eap));
@@ -241,6 +242,9 @@ static void ex_popup __ARGS((exarg_T *eap));
 # define ex_syntax             ex_ni
 # define ex_ownsyntax          ex_ni
 #endif
+#if !defined(FEAT_SYN_HL) || !defined(FEAT_PROFILE)
+# define ex_syntime            ex_ni
+#endif
 #ifndef FEAT_SPELL
 # define ex_spell              ex_ni
 # define ex_mkspell            ex_ni
@@ -267,10 +271,12 @@ static void       ex_popup __ARGS((exarg_T *eap));
 #endif
 #ifndef FEAT_PYTHON
 # define ex_python             ex_script_ni
+# define ex_pydo               ex_ni
 # define ex_pyfile             ex_ni
 #endif
 #ifndef FEAT_PYTHON3
 # define ex_py3                        ex_script_ni
+# define ex_py3do              ex_ni
 # define ex_py3file            ex_ni
 #endif
 #ifndef FEAT_TCL
@@ -370,11 +376,9 @@ static void        ex_tag_cmd __ARGS((exarg_T *eap, char_u *name));
 # define ex_endif              ex_ni
 # define ex_else               ex_ni
 # define ex_while              ex_ni
-# define ex_for                        ex_ni
 # define ex_continue           ex_ni
 # define ex_break              ex_ni
 # define ex_endwhile           ex_ni
-# define ex_endfor             ex_ni
 # define ex_throw              ex_ni
 # define ex_try                        ex_ni
 # define ex_catch              ex_ni
@@ -733,7 +737,7 @@ do_cmdline_cmd(cmd)
  * do_cmdline(): execute one Ex command line
  *
  * 1. Execute "cmdline" when it is not NULL.
- *    If "cmdline" is NULL, or more lines are needed, getline() is used.
+ *    If "cmdline" is NULL, or more lines are needed, fgetline() is used.
  * 2. Split up in parts separated with '|'.
  *
  * This function can be called recursively!
@@ -741,7 +745,7 @@ do_cmdline_cmd(cmd)
  * flags:
  * DOCMD_VERBOSE  - The command will be included in the error message.
  * DOCMD_NOWAIT   - Don't call wait_return() and friends.
- * DOCMD_REPEAT   - Repeat execution until getline() returns NULL.
+ * DOCMD_REPEAT   - Repeat execution until fgetline() returns NULL.
  * DOCMD_KEYTYPED - Don't reset KeyTyped.
  * DOCMD_EXCRESET - Reset the exception environment (used for debugging).
  * DOCMD_KEEPLINE - Store first typed line (for repeating with ".").
@@ -749,15 +753,15 @@ do_cmdline_cmd(cmd)
  * return FAIL if cmdline could not be executed, OK otherwise
  */
     int
-do_cmdline(cmdline, getline, cookie, flags)
+do_cmdline(cmdline, fgetline, cookie, flags)
     char_u     *cmdline;
-    char_u     *(*getline) __ARGS((int, void *, int));
-    void       *cookie;                /* argument for getline() */
+    char_u     *(*fgetline) __ARGS((int, void *, int));
+    void       *cookie;                /* argument for fgetline() */
     int                flags;
 {
     char_u     *next_cmdline;          /* next cmd to execute */
     char_u     *cmdline_copy = NULL;   /* copy of cmd line */
-    int                used_getline = FALSE;   /* used "getline" to obtain command */
+    int                used_getline = FALSE;   /* used "fgetline" to obtain command */
     static int recursive = 0;          /* recursive depth */
     int                msg_didout_before_start = 0;
     int                count = 0;              /* line number count */
@@ -775,14 +779,14 @@ do_cmdline(cmdline, getline, cookie, flags)
     struct msglist     **saved_msg_list = NULL;
     struct msglist     *private_msg_list;
 
-    /* "getline" and "cookie" passed to do_one_cmd() */
+    /* "fgetline" and "cookie" passed to do_one_cmd() */
     char_u     *(*cmd_getline) __ARGS((int, void *, int));
     void       *cmd_cookie;
     struct loop_cookie cmd_loop_cookie;
     void       *real_cookie;
     int                getline_is_func;
 #else
-# define cmd_getline getline
+# define cmd_getline fgetline
 # define cmd_cookie cookie
 #endif
     static int call_depth = 0;         /* recursiveness */
@@ -822,10 +826,10 @@ do_cmdline(cmdline, getline, cookie, flags)
     cstack.cs_lflags = 0;
     ga_init2(&lines_ga, (int)sizeof(wcmd_T), 10);
 
-    real_cookie = getline_cookie(getline, cookie);
+    real_cookie = getline_cookie(fgetline, cookie);
 
     /* Inside a function use a higher nesting level. */
-    getline_is_func = getline_equal(getline, cookie, get_func_line);
+    getline_is_func = getline_equal(fgetline, cookie, get_func_line);
     if (getline_is_func && ex_nesting_level == func_level(real_cookie))
        ++ex_nesting_level;
 
@@ -837,7 +841,7 @@ do_cmdline(cmdline, getline, cookie, flags)
        breakpoint = func_breakpoint(real_cookie);
        dbg_tick = func_dbg_tick(real_cookie);
     }
-    else if (getline_equal(getline, cookie, getsourceline))
+    else if (getline_equal(fgetline, cookie, getsourceline))
     {
        fname = sourcing_name;
        breakpoint = source_breakpoint(real_cookie);
@@ -881,7 +885,8 @@ do_cmdline(cmdline, getline, cookie, flags)
      * KeyTyped is only set when calling vgetc().  Reset it here when not
      * calling vgetc() (sourced command lines).
      */
-    if (!(flags & DOCMD_KEYTYPED) && !getline_equal(getline, cookie, getexline))
+    if (!(flags & DOCMD_KEYTYPED)
+                              && !getline_equal(fgetline, cookie, getexline))
        KeyTyped = FALSE;
 
     /*
@@ -894,7 +899,7 @@ do_cmdline(cmdline, getline, cookie, flags)
     do
     {
 #ifdef FEAT_EVAL
-       getline_is_func = getline_equal(getline, cookie, get_func_line);
+       getline_is_func = getline_equal(fgetline, cookie, get_func_line);
 #endif
 
        /* stop skipping cmds for an error msg after all endif/while/for */
@@ -909,7 +914,7 @@ do_cmdline(cmdline, getline, cookie, flags)
 
        /*
         * 1. If repeating a line in a loop, get a line from lines_ga.
-        * 2. If no line given: Get an allocated line with getline().
+        * 2. If no line given: Get an allocated line with fgetline().
         * 3. If a line is given: Make a copy, so we can mess with it.
         */
 
@@ -938,12 +943,12 @@ do_cmdline(cmdline, getline, cookie, flags)
            }
 #ifdef FEAT_PROFILE
            else if (do_profiling == PROF_YES
-                            && getline_equal(getline, cookie, getsourceline))
+                           && getline_equal(fgetline, cookie, getsourceline))
                script_line_end();
 #endif
 
            /* Check if a sourced file hit a ":finish" command. */
-           if (source_finished(getline, cookie))
+           if (source_finished(fgetline, cookie))
            {
                retval = FAIL;
                break;
@@ -954,7 +959,7 @@ do_cmdline(cmdline, getline, cookie, flags)
                                                   && *dbg_tick != debug_tick)
            {
                *breakpoint = dbg_find_breakpoint(
-                               getline_equal(getline, cookie, getsourceline),
+                               getline_equal(fgetline, cookie, getsourceline),
                                                        fname, sourcing_lnum);
                *dbg_tick = debug_tick;
            }
@@ -969,7 +974,7 @@ do_cmdline(cmdline, getline, cookie, flags)
                dbg_breakpoint(fname, sourcing_lnum);
                /* Find next breakpoint. */
                *breakpoint = dbg_find_breakpoint(
-                               getline_equal(getline, cookie, getsourceline),
+                              getline_equal(fgetline, cookie, getsourceline),
                                                        fname, sourcing_lnum);
                *dbg_tick = debug_tick;
            }
@@ -978,7 +983,7 @@ do_cmdline(cmdline, getline, cookie, flags)
            {
                if (getline_is_func)
                    func_line_start(real_cookie);
-               else if (getline_equal(getline, cookie, getsourceline))
+               else if (getline_equal(fgetline, cookie, getsourceline))
                    script_line_start();
            }
 # endif
@@ -987,7 +992,7 @@ do_cmdline(cmdline, getline, cookie, flags)
        if (cstack.cs_looplevel > 0)
        {
            /* Inside a while/for loop we need to store the lines and use them
-            * again.  Pass a different "getline" function to do_one_cmd()
+            * again.  Pass a different "fgetline" function to do_one_cmd()
             * below, so that it stores lines in or reads them from
             * "lines_ga".  Makes it possible to define a function inside a
             * while/for loop. */
@@ -995,27 +1000,27 @@ do_cmdline(cmdline, getline, cookie, flags)
            cmd_cookie = (void *)&cmd_loop_cookie;
            cmd_loop_cookie.lines_gap = &lines_ga;
            cmd_loop_cookie.current_line = current_line;
-           cmd_loop_cookie.getline = getline;
+           cmd_loop_cookie.getline = fgetline;
            cmd_loop_cookie.cookie = cookie;
            cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
        }
        else
        {
-           cmd_getline = getline;
+           cmd_getline = fgetline;
            cmd_cookie = cookie;
        }
 #endif
 
-       /* 2. If no line given, get an allocated line with getline(). */
+       /* 2. If no line given, get an allocated line with fgetline(). */
        if (next_cmdline == NULL)
        {
            /*
             * Need to set msg_didout for the first line after an ":if",
             * otherwise the ":if" will be overwritten.
             */
-           if (count == 1 && getline_equal(getline, cookie, getexline))
+           if (count == 1 && getline_equal(fgetline, cookie, getexline))
                msg_didout = TRUE;
-           if (getline == NULL || (next_cmdline = getline(':', cookie,
+           if (fgetline == NULL || (next_cmdline = fgetline(':', cookie,
 #ifdef FEAT_EVAL
                    cstack.cs_idx < 0 ? 0 : (cstack.cs_idx + 1) * 2
 #else
@@ -1093,7 +1098,7 @@ do_cmdline(cmdline, getline, cookie, flags)
                msg_didany = FALSE; /* no output yet */
                msg_start();
                msg_scroll = TRUE;  /* put messages below each other */
-               ++no_wait_return;   /* dont wait for return until finished */
+               ++no_wait_return;   /* don't wait for return until finished */
                ++RedrawingDisabled;
                did_inc = TRUE;
            }
@@ -1142,7 +1147,7 @@ do_cmdline(cmdline, getline, cookie, flags)
             * If the command was typed, remember it for the ':' register.
             * Do this AFTER executing the command to make :@: work.
             */
-           if (getline_equal(getline, cookie, getexline)
+           if (getline_equal(fgetline, cookie, getexline)
                                                  && new_last_cmdline != NULL)
            {
                vim_free(last_cmdline);
@@ -1163,7 +1168,7 @@ do_cmdline(cmdline, getline, cookie, flags)
 #ifdef FEAT_EVAL
        /* reset did_emsg for a function that is not aborted by an error */
        if (did_emsg && !force_abort
-               && getline_equal(getline, cookie, get_func_line)
+               && getline_equal(fgetline, cookie, get_func_line)
                                              && !func_has_abort(real_cookie))
            did_emsg = FALSE;
 
@@ -1202,7 +1207,7 @@ do_cmdline(cmdline, getline, cookie, flags)
                    if (breakpoint != NULL)
                    {
                        *breakpoint = dbg_find_breakpoint(
-                               getline_equal(getline, cookie, getsourceline),
+                              getline_equal(fgetline, cookie, getsourceline),
                                                                        fname,
                           ((wcmd_T *)lines_ga.ga_data)[current_line].lnum-1);
                        *dbg_tick = debug_tick;
@@ -1295,9 +1300,16 @@ do_cmdline(cmdline, getline, cookie, flags)
                && cstack.cs_trylevel == 0
 #endif
            )
-           && !(did_emsg && used_getline
-                         && (getline_equal(getline, cookie, getexmodeline)
-                               || getline_equal(getline, cookie, getexline)))
+           && !(did_emsg
+#ifdef FEAT_EVAL
+               /* Keep going when inside try/catch, so that the error can be
+                * deal with, except when it is a syntax error, it may cause
+                * the :endtry to be missed. */
+               && (cstack.cs_trylevel == 0 || did_emsg_syntax)
+#endif
+               && used_getline
+                           && (getline_equal(fgetline, cookie, getexmodeline)
+                              || getline_equal(fgetline, cookie, getexline)))
            && (next_cmdline != NULL
 #ifdef FEAT_EVAL
                        || cstack.cs_idx >= 0
@@ -1305,6 +1317,7 @@ do_cmdline(cmdline, getline, cookie, flags)
                        || (flags & DOCMD_REPEAT)));
 
     vim_free(cmdline_copy);
+    did_emsg_syntax = FALSE;
 #ifdef FEAT_EVAL
     free_cmdlines(&lines_ga);
     ga_clear(&lines_ga);
@@ -1316,9 +1329,9 @@ do_cmdline(cmdline, getline, cookie, flags)
         * unclosed conditional.
         */
        if (!got_int && !did_throw
-               && ((getline_equal(getline, cookie, getsourceline)
-                       && !source_finished(getline, cookie))
-                   || (getline_equal(getline, cookie, get_func_line)
+               && ((getline_equal(fgetline, cookie, getsourceline)
+                       && !source_finished(fgetline, cookie))
+                   || (getline_equal(fgetline, cookie, get_func_line)
                                            && !func_has_ended(real_cookie))))
        {
            if (cstack.cs_flags[cstack.cs_idx] & CSF_TRY)
@@ -1354,7 +1367,7 @@ do_cmdline(cmdline, getline, cookie, flags)
     /* If a missing ":endtry", ":endwhile", ":endfor", or ":endif" or a memory
      * lack was reported above and the error message is to be converted to an
      * exception, do this now after rewinding the cstack. */
-    do_errthrow(&cstack, getline_equal(getline, cookie, get_func_line)
+    do_errthrow(&cstack, getline_equal(fgetline, cookie, get_func_line)
                                  ? (char_u *)"endfunction" : (char_u *)NULL);
 
     if (trylevel == 0)
@@ -1449,9 +1462,9 @@ do_cmdline(cmdline, getline, cookie, flags)
      */
     if (did_throw)
        need_rethrow = TRUE;
-    if ((getline_equal(getline, cookie, getsourceline)
+    if ((getline_equal(fgetline, cookie, getsourceline)
                && ex_nesting_level > source_level(real_cookie))
-           || (getline_equal(getline, cookie, get_func_line)
+           || (getline_equal(fgetline, cookie, get_func_line)
                && ex_nesting_level > func_level(real_cookie) + 1))
     {
        if (!did_throw)
@@ -1460,16 +1473,16 @@ do_cmdline(cmdline, getline, cookie, flags)
     else
     {
        /* When leaving a function, reduce nesting level. */
-       if (getline_equal(getline, cookie, get_func_line))
+       if (getline_equal(fgetline, cookie, get_func_line))
            --ex_nesting_level;
        /*
         * Go to debug mode when returning from a function in which we are
         * single-stepping.
         */
-       if ((getline_equal(getline, cookie, getsourceline)
-                   || getline_equal(getline, cookie, get_func_line))
+       if ((getline_equal(fgetline, cookie, getsourceline)
+                   || getline_equal(fgetline, cookie, get_func_line))
                && ex_nesting_level + 1 <= debug_break_level)
-           do_debug(getline_equal(getline, cookie, getsourceline)
+           do_debug(getline_equal(fgetline, cookie, getsourceline)
                    ? (char_u *)_("End of sourced file")
                    : (char_u *)_("End of function"));
     }
@@ -1520,7 +1533,9 @@ do_cmdline(cmdline, getline, cookie, flags)
        }
     }
 
-#ifndef FEAT_EVAL
+#ifdef FEAT_EVAL
+    did_endif = FALSE;  /* in case do_cmdline used recursively */
+#else
     /*
      * Reset if_level, in case a sourced script file contains more ":if" than
      * ":endif" (could be ":if x | foo | endif").
@@ -1719,12 +1734,16 @@ do_one_cmd(cmdlinep, sourcing,
     ++ex_nesting_level;
 #endif
 
-       /* when not editing the last file :q has to be typed twice */
+    /* When the last file has not been edited :q has to be typed twice. */
     if (quitmore
 #ifdef FEAT_EVAL
            /* avoid that a function call in 'statusline' does this */
            && !getline_equal(fgetline, cookie, get_func_line)
 #endif
+#ifdef FEAT_AUTOCMD
+           /* avoid that an autocommand, e.g. QuitPre, does this */
+           && !getline_equal(fgetline, cookie, getnextac)
+#endif
            )
        --quitmore;
 
@@ -2135,11 +2154,9 @@ do_one_cmd(cmdlinep, sourcing,
        {
            STRCPY(IObuff, _("E492: Not an editor command"));
            if (!sourcing)
-           {
-               STRCAT(IObuff, ": ");
-               STRNCAT(IObuff, *cmdlinep, 40);
-           }
+               append_command(*cmdlinep);
            errormsg = IObuff;
+           did_emsg_syntax = TRUE;
        }
        goto doend;
     }
@@ -2423,25 +2440,39 @@ do_one_cmd(cmdlinep, sourcing,
     if (       (ea.argt & REGSTR)
            && *ea.arg != NUL
 #ifdef FEAT_USR_CMDS
-           && valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
-                                                  && USER_CMDIDX(ea.cmdidx)))
            /* Do not allow register = for user commands */
            && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
-#else
-           && valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
 #endif
            && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
     {
-       ea.regname = *ea.arg++;
-#ifdef FEAT_EVAL
-       /* for '=' register: accept the rest of the line as an expression */
-       if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
+#ifndef FEAT_CLIPBOARD
+       /* check these explicitly for a more specific error message */
+       if (*ea.arg == '*' || *ea.arg == '+')
        {
-           set_expr_line(vim_strsave(ea.arg));
-           ea.arg += STRLEN(ea.arg);
+           errormsg = (char_u *)_(e_invalidreg);
+           goto doend;
        }
 #endif
-       ea.arg = skipwhite(ea.arg);
+       if (
+#ifdef FEAT_USR_CMDS
+           valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+                                                  && USER_CMDIDX(ea.cmdidx)))
+#else
+           valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
+#endif
+          )
+       {
+           ea.regname = *ea.arg++;
+#ifdef FEAT_EVAL
+           /* for '=' register: accept the rest of the line as an expression */
+           if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
+           {
+               set_expr_line(vim_strsave(ea.arg));
+               ea.arg += STRLEN(ea.arg);
+           }
+#endif
+           ea.arg = skipwhite(ea.arg);
+       }
     }
 
     /*
@@ -2580,6 +2611,7 @@ do_one_cmd(cmdlinep, sourcing,
            case CMD_unlet:
            case CMD_verbose:
            case CMD_vertical:
+           case CMD_wincmd:
                                break;
 
            default:            goto doend;
@@ -2618,7 +2650,8 @@ do_one_cmd(cmdlinep, sourcing,
            while (p > ea.arg && vim_iswhite(p[-1]))
                --p;
        }
-       ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & BUFUNL) != 0, FALSE);
+       ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & BUFUNL) != 0,
+                                                               FALSE, FALSE);
        if (ea.line2 < 0)           /* failed */
            goto doend;
        ea.addr_count = 1;
@@ -2692,8 +2725,7 @@ doend:
                STRCPY(IObuff, errormsg);
                errormsg = IObuff;
            }
-           STRCAT(errormsg, ": ");
-           STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1);
+           append_command(*cmdlinep);
        }
        emsg(errormsg);
     }
@@ -2781,6 +2813,42 @@ checkforcmd(pp, cmd, len)
 }
 
 /*
+ * Append "cmd" to the error message in IObuff.
+ * Takes care of limiting the length and handling 0xa0, which would be
+ * invisible otherwise.
+ */
+    static void
+append_command(cmd)
+    char_u *cmd;
+{
+    char_u *s = cmd;
+    char_u *d;
+
+    STRCAT(IObuff, ": ");
+    d = IObuff + STRLEN(IObuff);
+    while (*s != NUL && d - IObuff < IOSIZE - 7)
+    {
+       if (
+#ifdef FEAT_MBYTE
+               enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) :
+#endif
+               *s == 0xa0)
+       {
+           s +=
+#ifdef FEAT_MBYTE
+               enc_utf8 ? 2 :
+#endif
+               1;
+           STRCPY(d, "<a0>");
+           d += 4;
+       }
+       else
+           MB_COPY_CHAR(s, d);
+    }
+    *d = NUL;
+}
+
+/*
  * Find an Ex command by its name, either built-in or user.
  * Start of the name can be found at eap->cmd.
  * Returns pointer to char after the command name.
@@ -2871,8 +2939,10 @@ find_command(eap, full)
            }
 
 #ifdef FEAT_USR_CMDS
-       /* Look for a user defined command as a last resort */
-       if (eap->cmdidx == CMD_SIZE && *eap->cmd >= 'A' && *eap->cmd <= 'Z')
+       /* Look for a user defined command as a last resort.  Let ":Print" be
+        * overruled by a user defined command. */
+       if ((eap->cmdidx == CMD_SIZE || eap->cmdidx == CMD_Print)
+               && *eap->cmd >= 'A' && *eap->cmd <= 'Z')
        {
            /* User defined commands may contain digits. */
            while (ASCII_ISALNUM(*p))
@@ -3050,7 +3120,7 @@ modifier_len(cmd)
        for (j = 0; p[j] != NUL; ++j)
            if (p[j] != cmdmods[i].name[j])
                break;
-       if (!isalpha(p[j]) && j >= cmdmods[i].minlen
+       if (!ASCII_ISALPHA(p[j]) && j >= cmdmods[i].minlen
                                        && (p == cmd || cmdmods[i].has_count))
            return j + (int)(p - cmd);
     }
@@ -3182,6 +3252,9 @@ set_one_cmd_context(xp, buff)
        /* check for non-alpha command */
        if (p == cmd && vim_strchr((char_u *)"@*!=><&~#", *p) != NULL)
            ++p;
+       /* for python 3.x: ":py3*" commands completion */
+       if (cmd[0] == 'p' && cmd[1] == 'y' && p == cmd + 2 && *p == '3')
+           ++p;
        len = (int)(p - cmd);
 
        if (len == 0)
@@ -3341,12 +3414,23 @@ set_one_cmd_context(xp, buff)
        return NULL;
 
     /* Find start of last argument (argument just before cursor): */
-    p = buff + STRLEN(buff);
-    while (p != arg && *p != ' ' && *p != TAB)
-       p--;
-    if (*p == ' ' || *p == TAB)
-       p++;
+    p = buff;
     xp->xp_pattern = p;
+    len = (int)STRLEN(buff);
+    while (*p && p < buff + len)
+    {
+       if (*p == ' ' || *p == TAB)
+       {
+           /* argument starts after a space */
+           xp->xp_pattern = ++p;
+       }
+       else
+       {
+           if (*p == '\\' && *(p + 1) != NUL)
+               ++p; /* skip over escaped character */
+           mb_ptr_adv(p);
+       }
+    }
 
     if (ea.argt & XFILE)
     {
@@ -3455,6 +3539,23 @@ set_one_cmd_context(xp, buff)
 #endif
            }
        }
+#if defined(FEAT_CMDL_COMPL)
+       /* Check for user names */
+       if (*xp->xp_pattern == '~')
+       {
+           for (p = xp->xp_pattern + 1; *p != NUL && *p != '/'; ++p)
+               ;
+           /* Complete ~user only if it partially matches a user name.
+            * A full match ~user<Tab> will be replaced by user's home
+            * directory i.e. something like ~user<Tab> -> /home/user/ */
+           if (*p == NUL && p > xp->xp_pattern + 1
+                                      && match_user(xp->xp_pattern + 1) == 1)
+           {
+               xp->xp_context = EXPAND_USER;
+               ++xp->xp_pattern;
+           }
+       }
+#endif
     }
 
 /*
@@ -3465,7 +3566,8 @@ set_one_cmd_context(xp, buff)
        case CMD_find:
        case CMD_sfind:
        case CMD_tabfind:
-           xp->xp_context = EXPAND_FILES_IN_PATH;
+           if (xp->xp_context == EXPAND_FILES)
+               xp->xp_context = EXPAND_FILES_IN_PATH;
            break;
        case CMD_cd:
        case CMD_chdir:
@@ -3501,6 +3603,7 @@ set_one_cmd_context(xp, buff)
        case CMD_sandbox:
        case CMD_silent:
        case CMD_tab:
+       case CMD_tabdo:
        case CMD_topleft:
        case CMD_verbose:
        case CMD_vertical:
@@ -3771,8 +3874,17 @@ set_one_cmd_context(xp, buff)
                    if (compl == EXPAND_MAPPINGS)
                        return set_context_in_map_cmd(xp, (char_u *)"map",
                                         arg, forceit, FALSE, FALSE, CMD_map);
-                   while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
-                       arg = xp->xp_pattern + 1;
+                   /* Find start of last argument. */
+                   p = arg;
+                   while (*p)
+                   {
+                       if (*p == ' ')
+                           /* argument starts after a space */
+                           arg = p + 1;
+                       else if (*p == '\\' && *(p + 1) != NUL)
+                           ++p; /* skip over escaped character */
+                       mb_ptr_adv(p);
+                   }
                    xp->xp_pattern = arg;
                }
                xp->xp_context = compl;
@@ -3786,6 +3898,8 @@ set_one_cmd_context(xp, buff)
        case CMD_imap:      case CMD_inoremap:
        case CMD_cmap:      case CMD_cnoremap:
        case CMD_lmap:      case CMD_lnoremap:
+       case CMD_smap:      case CMD_snoremap:
+       case CMD_xmap:      case CMD_xnoremap:
            return set_context_in_map_cmd(xp, cmd, arg, forceit,
                                                     FALSE, FALSE, ea.cmdidx);
        case CMD_unmap:
@@ -3795,6 +3909,8 @@ set_one_cmd_context(xp, buff)
        case CMD_iunmap:
        case CMD_cunmap:
        case CMD_lunmap:
+       case CMD_sunmap:
+       case CMD_xunmap:
            return set_context_in_map_cmd(xp, cmd, arg, forceit,
                                                      FALSE, TRUE, ea.cmdidx);
        case CMD_abbreviate:    case CMD_noreabbrev:
@@ -3843,13 +3959,24 @@ set_one_cmd_context(xp, buff)
 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
        && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
        case CMD_language:
-           if (*skiptowhite(arg) == NUL)
+           p = skiptowhite(arg);
+           if (*p == NUL)
            {
                xp->xp_context = EXPAND_LANGUAGE;
                xp->xp_pattern = arg;
            }
            else
-               xp->xp_context = EXPAND_NOTHING;
+           {
+               if ( STRNCMP(arg, "messages", p - arg) == 0
+                 || STRNCMP(arg, "ctype", p - arg) == 0
+                 || STRNCMP(arg, "time", p - arg) == 0)
+               {
+                   xp->xp_context = EXPAND_LOCALES;
+                   xp->xp_pattern = skipwhite(p);
+               }
+               else
+                   xp->xp_context = EXPAND_NOTHING;
+           }
            break;
 #endif
 #if defined(FEAT_PROFILE)
@@ -3859,7 +3986,21 @@ set_one_cmd_context(xp, buff)
 #endif
        case CMD_behave:
            xp->xp_context = EXPAND_BEHAVE;
+           xp->xp_pattern = arg;
+           break;
+
+#if defined(FEAT_CMDHIST)
+       case CMD_history:
+           xp->xp_context = EXPAND_HISTORY;
+           xp->xp_pattern = arg;
+           break;
+#endif
+#if defined(FEAT_PROFILE)
+       case CMD_syntime:
+           xp->xp_context = EXPAND_SYNTIME;
+           xp->xp_pattern = arg;
            break;
+#endif
 
 #endif /* FEAT_CMDL_COMPL */
 
@@ -4520,12 +4661,14 @@ expand_filename(eap, cmdlinep, errormsgp)
                else /* n == 2 */
                {
                    expand_T    xpc;
+                   int         options = WILD_LIST_NOTFOUND|WILD_ADD_SLASH;
 
                    ExpandInit(&xpc);
                    xpc.xp_context = EXPAND_FILES;
+                   if (p_wic)
+                       options += WILD_ICASE;
                    p = ExpandOne(&xpc, eap->arg, NULL,
-                                           WILD_LIST_NOTFOUND|WILD_ADD_SLASH,
-                                                  WILD_EXPAND_FREE);
+                                                  options, WILD_EXPAND_FREE);
                    if (p == NULL)
                        return FAIL;
                }
@@ -4777,12 +4920,10 @@ getargopt(eap)
 #ifdef FEAT_MBYTE
     else if (STRNCMP(arg, "enc", 3) == 0)
     {
-       arg += 3;
-       pp = &eap->force_enc;
-    }
-    else if (STRNCMP(arg, "encoding", 8) == 0)
-    {
-       arg += 8;
+       if (STRNCMP(arg, "encoding", 8) == 0)
+           arg += 8;
+       else
+           arg += 3;
        pp = &eap->force_enc;
     }
     else if (STRNCMP(arg, "bad", 3) == 0)
@@ -4894,7 +5035,7 @@ ex_abclear(eap)
     map_clear(eap->cmd, eap->arg, TRUE, TRUE);
 }
 
-#ifdef FEAT_AUTOCMD
+#if defined(FEAT_AUTOCMD) || defined(PROTO)
     static void
 ex_autocmd(eap)
     exarg_T    *eap;
@@ -4921,8 +5062,12 @@ ex_autocmd(eap)
 ex_doautocmd(eap)
     exarg_T    *eap;
 {
-    (void)do_doautocmd(eap->arg, TRUE);
-    do_modelines(0);
+    char_u     *arg = eap->arg;
+    int                call_do_modelines = check_nomodeline(&arg);
+
+    (void)do_doautocmd(arg, TRUE);
+    if (call_do_modelines)  /* Only when there is no <nomodeline>. */
+       do_modelines(0);
 }
 #endif
 
@@ -5087,12 +5232,14 @@ check_more(message, forceit)
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
            if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
            {
-               char_u  buff[IOSIZE];
+               char_u  buff[DIALOG_MSG_SIZE];
 
                if (n == 1)
-                   STRCPY(buff, _("1 more file to edit.  Quit anyway?"));
+                   vim_strncpy(buff,
+                           (char_u *)_("1 more file to edit.  Quit anyway?"),
+                                                        DIALOG_MSG_SIZE - 1);
                else
-                   vim_snprintf((char *)buff, IOSIZE,
+                   vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
                              _("%d more files to edit.  Quit anyway?"), n);
                if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
                    return OK;
@@ -5250,7 +5397,9 @@ fail:
 #endif
     return FAIL;
 }
+#endif
 
+#if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
 /*
  * List of names for completion for ":command" with the EXPAND_ flag.
  * Must be alphabetical for completion.
@@ -5262,8 +5411,11 @@ static struct
 } command_complete[] =
 {
     {EXPAND_AUGROUP, "augroup"},
+    {EXPAND_BEHAVE, "behave"},
     {EXPAND_BUFFERS, "buffer"},
+    {EXPAND_COLORS, "color"},
     {EXPAND_COMMANDS, "command"},
+    {EXPAND_COMPILER, "compiler"},
 #if defined(FEAT_CSCOPE)
     {EXPAND_CSCOPE, "cscope"},
 #endif
@@ -5276,13 +5428,24 @@ static struct
     {EXPAND_EVENTS, "event"},
     {EXPAND_EXPRESSION, "expression"},
     {EXPAND_FILES, "file"},
+    {EXPAND_FILES_IN_PATH, "file_in_path"},
     {EXPAND_FILETYPE, "filetype"},
     {EXPAND_FUNCTIONS, "function"},
     {EXPAND_HELP, "help"},
     {EXPAND_HIGHLIGHT, "highlight"},
+#if defined(FEAT_CMDHIST)
+    {EXPAND_HISTORY, "history"},
+#endif
+#if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+       && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+    {EXPAND_LOCALES, "locale"},
+#endif
     {EXPAND_MAPPINGS, "mapping"},
     {EXPAND_MENUS, "menu"},
     {EXPAND_OWNSYNTAX, "syntax"},
+#if defined(FEAT_PROFILE)
+    {EXPAND_SYNTIME, "syntime"},
+#endif
     {EXPAND_SETTINGS, "option"},
     {EXPAND_SHELLCMD, "shellcmd"},
 #if defined(FEAT_SIGNS)
@@ -5290,10 +5453,13 @@ static struct
 #endif
     {EXPAND_TAGS, "tag"},
     {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
+    {EXPAND_USER, "user"},
     {EXPAND_USER_VARS, "var"},
     {0, NULL}
 };
+#endif
 
+#if defined(FEAT_USR_CMDS) || defined(PROTO)
     static void
 uc_list(name, name_len)
     char_u     *name;
@@ -5587,6 +5753,7 @@ ex_command(eap)
     int            compl = EXPAND_NOTHING;
     char_u  *compl_arg = NULL;
     int            has_attr = (eap->arg[0] == '-');
+    int            name_len;
 
     p = eap->arg;
 
@@ -5612,6 +5779,7 @@ ex_command(eap)
        return;
     }
     end = p;
+    name_len = (int)(end - name);
 
     /* If there is nothing after the name, and no attributes were specified,
      * we are listing commands
@@ -5626,6 +5794,13 @@ ex_command(eap)
        EMSG(_("E183: User defined commands must start with an uppercase letter"));
        return;
     }
+    else if ((name_len == 1 && *name == 'X')
+         || (name_len <= 4
+                 && STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0))
+    {
+       EMSG(_("E841: Reserved name, cannot be used for user defined command"));
+       return;
+    }
     else
        uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
                                                                eap->forceit);
@@ -5750,8 +5925,14 @@ uc_split_args(arg, lenp)
        }
        else
        {
+#ifdef FEAT_MBYTE
+           int charlen = (*mb_ptr2len)(p);
+           len += charlen;
+           p += charlen;
+#else
            ++len;
            ++p;
+#endif
        }
     }
 
@@ -5794,7 +5975,7 @@ uc_split_args(arg, lenp)
        }
        else
        {
-           *q++ = *p++;
+           MB_COPY_CHAR(p, q);
        }
     }
     *q++ = '"';
@@ -5888,7 +6069,14 @@ uc_check_code(code, len, buf, cmd, eap, split_buf, split_len)
            result = STRLEN(eap->arg) + 2;
            for (p = eap->arg; *p; ++p)
            {
-               if (*p == '\\' || *p == '"')
+#ifdef  FEAT_MBYTE
+               if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
+                   /* DBCS can contain \ in a trail byte, skip the
+                    * double-byte character. */
+                   ++p;
+               else
+#endif
+                    if (*p == '\\' || *p == '"')
                    ++result;
            }
 
@@ -5897,7 +6085,14 @@ uc_check_code(code, len, buf, cmd, eap, split_buf, split_len)
                *buf++ = '"';
                for (p = eap->arg; *p; ++p)
                {
-                   if (*p == '\\' || *p == '"')
+#ifdef  FEAT_MBYTE
+                   if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
+                       /* DBCS can contain \ in a trail byte, copy the
+                        * double-byte character to avoid escaping. */
+                       *buf++ = *p++;
+                   else
+#endif
+                        if (*p == '\\' || *p == '"')
                        *buf++ = '\\';
                    *buf++ = *p;
                }
@@ -6039,15 +6234,17 @@ do_ucmd(eap)
                end = vim_strchr(start + 1, '>');
            if (buf != NULL)
            {
-               ksp = vim_strchr(p, K_SPECIAL);
-               if (ksp != NULL && (start == NULL || ksp < start || end == NULL)
+               for (ksp = p; *ksp != NUL && *ksp != K_SPECIAL; ++ksp)
+                   ;
+               if (*ksp == K_SPECIAL
+                       && (start == NULL || ksp < start || end == NULL)
                        && ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER)
 # ifdef FEAT_GUI
                            || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI)
 # endif
                            ))
                {
-                   /* K_SPECIAL han been put in the buffer as K_SPECIAL
+                   /* K_SPECIAL has been put in the buffer as K_SPECIAL
                     * KS_SPECIAL KE_FILLER, like for mappings, but
                     * do_cmdline() doesn't handle that, so convert it back.
                     * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
@@ -6207,10 +6404,12 @@ parse_compl_arg(value, vallen, complp, argt, compl_arg)
     int                vallen;
     int                *complp;
     long       *argt;
-    char_u     **compl_arg;
+    char_u     **compl_arg UNUSED;
 {
     char_u     *arg = NULL;
+# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
     size_t     arglen = 0;
+# endif
     int                i;
     int                valend = vallen;
 
@@ -6220,7 +6419,9 @@ parse_compl_arg(value, vallen, complp, argt, compl_arg)
        if (value[i] == ',')
        {
            arg = &value[i + 1];
+# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
            arglen = vallen - i - 1;
+# endif
            valend = i;
            break;
        }
@@ -6302,7 +6503,7 @@ ex_colorscheme(eap)
 #endif
     }
     else if (load_colors(eap->arg) == FAIL)
-       EMSG2(_("E185: Cannot find color scheme %s"), eap->arg);
+       EMSG2(_("E185: Cannot find color scheme '%s'"), eap->arg);
 }
 
     static void
@@ -6347,7 +6548,10 @@ ex_quit(eap)
        return;
     }
 #ifdef FEAT_AUTOCMD
-    if (curbuf_locked())
+    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+    /* Refuse to quit when locked or when the buffer in the last window is
+     * being closed (can only happen in autocommands). */
+    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
        return;
 #endif
 
@@ -6419,7 +6623,10 @@ ex_quit_all(eap)
        return;
     }
 #ifdef FEAT_AUTOCMD
-    if (curbuf_locked())
+    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+    /* Refuse to quit when locked or when the buffer in the last window is
+     * being closed (can only happen in autocommands). */
+    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
        return;
 #endif
 
@@ -6439,7 +6646,7 @@ ex_close(eap)
 {
 # ifdef FEAT_CMDWIN
     if (cmdwin_type != 0)
-       cmdwin_result = K_IGNORE;
+       cmdwin_result = Ctrl_C;
     else
 # endif
        if (!text_locked()
@@ -6755,7 +6962,10 @@ ex_exit(eap)
        return;
     }
 #ifdef FEAT_AUTOCMD
-    if (curbuf_locked())
+    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+    /* Refuse to quit when locked or when the buffer in the last window is
+     * being closed (can only happen in autocommands). */
+    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
        return;
 #endif
 
@@ -6782,7 +6992,7 @@ ex_exit(eap)
 # ifdef FEAT_GUI
        need_mouse_correct = TRUE;
 # endif
-       /* quit current window, may free buffer */
+       /* Quit current window, may free the buffer. */
        win_close(curwin, !P_HID(curwin->w_buffer));
 #endif
     }
@@ -6897,9 +7107,7 @@ handle_drop(filec, filev, split)
 # ifdef FEAT_WINDOWS
        if (win_split(0, 0) == FAIL)
            return;
-#  ifdef FEAT_SCROLLBIND
-       curwin->w_p_scb = FALSE;
-#  endif
+       RESET_BINDING(curwin);
 
        /* When splitting the window, create a new alist.  Otherwise the
         * existing one is overwritten. */
@@ -7026,7 +7234,7 @@ alist_expand(fnum_list, fnum_len)
        old_arg_count = GARGCOUNT;
        if (expand_wildcards(old_arg_count, old_arg_files,
                    &new_arg_file_count, &new_arg_files,
-                   EW_FILE|EW_NOTFOUND|EW_ADDSLASH) == OK
+                   EW_FILE|EW_NOTFOUND|EW_ADDSLASH|EW_NOERROR) == OK
                && new_arg_file_count > 0)
        {
            alist_set(&global_alist, new_arg_file_count, new_arg_files,
@@ -7299,7 +7507,9 @@ ex_splitview(eap)
                || cmdmod.browse
 #  endif
           )
-           curwin->w_p_scb = FALSE;
+       {
+           RESET_BINDING(curwin);
+       }
        else
            do_check_scrollbind(FALSE);
 # endif
@@ -7364,7 +7574,42 @@ ex_tabnext(eap)
 ex_tabmove(eap)
     exarg_T    *eap;
 {
-    tabpage_move(eap->addr_count == 0 ? 9999 : (int)eap->line2);
+    int tab_number = 9999;
+
+    if (eap->arg && *eap->arg != NUL)
+    {
+       char_u *p = eap->arg;
+       int    relative = 0; /* argument +N/-N means: move N places to the
+                             * right/left relative to the current position. */
+
+       if (*eap->arg == '-')
+       {
+           relative = -1;
+           p = eap->arg + 1;
+       }
+       else if (*eap->arg == '+')
+       {
+           relative = 1;
+           p = eap->arg + 1;
+       }
+       else
+           p = eap->arg;
+
+       if (p == skipdigits(p))
+       {
+           /* No numbers as argument. */
+           eap->errmsg = e_invarg;
+           return;
+       }
+
+       tab_number = getdigits(&p);
+       if (relative != 0)
+           tab_number = tab_number * relative + tabpage_index(curtab) - 1;;
+    }
+    else if (eap->addr_count != 0)
+       tab_number = eap->line2;
+
+    tabpage_move(tab_number);
 }
 
 /*
@@ -7400,7 +7645,7 @@ ex_tabs(eap)
            msg_putchar(bufIsChanged(wp->w_buffer) ? '+' : ' ');
            msg_putchar(' ');
            if (buf_spname(wp->w_buffer) != NULL)
-               STRCPY(IObuff, buf_spname(wp->w_buffer));
+               vim_strncpy(IObuff, buf_spname(wp->w_buffer), IOSIZE - 1);
            else
                home_replace(wp->w_buffer, wp->w_buffer->b_fname,
                                                        IObuff, IOSIZE, TRUE);
@@ -7535,7 +7780,7 @@ ex_open(eap)
                curwin->w_cursor.col = (colnr_T)(regmatch.startp[0] - p);
            else
                EMSG(_(e_nomatch));
-           vim_free(regmatch.regprog);
+           vim_regfree(regmatch.regprog);
        }
        /* Move to the NUL, ignore any other arguments. */
        eap->arg += STRLEN(eap->arg);
@@ -7953,6 +8198,37 @@ free_cd_dir()
 }
 #endif
 
+/*
+ * Deal with the side effects of changing the current directory.
+ * When "local" is TRUE then this was after an ":lcd" command.
+ */
+    void
+post_chdir(local)
+    int                local;
+{
+    vim_free(curwin->w_localdir);
+    if (local)
+    {
+       /* If still in global directory, need to remember current
+        * directory as global directory. */
+       if (globaldir == NULL && prev_dir != NULL)
+           globaldir = vim_strsave(prev_dir);
+       /* Remember this local directory for the window. */
+       if (mch_dirname(NameBuff, MAXPATHL) == OK)
+           curwin->w_localdir = vim_strsave(NameBuff);
+    }
+    else
+    {
+       /* We are now in the global directory, no need to remember its
+        * name. */
+       vim_free(globaldir);
+       globaldir = NULL;
+       curwin->w_localdir = NULL;
+    }
+
+    shorten_fnames(TRUE);
+}
+
 
 /*
  * ":cd", ":lcd", ":chdir" and ":lchdir".
@@ -8024,27 +8300,7 @@ ex_cd(eap)
            EMSG(_(e_failed));
        else
        {
-           vim_free(curwin->w_localdir);
-           if (eap->cmdidx == CMD_lcd || eap->cmdidx == CMD_lchdir)
-           {
-               /* If still in global directory, need to remember current
-                * directory as global directory. */
-               if (globaldir == NULL && prev_dir != NULL)
-                   globaldir = vim_strsave(prev_dir);
-               /* Remember this local directory for the window. */
-               if (mch_dirname(NameBuff, MAXPATHL) == OK)
-                   curwin->w_localdir = vim_strsave(NameBuff);
-           }
-           else
-           {
-               /* We are now in the global directory, no need to remember its
-                * name. */
-               vim_free(globaldir);
-               globaldir = NULL;
-               curwin->w_localdir = NULL;
-           }
-
-           shorten_fnames(TRUE);
+           post_chdir(eap->cmdidx == CMD_lcd || eap->cmdidx == CMD_lchdir);
 
            /* Echo the new current directory if the command was typed. */
            if (KeyTyped || p_verbose >= 5)
@@ -8122,6 +8378,12 @@ do_sleep(msec)
     {
        ui_delay(msec - done > 1000L ? 1000L : msec - done, TRUE);
        ui_breakcheck();
+#ifdef FEAT_NETBEANS_INTG
+       /* Process the netbeans messages that may have been received in the
+        * call to ui_breakcheck() when the GUI is in use. This may occur when
+        * running a test case. */
+       netbeans_parse_messages();
+#endif
     }
 }
 
@@ -8193,7 +8455,7 @@ ex_wincmd(eap)
     p = skipwhite(p);
     if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
        EMSG(_(e_invarg));
-    else
+    else if (!eap->skip)
     {
        /* Pass flags on for ":vertical wincmd ]". */
        postponed_split_flags = cmdmod.split;
@@ -8307,11 +8569,13 @@ ex_operators(eap)
            break;
 
        default:    /* CMD_rshift or CMD_lshift */
-           if ((eap->cmdidx == CMD_rshift)
+           if (
 #ifdef FEAT_RIGHTLEFT
-                                   ^ curwin->w_p_rl
+               (eap->cmdidx == CMD_rshift) ^ curwin->w_p_rl
+#else
+               eap->cmdidx == CMD_rshift
 #endif
-                                                   )
+                                               )
                oa.op_type = OP_RSHIFT;
            else
                oa.op_type = OP_LSHIFT;
@@ -8428,7 +8692,7 @@ ex_join(eap)
        }
        ++eap->line2;
     }
-    (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE);
+    (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE);
     beginline(BL_WHITE | BL_FIX);
     ex_may_print(eap);
 }
@@ -8717,6 +8981,9 @@ ex_redraw(eap)
     msg_didout = FALSE;
     msg_col = 0;
 
+    /* No need to wait after an intentional redraw. */
+    need_wait_return = FALSE;
+
     out_flush();
 }
 
@@ -8907,35 +9174,42 @@ ex_mkrc(eap)
                failed = TRUE;
            if (eap->cmdidx == CMD_mksession)
            {
-               char_u dirnow[MAXPATHL];        /* current directory */
+               char_u *dirnow;  /* current directory */
 
-               /*
-                * Change to session file's dir.
-                */
-               if (mch_dirname(dirnow, MAXPATHL) == FAIL
-                                           || mch_chdir((char *)dirnow) != 0)
-                   *dirnow = NUL;
-               if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
-               {
-                   if (vim_chdirfile(fname) == OK)
-                       shorten_fnames(TRUE);
-               }
-               else if (*dirnow != NUL
-                       && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+               dirnow = alloc(MAXPATHL);
+               if (dirnow == NULL)
+                   failed = TRUE;
+               else
                {
-                   if (mch_chdir((char *)globaldir) == 0)
-                       shorten_fnames(TRUE);
-               }
+                   /*
+                    * Change to session file's dir.
+                    */
+                   if (mch_dirname(dirnow, MAXPATHL) == FAIL
+                                           || mch_chdir((char *)dirnow) != 0)
+                       *dirnow = NUL;
+                   if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
+                   {
+                       if (vim_chdirfile(fname) == OK)
+                           shorten_fnames(TRUE);
+                   }
+                   else if (*dirnow != NUL
+                          && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+                   {
+                       if (mch_chdir((char *)globaldir) == 0)
+                           shorten_fnames(TRUE);
+                   }
 
-               failed |= (makeopens(fd, dirnow) == FAIL);
+                   failed |= (makeopens(fd, dirnow) == FAIL);
 
-               /* restore original dir */
-               if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
+                   /* restore original dir */
+                   if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
                        || ((ssop_flags & SSOP_CURDIR) && globaldir != NULL)))
-               {
-                   if (mch_chdir((char *)dirnow) != 0)
-                       EMSG(_(e_prev_dir));
-                   shorten_fnames(TRUE);
+                   {
+                       if (mch_chdir((char *)dirnow) != 0)
+                           EMSG(_(e_prev_dir));
+                       shorten_fnames(TRUE);
+                   }
+                   vim_free(dirnow);
                }
            }
            else
@@ -8966,10 +9240,15 @@ ex_mkrc(eap)
        else if (eap->cmdidx == CMD_mksession)
        {
            /* successful session write - set this_session var */
-           char_u      tbuf[MAXPATHL];
+           char_u      *tbuf;
 
-           if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
-               set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
+           tbuf = alloc(MAXPATHL);
+           if (tbuf != NULL)
+           {
+               if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
+                   set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
+               vim_free(tbuf);
+           }
        }
 #endif
 #ifdef MKSESSION_NL
@@ -9295,7 +9574,7 @@ exec_normal_cmd(cmd, remap, silent)
                                                                  && !got_int)
     {
        update_topline_cursor();
-       normal_cmd(&oa, FALSE); /* execute a Normal mode cmd */
+       normal_cmd(&oa, TRUE);  /* execute a Normal mode cmd */
     }
 }
 #endif
@@ -9393,7 +9672,7 @@ ex_findpat(eap)
 ex_ptag(eap)
     exarg_T    *eap;
 {
-    g_do_tagpreview = p_pvh;
+    g_do_tagpreview = p_pvh;  /* will be reset to 0 in ex_tag_cmd() */
     ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
 }
 
@@ -9525,17 +9804,23 @@ find_cmdline_var(src, usedlen)
 #define SPEC_CFILE  4
                    "<sfile>",          /* ":so" file name */
 #define SPEC_SFILE  5
+                   "<slnum>",          /* ":so" file line number */
+#define SPEC_SLNUM  6
 #ifdef FEAT_AUTOCMD
                    "<afile>",          /* autocommand file name */
-# define SPEC_AFILE 6
+# define SPEC_AFILE 7
                    "<abuf>",           /* autocommand buffer number */
-# define SPEC_ABUF  7
+# define SPEC_ABUF  8
                    "<amatch>",         /* autocommand match name */
-# define SPEC_AMATCH 8
+# define SPEC_AMATCH 9
 #endif
 #ifdef FEAT_CLIENTSERVER
                    "<client>"
-# define SPEC_CLIENT 9
+# ifdef FEAT_AUTOCMD
+#  define SPEC_CLIENT 10
+# else
+#  define SPEC_CLIENT 7
+# endif
 #endif
     };
 
@@ -9560,6 +9845,7 @@ find_cmdline_var(src, usedlen)
  *       '<cWORD>' to WORD under the cursor
  *       '<cfile>' to path name under the cursor
  *       '<sfile>' to sourced file name
+ *       '<slnum>' to sourced file line number
  *       '<afile>' to file name for autocommand
  *       '<abuf>'  to buffer number for autocommand
  *       '<amatch>' to matching name for autocommand
@@ -9591,10 +9877,7 @@ eval_vars(src, srcstart, usedlen, lnump, errormsg, escaped)
 #ifdef FEAT_MODIFY_FNAME
     int                skip_mod = FALSE;
 #endif
-
-#if defined(FEAT_AUTOCMD) || defined(FEAT_CLIENTSERVER)
     char_u     strbuf[30];
-#endif
 
     *errormsg = NULL;
     if (escaped != NULL)
@@ -9653,14 +9936,7 @@ eval_vars(src, srcstart, usedlen, lnump, errormsg, escaped)
                    valid = 0;      /* Must have ":p:h" to be valid */
                }
                else
-#ifdef RISCOS
-                   /* Always use the full path for RISC OS if possible. */
-                   result = curbuf->b_ffname;
-                   if (result == NULL)
-                       result = curbuf->b_fname;
-#else
                    result = curbuf->b_fname;
-#endif
                break;
 
        case SPEC_HASH:         /* '#' or "#99": alternate file */
@@ -9783,6 +10059,15 @@ eval_vars(src, srcstart, usedlen, lnump, errormsg, escaped)
                    return NULL;
                }
                break;
+       case SPEC_SLNUM:        /* line in file for ":so" command */
+               if (sourcing_name == NULL || sourcing_lnum == 0)
+               {
+                   *errormsg = (char_u *)_("E842: no line number to use for \"<slnum>\"");
+                   return NULL;
+               }
+               sprintf((char *)strbuf, "%ld", (long)sourcing_lnum);
+               result = strbuf;
+               break;
 #if defined(FEAT_CLIENTSERVER)
        case SPEC_CLIENT:       /* Source of last submitted input */
                sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
@@ -9796,11 +10081,7 @@ eval_vars(src, srcstart, usedlen, lnump, errormsg, escaped)
        if (src[*usedlen] == '<')       /* remove the file name extension */
        {
            ++*usedlen;
-#ifdef RISCOS
-           if ((s = vim_strrchr(result, '/')) != NULL && s >= gettail(result))
-#else
            if ((s = vim_strrchr(result, '.')) != NULL && s >= gettail(result))
-#endif
                resultlen = (int)(s - result);
        }
 #ifdef FEAT_MODIFY_FNAME
@@ -10593,24 +10874,24 @@ put_view(fd, wp, add_edit, flagp, current_arg_idx)
            {
                if (fprintf(fd,
                          "let s:c = %ld - ((%ld * winwidth(0) + %ld) / %ld)",
-                           (long)wp->w_cursor.col,
-                           (long)(wp->w_cursor.col - wp->w_leftcol),
+                           (long)wp->w_virtcol + 1,
+                           (long)(wp->w_virtcol - wp->w_leftcol),
                            (long)wp->w_width / 2, (long)wp->w_width) < 0
                        || put_eol(fd) == FAIL
                        || put_line(fd, "if s:c > 0") == FAIL
                        || fprintf(fd,
-                           "  exe 'normal! 0' . s:c . 'lzs' . (%ld - s:c) . 'l'",
-                           (long)wp->w_cursor.col) < 0
+                           "  exe 'normal! ' . s:c . '|zs' . %ld . '|'",
+                           (long)wp->w_virtcol + 1) < 0
                        || put_eol(fd) == FAIL
                        || put_line(fd, "else") == FAIL
-                       || fprintf(fd, "  normal! 0%dl", wp->w_cursor.col) < 0
+                       || fprintf(fd, "  normal! 0%d|", wp->w_virtcol + 1) < 0
                        || put_eol(fd) == FAIL
                        || put_line(fd, "endif") == FAIL)
                    return FAIL;
            }
            else
            {
-               if (fprintf(fd, "normal! 0%dl", wp->w_cursor.col) < 0
+               if (fprintf(fd, "normal! 0%d|", wp->w_virtcol + 1) < 0
                        || put_eol(fd) == FAIL)
                    return FAIL;
            }
@@ -10645,7 +10926,7 @@ ses_arglist(fd, cmd, gap, fullname, flagp)
     unsigned   *flagp;
 {
     int                i;
-    char_u     buf[MAXPATHL];
+    char_u     *buf = NULL;
     char_u     *s;
 
     if (gap->ga_len == 0)
@@ -10660,11 +10941,19 @@ ses_arglist(fd, cmd, gap, fullname, flagp)
        {
            if (fullname)
            {
-               (void)vim_FullName(s, buf, MAXPATHL, FALSE);
-               s = buf;
+               buf = alloc(MAXPATHL);
+               if (buf != NULL)
+               {
+                   (void)vim_FullName(s, buf, MAXPATHL, FALSE);
+                   s = buf;
+               }
            }
            if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
+           {
+               vim_free(buf);
                return FAIL;
+           }
+           vim_free(buf);
        }
     }
     return put_eol(fd);
@@ -10707,7 +10996,7 @@ ses_fname(fd, buf, flagp)
  * Write a file name to the session file.
  * Takes care of the "slash" option in 'sessionoptions' and escapes special
  * characters.
- * Returns FAIL if writing fails.
+ * Returns FAIL if writing fails or out of memory.
  */
     static int
 ses_put_fname(fd, name, flagp)
@@ -10716,49 +11005,32 @@ ses_put_fname(fd, name, flagp)
     unsigned   *flagp;
 {
     char_u     *sname;
+    char_u     *p;
     int                retval = OK;
-    int                c;
 
     sname = home_replace_save(NULL, name);
-    if (sname != NULL)
-       name = sname;
-    while (*name != NUL)
-    {
-#ifdef FEAT_MBYTE
-       {
-           int l;
+    if (sname == NULL)
+       return FAIL;
 
-           if (has_mbyte && (l = (*mb_ptr2len)(name)) > 1)
-           {
-               /* copy a multibyte char */
-               while (--l >= 0)
-               {
-                   if (putc(*name, fd) != *name)
-                       retval = FAIL;
-                   ++name;
-               }
-               continue;
-           }
-       }
-#endif
-       c = *name++;
-       if (c == '\\' && (*flagp & SSOP_SLASH))
-           /* change a backslash to a forward slash */
-           c = '/';
-       else if ((vim_strchr(escape_chars, c) != NULL
-#ifdef BACKSLASH_IN_FILENAME
-                   && c != '\\'
-#endif
-                ) || c == '#' || c == '%')
-       {
-           /* escape a special character with a backslash */
-           if (putc('\\', fd) != '\\')
-               retval = FAIL;
-       }
-       if (putc(c, fd) != c)
-           retval = FAIL;
+    if (*flagp & SSOP_SLASH)
+    {
+       /* change all backslashes to forward slashes */
+       for (p = sname; *p != NUL; mb_ptr_adv(p))
+           if (*p == '\\')
+               *p = '/';
     }
+
+    /* escape special characters */
+    p = vim_strsave_fnameescape(sname, FALSE);
     vim_free(sname);
+    if (p == NULL)
+       return FAIL;
+
+    /* write the result */
+    if (fputs((char *)p, fd) < 0)
+       retval = FAIL;
+
+    vim_free(p);
     return retval;
 }
 
@@ -10826,8 +11098,7 @@ get_view_file(c)
            else if (vim_ispathsep(*p))
            {
                *s++ = '=';
-#if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(RISCOS) \
-       || defined(VMS)
+#if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(VMS)
                if (*p == ':')
                    *s++ = '-';
                else
@@ -10910,7 +11181,7 @@ ex_viminfo(eap)
 
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
 /*
- * Make a dialog message in "buff[IOSIZE]".
+ * Make a dialog message in "buff[DIALOG_MSG_SIZE]".
  * "format" must contain "%s".
  */
     void
@@ -10921,7 +11192,7 @@ dialog_msg(buff, format, fname)
 {
     if (fname == NULL)
        fname = (char_u *)_("Untitled");
-    vim_snprintf((char *)buff, IOSIZE, format, fname);
+    vim_snprintf((char *)buff, DIALOG_MSG_SIZE, format, fname);
 }
 #endif
 
index fc23cac..1ad696f 100644 (file)
@@ -44,7 +44,7 @@ static char_u *get_end_emsg __ARGS((struct condstack *cstack));
  * executed.  Otherwise, errors and/or interrupts are converted into catchable
  * exceptions (did_throw additionally set), which terminate the script only if
  * not caught.  For user exceptions, only did_throw is set.  (Note: got_int can
- * be set asyncronously afterwards by a SIGINT, so did_throw && got_int is not
+ * be set asynchronously afterwards by a SIGINT, so did_throw && got_int is not
  * a reliant test that the exception currently being thrown is an interrupt
  * exception.  Similarly, did_emsg can be set afterwards on an error in an
  * (unskipped) conditional command inside an inactive conditional, so did_throw
@@ -1576,7 +1576,7 @@ ex_catch(eap)
                    caught = vim_regexec_nl(&regmatch, current_exception->value,
                            (colnr_T)0);
                    got_int |= prev_got_int;
-                   vim_free(regmatch.regprog);
+                   vim_regfree(regmatch.regprog);
                }
            }
        }
@@ -2091,11 +2091,11 @@ leave_cleanup(csp)
  * Values used for "searched_cond" are (CSF_WHILE | CSF_FOR) or CSF_TRY or 0,
  * the latter meaning the innermost try conditional not in its finally clause.
  * "inclusive" tells whether the conditional searched for should be made
- * inactive itself (a try conditional not in its finally claused possibly find
+ * inactive itself (a try conditional not in its finally clause possibly find
  * before is always made inactive).  If "inclusive" is TRUE and
  * "searched_cond" is CSF_TRY|CSF_SILENT, the saved former value of
  * "emsg_silent", if reset when the try conditional finally reached was
- * entered, is restored (unsed by ex_endtry()).  This is normally done only
+ * entered, is restored (used by ex_endtry()).  This is normally done only
  * when such a try conditional is left.
  */
     int
index 79a1046..cdd59de 100644 (file)
@@ -25,7 +25,7 @@ struct cmdline_info
     int                cmdlen;         /* number of chars in command line */
     int                cmdpos;         /* current cursor position */
     int                cmdspos;        /* cursor column on screen */
-    int                cmdfirstc;      /* ':', '/', '?', '=' or NUL */
+    int                cmdfirstc;      /* ':', '/', '?', '=', '>' or NUL */
     int                cmdindent;      /* number of spaces before cmdline */
     char_u     *cmdprompt;     /* message in front of cmdline */
     int                cmdattr;        /* attributes for prompt */
@@ -56,6 +56,7 @@ static int    new_cmdpos;     /* position set by set_cmdline_pos() */
 typedef struct hist_entry
 {
     int                hisnum;         /* identifying number */
+    int                viminfo;        /* when TRUE hisstr comes from viminfo */
     char_u     *hisstr;        /* actual entry, separator char after the NUL */
 } histentry_T;
 
@@ -67,7 +68,7 @@ static int    hislen = 0;             /* actual length of history tables */
 
 static int     hist_char2type __ARGS((int c));
 
-static int     in_history __ARGS((int, char_u *, int));
+static int     in_history __ARGS((int, char_u *, int, int, int));
 # ifdef FEAT_EVAL
 static int     calc_hist_idx __ARGS((int histype, int num));
 # endif
@@ -102,7 +103,7 @@ static void cmdline_del __ARGS((int from));
 static void    redrawcmdprompt __ARGS((void));
 static void    cursorcmd __ARGS((void));
 static int     ccheck_abbr __ARGS((int));
-static int     nextwild __ARGS((expand_T *xp, int type, int options));
+static int     nextwild __ARGS((expand_T *xp, int type, int options, int escape));
 static void    escape_fname __ARGS((char_u **pp));
 static int     showmatches __ARGS((expand_T *xp, int wildmenu));
 static void    set_expand_context __ARGS((expand_T *xp));
@@ -110,17 +111,31 @@ static int        ExpandFromContext __ARGS((expand_T *xp, char_u *, int *, char_u ***,
 static int     expand_showtail __ARGS((expand_T *xp));
 #ifdef FEAT_CMDL_COMPL
 static int     expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
-static int     ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname));
+static int     ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
+# ifdef FEAT_CMDHIST
+static char_u  *get_history_arg __ARGS((expand_T *xp, int idx));
+# endif
 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
 static int     ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
 static int     ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
 # endif
 #endif
+#ifdef FEAT_CMDHIST
+static void    clear_hist_entry __ARGS((histentry_T *hisptr));
+#endif
 
 #ifdef FEAT_CMDWIN
 static int     ex_window __ARGS((void));
 #endif
 
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+static int
+#ifdef __BORLANDC__
+_RTLENTRYF
+#endif
+sort_func_compare __ARGS((const void *s1, const void *s2));
+#endif
+
 /*
  * getcmdline() - accept a command line starting with firstc.
  *
@@ -637,7 +652,11 @@ getcmdline(firstc, count, indent)
                }
                else if (ccline.cmdpos > i)
                    cmdline_del(i);
+
+               /* Now complete in the new directory. Set KeyTyped in case the
+                * Up key came from a mapping. */
                c = p_wc;
+               KeyTyped = TRUE;
            }
        }
 
@@ -652,9 +671,10 @@ getcmdline(firstc, count, indent)
            c = plain_vgetc();
            --no_mapping;
            --allow_keys;
-           /* CTRL-\ e doesn't work when obtaining an expression. */
-           if (c != Ctrl_N && c != Ctrl_G
-                                    && (c != 'e' || ccline.cmdfirstc == '='))
+           /* CTRL-\ e doesn't work when obtaining an expression, unless it
+            * is in a mapping. */
+           if (c != Ctrl_N && c != Ctrl_G && (c != 'e'
+                                   || (ccline.cmdfirstc == '=' && KeyTyped)))
            {
                vungetc(c);
                c = Ctrl_BSL;
@@ -688,28 +708,35 @@ getcmdline(firstc, count, indent)
                    p = get_expr_line();
                    --textlock;
                    restore_cmdline(&save_ccline);
-                   len = (int)STRLEN(p);
 
-                   if (p != NULL && realloc_cmdbuff(len + 1) == OK)
+                   if (p != NULL)
                    {
-                       ccline.cmdlen = len;
-                       STRCPY(ccline.cmdbuff, p);
-                       vim_free(p);
-
-                       /* Restore the cursor or use the position set with
-                        * set_cmdline_pos(). */
-                       if (new_cmdpos > ccline.cmdlen)
-                           ccline.cmdpos = ccline.cmdlen;
-                       else
-                           ccline.cmdpos = new_cmdpos;
-
-                       KeyTyped = FALSE;       /* Don't do p_wc completion. */
-                       redrawcmd();
-                       goto cmdline_changed;
+                       len = (int)STRLEN(p);
+                       if (realloc_cmdbuff(len + 1) == OK)
+                       {
+                           ccline.cmdlen = len;
+                           STRCPY(ccline.cmdbuff, p);
+                           vim_free(p);
+
+                           /* Restore the cursor or use the position set with
+                            * set_cmdline_pos(). */
+                           if (new_cmdpos > ccline.cmdlen)
+                               ccline.cmdpos = ccline.cmdlen;
+                           else
+                               ccline.cmdpos = new_cmdpos;
+
+                           KeyTyped = FALSE;   /* Don't do p_wc completion. */
+                           redrawcmd();
+                           goto cmdline_changed;
+                       }
                    }
                }
                beep_flush();
-               c = ESC;
+               got_int = FALSE;        /* don't abandon the command line */
+               did_emsg = FALSE;
+               emsg_on_display = FALSE;
+               redrawcmd();
+               goto cmdline_not_changed;
            }
 #endif
            else
@@ -787,9 +814,11 @@ getcmdline(firstc, count, indent)
                    did_wild_list = TRUE;
                }
                if (wim_flags[wim_index] & WIM_LONGEST)
-                   res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP);
+                   res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
+                                                              firstc != '@');
                else if (wim_flags[wim_index] & WIM_FULL)
-                   res = nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP);
+                   res = nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP,
+                                                              firstc != '@');
                else
                    res = OK;       /* don't insert 'wildchar' now */
            }
@@ -800,9 +829,11 @@ getcmdline(firstc, count, indent)
                /* if 'wildmode' first contains "longest", get longest
                 * common part */
                if (wim_flags[0] & WIM_LONGEST)
-                   res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP);
+                   res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
+                                                              firstc != '@');
                else
-                   res = nextwild(&xpc, WILD_EXPAND_KEEP, WILD_NO_BEEP);
+                   res = nextwild(&xpc, WILD_EXPAND_KEEP, WILD_NO_BEEP,
+                                                              firstc != '@');
 
                /* if interrupted while completing, behave like it failed */
                if (got_int)
@@ -837,7 +868,8 @@ getcmdline(firstc, count, indent)
                            int p_wmnu_save = p_wmnu;
                            p_wmnu = 0;
 #endif
-                           nextwild(&xpc, WILD_PREV, 0); /* remove match */
+                           /* remove match */
+                           nextwild(&xpc, WILD_PREV, 0, firstc != '@');
 #ifdef FEAT_WILDMENU
                            p_wmnu = p_wmnu_save;
 #endif
@@ -851,9 +883,11 @@ getcmdline(firstc, count, indent)
                        redrawcmd();
                        did_wild_list = TRUE;
                        if (wim_flags[wim_index] & WIM_LONGEST)
-                           nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP);
+                           nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
+                                                              firstc != '@');
                        else if (wim_flags[wim_index] & WIM_FULL)
-                           nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP);
+                           nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP,
+                                                              firstc != '@');
                    }
                    else
                        vim_beep();
@@ -876,9 +910,9 @@ getcmdline(firstc, count, indent)
        /* <S-Tab> goes to last match, in a clumsy way */
        if (c == K_S_TAB && KeyTyped)
        {
-           if (nextwild(&xpc, WILD_EXPAND_KEEP, 0) == OK
-                   && nextwild(&xpc, WILD_PREV, 0) == OK
-                   && nextwild(&xpc, WILD_PREV, 0) == OK)
+           if (nextwild(&xpc, WILD_EXPAND_KEEP, 0, firstc != '@') == OK
+                   && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK
+                   && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK)
                goto cmdline_changed;
        }
 
@@ -1395,7 +1429,7 @@ getcmdline(firstc, count, indent)
                goto cmdline_not_changed;
 
        case Ctrl_A:        /* all matches */
-               if (nextwild(&xpc, WILD_ALL, 0) == FAIL)
+               if (nextwild(&xpc, WILD_ALL, 0, firstc != '@') == FAIL)
                    break;
                goto cmdline_changed;
 
@@ -1431,7 +1465,7 @@ getcmdline(firstc, count, indent)
 #endif
 
                /* completion: longest common part */
-               if (nextwild(&xpc, WILD_LONGEST, 0) == FAIL)
+               if (nextwild(&xpc, WILD_LONGEST, 0, firstc != '@') == FAIL)
                    break;
                goto cmdline_changed;
 
@@ -1439,8 +1473,8 @@ getcmdline(firstc, count, indent)
        case Ctrl_P:        /* previous match */
                if (xpc.xp_numfiles > 0)
                {
-                   if (nextwild(&xpc, (c == Ctrl_P) ? WILD_PREV : WILD_NEXT, 0)
-                                                                     == FAIL)
+                   if (nextwild(&xpc, (c == Ctrl_P) ? WILD_PREV : WILD_NEXT,
+                                                   0, firstc != '@') == FAIL)
                        break;
                    goto cmdline_changed;
                }
@@ -1666,13 +1700,13 @@ getcmdline(firstc, count, indent)
         * We come here if we have a normal character.
         */
 
-       if (do_abbr && (IS_SPECIAL(c) || !vim_iswordc(c)) && ccheck_abbr(
+       if (do_abbr && (IS_SPECIAL(c) || !vim_iswordc(c)) && (ccheck_abbr(
 #ifdef FEAT_MBYTE
                        /* Add ABBR_OFF for characters above 0x100, this is
                         * what check_abbr() expects. */
                        (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
 #endif
-                                                                       c))
+                                                        c) || c == Ctrl_RSB))
            goto cmdline_changed;
 
        /*
@@ -1833,8 +1867,11 @@ cmdline_changed:
 # endif
                )
            /* Always redraw the whole command line to fix shaping and
-            * right-left typing.  Not efficient, but it works. */
-           redrawcmd();
+            * right-left typing.  Not efficient, but it works.
+            * Do it only when there are no characters left to read
+            * to avoid useless intermediate redraws. */
+           if (vpeekc() == NUL)
+               redrawcmd();
 #endif
     }
 
@@ -1962,8 +1999,12 @@ getcmdline_prompt(firstc, prompt, attr, xp_context, xp_arg)
 # endif
     s = getcmdline(firstc, 1L, 0);
     restore_cmdline(&save_ccline);
-    /* Restore msg_col, the prompt from input() may have changed it. */
-    msg_col = msg_col_save;
+    /* Restore msg_col, the prompt from input() may have changed it.
+     * But only if called recursively and the commandline is therefore being
+     * restored to an old one; if not, the input() prompt stays on the screen,
+     * so we need its modified msg_col left intact. */
+    if (ccline.cmdbuff != NULL)
+       msg_col = msg_col_save;
 
     return s;
 }
@@ -2239,10 +2280,12 @@ getexmodeline(promptc, cookie, indent)
 
            if (c1 == Ctrl_T)
            {
+               long        sw = get_sw_value();
+
                p = (char_u *)line_ga.ga_data;
                p[line_ga.ga_len] = NUL;
                indent = get_indent_str(p, 8);
-               indent += curbuf->b_p_sw - indent % curbuf->b_p_sw;
+               indent += sw - indent % sw;
 add_indent:
                while (get_indent_str(p, 8) < indent)
                {
@@ -2294,7 +2337,7 @@ redraw:
                    p[line_ga.ga_len] = NUL;
                    indent = get_indent_str(p, 8);
                    --indent;
-                   indent -= indent % curbuf->b_p_sw;
+                   indent -= indent % get_sw_value();
                }
                while (get_indent_str(p, 8) > indent)
                {
@@ -2342,15 +2385,31 @@ redraw:
        windgoto(msg_row, msg_col);
        pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
 
-       /* we are done when a NL is entered, but not when it comes after a
-        * backslash */
-       if (line_ga.ga_len > 0 && pend[-1] == '\n'
-               && (line_ga.ga_len <= 1 || pend[-2] != '\\'))
+       /* We are done when a NL is entered, but not when it comes after an
+        * odd number of backslashes, that results in a NUL. */
+       if (line_ga.ga_len > 0 && pend[-1] == '\n')
        {
-           --line_ga.ga_len;
-           --pend;
-           *pend = NUL;
-           break;
+           int bcount = 0;
+
+           while (line_ga.ga_len - 2 >= bcount && pend[-2 - bcount] == '\\')
+               ++bcount;
+
+           if (bcount > 0)
+           {
+               /* Halve the number of backslashes: "\NL" -> "NUL", "\\NL" ->
+                * "\NL", etc. */
+               line_ga.ga_len -= (bcount + 1) / 2;
+               pend -= (bcount + 1) / 2;
+               pend[-1] = '\n';
+           }
+
+           if ((bcount & 1) == 0)
+           {
+               --line_ga.ga_len;
+               --pend;
+               *pend = NUL;
+               break;
+           }
        }
     }
 
@@ -2719,6 +2778,11 @@ unputcmdline()
     msg_no_more = TRUE;
     if (ccline.cmdlen == ccline.cmdpos)
        msg_putchar(' ');
+#ifdef FEAT_MBYTE
+    else if (has_mbyte)
+       draw_cmdline(ccline.cmdpos,
+                              (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos));
+#endif
     else
        draw_cmdline(ccline.cmdpos, 1);
     msg_no_more = FALSE;
@@ -2843,6 +2907,7 @@ put_on_cmdline(str, len, redraw)
        {
            msg_no_more = TRUE;
            i = cmdline_row;
+           cursorcmd();
            draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
            /* Avoid clearing the rest of the line too often. */
            if (cmdline_row != i || ccline.overstrike)
@@ -3023,7 +3088,7 @@ cmdline_paste(regname, literally, remcr)
            int     len;
 
            /* Locate start of last word in the cmd buffer. */
-           for (w = ccline.cmdbuff + ccline.cmdlen; w > ccline.cmdbuff; )
+           for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff; )
            {
 #ifdef FEAT_MBYTE
                if (has_mbyte)
@@ -3041,7 +3106,7 @@ cmdline_paste(regname, literally, remcr)
                    --w;
                }
            }
-           len = (int)((ccline.cmdbuff + ccline.cmdlen) - w);
+           len = (int)((ccline.cmdbuff + ccline.cmdpos) - w);
            if (p_ic ? STRNICMP(w, arg, len) == 0 : STRNCMP(w, arg, len) == 0)
                p += len;
        }
@@ -3082,7 +3147,8 @@ cmdline_paste_str(s, literally)
            else
 #endif
                c = *s++;
-           if (cv == Ctrl_V || c == ESC || c == Ctrl_C || c == CAR || c == NL
+           if (cv == Ctrl_V || c == ESC || c == Ctrl_C
+                   || c == CAR || c == NL || c == Ctrl_L
 #ifdef UNIX
                    || c == intr_char
 #endif
@@ -3258,6 +3324,24 @@ ccheck_abbr(c)
     return check_abbr(c, ccline.cmdbuff, ccline.cmdpos, 0);
 }
 
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+    static int
+#ifdef __BORLANDC__
+_RTLENTRYF
+#endif
+sort_func_compare(s1, s2)
+    const void *s1;
+    const void *s2;
+{
+    char_u *p1 = *(char_u **)s1;
+    char_u *p2 = *(char_u **)s2;
+
+    if (*p1 != '<' && *p2 == '<') return -1;
+    if (*p1 == '<' && *p2 != '<') return 1;
+    return STRCMP(p1, p2);
+}
+#endif
+
 /*
  * Return FAIL if this is not an appropriate context in which to do
  * completion of anything, return OK if it is (even if there are no matches).
@@ -3265,10 +3349,11 @@ ccheck_abbr(c)
  * normal character (instead of being expanded).  This allows :s/^I^D etc.
  */
     static int
-nextwild(xp, type, options)
+nextwild(xp, type, options, escape)
     expand_T   *xp;
     int                type;
     int                options;        /* extra options for ExpandOne() */
+    int                escape;         /* if TRUE, escape the returned matches */
 {
     int                i, j;
     char_u     *p1;
@@ -3316,10 +3401,16 @@ nextwild(xp, type, options)
            p2 = NULL;
        else
        {
+           int use_options = options |
+                   WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT;
+           if (escape)
+               use_options |= WILD_ESCAPE;
+
+           if (p_wic)
+               use_options += WILD_ICASE;
            p2 = ExpandOne(xp, p1,
                         vim_strnsave(&ccline.cmdbuff[i], xp->xp_pattern_len),
-                   WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT|WILD_ESCAPE
-                                                             |options, type);
+                                                          use_options, type);
            vim_free(p1);
            /* longest match: make sure it is not shorter, happens with :help */
            if (p2 != NULL && type == WILD_LONGEST)
@@ -3396,6 +3487,7 @@ nextwild(xp, type, options)
  * mode = WILD_PREV:       use previous match in multiple match, wrap to first
  * mode = WILD_ALL:        return all matches concatenated
  * mode = WILD_LONGEST:            return longest matched part
+ * mode = WILD_ALL_KEEP:    get all matches, keep matches
  *
  * options = WILD_LIST_NOTFOUND:    list entries without a match
  * options = WILD_HOME_REPLACE:            do home_replace() for buffer names
@@ -3405,6 +3497,7 @@ nextwild(xp, type, options)
  * options = WILD_KEEP_ALL:        don't remove 'wildignore' entries
  * options = WILD_SILENT:          don't print warning messages
  * options = WILD_ESCAPE:          put backslash before special chars
+ * options = WILD_ICASE:           ignore case for files
  *
  * The variables xp->xp_context and xp->xp_backslash must have been set!
  */
@@ -3518,7 +3611,8 @@ ExpandOne(xp, str, orig, options, mode)
            /*
             * Check for matching suffixes in file names.
             */
-           if (mode != WILD_ALL && mode != WILD_LONGEST)
+           if (mode != WILD_ALL && mode != WILD_ALL_KEEP
+                                                     && mode != WILD_LONGEST)
            {
                if (xp->xp_numfiles)
                    non_suf_match = xp->xp_numfiles;
@@ -3563,19 +3657,16 @@ ExpandOne(xp, str, orig, options, mode)
        {
            for (i = 0; i < xp->xp_numfiles; ++i)
            {
-#ifdef CASE_INSENSITIVE_FILENAME
-               if (xp->xp_context == EXPAND_DIRECTORIES
+               if (p_fic && (xp->xp_context == EXPAND_DIRECTORIES
                        || xp->xp_context == EXPAND_FILES
                        || xp->xp_context == EXPAND_SHELLCMD
-                       || xp->xp_context == EXPAND_BUFFERS)
+                       || xp->xp_context == EXPAND_BUFFERS))
                {
                    if (TOLOWER_LOC(xp->xp_files[i][len]) !=
                                            TOLOWER_LOC(xp->xp_files[0][len]))
                        break;
                }
-               else
-#endif
-                    if (xp->xp_files[i][len] != xp->xp_files[0][len])
+               else if (xp->xp_files[i][len] != xp->xp_files[0][len])
                    break;
            }
            if (i < xp->xp_numfiles)
@@ -3638,6 +3729,7 @@ ExpandInit(xp)
 #if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
     xp->xp_arg = NULL;
 #endif
+    xp->xp_line = NULL;
 }
 
 /*
@@ -3674,6 +3766,7 @@ ExpandEscape(xp, str, numfiles, files, options)
     if (options & WILD_ESCAPE)
     {
        if (xp->xp_context == EXPAND_FILES
+               || xp->xp_context == EXPAND_FILES_IN_PATH
                || xp->xp_context == EXPAND_SHELLCMD
                || xp->xp_context == EXPAND_BUFFERS
                || xp->xp_context == EXPAND_DIRECTORIES)
@@ -4256,6 +4349,7 @@ addstar(fname, len, context)
  *  EXPAND_EXPRESSION      Complete internal or user defined function/variable
  *                         names in expressions, eg :while s^I
  *  EXPAND_ENV_VARS        Complete environment variable names
+ *  EXPAND_USER                    Complete user names
  */
     static void
 set_expand_context(xp)
@@ -4315,6 +4409,11 @@ set_cmd_context(xp, str, len, col)
        while (nextcomm != NULL)
            nextcomm = set_one_cmd_context(xp, nextcomm);
 
+    /* Store the string here so that call_user_expand_func() can get to them
+     * easily. */
+    xp->xp_line = str;
+    xp->xp_col = col;
+
     str[col] = old_char;
 }
 
@@ -4338,6 +4437,7 @@ expand_cmdline(xp, str, col, matchcount, matches)
     char_u     ***matches;     /* return: array of pointers to matches */
 {
     char_u     *file_str = NULL;
+    int                options = WILD_ADD_SLASH|WILD_SILENT;
 
     if (xp->xp_context == EXPAND_UNSUCCESSFUL)
     {
@@ -4356,9 +4456,11 @@ expand_cmdline(xp, str, col, matchcount, matches)
     if (file_str == NULL)
        return EXPAND_UNSUCCESSFUL;
 
+    if (p_wic)
+       options += WILD_ICASE;
+
     /* find all files that match the description */
-    if (ExpandFromContext(xp, file_str, matchcount, matches,
-                                         WILD_ADD_SLASH|WILD_SILENT) == FAIL)
+    if (ExpandFromContext(xp, file_str, matchcount, matches, options) == FAIL)
     {
        *matchcount = 0;
        *matches = NULL;
@@ -4410,7 +4512,7 @@ ExpandFromContext(xp, pat, num_file, file, options)
     char_u     *pat;
     int                *num_file;
     char_u     ***file;
-    int                options;
+    int                options;  /* EW_ flags */
 {
 #ifdef FEAT_CMDL_COMPL
     regmatch_T regmatch;
@@ -4464,6 +4566,9 @@ ExpandFromContext(xp, pat, num_file, file, options)
            flags |= (EW_FILE | EW_PATH);
        else
            flags = (flags | EW_DIR) & ~EW_FILE;
+       if (options & WILD_ICASE)
+           flags |= EW_ICASE;
+
        /* Expand wildcards, supporting %:h and the like. */
        ret = expand_wildcards_eval(&pat, num_file, file, flags);
        if (free_pat)
@@ -4501,13 +4606,25 @@ ExpandFromContext(xp, pat, num_file, file, options)
            || xp->xp_context == EXPAND_TAGS_LISTFILES)
        return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
     if (xp->xp_context == EXPAND_COLORS)
-       return ExpandRTDir(pat, num_file, file, "colors");
+    {
+       char *directories[] = {"colors", NULL};
+       return ExpandRTDir(pat, num_file, file, directories);
+    }
     if (xp->xp_context == EXPAND_COMPILER)
-       return ExpandRTDir(pat, num_file, file, "compiler");
+    {
+       char *directories[] = {"compiler", NULL};
+       return ExpandRTDir(pat, num_file, file, directories);
+    }
     if (xp->xp_context == EXPAND_OWNSYNTAX)
-       return ExpandRTDir(pat, num_file, file, "syntax");
+    {
+       char *directories[] = {"syntax", NULL};
+       return ExpandRTDir(pat, num_file, file, directories);
+    }
     if (xp->xp_context == EXPAND_FILETYPE)
-       return ExpandRTDir(pat, num_file, file, "{syntax,indent,ftplugin}");
+    {
+       char *directories[] = {"syntax", "indent", "ftplugin", NULL};
+       return ExpandRTDir(pat, num_file, file, directories);
+    }
 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
     if (xp->xp_context == EXPAND_USER_LIST)
        return ExpandUserList(xp, num_file, file);
@@ -4536,48 +4653,57 @@ ExpandFromContext(xp, pat, num_file, file, options)
            int         context;
            char_u      *((*func)__ARGS((expand_T *, int)));
            int         ic;
+           int         escaped;
        } tab[] =
        {
-           {EXPAND_COMMANDS, get_command_name, FALSE},
-           {EXPAND_BEHAVE, get_behave_arg, TRUE},
+           {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
+           {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
+#ifdef FEAT_CMDHIST
+           {EXPAND_HISTORY, get_history_arg, TRUE, TRUE},
+#endif
 #ifdef FEAT_USR_CMDS
-           {EXPAND_USER_COMMANDS, get_user_commands, FALSE},
-           {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE},
-           {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE},
-           {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE},
+           {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
+           {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
+           {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE, TRUE},
+           {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE},
 #endif
 #ifdef FEAT_EVAL
-           {EXPAND_USER_VARS, get_user_var_name, FALSE},
-           {EXPAND_FUNCTIONS, get_function_name, FALSE},
-           {EXPAND_USER_FUNC, get_user_func_name, FALSE},
-           {EXPAND_EXPRESSION, get_expr_name, FALSE},
+           {EXPAND_USER_VARS, get_user_var_name, FALSE, TRUE},
+           {EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE},
+           {EXPAND_USER_FUNC, get_user_func_name, FALSE, TRUE},
+           {EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE},
 #endif
 #ifdef FEAT_MENU
-           {EXPAND_MENUS, get_menu_name, FALSE},
-           {EXPAND_MENUNAMES, get_menu_names, FALSE},
+           {EXPAND_MENUS, get_menu_name, FALSE, TRUE},
+           {EXPAND_MENUNAMES, get_menu_names, FALSE, TRUE},
 #endif
 #ifdef FEAT_SYN_HL
-           {EXPAND_SYNTAX, get_syntax_name, TRUE},
+           {EXPAND_SYNTAX, get_syntax_name, TRUE, TRUE},
 #endif
-           {EXPAND_HIGHLIGHT, get_highlight_name, TRUE},
+#ifdef FEAT_PROFILE
+           {EXPAND_SYNTIME, get_syntime_arg, TRUE, TRUE},
+#endif
+           {EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE},
 #ifdef FEAT_AUTOCMD
-           {EXPAND_EVENTS, get_event_name, TRUE},
-           {EXPAND_AUGROUP, get_augroup_name, TRUE},
+           {EXPAND_EVENTS, get_event_name, TRUE, TRUE},
+           {EXPAND_AUGROUP, get_augroup_name, TRUE, TRUE},
 #endif
 #ifdef FEAT_CSCOPE
-           {EXPAND_CSCOPE, get_cscope_name, TRUE},
+           {EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE},
 #endif
 #ifdef FEAT_SIGNS
-           {EXPAND_SIGN, get_sign_name, TRUE},
+           {EXPAND_SIGN, get_sign_name, TRUE, TRUE},
 #endif
 #ifdef FEAT_PROFILE
-           {EXPAND_PROFILE, get_profile_name, TRUE},
+           {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
 #endif
 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
        && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
-           {EXPAND_LANGUAGE, get_lang_arg, TRUE},
+           {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
+           {EXPAND_LOCALES, get_locales, TRUE, FALSE},
 #endif
-           {EXPAND_ENV_VARS, get_env_name, TRUE},
+           {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
+           {EXPAND_USER, get_users, TRUE, FALSE},
        };
        int     i;
 
@@ -4591,12 +4717,13 @@ ExpandFromContext(xp, pat, num_file, file, options)
            {
                if (tab[i].ic)
                    regmatch.rm_ic = TRUE;
-               ret = ExpandGeneric(xp, &regmatch, num_file, file, tab[i].func);
+               ret = ExpandGeneric(xp, &regmatch, num_file, file,
+                                               tab[i].func, tab[i].escaped);
                break;
            }
     }
 
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 
     return ret;
 #endif /* FEAT_CMDL_COMPL */
@@ -4613,13 +4740,14 @@ ExpandFromContext(xp, pat, num_file, file, options)
  * Returns OK when no problems encountered, FAIL for error (out of memory).
  */
     int
-ExpandGeneric(xp, regmatch, num_file, file, func)
+ExpandGeneric(xp, regmatch, num_file, file, func, escaped)
     expand_T   *xp;
     regmatch_T *regmatch;
     int                *num_file;
     char_u     ***file;
     char_u     *((*func)__ARGS((expand_T *, int)));
                                          /* returns a string from the list */
+    int                escaped;
 {
     int                i;
     int                count = 0;
@@ -4644,7 +4772,10 @@ ExpandGeneric(xp, regmatch, num_file, file, func)
            {
                if (round)
                {
-                   str = vim_strsave_escaped(str, (char_u *)" \t\\.");
+                   if (escaped)
+                       str = vim_strsave_escaped(str, (char_u *)" \t\\.");
+                   else
+                       str = vim_strsave(str);
                    (*file)[count] = str;
 #ifdef FEAT_MENU
                    if (func == get_menu_names && str != NULL)
@@ -4676,7 +4807,16 @@ ExpandGeneric(xp, regmatch, num_file, file, func)
 
     /* Sort the results.  Keep menu's in the specified order. */
     if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
-       sort_strings(*file, *num_file);
+    {
+       if (xp->xp_context == EXPAND_EXPRESSION
+               || xp->xp_context == EXPAND_FUNCTIONS
+               || xp->xp_context == EXPAND_USER_FUNC)
+           /* <SNR> functions should be sorted to the end. */
+           qsort((void *)*file, (size_t)*num_file, sizeof(char_u *),
+                                                          sort_func_compare);
+       else
+           sort_strings(*file, *num_file);
+    }
 
 #ifdef FEAT_CMDL_COMPL
     /* Reset the variables used for special highlight names expansion, so that
@@ -4728,7 +4868,11 @@ expand_shellcmd(filepat, num_file, file, flagsarg)
                            || (pat[1] == '.' && vim_ispathsep(pat[2])))))
        path = (char_u *)".";
     else
+    {
        path = vim_getenv((char_u *)"PATH", &mustfree);
+       if (path == NULL)
+           path = (char_u *)"";
+    }
 
     /*
      * Go over all directories in $PATH.  Expand matches in that directory and
@@ -4807,34 +4951,27 @@ call_user_expand_func(user_expand_func, xp, num_file, file)
     int                *num_file;
     char_u     ***file;
 {
-    char_u     keep;
+    int                keep = 0;
     char_u     num[50];
     char_u     *args[3];
     int                save_current_SID = current_SID;
     void       *ret;
     struct cmdline_info            save_ccline;
 
-    if (xp->xp_arg == NULL || xp->xp_arg[0] == '\0')
+    if (xp->xp_arg == NULL || xp->xp_arg[0] == '\0' || xp->xp_line == NULL)
        return NULL;
     *num_file = 0;
     *file = NULL;
 
-    if (ccline.cmdbuff == NULL)
-    {
-       /* Completion from Insert mode, pass fake arguments. */
-       keep = 0;
-       sprintf((char *)num, "%d", (int)STRLEN(xp->xp_pattern));
-       args[1] = xp->xp_pattern;
-    }
-    else
+    if (ccline.cmdbuff != NULL)
     {
-       /* Completion on the command line, pass real arguments. */
        keep = ccline.cmdbuff[ccline.cmdlen];
        ccline.cmdbuff[ccline.cmdlen] = 0;
-       sprintf((char *)num, "%d", ccline.cmdpos);
-       args[1] = ccline.cmdbuff;
     }
+
     args[0] = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len);
+    args[1] = xp->xp_line;
+    sprintf((char *)num, "%d", xp->xp_col);
     args[2] = num;
 
     /* Save the cmdline, we don't know what the function may do. */
@@ -4949,57 +5086,68 @@ ExpandUserList(xp, num_file, file)
 /*
  * Expand color scheme, compiler or filetype names:
  * 'runtimepath'/{dirnames}/{pat}.vim
- * dirnames may contain one directory (ex: "colorscheme") or can be a glob
- * expression matching multiple directories (ex: "{syntax,ftplugin,indent}").
+ * "dirnames" is an array with one or more directory names.
  */
     static int
 ExpandRTDir(pat, num_file, file, dirnames)
     char_u     *pat;
     int                *num_file;
     char_u     ***file;
-    char       *dirnames;
+    char       *dirnames[];
 {
-    char_u     *all;
+    char_u     *matches;
     char_u     *s;
     char_u     *e;
     garray_T   ga;
+    int                i;
+    int                pat_len;
 
     *num_file = 0;
     *file = NULL;
-    s = alloc((unsigned)(STRLEN(pat) + STRLEN(dirnames) + 7));
-    if (s == NULL)
-       return FAIL;
-    sprintf((char *)s, "%s/%s*.vim", dirnames, pat);
-    all = globpath(p_rtp, s, 0);
-    vim_free(s);
-    if (all == NULL)
-       return FAIL;
+    pat_len = (int)STRLEN(pat);
+    ga_init2(&ga, (int)sizeof(char *), 10);
 
-    ga_init2(&ga, (int)sizeof(char *), 3);
-    for (s = all; *s != NUL; s = e)
+    for (i = 0; dirnames[i] != NULL; ++i)
     {
-       e = vim_strchr(s, '\n');
-       if (e == NULL)
-           e = s + STRLEN(s);
-       if (ga_grow(&ga, 1) == FAIL)
-           break;
-       if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+       s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 7));
+       if (s == NULL)
        {
-           for (s = e - 4; s > all; mb_ptr_back(all, s))
-               if (*s == '\n' || vim_ispathsep(*s))
-                   break;
-           ++s;
-           ((char_u **)ga.ga_data)[ga.ga_len] =
+           ga_clear_strings(&ga);
+           return FAIL;
+       }
+       sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat);
+       matches = globpath(p_rtp, s, 0);
+       vim_free(s);
+       if (matches == NULL)
+           continue;
+
+       for (s = matches; *s != NUL; s = e)
+       {
+           e = vim_strchr(s, '\n');
+           if (e == NULL)
+               e = s + STRLEN(s);
+           if (ga_grow(&ga, 1) == FAIL)
+               break;
+           if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+           {
+               for (s = e - 4; s > matches; mb_ptr_back(matches, s))
+                   if (*s == '\n' || vim_ispathsep(*s))
+                       break;
+               ++s;
+               ((char_u **)ga.ga_data)[ga.ga_len] =
                                            vim_strnsave(s, (int)(e - s - 4));
-           ++ga.ga_len;
+               ++ga.ga_len;
+           }
+           if (*e != NUL)
+               ++e;
        }
-       if (*e != NUL)
-           ++e;
+       vim_free(matches);
     }
-    vim_free(all);
+    if (ga.ga_len == 0)
+       return FAIL;
 
     /* Sort and remove duplicates which can happen when specifying multiple
-     * directories in dirnames such as "{syntax,ftplugin,indent}". */
+     * directories in dirnames. */
     remove_duplicates(&ga);
 
     *file = ga.ga_data;
@@ -5127,6 +5275,34 @@ static char *(history_names[]) =
     NULL
 };
 
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+/*
+ * Function given to ExpandGeneric() to obtain the possible first
+ * arguments of the ":history command.
+ */
+    static char_u *
+get_history_arg(xp, idx)
+    expand_T   *xp UNUSED;
+    int                idx;
+{
+    static char_u compl[2] = { NUL, NUL };
+    char *short_names = ":=@>?/";
+    int short_names_count = (int)STRLEN(short_names);
+    int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
+
+    if (idx < short_names_count)
+    {
+       compl[0] = (char_u)short_names[idx];
+       return compl;
+    }
+    if (idx < short_names_count + history_name_count)
+       return (char_u *)history_names[idx - short_names_count];
+    if (idx == short_names_count + history_name_count)
+       return (char_u *)"all";
+    return NULL;
+}
+#endif
+
 /*
  * init_history() - Initialize the command line history.
  * Also used to re-allocate the history when the size changes.
@@ -5173,10 +5349,7 @@ init_history()
                if (hisidx[type] < 0)           /* there are no entries yet */
                {
                    for (i = 0; i < newlen; ++i)
-                   {
-                       temp[i].hisnum = 0;
-                       temp[i].hisstr = NULL;
-                   }
+                       clear_hist_entry(&temp[i]);
                }
                else if (newlen > hislen)       /* array becomes bigger */
                {
@@ -5184,10 +5357,7 @@ init_history()
                        temp[i] = history[type][i];
                    j = i;
                    for ( ; i <= newlen - (hislen - hisidx[type]); ++i)
-                   {
-                       temp[i].hisnum = 0;
-                       temp[i].hisstr = NULL;
-                   }
+                       clear_hist_entry(&temp[i]);
                    for ( ; j < hislen; ++i, ++j)
                        temp[i] = history[type][j];
                }
@@ -5215,18 +5385,30 @@ init_history()
     }
 }
 
+    static void
+clear_hist_entry(hisptr)
+    histentry_T        *hisptr;
+{
+    hisptr->hisnum = 0;
+    hisptr->viminfo = FALSE;
+    hisptr->hisstr = NULL;
+}
+
 /*
  * Check if command line 'str' is already in history.
  * If 'move_to_front' is TRUE, matching entry is moved to end of history.
  */
     static int
-in_history(type, str, move_to_front)
+in_history(type, str, move_to_front, sep, writing)
     int            type;
     char_u  *str;
     int            move_to_front;      /* Move the entry to the front if it exists */
+    int            sep;
+    int            writing;            /* ignore entries read from viminfo */
 {
     int            i;
     int            last_i = -1;
+    char_u  *p;
 
     if (hisidx[type] < 0)
        return FALSE;
@@ -5235,7 +5417,13 @@ in_history(type, str, move_to_front)
     {
        if (history[type][i].hisstr == NULL)
            return FALSE;
-       if (STRCMP(str, history[type][i].hisstr) == 0)
+
+       /* For search history, check that the separator character matches as
+        * well. */
+       p = history[type][i].hisstr;
+       if (STRCMP(str, p) == 0
+               && !(writing && history[type][i].viminfo)
+               && (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
        {
            if (!move_to_front)
                return TRUE;
@@ -5256,8 +5444,9 @@ in_history(type, str, move_to_front)
            history[type][last_i] = history[type][i];
            last_i = i;
        }
-       history[type][i].hisstr = str;
        history[type][i].hisnum = ++hisnum[type];
+       history[type][i].viminfo = FALSE;
+       history[type][i].hisstr = str;
        return TRUE;
     }
     return FALSE;
@@ -5321,15 +5510,14 @@ add_to_history(histype, new_entry, in_map, sep)
            /* Current line is from the same mapping, remove it */
            hisptr = &history[HIST_SEARCH][hisidx[HIST_SEARCH]];
            vim_free(hisptr->hisstr);
-           hisptr->hisstr = NULL;
-           hisptr->hisnum = 0;
+           clear_hist_entry(hisptr);
            --hisnum[histype];
            if (--hisidx[HIST_SEARCH] < 0)
                hisidx[HIST_SEARCH] = hislen - 1;
        }
        last_maptick = -1;
     }
-    if (!in_history(histype, new_entry, TRUE))
+    if (!in_history(histype, new_entry, TRUE, sep, FALSE))
     {
        if (++hisidx[histype] == hislen)
            hisidx[histype] = 0;
@@ -5343,6 +5531,7 @@ add_to_history(histype, new_entry, in_map, sep)
            hisptr->hisstr[len + 1] = sep;
 
        hisptr->hisnum = ++hisnum[histype];
+       hisptr->viminfo = FALSE;
        if (histype == HIST_SEARCH && in_map)
            last_maptick = maptick;
     }
@@ -5532,8 +5721,7 @@ clr_history(histype)
        for (i = hislen; i--;)
        {
            vim_free(hisptr->hisstr);
-           hisptr->hisnum = 0;
-           hisptr++->hisstr = NULL;
+           clear_hist_entry(hisptr);
        }
        hisidx[histype] = -1;   /* mark history as cleared */
        hisnum[histype] = 0;    /* reset identifier counter */
@@ -5578,16 +5766,14 @@ del_history_entry(histype, str)
            {
                found = TRUE;
                vim_free(hisptr->hisstr);
-               hisptr->hisstr = NULL;
-               hisptr->hisnum = 0;
+               clear_hist_entry(hisptr);
            }
            else
            {
                if (i != last)
                {
                    history[histype][last] = *hisptr;
-                   hisptr->hisstr = NULL;
-                   hisptr->hisnum = 0;
+                   clear_hist_entry(hisptr);
                }
                if (--last < 0)
                    last += hislen;
@@ -5598,7 +5784,7 @@ del_history_entry(histype, str)
        if (history[histype][idx].hisstr == NULL)
            hisidx[histype] = -1;
     }
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
     return found;
 }
 
@@ -5631,8 +5817,7 @@ del_history_idx(histype, idx)
        history[histype][i] = history[histype][j];
        i = j;
     }
-    history[histype][i].hisstr = NULL;
-    history[histype][i].hisnum = 0;
+    clear_hist_entry(&history[histype][i]);
     if (--i < 0)
        i += hislen;
     hisidx[histype] = i;
@@ -5803,7 +5988,7 @@ ex_history(eap)
                                                              hist[i].hisnum);
                    if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
                        trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
-                                                          (int)Columns - 10);
+                            (int)Columns - 10, IOSIZE - (int)STRLEN(IObuff));
                    else
                        STRCAT(IObuff, hist[i].hisstr);
                    msg_outtrans(IObuff);
@@ -5817,6 +6002,9 @@ ex_history(eap)
 #endif
 
 #if (defined(FEAT_VIMINFO) && defined(FEAT_CMDHIST)) || defined(PROTO)
+/*
+ * Buffers for history read from a viminfo file.  Only valid while reading.
+ */
 static char_u **viminfo_history[HIST_COUNT] = {NULL, NULL, NULL, NULL};
 static int     viminfo_hisidx[HIST_COUNT] = {0, 0, 0, 0};
 static int     viminfo_hislen[HIST_COUNT] = {0, 0, 0, 0};
@@ -5851,8 +6039,9 @@ hist_type2char(type, use_question)
  * This allocates history arrays to store the read history lines.
  */
     void
-prepare_viminfo_history(asklen)
+prepare_viminfo_history(asklen, writing)
     int            asklen;
+    int            writing;
 {
     int            i;
     int            num;
@@ -5860,18 +6049,17 @@ prepare_viminfo_history(asklen)
     int            len;
 
     init_history();
-    viminfo_add_at_front = (asklen != 0);
+    viminfo_add_at_front = (asklen != 0 && !writing);
     if (asklen > hislen)
        asklen = hislen;
 
     for (type = 0; type < HIST_COUNT; ++type)
     {
-       /*
-        * Count the number of empty spaces in the history list.  If there are
-        * more spaces available than we request, then fill them up.
-        */
+       /* Count the number of empty spaces in the history list.  Entries read
+        * from viminfo previously are also considered empty.  If there are
+        * more spaces available than we request, then fill them up. */
        for (i = 0, num = 0; i < hislen; i++)
-           if (history[type][i].hisstr == NULL)
+           if (history[type][i].hisstr == NULL || history[type][i].viminfo)
                num++;
        len = asklen;
        if (num > len)
@@ -5893,8 +6081,9 @@ prepare_viminfo_history(asklen)
  * new.
  */
     int
-read_viminfo_history(virp)
+read_viminfo_history(virp, writing)
     vir_T      *virp;
+    int                writing;
 {
     int                type;
     long_u     len;
@@ -5907,8 +6096,10 @@ read_viminfo_history(virp)
        val = viminfo_readstring(virp, 1, TRUE);
        if (val != NULL && *val != NUL)
        {
+           int sep = (*val == ' ' ? NUL : *val);
+
            if (!in_history(type, val + (type == HIST_SEARCH),
-                                                       viminfo_add_at_front))
+                                         viminfo_add_at_front, sep, writing))
            {
                /* Need to re-allocate to append the separator byte. */
                len = STRLEN(val);
@@ -5920,7 +6111,7 @@ read_viminfo_history(virp)
                        /* Search entry: Move the separator from the first
                         * column to after the NUL. */
                        mch_memmove(p, val + 1, (size_t)len);
-                       p[len] = (*val == ' ' ? NUL : *val);
+                       p[len] = sep;
                    }
                    else
                    {
@@ -5938,6 +6129,9 @@ read_viminfo_history(virp)
     return viminfo_readline(virp);
 }
 
+/*
+ * Finish reading history lines from viminfo.  Not used when writing viminfo.
+ */
     void
 finish_viminfo_history()
 {
@@ -5948,7 +6142,7 @@ finish_viminfo_history()
     for (type = 0; type < HIST_COUNT; ++type)
     {
        if (history[type] == NULL)
-           return;
+           continue;
        idx = hisidx[type] + viminfo_hisidx[type];
        if (idx >= hislen)
            idx -= hislen;
@@ -5962,7 +6156,8 @@ finish_viminfo_history()
                hisidx[type] = hislen - 1;
            do
            {
-               if (history[type][idx].hisstr != NULL)
+               if (history[type][idx].hisstr != NULL
+                                               || history[type][idx].viminfo)
                    break;
                if (++idx == hislen)
                    idx = 0;
@@ -5974,6 +6169,7 @@ finish_viminfo_history()
        {
            vim_free(history[type][idx].hisstr);
            history[type][idx].hisstr = viminfo_history[type][i];
+           history[type][idx].viminfo = TRUE;
            if (--idx < 0)
                idx = hislen - 1;
        }
@@ -5986,18 +6182,27 @@ finish_viminfo_history()
        }
        vim_free(viminfo_history[type]);
        viminfo_history[type] = NULL;
+       viminfo_hisidx[type] = 0;
     }
 }
 
+/*
+ * Write history to viminfo file in "fp".
+ * When "merge" is TRUE merge history lines with a previously read viminfo
+ * file, data is in viminfo_history[].
+ * When "merge" is FALSE just write all history lines.  Used for ":wviminfo!".
+ */
     void
-write_viminfo_history(fp)
+write_viminfo_history(fp, merge)
     FILE    *fp;
+    int            merge;
 {
     int            i;
     int            type;
     int            num_saved;
     char_u  *p;
     int            c;
+    int     round;
 
     init_history();
     if (hislen == 0)
@@ -6016,26 +6221,67 @@ write_viminfo_history(fp)
                                        _("Input Line"));
        if (num_saved > hislen)
            num_saved = hislen;
-       i = hisidx[type];
-       if (i >= 0)
-           while (num_saved--)
-           {
-               p = history[type][i].hisstr;
-               if (p != NULL)
+
+       /*
+        * Merge typed and viminfo history:
+        * round 1: history of typed commands.
+        * round 2: history from recently read viminfo.
+        */
+       for (round = 1; round <= 2; ++round)
+       {
+           if (round == 1)
+               /* start at newest entry, somewhere in the list */
+               i = hisidx[type];
+           else if (viminfo_hisidx[type] > 0)
+               /* start at newest entry, first in the list */
+               i = 0;
+           else
+               /* empty list */
+               i = -1;
+           if (i >= 0)
+               while (num_saved > 0
+                       && !(round == 2 && i >= viminfo_hisidx[type]))
                {
-                   fputc(hist_type2char(type, TRUE), fp);
-                   /* For the search history: put the separator in the second
-                    * column; use a space if there isn't one. */
-                   if (type == HIST_SEARCH)
+                   p = round == 1 ? history[type][i].hisstr
+                                  : viminfo_history[type] == NULL ? NULL
+                                                  : viminfo_history[type][i];
+                   if (p != NULL && (round == 2
+                                      || !merge
+                                      || !history[type][i].viminfo))
+                   {
+                       --num_saved;
+                       fputc(hist_type2char(type, TRUE), fp);
+                       /* For the search history: put the separator in the
+                        * second column; use a space if there isn't one. */
+                       if (type == HIST_SEARCH)
+                       {
+                           c = p[STRLEN(p) + 1];
+                           putc(c == NUL ? ' ' : c, fp);
+                       }
+                       viminfo_writestring(fp, p);
+                   }
+                   if (round == 1)
+                   {
+                       /* Decrement index, loop around and stop when back at
+                        * the start. */
+                       if (--i < 0)
+                           i = hislen - 1;
+                       if (i == hisidx[type])
+                           break;
+                   }
+                   else
                    {
-                       c = p[STRLEN(p) + 1];
-                       putc(c == NUL ? ' ' : c, fp);
+                       /* Increment index. Stop at the end in the while. */
+                       ++i;
                    }
-                   viminfo_writestring(fp, p);
                }
-               if (--i < 0)
-                   i = hislen - 1;
-           }
+       }
+       for (i = 0; i < viminfo_hisidx[type]; ++i)
+           if (viminfo_history[type] != NULL)
+               vim_free(viminfo_history[type][i]);
+       vim_free(viminfo_history[type]);
+       viminfo_history[type] = NULL;
+       viminfo_hisidx[type] = 0;
     }
 }
 #endif /* FEAT_VIMINFO */
@@ -6147,9 +6393,7 @@ ex_window()
     curwin->w_p_rl = cmdmsg_rl;
     cmdmsg_rl = FALSE;
 # endif
-# ifdef FEAT_SCROLLBIND
-    curwin->w_p_scb = FALSE;
-# endif
+    RESET_BINDING(curwin);
 
 # ifdef FEAT_AUTOCMD
     /* Do execute autocommands for setting the filetype (load syntax). */
@@ -6287,6 +6531,12 @@ ex_window()
            ccline.cmdbuff = vim_strsave((char_u *)"qa");
            cmdwin_result = CAR;
        }
+       else if (cmdwin_result == Ctrl_C)
+       {
+           /* :q or :close, don't execute any command
+            * and don't modify the cmd window. */
+           ccline.cmdbuff = NULL;
+       }
        else
            ccline.cmdbuff = vim_strsave(ml_get_curline());
        if (ccline.cmdbuff == NULL)
@@ -6317,7 +6567,7 @@ ex_window()
        /* win_close() may have already wiped the buffer when 'bh' is
         * set to 'wipe' */
        if (buf_valid(bp))
-           close_buffer(NULL, bp, DOBUF_WIPE);
+           close_buffer(NULL, bp, DOBUF_WIPE, FALSE);
 
        /* Restore window sizes. */
        win_size_restore(&winsizes);
index 271e1a7..be4c1ce 100644 (file)
@@ -1813,7 +1813,7 @@ conv_to_pvim()
                ptr[i] = toF_leading(ptr[i]);
                ++i;
 
-               while(canF_Rjoin(ptr[i]) && (i < llen))
+               while (canF_Rjoin(ptr[i]) && i < llen)
                {
                    ptr[i] = toF_Rjoin(ptr[i]);
                    if (F_isterm(ptr[i]) || !F_isalpha(ptr[i]))
@@ -1841,7 +1841,7 @@ conv_to_pvim()
 }
 
 /*
- * Convert the Farsi VIM into Farsi 3342 standad.
+ * Convert the Farsi VIM into Farsi 3342 standard.
  */
     void
 conv_to_pstd()
index ea79758..d4b9aea 100644 (file)
 #endif
 
 /*
+ * +python and +python3 require FEAT_EVAL.
+ */
+#if !defined(FEAT_EVAL) && (defined(FEAT_PYTHON3) || defined(FEAT_PYTHON))
+# define FEAT_EVAL
+#endif
+
+/*
  * +profile            Profiling for functions and scripts.
  */
 #if defined(FEAT_HUGE) \
 #endif
 
 /*
- * +osfiletype         filetype checking in autocommand patterns.
- *                     Only on systems that support filetypes (RISC OS).
- */
-#if 0
-# define FEAT_OSFILETYPE
-# define DFLT_OFT "Text"
-#endif
-
-/*
  * +viminfo            reading/writing the viminfo file. Takes about 8Kbyte
  *                     of code.
  * VIMINFO_FILE                Location of user .viminfo file (should start with $).
  * Disabled for EBCDIC:
  * Multibyte support doesn't work on z/OS Unix currently.
  */
-#if (defined(FEAT_BIG) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \
+#if (defined(FEAT_NORMAL) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \
        && !defined(FEAT_MBYTE) && !defined(WIN16) \
        && SIZEOF_INT >= 4 && !defined(EBCDIC)
 # define FEAT_MBYTE
 #endif
 
 /*
+ * On some systems, when we compile with the GUI, we always use it.  On Mac
+ * there is no terminal version, and on Windows we can't figure out how to
+ * fork one off with :gui.
+ */
+#if defined(FEAT_GUI_MSWIN) || (defined(FEAT_GUI_MAC) && !defined(MACOS_X_UNIX))
+# define ALWAYS_USE_GUI
+#endif
+
+/*
  * +dialog_gui         Use GUI dialog.
  * +dialog_con         May use Console dialog.
  *                     When none of these defined there is no dialog support.
         || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_MSWIN) \
         || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC))
 # define FEAT_GUI_TEXTDIALOG
+# ifndef ALWAYS_USE_GUI
+#  define FEAT_CON_DIALOG
+# endif
 #endif
 
 /* Mac specific thing: Codewarrior interface. */
 
 /*
  * MODIFIED_BY         Name of who modified Vim.  Required when distributing
- *                     a modifed version of Vim.
+ *                     a modified version of Vim.
  *                     Also from the "--with-modified-by" configure argument.
  */
 /* #define MODIFIED_BY "John Doe" */
  * +mouse_gpm          Unix only: Include code for Linux console mouse
  *                     handling.
  * +mouse_pterm                PTerm mouse support for QNX
+ * +mouse_sgr          Unix only: Include code for for SGR-styled mouse.
  * +mouse_sysmouse     Unix only: Include code for FreeBSD and DragonFly
  *                     console mouse handling.
+ * +mouse_urxvt                Unix only: Include code for for urxvt mosue handling.
  * +mouse              Any mouse support (any of the above enabled).
  */
 /* OS/2 and Amiga console have no mouse support */
 # ifdef FEAT_BIG
 #  define FEAT_MOUSE_DEC
 # endif
+# ifdef FEAT_BIG
+#  define FEAT_MOUSE_URXVT
+# endif
+# ifdef FEAT_BIG
+#  define FEAT_MOUSE_SGR
+# endif
 # if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
 #  define DOS_MOUSE
 # endif
 # endif
 #endif
 
+/*
+ * Note: Only one of the following may be defined:
+ * FEAT_MOUSE_GPM
+ * FEAT_SYSMOUSE
+ * FEAT_MOUSE_JSB
+ * FEAT_MOUSE_PTERM
+ */
 #if defined(FEAT_NORMAL) && defined(HAVE_GPM)
 # define FEAT_MOUSE_GPM
 #endif
 #if defined(FEAT_NORMAL) && defined(HAVE_SYSMOUSE)
 # define FEAT_SYSMOUSE
 #endif
+
+/* urxvt is a small variation of mouse_xterm, and shares its code */
+#if defined(FEAT_MOUSE_URXVT) && !defined(FEAT_MOUSE_XTERM)
+# define FEAT_MOUSE_XTERM
+#endif
+
+/* sgr is a small variation of mouse_xterm, and shares its code */
+#if defined(FEAT_MOUSE_SGR) && !defined(FEAT_MOUSE_XTERM)
+# define FEAT_MOUSE_XTERM
+#endif
+
 /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
 #if !defined(FEAT_MOUSE_TTY) \
        && (defined(FEAT_MOUSE_XTERM) \
-           || defined(FEAT_MOUSE_NET) || defined(FEAT_MOUSE_DEC) \
-           || defined(DOS_MOUSE) || defined(FEAT_MOUSE_GPM) \
-           || defined(FEAT_MOUSE_JSB) || defined(FEAT_MOUSE_PTERM) \
-           || defined(FEAT_SYSMOUSE))
+           || defined(FEAT_MOUSE_NET) \
+           || defined(FEAT_MOUSE_DEC) \
+           || defined(DOS_MOUSE) \
+           || defined(FEAT_MOUSE_GPM) \
+           || defined(FEAT_MOUSE_JSB) \
+           || defined(FEAT_MOUSE_PTERM) \
+           || defined(FEAT_SYSMOUSE) \
+           || defined(FEAT_MOUSE_URXVT) \
+           || defined(FEAT_MOUSE_SGR))
 # define FEAT_MOUSE_TTY                /* include non-GUI mouse support */
 #endif
 #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
  * +xterm_clipboard    Unix only: Include code for handling the clipboard
  *                     in an xterm like in the GUI.
  */
+
+#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
+# define FEAT_CLIPBOARD
+#endif
+
 #ifdef FEAT_GUI
 # ifndef FEAT_CLIPBOARD
 #  define FEAT_CLIPBOARD
 #ifdef FEAT_NORMAL
 # define FEAT_PERSISTENT_UNDO
 #endif
+
+/*
+ * +filterpipe
+ */
+#if (defined(UNIX) && !defined(USE_SYSTEM)) \
+           || (defined(WIN3264) && defined(FEAT_GUI_W32))
+# define FEAT_FILTERPIPE
+#endif
index b6127d9..b48a83a 100644 (file)
  * fileio.c: read from and write to a file
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"    /* for lseek(), must be before vim.h */
-#endif
-
-#if defined __EMX__
-# include "vimio.h"    /* for mktemp(), CJW 1997-12-03 */
-#endif
-
 #include "vim.h"
 
 #if defined(__TANDEM) || defined(__MINT__)
@@ -258,6 +250,7 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags)
 #ifdef FEAT_CRYPT
     char_u     *cryptkey = NULL;
     int                did_ask_for_key = FALSE;
+    int                crypt_method_used;
 #endif
 #ifdef FEAT_PERSISTENT_UNDO
     context_sha256_T sha_ctx;
@@ -325,7 +318,7 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags)
     int                using_b_fname;
 #endif
 
-    write_no_eol_lnum = 0;     /* in case it was set by the previous read */
+    curbuf->b_no_eol_lnum = 0; /* in case it was set by the previous read */
 
     /*
      * If there is no file name yet, use the one for the read file.
@@ -481,23 +474,8 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags)
     }
 #endif
 
-    /* set default 'fileformat' */
-    if (set_options)
-    {
-       if (eap != NULL && eap->force_ff != 0)
-           set_fileformat(get_fileformat_force(curbuf, eap), OPT_LOCAL);
-       else if (*p_ffs != NUL)
-           set_fileformat(default_fileformat(), OPT_LOCAL);
-    }
-
-    /* set or reset 'binary' */
-    if (eap != NULL && eap->force_bin != 0)
-    {
-       int     oldval = curbuf->b_p_bin;
-
-       curbuf->b_p_bin = (eap->force_bin == FORCE_BIN);
-       set_options_bin(oldval, curbuf->b_p_bin, OPT_LOCAL);
-    }
+    /* Set default or forced 'fileformat' and 'binary'. */
+    set_file_options(set_options, eap);
 
     /*
      * When opening a new file we take the readonly flag from the file.
@@ -511,18 +489,11 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags)
 
     if (newfile && !read_stdin && !read_buffer)
     {
-       /* Remember time of file.
-        * For RISCOS, also remember the filetype.
-        */
+       /* Remember time of file. */
        if (mch_stat((char *)fname, &st) >= 0)
        {
            buf_store_time(curbuf, &st, fname);
            curbuf->b_mtime_read = curbuf->b_mtime;
-
-#if defined(RISCOS) && defined(FEAT_OSFILETYPE)
-           /* Read the filetype into the buffer local filetype option. */
-           mch_read_filetype(fname);
-#endif
 #ifdef UNIX
            /*
             * Use the protection bits of the original file for the swap file.
@@ -564,7 +535,6 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags)
 
 /*
  * for UNIX: check readonly with perm and mch_access()
- * for RISCOS: same as Unix, otherwise file gets re-datestamped!
  * for MSDOS and Amiga: check readonly by trying to open the file for writing
  */
     file_readonly = FALSE;
@@ -662,15 +632,9 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags)
                    check_marks_read();
 #endif
 #ifdef FEAT_MBYTE
-                   if (eap != NULL && eap->force_enc != 0)
-                   {
-                       /* set forced 'fileencoding' */
-                       fenc = enc_canonize(eap->cmd + eap->force_enc);
-                       if (fenc != NULL)
-                           set_string_option_direct((char_u *)"fenc", -1,
-                                                fenc, OPT_FREE|OPT_LOCAL, 0);
-                       vim_free(fenc);
-                   }
+                   /* Set forced 'fileencoding'.  */
+                   if (eap != NULL)
+                       set_forced_fenc(eap);
 #endif
 #ifdef FEAT_AUTOCMD
                    apply_autocmds_exarg(EVENT_BUFNEWFILE, sfname, sfname,
@@ -918,7 +882,7 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags)
            {
                /* Read the first line (and a bit more).  Immediately rewind to
                 * the start of the file.  If the read() fails "len" is -1. */
-               len = vim_read(fd, firstline, 80);
+               len = read_eintr(fd, firstline, 80);
                lseek(fd, (off_t)0L, SEEK_SET);
                for (p = firstline; p < firstline + len; ++p)
                    if (*p >= 0x80)
@@ -1373,7 +1337,7 @@ retry:
                    /*
                     * Read bytes from the file.
                     */
-                   size = vim_read(fd, ptr, size);
+                   size = read_eintr(fd, ptr, size);
                }
 
                if (size <= 0)
@@ -1395,6 +1359,8 @@ retry:
 # endif
                           )
                        {
+                           if (can_retry)
+                               goto rewind_retry;
                            if (conv_error == 0)
                                conv_error = curbuf->b_ml.ml_line_count
                                                                - linecnt + 1;
@@ -2297,6 +2263,7 @@ failed:
        save_file_ff(curbuf);           /* remember the current file format */
 
 #ifdef FEAT_CRYPT
+    crypt_method_used = use_crypt_method;
     if (cryptkey != NULL)
     {
        crypt_pop_state();
@@ -2491,7 +2458,10 @@ failed:
 #ifdef FEAT_CRYPT
            if (cryptkey != NULL)
            {
-               STRCAT(IObuff, _("[crypted]"));
+               if (crypt_method_used == 1)
+                   STRCAT(IObuff, _("[blowfish]"));
+               else
+                   STRCAT(IObuff, _("[crypted]"));
                c = TRUE;
            }
 #endif
@@ -2607,10 +2577,11 @@ failed:
 
     /*
      * Trick: We remember if the last line of the read didn't have
-     * an eol for when writing it again.  This is required for
+     * an eol even when 'binary' is off, for when writing it again with
+     * 'binary' on.  This is required for
      * ":autocmd FileReadPost *.gz set bin|'[,']!gunzip" to work.
      */
-    write_no_eol_lnum = read_no_eol_lnum;
+    curbuf->b_no_eol_lnum = read_no_eol_lnum;
 
     /* When reloading a buffer put the cursor at the first line that is
      * different. */
@@ -2658,10 +2629,10 @@ failed:
                                                            FALSE, NULL, eap);
        if (msg_scrolled == n)
            msg_scroll = m;
-#ifdef FEAT_EVAL
+# ifdef FEAT_EVAL
        if (aborting())     /* autocmds may abort script processing */
            return FAIL;
-#endif
+# endif
     }
 #endif
 
@@ -2746,7 +2717,52 @@ prep_exarg(eap, buf)
     return OK;
 }
 
-#ifdef FEAT_MBYTE
+/*
+ * Set default or forced 'fileformat' and 'binary'.
+ */
+    void
+set_file_options(set_options, eap)
+    int set_options;
+    exarg_T *eap;
+{
+    /* set default 'fileformat' */
+    if (set_options)
+    {
+       if (eap != NULL && eap->force_ff != 0)
+           set_fileformat(get_fileformat_force(curbuf, eap), OPT_LOCAL);
+       else if (*p_ffs != NUL)
+           set_fileformat(default_fileformat(), OPT_LOCAL);
+    }
+
+    /* set or reset 'binary' */
+    if (eap != NULL && eap->force_bin != 0)
+    {
+       int     oldval = curbuf->b_p_bin;
+
+       curbuf->b_p_bin = (eap->force_bin == FORCE_BIN);
+       set_options_bin(oldval, curbuf->b_p_bin, OPT_LOCAL);
+    }
+}
+
+#if defined(FEAT_MBYTE) || defined(PROTO)
+/*
+ * Set forced 'fileencoding'.
+ */
+    void
+set_forced_fenc(eap)
+    exarg_T *eap;
+{
+    if (eap->force_enc != 0)
+    {
+       char_u *fenc = enc_canonize(eap->cmd + eap->force_enc);
+
+       if (fenc != NULL)
+           set_string_option_direct((char_u *)"fenc", -1,
+                                fenc, OPT_FREE|OPT_LOCAL, 0);
+       vim_free(fenc);
+    }
+}
+
 /*
  * Find next fileencoding to use from 'fileencodings'.
  * "pp" points to fenc_next.  It's advanced to the next item.
@@ -3202,6 +3218,9 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
     int                    write_undo_file = FALSE;
     context_sha256_T sha_ctx;
 #endif
+#ifdef FEAT_CRYPT
+    int                    crypt_method_used;
+#endif
 
     if (fname == NULL || *fname == NUL)        /* safety check */
        return FAIL;
@@ -3284,7 +3303,7 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
        overwriting = FALSE;
 
     if (exiting)
-       settmode(TMODE_COOK);       /* when exiting allow typahead now */
+       settmode(TMODE_COOK);       /* when exiting allow typeahead now */
 
     ++no_wait_return;              /* don't wait for return yet */
 
@@ -3308,7 +3327,7 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
        int             empty_memline = (buf->b_ml.ml_mfp == NULL);
 
        /*
-        * Apply PRE aucocommands.
+        * Apply PRE autocommands.
         * Set curbuf to the buffer to be written.
         * Careful: The autocommands may call buf_write() recursively!
         */
@@ -3345,8 +3364,22 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
        }
        else if (reset_changed && whole)
        {
-           if (!(did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
-                                        sfname, sfname, FALSE, curbuf, eap)))
+           int was_changed = curbufIsChanged();
+
+           did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
+                                         sfname, sfname, FALSE, curbuf, eap);
+           if (did_cmd)
+           {
+               if (was_changed && !curbufIsChanged())
+               {
+                   /* Written everything correctly and BufWriteCmd has reset
+                    * 'modified': Correct the undo information so that an
+                    * undo now sets 'modified'. */
+                   u_unchanged(curbuf);
+                   u_update_save_nr(curbuf);
+               }
+           }
+           else
            {
 #ifdef FEAT_QUICKFIX
                if (overwriting && bt_nofile(curbuf))
@@ -3771,12 +3804,12 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
            }
        }
 
-# ifdef UNIX
        /*
         * Break symlinks and/or hardlinks if we've been asked to.
         */
        if ((bkc_flags & BKC_BREAKSYMLINK) || (bkc_flags & BKC_BREAKHARDLINK))
        {
+# ifdef UNIX
            int lstat_res;
 
            lstat_res = mch_lstat((char *)fname, &st);
@@ -3792,20 +3825,24 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
                    && st_old.st_nlink > 1
                    && (lstat_res != 0 || st.st_ino == st_old.st_ino))
                backup_copy = FALSE;
+# else
+#  if defined(WIN32)
+           /* Symlinks. */
+           if ((bkc_flags & BKC_BREAKSYMLINK) && mch_is_symbolic_link(fname))
+               backup_copy = FALSE;
+
+           /* Hardlinks. */
+           if ((bkc_flags & BKC_BREAKHARDLINK) && mch_is_hard_link(fname))
+               backup_copy = FALSE;
+#  endif
+# endif
        }
-#endif
 
 #endif
 
        /* make sure we have a valid backup extension to use */
        if (*p_bex == NUL)
-       {
-#ifdef RISCOS
-           backup_ext = (char_u *)"/bak";
-#else
            backup_ext = (char_u *)".bak";
-#endif
-       }
        else
            backup_ext = p_bex;
 
@@ -4000,7 +4037,7 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
 #ifdef HAS_BW_FLAGS
                        write_info.bw_flags = FIO_NOCONVERT;
 #endif
-                       while ((write_info.bw_len = vim_read(fd, copybuf,
+                       while ((write_info.bw_len = read_eintr(fd, copybuf,
                                                                BUFSIZE)) > 0)
                        {
                            if (buf_write_bytes(&write_info) == FAIL)
@@ -4568,7 +4605,7 @@ restore_backup:
        if (end == 0
                || (lnum == end
                    && write_bin
-                   && (lnum == write_no_eol_lnum
+                   && (lnum == buf->b_no_eol_lnum
                        || (lnum == buf->b_ml.ml_line_count && !buf->b_p_eol))))
        {
            ++lnum;                     /* written the line, count it */
@@ -4719,11 +4756,6 @@ restore_backup:
 #endif
     if (perm >= 0)             /* set perm. of new file same as old file */
        (void)mch_setperm(wfname, perm);
-#ifdef RISCOS
-    if (!append && !filtering)
-       /* Set the filetype after writing the file. */
-       mch_set_filetype(wfname, buf->b_p_oft);
-#endif
 #ifdef HAVE_ACL
     /* Probably need to set the ACL before changing the user (can't set the
      * ACL on a file the user doesn't own). */
@@ -4731,6 +4763,7 @@ restore_backup:
        mch_set_acl(wfname, acl);
 #endif
 #ifdef FEAT_CRYPT
+    crypt_method_used = use_crypt_method;
     if (wb_flags & FIO_ENCRYPTED)
        crypt_pop_state();
 #endif
@@ -4813,7 +4846,7 @@ restore_backup:
 #ifdef HAS_BW_FLAGS
                        write_info.bw_flags = FIO_NOCONVERT;
 #endif
-                       while ((write_info.bw_len = vim_read(fd, smallbuf,
+                       while ((write_info.bw_len = read_eintr(fd, smallbuf,
                                                      SMBUFSIZE)) > 0)
                            if (buf_write_bytes(&write_info) == FAIL)
                                break;
@@ -4885,7 +4918,10 @@ restore_backup:
 #ifdef FEAT_CRYPT
        if (wb_flags & FIO_ENCRYPTED)
        {
-           STRCAT(IObuff, _("[crypted]"));
+           if (crypt_method_used == 1)
+               STRCAT(IObuff, _("[blowfish]"));
+           else
+               STRCAT(IObuff, _("[crypted]"));
            c = TRUE;
        }
 #endif
@@ -5094,7 +5130,7 @@ nofail:
     {
        aco_save_T      aco;
 
-       write_no_eol_lnum = 0;  /* in case it was set by the previous read */
+       curbuf->b_no_eol_lnum = 0;  /* in case it was set by the previous read */
 
        /*
         * Apply POST autocommands.
@@ -5330,7 +5366,7 @@ time_differs(t1, t2)
 
 /*
  * Call write() to write a number of bytes to the file.
- * Also handles encryption and 'encoding' conversion.
+ * Handles encryption and 'encoding' conversion.
  *
  * Return FAIL for failure, OK otherwise.
  */
@@ -5702,16 +5738,8 @@ buf_write_bytes(ip)
        crypt_encode(buf, len, buf);
 #endif
 
-    /* Repeat the write(), it may be interrupted by a signal. */
-    while (len > 0)
-    {
-       wlen = vim_write(ip->bw_fd, buf, len);
-       if (wlen <= 0)              /* error! */
-           return FAIL;
-       len -= wlen;
-       buf += wlen;
-    }
-    return OK;
+    wlen = write_eintr(ip->bw_fd, buf, len);
+    return (wlen < len) ? FAIL : OK;
 }
 
 #ifdef FEAT_MBYTE
@@ -6024,15 +6052,19 @@ make_bom(buf, name)
 shorten_fname1(full_path)
     char_u     *full_path;
 {
-    char_u     dirname[MAXPATHL];
+    char_u     *dirname;
     char_u     *p = full_path;
 
+    dirname = alloc(MAXPATHL);
+    if (dirname == NULL)
+       return full_path;
     if (mch_dirname(dirname, MAXPATHL) == OK)
     {
        p = shorten_fname(full_path, dirname);
        if (p == NULL || *p == NUL)
            p = full_path;
     }
+    vim_free(dirname);
     return p;
 }
 #endif
@@ -6259,19 +6291,17 @@ buf_modname(shortname, fname, ext, prepend_dot)
      */
     for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
     {
-#ifndef RISCOS
        if (*ext == '.'
-# ifdef USE_LONG_FNAME
+#ifdef USE_LONG_FNAME
                    && (!USE_LONG_FNAME || shortname)
-# else
-#  ifndef SHORT_FNAME
+#else
+# ifndef SHORT_FNAME
                    && shortname
-#  endif
 # endif
+#endif
                                                                )
            if (*ptr == '.')    /* replace '.' by '_' */
                *ptr = '_';
-#endif
        if (vim_ispathsep(*ptr))
        {
            ++ptr;
@@ -6306,23 +6336,14 @@ buf_modname(shortname, fname, ext, prepend_dot)
        if (fname == NULL || *fname == NUL
                                   || vim_ispathsep(fname[STRLEN(fname) - 1]))
        {
-#ifdef RISCOS
-           if (*ext == '/')
-#else
            if (*ext == '.')
-#endif
                *s++ = '_';
        }
        /*
         * If the extension starts with '.', truncate the base name at 8
         * characters
         */
-#ifdef RISCOS
-       /* We normally use '/', but swap files are '_' */
-       else if (*ext == '/' || *ext == '_')
-#else
        else if (*ext == '.')
-#endif
        {
            if ((size_t)(s - ptr) > (size_t)8)
            {
@@ -6334,13 +6355,8 @@ buf_modname(shortname, fname, ext, prepend_dot)
         * If the extension doesn't start with '.', and the file name
         * doesn't have an extension yet, append a '.'
         */
-#ifdef RISCOS
-       else if ((e = vim_strchr(ptr, '/')) == NULL)
-           *s++ = '/';
-#else
        else if ((e = vim_strchr(ptr, '.')) == NULL)
            *s++ = '.';
-#endif
        /*
         * If the extension doesn't start with '.', and there already is an
         * extension, it may need to be truncated
@@ -6368,23 +6384,14 @@ buf_modname(shortname, fname, ext, prepend_dot)
     /*
      * Prepend the dot.
      */
-    if (prepend_dot && !shortname && *(e = gettail(retval)) !=
-#ifdef RISCOS
-           '/'
-#else
-           '.'
-#endif
+    if (prepend_dot && !shortname && *(e = gettail(retval)) != '.'
 #ifdef USE_LONG_FNAME
            && USE_LONG_FNAME
 #endif
                                )
     {
        STRMOVE(e + 1, e);
-#ifdef RISCOS
-       *e = '/';
-#else
        *e = '.';
-#endif
     }
 #endif
 
@@ -6514,9 +6521,7 @@ vim_rename(from, to)
 #ifdef HAVE_ACL
     vim_acl_T  acl;            /* ACL from original file */
 #endif
-#if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
     int                use_tmp_file = FALSE;
-#endif
 
     /*
      * When the names are identical, there is nothing to do.  When they refer
@@ -6525,11 +6530,9 @@ vim_rename(from, to)
      */
     if (fnamecmp(from, to) == 0)
     {
-#ifdef CASE_INSENSITIVE_FILENAME
-       if (STRCMP(gettail(from), gettail(to)) != 0)
+       if (p_fic && STRCMP(gettail(from), gettail(to)) != 0)
            use_tmp_file = TRUE;
        else
-#endif
            return 0;
     }
 
@@ -6552,8 +6555,22 @@ vim_rename(from, to)
            use_tmp_file = TRUE;
     }
 #endif
+#ifdef WIN3264
+    {
+       BY_HANDLE_FILE_INFORMATION info1, info2;
+
+       /* It's possible for the source and destination to be the same file.
+        * In that case go through a temp file name.  This makes rename("foo",
+        * "./foo") a no-op (in a complicated way). */
+       if (win32_fileinfo(from, &info1) == FILEINFO_OK
+               && win32_fileinfo(to, &info2) == FILEINFO_OK
+               && info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
+               && info1.nFileIndexHigh == info2.nFileIndexHigh
+               && info1.nFileIndexLow == info2.nFileIndexLow)
+           use_tmp_file = TRUE;
+    }
+#endif
 
-#if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
     if (use_tmp_file)
     {
        char    tempname[MAXPATHL + 1];
@@ -6586,7 +6603,6 @@ vim_rename(from, to)
        }
        return -1;
     }
-#endif
 
     /*
      * Delete the "to" file, this is required on some systems to make the
@@ -6662,8 +6678,8 @@ vim_rename(from, to)
        return -1;
     }
 
-    while ((n = vim_read(fd_in, buffer, BUFSIZE)) > 0)
-       if (vim_write(fd_out, buffer, n) != n)
+    while ((n = read_eintr(fd_in, buffer, BUFSIZE)) > 0)
+       if (write_eintr(fd_out, buffer, n) != n)
        {
            errmsg = _("E208: Error writing to \"%s\"");
            break;
@@ -7024,7 +7040,7 @@ buf_check_timestamp(buf, focus)
                    STRCAT(tbuf, mesg2);
                }
                if (do_dialog(VIM_WARNING, (char_u *)_("Warning"), tbuf,
-                               (char_u *)_("&OK\n&Load File"), 1, NULL) == 2)
+                         (char_u *)_("&OK\n&Load File"), 1, NULL, TRUE) == 2)
                    reload = TRUE;
            }
            else
@@ -7074,8 +7090,23 @@ buf_check_timestamp(buf, focus)
     }
 
     if (reload)
+    {
        /* Reload the buffer. */
        buf_reload(buf, orig_mode);
+#ifdef FEAT_PERSISTENT_UNDO
+       if (buf->b_p_udf && buf->b_ffname != NULL)
+       {
+           char_u          hash[UNDO_HASH_SIZE];
+           buf_T           *save_curbuf = curbuf;
+
+           /* Any existing undo file is unusable, write it now. */
+           curbuf = buf;
+           u_compute_hash(hash);
+           u_write_undo(NULL, FALSE, buf, hash);
+           curbuf = save_curbuf;
+       }
+#endif
+    }
 
 #ifdef FEAT_AUTOCMD
     /* Trigger FileChangedShell when the file was changed in any way. */
@@ -7242,6 +7273,9 @@ buf_reload(buf, orig_mode)
         * reset it, might have had a read error. */
        if (orig_mode == curbuf->b_orig_mode)
            curbuf->b_p_ro |= old_ro;
+
+       /* Modelines must override settings done by autocommands. */
+       do_modelines(0);
     }
 
     /* restore curwin/curbuf and a few other things */
@@ -7272,8 +7306,8 @@ buf_store_time(buf, st, fname)
 write_lnum_adjust(offset)
     linenr_T   offset;
 {
-    if (write_no_eol_lnum != 0)                /* only if there is a missing eol */
-       write_no_eol_lnum += offset;
+    if (curbuf->b_no_eol_lnum != 0)    /* only if there is a missing eol */
+       curbuf->b_no_eol_lnum += offset;
 }
 
 #if defined(TEMPDIRNAMES) || defined(PROTO)
@@ -7475,7 +7509,10 @@ vim_tempname(extra_char)
 
     STRCPY(itmp, "");
     if (GetTempPath(_MAX_PATH, szTempFile) == 0)
-       szTempFile[0] = NUL;    /* GetTempPath() failed, use current dir */
+    {
+       szTempFile[0] = '.';    /* GetTempPath() failed, use current dir */
+       szTempFile[1] = NUL;
+    }
     strcpy(buf4, "VIM");
     buf4[2] = extra_char;   /* make it "VIa", "VIb", etc. */
     if (GetTempFileName(szTempFile, buf4, 0, itmp) == 0)
@@ -7496,8 +7533,11 @@ vim_tempname(extra_char)
 # else /* WIN3264 */
 
 #  ifdef USE_TMPNAM
+    char_u     *p;
+
     /* tmpnam() will make its own name */
-    if (*tmpnam((char *)itmp) == NUL)
+    p = tmpnam((char *)itmp);
+    if (p == NULL || *p == NUL)
        return NULL;
 #  else
     char_u     *p;
@@ -7608,16 +7648,16 @@ typedef struct AutoCmd
 
 typedef struct AutoPat
 {
-    int                    group;              /* group ID */
     char_u         *pat;               /* pattern as typed (NULL when pattern
                                           has been removed) */
-    int                    patlen;             /* strlen() of pat */
     regprog_T      *reg_prog;          /* compiled regprog for pattern */
-    char           allow_dirs;         /* Pattern may match whole path */
-    char           last;               /* last pattern for apply_autocmds() */
     AutoCmd        *cmds;              /* list of commands to do */
     struct AutoPat  *next;             /* next AutoPat in AutoPat list */
+    int                    group;              /* group ID */
+    int                    patlen;             /* strlen() of pat */
     int                    buflocal_nr;        /* !=0 for buffer-local AutoPat */
+    char           allow_dirs;         /* Pattern may match whole path */
+    char           last;               /* last pattern for apply_autocmds() */
 } AutoPat;
 
 static struct event_name
@@ -7651,6 +7691,7 @@ static struct event_name
     {"CmdwinEnter",    EVENT_CMDWINENTER},
     {"CmdwinLeave",    EVENT_CMDWINLEAVE},
     {"ColorScheme",    EVENT_COLORSCHEME},
+    {"CompleteDone",   EVENT_COMPLETEDONE},
     {"CursorHold",     EVENT_CURSORHOLD},
     {"CursorHoldI",    EVENT_CURSORHOLDI},
     {"CursorMoved",    EVENT_CURSORMOVED},
@@ -7682,9 +7723,11 @@ static struct event_name
     {"InsertChange",   EVENT_INSERTCHANGE},
     {"InsertEnter",    EVENT_INSERTENTER},
     {"InsertLeave",    EVENT_INSERTLEAVE},
+    {"InsertCharPre",  EVENT_INSERTCHARPRE},
     {"MenuPopup",      EVENT_MENUPOPUP},
     {"QuickFixCmdPost",        EVENT_QUICKFIXCMDPOST},
     {"QuickFixCmdPre", EVENT_QUICKFIXCMDPRE},
+    {"QuitPre",                EVENT_QUITPRE},
     {"RemoteReply",    EVENT_REMOTEREPLY},
     {"SessionLoadPost",        EVENT_SESSIONLOADPOST},
     {"ShellCmdPost",   EVENT_SHELLCMDPOST},
@@ -7700,6 +7743,8 @@ static struct event_name
     {"TabLeave",       EVENT_TABLEAVE},
     {"TermChanged",    EVENT_TERMCHANGED},
     {"TermResponse",   EVENT_TERMRESPONSE},
+    {"TextChanged",    EVENT_TEXTCHANGED},
+    {"TextChangedI",   EVENT_TEXTCHANGEDI},
     {"User",           EVENT_USER},
     {"VimEnter",       EVENT_VIMENTER},
     {"VimLeave",       EVENT_VIMLEAVE},
@@ -7764,7 +7809,6 @@ static char_u *find_end_event __ARGS((char_u *arg, int have_group));
 static int event_ignored __ARGS((event_T event));
 static int au_get_grouparg __ARGS((char_u **argp));
 static int do_autocmd_event __ARGS((event_T event, char_u *pat, int nested, char_u *cmd, int forceit, int group));
-static char_u *getnextac __ARGS((int c, void *cookie, int indent));
 static int apply_autocmds_group __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, int group, buf_T *buf, exarg_T *eap));
 static void auto_next_pat __ARGS((AutoPatCmd *apc, int stop_at_last));
 
@@ -7911,7 +7955,7 @@ au_cleanup()
            if (ap->pat == NULL)
            {
                *prev_ap = ap->next;
-               vim_free(ap->reg_prog);
+               vim_regfree(ap->reg_prog);
                vim_free(ap);
            }
            else
@@ -8744,6 +8788,8 @@ ex_doautoall(eap)
     int                retval;
     aco_save_T aco;
     buf_T      *buf;
+    char_u     *arg = eap->arg;
+    int                call_do_modelines = check_nomodeline(&arg);
 
     /*
      * This is a bit tricky: For some commands curwin->w_buffer needs to be
@@ -8760,11 +8806,15 @@ ex_doautoall(eap)
            aucmd_prepbuf(&aco, buf);
 
            /* execute the autocommands for this buffer */
-           retval = do_doautocmd(eap->arg, FALSE);
+           retval = do_doautocmd(arg, FALSE);
 
-           /* Execute the modeline settings, but don't set window-local
-            * options if we are using the current window for another buffer. */
-           do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
+           if (call_do_modelines)
+           {
+               /* Execute the modeline settings, but don't set window-local
+                * options if we are using the current window for another
+                * buffer. */
+               do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
+           }
 
            /* restore the current window */
            aucmd_restbuf(&aco);
@@ -8779,6 +8829,23 @@ ex_doautoall(eap)
 }
 
 /*
+ * Check *argp for <nomodeline>.  When it is present return FALSE, otherwise
+ * return TRUE and advance *argp to after it.
+ * Thus return TRUE when do_modelines() should be called.
+ */
+    int
+check_nomodeline(argp)
+    char_u **argp;
+{
+    if (STRNCMP(*argp, "<nomodeline>", 12) == 0)
+    {
+       *argp = skipwhite(*argp + 12);
+       return FALSE;
+    }
+    return TRUE;
+}
+
+/*
  * Prepare for executing autocommands for (hidden) buffer "buf".
  * Search for a visible window containing the current buffer.  If there isn't
  * one then use "aucmd_win".
@@ -8794,6 +8861,9 @@ aucmd_prepbuf(aco, buf)
 #ifdef FEAT_WINDOWS
     int                save_ea;
 #endif
+#ifdef FEAT_AUTOCHDIR
+    int                save_acd;
+#endif
 
     /* Find a window that is for the new buffer */
     if (buf == curbuf)         /* be quick when buf is curbuf */
@@ -8833,7 +8903,7 @@ aucmd_prepbuf(aco, buf)
     else
     {
        /* There is no window for "buf", use "aucmd_win".  To minimize the side
-        * effects, insert it in the current tab page.
+        * effects, insert it in the current tab page.
         * Anything related to a window (e.g., setting folds) may have
         * unexpected results. */
        aco->use_aucmd_win = TRUE;
@@ -8842,11 +8912,10 @@ aucmd_prepbuf(aco, buf)
        aucmd_win->w_s = &buf->b_s;
        ++buf->b_nwindows;
        win_init_empty(aucmd_win); /* set cursor and topline to safe values */
-       vim_free(aucmd_win->w_localdir);
-       aucmd_win->w_localdir = NULL;
 
        /* Make sure w_localdir and globaldir are NULL to avoid a chdir() in
         * win_enter_ext(). */
+       vim_free(aucmd_win->w_localdir);
        aucmd_win->w_localdir = NULL;
        aco->globaldir = globaldir;
        globaldir = NULL;
@@ -8859,9 +8928,19 @@ aucmd_prepbuf(aco, buf)
        make_snapshot(SNAP_AUCMD_IDX);
        save_ea = p_ea;
        p_ea = FALSE;
+
+# ifdef FEAT_AUTOCHDIR
+       /* Prevent chdir() call in win_enter_ext(), through do_autochdir(). */
+       save_acd = p_acd;
+       p_acd = FALSE;
+# endif
+
        (void)win_split_ins(0, WSP_TOP, aucmd_win, 0);
        (void)win_comp_pos();   /* recompute window positions */
        p_ea = save_ea;
+# ifdef FEAT_AUTOCHDIR
+       p_acd = save_acd;
+# endif
        unblock_autocmds();
 #endif
        curwin = aucmd_win;
@@ -8901,12 +8980,13 @@ aucmd_restbuf(aco)
                if (wp == aucmd_win)
                {
                    if (tp != curtab)
-                       goto_tabpage_tp(tp);
+                       goto_tabpage_tp(tp, TRUE, TRUE);
                    win_goto(aucmd_win);
-                   break;
+                   goto win_found;
                }
            }
        }
+win_found:
 
        /* Remove the window and frame from the tree of frames. */
        (void)winframe_remove(curwin, &dummy, NULL);
@@ -8923,8 +9003,8 @@ aucmd_restbuf(aco)
            /* Hmm, original window disappeared.  Just use the first one. */
            curwin = firstwin;
 # ifdef FEAT_EVAL
-       vars_clear(&aucmd_win->w_vars.dv_hashtab);  /* free all w: variables */
-       hash_init(&aucmd_win->w_vars.dv_hashtab);   /* re-use the hashtab */
+       vars_clear(&aucmd_win->w_vars->dv_hashtab);  /* free all w: variables */
+       hash_init(&aucmd_win->w_vars->dv_hashtab);   /* re-use the hashtab */
 # endif
 #else
        curwin = aco->save_curwin;
@@ -8965,6 +9045,10 @@ aucmd_restbuf(aco)
                    && buf_valid(aco->new_curbuf)
                    && aco->new_curbuf->b_ml.ml_mfp != NULL)
            {
+# if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
+               if (curwin->w_s == &curbuf->b_s)
+                   curwin->w_s = &aco->new_curbuf->b_s;
+# endif
                --curbuf->b_nwindows;
                curbuf = aco->new_curbuf;
                curwin->w_buffer = curbuf;
@@ -9063,7 +9147,10 @@ trigger_cursorhold()
 {
     int                state;
 
-    if (!did_cursorhold && has_cursorhold() && !Recording
+    if (!did_cursorhold
+           && has_cursorhold()
+           && !Recording
+           && typebuf.tb_len == 0
 #ifdef FEAT_INS_EXPAND
            && !ins_compl_active()
 #endif
@@ -9094,6 +9181,33 @@ has_cursormovedI()
     return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL);
 }
 
+/*
+ * Return TRUE when there is a TextChanged autocommand defined.
+ */
+    int
+has_textchanged()
+{
+    return (first_autopat[(int)EVENT_TEXTCHANGED] != NULL);
+}
+
+/*
+ * Return TRUE when there is a TextChangedI autocommand defined.
+ */
+    int
+has_textchangedI()
+{
+    return (first_autopat[(int)EVENT_TEXTCHANGEDI] != NULL);
+}
+
+/*
+ * Return TRUE when there is an InsertCharPre autocommand defined.
+ */
+    int
+has_insertcharpre()
+{
+    return (first_autopat[(int)EVENT_INSERTCHARPRE] != NULL);
+}
+
     static int
 apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
     event_T    event;
@@ -9494,6 +9608,12 @@ unblock_autocmds()
 # endif
 }
 
+    int
+is_autocmd_blocked()
+{
+    return autocmd_blocked != 0;
+}
+
 /*
  * Find next autocommand pattern that matches.
  */
@@ -9563,7 +9683,7 @@ auto_next_pat(apc, stop_at_last)
  * Called by do_cmdline() to get the next line for ":if".
  * Returns allocated string, or NULL for end of autocommands.
  */
-    static char_u *
+    char_u *
 getnextac(c, cookie, indent)
     int            c UNUSED;
     void    *cookie;
@@ -9935,11 +10055,7 @@ match_file_pat(pattern, prog, fname, sfname, tail, allow_dirs)
     int                match = FALSE;
 #endif
 
-#ifdef CASE_INSENSITIVE_FILENAME
-    regmatch.rm_ic = TRUE;             /* Always ignore case */
-#else
-    regmatch.rm_ic = FALSE;            /* Don't ever ignore case */
-#endif
+    regmatch.rm_ic = p_fic; /* ignore case if 'fileignorecase' is set */
 #ifdef FEAT_OSFILETYPE
     if (*pattern == '<')
     {
@@ -9954,6 +10070,8 @@ match_file_pat(pattern, prog, fname, sfname, tail, allow_dirs)
            if ((c == ';' || c == '>') && match == FALSE)
            {
                *pattern = NUL;     /* Terminate the string */
+               /* TODO: match with 'filetype' of buffer that "fname" comes
+                * from. */
                match = mch_check_filetype(fname, type_start);
                *pattern = c;       /* Restore the terminator */
                type_start = pattern + 1;
@@ -10004,7 +10122,7 @@ match_file_pat(pattern, prog, fname, sfname, tail, allow_dirs)
        result = TRUE;
 
     if (prog == NULL)
-       vim_free(regmatch.regprog);
+       vim_regfree(regmatch.regprog);
     return result;
 }
 #endif
@@ -10181,19 +10299,11 @@ file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash)
                    ++p;
                break;
            case '.':
-#ifdef RISCOS
-               if (allow_dirs != NULL)
-                    *allow_dirs = TRUE;
-               /* FALLTHROUGH */
-#endif
            case '~':
                reg_pat[i++] = '\\';
                reg_pat[i++] = *p;
                break;
            case '?':
-#ifdef RISCOS
-           case '#':
-#endif
                reg_pat[i++] = '.';
                break;
            case '\\':
@@ -10227,7 +10337,10 @@ file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash)
                 * foo\,bar -> foo,bar
                 * foo\ bar -> foo bar
                 * Don't unescape \, * and others that are also special in a
-                * regexp. */
+                * regexp.
+                * An escaped { must be unescaped since we use magic not
+                * verymagic.  Use "\\\{n,m\}"" to get "\{n,m}".
+                */
                if (*++p == '?'
 #ifdef BACKSLASH_IN_FILENAME
                        && no_bslash
@@ -10235,8 +10348,15 @@ file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash)
                        )
                    reg_pat[i++] = '?';
                else
-                   if (*p == ',' || *p == '%' || *p == '#' || *p == ' ')
+                   if (*p == ',' || *p == '%' || *p == '#'
+                                      || *p == ' ' || *p == '{' || *p == '}')
                        reg_pat[i++] = *p;
+                   else if (*p == '\\' && p[1] == '\\' && p[2] == '{')
+                   {
+                       reg_pat[i++] = '\\';
+                       reg_pat[i++] = '{';
+                       p += 2;
+                   }
                    else
                    {
                        if (allow_dirs != NULL && vim_ispathsep(*p)
@@ -10304,3 +10424,55 @@ file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash)
     }
     return reg_pat;
 }
+
+#if defined(EINTR) || defined(PROTO)
+/*
+ * Version of read() that retries when interrupted by EINTR (possibly
+ * by a SIGWINCH).
+ */
+    long
+read_eintr(fd, buf, bufsize)
+    int            fd;
+    void    *buf;
+    size_t  bufsize;
+{
+    long ret;
+
+    for (;;)
+    {
+       ret = vim_read(fd, buf, bufsize);
+       if (ret >= 0 || errno != EINTR)
+           break;
+    }
+    return ret;
+}
+
+/*
+ * Version of write() that retries when interrupted by EINTR (possibly
+ * by a SIGWINCH).
+ */
+    long
+write_eintr(fd, buf, bufsize)
+    int            fd;
+    void    *buf;
+    size_t  bufsize;
+{
+    long    ret = 0;
+    long    wlen;
+
+    /* Repeat the write() so long it didn't fail, other than being interrupted
+     * by a signal. */
+    while (ret < (long)bufsize)
+    {
+       wlen = vim_write(fd, (char *)buf + ret, bufsize - ret);
+       if (wlen < 0)
+       {
+           if (errno != EINTR)
+               break;
+       }
+       else
+           ret += wlen;
+    }
+    return ret;
+}
+#endif
index 800db61..a1671fe 100644 (file)
@@ -1033,10 +1033,10 @@ foldMoveTo(updown, dir, count)
  * Init the fold info in a new window.
  */
     void
-foldInitWin(newwin)
-    win_T      *newwin;
+foldInitWin(new_win)
+    win_T      *new_win;
 {
-    ga_init2(&newwin->w_folds, (int)sizeof(fold_T), 10);
+    ga_init2(&new_win->w_folds, (int)sizeof(fold_T), 10);
 }
 
 /* find_wl_entry() {{{2 */
@@ -1469,11 +1469,14 @@ deleteFoldEntry(gap, idx, recursive)
     }
     else
     {
-       /* move nested folds one level up, to overwrite the fold that is
+       /* Move nested folds one level up, to overwrite the fold that is
         * deleted. */
        moved = fp->fd_nested.ga_len;
        if (ga_grow(gap, (int)(moved - 1)) == OK)
        {
+           /* Get "fp" again, the array may have been reallocated. */
+           fp = (fold_T *)gap->ga_data + idx;
+
            /* adjust fd_top and fd_flags for the moved folds */
            nfp = (fold_T *)fp->fd_nested.ga_data;
            for (i = 0; i < moved; ++i)
@@ -1486,9 +1489,9 @@ deleteFoldEntry(gap, idx, recursive)
            }
 
            /* move the existing folds down to make room */
-           if (idx < gap->ga_len)
+           if (idx + 1 < gap->ga_len)
                mch_memmove(fp + moved, fp + 1,
-                                       sizeof(fold_T) * (gap->ga_len - idx));
+                                 sizeof(fold_T) * (gap->ga_len - (idx + 1)));
            /* move the contained folds one level up */
            mch_memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved));
            vim_free(nfp);
@@ -1927,8 +1930,22 @@ get_foldtext(wp, lnum, lnume, foldinfo, buf)
     char_u     *buf;
 {
     char_u     *text = NULL;
-
 #ifdef FEAT_EVAL
+     /* an error occurred when evaluating 'fdt' setting */
+    static int     got_fdt_error = FALSE;
+    int                    save_did_emsg = did_emsg;
+    static win_T    *last_wp = NULL;
+    static linenr_T last_lnum = 0;
+
+    if (last_wp != wp || last_wp == NULL
+                                       || last_lnum > lnum || last_lnum == 0)
+       /* window changed, try evaluating foldtext setting once again */
+       got_fdt_error = FALSE;
+
+    if (!got_fdt_error)
+       /* a previous error should not abort evaluating 'foldexpr' */
+       did_emsg = FALSE;
+
     if (*wp->w_p_fdt != NUL)
     {
        char_u  dashes[MAX_LEVEL + 2];
@@ -1949,19 +1966,32 @@ get_foldtext(wp, lnum, lnume, foldinfo, buf)
        dashes[level] = NUL;
        set_vim_var_string(VV_FOLDDASHES, dashes, -1);
        set_vim_var_nr(VV_FOLDLEVEL, (long)level);
-       save_curwin = curwin;
-       curwin = wp;
-       curbuf = wp->w_buffer;
 
-       ++emsg_off;
-       text = eval_to_string_safe(wp->w_p_fdt, NULL,
+       /* skip evaluating foldtext on errors */
+       if (!got_fdt_error)
+       {
+           save_curwin = curwin;
+           curwin = wp;
+           curbuf = wp->w_buffer;
+
+           ++emsg_silent; /* handle exceptions, but don't display errors */
+           text = eval_to_string_safe(wp->w_p_fdt, NULL,
                         was_set_insecurely((char_u *)"foldtext", OPT_LOCAL));
-       --emsg_off;
+           --emsg_silent;
+
+           if (text == NULL || did_emsg)
+               got_fdt_error = TRUE;
 
-       curwin = save_curwin;
-       curbuf = curwin->w_buffer;
+           curwin = save_curwin;
+           curbuf = curwin->w_buffer;
+       }
+       last_lnum = lnum;
+       last_wp   = wp;
        set_vim_var_string(VV_FOLDDASHES, NULL, -1);
 
+       if (!did_emsg && save_did_emsg)
+           did_emsg = save_did_emsg;
+
        if (text != NULL)
        {
            /* Replace unprintable characters, if there are any.  But
@@ -3022,7 +3052,7 @@ foldlevelIndent(flp)
            flp->lvl = -1;
     }
     else
-       flp->lvl = get_indent_buf(buf, lnum) / buf->b_p_sw;
+       flp->lvl = get_indent_buf(buf, lnum) / get_sw_value();
     if (flp->lvl > flp->wp->w_p_fdn)
     {
        flp->lvl = flp->wp->w_p_fdn;
@@ -3289,7 +3319,8 @@ foldlevelSyntax(flp)
 /* put_folds() {{{2 */
 #if defined(FEAT_SESSION) || defined(PROTO)
 static int put_folds_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
-static int put_foldopen_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
+static int put_foldopen_recurse __ARGS((FILE *fd, win_T *wp, garray_T *gap, linenr_T off));
+static int put_fold_open_close __ARGS((FILE *fd, fold_T *fp, linenr_T off));
 
 /*
  * Write commands to "fd" to restore the manual folds in window "wp".
@@ -3309,7 +3340,7 @@ put_folds(fd, wp)
 
     /* If some folds are manually opened/closed, need to restore that. */
     if (wp->w_fold_manual)
-       return put_foldopen_recurse(fd, &wp->w_folds, (linenr_T)0);
+       return put_foldopen_recurse(fd, wp, &wp->w_folds, (linenr_T)0);
 
     return OK;
 }
@@ -3349,12 +3380,14 @@ put_folds_recurse(fd, gap, off)
  * Returns FAIL when writing failed.
  */
     static int
-put_foldopen_recurse(fd, gap, off)
+put_foldopen_recurse(fd, wp, gap, off)
     FILE       *fd;
+    win_T      *wp;
     garray_T   *gap;
     linenr_T   off;
 {
     int                i;
+    int                level;
     fold_T     *fp;
 
     fp = (fold_T *)gap->ga_data;
@@ -3364,27 +3397,60 @@ put_foldopen_recurse(fd, gap, off)
        {
            if (fp->fd_nested.ga_len > 0)
            {
-               /* open/close nested folds while this fold is open */
+               /* open nested folds while this fold is open */
                if (fprintf(fd, "%ld", fp->fd_top + off) < 0
                        || put_eol(fd) == FAIL
-                       || put_line(fd, "normal zo") == FAIL)
+                       || put_line(fd, "normal! zo") == FAIL)
                    return FAIL;
-               if (put_foldopen_recurse(fd, &fp->fd_nested, off + fp->fd_top)
+               if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
+                                                            off + fp->fd_top)
                        == FAIL)
                    return FAIL;
+               /* close the parent when needed */
+               if (fp->fd_flags == FD_CLOSED)
+               {
+                   if (put_fold_open_close(fd, fp, off) == FAIL)
+                       return FAIL;
+               }
+           }
+           else
+           {
+               /* Open or close the leaf according to the window foldlevel.
+                * Do not close a leaf that is already closed, as it will close
+                * the parent. */
+               level = foldLevelWin(wp, off + fp->fd_top);
+               if ((fp->fd_flags == FD_CLOSED && wp->w_p_fdl >= level)
+                       || (fp->fd_flags != FD_CLOSED && wp->w_p_fdl < level))
+               if (put_fold_open_close(fd, fp, off) == FAIL)
+                   return FAIL;
            }
-           if (fprintf(fd, "%ld", fp->fd_top + off) < 0
-                   || put_eol(fd) == FAIL
-                   || fprintf(fd, "normal z%c",
-                                   fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
-                   || put_eol(fd) == FAIL)
-               return FAIL;
        }
        ++fp;
     }
 
     return OK;
 }
+
+/* put_fold_open_close() {{{2 */
+/*
+ * Write the open or close command to "fd".
+ * Returns FAIL when writing failed.
+ */
+    static int
+put_fold_open_close(fd, fp, off)
+    FILE       *fd;
+    fold_T     *fp;
+    linenr_T   off;
+{
+    if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+           || put_eol(fd) == FAIL
+           || fprintf(fd, "normal! z%c",
+                          fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
+           || put_eol(fd) == FAIL)
+       return FAIL;
+
+    return OK;
+}
 #endif /* FEAT_SESSION */
 
 /* }}}1 */
index c892b46..fe6423d 100644 (file)
@@ -418,12 +418,12 @@ typeahead_noflush(c)
 
 /*
  * Remove the contents of the stuff buffer and the mapped characters in the
- * typeahead buffer (used in case of an error).  If 'typeahead' is true,
+ * typeahead buffer (used in case of an error).  If "flush_typeahead" is true,
  * flush all typeahead characters (used when interrupted by a CTRL-C).
  */
     void
-flush_buffers(typeahead)
-    int typeahead;
+flush_buffers(flush_typeahead)
+    int flush_typeahead;
 {
     init_typebuf();
 
@@ -431,7 +431,7 @@ flush_buffers(typeahead)
     while (read_stuff(TRUE) != NUL)
        ;
 
-    if (typeahead)         /* remove all typeahead */
+    if (flush_typeahead)           /* remove all typeahead */
     {
        /*
         * We have to get all characters, because we may delete the first part
@@ -444,7 +444,7 @@ flush_buffers(typeahead)
        typebuf.tb_off = MAXMAPLEN;
        typebuf.tb_len = 0;
     }
-    else                   /* remove mapped characters only */
+    else                   /* remove mapped characters at the start only */
     {
        typebuf.tb_off += typebuf.tb_maplen;
        typebuf.tb_len -= typebuf.tb_maplen;
@@ -470,6 +470,24 @@ ResetRedobuff()
     }
 }
 
+/*
+ * Discard the contents of the redo buffer and restore the previous redo
+ * buffer.
+ */
+    void
+CancelRedo()
+{
+    if (!block_redo)
+    {
+       free_buff(&redobuff);
+       redobuff = old_redobuff;
+       old_redobuff.bh_first.b_next = NULL;
+       start_stuff();
+       while (read_stuff(TRUE) != NUL)
+           ;
+    }
+}
+
 #if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
 /*
  * Save redobuff and old_redobuff to save_redobuff and save_old_redobuff.
@@ -635,11 +653,14 @@ stuffReadbuffLen(s, len)
 /*
  * Stuff "s" into the stuff buffer, leaving special key codes unmodified and
  * escaping other K_SPECIAL and CSI bytes.
+ * Change CR, LF and ESC into a space.
  */
     void
 stuffReadbuffSpec(s)
     char_u     *s;
 {
+    int c;
+
     while (*s != NUL)
     {
        if (*s == K_SPECIAL && s[1] != NUL && s[2] != NUL)
@@ -649,11 +670,16 @@ stuffReadbuffSpec(s)
            s += 3;
        }
        else
+       {
 #ifdef FEAT_MBYTE
-           stuffcharReadbuff(mb_ptr2char_adv(&s));
+           c = mb_ptr2char_adv(&s);
 #else
-           stuffcharReadbuff(*s++);
+           c = *s++;
 #endif
+           if (c == CAR || c == NL || c == ESC)
+               c = ' ';
+           stuffcharReadbuff(c);
+       }
     }
 }
 #endif
@@ -683,9 +709,9 @@ stuffnumReadbuff(n)
  * Read a character from the redo buffer.  Translates K_SPECIAL, CSI and
  * multibyte characters.
  * The redo buffer is left as it is.
- * if init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
- * otherwise
- * if old is TRUE, use old_redobuff instead of redobuff
+ * If init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
+ * otherwise.
+ * If old is TRUE, use old_redobuff instead of redobuff.
  */
     static int
 read_redo(init, old_redo)
@@ -697,7 +723,7 @@ read_redo(init, old_redo)
     int                                c;
 #ifdef FEAT_MBYTE
     int                                n;
-    char_u                     buf[MB_MAXBYTES];
+    char_u                     buf[MB_MAXBYTES + 1];
     int                                i;
 #endif
 
@@ -1046,7 +1072,7 @@ ins_char_typebuf(c)
     int            c;
 {
 #ifdef FEAT_MBYTE
-    char_u     buf[MB_MAXBYTES];
+    char_u     buf[MB_MAXBYTES + 1];
 #else
     char_u     buf[4];
 #endif
@@ -1311,6 +1337,10 @@ save_typebuf()
 
 static int old_char = -1;      /* character put back by vungetc() */
 static int old_mod_mask;       /* mod_mask for ungotten character */
+#ifdef FEAT_MOUSE
+static int old_mouse_row;      /* mouse_row related to old_char */
+static int old_mouse_col;      /* mouse_col related to old_char */
+#endif
 
 #if defined(FEAT_EVAL) || defined(FEAT_EX_EXTRA) || defined(PROTO)
 
@@ -1506,9 +1536,6 @@ updatescript(c)
     }
 }
 
-#define KL_PART_KEY -1         /* keylen value for incomplete key-code */
-#define KL_PART_MAP -2         /* keylen value for incomplete mapping */
-
 /*
  * Get the next input character.
  * Can return a special key or a multi-byte character.
@@ -1524,7 +1551,7 @@ vgetc()
     int                c, c2;
 #ifdef FEAT_MBYTE
     int                n;
-    char_u     buf[MB_MAXBYTES];
+    char_u     buf[MB_MAXBYTES + 1];
     int                i;
 #endif
 
@@ -1544,6 +1571,10 @@ vgetc()
        c = old_char;
        old_char = -1;
        mod_mask = old_mod_mask;
+#ifdef FEAT_MOUSE
+       mouse_row = old_mouse_row;
+       mouse_col = old_mouse_col;
+#endif
     }
     else
     {
@@ -1854,6 +1885,10 @@ vungetc(c)       /* unget one character (can only be done once!) */
 {
     old_char = c;
     old_mod_mask = mod_mask;
+#ifdef FEAT_MOUSE
+    old_mouse_row = mouse_row;
+    old_mouse_col = mouse_col;
+#endif
 }
 
 /*
@@ -2072,6 +2107,7 @@ vgetorpeek(advance)
                        mp2 = maphash[MAP_HASH(local_State, c1)];
                        if (mp == NULL)
                        {
+                           /* There are no buffer-local mappings. */
                            mp = mp2;
                            mp2 = NULL;
                        }
@@ -2168,10 +2204,11 @@ vgetorpeek(advance)
 
                                    if (keylen > typebuf.tb_len)
                                    {
-                                       if (!timedout)
+                                       if (!timedout && !(mp_match != NULL
+                                                      && mp_match->m_nowait))
                                        {
                                            /* break at a partly match */
-                                           keylen = KL_PART_MAP;
+                                           keylen = KEYLEN_PART_MAP;
                                            break;
                                        }
                                    }
@@ -2192,7 +2229,7 @@ vgetorpeek(advance)
 
                        /* If no partly match found, use the longest full
                         * match. */
-                       if (keylen != KL_PART_MAP)
+                       if (keylen != KEYLEN_PART_MAP)
                        {
                            mp = mp_match;
                            keylen = mp_match_len;
@@ -2230,7 +2267,7 @@ vgetorpeek(advance)
                        }
                        /* Need more chars for partly match. */
                        if (mlen == typebuf.tb_len)
-                           keylen = KL_PART_KEY;
+                           keylen = KEYLEN_PART_KEY;
                        else if (max_mlen < mlen)
                            /* no match, may have to check for termcode at
                             * next character */
@@ -2238,7 +2275,7 @@ vgetorpeek(advance)
                    }
 
                    if ((mp == NULL || max_mlen >= mp_match_len)
-                                                    && keylen != KL_PART_MAP)
+                                                && keylen != KEYLEN_PART_MAP)
                    {
                        int     save_keylen = keylen;
 
@@ -2259,13 +2296,14 @@ vgetorpeek(advance)
                                                   typebuf.tb_off] == RM_YES))
                                && !timedout)
                        {
-                           keylen = check_termcode(max_mlen + 1, NULL, 0);
+                           keylen = check_termcode(max_mlen + 1,
+                                                              NULL, 0, NULL);
 
                            /* If no termcode matched but 'pastetoggle'
                             * matched partially it's like an incomplete key
                             * sequence. */
-                           if (keylen == 0 && save_keylen == KL_PART_KEY)
-                               keylen = KL_PART_KEY;
+                           if (keylen == 0 && save_keylen == KEYLEN_PART_KEY)
+                               keylen = KEYLEN_PART_KEY;
 
                            /*
                             * When getting a partial match, but the last
@@ -2302,7 +2340,7 @@ vgetorpeek(advance)
                                    continue;
                                }
                                if (*s == NUL)      /* need more characters */
-                                   keylen = KL_PART_KEY;
+                                   keylen = KEYLEN_PART_KEY;
                            }
                            if (keylen >= 0)
 #endif
@@ -2339,7 +2377,8 @@ vgetorpeek(advance)
                        if (keylen > 0)     /* full matching terminal code */
                        {
 #if defined(FEAT_GUI) && defined(FEAT_MENU)
-                           if (typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
+                           if (typebuf.tb_len >= 2
+                               && typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
                                         && typebuf.tb_buf[typebuf.tb_off + 1]
                                                                   == KS_MENU)
                            {
@@ -2381,7 +2420,7 @@ vgetorpeek(advance)
                        /* Partial match: get some more characters.  When a
                         * matching mapping was found use that one. */
                        if (mp == NULL || keylen < 0)
-                           keylen = KL_PART_KEY;
+                           keylen = KEYLEN_PART_KEY;
                        else
                            keylen = mp_match_len;
                    }
@@ -2454,27 +2493,18 @@ vgetorpeek(advance)
 
                        /*
                         * Handle ":map <expr>": evaluate the {rhs} as an
-                        * expression.  Save and restore the typeahead so that
-                        * getchar() can be used.  Also save and restore the
-                        * command line for "normal :".
+                        * expression.  Also save and restore the command line
+                        * for "normal :".
                         */
                        if (mp->m_expr)
                        {
-                           tasave_T    tabuf;
                            int         save_vgetc_busy = vgetc_busy;
 
-                           save_typeahead(&tabuf);
-                           if (tabuf.typebuf_valid)
-                           {
-                               vgetc_busy = 0;
-                               save_m_keys = vim_strsave(mp->m_keys);
-                               save_m_str = vim_strsave(mp->m_str);
-                               s = eval_map_expr(save_m_str, NUL);
-                               vgetc_busy = save_vgetc_busy;
-                           }
-                           else
-                               s = NULL;
-                           restore_typeahead(&tabuf);
+                           vgetc_busy = 0;
+                           save_m_keys = vim_strsave(mp->m_keys);
+                           save_m_str = vim_strsave(mp->m_str);
+                           s = eval_map_expr(save_m_str, NUL);
+                           vgetc_busy = save_vgetc_busy;
                        }
                        else
 #endif
@@ -2553,7 +2583,8 @@ vgetorpeek(advance)
 #endif
                        && typebuf.tb_maplen == 0
                        && (State & INSERT)
-                       && (p_timeout || (keylen == KL_PART_KEY && p_ttimeout))
+                       && (p_timeout
+                           || (keylen == KEYLEN_PART_KEY && p_ttimeout))
                        && (c = inchar(typebuf.tb_buf + typebuf.tb_off
                                                     + typebuf.tb_len, 3, 25L,
                                                 typebuf.tb_change_cnt)) == 0)
@@ -2711,8 +2742,11 @@ vgetorpeek(advance)
                 * are still available.  But when those available characters
                 * are part of a mapping, and we are going to do a blocking
                 * wait here.  Need to update the screen to display the
-                * changed text so far. */
-               if ((State & INSERT) && advance && must_redraw != 0)
+                * changed text so far. Also for when 'lazyredraw' is set and
+                * redrawing was postponed because there was something in the
+                * input buffer (e.g., termresponse). */
+               if (((State & INSERT) != 0 || p_lz) && (State & CMDLINE) == 0
+                         && advance && must_redraw != 0 && !need_wait_return)
                {
                    update_screen(0);
                    setcursor(); /* put cursor back where it belongs */
@@ -2783,9 +2817,9 @@ vgetorpeek(advance)
                            ? 0
                            : ((typebuf.tb_len == 0
                                    || !(p_timeout || (p_ttimeout
-                                                  && keylen == KL_PART_KEY)))
+                                              && keylen == KEYLEN_PART_KEY)))
                                    ? -1L
-                                   : ((keylen == KL_PART_KEY && p_ttm >= 0)
+                                   : ((keylen == KEYLEN_PART_KEY && p_ttm >= 0)
                                            ? p_ttm
                                            : p_tm)), typebuf.tb_change_cnt);
 
@@ -2799,7 +2833,8 @@ vgetorpeek(advance)
                        edit_unputchar();
                    if (State & CMDLINE)
                        unputcmdline();
-                   setcursor();        /* put cursor back where it belongs */
+                   else
+                       setcursor();    /* put cursor back where it belongs */
                }
 
                if (c < 0)
@@ -3162,12 +3197,14 @@ do_map(maptype, arg, mode, abbrev)
     mapblock_T **abbr_table;
     mapblock_T **map_table;
     int                unique = FALSE;
+    int                nowait = FALSE;
     int                silent = FALSE;
     int                special = FALSE;
 #ifdef FEAT_EVAL
     int                expr = FALSE;
 #endif
     int                noremap;
+    char_u      *orig_rhs;
 
     keys = arg;
     map_table = maphash;
@@ -3179,7 +3216,8 @@ do_map(maptype, arg, mode, abbrev)
     else
        noremap = REMAP_YES;
 
-    /* Accept <buffer>, <silent>, <expr> <script> and <unique> in any order. */
+    /* Accept <buffer>, <nowait>, <silent>, <expr> <script> and <unique> in
+     * any order. */
     for (;;)
     {
 #ifdef FEAT_LOCALMAP
@@ -3196,6 +3234,16 @@ do_map(maptype, arg, mode, abbrev)
 #endif
 
        /*
+        * Check for "<nowait>": don't wait for more characters.
+        */
+       if (STRNCMP(keys, "<nowait>", 8) == 0)
+       {
+           keys = skipwhite(keys + 8);
+           nowait = TRUE;
+           continue;
+       }
+
+       /*
         * Check for "<silent>": don't echo commands.
         */
        if (STRNCMP(keys, "<silent>", 8) == 0)
@@ -3251,9 +3299,9 @@ do_map(maptype, arg, mode, abbrev)
     validate_maphash();
 
     /*
-     * find end of keys and skip CTRL-Vs (and backslashes) in it
+     * Find end of keys and skip CTRL-Vs (and backslashes) in it.
      * Accept backslash like CTRL-V when 'cpoptions' does not contain 'B'.
-     * with :unmap white space is included in the keys, no argument possible
+     * with :unmap white space is included in the keys, no argument possible.
      */
     p = keys;
     do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
@@ -3266,6 +3314,7 @@ do_map(maptype, arg, mode, abbrev)
     }
     if (*p != NUL)
        *p++ = NUL;
+
     p = skipwhite(p);
     rhs = p;
     hasarg = (*rhs != NUL);
@@ -3288,6 +3337,7 @@ do_map(maptype, arg, mode, abbrev)
      */
     if (haskey)
        keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, special);
+    orig_rhs = rhs;
     if (hasarg)
     {
        if (STRICMP(rhs, "<nop>") == 0)     /* "<Nop>" means nothing */
@@ -3298,7 +3348,7 @@ do_map(maptype, arg, mode, abbrev)
 
 #ifdef FEAT_FKMAP
     /*
-     * when in right-to-left mode and alternate keymap option set,
+     * When in right-to-left mode and alternate keymap option set,
      * reverse the character flow in the rhs in Farsi.
      */
     if (p_altkeymap && curwin->w_p_rl)
@@ -3556,7 +3606,10 @@ do_map(maptype, arg, mode, abbrev)
                                }
                                vim_free(mp->m_str);
                                mp->m_str = newstr;
+                               vim_free(mp->m_orig_str);
+                               mp->m_orig_str = vim_strsave(orig_rhs);
                                mp->m_noremap = noremap;
+                               mp->m_nowait = nowait;
                                mp->m_silent = silent;
                                mp->m_mode = mode;
 #ifdef FEAT_EVAL
@@ -3633,16 +3686,19 @@ do_map(maptype, arg, mode, abbrev)
 
     mp->m_keys = vim_strsave(keys);
     mp->m_str = vim_strsave(rhs);
+    mp->m_orig_str = vim_strsave(orig_rhs);
     if (mp->m_keys == NULL || mp->m_str == NULL)
     {
        vim_free(mp->m_keys);
        vim_free(mp->m_str);
+       vim_free(mp->m_orig_str);
        vim_free(mp);
        retval = 4;     /* no mem */
        goto theend;
     }
     mp->m_keylen = (int)STRLEN(mp->m_keys);
     mp->m_noremap = noremap;
+    mp->m_nowait = nowait;
     mp->m_silent = silent;
     mp->m_mode = mode;
 #ifdef FEAT_EVAL
@@ -3682,6 +3738,7 @@ map_free(mpp)
     mp = *mpp;
     vim_free(mp->m_keys);
     vim_free(mp->m_str);
+    vim_free(mp->m_orig_str);
     *mpp = mp->m_next;
     vim_free(mp);
 }
@@ -3851,12 +3908,57 @@ map_clear_int(buf, mode, local, abbr)
     }
 }
 
+/*
+ * Return characters to represent the map mode in an allocated string.
+ * Returns NULL when out of memory.
+ */
+    char_u *
+map_mode_to_chars(mode)
+    int mode;
+{
+    garray_T    mapmode;
+
+    ga_init2(&mapmode, 1, 7);
+
+    if ((mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
+       ga_append(&mapmode, '!');                       /* :map! */
+    else if (mode & INSERT)
+       ga_append(&mapmode, 'i');                       /* :imap */
+    else if (mode & LANGMAP)
+       ga_append(&mapmode, 'l');                       /* :lmap */
+    else if (mode & CMDLINE)
+       ga_append(&mapmode, 'c');                       /* :cmap */
+    else if ((mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
+                                == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
+       ga_append(&mapmode, ' ');                       /* :map */
+    else
+    {
+       if (mode & NORMAL)
+           ga_append(&mapmode, 'n');                   /* :nmap */
+       if (mode & OP_PENDING)
+           ga_append(&mapmode, 'o');                   /* :omap */
+       if ((mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
+           ga_append(&mapmode, 'v');                   /* :vmap */
+       else
+       {
+           if (mode & VISUAL)
+               ga_append(&mapmode, 'x');               /* :xmap */
+           if (mode & SELECTMODE)
+               ga_append(&mapmode, 's');               /* :smap */
+       }
+    }
+
+    ga_append(&mapmode, NUL);
+    return (char_u *)mapmode.ga_data;
+}
+
     static void
 showmap(mp, local)
     mapblock_T *mp;
     int                local;      /* TRUE for buffer-local map */
 {
-    int len = 1;
+    int                len = 1;
+    char_u     *mapchars;
 
     if (msg_didout || msg_silent != 0)
     {
@@ -3864,49 +3966,15 @@ showmap(mp, local)
        if (got_int)        /* 'q' typed at MORE prompt */
            return;
     }
-    if ((mp->m_mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
-       msg_putchar('!');                       /* :map! */
-    else if (mp->m_mode & INSERT)
-       msg_putchar('i');                       /* :imap */
-    else if (mp->m_mode & LANGMAP)
-       msg_putchar('l');                       /* :lmap */
-    else if (mp->m_mode & CMDLINE)
-       msg_putchar('c');                       /* :cmap */
-    else if ((mp->m_mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
-                                == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
-       msg_putchar(' ');                       /* :map */
-    else
+
+    mapchars = map_mode_to_chars(mp->m_mode);
+    if (mapchars != NULL)
     {
-       len = 0;
-       if (mp->m_mode & NORMAL)
-       {
-           msg_putchar('n');           /* :nmap */
-           ++len;
-       }
-       if (mp->m_mode & OP_PENDING)
-       {
-           msg_putchar('o');           /* :omap */
-           ++len;
-       }
-       if ((mp->m_mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
-       {
-           msg_putchar('v');           /* :vmap */
-           ++len;
-       }
-       else
-       {
-           if (mp->m_mode & VISUAL)
-           {
-               msg_putchar('x');               /* :xmap */
-               ++len;
-           }
-           if (mp->m_mode & SELECTMODE)
-           {
-               msg_putchar('s');               /* :smap */
-               ++len;
-           }
-       }
+       msg_puts(mapchars);
+       len = (int)STRLEN(mapchars);
+       vim_free(mapchars);
     }
+
     while (++len <= 3)
        msg_putchar(' ');
 
@@ -3931,12 +3999,21 @@ showmap(mp, local)
        msg_putchar(' ');
 
     /* Use FALSE below if we only want things like <Up> to show up as such on
-     * the rhs, and not M-x etc, TRUE gets both -- webb
-     */
+     * the rhs, and not M-x etc, TRUE gets both -- webb */
     if (*mp->m_str == NUL)
        msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
     else
-       msg_outtrans_special(mp->m_str, FALSE);
+    {
+       /* Remove escaping of CSI, because "m_str" is in a format to be used
+        * as typeahead. */
+       char_u *s = vim_strsave(mp->m_str);
+       if (s != NULL)
+       {
+           vim_unescape_csi(s);
+           msg_outtrans_special(s, FALSE);
+           vim_free(s);
+       }
+    }
 #ifdef FEAT_EVAL
     if (p_verbose > 0)
        last_set_msg(mp->m_script_ID);
@@ -4100,6 +4177,11 @@ set_context_in_map_cmd(xp, cmd, arg, forceit, isabbrev, isunmap, cmdidx)
                arg = skipwhite(arg + 8);
                continue;
            }
+           if (STRNCMP(arg, "<nowait>", 8) == 0)
+           {
+               arg = skipwhite(arg + 8);
+               continue;
+           }
            if (STRNCMP(arg, "<silent>", 8) == 0)
            {
                arg = skipwhite(arg + 8);
@@ -4156,7 +4238,7 @@ ExpandMappings(regmatch, num_file, file)
     {
        count = 0;
 
-       for (i = 0; i < 5; ++i)
+       for (i = 0; i < 6; ++i)
        {
            if (i == 0)
                p = (char_u *)"<silent>";
@@ -4172,6 +4254,8 @@ ExpandMappings(regmatch, num_file, file)
            else if (i == 4 && !expand_buffer)
                p = (char_u *)"<buffer>";
 #endif
+           else if (i == 5)
+               p = (char_u *)"<nowait>";
            else
                continue;
 
@@ -4287,11 +4371,7 @@ check_abbr(c, ptr, col, mincol)
     int                scol;           /* starting column of the abbr. */
     int                j;
     char_u     *s;
-#ifdef FEAT_MBYTE
     char_u     tb[MB_MAXBYTES + 4];
-#else
-    char_u     tb[4];
-#endif
     mapblock_T *mp;
 #ifdef FEAT_LOCALMAP
     mapblock_T *mp2;
@@ -4304,8 +4384,9 @@ check_abbr(c, ptr, col, mincol)
 
     if (typebuf.tb_no_abbr_cnt)        /* abbrev. are not recursive */
        return FALSE;
-    if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0)
-       /* no remapping implies no abbreviation */
+
+    /* no remapping implies no abbreviation, except for CTRL-] */
+    if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0 && c != Ctrl_RSB)
        return FALSE;
 
     /*
@@ -4478,12 +4559,25 @@ eval_map_expr(str, c)
 {
     char_u     *res;
     char_u     *p;
+    char_u     *expr;
     char_u     *save_cmd;
     pos_T      save_cursor;
+    int                save_msg_col;
+    int                save_msg_row;
+
+    /* Remove escaping of CSI, because "str" is in a format to be used as
+     * typeahead. */
+    expr = vim_strsave(str);
+    if (expr == NULL)
+       return NULL;
+    vim_unescape_csi(expr);
 
     save_cmd = save_cmdline_alloc();
     if (save_cmd == NULL)
+    {
+       vim_free(expr);
        return NULL;
+    }
 
     /* Forbid changing text or using ":normal" to avoid most of the bad side
      * effects.  Also restore the cursor position. */
@@ -4493,16 +4587,23 @@ eval_map_expr(str, c)
 #endif
     set_vim_var_char(c);  /* set v:char to the typed character */
     save_cursor = curwin->w_cursor;
-    p = eval_to_string(str, NULL, FALSE);
+    save_msg_col = msg_col;
+    save_msg_row = msg_row;
+    p = eval_to_string(expr, NULL, FALSE);
     --textlock;
 #ifdef FEAT_EX_EXTRA
     --ex_normal_lock;
 #endif
     curwin->w_cursor = save_cursor;
+    msg_col = save_msg_col;
+    msg_row = save_msg_row;
 
     restore_cmdline_alloc(save_cmd);
+    vim_free(expr);
+
     if (p == NULL)
        return NULL;
+    /* Escape CSI in the result to be able to use the string as typeahead. */
     res = vim_strsave_escape_csi(p);
     vim_free(p);
 
@@ -4538,9 +4639,21 @@ vim_strsave_escape_csi(p)
            }
            else
            {
+#ifdef FEAT_MBYTE
+               int len  = mb_char2len(PTR2CHAR(s));
+               int len2 = mb_ptr2len(s);
+#endif
                /* Add character, possibly multi-byte to destination, escaping
                 * CSI and K_SPECIAL. */
                d = add_char2buf(PTR2CHAR(s), d);
+#ifdef FEAT_MBYTE
+               while (len < len2)
+               {
+                   /* add following combining char */
+                   d = add_char2buf(PTR2CHAR(s + len), d);
+                   len += mb_char2len(PTR2CHAR(s + len));
+               }
+#endif
                mb_ptr_adv(s);
            }
        }
@@ -4755,6 +4868,8 @@ makemap(fd, buf)
                        return FAIL;
                    if (buf != NULL && fputs(" <buffer>", fd) < 0)
                        return FAIL;
+                   if (mp->m_nowait && fputs(" <nowait>", fd) < 0)
+                       return FAIL;
                    if (mp->m_silent && fputs(" <silent>", fd) < 0)
                        return FAIL;
 #ifdef FEAT_EVAL
@@ -4995,19 +5110,21 @@ check_map_keycodes()
     sourcing_name = save_name;
 }
 
-#ifdef FEAT_EVAL
+#if defined(FEAT_EVAL) || defined(PROTO)
 /*
- * Check the string "keys" against the lhs of all mappings
- * Return pointer to rhs of mapping (mapblock->m_str)
- * NULL otherwise
+ * Check the string "keys" against the lhs of all mappings.
+ * Return pointer to rhs of mapping (mapblock->m_str).
+ * NULL when no mapping found.
  */
     char_u *
-check_map(keys, mode, exact, ign_mod, abbr)
+check_map(keys, mode, exact, ign_mod, abbr, mp_ptr, local_ptr)
     char_u     *keys;
     int                mode;
     int                exact;          /* require exact match */
     int                ign_mod;        /* ignore preceding modifier */
     int                abbr;           /* do abbreviations */
+    mapblock_T **mp_ptr;       /* return: pointer to mapblock or NULL */
+    int                *local_ptr;     /* return: buffer-local mapping or NULL */
 {
     int                hash;
     int                len, minlen;
@@ -5062,7 +5179,17 @@ check_map(keys, mode, exact, ign_mod, abbr)
                            minlen = mp->m_keylen - 3;
                    }
                    if (STRNCMP(s, keys, minlen) == 0)
+                   {
+                       if (mp_ptr != NULL)
+                           *mp_ptr = mp;
+                       if (local_ptr != NULL)
+#ifdef FEAT_LOCALMAP
+                           *local_ptr = local;
+#else
+                           *local_ptr = 0;
+#endif
                        return mp->m_str;
+                   }
                }
            }
        }
index 1abfeaf..3cca0b7 100644 (file)
@@ -156,7 +156,7 @@ global_ime_TranslateMessage(CONST MSG *lpMsg)
 }
 
 /*
- * Set position of IME compotision window.
+ * Set position of IME composition window.
  *
  * You have to call this before starting composition.  If once composition
  * started, this can take no effect until that composition have finished.  So
index 93f1514..feb1dd4 100644 (file)
@@ -113,9 +113,9 @@ EXTERN int      use_crypt_method INIT(= 0);
  * When '$' is included in 'cpoptions' option set:
  * When a change command is given that deletes only part of a line, a dollar
  * is put at the end of the changed text. dollar_vcol is set to the virtual
- * column of this '$'.
+ * column of this '$'.  -1 is used to indicate no $ is being displayed.
  */
-EXTERN colnr_T dollar_vcol INIT(= 0);
+EXTERN colnr_T dollar_vcol INIT(= -1);
 
 #ifdef FEAT_INS_EXPAND
 /*
@@ -180,9 +180,13 @@ EXTERN int emsg_skip INIT(= 0);        /* don't display errors for
 EXTERN int     emsg_severe INIT(= FALSE);   /* use message of next of several
                                               emsg() calls for throw */
 EXTERN int     did_endif INIT(= FALSE);    /* just had ":endif" */
+EXTERN dict_T  vimvardict;                 /* Dictionary with v: variables */
+EXTERN dict_T  globvardict;                /* Dictionary with g: variables */
 #endif
 EXTERN int     did_emsg;                   /* set by emsg() when the message
                                               is displayed or thrown */
+EXTERN int     did_emsg_syntax;            /* did_emsg set because of a
+                                              syntax error */
 EXTERN int     called_emsg;                /* always set by emsg() */
 EXTERN int     ex_exitval INIT(= 0);       /* exit value for ex mode */
 EXTERN int     emsg_on_display INIT(= FALSE);  /* there is an error message */
@@ -510,9 +514,15 @@ EXTERN VimClipboard clip_star;     /* PRIMARY selection in X11 */
 EXTERN VimClipboard clip_plus; /* CLIPBOARD selection in X11 */
 # else
 #  define clip_plus clip_star  /* there is only one clipboard */
+#  define ONE_CLIPBOARD
 # endif
-EXTERN int     clip_unnamed INIT(= FALSE);
-EXTERN int     clip_autoselect INIT(= FALSE);
+
+# define CLIP_UNNAMED      1
+# define CLIP_UNNAMED_PLUS 2
+EXTERN int     clip_unnamed INIT(= 0); /* above two values or'ed */
+
+EXTERN int     clip_autoselect_star INIT(= FALSE);
+EXTERN int     clip_autoselect_plus INIT(= FALSE);
 EXTERN int     clip_autoselectml INIT(= FALSE);
 EXTERN int     clip_html INIT(= FALSE);
 EXTERN regprog_T *clip_exclude_prog INIT(= NULL);
@@ -530,6 +540,10 @@ EXTERN win_T       *lastwin;               /* last window */
 EXTERN win_T   *prevwin INIT(= NULL);  /* previous window */
 # define W_NEXT(wp) ((wp)->w_next)
 # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
+/*
+ * When using this macro "break" only breaks out of the inner loop. Use "goto"
+ * to break out of the tabpage loop.
+ */
 # define FOR_ALL_TAB_WINDOWS(tp, wp) \
     for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \
        for ((wp) = ((tp) == curtab) \
@@ -728,9 +742,9 @@ EXTERN int  can_si_back INIT(= FALSE);
 #endif
 
 EXTERN pos_T   saved_cursor            /* w_cursor before formatting text. */
-# ifdef DO_INIT
+#ifdef DO_INIT
        = INIT_POS_T(0, 0, 0)
-# endif
+#endif
        ;
 
 /*
@@ -790,7 +804,7 @@ EXTERN int  enc_dbcs INIT(= 0);             /* One of DBCS_xxx values if
 EXTERN int     enc_unicode INIT(= 0);  /* 2: UCS-2 or UTF-16, 4: UCS-4 */
 EXTERN int     enc_utf8 INIT(= FALSE);         /* UTF-8 encoded Unicode */
 EXTERN int     enc_latin1like INIT(= TRUE);    /* 'encoding' is latin1 comp. */
-# ifdef WIN3264
+# if defined(WIN3264) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
 /* Codepage nr of 'encoding'.  Negative means it's not been set yet, zero
  * means 'encoding' is not a valid codepage. */
 EXTERN int     enc_codepage INIT(= -1);
@@ -798,9 +812,9 @@ EXTERN int  enc_latin9 INIT(= FALSE);       /* 'encoding' is latin9 */
 # endif
 EXTERN int     has_mbyte INIT(= 0);            /* any multi-byte encoding */
 
-#if defined(WIN3264) && defined(FEAT_MBYTE)
+# if defined(WIN3264) && defined(FEAT_MBYTE)
 EXTERN int     wide_WindowProc INIT(= FALSE);  /* use wide WindowProc() */
-#endif
+# endif
 
 /*
  * To speed up BYTELEN() we fill a table with the byte lengths whenever
@@ -902,6 +916,10 @@ EXTERN int no_zero_mapping INIT(= 0);      /* mapping zero not allowed */
 EXTERN int allow_keys INIT(= FALSE);   /* allow key codes when no_mapping
                                         * is set */
 EXTERN int no_u_sync INIT(= 0);                /* Don't call u_sync() */
+#ifdef FEAT_EVAL
+EXTERN int u_sync_once INIT(= 0);      /* Call u_sync() once when evaluating
+                                          an expression. */
+#endif
 
 EXTERN int restart_edit INIT(= 0);     /* call edit when next cmd finished */
 EXTERN int arrow_used;                 /* Normally FALSE, set to TRUE after
@@ -1045,17 +1063,15 @@ EXTERN int      autocmd_fname_full;          /* autocmd_fname is full path */
 EXTERN int     autocmd_bufnr INIT(= 0);     /* fnum for <abuf> on cmdline */
 EXTERN char_u  *autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */
 EXTERN int     did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */
-EXTERN pos_T   last_cursormoved            /* for CursorMoved event */
+EXTERN pos_T   last_cursormoved              /* for CursorMoved event */
 # ifdef DO_INIT
                        = INIT_POS_T(0, 0, 0)
 # endif
                        ;
+EXTERN int     last_changedtick INIT(= 0);   /* for TextChanged event */
+EXTERN buf_T   *last_changedtick_buf INIT(= NULL);
 #endif
 
-EXTERN linenr_T        write_no_eol_lnum INIT(= 0); /* non-zero lnum when last line
-                                               of next binary write should
-                                               not have an end-of-line */
-
 #ifdef FEAT_WINDOWS
 EXTERN int     postponed_split INIT(= 0);  /* for CTRL-W CTRL-] command */
 EXTERN int     postponed_split_flags INIT(= 0);  /* args for win_split() */
@@ -1094,8 +1110,8 @@ EXTERN char_u     langmap_mapchar[256];   /* mapping for language keys */
 EXTERN int  save_p_ls INIT(= -1);      /* Save 'laststatus' setting */
 EXTERN int  save_p_wmh INIT(= -1);     /* Save 'winminheight' setting */
 EXTERN int  wild_menu_showing INIT(= 0);
-#define WM_SHOWN       1               /* wildmenu showing */
-#define WM_SCROLLED    2               /* wildmenu showing with scroll */
+# define WM_SHOWN      1               /* wildmenu showing */
+# define WM_SCROLLED   2               /* wildmenu showing with scroll */
 #endif
 
 #ifdef MSWIN
@@ -1305,9 +1321,9 @@ EXTERN Window     clientWindow INIT(= None);
 EXTERN Atom    commProperty INIT(= None);
 EXTERN char_u  *serverDelayedStartName INIT(= NULL);
 # else
-# ifdef PROTO
+#  ifdef PROTO
 typedef int HWND;
-# endif
+#  endif
 EXTERN HWND    clientWindow INIT(= 0);
 # endif
 #endif
@@ -1512,7 +1528,7 @@ EXTERN char_u e_readerrf[]        INIT(= N_("E47: Error while reading errorfile"));
 EXTERN char_u e_sandbox[]      INIT(= N_("E48: Not allowed in sandbox"));
 #endif
 EXTERN char_u e_secure[]       INIT(= N_("E523: Not allowed here"));
-#if defined(AMIGA) || defined(MACOS) || defined(MSWIN) || defined(RISCOS) \
+#if defined(AMIGA) || defined(MACOS) || defined(MSWIN)  \
        || defined(UNIX) || defined(VMS) || defined(OS2)
 EXTERN char_u e_screenmode[]   INIT(= N_("E359: Screen mode setting not supported"));
 #endif
@@ -1560,6 +1576,9 @@ EXTERN char_u e_bufloaded[]       INIT(= N_("E139: File is loaded in another buffer"))
        (defined(FEAT_INS_EXPAND) && defined(FEAT_COMPL_FUNC))
 EXTERN char_u e_notset[]       INIT(= N_("E764: Option '%s' is not set"));
 #endif
+#ifndef FEAT_CLIPBOARD
+EXTERN char_u e_invalidreg[]    INIT(= N_("E850: Invalid register name"));
+#endif
 
 #ifdef MACOS_X_UNIX
 EXTERN short disallow_gui      INIT(= FALSE);
index 87930c6..b667ba3 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -37,6 +37,23 @@ static void gui_set_fg_color __ARGS((char_u *name));
 static void gui_set_bg_color __ARGS((char_u *name));
 static win_T *xy2win __ARGS((int x, int y));
 
+#if defined(UNIX) && !defined(MACOS_X) && !defined(__APPLE__)
+# define MAY_FORK
+static void gui_do_fork __ARGS((void));
+
+static int gui_read_child_pipe __ARGS((int fd));
+
+/* Return values for gui_read_child_pipe */
+enum {
+    GUI_CHILD_IO_ERROR,
+    GUI_CHILD_OK,
+    GUI_CHILD_FAILED
+};
+
+#endif /* MAY_FORK */
+
+static void gui_attempt_start __ARGS((void));
+
 static int can_update_cursor = TRUE; /* can display the cursor */
 
 /*
@@ -59,42 +76,53 @@ static int can_update_cursor = TRUE; /* can display the cursor */
 gui_start()
 {
     char_u     *old_term;
-#if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X)
-# define MAY_FORK
-    int                dofork = TRUE;
-#endif
     static int recursive = 0;
 
     old_term = vim_strsave(T_NAME);
 
-    /*
-     * Set_termname() will call gui_init() to start the GUI.
-     * Set the "starting" flag, to indicate that the GUI will start.
-     *
-     * We don't want to open the GUI shell until after we've read .gvimrc,
-     * otherwise we don't know what font we will use, and hence we don't know
-     * what size the shell should be.  So if there are errors in the .gvimrc
-     * file, they will have to go to the terminal: Set full_screen to FALSE.
-     * full_screen will be set to TRUE again by a successful termcapinit().
-     */
     settmode(TMODE_COOK);              /* stop RAW mode */
     if (full_screen)
        cursor_on();                    /* needed for ":gui" in .vimrc */
-    gui.starting = TRUE;
     full_screen = FALSE;
 
-#ifdef MAY_FORK
-    if (!gui.dofork || vim_strchr(p_go, GO_FORG) || recursive)
-       dofork = FALSE;
-#endif
     ++recursive;
 
-    termcapinit((char_u *)"builtin_gui");
-    gui.starting = recursive - 1;
+#ifdef MAY_FORK
+    /*
+     * Quit the current process and continue in the child.
+     * Makes "gvim file" disconnect from the shell it was started in.
+     * Don't do this when Vim was started with "-f" or the 'f' flag is present
+     * in 'guioptions'.
+     */
+    if (gui.dofork && !vim_strchr(p_go, GO_FORG) && recursive <= 1)
+    {
+       gui_do_fork();
+    }
+    else
+#endif
+    {
+#ifdef FEAT_GUI_GTK
+       /* If there is 'f' in 'guioptions' and specify -g argument,
+        * gui_mch_init_check() was not called yet.  */
+       if (gui_mch_init_check() != OK)
+           exit(1);
+#endif
+       gui_attempt_start();
+    }
 
     if (!gui.in_use)                   /* failed to start GUI */
     {
-       termcapinit(old_term);          /* back to old term settings */
+       /* Back to old term settings
+        *
+        * FIXME: If we got here because a child process failed and flagged to
+        * the parent to resume, and X11 is enabled with FEAT_TITLE, this will
+        * hit an X11 I/O error and do a longjmp(), leaving recursive
+        * permanently set to 1. This is probably not as big a problem as it
+        * sounds, because gui_mch_init() in both gui_x11.c and gui_gtk_x11.c
+        * return "OK" unconditionally, so it would be very difficult to
+        * actually hit this case.
+        */
+       termcapinit(old_term);
        settmode(TMODE_RAW);            /* restart RAW mode */
 #ifdef FEAT_TITLE
        set_title_defaults();           /* set 'title' and 'icon' again */
@@ -103,101 +131,216 @@ gui_start()
 
     vim_free(old_term);
 
+#ifdef FEAT_AUTOCMD
+    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
+     * the GUIFailed event. */
+    gui_mch_update();
+    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
+                                                  NULL, NULL, FALSE, curbuf);
+#endif
+    --recursive;
+}
+
+/*
+ * Set_termname() will call gui_init() to start the GUI.
+ * Set the "starting" flag, to indicate that the GUI will start.
+ *
+ * We don't want to open the GUI shell until after we've read .gvimrc,
+ * otherwise we don't know what font we will use, and hence we don't know
+ * what size the shell should be.  So if there are errors in the .gvimrc
+ * file, they will have to go to the terminal: Set full_screen to FALSE.
+ * full_screen will be set to TRUE again by a successful termcapinit().
+ */
+    static void
+gui_attempt_start()
+{
+    static int recursive = 0;
+
+    ++recursive;
+    gui.starting = TRUE;
+
+#ifdef FEAT_GUI_GTK
+    gui.event_time = GDK_CURRENT_TIME;
+#endif
+
+    termcapinit((char_u *)"builtin_gui");
+    gui.starting = recursive - 1;
+
 #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
     if (gui.in_use)
+    {
+# ifdef FEAT_EVAL
+       Window  x11_window;
+       Display *x11_display;
+
+       if (gui_get_x11_windis(&x11_window, &x11_display) == OK)
+           set_vim_var_nr(VV_WINDOWID, (long)x11_window);
+# endif
+
        /* Display error messages in a dialog now. */
        display_errors();
+    }
 #endif
+    --recursive;
+}
 
-#if defined(MAY_FORK) && !defined(__QNXNTO__)
-    /*
-     * Quit the current process and continue in the child.
-     * Makes "gvim file" disconnect from the shell it was started in.
-     * Don't do this when Vim was started with "-f" or the 'f' flag is present
-     * in 'guioptions'.
-     */
-    if (gui.in_use && dofork)
+#ifdef MAY_FORK
+
+/* for waitpid() */
+# if defined(HAVE_SYS_WAIT_H) || defined(HAVE_UNION_WAIT)
+#  include <sys/wait.h>
+# endif
+
+/*
+ * Create a new process, by forking. In the child, start the GUI, and in
+ * the parent, exit.
+ *
+ * If something goes wrong, this will return with gui.in_use still set
+ * to FALSE, in which case the caller should continue execution without
+ * the GUI.
+ *
+ * If the child fails to start the GUI, then the child will exit and the
+ * parent will return. If the child succeeds, then the parent will exit
+ * and the child will return.
+ */
+    static void
+gui_do_fork()
+{
+    int                pipefd[2];      /* pipe between parent and child */
+    int                pipe_error;
+    int                status;
+    int                exit_status;
+    pid_t      pid = -1;
+
+    /* Setup a pipe between the child and the parent, so that the parent
+     * knows when the child has done the setsid() call and is allowed to
+     * exit. */
+    pipe_error = (pipe(pipefd) < 0);
+    pid = fork();
+    if (pid < 0)           /* Fork error */
+    {
+       EMSG(_("E851: Failed to create a new process for the GUI"));
+       return;
+    }
+    else if (pid > 0)      /* Parent */
     {
-       int     pipefd[2];      /* pipe between parent and child */
-       int     pipe_error;
-       char    dummy;
-       pid_t   pid = -1;
-
-       /* Setup a pipe between the child and the parent, so that the parent
-        * knows when the child has done the setsid() call and is allowed to
-        * exit. */
-       pipe_error = (pipe(pipefd) < 0);
-       pid = fork();
-       if (pid > 0)        /* Parent */
+       /* Give the child some time to do the setsid(), otherwise the
+        * exit() may kill the child too (when starting gvim from inside a
+        * gvim). */
+       if (!pipe_error)
        {
-           /* Give the child some time to do the setsid(), otherwise the
-            * exit() may kill the child too (when starting gvim from inside a
-            * gvim). */
-           if (pipe_error)
-               ui_delay(300L, TRUE);
-           else
+           /* The read returns when the child closes the pipe (or when
+            * the child dies for some reason). */
+           close(pipefd[1]);
+           status = gui_read_child_pipe(pipefd[0]);
+           if (status == GUI_CHILD_FAILED)
            {
-               /* The read returns when the child closes the pipe (or when
-                * the child dies for some reason). */
-               close(pipefd[1]);
-               ignored = (int)read(pipefd[0], &dummy, (size_t)1);
-               close(pipefd[0]);
+               /* The child failed to start the GUI, so the caller must
+                * continue. There may be more error information written
+                * to stderr by the child. */
+# ifdef __NeXT__
+               wait4(pid, &exit_status, 0, (struct rusage *)0);
+# else
+               waitpid(pid, &exit_status, 0);
+# endif
+               EMSG(_("E852: The child process failed to start the GUI"));
+               return;
            }
+           else if (status == GUI_CHILD_IO_ERROR)
+           {
+               pipe_error = TRUE;
+           }
+           /* else GUI_CHILD_OK: parent exit */
+       }
 
-           /* When swapping screens we may need to go to the next line, e.g.,
-            * after a hit-enter prompt and using ":gui". */
-           if (newline_on_exit)
-               mch_errmsg("\r\n");
+       if (pipe_error)
+           ui_delay(300L, TRUE);
 
-           /*
-            * The parent must skip the normal exit() processing, the child
-            * will do it.  For example, GTK messes up signals when exiting.
-            */
-           _exit(0);
-       }
+       /* When swapping screens we may need to go to the next line, e.g.,
+        * after a hit-enter prompt and using ":gui". */
+       if (newline_on_exit)
+           mch_errmsg("\r\n");
 
-# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
        /*
-        * Change our process group.  On some systems/shells a CTRL-C in the
-        * shell where Vim was started would otherwise kill gvim!
+        * The parent must skip the normal exit() processing, the child
+        * will do it.  For example, GTK messes up signals when exiting.
         */
-       if (pid == 0)       /* child */
+       _exit(0);
+    }
+    /* Child */
+
+#ifdef FEAT_GUI_GTK
+    /* Call gtk_init_check() here after fork(). See gui_init_check(). */
+    if (gui_mch_init_check() != OK)
+       exit(1);
+#endif
+
+# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+    /*
+     * Change our process group.  On some systems/shells a CTRL-C in the
+     * shell where Vim was started would otherwise kill gvim!
+     */
 #  if defined(HAVE_SETSID)
-           (void)setsid();
+    (void)setsid();
 #  else
-           (void)setpgid(0, 0);
+    (void)setpgid(0, 0);
 #  endif
 # endif
-       if (!pipe_error)
-       {
-           close(pipefd[0]);
-           close(pipefd[1]);
-       }
+    if (!pipe_error)
+       close(pipefd[0]);
 
 # if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
-       /* Tell the session manager our new PID */
-       gui_mch_forked();
+    /* Tell the session manager our new PID */
+    gui_mch_forked();
 # endif
+
+    /* Try to start the GUI */
+    gui_attempt_start();
+
+    /* Notify the parent */
+    if (!pipe_error)
+    {
+       if (gui.in_use)
+           write_eintr(pipefd[1], "ok", 3);
+       else
+           write_eintr(pipefd[1], "fail", 5);
+       close(pipefd[1]);
     }
-#else
-# if defined(__QNXNTO__)
-    if (gui.in_use && dofork)
-       procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
-               PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
-# endif
-#endif
 
-#ifdef FEAT_AUTOCMD
-    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
-     * the GUIFailed event. */
-    gui_mch_update();
-    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
-                                                  NULL, NULL, FALSE, curbuf);
-#endif
+    /* If we failed to start the GUI, exit now. */
+    if (!gui.in_use)
+       exit(1);
+}
 
-    --recursive;
+/*
+ * Read from a pipe assumed to be connected to the child process (this
+ * function is called from the parent).
+ * Return GUI_CHILD_OK if the child successfully started the GUI,
+ * GUY_CHILD_FAILED if the child failed, or GUI_CHILD_IO_ERROR if there was
+ * some other error.
+ *
+ * The file descriptor will be closed before the function returns.
+ */
+    static int
+gui_read_child_pipe(int fd)
+{
+    long       bytes_read;
+#define READ_BUFFER_SIZE 10
+    char       buffer[READ_BUFFER_SIZE];
+
+    bytes_read = read_eintr(fd, buffer, READ_BUFFER_SIZE - 1);
+#undef READ_BUFFER_SIZE
+    close(fd);
+    if (bytes_read < 0)
+       return GUI_CHILD_IO_ERROR;
+    buffer[bytes_read] = NUL;
+    if (strcmp(buffer, "ok") == 0)
+       return GUI_CHILD_OK;
+    return GUI_CHILD_FAILED;
 }
 
+#endif /* MAY_FORK */
+
 /*
  * Call this when vim starts up, whether or not the GUI is started
  */
@@ -260,6 +403,14 @@ gui_init_check()
     gui.fontset = NOFONTSET;
 # endif
 #endif
+#ifdef FEAT_MBYTE
+    gui.wide_font = NOFONT;
+# ifndef FEAT_GUI_GTK
+    gui.wide_bold_font = NOFONT;
+    gui.wide_ital_font = NOFONT;
+    gui.wide_boldital_font = NOFONT;
+# endif
+#endif
 
 #ifdef FEAT_MENU
 # ifndef FEAT_GUI_GTK
@@ -291,7 +442,17 @@ gui_init_check()
 #ifdef ALWAYS_USE_GUI
     result = OK;
 #else
+# ifdef FEAT_GUI_GTK
+    /*
+     * Note: Don't call gtk_init_check() before fork, it will be called after
+     * the fork. When calling it before fork, it make vim hang for a while.
+     * See gui_do_fork().
+     * Use a simpler check if the GUI window can probably be opened.
+     */
+    result = gui.dofork ? gui_mch_early_init_check() : gui_mch_init_check();
+# else
     result = gui_mch_init_check();
+# endif
 #endif
     return result;
 }
@@ -387,10 +548,14 @@ gui_init()
                 && do_source((char_u *)USR_GVIMRC_FILE2, TRUE,
                                                          DOSO_GVIMRC) == FAIL
 #endif
+#ifdef USR_GVIMRC_FILE3
+                && do_source((char_u *)USR_GVIMRC_FILE3, TRUE,
+                                                         DOSO_GVIMRC) == FAIL
+#endif
                                )
            {
-#ifdef USR_GVIMRC_FILE3
-               (void)do_source((char_u *)USR_GVIMRC_FILE3, TRUE, DOSO_GVIMRC);
+#ifdef USR_GVIMRC_FILE4
+               (void)do_source((char_u *)USR_GVIMRC_FILE4, TRUE, DOSO_GVIMRC);
 #endif
            }
 
@@ -433,6 +598,10 @@ gui_init()
                        && fullpathcmp((char_u *)USR_GVIMRC_FILE3,
                                     (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME
 #endif
+#ifdef USR_GVIMRC_FILE4
+                       && fullpathcmp((char_u *)USR_GVIMRC_FILE4,
+                                    (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME
+#endif
                        )
                    do_source((char_u *)GVIMRC_FILE, TRUE, DOSO_GVIMRC);
 
@@ -623,11 +792,9 @@ error:
 gui_exit(rc)
     int                rc;
 {
-#ifndef __BEOS__
     /* don't free the fonts, it leads to a BUS error
      * richard@whitequeen.com Jul 99 */
     free_highlight_fonts();
-#endif
     gui.in_use = FALSE;
     gui_mch_exit(rc);
 }
@@ -668,7 +835,7 @@ gui_shell_closed()
 #endif
 
 /*
- * Set the font.  "font_list" is a comma separated list of font names.  The
+ * Set the font.  "font_list" is a comma separated list of font names.  The
  * first font name that works is used.  If none is found, use the default
  * font.
  * If "fontset" is TRUE, the "font_list" is used as one name for the fontset.
@@ -747,13 +914,7 @@ gui_init_font(font_list, fontset)
 # endif
            gui_mch_set_font(gui.norm_font);
 #endif
-       gui_set_shellsize(FALSE,
-#ifdef MSWIN
-               TRUE
-#else
-               FALSE
-#endif
-               , RESIZE_BOTH);
+       gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
     }
 
     return ret;
@@ -839,7 +1000,7 @@ gui_get_wide_font()
     }
 
     gui_mch_free_font(gui.wide_font);
-#ifdef FEAT_GUI_GTK
+# ifdef FEAT_GUI_GTK
     /* Avoid unnecessary overhead if 'guifontwide' is equal to 'guifont'. */
     if (font != NOFONT && gui.norm_font != NOFONT
                         && pango_font_description_equal(font, gui.norm_font))
@@ -848,8 +1009,16 @@ gui_get_wide_font()
        gui_mch_free_font(font);
     }
     else
-#endif
+# endif
        gui.wide_font = font;
+# ifdef FEAT_GUI_MSWIN
+    gui_mch_wide_font_changed();
+# else
+    /*
+     * TODO: setup wide_bold_font, wide_ital_font and wide_boldital_font to
+     * support those fonts for 'guifontwide'.
+     */
+# endif
     return OK;
 }
 #endif
@@ -1392,7 +1561,7 @@ gui_set_shellsize(mustset, fit_to_display, direction)
     if (!gui.shell_created)
        return;
 
-#ifdef MSWIN
+#if defined(MSWIN) || defined(FEAT_GUI_GTK)
     /* If not setting to a user specified size and maximized, calculate the
      * number of characters that fit in the maximized window. */
     if (!mustset && gui_mch_maximized())
@@ -1451,6 +1620,7 @@ gui_set_shellsize(mustset, fit_to_display, direction)
            un_maximize = FALSE;
 #endif
     }
+    limit_screen_size();
     gui.num_cols = Columns;
     gui.num_rows = Rows;
 
@@ -2017,6 +2187,9 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
     guicolor_T sp_color;
 #if !defined(MSWIN16_FASTTEXT) && !defined(FEAT_GUI_GTK)
     GuiFont    font = NOFONT;
+# ifdef FEAT_MBYTE
+    GuiFont    wide_font = NOFONT;
+# endif
 # ifdef FEAT_XFONTSET
     GuiFontset fontset = NOFONTSET;
 # endif
@@ -2106,6 +2279,23 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
        }
        else
            font = gui.norm_font;
+
+# ifdef FEAT_MBYTE
+       /*
+        * Choose correct wide_font by font.  wide_font should be set with font
+        * at same time in above block.  But it will make many "ifdef" nasty
+        * blocks.  So we do it here.
+        */
+       if (font == gui.boldital_font && gui.wide_boldital_font)
+           wide_font = gui.wide_boldital_font;
+       else if (font == gui.bold_font && gui.wide_bold_font)
+           wide_font = gui.wide_bold_font;
+       else if (font == gui.ital_font && gui.wide_ital_font)
+           wide_font = gui.wide_ital_font;
+       else if (font == gui.norm_font && gui.wide_font)
+           wide_font = gui.wide_font;
+# endif
+
     }
 # ifdef FEAT_XFONTSET
     if (fontset != NOFONTSET)
@@ -2146,7 +2336,7 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
 
     if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
     {
-#if defined(AMIGA) || defined(RISCOS)
+#if defined(AMIGA)
        gui_mch_set_colors(bg_color, fg_color);
 #else
        gui_mch_set_fg_color(bg_color);
@@ -2155,7 +2345,7 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
     }
     else
     {
-#if defined(AMIGA) || defined(RISCOS)
+#if defined(AMIGA)
        gui_mch_set_colors(fg_color, bg_color);
 #else
        gui_mch_set_fg_color(fg_color);
@@ -2183,7 +2373,7 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
     if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
        return FAIL;
 
-#if defined(RISCOS) || defined(FEAT_GUI_GTK)
+#if defined(FEAT_GUI_GTK)
     /* If there's no italic font, then fake it.
      * For GTK2, we don't need a different font for italic style. */
     if (hl_mask_todo & HL_ITALIC)
@@ -2221,14 +2411,16 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
     {
        int     start;          /* index of bytes to be drawn */
        int     cells;          /* cellwidth of bytes to be drawn */
-       int     thislen;        /* length of bytes to be drawin */
+       int     thislen;        /* length of bytes to be drawn */
        int     cn;             /* cellwidth of current char */
        int     i;              /* index of current char */
        int     c;              /* current char value */
        int     cl;             /* byte length of current char */
        int     comping;        /* current char is composing */
        int     scol = col;     /* screen column */
-       int     dowide;         /* use 'guifontwide' */
+       int     curr_wide;      /* use 'guifontwide' */
+       int     prev_wide = FALSE;
+       int     wide_changed;
 
        /* Break the string at a composing character, it has to be drawn on
         * top of the previous character. */
@@ -2242,10 +2434,10 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
 #  ifdef FEAT_XFONTSET
                    && fontset == NOFONTSET
 #  endif
-                   && gui.wide_font != NOFONT)
-               dowide = TRUE;
+                   && wide_font != NOFONT)
+               curr_wide = TRUE;
            else
-               dowide = FALSE;
+               curr_wide = FALSE;
            comping = utf_iscomposing(c);
            if (!comping)       /* count cells from non-composing chars */
                cells += cn;
@@ -2253,9 +2445,11 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
            if (cl == 0)        /* hit end of string */
                len = i + cl;   /* len must be wrong "cannot happen" */
 
-           /* print the string so far if it's the last character or there is
+           wide_changed = curr_wide != prev_wide;
+
+           /* Print the string so far if it's the last character or there is
             * a composing character. */
-           if (i + cl >= len || (comping && i > start) || dowide
+           if (i + cl >= len || (comping && i > start) || wide_changed
 #  if defined(FEAT_GUI_X11)
                    || (cn > 1
 #   ifdef FEAT_XFONTSET
@@ -2267,25 +2461,28 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
 #  endif
               )
            {
-               if (comping || dowide)
+               if (comping || wide_changed)
                    thislen = i - start;
                else
                    thislen = i - start + cl;
                if (thislen > 0)
                {
+                   if (prev_wide)
+                       gui_mch_set_font(wide_font);
                    gui_mch_draw_string(gui.row, scol, s + start, thislen,
                                                                  draw_flags);
+                   if (prev_wide)
+                       gui_mch_set_font(font);
                    start += thislen;
                }
                scol += cells;
                cells = 0;
-               if (dowide)
+               /* Adjust to not draw a character which width is changed
+                * against with last one. */
+               if (wide_changed && !comping)
                {
-                   gui_mch_set_font(gui.wide_font);
-                   gui_mch_draw_string(gui.row, scol - cn,
-                                                  s + start, cl, draw_flags);
-                   gui_mch_set_font(font);
-                   start += cl;
+                   scol -= cn;
+                   cl = 0;
                }
 
 #  if defined(FEAT_GUI_X11)
@@ -2295,7 +2492,7 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
 #   ifdef FEAT_XFONTSET
                        && fontset == NOFONTSET
 #   endif
-                       && !dowide)
+                       && !wide_changed)
                    gui_mch_draw_string(gui.row, scol - 1, (char_u *)" ",
                                                               1, draw_flags);
 #  endif
@@ -2313,6 +2510,7 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
 #  endif
                start = i + cl;
            }
+           prev_wide = curr_wide;
        }
        /* The stuff below assumes "len" is the length in screen columns. */
        len = scol - col;
@@ -2352,7 +2550,7 @@ gui_outstr_nowrap(s, len, flags, fg, bg, back)
     if (draw_sign)
        /* Draw the sign on top of the spaces. */
        gui_mch_drawsign(gui.row, col, gui.highlight_mask);
-# if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_MOTIF) \
+# if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_X11) \
        || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32))
     if (multi_sign)
        netbeans_draw_multisign_indicator(gui.row);
@@ -2975,26 +3173,11 @@ button_set:
            did_clip = TRUE;
        }
        /* Allow the left button to start the selection */
-       else if (button ==
-# ifdef RISCOS
-               /* Only start a drag on a drag event. Otherwise
-                * we don't get a release event. */
-                   MOUSE_DRAG
-# else
-                   MOUSE_LEFT
-# endif
-                               )
-       {
-           clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
-           did_clip = TRUE;
-       }
-# ifdef RISCOS
        else if (button == MOUSE_LEFT)
        {
-           clip_clear_selection();
+           clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
            did_clip = TRUE;
        }
-# endif
 
        /* Always allow pasting */
        if (button != MOUSE_MIDDLE)
@@ -3008,7 +3191,7 @@ button_set:
     }
 
     if (clip_star.state != SELECT_CLEARED && !did_clip)
-       clip_clear_selection();
+       clip_clear_selection(&clip_star);
 #endif
 
     /* Don't put events in the input queue now. */
@@ -3738,7 +3921,7 @@ gui_drag_scrollbar(sb, value, still_dragging)
        gui.dragged_sb = SBAR_NONE;
 #ifdef FEAT_GUI_GTK
        /* Keep the "dragged_wp" value until after the scrolling, for when the
-        * moust button is released.  GTK2 doesn't send the button-up event. */
+        * mouse button is released.  GTK2 doesn't send the button-up event. */
        gui.dragged_wp = NULL;
 #endif
     }
@@ -4893,7 +5076,7 @@ display_errors()
                if (STRLEN(p) > 2000)
                    STRCPY(p + 2000 - 14, "...(truncated)");
                (void)do_dialog(VIM_ERROR, (char_u *)_("Error"),
-                                             p, (char_u *)_("&Ok"), 1, NULL);
+                                      p, (char_u *)_("&Ok"), 1, NULL, FALSE);
                break;
            }
        ga_clear(&error_ga);
@@ -5171,7 +5354,7 @@ gui_do_findrepl(flags, find_text, repl_text, down)
            }
            else
                MSG(_("No match at cursor, finding next"));
-           vim_free(regmatch.regprog);
+           vim_regfree(regmatch.regprog);
        }
     }
 
index 149603c..89476c9 100644 (file)
--- a/src/gui.h
+++ b/src/gui.h
 # include <SegLoad.h>*/
 #endif
 
-#ifdef RISCOS
-# include "gui_riscos.h"
-#endif
-
 #ifdef FEAT_GUI_PHOTON
 # include <Ph.h>
 # include <Pt.h>
 #endif
 
 /*
- * On some systems, when we compile with the GUI, we always use it.  On Mac
- * there is no terminal version, and on Windows we can't figure out how to
- * fork one off with :gui.
- */
-#if defined(FEAT_GUI_MSWIN) || (defined(FEAT_GUI_MAC) && !defined(MACOS_X_UNIX))
-# define ALWAYS_USE_GUI
-#endif
-
-/*
  * On some systems scrolling needs to be done right away instead of in the
  * main loop.
  */
 #define DRAW_BOLD              0x02    /* draw bold text */
 #define DRAW_UNDERL            0x04    /* draw underline text */
 #define DRAW_UNDERC            0x08    /* draw undercurl text */
-#if defined(RISCOS) || defined(FEAT_GUI_GTK)
+#if defined(FEAT_GUI_GTK)
 # define DRAW_ITALIC           0x10    /* draw italic text */
 #endif
 #define DRAW_CURSOR            0x20    /* drawing block cursor (win32) */
@@ -219,9 +206,6 @@ typedef struct GuiScrollbar
 #ifdef FEAT_GUI_MAC
     ControlHandle id;          /* A handle to the scrollbar */
 #endif
-#ifdef RISCOS
-    int                id;             /* Window handle of scrollbar window */
-#endif
 #ifdef FEAT_GUI_PHOTON
     PtWidget_t *id;
 #endif
@@ -327,7 +311,12 @@ typedef struct Gui
 # endif
 #endif
 #ifdef FEAT_MBYTE
-    GuiFont    wide_font;          /* 'guifontwide' font */
+    GuiFont    wide_font;          /* Normal 'guifontwide' font */
+# ifndef FEAT_GUI_GTK
+    GuiFont    wide_bold_font;     /* Bold 'guifontwide' font */
+    GuiFont    wide_ital_font;     /* Italic 'guifontwide' font */
+    GuiFont    wide_boldital_font; /* Bold-Italic 'guifontwide' font */
+# endif
 #endif
 #ifdef FEAT_XFONTSET
     GuiFontset fontset;            /* set of fonts for multi-byte chars */
@@ -408,6 +397,8 @@ typedef struct Gui
     GtkAccelGroup *accel_group;
     GtkWidget  *filedlg;           /* file selection dialog */
     char_u     *browse_fname;      /* file name from filedlg */
+
+    guint32    event_time;
 #endif /* FEAT_GUI_GTK */
 
 #if defined(FEAT_GUI_TABLINE) \
@@ -450,14 +441,6 @@ typedef struct Gui
     int                visibility;         /* Is window partially/fully obscured? */
 #endif
 
-#ifdef RISCOS
-    int                window_handle;
-    char_u     *window_title;
-    int                window_title_size;
-    int                fg_colour;              /* in 0xBBGGRR format */
-    int                bg_colour;
-#endif
-
 #ifdef FEAT_GUI_PHOTON
     PtWidget_t *vimWindow;             /* PtWindow */
     PtWidget_t *vimTextArea;           /* PtRaw */
index 25767c2..2d73885 100644 (file)
@@ -2591,7 +2591,7 @@ SFcreateWidgets(toplevel, prompt, ok, cancel)
                (XtCallbackProc)SFvFloatSliderMovedCallback,
                (XtPointer)(long_u)n);
        XtAddCallback(selFileVScrolls[n], XtNscrollProc,
-               (XtCallbackProc)SFvAreaSelectedCallback, (XtPointer)n);
+               (XtCallbackProc)SFvAreaSelectedCallback, (XtPointer)(long_u)n);
 
        selFileHScrolls[n] = XtVaCreateManagedWidget("selFileHScroll",
 #ifdef FEAT_GUI_NEXTAW
@@ -2616,7 +2616,7 @@ SFcreateWidgets(toplevel, prompt, ok, cancel)
                (XtCallbackProc)SFhSliderMovedCallback,
                (XtPointer)(long_u)n);
        XtAddCallback(selFileHScrolls[n], XtNscrollProc,
-               (XtCallbackProc)SFhAreaSelectedCallback, (XtPointer)n);
+               (XtCallbackProc)SFhAreaSelectedCallback, (XtPointer)(long_u)n);
     }
 
     selFileOK = XtVaCreateManagedWidget("selFileOK",
index 7cd08c6..03fea90 100644 (file)
@@ -519,7 +519,7 @@ createXpmImages(path, xpm, sen)
            &color[TOP_SHADOW].pixel,
            &color[HIGHLIGHT].pixel);
 
-    /* Setup the color subsititution table */
+    /* Setup the color substitution table */
     attrs.valuemask = XpmColorSymbols;
     attrs.colorsymbols = color;
     attrs.numsymbols = 5;
@@ -2117,13 +2117,14 @@ dialog_wm_handler(w, client_data, event, dum)
 }
 
     int
-gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield)
+gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
     int                type UNUSED;
     char_u     *title;
     char_u     *message;
     char_u     *buttons;
     int                dfltbutton UNUSED;
     char_u     *textfield;
+    int                ex_cmd UNUSED;
 {
     char_u             *buts;
     char_u             *p, *next;
index f9f7e00..fe930f3 100644 (file)
@@ -359,7 +359,7 @@ get_beval_info(beval, getword, winp, lnump, textp, colp)
                        }
                    }
 
-                   col = vcol2col(wp, lnum, col) - 1;
+                   col = vcol2col(wp, lnum, col);
 
                    if (VIsual_active
                            && wp->w_buffer == curwin->w_buffer
@@ -377,8 +377,10 @@ get_beval_info(beval, getword, winp, lnump, textp, colp)
                            return FAIL;
 
                        lbuf = ml_get_buf(curwin->w_buffer, VIsual.lnum, FALSE);
-                       lbuf = vim_strnsave(lbuf + spos->col,
-                                    epos->col - spos->col + (*p_sel != 'e'));
+                       len = epos->col - spos->col;
+                       if (*p_sel != 'e')
+                           len += MB_PTR2LEN(lbuf + epos->col);
+                       lbuf = vim_strnsave(lbuf + spos->col, len);
                        lnum = spos->lnum;
                        col = spos->col;
                    }
@@ -724,7 +726,7 @@ pointerEvent(beval, event)
     BalloonEval        *beval;
     XEvent     *event;
 {
-    Position   distance;           /* a measure of how much the ponter moved */
+    Position   distance;           /* a measure of how much the pointer moved */
     Position   delta;              /* used to compute distance */
 
     switch (event->type)
index 1533c64..48537f4 100644 (file)
@@ -90,6 +90,13 @@ typedef int GtkWidget;
 static void entry_activate_cb(GtkWidget *widget, gpointer data);
 static void entry_changed_cb(GtkWidget *entry, GtkWidget *dialog);
 static void find_replace_cb(GtkWidget *widget, gpointer data);
+#if defined(FEAT_BROWSE) || defined(PROTO)
+static void recent_func_log_func(
+       const gchar *log_domain,
+       GLogLevelFlags log_level,
+       const gchar *message,
+       gpointer user_data);
+#endif
 
 #if defined(FEAT_TOOLBAR)
 /*
@@ -606,6 +613,17 @@ gui_mch_menu_set_tip(vimmenu_T *menu)
     void
 gui_mch_destroy_menu(vimmenu_T *menu)
 {
+    /* Don't let gtk_container_remove automatically destroy menu->id. */
+    if (menu->id != NULL)
+       g_object_ref(menu->id);
+
+    /* Workaround for a spurious gtk warning in Ubuntu: "Trying to remove
+     * a child that doesn't believe we're it's parent."
+     * Remove widget from gui.menubar before destroying it. */
+    if (menu->id != NULL && gui.menubar != NULL
+                           && gtk_widget_get_parent(menu->id) == gui.menubar)
+       gtk_container_remove(GTK_CONTAINER(gui.menubar), menu->id);
+
 # ifdef FEAT_TOOLBAR
     if (menu->parent != NULL && menu_is_toolbar(menu->parent->name))
     {
@@ -625,6 +643,8 @@ gui_mch_destroy_menu(vimmenu_T *menu)
            gtk_widget_destroy(menu->id);
     }
 
+    if (menu->id != NULL)
+       g_object_unref(menu->id);
     menu->submenu_id = NULL;
     menu->id = NULL;
 }
@@ -772,9 +792,6 @@ gui_mch_destroy_scrollbar(scrollbar_T *sb)
 /*
  * Implementation of the file selector related stuff
  */
-#if GTK_CHECK_VERSION(2,4,0)
-# define USE_FILE_CHOOSER
-#endif
 
 #ifndef USE_FILE_CHOOSER
     static void
@@ -833,12 +850,14 @@ gui_mch_browse(int saving UNUSED,
               char_u *dflt,
               char_u *ext UNUSED,
               char_u *initdir,
-              char_u *filter UNUSED)
+              char_u *filter)
 {
 #ifdef USE_FILE_CHOOSER
     GtkWidget          *fc;
 #endif
     char_u             dirbuf[MAXPATHL];
+    guint              log_handler;
+    const gchar                *domain = "Gtk";
 
     title = CONVERT_TO_UTF8(title);
 
@@ -853,6 +872,11 @@ gui_mch_browse(int saving UNUSED,
     /* If our pointer is currently hidden, then we should show it. */
     gui_mch_mousehide(FALSE);
 
+    /* Hack: The GTK file dialog warns when it can't access a new file, this
+     * makes it shut up. http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
+    log_handler = g_log_set_handler(domain, G_LOG_LEVEL_WARNING,
+                                                 recent_func_log_func, NULL);
+
 #ifdef USE_FILE_CHOOSER
     /* We create the dialog each time, so that the button text can be "Open"
      * or "Save" according to the action. */
@@ -865,6 +889,46 @@ gui_mch_browse(int saving UNUSED,
            NULL);
     gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
                                                       (const gchar *)dirbuf);
+
+    if (filter != NULL && *filter != NUL)
+    {
+       int     i = 0;
+       char_u  *patt;
+       char_u  *p = filter;
+       GtkFileFilter   *gfilter;
+
+       gfilter = gtk_file_filter_new();
+       patt = alloc(STRLEN(filter));
+       while (p != NULL && *p != NUL)
+       {
+           if (*p == '\n' || *p == ';' || *p == '\t')
+           {
+               STRNCPY(patt, filter, i);
+               patt[i] = '\0';
+               if (*p == '\t')
+                   gtk_file_filter_set_name(gfilter, (gchar *)patt);
+               else
+               {
+                   gtk_file_filter_add_pattern(gfilter, (gchar *)patt);
+                   if (*p == '\n')
+                   {
+                       gtk_file_chooser_add_filter((GtkFileChooser *)fc,
+                                                                    gfilter);
+                       if (*(p + 1) != NUL)
+                           gfilter = gtk_file_filter_new();
+                   }
+               }
+               filter = ++p;
+               i = 0;
+           }
+           else
+           {
+               p++;
+               i++;
+           }
+       }
+       vim_free(patt);
+    }
     if (saving && dflt != NULL && *dflt != NUL)
        gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), (char *)dflt);
 
@@ -916,6 +980,7 @@ gui_mch_browse(int saving UNUSED,
     gtk_widget_show(gui.filedlg);
     gtk_main();
 #endif
+    g_log_remove_handler(domain, log_handler);
 
     CONVERT_TO_UTF8_FREE(title);
     if (gui.browse_fname == NULL)
@@ -1268,7 +1333,8 @@ gui_mch_dialog(int        type,       /* type of dialog */
               char_u   *message,   /* message text */
               char_u   *buttons,   /* names of buttons */
               int      def_but,    /* default button */
-              char_u   *textfield) /* text for textfield or NULL */
+              char_u   *textfield, /* text for textfield or NULL */
+              int      ex_cmd UNUSED)
 {
     GtkWidget  *dialog;
     GtkWidget  *entry = NULL;
@@ -1287,6 +1353,9 @@ gui_mch_dialog(int        type,       /* type of dialog */
        entry = gtk_entry_new();
        gtk_widget_show(entry);
 
+       /* Make Enter work like pressing OK. */
+       gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+
        text = CONVERT_TO_UTF8(textfield);
        gtk_entry_set_text(GTK_ENTRY(entry), (const char *)text);
        CONVERT_TO_UTF8_FREE(text);
@@ -1387,7 +1456,7 @@ gui_mch_show_popupmenu(vimmenu_T *menu)
     gtk_menu_popup(GTK_MENU(menu->submenu_id),
                   NULL, NULL,
                   (GtkMenuPositionFunc)NULL, NULL,
-                  3U, (guint32)GDK_CURRENT_TIME);
+                  3U, gui.event_time);
 }
 
 /* Ugly global variable to pass "mouse_pos" flag from gui_make_popup() to
@@ -1795,7 +1864,6 @@ find_replace_cb(GtkWidget *widget UNUSED, gpointer data)
     char_u             *repl_text;
     gboolean           direction_down;
     SharedFindReplace  *sfr;
-    int                        rc;
 
     flags = (int)(long)data;       /* avoid a lint warning here */
 
@@ -1821,7 +1889,7 @@ find_replace_cb(GtkWidget *widget UNUSED, gpointer data)
 
     repl_text = CONVERT_FROM_UTF8(repl_text);
     find_text = CONVERT_FROM_UTF8(find_text);
-    rc = gui_do_findrepl(flags, find_text, repl_text, direction_down);
+    gui_do_findrepl(flags, find_text, repl_text, direction_down);
     CONVERT_FROM_UTF8_FREE(repl_text);
     CONVERT_FROM_UTF8_FREE(find_text);
 }
@@ -1879,3 +1947,15 @@ ex_helpfind(eap)
      * backwards compatibility anyway. */
     do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp");
 }
+
+#if defined(FEAT_BROWSE) || defined(PROTO)
+    static void
+recent_func_log_func(const gchar *log_domain UNUSED,
+                    GLogLevelFlags log_level UNUSED,
+                    const gchar *message UNUSED,
+                    gpointer user_data UNUSED)
+{
+    /* We just want to suppress the warnings. */
+    /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
+}
+#endif
index f148ff7..05295bf 100644 (file)
@@ -86,7 +86,6 @@ extern void bonobo_dock_item_set_behavior(BonoboDockItem *dock_item, BonoboDockI
 
 #ifdef HAVE_X11_SUNKEYSYM_H
 # include <X11/Sunkeysym.h>
-static guint32 clipboard_event_time = CurrentTime;
 #endif
 
 /*
@@ -933,7 +932,7 @@ key_press_event(GtkWidget *widget UNUSED,
     guint      state;
     char_u     *s, *d;
 
-    clipboard_event_time = event->time;
+    gui.event_time = event->time;
     key_sym = event->keyval;
     state = event->state;
 
@@ -1128,7 +1127,7 @@ key_release_event(GtkWidget *widget UNUSED,
                  GdkEventKey *event,
                  gpointer data UNUSED)
 {
-    clipboard_event_time = event->time;
+    gui.event_time = event->time;
     /*
      * GTK+ 2 input methods may do fancy stuff on key release events too.
      * With the default IM for instance, you can enter any UCS code point
@@ -1172,7 +1171,7 @@ selection_received_cb(GtkWidget           *widget UNUSED,
     char_u         *tmpbuf = NULL;
     guchar         *tmpbuf_utf8 = NULL;
     int                    len;
-    int                    motion_type;
+    int                    motion_type = MAUTO;
 
     if (data->selection == clip_plus.gtk_sel_atom)
        cbd = &clip_plus;
@@ -1181,7 +1180,6 @@ selection_received_cb(GtkWidget           *widget UNUSED,
 
     text = (char_u *)data->data;
     len  = data->length;
-    motion_type = MCHAR;
 
     if (text == NULL || len <= 0)
     {
@@ -1259,7 +1257,7 @@ selection_received_cb(GtkWidget           *widget UNUSED,
        }
     }
 
-    /* Chop off any traiing NUL bytes.  OpenOffice sends these. */
+    /* Chop off any trailing NUL bytes.  OpenOffice sends these. */
     while (len > 0 && text[len - 1] == NUL)
        --len;
 
@@ -1416,7 +1414,29 @@ selection_get_cb(GtkWidget           *widget UNUSED,
 }
 
 /*
- * Check if the GUI can be started.  Called before gvimrc is sourced.
+ * Check if the GUI can be started.  Called before gvimrc is sourced and
+ * before fork().
+ * Return OK or FAIL.
+ */
+    int
+gui_mch_early_init_check(void)
+{
+    char_u *p;
+
+    /* Guess that when $DISPLAY isn't set the GUI can't start. */
+    p = mch_getenv((char_u *)"DISPLAY");
+    if (p == NULL || *p == NUL)
+    {
+       gui.dying = TRUE;
+       EMSG(_((char *)e_opendisp));
+       return FAIL;
+    }
+    return OK;
+}
+
+/*
+ * Check if the GUI can be started.  Called before gvimrc is sourced but after
+ * fork().
  * Return OK or FAIL.
  */
     int
@@ -1427,6 +1447,11 @@ gui_mch_init_check(void)
        using_gnome = 1;
 #endif
 
+    /* This defaults to argv[0], but we want it to match the name of the
+     * shipped gvim.desktop so that Vim's windows can be associated with this
+     * file. */
+    g_set_prgname("gvim");
+
     /* Don't use gtk_init() or gnome_init(), it exits on failure. */
     if (!gtk_init_check(&gui_argc, &gui_argv))
     {
@@ -1622,7 +1647,7 @@ button_press_event(GtkWidget *widget,
     int x, y;
     int_u vim_modifiers;
 
-    clipboard_event_time = event->time;
+    gui.event_time = event->time;
 
     /* Make sure we have focus now we've been selected */
     if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget))
@@ -1733,7 +1758,7 @@ button_release_event(GtkWidget *widget UNUSED,
     int x, y;
     int_u vim_modifiers;
 
-    clipboard_event_time = event->time;
+    gui.event_time = event->time;
 
     /* Remove any motion "machine gun" timers used for automatic further
        extension of allocation areas if outside of the applications window
@@ -3052,7 +3077,7 @@ gui_gtk_set_selection_targets(void)
 
     for (i = 0; i < (int)N_SELECTION_TARGETS; ++i)
     {
-       /* OpenOffice tries to use TARGET_HTML and fails when it doesn't
+       /* OpenOffice tries to use TARGET_HTML and fails when we don't
         * return something, instead of trying another target. Therefore only
         * offer TARGET_HTML when it works. */
        if (!clip_html && selection_targets[i].info == TARGET_HTML)
@@ -3083,7 +3108,7 @@ gui_gtk_set_dnd_targets(void)
 
     for (i = 0; i < (int)N_DND_TARGETS; ++i)
     {
-       if (!clip_html && selection_targets[i].info == TARGET_HTML)
+       if (!clip_html && dnd_targets[i].info == TARGET_HTML)
            n_targets--;
        else
            targets[j++] = dnd_targets[i];
@@ -3093,7 +3118,7 @@ gui_gtk_set_dnd_targets(void)
     gtk_drag_dest_set(gui.drawarea,
                      GTK_DEST_DEFAULT_ALL,
                      targets, n_targets,
-                     GDK_ACTION_COPY);
+                     GDK_ACTION_COPY | GDK_ACTION_MOVE);
 }
 
 /*
@@ -3110,8 +3135,16 @@ gui_mch_init(void)
      * exits on failure, but that's a non-issue because we already called
      * gtk_init_check() in gui_mch_init_check(). */
     if (using_gnome)
+    {
        gnome_program_init(VIMPACKAGE, VIM_VERSION_SHORT,
                           LIBGNOMEUI_MODULE, gui_argc, gui_argv, NULL);
+# if defined(FEAT_FLOAT) && defined(LC_NUMERIC)
+       /* Make sure strtod() uses a decimal point, not a comma. Gnome init
+        * may change it. */
+       if (setlocale(LC_NUMERIC, NULL) != (char *) "C")
+          setlocale(LC_NUMERIC, "C");
+# endif
+    }
 #endif
     vim_free(gui_argv);
     gui_argv = NULL;
@@ -3665,6 +3698,7 @@ gui_mch_open(void)
                p_window = h - 1;
            Rows = h;
        }
+       limit_screen_size();
 
        pixel_width = (guint)(gui_get_base_width() + Columns * gui.char_width);
        pixel_height = (guint)(gui_get_base_height() + Rows * gui.char_height);
@@ -3902,6 +3936,21 @@ gui_mch_unmaximize()
 }
 
 /*
+ * Called when the font changed while the window is maximized.  Compute the
+ * new Rows and Columns.  This is like resizing the window.
+ */
+    void
+gui_mch_newfont()
+{
+    int w, h;
+
+    gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
+    w -= get_menu_tool_width();
+    h -= get_menu_tool_height();
+    gui_resize_shell(w, h);
+}
+
+/*
  * Set the windows size.
  */
     void
@@ -4411,14 +4460,9 @@ gui_mch_init_font(char_u *font_name, int fontset UNUSED)
 
     if (gui_mch_maximized())
     {
-       int w, h;
-
        /* Update lines and columns in accordance with the new font, keep the
         * window maximized. */
-       gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
-       w -= get_menu_tool_width();
-       h -= get_menu_tool_height();
-       gui_resize_shell(w, h);
+       gui_mch_newfont();
     }
     else
     {
@@ -5126,8 +5170,7 @@ gui_mch_haskey(char_u *name)
     return FAIL;
 }
 
-#if defined(FEAT_TITLE) \
-       || defined(PROTO)
+#if defined(FEAT_TITLE) || defined(FEAT_EVAL) || defined(PROTO)
 /*
  * Return the text window-id and display.  Only required for X-based GUI's
  */
@@ -5419,7 +5462,7 @@ gui_mch_wait_for_chars(long wtime)
        }
 
 #if defined(FEAT_NETBEANS_INTG)
-       /* Process the queued netbeans messages. */
+       /* Process any queued netbeans messages. */
        netbeans_parse_messages();
 #endif
 
@@ -5637,12 +5680,8 @@ clip_mch_request_selection(VimClipboard *cbd)
     void
 clip_mch_lose_selection(VimClipboard *cbd UNUSED)
 {
-    /* WEIRD: when using NULL to actually disown the selection, we lose the
-     * selection the first time we own it. */
-    /*
-    gtk_selection_owner_set(NULL, cbd->gtk_sel_atom, (guint32)GDK_CURRENT_TIME);
+    gtk_selection_owner_set(NULL, cbd->gtk_sel_atom, gui.event_time);
     gui_mch_update();
-     */
 }
 
 /*
@@ -5654,7 +5693,7 @@ clip_mch_own_selection(VimClipboard *cbd)
     int success;
 
     success = gtk_selection_owner_set(gui.drawarea, cbd->gtk_sel_atom,
-                                     clipboard_event_time);
+                                     gui.event_time);
     gui_mch_update();
     return (success) ? OK : FAIL;
 }
@@ -5668,6 +5707,12 @@ clip_mch_set_selection(VimClipboard *cbd UNUSED)
 {
 }
 
+    int
+clip_gtk_owner_exists(VimClipboard *cbd)
+{
+    return gdk_selection_owner_get(cbd->gtk_sel_atom) != NULL;
+}
+
 
 #if defined(FEAT_MENU) || defined(PROTO)
 /*
index d83a137..573dc7a 100644 (file)
@@ -41,7 +41,7 @@
 #define USE_AEVENT             /* Enable AEVENT */
 #undef USE_OFFSETED_WINDOW     /* Debugging feature: start Vim window OFFSETed */
 
-/* Compile as CodeWarior External Editor */
+/* Compile as CodeWarrior External Editor */
 #if defined(FEAT_CW_EDITOR) && !defined(USE_AEVENT)
 # define USE_AEVENT /* Need Apple Event Support */
 #endif
@@ -1478,9 +1478,9 @@ GetFontPanelSelection(char_u *outName)
 /*
  *  gui_mac_get_menu_item_index
  *
- *  Returns the index inside the menu wher
+ *  Returns the index inside the menu where
  */
-    short /* Shoulde we return MenuItemIndex? */
+    short /* Should we return MenuItemIndex? */
 gui_mac_get_menu_item_index(vimmenu_T *pMenu)
 {
     short      index;
@@ -1693,7 +1693,7 @@ gui_mac_doInContentClick(EventRecord *theEvent, WindowPtr whichWindow)
 
     if (theControl != NUL)
     {
-       /* We hit a scollbar */
+       /* We hit a scrollbar */
 
        if (thePortion != kControlIndicatorPart)
        {
@@ -1823,7 +1823,7 @@ gui_mac_doInZoomClick(EventRecord *theEvent, WindowPtr whichWindow)
        p.h += gui.scrollbar_width;
     if (gui.which_scrollbars[SBAR_RIGHT])
        p.h += gui.scrollbar_width;
-    /* ideal height is as heigh as we can get */
+    /* ideal height is as high as we can get */
     p.v = 15 * 1024;
 
     thePart = IsWindowInStandardState(whichWindow, &p, &r)
@@ -1840,7 +1840,7 @@ gui_mac_doInZoomClick(EventRecord *theEvent, WindowPtr whichWindow)
        p.v -= gui.scrollbar_height;
     p.v -= p.v % gui.char_height;
     p.v += 2 * gui.border_width;
-    if (gui.which_scrollbars[SBAR_BOTTOM]);
+    if (gui.which_scrollbars[SBAR_BOTTOM])
        p.v += gui.scrollbar_height;
 
     ZoomWindowIdeal(whichWindow, thePart, &p);
@@ -2630,7 +2630,7 @@ gui_mac_handle_contextual_menu(event)
     {
        /* Handle the menu CntxMenuID, CntxMenuItem */
        /* The submenu can be handle directly by gui_mac_handle_menu */
-       /* But what about the current menu, is the meny changed by ContextualMenuSelect */
+       /* But what about the current menu, is the many changed by ContextualMenuSelect */
        gui_mac_handle_menu((CntxMenuID << 16) + CntxMenuItem);
     }
     else if (CntxMenuID == kCMShowHelpSelected)
@@ -3216,7 +3216,7 @@ gui_mch_new_colors(void)
 {
     /* TODO:
      * This proc is called when Normal is set to a value
-     * so what msut be done? I don't know
+     * so what must be done? I don't know
      */
 }
 
@@ -3303,7 +3303,6 @@ gui_mch_get_winpos(int *x, int *y)
     *x = bounds.left;
     *y = bounds.top;
     return OK;
-    return FAIL;
 }
 
 /*
@@ -4481,7 +4480,7 @@ gui_mch_wait_for_chars(int wtime)
         * event arrives.  No need to check for input_buf_full because we are
         * returning as soon as it contains a single char.
         */
-       /* TODO: reduce wtime accordinly???  */
+       /* TODO: reduce wtime accordingly???  */
        if (wtime > -1)
            sleeppyTick = 60 * wtime / 1000;
        else
@@ -4671,7 +4670,7 @@ clip_mch_request_selection(VimClipboard *cbd)
     if (flavor)
        type = **textOfClip;
     else
-       type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
+       type = MAUTO;
 
     tempclip = lalloc(scrapSize + 1, TRUE);
     mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
@@ -5357,7 +5356,7 @@ gui_mch_browse(
     char_u *initdir,
     char_u *filter)
 {
-    /* TODO: Add Ammon's safety checl (Dany) */
+    /* TODO: Add Ammon's safety check (Dany) */
     NavReplyRecord     reply;
     char_u             *fname = NULL;
     char_u             **fnames = NULL;
@@ -5583,7 +5582,8 @@ gui_mch_dialog(
     char_u     *message,
     char_u     *buttons,
     int                dfltbutton,
-    char_u     *textfield)
+    char_u     *textfield,
+    int                ex_cmd)
 {
     Handle     buttonDITL;
     Handle     iconDITL;
@@ -5704,7 +5704,7 @@ gui_mch_dialog(
 
        /* Resize the button to fit its name */
        width = StringWidth(name) + 2 * dfltButtonEdge;
-       /* Limite the size of any button to an acceptable value. */
+       /* Limit the size of any button to an acceptable value. */
        /* TODO: Should be based on the message width */
        if (width > maxButtonWidth)
            width = maxButtonWidth;
@@ -5723,13 +5723,13 @@ gui_mch_dialog(
     iconDITL = GetResource('DITL', 131);
     switch (type)
     {
-       case VIM_GENERIC:  useIcon = kNoteIcon;
-       case VIM_ERROR:    useIcon = kStopIcon;
-       case VIM_WARNING:  useIcon = kCautionIcon;
-       case VIM_INFO:     useIcon = kNoteIcon;
-       case VIM_QUESTION: useIcon = kNoteIcon;
-       default:      useIcon = kStopIcon;
-    };
+       case VIM_GENERIC:
+       case VIM_INFO:
+       case VIM_QUESTION: useIcon = kNoteIcon; break;
+       case VIM_WARNING:  useIcon = kCautionIcon; break;
+       case VIM_ERROR:    useIcon = kStopIcon; break;
+       default:           useIcon = kStopIcon;
+    }
     AppendDITL(theDialog, iconDITL, overlayDITL);
     ReleaseResource(iconDITL);
     GetDialogItem(theDialog, iconItm.idx, &itemType, &itemHandle, &box);
@@ -5887,12 +5887,12 @@ gui_mch_dialog(
     /* Free the modal filterProc */
     DisposeRoutineDescriptor(dialogUPP);
 
-    /* Get ride of th edialog (free memory) */
+    /* Get ride of thdialog (free memory) */
     DisposeDialog(theDialog);
 
     return itemHit;
 /*
- * Usefull thing which could be used
+ * Useful thing which could be used
  * SetDialogTimeout(): Auto click a button after timeout
  * SetDialogTracksCursor() : Get the I-beam cursor over input box
  * MoveDialogItem():       Probably better than SetDialogItem
@@ -5967,9 +5967,9 @@ gui_mch_setmouse(int x, int y)
        /* New way */
 
        /*
-        * Get first devoice with one button.
-        * This will probably be the standad mouse
-        * startat head of cursor dev list
+        * Get first device with one button.
+        * This will probably be the standard mouse
+        * start at head of cursor dev list
         *
         */
 
@@ -6100,7 +6100,7 @@ gui_mch_settitle(char_u *title, char_u *icon)
 #endif
 
 /*
- * Transfered from os_mac.c for MacOS X using os_unix.c prep work
+ * Transferred from os_mac.c for MacOS X using os_unix.c prep work
  */
 
     int
@@ -6151,7 +6151,7 @@ GetFSSpecFromPath(char_u *file, FSSpec *fileFSSpec)
 }
 
 /*
- * Convert a FSSpec to a fuill path
+ * Convert a FSSpec to a full path
  */
 
 char_u *FullPathFromFSSpec_save(FSSpec file)
@@ -6215,8 +6215,8 @@ char_u *FullPathFromFSSpec_save(FSSpec file)
 
 #ifdef USE_UNIXFILENAME
     /*
-     * The function used here are available in Carbon, but
-     * do nothing une MacOS 8 and 9
+     * The functions used here are available in Carbon, but do nothing on
+     * MacOS 8 and 9.
      */
     if (error == fnfErr)
     {
@@ -6543,8 +6543,8 @@ getTabLabel(tabpage_T *page)
 static ControlRef dataBrowser = NULL;
 
 // when the tabline is hidden, vim doesn't call update_tabline(). When
-// the tabline is shown again, show_tabline() is called before upate_tabline(),
-// and because of this, the tab labels and vims internal tabs are out of sync
+// the tabline is shown again, show_tabline() is called before update_tabline(),
+// and because of this, the tab labels and vim's internal tabs are out of sync
 // for a very short time. to prevent inconsistent state, we store the labels
 // of the tabs, not pointers to the tabs (which are invalid for a short time).
 static CFStringRef *tabLabels = NULL;
@@ -6578,7 +6578,7 @@ dbItemDataCallback(ControlRef browser,
 
     // assert(property == kTabsColumn); // why is this violated??
 
-    // changeValue is true if we have a modifieable list and data was changed.
+    // changeValue is true if we have a modifiable list and data was changed.
     // In our case, it's always false.
     // (that is: if (changeValue) updateInternalData(); else return
     // internalData();
index 51e6112..57f264d 100644 (file)
@@ -1344,7 +1344,7 @@ gui_mch_add_menu_item(menu, idx)
        else
        {
            /* Without shadows one can't sense whatever the button has been
-            * pressed or not! However we wan't to save a bit of space...
+            * pressed or not! However we want to save a bit of space...
             * Need the highlightThickness to see the focus.
             */
            XtSetArg(args[n], XmNhighlightThickness, 1); n++;
@@ -2549,13 +2549,14 @@ create_pixmap_label(parent, name, data, args, arg)
 #endif
 
     int
-gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield)
+gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield, ex_cmd)
     int                type UNUSED;
     char_u     *title;
     char_u     *message;
     char_u     *button_names;
     int                dfltbutton;
     char_u     *textfield;             /* buffer of size IOSIZE */
+    int                ex_cmd UNUSED;
 {
     char_u             *buts;
     char_u             *p, *next;
@@ -3204,7 +3205,7 @@ motif_get_toolbar_colors(bgp, fgp, bsp, tsp, hsp)
 # ifdef FEAT_FOOTER
 /*
  * The next toolbar enter/leave callbacks should really do balloon help.  But
- * I have to use footer help for backwards compatability.  Hopefully both will
+ * I have to use footer help for backwards compatibility.  Hopefully both will
  * get implemented and the user will have a choice.
  */
     static void
@@ -3652,7 +3653,7 @@ find_replace_keypress(w, frdp, event)
     static void
 set_label(w, label)
     Widget w;
-    char_u *label;
+    char *label;
 {
     XmString   str;
     char_u     *p, *next;
@@ -3661,7 +3662,7 @@ set_label(w, label)
     if (!w)
        return;
 
-    p = vim_strsave(label);
+    p = vim_strsave((char_u *)label);
     if (p == NULL)
        return;
     for (next = p; *next; ++next)
index 42b1242..aa99dd7 100644 (file)
 
 #include "vim.h"
 
-#ifdef FEAT_TOOLBAR
-# include <photon/PxImage.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# ifdef FEAT_TOOLBAR
+#  include <photon/PxImage.h>
+# endif
 #endif
 
 #if !defined(__QNX__)
@@ -32,9 +35,9 @@
 #endif
 
 #define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a[0]))
-#define RGB(r,g,b) PgRGB(r,g,b)
+#define RGB(r, g, b) PgRGB(r, g, b)
 
-#define EVENT_BUFFER_SIZE sizeof( PhEvent_t ) + 1000
+#define EVENT_BUFFER_SIZE sizeof(PhEvent_t) + 1000
 
 /* Some defines for gui_mch_mousehide() */
 #define MOUSE_HIDE             TRUE
@@ -58,7 +61,7 @@ static PgColor_t gui_ph_mouse_color = Pg_BLACK;
 static PhPoint_t    gui_ph_raw_offset;
 static PtWidget_t   *gui_ph_timer_cursor;   /* handle cursor blinking */
 static PtWidget_t   *gui_ph_timer_timeout;  /* used in gui_mch_wait_for_chars */
-static short       is_timeout;             /* Has the timeout occured? */
+static short       is_timeout;             /* Has the timeout occurred? */
 
 /*
  * This is set inside the mouse callback for a right mouse
@@ -206,53 +209,53 @@ static PtCallbackF_t gui_ph_handle_menu_resize;
 static PtCallbackF_t gui_ph_handle_menu_unrealized;
 
 #ifdef USE_PANEL_GROUP
-static void gui_ph_get_panelgroup_margins( short*, short*, short*, short* );
+static void gui_ph_get_panelgroup_margins(short*, short*, short*, short*);
 #endif
 
 #ifdef FEAT_TOOLBAR
-static PhImage_t *gui_ph_toolbar_find_icon( vimmenu_T *menu );
+static PhImage_t *gui_ph_toolbar_find_icon(vimmenu_T *menu);
 #endif
 
-static void gui_ph_draw_start( void );
-static void gui_ph_draw_end( void );
+static void gui_ph_draw_start(void);
+static void gui_ph_draw_end(void);
 
 /* Set the text for the balloon */
-static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
+static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
                             PtWidget_t *widget,
                             int position,
                             char *text,
                             char *font,
                             PgColor_t fill_color,
-                            PgColor_t text_color );
+                            PgColor_t text_color);
 
 /****************************************************************************/
 
-static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
+static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
                             PtWidget_t *widget,
                             int position,
                             char *text,
                             char *font,
                             PgColor_t fill_color,
-                            PgColor_t text_color )
+                            PgColor_t text_color)
 {
     PtArg_t arg;
     vimmenu_T *menu;
     char_u  *tooltip;
 
-    PtSetArg( &arg, Pt_ARG_POINTER, &menu, 0 );
-    PtGetResources( widget, 1, &arg );
+    PtSetArg(&arg, Pt_ARG_POINTER, &menu, 0);
+    PtGetResources(widget, 1, &arg);
 
     /* Override the text and position */
 
     tooltip = text;
-    if( menu != NULL )
+    if (menu != NULL)
     {
        int index = MENU_INDEX_TIP;
-       if( menu->strings[ index ] != NULL )
+       if (menu->strings[ index ] != NULL)
            tooltip = menu->strings[ index ];
     }
 
-    return( PtInflateBalloon(
+    return PtInflateBalloon(
            window,
            widget,
            /* Don't put the balloon at the bottom,
@@ -261,25 +264,25 @@ static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
            tooltip,
            font,
            fill_color,
-           text_color ) );
+           text_color);
 }
 
     static void
-gui_ph_resize_container( void )
+gui_ph_resize_container(void)
 {
     PhArea_t area;
 
-    PtWidgetArea( gui.vimWindow, &area );
-    PtWidgetPos ( gui.vimContainer, &area.pos );
+    PtWidgetArea(gui.vimWindow, &area);
+    PtWidgetPos (gui.vimContainer, &area.pos);
 
-    PtSetResource( gui.vimContainer, Pt_ARG_AREA, &area, 0 );
+    PtSetResource(gui.vimContainer, Pt_ARG_AREA, &area, 0);
 }
 
     static int
 gui_ph_handle_menu_resize(
        PtWidget_t *widget,
        void *other,
-       PtCallbackInfo_t *info )
+       PtCallbackInfo_t *info)
 {
     PtContainerCallback_t *sizes = info->cbdata;
     PtWidget_t         *container;
@@ -291,7 +294,7 @@ gui_ph_handle_menu_resize(
     /* Because vim treats the toolbar and menubar separately,
      * and here they're lumped together into a PtToolbarGroup,
      * we only need either menu_height or toolbar_height set at once */
-    if( gui.menu_is_active )
+    if (gui.menu_is_active)
     {
        gui.menu_height = height;
        gui.toolbar_height = 0;
@@ -310,16 +313,16 @@ gui_ph_handle_menu_resize(
     container = gui.vimContainer;
 #endif
 
-    PtSetResource( container, Pt_ARG_POS, &below_menu, 0 );
+    PtSetResource(container, Pt_ARG_POS, &below_menu, 0);
 
     gui_ph_resize_container();
 
 #ifdef USE_PANEL_GROUP
     gui_ph_get_panelgroup_margins(
            &pg_margin_top, &pg_margin_bottom,
-           &pg_margin_left, &pg_margin_right );
+           &pg_margin_left, &pg_margin_right);
 #endif
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
 /*
@@ -330,23 +333,23 @@ gui_ph_handle_menu_resize(
 gui_ph_handle_timer_cursor(
        PtWidget_t *widget,
        void *data,
-       PtCallbackInfo_t *info )
+       PtCallbackInfo_t *info)
 {
-    if( blink_state == BLINK_ON )
+    if (blink_state == BLINK_ON)
     {
        gui_undraw_cursor();
        blink_state = BLINK_OFF;
-       PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
-               blink_offtime, 0 );
+       PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+               blink_offtime, 0);
     }
     else
     {
        gui_update_cursor(TRUE, FALSE);
        blink_state = BLINK_ON;
-       PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
-               blink_ontime, 0 );
+       PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+               blink_ontime, 0);
     }
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static int
@@ -354,25 +357,25 @@ gui_ph_handle_timer_timeout(PtWidget_t *widget, void *data, PtCallbackInfo_t *in
 {
     is_timeout = TRUE;
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static int
-gui_ph_handle_window_cb( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_window_cb(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
     PhWindowEvent_t *we = info->cbdata;
     ushort_t *width, *height;
 
-    switch( we->event_f ) {
+    switch (we->event_f) {
        case Ph_WM_CLOSE:
            gui_shell_closed();
            break;
 
        case Ph_WM_FOCUS:
            /* Just in case it's hidden and needs to be shown */
-           gui_mch_mousehide( MOUSE_SHOW );
+           gui_mch_mousehide(MOUSE_SHOW);
 
-           if( we->event_state == Ph_WM_EVSTATE_FOCUS )
+           if (we->event_state == Ph_WM_EVSTATE_FOCUS)
            {
                gui_focus_change(TRUE);
                gui_mch_start_blink();
@@ -385,28 +388,28 @@ gui_ph_handle_window_cb( PtWidget_t *widget, void *data, PtCallbackInfo_t *info
            break;
 
        case Ph_WM_RESIZE:
-           PtGetResource( gui.vimWindow, Pt_ARG_WIDTH, &width, 0 );
-           PtGetResource( gui.vimWindow, Pt_ARG_HEIGHT, &height, 0 );
+           PtGetResource(gui.vimWindow, Pt_ARG_WIDTH, &width, 0);
+           PtGetResource(gui.vimWindow, Pt_ARG_HEIGHT, &height, 0);
 #ifdef USE_PANEL_GROUP
            width  -= (pg_margin_left + pg_margin_right);
            height -= (pg_margin_top + pg_margin_bottom);
 #endif
-           gui_resize_shell( *width, *height );
-           gui_set_shellsize( FALSE, FALSE, RESIZE_BOTH );
+           gui_resize_shell(*width, *height);
+           gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
            is_ignore_draw = FALSE;
-           PtEndFlux( gui.vimContainer );
-           PtContainerRelease( gui.vimContainer );
+           PtEndFlux(gui.vimContainer);
+           PtContainerRelease(gui.vimContainer);
            break;
 
        default:
            break;
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static int
-gui_ph_handle_scrollbar( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_scrollbar(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
     PtScrollbarCallback_t *scroll;
     scrollbar_T *sb;
@@ -415,10 +418,10 @@ gui_ph_handle_scrollbar( PtWidget_t *widget, void *data, PtCallbackInfo_t *info
     scroll = info->cbdata;
 
     sb = (scrollbar_T *) data;
-    if( sb != NULL )
+    if (sb != NULL)
     {
        value = scroll->position;
-       switch( scroll->action )
+       switch (scroll->action)
        {
            case Pt_SCROLL_DRAGGED:
                dragging = TRUE;
@@ -426,107 +429,107 @@ gui_ph_handle_scrollbar( PtWidget_t *widget, void *data, PtCallbackInfo_t *info
 
            case Pt_SCROLL_SET:
                /* FIXME: return straight away here? */
-               return( Pt_CONTINUE );
+               return Pt_CONTINUE;
                break;
        }
 
        gui_drag_scrollbar(sb, value, dragging);
     }
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static int
-gui_ph_handle_keyboard( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
     PhKeyEvent_t    *key;
     unsigned char   string[6];
     int                    len, i;
     int                    ch, modifiers;
 
-    key = PhGetData( info->event );
+    key = PhGetData(info->event);
 
     ch = modifiers = len = 0;
 
-    if( p_mh )
-       gui_mch_mousehide( MOUSE_HIDE );
+    if (p_mh)
+       gui_mch_mousehide(MOUSE_HIDE);
 
     /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
-    if( key->key_flags & Pk_KF_Compose )
+    if (key->key_flags & Pk_KF_Compose)
     {
-       return( Pt_CONTINUE );
+       return Pt_CONTINUE;
     }
 
-    if(key->key_flags & Pk_KF_Cap_Valid) &&
-           PkIsKeyDown( key->key_flags ) )
+    if ((key->key_flags & Pk_KF_Cap_Valid) &&
+           PkIsKeyDown(key->key_flags))
     {
 #ifdef FEAT_MENU
        /*
         * Only show the menu if the Alt key is down, and the Shift & Ctrl
         * keys aren't down, as well as the other conditions
         */
-       if( ( ( key->key_mods & Pk_KM_Alt ) &&
-                   !( key->key_mods & Pk_KM_Shift ) &&
-                   !( key->key_mods & Pk_KM_Ctrl ) ) &&
+       if (((key->key_mods & Pk_KM_Alt) &&
+                   !(key->key_mods & Pk_KM_Shift) &&
+                   !(key->key_mods & Pk_KM_Ctrl)) &&
            gui.menu_is_active &&
-           ( *p_wak == 'y' ||
-             ( *p_wak == 'm' &&
-               gui_is_menu_shortcut( key->key_cap ) ) ) )
+           (*p_wak == 'y' ||
+             (*p_wak == 'm' &&
+               gui_is_menu_shortcut(key->key_cap))))
        {
            /* Fallthrough and let photon look for the hotkey */
-           return( Pt_CONTINUE );
+           return Pt_CONTINUE;
        }
 #endif
 
-       for( i = 0; special_keys[i].key_sym != 0; i++ )
+       for (i = 0; special_keys[i].key_sym != 0; i++)
        {
-           if( special_keys[i].key_sym == key->key_cap )
+           if (special_keys[i].key_sym == key->key_cap)
            {
                len = 0;
-               if( special_keys[i].vim_code1 == NUL )
+               if (special_keys[i].vim_code1 == NUL)
                    ch = special_keys[i].vim_code0;
                else
                {
                    /* Detect if a keypad number key has been pressed
                     * and change the key if Num Lock is on */
-                   ifkey->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
-                           && ( key->key_mods & Pk_KM_Num_Lock ) )
+                   if (key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
+                           && (key->key_mods & Pk_KM_Num_Lock))
                    {
                        /* FIXME: For now, just map the key to a ascii value
                         * (see <photon/PkKeyDef.h>) */
                        ch = key->key_cap - 0xf080;
                    }
                    else
-                       ch = TO_SPECIAL( special_keys[i].vim_code0,
-                               special_keys[i].vim_code1 );
+                       ch = TO_SPECIAL(special_keys[i].vim_code0,
+                               special_keys[i].vim_code1);
                }
                break;
            }
        }
 
-       if( key->key_mods & Pk_KM_Ctrl )
+       if (key->key_mods & Pk_KM_Ctrl)
            modifiers |= MOD_MASK_CTRL;
-       if( key->key_mods & Pk_KM_Alt )
+       if (key->key_mods & Pk_KM_Alt)
            modifiers |= MOD_MASK_ALT;
-       if( key->key_mods & Pk_KM_Shift )
+       if (key->key_mods & Pk_KM_Shift)
            modifiers |= MOD_MASK_SHIFT;
 
        /* Is this not a special key? */
-       if( special_keys[i].key_sym == 0 )
+       if (special_keys[i].key_sym == 0)
        {
-           ch = PhTo8859_1( key );
-           ifch == -1
+           ch = PhTo8859_1(key);
+           if (ch == -1
 #ifdef FEAT_MBYTE
-               || ( enc_utf8 && ch > 127 )
+               || (enc_utf8 && ch > 127)
 #endif
                )
            {
 #ifdef FEAT_MBYTE
-               len = PhKeyToMb( string, key );
-               if( len > 0 )
+               len = PhKeyToMb(string, key);
+               if (len > 0)
                {
                    static char buf[6];
                    int src_taken, dst_made;
-                   if( enc_utf8 != TRUE )
+                   if (enc_utf8 != TRUE)
                    {
                        PxTranslateFromUTF(
                                charset_translate,
@@ -535,70 +538,70 @@ gui_ph_handle_keyboard( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
                                &src_taken,
                                buf,
                                6,
-                               &dst_made );
+                               &dst_made);
 
-                       add_to_input_buf( buf, dst_made );
+                       add_to_input_buf(buf, dst_made);
                    }
                    else
                    {
-                       add_to_input_buf( string, len );
+                       add_to_input_buf(string, len);
                    }
 
-                   return( Pt_CONSUME );
+                   return Pt_CONSUME;
                }
                len = 0;
 #endif
                ch = key->key_cap;
-               if( ch < 0xff )
+               if (ch < 0xff)
                {
                    /* FIXME: is this the right thing to do? */
-                   if( modifiers & MOD_MASK_CTRL )
+                   if (modifiers & MOD_MASK_CTRL)
                    {
                        modifiers &= ~MOD_MASK_CTRL;
 
-                       if( ( ch >= 'a'  &&  ch <= 'z' ) ||
+                       if ((ch >= 'a' && ch <= 'z') ||
                                ch == '[' ||
                                ch == ']' ||
-                               ch == '\\' )
-                           ch = Ctrl_chr( ch );
-                       else if( ch == '2' )
+                               ch == '\\')
+                           ch = Ctrl_chr(ch);
+                       else if (ch == '2')
                            ch = NUL;
-                       else if( ch == '6' )
+                       else if (ch == '6')
                            ch = 0x1e;
-                       else if( ch == '-' )
+                       else if (ch == '-')
                            ch = 0x1f;
                        else
                            modifiers |= MOD_MASK_CTRL;
                    }
 
-                   if( modifiers & MOD_MASK_ALT )
+                   if (modifiers & MOD_MASK_ALT)
                    {
-                       ch = Meta( ch );
+                       ch = Meta(ch);
                        modifiers &= ~MOD_MASK_ALT;
                    }
                }
                else
                {
-                   return( Pt_CONTINUE );
+                   return Pt_CONTINUE;
                }
            }
            else
                modifiers &= ~MOD_MASK_SHIFT;
        }
 
-       ch = simplify_key( ch, &modifiers );
-       if( modifiers )
+       ch = simplify_key(ch, &modifiers);
+       if (modifiers)
        {
            string[ len++ ] = CSI;
            string[ len++ ] = KS_MODIFIER;
            string[ len++ ] = modifiers;
        }
 
-       if( IS_SPECIAL( ch ) )
+       if (IS_SPECIAL(ch))
        {
            string[ len++ ] = CSI;
-           string[ len++ ] = K_SECOND( ch );
-           string[ len++ ] = K_THIRD( ch );
+           string[ len++ ] = K_SECOND(ch);
+           string[ len++ ] = K_THIRD(ch);
        }
        else
        {
@@ -619,28 +622,28 @@ gui_ph_handle_keyboard( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
            string[ len++ ] = KE_CSI;
        }
 
-       if( len > 0 )
+       if (len > 0)
        {
-           add_to_input_buf( string, len );
-           return( Pt_CONSUME );
+           add_to_input_buf(string, len);
+           return Pt_CONSUME;
        }
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static int
-gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_mouse(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
     PhPointerEvent_t *pointer;
     PhRect_t        *pos;
     int                     button = 0, repeated_click, modifiers = 0x0;
     short           mouse_x, mouse_y;
 
-    pointer = PhGetData( info->event );
-    pos = PhGetRects( info->event );
+    pointer = PhGetData(info->event);
+    pos = PhGetRects(info->event);
 
-    gui_mch_mousehide( MOUSE_SHOW );
+    gui_mch_mousehide(MOUSE_SHOW);
 
     /*
      * Coordinates need to be relative to the base window,
@@ -649,27 +652,27 @@ gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
     mouse_x = pos->ul.x + gui.border_width;
     mouse_y = pos->ul.y + gui.border_width;
 
-    if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
+    if (info->event->type == Ph_EV_PTR_MOTION_NOBUTTON)
     {
-       gui_mouse_moved( mouse_x, mouse_y );
-       return( Pt_CONTINUE );
+       gui_mouse_moved(mouse_x, mouse_y);
+       return Pt_CONTINUE;
     }
 
-    if( pointer->key_mods & Pk_KM_Shift )
+    if (pointer->key_mods & Pk_KM_Shift)
        modifiers |= MOUSE_SHIFT;
-    if( pointer->key_mods & Pk_KM_Ctrl )
+    if (pointer->key_mods & Pk_KM_Ctrl)
        modifiers |= MOUSE_CTRL;
-    if( pointer->key_mods & Pk_KM_Alt )
+    if (pointer->key_mods & Pk_KM_Alt)
        modifiers |= MOUSE_ALT;
 
     /*
      * FIXME More than one button may be involved, but for
      * now just deal with one
      */
-    if( pointer->buttons & Ph_BUTTON_SELECT )
+    if (pointer->buttons & Ph_BUTTON_SELECT)
        button = MOUSE_LEFT;
 
-    if( pointer->buttons & Ph_BUTTON_MENU )
+    if (pointer->buttons & Ph_BUTTON_MENU)
     {
        button = MOUSE_RIGHT;
        /* Need the absolute coordinates for the popup menu */
@@ -677,65 +680,65 @@ gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
        abs_mouse.y = pointer->pos.y;
     }
 
-    if( pointer->buttons & Ph_BUTTON_ADJUST )
+    if (pointer->buttons & Ph_BUTTON_ADJUST)
        button = MOUSE_MIDDLE;
 
     /* Catch a real release (not phantom or other releases */
-    if( info->event->type == Ph_EV_BUT_RELEASE )
+    if (info->event->type == Ph_EV_BUT_RELEASE)
        button = MOUSE_RELEASE;
 
-    if( info->event->type & Ph_EV_PTR_MOTION_BUTTON )
+    if (info->event->type & Ph_EV_PTR_MOTION_BUTTON)
        button = MOUSE_DRAG;
 
 #if 0
     /* Vim doesn't use button repeats */
-    if( info->event->type & Ph_EV_BUT_REPEAT )
+    if (info->event->type & Ph_EV_BUT_REPEAT)
        button = MOUSE_DRAG;
 #endif
 
     /* Don't do anything if it is one of the phantom mouse release events */
-    if( ( button != MOUSE_RELEASE ) ||
-           ( info->event->subtype == Ph_EV_RELEASE_REAL ) )
+    if ((button != MOUSE_RELEASE) ||
+           (info->event->subtype == Ph_EV_RELEASE_REAL))
     {
        repeated_click = (pointer->click_count >= 2) ? TRUE : FALSE;
 
-       gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
+       gui_send_mouse_event(button , mouse_x, mouse_y, repeated_click, modifiers);
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
 /* Handle a focus change of the PtRaw widget */
     static int
-gui_ph_handle_focus( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_focus(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
-    if( info->reason == Pt_CB_LOST_FOCUS )
+    if (info->reason == Pt_CB_LOST_FOCUS)
     {
-       PtRemoveEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
-               gui_ph_handle_mouse, NULL );
+       PtRemoveEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+               gui_ph_handle_mouse, NULL);
 
-       gui_mch_mousehide( MOUSE_SHOW );
+       gui_mch_mousehide(MOUSE_SHOW);
     }
     else
     {
-       PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
-               gui_ph_handle_mouse, NULL );
+       PtAddEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+               gui_ph_handle_mouse, NULL);
     }
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static void
-gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
+gui_ph_handle_raw_draw(PtWidget_t *widget, PhTile_t *damage)
 {
     PhRect_t   *r;
     PhPoint_t  offset;
     PhPoint_t  translation;
 
-    if( is_ignore_draw == TRUE )
+    if (is_ignore_draw == TRUE)
        return;
 
-    PtSuperClassDraw( PtBasic, widget, damage );
-    PgGetTranslation( &translation );
+    PtSuperClassDraw(PtBasic, widget, damage);
+    PgGetTranslation(&translation);
     PgClearTranslation();
 
 #if 0
@@ -750,21 +753,21 @@ gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
     out_flush();
 #endif
 
-    PtWidgetOffset( widget, &offset );
-    PhTranslatePoint( &offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+    PtWidgetOffset(widget, &offset);
+    PhTranslatePoint(&offset, PtWidgetPos(gui.vimTextArea, NULL));
 
 #if 1
     /* Redraw individual damage regions */
-    if( damage->next != NULL )
+    if (damage->next != NULL)
        damage = damage->next;
 
-    while( damage != NULL )
+    while (damage != NULL)
     {
        r = &damage->rect;
        gui_redraw(
                r->ul.x - offset.x, r->ul.y - offset.y,
                r->lr.x - r->ul.x + 1,
-               r->lr.y - r->ul.y + 1 );
+               r->lr.y - r->ul.y + 1);
        damage = damage->next;
     }
 #else
@@ -773,39 +776,39 @@ gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
     gui_redraw(
            r->ul.x - offset.x, r->ul.y - offset.y,
            r->lr.x - r->ul.x + 1,
-           r->lr.y - r->ul.y + 1 );
+           r->lr.y - r->ul.y + 1);
 #endif
 
-    PgSetTranslation( &translation, 0 );
+    PgSetTranslation(&translation, 0);
 }
 
     static int
 gui_ph_handle_pulldown_menu(
        PtWidget_t *widget,
        void *data,
-       PtCallbackInfo_t *info )
+       PtCallbackInfo_t *info)
 {
-    if( data != NULL )
+    if (data != NULL)
     {
        vimmenu_T *menu = (vimmenu_T *) data;
 
-       PtPositionMenu( menu->submenu_id, NULL );
-       PtRealizeWidget( menu->submenu_id );
+       PtPositionMenu(menu->submenu_id, NULL);
+       PtRealizeWidget(menu->submenu_id);
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
 /* This is used for pulldown/popup menus and also toolbar buttons */
     static int
-gui_ph_handle_menu( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_menu(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
-    if( data != NULL )
+    if (data != NULL)
     {
        vimmenu_T *menu = (vimmenu_T *) data;
-       gui_menu_cb( menu );
+       gui_menu_cb(menu);
     }
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
 /* Stop focus from disappearing into the menubar... */
@@ -813,20 +816,20 @@ gui_ph_handle_menu( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
 gui_ph_handle_menu_unrealized(
        PtWidget_t *widget,
        void *data,
-       PtCallbackInfo_t *info )
+       PtCallbackInfo_t *info)
 {
-    PtGiveFocus( gui.vimTextArea, NULL );
-    return( Pt_CONTINUE );
+    PtGiveFocus(gui.vimTextArea, NULL);
+    return Pt_CONTINUE;
 }
 
     static int
 gui_ph_handle_window_open(
        PtWidget_t *widget,
        void *data,
-       PtCallbackInfo_t *info )
+       PtCallbackInfo_t *info)
 {
-    gui_set_shellsize( FALSE, TRUE, RESIZE_BOTH );
-    return( Pt_CONTINUE );
+    gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
+    return Pt_CONTINUE;
 }
 
 /****************************************************************************/
@@ -836,74 +839,74 @@ gui_ph_handle_window_open(
 
 /* TODO: Set a clipping rect? */
     static void
-gui_ph_draw_start( void )
+gui_ph_draw_start(void)
 {
     PhGC_t *gc;
 
     gc = PgGetGC();
-    PgSetRegion( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) );
-    PgClearClippingsCx( gc );
-    PgClearTranslationCx( gc );
+    PgSetRegion(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)));
+    PgClearClippingsCx(gc);
+    PgClearTranslationCx(gc);
 
-    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
-    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
 
-    PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
+    PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
 }
 
     static void
-gui_ph_draw_end( void )
+gui_ph_draw_end(void)
 {
     gui_ph_raw_offset.x = -gui_ph_raw_offset.x;
     gui_ph_raw_offset.y = -gui_ph_raw_offset.y;
-    PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
+    PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
 }
 
 #ifdef USE_PANEL_GROUP
     static vimmenu_T *
-gui_ph_find_buffer_item( char_u *name )
+gui_ph_find_buffer_item(char_u *name)
 {
     vimmenu_T *top_level = root_menu;
     vimmenu_T *items = NULL;
 
-    whiletop_level != NULL &&
-           ( STRCMP( top_level->dname, "Buffers" ) != 0 ) )
+    while (top_level != NULL &&
+           (STRCMP(top_level->dname, "Buffers") != 0))
        top_level = top_level->next;
 
-    if( top_level != NULL )
+    if (top_level != NULL)
     {
        items = top_level->children;
 
-       whileitems != NULL &&
-               ( STRCMP( items->dname, name ) != 0 ) )
+       while (items != NULL &&
+               (STRCMP(items->dname, name) != 0))
            items = items->next;
     }
-    return( items );
+    return items;
 }
 
     static void
-gui_ph_pg_set_buffer_num( int_u buf_num )
+gui_ph_pg_set_buffer_num(int_u buf_num)
 {
     int i;
     char search[16];
     char *mark;
 
-    if( gui.vimTextArea == NULL || buf_num == 0 )
+    if (gui.vimTextArea == NULL || buf_num == 0)
        return;
 
     search[0] = '(';
-    ultoa( buf_num, &search[1], 10 );
-    STRCAT( search, ")" );
+    ultoa(buf_num, &search[1], 10);
+    STRCAT(search, ")");
 
-    for( i = 0; i < num_panels; i++ )
+    for (i = 0; i < num_panels; i++)
     {
        /* find the last "(" in the panel title and see if the buffer
         * number in the title matches the one we're looking for */
-       mark = STRRCHR( panel_titles[ i ], '(' );
-       if( mark != NULL && STRCMP( mark, search ) == 0 )
+       mark = STRRCHR(panel_titles[ i ], '(');
+       if (mark != NULL && STRCMP(mark, search) == 0)
        {
-           PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
-                   i, 0 );
+           PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
+                   i, 0);
        }
     }
 }
@@ -912,22 +915,22 @@ gui_ph_pg_set_buffer_num( int_u buf_num )
 gui_ph_handle_pg_change(
        PtWidget_t *widget,
        void *data,
-       PtCallbackInfo_t *info )
+       PtCallbackInfo_t *info)
 {
     vimmenu_T *menu;
     PtPanelGroupCallback_t *panel;
 
-    if( info->event != NULL )
+    if (info->event != NULL)
     {
        panel = info->cbdata;
-       if( panel->new_panel != NULL )
+       if (panel->new_panel != NULL)
        {
-           menu = gui_ph_find_buffer_item( panel->new_panel );
-           if( menu )
-               gui_menu_cb( menu );
+           menu = gui_ph_find_buffer_item(panel->new_panel);
+           if (menu)
+               gui_menu_cb(menu);
        }
     }
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static void
@@ -935,17 +938,17 @@ gui_ph_get_panelgroup_margins(
        short *top,
        short *bottom,
        short *left,
-       short *right )
+       short *right)
 {
     unsigned short abs_raw_x, abs_raw_y, abs_panel_x, abs_panel_y;
     const unsigned short *margin_top, *margin_bottom;
     const unsigned short *margin_left, *margin_right;
 
-    PtGetAbsPosition( gui.vimTextArea, &abs_raw_x, &abs_raw_y );
-    PtGetAbsPosition( gui.vimPanelGroup, &abs_panel_x, &abs_panel_y );
+    PtGetAbsPosition(gui.vimTextArea, &abs_raw_x, &abs_raw_y);
+    PtGetAbsPosition(gui.vimPanelGroup, &abs_panel_x, &abs_panel_y);
 
-    PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0 );
-    PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0 );
+    PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0);
+    PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0);
 
     abs_raw_x -= abs_panel_x;
     abs_raw_y -= abs_panel_y;
@@ -959,85 +962,85 @@ gui_ph_get_panelgroup_margins(
 
 /* Used for the tabs for PtPanelGroup */
     static int
-gui_ph_is_buffer_item( vimmenu_T *menu, vimmenu_T *parent )
+gui_ph_is_buffer_item(vimmenu_T *menu, vimmenu_T *parent)
 {
     char *mark;
 
-    if( STRCMP( parent->dname, "Buffers" ) == 0 )
+    if (STRCMP(parent->dname, "Buffers") == 0)
     {
        /* Look for '(' digits ')' */
-       mark = vim_strchr( menu->dname, '(' );
-       if( mark != NULL )
+       mark = vim_strchr(menu->dname, '(');
+       if (mark != NULL)
        {
            mark++;
-           while( isdigit( *mark ) )
+           while (isdigit(*mark))
                mark++;
 
-           if( *mark == ')' )
-               return( TRUE);
+           if (*mark == ')')
+               return TRUE;
        }
     }
-    return( FALSE );
+    return FALSE;
 }
 
     static void
-gui_ph_pg_add_buffer(char *name )
+gui_ph_pg_add_buffer(char *name)
 {
     char **new_titles = NULL;
 
-    new_titles = (char **) alloc( ( num_panels + 1 ) * sizeof( char ** ) );
-    if( new_titles != NULL )
+    new_titles = (char **) alloc((num_panels + 1) * sizeof(char **));
+    if (new_titles != NULL)
     {
-       if( num_panels > 0 )
-           memcpy( new_titles, panel_titles, num_panels * sizeof( char ** ) );
+       if (num_panels > 0)
+           memcpy(new_titles, panel_titles, num_panels * sizeof(char **));
 
        new_titles[ num_panels++ ] = name;
 
-       PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
-               num_panels );
+       PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+               num_panels);
 
-       vim_free( panel_titles );
+       vim_free(panel_titles);
        panel_titles = new_titles;
     }
 }
 
     static void
-gui_ph_pg_remove_buffer( char *name )
+gui_ph_pg_remove_buffer(char *name)
 {
     int i;
     char **new_titles = NULL;
 
     /* If there is only 1 panel, we just use the temporary place holder */
-    if( num_panels > 1 )
+    if (num_panels > 1)
     {
-       new_titles = (char **) alloc( ( num_panels - 1 ) * sizeof( char ** ) );
-       if( new_titles != NULL )
+       new_titles = (char **) alloc((num_panels - 1) * sizeof(char **));
+       if (new_titles != NULL)
        {
            char **s = new_titles;
            /* Copy all the titles except the one we're removing */
-           for( i = 0; i < num_panels; i++ )
+           for (i = 0; i < num_panels; i++)
            {
-               if( STRCMP( panel_titles[ i ], name ) != 0 )
+               if (STRCMP(panel_titles[ i ], name) != 0)
                {
                    *s++ = panel_titles[ i ];
                }
            }
            num_panels--;
 
-           PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
-                   num_panels );
+           PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+                   num_panels);
 
-           vim_free( panel_titles );
+           vim_free(panel_titles);
            panel_titles = new_titles;
        }
     }
     else
     {
        num_panels--;
-       PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
-               1 );
+       PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
+               1);
 
-       vim_free( panel_titles );
+       vim_free(panel_titles);
        panel_titles = NULL;
     }
 }
@@ -1047,38 +1050,38 @@ gui_ph_pg_remove_buffer( char *name )
 gui_ph_handle_buffer_remove(
        PtWidget_t *widget,
        void *data,
-       PtCallbackInfo_t *info )
+       PtCallbackInfo_t *info)
 {
     vimmenu_T *menu;
 
-    if( data != NULL )
+    if (data != NULL)
     {
        menu = (vimmenu_T *) data;
-       gui_ph_pg_remove_buffer( menu->dname );
+       gui_ph_pg_remove_buffer(menu->dname);
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 #endif
 
     static int
-gui_ph_pane_resize( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_pane_resize(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
-    if( PtWidgetIsRealized( widget ) )
+    if (PtWidgetIsRealized(widget))
     {
        is_ignore_draw = TRUE;
-       PtStartFlux( gui.vimContainer );
-       PtContainerHold( gui.vimContainer );
+       PtStartFlux(gui.vimContainer);
+       PtContainerHold(gui.vimContainer);
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
 /****************************************************************************/
 
 #ifdef FEAT_MBYTE
     void
-gui_ph_encoding_changed( int new_encoding )
+gui_ph_encoding_changed(int new_encoding)
 {
     /* Default encoding is latin1 */
     char *charset = "latin1";
@@ -1094,13 +1097,13 @@ gui_ph_encoding_changed( int new_encoding )
        { DBCS_CHS, "gb" }
     };
 
-    for( i = 0; i < ARRAY_LENGTH( charsets ); i++ )
+    for (i = 0; i < ARRAY_LENGTH(charsets); i++)
     {
-       if( new_encoding == charsets[ i ].encoding )
+       if (new_encoding == charsets[ i ].encoding)
            charset = charsets[ i ].name;
     }
 
-    charset_translate = PxTranslateSet( charset_translate, charset );
+    charset_translate = PxTranslateSet(charset_translate, charset);
 }
 #endif
 
@@ -1112,7 +1115,7 @@ gui_mch_prepare(argc, argv)
     int            *argc;
     char    **argv;
 {
-    PtInit( NULL );
+    PtInit(NULL);
 }
 
     int
@@ -1124,90 +1127,90 @@ gui_mch_init(void)
     PhDim_t    window_size = {100, 100}; /* Arbitrary values */
     PhPoint_t  pos = {0, 0};
 
-    gui.event_buffer = (PhEvent_t *) alloc( EVENT_BUFFER_SIZE );
-    if( gui.event_buffer == NULL )
-       return( FAIL );
+    gui.event_buffer = (PhEvent_t *) alloc(EVENT_BUFFER_SIZE);
+    if (gui.event_buffer == NULL)
+       return FAIL;
 
     /* Get a translation so we can convert from ISO Latin-1 to UTF */
-    charset_translate = PxTranslateSet( NULL, "latin1" );
+    charset_translate = PxTranslateSet(NULL, "latin1");
 
     /* The +2 is for the 1 pixel dark line on each side */
     gui.border_offset = gui.border_width = GUI_PH_MARGIN + 2;
 
     /* Handle close events ourselves */
-    PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE );
-    PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
-           Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS );
-    PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
-    gui.vimWindow = PtCreateWidget( PtWindow, NULL, n, args );
-    if( gui.vimWindow == NULL )
-       return( FAIL );
-
-    PtAddCallback( gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL );
-    PtAddCallback( gui.vimWindow, Pt_CB_WINDOW_OPENING,
-           gui_ph_handle_window_open, NULL );
+    PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE);
+    PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
+           Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS);
+    PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
+    gui.vimWindow = PtCreateWidget(PtWindow, NULL, n, args);
+    if (gui.vimWindow == NULL)
+       return FAIL;
+
+    PtAddCallback(gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL);
+    PtAddCallback(gui.vimWindow, Pt_CB_WINDOW_OPENING,
+           gui_ph_handle_window_open, NULL);
 
     n = 0;
-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED );
-    PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_POS, &pos, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED);
+    PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_POS, &pos, 0);
 
 #ifdef USE_PANEL_GROUP
-    /* Put in a temprary place holder title */
-    PtSetArg( &args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1 );
+    /* Put in a temporary place holder title */
+    PtSetArg(&args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1);
 
-    gui.vimPanelGroup = PtCreateWidget( PtPanelGroup, gui.vimWindow, n, args );
-    if( gui.vimPanelGroup == NULL )
-       return( FAIL );
+    gui.vimPanelGroup = PtCreateWidget(PtPanelGroup, gui.vimWindow, n, args);
+    if (gui.vimPanelGroup == NULL)
+       return FAIL;
 
-    PtAddCallback( gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
-           gui_ph_handle_pg_change, NULL );
+    PtAddCallback(gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+           gui_ph_handle_pg_change, NULL);
 #else
     /* Turn off all edge decorations */
-    PtSetArg( &args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL );
-    PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT );
+    PtSetArg(&args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL);
+    PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT);
 
-    gui.vimContainer = PtCreateWidget( PtPane, gui.vimWindow, n, args );
-    if( gui.vimContainer == NULL )
-       return( FAIL );
+    gui.vimContainer = PtCreateWidget(PtPane, gui.vimWindow, n, args);
+    if (gui.vimContainer == NULL)
+       return FAIL;
 
-    PtAddCallback( gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL );
+    PtAddCallback(gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL);
 #endif
 
     /* Size for the text area is set in gui_mch_set_text_area_pos */
     n = 0;
 
-    PtSetArg( &args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1 );
-    PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1);
+    PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0);
     /*
      * Using focus render also causes the whole widget to be redrawn
      * whenever it changes focus, which is very annoying :p
      */
-    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
-           Pt_GETS_FOCUS | Pt_HIGHLIGHTED );
+    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
+           Pt_GETS_FOCUS | Pt_HIGHLIGHTED);
 #ifndef FEAT_MOUSESHAPE
-    PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0);
 #endif
 
-    gui.vimTextArea = PtCreateWidget( PtRaw, Pt_DFLT_PARENT, n, args );
-    ifgui.vimTextArea == NULL)
-       return( FAIL );
+    gui.vimTextArea = PtCreateWidget(PtRaw, Pt_DFLT_PARENT, n, args);
+    if (gui.vimTextArea == NULL)
+       return FAIL;
 
     /* TODO: use PtAddEventHandlers instead? */
     /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
-    PtAddEventHandler( gui.vimTextArea,
+    PtAddEventHandler(gui.vimTextArea,
            Ph_EV_BUT_PRESS | Ph_EV_BUT_RELEASE | Ph_EV_PTR_MOTION_BUTTON,
-           gui_ph_handle_mouse, NULL );
-    PtAddEventHandler( gui.vimTextArea, Ph_EV_KEY,
-           gui_ph_handle_keyboard, NULL );
-    PtAddCallback( gui.vimTextArea, Pt_CB_GOT_FOCUS,
-           gui_ph_handle_focus, NULL );
-    PtAddCallback( gui.vimTextArea, Pt_CB_LOST_FOCUS,
-           gui_ph_handle_focus, NULL );
+           gui_ph_handle_mouse, NULL);
+    PtAddEventHandler(gui.vimTextArea, Ph_EV_KEY,
+           gui_ph_handle_keyboard, NULL);
+    PtAddCallback(gui.vimTextArea, Pt_CB_GOT_FOCUS,
+           gui_ph_handle_focus, NULL);
+    PtAddCallback(gui.vimTextArea, Pt_CB_LOST_FOCUS,
+           gui_ph_handle_focus, NULL);
 
     /*
      * Now that the text area widget has been created, set up the colours,
@@ -1218,62 +1221,62 @@ gui_mch_init(void)
      * Create the two timers, not as accurate as using the kernel timer
      * functions, but good enough
      */
-    gui_ph_timer_cursor  = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
-    if( gui_ph_timer_cursor == NULL )
-       return( FAIL );
+    gui_ph_timer_cursor  = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
+    if (gui_ph_timer_cursor == NULL)
+       return FAIL;
 
-    gui_ph_timer_timeout = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
-    if( gui_ph_timer_timeout == NULL )
-       return( FAIL );
+    gui_ph_timer_timeout = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
+    if (gui_ph_timer_timeout == NULL)
+       return FAIL;
 
-    PtAddCallback( gui_ph_timer_cursor,  Pt_CB_TIMER_ACTIVATE,
+    PtAddCallback(gui_ph_timer_cursor,  Pt_CB_TIMER_ACTIVATE,
            gui_ph_handle_timer_cursor, NULL);
-    PtAddCallback( gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
+    PtAddCallback(gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
            gui_ph_handle_timer_timeout, NULL);
 
 #ifdef FEAT_MENU
     n = 0;
-    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
-           Pt_IS_ANCHORED );
-    gui.vimToolBarGroup = PtCreateWidget( PtToolbarGroup, gui.vimWindow,
-           n, args );
-    if( gui.vimToolBarGroup == NULL )
-       return( FAIL );
+    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
+           Pt_IS_ANCHORED);
+    gui.vimToolBarGroup = PtCreateWidget(PtToolbarGroup, gui.vimWindow,
+           n, args);
+    if (gui.vimToolBarGroup == NULL)
+       return FAIL;
 
-    PtAddCallback( gui.vimToolBarGroup, Pt_CB_RESIZE,
-           gui_ph_handle_menu_resize, NULL );
+    PtAddCallback(gui.vimToolBarGroup, Pt_CB_RESIZE,
+           gui_ph_handle_menu_resize, NULL);
 
     n = 0;
     flags = 0;
-    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
-    if( ! vim_strchr( p_go, GO_MENUS ) )
+    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+    if (! vim_strchr(p_go, GO_MENUS))
     {
        flags |= Pt_DELAY_REALIZE;
-       PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags );
+       PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags);
     }
-    gui.vimMenuBar = PtCreateWidget( PtMenuBar, gui.vimToolBarGroup, n, args );
-    if( gui.vimMenuBar == NULL )
-       return( FAIL );
+    gui.vimMenuBar = PtCreateWidget(PtMenuBar, gui.vimToolBarGroup, n, args);
+    if (gui.vimMenuBar == NULL)
+       return FAIL;
 
 # ifdef FEAT_TOOLBAR
     n = 0;
 
-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
-           Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED );
-    PtSetArg( &args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
-           Pt_RESIZE_Y_AS_REQUIRED );
-    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+           Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED);
+    PtSetArg(&args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
+           Pt_RESIZE_Y_AS_REQUIRED);
+    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
 
     flags = Pt_GETS_FOCUS;
-    if( ! vim_strchr( p_go, GO_TOOLBAR ) )
+    if (! vim_strchr(p_go, GO_TOOLBAR))
        flags |= Pt_DELAY_REALIZE;
 
-    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags );
+    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags);
 
-    gui.vimToolBar = PtCreateWidget( PtToolbar, gui.vimToolBarGroup, n, args );
-    if( gui.vimToolBar == NULL )
-       return( FAIL );
+    gui.vimToolBar = PtCreateWidget(PtToolbar, gui.vimToolBarGroup, n, args);
+    if (gui.vimToolBar == NULL)
+       return FAIL;
 
     /*
      * Size for the toolbar is fetched in gui_mch_show_toolbar, after
@@ -1284,13 +1287,13 @@ gui_mch_init(void)
 
 #endif
 
-    return( OK );
+    return OK;
 }
 
     int
 gui_mch_init_check(void)
 {
-    return( (is_photon_available == TRUE) ? OK : FAIL );
+    return (is_photon_available == TRUE) ? OK : FAIL;
 }
 
     int
@@ -1310,20 +1313,20 @@ gui_mch_open(void)
     if (gui_win_x != -1 && gui_win_y != -1)
        gui_mch_set_winpos(gui_win_x, gui_win_y);
 
-    return( (PtRealizeWidget( gui.vimWindow ) == 0) ? OK : FAIL );
+    return (PtRealizeWidget(gui.vimWindow) == 0) ? OK : FAIL;
 }
 
     void
 gui_mch_exit(int rc)
 {
-    PtDestroyWidget( gui.vimWindow );
+    PtDestroyWidget(gui.vimWindow);
 
-    PxTranslateSet( charset_translate, NULL );
+    PxTranslateSet(charset_translate, NULL);
 
-    vim_free( gui.event_buffer );
+    vim_free(gui.event_buffer);
 
 #ifdef USE_PANEL_GROUPS
-    vim_free( panel_titles );
+    vim_free(panel_titles);
 #endif
 }
 
@@ -1333,10 +1336,10 @@ gui_mch_exit(int rc)
 /* When no events are available, photon will call this function, working is
  * set to FALSE, and the gui_mch_update loop will exit. */
     static int
-exit_gui_mch_update( void *data )
+exit_gui_mch_update(void *data)
 {
     *(int *)data = FALSE;
-    return( Pt_END );
+    return Pt_END;
 }
 
     void
@@ -1344,8 +1347,8 @@ gui_mch_update(void)
 {
     int working = TRUE;
 
-    PtAppAddWorkProc( NULL, exit_gui_mch_update, &working );
-    while( ( working == TRUE ) && !vim_is_input_buf_full())
+    PtAppAddWorkProc(NULL, exit_gui_mch_update, &working);
+    while ((working == TRUE) && !vim_is_input_buf_full())
     {
        PtProcessEvent();
     }
@@ -1356,23 +1359,23 @@ gui_mch_wait_for_chars(int wtime)
 {
     is_timeout = FALSE;
 
-    if( wtime > 0 )
-       PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0 );
+    if (wtime > 0)
+       PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0);
 
-    while( 1 )
+    while (1)
     {
        PtProcessEvent();
-       if( input_available() )
+       if (input_available())
        {
-           PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0 );
-           return( OK );
+           PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0);
+           return OK;
        }
-       else if( is_timeout == TRUE )
-           return( FAIL );
+       else if (is_timeout == TRUE)
+           return FAIL;
     }
 }
 
-#if defined( FEAT_BROWSE ) || defined( PROTO )
+#if defined(FEAT_BROWSE) || defined(PROTO)
 /*
  * Put up a file requester.
  * Returns the selected name in allocated memory, or NULL for Cancel.
@@ -1398,12 +1401,12 @@ gui_mch_browse(
     char_u  *open_text = NULL;
 
     flags = 0;
-    memset( &file, 0, sizeof( file ) );
+    memset(&file, 0, sizeof(file));
 
-    default_path = alloc( MAXPATHL + 1 + NAME_MAX + 1 );
-    if( default_path != NULL )
+    default_path = alloc(MAXPATHL + 1 + NAME_MAX + 1);
+    if (default_path != NULL)
     {
-       if( saving == TRUE )
+       if (saving == TRUE)
        {
            /* Don't need Pt_FSR_CONFIRM_EXISTING, vim will ask anyway */
            flags |= Pt_FSR_NO_FCHECK;
@@ -1411,23 +1414,23 @@ gui_mch_browse(
        }
 
        /* combine the directory and filename into a single path */
-       if( initdir == NULL || *initdir == NUL )
+       if (initdir == NULL || *initdir == NUL)
        {
-           mch_dirname( default_path, MAXPATHL );
+           mch_dirname(default_path, MAXPATHL);
            initdir = default_path;
        }
        else
        {
-           STRCPY( default_path, initdir );
+           STRCPY(default_path, initdir);
            initdir = default_path;
        }
 
-       if( default_name != NULL )
+       if (default_name != NULL)
        {
-           if( default_path[ STRLEN( default_path ) - 1 ] != '/' )
-               STRCAT( default_path, "/" );
+           if (default_path[ STRLEN(default_path) - 1 ] != '/')
+               STRCAT(default_path, "/");
 
-           STRCAT( default_path, default_name );
+           STRCAT(default_path, default_name);
        }
 
        /* TODO: add a filter? */
@@ -1441,58 +1444,58 @@ gui_mch_browse(
                NULL,
                NULL,
                &file,
-               flags );
+               flags);
 
-       vim_free( default_path );
+       vim_free(default_path);
 
-       if( file.ret == Pt_FSDIALOG_BTN1 )
-           return( vim_strsave( file.path ) );
+       if (file.ret == Pt_FSDIALOG_BTN1)
+           return vim_strsave(file.path);
     }
-    return( NULL );
+    return NULL;
 }
 #endif
 
-#if defined( FEAT_GUI_DIALOG ) || defined( PROTO )
+#if defined(FEAT_GUI_DIALOG) || defined(PROTO)
 static PtWidget_t *gui_ph_dialog_text = NULL;
 
     static int
-gui_ph_dialog_close( int button, void *data )
+gui_ph_dialog_close(int button, void *data)
 {
     PtModalCtrl_t *modal_ctrl = data;
     char_u *dialog_text, *vim_text;
 
-    if( gui_ph_dialog_text != NULL )
+    if (gui_ph_dialog_text != NULL)
     {
-       PtGetResource( gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0 );
-       PtGetResource( gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0 );
-       STRNCPY( vim_text, dialog_text, IOSIZE - 1 );
+       PtGetResource(gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0);
+       PtGetResource(gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0);
+       STRNCPY(vim_text, dialog_text, IOSIZE - 1);
     }
 
-    PtModalUnblock( modal_ctrl, (void *) button );
+    PtModalUnblock(modal_ctrl, (void *) button);
 
-    return( Pt_TRUE );
+    return Pt_TRUE;
 }
 
     static int
-gui_ph_dialog_text_enter( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_dialog_text_enter(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
-    if( info->reason_subtype == Pt_EDIT_ACTIVATE )
-       gui_ph_dialog_close( 1, data );
-    return( Pt_CONTINUE );
+    if (info->reason_subtype == Pt_EDIT_ACTIVATE)
+       gui_ph_dialog_close(1, data);
+    return Pt_CONTINUE;
 }
 
     static int
-gui_ph_dialog_esc( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_dialog_esc(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
     PhKeyEvent_t *key;
 
-    key = PhGetData( info->event );
-    if( ( key->key_flags & Pk_KF_Cap_Valid ) && ( key->key_cap == Pk_Escape ) )
+    key = PhGetData(info->event);
+    if ((key->key_flags & Pk_KF_Cap_Valid) && (key->key_cap == Pk_Escape))
     {
-       gui_ph_dialog_close( 0, data );
-       return( Pt_CONSUME );
+       gui_ph_dialog_close(0, data);
+       return Pt_CONSUME;
     }
-    return( Pt_PROCESS );
+    return Pt_PROCESS;
 }
 
     int
@@ -1502,7 +1505,8 @@ gui_mch_dialog(
        char_u  *message,
        char_u  *buttons,
        int     default_button,
-       char_u  *textfield)
+       char_u  *textfield,
+       int     ex_cmd)
 {
     char_u     *str;
     char_u     **button_array;
@@ -1517,40 +1521,40 @@ gui_mch_dialog(
 
     button_count = len = i = 0;
 
-    if( buttons == NULL || *buttons == NUL )
-       return( -1 );
+    if (buttons == NULL || *buttons == NUL)
+       return -1;
 
     /* There is one less separator than buttons, so bump up the button count */
     button_count = 1;
 
-    /* Count string length and number of seperators */
-    for( str = buttons; *str; str++ )
+    /* Count string length and number of separators */
+    for (str = buttons; *str; str++)
     {
        len++;
-       if( *str == DLG_BUTTON_SEP )
+       if (*str == DLG_BUTTON_SEP)
            button_count++;
     }
 
-    if ( title == NULL )
+    if (title == NULL)
        title = "Vim";
 
-    buttons_copy = alloc( len + 1 );
-    button_array = (char_u **) alloc( button_count * sizeof( char_u * ) );
-    if( buttons_copy != NULL && button_array != NULL )
+    buttons_copy = alloc(len + 1);
+    button_array = (char_u **) alloc(button_count * sizeof(char_u *));
+    if (buttons_copy != NULL && button_array != NULL)
     {
-       STRCPY( buttons_copy, buttons );
+       STRCPY(buttons_copy, buttons);
 
        /*
         * Convert DLG_BUTTON_SEP into NUL's and fill in
         * button_array with the pointer to each NUL terminated string
         */
        str = buttons_copy;
-       for( i = 0; i < button_count; i++ )
+       for (i = 0; i < button_count; i++)
        {
            button_array[ i ] = str;
-           for( ; *str; str++ )
+           for (; *str; str++)
            {
-               if( *str == DLG_BUTTON_SEP )
+               if (*str == DLG_BUTTON_SEP)
                {
                    *str++ = NUL;
                    break;
@@ -1564,7 +1568,7 @@ gui_mch_dialog(
                NULL,
                message, NULL,
                button_count, (const char **) button_array, NULL,
-               default_button, 0, Pt_MODAL );
+               default_button, 0, Pt_MODAL);
 #else
        /* Writing the dialog ourselves lets us add extra features, like
         * trapping the escape key and returning 0 to vim */
@@ -1575,32 +1579,32 @@ gui_mch_dialog(
            PtModalCtrl_t modal_ctrl;
            PtDialogInfo_t di;
 
-           memset( &di, 0, sizeof( di ) );
-           memset( &modal_ctrl, 0, sizeof( modal_ctrl ) );
+           memset(&di, 0, sizeof(di));
+           memset(&modal_ctrl, 0, sizeof(modal_ctrl));
 
            n = 0;
-           PtSetArg( &args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0 );
-           PtSetArg( &args[n++], Pt_ARG_WIDTH, 350, 0 );
-           PtSetArg( &args[n++], Pt_ARG_GROUP_ORIENTATION,
-                   Pt_GROUP_VERTICAL, 0 );
-           PtSetArg( &args[n++], Pt_ARG_GROUP_FLAGS,
-                   Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL );
-           PtSetArg( &args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE );
-           pane = PtCreateWidget( PtGroup, NULL, n, args );
+           PtSetArg(&args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0);
+           PtSetArg(&args[n++], Pt_ARG_WIDTH, 350, 0);
+           PtSetArg(&args[n++], Pt_ARG_GROUP_ORIENTATION,
+                   Pt_GROUP_VERTICAL, 0);
+           PtSetArg(&args[n++], Pt_ARG_GROUP_FLAGS,
+                   Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL);
+           PtSetArg(&args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE);
+           pane = PtCreateWidget(PtGroup, NULL, n, args);
 
            n = 0;
-           PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, message, 0 );
-           PtCreateWidget( PtLabel, pane, n, args );
+           PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, message, 0);
+           PtCreateWidget(PtLabel, pane, n, args);
 
-           if( textfield != NULL )
+           if (textfield != NULL)
            {
                n = 0;
-               PtSetArg( &args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0 );
-               PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, textfield, 0 );
-               PtSetArg( &args[n++], Pt_ARG_POINTER, textfield, 0 );
-               gui_ph_dialog_text = PtCreateWidget( PtText, pane, n, args );
-               PtAddCallback( gui_ph_dialog_text, Pt_CB_ACTIVATE,
-                       gui_ph_dialog_text_enter, &modal_ctrl );
+               PtSetArg(&args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0);
+               PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, textfield, 0);
+               PtSetArg(&args[n++], Pt_ARG_POINTER, textfield, 0);
+               gui_ph_dialog_text = PtCreateWidget(PtText, pane, n, args);
+               PtAddCallback(gui_ph_dialog_text, Pt_CB_ACTIVATE,
+                       gui_ph_dialog_text_enter, &modal_ctrl);
            }
 
            di.parent = gui.vimWindow;
@@ -1615,28 +1619,28 @@ gui_mch_dialog(
            di.callback = gui_ph_dialog_close;
            di.data = &modal_ctrl;
 
-           dialog = PtCreateDialog( &di );
-           PtAddFilterCallback( dialog, Ph_EV_KEY,
-                   gui_ph_dialog_esc, &modal_ctrl );
+           dialog = PtCreateDialog(&di);
+           PtAddFilterCallback(dialog, Ph_EV_KEY,
+                   gui_ph_dialog_esc, &modal_ctrl);
 
-           if( gui_ph_dialog_text != NULL )
-               PtGiveFocus( gui_ph_dialog_text, NULL );
+           if (gui_ph_dialog_text != NULL)
+               PtGiveFocus(gui_ph_dialog_text, NULL);
 
            /* Open dialog, block the vim window and wait for the dialog to close */
-           PtRealizeWidget( dialog );
-           PtMakeModal( dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR );
-           dialog_result = (int) PtModalBlock( &modal_ctrl, 0 );
+           PtRealizeWidget(dialog);
+           PtMakeModal(dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR);
+           dialog_result = (int) PtModalBlock(&modal_ctrl, 0);
 
-           PtDestroyWidget( dialog );
+           PtDestroyWidget(dialog);
            gui_ph_dialog_text = NULL;
        }
 #endif
     }
 
-    vim_free( button_array );
-    vim_free( buttons_copy );
+    vim_free(button_array);
+    vim_free(buttons_copy);
 
-    return( dialog_result );
+    return dialog_result;
 }
 #endif
 /****************************************************************************/
@@ -1647,12 +1651,12 @@ gui_mch_get_winpos(int *x, int *y)
 {
     PhPoint_t *pos;
 
-    pos = PtWidgetPos( gui.vimWindow, NULL );
+    pos = PtWidgetPos(gui.vimWindow, NULL);
 
     *x = pos->x;
     *y = pos->y;
 
-    return( OK );
+    return OK;
 }
 
     void
@@ -1660,7 +1664,7 @@ gui_mch_set_winpos(int x, int y)
 {
     PhPoint_t pos = { x, y };
 
-    PtSetResource( gui.vimWindow, Pt_ARG_POS, &pos, 0 );
+    PtSetResource(gui.vimWindow, Pt_ARG_POS, &pos, 0);
 }
 
     void
@@ -1676,10 +1680,10 @@ gui_mch_set_shellsize(int width, int height,
     window_size.h += pg_margin_top + pg_margin_bottom;
 #endif
 
-    PtSetResource( gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0 );
-    PtSetResource( gui.vimWindow, Pt_ARG_DIM, &window_size, 0 );
+    PtSetResource(gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0);
+    PtSetResource(gui.vimWindow, Pt_ARG_DIM, &window_size, 0);
 
-    if( ! PtWidgetIsRealized( gui.vimWindow ) )
+    if (! PtWidgetIsRealized(gui.vimWindow))
        gui_ph_resize_container();
 }
 
@@ -1692,8 +1696,8 @@ gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
 {
     PhRect_t console;
 
-    PhWindowQueryVisible( Ph_QUERY_WORKSPACE, 0,
-           PhInputGroup( NULL ), &console );
+    PhWindowQueryVisible(Ph_QUERY_WORKSPACE, 0,
+           PhInputGroup(NULL), &console);
 
     *screen_w = console.lr.x - console.ul.x + 1;
     *screen_h = console.lr.y - console.ul.y + 1;
@@ -1704,11 +1708,11 @@ gui_mch_iconify(void)
 {
     PhWindowEvent_t event;
 
-    memset( &event, 0, sizeof (event) );
+    memset(&event, 0, sizeof (event));
     event.event_f = Ph_WM_HIDE;
     event.event_state = Ph_WM_EVSTATE_HIDE;
-    event.rid = PtWidgetRid( gui.vimWindow );
-    PtForwardWindowEvent( &event );
+    event.rid = PtWidgetRid(gui.vimWindow);
+    PtForwardWindowEvent(&event);
 }
 
 #if defined(FEAT_EVAL) || defined(PROTO)
@@ -1720,11 +1724,11 @@ gui_mch_set_foreground()
 {
     PhWindowEvent_t event;
 
-    memset( &event, 0, sizeof (event) );
+    memset(&event, 0, sizeof (event));
     event.event_f = Ph_WM_TOFRONT;
     event.event_state = Ph_WM_EVSTATE_FFRONT;
-    event.rid = PtWidgetRid( gui.vimWindow );
-    PtForwardWindowEvent( &event );
+    event.rid = PtWidgetRid(gui.vimWindow);
+    PtForwardWindowEvent(&event);
 }
 #endif
 
@@ -1732,9 +1736,9 @@ gui_mch_set_foreground()
 gui_mch_settitle(char_u *title,        char_u *icon)
 {
 #ifdef USE_PANEL_GROUP
-    gui_ph_pg_set_buffer_num( curwin->w_buffer->b_fnum );
+    gui_ph_pg_set_buffer_num(curwin->w_buffer->b_fnum);
 #endif
-    PtSetResource( gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0 );
+    PtSetResource(gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0);
     /* Not sure what to do with the icon text, set balloon text somehow? */
 }
 
@@ -1747,10 +1751,10 @@ gui_mch_set_scrollbar_thumb(scrollbar_T *sb, int val, int size, int max)
     int            n = 0;
     PtArg_t args[3];
 
-    PtSetArg( &args[ n++ ], Pt_ARG_MAXIMUM, max, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0 );
-    PtSetResources( sb->id, n, args );
+    PtSetArg(&args[ n++ ], Pt_ARG_MAXIMUM, max, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0);
+    PtSetResources(sb->id, n, args);
 }
 
     void
@@ -1758,7 +1762,7 @@ gui_mch_set_scrollbar_pos(scrollbar_T *sb, int x, int y, int w, int h)
 {
     PhArea_t area = {{ x, y }, { w, h }};
 
-    PtSetResource( sb->id, Pt_ARG_AREA, &area, 0 );
+    PtSetResource(sb->id, Pt_ARG_AREA, &area, 0);
 }
 
     void
@@ -1774,12 +1778,12 @@ gui_mch_create_scrollbar(scrollbar_T *sb, int orient)
      *
      * Also, don't let the scrollbar get focus
      */
-    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
-           Pt_DELAY_REALIZE | Pt_GETS_FOCUS );
-    PtSetArg( &args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
+           Pt_DELAY_REALIZE | Pt_GETS_FOCUS);
+    PtSetArg(&args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
 #if 0
     /* Don't need this anchoring for the scrollbars */
-    if( orient == SBAR_HORIZ )
+    if (orient == SBAR_HORIZ)
     {
        anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM |
            Pt_LEFT_ANCHORED_LEFT | Pt_RIGHT_ANCHORED_RIGHT;
@@ -1787,40 +1791,40 @@ gui_mch_create_scrollbar(scrollbar_T *sb, int orient)
     else
     {
        anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM | Pt_TOP_ANCHORED_TOP;
-       if( sb->wp != NULL )
+       if (sb->wp != NULL)
        {
-           if( sb == &sb->wp->w_scrollbars[ SBAR_LEFT ] )
+           if (sb == &sb->wp->w_scrollbars[ SBAR_LEFT ])
                anchor_flags |= Pt_LEFT_ANCHORED_LEFT;
            else
                anchor_flags |= Pt_RIGHT_ANCHORED_RIGHT;
        }
     }
-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED );
+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED);
 #endif
-    PtSetArg( &args[ n++ ], Pt_ARG_ORIENTATION,
-           (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_ORIENTATION,
+           (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0);
 #ifdef USE_PANEL_GROUP
-    sb->id = PtCreateWidget( PtScrollbar, gui.vimPanelGroup, n, args );
+    sb->id = PtCreateWidget(PtScrollbar, gui.vimPanelGroup, n, args);
 #else
-    sb->id = PtCreateWidget( PtScrollbar, gui.vimContainer, n, args );
+    sb->id = PtCreateWidget(PtScrollbar, gui.vimContainer, n, args);
 #endif
 
-    PtAddCallback( sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb );
+    PtAddCallback(sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb);
 }
 
     void
 gui_mch_enable_scrollbar(scrollbar_T *sb, int flag)
 {
-    if( flag != 0 )
-       PtRealizeWidget( sb->id );
+    if (flag != 0)
+       PtRealizeWidget(sb->id);
     else
-       PtUnrealizeWidget( sb->id );
+       PtUnrealizeWidget(sb->id);
 }
 
     void
 gui_mch_destroy_scrollbar(scrollbar_T *sb)
 {
-    PtDestroyWidget( sb->id );
+    PtDestroyWidget(sb->id);
     sb->id = NULL;
 }
 
@@ -1865,8 +1869,8 @@ mch_set_mouse_shape(shape)
        return;
 
     if (shape == MSHAPE_HIDE || gui.pointer_hidden)
-       PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
-               0 );
+       PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
+               0);
     else
     {
        if (shape >= MSHAPE_NUMBERED)
@@ -1874,7 +1878,7 @@ mch_set_mouse_shape(shape)
        else
            id = mshape_ids[shape];
 
-       PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id, 0 );
+       PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id,  0);
     }
     if (shape != MSHAPE_HIDE)
        last_shape = shape;
@@ -1884,19 +1888,19 @@ mch_set_mouse_shape(shape)
     void
 gui_mch_mousehide(int hide)
 {
-    if( gui.pointer_hidden != hide )
+    if (gui.pointer_hidden != hide)
     {
        gui.pointer_hidden = hide;
 #ifdef FEAT_MOUSESHAPE
-       if( hide )
-           PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
-                   Ph_CURSOR_NONE, 0 );
+       if (hide)
+           PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+                   Ph_CURSOR_NONE, 0);
        else
-           mch_set_mouse_shape( last_shape );
+           mch_set_mouse_shape(last_shape);
 #else
-       PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
-               ( hide == MOUSE_SHOW ) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
-               0 );
+       PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+               (hide == MOUSE_SHOW) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
+               0);
 #endif
     }
 }
@@ -1909,8 +1913,8 @@ gui_mch_getmouse(int *x, int *y)
 
     /* FIXME: does this return the correct position,
      * with respect to the border? */
-    PhQueryCursor( PhInputGroup( NULL ), &info );
-    PtGetAbsPosition( gui.vimTextArea , &ix, &iy );
+    PhQueryCursor(PhInputGroup(NULL), &info);
+    PtGetAbsPosition(gui.vimTextArea , &ix, &iy);
 
     *x = info.pos.x - ix;
     *y = info.pos.y - iy;
@@ -1921,9 +1925,9 @@ gui_mch_setmouse(int x, int y)
 {
     short abs_x, abs_y;
 
-    PtGetAbsPosition( gui.vimTextArea, &abs_x, &abs_y );
+    PtGetAbsPosition(gui.vimTextArea, &abs_x, &abs_y);
     /* Add the border offset? */
-    PhMoveCursorAbs( PhInputGroup( NULL ), abs_x + x, abs_y + y );
+    PhMoveCursorAbs(PhInputGroup(NULL), abs_x + x, abs_y + y);
 }
 
 /****************************************************************************/
@@ -1951,34 +1955,34 @@ gui_mch_new_colors(void)
     color_diff = gui_get_lightness(gui_ph_mouse_color)
                                          - gui_get_lightness(gui.back_pixel);
 
-    if( abs( color_diff ) < 64 )
+    if (abs(color_diff) < 64)
     {
        short r, g, b;
        /* not a great algorithm... */
-       r = PgRedValue( gui_ph_mouse_color ) ^ 255;
-       g = PgGreenValue( gui_ph_mouse_color ) ^ 255;
-       b = PgBlueValue( gui_ph_mouse_color ) ^ 255;
+       r = PgRedValue(gui_ph_mouse_color) ^ 255;
+       g = PgGreenValue(gui_ph_mouse_color) ^ 255;
+       b = PgBlueValue(gui_ph_mouse_color) ^ 255;
 
 #ifndef FEAT_MOUSESHAPE
-       gui_ph_mouse_color = PgRGB( r, g, b );
-       PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
-               gui_ph_mouse_color, 0 );
+       gui_ph_mouse_color = PgRGB(r, g, b);
+       PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
+               gui_ph_mouse_color, 0);
 #endif
     }
 #endif
 
-    PtSetResource( gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0 );
+    PtSetResource(gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0);
 }
 
     static int
 hex_digit(int c)
 {
     if (VIM_ISDIGIT(c))
-       return( c - '0' );
+       return c - '0';
     c = TOLOWER_ASC(c);
     if (c >= 'a' && c <= 'f')
-       return( c - 'a' + 10 );
-    return( -1000 );
+       return c - 'a' + 10;
+    return -1000;
 }
 
 
@@ -2006,8 +2010,8 @@ gui_mch_get_color(char_u *name)
     static GuiColourTable table[] =
     {
        {"Black",           RGB(0x00, 0x00, 0x00)},
-       {"DarkGray",        RGB(0x80, 0x80, 0x80)},
-       {"DarkGrey",        RGB(0x80, 0x80, 0x80)},
+       {"DarkGray",        RGB(0xA9, 0xA9, 0xA9)},
+       {"DarkGrey",        RGB(0xA9, 0xA9, 0xA9)},
        {"Gray",            RGB(0xC0, 0xC0, 0xC0)},
        {"Grey",            RGB(0xC0, 0xC0, 0xC0)},
        {"LightGray",       RGB(0xD3, 0xD3, 0xD3)},
@@ -2036,19 +2040,19 @@ gui_mch_get_color(char_u *name)
        {"LightRed",        RGB(0xFF, 0xA0, 0xA0)},
        {"DarkBlue",        RGB(0x00, 0x00, 0x80)},
        {"Blue",            RGB(0x00, 0x00, 0xFF)},
-       {"LightBlue",       RGB(0xA0, 0xA0, 0xFF)},
+       {"LightBlue",       RGB(0xAD, 0xD8, 0xE6)},
        {"DarkGreen",       RGB(0x00, 0x80, 0x00)},
        {"Green",           RGB(0x00, 0xFF, 0x00)},
-       {"LightGreen",      RGB(0xA0, 0xFF, 0xA0)},
+       {"LightGreen",      RGB(0x90, 0xEE, 0x90)},
        {"DarkCyan",        RGB(0x00, 0x80, 0x80)},
        {"Cyan",            RGB(0x00, 0xFF, 0xFF)},
-       {"LightCyan",       RGB(0xA0, 0xFF, 0xFF)},
+       {"LightCyan",       RGB(0xE0, 0xFF, 0xFF)},
        {"DarkMagenta",     RGB(0x80, 0x00, 0x80)},
        {"Magenta",         RGB(0xFF, 0x00, 0xFF)},
        {"LightMagenta",    RGB(0xFF, 0xA0, 0xFF)},
        {"Brown",           RGB(0x80, 0x40, 0x40)},
        {"Yellow",          RGB(0xFF, 0xFF, 0x00)},
-       {"LightYellow",     RGB(0xFF, 0xFF, 0xA0)},
+       {"LightYellow",     RGB(0xFF, 0xFF, 0xE0)},
        {"SeaGreen",        RGB(0x2E, 0x8B, 0x57)},
        {"Orange",          RGB(0xFF, 0xA5, 0x00)},
        {"Purple",          RGB(0xA0, 0x20, 0xF0)},
@@ -2057,20 +2061,20 @@ gui_mch_get_color(char_u *name)
     };
 
     /* is name #rrggbb format? */
-    if( name[0] == '#' && STRLEN( name ) == 7 )
+    if (name[0] == '#' && STRLEN(name) == 7)
     {
-       r = hex_digit( name[1] ) * 16 + hex_digit( name[2] );
-       g = hex_digit( name[3] ) * 16 + hex_digit( name[4] );
-       b = hex_digit( name[5] ) * 16 + hex_digit( name[6] );
-       if( r < 0 || g < 0 || b < 0 )
+       r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
+       g = hex_digit(name[3]) * 16 + hex_digit(name[4]);
+       b = hex_digit(name[5]) * 16 + hex_digit(name[6]);
+       if (r < 0 || g < 0 || b < 0)
            return INVALCOLOR;
-       return( RGB( r, g, b ) );
+       return RGB(r, g, b);
     }
 
-    for( i = 0; i < ARRAY_LENGTH( table ); i++ )
+    for (i = 0; i < ARRAY_LENGTH(table); i++)
     {
-       if( STRICMP( name, table[i].name ) == 0 )
-           return( table[i].colour );
+       if (STRICMP(name, table[i].name) == 0)
+           return table[i].colour;
     }
 
     /*
@@ -2114,7 +2118,7 @@ gui_mch_get_color(char_u *name)
            if (STRICMP(color, name) == 0)
            {
                fclose(fd);
-               return( (guicolor_T) RGB(r,g,b) );
+               return (guicolor_T)RGB(r, g, b);
            }
        }
 
@@ -2128,13 +2132,13 @@ gui_mch_get_color(char_u *name)
     void
 gui_mch_set_fg_color(guicolor_T color)
 {
-    PgSetTextColor( color );
+    PgSetTextColor(color);
 }
 
     void
 gui_mch_set_bg_color(guicolor_T color)
 {
-    PgSetFillColor( color );
+    PgSetFillColor(color);
 }
 
     void
@@ -2147,21 +2151,21 @@ gui_mch_invert_rectangle(int row, int col, int nr, int nc)
 {
     PhRect_t rect;
 
-    rect.ul.x = FILL_X( col );
-    rect.ul.y = FILL_Y( row );
+    rect.ul.x = FILL_X(col);
+    rect.ul.y = FILL_Y(row);
 
     /* FIXME: This has an off by one pixel problem */
     rect.lr.x = rect.ul.x + nc * gui.char_width;
     rect.lr.y = rect.ul.y + nr * gui.char_height;
-    if( nc > 0 )
+    if (nc > 0)
        rect.lr.x -= 1;
-    if( nr > 0 )
+    if (nr > 0)
        rect.lr.y -= 1;
 
     DRAW_START;
-    PgSetDrawMode( Pg_DrawModeDSTINVERT );
-    PgDrawRect( &rect, Pg_DRAW_FILL );
-    PgSetDrawMode( Pg_DrawModeSRCCOPY );
+    PgSetDrawMode(Pg_DrawModeDSTINVERT);
+    PgDrawRect(&rect, Pg_DRAW_FILL);
+    PgSetDrawMode(Pg_DrawModeSRCCOPY);
     DRAW_END;
 }
 
@@ -2169,13 +2173,13 @@ gui_mch_invert_rectangle(int row, int col, int nr, int nc)
 gui_mch_clear_block(int row1, int col1, int row2, int col2)
 {
     PhRect_t block = {
-       { FILL_X( col1 ), FILL_Y( row1 ) },
-       { FILL_X( col2 + 1 ) - 1, FILL_Y( row2 + 1 ) - 1}
+       { FILL_X(col1), FILL_Y(row1) },
+       { FILL_X(col2 + 1) - 1, FILL_Y(row2 + 1) - 1}
     };
 
     DRAW_START;
-    gui_mch_set_bg_color( gui.back_pixel );
-    PgDrawRect( &block, Pg_DRAW_FILL );
+    gui_mch_set_bg_color(gui.back_pixel);
+    PgDrawRect(&block, Pg_DRAW_FILL);
     DRAW_END;
 }
 
@@ -2188,12 +2192,12 @@ gui_mch_clear_all()
            Rows * gui.char_height + gui.border_width - 1 }
     };
 
-    if( is_ignore_draw == TRUE )
+    if (is_ignore_draw == TRUE)
        return;
 
     DRAW_START;
-    gui_mch_set_bg_color( gui.back_pixel );
-    PgDrawRect( &text_rect, Pg_DRAW_FILL );
+    gui_mch_set_bg_color(gui.back_pixel);
+    PgDrawRect(&text_rect, Pg_DRAW_FILL);
     DRAW_END;
 }
 
@@ -2203,28 +2207,28 @@ gui_mch_delete_lines(int row, int num_lines)
     PhRect_t    rect;
     PhPoint_t   delta;
 
-    rect.ul.x = FILL_X( gui.scroll_region_left );
-    rect.ul.y = FILL_Y( row + num_lines );
+    rect.ul.x = FILL_X(gui.scroll_region_left);
+    rect.ul.y = FILL_Y(row + num_lines);
 
-    rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
-    rect.lr.y = FILL_Y( gui.scroll_region_bot + 1) - 1;
+    rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
+    rect.lr.y = FILL_Y(gui.scroll_region_bot + 1) - 1;
 
-    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
-    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
-    PhTranslateRect( &rect, &gui_ph_raw_offset );
+    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+    PhTranslateRect(&rect, &gui_ph_raw_offset);
 
     delta.x = 0;
     delta.y = -num_lines * gui.char_height;
 
     PgFlush();
 
-    PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ), &rect, &delta );
+    PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)), &rect, &delta);
 
     gui_clear_block(
        gui.scroll_region_bot - num_lines + 1,
        gui.scroll_region_left,
        gui.scroll_region_bot,
-       gui.scroll_region_right );
+       gui.scroll_region_right);
 }
 
     void
@@ -2233,25 +2237,25 @@ gui_mch_insert_lines(int row, int num_lines)
     PhRect_t    rect;
     PhPoint_t   delta;
 
-    rect.ul.x = FILL_X( gui.scroll_region_left );
-    rect.ul.y = FILL_Y( row );
+    rect.ul.x = FILL_X(gui.scroll_region_left);
+    rect.ul.y = FILL_Y(row);
 
-    rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
-    rect.lr.y = FILL_Y( gui.scroll_region_bot - num_lines + 1 ) - 1;
+    rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
+    rect.lr.y = FILL_Y(gui.scroll_region_bot - num_lines + 1) - 1;
 
-    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
-    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
-    PhTranslateRect( &rect, &gui_ph_raw_offset );
+    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+    PhTranslateRect(&rect, &gui_ph_raw_offset);
 
     delta.x = 0;
     delta.y = num_lines * gui.char_height;
 
     PgFlush();
 
-    PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) , &rect, &delta );
+    PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)) , &rect, &delta);
 
-    gui_clear_block( row, gui.scroll_region_left,
-           row + num_lines - 1, gui.scroll_region_right );
+    gui_clear_block(row, gui.scroll_region_left,
+           row + num_lines - 1, gui.scroll_region_right);
 }
 
     void
@@ -2260,37 +2264,37 @@ gui_mch_draw_string(int row, int col, char_u *s, int len, int flags)
     static char *utf8_buffer = NULL;
     static int utf8_len = 0;
 
-    PhPoint_t  pos = { TEXT_X( col ), TEXT_Y( row ) };
+    PhPoint_t  pos = { TEXT_X(col), TEXT_Y(row) };
     PhRect_t   rect;
 
-    if( is_ignore_draw == TRUE )
+    if (is_ignore_draw == TRUE)
        return;
 
     DRAW_START;
 
-    if( !( flags & DRAW_TRANSP ) )
+    if (!(flags & DRAW_TRANSP))
     {
        PgDrawIRect(
-               FILL_X( col ), FILL_Y( row ),
-               FILL_X( col + len ) - 1, FILL_Y( row + 1 ) - 1,
-               Pg_DRAW_FILL );
+               FILL_X(col), FILL_Y(row),
+               FILL_X(col + len) - 1, FILL_Y(row + 1) - 1,
+               Pg_DRAW_FILL);
     }
 
-    if( flags & DRAW_UNDERL )
-       PgSetUnderline( gui.norm_pixel, Pg_TRANSPARENT, 0 );
+    if (flags & DRAW_UNDERL)
+       PgSetUnderline(gui.norm_pixel, Pg_TRANSPARENT, 0);
 
-    ifcharset_translate != NULL
+    if (charset_translate != NULL
 #ifdef FEAT_MBYTE
            && enc_utf8 == 0
 #endif
-           )
+          )
     {
        int src_taken, dst_made;
 
        /* Use a static buffer to avoid large amounts of de/allocations */
-       if( utf8_len < len )
+       if (utf8_len < len)
        {
-           utf8_buffer = realloc( utf8_buffer, len * MB_LEN_MAX );
+           utf8_buffer = realloc(utf8_buffer, len * MB_LEN_MAX);
            utf8_len = len;
        }
 
@@ -2301,36 +2305,36 @@ gui_mch_draw_string(int row, int col, char_u *s, int len, int flags)
                &src_taken,
                utf8_buffer,
                utf8_len,
-               &dst_made );
+               &dst_made);
        s = utf8_buffer;
        len = dst_made;
     }
 
-    PgDrawText( s, len, &pos, 0 );
+    PgDrawText(s, len, &pos, 0);
 
-    if( flags & DRAW_BOLD )
+    if (flags & DRAW_BOLD)
     {
        /* FIXME: try and only calculate these values once... */
-       rect.ul.x = FILL_X( col ) + 1;
-       rect.ul.y = FILL_Y( row );
-       rect.lr.x = FILL_X( col + len ) - 1;
-       rect.lr.y = FILL_Y( row + 1) - 1;
-       /* PgSetUserClip( NULL ) causes the scrollbar to not redraw... */
+       rect.ul.x = FILL_X(col) + 1;
+       rect.ul.y = FILL_Y(row);
+       rect.lr.x = FILL_X(col + len) - 1;
+       rect.lr.y = FILL_Y(row + 1) - 1;
+       /* PgSetUserClip(NULL) causes the scrollbar to not redraw... */
 #if 0
        pos.x++;
 
-       PgSetUserClip( &rect );
-       PgDrawText( s, len, &pos, 0 );
-       PgSetUserClip( NULL );
+       PgSetUserClip(&rect);
+       PgDrawText(s, len, &pos, 0);
+       PgSetUserClip(NULL);
 #else
-       rect.lr.y -= ( p_linespace + 1 ) / 2;
+       rect.lr.y -= (p_linespace + 1) / 2;
        /* XXX: DrawTextArea doesn't work with phditto */
-       PgDrawTextArea( s, len, &rect, Pg_TEXT_BOTTOM );
+       PgDrawTextArea(s, len, &rect, Pg_TEXT_BOTTOM);
 #endif
     }
 
-    if( flags & DRAW_UNDERL )
-       PgSetUnderline( Pg_TRANSPARENT, Pg_TRANSPARENT, 0 );
+    if (flags & DRAW_UNDERL)
+       PgSetUnderline(Pg_TRANSPARENT, Pg_TRANSPARENT, 0);
 
     DRAW_END;
 }
@@ -2345,14 +2349,14 @@ gui_mch_draw_hollow_cursor(guicolor_T color)
 
     /* FIXME: Double width characters */
 
-    r.ul.x = FILL_X( gui.col );
-    r.ul.y = FILL_Y( gui.row );
+    r.ul.x = FILL_X(gui.col);
+    r.ul.y = FILL_Y(gui.row);
     r.lr.x = r.ul.x + gui.char_width - 1;
     r.lr.y = r.ul.y + gui.char_height - 1;
 
     DRAW_START;
-    PgSetStrokeColor( color );
-    PgDrawRect( &r, Pg_DRAW_STROKE );
+    PgSetStrokeColor(color);
+    PgDrawRect(&r, Pg_DRAW_STROKE);
     DRAW_END;
 }
 
@@ -2361,14 +2365,14 @@ gui_mch_draw_part_cursor(int w, int h, guicolor_T color)
 {
     PhRect_t r;
 
-    r.ul.x = FILL_X( gui.col );
-    r.ul.y = FILL_Y( gui.row ) + gui.char_height - h;
+    r.ul.x = FILL_X(gui.col);
+    r.ul.y = FILL_Y(gui.row) + gui.char_height - h;
     r.lr.x = r.ul.x + w - 1;
     r.lr.y = r.ul.y + h - 1;
 
     DRAW_START;
-    gui_mch_set_bg_color( color );
-    PgDrawRect( &r, Pg_DRAW_FILL );
+    gui_mch_set_bg_color(color);
+    PgDrawRect(&r, Pg_DRAW_FILL);
     DRAW_END;
 }
 
@@ -2384,10 +2388,10 @@ gui_mch_set_blinking(long wait, long on, long off)
 gui_mch_start_blink(void)
 {
     /* Only turn on the timer on if none of the times are zero */
-    ifblink_waittime && blink_ontime && blink_offtime && gui.in_focus)
+    if (blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
     {
-       PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
-               blink_waittime, 0 );
+       PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+               blink_waittime, 0);
        blink_state = BLINK_ON;
        gui_update_cursor(TRUE, FALSE);
     }
@@ -2396,9 +2400,9 @@ gui_mch_start_blink(void)
     void
 gui_mch_stop_blink(void)
 {
-    PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0 );
+    PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0);
 
-    if( blink_state == BLINK_OFF )
+    if (blink_state == BLINK_OFF)
        gui_update_cursor(TRUE, FALSE);
 
     blink_state = BLINK_NONE;
@@ -2416,15 +2420,15 @@ gui_mch_beep(void)
     void
 gui_mch_flash(int msec)
 {
-    PgSetFillXORColor( Pg_BLACK, Pg_WHITE );
-    PgSetDrawMode( Pg_DRAWMODE_XOR );
+    PgSetFillXORColor(Pg_BLACK, Pg_WHITE);
+    PgSetDrawMode(Pg_DRAWMODE_XOR);
     gui_mch_clear_all();
     gui_mch_flush();
 
-    ui_delay( (long) msec, TRUE );
+    ui_delay((long) msec, TRUE);
 
     gui_mch_clear_all();
-    PgSetDrawMode( Pg_DRAWMODE_OPAQUE );
+    PgSetDrawMode(Pg_DRAWMODE_OPAQUE);
     gui_mch_flush();
 }
 
@@ -2439,7 +2443,7 @@ gui_mch_set_text_area_pos(int x, int y, int w, int h)
 {
     PhArea_t area = {{x, y}, {w, h}};
 
-    PtSetResource( gui.vimTextArea, Pt_ARG_AREA, &area, 0 );
+    PtSetResource(gui.vimTextArea, Pt_ARG_AREA, &area, 0);
 }
 
     int
@@ -2450,8 +2454,8 @@ gui_mch_haskey(char_u *name)
     for (i = 0; special_keys[i].key_sym != 0; i++)
        if (name[0] == special_keys[i].vim_code0 &&
                 name[1] == special_keys[i].vim_code1)
-           return( OK );
-    return( FAIL );
+           return OK;
+    return FAIL;
 }
 
 /****************************************************************************/
@@ -2495,23 +2499,23 @@ static PhImage_t *gui_ph_toolbar_images[] = {
 };
 
 static PhImage_t *
-gui_ph_toolbar_load_icon( char_u *iconfile )
+gui_ph_toolbar_load_icon(char_u *iconfile)
 {
     static PhImage_t external_icon;
     PhImage_t *temp_phi = NULL;
 
-    temp_phi = PxLoadImage( iconfile, NULL );
-    if( temp_phi != NULL )
+    temp_phi = PxLoadImage(iconfile, NULL);
+    if (temp_phi != NULL)
     {
        /* The label widget will free the image/palette/etc. for us when
         * it's destroyed */
        temp_phi->flags |= Ph_RELEASE_IMAGE_ALL;
-       memcpy( &external_icon, temp_phi, sizeof( external_icon ) );
-       free( temp_phi );
+       memcpy(&external_icon, temp_phi, sizeof(external_icon));
+       free(temp_phi);
 
        temp_phi = &external_icon;
     }
-    return( temp_phi );
+    return temp_phi;
 }
 
 /*
@@ -2522,45 +2526,45 @@ gui_ph_toolbar_load_icon( char_u *iconfile )
  * PhImage_t are copied, and the original PhImage_t aren't needed anymore).
  */
 static PhImage_t *
-gui_ph_toolbar_find_icon( vimmenu_T *menu )
+gui_ph_toolbar_find_icon(vimmenu_T *menu)
 {
     char_u full_pathname[ MAXPATHL + 1 ];
     PhImage_t *icon = NULL;
 
-    if( menu->icon_builtin == FALSE )
+    if (menu->icon_builtin == FALSE)
     {
-       if( menu->iconfile != NULL )
+       if (menu->iconfile != NULL)
            /* TODO: use gui_find_iconfile() */
-           icon = gui_ph_toolbar_load_icon( menu->iconfile );
+           icon = gui_ph_toolbar_load_icon(menu->iconfile);
 
        /* TODO: Restrict loading to just .png? Search for any format? */
-       if( ( icon == NULL ) &&
-           ( ( gui_find_bitmap( menu->name, full_pathname, "gif" ) == OK ) ||
-             ( gui_find_bitmap( menu->name, full_pathname, "png" ) == OK ) ) )
-           icon = gui_ph_toolbar_load_icon( full_pathname );
+       if ((icon == NULL) &&
+           ((gui_find_bitmap(menu->name, full_pathname, "gif") == OK) ||
+             (gui_find_bitmap(menu->name, full_pathname, "png") == OK)))
+           icon = gui_ph_toolbar_load_icon(full_pathname);
 
-       if( icon != NULL )
-           return( icon );
+       if (icon != NULL)
+           return icon;
     }
 
-    ifmenu->iconidx >= 0 &&
-           ( menu->iconidx < ARRAY_LENGTH( gui_ph_toolbar_images ) ) )
+    if (menu->iconidx >= 0 &&
+           (menu->iconidx < ARRAY_LENGTH(gui_ph_toolbar_images)))
     {
-       return( gui_ph_toolbar_images[ menu->iconidx ] );
+       return gui_ph_toolbar_images[menu->iconidx];
     }
 
-    return( NULL );
+    return NULL;
 }
 #endif
 
-#if defined( FEAT_MENU ) || defined( PROTO )
+#if defined(FEAT_MENU) || defined(PROTO)
     void
 gui_mch_enable_menu(int flag)
 {
-    if( flag != 0 )
-       PtRealizeWidget( gui.vimMenuBar );
+    if (flag != 0)
+       PtRealizeWidget(gui.vimMenuBar);
     else
-       PtUnrealizeWidget( gui.vimMenuBar );
+       PtUnrealizeWidget(gui.vimMenuBar);
 }
 
     void
@@ -2571,30 +2575,30 @@ gui_mch_set_menu_pos(int x, int y, int w, int h)
 
 /* Change the position of a menu button in the parent */
     static void
-gui_ph_position_menu( PtWidget_t *widget, int priority )
+gui_ph_position_menu(PtWidget_t *widget, int priority)
 {
     PtWidget_t *traverse;
     vimmenu_T  *menu;
 
-    traverse = PtWidgetChildBack( PtWidgetParent( widget ) );
+    traverse = PtWidgetChildBack(PtWidgetParent(widget));
 
     /* Iterate through the list of widgets in traverse, until
      * we find the position we want to insert our widget into */
     /* TODO: traverse from front to back, possible speedup? */
-    while( traverse != NULL )
+    while (traverse != NULL)
     {
-       PtGetResource( traverse, Pt_ARG_POINTER, &menu, 0 );
+       PtGetResource(traverse, Pt_ARG_POINTER, &menu, 0);
 
-       ifmenu != NULL &&
+       if (menu != NULL &&
                priority < menu->priority &&
-               widget != traverse )
+               widget != traverse)
        {
            /* Insert the widget before the current traverse widget */
-           PtWidgetInsert( widget, traverse, 1 );
+           PtWidgetInsert(widget, traverse, 1);
            return;
        }
 
-       traverse = PtWidgetBrotherInFront( traverse );
+       traverse = PtWidgetBrotherInFront(traverse);
     }
 }
 
@@ -2610,11 +2614,11 @@ gui_mch_add_menu(vimmenu_T *menu, int index)
 
     menu->submenu_id = menu->id = NULL;
 
-    if( menu_is_menubar( menu->name ) )
+    if (menu_is_menubar(menu->name))
     {
 
-       accel_key = vim_strchr( menu->name, '&' );
-       if( accel_key != NULL )
+       accel_key = vim_strchr(menu->name, '&');
+       if (accel_key != NULL)
        {
            mnemonic_str[0] = accel_key[1];
            mnemonic_str[1] = NUL;
@@ -2622,51 +2626,51 @@ gui_mch_add_menu(vimmenu_T *menu, int index)
 
        /* Create the menu button */
        n = 0;
-       PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
-       PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
-       if( accel_key != NULL )
-           PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0 );
-       PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
+       PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+       PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
+       if (accel_key != NULL)
+           PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0);
+       PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
 
-       if( parent != NULL )
-           PtSetArg( &args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0 );
+       if (parent != NULL)
+           PtSetArg(&args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0);
 
-       menu->id = PtCreateWidget( PtMenuButton,
+       menu->id = PtCreateWidget(PtMenuButton,
                (parent == NULL) ? gui.vimMenuBar : parent->submenu_id,
-               n, args );
+               n, args);
 
-       PtAddCallback( menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu );
+       PtAddCallback(menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu);
 
        /* Create the actual menu */
        n = 0;
-       if( parent != NULL )
-           PtSetArg( &args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD );
+       if (parent != NULL)
+           PtSetArg(&args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD);
 
-       menu->submenu_id = PtCreateWidget( PtMenu, menu->id, n, args );
+       menu->submenu_id = PtCreateWidget(PtMenu, menu->id, n, args);
 
-       if( parent == NULL )
+       if (parent == NULL)
        {
-           PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
-                   gui_ph_handle_menu_unrealized, menu );
+           PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
+                   gui_ph_handle_menu_unrealized, menu);
 
-           if( menu->mnemonic != 0 )
+           if (menu->mnemonic != 0)
            {
-               PtAddHotkeyHandler( gui.vimWindow, tolower( menu->mnemonic ),
-                       Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu );
+               PtAddHotkeyHandler(gui.vimWindow, tolower(menu->mnemonic),
+                       Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu);
            }
        }
 
-       gui_ph_position_menu( menu->id, menu->priority );
+       gui_ph_position_menu(menu->id, menu->priority);
 
        /* Redraw menubar here instead of gui_mch_draw_menubar */
-       if( gui.menu_is_active )
-           PtRealizeWidget( menu->id );
+       if (gui.menu_is_active)
+           PtRealizeWidget(menu->id);
     }
-    else if( menu_is_popup( menu->name ) )
+    else if (menu_is_popup(menu->name))
     {
-       menu->submenu_id = PtCreateWidget( PtMenu, gui.vimWindow, 0, NULL );
-       PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
-               gui_ph_handle_menu_unrealized, menu );
+       menu->submenu_id = PtCreateWidget(PtMenu, gui.vimWindow, 0, NULL);
+       PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
+               gui_ph_handle_menu_unrealized, menu);
     }
 }
 
@@ -2680,104 +2684,104 @@ gui_mch_add_menu_item(vimmenu_T *menu, int index)
     PtArg_t args[13];
 
     n = 0;
-    PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
 
 #ifdef FEAT_TOOLBAR
-    if( menu_is_toolbar( parent->name ) )
+    if (menu_is_toolbar(parent->name))
     {
-       if( menu_is_separator( menu->name ) )
+       if (menu_is_separator(menu->name))
        {
-           PtSetArg( &args[ n++ ], Pt_ARG_SEP_FLAGS,
-                   Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION );
-           PtSetArg( &args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0 );
-           PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
-                   Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM );
-           PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, 2, 0 );
-           menu->id = PtCreateWidget( PtSeparator, gui.vimToolBar, n, args );
+           PtSetArg(&args[ n++ ], Pt_ARG_SEP_FLAGS,
+                   Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION);
+           PtSetArg(&args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0);
+           PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+                   Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM);
+           PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, 2, 0);
+           menu->id = PtCreateWidget(PtSeparator, gui.vimToolBar, n, args);
        }
        else
        {
-           if( strstr( (const char *) p_toolbar, "text" ) != NULL )
+           if (strstr((const char *) p_toolbar, "text") != NULL)
            {
-               PtSetArg( &args[ n++ ], Pt_ARG_BALLOON_POSITION,
-                       Pt_BALLOON_BOTTOM, 0 );
-               PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
-               PtSetArg( &args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0 );
+               PtSetArg(&args[ n++ ], Pt_ARG_BALLOON_POSITION,
+                       Pt_BALLOON_BOTTOM, 0);
+               PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+               PtSetArg(&args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0);
            }
-           if( ( strstr( (const char *) p_toolbar, "icons" ) != NULL ) &&
-                   ( gui_ph_toolbar_images != NULL ) )
+           if ((strstr((const char *) p_toolbar, "icons") != NULL) &&
+                   (gui_ph_toolbar_images != NULL))
            {
-               PtSetArg( &args[ n++ ], Pt_ARG_LABEL_IMAGE,
-                       gui_ph_toolbar_find_icon( menu ), 0 );
-               PtSetArg( &args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0 );
-               PtSetArg( &args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0 );
+               PtSetArg(&args[ n++ ], Pt_ARG_LABEL_IMAGE,
+                       gui_ph_toolbar_find_icon(menu), 0);
+               PtSetArg(&args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0);
+               PtSetArg(&args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0);
            }
-           if( strstr( (const char *) p_toolbar, "tooltips" ) != NULL )
+           if (strstr((const char *) p_toolbar, "tooltips") != NULL)
            {
-               PtSetArg( &args[ n++ ], Pt_ARG_LABEL_BALLOON,
-                       gui_ph_show_tooltip, 0 );
-               PtSetArg( &args[ n++ ], Pt_ARG_LABEL_FLAGS,
-                       Pt_TRUE, Pt_SHOW_BALLOON );
+               PtSetArg(&args[ n++ ], Pt_ARG_LABEL_BALLOON,
+                       gui_ph_show_tooltip, 0);
+               PtSetArg(&args[ n++ ], Pt_ARG_LABEL_FLAGS,
+                       Pt_TRUE, Pt_SHOW_BALLOON);
            }
-           PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0 );
-           PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0 );
-           PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
-                   Pt_HIGHLIGHTED | Pt_GETS_FOCUS );
-           PtSetArg( &args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0 );
-           menu->id = PtCreateWidget( PtButton, gui.vimToolBar, n, args );
-
-           PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
+           PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0);
+           PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0);
+           PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
+                   Pt_HIGHLIGHTED | Pt_GETS_FOCUS);
+           PtSetArg(&args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0);
+           menu->id = PtCreateWidget(PtButton, gui.vimToolBar, n, args);
+
+           PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
        }
        /* Update toolbar if it's open */
-       if( PtWidgetIsRealized( gui.vimToolBar ) )
-           PtRealizeWidget( menu->id );
+       if (PtWidgetIsRealized(gui.vimToolBar))
+           PtRealizeWidget(menu->id);
     }
     else
 #endif
-       if( menu_is_separator( menu->name ) )
+       if (menu_is_separator(menu->name))
     {
-       menu->id = PtCreateWidget( PtSeparator, parent->submenu_id, n, args );
+       menu->id = PtCreateWidget(PtSeparator, parent->submenu_id, n, args);
     }
     else
     {
-       accel_key = vim_strchr( menu->name, '&' );
-       if( accel_key != NULL )
+       accel_key = vim_strchr(menu->name, '&');
+       if (accel_key != NULL)
        {
            mnemonic_str[0] = accel_key[1];
            mnemonic_str[1] = NUL;
        }
 
-       PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
-       if( accel_key != NULL )
-           PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
-                   0 );
+       PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+       if (accel_key != NULL)
+           PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
+                   0);
 
-       PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
+       PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
 
-       menu->id = PtCreateWidget( PtMenuButton, parent->submenu_id, n, args );
+       menu->id = PtCreateWidget(PtMenuButton, parent->submenu_id, n, args);
 
-       PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
+       PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
 
 #ifdef USE_PANEL_GROUP
-       if( gui_ph_is_buffer_item( menu, parent ) == TRUE )
+       if (gui_ph_is_buffer_item(menu, parent) == TRUE)
        {
-           PtAddCallback( menu->id, Pt_CB_DESTROYED,
-                   gui_ph_handle_buffer_remove, menu );
-           gui_ph_pg_add_buffer( menu->dname );
+           PtAddCallback(menu->id, Pt_CB_DESTROYED,
+                   gui_ph_handle_buffer_remove, menu);
+           gui_ph_pg_add_buffer(menu->dname);
        }
 #endif
     }
 
-    gui_ph_position_menu( menu->id, menu->priority );
+    gui_ph_position_menu(menu->id, menu->priority);
 }
 
     void
 gui_mch_destroy_menu(vimmenu_T *menu)
 {
-    if( menu->submenu_id != NULL )
-       PtDestroyWidget( menu->submenu_id );
-    if( menu->id != NULL )
-       PtDestroyWidget( menu->id );
+    if (menu->submenu_id != NULL)
+       PtDestroyWidget(menu->submenu_id);
+    if (menu->id != NULL)
+       PtDestroyWidget(menu->id);
 
     menu->submenu_id = NULL;
     menu->id = NULL;
@@ -2788,12 +2792,12 @@ gui_mch_menu_grey(vimmenu_T *menu, int grey)
 {
     long    flags, mask, fields;
 
-    if( menu->id == NULL )
+    if (menu->id == NULL)
        return;
 
-    flags = PtWidgetFlags( menu->id );
-    if( PtWidgetIsClass( menu->id, PtMenuButton ) &&
-           PtWidgetIsClass( PtWidgetParent( menu->id ), PtMenu ) )
+    flags = PtWidgetFlags(menu->id);
+    if (PtWidgetIsClass(menu->id, PtMenuButton) &&
+           PtWidgetIsClass(PtWidgetParent(menu->id), PtMenu))
     {
        fields = Pt_FALSE;
        mask = Pt_SELECTABLE | Pt_HIGHLIGHTED;
@@ -2804,11 +2808,11 @@ gui_mch_menu_grey(vimmenu_T *menu, int grey)
        mask = Pt_BLOCKED | Pt_GHOST;
     }
 
-    if( ! grey )
+    if (! grey)
        fields = ~fields;
 
-    PtSetResource( menu->id, Pt_ARG_FLAGS, fields,
-           mask );
+    PtSetResource(menu->id, Pt_ARG_FLAGS, fields,
+           mask);
 }
 
     void
@@ -2829,8 +2833,8 @@ gui_mch_draw_menubar(void)
     void
 gui_mch_show_popupmenu(vimmenu_T *menu)
 {
-    PtSetResource( menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0 );
-    PtRealizeWidget( menu->submenu_id );
+    PtSetResource(menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0);
+    PtRealizeWidget(menu->submenu_id);
 }
 
     void
@@ -2841,14 +2845,14 @@ gui_mch_toggle_tearoffs(int enable)
 
 #endif
 
-#if defined( FEAT_TOOLBAR ) || defined( PROTO )
+#if defined(FEAT_TOOLBAR) || defined(PROTO)
     void
 gui_mch_show_toolbar(int showit)
 {
-    if( showit )
-       PtRealizeWidget( gui.vimToolBar );
+    if (showit)
+       PtRealizeWidget(gui.vimToolBar);
     else
-       PtUnrealizeWidget( gui.vimToolBar );
+       PtUnrealizeWidget(gui.vimToolBar);
 }
 #endif
 
@@ -2869,36 +2873,36 @@ gui_ph_get_font(
     FontQueryInfo   info;
     int_u          style;
 
-    font_tag = alloc( MAX_FONT_TAG );
-    if( font_tag != NULL )
+    font_tag = alloc(MAX_FONT_TAG);
+    if (font_tag != NULL)
     {
-       if( PfGenerateFontName( font_name, font_flags, font_size,
-                   font_tag ) != NULL )
+       if (PfGenerateFontName(font_name, font_flags, font_size,
+                   font_tag) != NULL)
        {
            /* Enforce some limits on the font used */
            style = PHFONT_INFO_FIXED;
 
-           if( enforce & PF_STYLE_BOLD )
+           if (enforce & PF_STYLE_BOLD)
                style |= PHFONT_INFO_BOLD;
-           if( enforce & PF_STYLE_ANTIALIAS )
+           if (enforce & PF_STYLE_ANTIALIAS)
                style |= PHFONT_INFO_ALIAS;
-           if( enforce & PF_STYLE_ITALIC )
+           if (enforce & PF_STYLE_ITALIC)
                style |= PHFONT_INFO_ITALIC;
 
-           PfQueryFontInfo( font_tag, &info );
+           PfQueryFontInfo(font_tag, &info);
 
-           if( info.size == 0 )
+           if (info.size == 0)
                font_size = 0;
 
            /* Make sure font size matches, and that the font style
             * at least has the bits we're checking for */
-           iffont_size == info.size &&
-                   style == (info.style & style) )
-               return( (GuiFont) font_tag );
+           if (font_size == info.size &&
+                   style == (info.style & style))
+               return (GuiFont)font_tag;
        }
-       vim_free( font_tag );
+       vim_free(font_tag);
     }
-    return( NULL );
+    return NULL;
 }
 
 /*
@@ -2918,34 +2922,34 @@ gui_ph_parse_font_name(
        char_u *vim_font,
        char_u **font_name,
        int_u *font_flags,
-       int_u *font_size )
+       int_u *font_size)
 {
     char_u  *mark;
     int_u   name_len, size;
 
-    mark = vim_strchr( vim_font, ':' );
-    if( mark == NULL )
-       name_len = STRLEN( vim_font );
+    mark = vim_strchr(vim_font, ':');
+    if (mark == NULL)
+       name_len = STRLEN(vim_font);
     else
-       name_len = (int_u) ( mark - vim_font );
+       name_len = (int_u) (mark - vim_font);
 
-    *font_name = vim_strnsave( vim_font, name_len );
-    if( *font_name != NULL )
+    *font_name = vim_strnsave(vim_font, name_len);
+    if (*font_name != NULL)
     {
-       if( mark != NULL )
+       if (mark != NULL)
        {
-           while*mark != NUL && *mark++ == ':')
+           while (*mark != NUL && *mark++ == ':')
            {
-               switch( tolower( *mark++ ) )
+               switch (tolower(*mark++))
                {
                    case 'a': *font_flags |= PF_STYLE_ANTIALIAS; break;
                    case 'b': *font_flags |= PF_STYLE_BOLD; break;
                    case 'i': *font_flags |= PF_STYLE_ITALIC; break;
 
                    case 's':
-                       size = getdigits( &mark );
+                       size = getdigits(&mark);
                        /* Restrict the size to some vague limits */
-                       if( size < 1 || size > 100 )
+                       if (size < 1 || size > 100)
                            size = 8;
 
                        *font_size = size;
@@ -2956,9 +2960,9 @@ gui_ph_parse_font_name(
                }
            }
        }
-       return( TRUE );
+       return TRUE;
     }
-    return( FALSE );
+    return FALSE;
 }
 
     int
@@ -2972,60 +2976,60 @@ gui_mch_init_font(char_u *vim_font_name, int fontset)
     FontQueryInfo info;
     PhRect_t extent;
 
-    if( vim_font_name == NULL )
+    if (vim_font_name == NULL)
     {
        /* Default font */
        vim_font_name = "PC Terminal";
     }
 
-    if( STRCMP( vim_font_name, "*" ) == 0 )
+    if (STRCMP(vim_font_name, "*") == 0)
     {
-       font_tag = PtFontSelection( gui.vimWindow, NULL, NULL,
-               "pcterm12", -1, PHFONT_FIXED, NULL );
+       font_tag = PtFontSelection(gui.vimWindow, NULL, NULL,
+               "pcterm12", -1, PHFONT_FIXED, NULL);
 
-       if( font_tag == NULL )
-           return( FAIL );
+       if (font_tag == NULL)
+           return FAIL;
 
-       gui_mch_free_font( gui.norm_font );
+       gui_mch_free_font(gui.norm_font);
        gui.norm_font = font_tag;
 
-       PfQueryFontInfo( font_tag, &info );
-       font_name = vim_strsave( info.font );
+       PfQueryFontInfo(font_tag, &info);
+       font_name = vim_strsave(info.font);
     }
     else
     {
-       if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
-                   &font_size ) == FALSE )
-           return( FAIL );
+       if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
+                   &font_size) == FALSE)
+           return FAIL;
 
-       font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
-       if( font_tag == NULL )
+       font_tag = gui_ph_get_font(font_name, font_flags, font_size, 0);
+       if (font_tag == NULL)
        {
-           vim_free( font_name );
-           return( FAIL );
+           vim_free(font_name);
+           return FAIL;
        }
 
-       gui_mch_free_font( gui.norm_font );
+       gui_mch_free_font(gui.norm_font);
        gui.norm_font = font_tag;
     }
 
-    gui_mch_free_font( gui.bold_font );
-    gui.bold_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_BOLD,
-           font_size, PF_STYLE_BOLD );
+    gui_mch_free_font(gui.bold_font);
+    gui.bold_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_BOLD,
+           font_size, PF_STYLE_BOLD);
 
-    gui_mch_free_font( gui.ital_font );
-    gui.ital_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_ITALIC,
-           font_size, PF_STYLE_ITALIC );
+    gui_mch_free_font(gui.ital_font);
+    gui.ital_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_ITALIC,
+           font_size, PF_STYLE_ITALIC);
 
     /* This extent was brought to you by the letter 'g' */
-    PfExtentText( &extent, NULL, font_tag, "g", 1 );
+    PfExtentText(&extent, NULL, font_tag, "g", 1);
 
     gui.char_width = extent.lr.x - extent.ul.x + 1;
     gui.char_height = (- extent.ul.y) + extent.lr.y + 1;
     gui.char_ascent = - extent.ul.y;
 
-    vim_free( font_name );
-    return( OK );
+    vim_free(font_name);
+    return OK;
 }
 
 /*
@@ -3036,12 +3040,12 @@ gui_mch_adjust_charheight(void)
 {
     FontQueryInfo info;
 
-    PfQueryFontInfo( gui.norm_font, &info );
+    PfQueryFontInfo(gui.norm_font, &info);
 
     gui.char_height = - info.ascender + info.descender + p_linespace;
     gui.char_ascent = - info.ascender + p_linespace / 2;
 
-    return( OK );
+    return OK;
 }
 
     GuiFont
@@ -3052,20 +3056,20 @@ gui_mch_get_font(char_u *vim_font_name, int report_error)
     int_u   font_size = 12;
     int_u   font_flags = 0;
 
-    if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
-               &font_size ) != FALSE )
+    if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
+               &font_size) != FALSE)
     {
-       font_tag = gui_ph_get_font( font_name, font_flags, font_size, -1 );
-       vim_free( font_name );
+       font_tag = gui_ph_get_font(font_name, font_flags, font_size, -1);
+       vim_free(font_name);
 
-       if( font_tag != NULL )
-           return( (GuiFont) font_tag );
+       if (font_tag != NULL)
+           return (GuiFont)font_tag;
     }
 
-    if( report_error )
-       EMSG2(e_font, vim_font_name );
+    if (report_error)
+       EMSG2(e_font, vim_font_name);
 
-    return( FAIL );
+    return FAIL;
 }
 
 #if defined(FEAT_EVAL) || defined(PROTO)
@@ -3087,12 +3091,12 @@ gui_mch_get_fontname(font, name)
     void
 gui_mch_set_font(GuiFont font)
 {
-    PgSetFont( font );
+    PgSetFont(font);
 }
 
     void
 gui_mch_free_font(GuiFont font)
 {
-    vim_free( font );
+    vim_free(font);
 }
 
diff --git a/src/gui_riscos.c b/src/gui_riscos.c
deleted file mode 100644 (file)
index 90634fa..0000000
+++ /dev/null
@@ -1,3558 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4:
- *
- * VIM - Vi IMproved   by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- * See README.txt for an overview of the Vim source code.
- */
-
-#include "vim.h"
-#include <string.h>
-
-/*
- * gui_riscos.c
- *
- * Thomas Leonard <tal197@ecs.soton.ac.uk>
- * Updated by Andy Wingate <andy@sparse.net>
- */
-
-extern int time_of_last_poll;
-
-int task_handle = 0;           /* Zero means we are not yet a Wimp task */
-int child_handle = 0;          /* Task handle of our child process (zero if none). */
-int *wimp_menu = (int *) -1;   /* Pointer to a Wimp menu structure (or -1) */
-int save_window = -1;          /* Save As window handle */
-
-int *redraw_block = NULL;      /* NULL means not in a redraw loop. */
-int ro_return_early = FALSE;   /* Break out of gui_mch_wait_for_chars() */
-
-int leaf_ref = 0;              /* Wimp message number - send via Wimp$Scrap */
-char_u *leaf_name = NULL;      /* Leaf name from DataSave */
-
-int default_columns = 120;     /* These values are used if the --rows and --columns */
-int default_rows = 32;         /* options aren't used on startup. */
-
-#define DRAG_FALSE         0
-#define DRAG_SELECTION     1
-#define DRAG_RESIZE_WINDOW  2
-int ro_dragging = DRAG_FALSE;
-int drag_button;
-int drag_modifiers;
-int drag_x_offset;
-int drag_y_offset;
-
-int nested_wimp = FALSE;       /* Bool - can we use the new wimp? */
-
-int changed_mode = FALSE;
-int x_eigen_factor;
-int y_eigen_factor;
-
-/* If ro_current_font is non-zero then use the outline font with that handle,
- * otherwise, if zap_redraw is TRUE then use ZapRedraw, otherwise use the
- * system font.
- *
- * If zap_redraw is TRUE then zap_file[] contains valid Zap font file
- * pointers (or NULLs).
- */
-int ro_current_font = 0;       /* 0 is system font, or ZapRedraw */
-int font_x_offset   = 0;       /* Where to position each char in its box */
-int font_y_offset   = 0;
-
-int zap_redraw     = FALSE;
-int double_height   = FALSE;   /* Plot each line twice? */
-
-#define grgb(r,g,b) ((b<<16) + (g<<8) + (r))
-#define UNUSED_COLOUR (gui.back_pixel)
-
-#define RO_LOAD_CLIPBOARD -2   /* Internal handle for DataSave message. */
-
-/* Changes by John Kortink, 22-23 July 1998
- *
- * Stuff to make redraw a lot faster. Almost all of it is right here below,
- * elsewhere changes are marked with 'JK230798'. Apart from a small change in
- * 'gui.c' all changes are limited to this file, 'gui_riscos.c'. The change in
- * 'gui.c' is to make Vim stop being 'smart' not redrawing characters that are
- * 'already there' (i.e. from the previous line, by coincidence). This caused a
- * lot more calls to the redraw code, which we want to avoid because a few nice
- * big strings at a time is a lot faster than a truckload of small ones. ('Dear
- * Bram ...').
- */
-
-/* The ZapRedraw structure */
-
-static struct
-{
-    int                r_flags;
-    int                r_minx;
-    int                r_miny;
-    int                r_maxx;
-    int                r_maxy;
-    int                r_screen;
-    int                r_bpl;
-    int                r_bpp;
-    int                r_charw;
-    int                r_charh;
-    char       *r_caddr;
-    int                r_cbpl;
-    int                r_cbpc;
-    int                r_linesp;
-    int                r_data;
-    int                r_scrollx;
-    int                r_scrolly;
-    int                *r_palette;
-    int                r_for;
-    int                r_bac;
-    char       *r_workarea;
-    int                r_magx;
-    int                r_magy;
-    int                r_xsize;
-    int                r_ysize;
-    int                r_mode;
-}
-zap_redraw_block;
-
-/* Other globals */
-
-static int     zap_redraw_initialised = FALSE;
-static int     zap_redraw_update_colours;
-static int     zap_redraw_colours[2];
-static int     zap_redraw_palette[16];
-
-/* Holds the current Zap font file(s).
- * The font is recreated from this block on a mode change.
- * When using zap, element ZAP_NORMAL is always valid, but
- * the others can be NULL.
- */
-
-#define ZAP_NORMAL  0
-#define ZAP_BOLD    1
-#define ZAP_ITALIC  2
-#define ZAP_BITALIC 3
-#define ZAP_STYLES  4
-
-/* Zap font file format data */
-static char    *zap_file[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
-
-/* r_caddr format for current mode */
-static char    *zap_caddr[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
-
-static void ro_remove_menu(int *menu);
-
-/*
- * Initialise all the ZapRedraw stuff.
- * Call this when changing font and after each mode change.
- * zap_redraw_bitmap must contain a valid Zap font file (possibly
- * created from the system font).
- *
- * Return FAIL to revert to system font (if we can't use ZapRedraw).
- */
-    int
-ro_zap_redraw_initialise()
-{
-    int            bytes_per_bitmap_char;
-    int            first, last;
-    int            i;
-
-    /* Can't have initialisers for struct members :-(, ok, this way then ... */
-    if (!zap_redraw_initialised)
-    {
-       zap_redraw_block.r_workarea = NULL;
-       zap_redraw_initialised = TRUE;
-    }
-
-    /* We redraw in DSA mode */
-    zap_redraw_block.r_flags = 0x0;
-
-    /* Let ZapRedraw get the screen address for us */
-    zap_redraw_block.r_screen = 0;
-
-    /* Read the font width and height from the font file header.
-     * Assume that all styles are the same size.
-     * ZAP_NORMAL is always present.
-     */
-    zap_redraw_block.r_charw = ((int *) zap_file[ZAP_NORMAL])[2];
-    zap_redraw_block.r_charh = ((int *) zap_file[ZAP_NORMAL])[3];
-
-    /* We have no linespacing */
-    zap_redraw_block.r_linesp = 0;
-
-    /* Fix foreground = colour 1 */
-    zap_redraw_block.r_for = 1;
-
-    /* Fix background = colour 0 */
-    zap_redraw_block.r_bac = 0;
-
-    /* Colour mask buffer */
-    zap_redraw_block.r_palette = zap_redraw_palette;
-
-    /* Allocate local workspace (for the few calls following here) */
-    if (zap_redraw_block.r_workarea != NULL)
-       free(zap_redraw_block.r_workarea);
-    zap_redraw_block.r_workarea = (char*) malloc(128);
-    if (!zap_redraw_block.r_workarea)
-       return FAIL;    /* Out of memory */
-
-    /* Fill in VDU variables */
-    if (xswi(ZapRedraw_ReadVduVars, 0, &zap_redraw_block) & v_flag)
-       return FAIL;        /* Can't find ZapRedraw module - use VDU instead */
-
-    /* Determine cbpl and cbpc */
-    swi(ZapRedraw_CachedCharSize, zap_redraw_block.r_bpp, 0,
-       zap_redraw_block.r_charw, zap_redraw_block.r_charh);
-    zap_redraw_block.r_cbpl = r2;
-    zap_redraw_block.r_cbpc = r3;
-
-    /* Allocate general workspace (for the calls outside) */
-    if (zap_redraw_block.r_workarea != NULL)
-       free(zap_redraw_block.r_workarea);
-    zap_redraw_block.r_workarea = (char*) malloc(128 + zap_redraw_block.r_cbpl);
-    if (!zap_redraw_block.r_workarea)
-       return FAIL;    /* Out of memory */
-
-    /* Now convert the 1 bpp character data ready for the current mode */
-
-    bytes_per_bitmap_char = (zap_redraw_block.r_charw * zap_redraw_block.r_charh + 7) / 8;
-
-    /* Convert the fonts from 1bpp to a format suitable for the
-     * current mode.
-     */
-    for (i = 0; i < ZAP_STYLES; i++)
-    {
-       first = ((int *) zap_file[i])[4];
-       last  = ((int *) zap_file[i])[5];
-
-       if (last > 255)
-           last = 255; /* Don't convert cursors (overwrites memory!) */
-
-       /* Allocate the font cache */
-       vim_free(zap_caddr[i]);
-       if (zap_file[i])
-           zap_caddr[i] = (char*) malloc(zap_redraw_block.r_cbpc * 256);
-       else
-           zap_caddr[i] = NULL;    /* No file for this style */
-
-       if (zap_caddr[i])
-       {
-           zap_redraw_block.r_caddr = zap_caddr[i];
-
-           swi(ZapRedraw_ConvertBitmap, 0, &zap_redraw_block,
-                   first, last,                /* Range of characters to convert */
-                   zap_file[i] + 0x20  /* Addr of first char provided by font */
-                   - first * bytes_per_bitmap_char);
-       }
-    }
-
-    if (!zap_caddr[ZAP_NORMAL])
-    {
-       zap_redraw = FALSE;     /* Out of memory */
-       return FAIL;
-    }
-
-    /* Next time we need them, we have to update the colour masks */
-    zap_redraw_update_colours = TRUE;
-
-    return OK;
-}
-
-/*
- * Redraw a string at OS coordinates <x,y> (top-left, x inclusive, y exclusive).
- * Graphics clip window is window[0..3] as in R1+28..40 of Wimp_RedrawWindow.
- * Returns (possibly modified) flags.
- */
-    int
-ro_zap_redraw_draw_string(x, y, string, length, flags, clip)
-    int            x;
-    int            y;
-    char    *string;
-    int            length;
-    int            flags;      /* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL, DRAW_ITALIC */
-    int            *clip;
-{
-    char redraw_data[1024];
-    int clip_minx;
-    int clip_miny;
-    int clip_maxx;
-    int clip_maxy;
-    int os_xshift = zap_redraw_block.r_magx;
-    int os_yshift = zap_redraw_block.r_magy;
-
-    if (flags & DRAW_TRANSP)
-       return flags;   /* We don't do transparent plotting yet. */
-
-    if (flags & DRAW_BOLD)
-    {
-       if (flags & DRAW_ITALIC && zap_caddr[ZAP_BITALIC])
-           zap_redraw_block.r_caddr = zap_caddr[ZAP_BITALIC];
-       else
-           zap_redraw_block.r_caddr = zap_caddr[ZAP_BOLD];
-    }
-    else
-    {
-       if (flags & DRAW_ITALIC)
-           zap_redraw_block.r_caddr = zap_caddr[ZAP_ITALIC];
-       else
-           zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
-    }
-    if (!zap_redraw_block.r_caddr)
-    {
-       zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
-       flags |= DRAW_UNDERL;       /* Style missing - we can always underline */
-    }
-
-    /* Set the vertical scaling flag */
-    if (double_height)
-       zap_redraw_block.r_flags = 1 << 1;
-    else
-       zap_redraw_block.r_flags = 0;
-
-    /* Update the colour masks (if needed) */
-    if (zap_redraw_update_colours)
-    {
-       swi(ZapRedraw_CreatePalette, 2,
-               &zap_redraw_block,
-               zap_redraw_colours,
-               zap_redraw_block.r_palette, 2);
-       zap_redraw_update_colours = FALSE;
-    }
-
-    /* Target rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
-    zap_redraw_block.r_minx = x >> os_xshift;                                  /* inclusive */
-    zap_redraw_block.r_miny = zap_redraw_block.r_ysize - (y >> os_yshift);     /* inclusive */
-    zap_redraw_block.r_maxx = (x + length * gui.char_width) >> os_xshift;      /* exclusive */
-    zap_redraw_block.r_maxy = zap_redraw_block.r_ysize - ((y - gui.char_height) >> os_yshift);
-                                                                               /* exclusive */
-
-    /* Clip rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
-    clip_minx = clip[0] >> os_xshift;                                  /* inclusive */
-    clip_miny = zap_redraw_block.r_ysize - (clip[3] >> os_yshift);     /* inclusive */
-    clip_maxx = clip[2] >> os_xshift;                                  /* exclusive */
-    clip_maxy = zap_redraw_block.r_ysize - (clip[1] >> os_yshift);     /* exclusive */
-
-    /* Clip target rectangle against the current graphics window */
-    if (zap_redraw_block.r_minx < clip_minx)
-    {
-       zap_redraw_block.r_scrollx = clip_minx - zap_redraw_block.r_minx;
-       zap_redraw_block.r_minx = clip_minx;
-    }
-    else
-       zap_redraw_block.r_scrollx = 0;
-    if (zap_redraw_block.r_miny < clip_miny)
-    {
-       zap_redraw_block.r_scrolly = clip_miny - zap_redraw_block.r_miny;
-       zap_redraw_block.r_miny = clip_miny;
-    }
-    else
-       zap_redraw_block.r_scrolly = 0;
-    if (zap_redraw_block.r_maxx > clip_maxx)
-       zap_redraw_block.r_maxx = clip_maxx;
-    if (zap_redraw_block.r_maxy > clip_maxy)
-       zap_redraw_block.r_maxy = clip_maxy;
-
-    /* Fill in the character data structure */
-    if (length > (sizeof(redraw_data) - 2 * 4 - 2))
-       length = sizeof(redraw_data) - 2 * 4 - 2;
-    ((int*) redraw_data)[0] = 2 * 4;
-    ((int*) redraw_data)[1] = 0;
-    strncpy(redraw_data + 2 * 4, string, length);
-    redraw_data[2 * 4 + length + 0] = '\0';
-    redraw_data[2 * 4 + length + 1] = '\x2';
-    zap_redraw_block.r_data = (int) redraw_data;
-
-    /* Perform the draw */
-    swi(ZapRedraw_RedrawArea, 0, &zap_redraw_block);
-
-    return flags;
-}
-
-/*
- * Okay that was it from me, back to Thomas ...
- */
-
-/*
- * Parse the GUI related command-line arguments.  Any arguments used are
- * deleted from argv, and *argc is decremented accordingly.  This is called
- * when vim is started, whether or not the GUI has been started.
- */
-    void
-gui_mch_prepare(int *argc, char **argv)
-{
-    int            arg = 1;
-
-    while (arg < *argc - 1)
-    {
-       if (strcmp(argv[arg], "--rows") == 0 || strcmp(argv[arg], "--columns") == 0)
-       {
-           int     value;
-
-           value = atoi(argv[arg + 1]);
-
-           if (argv[arg][2] == 'r')
-               default_rows = value;
-           else
-               default_columns = value;
-
-           /* Delete argument from argv[]. (hope this is read/write!) */
-
-           *argc -= 2;
-           if (*argc > arg)
-           mch_memmove(&argv[arg], &argv[arg + 2], (*argc - arg)
-                   * sizeof(char *));
-       }
-       else
-           arg++;
-    }
-}
-
-/* Fatal error on initialisation - report it and die. */
-    void
-ro_die(error)
-    char_u *error;     /* RISC OS error block */
-{
-    swi(Wimp_ReportError, error, 5, "GVim");
-    exit(EXIT_FAILURE);
-}
-
-/* Find the sizes of the window tools:
- *
- * Create a test window.
- * Find inner and outer sizes.
- * Find the difference.
- * Delete window.
- *
- * While we're here, find the eigen values too.
- */
-    void
-ro_measure_tools()
-{
-    int block[10];
-    int vdu[] = { 4, 5, -1};
-    int test_window[] =
-       {
-           -100, -100,         /* Visible area : min X,Y */
-           -50, -50,           /*                max X,Y */
-           0,   0,             /* Scroll offsets */
-           -1,                 /* Window in front */
-           0xd0800150,         /* Window flags */
-           0xff070207,         /* Colours */
-           0x000c0103,         /* More colours */
-           0, -0x4000,         /* Workarea extent */
-           0x4000, 0,          /* max X,Y */
-           0x00000000,         /* No title */
-           0 << 12,            /* No workarea button type */
-           1,                  /* Wimp sprite area */
-           0x00010001,         /* Minimum width, height */
-           0, 0, 0,            /* Title data (none) */
-           0                   /* No icons */
-       };
-    int inner_max_x, inner_min_y;
-
-    swi(Wimp_CreateWindow, 0, test_window);
-
-    block[0] = r0;
-    /* Open the window (and read state).
-     * GetWindowOutline needs it too if the wimp isn't nested.
-     */
-    swi(Wimp_OpenWindow, 0, block);
-    inner_max_x = block[3];
-    inner_min_y = block[2];
-
-    swi(Wimp_GetWindowOutline, 0, block);
-
-    gui.scrollbar_width = block[3] - inner_max_x;
-    gui.scrollbar_height = inner_min_y - block[2];
-
-    swi(Wimp_DeleteWindow, 0, block);
-
-    /* Read the size of one pixel. */
-    swi(OS_ReadVduVariables, vdu, vdu);
-    x_eigen_factor = vdu[0];
-    y_eigen_factor = vdu[1];
-}
-
-/* Load a template from the current templates file.
- * Create the window and return its handle.
- */
-    int
-ro_load_template(str_name, title, title_size)
-    char_u  *str_name;      /* Identifier of window in file (max 12 chars)   */
-    char_u  **title;       /* If not NULL then return pointer to title here */
-    int     *title_size;    /* If not NULL then return the title length here */
-{
-    int     *window;
-    char    *data;
-    int     name[4];
-
-    strcpy( (char *) name, str_name);
-
-    /* Find how big we must make the buffers */
-
-    if (xswi(Wimp_LoadTemplate, 0, 0, 0, 0, -1, name, 0) & v_flag)
-       ro_die( (char *) r0);
-
-    window = malloc(r1);       /* Don't print text messages from alloc() */
-    data = malloc(r2);
-    if (window == NULL || data == NULL)
-       ro_die("\0\0\0\0Out of memory - Can't load templates");
-
-    /* Load the template into the buffers */
-
-    swi(Wimp_LoadTemplate, 0,
-                               window,         /* Temp block */
-                               data,           /* Icon data */
-                               data + r2 + 1,  /* End of icon data */
-                               -1,             /* No fonts */
-                               name, 0);       /* First match */
-    if (r6 == 0)
-       ro_die("\0\0\0\0Can't find window in Templates file");
-
-    /* Create the window */
-
-    if (xswi(Wimp_CreateWindow, 0, window) & v_flag)
-       ro_die( (char *) r0);
-
-    if (title)
-       *title = (char_u *) window[18];
-    if (title_size)
-       *title_size = window[20];
-
-    free(window);      /* Free temp block */
-    return r0;         /* Return the window handle */
-}
-
-/*
- * Check if the GUI can be started.  Called before gvimrc is sourced.
- * Return OK or FAIL.
- */
-    int
-gui_mch_init_check()
-{
-    return OK;         /* TODO: GUI can always be started? */
-}
-
-/*
- * Initialise the RISC OS GUI.
- * Create all the windows.
- * Returns OK for success, FAIL when the GUI can't be started.
- */
-    int
-gui_mch_init()
-{
-    int     messages[] = {
-           1, 2, 3, 4, /* DataSave, DataSaveAck, DataLoad, DataLoadAck */
-           8,          /* PreQuit */
-           0xf,        /* ClaimEntity (for clipboard) */
-           0x10,       /* DataRequest (for clipboard) */
-           0x400c1,    /* Mode change */
-           0x400c3,    /* TaskCloseDown */
-           0x400c9,    /* MenusDeleted */
-           0x808c1,    /* TW_Output */
-           0x808c2,    /* TW_Ego */
-           0x808c3,    /* TW_Morio */
-           0x808c4,    /* TW_Morite */
-           0};         /* End-of-list. */
-
-
-    /* There may have been some errors reported in the
-     * command window before we get here. Wait if so.
-     */
-    swi(Wimp_ReadSysInfo, 3);
-    if (r0 == 0)
-       swi(Wimp_CommandWindow, 0);     /* Window opened - close with prompt */
-
-    if (xswi(Wimp_Initialise, 310, 0x4b534154, "GVim", messages) & v_flag)
-       return FAIL;
-    nested_wimp = r0 >= 397;
-    task_handle = r1;
-
-    /* Load the templates. */
-
-    if (xswi(Wimp_OpenTemplate, 0, "Vim:Templates") & v_flag)
-       ro_die( (char *) r0);
-
-    gui.window_handle = ro_load_template("editor",
-           &gui.window_title,
-           &gui.window_title_size);
-
-    save_window = ro_load_template("save", NULL, NULL);
-
-    swi(Wimp_CloseTemplate);
-
-    /* Set default foreground and background colours. */
-
-    gui.norm_pixel = gui.def_norm_pixel;
-    gui.back_pixel = gui.def_back_pixel;
-
-    /* Get the colours from the "Normal" and "Menu" group (set in syntax.c or
-     * in a vimrc file) */
-
-    set_normal_colors();
-
-    /*
-     * Check that none of the colors are the same as the background color
-     */
-
-    gui_check_colors();
-
-    /* Get the colours for the highlight groups (gui_check_colors() might have
-     * changed them) */
-
-    highlight_gui_started();           /* re-init colours and fonts */
-
-    /* Set geometry based on values read on initialisation. */
-
-    gui.num_cols = Columns = default_columns;
-    gui.num_rows = Rows    = default_rows;
-
-    /* Get some information about our environment. */
-
-    ro_measure_tools();
-
-    return OK;
-}
-
-/*
- * Called when the foreground or background colour has been changed.
- */
-    void
-gui_mch_new_colors()
-{
-}
-
-/*
- * Open the GUI window which was created by a call to gui_mch_init().
- */
-    int
-gui_mch_open(void)
-{
-    int block[10];
-
-    block[0] = gui.window_handle;
-    swi(Wimp_GetWindowState, 0, block);
-    block[7] = -1;                 /* Open at the top of the stack */
-    swi(Wimp_OpenWindow, 0, block);
-
-    /* Give the new window the input focus */
-    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
-
-    if (gui_win_x != -1 && gui_win_y != -1)
-       gui_mch_set_winpos(gui_win_x, gui_win_y);
-
-    return OK;
-}
-
-    void
-gui_mch_exit(int rc)
-{
-    int            block[64];
-
-    /* Close window. Stops us from getting troublesome events
-     * if we take a while to die.
-     */
-    block[0] = gui.window_handle;
-    swi(Wimp_CloseWindow, 0, block);
-
-    if (child_handle)
-    {
-       /* We still have a sub-task running - kill it */
-       block[0] = 20;
-       block[3] = 0;
-       block[4] = 0;       /* Quit */
-       if ((xswi(Wimp_SendMessage, 17, block, child_handle) & v_flag) == 0)
-       {
-           /* Idle until child dies. */
-           while (child_handle)
-           {
-               process_event(wimp_poll(1, block), block);
-           }
-       }
-    }
-
-    exit(rc);
-}
-
-/*
- * Get the position of the top left corner of the window.
- */
-    int
-gui_mch_get_winpos(int *x, int *y)
-{
-    /* TODO */
-    return FAIL;
-}
-
-/*
- * Set the position of the top left corner of the window to the given
- * coordinates.
- */
-    void
-gui_mch_set_winpos(int x, int y)
-{
-    /* TODO */
-}
-
-    void
-gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction)
-    int width;         /* In OS units */
-    int height;
-    int min_width;     /* Smallest permissible window size (ignored) */
-    int min_height;
-    int base_width;    /* Space for scroll bars, etc */
-    int base_height;
-    int direction;
-{
-    int s_width, s_height;
-    int block[] = {
-       gui.window_handle,
-       0,
-       -height + 1,
-       width,
-       1};
-
-    gui_mch_get_screen_dimensions(&s_width, &s_height);
-    s_width -= base_width;
-    s_height -= base_height;               /* Underestimate - ignores titlebar */
-
-    swi(Wimp_GetWindowState, 0, block);
-    block[3]  = block[1] + width;
-    block[2]  = block[4] - height;
-    if (block[3] > s_width)
-    {
-       block[3] = s_width;
-       block[1] = block[3] - width;
-    }
-    if (block[2] < gui.scrollbar_height)
-    {
-       block[2] = gui.scrollbar_height;
-       block[4] = block[2] + height;
-    }
-    swi(Wimp_OpenWindow, 0, block);
-    swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
-}
-
-    void
-gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
-{
-    int block[] = {4, 5, 11, 12, -1};
-
-    swi(OS_ReadVduVariables, block, block);
-    *screen_w = (block[2] + 1) << block[0];
-    *screen_h = (block[3] + 1) << block[1];
-}
-
-/* Take a font name with options and return a font handle, or
- * zero for failure.
- * Replace extension with 'Bold' or 'Italic' depending on modifiers.
- */
-    int
-ro_get_font(fullname, weight)
-    char_u     *fullname;
-    int                weight;         /* Initial weights:
-                                * BIT      MEANING
-                                * 0        bold
-                                * 1        italic
-                                */
-{
-    char_u     *arg;
-    char_u     font[41];
-    int                width = -1;
-    int                height = -1;
-    int                name_len;
-    int                i;
-    char_u     c;
-
-    for (i = 0; i < 39;)
-    {
-       c = fullname[i];
-       if (c == ':' || c == NUL || c == '.')
-           break;
-       font[i++] = c;
-    }
-
-    /* find the first modifier, NULL if none */
-    arg = strchr(fullname + i, ':');
-
-    while (arg)
-    {
-       switch (*++arg)
-       {
-           case 'h':
-               height = strtol(arg + 1, (char **) &arg, 10);
-               break;
-           case 'w':
-               width = strtol(arg + 1, (char **) &arg, 10);
-               break;
-           case 'b':
-               weight |= 1;
-               break;
-           case 'i':
-               weight |= 2;
-               break;
-           default:
-               return 0;
-       }
-       arg = strchr(arg, ':');
-    }
-
-    if ((weight & 1) && i < 35)
-    {
-       /* Bold goes instead of given suffix */
-       strncpy(font + i, ".Bold", 5);
-       i += 5;
-    }
-    else
-    {
-       /* Copy rest of name unless we are using Bold */
-       while (i < 39)
-       {
-           c = fullname[i];
-           if (c == ':' || c == NUL)
-               break;
-           font[i++] = c;
-       }
-    }
-    if ((weight & 2) && i < 32)
-    {
-       strncpy(font + i, ".Oblique", 8);
-       i += 8;
-    }
-
-    font[i] = 0;
-
-    if (height < 1 && width < 1)
-       height = width = 10;    /* Default to 10pt */
-    else if (height < 1)
-       height = width;
-    else if (width < 1)
-       width = height;
-
-    if (xswi(Font_FindFont, 0, font, width << 4, height << 4, 0, 0) & v_flag)
-       return NOFONT;          /* Can't find font */
-
-    return r0;
-}
-
-/* Load a file into allocated memory and check it is valid.
- * Return a pointer to the allocated block on success.
- */
-    char    *
-zap_load_file(name, style)
-    char_u  *name;         /* Name of directory containing styles */
-    char_u  *style;        /* Name of style within directory */
-{
-    char_u  fname[256];
-    char_u  *file;
-
-    if (strlen(name) + strlen(style) > 254)
-       return NULL;        /* Names too long */
-
-    sprintf(fname, "%s.%s", name, style);
-
-    /* Load the named font in 1bpp format. */
-    if (xswi(OS_File, 13, fname, 0, 0, "VimFonts:") & v_flag || r0 != 1)
-       return NULL;        /* Error reading file info, or not a file */
-
-    /* Allocate enough memory to load the whole file */
-    file = (char *) alloc(r4);
-    if (!file)
-       return NULL;    /* Out of memory */
-
-    if (xswi(OS_File, 12, fname, file, 0, "VimFonts:") & v_flag)
-       return NULL;    /* Unable to load file */
-
-    if (strncmp(file, "ZapFont\015", 8) == 0)
-       return file;    /* Loaded OK! */
-
-    vim_free(file);
-    return NULL;       /* Not a valid font file */
-}
-
-/* Load and convert the named font.
- * If name is NULL or a null string then convert the system font.
- * Return OK on success; FAIL and we revert to using the VDU drivers.
- *
- * 'name' is the name of a directory.
- * Tries to load 'name.0', 'name.B', 'name.I' and 'name.IB'.
- */
-    int
-zap_load_font(name)
-    char_u  *name;
-{
-    int            i;
-
-    /* Free the existing font files, if any */
-    for (i = 0; i < ZAP_STYLES; i++)
-    {
-       vim_free(zap_file[i]);
-       zap_file[i] = NULL;
-    }
-
-    if (name && *name == '!')
-    {
-       name++;
-       double_height = TRUE;
-    }
-    else
-       double_height = FALSE;
-
-    if (name && *name)
-    {
-       zap_file[ZAP_NORMAL]    = zap_load_file(name, "0");
-       if (!zap_file[ZAP_NORMAL])
-           return FAIL;        /* Can't load the 'normal' style - error */
-
-       zap_file[ZAP_BOLD]      = zap_load_file(name, "B");
-       zap_file[ZAP_ITALIC]    = zap_load_file(name, "I");
-       zap_file[ZAP_BITALIC]   = zap_load_file(name, "IB");
-    }
-    else
-    {
-       int     *header;
-       char    workarea[16];
-       char    *old_wa;
-
-       /* Allocate memory for system font (8 x 8 x 256 bits, plus header) */
-       header = (int *) alloc(0x20 + 8 * 256);
-       if (header == NULL)
-           return FAIL;
-       zap_file[ZAP_NORMAL] = (char *) header;
-
-       /* Store details about the system font */
-       header[2] = 8;      /* Width */
-       header[3] = 8;      /* Height */
-       header[4] = 0;      /* First char */
-       header[5] = 255;    /* Last char */
-       header[6] = header[7] = 0;  /* Reserved */
-
-       /* Get system font bitmap */
-       old_wa = zap_redraw_block.r_workarea;
-       zap_redraw_block.r_workarea = workarea;
-       swi(ZapRedraw_ReadSystemChars, zap_file[ZAP_NORMAL] + 0x20, &zap_redraw_block);
-       zap_redraw_block.r_workarea = old_wa;
-    }
-
-    return ro_zap_redraw_initialise();
-}
-
-/*
- * Initialise vim to use the font with the given name.
- * Return FAIL if the font could not be loaded, OK otherwise.
- */
-    int
-gui_mch_init_font(char_u *font_name, int fontset)
-{
-    int            new_handle  = 0;        /* Use the system font by default */
-
-    if (font_name[0] == '!')
-    {
-       /* Select a ZapRedraw font */
-       if (zap_load_font(font_name + 1))
-           zap_redraw = TRUE;
-       else
-       {
-           EMSG2(_("E610: Can't load Zap font '%s'"), font_name);
-           font_name = "System";   /* Error - use system font */
-           zap_redraw = FALSE;
-       }
-    }
-    else
-    {
-       zap_redraw = FALSE;
-
-       if (font_name)
-       {
-           /* Extract any extra details about the font */
-           new_handle = ro_get_font(font_name, 0);
-           if (!new_handle)
-               return FAIL;
-       }
-       else
-           font_name = "System";
-    }
-
-    /* Free the previous font, if any */
-    gui_mch_free_font(gui.norm_font);
-    gui.norm_font = new_handle;
-    gui.char_ascent = 0;
-
-    if (new_handle)
-    {
-       /* Read details about the chosen font */
-       swi(Font_ReadInfo, new_handle);
-
-       gui.char_width  = r3 - r1;
-       gui.char_height = r4 - r2;
-
-       font_x_offset = -r1;    /* Where to position each char in its box */
-       font_y_offset = -r4;
-
-       /* Try to load other fonts for bold, italic, and bold-italic */
-       gui_mch_free_font(gui.bold_font);
-       gui.bold_font = ro_get_font(font_name, 1);
-       gui_mch_free_font(gui.ital_font);
-       gui.ital_font = ro_get_font(font_name, 2);
-       gui_mch_free_font(gui.boldital_font);
-       gui.boldital_font = ro_get_font(font_name, 3);
-    }
-    else
-    {
-       /* Use the system font or ZapRedraw. */
-       if (zap_redraw)
-       {
-           gui.char_width      = zap_redraw_block.r_charw << zap_redraw_block.r_magx;
-           gui.char_height     = zap_redraw_block.r_charh << zap_redraw_block.r_magy;
-           if (double_height)
-               gui.char_height <<= 1;
-       }
-       else
-       {
-           gui.char_width      = 16;
-           gui.char_height     = 32;
-       }
-
-       gui_mch_free_font(gui.bold_font);
-       gui.bold_font = 0;
-       gui_mch_free_font(gui.ital_font);
-       gui.ital_font = 0;
-       gui_mch_free_font(gui.boldital_font);
-       gui.boldital_font = 0;
-    }
-    hl_set_font_name(font_name);
-
-    must_redraw = CLEAR;
-    return OK;
-}
-
-/*
- * Adjust gui.char_height (after 'linespace' was changed).
- */
-    int
-gui_mch_adjust_charheight()
-{
-    return FAIL;
-}
-
-/*
- * Get a font structure for highlighting.
- */
-    GuiFont
-gui_mch_get_font(name, giveErrorIfMissing)
-    char_u     *name;
-    int                giveErrorIfMissing;
-{
-    int                handle;
-
-    if (!name)
-       return NOFONT;          /* System font if no name */
-
-    handle = ro_get_font(name, 0);
-    if (!handle)
-    {
-       if (giveErrorIfMissing)
-           EMSG2(_("E611: Can't use font %s"), name);
-       return NOFONT;
-    }
-
-    return handle;
-}
-
-#if defined(FEAT_EVAL) || defined(PROTO)
-/*
- * Return the name of font "font" in allocated memory.
- * Don't know how to get the actual name, thus use the provided name.
- */
-    char_u *
-gui_mch_get_fontname(font, name)
-    GuiFont font;
-    char_u  *name;
-{
-    if (name == NULL)
-       return NULL;
-    return vim_strsave(name);
-}
-#endif
-
-/*
- * Set the current text font.
- */
-    void
-gui_mch_set_font(GuiFont font)
-{
-    ro_current_font = font;
-
-    if (font)
-    {
-       /* Not the system font or ZapRedraw font - select it */
-       swi(Font_SetFont, font);
-    }
-}
-
-/*
- * If a font is not going to be used, free its structure.
- */
-    void
-gui_mch_free_font(GuiFont font)
-{
-    if (font)
-       swi(Font_LoseFont, font);
-}
-
-/*
- * Return the Pixel value (colour) for the given colour name.
- * Return INVALCOLOR for error.
- * NB: I've changed Green for now, since it looked really sick
- */
-    guicolor_T
-gui_mch_get_color(char_u *name)
-{
-    int                i;
-    struct colour
-    {
-       char_u          *name;
-       guicolor_T      value;
-    } colours[] =
-    {
-       { "Red",                grgb(255,       0,      0)      },
-       { "LightRed",           grgb(255,       0,      0)      },
-       { "DarkRed",            grgb(139,       0,      0)      },
-
-       { "Green",              grgb(50,        200,    50)     },
-       { "LightGreen",         grgb(144,       238,    144)    },
-       { "DarkGreen",          grgb(0,         100,    0)      },
-       { "SeaGreen",           grgb(46,        139,    87)     },
-
-       { "Blue",               grgb(0,         0,      255)    },
-       { "LightBlue",          grgb(173,       216,    230)    },
-       { "DarkBlue",           grgb(0,         0,      139)    },
-       { "SlateBlue",          grgb(160,       90,     205)    },
-
-       { "Cyan",               grgb(0,         255,    255)    },
-       { "LightCyan",          grgb(224,       255,    255)    },
-       { "DarkCyan",           grgb(0,         139,    139)    },
-
-       { "Magenta",            grgb(255,       0,      255)    },
-       { "LightMagenta",       grgb(255,       224,    255)    },
-       { "DarkMagenta",        grgb(139,       0,      139)    },
-
-       { "Yellow",             grgb(255,       255,    0)      },
-       { "LightYellow",        grgb(255,       255,    224)    },
-       { "DarkYellow",         grgb(139,       139,    0)      },
-       { "Brown",              grgb(165,       42,     42)     },
-
-       { "Gray",               grgb(190,       190,    190)    },
-       { "Grey",               grgb(190,       190,    190)    },
-       { "LightGray",          grgb(211,       211,    211)    },
-       { "LightGrey",          grgb(211,       211,    211)    },
-       { "DarkGray",           grgb(169,       169,    169)    },
-       { "DarkGrey",           grgb(169,       169,    169)    },
-       { "Gray10",             grgb(26,        26,     26)     },
-       { "Grey10",             grgb(26,        26,     26)     },
-       { "Gray20",             grgb(51,        51,     51)     },
-       { "Grey20",             grgb(51,        51,     51)     },
-       { "Gray30",             grgb(77,        77,     77)     },
-       { "Grey30",             grgb(77,        77,     77)     },
-       { "Gray40",             grgb(102,       102,    102)    },
-       { "Grey40",             grgb(102,       102,    102)    },
-       { "Gray50",             grgb(127,       127,    127)    },
-       { "Grey50",             grgb(127,       127,    127)    },
-       { "Gray60",             grgb(153,       153,    153)    },
-       { "Grey60",             grgb(153,       153,    153)    },
-       { "Gray70",             grgb(179,       179,    179)    },
-       { "Grey70",             grgb(179,       179,    179)    },
-       { "Gray80",             grgb(204,       204,    204)    },
-       { "Grey80",             grgb(204,       204,    204)    },
-       { "Gray90",             grgb(229,       229,    229)    },
-       { "Grey90",             grgb(229,       229,    229)    },
-
-       { "Black",              grgb(0,         0,      0)      },
-       { "White",              grgb(255,       255,    255)    },
-
-       { "Orange",             grgb(255,       165,    0)      },
-       { "Purple",             grgb(160,       32,     240)    },
-       { "Violet",             grgb(238,       130,    238)    },
-       {NULL, 0}
-    };
-
-    if (name[0] == '#')
-    {
-       char        *end;
-       int         c;
-
-       c = strtol(name + 1, &end, 16);
-       return (guicolor_T) ((c >> 16) & 0xff) | (c & 0xff00) | ((c & 0xff) << 16);
-    }
-
-    for (i = 0; colours[i].name != NULL; i++)
-    {
-       if (STRICMP(name, colours[i].name) == 0)
-           return colours[i].value;
-    }
-    if (strnicmp(name, "grey", 4) == 0 || strnicmp(name, "gray", 4) == 0)
-    {
-       int level = (255 * atoi(name + 4)) / 100;
-       return (guicolor_T) grgb(level, level, level);
-    }
-    return INVALCOLOR;
-}
-
-/*
- * Set the current text colours.
- * If we are using fonts then set the antialiasing colours too.
- */
-    void
-gui_mch_set_colors(guicolor_T fg, guicolor_T bg)
-{
-    zap_redraw_colours[0] = bg << 8;   /* JK230798, register new background colour */
-    zap_redraw_colours[1] = fg << 8;   /* JK230798, register new foreground colour */
-    zap_redraw_update_colours = TRUE;  /* JK230798, need update of colour masks */
-
-    swi(ColourTrans_ReturnGCOL, fg << 8);
-    gui.fg_colour = r0;
-    swi(ColourTrans_ReturnGCOL, bg << 8);
-    gui.bg_colour = r0;
-
-    if (ro_current_font)
-       swi(ColourTrans_SetFontColours, 0, bg << 8, fg << 8, 14);
-}
-
-    void
-ro_draw_string(x, y, s, len, flags, clip)
-    int            x;          /* Top-left coord to plot at (x incl, y excl) */
-    int            y;          /* (screen coords) */
-    char_u  *s;                /* String to plot */
-    int            len;        /* Length of string */
-    int            flags;      /* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL */
-    int*    clip;      /* JK230798, added clip window */
-{
-    if (ro_current_font)
-    {
-       int     fx;
-       int     flen = len;     /* Preserve for underline */
-
-       /* Use the Font manager to paint the string.
-        * Must do one char at a time to get monospacing.
-        */
-
-       if (flags & DRAW_ITALIC && !gui.ital_font)
-           flags |= DRAW_UNDERL;       /* No italic - underline instead */
-
-       if ((flags & DRAW_TRANSP) == 0)
-       {
-           swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
-           swi(OS_Plot, 4, x, y - gui.char_height);
-           swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
-       }
-
-       fx = x + font_x_offset;
-       while (flen--)
-       {
-           swi(Font_Paint, 0, s++, 0x90, fx, y + font_y_offset, 0, 0, 1);
-           fx += gui.char_width;
-       }
-    }
-    else
-    {
-       if (zap_redraw)
-       {
-           /* Using fast Zap redraw. */
-           flags = ro_zap_redraw_draw_string(x, y, s, len, flags, clip);
-       }
-       else
-       {
-           /* Using the system font */
-           if (flags & DRAW_ITALIC)
-               flags |= DRAW_UNDERL;
-
-           if ((flags & DRAW_TRANSP) == 0)
-           {
-               swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
-               swi(OS_Plot, 4, x, y - gui.char_height);
-               swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
-           }
-           swi(OS_Plot, 4,                     /* Move the drawing cursor */
-                   x,
-                   y - 1);
-           swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
-           swi(OS_WriteN, s, len);
-
-           if (flags & DRAW_BOLD)
-           {
-               swi(OS_Plot, 4, x + (1 << x_eigen_factor), y - 1);
-               swi(OS_WriteN, s, len);
-           }
-       }
-    }
-
-    if (flags & DRAW_UNDERL)
-    {
-       if (ro_current_font || zap_redraw)
-           swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
-       /* Underlined is the same with all plotting methods */
-       swi(OS_Plot, 4, x, y - gui.char_height);
-       swi(OS_Plot, 1, gui.char_width * len, 0);
-    }
-}
-
-    void
-gui_mch_draw_string(int row, int col, char_u *s, int len, int flags)
-{
-    int x, y;          /* Workarea x,y */
-    x = col * gui.char_width;
-    y = -row * gui.char_height;
-
-    if (redraw_block)
-    {
-       ro_draw_string(x + redraw_block[1], y + redraw_block[4],
-                       s, len, flags, &redraw_block[7]);       /* JK230798, added clip window */
-    }
-    else
-    {
-       int block[44];
-       block[0] = gui.window_handle;
-       block[1] = x;
-       block[2] = y - gui.char_height;
-       block[3] = (col + len) * gui.char_width;
-       block[4] = y;
-       swi(Wimp_UpdateWindow, 0, block);
-       while (r0)
-       {
-           ro_draw_string(x + block[1], y + block[4],
-                       s, len, flags, &block[7]);      /* JK230798, added clip window */
-           swi(Wimp_GetRectangle, 0, block);
-       }
-    }
-}
-
-/*
- * Return OK if the key with the termcap name "name" is supported.
- */
-    int
-gui_mch_haskey(char_u *name)
-{
-    return FAIL;
-}
-
-    void
-gui_mch_beep(void)
-{
-    swi(OS_WriteI + 7);
-}
-
-/*
- * Visual bell.
- */
-    void
-gui_mch_flash(int msec)
-{
-    /* TODO */
-}
-
-
-/*
- * Plot a solid rectangle using the given plot action and colour.
- * Coordinates are inclusive and window-relative.
- */
-    void
-plot_rectangle(plot, colour, minx, miny, maxx, maxy)
-    int plot;          /* OS_Plot action */
-    int colour;
-    int minx;
-    int miny;
-    int maxx;
-    int maxy;
-{
-    if (redraw_block)
-    {
-       swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
-       swi(OS_Plot, 4, minx + redraw_block[1], miny + redraw_block[4]);
-       swi(OS_Plot, plot, maxx + redraw_block[1], maxy + redraw_block[4]);
-    }
-    else
-    {
-       int block[44];
-       block[0] = gui.window_handle;
-       block[1] = minx;
-       block[2] = miny;
-       block[3] = maxx + 1;
-       block[4] = maxy + 1;
-       swi(Wimp_UpdateWindow, 0, block);
-       while (r0)
-       {
-           swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
-           swi(OS_Plot, 4, minx + block[1], miny + block[4]);
-           swi(OS_Plot, plot, maxx + block[1], maxy + block[4]);
-           swi(Wimp_GetRectangle, 0, block);
-       }
-    }
-}
-
-/*
- * Invert a rectangle from row r, column c, for nr rows and nc columns.
- */
-    void
-gui_mch_invert_rectangle(int r, int c, int nr, int nc)
-{
-    plot_rectangle(96 + 6, 0, FILL_X(c), -FILL_Y(r + nr), FILL_X(c + nc), -FILL_Y(r));
-}
-
-/*
- * Iconify the GUI window.
- */
-    void
-gui_mch_iconify(void)
-{
-}
-
-#if defined(FEAT_EVAL) || defined(PROTO)
-/*
- * Bring the Vim window to the foreground.
- */
-    void
-gui_mch_set_foreground()
-{
-    /* TODO */
-}
-#endif
-
-/* Draw a hollow rectangle relative to the current
- * graphics cursor position, with the given width
- * and height. Start position is top-left.
- */
-    void
-draw_hollow(w, h)
-    int        w;
-    int        h;
-{
-    swi(OS_Plot, 1, w - 1, 0);
-    swi(OS_Plot, 1, 0, 1 - h);
-    swi(OS_Plot, 1, 1 - w, 0);
-    swi(OS_Plot, 1, 0, h - 1);
-}
-
-/*
- * Draw a cursor without focus.
- */
-    void
-gui_mch_draw_hollow_cursor(guicolor_T colour)
-{
-    int x = FILL_X(gui.cursor_col);    /* Window relative, top-left */
-    int y = -FILL_Y(gui.cursor_row);
-    if (redraw_block == NULL)
-    {
-       int block[11];
-
-       block[0] = gui.window_handle;
-       block[1] = x;
-       block[2] = y - gui.char_height;
-       block[3] = x + gui.char_width;
-       block[4] = y;
-       swi(Wimp_UpdateWindow, 0, block);
-       while (r0)
-       {
-           swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
-
-           swi(OS_Plot, 4, x + block[1], y + block[4] - 1);
-           draw_hollow(gui.char_width, gui.char_height);
-
-           swi(Wimp_GetRectangle, 0, block);
-       }
-    }
-    else
-    {
-       swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
-
-       swi(OS_Plot, 4, x + redraw_block[1], y + redraw_block[4] - 1);
-       draw_hollow(gui.char_width, gui.char_height);
-    }
-}
-
-/*
- * Draw part of a cursor, "w" pixels wide, and "h" pixels high, using
- * color "color".
- */
-    void
-gui_mch_draw_part_cursor(w, h, colour)
-    int w;
-    int h;
-    guicolor_T colour;
-{
-    int x = FILL_X(gui.cursor_col);
-    int y = -FILL_Y(gui.cursor_row);
-    swi(ColourTrans_ReturnGCOL, colour << 8);
-    plot_rectangle(96 + 5, r0, x, y - h, x + w - 1, y - 1);
-}
-
-/*
- * Catch up with any queued events.  This may put keyboard input into the
- * input buffer, call resize call-backs, trigger timers etc.
- * If there is nothing in the event queue(& no timers pending), then we return
- * immediately (well, after a Wimp_Poll).
- */
-    void
-gui_mch_update(void)
-{
-    int block[64];
-    int reason;
-
-    swi(OS_ReadMonotonicTime);
-    if ((r0 - time_of_last_poll) < 50)
-       return;                     /* Don't return too often */
-
-    reason = wimp_poll(0, block);
-    if (reason)
-       process_event(reason, block);
-    ro_return_early = FALSE;           /* We're returning anyway. */
-}
-
-    void
-redraw_window(block)
-    int *block;
-{
-    int x, y;                  /* Vim workarea coords */
-    int width, height;
-    int blank_col;
-
-    swi(ColourTrans_ReturnGCOL, UNUSED_COLOUR << 8, 0, 0, 1<<7, 0);
-    blank_col = r0;
-
-    swi(Wimp_RedrawWindow, 0, block);
-    redraw_block = block;
-    while (r0)
-    {
-       x = block[7] - block[1];
-       y = block[4] - block[10];
-       width  = block[9]  - block[7];
-       height = block[10] - block[8];
-
-       if (height + y > Rows * gui.char_height)
-       {
-           /* Blank everything off the bottom. */
-           plot_rectangle(96 + 5, blank_col,
-                               0, block[8] - block[4],
-                               block[9] - block[1], -FILL_Y(Rows) - 1);
-           height = Rows * gui.char_height;
-       }
-       if (width + x> Columns * gui.char_width)
-       {
-           /* Blank everything off to the right. */
-           plot_rectangle(96 + 5, blank_col,
-                               FILL_X(Columns), block[8] - block[4],
-                               block[9] - block[1], 0);
-           width = Columns * gui.char_width;
-       }
-       gui_redraw(x , y, width, height);
-       swi(Wimp_GetRectangle, 0, block);
-    }
-    redraw_block = NULL;
-}
-
-/* Check if we have modified data.
- * If we do then ack the message to stop the shutdown.
- * Otherwise, ignore the message.
- */
-    void
-ro_prequit(block)
-    int            *block;
-{
-    if (!ro_ok_to_quit())
-    {
-       /* Not OK to quit - stop shutdown */
-       block[3] = block[2];
-       swi(Wimp_SendMessage, 19, block, block[1]);
-    }
-    /* Do nothing. We may get a Message_Quit later. */
-}
-
-/* If there is unsaved data then ask the user if they mind losing it.
- * Return TRUE if we can quit without saving, FALSE to halt the
- * shutdown.
- */
-    int
-ro_ok_to_quit()
-{
-    int            old_confirm = cmdmod.confirm;
-
-    cmdmod.confirm = FALSE;        /* Use our own, single tasking, box */
-
-    if (check_changed_any(FALSE))
-    {
-       swi(Wimp_ReportError,
-               "\0\0\0\0Vim contains unsaved data - quit anyway?",
-               0x17,
-               "Vim");
-       cmdmod.confirm = old_confirm;
-       if (r1 != 1)
-           return FALSE;
-    }
-    cmdmod.confirm = old_confirm;
-    return TRUE;
-}
-
-/* Quit without checking for unsaved data. */
-    void
-ro_quit()
-{
-    exiting = TRUE;
-    getout(0);
-
-    exiting = FALSE;               /* probably can't get here */
-    setcursor();                   /* position cursor */
-    out_flush();
-}
-
-/* Insent the given vim special code into the input buffer */
-    void
-ro_press(a, b, modifier)
-    char a;
-    char b;
-    int modifier;      /* %<Ctrl><Shift> 0000 0000 */
-{
-    char_u buf[6];
-    int            vim_mod;
-    int            key;
-
-
-    /* Convert RISC OS modifier to Vim modifier. */
-    vim_mod = ((modifier & 0x10) ? MOD_MASK_SHIFT : 0)
-              | ((modifier & 0x20) ? MOD_MASK_CTRL : 0);
-    key = simplify_key(TERMCAP2KEY(a, b), &vim_mod);
-
-    buf[3] = CSI;
-    buf[4] = KEY2TERMCAP0(key);
-    buf[5] = KEY2TERMCAP1(key);
-    if (vim_mod)
-    {
-       buf[0] = CSI;
-       buf[1] = KS_MODIFIER;
-       buf[2] = vim_mod;
-       add_to_input_buf(buf, 6);
-    }
-    else
-       add_to_input_buf(buf + 3, 3);
-}
-
-/* Take a wimp key code and insert the vim equivalent
- * into vim's input buffer.
- * CTRL-C also sets got_int.
- */
-    void
-ro_insert_key(code)
-    char_u *code;              /* Wimp_ProcessKey code (4 bytes) */
-{
-    char a = code[0];
-    char b = code[1];
-    int base, modifier;
-
-    if (a == 3 && ctrl_c_interrupts)
-       got_int = TRUE;
-
-    /* Is it a normal key? */
-    if (a > 31 && a < 127)
-    {
-       add_to_input_buf(code, 1);
-       return;
-    }
-
-    /* We should pass any unrecognised keys on, but
-     * for now just pass on F12 combinations.
-     */
-    switch (b)
-    {
-       case 0:
-           /* Home and Delete are the only special cases */
-           switch (a)
-           {
-               case 0x1e:
-                   ro_press('k','h', 0);       /* Home */
-                   return;
-               case 0x7f:
-                   ro_press('k','D', 0);       /* Delete */
-                   return;
-               case CSI:
-                   {
-                       /* Turn CSI into K_CSI.  Untested! */
-                       char_u string[3] = {CSI, KS_EXTRA, KE_CSI};
-
-                       add_to_input_buf(string, 3);
-                       return;
-                   }
-               default:
-                   add_to_input_buf(code, 1);
-                   return;
-           }
-       case 1:
-           if ((a & 0xcf) == 0xcc)
-           {
-               /* F12 pressed - pass it on (quick hack) */
-               swi(Wimp_ProcessKey, a | 0x100);
-               return;
-           }
-           base = a & 0xcf;
-           modifier = a & 0x30;
-           switch (base)
-           {
-               case 0x8a:      /* Tab */
-                   add_to_input_buf("\011", 1);
-                   return;
-               case 0x8b:      /* Copy (End) */
-                   return ro_press('@', '7', modifier);
-               case 0x8c:      /* Left */
-                   return ro_press('k', 'l', modifier);
-               case 0x8d:      /* Right */
-                   return ro_press('k', 'r', modifier);
-               case 0x8e:      /* Down */
-                   if (modifier & 0x10)
-                       return ro_press('k', 'N', modifier ^ 0x10);
-                   else
-                       return ro_press('k', 'd', modifier);
-               case 0x8f:      /* Up */
-                   if (modifier & 0x10)
-                       return ro_press('k', 'P', modifier ^ 0x10);
-                   else
-                       return ro_press('k', 'u', modifier);
-               case 0xca:      /* F10 */
-                   return ro_press('k', ';', modifier);
-               case 0xcb:      /* F11 */
-                   return ro_press('F', '1', modifier);
-               case 0xcd:      /* Insert */
-                   return ro_press('k', 'I', modifier);
-               default:
-                   if (base > 0x80 && base < 0x18a)
-                   {
-                       /* One of the other function keys */
-                       return ro_press('k', '0' + (base & 15), modifier);
-                   }
-           }
-    }
-}
-
-/* Process a mouse event. */
-    void
-ro_mouse(block)
-    int *block;
-{
-    int x, y, button, vim_button;
-    int modifiers = 0;
-    int min_x, min_y;          /* Visible area of editor window */
-    int max_x, max_y;
-
-    if (block[3] != gui.window_handle || ro_dragging)
-       return;                 /* Not our window or ignoring clicks*/
-
-    x = block[0];              /* Click position - screen coords */
-    y = block[1];
-    button = block[2];
-
-    block[0] = gui.window_handle;
-    swi(Wimp_GetWindowState, 0, block);
-    min_x = block[1];
-    min_y = block[2];
-    max_x = block[3];
-    max_y = block[4];
-
-    if (block[3] - x < gui.scrollbar_width)
-    {
-       /* Click in that blank area under the scrollbars */
-
-       if (button & 0x444)
-       {
-           int     front_block[10];
-           /* Dragging with Select - bring window to front first */
-           front_block[0] = gui.window_handle;
-           swi(Wimp_GetWindowState, 0, front_block);
-           front_block[7] = -1;
-           ro_open_main(front_block);
-       }
-
-       block[0] = gui.window_handle;
-       block[1] = 7;                   /* Drag point */
-       block[2] = block[4] = 0;        /* Coords of point. */
-       block[3] = block[5] = 0;
-       drag_x_offset = max_x - x;
-       drag_y_offset = min_y - y;
-
-       /* Parent box. */
-       block[6] = min_x +
-                       gui.scrollbar_width * 2 +
-                       MIN_COLUMNS * gui.char_width;
-       block[7] = 0;
-       gui_mch_get_screen_dimensions(&block[8], &block[9]);
-       block[9] = max_y -
-                       4 * gui.char_height -
-                       gui.scrollbar_height;
-
-       swi(Wimp_DragBox, 0, block);
-       ro_dragging = DRAG_RESIZE_WINDOW;
-       drag_button = vim_button;
-       drag_modifiers = modifiers;
-       return;
-    }
-
-    if (button & 0x111)
-       vim_button = MOUSE_RIGHT;
-    else if (button & 0x222)
-       vim_button = MOUSE_MIDDLE;
-    else
-       vim_button = MOUSE_LEFT;
-
-    swi(OS_Byte, 121, 0x80);
-    if (r1 == 0xff)
-       modifiers |= MOUSE_SHIFT;
-    swi(OS_Byte, 121, 0x81);
-    if (r1 == 0xff)
-       modifiers |= MOUSE_CTRL;
-    swi(OS_Byte, 121, 0x82);
-    if (r1 == 0xff)
-       modifiers |= MOUSE_ALT;
-
-    if (button == 2)
-    {
-       /* Menu click:
-        * If shift was pressed then do the paste action.
-        * If not, then open the pop-up menu.
-        */
-       modifiers ^= MOUSE_SHIFT;
-       if (modifiers && MOUSE_SHIFT)
-       {
-           vimmenu_T   main;
-           /* Shift was NOT pressed - show menu */
-           main.dname = (char_u *) "Vim";
-           main.children = root_menu;
-           gui_mch_show_popupmenu(&main);
-           return;
-       }
-    }
-
-    /* Gain the input focus */
-    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
-
-    if (button & 0xf0)
-    {
-       /* Drag operation:
-        *
-        * Tell the Wimp to start a drag.
-        * Monitor null events.
-        */
-       block[1] = 7;                   /* Drag a point. */
-       block[2] = block[4] = x;        /* Coords of point. */
-       block[3] = block[5] = y;
-       block[6] = 0;                   /* Coords of bounding box. */
-       block[7] = 0;
-       gui_mch_get_screen_dimensions(&block[8], &block[9]);
-
-       drag_x_offset = drag_y_offset = 0;
-
-       swi(Wimp_DragBox, 0, block);
-       ro_dragging = DRAG_SELECTION;
-       drag_button = vim_button;
-       drag_modifiers = modifiers;
-
-       vim_button |= MOUSE_DRAG;
-    }
-
-    gui_send_mouse_event(
-               vim_button,
-               x - min_x,
-               max_y - y,
-               button & 0xf ? TRUE : FALSE,    /* dclick */
-               modifiers);
-}
-
-    void
-ro_continue_drag(block)
-    int *block;                        /* Just used as scrap. */
-{
-    int x, y;
-
-    /* Get screen coords of pointer. */
-    swi(Wimp_GetPointerInfo, 0, block);
-    x = block[0] + drag_x_offset;
-    y = block[1] + drag_y_offset;
-
-    block[0] = gui.window_handle;
-    swi(Wimp_GetWindowState, 0, block);
-
-    if (ro_dragging == DRAG_RESIZE_WINDOW)
-    {
-       /* Resizeing the main window. */
-       block[2] = y;
-       block[3] = x;
-       ro_open_main(block);
-    }
-    else
-    {
-       /* Selecting some text. */
-       gui_send_mouse_event(
-           drag_button | MOUSE_DRAG,   /* Always report the same button */
-           x - block[1],
-           block[4] - y,
-           FALSE,                      /* Not a double click. */
-           drag_modifiers);
-    }
-}
-
-/* User has released all mouse buttons, marking the end of a drag. */
-    void
-ro_drag_finished(block)
-    int *block;
-{
-    int x;
-    int y;
-    int width, height;
-
-    /* I don't trust the box returned by Wimp_Poll; look at the pointer
-     * ourselves.
-     */
-    swi(Wimp_GetPointerInfo, 0, block);
-    x = block[0] + drag_x_offset;
-    y = block[1] + drag_y_offset;
-
-    if (ro_dragging == DRAG_RESIZE_WINDOW)
-    {
-       block[0] = gui.window_handle;
-       swi(Wimp_GetWindowState, 0, block);
-       block[2] = y;
-       block[3] = x;
-       ro_open_main(block);
-
-       width = (block[3] - block[1]);
-       height = (block[4] - block[2]);
-
-       swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
-       gui_resize_shell(width, height);
-    }
-    else
-    {
-       block[0] = gui.window_handle;
-       swi(Wimp_GetWindowState, 0, block);
-       gui_send_mouse_event(
-               MOUSE_RELEASE,
-               x - block[1],
-               block[4] - y,
-               FALSE,                  /* not a double click */
-               drag_modifiers);
-    }
-    ro_dragging = DRAG_FALSE;
-}
-
-/* Load the file/pathname given in block into a [new] buffer.
- *
- * Modifier    Action
- *
- * None                :confirm e <file>
- * Ctrl                :sp <file>
- * Shift       <file>
- *
- * Insert into typebuf, at the start.
- * If loading from !Scrap then use saved leafname instead, and
- * delete the scrap file. Also, ignore shift key.
- *
- * NB: Doesn't send DataLoadAck (other app might delete temp file?).
- */
-    void
-ro_dataload(block)
-    int            *block;
-{
-    char_u  new_path[MAXPATHL];
-    char_u  *path = ((char_u *) block) + 44;
-    int            scrap = FALSE;
-
-    if (block[3] == leaf_ref && leaf_name)
-       scrap = TRUE;
-
-    switch (get_real_state() & 0xff)
-    {
-       case INSERT:
-       case CMDLINE:
-       case CMDLINE+LANGMAP:
-           /* For insert mode we can only insert the pathname (currently)
-            * Make sure Shift is pressed.
-            */
-           swi(OS_Byte, 121, 0x80);        /* Is Shift pressed? */
-           if (r1 == 0xff)
-           {
-               ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
-               ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
-               ro_return_early = TRUE;             /* Return even though nothing was typed. */
-           }
-           else
-               swi(Wimp_ReportError,
-                       "\0\0\0\0Sorry, you can only load text in normal mode", 5, "Vim");
-           break;
-
-       case NORMAL:
-           ro_return_early = TRUE;         /* Return even though nothing was typed. */
-
-           if (scrap)                      /* Remove <Wimp$Scrap>. Later. */
-               ins_typebuf(":!~remove <Wimp$Scrap>\r", REMAP_NONE, 0, TRUE, FALSE);
-
-           /* Insert {:sp ,:confirm e }[+f\ <leaf> ]<file><CR> */
-           ins_typebuf("\r", REMAP_NONE, 0, TRUE, FALSE);
-           ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
-           ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
-
-           if (scrap)
-           {
-               /* Loading via !Scrap - change pathname to stored leafname */
-               ins_typebuf(leaf_name, REMAP_NONE, 0, TRUE, FALSE);
-               ins_typebuf(" +f\\ ", REMAP_NONE, 0, TRUE, FALSE);
-               leaf_ref = 0;
-               vim_free(leaf_name);
-               leaf_name = NULL;
-           }
-
-           swi(OS_Byte, 121, 0x81);        /* Is Ctrl pressed? */
-           if (r1 == 0xff)
-               /* Yes, split window */
-               ins_typebuf(":sp", REMAP_NONE, 0, TRUE, FALSE);
-           else
-               ins_typebuf(":confirm e", REMAP_NONE, 0, TRUE, FALSE);
-           break;
-
-       default:
-           swi(Wimp_ReportError, "\0\0\0\0You can only load text in normal mode.", 5, "Vim");
-    }
-    /* Send DataSaveAck so other program doesn't think we died
-     * and delete <Wimp$Scrap>.
-     */
-    block[3] = block[2];
-    block[4] = 4;
-    swi(Wimp_SendMessage, 17, block, block[1]);
-}
-
-    void
-ro_datasave(block)
-    int            *block;
-{
-    char_u *path = ((char_u *) block) + 44;
-
-    /* Preserve the name given so we can use it, not <Wimp$Scrap> */
-    if (leaf_name)
-       vim_free(leaf_name);
-    leaf_name = vim_strsave(path);
-
-    block[9] = -1;         /* File is unsafe. */
-    strcpy(path, "<Wimp$Scrap>");
-    block[0] = 60;
-    block[3] = block[2];
-    block[4] = 2;
-    swi(Wimp_SendMessage, 17, block, block[1]);
-
-    leaf_ref = block[2];
-}
-
-    void
-ro_message(block)
-    int *block;
-{
-    char_u     *buffer;
-    long_u     len;
-
-    if (block[1] == task_handle)
-       return;                     /* Don't talk to ourself! */
-    switch (block[4])
-    {
-       case 0:         /* Quit. */
-           if (block[4] == 0)
-               ro_quit();
-           break;
-       case 1: /* DataSave */
-           ro_datasave(block);
-           break;
-       case 2:         /* DataSaveAck. */
-           if (clip_convert_selection(&buffer, &len, &clip_star) == -1)
-               return;
-
-           /* Save the clipboard contents to a file. */
-           swi(OS_File, 10, ((char_u *) block) + 44, 0xfff, 0, buffer, buffer + len);
-
-           /* Ack with DataLoad message. */
-           block[3] = block[2];
-           block[4] = 3;
-           block[9] = len;
-           swi(Wimp_SendMessage, 17, block, block[1]);
-
-           vim_free(buffer);
-           break;
-       case 3:         /* DataLoad */
-           ro_dataload(block);
-           break;
-       case 8:         /* PreQuit */
-           ro_prequit(block);
-           break;
-       case 0xf:       /* Lose clipboard. */
-           if (block[5] & 4)
-           {
-               clip_free_selection(&clip_star);
-               clip_star.owned = FALSE;
-           }
-           break;
-       case 0x10:      /* DataRequest (clip_star) */
-           if (clip_star.owned)
-           {
-               int rows;
-
-               /* Tell other program that we have the clipboard. */
-               block[0] = 52;
-               block[3] = block[2];        /* Copy myref to yourref. */
-               block[4] = 1;               /* DataSave message. */
-               /* Create an estimate for the size (larger or same as true
-                * value) */
-               rows = clip_star.end.lnum - clip_star.start.lnum;
-               if (rows < 0)
-                   rows = -rows;
-               block[9] = (rows + 1) * Columns + 1; /* Add one for possible
-                                                       final newline. */
-               block[10] = 0xfff;          /* Clipboard is text. */
-               strcpy( ((char_u *) block) + 44, "VimClip");
-               swi(Wimp_SendMessage, 17, block, block[1]);
-           }
-           break;
-       case 0x400c1:   /* Mode change */
-           changed_mode = TRUE;                /* Flag - update on next OpenWindow */
-           if (zap_redraw)
-           {
-               /* JK230798, re-initialise ZapRedraw stuff */
-               if (ro_zap_redraw_initialise() == FAIL)
-                   zap_redraw = FALSE;
-           }
-           break;
-       case 0x400c3:   /* TaskCloseDown */
-           if (block[1] == child_handle)
-               child_handle = 0;
-           break;
-    }
-}
-
-/*
- * Converts a scrollbar's window handle into a scrollbar pointer.
- * NULL on failure.
- */
-    scrollbar_T *
-ro_find_sbar(id)
-    int                id;
-{
-    win_T      *wp;
-
-    if (gui.bottom_sbar.id == id)
-       return &gui.bottom_sbar;
-    FOR_ALL_WINDOWS(wp)
-    {
-       if (wp->w_scrollbars[SBAR_LEFT].id == id)
-           return &wp->w_scrollbars[SBAR_LEFT];
-       if (wp->w_scrollbars[SBAR_RIGHT].id == id)
-           return &wp->w_scrollbars[SBAR_RIGHT];
-    }
-    return NULL;
-}
-
-    void
-scroll_to(line, sb)
-    int sb;    /* Scrollbar number */
-    int line;
-{
-    char_u code[8];
-
-    /* Don't put events in the input queue now. */
-    if (hold_gui_events)
-       return;
-
-    /* Send a scroll event:
-     *
-     * A scrollbar event is CSI (NOT K_SPECIAL), KS_VER_SCROLLBAR,
-     * KE_FILLER followed by:
-     * one byte representing the scrollbar number, and then four bytes
-     * representing a long_u which is the new value of the scrollbar.
-     */
-    code[0] = CSI;
-    code[1] = KS_VER_SCROLLBAR;
-    code[2] = KE_FILLER;
-    code[3] = sb;
-    code[4] = line >> 24;
-    code[5] = line >> 16;
-    code[6] = line >> 8;
-    code[7] = line;
-    add_to_input_buf(code, 8);
-}
-
-    void
-h_scroll_to(col)
-    int col;
-{
-    char_u code[8];
-
-    /* Don't put events in the input queue now. */
-    if (hold_gui_events)
-       return;
-
-    /* Send a scroll event:
-     *
-     * A scrollbar event is CSI (NOT K_SPECIAL)
-     *
-     * A horizontal scrollbar event is K_SPECIAL, KS_HOR_SCROLLBAR,
-     * KE_FILLER followed by four bytes representing a long_u which is the
-     * new value of the scrollbar.
-     */
-    code[0] = CSI;
-    code[1] = KS_HOR_SCROLLBAR;
-    code[2] = KE_FILLER;
-    code[4] = col >> 24;
-    code[5] = col >> 16;
-    code[6] = col >> 8;
-    code[7] = col;
-    add_to_input_buf(code, 8);
-}
-
-    void
-ro_scroll(block)
-    int                *block;
-{
-    scrollbar_T        *sb;
-    int                offset;
-    win_T      *wp;
-
-    /* Block is ready for Wimp_OpenWindow, and also contains:
-     *
-     * +32 = scroll X direction (-2 .. +2)
-     * +36 = scroll Y direction (-2 .. +2)
-     */
-
-    sb = ro_find_sbar(block[0]);
-    if (!sb)
-       return;         /* Window not found (error). */
-
-    wp = sb-> wp;
-
-    if (wp == NULL)
-    {
-       /* Horizontal bar. */
-       offset = block[8];
-       if (offset == -2)
-           offset = (block[1] - block[3]) / gui.char_width;
-       else if (offset == 2)
-           offset = (block[3] - block[1]) / gui.char_width;
-
-       block[5] += offset * gui.char_width;
-
-       gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
-
-       swi(Wimp_OpenWindow, 0, block);
-    }
-    else
-    {
-       offset = -block[9];
-       if (offset == -2)
-           offset = -(wp -> w_height - 1);
-       else if (offset == 2)
-           offset = wp -> w_height - 1;
-
-       /* Possibly we should reposition the scrollbar?
-        * Vim seems to update the bar anyway...
-        */
-       gui_drag_scrollbar(sb, offset - (block[6] / gui.char_height), FALSE);
-    }
-}
-
-/* Move a window by a given offset. Used to simulate the function of the
- * nested wimp.
- */
-    void
-ro_move_child(window, x, y, pos_wanted, pos_got)
-    int        window;
-    int x,y;           /* offset to move by */
-    int        pos_wanted, pos_got;
-{
-    int        block[10];
-
-    block[0] = window;
-    swi(Wimp_GetWindowState, 0, block);
-    block[1] += x;
-    block[2] += y;
-    block[3] += x;
-    block[4] += y;
-    if (pos_wanted == -1)
-       block[7] = -1;
-    else if (pos_wanted == -2)
-       block[7] = pos_got;
-    swi(Wimp_OpenWindow, 0, block);
-}
-
-/* Open the main window. Also updates scrollbars if we are not
- * using the nested Wimp.
- * If we have just changed mode then re-read all values.
- */
-    void
-ro_open_main(block)
-    int            *block;
-{
-    int            toggle_size;
-
-    /* Find out if the user clicked on the toggle size icon. */
-    block[20] = block[0];
-    swi(Wimp_GetWindowState, 0, block + 20);
-    toggle_size = block[28] & (1 << 19);
-
-    if (nested_wimp)
-    {
-       swi(Wimp_OpenWindow, 0, block);
-    }
-    else
-    {
-       int     old[10];
-       int     x_offset, y_offset;         /* Move children same as parent. */
-       int     pos_wanted, pos_got;
-       int     left_bar  = gui.which_scrollbars[SBAR_LEFT];
-       int     right_bar = gui.which_scrollbars[SBAR_RIGHT];
-       win_T   *wp;
-
-       /* Three cases to think about:
-        * 1) Move to top. Open each window at the top.
-        * 2) Same stack position. Open each with same position.
-        * 3) Open at bottom. Open children with parent's new position.
-        */
-
-       old[0] = block[0];
-       swi(Wimp_GetWindowState, 0, old);
-       pos_wanted = block[7];
-       swi(Wimp_OpenWindow, 0, block);
-       /* Block updated by OpenWindow? I don't think so! */
-       swi(Wimp_GetWindowState, 0, block);
-       pos_got = block[7];
-
-       x_offset = block[1] - old[1];
-       y_offset = block[4] - old[4];
-       if (x_offset || y_offset || pos_wanted == -1 || pos_wanted == -2)
-       {
-           /* If parent has moved, re-open all the child windows. */
-           FOR_ALL_WINDOWS(wp)
-           {
-               /* Reopen scrollbars for this window. */
-               if (left_bar)
-                   ro_move_child(wp -> w_scrollbars[SBAR_LEFT].id,
-                               x_offset, y_offset,
-                               pos_wanted, pos_got);
-               if (right_bar)
-                   ro_move_child(wp -> w_scrollbars[SBAR_RIGHT].id,
-                               x_offset, y_offset,
-                               pos_wanted, pos_got);
-           }
-       }
-    }
-    if (changed_mode || toggle_size)
-    {
-       int     width, height;
-
-       if (changed_mode)
-           ro_measure_tools();
-       block[0] = gui.window_handle;
-       swi(Wimp_GetWindowState, 0, block);
-
-       width = block[3] - block[1];
-       height = block[4] - block[2];
-       swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
-       gui_resize_shell(width, height);
-       changed_mode = FALSE;
-    }
-}
-
-    void
-ro_open_window(block)
-    int                *block;
-{
-    int                pos;
-    scrollbar_T *sb;
-
-    if (block[0] == gui.window_handle)
-       ro_open_main(block);
-    else
-    {
-       swi(Wimp_OpenWindow, 0, block);
-       if (block[0] != gui.window_handle)
-       {
-           sb = ro_find_sbar(block[0]);
-           if (sb)
-           {
-               if (sb-> wp != NULL)
-                   gui_drag_scrollbar(sb, -block[6] / gui.char_height, FALSE);
-               else
-                   gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
-           }
-       }
-    }
-}
-
-    void
-ro_menu_selection(block)
-    int                *block;
-{
-    int                *item = wimp_menu + 7;
-    vimmenu_T  *menu;
-    /* wimp_menu points to a wimp menu structure */
-
-    for (;;)
-    {
-       while (block[0]--)
-           item += 6;
-       if (block[1] == -1)
-           break;
-       item = ((int *) item[1]) + 7;
-       block++;
-    }
-    /* item points to the wimp menu item structure chosen */
-    menu = (vimmenu_T *) item[5];
-
-    swi(Wimp_GetPointerInfo, 0, block);
-    if (block[2] == 1)
-       /* Adjust used - keep menu open */
-       swi(Wimp_CreateMenu, 0, wimp_menu);
-
-    if (menu-> cb)
-       menu-> cb(menu);
-}
-
-    void
-ro_open_parent()
-{
-    int head;
-    char_u *i = curbuf-> b_ffname;
-    char_u  buffer[256];
-
-    head = 0;
-    for (; *i; i++)
-    {
-       if (*i == '.')
-           head = i - curbuf-> b_ffname;
-    }
-
-    /* Append head chars to buffer */
-    if (head < 240 && curbuf-> b_ffname && head)
-    {
-       strcpy(buffer, "%filer_opendir ");
-       strncpy(buffer + 15, curbuf-> b_ffname, head);
-       buffer[15 + head] = '\0';
-       swi(OS_CLI, buffer);
-    }
-}
-
-    void
-process_event(event, block)
-    int event;
-    int *block;
-{
-    switch (event)
-    {
-       case 0:         /* Nothing - update drag state. */
-           if (ro_dragging)
-               ro_continue_drag(block);
-           break;
-       case 1:         /* Redraw window. */
-           redraw_window(block);
-           break;
-       case 2:         /* Open window. */
-           ro_open_window(block);
-           break;
-       case 3:         /* Close window. */
-           swi(Wimp_GetPointerInfo, 0, block + 1);
-           if (block[3] == 1)
-               ro_open_parent();
-           else
-               if (ro_ok_to_quit())
-                   ro_quit();
-           break;
-       case 6:         /* Mouse click. */
-           ro_mouse(block);
-           break;
-       case 7:         /* Finished drag. */
-           ro_drag_finished(block);
-           break;
-       case 8:         /* Key pressed. */
-           ro_insert_key((char_u *) &block[6]);
-           break;
-       case 9:
-           ro_menu_selection(block);
-           break;
-       case 10:        /* Scroll request. */
-           ro_scroll(block);
-           break;
-       case 11:        /* Lose caret. */
-           if (block[0] == gui.window_handle)
-               gui_focus_change(FALSE);
-           break;
-       case 12:        /* Gain caret. */
-           if (block[0] == gui.window_handle)
-               gui_focus_change(TRUE);
-           break;
-       case 17:        /* User message. */
-       case 18:        /* User message recorded. */
-           ro_message(block);
-           break;
-    }
-}
-
-/*
- * GUI input routine called by gui_wait_for_chars().  Waits for a character
- * from the keyboard.
- *  wtime == -1            Wait forever.
- *  wtime == 0     This should never happen.
- *  wtime > 0      Wait wtime milliseconds for a character.
- * Returns OK if a character was found to be available within the given time,
- * or FAIL otherwise.
- */
-    int
-gui_mch_wait_for_chars(long wtime)
-{
-    int block[64];
-    int        reason;
-    int start_time = -1;
-    int ctime = wtime / 10;    /* delay in cs */
-
-    if (wtime != -1)
-    {
-       swi(OS_ReadMonotonicTime);
-       start_time = r0;
-    }
-
-    for (;;)
-    {
-       if (ro_dragging)
-           reason = wimp_poll(0, block);       /* Always return immediately */
-       else if (wtime == -1)
-           reason = wimp_poll(1, block);
-       else
-           reason = wimp_pollidle(0, block, start_time + ctime);
-
-       process_event(reason, block);
-
-       if (input_available() || ro_return_early)
-       {
-           ro_return_early = FALSE;
-           return OK;      /* There is something to process (key / menu event) */
-       }
-
-       if (wtime != -1)
-       {
-           swi(OS_ReadMonotonicTime);
-           if (r0 - start_time > ctime)
-               return FAIL;    /* We've been waiting too long - return failure */
-       }
-    }
-}
-
-/* Flush any output to the screen */
-    void
-gui_mch_flush(void)
-{
-}
-
-/*
- * Clear a rectangular region of the screen from text pos(row1, col1) to
- * (row2, col2) inclusive.
- */
-    void
-gui_mch_clear_block(int row1, int col1, int row2, int col2)
-{
-    swi(ColourTrans_ReturnGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
-    plot_rectangle(96 + 5, r0,
-                       FILL_X(col1), -FILL_Y(row2 + 1),
-                       FILL_X(col2 + 1), -FILL_Y(row1));
-}
-
-    void
-gui_mch_clear_all(void)
-{
-    if (redraw_block)
-    {
-       swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
-       swi(OS_WriteI + 16);
-    }
-    else
-    {
-       int block[44];
-       block[0] = gui.window_handle;
-       block[1] = 0;
-       block[2] = -gui.num_rows * gui.char_height;
-       block[3] = gui.num_cols * gui.char_width;
-       block[4] = 0;
-       swi(Wimp_UpdateWindow, 0, block);
-       while (r0)
-       {
-           swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
-           swi(OS_WriteI + 16);
-           swi(Wimp_GetRectangle, 0, block);
-       }
-    }
-}
-
-/*
- * Delete the given number of lines from the given row, scrolling up any
- * text further down within the scroll region.
- */
-    void
-gui_mch_delete_lines(int row, int num_lines)
-{
-    int top_from = -row - num_lines;
-    int bot_from = -gui.scroll_region_bot - 1;
-    int bot_to   = bot_from + num_lines;
-
-    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
-
-    /* Changed without checking! */
-    swi(Wimp_BlockCopy, gui.window_handle,
-                           gui.scroll_region_left * gui.char_width,
-                           bot_from * gui.char_height,
-                           (gui.scroll_region_right - gui.scroll_region_left
-                                                       + 1) * gui.char_width,
-                           top_from * gui.char_height,
-
-                           gui.scroll_region_left * gui.char_width,
-                           bot_to * gui.char_height);
-
-    gui_clear_block(gui.scroll_region_bot - num_lines + 1,
-                                                      gui.scroll_region_left,
-       gui.scroll_region_bot, gui.scroll_region_right);
-}
-
-/*
- * Insert the given number of lines before the given row, scrolling down any
- * following text within the scroll region.
- */
-    void
-gui_mch_insert_lines(int row, int num_lines)
-{
-    int top_from = -row;
-    int bot_to   = -gui.scroll_region_bot - 1;
-    int bot_from = bot_to + num_lines;
-
-    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
-
-    swi(Wimp_BlockCopy, gui.window_handle,
-                           gui.scroll_region_left * gui.char_width,
-                           bot_from * gui.char_height,
-                           (gui.scroll_region_right - gui.scroll_region_left
-                                                       + 1) * gui.char_width,
-                           top_from * gui.char_height,
-
-                           gui.scroll_region_left * gui.char_width,
-                           bot_to * gui.char_height);
-
-    gui_clear_block(row, gui.scroll_region_left,
-                               row + num_lines - 1, gui.scroll_region_right);
-}
-
-/* Put selection in clipboard buffer.
- * Should we become the new owner?
- */
-    void
-clip_mch_request_selection(VimClipboard *cbd)
-{
-    int                block[64];      /* Will be used in Wimp_Poll. */
-    int                reason;
-    char_u     *buffer;
-    long_u     length;
-
-    block[0] = 48;                     /* Size of block. */
-    block[3] = 0;                      /* Orinial message. */
-    block[4] = 0x10;                   /* Data request. */
-    block[5] = gui.window_handle;
-    block[6] = RO_LOAD_CLIPBOARD;      /* Internal handle. */
-    block[7] = block[8] = 0;           /* (x,y) not used. */
-    block[9] = 4;
-    block[10] = 0xfff;     /* We want text files if possible, I think. */
-    block[11] = -1;        /* End of list. */
-    swi(Wimp_SendMessage, 17, block, 0);    /* Broadcast request. */
-
-    /* OK, we've sent the request. Poll until we get a null poll (failure) or
-     * we load the clipboard.
-     * If we receive a DataSave event with icon handle = -2 then put it on the
-     * clipboard. RISC OS should ensure that key events will not be delivered
-     * until the clipboard operation completes (unless the owner starts idling
-     * - we can't wait forever!).
-     */
-    for (;;)
-    {
-       reason = wimp_poll(0, block);
-       if (reason == 0)
-           return;         /* Failed to get clipboard. */
-       if ((reason == 17 || reason == 18) &&
-               block[4] == 1 && block[6] == RO_LOAD_CLIPBOARD)
-           break;          /* Got it - stop waiting. */
-       process_event(reason, block);
-       if (ro_return_early)
-           return;
-    }
-    /* Tell owner to save data in <Wimp$Scrap>. */
-    block[0] = 60;
-    block[3] = block[2];   /* Copy myref -> yourref */
-    block[4] = 2;          /* DataSaveAck. */
-    block[9] = -1;         /* Data is unsafe. */
-    strcpy( ((char_u *) block) + 44, "<Wimp$Scrap>");
-    swi(Wimp_SendMessage, 17, block, block[1]);
-
-    /* Wait again for reply. */
-    for (;;)
-    {
-       reason = wimp_poll(0, block);
-       if (reason == 0)
-           return;     /* Other program has given up! */
-       if ((reason == 17 || reason == 18) && block[4] == 3 && block[6] == RO_LOAD_CLIPBOARD)
-           break;      /* Clipboard data saved to <Wimp$Scrap> */
-       process_event(reason, block);
-       if (ro_return_early)
-           return;
-    }
-
-    /* <Wimp$Scrap> contains clipboard - load it. */
-    if (xswi(OS_File, 17, "<Wimp$Scrap>") & v_flag)
-       return;         /* Error! */
-    if (r0 != 1 && r0 != 3)
-       return;
-    length = r4;
-
-    buffer = lalloc(length, TRUE);  /* Claim memory (and report errors). */
-    if (buffer == NULL)
-       return;
-
-    if (xswi(OS_File, 16, "<Wimp$Scrap>", buffer, 0) & v_flag)
-       return;
-
-    clip_yank_selection(MCHAR, buffer, length, cbd);
-
-    vim_free(buffer);
-
-    swi(OS_FSControl, 27, "<Wimp$Scrap>", 0, 0);    /* Delete temp file. */
-
-    block[4] = 4;                  /* Send DataLoadAck. */
-    block[3] = block[2];           /* Copy myref -> yourref. */
-    swi(Wimp_SendMessage, 17, block, block[1]);
-}
-
-/* Not sure what this means under RISC OS. */
-    void
-clip_mch_lose_selection(VimClipboard *cbd)
-{
-}
-
-/* Tell everyone that we now own the clipboard.
- * Return OK if our claim is accepted (always, under RISC OS)
- */
-    int
-clip_mch_own_selection(VimClipboard *cbd)
-{
-    int block[6];
-    block[0] = 24;     /* Length of block.  */
-    block[3] = 0;      /* Original message. */
-    block[4] = 0xf;    /* ClaimEntity. */
-    block[5] = 0x4;    /* Claim clipboard only. */
-    swi(Wimp_SendMessage, 17, block, 0);
-    return OK;
-}
-
-/*
- * Send the current selection to the clipboard.  Do nothing for X because we
- * will fill in the selection only when requested by another app. Sounds good
- * for RISC OS too.
- */
-    void
-clip_mch_set_selection(VimClipboard *cbd)
-{
-    clip_get_selection(cbd);
-}
-
-/*
- * Make a menu either grey or not grey.
- */
-    void
-gui_mch_menu_grey(vimmenu_T *menu, int grey)
-{
-    menu-> greyed_out = grey;
-}
-
-/*
- * Make menu item hidden or not hidden
- */
-    void
-gui_mch_menu_hidden(vimmenu_T *menu, int hidden)
-{
-    menu-> hidden = hidden;
-}
-
-/*
- * This is called after setting all the menus to grey/hidden or not.
- */
-    void
-gui_mch_draw_menubar(void)
-{
-    swi(Wimp_CreateMenu, 0, -1);
-    if (wimp_menu != (int *) -1)
-    {
-       ro_remove_menu(wimp_menu);
-       wimp_menu = (int *) -1;
-    }
-}
-
-/* Add or remove a scrollbar. Note that this is only called when
- * the scrollbar state is changing.
- * The scroll bar window has already been created.
- * We can't do anything except remove the scroll bar
- * until we know what size to use.
- */
-    void
-gui_mch_enable_scrollbar(sb, flag)
-    scrollbar_T        *sb;
-    int                flag;
-{
-    if (!flag)
-       swi(Wimp_CloseWindow, 0, & (sb->id) );
-    return;
-}
-
-    void
-gui_mch_set_blinking(long waittime, long on, long off)
-{
-}
-
-/*
- * Stop the cursor blinking.  Show the cursor if it wasn't shown.
- */
-    void
-gui_mch_stop_blink(void)
-{
-}
-
-/*
- * Start the cursor blinking.  If it was already blinking, this restarts the
- * waiting time and shows the cursor.
- */
-    void
-gui_mch_start_blink(void)
-{
-}
-
-/*
- * Return the RGB value of a pixel as a long.
- */
-    long_u
-gui_mch_get_rgb(guicolor_T pixel)
-{
-    return (long_u)pixel;
-}
-
-    void
-gui_mch_set_text_area_pos(int x, int y, int w, int h)
-{
-}
-
-    void
-gui_mch_enable_menu(int flag)
-{
-}
-
-    void
-gui_mch_set_menu_pos(int x, int y, int w, int h)
-{
-}
-
-    void
-gui_mch_add_menu(vimmenu_T *menu, int idx)
-{
-}
-
-    void
-gui_mch_add_menu_item(vimmenu_T *menu, int idx)
-{
-}
-
-    void
-gui_mch_new_menu_colors(void)
-{
-}
-
-    void
-gui_mch_destroy_menu(vimmenu_T *menu)
-{
-}
-
-/* Size of buffer has changed.
- * Add one to max since gui.c subtracts one more than it should!
- */
-    void
-gui_mch_set_scrollbar_thumb(sb, val, size, max)
-    scrollbar_T        *sb;
-    long       val;
-    long       size;
-    long       max;
-{
-    int                block[10], width, height;
-
-    width = (max + 1) * gui.char_width;
-    height = (max + 1 + W_STATUS_HEIGHT(sb->wp)) * gui.char_height;
-
-    block[0] = block[3] = 0;
-    block[1] = -height + (1 << y_eigen_factor);
-    block[2] = width;
-
-    swi(Wimp_SetExtent, sb -> id, block);
-
-    block[0] = sb -> id;
-    swi(Wimp_GetWindowState, 0, block);
-    block[5] = val * gui.char_width;
-    block[6] = -val * gui.char_height;
-    swi(Wimp_OpenWindow, 0, block, 0x4b534154,
-                       gui.window_handle,      /* Parent window handle. */
-                       (CHILD_FIX_TO_RIGHT  << CHILD_LEFT  )   |
-                       (CHILD_FIX_TO_RIGHT  << CHILD_RIGHT )   |
-                       (CHILD_FIX_TO_BOTTOM << CHILD_TOP   )   |
-                       (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM)   |
-                       (CHILD_SELF_SCROLL   << CHILD_SCROLL_X) |
-                       (CHILD_SELF_SCROLL   << CHILD_SCROLL_Y)
-                       );
-}
-
-/* Set the position of the scrollbar within the editor
- * window. Note that, for vertical scrollbars, x and w
- * are ignored. For horizontal bars y and h are ignored.
- */
-    void
-gui_mch_set_scrollbar_pos(sb, x, y, w, h)
-    scrollbar_T *sb;
-    int                x;              /* Horizontal sb position */
-    int                y;              /* Top of scroll bar */
-    int                w;              /* Width */
-    int                h;              /* Height */
-{
-    int                block[24];
-    int                px1, py1;       /* Parent window min coords */
-    int                px2, py2;       /* Parent window max coords */
-
-    /* Find where the parent window is. */
-    block[0] = gui.window_handle;
-    swi(Wimp_GetWindowState, 0, block);
-    px1 = block[1];
-    py1 = block[2];
-    px2 = block[3];
-    py2 = block[4];
-
-    block[0] = sb -> id;
-
-    /* Find out how big the scroll window is at the moment. */
-    swi(Wimp_GetWindowInfo, 0, ((char_u *)block) + 1);
-
-    if (block[13] < w || block[12] > -h)
-    {
-       /* Current window is too small! */
-       if (block[12] > -h)
-           block[12] = -h;
-       if (block[13] < w)
-           block[13] = w;
-       swi(Wimp_SetExtent, block[0], block + 11);
-    }
-
-    /* This works better on the nested_wimp. */
-    if (sb-> wp)
-    {
-       /* This is a vertical scrollbar. */
-       block[1] = block[3] = px2 - gui.scrollbar_width + (1 << x_eigen_factor);
-       block[2] = 1 + py2 - (y + h) + (1 << y_eigen_factor);
-       block[4] = 1 + py2 - y;
-    }
-    else
-    {
-       /* This is a horizontal scrollbar. */
-       block[2] = block[4] = py1 + gui.scrollbar_height;
-       block[1] = px1;
-       block[3] = px2 - gui.scrollbar_width;
-    }
-
-    block[5] = 0;
-    block[6] = 0;
-    block[7] = -1;
-
-    swi(Wimp_OpenWindow, 0, block, 0x4b534154,
-           gui.window_handle,  /* Parent window handle. */
-           (CHILD_FIX_TO_RIGHT  << CHILD_LEFT  )   |
-           (CHILD_FIX_TO_RIGHT  << CHILD_RIGHT )   |
-           (CHILD_FIX_TO_BOTTOM << CHILD_TOP   )   |
-           (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM)   |
-           (CHILD_SELF_SCROLL   << CHILD_SCROLL_X) |
-           (CHILD_SELF_SCROLL   << CHILD_SCROLL_Y)
-       );
-}
-
-/* Create a window with no workarea to place inside editor window.
- * (what happens without the nested wimp?)
- * Data for scrollbar is invalid.
- */
-    void
-gui_mch_create_scrollbar(sb, orient)
-    scrollbar_T *sb;
-    int                orient; /* orient is SBAR_HORIZ or SBAR_VERT */
-{
-    int bar[] =
-       {
-           0,   0,             /* Visible area : min X,Y */
-           100, 100,           /*                max X,Y */
-           0,   0,             /* Scroll offsets */
-           -1,                 /* Window in front */
-           0x80800150 | (orient == SBAR_HORIZ ? (1 << 30) : (1 << 28)),
-           0xff070207,         /* Colours */
-           0x000c0103,         /* More colours */
-           0, -0x4000,         /* Workarea extent */
-           0x4000, 0,          /* max X,Y */
-           0x00000000,         /* No title */
-           0 << 12,            /* No workarea button type */
-           1,                  /* Wimp sprite area */
-           0x00010001,         /* Minimum width, height */
-           0, 0, 0,            /* Title data (none) */
-           0                   /* No icons */
-       };
-    swi(Wimp_CreateWindow, 0, bar);
-    sb -> id = r0;
-}
-
-#if defined(FEAT_WINDOWS) || defined(PROTO)
-    void
-gui_mch_destroy_scrollbar(scrollbar_T *sb)
-{
-    swi(Wimp_DeleteWindow, 0, & (sb->id));
-    sb -> id = -1;
-}
-#endif
-
-    void
-gui_mch_set_scrollbar_colors(scrollbar_T *sb)
-{
-    /* Always use default RO colour scheme. */
-}
-
-/*
- * Get current mouse coordinates in text window.
- * Note: (0,0) is the bottom left corner, positive y is UP.
- */
-    void
-gui_mch_getmouse(x, y)
-    int *x;
-    int *y;
-{
-    int left;
-    int top;
-    int block[10];
-
-    block[0] = gui.window_handle;
-    swi(Wimp_GetWindowState, 0, block);
-    left = block[1];
-    top = block[4];
-
-    swi(Wimp_GetPointerInfo, 0, block);
-    *x = block[0] - left;
-    *y = top - block[1];
-}
-
-/* MouseTo(x, y) */
-    void
-gui_mch_setmouse(x, y)
-    int                x;
-    int                y;
-{
-}
-
-    void
-gui_mch_toggle_tearoffs(enable)
-    int                enable;
-{
-    /* no tearoff menus */
-}
-
-/* Redraw a window's title.
- * For the nested wimp we use the new 'redraw-title-bar' reason code.
- * For older wimps we mark the area of the screen where the title bar
- * is as invalid.
- */
-    void
-ro_redraw_title(window)
-    int window;
-{
-    if (nested_wimp)
-    {
-       swi(Wimp_ForceRedraw, window, 0x4b534154, 3);
-    }
-    else
-    {
-       int block[10];
-       int miny;
-
-       block[0] = window;
-       swi(Wimp_GetWindowState, 0, block);
-       miny = block[4];
-       swi(Wimp_GetWindowOutline, 0, block);
-       swi(Wimp_ForceRedraw, -1,
-                       block[1], miny,
-                       block[3], block[4]);
-    }
-}
-
-/* Turn a vimmenu_T structure into a wimp menu structure.
- * -1 if resulting menu is empty.
- * Only the children and dname items in the root menu are used.
- */
-    int *
-ro_build_menu(menu)
-    vimmenu_T  *menu;
-{
-    int                *wimp_menu;
-    int                width = 4;
-    int                w;
-    int                size = 28;
-    vimmenu_T  *item;
-    int                *wimp_item;
-
-    /* Find out how big the menu is so we can allocate memory for it */
-    for (item = menu-> children; item; item = item-> next)
-    {
-       if (item-> hidden == FALSE && !menu_is_separator(item->name))
-           size += 24;
-    }
-
-    if (size <= 28)
-       return (int *) -1;              /* No children - shouldn't happen */
-
-    wimp_menu = (int *) alloc(size);
-
-    wimp_menu[0] = (int) menu-> dname;
-    wimp_menu[1] = -1;
-    wimp_menu[2] = 0;
-    wimp_menu[3] = 0x00070207;
-    wimp_menu[5] = 44;
-    wimp_menu[6] = 0;
-
-    wimp_item = wimp_menu + 7;
-
-    for (item = menu-> children; item; item = item-> next)
-    {
-       if (menu_is_separator(item-> name))
-       {
-           /* This menu entry is actually a separator. If it is not the first
-            * menu entry then mark the previous menu item as needing a dotted
-            * line after it.
-            */
-           if (wimp_item > wimp_menu + 7)
-               wimp_item[-6] |= 0x2;
-       }
-       else if (item-> hidden == FALSE)
-       {
-           wimp_item[0] = 0;
-           wimp_item[1] = item-> children ? (int) ro_build_menu(item) : -1;
-           wimp_item[2] = 0x07009131 | (item-> greyed_out << 22);
-           wimp_item[3] = (int) item-> dname;
-           wimp_item[4] = -1;
-           wimp_item[5] = (int) item;  /* Stuff the menu address in this unused space */
-
-           w = strlen(item-> dname) + 1;
-           if (w > width)
-               width = w;
-           wimp_item += 6;
-       }
-    }
-
-    wimp_menu[4] = (width + 2) * 16;
-    wimp_menu[7]  |= 0x100;        /* Menu title is indirected */
-    wimp_item[-6] |= 0x080;        /* Last entry in menu */
-    return wimp_menu;
-}
-
-    static void
-ro_remove_menu(menu)
-    int            *menu;
-{
-    int            *item = menu + 7;
-
-    if (menu == NULL || menu == (int *) -1)
-       return;
-
-    for (;;)
-    {
-       if (item[1] != -1)
-           ro_remove_menu((int *) item[1]);    /* Remove sub-menu */
-       if (item[0] & 0x80)
-           break;                      /* This was the last entry */
-       item += 6;
-    }
-    vim_free(menu);
-}
-
-    void
-gui_mch_show_popupmenu(menu)
-    vimmenu_T  *menu;
-{
-    int                block[10];
-
-    /* Remove the existing menu, if any */
-    if (wimp_menu != (int *) -1)
-    {
-       swi(Wimp_CreateMenu, 0, -1);
-       ro_remove_menu(wimp_menu);
-       wimp_menu = (int *) -1;
-    }
-
-    wimp_menu = ro_build_menu(menu);
-    if (wimp_menu != (int *) -1)
-    {
-       swi(Wimp_GetPointerInfo, 0, block);
-       swi(Wimp_CreateMenu, 0, wimp_menu, block[0] - 64, block[1] + 64);
-    }
-}
-
-/* Run a command using the TaskWindow module.
- * If SHELL_FILTER is set then output is not echoed to the screen,
- * If it is not set, then \r is not sent to the output file.
- */
-    int
-gui_mch_call_shell(cmd, options)
-    char_u  *cmd;
-    int            options;    /* SHELL_FILTER if called by do_filter() */
-                       /* SHELL_COOKED if term needs cooked mode */
-{
-    char_u  task_cmd[256];     /* Contains *TaskWindow command. */
-    int            block[64];
-    int            reason;
-    char_u  *out;
-    char_u  c;
-    int            old_msg_col;
-    char_u  *out_redir;
-    int            length;
-    FILE    *out_file = NULL;
-
-    out_redir = strstr(cmd, " > ");
-    if (out_redir == NULL)
-       length = strlen(cmd);   /* No redirection. */
-    else
-    {
-       length = out_redir - cmd;
-       out_file = fopen(out_redir + 3, "wb");
-       if (out_file == NULL)
-           smsg("WARNING : Can't open file %s for writing\n", out_redir + 3);
-    }
-
-    if (length > 180)
-    {
-       if (out_file)
-           fclose(out_file);
-       return FAIL;            /* Command too long. */
-    }
-
-    strcpy(task_cmd, "TaskWindow \"");
-    strncpy(task_cmd + 12, cmd, length);
-    sprintf(task_cmd + 12 + length,
-           "\" -task &%08x -ctrl -quit -name \"Vim command\"",
-           task_handle);
-
-    if (options & SHELL_COOKED)
-       settmode(TMODE_COOK);
-
-    if (xswi(Wimp_StartTask, task_cmd) & v_flag)
-    {
-       /* Failed to even start a new task (out of memory?) */
-       settmode(TMODE_RAW);
-       if (out_file)
-           fclose(out_file);
-       return FAIL;
-    }
-
-    /* Wait for the child process to initialise. */
-    child_handle = 0;
-    while (!child_handle)
-    {
-       reason = wimp_poll(0, block);
-       if ((reason == 17 || reason == 18) && block[4] == 0x808c2)
-           child_handle = block[1];
-       else
-           process_event(reason, block);
-    }
-
-    /* Block until finished */
-    while (child_handle)
-    {
-       reason = wimp_poll(1, block);
-       if (reason == 3 || (reason == 8 && block[6] == 3))
-       {
-           /* Close window request or CTRL-C - kill child task. */
-           block[0] = 20;
-           block[3] = 0;
-           block[4] = 0x808c4;     /* Morite */
-           swi(Wimp_SendMessage, 17, block, child_handle);
-           MSG_PUTS(_("\nSending message to terminate child process.\n"));
-           continue;
-       }
-       else if (reason == 8)
-       {
-           block[0] = 28;
-           block[3] = 0;
-           block[4] = 0x808c0;     /* Input */
-           block[5] = 1;
-           /* Block[6] is OK as it is! */
-           swi(Wimp_SendMessage, 17, block, child_handle);
-           continue;
-       }
-       else if (reason == 17 || reason == 18)
-       {
-           if (block[4] == 0x808c1)
-           {
-               /* Ack message. */
-               block[3] = block[2];
-               swi(Wimp_SendMessage, 19, block, block[1]);
-               out = (char_u *)block + 24;
-               old_msg_col = msg_col;
-               while (block[5]--)
-               {
-                   c = *out++;
-                   if (out_file && (c != '\r' || (options & SHELL_FILTER)))
-                       fputc(c, out_file);
-                   if ((options & SHELL_FILTER) == 0)
-                   {
-                       if (c == 127)
-                           msg_puts("\b \b");
-                       else if (c > 31)
-                           msg_putchar(c);
-                       else if (c == 10)
-                       {
-                           lines_left = 8;     /* Don't do More prompt! */
-                           msg_putchar(10);
-                       }
-                   }
-               }
-               /* Flush output to the screen. */
-               windgoto(msg_row, msg_col);
-               out_flush();
-               continue;
-           }
-       }
-       process_event(reason, block);
-    }
-    msg_putchar('\n');
-    settmode(TMODE_RAW);
-    if (out_file)
-       fclose(out_file);
-    return OK;
-}
-
-/* Like strsave(), but stops at any control char */
-    char_u *
-wimp_strsave(str)
-    char    *str;
-{
-    int            strlen = 0;
-    char_u  *retval;
-    while (str[strlen] > 31)
-       strlen++;
-    retval = alloc(strlen + 1);
-    if (retval)
-    {
-       memcpy(retval, str, strlen);
-       retval[strlen] = '\0';
-    }
-    return retval;
-}
-
-/* If we are saving then pop up a standard RISC OS save box.
- * Otherwise, open a directory viewer on the given directory (and return NULL)
- * The string we return will be freed later.
- */
-    char_u *
-gui_mch_browse(saving, title, dflt, ext, initdir, filter)
-    int                saving;         /* write action */
-    char_u     *title;         /* title for the window */
-    char_u     *dflt;          /* default file name */
-    char_u     *ext;           /* extension added */
-    char_u     *initdir;       /* initial directory, NULL for current dir */
-    char_u     *filter;        /* file name filter */
-{
-    char command[256];
-    int length;
-
-    if (saving)
-    {
-       int     block[64];
-       int     reason;
-       int     done_save = FALSE;
-       char_u  *retval = NULL;
-       char_u  *sprname;
-       char_u  *fname;
-       int     dragging_icon = FALSE;
-       int     filetype;
-
-       if (!dflt)
-           dflt = "TextFile";
-
-       block[0] = save_window;
-       block[1] = 0;
-       swi(Wimp_GetIconState, 0, block);
-       sprname = ((char_u *) block[7]);
-       block[1] = 1;
-       swi(Wimp_GetIconState, 0, block);
-       fname = ((char *) block[7]);
-       strncpy(fname, dflt, 255);
-
-       if (xswi(OS_FSControl, 31, curbuf->b_p_oft) & v_flag)
-       {
-           filetype = 0xfff;
-           strcpy(sprname + 5, "xxx");
-       }
-       else
-       {
-           filetype = r2;
-           sprintf(sprname + 5, "%03x", filetype);
-       }
-
-       /* Open the save box */
-
-       swi(Wimp_GetPointerInfo, 0, block);
-       swi(Wimp_CreateMenu, 0, save_window, block[0] - 64, block[1] + 64);
-       swi(Wimp_SetCaretPosition, save_window, 1, 0, 0, -1, -1);
-
-       while (!done_save)
-       {
-           reason = wimp_poll(1, block);
-           switch (reason)
-           {
-               case 1:
-                   redraw_window(block);
-                   break;
-               case 2:
-                   if (block[0] == save_window)
-                       swi(Wimp_OpenWindow, 0, block);
-                   else
-                       ro_open_window(block);
-                   break;
-               case 3:
-                   done_save = TRUE;
-                   break;
-               case 6:
-                   if (block[3] != save_window)
-                       done_save = TRUE;
-                   else
-                   {
-                       int drag_box[4];
-                       int min_x, max_y;
-
-                       switch (block[4])
-                       {
-                           case    0: /* Start drag */
-                               block[0] = save_window;
-                               swi(Wimp_GetWindowState, 0, block);
-                               min_x = block[1];
-                               max_y = block[4];
-                               block[1] = 0;
-                               swi(Wimp_GetIconState, 0, block);
-                               drag_box[0] = block[2] + min_x;
-                               drag_box[1] = block[3] + max_y;
-                               drag_box[2] = block[4] + min_x;
-                               drag_box[3] = block[5] + max_y;
-
-                               swi(DragASprite_Start,
-                                       0x45,
-                                       1,
-                                       sprname,
-                                       drag_box);
-                               dragging_icon = TRUE;
-                               break;
-                           case    2: /* OK */
-                               retval = wimp_strsave(fname);
-                               done_save = TRUE;
-                               break;
-                           case    3: /* Cancel */
-                               done_save = TRUE;
-                               break;
-                       }
-                   }
-                   break;
-               case 7:
-                   if (dragging_icon)
-                   {
-                       int len = 0;
-
-                       dragging_icon = FALSE;
-                       swi(Wimp_GetPointerInfo, 0, block);
-                       block[5] = block[3];
-                       block[6] = block[4];
-                       block[7] = block[0];
-                       block[8] = block[1];
-                       block[9] = 0;           /* Don't know the size */
-                       block[10] = filetype;
-
-                       while (fname[len] > 31)
-                       {
-                           if (fname[len] == '.')
-                           {
-                               fname += len + 1;
-                               len = 0;
-                           }
-                           else
-                               len++;
-                       }
-                       if (len > 211)
-                           len = 211;
-
-                       memcpy(((char_u *) block) + 44, fname, len);
-                       ((char_u *)block)[44 + len] = '\0';
-
-                       block[0] = (len + 48) & 0xfc;
-                       block[3] = 0;
-                       block[4] = 1;       /* DataSave */
-
-                       swi(Wimp_SendMessage, 17, block, block[5], block[6]);
-                   }
-                   else
-                       ro_drag_finished(block);
-                   break;
-               case 8:
-                   if (block[6] == 13)
-                   {
-                       retval = wimp_strsave(fname);
-                       done_save = TRUE;
-                   }
-                   else if (block[6] == 0x1b)
-                       done_save = TRUE;
-                   else
-                       swi(Wimp_ProcessKey, block[6]);
-                   break;
-               case 17:
-               case 18:
-                   if (block[4] == 2 && block[9] != -1)
-                   {
-                       /* DataSaveAck from dragging icon. */
-                       retval = wimp_strsave(((char_u *) block) + 44);
-                       done_save = TRUE;
-                   }
-                   else if (block[4] == 0x400c9)
-                   {
-                       /* MenusDeleted */
-                       done_save = TRUE;
-                   }
-                   else
-                       ro_message(block);
-                   break;
-           }
-       }
-       block[0] = save_window;
-       swi(Wimp_CloseWindow, 0, block);
-       swi(Wimp_GetCaretPosition, 0, block);
-       if (block[0] == -1)
-           swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
-
-       return retval;
-    }
-    else if (initdir)
-    {
-       /* Open a directory viewer */
-       length = strlen(initdir);
-
-       if (length > 240)
-           return NULL;        /* Path too long! */
-
-       length = sprintf(command, "Filer_OpenDir %s", initdir);
-       while (command[length - 1] == '.')
-           length--;
-       command[length] = '\0';
-       swi(OS_CLI, command);
-    }
-    return NULL;
-}
diff --git a/src/gui_riscos.h b/src/gui_riscos.h
deleted file mode 100644 (file)
index fe22e6a..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4:
- *
- * VIM - Vi IMproved   by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- */
-
-#define FEAT_BROWSE
-
-#define TASK 0x4b534154
-
-/* Nested wimp flags: */
-#define CHILD_FIX_TO_WORKAREA  0
-#define CHILD_FIX_TO_LEFT      1
-#define CHILD_FIX_TO_BOTTOM    1
-#define CHILD_FIX_TO_RIGHT     2
-#define CHILD_FIX_TO_TOP       2
-
-#define CHILD_SELF_SCROLL      0
-#define CHILD_PARENT_SCROLL    1
-
-#define CHILD_LEFT             16
-#define CHILD_BOTTOM           18
-#define CHILD_RIGHT            20
-#define CHILD_TOP              22
-#define CHILD_SCROLL_X         24
-#define CHILD_SCROLL_Y         26
-
-int wimp_poll(int mask, int *block);
-int wimp_poll_idle(int mask, int *block, int end_time);
-void ro_open_main(int *block);
index 6866784..b8d1e0e 100644 (file)
  *
  */
 
+/* Win16 doesn't use the "W" methods. */
+#define pDispatchMessage DispatchMessage
+#define pGetMessage GetMessage
+#define pIsDialogMessage IsDialogMessage
+#define pPeekMessage PeekMessage
+
 /*
  * Include the common stuff for MS-Windows GUI.
  */
@@ -505,7 +511,7 @@ gui_mch_set_shellsize(int width, int height,
     workarea_rect.right = GetSystemMetrics(SM_CXSCREEN);
     workarea_rect.bottom = GetSystemMetrics(SM_CYFULLSCREEN);
 
-    /* get current posision of our window */
+    /* get current position of our window */
     wndpl.length = sizeof(WINDOWPLACEMENT);
     GetWindowPlacement(s_hwnd, &wndpl);
     if (wndpl.showCmd == SW_SHOWNORMAL)
@@ -1098,7 +1104,8 @@ gui_mch_dialog(
     char_u     *message,
     char_u     *buttons,
     int                 dfltbutton,
-    char_u     *textfield)
+    char_u     *textfield,
+    int                ex_cmd)
 {
     FARPROC    dp;
     LPWORD     p, pnumitems;
@@ -1154,7 +1161,7 @@ gui_mch_dialog(
        return -1;
 
     /*
-     * make a copy of 'buttons' to fiddle with it.  complier grizzles because
+     * make a copy of 'buttons' to fiddle with it.  compiler grizzles because
      * vim_strsave() doesn't take a const arg (why not?), so cast away the
      * const.
      */
@@ -1514,7 +1521,12 @@ get_dialog_font_metrics(void)
 
 
 #if defined(FEAT_TOOLBAR) || defined(PROTO)
-#include "gui_w3~1.h"
+
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include "gui_w3~1.h"
+#endif
+
 /*
  * Create the toolbar, initially unpopulated.
  *  (just like the menu, there are no defaults, it's all
index 3a54e81..2d57fbb 100644 (file)
@@ -198,11 +198,17 @@ static BalloonEval  *cur_beval = NULL;
 static UINT_PTR            BevalTimerId = 0;
 static DWORD       LastActivity = 0;
 
+
+/* cproto fails on missing include files */
+#ifndef PROTO
+
 /*
  * excerpts from headers since this may not be presented
  * in the extremely old compilers
  */
-#include <pshpack1.h>
+# include <pshpack1.h>
+
+#endif
 
 typedef struct _DllVersionInfo
 {
@@ -213,7 +219,9 @@ typedef struct _DllVersionInfo
     DWORD dwPlatformID;
 } DLLVERSIONINFO;
 
-#include <poppack.h>
+#ifndef PROTO
+# include <poppack.h>
+#endif
 
 typedef struct tagTOOLINFOA_NEW
 {
@@ -289,13 +297,13 @@ typedef struct tagNMTTDISPINFOW {
 
 #ifdef FEAT_MENU
 static UINT    s_menu_id = 100;
+#endif
 
 /*
  * Use the system font for dialogs and tear-off menus.  Remove this line to
  * use DLG_FONT_NAME.
  */
-# define USE_SYSMENU_FONT
-#endif
+#define USE_SYSMENU_FONT
 
 #define VIM_NAME       "vim"
 #define VIM_CLASS      "Vim"
@@ -336,11 +344,13 @@ static UINT msh_msgmousewheel = 0;
 static int     s_usenewlook;       /* emulate W95/NT4 non-bold dialogs */
 #ifdef FEAT_TOOLBAR
 static void initialise_toolbar(void);
+static LRESULT CALLBACK toolbar_wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 static int get_toolbar_bitmap(vimmenu_T *menu);
 #endif
 
 #ifdef FEAT_GUI_TABLINE
 static void initialise_tabline(void);
+static LRESULT CALLBACK tabline_wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 #endif
 
 #ifdef FEAT_MBYTE_IME
@@ -798,7 +808,7 @@ _WndProc(
                if (pt.y < rect.top)
                {
                    show_tabline_popup_menu();
-                   return 0;
+                   return 0L;
                }
            }
            return MyWindowProc(hwnd, uMsg, wParam, lParam);
@@ -828,7 +838,10 @@ _WndProc(
 
     case WM_ENDSESSION:
        if (wParam)     /* system only really goes down when wParam is TRUE */
+       {
            _OnEndSession();
+           return 0L;
+       }
        break;
 
     case WM_CHAR:
@@ -866,7 +879,7 @@ _WndProc(
         * are received, mouse pointer remains hidden. */
        return MyWindowProc(hwnd, uMsg, wParam, lParam);
 #else
-       return 0;
+       return 0L;
 #endif
 
     case WM_SIZING:    /* HANDLE_MSG doesn't seem to handle this one */
@@ -874,7 +887,7 @@ _WndProc(
 
     case WM_MOUSEWHEEL:
        _OnMouseWheel(hwnd, HIWORD(wParam));
-       break;
+       return 0L;
 
        /* Notification for change in SystemParametersInfo() */
     case WM_SETTINGCHANGE:
@@ -987,13 +1000,19 @@ _WndProc(
            case TCN_SELCHANGE:
                if (gui_mch_showing_tabline()
                                  && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
+               {
                    send_tabline_event(TabCtrl_GetCurSel(s_tabhwnd) + 1);
+                   return 0L;
+               }
                break;
 
            case NM_RCLICK:
                if (gui_mch_showing_tabline()
                        && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
+               {
                    show_tabline_popup_menu();
+                   return 0L;
+               }
                break;
 # endif
            default:
@@ -1037,6 +1056,7 @@ _WndProc(
                out_flush();
                did_menu_tip = TRUE;
            }
+           return 0L;
        }
        break;
 #endif
@@ -1079,18 +1099,19 @@ _WndProc(
     case WM_IME_NOTIFY:
        if (!_OnImeNotify(hwnd, (DWORD)wParam, (DWORD)lParam))
            return MyWindowProc(hwnd, uMsg, wParam, lParam);
-       break;
+       return 1L;
+
     case WM_IME_COMPOSITION:
        if (!_OnImeComposition(hwnd, wParam, lParam))
            return MyWindowProc(hwnd, uMsg, wParam, lParam);
-       break;
+       return 1L;
 #endif
 
     default:
        if (uMsg == msh_msgmousewheel && msh_msgmousewheel != 0)
        {   /* handle MSH_MOUSEWHEEL messages for Intellimouse */
            _OnMouseWheel(hwnd, HIWORD(wParam));
-           break;
+           return 0L;
        }
 #ifdef MSWIN_FIND_REPLACE
        else if (uMsg == s_findrep_msg && s_findrep_msg != 0)
@@ -1101,7 +1122,7 @@ _WndProc(
        return MyWindowProc(hwnd, uMsg, wParam, lParam);
     }
 
-    return 1;
+    return DefWindowProc(hwnd, uMsg, wParam, lParam);
 }
 
 /*
@@ -1239,7 +1260,7 @@ gui_mch_prepare(int *argc, char **argv)
 
 #ifdef FEAT_NETBEANS_INTG
     {
-       /* stolen from gui_x11.x */
+       /* stolen from gui_x11.c */
        int arg;
 
        for (arg = 1; arg < *argc; arg++)
@@ -1260,7 +1281,7 @@ gui_mch_prepare(int *argc, char **argv)
 
     /* try and load the user32.dll library and get the entry points for
      * multi-monitor-support. */
-    if ((user32_lib = LoadLibrary("User32.dll")) != NULL)
+    if ((user32_lib = vimLoadLib("User32.dll")) != NULL)
     {
        pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib,
                                                         "MonitorFromWindow");
@@ -1270,6 +1291,25 @@ gui_mch_prepare(int *argc, char **argv)
        pGetMonitorInfo = (TGetMonitorInfo)GetProcAddress(user32_lib,
                                                          "GetMonitorInfoA");
     }
+
+#ifdef FEAT_MBYTE
+    /* If the OS is Windows NT, use wide functions;
+     * this enables common dialogs input unicode from IME. */
+    if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
+    {
+       pDispatchMessage = DispatchMessageW;
+       pGetMessage = GetMessageW;
+       pIsDialogMessage = IsDialogMessageW;
+       pPeekMessage = PeekMessageW;
+    }
+    else
+    {
+       pDispatchMessage = DispatchMessageA;
+       pGetMessage = GetMessageA;
+       pIsDialogMessage = IsDialogMessageA;
+       pPeekMessage = PeekMessageA;
+    }
+#endif
 }
 
 /*
@@ -1379,7 +1419,8 @@ gui_mch_init(void)
            s_hwnd = CreateWindowEx(
                WS_EX_MDICHILD,
                szVimWndClass, "Vim MSWindows GUI",
-               WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS | 0xC000,
+               WS_OVERLAPPEDWINDOW | WS_CHILD
+                                | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 0xC000,
                gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
                gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
                100,                            /* Any value will do */
@@ -1410,7 +1451,8 @@ gui_mch_init(void)
         * titlebar, it will be reparented below. */
        s_hwnd = CreateWindow(
                szVimWndClass, "Vim MSWindows GUI",
-               win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP,
+               (win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP)
+                                         | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
                gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
                gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
                100,                            /* Any value will do */
@@ -1573,6 +1615,15 @@ gui_mch_init(void)
 # endif
 #endif
 
+#ifdef FEAT_EVAL
+# ifndef HandleToLong
+/* HandleToLong() only exists in compilers that can do 64 bit builds */
+#  define HandleToLong(h) ((long)(h))
+# endif
+    /* set the v:windowid variable */
+    set_vim_var_nr(VV_WINDOWID, HandleToLong(s_hwnd));
+#endif
+
 theend:
     /* Display any pending error messages */
     display_errors();
@@ -1620,16 +1671,14 @@ gui_mch_set_shellsize(int width, int height,
 {
     RECT       workarea_rect;
     int                win_width, win_height;
-    int                win_xpos, win_ypos;
     WINDOWPLACEMENT wndpl;
-    int                workarea_left;
 
     /* Try to keep window completely on screen. */
     /* Get position of the screen work area.  This is the part that is not
      * used by the taskbar or appbars. */
     get_work_area(&workarea_rect);
 
-    /* Get current posision of our window.  Note that the .left and .top are
+    /* Get current position of our window.  Note that the .left and .top are
      * relative to the work area.  */
     wndpl.length = sizeof(WINDOWPLACEMENT);
     GetWindowPlacement(s_hwnd, &wndpl);
@@ -1644,48 +1693,43 @@ gui_mch_set_shellsize(int width, int height,
        GetWindowPlacement(s_hwnd, &wndpl);
     }
 
-    win_xpos = wndpl.rcNormalPosition.left;
-    win_ypos = wndpl.rcNormalPosition.top;
-
     /* compute the size of the outside of the window */
-    win_width = width + GetSystemMetrics(SM_CXFRAME) * 2;
-    win_height = height + GetSystemMetrics(SM_CYFRAME) * 2
+    win_width = width + (GetSystemMetrics(SM_CXFRAME) +
+                         GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
+    win_height = height + (GetSystemMetrics(SM_CYFRAME) +
+                           GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
                        + GetSystemMetrics(SM_CYCAPTION)
 #ifdef FEAT_MENU
                        + gui_mswin_get_menu_height(FALSE)
 #endif
                        ;
 
-    /* There is an inconsistency when using two monitors and Vim is on the
-     * second (right) one: win_xpos will be the offset from the workarea of
-     * the left monitor.  While with one monitor it's the offset from the
-     * workarea (including a possible taskbar on the left).  Detect the second
-     * monitor by checking for the left offset to be quite big. */
-    if (workarea_rect.left > 300)
-       workarea_left = 0;
-    else
-       workarea_left = workarea_rect.left;
+    /* The following should take care of keeping Vim on the same monitor, no
+     * matter if the secondary monitor is left or right of the primary
+     * monitor. */
+    wndpl.rcNormalPosition.right = wndpl.rcNormalPosition.left + win_width;
+    wndpl.rcNormalPosition.bottom = wndpl.rcNormalPosition.top + win_height;
 
-    /* If the window is going off the screen, move it on to the screen.
-     * win_xpos and win_ypos are relative to the workarea. */
+    /* If the window is going off the screen, move it on to the screen. */
     if ((direction & RESIZE_HOR)
-           && workarea_left + win_xpos + win_width > workarea_rect.right)
-       win_xpos = workarea_rect.right - win_width - workarea_left;
+           && wndpl.rcNormalPosition.right > workarea_rect.right)
+       OffsetRect(&wndpl.rcNormalPosition,
+               workarea_rect.right - wndpl.rcNormalPosition.right, 0);
 
-    if ((direction & RESIZE_HOR) && win_xpos < 0)
-       win_xpos = 0;
+    if ((direction & RESIZE_HOR)
+           && wndpl.rcNormalPosition.left < workarea_rect.left)
+       OffsetRect(&wndpl.rcNormalPosition,
+               workarea_rect.left - wndpl.rcNormalPosition.left, 0);
 
     if ((direction & RESIZE_VERT)
-         && workarea_rect.top + win_ypos + win_height > workarea_rect.bottom)
-       win_ypos = workarea_rect.bottom - win_height - workarea_rect.top;
+           && wndpl.rcNormalPosition.bottom > workarea_rect.bottom)
+       OffsetRect(&wndpl.rcNormalPosition,
+               0, workarea_rect.bottom - wndpl.rcNormalPosition.bottom);
 
-    if ((direction & RESIZE_VERT) && win_ypos < 0)
-       win_ypos = 0;
-
-    wndpl.rcNormalPosition.left = win_xpos;
-    wndpl.rcNormalPosition.right = win_xpos + win_width;
-    wndpl.rcNormalPosition.top = win_ypos;
-    wndpl.rcNormalPosition.bottom = win_ypos + win_height;
+    if ((direction & RESIZE_VERT)
+           && wndpl.rcNormalPosition.top < workarea_rect.top)
+       OffsetRect(&wndpl.rcNormalPosition,
+               0, workarea_rect.top - wndpl.rcNormalPosition.top);
 
     /* set window position - we should use SetWindowPlacement rather than
      * SetWindowPos as the MSDN docs say the coord systems returned by
@@ -2504,13 +2548,15 @@ gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
     get_work_area(&workarea_rect);
 
     *screen_w = workarea_rect.right - workarea_rect.left
-               - GetSystemMetrics(SM_CXFRAME) * 2;
+               - (GetSystemMetrics(SM_CXFRAME) +
+                   GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
 
     /* FIXME: dirty trick: Because the gui_get_base_height() doesn't include
      * the menubar for MSwin, we subtract it from the screen height, so that
      * the window size can be made to fit on the screen. */
     *screen_h = workarea_rect.bottom - workarea_rect.top
-               - GetSystemMetrics(SM_CYFRAME) * 2
+               - (GetSystemMetrics(SM_CYFRAME) +
+                   GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
                - GetSystemMetrics(SM_CYCAPTION)
 #ifdef FEAT_MENU
                - gui_mswin_get_menu_height(FALSE)
@@ -3000,7 +3046,8 @@ gui_mch_dialog(
     char_u     *message,
     char_u     *buttons,
     int                 dfltbutton,
-    char_u     *textfield)
+    char_u     *textfield,
+    int                ex_cmd)
 {
     WORD       *p, *pdlgtemplate, *pnumitems;
     DWORD      *dwp;
@@ -3059,7 +3106,7 @@ gui_mch_dialog(
        return -1;
 
     /*
-     * make a copy of 'buttons' to fiddle with it.  complier grizzles because
+     * make a copy of 'buttons' to fiddle with it.  compiler grizzles because
      * vim_strsave() doesn't take a const arg (why not?), so cast away the
      * const.
      */
@@ -3132,19 +3179,23 @@ gui_mch_dialog(
        maxDialogWidth = workarea_rect.right - workarea_rect.left - 100;
        if (maxDialogWidth > 600)
            maxDialogWidth = 600;
-       maxDialogHeight = workarea_rect.bottom - workarea_rect.top - 100;
+       /* Leave some room for the taskbar. */
+       maxDialogHeight = workarea_rect.bottom - workarea_rect.top - 150;
     }
     else
     {
        /* Use our own window for the size, unless it's very small. */
        GetWindowRect(s_hwnd, &rect);
        maxDialogWidth = rect.right - rect.left
-                                          - GetSystemMetrics(SM_CXFRAME) * 2;
+                                  - (GetSystemMetrics(SM_CXFRAME) +
+                                      GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
        if (maxDialogWidth < DLG_MIN_MAX_WIDTH)
            maxDialogWidth = DLG_MIN_MAX_WIDTH;
 
        maxDialogHeight = rect.bottom - rect.top
-                                          - GetSystemMetrics(SM_CXFRAME) * 2;
+                                  - (GetSystemMetrics(SM_CYFRAME) +
+                                      GetSystemMetrics(SM_CXPADDEDBORDER)) * 4
+                                  - GetSystemMetrics(SM_CYCAPTION);
        if (maxDialogHeight < DLG_MIN_MAX_HEIGHT)
            maxDialogHeight = DLG_MIN_MAX_HEIGHT;
     }
@@ -3175,7 +3226,7 @@ gui_mch_dialog(
            if (l == 1 && vim_iswhite(*pend)
                                        && textWidth > maxDialogWidth * 3 / 4)
                last_white = pend;
-           textWidth += GetTextWidth(hdc, pend, l);
+           textWidth += GetTextWidthEnc(hdc, pend, l);
            if (textWidth >= maxDialogWidth)
            {
                /* Line will wrap. */
@@ -3211,16 +3262,9 @@ gui_mch_dialog(
 
     messageWidth += 10;                /* roundoff space */
 
-    /* Restrict the size to a maximum.  Causes a scrollbar to show up. */
-    if (msgheight > maxDialogHeight)
-    {
-       msgheight = maxDialogHeight;
-       scroll_flag = WS_VSCROLL;
-       messageWidth += GetSystemMetrics(SM_CXVSCROLL);
-    }
-
     /* Add width of icon to dlgwidth, and some space */
-    dlgwidth = messageWidth + DLG_ICON_WIDTH + 3 * dlgPaddingX;
+    dlgwidth = messageWidth + DLG_ICON_WIDTH + 3 * dlgPaddingX
+                                            + GetSystemMetrics(SM_CXVSCROLL);
 
     if (msgheight < DLG_ICON_HEIGHT)
        msgheight = DLG_ICON_HEIGHT;
@@ -3241,7 +3285,7 @@ gui_mch_dialog(
            pend = vim_strchr(pstart, DLG_BUTTON_SEP);
            if (pend == NULL)
                pend = pstart + STRLEN(pstart); // Last button name.
-           textWidth = GetTextWidth(hdc, pstart, (int)(pend - pstart));
+           textWidth = GetTextWidthEnc(hdc, pstart, (int)(pend - pstart));
            if (textWidth < minButtonWidth)
                textWidth = minButtonWidth;
            textWidth += dlgPaddingX;       /* Padding within button */
@@ -3266,7 +3310,7 @@ gui_mch_dialog(
            pend = vim_strchr(pstart, DLG_BUTTON_SEP);
            if (pend == NULL)
                pend = pstart + STRLEN(pstart); // Last button name.
-           textWidth = GetTextWidth(hdc, pstart, (int)(pend - pstart));
+           textWidth = GetTextWidthEnc(hdc, pstart, (int)(pend - pstart));
            textWidth += dlgPaddingX;           /* Padding within button */
            textWidth += DLG_VERT_PADDING_X * 2; /* Padding around button */
            if (textWidth > dlgwidth)
@@ -3294,8 +3338,8 @@ gui_mch_dialog(
 
     // Dialog height.
     if (vertical)
-       dlgheight = msgheight + 2 * dlgPaddingY +
-                             DLG_VERT_PADDING_Y + 2 * fontHeight * numButtons;
+       dlgheight = msgheight + 2 * dlgPaddingY
+                          + DLG_VERT_PADDING_Y + 2 * fontHeight * numButtons;
     else
        dlgheight = msgheight + 3 * dlgPaddingY + 2 * fontHeight;
 
@@ -3304,6 +3348,16 @@ gui_mch_dialog(
     if (textfield != NULL)
        dlgheight += editboxheight;
 
+    /* Restrict the size to a maximum.  Causes a scrollbar to show up. */
+    if (dlgheight > maxDialogHeight)
+    {
+        msgheight = msgheight - (dlgheight - maxDialogHeight);
+        dlgheight = maxDialogHeight;
+        scroll_flag = WS_VSCROLL;
+        /* Make sure scrollbar doesn't appear in the middle of the dialog */
+        messageWidth = dlgwidth - DLG_ICON_WIDTH - 3 * dlgPaddingX;
+    }
+
     add_word(PixelToDialogY(dlgheight));
 
     add_word(0);       // Menu
@@ -4086,10 +4140,22 @@ initialise_toolbar(void)
                    TOOLBAR_BUTTON_HEIGHT,
                    sizeof(TBBUTTON)
                    );
+    s_toolbar_wndproc = SubclassWindow(s_toolbarhwnd, toolbar_wndproc);
 
     gui_mch_show_toolbar(vim_strchr(p_go, GO_TOOLBAR) != NULL);
 }
 
+    static LRESULT CALLBACK
+toolbar_wndproc(
+    HWND hwnd,
+    UINT uMsg,
+    WPARAM wParam,
+    LPARAM lParam)
+{
+    HandleMouseHide(uMsg, lParam);
+    return CallWindowProc(s_toolbar_wndproc, hwnd, uMsg, wParam, lParam);
+}
+
     static int
 get_toolbar_bitmap(vimmenu_T *menu)
 {
@@ -4122,7 +4188,11 @@ get_toolbar_bitmap(vimmenu_T *menu)
         * didn't exist or wasn't specified, try the menu name
         */
        if (hbitmap == NULL
-               && (gui_find_bitmap(menu->name, fname, "bmp") == OK))
+               && (gui_find_bitmap(
+#ifdef FEAT_MULTI_LANG
+                           menu->en_dname != NULL ? menu->en_dname :
+#endif
+                                       menu->dname, fname, "bmp") == OK))
            hbitmap = LoadImage(
                    NULL,
                    fname,
@@ -4162,6 +4232,7 @@ initialise_tabline(void)
            WS_CHILD|TCS_FOCUSNEVER|TCS_TOOLTIPS,
            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
            CW_USEDEFAULT, s_hwnd, NULL, s_hinst, NULL);
+    s_tabline_wndproc = SubclassWindow(s_tabhwnd, tabline_wndproc);
 
     gui.tabline_height = TABLINE_HEIGHT;
 
@@ -4169,6 +4240,17 @@ initialise_tabline(void)
     set_tabline_font();
 # endif
 }
+
+    static LRESULT CALLBACK
+tabline_wndproc(
+    HWND hwnd,
+    UINT uMsg,
+    WPARAM wParam,
+    LPARAM lParam)
+{
+    HandleMouseHide(uMsg, lParam);
+    return CallWindowProc(s_tabline_wndproc, hwnd, uMsg, wParam, lParam);
+}
 #endif
 
 #if defined(FEAT_OLE) || defined(FEAT_EVAL) || defined(PROTO)
@@ -4188,7 +4270,7 @@ gui_mch_set_foreground(void)
     static void
 dyn_imm_load(void)
 {
-    hLibImm = LoadLibrary("imm32.dll");
+    hLibImm = vimLoadLib("imm32.dll");
     if (hLibImm == NULL)
        return;
 
@@ -4350,7 +4432,7 @@ gui_mch_register_sign(signfile)
     }
 
     sign.hImage = NULL;
-    ext = signfile + STRLEN(signfile) - 4; /* get extention */
+    ext = signfile + STRLEN(signfile) - 4; /* get extension */
     if (ext > signfile)
     {
        int do_load = 1;
index 80b75ff..345d4da 100644 (file)
 #ifdef DEBUG
 # include <tchar.h>
 #endif
+
+/* cproto fails on missing include files */
+#ifndef PROTO
+
 #ifndef __MINGW32__
 # include <shellapi.h>
 #endif
@@ -44,6 +48,8 @@
 # include "glbl_ime.h"
 #endif
 
+#endif /* PROTO */
+
 #ifdef FEAT_MENU
 # define MENUHINTS             /* show menu hints in command line */
 #endif
@@ -123,6 +129,7 @@ typedef void *HDC;
 typedef void VOID;
 typedef int LPNMHDR;
 typedef int LONG;
+typedef int WNDPROC;
 #endif
 
 #ifndef GET_X_LPARAM
@@ -171,10 +178,12 @@ static HBRUSH     s_brush = NULL;
 
 #ifdef FEAT_TOOLBAR
 static HWND            s_toolbarhwnd = NULL;
+static WNDPROC         s_toolbar_wndproc = NULL;
 #endif
 
 #ifdef FEAT_GUI_TABLINE
 static HWND            s_tabhwnd = NULL;
+static WNDPROC         s_tabline_wndproc = NULL;
 static int             showing_tabline = 0;
 #endif
 
@@ -317,10 +326,15 @@ static void TrackUserActivity __ARGS((UINT uMsg));
 
 /*
  * For control IME.
+ *
+ * These LOGFONT used for IME.
  */
 #ifdef FEAT_MBYTE
 # ifdef USE_IM_CONTROL
+/* holds LOGFONT for 'guifontwide' if available, otherwise 'guifont' */
 static LOGFONT norm_logfont;
+/* holds LOGFONT for 'guifont' always. */
+static LOGFONT sub_logfont;
 # endif
 #endif
 
@@ -328,6 +342,10 @@ static LOGFONT norm_logfont;
 static LRESULT _OnImeNotify(HWND hWnd, DWORD dwCommand, DWORD dwData);
 #endif
 
+#if defined(FEAT_MBYTE) && defined(WIN3264)
+static char_u *convert_filter(char_u *s);
+#endif
+
 #ifdef DEBUG_PRINT_ERROR
 /*
  * Print out the last Windows error message
@@ -390,7 +408,7 @@ _OnBlinkTimer(
     KillTimer(NULL, idEvent);
 
     /* Eat spurious WM_TIMER messages */
-    while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+    while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
        ;
 
     if (blink_state == BLINK_ON)
@@ -418,7 +436,7 @@ gui_mswin_rm_blink_timer(void)
     {
        KillTimer(NULL, blink_timer);
        /* Eat spurious WM_TIMER messages */
-       while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+       while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
            ;
        blink_timer = 0;
     }
@@ -476,7 +494,7 @@ _OnTimer(
     s_timed_out = TRUE;
 
     /* Eat spurious WM_TIMER messages */
-    while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+    while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
        ;
     if (idEvent == s_wait_timer)
        s_wait_timer = 0;
@@ -1207,7 +1225,7 @@ gui_mch_set_text_area_pos(int x, int y, int w, int h)
 
     /* When side scroll bar is unshown, the size of window will change.
      * then, the text area move left or right. thus client rect should be
-     * forcely redraw. (Yasuhiro Matsumoto) */
+     * forcedly redrawn. (Yasuhiro Matsumoto) */
     if (oldx != x || oldy != y)
     {
        InvalidateRect(s_hwnd, NULL, FALSE);
@@ -1411,12 +1429,12 @@ gui_mch_get_color(char_u *name)
     static guicolor_tTable table[] =
     {
        {"Black",               RGB(0x00, 0x00, 0x00)},
-       {"DarkGray",            RGB(0x80, 0x80, 0x80)},
-       {"DarkGrey",            RGB(0x80, 0x80, 0x80)},
+       {"DarkGray",            RGB(0xA9, 0xA9, 0xA9)},
+       {"DarkGrey",            RGB(0xA9, 0xA9, 0xA9)},
        {"Gray",                RGB(0xC0, 0xC0, 0xC0)},
        {"Grey",                RGB(0xC0, 0xC0, 0xC0)},
-       {"LightGray",           RGB(0xE0, 0xE0, 0xE0)},
-       {"LightGrey",           RGB(0xE0, 0xE0, 0xE0)},
+       {"LightGray",           RGB(0xD3, 0xD3, 0xD3)},
+       {"LightGrey",           RGB(0xD3, 0xD3, 0xD3)},
        {"Gray10",              RGB(0x1A, 0x1A, 0x1A)},
        {"Grey10",              RGB(0x1A, 0x1A, 0x1A)},
        {"Gray20",              RGB(0x33, 0x33, 0x33)},
@@ -1441,19 +1459,19 @@ gui_mch_get_color(char_u *name)
        {"LightRed",            RGB(0xFF, 0xA0, 0xA0)},
        {"DarkBlue",            RGB(0x00, 0x00, 0x80)},
        {"Blue",                RGB(0x00, 0x00, 0xFF)},
-       {"LightBlue",           RGB(0xA0, 0xA0, 0xFF)},
+       {"LightBlue",           RGB(0xAD, 0xD8, 0xE6)},
        {"DarkGreen",           RGB(0x00, 0x80, 0x00)},
        {"Green",               RGB(0x00, 0xFF, 0x00)},
-       {"LightGreen",          RGB(0xA0, 0xFF, 0xA0)},
+       {"LightGreen",          RGB(0x90, 0xEE, 0x90)},
        {"DarkCyan",            RGB(0x00, 0x80, 0x80)},
        {"Cyan",                RGB(0x00, 0xFF, 0xFF)},
-       {"LightCyan",           RGB(0xA0, 0xFF, 0xFF)},
+       {"LightCyan",           RGB(0xE0, 0xFF, 0xFF)},
        {"DarkMagenta",         RGB(0x80, 0x00, 0x80)},
        {"Magenta",             RGB(0xFF, 0x00, 0xFF)},
        {"LightMagenta",        RGB(0xFF, 0xA0, 0xFF)},
        {"Brown",               RGB(0x80, 0x40, 0x40)},
        {"Yellow",              RGB(0xFF, 0xFF, 0x00)},
-       {"LightYellow",         RGB(0xFF, 0xFF, 0xA0)},
+       {"LightYellow",         RGB(0xFF, 0xFF, 0xE0)},
        {"DarkYellow",          RGB(0xBB, 0xBB, 0x00)},
        {"SeaGreen",            RGB(0x2E, 0x8B, 0x57)},
        {"Orange",              RGB(0xFF, 0xA5, 0x00)},
@@ -1707,7 +1725,7 @@ process_message(void)
     static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
 #endif
 
-    GetMessage(&msg, NULL, 0, 0);
+    pGetMessage(&msg, NULL, 0, 0);
 
 #ifdef FEAT_OLE
     /* Look after OLE Automation commands */
@@ -1718,7 +1736,7 @@ process_message(void)
        {
            /* Message can't be ours, forward it.  Fixes problem with Ultramon
             * 3.0.4 */
-           DispatchMessage(&msg);
+           pDispatchMessage(&msg);
        }
        else
        {
@@ -1749,14 +1767,14 @@ process_message(void)
     if (msg.message == WM_USER)
     {
        MyTranslateMessage(&msg);
-       DispatchMessage(&msg);
+       pDispatchMessage(&msg);
        return;
     }
 #endif
 
 #ifdef MSWIN_FIND_REPLACE
     /* Don't process messages used by the dialog */
-    if (s_findrep_hwnd != NULL && IsDialogMessage(s_findrep_hwnd, &msg))
+    if (s_findrep_hwnd != NULL && pIsDialogMessage(s_findrep_hwnd, &msg))
     {
        HandleMouseHide(msg.message, msg.lParam);
        return;
@@ -1810,7 +1828,8 @@ process_message(void)
                 * mapped we want to use the mapping instead. */
                if (vk == VK_F10
                        && gui.menu_is_active
-                       && check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
+                       && check_map(k10, State, FALSE, TRUE, FALSE,
+                                                         NULL, NULL) == NULL)
                    break;
 #endif
                if (GetKeyState(VK_SHIFT) & 0x8000)
@@ -1924,9 +1943,10 @@ process_message(void)
     /* Check for <F10>: Default effect is to select the menu.  When <F10> is
      * mapped we need to stop it here to avoid strange effects (e.g., for the
      * key-up event) */
-    if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
+    if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
+                                                         NULL, NULL) == NULL)
 #endif
-       DispatchMessage(&msg);
+       pDispatchMessage(&msg);
 }
 
 /*
@@ -1941,7 +1961,7 @@ gui_mch_update(void)
     MSG            msg;
 
     if (!s_busy_processing)
-       while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
+       while (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
                                                  && !vim_is_input_buf_full())
            process_message();
 }
@@ -2017,7 +2037,7 @@ gui_mch_wait_for_chars(int wtime)
                KillTimer(NULL, s_wait_timer);
 
                /* Eat spurious WM_TIMER messages */
-               while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+               while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
                    ;
                s_wait_timer = 0;
            }
@@ -2440,7 +2460,7 @@ gui_mch_update_tabline(void)
     TCITEM     tie;
     int                nr = 0;
     int                curtabidx = 0;
-    RECT       rc;
+    int                tabadded = 0;
 #ifdef FEAT_MBYTE
     static int use_unicode = FALSE;
     int                uu;
@@ -2467,17 +2487,21 @@ gui_mch_update_tabline(void)
     tie.mask = TCIF_TEXT;
     tie.iImage = -1;
 
+    /* Disable redraw for tab updates to eliminate O(N^2) draws. */
+    SendMessage(s_tabhwnd, WM_SETREDRAW, (WPARAM)FALSE, 0);
+
     /* Add a label for each tab page.  They all contain the same text area. */
     for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, ++nr)
     {
        if (tp == curtab)
            curtabidx = nr;
 
-       if (!TabCtrl_GetItemRect(s_tabhwnd, nr, &rc))
+       if (nr >= TabCtrl_GetItemCount(s_tabhwnd))
        {
            /* Add the tab */
            tie.pszText = "-Empty-";
            TabCtrl_InsertItem(s_tabhwnd, nr, &tie);
+           tabadded = 1;
        }
 
        get_tabline_label(tp, FALSE);
@@ -2507,10 +2531,18 @@ gui_mch_update_tabline(void)
     }
 
     /* Remove any old labels. */
-    while (TabCtrl_GetItemRect(s_tabhwnd, nr, &rc))
+    while (nr < TabCtrl_GetItemCount(s_tabhwnd))
        TabCtrl_DeleteItem(s_tabhwnd, nr);
 
-    if (TabCtrl_GetCurSel(s_tabhwnd) != curtabidx)
+    if (!tabadded && TabCtrl_GetCurSel(s_tabhwnd) != curtabidx)
+       TabCtrl_SetCurSel(s_tabhwnd, curtabidx);
+
+    /* Re-enable redraw and redraw. */
+    SendMessage(s_tabhwnd, WM_SETREDRAW, (WPARAM)TRUE, 0);
+    RedrawWindow(s_tabhwnd, NULL, NULL,
+                   RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
+
+    if (tabadded && TabCtrl_GetCurSel(s_tabhwnd) != curtabidx)
        TabCtrl_SetCurSel(s_tabhwnd, curtabidx);
 }
 
@@ -2524,8 +2556,8 @@ gui_mch_set_curtab(nr)
     if (s_tabhwnd == NULL)
        return;
 
-    if (TabCtrl_GetCurSel(s_tabhwnd) != nr -1)
-       TabCtrl_SetCurSel(s_tabhwnd, nr -1);
+    if (TabCtrl_GetCurSel(s_tabhwnd) != nr - 1)
+       TabCtrl_SetCurSel(s_tabhwnd, nr - 1);
 }
 
 #endif
@@ -2883,9 +2915,11 @@ gui_mswin_get_valid_dimensions(
     int            base_width, base_height;
 
     base_width = gui_get_base_width()
-       + GetSystemMetrics(SM_CXFRAME) * 2;
+       + (GetSystemMetrics(SM_CXFRAME) +
+           GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
     base_height = gui_get_base_height()
-       + GetSystemMetrics(SM_CYFRAME) * 2
+       + (GetSystemMetrics(SM_CYFRAME) +
+           GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
        + GetSystemMetrics(SM_CYCAPTION)
 #ifdef FEAT_MENU
        + gui_mswin_get_menu_height(FALSE)
@@ -3071,6 +3105,74 @@ logfont2name(LOGFONT lf)
     return res;
 }
 
+
+#ifdef FEAT_MBYTE_IME
+/*
+ * Set correct LOGFONT to IME.  Use 'guifontwide' if available, otherwise use
+ * 'guifont'
+ */
+    static void
+update_im_font(void)
+{
+    LOGFONT    lf_wide;
+
+    if (p_guifontwide != NULL && *p_guifontwide != NUL
+           && gui.wide_font != NOFONT
+           && GetObject((HFONT)gui.wide_font, sizeof(lf_wide), &lf_wide))
+       norm_logfont = lf_wide;
+    else
+       norm_logfont = sub_logfont;
+    im_set_font(&norm_logfont);
+}
+#endif
+
+#ifdef FEAT_MBYTE
+/*
+ * Handler of gui.wide_font (p_guifontwide) changed notification.
+ */
+    void
+gui_mch_wide_font_changed()
+{
+# ifndef MSWIN16_FASTTEXT
+    LOGFONT lf;
+# endif
+
+# ifdef FEAT_MBYTE_IME
+    update_im_font();
+# endif
+
+# ifndef MSWIN16_FASTTEXT
+    gui_mch_free_font(gui.wide_ital_font);
+    gui.wide_ital_font = NOFONT;
+    gui_mch_free_font(gui.wide_bold_font);
+    gui.wide_bold_font = NOFONT;
+    gui_mch_free_font(gui.wide_boldital_font);
+    gui.wide_boldital_font = NOFONT;
+
+    if (gui.wide_font
+       && GetObject((HFONT)gui.wide_font, sizeof(lf), &lf))
+    {
+       if (!lf.lfItalic)
+       {
+           lf.lfItalic = TRUE;
+           gui.wide_ital_font = get_font_handle(&lf);
+           lf.lfItalic = FALSE;
+       }
+       if (lf.lfWeight < FW_BOLD)
+       {
+           lf.lfWeight = FW_BOLD;
+           gui.wide_bold_font = get_font_handle(&lf);
+           if (!lf.lfItalic)
+           {
+               lf.lfItalic = TRUE;
+               gui.wide_boldital_font = get_font_handle(&lf);
+           }
+       }
+    }
+# endif
+}
+#endif
+
 /*
  * Initialise vim to use the font with the given name.
  * Return FAIL if the font could not be loaded, OK otherwise.
@@ -3093,9 +3195,10 @@ gui_mch_init_font(char_u *font_name, int fontset)
        font_name = lf.lfFaceName;
 #if defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)
     norm_logfont = lf;
+    sub_logfont = lf;
 #endif
 #ifdef FEAT_MBYTE_IME
-    im_set_font(&lf);
+    update_im_font();
 #endif
     gui_mch_free_font(gui.norm_font);
     gui.norm_font = font;
@@ -3179,9 +3282,11 @@ gui_mch_newfont()
 
     GetWindowRect(s_hwnd, &rect);
     gui_resize_shell(rect.right - rect.left
-                       - GetSystemMetrics(SM_CXFRAME) * 2,
+                       - (GetSystemMetrics(SM_CXFRAME) +
+                           GetSystemMetrics(SM_CXPADDEDBORDER)) * 2,
                     rect.bottom - rect.top
-                       - GetSystemMetrics(SM_CYFRAME) * 2
+                       - (GetSystemMetrics(SM_CYFRAME) +
+                           GetSystemMetrics(SM_CXPADDEDBORDER)) * 2
                        - GetSystemMetrics(SM_CYCAPTION)
 #ifdef FEAT_MENU
                        - gui_mswin_get_menu_height(FALSE)
@@ -3206,27 +3311,27 @@ gui_mch_settitle(
  * misc2.c! */
 static LPCSTR mshape_idcs[] =
 {
-    MAKEINTRESOURCE(IDC_ARROW),                /* arrow */
-    MAKEINTRESOURCE(0),                        /* blank */
-    MAKEINTRESOURCE(IDC_IBEAM),                /* beam */
-    MAKEINTRESOURCE(IDC_SIZENS),       /* updown */
-    MAKEINTRESOURCE(IDC_SIZENS),       /* udsizing */
-    MAKEINTRESOURCE(IDC_SIZEWE),       /* leftright */
-    MAKEINTRESOURCE(IDC_SIZEWE),       /* lrsizing */
-    MAKEINTRESOURCE(IDC_WAIT),         /* busy */
+    IDC_ARROW,                 /* arrow */
+    MAKEINTRESOURCE(0),                /* blank */
+    IDC_IBEAM,                 /* beam */
+    IDC_SIZENS,                        /* updown */
+    IDC_SIZENS,                        /* udsizing */
+    IDC_SIZEWE,                        /* leftright */
+    IDC_SIZEWE,                        /* lrsizing */
+    IDC_WAIT,                  /* busy */
 #ifdef WIN3264
-    MAKEINTRESOURCE(IDC_NO),           /* no */
+    IDC_NO,                    /* no */
 #else
-    MAKEINTRESOURCE(IDC_ICON),         /* no */
-#endif
-    MAKEINTRESOURCE(IDC_ARROW),                /* crosshair */
-    MAKEINTRESOURCE(IDC_ARROW),                /* hand1 */
-    MAKEINTRESOURCE(IDC_ARROW),                /* hand2 */
-    MAKEINTRESOURCE(IDC_ARROW),                /* pencil */
-    MAKEINTRESOURCE(IDC_ARROW),                /* question */
-    MAKEINTRESOURCE(IDC_ARROW),                /* right-arrow */
-    MAKEINTRESOURCE(IDC_UPARROW),      /* up-arrow */
-    MAKEINTRESOURCE(IDC_ARROW)         /* last one */
+    IDC_ICON,                  /* no */
+#endif
+    IDC_ARROW,                 /* crosshair */
+    IDC_ARROW,                 /* hand1 */
+    IDC_ARROW,                 /* hand2 */
+    IDC_ARROW,                 /* pencil */
+    IDC_ARROW,                 /* question */
+    IDC_ARROW,                 /* right-arrow */
+    IDC_UPARROW,               /* up-arrow */
+    IDC_ARROW                  /* last one */
 };
 
     void
@@ -3239,7 +3344,7 @@ mch_set_mouse_shape(int shape)
     else
     {
        if (shape >= MSHAPE_NUMBERED)
-           idc = MAKEINTRESOURCE(IDC_ARROW);
+           idc = IDC_ARROW;
        else
            idc = mshape_idcs[shape];
 #ifdef SetClassLongPtr
@@ -3273,28 +3378,21 @@ mch_set_mouse_shape(int shape)
 
 # if defined(FEAT_MBYTE) && defined(WIN3264)
 /*
- * Wide version of convert_filter().  Keep in sync!
+ * Wide version of convert_filter().
  */
     static WCHAR *
 convert_filterW(char_u *s)
 {
-    WCHAR      *res;
-    unsigned   s_len = (unsigned)STRLEN(s);
-    unsigned   i;
+    char_u *tmp;
+    int len;
+    WCHAR *res;
 
-    res = (WCHAR *)alloc((s_len + 3) * sizeof(WCHAR));
-    if (res != NULL)
-    {
-       for (i = 0; i < s_len; ++i)
-           if (s[i] == '\t' || s[i] == '\n')
-               res[i] = '\0';
-           else
-               res[i] = s[i];
-       res[s_len] = NUL;
-       /* Add two extra NULs to make sure it's properly terminated. */
-       res[s_len + 1] = NUL;
-       res[s_len + 2] = NUL;
-    }
+    tmp = convert_filter(s);
+    if (tmp == NULL)
+       return NULL;
+    len = (int)STRLEN(s) + 3;
+    res = enc_to_utf16(tmp, &len);
+    vim_free(tmp);
     return res;
 }
 
index b61aae0..ed71b26 100644 (file)
@@ -1431,6 +1431,7 @@ gui_mch_init()
                p_window = h - 1;
            Rows = h;
        }
+       limit_screen_size();
        /*
         * Set the (x,y) position of the main window only if specified in the
         * users geometry, so we get good defaults when they don't. This needs
@@ -1502,14 +1503,13 @@ gui_mch_init()
     if (XGetIconSizes(XtDisplay(vimShell), root_window,
                                                   &size, &number_sizes) != 0)
     {
-
        if (number_sizes > 0)
        {
-           if (size->max_height >= 48 && size->max_height >= 48)
+           if (size->max_height >= 48 && size->max_width >= 48)
                magick = vim48x48;
-           else if (size->max_height >= 32 && size->max_height >= 32)
+           else if (size->max_height >= 32 && size->max_width >= 32)
                magick = vim32x32;
-           else if (size->max_height >= 16 && size->max_height >= 16)
+           else if (size->max_height >= 16 && size->max_width >= 16)
                magick = vim16x16;
        }
     }
@@ -2197,12 +2197,12 @@ check_fontset_sanity(fs)
        if (       xfs[i]->max_bounds.width != 2 * min_width
                && xfs[i]->max_bounds.width != min_width)
        {
-           EMSG2(_("E253: Fontset name: %s\n"), base_name);
-           EMSG2(_("Font0: %s\n"), font_name[min_font_idx]);
-           EMSG2(_("Font1: %s\n"), font_name[i]);
-           EMSGN(_("Font%ld width is not twice that of font0\n"), i);
-           EMSGN(_("Font0 width: %ld\n"), xfs[min_font_idx]->max_bounds.width);
-           EMSGN(_("Font1 width: %ld\n\n"), xfs[i]->max_bounds.width);
+           EMSG2(_("E253: Fontset name: %s"), base_name);
+           EMSG2(_("Font0: %s"), font_name[min_font_idx]);
+           EMSG2(_("Font1: %s"), font_name[i]);
+           EMSGN(_("Font%ld width is not twice that of font0"), i);
+           EMSGN(_("Font0 width: %ld"), xfs[min_font_idx]->max_bounds.width);
+           EMSGN(_("Font1 width: %ld"), xfs[i]->max_bounds.width);
            return FAIL;
        }
     }
@@ -2895,6 +2895,11 @@ gui_mch_wait_for_chars(wtime)
            focus = gui.in_focus;
        }
 
+#if defined(FEAT_NETBEANS_INTG)
+       /* Process any queued netbeans messages. */
+       netbeans_parse_messages();
+#endif
+
        /*
         * Don't use gui_mch_update() because then we will spin-lock until a
         * char arrives, instead we use XtAppProcessEvent() to hang until an
index 1ae755e..73142e2 100644 (file)
@@ -688,7 +688,7 @@ do_choice(Widget w,
            do_dialog(VIM_ERROR,
                    (char_u *)_("Error"),
                    (char_u *)_("Invalid font specification"),
-                   (char_u *)_("&Dismiss"), 1, NULL);
+                   (char_u *)_("&Dismiss"), 1, NULL, FALSE);
 
        return True;
     }
@@ -807,7 +807,7 @@ ok_callback(Widget w UNUSED,
        do_dialog(VIM_ERROR,
                (char_u *)_("Error"),
                (char_u *)_("Invalid font specification"),
-               (char_u *)_("&Dismiss"), 1, NULL);
+               (char_u *)_("&Dismiss"), 1, NULL, FALSE);
        XFreeFontNames(name);
     }
     else
index 5b65088..3760f72 100644 (file)
@@ -345,7 +345,7 @@ set_pixmap(XmEnhancedButtonWidget eb)
            &eb->primitive.top_shadow_color,
            &eb->primitive.highlight_color);
 
-    /* Setup color subsititution table. */
+    /* Setup color substitution table. */
     color[0].pixel = eb->core.background_pixel;
     color[1].pixel = eb->core.background_pixel;
     color[2].pixel = eb->core.background_pixel;
@@ -375,11 +375,8 @@ set_pixmap(XmEnhancedButtonWidget eb)
 
     XGetGeometry(dpy, pix, &root, &x, &y, &width, &height, &border, &depth);
 
-    if (eb->enhancedbutton.label_location == (int)XmTOP
-           || eb->enhancedbutton.label_location == (int)XmBOTTOM)
-       shift = eb->primitive.shadow_thickness / 2;
-    else
-       shift = eb->primitive.shadow_thickness / 2;
+    /* TODO: does the shift depend on label_location somehow? */
+    shift = eb->primitive.shadow_thickness / 2;
 
     if (shift < 1)
        shift = 1;
@@ -922,8 +919,8 @@ set_size(XmEnhancedButtonWidget newtb)
     }
 
     /*
-     * Plase note that we manipulate the width only in case of push buttons not
-     * used in the context of a menu pane.
+     * Please note that we manipulate the width only in case of push buttons
+     * not used in the context of a menu pane.
      */
     if (Lab_IsMenupane(newtb))
     {
@@ -1009,7 +1006,7 @@ Initialize(Widget rq, Widget ebw, ArgList args UNUSED, Cardinal *n UNUSED)
        XmString str;
        set_pixmap(eb);
 
-       /* FIXME: this is not the perfect way to deal with menues, which do not
+       /* FIXME: this is not the perfect way to deal with menus, which do not
         * have any string set right now.  */
        str = XmStringCreateLocalized("");
        XtVaSetValues((Widget) eb, XmNlabelString, str, NULL);
index 65e71b4..a3e3e3d 100644 (file)
@@ -26,7 +26,7 @@
 
 
 /*
- * EnahncedButton class structure.
+ * EnhancedButton class structure.
  */
 typedef struct _XmEnhancedButtonClassPart
 {
@@ -49,7 +49,7 @@ typedef struct
 extern XmEnhancedButtonClassRec xmEnhancedButtonClassRec;
 
 /*
- * EnahncedButton instance record.
+ * EnhancedButton instance record.
  */
 typedef struct _XmEnhancedButtonPart
 {
index 26ade97..206fd2b 100644 (file)
@@ -2,7 +2,7 @@
 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
   <assemblyIdentity
     processorArchitecture="*"
-    version="7.3.0.0"
+    version="7.4.0.0"
     type="win32"
     name="Vim"
   />
index 0747dc9..1df2fda 100644 (file)
@@ -1759,18 +1759,25 @@ prt_find_resource(name, resource)
     char       *name;
     struct prt_ps_resource_S *resource;
 {
-    char_u     buffer[MAXPATHL + 1];
+    char_u     *buffer;
+    int                retval;
+
+    buffer = alloc(MAXPATHL + 1);
+    if (buffer == NULL)
+       return FALSE;
 
-    STRCPY(resource->name, name);
+    vim_strncpy(resource->name, (char_u *)name, 63);
     /* Look for named resource file in runtimepath */
     STRCPY(buffer, "print");
     add_pathsep(buffer);
-    STRCAT(buffer, name);
-    STRCAT(buffer, ".ps");
+    vim_strcat(buffer, (char_u *)name, MAXPATHL);
+    vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
     resource->filename[0] = NUL;
-    return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+    retval = (do_in_runtimepath(buffer, FALSE, prt_resource_name,
                                                           resource->filename)
            && resource->filename[0] != NUL);
+    vim_free(buffer);
+    return retval;
 }
 
 /* PS CR and LF characters have platform independent values */
@@ -2179,7 +2186,7 @@ prt_dsc_requirements(duplex, tumble, collate, color, num_copies)
     if (num_copies > 1)
     {
        prt_write_string(" numcopies(");
-       /* Note: no space wanted so dont use prt_write_int() */
+       /* Note: no space wanted so don't use prt_write_int() */
        sprintf((char *)prt_line_buffer, "%d", num_copies);
        prt_write_file(prt_line_buffer);
        prt_write_string(")");
@@ -2848,15 +2855,33 @@ mch_print_begin(psettings)
     double      right;
     double      top;
     double      bottom;
-    struct prt_ps_resource_S res_prolog;
-    struct prt_ps_resource_S res_encoding;
+    struct prt_ps_resource_S *res_prolog;
+    struct prt_ps_resource_S *res_encoding;
     char       buffer[256];
     char_u      *p_encoding;
     char_u     *p;
 #ifdef FEAT_MBYTE
-    struct prt_ps_resource_S res_cidfont;
-    struct prt_ps_resource_S res_cmap;
+    struct prt_ps_resource_S *res_cidfont;
+    struct prt_ps_resource_S *res_cmap;
 #endif
+    int                retval = FALSE;
+
+    res_prolog = (struct prt_ps_resource_S *)
+                                     alloc(sizeof(struct prt_ps_resource_S));
+    res_encoding = (struct prt_ps_resource_S *)
+                                     alloc(sizeof(struct prt_ps_resource_S));
+#ifdef FEAT_MBYTE
+    res_cidfont = (struct prt_ps_resource_S *)
+                                     alloc(sizeof(struct prt_ps_resource_S));
+    res_cmap = (struct prt_ps_resource_S *)
+                                     alloc(sizeof(struct prt_ps_resource_S));
+#endif
+    if (res_prolog == NULL || res_encoding == NULL
+#ifdef FEAT_MBYTE
+           || res_cidfont == NULL || res_cmap == NULL
+#endif
+       )
+       goto theend;
 
     /*
      * PS DSC Header comments - no PS code!
@@ -2932,27 +2957,27 @@ mch_print_begin(psettings)
 #endif
 
     /* Search for external resources VIM supplies */
-    if (!prt_find_resource("prolog", &res_prolog))
+    if (!prt_find_resource("prolog", res_prolog))
     {
        EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
        return FALSE;
     }
-    if (!prt_open_resource(&res_prolog))
+    if (!prt_open_resource(res_prolog))
        return FALSE;
-    if (!prt_check_resource(&res_prolog, PRT_PROLOG_VERSION))
+    if (!prt_check_resource(res_prolog, PRT_PROLOG_VERSION))
        return FALSE;
 #ifdef FEAT_MBYTE
     if (prt_out_mbyte)
     {
        /* Look for required version of multi-byte printing procset */
-       if (!prt_find_resource("cidfont", &res_cidfont))
+       if (!prt_find_resource("cidfont", res_cidfont))
        {
            EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
            return FALSE;
        }
-       if (!prt_open_resource(&res_cidfont))
+       if (!prt_open_resource(res_cidfont))
            return FALSE;
-       if (!prt_check_resource(&res_cidfont, PRT_CID_PROLOG_VERSION))
+       if (!prt_check_resource(res_cidfont, PRT_CID_PROLOG_VERSION))
            return FALSE;
     }
 #endif
@@ -2968,7 +2993,7 @@ mch_print_begin(psettings)
 #endif
        p_encoding = enc_skip(p_penc);
        if (*p_encoding == NUL
-               || !prt_find_resource((char *)p_encoding, &res_encoding))
+               || !prt_find_resource((char *)p_encoding, res_encoding))
        {
            /* 'printencoding' not set or not supported - find alternate */
 #ifdef FEAT_MBYTE
@@ -2977,13 +3002,13 @@ mch_print_begin(psettings)
            p_encoding = enc_skip(p_enc);
            props = enc_canon_props(p_encoding);
            if (!(props & ENC_8BIT)
-                   || !prt_find_resource((char *)p_encoding, &res_encoding))
+                   || !prt_find_resource((char *)p_encoding, res_encoding))
                /* 8-bit 'encoding' is not supported */
 #endif
                {
                /* Use latin1 as default printing encoding */
                p_encoding = (char_u *)"latin1";
-               if (!prt_find_resource((char *)p_encoding, &res_encoding))
+               if (!prt_find_resource((char *)p_encoding, res_encoding))
                {
                    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
                            p_encoding);
@@ -2991,7 +3016,7 @@ mch_print_begin(psettings)
                }
            }
        }
-       if (!prt_open_resource(&res_encoding))
+       if (!prt_open_resource(res_encoding))
            return FALSE;
        /* For the moment there are no checks on encoding resource files to
         * perform */
@@ -3005,13 +3030,13 @@ mch_print_begin(psettings)
        if (prt_use_courier)
        {
            /* Include ASCII range encoding vector */
-           if (!prt_find_resource(prt_ascii_encoding, &res_encoding))
+           if (!prt_find_resource(prt_ascii_encoding, res_encoding))
            {
                EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
                                                          prt_ascii_encoding);
                return FALSE;
            }
-           if (!prt_open_resource(&res_encoding))
+           if (!prt_open_resource(res_encoding))
                return FALSE;
            /* For the moment there are no checks on encoding resource files to
             * perform */
@@ -3034,44 +3059,44 @@ mch_print_begin(psettings)
     if (prt_out_mbyte && prt_custom_cmap)
     {
        /* Find user supplied CMap */
-       if (!prt_find_resource(prt_cmap, &res_cmap))
+       if (!prt_find_resource(prt_cmap, res_cmap))
        {
            EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
                                                                    prt_cmap);
            return FALSE;
        }
-       if (!prt_open_resource(&res_cmap))
+       if (!prt_open_resource(res_cmap))
            return FALSE;
     }
 #endif
 
     /* List resources supplied */
-    STRCPY(buffer, res_prolog.title);
+    STRCPY(buffer, res_prolog->title);
     STRCAT(buffer, " ");
-    STRCAT(buffer, res_prolog.version);
+    STRCAT(buffer, res_prolog->version);
     prt_dsc_resources("DocumentSuppliedResources", "procset", buffer);
 #ifdef FEAT_MBYTE
     if (prt_out_mbyte)
     {
-       STRCPY(buffer, res_cidfont.title);
+       STRCPY(buffer, res_cidfont->title);
        STRCAT(buffer, " ");
-       STRCAT(buffer, res_cidfont.version);
+       STRCAT(buffer, res_cidfont->version);
        prt_dsc_resources(NULL, "procset", buffer);
 
        if (prt_custom_cmap)
        {
-           STRCPY(buffer, res_cmap.title);
+           STRCPY(buffer, res_cmap->title);
            STRCAT(buffer, " ");
-           STRCAT(buffer, res_cmap.version);
+           STRCAT(buffer, res_cmap->version);
            prt_dsc_resources(NULL, "cmap", buffer);
        }
     }
     if (!prt_out_mbyte || prt_use_courier)
 #endif
     {
-       STRCPY(buffer, res_encoding.title);
+       STRCPY(buffer, res_encoding->title);
        STRCAT(buffer, " ");
-       STRCAT(buffer, res_encoding.version);
+       STRCAT(buffer, res_encoding->version);
        prt_dsc_resources(NULL, "encoding", buffer);
     }
     prt_dsc_requirements(prt_duplex, prt_tumble, prt_collate,
@@ -3114,15 +3139,15 @@ mch_print_begin(psettings)
     prt_dsc_noarg("BeginProlog");
 
     /* Add required procsets - NOTE: order is important! */
-    if (!prt_add_resource(&res_prolog))
+    if (!prt_add_resource(res_prolog))
        return FALSE;
 #ifdef FEAT_MBYTE
     if (prt_out_mbyte)
     {
        /* Add CID font procset, and any user supplied CMap */
-       if (!prt_add_resource(&res_cidfont))
+       if (!prt_add_resource(res_cidfont))
            return FALSE;
-       if (prt_custom_cmap && !prt_add_resource(&res_cmap))
+       if (prt_custom_cmap && !prt_add_resource(res_cmap))
            return FALSE;
     }
 #endif
@@ -3132,7 +3157,7 @@ mch_print_begin(psettings)
 #endif
        /* There will be only one Roman font encoding to be included in the PS
         * file. */
-       if (!prt_add_resource(&res_encoding))
+       if (!prt_add_resource(res_encoding))
            return FALSE;
 
     prt_dsc_noarg("EndProlog");
@@ -3248,7 +3273,17 @@ mch_print_begin(psettings)
     prt_dsc_noarg("EndSetup");
 
     /* Fail if any problems writing out to the PS file */
-    return !prt_file_error;
+    retval = !prt_file_error;
+
+theend:
+    vim_free(res_prolog);
+    vim_free(res_encoding);
+#ifdef FEAT_MBYTE
+    vim_free(res_cidfont);
+    vim_free(res_cmap);
+#endif
+
+    return retval;
 }
 
     void
index 8b53aa4..a47fa94 100644 (file)
@@ -138,7 +138,7 @@ hash_lookup(ht, key, hash)
     hash_T     perturb;
     hashitem_T *freeitem;
     hashitem_T *hi;
-    int                idx;
+    unsigned   idx;
 
 #ifdef HT_DEBUG
     ++hash_count_lookup;
@@ -150,7 +150,7 @@ hash_lookup(ht, key, hash)
      * - skip over a removed item
      * - return if the item matches
      */
-    idx = (int)(hash & ht->ht_mask);
+    idx = (unsigned)(hash & ht->ht_mask);
     hi = &ht->ht_array[idx];
 
     if (hi->hi_key == NULL)
@@ -176,7 +176,7 @@ hash_lookup(ht, key, hash)
 #ifdef HT_DEBUG
        ++hash_count_perturb;       /* count a "miss" for hashtab lookup */
 #endif
-       idx = (int)((idx << 2) + idx + perturb + 1);
+       idx = (unsigned)((idx << 2U) + idx + perturb + 1U);
        hi = &ht->ht_array[idx & ht->ht_mask];
        if (hi->hi_key == NULL)
            return freeitem == NULL ? hi : freeitem;
@@ -342,7 +342,7 @@ hash_may_resize(ht, minitems)
     hashitem_T temparray[HT_INIT_SIZE];
     hashitem_T *oldarray, *newarray;
     hashitem_T *olditem, *newitem;
-    int                newi;
+    unsigned   newi;
     int                todo;
     long_u     oldsize, newsize;
     long_u     minsize;
@@ -448,13 +448,13 @@ hash_may_resize(ht, minitems)
             * the algorithm to find an item in hash_lookup().  But we only
             * need to search for a NULL key, thus it's simpler.
             */
-           newi = (int)(olditem->hi_hash & newmask);
+           newi = (unsigned)(olditem->hi_hash & newmask);
            newitem = &newarray[newi];
 
            if (newitem->hi_key != NULL)
                for (perturb = olditem->hi_hash; ; perturb >>= PERTURB_SHIFT)
                {
-                   newi = (int)((newi << 2) + newi + perturb + 1);
+                   newi = (unsigned)((newi << 2U) + newi + perturb + 1U);
                    newitem = &newarray[newi & newmask];
                    if (newitem->hi_key == NULL)
                        break;
index 3ee7183..09982e6 100644 (file)
 
 #if defined(FEAT_CSCOPE) || defined(PROTO)
 
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #if defined(UNIX)
 # include <sys/wait.h>
-#else
-    /* not UNIX, must be WIN32 */
-# include "vimio.h"
 #endif
 #include "if_cscope.h"
 
@@ -545,12 +539,27 @@ cs_add_common(arg1, arg2, flags)
     char       *fname2 = NULL;
     char       *ppath = NULL;
     int                i;
+#ifdef FEAT_MODIFY_FNAME
+    int                len;
+    int                usedlen = 0;
+    char_u     *fbuf = NULL;
+#endif
 
     /* get the filename (arg1), expand it, and try to stat it */
     if ((fname = (char *)alloc(MAXPATHL + 1)) == NULL)
        goto add_err;
 
     expand_env((char_u *)arg1, (char_u *)fname, MAXPATHL);
+#ifdef FEAT_MODIFY_FNAME
+    len = (int)STRLEN(fname);
+    fbuf = (char_u *)fname;
+    (void)modify_fname((char_u *)":p", &usedlen,
+                                             (char_u **)&fname, &fbuf, &len);
+    if (fname == NULL)
+       goto add_err;
+    fname = (char *)vim_strnsave((char_u *)fname, len);
+    vim_free(fbuf);
+#endif
     ret = stat(fname, &statbuf);
     if (ret < 0)
     {
@@ -988,6 +997,15 @@ err_closing:
        vim_free(ppath);
 
 #if defined(UNIX)
+# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+       /* Change our process group to avoid cscope receiving SIGWINCH. */
+#  if defined(HAVE_SETSID)
+       (void)setsid();
+#  else
+       if (setpgid(0, 0) == -1)
+           PERROR(_("cs_create_connection setpgid failed"));
+#  endif
+# endif
        if (execl("/bin/sh", "sh", "-c", cmd, (char *)NULL) == -1)
            PERROR(_("cs_create_connection exec failed"));
 
@@ -1198,9 +1216,8 @@ cs_find_common(opt, pat, forceit, verbose, use_ll, cmdline)
     if (nummatches == NULL)
        return FALSE;
 
-    /* send query to all open connections, then count the total number
-     * of matches so we can alloc matchesp all in one swell foop
-     */
+    /* Send query to all open connections, then count the total number
+     * of matches so we can alloc all in one swell foop. */
     for (i = 0; i < csinfo_size; i++)
        nummatches[i] = 0;
     totmatches = 0;
@@ -1274,9 +1291,7 @@ cs_find_common(opt, pat, forceit, verbose, use_ll, cmdline)
                {
                    win_split(postponed_split > 0 ? postponed_split : 0,
                                                       postponed_split_flags);
-#  ifdef FEAT_SCROLLBIND
-                   curwin->w_p_scb = FALSE;
-#  endif
+                   RESET_BINDING(curwin);
                    postponed_split = 0;
                }
 # endif
@@ -1353,7 +1368,7 @@ cs_help(eap)
                       "       g: Find this definition\n"
                       "       i: Find files #including this file\n"
                       "       s: Find this C symbol\n"
-                      "       t: Find assignments to\n"));
+                      "       t: Find this text string\n"));
 
        cmdp++;
     }
@@ -1420,17 +1435,15 @@ cs_insert_filelist(fname, ppath, flags, sb)
 {
     short      i, j;
 #ifndef UNIX
-    HANDLE     hFile;
     BY_HANDLE_FILE_INFORMATION bhfi;
 
-    vim_memset(&bhfi, 0, sizeof(bhfi));
     /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */
     if (!mch_windows95())
     {
-       hFile = CreateFile(fname, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING,
-                                                FILE_ATTRIBUTE_NORMAL, NULL);
-       if (hFile == INVALID_HANDLE_VALUE)
+       switch (win32_fileinfo(fname, &bhfi))
        {
+       case FILEINFO_ENC_FAIL:         /* enc_to_utf16() failed */
+       case FILEINFO_READ_FAIL:        /* CreateFile() failed */
            if (p_csverbose)
            {
                char *cant_msg = _("E625: cannot open cscope database: %s");
@@ -1446,15 +1459,12 @@ cs_insert_filelist(fname, ppath, flags, sb)
                    (void)EMSG2(cant_msg, fname);
            }
            return -1;
-       }
-       if (!GetFileInformationByHandle(hFile, &bhfi))
-       {
-           CloseHandle(hFile);
+
+       case FILEINFO_INFO_FAIL:    /* GetFileInformationByHandle() failed */
            if (p_csverbose)
                (void)EMSG(_("E626: cannot get cscope database information"));
            return -1;
        }
-       CloseHandle(hFile);
     }
 #endif
 
@@ -1664,7 +1674,7 @@ cs_kill_execute(i, cname)
 /*
  * PRIVATE: cs_make_vim_style_matches
  *
- * convert the cscope output into into a ctags style entry (as might be found
+ * convert the cscope output into a ctags style entry (as might be found
  * in a ctags tags file).  there's one catch though: cscope doesn't tell you
  * the type of the tag you are looking for.  for example, in Darren Hiebert's
  * ctags (the one that comes with vim), #define's use a line number to find the
@@ -2474,52 +2484,73 @@ cs_reset(eap)
 /*
  * PRIVATE: cs_resolve_file
  *
- * construct the full pathname to a file found in the cscope database.
+ * Construct the full pathname to a file found in the cscope database.
  * (Prepends ppath, if there is one and if it's not already prepended,
  * otherwise just uses the name found.)
  *
- * we need to prepend the prefix because on some cscope's (e.g., the one that
+ * We need to prepend the prefix because on some cscope's (e.g., the one that
  * ships with Solaris 2.6), the output never has the prefix prepended.
- * contrast this with my development system (Digital Unix), which does.
+ * Contrast this with my development system (Digital Unix), which does.
  */
     static char *
 cs_resolve_file(i, name)
-    int i;
+    int  i;
     char *name;
 {
-    char *fullname;
-    int len;
+    char       *fullname;
+    int                len;
+    char_u     *csdir = NULL;
 
     /*
-     * ppath is freed when we destroy the cscope connection.
-     * fullname is freed after cs_make_vim_style_matches, after it's been
-     * copied into the tag buffer used by vim
+     * Ppath is freed when we destroy the cscope connection.
+     * Fullname is freed after cs_make_vim_style_matches, after it's been
+     * copied into the tag buffer used by Vim.
      */
     len = (int)(strlen(name) + 2);
     if (csinfo[i].ppath != NULL)
        len += (int)strlen(csinfo[i].ppath);
+    else if (p_csre && csinfo[i].fname != NULL)
+    {
+       /* If 'cscoperelative' is set and ppath is not set, use cscope.out
+        * path in path resolution. */
+       csdir = alloc(MAXPATHL);
+       if (csdir != NULL)
+       {
+           vim_strncpy(csdir, (char_u *)csinfo[i].fname,
+                                      gettail((char_u *)csinfo[i].fname)
+                                                - (char_u *)csinfo[i].fname);
+           len += (int)STRLEN(csdir);
+       }
+    }
 
-    if ((fullname = (char *)alloc(len)) == NULL)
-       return NULL;
-
-    /*
-     * note/example: this won't work if the cscope output already starts
+    /* Note/example: this won't work if the cscope output already starts
      * "../.." and the prefix path is also "../..".  if something like this
-     * happens, you are screwed up and need to fix how you're using cscope.
-     */
-    if (csinfo[i].ppath != NULL &&
-       (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0) &&
-       (name[0] != '/')
+     * happens, you are screwed up and need to fix how you're using cscope. */
+    if (csinfo[i].ppath != NULL
+           && (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0)
+           && (name[0] != '/')
 #ifdef WIN32
-       && name[0] != '\\' && name[1] != ':'
+           && name[0] != '\\' && name[1] != ':'
 #endif
-       )
-       (void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
+       )
+    {
+       if ((fullname = (char *)alloc(len)) != NULL)
+           (void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
+    }
+    else if (csdir != NULL && csinfo[i].fname != NULL && *csdir != NUL)
+    {
+       /* Check for csdir to be non empty to avoid empty path concatenated to
+        * cscope output. */
+       fullname = (char *)concat_fnames(csdir, (char_u *)name, TRUE);
+    }
     else
-       (void)sprintf(fullname, "%s", name);
+    {
+       fullname = (char *)vim_strsave((char_u *)name);
+    }
 
+    vim_free(csdir);
     return fullname;
-} /* cs_resolve_file */
+}
 
 
 /*
index 35ee300..35e9106 100644 (file)
@@ -1,4 +1,4 @@
-/* vi:set ts=8 sts=4 sw=4:
+/* vi:set ts=8 sts=4 sw=4 noet:
  *
  * VIM - Vi IMproved   by Bram Moolenaar
  *
@@ -9,12 +9,11 @@
  * See README.txt for an overview of the Vim source code.
  */
 
-#include <stdio.h>
-#include <string.h>
+#include "vim.h"
+
 #include <lua.h>
 #include <lualib.h>
 #include <lauxlib.h>
-#include "vim.h"
 
 /* Only do the following when the feature is enabled.  Needed for "make
  * depend". */
 
 #define LUAVIM_CHUNKNAME "vim chunk"
 #define LUAVIM_NAME "vim"
+#define LUAVIM_EVALNAME "luaeval"
+#define LUAVIM_EVALHEADER "local _A=select(1,...) return "
 
 typedef buf_T *luaV_Buffer;
 typedef win_T *luaV_Window;
+typedef dict_T *luaV_Dict;
+typedef list_T *luaV_List;
 typedef void (*msgfunc_T)(char_u *);
 
+static const char LUAVIM_DICT[] = "dict";
+static const char LUAVIM_LIST[] = "list";
 static const char LUAVIM_BUFFER[] = "buffer";
 static const char LUAVIM_WINDOW[] = "window";
 static const char LUAVIM_FREE[] = "luaV_free";
-
+static const char LUAVIM_LUAEVAL[] = "luaV_luaeval";
+static const char LUAVIM_SETREF[] = "luaV_setref";
+
+/* most functions are closures with a cache table as first upvalue;
+ * get/setudata manage references to vim userdata in cache table through
+ * object pointers (light userdata) */
+#define luaV_getudata(L, v) \
+    lua_pushlightuserdata((L), (void *) (v)); \
+    lua_rawget((L), lua_upvalueindex(1))
+#define luaV_setudata(L, v) \
+    lua_pushlightuserdata((L), (void *) (v)); \
+    lua_pushvalue((L), -2); \
+    lua_rawset((L), lua_upvalueindex(1))
 #define luaV_getfield(L, s) \
     lua_pushlightuserdata((L), (void *)(s)); \
     lua_rawget((L), LUA_REGISTRYINDEX)
@@ -39,6 +56,15 @@ static const char LUAVIM_FREE[] = "luaV_free";
 #define luaV_msg(L) luaV_msgfunc((L), (msgfunc_T) msg)
 #define luaV_emsg(L) luaV_msgfunc((L), (msgfunc_T) emsg)
 
+static luaV_List *luaV_pushlist (lua_State *L, list_T *lis);
+static luaV_Dict *luaV_pushdict (lua_State *L, dict_T *dic);
+
+#if LUA_VERSION_NUM <= 501
+#define luaV_openlib(L, l, n) luaL_openlib(L, NULL, l, n)
+#define luaL_typeerror luaL_typerror
+#else
+#define luaV_openlib luaL_setfuncs
+#endif
 
 #ifdef DYNAMIC_LUA
 
@@ -49,38 +75,61 @@ static const char LUAVIM_FREE[] = "luaV_free";
 # define symbol_from_dll dlsym
 # define close_dll dlclose
 #else
-# define load_dll LoadLibrary
+# define load_dll vimLoadLib
 # define symbol_from_dll GetProcAddress
 # define close_dll FreeLibrary
 #endif
 
 /* lauxlib */
+#if LUA_VERSION_NUM <= 501
 #define luaL_register dll_luaL_register
+#define luaL_prepbuffer dll_luaL_prepbuffer
+#define luaL_openlib dll_luaL_openlib
 #define luaL_typerror dll_luaL_typerror
+#define luaL_loadfile dll_luaL_loadfile
+#define luaL_loadbuffer dll_luaL_loadbuffer
+#else
+#define luaL_prepbuffsize dll_luaL_prepbuffsize
+#define luaL_setfuncs dll_luaL_setfuncs
+#define luaL_loadfilex dll_luaL_loadfilex
+#define luaL_loadbufferx dll_luaL_loadbufferx
+#define luaL_argerror dll_luaL_argerror
+#endif
+#define luaL_checkany dll_luaL_checkany
 #define luaL_checklstring dll_luaL_checklstring
 #define luaL_checkinteger dll_luaL_checkinteger
 #define luaL_optinteger dll_luaL_optinteger
 #define luaL_checktype dll_luaL_checktype
 #define luaL_error dll_luaL_error
-#define luaL_loadfile dll_luaL_loadfile
-#define luaL_loadbuffer dll_luaL_loadbuffer
 #define luaL_newstate dll_luaL_newstate
 #define luaL_buffinit dll_luaL_buffinit
-#define luaL_prepbuffer dll_luaL_prepbuffer
 #define luaL_addlstring dll_luaL_addlstring
 #define luaL_pushresult dll_luaL_pushresult
 /* lua */
+#if LUA_VERSION_NUM <= 501
+#define lua_tonumber dll_lua_tonumber
+#define lua_tointeger dll_lua_tointeger
+#define lua_call dll_lua_call
+#define lua_pcall dll_lua_pcall
+#else
+#define lua_tonumberx dll_lua_tonumberx
+#define lua_tointegerx dll_lua_tointegerx
+#define lua_callk dll_lua_callk
+#define lua_pcallk dll_lua_pcallk
+#define lua_getglobal dll_lua_getglobal
+#define lua_setglobal dll_lua_setglobal
+#endif
+#define lua_typename dll_lua_typename
 #define lua_close dll_lua_close
 #define lua_gettop dll_lua_gettop
 #define lua_settop dll_lua_settop
 #define lua_pushvalue dll_lua_pushvalue
 #define lua_replace dll_lua_replace
+#define lua_remove dll_lua_remove
 #define lua_isnumber dll_lua_isnumber
 #define lua_isstring dll_lua_isstring
 #define lua_type dll_lua_type
 #define lua_rawequal dll_lua_rawequal
-#define lua_tonumber dll_lua_tonumber
-#define lua_tointeger dll_lua_tointeger
 #define lua_toboolean dll_lua_toboolean
 #define lua_tolstring dll_lua_tolstring
 #define lua_touserdata dll_lua_touserdata
@@ -95,6 +144,7 @@ static const char LUAVIM_FREE[] = "luaV_free";
 #define lua_pushlightuserdata dll_lua_pushlightuserdata
 #define lua_getfield dll_lua_getfield
 #define lua_rawget dll_lua_rawget
+#define lua_rawgeti dll_lua_rawgeti
 #define lua_createtable dll_lua_createtable
 #define lua_newuserdata dll_lua_newuserdata
 #define lua_getmetatable dll_lua_getmetatable
@@ -102,8 +152,7 @@ static const char LUAVIM_FREE[] = "luaV_free";
 #define lua_rawset dll_lua_rawset
 #define lua_rawseti dll_lua_rawseti
 #define lua_setmetatable dll_lua_setmetatable
-#define lua_call dll_lua_call
-#define lua_pcall dll_lua_pcall
+#define lua_next dll_lua_next
 /* libs */
 #define luaopen_base dll_luaopen_base
 #define luaopen_table dll_luaopen_table
@@ -116,32 +165,57 @@ static const char LUAVIM_FREE[] = "luaV_free";
 #define luaL_openlibs dll_luaL_openlibs
 
 /* lauxlib */
+#if LUA_VERSION_NUM <= 501
 void (*dll_luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l);
+char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
+void (*dll_luaL_openlib) (lua_State *L, const char *libname, const luaL_Reg *l, int nup);
 int (*dll_luaL_typerror) (lua_State *L, int narg, const char *tname);
+int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
+int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
+#else
+char *(*dll_luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
+void (*dll_luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
+int (*dll_luaL_loadfilex) (lua_State *L, const char *filename, const char *mode);
+int (*dll_luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
+int (*dll_luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
+#endif
+void (*dll_luaL_checkany) (lua_State *L, int narg);
 const char *(*dll_luaL_checklstring) (lua_State *L, int numArg, size_t *l);
 lua_Integer (*dll_luaL_checkinteger) (lua_State *L, int numArg);
 lua_Integer (*dll_luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
 void (*dll_luaL_checktype) (lua_State *L, int narg, int t);
 int (*dll_luaL_error) (lua_State *L, const char *fmt, ...);
-int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
-int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
 lua_State *(*dll_luaL_newstate) (void);
 void (*dll_luaL_buffinit) (lua_State *L, luaL_Buffer *B);
-char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
 void (*dll_luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
 void (*dll_luaL_pushresult) (luaL_Buffer *B);
 /* lua */
+#if LUA_VERSION_NUM <= 501
+lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
+lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
+void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
+int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
+#else
+lua_Number (*dll_lua_tonumberx) (lua_State *L, int idx, int *isnum);
+lua_Integer (*dll_lua_tointegerx) (lua_State *L, int idx, int *isnum);
+void (*dll_lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
+       lua_CFunction k);
+int (*dll_lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
+       int ctx, lua_CFunction k);
+void (*dll_lua_getglobal) (lua_State *L, const char *var);
+void (*dll_lua_setglobal) (lua_State *L, const char *var);
+#endif
+const char *(*dll_lua_typename) (lua_State *L, int tp);
 void       (*dll_lua_close) (lua_State *L);
 int (*dll_lua_gettop) (lua_State *L);
 void (*dll_lua_settop) (lua_State *L, int idx);
 void (*dll_lua_pushvalue) (lua_State *L, int idx);
 void (*dll_lua_replace) (lua_State *L, int idx);
+void (*dll_lua_remove) (lua_State *L, int idx);
 int (*dll_lua_isnumber) (lua_State *L, int idx);
 int (*dll_lua_isstring) (lua_State *L, int idx);
 int (*dll_lua_type) (lua_State *L, int idx);
 int (*dll_lua_rawequal) (lua_State *L, int idx1, int idx2);
-lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
-lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
 int (*dll_lua_toboolean) (lua_State *L, int idx);
 const char *(*dll_lua_tolstring) (lua_State *L, int idx, size_t *len);
 void *(*dll_lua_touserdata) (lua_State *L, int idx);
@@ -156,6 +230,7 @@ void (*dll_lua_pushboolean) (lua_State *L, int b);
 void (*dll_lua_pushlightuserdata) (lua_State *L, void *p);
 void (*dll_lua_getfield) (lua_State *L, int idx, const char *k);
 void (*dll_lua_rawget) (lua_State *L, int idx);
+void (*dll_lua_rawgeti) (lua_State *L, int idx, int n);
 void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
 void *(*dll_lua_newuserdata) (lua_State *L, size_t sz);
 int (*dll_lua_getmetatable) (lua_State *L, int objindex);
@@ -163,8 +238,7 @@ void (*dll_lua_setfield) (lua_State *L, int idx, const char *k);
 void (*dll_lua_rawset) (lua_State *L, int idx);
 void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
 int (*dll_lua_setmetatable) (lua_State *L, int objindex);
-void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
-int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
+int (*dll_lua_next) (lua_State *L, int idx);
 /* libs */
 int (*dll_luaopen_base) (lua_State *L);
 int (*dll_luaopen_table) (lua_State *L);
@@ -184,32 +258,55 @@ typedef struct {
 
 static const luaV_Reg luaV_dll[] = {
     /* lauxlib */
+#if LUA_VERSION_NUM <= 501
     {"luaL_register", (luaV_function) &dll_luaL_register},
+    {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
+    {"luaL_openlib", (luaV_function) &dll_luaL_openlib},
     {"luaL_typerror", (luaV_function) &dll_luaL_typerror},
+    {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
+    {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
+#else
+    {"luaL_prepbuffsize", (luaV_function) &dll_luaL_prepbuffsize},
+    {"luaL_setfuncs", (luaV_function) &dll_luaL_setfuncs},
+    {"luaL_loadfilex", (luaV_function) &dll_luaL_loadfilex},
+    {"luaL_loadbufferx", (luaV_function) &dll_luaL_loadbufferx},
+    {"luaL_argerror", (luaV_function) &dll_luaL_argerror},
+#endif
+    {"luaL_checkany", (luaV_function) &dll_luaL_checkany},
     {"luaL_checklstring", (luaV_function) &dll_luaL_checklstring},
     {"luaL_checkinteger", (luaV_function) &dll_luaL_checkinteger},
     {"luaL_optinteger", (luaV_function) &dll_luaL_optinteger},
     {"luaL_checktype", (luaV_function) &dll_luaL_checktype},
     {"luaL_error", (luaV_function) &dll_luaL_error},
-    {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
-    {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
     {"luaL_newstate", (luaV_function) &dll_luaL_newstate},
     {"luaL_buffinit", (luaV_function) &dll_luaL_buffinit},
-    {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
     {"luaL_addlstring", (luaV_function) &dll_luaL_addlstring},
     {"luaL_pushresult", (luaV_function) &dll_luaL_pushresult},
     /* lua */
+#if LUA_VERSION_NUM <= 501
+    {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
+    {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
+    {"lua_call", (luaV_function) &dll_lua_call},
+    {"lua_pcall", (luaV_function) &dll_lua_pcall},
+#else
+    {"lua_tonumberx", (luaV_function) &dll_lua_tonumberx},
+    {"lua_tointegerx", (luaV_function) &dll_lua_tointegerx},
+    {"lua_callk", (luaV_function) &dll_lua_callk},
+    {"lua_pcallk", (luaV_function) &dll_lua_pcallk},
+    {"lua_getglobal", (luaV_function) &dll_lua_getglobal},
+    {"lua_setglobal", (luaV_function) &dll_lua_setglobal},
+#endif
+    {"lua_typename", (luaV_function) &dll_lua_typename},
     {"lua_close", (luaV_function) &dll_lua_close},
     {"lua_gettop", (luaV_function) &dll_lua_gettop},
     {"lua_settop", (luaV_function) &dll_lua_settop},
     {"lua_pushvalue", (luaV_function) &dll_lua_pushvalue},
     {"lua_replace", (luaV_function) &dll_lua_replace},
+    {"lua_remove", (luaV_function) &dll_lua_remove},
     {"lua_isnumber", (luaV_function) &dll_lua_isnumber},
     {"lua_isstring", (luaV_function) &dll_lua_isstring},
     {"lua_type", (luaV_function) &dll_lua_type},
     {"lua_rawequal", (luaV_function) &dll_lua_rawequal},
-    {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
-    {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
     {"lua_toboolean", (luaV_function) &dll_lua_toboolean},
     {"lua_tolstring", (luaV_function) &dll_lua_tolstring},
     {"lua_touserdata", (luaV_function) &dll_lua_touserdata},
@@ -224,6 +321,7 @@ static const luaV_Reg luaV_dll[] = {
     {"lua_pushlightuserdata", (luaV_function) &dll_lua_pushlightuserdata},
     {"lua_getfield", (luaV_function) &dll_lua_getfield},
     {"lua_rawget", (luaV_function) &dll_lua_rawget},
+    {"lua_rawgeti", (luaV_function) &dll_lua_rawgeti},
     {"lua_createtable", (luaV_function) &dll_lua_createtable},
     {"lua_newuserdata", (luaV_function) &dll_lua_newuserdata},
     {"lua_getmetatable", (luaV_function) &dll_lua_getmetatable},
@@ -231,8 +329,7 @@ static const luaV_Reg luaV_dll[] = {
     {"lua_rawset", (luaV_function) &dll_lua_rawset},
     {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
     {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
-    {"lua_call", (luaV_function) &dll_lua_call},
-    {"lua_pcall", (luaV_function) &dll_lua_pcall},
+    {"lua_next", (luaV_function) &dll_lua_next},
     /* libs */
     {"luaopen_base", (luaV_function) &dll_luaopen_base},
     {"luaopen_table", (luaV_function) &dll_luaopen_table},
@@ -292,6 +389,16 @@ lua_enabled(int verbose)
 
 #endif /* DYNAMIC_LUA */
 
+#if LUA_VERSION_NUM > 501
+    static int
+luaL_typeerror (lua_State *L, int narg, const char *tname)
+{
+    const char *msg = lua_pushfstring(L, "%s expected, got %s",
+           tname, luaL_typename(L, narg));
+    return luaL_argerror(L, narg, msg);
+}
+#endif
+
 
 /* =======   Internal   ======= */
 
@@ -325,21 +432,40 @@ luaV_toudata(lua_State *L, int ud, const char *tname)
 }
 
     static void *
+luaV_checkcache(lua_State *L, void *p)
+{
+    luaV_getudata(L, p);
+    if (lua_isnil(L, -1)) luaL_error(L, "invalid object");
+    lua_pop(L, 1);
+    return p;
+}
+
+#define luaV_unbox(L,luatyp,ud) (*((luatyp *) lua_touserdata((L),(ud))))
+
+#define luaV_checkvalid(L,luatyp,ud) \
+    luaV_checkcache((L), (void *) luaV_unbox((L),luatyp,(ud)))
+
+    static void *
 luaV_checkudata(lua_State *L, int ud, const char *tname)
 {
     void *p = luaV_toudata(L, ud, tname);
-    if (p == NULL) luaL_typerror(L, ud, tname);
+    if (p == NULL) luaL_typeerror(L, ud, tname);
     return p;
 }
 
     static void
 luaV_pushtypval(lua_State *L, typval_T *tv)
 {
-    if (tv == NULL) luaL_error(L, "null type");
+    if (tv == NULL)
+    {
+       lua_pushnil(L);
+       return;
+    }
     switch (tv->v_type)
     {
        case VAR_STRING:
-           lua_pushstring(L, (char *) tv->vval.v_string);
+           lua_pushstring(L, tv->vval.v_string == NULL
+                                           ? "" : (char *)tv->vval.v_string);
            break;
        case VAR_NUMBER:
            lua_pushinteger(L, (int) tv->vval.v_number);
@@ -349,68 +475,70 @@ luaV_pushtypval(lua_State *L, typval_T *tv)
            lua_pushnumber(L, (lua_Number) tv->vval.v_float);
            break;
 #endif
-       case VAR_LIST: {
-           list_T *l = tv->vval.v_list;
+       case VAR_LIST:
+           luaV_pushlist(L, tv->vval.v_list);
+           break;
+       case VAR_DICT:
+           luaV_pushdict(L, tv->vval.v_dict);
+           break;
+       default:
+           lua_pushnil(L);
+    }
+}
 
-           if (l != NULL)
+/* converts lua value at 'pos' to typval 'tv' */
+    static void
+luaV_totypval (lua_State *L, int pos, typval_T *tv)
+{
+    switch(lua_type(L, pos)) {
+       case LUA_TBOOLEAN:
+           tv->v_type = VAR_NUMBER;
+           tv->vval.v_number = (varnumber_T) lua_toboolean(L, pos);
+           break;
+       case LUA_TSTRING:
+           tv->v_type = VAR_STRING;
+           tv->vval.v_string = vim_strsave((char_u *) lua_tostring(L, pos));
+           break;
+       case LUA_TNUMBER:
+#ifdef FEAT_FLOAT
+           tv->v_type = VAR_FLOAT;
+           tv->vval.v_float = (float_T) lua_tonumber(L, pos);
+#else
+           tv->v_type = VAR_NUMBER;
+           tv->vval.v_number = (varnumber_T) lua_tointeger(L, pos);
+#endif
+           break;
+       case LUA_TUSERDATA: {
+           void *p = lua_touserdata(L, pos);
+           if (lua_getmetatable(L, pos)) /* has metatable? */
            {
-               /* check cache */
-               lua_pushlightuserdata(L, (void *) l);
-               lua_rawget(L, LUA_ENVIRONINDEX);
-               if (lua_isnil(L, -1)) /* not interned? */
+               /* check list */
+               luaV_getfield(L, LUAVIM_LIST);
+               if (lua_rawequal(L, -1, -2))
                {
-                   listitem_T *li;
-                   int n = 0;
-                   lua_pop(L, 1); /* nil */
-                   lua_newtable(L);
-                   lua_pushlightuserdata(L, (void *) l);
-                   lua_pushvalue(L, -2);
-                   lua_rawset(L, LUA_ENVIRONINDEX);
-                   for (li = l->lv_first; li != NULL; li = li->li_next)
-                   {
-                       luaV_pushtypval(L, &li->li_tv);
-                       lua_rawseti(L, -2, ++n);
-                   }
+                   tv->v_type = VAR_LIST;
+                   tv->vval.v_list = *((luaV_List *) p);
+                   ++tv->vval.v_list->lv_refcount;
+                   lua_pop(L, 2); /* MTs */
+                   return;
                }
-           }
-           else lua_pushnil(L);
-           break;
-                      }
-       case VAR_DICT: {
-           dict_T *d = tv->vval.v_dict;
-
-           if (d != NULL)
-           {
-               /* check cache */
-               lua_pushlightuserdata(L, (void *) d);
-               lua_rawget(L, LUA_ENVIRONINDEX);
-               if (lua_isnil(L, -1)) /* not interned? */
+               /* check dict */
+               luaV_getfield(L, LUAVIM_DICT);
+               if (lua_rawequal(L, -1, -3))
                {
-                   hashtab_T *ht = &d->dv_hashtab;
-                   hashitem_T *hi;
-                   int n = ht->ht_used; /* remaining items */
-                   lua_pop(L, 1); /* nil */
-                   lua_newtable(L);
-                   lua_pushlightuserdata(L, (void *) d);
-                   lua_pushvalue(L, -2);
-                   lua_rawset(L, LUA_ENVIRONINDEX);
-                   for (hi = ht->ht_array; n > 0; hi++)
-                   {
-                       if (!HASHITEM_EMPTY(hi))
-                       {
-                           dictitem_T *di = dict_lookup(hi);
-                           luaV_pushtypval(L, &di->di_tv);
-                           lua_setfield(L, -2, (char *) hi->hi_key);
-                           n--;
-                       }
-                   }
+                   tv->v_type = VAR_DICT;
+                   tv->vval.v_dict = *((luaV_Dict *) p);
+                   ++tv->vval.v_dict->dv_refcount;
+                   lua_pop(L, 3); /* MTs */
+                   return;
                }
+               lua_pop(L, 3); /* MTs */
            }
-           else lua_pushnil(L);
            break;
        }
        default:
-           luaL_error(L, "invalid type");
+           tv->v_type = VAR_NUMBER;
+           tv->vval.v_number = 0;
     }
 }
 
@@ -479,89 +607,366 @@ luaV_msgfunc(lua_State *L, msgfunc_T mf)
     lua_pop(L, 2); /* original and modified strings */
 }
 
+#define luaV_newtype(typ,tname,luatyp,luatname) \
+       static luatyp * \
+    luaV_new##tname (lua_State *L, typ *obj) \
+    { \
+       luatyp *o = (luatyp *) lua_newuserdata(L, sizeof(luatyp)); \
+       *o = obj; \
+       luaV_setudata(L, obj); /* cache[obj] = udata */ \
+       luaV_getfield(L, luatname); \
+       lua_setmetatable(L, -2); \
+       return o; \
+    }
 
-/* =======   Buffer type   ======= */
+#define luaV_pushtype(typ,tname,luatyp) \
+       static luatyp * \
+    luaV_push##tname (lua_State *L, typ *obj) \
+    { \
+       luatyp *o = NULL; \
+       if (obj == NULL) \
+           lua_pushnil(L); \
+       else { \
+           luaV_getudata(L, obj); \
+           if (lua_isnil(L, -1)) /* not interned? */ \
+           { \
+               lua_pop(L, 1); \
+               o = luaV_new##tname(L, obj); \
+           } \
+           else \
+               o = (luatyp *) lua_touserdata(L, -1); \
+       } \
+       return o; \
+    }
+
+#define luaV_type_tostring(tname,luatname) \
+       static int \
+    luaV_##tname##_tostring (lua_State *L) \
+    { \
+       lua_pushfstring(L, "%s: %p", luatname, lua_touserdata(L, 1)); \
+       return 1; \
+    }
 
-    static luaV_Buffer *
-luaV_newbuffer(lua_State *L, buf_T *buf)
+/* =======   List type   ======= */
+
+    static luaV_List *
+luaV_newlist (lua_State *L, list_T *lis)
 {
-    luaV_Buffer *b = (luaV_Buffer *) lua_newuserdata(L, sizeof(luaV_Buffer));
-    *b = buf;
-    lua_pushlightuserdata(L, (void *) buf);
-    lua_pushvalue(L, -2);
-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[buf] = udata */
-    /* to avoid GC, store as key in env */
-    lua_pushvalue(L, -1);
-    lua_pushboolean(L, 1);
-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
-    /* set metatable */
-    luaV_getfield(L, LUAVIM_BUFFER);
+    luaV_List *l = (luaV_List *) lua_newuserdata(L, sizeof(luaV_List));
+    *l = lis;
+    lis->lv_refcount++; /* reference in Lua */
+    luaV_setudata(L, lis); /* cache[lis] = udata */
+    luaV_getfield(L, LUAVIM_LIST);
     lua_setmetatable(L, -2);
-    return b;
+    return l;
 }
 
-    static luaV_Buffer *
-luaV_pushbuffer (lua_State *L, buf_T *buf)
+luaV_pushtype(list_T, list, luaV_List)
+luaV_type_tostring(list, LUAVIM_LIST)
+
+    static int
+luaV_list_len (lua_State *L)
 {
-    luaV_Buffer *b = NULL;
-    if (buf == NULL)
-       lua_pushnil(L);
-    else {
-       lua_pushlightuserdata(L, (void *) buf);
-       lua_rawget(L, LUA_ENVIRONINDEX);
-       if (lua_isnil(L, -1)) /* not interned? */
+    list_T *l = luaV_unbox(L, luaV_List, 1);
+    lua_pushinteger(L, (l == NULL) ? 0 : (int) l->lv_len);
+    return 1;
+}
+
+    static int
+luaV_list_iter (lua_State *L)
+{
+    listitem_T *li = (listitem_T *) lua_touserdata(L, lua_upvalueindex(2));
+    if (li == NULL) return 0;
+    luaV_pushtypval(L, &li->li_tv);
+    lua_pushlightuserdata(L, (void *) li->li_next);
+    lua_replace(L, lua_upvalueindex(2));
+    return 1;
+}
+
+    static int
+luaV_list_call (lua_State *L)
+{
+    list_T *l = luaV_unbox(L, luaV_List, 1);
+    lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
+    lua_pushlightuserdata(L, (void *) l->lv_first);
+    lua_pushcclosure(L, luaV_list_iter, 2);
+    return 1;
+}
+
+    static int
+luaV_list_index (lua_State *L)
+{
+    list_T *l = luaV_unbox(L, luaV_List, 1);
+    if (lua_isnumber(L, 2)) /* list item? */
+    {
+       listitem_T *li = list_find(l, (long) luaL_checkinteger(L, 2));
+       if (li == NULL)
+           lua_pushnil(L);
+       else
+           luaV_pushtypval(L, &li->li_tv);
+    }
+    else if (lua_isstring(L, 2)) /* method? */
+    {
+       const char *s = lua_tostring(L, 2);
+       if (strncmp(s, "add", 3) == 0
+               || strncmp(s, "insert", 6) == 0)
        {
-           lua_pop(L, 1);
-           b = luaV_newbuffer(L, buf);
+           lua_getmetatable(L, 1);
+           lua_getfield(L, -1, s);
        }
        else
-           b = (luaV_Buffer *) lua_touserdata(L, -1);
+           lua_pushnil(L);
     }
-    return b;
+    else
+       lua_pushnil(L);
+    return 1;
 }
 
-/* Buffer metamethods */
+    static int
+luaV_list_newindex (lua_State *L)
+{
+    list_T *l = luaV_unbox(L, luaV_List, 1);
+    long n = (long) luaL_checkinteger(L, 2);
+    listitem_T *li;
+    if (l->lv_lock)
+       luaL_error(L, "list is locked");
+    li = list_find(l, n);
+    if (li == NULL) return 0;
+    if (lua_isnil(L, 3)) /* remove? */
+    {
+       list_remove(l, li, li);
+       clear_tv(&li->li_tv);
+       vim_free(li);
+    }
+    else
+    {
+       typval_T v;
+       luaV_totypval(L, 3, &v);
+       clear_tv(&li->li_tv);
+       copy_tv(&v, &li->li_tv);
+       clear_tv(&v);
+    }
+    return 0;
+}
 
     static int
-luaV_buffer_tostring(lua_State *L)
+luaV_list_add (lua_State *L)
 {
-    lua_pushfstring(L, "%s: %p", LUAVIM_BUFFER, lua_touserdata(L, 1));
+    luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
+    list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
+    typval_T v;
+    if (l->lv_lock)
+       luaL_error(L, "list is locked");
+    lua_settop(L, 2);
+    luaV_totypval(L, 2, &v);
+    if (list_append_tv(l, &v) == FAIL)
+    {
+       clear_tv(&v);
+       luaL_error(L, "Failed to add item to list");
+    }
+    clear_tv(&v);
+    lua_settop(L, 1);
     return 1;
 }
 
     static int
+luaV_list_insert (lua_State *L)
+{
+    luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
+    list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
+    long pos = luaL_optlong(L, 3, 0);
+    listitem_T *li = NULL;
+    typval_T v;
+    if (l->lv_lock)
+       luaL_error(L, "list is locked");
+    if (pos < l->lv_len)
+    {
+       li = list_find(l, pos);
+       if (li == NULL)
+           luaL_error(L, "invalid position");
+    }
+    lua_settop(L, 2);
+    luaV_totypval(L, 2, &v);
+    if (list_insert_tv(l, &v, li) == FAIL)
+    {
+       clear_tv(&v);
+       luaL_error(L, "Failed to add item to list");
+    }
+    clear_tv(&v);
+    lua_settop(L, 1);
+    return 1;
+}
+
+static const luaL_Reg luaV_List_mt[] = {
+    {"__tostring", luaV_list_tostring},
+    {"__len", luaV_list_len},
+    {"__call", luaV_list_call},
+    {"__index", luaV_list_index},
+    {"__newindex", luaV_list_newindex},
+    {"add", luaV_list_add},
+    {"insert", luaV_list_insert},
+    {NULL, NULL}
+};
+
+
+/* =======   Dict type   ======= */
+
+    static luaV_Dict *
+luaV_newdict (lua_State *L, dict_T *dic)
+{
+    luaV_Dict *d = (luaV_Dict *) lua_newuserdata(L, sizeof(luaV_Dict));
+    *d = dic;
+    dic->dv_refcount++; /* reference in Lua */
+    luaV_setudata(L, dic); /* cache[dic] = udata */
+    luaV_getfield(L, LUAVIM_DICT);
+    lua_setmetatable(L, -2);
+    return d;
+}
+
+luaV_pushtype(dict_T, dict, luaV_Dict)
+luaV_type_tostring(dict, LUAVIM_DICT)
+
+    static int
+luaV_dict_len (lua_State *L)
+{
+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+    lua_pushinteger(L, (d == NULL) ? 0 : (int) d->dv_hashtab.ht_used);
+    return 1;
+}
+
+    static int
+luaV_dict_iter (lua_State *L UNUSED)
+{
+#ifdef FEAT_EVAL
+    hashitem_T *hi = (hashitem_T *) lua_touserdata(L, lua_upvalueindex(2));
+    int n = lua_tointeger(L, lua_upvalueindex(3));
+    dictitem_T *di;
+    if (n <= 0) return 0;
+    while (HASHITEM_EMPTY(hi)) hi++;
+    di = dict_lookup(hi);
+    lua_pushstring(L, (char *) hi->hi_key);
+    luaV_pushtypval(L, &di->di_tv);
+    lua_pushlightuserdata(L, (void *) (hi + 1));
+    lua_replace(L, lua_upvalueindex(2));
+    lua_pushinteger(L, n - 1);
+    lua_replace(L, lua_upvalueindex(3));
+    return 2;
+#else
+    return 0;
+#endif
+}
+
+    static int
+luaV_dict_call (lua_State *L)
+{
+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+    hashtab_T *ht = &d->dv_hashtab;
+    lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
+    lua_pushlightuserdata(L, (void *) ht->ht_array);
+    lua_pushinteger(L, ht->ht_used); /* # remaining items */
+    lua_pushcclosure(L, luaV_dict_iter, 3);
+    return 1;
+}
+
+    static int
+luaV_dict_index (lua_State *L)
+{
+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+    char_u *key = (char_u *) luaL_checkstring(L, 2);
+    dictitem_T *di = dict_find(d, key, -1);
+    if (di == NULL)
+       lua_pushnil(L);
+    else
+       luaV_pushtypval(L, &di->di_tv);
+    return 1;
+}
+
+    static int
+luaV_dict_newindex (lua_State *L)
+{
+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+    char_u *key = (char_u *) luaL_checkstring(L, 2);
+    dictitem_T *di;
+    if (d->dv_lock)
+       luaL_error(L, "dict is locked");
+    di = dict_find(d, key, -1);
+    if (di == NULL) /* non-existing key? */
+    {
+       if (lua_isnil(L, 3)) return 0;
+       di = dictitem_alloc(key);
+       if (di == NULL) return 0;
+       if (dict_add(d, di) == FAIL)
+       {
+               vim_free(di);
+               return 0;
+       }
+    }
+    else
+       clear_tv(&di->di_tv);
+    if (lua_isnil(L, 3)) /* remove? */
+    {
+       hashitem_T *hi = hash_find(&d->dv_hashtab, di->di_key);
+       hash_remove(&d->dv_hashtab, hi);
+       dictitem_free(di);
+    }
+    else {
+       typval_T v;
+       luaV_totypval(L, 3, &v);
+       copy_tv(&v, &di->di_tv);
+       clear_tv(&v);
+    }
+    return 0;
+}
+
+static const luaL_Reg luaV_Dict_mt[] = {
+    {"__tostring", luaV_dict_tostring},
+    {"__len", luaV_dict_len},
+    {"__call", luaV_dict_call},
+    {"__index", luaV_dict_index},
+    {"__newindex", luaV_dict_newindex},
+    {NULL, NULL}
+};
+
+
+/* =======   Buffer type   ======= */
+
+luaV_newtype(buf_T, buffer, luaV_Buffer, LUAVIM_BUFFER)
+luaV_pushtype(buf_T, buffer, luaV_Buffer)
+luaV_type_tostring(buffer, LUAVIM_BUFFER)
+
+    static int
 luaV_buffer_len(lua_State *L)
 {
-    luaV_Buffer *b = lua_touserdata(L, 1);
-    lua_pushinteger(L, (*b)->b_ml.ml_line_count);
+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+    lua_pushinteger(L, b->b_ml.ml_line_count);
     return 1;
 }
 
     static int
 luaV_buffer_call(lua_State *L)
 {
-    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
     lua_settop(L, 1);
-    set_curbuf(*b, DOBUF_SPLIT);
+    set_curbuf(b, DOBUF_SPLIT);
     return 1;
 }
 
     static int
 luaV_buffer_index(lua_State *L)
 {
-    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
     linenr_T n = (linenr_T) lua_tointeger(L, 2);
-    if (n > 0 && n <= (*b)->b_ml.ml_line_count)
-       luaV_pushline(L, *b, n);
+    if (n > 0 && n <= b->b_ml.ml_line_count)
+       luaV_pushline(L, b, n);
     else if (lua_isstring(L, 2))
     {
        const char *s = lua_tostring(L, 2);
        if (strncmp(s, "name", 4) == 0)
-           lua_pushstring(L, (char *) (*b)->b_sfname);
+           lua_pushstring(L, (char *) b->b_sfname);
        else if (strncmp(s, "fname", 5) == 0)
-           lua_pushstring(L, (char *) (*b)->b_ffname);
+           lua_pushstring(L, (char *) b->b_ffname);
        else if (strncmp(s, "number", 6) == 0)
-           lua_pushinteger(L, (*b)->b_fnum);
+           lua_pushinteger(L, b->b_fnum);
        /* methods */
        else if (strncmp(s,   "insert", 6) == 0
                || strncmp(s, "next", 4) == 0
@@ -582,17 +987,17 @@ luaV_buffer_index(lua_State *L)
     static int
 luaV_buffer_newindex(lua_State *L)
 {
-    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
     linenr_T n = (linenr_T) luaL_checkinteger(L, 2);
 #ifdef HAVE_SANDBOX
     luaV_checksandbox(L);
 #endif
-    if (n < 1 || n > (*b)->b_ml.ml_line_count)
+    if (n < 1 || n > b->b_ml.ml_line_count)
        luaL_error(L, "invalid line number");
     if (lua_isnil(L, 3)) /* delete line */
     {
        buf_T *buf = curbuf;
-       curbuf = *b;
+       curbuf = b;
        if (u_savedel(n, 1L) == FAIL)
        {
            curbuf = buf;
@@ -605,7 +1010,7 @@ luaV_buffer_newindex(lua_State *L)
        }
        else {
            deleted_lines_mark(n, 1L);
-           if (*b == curwin->w_buffer) /* fix cursor in current window? */
+           if (b == curwin->w_buffer) /* fix cursor in current window? */
            {
                if (curwin->w_cursor.lnum >= n)
                {
@@ -625,7 +1030,7 @@ luaV_buffer_newindex(lua_State *L)
     else if (lua_isstring(L, 3)) /* update line */
     {
        buf_T *buf = curbuf;
-       curbuf = *b;
+       curbuf = b;
        if (u_savesub(n) == FAIL)
        {
            curbuf = buf;
@@ -638,7 +1043,7 @@ luaV_buffer_newindex(lua_State *L)
        }
        else changed_bytes(n, 0);
        curbuf = buf;
-       if (*b == curwin->w_buffer)
+       if (b == curwin->w_buffer)
            check_cursor_col();
     }
     else
@@ -649,8 +1054,9 @@ luaV_buffer_newindex(lua_State *L)
     static int
 luaV_buffer_insert(lua_State *L)
 {
-    luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
-    linenr_T last = (*b)->b_ml.ml_line_count;
+    luaV_Buffer *lb = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+    buf_T *b = (buf_T *) luaV_checkcache(L, (void *) *lb);
+    linenr_T last = b->b_ml.ml_line_count;
     linenr_T n = (linenr_T) luaL_optinteger(L, 3, last);
     buf_T *buf;
     luaL_checktype(L, 2, LUA_TSTRING);
@@ -662,7 +1068,7 @@ luaV_buffer_insert(lua_State *L)
     if (n > last) n = last;
     /* insert */
     buf = curbuf;
-    curbuf = *b;
+    curbuf = b;
     if (u_save(n, n + 1) == FAIL)
     {
        curbuf = buf;
@@ -684,7 +1090,8 @@ luaV_buffer_insert(lua_State *L)
 luaV_buffer_next(lua_State *L)
 {
     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
-    luaV_pushbuffer(L, (*b)->b_next);
+    buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
+    luaV_pushbuffer(L, buf->b_next);
     return 1;
 }
 
@@ -692,7 +1099,8 @@ luaV_buffer_next(lua_State *L)
 luaV_buffer_previous(lua_State *L)
 {
     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
-    luaV_pushbuffer(L, (*b)->b_prev);
+    buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
+    luaV_pushbuffer(L, buf->b_prev);
     return 1;
 }
 
@@ -700,8 +1108,7 @@ luaV_buffer_previous(lua_State *L)
 luaV_buffer_isvalid(lua_State *L)
 {
     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
-    lua_pushlightuserdata(L, (void *) (*b));
-    lua_rawget(L, LUA_ENVIRONINDEX);
+    luaV_getudata(L, *b);
     lua_pushboolean(L, !lua_isnil(L, -1));
     return 1;
 }
@@ -722,78 +1129,36 @@ static const luaL_Reg luaV_Buffer_mt[] = {
 
 /* =======   Window type   ======= */
 
-    static luaV_Window *
-luaV_newwindow(lua_State *L, win_T *win)
-{
-    luaV_Window *w = (luaV_Window *) lua_newuserdata(L, sizeof(luaV_Window));
-    *w = win;
-    lua_pushlightuserdata(L, (void *) win);
-    lua_pushvalue(L, -2);
-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[win] = udata */
-    /* to avoid GC, store as key in env */
-    lua_pushvalue(L, -1);
-    lua_pushboolean(L, 1);
-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
-    /* set metatable */
-    luaV_getfield(L, LUAVIM_WINDOW);
-    lua_setmetatable(L, -2);
-    return w;
-}
-
-    static luaV_Window *
-luaV_pushwindow(lua_State *L, win_T *win)
-{
-    luaV_Window *w = NULL;
-    if (win == NULL)
-       lua_pushnil(L);
-    else {
-       lua_pushlightuserdata(L, (void *) win);
-       lua_rawget(L, LUA_ENVIRONINDEX);
-       if (lua_isnil(L, -1)) /* not interned? */
-       {
-           lua_pop(L, 1);
-           w = luaV_newwindow(L, win);
-       }
-       else w = (luaV_Window *) lua_touserdata(L, -1);
-    }
-    return w;
-}
-
-/* Window metamethods */
-
-    static int
-luaV_window_tostring(lua_State *L)
-{
-    lua_pushfstring(L, "%s: %p", LUAVIM_WINDOW, lua_touserdata(L, 1));
-    return 1;
-}
+luaV_newtype(win_T, window, luaV_Window, LUAVIM_WINDOW)
+luaV_pushtype(win_T, window, luaV_Window)
+luaV_type_tostring(window, LUAVIM_WINDOW)
 
     static int
 luaV_window_call(lua_State *L)
 {
-    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
     lua_settop(L, 1);
-    win_goto(*w);
+    win_goto(w);
     return 1;
 }
 
     static int
 luaV_window_index(lua_State *L)
 {
-    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
     const char *s = luaL_checkstring(L, 2);
     if (strncmp(s, "buffer", 6) == 0)
-       luaV_pushbuffer(L, (*w)->w_buffer);
+       luaV_pushbuffer(L, w->w_buffer);
     else if (strncmp(s, "line", 4) == 0)
-       lua_pushinteger(L, (*w)->w_cursor.lnum);
+       lua_pushinteger(L, w->w_cursor.lnum);
     else if (strncmp(s, "col", 3) == 0)
-       lua_pushinteger(L, (*w)->w_cursor.col + 1);
+       lua_pushinteger(L, w->w_cursor.col + 1);
 #ifdef FEAT_VERTSPLIT
     else if (strncmp(s, "width", 5) == 0)
-       lua_pushinteger(L, W_WIDTH((*w)));
+       lua_pushinteger(L, W_WIDTH(w));
 #endif
     else if (strncmp(s, "height", 6) == 0)
-       lua_pushinteger(L, (*w)->w_height);
+       lua_pushinteger(L, w->w_height);
     /* methods */
     else if (strncmp(s,   "next", 4) == 0
            || strncmp(s, "previous", 8) == 0
@@ -810,7 +1175,7 @@ luaV_window_index(lua_State *L)
     static int
 luaV_window_newindex (lua_State *L)
 {
-    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
     const char *s = luaL_checkstring(L, 2);
     int v = luaL_checkinteger(L, 3);
     if (strncmp(s, "line", 4) == 0)
@@ -818,9 +1183,9 @@ luaV_window_newindex (lua_State *L)
 #ifdef HAVE_SANDBOX
        luaV_checksandbox(L);
 #endif
-       if (v < 1 || v > (*w)->w_buffer->b_ml.ml_line_count)
+       if (v < 1 || v > w->w_buffer->b_ml.ml_line_count)
            luaL_error(L, "line out of range");
-       (*w)->w_cursor.lnum = v;
+       w->w_cursor.lnum = v;
        update_screen(VALID);
     }
     else if (strncmp(s, "col", 3) == 0)
@@ -828,7 +1193,7 @@ luaV_window_newindex (lua_State *L)
 #ifdef HAVE_SANDBOX
        luaV_checksandbox(L);
 #endif
-       (*w)->w_cursor.col = v - 1;
+       w->w_cursor.col = v - 1;
        update_screen(VALID);
     }
 #ifdef FEAT_VERTSPLIT
@@ -838,7 +1203,7 @@ luaV_window_newindex (lua_State *L)
 #ifdef FEAT_GUI
        need_mouse_correct = TRUE;
 #endif
-       curwin = *w;
+       curwin = w;
        win_setwidth(v);
        curwin = win;
     }
@@ -849,7 +1214,7 @@ luaV_window_newindex (lua_State *L)
 #ifdef FEAT_GUI
        need_mouse_correct = TRUE;
 #endif
-       curwin = *w;
+       curwin = w;
        win_setheight(v);
        curwin = win;
     }
@@ -862,7 +1227,8 @@ luaV_window_newindex (lua_State *L)
 luaV_window_next(lua_State *L)
 {
     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
-    luaV_pushwindow(L, (*w)->w_next);
+    win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
+    luaV_pushwindow(L, win->w_next);
     return 1;
 }
 
@@ -870,7 +1236,8 @@ luaV_window_next(lua_State *L)
 luaV_window_previous(lua_State *L)
 {
     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
-    luaV_pushwindow(L, (*w)->w_prev);
+    win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
+    luaV_pushwindow(L, win->w_prev);
     return 1;
 }
 
@@ -878,8 +1245,7 @@ luaV_window_previous(lua_State *L)
 luaV_window_isvalid(lua_State *L)
 {
     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
-    lua_pushlightuserdata(L, (void *) (*w));
-    lua_rawget(L, LUA_ENVIRONINDEX);
+    luaV_getudata(L, *w);
     lua_pushboolean(L, !lua_isnil(L, -1));
     return 1;
 }
@@ -925,6 +1291,31 @@ luaV_print(lua_State *L)
 }
 
     static int
+luaV_debug(lua_State *L)
+{
+    lua_settop(L, 0);
+    lua_getglobal(L, "vim");
+    lua_getfield(L, -1, "eval");
+    lua_remove(L, -2); /* vim.eval at position 1 */
+    for (;;)
+    {
+       const char *input;
+       size_t l;
+       lua_pushvalue(L, 1); /* vim.eval */
+       lua_pushliteral(L, "input('lua_debug> ')");
+       lua_call(L, 1, 1); /* return string */
+       input = lua_tolstring(L, -1, &l);
+       if (l == 0 || strcmp(input, "cont") == 0)
+           return 0;
+       msg_putchar('\n'); /* avoid outputting on input line */
+       if (luaL_loadbuffer(L, input, l, "=(debug command)")
+               || lua_pcall(L, 0, 0, 0))
+           luaV_emsg(L);
+       lua_settop(L, 1); /* remove eventual returns, but keep vim.eval */
+    }
+}
+
+    static int
 luaV_command(lua_State *L)
 {
     do_cmdline_cmd((char_u *) luaL_checkstring(L, 1));
@@ -938,6 +1329,7 @@ luaV_eval(lua_State *L)
     typval_T *tv = eval_expr((char_u *) luaL_checkstring(L, 1), NULL);
     if (tv == NULL) luaL_error(L, "invalid expression");
     luaV_pushtypval(L, tv);
+    free_tv(tv);
     return 1;
 }
 
@@ -956,6 +1348,28 @@ luaV_line(lua_State *L)
 }
 
     static int
+luaV_list(lua_State *L)
+{
+    list_T *l = list_alloc();
+    if (l == NULL)
+       lua_pushnil(L);
+    else
+       luaV_newlist(L, l);
+    return 1;
+}
+
+    static int
+luaV_dict(lua_State *L)
+{
+    dict_T *d = dict_alloc();
+    if (d == NULL)
+       lua_pushnil(L);
+    else
+       luaV_newdict(L, d);
+    return 1;
+}
+
+    static int
 luaV_buffer(lua_State *L)
 {
     buf_T *buf;
@@ -981,15 +1395,10 @@ luaV_buffer(lua_State *L)
                    break;
            }
        }
-       if (buf == NULL) /* not found? */
-           lua_pushnil(L);
-       else
-           luaV_pushbuffer(L, buf);
     }
-    else {
+    else
        buf = (lua_toboolean(L, 1)) ? firstbuf : curbuf; /* first buffer? */
-       luaV_pushbuffer(L, buf);
-    }
+    luaV_pushbuffer(L, buf);
     return 1;
 }
 
@@ -1002,59 +1411,62 @@ luaV_window(lua_State *L)
        int n = lua_tointeger(L, 1);
        for (win = firstwin; win != NULL; win = win->w_next, n--)
            if (n == 1) break;
-       if (win == NULL) /* not found? */
-           lua_pushnil(L);
-       else
-           luaV_pushwindow(L, win);
     }
-    else {
+    else
        win = (lua_toboolean(L, 1)) ? firstwin : curwin; /* first window? */
-       luaV_pushwindow(L, win);
-    }
+    luaV_pushwindow(L, win);
     return 1;
 }
 
     static int
 luaV_open(lua_State *L)
 {
-    luaV_Buffer *b;
     char_u *s = NULL;
 #ifdef HAVE_SANDBOX
     luaV_checksandbox(L);
 #endif
     if (lua_isstring(L, 1)) s = (char_u *) lua_tostring(L, 1);
-    b = luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
+    luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
     return 1;
 }
 
     static int
-luaV_isbuffer(lua_State *L)
+luaV_type(lua_State *L)
 {
-    lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_BUFFER) != NULL);
-    return 1;
-}
-
-    static int
-luaV_iswindow(lua_State *L)
-{
-    lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_WINDOW) != NULL);
-    return 1;
-}
-
-/* for freeing buffer and window objects; lightuserdata as arg */
-    static int
-luaV_free(lua_State *L)
-{
-    lua_pushvalue(L, 1); /* lightudata */
-    lua_rawget(L, LUA_ENVIRONINDEX);
-    if (!lua_isnil(L, -1))
+    luaL_checkany(L, 1);
+    if (lua_type(L, 1) == LUA_TUSERDATA) /* check vim udata? */
     {
-       lua_pushnil(L);
-       lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = nil */
-       lua_pushnil(L);
-       lua_rawset(L, LUA_ENVIRONINDEX); /* env[lightudata] = nil */
+       lua_settop(L, 1);
+       if (lua_getmetatable(L, 1))
+       {
+           luaV_getfield(L, LUAVIM_LIST);
+           if (lua_rawequal(L, -1, 2))
+           {
+               lua_pushstring(L, "list");
+               return 1;
+           }
+           luaV_getfield(L, LUAVIM_DICT);
+           if (lua_rawequal(L, -1, 2))
+           {
+               lua_pushstring(L, "dict");
+               return 1;
+           }
+           luaV_getfield(L, LUAVIM_BUFFER);
+           if (lua_rawequal(L, -1, 2))
+           {
+               lua_pushstring(L, "buffer");
+               return 1;
+           }
+           luaV_getfield(L, LUAVIM_WINDOW);
+           if (lua_rawequal(L, -1, 2))
+           {
+               lua_pushstring(L, "window");
+               return 1;
+           }
+       }
     }
-    return 0;
+    lua_pushstring(L, luaL_typename(L, 1)); /* fallback */
+    return 1;
 }
 
 static const luaL_Reg luaV_module[] = {
@@ -1062,37 +1474,128 @@ static const luaL_Reg luaV_module[] = {
     {"eval", luaV_eval},
     {"beep", luaV_beep},
     {"line", luaV_line},
+    {"list", luaV_list},
+    {"dict", luaV_dict},
     {"buffer", luaV_buffer},
     {"window", luaV_window},
     {"open", luaV_open},
-    {"isbuffer", luaV_isbuffer},
-    {"iswindow", luaV_iswindow},
+    {"type", luaV_type},
     {NULL, NULL}
 };
 
+/* for freeing list, dict, buffer and window objects; lightuserdata as arg */
+    static int
+luaV_free(lua_State *L)
+{
+    lua_pushnil(L);
+    luaV_setudata(L, lua_touserdata(L, 1));
+    return 0;
+}
+
+    static int
+luaV_luaeval (lua_State *L)
+{
+    luaL_Buffer b;
+    size_t l;
+    const char *str = lua_tolstring(L, 1, &l);
+    typval_T *arg = (typval_T *) lua_touserdata(L, 2);
+    typval_T *rettv = (typval_T *) lua_touserdata(L, 3);
+    luaL_buffinit(L, &b);
+    luaL_addlstring(&b, LUAVIM_EVALHEADER, sizeof(LUAVIM_EVALHEADER) - 1);
+    luaL_addlstring(&b, str, l);
+    luaL_pushresult(&b);
+    str = lua_tolstring(L, -1, &l);
+    if (luaL_loadbuffer(L, str, l, LUAVIM_EVALNAME)) /* compile error? */
+    {
+       luaV_emsg(L);
+       return 0;
+    }
+    luaV_pushtypval(L, arg);
+    if (lua_pcall(L, 1, 1, 0)) /* running error? */
+    {
+       luaV_emsg(L);
+       return 0;
+    }
+    luaV_totypval(L, -1, rettv);
+    return 0;
+}
+
+    static int
+luaV_setref (lua_State *L)
+{
+    int copyID = lua_tointeger(L, 1);
+    typval_T tv;
+    luaV_getfield(L, LUAVIM_LIST);
+    luaV_getfield(L, LUAVIM_DICT);
+    lua_pushnil(L);
+    while (lua_next(L, lua_upvalueindex(1)) != 0) /* traverse cache table */
+    {
+       lua_getmetatable(L, -1);
+       if (lua_rawequal(L, -1, 2)) /* list? */
+       {
+           tv.v_type = VAR_LIST;
+           tv.vval.v_list = (list_T *) lua_touserdata(L, 4); /* key */
+       }
+       else if (lua_rawequal(L, -1, 3)) /* dict? */
+       {
+           tv.v_type = VAR_DICT;
+           tv.vval.v_dict = (dict_T *) lua_touserdata(L, 4); /* key */
+       }
+       lua_pop(L, 2); /* metatable and value */
+       set_ref_in_item(&tv, copyID);
+    }
+    return 0;
+}
+
     static int
 luaopen_vim(lua_State *L)
 {
-    /* set environment */
+    /* set cache table */
     lua_newtable(L);
     lua_newtable(L);
-    lua_pushliteral(L, "v");
+    lua_pushstring(L, "v");
     lua_setfield(L, -2, "__mode");
-    lua_setmetatable(L, -2);
-    lua_replace(L, LUA_ENVIRONINDEX);
+    lua_setmetatable(L, -2); /* cache is weak-valued */
     /* print */
     lua_pushcfunction(L, luaV_print);
     lua_setglobal(L, "print");
+    /* debug.debug */
+    lua_getglobal(L, "debug");
+    lua_pushcfunction(L, luaV_debug);
+    lua_setfield(L, -2, "debug");
+    lua_pop(L, 1);
     /* free */
     lua_pushlightuserdata(L, (void *) LUAVIM_FREE);
-    lua_pushcfunction(L, luaV_free);
+    lua_pushvalue(L, 1); /* cache table */
+    lua_pushcclosure(L, luaV_free, 1);
+    lua_rawset(L, LUA_REGISTRYINDEX);
+    /* luaeval */
+    lua_pushlightuserdata(L, (void *) LUAVIM_LUAEVAL);
+    lua_pushvalue(L, 1); /* cache table */
+    lua_pushcclosure(L, luaV_luaeval, 1);
+    lua_rawset(L, LUA_REGISTRYINDEX);
+    /* setref */
+    lua_pushlightuserdata(L, (void *) LUAVIM_SETREF);
+    lua_pushvalue(L, 1); /* cache table */
+    lua_pushcclosure(L, luaV_setref, 1);
     lua_rawset(L, LUA_REGISTRYINDEX);
     /* register */
+    luaV_newmetatable(L, LUAVIM_LIST);
+    lua_pushvalue(L, 1);
+    luaV_openlib(L, luaV_List_mt, 1);
+    luaV_newmetatable(L, LUAVIM_DICT);
+    lua_pushvalue(L, 1);
+    luaV_openlib(L, luaV_Dict_mt, 1);
     luaV_newmetatable(L, LUAVIM_BUFFER);
-    luaL_register(L, NULL, luaV_Buffer_mt);
+    lua_pushvalue(L, 1); /* cache table */
+    luaV_openlib(L, luaV_Buffer_mt, 1);
     luaV_newmetatable(L, LUAVIM_WINDOW);
-    luaL_register(L, NULL, luaV_Window_mt);
-    luaL_register(L, LUAVIM_NAME, luaV_module);
+    lua_pushvalue(L, 1); /* cache table */
+    luaV_openlib(L, luaV_Window_mt, 1);
+    lua_newtable(L); /* vim table */
+    lua_pushvalue(L, 1); /* cache table */
+    luaV_openlib(L, luaV_module, 1);
+    lua_setglobal(L, LUAVIM_NAME);
     return 0;
 }
 
@@ -1123,7 +1626,7 @@ luaV_setrange(lua_State *L, int line1, int line2)
 static lua_State *L = NULL;
 
     static int
-lua_is_open(void)
+lua_isopen(void)
 {
     return L != NULL;
 }
@@ -1131,7 +1634,7 @@ lua_is_open(void)
     static int
 lua_init(void)
 {
-    if (L == NULL)
+    if (!lua_isopen())
     {
 #ifdef DYNAMIC_LUA
        if (!lua_enabled(TRUE))
@@ -1148,7 +1651,7 @@ lua_init(void)
     void
 lua_end(void)
 {
-    if (L != NULL)
+    if (lua_isopen())
     {
        lua_close(L);
        L = NULL;
@@ -1191,7 +1694,7 @@ ex_luado(exarg_T *eap)
     }
     luaV_setrange(L, eap->line1, eap->line2);
     luaL_buffinit(L, &b);
-    luaL_addlstring(&b, "return function(line) ", 22); /* header */
+    luaL_addlstring(&b, "return function(line, linenr) ", 30); /* header */
     luaL_addlstring(&b, s, strlen(s));
     luaL_addlstring(&b, " end", 4); /* footer */
     luaL_pushresult(&b);
@@ -1208,7 +1711,8 @@ ex_luado(exarg_T *eap)
     {
        lua_pushvalue(L, -1); /* function */
        luaV_pushline(L, curbuf, l); /* current line as arg */
-       if (lua_pcall(L, 1, 1, 0))
+       lua_pushinteger(L, l); /* current line number as arg */
+       if (lua_pcall(L, 2, 1, 0))
        {
            luaV_emsg(L);
            break;
@@ -1242,23 +1746,36 @@ ex_luafile(exarg_T *eap)
     }
 }
 
-/* buffer */
+#define luaV_freetype(typ,tname) \
+       void \
+    lua_##tname##_free(typ *o) \
+    { \
+       if (!lua_isopen()) return; \
+       luaV_getfield(L, LUAVIM_FREE); \
+       lua_pushlightuserdata(L, (void *) o); \
+       lua_call(L, 1, 0); \
+    }
+
+luaV_freetype(buf_T, buffer)
+luaV_freetype(win_T, window)
+
     void
-lua_buffer_free(buf_T *buf)
+do_luaeval (char_u *str, typval_T *arg, typval_T *rettv)
 {
-    if (!lua_is_open()) return;
-    luaV_getfield(L, LUAVIM_FREE);
-    lua_pushlightuserdata(L, (void *) buf);
-    lua_call(L, 1, 0);
+    lua_init();
+    luaV_getfield(L, LUAVIM_LUAEVAL);
+    lua_pushstring(L, (char *) str);
+    lua_pushlightuserdata(L, (void *) arg);
+    lua_pushlightuserdata(L, (void *) rettv);
+    lua_call(L, 3, 0);
 }
 
-/* window */
     void
-lua_window_free(win_T *win)
+set_ref_in_lua (int copyID)
 {
-    if (!lua_is_open()) return;
-    luaV_getfield(L, LUAVIM_FREE);
-    lua_pushlightuserdata(L, (void *) win);
+    if (!lua_isopen()) return;
+    luaV_getfield(L, LUAVIM_SETREF);
+    lua_pushinteger(L, copyID);
     lua_call(L, 1, 0);
 }
 
index f31ea06..8dd2134 100644 (file)
@@ -1,11 +1,9 @@
 /* vi:set ts=8 sts=4 sw=4:
  *
  * MzScheme interface by Sergey Khorev <sergey.khorev@gmail.com>
- * Original work by Brent Fulgham <bfulgham@debian.org>
+ * Based on work by Brent Fulgham <bfulgham@debian.org>
  * (Based on lots of help from Matthew Flatt)
  *
- * TODO Convert byte-strings to char strings?
- *
  * This consists of six parts:
  * 1. MzScheme interpreter main program
  * 2. Routines that handle the external interface between MzScheme and
@@ -31,8 +29,6 @@
  * depend". */
 #if defined(FEAT_MZSCHEME) || defined(PROTO)
 
-#include <assert.h>
-
 /* Base data structures */
 #define SCHEME_VIMBUFFERP(obj)  SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type)
 #define SCHEME_VIMWINDOWP(obj)  SAME_TYPE(SCHEME_TYPE(obj), mz_window_type)
@@ -144,7 +140,12 @@ static int vim_error_check(void);
 static int do_mzscheme_command(exarg_T *, void *, Scheme_Closed_Prim *what);
 static void startup_mzscheme(void);
 static char *string_to_line(Scheme_Object *obj);
-static void do_output(char *mesg, long len);
+#if MZSCHEME_VERSION_MAJOR >= 500
+# define OUTPUT_LEN_TYPE intptr_t
+#else
+# define OUTPUT_LEN_TYPE long
+#endif
+static void do_output(char *mesg, OUTPUT_LEN_TYPE len);
 static void do_printf(char *format, ...);
 static void do_flush(void);
 static Scheme_Object *_apply_thunk_catch_exceptions(
@@ -168,10 +169,13 @@ static void init_exn_catching_apply(void);
 static int mzscheme_env_main(Scheme_Env *env, int argc, char **argv);
 static int mzscheme_init(void);
 #ifdef FEAT_EVAL
-static Scheme_Object *vim_to_mzscheme(typval_T *vim_value, int depth,
+static Scheme_Object *vim_to_mzscheme(typval_T *vim_value);
+static Scheme_Object *vim_to_mzscheme_impl(typval_T *vim_value, int depth,
        Scheme_Hash_Table *visited);
-static int mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
+static int mzscheme_to_vim(Scheme_Object *obj, typval_T *tv);
+static int mzscheme_to_vim_impl(Scheme_Object *obj, typval_T *tv, int depth,
        Scheme_Hash_Table *visited);
+static Scheme_Object *vim_funcref(void *data, int argc, Scheme_Object **argv);
 #endif
 
 #ifdef MZ_PRECISE_GC
@@ -185,6 +189,13 @@ static int buffer_mark_proc(void *obj)
 }
 static int buffer_fixup_proc(void *obj)
 {
+    /* apparently not needed as the object will be uncollectable while
+     * the buffer is alive
+     */
+    /*
+    vim_mz_buffer* buf = (vim_mz_buffer*) obj;
+    buf->buf->b_mzscheme_ref = GC_fixup_self(obj);
+    */
     return buffer_size_proc(obj);
 }
 static int window_size_proc(void *obj UNUSED)
@@ -197,12 +208,26 @@ static int window_mark_proc(void *obj)
 }
 static int window_fixup_proc(void *obj)
 {
+    /* apparently not needed as the object will be uncollectable while
+     * the window is alive
+     */
+    /*
+    vim_mz_window* win = (vim_mz_window*) obj;
+    win->win->w_mzscheme_ref = GC_fixup_self(obj);
+    */
     return window_size_proc(obj);
 }
+/* with precise GC, w_mzscheme_ref and b_mzscheme_ref are immobile boxes
+ * containing pointers to a window/buffer
+ * with conservative GC these are simply pointers*/
+# define WINDOW_REF(win) *(vim_mz_window **)((win)->w_mzscheme_ref)
+# define BUFFER_REF(buf) *(vim_mz_buffer **)((buf)->b_mzscheme_ref)
+#else
+# define WINDOW_REF(win) (vim_mz_window *)((win)->w_mzscheme_ref)
+# define BUFFER_REF(buf) (vim_mz_buffer *)((buf)->b_mzscheme_ref)
 #endif
 
 #ifdef DYNAMIC_MZSCHEME
-
 static Scheme_Object *dll_scheme_eof;
 static Scheme_Object *dll_scheme_false;
 static Scheme_Object *dll_scheme_void;
@@ -321,6 +346,7 @@ static Scheme_Object *(*dll_scheme_char_string_to_byte_string)
     (Scheme_Object *s);
 static Scheme_Object *(*dll_scheme_char_string_to_path)
     (Scheme_Object *s);
+static void *(*dll_scheme_set_collects_path)(Scheme_Object *p);
 # endif
 static Scheme_Hash_Table *(*dll_scheme_make_hash_table)(int type);
 static void (*dll_scheme_hash_set)(Scheme_Hash_Table *table,
@@ -380,11 +406,11 @@ static Scheme_Object *(*dll_scheme_namespace_require)(Scheme_Object *req);
 # endif
 # define scheme_gc_ptr_ok dll_scheme_gc_ptr_ok
 # if MZSCHEME_VERSION_MAJOR < 299
-#  define scheme_get_sized_string_output dll_scheme_get_sized_string_output
+#  define scheme_get_sized_byte_string_output dll_scheme_get_sized_string_output
 # else
 #  define scheme_get_sized_byte_string_output \
     dll_scheme_get_sized_byte_string_output
-# define scheme_get_param dll_scheme_get_param
+#  define scheme_get_param dll_scheme_get_param
 # endif
 # define scheme_intern_symbol dll_scheme_intern_symbol
 # define scheme_lookup_global dll_scheme_lookup_global
@@ -393,8 +419,8 @@ static Scheme_Object *(*dll_scheme_namespace_require)(Scheme_Object *req);
 # define scheme_make_pair dll_scheme_make_pair
 # define scheme_make_prim_w_arity dll_scheme_make_prim_w_arity
 # if MZSCHEME_VERSION_MAJOR < 299
-#  define scheme_make_string dll_scheme_make_string
-#  define scheme_make_string_output_port dll_scheme_make_string_output_port
+#  define scheme_make_byte_string dll_scheme_make_string
+#  define scheme_make_byte_string_output_port dll_scheme_make_string_output_port
 # else
 #  define scheme_make_byte_string dll_scheme_make_byte_string
 #  define scheme_make_byte_string_output_port \
@@ -423,6 +449,7 @@ static Scheme_Object *(*dll_scheme_namespace_require)(Scheme_Object *req);
     dll_scheme_char_string_to_byte_string
 #  define scheme_char_string_to_path \
     dll_scheme_char_string_to_path
+#  define scheme_set_collects_path dll_scheme_set_collects_path
 # endif
 # define scheme_make_hash_table dll_scheme_make_hash_table
 # define scheme_hash_set dll_scheme_hash_set
@@ -531,6 +558,7 @@ static Thunk_Info mzsch_imports[] = {
     {"scheme_char_string_to_byte_string",
        (void **)&dll_scheme_char_string_to_byte_string},
     {"scheme_char_string_to_path", (void **)&dll_scheme_char_string_to_path},
+    {"scheme_set_collects_path", (void **)&dll_scheme_set_collects_path},
 # endif
     {"scheme_make_hash_table", (void **)&dll_scheme_make_hash_table},
     {"scheme_hash_set", (void **)&dll_scheme_hash_set},
@@ -556,20 +584,20 @@ mzscheme_runtime_link_init(char *sch_dll, char *gc_dll, int verbose)
 
     if (hMzGC && hMzSch)
        return OK;
-    hMzSch = LoadLibrary(sch_dll);
-    hMzGC = LoadLibrary(gc_dll);
+    hMzSch = vimLoadLib(sch_dll);
+    hMzGC = vimLoadLib(gc_dll);
 
-    if (!hMzSch)
+    if (!hMzGC)
     {
        if (verbose)
-           EMSG2(_(e_loadlib), sch_dll);
+           EMSG2(_(e_loadlib), gc_dll);
        return FAIL;
     }
 
-    if (!hMzGC)
+    if (!hMzSch)
     {
        if (verbose)
-           EMSG2(_(e_loadlib), gc_dll);
+           EMSG2(_(e_loadlib), sch_dll);
        return FAIL;
     }
 
@@ -627,11 +655,40 @@ dynamic_mzscheme_end(void)
 }
 #endif /* DYNAMIC_MZSCHEME */
 
+#if MZSCHEME_VERSION_MAJOR < 299
+# define GUARANTEED_STRING_ARG(proc, num) GUARANTEE_STRING(proc, num)
+#else
+    static Scheme_Object *
+guaranteed_byte_string_arg(char *proc, int num, int argc, Scheme_Object **argv)
+{
+    if (SCHEME_BYTE_STRINGP(argv[num]))
+    {
+       return argv[num];
+    }
+    else if (SCHEME_CHAR_STRINGP(argv[num]))
+    {
+       Scheme_Object *tmp = NULL;
+       MZ_GC_DECL_REG(2);
+       MZ_GC_VAR_IN_REG(0, argv[num]);
+       MZ_GC_VAR_IN_REG(1, tmp);
+       MZ_GC_REG();
+       tmp = scheme_char_string_to_byte_string(argv[num]);
+       MZ_GC_UNREG();
+       return tmp;
+    }
+    else
+       scheme_wrong_type(proc, "string", num, argc, argv);
+    /* unreachable */
+    return scheme_void;
+}
+# define GUARANTEED_STRING_ARG(proc, num) guaranteed_byte_string_arg(proc, num, argc, argv)
+#endif
+
 /* need to put it here for dynamic stuff to work */
 #if defined(INCLUDE_MZSCHEME_BASE)
 # include "mzscheme_base.c"
 #elif MZSCHEME_VERSION_MAJOR >= 400
-# error MzScheme 4.x must include mzscheme_base.c, for MinGW32 you need to define MZSCHEME_GENERATE_BASE=yes
+# error MzScheme >=4 must include mzscheme_base.c, for MinGW32 you need to define MZSCHEME_GENERATE_BASE=yes
 #endif
 
 /*
@@ -794,65 +851,80 @@ mzscheme_end(void)
 #endif
 }
 
-    void
-mzscheme_main(void)
+#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
+static __declspec(thread) void *tls_space;
+#endif
+
+/*
+ * Since version 4.x precise GC requires trampolined startup.
+ * Futures and places in version 5.x need it too.
+ */
+#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400 \
+    || MZSCHEME_VERSION_MAJOR >= 500 && (defined(MZ_USE_FUTURES) || defined(MZ_USE_PLACES))
+# ifdef DYNAMIC_MZSCHEME
+#  error Precise GC v.4+ or Racket with futures/places do not support dynamic MzScheme
+# endif
+# define TRAMPOLINED_MZVIM_STARTUP
+#endif
+
+    int
+mzscheme_main(int argc, char** argv)
 {
-#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400
-    /* use trampoline for precise GC in MzScheme >= 4.x */
-    scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL);
+#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
+    scheme_register_tls_space(&tls_space, 0);
+#endif
+#ifdef TRAMPOLINED_MZVIM_STARTUP
+    return scheme_main_setup(TRUE, mzscheme_env_main, argc, argv);
 #else
-    mzscheme_env_main(NULL, 0, NULL);
+    return mzscheme_env_main(NULL, argc, argv);
 #endif
 }
 
     static int
-mzscheme_env_main(Scheme_Env *env, int argc UNUSED, char **argv UNUSED)
+mzscheme_env_main(Scheme_Env *env, int argc, char **argv)
 {
-    /* neither argument nor return values are used */
-#ifdef MZ_PRECISE_GC
-# if MZSCHEME_VERSION_MAJOR < 400
-    /*
-     * Starting from version 4.x, embedding applications must use
-     * scheme_main_setup/scheme_main_stack_setup trampolines
-     * rather than setting stack base directly with scheme_set_stack_base
-     */
+    int vim_main_result;
+#ifdef TRAMPOLINED_MZVIM_STARTUP
+    /* Scheme has created the environment for us */
+    environment = env;
+#else
+# ifdef MZ_PRECISE_GC
     Scheme_Object   *dummy = NULL;
     MZ_GC_DECL_REG(1);
     MZ_GC_VAR_IN_REG(0, dummy);
 
     stack_base = &__gc_var_stack__;
 # else
-    /* environment has been created by us by Scheme */
-    environment = env;
-# endif
-    /*
-     * In 4.x, all activities must be performed inside trampoline
-     * so we are forced to initialise GC immediately
-     * This can be postponed in 3.x but I see no point in implementing
-     * a feature which will work in older versions only.
-     * One would better use conservative GC if he needs dynamic MzScheme
-     */
-    mzscheme_init();
-#else
     int dummy = 0;
     stack_base = (void *)&dummy;
+# endif
 #endif
-    main_loop(FALSE, FALSE);
-#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR < 400
+
+    /* mzscheme_main is called as a trampoline from main.
+     * We trampoline into vim_main2
+     * Passing argc, argv through from mzscheme_main
+     */
+    vim_main_result = vim_main2(argc, argv);
+#if !defined(TRAMPOLINED_MZVIM_STARTUP) && defined(MZ_PRECISE_GC)
     /* releasing dummy */
     MZ_GC_REG();
     MZ_GC_UNREG();
 #endif
-    return 0;
+    return vim_main_result;
 }
 
     static void
 startup_mzscheme(void)
 {
-#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
+#ifndef TRAMPOLINED_MZVIM_STARTUP
     scheme_set_stack_base(stack_base, 1);
 #endif
 
+#ifndef TRAMPOLINED_MZVIM_STARTUP
+    /* in newer versions of precise GC the initial env has been created */
+    environment = scheme_basic_env();
+#endif
+
     MZ_REGISTER_STATIC(environment);
     MZ_REGISTER_STATIC(curout);
     MZ_REGISTER_STATIC(curerr);
@@ -861,10 +933,6 @@ startup_mzscheme(void)
     MZ_REGISTER_STATIC(exn_message);
     MZ_REGISTER_STATIC(vim_exn);
 
-#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
-    /* in newer versions of precise GC the initial env has been created */
-    environment = scheme_basic_env();
-#endif
     MZ_GC_CHECK();
 
 #ifdef INCLUDE_MZSCHEME_BASE
@@ -897,10 +965,32 @@ startup_mzscheme(void)
 #ifdef MZSCHEME_COLLECTS
     /* setup 'current-library-collection-paths' parameter */
 # if MZSCHEME_VERSION_MAJOR >= 299
+#  ifdef MACOS
     {
        Scheme_Object   *coll_byte_string = NULL;
        Scheme_Object   *coll_char_string = NULL;
        Scheme_Object   *coll_path = NULL;
+
+       MZ_GC_DECL_REG(3);
+       MZ_GC_VAR_IN_REG(0, coll_byte_string);
+       MZ_GC_VAR_IN_REG(1, coll_char_string);
+       MZ_GC_VAR_IN_REG(2, coll_path);
+       MZ_GC_REG();
+       coll_byte_string = scheme_make_byte_string(MZSCHEME_COLLECTS);
+       MZ_GC_CHECK();
+       coll_char_string = scheme_byte_string_to_char_string(coll_byte_string);
+       MZ_GC_CHECK();
+       coll_path = scheme_char_string_to_path(coll_char_string);
+       MZ_GC_CHECK();
+       scheme_set_collects_path(coll_path);
+       MZ_GC_CHECK();
+       MZ_GC_UNREG();
+    }
+#  else
+   {
+       Scheme_Object   *coll_byte_string = NULL;
+       Scheme_Object   *coll_char_string = NULL;
+       Scheme_Object   *coll_path = NULL;
        Scheme_Object   *coll_pair = NULL;
        Scheme_Config   *config = NULL;
 
@@ -919,12 +1009,13 @@ startup_mzscheme(void)
        MZ_GC_CHECK();
        coll_pair = scheme_make_pair(coll_path, scheme_null);
        MZ_GC_CHECK();
-       config = scheme_config;
+       config = scheme_current_config();
        MZ_GC_CHECK();
        scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair);
        MZ_GC_CHECK();
        MZ_GC_UNREG();
     }
+#  endif
 # else
     {
        Scheme_Object   *coll_string = NULL;
@@ -936,11 +1027,11 @@ startup_mzscheme(void)
        MZ_GC_VAR_IN_REG(1, coll_pair);
        MZ_GC_VAR_IN_REG(2, config);
        MZ_GC_REG();
-       coll_string = scheme_make_string(MZSCHEME_COLLECTS);
+       coll_string = scheme_make_byte_string(MZSCHEME_COLLECTS);
        MZ_GC_CHECK();
        coll_pair = scheme_make_pair(coll_string, scheme_null);
        MZ_GC_CHECK();
-       config = scheme_config;
+       config = scheme_current_config();
        MZ_GC_CHECK();
        scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair);
        MZ_GC_CHECK();
@@ -983,7 +1074,7 @@ startup_mzscheme(void)
            MZ_GC_VAR_IN_REG(3, guard);
            MZ_GC_VAR_IN_REG(4, config);
            MZ_GC_REG();
-           config = scheme_config;
+           config = scheme_current_config();
            MZ_GC_CHECK();
            args[0] = scheme_get_param(config, MZCONFIG_SECURITY_GUARD);
            MZ_GC_CHECK();
@@ -1047,12 +1138,12 @@ mzscheme_init(void)
        MZ_GC_DECL_REG(1);
        MZ_GC_VAR_IN_REG(0, config);
        MZ_GC_REG();
-       config = scheme_config;
+       config = scheme_current_config();
        MZ_GC_CHECK();
        /* recreate ports each call effectively clearing these ones */
-       curout = scheme_make_string_output_port();
+       curout = scheme_make_byte_string_output_port();
        MZ_GC_CHECK();
-       curerr = scheme_make_string_output_port();
+       curerr = scheme_make_byte_string_output_port();
        MZ_GC_CHECK();
        scheme_set_param(config, MZCONFIG_OUTPUT_PORT, curout);
        MZ_GC_CHECK();
@@ -1141,13 +1232,21 @@ mzscheme_buffer_free(buf_T *buf)
 {
     if (buf->b_mzscheme_ref)
     {
-       vim_mz_buffer *bp;
+       vim_mz_buffer *bp = NULL;
+       MZ_GC_DECL_REG(1);
+       MZ_GC_VAR_IN_REG(0, bp);
+       MZ_GC_REG();
 
-       bp = buf->b_mzscheme_ref;
+       bp = BUFFER_REF(buf);
        bp->buf = INVALID_BUFFER_VALUE;
-       buf->b_mzscheme_ref = NULL;
+#ifndef MZ_PRECISE_GC
        scheme_gc_ptr_ok(bp);
+#else
+       scheme_free_immobile_box(buf->b_mzscheme_ref);
+#endif
+       buf->b_mzscheme_ref = NULL;
        MZ_GC_CHECK();
+       MZ_GC_UNREG();
     }
 }
 
@@ -1159,12 +1258,20 @@ mzscheme_window_free(win_T *win)
 {
     if (win->w_mzscheme_ref)
     {
-       vim_mz_window *wp;
-       wp = win->w_mzscheme_ref;
+       vim_mz_window *wp = NULL;
+       MZ_GC_DECL_REG(1);
+       MZ_GC_VAR_IN_REG(0, wp);
+       MZ_GC_REG();
+       wp = WINDOW_REF(win);
        wp->win = INVALID_WINDOW_VALUE;
-       win->w_mzscheme_ref = NULL;
+#ifndef MZ_PRECISE_GC
        scheme_gc_ptr_ok(wp);
+#else
+       scheme_free_immobile_box(win->w_mzscheme_ref);
+#endif
+       win->w_mzscheme_ref = NULL;
        MZ_GC_CHECK();
+       MZ_GC_UNREG();
     }
 }
 
@@ -1341,8 +1448,9 @@ do_intrnl_output(char *mesg, int error)
 }
 
     static void
-do_output(char *mesg, long len UNUSED)
+do_output(char *mesg, OUTPUT_LEN_TYPE len UNUSED)
 {
+    /* TODO: use len, the string may not be NUL terminated */
     do_intrnl_output(mesg, 0);
 }
 
@@ -1362,9 +1470,9 @@ do_printf(char *format, ...)
 do_flush(void)
 {
     char *buff;
-    long length;
+    OUTPUT_LEN_TYPE length;
 
-    buff = scheme_get_sized_string_output(curerr, &length);
+    buff = scheme_get_sized_byte_string_output(curerr, &length);
     MZ_GC_CHECK();
     if (length)
     {
@@ -1372,7 +1480,7 @@ do_flush(void)
        return;
     }
 
-    buff = scheme_get_sized_string_output(curout, &length);
+    buff = scheme_get_sized_byte_string_output(curout, &length);
     MZ_GC_CHECK();
     if (length)
        do_output(buff, length);
@@ -1389,42 +1497,43 @@ do_flush(void)
 vim_command(void *data, int argc, Scheme_Object **argv)
 {
     Vim_Prim   *prim = (Vim_Prim *)data;
-    char       *cmd = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
+    Scheme_Object *cmd = NULL;
+    MZ_GC_DECL_REG(1);
+    MZ_GC_VAR_IN_REG(0, cmd);
+    MZ_GC_REG();
+    cmd = GUARANTEED_STRING_ARG(prim->name, 0);
 
     /* may be use do_cmdline_cmd? */
-    do_cmdline((char_u *)cmd, NULL, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE);
+    do_cmdline(BYTE_STRING_VALUE(cmd), NULL, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE);
     update_screen(VALID);
 
+    MZ_GC_UNREG();
     raise_if_error();
     return scheme_void;
 }
 
 /* (eval {expr-string}) */
     static Scheme_Object *
-vim_eval(void *data, int argc, Scheme_Object **argv)
+vim_eval(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED)
 {
 #ifdef FEAT_EVAL
     Vim_Prim           *prim = (Vim_Prim *)data;
-    char               *expr;
-    Scheme_Object      *result;
-    /* hash table to store visited values to avoid infinite loops */
-    Scheme_Hash_Table  *visited = NULL;
+    Scheme_Object      *result = NULL;
     typval_T           *vim_result;
-
-    MZ_GC_DECL_REG(1);
-    MZ_GC_VAR_IN_REG(0, visited);
+    Scheme_Object *expr = NULL;
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, result);
+    MZ_GC_VAR_IN_REG(1, expr);
     MZ_GC_REG();
+    expr = GUARANTEED_STRING_ARG(prim->name, 0);
 
-    visited = scheme_make_hash_table(SCHEME_hash_ptr);
-    MZ_GC_CHECK();
-
-    expr = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
-    vim_result = eval_expr((char_u *)expr, NULL);
+    vim_result = eval_expr(BYTE_STRING_VALUE(expr), NULL);
 
     if (vim_result == NULL)
        raise_vim_exn(_("invalid expression"));
 
-    result = vim_to_mzscheme(vim_result, 1, visited);
+    result = vim_to_mzscheme(vim_result);
+    MZ_GC_CHECK();
     free_tv(vim_result);
 
     MZ_GC_UNREG();
@@ -1465,16 +1574,21 @@ static Scheme_Object *M_global = NULL;
 get_option(void *data, int argc, Scheme_Object **argv)
 {
     Vim_Prim       *prim = (Vim_Prim *)data;
-    char_u         *name;
     long           value;
     char           *strval;
     int                    rc;
-    Scheme_Object   *rval;
+    Scheme_Object   *rval = NULL;
+    Scheme_Object   *name = NULL;
     int                    opt_flags = 0;
     buf_T          *save_curb = curbuf;
     win_T          *save_curw = curwin;
 
-    name = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, rval);
+    MZ_GC_VAR_IN_REG(1, name);
+    MZ_GC_REG();
+
+    name = GUARANTEED_STRING_ARG(prim->name, 0);
 
     if (argc > 1)
     {
@@ -1504,23 +1618,27 @@ get_option(void *data, int argc, Scheme_Object **argv)
            scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv);
     }
 
-    rc = get_option_value(name, &value, (char_u **)&strval, opt_flags);
+    rc = get_option_value(BYTE_STRING_VALUE(name), &value, (char_u **)&strval, opt_flags);
     curbuf = save_curb;
     curwin = save_curw;
 
     switch (rc)
     {
     case 1:
+       MZ_GC_UNREG();
        return scheme_make_integer_value(value);
     case 0:
-       rval = scheme_make_string(strval);
+       rval = scheme_make_byte_string(strval);
        MZ_GC_CHECK();
        vim_free(strval);
+       MZ_GC_UNREG();
        return rval;
     case -1:
     case -2:
+       MZ_GC_UNREG();
        raise_vim_exn(_("hidden option"));
     case -3:
+       MZ_GC_UNREG();
        raise_vim_exn(_("unknown option"));
     }
     /* unreachable */
@@ -1531,13 +1649,18 @@ get_option(void *data, int argc, Scheme_Object **argv)
     static Scheme_Object *
 set_option(void *data, int argc, Scheme_Object **argv)
 {
-    char_u     *cmd;
+    char_u     *command = NULL;
     int                opt_flags = 0;
     buf_T      *save_curb = curbuf;
     win_T      *save_curw = curwin;
     Vim_Prim   *prim = (Vim_Prim *)data;
+    Scheme_Object *cmd = NULL;
+
+    MZ_GC_DECL_REG(1);
+    MZ_GC_VAR_IN_REG(0, cmd);
+    MZ_GC_REG();
+    cmd = GUARANTEED_STRING_ARG(prim->name, 0);
 
-    GUARANTEE_STRING(prim->name, 0);
     if (argc > 1)
     {
        if (M_global == NULL)
@@ -1566,9 +1689,10 @@ set_option(void *data, int argc, Scheme_Object **argv)
     }
 
     /* do_set can modify cmd, make copy */
-    cmd = vim_strsave((char_u *)SCHEME_STR_VAL(argv[0]));
-    do_set(cmd, opt_flags);
-    vim_free(cmd);
+    command = vim_strsave(BYTE_STRING_VALUE(cmd));
+    MZ_GC_UNREG();
+    do_set(command, opt_flags);
+    vim_free(command);
     update_screen(NOT_VALID);
     curbuf = save_curb;
     curwin = save_curw;
@@ -1593,10 +1717,12 @@ get_curr_win(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED)
     static Scheme_Object *
 get_window_count(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED)
 {
-    win_T   *w;
     int            n = 0;
+#ifdef FEAT_WINDOWS
+    win_T   *w;
 
     for (w = firstwin; w != NULL; w = w->w_next)
+#endif
        ++n;
     return scheme_make_integer(n);
 }
@@ -1608,12 +1734,14 @@ get_window_list(void *data, int argc, Scheme_Object **argv)
     Vim_Prim       *prim = (Vim_Prim *)data;
     vim_mz_buffer   *buf;
     Scheme_Object   *list;
-    win_T          *w;
+    win_T          *w = firstwin;
 
     buf = get_buffer_arg(prim->name, 0, argc, argv);
     list = scheme_null;
 
-    for (w = firstwin; w != NULL; w = w->w_next)
+#ifdef FEAT_WINDOWS
+    for ( ; w != NULL; w = w->w_next)
+#endif
        if (w->w_buffer == buf->buf)
        {
            list = scheme_make_pair(window_new(w), list);
@@ -1630,7 +1758,6 @@ window_new(win_T *win)
 
     MZ_GC_DECL_REG(1);
     MZ_GC_VAR_IN_REG(0, self);
-    MZ_GC_REG();
 
     /* We need to handle deletion of windows underneath us.
      * If we add a "w_mzscheme_ref" field to the win_T structure,
@@ -1641,30 +1768,38 @@ window_new(win_T *win)
      * object, and reject them if the win_T *field is invalid.
      */
     if (win->w_mzscheme_ref != NULL)
-       return win->w_mzscheme_ref;
+       return (Scheme_Object *)WINDOW_REF(win);
 
-    self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window));
+    MZ_GC_REG();
+    self = scheme_malloc_fail_ok(scheme_malloc_tagged, sizeof(vim_mz_window));
     vim_memset(self, 0, sizeof(vim_mz_window));
+#ifndef MZ_PRECISE_GC
     scheme_dont_gc_ptr(self);  /* because win isn't visible to GC */
+#else
+    win->w_mzscheme_ref = scheme_malloc_immobile_box(NULL);
+#endif
+    MZ_GC_CHECK();
+    WINDOW_REF(win) = self;
     MZ_GC_CHECK();
-    win->w_mzscheme_ref = self;
     self->win = win;
     self->so.type = mz_window_type;
 
     MZ_GC_UNREG();
-    return (Scheme_Object *)(self);
+    return (Scheme_Object *)self;
 }
 
 /* (get-win-num [window]) */
     static Scheme_Object *
-get_window_num(void *data, int argc, Scheme_Object **argv)
+get_window_num(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED)
 {
+    int                nr = 1;
+#ifdef FEAT_WINDOWS
     Vim_Prim   *prim = (Vim_Prim *)data;
     win_T      *win = get_window_arg(prim->name, 0, argc, argv)->win;
-    int                nr = 1;
     win_T      *wp;
 
     for (wp = firstwin; wp != win; wp = wp->w_next)
+#endif
        ++nr;
 
     return scheme_make_integer(nr);
@@ -1675,14 +1810,16 @@ get_window_num(void *data, int argc, Scheme_Object **argv)
 get_window_by_num(void *data, int argc, Scheme_Object **argv)
 {
     Vim_Prim   *prim = (Vim_Prim *)data;
-    win_T      *win;
+    win_T      *win = firstwin;
     int                fnum;
 
     fnum = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0));
     if (fnum < 1)
        scheme_signal_error(_("window index is out of range"));
 
-    for (win = firstwin; win != NULL; win = win->w_next, --fnum)
+#ifdef FEAT_WINDOWS
+    for ( ; win != NULL; win = win->w_next, --fnum)
+#endif
        if (fnum == 1)      /* to be 1-based */
            return window_new(win);
 
@@ -1828,22 +1965,31 @@ set_cursor(void *data, int argc, Scheme_Object **argv)
 mzscheme_open_buffer(void *data, int argc, Scheme_Object **argv)
 {
     Vim_Prim       *prim = (Vim_Prim *)data;
-    char_u         *fname;
     int                    num = 0;
-    Scheme_Object   *onum;
+    Scheme_Object   *onum = NULL;
+    Scheme_Object   *buf = NULL;
+    Scheme_Object   *fname;
+
+    MZ_GC_DECL_REG(3);
+    MZ_GC_VAR_IN_REG(0, onum);
+    MZ_GC_VAR_IN_REG(1, buf);
+    MZ_GC_VAR_IN_REG(2, fname);
+    MZ_GC_REG();
+    fname = GUARANTEED_STRING_ARG(prim->name, 0);
 
 #ifdef HAVE_SANDBOX
     sandbox_check();
 #endif
-    fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
     /* TODO make open existing file */
-    num = buflist_add(fname, BLN_LISTED | BLN_CURBUF);
+    num = buflist_add(BYTE_STRING_VALUE(fname), BLN_LISTED | BLN_CURBUF);
 
     if (num == 0)
        raise_vim_exn(_("couldn't open buffer"));
 
     onum = scheme_make_integer(num);
-    return get_buffer_by_num(data, 1, &onum);
+    buf = get_buffer_by_num(data, 1, &onum);
+    MZ_GC_UNREG();
+    return buf;
 }
 
 /* (get-buff-by-num {buffernum}) */
@@ -1869,23 +2015,34 @@ get_buffer_by_name(void *data, int argc, Scheme_Object **argv)
 {
     Vim_Prim   *prim = (Vim_Prim *)data;
     buf_T      *buf;
-    char_u     *fname;
+    Scheme_Object *buffer = NULL;
+    Scheme_Object *fname = NULL;
 
-    fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, buffer);
+    MZ_GC_VAR_IN_REG(1, fname);
+    MZ_GC_REG();
+    fname = GUARANTEED_STRING_ARG(prim->name, 0);
+    buffer = scheme_false;
 
     for (buf = firstbuf; buf; buf = buf->b_next)
+    {
        if (buf->b_ffname == NULL || buf->b_sfname == NULL)
            /* empty string */
        {
-           if (fname[0] == NUL)
-               return buffer_new(buf);
+           if (BYTE_STRING_VALUE(fname)[0] == NUL)
+               buffer = buffer_new(buf);
        }
-       else if (!fnamecmp(buf->b_ffname, fname)
-               || !fnamecmp(buf->b_sfname, fname))
+       else if (!fnamecmp(buf->b_ffname, BYTE_STRING_VALUE(fname))
+               || !fnamecmp(buf->b_sfname, BYTE_STRING_VALUE(fname)))
+       {
            /* either short or long filename matches */
-           return buffer_new(buf);
+           buffer = buffer_new(buf);
+       }
+    }
 
-    return scheme_false;
+    MZ_GC_UNREG();
+    return buffer;
 }
 
 /* (get-next-buff [buffer]) */
@@ -1942,7 +2099,7 @@ get_buffer_name(void *data, int argc, Scheme_Object **argv)
     Vim_Prim       *prim = (Vim_Prim *)data;
     vim_mz_buffer   *buf = get_buffer_arg(prim->name, 0, argc, argv);
 
-    return scheme_make_string((char *)buf->buf->b_ffname);
+    return scheme_make_byte_string((char *)buf->buf->b_ffname);
 }
 
 /* (curr-buff) */
@@ -1959,25 +2116,30 @@ buffer_new(buf_T *buf)
 
     MZ_GC_DECL_REG(1);
     MZ_GC_VAR_IN_REG(0, self);
-    MZ_GC_REG();
 
     /* We need to handle deletion of buffers underneath us.
      * If we add a "b_mzscheme_ref" field to the buf_T structure,
      * then we can get at it in buf_freeall() in vim.
      */
     if (buf->b_mzscheme_ref)
-       return buf->b_mzscheme_ref;
+       return (Scheme_Object *)BUFFER_REF(buf);
 
-    self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer));
+    MZ_GC_REG();
+    self = scheme_malloc_fail_ok(scheme_malloc_tagged, sizeof(vim_mz_buffer));
     vim_memset(self, 0, sizeof(vim_mz_buffer));
-    scheme_dont_gc_ptr(self); /* because buf isn't visible to GC */
+#ifndef MZ_PRECISE_GC
+    scheme_dont_gc_ptr(self);  /* because buf isn't visible to GC */
+#else
+    buf->b_mzscheme_ref = scheme_malloc_immobile_box(NULL);
+#endif
+    MZ_GC_CHECK();
+    BUFFER_REF(buf) = self;
     MZ_GC_CHECK();
-    buf->b_mzscheme_ref = self;
     self->buf = buf;
     self->so.type = mz_buffer_type;
 
     MZ_GC_UNREG();
-    return (Scheme_Object *)(self);
+    return (Scheme_Object *)self;
 }
 
 /*
@@ -2014,7 +2176,7 @@ get_buffer_line(void *data, int argc, Scheme_Object **argv)
     line = ml_get_buf(buf->buf, (linenr_T)linenr, FALSE);
 
     raise_if_error();
-    return scheme_make_string((char *)line);
+    return scheme_make_byte_string((char *)line);
 }
 
 
@@ -2057,7 +2219,7 @@ get_buffer_line_list(void *data, int argc, Scheme_Object **argv)
 
     for (i = n; i >= 0; --i)
     {
-       Scheme_Object *str = scheme_make_string(
+       Scheme_Object *str = scheme_make_byte_string(
                       (char *)ml_get_buf(buf->buf, (linenr_T)(lo+i), FALSE));
        raise_if_error();
 
@@ -2289,8 +2451,8 @@ set_buffer_line_list(void *data, int argc, Scheme_Object **argv)
            MZ_GC_VAR_IN_REG(1, rest);
            MZ_GC_REG();
 
-           array = (char **)alloc(new_len * sizeof(char *));
-           vim_memset(array, 0, new_len * sizeof(char *));
+           array = (char **)alloc((new_len+1)* sizeof(char *));
+           vim_memset(array, 0, (new_len+1) * sizeof(char *));
 
            rest = line_list;
            for (i = 0; i < new_len; ++i)
@@ -2472,8 +2634,8 @@ insert_buffer_line_list(void *data, int argc, Scheme_Object **argv)
        MZ_GC_VAR_IN_REG(1, rest);
        MZ_GC_REG();
 
-       array = (char **)alloc(size * sizeof(char *));
-       vim_memset(array, 0, size * sizeof(char *));
+       array = (char **)alloc((size+1) * sizeof(char *));
+       vim_memset(array, 0, (size+1) * sizeof(char *));
 
        rest = list;
        for (i = 0; i < size; ++i)
@@ -2580,7 +2742,7 @@ string_to_line(Scheme_Object *obj)
 {
     char       *scheme_str = NULL;
     char       *vim_str = NULL;
-    long       len;
+    OUTPUT_LEN_TYPE    len;
     int                i;
 
     scheme_str = scheme_display_to_string(obj, &len);
@@ -2616,13 +2778,35 @@ string_to_line(Scheme_Object *obj)
  * Convert Vim value into MzScheme, adopted from if_python.c
  */
     static Scheme_Object *
-vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
+vim_to_mzscheme(typval_T *vim_value)
+{
+    Scheme_Object      *result = NULL;
+    /* hash table to store visited values to avoid infinite loops */
+    Scheme_Hash_Table  *visited = NULL;
+
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, result);
+    MZ_GC_VAR_IN_REG(1, visited);
+    MZ_GC_REG();
+
+    visited = scheme_make_hash_table(SCHEME_hash_ptr);
+    MZ_GC_CHECK();
+
+    result = vim_to_mzscheme_impl(vim_value, 1, visited);
+
+    MZ_GC_UNREG();
+    return result;
+}
+
+    static Scheme_Object *
+vim_to_mzscheme_impl(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
 {
     Scheme_Object   *result = NULL;
     int                    new_value = TRUE;
 
-    MZ_GC_DECL_REG(1);
+    MZ_GC_DECL_REG(2);
     MZ_GC_VAR_IN_REG(0, result);
+    MZ_GC_VAR_IN_REG(1, visited);
     MZ_GC_REG();
 
     /* Avoid infinite recursion */
@@ -2641,7 +2825,7 @@ vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
        new_value = FALSE;
     else if (vim_value->v_type == VAR_STRING)
     {
-       result = scheme_make_string((char *)vim_value->vval.v_string);
+       result = scheme_make_byte_string((char *)vim_value->vval.v_string);
        MZ_GC_CHECK();
     }
     else if (vim_value->v_type == VAR_NUMBER)
@@ -2672,14 +2856,14 @@ vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
            MZ_GC_REG();
 
            curr = list->lv_last;
-           obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited);
+           obj = vim_to_mzscheme_impl(&curr->li_tv, depth + 1, visited);
            result = scheme_make_pair(obj, scheme_null);
            MZ_GC_CHECK();
 
            while (curr != list->lv_first)
            {
                curr = curr->li_prev;
-               obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited);
+               obj = vim_to_mzscheme_impl(&curr->li_tv, depth + 1, visited);
                result = scheme_make_pair(obj, result);
                MZ_GC_CHECK();
            }
@@ -2712,8 +2896,8 @@ vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
                    --todo;
 
                    di = dict_lookup(hi);
-                   obj = vim_to_mzscheme(&di->di_tv, depth + 1, visited);
-                   key = scheme_make_string((char *)hi->hi_key);
+                   obj = vim_to_mzscheme_impl(&di->di_tv, depth + 1, visited);
+                   key = scheme_make_byte_string((char *)hi->hi_key);
                    MZ_GC_CHECK();
                    scheme_hash_set((Scheme_Hash_Table *)result, key, obj);
                    MZ_GC_CHECK();
@@ -2722,6 +2906,22 @@ vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
        }
        MZ_GC_UNREG();
     }
+    else if (vim_value->v_type == VAR_FUNC)
+    {
+       Scheme_Object *funcname = NULL;
+
+       MZ_GC_DECL_REG(1);
+       MZ_GC_VAR_IN_REG(0, funcname);
+       MZ_GC_REG();
+
+       funcname = scheme_make_byte_string((char *)vim_value->vval.v_string);
+       MZ_GC_CHECK();
+       result = scheme_make_closed_prim_w_arity(vim_funcref, funcname,
+               (const char *)BYTE_STRING_VALUE(funcname), 0, -1);
+       MZ_GC_CHECK();
+
+       MZ_GC_UNREG();
+    }
     else
     {
        result = scheme_void;
@@ -2737,11 +2937,42 @@ vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
 }
 
     static int
-mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
+mzscheme_to_vim(Scheme_Object *obj, typval_T *tv)
+{
+    int i, status;
+    Scheme_Hash_Table  *visited = NULL;
+
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, obj);
+    MZ_GC_VAR_IN_REG(1, visited);
+    MZ_GC_REG();
+
+    visited = scheme_make_hash_table(SCHEME_hash_ptr);
+    MZ_GC_CHECK();
+
+    status = mzscheme_to_vim_impl(obj, tv, 1, visited);
+    for (i = 0; i < visited->size; ++i)
+    {
+       /* free up remembered objects */
+       if (visited->vals[i] != NULL)
+           free_tv((typval_T *)visited->vals[i]);
+    }
+
+    MZ_GC_UNREG();
+    return status;
+}
+    static int
+mzscheme_to_vim_impl(Scheme_Object *obj, typval_T *tv, int depth,
        Scheme_Hash_Table *visited)
 {
     int                status = OK;
     typval_T   *found;
+
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, obj);
+    MZ_GC_VAR_IN_REG(1, visited);
+    MZ_GC_REG();
+
     MZ_GC_CHECK();
     if (depth > 100) /* limit the deepest recursion level */
     {
@@ -2775,11 +3006,25 @@ mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
        tv->vval.v_float = SCHEME_DBL_VAL(obj);
     }
 # endif
-    else if (SCHEME_STRINGP(obj))
+    else if (SCHEME_BYTE_STRINGP(obj))
     {
        tv->v_type = VAR_STRING;
-       tv->vval.v_string = vim_strsave((char_u *)SCHEME_STR_VAL(obj));
+       tv->vval.v_string = vim_strsave(BYTE_STRING_VALUE(obj));
     }
+# if MZSCHEME_VERSION_MAJOR >= 299
+    else if (SCHEME_CHAR_STRINGP(obj))
+    {
+       Scheme_Object *tmp = NULL;
+       MZ_GC_DECL_REG(1);
+       MZ_GC_VAR_IN_REG(0, tmp);
+       MZ_GC_REG();
+
+       tmp = scheme_char_string_to_byte_string(obj);
+       tv->v_type = VAR_STRING;
+       tv->vval.v_string = vim_strsave(BYTE_STRING_VALUE(tmp));
+       MZ_GC_UNREG();
+    }
+#endif
     else if (SCHEME_VECTORP(obj) || SCHEME_NULLP(obj)
            || SCHEME_PAIRP(obj) || SCHEME_MUTABLE_PAIRP(obj))
     {
@@ -2808,7 +3053,7 @@ mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
                status = FAIL;
            else
            {
-               /* add the value in advance to allow handling of self-referencial
+               /* add the value in advance to allow handling of self-referential
                 * data structures */
                typval_T    *visited_tv = (typval_T *)alloc(sizeof(typval_T));
                copy_tv(tv, visited_tv);
@@ -2819,7 +3064,7 @@ mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
                    for (i = 0; i < SCHEME_VEC_SIZE(obj); ++i)
                    {
                        cval = SCHEME_VEC_ELS(obj)[i];
-                       status = mzscheme_to_vim(cval, v, depth + 1, visited);
+                       status = mzscheme_to_vim_impl(cval, v, depth + 1, visited);
                        if (status == FAIL)
                            break;
                        status = list_append_tv(list, v);
@@ -2835,7 +3080,7 @@ mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
                            curr = SCHEME_CDR(curr))
                    {
                        cval = SCHEME_CAR(curr);
-                       status = mzscheme_to_vim(cval, v, depth + 1, visited);
+                       status = mzscheme_to_vim_impl(cval, v, depth + 1, visited);
                        if (status == FAIL)
                            break;
                        status = list_append_tv(list, v);
@@ -2843,11 +3088,11 @@ mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
                        if (status == FAIL)
                            break;
                    }
-                   /* impoper list not terminated with null
+                   /* improper list not terminated with null
                     * need to handle the last element */
                    if (status == OK && !SCHEME_NULLP(curr))
                    {
-                       status = mzscheme_to_vim(cval, v, depth + 1, visited);
+                       status = mzscheme_to_vim_impl(cval, v, depth + 1, visited);
                        if (status == OK)
                        {
                            status = list_append_tv(list, v);
@@ -2891,11 +3136,11 @@ mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
            {
                if (((Scheme_Hash_Table *) obj)->vals[i] != NULL)
                {
-                   /* generate item for `diplay'ed Scheme key */
+                   /* generate item for `display'ed Scheme key */
                    dictitem_T  *item = dictitem_alloc((char_u *)string_to_line(
                                ((Scheme_Hash_Table *) obj)->keys[i]));
                    /* convert Scheme val to Vim and add it to the dict */
-                   if (mzscheme_to_vim(((Scheme_Hash_Table *) obj)->vals[i],
+                   if (mzscheme_to_vim_impl(((Scheme_Hash_Table *) obj)->vals[i],
                                    &item->di_tv, depth + 1, visited) == FAIL
                            || dict_add(dict, item) == FAIL)
                    {
@@ -2915,19 +3160,76 @@ mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
        tv->v_type = VAR_STRING;
        tv->vval.v_string = (char_u *)string_to_line(obj);
     }
+    MZ_GC_UNREG();
     return status;
 }
 
+/* Scheme prim procedure wrapping Vim funcref */
+    static Scheme_Object *
+vim_funcref(void *name, int argc, Scheme_Object **argv)
+{
+    int i;
+    typval_T args;
+    int status = OK;
+    Scheme_Object *result = NULL;
+    list_T *list = list_alloc();
+
+    MZ_GC_DECL_REG(1);
+    MZ_GC_VAR_IN_REG(0, result);
+    MZ_GC_REG();
+
+    result = scheme_void;
+    if (list == NULL)
+       status = FAIL;
+    else
+    {
+       args.v_type = VAR_LIST;
+       args.vval.v_list = list;
+       ++list->lv_refcount;
+       for (i = 0; status == OK && i < argc; ++i)
+       {
+           typval_T *v = (typval_T *)alloc(sizeof(typval_T));
+           if (v == NULL)
+               status = FAIL;
+           else
+           {
+               status = mzscheme_to_vim(argv[i], v);
+               if (status == OK)
+               {
+                   status = list_append_tv(list, v);
+                   clear_tv(v);
+               }
+               vim_free(v);
+           }
+       }
+       if (status == OK)
+       {
+           typval_T ret;
+           ret.v_type = VAR_UNKNOWN;
+
+           mzscheme_call_vim(BYTE_STRING_VALUE((Scheme_Object *)name), &args, &ret);
+           MZ_GC_CHECK();
+           result = vim_to_mzscheme(&ret);
+           clear_tv(&ret);
+           MZ_GC_CHECK();
+       }
+    }
+    clear_tv(&args);
+    MZ_GC_UNREG();
+    if (status != OK)
+       raise_vim_exn(_("error converting Scheme values to Vim"));
+    else
+       raise_if_error();
+    return result;
+}
+
     void
 do_mzeval(char_u *str, typval_T *rettv)
 {
-    int i;
     Scheme_Object      *ret = NULL;
-    Scheme_Hash_Table  *visited = NULL;
 
-    MZ_GC_DECL_REG(2);
+    MZ_GC_DECL_REG(1);
     MZ_GC_VAR_IN_REG(0, ret);
-    MZ_GC_VAR_IN_REG(0, visited);
     MZ_GC_REG();
 
     if (mzscheme_init())
@@ -2937,20 +3239,8 @@ do_mzeval(char_u *str, typval_T *rettv)
     }
 
     MZ_GC_CHECK();
-    visited = scheme_make_hash_table(SCHEME_hash_ptr);
-    MZ_GC_CHECK();
-
     if (eval_with_exn_handling(str, do_eval, &ret) == OK)
-       mzscheme_to_vim(ret, rettv, 1, visited);
-
-    for (i = 0; i < visited->size; ++i)
-    {
-       /* free up remembered objects */
-       if (visited->vals[i] != NULL)
-       {
-           free_tv((typval_T *)visited->vals[i]);
-       }
-    }
+       mzscheme_to_vim(ret, rettv);
 
     MZ_GC_UNREG();
 }
@@ -3006,7 +3296,6 @@ register_vim_exn(void)
        MZ_GC_REG();
 
        tmp = scheme_make_struct_names(exn_name, scheme_null, 0, &nc);
-       assert(nc <= 5);
        mch_memmove(exn_names, tmp, nc * sizeof(Scheme_Object *));
        MZ_GC_CHECK();
 
@@ -3034,37 +3323,41 @@ raise_vim_exn(const char *add_info)
     char           *fmt = _("Vim error: ~a");
     Scheme_Object   *argv[2] = {NULL, NULL};
     Scheme_Object   *exn = NULL;
+    Scheme_Object   *byte_string = NULL;
 
-    MZ_GC_DECL_REG(4);
+    MZ_GC_DECL_REG(5);
     MZ_GC_ARRAY_VAR_IN_REG(0, argv, 2);
     MZ_GC_VAR_IN_REG(3, exn);
+    MZ_GC_VAR_IN_REG(4, byte_string);
     MZ_GC_REG();
 
     if (add_info != NULL)
     {
        char            *c_string = NULL;
-       Scheme_Object   *byte_string = NULL;
        Scheme_Object   *info = NULL;
 
        MZ_GC_DECL_REG(3);
        MZ_GC_VAR_IN_REG(0, c_string);
-       MZ_GC_VAR_IN_REG(1, byte_string);
        MZ_GC_VAR_IN_REG(2, info);
        MZ_GC_REG();
 
-       info = scheme_make_string(add_info);
+       info = scheme_make_byte_string(add_info);
        MZ_GC_CHECK();
-       c_string = scheme_format(fmt, STRLEN(fmt), 1, &info, NULL);
+       c_string = scheme_format_utf8(fmt, STRLEN(fmt), 1, &info, NULL);
        MZ_GC_CHECK();
-       byte_string = scheme_make_string(c_string);
+       byte_string = scheme_make_byte_string(c_string);
        MZ_GC_CHECK();
        argv[0] = scheme_byte_string_to_char_string(byte_string);
-       MZ_GC_CHECK();
        SCHEME_SET_IMMUTABLE(argv[0]);
        MZ_GC_UNREG();
     }
     else
-       argv[0] = scheme_make_string(_("Vim error"));
+    {
+       byte_string = scheme_make_byte_string(_("Vim error"));
+       MZ_GC_CHECK();
+       argv[0] = scheme_byte_string_to_char_string(byte_string);
+       MZ_GC_CHECK();
+    }
     MZ_GC_CHECK();
 
 #if MZSCHEME_VERSION_MAJOR < 360
@@ -3255,7 +3548,7 @@ get_vim_curr_buffer(void)
     if (curbuf->b_mzscheme_ref == NULL)
        return (vim_mz_buffer *)buffer_new(curbuf);
     else
-       return (vim_mz_buffer *)curbuf->b_mzscheme_ref;
+       return BUFFER_REF(curbuf);
 }
 
 /* return MzScheme wrapper for curwin */
@@ -3265,7 +3558,7 @@ get_vim_curr_window(void)
     if (curwin->w_mzscheme_ref == NULL)
        return (vim_mz_window *)window_new(curwin);
     else
-       return (vim_mz_window *)curwin->w_mzscheme_ref;
+       return WINDOW_REF(curwin);
 }
 
     static void
index 65c5de7..7c1766e 100644 (file)
@@ -7,6 +7,7 @@
 #ifdef __MINGW32__
 /* Hack to engage Cygwin-specific settings */
 # define __CYGWIN32__
+# include <stdint.h>
 #endif
 
 /* #ifdef needed for "make depend" */
 #endif
 
 #if MZSCHEME_VERSION_MAJOR >= 299
-/* macros to be compatible with 20x versions */
-# define scheme_config scheme_current_config()
-# define scheme_make_string scheme_make_byte_string
-# define scheme_make_string_output_port scheme_make_byte_string_output_port
-# define scheme_get_sized_string_output scheme_get_sized_byte_string_output
-# define scheme_write_string scheme_write_byte_string
-# define scheme_make_sized_string scheme_make_sized_byte_string
-
 # define SCHEME_STRINGP(obj) (SCHEME_BYTE_STRINGP(obj) || SCHEME_CHAR_STRINGP(obj))
-# define SCHEME_STR_VAL(obj) SCHEME_BYTE_STR_VAL(   \
-               (SCHEME_BYTE_STRINGP(obj) ? obj : scheme_char_string_to_byte_string(obj)))
-# define GUARANTEE_STRING(fname, argnum) GUARANTEE_TYPE(fname, argnum, SCHEME_STRINGP, "string")
-
-# ifdef scheme_format
-#  undef scheme_format
+# define BYTE_STRING_VALUE(obj) ((char_u *)SCHEME_BYTE_STR_VAL(obj))
+#else
+/* macros for compatibility with older versions */
+# define scheme_current_config() scheme_config
+# define scheme_make_sized_byte_string scheme_make_sized_string
+# define scheme_format_utf8 scheme_format
+# ifndef DYNAMIC_MZSCHEME
+/* for dynamic MzScheme there will be separate definitions in if_mzsch.c */
+#  define scheme_get_sized_byte_string_output scheme_get_sized_string_output
+#  define scheme_make_byte_string scheme_make_string
+#  define scheme_make_byte_string_output_port scheme_make_string_output_port
 # endif
-# define scheme_format scheme_format_utf8
 
-# define SCHEME_GET_BYTE_STRING(obj) (SCHEME_BYTE_STRINGP(obj) ? obj :   \
-       scheme_char_string_to_byte_string(obj))
-#else
-# define SCHEME_GET_BYTE_STRING(obj) (obj)
 # define SCHEME_BYTE_STRLEN_VAL SCHEME_STRLEN_VAL
-# define SCHEME_BYTE_STR_VAL SCHEME_STR_VAL
+# define BYTE_STRING_VALUE(obj) ((char_u *)SCHEME_STR_VAL(obj))
 # define scheme_byte_string_to_char_string(obj) (obj)
+# define SCHEME_BYTE_STRINGP SCHEME_STRINGP
 #endif
 
 /* Precise GC macros */
index 4c01f51..aabf6bb 100644 (file)
@@ -645,7 +645,7 @@ static void GUIDtochar(const GUID &guid, char *GUID, int length)
     CoTaskMemFree(wGUID);
 }
 
-// Delete a key and all of its descendents
+// Delete a key and all of its descendants
 static void RecursiveDeleteKey(HKEY hKeyParent, const char *child)
 {
     // Open the child
@@ -655,7 +655,7 @@ static void RecursiveDeleteKey(HKEY hKeyParent, const char *child)
     if (result != ERROR_SUCCESS)
        return;
 
-    // Enumerate all of the decendents of this child
+    // Enumerate all of the descendants of this child
     FILETIME time;
     char buffer[1024];
     DWORD size = 1024;
@@ -663,7 +663,7 @@ static void RecursiveDeleteKey(HKEY hKeyParent, const char *child)
     while (RegEnumKeyEx(hKeyChild, 0, buffer, &size, NULL,
                        NULL, NULL, &time) == S_OK)
     {
-       // Delete the decendents of this child
+       // Delete the descendants of this child
        RecursiveDeleteKey(hKeyChild, buffer);
        size = 256;
     }
index 0b48b92..5749cdb 100644 (file)
@@ -46,8 +46,11 @@ typedef struct Vim Vim;
 /* header files for imported files */
 #include "oaidl.h"
 
-void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
-void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+#ifndef __MIDL_user_allocate_free_DEFINED__
+#define __MIDL_user_allocate_free_DEFINED__
+    void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+    void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+#endif
 
 #ifndef __IVim_INTERFACE_DEFINED__
 #define __IVim_INTERFACE_DEFINED__
index a3dc4fe..a2247f0 100644 (file)
 #define _memory_h      /* avoid memset redeclaration */
 #define IN_PERL_FILE   /* don't include if_perl.pro from proto.h */
 
+/*
+ * Currently 32-bit version of ActivePerl is built with VC6.
+ * (http://community.activestate.com/faq/windows-compilers-perl-modules)
+ * It means that time_t should be 32-bit. However the default size of
+ * time_t is 64-bit since VC8. So we have to define _USE_32BIT_TIME_T.
+ */
+#if defined(WIN32) && !defined(_WIN64)
+# define _USE_32BIT_TIME_T
+#endif
+
 #include "vim.h"
 
+#include <EXTERN.h>
+#include <perl.h>
+#include <XSUB.h>
+
 
 /*
  * Work around clashes between Perl and Vim namespace. proto.h doesn't
 # define PERL5101_OR_LATER
 #endif
 
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 18)
+# define PERL5180_OR_LATER
+#endif
+
 #ifndef pTHX
 #    define pTHX void
 #    define pTHX_
 # define EXTERN_C
 #endif
 
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14) && defined(_MSC_VER)
+/* Using PL_errgv to get the error message after perl_eval_sv() causes a crash
+ * with MSVC and Perl version 5.14. */
+# define AVOID_PL_ERRGV
+#endif
+
 /* Compatibility hacks over */
 
 static PerlInterpreter *perl_interp = NULL;
@@ -106,7 +130,7 @@ typedef int perl_key;
 #define close_dll dlclose
 #else
 #define PERL_PROC FARPROC
-#define load_dll LoadLibrary
+#define load_dll vimLoadLib
 #define symbol_from_dll GetProcAddress
 #define close_dll FreeLibrary
 #endif
@@ -121,9 +145,11 @@ typedef int perl_key;
 # define perl_free dll_perl_free
 # define Perl_get_context dll_Perl_get_context
 # define Perl_croak dll_Perl_croak
+# ifndef PERL5180_OR_LATER
 # ifdef PERL5101_OR_LATER
 #  define Perl_croak_xs_usage dll_Perl_croak_xs_usage
 # endif
+# endif
 # ifndef PROTO
 #  define Perl_croak_nocontext dll_Perl_croak_nocontext
 #  define Perl_call_argv dll_Perl_call_argv
@@ -147,7 +173,12 @@ typedef int perl_key;
 # define Perl_save_int dll_Perl_save_int
 # define Perl_stack_grow dll_Perl_stack_grow
 # define Perl_set_context dll_Perl_set_context
+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+# define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags
+# define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck
+# else
 # define Perl_sv_2bool dll_Perl_sv_2bool
+# endif
 # define Perl_sv_2iv dll_Perl_sv_2iv
 # define Perl_sv_2mortal dll_Perl_sv_2mortal
 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
@@ -214,6 +245,9 @@ typedef int perl_key;
 # define Perl_call_list dll_Perl_call_list
 # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr
 # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr
+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+#  define PL_thr_key *dll_PL_thr_key
+# endif
 
 /*
  * Declare HANDLE for perl.dll and function pointers.
@@ -228,9 +262,11 @@ static int (*perl_run)(PerlInterpreter*);
 static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**);
 static void* (*Perl_get_context)(void);
 static void (*Perl_croak)(pTHX_ const char*, ...);
+#ifndef PERL5180_OR_LATER
 #ifdef PERL5101_OR_LATER
 static void (*Perl_croak_xs_usage)(pTHX_ const CV *const, const char *const params);
 #endif
+#endif
 static void (*Perl_croak_nocontext)(const char*, ...);
 static I32 (*Perl_dowantarray)(pTHX);
 static void (*Perl_free_tmps)(pTHX);
@@ -252,7 +288,12 @@ static void (*Perl_push_scope)(pTHX);
 static void (*Perl_save_int)(pTHX_ int*);
 static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int);
 static SV** (*Perl_set_context)(void*);
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+static bool (*Perl_sv_2bool_flags)(pTHX_ SV*, I32);
+static void (*Perl_xs_apiversion_bootcheck)(pTHX_ SV *module, const char *api_p, STRLEN api_len);
+#else
 static bool (*Perl_sv_2bool)(pTHX_ SV*);
+#endif
 static IV (*Perl_sv_2iv)(pTHX_ SV*);
 static SV* (*Perl_sv_2mortal)(pTHX_ SV*);
 #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
@@ -299,6 +340,9 @@ static STRLEN* (*Perl_Tna_ptr)(register PerlInterpreter*);
 static void (*Perl_sv_free2)(pTHX_ SV*);
 static void (*Perl_sys_init)(int* argc, char*** argv);
 static void (*Perl_sys_term)(void);
+static void (*Perl_call_list)(pTHX_ I32, AV*);
+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+# else
 static SV** (*Perl_ISv_ptr)(register PerlInterpreter*);
 static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*);
 static SV*** (*Perl_Istack_base_ptr)(register PerlInterpreter*);
@@ -310,16 +354,20 @@ static I32** (*Perl_Imarkstack_ptr_ptr)(register PerlInterpreter*);
 static I32** (*Perl_Imarkstack_max_ptr)(register PerlInterpreter*);
 static SV*** (*Perl_Istack_sp_ptr)(register PerlInterpreter*);
 static OP** (*Perl_Iop_ptr)(register PerlInterpreter*);
-static void (*Perl_call_list)(pTHX_ I32, AV*);
 static I32* (*Perl_Iscopestack_ix_ptr)(register PerlInterpreter*);
 static AV** (*Perl_Iunitcheckav_ptr)(register PerlInterpreter*);
+# endif
 #endif
 
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+static perl_key* dll_PL_thr_key;
+#else
 static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*);
 static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*);
 static SV* (*Perl_Isv_yes_ptr)(register PerlInterpreter*);
-static void (*boot_DynaLoader)_((pTHX_ CV*));
 static perl_key* (*Perl_Gthr_key_ptr)_((pTHX));
+#endif
+static void (*boot_DynaLoader)_((pTHX_ CV*));
 
 /*
  * Table of name to function pointer of perl.
@@ -336,9 +384,11 @@ static struct {
     {"perl_parse", (PERL_PROC*)&perl_parse},
     {"Perl_get_context", (PERL_PROC*)&Perl_get_context},
     {"Perl_croak", (PERL_PROC*)&Perl_croak},
+#ifndef PERL5180_OR_LATER
 #ifdef PERL5101_OR_LATER
     {"Perl_croak_xs_usage", (PERL_PROC*)&Perl_croak_xs_usage},
 #endif
+#endif
     {"Perl_croak_nocontext", (PERL_PROC*)&Perl_croak_nocontext},
     {"Perl_dowantarray", (PERL_PROC*)&Perl_dowantarray},
     {"Perl_free_tmps", (PERL_PROC*)&Perl_free_tmps},
@@ -360,7 +410,12 @@ static struct {
     {"Perl_save_int", (PERL_PROC*)&Perl_save_int},
     {"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow},
     {"Perl_set_context", (PERL_PROC*)&Perl_set_context},
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+    {"Perl_sv_2bool_flags", (PERL_PROC*)&Perl_sv_2bool_flags},
+    {"Perl_xs_apiversion_bootcheck",(PERL_PROC*)&Perl_xs_apiversion_bootcheck},
+#else
     {"Perl_sv_2bool", (PERL_PROC*)&Perl_sv_2bool},
+#endif
     {"Perl_sv_2iv", (PERL_PROC*)&Perl_sv_2iv},
     {"Perl_sv_2mortal", (PERL_PROC*)&Perl_sv_2mortal},
 #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
@@ -407,6 +462,9 @@ static struct {
     {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
     {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init},
     {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
+    {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+# else
     {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
     {"Perl_Istack_max_ptr", (PERL_PROC*)&Perl_Istack_max_ptr},
     {"Perl_Istack_base_ptr", (PERL_PROC*)&Perl_Istack_base_ptr},
@@ -418,22 +476,26 @@ static struct {
     {"Perl_Imarkstack_max_ptr", (PERL_PROC*)&Perl_Imarkstack_max_ptr},
     {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
     {"Perl_Iop_ptr", (PERL_PROC*)&Perl_Iop_ptr},
-    {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
     {"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr},
     {"Perl_Iunitcheckav_ptr", (PERL_PROC*)&Perl_Iunitcheckav_ptr},
+# endif
 #endif
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+    {"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key},
+#else
     {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
     {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
     {"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr},
-    {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
     {"Perl_Gthr_key_ptr", (PERL_PROC*)&Perl_Gthr_key_ptr},
+#endif
+    {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
     {"", NULL},
 };
 
 /*
  * Make all runtime-links of perl.
  *
- * 1. Get module handle using LoadLibraryEx.
+ * 1. Get module handle using dlopen() or vimLoadLib().
  * 2. Get pointer to perl function by GetProcAddress.
  * 3. Repeat 2, until get all functions will be used.
  *
@@ -562,9 +624,9 @@ msg_split(s, attr)
  */
     char_u *
 eval_to_string(arg, nextcmd, dolist)
-    char_u     *arg;
-    char_u     **nextcmd;
-    int                dolist;
+    char_u     *arg UNUSED;
+    char_u     **nextcmd UNUSED;
+    int                dolist UNUSED;
 {
     return NULL;
 }
@@ -590,7 +652,7 @@ newWINrv(rv, ptr)
     if (ptr->w_perl_private == NULL)
     {
        ptr->w_perl_private = newSV(0);
-       sv_setiv(ptr->w_perl_private, (IV)ptr);
+       sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
     }
     else
        SvREFCNT_inc(ptr->w_perl_private);
@@ -608,7 +670,7 @@ newBUFrv(rv, ptr)
     if (ptr->b_perl_private == NULL)
     {
        ptr->b_perl_private = newSV(0);
-       sv_setiv(ptr->b_perl_private, (IV)ptr);
+       sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
     }
     else
        SvREFCNT_inc(ptr->b_perl_private);
@@ -619,7 +681,7 @@ newBUFrv(rv, ptr)
 
 /*
  * perl_win_free
- *     Remove all refences to the window to be destroyed
+ *     Remove all references to the window to be destroyed
  */
     void
 perl_win_free(wp)
@@ -755,7 +817,7 @@ ex_perl(eap)
 #ifdef HAVE_SANDBOX
     if (sandbox)
     {
-       safe = perl_get_sv( "VIM::safe", FALSE );
+       safe = perl_get_sv("VIM::safe", FALSE);
 # ifndef MAKE_TEST  /* avoid a warning for unreachable code */
        if (safe == NULL || !SvTRUE(safe))
            EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
@@ -775,7 +837,11 @@ ex_perl(eap)
 
     SvREFCNT_dec(sv);
 
+#ifdef AVOID_PL_ERRGV
+    err = SvPV(perl_get_sv("@", GV_ADD), length);
+#else
     err = SvPV(GvSV(PL_errgv), length);
+#endif
 
     FREETMPS;
     LEAVE;
@@ -845,7 +911,11 @@ ex_perldo(eap)
     sv_catpvn(sv, "}", 1);
     perl_eval_sv(sv, G_DISCARD | G_NOARGS);
     SvREFCNT_dec(sv);
+#ifdef AVOID_PL_ERRGV
+    str = SvPV(perl_get_sv("@", GV_ADD), length);
+#else
     str = SvPV(GvSV(PL_errgv), length);
+#endif
     if (length)
        goto err;
 
@@ -859,7 +929,11 @@ ex_perldo(eap)
        sv_setpv(GvSV(PL_defgv), (char *)ml_get(i));
        PUSHMARK(sp);
        perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL);
+#ifdef AVOID_PL_ERRGV
+       str = SvPV(perl_get_sv("@", GV_ADD), length);
+#else
        str = SvPV(GvSV(PL_errgv), length);
+#endif
        if (length)
            break;
        SPAGAIN;
@@ -892,24 +966,6 @@ int win_count() { return 1; }
 win_T *win_find_nr(int n) { return curwin; }
 #endif
 
-XS(XS_VIM_Msg);
-XS(XS_VIM_SetOption);
-XS(XS_VIM_DoCommand);
-XS(XS_VIM_Eval);
-XS(XS_VIM_Buffers);
-XS(XS_VIM_Windows);
-XS(XS_VIWIN_DESTROY);
-XS(XS_VIWIN_Buffer);
-XS(XS_VIWIN_SetHeight);
-XS(XS_VIWIN_Cursor);
-XS(XS_VIBUF_DESTROY);
-XS(XS_VIBUF_Name);
-XS(XS_VIBUF_Number);
-XS(XS_VIBUF_Count);
-XS(XS_VIBUF_Get);
-XS(XS_VIBUF_Set);
-XS(XS_VIBUF_Delete);
-XS(XS_VIBUF_Append);
 XS(boot_VIM);
 
     static void
@@ -1016,7 +1072,7 @@ Buffers(...)
        {
            SV *sv = ST(i);
            if (SvIOK(sv))
-               b = SvIV(ST(i));
+               b = (int) SvIV(ST(i));
            else
            {
                char_u *pat;
@@ -1024,7 +1080,7 @@ Buffers(...)
 
                pat = (char_u *)SvPV(sv, len);
                ++emsg_off;
-               b = buflist_findpat(pat, pat+len, FALSE, FALSE);
+               b = buflist_findpat(pat, pat+len, FALSE, FALSE, FALSE);
                --emsg_off;
            }
 
@@ -1059,7 +1115,7 @@ Windows(...)
     {
        for (i = 0; i < items; i++)
        {
-           w = SvIV(ST(i));
+           w = (int) SvIV(ST(i));
            vimwin = win_find_nr(w);
            if (vimwin)
                XPUSHs(newWINrv(newSV(0), vimwin));
@@ -1108,7 +1164,7 @@ Cursor(win, ...)
     VIWIN win
 
     PPCODE:
-    if(items == 1)
+    if (items == 1)
     {
       EXTEND(sp, 2);
       if (!win_valid(win))
@@ -1116,14 +1172,14 @@ Cursor(win, ...)
       PUSHs(sv_2mortal(newSViv(win->w_cursor.lnum)));
       PUSHs(sv_2mortal(newSViv(win->w_cursor.col)));
     }
-    else if(items == 3)
+    else if (items == 3)
     {
       int lnum, col;
 
       if (!win_valid(win))
          win = curwin;
-      lnum = SvIV(ST(1));
-      col = SvIV(ST(2));
+      lnum = (int) SvIV(ST(1));
+      col = (int) SvIV(ST(2));
       win->w_cursor.lnum = lnum;
       win->w_cursor.col = col;
       check_cursor();              /* put cursor on an existing line */
@@ -1184,7 +1240,7 @@ Get(vimbuf, ...)
     {
        for (i = 1; i < items; i++)
        {
-           lnum = SvIV(ST(i));
+           lnum = (long) SvIV(ST(i));
            if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
            {
                line = ml_get_buf(vimbuf, lnum, FALSE);
@@ -1207,7 +1263,7 @@ Set(vimbuf, ...)
        if (items < 3)
            croak("Usage: VIBUF::Set(vimbuf, lnum, @lines)");
 
-       lnum = SvIV(ST(1));
+       lnum = (long) SvIV(ST(1));
        for(i = 2; i < items; i++, lnum++)
        {
            line = SvPV(ST(i),PL_na);
@@ -1242,16 +1298,16 @@ Delete(vimbuf, ...)
     {
        if (items == 2)
        {
-           lnum = SvIV(ST(1));
+           lnum = (long) SvIV(ST(1));
            count = 1;
        }
        else if (items == 3)
        {
-           lnum = SvIV(ST(1));
-           count = 1 + SvIV(ST(2)) - lnum;
-           if(count == 0)
+           lnum = (long) SvIV(ST(1));
+           count = (long) 1 + SvIV(ST(2)) - lnum;
+           if (count == 0)
                count = 1;
-           if(count < 0)
+           if (count < 0)
            {
                lnum -= count;
                count = -count;
@@ -1299,7 +1355,7 @@ Append(vimbuf, ...)
        if (items < 3)
            croak("Usage: VIBUF::Append(vimbuf, lnum, @lines)");
 
-       lnum = SvIV(ST(1));
+       lnum = (long) SvIV(ST(1));
        for (i = 2; i < items; i++, lnum++)
        {
            line = SvPV(ST(i),PL_na);
index 10c6148..6ea0aff 100644 (file)
@@ -1,4 +1,4 @@
-/* vi:set ts=8 sts=4 sw=4:
+/* vi:set ts=8 sts=4 sw=4 noet:
  *
  * VIM - Vi IMproved   by Bram Moolenaar
  *
@@ -7,11 +7,85 @@
  * See README.txt for an overview of the Vim source code.
  */
 /*
- * Python extensions by Paul Moore, David Leonard, Roland Puntaier.
+ * Python extensions by Paul Moore, David Leonard, Roland Puntaier, Nikolay
+ * Pavlov.
  *
  * Common code for if_python.c and if_python3.c.
  */
 
+static char_u e_py_systemexit[]        = "E880: Can't handle SystemExit of %s exception in vim";
+
+#if PY_VERSION_HEX < 0x02050000
+typedef int Py_ssize_t;  /* Python 2.4 and earlier don't have this type. */
+#endif
+
+#ifdef FEAT_MBYTE
+# define ENC_OPT ((char *)p_enc)
+#else
+# define ENC_OPT "latin1"
+#endif
+#define DOPY_FUNC "_vim_pydo"
+
+static const char *vim_special_path = "_vim_path_";
+
+#define PyErr_SET_STRING(exc, str) PyErr_SetString(exc, _(str))
+#define PyErr_SetVim(str) PyErr_SetString(VimError, str)
+#define PyErr_SET_VIM(str) PyErr_SET_STRING(VimError, str)
+#define PyErr_FORMAT(exc, str, tail) PyErr_Format(exc, _(str), tail)
+#define PyErr_VIM_FORMAT(str, tail) PyErr_FORMAT(VimError, str, tail)
+
+#define Py_TYPE_NAME(obj) (obj->ob_type->tp_name == NULL \
+       ? "(NULL)" \
+       : obj->ob_type->tp_name)
+
+#define RAISE_NO_EMPTY_KEYS PyErr_SET_STRING(PyExc_ValueError, \
+                                           N_("empty keys are not allowed"))
+#define RAISE_LOCKED_DICTIONARY PyErr_SET_VIM(N_("dictionary is locked"))
+#define RAISE_LOCKED_LIST PyErr_SET_VIM(N_("list is locked"))
+#define RAISE_UNDO_FAIL PyErr_SET_VIM(N_("cannot save undo information"))
+#define RAISE_DELETE_LINE_FAIL PyErr_SET_VIM(N_("cannot delete line"))
+#define RAISE_INSERT_LINE_FAIL PyErr_SET_VIM(N_("cannot insert line"))
+#define RAISE_REPLACE_LINE_FAIL PyErr_SET_VIM(N_("cannot replace line"))
+#define RAISE_KEY_ADD_FAIL(key) \
+    PyErr_VIM_FORMAT(N_("failed to add key '%s' to dictionary"), key)
+#define RAISE_INVALID_INDEX_TYPE(idx) \
+    PyErr_FORMAT(PyExc_TypeError, N_("index must be int or slice, not %s"), \
+           Py_TYPE_NAME(idx));
+
+#define INVALID_BUFFER_VALUE ((buf_T *)(-1))
+#define INVALID_WINDOW_VALUE ((win_T *)(-1))
+#define INVALID_TABPAGE_VALUE ((tabpage_T *)(-1))
+
+typedef void (*rangeinitializer)(void *);
+typedef void (*runner)(const char *, void *
+#ifdef PY_CAN_RECURSE
+       , PyGILState_STATE *
+#endif
+       );
+
+static int ConvertFromPyObject(PyObject *, typval_T *);
+static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *);
+static int ConvertFromPyMapping(PyObject *, typval_T *);
+static PyObject *WindowNew(win_T *, tabpage_T *);
+static PyObject *BufferNew (buf_T *);
+static PyObject *LineToString(const char *);
+
+static PyInt RangeStart;
+static PyInt RangeEnd;
+
+static PyObject *globals;
+
+static PyObject *py_chdir;
+static PyObject *py_fchdir;
+static PyObject *py_getcwd;
+static PyObject *vim_module;
+static PyObject *vim_special_path_object;
+
+static PyObject *py_find_module;
+static PyObject *py_load_module;
+
+static PyObject *VimError;
+
 /*
  * obtain a lock on the Vim data structures
  */
@@ -28,146 +102,265 @@ Python_Release_Vim(void)
 {
 }
 
-/* Output object definition
+/*
+ * The "todecref" argument holds a pointer to PyObject * that must be
+ * DECREF'ed after returned char_u * is no longer needed or NULL if all what
+ * was needed to generate returned value is object.
+ *
+ * Use Py_XDECREF to decrement reference count.
  */
+    static char_u *
+StringToChars(PyObject *obj, PyObject **todecref)
+{
+    char_u     *str;
 
-static PyObject *OutputWrite(PyObject *, PyObject *);
-static PyObject *OutputWritelines(PyObject *, PyObject *);
+    if (PyBytes_Check(obj))
+    {
 
-typedef void (*writefn)(char_u *);
-static void writer(writefn fn, char_u *str, PyInt n);
+       if (PyBytes_AsStringAndSize(obj, (char **) &str, NULL) == -1
+               || str == NULL)
+           return NULL;
 
-typedef struct
-{
-    PyObject_HEAD
-    long softspace;
-    long error;
-} OutputObject;
+       *todecref = NULL;
+    }
+    else if (PyUnicode_Check(obj))
+    {
+       PyObject        *bytes;
 
-static struct PyMethodDef OutputMethods[] = {
-    /* name,       function,           calling,    documentation */
-    {"write",      OutputWrite,        1,          "" },
-    {"writelines",  OutputWritelines,  1,          "" },
-    { NULL,        NULL,               0,          NULL }
-};
+       if (!(bytes = PyUnicode_AsEncodedString(obj, ENC_OPT, NULL)))
+           return NULL;
 
-#define PyErr_SetVim(str) PyErr_SetString(VimError, str)
+       if(PyBytes_AsStringAndSize(bytes, (char **) &str, NULL) == -1
+               || str == NULL)
+       {
+           Py_DECREF(bytes);
+           return NULL;
+       }
+
+       *todecref = bytes;
+    }
+    else
+    {
+#if PY_MAJOR_VERSION < 3
+       PyErr_FORMAT(PyExc_TypeError,
+               N_("expected str() or unicode() instance, but got %s"),
+               Py_TYPE_NAME(obj));
+#else
+       PyErr_FORMAT(PyExc_TypeError,
+               N_("expected bytes() or str() instance, but got %s"),
+               Py_TYPE_NAME(obj));
+#endif
+       return NULL;
+    }
 
-/*************/
+    return (char_u *) str;
+}
 
-/* Output buffer management
- */
+#define NUMBER_LONG     1
+#define NUMBER_INT      2
+#define NUMBER_NATURAL  4
+#define NUMBER_UNSIGNED 8
 
-    static PyObject *
-OutputWrite(PyObject *self, PyObject *args)
+    static int
+NumberToLong(PyObject *obj, long *result, int flags)
 {
-    int len;
-    char *str;
-    int error = ((OutputObject *)(self))->error;
+#if PY_MAJOR_VERSION < 3
+    if (PyInt_Check(obj))
+    {
+       *result = PyInt_AsLong(obj);
+       if (PyErr_Occurred())
+           return -1;
+    }
+    else
+#endif
+    if (PyLong_Check(obj))
+    {
+       *result = PyLong_AsLong(obj);
+       if (PyErr_Occurred())
+           return -1;
+    }
+    else if (PyNumber_Check(obj))
+    {
+       PyObject        *num;
 
-    if (!PyArg_ParseTuple(args, "s#", &str, &len))
-       return NULL;
+       if (!(num = PyNumber_Long(obj)))
+           return -1;
 
-    Py_BEGIN_ALLOW_THREADS
-    Python_Lock_Vim();
-    writer((writefn)(error ? emsg : msg), (char_u *)str, len);
-    Python_Release_Vim();
-    Py_END_ALLOW_THREADS
+       *result = PyLong_AsLong(num);
 
-    Py_INCREF(Py_None);
-    return Py_None;
+       Py_DECREF(num);
+
+       if (PyErr_Occurred())
+           return -1;
+    }
+    else
+    {
+#if PY_MAJOR_VERSION < 3
+       PyErr_FORMAT(PyExc_TypeError,
+               N_("expected int(), long() or something supporting "
+                  "coercing to long(), but got %s"),
+               Py_TYPE_NAME(obj));
+#else
+       PyErr_FORMAT(PyExc_TypeError,
+               N_("expected int() or something supporting coercing to int(), "
+                  "but got %s"),
+               Py_TYPE_NAME(obj));
+#endif
+       return -1;
+    }
+
+    if (flags & NUMBER_INT)
+    {
+       if (*result > INT_MAX)
+       {
+           PyErr_SET_STRING(PyExc_OverflowError,
+                   N_("value is too large to fit into C int type"));
+           return -1;
+       }
+       else if (*result < INT_MIN)
+       {
+           PyErr_SET_STRING(PyExc_OverflowError,
+                   N_("value is too small to fit into C int type"));
+           return -1;
+       }
+    }
+
+    if (flags & NUMBER_NATURAL)
+    {
+       if (*result <= 0)
+       {
+           PyErr_SET_STRING(PyExc_ValueError,
+                   N_("number must be greater then zero"));
+           return -1;
+       }
+    }
+    else if (flags & NUMBER_UNSIGNED)
+    {
+       if (*result < 0)
+       {
+           PyErr_SET_STRING(PyExc_ValueError,
+                   N_("number must be greater or equal to zero"));
+           return -1;
+       }
+    }
+
+    return 0;
 }
 
-    static PyObject *
-OutputWritelines(PyObject *self, PyObject *args)
+    static int
+add_string(PyObject *list, char *s)
 {
-    PyInt n;
-    PyInt i;
-    PyObject *list;
-    int error = ((OutputObject *)(self))->error;
+    PyObject   *string;
 
-    if (!PyArg_ParseTuple(args, "O", &list))
-       return NULL;
-    Py_INCREF(list);
+    if (!(string = PyString_FromString(s)))
+       return -1;
 
-    if (!PyList_Check(list)) {
-       PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
-       Py_DECREF(list);
-       return NULL;
+    if (PyList_Append(list, string))
+    {
+       Py_DECREF(string);
+       return -1;
     }
 
-    n = PyList_Size(list);
+    Py_DECREF(string);
+    return 0;
+}
 
-    for (i = 0; i < n; ++i)
-    {
-       PyObject *line = PyList_GetItem(list, i);
-       char *str;
-       PyInt len;
+    static PyObject *
+ObjectDir(PyObject *self, char **attributes)
+{
+    PyMethodDef        *method;
+    char       **attr;
+    PyObject   *ret;
 
-       if (!PyArg_Parse(line, "s#", &str, &len)) {
-           PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
-           Py_DECREF(list);
+    if (!(ret = PyList_New(0)))
+       return NULL;
+
+    if (self)
+       for (method = self->ob_type->tp_methods ; method->ml_name != NULL ; ++method)
+           if (add_string(ret, (char *)method->ml_name))
+           {
+               Py_DECREF(ret);
+               return NULL;
+           }
+
+    for (attr = attributes ; *attr ; ++attr)
+       if (add_string(ret, *attr))
+       {
+           Py_DECREF(ret);
            return NULL;
        }
 
-       Py_BEGIN_ALLOW_THREADS
-       Python_Lock_Vim();
-       writer((writefn)(error ? emsg : msg), (char_u *)str, len);
-       Python_Release_Vim();
-       Py_END_ALLOW_THREADS
+#if PY_MAJOR_VERSION < 3
+    if (add_string(ret, "__members__"))
+    {
+       Py_DECREF(ret);
+       return NULL;
     }
+#endif
 
-    Py_DECREF(list);
-    Py_INCREF(Py_None);
-    return Py_None;
+    return ret;
 }
 
-static char_u *buffer = NULL;
-static PyInt buffer_len = 0;
-static PyInt buffer_size = 0;
+/* Output buffer management
+ */
 
-static writefn old_fn = NULL;
+/* Function to write a line, points to either msg() or emsg(). */
+typedef void (*writefn)(char_u *);
 
-    static void
-buffer_ensure(PyInt n)
+static PyTypeObject OutputType;
+
+typedef struct
 {
-    PyInt new_size;
-    char_u *new_buffer;
+    PyObject_HEAD
+    long softspace;
+    long error;
+} OutputObject;
 
-    if (n < buffer_size)
-       return;
+static char *OutputAttrs[] = {
+    "softspace",
+    NULL
+};
 
-    new_size = buffer_size;
-    while (new_size < n)
-       new_size += 80;
+    static PyObject *
+OutputDir(PyObject *self)
+{
+    return ObjectDir(self, OutputAttrs);
+}
 
-    if (new_size != buffer_size)
+    static int
+OutputSetattr(OutputObject *self, char *name, PyObject *valObject)
+{
+    if (valObject == NULL)
     {
-       new_buffer = alloc((unsigned)new_size);
-       if (new_buffer == NULL)
-           return;
-
-       if (buffer)
-       {
-           memcpy(new_buffer, buffer, buffer_len);
-           vim_free(buffer);
-       }
+       PyErr_SET_STRING(PyExc_AttributeError,
+               N_("can't delete OutputObject attributes"));
+       return -1;
+    }
 
-       buffer = new_buffer;
-       buffer_size = new_size;
+    if (strcmp(name, "softspace") == 0)
+    {
+       if (NumberToLong(valObject, &(self->softspace), NUMBER_UNSIGNED))
+           return -1;
+       return 0;
     }
+
+    PyErr_FORMAT(PyExc_AttributeError, N_("invalid attribute: %s"), name);
+    return -1;
 }
 
+/* Buffer IO, we write one whole line at a time. */
+static garray_T io_ga = {0, 0, 1, 80, NULL};
+static writefn old_fn = NULL;
+
     static void
 PythonIO_Flush(void)
 {
-    if (old_fn && buffer_len)
+    if (old_fn != NULL && io_ga.ga_len > 0)
     {
-       buffer[buffer_len] = 0;
-       old_fn(buffer);
+       ((char_u *)io_ga.ga_data)[io_ga.ga_len] = NUL;
+       old_fn((char_u *)io_ga.ga_data);
     }
-
-    buffer_len = 0;
+    io_ga.ga_len = 0;
 }
 
     static void
@@ -175,35 +368,114 @@ writer(writefn fn, char_u *str, PyInt n)
 {
     char_u *ptr;
 
-    if (fn != old_fn && old_fn != NULL)
+    /* Flush when switching output function. */
+    if (fn != old_fn)
        PythonIO_Flush();
-
     old_fn = fn;
 
+    /* Write each NL separated line.  Text after the last NL is kept for
+     * writing later. */
     while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL)
     {
        PyInt len = ptr - str;
 
-       buffer_ensure(buffer_len + len + 1);
+       if (ga_grow(&io_ga, (int)(len + 1)) == FAIL)
+           break;
 
-       memcpy(buffer + buffer_len, str, len);
-       buffer_len += len;
-       buffer[buffer_len] = 0;
-       fn(buffer);
+       mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)len);
+       ((char *)io_ga.ga_data)[io_ga.ga_len + len] = NUL;
+       fn((char_u *)io_ga.ga_data);
        str = ptr + 1;
        n -= len + 1;
-       buffer_len = 0;
+       io_ga.ga_len = 0;
+    }
+
+    /* Put the remaining text into io_ga for later printing. */
+    if (n > 0 && ga_grow(&io_ga, (int)(n + 1)) == OK)
+    {
+       mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)n);
+       io_ga.ga_len += (int)n;
+    }
+}
+
+    static int
+write_output(OutputObject *self, PyObject *string)
+{
+    Py_ssize_t len = 0;
+    char       *str = NULL;
+    int                error = self->error;
+
+    if (!PyArg_Parse(string, "et#", ENC_OPT, &str, &len))
+       return -1;
+
+    Py_BEGIN_ALLOW_THREADS
+    Python_Lock_Vim();
+    writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+    Python_Release_Vim();
+    Py_END_ALLOW_THREADS
+    PyMem_Free(str);
+
+    return 0;
+}
+
+    static PyObject *
+OutputWrite(OutputObject *self, PyObject *string)
+{
+    if (write_output(self, string))
+       return NULL;
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+    static PyObject *
+OutputWritelines(OutputObject *self, PyObject *seq)
+{
+    PyObject   *iterator;
+    PyObject   *item;
+
+    if (!(iterator = PyObject_GetIter(seq)))
+       return NULL;
+
+    while ((item = PyIter_Next(iterator)))
+    {
+       if (write_output(self, item))
+       {
+           Py_DECREF(iterator);
+           Py_DECREF(item);
+           return NULL;
+       }
+       Py_DECREF(item);
     }
 
-    /* Put the remaining text into the buffer for later printing */
-    buffer_ensure(buffer_len + n + 1);
-    memcpy(buffer + buffer_len, str, n);
-    buffer_len += n;
+    Py_DECREF(iterator);
+
+    /* Iterator may have finished due to an exception */
+    if (PyErr_Occurred())
+       return NULL;
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+    static PyObject *
+OutputFlush(PyObject *self UNUSED)
+{
+    /* do nothing */
+    Py_INCREF(Py_None);
+    return Py_None;
 }
 
 /***************/
 
-static PyTypeObject OutputType;
+static struct PyMethodDef OutputMethods[] = {
+    /* name,       function,                           calling,        doc */
+    {"write",      (PyCFunction)OutputWrite,           METH_O,         ""},
+    {"writelines",  (PyCFunction)OutputWritelines,     METH_O,         ""},
+    {"flush",      (PyCFunction)OutputFlush,           METH_NOARGS,    ""},
+    {"__dir__",            (PyCFunction)OutputDir,             METH_NOARGS,    ""},
+    { NULL,        NULL,                               0,              NULL}
+};
 
 static OutputObject Output =
 {
@@ -222,8 +494,10 @@ static OutputObject Error =
     static int
 PythonIO_Init_io(void)
 {
-    PySys_SetObject("stdout", (PyObject *)(void *)&Output);
-    PySys_SetObject("stderr", (PyObject *)(void *)&Error);
+    if (PySys_SetObject("stdout", (PyObject *)(void *)&Output))
+       return -1;
+    if (PySys_SetObject("stderr", (PyObject *)(void *)&Error))
+       return -1;
 
     if (PyErr_Occurred())
     {
@@ -234,61 +508,121 @@ PythonIO_Init_io(void)
     return 0;
 }
 
+typedef struct
+{
+    PyObject_HEAD
+    PyObject   *module;
+} LoaderObject;
+static PyTypeObject LoaderType;
 
-static PyObject *VimError;
+    static void
+LoaderDestructor(LoaderObject *self)
+{
+    Py_DECREF(self->module);
+    DESTRUCTOR_FINISH(self);
+}
+
+    static PyObject *
+LoaderLoadModule(LoaderObject *self, PyObject *args UNUSED)
+{
+    PyObject   *ret = self->module;
+
+    Py_INCREF(ret);
+    return ret;
+}
+
+static struct PyMethodDef LoaderMethods[] = {
+    /* name,       function,                           calling,        doc */
+    {"load_module", (PyCFunction)LoaderLoadModule,     METH_VARARGS,   ""},
+    { NULL,        NULL,                               0,              NULL}
+};
 
 /* Check to see whether a Vim error has been reported, or a keyboard
  * interrupt has been detected.
  */
+
+    static void
+VimTryStart(void)
+{
+    ++trylevel;
+}
+
     static int
-VimErrorCheck(void)
+VimTryEnd(void)
 {
+    --trylevel;
+    /* Without this it stops processing all subsequent VimL commands and
+     * generates strange error messages if I e.g. try calling Test() in a
+     * cycle */
+    did_emsg = FALSE;
+    /* Keyboard interrupt should be preferred over anything else */
     if (got_int)
     {
+       did_throw = got_int = FALSE;
        PyErr_SetNone(PyExc_KeyboardInterrupt);
-       return 1;
+       return -1;
     }
-    else if (did_emsg && !PyErr_Occurred())
+    else if (!did_throw)
+       return (PyErr_Occurred() ? -1 : 0);
+    /* Python exception is preferred over vim one; unlikely to occur though */
+    else if (PyErr_Occurred())
     {
-       PyErr_SetNone(VimError);
-       return 1;
+       did_throw = FALSE;
+       return -1;
+    }
+    /* Finally transform VimL exception to python one */
+    else
+    {
+       PyErr_SetVim((char *)current_exception->value);
+       discard_current_exception();
+       return -1;
     }
+}
 
+    static int
+VimCheckInterrupt(void)
+{
+    if (got_int)
+    {
+       PyErr_SetNone(PyExc_KeyboardInterrupt);
+       return 1;
+    }
     return 0;
 }
 
 /* Vim module - Implementation
  */
+
     static PyObject *
-VimCommand(PyObject *self UNUSED, PyObject *args)
+VimCommand(PyObject *self UNUSED, PyObject *string)
 {
-    char *cmd;
-    PyObject *result;
+    char_u     *cmd;
+    PyObject   *ret;
+    PyObject   *todecref;
 
-    if (!PyArg_ParseTuple(args, "s", &cmd))
+    if (!(cmd = StringToChars(string, &todecref)))
        return NULL;
 
-    PyErr_Clear();
-
     Py_BEGIN_ALLOW_THREADS
     Python_Lock_Vim();
 
-    do_cmdline_cmd((char_u *)cmd);
+    VimTryStart();
+    do_cmdline_cmd(cmd);
     update_screen(VALID);
 
     Python_Release_Vim();
     Py_END_ALLOW_THREADS
 
-    if (VimErrorCheck())
-       result = NULL;
+    if (VimTryEnd())
+       ret = NULL;
     else
-       result = Py_None;
+       ret = Py_None;
 
-    Py_XINCREF(result);
-    return result;
+    Py_XINCREF(ret);
+    Py_XDECREF(todecref);
+    return ret;
 }
 
-#ifdef FEAT_EVAL
 /*
  * Function to translate a typval_T into a PyObject; this will recursively
  * translate lists/dictionaries into their Python equivalents.
@@ -297,47 +631,46 @@ VimCommand(PyObject *self UNUSED, PyObject *args)
  * you call VimToPython.
  */
     static PyObject *
-VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
+VimToPython(typval_T *our_tv, int depth, PyObject *lookup_dict)
 {
-    PyObject   *result;
+    PyObject   *ret;
     PyObject   *newObj;
-    char       ptrBuf[NUMBUFLEN];
+    char       ptrBuf[sizeof(void *) * 2 + 3];
 
     /* Avoid infinite recursion */
     if (depth > 100)
     {
        Py_INCREF(Py_None);
-       result = Py_None;
-       return result;
+       ret = Py_None;
+       return ret;
     }
 
-    /* Check if we run into a recursive loop.  The item must be in lookupDict
+    /* Check if we run into a recursive loop.  The item must be in lookup_dict
      * then and we can use it again. */
     if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL)
            || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL))
     {
-       sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U,
-               our_tv->v_type == VAR_LIST ? (long_u)our_tv->vval.v_list
-                                          : (long_u)our_tv->vval.v_dict);
-       result = PyDict_GetItemString(lookupDict, ptrBuf);
-       if (result != NULL)
+       sprintf(ptrBuf, "%p",
+               our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
+                                          : (void *)our_tv->vval.v_dict);
+
+       if ((ret = PyDict_GetItemString(lookup_dict, ptrBuf)))
        {
-           Py_INCREF(result);
-           return result;
+           Py_INCREF(ret);
+           return ret;
        }
     }
 
     if (our_tv->v_type == VAR_STRING)
-    {
-       result = Py_BuildValue("s", our_tv->vval.v_string);
-    }
+       ret = PyString_FromString(our_tv->vval.v_string == NULL
+                                       ? "" : (char *)our_tv->vval.v_string);
     else if (our_tv->v_type == VAR_NUMBER)
     {
        char buf[NUMBUFLEN];
 
        /* For backwards compatibility numbers are stored as strings. */
        sprintf(buf, "%ld", (long)our_tv->vval.v_number);
-       result = Py_BuildValue("s", buf);
+       ret = PyString_FromString((char *)buf);
     }
 # ifdef FEAT_FLOAT
     else if (our_tv->v_type == VAR_FLOAT)
@@ -345,7 +678,7 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
        char buf[NUMBUFLEN];
 
        sprintf(buf, "%f", our_tv->vval.v_float);
-       result = Py_BuildValue("s", buf);
+       ret = PyString_FromString((char *)buf);
     }
 # endif
     else if (our_tv->v_type == VAR_LIST)
@@ -353,43 +686,70 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
        list_T          *list = our_tv->vval.v_list;
        listitem_T      *curr;
 
-       result = PyList_New(0);
+       if (list == NULL)
+           return NULL;
+
+       if (!(ret = PyList_New(0)))
+           return NULL;
 
-       if (list != NULL)
+       if (PyDict_SetItemString(lookup_dict, ptrBuf, ret))
        {
-           PyDict_SetItemString(lookupDict, ptrBuf, result);
+           Py_DECREF(ret);
+           return NULL;
+       }
 
-           for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
+       for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
+       {
+           if (!(newObj = VimToPython(&curr->li_tv, depth + 1, lookup_dict)))
+           {
+               Py_DECREF(ret);
+               return NULL;
+           }
+           if (PyList_Append(ret, newObj))
            {
-               newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict);
-               PyList_Append(result, newObj);
                Py_DECREF(newObj);
+               Py_DECREF(ret);
+               return NULL;
            }
+           Py_DECREF(newObj);
        }
     }
     else if (our_tv->v_type == VAR_DICT)
     {
-       result = PyDict_New();
 
-       if (our_tv->vval.v_dict != NULL)
-       {
-           hashtab_T   *ht = &our_tv->vval.v_dict->dv_hashtab;
-           long_u      todo = ht->ht_used;
-           hashitem_T  *hi;
-           dictitem_T  *di;
+       hashtab_T       *ht = &our_tv->vval.v_dict->dv_hashtab;
+       long_u  todo = ht->ht_used;
+       hashitem_T      *hi;
+       dictitem_T      *di;
+       if (our_tv->vval.v_dict == NULL)
+           return NULL;
+
+       if (!(ret = PyDict_New()))
+           return NULL;
 
-           PyDict_SetItemString(lookupDict, ptrBuf, result);
+       if (PyDict_SetItemString(lookup_dict, ptrBuf, ret))
+       {
+           Py_DECREF(ret);
+           return NULL;
+       }
 
-           for (hi = ht->ht_array; todo > 0; ++hi)
+       for (hi = ht->ht_array; todo > 0; ++hi)
+       {
+           if (!HASHITEM_EMPTY(hi))
            {
-               if (!HASHITEM_EMPTY(hi))
-               {
-                   --todo;
+               --todo;
 
-                   di = dict_lookup(hi);
-                   newObj = VimToPython(&di->di_tv, depth + 1, lookupDict);
-                   PyDict_SetItemString(result, (char *)hi->hi_key, newObj);
+               di = dict_lookup(hi);
+               if (!(newObj = VimToPython(&di->di_tv, depth + 1, lookup_dict)))
+               {
+                   Py_DECREF(ret);
+                   return NULL;
+               }
+               if (PyDict_SetItemString(ret, (char *)hi->hi_key, newObj))
+               {
+                   Py_DECREF(ret);
                    Py_DECREF(newObj);
+                   return NULL;
                }
            }
        }
@@ -397,43 +757,55 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
     else
     {
        Py_INCREF(Py_None);
-       result = Py_None;
+       ret = Py_None;
     }
 
-    return result;
+    return ret;
 }
-#endif
 
     static PyObject *
-VimEval(PyObject *self UNUSED, PyObject *args UNUSED)
+VimEval(PyObject *self UNUSED, PyObject *args)
 {
-#ifdef FEAT_EVAL
-    char       *expr;
+    char_u     *expr;
     typval_T   *our_tv;
-    PyObject   *result;
-    PyObject    *lookup_dict;
+    PyObject   *string;
+    PyObject   *todecref;
+    PyObject   *ret;
+    PyObject   *lookup_dict;
+
+    if (!PyArg_ParseTuple(args, "O", &string))
+       return NULL;
 
-    if (!PyArg_ParseTuple(args, "s", &expr))
+    if (!(expr = StringToChars(string, &todecref)))
        return NULL;
 
     Py_BEGIN_ALLOW_THREADS
     Python_Lock_Vim();
-    our_tv = eval_expr((char_u *)expr, NULL);
-
+    VimTryStart();
+    our_tv = eval_expr(expr, NULL);
     Python_Release_Vim();
     Py_END_ALLOW_THREADS
 
+    Py_XDECREF(todecref);
+
+    if (VimTryEnd())
+       return NULL;
+
     if (our_tv == NULL)
     {
-       PyErr_SetVim(_("invalid expression"));
+       PyErr_SET_VIM(N_("invalid expression"));
        return NULL;
     }
 
     /* Convert the Vim type into a Python type.  Create a dictionary that's
      * used to check for recursive loops. */
-    lookup_dict = PyDict_New();
-    result = VimToPython(our_tv, 1, lookup_dict);
-    Py_DECREF(lookup_dict);
+    if (!(lookup_dict = PyDict_New()))
+       ret = NULL;
+    else
+    {
+       ret = VimToPython(our_tv, 1, lookup_dict);
+       Py_DECREF(lookup_dict);
+    }
 
 
     Py_BEGIN_ALLOW_THREADS
@@ -442,908 +814,5347 @@ VimEval(PyObject *self UNUSED, PyObject *args UNUSED)
     Python_Release_Vim();
     Py_END_ALLOW_THREADS
 
-    return result;
-#else
-    PyErr_SetVim(_("expressions disabled at compile time"));
-    return NULL;
-#endif
+    return ret;
 }
 
-/*
- * Vim module - Definitions
- */
-
-static struct PyMethodDef VimMethods[] = {
-    /* name,        function,          calling,    documentation */
-    {"command",             VimCommand,        1,          "Execute a Vim ex-mode command" },
-    {"eval",        VimEval,           1,          "Evaluate an expression using Vim evaluator" },
-    { NULL,         NULL,              0,          NULL }
-};
+static PyObject *ConvertToPyObject(typval_T *);
 
-typedef struct
+    static PyObject *
+VimEvalPy(PyObject *self UNUSED, PyObject *string)
 {
-    PyObject_HEAD
-    buf_T *buf;
-}
-BufferObject;
+    typval_T   *our_tv;
+    PyObject   *ret;
+    char_u     *expr;
+    PyObject   *todecref;
 
-#define INVALID_BUFFER_VALUE ((buf_T *)(-1))
+    if (!(expr = StringToChars(string, &todecref)))
+       return NULL;
 
-/*
- * Buffer list object - Implementation
- */
+    Py_BEGIN_ALLOW_THREADS
+    Python_Lock_Vim();
+    VimTryStart();
+    our_tv = eval_expr(expr, NULL);
+    Python_Release_Vim();
+    Py_END_ALLOW_THREADS
 
-    static PyInt
-BufListLength(PyObject *self UNUSED)
-{
-    buf_T      *b = firstbuf;
-    PyInt      n = 0;
+    Py_XDECREF(todecref);
 
-    while (b)
+    if (VimTryEnd())
+       return NULL;
+
+    if (our_tv == NULL)
     {
-       ++n;
-       b = b->b_next;
+       PyErr_SET_VIM(N_("invalid expression"));
+       return NULL;
     }
 
-    return n;
+    ret = ConvertToPyObject(our_tv);
+    Py_BEGIN_ALLOW_THREADS
+    Python_Lock_Vim();
+    free_tv(our_tv);
+    Python_Release_Vim();
+    Py_END_ALLOW_THREADS
+
+    return ret;
 }
 
     static PyObject *
-BufListItem(PyObject *self UNUSED, PyInt n)
+VimStrwidth(PyObject *self UNUSED, PyObject *string)
 {
-    buf_T *b;
+    char_u     *str;
+    PyObject   *todecref;
+    int                len;
 
-    for (b = firstbuf; b; b = b->b_next, --n)
-    {
-       if (n == 0)
-           return BufferNew(b);
-    }
+    if (!(str = StringToChars(string, &todecref)))
+       return NULL;
 
-    PyErr_SetString(PyExc_IndexError, _("no such buffer"));
-    return NULL;
+#ifdef FEAT_MBYTE
+    len = mb_string2cells(str, (int)STRLEN(str));
+#else
+    len = STRLEN(str);
+#endif
+
+    Py_XDECREF(todecref);
+
+    return PyLong_FromLong(len);
 }
 
-typedef struct
+    static PyObject *
+_VimChdir(PyObject *_chdir, PyObject *args, PyObject *kwargs)
 {
-    PyObject_HEAD
-    win_T      *win;
-} WindowObject;
+    PyObject   *ret;
+    PyObject   *newwd;
+    PyObject   *todecref;
+    char_u     *new_dir;
 
-#define INVALID_WINDOW_VALUE ((win_T *)(-1))
+    if (_chdir == NULL)
+       return NULL;
+    if (!(ret = PyObject_Call(_chdir, args, kwargs)))
+       return NULL;
 
-    static int
-CheckWindow(WindowObject *this)
-{
-    if (this->win == INVALID_WINDOW_VALUE)
+    if (!(newwd = PyObject_CallFunctionObjArgs(py_getcwd, NULL)))
     {
-       PyErr_SetVim(_("attempt to refer to deleted window"));
-       return -1;
+       Py_DECREF(ret);
+       return NULL;
     }
 
-    return 0;
-}
+    if (!(new_dir = StringToChars(newwd, &todecref)))
+    {
+       Py_DECREF(ret);
+       Py_DECREF(newwd);
+       return NULL;
+    }
 
-static int WindowSetattr(PyObject *, char *, PyObject *);
-static PyObject *WindowRepr(PyObject *);
+    VimTryStart();
 
-    static int
-WindowSetattr(PyObject *self, char *name, PyObject *val)
-{
-    WindowObject *this = (WindowObject *)(self);
+    if (vim_chdir(new_dir))
+    {
+       Py_DECREF(ret);
+       Py_DECREF(newwd);
+       Py_XDECREF(todecref);
 
-    if (CheckWindow(this))
-       return -1;
+       if (VimTryEnd())
+           return NULL;
 
-    if (strcmp(name, "buffer") == 0)
-    {
-       PyErr_SetString(PyExc_TypeError, _("readonly attribute"));
-       return -1;
+       PyErr_SET_VIM(N_("failed to change directory"));
+       return NULL;
     }
-    else if (strcmp(name, "cursor") == 0)
-    {
-       long lnum;
-       long col;
-       long len;
-
-       if (!PyArg_Parse(val, "(ll)", &lnum, &col))
-           return -1;
 
-       if (lnum <= 0 || lnum > this->win->w_buffer->b_ml.ml_line_count)
-       {
-           PyErr_SetVim(_("cursor position outside buffer"));
-           return -1;
-       }
+    Py_DECREF(newwd);
+    Py_XDECREF(todecref);
 
-       /* Check for keyboard interrupts */
-       if (VimErrorCheck())
-           return -1;
+    post_chdir(FALSE);
 
-       /* When column is out of range silently correct it. */
-       len = (long)STRLEN(ml_get_buf(this->win->w_buffer, lnum, FALSE));
-       if (col > len)
-           col = len;
+    if (VimTryEnd())
+    {
+       Py_DECREF(ret);
+       return NULL;
+    }
 
-       this->win->w_cursor.lnum = lnum;
-       this->win->w_cursor.col = col;
-#ifdef FEAT_VIRTUALEDIT
-       this->win->w_cursor.coladd = 0;
-#endif
-       update_screen(VALID);
+    return ret;
+}
 
-       return 0;
-    }
-    else if (strcmp(name, "height") == 0)
-    {
-       int     height;
-       win_T   *savewin;
+    static PyObject *
+VimChdir(PyObject *self UNUSED, PyObject *args, PyObject *kwargs)
+{
+    return _VimChdir(py_chdir, args, kwargs);
+}
 
-       if (!PyArg_Parse(val, "i", &height))
-           return -1;
+    static PyObject *
+VimFchdir(PyObject *self UNUSED, PyObject *args, PyObject *kwargs)
+{
+    return _VimChdir(py_fchdir, args, kwargs);
+}
 
-#ifdef FEAT_GUI
-       need_mouse_correct = TRUE;
-#endif
-       savewin = curwin;
-       curwin = this->win;
-       win_setheight(height);
-       curwin = savewin;
+typedef struct {
+    PyObject   *callable;
+    PyObject   *result;
+} map_rtp_data;
 
-       /* Check for keyboard interrupts */
-       if (VimErrorCheck())
-           return -1;
+    static void
+map_rtp_callback(char_u *path, void *_data)
+{
+    void       **data = (void **) _data;
+    PyObject   *pathObject;
+    map_rtp_data       *mr_data = *((map_rtp_data **) data);
 
-       return 0;
-    }
-#ifdef FEAT_VERTSPLIT
-    else if (strcmp(name, "width") == 0)
+    if (!(pathObject = PyString_FromString((char *)path)))
     {
-       int     width;
-       win_T   *savewin;
-
-       if (!PyArg_Parse(val, "i", &width))
-           return -1;
+       *data = NULL;
+       return;
+    }
 
-#ifdef FEAT_GUI
-       need_mouse_correct = TRUE;
-#endif
-       savewin = curwin;
-       curwin = this->win;
-       win_setwidth(width);
-       curwin = savewin;
+    mr_data->result = PyObject_CallFunctionObjArgs(mr_data->callable,
+                                                  pathObject, NULL);
 
-       /* Check for keyboard interrupts */
-       if (VimErrorCheck())
-           return -1;
+    Py_DECREF(pathObject);
 
-       return 0;
-    }
-#endif
+    if (!mr_data->result || mr_data->result != Py_None)
+       *data = NULL;
     else
     {
-       PyErr_SetString(PyExc_AttributeError, name);
-       return -1;
+       Py_DECREF(mr_data->result);
+       mr_data->result = NULL;
     }
 }
 
     static PyObject *
-WindowRepr(PyObject *self)
+VimForeachRTP(PyObject *self UNUSED, PyObject *callable)
 {
-    static char repr[100];
-    WindowObject *this = (WindowObject *)(self);
+    map_rtp_data       data;
 
-    if (this->win == INVALID_WINDOW_VALUE)
-    {
-       vim_snprintf(repr, 100, _("<window object (deleted) at %p>"), (self));
-       return PyString_FromString(repr);
-    }
-    else
-    {
-       int     i = 0;
-       win_T   *w;
+    data.callable = callable;
+    data.result = NULL;
 
-       for (w = firstwin; w != NULL && w != this->win; w = W_NEXT(w))
-           ++i;
+    do_in_runtimepath(NULL, FALSE, &map_rtp_callback, &data);
 
-       if (w == NULL)
-           vim_snprintf(repr, 100, _("<window object (unknown) at %p>"),
-                                                                     (self));
+    if (data.result == NULL)
+    {
+       if (PyErr_Occurred())
+           return NULL;
        else
-           vim_snprintf(repr, 100, _("<window %d>"), i);
-
-       return PyString_FromString(repr);
+       {
+           Py_INCREF(Py_None);
+           return Py_None;
+       }
     }
+    return data.result;
 }
 
 /*
- * Window list object - Implementation
+ * _vim_runtimepath_ special path implementation.
  */
-    static PyInt
-WinListLength(PyObject *self UNUSED)
+
+    static void
+map_finder_callback(char_u *path, void *_data)
 {
-    win_T      *w = firstwin;
-    PyInt      n = 0;
+    void       **data = (void **) _data;
+    PyObject   *list = *((PyObject **) data);
+    PyObject   *pathObject1, *pathObject2;
+    char       *pathbuf;
+    size_t     pathlen;
 
-    while (w != NULL)
+    pathlen = STRLEN(path);
+
+#if PY_MAJOR_VERSION < 3
+# define PY_MAIN_DIR_STRING "python2"
+#else
+# define PY_MAIN_DIR_STRING "python3"
+#endif
+#define PY_ALTERNATE_DIR_STRING "pythonx"
+
+#define PYTHONX_STRING_LENGTH 7 /* STRLEN("pythonx") */
+    if (!(pathbuf = PyMem_New(char,
+                   pathlen + STRLEN(PATHSEPSTR) + PYTHONX_STRING_LENGTH + 1)))
     {
-       ++n;
-       w = W_NEXT(w);
+       PyErr_NoMemory();
+       *data = NULL;
+       return;
     }
 
-    return n;
+    mch_memmove(pathbuf, path, pathlen + 1);
+    add_pathsep((char_u *) pathbuf);
+
+    pathlen = STRLEN(pathbuf);
+    mch_memmove(pathbuf + pathlen, PY_MAIN_DIR_STRING,
+           PYTHONX_STRING_LENGTH + 1);
+
+    if (!(pathObject1 = PyString_FromString(pathbuf)))
+    {
+       *data = NULL;
+       PyMem_Free(pathbuf);
+       return;
+    }
+
+    mch_memmove(pathbuf + pathlen, PY_ALTERNATE_DIR_STRING,
+           PYTHONX_STRING_LENGTH + 1);
+
+    if (!(pathObject2 = PyString_FromString(pathbuf)))
+    {
+       Py_DECREF(pathObject1);
+       PyMem_Free(pathbuf);
+       *data = NULL;
+       return;
+    }
+
+    PyMem_Free(pathbuf);
+
+    if (PyList_Append(list, pathObject1)
+           || PyList_Append(list, pathObject2))
+       *data = NULL;
+
+    Py_DECREF(pathObject1);
+    Py_DECREF(pathObject2);
 }
 
     static PyObject *
-WinListItem(PyObject *self UNUSED, PyInt n)
+Vim_GetPaths(PyObject *self UNUSED)
 {
-    win_T *w;
+    PyObject   *ret;
 
-    for (w = firstwin; w != NULL; w = W_NEXT(w), --n)
-       if (n == 0)
-           return WindowNew(w);
+    if (!(ret = PyList_New(0)))
+       return NULL;
 
-    PyErr_SetString(PyExc_IndexError, _("no such window"));
-    return NULL;
+    do_in_runtimepath(NULL, FALSE, &map_finder_callback, ret);
+
+    if (PyErr_Occurred())
+    {
+       Py_DECREF(ret);
+       return NULL;
+    }
+
+    return ret;
 }
 
-/* Convert a Python string into a Vim line.
- *
- * The result is in allocated memory. All internal nulls are replaced by
- * newline characters. It is an error for the string to contain newline
- * characters.
- *
- * On errors, the Python exception data is set, and NULL is returned.
- */
-    static char *
-StringToLine(PyObject *obj)
+    static PyObject *
+call_load_module(char *name, int len, PyObject *find_module_result)
 {
-    const char *str;
-    char *save;
-    PyInt len;
-    PyInt i;
-    char *p;
+    PyObject   *fd, *pathname, *description;
 
-    if (obj == NULL || !PyString_Check(obj))
+    if (!PyTuple_Check(find_module_result))
     {
-       PyErr_BadArgument();
+       PyErr_FORMAT(PyExc_TypeError,
+               N_("expected 3-tuple as imp.find_module() result, but got %s"),
+               Py_TYPE_NAME(find_module_result));
+       return NULL;
+    }
+    if (PyTuple_GET_SIZE(find_module_result) != 3)
+    {
+       PyErr_FORMAT(PyExc_TypeError,
+               N_("expected 3-tuple as imp.find_module() result, but got "
+                  "tuple of size %d"),
+               (int) PyTuple_GET_SIZE(find_module_result));
        return NULL;
     }
 
-    str = PyString_AsString(obj);
-    len = PyString_Size(obj);
-
-    /*
-     * Error checking: String must not contain newlines, as we
-     * are replacing a single line, and we must replace it with
-     * a single line.
-     * A trailing newline is removed, so that append(f.readlines()) works.
-     */
-    p = memchr(str, '\n', len);
-    if (p != NULL)
+    if (!(fd = PyTuple_GET_ITEM(find_module_result, 0))
+           || !(pathname = PyTuple_GET_ITEM(find_module_result, 1))
+           || !(description = PyTuple_GET_ITEM(find_module_result, 2)))
     {
-       if (p == str + len - 1)
-           --len;
-       else
-       {
-           PyErr_SetVim(_("string cannot contain newlines"));
-           return NULL;
-       }
+       PyErr_SET_STRING(PyExc_RuntimeError,
+               N_("internal error: imp.find_module returned tuple with NULL"));
+       return NULL;
     }
 
-    /* Create a copy of the string, with internal nulls replaced by
-     * newline characters, as is the vim convention.
-     */
-    save = (char *)alloc((unsigned)(len+1));
-    if (save == NULL)
+    return PyObject_CallFunction(py_load_module,
+           "s#OOO", name, len, fd, pathname, description);
+}
+
+    static PyObject *
+find_module(char *fullname, char *tail, PyObject *new_path)
+{
+    PyObject   *find_module_result;
+    PyObject   *module;
+    char       *dot;
+
+    if ((dot = (char *)vim_strchr((char_u *) tail, '.')))
     {
-       PyErr_NoMemory();
+       /*
+        * There is a dot in the name: call find_module recursively without the
+        * first component
+        */
+       PyObject        *newest_path;
+       int             partlen = (int) (dot - 1 - tail);
+
+       if (!(find_module_result = PyObject_CallFunction(py_find_module,
+                       "s#O", tail, partlen, new_path)))
+           return NULL;
+
+       if (!(module = call_load_module(
+                       fullname,
+                       ((int) (tail - fullname)) + partlen,
+                       find_module_result)))
+       {
+           Py_DECREF(find_module_result);
+           return NULL;
+       }
+
+       Py_DECREF(find_module_result);
+
+       if (!(newest_path = PyObject_GetAttrString(module, "__path__")))
+       {
+           Py_DECREF(module);
+           return NULL;
+       }
+
+       Py_DECREF(module);
+
+       module = find_module(fullname, dot + 1, newest_path);
+
+       Py_DECREF(newest_path);
+
+       return module;
+    }
+    else
+    {
+       if (!(find_module_result = PyObject_CallFunction(py_find_module,
+                       "sO", tail, new_path)))
+           return NULL;
+
+       if (!(module = call_load_module(
+                       fullname,
+                       (int)STRLEN(fullname),
+                       find_module_result)))
+       {
+           Py_DECREF(find_module_result);
+           return NULL;
+       }
+
+       Py_DECREF(find_module_result);
+
+       return module;
+    }
+}
+
+    static PyObject *
+FinderFindModule(PyObject *self, PyObject *args)
+{
+    char       *fullname;
+    PyObject   *module;
+    PyObject   *new_path;
+    LoaderObject       *loader;
+
+    if (!PyArg_ParseTuple(args, "s", &fullname))
+       return NULL;
+
+    if (!(new_path = Vim_GetPaths(self)))
        return NULL;
+
+    module = find_module(fullname, fullname, new_path);
+
+    Py_DECREF(new_path);
+
+    if (!module)
+    {
+       if (PyErr_Occurred())
+       {
+           if (PyErr_ExceptionMatches(PyExc_ImportError))
+               PyErr_Clear();
+           else
+               return NULL;
+       }
+
+       Py_INCREF(Py_None);
+       return Py_None;
     }
 
-    for (i = 0; i < len; ++i)
+    if (!(loader = PyObject_NEW(LoaderObject, &LoaderType)))
     {
-       if (str[i] == '\0')
-           save[i] = '\n';
-       else
-           save[i] = str[i];
+       Py_DECREF(module);
+       return NULL;
     }
 
-    save[i] = '\0';
+    loader->module = module;
 
-    return save;
+    return (PyObject *) loader;
 }
 
-/* Get a line from the specified buffer. The line number is
- * in Vim format (1-based). The line is returned as a Python
- * string object.
- */
     static PyObject *
-GetBufferLine(buf_T *buf, PyInt n)
+VimPathHook(PyObject *self UNUSED, PyObject *args)
 {
-    return LineToString((char *)ml_get_buf(buf, (linenr_T)n, FALSE));
+    char       *path;
+
+    if (PyArg_ParseTuple(args, "s", &path)
+           && STRCMP(path, vim_special_path) == 0)
+    {
+       Py_INCREF(vim_module);
+       return vim_module;
+    }
+
+    PyErr_Clear();
+    PyErr_SetNone(PyExc_ImportError);
+    return NULL;
 }
 
+/*
+ * Vim module - Definitions
+ */
 
-/* Get a list of lines from the specified buffer. The line numbers
- * are in Vim format (1-based). The range is from lo up to, but not
- * including, hi. The list is returned as a Python list of string objects.
+static struct PyMethodDef VimMethods[] = {
+    /* name,       function,                   calling,                        documentation */
+    {"command",            VimCommand,                 METH_O,                         "Execute a Vim ex-mode command" },
+    {"eval",       VimEval,                    METH_VARARGS,                   "Evaluate an expression using Vim evaluator" },
+    {"bindeval",    VimEvalPy,                 METH_O,                         "Like eval(), but returns objects attached to vim ones"},
+    {"strwidth",    VimStrwidth,               METH_O,                         "Screen string width, counts <Tab> as having width 1"},
+    {"chdir",      (PyCFunction)VimChdir,      METH_VARARGS|METH_KEYWORDS,     "Change directory"},
+    {"fchdir",     (PyCFunction)VimFchdir,     METH_VARARGS|METH_KEYWORDS,     "Change directory"},
+    {"foreach_rtp", VimForeachRTP,             METH_O,                         "Call given callable for each path in &rtp"},
+    {"find_module", FinderFindModule,          METH_VARARGS,                   "Internal use only, returns loader object for any input it receives"},
+    {"path_hook",   VimPathHook,               METH_VARARGS,                   "Hook function to install in sys.path_hooks"},
+    {"_get_paths",  (PyCFunction)Vim_GetPaths, METH_NOARGS,                    "Get &rtp-based additions to sys.path"},
+    { NULL,        NULL,                       0,                              NULL}
+};
+
+/*
+ * Generic iterator object
  */
+
+static PyTypeObject IterType;
+
+typedef PyObject *(*nextfun)(void **);
+typedef void (*destructorfun)(void *);
+typedef int (*traversefun)(void *, visitproc, void *);
+typedef int (*clearfun)(void **);
+
+/* Main purpose of this object is removing the need for do python
+ * initialization (i.e. PyType_Ready and setting type attributes) for a big
+ * bunch of objects. */
+
+typedef struct
+{
+    PyObject_HEAD
+    void *cur;
+    nextfun next;
+    destructorfun destruct;
+    traversefun traverse;
+    clearfun clear;
+} IterObject;
+
     static PyObject *
-GetBufferLineList(buf_T *buf, PyInt lo, PyInt hi)
+IterNew(void *start, destructorfun destruct, nextfun next, traversefun traverse,
+       clearfun clear)
 {
-    PyInt i;
-    PyInt n = hi - lo;
-    PyObject *list = PyList_New(n);
+    IterObject *self;
 
-    if (list == NULL)
+    self = PyObject_GC_New(IterObject, &IterType);
+    self->cur = start;
+    self->next = next;
+    self->destruct = destruct;
+    self->traverse = traverse;
+    self->clear = clear;
+
+    return (PyObject *)(self);
+}
+
+    static void
+IterDestructor(IterObject *self)
+{
+    PyObject_GC_UnTrack((void *)(self));
+    self->destruct(self->cur);
+    PyObject_GC_Del((void *)(self));
+}
+
+    static int
+IterTraverse(IterObject *self, visitproc visit, void *arg)
+{
+    if (self->traverse != NULL)
+       return self->traverse(self->cur, visit, arg);
+    else
+       return 0;
+}
+
+/* Mac OSX defines clear() somewhere. */
+#ifdef clear
+# undef clear
+#endif
+
+    static int
+IterClear(IterObject *self)
+{
+    if (self->clear != NULL)
+       return self->clear(&self->cur);
+    else
+       return 0;
+}
+
+    static PyObject *
+IterNext(IterObject *self)
+{
+    return self->next(&self->cur);
+}
+
+    static PyObject *
+IterIter(PyObject *self)
+{
+    Py_INCREF(self);
+    return self;
+}
+
+typedef struct pylinkedlist_S {
+    struct pylinkedlist_S      *pll_next;
+    struct pylinkedlist_S      *pll_prev;
+    PyObject                   *pll_obj;
+} pylinkedlist_T;
+
+static pylinkedlist_T *lastdict = NULL;
+static pylinkedlist_T *lastlist = NULL;
+
+    static void
+pyll_remove(pylinkedlist_T *ref, pylinkedlist_T **last)
+{
+    if (ref->pll_prev == NULL)
+    {
+       if (ref->pll_next == NULL)
+       {
+           *last = NULL;
+           return;
+       }
+    }
+    else
+       ref->pll_prev->pll_next = ref->pll_next;
+
+    if (ref->pll_next == NULL)
+       *last = ref->pll_prev;
+    else
+       ref->pll_next->pll_prev = ref->pll_prev;
+}
+
+    static void
+pyll_add(PyObject *self, pylinkedlist_T *ref, pylinkedlist_T **last)
+{
+    if (*last == NULL)
+       ref->pll_prev = NULL;
+    else
+    {
+       (*last)->pll_next = ref;
+       ref->pll_prev = *last;
+    }
+    ref->pll_next = NULL;
+    ref->pll_obj = self;
+    *last = ref;
+}
+
+static PyTypeObject DictionaryType;
+
+typedef struct
+{
+    PyObject_HEAD
+    dict_T     *dict;
+    pylinkedlist_T     ref;
+} DictionaryObject;
+
+static PyObject *DictionaryUpdate(DictionaryObject *, PyObject *, PyObject *);
+
+#define NEW_DICTIONARY(dict) DictionaryNew(&DictionaryType, dict)
+
+    static PyObject *
+DictionaryNew(PyTypeObject *subtype, dict_T *dict)
+{
+    DictionaryObject   *self;
+
+    self = (DictionaryObject *) subtype->tp_alloc(subtype, 0);
+    if (self == NULL)
        return NULL;
+    self->dict = dict;
+    ++dict->dv_refcount;
 
-    for (i = 0; i < n; ++i)
+    pyll_add((PyObject *)(self), &self->ref, &lastdict);
+
+    return (PyObject *)(self);
+}
+
+    static dict_T *
+py_dict_alloc(void)
+{
+    dict_T     *ret;
+
+    if (!(ret = dict_alloc()))
     {
-       PyObject *str = LineToString((char *)ml_get_buf(buf, (linenr_T)(lo+i), FALSE));
+       PyErr_NoMemory();
+       return NULL;
+    }
+    ++ret->dv_refcount;
 
-       /* Error check - was the Python string creation OK? */
-       if (str == NULL)
+    return ret;
+}
+
+    static PyObject *
+DictionaryConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
+{
+    DictionaryObject   *self;
+    dict_T     *dict;
+
+    if (!(dict = py_dict_alloc()))
+       return NULL;
+
+    self = (DictionaryObject *) DictionaryNew(subtype, dict);
+
+    --dict->dv_refcount;
+
+    if (kwargs || PyTuple_Size(args))
+    {
+       PyObject        *tmp;
+       if (!(tmp = DictionaryUpdate(self, args, kwargs)))
        {
-           Py_DECREF(list);
+           Py_DECREF(self);
+           return NULL;
+       }
+
+       Py_DECREF(tmp);
+    }
+
+    return (PyObject *)(self);
+}
+
+    static void
+DictionaryDestructor(DictionaryObject *self)
+{
+    pyll_remove(&self->ref, &lastdict);
+    dict_unref(self->dict);
+
+    DESTRUCTOR_FINISH(self);
+}
+
+static char *DictionaryAttrs[] = {
+    "locked", "scope",
+    NULL
+};
+
+    static PyObject *
+DictionaryDir(PyObject *self)
+{
+    return ObjectDir(self, DictionaryAttrs);
+}
+
+    static int
+DictionarySetattr(DictionaryObject *self, char *name, PyObject *valObject)
+{
+    if (valObject == NULL)
+    {
+       PyErr_SET_STRING(PyExc_AttributeError,
+               N_("cannot delete vim.Dictionary attributes"));
+       return -1;
+    }
+
+    if (strcmp(name, "locked") == 0)
+    {
+       if (self->dict->dv_lock == VAR_FIXED)
+       {
+           PyErr_SET_STRING(PyExc_TypeError,
+                   N_("cannot modify fixed dictionary"));
+           return -1;
+       }
+       else
+       {
+           int         istrue = PyObject_IsTrue(valObject);
+           if (istrue == -1)
+               return -1;
+           else if (istrue)
+               self->dict->dv_lock = VAR_LOCKED;
+           else
+               self->dict->dv_lock = 0;
+       }
+       return 0;
+    }
+    else
+    {
+       PyErr_FORMAT(PyExc_AttributeError, N_("cannot set attribute %s"), name);
+       return -1;
+    }
+}
+
+    static PyInt
+DictionaryLength(DictionaryObject *self)
+{
+    return ((PyInt) (self->dict->dv_hashtab.ht_used));
+}
+
+#define DICT_FLAG_HAS_DEFAULT  0x01
+#define DICT_FLAG_POP          0x02
+#define DICT_FLAG_NONE_DEFAULT 0x04
+#define DICT_FLAG_RETURN_BOOL  0x08 /* Incompatible with DICT_FLAG_POP */
+#define DICT_FLAG_RETURN_PAIR  0x10
+
+    static PyObject *
+_DictionaryItem(DictionaryObject *self, PyObject *args, int flags)
+{
+    PyObject   *keyObject;
+    PyObject   *defObject = ((flags & DICT_FLAG_NONE_DEFAULT)? Py_None : NULL);
+    PyObject   *ret;
+    char_u     *key;
+    dictitem_T *di;
+    dict_T     *dict = self->dict;
+    hashitem_T *hi;
+    PyObject   *todecref;
+
+    if (flags & DICT_FLAG_HAS_DEFAULT)
+    {
+       if (!PyArg_ParseTuple(args, "O|O", &keyObject, &defObject))
+           return NULL;
+    }
+    else
+       keyObject = args;
+
+    if (flags & DICT_FLAG_RETURN_BOOL)
+       defObject = Py_False;
+
+    if (!(key = StringToChars(keyObject, &todecref)))
+       return NULL;
+
+    if (*key == NUL)
+    {
+       RAISE_NO_EMPTY_KEYS;
+       Py_XDECREF(todecref);
+       return NULL;
+    }
+
+    hi = hash_find(&dict->dv_hashtab, key);
+
+    Py_XDECREF(todecref);
+
+    if (HASHITEM_EMPTY(hi))
+    {
+       if (defObject)
+       {
+           Py_INCREF(defObject);
+           return defObject;
+       }
+       else
+       {
+           PyErr_SetObject(PyExc_KeyError, keyObject);
+           return NULL;
+       }
+    }
+    else if (flags & DICT_FLAG_RETURN_BOOL)
+    {
+       Py_INCREF(Py_True);
+       return Py_True;
+    }
+
+    di = dict_lookup(hi);
+
+    if (!(ret = ConvertToPyObject(&di->di_tv)))
+       return NULL;
+
+    if (flags & DICT_FLAG_POP)
+    {
+       if (dict->dv_lock)
+       {
+           RAISE_LOCKED_DICTIONARY;
+           Py_DECREF(ret);
            return NULL;
        }
 
-       /* Set the list item */
-       if (PyList_SetItem(list, i, str))
+       hash_remove(&dict->dv_hashtab, hi);
+       dictitem_free(di);
+    }
+
+    return ret;
+}
+
+    static PyObject *
+DictionaryItem(DictionaryObject *self, PyObject *keyObject)
+{
+    return _DictionaryItem(self, keyObject, 0);
+}
+
+    static int
+DictionaryContains(DictionaryObject *self, PyObject *keyObject)
+{
+    PyObject   *rObj = _DictionaryItem(self, keyObject, DICT_FLAG_RETURN_BOOL);
+    int                ret;
+
+    ret = (rObj == Py_True);
+
+    Py_DECREF(rObj);
+
+    return ret;
+}
+
+typedef struct
+{
+    hashitem_T *ht_array;
+    long_u     ht_used;
+    hashtab_T  *ht;
+    hashitem_T *hi;
+    long_u     todo;
+} dictiterinfo_T;
+
+    static PyObject *
+DictionaryIterNext(dictiterinfo_T **dii)
+{
+    PyObject   *ret;
+
+    if (!(*dii)->todo)
+       return NULL;
+
+    if ((*dii)->ht->ht_array != (*dii)->ht_array ||
+           (*dii)->ht->ht_used != (*dii)->ht_used)
+    {
+       PyErr_SET_STRING(PyExc_RuntimeError,
+               N_("hashtab changed during iteration"));
+       return NULL;
+    }
+
+    while (((*dii)->todo) && HASHITEM_EMPTY((*dii)->hi))
+       ++((*dii)->hi);
+
+    --((*dii)->todo);
+
+    if (!(ret = PyBytes_FromString((char *)(*dii)->hi->hi_key)))
+       return NULL;
+
+    return ret;
+}
+
+    static PyObject *
+DictionaryIter(DictionaryObject *self)
+{
+    dictiterinfo_T     *dii;
+    hashtab_T          *ht;
+
+    if (!(dii = PyMem_New(dictiterinfo_T, 1)))
+    {
+       PyErr_NoMemory();
+       return NULL;
+    }
+
+    ht = &self->dict->dv_hashtab;
+    dii->ht_array = ht->ht_array;
+    dii->ht_used = ht->ht_used;
+    dii->ht = ht;
+    dii->hi = dii->ht_array;
+    dii->todo = dii->ht_used;
+
+    return IterNew(dii,
+           (destructorfun) PyMem_Free, (nextfun) DictionaryIterNext,
+           NULL, NULL);
+}
+
+    static PyInt
+DictionaryAssItem(
+       DictionaryObject *self, PyObject *keyObject, PyObject *valObject)
+{
+    char_u     *key;
+    typval_T   tv;
+    dict_T     *dict = self->dict;
+    dictitem_T *di;
+    PyObject   *todecref;
+
+    if (dict->dv_lock)
+    {
+       RAISE_LOCKED_DICTIONARY;
+       return -1;
+    }
+
+    if (!(key = StringToChars(keyObject, &todecref)))
+       return -1;
+
+    if (*key == NUL)
+    {
+       RAISE_NO_EMPTY_KEYS;
+       Py_XDECREF(todecref);
+       return -1;
+    }
+
+    di = dict_find(dict, key, -1);
+
+    if (valObject == NULL)
+    {
+       hashitem_T      *hi;
+
+       if (di == NULL)
+       {
+           Py_XDECREF(todecref);
+           PyErr_SetObject(PyExc_KeyError, keyObject);
+           return -1;
+       }
+       hi = hash_find(&dict->dv_hashtab, di->di_key);
+       hash_remove(&dict->dv_hashtab, hi);
+       dictitem_free(di);
+       Py_XDECREF(todecref);
+       return 0;
+    }
+
+    if (ConvertFromPyObject(valObject, &tv) == -1)
+    {
+       Py_XDECREF(todecref);
+       return -1;
+    }
+
+    if (di == NULL)
+    {
+       if (!(di = dictitem_alloc(key)))
+       {
+           Py_XDECREF(todecref);
+           PyErr_NoMemory();
+           return -1;
+       }
+       di->di_tv.v_lock = 0;
+       di->di_tv.v_type = VAR_UNKNOWN;
+
+       if (dict_add(dict, di) == FAIL)
+       {
+           vim_free(di);
+           dictitem_free(di);
+           RAISE_KEY_ADD_FAIL(key);
+           Py_XDECREF(todecref);
+           return -1;
+       }
+    }
+    else
+       clear_tv(&di->di_tv);
+
+    Py_XDECREF(todecref);
+
+    copy_tv(&tv, &di->di_tv);
+    clear_tv(&tv);
+    return 0;
+}
+
+typedef PyObject *(*hi_to_py)(hashitem_T *);
+
+    static PyObject *
+DictionaryListObjects(DictionaryObject *self, hi_to_py hiconvert)
+{
+    dict_T     *dict = self->dict;
+    long_u     todo = dict->dv_hashtab.ht_used;
+    Py_ssize_t i = 0;
+    PyObject   *ret;
+    hashitem_T *hi;
+    PyObject   *newObj;
+
+    ret = PyList_New(todo);
+    for (hi = dict->dv_hashtab.ht_array; todo > 0; ++hi)
+    {
+       if (!HASHITEM_EMPTY(hi))
+       {
+           if (!(newObj = hiconvert(hi)))
+           {
+               Py_DECREF(ret);
+               return NULL;
+           }
+           PyList_SET_ITEM(ret, i, newObj);
+           --todo;
+           ++i;
+       }
+    }
+    return ret;
+}
+
+    static PyObject *
+dict_key(hashitem_T *hi)
+{
+    return PyBytes_FromString((char *)(hi->hi_key));
+}
+
+    static PyObject *
+DictionaryListKeys(DictionaryObject *self)
+{
+    return DictionaryListObjects(self, dict_key);
+}
+
+    static PyObject *
+dict_val(hashitem_T *hi)
+{
+    dictitem_T *di;
+
+    di = dict_lookup(hi);
+    return ConvertToPyObject(&di->di_tv);
+}
+
+    static PyObject *
+DictionaryListValues(DictionaryObject *self)
+{
+    return DictionaryListObjects(self, dict_val);
+}
+
+    static PyObject *
+dict_item(hashitem_T *hi)
+{
+    PyObject   *keyObject;
+    PyObject   *valObject;
+    PyObject   *ret;
+
+    if (!(keyObject = dict_key(hi)))
+       return NULL;
+
+    if (!(valObject = dict_val(hi)))
+    {
+       Py_DECREF(keyObject);
+       return NULL;
+    }
+
+    ret = Py_BuildValue("(OO)", keyObject, valObject);
+
+    Py_DECREF(keyObject);
+    Py_DECREF(valObject);
+
+    return ret;
+}
+
+    static PyObject *
+DictionaryListItems(DictionaryObject *self)
+{
+    return DictionaryListObjects(self, dict_item);
+}
+
+    static PyObject *
+DictionaryUpdate(DictionaryObject *self, PyObject *args, PyObject *kwargs)
+{
+    dict_T     *dict = self->dict;
+
+    if (dict->dv_lock)
+    {
+       RAISE_LOCKED_DICTIONARY;
+       return NULL;
+    }
+
+    if (kwargs)
+    {
+       typval_T        tv;
+
+       if (ConvertFromPyMapping(kwargs, &tv) == -1)
+           return NULL;
+
+       VimTryStart();
+       dict_extend(self->dict, tv.vval.v_dict, (char_u *) "force");
+       clear_tv(&tv);
+       if (VimTryEnd())
+           return NULL;
+    }
+    else
+    {
+       PyObject        *obj;
+
+       if (!PyArg_ParseTuple(args, "O", &obj))
+           return NULL;
+
+       if (PyObject_HasAttrString(obj, "keys"))
+           return DictionaryUpdate(self, NULL, obj);
+       else
+       {
+           PyObject    *iterator;
+           PyObject    *item;
+
+           if (!(iterator = PyObject_GetIter(obj)))
+               return NULL;
+
+           while ((item = PyIter_Next(iterator)))
+           {
+               PyObject        *fast;
+               PyObject        *keyObject;
+               PyObject        *valObject;
+               PyObject        *todecref;
+               char_u          *key;
+               dictitem_T      *di;
+
+               if (!(fast = PySequence_Fast(item, "")))
+               {
+                   Py_DECREF(iterator);
+                   Py_DECREF(item);
+                   return NULL;
+               }
+
+               Py_DECREF(item);
+
+               if (PySequence_Fast_GET_SIZE(fast) != 2)
+               {
+                   Py_DECREF(iterator);
+                   Py_DECREF(fast);
+                   PyErr_FORMAT(PyExc_ValueError,
+                           N_("expected sequence element of size 2, "
+                           "but got sequence of size %d"),
+                           (int) PySequence_Fast_GET_SIZE(fast));
+                   return NULL;
+               }
+
+               keyObject = PySequence_Fast_GET_ITEM(fast, 0);
+
+               if (!(key = StringToChars(keyObject, &todecref)))
+               {
+                   Py_DECREF(iterator);
+                   Py_DECREF(fast);
+                   return NULL;
+               }
+
+               di = dictitem_alloc(key);
+
+               Py_XDECREF(todecref);
+
+               if (di == NULL)
+               {
+                   Py_DECREF(fast);
+                   Py_DECREF(iterator);
+                   PyErr_NoMemory();
+                   return NULL;
+               }
+               di->di_tv.v_lock = 0;
+               di->di_tv.v_type = VAR_UNKNOWN;
+
+               valObject = PySequence_Fast_GET_ITEM(fast, 1);
+
+               if (ConvertFromPyObject(valObject, &di->di_tv) == -1)
+               {
+                   Py_DECREF(iterator);
+                   Py_DECREF(fast);
+                   dictitem_free(di);
+                   return NULL;
+               }
+
+               Py_DECREF(fast);
+
+               if (dict_add(dict, di) == FAIL)
+               {
+                   RAISE_KEY_ADD_FAIL(di->di_key);
+                   Py_DECREF(iterator);
+                   dictitem_free(di);
+                   return NULL;
+               }
+           }
+
+           Py_DECREF(iterator);
+
+           /* Iterator may have finished due to an exception */
+           if (PyErr_Occurred())
+               return NULL;
+       }
+    }
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+    static PyObject *
+DictionaryGet(DictionaryObject *self, PyObject *args)
+{
+    return _DictionaryItem(self, args,
+                           DICT_FLAG_HAS_DEFAULT|DICT_FLAG_NONE_DEFAULT);
+}
+
+    static PyObject *
+DictionaryPop(DictionaryObject *self, PyObject *args)
+{
+    return _DictionaryItem(self, args, DICT_FLAG_HAS_DEFAULT|DICT_FLAG_POP);
+}
+
+    static PyObject *
+DictionaryPopItem(DictionaryObject *self)
+{
+    hashitem_T *hi;
+    PyObject   *ret;
+    PyObject   *valObject;
+    dictitem_T *di;
+
+    if (self->dict->dv_hashtab.ht_used == 0)
+    {
+       PyErr_SetNone(PyExc_KeyError);
+       return NULL;
+    }
+
+    hi = self->dict->dv_hashtab.ht_array;
+    while (HASHITEM_EMPTY(hi))
+       ++hi;
+
+    di = dict_lookup(hi);
+
+    if (!(valObject = ConvertToPyObject(&di->di_tv)))
+       return NULL;
+
+    if (!(ret = Py_BuildValue("(" Py_bytes_fmt "O)", hi->hi_key, valObject)))
+    {
+       Py_DECREF(valObject);
+       return NULL;
+    }
+
+    hash_remove(&self->dict->dv_hashtab, hi);
+    dictitem_free(di);
+
+    return ret;
+}
+
+    static PyObject *
+DictionaryHasKey(DictionaryObject *self, PyObject *keyObject)
+{
+    return _DictionaryItem(self, keyObject, DICT_FLAG_RETURN_BOOL);
+}
+
+static PySequenceMethods DictionaryAsSeq = {
+    0,                                 /* sq_length */
+    0,                                 /* sq_concat */
+    0,                                 /* sq_repeat */
+    0,                                 /* sq_item */
+    0,                                 /* sq_slice */
+    0,                                 /* sq_ass_item */
+    0,                                 /* sq_ass_slice */
+    (objobjproc) DictionaryContains,   /* sq_contains */
+    0,                                 /* sq_inplace_concat */
+    0,                                 /* sq_inplace_repeat */
+};
+
+static PyMappingMethods DictionaryAsMapping = {
+    (lenfunc)       DictionaryLength,
+    (binaryfunc)    DictionaryItem,
+    (objobjargproc) DictionaryAssItem,
+};
+
+static struct PyMethodDef DictionaryMethods[] = {
+    {"keys",   (PyCFunction)DictionaryListKeys,        METH_NOARGS,    ""},
+    {"values", (PyCFunction)DictionaryListValues,      METH_NOARGS,    ""},
+    {"items",  (PyCFunction)DictionaryListItems,       METH_NOARGS,    ""},
+    {"update", (PyCFunction)DictionaryUpdate,          METH_VARARGS|METH_KEYWORDS, ""},
+    {"get",    (PyCFunction)DictionaryGet,             METH_VARARGS,   ""},
+    {"pop",    (PyCFunction)DictionaryPop,             METH_VARARGS,   ""},
+    {"popitem",        (PyCFunction)DictionaryPopItem,         METH_NOARGS,    ""},
+    {"has_key",        (PyCFunction)DictionaryHasKey,          METH_O,         ""},
+    {"__dir__",        (PyCFunction)DictionaryDir,             METH_NOARGS,    ""},
+    { NULL,    NULL,                                   0,              NULL}
+};
+
+static PyTypeObject ListType;
+static PySequenceMethods ListAsSeq;
+static PyMappingMethods ListAsMapping;
+
+typedef struct
+{
+    PyObject_HEAD
+    list_T     *list;
+    pylinkedlist_T     ref;
+} ListObject;
+
+#define NEW_LIST(list) ListNew(&ListType, list)
+
+    static PyObject *
+ListNew(PyTypeObject *subtype, list_T *list)
+{
+    ListObject *self;
+
+    self = (ListObject *) subtype->tp_alloc(subtype, 0);
+    if (self == NULL)
+       return NULL;
+    self->list = list;
+    ++list->lv_refcount;
+
+    pyll_add((PyObject *)(self), &self->ref, &lastlist);
+
+    return (PyObject *)(self);
+}
+
+    static list_T *
+py_list_alloc(void)
+{
+    list_T     *ret;
+
+    if (!(ret = list_alloc()))
+    {
+       PyErr_NoMemory();
+       return NULL;
+    }
+    ++ret->lv_refcount;
+
+    return ret;
+}
+
+    static int
+list_py_concat(list_T *l, PyObject *obj, PyObject *lookup_dict)
+{
+    PyObject   *iterator;
+    PyObject   *item;
+    listitem_T *li;
+
+    if (!(iterator = PyObject_GetIter(obj)))
+       return -1;
+
+    while ((item = PyIter_Next(iterator)))
+    {
+       if (!(li = listitem_alloc()))
+       {
+           PyErr_NoMemory();
+           Py_DECREF(item);
+           Py_DECREF(iterator);
+           return -1;
+       }
+       li->li_tv.v_lock = 0;
+       li->li_tv.v_type = VAR_UNKNOWN;
+
+       if (_ConvertFromPyObject(item, &li->li_tv, lookup_dict) == -1)
+       {
+           Py_DECREF(item);
+           Py_DECREF(iterator);
+           listitem_free(li);
+           return -1;
+       }
+
+       Py_DECREF(item);
+
+       list_append(l, li);
+    }
+
+    Py_DECREF(iterator);
+
+    /* Iterator may have finished due to an exception */
+    if (PyErr_Occurred())
+       return -1;
+
+    return 0;
+}
+
+    static PyObject *
+ListConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
+{
+    list_T     *list;
+    PyObject   *obj = NULL;
+
+    if (kwargs)
+    {
+       PyErr_SET_STRING(PyExc_TypeError,
+               N_("list constructor does not accept keyword arguments"));
+       return NULL;
+    }
+
+    if (!PyArg_ParseTuple(args, "|O", &obj))
+       return NULL;
+
+    if (!(list = py_list_alloc()))
+       return NULL;
+
+    if (obj)
+    {
+       PyObject        *lookup_dict;
+
+       if (!(lookup_dict = PyDict_New()))
+       {
+           list_unref(list);
+           return NULL;
+       }
+
+       if (list_py_concat(list, obj, lookup_dict) == -1)
+       {
+           Py_DECREF(lookup_dict);
+           list_unref(list);
+           return NULL;
+       }
+
+       Py_DECREF(lookup_dict);
+    }
+
+    return ListNew(subtype, list);
+}
+
+    static void
+ListDestructor(ListObject *self)
+{
+    pyll_remove(&self->ref, &lastlist);
+    list_unref(self->list);
+
+    DESTRUCTOR_FINISH(self);
+}
+
+    static PyInt
+ListLength(ListObject *self)
+{
+    return ((PyInt) (self->list->lv_len));
+}
+
+    static PyObject *
+ListItem(ListObject *self, Py_ssize_t index)
+{
+    listitem_T *li;
+
+    if (index >= ListLength(self))
+    {
+       PyErr_SET_STRING(PyExc_IndexError, N_("list index out of range"));
+       return NULL;
+    }
+    li = list_find(self->list, (long) index);
+    if (li == NULL)
+    {
+       /* No more suitable format specifications in python-2.3 */
+       PyErr_VIM_FORMAT(N_("internal error: failed to get vim list item %d"),
+               (int) index);
+       return NULL;
+    }
+    return ConvertToPyObject(&li->li_tv);
+}
+
+#define PROC_RANGE \
+    if (last < 0) {\
+       if (last < -size) \
+           last = 0; \
+       else \
+           last += size; \
+    } \
+    if (first < 0) \
+       first = 0; \
+    if (first > size) \
+       first = size; \
+    if (last > size) \
+       last = size;
+
+    static PyObject *
+ListSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last)
+{
+    PyInt      i;
+    PyInt      size = ListLength(self);
+    PyInt      n;
+    PyObject   *list;
+    int                reversed = 0;
+
+    PROC_RANGE
+    if (first >= last)
+       first = last;
+
+    n = last-first;
+    list = PyList_New(n);
+    if (list == NULL)
+       return NULL;
+
+    for (i = 0; i < n; ++i)
+    {
+       PyObject        *item = ListItem(self, first + i);
+       if (item == NULL)
+       {
+           Py_DECREF(list);
+           return NULL;
+       }
+
+       PyList_SET_ITEM(list, ((reversed)?(n-i-1):(i)), item);
+    }
+
+    return list;
+}
+
+typedef struct
+{
+    listwatch_T        lw;
+    list_T     *list;
+} listiterinfo_T;
+
+    static void
+ListIterDestruct(listiterinfo_T *lii)
+{
+    list_rem_watch(lii->list, &lii->lw);
+    PyMem_Free(lii);
+}
+
+    static PyObject *
+ListIterNext(listiterinfo_T **lii)
+{
+    PyObject   *ret;
+
+    if (!((*lii)->lw.lw_item))
+       return NULL;
+
+    if (!(ret = ConvertToPyObject(&((*lii)->lw.lw_item->li_tv))))
+       return NULL;
+
+    (*lii)->lw.lw_item = (*lii)->lw.lw_item->li_next;
+
+    return ret;
+}
+
+    static PyObject *
+ListIter(ListObject *self)
+{
+    listiterinfo_T     *lii;
+    list_T     *l = self->list;
+
+    if (!(lii = PyMem_New(listiterinfo_T, 1)))
+    {
+       PyErr_NoMemory();
+       return NULL;
+    }
+
+    list_add_watch(l, &lii->lw);
+    lii->lw.lw_item = l->lv_first;
+    lii->list = l;
+
+    return IterNew(lii,
+           (destructorfun) ListIterDestruct, (nextfun) ListIterNext,
+           NULL, NULL);
+}
+
+    static int
+ListAssItem(ListObject *self, Py_ssize_t index, PyObject *obj)
+{
+    typval_T   tv;
+    list_T     *l = self->list;
+    listitem_T *li;
+    Py_ssize_t length = ListLength(self);
+
+    if (l->lv_lock)
+    {
+       RAISE_LOCKED_LIST;
+       return -1;
+    }
+    if (index > length || (index == length && obj == NULL))
+    {
+       PyErr_SET_STRING(PyExc_IndexError, N_("list index out of range"));
+       return -1;
+    }
+
+    if (obj == NULL)
+    {
+       li = list_find(l, (long) index);
+       list_remove(l, li, li);
+       clear_tv(&li->li_tv);
+       vim_free(li);
+       return 0;
+    }
+
+    if (ConvertFromPyObject(obj, &tv) == -1)
+       return -1;
+
+    if (index == length)
+    {
+       if (list_append_tv(l, &tv) == FAIL)
+       {
+           clear_tv(&tv);
+           PyErr_SET_VIM(N_("failed to add item to list"));
+           return -1;
+       }
+    }
+    else
+    {
+       li = list_find(l, (long) index);
+       clear_tv(&li->li_tv);
+       copy_tv(&tv, &li->li_tv);
+       clear_tv(&tv);
+    }
+    return 0;
+}
+
+    static int
+ListAssSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *obj)
+{
+    PyInt      size = ListLength(self);
+    PyObject   *iterator;
+    PyObject   *item;
+    listitem_T *li;
+    listitem_T *next;
+    typval_T   v;
+    list_T     *l = self->list;
+    PyInt      i;
+
+    if (l->lv_lock)
+    {
+       RAISE_LOCKED_LIST;
+       return -1;
+    }
+
+    PROC_RANGE
+
+    if (first == size)
+       li = NULL;
+    else
+    {
+       li = list_find(l, (long) first);
+       if (li == NULL)
+       {
+           PyErr_VIM_FORMAT(N_("internal error: no vim list item %d"),
+                   (int)first);
+           return -1;
+       }
+       if (last > first)
+       {
+           i = last - first;
+           while (i-- && li != NULL)
+           {
+               next = li->li_next;
+               listitem_remove(l, li);
+               li = next;
+           }
+       }
+    }
+
+    if (obj == NULL)
+       return 0;
+
+    if (!(iterator = PyObject_GetIter(obj)))
+       return -1;
+
+    while ((item = PyIter_Next(iterator)))
+    {
+       if (ConvertFromPyObject(item, &v) == -1)
+       {
+           Py_DECREF(iterator);
+           Py_DECREF(item);
+           return -1;
+       }
+       Py_DECREF(item);
+       if (list_insert_tv(l, &v, li) == FAIL)
+       {
+           clear_tv(&v);
+           PyErr_SET_VIM(N_("internal error: failed to add item to list"));
+           return -1;
+       }
+       clear_tv(&v);
+    }
+    Py_DECREF(iterator);
+
+    if (PyErr_Occurred())
+       return -1;
+
+    return 0;
+}
+
+    static PyObject *
+ListConcatInPlace(ListObject *self, PyObject *obj)
+{
+    list_T     *l = self->list;
+    PyObject   *lookup_dict;
+
+    if (l->lv_lock)
+    {
+       RAISE_LOCKED_LIST;
+       return NULL;
+    }
+
+    if (!(lookup_dict = PyDict_New()))
+       return NULL;
+
+    if (list_py_concat(l, obj, lookup_dict) == -1)
+    {
+       Py_DECREF(lookup_dict);
+       return NULL;
+    }
+    Py_DECREF(lookup_dict);
+
+    Py_INCREF(self);
+    return (PyObject *)(self);
+}
+
+static char *ListAttrs[] = {
+    "locked",
+    NULL
+};
+
+    static PyObject *
+ListDir(PyObject *self)
+{
+    return ObjectDir(self, ListAttrs);
+}
+
+    static int
+ListSetattr(ListObject *self, char *name, PyObject *valObject)
+{
+    if (valObject == NULL)
+    {
+       PyErr_SET_STRING(PyExc_AttributeError,
+               N_("cannot delete vim.List attributes"));
+       return -1;
+    }
+
+    if (strcmp(name, "locked") == 0)
+    {
+       if (self->list->lv_lock == VAR_FIXED)
+       {
+           PyErr_SET_STRING(PyExc_TypeError, N_("cannot modify fixed list"));
+           return -1;
+       }
+       else
+       {
+           int         istrue = PyObject_IsTrue(valObject);
+           if (istrue == -1)
+               return -1;
+           else if (istrue)
+               self->list->lv_lock = VAR_LOCKED;
+           else
+               self->list->lv_lock = 0;
+       }
+       return 0;
+    }
+    else
+    {
+       PyErr_FORMAT(PyExc_AttributeError, N_("cannot set attribute %s"), name);
+       return -1;
+    }
+}
+
+static struct PyMethodDef ListMethods[] = {
+    {"extend", (PyCFunction)ListConcatInPlace, METH_O,         ""},
+    {"__dir__",        (PyCFunction)ListDir,           METH_NOARGS,    ""},
+    { NULL,    NULL,                           0,              NULL}
+};
+
+typedef struct
+{
+    PyObject_HEAD
+    char_u     *name;
+} FunctionObject;
+
+static PyTypeObject FunctionType;
+
+#define NEW_FUNCTION(name) FunctionNew(&FunctionType, name)
+
+    static PyObject *
+FunctionNew(PyTypeObject *subtype, char_u *name)
+{
+    FunctionObject     *self;
+
+    self = (FunctionObject *) subtype->tp_alloc(subtype, 0);
+
+    if (self == NULL)
+       return NULL;
+
+    if (isdigit(*name))
+    {
+       if (!translated_function_exists(name))
+       {
+           PyErr_FORMAT(PyExc_ValueError,
+                   N_("unnamed function %s does not exist"), name);
+           return NULL;
+       }
+       self->name = vim_strsave(name);
+       func_ref(self->name);
+    }
+    else
+       if ((self->name = get_expanded_name(name,
+                                   vim_strchr(name, AUTOLOAD_CHAR) == NULL))
+               == NULL)
+       {
+           PyErr_FORMAT(PyExc_ValueError,
+                   N_("function %s does not exist"), name);
+           return NULL;
+       }
+
+    return (PyObject *)(self);
+}
+
+    static PyObject *
+FunctionConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
+{
+    PyObject   *self;
+    char_u     *name;
+
+    if (kwargs)
+    {
+       PyErr_SET_STRING(PyExc_TypeError,
+               N_("function constructor does not accept keyword arguments"));
+       return NULL;
+    }
+
+    if (!PyArg_ParseTuple(args, "et", "ascii", &name))
+       return NULL;
+
+    self = FunctionNew(subtype, name);
+
+    PyMem_Free(name);
+
+    return self;
+}
+
+    static void
+FunctionDestructor(FunctionObject *self)
+{
+    func_unref(self->name);
+    vim_free(self->name);
+
+    DESTRUCTOR_FINISH(self);
+}
+
+static char *FunctionAttrs[] = {
+    "softspace",
+    NULL
+};
+
+    static PyObject *
+FunctionDir(PyObject *self)
+{
+    return ObjectDir(self, FunctionAttrs);
+}
+
+    static PyObject *
+FunctionCall(FunctionObject *self, PyObject *argsObject, PyObject *kwargs)
+{
+    char_u     *name = self->name;
+    typval_T   args;
+    typval_T   selfdicttv;
+    typval_T   rettv;
+    dict_T     *selfdict = NULL;
+    PyObject   *selfdictObject;
+    PyObject   *ret;
+    int                error;
+
+    if (ConvertFromPyObject(argsObject, &args) == -1)
+       return NULL;
+
+    if (kwargs != NULL)
+    {
+       selfdictObject = PyDict_GetItemString(kwargs, "self");
+       if (selfdictObject != NULL)
+       {
+           if (ConvertFromPyMapping(selfdictObject, &selfdicttv) == -1)
+           {
+               clear_tv(&args);
+               return NULL;
+           }
+           selfdict = selfdicttv.vval.v_dict;
+       }
+    }
+
+    Py_BEGIN_ALLOW_THREADS
+    Python_Lock_Vim();
+
+    VimTryStart();
+    error = func_call(name, &args, selfdict, &rettv);
+
+    Python_Release_Vim();
+    Py_END_ALLOW_THREADS
+
+    if (VimTryEnd())
+       ret = NULL;
+    else if (error != OK)
+    {
+       ret = NULL;
+       PyErr_VIM_FORMAT(N_("failed to run function %s"), (char *)name);
+    }
+    else
+       ret = ConvertToPyObject(&rettv);
+
+    clear_tv(&args);
+    clear_tv(&rettv);
+    if (selfdict != NULL)
+       clear_tv(&selfdicttv);
+
+    return ret;
+}
+
+    static PyObject *
+FunctionRepr(FunctionObject *self)
+{
+#ifdef Py_TRACE_REFS
+    /* For unknown reason self->name may be NULL after calling
+     * Finalize */
+    return PyString_FromFormat("<vim.Function '%s'>",
+           (self->name == NULL ? "<NULL>" : (char *)self->name));
+#else
+    return PyString_FromFormat("<vim.Function '%s'>", (char *)self->name);
+#endif
+}
+
+static struct PyMethodDef FunctionMethods[] = {
+    {"__dir__",        (PyCFunction)FunctionDir,   METH_NOARGS,                ""},
+    { NULL,    NULL,                   0,                              NULL}
+};
+
+/*
+ * Options object
+ */
+
+static PyTypeObject OptionsType;
+
+typedef int (*checkfun)(void *);
+
+typedef struct
+{
+    PyObject_HEAD
+    int opt_type;
+    void *from;
+    checkfun Check;
+    PyObject *fromObj;
+} OptionsObject;
+
+    static int
+dummy_check(void *arg UNUSED)
+{
+    return 0;
+}
+
+    static PyObject *
+OptionsNew(int opt_type, void *from, checkfun Check, PyObject *fromObj)
+{
+    OptionsObject      *self;
+
+    self = PyObject_GC_New(OptionsObject, &OptionsType);
+    if (self == NULL)
+       return NULL;
+
+    self->opt_type = opt_type;
+    self->from = from;
+    self->Check = Check;
+    self->fromObj = fromObj;
+    if (fromObj)
+       Py_INCREF(fromObj);
+
+    return (PyObject *)(self);
+}
+
+    static void
+OptionsDestructor(OptionsObject *self)
+{
+    PyObject_GC_UnTrack((void *)(self));
+    Py_XDECREF(self->fromObj);
+    PyObject_GC_Del((void *)(self));
+}
+
+    static int
+OptionsTraverse(OptionsObject *self, visitproc visit, void *arg)
+{
+    Py_VISIT(self->fromObj);
+    return 0;
+}
+
+    static int
+OptionsClear(OptionsObject *self)
+{
+    Py_CLEAR(self->fromObj);
+    return 0;
+}
+
+    static PyObject *
+OptionsItem(OptionsObject *self, PyObject *keyObject)
+{
+    char_u     *key;
+    int                flags;
+    long       numval;
+    char_u     *stringval;
+    PyObject   *todecref;
+
+    if (self->Check(self->from))
+       return NULL;
+
+    if (!(key = StringToChars(keyObject, &todecref)))
+       return NULL;
+
+    if (*key == NUL)
+    {
+       RAISE_NO_EMPTY_KEYS;
+       Py_XDECREF(todecref);
+       return NULL;
+    }
+
+    flags = get_option_value_strict(key, &numval, &stringval,
+                                   self->opt_type, self->from);
+
+    Py_XDECREF(todecref);
+
+    if (flags == 0)
+    {
+       PyErr_SetObject(PyExc_KeyError, keyObject);
+       return NULL;
+    }
+
+    if (flags & SOPT_UNSET)
+    {
+       Py_INCREF(Py_None);
+       return Py_None;
+    }
+    else if (flags & SOPT_BOOL)
+    {
+       PyObject        *ret;
+       ret = numval ? Py_True : Py_False;
+       Py_INCREF(ret);
+       return ret;
+    }
+    else if (flags & SOPT_NUM)
+       return PyInt_FromLong(numval);
+    else if (flags & SOPT_STRING)
+    {
+       if (stringval)
+       {
+           PyObject    *ret = PyBytes_FromString((char *)stringval);
+           vim_free(stringval);
+           return ret;
+       }
+       else
+       {
+           PyErr_SET_STRING(PyExc_RuntimeError,
+                   N_("unable to get option value"));
+           return NULL;
+       }
+    }
+    else
+    {
+       PyErr_SET_VIM(N_("internal error: unknown option type"));
+       return NULL;
+    }
+}
+
+    static int
+set_option_value_err(char_u *key, int numval, char_u *stringval, int opt_flags)
+{
+    char_u     *errmsg;
+
+    if ((errmsg = set_option_value(key, numval, stringval, opt_flags)))
+    {
+       if (VimTryEnd())
+           return FAIL;
+       PyErr_SetVim((char *)errmsg);
+       return FAIL;
+    }
+    return OK;
+}
+
+    static int
+set_option_value_for(
+       char_u *key,
+       int numval,
+       char_u *stringval,
+       int opt_flags,
+       int opt_type,
+       void *from)
+{
+    win_T      *save_curwin = NULL;
+    tabpage_T  *save_curtab = NULL;
+    buf_T      *save_curbuf = NULL;
+    int                set_ret = 0;
+
+    VimTryStart();
+    switch (opt_type)
+    {
+       case SREQ_WIN:
+           if (switch_win(&save_curwin, &save_curtab, (win_T *)from,
+                             win_find_tabpage((win_T *)from), FALSE) == FAIL)
+           {
+               if (VimTryEnd())
+                   return -1;
+               PyErr_SET_VIM(N_("problem while switching windows"));
+               return -1;
+           }
+           set_ret = set_option_value_err(key, numval, stringval, opt_flags);
+           restore_win(save_curwin, save_curtab, TRUE);
+           break;
+       case SREQ_BUF:
+           switch_buffer(&save_curbuf, (buf_T *)from);
+           set_ret = set_option_value_err(key, numval, stringval, opt_flags);
+           restore_buffer(save_curbuf);
+           break;
+       case SREQ_GLOBAL:
+           set_ret = set_option_value_err(key, numval, stringval, opt_flags);
+           break;
+    }
+    if (set_ret == FAIL)
+       return -1;
+    return VimTryEnd();
+}
+
+    static int
+OptionsAssItem(OptionsObject *self, PyObject *keyObject, PyObject *valObject)
+{
+    char_u     *key;
+    int                flags;
+    int                opt_flags;
+    int                ret = 0;
+    PyObject   *todecref;
+
+    if (self->Check(self->from))
+       return -1;
+
+    if (!(key = StringToChars(keyObject, &todecref)))
+       return -1;
+
+    if (*key == NUL)
+    {
+       RAISE_NO_EMPTY_KEYS;
+       Py_XDECREF(todecref);
+       return -1;
+    }
+
+    flags = get_option_value_strict(key, NULL, NULL,
+                                   self->opt_type, self->from);
+
+    if (flags == 0)
+    {
+       PyErr_SetObject(PyExc_KeyError, keyObject);
+       Py_XDECREF(todecref);
+       return -1;
+    }
+
+    if (valObject == NULL)
+    {
+       if (self->opt_type == SREQ_GLOBAL)
+       {
+           PyErr_FORMAT(PyExc_ValueError,
+                   N_("unable to unset global option %s"), key);
+           Py_XDECREF(todecref);
+           return -1;
+       }
+       else if (!(flags & SOPT_GLOBAL))
+       {
+           PyErr_FORMAT(PyExc_ValueError,
+                   N_("unable to unset option %s "
+                      "which does not have global value"), key);
+           Py_XDECREF(todecref);
+           return -1;
+       }
+       else
+       {
+           unset_global_local_option(key, self->from);
+           Py_XDECREF(todecref);
+           return 0;
+       }
+    }
+
+    opt_flags = (self->opt_type ? OPT_LOCAL : OPT_GLOBAL);
+
+    if (flags & SOPT_BOOL)
+    {
+       int     istrue = PyObject_IsTrue(valObject);
+
+       if (istrue == -1)
+           ret = -1;
+       else
+           ret = set_option_value_for(key, istrue, NULL,
+                                   opt_flags, self->opt_type, self->from);
+    }
+    else if (flags & SOPT_NUM)
+    {
+       long    val;
+
+       if (NumberToLong(valObject, &val, NUMBER_INT))
+       {
+           Py_XDECREF(todecref);
+           return -1;
+       }
+
+       ret = set_option_value_for(key, (int) val, NULL, opt_flags,
+                               self->opt_type, self->from);
+    }
+    else
+    {
+       char_u          *val;
+       PyObject        *todecref;
+
+       if ((val = StringToChars(valObject, &todecref)))
+           ret = set_option_value_for(key, 0, val, opt_flags,
+                                   self->opt_type, self->from);
+       else
+           ret = -1;
+    }
+
+    Py_XDECREF(todecref);
+
+    return ret;
+}
+
+static PyMappingMethods OptionsAsMapping = {
+    (lenfunc)       NULL,
+    (binaryfunc)    OptionsItem,
+    (objobjargproc) OptionsAssItem,
+};
+
+/* Tabpage object
+ */
+
+typedef struct
+{
+    PyObject_HEAD
+    tabpage_T  *tab;
+} TabPageObject;
+
+static PyObject *WinListNew(TabPageObject *tabObject);
+
+static PyTypeObject TabPageType;
+
+    static int
+CheckTabPage(TabPageObject *self)
+{
+    if (self->tab == INVALID_TABPAGE_VALUE)
+    {
+       PyErr_SET_VIM(N_("attempt to refer to deleted tab page"));
+       return -1;
+    }
+
+    return 0;
+}
+
+    static PyObject *
+TabPageNew(tabpage_T *tab)
+{
+    TabPageObject *self;
+
+    if (TAB_PYTHON_REF(tab))
+    {
+       self = TAB_PYTHON_REF(tab);
+       Py_INCREF(self);
+    }
+    else
+    {
+       self = PyObject_NEW(TabPageObject, &TabPageType);
+       if (self == NULL)
+           return NULL;
+       self->tab = tab;
+       TAB_PYTHON_REF(tab) = self;
+    }
+
+    return (PyObject *)(self);
+}
+
+    static void
+TabPageDestructor(TabPageObject *self)
+{
+    if (self->tab && self->tab != INVALID_TABPAGE_VALUE)
+       TAB_PYTHON_REF(self->tab) = NULL;
+
+    DESTRUCTOR_FINISH(self);
+}
+
+static char *TabPageAttrs[] = {
+    "windows", "number", "vars", "window", "valid",
+    NULL
+};
+
+    static PyObject *
+TabPageDir(PyObject *self)
+{
+    return ObjectDir(self, TabPageAttrs);
+}
+
+    static PyObject *
+TabPageAttrValid(TabPageObject *self, char *name)
+{
+    PyObject   *ret;
+
+    if (strcmp(name, "valid") != 0)
+       return NULL;
+
+    ret = ((self->tab == INVALID_TABPAGE_VALUE) ? Py_False : Py_True);
+    Py_INCREF(ret);
+    return ret;
+}
+
+    static PyObject *
+TabPageAttr(TabPageObject *self, char *name)
+{
+    if (strcmp(name, "windows") == 0)
+       return WinListNew(self);
+    else if (strcmp(name, "number") == 0)
+       return PyLong_FromLong((long) get_tab_number(self->tab));
+    else if (strcmp(name, "vars") == 0)
+       return NEW_DICTIONARY(self->tab->tp_vars);
+    else if (strcmp(name, "window") == 0)
+    {
+       /* For current tab window.c does not bother to set or update tp_curwin
+        */
+       if (self->tab == curtab)
+           return WindowNew(curwin, curtab);
+       else
+           return WindowNew(self->tab->tp_curwin, self->tab);
+    }
+    else if (strcmp(name, "__members__") == 0)
+       return ObjectDir(NULL, TabPageAttrs);
+    return NULL;
+}
+
+    static PyObject *
+TabPageRepr(TabPageObject *self)
+{
+    if (self->tab == INVALID_TABPAGE_VALUE)
+       return PyString_FromFormat("<tabpage object (deleted) at %p>", (self));
+    else
+    {
+       int     t = get_tab_number(self->tab);
+
+       if (t == 0)
+           return PyString_FromFormat("<tabpage object (unknown) at %p>",
+                                       (self));
+       else
+           return PyString_FromFormat("<tabpage %d>", t - 1);
+    }
+}
+
+static struct PyMethodDef TabPageMethods[] = {
+    /* name,       function,                   calling,        documentation */
+    {"__dir__",            (PyCFunction)TabPageDir,    METH_NOARGS,    ""},
+    { NULL,        NULL,                       0,              NULL}
+};
+
+/*
+ * Window list object
+ */
+
+static PyTypeObject TabListType;
+static PySequenceMethods TabListAsSeq;
+
+typedef struct
+{
+    PyObject_HEAD
+} TabListObject;
+
+    static PyInt
+TabListLength(PyObject *self UNUSED)
+{
+    tabpage_T  *tp = first_tabpage;
+    PyInt      n = 0;
+
+    while (tp != NULL)
+    {
+       ++n;
+       tp = tp->tp_next;
+    }
+
+    return n;
+}
+
+    static PyObject *
+TabListItem(PyObject *self UNUSED, PyInt n)
+{
+    tabpage_T  *tp;
+
+    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, --n)
+       if (n == 0)
+           return TabPageNew(tp);
+
+    PyErr_SET_STRING(PyExc_IndexError, N_("no such tab page"));
+    return NULL;
+}
+
+/*
+ * Window object
+ */
+
+typedef struct
+{
+    PyObject_HEAD
+    win_T      *win;
+    TabPageObject      *tabObject;
+} WindowObject;
+
+static PyTypeObject WindowType;
+
+    static int
+CheckWindow(WindowObject *self)
+{
+    if (self->win == INVALID_WINDOW_VALUE)
+    {
+       PyErr_SET_VIM(N_("attempt to refer to deleted window"));
+       return -1;
+    }
+
+    return 0;
+}
+
+    static PyObject *
+WindowNew(win_T *win, tabpage_T *tab)
+{
+    /* We need to handle deletion of windows underneath us.
+     * If we add a "w_python*_ref" field to the win_T structure,
+     * then we can get at it in win_free() in vim. We then
+     * need to create only ONE Python object per window - if
+     * we try to create a second, just INCREF the existing one
+     * and return it. The (single) Python object referring to
+     * the window is stored in "w_python*_ref".
+     * On a win_free() we set the Python object's win_T* field
+     * to an invalid value. We trap all uses of a window
+     * object, and reject them if the win_T* field is invalid.
+     *
+     * Python2 and Python3 get different fields and different objects:
+     * w_python_ref and w_python3_ref fields respectively.
+     */
+
+    WindowObject *self;
+
+    if (WIN_PYTHON_REF(win))
+    {
+       self = WIN_PYTHON_REF(win);
+       Py_INCREF(self);
+    }
+    else
+    {
+       self = PyObject_GC_New(WindowObject, &WindowType);
+       if (self == NULL)
+           return NULL;
+       self->win = win;
+       WIN_PYTHON_REF(win) = self;
+    }
+
+    self->tabObject = ((TabPageObject *)(TabPageNew(tab)));
+
+    return (PyObject *)(self);
+}
+
+    static void
+WindowDestructor(WindowObject *self)
+{
+    PyObject_GC_UnTrack((void *)(self));
+    if (self->win && self->win != INVALID_WINDOW_VALUE)
+       WIN_PYTHON_REF(self->win) = NULL;
+     Py_XDECREF(((PyObject *)(self->tabObject)));
+    PyObject_GC_Del((void *)(self));
+}
+
+    static int
+WindowTraverse(WindowObject *self, visitproc visit, void *arg)
+{
+    Py_VISIT(((PyObject *)(self->tabObject)));
+    return 0;
+}
+
+    static int
+WindowClear(WindowObject *self)
+{
+    Py_CLEAR(self->tabObject);
+    return 0;
+}
+
+    static win_T *
+get_firstwin(TabPageObject *tabObject)
+{
+    if (tabObject)
+    {
+       if (CheckTabPage(tabObject))
+           return NULL;
+       /* For current tab window.c does not bother to set or update tp_firstwin
+        */
+       else if (tabObject->tab == curtab)
+           return firstwin;
+       else
+           return tabObject->tab->tp_firstwin;
+    }
+    else
+       return firstwin;
+}
+static char *WindowAttrs[] = {
+    "buffer", "cursor", "height", "vars", "options", "number", "row", "col",
+    "tabpage", "valid",
+    NULL
+};
+
+    static PyObject *
+WindowDir(PyObject *self)
+{
+    return ObjectDir(self, WindowAttrs);
+}
+
+    static PyObject *
+WindowAttrValid(WindowObject *self, char *name)
+{
+    PyObject   *ret;
+
+    if (strcmp(name, "valid") != 0)
+       return NULL;
+
+    ret = ((self->win == INVALID_WINDOW_VALUE) ? Py_False : Py_True);
+    Py_INCREF(ret);
+    return ret;
+}
+
+    static PyObject *
+WindowAttr(WindowObject *self, char *name)
+{
+    if (strcmp(name, "buffer") == 0)
+       return (PyObject *)BufferNew(self->win->w_buffer);
+    else if (strcmp(name, "cursor") == 0)
+    {
+       pos_T *pos = &self->win->w_cursor;
+
+       return Py_BuildValue("(ll)", (long)(pos->lnum), (long)(pos->col));
+    }
+    else if (strcmp(name, "height") == 0)
+       return PyLong_FromLong((long)(self->win->w_height));
+#ifdef FEAT_WINDOWS
+    else if (strcmp(name, "row") == 0)
+       return PyLong_FromLong((long)(self->win->w_winrow));
+#endif
+#ifdef FEAT_VERTSPLIT
+    else if (strcmp(name, "width") == 0)
+       return PyLong_FromLong((long)(W_WIDTH(self->win)));
+    else if (strcmp(name, "col") == 0)
+       return PyLong_FromLong((long)(W_WINCOL(self->win)));
+#endif
+    else if (strcmp(name, "vars") == 0)
+       return NEW_DICTIONARY(self->win->w_vars);
+    else if (strcmp(name, "options") == 0)
+       return OptionsNew(SREQ_WIN, self->win, (checkfun) CheckWindow,
+                       (PyObject *) self);
+    else if (strcmp(name, "number") == 0)
+    {
+       if (CheckTabPage(self->tabObject))
+           return NULL;
+       return PyLong_FromLong((long)
+               get_win_number(self->win, get_firstwin(self->tabObject)));
+    }
+    else if (strcmp(name, "tabpage") == 0)
+    {
+       Py_INCREF(self->tabObject);
+       return (PyObject *)(self->tabObject);
+    }
+    else if (strcmp(name, "__members__") == 0)
+       return ObjectDir(NULL, WindowAttrs);
+    else
+       return NULL;
+}
+
+    static int
+WindowSetattr(WindowObject *self, char *name, PyObject *valObject)
+{
+    if (CheckWindow(self))
+       return -1;
+
+    if (strcmp(name, "buffer") == 0)
+    {
+       PyErr_SET_STRING(PyExc_TypeError, N_("readonly attribute: buffer"));
+       return -1;
+    }
+    else if (strcmp(name, "cursor") == 0)
+    {
+       long lnum;
+       long col;
+
+       if (!PyArg_Parse(valObject, "(ll)", &lnum, &col))
+           return -1;
+
+       if (lnum <= 0 || lnum > self->win->w_buffer->b_ml.ml_line_count)
+       {
+           PyErr_SET_VIM(N_("cursor position outside buffer"));
+           return -1;
+       }
+
+       /* Check for keyboard interrupts */
+       if (VimCheckInterrupt())
+           return -1;
+
+       self->win->w_cursor.lnum = lnum;
+       self->win->w_cursor.col = col;
+#ifdef FEAT_VIRTUALEDIT
+       self->win->w_cursor.coladd = 0;
+#endif
+       /* When column is out of range silently correct it. */
+       check_cursor_col_win(self->win);
+
+       update_screen(VALID);
+       return 0;
+    }
+    else if (strcmp(name, "height") == 0)
+    {
+       long    height;
+       win_T   *savewin;
+
+       if (NumberToLong(valObject, &height, NUMBER_INT|NUMBER_UNSIGNED))
+           return -1;
+
+#ifdef FEAT_GUI
+       need_mouse_correct = TRUE;
+#endif
+       savewin = curwin;
+       curwin = self->win;
+
+       VimTryStart();
+       win_setheight((int) height);
+       curwin = savewin;
+       if (VimTryEnd())
+           return -1;
+
+       return 0;
+    }
+#ifdef FEAT_VERTSPLIT
+    else if (strcmp(name, "width") == 0)
+    {
+       long    width;
+       win_T   *savewin;
+
+       if (NumberToLong(valObject, &width, NUMBER_INT|NUMBER_UNSIGNED))
+           return -1;
+
+#ifdef FEAT_GUI
+       need_mouse_correct = TRUE;
+#endif
+       savewin = curwin;
+       curwin = self->win;
+
+       VimTryStart();
+       win_setwidth((int) width);
+       curwin = savewin;
+       if (VimTryEnd())
+           return -1;
+
+       return 0;
+    }
+#endif
+    else
+    {
+       PyErr_SetString(PyExc_AttributeError, name);
+       return -1;
+    }
+}
+
+    static PyObject *
+WindowRepr(WindowObject *self)
+{
+    if (self->win == INVALID_WINDOW_VALUE)
+       return PyString_FromFormat("<window object (deleted) at %p>", (self));
+    else
+    {
+       int     w = get_win_number(self->win, firstwin);
+
+       if (w == 0)
+           return PyString_FromFormat("<window object (unknown) at %p>",
+                                                                     (self));
+       else
+           return PyString_FromFormat("<window %d>", w - 1);
+    }
+}
+
+static struct PyMethodDef WindowMethods[] = {
+    /* name,       function,                   calling,        documentation */
+    {"__dir__",            (PyCFunction)WindowDir,     METH_NOARGS,    ""},
+    { NULL,        NULL,                       0,              NULL}
+};
+
+/*
+ * Window list object
+ */
+
+static PyTypeObject WinListType;
+static PySequenceMethods WinListAsSeq;
+
+typedef struct
+{
+    PyObject_HEAD
+    TabPageObject      *tabObject;
+} WinListObject;
+
+    static PyObject *
+WinListNew(TabPageObject *tabObject)
+{
+    WinListObject      *self;
+
+    self = PyObject_NEW(WinListObject, &WinListType);
+    self->tabObject = tabObject;
+    Py_INCREF(tabObject);
+
+    return (PyObject *)(self);
+}
+
+    static void
+WinListDestructor(WinListObject *self)
+{
+    TabPageObject      *tabObject = self->tabObject;
+
+    if (tabObject)
+    {
+       Py_DECREF((PyObject *)(tabObject));
+    }
+
+    DESTRUCTOR_FINISH(self);
+}
+
+    static PyInt
+WinListLength(WinListObject *self)
+{
+    win_T      *w;
+    PyInt      n = 0;
+
+    if (!(w = get_firstwin(self->tabObject)))
+       return -1;
+
+    while (w != NULL)
+    {
+       ++n;
+       w = W_NEXT(w);
+    }
+
+    return n;
+}
+
+    static PyObject *
+WinListItem(WinListObject *self, PyInt n)
+{
+    win_T *w;
+
+    if (!(w = get_firstwin(self->tabObject)))
+       return NULL;
+
+    for (; w != NULL; w = W_NEXT(w), --n)
+       if (n == 0)
+           return WindowNew(w, self->tabObject? self->tabObject->tab: curtab);
+
+    PyErr_SET_STRING(PyExc_IndexError, N_("no such window"));
+    return NULL;
+}
+
+/* Convert a Python string into a Vim line.
+ *
+ * The result is in allocated memory. All internal nulls are replaced by
+ * newline characters. It is an error for the string to contain newline
+ * characters.
+ *
+ * On errors, the Python exception data is set, and NULL is returned.
+ */
+    static char *
+StringToLine(PyObject *obj)
+{
+    char       *str;
+    char       *save;
+    PyObject   *bytes = NULL;
+    Py_ssize_t len = 0;
+    PyInt      i;
+    char       *p;
+
+    if (PyBytes_Check(obj))
+    {
+       if (PyBytes_AsStringAndSize(obj, &str, &len) == -1
+               || str == NULL)
+           return NULL;
+    }
+    else if (PyUnicode_Check(obj))
+    {
+       if (!(bytes = PyUnicode_AsEncodedString(obj, ENC_OPT, NULL)))
+           return NULL;
+
+       if (PyBytes_AsStringAndSize(bytes, &str, &len) == -1
+               || str == NULL)
+       {
+           Py_DECREF(bytes);
+           return NULL;
+       }
+    }
+    else
+    {
+#if PY_MAJOR_VERSION < 3
+       PyErr_FORMAT(PyExc_TypeError,
+               N_("expected str() or unicode() instance, but got %s"),
+               Py_TYPE_NAME(obj));
+#else
+       PyErr_FORMAT(PyExc_TypeError,
+               N_("expected bytes() or str() instance, but got %s"),
+               Py_TYPE_NAME(obj));
+#endif
+       return NULL;
+    }
+
+    /*
+     * Error checking: String must not contain newlines, as we
+     * are replacing a single line, and we must replace it with
+     * a single line.
+     * A trailing newline is removed, so that append(f.readlines()) works.
+     */
+    p = memchr(str, '\n', len);
+    if (p != NULL)
+    {
+       if (p == str + len - 1)
+           --len;
+       else
+       {
+           PyErr_SET_VIM(N_("string cannot contain newlines"));
+           Py_XDECREF(bytes);
+           return NULL;
+       }
+    }
+
+    /* Create a copy of the string, with internal nulls replaced by
+     * newline characters, as is the vim convention.
+     */
+    save = (char *)alloc((unsigned)(len+1));
+    if (save == NULL)
+    {
+       PyErr_NoMemory();
+       Py_XDECREF(bytes);
+       return NULL;
+    }
+
+    for (i = 0; i < len; ++i)
+    {
+       if (str[i] == '\0')
+           save[i] = '\n';
+       else
+           save[i] = str[i];
+    }
+
+    save[i] = '\0';
+    Py_XDECREF(bytes);  /* Python 2 does nothing here */
+
+    return save;
+}
+
+/* Get a line from the specified buffer. The line number is
+ * in Vim format (1-based). The line is returned as a Python
+ * string object.
+ */
+    static PyObject *
+GetBufferLine(buf_T *buf, PyInt n)
+{
+    return LineToString((char *)ml_get_buf(buf, (linenr_T)n, FALSE));
+}
+
+
+/* Get a list of lines from the specified buffer. The line numbers
+ * are in Vim format (1-based). The range is from lo up to, but not
+ * including, hi. The list is returned as a Python list of string objects.
+ */
+    static PyObject *
+GetBufferLineList(buf_T *buf, PyInt lo, PyInt hi)
+{
+    PyInt      i;
+    PyInt      n = hi - lo;
+    PyObject   *list = PyList_New(n);
+
+    if (list == NULL)
+       return NULL;
+
+    for (i = 0; i < n; ++i)
+    {
+       PyObject        *string = LineToString(
+               (char *)ml_get_buf(buf, (linenr_T)(lo+i), FALSE));
+
+       /* Error check - was the Python string creation OK? */
+       if (string == NULL)
+       {
+           Py_DECREF(list);
+           return NULL;
+       }
+
+       PyList_SET_ITEM(list, i, string);
+    }
+
+    /* The ownership of the Python list is passed to the caller (ie,
+     * the caller should Py_DECREF() the object when it is finished
+     * with it).
+     */
+
+    return list;
+}
+
+/*
+ * Check if deleting lines made the cursor position invalid.
+ * Changed the lines from "lo" to "hi" and added "extra" lines (negative if
+ * deleted).
+ */
+    static void
+py_fix_cursor(linenr_T lo, linenr_T hi, linenr_T extra)
+{
+    if (curwin->w_cursor.lnum >= lo)
+    {
+       /* Adjust the cursor position if it's in/after the changed
+        * lines. */
+       if (curwin->w_cursor.lnum >= hi)
+       {
+           curwin->w_cursor.lnum += extra;
+           check_cursor_col();
+       }
+       else if (extra < 0)
+       {
+           curwin->w_cursor.lnum = lo;
+           check_cursor();
+       }
+       else
+           check_cursor_col();
+       changed_cline_bef_curs();
+    }
+    invalidate_botline();
+}
+
+/*
+ * Find a window that contains "buf" and switch to it.
+ * If there is no such window, use the current window and change "curbuf".
+ * Caller must initialize save_curbuf to NULL.
+ * restore_win_for_buf() MUST be called later!
+ */
+    static void
+switch_to_win_for_buf(
+    buf_T      *buf,
+    win_T      **save_curwinp,
+    tabpage_T  **save_curtabp,
+    buf_T      **save_curbufp)
+{
+    win_T      *wp;
+    tabpage_T  *tp;
+
+    if (find_win_for_buf(buf, &wp, &tp) == FAIL
+           || switch_win(save_curwinp, save_curtabp, wp, tp, TRUE) == FAIL)
+       switch_buffer(save_curbufp, buf);
+}
+
+    static void
+restore_win_for_buf(
+    win_T      *save_curwin,
+    tabpage_T  *save_curtab,
+    buf_T      *save_curbuf)
+{
+    if (save_curbuf == NULL)
+       restore_win(save_curwin, save_curtab, TRUE);
+    else
+       restore_buffer(save_curbuf);
+}
+
+/*
+ * Replace a line in the specified buffer. The line number is
+ * in Vim format (1-based). The replacement line is given as
+ * a Python string object. The object is checked for validity
+ * and correct format. Errors are returned as a value of FAIL.
+ * The return value is OK on success.
+ * If OK is returned and len_change is not NULL, *len_change
+ * is set to the change in the buffer length.
+ */
+    static int
+SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
+{
+    buf_T      *save_curbuf = NULL;
+    win_T      *save_curwin = NULL;
+    tabpage_T  *save_curtab = NULL;
+
+    /* First of all, we check the type of the supplied Python object.
+     * There are three cases:
+     *   1. NULL, or None - this is a deletion.
+     *   2. A string      - this is a replacement.
+     *   3. Anything else - this is an error.
+     */
+    if (line == Py_None || line == NULL)
+    {
+       PyErr_Clear();
+       switch_to_win_for_buf(buf, &save_curwin, &save_curtab, &save_curbuf);
+
+       VimTryStart();
+
+       if (u_savedel((linenr_T)n, 1L) == FAIL)
+           RAISE_UNDO_FAIL;
+       else if (ml_delete((linenr_T)n, FALSE) == FAIL)
+           RAISE_DELETE_LINE_FAIL;
+       else
+       {
+           if (buf == curbuf)
+               py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
+           if (save_curbuf == NULL)
+               /* Only adjust marks if we managed to switch to a window that
+                * holds the buffer, otherwise line numbers will be invalid. */
+               deleted_lines_mark((linenr_T)n, 1L);
+       }
+
+       restore_win_for_buf(save_curwin, save_curtab, save_curbuf);
+
+       if (VimTryEnd())
+           return FAIL;
+
+       if (len_change)
+           *len_change = -1;
+
+       return OK;
+    }
+    else if (PyBytes_Check(line) || PyUnicode_Check(line))
+    {
+       char    *save = StringToLine(line);
+
+       if (save == NULL)
+           return FAIL;
+
+       VimTryStart();
+
+       /* We do not need to free "save" if ml_replace() consumes it. */
+       PyErr_Clear();
+       switch_to_win_for_buf(buf, &save_curwin, &save_curtab, &save_curbuf);
+
+       if (u_savesub((linenr_T)n) == FAIL)
+       {
+           RAISE_UNDO_FAIL;
+           vim_free(save);
+       }
+       else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
+       {
+           RAISE_REPLACE_LINE_FAIL;
+           vim_free(save);
+       }
+       else
+           changed_bytes((linenr_T)n, 0);
+
+       restore_win_for_buf(save_curwin, save_curtab, save_curbuf);
+
+       /* Check that the cursor is not beyond the end of the line now. */
+       if (buf == curbuf)
+           check_cursor_col();
+
+       if (VimTryEnd())
+           return FAIL;
+
+       if (len_change)
+           *len_change = 0;
+
+       return OK;
+    }
+    else
+    {
+       PyErr_BadArgument();
+       return FAIL;
+    }
+}
+
+/* Replace a range of lines in the specified buffer. The line numbers are in
+ * Vim format (1-based). The range is from lo up to, but not including, hi.
+ * The replacement lines are given as a Python list of string objects. The
+ * list is checked for validity and correct format. Errors are returned as a
+ * value of FAIL.  The return value is OK on success.
+ * If OK is returned and len_change is not NULL, *len_change
+ * is set to the change in the buffer length.
+ */
+    static int
+SetBufferLineList(
+       buf_T *buf,
+       PyInt lo,
+       PyInt hi,
+       PyObject *list,
+       PyInt *len_change)
+{
+    buf_T      *save_curbuf = NULL;
+    win_T      *save_curwin = NULL;
+    tabpage_T  *save_curtab = NULL;
+
+    /* First of all, we check the type of the supplied Python object.
+     * There are three cases:
+     *   1. NULL, or None - this is a deletion.
+     *   2. A list        - this is a replacement.
+     *   3. Anything else - this is an error.
+     */
+    if (list == Py_None || list == NULL)
+    {
+       PyInt   i;
+       PyInt   n = (int)(hi - lo);
+
+       PyErr_Clear();
+       VimTryStart();
+       switch_to_win_for_buf(buf, &save_curwin, &save_curtab, &save_curbuf);
+
+       if (u_savedel((linenr_T)lo, (long)n) == FAIL)
+           RAISE_UNDO_FAIL;
+       else
+       {
+           for (i = 0; i < n; ++i)
+           {
+               if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+               {
+                   RAISE_DELETE_LINE_FAIL;
+                   break;
+               }
+           }
+           if (buf == curbuf)
+               py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
+           if (save_curbuf == NULL)
+               /* Only adjust marks if we managed to switch to a window that
+                * holds the buffer, otherwise line numbers will be invalid. */
+               deleted_lines_mark((linenr_T)lo, (long)i);
+       }
+
+       restore_win_for_buf(save_curwin, save_curtab, save_curbuf);
+
+       if (VimTryEnd())
+           return FAIL;
+
+       if (len_change)
+           *len_change = -n;
+
+       return OK;
+    }
+    else if (PyList_Check(list))
+    {
+       PyInt   i;
+       PyInt   new_len = PyList_Size(list);
+       PyInt   old_len = hi - lo;
+       PyInt   extra = 0;      /* lines added to text, can be negative */
+       char    **array;
+
+       if (new_len == 0)       /* avoid allocating zero bytes */
+           array = NULL;
+       else
+       {
+           array = PyMem_New(char *, new_len);
+           if (array == NULL)
+           {
+               PyErr_NoMemory();
+               return FAIL;
+           }
+       }
+
+       for (i = 0; i < new_len; ++i)
+       {
+           PyObject *line;
+
+           if (!(line = PyList_GetItem(list, i)) ||
+               !(array[i] = StringToLine(line)))
+           {
+               while (i)
+                   vim_free(array[--i]);
+               PyMem_Free(array);
+               return FAIL;
+           }
+       }
+
+       VimTryStart();
+       PyErr_Clear();
+
+       /* START of region without "return".  Must call restore_buffer()! */
+       switch_to_win_for_buf(buf, &save_curwin, &save_curtab, &save_curbuf);
+
+       if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
+           RAISE_UNDO_FAIL;
+
+       /* If the size of the range is reducing (ie, new_len < old_len) we
+        * need to delete some old_len. We do this at the start, by
+        * repeatedly deleting line "lo".
+        */
+       if (!PyErr_Occurred())
+       {
+           for (i = 0; i < old_len - new_len; ++i)
+               if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+               {
+                   RAISE_DELETE_LINE_FAIL;
+                   break;
+               }
+           extra -= i;
+       }
+
+       /* For as long as possible, replace the existing old_len with the
+        * new old_len. This is a more efficient operation, as it requires
+        * less memory allocation and freeing.
+        */
+       if (!PyErr_Occurred())
+       {
+           for (i = 0; i < old_len && i < new_len; ++i)
+               if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
+                                                                     == FAIL)
+               {
+                   RAISE_REPLACE_LINE_FAIL;
+                   break;
+               }
+       }
+       else
+           i = 0;
+
+       /* Now we may need to insert the remaining new old_len. If we do, we
+        * must free the strings as we finish with them (we can't pass the
+        * responsibility to vim in this case).
+        */
+       if (!PyErr_Occurred())
+       {
+           while (i < new_len)
+           {
+               if (ml_append((linenr_T)(lo + i - 1),
+                                       (char_u *)array[i], 0, FALSE) == FAIL)
+               {
+                   RAISE_INSERT_LINE_FAIL;
+                   break;
+               }
+               vim_free(array[i]);
+               ++i;
+               ++extra;
+           }
+       }
+
+       /* Free any left-over old_len, as a result of an error */
+       while (i < new_len)
+       {
+           vim_free(array[i]);
+           ++i;
+       }
+
+       /* Free the array of old_len. All of its contents have now
+        * been dealt with (either freed, or the responsibility passed
+        * to vim.
+        */
+       PyMem_Free(array);
+
+       /* Adjust marks. Invalidate any which lie in the
+        * changed range, and move any in the remainder of the buffer.
+        * Only adjust marks if we managed to switch to a window that holds
+        * the buffer, otherwise line numbers will be invalid. */
+       if (save_curbuf == NULL)
+           mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
+                                                 (long)MAXLNUM, (long)extra);
+       changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
+
+       if (buf == curbuf)
+           py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
+
+       /* END of region without "return". */
+       restore_win_for_buf(save_curwin, save_curtab, save_curbuf);
+
+       if (VimTryEnd())
+           return FAIL;
+
+       if (len_change)
+           *len_change = new_len - old_len;
+
+       return OK;
+    }
+    else
+    {
+       PyErr_BadArgument();
+       return FAIL;
+    }
+}
+
+/* Insert a number of lines into the specified buffer after the specified line.
+ * The line number is in Vim format (1-based). The lines to be inserted are
+ * given as a Python list of string objects or as a single string. The lines
+ * to be added are checked for validity and correct format. Errors are
+ * returned as a value of FAIL.  The return value is OK on success.
+ * If OK is returned and len_change is not NULL, *len_change
+ * is set to the change in the buffer length.
+ */
+    static int
+InsertBufferLines(buf_T *buf, PyInt n, PyObject *lines, PyInt *len_change)
+{
+    buf_T      *save_curbuf = NULL;
+    win_T      *save_curwin = NULL;
+    tabpage_T  *save_curtab = NULL;
+
+    /* First of all, we check the type of the supplied Python object.
+     * It must be a string or a list, or the call is in error.
+     */
+    if (PyBytes_Check(lines) || PyUnicode_Check(lines))
+    {
+       char            *str = StringToLine(lines);
+
+       if (str == NULL)
+           return FAIL;
+
+       PyErr_Clear();
+       VimTryStart();
+       switch_to_win_for_buf(buf, &save_curwin, &save_curtab, &save_curbuf);
+
+       if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL)
+           RAISE_UNDO_FAIL;
+       else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL)
+           RAISE_INSERT_LINE_FAIL;
+       else if (save_curbuf == NULL)
+           /* Only adjust marks if we managed to switch to a window that
+            * holds the buffer, otherwise line numbers will be invalid. */
+           appended_lines_mark((linenr_T)n, 1L);
+
+       vim_free(str);
+       restore_win_for_buf(save_curwin, save_curtab, save_curbuf);
+       update_screen(VALID);
+
+       if (VimTryEnd())
+           return FAIL;
+
+       if (len_change)
+           *len_change = 1;
+
+       return OK;
+    }
+    else if (PyList_Check(lines))
+    {
+       PyInt   i;
+       PyInt   size = PyList_Size(lines);
+       char    **array;
+
+       array = PyMem_New(char *, size);
+       if (array == NULL)
+       {
+           PyErr_NoMemory();
+           return FAIL;
+       }
+
+       for (i = 0; i < size; ++i)
+       {
+           PyObject *line;
+
+           if (!(line = PyList_GetItem(lines, i)) ||
+               !(array[i] = StringToLine(line)))
+           {
+               while (i)
+                   vim_free(array[--i]);
+               PyMem_Free(array);
+               return FAIL;
+           }
+       }
+
+       PyErr_Clear();
+       VimTryStart();
+       switch_to_win_for_buf(buf, &save_curwin, &save_curtab, &save_curbuf);
+
+       if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL)
+           RAISE_UNDO_FAIL;
+       else
+       {
+           for (i = 0; i < size; ++i)
+           {
+               if (ml_append((linenr_T)(n + i),
+                                       (char_u *)array[i], 0, FALSE) == FAIL)
+               {
+                   RAISE_INSERT_LINE_FAIL;
+
+                   /* Free the rest of the lines */
+                   while (i < size)
+                       vim_free(array[i++]);
+
+                   break;
+               }
+               vim_free(array[i]);
+           }
+           if (i > 0 && save_curbuf == NULL)
+               /* Only adjust marks if we managed to switch to a window that
+                * holds the buffer, otherwise line numbers will be invalid. */
+               appended_lines_mark((linenr_T)n, (long)i);
+       }
+
+       /* Free the array of lines. All of its contents have now
+        * been freed. */
+       PyMem_Free(array);
+       restore_win_for_buf(save_curwin, save_curtab, save_curbuf);
+
+       update_screen(VALID);
+
+       if (VimTryEnd())
+           return FAIL;
+
+       if (len_change)
+           *len_change = size;
+
+       return OK;
+    }
+    else
+    {
+       PyErr_BadArgument();
+       return FAIL;
+    }
+}
+
+/*
+ * Common routines for buffers and line ranges
+ * -------------------------------------------
+ */
+
+typedef struct
+{
+    PyObject_HEAD
+    buf_T *buf;
+} BufferObject;
+
+    static int
+CheckBuffer(BufferObject *self)
+{
+    if (self->buf == INVALID_BUFFER_VALUE)
+    {
+       PyErr_SET_VIM(N_("attempt to refer to deleted buffer"));
+       return -1;
+    }
+
+    return 0;
+}
+
+    static PyObject *
+RBItem(BufferObject *self, PyInt n, PyInt start, PyInt end)
+{
+    if (CheckBuffer(self))
+       return NULL;
+
+    if (end == -1)
+       end = self->buf->b_ml.ml_line_count;
+
+    if (n < 0)
+       n += end - start + 1;
+
+    if (n < 0 || n > end - start)
+    {
+       PyErr_SET_STRING(PyExc_IndexError, N_("line number out of range"));
+       return NULL;
+    }
+
+    return GetBufferLine(self->buf, n+start);
+}
+
+    static PyObject *
+RBSlice(BufferObject *self, PyInt lo, PyInt hi, PyInt start, PyInt end)
+{
+    PyInt size;
+
+    if (CheckBuffer(self))
+       return NULL;
+
+    if (end == -1)
+       end = self->buf->b_ml.ml_line_count;
+
+    size = end - start + 1;
+
+    if (lo < 0)
+       lo = 0;
+    else if (lo > size)
+       lo = size;
+    if (hi < 0)
+       hi = 0;
+    if (hi < lo)
+       hi = lo;
+    else if (hi > size)
+       hi = size;
+
+    return GetBufferLineList(self->buf, lo+start, hi+start);
+}
+
+    static PyInt
+RBAsItem(
+       BufferObject *self,
+       PyInt n,
+       PyObject *valObject,
+       PyInt start,
+       PyInt end,
+       PyInt *new_end)
+{
+    PyInt len_change;
+
+    if (CheckBuffer(self))
+       return -1;
+
+    if (end == -1)
+       end = self->buf->b_ml.ml_line_count;
+
+    if (n < 0)
+       n += end - start + 1;
+
+    if (n < 0 || n > end - start)
+    {
+       PyErr_SET_STRING(PyExc_IndexError, N_("line number out of range"));
+       return -1;
+    }
+
+    if (SetBufferLine(self->buf, n+start, valObject, &len_change) == FAIL)
+       return -1;
+
+    if (new_end)
+       *new_end = end + len_change;
+
+    return 0;
+}
+
+    static PyInt
+RBAsSlice(
+       BufferObject *self,
+       PyInt lo,
+       PyInt hi,
+       PyObject *valObject,
+       PyInt start,
+       PyInt end,
+       PyInt *new_end)
+{
+    PyInt size;
+    PyInt len_change;
+
+    /* Self must be a valid buffer */
+    if (CheckBuffer(self))
+       return -1;
+
+    if (end == -1)
+       end = self->buf->b_ml.ml_line_count;
+
+    /* Sort out the slice range */
+    size = end - start + 1;
+
+    if (lo < 0)
+       lo = 0;
+    else if (lo > size)
+       lo = size;
+    if (hi < 0)
+       hi = 0;
+    if (hi < lo)
+       hi = lo;
+    else if (hi > size)
+       hi = size;
+
+    if (SetBufferLineList(self->buf, lo + start, hi + start,
+                                               valObject, &len_change) == FAIL)
+       return -1;
+
+    if (new_end)
+       *new_end = end + len_change;
+
+    return 0;
+}
+
+
+    static PyObject *
+RBAppend(
+       BufferObject *self,
+       PyObject *args,
+       PyInt start,
+       PyInt end,
+       PyInt *new_end)
+{
+    PyObject *lines;
+    PyInt len_change;
+    PyInt max;
+    PyInt n;
+
+    if (CheckBuffer(self))
+       return NULL;
+
+    if (end == -1)
+       end = self->buf->b_ml.ml_line_count;
+
+    max = n = end - start + 1;
+
+    if (!PyArg_ParseTuple(args, "O|n", &lines, &n))
+       return NULL;
+
+    if (n < 0 || n > max)
+    {
+       PyErr_SET_STRING(PyExc_IndexError, N_("line number out of range"));
+       return NULL;
+    }
+
+    if (InsertBufferLines(self->buf, n + start - 1, lines, &len_change) == FAIL)
+       return NULL;
+
+    if (new_end)
+       *new_end = end + len_change;
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+/* Range object
+ */
+
+static PyTypeObject RangeType;
+static PySequenceMethods RangeAsSeq;
+static PyMappingMethods RangeAsMapping;
+
+typedef struct
+{
+    PyObject_HEAD
+    BufferObject *buf;
+    PyInt start;
+    PyInt end;
+} RangeObject;
+
+    static PyObject *
+RangeNew(buf_T *buf, PyInt start, PyInt end)
+{
+    BufferObject *bufr;
+    RangeObject *self;
+    self = PyObject_GC_New(RangeObject, &RangeType);
+    if (self == NULL)
+       return NULL;
+
+    bufr = (BufferObject *)BufferNew(buf);
+    if (bufr == NULL)
+    {
+       Py_DECREF(self);
+       return NULL;
+    }
+    Py_INCREF(bufr);
+
+    self->buf = bufr;
+    self->start = start;
+    self->end = end;
+
+    return (PyObject *)(self);
+}
+
+    static void
+RangeDestructor(RangeObject *self)
+{
+    PyObject_GC_UnTrack((void *)(self));
+    Py_XDECREF(self->buf);
+    PyObject_GC_Del((void *)(self));
+}
+
+    static int
+RangeTraverse(RangeObject *self, visitproc visit, void *arg)
+{
+    Py_VISIT(((PyObject *)(self->buf)));
+    return 0;
+}
+
+    static int
+RangeClear(RangeObject *self)
+{
+    Py_CLEAR(self->buf);
+    return 0;
+}
+
+    static PyInt
+RangeLength(RangeObject *self)
+{
+    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
+    if (CheckBuffer(self->buf))
+       return -1; /* ??? */
+
+    return (self->end - self->start + 1);
+}
+
+    static PyObject *
+RangeItem(RangeObject *self, PyInt n)
+{
+    return RBItem(self->buf, n, self->start, self->end);
+}
+
+    static PyObject *
+RangeSlice(RangeObject *self, PyInt lo, PyInt hi)
+{
+    return RBSlice(self->buf, lo, hi, self->start, self->end);
+}
+
+static char *RangeAttrs[] = {
+    "start", "end",
+    NULL
+};
+
+    static PyObject *
+RangeDir(PyObject *self)
+{
+    return ObjectDir(self, RangeAttrs);
+}
+
+    static PyObject *
+RangeAppend(RangeObject *self, PyObject *args)
+{
+    return RBAppend(self->buf, args, self->start, self->end, &self->end);
+}
+
+    static PyObject *
+RangeRepr(RangeObject *self)
+{
+    if (self->buf->buf == INVALID_BUFFER_VALUE)
+       return PyString_FromFormat("<range object (for deleted buffer) at %p>",
+                                   (self));
+    else
+    {
+       char *name = (char *)self->buf->buf->b_fname;
+
+       if (name == NULL)
+           name = "";
+
+       return PyString_FromFormat("<range %s (%d:%d)>",
+                                   name, (int)self->start, (int)self->end);
+    }
+}
+
+static struct PyMethodDef RangeMethods[] = {
+    /* name,   function,                       calling,        documentation */
+    {"append", (PyCFunction)RangeAppend,       METH_VARARGS,   "Append data to the Vim range" },
+    {"__dir__",        (PyCFunction)RangeDir,          METH_NOARGS,    ""},
+    { NULL,    NULL,                           0,              NULL}
+};
+
+static PyTypeObject BufferType;
+static PySequenceMethods BufferAsSeq;
+static PyMappingMethods BufferAsMapping;
+
+    static PyObject *
+BufferNew(buf_T *buf)
+{
+    /* We need to handle deletion of buffers underneath us.
+     * If we add a "b_python*_ref" field to the buf_T structure,
+     * then we can get at it in buf_freeall() in vim. We then
+     * need to create only ONE Python object per buffer - if
+     * we try to create a second, just INCREF the existing one
+     * and return it. The (single) Python object referring to
+     * the buffer is stored in "b_python*_ref".
+     * Question: what to do on a buf_freeall(). We'll probably
+     * have to either delete the Python object (DECREF it to
+     * zero - a bad idea, as it leaves dangling refs!) or
+     * set the buf_T * value to an invalid value (-1?), which
+     * means we need checks in all access functions... Bah.
+     *
+     * Python2 and Python3 get different fields and different objects:
+     * b_python_ref and b_python3_ref fields respectively.
+     */
+
+    BufferObject *self;
+
+    if (BUF_PYTHON_REF(buf) != NULL)
+    {
+       self = BUF_PYTHON_REF(buf);
+       Py_INCREF(self);
+    }
+    else
+    {
+       self = PyObject_NEW(BufferObject, &BufferType);
+       if (self == NULL)
+           return NULL;
+       self->buf = buf;
+       BUF_PYTHON_REF(buf) = self;
+    }
+
+    return (PyObject *)(self);
+}
+
+    static void
+BufferDestructor(BufferObject *self)
+{
+    if (self->buf && self->buf != INVALID_BUFFER_VALUE)
+       BUF_PYTHON_REF(self->buf) = NULL;
+
+    DESTRUCTOR_FINISH(self);
+}
+
+    static PyInt
+BufferLength(BufferObject *self)
+{
+    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
+    if (CheckBuffer(self))
+       return -1; /* ??? */
+
+    return (PyInt)(self->buf->b_ml.ml_line_count);
+}
+
+    static PyObject *
+BufferItem(BufferObject *self, PyInt n)
+{
+    return RBItem(self, n, 1, -1);
+}
+
+    static PyObject *
+BufferSlice(BufferObject *self, PyInt lo, PyInt hi)
+{
+    return RBSlice(self, lo, hi, 1, -1);
+}
+
+static char *BufferAttrs[] = {
+    "name", "number", "vars", "options", "valid",
+    NULL
+};
+
+    static PyObject *
+BufferDir(PyObject *self)
+{
+    return ObjectDir(self, BufferAttrs);
+}
+
+    static PyObject *
+BufferAttrValid(BufferObject *self, char *name)
+{
+    PyObject   *ret;
+
+    if (strcmp(name, "valid") != 0)
+       return NULL;
+
+    ret = ((self->buf == INVALID_BUFFER_VALUE) ? Py_False : Py_True);
+    Py_INCREF(ret);
+    return ret;
+}
+
+    static PyObject *
+BufferAttr(BufferObject *self, char *name)
+{
+    if (strcmp(name, "name") == 0)
+       return PyString_FromString((self->buf->b_ffname == NULL
+                                   ? "" : (char *)self->buf->b_ffname));
+    else if (strcmp(name, "number") == 0)
+       return Py_BuildValue(Py_ssize_t_fmt, self->buf->b_fnum);
+    else if (strcmp(name, "vars") == 0)
+       return NEW_DICTIONARY(self->buf->b_vars);
+    else if (strcmp(name, "options") == 0)
+       return OptionsNew(SREQ_BUF, self->buf, (checkfun) CheckBuffer,
+                       (PyObject *) self);
+    else if (strcmp(name, "__members__") == 0)
+       return ObjectDir(NULL, BufferAttrs);
+    else
+       return NULL;
+}
+
+    static int
+BufferSetattr(BufferObject *self, char *name, PyObject *valObject)
+{
+    if (CheckBuffer(self))
+       return -1;
+
+    if (strcmp(name, "name") == 0)
+    {
+       char_u          *val;
+       aco_save_T      aco;
+       int             ren_ret;
+       PyObject        *todecref;
+
+       if (!(val = StringToChars(valObject, &todecref)))
+           return -1;
+
+       VimTryStart();
+       /* Using aucmd_*: autocommands will be executed by rename_buffer */
+       aucmd_prepbuf(&aco, self->buf);
+       ren_ret = rename_buffer(val);
+       aucmd_restbuf(&aco);
+       Py_XDECREF(todecref);
+       if (VimTryEnd())
+           return -1;
+
+       if (ren_ret == FAIL)
+       {
+           PyErr_SET_VIM(N_("failed to rename buffer"));
+           return -1;
+       }
+       return 0;
+    }
+    else
+    {
+       PyErr_SetString(PyExc_AttributeError, name);
+       return -1;
+    }
+}
+
+    static PyObject *
+BufferAppend(BufferObject *self, PyObject *args)
+{
+    return RBAppend(self, args, 1, -1, NULL);
+}
+
+    static PyObject *
+BufferMark(BufferObject *self, PyObject *pmarkObject)
+{
+    pos_T      *posp;
+    char_u     *pmark;
+    char_u     mark;
+    buf_T      *savebuf;
+    PyObject   *todecref;
+
+    if (CheckBuffer(self))
+       return NULL;
+
+    if (!(pmark = StringToChars(pmarkObject, &todecref)))
+       return NULL;
+
+    if (pmark[0] == '\0' || pmark[1] != '\0')
+    {
+       PyErr_SET_STRING(PyExc_ValueError,
+               N_("mark name must be a single character"));
+       Py_XDECREF(todecref);
+       return NULL;
+    }
+
+    mark = *pmark;
+
+    Py_XDECREF(todecref);
+
+    VimTryStart();
+    switch_buffer(&savebuf, self->buf);
+    posp = getmark(mark, FALSE);
+    restore_buffer(savebuf);
+    if (VimTryEnd())
+       return NULL;
+
+    if (posp == NULL)
+    {
+       PyErr_SET_VIM(N_("invalid mark name"));
+       return NULL;
+    }
+
+    if (posp->lnum <= 0)
+    {
+       /* Or raise an error? */
+       Py_INCREF(Py_None);
+       return Py_None;
+    }
+
+    return Py_BuildValue("(ll)", (long)(posp->lnum), (long)(posp->col));
+}
+
+    static PyObject *
+BufferRange(BufferObject *self, PyObject *args)
+{
+    PyInt start;
+    PyInt end;
+
+    if (CheckBuffer(self))
+       return NULL;
+
+    if (!PyArg_ParseTuple(args, "nn", &start, &end))
+       return NULL;
+
+    return RangeNew(self->buf, start, end);
+}
+
+    static PyObject *
+BufferRepr(BufferObject *self)
+{
+    if (self->buf == INVALID_BUFFER_VALUE)
+       return PyString_FromFormat("<buffer object (deleted) at %p>", self);
+    else
+    {
+       char    *name = (char *)self->buf->b_fname;
+
+       if (name == NULL)
+           name = "";
+
+       return PyString_FromFormat("<buffer %s>", name);
+    }
+}
+
+static struct PyMethodDef BufferMethods[] = {
+    /* name,       function,                   calling,        documentation */
+    {"append",     (PyCFunction)BufferAppend,  METH_VARARGS,   "Append data to Vim buffer" },
+    {"mark",       (PyCFunction)BufferMark,    METH_O,         "Return (row,col) representing position of named mark" },
+    {"range",      (PyCFunction)BufferRange,   METH_VARARGS,   "Return a range object which represents the part of the given buffer between line numbers s and e" },
+    {"__dir__",            (PyCFunction)BufferDir,     METH_NOARGS,    ""},
+    { NULL,        NULL,                       0,              NULL}
+};
+
+/*
+ * Buffer list object - Implementation
+ */
+
+static PyTypeObject BufMapType;
+
+typedef struct
+{
+    PyObject_HEAD
+} BufMapObject;
+
+    static PyInt
+BufMapLength(PyObject *self UNUSED)
+{
+    buf_T      *b = firstbuf;
+    PyInt      n = 0;
+
+    while (b)
+    {
+       ++n;
+       b = b->b_next;
+    }
+
+    return n;
+}
+
+    static PyObject *
+BufMapItem(PyObject *self UNUSED, PyObject *keyObject)
+{
+    buf_T      *b;
+    long       bnr;
+
+    if (NumberToLong(keyObject, &bnr, NUMBER_INT|NUMBER_NATURAL))
+       return NULL;
+
+    b = buflist_findnr((int) bnr);
+
+    if (b)
+       return BufferNew(b);
+    else
+    {
+       PyErr_SetObject(PyExc_KeyError, keyObject);
+       return NULL;
+    }
+}
+
+    static void
+BufMapIterDestruct(PyObject *buffer)
+{
+    /* Iteration was stopped before all buffers were processed */
+    if (buffer)
+    {
+       Py_DECREF(buffer);
+    }
+}
+
+    static int
+BufMapIterTraverse(PyObject *buffer, visitproc visit, void *arg)
+{
+    if (buffer)
+       Py_VISIT(buffer);
+    return 0;
+}
+
+    static int
+BufMapIterClear(PyObject **buffer)
+{
+    if (*buffer)
+       Py_CLEAR(*buffer);
+    return 0;
+}
+
+    static PyObject *
+BufMapIterNext(PyObject **buffer)
+{
+    PyObject   *next;
+    PyObject   *ret;
+
+    if (!*buffer)
+       return NULL;
+
+    ret = *buffer;
+
+    if (CheckBuffer((BufferObject *)(ret)))
+    {
+       *buffer = NULL;
+       return NULL;
+    }
+
+    if (!((BufferObject *)(ret))->buf->b_next)
+       next = NULL;
+    else if (!(next = BufferNew(((BufferObject *)(ret))->buf->b_next)))
+       return NULL;
+    *buffer = next;
+    /* Do not increment reference: we no longer hold it (decref), but whoever
+     * on other side will hold (incref). Decref+incref = nothing. */
+    return ret;
+}
+
+    static PyObject *
+BufMapIter(PyObject *self UNUSED)
+{
+    PyObject *buffer;
+
+    buffer = BufferNew(firstbuf);
+    return IterNew(buffer,
+           (destructorfun) BufMapIterDestruct, (nextfun) BufMapIterNext,
+           (traversefun) BufMapIterTraverse, (clearfun) BufMapIterClear);
+}
+
+static PyMappingMethods BufMapAsMapping = {
+    (lenfunc)       BufMapLength,
+    (binaryfunc)    BufMapItem,
+    (objobjargproc) 0,
+};
+
+/* Current items object
+ */
+
+static char *CurrentAttrs[] = {
+    "buffer", "window", "line", "range", "tabpage",
+    NULL
+};
+
+    static PyObject *
+CurrentDir(PyObject *self)
+{
+    return ObjectDir(self, CurrentAttrs);
+}
+
+    static PyObject *
+CurrentGetattr(PyObject *self UNUSED, char *name)
+{
+    if (strcmp(name, "buffer") == 0)
+       return (PyObject *)BufferNew(curbuf);
+    else if (strcmp(name, "window") == 0)
+       return (PyObject *)WindowNew(curwin, curtab);
+    else if (strcmp(name, "tabpage") == 0)
+       return (PyObject *)TabPageNew(curtab);
+    else if (strcmp(name, "line") == 0)
+       return GetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum);
+    else if (strcmp(name, "range") == 0)
+       return RangeNew(curbuf, RangeStart, RangeEnd);
+    else if (strcmp(name, "__members__") == 0)
+       return ObjectDir(NULL, CurrentAttrs);
+    else
+#if PY_MAJOR_VERSION < 3
+       return Py_FindMethod(WindowMethods, self, name);
+#else
+       return NULL;
+#endif
+}
+
+    static int
+CurrentSetattr(PyObject *self UNUSED, char *name, PyObject *valObject)
+{
+    if (strcmp(name, "line") == 0)
+    {
+       if (SetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum, valObject,
+                         NULL) == FAIL)
+           return -1;
+
+       return 0;
+    }
+    else if (strcmp(name, "buffer") == 0)
+    {
+       int count;
+
+       if (valObject->ob_type != &BufferType)
+       {
+           PyErr_FORMAT(PyExc_TypeError,
+                   N_("expected vim.Buffer object, but got %s"),
+                   Py_TYPE_NAME(valObject));
+           return -1;
+       }
+
+       if (CheckBuffer((BufferObject *)(valObject)))
+           return -1;
+       count = ((BufferObject *)(valObject))->buf->b_fnum;
+
+       VimTryStart();
+       if (do_buffer(DOBUF_GOTO, DOBUF_FIRST, FORWARD, count, 0) == FAIL)
+       {
+           if (VimTryEnd())
+               return -1;
+           PyErr_VIM_FORMAT(N_("failed to switch to buffer %d"), count);
+           return -1;
+       }
+
+       return VimTryEnd();
+    }
+    else if (strcmp(name, "window") == 0)
+    {
+       int count;
+
+       if (valObject->ob_type != &WindowType)
+       {
+           PyErr_FORMAT(PyExc_TypeError,
+                   N_("expected vim.Window object, but got %s"),
+                   Py_TYPE_NAME(valObject));
+           return -1;
+       }
+
+       if (CheckWindow((WindowObject *)(valObject)))
+           return -1;
+       count = get_win_number(((WindowObject *)(valObject))->win, firstwin);
+
+       if (!count)
+       {
+           PyErr_SET_STRING(PyExc_ValueError,
+                   N_("failed to find window in the current tab page"));
+           return -1;
+       }
+
+       VimTryStart();
+       win_goto(((WindowObject *)(valObject))->win);
+       if (((WindowObject *)(valObject))->win != curwin)
+       {
+           if (VimTryEnd())
+               return -1;
+           PyErr_SET_STRING(PyExc_RuntimeError,
+                   N_("did not switch to the specified window"));
+           return -1;
+       }
+
+       return VimTryEnd();
+    }
+    else if (strcmp(name, "tabpage") == 0)
+    {
+       if (valObject->ob_type != &TabPageType)
+       {
+           PyErr_FORMAT(PyExc_TypeError,
+                   N_("expected vim.TabPage object, but got %s"),
+                   Py_TYPE_NAME(valObject));
+           return -1;
+       }
+
+       if (CheckTabPage((TabPageObject *)(valObject)))
+           return -1;
+
+       VimTryStart();
+       goto_tabpage_tp(((TabPageObject *)(valObject))->tab, TRUE, TRUE);
+       if (((TabPageObject *)(valObject))->tab != curtab)
+       {
+           if (VimTryEnd())
+               return -1;
+           PyErr_SET_STRING(PyExc_RuntimeError,
+                   N_("did not switch to the specified tab page"));
+           return -1;
+       }
+
+       return VimTryEnd();
+    }
+    else
+    {
+       PyErr_SetString(PyExc_AttributeError, name);
+       return -1;
+    }
+}
+
+static struct PyMethodDef CurrentMethods[] = {
+    /* name,       function,                   calling,        documentation */
+    {"__dir__",            (PyCFunction)CurrentDir,    METH_NOARGS,    ""},
+    { NULL,        NULL,                       0,              NULL}
+};
+
+    static void
+init_range_cmd(exarg_T *eap)
+{
+    RangeStart = eap->line1;
+    RangeEnd = eap->line2;
+}
+
+    static void
+init_range_eval(typval_T *rettv UNUSED)
+{
+    RangeStart = (PyInt) curwin->w_cursor.lnum;
+    RangeEnd = RangeStart;
+}
+
+    static void
+run_cmd(const char *cmd, void *arg UNUSED
+#ifdef PY_CAN_RECURSE
+       , PyGILState_STATE *pygilstate UNUSED
+#endif
+       )
+{
+    PyObject   *run_ret;
+    run_ret = PyRun_String((char *)cmd, Py_file_input, globals, globals);
+    if (run_ret != NULL)
+    {
+       Py_DECREF(run_ret);
+    }
+    else if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_SystemExit))
+    {
+       EMSG2(_(e_py_systemexit), "python");
+       PyErr_Clear();
+    }
+    else
+       PyErr_PrintEx(1);
+}
+
+static const char      *code_hdr = "def " DOPY_FUNC "(line, linenr):\n ";
+static int             code_hdr_len = 30;
+
+    static void
+run_do(const char *cmd, void *arg UNUSED
+#ifdef PY_CAN_RECURSE
+       , PyGILState_STATE *pygilstate
+#endif
+       )
+{
+    PyInt      lnum;
+    size_t     len;
+    char       *code;
+    int                status;
+    PyObject   *pyfunc, *pymain;
+    PyObject   *run_ret;
+
+    if (u_save((linenr_T)RangeStart - 1, (linenr_T)RangeEnd + 1) != OK)
+    {
+       EMSG(_("cannot save undo information"));
+       return;
+    }
+
+    len = code_hdr_len + STRLEN(cmd);
+    code = PyMem_New(char, len + 1);
+    memcpy(code, code_hdr, code_hdr_len);
+    STRCPY(code + code_hdr_len, cmd);
+    run_ret = PyRun_String(code, Py_file_input, globals, globals);
+    status = -1;
+    if (run_ret != NULL)
+    {
+       status = 0;
+       Py_DECREF(run_ret);
+    }
+    else if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_SystemExit))
+    {
+       PyMem_Free(code);
+       EMSG2(_(e_py_systemexit), "python");
+       PyErr_Clear();
+       return;
+    }
+    else
+       PyErr_PrintEx(1);
+
+    PyMem_Free(code);
+
+    if (status)
+    {
+       EMSG(_("failed to run the code"));
+       return;
+    }
+
+    status = 0;
+    pymain = PyImport_AddModule("__main__");
+    pyfunc = PyObject_GetAttrString(pymain, DOPY_FUNC);
+#ifdef PY_CAN_RECURSE
+    PyGILState_Release(*pygilstate);
+#endif
+
+    for (lnum = RangeStart; lnum <= RangeEnd; ++lnum)
+    {
+       PyObject        *line;
+       PyObject        *linenr;
+       PyObject        *ret;
+
+#ifdef PY_CAN_RECURSE
+       *pygilstate = PyGILState_Ensure();
+#endif
+       if (!(line = GetBufferLine(curbuf, lnum)))
+           goto err;
+       if (!(linenr = PyInt_FromLong((long) lnum)))
+       {
+           Py_DECREF(line);
+           goto err;
+       }
+       ret = PyObject_CallFunctionObjArgs(pyfunc, line, linenr, NULL);
+       Py_DECREF(line);
+       Py_DECREF(linenr);
+       if (!ret)
+           goto err;
+
+       if (ret != Py_None)
+           if (SetBufferLine(curbuf, lnum, ret, NULL) == FAIL)
+               goto err;
+
+       Py_XDECREF(ret);
+       PythonIO_Flush();
+#ifdef PY_CAN_RECURSE
+       PyGILState_Release(*pygilstate);
+#endif
+    }
+    goto out;
+err:
+#ifdef PY_CAN_RECURSE
+    *pygilstate = PyGILState_Ensure();
+#endif
+    PyErr_PrintEx(0);
+    PythonIO_Flush();
+    status = 1;
+out:
+#ifdef PY_CAN_RECURSE
+    if (!status)
+       *pygilstate = PyGILState_Ensure();
+#endif
+    Py_DECREF(pyfunc);
+    PyObject_SetAttrString(pymain, DOPY_FUNC, NULL);
+    if (status)
+       return;
+    check_cursor();
+    update_curbuf(NOT_VALID);
+}
+
+    static void
+run_eval(const char *cmd, typval_T *rettv
+#ifdef PY_CAN_RECURSE
+       , PyGILState_STATE *pygilstate UNUSED
+#endif
+       )
+{
+    PyObject   *run_ret;
+
+    run_ret = PyRun_String((char *)cmd, Py_eval_input, globals, globals);
+    if (run_ret == NULL)
+    {
+       if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_SystemExit))
+       {
+           EMSG2(_(e_py_systemexit), "python");
+           PyErr_Clear();
+       }
+       else
+       {
+           if (PyErr_Occurred() && !msg_silent)
+               PyErr_PrintEx(0);
+           EMSG(_("E858: Eval did not return a valid python object"));
+       }
+    }
+    else
+    {
+       if (ConvertFromPyObject(run_ret, rettv) == -1)
+           EMSG(_("E859: Failed to convert returned python object to vim value"));
+       Py_DECREF(run_ret);
+    }
+    PyErr_Clear();
+}
+
+    static void
+set_ref_in_py(const int copyID)
+{
+    pylinkedlist_T     *cur;
+    dict_T     *dd;
+    list_T     *ll;
+
+    if (lastdict != NULL)
+       for(cur = lastdict ; cur != NULL ; cur = cur->pll_prev)
+       {
+           dd = ((DictionaryObject *) (cur->pll_obj))->dict;
+           if (dd->dv_copyID != copyID)
+           {
+               dd->dv_copyID = copyID;
+               set_ref_in_ht(&dd->dv_hashtab, copyID);
+           }
+       }
+
+    if (lastlist != NULL)
+       for(cur = lastlist ; cur != NULL ; cur = cur->pll_prev)
+       {
+           ll = ((ListObject *) (cur->pll_obj))->list;
+           if (ll->lv_copyID != copyID)
+           {
+               ll->lv_copyID = copyID;
+               set_ref_in_list(ll, copyID);
+           }
+       }
+}
+
+    static int
+set_string_copy(char_u *str, typval_T *tv)
+{
+    tv->vval.v_string = vim_strsave(str);
+    if (tv->vval.v_string == NULL)
+    {
+       PyErr_NoMemory();
+       return -1;
+    }
+    return 0;
+}
+
+    static int
+pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
+{
+    dict_T     *dict;
+    char_u     *key;
+    dictitem_T *di;
+    PyObject   *keyObject;
+    PyObject   *valObject;
+    Py_ssize_t iter = 0;
+
+    if (!(dict = py_dict_alloc()))
+       return -1;
+
+    tv->v_type = VAR_DICT;
+    tv->vval.v_dict = dict;
+
+    while (PyDict_Next(obj, &iter, &keyObject, &valObject))
+    {
+       PyObject        *todecref = NULL;
+
+       if (keyObject == NULL || valObject == NULL)
+       {
+           dict_unref(dict);
+           return -1;
+       }
+
+       if (!(key = StringToChars(keyObject, &todecref)))
+       {
+           dict_unref(dict);
+           return -1;
+       }
+
+       if (*key == NUL)
        {
-           Py_DECREF(str);
-           Py_DECREF(list);
-           return NULL;
+           dict_unref(dict);
+           Py_XDECREF(todecref);
+           RAISE_NO_EMPTY_KEYS;
+           return -1;
        }
-    }
 
-    /* The ownership of the Python list is passed to the caller (ie,
-     * the caller should Py_DECREF() the object when it is finished
-     * with it).
-     */
+       di = dictitem_alloc(key);
 
-    return list;
-}
+       Py_XDECREF(todecref);
 
-/*
- * Check if deleting lines made the cursor position invalid.
- * Changed the lines from "lo" to "hi" and added "extra" lines (negative if
- * deleted).
- */
-    static void
-py_fix_cursor(linenr_T lo, linenr_T hi, linenr_T extra)
-{
-    if (curwin->w_cursor.lnum >= lo)
-    {
-       /* Adjust the cursor position if it's in/after the changed
-        * lines. */
-       if (curwin->w_cursor.lnum >= hi)
+       if (di == NULL)
        {
-           curwin->w_cursor.lnum += extra;
-           check_cursor_col();
+           PyErr_NoMemory();
+           dict_unref(dict);
+           return -1;
        }
-       else if (extra < 0)
+       di->di_tv.v_lock = 0;
+
+       if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
        {
-           curwin->w_cursor.lnum = lo;
-           check_cursor();
+           vim_free(di);
+           dict_unref(dict);
+           return -1;
+       }
+
+       if (dict_add(dict, di) == FAIL)
+       {
+           RAISE_KEY_ADD_FAIL(di->di_key);
+           clear_tv(&di->di_tv);
+           vim_free(di);
+           dict_unref(dict);
+           return -1;
        }
-       else
-           check_cursor_col();
-       changed_cline_bef_curs();
     }
-    invalidate_botline();
+
+    --dict->dv_refcount;
+    return 0;
 }
 
-/* Replace a line in the specified buffer. The line number is
- * in Vim format (1-based). The replacement line is given as
- * a Python string object. The object is checked for validity
- * and correct format. Errors are returned as a value of FAIL.
- * The return value is OK on success.
- * If OK is returned and len_change is not NULL, *len_change
- * is set to the change in the buffer length.
- */
     static int
-SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
+pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
 {
-    /* First of all, we check the thpe of the supplied Python object.
-     * There are three cases:
-     *   1. NULL, or None - this is a deletion.
-     *   2. A string      - this is a replacement.
-     *   3. Anything else - this is an error.
-     */
-    if (line == Py_None || line == NULL)
+    dict_T     *dict;
+    char_u     *key;
+    dictitem_T *di;
+    PyObject   *list;
+    PyObject   *iterator;
+    PyObject   *keyObject;
+    PyObject   *valObject;
+
+    if (!(dict = py_dict_alloc()))
+       return -1;
+
+    tv->v_type = VAR_DICT;
+    tv->vval.v_dict = dict;
+
+    if (!(list = PyMapping_Keys(obj)))
     {
-       buf_T *savebuf = curbuf;
+       dict_unref(dict);
+       return -1;
+    }
 
-       PyErr_Clear();
-       curbuf = buf;
+    if (!(iterator = PyObject_GetIter(list)))
+    {
+       dict_unref(dict);
+       Py_DECREF(list);
+       return -1;
+    }
+    Py_DECREF(list);
 
-       if (u_savedel((linenr_T)n, 1L) == FAIL)
-           PyErr_SetVim(_("cannot save undo information"));
-       else if (ml_delete((linenr_T)n, FALSE) == FAIL)
-           PyErr_SetVim(_("cannot delete line"));
-       else
+    while ((keyObject = PyIter_Next(iterator)))
+    {
+       PyObject        *todecref;
+
+       if (!(key = StringToChars(keyObject, &todecref)))
        {
-           if (buf == curwin->w_buffer)
-               py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
-           deleted_lines_mark((linenr_T)n, 1L);
+           Py_DECREF(keyObject);
+           Py_DECREF(iterator);
+           dict_unref(dict);
+           return -1;
        }
 
-       curbuf = savebuf;
-
-       if (PyErr_Occurred() || VimErrorCheck())
-           return FAIL;
-
-       if (len_change)
-           *len_change = -1;
+       if (*key == NUL)
+       {
+           Py_DECREF(keyObject);
+           Py_DECREF(iterator);
+           Py_XDECREF(todecref);
+           dict_unref(dict);
+           RAISE_NO_EMPTY_KEYS;
+           return -1;
+       }
 
-       return OK;
-    }
-    else if (PyString_Check(line))
-    {
-       char *save = StringToLine(line);
-       buf_T *savebuf = curbuf;
+       if (!(valObject = PyObject_GetItem(obj, keyObject)))
+       {
+           Py_DECREF(keyObject);
+           Py_DECREF(iterator);
+           Py_XDECREF(todecref);
+           dict_unref(dict);
+           return -1;
+       }
 
-       if (save == NULL)
-           return FAIL;
+       di = dictitem_alloc(key);
 
-       /* We do not need to free "save" if ml_replace() consumes it. */
-       PyErr_Clear();
-       curbuf = buf;
+       Py_DECREF(keyObject);
+       Py_XDECREF(todecref);
 
-       if (u_savesub((linenr_T)n) == FAIL)
+       if (di == NULL)
        {
-           PyErr_SetVim(_("cannot save undo information"));
-           vim_free(save);
+           Py_DECREF(iterator);
+           Py_DECREF(valObject);
+           dict_unref(dict);
+           PyErr_NoMemory();
+           return -1;
        }
-       else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
+       di->di_tv.v_lock = 0;
+
+       if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
        {
-           PyErr_SetVim(_("cannot replace line"));
-           vim_free(save);
+           Py_DECREF(iterator);
+           Py_DECREF(valObject);
+           vim_free(di);
+           dict_unref(dict);
+           return -1;
        }
-       else
-           changed_bytes((linenr_T)n, 0);
 
-       curbuf = savebuf;
+       Py_DECREF(valObject);
 
-       /* Check that the cursor is not beyond the end of the line now. */
-       if (buf == curwin->w_buffer)
-           check_cursor_col();
+       if (dict_add(dict, di) == FAIL)
+       {
+           RAISE_KEY_ADD_FAIL(di->di_key);
+           Py_DECREF(iterator);
+           dictitem_free(di);
+           dict_unref(dict);
+           return -1;
+       }
+    }
+    Py_DECREF(iterator);
+    --dict->dv_refcount;
+    return 0;
+}
 
-       if (PyErr_Occurred() || VimErrorCheck())
-           return FAIL;
+    static int
+pyseq_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
+{
+    list_T     *l;
 
-       if (len_change)
-           *len_change = 0;
+    if (!(l = py_list_alloc()))
+       return -1;
 
-       return OK;
-    }
-    else
+    tv->v_type = VAR_LIST;
+    tv->vval.v_list = l;
+
+    if (list_py_concat(l, obj, lookup_dict) == -1)
     {
-       PyErr_BadArgument();
-       return FAIL;
+       list_unref(l);
+       return -1;
     }
+
+    --l->lv_refcount;
+    return 0;
 }
 
+typedef int (*pytotvfunc)(PyObject *, typval_T *, PyObject *);
 
-/* Insert a number of lines into the specified buffer after the specifed line.
- * The line number is in Vim format (1-based). The lines to be inserted are
- * given as a Python list of string objects or as a single string. The lines
- * to be added are checked for validity and correct format. Errors are
- * returned as a value of FAIL.  The return value is OK on success.
- * If OK is returned and len_change is not NULL, *len_change
- * is set to the change in the buffer length.
- */
     static int
-InsertBufferLines(buf_T *buf, PyInt n, PyObject *lines, PyInt *len_change)
+convert_dl(PyObject *obj, typval_T *tv,
+                                   pytotvfunc py_to_tv, PyObject *lookup_dict)
 {
-    /* First of all, we check the type of the supplied Python object.
-     * It must be a string or a list, or the call is in error.
-     */
-    if (PyString_Check(lines))
-    {
-       char    *str = StringToLine(lines);
-       buf_T   *savebuf;
+    PyObject   *capsule;
+    char       hexBuf[sizeof(void *) * 2 + 3];
 
-       if (str == NULL)
-           return FAIL;
+    sprintf(hexBuf, "%p", obj);
 
-       savebuf = curbuf;
+# ifdef PY_USE_CAPSULE
+    capsule = PyDict_GetItemString(lookup_dict, hexBuf);
+# else
+    capsule = (PyObject *)PyDict_GetItemString(lookup_dict, hexBuf);
+# endif
+    if (capsule == NULL)
+    {
+# ifdef PY_USE_CAPSULE
+       capsule = PyCapsule_New(tv, NULL, NULL);
+# else
+       capsule = PyCObject_FromVoidPtr(tv, NULL);
+# endif
+       if (PyDict_SetItemString(lookup_dict, hexBuf, capsule))
+       {
+           Py_DECREF(capsule);
+           tv->v_type = VAR_UNKNOWN;
+           return -1;
+       }
 
-       PyErr_Clear();
-       curbuf = buf;
+       Py_DECREF(capsule);
 
-       if (u_save((linenr_T)n, (linenr_T)(n+1)) == FAIL)
-           PyErr_SetVim(_("cannot save undo information"));
-       else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL)
-           PyErr_SetVim(_("cannot insert line"));
-       else
-           appended_lines_mark((linenr_T)n, 1L);
+       if (py_to_tv(obj, tv, lookup_dict) == -1)
+       {
+           tv->v_type = VAR_UNKNOWN;
+           return -1;
+       }
+       /* As we are not using copy_tv which increments reference count we must
+        * do it ourself. */
+       switch(tv->v_type)
+       {
+           case VAR_DICT: ++tv->vval.v_dict->dv_refcount; break;
+           case VAR_LIST: ++tv->vval.v_list->lv_refcount; break;
+       }
+    }
+    else
+    {
+       typval_T        *v;
 
-       vim_free(str);
-       curbuf = savebuf;
-       update_screen(VALID);
+# ifdef PY_USE_CAPSULE
+       v = PyCapsule_GetPointer(capsule, NULL);
+# else
+       v = PyCObject_AsVoidPtr(capsule);
+# endif
+       copy_tv(v, tv);
+    }
+    return 0;
+}
 
-       if (PyErr_Occurred() || VimErrorCheck())
-           return FAIL;
+    static int
+ConvertFromPyMapping(PyObject *obj, typval_T *tv)
+{
+    PyObject   *lookup_dict;
+    int                ret;
 
-       if (len_change)
-           *len_change = 1;
+    if (!(lookup_dict = PyDict_New()))
+       return -1;
 
-       return OK;
+    if (PyType_IsSubtype(obj->ob_type, &DictionaryType))
+    {
+       tv->v_type = VAR_DICT;
+       tv->vval.v_dict = (((DictionaryObject *)(obj))->dict);
+       ++tv->vval.v_dict->dv_refcount;
+       ret = 0;
     }
-    else if (PyList_Check(lines))
+    else if (PyDict_Check(obj))
+       ret = convert_dl(obj, tv, pydict_to_tv, lookup_dict);
+    else if (PyMapping_Check(obj))
+       ret = convert_dl(obj, tv, pymap_to_tv, lookup_dict);
+    else
     {
-       PyInt   i;
-       PyInt   size = PyList_Size(lines);
-       char    **array;
-       buf_T   *savebuf;
-
-       array = (char **)alloc((unsigned)(size * sizeof(char *)));
-       if (array == NULL)
-       {
-           PyErr_NoMemory();
-           return FAIL;
-       }
-
-       for (i = 0; i < size; ++i)
-       {
-           PyObject *line = PyList_GetItem(lines, i);
-           array[i] = StringToLine(line);
+       PyErr_FORMAT(PyExc_TypeError,
+               N_("unable to convert %s to vim dictionary"),
+               Py_TYPE_NAME(obj));
+       ret = -1;
+    }
+    Py_DECREF(lookup_dict);
+    return ret;
+}
 
-           if (array[i] == NULL)
-           {
-               while (i)
-                   vim_free(array[--i]);
-               vim_free(array);
-               return FAIL;
-           }
-       }
+    static int
+ConvertFromPyObject(PyObject *obj, typval_T *tv)
+{
+    PyObject   *lookup_dict;
+    int                ret;
 
-       savebuf = curbuf;
+    if (!(lookup_dict = PyDict_New()))
+       return -1;
+    ret = _ConvertFromPyObject(obj, tv, lookup_dict);
+    Py_DECREF(lookup_dict);
+    return ret;
+}
 
-       PyErr_Clear();
-       curbuf = buf;
+    static int
+_ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
+{
+    if (PyType_IsSubtype(obj->ob_type, &DictionaryType))
+    {
+       tv->v_type = VAR_DICT;
+       tv->vval.v_dict = (((DictionaryObject *)(obj))->dict);
+       ++tv->vval.v_dict->dv_refcount;
+    }
+    else if (PyType_IsSubtype(obj->ob_type, &ListType))
+    {
+       tv->v_type = VAR_LIST;
+       tv->vval.v_list = (((ListObject *)(obj))->list);
+       ++tv->vval.v_list->lv_refcount;
+    }
+    else if (PyType_IsSubtype(obj->ob_type, &FunctionType))
+    {
+       if (set_string_copy(((FunctionObject *) (obj))->name, tv) == -1)
+           return -1;
 
-       if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL)
-           PyErr_SetVim(_("cannot save undo information"));
-       else
-       {
-           for (i = 0; i < size; ++i)
-           {
-               if (ml_append((linenr_T)(n + i),
-                                       (char_u *)array[i], 0, FALSE) == FAIL)
-               {
-                   PyErr_SetVim(_("cannot insert line"));
+       tv->v_type = VAR_FUNC;
+       func_ref(tv->vval.v_string);
+    }
+    else if (PyBytes_Check(obj))
+    {
+       char_u  *str;
 
-                   /* Free the rest of the lines */
-                   while (i < size)
-                       vim_free(array[i++]);
+       if (PyBytes_AsStringAndSize(obj, (char **) &str, NULL) == -1)
+           return -1;
+       if (str == NULL)
+           return -1;
 
-                   break;
-               }
-               vim_free(array[i]);
-           }
-           if (i > 0)
-               appended_lines_mark((linenr_T)n, (long)i);
-       }
+       if (set_string_copy(str, tv) == -1)
+           return -1;
 
-       /* Free the array of lines. All of its contents have now
-        * been freed.
-        */
-       vim_free(array);
+       tv->v_type = VAR_STRING;
+    }
+    else if (PyUnicode_Check(obj))
+    {
+       PyObject        *bytes;
+       char_u  *str;
 
-       curbuf = savebuf;
-       update_screen(VALID);
+       bytes = PyUnicode_AsEncodedString(obj, ENC_OPT, NULL);
+       if (bytes == NULL)
+           return -1;
 
-       if (PyErr_Occurred() || VimErrorCheck())
-           return FAIL;
+       if(PyBytes_AsStringAndSize(bytes, (char **) &str, NULL) == -1)
+           return -1;
+       if (str == NULL)
+           return -1;
 
-       if (len_change)
-           *len_change = size;
+       if (set_string_copy(str, tv))
+       {
+           Py_XDECREF(bytes);
+           return -1;
+       }
+       Py_XDECREF(bytes);
 
-       return OK;
+       tv->v_type = VAR_STRING;
     }
-    else
+#if PY_MAJOR_VERSION < 3
+    else if (PyInt_Check(obj))
+    {
+       tv->v_type = VAR_NUMBER;
+       tv->vval.v_number = (varnumber_T) PyInt_AsLong(obj);
+       if (PyErr_Occurred())
+           return -1;
+    }
+#endif
+    else if (PyLong_Check(obj))
+    {
+       tv->v_type = VAR_NUMBER;
+       tv->vval.v_number = (varnumber_T) PyLong_AsLong(obj);
+       if (PyErr_Occurred())
+           return -1;
+    }
+    else if (PyDict_Check(obj))
+       return convert_dl(obj, tv, pydict_to_tv, lookup_dict);
+#ifdef FEAT_FLOAT
+    else if (PyFloat_Check(obj))
     {
-       PyErr_BadArgument();
-       return FAIL;
+       tv->v_type = VAR_FLOAT;
+       tv->vval.v_float = (float_T) PyFloat_AsDouble(obj);
     }
-}
+#endif
+    else if (PyObject_HasAttrString(obj, "keys"))
+       return convert_dl(obj, tv, pymap_to_tv, lookup_dict);
+    /* PyObject_GetIter can create built-in iterator for any sequence object */
+    else if (PyIter_Check(obj) || PySequence_Check(obj))
+       return convert_dl(obj, tv, pyseq_to_tv, lookup_dict);
+    else if (PyMapping_Check(obj))
+       return convert_dl(obj, tv, pymap_to_tv, lookup_dict);
+    else if (PyNumber_Check(obj))
+    {
+       PyObject        *num;
 
-/*
- * Common routines for buffers and line ranges
- * -------------------------------------------
- */
+       if (!(num = PyNumber_Long(obj)))
+           return -1;
 
-    static int
-CheckBuffer(BufferObject *this)
-{
-    if (this->buf == INVALID_BUFFER_VALUE)
+       tv->v_type = VAR_NUMBER;
+       tv->vval.v_number = (varnumber_T) PyLong_AsLong(num);
+
+       Py_DECREF(num);
+    }
+    else
     {
-       PyErr_SetVim(_("attempt to refer to deleted buffer"));
+       PyErr_FORMAT(PyExc_TypeError,
+               N_("unable to convert %s to vim structure"),
+               Py_TYPE_NAME(obj));
        return -1;
     }
-
     return 0;
 }
 
     static PyObject *
-RBItem(BufferObject *self, PyInt n, PyInt start, PyInt end)
+ConvertToPyObject(typval_T *tv)
 {
-    if (CheckBuffer(self))
-       return NULL;
-
-    if (n < 0 || n > end - start)
+    if (tv == NULL)
     {
-       PyErr_SetString(PyExc_IndexError, _("line number out of range"));
+       PyErr_SET_VIM(N_("internal error: NULL reference passed"));
        return NULL;
     }
-
-    return GetBufferLine(self->buf, n+start);
+    switch (tv->v_type)
+    {
+       case VAR_STRING:
+           return PyBytes_FromString(tv->vval.v_string == NULL
+                                           ? "" : (char *)tv->vval.v_string);
+       case VAR_NUMBER:
+           return PyLong_FromLong((long) tv->vval.v_number);
+#ifdef FEAT_FLOAT
+       case VAR_FLOAT:
+           return PyFloat_FromDouble((double) tv->vval.v_float);
+#endif
+       case VAR_LIST:
+           return NEW_LIST(tv->vval.v_list);
+       case VAR_DICT:
+           return NEW_DICTIONARY(tv->vval.v_dict);
+       case VAR_FUNC:
+           return NEW_FUNCTION(tv->vval.v_string == NULL
+                                         ? (char_u *)"" : tv->vval.v_string);
+       case VAR_UNKNOWN:
+           Py_INCREF(Py_None);
+           return Py_None;
+       default:
+           PyErr_SET_VIM(N_("internal error: invalid value type"));
+           return NULL;
+    }
 }
 
-    static PyObject *
-RBSlice(BufferObject *self, PyInt lo, PyInt hi, PyInt start, PyInt end)
+typedef struct
 {
-    PyInt size;
+    PyObject_HEAD
+} CurrentObject;
+static PyTypeObject CurrentType;
 
-    if (CheckBuffer(self))
-       return NULL;
+    static void
+init_structs(void)
+{
+    vim_memset(&OutputType, 0, sizeof(OutputType));
+    OutputType.tp_name = "vim.message";
+    OutputType.tp_basicsize = sizeof(OutputObject);
+    OutputType.tp_flags = Py_TPFLAGS_DEFAULT;
+    OutputType.tp_doc = "vim message object";
+    OutputType.tp_methods = OutputMethods;
+#if PY_MAJOR_VERSION >= 3
+    OutputType.tp_getattro = (getattrofunc)OutputGetattro;
+    OutputType.tp_setattro = (setattrofunc)OutputSetattro;
+    OutputType.tp_alloc = call_PyType_GenericAlloc;
+    OutputType.tp_new = call_PyType_GenericNew;
+    OutputType.tp_free = call_PyObject_Free;
+#else
+    OutputType.tp_getattr = (getattrfunc)OutputGetattr;
+    OutputType.tp_setattr = (setattrfunc)OutputSetattr;
+#endif
 
-    size = end - start + 1;
+    vim_memset(&IterType, 0, sizeof(IterType));
+    IterType.tp_name = "vim.iter";
+    IterType.tp_basicsize = sizeof(IterObject);
+    IterType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
+    IterType.tp_doc = "generic iterator object";
+    IterType.tp_iter = (getiterfunc)IterIter;
+    IterType.tp_iternext = (iternextfunc)IterNext;
+    IterType.tp_dealloc = (destructor)IterDestructor;
+    IterType.tp_traverse = (traverseproc)IterTraverse;
+    IterType.tp_clear = (inquiry)IterClear;
+
+    vim_memset(&BufferType, 0, sizeof(BufferType));
+    BufferType.tp_name = "vim.buffer";
+    BufferType.tp_basicsize = sizeof(BufferType);
+    BufferType.tp_dealloc = (destructor)BufferDestructor;
+    BufferType.tp_repr = (reprfunc)BufferRepr;
+    BufferType.tp_as_sequence = &BufferAsSeq;
+    BufferType.tp_as_mapping = &BufferAsMapping;
+    BufferType.tp_flags = Py_TPFLAGS_DEFAULT;
+    BufferType.tp_doc = "vim buffer object";
+    BufferType.tp_methods = BufferMethods;
+#if PY_MAJOR_VERSION >= 3
+    BufferType.tp_getattro = (getattrofunc)BufferGetattro;
+    BufferType.tp_setattro = (setattrofunc)BufferSetattro;
+    BufferType.tp_alloc = call_PyType_GenericAlloc;
+    BufferType.tp_new = call_PyType_GenericNew;
+    BufferType.tp_free = call_PyObject_Free;
+#else
+    BufferType.tp_getattr = (getattrfunc)BufferGetattr;
+    BufferType.tp_setattr = (setattrfunc)BufferSetattr;
+#endif
 
-    if (lo < 0)
-       lo = 0;
-    else if (lo > size)
-       lo = size;
-    if (hi < 0)
-       hi = 0;
-    if (hi < lo)
-       hi = lo;
-    else if (hi > size)
-       hi = size;
+    vim_memset(&WindowType, 0, sizeof(WindowType));
+    WindowType.tp_name = "vim.window";
+    WindowType.tp_basicsize = sizeof(WindowObject);
+    WindowType.tp_dealloc = (destructor)WindowDestructor;
+    WindowType.tp_repr = (reprfunc)WindowRepr;
+    WindowType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
+    WindowType.tp_doc = "vim Window object";
+    WindowType.tp_methods = WindowMethods;
+    WindowType.tp_traverse = (traverseproc)WindowTraverse;
+    WindowType.tp_clear = (inquiry)WindowClear;
+#if PY_MAJOR_VERSION >= 3
+    WindowType.tp_getattro = (getattrofunc)WindowGetattro;
+    WindowType.tp_setattro = (setattrofunc)WindowSetattro;
+    WindowType.tp_alloc = call_PyType_GenericAlloc;
+    WindowType.tp_new = call_PyType_GenericNew;
+    WindowType.tp_free = call_PyObject_Free;
+#else
+    WindowType.tp_getattr = (getattrfunc)WindowGetattr;
+    WindowType.tp_setattr = (setattrfunc)WindowSetattr;
+#endif
 
-    return GetBufferLineList(self->buf, lo+start, hi+start);
-}
+    vim_memset(&TabPageType, 0, sizeof(TabPageType));
+    TabPageType.tp_name = "vim.tabpage";
+    TabPageType.tp_basicsize = sizeof(TabPageObject);
+    TabPageType.tp_dealloc = (destructor)TabPageDestructor;
+    TabPageType.tp_repr = (reprfunc)TabPageRepr;
+    TabPageType.tp_flags = Py_TPFLAGS_DEFAULT;
+    TabPageType.tp_doc = "vim tab page object";
+    TabPageType.tp_methods = TabPageMethods;
+#if PY_MAJOR_VERSION >= 3
+    TabPageType.tp_getattro = (getattrofunc)TabPageGetattro;
+    TabPageType.tp_alloc = call_PyType_GenericAlloc;
+    TabPageType.tp_new = call_PyType_GenericNew;
+    TabPageType.tp_free = call_PyObject_Free;
+#else
+    TabPageType.tp_getattr = (getattrfunc)TabPageGetattr;
+#endif
 
-    static PyInt
-RBAsItem(BufferObject *self, PyInt n, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
-{
-    PyInt len_change;
+    vim_memset(&BufMapType, 0, sizeof(BufMapType));
+    BufMapType.tp_name = "vim.bufferlist";
+    BufMapType.tp_basicsize = sizeof(BufMapObject);
+    BufMapType.tp_as_mapping = &BufMapAsMapping;
+    BufMapType.tp_flags = Py_TPFLAGS_DEFAULT;
+    BufMapType.tp_iter = BufMapIter;
+    BufferType.tp_doc = "vim buffer list";
+
+    vim_memset(&WinListType, 0, sizeof(WinListType));
+    WinListType.tp_name = "vim.windowlist";
+    WinListType.tp_basicsize = sizeof(WinListType);
+    WinListType.tp_as_sequence = &WinListAsSeq;
+    WinListType.tp_flags = Py_TPFLAGS_DEFAULT;
+    WinListType.tp_doc = "vim window list";
+    WinListType.tp_dealloc = (destructor)WinListDestructor;
+
+    vim_memset(&TabListType, 0, sizeof(TabListType));
+    TabListType.tp_name = "vim.tabpagelist";
+    TabListType.tp_basicsize = sizeof(TabListType);
+    TabListType.tp_as_sequence = &TabListAsSeq;
+    TabListType.tp_flags = Py_TPFLAGS_DEFAULT;
+    TabListType.tp_doc = "vim tab page list";
+
+    vim_memset(&RangeType, 0, sizeof(RangeType));
+    RangeType.tp_name = "vim.range";
+    RangeType.tp_basicsize = sizeof(RangeObject);
+    RangeType.tp_dealloc = (destructor)RangeDestructor;
+    RangeType.tp_repr = (reprfunc)RangeRepr;
+    RangeType.tp_as_sequence = &RangeAsSeq;
+    RangeType.tp_as_mapping = &RangeAsMapping;
+    RangeType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
+    RangeType.tp_doc = "vim Range object";
+    RangeType.tp_methods = RangeMethods;
+    RangeType.tp_traverse = (traverseproc)RangeTraverse;
+    RangeType.tp_clear = (inquiry)RangeClear;
+#if PY_MAJOR_VERSION >= 3
+    RangeType.tp_getattro = (getattrofunc)RangeGetattro;
+    RangeType.tp_alloc = call_PyType_GenericAlloc;
+    RangeType.tp_new = call_PyType_GenericNew;
+    RangeType.tp_free = call_PyObject_Free;
+#else
+    RangeType.tp_getattr = (getattrfunc)RangeGetattr;
+#endif
 
-    if (CheckBuffer(self))
-       return -1;
+    vim_memset(&CurrentType, 0, sizeof(CurrentType));
+    CurrentType.tp_name = "vim.currentdata";
+    CurrentType.tp_basicsize = sizeof(CurrentObject);
+    CurrentType.tp_flags = Py_TPFLAGS_DEFAULT;
+    CurrentType.tp_doc = "vim current object";
+    CurrentType.tp_methods = CurrentMethods;
+#if PY_MAJOR_VERSION >= 3
+    CurrentType.tp_getattro = (getattrofunc)CurrentGetattro;
+    CurrentType.tp_setattro = (setattrofunc)CurrentSetattro;
+#else
+    CurrentType.tp_getattr = (getattrfunc)CurrentGetattr;
+    CurrentType.tp_setattr = (setattrfunc)CurrentSetattr;
+#endif
 
-    if (n < 0 || n > end - start)
-    {
-       PyErr_SetString(PyExc_IndexError, _("line number out of range"));
-       return -1;
-    }
+    vim_memset(&DictionaryType, 0, sizeof(DictionaryType));
+    DictionaryType.tp_name = "vim.dictionary";
+    DictionaryType.tp_basicsize = sizeof(DictionaryObject);
+    DictionaryType.tp_dealloc = (destructor)DictionaryDestructor;
+    DictionaryType.tp_as_sequence = &DictionaryAsSeq;
+    DictionaryType.tp_as_mapping = &DictionaryAsMapping;
+    DictionaryType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
+    DictionaryType.tp_doc = "dictionary pushing modifications to vim structure";
+    DictionaryType.tp_methods = DictionaryMethods;
+    DictionaryType.tp_iter = (getiterfunc)DictionaryIter;
+    DictionaryType.tp_new = (newfunc)DictionaryConstructor;
+    DictionaryType.tp_alloc = (allocfunc)PyType_GenericAlloc;
+#if PY_MAJOR_VERSION >= 3
+    DictionaryType.tp_getattro = (getattrofunc)DictionaryGetattro;
+    DictionaryType.tp_setattro = (setattrofunc)DictionarySetattro;
+#else
+    DictionaryType.tp_getattr = (getattrfunc)DictionaryGetattr;
+    DictionaryType.tp_setattr = (setattrfunc)DictionarySetattr;
+#endif
 
-    if (SetBufferLine(self->buf, n+start, val, &len_change) == FAIL)
-       return -1;
+    vim_memset(&ListType, 0, sizeof(ListType));
+    ListType.tp_name = "vim.list";
+    ListType.tp_dealloc = (destructor)ListDestructor;
+    ListType.tp_basicsize = sizeof(ListObject);
+    ListType.tp_as_sequence = &ListAsSeq;
+    ListType.tp_as_mapping = &ListAsMapping;
+    ListType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
+    ListType.tp_doc = "list pushing modifications to vim structure";
+    ListType.tp_methods = ListMethods;
+    ListType.tp_iter = (getiterfunc)ListIter;
+    ListType.tp_new = (newfunc)ListConstructor;
+    ListType.tp_alloc = (allocfunc)PyType_GenericAlloc;
+#if PY_MAJOR_VERSION >= 3
+    ListType.tp_getattro = (getattrofunc)ListGetattro;
+    ListType.tp_setattro = (setattrofunc)ListSetattro;
+#else
+    ListType.tp_getattr = (getattrfunc)ListGetattr;
+    ListType.tp_setattr = (setattrfunc)ListSetattr;
+#endif
 
-    if (new_end)
-       *new_end = end + len_change;
+    vim_memset(&FunctionType, 0, sizeof(FunctionType));
+    FunctionType.tp_name = "vim.function";
+    FunctionType.tp_basicsize = sizeof(FunctionObject);
+    FunctionType.tp_dealloc = (destructor)FunctionDestructor;
+    FunctionType.tp_call = (ternaryfunc)FunctionCall;
+    FunctionType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
+    FunctionType.tp_doc = "object that calls vim function";
+    FunctionType.tp_methods = FunctionMethods;
+    FunctionType.tp_repr = (reprfunc)FunctionRepr;
+    FunctionType.tp_new = (newfunc)FunctionConstructor;
+    FunctionType.tp_alloc = (allocfunc)PyType_GenericAlloc;
+#if PY_MAJOR_VERSION >= 3
+    FunctionType.tp_getattro = (getattrofunc)FunctionGetattro;
+#else
+    FunctionType.tp_getattr = (getattrfunc)FunctionGetattr;
+#endif
 
-    return 0;
+    vim_memset(&OptionsType, 0, sizeof(OptionsType));
+    OptionsType.tp_name = "vim.options";
+    OptionsType.tp_basicsize = sizeof(OptionsObject);
+    OptionsType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
+    OptionsType.tp_doc = "object for manipulating options";
+    OptionsType.tp_as_mapping = &OptionsAsMapping;
+    OptionsType.tp_dealloc = (destructor)OptionsDestructor;
+    OptionsType.tp_traverse = (traverseproc)OptionsTraverse;
+    OptionsType.tp_clear = (inquiry)OptionsClear;
+
+    vim_memset(&LoaderType, 0, sizeof(LoaderType));
+    LoaderType.tp_name = "vim.Loader";
+    LoaderType.tp_basicsize = sizeof(LoaderObject);
+    LoaderType.tp_flags = Py_TPFLAGS_DEFAULT;
+    LoaderType.tp_doc = "vim message object";
+    LoaderType.tp_methods = LoaderMethods;
+    LoaderType.tp_dealloc = (destructor)LoaderDestructor;
+
+#if PY_MAJOR_VERSION >= 3
+    vim_memset(&vimmodule, 0, sizeof(vimmodule));
+    vimmodule.m_name = "vim";
+    vimmodule.m_doc = "Vim Python interface\n";
+    vimmodule.m_size = -1;
+    vimmodule.m_methods = VimMethods;
+#endif
 }
 
+#define PYTYPE_READY(type) \
+    if (PyType_Ready(&type)) \
+       return -1;
 
-    static PyObject *
-RBAppend(BufferObject *self, PyObject *args, PyInt start, PyInt end, PyInt *new_end)
+    static int
+init_types(void)
 {
-    PyObject *lines;
-    PyInt len_change;
-    PyInt max;
-    PyInt n;
-
-    if (CheckBuffer(self))
-       return NULL;
-
-    max = n = end - start + 1;
-
-    if (!PyArg_ParseTuple(args, "O|n", &lines, &n))
-       return NULL;
-
-    if (n < 0 || n > max)
-    {
-       PyErr_SetString(PyExc_ValueError, _("line number out of range"));
-       return NULL;
-    }
-
-    if (InsertBufferLines(self->buf, n + start - 1, lines, &len_change) == FAIL)
-       return NULL;
-
-    if (new_end)
-       *new_end = end + len_change;
-
-    Py_INCREF(Py_None);
-    return Py_None;
+    PYTYPE_READY(IterType);
+    PYTYPE_READY(BufferType);
+    PYTYPE_READY(RangeType);
+    PYTYPE_READY(WindowType);
+    PYTYPE_READY(TabPageType);
+    PYTYPE_READY(BufMapType);
+    PYTYPE_READY(WinListType);
+    PYTYPE_READY(TabListType);
+    PYTYPE_READY(CurrentType);
+    PYTYPE_READY(DictionaryType);
+    PYTYPE_READY(ListType);
+    PYTYPE_READY(FunctionType);
+    PYTYPE_READY(OptionsType);
+    PYTYPE_READY(OutputType);
+    PYTYPE_READY(LoaderType);
+    return 0;
 }
 
-
-/* Buffer object - Definitions
- */
-
-typedef struct
+    static int
+init_sys_path(void)
 {
-    PyObject_HEAD
-    BufferObject *buf;
-    PyInt start;
-    PyInt end;
-} RangeObject;
+    PyObject   *path;
+    PyObject   *path_hook;
+    PyObject   *path_hooks;
 
-    static PyObject *
-RangeNew(buf_T *buf, PyInt start, PyInt end)
-{
-    BufferObject *bufr;
-    RangeObject *self;
-    self = PyObject_NEW(RangeObject, &RangeType);
-    if (self == NULL)
-       return NULL;
+    if (!(path_hook = PyObject_GetAttrString(vim_module, "path_hook")))
+       return -1;
 
-    bufr = (BufferObject *)BufferNew(buf);
-    if (bufr == NULL)
+    if (!(path_hooks = PySys_GetObject("path_hooks")))
     {
-       Py_DECREF(self);
-       return NULL;
+       PyErr_Clear();
+       path_hooks = PyList_New(1);
+       PyList_SET_ITEM(path_hooks, 0, path_hook);
+       if (PySys_SetObject("path_hooks", path_hooks))
+       {
+           Py_DECREF(path_hooks);
+           return -1;
+       }
+       Py_DECREF(path_hooks);
+    }
+    else if (PyList_Check(path_hooks))
+    {
+       if (PyList_Append(path_hooks, path_hook))
+       {
+           Py_DECREF(path_hook);
+           return -1;
+       }
+       Py_DECREF(path_hook);
+    }
+    else
+    {
+       VimTryStart();
+       EMSG(_("Failed to set path hook: sys.path_hooks is not a list\n"
+              "You should now do the following:\n"
+              "- append vim.path_hook to sys.path_hooks\n"
+              "- append vim.VIM_SPECIAL_PATH to sys.path\n"));
+       VimTryEnd(); /* Discard the error */
+       Py_DECREF(path_hook);
+       return 0;
     }
-    Py_INCREF(bufr);
 
-    self->buf = bufr;
-    self->start = start;
-    self->end = end;
+    if (!(path = PySys_GetObject("path")))
+    {
+       PyErr_Clear();
+       path = PyList_New(1);
+       Py_INCREF(vim_special_path_object);
+       PyList_SET_ITEM(path, 0, vim_special_path_object);
+       if (PySys_SetObject("path", path))
+       {
+           Py_DECREF(path);
+           return -1;
+       }
+       Py_DECREF(path);
+    }
+    else if (PyList_Check(path))
+    {
+       if (PyList_Append(path, vim_special_path_object))
+           return -1;
+    }
+    else
+    {
+       VimTryStart();
+       EMSG(_("Failed to set path: sys.path is not a list\n"
+              "You should now append vim.VIM_SPECIAL_PATH to sys.path"));
+       VimTryEnd(); /* Discard the error */
+    }
 
-    return (PyObject *)(self);
+    return 0;
 }
 
-    static PyObject *
-BufferAppend(PyObject *self, PyObject *args)
+static BufMapObject TheBufferMap =
 {
-    return RBAppend((BufferObject *)(self), args, 1,
-                   (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
-                   NULL);
-}
+    PyObject_HEAD_INIT(&BufMapType)
+};
 
-    static PyObject *
-BufferMark(PyObject *self, PyObject *args)
+static WinListObject TheWindowList =
 {
-    pos_T      *posp;
-    char       *pmark;
-    char       mark;
-    buf_T      *curbuf_save;
+    PyObject_HEAD_INIT(&WinListType)
+    NULL
+};
 
-    if (CheckBuffer((BufferObject *)(self)))
-       return NULL;
+static CurrentObject TheCurrent =
+{
+    PyObject_HEAD_INIT(&CurrentType)
+};
 
-    if (!PyArg_ParseTuple(args, "s", &pmark))
-       return NULL;
-    mark = *pmark;
+static TabListObject TheTabPageList =
+{
+    PyObject_HEAD_INIT(&TabListType)
+};
 
-    curbuf_save = curbuf;
-    curbuf = ((BufferObject *)(self))->buf;
-    posp = getmark(mark, FALSE);
-    curbuf = curbuf_save;
+static struct numeric_constant {
+    char       *name;
+    int                val;
+} numeric_constants[] = {
+    {"VAR_LOCKED",     VAR_LOCKED},
+    {"VAR_FIXED",      VAR_FIXED},
+    {"VAR_SCOPE",      VAR_SCOPE},
+    {"VAR_DEF_SCOPE",  VAR_DEF_SCOPE},
+};
 
-    if (posp == NULL)
-    {
-       PyErr_SetVim(_("invalid mark name"));
-       return NULL;
-    }
+static struct object_constant {
+    char       *name;
+    PyObject   *valObject;
+} object_constants[] = {
+    {"buffers",  (PyObject *)(void *)&TheBufferMap},
+    {"windows",  (PyObject *)(void *)&TheWindowList},
+    {"tabpages", (PyObject *)(void *)&TheTabPageList},
+    {"current",  (PyObject *)(void *)&TheCurrent},
+
+    {"Buffer",     (PyObject *)&BufferType},
+    {"Range",      (PyObject *)&RangeType},
+    {"Window",     (PyObject *)&WindowType},
+    {"TabPage",    (PyObject *)&TabPageType},
+    {"Dictionary", (PyObject *)&DictionaryType},
+    {"List",       (PyObject *)&ListType},
+    {"Function",   (PyObject *)&FunctionType},
+    {"Options",    (PyObject *)&OptionsType},
+    {"_Loader",    (PyObject *)&LoaderType},
+};
 
-    /* Ckeck for keyboard interrupt */
-    if (VimErrorCheck())
-       return NULL;
+#define ADD_OBJECT(m, name, obj) \
+    if (PyModule_AddObject(m, name, obj)) \
+       return -1;
 
-    if (posp->lnum <= 0)
-    {
-       /* Or raise an error? */
-       Py_INCREF(Py_None);
-       return Py_None;
+#define ADD_CHECKED_OBJECT(m, name, obj) \
+    { \
+       PyObject        *valObject = obj; \
+       if (!valObject) \
+           return -1; \
+       ADD_OBJECT(m, name, valObject); \
     }
 
-    return Py_BuildValue("(ll)", (long)(posp->lnum), (long)(posp->col));
-}
-
-    static PyObject *
-BufferRange(PyObject *self, PyObject *args)
+    static int
+populate_module(PyObject *m)
 {
-    PyInt start;
-    PyInt end;
-
-    if (CheckBuffer((BufferObject *)(self)))
-       return NULL;
-
-    if (!PyArg_ParseTuple(args, "nn", &start, &end))
-       return NULL;
-
-    return RangeNew(((BufferObject *)(self))->buf, start, end);
-}
+    int                i;
+    PyObject   *other_module;
+    PyObject   *attr;
+    PyObject   *imp;
+
+    for (i = 0; i < (int)(sizeof(numeric_constants)
+                                          / sizeof(struct numeric_constant));
+           ++i)
+       ADD_CHECKED_OBJECT(m, numeric_constants[i].name,
+               PyInt_FromLong(numeric_constants[i].val));
+
+    for (i = 0; i < (int)(sizeof(object_constants)
+                                           / sizeof(struct object_constant));
+           ++i)
+    {
+       PyObject        *valObject;
 
-static struct PyMethodDef BufferMethods[] = {
-    /* name,       function,           calling,    documentation */
-    {"append",     BufferAppend,       1,          "Append data to Vim buffer" },
-    {"mark",       BufferMark,         1,          "Return (row,col) representing position of named mark" },
-    {"range",      BufferRange,        1,          "Return a range object which represents the part of the given buffer between line numbers s and e" },
-    { NULL,        NULL,               0,          NULL }
-};
+       valObject = object_constants[i].valObject;
+       Py_INCREF(valObject);
+       ADD_OBJECT(m, object_constants[i].name, valObject);
+    }
 
-    static PyObject *
-RangeAppend(PyObject *self, PyObject *args)
-{
-    return RBAppend(((RangeObject *)(self))->buf, args,
-                   ((RangeObject *)(self))->start,
-                   ((RangeObject *)(self))->end,
-                   &((RangeObject *)(self))->end);
-}
+    if (!(VimError = PyErr_NewException("vim.error", NULL, NULL)))
+       return -1;
+    ADD_OBJECT(m, "error", VimError);
 
-    static PyInt
-RangeLength(PyObject *self)
-{
-    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
-    if (CheckBuffer(((RangeObject *)(self))->buf))
-       return -1; /* ??? */
+    ADD_CHECKED_OBJECT(m, "vars",  NEW_DICTIONARY(&globvardict));
+    ADD_CHECKED_OBJECT(m, "vvars", NEW_DICTIONARY(&vimvardict));
+    ADD_CHECKED_OBJECT(m, "options",
+           OptionsNew(SREQ_GLOBAL, NULL, dummy_check, NULL));
 
-    return (((RangeObject *)(self))->end - ((RangeObject *)(self))->start + 1);
-}
+    if (!(other_module = PyImport_ImportModule("os")))
+       return -1;
+    ADD_OBJECT(m, "os", other_module);
 
-    static PyObject *
-RangeItem(PyObject *self, PyInt n)
-{
-    return RBItem(((RangeObject *)(self))->buf, n,
-                 ((RangeObject *)(self))->start,
-                 ((RangeObject *)(self))->end);
-}
+    if (!(py_getcwd = PyObject_GetAttrString(other_module, "getcwd")))
+       return -1;
+    ADD_OBJECT(m, "_getcwd", py_getcwd)
 
-    static PyObject *
-RangeRepr(PyObject *self)
-{
-    static char repr[100];
-    RangeObject *this = (RangeObject *)(self);
+    if (!(py_chdir = PyObject_GetAttrString(other_module, "chdir")))
+       return -1;
+    ADD_OBJECT(m, "_chdir", py_chdir);
+    if (!(attr = PyObject_GetAttrString(m, "chdir")))
+       return -1;
+    if (PyObject_SetAttrString(other_module, "chdir", attr))
+    {
+       Py_DECREF(attr);
+       return -1;
+    }
+    Py_DECREF(attr);
 
-    if (this->buf->buf == INVALID_BUFFER_VALUE)
+    if ((py_fchdir = PyObject_GetAttrString(other_module, "fchdir")))
     {
-       vim_snprintf(repr, 100, "<range object (for deleted buffer) at %p>",
-                                                                     (self));
-       return PyString_FromString(repr);
+       ADD_OBJECT(m, "_fchdir", py_fchdir);
+       if (!(attr = PyObject_GetAttrString(m, "fchdir")))
+           return -1;
+       if (PyObject_SetAttrString(other_module, "fchdir", attr))
+       {
+           Py_DECREF(attr);
+           return -1;
+       }
+       Py_DECREF(attr);
     }
     else
-    {
-       char *name = (char *)this->buf->buf->b_fname;
-       int len;
+       PyErr_Clear();
 
-       if (name == NULL)
-           name = "";
-       len = (int)strlen(name);
+    if (!(vim_special_path_object = PyString_FromString(vim_special_path)))
+       return -1;
 
-       if (len > 45)
-           name = name + (45 - len);
+    ADD_OBJECT(m, "VIM_SPECIAL_PATH", vim_special_path_object);
 
-       vim_snprintf(repr, 100, "<range %s%s (%d:%d)>",
-               len > 45 ? "..." : "", name,
-               this->start, this->end);
+    if (!(imp = PyImport_ImportModule("imp")))
+       return -1;
 
-       return PyString_FromString(repr);
+    if (!(py_find_module = PyObject_GetAttrString(imp, "find_module")))
+    {
+       Py_DECREF(imp);
+       return -1;
     }
-}
 
-    static PyObject *
-RangeSlice(PyObject *self, PyInt lo, PyInt hi)
-{
-    return RBSlice(((RangeObject *)(self))->buf, lo, hi,
-                  ((RangeObject *)(self))->start,
-                  ((RangeObject *)(self))->end);
-}
+    if (!(py_load_module = PyObject_GetAttrString(imp, "load_module")))
+    {
+       Py_DECREF(py_find_module);
+       Py_DECREF(imp);
+       return -1;
+    }
 
-/*
- * Line range object - Definitions
- */
+    Py_DECREF(imp);
 
-static struct PyMethodDef RangeMethods[] = {
-    /* name,       function,           calling,    documentation */
-    {"append",     RangeAppend,        1,          "Append data to the Vim range" },
-    { NULL,        NULL,               0,          NULL }
-};
+    ADD_OBJECT(m, "_find_module", py_find_module);
+    ADD_OBJECT(m, "_load_module", py_load_module);
 
+    return 0;
+}
index 7b1d6e7..6e43b5d 100644 (file)
@@ -1,4 +1,4 @@
-/* vi:set ts=8 sts=4 sw=4:
+/* vi:set ts=8 sts=4 sw=4 noet:
  *
  * VIM - Vi IMproved   by Bram Moolenaar
  *
 
 #include <limits.h>
 
+/* uncomment this if used with the debug version of python.
+ * Checked on 2.7.4. */
+/* #define Py_DEBUG */
+/* Note: most of time you can add -DPy_DEBUG to CFLAGS in place of uncommenting
+ */
+/* uncomment this if used with the debug version of python, but without its
+ * allocator */
+/* #define Py_DEBUG_NO_PYMALLOC */
+
 /* Python.h defines _POSIX_THREADS itself (if needed) */
 #ifdef _POSIX_THREADS
 # undef _POSIX_THREADS
 #define PY_SSIZE_T_CLEAN
 
 #include <Python.h>
+
+#if !defined(PY_VERSION_HEX) || PY_VERSION_HEX < 0x02050000
+# undef PY_SSIZE_T_CLEAN
+#endif
+
 #if defined(MACOS) && !defined(MACOS_X_UNIX)
 # include "macglue.h"
 # include <CodeFragments.h>
@@ -54,7 +68,9 @@
 #undef main /* Defined in python.h - aargh */
 #undef HAVE_FCNTL_H /* Clash with os_win32.h */
 
-static void init_structs(void);
+#define PyBytes_FromString      PyString_FromString
+#define PyBytes_Check           PyString_Check
+#define PyBytes_AsStringAndSize PyString_AsStringAndSize
 
 #if !defined(FEAT_PYTHON) && defined(PROTO)
 /* Use this to be able to generate prototypes without python being used. */
@@ -65,6 +81,10 @@ struct PyMethodDef { Py_ssize_t a; };
 # define PySequenceMethods Py_ssize_t
 #endif
 
+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+# define PY_USE_CAPSULE
+#endif
+
 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
 # define PyInt Py_ssize_t
 # define PyInquiry lenfunc
@@ -75,6 +95,7 @@ struct PyMethodDef { Py_ssize_t a; };
 # define Py_ssize_t_fmt "n"
 #else
 # define PyInt int
+# define lenfunc inquiry
 # define PyInquiry inquiry
 # define PyIntArgFunc intargfunc
 # define PyIntIntArgFunc intintargfunc
@@ -82,6 +103,7 @@ struct PyMethodDef { Py_ssize_t a; };
 # define PyIntIntObjArgProc intintobjargproc
 # define Py_ssize_t_fmt "i"
 #endif
+#define Py_bytes_fmt "s"
 
 /* Parser flags */
 #define single_input   256
@@ -102,7 +124,7 @@ struct PyMethodDef { Py_ssize_t a; };
 #  include <dlfcn.h>
 #  define FARPROC void*
 #  define HINSTANCE void*
-#  ifdef PY_NO_RTLD_GLOBAL
+#  if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)
 #   define load_dll(n) dlopen((n), RTLD_LAZY)
 #  else
 #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
@@ -110,7 +132,7 @@ struct PyMethodDef { Py_ssize_t a; };
 #  define close_dll dlclose
 #  define symbol_from_dll dlsym
 # else
-#  define load_dll LoadLibrary
+#  define load_dll vimLoadLib
 #  define close_dll FreeLibrary
 #  define symbol_from_dll GetProcAddress
 # endif
@@ -118,24 +140,34 @@ struct PyMethodDef { Py_ssize_t a; };
 /* This makes if_python.c compile without warnings against Python 2.5
  * on Win32 and Win64. */
 # undef PyRun_SimpleString
+# undef PyRun_String
 # undef PyArg_Parse
 # undef PyArg_ParseTuple
 # undef Py_BuildValue
 # undef Py_InitModule4
 # undef Py_InitModule4_64
+# undef PyObject_CallMethod
+# undef PyObject_CallFunction
 
 /*
  * Wrapper defines
  */
 # define PyArg_Parse dll_PyArg_Parse
 # define PyArg_ParseTuple dll_PyArg_ParseTuple
+# define PyMem_Free dll_PyMem_Free
+# define PyMem_Malloc dll_PyMem_Malloc
 # define PyDict_SetItemString dll_PyDict_SetItemString
 # define PyErr_BadArgument dll_PyErr_BadArgument
+# define PyErr_NewException dll_PyErr_NewException
 # define PyErr_Clear dll_PyErr_Clear
+# define PyErr_Format dll_PyErr_Format
+# define PyErr_PrintEx dll_PyErr_PrintEx
 # define PyErr_NoMemory dll_PyErr_NoMemory
 # define PyErr_Occurred dll_PyErr_Occurred
 # define PyErr_SetNone dll_PyErr_SetNone
 # define PyErr_SetString dll_PyErr_SetString
+# define PyErr_SetObject dll_PyErr_SetObject
+# define PyErr_ExceptionMatches dll_PyErr_ExceptionMatches
 # define PyEval_InitThreads dll_PyEval_InitThreads
 # define PyEval_RestoreThread dll_PyEval_RestoreThread
 # define PyEval_SaveThread dll_PyEval_SaveThread
@@ -145,41 +177,121 @@ struct PyMethodDef { Py_ssize_t a; };
 # endif
 # define PyInt_AsLong dll_PyInt_AsLong
 # define PyInt_FromLong dll_PyInt_FromLong
+# define PyLong_AsLong dll_PyLong_AsLong
+# define PyLong_FromLong dll_PyLong_FromLong
+# define PyBool_Type (*dll_PyBool_Type)
 # define PyInt_Type (*dll_PyInt_Type)
+# define PyLong_Type (*dll_PyLong_Type)
 # define PyList_GetItem dll_PyList_GetItem
 # define PyList_Append dll_PyList_Append
+# define PyList_Insert dll_PyList_Insert
 # define PyList_New dll_PyList_New
 # define PyList_SetItem dll_PyList_SetItem
 # define PyList_Size dll_PyList_Size
 # define PyList_Type (*dll_PyList_Type)
+# define PySequence_Check dll_PySequence_Check
+# define PySequence_Size dll_PySequence_Size
+# define PySequence_GetItem dll_PySequence_GetItem
+# define PySequence_Fast dll_PySequence_Fast
+# define PyTuple_Size dll_PyTuple_Size
+# define PyTuple_GetItem dll_PyTuple_GetItem
+# define PyTuple_Type (*dll_PyTuple_Type)
 # define PyImport_ImportModule dll_PyImport_ImportModule
 # define PyDict_New dll_PyDict_New
 # define PyDict_GetItemString dll_PyDict_GetItemString
+# define PyDict_Next dll_PyDict_Next
+# define PyDict_Type (*dll_PyDict_Type)
+# ifdef PyMapping_Keys
+#  define PY_NO_MAPPING_KEYS
+# else
+#  define PyMapping_Keys dll_PyMapping_Keys
+# endif
+# define PyObject_GetItem dll_PyObject_GetItem
+# define PyObject_CallMethod dll_PyObject_CallMethod
+# define PyMapping_Check dll_PyMapping_Check
+# define PyIter_Next dll_PyIter_Next
 # define PyModule_GetDict dll_PyModule_GetDict
+# define PyModule_AddObject dll_PyModule_AddObject
 # define PyRun_SimpleString dll_PyRun_SimpleString
+# define PyRun_String dll_PyRun_String
+# define PyObject_GetAttrString dll_PyObject_GetAttrString
+# define PyObject_HasAttrString dll_PyObject_HasAttrString
+# define PyObject_SetAttrString dll_PyObject_SetAttrString
+# define PyObject_CallFunctionObjArgs dll_PyObject_CallFunctionObjArgs
+# define PyObject_CallFunction dll_PyObject_CallFunction
+# define PyObject_Call dll_PyObject_Call
+# define PyObject_Repr dll_PyObject_Repr
 # define PyString_AsString dll_PyString_AsString
+# define PyString_AsStringAndSize dll_PyString_AsStringAndSize
 # define PyString_FromString dll_PyString_FromString
+# define PyString_FromFormat dll_PyString_FromFormat
 # define PyString_FromStringAndSize dll_PyString_FromStringAndSize
 # define PyString_Size dll_PyString_Size
 # define PyString_Type (*dll_PyString_Type)
+# define PyUnicode_Type (*dll_PyUnicode_Type)
+# undef PyUnicode_AsEncodedString
+# define PyUnicode_AsEncodedString py_PyUnicode_AsEncodedString
+# define PyFloat_AsDouble dll_PyFloat_AsDouble
+# define PyFloat_FromDouble dll_PyFloat_FromDouble
+# define PyFloat_Type (*dll_PyFloat_Type)
+# define PyNumber_Check dll_PyNumber_Check
+# define PyNumber_Long dll_PyNumber_Long
+# define PyImport_AddModule (*dll_PyImport_AddModule)
 # define PySys_SetObject dll_PySys_SetObject
+# define PySys_GetObject dll_PySys_GetObject
 # define PySys_SetArgv dll_PySys_SetArgv
 # define PyType_Type (*dll_PyType_Type)
+# define PyType_Ready (*dll_PyType_Ready)
+# define PyType_GenericAlloc dll_PyType_GenericAlloc
 # define Py_BuildValue dll_Py_BuildValue
 # define Py_FindMethod dll_Py_FindMethod
 # define Py_InitModule4 dll_Py_InitModule4
+# define Py_SetPythonHome dll_Py_SetPythonHome
 # define Py_Initialize dll_Py_Initialize
 # define Py_Finalize dll_Py_Finalize
 # define Py_IsInitialized dll_Py_IsInitialized
 # define _PyObject_New dll__PyObject_New
+# define _PyObject_GC_New dll__PyObject_GC_New
+# ifdef PyObject_GC_Del
+#  define Py_underscore_GC
+#  define _PyObject_GC_Del dll__PyObject_GC_Del
+#  define _PyObject_GC_UnTrack dll__PyObject_GC_UnTrack
+# else
+#  define PyObject_GC_Del dll_PyObject_GC_Del
+#  define PyObject_GC_UnTrack dll_PyObject_GC_UnTrack
+# endif
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+#  define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented)
+# endif
 # define _Py_NoneStruct (*dll__Py_NoneStruct)
+# define _Py_ZeroStruct (*dll__Py_ZeroStruct)
+# define _Py_TrueStruct (*dll__Py_TrueStruct)
 # define PyObject_Init dll__PyObject_Init
+# define PyObject_GetIter dll_PyObject_GetIter
+# define PyObject_IsTrue dll_PyObject_IsTrue
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
 #  define PyType_IsSubtype dll_PyType_IsSubtype
+#  ifdef Py_DEBUG
+#   define _Py_NegativeRefcount dll__Py_NegativeRefcount
+#   define _Py_RefTotal (*dll__Py_RefTotal)
+#   define _Py_Dealloc dll__Py_Dealloc
+#  endif
 # endif
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000
-#  define PyObject_Malloc dll_PyObject_Malloc
-#  define PyObject_Free dll_PyObject_Free
+#  if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+#   define _PyObject_DebugMalloc dll__PyObject_DebugMalloc
+#   define _PyObject_DebugFree dll__PyObject_DebugFree
+#  else
+#   define PyObject_Malloc dll_PyObject_Malloc
+#   define PyObject_Free dll_PyObject_Free
+#  endif
+# endif
+# ifdef PY_USE_CAPSULE
+#  define PyCapsule_New dll_PyCapsule_New
+#  define PyCapsule_GetPointer dll_PyCapsule_GetPointer
+# else
+#  define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr
+#  define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr
 # endif
 
 /*
@@ -187,57 +299,140 @@ struct PyMethodDef { Py_ssize_t a; };
  */
 static int(*dll_PyArg_Parse)(PyObject *, char *, ...);
 static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...);
+static int(*dll_PyMem_Free)(void *);
+static void* (*dll_PyMem_Malloc)(size_t);
 static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
 static int(*dll_PyErr_BadArgument)(void);
+static PyObject *(*dll_PyErr_NewException)(char *, PyObject *, PyObject *);
 static void(*dll_PyErr_Clear)(void);
+static PyObject*(*dll_PyErr_Format)(PyObject *, const char *, ...);
+static void(*dll_PyErr_PrintEx)(int);
 static PyObject*(*dll_PyErr_NoMemory)(void);
 static PyObject*(*dll_PyErr_Occurred)(void);
 static void(*dll_PyErr_SetNone)(PyObject *);
 static void(*dll_PyErr_SetString)(PyObject *, const char *);
+static void(*dll_PyErr_SetObject)(PyObject *, PyObject *);
+static int(*dll_PyErr_ExceptionMatches)(PyObject *);
 static void(*dll_PyEval_InitThreads)(void);
 static void(*dll_PyEval_RestoreThread)(PyThreadState *);
 static PyThreadState*(*dll_PyEval_SaveThread)(void);
 # ifdef PY_CAN_RECURSE
 static PyGILState_STATE        (*dll_PyGILState_Ensure)(void);
 static void (*dll_PyGILState_Release)(PyGILState_STATE);
-#endif
+# endif
 static long(*dll_PyInt_AsLong)(PyObject *);
 static PyObject*(*dll_PyInt_FromLong)(long);
+static long(*dll_PyLong_AsLong)(PyObject *);
+static PyObject*(*dll_PyLong_FromLong)(long);
+static PyTypeObject* dll_PyBool_Type;
 static PyTypeObject* dll_PyInt_Type;
+static PyTypeObject* dll_PyLong_Type;
 static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
-static PyObject*(*dll_PyList_Append)(PyObject *, PyObject *);
+static int(*dll_PyList_Append)(PyObject *, PyObject *);
+static int(*dll_PyList_Insert)(PyObject *, PyInt, PyObject *);
 static PyObject*(*dll_PyList_New)(PyInt size);
 static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *);
 static PyInt(*dll_PyList_Size)(PyObject *);
 static PyTypeObject* dll_PyList_Type;
+static int (*dll_PySequence_Check)(PyObject *);
+static PyInt(*dll_PySequence_Size)(PyObject *);
+static PyObject*(*dll_PySequence_GetItem)(PyObject *, PyInt);
+static PyObject*(*dll_PySequence_Fast)(PyObject *, const char *);
+static PyInt(*dll_PyTuple_Size)(PyObject *);
+static PyObject*(*dll_PyTuple_GetItem)(PyObject *, PyInt);
+static PyTypeObject* dll_PyTuple_Type;
 static PyObject*(*dll_PyImport_ImportModule)(const char *);
 static PyObject*(*dll_PyDict_New)(void);
 static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
+static int (*dll_PyDict_Next)(PyObject *, PyInt *, PyObject **, PyObject **);
+static PyTypeObject* dll_PyDict_Type;
+# ifndef PY_NO_MAPPING_KEYS
+static PyObject* (*dll_PyMapping_Keys)(PyObject *);
+# endif
+static PyObject* (*dll_PyObject_GetItem)(PyObject *, PyObject *);
+static PyObject* (*dll_PyObject_CallMethod)(PyObject *, char *, PyObject *);
+static int (*dll_PyMapping_Check)(PyObject *);
+static PyObject* (*dll_PyIter_Next)(PyObject *);
 static PyObject*(*dll_PyModule_GetDict)(PyObject *);
+static int(*dll_PyModule_AddObject)(PyObject *, const char *, PyObject *);
 static int(*dll_PyRun_SimpleString)(char *);
+static PyObject *(*dll_PyRun_String)(char *, int, PyObject *, PyObject *);
+static PyObject* (*dll_PyObject_GetAttrString)(PyObject *, const char *);
+static int (*dll_PyObject_HasAttrString)(PyObject *, const char *);
+static PyObject* (*dll_PyObject_SetAttrString)(PyObject *, const char *, PyObject *);
+static PyObject* (*dll_PyObject_CallFunctionObjArgs)(PyObject *, ...);
+static PyObject* (*dll_PyObject_CallFunction)(PyObject *, char *, ...);
+static PyObject* (*dll_PyObject_Call)(PyObject *, PyObject *, PyObject *);
+static PyObject* (*dll_PyObject_Repr)(PyObject *);
 static char*(*dll_PyString_AsString)(PyObject *);
+static int(*dll_PyString_AsStringAndSize)(PyObject *, char **, PyInt *);
 static PyObject*(*dll_PyString_FromString)(const char *);
+static PyObject*(*dll_PyString_FromFormat)(const char *, ...);
 static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt);
 static PyInt(*dll_PyString_Size)(PyObject *);
 static PyTypeObject* dll_PyString_Type;
+static PyTypeObject* dll_PyUnicode_Type;
+static PyObject *(*py_PyUnicode_AsEncodedString)(PyObject *, char *, char *);
+static double(*dll_PyFloat_AsDouble)(PyObject *);
+static PyObject*(*dll_PyFloat_FromDouble)(double);
+static PyTypeObject* dll_PyFloat_Type;
+static int(*dll_PyNumber_Check)(PyObject *);
+static PyObject*(*dll_PyNumber_Long)(PyObject *);
 static int(*dll_PySys_SetObject)(char *, PyObject *);
+static PyObject *(*dll_PySys_GetObject)(char *);
 static int(*dll_PySys_SetArgv)(int, char **);
 static PyTypeObject* dll_PyType_Type;
+static int (*dll_PyType_Ready)(PyTypeObject *type);
+static PyObject* (*dll_PyType_GenericAlloc)(PyTypeObject *type, PyInt nitems);
 static PyObject*(*dll_Py_BuildValue)(char *, ...);
 static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *);
 static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int);
+static PyObject*(*dll_PyImport_AddModule)(char *);
+static void(*dll_Py_SetPythonHome)(char *home);
 static void(*dll_Py_Initialize)(void);
 static void(*dll_Py_Finalize)(void);
 static int(*dll_Py_IsInitialized)(void);
 static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *);
+static PyObject*(*dll__PyObject_GC_New)(PyTypeObject *);
+# ifdef Py_underscore_GC
+static void(*dll__PyObject_GC_Del)(void *);
+static void(*dll__PyObject_GC_UnTrack)(void *);
+# else
+static void(*dll_PyObject_GC_Del)(void *);
+static void(*dll_PyObject_GC_UnTrack)(void *);
+# endif
 static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *);
+static PyObject* (*dll_PyObject_GetIter)(PyObject *);
+static int (*dll_PyObject_IsTrue)(PyObject *);
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+static iternextfunc dll__PyObject_NextNotImplemented;
+# endif
 static PyObject* dll__Py_NoneStruct;
+static PyObject* _Py_ZeroStruct;
+static PyObject* dll__Py_TrueStruct;
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
 static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
+#  ifdef Py_DEBUG
+static void (*dll__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
+static PyInt* dll__Py_RefTotal;
+static void (*dll__Py_Dealloc)(PyObject *obj);
+#  endif
 # endif
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000
+#  if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+static void (*dll__PyObject_DebugFree)(void*);
+static void* (*dll__PyObject_DebugMalloc)(size_t);
+#  else
 static void* (*dll_PyObject_Malloc)(size_t);
 static void (*dll_PyObject_Free)(void*);
+#  endif
+# endif
+# ifdef PY_USE_CAPSULE
+static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
+static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
+# else
+static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
+static void* (*dll_PyCObject_AsVoidPtr)(PyObject *);
 # endif
 
 static HINSTANCE hinstPython = 0; /* Instance of python.dll */
@@ -245,15 +440,25 @@ static HINSTANCE hinstPython = 0; /* Instance of python.dll */
 /* Imported exception objects */
 static PyObject *imp_PyExc_AttributeError;
 static PyObject *imp_PyExc_IndexError;
+static PyObject *imp_PyExc_KeyError;
 static PyObject *imp_PyExc_KeyboardInterrupt;
 static PyObject *imp_PyExc_TypeError;
 static PyObject *imp_PyExc_ValueError;
+static PyObject *imp_PyExc_SystemExit;
+static PyObject *imp_PyExc_RuntimeError;
+static PyObject *imp_PyExc_ImportError;
+static PyObject *imp_PyExc_OverflowError;
 
 # define PyExc_AttributeError imp_PyExc_AttributeError
 # define PyExc_IndexError imp_PyExc_IndexError
+# define PyExc_KeyError imp_PyExc_KeyError
 # define PyExc_KeyboardInterrupt imp_PyExc_KeyboardInterrupt
 # define PyExc_TypeError imp_PyExc_TypeError
 # define PyExc_ValueError imp_PyExc_ValueError
+# define PyExc_SystemExit imp_PyExc_SystemExit
+# define PyExc_RuntimeError imp_PyExc_RuntimeError
+# define PyExc_ImportError imp_PyExc_ImportError
+# define PyExc_OverflowError imp_PyExc_OverflowError
 
 /*
  * Table of name to function pointer of python.
@@ -265,15 +470,29 @@ static struct
     PYTHON_PROC *ptr;
 } python_funcname_table[] =
 {
+#ifndef PY_SSIZE_T_CLEAN
     {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
     {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
+    {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
+#else
+    {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&dll_PyArg_Parse},
+    {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
+    {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&dll_Py_BuildValue},
+#endif
+    {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
+    {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc},
     {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
     {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument},
+    {"PyErr_NewException", (PYTHON_PROC*)&dll_PyErr_NewException},
     {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear},
+    {"PyErr_Format", (PYTHON_PROC*)&dll_PyErr_Format},
+    {"PyErr_PrintEx", (PYTHON_PROC*)&dll_PyErr_PrintEx},
     {"PyErr_NoMemory", (PYTHON_PROC*)&dll_PyErr_NoMemory},
     {"PyErr_Occurred", (PYTHON_PROC*)&dll_PyErr_Occurred},
     {"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone},
     {"PyErr_SetString", (PYTHON_PROC*)&dll_PyErr_SetString},
+    {"PyErr_SetObject", (PYTHON_PROC*)&dll_PyErr_SetObject},
+    {"PyErr_ExceptionMatches", (PYTHON_PROC*)&dll_PyErr_ExceptionMatches},
     {"PyEval_InitThreads", (PYTHON_PROC*)&dll_PyEval_InitThreads},
     {"PyEval_RestoreThread", (PYTHON_PROC*)&dll_PyEval_RestoreThread},
     {"PyEval_SaveThread", (PYTHON_PROC*)&dll_PyEval_SaveThread},
@@ -283,45 +502,128 @@ static struct
 # endif
     {"PyInt_AsLong", (PYTHON_PROC*)&dll_PyInt_AsLong},
     {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong},
+    {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong},
+    {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong},
+    {"PyBool_Type", (PYTHON_PROC*)&dll_PyBool_Type},
     {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type},
+    {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type},
     {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem},
     {"PyList_Append", (PYTHON_PROC*)&dll_PyList_Append},
+    {"PyList_Insert", (PYTHON_PROC*)&dll_PyList_Insert},
     {"PyList_New", (PYTHON_PROC*)&dll_PyList_New},
     {"PyList_SetItem", (PYTHON_PROC*)&dll_PyList_SetItem},
     {"PyList_Size", (PYTHON_PROC*)&dll_PyList_Size},
     {"PyList_Type", (PYTHON_PROC*)&dll_PyList_Type},
+    {"PySequence_Size", (PYTHON_PROC*)&dll_PySequence_Size},
+    {"PySequence_Check", (PYTHON_PROC*)&dll_PySequence_Check},
+    {"PySequence_GetItem", (PYTHON_PROC*)&dll_PySequence_GetItem},
+    {"PySequence_Fast", (PYTHON_PROC*)&dll_PySequence_Fast},
+    {"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem},
+    {"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size},
+    {"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type},
     {"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule},
     {"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString},
+    {"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next},
     {"PyDict_New", (PYTHON_PROC*)&dll_PyDict_New},
+    {"PyDict_Type", (PYTHON_PROC*)&dll_PyDict_Type},
+# ifndef PY_NO_MAPPING_KEYS
+    {"PyMapping_Keys", (PYTHON_PROC*)&dll_PyMapping_Keys},
+# endif
+    {"PyObject_GetItem", (PYTHON_PROC*)&dll_PyObject_GetItem},
+    {"PyObject_CallMethod", (PYTHON_PROC*)&dll_PyObject_CallMethod},
+    {"PyMapping_Check", (PYTHON_PROC*)&dll_PyMapping_Check},
+    {"PyIter_Next", (PYTHON_PROC*)&dll_PyIter_Next},
     {"PyModule_GetDict", (PYTHON_PROC*)&dll_PyModule_GetDict},
+    {"PyModule_AddObject", (PYTHON_PROC*)&dll_PyModule_AddObject},
     {"PyRun_SimpleString", (PYTHON_PROC*)&dll_PyRun_SimpleString},
+    {"PyRun_String", (PYTHON_PROC*)&dll_PyRun_String},
+    {"PyObject_GetAttrString", (PYTHON_PROC*)&dll_PyObject_GetAttrString},
+    {"PyObject_HasAttrString", (PYTHON_PROC*)&dll_PyObject_HasAttrString},
+    {"PyObject_SetAttrString", (PYTHON_PROC*)&dll_PyObject_SetAttrString},
+    {"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&dll_PyObject_CallFunctionObjArgs},
+    {"PyObject_CallFunction", (PYTHON_PROC*)&dll_PyObject_CallFunction},
+    {"PyObject_Call", (PYTHON_PROC*)&dll_PyObject_Call},
+    {"PyObject_Repr", (PYTHON_PROC*)&dll_PyObject_Repr},
     {"PyString_AsString", (PYTHON_PROC*)&dll_PyString_AsString},
+    {"PyString_AsStringAndSize", (PYTHON_PROC*)&dll_PyString_AsStringAndSize},
     {"PyString_FromString", (PYTHON_PROC*)&dll_PyString_FromString},
+    {"PyString_FromFormat", (PYTHON_PROC*)&dll_PyString_FromFormat},
     {"PyString_FromStringAndSize", (PYTHON_PROC*)&dll_PyString_FromStringAndSize},
     {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size},
     {"PyString_Type", (PYTHON_PROC*)&dll_PyString_Type},
+    {"PyUnicode_Type", (PYTHON_PROC*)&dll_PyUnicode_Type},
+    {"PyFloat_Type", (PYTHON_PROC*)&dll_PyFloat_Type},
+    {"PyFloat_AsDouble", (PYTHON_PROC*)&dll_PyFloat_AsDouble},
+    {"PyFloat_FromDouble", (PYTHON_PROC*)&dll_PyFloat_FromDouble},
+    {"PyImport_AddModule", (PYTHON_PROC*)&dll_PyImport_AddModule},
+    {"PyNumber_Check", (PYTHON_PROC*)&dll_PyNumber_Check},
+    {"PyNumber_Long", (PYTHON_PROC*)&dll_PyNumber_Long},
     {"PySys_SetObject", (PYTHON_PROC*)&dll_PySys_SetObject},
+    {"PySys_GetObject", (PYTHON_PROC*)&dll_PySys_GetObject},
     {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
     {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
-    {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
+    {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
+    {"PyType_GenericAlloc", (PYTHON_PROC*)&dll_PyType_GenericAlloc},
     {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
-# if (PY_VERSION_HEX >= 0x02050000) && SIZEOF_SIZE_T != SIZEOF_INT
-    {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
-# else
-    {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
-# endif
+    {"Py_SetPythonHome", (PYTHON_PROC*)&dll_Py_SetPythonHome},
     {"Py_Initialize", (PYTHON_PROC*)&dll_Py_Initialize},
     {"Py_Finalize", (PYTHON_PROC*)&dll_Py_Finalize},
     {"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized},
     {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New},
+    {"_PyObject_GC_New", (PYTHON_PROC*)&dll__PyObject_GC_New},
+# ifdef Py_underscore_GC
+    {"_PyObject_GC_Del", (PYTHON_PROC*)&dll__PyObject_GC_Del},
+    {"_PyObject_GC_UnTrack", (PYTHON_PROC*)&dll__PyObject_GC_UnTrack},
+# else
+    {"PyObject_GC_Del", (PYTHON_PROC*)&dll_PyObject_GC_Del},
+    {"PyObject_GC_UnTrack", (PYTHON_PROC*)&dll_PyObject_GC_UnTrack},
+# endif
     {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init},
+    {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter},
+    {"PyObject_IsTrue", (PYTHON_PROC*)&dll_PyObject_IsTrue},
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+    {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented},
+# endif
     {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct},
+    {"_Py_ZeroStruct", (PYTHON_PROC*)&dll__Py_ZeroStruct},
+    {"_Py_TrueStruct", (PYTHON_PROC*)&dll__Py_TrueStruct},
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+#  ifdef Py_DEBUG
+    {"_Py_NegativeRefcount", (PYTHON_PROC*)&dll__Py_NegativeRefcount},
+    {"_Py_RefTotal", (PYTHON_PROC*)&dll__Py_RefTotal},
+    {"_Py_Dealloc", (PYTHON_PROC*)&dll__Py_Dealloc},
+#  endif
     {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype},
 # endif
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000
+#  if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+    {"_PyObject_DebugFree", (PYTHON_PROC*)&dll__PyObject_DebugFree},
+    {"_PyObject_DebugMalloc", (PYTHON_PROC*)&dll__PyObject_DebugMalloc},
+#  else
     {"PyObject_Malloc", (PYTHON_PROC*)&dll_PyObject_Malloc},
     {"PyObject_Free", (PYTHON_PROC*)&dll_PyObject_Free},
+#  endif
+# endif
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
+       && SIZEOF_SIZE_T != SIZEOF_INT
+#  ifdef Py_DEBUG
+    {"Py_InitModule4TraceRefs_64", (PYTHON_PROC*)&dll_Py_InitModule4},
+#  else
+    {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
+#  endif
+# else
+#  ifdef Py_DEBUG
+    {"Py_InitModule4TraceRefs", (PYTHON_PROC*)&dll_Py_InitModule4},
+#  else
+    {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
+#  endif
+# endif
+# ifdef PY_USE_CAPSULE
+    {"PyCapsule_New", (PYTHON_PROC*)&dll_PyCapsule_New},
+    {"PyCapsule_GetPointer", (PYTHON_PROC*)&dll_PyCapsule_GetPointer},
+# else
+    {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr},
+    {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr},
 # endif
     {"", NULL},
 };
@@ -348,14 +650,16 @@ end_dynamic_python(void)
 python_runtime_link_init(char *libname, int verbose)
 {
     int i;
+    void *ucs_as_encoded_string;
 
-#if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON3)
+#if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON3)
     /* Can't have Python and Python3 loaded at the same time.
      * It cause a crash, because RTLD_GLOBAL is needed for
      * standard C extension libraries of one or both python versions. */
     if (python3_loaded())
     {
-       EMSG(_("E836: This Vim cannot execute :python after using :py3"));
+       if (verbose)
+           EMSG(_("E836: This Vim cannot execute :python after using :py3"));
        return FAIL;
     }
 #endif
@@ -382,6 +686,25 @@ python_runtime_link_init(char *libname, int verbose)
            return FAIL;
        }
     }
+
+    /* Load unicode functions separately as only the ucs2 or the ucs4 functions
+     * will be present in the library. */
+    ucs_as_encoded_string = symbol_from_dll(hinstPython,
+                                            "PyUnicodeUCS2_AsEncodedString");
+    if (ucs_as_encoded_string == NULL)
+       ucs_as_encoded_string = symbol_from_dll(hinstPython,
+                                            "PyUnicodeUCS4_AsEncodedString");
+    if (ucs_as_encoded_string != NULL)
+       py_PyUnicode_AsEncodedString = ucs_as_encoded_string;
+    else
+    {
+       close_dll(hinstPython);
+       hinstPython = 0;
+       if (verbose)
+           EMSG2(_(e_loadfunc), "PyUnicode_UCSX_*");
+       return FAIL;
+    }
+
     return OK;
 }
 
@@ -406,23 +729,71 @@ get_exceptions(void)
     PyObject *exdict = PyModule_GetDict(exmod);
     imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError");
     imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError");
+    imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError");
     imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
     imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
     imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
+    imp_PyExc_SystemExit = PyDict_GetItemString(exdict, "SystemExit");
+    imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
+    imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError");
+    imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError");
     Py_XINCREF(imp_PyExc_AttributeError);
     Py_XINCREF(imp_PyExc_IndexError);
+    Py_XINCREF(imp_PyExc_KeyError);
     Py_XINCREF(imp_PyExc_KeyboardInterrupt);
     Py_XINCREF(imp_PyExc_TypeError);
     Py_XINCREF(imp_PyExc_ValueError);
+    Py_XINCREF(imp_PyExc_SystemExit);
+    Py_XINCREF(imp_PyExc_RuntimeError);
+    Py_XINCREF(imp_PyExc_ImportError);
+    Py_XINCREF(imp_PyExc_OverflowError);
     Py_XDECREF(exmod);
 }
 #endif /* DYNAMIC_PYTHON */
 
-static PyObject *BufferNew (buf_T *);
-static PyObject *WindowNew(win_T *);
-static PyObject *LineToString(const char *);
+static int initialised = 0;
+#define PYINITIALISED initialised
+
+#define DESTRUCTOR_FINISH(self) self->ob_type->tp_free((PyObject*)self);
 
-static PyTypeObject RangeType;
+#define WIN_PYTHON_REF(win) win->w_python_ref
+#define BUF_PYTHON_REF(buf) buf->b_python_ref
+#define TAB_PYTHON_REF(tab) tab->tp_python_ref
+
+static PyObject *OutputGetattr(PyObject *, char *);
+static PyObject *BufferGetattr(PyObject *, char *);
+static PyObject *WindowGetattr(PyObject *, char *);
+static PyObject *TabPageGetattr(PyObject *, char *);
+static PyObject *RangeGetattr(PyObject *, char *);
+static PyObject *DictionaryGetattr(PyObject *, char*);
+static PyObject *ListGetattr(PyObject *, char *);
+static PyObject *FunctionGetattr(PyObject *, char *);
+
+#ifndef Py_VISIT
+# define Py_VISIT(obj) visit(obj, arg)
+#endif
+#ifndef Py_CLEAR
+# define Py_CLEAR(obj) \
+    { \
+       Py_XDECREF(obj); \
+       obj = NULL; \
+    }
+#endif
+
+#if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+    static void *
+py_memsave(void *p, size_t len)
+{
+    void       *r;
+
+    if (!(r = PyMem_Malloc(len)))
+       return NULL;
+    mch_memmove(r, p, len);
+    return r;
+}
+
+# define PY_STRSAVE(s) ((char_u *) py_memsave(s, STRLEN(s) + 1))
+#endif
 
 /*
  * Include the code shared with if_python3.c
@@ -434,35 +805,19 @@ static PyTypeObject RangeType;
  * Internal function prototypes.
  */
 
-static PyInt RangeStart;
-static PyInt RangeEnd;
-
-static void PythonIO_Flush(void);
-static int PythonIO_Init(void);
 static int PythonMod_Init(void);
 
-/* Utility functions for the vim/python interface
- * ----------------------------------------------
- */
-
-static int SetBufferLineList(buf_T *, PyInt, PyInt, PyObject *, PyInt *);
-
 
 /******************************************************
  * 1. Python interpreter main program.
  */
 
-static int initialised = 0;
-
 #if PYTHON_API_VERSION < 1007 /* Python 1.4 */
 typedef PyObject PyThreadState;
 #endif
 
-#ifdef PY_CAN_RECURSE
-static PyGILState_STATE pygilstate = PyGILState_UNLOCKED;
-#else
+#ifndef PY_CAN_RECURSE
 static PyThreadState *saved_python_thread = NULL;
-#endif
 
 /*
  * Suspend a thread of the Python interpreter, other threads are allowed to
@@ -471,11 +826,7 @@ static PyThreadState *saved_python_thread = NULL;
     static void
 Python_SaveThread(void)
 {
-#ifdef PY_CAN_RECURSE
-    PyGILState_Release(pygilstate);
-#else
     saved_python_thread = PyEval_SaveThread();
-#endif
 }
 
 /*
@@ -485,13 +836,10 @@ Python_SaveThread(void)
     static void
 Python_RestoreThread(void)
 {
-#ifdef PY_CAN_RECURSE
-    pygilstate = PyGILState_Ensure();
-#else
     PyEval_RestoreThread(saved_python_thread);
     saved_python_thread = NULL;
-#endif
 }
+#endif
 
     void
 python_end()
@@ -507,14 +855,22 @@ python_end()
 #ifdef DYNAMIC_PYTHON
     if (hinstPython && Py_IsInitialized())
     {
+# ifdef PY_CAN_RECURSE
+       PyGILState_Ensure();
+# else
        Python_RestoreThread();     /* enter python */
+# endif
        Py_Finalize();
     }
     end_dynamic_python();
 #else
     if (Py_IsInitialized())
     {
+# ifdef PY_CAN_RECURSE
+       PyGILState_Ensure();
+# else
        Python_RestoreThread();     /* enter python */
+# endif
        Py_Finalize();
     }
 #endif
@@ -543,6 +899,10 @@ Python_Init(void)
        }
 #endif
 
+#ifdef PYTHON_HOME
+       Py_SetPythonHome(PYTHON_HOME);
+#endif
+
        init_structs();
 
 #if !defined(MACOS) || defined(MACOS_X_UNIX)
@@ -550,27 +910,40 @@ Python_Init(void)
 #else
        PyMac_Initialize();
 #endif
-       /* initialise threads */
+       /* Initialise threads, and below save the state using
+        * PyEval_SaveThread.  Without the call to PyEval_SaveThread, thread
+        * specific state (such as the system trace hook), will be lost
+        * between invocations of Python code. */
        PyEval_InitThreads();
-
 #ifdef DYNAMIC_PYTHON
        get_exceptions();
 #endif
 
-       if (PythonIO_Init())
+       if (PythonIO_Init_io())
            goto fail;
 
        if (PythonMod_Init())
            goto fail;
 
+       globals = PyModule_GetDict(PyImport_AddModule("__main__"));
+
        /* Remove the element from sys.path that was added because of our
         * argv[0] value in PythonMod_Init().  Previously we used an empty
-        * string, but dependinding on the OS we then get an empty entry or
+        * string, but depending on the OS we then get an empty entry or
         * the current directory in sys.path. */
        PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)");
 
-       /* the first python thread is vim's, release the lock */
-       Python_SaveThread();
+       /* lock is created and acquired in PyEval_InitThreads() and thread
+        * state is created in Py_Initialize()
+        * there _PyGILState_NoteThreadState() also sets gilcounter to 1
+        * (python must have threads enabled!)
+        * so the following does both: unlock GIL and save thread state in TLS
+        * without deleting thread state
+        */
+#ifndef PY_CAN_RECURSE
+       saved_python_thread =
+#endif
+           PyEval_SaveThread();
 
        initialised = 1;
     }
@@ -580,7 +953,7 @@ Python_Init(void)
 fail:
     /* We call PythonIO_Flush() here to print any Python errors.
      * This is OK, as it is possible to call this function even
-     * if PythonIO_Init() has not completed successfully (it will
+     * if PythonIO_Init_io() has not completed successfully (it will
      * not do anything in this case).
      */
     PythonIO_Flush();
@@ -591,7 +964,7 @@ fail:
  * External interface
  */
     static void
-DoPythonCommand(exarg_T *eap, const char *cmd)
+DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg)
 {
 #ifndef PY_CAN_RECURSE
     static int         recursive = 0;
@@ -602,6 +975,9 @@ DoPythonCommand(exarg_T *eap, const char *cmd)
 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
     char               *saved_locale;
 #endif
+#ifdef PY_CAN_RECURSE
+    PyGILState_STATE   pygilstate;
+#endif
 
 #ifndef PY_CAN_RECURSE
     if (recursive)
@@ -621,8 +997,8 @@ DoPythonCommand(exarg_T *eap, const char *cmd)
     if (Python_Init())
        goto theend;
 
-    RangeStart = eap->line1;
-    RangeEnd = eap->line2;
+    init_range(arg);
+
     Python_Release_Vim();          /* leave vim */
 
 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
@@ -633,22 +1009,34 @@ DoPythonCommand(exarg_T *eap, const char *cmd)
     else
     {
        /* Need to make a copy, value may change when setting new locale. */
-       saved_locale = (char *)vim_strsave((char_u *)saved_locale);
+       saved_locale = (char *) PY_STRSAVE(saved_locale);
        (void)setlocale(LC_NUMERIC, "C");
     }
 #endif
 
+#ifdef PY_CAN_RECURSE
+    pygilstate = PyGILState_Ensure();
+#else
     Python_RestoreThread();        /* enter python */
+#endif
 
-    PyRun_SimpleString((char *)(cmd));
+    run((char *) cmd, arg
+#ifdef PY_CAN_RECURSE
+           , &pygilstate
+#endif
+           );
 
+#ifdef PY_CAN_RECURSE
+    PyGILState_Release(pygilstate);
+#else
     Python_SaveThread();           /* leave python */
+#endif
 
 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
     if (saved_locale != NULL)
     {
        (void)setlocale(LC_NUMERIC, saved_locale);
-       vim_free(saved_locale);
+       PyMem_Free(saved_locale);
     }
 #endif
 
@@ -662,7 +1050,7 @@ theend:
 #ifndef PY_CAN_RECURSE
     --recursive;
 #endif
-    return;        /* keeps lint happy */
+    return;
 }
 
 /*
@@ -676,10 +1064,10 @@ ex_python(exarg_T *eap)
     script = script_get(eap, eap->arg);
     if (!eap->skip)
     {
-       if (script == NULL)
-           DoPythonCommand(eap, (char *)eap->arg);
-       else
-           DoPythonCommand(eap, (char *)script);
+       DoPyCommand(script == NULL ? (char *) eap->arg : (char *) script,
+               (rangeinitializer) init_range_cmd,
+               (runner) run_cmd,
+               (void *) eap);
     }
     vim_free(script);
 }
@@ -725,7 +1113,19 @@ ex_pyfile(exarg_T *eap)
     *p++ = '\0';
 
     /* Execute the file */
-    DoPythonCommand(eap, buffer);
+    DoPyCommand(buffer,
+           (rangeinitializer) init_range_cmd,
+           (runner) run_cmd,
+           (void *) eap);
+}
+
+    void
+ex_pydo(exarg_T *eap)
+{
+    DoPyCommand((char *)eap->arg,
+           (rangeinitializer) init_range_cmd,
+           (runner)run_do,
+           (void *)eap);
 }
 
 /******************************************************
@@ -740,44 +1140,12 @@ OutputGetattr(PyObject *self, char *name)
 {
     if (strcmp(name, "softspace") == 0)
        return PyInt_FromLong(((OutputObject *)(self))->softspace);
+    else if (strcmp(name, "__members__") == 0)
+       return ObjectDir(NULL, OutputAttrs);
 
     return Py_FindMethod(OutputMethods, self, name);
 }
 
-    static int
-OutputSetattr(PyObject *self, char *name, PyObject *val)
-{
-    if (val == NULL) {
-       PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
-       return -1;
-    }
-
-    if (strcmp(name, "softspace") == 0)
-    {
-       if (!PyInt_Check(val)) {
-           PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
-           return -1;
-       }
-
-       ((OutputObject *)(self))->softspace = PyInt_AsLong(val);
-       return 0;
-    }
-
-    PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
-    return -1;
-}
-
-/***************/
-
-    static int
-PythonIO_Init(void)
-{
-    /* Fixups... */
-    OutputType.ob_type = &PyType_Type;
-
-    return PythonIO_Init_io();
-}
-
 /******************************************************
  * 3. Implementation of the Vim module for Python
  */
@@ -788,22 +1156,12 @@ PythonIO_Init(void)
 
 #define WindowType_Check(obj) ((obj)->ob_type == &WindowType)
 
-static void WindowDestructor(PyObject *);
-static PyObject *WindowGetattr(PyObject *, char *);
-
 /* Buffer type - Implementation functions
  * --------------------------------------
  */
 
 #define BufferType_Check(obj) ((obj)->ob_type == &BufferType)
 
-static void BufferDestructor(PyObject *);
-static PyObject *BufferGetattr(PyObject *, char *);
-static PyObject *BufferRepr(PyObject *);
-
-static PyInt BufferLength(PyObject *);
-static PyObject *BufferItem(PyObject *, PyInt);
-static PyObject *BufferSlice(PyObject *, PyInt, PyInt);
 static PyInt BufferAssItem(PyObject *, PyInt, PyObject *);
 static PyInt BufferAssSlice(PyObject *, PyInt, PyInt, PyObject *);
 
@@ -820,239 +1178,72 @@ static PyInt RangeAssSlice(PyObject *, PyInt, PyInt, PyObject *);
  * -----------------------------------------------
  */
 
-static PyObject *CurrentGetattr(PyObject *, char *);
-static int CurrentSetattr(PyObject *, char *, PyObject *);
-
-/* Common routines for buffers and line ranges
- * -------------------------------------------
- */
-
-    static PyInt
-RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
-{
-    PyInt size;
-    PyInt len_change;
-
-    /* Self must be a valid buffer */
-    if (CheckBuffer(self))
-       return -1;
-
-    /* Sort out the slice range */
-    size = end - start + 1;
-
-    if (lo < 0)
-       lo = 0;
-    else if (lo > size)
-       lo = size;
-    if (hi < 0)
-       hi = 0;
-    if (hi < lo)
-       hi = lo;
-    else if (hi > size)
-       hi = size;
-
-    if (SetBufferLineList(self->buf, lo + start, hi + start,
-                                                   val, &len_change) == FAIL)
-       return -1;
-
-    if (new_end)
-       *new_end = end + len_change;
-
-    return 0;
-}
-
 static PySequenceMethods BufferAsSeq = {
     (PyInquiry)                BufferLength,       /* sq_length,    len(x)   */
-    (binaryfunc)       0, /* BufferConcat, */       /* sq_concat,    x+y      */
-    (PyIntArgFunc)     0, /* BufferRepeat, */       /* sq_repeat,    x*n      */
+    (binaryfunc)       0,                  /* BufferConcat, sq_concat, x+y */
+    (PyIntArgFunc)     0,                  /* BufferRepeat, sq_repeat, x*n */
     (PyIntArgFunc)     BufferItem,         /* sq_item,      x[i]     */
     (PyIntIntArgFunc)  BufferSlice,        /* sq_slice,     x[i:j]   */
     (PyIntObjArgProc)  BufferAssItem,      /* sq_ass_item,  x[i]=v   */
-    (PyIntIntObjArgProc)       BufferAssSlice,     /* sq_ass_slice, x[i:j]=v */
-};
-
-static PyTypeObject BufferType = {
-    PyObject_HEAD_INIT(0)
-    0,
-    "buffer",
-    sizeof(BufferObject),
+    (PyIntIntObjArgProc) BufferAssSlice,    /* sq_ass_slice, x[i:j]=v */
+    (objobjproc)       0,
+    (binaryfunc)       0,
     0,
-
-    (destructor)    BufferDestructor,  /* tp_dealloc,  refcount==0  */
-    (printfunc)     0,                 /* tp_print,    print x      */
-    (getattrfunc)   BufferGetattr,     /* tp_getattr,  x.attr       */
-    (setattrfunc)   0,                 /* tp_setattr,  x.attr=v     */
-    (cmpfunc)      0,                  /* tp_compare,  x>y          */
-    (reprfunc)     BufferRepr,         /* tp_repr,     `x`, print x */
-
-    0,             /* as number */
-    &BufferAsSeq,   /* as sequence */
-    0,             /* as mapping */
-
-    (hashfunc) 0,                      /* tp_hash, dict(x) */
-    (ternaryfunc) 0,                   /* tp_call, x()     */
-    (reprfunc) 0,                      /* tp_str,  str(x)  */
 };
 
 /* Buffer object - Implementation
  */
 
     static PyObject *
-BufferNew(buf_T *buf)
-{
-    /* We need to handle deletion of buffers underneath us.
-     * If we add a "b_python_ref" field to the buf_T structure,
-     * then we can get at it in buf_freeall() in vim. We then
-     * need to create only ONE Python object per buffer - if
-     * we try to create a second, just INCREF the existing one
-     * and return it. The (single) Python object referring to
-     * the buffer is stored in "b_python_ref".
-     * Question: what to do on a buf_freeall(). We'll probably
-     * have to either delete the Python object (DECREF it to
-     * zero - a bad idea, as it leaves dangling refs!) or
-     * set the buf_T * value to an invalid value (-1?), which
-     * means we need checks in all access functions... Bah.
-     */
-
-    BufferObject *self;
-
-    if (buf->b_python_ref != NULL)
-    {
-       self = buf->b_python_ref;
-       Py_INCREF(self);
-    }
-    else
-    {
-       self = PyObject_NEW(BufferObject, &BufferType);
-       if (self == NULL)
-           return NULL;
-       self->buf = buf;
-       buf->b_python_ref = self;
-    }
-
-    return (PyObject *)(self);
-}
-
-    static void
-BufferDestructor(PyObject *self)
-{
-    BufferObject *this = (BufferObject *)(self);
-
-    if (this->buf && this->buf != INVALID_BUFFER_VALUE)
-       this->buf->b_python_ref = NULL;
-
-    Py_DECREF(self);
-}
-
-    static PyObject *
 BufferGetattr(PyObject *self, char *name)
 {
-    BufferObject *this = (BufferObject *)(self);
+    PyObject *r;
 
-    if (CheckBuffer(this))
+    if ((r = BufferAttrValid((BufferObject *)(self), name)))
+       return r;
+
+    if (CheckBuffer((BufferObject *)(self)))
        return NULL;
 
-    if (strcmp(name, "name") == 0)
-       return Py_BuildValue("s", this->buf->b_ffname);
-    else if (strcmp(name, "number") == 0)
-       return Py_BuildValue(Py_ssize_t_fmt, this->buf->b_fnum);
-    else if (strcmp(name,"__members__") == 0)
-       return Py_BuildValue("[ss]", "name", "number");
+    r = BufferAttr((BufferObject *)(self), name);
+    if (r || PyErr_Occurred())
+       return r;
     else
        return Py_FindMethod(BufferMethods, self, name);
 }
 
-    static PyObject *
-BufferRepr(PyObject *self)
-{
-    static char repr[100];
-    BufferObject *this = (BufferObject *)(self);
-
-    if (this->buf == INVALID_BUFFER_VALUE)
-    {
-       vim_snprintf(repr, 100, _("<buffer object (deleted) at %p>"), (self));
-       return PyString_FromString(repr);
-    }
-    else
-    {
-       char *name = (char *)this->buf->b_fname;
-       PyInt len;
-
-       if (name == NULL)
-           name = "";
-       len = strlen(name);
-
-       if (len > 35)
-           name = name + (35 - len);
-
-       vim_snprintf(repr, 100, "<buffer %s%s>", len > 35 ? "..." : "", name);
-
-       return PyString_FromString(repr);
-    }
-}
-
 /******************/
 
     static PyInt
-BufferLength(PyObject *self)
-{
-    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
-    if (CheckBuffer((BufferObject *)(self)))
-       return -1; /* ??? */
-
-    return (((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
-
-    static PyObject *
-BufferItem(PyObject *self, PyInt n)
-{
-    return RBItem((BufferObject *)(self), n, 1,
-                 (int)((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
-
-    static PyObject *
-BufferSlice(PyObject *self, PyInt lo, PyInt hi)
-{
-    return RBSlice((BufferObject *)(self), lo, hi, 1,
-                  (int)((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
-
-    static PyInt
 BufferAssItem(PyObject *self, PyInt n, PyObject *val)
 {
-    return RBAsItem((BufferObject *)(self), n, val, 1,
-                    (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
-                    NULL);
+    return RBAsItem((BufferObject *)(self), n, val, 1, -1, NULL);
 }
 
     static PyInt
 BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
 {
-    return RBAssSlice((BufferObject *)(self), lo, hi, val, 1,
-                     (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
-                     NULL);
+    return RBAsSlice((BufferObject *)(self), lo, hi, val, 1, -1, NULL);
 }
 
 static PySequenceMethods RangeAsSeq = {
-    (PyInquiry)                RangeLength,        /* sq_length,    len(x)   */
-    (binaryfunc)       0, /* RangeConcat, */        /* sq_concat,    x+y      */
-    (PyIntArgFunc)     0, /* RangeRepeat, */        /* sq_repeat,    x*n      */
-    (PyIntArgFunc)     RangeItem,          /* sq_item,      x[i]     */
-    (PyIntIntArgFunc)  RangeSlice,         /* sq_slice,     x[i:j]   */
-    (PyIntObjArgProc)  RangeAssItem,       /* sq_ass_item,  x[i]=v   */
-    (PyIntIntObjArgProc)       RangeAssSlice,      /* sq_ass_slice, x[i:j]=v */
+    (PyInquiry)                RangeLength,          /* sq_length,    len(x)   */
+    (binaryfunc)       0, /* RangeConcat, */ /* sq_concat,    x+y      */
+    (PyIntArgFunc)     0, /* RangeRepeat, */ /* sq_repeat,    x*n      */
+    (PyIntArgFunc)     RangeItem,            /* sq_item,      x[i]     */
+    (PyIntIntArgFunc)  RangeSlice,           /* sq_slice,     x[i:j]   */
+    (PyIntObjArgProc)  RangeAssItem,         /* sq_ass_item,  x[i]=v   */
+    (PyIntIntObjArgProc) RangeAssSlice,              /* sq_ass_slice, x[i:j]=v */
+    (objobjproc)       0,
+#if PY_MAJOR_VERSION >= 2
+    (binaryfunc)       0,
+    0,
+#endif
 };
 
 /* Line range object - Implementation
  */
 
-    static void
-RangeDestructor(PyObject *self)
-{
-    Py_DECREF(((RangeObject *)(self))->buf);
-    Py_DECREF(self);
-}
-
     static PyObject *
 RangeGetattr(PyObject *self, char *name)
 {
@@ -1060,6 +1251,8 @@ RangeGetattr(PyObject *self, char *name)
        return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->start - 1);
     else if (strcmp(name, "end") == 0)
        return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->end - 1);
+    else if (strcmp(name, "__members__") == 0)
+       return ObjectDir(NULL, RangeAttrs);
     else
        return Py_FindMethod(RangeMethods, self, name);
 }
@@ -1078,283 +1271,101 @@ RangeAssItem(PyObject *self, PyInt n, PyObject *val)
     static PyInt
 RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
 {
-    return RBAssSlice(((RangeObject *)(self))->buf, lo, hi, val,
+    return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
                      ((RangeObject *)(self))->start,
                      ((RangeObject *)(self))->end,
                      &((RangeObject *)(self))->end);
 }
 
-/* Buffer list object - Definitions
- */
-
-typedef struct
-{
-    PyObject_HEAD
-} BufListObject;
-
-static PySequenceMethods BufListAsSeq = {
-    (PyInquiry)                BufListLength,      /* sq_length,    len(x)   */
-    (binaryfunc)       0,                  /* sq_concat,    x+y      */
-    (PyIntArgFunc)     0,                  /* sq_repeat,    x*n      */
-    (PyIntArgFunc)     BufListItem,        /* sq_item,      x[i]     */
-    (PyIntIntArgFunc)  0,                  /* sq_slice,     x[i:j]   */
-    (PyIntObjArgProc)  0,                  /* sq_ass_item,  x[i]=v   */
-    (PyIntIntObjArgProc)       0,                  /* sq_ass_slice, x[i:j]=v */
-};
-
-static PyTypeObject BufListType = {
-    PyObject_HEAD_INIT(0)
-    0,
-    "buffer list",
-    sizeof(BufListObject),
-    0,
-
-    (destructor)    0,                 /* tp_dealloc,  refcount==0  */
-    (printfunc)     0,                 /* tp_print,    print x      */
-    (getattrfunc)   0,                 /* tp_getattr,  x.attr       */
-    (setattrfunc)   0,                 /* tp_setattr,  x.attr=v     */
-    (cmpfunc)      0,                  /* tp_compare,  x>y          */
-    (reprfunc)     0,                  /* tp_repr,     `x`, print x */
-
-    0,             /* as number */
-    &BufListAsSeq,  /* as sequence */
-    0,             /* as mapping */
-
-    (hashfunc) 0,                      /* tp_hash, dict(x) */
-    (ternaryfunc) 0,                   /* tp_call, x()     */
-    (reprfunc) 0,                      /* tp_str,  str(x)  */
-};
-
-/* Window object - Definitions
- */
-
-static struct PyMethodDef WindowMethods[] = {
-    /* name,       function,           calling,    documentation */
-    { NULL,        NULL,               0,          NULL }
-};
-
-static PyTypeObject WindowType = {
-    PyObject_HEAD_INIT(0)
-    0,
-    "window",
-    sizeof(WindowObject),
-    0,
-
-    (destructor)    WindowDestructor,  /* tp_dealloc,  refcount==0  */
-    (printfunc)     0,                 /* tp_print,    print x      */
-    (getattrfunc)   WindowGetattr,     /* tp_getattr,  x.attr       */
-    (setattrfunc)   WindowSetattr,     /* tp_setattr,  x.attr=v     */
-    (cmpfunc)      0,                  /* tp_compare,  x>y          */
-    (reprfunc)     WindowRepr,         /* tp_repr,     `x`, print x */
-
-    0,             /* as number */
-    0,             /* as sequence */
-    0,             /* as mapping */
-
-    (hashfunc) 0,                      /* tp_hash, dict(x) */
-    (ternaryfunc) 0,                   /* tp_call, x()     */
-    (reprfunc) 0,                      /* tp_str,  str(x)  */
-};
-
-/* Window object - Implementation
+/* TabPage object - Implementation
  */
 
     static PyObject *
-WindowNew(win_T *win)
+TabPageGetattr(PyObject *self, char *name)
 {
-    /* We need to handle deletion of windows underneath us.
-     * If we add a "w_python_ref" field to the win_T structure,
-     * then we can get at it in win_free() in vim. We then
-     * need to create only ONE Python object per window - if
-     * we try to create a second, just INCREF the existing one
-     * and return it. The (single) Python object referring to
-     * the window is stored in "w_python_ref".
-     * On a win_free() we set the Python object's win_T* field
-     * to an invalid value. We trap all uses of a window
-     * object, and reject them if the win_T* field is invalid.
-     */
+    PyObject *r;
 
-    WindowObject *self;
+    if ((r = TabPageAttrValid((TabPageObject *)(self), name)))
+       return r;
 
-    if (win->w_python_ref)
-    {
-       self = win->w_python_ref;
-       Py_INCREF(self);
-    }
-    else
-    {
-       self = PyObject_NEW(WindowObject, &WindowType);
-       if (self == NULL)
-           return NULL;
-       self->win = win;
-       win->w_python_ref = self;
-    }
+    if (CheckTabPage((TabPageObject *)(self)))
+       return NULL;
 
-    return (PyObject *)(self);
+    r = TabPageAttr((TabPageObject *)(self), name);
+    if (r || PyErr_Occurred())
+       return r;
+    else
+       return Py_FindMethod(TabPageMethods, self, name);
 }
 
-    static void
-WindowDestructor(PyObject *self)
-{
-    WindowObject *this = (WindowObject *)(self);
-
-    if (this->win && this->win != INVALID_WINDOW_VALUE)
-       this->win->w_python_ref = NULL;
-
-    Py_DECREF(self);
-}
+/* Window object - Implementation
+ */
 
     static PyObject *
 WindowGetattr(PyObject *self, char *name)
 {
-    WindowObject *this = (WindowObject *)(self);
+    PyObject *r;
 
-    if (CheckWindow(this))
-       return NULL;
+    if ((r = WindowAttrValid((WindowObject *)(self), name)))
+       return r;
 
-    if (strcmp(name, "buffer") == 0)
-       return (PyObject *)BufferNew(this->win->w_buffer);
-    else if (strcmp(name, "cursor") == 0)
-    {
-       pos_T *pos = &this->win->w_cursor;
+    if (CheckWindow((WindowObject *)(self)))
+       return NULL;
 
-       return Py_BuildValue("(ll)", (long)(pos->lnum), (long)(pos->col));
-    }
-    else if (strcmp(name, "height") == 0)
-       return Py_BuildValue("l", (long)(this->win->w_height));
-#ifdef FEAT_VERTSPLIT
-    else if (strcmp(name, "width") == 0)
-       return Py_BuildValue("l", (long)(W_WIDTH(this->win)));
-#endif
-    else if (strcmp(name,"__members__") == 0)
-       return Py_BuildValue("[sss]", "buffer", "cursor", "height");
+    r = WindowAttr((WindowObject *)(self), name);
+    if (r || PyErr_Occurred())
+       return r;
     else
        return Py_FindMethod(WindowMethods, self, name);
 }
 
-/* Window list object - Definitions
+/* Tab page list object - Definitions
  */
 
-typedef struct
-{
-    PyObject_HEAD
-}
-WinListObject;
-
-static PySequenceMethods WinListAsSeq = {
-    (PyInquiry)                WinListLength,      /* sq_length,    len(x)   */
+static PySequenceMethods TabListAsSeq = {
+    (PyInquiry)                TabListLength,      /* sq_length,    len(x)   */
     (binaryfunc)       0,                  /* sq_concat,    x+y      */
     (PyIntArgFunc)     0,                  /* sq_repeat,    x*n      */
-    (PyIntArgFunc)     WinListItem,        /* sq_item,      x[i]     */
+    (PyIntArgFunc)     TabListItem,        /* sq_item,      x[i]     */
     (PyIntIntArgFunc)  0,                  /* sq_slice,     x[i:j]   */
     (PyIntObjArgProc)  0,                  /* sq_ass_item,  x[i]=v   */
-    (PyIntIntObjArgProc)       0,                  /* sq_ass_slice, x[i:j]=v */
-};
-
-static PyTypeObject WinListType = {
-    PyObject_HEAD_INIT(0)
+    (PyIntIntObjArgProc) 0,                /* sq_ass_slice, x[i:j]=v */
+    (objobjproc)       0,
+#if PY_MAJOR_VERSION >= 2
+    (binaryfunc)       0,
     0,
-    "window list",
-    sizeof(WinListObject),
-    0,
-
-    (destructor)    0,                 /* tp_dealloc,  refcount==0  */
-    (printfunc)     0,                 /* tp_print,    print x      */
-    (getattrfunc)   0,                 /* tp_getattr,  x.attr       */
-    (setattrfunc)   0,                 /* tp_setattr,  x.attr=v     */
-    (cmpfunc)      0,                  /* tp_compare,  x>y          */
-    (reprfunc)     0,                  /* tp_repr,     `x`, print x */
-
-    0,             /* as number */
-    &WinListAsSeq,  /* as sequence */
-    0,             /* as mapping */
-
-    (hashfunc) 0,                      /* tp_hash, dict(x) */
-    (ternaryfunc) 0,                   /* tp_call, x()     */
-    (reprfunc) 0,                      /* tp_str,  str(x)  */
+#endif
 };
 
-/* Current items object - Definitions
+/* Window list object - Definitions
  */
 
-typedef struct
-{
-    PyObject_HEAD
-} CurrentObject;
-
-static PyTypeObject CurrentType = {
-    PyObject_HEAD_INIT(0)
-    0,
-    "current data",
-    sizeof(CurrentObject),
+static PySequenceMethods WinListAsSeq = {
+    (PyInquiry)                WinListLength,      /* sq_length,    len(x)   */
+    (binaryfunc)       0,                  /* sq_concat,    x+y      */
+    (PyIntArgFunc)     0,                  /* sq_repeat,    x*n      */
+    (PyIntArgFunc)     WinListItem,        /* sq_item,      x[i]     */
+    (PyIntIntArgFunc)  0,                  /* sq_slice,     x[i:j]   */
+    (PyIntObjArgProc)  0,                  /* sq_ass_item,  x[i]=v   */
+    (PyIntIntObjArgProc) 0,                /* sq_ass_slice, x[i:j]=v */
+    (objobjproc)       0,
+#if PY_MAJOR_VERSION >= 2
+    (binaryfunc)       0,
     0,
-
-    (destructor)    0,                 /* tp_dealloc,  refcount==0  */
-    (printfunc)     0,                 /* tp_print,    print x      */
-    (getattrfunc)   CurrentGetattr,    /* tp_getattr,  x.attr       */
-    (setattrfunc)   CurrentSetattr,    /* tp_setattr,  x.attr=v     */
-    (cmpfunc)      0,                  /* tp_compare,  x>y          */
-    (reprfunc)     0,                  /* tp_repr,     `x`, print x */
-
-    0,             /* as number */
-    0,             /* as sequence */
-    0,             /* as mapping */
-
-    (hashfunc) 0,                      /* tp_hash, dict(x) */
-    (ternaryfunc) 0,                   /* tp_call, x()     */
-    (reprfunc) 0,                      /* tp_str,  str(x)  */
+#endif
 };
 
-/* Current items object - Implementation
- */
-    static PyObject *
-CurrentGetattr(PyObject *self UNUSED, char *name)
-{
-    if (strcmp(name, "buffer") == 0)
-       return (PyObject *)BufferNew(curbuf);
-    else if (strcmp(name, "window") == 0)
-       return (PyObject *)WindowNew(curwin);
-    else if (strcmp(name, "line") == 0)
-       return GetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum);
-    else if (strcmp(name, "range") == 0)
-       return RangeNew(curbuf, RangeStart, RangeEnd);
-    else if (strcmp(name,"__members__") == 0)
-       return Py_BuildValue("[ssss]", "buffer", "window", "line", "range");
-    else
-    {
-       PyErr_SetString(PyExc_AttributeError, name);
-       return NULL;
-    }
-}
-
-    static int
-CurrentSetattr(PyObject *self UNUSED, char *name, PyObject *value)
-{
-    if (strcmp(name, "line") == 0)
-    {
-       if (SetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum, value, NULL) == FAIL)
-           return -1;
-
-       return 0;
-    }
-    else
-    {
-       PyErr_SetString(PyExc_AttributeError, name);
-       return -1;
-    }
-}
-
 /* External interface
  */
 
     void
 python_buffer_free(buf_T *buf)
 {
-    if (buf->b_python_ref != NULL)
+    if (BUF_PYTHON_REF(buf) != NULL)
     {
-       BufferObject *bp = buf->b_python_ref;
+       BufferObject *bp = BUF_PYTHON_REF(buf);
        bp->buf = INVALID_BUFFER_VALUE;
-       buf->b_python_ref = NULL;
+       BUF_PYTHON_REF(buf) = NULL;
     }
 }
 
@@ -1362,60 +1373,45 @@ python_buffer_free(buf_T *buf)
     void
 python_window_free(win_T *win)
 {
-    if (win->w_python_ref != NULL)
+    if (WIN_PYTHON_REF(win) != NULL)
     {
-       WindowObject *wp = win->w_python_ref;
+       WindowObject *wp = WIN_PYTHON_REF(win);
        wp->win = INVALID_WINDOW_VALUE;
-       win->w_python_ref = NULL;
+       WIN_PYTHON_REF(win) = NULL;
     }
 }
-#endif
-
-static BufListObject TheBufferList =
-{
-    PyObject_HEAD_INIT(&BufListType)
-};
-
-static WinListObject TheWindowList =
-{
-    PyObject_HEAD_INIT(&WinListType)
-};
 
-static CurrentObject TheCurrent =
+    void
+python_tabpage_free(tabpage_T *tab)
 {
-    PyObject_HEAD_INIT(&CurrentType)
-};
+    if (TAB_PYTHON_REF(tab) != NULL)
+    {
+       TabPageObject *tp = TAB_PYTHON_REF(tab);
+       tp->tab = INVALID_TABPAGE_VALUE;
+       TAB_PYTHON_REF(tab) = NULL;
+    }
+}
+#endif
 
     static int
 PythonMod_Init(void)
 {
-    PyObject *mod;
-    PyObject *dict;
     /* The special value is removed from sys.path in Python_Init(). */
-    static char *(argv[2]) = {"/must>not&exist/foo", NULL};
+    static char        *(argv[2]) = {"/must>not&exist/foo", NULL};
 
-    /* Fixups... */
-    BufferType.ob_type = &PyType_Type;
-    RangeType.ob_type = &PyType_Type;
-    WindowType.ob_type = &PyType_Type;
-    BufListType.ob_type = &PyType_Type;
-    WinListType.ob_type = &PyType_Type;
-    CurrentType.ob_type = &PyType_Type;
+    if (init_types())
+       return -1;
 
     /* Set sys.argv[] to avoid a crash in warn(). */
     PySys_SetArgv(1, argv);
 
-    mod = Py_InitModule4("vim", VimMethods, (char *)NULL, (PyObject *)NULL, PYTHON_API_VERSION);
-    dict = PyModule_GetDict(mod);
+    vim_module = Py_InitModule4("vim", VimMethods, (char *)NULL,
+                               (PyObject *)NULL, PYTHON_API_VERSION);
 
-    VimError = Py_BuildValue("s", "vim.error");
-
-    PyDict_SetItemString(dict, "error", VimError);
-    PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferList);
-    PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent);
-    PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList);
+    if (populate_module(vim_module))
+       return -1;
 
-    if (PyErr_Occurred())
+    if (init_sys_path())
        return -1;
 
     return 0;
@@ -1425,194 +1421,6 @@ PythonMod_Init(void)
  * 4. Utility functions for handling the interface between Vim and Python.
  */
 
-/* Replace a range of lines in the specified buffer. The line numbers are in
- * Vim format (1-based). The range is from lo up to, but not including, hi.
- * The replacement lines are given as a Python list of string objects. The
- * list is checked for validity and correct format. Errors are returned as a
- * value of FAIL.  The return value is OK on success.
- * If OK is returned and len_change is not NULL, *len_change
- * is set to the change in the buffer length.
- */
-    static int
-SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
-{
-    /* First of all, we check the thpe of the supplied Python object.
-     * There are three cases:
-     *   1. NULL, or None - this is a deletion.
-     *   2. A list        - this is a replacement.
-     *   3. Anything else - this is an error.
-     */
-    if (list == Py_None || list == NULL)
-    {
-       PyInt   i;
-       PyInt   n = (int)(hi - lo);
-       buf_T   *savebuf = curbuf;
-
-       PyErr_Clear();
-       curbuf = buf;
-
-       if (u_savedel((linenr_T)lo, (long)n) == FAIL)
-           PyErr_SetVim(_("cannot save undo information"));
-       else
-       {
-           for (i = 0; i < n; ++i)
-           {
-               if (ml_delete((linenr_T)lo, FALSE) == FAIL)
-               {
-                   PyErr_SetVim(_("cannot delete line"));
-                   break;
-               }
-           }
-           if (buf == curwin->w_buffer)
-               py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
-           deleted_lines_mark((linenr_T)lo, (long)i);
-       }
-
-       curbuf = savebuf;
-
-       if (PyErr_Occurred() || VimErrorCheck())
-           return FAIL;
-
-       if (len_change)
-           *len_change = -n;
-
-       return OK;
-    }
-    else if (PyList_Check(list))
-    {
-       PyInt   i;
-       PyInt   new_len = PyList_Size(list);
-       PyInt   old_len = hi - lo;
-       PyInt   extra = 0;      /* lines added to text, can be negative */
-       char    **array;
-       buf_T   *savebuf;
-
-       if (new_len == 0)       /* avoid allocating zero bytes */
-           array = NULL;
-       else
-       {
-           array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
-           if (array == NULL)
-           {
-               PyErr_NoMemory();
-               return FAIL;
-           }
-       }
-
-       for (i = 0; i < new_len; ++i)
-       {
-           PyObject *line = PyList_GetItem(list, i);
-
-           array[i] = StringToLine(line);
-           if (array[i] == NULL)
-           {
-               while (i)
-                   vim_free(array[--i]);
-               vim_free(array);
-               return FAIL;
-           }
-       }
-
-       savebuf = curbuf;
-
-       PyErr_Clear();
-       curbuf = buf;
-
-       if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
-           PyErr_SetVim(_("cannot save undo information"));
-
-       /* If the size of the range is reducing (ie, new_len < old_len) we
-        * need to delete some old_len. We do this at the start, by
-        * repeatedly deleting line "lo".
-        */
-       if (!PyErr_Occurred())
-       {
-           for (i = 0; i < old_len - new_len; ++i)
-               if (ml_delete((linenr_T)lo, FALSE) == FAIL)
-               {
-                   PyErr_SetVim(_("cannot delete line"));
-                   break;
-               }
-           extra -= i;
-       }
-
-       /* For as long as possible, replace the existing old_len with the
-        * new old_len. This is a more efficient operation, as it requires
-        * less memory allocation and freeing.
-        */
-       if (!PyErr_Occurred())
-       {
-           for (i = 0; i < old_len && i < new_len; ++i)
-               if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
-                                                                     == FAIL)
-               {
-                   PyErr_SetVim(_("cannot replace line"));
-                   break;
-               }
-       }
-       else
-           i = 0;
-
-       /* Now we may need to insert the remaining new old_len. If we do, we
-        * must free the strings as we finish with them (we can't pass the
-        * responsibility to vim in this case).
-        */
-       if (!PyErr_Occurred())
-       {
-           while (i < new_len)
-           {
-               if (ml_append((linenr_T)(lo + i - 1),
-                                       (char_u *)array[i], 0, FALSE) == FAIL)
-               {
-                   PyErr_SetVim(_("cannot insert line"));
-                   break;
-               }
-               vim_free(array[i]);
-               ++i;
-               ++extra;
-           }
-       }
-
-       /* Free any left-over old_len, as a result of an error */
-       while (i < new_len)
-       {
-           vim_free(array[i]);
-           ++i;
-       }
-
-       /* Free the array of old_len. All of its contents have now
-        * been dealt with (either freed, or the responsibility passed
-        * to vim.
-        */
-       vim_free(array);
-
-       /* Adjust marks. Invalidate any which lie in the
-        * changed range, and move any in the remainder of the buffer.
-        */
-       mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
-                                                 (long)MAXLNUM, (long)extra);
-       changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
-
-       if (buf == curwin->w_buffer)
-           py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
-
-       curbuf = savebuf;
-
-       if (PyErr_Occurred() || VimErrorCheck())
-           return FAIL;
-
-       if (len_change)
-           *len_change = new_len - old_len;
-
-       return OK;
-    }
-    else
-    {
-       PyErr_BadArgument();
-       return FAIL;
-    }
-}
-
 /* Convert a Vim line into a Python string.
  * All internal newlines are replaced by null characters.
  *
@@ -1649,6 +1457,78 @@ LineToString(const char *str)
     return result;
 }
 
+    static PyObject *
+DictionaryGetattr(PyObject *self, char *name)
+{
+    DictionaryObject   *this = ((DictionaryObject *) (self));
+
+    if (strcmp(name, "locked") == 0)
+       return PyInt_FromLong(this->dict->dv_lock);
+    else if (strcmp(name, "scope") == 0)
+       return PyInt_FromLong(this->dict->dv_scope);
+    else if (strcmp(name, "__members__") == 0)
+       return ObjectDir(NULL, DictionaryAttrs);
+
+    return Py_FindMethod(DictionaryMethods, self, name);
+}
+
+static PySequenceMethods ListAsSeq = {
+    (PyInquiry)                        ListLength,
+    (binaryfunc)               0,
+    (PyIntArgFunc)             0,
+    (PyIntArgFunc)             ListItem,
+    (PyIntIntArgFunc)          ListSlice,
+    (PyIntObjArgProc)          ListAssItem,
+    (PyIntIntObjArgProc)       ListAssSlice,
+    (objobjproc)               0,
+#if PY_MAJOR_VERSION >= 2
+    (binaryfunc)               ListConcatInPlace,
+    0,
+#endif
+};
+
+    static PyObject *
+ListGetattr(PyObject *self, char *name)
+{
+    if (strcmp(name, "locked") == 0)
+       return PyInt_FromLong(((ListObject *)(self))->list->lv_lock);
+    else if (strcmp(name, "__members__") == 0)
+       return ObjectDir(NULL, ListAttrs);
+
+    return Py_FindMethod(ListMethods, self, name);
+}
+
+    static PyObject *
+FunctionGetattr(PyObject *self, char *name)
+{
+    FunctionObject     *this = (FunctionObject *)(self);
+
+    if (strcmp(name, "name") == 0)
+       return PyString_FromString((char *)(this->name));
+    else if (strcmp(name, "__members__") == 0)
+       return ObjectDir(NULL, FunctionAttrs);
+    else
+       return Py_FindMethod(FunctionMethods, self, name);
+}
+
+    void
+do_pyeval (char_u *str, typval_T *rettv)
+{
+    DoPyCommand((char *) str,
+           (rangeinitializer) init_range_eval,
+           (runner) run_eval,
+           (void *) rettv);
+    switch(rettv->v_type)
+    {
+       case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
+       case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
+       case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
+       case VAR_UNKNOWN:
+           rettv->v_type = VAR_NUMBER;
+           rettv->vval.v_number = 0;
+           break;
+    }
+}
 
 /* Don't generate a prototype for the next function, it generates an error on
  * newer Python versions. */
@@ -1661,20 +1541,8 @@ Py_GetProgramName(void)
 }
 #endif /* Python 1.4 */
 
-    static void
-init_structs(void)
+    void
+set_ref_in_python (int copyID)
 {
-    vim_memset(&OutputType, 0, sizeof(OutputType));
-    OutputType.tp_name = "message";
-    OutputType.tp_basicsize = sizeof(OutputObject);
-    OutputType.tp_getattr = OutputGetattr;
-    OutputType.tp_setattr = OutputSetattr;
-
-    vim_memset(&RangeType, 0, sizeof(RangeType));
-    RangeType.tp_name = "range";
-    RangeType.tp_basicsize = sizeof(RangeObject);
-    RangeType.tp_dealloc = RangeDestructor;
-    RangeType.tp_getattr = RangeGetattr;
-    RangeType.tp_repr = RangeRepr;
-    RangeType.tp_as_sequence = &RangeAsSeq;
+    set_ref_in_py(copyID);
 }
index 4aa7edf..8a5b332 100644 (file)
  * Adaptations to support both python3.x and python2.x
  */
 
-// uncomment this if used with the debug version of python
-// #define Py_DEBUG
+/* uncomment this if used with the debug version of python */
+/* #define Py_DEBUG */
+/* Note: most of time you can add -DPy_DEBUG to CFLAGS in place of uncommenting
+ */
+/* uncomment this if used with the debug version of python, but without its
+ * allocator */
+/* #define Py_DEBUG_NO_PYMALLOC */
 
 #include "vim.h"
 
@@ -42,8 +47,6 @@
 # undef _DEBUG
 #endif
 
-#define PY_SSIZE_T_CLEAN
-
 #ifdef F_BLANK
 # undef F_BLANK
 #endif
 # undef _XOPEN_SOURCE  /* pyconfig.h defines it as well. */
 #endif
 
+#define PY_SSIZE_T_CLEAN
+
 #include <Python.h>
+
 #if defined(MACOS) && !defined(MACOS_X_UNIX)
 # include "macglue.h"
 # include <CodeFragments.h>
 #undef main /* Defined in python.h - aargh */
 #undef HAVE_FCNTL_H /* Clash with os_win32.h */
 
-static void init_structs(void);
+/* The "surrogateescape" error handler is new in Python 3.1 */
+#if PY_VERSION_HEX >= 0x030100f0
+# define CODEC_ERROR_HANDLER "surrogateescape"
+#else
+# define CODEC_ERROR_HANDLER NULL
+#endif
+
+/* Python 3 does not support CObjects, always use Capsules */
+#define PY_USE_CAPSULE
 
 #define PyInt Py_ssize_t
-#define PyString_Check(obj) PyUnicode_Check(obj)
-#define PyString_AsString(obj) _PyUnicode_AsString(obj)
-#define PyString_Size(obj) PyUnicode_GET_SIZE(obj)
-#define PyString_FromString(repr) PyUnicode_FromString(repr)
+#ifndef PyString_Check
+# define PyString_Check(obj) PyUnicode_Check(obj)
+#endif
+#define PyString_FromString(repr) \
+    PyUnicode_Decode(repr, STRLEN(repr), ENC_OPT, NULL)
+#define PyString_FromFormat PyUnicode_FromFormat
+#ifndef PyInt_Check
+# define PyInt_Check(obj) PyLong_Check(obj)
+#endif
+#define PyInt_FromLong(i) PyLong_FromLong(i)
+#define PyInt_AsLong(obj) PyLong_AsLong(obj)
+#define Py_ssize_t_fmt "n"
+#define Py_bytes_fmt "y"
 
-#if defined(DYNAMIC_PYTHON3)
+#if defined(DYNAMIC_PYTHON3) || defined(PROTO)
 
 # ifndef WIN3264
 #  include <dlfcn.h>
 #  define FARPROC void*
 #  define HINSTANCE void*
-#  ifdef PY_NO_RTLD_GLOBAL
+#  if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)
 #   define load_dll(n) dlopen((n), RTLD_LAZY)
 #  else
 #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
@@ -88,7 +111,7 @@ static void init_structs(void);
 #  define close_dll dlclose
 #  define symbol_from_dll dlsym
 # else
-#  define load_dll LoadLibrary
+#  define load_dll vimLoadLib
 #  define close_dll FreeLibrary
 #  define symbol_from_dll GetProcAddress
 # endif
@@ -99,13 +122,19 @@ static void init_structs(void);
 # define PyArg_Parse py3_PyArg_Parse
 # undef PyArg_ParseTuple
 # define PyArg_ParseTuple py3_PyArg_ParseTuple
+# define PyMem_Free py3_PyMem_Free
+# define PyMem_Malloc py3_PyMem_Malloc
 # define PyDict_SetItemString py3_PyDict_SetItemString
 # define PyErr_BadArgument py3_PyErr_BadArgument
 # define PyErr_Clear py3_PyErr_Clear
+# define PyErr_Format py3_PyErr_Format
+# define PyErr_PrintEx py3_PyErr_PrintEx
 # define PyErr_NoMemory py3_PyErr_NoMemory
 # define PyErr_Occurred py3_PyErr_Occurred
 # define PyErr_SetNone py3_PyErr_SetNone
 # define PyErr_SetString py3_PyErr_SetString
+# define PyErr_SetObject py3_PyErr_SetObject
+# define PyErr_ExceptionMatches py3_PyErr_ExceptionMatches
 # define PyEval_InitThreads py3_PyEval_InitThreads
 # define PyEval_RestoreThread py3_PyEval_RestoreThread
 # define PyEval_SaveThread py3_PyEval_SaveThread
@@ -115,51 +144,125 @@ static void init_structs(void);
 # define PyLong_FromLong py3_PyLong_FromLong
 # define PyList_GetItem py3_PyList_GetItem
 # define PyList_Append py3_PyList_Append
+# define PyList_Insert py3_PyList_Insert
 # define PyList_New py3_PyList_New
 # define PyList_SetItem py3_PyList_SetItem
 # define PyList_Size py3_PyList_Size
+# define PySequence_Check py3_PySequence_Check
+# define PySequence_Size py3_PySequence_Size
+# define PySequence_GetItem py3_PySequence_GetItem
+# define PySequence_Fast py3_PySequence_Fast
+# define PyTuple_Size py3_PyTuple_Size
+# define PyTuple_GetItem py3_PyTuple_GetItem
 # define PySlice_GetIndicesEx py3_PySlice_GetIndicesEx
 # define PyImport_ImportModule py3_PyImport_ImportModule
 # define PyObject_Init py3__PyObject_Init
 # define PyDict_New py3_PyDict_New
 # define PyDict_GetItemString py3_PyDict_GetItemString
+# define PyDict_Next py3_PyDict_Next
+# define PyMapping_Check py3_PyMapping_Check
+# ifndef PyMapping_Keys
+#  define PyMapping_Keys py3_PyMapping_Keys
+# endif
+# define PyIter_Next py3_PyIter_Next
+# define PyObject_GetIter py3_PyObject_GetIter
+# define PyObject_Repr py3_PyObject_Repr
+# define PyObject_GetItem py3_PyObject_GetItem
+# define PyObject_IsTrue py3_PyObject_IsTrue
 # define PyModule_GetDict py3_PyModule_GetDict
 #undef PyRun_SimpleString
 # define PyRun_SimpleString py3_PyRun_SimpleString
+#undef PyRun_String
+# define PyRun_String py3_PyRun_String
+# define PyObject_GetAttrString py3_PyObject_GetAttrString
+# define PyObject_HasAttrString py3_PyObject_HasAttrString
+# define PyObject_SetAttrString py3_PyObject_SetAttrString
+# define PyObject_CallFunctionObjArgs py3_PyObject_CallFunctionObjArgs
+# define _PyObject_CallFunction_SizeT py3__PyObject_CallFunction_SizeT
+# define PyObject_Call py3_PyObject_Call
+# define PyEval_GetLocals py3_PyEval_GetLocals
+# define PyEval_GetGlobals py3_PyEval_GetGlobals
 # define PySys_SetObject py3_PySys_SetObject
+# define PySys_GetObject py3_PySys_GetObject
 # define PySys_SetArgv py3_PySys_SetArgv
-# define PyType_Type (*py3_PyType_Type)
 # define PyType_Ready py3_PyType_Ready
 #undef Py_BuildValue
 # define Py_BuildValue py3_Py_BuildValue
+# define Py_SetPythonHome py3_Py_SetPythonHome
 # define Py_Initialize py3_Py_Initialize
 # define Py_Finalize py3_Py_Finalize
 # define Py_IsInitialized py3_Py_IsInitialized
 # define _Py_NoneStruct (*py3__Py_NoneStruct)
+# define _Py_FalseStruct (*py3__Py_FalseStruct)
+# define _Py_TrueStruct (*py3__Py_TrueStruct)
+# define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented)
 # define PyModule_AddObject py3_PyModule_AddObject
 # define PyImport_AppendInittab py3_PyImport_AppendInittab
-# define _PyUnicode_AsString py3__PyUnicode_AsString
+# define PyImport_AddModule py3_PyImport_AddModule
+# if PY_VERSION_HEX >= 0x030300f0
+#  undef _PyUnicode_AsString
+#  define _PyUnicode_AsString py3_PyUnicode_AsUTF8
+# else
+#  define _PyUnicode_AsString py3__PyUnicode_AsString
+# endif
+# undef PyUnicode_AsEncodedString
+# define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString
+# undef PyBytes_AsString
+# define PyBytes_AsString py3_PyBytes_AsString
+# ifndef PyBytes_AsStringAndSize
+#  define PyBytes_AsStringAndSize py3_PyBytes_AsStringAndSize
+# endif
+# undef PyBytes_FromString
+# define PyBytes_FromString py3_PyBytes_FromString
+# define PyFloat_FromDouble py3_PyFloat_FromDouble
+# define PyFloat_AsDouble py3_PyFloat_AsDouble
 # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
+# define PyType_Type (*py3_PyType_Type)
 # define PySlice_Type (*py3_PySlice_Type)
+# define PyFloat_Type (*py3_PyFloat_Type)
+# define PyNumber_Check (*py3_PyNumber_Check)
+# define PyNumber_Long (*py3_PyNumber_Long)
+# define PyBool_Type (*py3_PyBool_Type)
+# define PyErr_NewException py3_PyErr_NewException
 # ifdef Py_DEBUG
 #  define _Py_NegativeRefcount py3__Py_NegativeRefcount
 #  define _Py_RefTotal (*py3__Py_RefTotal)
 #  define _Py_Dealloc py3__Py_Dealloc
+#  define PyModule_Create2TraceRefs py3_PyModule_Create2TraceRefs
+# else
+#  define PyModule_Create2 py3_PyModule_Create2
+# endif
+# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
 #  define _PyObject_DebugMalloc py3__PyObject_DebugMalloc
 #  define _PyObject_DebugFree py3__PyObject_DebugFree
 # else
 #  define PyObject_Malloc py3_PyObject_Malloc
 #  define PyObject_Free py3_PyObject_Free
 # endif
+# define _PyObject_GC_New py3__PyObject_GC_New
+# define PyObject_GC_Del py3_PyObject_GC_Del
+# define PyObject_GC_UnTrack py3_PyObject_GC_UnTrack
 # define PyType_GenericAlloc py3_PyType_GenericAlloc
 # define PyType_GenericNew py3_PyType_GenericNew
-# define PyModule_Create2 py3_PyModule_Create2
 # undef PyUnicode_FromString
 # define PyUnicode_FromString py3_PyUnicode_FromString
-# undef PyUnicode_FromStringAndSize
-# define PyUnicode_FromStringAndSize py3_PyUnicode_FromStringAndSize
+# ifndef PyUnicode_FromFormat
+#  define PyUnicode_FromFormat py3_PyUnicode_FromFormat
+# else
+#  define Py_UNICODE_USE_UCS_FUNCTIONS
+#  ifdef Py_UNICODE_WIDE
+#   define PyUnicodeUCS4_FromFormat py3_PyUnicodeUCS4_FromFormat
+#  else
+#   define PyUnicodeUCS2_FromFormat py3_PyUnicodeUCS2_FromFormat
+#  endif
+# endif
+# undef PyUnicode_Decode
+# define PyUnicode_Decode py3_PyUnicode_Decode
+# define PyType_IsSubtype py3_PyType_IsSubtype
+# define PyCapsule_New py3_PyCapsule_New
+# define PyCapsule_GetPointer py3_PyCapsule_GetPointer
 
-# ifdef Py_DEBUG
+# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
 #  undef PyObject_NEW
 #  define PyObject_NEW(type, typeobj) \
 ( (type *) PyObject_Init( \
@@ -170,34 +273,72 @@ static void init_structs(void);
  * Pointers for dynamic link
  */
 static int (*py3_PySys_SetArgv)(int, wchar_t **);
+static void (*py3_Py_SetPythonHome)(wchar_t *home);
 static void (*py3_Py_Initialize)(void);
 static PyObject* (*py3_PyList_New)(Py_ssize_t size);
 static PyGILState_STATE (*py3_PyGILState_Ensure)(void);
 static void (*py3_PyGILState_Release)(PyGILState_STATE);
 static int (*py3_PySys_SetObject)(char *, PyObject *);
-static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
+static PyObject* (*py3_PySys_GetObject)(char *);
+static int (*py3_PyList_Append)(PyObject *, PyObject *);
+static int (*py3_PyList_Insert)(PyObject *, int, PyObject *);
 static Py_ssize_t (*py3_PyList_Size)(PyObject *);
-static int (*py3_PySlice_GetIndicesEx)(PySliceObject *r, Py_ssize_t length,
+static int (*py3_PySequence_Check)(PyObject *);
+static Py_ssize_t (*py3_PySequence_Size)(PyObject *);
+static PyObject* (*py3_PySequence_GetItem)(PyObject *, Py_ssize_t);
+static PyObject* (*py3_PySequence_Fast)(PyObject *, const char *);
+static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
+static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
+static int (*py3_PyMapping_Check)(PyObject *);
+static PyObject* (*py3_PyMapping_Keys)(PyObject *);
+static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
                     Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
 static PyObject* (*py3_PyErr_NoMemory)(void);
 static void (*py3_Py_Finalize)(void);
 static void (*py3_PyErr_SetString)(PyObject *, const char *);
+static void (*py3_PyErr_SetObject)(PyObject *, PyObject *);
+static int (*py3_PyErr_ExceptionMatches)(PyObject *);
 static int (*py3_PyRun_SimpleString)(char *);
+static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *);
+static PyObject* (*py3_PyObject_GetAttrString)(PyObject *, const char *);
+static int (*py3_PyObject_HasAttrString)(PyObject *, const char *);
+static PyObject* (*py3_PyObject_SetAttrString)(PyObject *, const char *, PyObject *);
+static PyObject* (*py3_PyObject_CallFunctionObjArgs)(PyObject *, ...);
+static PyObject* (*py3__PyObject_CallFunction_SizeT)(PyObject *, char *, ...);
+static PyObject* (*py3_PyObject_Call)(PyObject *, PyObject *, PyObject *);
+static PyObject* (*py3_PyEval_GetGlobals)();
+static PyObject* (*py3_PyEval_GetLocals)();
 static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t);
 static PyObject* (*py3_PyImport_ImportModule)(const char *);
+static PyObject* (*py3_PyImport_AddModule)(const char *);
 static int (*py3_PyErr_BadArgument)(void);
-static PyTypeObject* py3_PyType_Type;
 static PyObject* (*py3_PyErr_Occurred)(void);
 static PyObject* (*py3_PyModule_GetDict)(PyObject *);
 static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *);
 static PyObject* (*py3_PyDict_GetItemString)(PyObject *, const char *);
+static int (*py3_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **);
 static PyObject* (*py3_PyLong_FromLong)(long);
 static PyObject* (*py3_PyDict_New)(void);
+static PyObject* (*py3_PyIter_Next)(PyObject *);
+static PyObject* (*py3_PyObject_GetIter)(PyObject *);
+static PyObject* (*py3_PyObject_Repr)(PyObject *);
+static PyObject* (*py3_PyObject_GetItem)(PyObject *, PyObject *);
+static int (*py3_PyObject_IsTrue)(PyObject *);
 static PyObject* (*py3_Py_BuildValue)(char *, ...);
 static int (*py3_PyType_Ready)(PyTypeObject *type);
 static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
 static PyObject* (*py3_PyUnicode_FromString)(const char *u);
-static PyObject* (*py3_PyUnicode_FromStringAndSize)(const char *u, Py_ssize_t size);
+# ifndef Py_UNICODE_USE_UCS_FUNCTIONS
+static PyObject* (*py3_PyUnicode_FromFormat)(const char *u, ...);
+# else
+#  ifdef Py_UNICODE_WIDE
+static PyObject* (*py3_PyUnicodeUCS4_FromFormat)(const char *u, ...);
+#  else
+static PyObject* (*py3_PyUnicodeUCS2_FromFormat)(const char *u, ...);
+#  endif
+# endif
+static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size,
+       const char *encoding, const char *errors);
 static long (*py3_PyLong_AsLong)(PyObject *);
 static void (*py3_PyErr_SetNone)(PyObject *);
 static void (*py3_PyEval_InitThreads)(void);
@@ -205,43 +346,86 @@ static void(*py3_PyEval_RestoreThread)(PyThreadState *);
 static PyThreadState*(*py3_PyEval_SaveThread)(void);
 static int (*py3_PyArg_Parse)(PyObject *, char *, ...);
 static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...);
+static int (*py3_PyMem_Free)(void *);
+static void* (*py3_PyMem_Malloc)(size_t);
 static int (*py3_Py_IsInitialized)(void);
 static void (*py3_PyErr_Clear)(void);
+static PyObject* (*py3_PyErr_Format)(PyObject *, const char *, ...);
+static void (*py3_PyErr_PrintEx)(int);
 static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
+static iternextfunc py3__PyObject_NextNotImplemented;
 static PyObject* py3__Py_NoneStruct;
+static PyObject* py3__Py_FalseStruct;
+static PyObject* py3__Py_TrueStruct;
 static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
 static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
+# if PY_VERSION_HEX >= 0x030300f0
+static char* (*py3_PyUnicode_AsUTF8)(PyObject *unicode);
+# else
 static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
+# endif
+static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
+static char* (*py3_PyBytes_AsString)(PyObject *bytes);
+static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, Py_ssize_t *length);
+static PyObject* (*py3_PyBytes_FromString)(char *str);
+static PyObject* (*py3_PyFloat_FromDouble)(double num);
+static double (*py3_PyFloat_AsDouble)(PyObject *);
 static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name);
-static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
 static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems);
 static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
+static PyTypeObject* py3_PyType_Type;
 static PyTypeObject* py3_PySlice_Type;
+static PyTypeObject* py3_PyFloat_Type;
+static PyTypeObject* py3_PyBool_Type;
+static int (*py3_PyNumber_Check)(PyObject *);
+static PyObject* (*py3_PyNumber_Long)(PyObject *);
+static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
+static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
+static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *);
 # ifdef Py_DEBUG
-    static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
-    static Py_ssize_t* py3__Py_RefTotal;
-    static void (*py3__Py_Dealloc)(PyObject *obj);
-    static void (*py3__PyObject_DebugFree)(void*);
-    static void* (*py3__PyObject_DebugMalloc)(size_t);
+static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
+static Py_ssize_t* py3__Py_RefTotal;
+static void (*py3__Py_Dealloc)(PyObject *obj);
+static PyObject* (*py3_PyModule_Create2TraceRefs)(struct PyModuleDef* module, int module_api_version);
+# else
+static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
+# endif
+# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+static void (*py3__PyObject_DebugFree)(void*);
+static void* (*py3__PyObject_DebugMalloc)(size_t);
 # else
-    static void (*py3_PyObject_Free)(void*);
-    static void* (*py3_PyObject_Malloc)(size_t);
+static void (*py3_PyObject_Free)(void*);
+static void* (*py3_PyObject_Malloc)(size_t);
 # endif
+static PyObject*(*py3__PyObject_GC_New)(PyTypeObject *);
+static void(*py3_PyObject_GC_Del)(void *);
+static void(*py3_PyObject_GC_UnTrack)(void *);
+static int (*py3_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
 
 static HINSTANCE hinstPy3 = 0; /* Instance of python.dll */
 
 /* Imported exception objects */
 static PyObject *p3imp_PyExc_AttributeError;
 static PyObject *p3imp_PyExc_IndexError;
+static PyObject *p3imp_PyExc_KeyError;
 static PyObject *p3imp_PyExc_KeyboardInterrupt;
 static PyObject *p3imp_PyExc_TypeError;
 static PyObject *p3imp_PyExc_ValueError;
+static PyObject *p3imp_PyExc_SystemExit;
+static PyObject *p3imp_PyExc_RuntimeError;
+static PyObject *p3imp_PyExc_ImportError;
+static PyObject *p3imp_PyExc_OverflowError;
 
 # define PyExc_AttributeError p3imp_PyExc_AttributeError
 # define PyExc_IndexError p3imp_PyExc_IndexError
+# define PyExc_KeyError p3imp_PyExc_KeyError
 # define PyExc_KeyboardInterrupt p3imp_PyExc_KeyboardInterrupt
 # define PyExc_TypeError p3imp_PyExc_TypeError
 # define PyExc_ValueError p3imp_PyExc_ValueError
+# define PyExc_SystemExit p3imp_PyExc_SystemExit
+# define PyExc_RuntimeError p3imp_PyExc_RuntimeError
+# define PyExc_ImportError p3imp_PyExc_ImportError
+# define PyExc_OverflowError p3imp_PyExc_OverflowError
 
 /*
  * Table of name to function pointer of python.
@@ -254,30 +438,60 @@ static struct
 } py3_funcname_table[] =
 {
     {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv},
+    {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
     {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
-    {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+    {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+    {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&py3_Py_BuildValue},
+    {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
+    {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc},
     {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
     {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure},
     {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release},
     {"PySys_SetObject", (PYTHON_PROC*)&py3_PySys_SetObject},
+    {"PySys_GetObject", (PYTHON_PROC*)&py3_PySys_GetObject},
     {"PyList_Append", (PYTHON_PROC*)&py3_PyList_Append},
+    {"PyList_Insert", (PYTHON_PROC*)&py3_PyList_Insert},
     {"PyList_Size", (PYTHON_PROC*)&py3_PyList_Size},
+    {"PySequence_Check", (PYTHON_PROC*)&py3_PySequence_Check},
+    {"PySequence_Size", (PYTHON_PROC*)&py3_PySequence_Size},
+    {"PySequence_GetItem", (PYTHON_PROC*)&py3_PySequence_GetItem},
+    {"PySequence_Fast", (PYTHON_PROC*)&py3_PySequence_Fast},
+    {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size},
+    {"PyTuple_GetItem", (PYTHON_PROC*)&py3_PyTuple_GetItem},
     {"PySlice_GetIndicesEx", (PYTHON_PROC*)&py3_PySlice_GetIndicesEx},
     {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory},
     {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize},
     {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
+    {"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject},
+    {"PyErr_ExceptionMatches", (PYTHON_PROC*)&py3_PyErr_ExceptionMatches},
     {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString},
+    {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String},
+    {"PyObject_GetAttrString", (PYTHON_PROC*)&py3_PyObject_GetAttrString},
+    {"PyObject_HasAttrString", (PYTHON_PROC*)&py3_PyObject_HasAttrString},
+    {"PyObject_SetAttrString", (PYTHON_PROC*)&py3_PyObject_SetAttrString},
+    {"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&py3_PyObject_CallFunctionObjArgs},
+    {"_PyObject_CallFunction_SizeT", (PYTHON_PROC*)&py3__PyObject_CallFunction_SizeT},
+    {"PyObject_Call", (PYTHON_PROC*)&py3_PyObject_Call},
+    {"PyEval_GetGlobals", (PYTHON_PROC*)&py3_PyEval_GetGlobals},
+    {"PyEval_GetLocals", (PYTHON_PROC*)&py3_PyEval_GetLocals},
     {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem},
     {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule},
+    {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule},
     {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument},
-    {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
     {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred},
     {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict},
     {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem},
     {"PyDict_GetItemString", (PYTHON_PROC*)&py3_PyDict_GetItemString},
+    {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next},
+    {"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check},
+    {"PyMapping_Keys", (PYTHON_PROC*)&py3_PyMapping_Keys},
+    {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
+    {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
+    {"PyObject_Repr", (PYTHON_PROC*)&py3_PyObject_Repr},
+    {"PyObject_GetItem", (PYTHON_PROC*)&py3_PyObject_GetItem},
+    {"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue},
     {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
     {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
-    {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
     {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready},
     {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString},
     {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong},
@@ -285,30 +499,68 @@ static struct
     {"PyEval_InitThreads", (PYTHON_PROC*)&py3_PyEval_InitThreads},
     {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread},
     {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread},
-    {"PyArg_Parse", (PYTHON_PROC*)&py3_PyArg_Parse},
-    {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+    {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&py3_PyArg_Parse},
     {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
+    {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented},
     {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
+    {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct},
+    {"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct},
     {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
+    {"PyErr_Format", (PYTHON_PROC*)&py3_PyErr_Format},
+    {"PyErr_PrintEx", (PYTHON_PROC*)&py3_PyErr_PrintEx},
     {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init},
     {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
     {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
+# if PY_VERSION_HEX >= 0x030300f0
+    {"PyUnicode_AsUTF8", (PYTHON_PROC*)&py3_PyUnicode_AsUTF8},
+# else
     {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString},
+# endif
+# ifndef Py_UNICODE_USE_UCS_FUNCTIONS
+    {"PyUnicode_FromFormat", (PYTHON_PROC*)&py3_PyUnicode_FromFormat},
+# else
+#  ifdef Py_UNICODE_WIDE
+    {"PyUnicodeUCS4_FromFormat", (PYTHON_PROC*)&py3_PyUnicodeUCS4_FromFormat},
+#  else
+    {"PyUnicodeUCS2_FromFormat", (PYTHON_PROC*)&py3_PyUnicodeUCS2_FromFormat},
+#  endif
+# endif
+    {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
+    {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize},
+    {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString},
+    {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble},
+    {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble},
     {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr},
-    {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
     {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc},
     {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
+    {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
     {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
+    {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
+    {"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type},
+    {"PyNumber_Check", (PYTHON_PROC*)&py3_PyNumber_Check},
+    {"PyNumber_Long", (PYTHON_PROC*)&py3_PyNumber_Long},
+    {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
 # ifdef Py_DEBUG
     {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
     {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal},
     {"_Py_Dealloc", (PYTHON_PROC*)&py3__Py_Dealloc},
+    {"PyModule_Create2TraceRefs", (PYTHON_PROC*)&py3_PyModule_Create2TraceRefs},
+# else
+    {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
+# endif
+# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
     {"_PyObject_DebugFree", (PYTHON_PROC*)&py3__PyObject_DebugFree},
     {"_PyObject_DebugMalloc", (PYTHON_PROC*)&py3__PyObject_DebugMalloc},
 # else
     {"PyObject_Malloc", (PYTHON_PROC*)&py3_PyObject_Malloc},
     {"PyObject_Free", (PYTHON_PROC*)&py3_PyObject_Free},
 # endif
+    {"_PyObject_GC_New", (PYTHON_PROC*)&py3__PyObject_GC_New},
+    {"PyObject_GC_Del", (PYTHON_PROC*)&py3_PyObject_GC_Del},
+    {"PyObject_GC_UnTrack", (PYTHON_PROC*)&py3_PyObject_GC_UnTrack},
+    {"PyType_IsSubtype", (PYTHON_PROC*)&py3_PyType_IsSubtype},
+    {"PyCapsule_New", (PYTHON_PROC*)&py3_PyCapsule_New},
+    {"PyCapsule_GetPointer", (PYTHON_PROC*)&py3_PyCapsule_GetPointer},
     {"", NULL},
 };
 
@@ -334,15 +586,16 @@ end_dynamic_python3(void)
 py3_runtime_link_init(char *libname, int verbose)
 {
     int i;
-    void *ucs_from_string, *ucs_from_string_and_size;
+    void *ucs_from_string, *ucs_decode, *ucs_as_encoded_string;
 
-# if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON)
+# if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
     /* Can't have Python and Python3 loaded at the same time.
      * It cause a crash, because RTLD_GLOBAL is needed for
      * standard C extension libraries of one or both python versions. */
     if (python_loaded())
     {
-       EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
+       if (verbose)
+           EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
        return FAIL;
     }
 # endif
@@ -373,20 +626,32 @@ py3_runtime_link_init(char *libname, int verbose)
 
     /* Load unicode functions separately as only the ucs2 or the ucs4 functions
      * will be present in the library. */
+# if PY_VERSION_HEX >= 0x030300f0
+    ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicode_FromString");
+    ucs_decode = symbol_from_dll(hinstPy3, "PyUnicode_Decode");
+    ucs_as_encoded_string = symbol_from_dll(hinstPy3,
+           "PyUnicode_AsEncodedString");
+# else
     ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString");
-    ucs_from_string_and_size = symbol_from_dll(hinstPy3,
-           "PyUnicodeUCS2_FromStringAndSize");
-    if (!ucs_from_string || !ucs_from_string_and_size)
+    ucs_decode = symbol_from_dll(hinstPy3,
+           "PyUnicodeUCS2_Decode");
+    ucs_as_encoded_string = symbol_from_dll(hinstPy3,
+           "PyUnicodeUCS2_AsEncodedString");
+    if (!ucs_from_string || !ucs_decode || !ucs_as_encoded_string)
     {
        ucs_from_string = symbol_from_dll(hinstPy3,
                "PyUnicodeUCS4_FromString");
-       ucs_from_string_and_size = symbol_from_dll(hinstPy3,
-               "PyUnicodeUCS4_FromStringAndSize");
+       ucs_decode = symbol_from_dll(hinstPy3,
+               "PyUnicodeUCS4_Decode");
+       ucs_as_encoded_string = symbol_from_dll(hinstPy3,
+               "PyUnicodeUCS4_AsEncodedString");
     }
-    if (ucs_from_string && ucs_from_string_and_size)
+# endif
+    if (ucs_from_string && ucs_decode && ucs_as_encoded_string)
     {
        py3_PyUnicode_FromString = ucs_from_string;
-       py3_PyUnicode_FromStringAndSize = ucs_from_string_and_size;
+       py3_PyUnicode_Decode = ucs_decode;
+       py3_PyUnicode_AsEncodedString = ucs_as_encoded_string;
     }
     else
     {
@@ -422,33 +687,42 @@ get_py3_exceptions()
     PyObject *exdict = PyModule_GetDict(exmod);
     p3imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError");
     p3imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError");
+    p3imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError");
     p3imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
     p3imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
     p3imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
+    p3imp_PyExc_SystemExit = PyDict_GetItemString(exdict, "SystemExit");
+    p3imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
+    p3imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError");
+    p3imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError");
     Py_XINCREF(p3imp_PyExc_AttributeError);
     Py_XINCREF(p3imp_PyExc_IndexError);
+    Py_XINCREF(p3imp_PyExc_KeyError);
     Py_XINCREF(p3imp_PyExc_KeyboardInterrupt);
     Py_XINCREF(p3imp_PyExc_TypeError);
     Py_XINCREF(p3imp_PyExc_ValueError);
+    Py_XINCREF(p3imp_PyExc_SystemExit);
+    Py_XINCREF(p3imp_PyExc_RuntimeError);
+    Py_XINCREF(p3imp_PyExc_ImportError);
+    Py_XINCREF(p3imp_PyExc_OverflowError);
     Py_XDECREF(exmod);
 }
 #endif /* DYNAMIC_PYTHON3 */
 
-static PyObject *BufferNew (buf_T *);
-static PyObject *WindowNew(win_T *);
-static PyObject *LineToString(const char *);
+static int py3initialised = 0;
 
-static PyTypeObject RangeType;
+#define PYINITIALISED py3initialised
 
-/*
- * Include the code shared with if_python.c
- */
-#include "if_py_both.h"
+#define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self)
+
+#define WIN_PYTHON_REF(win) win->w_python3_ref
+#define BUF_PYTHON_REF(buf) buf->b_python3_ref
+#define TAB_PYTHON_REF(tab) tab->tp_python3_ref
 
     static void
 call_PyObject_Free(void *p)
 {
-#ifdef Py_DEBUG
+#if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
     _PyObject_DebugFree(p);
 #else
     PyObject_Free(p);
@@ -467,24 +741,49 @@ call_PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
     return PyType_GenericAlloc(type,nitems);
 }
 
-/******************************************************
- * Internal function prototypes.
+static PyObject *OutputGetattro(PyObject *, PyObject *);
+static int OutputSetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *BufferGetattro(PyObject *, PyObject *);
+static int BufferSetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *TabPageGetattro(PyObject *, PyObject *);
+static PyObject *WindowGetattro(PyObject *, PyObject *);
+static int WindowSetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *RangeGetattro(PyObject *, PyObject *);
+static PyObject *CurrentGetattro(PyObject *, PyObject *);
+static int CurrentSetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *DictionaryGetattro(PyObject *, PyObject *);
+static int DictionarySetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *ListGetattro(PyObject *, PyObject *);
+static int ListSetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *FunctionGetattro(PyObject *, PyObject *);
+
+static PyObject *VimPathHook(PyObject *, PyObject *);
+
+static struct PyModuleDef vimmodule;
+
+#define PY_CAN_RECURSE
+
+/*
+ * Include the code shared with if_python.c
  */
+#include "if_py_both.h"
 
-static Py_ssize_t RangeStart;
-static Py_ssize_t RangeEnd;
+#define GET_ATTR_STRING(name, nameobj) \
+    char       *name = ""; \
+    if (PyUnicode_Check(nameobj)) \
+       name = _PyUnicode_AsString(nameobj)
 
-static int PythonIO_Init(void);
-static void PythonIO_Fini(void);
-PyMODINIT_FUNC Py3Init_vim(void);
+#define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0)
 
 /******************************************************
- * 1. Python interpreter main program.
+ * Internal function prototypes.
  */
 
-static int py3initialised = 0;
+static PyObject *Py3Init_vim(void);
 
-static PyGILState_STATE pygilstate = PyGILState_UNLOCKED;
+/******************************************************
+ * 1. Python interpreter main program.
+ */
 
     void
 python3_end()
@@ -503,9 +802,8 @@ python3_end()
     if (Py_IsInitialized())
     {
        // acquire lock before finalizing
-       pygilstate = PyGILState_Ensure();
+       PyGILState_Ensure();
 
-       PythonIO_Fini();
        Py_Finalize();
     }
 
@@ -539,37 +837,49 @@ Python3_Init(void)
 
        init_structs();
 
-       /* initialise threads */
-       PyEval_InitThreads();
+
+#ifdef PYTHON3_HOME
+       Py_SetPythonHome(PYTHON3_HOME);
+#endif
+
+       PyImport_AppendInittab("vim", Py3Init_vim);
 
 #if !defined(MACOS) || defined(MACOS_X_UNIX)
        Py_Initialize();
 #else
        PyMac_Initialize();
 #endif
-
+       /* Initialise threads, and below save the state using
+        * PyEval_SaveThread.  Without the call to PyEval_SaveThread, thread
+        * specific state (such as the system trace hook), will be lost
+        * between invocations of Python code. */
+       PyEval_InitThreads();
 #ifdef DYNAMIC_PYTHON3
        get_py3_exceptions();
 #endif
 
-       if (PythonIO_Init())
+       if (PythonIO_Init_io())
            goto fail;
 
-       PyImport_AppendInittab("vim", Py3Init_vim);
+       globals = PyModule_GetDict(PyImport_AddModule("__main__"));
 
        /* Remove the element from sys.path that was added because of our
         * argv[0] value in Py3Init_vim().  Previously we used an empty
-        * string, but dependinding on the OS we then get an empty entry or
-        * the current directory in sys.path. */
-       PyRun_SimpleString("import sys; sys.path = list(filter(lambda x: x != '/must>not&exist', sys.path))");
-
-       // lock is created and acquired in PyEval_InitThreads() and thread
-       // state is created in Py_Initialize()
-       // there _PyGILState_NoteThreadState() also sets gilcounter to 1
-       // (python must have threads enabled!)
-       // so the following does both: unlock GIL and save thread state in TLS
-       // without deleting thread state
-       PyGILState_Release(pygilstate);
+        * string, but depending on the OS we then get an empty entry or
+        * the current directory in sys.path.
+        * Only after vim has been imported, the element does exist in
+        * sys.path.
+        */
+       PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))");
+
+       /* lock is created and acquired in PyEval_InitThreads() and thread
+        * state is created in Py_Initialize()
+        * there _PyGILState_NoteThreadState() also sets gilcounter to 1
+        * (python must have threads enabled!)
+        * so the following does both: unlock GIL and save thread state in TLS
+        * without deleting thread state
+        */
+       PyEval_SaveThread();
 
        py3initialised = 1;
     }
@@ -579,7 +889,7 @@ Python3_Init(void)
 fail:
     /* We call PythonIO_Flush() here to print any Python errors.
      * This is OK, as it is possible to call this function even
-     * if PythonIO_Init() has not completed successfully (it will
+     * if PythonIO_Init_io() has not completed successfully (it will
      * not do anything in this case).
      */
     PythonIO_Flush();
@@ -590,7 +900,7 @@ fail:
  * External interface
  */
     static void
-DoPy3Command(exarg_T *eap, const char *cmd)
+DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg)
 {
 #if defined(MACOS) && !defined(MACOS_X_UNIX)
     GrafPtr            oldPort;
@@ -598,6 +908,9 @@ DoPy3Command(exarg_T *eap, const char *cmd)
 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
     char               *saved_locale;
 #endif
+    PyObject           *cmdstr;
+    PyObject           *cmdbytes;
+    PyGILState_STATE   pygilstate;
 
 #if defined(MACOS) && !defined(MACOS_X_UNIX)
     GetPort(&oldPort);
@@ -608,8 +921,8 @@ DoPy3Command(exarg_T *eap, const char *cmd)
     if (Python3_Init())
        goto theend;
 
-    RangeStart = eap->line1;
-    RangeEnd = eap->line2;
+    init_range(arg);
+
     Python_Release_Vim();          /* leave vim */
 
 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
@@ -627,7 +940,15 @@ DoPy3Command(exarg_T *eap, const char *cmd)
 
     pygilstate = PyGILState_Ensure();
 
-    PyRun_SimpleString((char *)(cmd));
+    /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+     * SyntaxError (unicode error). */
+    cmdstr = PyUnicode_Decode(cmd, strlen(cmd),
+                                       (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+    cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", CODEC_ERROR_HANDLER);
+    Py_XDECREF(cmdstr);
+
+    run(PyBytes_AsString(cmdbytes), arg, &pygilstate);
+    Py_XDECREF(cmdbytes);
 
     PyGILState_Release(pygilstate);
 
@@ -660,10 +981,10 @@ ex_py3(exarg_T *eap)
     script = script_get(eap, eap->arg);
     if (!eap->skip)
     {
-       if (script == NULL)
-           DoPy3Command(eap, (char *)eap->arg);
-       else
-           DoPy3Command(eap, (char *)script);
+       DoPyCommand(script == NULL ? (char *) eap->arg : (char *) script,
+               (rangeinitializer) init_range_cmd,
+               (runner) run_cmd,
+               (void *) eap);
     }
     vim_free(script);
 }
@@ -686,7 +1007,10 @@ ex_py3file(exarg_T *eap)
      * different options under Windows, meaning that stdio pointers aren't
      * compatible between the two. Yuk.
      *
-     * construct: exec(compile(open('a_filename').read(), 'a_filename', 'exec'))
+     * construct: exec(compile(open('a_filename', 'rb').read(), 'a_filename', 'exec'))
+     *
+     * Using bytes so that Python can detect the source encoding as it normally
+     * does. The doc does not say "compile" accept bytes, though.
      *
      * We need to escape any backslashes or single quotes in the file name, so that
      * Python won't mangle the file name.
@@ -709,8 +1033,8 @@ ex_py3file(exarg_T *eap)
            return;
        if (i==0)
        {
-           strcpy(p,"').read(),'");
-           p += 11;
+           strcpy(p,"','rb').read(),'");
+           p += 16;
        }
        else
        {
@@ -721,7 +1045,19 @@ ex_py3file(exarg_T *eap)
 
 
     /* Execute the file */
-    DoPy3Command(eap, buffer);
+    DoPyCommand(buffer,
+           (rangeinitializer) init_range_cmd,
+           (runner) run_cmd,
+           (void *) eap);
+}
+
+    void
+ex_py3do(exarg_T *eap)
+{
+    DoPyCommand((char *)eap->arg,
+           (rangeinitializer)init_range_cmd,
+           (runner)run_do,
+           (void *)eap);
 }
 
 /******************************************************
@@ -734,9 +1070,7 @@ ex_py3file(exarg_T *eap)
     static PyObject *
 OutputGetattro(PyObject *self, PyObject *nameobj)
 {
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-       name = _PyUnicode_AsString(nameobj);
+    GET_ATTR_STRING(name, nameobj);
 
     if (strcmp(name, "softspace") == 0)
        return PyLong_FromLong(((OutputObject *)(self))->softspace);
@@ -747,44 +1081,9 @@ OutputGetattro(PyObject *self, PyObject *nameobj)
     static int
 OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
 {
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-       name = _PyUnicode_AsString(nameobj);
-
-    if (val == NULL) {
-       PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
-       return -1;
-    }
-
-    if (strcmp(name, "softspace") == 0)
-    {
-       if (!PyLong_Check(val)) {
-           PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
-           return -1;
-       }
-
-       ((OutputObject *)(self))->softspace = PyLong_AsLong(val);
-       return 0;
-    }
-
-    PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
-    return -1;
-}
-
-/***************/
-
-    static int
-PythonIO_Init(void)
-{
-    PyType_Ready(&OutputType);
-    return PythonIO_Init_io();
-}
+    GET_ATTR_STRING(name, nameobj);
 
-    static void
-PythonIO_Fini(void)
-{
-    PySys_SetObject("stdout", NULL);
-    PySys_SetObject("stderr", NULL);
+    return OutputSetattr((OutputObject *)(self), name, val);
 }
 
 /******************************************************
@@ -803,11 +1102,8 @@ PythonIO_Fini(void)
 
 #define BufferType_Check(obj) ((obj)->ob_base.ob_type == &BufferType)
 
-static Py_ssize_t BufferLength(PyObject *);
-static PyObject *BufferItem(PyObject *, Py_ssize_t);
-static Py_ssize_t BufferAsItem(PyObject *, Py_ssize_t, PyObject *);
-static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
-
+static PyObject* BufferSubscript(PyObject *self, PyObject *idx);
+static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
 
 /* Line range type - Implementation functions
  * --------------------------------------
@@ -815,8 +1111,9 @@ static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
 
 #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType)
 
-static PyObject* RangeSubscript(PyObject *self, PyObjectidx);
+static PyObject* RangeSubscript(PyObject *self, PyObject *idx);
 static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *);
+static Py_ssize_t RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
 
 /* Current objects type - Implementation functions
  * -----------------------------------------------
@@ -828,174 +1125,114 @@ static PySequenceMethods BufferAsSeq = {
     (ssizeargfunc)     0,                  /* sq_repeat,    x*n      */
     (ssizeargfunc)     BufferItem,         /* sq_item,      x[i]     */
     0,                                     /* was_sq_slice,     x[i:j]   */
-    (ssizeobjargproc)  BufferAsItem,       /* sq_ass_item,  x[i]=v   */
+    0,                                     /* sq_ass_item,  x[i]=v   */
     0,                                     /* sq_ass_slice, x[i:j]=v */
     0,                                     /* sq_contains */
     0,                                     /* sq_inplace_concat */
     0,                                     /* sq_inplace_repeat */
 };
 
-PyMappingMethods BufferAsMapping = {
+static PyMappingMethods BufferAsMapping = {
     /* mp_length       */ (lenfunc)BufferLength,
     /* mp_subscript     */ (binaryfunc)BufferSubscript,
-    /* mp_ass_subscript */ (objobjargproc)0,
+    /* mp_ass_subscript */ (objobjargproc)BufferAsSubscript,
 };
 
 
-/* Buffer object - Definitions
+/* Buffer object
  */
 
-static PyTypeObject BufferType;
-
     static PyObject *
-BufferNew(buf_T *buf)
+BufferGetattro(PyObject *self, PyObject *nameobj)
 {
-    /* We need to handle deletion of buffers underneath us.
-     * If we add a "b_python3_ref" field to the buf_T structure,
-     * then we can get at it in buf_freeall() in vim. We then
-     * need to create only ONE Python object per buffer - if
-     * we try to create a second, just INCREF the existing one
-     * and return it. The (single) Python object referring to
-     * the buffer is stored in "b_python3_ref".
-     * Question: what to do on a buf_freeall(). We'll probably
-     * have to either delete the Python object (DECREF it to
-     * zero - a bad idea, as it leaves dangling refs!) or
-     * set the buf_T * value to an invalid value (-1?), which
-     * means we need checks in all access functions... Bah.
-     */
+    PyObject *r;
 
-    BufferObject *self;
+    GET_ATTR_STRING(name, nameobj);
 
-    if (buf->b_python3_ref != NULL)
-    {
-       self = buf->b_python3_ref;
-       Py_INCREF(self);
-    }
-    else
-    {
-       self = PyObject_NEW(BufferObject, &BufferType);
-       buf->b_python3_ref = self;
-       if (self == NULL)
-           return NULL;
-       self->buf = buf;
-    }
+    if ((r = BufferAttrValid((BufferObject *)(self), name)))
+       return r;
 
-    return (PyObject *)(self);
-}
-
-    static void
-BufferDestructor(PyObject *self)
-{
-    BufferObject *this = (BufferObject *)(self);
-
-    if (this->buf && this->buf != INVALID_BUFFER_VALUE)
-       this->buf->b_python3_ref = NULL;
-}
-
-    static PyObject *
-BufferGetattro(PyObject *self, PyObject*nameobj)
-{
-    BufferObject *this = (BufferObject *)(self);
-
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-       name = _PyUnicode_AsString(nameobj);
-
-    if (CheckBuffer(this))
+    if (CheckBuffer((BufferObject *)(self)))
        return NULL;
 
-    if (strcmp(name, "name") == 0)
-       return Py_BuildValue("s", this->buf->b_ffname);
-    else if (strcmp(name, "number") == 0)
-       return Py_BuildValue("n", this->buf->b_fnum);
-    else if (strcmp(name,"__members__") == 0)
-       return Py_BuildValue("[ss]", "name", "number");
+    r = BufferAttr((BufferObject *)(self), name);
+    if (r || PyErr_Occurred())
+       return r;
     else
        return PyObject_GenericGetAttr(self, nameobj);
 }
 
-    static PyObject *
-BufferRepr(PyObject *self)
+    static int
+BufferSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
 {
-    static char repr[100];
-    BufferObject *this = (BufferObject *)(self);
-
-    if (this->buf == INVALID_BUFFER_VALUE)
-    {
-       vim_snprintf(repr, 100, _("<buffer object (deleted) at %p>"), (self));
-       return PyUnicode_FromString(repr);
-    }
-    else
-    {
-       char *name = (char *)this->buf->b_fname;
-       Py_ssize_t len;
-
-       if (name == NULL)
-           name = "";
-       len = strlen(name);
-
-       if (len > 35)
-           name = name + (35 - len);
-
-       vim_snprintf(repr, 100, "<buffer %s%s>", len > 35 ? "..." : "", name);
+    GET_ATTR_STRING(name, nameobj);
 
-       return PyUnicode_FromString(repr);
-    }
+    return BufferSetattr((BufferObject *)(self), name, val);
 }
 
 /******************/
 
-    static Py_ssize_t
-BufferLength(PyObject *self)
-{
-    if (CheckBuffer((BufferObject *)(self)))
-       return -1;
-
-    return (Py_ssize_t)(((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
-
     static PyObject *
-BufferItem(PyObject *self, Py_ssize_t n)
+BufferSubscript(PyObject *self, PyObject* idx)
 {
-    return RBItem((BufferObject *)(self), n, 1,
-              (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
+    if (PyLong_Check(idx))
+    {
+       long _idx = PyLong_AsLong(idx);
+       return BufferItem((BufferObject *)(self), _idx);
+    } else if (PySlice_Check(idx))
+    {
+       Py_ssize_t start, stop, step, slicelen;
 
-    static PyObject *
-BufferSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi)
-{
-    return RBSlice((BufferObject *)(self), lo, hi, 1,
-              (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
+       if (CheckBuffer((BufferObject *) self))
+           return NULL;
 
-    static Py_ssize_t
-BufferAsItem(PyObject *self, Py_ssize_t n, PyObject *val)
-{
-    return RBAsItem((BufferObject *)(self), n, val, 1,
-               (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
-               NULL);
+       if (PySlice_GetIndicesEx((PyObject *)idx,
+             (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+             &start, &stop,
+             &step, &slicelen) < 0)
+       {
+           return NULL;
+       }
+       return BufferSlice((BufferObject *)(self), start, stop);
+    }
+    else
+    {
+       RAISE_INVALID_INDEX_TYPE(idx);
+       return NULL;
+    }
 }
 
-
-    static PyObject *
-BufferSubscript(PyObject *self, PyObject* idx)
+    static Py_ssize_t
+BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
 {
-    if (PyLong_Check(idx)) {
-       long _idx = PyLong_AsLong(idx);
-       return BufferItem(self,_idx);
-    } else if (PySlice_Check(idx)) {
+    if (PyLong_Check(idx))
+    {
+       long n = PyLong_AsLong(idx);
+       return RBAsItem((BufferObject *)(self), n, val, 1,
+                   (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+                   NULL);
+    } else if (PySlice_Check(idx))
+    {
        Py_ssize_t start, stop, step, slicelen;
 
-       if (PySlice_GetIndicesEx((PySliceObject *)idx,
-             (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+       if (CheckBuffer((BufferObject *) self))
+           return -1;
+
+       if (PySlice_GetIndicesEx((PyObject *)idx,
+             (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
              &start, &stop,
-             &step, &slicelen) < 0) {
-           return NULL;
+             &step, &slicelen) < 0)
+       {
+           return -1;
        }
-       return BufferSlice(self,start,stop+1);
-    } else {
-       PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
-       return NULL;
+       return RBAsSlice((BufferObject *)(self), start, stop, val, 1,
+                         (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+                         NULL);
+    }
+    else
+    {
+       RAISE_INVALID_INDEX_TYPE(idx);
+       return -1;
     }
 }
 
@@ -1012,27 +1249,19 @@ static PySequenceMethods RangeAsSeq = {
     0,                                  /* sq_inplace_repeat */
 };
 
-PyMappingMethods RangeAsMapping = {
+static PyMappingMethods RangeAsMapping = {
     /* mp_length       */ (lenfunc)RangeLength,
     /* mp_subscript     */ (binaryfunc)RangeSubscript,
-    /* mp_ass_subscript */ (objobjargproc)0,
+    /* mp_ass_subscript */ (objobjargproc)RangeAsSubscript,
 };
 
 /* Line range object - Implementation
  */
 
-    static void
-RangeDestructor(PyObject *self)
-{
-    Py_DECREF(((RangeObject *)(self))->buf);
-}
-
     static PyObject *
 RangeGetattro(PyObject *self, PyObject *nameobj)
 {
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-       name = _PyUnicode_AsString(nameobj);
+    GET_ATTR_STRING(name, nameobj);
 
     if (strcmp(name, "start") == 0)
        return Py_BuildValue("n", ((RangeObject *)(self))->start - 1);
@@ -1053,136 +1282,111 @@ RangeAsItem(PyObject *self, Py_ssize_t n, PyObject *val)
                    &((RangeObject *)(self))->end);
 }
 
+    static Py_ssize_t
+RangeAsSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *val)
+{
+    return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
+                   ((RangeObject *)(self))->start,
+                   ((RangeObject *)(self))->end,
+                   &((RangeObject *)(self))->end);
+}
+
     static PyObject *
 RangeSubscript(PyObject *self, PyObject* idx)
 {
-    if (PyLong_Check(idx)) {
+    if (PyLong_Check(idx))
+    {
        long _idx = PyLong_AsLong(idx);
-       return RangeItem(self,_idx);
-    } else if (PySlice_Check(idx)) {
+       return RangeItem((RangeObject *)(self), _idx);
+    } else if (PySlice_Check(idx))
+    {
        Py_ssize_t start, stop, step, slicelen;
 
-       if (PySlice_GetIndicesEx((PySliceObject *)idx,
+       if (PySlice_GetIndicesEx((PyObject *)idx,
                ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
                &start, &stop,
-               &step, &slicelen) < 0) {
+               &step, &slicelen) < 0)
+       {
            return NULL;
        }
-       return RangeSlice(self,start,stop+1);
-    } else {
-       PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+       return RangeSlice((RangeObject *)(self), start, stop);
+    }
+    else
+    {
+       RAISE_INVALID_INDEX_TYPE(idx);
        return NULL;
     }
 }
 
-/* Buffer list object - Definitions
- */
-
-typedef struct
+    static Py_ssize_t
+RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
 {
-    PyObject_HEAD
-} BufListObject;
-
-static PySequenceMethods BufListAsSeq = {
-    (lenfunc)          BufListLength,      /* sq_length,    len(x)   */
-    (binaryfunc)       0,                  /* sq_concat,    x+y      */
-    (ssizeargfunc)     0,                  /* sq_repeat,    x*n      */
-    (ssizeargfunc)     BufListItem,        /* sq_item,      x[i]     */
-    0,                                     /* was_sq_slice,     x[i:j]   */
-    (ssizeobjargproc)  0,                  /* sq_as_item,  x[i]=v   */
-    0,                                     /* sq_ass_slice, x[i:j]=v */
-    0,                                     /* sq_contains */
-    0,                                     /* sq_inplace_concat */
-    0,                                     /* sq_inplace_repeat */
-};
-
-static PyTypeObject BufListType;
-
-/* Window object - Definitions
- */
-
-static struct PyMethodDef WindowMethods[] = {
-    /* name,       function,           calling,    documentation */
-    { NULL,        NULL,               0,          NULL }
-};
+    if (PyLong_Check(idx))
+    {
+       long n = PyLong_AsLong(idx);
+       return RangeAsItem(self, n, val);
+    } else if (PySlice_Check(idx))
+    {
+       Py_ssize_t start, stop, step, slicelen;
 
-static PyTypeObject WindowType;
+       if (PySlice_GetIndicesEx((PyObject *)idx,
+               ((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+               &start, &stop,
+               &step, &slicelen) < 0)
+       {
+           return -1;
+       }
+       return RangeAsSlice(self, start, stop, val);
+    }
+    else
+    {
+       RAISE_INVALID_INDEX_TYPE(idx);
+       return -1;
+    }
+}
 
-/* Window object - Implementation
+/* TabPage object - Implementation
  */
 
     static PyObject *
-WindowNew(win_T *win)
+TabPageGetattro(PyObject *self, PyObject *nameobj)
 {
-    /* We need to handle deletion of windows underneath us.
-     * If we add a "w_python3_ref" field to the win_T structure,
-     * then we can get at it in win_free() in vim. We then
-     * need to create only ONE Python object per window - if
-     * we try to create a second, just INCREF the existing one
-     * and return it. The (single) Python object referring to
-     * the window is stored in "w_python3_ref".
-     * On a win_free() we set the Python object's win_T* field
-     * to an invalid value. We trap all uses of a window
-     * object, and reject them if the win_T* field is invalid.
-     */
+    PyObject *r;
 
-    WindowObject *self;
-
-    if (win->w_python3_ref)
-    {
-       self = win->w_python3_ref;
-       Py_INCREF(self);
-    }
-    else
-    {
-       self = PyObject_NEW(WindowObject, &WindowType);
-       if (self == NULL)
-           return NULL;
-       self->win = win;
-       win->w_python3_ref = self;
-    }
+    GET_ATTR_STRING(name, nameobj);
 
-    return (PyObject *)(self);
-}
+    if ((r = TabPageAttrValid((TabPageObject *)(self), name)))
+       return r;
 
-    static void
-WindowDestructor(PyObject *self)
-{
-    WindowObject *this = (WindowObject *)(self);
+    if (CheckTabPage((TabPageObject *)(self)))
+       return NULL;
 
-    if (this->win && this->win != INVALID_WINDOW_VALUE)
-       this->win->w_python3_ref = NULL;
+    r = TabPageAttr((TabPageObject *)(self), name);
+    if (r || PyErr_Occurred())
+       return r;
+    else
+       return PyObject_GenericGetAttr(self, nameobj);
 }
 
+/* Window object - Implementation
+ */
+
     static PyObject *
 WindowGetattro(PyObject *self, PyObject *nameobj)
 {
-    WindowObject *this = (WindowObject *)(self);
+    PyObject *r;
 
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-       name = _PyUnicode_AsString(nameobj);
+    GET_ATTR_STRING(name, nameobj);
 
+    if ((r = WindowAttrValid((WindowObject *)(self), name)))
+       return r;
 
-    if (CheckWindow(this))
+    if (CheckWindow((WindowObject *)(self)))
        return NULL;
 
-    if (strcmp(name, "buffer") == 0)
-       return (PyObject *)BufferNew(this->win->w_buffer);
-    else if (strcmp(name, "cursor") == 0)
-    {
-       pos_T *pos = &this->win->w_cursor;
-
-       return Py_BuildValue("(ll)", (long)(pos->lnum), (long)(pos->col));
-    }
-    else if (strcmp(name, "height") == 0)
-       return Py_BuildValue("l", (long)(this->win->w_height));
-#ifdef FEAT_VERTSPLIT
-    else if (strcmp(name, "width") == 0)
-       return Py_BuildValue("l", (long)(W_WIDTH(this->win)));
-#endif
-    else if (strcmp(name,"__members__") == 0)
-       return Py_BuildValue("[sss]", "buffer", "cursor", "height");
+    r = WindowAttr((WindowObject *)(self), name);
+    if (r || PyErr_Occurred())
+       return r;
     else
        return PyObject_GenericGetAttr(self, nameobj);
 }
@@ -1190,22 +1394,29 @@ WindowGetattro(PyObject *self, PyObject *nameobj)
     static int
 WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
 {
-    char *name = "";
+    GET_ATTR_STRING(name, nameobj);
 
-    if (PyUnicode_Check(nameobj))
-       name = _PyUnicode_AsString(nameobj);
-
-    return WindowSetattr(self, name, val);
+    return WindowSetattr((WindowObject *)(self), name, val);
 }
 
-/* Window list object - Definitions
+/* Tab page list object - Definitions
  */
 
-typedef struct
-{
-    PyObject_HEAD
-}
-WinListObject;
+static PySequenceMethods TabListAsSeq = {
+    (lenfunc)       TabListLength,         /* sq_length,    len(x)   */
+    (binaryfunc)     0,                            /* sq_concat,    x+y      */
+    (ssizeargfunc)   0,                            /* sq_repeat,    x*n      */
+    (ssizeargfunc)   TabListItem,          /* sq_item,      x[i]     */
+    0,                                     /* sq_slice,     x[i:j]   */
+    (ssizeobjargproc)0,                            /* sq_as_item,  x[i]=v   */
+    0,                                     /* sq_ass_slice, x[i:j]=v */
+    0,                                     /* sq_contains */
+    0,                                     /* sq_inplace_concat */
+    0,                                     /* sq_inplace_repeat */
+};
+
+/* Window list object - Definitions
+ */
 
 static PySequenceMethods WinListAsSeq = {
     (lenfunc)       WinListLength,         /* sq_length,    len(x)   */
@@ -1220,76 +1431,168 @@ static PySequenceMethods WinListAsSeq = {
     0,                                     /* sq_inplace_repeat */
 };
 
-static PyTypeObject WinListType;
+/* Current items object - Implementation
+ */
+    static PyObject *
+CurrentGetattro(PyObject *self, PyObject *nameobj)
+{
+    PyObject   *r;
+    GET_ATTR_STRING(name, nameobj);
+    if (!(r = CurrentGetattr(self, name)))
+       return PyObject_GenericGetAttr(self, nameobj);
+    return r;
+}
 
-/* Current items object - Definitions
+    static int
+CurrentSetattro(PyObject *self, PyObject *nameobj, PyObject *value)
+{
+    GET_ATTR_STRING(name, nameobj);
+    return CurrentSetattr(self, name, value);
+}
+
+/* Dictionary object - Definitions
  */
 
-typedef struct
+    static PyObject *
+DictionaryGetattro(PyObject *self, PyObject *nameobj)
 {
-    PyObject_HEAD
-} CurrentObject;
+    DictionaryObject   *this = ((DictionaryObject *) (self));
 
-static PyTypeObject CurrentType;
+    GET_ATTR_STRING(name, nameobj);
 
-/* Current items object - Implementation
+    if (strcmp(name, "locked") == 0)
+       return PyLong_FromLong(this->dict->dv_lock);
+    else if (strcmp(name, "scope") == 0)
+       return PyLong_FromLong(this->dict->dv_scope);
+
+    return PyObject_GenericGetAttr(self, nameobj);
+}
+
+    static int
+DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+{
+    GET_ATTR_STRING(name, nameobj);
+    return DictionarySetattr((DictionaryObject *)(self), name, val);
+}
+
+/* List object - Definitions
  */
+
+static PySequenceMethods ListAsSeq = {
+    (lenfunc)          ListLength,      /* sq_length,    len(x)   */
+    (binaryfunc)       0,               /* RangeConcat, sq_concat,  x+y   */
+    (ssizeargfunc)     0,               /* RangeRepeat, sq_repeat,  x*n   */
+    (ssizeargfunc)     ListItem,        /* sq_item,      x[i]     */
+    (void *)           0,               /* was_sq_slice,     x[i:j]   */
+    (ssizeobjargproc)  ListAssItem,     /* sq_as_item,  x[i]=v   */
+    (void *)           0,               /* was_sq_ass_slice, x[i:j]=v */
+    0,                                  /* sq_contains */
+    (binaryfunc)       ListConcatInPlace,/* sq_inplace_concat */
+    0,                                  /* sq_inplace_repeat */
+};
+
+static PyObject *ListSubscript(PyObject *, PyObject *);
+static Py_ssize_t ListAsSubscript(PyObject *, PyObject *, PyObject *);
+
+static PyMappingMethods ListAsMapping = {
+    /* mp_length       */ (lenfunc) ListLength,
+    /* mp_subscript     */ (binaryfunc) ListSubscript,
+    /* mp_ass_subscript */ (objobjargproc) ListAsSubscript,
+};
+
     static PyObject *
-CurrentGetattro(PyObject *self UNUSED, PyObject *nameobj)
+ListSubscript(PyObject *self, PyObject* idx)
 {
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-       name = _PyUnicode_AsString(nameobj);
-
-    if (strcmp(name, "buffer") == 0)
-       return (PyObject *)BufferNew(curbuf);
-    else if (strcmp(name, "window") == 0)
-       return (PyObject *)WindowNew(curwin);
-    else if (strcmp(name, "line") == 0)
-       return GetBufferLine(curbuf, (Py_ssize_t)curwin->w_cursor.lnum);
-    else if (strcmp(name, "range") == 0)
-       return RangeNew(curbuf, RangeStart, RangeEnd);
-    else if (strcmp(name,"__members__") == 0)
-       return Py_BuildValue("[ssss]", "buffer", "window", "line", "range");
+    if (PyLong_Check(idx))
+    {
+       long _idx = PyLong_AsLong(idx);
+       return ListItem((ListObject *)(self), _idx);
+    }
+    else if (PySlice_Check(idx))
+    {
+       Py_ssize_t start, stop, step, slicelen;
+
+       if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
+                                &start, &stop, &step, &slicelen) < 0)
+           return NULL;
+       return ListSlice((ListObject *)(self), start, stop);
+    }
     else
     {
-       PyErr_SetString(PyExc_AttributeError, name);
+       RAISE_INVALID_INDEX_TYPE(idx);
        return NULL;
     }
 }
 
-    static int
-CurrentSetattro(PyObject *self UNUSED, PyObject *nameobj, PyObject *value)
+    static Py_ssize_t
+ListAsSubscript(PyObject *self, PyObject *idx, PyObject *obj)
 {
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-       name = _PyUnicode_AsString(nameobj);
-
-    if (strcmp(name, "line") == 0)
+    if (PyLong_Check(idx))
     {
-       if (SetBufferLine(curbuf, (Py_ssize_t)curwin->w_cursor.lnum, value, NULL) == FAIL)
-           return -1;
+       long _idx = PyLong_AsLong(idx);
+       return ListAssItem((ListObject *)(self), _idx, obj);
+    }
+    else if (PySlice_Check(idx))
+    {
+       Py_ssize_t start, stop, step, slicelen;
 
-       return 0;
+       if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
+                                &start, &stop, &step, &slicelen) < 0)
+           return -1;
+       return ListAssSlice((ListObject *)(self), start, stop, obj);
     }
     else
     {
-       PyErr_SetString(PyExc_AttributeError, name);
+       RAISE_INVALID_INDEX_TYPE(idx);
        return -1;
     }
 }
 
+    static PyObject *
+ListGetattro(PyObject *self, PyObject *nameobj)
+{
+    GET_ATTR_STRING(name, nameobj);
+
+    if (strcmp(name, "locked") == 0)
+       return PyLong_FromLong(((ListObject *) (self))->list->lv_lock);
+
+    return PyObject_GenericGetAttr(self, nameobj);
+}
+
+    static int
+ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+{
+    GET_ATTR_STRING(name, nameobj);
+    return ListSetattr((ListObject *)(self), name, val);
+}
+
+/* Function object - Definitions
+ */
+
+    static PyObject *
+FunctionGetattro(PyObject *self, PyObject *nameobj)
+{
+    FunctionObject     *this = (FunctionObject *)(self);
+
+    GET_ATTR_STRING(name, nameobj);
+
+    if (strcmp(name, "name") == 0)
+       return PyUnicode_FromString((char *)(this->name));
+
+    return PyObject_GenericGetAttr(self, nameobj);
+}
+
 /* External interface
  */
 
     void
 python3_buffer_free(buf_T *buf)
 {
-    if (buf->b_python3_ref != NULL)
+    if (BUF_PYTHON_REF(buf) != NULL)
     {
-       BufferObject *bp = buf->b_python3_ref;
+       BufferObject *bp = BUF_PYTHON_REF(buf);
        bp->buf = INVALID_BUFFER_VALUE;
-       buf->b_python3_ref = NULL;
+       BUF_PYTHON_REF(buf) = NULL;
     }
 }
 
@@ -1297,69 +1600,49 @@ python3_buffer_free(buf_T *buf)
     void
 python3_window_free(win_T *win)
 {
-    if (win->w_python3_ref != NULL)
+    if (WIN_PYTHON_REF(win) != NULL)
     {
-       WindowObject *wp = win->w_python3_ref;
+       WindowObject *wp = WIN_PYTHON_REF(win);
        wp->win = INVALID_WINDOW_VALUE;
-       win->w_python3_ref = NULL;
+       WIN_PYTHON_REF(win) = NULL;
     }
 }
-#endif
-
-static BufListObject TheBufferList =
-{
-    PyObject_HEAD_INIT(&BufListType)
-};
-
-static WinListObject TheWindowList =
-{
-    PyObject_HEAD_INIT(&WinListType)
-};
 
-static CurrentObject TheCurrent =
+    void
+python3_tabpage_free(tabpage_T *tab)
 {
-    PyObject_HEAD_INIT(&CurrentType)
-};
-
-PyDoc_STRVAR(vim_module_doc,"vim python interface\n");
-
-static struct PyModuleDef vimmodule;
+    if (TAB_PYTHON_REF(tab) != NULL)
+    {
+       TabPageObject *tp = TAB_PYTHON_REF(tab);
+       tp->tab = INVALID_TABPAGE_VALUE;
+       TAB_PYTHON_REF(tab) = NULL;
+    }
+}
+#endif
 
-#ifndef PROTO
-PyMODINIT_FUNC Py3Init_vim(void)
+    static PyObject *
+Py3Init_vim(void)
 {
-    PyObject *mod;
     /* The special value is removed from sys.path in Python3_Init(). */
     static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL};
 
-    PyType_Ready(&BufferType);
-    PyType_Ready(&RangeType);
-    PyType_Ready(&WindowType);
-    PyType_Ready(&BufListType);
-    PyType_Ready(&WinListType);
-    PyType_Ready(&CurrentType);
+    if (init_types())
+       return NULL;
 
     /* Set sys.argv[] to avoid a crash in warn(). */
     PySys_SetArgv(1, argv);
 
-    mod = PyModule_Create(&vimmodule);
-
-    VimError = Py_BuildValue("s", "vim.error");
+    if ((vim_module = PyModule_Create(&vimmodule)) == NULL)
+       return NULL;
 
-    PyModule_AddObject(mod, "error", VimError);
-    Py_INCREF((PyObject *)(void *)&TheBufferList);
-    PyModule_AddObject(mod, "buffers", (PyObject *)(void *)&TheBufferList);
-    Py_INCREF((PyObject *)(void *)&TheCurrent);
-    PyModule_AddObject(mod, "current", (PyObject *)(void *)&TheCurrent);
-    Py_INCREF((PyObject *)(void *)&TheWindowList);
-    PyModule_AddObject(mod, "windows", (PyObject *)(void *)&TheWindowList);
+    if (populate_module(vim_module))
+       return NULL;
 
-    if (PyErr_Occurred())
+    if (init_sys_path())
        return NULL;
 
-    return mod;
+    return vim_module;
 }
-#endif
 
 /*************************************************************************
  * 4. Utility functions for handling the interface between Vim and Python.
@@ -1397,96 +1680,33 @@ LineToString(const char *str)
     }
     *p = '\0';
 
-    result = PyUnicode_FromStringAndSize(tmp, len);
+    result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, CODEC_ERROR_HANDLER);
 
     vim_free(tmp);
     return result;
 }
 
-    static void
-init_structs(void)
+    void
+do_py3eval (char_u *str, typval_T *rettv)
+{
+    DoPyCommand((char *) str,
+           (rangeinitializer) init_range_eval,
+           (runner) run_eval,
+           (void *) rettv);
+    switch(rettv->v_type)
+    {
+       case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
+       case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
+       case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
+       case VAR_UNKNOWN:
+           rettv->v_type = VAR_NUMBER;
+           rettv->vval.v_number = 0;
+           break;
+    }
+}
+
+    void
+set_ref_in_python3 (int copyID)
 {
-    vim_memset(&OutputType, 0, sizeof(OutputType));
-    OutputType.tp_name = "vim.message";
-    OutputType.tp_basicsize = sizeof(OutputObject);
-    OutputType.tp_getattro = OutputGetattro;
-    OutputType.tp_setattro = OutputSetattro;
-    OutputType.tp_flags = Py_TPFLAGS_DEFAULT;
-    OutputType.tp_doc = "vim message object";
-    OutputType.tp_methods = OutputMethods;
-    OutputType.tp_alloc = call_PyType_GenericAlloc;
-    OutputType.tp_new = call_PyType_GenericNew;
-    OutputType.tp_free = call_PyObject_Free;
-
-    vim_memset(&BufferType, 0, sizeof(BufferType));
-    BufferType.tp_name = "vim.buffer";
-    BufferType.tp_basicsize = sizeof(BufferType);
-    BufferType.tp_dealloc = BufferDestructor;
-    BufferType.tp_repr = BufferRepr;
-    BufferType.tp_as_sequence = &BufferAsSeq;
-    BufferType.tp_as_mapping = &BufferAsMapping;
-    BufferType.tp_getattro = BufferGetattro;
-    BufferType.tp_flags = Py_TPFLAGS_DEFAULT;
-    BufferType.tp_doc = "vim buffer object";
-    BufferType.tp_methods = BufferMethods;
-    BufferType.tp_alloc = call_PyType_GenericAlloc;
-    BufferType.tp_new = call_PyType_GenericNew;
-    BufferType.tp_free = call_PyObject_Free;
-
-    vim_memset(&WindowType, 0, sizeof(WindowType));
-    WindowType.tp_name = "vim.window";
-    WindowType.tp_basicsize = sizeof(WindowObject);
-    WindowType.tp_dealloc = WindowDestructor;
-    WindowType.tp_repr = WindowRepr;
-    WindowType.tp_getattro = WindowGetattro;
-    WindowType.tp_setattro = WindowSetattro;
-    WindowType.tp_flags = Py_TPFLAGS_DEFAULT;
-    WindowType.tp_doc = "vim Window object";
-    WindowType.tp_methods = WindowMethods;
-    WindowType.tp_alloc = call_PyType_GenericAlloc;
-    WindowType.tp_new = call_PyType_GenericNew;
-    WindowType.tp_free = call_PyObject_Free;
-
-    vim_memset(&BufListType, 0, sizeof(BufListType));
-    BufListType.tp_name = "vim.bufferlist";
-    BufListType.tp_basicsize = sizeof(BufListObject);
-    BufListType.tp_as_sequence = &BufListAsSeq;
-    BufListType.tp_flags = Py_TPFLAGS_DEFAULT;
-    BufferType.tp_doc = "vim buffer list";
-
-    vim_memset(&WinListType, 0, sizeof(WinListType));
-    WinListType.tp_name = "vim.windowlist";
-    WinListType.tp_basicsize = sizeof(WinListType);
-    WinListType.tp_as_sequence = &WinListAsSeq;
-    WinListType.tp_flags = Py_TPFLAGS_DEFAULT;
-    WinListType.tp_doc = "vim window list";
-
-    vim_memset(&RangeType, 0, sizeof(RangeType));
-    RangeType.tp_name = "vim.range";
-    RangeType.tp_basicsize = sizeof(RangeObject);
-    RangeType.tp_dealloc = RangeDestructor;
-    RangeType.tp_repr = RangeRepr;
-    RangeType.tp_as_sequence = &RangeAsSeq;
-    RangeType.tp_as_mapping = &RangeAsMapping;
-    RangeType.tp_getattro = RangeGetattro;
-    RangeType.tp_flags = Py_TPFLAGS_DEFAULT;
-    RangeType.tp_doc = "vim Range object";
-    RangeType.tp_methods = RangeMethods;
-    RangeType.tp_alloc = call_PyType_GenericAlloc;
-    RangeType.tp_new = call_PyType_GenericNew;
-    RangeType.tp_free = call_PyObject_Free;
-
-    vim_memset(&CurrentType, 0, sizeof(CurrentType));
-    CurrentType.tp_name = "vim.currentdata";
-    CurrentType.tp_basicsize = sizeof(CurrentObject);
-    CurrentType.tp_getattro = CurrentGetattro;
-    CurrentType.tp_setattro = CurrentSetattro;
-    CurrentType.tp_flags = Py_TPFLAGS_DEFAULT;
-    CurrentType.tp_doc = "vim current object";
-
-    vim_memset(&vimmodule, 0, sizeof(vimmodule));
-    vimmodule.m_name = "vim";
-    vimmodule.m_doc = vim_module_doc;
-    vimmodule.m_size = -1;
-    vimmodule.m_methods = VimMethods;
+    set_ref_in_py(copyID);
 }
index 2608f1f..44fd5ee 100644 (file)
@@ -4,12 +4,17 @@
  *
  * Ruby interface by Shugo Maeda
  *   with improvements by SegPhault (Ryan Paul)
+ *   with improvements by Jon Maken
  *
  * Do ":help uganda"  in Vim to read copying and usage conditions.
  * Do ":help credits" in Vim to see a list of people who contributed.
  * See README.txt for an overview of the Vim source code.
  */
 
+#ifdef HAVE_CONFIG_H
+# include "auto/config.h"
+#endif
+
 #include <stdio.h>
 #include <string.h>
 
 # define RUBYEXTERN extern
 #endif
 
+#ifdef DYNAMIC_RUBY
 /*
  * This is tricky.  In ruby.h there is (inline) function rb_class_of()
  * definition.  This function use these variables.  But we want function to
  * use dll_* variables.
  */
-#ifdef DYNAMIC_RUBY
 # define rb_cFalseClass                (*dll_rb_cFalseClass)
 # define rb_cFixnum            (*dll_rb_cFixnum)
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
+#  define rb_cFloat            (*dll_rb_cFloat)
+# endif
 # define rb_cNilClass          (*dll_rb_cNilClass)
 # define rb_cSymbol            (*dll_rb_cSymbol)
 # define rb_cTrueClass         (*dll_rb_cTrueClass)
  */
 #  define RUBY_EXPORT
 # endif
+
+#if !(defined(WIN32) || defined(_WIN64))
+# include <dlfcn.h>
+# define HINSTANCE void*
+# define RUBY_PROC void*
+# define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
+# define symbol_from_dll dlsym
+# define close_dll dlclose
+#else
+# define RUBY_PROC FARPROC
+# define load_dll vimLoadLib
+# define symbol_from_dll GetProcAddress
+# define close_dll FreeLibrary
 #endif
 
+#endif  /* ifdef DYNAMIC_RUBY */
+
 /* suggested by Ariya Mizutani */
 #if (_MSC_VER == 1200)
 # undef _WIN32_WINNT
 # define rb_int2big rb_int2big_stub
 #endif
 
+#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
+       && SIZEOF_INT < SIZEOF_LONG
+/* Ruby 2.0 defines a number of static functions which use rb_fix2int and
+ * rb_num2int if SIZEOF_INT < SIZEOF_LONG (64bit) */
+# define rb_fix2int rb_fix2int_stub
+# define rb_num2int rb_num2int_stub
+#endif
+
 #include <ruby.h>
 #ifdef RUBY19_OR_LATER
 # include <ruby/encoding.h>
 #endif
 
+#undef off_t   /* ruby defines off_t as _int64, Mingw uses long */
 #undef EXTERN
 #undef _
 
 #endif
 
 /*
- * Backward compatiblity for Ruby 1.8 and earlier.
+ * Backward compatibility for Ruby 1.8 and earlier.
  * Ruby 1.9 does not provide STR2CSTR, instead StringValuePtr is provided.
  * Ruby 1.9 does not provide RXXX(s)->len and RXXX(s)->ptr, instead
  * RXXX_LEN(s) and RXXX_PTR(s) are provided.
 #endif
 
 static int ruby_initialized = 0;
+static void *ruby_stack_start;
 static VALUE objtbl;
 
 static VALUE mVIM;
@@ -125,84 +158,116 @@ static void error_print(int);
 static void ruby_io_init(void);
 static void ruby_vim_init(void);
 
-#if defined(DYNAMIC_RUBY) || defined(PROTO)
-#ifdef PROTO
-# define HINSTANCE int         /* for generating prototypes */
+#if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+# if defined(__ia64) && !defined(ruby_init_stack)
+#  define ruby_init_stack(addr) ruby_init_stack((addr), rb_ia64_bsp())
+# endif
 #endif
 
+#if defined(DYNAMIC_RUBY) || defined(PROTO)
+# ifdef PROTO
+#  define HINSTANCE int                /* for generating prototypes */
+# endif
+
 /*
  * Wrapper defines
  */
-#define rb_assoc_new                   dll_rb_assoc_new
-#define rb_cObject                     (*dll_rb_cObject)
-#define rb_check_type                  dll_rb_check_type
-#define rb_class_path                  dll_rb_class_path
-#define rb_data_object_alloc           dll_rb_data_object_alloc
-#define rb_define_class_under          dll_rb_define_class_under
-#define rb_define_const                        dll_rb_define_const
-#define rb_define_global_function      dll_rb_define_global_function
-#define rb_define_method               dll_rb_define_method
-#define rb_define_module               dll_rb_define_module
-#define rb_define_module_function      dll_rb_define_module_function
-#define rb_define_singleton_method     dll_rb_define_singleton_method
-#define rb_define_virtual_variable     dll_rb_define_virtual_variable
-#define rb_stdout                      (*dll_rb_stdout)
-#define rb_eArgError                   (*dll_rb_eArgError)
-#define rb_eIndexError                 (*dll_rb_eIndexError)
-#define rb_eRuntimeError               (*dll_rb_eRuntimeError)
-#define rb_eStandardError              (*dll_rb_eStandardError)
-#define rb_eval_string_protect         dll_rb_eval_string_protect
-#define rb_global_variable             dll_rb_global_variable
-#define rb_hash_aset                   dll_rb_hash_aset
-#define rb_hash_new                    dll_rb_hash_new
-#define rb_inspect                     dll_rb_inspect
-#define rb_int2inum                    dll_rb_int2inum
-#define rb_lastline_get                        dll_rb_lastline_get
-#define rb_lastline_set                        dll_rb_lastline_set
-#define rb_load_protect                        dll_rb_load_protect
-#define rb_num2long                    dll_rb_num2long
-#define rb_num2ulong                   dll_rb_num2ulong
-#define rb_obj_alloc                   dll_rb_obj_alloc
-#define rb_obj_as_string               dll_rb_obj_as_string
-#define rb_obj_id                      dll_rb_obj_id
-#define rb_raise                       dll_rb_raise
-#define rb_str2cstr                    dll_rb_str2cstr
-#define rb_str_cat                     dll_rb_str_cat
-#define rb_str_concat                  dll_rb_str_concat
-#define rb_str_new                     dll_rb_str_new
-#ifdef rb_str_new2
+# define rb_assoc_new                  dll_rb_assoc_new
+# define rb_cObject                    (*dll_rb_cObject)
+# define rb_check_type                 dll_rb_check_type
+# define rb_class_path                 dll_rb_class_path
+# define rb_data_object_alloc          dll_rb_data_object_alloc
+# define rb_define_class_under         dll_rb_define_class_under
+# define rb_define_const                       dll_rb_define_const
+# define rb_define_global_function     dll_rb_define_global_function
+# define rb_define_method              dll_rb_define_method
+# define rb_define_module              dll_rb_define_module
+# define rb_define_module_function     dll_rb_define_module_function
+# define rb_define_singleton_method    dll_rb_define_singleton_method
+# define rb_define_virtual_variable    dll_rb_define_virtual_variable
+# define rb_stdout                     (*dll_rb_stdout)
+# define rb_eArgError                  (*dll_rb_eArgError)
+# define rb_eIndexError                        (*dll_rb_eIndexError)
+# define rb_eRuntimeError              (*dll_rb_eRuntimeError)
+# define rb_eStandardError             (*dll_rb_eStandardError)
+# define rb_eval_string_protect                dll_rb_eval_string_protect
+# define rb_global_variable            dll_rb_global_variable
+# define rb_hash_aset                  dll_rb_hash_aset
+# define rb_hash_new                   dll_rb_hash_new
+# define rb_inspect                    dll_rb_inspect
+# define rb_int2inum                   dll_rb_int2inum
+# if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+#  define rb_fix2int                   dll_rb_fix2int
+#  define rb_num2int                   dll_rb_num2int
+#  define rb_num2uint                  dll_rb_num2uint
+# endif
+# define rb_lastline_get                       dll_rb_lastline_get
+# define rb_lastline_set                       dll_rb_lastline_set
+# define rb_load_protect                       dll_rb_load_protect
+# ifndef RUBY19_OR_LATER
+#  define rb_num2long                  dll_rb_num2long
+# endif
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 19
+#  define rb_num2ulong                 dll_rb_num2ulong
+# endif
+# define rb_obj_alloc                  dll_rb_obj_alloc
+# define rb_obj_as_string              dll_rb_obj_as_string
+# define rb_obj_id                     dll_rb_obj_id
+# define rb_raise                      dll_rb_raise
+# define rb_str_cat                    dll_rb_str_cat
+# define rb_str_concat                 dll_rb_str_concat
+# define rb_str_new                    dll_rb_str_new
+# ifdef rb_str_new2
 /* Ruby may #define rb_str_new2 to use rb_str_new_cstr. */
-# define need_rb_str_new_cstr 1
-# define rb_str_new_cstr               dll_rb_str_new_cstr
-#else
-# define rb_str_new2                   dll_rb_str_new2
-#endif
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-# define rb_string_value_ptr           dll_rb_string_value_ptr
-# define rb_float_new                  dll_rb_float_new
-# define rb_ary_new                    dll_rb_ary_new
-# define rb_ary_push                   dll_rb_ary_push
-#endif
-#ifdef RUBY19_OR_LATER
-# define rb_errinfo                    dll_rb_errinfo
-#else
-# define ruby_errinfo                  (*dll_ruby_errinfo)
-#endif
-#define ruby_init                      dll_ruby_init
-#define ruby_init_loadpath             dll_ruby_init_loadpath
-#define NtInitialize                   dll_NtInitialize
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-# define rb_w32_snprintf               dll_rb_w32_snprintf
-#endif
+#  define need_rb_str_new_cstr 1
+/* Ruby's headers #define rb_str_new_cstr to make use of GCC's
+ * __builtin_constant_p extension. */
+#  undef rb_str_new_cstr
+#  define rb_str_new_cstr              dll_rb_str_new_cstr
+# else
+#  define rb_str_new2                  dll_rb_str_new2
+# endif
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+#  define rb_string_value              dll_rb_string_value
+#  define rb_string_value_ptr          dll_rb_string_value_ptr
+#  define rb_float_new                 dll_rb_float_new
+#  define rb_ary_new                   dll_rb_ary_new
+#  define rb_ary_push                  dll_rb_ary_push
+#  if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+#   ifdef __ia64
+#    define rb_ia64_bsp                        dll_rb_ia64_bsp
+#    undef ruby_init_stack
+#    define ruby_init_stack(addr)      dll_ruby_init_stack((addr), rb_ia64_bsp())
+#   else
+#    define ruby_init_stack            dll_ruby_init_stack
+#   endif
+#  endif
+# else
+#  define rb_str2cstr                  dll_rb_str2cstr
+# endif
+# ifdef RUBY19_OR_LATER
+#  define rb_errinfo                   dll_rb_errinfo
+# else
+#  define ruby_errinfo                 (*dll_ruby_errinfo)
+# endif
+# define ruby_init                     dll_ruby_init
+# define ruby_init_loadpath            dll_ruby_init_loadpath
+# ifdef WIN3264
+#  define NtInitialize                 dll_NtInitialize
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+#   define rb_w32_snprintf             dll_rb_w32_snprintf
+#  endif
+# endif
 
-#ifdef RUBY19_OR_LATER
-# define ruby_script                   dll_ruby_script
-# define rb_enc_find_index             dll_rb_enc_find_index
-# define rb_enc_find                   dll_rb_enc_find
-# define rb_enc_str_new                        dll_rb_enc_str_new
-# define rb_sprintf                    dll_rb_sprintf
-# define ruby_init_stack               dll_ruby_init_stack
-#endif
+# ifdef RUBY19_OR_LATER
+#  define ruby_script                  dll_ruby_script
+#  define rb_enc_find_index            dll_rb_enc_find_index
+#  define rb_enc_find                  dll_rb_enc_find
+#  define rb_enc_str_new                       dll_rb_enc_str_new
+#  define rb_sprintf                   dll_rb_sprintf
+#  define rb_require                   dll_rb_require
+#  define ruby_process_options         dll_ruby_process_options
+# endif
 
 /*
  * Pointers for dynamic link
@@ -210,6 +275,9 @@ static void ruby_vim_init(void);
 static VALUE (*dll_rb_assoc_new) (VALUE, VALUE);
 VALUE *dll_rb_cFalseClass;
 VALUE *dll_rb_cFixnum;
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
+VALUE *dll_rb_cFloat;
+# endif
 VALUE *dll_rb_cNilClass;
 static VALUE *dll_rb_cObject;
 VALUE *dll_rb_cSymbol;
@@ -236,7 +304,11 @@ static VALUE (*dll_rb_hash_aset) (VALUE, VALUE, VALUE);
 static VALUE (*dll_rb_hash_new) (void);
 static VALUE (*dll_rb_inspect) (VALUE);
 static VALUE (*dll_rb_int2inum) (long);
-static VALUE (*dll_rb_int2inum) (long);
+# if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+static long (*dll_rb_fix2int) (VALUE);
+static long (*dll_rb_num2int) (VALUE);
+static unsigned long (*dll_rb_num2uint) (VALUE);
+# endif
 static VALUE (*dll_rb_lastline_get) (void);
 static void (*dll_rb_lastline_set) (VALUE);
 static void (*dll_rb_load_protect) (VALUE, int, int*);
@@ -246,47 +318,62 @@ static VALUE (*dll_rb_obj_alloc) (VALUE);
 static VALUE (*dll_rb_obj_as_string) (VALUE);
 static VALUE (*dll_rb_obj_id) (VALUE);
 static void (*dll_rb_raise) (VALUE, const char*, ...);
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+static VALUE (*dll_rb_string_value) (volatile VALUE*);
+# else
 static char *(*dll_rb_str2cstr) (VALUE,int*);
+# endif
 static VALUE (*dll_rb_str_cat) (VALUE, const char*, long);
 static VALUE (*dll_rb_str_concat) (VALUE, VALUE);
 static VALUE (*dll_rb_str_new) (const char*, long);
-#ifdef need_rb_str_new_cstr
+# ifdef need_rb_str_new_cstr
 /* Ruby may #define rb_str_new2 to use rb_str_new_cstr. */
 static VALUE (*dll_rb_str_new_cstr) (const char*);
-#else
+# else
 static VALUE (*dll_rb_str_new2) (const char*);
-#endif
-#ifdef RUBY19_OR_LATER
+# endif
+# ifdef RUBY19_OR_LATER
 static VALUE (*dll_rb_errinfo) (void);
-#else
+# else
 static VALUE *dll_ruby_errinfo;
-#endif
+# endif
 static void (*dll_ruby_init) (void);
 static void (*dll_ruby_init_loadpath) (void);
+# ifdef WIN3264
 static void (*dll_NtInitialize) (int*, char***);
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
+#  endif
+# endif
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
 static char * (*dll_rb_string_value_ptr) (volatile VALUE*);
 static VALUE (*dll_rb_float_new) (double);
 static VALUE (*dll_rb_ary_new) (void);
 static VALUE (*dll_rb_ary_push) (VALUE, VALUE);
-#endif
-#ifdef RUBY19_OR_LATER
+#  if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+#   ifdef __ia64
+static void * (*dll_rb_ia64_bsp) (void);
+static void (*dll_ruby_init_stack)(VALUE*, void*);
+#   else
+static void (*dll_ruby_init_stack)(VALUE*);
+#   endif
+#  endif
+# endif
+# ifdef RUBY19_OR_LATER
 static VALUE (*dll_rb_int2big)(SIGNED_VALUE);
-#endif
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
-#endif
+# endif
 
-#ifdef RUBY19_OR_LATER
+# ifdef RUBY19_OR_LATER
 static void (*dll_ruby_script) (const char*);
 static int (*dll_rb_enc_find_index) (const char*);
 static rb_encoding* (*dll_rb_enc_find) (const char*);
 static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*);
 static VALUE (*dll_rb_sprintf) (const char*, ...);
-static void (*ruby_init_stack)(VALUE*);
-#endif
+static VALUE (*dll_rb_require) (const char*);
+static void* (*ruby_process_options)(int, char**);
+# endif
 
-#ifdef RUBY19_OR_LATER
+# if defined(RUBY19_OR_LATER) && !defined(PROTO)
 SIGNED_VALUE rb_num2long_stub(VALUE x)
 {
     return dll_rb_num2long(x);
@@ -295,14 +382,35 @@ VALUE rb_int2big_stub(SIGNED_VALUE x)
 {
     return dll_rb_int2big(x);
 }
-#endif
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
+       && SIZEOF_INT < SIZEOF_LONG
+long rb_fix2int_stub(VALUE x)
+{
+    return dll_rb_fix2int(x);
+}
+long rb_num2int_stub(VALUE x)
+{
+    return dll_rb_num2int(x);
+}
+#  endif
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
+VALUE
+rb_float_new_in_heap(double d)
+{
+    return dll_rb_float_new(d);
+}
+VALUE rb_num2ulong(VALUE x)
+{
+    return (long)RSHIFT((SIGNED_VALUE)(x),1);
+}
+#  endif
+# endif
 
-static HINSTANCE hinstRuby = 0; /* Instance of ruby.dll */
+static HINSTANCE hinstRuby = NULL; /* Instance of ruby.dll */
 
 /*
  * Table of name to function pointer of ruby.
  */
-#define RUBY_PROC FARPROC
 static struct
 {
     char *name;
@@ -312,6 +420,9 @@ static struct
     {"rb_assoc_new", (RUBY_PROC*)&dll_rb_assoc_new},
     {"rb_cFalseClass", (RUBY_PROC*)&dll_rb_cFalseClass},
     {"rb_cFixnum", (RUBY_PROC*)&dll_rb_cFixnum},
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
+    {"rb_cFloat", (RUBY_PROC*)&dll_rb_cFloat},
+# endif
     {"rb_cNilClass", (RUBY_PROC*)&dll_rb_cNilClass},
     {"rb_cObject", (RUBY_PROC*)&dll_rb_cObject},
     {"rb_cSymbol", (RUBY_PROC*)&dll_rb_cSymbol},
@@ -338,6 +449,11 @@ static struct
     {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
     {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
     {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
+# if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+    {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
+    {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
+    {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint},
+# endif
     {"rb_lastline_get", (RUBY_PROC*)&dll_rb_lastline_get},
     {"rb_lastline_set", (RUBY_PROC*)&dll_rb_lastline_set},
     {"rb_load_protect", (RUBY_PROC*)&dll_rb_load_protect},
@@ -347,47 +463,64 @@ static struct
     {"rb_obj_as_string", (RUBY_PROC*)&dll_rb_obj_as_string},
     {"rb_obj_id", (RUBY_PROC*)&dll_rb_obj_id},
     {"rb_raise", (RUBY_PROC*)&dll_rb_raise},
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+    {"rb_string_value", (RUBY_PROC*)&dll_rb_string_value},
+# else
     {"rb_str2cstr", (RUBY_PROC*)&dll_rb_str2cstr},
+# endif
     {"rb_str_cat", (RUBY_PROC*)&dll_rb_str_cat},
     {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat},
     {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new},
-#ifdef need_rb_str_new_cstr
+# ifdef need_rb_str_new_cstr
     {"rb_str_new_cstr", (RUBY_PROC*)&dll_rb_str_new_cstr},
-#else
+# else
     {"rb_str_new2", (RUBY_PROC*)&dll_rb_str_new2},
-#endif
-#ifdef RUBY19_OR_LATER
+# endif
+# ifdef RUBY19_OR_LATER
     {"rb_errinfo", (RUBY_PROC*)&dll_rb_errinfo},
-#else
+# else
     {"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo},
-#endif
+# endif
     {"ruby_init", (RUBY_PROC*)&dll_ruby_init},
     {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath},
+# ifdef WIN3264
     {
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
     "NtInitialize",
-#else
+#  else
     "ruby_sysinit",
-#endif
+#  endif
                        (RUBY_PROC*)&dll_NtInitialize},
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
     {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf},
-#endif
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+#  endif
+# endif
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
     {"rb_string_value_ptr", (RUBY_PROC*)&dll_rb_string_value_ptr},
+#  if DYNAMIC_RUBY_VER <= 19
     {"rb_float_new", (RUBY_PROC*)&dll_rb_float_new},
+#  else
+    {"rb_float_new_in_heap", (RUBY_PROC*)&dll_rb_float_new},
+#  endif
     {"rb_ary_new", (RUBY_PROC*)&dll_rb_ary_new},
     {"rb_ary_push", (RUBY_PROC*)&dll_rb_ary_push},
-#endif
-#ifdef RUBY19_OR_LATER
+# endif
+# ifdef RUBY19_OR_LATER
     {"rb_int2big", (RUBY_PROC*)&dll_rb_int2big},
     {"ruby_script", (RUBY_PROC*)&dll_ruby_script},
     {"rb_enc_find_index", (RUBY_PROC*)&dll_rb_enc_find_index},
     {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find},
     {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new},
     {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf},
+    {"rb_require", (RUBY_PROC*)&dll_rb_require},
+    {"ruby_process_options", (RUBY_PROC*)&dll_ruby_process_options},
+# endif
+# if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+#  ifdef __ia64
+    {"rb_ia64_bsp", (RUBY_PROC*)&dll_rb_ia64_bsp},
+#  endif
     {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
-#endif
+# endif
     {"", NULL},
 };
 
@@ -399,8 +532,8 @@ end_dynamic_ruby()
 {
     if (hinstRuby)
     {
-       FreeLibrary(hinstRuby);
-       hinstRuby = 0;
+       close_dll(hinstRuby);
+       hinstRuby = NULL;
     }
 }
 
@@ -416,7 +549,7 @@ ruby_runtime_link_init(char *libname, int verbose)
 
     if (hinstRuby)
        return OK;
-    hinstRuby = LoadLibrary(libname);
+    hinstRuby = load_dll(libname);
     if (!hinstRuby)
     {
        if (verbose)
@@ -426,11 +559,11 @@ ruby_runtime_link_init(char *libname, int verbose)
 
     for (i = 0; ruby_funcname_table[i].ptr; ++i)
     {
-       if (!(*ruby_funcname_table[i].ptr = GetProcAddress(hinstRuby,
+       if (!(*ruby_funcname_table[i].ptr = symbol_from_dll(hinstRuby,
                        ruby_funcname_table[i].name)))
        {
-           FreeLibrary(hinstRuby);
-           hinstRuby = 0;
+           close_dll(hinstRuby);
+           hinstRuby = NULL;
            if (verbose)
                EMSG2(_(e_loadfunc), ruby_funcname_table[i].name);
            return FAIL;
@@ -539,9 +672,9 @@ void ex_rubydo(exarg_T *eap)
        if (u_save(eap->line1 - 1, eap->line2 + 1) != OK)
            return;
        for (i = eap->line1; i <= eap->line2; i++) {
-           VALUE line, oldline;
+           VALUE line;
 
-           line = oldline = vim_str2rb_enc_str((char *)ml_get(i));
+           line = vim_str2rb_enc_str((char *)ml_get(i));
            rb_lastline_set(line);
            eval_enc_string_protect((char *) eap->arg, &state);
            if (state) {
@@ -610,19 +743,22 @@ static int ensure_ruby_initialized(void)
            NtInitialize(&argc, &argv);
 #endif
            {
-#ifdef RUBY19_OR_LATER
-               RUBY_INIT_STACK;
+#if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+               ruby_init_stack(ruby_stack_start);
 #endif
                ruby_init();
            }
 #ifdef RUBY19_OR_LATER
+           {
+               int dummy_argc = 2;
+               char *dummy_argv[] = {"vim-ruby", "-e0"};
+               ruby_process_options(dummy_argc, dummy_argv);
+           }
            ruby_script("vim-ruby");
-#endif
+#else
            ruby_init_loadpath();
-           ruby_io_init();
-#ifdef RUBY19_OR_LATER
-           rb_enc_find_index("encdb");
 #endif
+           ruby_io_init();
            ruby_vim_init();
            ruby_initialized = 1;
 #ifdef DYNAMIC_RUBY
@@ -711,11 +847,19 @@ static VALUE vim_message(VALUE self UNUSED, VALUE str)
     char *buff, *p;
 
     str = rb_obj_as_string(str);
-    buff = ALLOCA_N(char, RSTRING_LEN(str));
-    strcpy(buff, RSTRING_PTR(str));
-    p = strchr(buff, '\n');
-    if (p) *p = '\0';
-    MSG(buff);
+    if (RSTRING_LEN(str) > 0)
+    {
+       /* Only do this when the string isn't empty, alloc(0) causes trouble. */
+       buff = ALLOCA_N(char, RSTRING_LEN(str));
+       strcpy(buff, RSTRING_PTR(str));
+       p = strchr(buff, '\n');
+       if (p) *p = '\0';
+       MSG(buff);
+    }
+    else
+    {
+       MSG("");
+    }
     return Qnil;
 }
 
@@ -906,15 +1050,9 @@ static VALUE buffer_count(VALUE self)
 
 static VALUE get_buffer_line(buf_T *buf, linenr_T n)
 {
-    if (n > 0 && n <= buf->b_ml.ml_line_count)
-    {
-       char *line = (char *)ml_get_buf(buf, n, FALSE);
-       return line ? vim_str2rb_enc_str(line) : Qnil;
-    }
-    rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
-#ifndef __GNUC__
-    return Qnil; /* For stop warning */
-#endif
+    if (n <= 0 || n > buf->b_ml.ml_line_count)
+       rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
+    return vim_str2rb_enc_str((char *)ml_get_buf(buf, n, FALSE));
 }
 
 static VALUE buffer_aref(VALUE self, VALUE num)
@@ -953,9 +1091,6 @@ static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
     else
     {
        rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
-#ifndef __GNUC__
-       return Qnil; /* For stop warning */
-#endif
     }
     return str;
 }
@@ -1010,7 +1145,8 @@ static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
     long       n = NUM2LONG(num);
     aco_save_T aco;
 
-    if (line == NULL) {
+    if (line == NULL)
+    {
        rb_raise(rb_eIndexError, "NULL line");
     }
     else if (n >= 0 && n <= buf->b_ml.ml_line_count)
@@ -1034,7 +1170,8 @@ static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
 
        update_curbuf(NOT_VALID);
     }
-    else {
+    else
+    {
        rb_raise(rb_eIndexError, "line number %ld out of range", n);
     }
     return str;
@@ -1145,21 +1282,21 @@ static VALUE window_set_height(VALUE self, VALUE height)
     return height;
 }
 
-static VALUE window_width(VALUE self)
+static VALUE window_width(VALUE self UNUSED)
 {
-    win_T *win = get_win(self);
-
-    return INT2NUM(win->w_width);
+    return INT2NUM(W_WIDTH(get_win(self)));
 }
 
-static VALUE window_set_width(VALUE self, VALUE width)
+static VALUE window_set_width(VALUE self UNUSED, VALUE width)
 {
+#ifdef FEAT_VERTSPLIT
     win_T *win = get_win(self);
     win_T *savewin = curwin;
 
     curwin = win;
     win_setwidth(NUM2INT(width));
     curwin = savewin;
+#endif
     return width;
 }
 
@@ -1187,6 +1324,11 @@ static VALUE window_set_cursor(VALUE self, VALUE pos)
     return Qnil;
 }
 
+static VALUE f_nop(VALUE self UNUSED)
+{
+    return Qnil;
+}
+
 static VALUE f_p(int argc, VALUE *argv, VALUE self UNUSED)
 {
     int i;
@@ -1208,6 +1350,7 @@ static void ruby_io_init(void)
 
     rb_stdout = rb_obj_alloc(rb_cObject);
     rb_define_singleton_method(rb_stdout, "write", vim_message, 1);
+    rb_define_singleton_method(rb_stdout, "flush", f_nop, 0);
     rb_define_global_function("p", f_p, -1);
 }
 
@@ -1217,7 +1360,7 @@ static void ruby_vim_init(void)
     rb_global_variable(&objtbl);
 
     /* The Vim module used to be called "VIM", but "Vim" is better.  Make an
-     * alias "VIM" for backwards compatiblity. */
+     * alias "VIM" for backwards compatibility. */
     mVIM = rb_define_module("Vim");
     rb_define_const(rb_cObject, "VIM", mVIM);
     rb_define_const(mVIM, "VERSION_MAJOR", INT2NUM(VIM_VERSION_MAJOR));
@@ -1273,3 +1416,9 @@ static void ruby_vim_init(void)
     rb_define_virtual_variable("$curbuf", buffer_s_current, 0);
     rb_define_virtual_variable("$curwin", window_s_current, 0);
 }
+
+void vim_ruby_init(void *stack_start)
+{
+    /* should get machine stack start address early in main function */
+    ruby_stack_start = stack_start;
+}
index d82f4e5..5cacb72 100644 (file)
@@ -9,7 +9,6 @@
 
 #ifdef WIN32
 # include <stdio.h>
-# include "vimio.h"
 # include <process.h>
 # include <string.h>
 # include <assert.h>
@@ -450,7 +449,7 @@ find_sniff_cmd(cmd)
     if (!sniff_cmd)
     {
        struct sn_cmd_list *list = sniff_cmd_ext;
-       while(list)
+       while (list)
        {
            if (!strcmp(cmd, list->sniff_cmd->cmd_name))
            {
@@ -480,7 +479,7 @@ add_sniff_cmd(cmd, def, msg)
        /* unescape message text */
        char *p = msg;
        char *end = p+strlen(msg);
-       while(*p)
+       while (*p)
        {
            if (*p == '\\')
                mch_memmove(p,p+1,end-p);
@@ -490,7 +489,7 @@ add_sniff_cmd(cmd, def, msg)
        SNIFF_TRACE1("request def = %s\n",def);
        SNIFF_TRACE1("request msg = %s\n",msg);
 
-       while(list && list->next_cmd)
+       while (list && list->next_cmd)
            list = list->next_cmd;
        if (!list)
            sniff_cmd_ext = cmd_node;
@@ -629,7 +628,7 @@ sniff_disconnect(immediately)
            gui_mch_wait_for_chars(0L);
 #endif
 #ifdef WIN32
-       while(sniffBufStart != NULL)
+       while (sniffBufStart != NULL)
        {
            struct sniffBufNode *node = sniffBufStart;
            sniffBufStart = sniffBufStart->next;
@@ -790,7 +789,7 @@ HandleSniffRequest(buffer)
     command   = buffer[0];
     arguments = &buffer[1];
     token = strtok(arguments, sniff_rq_sep);
-    while(argc <3)
+    while (argc <3)
     {
        if (token)
        {
@@ -926,7 +925,7 @@ HandleSniffRequest(buffer)
        default :
            break;
     }
-    while(argc)
+    while (argc)
        vim_free(argv[--argc]);
 }
 
index f87407d..be9cd64 100644 (file)
@@ -74,18 +74,18 @@ TODO:
 #endif
 
 #include <tcl.h>
-#include <errno.h>
 #include <string.h>
 
 typedef struct
 {
     Tcl_Interp *interp;
+    int exitvalue;
     int range_start, range_end;
     int lbase;
     char *curbuf, *curwin;
 } tcl_info;
 
-static tcl_info tclinfo = { NULL, 0, 0, 0, NULL, NULL };
+static tcl_info tclinfo = { NULL, 0, 0, 0, 0, NULL, NULL };
 
 #define VAR_RANGE1     "::vim::range(start)"
 #define VAR_RANGE2     "::vim::range(begin)"
@@ -195,7 +195,7 @@ tcl_runtime_link_init(char *libname, int verbose)
 
     if (hTclLib)
        return OK;
-    if (!(hTclLib = LoadLibraryEx(libname, NULL, 0)))
+    if (!(hTclLib = vimLoadLib(libname)))
     {
        if (verbose)
            EMSG2(_(e_loadlib), libname);
@@ -280,16 +280,19 @@ tcl_end()
  ****************************************************************************/
 
 /*
- * Replace standard "exit" and "catch" commands.
+ * Replace standard "exit" command.
  *
- * This is a design flaw in Tcl -  the standard "exit" command just calls
- * exit() and kills the application.  It should return TCL_EXIT to the
- * app, which then decides if it wants to terminate or not.  In our case,
- * we just delete the Tcl interpreter (and create a new one with the next
- * :tcl command).
+ * Delete the Tcl interpreter; a new one will be created with the next
+ * :tcl command). The exit code is saved (and retrieved in tclexit()).
+ * Since Tcl's exit is never expected to return and this replacement
+ * does, then (except for a trivial case) additional Tcl commands will
+ * be run. Since the interpreter is now marked as deleted, an error
+ * will be returned -- typically "attempt to call eval in deleted
+ * interpreter". Hopefully, at this point, checks for TCL_ERROR take
+ * place and control percolates back up to Vim -- but with this new error
+ * string in the interpreter's result value. Therefore it would be
+ * useless for this routine to return the exit code via Tcl_SetResult().
  */
-#define TCL_EXIT       5
-
     static int
 exitcmd(dummy, interp, objc, objv)
     ClientData dummy UNUSED;
@@ -306,47 +309,12 @@ exitcmd(dummy, interp, objc, objv)
                break;
            /* FALLTHROUGH */
        case 1:
-           Tcl_SetObjResult(interp, Tcl_NewIntObj(value));
-           return TCL_EXIT;
-       default:
-           Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
-    }
-    return TCL_ERROR;
-}
+           tclinfo.exitvalue = value;
 
-    static int
-catchcmd(dummy, interp, objc, objv)
-    ClientData dummy UNUSED;
-    Tcl_Interp *interp;
-    int                objc;
-    Tcl_Obj    *CONST objv[];
-{
-    char    *varname = NULL;
-    int            result;
-
-    switch (objc)
-    {
-       case 3:
-           varname = Tcl_GetStringFromObj(objv[2], NULL);
-           /* fallthrough */
-       case 2:
-           Tcl_ResetResult(interp);
-           Tcl_AllowExceptions(interp);
-           result = Tcl_EvalObj(interp, objv[1]);
-           if (result == TCL_EXIT)
-               return result;
-           if (varname)
-           {
-               if (Tcl_SetVar(interp, varname, Tcl_GetStringResult(interp), 0) == NULL)
-               {
-                   Tcl_SetResult(interp, "couldn't save command result in variable", TCL_STATIC);
-                   return TCL_ERROR;
-               }
-           }
-           Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
-           return TCL_OK;
+           Tcl_DeleteInterp(interp);
+           break;
        default:
-           Tcl_WrongNumArgs(interp, 1, objv, "command ?varName?");
+           Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
     }
     return TCL_ERROR;
 }
@@ -373,6 +341,7 @@ beepcmd(dummy, interp, objc, objv)
 /*
  *  "::vim::buffer list" - create a list of buffer commands.
  *  "::vim::buffer {N}" - create buffer command for buffer N.
+ *  "::vim::buffer exists {N}" - test if buffer N exists.
  *  "::vim::buffer new" - create a new buffer (not implemented)
  */
     static int
@@ -1664,7 +1633,7 @@ channel_gethandle(instance, direction, handleptr)
 static Tcl_ChannelType channel_type =
 {
     "vimmessage",      /* typeName */
-    NULL,              /* version */
+    TCL_CHANNEL_VERSION_2, /* version */
     channel_close,     /* closeProc */
     channel_input,     /* inputProc */
     channel_output,    /* outputProc */
@@ -1679,6 +1648,8 @@ static Tcl_ChannelType channel_type =
     NULL,              /* flushProc */
     NULL,              /* handlerProc */
 #endif
+/* The following should not be necessary since TCL_CHANNEL_VERSION_2 was
+ * set above */
 #ifdef TCL_CHANNEL_VERSION_3
     NULL,              /* wideSeekProc */
 #endif
@@ -1742,7 +1713,9 @@ tclinit(eap)
        Tcl_Interp *interp;
        static Tcl_Channel ch1, ch2;
 
-       /* replace stdout and stderr */
+       /* Create replacement channels for stdout and stderr; this has to be
+        * done each time an interpreter is created since the channels are closed
+        * when the interpreter is deleted */
        ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
        ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
        Tcl_SetStdChannel(ch1, TCL_STDOUT);
@@ -1762,15 +1735,18 @@ tclinit(eap)
 #endif
 
        Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
+#ifdef WIN3264
+       Tcl_SetChannelOption(interp, ch1, "-translation", "lf");
+#endif
        Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
+#ifdef WIN3264
+       Tcl_SetChannelOption(interp, ch2, "-translation", "lf");
+#endif
 
-       /* replace some standard Tcl commands */
+       /* replace standard Tcl exit command */
        Tcl_DeleteCommand(interp, "exit");
        Tcl_CreateObjCommand(interp, "exit", exitcmd,
            (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
-       Tcl_DeleteCommand(interp, "catch");
-       Tcl_CreateObjCommand(interp, "catch", catchcmd,
-           (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
 
        /* new commands, in ::vim namespace */
        Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
@@ -1822,6 +1798,8 @@ tclinit(eap)
        tclinfo.range_end = row2tcl(eap->line2);
        tclupdatevars();
     }
+
+    tclinfo.exitvalue = 0;
     return OK;
 }
 
@@ -1885,30 +1863,23 @@ tclexit(error)
 {
     int newerr = OK;
 
-    if (error == TCL_EXIT )
+    if (Tcl_InterpDeleted(tclinfo.interp)     /* True if we intercepted Tcl's exit command */
+#if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
+       || Tcl_LimitExceeded(tclinfo.interp)  /* True if the interpreter cannot continue */
+#endif
+       )
     {
-       int retval;
        char buf[50];
-       Tcl_Obj *robj;
 
-       robj = Tcl_GetObjResult(tclinfo.interp);
-       if( Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK )
+       sprintf(buf, _("E572: exit code %d"), tclinfo.exitvalue);
+       tclerrmsg(buf);
+       if (tclinfo.exitvalue == 0)
        {
-           EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
-           newerr = FAIL;
+           did_emsg = 0;
+           newerr = OK;
        }
        else
-       {
-           sprintf(buf, _("E572: exit code %d"), retval);
-           tclerrmsg(buf);
-           if (retval == 0 )
-           {
-               did_emsg = 0;
-               newerr = OK;
-           }
-           else
-               newerr = FAIL;
-       }
+           newerr = FAIL;
 
        tcldelthisinterp();
     }
@@ -2022,7 +1993,12 @@ ex_tcldo(eap)
        Tcl_SetVar(tclinfo.interp, var_line, line, 0);
        Tcl_AllowExceptions(tclinfo.interp);
        err = Tcl_Eval(tclinfo.interp, script);
-       if (err != TCL_OK)
+       if (err != TCL_OK
+           || Tcl_InterpDeleted(tclinfo.interp)
+#if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
+           || Tcl_LimitExceeded(tclinfo.interp)
+#endif
+          )
            break;
        line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
        if (line)
index 5412b35..44526d7 100644 (file)
@@ -572,61 +572,55 @@ ServerWait(dpy, w, endCond, endData, localLoop, seconds)
 {
     time_t         start;
     time_t         now;
-    time_t         lastChk = 0;
     XEvent         event;
-    XPropertyEvent *e = (XPropertyEvent *)&event;
-#   define SEND_MSEC_POLL 50
+
+#define UI_MSEC_DELAY 50
+#define SEND_MSEC_POLL 500
+#ifndef HAVE_SELECT
+    struct pollfd   fds;
+
+    fds.fd = ConnectionNumber(dpy);
+    fds.events = POLLIN;
+#else
+    fd_set         fds;
+    struct timeval  tv;
+
+    tv.tv_sec = 0;
+    tv.tv_usec =  SEND_MSEC_POLL * 1000;
+    FD_ZERO(&fds);
+    FD_SET(ConnectionNumber(dpy), &fds);
+#endif
 
     time(&start);
-    while (endCond(endData) == 0)
+    while (TRUE)
     {
+       while (XCheckWindowEvent(dpy, commWindow, PropertyChangeMask, &event))
+           serverEventProc(dpy, &event);
+
+       if (endCond(endData) != 0)
+           break;
+       if (!WindowValid(dpy, w))
+           break;
        time(&now);
        if (seconds >= 0 && (now - start) >= seconds)
            break;
-       if (now != lastChk)
-       {
-           lastChk = now;
-           if (!WindowValid(dpy, w))
-               break;
-           /*
-            * Sometimes the PropertyChange event doesn't come.
-            * This can be seen in eg: vim -c 'echo remote_expr("gvim", "3+2")'
-            */
-           serverEventProc(dpy, NULL);
-       }
+
+       /* Just look out for the answer without calling back into Vim */
        if (localLoop)
        {
-           /* Just look out for the answer without calling back into Vim */
 #ifndef HAVE_SELECT
-           struct pollfd   fds;
-
-           fds.fd = ConnectionNumber(dpy);
-           fds.events = POLLIN;
            if (poll(&fds, 1, SEND_MSEC_POLL) < 0)
                break;
 #else
-           fd_set          fds;
-           struct timeval  tv;
-
-           tv.tv_sec = 0;
-           tv.tv_usec =  SEND_MSEC_POLL * 1000;
-           FD_ZERO(&fds);
-           FD_SET(ConnectionNumber(dpy), &fds);
-           if (select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &tv) < 0)
+           if (select(FD_SETSIZE, &fds, NULL, NULL, &tv) < 0)
                break;
 #endif
-           while (XEventsQueued(dpy, QueuedAfterReading) > 0)
-           {
-               XNextEvent(dpy, &event);
-               if (event.type == PropertyNotify && e->window == commWindow)
-                   serverEventProc(dpy, &event);
-           }
        }
        else
        {
            if (got_int)
                break;
-           ui_delay((long)SEND_MSEC_POLL, TRUE);
+           ui_delay((long)UI_MSEC_DELAY, TRUE);
            ui_breakcheck();
        }
     }
@@ -655,7 +649,6 @@ serverGetVimNames(dpy)
        if (SendInit(dpy) < 0)
            return NULL;
     }
-    ga_init2(&ga, 1, 100);
 
     /*
      * Read the registry property.
@@ -1198,9 +1191,8 @@ serverEventProc(dpy, eventPtr)
        if ((*p == 'c' || *p == 'k') && (p[1] == 0))
        {
            Window      resWindow;
-           char_u      *name, *script, *serial, *end, *res;
+           char_u      *name, *script, *serial, *end;
            Bool        asKeys = *p == 'k';
-           garray_T    reply;
            char_u      *enc;
 
            /*
@@ -1256,50 +1248,52 @@ serverEventProc(dpy, eventPtr)
            if (script == NULL || name == NULL)
                continue;
 
-           /*
-            * Initialize the result property, so that we're ready at any
-            * time if we need to return an error.
-            */
-           if (resWindow != None)
-           {
-               ga_init2(&reply, 1, 100);
+            if (serverName != NULL && STRICMP(name, serverName) == 0)
+            {
+                script = serverConvert(enc, script, &tofree);
+                if (asKeys)
+                    server_to_input_buf(script);
+                else
+                {
+                    char_u      *res;
+
+                    res = eval_client_expr_to_string(script);
+                   if (resWindow != None)
+                   {
+                       garray_T    reply;
+
+                       /* Initialize the result property. */
+                       ga_init2(&reply, 1, 100);
 #ifdef FEAT_MBYTE
-               ga_grow(&reply, 50 + STRLEN(p_enc));
-               sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
+                       ga_grow(&reply, 50 + STRLEN(p_enc));
+                       sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
                                                   0, 0, p_enc, 0, serial, 0);
-               reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
+                       reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
 #else
-               ga_grow(&reply, 50);
-               sprintf(reply.ga_data, "%cr%c-s %s%c-r ", 0, 0, serial, 0);
-               reply.ga_len = 10 + STRLEN(serial);
+                       ga_grow(&reply, 50);
+                       sprintf(reply.ga_data, "%cr%c-s %s%c-r ",
+                                                            0, 0, serial, 0);
+                       reply.ga_len = 10 + STRLEN(serial);
 #endif
-           }
-           res = NULL;
-           if (serverName != NULL && STRICMP(name, serverName) == 0)
-           {
-               script = serverConvert(enc, script, &tofree);
-               if (asKeys)
-                   server_to_input_buf(script);
-               else
-                   res = eval_client_expr_to_string(script);
-               vim_free(tofree);
-           }
-           if (resWindow != None)
-           {
-               if (res != NULL)
-                   ga_concat(&reply, res);
-               else if (asKeys == 0)
-               {
-                   ga_concat(&reply, (char_u *)_(e_invexprmsg));
-                   ga_append(&reply, 0);
-                   ga_concat(&reply, (char_u *)"-c 1");
-               }
-               ga_append(&reply, NUL);
-               (void)AppendPropCarefully(dpy, resWindow, commProperty,
-                                          reply.ga_data, reply.ga_len);
-               ga_clear(&reply);
-           }
-           vim_free(res);
+
+                       /* Evaluate the expression and return the result. */
+                       if (res != NULL)
+                           ga_concat(&reply, res);
+                       else
+                       {
+                           ga_concat(&reply, (char_u *)_(e_invexprmsg));
+                           ga_append(&reply, 0);
+                           ga_concat(&reply, (char_u *)"-c 1");
+                       }
+                       ga_append(&reply, NUL);
+                       (void)AppendPropCarefully(dpy, resWindow, commProperty,
+                                                reply.ga_data, reply.ga_len);
+                       ga_clear(&reply);
+                   }
+                    vim_free(res);
+                }
+                vim_free(tofree);
+            }
        }
        else if (*p == 'r' && p[1] == 0)
        {
index 8de684c..3f38c55 100644 (file)
@@ -33,7 +33,6 @@
 #include <sys/un.h>
 #endif
 
-#include <errno.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/param.h>
index 16d128a..986006d 100644 (file)
  */
 #define KS_TEAROFF             244
 
-/* used for JSB term mouse */
+/* Used for JSB term mouse. */
 #define KS_JSBTERM_MOUSE       243
 
-/* used a termcap entry that produces a normal character */
+/* Used a termcap entry that produces a normal character. */
 #define KS_KEY                 242
 
-/* Used for the qnx pterm mouse */
+/* Used for the qnx pterm mouse. */
 #define KS_PTERM_MOUSE         241
 
 /* Used for click in a tab pages label. */
 /* Used for menu in a tab pages line. */
 #define KS_TABMENU             239
 
+/* Used for the urxvt mouse. */
+#define KS_URXVT_MOUSE         238
+
+/* Used for the sgr mouse. */
+#define KS_SGR_MOUSE           237
+
 /*
  * Filler used after KS_SPECIAL and others
  */
@@ -408,6 +414,8 @@ enum key_extra
 #define K_DEC_MOUSE    TERMCAP2KEY(KS_DEC_MOUSE, KE_FILLER)
 #define K_JSBTERM_MOUSE        TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
 #define K_PTERM_MOUSE  TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
+#define K_URXVT_MOUSE  TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
+#define K_SGR_MOUSE    TERMCAP2KEY(KS_SGR_MOUSE, KE_FILLER)
 
 #define K_SELECT       TERMCAP2KEY(KS_SELECT, KE_FILLER)
 #define K_TEAROFF      TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
index 3d90f3c..71ee061 100755 (executable)
@@ -5,7 +5,7 @@
 # libraries when they exist, but this doesn't mean they are needed for Vim.
 #
 #      Author: Bram Moolenaar
-# Last change: 2006 Sep 26
+# Last change: 2010 Nov 03
 #     License: Public domain
 #
 # Warning: This fails miserably if the linker doesn't return an error code!
 echo "$LINK " >link.cmd
 exit_value=0
 
+if test "$LINK_AS_NEEDED" = yes; then
+  echo "link.sh: \$LINK_AS_NEEDED set to 'yes': invoking linker directly."
+  cat link.cmd
+  if sh link.cmd; then
+    exit_value=0
+    echo "link.sh: Linked fine"
+  else
+    exit_value=$?
+    echo "link.sh: Linking failed"
+  fi
+else
+  if test -f auto/link.sed; then
+
 #
 # If auto/link.sed already exists, use it.  We assume a previous run of
 # link.sh has found the correct set of libraries.
 #
-if test -f auto/link.sed; then
   echo "link.sh: The file 'auto/link.sed' exists, which is going to be used now."
   echo "link.sh: If linking fails, try deleting the auto/link.sed file."
   echo "link.sh: If this fails too, try creating an empty auto/link.sed file."
@@ -124,6 +136,8 @@ if test -f auto/link.sed -a ! -s auto/link.sed -a ! -f link3.sed; then
   fi
 fi
 
+fi
+
 #
 # cleanup
 #
index 599b403..f4a068c 100644 (file)
 # define MB_TOUPPER(c) TOUPPER_LOC(c)
 #endif
 
+/* Use our own isdigit() replacement, because on MS-Windows isdigit() returns
+ * non-zero for superscript 1.  Also avoids that isdigit() crashes for numbers
+ * below 0 and above 255.  */
+#define VIM_ISDIGIT(c) ((unsigned)(c) - '0' < 10)
+
 /* Like isalpha() but reject non-ASCII characters.  Can't be used with a
  * special key (negative value). */
 #ifdef EBCDIC
 # define ASCII_ISLOWER(c) islower(c)
 # define ASCII_ISUPPER(c) isupper(c)
 #else
-# define ASCII_ISALPHA(c) ((c) < 0x7f && isalpha(c))
-# define ASCII_ISALNUM(c) ((c) < 0x7f && isalnum(c))
-# define ASCII_ISLOWER(c) ((c) < 0x7f && islower(c))
-# define ASCII_ISUPPER(c) ((c) < 0x7f && isupper(c))
+# define ASCII_ISLOWER(c) ((unsigned)(c) - 'a' < 26)
+# define ASCII_ISUPPER(c) ((unsigned)(c) - 'A' < 26)
+# define ASCII_ISALPHA(c) (ASCII_ISUPPER(c) || ASCII_ISLOWER(c))
+# define ASCII_ISALNUM(c) (ASCII_ISALPHA(c) || VIM_ISDIGIT(c))
 #endif
 
-/* Use our own isdigit() replacement, because on MS-Windows isdigit() returns
- * non-zero for superscript 1.  Also avoids that isdigit() crashes for numbers
- * below 0 and above 255.  For complicated arguments and in/decrement use
- * vim_isdigit() instead. */
-#define VIM_ISDIGIT(c) ((c) >= '0' && (c) <= '9')
-
 /* macro version of chartab().
  * Only works with values 0-255!
  * Doesn't work for UTF-8 mode with chars >= 0x80. */
  * PTR2CHAR(): get character from pointer.
  */
 #ifdef FEAT_MBYTE
+/* Get the length of the character p points to */
+# define MB_PTR2LEN(p)         (has_mbyte ? (*mb_ptr2len)(p) : 1)
 /* Advance multi-byte pointer, skip over composing chars. */
 # define mb_ptr_adv(p)     p += has_mbyte ? (*mb_ptr2len)(p) : 1
 /* Advance multi-byte pointer, do not skip over composing chars. */
 
 # define MB_COPY_CHAR(f, t) if (has_mbyte) mb_copy_char(&f, &t); else *t++ = *f++
 # define MB_CHARLEN(p)     (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
+# define MB_CHAR2LEN(c)            (has_mbyte ? mb_char2len(c) : 1)
 # define PTR2CHAR(p)       (has_mbyte ? mb_ptr2char(p) : (int)*(p))
 #else
+# define MB_PTR2LEN(p)         1
 # define mb_ptr_adv(p)         ++p
 # define mb_cptr_adv(p)                ++p
 # define mb_ptr_back(s, p)     --p
 # define MB_COPY_CHAR(f, t)    *t++ = *f++
 # define MB_CHARLEN(p)         STRLEN(p)
+# define MB_CHAR2LEN(c)                1
 # define PTR2CHAR(p)           ((int)*(p))
 #endif
 
 #else
 # define DO_AUTOCHDIR
 #endif
+
+#if defined(FEAT_SCROLLBIND) && defined(FEAT_CURSORBIND)
+# define RESET_BINDING(wp)  (wp)->w_p_scb = FALSE; (wp)->w_p_crb = FALSE
+#else
+# if defined(FEAT_SCROLLBIND)
+#  define RESET_BINDING(wp)  (wp)->w_p_scb = FALSE
+# else
+#  if defined(FEAT_CURSORBIND)
+#   define RESET_BINDING(wp)  (wp)->w_p_crb = FALSE
+#  else
+#   define RESET_BINDING(wp)
+#  endif
+# endif
+#endif
index 340db63..3c91d39 100644 (file)
@@ -1213,9 +1213,9 @@ bundle-rsrc {virtual}: os_mac.rsr.hqx
     :move gui_mac.rsrc.rsrcfork $(RESDIR)/$(VIMNAME).rsrc
 
 # po/Make_osx.pl says something about generating a Mac message file
-# for Ukrananian.  Would somebody using Mac OS X in Ukranian
+# for Ukrainian.  Would somebody using Mac OS X in Ukrainian
 # *really* be upset that Carbon Vim was not localised in
-# Ukranian?
+# Ukrainian?
 #
 #bundle-language: bundle-dir po/Make_osx.pl
 #      cd po && perl Make_osx.pl --outdir ../$(RESDIR) $(MULTILANG)
index 435e607..884a308 100644 (file)
@@ -7,10 +7,6 @@
  * See README.txt for an overview of the Vim source code.
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"            /* for close() and dup() */
-#endif
-
 #define EXTERN
 #include "vim.h"
 
@@ -96,37 +92,39 @@ typedef struct
 #define EDIT_TAG    3      /* tag name argument given, use tagname */
 #define EDIT_QF            4       /* start in quickfix mode */
 
-#if defined(UNIX) || defined(VMS)
+#if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
 static int file_owned __ARGS((char *fname));
 #endif
 static void mainerr __ARGS((int, char_u *));
+#ifndef NO_VIM_MAIN
 static void main_msg __ARGS((char *s));
 static void usage __ARGS((void));
 static int get_number_arg __ARGS((char_u *p, int *idx, int def));
-#if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+# if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
 static void init_locale __ARGS((void));
-#endif
+# endif
 static void parse_command_name __ARGS((mparm_T *parmp));
 static void early_arg_scan __ARGS((mparm_T *parmp));
 static void command_line_scan __ARGS((mparm_T *parmp));
 static void check_tty __ARGS((mparm_T *parmp));
 static void read_stdin __ARGS((void));
 static void create_windows __ARGS((mparm_T *parmp));
-#ifdef FEAT_WINDOWS
+# ifdef FEAT_WINDOWS
 static void edit_buffers __ARGS((mparm_T *parmp));
-#endif
+# endif
 static void exe_pre_commands __ARGS((mparm_T *parmp));
 static void exe_commands __ARGS((mparm_T *parmp));
 static void source_startup_scripts __ARGS((mparm_T *parmp));
 static void main_start_gui __ARGS((void));
-#if defined(HAS_SWAP_EXISTS_ACTION)
+# if defined(HAS_SWAP_EXISTS_ACTION)
 static void check_swap_exists_action __ARGS((void));
-#endif
-#ifdef FEAT_CLIENTSERVER
+# endif
+# if defined(FEAT_CLIENTSERVER) || defined(PROTO)
 static void exec_on_server __ARGS((mparm_T *parmp));
 static void prepare_server __ARGS((mparm_T *parmp));
 static void cmdsrv_main __ARGS((int *argc, char **argv, char_u *serverName_arg, char_u **serverStr));
 static char_u *serverMakeName __ARGS((char_u *arg, char *cmd));
+# endif
 #endif
 
 
@@ -149,7 +147,8 @@ static char *(main_errors[]) =
 #define ME_INVALID_ARG         5
 };
 
-#ifndef PROTO      /* don't want a prototype for main() */
+#ifndef PROTO          /* don't want a prototype for main() */
+#ifndef NO_VIM_MAIN    /* skip this for unittests */
     int
 # ifdef VIMDLL
 _export
@@ -193,6 +192,13 @@ main
     params.window_count = -1;
 #endif
 
+#ifdef FEAT_RUBY
+    {
+       int ruby_stack_start;
+       vim_ruby_init((void *)&ruby_stack_start);
+    }
+#endif
+
 #ifdef FEAT_TCL
     vim_tcl_init(params.argv[0]);
 #endif
@@ -555,6 +561,43 @@ main
     debug_break_level = params.use_debug_break_level;
 #endif
 
+#ifdef FEAT_MZSCHEME
+    /*
+     * Newer version of MzScheme (Racket) require earlier (trampolined)
+     * initialisation via scheme_main_setup.
+     * Implement this by initialising it as early as possible
+     * and splitting off remaining Vim main into vim_main2
+     */
+    {
+       /* Pack up preprocessed command line arguments.
+        * It is safe because Scheme does not access argc/argv. */
+       char *args[2];
+       args[0] = (char *)fname;
+       args[1] = (char *)&params;
+       return mzscheme_main(2, args);
+    }
+}
+#endif
+#endif /* NO_VIM_MAIN */
+
+/* vim_main2() needs to be produced when FEAT_MZSCHEME is defined even when
+ * NO_VIM_MAIN is defined. */
+#ifdef FEAT_MZSCHEME
+    int
+vim_main2(int argc UNUSED, char **argv UNUSED)
+{
+# ifndef NO_VIM_MAIN
+    char_u     *fname = (char_u *)argv[0];
+    mparm_T    params;
+
+    memcpy(&params, argv[1], sizeof(params));
+# else
+    return 0;
+}
+# endif
+#endif
+
+#ifndef NO_VIM_MAIN
     /* Execute --cmd arguments. */
     exe_pre_commands(&params);
 
@@ -768,6 +811,9 @@ main
 
     starttermcap();        /* start termcap if not done by wait_return() */
     TIME_MSG("start termcap");
+#if defined(FEAT_TERMRESPONSE) && defined(FEAT_MBYTE)
+    may_req_ambiguous_character_width();
+#endif
 
 #ifdef FEAT_MOUSE
     setmouse();                                /* may start using the mouse */
@@ -904,6 +950,18 @@ main
     TIME_MSG("VimEnter autocommands");
 #endif
 
+#if defined(FEAT_EVAL) && defined(FEAT_CLIPBOARD)
+    /* Adjust default register name for "unnamed" in 'clipboard'. Can only be
+     * done after the clipboard is available and all initial commands that may
+     * modify the 'clipboard' setting have run; i.e. just before entering the
+     * main loop. */
+    {
+       int default_regname = 0;
+       adjust_clip_reg(&default_regname);
+       set_reg_var(default_regname);
+    }
+#endif
+
 #if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
     /* When a startup script or session file setup for diff'ing and
      * scrollbind, sync the scrollbind now. */
@@ -940,7 +998,7 @@ main
     if (netbeansArg != NULL && strncmp("-nb", netbeansArg, 3) == 0)
     {
 # ifdef FEAT_GUI
-#  if !defined(FEAT_GUI_MOTIF) && !defined(FEAT_GUI_GTK)  \
+#  if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)  \
                && !defined(FEAT_GUI_W32)
        if (gui.in_use)
        {
@@ -958,17 +1016,12 @@ main
 
     /*
      * Call the main command loop.  This never returns.
-     * For embedded MzScheme the main_loop will be called by Scheme
-     * for proper stack tracking
-     */
-#ifndef FEAT_MZSCHEME
+    */
     main_loop(FALSE, FALSE);
-#else
-    mzscheme_main();
-#endif
 
     return 0;
 }
+#endif /* NO_VIM_MAIN */
 #endif /* PROTO */
 
 /*
@@ -1009,6 +1062,7 @@ main_loop(cmdwin, noexmode)
        skip_redraw = FALSE;
        RedrawingDisabled = 0;
        no_wait_return = 0;
+       vgetc_busy = 0;
 # ifdef FEAT_EVAL
        emsg_skip = 0;
 # endif
@@ -1121,6 +1175,19 @@ main_loop(cmdwin, noexmode)
            }
 #endif
 
+#ifdef FEAT_AUTOCMD
+           /* Trigger TextChanged if b_changedtick differs. */
+           if (!finish_op && has_textchanged()
+                   && last_changedtick != curbuf->b_changedtick)
+           {
+               if (last_changedtick_buf == curbuf)
+                   apply_autocmds(EVENT_TEXTCHANGED, NULL, NULL,
+                                                              FALSE, curbuf);
+               last_changedtick_buf = curbuf;
+               last_changedtick = curbuf->b_changedtick;
+           }
+#endif
+
 #if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
            /* Scroll-binding for diff mode may have been postponed until
             * here.  Avoids doing it for every change. */
@@ -1202,7 +1269,9 @@ main_loop(cmdwin, noexmode)
                        || conceal_cursor_line(curwin)
                        || need_cursor_line_redraw))
            {
-               if (conceal_old_cursor_line != conceal_new_cursor_line)
+               if (conceal_old_cursor_line != conceal_new_cursor_line
+                       && conceal_old_cursor_line
+                                               <= curbuf->b_ml.ml_line_count)
                    update_single_line(curwin, conceal_old_cursor_line);
                update_single_line(curwin, conceal_new_cursor_line);
                curwin->w_valid &= ~VALID_CROW;
@@ -1330,12 +1399,15 @@ getout(exitval)
            for (wp = (tp == curtab)
                    ? firstwin : tp->tp_firstwin; wp != NULL; wp = wp->w_next)
            {
+               if (wp->w_buffer == NULL)
+                   /* Autocmd must have close the buffer already, skip. */
+                   continue;
                buf = wp->w_buffer;
                if (buf->b_changedtick != -1)
                {
                    apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname,
                                                    buf->b_fname, FALSE, buf);
-                   buf->b_changedtick = -1;    /* note that we did it already */
+                   buf->b_changedtick = -1;  /* note that we did it already */
                    /* start all over, autocommands may mess up the lists */
                    next_tp = first_tabpage;
                    break;
@@ -1432,6 +1504,7 @@ getout(exitval)
     mch_exit(exitval);
 }
 
+#ifndef NO_VIM_MAIN
 /*
  * Get a (optional) count for a Vim argument.
  */
@@ -2335,7 +2408,7 @@ scripterror:
             * Look for evidence of non-Cygwin paths before we bother.
             * This is only for when using the Unix files.
             */
-           if (strpbrk(p, "\\:") != NULL && !path_with_url(p))
+           if (vim_strpbrk(p, "\\:") != NULL && !path_with_url(p))
            {
                char posix_path[PATH_MAX];
 
@@ -2345,7 +2418,7 @@ scripterror:
                cygwin_conv_to_posix_path(p, posix_path);
 # endif
                vim_free(p);
-               p = vim_strsave(posix_path);
+               p = vim_strsave((char_u *)posix_path);
                if (p == NULL)
                    mch_exit(2);
            }
@@ -2743,7 +2816,25 @@ edit_buffers(parmp)
 # ifdef FEAT_AUTOCMD
     --autocmd_no_enter;
 # endif
-    win_enter(firstwin, FALSE);                /* back to first window */
+#if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+    /*
+     * Avoid making a preview window the current window.
+     */
+    if (firstwin->w_p_pvw)
+    {
+       win_T   *win;
+
+       for (win = firstwin; win != NULL; win = win->w_next)
+           if (!win->w_p_pvw)
+           {
+               firstwin = win;
+               break;
+           }
+    }
+#endif
+    /* make the first window the current window */
+    win_enter(firstwin, FALSE);
+
 # ifdef FEAT_AUTOCMD
     --autocmd_no_leave;
 # endif
@@ -2908,6 +2999,10 @@ source_startup_scripts(parmp)
                && do_source((char_u *)USR_VIMRC_FILE3, TRUE,
                                                           DOSO_VIMRC) == FAIL
 #endif
+#ifdef USR_VIMRC_FILE4
+               && do_source((char_u *)USR_VIMRC_FILE4, TRUE,
+                                                          DOSO_VIMRC) == FAIL
+#endif
                && process_env((char_u *)"EXINIT", FALSE) == FAIL
                && do_source((char_u *)USR_EXRC_FILE, FALSE, DOSO_NONE) == FAIL)
            {
@@ -2996,6 +3091,8 @@ main_start_gui()
 #endif
 }
 
+#endif  /* NO_VIM_MAIN */
+
 /*
  * Get an environment variable, and execute it as Ex commands.
  * Returns FAIL if the environment variable was not executed, OK otherwise.
@@ -3035,7 +3132,7 @@ process_env(env, is_viminit)
     return FAIL;
 }
 
-#if defined(UNIX) || defined(VMS)
+#if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
 /*
  * Return TRUE if we are certain the user owns the file "fname".
  * Used for ".vimrc" and ".exrc".
@@ -3093,6 +3190,7 @@ mainerr_arg_missing(str)
     mainerr(ME_ARG_MISSING, str);
 }
 
+#ifndef NO_VIM_MAIN
 /*
  * print a message with three spaces prepended and '\n' appended.
  */
@@ -3155,6 +3253,7 @@ usage()
 #endif
     main_msg(_("-v\t\t\tVi mode (like \"vi\")"));
     main_msg(_("-e\t\t\tEx mode (like \"ex\")"));
+    main_msg(_("-E\t\t\tImproved Ex mode"));
     main_msg(_("-s\t\t\tSilent (batch) mode (only for \"ex\")"));
 #ifdef FEAT_DIFF
     main_msg(_("-d\t\t\tDiff mode (like \"vimdiff\")"));
@@ -3270,11 +3369,6 @@ usage()
     main_msg(_("+reverse\t\tDon't use reverse video (also: +rv)"));
     main_msg(_("-xrm <resource>\tSet the specified resource"));
 #endif /* FEAT_GUI_X11 */
-#if defined(FEAT_GUI) && defined(RISCOS)
-    mch_msg(_("\nArguments recognised by gvim (RISC OS version):\n"));
-    main_msg(_("--columns <number>\tInitial width of window in columns"));
-    main_msg(_("--rows <number>\tInitial height of window in rows"));
-#endif
 #ifdef FEAT_GUI_GTK
     mch_msg(_("\nArguments recognised by gvim (GTK+ version):\n"));
     main_msg(_("-font <font>\t\tUse <font> for normal text (also: -fn)"));
@@ -3283,6 +3377,7 @@ usage()
     main_msg(_("-display <display>\tRun vim on <display> (also: --display)"));
     main_msg(_("--role <role>\tSet a unique role to identify the main window"));
     main_msg(_("--socketid <xid>\tOpen Vim inside another GTK widget"));
+    main_msg(_("--echo-wid\t\tMake gvim echo the Window ID on stdout"));
 #endif
 #ifdef FEAT_GUI_W32
     main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
@@ -3292,7 +3387,10 @@ usage()
 #ifdef FEAT_GUI_GNOME
     /* Gnome gives extra messages for --help if we continue, but not for -h. */
     if (gui.starting)
+    {
        mch_msg("\n");
+       gui.dofork = FALSE;
+    }
     else
 #endif
        mch_exit(0);
@@ -3313,6 +3411,8 @@ check_swap_exists_action()
 }
 #endif
 
+#endif
+
 #if defined(STARTUPTIME) || defined(PROTO)
 static void time_diff __ARGS((struct timeval *then, struct timeval *now));
 
@@ -3422,7 +3522,7 @@ time_msg(mesg, tv_start)
 
 #endif
 
-#if defined(FEAT_CLIENTSERVER) || defined(PROTO)
+#if (defined(FEAT_CLIENTSERVER) && !defined(NO_VIM_MAIN)) || defined(PROTO)
 
 /*
  * Common code for the X command server and the Win32 command server.
@@ -3806,7 +3906,7 @@ build_drop_cmd(filec, filev, tabs, sendReply)
     int                i;
     char_u     *inicmd = NULL;
     char_u     *p;
-    char_u     cwd[MAXPATHL];
+    char_u     *cwd;
 
     if (filec > 0 && filev[0][0] == '+')
     {
@@ -3817,15 +3917,25 @@ build_drop_cmd(filec, filev, tabs, sendReply)
     /* Check if we have at least one argument. */
     if (filec <= 0)
        mainerr_arg_missing((char_u *)filev[-1]);
+
+    /* Temporarily cd to the current directory to handle relative file names. */
+    cwd = alloc(MAXPATHL);
+    if (cwd == NULL)
+       return NULL;
     if (mch_dirname(cwd, MAXPATHL) != OK)
+    {
+       vim_free(cwd);
        return NULL;
-    if ((p = vim_strsave_escaped_ext(cwd,
+    }
+    p = vim_strsave_escaped_ext(cwd,
 #ifdef BACKSLASH_IN_FILENAME
                    "",  /* rem_backslash() will tell what chars to escape */
 #else
                    PATH_ESC_CHARS,
 #endif
-                   '\\', TRUE)) == NULL)
+                   '\\', TRUE);
+    vim_free(cwd);
+    if (p == NULL)
        return NULL;
     ga_init2(&ga, 1, 100);
     ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
@@ -3858,13 +3968,20 @@ build_drop_cmd(filec, filev, tabs, sendReply)
        ga_concat(&ga, p);
        vim_free(p);
     }
+    ga_concat(&ga, (char_u *)"|if exists('*inputrestore')|call inputrestore()|endif<CR>");
+
     /* The :drop commands goes to Insert mode when 'insertmode' is set, use
      * CTRL-\ CTRL-N again. */
-    ga_concat(&ga, (char_u *)"|if exists('*inputrestore')|call inputrestore()|endif<CR>");
-    ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd -");
+    ga_concat(&ga, (char_u *)"<C-\\><C-N>");
+
+    /* Switch back to the correct current directory (prior to temporary path
+     * switch) unless 'autochdir' is set, in which case it will already be
+     * correct after the :drop command. */
+    ga_concat(&ga, (char_u *)":if !exists('+acd')||!&acd|cd -|endif<CR>");
+
     if (sendReply)
-       ga_concat(&ga, (char_u *)"<CR>:call SetupRemoteReplies()");
-    ga_concat(&ga, (char_u *)"<CR>:");
+       ga_concat(&ga, (char_u *)":call SetupRemoteReplies()<CR>");
+    ga_concat(&ga, (char_u *)":");
     if (inicmd != NULL)
     {
        /* Can't use <CR> after "inicmd", because an "startinsert" would cause
@@ -3881,6 +3998,32 @@ build_drop_cmd(filec, filev, tabs, sendReply)
 }
 
 /*
+ * Make our basic server name: use the specified "arg" if given, otherwise use
+ * the tail of the command "cmd" we were started with.
+ * Return the name in allocated memory.  This doesn't include a serial number.
+ */
+    static char_u *
+serverMakeName(arg, cmd)
+    char_u     *arg;
+    char       *cmd;
+{
+    char_u *p;
+
+    if (arg != NULL && *arg != NUL)
+       p = vim_strsave_up(arg);
+    else
+    {
+       p = vim_strsave_up(gettail((char_u *)cmd));
+       /* Remove .exe or .bat from the name. */
+       if (p != NULL && vim_strchr(p, '.') != NULL)
+           *vim_strchr(p, '.') = NUL;
+    }
+    return p;
+}
+#endif /* FEAT_CLIENTSERVER */
+
+#if defined(FEAT_CLIENTSERVER) || defined(PROTO)
+/*
  * Replace termcodes such as <CR> and insert as key presses if there is room.
  */
     void
@@ -3924,8 +4067,6 @@ server_to_input_buf(str)
 
 /*
  * Evaluate an expression that the client sent to a string.
- * Handles disabling error messages and disables debugging, otherwise Vim
- * hangs, waiting for "cont" to be typed.
  */
     char_u *
 eval_client_expr_to_string(expr)
@@ -3935,15 +4076,21 @@ eval_client_expr_to_string(expr)
     int                save_dbl = debug_break_level;
     int                save_ro = redir_off;
 
+     /* Disable debugging, otherwise Vim hangs, waiting for "cont" to be
+      * typed. */
     debug_break_level = -1;
     redir_off = 0;
-    ++emsg_skip;
+    /* Do not display error message, otherwise Vim hangs, waiting for "cont"
+     * to be typed.  Do generate errors so that try/catch works. */
+    ++emsg_silent;
 
     res = eval_to_string(expr, NULL, TRUE);
 
     debug_break_level = save_dbl;
     redir_off = save_ro;
-    --emsg_skip;
+    --emsg_silent;
+    if (emsg_silent < 0)
+       emsg_silent = 0;
 
     /* A client can tell us to redraw, but not to display the cursor, so do
      * that here. */
@@ -3991,32 +4138,7 @@ serverConvert(client_enc, data, tofree)
 # endif
     return res;
 }
-
-
-/*
- * Make our basic server name: use the specified "arg" if given, otherwise use
- * the tail of the command "cmd" we were started with.
- * Return the name in allocated memory.  This doesn't include a serial number.
- */
-    static char_u *
-serverMakeName(arg, cmd)
-    char_u     *arg;
-    char       *cmd;
-{
-    char_u *p;
-
-    if (arg != NULL && *arg != NUL)
-       p = vim_strsave_up(arg);
-    else
-    {
-       p = vim_strsave_up(gettail((char_u *)cmd));
-       /* Remove .exe or .bat from the name. */
-       if (p != NULL && vim_strchr(p, '.') != NULL)
-           *vim_strchr(p, '.') = NUL;
-    }
-    return p;
-}
-#endif /* FEAT_CLIENTSERVER */
+#endif
 
 /*
  * When FEAT_FKMAP is defined, also compile the Farsi source code.
index 2669cb1..1ac91d8 100644 (file)
@@ -98,6 +98,20 @@ setmark_pos(c, pos, fnum)
        return OK;
     }
 
+#ifdef FEAT_VISUAL
+    if (c == '<' || c == '>')
+    {
+       if (c == '<')
+           curbuf->b_visual.vi_start = *pos;
+       else
+           curbuf->b_visual.vi_end = *pos;
+       if (curbuf->b_visual.vi_mode == NUL)
+           /* Visual_mode has not yet been set, use a sane default. */
+           curbuf->b_visual.vi_mode = 'v';
+       return OK;
+    }
+#endif
+
 #ifndef EBCDIC
     if (c > 'z')           /* some islower() and isupper() cannot handle
                                characters above 127 */
@@ -291,7 +305,7 @@ movechangelist(count)
 #endif
 
 /*
- * Find mark "c".
+ * Find mark "c" in buffer pointed to by "buf".
  * If "changefile" is TRUE it's allowed to edit another file for '0, 'A, etc.
  * If "fnum" is not NULL store the fnum there for '0, 'A etc., don't edit
  * another file.
@@ -302,15 +316,25 @@ movechangelist(count)
  * - -1 if mark is in other file and jumped there (only if changefile is TRUE)
  */
     pos_T *
+getmark_buf(buf, c, changefile)
+    buf_T      *buf;
+    int                c;
+    int                changefile;
+{
+    return getmark_buf_fnum(buf, c, changefile, NULL);
+}
+
+    pos_T *
 getmark(c, changefile)
     int                c;
     int                changefile;
 {
-    return getmark_fnum(c, changefile, NULL);
+    return getmark_buf_fnum(curbuf, c, changefile, NULL);
 }
 
     pos_T *
-getmark_fnum(c, changefile, fnum)
+getmark_buf_fnum(buf, c, changefile, fnum)
+    buf_T      *buf;
     int                c;
     int                changefile;
     int                *fnum;
@@ -338,15 +362,15 @@ getmark_fnum(c, changefile, fnum)
        posp = &pos_copy;               /*   w_pcmark may be changed soon */
     }
     else if (c == '"')                 /* to pos when leaving buffer */
-       posp = &(curbuf->b_last_cursor);
+       posp = &(buf->b_last_cursor);
     else if (c == '^')                 /* to where Insert mode stopped */
-       posp = &(curbuf->b_last_insert);
+       posp = &(buf->b_last_insert);
     else if (c == '.')                 /* to where last change was made */
-       posp = &(curbuf->b_last_change);
+       posp = &(buf->b_last_change);
     else if (c == '[')                 /* to start of previous operator */
-       posp = &(curbuf->b_op_start);
+       posp = &(buf->b_op_start);
     else if (c == ']')                 /* to end of previous operator */
-       posp = &(curbuf->b_op_end);
+       posp = &(buf->b_op_end);
     else if (c == '{' || c == '}')     /* to previous/next paragraph */
     {
        pos_T   pos;
@@ -382,8 +406,8 @@ getmark_fnum(c, changefile, fnum)
 #ifdef FEAT_VISUAL
     else if (c == '<' || c == '>')     /* start/end of visual area */
     {
-       startp = &curbuf->b_visual.vi_start;
-       endp = &curbuf->b_visual.vi_end;
+       startp = &buf->b_visual.vi_start;
+       endp = &buf->b_visual.vi_end;
        if ((c == '<') == lt(*startp, *endp))
            posp = startp;
        else
@@ -391,7 +415,7 @@ getmark_fnum(c, changefile, fnum)
        /*
         * For Visual line mode, set mark at begin or end of line
         */
-       if (curbuf->b_visual.vi_mode == 'V')
+       if (buf->b_visual.vi_mode == 'V')
        {
            pos_copy = *posp;
            posp = &pos_copy;
@@ -407,7 +431,7 @@ getmark_fnum(c, changefile, fnum)
 #endif
     else if (ASCII_ISLOWER(c))         /* normal named mark */
     {
-       posp = &(curbuf->b_namedm[c - 'a']);
+       posp = &(buf->b_namedm[c - 'a']);
     }
     else if (ASCII_ISUPPER(c) || VIM_ISDIGIT(c))       /* named file mark */
     {
@@ -422,7 +446,7 @@ getmark_fnum(c, changefile, fnum)
 
        if (fnum != NULL)
            *fnum = namedfm[c].fmark.fnum;
-       else if (namedfm[c].fmark.fnum != curbuf->b_fnum)
+       else if (namedfm[c].fmark.fnum != buf->b_fnum)
        {
            /* mark is in another file */
            posp = &pos_copy;
@@ -1024,6 +1048,7 @@ mark_adjust(line1, line2, amount, amount_after)
 #ifdef FEAT_WINDOWS
     tabpage_T  *tab;
 #endif
+    static pos_T initpos = INIT_POS_T(1, 0, 0);
 
     if (line2 < line1 && amount_after == 0L)       /* nothing to do */
        return;
@@ -1049,6 +1074,11 @@ mark_adjust(line1, line2, amount, amount_after)
        /* last change position */
        one_adjust(&(curbuf->b_last_change.lnum));
 
+       /* last cursor position, if it was set */
+       if (!equalpos(curbuf->b_last_cursor, initpos))
+           one_adjust(&(curbuf->b_last_cursor.lnum));
+
+
 #ifdef FEAT_JUMPLIST
        /* list of change positions */
        for (i = 0; i < curbuf->b_changelistlen; ++i)
@@ -1750,7 +1780,10 @@ copy_viminfo_marks(virp, fp_out, count, eof, flags)
            {
                if (line[1] != NUL)
                {
-                   sscanf((char *)line + 2, "%ld %u", &pos.lnum, &pos.col);
+                   unsigned u;
+
+                   sscanf((char *)line + 2, "%ld %u", &pos.lnum, &u);
+                   pos.col = u;
                    switch (line[1])
                    {
                        case '"': curbuf->b_last_cursor = pos; break;
index 3719b85..68c1e94 100644 (file)
@@ -132,6 +132,7 @@ static int utf_ptr2cells_len __ARGS((char_u *p, int size));
 static int dbcs_char2cells __ARGS((int c));
 static int dbcs_ptr2cells_len __ARGS((char_u *p, int size));
 static int dbcs_ptr2char __ARGS((char_u *p));
+static int utf_safe_read_char_adv __ARGS((char_u **s, size_t *n));
 
 /*
  * Lookup table to quickly get the length in bytes of a UTF-8 character from
@@ -612,7 +613,7 @@ codepage_invalid:
     enc_dbcs = enc_dbcs_new;
     has_mbyte = (enc_dbcs != 0 || enc_utf8);
 
-#ifdef WIN3264
+#if defined(WIN3264) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
     enc_codepage = encname2codepage(p_enc);
     enc_latin9 = (STRCMP(p_enc, "iso-8859-15") == 0);
 #endif
@@ -707,7 +708,7 @@ codepage_invalid:
             */
            n = (i & 0x80) ? 2 : 1;
 # else
-           char buf[MB_MAXBYTES];
+           char buf[MB_MAXBYTES + 1];
 # ifdef X_LOCALE
 #  ifndef mblen
 #   define mblen _Xmblen
@@ -837,6 +838,27 @@ bomb_size()
 }
 
 /*
+ * Remove all BOM from "s" by moving remaining text.
+ */
+    void
+remove_bom(s)
+    char_u *s;
+{
+    if (enc_utf8)
+    {
+       char_u *p = s;
+
+       while ((p = vim_strbyte(p, 0xef)) != NULL)
+       {
+           if (p[1] == 0xbb && p[2] == 0xbf)
+               STRMOVE(p, p + 3);
+           else
+               ++p;
+       }
+    }
+}
+
+/*
  * Get class of pointer:
  * 0 for blank or NUL
  * 1 for punctuation
@@ -847,11 +869,19 @@ bomb_size()
 mb_get_class(p)
     char_u     *p;
 {
+    return mb_get_class_buf(p, curbuf);
+}
+
+    int
+mb_get_class_buf(p, buf)
+    char_u     *p;
+    buf_T      *buf;
+{
     if (MB_BYTE2LEN(p[0]) == 1)
     {
        if (p[0] == NUL || vim_iswhite(p[0]))
            return 0;
-       if (vim_iswordc(p[0]))
+       if (vim_iswordc_buf(p[0], buf))
            return 2;
        return 1;
     }
@@ -873,7 +903,7 @@ dbcs_class(lead, trail)
 {
     switch (enc_dbcs)
     {
-       /* please add classfy routine for your language in here */
+       /* please add classify routine for your language in here */
 
        case DBCS_JPNU: /* ? */
        case DBCS_JPN:
@@ -973,7 +1003,7 @@ dbcs_class(lead, trail)
                 * 26 : Box Drawings
                 * 27 : Unit Symbols
                 * 28 : Circled/Parenthesized Letter
-                * 29 : Hirigana/Katakana
+                * 29 : Hiragana/Katakana
                 * 30 : Cyrillic Letter
                 */
 
@@ -1024,7 +1054,7 @@ dbcs_class(lead, trail)
                            return 28;
                    case 0xAA:
                    case 0xAB:
-                       /* Hirigana/Katakana */
+                       /* Hiragana/Katakana */
                        return 29;
                    case 0xAC:
                        /* Cyrillic Letter */
@@ -1701,6 +1731,66 @@ utf_ptr2char(p)
 }
 
 /*
+ * Convert a UTF-8 byte sequence to a wide character.
+ * String is assumed to be terminated by NUL or after "n" bytes, whichever
+ * comes first.
+ * The function is safe in the sense that it never accesses memory beyond the
+ * first "n" bytes of "s".
+ *
+ * On success, returns decoded codepoint, advances "s" to the beginning of
+ * next character and decreases "n" accordingly.
+ *
+ * If end of string was reached, returns 0 and, if "n" > 0, advances "s" past
+ * NUL byte.
+ *
+ * If byte sequence is illegal or incomplete, returns -1 and does not advance
+ * "s".
+ */
+    static int
+utf_safe_read_char_adv(s, n)
+    char_u      **s;
+    size_t      *n;
+{
+    int                c, k;
+
+    if (*n == 0) /* end of buffer */
+       return 0;
+
+    k = utf8len_tab_zero[**s];
+
+    if (k == 1)
+    {
+       /* ASCII character or NUL */
+       (*n)--;
+       return *(*s)++;
+    }
+
+    if ((size_t)k <= *n)
+    {
+       /* We have a multibyte sequence and it isn't truncated by buffer
+        * limits so utf_ptr2char() is safe to use. Or the first byte is
+        * illegal (k=0), and it's also safe to use utf_ptr2char(). */
+       c = utf_ptr2char(*s);
+
+       /* On failure, utf_ptr2char() returns the first byte, so here we
+        * check equality with the first byte. The only non-ASCII character
+        * which equals the first byte of its own UTF-8 representation is
+        * U+00C3 (UTF-8: 0xC3 0x83), so need to check that special case too.
+        * It's safe even if n=1, else we would have k=2 > n. */
+       if (c != (int)(**s) || (c == 0xC3 && (*s)[1] == 0x83))
+       {
+           /* byte sequence was successfully decoded */
+           *s += k;
+           *n -= k;
+           return c;
+       }
+    }
+
+    /* byte sequence is incomplete or illegal */
+    return -1;
+}
+
+/*
  * Get character at **pp and advance *pp to the next character.
  * Note: composing characters are skipped!
  */
@@ -1871,7 +1961,7 @@ utfc_ptr2char_len(p, pcc, maxlen)
 /*
  * Convert the character at screen position "off" to a sequence of bytes.
  * Includes the composing characters.
- * "buf" must at least have the length MB_MAXBYTES.
+ * "buf" must at least have the length MB_MAXBYTES + 1.
  * Only to be used when ScreenLinesUC[off] != 0.
  * Returns the produced number of bytes.
  */
@@ -2667,7 +2757,8 @@ static convertStruct foldCase[] =
        {0x10400,0x10427,1,40}
 };
 
-static int utf_convert(int a, convertStruct table[], int tableSize);
+static int utf_convert __ARGS((int a, convertStruct table[], int tableSize));
+static int utf_strnicmp __ARGS((char_u *s1, char_u *s2, size_t n1, size_t n2));
 
 /*
  * Generic conversion function for case operations.
@@ -2681,19 +2772,22 @@ utf_convert(a, table, tableSize)
     int                        tableSize;
 {
     int start, mid, end; /* indices into table */
+    int entries = tableSize / sizeof(convertStruct);
 
     start = 0;
-    end = tableSize / sizeof(convertStruct);
+    end = entries;
     while (start < end)
     {
        /* need to search further */
-       mid = (end + start) /2;
+       mid = (end + start) / 2;
        if (table[mid].rangeEnd < a)
            start = mid + 1;
        else
            end = mid;
     }
-    if (table[start].rangeStart <= a && a <= table[start].rangeEnd
+    if (start < entries
+           && table[start].rangeStart <= a
+           && a <= table[start].rangeEnd
            && (a - table[start].rangeStart) % table[start].step == 0)
        return (a + table[start].offset);
     else
@@ -2708,7 +2802,7 @@ utf_convert(a, table, tableSize)
 utf_fold(a)
     int                a;
 {
-    return utf_convert(a, foldCase, sizeof(foldCase));
+    return utf_convert(a, foldCase, (int)sizeof(foldCase));
 }
 
 static convertStruct toLower[] =
@@ -2863,7 +2957,7 @@ static convertStruct toUpper[] =
 {
        {0x61,0x7a,1,-32},
        {0xb5,0xb5,-1,743},
-       {0xe0,0xf6,1,-32},
+       {0xe0,0xf6,1,-32},  /* 0xdf (German sharp s) is not upper-cased */
        {0xf8,0xfe,1,-32},
        {0xff,0xff,-1,121},
        {0x101,0x12f,2,-1},
@@ -3036,14 +3130,15 @@ utf_toupper(a)
        return TOUPPER_LOC(a);
 
     /* For any other characters use the above mapping table. */
-    return utf_convert(a, toUpper, sizeof(toUpper));
+    return utf_convert(a, toUpper, (int)sizeof(toUpper));
 }
 
     int
 utf_islower(a)
     int                a;
 {
-    return (utf_toupper(a) != a);
+    /* German sharp s is lower case but has no upper case equivalent. */
+    return (utf_toupper(a) != a) || a == 0xdf;
 }
 
 /*
@@ -3069,7 +3164,7 @@ utf_tolower(a)
        return TOLOWER_LOC(a);
 
     /* For any other characters use the above mapping table. */
-    return utf_convert(a, toLower, sizeof(toLower));
+    return utf_convert(a, toLower, (int)sizeof(toLower));
 }
 
     int
@@ -3079,9 +3174,83 @@ utf_isupper(a)
     return (utf_tolower(a) != a);
 }
 
+    static int
+utf_strnicmp(s1, s2, n1, n2)
+    char_u      *s1, *s2;
+    size_t      n1, n2;
+{
+    int                c1, c2, cdiff;
+    char_u     buffer[6];
+
+    for (;;)
+    {
+       c1 = utf_safe_read_char_adv(&s1, &n1);
+       c2 = utf_safe_read_char_adv(&s2, &n2);
+
+       if (c1 <= 0 || c2 <= 0)
+           break;
+
+       if (c1 == c2)
+           continue;
+
+       cdiff = utf_fold(c1) - utf_fold(c2);
+       if (cdiff != 0)
+           return cdiff;
+    }
+
+    /* some string ended or has an incomplete/illegal character sequence */
+
+    if (c1 == 0 || c2 == 0)
+    {
+       /* some string ended. shorter string is smaller */
+       if (c1 == 0 && c2 == 0)
+           return 0;
+       return c1 == 0 ? -1 : 1;
+    }
+
+    /* Continue with bytewise comparison to produce some result that
+     * would make comparison operations involving this function transitive.
+     *
+     * If only one string had an error, comparison should be made with
+     * folded version of the other string. In this case it is enough
+     * to fold just one character to determine the result of comparison. */
+
+    if (c1 != -1 && c2 == -1)
+    {
+       n1 = utf_char2bytes(utf_fold(c1), buffer);
+       s1 = buffer;
+    }
+    else if (c2 != -1 && c1 == -1)
+    {
+       n2 = utf_char2bytes(utf_fold(c2), buffer);
+       s2 = buffer;
+    }
+
+    while (n1 > 0 && n2 > 0 && *s1 != NUL && *s2 != NUL)
+    {
+       cdiff = (int)(*s1) - (int)(*s2);
+       if (cdiff != 0)
+           return cdiff;
+
+       s1++;
+       s2++;
+       n1--;
+       n2--;
+    }
+
+    if (n1 > 0 && *s1 == NUL)
+       n1 = 0;
+    if (n2 > 0 && *s2 == NUL)
+       n2 = 0;
+
+    if (n1 == 0 && n2 == 0)
+       return 0;
+    return n1 == 0 ? -1 : 1;
+}
+
 /*
  * Version of strnicmp() that handles multi-byte characters.
- * Needed for Big5, Sjift-JIS and UTF-8 encoding.  Other DBCS encodings can
+ * Needed for Big5, Shift-JIS and UTF-8 encoding.  Other DBCS encodings can
  * probably use strnicmp(), because there are no ASCII characters in the
  * second byte.
  * Returns zero if s1 and s2 are equal (ignoring case), the difference between
@@ -3092,46 +3261,21 @@ mb_strnicmp(s1, s2, nn)
     char_u     *s1, *s2;
     size_t     nn;
 {
-    int                i, j, l;
+    int                i, l;
     int                cdiff;
-    int                incomplete = FALSE;
     int                n = (int)nn;
 
-    for (i = 0; i < n; i += l)
+    if (enc_utf8)
     {
-       if (s1[i] == NUL && s2[i] == NUL)   /* both strings end */
-           return 0;
-       if (enc_utf8)
-       {
-           l = utf_byte2len(s1[i]);
-           if (l > n - i)
-           {
-               l = n - i;                  /* incomplete character */
-               incomplete = TRUE;
-           }
-           /* Check directly first, it's faster. */
-           for (j = 0; j < l; ++j)
-           {
-               if (s1[i + j] != s2[i + j])
-                   break;
-               if (s1[i + j] == 0)
-                   /* Both stings have the same bytes but are incomplete or
-                    * have illegal bytes, accept them as equal. */
-                   l = j;
-           }
-           if (j < l)
-           {
-               /* If one of the two characters is incomplete return -1. */
-               if (incomplete || i + utf_byte2len(s2[i]) > n)
-                   return -1;
-               cdiff = utf_fold(utf_ptr2char(s1 + i))
-                                            - utf_fold(utf_ptr2char(s2 + i));
-               if (cdiff != 0)
-                   return cdiff;
-           }
-       }
-       else
+       return utf_strnicmp(s1, s2, nn, nn);
+    }
+    else
+    {
+       for (i = 0; i < n; i += l)
        {
+           if (s1[i] == NUL && s2[i] == NUL)   /* both strings end */
+               return 0;
+
            l = (*mb_ptr2len)(s1 + i);
            if (l <= 1)
            {
@@ -3560,7 +3704,7 @@ dbcs_screen_tail_off(base, p)
     void
 mb_adjust_cursor()
 {
-    mb_adjustpos(&curwin->w_cursor);
+    mb_adjustpos(curbuf, &curwin->w_cursor);
 }
 
 /*
@@ -3568,7 +3712,8 @@ mb_adjust_cursor()
  * If it points to a tail byte it's moved backwards to the head byte.
  */
     void
-mb_adjustpos(lp)
+mb_adjustpos(buf, lp)
+    buf_T      *buf;
     pos_T      *lp;
 {
     char_u     *p;
@@ -3579,7 +3724,7 @@ mb_adjustpos(lp)
 #endif
            )
     {
-       p = ml_get(lp->lnum);
+       p = ml_get_buf(buf, lp->lnum, FALSE);
        lp->col -= (*mb_head_off)(p, p + lp->col);
 #ifdef FEAT_VIRTUALEDIT
        /* Reset "coladd" when the cursor would be on the right half of a
@@ -3656,13 +3801,15 @@ mb_charlen_len(str, len)
 mb_unescape(pp)
     char_u **pp;
 {
-    static char_u      buf[MB_MAXBYTES + 1];
-    int                        n, m = 0;
+    static char_u      buf[6];
+    int                        n;
+    int                        m = 0;
     char_u             *str = *pp;
 
     /* Must translate K_SPECIAL KS_SPECIAL KE_FILLER to K_SPECIAL and CSI
-     * KS_EXTRA KE_CSI to CSI. */
-    for (n = 0; str[n] != NUL && m <= MB_MAXBYTES; ++n)
+     * KS_EXTRA KE_CSI to CSI.
+     * Maximum length of a utf-8 character is 4 bytes. */
+    for (n = 0; str[n] != NUL && m < 4; ++n)
     {
        if (str[n] == K_SPECIAL
                && str[n + 1] == KS_SPECIAL
@@ -3699,6 +3846,10 @@ mb_unescape(pp)
            *pp = str + n + 1;
            return buf;
        }
+
+       /* Bail out quickly for ASCII. */
+       if (buf[0] < 128)
+           break;
     }
     return NULL;
 }
@@ -3938,7 +4089,7 @@ enc_locale()
     return enc_canonize((char_u *)buf);
 }
 
-#if defined(WIN3264) || defined(PROTO)
+#if defined(WIN3264) || defined(PROTO) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
 /*
  * Convert an encoding name to an MS-Windows codepage.
  * Returns zero if no codepage can be figured out.
@@ -3957,7 +4108,7 @@ encname2codepage(name)
        p += 6;
 
     if (p[0] == 'c' && p[1] == 'p')
-       cp = atoi(p + 2);
+       cp = atoi((char *)p + 2);
     else if ((idx = enc_canon_search(p)) >= 0)
        cp = enc_canon_table[idx].codepage;
     else
@@ -4126,7 +4277,7 @@ iconv_string(vcp, str, slen, unconvlenp, resultlenp)
        done = to - (char *)result;
     }
 
-    if (resultlenp != NULL)
+    if (resultlenp != NULL && result != NULL)
        *resultlenp = (int)(to - (char *)result);
     return result;
 }
@@ -4151,6 +4302,47 @@ static HINSTANCE hMsvcrtDLL = 0;
 #  endif
 
 /*
+ * Get the address of 'funcname' which is imported by 'hInst' DLL.
+ */
+    static void *
+get_iconv_import_func(HINSTANCE hInst, const char *funcname)
+{
+    PBYTE                      pImage = (PBYTE)hInst;
+    PIMAGE_DOS_HEADER          pDOS = (PIMAGE_DOS_HEADER)hInst;
+    PIMAGE_NT_HEADERS          pPE;
+    PIMAGE_IMPORT_DESCRIPTOR   pImpDesc;
+    PIMAGE_THUNK_DATA          pIAT;       /* Import Address Table */
+    PIMAGE_THUNK_DATA          pINT;       /* Import Name Table */
+    PIMAGE_IMPORT_BY_NAME      pImpName;
+
+    if (pDOS->e_magic != IMAGE_DOS_SIGNATURE)
+       return NULL;
+    pPE = (PIMAGE_NT_HEADERS)(pImage + pDOS->e_lfanew);
+    if (pPE->Signature != IMAGE_NT_SIGNATURE)
+       return NULL;
+    pImpDesc = (PIMAGE_IMPORT_DESCRIPTOR)(pImage
+           + pPE->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]
+                                                           .VirtualAddress);
+    for (; pImpDesc->FirstThunk; ++pImpDesc)
+    {
+       if (!pImpDesc->OriginalFirstThunk)
+           continue;
+       pIAT = (PIMAGE_THUNK_DATA)(pImage + pImpDesc->FirstThunk);
+       pINT = (PIMAGE_THUNK_DATA)(pImage + pImpDesc->OriginalFirstThunk);
+       for (; pIAT->u1.Function; ++pIAT, ++pINT)
+       {
+           if (IMAGE_SNAP_BY_ORDINAL(pINT->u1.Ordinal))
+               continue;
+           pImpName = (PIMAGE_IMPORT_BY_NAME)(pImage
+                                       + (UINT_PTR)(pINT->u1.AddressOfData));
+           if (strcmp(pImpName->Name, funcname) == 0)
+               return (void *)pIAT->u1.Function;
+       }
+    }
+    return NULL;
+}
+
+/*
  * Try opening the iconv.dll and return TRUE if iconv() can be used.
  */
     int
@@ -4159,11 +4351,11 @@ iconv_enabled(verbose)
 {
     if (hIconvDLL != 0 && hMsvcrtDLL != 0)
        return TRUE;
-    hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL);
+    hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL);
     if (hIconvDLL == 0)                /* sometimes it's called libiconv.dll */
-       hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL_ALT);
+       hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL_ALT);
     if (hIconvDLL != 0)
-       hMsvcrtDLL = LoadLibrary(DYNAMIC_MSVCRT_DLL);
+       hMsvcrtDLL = vimLoadLib(DYNAMIC_MSVCRT_DLL);
     if (hIconvDLL == 0 || hMsvcrtDLL == 0)
     {
        /* Only give the message when 'verbose' is set, otherwise it might be
@@ -4183,7 +4375,9 @@ iconv_enabled(verbose)
     iconv_open = (void *)GetProcAddress(hIconvDLL, "libiconv_open");
     iconv_close        = (void *)GetProcAddress(hIconvDLL, "libiconv_close");
     iconvctl   = (void *)GetProcAddress(hIconvDLL, "libiconvctl");
-    iconv_errno        = (void *)GetProcAddress(hMsvcrtDLL, "_errno");
+    iconv_errno        = get_iconv_import_func(hIconvDLL, "_errno");
+    if (iconv_errno == NULL)
+       iconv_errno = (void *)GetProcAddress(hMsvcrtDLL, "_errno");
     if (iconv == NULL || iconv_open == NULL || iconv_close == NULL
            || iconvctl == NULL || iconv_errno == NULL)
     {
@@ -4253,7 +4447,7 @@ im_set_active(int active)
 {
     int was_active;
 
-    was_active = !!im_is_active;
+    was_active = !!im_get_status();
     im_is_active = (active && !p_imdisable);
 
     if (im_is_active != was_active)
@@ -4368,7 +4562,8 @@ im_show_info(void)
     vgetc_busy = TRUE;
     showmode();
     vgetc_busy = old_vgetc_busy;
-    setcursor();
+    if ((State & NORMAL) || (State & INSERT))
+       setcursor();
     out_flush();
 }
 
@@ -4404,7 +4599,7 @@ im_commit_cb(GtkIMContext *context UNUSED,
     }
 
     /* The thing which setting "preedit_start_col" to MAXCOL means that
-     * "preedit_start_col" will be set forcely when calling
+     * "preedit_start_col" will be set forcedly when calling
      * preedit_changed_cb() next time.
      * "preedit_start_col" should not reset with MAXCOL on this part. Vim
      * is simulating the preediting by using add_to_input_str(). when
@@ -4876,44 +5071,28 @@ xim_reset(void)
 {
     if (xic != NULL)
     {
-       /*
-        * The third-party imhangul module (and maybe others too) ignores
-        * gtk_im_context_reset() or at least doesn't reset the active state.
-        * Thus sending imactivatekey would turn it off if it was on before,
-        * which is clearly not what we want.  Fortunately we can work around
-        * that for imhangul by sending GDK_Escape, but I don't know if it
-        * works with all IM modules that support an activation key :/
-        *
-        * An alternative approach would be to destroy the IM context and
-        * recreate it.  But that means loading/unloading the IM module on
-        * every mode switch, which causes a quite noticeable delay even on
-        * my rather fast box...
-        * *
-        * Moreover, there are some XIM which cannot respond to
-        * im_synthesize_keypress(). we hope that they reset by
-        * xim_shutdown().
-        */
-       if (im_activatekey_keyval != GDK_VoidSymbol && im_is_active)
-           im_synthesize_keypress(GDK_Escape, 0U);
-
        gtk_im_context_reset(xic);
 
-       /*
-        * HACK for Ami: This sequence of function calls makes Ami handle
-        * the IM reset graciously, without breaking loads of other stuff.
-        * It seems to force English mode as well, which is exactly what we
-        * want because it makes the Ami status display work reliably.
-        */
-       gtk_im_context_set_use_preedit(xic, FALSE);
-
        if (p_imdisable)
            im_shutdown();
        else
        {
-           gtk_im_context_set_use_preedit(xic, TRUE);
            xim_set_focus(gui.in_focus);
 
-           if (im_activatekey_keyval != GDK_VoidSymbol)
+#  ifdef FEAT_EVAL
+           if (p_imaf[0] != NUL)
+           {
+               char_u *argv[1];
+
+               if (im_is_active)
+                   argv[0] = (char_u *)"1";
+               else
+                   argv[0] = (char_u *)"0";
+               (void)call_func_retnr(p_imaf, 1, argv, FALSE);
+           }
+           else
+#  endif
+               if (im_activatekey_keyval != GDK_VoidSymbol)
            {
                if (im_is_active)
                {
@@ -5058,6 +5237,10 @@ xim_queue_key_press_event(GdkEventKey *event, int down)
                /* We had a keypad key, and XIM tried to thieve it */
                return FALSE;
 
+           /* This is supposed to fix a problem with iBus, that space
+            * characters don't work in input mode. */
+           xim_expected_char = NUL;
+
            /* Normal processing */
            return imresult;
        }
@@ -5069,6 +5252,26 @@ xim_queue_key_press_event(GdkEventKey *event, int down)
     int
 im_get_status(void)
 {
+#  ifdef FEAT_EVAL
+    if (p_imsf[0] != NUL)
+    {
+       int is_active;
+
+       /* FIXME: Don't execute user function in unsafe situation. */
+       if (exiting
+#   ifdef FEAT_AUTOCMD
+               || is_autocmd_blocked()
+#   endif
+               )
+           return FALSE;
+       /* FIXME: :py print 'xxx' is shown duplicate result.
+        * Use silent to avoid it. */
+       ++msg_silent;
+       is_active = call_func_retnr(p_imsf, 0, NULL, FALSE);
+       --msg_silent;
+       return (is_active > 0);
+    }
+#  endif
     return im_is_active;
 }
 
@@ -5167,16 +5370,16 @@ im_set_position(row, col)
     void
 xim_set_preedit()
 {
-    if (xic == NULL)
-       return;
-
-    xim_set_focus(TRUE);
-
     XVaNestedList attr_list;
     XRectangle spot_area;
     XPoint over_spot;
     int line_space;
 
+    if (xic == NULL)
+       return;
+
+    xim_set_focus(TRUE);
+
     if (!xim_has_focus)
     {
        /* hide XIM cursor */
@@ -5554,12 +5757,12 @@ im_get_status()
     void
 xim_set_status_area()
 {
-    if (xic == NULL)
-       return;
-
     XVaNestedList preedit_list = 0, status_list = 0, list = 0;
     XRectangle pre_area, status_area;
 
+    if (xic == NULL)
+       return;
+
     if (input_style & XIMStatusArea)
     {
        if (input_style & XIMPreeditArea)
@@ -6057,8 +6260,23 @@ string_convert_ext(vcp, ptr, lenp, unconvlenp)
            if (vcp->vc_cpfrom == 0)
                tmp_len = utf8_to_utf16(ptr, len, NULL, NULL);
            else
-               tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0,
-                                                             ptr, len, 0, 0);
+           {
+               tmp_len = MultiByteToWideChar(vcp->vc_cpfrom,
+                                       unconvlenp ? MB_ERR_INVALID_CHARS : 0,
+                                       ptr, len, 0, 0);
+               if (tmp_len == 0
+                       && GetLastError() == ERROR_NO_UNICODE_TRANSLATION)
+               {
+                   if (lenp != NULL)
+                       *lenp = 0;
+                   if (unconvlenp != NULL)
+                       *unconvlenp = len;
+                   retval = alloc(1);
+                   if (retval)
+                       retval[0] = NUL;
+                   return retval;
+               }
+           }
            tmp = (short_u *)alloc(sizeof(short_u) * tmp_len);
            if (tmp == NULL)
                break;
index c6f5fdf..2826aea 100644 (file)
  * file is opened.
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"    /* for lseek(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 /*
@@ -88,6 +84,13 @@ static int  mf_write __ARGS((memfile_T *, bhdr_T *));
 static int  mf_write_block __ARGS((memfile_T *mfp, bhdr_T *hp, off_t offset, unsigned size));
 static int  mf_trans_add __ARGS((memfile_T *, bhdr_T *));
 static void mf_do_open __ARGS((memfile_T *, char_u *, int));
+static void mf_hash_init __ARGS((mf_hashtab_T *));
+static void mf_hash_free __ARGS((mf_hashtab_T *));
+static void mf_hash_free_all __ARGS((mf_hashtab_T *));
+static mf_hashitem_T *mf_hash_find __ARGS((mf_hashtab_T *, blocknr_T));
+static void mf_hash_add_item __ARGS((mf_hashtab_T *, mf_hashitem_T *));
+static void mf_hash_rem_item __ARGS((mf_hashtab_T *, mf_hashitem_T *));
+static int mf_hash_grow __ARGS((mf_hashtab_T *));
 
 /*
  * The functions for using a memfile:
@@ -123,9 +126,8 @@ mf_open(fname, flags)
     int                flags;
 {
     memfile_T          *mfp;
-    int                        i;
     off_t              size;
-#if defined(STATFS) && defined(UNIX) && !defined(__QNX__)
+#if defined(STATFS) && defined(UNIX) && !defined(__QNX__) && !defined(__minix)
 # define USE_FSTATFS
     struct STATFS      stf;
 #endif
@@ -156,11 +158,8 @@ mf_open(fname, flags)
     mfp->mf_used_last = NULL;
     mfp->mf_dirty = FALSE;
     mfp->mf_used_count = 0;
-    for (i = 0; i < MEMHASHSIZE; ++i)
-    {
-       mfp->mf_hash[i] = NULL;         /* hash lists are empty */
-       mfp->mf_trans[i] = NULL;        /* trans lists are empty */
-    }
+    mf_hash_init(&mfp->mf_hash);
+    mf_hash_init(&mfp->mf_trans);
     mfp->mf_page_size = MEMFILE_PAGE_SIZE;
 #ifdef FEAT_CRYPT
     mfp->mf_old_key = NULL;
@@ -246,8 +245,6 @@ mf_close(mfp, del_file)
     int                del_file;
 {
     bhdr_T     *hp, *nextp;
-    NR_TRANS   *tp, *tpnext;
-    int                i;
 
     if (mfp == NULL)               /* safety check */
        return;
@@ -267,12 +264,8 @@ mf_close(mfp, del_file)
     }
     while (mfp->mf_free_first != NULL)     /* free entries in free list */
        vim_free(mf_rem_free(mfp));
-    for (i = 0; i < MEMHASHSIZE; ++i)      /* free entries in trans lists */
-       for (tp = mfp->mf_trans[i]; tp != NULL; tp = tpnext)
-       {
-           tpnext = tp->nt_next;
-           vim_free(tp);
-       }
+    mf_hash_free(&mfp->mf_hash);
+    mf_hash_free_all(&mfp->mf_trans);      /* free hashtable and its items */
     vim_free(mfp->mf_fname);
     vim_free(mfp->mf_ffname);
     vim_free(mfp);
@@ -635,7 +628,7 @@ mf_sync(mfp, flags)
         * sync from the system itself).
         */
 #  if defined(__EMX__)
-   error "Dont use fsync with EMX! Read emxdoc.doc or emxfix01.doc for info."
+   error "Don't use fsync with EMX! Read emxdoc.doc or emxfix01.doc for info."
 #  endif
        if (STRCMP(p_sws, "fsync") == 0)
        {
@@ -747,16 +740,7 @@ mf_ins_hash(mfp, hp)
     memfile_T  *mfp;
     bhdr_T     *hp;
 {
-    bhdr_T     *hhp;
-    int                hash;
-
-    hash = MEMHASH(hp->bh_bnum);
-    hhp = mfp->mf_hash[hash];
-    hp->bh_hash_next = hhp;
-    hp->bh_hash_prev = NULL;
-    if (hhp != NULL)
-       hhp->bh_hash_prev = hp;
-    mfp->mf_hash[hash] = hp;
+    mf_hash_add_item(&mfp->mf_hash, (mf_hashitem_T *)hp);
 }
 
 /*
@@ -767,13 +751,7 @@ mf_rem_hash(mfp, hp)
     memfile_T  *mfp;
     bhdr_T     *hp;
 {
-    if (hp->bh_hash_prev == NULL)
-       mfp->mf_hash[MEMHASH(hp->bh_bnum)] = hp->bh_hash_next;
-    else
-       hp->bh_hash_prev->bh_hash_next = hp->bh_hash_next;
-
-    if (hp->bh_hash_next)
-       hp->bh_hash_next->bh_hash_prev = hp->bh_hash_prev;
+    mf_hash_rem_item(&mfp->mf_hash, (mf_hashitem_T *)hp);
 }
 
 /*
@@ -784,12 +762,7 @@ mf_find_hash(mfp, nr)
     memfile_T  *mfp;
     blocknr_T  nr;
 {
-    bhdr_T     *hp;
-
-    for (hp = mfp->mf_hash[MEMHASH(nr)]; hp != NULL; hp = hp->bh_hash_next)
-       if (hp->bh_bnum == nr)
-           break;
-    return hp;
+    return (bhdr_T *)mf_hash_find(&mfp->mf_hash, nr);
 }
 
 /*
@@ -1049,7 +1022,7 @@ mf_read(mfp, hp)
        PERROR(_("E294: Seek error in swap file read"));
        return FAIL;
     }
-    if ((unsigned)vim_read(mfp->mf_fd, hp->bh_data, size) != size)
+    if ((unsigned)read_eintr(mfp->mf_fd, hp->bh_data, size) != size)
     {
        PERROR(_("E295: Read error in swap file"));
        return FAIL;
@@ -1102,7 +1075,7 @@ mf_write(mfp, hp)
        if (nr > mfp->mf_infile_count)          /* beyond end of file */
        {
            nr = mfp->mf_infile_count;
-           hp2 = mf_find_hash(mfp, nr);        /* NULL catched below */
+           hp2 = mf_find_hash(mfp, nr);        /* NULL caught below */
        }
        else
            hp2 = hp;
@@ -1168,7 +1141,7 @@ mf_write_block(mfp, hp, offset, size)
     }
 #endif
 
-    if ((unsigned)vim_write(mfp->mf_fd, data, size) != size)
+    if ((unsigned)write_eintr(mfp->mf_fd, data, size) != size)
        result = FAIL;
 
 #ifdef FEAT_CRYPT
@@ -1191,7 +1164,6 @@ mf_trans_add(mfp, hp)
 {
     bhdr_T     *freep;
     blocknr_T  new_bnum;
-    int                hash;
     NR_TRANS   *np;
     int                page_count;
 
@@ -1212,7 +1184,7 @@ mf_trans_add(mfp, hp)
     {
        new_bnum = freep->bh_bnum;
        /*
-        * If the page count of the free block was larger, recude it.
+        * If the page count of the free block was larger, reduce it.
         * If the page count matches, remove the block from the free list
         */
        if (freep->bh_page_count > page_count)
@@ -1239,12 +1211,8 @@ mf_trans_add(mfp, hp)
     hp->bh_bnum = new_bnum;
     mf_ins_hash(mfp, hp);                  /* insert in new hash list */
 
-    hash = MEMHASH(np->nt_old_bnum);       /* insert in trans list */
-    np->nt_next = mfp->mf_trans[hash];
-    mfp->mf_trans[hash] = np;
-    if (np->nt_next != NULL)
-       np->nt_next->nt_prev = np;
-    np->nt_prev = NULL;
+    /* Insert "np" into "mf_trans" hashtable with key "np->nt_old_bnum" */
+    mf_hash_add_item(&mfp->mf_trans, (mf_hashitem_T *)np);
 
     return OK;
 }
@@ -1259,25 +1227,20 @@ mf_trans_del(mfp, old_nr)
     memfile_T  *mfp;
     blocknr_T  old_nr;
 {
-    int                hash;
     NR_TRANS   *np;
     blocknr_T  new_bnum;
 
-    hash = MEMHASH(old_nr);
-    for (np = mfp->mf_trans[hash]; np != NULL; np = np->nt_next)
-       if (np->nt_old_bnum == old_nr)
-           break;
+    np = (NR_TRANS *)mf_hash_find(&mfp->mf_trans, old_nr);
+
     if (np == NULL)            /* not found */
        return old_nr;
 
     mfp->mf_neg_count--;
     new_bnum = np->nt_new_bnum;
-    if (np->nt_prev != NULL)           /* remove entry from the trans list */
-       np->nt_prev->nt_next = np->nt_next;
-    else
-       mfp->mf_trans[hash] = np->nt_next;
-    if (np->nt_next != NULL)
-       np->nt_next->nt_prev = np->nt_prev;
+
+    /* remove entry from the trans list */
+    mf_hash_rem_item(&mfp->mf_trans, (mf_hashitem_T *)np);
+
     vim_free(np);
 
     return new_bnum;
@@ -1344,9 +1307,9 @@ mf_do_open(mfp, fname, flags)
      * fname cannot be NameBuff, because it must have been allocated.
      */
     mf_set_ffname(mfp);
-#if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
+#if defined(MSDOS) || defined(MSWIN)
     /*
-     * A ":!cd e:xxx" may change the directory without us knowning, use the
+     * A ":!cd e:xxx" may change the directory without us knowing, use the
      * full pathname always.  Careful: This frees fname!
      */
     mf_fullname(mfp);
@@ -1401,3 +1364,207 @@ mf_do_open(mfp, fname, flags)
        mch_hide(mfp->mf_fname);    /* try setting the 'hidden' flag */
     }
 }
+
+/*
+ * Implementation of mf_hashtab_T follows.
+ */
+
+/*
+ * The number of buckets in the hashtable is increased by a factor of
+ * MHT_GROWTH_FACTOR when the average number of items per bucket
+ * exceeds 2 ^ MHT_LOG_LOAD_FACTOR.
+ */
+#define MHT_LOG_LOAD_FACTOR 6
+#define MHT_GROWTH_FACTOR   2   /* must be a power of two */
+
+/*
+ * Initialize an empty hash table.
+ */
+    static void
+mf_hash_init(mht)
+    mf_hashtab_T *mht;
+{
+    vim_memset(mht, 0, sizeof(mf_hashtab_T));
+    mht->mht_buckets = mht->mht_small_buckets;
+    mht->mht_mask = MHT_INIT_SIZE - 1;
+}
+
+/*
+ * Free the array of a hash table.  Does not free the items it contains!
+ * The hash table must not be used again without another mf_hash_init() call.
+ */
+    static void
+mf_hash_free(mht)
+    mf_hashtab_T *mht;
+{
+    if (mht->mht_buckets != mht->mht_small_buckets)
+       vim_free(mht->mht_buckets);
+}
+
+/*
+ * Free the array of a hash table and all the items it contains.
+ */
+    static void
+mf_hash_free_all(mht)
+    mf_hashtab_T    *mht;
+{
+    long_u         idx;
+    mf_hashitem_T   *mhi;
+    mf_hashitem_T   *next;
+
+    for (idx = 0; idx <= mht->mht_mask; idx++)
+       for (mhi = mht->mht_buckets[idx]; mhi != NULL; mhi = next)
+       {
+           next = mhi->mhi_next;
+           vim_free(mhi);
+       }
+
+    mf_hash_free(mht);
+}
+
+/*
+ * Find "key" in hashtable "mht".
+ * Returns a pointer to a mf_hashitem_T or NULL if the item was not found.
+ */
+    static mf_hashitem_T *
+mf_hash_find(mht, key)
+    mf_hashtab_T    *mht;
+    blocknr_T      key;
+{
+    mf_hashitem_T   *mhi;
+
+    mhi = mht->mht_buckets[key & mht->mht_mask];
+    while (mhi != NULL && mhi->mhi_key != key)
+       mhi = mhi->mhi_next;
+
+    return mhi;
+}
+
+/*
+ * Add item "mhi" to hashtable "mht".
+ * "mhi" must not be NULL.
+ */
+    static void
+mf_hash_add_item(mht, mhi)
+    mf_hashtab_T    *mht;
+    mf_hashitem_T   *mhi;
+{
+    long_u         idx;
+
+    idx = mhi->mhi_key & mht->mht_mask;
+    mhi->mhi_next = mht->mht_buckets[idx];
+    mhi->mhi_prev = NULL;
+    if (mhi->mhi_next != NULL)
+       mhi->mhi_next->mhi_prev = mhi;
+    mht->mht_buckets[idx] = mhi;
+
+    mht->mht_count++;
+
+    /*
+     * Grow hashtable when we have more thank 2^MHT_LOG_LOAD_FACTOR
+     * items per bucket on average
+     */
+    if (mht->mht_fixed == 0
+       && (mht->mht_count >> MHT_LOG_LOAD_FACTOR) > mht->mht_mask)
+    {
+       if (mf_hash_grow(mht) == FAIL)
+       {
+           /* stop trying to grow after first failure to allocate memory */
+           mht->mht_fixed = 1;
+       }
+    }
+}
+
+/*
+ * Remove item "mhi" from hashtable "mht".
+ * "mhi" must not be NULL and must have been inserted into "mht".
+ */
+    static void
+mf_hash_rem_item(mht, mhi)
+    mf_hashtab_T    *mht;
+    mf_hashitem_T   *mhi;
+{
+    if (mhi->mhi_prev == NULL)
+       mht->mht_buckets[mhi->mhi_key & mht->mht_mask] = mhi->mhi_next;
+    else
+       mhi->mhi_prev->mhi_next = mhi->mhi_next;
+
+    if (mhi->mhi_next != NULL)
+       mhi->mhi_next->mhi_prev = mhi->mhi_prev;
+
+    mht->mht_count--;
+
+    /* We could shrink the table here, but it typically takes little memory,
+     * so why bother?  */
+}
+
+/*
+ * Increase number of buckets in the hashtable by MHT_GROWTH_FACTOR and
+ * rehash items.
+ * Returns FAIL when out of memory.
+ */
+    static int
+mf_hash_grow(mht)
+    mf_hashtab_T    *mht;
+{
+    long_u         i, j;
+    int                    shift;
+    mf_hashitem_T   *mhi;
+    mf_hashitem_T   *tails[MHT_GROWTH_FACTOR];
+    mf_hashitem_T   **buckets;
+    size_t         size;
+
+    size = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR * sizeof(void *);
+    buckets = (mf_hashitem_T **)lalloc_clear(size, FALSE);
+    if (buckets == NULL)
+       return FAIL;
+
+    shift = 0;
+    while ((mht->mht_mask >> shift) != 0)
+       shift++;
+
+    for (i = 0; i <= mht->mht_mask; i++)
+    {
+       /*
+        * Traverse the items in the i-th original bucket and move them into
+        * MHT_GROWTH_FACTOR new buckets, preserving their relative order
+        * within each new bucket.  Preserving the order is important because
+        * mf_get() tries to keep most recently used items at the front of
+        * each bucket.
+        *
+        * Here we strongly rely on the fact the hashes are computed modulo
+        * a power of two.
+        */
+
+       vim_memset(tails, 0, sizeof(tails));
+
+       for (mhi = mht->mht_buckets[i]; mhi != NULL; mhi = mhi->mhi_next)
+       {
+           j = (mhi->mhi_key >> shift) & (MHT_GROWTH_FACTOR - 1);
+           if (tails[j] == NULL)
+           {
+               buckets[i + (j << shift)] = mhi;
+               tails[j] = mhi;
+               mhi->mhi_prev = NULL;
+           }
+           else
+           {
+               tails[j]->mhi_next = mhi;
+               mhi->mhi_prev = tails[j];
+               tails[j] = mhi;
+           }
+       }
+
+       for (j = 0; j < MHT_GROWTH_FACTOR; j++)
+           if (tails[j] != NULL)
+               tails[j]->mhi_next = NULL;
+    }
+
+    if (mht->mht_buckets != mht->mht_small_buckets)
+       vim_free(mht->mht_buckets);
+
+    mht->mht_buckets = buckets;
+    mht->mht_mask = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR - 1;
+
+    return OK;
+}
diff --git a/src/memfile_test.c b/src/memfile_test.c
new file mode 100644 (file)
index 0000000..e9f32b3
--- /dev/null
@@ -0,0 +1,145 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved   by Bram Moolenaar
+ *
+ * Do ":help uganda"  in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ * See README.txt for an overview of the Vim source code.
+ */
+
+/*
+ * memfile_test.c: Unittests for memfile.c
+ * Mostly by Ivan Krasilnikov.
+ */
+
+#undef NDEBUG
+#include <assert.h>
+
+/* Must include main.c because it contains much more than just main() */
+#define NO_VIM_MAIN
+#include "main.c"
+
+/* This file has to be included because the tested functions are static */
+#include "memfile.c"
+
+#define index_to_key(i) ((i) ^ 15167)
+#define TEST_COUNT 50000
+
+static void test_mf_hash __ARGS((void));
+
+/*
+ * Test mf_hash_*() functions.
+ */
+    static void
+test_mf_hash()
+{
+    mf_hashtab_T   ht;
+    mf_hashitem_T  *item;
+    blocknr_T      key;
+    long_u        i;
+    long_u        num_buckets;
+
+    mf_hash_init(&ht);
+
+    /* insert some items and check invariants */
+    for (i = 0; i < TEST_COUNT; i++)
+    {
+       assert(ht.mht_count == i);
+
+       /* check that number of buckets is a power of 2 */
+       num_buckets = ht.mht_mask + 1;
+       assert(num_buckets > 0 && (num_buckets & (num_buckets - 1)) == 0);
+
+       /* check load factor */
+       assert(ht.mht_count <= (num_buckets << MHT_LOG_LOAD_FACTOR));
+
+       if (i < (MHT_INIT_SIZE << MHT_LOG_LOAD_FACTOR))
+       {
+           /* first expansion shouldn't have occurred yet */
+           assert(num_buckets == MHT_INIT_SIZE);
+           assert(ht.mht_buckets == ht.mht_small_buckets);
+       }
+       else
+       {
+           assert(num_buckets > MHT_INIT_SIZE);
+           assert(ht.mht_buckets != ht.mht_small_buckets);
+       }
+
+       key = index_to_key(i);
+       assert(mf_hash_find(&ht, key) == NULL);
+
+       /* allocate and add new item */
+       item = (mf_hashitem_T *)lalloc_clear(sizeof(mf_hashtab_T), FALSE);
+       assert(item != NULL);
+       item->mhi_key = key;
+       mf_hash_add_item(&ht, item);
+
+       assert(mf_hash_find(&ht, key) == item);
+
+       if (ht.mht_mask + 1 != num_buckets)
+       {
+           /* hash table was expanded */
+           assert(ht.mht_mask + 1 == num_buckets * MHT_GROWTH_FACTOR);
+           assert(i + 1 == (num_buckets << MHT_LOG_LOAD_FACTOR));
+       }
+    }
+
+    /* check presence of inserted items */
+    for (i = 0; i < TEST_COUNT; i++)
+    {
+       key = index_to_key(i);
+       item = mf_hash_find(&ht, key);
+       assert(item != NULL);
+       assert(item->mhi_key == key);
+    }
+
+    /* delete some items */
+    for (i = 0; i < TEST_COUNT; i++)
+    {
+       if (i % 100 < 70)
+       {
+           key = index_to_key(i);
+           item = mf_hash_find(&ht, key);
+           assert(item != NULL);
+           assert(item->mhi_key == key);
+
+           mf_hash_rem_item(&ht, item);
+           assert(mf_hash_find(&ht, key) == NULL);
+
+           mf_hash_add_item(&ht, item);
+           assert(mf_hash_find(&ht, key) == item);
+
+           mf_hash_rem_item(&ht, item);
+           assert(mf_hash_find(&ht, key) == NULL);
+
+           vim_free(item);
+       }
+    }
+
+    /* check again */
+    for (i = 0; i < TEST_COUNT; i++)
+    {
+       key = index_to_key(i);
+       item = mf_hash_find(&ht, key);
+
+       if (i % 100 < 70)
+       {
+           assert(item == NULL);
+       }
+       else
+       {
+           assert(item != NULL);
+           assert(item->mhi_key == key);
+       }
+    }
+
+    /* free hash table and all remaining items */
+    mf_hash_free_all(&ht);
+}
+
+    int
+main()
+{
+    test_mf_hash();
+    return 0;
+}
index 136f805..836ee04 100644 (file)
  *  mf_get().
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"    /* for mch_open(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 #ifndef UNIX           /* it's in os_unix.h for Unix */
 # include <proto/dos.h>            /* for Open() and Close() */
 #endif
 
-#ifdef HAVE_ERRNO_H
-# include <errno.h>
-#endif
-
 typedef struct block0          ZERO_BL;    /* contents of the first block */
 typedef struct pointer_block   PTR_BL;     /* contents of a pointer block */
 typedef struct data_block      DATA_BL;    /* contents of a data block */
@@ -582,6 +574,9 @@ ml_set_crypt_key(buf, old_key, old_cm)
            idx = ip->ip_index + 1;         /* go to next index */
            page_count = 1;
        }
+
+       if (error > 0)
+           EMSG(_("E843: Error while updating swap file crypt"));
     }
 
     mfp->mf_old_key = NULL;
@@ -626,6 +621,8 @@ ml_setname(buf)
            break;
        fname = findswapname(buf, &dirp, mfp->mf_fname);
                                                    /* alloc's fname */
+       if (dirp == NULL)           /* out of memory */
+           break;
        if (fname == NULL)          /* no file name found for this dir */
            continue;
 
@@ -749,11 +746,13 @@ ml_open_file(buf)
         * and creating it, another Vim creates the file.  In that case the
         * creation will fail and we will use another directory. */
        fname = findswapname(buf, &dirp, NULL); /* allocates fname */
+       if (dirp == NULL)
+           break;  /* out of memory */
        if (fname == NULL)
            continue;
        if (mf_open_file(mfp, fname) == OK)     /* consumes fname! */
        {
-#if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
+#if defined(MSDOS) || defined(MSWIN)
            /*
             * set full pathname for swap file now, because a ":!cd dir" may
             * change directory without us knowing it.
@@ -781,9 +780,7 @@ ml_open_file(buf)
        need_wait_return = TRUE;        /* call wait_return later */
        ++no_wait_return;
        (void)EMSG2(_("E303: Unable to open swap file for \"%s\", recovery impossible"),
-                   buf_spname(buf) != NULL
-                       ? (char_u *)buf_spname(buf)
-                       : buf->b_fname);
+                   buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname);
        --no_wait_return;
     }
 
@@ -938,7 +935,7 @@ set_b0_fname(b0p, buf)
        b0p->b0_fname[0] = NUL;
     else
     {
-#if defined(MSDOS) || defined(MSWIN) || defined(AMIGA) || defined(RISCOS)
+#if defined(MSDOS) || defined(MSWIN) || defined(AMIGA)
        /* Systems that cannot translate "~user" back into a path: copy the
         * file name unmodified.  Do use slashes instead of backslashes for
         * portability. */
@@ -1108,7 +1105,7 @@ ml_recover()
        fname = (char_u *)"";
     len = (int)STRLEN(fname);
     if (len >= 4 &&
-#if defined(VMS) || defined(RISCOS)
+#if defined(VMS)
            STRNICMP(fname + len - 4, "_s" , 2)
 #else
            STRNICMP(fname + len - 4, ".s" , 2)
@@ -1316,7 +1313,7 @@ ml_recover()
     smsg((char_u *)_("Using swap file \"%s\""), NameBuff);
 
     if (buf_spname(curbuf) != NULL)
-       STRCPY(NameBuff, buf_spname(curbuf));
+       vim_strncpy(NameBuff, buf_spname(curbuf), MAXPATHL - 1);
     else
        home_replace(NULL, curbuf->b_ffname, NameBuff, MAXPATHL, TRUE);
     smsg((char_u *)_("Original file \"%s\""), NameBuff);
@@ -1512,6 +1509,7 @@ ml_recover()
                    bnum = pp->pb_pointer[idx].pe_bnum;
                    line_count = pp->pb_pointer[idx].pe_line_count;
                    page_count = pp->pb_pointer[idx].pe_page_count;
+                   idx = 0;
                    continue;
                }
            }
@@ -1778,11 +1776,7 @@ recover_names(fname, list, nr, fname_out)
 #ifdef VMS
                names[0] = vim_strsave((char_u *)"*_sw%");
 #else
-# ifdef RISCOS
-               names[0] = vim_strsave((char_u *)"*_sw#");
-# else
                names[0] = vim_strsave((char_u *)"*.sw?");
-# endif
 #endif
 #if defined(UNIX) || defined(WIN3264)
                /* For Unix names starting with a dot are special.  MS-Windows
@@ -1809,11 +1803,7 @@ recover_names(fname, list, nr, fname_out)
 #ifdef VMS
                names[0] = concat_fnames(dir_name, (char_u *)"*_sw%", TRUE);
 #else
-# ifdef RISCOS
-               names[0] = concat_fnames(dir_name, (char_u *)"*_sw#", TRUE);
-# else
                names[0] = concat_fnames(dir_name, (char_u *)"*.sw?", TRUE);
-# endif
 #endif
 #if defined(UNIX) || defined(WIN3264)
                /* For Unix names starting with a dot are special.  MS-Windows
@@ -1882,7 +1872,7 @@ recover_names(fname, list, nr, fname_out)
            char_u          *swapname;
 
            swapname = modname(fname_res,
-#if defined(VMS) || defined(RISCOS)
+#if defined(VMS)
                               (char_u *)"_swp", FALSE
 #else
                               (char_u *)".swp", TRUE
@@ -2059,7 +2049,7 @@ swapfile_info(fname)
     fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
     if (fd >= 0)
     {
-       if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
+       if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
        {
            if (STRNCMP(b0.b0_version, "VIM 3.0", 7) == 0)
            {
@@ -2181,11 +2171,7 @@ recov_file_names(names, path, prepend_dot)
 #ifdef VMS
     names[num_names] = concat_fnames(path, (char_u *)"_sw%", FALSE);
 #else
-# ifdef RISCOS
-    names[num_names] = concat_fnames(path, (char_u *)"_sw#", FALSE);
-# else
     names[num_names] = concat_fnames(path, (char_u *)".sw?", FALSE);
-# endif
 #endif
     if (names[num_names] == NULL)
        goto end;
@@ -2212,11 +2198,7 @@ recov_file_names(names, path, prepend_dot)
 #ifdef VMS
     names[num_names] = modname(path, (char_u *)"_sw%", FALSE);
 #else
-# ifdef RISCOS
-    names[num_names] = modname(path, (char_u *)"_sw#", FALSE);
-# else
     names[num_names] = modname(path, (char_u *)".sw?", FALSE);
-# endif
 #endif
     if (names[num_names] == NULL)
        goto end;
@@ -2384,7 +2366,7 @@ theend:
  * Make a copy of the line if necessary.
  */
 /*
- * get a pointer to a (read-only copy of a) line
+ * Return a pointer to a (read-only copy of a) line.
  *
  * On failure an error message is given and IObuff is returned (to avoid
  * having to check for error everywhere).
@@ -2397,7 +2379,7 @@ ml_get(lnum)
 }
 
 /*
- * ml_get_pos: get pointer to position 'pos'
+ * Return pointer to position "pos".
  */
     char_u *
 ml_get_pos(pos)
@@ -2407,7 +2389,7 @@ ml_get_pos(pos)
 }
 
 /*
- * ml_get_curline: get pointer to cursor line.
+ * Return pointer to cursor line.
  */
     char_u *
 ml_get_curline()
@@ -2416,7 +2398,7 @@ ml_get_curline()
 }
 
 /*
- * ml_get_cursor: get pointer to cursor position
+ * Return pointer to cursor position.
  */
     char_u *
 ml_get_cursor()
@@ -2426,7 +2408,7 @@ ml_get_cursor()
 }
 
 /*
- * get a pointer to a line in a specific buffer
+ * Return a pointer to a line in a specific buffer
  *
  * "will_change": if TRUE mark the buffer dirty (chars in the line will be
  * changed)
@@ -3159,7 +3141,7 @@ ml_delete_int(buf, lnum, message)
           )
            set_keep_msg((char_u *)_(no_lines_msg), 0);
 
-       /* FEAT_BYTEOFF already handled in there, dont worry 'bout it below */
+       /* FEAT_BYTEOFF already handled in there, don't worry 'bout it below */
        i = ml_replace((linenr_T)1, (char_u *)"", TRUE);
        buf->b_ml.ml_flags |= ML_EMPTY;
 
@@ -3210,7 +3192,8 @@ ml_delete_int(buf, lnum, message)
        mf_free(mfp, hp);       /* free the data block */
        buf->b_ml.ml_locked = NULL;
 
-       for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0; --stack_idx)
+       for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0;
+                                                                 --stack_idx)
        {
            buf->b_ml.ml_stack_top = 0;     /* stack is invalid when failing */
            ip = &(buf->b_ml.ml_stack[stack_idx]);
@@ -3961,14 +3944,9 @@ makeswapname(fname, ffname, buf, dir_name)
 #else
            (buf->b_p_sn || buf->b_shortname),
 #endif
-#ifdef RISCOS
-           /* Avoid problems if fname has special chars, eg <Wimp$Scrap> */
-           ffname,
-#else
            fname_res,
-#endif
            (char_u *)
-#if defined(VMS) || defined(RISCOS)
+#if defined(VMS)
            "_swp",
 #else
            ".swp",
@@ -4076,9 +4054,9 @@ attention_message(buf, fname)
     }
     /* Some of these messages are long to allow translation to
      * other languages. */
-    MSG_PUTS(_("\n(1) Another program may be editing the same file.\n    If this is the case, be careful not to end up with two\n    different instances of the same file when making changes.\n"));
-    MSG_PUTS(_("    Quit, or continue with caution.\n"));
-    MSG_PUTS(_("\n(2) An edit session for this file crashed.\n"));
+    MSG_PUTS(_("\n(1) Another program may be editing the same file.  If this is the case,\n    be careful not to end up with two different instances of the same\n    file when making changes."));
+    MSG_PUTS(_("  Quit, or continue with caution.\n"));
+    MSG_PUTS(_("(2) An edit session for this file crashed.\n"));
     MSG_PUTS(_("    If this is the case, use \":recover\" or \"vim -r "));
     msg_outtrans(buf->b_fname);
     MSG_PUTS(_("\"\n    to recover the changes (see \":help recovery\").\n"));
@@ -4138,6 +4116,7 @@ do_swapexists(buf, fname)
  *
  * Several names are tried to find one that does not exist
  * Returns the name in allocated memory or NULL.
+ * When out of memory "dirp" is set to NULL.
  *
  * Note: If BASENAMELEN is not correct, you will get error messages for
  *      not being able to open the swap or undo file
@@ -4181,7 +4160,9 @@ findswapname(buf, dirp, old_fname)
      * First allocate some memory to put the directory name in.
      */
     dir_name = alloc((unsigned)STRLEN(*dirp) + 1);
-    if (dir_name != NULL)
+    if (dir_name == NULL)
+       *dirp = NULL;
+    else
        (void)copy_option_part(dirp, dir_name, 31000, ",");
 
     /*
@@ -4389,7 +4370,7 @@ findswapname(buf, dirp, old_fname)
                fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
                if (fd >= 0)
                {
-                   if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
+                   if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
                    {
                        /*
                         * If the swapfile has the same directory as the
@@ -4432,14 +4413,6 @@ findswapname(buf, dirp, old_fname)
                    }
                    close(fd);
                }
-#ifdef RISCOS
-               else
-                   /* Can't open swap file, though it does exist.
-                    * Assume that the user is editing two files with
-                    * the same name in different directories. No error.
-                    */
-                   differ = TRUE;
-#endif
 
                /* give the ATTENTION message when there is an old swap file
                 * for the current file, and the buffer was not recovered. */
@@ -4521,7 +4494,7 @@ findswapname(buf, dirp, old_fname)
                                    process_still_running
                                        ? (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Quit\n&Abort") :
 # endif
-                                       (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL);
+                                       (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL, FALSE);
 
 # if defined(UNIX) || defined(__EMX__) || defined(VMS)
                        if (process_still_running && choice >= 4)
index 10becdb..42cf67e 100644 (file)
@@ -1394,7 +1394,8 @@ get_menu_names(xp, idx)
     int                idx;
 {
     static vimmenu_T   *menu = NULL;
-    static char_u      tbuffer[256]; /*hack*/
+#define TBUFFER_LEN 256
+    static char_u      tbuffer[TBUFFER_LEN]; /*hack*/
     char_u             *str;
 #ifdef FEAT_MULTI_LANG
     static  int                should_advance = FALSE;
@@ -1428,11 +1429,11 @@ get_menu_names(xp, idx)
        {
 #ifdef FEAT_MULTI_LANG
            if (should_advance)
-               STRCPY(tbuffer, menu->en_dname);
+               vim_strncpy(tbuffer, menu->en_dname, TBUFFER_LEN - 2);
            else
            {
 #endif
-               STRCPY(tbuffer, menu->dname);
+               vim_strncpy(tbuffer, menu->dname,  TBUFFER_LEN - 2);
 #ifdef FEAT_MULTI_LANG
                if (menu->en_dname == NULL)
                    should_advance = TRUE;
@@ -1512,8 +1513,8 @@ menu_name_equal(name, menu)
 {
 #ifdef FEAT_MULTI_LANG
     if (menu->en_name != NULL
-           && (menu_namecmp(name,menu->en_name)
-               || menu_namecmp(name,menu->en_dname)))
+           && (menu_namecmp(name, menu->en_name)
+               || menu_namecmp(name, menu->en_dname)))
        return TRUE;
 #endif
     return menu_namecmp(name, menu->name) || menu_namecmp(name, menu->dname);
@@ -2342,7 +2343,7 @@ gui_find_menu(path_name)
 
        while (menu != NULL)
        {
-           if (STRCMP(name, menu->name) == 0 || STRCMP(name, menu->dname) == 0)
+           if (menu_name_equal(name, menu))
            {
                if (menu->children == NULL)
                {
index c33b173..5f00c01 100644 (file)
@@ -39,7 +39,6 @@ static int do_more_prompt __ARGS((int typed_char));
 static void msg_screen_putchar __ARGS((int c, int attr));
 static int  msg_check_screen __ARGS((void));
 static void redir_write __ARGS((char_u *s, int maxlen));
-static void verbose_write __ARGS((char_u *s, int maxlen));
 #ifdef FEAT_CON_DIALOG
 static char_u *msg_show_console_dialog __ARGS((char_u *message, char_u *buttons, int dfltbutton));
 static int     confirm_msg_used = FALSE;       /* displaying confirm_msg */
@@ -58,6 +57,9 @@ static struct msg_hist *first_msg_hist = NULL;
 static struct msg_hist *last_msg_hist = NULL;
 static int msg_hist_len = 0;
 
+static FILE *verbose_fd = NULL;
+static int  verbose_did_open = FALSE;
+
 /*
  * When writing messages to the screen, there are many different situations.
  * A number of variables is used to remember the current state:
@@ -83,7 +85,7 @@ static int msg_hist_len = 0;
  *                 need_wait_return to be set.  This is a hack to make ":ts"
  *                 work without an extra prompt.
  * lines_left      Number of lines available for messages before the
- *                 more-prompt is to be given.
+ *                 more-prompt is to be given.  -1 when not set.
  * need_wait_return TRUE when the hit-return prompt is needed.
  *                 Reset: After giving the hit-return prompt, when the user
  *                 has answered some other prompt.
@@ -220,15 +222,16 @@ msg_strtrunc(s, force)
            if (enc_utf8)
                /* may have up to 18 bytes per cell (6 per char, up to two
                 * composing chars) */
-               buf = alloc((room + 2) * 18);
+               len = (room + 2) * 18;
            else if (enc_dbcs == DBCS_JPNU)
                /* may have up to 2 bytes per cell for euc-jp */
-               buf = alloc((room + 2) * 2);
+               len = (room + 2) * 2;
            else
 #endif
-               buf = alloc(room + 2);
+               len = room + 2;
+           buf = alloc(len);
            if (buf != NULL)
-               trunc_string(s, buf, room);
+               trunc_string(s, buf, room, len);
        }
     }
     return buf;
@@ -239,10 +242,11 @@ msg_strtrunc(s, force)
  * "s" and "buf" may be equal.
  */
     void
-trunc_string(s, buf, room)
+trunc_string(s, buf, room, buflen)
     char_u     *s;
     char_u     *buf;
     int                room;
+    int                buflen;
 {
     int                half;
     int                len;
@@ -255,7 +259,7 @@ trunc_string(s, buf, room)
     len = 0;
 
     /* First part: Start of the string. */
-    for (e = 0; len < half; ++e)
+    for (e = 0; len < half && e < buflen; ++e)
     {
        if (s[e] == NUL)
        {
@@ -272,7 +276,8 @@ trunc_string(s, buf, room)
        if (has_mbyte)
            for (n = (*mb_ptr2len)(s + e); --n > 0; )
            {
-               ++e;
+               if (++e == buflen)
+                   break;
                buf[e] = s[e];
            }
 #endif
@@ -317,8 +322,19 @@ trunc_string(s, buf, room)
     }
 
     /* Set the middle and copy the last part. */
-    mch_memmove(buf + e, "...", (size_t)3);
-    STRMOVE(buf + e + 3, s + i);
+    if (e + 3 < buflen)
+    {
+       mch_memmove(buf + e, "...", (size_t)3);
+       len = (int)STRLEN(s + i) + 1;
+       if (len >= buflen - e - 3)
+           len = buflen - e - 3 - 1;
+       mch_memmove(buf + e + 3, s + i, len);
+       buf[e + 3 + len - 1] = NUL;
+    }
+    else
+    {
+       buf[e - 1] = NUL;  /* make sure it is truncated */
+    }
 }
 
 /*
@@ -569,6 +585,10 @@ emsg(s)
     int                severe;
 #endif
 
+    /* Skip this if not giving error messages at the moment. */
+    if (emsg_not_now())
+       return TRUE;
+
     called_emsg = TRUE;
     ex_exitval = 1;
 
@@ -581,10 +601,6 @@ emsg(s)
     emsg_severe = FALSE;
 #endif
 
-    /* Skip this if not giving error messages at the moment. */
-    if (emsg_not_now())
-       return TRUE;
-
     if (!emsg_off || vim_strchr(p_debug, 't') != NULL)
     {
 #ifdef FEAT_EVAL
@@ -853,6 +869,7 @@ msg_end_prompt()
     cmdline_row = msg_row;
     msg_col = 0;
     msg_clr_eos();
+    lines_left = -1;
 }
 #endif
 
@@ -879,16 +896,17 @@ wait_return(redraw)
     if (msg_silent != 0)
        return;
 
-/*
- * With the global command (and some others) we only need one return at the
- * end. Adjust cmdline_row to avoid the next message overwriting the last one.
- * When inside vgetc(), we can't wait for a typed character at all.
- */
+    /*
+     * When inside vgetc(), we can't wait for a typed character at all.
+     * With the global command (and some others) we only need one return at
+     * the end. Adjust cmdline_row to avoid the next message overwriting the
+     * last one.
+     */
     if (vgetc_busy > 0)
        return;
+    need_wait_return = TRUE;
     if (no_wait_return)
     {
-       need_wait_return = TRUE;
        if (!exmode_active)
            cmdline_row = msg_row;
        return;
@@ -921,6 +939,12 @@ wait_return(redraw)
 #ifdef USE_ON_FLY_SCROLL
        dont_scroll = TRUE;             /* disallow scrolling here */
 #endif
+       /* Avoid the sequence that the user types ":" at the hit-return prompt
+        * to start an Ex command, but the file-changed dialog gets in the
+        * way. */
+       if (need_check_timestamps)
+           check_timestamps(FALSE);
+
        hit_return_msg();
 
        do
@@ -958,24 +982,37 @@ wait_return(redraw)
             */
            if (p_more && !p_cp)
            {
-               if (c == 'b' || c == 'k' || c == 'u' || c == 'g' || c == K_UP)
+               if (c == 'b' || c == 'k' || c == 'u' || c == 'g'
+                                               || c == K_UP || c == K_PAGEUP)
                {
-                   /* scroll back to show older messages */
-                   do_more_prompt(c);
+                   if (msg_scrolled > Rows)
+                       /* scroll back to show older messages */
+                       do_more_prompt(c);
+                   else
+                   {
+                       msg_didout = FALSE;
+                       c = K_IGNORE;
+                       msg_col =
+#ifdef FEAT_RIGHTLEFT
+                           cmdmsg_rl ? Columns - 1 :
+#endif
+                           0;
+                   }
                    if (quit_more)
                    {
                        c = CAR;                /* just pretend CR was hit */
                        quit_more = FALSE;
                        got_int = FALSE;
                    }
-                   else
+                   else if (c != K_IGNORE)
                    {
                        c = K_IGNORE;
                        hit_return_msg();
                    }
                }
                else if (msg_scrolled > Rows - 2
-                        && (c == 'j' || c == K_DOWN || c == 'd' || c == 'f'))
+                        && (c == 'j' || c == 'd' || c == 'f'
+                                          || c == K_DOWN || c == K_PAGEDOWN))
                    c = K_IGNORE;
            }
        } while ((had_got_int && c == Ctrl_C)
@@ -1477,6 +1514,27 @@ msg_outtrans_special(strstart, from)
     return retval;
 }
 
+#if defined(FEAT_EVAL) || defined(PROTO)
+/*
+ * Return the lhs or rhs of a mapping, with the key codes turned into printable
+ * strings, in an allocated string.
+ */
+    char_u *
+str2special_save(str, is_lhs)
+    char_u  *str;
+    int            is_lhs;  /* TRUE for lhs, FALSE for rhs */
+{
+    garray_T   ga;
+    char_u     *p = str;
+
+    ga_init2(&ga, 1, 40);
+    while (*p != NUL)
+       ga_concat(&ga, str2special(&p, is_lhs));
+    ga_append(&ga, NUL);
+    return (char_u *)ga.ga_data;
+}
+#endif
+
 /*
  * Return the printable string for the key codes at "*sp".
  * Used for translating the lhs or rhs of a mapping to printable chars.
@@ -1519,22 +1577,33 @@ str2special(sp, from)
        {
            c = TO_SPECIAL(str[1], str[2]);
            str += 2;
-           if (c == K_ZERO)    /* display <Nul> as ^@ */
+           if (c == KS_ZERO)   /* display <Nul> as ^@ or <Nul> */
                c = NUL;
        }
        if (IS_SPECIAL(c) || modifiers) /* special key */
            special = TRUE;
     }
-    *sp = str + 1;
 
 #ifdef FEAT_MBYTE
-    /* For multi-byte characters check for an illegal byte. */
-    if (has_mbyte && MB_BYTE2LEN(*str) > (*mb_ptr2len)(str))
+    if (has_mbyte && !IS_SPECIAL(c))
     {
-       transchar_nonprint(buf, c);
-       return buf;
+       int len = (*mb_ptr2len)(str);
+
+       /* For multi-byte characters check for an illegal byte. */
+       if (has_mbyte && MB_BYTE2LEN(*str) > len)
+       {
+           transchar_nonprint(buf, c);
+           *sp = str + 1;
+           return buf;
+       }
+       /* Since 'special' is TRUE the multi-byte character 'c' will be
+        * processed by get_special_key_name() */
+       c = (*mb_ptr2char)(str);
+       *sp = str + len;
     }
+    else
 #endif
+       *sp = str + 1;
 
     /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
      * Use <Space> only for lhs of a mapping. */
@@ -1616,8 +1685,16 @@ msg_prt_line(s, list)
        else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
        {
            col += (*mb_ptr2cells)(s);
-           mch_memmove(buf, s, (size_t)l);
-           buf[l] = NUL;
+           if (lcs_nbsp != NUL && list && mb_ptr2char(s) == 160)
+           {
+               mb_char2bytes(lcs_nbsp, buf);
+               buf[(*mb_ptr2len)(buf)] = NUL;
+           }
+           else
+           {
+               mch_memmove(buf, s, (size_t)l);
+               buf[l] = NUL;
+           }
            msg_puts(buf);
            s += l;
            continue;
@@ -1643,6 +1720,11 @@ msg_prt_line(s, list)
                    attr = hl_attr(HLF_8);
                }
            }
+           else if (c == 160 && list && lcs_nbsp != NUL)
+           {
+               c = lcs_nbsp;
+               attr = hl_attr(HLF_8);
+           }
            else if (c == NUL && list && lcs_eol != NUL)
            {
                p_extra = (char_u *)"";
@@ -2285,6 +2367,16 @@ msg_sb_start(mps)
 }
 
 /*
+ * Mark the last message chunk as finishing the line.
+ */
+    void
+msg_sb_eol()
+{
+    if (last_msgchunk != NULL)
+       last_msgchunk->sb_eol = TRUE;
+}
+
+/*
  * Display a screen line from previously displayed text at row "row".
  * Returns a pointer to the text for the next line (can be NULL).
  */
@@ -2438,7 +2530,7 @@ do_more_prompt(typed_char)
 #ifdef FEAT_CON_DIALOG
     int                retval = FALSE;
 #endif
-    int                scroll;
+    int                toscroll;
     msgchunk_T *mp_last = NULL;
     msgchunk_T *mp;
     int                i;
@@ -2489,49 +2581,49 @@ do_more_prompt(typed_char)
        }
 #endif
 
-       scroll = 0;
+       toscroll = 0;
        switch (c)
        {
        case BS:                /* scroll one line back */
        case K_BS:
        case 'k':
        case K_UP:
-           scroll = -1;
+           toscroll = -1;
            break;
 
        case CAR:               /* one extra line */
        case NL:
        case 'j':
        case K_DOWN:
-           scroll = 1;
+           toscroll = 1;
            break;
 
        case 'u':               /* Up half a page */
-           scroll = -(Rows / 2);
+           toscroll = -(Rows / 2);
            break;
 
        case 'd':               /* Down half a page */
-           scroll = Rows / 2;
+           toscroll = Rows / 2;
            break;
 
        case 'b':               /* one page back */
        case K_PAGEUP:
-           scroll = -(Rows - 1);
+           toscroll = -(Rows - 1);
            break;
 
        case ' ':               /* one extra page */
        case 'f':
        case K_PAGEDOWN:
        case K_LEFTMOUSE:
-           scroll = Rows - 1;
+           toscroll = Rows - 1;
            break;
 
        case 'g':               /* all the way back to the start */
-           scroll = -999999;
+           toscroll = -999999;
            break;
 
        case 'G':               /* all the way to the end */
-           scroll = 999999;
+           toscroll = 999999;
            lines_left = 999999;
            break;
 
@@ -2584,9 +2676,9 @@ do_more_prompt(typed_char)
            continue;
        }
 
-       if (scroll != 0)
+       if (toscroll != 0)
        {
-           if (scroll < 0)
+           if (toscroll < 0)
            {
                /* go to start of last line */
                if (mp_last == NULL)
@@ -2604,7 +2696,7 @@ do_more_prompt(typed_char)
                if (mp != NULL && mp->sb_prev != NULL)
                {
                    /* Find line to be displayed at top. */
-                   for (i = 0; i > scroll; --i)
+                   for (i = 0; i > toscroll; --i)
                    {
                        if (mp == NULL || mp->sb_prev == NULL)
                            break;
@@ -2615,7 +2707,7 @@ do_more_prompt(typed_char)
                            mp_last = msg_sb_start(mp_last->sb_prev);
                    }
 
-                   if (scroll == -1 && screen_ins_lines(0, 0, 1,
+                   if (toscroll == -1 && screen_ins_lines(0, 0, 1,
                                                       (int)Rows, NULL) == OK)
                    {
                        /* display line at top */
@@ -2631,13 +2723,13 @@ do_more_prompt(typed_char)
                            ++msg_scrolled;
                        }
                    }
-                   scroll = 0;
+                   toscroll = 0;
                }
            }
            else
            {
                /* First display any text that we scrolled back. */
-               while (scroll > 0 && mp_last != NULL)
+               while (toscroll > 0 && mp_last != NULL)
                {
                    /* scroll up, display line at bottom */
                    msg_scroll_up();
@@ -2645,11 +2737,11 @@ do_more_prompt(typed_char)
                    screen_fill((int)Rows - 2, (int)Rows - 1, 0,
                                                   (int)Columns, ' ', ' ', 0);
                    mp_last = disp_sb_line((int)Rows - 2, mp_last);
-                   --scroll;
+                   --toscroll;
                }
            }
 
-           if (scroll <= 0)
+           if (toscroll <= 0)
            {
                /* displayed the requested text, more prompt again */
                screen_fill((int)Rows - 1, (int)Rows, 0,
@@ -2659,7 +2751,7 @@ do_more_prompt(typed_char)
            }
 
            /* display more text, return to caller */
-           lines_left = scroll;
+           lines_left = toscroll;
        }
 
        break;
@@ -2975,7 +3067,7 @@ msg_clr_cmdline()
 msg_end()
 {
     /*
-     * if the string is larger than the window,
+     * If the string is larger than the window,
      * or the ruler option is set and we run into it,
      * we have to redraw the window.
      * Do not do this if we are abandoning the file or editing the command line.
@@ -3019,12 +3111,9 @@ redir_write(str, maxlen)
     if (redir_off)
        return;
 
-    /*
-     * If 'verbosefile' is set write message in that file.
-     * Must come before the rest because of updating "msg_col".
-     */
-    if (*p_vfile != NUL)
-       verbose_write(s, maxlen);
+    /* If 'verbosefile' is set prepare for writing in that file. */
+    if (*p_vfile != NUL && verbose_fd == NULL)
+       verbose_open();
 
     if (redirecting())
     {
@@ -3038,9 +3127,12 @@ redir_write(str, maxlen)
                    write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
                else if (redir_vname)
                    var_redir_str((char_u *)" ", -1);
-               else if (redir_fd)
+               else
 #endif
+                   if (redir_fd != NULL)
                    fputs(" ", redir_fd);
+               if (verbose_fd != NULL)
+                   fputs(" ", verbose_fd);
                ++cur_col;
            }
        }
@@ -3052,13 +3144,16 @@ redir_write(str, maxlen)
            var_redir_str(s, maxlen);
 #endif
 
-       /* Adjust the current column */
+       /* Write and adjust the current column. */
        while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
        {
 #ifdef FEAT_EVAL
-           if (!redir_reg && !redir_vname && redir_fd != NULL)
+           if (!redir_reg && !redir_vname)
 #endif
-               putc(*s, redir_fd);
+               if (redir_fd != NULL)
+                   putc(*s, redir_fd);
+           if (verbose_fd != NULL)
+               putc(*s, verbose_fd);
            if (*s == '\r' || *s == '\n')
                cur_col = 0;
            else if (*s == '\t')
@@ -3076,7 +3171,7 @@ redir_write(str, maxlen)
     int
 redirecting()
 {
-    return redir_fd != NULL
+    return redir_fd != NULL || *p_vfile != NUL
 #ifdef FEAT_EVAL
                          || redir_reg || redir_vname
 #endif
@@ -3134,9 +3229,6 @@ verbose_leave_scroll()
        cmdline_row = msg_row;
 }
 
-static FILE *verbose_fd = NULL;
-static int  verbose_did_open = FALSE;
-
 /*
  * Called when 'verbosefile' is set: stop writing to the file.
  */
@@ -3174,49 +3266,6 @@ verbose_open()
 }
 
 /*
- * Write a string to 'verbosefile'.
- * When "maxlen" is -1 write the whole string, otherwise up to "maxlen" bytes.
- */
-    static void
-verbose_write(str, maxlen)
-    char_u     *str;
-    int                maxlen;
-{
-    char_u     *s = str;
-    static int cur_col = 0;
-
-    /* Open the file when called the first time. */
-    if (verbose_fd == NULL)
-       verbose_open();
-
-    if (verbose_fd != NULL)
-    {
-       /* If the string doesn't start with CR or NL, go to msg_col */
-       if (*s != '\n' && *s != '\r')
-       {
-           while (cur_col < msg_col)
-           {
-               fputs(" ", verbose_fd);
-               ++cur_col;
-           }
-       }
-
-       /* Adjust the current column */
-       while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
-       {
-           putc(*s, verbose_fd);
-           if (*s == '\r' || *s == '\n')
-               cur_col = 0;
-           else if (*s == '\t')
-               cur_col += (8 - cur_col % 8);
-           else
-               ++cur_col;
-           ++s;
-       }
-    }
-}
-
-/*
  * Give a warning message (for searching).
  * Use 'w' highlighting and may repeat the message after redrawing
  */
@@ -3294,7 +3343,7 @@ msg_advance(col)
  * different letter.
  */
     int
-do_dialog(type, title, message, buttons, dfltbutton, textfield)
+do_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
     int                type UNUSED;
     char_u     *title UNUSED;
     char_u     *message;
@@ -3302,6 +3351,8 @@ do_dialog(type, title, message, buttons, dfltbutton, textfield)
     int                dfltbutton;
     char_u     *textfield UNUSED;      /* IObuff for inputdialog(), NULL
                                           otherwise */
+    int                ex_cmd;     /* when TRUE pressing : accepts default and starts
+                              Ex command */
 {
     int                oldState;
     int                retval = 0;
@@ -3320,7 +3371,7 @@ do_dialog(type, title, message, buttons, dfltbutton, textfield)
     if (gui.in_use && vim_strchr(p_go, GO_CONDIALOG) == NULL)
     {
        c = gui_mch_dialog(type, title, message, buttons, dfltbutton,
-                                                                  textfield);
+                                                          textfield, ex_cmd);
        /* avoid a hit-enter prompt without clearing the cmdline */
        need_wait_return = FALSE;
        emsg_on_display = FALSE;
@@ -3367,6 +3418,13 @@ do_dialog(type, title, message, buttons, dfltbutton, textfield)
            default:            /* Could be a hotkey? */
                if (c < 0)      /* special keys are ignored here */
                    continue;
+               if (c == ':' && ex_cmd)
+               {
+                   retval = dfltbutton;
+                   ins_char_typebuf(':');
+                   break;
+               }
+
                /* Make the character lowercase, as chars in "hotkeys" are. */
                c = MB_TOLOWER(c);
                retval = 1;
@@ -3640,7 +3698,7 @@ vim_dialog_yesno(type, title, message, dflt)
     if (do_dialog(type,
                title == NULL ? (char_u *)_("Question") : title,
                message,
-               (char_u *)_("&Yes\n&No"), dflt, NULL) == 1)
+               (char_u *)_("&Yes\n&No"), dflt, NULL, FALSE) == 1)
        return VIM_YES;
     return VIM_NO;
 }
@@ -3655,7 +3713,7 @@ vim_dialog_yesnocancel(type, title, message, dflt)
     switch (do_dialog(type,
                title == NULL ? (char_u *)_("Question") : title,
                message,
-               (char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL))
+               (char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL, FALSE))
     {
        case 1: return VIM_YES;
        case 2: return VIM_NO;
@@ -3674,7 +3732,7 @@ vim_dialog_yesnoallcancel(type, title, message, dflt)
                title == NULL ? (char_u *)"Question" : title,
                message,
                (char_u *)_("&Yes\n&No\nSave &All\n&Discard All\n&Cancel"),
-                                                                 dflt, NULL))
+                                                          dflt, NULL, FALSE))
     {
        case 1: return VIM_YES;
        case 2: return VIM_NO;
@@ -4251,6 +4309,7 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
            case '%':
            case 'c':
            case 's':
+           case 'S':
                length_modifier = '\0';
                str_arg_l = 1;
                switch (fmt_spec)
@@ -4279,6 +4338,7 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
                    }
 
                case 's':
+               case 'S':
                    str_arg =
 #ifndef HAVE_STDARG_H
                                (char *)get_a_arg(arg_idx);
@@ -4315,6 +4375,24 @@ vim_snprintf(str, str_m, fmt, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
                        str_arg_l = (q == NULL) ? precision
                                                      : (size_t)(q - str_arg);
                    }
+#ifdef FEAT_MBYTE
+                   if (fmt_spec == 'S')
+                   {
+                       if (min_field_width != 0)
+                           min_field_width += STRLEN(str_arg)
+                                    - mb_string2cells((char_u *)str_arg, -1);
+                       if (precision)
+                       {
+                           char_u *p1 = (char_u *)str_arg;
+                           size_t i;
+
+                           for (i = 0; i < precision && *p1; i++)
+                               p1 += mb_ptr2len(p1);
+
+                           str_arg_l = precision = p1 - (char_u *)str_arg;
+                       }
+                   }
+#endif
                    break;
 
                default:
index fd178c9..fd5d1fd 100644 (file)
 
 static char_u *vim_version_dir __ARGS((char_u *vimdir));
 static char_u *remove_tail __ARGS((char_u *p, char_u *pend, char_u *name));
+#if defined(FEAT_CMDL_COMPL)
+static void init_users __ARGS((void));
+#endif
 static int copy_indent __ARGS((int size, char_u        *src));
 
+/* All user names (for ~user completion as done by shell). */
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+static garray_T        ga_users;
+#endif
+
 /*
  * Count the size (in window cells) of the indent in the current line.
  */
@@ -363,7 +371,7 @@ copy_indent(size, src)
 
        /* Fill to next tabstop with a tab, if possible */
        tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
-       if (todo >= tab_pad)
+       if (todo >= tab_pad && !curbuf->b_p_et)
        {
            todo -= tab_pad;
            ++ind_len;
@@ -372,7 +380,7 @@ copy_indent(size, src)
        }
 
        /* Add tabs required for indent */
-       while (todo >= (int)curbuf->b_p_ts)
+       while (todo >= (int)curbuf->b_p_ts && !curbuf->b_p_et)
        {
            todo -= (int)curbuf->b_p_ts;
            ++ind_len;
@@ -423,26 +431,35 @@ get_number_indent(lnum)
 {
     colnr_T    col;
     pos_T      pos;
-    regmmatch_T        regmatch;
+
+    regmatch_T regmatch;
+    int                lead_len = 0;   /* length of comment leader */
 
     if (lnum > curbuf->b_ml.ml_line_count)
        return -1;
     pos.lnum = 0;
+
+#ifdef FEAT_COMMENTS
+    /* In format_lines() (i.e. not insert mode), fo+=q is needed too...  */
+    if ((State & INSERT) || has_format_option(FO_Q_COMS))
+       lead_len = get_leader_len(ml_get(lnum), NULL, FALSE, TRUE);
+#endif
     regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
     if (regmatch.regprog != NULL)
     {
-       regmatch.rmm_ic = FALSE;
-       regmatch.rmm_maxcol = 0;
-       if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
-                                                           (colnr_T)0, NULL))
+       regmatch.rm_ic = FALSE;
+
+       /* vim_regexec() expects a pointer to a line.  This lets us
+        * start matching for the flp beyond any comment leader...  */
+       if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
        {
-           pos.lnum = regmatch.endpos[0].lnum + lnum;
-           pos.col = regmatch.endpos[0].col;
+           pos.lnum = lnum;
+           pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum));
 #ifdef FEAT_VIRTUALEDIT
            pos.coladd = 0;
 #endif
        }
-       vim_free(regmatch.regprog);
+       vim_regfree(regmatch.regprog);
     }
 
     if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
@@ -502,14 +519,18 @@ cin_is_cinword(line)
  *         OPENLINE_DO_COM     format comments
  *         OPENLINE_KEEPTRAIL  keep trailing spaces
  *         OPENLINE_MARKFIX    adjust mark positions after the line break
+ *         OPENLINE_COM_LIST   format comments with list or 2nd line indent
+ *
+ * "second_line_indent": indent for after ^^D in Insert mode or if flag
+ *                       OPENLINE_COM_LIST
  *
  * Return TRUE for success, FALSE for failure
  */
     int
-open_line(dir, flags, old_indent)
+open_line(dir, flags, second_line_indent)
     int                dir;            /* FORWARD or BACKWARD */
     int                flags;
-    int                old_indent;     /* indent for after ^^D in Insert mode */
+    int                second_line_indent;
 {
     char_u     *saved_line;            /* copy of the original line */
     char_u     *next_line = NULL;      /* copy of the next line */
@@ -650,8 +671,8 @@ open_line(dir, flags, old_indent)
         * count white space on current line
         */
        newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
-       if (newindent == 0)
-           newindent = old_indent;     /* for ^^D command in insert mode */
+       if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
+           newindent = second_line_indent; /* for ^^D command in insert mode */
 
 #ifdef FEAT_SMARTINDENT
        /*
@@ -671,7 +692,7 @@ open_line(dir, flags, old_indent)
            ptr = saved_line;
 # ifdef FEAT_COMMENTS
            if (flags & OPENLINE_DO_COM)
-               lead_len = get_leader_len(ptr, NULL, FALSE);
+               lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
            else
                lead_len = 0;
 # endif
@@ -693,7 +714,7 @@ open_line(dir, flags, old_indent)
                }
 # ifdef FEAT_COMMENTS
                if (flags & OPENLINE_DO_COM)
-                   lead_len = get_leader_len(ptr, NULL, FALSE);
+                   lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
                else
                    lead_len = 0;
                if (lead_len > 0)
@@ -836,7 +857,7 @@ open_line(dir, flags, old_indent)
      */
     end_comment_pending = NUL;
     if (flags & OPENLINE_DO_COM)
-       lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD);
+       lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD, TRUE);
     else
        lead_len = 0;
     if (lead_len > 0)
@@ -1007,9 +1028,9 @@ open_line(dir, flags, old_indent)
        }
        if (lead_len)
        {
-           /* allocate buffer (may concatenate p_exta later) */
-           leader = alloc(lead_len + lead_repl_len + extra_space +
-                                                             extra_len + 1);
+           /* allocate buffer (may concatenate p_extra later) */
+           leader = alloc(lead_len + lead_repl_len + extra_space + extra_len
+                    + (second_line_indent > 0 ? second_line_indent : 0) + 1);
            allocated = leader;             /* remember to free it later */
 
            if (leader == NULL)
@@ -1304,6 +1325,22 @@ open_line(dir, flags, old_indent)
     /* concatenate leader and p_extra, if there is a leader */
     if (lead_len)
     {
+       if (flags & OPENLINE_COM_LIST && second_line_indent > 0)
+       {
+           int i;
+           int padding = second_line_indent
+                                         - (newindent + (int)STRLEN(leader));
+
+           /* Here whitespace is inserted after the comment char.
+            * Below, set_indent(newindent, SIN_INSERT) will insert the
+            * whitespace needed before the comment char. */
+           for (i = 0; i < padding; i++)
+           {
+               STRCAT(leader, " ");
+               less_cols--;
+               newcol++;
+           }
+       }
        STRCAT(leader, p_extra);
        p_extra = leader;
        did_ai = TRUE;      /* So truncating blanks works with comments */
@@ -1360,9 +1397,11 @@ open_line(dir, flags, old_indent)
 #ifdef FEAT_SMARTINDENT
        if (did_si)
        {
+           int        sw = (int)get_sw_value();
+
            if (p_sr)
-               newindent -= newindent % (int)curbuf->b_p_sw;
-           newindent += (int)curbuf->b_p_sw;
+               newindent -= newindent % sw;
+           newindent += sw;
        }
 #endif
        /* Copy the indent */
@@ -1548,28 +1587,35 @@ theend:
  * When "flags" is not NULL, it is set to point to the flags of the recognized
  * comment leader.
  * "backward" must be true for the "O" command.
+ * If "include_space" is set, include trailing whitespace while calculating the
+ * length.
  */
     int
-get_leader_len(line, flags, backward)
+get_leader_len(line, flags, backward, include_space)
     char_u     *line;
     char_u     **flags;
     int                backward;
+    int                include_space;
 {
     int                i, j;
+    int                result;
     int                got_com = FALSE;
     int                found_one;
     char_u     part_buf[COM_MAX_LEN];  /* buffer for one option part */
     char_u     *string;                /* pointer to comment string */
     char_u     *list;
+    int                middle_match_len = 0;
+    char_u     *prev_list;
+    char_u     *saved_flags = NULL;
 
-    i = 0;
+    result = i = 0;
     while (vim_iswhite(line[i]))    /* leading white space is ignored */
        ++i;
 
     /*
      * Repeat to match several nested comment strings.
      */
-    while (line[i])
+    while (line[i] != NUL)
     {
        /*
         * scan through the 'comments' option for a match
@@ -1577,29 +1623,161 @@ get_leader_len(line, flags, backward)
        found_one = FALSE;
        for (list = curbuf->b_p_com; *list; )
        {
-           /*
-            * Get one option part into part_buf[].  Advance list to next one.
-            * put string at start of string.
-            */
-           if (!got_com && flags != NULL)  /* remember where flags started */
-               *flags = list;
+           /* Get one option part into part_buf[].  Advance "list" to next
+            * one.  Put "string" at start of string.  */
+           if (!got_com && flags != NULL)
+               *flags = list;      /* remember where flags started */
+           prev_list = list;
            (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
            string = vim_strchr(part_buf, ':');
            if (string == NULL)     /* missing ':', ignore this part */
                continue;
            *string++ = NUL;        /* isolate flags from string */
 
-           /*
-            * When already found a nested comment, only accept further
-            * nested comments.
-            */
+           /* If we found a middle match previously, use that match when this
+            * is not a middle or end. */
+           if (middle_match_len != 0
+                   && vim_strchr(part_buf, COM_MIDDLE) == NULL
+                   && vim_strchr(part_buf, COM_END) == NULL)
+               break;
+
+           /* When we already found a nested comment, only accept further
+            * nested comments. */
            if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
                continue;
 
-           /* When 'O' flag used don't use for "O" command */
+           /* When 'O' flag present and using "O" command skip this one. */
            if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
                continue;
 
+           /* Line contents and string must match.
+            * When string starts with white space, must have some white space
+            * (but the amount does not need to match, there might be a mix of
+            * TABs and spaces). */
+           if (vim_iswhite(string[0]))
+           {
+               if (i == 0 || !vim_iswhite(line[i - 1]))
+                   continue;  /* missing white space */
+               while (vim_iswhite(string[0]))
+                   ++string;
+           }
+           for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+               ;
+           if (string[j] != NUL)
+               continue;  /* string doesn't match */
+
+           /* When 'b' flag used, there must be white space or an
+            * end-of-line after the string in the line. */
+           if (vim_strchr(part_buf, COM_BLANK) != NULL
+                          && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+               continue;
+
+           /* We have found a match, stop searching unless this is a middle
+            * comment. The middle comment can be a substring of the end
+            * comment in which case it's better to return the length of the
+            * end comment and its flags.  Thus we keep searching with middle
+            * and end matches and use an end match if it matches better. */
+           if (vim_strchr(part_buf, COM_MIDDLE) != NULL)
+           {
+               if (middle_match_len == 0)
+               {
+                   middle_match_len = j;
+                   saved_flags = prev_list;
+               }
+               continue;
+           }
+           if (middle_match_len != 0 && j > middle_match_len)
+               /* Use this match instead of the middle match, since it's a
+                * longer thus better match. */
+               middle_match_len = 0;
+
+           if (middle_match_len == 0)
+               i += j;
+           found_one = TRUE;
+           break;
+       }
+
+       if (middle_match_len != 0)
+       {
+           /* Use the previously found middle match after failing to find a
+            * match with an end. */
+           if (!got_com && flags != NULL)
+               *flags = saved_flags;
+           i += middle_match_len;
+           found_one = TRUE;
+       }
+
+       /* No match found, stop scanning. */
+       if (!found_one)
+           break;
+
+       result = i;
+
+       /* Include any trailing white space. */
+       while (vim_iswhite(line[i]))
+           ++i;
+
+       if (include_space)
+           result = i;
+
+       /* If this comment doesn't nest, stop here. */
+       got_com = TRUE;
+       if (vim_strchr(part_buf, COM_NEST) == NULL)
+           break;
+    }
+    return result;
+}
+
+/*
+ * Return the offset at which the last comment in line starts. If there is no
+ * comment in the whole line, -1 is returned.
+ *
+ * When "flags" is not null, it is set to point to the flags describing the
+ * recognized comment leader.
+ */
+    int
+get_last_leader_offset(line, flags)
+    char_u     *line;
+    char_u     **flags;
+{
+    int                result = -1;
+    int                i, j;
+    int                lower_check_bound = 0;
+    char_u     *string;
+    char_u     *com_leader;
+    char_u     *com_flags;
+    char_u     *list;
+    int                found_one;
+    char_u     part_buf[COM_MAX_LEN];  /* buffer for one option part */
+
+    /*
+     * Repeat to match several nested comment strings.
+     */
+    i = (int)STRLEN(line);
+    while (--i >= lower_check_bound)
+    {
+       /*
+        * scan through the 'comments' option for a match
+        */
+       found_one = FALSE;
+       for (list = curbuf->b_p_com; *list; )
+       {
+           char_u *flags_save = list;
+
+           /*
+            * Get one option part into part_buf[].  Advance list to next one.
+            * put string at start of string.
+            */
+           (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+           string = vim_strchr(part_buf, ':');
+           if (string == NULL) /* If everything is fine, this cannot actually
+                                * happen. */
+           {
+               continue;
+           }
+           *string++ = NUL;    /* Isolate flags from string. */
+           com_leader = string;
+
            /*
             * Line contents and string must match.
             * When string starts with white space, must have some white space
@@ -1614,7 +1792,7 @@ get_leader_len(line, flags, backward)
                    ++string;
            }
            for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
-               ;
+               /* do nothing */;
            if (string[j] != NUL)
                continue;
 
@@ -1623,37 +1801,77 @@ get_leader_len(line, flags, backward)
             * end-of-line after the string in the line.
             */
            if (vim_strchr(part_buf, COM_BLANK) != NULL
-                          && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+                   && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+           {
                continue;
+           }
 
            /*
             * We have found a match, stop searching.
             */
-           i += j;
-           got_com = TRUE;
            found_one = TRUE;
+
+           if (flags)
+               *flags = flags_save;
+           com_flags = flags_save;
+
            break;
        }
 
-       /*
-        * No match found, stop scanning.
-        */
-       if (!found_one)
-           break;
+       if (found_one)
+       {
+           char_u  part_buf2[COM_MAX_LEN];     /* buffer for one option part */
+           int     len1, len2, off;
 
-       /*
-        * Include any trailing white space.
-        */
-       while (vim_iswhite(line[i]))
-           ++i;
+           result = i;
+           /*
+            * If this comment nests, continue searching.
+            */
+           if (vim_strchr(part_buf, COM_NEST) != NULL)
+               continue;
 
-       /*
-        * If this comment doesn't nest, stop here.
-        */
-       if (vim_strchr(part_buf, COM_NEST) == NULL)
-           break;
+           lower_check_bound = i;
+
+           /* Let's verify whether the comment leader found is a substring
+            * of other comment leaders. If it is, let's adjust the
+            * lower_check_bound so that we make sure that we have determined
+            * the comment leader correctly.
+            */
+
+           while (vim_iswhite(*com_leader))
+               ++com_leader;
+           len1 = (int)STRLEN(com_leader);
+
+           for (list = curbuf->b_p_com; *list; )
+           {
+               char_u *flags_save = list;
+
+               (void)copy_option_part(&list, part_buf2, COM_MAX_LEN, ",");
+               if (flags_save == com_flags)
+                   continue;
+               string = vim_strchr(part_buf2, ':');
+               ++string;
+               while (vim_iswhite(*string))
+                   ++string;
+               len2 = (int)STRLEN(string);
+               if (len2 == 0)
+                   continue;
+
+               /* Now we have to verify whether string ends with a substring
+                * beginning the com_leader. */
+               for (off = (len2 > i ? i : len2); off > 0 && off + len1 > len2;)
+               {
+                   --off;
+                   if (!STRNCMP(string + off, com_leader, len2 - off))
+                   {
+                       if (i - off < lower_check_bound)
+                           lower_check_bound = i - off;
+                   }
+               }
+           }
+       }
     }
-    return (got_com ? i : 0);
+    return result;
 }
 #endif
 
@@ -1907,7 +2125,7 @@ ins_char(c)
     int                c;
 {
 #if defined(FEAT_MBYTE) || defined(PROTO)
-    char_u     buf[MB_MAXBYTES];
+    char_u     buf[MB_MAXBYTES + 1];
     int                n;
 
     n = (*mb_char2bytes)(c, buf);
@@ -2073,14 +2291,18 @@ ins_char_bytes(buf, charlen)
      */
     if (p_sm && (State & INSERT)
            && msg_silent == 0
-#ifdef FEAT_MBYTE
-           && charlen == 1
-#endif
 #ifdef FEAT_INS_EXPAND
            && !ins_compl_active()
 #endif
        )
-       showmatch(c);
+    {
+#ifdef FEAT_MBYTE
+       if (has_mbyte)
+           showmatch(mb_ptr2char(buf));
+       else
+#endif
+           showmatch(c);
+    }
 
 #ifdef FEAT_RIGHTLEFT
     if (!p_ri || (State & REPLACE_FLAG))
@@ -2919,7 +3141,7 @@ unchanged(buf, ff)
     buf_T      *buf;
     int                ff;     /* also reset 'fileformat' */
 {
-    if (buf->b_changed || (ff && file_ff_differs(buf)))
+    if (buf->b_changed || (ff && file_ff_differs(buf, FALSE)))
     {
        buf->b_changed = 0;
        ml_setflags(buf);
@@ -3069,6 +3291,38 @@ ask_yesno(str, direct)
     return r;
 }
 
+#if defined(FEAT_MOUSE) || defined(PROTO)
+/*
+ * Return TRUE if "c" is a mouse key.
+ */
+    int
+is_mouse_key(c)
+    int c;
+{
+    return c == K_LEFTMOUSE
+       || c == K_LEFTMOUSE_NM
+       || c == K_LEFTDRAG
+       || c == K_LEFTRELEASE
+       || c == K_LEFTRELEASE_NM
+       || c == K_MIDDLEMOUSE
+       || c == K_MIDDLEDRAG
+       || c == K_MIDDLERELEASE
+       || c == K_RIGHTMOUSE
+       || c == K_RIGHTDRAG
+       || c == K_RIGHTRELEASE
+       || c == K_MOUSEDOWN
+       || c == K_MOUSEUP
+       || c == K_MOUSELEFT
+       || c == K_MOUSERIGHT
+       || c == K_X1MOUSE
+       || c == K_X1DRAG
+       || c == K_X1RELEASE
+       || c == K_X2MOUSE
+       || c == K_X2DRAG
+       || c == K_X2RELEASE;
+}
+#endif
+
 /*
  * Get a key stroke directly from the user.
  * Ignores mouse clicks and scrollbar events, except a click for the left
@@ -3080,8 +3334,9 @@ ask_yesno(str, direct)
     int
 get_keystroke()
 {
-#define CBUFLEN 151
-    char_u     buf[CBUFLEN];
+    char_u     *buf = NULL;
+    int                buflen = 150;
+    int                maxlen;
     int                len = 0;
     int                n;
     int                save_mapped_ctrl_c = mapped_ctrl_c;
@@ -3093,12 +3348,29 @@ get_keystroke()
        cursor_on();
        out_flush();
 
+       /* Leave some room for check_termcode() to insert a key code into (max
+        * 5 chars plus NUL).  And fix_input_buffer() can triple the number of
+        * bytes. */
+       maxlen = (buflen - 6 - len) / 3;
+       if (buf == NULL)
+           buf = alloc(buflen);
+       else if (maxlen < 10)
+       {
+           /* Need some more space. This might happen when receiving a long
+            * escape sequence. */
+           buflen += 100;
+           buf = vim_realloc(buf, buflen);
+           maxlen = (buflen - 6 - len) / 3;
+       }
+       if (buf == NULL)
+       {
+           do_outofmem_msg((long_u)buflen);
+           return ESC;  /* panic! */
+       }
+
        /* First time: blocking wait.  Second time: wait up to 100ms for a
-        * terminal code to complete.  Leave some room for check_termcode() to
-        * insert a key code into (max 5 chars plus NUL).  And
-        * fix_input_buffer() can triple the number of bytes. */
-       n = ui_inchar(buf + len, (CBUFLEN - 6 - len) / 3,
-                                                   len == 0 ? -1L : 100L, 0);
+        * terminal code to complete. */
+       n = ui_inchar(buf + len, maxlen, len == 0 ? -1L : 100L, 0);
        if (n > 0)
        {
            /* Replace zero and CSI by a special key code. */
@@ -3110,14 +3382,23 @@ get_keystroke()
            ++waited;       /* keep track of the waiting time */
 
        /* Incomplete termcode and not timed out yet: get more characters */
-       if ((n = check_termcode(1, buf, len)) < 0
+       if ((n = check_termcode(1, buf, buflen, &len)) < 0
               && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
            continue;
 
-       /* found a termcode: adjust length */
-       if (n > 0)
+       if (n == KEYLEN_REMOVED)  /* key code removed */
+       {
+           if (must_redraw != 0 && !need_wait_return && (State & CMDLINE) == 0)
+           {
+               /* Redrawing was postponed, do it now. */
+               update_screen(0);
+               setcursor(); /* put cursor back where it belongs */
+           }
+           continue;
+       }
+       if (n > 0)              /* found a termcode: adjust length */
            len = n;
-       if (len == 0)       /* nothing typed yet */
+       if (len == 0)           /* nothing typed yet */
            continue;
 
        /* Handle modifier and/or special key code. */
@@ -3128,30 +3409,11 @@ get_keystroke()
            if (buf[1] == KS_MODIFIER
                    || n == K_IGNORE
 #ifdef FEAT_MOUSE
-                   || n == K_LEFTMOUSE_NM
-                   || n == K_LEFTDRAG
-                   || n == K_LEFTRELEASE
-                   || n == K_LEFTRELEASE_NM
-                   || n == K_MIDDLEMOUSE
-                   || n == K_MIDDLEDRAG
-                   || n == K_MIDDLERELEASE
-                   || n == K_RIGHTMOUSE
-                   || n == K_RIGHTDRAG
-                   || n == K_RIGHTRELEASE
-                   || n == K_MOUSEDOWN
-                   || n == K_MOUSEUP
-                   || n == K_MOUSELEFT
-                   || n == K_MOUSERIGHT
-                   || n == K_X1MOUSE
-                   || n == K_X1DRAG
-                   || n == K_X1RELEASE
-                   || n == K_X2MOUSE
-                   || n == K_X2DRAG
-                   || n == K_X2RELEASE
-# ifdef FEAT_GUI
+                   || (is_mouse_key(n) && n != K_LEFTMOUSE)
+#endif
+#ifdef FEAT_GUI
                    || n == K_VER_SCROLLBAR
                    || n == K_HOR_SCROLLBAR
-# endif
 #endif
               )
            {
@@ -3169,7 +3431,7 @@ get_keystroke()
        {
            if (MB_BYTE2LEN(n) > len)
                continue;       /* more bytes to get */
-           buf[len >= CBUFLEN ? CBUFLEN - 1 : len] = NUL;
+           buf[len >= buflen ? buflen - 1 : len] = NUL;
            n = (*mb_ptr2char)(buf);
        }
 #endif
@@ -3179,6 +3441,7 @@ get_keystroke()
 #endif
        break;
     }
+    vim_free(buf);
 
     mapped_ctrl_c = save_mapped_ctrl_c;
     return n;
@@ -3323,19 +3586,23 @@ msgmore(n)
        if (pn == 1)
        {
            if (n > 0)
-               STRCPY(msg_buf, _("1 more line"));
+               vim_strncpy(msg_buf, (char_u *)_("1 more line"),
+                                                            MSG_BUF_LEN - 1);
            else
-               STRCPY(msg_buf, _("1 line less"));
+               vim_strncpy(msg_buf, (char_u *)_("1 line less"),
+                                                            MSG_BUF_LEN - 1);
        }
        else
        {
            if (n > 0)
-               sprintf((char *)msg_buf, _("%ld more lines"), pn);
+               vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+                                                    _("%ld more lines"), pn);
            else
-               sprintf((char *)msg_buf, _("%ld fewer lines"), pn);
+               vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+                                                   _("%ld fewer lines"), pn);
        }
        if (got_int)
-           STRCAT(msg_buf, _(" (Interrupted)"));
+           vim_strcat(msg_buf, (char_u *)_(" (Interrupted)"), MSG_BUF_LEN);
        if (msg(msg_buf))
        {
            set_keep_msg(msg_buf, 0);
@@ -3492,7 +3759,7 @@ init_homedir()
     if (enc_utf8 && var != NULL)
     {
        int     len;
-       char_u  *pp;
+       char_u  *pp = NULL;
 
        /* Convert from active codepage to UTF-8.  Other conversions are
         * not done, because they would fail for non-ASCII characters. */
@@ -3540,6 +3807,14 @@ free_homedir()
 {
     vim_free(homedir);
 }
+
+# ifdef FEAT_CMDL_COMPL
+    void
+free_users()
+{
+    ga_clear_strings(&ga_users);
+}
+# endif
 #endif
 
 /*
@@ -3859,11 +4134,13 @@ expand_env_esc(srcp, dst, dstlen, esc, one, startstr)
  * Vim's version of getenv().
  * Special handling of $HOME, $VIM and $VIMRUNTIME.
  * Also does ACP to 'enc' conversion for Win32.
+ * "mustfree" is set to TRUE when returned is allocated, it must be
+ * initialized to FALSE by the caller.
  */
     char_u *
 vim_getenv(name, mustfree)
     char_u     *name;
-    int                *mustfree;      /* set to TRUE when returned is allocated */
+    int                *mustfree;
 {
     char_u     *p;
     char_u     *pend;
@@ -3885,7 +4162,7 @@ vim_getenv(name, mustfree)
        if (enc_utf8)
        {
            int     len;
-           char_u  *pp;
+           char_u  *pp = NULL;
 
            /* Convert from active codepage to UTF-8.  Other conversions are
             * not done, because they would fail for non-ASCII characters. */
@@ -3929,7 +4206,7 @@ vim_getenv(name, mustfree)
            if (enc_utf8)
            {
                int     len;
-               char_u  *pp;
+               char_u  *pp = NULL;
 
                /* Convert from active codepage to UTF-8.  Other conversions
                 * are not done, because they would fail for non-ASCII
@@ -3937,7 +4214,7 @@ vim_getenv(name, mustfree)
                acp_to_enc(p, (int)STRLEN(p), &pp, &len);
                if (pp != NULL)
                {
-                   if (mustfree)
+                   if (*mustfree)
                        vim_free(p);
                    p = pp;
                    *mustfree = TRUE;
@@ -4074,17 +4351,6 @@ vim_getenv(name, mustfree)
        {
            vim_setenv((char_u *)"VIMRUNTIME", p);
            didset_vimruntime = TRUE;
-#ifdef FEAT_GETTEXT
-           {
-               char_u  *buf = concat_str(p, (char_u *)"/lang");
-
-               if (buf != NULL)
-               {
-                   bindtextdomain(VIMPACKAGE, (char *)buf);
-                   vim_free(buf);
-               }
-           }
-#endif
        }
        else
        {
@@ -4162,6 +4428,22 @@ vim_setenv(name, val)
        putenv((char *)envbuf);
     }
 #endif
+#ifdef FEAT_GETTEXT
+    /*
+     * When setting $VIMRUNTIME adjust the directory to find message
+     * translations to $VIMRUNTIME/lang.
+     */
+    if (*val != NUL && STRICMP(name, "VIMRUNTIME") == 0)
+    {
+       char_u  *buf = concat_str(val, (char_u *)"/lang");
+
+       if (buf != NULL)
+       {
+           bindtextdomain(VIMPACKAGE, (char *)buf);
+           vim_free(buf);
+       }
+    }
+#endif
 }
 
 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
@@ -4202,6 +4484,81 @@ get_env_name(xp, idx)
     return name;
 # endif
 }
+
+/*
+ * Find all user names for user completion.
+ * Done only once and then cached.
+ */
+    static void
+init_users()
+{
+    static int lazy_init_done = FALSE;
+
+    if (lazy_init_done)
+       return;
+
+    lazy_init_done = TRUE;
+    ga_init2(&ga_users, sizeof(char_u *), 20);
+
+# if defined(HAVE_GETPWENT) && defined(HAVE_PWD_H)
+    {
+       char_u*         user;
+       struct passwd*  pw;
+
+       setpwent();
+       while ((pw = getpwent()) != NULL)
+           /* pw->pw_name shouldn't be NULL but just in case... */
+           if (pw->pw_name != NULL)
+           {
+               if (ga_grow(&ga_users, 1) == FAIL)
+                   break;
+               user = vim_strsave((char_u*)pw->pw_name);
+               if (user == NULL)
+                   break;
+               ((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user;
+           }
+       endpwent();
+    }
+# endif
+}
+
+/*
+ * Function given to ExpandGeneric() to obtain an user names.
+ */
+    char_u*
+get_users(xp, idx)
+    expand_T   *xp UNUSED;
+    int                idx;
+{
+    init_users();
+    if (idx < ga_users.ga_len)
+       return ((char_u **)ga_users.ga_data)[idx];
+    return NULL;
+}
+
+/*
+ * Check whether name matches a user name. Return:
+ * 0 if name does not match any user name.
+ * 1 if name partially matches the beginning of a user name.
+ * 2 is name fully matches a user name.
+ */
+int match_user(name)
+    char_u* name;
+{
+    int i;
+    int n = (int)STRLEN(name);
+    int result = 0;
+
+    init_users();
+    for (i = 0; i < ga_users.ga_len; i++)
+    {
+       if (STRCMP(((char_u **)ga_users.ga_data)[i], name) == 0)
+           return 2; /* full match */
+       if (STRNCMP(((char_u **)ga_users.ga_data)[i], name, n) == 0)
+           result = 1; /* partial match */
+    }
+    return result;
+}
 #endif
 
 /*
@@ -4220,7 +4577,7 @@ home_replace(buf, src, dst, dstlen, one)
 {
     size_t     dirlen = 0, envlen = 0;
     size_t     len;
-    char_u     *homedir_env;
+    char_u     *homedir_env, *homedir_env_orig;
     char_u     *p;
 
     if (src == NULL)
@@ -4246,13 +4603,31 @@ home_replace(buf, src, dst, dstlen, one)
        dirlen = STRLEN(homedir);
 
 #ifdef VMS
-    homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
+    homedir_env_orig = homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
 #else
-    homedir_env = mch_getenv((char_u *)"HOME");
+    homedir_env_orig = homedir_env = mch_getenv((char_u *)"HOME");
 #endif
-
+    /* Empty is the same as not set. */
     if (homedir_env != NULL && *homedir_env == NUL)
        homedir_env = NULL;
+
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL)
+    if (homedir_env != NULL && vim_strchr(homedir_env, '~') != NULL)
+    {
+       int     usedlen = 0;
+       int     flen;
+       char_u  *fbuf = NULL;
+
+       flen = (int)STRLEN(homedir_env);
+       (void)modify_fname((char_u *)":p", &usedlen,
+                                                 &homedir_env, &fbuf, &flen);
+       flen = (int)STRLEN(homedir_env);
+       if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
+           /* Remove the trailing / that is added to a directory. */
+           homedir_env[flen - 1] = NUL;
+    }
+#endif
+
     if (homedir_env != NULL)
        envlen = STRLEN(homedir_env);
 
@@ -4306,6 +4681,9 @@ home_replace(buf, src, dst, dstlen, one)
     /* if (dstlen == 0) out of space, what to do??? */
 
     *dst = NUL;
+
+    if (homedir_env != homedir_env_orig)
+       vim_free(homedir_env);
 }
 
 /*
@@ -4549,25 +4927,21 @@ get_past_head(path)
 vim_ispathsep(c)
     int c;
 {
-#ifdef RISCOS
-    return (c == '.' || c == ':');
-#else
-# ifdef UNIX
+#ifdef UNIX
     return (c == '/');     /* UNIX has ':' inside file names */
-# else
-#  ifdef BACKSLASH_IN_FILENAME
+#else
+# ifdef BACKSLASH_IN_FILENAME
     return (c == ':' || c == '/' || c == '\\');
-#  else
-#   ifdef VMS
+# else
+#  ifdef VMS
     /* server"user passwd"::device:[full.path.name]fname.extension;version" */
     return (c == ':' || c == '[' || c == ']' || c == '/'
            || c == '<' || c == '>' || c == '"' );
-#   else               /* Amiga */
+#  else
     return (c == ':' || c == '/');
-#   endif /* VMS */
-#  endif
+#  endif /* VMS */
 # endif
-#endif /* RISC OS */
+#endif
 }
 
 #if defined(FEAT_SEARCHPATH) || defined(PROTO)
@@ -4656,16 +5030,21 @@ dir_of_file_exists(fname)
     return retval;
 }
 
-#if (defined(CASE_INSENSITIVE_FILENAME) && defined(BACKSLASH_IN_FILENAME)) \
-       || defined(PROTO)
 /*
- * Versions of fnamecmp() and fnamencmp() that handle '/' and '\' equally.
+ * Versions of fnamecmp() and fnamencmp() that handle '/' and '\' equally
+ * and deal with 'fileignorecase'.
  */
     int
 vim_fnamecmp(x, y)
     char_u     *x, *y;
 {
+#ifdef BACKSLASH_IN_FILENAME
     return vim_fnamencmp(x, y, MAXPATHL);
+#else
+    if (p_fic)
+       return MB_STRICMP(x, y);
+    return STRCMP(x, y);
+#endif
 }
 
     int
@@ -4673,21 +5052,34 @@ vim_fnamencmp(x, y, len)
     char_u     *x, *y;
     size_t     len;
 {
-    while (len > 0 && *x && *y)
-    {
-       if (TOLOWER_LOC(*x) != TOLOWER_LOC(*y)
-               && !(*x == '/' && *y == '\\')
-               && !(*x == '\\' && *y == '/'))
+#ifdef BACKSLASH_IN_FILENAME
+    char_u     *px = x;
+    char_u     *py = y;
+    int                cx = NUL;
+    int                cy = NUL;
+
+    while (len > 0)
+    {
+       cx = PTR2CHAR(px);
+       cy = PTR2CHAR(py);
+       if (cx == NUL || cy == NUL
+           || ((p_fic ? MB_TOLOWER(cx) != MB_TOLOWER(cy) : cx != cy)
+               && !(cx == '/' && cy == '\\')
+               && !(cx == '\\' && cy == '/')))
            break;
-       ++x;
-       ++y;
-       --len;
+       len -= MB_PTR2LEN(px);
+       px += MB_PTR2LEN(px);
+       py += MB_PTR2LEN(py);
     }
     if (len == 0)
        return 0;
-    return (*x - *y);
-}
+    return (cx - cy);
+#else
+    if (p_fic)
+       return MB_STRNICMP(x, y, len);
+    return STRNCMP(x, y, len);
 #endif
+}
 
 /*
  * Concatenate file names fname1 and fname2 into allocated memory.
@@ -4752,8 +5144,8 @@ add_pathsep(p)
     char_u  *
 FullName_save(fname, force)
     char_u     *fname;
-    int                force;      /* force expansion, even when it already looks
-                              like a full path name */
+    int                force;          /* force expansion, even when it already looks
+                                * like a full path name */
 {
     char_u     *buf;
     char_u     *new_fname = NULL;
@@ -4907,22 +5299,25 @@ static int      cin_iscomment __ARGS((char_u *));
 static int     cin_islinecomment __ARGS((char_u *));
 static int     cin_isterminated __ARGS((char_u *, int, int));
 static int     cin_isinit __ARGS((void));
-static int     cin_isfuncdecl __ARGS((char_u **, linenr_T));
+static int     cin_isfuncdecl __ARGS((char_u **, linenr_T, linenr_T, int, int));
 static int     cin_isif __ARGS((char_u *));
 static int     cin_iselse __ARGS((char_u *));
 static int     cin_isdo __ARGS((char_u *));
 static int     cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
+static int     cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset));
 static int     cin_iswhileofdo_end __ARGS((int terminated, int ind_maxparen, int ind_maxcomment));
 static int     cin_isbreak __ARGS((char_u *));
 static int     cin_is_cpp_baseclass __ARGS((colnr_T *col));
 static int     get_baseclass_amount __ARGS((int col, int ind_maxparen, int ind_maxcomment, int ind_cpp_baseclass));
 static int     cin_ends_in __ARGS((char_u *, char_u *, char_u *));
+static int     cin_starts_with __ARGS((char_u *s, char *word));
 static int     cin_skip2pos __ARGS((pos_T *trypos));
 static pos_T   *find_start_brace __ARGS((int));
 static pos_T   *find_match_paren __ARGS((int, int));
 static int     corr_ind_maxparen __ARGS((int ind_maxparen, pos_T *startpos));
 static int     find_last_paren __ARGS((char_u *l, int start, int end));
 static int     find_match __ARGS((int lookfor, linenr_T ourscope, int ind_maxparen, int ind_maxcomment));
+static int     cin_is_cpp_namespace __ARGS((char_u *));
 
 static int     ind_hash_comment = 0;   /* # starts a comment */
 
@@ -4968,7 +5363,7 @@ cin_skipcomment(s)
 }
 
 /*
- * Return TRUE if there there is no code at *s.  White space and comments are
+ * Return TRUE if there is no code at *s.  White space and comments are
  * not considered code.
  */
     static int
@@ -5087,21 +5482,40 @@ cin_islabel(ind_maxcomment)             /* XXX */
 }
 
 /*
- * Recognize structure initialization and enumerations.
- * Q&D-Implementation:
- * check for "=" at end or "[typedef] enum" at beginning of line.
+ * Recognize structure initialization and enumerations:
+ * "[typedef] [static|public|protected|private] enum"
+ * "[typedef] [static|public|protected|private] = {"
  */
     static int
 cin_isinit(void)
 {
     char_u     *s;
+    static char *skip[] = {"static", "public", "protected", "private"};
 
     s = cin_skipcomment(ml_get_curline());
 
-    if (STRNCMP(s, "typedef", 7) == 0 && !vim_isIDc(s[7]))
+    if (cin_starts_with(s, "typedef"))
        s = cin_skipcomment(s + 7);
 
-    if (STRNCMP(s, "enum", 4) == 0 && !vim_isIDc(s[4]))
+    for (;;)
+    {
+       int i, l;
+
+       for (i = 0; i < (int)(sizeof(skip) / sizeof(char *)); ++i)
+       {
+           l = (int)strlen(skip[i]);
+           if (cin_starts_with(s, skip[i]))
+           {
+               s = cin_skipcomment(s + l);
+               l = 0;
+               break;
+           }
+       }
+       if (l != 0)
+           break;
+    }
+
+    if (cin_starts_with(s, "enum"))
        return TRUE;
 
     if (cin_ends_in(s, (char_u *)"=", (char_u *)"{"))
@@ -5119,7 +5533,7 @@ cin_iscase(s, strict)
     int strict; /* Allow relaxed check of case statement for JS */
 {
     s = cin_skipcomment(s);
-    if (STRNCMP(s, "case", 4) == 0 && !vim_isIDc(s[4]))
+    if (cin_starts_with(s, "case"))
     {
        for (s += 4; *s; ++s)
        {
@@ -5185,6 +5599,50 @@ cin_isscopedecl(s)
     return (*(s = cin_skipcomment(s + i)) == ':' && s[1] != ':');
 }
 
+/* Maximum number of lines to search back for a "namespace" line. */
+#define FIND_NAMESPACE_LIM 20
+
+/*
+ * Recognize a "namespace" scope declaration.
+ */
+    static int
+cin_is_cpp_namespace(s)
+    char_u     *s;
+{
+    char_u     *p;
+    int                has_name = FALSE;
+
+    s = cin_skipcomment(s);
+    if (STRNCMP(s, "namespace", 9) == 0 && (s[9] == NUL || !vim_iswordc(s[9])))
+    {
+       p = cin_skipcomment(skipwhite(s + 9));
+       while (*p != NUL)
+       {
+           if (vim_iswhite(*p))
+           {
+               has_name = TRUE; /* found end of a name */
+               p = cin_skipcomment(skipwhite(p));
+           }
+           else if (*p == '{')
+           {
+               break;
+           }
+           else if (vim_iswordc(*p))
+           {
+               if (has_name)
+                   return FALSE; /* word character after skipping past name */
+               ++p;
+           }
+           else
+           {
+               return FALSE;
+           }
+       }
+       return TRUE;
+    }
+    return FALSE;
+}
+
 /*
  * Return a pointer to the first non-empty non-comment character after a ':'.
  * Return NULL if not found.
@@ -5383,8 +5841,7 @@ cin_get_equal_amount(lnum)
 cin_ispreproc(s)
     char_u *s;
 {
-    s = skipwhite(s);
-    if (*s == '#')
+    if (*skipwhite(s) == '#')
        return TRUE;
     return FALSE;
 }
@@ -5444,8 +5901,11 @@ cin_islinecomment(p)
 }
 
 /*
- * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
+ * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
+ * '}'.
  * Don't consider "} else" a terminated line.
+ * If a line begins with an "else", only consider it terminated if no unmatched
+ * opening braces follow (handle "else { foo();" correctly).
  * Return the character terminating the line (ending char's have precedence if
  * both apply in order to determine initializations).
  */
@@ -5455,21 +5915,35 @@ cin_isterminated(s, incl_open, incl_comma)
     int                incl_open;      /* include '{' at the end as terminator */
     int                incl_comma;     /* recognize a trailing comma */
 {
-    char_u found_start = 0;
+    char_u     found_start = 0;
+    unsigned   n_open = 0;
+    int                is_else = FALSE;
 
     s = cin_skipcomment(s);
 
     if (*s == '{' || (*s == '}' && !cin_iselse(s)))
        found_start = *s;
 
+    if (!found_start)
+       is_else = cin_iselse(s);
+
     while (*s)
     {
        /* skip over comments, "" strings and 'c'haracters */
        s = skip_string(cin_skipcomment(s));
-       if ((*s == ';' || (incl_open && *s == '{') || *s == '}'
-                                                || (incl_comma && *s == ','))
+       if (*s == '}' && n_open > 0)
+           --n_open;
+       if ((!is_else || n_open == 0)
+               && (*s == ';' || *s == '}' || (incl_comma && *s == ','))
                && cin_nocode(s + 1))
            return *s;
+       else if (*s == '{')
+       {
+           if (incl_open && cin_nocode(s + 1))
+               return *s;
+           else
+               ++n_open;
+       }
 
        if (*s)
            s++;
@@ -5485,21 +5959,41 @@ cin_isterminated(s, incl_open, incl_comma)
  * "sp" points to a string with the line.  When looking at other lines it must
  * be restored to the line.  When it's NULL fetch lines here.
  * "lnum" is where we start looking.
+ * "min_lnum" is the line before which we will not be looking.
  */
     static int
-cin_isfuncdecl(sp, first_lnum)
+cin_isfuncdecl(sp, first_lnum, min_lnum, ind_maxparen, ind_maxcomment)
     char_u     **sp;
     linenr_T   first_lnum;
+    linenr_T   min_lnum;
+    int                ind_maxparen;
+    int                ind_maxcomment;
 {
     char_u     *s;
     linenr_T   lnum = first_lnum;
     int                retval = FALSE;
+    pos_T      *trypos;
+    int                just_started = TRUE;
 
     if (sp == NULL)
        s = ml_get(lnum);
     else
        s = *sp;
 
+    if (find_last_paren(s, '(', ')')
+       && (trypos = find_match_paren(ind_maxparen, ind_maxcomment)) != NULL)
+    {
+       lnum = trypos->lnum;
+       if (lnum < min_lnum)
+           return FALSE;
+
+       s = ml_get(lnum);
+    }
+
+    /* Ignore line starting with #. */
+    if (cin_ispreproc(s))
+       return FALSE;
+
     while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"')
     {
        if (cin_iscomment(s))   /* ignore comments */
@@ -5525,18 +6019,38 @@ cin_isfuncdecl(sp, first_lnum)
                retval = TRUE;
            goto done;
        }
-       if (*s == ',' && cin_nocode(s + 1))
+       if ((*s == ',' && cin_nocode(s + 1)) || s[1] == NUL || cin_nocode(s))
        {
-           /* ',' at the end: continue looking in the next line */
+           int comma = (*s == ',');
+
+           /* ',' at the end: continue looking in the next line.
+            * At the end: check for ',' in the next line, for this style:
+            * func(arg1
+            *       , arg2) */
+           for (;;)
+           {
+               if (lnum >= curbuf->b_ml.ml_line_count)
+                   break;
+               s = ml_get(++lnum);
+               if (!cin_ispreproc(s))
+                   break;
+           }
            if (lnum >= curbuf->b_ml.ml_line_count)
                break;
-
-           s = ml_get(++lnum);
+           /* Require a comma at end of the line or a comma or ')' at the
+            * start of next line. */
+           s = skipwhite(s);
+           if (!just_started && (!comma && *s != ',' && *s != ')'))
+               break;
+           just_started = FALSE;
        }
        else if (cin_iscomment(s))      /* ignore comments */
            s = cin_skipcomment(s);
        else
+       {
            ++s;
+           just_started = FALSE;
+       }
     }
 
 done:
@@ -5587,7 +6101,7 @@ cin_iswhileofdo(p, lnum, ind_maxparen)        /* XXX */
     p = cin_skipcomment(p);
     if (*p == '}')             /* accept "} while (cond);" */
        p = cin_skipcomment(p + 1);
-    if (STRNCMP(p, "while", 5) == 0 && !vim_isIDc(p[5]))
+    if (cin_starts_with(p, "while"))
     {
        cursor_save = curwin->w_cursor;
        curwin->w_cursor.lnum = lnum;
@@ -5607,6 +6121,52 @@ cin_iswhileofdo(p, lnum, ind_maxparen)       /* XXX */
 }
 
 /*
+ * Check whether in "p" there is an "if", "for" or "while" before "*poffset".
+ * Return 0 if there is none.
+ * Otherwise return !0 and update "*poffset" to point to the place where the
+ * string was found.
+ */
+    static int
+cin_is_if_for_while_before_offset(line, poffset)
+    char_u *line;
+    int    *poffset;
+{
+    int offset = *poffset;
+
+    if (offset-- < 2)
+       return 0;
+    while (offset > 2 && vim_iswhite(line[offset]))
+       --offset;
+
+    offset -= 1;
+    if (!STRNCMP(line + offset, "if", 2))
+       goto probablyFound;
+
+    if (offset >= 1)
+    {
+       offset -= 1;
+       if (!STRNCMP(line + offset, "for", 3))
+           goto probablyFound;
+
+       if (offset >= 2)
+       {
+           offset -= 2;
+           if (!STRNCMP(line + offset, "while", 5))
+               goto probablyFound;
+       }
+    }
+    return 0;
+
+probablyFound:
+    if (!offset || !vim_isIDc(line[offset - 1]))
+    {
+       *poffset = offset;
+       return 1;
+    }
+    return 0;
+}
+
+/*
  * Return TRUE if we are at the end of a do-while.
  *    do
  *       nothing;
@@ -5648,7 +6208,7 @@ cin_iswhileofdo_end(terminated, ind_maxparen, ind_maxcomment)
                    s = cin_skipcomment(ml_get(trypos->lnum));
                    if (*s == '}')              /* accept "} while (cond);" */
                        s = cin_skipcomment(s + 1);
-                   if (STRNCMP(s, "while", 5) == 0 && !vim_isIDc(s[5]))
+                   if (cin_starts_with(s, "while"))
                    {
                        curwin->w_cursor.lnum = trypos->lnum;
                        return TRUE;
@@ -5754,7 +6314,9 @@ cin_is_cpp_baseclass(col)
                continue;
        }
 
-       if (s[0] == ':')
+       if (s[0] == '"')
+           s = skip_string(s) + 1;
+       else if (s[0] == ':')
        {
            if (s[1] == ':')
            {
@@ -5896,6 +6458,19 @@ cin_ends_in(s, find, ignore)
 }
 
 /*
+ * Return TRUE when "s" starts with "word" and then a non-ID character.
+ */
+    static int
+cin_starts_with(s, word)
+    char_u *s;
+    char *word;
+{
+    int l = (int)STRLEN(word);
+
+    return (STRNCMP(s, word, l) == 0 && !vim_isIDc(s[l]));
+}
+
+/*
  * Skip strings, chars and comments until at or past "trypos".
  * Return the column found.
  */
@@ -5958,7 +6533,7 @@ find_start_brace(ind_maxcomment)      /* XXX */
 
 /*
  * Find the matching '(', failing if it is in a comment.
- * Return NULL of no match found.
+ * Return NULL if no match found.
  */
     static pos_T *
 find_match_paren(ind_maxparen, ind_maxcomment)     /* XXX */
@@ -6008,7 +6583,7 @@ corr_ind_maxparen(ind_maxparen, startpos)
 
 /*
  * Set w_cursor.col to the column number of the last unmatched ')' or '{' in
- * line "l".
+ * line "l".  "l" must point to the start of the line.
  */
     static int
 find_last_paren(l, start, end)
@@ -6021,7 +6596,7 @@ find_last_paren(l, start, end)
 
     curwin->w_cursor.col = 0;              /* default is start of line */
 
-    for (i = 0; l[i]; i++)
+    for (i = 0; l[i] != NUL; i++)
     {
        i = (int)(cin_skipcomment(l + i) - l); /* ignore parens in comments */
        i = (int)(skip_string(l + i) - l);    /* ignore parens in quotes */
@@ -6044,11 +6619,14 @@ find_last_paren(l, start, end)
     int
 get_c_indent()
 {
+    int sw = (int)get_sw_value();
+
     /*
      * spaces from a block's opening brace the prevailing indent for that
      * block should be
      */
-    int ind_level = curbuf->b_p_sw;
+
+    int ind_level = sw;
 
     /*
      * spaces from the edge of the line an open brace that's at the end of a
@@ -6095,12 +6673,12 @@ get_c_indent()
     /*
      * spaces from the switch() indent a "case xx" label should be located
      */
-    int ind_case = curbuf->b_p_sw;
+    int ind_case = sw;
 
     /*
      * spaces from the "case xx:" code after a switch() should be located
      */
-    int ind_case_code = curbuf->b_p_sw;
+    int ind_case_code = sw;
 
     /*
      * lineup break at end of case in switch() with case label
@@ -6111,45 +6689,45 @@ get_c_indent()
      * spaces from the class declaration indent a scope declaration label
      * should be located
      */
-    int ind_scopedecl = curbuf->b_p_sw;
+    int ind_scopedecl = sw;
 
     /*
      * spaces from the scope declaration label code should be located
      */
-    int ind_scopedecl_code = curbuf->b_p_sw;
+    int ind_scopedecl_code = sw;
 
     /*
      * amount K&R-style parameters should be indented
      */
-    int ind_param = curbuf->b_p_sw;
+    int ind_param = sw;
 
     /*
      * amount a function type spec should be indented
      */
-    int ind_func_type = curbuf->b_p_sw;
+    int ind_func_type = sw;
 
     /*
      * amount a cpp base class declaration or constructor initialization
      * should be indented
      */
-    int ind_cpp_baseclass = curbuf->b_p_sw;
+    int ind_cpp_baseclass = sw;
 
     /*
      * additional spaces beyond the prevailing indent a continuation line
      * should be located
      */
-    int ind_continuation = curbuf->b_p_sw;
+    int ind_continuation = sw;
 
     /*
      * spaces from the indent of the line with an unclosed parentheses
      */
-    int ind_unclosed = curbuf->b_p_sw * 2;
+    int ind_unclosed = sw * 2;
 
     /*
      * spaces from the indent of the line with an unclosed parentheses, which
      * itself is also unclosed
      */
-    int ind_unclosed2 = curbuf->b_p_sw;
+    int ind_unclosed2 = sw;
 
     /*
      * suppress ignoring spaces from the indent of a line starting with an
@@ -6222,6 +6800,17 @@ get_c_indent()
      */
     int ind_keep_case_label = 0;
 
+    /*
+     * handle C++ namespace
+     */
+    int ind_cpp_namespace = 0;
+
+    /*
+     * handle continuation lines containing conditions of if(), for() and
+     * while()
+     */
+    int ind_if_for_while = 0;
+
     pos_T      cur_curpos;
     int                amount;
     int                scope_amount;
@@ -6257,19 +6846,23 @@ get_c_indent()
     int                whilelevel;
     linenr_T   lnum;
     char_u     *options;
+    char_u     *digits;
     int                fraction = 0;       /* init for GCC */
     int                divider;
     int                n;
     int                iscase;
     int                lookfor_break;
+    int                lookfor_cpp_namespace = FALSE;
     int                cont_amount = 0;    /* amount for continuation line */
     int                original_line_islabel;
+    int                added_to_amount = 0;
 
     for (options = curbuf->b_p_cino; *options; )
     {
        l = options++;
        if (*options == '-')
            ++options;
+       digits = options;           /* remember where the digits start */
        n = getdigits(&options);
        divider = 0;
        if (*options == '.')        /* ".5s" means a fraction */
@@ -6286,13 +6879,13 @@ get_c_indent()
        }
        if (*options == 's')        /* "2s" means two times 'shiftwidth' */
        {
-           if (n == 0 && fraction == 0)
-               n = curbuf->b_p_sw;     /* just "s" is one 'shiftwidth' */
+           if (options == digits)
+               n = sw; /* just "s" is one 'shiftwidth' */
            else
            {
-               n *= curbuf->b_p_sw;
+               n *= sw;
                if (divider)
-                   n += (curbuf->b_p_sw * fraction + divider / 2) / divider;
+                   n += (sw * fraction + divider / 2) / divider;
            }
            ++options;
        }
@@ -6335,6 +6928,8 @@ get_c_indent()
            case 'J': ind_js = n; break;
            case 'l': ind_keep_case_label = n; break;
            case '#': ind_hash_comment = n; break;
+           case 'N': ind_cpp_namespace = n; break;
+           case 'k': ind_if_for_while = n; break;
        }
        if (*options == ',')
            ++options;
@@ -6424,6 +7019,8 @@ get_c_indent()
        /* find how indented the line beginning the comment is */
        getvcol(curwin, trypos, &col, NULL, NULL);
        amount = col;
+       *lead_start = NUL;
+       *lead_middle = NUL;
 
        p = curbuf->b_p_com;
        while (*p != NUL)
@@ -6636,6 +7233,33 @@ get_c_indent()
        if (amount == -1)
        {
            int     ignore_paren_col = 0;
+           int     is_if_for_while = 0;
+
+           if (ind_if_for_while)
+           {
+               /* Look for the outermost opening parenthesis on this line
+                * and check whether it belongs to an "if", "for" or "while". */
+
+               pos_T       cursor_save = curwin->w_cursor;
+               pos_T       outermost;
+               char_u      *line;
+
+               trypos = &our_paren_pos;
+               do {
+                   outermost = *trypos;
+                   curwin->w_cursor.lnum = outermost.lnum;
+                   curwin->w_cursor.col = outermost.col;
+
+                   trypos = find_match_paren(ind_maxparen, ind_maxcomment);
+               } while (trypos && trypos->lnum == outermost.lnum);
+
+               curwin->w_cursor = cursor_save;
+
+               line = ml_get(outermost.lnum);
+
+               is_if_for_while =
+                   cin_is_if_for_while_before_offset(line, &outermost.col);
+           }
 
            amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
            look = skipwhite(look);
@@ -6660,7 +7284,7 @@ get_c_indent()
                curwin->w_cursor.lnum = save_lnum;
                look = ml_get(our_paren_pos.lnum) + look_col;
            }
-           if (theline[0] == ')' || ind_unclosed == 0
+           if (theline[0] == ')' || (ind_unclosed == 0 && is_if_for_while == 0)
                    || (!ind_unclosed_noignore && *look == '('
                                                    && ignore_paren_col == 0))
            {
@@ -6731,7 +7355,8 @@ get_c_indent()
            {
                /* Line up with the start of the matching paren line. */
            }
-           else if (ind_unclosed == 0 || (!ind_unclosed_noignore
+           else if ((ind_unclosed == 0 && is_if_for_while == 0)
+                    || (!ind_unclosed_noignore
                                    && *look == '(' && ignore_paren_col == 0))
            {
                if (cur_amount != MAXCOL)
@@ -6764,11 +7389,15 @@ get_c_indent()
                {
                    curwin->w_cursor.lnum = our_paren_pos.lnum;
                    curwin->w_cursor.col = col;
-                   if ((trypos = find_match_paren(ind_maxparen,
-                                                    ind_maxcomment)) != NULL)
+                   if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
                        amount += ind_unclosed2;
                    else
-                       amount += ind_unclosed;
+                   {
+                       if (is_if_for_while)
+                           amount += ind_if_for_while;
+                       else
+                           amount += ind_unclosed;
+                   }
                }
                /*
                 * For a line starting with ')' use the minimum of the two
@@ -6838,7 +7467,7 @@ get_c_indent()
             *                  ldfd) {
             *              }
             */
-           if ((ind_keep_case_label
+           if (ind_js || (ind_keep_case_label
                           && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
                amount = get_indent();
            else
@@ -6901,11 +7530,24 @@ get_c_indent()
            if (start_brace == BRACE_IN_COL0)       /* '{' is in column 0 */
            {
                amount = ind_open_left_imag;
+               lookfor_cpp_namespace = TRUE;
+           }
+           else if (start_brace == BRACE_AT_START &&
+                   lookfor_cpp_namespace)        /* '{' is at start */
+           {
+
+               lookfor_cpp_namespace = TRUE;
            }
            else
            {
                if (start_brace == BRACE_AT_END)    /* '{' is at end of line */
+               {
                    amount += ind_open_imag;
+
+                   l = skipwhite(ml_get_curline());
+                   if (cin_is_cpp_namespace(l))
+                       amount += ind_cpp_namespace;
+               }
                else
                {
                    /* Compensate for adding ind_open_extra later. */
@@ -7014,7 +7656,8 @@ get_c_indent()
                         * (it's a variable declaration).
                         */
                        if (start_brace != BRACE_IN_COL0
-                               || !cin_isfuncdecl(&l, curwin->w_cursor.lnum))
+                               || !cin_isfuncdecl(&l, curwin->w_cursor.lnum,
+                                            0, ind_maxparen, ind_maxcomment))
                        {
                            /* if the line is terminated with another ','
                             * it is a continued variable initialization.
@@ -7076,12 +7719,59 @@ get_c_indent()
                        else
                            amount += ind_continuation;
                    }
-                   else if (lookfor != LOOKFOR_TERM
-                                         && lookfor != LOOKFOR_CPP_BASECLASS)
+                   else
                    {
-                       amount = scope_amount;
-                       if (theline[0] == '{')
-                           amount += ind_open_extra;
+                       if (lookfor != LOOKFOR_TERM
+                                         && lookfor != LOOKFOR_CPP_BASECLASS)
+                       {
+                           amount = scope_amount;
+                           if (theline[0] == '{')
+                           {
+                               amount += ind_open_extra;
+                               added_to_amount = ind_open_extra;
+                           }
+                       }
+
+                       if (lookfor_cpp_namespace)
+                       {
+                           /*
+                            * Looking for C++ namespace, need to look further
+                            * back.
+                            */
+                           if (curwin->w_cursor.lnum == ourscope)
+                               continue;
+
+                           if (curwin->w_cursor.lnum == 0
+                                   || curwin->w_cursor.lnum
+                                             < ourscope - FIND_NAMESPACE_LIM)
+                               break;
+
+                           l = ml_get_curline();
+
+                           /* If we're in a comment now, skip to the start of
+                            * the comment. */
+                           trypos = find_start_comment(ind_maxcomment);
+                           if (trypos != NULL)
+                           {
+                               curwin->w_cursor.lnum = trypos->lnum + 1;
+                               curwin->w_cursor.col = 0;
+                               continue;
+                           }
+
+                           /* Skip preprocessor directives and blank lines. */
+                           if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+                               continue;
+
+                           /* Finally the actual check for "namespace". */
+                           if (cin_is_cpp_namespace(l))
+                           {
+                               amount += ind_cpp_namespace - added_to_amount;
+                               break;
+                           }
+
+                           if (cin_nocode(l))
+                               continue;
+                       }
                    }
                    break;
                }
@@ -7466,17 +8156,25 @@ get_c_indent()
 
                        /*
                         * When searching for a terminated line, don't use the
-                        * one between the "if" and the "else".
+                        * one between the "if" and the matching "else".
                         * Need to use the scope of this "else".  XXX
                         * If whilelevel != 0 continue looking for a "do {".
                         */
-                       if (cin_iselse(l)
-                               && whilelevel == 0
-                               && ((trypos = find_start_brace(ind_maxcomment))
-                                                                   == NULL
+                       if (cin_iselse(l) && whilelevel == 0)
+                       {
+                           /* If we're looking at "} else", let's make sure we
+                            * find the opening brace of the enclosing scope,
+                            * not the one from "if () {". */
+                           if (*l == '}')
+                               curwin->w_cursor.col =
+                                         (colnr_T)(l - ml_get_curline()) + 1;
+
+                           if ((trypos = find_start_brace(ind_maxcomment))
+                                                                      == NULL
                                    || find_match(LOOKFOR_IF, trypos->lnum,
-                                       ind_maxparen, ind_maxcomment) == FAIL))
-                           break;
+                                       ind_maxparen, ind_maxcomment) == FAIL)
+                               break;
+                       }
                    }
 
                    /*
@@ -7757,8 +8455,8 @@ term_again:
                         * If we're at the end of a block, skip to the start of
                         * that block.
                         */
-                       curwin->w_cursor.col = 0;
-                       if (*cin_skipcomment(l) == '}'
+                       l = ml_get_curline();
+                       if (find_last_paren(l, '{', '}')
                                && (trypos = find_start_brace(ind_maxcomment))
                                                            != NULL) /* XXX */
                        {
@@ -7820,7 +8518,9 @@ term_again:
                && vim_strchr(theline, '}') == NULL
                && !cin_ends_in(theline, (char_u *)":", NULL)
                && !cin_ends_in(theline, (char_u *)",", NULL)
-               && cin_isfuncdecl(NULL, cur_curpos.lnum + 1)
+               && cin_isfuncdecl(NULL, cur_curpos.lnum + 1,
+                                 cur_curpos.lnum + 1,
+                                 ind_maxparen, ind_maxcomment)
                && !cin_isterminated(theline, FALSE, TRUE))
        {
            amount = ind_func_type;
@@ -7926,7 +8626,8 @@ term_again:
                 * If the line looks like a function declaration, and we're
                 * not in a comment, put it the left margin.
                 */
-               if (cin_isfuncdecl(NULL, cur_curpos.lnum))  /* XXX */
+               if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0,
+                                  ind_maxparen, ind_maxcomment))  /* XXX */
                    break;
                l = ml_get_curline();
 
@@ -7947,11 +8648,35 @@ term_again:
                    break;
 
                /*
+                * Find a line only has a semicolon that belongs to a previous
+                * line ending in '}', e.g. before an #endif.  Don't increase
+                * indent then.
+                */
+               if (*(look = skipwhite(l)) == ';' && cin_nocode(look + 1))
+               {
+                   pos_T curpos_save = curwin->w_cursor;
+
+                   while (curwin->w_cursor.lnum > 1)
+                   {
+                       look = ml_get(--curwin->w_cursor.lnum);
+                       if (!(cin_nocode(look) || cin_ispreproc_cont(
+                                             &look, &curwin->w_cursor.lnum)))
+                           break;
+                   }
+                   if (curwin->w_cursor.lnum > 0
+                                   && cin_ends_in(look, (char_u *)"}", NULL))
+                       break;
+
+                   curwin->w_cursor = curpos_save;
+               }
+
+               /*
                 * If the PREVIOUS line is a function declaration, the current
                 * line (and the ones that follow) needs to be indented as
                 * parameters.
                 */
-               if (cin_isfuncdecl(&l, curwin->w_cursor.lnum))
+               if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0,
+                                  ind_maxparen, ind_maxcomment))
                {
                    amount = ind_param;
                    break;
@@ -8149,12 +8874,18 @@ find_match(lookfor, ourscope, ind_maxparen, ind_maxcomment)
 get_expr_indent()
 {
     int                indent;
-    pos_T      pos;
+    pos_T      save_pos;
+    colnr_T    save_curswant;
+    int                save_set_curswant;
     int                save_State;
     int                use_sandbox = was_set_insecurely((char_u *)"indentexpr",
                                                                   OPT_LOCAL);
 
-    pos = curwin->w_cursor;
+    /* Save and restore cursor position and curswant, in case it was changed
+     * via :normal commands */
+    save_pos = curwin->w_cursor;
+    save_curswant = curwin->w_curswant;
+    save_set_curswant = curwin->w_set_curswant;
     set_vim_var_nr(VV_LNUM, curwin->w_cursor.lnum);
     if (use_sandbox)
        ++sandbox;
@@ -8169,7 +8900,9 @@ get_expr_indent()
      * command. */
     save_State = State;
     State = INSERT;
-    curwin->w_cursor = pos;
+    curwin->w_cursor = save_pos;
+    curwin->w_curswant = save_curswant;
+    curwin->w_set_curswant = save_set_curswant;
     check_cursor();
     State = save_State;
 
@@ -8856,11 +9589,15 @@ dos_expandpath(
     }
 
     /* compile the regexp into a program */
+    if (flags & (EW_NOERROR | EW_NOTWILD))
+       ++emsg_silent;
     regmatch.rm_ic = TRUE;             /* Always ignore case */
     regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+    if (flags & (EW_NOERROR | EW_NOTWILD))
+       --emsg_silent;
     vim_free(pat);
 
-    if (regmatch.regprog == NULL)
+    if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
     {
        vim_free(buf);
        return 0;
@@ -8928,7 +9665,10 @@ dos_expandpath(
         * all entries found with "matchname". */
        if ((p[0] != '.' || starts_with_dot)
                && (matchname == NULL
-                   || vim_regexec(&regmatch, p, (colnr_T)0)))
+                 || (regmatch.regprog != NULL
+                                    && vim_regexec(&regmatch, p, (colnr_T)0))
+                 || ((flags & EW_NOTWILD)
+                    && fnamencmp(path + (s - buf), p, e - s) == 0)))
        {
 #ifdef WIN3264
            STRCPY(s, p);
@@ -9015,7 +9755,7 @@ dos_expandpath(
 # endif
 #endif
     vim_free(buf);
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
     vim_free(matchname);
 
     matches = gap->ga_len - start_len;
@@ -9096,6 +9836,7 @@ unix_expandpath(gap, path, wildoff, flags, didstar)
 
     /*
      * Find the first part in the path name that contains a wildcard.
+     * When EW_ICASE is set every letter is considered to be a wildcard.
      * Copy it into "buf", including the preceding characters.
      */
     p = buf;
@@ -9115,7 +9856,9 @@ unix_expandpath(gap, path, wildoff, flags, didstar)
            s = p + 1;
        }
        else if (path_end >= path + wildoff
-                        && vim_strchr((char_u *)"*?[{~$", *path_end) != NULL)
+                        && (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
+                            || (!p_fic && (flags & EW_ICASE)
+                                            && isalpha(PTR2CHAR(path_end)))))
            e = p;
 #ifdef FEAT_MBYTE
        if (has_mbyte)
@@ -9132,7 +9875,7 @@ unix_expandpath(gap, path, wildoff, flags, didstar)
     e = p;
     *e = NUL;
 
-    /* now we have one wildcard component between "s" and "e" */
+    /* Now we have one wildcard component between "s" and "e". */
     /* Remove backslashes between "wildoff" and the start of the wildcard
      * component. */
     for (p = buf + wildoff; p < s; ++p)
@@ -9158,15 +9901,18 @@ unix_expandpath(gap, path, wildoff, flags, didstar)
     }
 
     /* compile the regexp into a program */
-#ifdef CASE_INSENSITIVE_FILENAME
-    regmatch.rm_ic = TRUE;             /* Behave like Terminal.app */
-#else
-    regmatch.rm_ic = FALSE;            /* Don't ever ignore case */
-#endif
+    if (flags & EW_ICASE)
+       regmatch.rm_ic = TRUE;          /* 'wildignorecase' set */
+    else
+       regmatch.rm_ic = p_fic; /* ignore case when 'fileignorecase' is set */
+    if (flags & (EW_NOERROR | EW_NOTWILD))
+       ++emsg_silent;
     regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+    if (flags & (EW_NOERROR | EW_NOTWILD))
+       --emsg_silent;
     vim_free(pat);
 
-    if (regmatch.regprog == NULL)
+    if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
     {
        vim_free(buf);
        return 0;
@@ -9196,7 +9942,10 @@ unix_expandpath(gap, path, wildoff, flags, didstar)
            if (dp == NULL)
                break;
            if ((dp->d_name[0] != '.' || starts_with_dot)
-                   && vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0))
+                && ((regmatch.regprog != NULL && vim_regexec(&regmatch,
+                                            (char_u *)dp->d_name, (colnr_T)0))
+                  || ((flags & EW_NOTWILD)
+                    && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
            {
                STRCPY(s, dp->d_name);
                len = STRLEN(buf);
@@ -9248,7 +9997,7 @@ unix_expandpath(gap, path, wildoff, flags, didstar)
     }
 
     vim_free(buf);
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 
     matches = gap->ga_len - start_len;
     if (matches > 0)
@@ -9317,7 +10066,8 @@ is_unique(maybe_unique, gap, i)
            continue;  /* it's different when it's shorter */
 
        rival = other_paths[j] + other_path_len - candidate_len;
-       if (fnamecmp(maybe_unique, rival) == 0)
+       if (fnamecmp(maybe_unique, rival) == 0
+               && (rival == other_paths[j] || vim_ispathsep(*(rival - 1))))
            return FALSE;  /* match */
     }
 
@@ -9389,6 +10139,15 @@ expand_path_option(curdir, gap)
 
        if (ga_grow(gap, 1) == FAIL)
            break;
+
+# if defined(MSWIN) || defined(MSDOS)
+       /* Avoid the path ending in a backslash, it fails when a comma is
+        * appended. */
+       len = (int)STRLEN(buf);
+       if (buf[len - 1] == '\\')
+           buf[len - 1] = '/';
+# endif
+
        p = vim_strsave(buf);
        if (p == NULL)
            break;
@@ -9603,7 +10362,7 @@ theend:
        vim_free(in_curdir);
     }
     ga_clear_strings(&path_ga);
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 
     if (sort_again)
        remove_duplicates(gap);
@@ -9642,7 +10401,7 @@ expand_in_path(gap, pattern, flags)
     if (paths == NULL)
        return 0;
 
-    files = globpath(paths, pattern, 0);
+    files = globpath(paths, pattern, (flags & EW_ICASE) ? WILD_ICASE : 0);
     vim_free(paths);
     if (files == NULL)
        return 0;
@@ -9698,6 +10457,54 @@ remove_duplicates(gap)
 }
 #endif
 
+static int has_env_var __ARGS((char_u *p));
+
+/*
+ * Return TRUE if "p" contains what looks like an environment variable.
+ * Allowing for escaping.
+ */
+    static int
+has_env_var(p)
+    char_u *p;
+{
+    for ( ; *p; mb_ptr_adv(p))
+    {
+       if (*p == '\\' && p[1] != NUL)
+           ++p;
+       else if (vim_strchr((char_u *)
+#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+                                   "$%"
+#else
+                                   "$"
+#endif
+                                       , *p) != NULL)
+           return TRUE;
+    }
+    return FALSE;
+}
+
+#ifdef SPECIAL_WILDCHAR
+static int has_special_wildchar __ARGS((char_u *p));
+
+/*
+ * Return TRUE if "p" contains a special wildcard character.
+ * Allowing for escaping.
+ */
+    static int
+has_special_wildchar(p)
+    char_u  *p;
+{
+    for ( ; *p; mb_ptr_adv(p))
+    {
+       if (*p == '\\' && p[1] != NUL)
+           ++p;
+       else if (vim_strchr((char_u *)SPECIAL_WILDCHAR, *p) != NULL)
+           return TRUE;
+    }
+    return FALSE;
+}
+#endif
+
 /*
  * Generic wildcard expansion code.
  *
@@ -9748,7 +10555,7 @@ gen_expand_wildcards(num_pat, pat, num_file, file, flags)
      */
     for (i = 0; i < num_pat; i++)
     {
-       if (vim_strpbrk(pat[i], (char_u *)SPECIAL_WILDCHAR) != NULL
+       if (has_special_wildchar(pat[i])
 # ifdef VIM_BACKTICK
                && !(vim_backtick(pat[i]) && pat[i][1] == '=')
 # endif
@@ -9778,7 +10585,7 @@ gen_expand_wildcards(num_pat, pat, num_file, file, flags)
            /*
             * First expand environment variables, "~/" and "~user/".
             */
-           if (vim_strchr(p, '$') != NULL || *p == '~')
+           if (has_env_var(p) || *p == '~')
            {
                p = expand_env_save_opt(p, TRUE);
                if (p == NULL)
@@ -9789,7 +10596,7 @@ gen_expand_wildcards(num_pat, pat, num_file, file, flags)
                 * variable, use the shell to do that.  Discard previously
                 * found file names and start all over again.
                 */
-               else if (vim_strchr(p, '$') != NULL || *p == '~')
+               else if (has_env_var(p) || *p == '~')
                {
                    vim_free(p);
                    ga_clear_strings(&ga);
@@ -10080,7 +10887,14 @@ get_cmd_output(cmd, infile, flags)
        buffer = NULL;
     }
     else
+    {
+       /* Change NUL into SOH, otherwise the string is truncated. */
+       for (i = 0; i < len; ++i)
+           if (buffer[i] == NUL)
+               buffer[i] = 1;
+
        buffer[len] = NUL;      /* make sure the buffer is terminated */
+    }
 
 done:
     vim_free(tempname);
index 2db4b66..504cf0a 100644 (file)
@@ -200,7 +200,6 @@ coladvance2(pos, addspaces, finetune, wcol)
        }
 #endif
 
-       idx = -1;
        ptr = line;
        while (col <= wcol && *ptr != NUL)
        {
@@ -334,7 +333,7 @@ coladvance2(pos, addspaces, finetune, wcol)
 #ifdef FEAT_MBYTE
     /* prevent from moving onto a trail byte */
     if (has_mbyte)
-       mb_adjustpos(pos);
+       mb_adjustpos(curbuf, pos);
 #endif
 
     if (col < wcol)
@@ -545,16 +544,26 @@ check_cursor_lnum()
     void
 check_cursor_col()
 {
+    check_cursor_col_win(curwin);
+}
+
+/*
+ * Make sure win->w_cursor.col is valid.
+ */
+    void
+check_cursor_col_win(win)
+    win_T *win;
+{
     colnr_T len;
 #ifdef FEAT_VIRTUALEDIT
-    colnr_T oldcol = curwin->w_cursor.col;
-    colnr_T oldcoladd = curwin->w_cursor.col + curwin->w_cursor.coladd;
+    colnr_T oldcol = win->w_cursor.col;
+    colnr_T oldcoladd = win->w_cursor.col + win->w_cursor.coladd;
 #endif
 
-    len = (colnr_T)STRLEN(ml_get_curline());
+    len = (colnr_T)STRLEN(ml_get_buf(win->w_buffer, win->w_cursor.lnum, FALSE));
     if (len == 0)
-       curwin->w_cursor.col = 0;
-    else if (curwin->w_cursor.col >= len)
+       win->w_cursor.col = 0;
+    else if (win->w_cursor.col >= len)
     {
        /* Allow cursor past end-of-line when:
         * - in Insert mode or restarting Insert mode
@@ -568,33 +577,33 @@ check_cursor_col()
                || (ve_flags & VE_ONEMORE)
 #endif
                || virtual_active())
-           curwin->w_cursor.col = len;
+           win->w_cursor.col = len;
        else
        {
-           curwin->w_cursor.col = len - 1;
+           win->w_cursor.col = len - 1;
 #ifdef FEAT_MBYTE
-           /* prevent cursor from moving on the trail byte */
+           /* Move the cursor to the head byte. */
            if (has_mbyte)
-               mb_adjust_cursor();
+               mb_adjustpos(win->w_buffer, &win->w_cursor);
 #endif
        }
     }
-    else if (curwin->w_cursor.col < 0)
-       curwin->w_cursor.col = 0;
+    else if (win->w_cursor.col < 0)
+       win->w_cursor.col = 0;
 
 #ifdef FEAT_VIRTUALEDIT
     /* If virtual editing is on, we can leave the cursor on the old position,
      * only we must set it to virtual.  But don't do it when at the end of the
      * line. */
     if (oldcol == MAXCOL)
-       curwin->w_cursor.coladd = 0;
+       win->w_cursor.coladd = 0;
     else if (ve_flags == VE_ALL)
     {
-       if (oldcoladd > curwin->w_cursor.col)
-           curwin->w_cursor.coladd = oldcoladd - curwin->w_cursor.col;
+       if (oldcoladd > win->w_cursor.col)
+           win->w_cursor.coladd = oldcoladd - win->w_cursor.col;
        else
            /* avoid weird number when there is a miscalculation or overflow */
-           curwin->w_cursor.coladd = 0;
+           win->w_cursor.coladd = 0;
     }
 #endif
 }
@@ -806,6 +815,7 @@ vim_mem_profile_dump()
 #else
 # define KEEP_ROOM (2 * 8192L)
 #endif
+#define KEEP_ROOM_KB (KEEP_ROOM / 1024L)
 
 /*
  * Note: if unsigned is 16 bits we can only allocate up to 64K with alloc().
@@ -931,7 +941,7 @@ lalloc(size, message)
            allocated = 0;
 # endif
            /* 3. check for available memory: call mch_avail_mem() */
-           if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
+           if (mch_avail_mem(TRUE) < KEEP_ROOM_KB && !releasing)
            {
                free((char *)p);        /* System is low... no go! */
                p = NULL;
@@ -1003,8 +1013,12 @@ do_outofmem_msg(size)
     {
        /* Don't hide this message */
        emsg_silent = 0;
-       EMSGN(_("E342: Out of memory!  (allocating %lu bytes)"), size);
+
+       /* Must come first to avoid coming back here when printing the error
+        * message fails, e.g. when setting v:errmsg. */
        did_outofmem_msg = TRUE;
+
+       EMSGN(_("E342: Out of memory!  (allocating %lu bytes)"), size);
     }
 }
 
@@ -1096,6 +1110,9 @@ free_all_mem()
     free_all_marks();
     alist_clear(&global_alist);
     free_homedir();
+# if defined(FEAT_CMDL_COMPL)
+    free_users();
+# endif
     free_search_patterns();
     free_old_sub();
     free_last_insert();
@@ -1117,7 +1134,7 @@ free_all_mem()
     /* Free some global vars. */
     vim_free(username);
 # ifdef FEAT_CLIPBOARD
-    vim_free(clip_exclude_prog);
+    vim_regfree(clip_exclude_prog);
 # endif
     vim_free(last_cmdline);
 # ifdef FEAT_CMDHIST
@@ -1160,7 +1177,7 @@ free_all_mem()
     for (buf = firstbuf; buf != NULL; )
     {
        nextbuf = buf->b_next;
-       close_buffer(NULL, buf, DOBUF_WIPE);
+       close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
        if (buf_valid(buf))
            buf = nextbuf;      /* didn't work, try next one */
        else
@@ -1223,7 +1240,7 @@ free_all_mem()
 #endif
 
 /*
- * copy a string into newly allocated memory
+ * Copy "string" into newly allocated memory.
  */
     char_u *
 vim_strsave(string)
@@ -1239,6 +1256,12 @@ vim_strsave(string)
     return p;
 }
 
+/*
+ * Copy up to "len" bytes of "string" into newly allocated memory and
+ * terminate with a NUL.
+ * The allocated memory always has size "len + 1", also when "string" is
+ * shorter.
+ */
     char_u *
 vim_strnsave(string, len)
     char_u     *string;
@@ -1540,7 +1563,7 @@ strup_save(orig)
            if (enc_utf8)
            {
                int     c, uc;
-               int     nl;
+               int     newl;
                char_u  *s;
 
                c = utf_ptr2char(p);
@@ -1549,21 +1572,21 @@ strup_save(orig)
                /* Reallocate string when byte count changes.  This is rare,
                 * thus it's OK to do another malloc()/free(). */
                l = utf_ptr2len(p);
-               nl = utf_char2len(uc);
-               if (nl != l)
+               newl = utf_char2len(uc);
+               if (newl != l)
                {
-                   s = alloc((unsigned)STRLEN(res) + 1 + nl - l);
+                   s = alloc((unsigned)STRLEN(res) + 1 + newl - l);
                    if (s == NULL)
                        break;
                    mch_memmove(s, res, p - res);
-                   STRCPY(s + (p - res) + nl, p + l);
+                   STRCPY(s + (p - res) + newl, p + l);
                    p = s + (p - res);
                    vim_free(res);
                    res = s;
                }
 
                utf_char2bytes(uc, p);
-               p += nl;
+               p += newl;
            }
            else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
                p += l;         /* skip multi-byte character */
@@ -1642,6 +1665,28 @@ vim_strncpy(to, from, len)
 }
 
 /*
+ * Like strcat(), but make sure the result fits in "tosize" bytes and is
+ * always NUL terminated.
+ */
+    void
+vim_strcat(to, from, tosize)
+    char_u     *to;
+    char_u     *from;
+    size_t     tosize;
+{
+    size_t tolen = STRLEN(to);
+    size_t fromlen = STRLEN(from);
+
+    if (tolen + fromlen + 1 > tosize)
+    {
+       mch_memmove(to + tolen, from, tosize - tolen - 1);
+       to[tosize - 1] = NUL;
+    }
+    else
+       STRCPY(to + tolen, from);
+}
+
+/*
  * Isolate one part of a string option where parts are separated with
  * "sep_chars".
  * The part is copied into "buf[maxlen]".
@@ -2023,24 +2068,22 @@ ga_grow(gap, n)
     garray_T   *gap;
     int                n;
 {
-    size_t     len;
+    size_t     old_len;
+    size_t     new_len;
     char_u     *pp;
 
     if (gap->ga_maxlen - gap->ga_len < n)
     {
        if (n < gap->ga_growsize)
            n = gap->ga_growsize;
-       len = gap->ga_itemsize * (gap->ga_len + n);
-       pp = alloc_clear((unsigned)len);
+       new_len = gap->ga_itemsize * (gap->ga_len + n);
+       pp = (gap->ga_data == NULL)
+             ? alloc((unsigned)new_len) : vim_realloc(gap->ga_data, new_len);
        if (pp == NULL)
            return FAIL;
+       old_len = gap->ga_itemsize * gap->ga_maxlen;
+       vim_memset(pp + old_len, 0, new_len - old_len);
        gap->ga_maxlen = gap->ga_len + n;
-       if (gap->ga_data != NULL)
-       {
-           mch_memmove(pp, gap->ga_data,
-                                     (size_t)(gap->ga_itemsize * gap->ga_len));
-           vim_free(gap->ga_data);
-       }
        gap->ga_data = pp;
     }
     return OK;
@@ -2109,6 +2152,25 @@ ga_append(gap, c)
     }
 }
 
+#if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
+/*
+ * Append the text in "gap" below the cursor line and clear "gap".
+ */
+    void
+append_ga_line(gap)
+    garray_T   *gap;
+{
+    /* Remove trailing CR. */
+    if (gap->ga_len > 0
+           && !curbuf->b_p_bin
+           && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
+       --gap->ga_len;
+    ga_append(gap, NUL);
+    ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
+    gap->ga_len = 0;
+}
+#endif
+
 /************************************************************************
  * functions that use lookup tables for various things, generally to do with
  * special key codes.
@@ -2356,10 +2418,24 @@ static struct key_name_entry
     {'<',              (char_u *)"lt"},
 
     {K_MOUSE,          (char_u *)"Mouse"},
+#ifdef FEAT_MOUSE_NET
     {K_NETTERM_MOUSE,  (char_u *)"NetMouse"},
+#endif
+#ifdef FEAT_MOUSE_DEC
     {K_DEC_MOUSE,      (char_u *)"DecMouse"},
+#endif
+#ifdef FEAT_MOUSE_JSB
     {K_JSBTERM_MOUSE,  (char_u *)"JsbMouse"},
+#endif
+#ifdef FEAT_MOUSE_PTERM
     {K_PTERM_MOUSE,    (char_u *)"PtermMouse"},
+#endif
+#ifdef FEAT_MOUSE_URXVT
+    {K_URXVT_MOUSE,    (char_u *)"UrxvtMouse"},
+#endif
+#ifdef FEAT_MOUSE_SGR
+    {K_SGR_MOUSE,      (char_u *)"SgrMouse"},
+#endif
     {K_LEFTMOUSE,      (char_u *)"LeftMouse"},
     {K_LEFTMOUSE_NM,   (char_u *)"LeftMouseNM"},
     {K_LEFTDRAG,       (char_u *)"LeftDrag"},
@@ -2698,6 +2774,7 @@ find_special_key(srcp, modp, keycode, keep_x_key)
     int                bit;
     int                key;
     unsigned long n;
+    int                l;
 
     src = *srcp;
     if (src[0] != '<')
@@ -2710,26 +2787,32 @@ find_special_key(srcp, modp, keycode, keep_x_key)
        if (*bp == '-')
        {
            last_dash = bp;
-           if (bp[1] != NUL && bp[2] == '>')
-               ++bp;   /* anything accepted, like <C-?> */
+           if (bp[1] != NUL)
+           {
+#ifdef FEAT_MBYTE
+               if (has_mbyte)
+                   l = mb_ptr2len(bp + 1);
+               else
+#endif
+                   l = 1;
+               if (bp[l + 1] == '>')
+                   bp += l;    /* anything accepted, like <C-?> */
+           }
        }
        if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
            bp += 3;    /* skip t_xx, xx may be '-' or '>' */
+       else if (STRNICMP(bp, "char-", 5) == 0)
+       {
+           vim_str2nr(bp + 5, NULL, &l, TRUE, TRUE, NULL, NULL);
+           bp += l + 5;
+           break;
+       }
     }
 
     if (*bp == '>')    /* found matching '>' */
     {
        end_of_name = bp + 1;
 
-       if (STRNICMP(src + 1, "char-", 5) == 0 && VIM_ISDIGIT(src[6]))
-       {
-           /* <Char-123> or <Char-033> or <Char-0x33> */
-           vim_str2nr(src + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
-           *modp = 0;
-           *srcp = end_of_name;
-           return (int)n;
-       }
-
        /* Which modifiers are given? */
        modifiers = 0x0;
        for (bp = src + 1; bp < last_dash; bp++)
@@ -2748,16 +2831,32 @@ find_special_key(srcp, modp, keycode, keep_x_key)
         */
        if (bp >= last_dash)
        {
-           /*
-            * Modifier with single letter, or special key name.
-            */
-           if (modifiers != 0 && last_dash[2] == '>')
-               key = last_dash[1];
+           if (STRNICMP(last_dash + 1, "char-", 5) == 0
+                                                && VIM_ISDIGIT(last_dash[6]))
+           {
+               /* <Char-123> or <Char-033> or <Char-0x33> */
+               vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
+               key = (int)n;
+           }
            else
            {
-               key = get_special_key_code(last_dash + 1);
-               if (!keep_x_key)
-                   key = handle_x_keys(key);
+               /*
+                * Modifier with single letter, or special key name.
+                */
+#ifdef FEAT_MBYTE
+               if (has_mbyte)
+                   l = mb_ptr2len(last_dash + 1);
+               else
+#endif
+                   l = 1;
+               if (modifiers != 0 && last_dash[l + 1] == '>')
+                   key = PTR2CHAR(last_dash + 1);
+               else
+               {
+                   key = get_special_key_code(last_dash + 1);
+                   if (!keep_x_key)
+                       key = handle_x_keys(key);
+               }
            }
 
            /*
@@ -2808,7 +2907,7 @@ extract_modifiers(key, modp)
     int        modifiers = *modp;
 
 #ifdef MACOS
-    /* Command-key really special, No fancynest */
+    /* Command-key really special, no fancynest */
     if (!(modifiers & MOD_MASK_CMD))
 #endif
     if ((modifiers & MOD_MASK_SHIFT) && ASCII_ISALPHA(key))
@@ -2835,7 +2934,7 @@ extract_modifiers(key, modp)
            key = K_ZERO;
     }
 #ifdef MACOS
-    /* Command-key really special, No fancynest */
+    /* Command-key really special, no fancynest */
     if (!(modifiers & MOD_MASK_CMD))
 #endif
     if ((modifiers & MOD_MASK_ALT) && key < 0x80
@@ -3131,17 +3230,31 @@ call_shell(cmd, opt)
            retval = mch_call_shell(cmd, opt);
        else
        {
-           ncmd = alloc((unsigned)(STRLEN(cmd) + STRLEN(p_sxq) * 2 + 1));
+           char_u *ecmd = cmd;
+
+           if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0)
+           {
+               ecmd = vim_strsave_escaped_ext(cmd, p_sxe, '^', FALSE);
+               if (ecmd == NULL)
+                   ecmd = cmd;
+           }
+           ncmd = alloc((unsigned)(STRLEN(ecmd) + STRLEN(p_sxq) * 2 + 1));
            if (ncmd != NULL)
            {
                STRCPY(ncmd, p_sxq);
-               STRCAT(ncmd, cmd);
-               STRCAT(ncmd, p_sxq);
+               STRCAT(ncmd, ecmd);
+               /* When 'shellxquote' is ( append ).
+                * When 'shellxquote' is "( append )". */
+               STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
+                          : STRCMP(p_sxq, "\"(") == 0 ? (char_u *)")\""
+                          : p_sxq);
                retval = mch_call_shell(ncmd, opt);
                vim_free(ncmd);
            }
            else
                retval = -1;
+           if (ecmd != cmd)
+               vim_free(ecmd);
        }
 #ifdef FEAT_GUI
        --hold_gui_events;
@@ -3191,7 +3304,7 @@ get_real_state()
 #if defined(FEAT_MBYTE) || defined(PROTO)
 /*
  * Return TRUE if "p" points to just after a path separator.
- * Take care of multi-byte characters.
+ * Takes care of multi-byte characters.
  * "b" must point to the start of the file name
  */
     int
@@ -3199,7 +3312,7 @@ after_pathsep(b, p)
     char_u     *b;
     char_u     *p;
 {
-    return vim_ispathsep(p[-1])
+    return p > b && vim_ispathsep(p[-1])
                             && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0);
 }
 #endif
@@ -3747,7 +3860,7 @@ static ulg keys[3]; /* keys defining the pseudo-random sequence */
     ush temp; \
  \
     temp = (ush)keys[2] | 2; \
-    t = (int)(((unsigned)(temp * (temp ^ 1)) >> 8) & 0xff); \
+    t = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff); \
 }
 
 /*
@@ -3889,7 +4002,7 @@ crypt_decode(ptr, len)
            ush temp;
 
            temp = (ush)keys[2] | 2;
-           temp = (int)(((unsigned)(temp * (temp ^ 1)) >> 8) & 0xff);
+           temp = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff);
            UPDATE_KEYS_ZIP(*p ^= temp);
        }
     else
@@ -4210,6 +4323,8 @@ static ff_stack_T *ff_create_stack_element __ARGS((char_u *, int, int));
 static int ff_path_in_stoplist __ARGS((char_u *, int, char_u **));
 #endif
 
+static char_u e_pathtoolong[] = N_("E854: path too long for completion");
+
 #if 0
 /*
  * if someone likes findfirst/findnext, here are the functions
@@ -4506,6 +4621,11 @@ vim_findfile_init(path, filename, stopdirs, level, free_visited, find_what,
        len = 0;
        while (*wc_part != NUL)
        {
+           if (len + 5 >= MAXPATHL)
+           {
+               EMSG(_(e_pathtoolong));
+               break;
+           }
            if (STRNCMP(wc_part, "**", 2) == 0)
            {
                ff_expand_buffer[len++] = *wc_part++;
@@ -4551,10 +4671,68 @@ vim_findfile_init(path, filename, stopdirs, level, free_visited, find_what,
     }
 
     /* create an absolute path */
+    if (STRLEN(search_ctx->ffsc_start_dir)
+                         + STRLEN(search_ctx->ffsc_fix_path) + 3 >= MAXPATHL)
+    {
+       EMSG(_(e_pathtoolong));
+       goto error_return;
+    }
     STRCPY(ff_expand_buffer, search_ctx->ffsc_start_dir);
     add_pathsep(ff_expand_buffer);
-    STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path);
-    add_pathsep(ff_expand_buffer);
+    {
+       int    eb_len = (int)STRLEN(ff_expand_buffer);
+       char_u *buf = alloc(eb_len
+                               + (int)STRLEN(search_ctx->ffsc_fix_path) + 1);
+
+       STRCPY(buf, ff_expand_buffer);
+       STRCPY(buf + eb_len, search_ctx->ffsc_fix_path);
+       if (mch_isdir(buf))
+       {
+           STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path);
+           add_pathsep(ff_expand_buffer);
+       }
+#ifdef FEAT_PATH_EXTRA
+       else
+       {
+           char_u *p =  gettail(search_ctx->ffsc_fix_path);
+           char_u *wc_path = NUL;
+           char_u *temp = NUL;
+           int    len = 0;
+
+           if (p > search_ctx->ffsc_fix_path)
+           {
+               len = (int)(p - search_ctx->ffsc_fix_path) - 1;
+               STRNCAT(ff_expand_buffer, search_ctx->ffsc_fix_path, len);
+               add_pathsep(ff_expand_buffer);
+           }
+           else
+               len = (int)STRLEN(search_ctx->ffsc_fix_path);
+
+           if (search_ctx->ffsc_wc_path != NULL)
+           {
+               wc_path = vim_strsave(search_ctx->ffsc_wc_path);
+               temp = alloc((int)(STRLEN(search_ctx->ffsc_wc_path)
+                                + STRLEN(search_ctx->ffsc_fix_path + len)
+                                + 1));
+           }
+
+           if (temp == NULL || wc_path == NULL)
+           {
+               vim_free(buf);
+               vim_free(temp);
+               vim_free(wc_path);
+               goto error_return;
+           }
+
+           STRCPY(temp, search_ctx->ffsc_fix_path + len);
+           STRCAT(temp, search_ctx->ffsc_wc_path);
+           vim_free(search_ctx->ffsc_wc_path);
+           vim_free(wc_path);
+           search_ctx->ffsc_wc_path = temp;
+       }
+#endif
+       vim_free(buf);
+    }
 
     sptr = ff_create_stack_element(ff_expand_buffer,
 #ifdef FEAT_PATH_EXTRA
@@ -4597,9 +4775,8 @@ vim_findfile_stopdir(buf)
     {
        if (r_ptr[0] == '\\' && r_ptr[1] == ';')
        {
-           /* overwrite the escape char,
-            * use STRLEN(r_ptr) to move the trailing '\0'
-            */
+           /* Overwrite the escape char,
+            * use STRLEN(r_ptr) to move the trailing '\0'. */
            STRMOVE(r_ptr, r_ptr + 1);
            r_ptr++;
        }
@@ -4858,10 +5035,13 @@ vim_findfile(search_ctx_arg)
                        stackp->ffs_filearray_size = 0;
                }
                else
+                   /* Add EW_NOTWILD because the expanded path may contain
+                    * wildcard characters that are to be taken literally.
+                    * This is a bit of a hack. */
                    expand_wildcards((dirptrs[1] == NULL) ? 1 : 2, dirptrs,
                            &stackp->ffs_filearray_size,
                            &stackp->ffs_filearray,
-                           EW_DIR|EW_ADDSLASH|EW_SILENT);
+                           EW_DIR|EW_ADDSLASH|EW_SILENT|EW_NOTWILD);
 
                stackp->ffs_filearray_cur = 0;
                stackp->ffs_stage = 0;
@@ -4880,8 +5060,8 @@ vim_findfile(search_ctx_arg)
 #endif
                {
                    /*
-                    * we don't have further wildcards to expand, so we have to
-                    * check for the final file now
+                    * We don't have further wildcards to expand, so we have to
+                    * check for the final file now.
                     */
                    for (i = stackp->ffs_filearray_cur;
                                          i < stackp->ffs_filearray_size; ++i)
@@ -5224,6 +5404,8 @@ ff_wc_equal(s1, s2)
     char_u     *s2;
 {
     int                i;
+    int                prev1 = NUL;
+    int                prev2 = NUL;
 
     if (s1 == s2)
        return TRUE;
@@ -5234,22 +5416,16 @@ ff_wc_equal(s1, s2)
     if (STRLEN(s1) != STRLEN(s2))
        return FAIL;
 
-    for (i = 0; s1[i] != NUL && s2[i] != NUL; i++)
+    for (i = 0; s1[i] != NUL && s2[i] != NUL; i += MB_PTR2LEN(s1 + i))
     {
-       if (s1[i] != s2[i]
-#ifdef CASE_INSENSITIVE_FILENAME
-               && TOUPPER_LOC(s1[i]) != TOUPPER_LOC(s2[i])
-#endif
-               )
-       {
-           if (i >= 2)
-               if (s1[i-1] == '*' && s1[i-2] == '*')
-                   continue;
-               else
-                   return FAIL;
-           else
-               return FAIL;
-       }
+       int c1 = PTR2CHAR(s1 + i);
+       int c2 = PTR2CHAR(s2 + i);
+
+       if ((p_fic ? MB_TOLOWER(c1) != MB_TOLOWER(c2) : c1 != c2)
+               && (prev1 != '*' || prev2 != '*'))
+           return FAIL;
+       prev2 = prev1;
+       prev1 = c1;
     }
     return TRUE;
 }
@@ -5975,57 +6151,59 @@ pathcmp(p, q, maxlen)
     int maxlen;
 {
     int                i;
+    int                c1, c2;
     const char *s = NULL;
 
-    for (i = 0; maxlen < 0 || i < maxlen; ++i)
+    for (i = 0; maxlen < 0 || i < maxlen; i += MB_PTR2LEN((char_u *)p + i))
     {
+       c1 = PTR2CHAR((char_u *)p + i);
+       c2 = PTR2CHAR((char_u *)q + i);
+
        /* End of "p": check if "q" also ends or just has a slash. */
-       if (p[i] == NUL)
+       if (c1 == NUL)
        {
-           if (q[i] == NUL)  /* full match */
+           if (c2 == NUL)  /* full match */
                return 0;
            s = q;
            break;
        }
 
        /* End of "q": check if "p" just has a slash. */
-       if (q[i] == NUL)
+       if (c2 == NUL)
        {
            s = p;
            break;
        }
 
-       if (
-#ifdef CASE_INSENSITIVE_FILENAME
-               TOUPPER_LOC(p[i]) != TOUPPER_LOC(q[i])
-#else
-               p[i] != q[i]
-#endif
+       if ((p_fic ? MB_TOUPPER(c1) != MB_TOUPPER(c2) : c1 != c2)
 #ifdef BACKSLASH_IN_FILENAME
                /* consider '/' and '\\' to be equal */
-               && !((p[i] == '/' && q[i] == '\\')
-                   || (p[i] == '\\' && q[i] == '/'))
+               && !((c1 == '/' && c2 == '\\')
+                   || (c1 == '\\' && c2 == '/'))
 #endif
                )
        {
-           if (vim_ispathsep(p[i]))
+           if (vim_ispathsep(c1))
                return -1;
-           if (vim_ispathsep(q[i]))
+           if (vim_ispathsep(c2))
                return 1;
-           return ((char_u *)p)[i] - ((char_u *)q)[i];     /* no match */
+           return p_fic ? MB_TOUPPER(c1) - MB_TOUPPER(c2)
+                   : c1 - c2;  /* no match */
        }
     }
     if (s == NULL)     /* "i" ran into "maxlen" */
        return 0;
 
+    c1 = PTR2CHAR((char_u *)s + i);
+    c2 = PTR2CHAR((char_u *)s + i + MB_PTR2LEN((char_u *)s + i));
     /* ignore a trailing slash, but not "//" or ":/" */
-    if (s[i + 1] == NUL
+    if (c2 == NUL
            && i > 0
            && !after_pathsep((char_u *)s, (char_u *)s + i)
 #ifdef BACKSLASH_IN_FILENAME
-           && (s[i] == '/' || s[i] == '\\')
+           && (c1 == '/' || c1 == '\\')
 #else
-           && s[i] == '/'
+           && c1 == '/'
 #endif
        )
        return 0;   /* match with trailing slash */
@@ -6443,3 +6621,23 @@ put_time(fd, the_time)
 #endif
 
 #endif
+
+#if (defined(FEAT_MBYTE) && defined(FEAT_QUICKFIX)) \
+       || defined(FEAT_SPELL) || defined(PROTO)
+/*
+ * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
+ * When "s" is NULL FALSE is returned.
+ */
+    int
+has_non_ascii(s)
+    char_u     *s;
+{
+    char_u     *p;
+
+    if (s != NULL)
+       for (p = s; *p != NUL; ++p)
+           if (*p >= 128)
+               return TRUE;
+    return FALSE;
+}
+#endif
index 1730631..5c82574 100644 (file)
@@ -362,7 +362,7 @@ update_topline()
 #endif
            )
     {
-       dollar_vcol = 0;
+       dollar_vcol = -1;
        if (curwin->w_skipcol != 0)
        {
            curwin->w_skipcol = 0;
@@ -926,8 +926,8 @@ curwin_col_off2()
  * Also updates curwin->w_leftcol.
  */
     void
-curs_columns(scroll)
-    int                scroll;         /* when TRUE, may scroll horizontally */
+curs_columns(may_scroll)
+    int                may_scroll;     /* when TRUE, may scroll horizontally */
 {
     int                diff;
     int                extra;          /* offset for first screen line */
@@ -966,7 +966,7 @@ curs_columns(scroll)
 
     /* remove '$' from change command when cursor moves onto it */
     if (startcol > dollar_vcol)
-       dollar_vcol = 0;
+       dollar_vcol = -1;
 
     extra = curwin_col_off();
     curwin->w_wcol = curwin->w_virtcol + extra;
@@ -1014,7 +1014,7 @@ curs_columns(scroll)
     /* No line wrapping: compute curwin->w_leftcol if scrolling is on and line
      * is not folded.
      * If scrolling is off, curwin->w_leftcol is assumed to be 0 */
-    else if (scroll
+    else if (may_scroll
 #ifdef FEAT_FOLDING
            && !curwin->w_cline_folded
 #endif
@@ -2576,7 +2576,7 @@ get_scroll_overlap(lp, dir)
     else
        topline_back(lp);
     h2 = lp->height;
-    if (h2 + h1 > min_height)
+    if (h2 == MAXCOL || h2 + h1 > min_height)
     {
        *lp = loff0;    /* no overlap */
        return;
@@ -2588,7 +2588,7 @@ get_scroll_overlap(lp, dir)
     else
        topline_back(lp);
     h3 = lp->height;
-    if (h3 + h2 > min_height)
+    if (h3 == MAXCOL || h3 + h2 > min_height)
     {
        *lp = loff0;    /* no overlap */
        return;
@@ -2600,7 +2600,7 @@ get_scroll_overlap(lp, dir)
     else
        topline_back(lp);
     h4 = lp->height;
-    if (h4 + h3 + h2 > min_height || h3 + h2 + h1 > min_height)
+    if (h4 == MAXCOL || h4 + h3 + h2 > min_height || h3 + h2 + h1 > min_height)
        *lp = loff1;    /* 1 line overlap */
     else
        *lp = loff2;    /* 2 lines overlap */
@@ -2843,9 +2843,15 @@ halfpage(flag, Prenum)
 do_check_cursorbind()
 {
     linenr_T   line = curwin->w_cursor.lnum;
-    colnr_T    col =  curwin->w_cursor.col;
+    colnr_T    col = curwin->w_cursor.col;
+# ifdef FEAT_VIRTUALEDIT
+    colnr_T    coladd = curwin->w_cursor.coladd;
+# endif
+    colnr_T    curswant = curwin->w_curswant;
+    int                set_curswant = curwin->w_set_curswant;
     win_T      *old_curwin = curwin;
     buf_T      *old_curbuf = curbuf;
+    int                restart_edit_save;
 # ifdef FEAT_VISUAL
     int                old_VIsual_select = VIsual_select;
     int                old_VIsual_active = VIsual_active;
@@ -2874,17 +2880,28 @@ do_check_cursorbind()
 # endif
                curwin->w_cursor.lnum = line;
            curwin->w_cursor.col = col;
+# ifdef FEAT_VIRTUALEDIT
+           curwin->w_cursor.coladd = coladd;
+# endif
+           curwin->w_curswant = curswant;
+           curwin->w_set_curswant = set_curswant;
 
-           /* Make sure the cursor is in a valid position. */
+           /* Make sure the cursor is in a valid position.  Temporarily set
+            * "restart_edit" to allow the cursor to be beyond the EOL. */
+           restart_edit_save = restart_edit;
+           restart_edit = TRUE;
            check_cursor();
+           restart_edit = restart_edit_save;
 # ifdef FEAT_MBYTE
            /* Correct cursor for multi-byte character. */
            if (has_mbyte)
                mb_adjust_cursor();
 # endif
-
            redraw_later(VALID);
-           update_topline();
+
+           /* Only scroll when 'scrollbind' hasn't done this. */
+           if (!curwin->w_p_scb)
+               update_topline();
 # ifdef FEAT_WINDOWS
            curwin->w_redr_status = TRUE;
 # endif
index 1fc1fbf..c1cd76a 100644 (file)
@@ -4,4 +4,4 @@ rem   aka Microsoft Visual Studio 9.0.
 rem See INSTALLpc.txt for information.
 @echo on
 
-call "%VS90COMNTOOLS%%vsvars32.bat"
+call "%VS90COMNTOOLS%vsvars32.bat"
diff --git a/src/msvc2010.bat b/src/msvc2010.bat
new file mode 100644 (file)
index 0000000..5c258e9
--- /dev/null
@@ -0,0 +1,7 @@
+@echo off
+rem To be used on MS-Windows for Visual C++ 2010 Express Edition
+rem   aka Microsoft Visual Studio 10.0.
+rem See INSTALLpc.txt for information.
+@echo on
+
+call "%VS100COMNTOOLS%vsvars32.bat"
index 20125ca..1b61c58 100644 (file)
@@ -17,7 +17,7 @@
  * debugging startup problems because gvim will be started automatically from
  * netbeans and cannot be run directly from a debugger. The only way to debug
  * a gvim started by netbeans is by attaching a debugger to it. Without this
- * tool all starup code will have completed before you can get the pid and
+ * tool all startup code will have completed before you can get the pid and
  * attach.
  *
  * The second tool is a log tool.
index d75fcbb..fc93f93 100644 (file)
  * which are *between* characters, whereas vim uses line number
  * and column number which are *on* characters.
  * See ":help netbeans-protocol" for explanation.
+ *
+ * The Netbeans messages are received and queued in the gui event loop, or in
+ * the select loop when Vim runs in a terminal. These messages are processed
+ * by netbeans_parse_messages() which is invoked in the idle loop when Vim is
+ * waiting for user input. The function netbeans_parse_messages() is also
+ * called from the ":sleep" command, to allow the execution of test cases that
+ * may not invoke the idle loop.
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"    /* for mch_open(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 #if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
@@ -87,7 +90,7 @@ static int getConnInfo __ARGS((char *file, char **host, char **port, char **pass
 static void nb_init_graphics __ARGS((void));
 static void coloncmd __ARGS((char *cmd, ...));
 static void nb_set_curbuf __ARGS((buf_T *buf));
-#ifdef FEAT_GUI_MOTIF
+#ifdef FEAT_GUI_X11
 static void messageFromNetbeans __ARGS((XtPointer, int *, XtInputId *));
 #endif
 #ifdef FEAT_GUI_GTK
@@ -112,7 +115,7 @@ typedef int NBSOCK;
 static NBSOCK nbsock = -1;             /* socket fd for Netbeans connection */
 #define NETBEANS_OPEN (nbsock != -1)
 
-#ifdef FEAT_GUI_MOTIF
+#ifdef FEAT_GUI_X11
 static XtInputId inputHandler = (XtInputId)NULL;  /* Cookie for input */
 #endif
 #ifdef FEAT_GUI_GTK
@@ -135,15 +138,13 @@ static int dosetvisible = FALSE;
 static int needupdate = 0;
 static int inAtomic = 0;
 
+/*
+ * Close the socket and remove the input handlers.
+ */
     static void
-netbeans_close(void)
+nb_close_socket(void)
 {
-    if (!NETBEANS_OPEN)
-       return;
-
-    netbeans_send_disconnect();
-
-#ifdef FEAT_GUI_MOTIF
+#ifdef FEAT_GUI_X11
     if (inputHandler != (XtInputId)NULL)
     {
        XtRemoveInput(inputHandler);
@@ -167,13 +168,27 @@ netbeans_close(void)
 # endif
 #endif
 
+    sock_close(nbsock);
+    nbsock = -1;
+}
+
+/*
+ * Close the connection and cleanup.
+ * May be called when nb_close_socket() was called earlier.
+ */
+    static void
+netbeans_close(void)
+{
+    if (NETBEANS_OPEN)
+    {
+       netbeans_send_disconnect();
+       nb_close_socket();
+    }
+
 #ifdef FEAT_BEVAL
     bevalServers &= ~BEVAL_NETBEANS;
 #endif
 
-    sock_close(nbsock);
-    nbsock = -1;
-
     needupdate = 0;
     inAtomic = 0;
     nb_free();
@@ -183,6 +198,7 @@ netbeans_close(void)
     changed_window_setting();
     update_screen(CLEAR);
     setcursor();
+    cursor_on();
     out_flush();
 #ifdef FEAT_GUI
     if (gui.in_use)
@@ -311,14 +327,9 @@ netbeans_connect(char *params, int doabort)
     server.sin_port = htons(port);
     if ((host = gethostbyname(hostname)) == NULL)
     {
-       if (mch_access(hostname, R_OK) >= 0)
-       {
-           /* DEBUG: input file */
-           sd = mch_open(hostname, O_RDONLY, 0);
-           goto theend;
-       }
        nbdebug(("error in gethostbyname() in netbeans_connect()\n"));
        PERROR("gethostbyname() in netbeans_connect()");
+       sock_close(sd);
        goto theend;
     }
     memcpy((char *)&server.sin_addr, host->h_addr, host->h_length);
@@ -368,15 +379,12 @@ netbeans_connect(char *params, int doabort)
                                                         || (errno == EINTR)))
                {
                    nbdebug(("retrying...\n"));
-                   sleep(5);
-                   if (!doabort)
+                   mch_delay(3000L, TRUE);
+                   ui_breakcheck();
+                   if (got_int)
                    {
-                       ui_breakcheck();
-                       if (got_int)
-                       {
-                           errno = EINTR;
-                           break;
-                       }
+                       errno = EINTR;
+                       break;
                    }
                    if (connect(sd, (struct sockaddr *)&server,
                                                         sizeof(server)) == 0)
@@ -391,6 +399,7 @@ netbeans_connect(char *params, int doabort)
                    /* Get here when the server can't be found. */
                    nbdebug(("Cannot connect to Netbeans #2\n"));
                    PERROR(_("Cannot connect to Netbeans #2"));
+                   sock_close(sd);
                    if (doabort)
                        getout(1);
                    goto theend;
@@ -401,6 +410,7 @@ netbeans_connect(char *params, int doabort)
        {
            nbdebug(("Cannot connect to Netbeans\n"));
            PERROR(_("Cannot connect to Netbeans"));
+           sock_close(sd);
            if (doabort)
                getout(1);
            goto theend;
@@ -433,7 +443,7 @@ getConnInfo(char *file, char **host, char **port, char **auth)
     FILE *fp;
     char_u buf[BUFSIZ];
     char_u *lp;
-    char_u *nl;
+    char_u *nlp;
 #ifdef UNIX
     struct stat        st;
 
@@ -462,8 +472,8 @@ getConnInfo(char *file, char **host, char **port, char **auth)
     /* Read the file. There should be one of each parameter */
     while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL)
     {
-       if ((nl = vim_strchr(lp, '\n')) != NULL)
-           *nl = 0;        /* strip off the trailing newline */
+       if ((nlp = vim_strchr(lp, '\n')) != NULL)
+           *nlp = 0;       /* strip off the trailing newline */
 
        if (STRNCMP(lp, "host=", 5) == 0)
        {
@@ -631,9 +641,7 @@ netbeans_parse_messages(void)
 {
     char_u     *p;
     queue_T    *node;
-
-    if (!NETBEANS_OPEN)
-       return;
+    int                own_node;
 
     while (head.next != NULL && head.next != &head)
     {
@@ -672,20 +680,25 @@ netbeans_parse_messages(void)
            *p++ = NUL;
            if (*p == NUL)
            {
+               own_node = TRUE;
                head.next = node->next;
                node->next->prev = node->prev;
            }
+           else
+               own_node = FALSE;
 
            /* now, parse and execute the commands */
            nb_parse_cmd(node->buffer);
 
-           if (*p == NUL)
+           if (own_node)
            {
                /* buffer finished, dispose of the node and buffer */
                vim_free(node->buffer);
                vim_free(node);
            }
-           else
+           /* Check that "head" wasn't changed under our fingers, e.g. when a
+            * DETACH command was handled. */
+           else if (head.next == node)
            {
                /* more follows, move to the start */
                STRMOVE(node->buffer, p);
@@ -700,7 +713,7 @@ netbeans_parse_messages(void)
 /*
  * Read a command from netbeans.
  */
-#ifdef FEAT_GUI_MOTIF
+#ifdef FEAT_GUI_X11
     static void
 messageFromNetbeans(XtPointer clientData UNUSED,
                    int *unused1 UNUSED,
@@ -720,15 +733,14 @@ messageFromNetbeans(gpointer clientData UNUSED,
 }
 #endif
 
+#define DETACH_MSG "DETACH\n"
+
     void
 netbeans_read()
 {
     static char_u      *buf = NULL;
     int                        len = 0;
     int                        readlen = 0;
-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
-    static int         level = 0;
-#endif
 #ifdef HAVE_SELECT
     struct timeval     tval;
     fd_set             rfds;
@@ -744,13 +756,6 @@ netbeans_read()
        return;
     }
 
-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
-    /* recursion guard; this will be called from the X event loop at unknown
-     * moments */
-    if (NB_HAS_GUI)
-       ++level;
-#endif
-
     /* Allocate a buffer to read into. */
     if (buf == NULL)
     {
@@ -790,34 +795,32 @@ netbeans_read()
            break;      /* did read everything that's available */
     }
 
+    /* Reading a socket disconnection (readlen == 0), or a socket error. */
     if (readlen <= 0)
     {
-       /* read error or didn't read anything */
-       netbeans_close();
-       nbdebug(("messageFromNetbeans: Error in read() from socket\n"));
+       /* Queue a "DETACH" netbeans message in the command queue in order to
+        * terminate the netbeans session later. Do not end the session here
+        * directly as we may be running in the context of a call to
+        * netbeans_parse_messages():
+        *      netbeans_parse_messages
+        *          -> autocmd triggered while processing the netbeans cmd
+        *              -> ui_breakcheck
+        *                  -> gui event loop or select loop
+        *                      -> netbeans_read()
+        */
+       save((char_u *)DETACH_MSG, (int)strlen(DETACH_MSG));
+       nb_close_socket();
+
        if (len < 0)
        {
            nbdebug(("read from Netbeans socket\n"));
            PERROR(_("read from Netbeans socket"));
        }
-       return; /* don't try to parse it */
     }
 
-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_W32)
-    /* Let the main loop handle messages. */
-    if (NB_HAS_GUI)
-    {
-# ifdef FEAT_GUI_GTK
-       if (gtk_main_level() > 0)
-           gtk_main_quit();
-# else
-       /* Parse the messages now, but avoid recursion. */
-       if (level == 1)
-           netbeans_parse_messages();
-
-       --level;
-# endif
-    }
+#if defined(NB_HAS_GUI) && defined(FEAT_GUI_GTK)
+    if (NB_HAS_GUI && gtk_main_level() > 0)
+       gtk_main_quit();
 #endif
 }
 
@@ -955,7 +958,6 @@ nb_free()
     keyQ_T *key_node = keyHead.next;
     queue_T *cmd_node = head.next;
     nbbuf_T buf;
-    buf_T *bufp;
     int i;
 
     /* free the netbeans buffer list */
@@ -964,7 +966,7 @@ nb_free()
        buf = buf_list[i];
        vim_free(buf.displayname);
        vim_free(buf.signmap);
-       if ((bufp=buf.bufp) != NULL)
+       if (buf.bufp != NULL)
        {
            buf.bufp->b_netbeans_file = FALSE;
            buf.bufp->b_was_netbeans_file = FALSE;
@@ -976,7 +978,7 @@ nb_free()
     buf_list_used = 0;
 
     /* free the queued key commands */
-    while(key_node != NULL && key_node != &keyHead)
+    while (key_node != NULL && key_node != &keyHead)
     {
        keyQ_T *next = key_node->next;
        vim_free(key_node->keystr);
@@ -991,7 +993,7 @@ nb_free()
     }
 
     /* free the queued netbeans commands */
-    while(cmd_node != NULL && cmd_node != &head)
+    while (cmd_node != NULL && cmd_node != &head)
     {
        queue_T *next = cmd_node->next;
        vim_free(cmd_node->buffer);
@@ -1186,6 +1188,10 @@ nb_reply_nil(int cmdno)
 
     nbdebug(("REP %d: <none>\n", cmdno));
 
+    /* Avoid printing an annoying error message. */
+    if (!NETBEANS_OPEN)
+       return;
+
     sprintf(reply, "%d\n", cmdno);
     nb_send(reply, "nb_reply_nil");
 }
@@ -1389,7 +1395,7 @@ nb_do_cmd(
     int                cmdno,
     char_u     *args)      /* points to space before arguments or NUL */
 {
-    int                doupdate = 0;
+    int                do_update = 0;
     long       off = 0;
     nbbuf_T    *buf = nb_get_buf(bufno);
     static int skip = 0;
@@ -1594,7 +1600,7 @@ nb_do_cmd(
                                                        last.lnum, last.col));
                del_from_lnum = first.lnum;
                del_to_lnum = last.lnum;
-               doupdate = 1;
+               do_update = 1;
 
                /* Get the position of the first byte after the deleted
                 * section.  "next" is NULL when deleting to the end of the
@@ -1734,7 +1740,7 @@ nb_do_cmd(
                int     added = 0;
                int     oldFire = netbeansFireChanges;
                int     old_b_changed;
-               char_u  *nl;
+               char_u  *nlp;
                linenr_T lnum;
                linenr_T lnum_start;
                pos_T   *pos;
@@ -1771,11 +1777,11 @@ nb_do_cmd(
                lnum = lnum_start;
 
                /* Loop over the "\n" separated lines of the argument. */
-               doupdate = 1;
+               do_update = 1;
                while (*args != NUL)
                {
-                   nl = vim_strchr(args, '\n');
-                   if (nl == NULL)
+                   nlp = vim_strchr(args, '\n');
+                   if (nlp == NULL)
                    {
                        /* Incomplete line, probably truncated.  Next "insert"
                         * command should append to this one. */
@@ -1783,13 +1789,13 @@ nb_do_cmd(
                    }
                    else
                    {
-                       len = nl - args;
+                       len = nlp - args;
 
                        /*
                         * We need to detect EOL style, because the commands
                         * use a character offset.
                         */
-                       if (nl > args && nl[-1] == '\r')
+                       if (nlp > args && nlp[-1] == '\r')
                        {
                            ff_detected = EOL_DOS;
                            --len;
@@ -1806,13 +1812,15 @@ nb_do_cmd(
                        char_u *oldline = ml_get(lnum);
                        char_u *newline;
 
-                       /* Insert halfway a line.  For simplicity we assume we
-                        * need to append to the line. */
-                       newline = alloc_check((unsigned)(STRLEN(oldline) + len + 1));
+                       /* Insert halfway a line. */
+                       newline = alloc_check(
+                                      (unsigned)(STRLEN(oldline) + len + 1));
                        if (newline != NULL)
                        {
-                           STRCPY(newline, oldline);
+                           mch_memmove(newline, oldline, (size_t)pos->col);
+                           newline[pos->col] = NUL;
                            STRCAT(newline, args);
+                           STRCAT(newline, oldline + pos->col);
                            ml_replace(lnum, newline, FALSE);
                        }
                    }
@@ -1820,14 +1828,15 @@ nb_do_cmd(
                    {
                        /* Append a new line.  Not that we always do this,
                         * also when the text doesn't end in a "\n". */
-                       ml_append((linenr_T)(lnum - 1), args, (colnr_T)(len + 1), FALSE);
+                       ml_append((linenr_T)(lnum - 1), args,
+                                                  (colnr_T)(len + 1), FALSE);
                        ++added;
                    }
 
-                   if (nl == NULL)
+                   if (nlp == NULL)
                        break;
                    ++lnum;
-                   args = nl + 1;
+                   args = nlp + 1;
                }
 
                /* Adjust the marks below the inserted lines. */
@@ -1986,7 +1995,7 @@ nb_do_cmd(
                EMSG("E640: invalid buffer identifier in initDone");
                return FAIL;
            }
-           doupdate = 1;
+           do_update = 1;
            buf->initDone = TRUE;
            nb_set_curbuf(buf->bufp);
 #if defined(FEAT_AUTOCMD)
@@ -2075,7 +2084,7 @@ nb_do_cmd(
                                             ECMD_HIDE + ECMD_OLDBUF, curwin);
            buf->bufp = curbuf;
            buf->initDone = TRUE;
-           doupdate = 1;
+           do_update = 1;
 #if defined(FEAT_TITLE)
            maketitle();
 #endif
@@ -2103,7 +2112,7 @@ nb_do_cmd(
                exarg.forceit = FALSE;
                dosetvisible = TRUE;
                goto_buffer(&exarg, DOBUF_FIRST, FORWARD, buf->bufp->b_fnum);
-               doupdate = 1;
+               do_update = 1;
                dosetvisible = FALSE;
 
 #ifdef FEAT_GUI
@@ -2250,6 +2259,7 @@ nb_do_cmd(
            update_topline();           /* scroll to show the line */
            update_screen(VALID);
            setcursor();
+           cursor_on();
            out_flush();
 #ifdef FEAT_GUI
            if (gui.in_use)
@@ -2302,7 +2312,7 @@ nb_do_cmd(
                                                     buf->bufp->b_fnum, TRUE);
            buf->bufp = NULL;
            buf->initDone = FALSE;
-           doupdate = 1;
+           do_update = 1;
 /* =====================================================================*/
        }
        else if (streq((char *)cmd, "setStyle")) /* obsolete... */
@@ -2393,7 +2403,7 @@ nb_do_cmd(
                return FAIL;
            }
 
-           doupdate = 1;
+           do_update = 1;
 
            cp = (char *)args;
            serNum = strtol(cp, &cp, 10);
@@ -2441,7 +2451,7 @@ nb_do_cmd(
                nbdebug(("    invalid buffer identifier in removeAnno\n"));
                return FAIL;
            }
-           doupdate = 1;
+           do_update = 1;
            cp = (char *)args;
            serNum = strtol(cp, &cp, 10);
            args = (char_u *)cp;
@@ -2486,7 +2496,7 @@ nb_do_cmd(
            len = strtol(cp, NULL, 10);
            args = (char_u *)cp;
            pos = off2pos(buf->bufp, off);
-           doupdate = 1;
+           do_update = 1;
            if (!pos)
                nbdebug(("    no such start pos in %s, %ld\n", cmd, off));
            else
@@ -2548,7 +2558,7 @@ nb_do_cmd(
            inAtomic = 0;
            if (needupdate)
            {
-               doupdate = 1;
+               do_update = 1;
                needupdate = 0;
            }
 /* =====================================================================*/
@@ -2629,21 +2639,22 @@ nb_do_cmd(
         * Unrecognized command is ignored.
         */
     }
-    if (inAtomic && doupdate)
+    if (inAtomic && do_update)
     {
        needupdate = 1;
-       doupdate = 0;
+       do_update = 0;
     }
 
     /*
      * Is this needed? I moved the netbeans_Xt_connect() later during startup
      * and it may no longer be necessary. If its not needed then needupdate
-     * and doupdate can also be removed.
+     * and do_update can also be removed.
      */
-    if (buf != NULL && buf->initDone && doupdate)
+    if (buf != NULL && buf->initDone && do_update)
     {
        update_screen(NOT_VALID);
        setcursor();
+       cursor_on();
        out_flush();
 #ifdef FEAT_GUI
        if (gui.in_use)
@@ -2773,6 +2784,16 @@ ex_nbkey(eap)
 ex_nbstart(eap)
     exarg_T    *eap;
 {
+#ifdef FEAT_GUI
+# if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)  \
+               && !defined(FEAT_GUI_W32)
+    if (gui.in_use)
+    {
+       EMSG(_("E838: netbeans is not supported with this GUI"));
+       return;
+    }
+# endif
+#endif
     netbeans_open((char *)eap->arg, FALSE);
 }
 
@@ -2880,7 +2901,7 @@ netbeans_beval_cb(
     char_u     *text;
     linenr_T   lnum;
     int                col;
-    char       buf[MAXPATHL * 2 + 25];
+    char       *buf;
     char_u     *p;
 
     /* Don't do anything when 'ballooneval' is off, messages scrolled the
@@ -2894,15 +2915,20 @@ netbeans_beval_cb(
         * length. */
        if (text != NULL && text[0] != NUL && STRLEN(text) < MAXPATHL)
        {
-           p = nb_quote(text);
-           if (p != NULL)
+           buf = (char *)alloc(MAXPATHL * 2 + 25);
+           if (buf != NULL)
            {
-               vim_snprintf(buf, sizeof(buf),
-                                      "0:balloonText=%d \"%s\"\n", r_cmdno, p);
-               vim_free(p);
+               p = nb_quote(text);
+               if (p != NULL)
+               {
+                   vim_snprintf(buf, MAXPATHL * 2 + 25,
+                                    "0:balloonText=%d \"%s\"\n", r_cmdno, p);
+                   vim_free(p);
+               }
+               nbdebug(("EVT: %s", buf));
+               nb_send(buf, "netbeans_beval_cb");
+               vim_free(buf);
            }
-           nbdebug(("EVT: %s", buf));
-           nb_send(buf, "netbeans_beval_cb");
        }
        vim_free(text);
     }
@@ -2937,7 +2963,7 @@ netbeans_gui_register(void)
     if (!NB_HAS_GUI || !NETBEANS_OPEN)
        return;
 
-# ifdef FEAT_GUI_MOTIF
+# ifdef FEAT_GUI_X11
     /* tell notifier we are interested in being called
      * when there is input on the editor connection socket
      */
@@ -3000,6 +3026,7 @@ netbeans_open(char *params, int doabort)
     changed_window_setting();
     update_screen(CLEAR);
     setcursor();
+    cursor_on();
     out_flush();
 #ifdef FEAT_GUI
     if (gui.in_use)
@@ -3027,7 +3054,7 @@ netbeans_send_disconnect()
     }
 }
 
-#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_W32) || defined(PROTO)
+#if defined(FEAT_GUI_X11) || defined(FEAT_GUI_W32) || defined(PROTO)
 /*
  * Tell netbeans that the window was moved or resized.
  */
@@ -3458,7 +3485,7 @@ netbeans_is_guarded(linenr_T top, linenr_T bot)
     return FALSE;
 }
 
-#if defined(FEAT_GUI_MOTIF) || defined(PROTO)
+#if defined(FEAT_GUI_X11) || defined(PROTO)
 /*
  * We have multiple signs to draw at the same location. Draw the
  * multi-sign indicator instead. This is the Motif version.
@@ -3487,7 +3514,7 @@ netbeans_draw_multisign_indicator(int row)
     XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+3, y++);
     XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+2, y);
 }
-#endif /* FEAT_GUI_MOTIF */
+#endif /* FEAT_GUI_X11 */
 
 #if defined(FEAT_GUI_GTK) && !defined(PROTO)
 /*
@@ -3902,14 +3929,12 @@ print_save_msg(buf, nchars)
     }
     else
     {
-       char_u ebuf[BUFSIZ];
+       char_u msgbuf[IOSIZE];
 
-       STRCPY(ebuf, (char_u *)_("E505: "));
-       STRCAT(ebuf, IObuff);
-       STRCAT(ebuf, (char_u *)_("is read-only (add ! to override)"));
-       STRCPY(IObuff, ebuf);
-       nbdebug(("    %s\n", ebuf ));
-       emsg(IObuff);
+       vim_snprintf((char *)msgbuf, IOSIZE,
+               _("E505: %s is read-only (add ! to override)"), IObuff);
+       nbdebug(("    %s\n", msgbuf));
+       emsg(msgbuf);
     }
 }
 
index b76e40d..80ada68 100644 (file)
  */
 static int     resel_VIsual_mode = NUL;        /* 'v', 'V', or Ctrl-V */
 static linenr_T        resel_VIsual_line_count;        /* number of lines */
-static colnr_T resel_VIsual_col;               /* nr of cols or end col */
+static colnr_T resel_VIsual_vcol;              /* nr of cols or end col */
+static int     VIsual_mode_orig = NUL;         /* type of Visual mode, that user entered */
 
 static int     restart_VIsual_select = 0;
 #endif
 
+#ifdef FEAT_EVAL
+static void    set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+#endif
 static int
-# ifdef __BORLANDC__
-_RTLENTRYF
-# endif
+#ifdef __BORLANDC__
+    _RTLENTRYF
+#endif
                nv_compare __ARGS((const void *s1, const void *s2));
 static int     find_command __ARGS((int cmdchar));
 static void    op_colon __ARGS((oparg_T *oap));
@@ -648,6 +652,14 @@ normal_cmd(oap, toplevel)
     dont_scroll = FALSE;       /* allow scrolling here */
 #endif
 
+#ifdef FEAT_EVAL
+    /* Set v:count here, when called from main() and not a stuffed
+     * command, so that v:count can be used in an expression mapping
+     * when there is no count. */
+    if (toplevel && stuff_empty())
+       set_vcount_ca(&ca, &set_prevcount);
+#endif
+
     /*
      * Get the command character from the user.
      */
@@ -689,6 +701,7 @@ normal_cmd(oap, toplevel)
        else
            c = 'c';
        msg_nowait = TRUE;      /* don't delay going to insert mode */
+       old_mapped_len = 0;     /* do go to Insert mode */
     }
 #endif
 
@@ -725,15 +738,7 @@ getcount:
             * command, so that v:count can be used in an expression mapping
             * right after the count. */
            if (toplevel && stuff_empty())
-           {
-               long count = ca.count0;
-
-               /* multiply with ca.opcount the same way as below */
-               if (ca.opcount != 0)
-                   count = ca.opcount * (count == 0 ? 1 : count);
-               set_vcount(count, count == 0 ? 1 : count, set_prevcount);
-               set_prevcount = FALSE;  /* only set v:prevcount once */
-           }
+               set_vcount_ca(&ca, &set_prevcount);
 #endif
            if (ctrl_w)
            {
@@ -957,8 +962,11 @@ getcount:
 #ifdef FEAT_CMDL_INFO
            need_flushbuf |= add_to_showcmd(ca.nchar);
 #endif
+           /* For "gn" from redo, need to get one more char to determine the
+            * operator */
            if (ca.nchar == 'r' || ca.nchar == '\'' || ca.nchar == '`'
-                                                     || ca.nchar == Ctrl_BSL)
+                                                      || ca.nchar == Ctrl_BSL
+                 || ((ca.nchar == 'n' || ca.nchar == 'N') && !stuff_empty()))
            {
                cp = &ca.extra_char;    /* need to get a third character */
                if (ca.nchar != 'r')
@@ -1080,6 +1088,8 @@ getcount:
                ca.nchar = ca.extra_char;
                idx = find_command(ca.cmdchar);
            }
+           else if ((ca.nchar == 'n' || ca.nchar == 'N') && ca.cmdchar == 'g')
+               ca.oap->op_type = get_op_type(*cp, NUL);
            else if (*cp == Ctrl_BSL)
            {
                long towait = (p_ttm >= 0 ? p_ttm : p_tm);
@@ -1199,7 +1209,16 @@ getcount:
     {
        clearop(oap);
 #ifdef FEAT_EVAL
-       set_reg_var('"');
+       {
+           int regname = 0;
+
+           /* Adjust the register according to 'clipboard', so that when
+            * "unnamed" is present it becomes '*' or '+' instead of '"'. */
+# ifdef FEAT_CLIPBOARD
+           adjust_clip_reg(&regname);
+# endif
+           set_reg_var(regname);
+       }
 #endif
     }
 
@@ -1386,6 +1405,26 @@ normal_end:
     opcount = ca.opcount;
 }
 
+#ifdef FEAT_EVAL
+/*
+ * Set v:count and v:count1 according to "cap".
+ * Set v:prevcount only when "set_prevcount" is TRUE.
+ */
+    static void
+set_vcount_ca(cap, set_prevcount)
+    cmdarg_T   *cap;
+    int                *set_prevcount;
+{
+    long count = cap->count0;
+
+    /* multiply with cap->opcount the same way as above */
+    if (cap->opcount != 0)
+       count = cap->opcount * (count == 0 ? 1 : count);
+    set_vcount(count, count == 0 ? 1 : count, *set_prevcount);
+    *set_prevcount = FALSE;  /* only set v:prevcount once */
+}
+#endif
+
 /*
  * Handle an operator after visual mode or when the movement is finished
  */
@@ -1404,7 +1443,7 @@ do_pending_operator(cap, old_col, gui_yank)
     /* The visual area is remembered for redo */
     static int     redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
     static linenr_T redo_VIsual_line_count; /* number of lines */
-    static colnr_T  redo_VIsual_col;       /* number of cols or end column */
+    static colnr_T  redo_VIsual_vcol;      /* number of cols or end column */
     static long            redo_VIsual_count;      /* count for Visual operator */
 # ifdef FEAT_VIRTUALEDIT
     int                    include_line_break = FALSE;
@@ -1419,7 +1458,7 @@ do_pending_operator(cap, old_col, gui_yank)
      * This could call do_pending_operator() recursively, but that's OK
      * because gui_yank will be TRUE for the nested call.
      */
-    if (clip_star.available
+    if ((clip_star.available || clip_plus.available)
            && oap->op_type != OP_NOP
            && !gui_yank
 # ifdef FEAT_VISUAL
@@ -1466,11 +1505,14 @@ do_pending_operator(cap, old_col, gui_yank)
        }
 #endif
 
-       /* only redo yank when 'y' flag is in 'cpoptions' */
-       /* never redo "zf" (define fold) */
+       /* Only redo yank when 'y' flag is in 'cpoptions'. */
+       /* Never redo "zf" (define fold). */
        if ((vim_strchr(p_cpo, CPO_YANK) != NULL || oap->op_type != OP_YANK)
 #ifdef FEAT_VISUAL
-               && (!VIsual_active || oap->motion_force)
+               && ((!VIsual_active || oap->motion_force)
+                   /* Also redo Operator-pending Visual mode mappings */
+                   || (VIsual_active && cap->cmdchar == ':'
+                                                && oap->op_type != OP_COLON))
 #endif
                && cap->cmdchar != 'D'
 #ifdef FEAT_FOLDING
@@ -1517,22 +1559,31 @@ do_pending_operator(cap, old_col, gui_yank)
 #ifdef FEAT_VISUAL
        if (redo_VIsual_busy)
        {
+           /* Redo of an operation on a Visual area. Use the same size from
+            * redo_VIsual_line_count and redo_VIsual_vcol. */
            oap->start = curwin->w_cursor;
            curwin->w_cursor.lnum += redo_VIsual_line_count - 1;
            if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
                curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
            VIsual_mode = redo_VIsual_mode;
-           if (VIsual_mode == 'v')
+           if (redo_VIsual_vcol == MAXCOL || VIsual_mode == 'v')
            {
-               if (redo_VIsual_line_count <= 1)
-                   curwin->w_cursor.col += redo_VIsual_col - 1;
+               if (VIsual_mode == 'v')
+               {
+                   if (redo_VIsual_line_count <= 1)
+                   {
+                       validate_virtcol();
+                       curwin->w_curswant =
+                                    curwin->w_virtcol + redo_VIsual_vcol - 1;
+                   }
+                   else
+                       curwin->w_curswant = redo_VIsual_vcol;
+               }
                else
-                   curwin->w_cursor.col = redo_VIsual_col;
-           }
-           if (redo_VIsual_col == MAXCOL)
-           {
-               curwin->w_curswant = MAXCOL;
-               coladvance((colnr_T)MAXCOL);
+               {
+                   curwin->w_curswant = MAXCOL;
+               }
+               coladvance(curwin->w_curswant);
            }
            cap->count0 = redo_VIsual_count;
            if (redo_VIsual_count != 0)
@@ -1548,6 +1599,11 @@ do_pending_operator(cap, old_col, gui_yank)
                curbuf->b_visual.vi_start = VIsual;
                curbuf->b_visual.vi_end = curwin->w_cursor;
                curbuf->b_visual.vi_mode = VIsual_mode;
+               if (VIsual_mode_orig != NUL)
+               {
+                   curbuf->b_visual.vi_mode = VIsual_mode_orig;
+                   VIsual_mode_orig = NUL;
+               }
                curbuf->b_visual.vi_curswant = curwin->w_curswant;
 # ifdef FEAT_EVAL
                curbuf->b_visual_mode_eval = VIsual_mode;
@@ -1678,7 +1734,7 @@ do_pending_operator(cap, old_col, gui_yank)
                    }
                }
                else if (redo_VIsual_busy)
-                   oap->end_vcol = oap->start_vcol + redo_VIsual_col - 1;
+                   oap->end_vcol = oap->start_vcol + redo_VIsual_vcol - 1;
                /*
                 * Correct oap->end.col and oap->start.col to be the
                 * upper-left and lower-right corner of the block area.
@@ -1703,13 +1759,22 @@ do_pending_operator(cap, old_col, gui_yank)
                 */
                resel_VIsual_mode = VIsual_mode;
                if (curwin->w_curswant == MAXCOL)
-                   resel_VIsual_col = MAXCOL;
-               else if (VIsual_mode == Ctrl_V)
-                   resel_VIsual_col = oap->end_vcol - oap->start_vcol + 1;
-               else if (oap->line_count > 1)
-                   resel_VIsual_col = oap->end.col;
+                   resel_VIsual_vcol = MAXCOL;
                else
-                   resel_VIsual_col = oap->end.col - oap->start.col + 1;
+               {
+                   if (VIsual_mode != Ctrl_V)
+                       getvvcol(curwin, &(oap->end),
+                                                 NULL, NULL, &oap->end_vcol);
+                   if (VIsual_mode == Ctrl_V || oap->line_count <= 1)
+                   {
+                       if (VIsual_mode != Ctrl_V)
+                           getvvcol(curwin, &(oap->start),
+                                               &oap->start_vcol, NULL, NULL);
+                       resel_VIsual_vcol = oap->end_vcol - oap->start_vcol + 1;
+                   }
+                   else
+                       resel_VIsual_vcol = oap->end_vcol;
+               }
                resel_VIsual_line_count = oap->line_count;
            }
 
@@ -1730,14 +1795,22 @@ do_pending_operator(cap, old_col, gui_yank)
            {
                /* Prepare for redoing.  Only use the nchar field for "r",
                 * otherwise it might be the second char of the operator. */
-               prep_redo(oap->regname, 0L, NUL, 'v',
-                               get_op_char(oap->op_type),
-                               get_extra_op_char(oap->op_type),
-                               oap->op_type == OP_REPLACE ? cap->nchar : NUL);
+               if (cap->cmdchar == 'g' && (cap->nchar == 'n'
+                                                       || cap->nchar == 'N'))
+                   /* "gn" and "gN" are a bit different */
+                   prep_redo(oap->regname, 0L, NUL, cap->cmdchar, cap->nchar,
+                                       get_op_char(oap->op_type),
+                                       get_extra_op_char(oap->op_type));
+               else if (cap->cmdchar != ':')
+                   prep_redo(oap->regname, 0L, NUL, 'v',
+                                       get_op_char(oap->op_type),
+                                       get_extra_op_char(oap->op_type),
+                                       oap->op_type == OP_REPLACE
+                                                         ? cap->nchar : NUL);
                if (!redo_VIsual_busy)
                {
                    redo_VIsual_mode = resel_VIsual_mode;
-                   redo_VIsual_col = resel_VIsual_col;
+                   redo_VIsual_vcol = resel_VIsual_vcol;
                    redo_VIsual_line_count = resel_VIsual_line_count;
                    redo_VIsual_count = cap->count0;
                }
@@ -1763,17 +1836,25 @@ do_pending_operator(cap, old_col, gui_yank)
                {
                    oap->inclusive = FALSE;
                    /* Try to include the newline, unless it's an operator
-                    * that works on lines only */
-                   if (*p_sel != 'o'
-                           && !op_on_lines(oap->op_type)
-                           && oap->end.lnum < curbuf->b_ml.ml_line_count)
+                    * that works on lines only. */
+                   if (*p_sel != 'o' && !op_on_lines(oap->op_type))
                    {
-                       ++oap->end.lnum;
-                       oap->end.col = 0;
+                       if (oap->end.lnum < curbuf->b_ml.ml_line_count)
+                       {
+                           ++oap->end.lnum;
+                           oap->end.col = 0;
 # ifdef FEAT_VIRTUALEDIT
-                       oap->end.coladd = 0;
+                           oap->end.coladd = 0;
 # endif
-                       ++oap->line_count;
+                           ++oap->line_count;
+                       }
+                       else
+                       {
+                           /* Cannot move below the last line, make the op
+                            * inclusive to tell the operation to include the
+                            * line break. */
+                           oap->inclusive = TRUE;
+                       }
                    }
                }
            }
@@ -1910,7 +1991,7 @@ do_pending_operator(cap, old_col, gui_yank)
                beep_flush();
            else
            {
-               (void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE);
+               (void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE, TRUE);
                auto_format(FALSE, TRUE);
            }
            break;
@@ -1920,7 +2001,10 @@ do_pending_operator(cap, old_col, gui_yank)
            VIsual_reselect = FALSE;        /* don't reselect now */
 #endif
            if (empty_region_error)
+           {
                vim_beep();
+               CancelRedo();
+           }
            else
            {
                (void)op_delete(oap);
@@ -1934,7 +2018,10 @@ do_pending_operator(cap, old_col, gui_yank)
            if (empty_region_error)
            {
                if (!gui_yank)
+               {
                    vim_beep();
+                   CancelRedo();
+               }
            }
            else
                (void)op_yank(oap, FALSE, !gui_yank);
@@ -1946,7 +2033,10 @@ do_pending_operator(cap, old_col, gui_yank)
            VIsual_reselect = FALSE;        /* don't reselect now */
 #endif
            if (empty_region_error)
+           {
                vim_beep();
+               CancelRedo();
+           }
            else
            {
                /* This is a new edit command, not a restart.  Need to
@@ -2008,7 +2098,10 @@ do_pending_operator(cap, old_col, gui_yank)
        case OP_LOWER:
        case OP_ROT13:
            if (empty_region_error)
+           {
                vim_beep();
+               CancelRedo();
+           }
            else
                op_tilde(oap);
            check_cursor_col();
@@ -2041,7 +2134,10 @@ do_pending_operator(cap, old_col, gui_yank)
 #endif
 #ifdef FEAT_VISUALEXTRA
            if (empty_region_error)
+           {
                vim_beep();
+               CancelRedo();
+           }
            else
            {
                /* This is a new edit command, not a restart.  Need to
@@ -2071,7 +2167,10 @@ do_pending_operator(cap, old_col, gui_yank)
 #ifdef FEAT_VISUALEXTRA
            if (empty_region_error)
 #endif
+           {
                vim_beep();
+               CancelRedo();
+           }
 #ifdef FEAT_VISUALEXTRA
            else
                op_replace(oap, cap->nchar);
@@ -2203,6 +2302,9 @@ op_function(oap)
 {
 #ifdef FEAT_EVAL
     char_u     *(argv[1]);
+# ifdef FEAT_VIRTUALEDIT
+    int                save_virtual_op = virtual_op;
+# endif
 
     if (*p_opfunc == NUL)
        EMSG(_("E774: 'operatorfunc' is empty"));
@@ -2221,7 +2323,18 @@ op_function(oap)
            argv[0] = (char_u *)"line";
        else
            argv[0] = (char_u *)"char";
+
+# ifdef FEAT_VIRTUALEDIT
+       /* Reset virtual_op so that 'virtualedit' can be changed in the
+        * function. */
+       virtual_op = MAYBE;
+# endif
+
        (void)call_func_retnr(p_opfunc, 1, argv, FALSE);
+
+# ifdef FEAT_VIRTUALEDIT
+       virtual_op = save_virtual_op;
+# endif
     }
 #else
     EMSG(_("E775: Eval feature not available"));
@@ -2334,7 +2447,31 @@ do_mouse(oap, c, dir, count, fixindent)
                return FALSE;
        }
 
-    which_button = get_mouse_button(KEY2TERMCAP1(c), &is_click, &is_drag);
+    for (;;)
+    {
+       which_button = get_mouse_button(KEY2TERMCAP1(c), &is_click, &is_drag);
+       if (is_drag)
+       {
+           /* If the next character is the same mouse event then use that
+            * one. Speeds up dragging the status line. */
+           if (vpeekc() != NUL)
+           {
+               int nc;
+               int save_mouse_row = mouse_row;
+               int save_mouse_col = mouse_col;
+
+               /* Need to get the character, peeking doesn't get the actual
+                * one. */
+               nc = safe_vgetc();
+               if (c == nc)
+                   continue;
+               vungetc(nc);
+               mouse_row = save_mouse_row;
+               mouse_col = save_mouse_col;
+           }
+       }
+       break;
+    }
 
 #ifdef FEAT_MOUSESHAPE
     /* May have stopped dragging the status or separator line.  The pointer is
@@ -2377,7 +2514,7 @@ do_mouse(oap, c, dir, count, fixindent)
 
 #ifndef FEAT_VISUAL
     /*
-     * ALT is only used for starging/extending Visual mode.
+     * ALT is only used for starting/extending Visual mode.
      */
     if ((mod_mask & MOD_MASK_ALT))
        return FALSE;
@@ -4342,7 +4479,7 @@ find_decl(ptr, len, locally, thisblock, searchflags)
            break;
        }
 #ifdef FEAT_COMMENTS
-       if (get_leader_len(ml_get_curline(), NULL, FALSE) > 0)
+       if (get_leader_len(ml_get_curline(), NULL, FALSE, TRUE) > 0)
        {
            /* Ignore this line, continue at start of next line. */
            ++curwin->w_cursor.lnum;
@@ -4408,7 +4545,7 @@ nv_screengo(oap, dir, dist)
     int                width2;         /* test width for wrapped screen line */
 
     oap->motion_type = MCHAR;
-    oap->inclusive = FALSE;
+    oap->inclusive = (curwin->w_curswant == MAXCOL);
 
     col_off1 = curwin_col_off();
     col_off2 = col_off1 - curwin_col_off2();
@@ -4501,6 +4638,7 @@ nv_screengo(oap, dir, dist)
                }
                curwin->w_cursor.lnum++;
                curwin->w_curswant %= width2;
+               linelen = linetabsize(ml_get_curline());
            }
        }
       }
@@ -4545,11 +4683,10 @@ nv_screengo(oap, dir, dist)
 nv_mousescroll(cap)
     cmdarg_T   *cap;
 {
-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
+# ifdef FEAT_WINDOWS
     win_T *old_curwin = curwin;
 
-    /* Currently we only get the mouse coordinates in the GUI. */
-    if (gui.in_use && mouse_row >= 0 && mouse_col >= 0)
+    if (mouse_row >= 0 && mouse_col >= 0)
     {
        int row, col;
 
@@ -4594,7 +4731,7 @@ nv_mousescroll(cap)
     }
 # endif
 
-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
+# ifdef FEAT_WINDOWS
     curwin->w_redr_status = TRUE;
 
     curwin = old_curwin;
@@ -4948,7 +5085,7 @@ dozet:
                }
                break;
 
-               /* "zE": erease all folds */
+               /* "zE": erase all folds */
     case 'E':  if (foldmethodIsManual(curwin))
                {
                    clearFolding(curwin);
@@ -5285,6 +5422,7 @@ nv_colon(cap)
     cmdarg_T  *cap;
 {
     int            old_p_im;
+    int            cmd_result;
 
 #ifdef FEAT_VISUAL
     if (VIsual_active)
@@ -5316,7 +5454,7 @@ nv_colon(cap)
        old_p_im = p_im;
 
        /* get a command line and execute it */
-       do_cmdline(NULL, getexline, NULL,
+       cmd_result = do_cmdline(NULL, getexline, NULL,
                            cap->oap->op_type != OP_NOP ? DOCMD_KEEPLINE : 0);
 
        /* If 'insertmode' changed, enter or exit Insert mode */
@@ -5328,12 +5466,17 @@ nv_colon(cap)
                restart_edit = 0;
        }
 
-       /* The start of the operator may have become invalid by the Ex
-        * command. */
-       if (cap->oap->op_type != OP_NOP
+       if (cmd_result == FAIL)
+           /* The Ex command failed, do not execute the operator. */
+           clearop(cap->oap);
+       else if (cap->oap->op_type != OP_NOP
                && (cap->oap->start.lnum > curbuf->b_ml.ml_line_count
                    || cap->oap->start.col >
-                              (colnr_T)STRLEN(ml_get(cap->oap->start.lnum))))
+                              (colnr_T)STRLEN(ml_get(cap->oap->start.lnum))
+                   || did_emsg
+                   ))
+           /* The start of the operator has become invalid by the Ex command.
+            */
            clearopbeep(cap->oap);
     }
 }
@@ -5666,8 +5809,13 @@ nv_ident(cap)
        else if (cmdchar == '#')
            aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
        else if (tag_cmd)
-           /* Don't escape spaces and Tabs in a tag with a backslash */
-           aux_ptr = (char_u *)"\\|\"\n[";
+       {
+           if (curbuf->b_help)
+               /* ":help" handles unescaped argument */
+               aux_ptr = (char_u *)"";
+           else
+               aux_ptr = (char_u *)"\\|\"\n[";
+       }
        else
            aux_ptr = (char_u *)"\\|\"\n*?[";
 
@@ -6980,7 +7128,18 @@ nv_replace(cap)
            for (n = cap->count1; n > 0; --n)
            {
                State = REPLACE;
-               ins_char(cap->nchar);
+               if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
+               {
+                   int c = ins_copychar(curwin->w_cursor.lnum
+                                          + (cap->nchar == Ctrl_Y ? -1 : 1));
+                   if (c != NUL)
+                       ins_char(c);
+                   else
+                       /* will be decremented further down */
+                       ++curwin->w_cursor.col;
+               }
+               else
+                   ins_char(cap->nchar);
                State = old_State;
                if (cap->ncharC1 != 0)
                    ins_char(cap->ncharC1);
@@ -7002,7 +7161,15 @@ nv_replace(cap)
                 * line will be changed.
                 */
                ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE);
-               ptr[curwin->w_cursor.col] = cap->nchar;
+               if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
+               {
+                 int c = ins_copychar(curwin->w_cursor.lnum
+                                          + (cap->nchar == Ctrl_Y ? -1 : 1));
+                 if (c != NUL)
+                   ptr[curwin->w_cursor.col] = c;
+               }
+               else
+                   ptr[curwin->w_cursor.col] = cap->nchar;
                if (p_sm && msg_silent == 0)
                    showmatch(cap->nchar);
                ++curwin->w_cursor.col;
@@ -7103,6 +7270,7 @@ nv_Replace(cap)
     {
        cap->cmdchar = 'c';
        cap->nchar = NUL;
+       VIsual_mode_orig = VIsual_mode; /* remember original area for gv */
        VIsual_mode = 'V';
        nv_operator(cap);
     }
@@ -7298,11 +7466,14 @@ v_visop(cap)
     static char_u trans[] = "YyDdCcxdXdAAIIrr";
 
     /* Uppercase means linewise, except in block mode, then "D" deletes till
-     * the end of the line, and "C" replaces til EOL */
+     * the end of the line, and "C" replaces till EOL */
     if (isupper(cap->cmdchar))
     {
        if (VIsual_mode != Ctrl_V)
+       {
+           VIsual_mode_orig = VIsual_mode;
            VIsual_mode = 'V';
+       }
        else if (cap->cmdchar == 'C' || cap->cmdchar == 'D')
            curwin->w_curswant = MAXCOL;
     }
@@ -7322,7 +7493,10 @@ nv_subst(cap)
     if (VIsual_active) /* "vs" and "vS" are the same as "vc" */
     {
        if (cap->cmdchar == 'S')
+       {
+           VIsual_mode_orig = VIsual_mode;
            VIsual_mode = 'V';
+       }
        cap->cmdchar = 'c';
        nv_operator(cap);
     }
@@ -7401,7 +7575,7 @@ nv_gomark(cap)
     pos_T      *pos;
     int                c;
 #ifdef FEAT_FOLDING
-    linenr_T   lnum = curwin->w_cursor.lnum;
+    pos_T      old_cursor = curwin->w_cursor;
     int                old_KeyTyped = KeyTyped;    /* getting file may reset it */
 #endif
 
@@ -7430,7 +7604,8 @@ nv_gomark(cap)
 #endif
 #ifdef FEAT_FOLDING
     if (cap->oap->op_type == OP_NOP
-           && (pos == (pos_T *)-1 || lnum != curwin->w_cursor.lnum)
+           && pos != NULL
+           && (pos == (pos_T *)-1 || !equalpos(old_cursor, *pos))
            && (fdo_flags & FDO_MARK)
            && old_KeyTyped)
        foldOpenCursor();
@@ -7551,13 +7726,9 @@ nv_visual(cap)
     else                   /* start Visual mode */
     {
        check_visual_highlight();
-       if (cap->count0)                    /* use previously selected part */
+       if (cap->count0 > 0 && resel_VIsual_mode != NUL)
        {
-           if (resel_VIsual_mode == NUL)   /* there is none */
-           {
-               beep_flush();
-               return;
-           }
+           /* use previously selected part */
            VIsual = curwin->w_cursor;
 
            VIsual_active = TRUE;
@@ -7585,12 +7756,16 @@ nv_visual(cap)
            if (VIsual_mode == 'v')
            {
                if (resel_VIsual_line_count <= 1)
-                   curwin->w_cursor.col += resel_VIsual_col * cap->count0 - 1;
+               {
+                   validate_virtcol();
+                   curwin->w_curswant = curwin->w_virtcol
+                                       + resel_VIsual_vcol * cap->count0 - 1;
+               }
                else
-                   curwin->w_cursor.col = resel_VIsual_col;
-               check_cursor_col();
+                   curwin->w_curswant = resel_VIsual_vcol;
+               coladvance(curwin->w_curswant);
            }
-           if (resel_VIsual_col == MAXCOL)
+           if (resel_VIsual_vcol == MAXCOL)
            {
                curwin->w_curswant = MAXCOL;
                coladvance((colnr_T)MAXCOL);
@@ -7599,7 +7774,7 @@ nv_visual(cap)
            {
                validate_virtcol();
                curwin->w_curswant = curwin->w_virtcol
-                                        + resel_VIsual_col * cap->count0 - 1;
+                                       + resel_VIsual_vcol * cap->count0 - 1;
                coladvance(curwin->w_curswant);
            }
            else
@@ -7612,6 +7787,16 @@ nv_visual(cap)
                /* start Select mode when 'selectmode' contains "cmd" */
                may_start_select('c');
            n_start_visual_mode(cap->cmdchar);
+           if (VIsual_mode != 'V' && *p_sel == 'e')
+               ++cap->count1;  /* include one more char */
+           if (cap->count0 > 0 && --cap->count1 > 0)
+           {
+               /* With a count select that many characters or lines. */
+               if (VIsual_mode == 'v' || VIsual_mode == Ctrl_V)
+                   nv_right(cap);
+               else if (VIsual_mode == 'V')
+                   nv_down(cap);
+           }
        }
     }
 }
@@ -7659,7 +7844,10 @@ n_start_visual_mode(c)
      * virtualedit.  Recalculate curwin->w_cursor to avoid bad hilighting.
      */
     if (c == Ctrl_V && (ve_flags & VE_BLOCK) && gchar_cursor() == TAB)
+    {
+       validate_virtcol();
        coladvance(curwin->w_virtcol);
+    }
 #endif
     VIsual = curwin->w_cursor;
 
@@ -7870,6 +8058,18 @@ nv_g_cmd(cap)
        break;
 #endif /* FEAT_VISUAL */
 
+    /* "gn", "gN" visually select next/previous search match
+     * "gn" selects next match
+     * "gN" selects previous match
+     */
+    case 'N':
+    case 'n':
+#ifdef FEAT_VISUAL
+       if (!current_search(cap->count1, cap->nchar == 'n'))
+#endif
+           clearopbeep(oap);
+       break;
+
     /*
      * "gj" and "gk" two new funny movement keys -- up and down
      * movement based on *screen* line rather than *file* line.
@@ -8020,6 +8220,11 @@ nv_g_cmd(cap)
                        i += ((curwin->w_virtcol - width1) / width2 + 1)
                                                                     * width2;
                    coladvance((colnr_T)i);
+
+                   /* Make sure we stick in this column. */
+                   validate_virtcol();
+                   curwin->w_curswant = curwin->w_virtcol;
+                   curwin->w_set_curswant = FALSE;
 #if defined(FEAT_LINEBREAK) || defined(FEAT_MBYTE)
                    if (curwin->w_cursor.col > 0 && curwin->w_p_wrap)
                    {
@@ -8028,7 +8233,6 @@ nv_g_cmd(cap)
                         * the end of the line.  We do not want to advance to
                         * the next screen line.
                         */
-                       validate_virtcol();
                        if (curwin->w_virtcol > (colnr_T)i)
                            --curwin->w_cursor.col;
                    }
@@ -8274,10 +8478,12 @@ nv_g_cmd(cap)
 
 #ifdef FEAT_WINDOWS
     case 't':
-       goto_tabpage((int)cap->count0);
+       if (!checkclearop(oap))
+           goto_tabpage((int)cap->count0);
        break;
     case 'T':
-       goto_tabpage(-(int)cap->count1);
+       if (!checkclearop(oap))
+           goto_tabpage(-(int)cap->count1);
        break;
 #endif
 
@@ -8479,7 +8685,9 @@ nv_lineop(cap)
     cap->oap->motion_type = MLINE;
     if (cursor_down(cap->count1 - 1L, cap->oap->op_type == OP_NOP) == FAIL)
        clearopbeep(cap->oap);
-    else if (  cap->oap->op_type == OP_DELETE
+    else if (  (cap->oap->op_type == OP_DELETE /* only with linewise motions */
+               && cap->oap->motion_force != 'v'
+               && cap->oap->motion_force != Ctrl_V)
            || cap->oap->op_type == OP_LSHIFT
            || cap->oap->op_type == OP_RSHIFT)
        beginline(BL_SOL | BL_FIX);
@@ -8524,7 +8732,7 @@ nv_pipe(cap)
     else
        curwin->w_curswant = 0;
     /* keep curswant at the column where we wanted to go, not where
-       we ended; differs if line is too short */
+     * we ended; differs if line is too short */
     curwin->w_set_curswant = FALSE;
 }
 
@@ -8601,7 +8809,7 @@ nv_wordcmd(cap)
                 * at first, but it's really more what we mean when we say
                 * 'cw'.
                 * Another strangeness: When standing on the end of a word
-                * "ce" will change until the end of the next wordt, but "cw"
+                * "ce" will change until the end of the next word, but "cw"
                 * will change only one character! This is done by setting
                 * flag.
                 */
@@ -8736,7 +8944,7 @@ unadjust_for_sel()
        {
            --pp->col;
 #ifdef FEAT_MBYTE
-           mb_adjustpos(pp);
+           mb_adjustpos(curbuf, pp);
 #endif
        }
        else if (pp->lnum > 1)
@@ -8947,7 +9155,7 @@ nv_edit(cap)
                {
                    int save_State = State;
 
-                   /* Pretent Insert mode here to allow the cursor on the
+                   /* Pretend Insert mode here to allow the cursor on the
                     * character past the end of the line */
                    State = INSERT;
                    coladvance((colnr_T)MAXCOL);
@@ -8986,7 +9194,7 @@ nv_edit(cap)
        {
            int save_State = State;
 
-           /* Pretent Insert mode here to allow the cursor on the
+           /* Pretend Insert mode here to allow the cursor on the
             * character past the end of the line */
            State = INSERT;
            coladvance(getviscol());
@@ -9205,7 +9413,7 @@ nv_join(cap)
        {
            prep_redo(cap->oap->regname, cap->count0,
                         NUL, cap->cmdchar, NUL, NUL, cap->nchar);
-           (void)do_join(cap->count0, cap->nchar == NUL, TRUE);
+           (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE);
        }
     }
 }
@@ -9261,14 +9469,15 @@ nv_put(cap)
 # ifdef FEAT_CLIPBOARD
            adjust_clip_reg(&regname);
 # endif
-           if (regname == 0 || VIM_ISDIGIT(regname)
+           if (regname == 0 || regname == '"'
+                                    || VIM_ISDIGIT(regname) || regname == '-'
 # ifdef FEAT_CLIPBOARD
                    || (clip_unnamed && (regname == '*' || regname == '+'))
 # endif
 
                    )
            {
-               /* the delete is going to overwrite the register we want to
+               /* The delete is going to overwrite the register we want to
                 * put, save it first. */
                reg1 = get_register(regname, TRUE);
            }
index 98bd2d1..3989802 100644 (file)
--- a/src/ops.c
+++ b/src/ops.c
@@ -112,6 +112,9 @@ static void may_set_selection __ARGS((void));
 # endif
 #endif
 static void    dis_msg __ARGS((char_u *p, int skip_esc));
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+static char_u  *skip_comment __ARGS((char_u *line, int process, int include_space, int *is_comment));
+#endif
 #ifdef FEAT_VISUAL
 static void    block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
 #endif
@@ -264,6 +267,10 @@ op_shift(oap, curs_top, amount)
     }
 
     changed_lines(oap->start.lnum, 0, oap->end.lnum + 1, 0L);
+#ifdef FEAT_FOLDING
+    /* The cursor line is not in a closed fold */
+    foldOpenCursor();
+#endif
 
 #ifdef FEAT_VISUAL
     if (oap->block_mode)
@@ -329,7 +336,7 @@ shift_line(left, round, amount, call_changed_bytes)
 {
     int                count;
     int                i, j;
-    int                p_sw = (int)curbuf->b_p_sw;
+    int                p_sw = (int)get_sw_value();
 
     count = get_indent();      /* get current indent */
 
@@ -385,7 +392,7 @@ shift_block(oap, amount)
     int                        total;
     char_u             *newp, *oldp;
     int                        oldcol = curwin->w_cursor.col;
-    int                        p_sw = (int)curbuf->b_p_sw;
+    int                        p_sw = (int)get_sw_value();
     int                        p_ts = (int)curbuf->b_p_ts;
     struct block_def   bd;
     int                        incr;
@@ -395,7 +402,7 @@ shift_block(oap, amount)
 #ifdef FEAT_RIGHTLEFT
     int                        old_p_ri = p_ri;
 
-    p_ri = 0;                  /* don't want revins in ident */
+    p_ri = 0;                  /* don't want revins in indent */
 #endif
 
     State = INSERT;            /* don't want REPLACE for State */
@@ -959,8 +966,14 @@ get_register(name, copy)
      * selection too. */
     if (name == '*' && clip_star.available)
     {
-       if (clip_isautosel())
-           clip_update_selection();
+       if (clip_isautosel_star())
+           clip_update_selection(&clip_star);
+       may_get_selection(name);
+    }
+    if (name == '+' && clip_plus.available)
+    {
+       if (clip_isautosel_plus())
+           clip_update_selection(&clip_plus);
        may_get_selection(name);
     }
 #endif
@@ -1008,6 +1021,19 @@ put_register(name, reg)
     may_set_selection();
 # endif
 }
+
+    void
+free_register(reg)
+    void       *reg;
+{
+    struct yankreg tmp;
+
+    tmp = *y_current;
+    *y_current = *(struct yankreg *)reg;
+    free_yank_all();
+    vim_free(reg);
+    *y_current = tmp;
+}
 #endif
 
 #if defined(FEAT_MOUSE) || defined(PROTO)
@@ -1584,9 +1610,11 @@ cmdline_paste_reg(regname, literally, remcr)
 adjust_clip_reg(rp)
     int                *rp;
 {
-    /* If no reg. specified, and "unnamed" is in 'clipboard', use '*' reg. */
-    if (*rp == 0 && clip_unnamed)
-       *rp = '*';
+    /* If no reg. specified, and "unnamed" or "unnamedplus" is in 'clipboard',
+     * use '*' or '+' reg, respectively. "unnamedplus" prevails. */
+    if (*rp == 0 && clip_unnamed != 0)
+       *rp = ((clip_unnamed & CLIP_UNNAMED_PLUS) && clip_plus.available)
+                                                                 ? '+' : '*';
     if (!clip_star.available && *rp == '*')
        *rp = 0;
     if (!clip_plus.available && *rp == '+')
@@ -1612,6 +1640,7 @@ op_delete(oap)
 #endif
     linenr_T           old_lcount = curbuf->b_ml.ml_line_count;
     int                        did_yank = FALSE;
+    int                        orig_regname = oap->regname;
 
     if (curbuf->b_ml.ml_flags & ML_EMPTY)          /* nothing to do */
        return OK;
@@ -1646,9 +1675,12 @@ op_delete(oap)
            && !oap->block_mode
 #endif
            && oap->line_count > 1
+           && oap->motion_force == NUL
            && oap->op_type == OP_DELETE)
     {
-       ptr = ml_get(oap->end.lnum) + oap->end.col + oap->inclusive;
+       ptr = ml_get(oap->end.lnum) + oap->end.col;
+       if (*ptr != NUL)
+           ptr += oap->inclusive;
        ptr = skipwhite(ptr);
        if (*ptr == NUL && inindent(0))
            oap->motion_type = MLINE;
@@ -1701,8 +1733,10 @@ op_delete(oap)
        /*
         * Put deleted text into register 1 and shift number registers if the
         * delete contains a line break, or when a regname has been specified.
+        * Use the register name from before adjust_clip_reg() may have
+        * changed it.
         */
-       if (oap->regname != 0 || oap->motion_type == MLINE
+       if (orig_regname != 0 || oap->motion_type == MLINE
                                   || oap->line_count > 1 || oap->use_reg_one)
        {
            y_current = &y_regs[9];
@@ -1715,9 +1749,14 @@ op_delete(oap)
                did_yank = TRUE;
        }
 
-       /* Yank into small delete register when no register specified and the
-        * delete is within one line. */
-       if (oap->regname == 0 && oap->motion_type != MLINE
+       /* Yank into small delete register when no named register specified
+        * and the delete is within one line. */
+       if ((
+#ifdef FEAT_CLIPBOARD
+           ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
+           ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
+#endif
+           oap->regname == 0) && oap->motion_type != MLINE
                                                      && oap->line_count == 1)
        {
            oap->regname = '-';
@@ -1918,38 +1957,66 @@ op_delete(oap)
                    curwin->w_cursor.coladd = 0;
            }
 #endif
-           (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+           if (oap->op_type == OP_DELETE
+                   && oap->inclusive
+                   && oap->end.lnum == curbuf->b_ml.ml_line_count
+                   && n > (int)STRLEN(ml_get(oap->end.lnum)))
+           {
+               /* Special case: gH<Del> deletes the last line. */
+               del_lines(1L, FALSE);
+           }
+           else
+           {
+               (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
 #ifdef FEAT_VISUAL
                                    && !oap->is_VIsual
 #endif
                                                        );
+           }
        }
        else                            /* delete characters between lines */
        {
            pos_T   curpos;
+           int     delete_last_line;
 
            /* save deleted and changed lines for undo */
            if (u_save((linenr_T)(curwin->w_cursor.lnum - 1),
                 (linenr_T)(curwin->w_cursor.lnum + oap->line_count)) == FAIL)
                return FAIL;
 
+           delete_last_line = (oap->end.lnum == curbuf->b_ml.ml_line_count);
            truncate_line(TRUE);        /* delete from cursor to end of line */
 
            curpos = curwin->w_cursor;  /* remember curwin->w_cursor */
            ++curwin->w_cursor.lnum;
            del_lines((long)(oap->line_count - 2), FALSE);
 
-           /* delete from start of line until op_end */
-           curwin->w_cursor.col = 0;
-           (void)del_bytes((long)(oap->end.col + 1 - !oap->inclusive),
-                                       !virtual_op, oap->op_type == OP_DELETE
+           if (delete_last_line)
+               oap->end.lnum = curbuf->b_ml.ml_line_count;
+
+           n = (oap->end.col + 1 - !oap->inclusive);
+           if (oap->inclusive && delete_last_line
+                   && n > (int)STRLEN(ml_get(oap->end.lnum)))
+           {
+               /* Special case: gH<Del> deletes the last line. */
+               del_lines(1L, FALSE);
+               curwin->w_cursor = curpos;      /* restore curwin->w_cursor */
+               if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
+                   curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+           }
+           else
+           {
+               /* delete from start of line until op_end */
+               curwin->w_cursor.col = 0;
+               (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
 #ifdef FEAT_VISUAL
                                        && !oap->is_VIsual
 #endif
                                                            );
-           curwin->w_cursor = curpos;          /* restore curwin->w_cursor */
-
-           (void)do_join(2, FALSE, FALSE);
+               curwin->w_cursor = curpos;      /* restore curwin->w_cursor */
+           }
+           if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+               (void)do_join(2, FALSE, FALSE, FALSE);
        }
     }
 
@@ -2144,7 +2211,8 @@ op_replace(oap, c)
                {
                    /* This is slow, but it handles replacing a single-byte
                     * with a multi-byte and the other way around. */
-                   oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n);
+                   if (curwin->w_cursor.lnum == oap->end.lnum)
+                       oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n);
                    n = State;
                    State = REPLACE;
                    ins_char(c);
@@ -2361,8 +2429,13 @@ swapchars(op_type, pos, length)
     {
 # ifdef FEAT_MBYTE
        if (has_mbyte)
+       {
+           int len = (*mb_ptr2len)(ml_get_pos(pos));
+
            /* we're counting bytes, not characters */
-           todo -= (*mb_ptr2len)(ml_get_pos(pos)) - 1;
+           if (len > 0)
+               todo -= len - 1;
+       }
 # endif
        did_change |= swapchar(op_type, pos);
        if (inc(pos) == -1)    /* at end of file */
@@ -2569,7 +2642,8 @@ op_insert(oap, count1)
        firstline = ml_get(oap->start.lnum) + bd.textcol;
        if (oap->op_type == OP_APPEND)
            firstline += bd.textlen;
-       if ((ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
+       if (pre_textlen >= 0
+                    && (ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
        {
            ins_text = vim_strnsave(firstline, (int)ins_len);
            if (ins_text != NULL)
@@ -2822,7 +2896,7 @@ free_yank_all()
  * register and then concatenate the old and the new one (so we keep the old
  * one in case of out-of-memory).
  *
- * return FAIL for failure, OK otherwise
+ * Return FAIL for failure, OK otherwise.
  */
     int
 op_yank(oap, deleting, mess)
@@ -2842,6 +2916,9 @@ op_yank(oap, deleting, mess)
     char_u             *p;
     char_u             *pnew;
     struct block_def   bd;
+#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+    int                        did_star = FALSE;
+#endif
 
                                    /* check for read-only register */
     if (oap->regname != 0 && !valid_yank_reg(oap->regname, TRUE))
@@ -3000,6 +3077,8 @@ op_yank(oap, deleting, mess)
                        }
 #endif
                    }
+                   if (endcol == MAXCOL)
+                       endcol = (colnr_T)STRLEN(p);
                    if (startcol > endcol
 #ifdef FEAT_VIRTUALEDIT
                            || is_oneChar
@@ -3008,8 +3087,6 @@ op_yank(oap, deleting, mess)
                        bd.textlen = 0;
                    else
                    {
-                       if (endcol == MAXCOL)
-                           endcol = (colnr_T)STRLEN(p);
                        bd.textlen = endcol - startcol + oap->inclusive;
                    }
                    bd.textstart = p + startcol;
@@ -3115,7 +3192,8 @@ op_yank(oap, deleting, mess)
      */
     if (clip_star.available
            && (curr == &(y_regs[STAR_REGISTER])
-               || (!deleting && oap->regname == 0 && clip_unnamed)))
+               || (!deleting && oap->regname == 0
+                                          && (clip_unnamed & CLIP_UNNAMED))))
     {
        if (curr != &(y_regs[STAR_REGISTER]))
            /* Copy the text from register 0 to the clipboard register. */
@@ -3123,6 +3201,9 @@ op_yank(oap, deleting, mess)
 
        clip_own_selection(&clip_star);
        clip_gen_set_selection(&clip_star);
+# ifdef FEAT_X11
+       did_star = TRUE;
+# endif
     }
 
 # ifdef FEAT_X11
@@ -3130,12 +3211,19 @@ op_yank(oap, deleting, mess)
      * If we were yanking to the '+' register, send result to selection.
      * Also copy to the '*' register, in case auto-select is off.
      */
-    else if (clip_plus.available && curr == &(y_regs[PLUS_REGISTER]))
+    if (clip_plus.available
+           && (curr == &(y_regs[PLUS_REGISTER])
+               || (!deleting && oap->regname == 0
+                                     && (clip_unnamed & CLIP_UNNAMED_PLUS))))
     {
-       /* No need to copy to * register upon 'unnamed' now - see below */
+       if (curr != &(y_regs[PLUS_REGISTER]))
+           /* Copy the text from register 0 to the clipboard register. */
+           copy_yank_reg(&(y_regs[PLUS_REGISTER]));
+
        clip_own_selection(&clip_plus);
        clip_gen_set_selection(&clip_plus);
-       if (!clip_isautosel())
+       if (!clip_isautosel_star() && !did_star
+                                         && curr == &(y_regs[PLUS_REGISTER]))
        {
            copy_yank_reg(&(y_regs[STAR_REGISTER]));
            clip_own_selection(&clip_star);
@@ -3286,6 +3374,12 @@ do_put(regname, dir, count, flags)
            return;
     }
 
+#ifdef FEAT_AUTOCMD
+    /* Autocommands may be executed when saving lines for undo, which may make
+     * y_array invalid.  Start undo now to avoid that. */
+    u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1);
+#endif
+
     if (insert_string != NULL)
     {
        y_type = MCHAR;
@@ -3293,8 +3387,8 @@ do_put(regname, dir, count, flags)
        if (regname == '=')
        {
            /* For the = register we need to split the string at NL
-            * characters. */
-           /* Loop twice: count the number of lines and save them. */
+            * characters.
+            * Loop twice: count the number of lines and save them. */
            for (;;)
            {
                y_size = 0;
@@ -3310,7 +3404,7 @@ do_put(regname, dir, count, flags)
                        if (y_array != NULL)
                            *ptr = NUL;
                        ++ptr;
-                       /* A trailing '\n' makes the string linewise */
+                       /* A trailing '\n' makes the register linewise. */
                        if (*ptr == NUL)
                        {
                            y_type = MLINE;
@@ -3412,7 +3506,9 @@ do_put(regname, dir, count, flags)
 #endif
        if (dir == FORWARD)
            ++lnum;
-       if (u_save(lnum - 1, lnum) == FAIL)
+       /* In an empty buffer the empty line is going to be replaced, include
+        * it in the saved lines. */
+       if ((bufempty() ? u_save(0, 2) : u_save(lnum - 1, lnum)) == FAIL)
            goto end;
 #ifdef FEAT_FOLDING
        if (dir == FORWARD)
@@ -3979,7 +4075,12 @@ ex_display(eap)
     for (i = -1; i < NUM_REGISTERS && !got_int; ++i)
     {
        name = get_register_name(i);
-       if (arg != NULL && vim_strchr(arg, name) == NULL)
+       if (arg != NULL && vim_strchr(arg, name) == NULL
+#ifdef ONE_CLIPBOARD
+           /* Star register and plus register contain the same thing. */
+               && (name != '*' || vim_strchr(arg, '+') == NULL)
+#endif
+               )
            continue;       /* did not ask for this register */
 
 #ifdef FEAT_CLIPBOARD
@@ -4140,22 +4241,101 @@ dis_msg(p, skip_esc)
     ui_breakcheck();
 }
 
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+/*
+ * If "process" is TRUE and the line begins with a comment leader (possibly
+ * after some white space), return a pointer to the text after it. Put a boolean
+ * value indicating whether the line ends with an unclosed comment in
+ * "is_comment".
+ * line - line to be processed,
+ * process - if FALSE, will only check whether the line ends with an unclosed
+ *          comment,
+ * include_space - whether to also skip space following the comment leader,
+ * is_comment - will indicate whether the current line ends with an unclosed
+ *             comment.
+ */
+    static char_u *
+skip_comment(line, process, include_space, is_comment)
+    char_u   *line;
+    int      process;
+    int             include_space;
+    int      *is_comment;
+{
+    char_u *comment_flags = NULL;
+    int    lead_len;
+    int    leader_offset = get_last_leader_offset(line, &comment_flags);
+
+    *is_comment = FALSE;
+    if (leader_offset != -1)
+    {
+       /* Let's check whether the line ends with an unclosed comment.
+        * If the last comment leader has COM_END in flags, there's no comment.
+        */
+       while (*comment_flags)
+       {
+           if (*comment_flags == COM_END
+                   || *comment_flags == ':')
+               break;
+           ++comment_flags;
+       }
+       if (*comment_flags != COM_END)
+           *is_comment = TRUE;
+    }
+
+    if (process == FALSE)
+       return line;
+
+    lead_len = get_leader_len(line, &comment_flags, FALSE, include_space);
+
+    if (lead_len == 0)
+       return line;
+
+    /* Find:
+     * - COM_END,
+     * - colon,
+     * whichever comes first.
+     */
+    while (*comment_flags)
+    {
+       if (*comment_flags == COM_END
+               || *comment_flags == ':')
+       {
+           break;
+       }
+       ++comment_flags;
+    }
+
+    /* If we found a colon, it means that we are not processing a line
+     * starting with a closing part of a three-part comment. That's good,
+     * because we don't want to remove those as this would be annoying.
+     */
+    if (*comment_flags == ':' || *comment_flags == NUL)
+       line += lead_len;
+
+    return line;
+}
+#endif
+
 /*
  * Join 'count' lines (minimal 2) at cursor position.
  * When "save_undo" is TRUE save lines for undo first.
+ * Set "use_formatoptions" to FALSE when e.g. processing
+ * backspace and comment leaders should not be removed.
  *
  * return FAIL for failure, OK otherwise
  */
     int
-do_join(count, insert_space, save_undo)
+do_join(count, insert_space, save_undo, use_formatoptions)
     long    count;
     int            insert_space;
     int            save_undo;
+    int            use_formatoptions UNUSED;
 {
     char_u     *curr = NULL;
+    char_u      *curr_start = NULL;
     char_u     *cend;
     char_u     *newp;
-    char_u     *spaces;        /* number of spaces inserte before a line */
+    char_u     *spaces;        /* number of spaces inserted before a line */
     int                endcurr1 = NUL;
     int                endcurr2 = NUL;
     int                currsize = 0;   /* size of the current line */
@@ -4163,6 +4343,13 @@ do_join(count, insert_space, save_undo)
     linenr_T   t;
     colnr_T    col = 0;
     int                ret = OK;
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+    int                *comments = NULL;
+    int                remove_comments = (use_formatoptions == TRUE)
+                                 && has_format_option(FO_REMOVE_COMS);
+    int                prev_was_comment;
+#endif
+
 
     if (save_undo && u_save((linenr_T)(curwin->w_cursor.lnum - 1),
                            (linenr_T)(curwin->w_cursor.lnum + count)) == FAIL)
@@ -4174,6 +4361,17 @@ do_join(count, insert_space, save_undo)
     spaces = lalloc_clear((long_u)count, TRUE);
     if (spaces == NULL)
        return FAIL;
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+    if (remove_comments)
+    {
+       comments = (int *)lalloc_clear((long_u)count * sizeof(int), TRUE);
+       if (comments == NULL)
+       {
+           vim_free(spaces);
+           return FAIL;
+       }
+    }
+#endif
 
     /*
      * Don't move anything, just compute the final line length
@@ -4181,7 +4379,26 @@ do_join(count, insert_space, save_undo)
      */
     for (t = 0; t < count; ++t)
     {
-       curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
+       curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+       if (remove_comments)
+       {
+           /* We don't want to remove the comment leader if the
+            * previous line is not a comment. */
+           if (t > 0 && prev_was_comment)
+           {
+
+               char_u *new_curr = skip_comment(curr, TRUE, insert_space,
+                                                          &prev_was_comment);
+               comments[t] = (int)(new_curr - curr);
+               curr = new_curr;
+           }
+           else
+               curr = skip_comment(curr, FALSE, insert_space,
+                                                          &prev_was_comment);
+       }
+#endif
+
        if (insert_space && t > 0)
        {
            curr = skipwhite(curr);
@@ -4265,10 +4482,14 @@ do_join(count, insert_space, save_undo)
            copy_spaces(cend, (size_t)(spaces[t]));
        }
        mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t,
-                                (long)(cend - newp + spaces[t]));
+                        (long)(cend - newp + spaces[t] - (curr - curr_start)));
        if (t == 0)
            break;
-       curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
+       curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+       if (remove_comments)
+           curr += comments[t - 1];
+#endif
        if (insert_space && t > 1)
            curr = skipwhite(curr);
        currsize = (int)STRLEN(curr);
@@ -4306,6 +4527,10 @@ do_join(count, insert_space, save_undo)
 
 theend:
     vim_free(spaces);
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+    if (remove_comments)
+       vim_free(comments);
+#endif
     return ret;
 }
 
@@ -4388,7 +4613,7 @@ same_leader(lnum, leader1_len, leader1_flags, leader2_len, leader2_flags)
 #endif
 
 /*
- * implementation of the format operator 'gq'
+ * Implementation of the format operator 'gq'.
  */
     void
 op_format(oap, keep_cursor)
@@ -4539,9 +4764,11 @@ format_lines(line_count, avoid_fex)
     char_u     *leader_flags = NULL;   /* flags for leader of current line */
     char_u     *next_leader_flags;     /* flags for leader of next line */
     int                do_comments;            /* format comments */
+    int                do_comments_list = 0;   /* format comments with 'n' or '2' */
 #endif
     int                advance = TRUE;
-    int                second_indent = -1;
+    int                second_indent = -1;     /* indent for second line (comment
+                                        * aware) */
     int                do_second_indent;
     int                do_number_indent;
     int                do_trail_white;
@@ -4644,18 +4871,46 @@ format_lines(line_count, avoid_fex)
            if (first_par_line
                    && (do_second_indent || do_number_indent)
                    && prev_is_end_par
-                   && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count
+                   && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+           {
+               if (do_second_indent && !lineempty(curwin->w_cursor.lnum + 1))
+               {
 #ifdef FEAT_COMMENTS
-                   && leader_len == 0
-                   && next_leader_len == 0
+                   if (leader_len == 0 && next_leader_len == 0)
+                   {
+                       /* no comment found */
 #endif
-                   )
-           {
-               if (do_second_indent
-                       && !lineempty(curwin->w_cursor.lnum + 1))
-                   second_indent = get_indent_lnum(curwin->w_cursor.lnum + 1);
+                       second_indent =
+                                  get_indent_lnum(curwin->w_cursor.lnum + 1);
+#ifdef FEAT_COMMENTS
+                   }
+                   else
+                   {
+                       second_indent = next_leader_len;
+                       do_comments_list = 1;
+                   }
+#endif
+               }
                else if (do_number_indent)
-                   second_indent = get_number_indent(curwin->w_cursor.lnum);
+               {
+#ifdef FEAT_COMMENTS
+                   if (leader_len == 0 && next_leader_len == 0)
+                   {
+                       /* no comment found */
+#endif
+                       second_indent =
+                                    get_number_indent(curwin->w_cursor.lnum);
+#ifdef FEAT_COMMENTS
+                   }
+                   else
+                   {
+                       /* get_number_indent() is now "comment aware"... */
+                       second_indent =
+                                    get_number_indent(curwin->w_cursor.lnum);
+                       do_comments_list = 1;
+                   }
+#endif
+               }
            }
 
            /*
@@ -4694,6 +4949,8 @@ format_lines(line_count, avoid_fex)
                insertchar(NUL, INSCHAR_FORMAT
 #ifdef FEAT_COMMENTS
                        + (do_comments ? INSCHAR_DO_COM : 0)
+                       + (do_comments && do_comments_list
+                                                      ? INSCHAR_COM_LIST : 0)
 #endif
                        + (avoid_fex ? INSCHAR_NO_FEX : 0), second_indent);
                State = old_State;
@@ -4730,7 +4987,7 @@ format_lines(line_count, avoid_fex)
                                                      (long)-next_leader_len);
 #endif
                curwin->w_cursor.lnum--;
-               if (do_join(2, TRUE, FALSE) == FAIL)
+               if (do_join(2, TRUE, FALSE, FALSE) == FAIL)
                {
                    beep_flush();
                    break;
@@ -4786,7 +5043,7 @@ fmt_check_par(lnum, leader_len, leader_flags, do_comments)
 
     ptr = ml_get(lnum);
     if (do_comments)
-       *leader_len = get_leader_len(ptr, leader_flags, FALSE);
+       *leader_len = get_leader_len(ptr, leader_flags, FALSE, TRUE);
     else
        *leader_len = 0;
 
@@ -5596,6 +5853,8 @@ x11_export_final_selection()
                                               && len < 1024*1024 && len > 0)
     {
 #ifdef FEAT_MBYTE
+       int ok = TRUE;
+
        /* The CUT_BUFFER0 is supposed to always contain latin1.  Convert from
         * 'enc' when it is a multi-byte encoding.  When 'enc' is an 8-bit
         * encoding conversion usually doesn't work, so keep the text as-is.
@@ -5610,6 +5869,7 @@ x11_export_final_selection()
                int     intlen = len;
                char_u  *conv_str;
 
+               vc.vc_fail = TRUE;
                conv_str = string_convert(&vc, str, &intlen);
                len = intlen;
                if (conv_str != NULL)
@@ -5617,12 +5877,26 @@ x11_export_final_selection()
                    vim_free(str);
                    str = conv_str;
                }
+               else
+               {
+                   ok = FALSE;
+               }
                convert_setup(&vc, NULL, NULL);
            }
+           else
+           {
+               ok = FALSE;
+           }
        }
+
+       /* Do not store the string if conversion failed.  Better to use any
+        * other selection than garbled text. */
+       if (ok)
 #endif
-       XStoreBuffer(dpy, (char *)str, (int)len, 0);
-       XFlush(dpy);
+       {
+           XStoreBuffer(dpy, (char *)str, (int)len, 0);
+           XFlush(dpy);
+       }
     }
 
     vim_free(str);
@@ -5712,7 +5986,9 @@ clip_get_selection(cbd)
     }
 }
 
-/* Convert from the GUI selection string into the '*'/'+' register */
+/*
+ * Convert from the GUI selection string into the '*'/'+' register.
+ */
     void
 clip_yank_selection(type, str, len, cbd)
     int                type;
@@ -6069,9 +6345,6 @@ write_reg_contents_ex(name, str, maxlen, must_append, yank_type, block_len)
     if (yank_type == MBLOCK)
        yank_type = MAUTO;
 #endif
-    if (yank_type == MAUTO)
-       yank_type = ((len > 0 && (str[len - 1] == '\n' || str[len - 1] == '\r'))
-                                                            ? MLINE : MCHAR);
     str_to_reg(y_current, yank_type, str, len, block_len);
 
 # ifdef FEAT_CLIPBOARD
@@ -6092,13 +6365,14 @@ write_reg_contents_ex(name, str, maxlen, must_append, yank_type, block_len)
  * is appended.
  */
     static void
-str_to_reg(y_ptr, type, str, len, blocklen)
+str_to_reg(y_ptr, yank_type, str, len, blocklen)
     struct yankreg     *y_ptr;         /* pointer to yank register */
-    int                        type;           /* MCHAR, MLINE or MBLOCK */
+    int                        yank_type;      /* MCHAR, MLINE, MBLOCK, MAUTO */
     char_u             *str;           /* string to put in register */
     long               len;            /* length of string */
     long               blocklen;       /* width of Visual block */
 {
+    int                type;                   /* MCHAR, MLINE or MBLOCK */
     int                lnum;
     long       start;
     long       i;
@@ -6115,6 +6389,12 @@ str_to_reg(y_ptr, type, str, len, blocklen)
     if (y_ptr->y_array == NULL)                /* NULL means empty register */
        y_ptr->y_size = 0;
 
+    if (yank_type == MAUTO)
+       type = ((len > 0 && (str[len - 1] == NL || str[len - 1] == CAR))
+                                                            ? MLINE : MCHAR);
+    else
+       type = yank_type;
+
     /*
      * Count the number of lines within the string
      */
@@ -6236,7 +6516,7 @@ line_count_info(line, wc, cc, limit, eol_size)
     long       chars = 0;
     int                is_word = 0;
 
-    for (i = 0; line[i] && i < limit; )
+    for (i = 0; i < limit && line[i] != NUL; )
     {
        if (is_word)
        {
@@ -6261,7 +6541,7 @@ line_count_info(line, wc, cc, limit, eol_size)
     *wc += words;
 
     /* Add eol_size if the end of line was reached before hitting limit. */
-    if (line[i] == NUL && i < limit)
+    if (i < limit && line[i] == NUL)
     {
        i += eol_size;
        chars += eol_size;
index b137fa4..bf65556 100644 (file)
 #define PV_MOD         OPT_BUF(BV_MOD)
 #define PV_MPS         OPT_BUF(BV_MPS)
 #define PV_NF          OPT_BUF(BV_NF)
-#ifdef FEAT_OSFILETYPE
-# define PV_OFT                OPT_BUF(BV_OFT)
-#endif
 #ifdef FEAT_COMPL_FUNC
 # define PV_OFU                OPT_BUF(BV_OFU)
 #endif
@@ -337,9 +334,6 @@ static int  p_ma;
 static int     p_mod;
 static char_u  *p_mps;
 static char_u  *p_nf;
-#ifdef FEAT_OSFILETYPE
-static char_u  *p_oft;
-#endif
 static int     p_pi;
 #ifdef FEAT_TEXTOBJ
 static char_u  *p_qe;
@@ -439,17 +433,19 @@ struct vimoption
 #define P_RCLR         0x7000  /* clear and redraw all */
 
 #define P_COMMA                0x8000  /* comma separated list */
-#define P_NODUP                0x10000L/* don't allow duplicate strings */
-#define P_FLAGLIST     0x20000L/* list of single-char flags */
-
-#define P_SECURE       0x40000L/* cannot change in modeline or secure mode */
-#define P_GETTEXT      0x80000L/* expand default value with _() */
-#define P_NOGLOB       0x100000L/* do not use local value for global vimrc */
-#define P_NFNAME       0x200000L/* only normal file name chars allowed */
-#define P_INSECURE     0x400000L/* option was set from a modeline */
-#define P_PRI_MKRC     0x800000L/* priority for :mkvimrc (setting option has
+#define P_NODUP                0x10000L /* don't allow duplicate strings */
+#define P_FLAGLIST     0x20000L /* list of single-char flags */
+
+#define P_SECURE       0x40000L /* cannot change in modeline or secure mode */
+#define P_GETTEXT      0x80000L /* expand default value with _() */
+#define P_NOGLOB       0x100000L /* do not use local value for global vimrc */
+#define P_NFNAME       0x200000L /* only normal file name chars allowed */
+#define P_INSECURE     0x400000L /* option was set from a modeline */
+#define P_PRI_MKRC     0x800000L /* priority for :mkvimrc (setting option has
                                   side effects) */
-#define P_NO_ML       0x1000000L/* not allowed in modeline */
+#define P_NO_ML       0x1000000L /* not allowed in modeline */
+#define P_CURSWANT    0x2000000L /* update curswant required; not needed when
+                                 * there is a redraw flag */
 
 #define ISK_LATIN1  (char_u *)"@,48-57,_,192-255"
 
@@ -466,9 +462,9 @@ struct vimoption
 #if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
        || defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
        || defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL) || defined(FEAT_CONCEAL)
-# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
+# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
 #else
-# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
+# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
 #endif
 
 /*
@@ -485,7 +481,7 @@ static struct vimoption
 #endif
        options[] =
 {
-    {"aleph",      "al",   P_NUM|P_VI_DEF,
+    {"aleph",      "al",   P_NUM|P_VI_DEF|P_CURSWANT,
 #ifdef FEAT_RIGHTLEFT
                            (char_u *)&p_aleph, PV_NONE,
 #else
@@ -507,7 +503,7 @@ static struct vimoption
                            {(char_u *)FALSE, (char_u *)FALSE}
 #endif
                            SCRIPTID_INIT},
-    {"arabic",     "arab", P_BOOL|P_VI_DEF|P_VIM,
+    {"arabic",     "arab", P_BOOL|P_VI_DEF|P_VIM|P_CURSWANT,
 #ifdef FEAT_ARABIC
                            (char_u *)VAR_WIN, PV_ARAB,
 #else
@@ -784,7 +780,7 @@ static struct vimoption
     {"columns",            "co",   P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
                            (char_u *)&Columns, PV_NONE,
                            {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
-    {"comments",    "com",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
+    {"comments",    "com",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
 #ifdef FEAT_COMMENTS
                            (char_u *)&p_com, PV_COM,
                            {(char_u *)"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
@@ -794,7 +790,7 @@ static struct vimoption
                            {(char_u *)0L, (char_u *)0L}
 #endif
                            SCRIPTID_INIT},
-    {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF,
+    {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
 #ifdef FEAT_FOLDING
                            (char_u *)&p_cms, PV_CMS,
                            {(char_u *)"/*%s*/", (char_u *)0L}
@@ -907,6 +903,13 @@ static struct vimoption
                            {(char_u *)0L, (char_u *)0L}
 #endif
                            SCRIPTID_INIT},
+    {"cscoperelative", "csre", P_BOOL|P_VI_DEF|P_VIM,
+#ifdef FEAT_CSCOPE
+                           (char_u *)&p_csre, PV_NONE,
+#else
+                           (char_u *)NULL, PV_NONE,
+#endif
+                           {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
     {"cscopetag",   "cst",  P_BOOL|P_VI_DEF|P_VIM,
 #ifdef FEAT_CSCOPE
                            (char_u *)&p_cst, PV_NONE,
@@ -952,7 +955,7 @@ static struct vimoption
     {"debug",      NULL,   P_STRING|P_VI_DEF,
                            (char_u *)&p_debug, PV_NONE,
                            {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-    {"define",     "def",  P_STRING|P_ALLOCED|P_VI_DEF,
+    {"define",     "def",  P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
 #ifdef FEAT_FIND_ID
                            (char_u *)&p_def, PV_DEF,
                            {(char_u *)"^\\s*#\\s*define", (char_u *)0L}
@@ -982,7 +985,7 @@ static struct vimoption
                            (char_u *)NULL, PV_NONE,
 #endif
                            {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-    {"diffexpr",    "dex",  P_STRING|P_VI_DEF|P_SECURE,
+    {"diffexpr",    "dex",  P_STRING|P_VI_DEF|P_SECURE|P_CURSWANT,
 #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
                            (char_u *)&p_dex, PV_NONE,
                            {(char_u *)"", (char_u *)0L}
@@ -1098,13 +1101,22 @@ static struct vimoption
                            {(char_u *)0L, (char_u *)0L}
 #endif
                            SCRIPTID_INIT},
-    {"fileformat",  "ff",   P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC,
+    {"fileformat",  "ff",   P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC|P_CURSWANT,
                            (char_u *)&p_ff, PV_FF,
                            {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
     {"fileformats", "ffs",  P_STRING|P_VIM|P_COMMA|P_NODUP,
                            (char_u *)&p_ffs, PV_NONE,
                            {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}
                            SCRIPTID_INIT},
+    {"fileignorecase", "fic", P_BOOL|P_VI_DEF,
+                           (char_u *)&p_fic, PV_NONE,
+                           {
+#ifdef CASE_INSENSITIVE_FILENAME
+                                   (char_u *)TRUE,
+#else
+                                   (char_u *)FALSE,
+#endif
+                                       (char_u *)0L} SCRIPTID_INIT},
     {"filetype",    "ft",   P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
 #ifdef FEAT_AUTOCMD
                            (char_u *)&p_ft, PV_FT,
@@ -1158,7 +1170,7 @@ static struct vimoption
     {"foldlevel",   "fdl",  P_NUM|P_VI_DEF|P_RWIN,
                            (char_u *)VAR_WIN, PV_FDL,
                            {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-    {"foldlevelstart","fdls", P_NUM|P_VI_DEF,
+    {"foldlevelstart","fdls", P_NUM|P_VI_DEF|P_CURSWANT,
                            (char_u *)&p_fdls, PV_NONE,
                            {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
     {"foldmarker",  "fmr",  P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
@@ -1175,7 +1187,7 @@ static struct vimoption
     {"foldnestmax", "fdn",  P_NUM|P_VI_DEF|P_RWIN,
                            (char_u *)VAR_WIN, PV_FDN,
                            {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
-    {"foldopen",    "fdo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+    {"foldopen",    "fdo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
                            (char_u *)&p_fdo, PV_NONE,
                 {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo",
                                                 (char_u *)0L} SCRIPTID_INIT},
@@ -1413,6 +1425,15 @@ static struct vimoption
     {"ignorecase",  "ic",   P_BOOL|P_VI_DEF,
                            (char_u *)&p_ic, PV_NONE,
                            {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+    {"imactivatefunc","imaf",P_STRING|P_VI_DEF|P_SECURE,
+# if defined(FEAT_EVAL) && defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+                           (char_u *)&p_imaf, PV_NONE,
+                           {(char_u *)"", (char_u *)NULL}
+# else
+                           (char_u *)NULL, PV_NONE,
+                           {(char_u *)NULL, (char_u *)0L}
+# endif
+                           SCRIPTID_INIT},
     {"imactivatekey","imak",P_STRING|P_VI_DEF,
 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
                            (char_u *)&p_imak, PV_NONE,
@@ -1455,6 +1476,15 @@ static struct vimoption
                            {(char_u *)B_IMODE_NONE, (char_u *)0L}
 #endif
                            SCRIPTID_INIT},
+    {"imstatusfunc","imsf",P_STRING|P_VI_DEF|P_SECURE,
+# if defined(FEAT_EVAL) && defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+                           (char_u *)&p_imsf, PV_NONE,
+                           {(char_u *)"", (char_u *)NULL}
+# else
+                           (char_u *)NULL, PV_NONE,
+                           {(char_u *)NULL, (char_u *)0L}
+# endif
+                           SCRIPTID_INIT},
     {"include",            "inc",  P_STRING|P_ALLOCED|P_VI_DEF,
 #ifdef FEAT_FIND_ID
                            (char_u *)&p_inc, PV_INC,
@@ -1740,7 +1770,7 @@ static struct vimoption
     {"matchtime",   "mat",  P_NUM|P_VI_DEF,
                            (char_u *)&p_mat, PV_NONE,
                            {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
-    {"maxcombine",  "mco",  P_NUM|P_VI_DEF,
+    {"maxcombine",  "mco",  P_NUM|P_VI_DEF|P_CURSWANT,
 #ifdef FEAT_MBYTE
                            (char_u *)&p_mco, PV_NONE,
 #else
@@ -1901,14 +1931,8 @@ static struct vimoption
                            (char_u *)NULL, PV_NONE,
                            {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
     {"osfiletype",  "oft",  P_STRING|P_ALLOCED|P_VI_DEF,
-#ifdef FEAT_OSFILETYPE
-                           (char_u *)&p_oft, PV_OFT,
-                           {(char_u *)DFLT_OFT, (char_u *)0L}
-#else
                            (char_u *)NULL, PV_NONE,
-                           {(char_u *)0L, (char_u *)0L}
-#endif
-                           SCRIPTID_INIT},
+                           {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
     {"paragraphs",  "para", P_STRING|P_VI_DEF,
                            (char_u *)&p_para, PV_NONE,
                            {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
@@ -2071,6 +2095,9 @@ static struct vimoption
                            (char_u *)NULL, PV_NONE,
 #endif
                            {(char_u *)2000L, (char_u *)0L} SCRIPTID_INIT},
+    {"regexpengine", "re",  P_NUM|P_VI_DEF,
+                           (char_u *)&p_re, PV_NONE,
+                           {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
     {"relativenumber", "rnu", P_BOOL|P_VI_DEF|P_RWIN,
                            (char_u *)VAR_WIN, PV_RNU,
                            {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
@@ -2278,6 +2305,15 @@ static struct vimoption
                            (char_u *)"",
 #endif
                                (char_u *)0L} SCRIPTID_INIT},
+    {"shellxescape", "sxe", P_STRING|P_VI_DEF|P_SECURE,
+                           (char_u *)&p_sxe, PV_NONE,
+                           {
+#if defined(MSDOS) || defined(WIN16) || defined(WIN3264)
+                           (char_u *)"\"&|<>()@^",
+#else
+                           (char_u *)"",
+#endif
+                               (char_u *)0L} SCRIPTID_INIT},
     {"shiftround",  "sr",   P_BOOL|P_VI_DEF|P_VIM,
                            (char_u *)&p_sr, PV_NONE,
                            {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
@@ -2706,7 +2742,7 @@ static struct vimoption
                            {(char_u *)0L, (char_u *)0L}
 #endif
                            SCRIPTID_INIT},
-    {"virtualedit", "ve",   P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM,
+    {"virtualedit", "ve",   P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM|P_CURSWANT,
 #ifdef FEAT_VIRTUALEDIT
                            (char_u *)&p_ve, PV_NONE,
                            {(char_u *)"", (char_u *)""}
@@ -2740,7 +2776,7 @@ static struct vimoption
                            (char_u *)&p_wc, PV_NONE,
                            {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB}
                            SCRIPTID_INIT},
-    {"wildcharm",   "wcm",   P_NUM|P_VI_DEF,
+    {"wildcharm",   "wcm",  P_NUM|P_VI_DEF,
                            (char_u *)&p_wcm, PV_NONE,
                            {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
     {"wildignore",  "wig",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
@@ -2750,6 +2786,9 @@ static struct vimoption
                            (char_u *)NULL, PV_NONE,
 #endif
                            {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+    {"wildignorecase", "wic", P_BOOL|P_VI_DEF,
+                           (char_u *)&p_wic, PV_NONE,
+                           {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
     {"wildmenu",    "wmnu", P_BOOL|P_VI_DEF,
 #ifdef FEAT_WILDMENU
                            (char_u *)&p_wmnu, PV_NONE,
@@ -2891,6 +2930,7 @@ static struct vimoption
     p_term("t_op", T_OP)
     p_term("t_RI", T_CRI)
     p_term("t_RV", T_CRV)
+    p_term("t_u7", T_U7)
     p_term("t_Sb", T_CSB)
     p_term("t_Sf", T_CSF)
     p_term("t_se", T_SE)
@@ -2996,7 +3036,7 @@ static long_u *insecure_flag __ARGS((int opt_idx, int opt_flags));
 # define insecure_flag(opt_idx, opt_flags) (&options[opt_idx].flags)
 #endif
 static void set_string_option_global __ARGS((int opt_idx, char_u **varp));
-static void set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags));
+static char_u *set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags));
 static char_u *did_set_string_option __ARGS((int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags));
 static char_u *set_chars_option __ARGS((char_u **varp));
 #ifdef FEAT_SYN_HL
@@ -3145,7 +3185,7 @@ set_init_1()
        {
 #ifdef HAVE_AVAIL_MEM
            /* Use amount of memory available at this moment. */
-           n = (mch_avail_mem(FALSE) >> 11);
+           n = (mch_avail_mem(FALSE) >> 1);
 #else
 # ifdef HAVE_TOTAL_MEM
            /* Use amount of memory available to Vim. */
@@ -3159,7 +3199,7 @@ set_init_1()
            if (opt_idx >= 0)
            {
 #if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
-               if ((long)options[opt_idx].def_val[VI_DEFAULT] > n
+               if ((long)options[opt_idx].def_val[VI_DEFAULT] > (long)n
                        || (long)options[opt_idx].def_val[VI_DEFAULT] == 0L)
 #endif
                    options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
@@ -3843,6 +3883,8 @@ set_init_3()
 # ifndef OS2   /* Always use bourne shell style redirection if we reach this */
            if (       fnamecmp(p, "sh") == 0
                    || fnamecmp(p, "ksh") == 0
+                   || fnamecmp(p, "mksh") == 0
+                   || fnamecmp(p, "pdksh") == 0
                    || fnamecmp(p, "zsh") == 0
                    || fnamecmp(p, "zsh-beta") == 0
                    || fnamecmp(p, "bash") == 0
@@ -3850,6 +3892,8 @@ set_init_3()
                    || fnamecmp(p, "cmd") == 0
                    || fnamecmp(p, "sh.exe") == 0
                    || fnamecmp(p, "ksh.exe") == 0
+                   || fnamecmp(p, "mksh.exe") == 0
+                   || fnamecmp(p, "pdksh.exe") == 0
                    || fnamecmp(p, "zsh.exe") == 0
                    || fnamecmp(p, "zsh-beta.exe") == 0
                    || fnamecmp(p, "bash.exe") == 0
@@ -3881,7 +3925,8 @@ set_init_3()
 
 #if defined(MSDOS) || defined(WIN3264) || defined(OS2)
     /*
-     * Set 'shellcmdflag and 'shellquote' depending on the 'shell' option.
+     * Set 'shellcmdflag', 'shellxquote', and 'shellquote' depending on the
+     * 'shell' option.
      * This is done after other initializations, where 'shell' might have been
      * set, but only if they have not been set before.  Default for p_shcf is
      * "/c", for p_shq is "".  For "sh" like  shells it is changed here to
@@ -3918,6 +3963,37 @@ set_init_3()
 #  endif
 # endif
     }
+    else if (strstr((char *)gettail(p_sh), "cmd.exe") != NULL)
+    {
+       int     idx3;
+
+       /*
+        * cmd.exe on Windows will strip the first and last double quote given
+        * on the command line, e.g. most of the time things like:
+        *   cmd /c "my path/to/echo" "my args to echo"
+        * become:
+        *   my path/to/echo" "my args to echo
+        * when executed.
+        *
+        * To avoid this, set shellxquote to surround the command in
+        * parenthesis.  This appears to make most commands work, without
+        * breaking commands that worked previously, such as
+        * '"path with spaces/cmd" "a&b"'.
+        */
+       idx3 = findoption((char_u *)"sxq");
+       if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+       {
+           p_sxq = (char_u *)"(";
+           options[idx3].def_val[VI_DEFAULT] = p_sxq;
+       }
+
+       idx3 = findoption((char_u *)"shcf");
+       if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+       {
+           p_shcf = (char_u *)"/c";
+           options[idx3].def_val[VI_DEFAULT] = p_shcf;
+       }
+    }
 #endif
 
 #ifdef FEAT_TITLE
@@ -4349,7 +4425,7 @@ do_set(arg, opt_flags)
                    p = find_termcode(key_name);
                    if (p == NULL)
                    {
-                       errmsg = (char_u *)N_("E518: Unknown option");
+                       errmsg = (char_u *)N_("E846: Key code not set");
                        goto skip;
                    }
                    else
@@ -4565,6 +4641,31 @@ do_set(arg, opt_flags)
                                arg = errbuf;
                            }
                            /*
+                            * Convert 'backspace' number to string, for
+                            * adding, prepending and removing string.
+                            */
+                           else if (varp == (char_u *)&p_bs
+                                        && VIM_ISDIGIT(**(char_u **)varp))
+                           {
+                               i = getdigits((char_u **)varp);
+                               switch (i)
+                               {
+                                   case 0:
+                                       *(char_u **)varp = empty_option;
+                                       break;
+                                   case 1:
+                                       *(char_u **)varp = vim_strsave(
+                                                     (char_u *)"indent,eol");
+                                       break;
+                                   case 2:
+                                       *(char_u **)varp = vim_strsave(
+                                               (char_u *)"indent,eol,start");
+                                       break;
+                               }
+                               vim_free(oldval);
+                               oldval = *(char_u **)varp;
+                           }
+                           /*
                             * Convert 'whichwrap' number to string, for
                             * backwards compatibility with Vim 3.0.
                             * Misuse errbuf[] for the resulting string.
@@ -4697,8 +4798,8 @@ do_set(arg, opt_flags)
                                                || s[i] == ','
                                                || s[i] == NUL))
                                        break;
-                                   /* Count backspaces.  Only a comma with an
-                                    * even number of backspaces before it is
+                                   /* Count backslashes.  Only a comma with an
+                                    * even number of backslashes before it is
                                     * recognized as a separator */
                                    if (s > origval && s[-1] == '\\')
                                        ++bs;
@@ -5275,9 +5376,6 @@ check_buf_options(buf)
 #ifdef FEAT_AUTOCMD
     check_string_option(&buf->b_p_ft);
 #endif
-#ifdef FEAT_OSFILETYPE
-    check_string_option(&buf->b_p_oft);
-#endif
 #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
     check_string_option(&buf->b_p_cinw);
 #endif
@@ -5520,8 +5618,10 @@ set_string_option_global(opt_idx, varp)
 
 /*
  * Set a string option to a new value, and handle the effects.
+ *
+ * Returns NULL on success or error message on error.
  */
-    static void
+    static char_u *
 set_string_option(opt_idx, value, opt_flags)
     int                opt_idx;
     char_u     *value;
@@ -5530,9 +5630,10 @@ set_string_option(opt_idx, value, opt_flags)
     char_u     *s;
     char_u     **varp;
     char_u     *oldval;
+    char_u     *r = NULL;
 
     if (options[opt_idx].var == NULL)  /* don't set hidden option */
-       return;
+       return NULL;
 
     s = vim_strsave(value);
     if (s != NULL)
@@ -5544,10 +5645,11 @@ set_string_option(opt_idx, value, opt_flags)
                    : opt_flags);
        oldval = *varp;
        *varp = s;
-       if (did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
-                                                          opt_flags) == NULL)
+       if ((r = did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
+                                                          opt_flags)) == NULL)
            did_set_option(opt_idx, opt_flags, TRUE);
     }
+    return r;
 }
 
 /*
@@ -6082,16 +6184,46 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
     /* 'matchpairs' */
     else if (gvarp == &p_mps)
     {
-       /* Check for "x:y,x:y" */
-       for (p = *varp; *p != NUL; p += 4)
+#ifdef FEAT_MBYTE
+       if (has_mbyte)
        {
-           if (p[1] != ':' || p[2] == NUL || (p[3] != NUL && p[3] != ','))
+           for (p = *varp; *p != NUL; ++p)
            {
-               errmsg = e_invarg;
-               break;
+               int x2 = -1;
+               int x3 = -1;
+
+               if (*p != NUL)
+                   p += mb_ptr2len(p);
+               if (*p != NUL)
+                   x2 = *p++;
+               if (*p != NUL)
+               {
+                   x3 = mb_ptr2char(p);
+                   p += mb_ptr2len(p);
+               }
+               if (x2 != ':' || x3 == -1 || (*p != NUL && *p != ','))
+               {
+                   errmsg = e_invarg;
+                   break;
+               }
+               if (*p == NUL)
+                   break;
+           }
+       }
+       else
+#endif
+       {
+           /* Check for "x:y,x:y" */
+           for (p = *varp; *p != NUL; p += 4)
+           {
+               if (p[1] != ':' || p[2] == NUL || (p[3] != NUL && p[3] != ','))
+               {
+                   errmsg = e_invarg;
+                   break;
+               }
+               if (p[3] == NUL)
+                   break;
            }
-           if (p[3] == NUL)
-               break;
        }
     }
 
@@ -6635,7 +6767,7 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
     {
        for (s = *varp; *s;)
        {
-           while(*s == ',' || *s == ' ')
+           while (*s == ',' || *s == ' ')
                s++;
            if (!*s)
                break;
@@ -6999,8 +7131,10 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
     }
 #endif
 
-    if (curwin->w_curswant != MAXCOL)
-       curwin->w_set_curswant = TRUE;  /* in case 'showbreak' changed */
+    if (curwin->w_curswant != MAXCOL
+                    && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+       curwin->w_set_curswant = TRUE;
+
 #ifdef FEAT_GUI
     /* check redraw when it's not a GUI option or the GUI is active. */
     if (!redraw_gui_only || gui.in_use)
@@ -7010,7 +7144,7 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
     return errmsg;
 }
 
-#ifdef FEAT_SYN_HL
+#if defined(FEAT_SYN_HL) || defined(PROTO)
 /*
  * Simple int comparison function for use with qsort()
  */
@@ -7037,6 +7171,9 @@ check_colorcolumn(wp)
     int                i;
     int                j = 0;
 
+    if (wp->w_buffer == NULL)
+       return NULL;  /* buffer was closed */
+
     for (s = wp->w_p_cc; *s != NUL && count < 255;)
     {
        if (*s == '-' || *s == '+')
@@ -7304,8 +7441,9 @@ check_stl_option(s)
     static char_u *
 check_clipboard_option()
 {
-    int                new_unnamed = FALSE;
-    int                new_autoselect = FALSE;
+    int                new_unnamed = 0;
+    int                new_autoselect_star = FALSE;
+    int                new_autoselect_plus = FALSE;
     int                new_autoselectml = FALSE;
     int                new_html = FALSE;
     regprog_T  *new_exclude_prog = NULL;
@@ -7316,17 +7454,29 @@ check_clipboard_option()
     {
        if (STRNCMP(p, "unnamed", 7) == 0 && (p[7] == ',' || p[7] == NUL))
        {
-           new_unnamed = TRUE;
+           new_unnamed |= CLIP_UNNAMED;
            p += 7;
        }
+       else if (STRNCMP(p, "unnamedplus", 11) == 0
+                                           && (p[11] == ',' || p[11] == NUL))
+       {
+           new_unnamed |= CLIP_UNNAMED_PLUS;
+           p += 11;
+       }
        else if (STRNCMP(p, "autoselect", 10) == 0
-                                       && (p[10] == ',' || p[10] == NUL))
+                                           && (p[10] == ',' || p[10] == NUL))
        {
-           new_autoselect = TRUE;
+           new_autoselect_star = TRUE;
            p += 10;
        }
+       else if (STRNCMP(p, "autoselectplus", 14) == 0
+                                           && (p[14] == ',' || p[14] == NUL))
+       {
+           new_autoselect_plus = TRUE;
+           p += 14;
+       }
        else if (STRNCMP(p, "autoselectml", 12) == 0
-                                       && (p[12] == ',' || p[12] == NUL))
+                                           && (p[12] == ',' || p[12] == NUL))
        {
            new_autoselectml = TRUE;
            p += 12;
@@ -7355,10 +7505,11 @@ check_clipboard_option()
     if (errmsg == NULL)
     {
        clip_unnamed = new_unnamed;
-       clip_autoselect = new_autoselect;
+       clip_autoselect_star = new_autoselect_star;
+       clip_autoselect_plus = new_autoselect_plus;
        clip_autoselectml = new_autoselectml;
        clip_html = new_html;
-       vim_free(clip_exclude_prog);
+       vim_regfree(clip_exclude_prog);
        clip_exclude_prog = new_exclude_prog;
 #ifdef FEAT_GUI_GTK
        if (gui.in_use)
@@ -7369,7 +7520,7 @@ check_clipboard_option()
 #endif
     }
     else
-       vim_free(new_exclude_prog);
+       vim_regfree(new_exclude_prog);
 
     return errmsg;
 }
@@ -7396,16 +7547,16 @@ compile_cap_prog(synblock)
        if (re != NULL)
        {
            synblock->b_cap_prog = vim_regcomp(re, RE_MAGIC);
+           vim_free(re);
            if (synblock->b_cap_prog == NULL)
            {
                synblock->b_cap_prog = rp; /* restore the previous program */
                return e_invarg;
            }
-           vim_free(re);
        }
     }
 
-    vim_free(rp);
+    vim_regfree(rp);
     return NULL;
 }
 #endif
@@ -7483,21 +7634,36 @@ set_bool_option(opt_idx, varp, value, opt_flags)
        compatible_set();
     }
 
-    /* 'list', 'number' */
-    else if ((int *)varp == &curwin->w_p_list
-         || (int *)varp == &curwin->w_p_nu
-         || (int *)varp == &curwin->w_p_rnu)
+#ifdef FEAT_PERSISTENT_UNDO
+    /* 'undofile' */
+    else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf)
     {
-       if (curwin->w_curswant != MAXCOL)
-           curwin->w_set_curswant = TRUE;
+       /* Only take action when the option was set. When reset we do not
+        * delete the undo file, the option may be set again without making
+        * any changes in between. */
+       if (curbuf->b_p_udf || p_udf)
+       {
+           char_u      hash[UNDO_HASH_SIZE];
+           buf_T       *save_curbuf = curbuf;
 
-       /* If 'number' is set, reset 'relativenumber'. */
-       /* If 'relativenumber' is set, reset 'number'. */
-       if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
-           curwin->w_p_rnu = FALSE;
-       if ((int *)varp == &curwin->w_p_rnu && curwin->w_p_rnu)
-           curwin->w_p_nu = FALSE;
+           for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
+           {
+               /* When 'undofile' is set globally: for every buffer, otherwise
+                * only for the current buffer: Try to read in the undofile,
+                * if one exists, the buffer wasn't changed and the buffer was
+                * loaded */
+               if ((curbuf == save_curbuf
+                               || (opt_flags & OPT_GLOBAL) || opt_flags == 0)
+                       && !curbufIsChanged() && curbuf->b_ml.ml_mfp != NULL)
+               {
+                   u_compute_hash(hash);
+                   u_read_undo(NULL, hash, curbuf->b_fname);
+               }
+           }
+           curbuf = save_curbuf;
+       }
     }
+#endif
 
     else if ((int *)varp == &curbuf->b_p_ro)
     {
@@ -7635,7 +7801,10 @@ set_bool_option(opt_idx, varp, value, opt_flags)
     else if ((int *)varp == &curwin->w_p_scb)
     {
        if (curwin->w_p_scb)
+       {
            do_check_scrollbind(FALSE);
+           curwin->w_scbind_pos = curwin->w_topline;
+       }
     }
 #endif
 
@@ -7735,8 +7904,6 @@ set_bool_option(opt_idx, varp, value, opt_flags)
     {
        if (curwin->w_p_wrap)
            curwin->w_leftcol = 0;
-       if (curwin->w_curswant != MAXCOL)
-           curwin->w_set_curswant = TRUE;
     }
 
 #ifdef FEAT_WINDOWS
@@ -7763,9 +7930,9 @@ set_bool_option(opt_idx, varp, value, opt_flags)
 #ifdef FEAT_BEVAL
     else if ((int *)varp == &p_beval)
     {
-       if (p_beval == TRUE)
+       if (p_beval && !old_value)
            gui_mch_enable_beval_area(balloonEval);
-       else
+       else if (!p_beval && old_value)
            gui_mch_disable_beval_area(balloonEval);
     }
 #endif
@@ -7798,6 +7965,10 @@ set_bool_option(opt_idx, varp, value, opt_flags)
        /* Only de-activate it here, it will be enabled when changing mode. */
        if (p_imdisable)
            im_set_active(FALSE);
+       else if (State & INSERT)
+           /* When the option is set from an autocommand, it may need to take
+            * effect right away. */
+           im_set_active(curbuf->b_p_iminsert == B_IMODE_IM);
     }
 #endif
 
@@ -7959,31 +8130,8 @@ set_bool_option(opt_idx, varp, value, opt_flags)
            curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
 # endif
        }
-       if (curwin->w_curswant != MAXCOL)
-           curwin->w_set_curswant = TRUE;
-    }
-
-    else if ((int *)varp == &p_arshape)
-    {
-       if (curwin->w_curswant != MAXCOL)
-           curwin->w_set_curswant = TRUE;
-    }
-#endif
-
-#ifdef FEAT_LINEBREAK
-    if ((int *)varp == &curwin->w_p_lbr)
-    {
-       if (curwin->w_curswant != MAXCOL)
-           curwin->w_set_curswant = TRUE;
     }
-#endif
 
-#ifdef FEAT_RIGHTLEFT
-    if ((int *)varp == &curwin->w_p_rl)
-    {
-       if (curwin->w_curswant != MAXCOL)
-           curwin->w_set_curswant = TRUE;
-    }
 #endif
 
     /*
@@ -7993,7 +8141,9 @@ set_bool_option(opt_idx, varp, value, opt_flags)
     options[opt_idx].flags |= P_WAS_SET;
 
     comp_col();                            /* in case 'ruler' or 'showcmd' changed */
-
+    if (curwin->w_curswant != MAXCOL
+                    && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+       curwin->w_set_curswant = TRUE;
     check_redraw(options[opt_idx].flags);
 
     return NULL;
@@ -8036,7 +8186,7 @@ set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
     need_mouse_correct = TRUE;
 #endif
 
-    if (curbuf->b_p_sw <= 0)
+    if (curbuf->b_p_sw < 0)
     {
        errmsg = e_positive;
        curbuf->b_p_sw = curbuf->b_p_ts;
@@ -8381,11 +8531,7 @@ set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
        }
        Columns = MIN_COLUMNS;
     }
-    /* Limit the values to avoid an overflow in Rows * Columns. */
-    if (Columns > 10000)
-       Columns = 10000;
-    if (Rows > 1000)
-       Rows = 1000;
+    limit_screen_size();
 
 #ifdef DJGPP
     /* avoid a crash by checking for a too large value of 'columns' */
@@ -8420,11 +8566,6 @@ set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
            p_window = Rows - 1;
     }
 
-    if (curbuf->b_p_sts < 0)
-    {
-       errmsg = e_positive;
-       curbuf->b_p_sts = 0;
-    }
     if (curbuf->b_p_ts <= 0)
     {
        errmsg = e_positive;
@@ -8458,6 +8599,11 @@ set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
        errmsg = e_positive;
        p_hi = 0;
     }
+    if (p_re < 0 || p_re > 2)
+    {
+       errmsg = e_invarg;
+       p_re = 0;
+    }
     if (p_report < 0)
     {
        errmsg = e_positive;
@@ -8508,8 +8654,9 @@ set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
     options[opt_idx].flags |= P_WAS_SET;
 
     comp_col();                            /* in case 'columns' or 'ls' changed */
-    if (curwin->w_curswant != MAXCOL)
-       curwin->w_set_curswant = TRUE;  /* in case 'tabstop' changed */
+    if (curwin->w_curswant != MAXCOL
+                    && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+       curwin->w_set_curswant = TRUE;
     check_redraw(options[opt_idx].flags);
 
     return errmsg;
@@ -8523,8 +8670,8 @@ check_redraw(flags)
     long_u     flags;
 {
     /* Careful: P_RCLR and P_RALL are a combination of other P_ flags */
-    int                clear = (flags & P_RCLR) == P_RCLR;
-    int                all = ((flags & P_RALL) == P_RALL || clear);
+    int                doclear = (flags & P_RCLR) == P_RCLR;
+    int                all = ((flags & P_RALL) == P_RALL || doclear);
 
 #ifdef FEAT_WINDOWS
     if ((flags & P_RSTAT) || all)      /* mark all status lines dirty */
@@ -8535,7 +8682,7 @@ check_redraw(flags)
        changed_window_setting();
     if (flags & P_RBUF)
        redraw_curbuf_later(NOT_VALID);
-    if (clear)
+    if (doclear)
        redraw_all_later(CLEAR);
     else if (all)
        redraw_all_later(NOT_VALID);
@@ -8673,11 +8820,151 @@ get_option_value(name, numval, stringval, opt_flags)
 }
 #endif
 
+#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
+/*
+ * Returns the option attributes and its value. Unlike the above function it
+ * will return either global value or local value of the option depending on
+ * what was requested, but it will never return global value if it was
+ * requested to return local one and vice versa. Neither it will return
+ * buffer-local value if it was requested to return window-local one.
+ *
+ * Pretends that option is absent if it is not present in the requested scope
+ * (i.e. has no global, window-local or buffer-local value depending on
+ * opt_type). Uses
+ *
+ * Returned flags:
+ *       0 hidden or unknown option
+ *  see SOPT_* in vim.h for other flags
+ *
+ * Possible opt_type values: see SREQ_* in vim.h
+ */
+    int
+get_option_value_strict(name, numval, stringval, opt_type, from)
+    char_u     *name;
+    long       *numval;
+    char_u     **stringval;        /* NULL when only obtaining attributes */
+    int                opt_type;
+    void       *from;
+{
+    int                opt_idx;
+    char_u     *varp = NULL;
+    struct vimoption *p;
+    int                r = 0;
+
+    opt_idx = findoption(name);
+    if (opt_idx < 0)
+       return 0;
+
+    p = &(options[opt_idx]);
+
+    /* Hidden option */
+    if (p->var == NULL)
+       return 0;
+
+    if (p->flags & P_BOOL)
+       r |= SOPT_BOOL;
+    else if (p->flags & P_NUM)
+       r |= SOPT_NUM;
+    else if (p->flags & P_STRING)
+       r |= SOPT_STRING;
+
+    if (p->indir == PV_NONE)
+    {
+       if (opt_type == SREQ_GLOBAL)
+           r |= SOPT_GLOBAL;
+       else
+           return 0; /* Did not request global-only option */
+    }
+    else
+    {
+       if (p->indir & PV_BOTH)
+           r |= SOPT_GLOBAL;
+       else if (opt_type == SREQ_GLOBAL)
+           return 0; /* Requested global option */
+
+       if (p->indir & PV_WIN)
+       {
+           if (opt_type == SREQ_BUF)
+               return 0; /* Did not request window-local option */
+           else
+               r |= SOPT_WIN;
+       }
+       else if (p->indir & PV_BUF)
+       {
+           if (opt_type == SREQ_WIN)
+               return 0; /* Did not request buffer-local option */
+           else
+               r |= SOPT_BUF;
+       }
+    }
+
+    if (stringval == NULL)
+       return r;
+
+    if (opt_type == SREQ_GLOBAL)
+       varp = p->var;
+    else
+    {
+       if (opt_type == SREQ_BUF)
+       {
+           /* Special case: 'modified' is b_changed, but we also want to
+            * consider it set when 'ff' or 'fenc' changed. */
+           if (p->indir == PV_MOD)
+           {
+               *numval = bufIsChanged((buf_T *) from);
+               varp = NULL;
+           }
+#ifdef FEAT_CRYPT
+           else if (p->indir == PV_KEY)
+           {
+               /* never return the value of the crypt key */
+               *stringval = NULL;
+               varp = NULL;
+           }
+#endif
+           else
+           {
+               aco_save_T      aco;
+               aucmd_prepbuf(&aco, (buf_T *) from);
+               varp = get_varp(p);
+               aucmd_restbuf(&aco);
+           }
+       }
+       else if (opt_type == SREQ_WIN)
+       {
+           win_T       *save_curwin;
+           save_curwin = curwin;
+           curwin = (win_T *) from;
+           curbuf = curwin->w_buffer;
+           varp = get_varp(p);
+           curwin = save_curwin;
+           curbuf = curwin->w_buffer;
+       }
+       if (varp == p->var)
+           return (r | SOPT_UNSET);
+    }
+
+    if (varp != NULL)
+    {
+       if (p->flags & P_STRING)
+           *stringval = vim_strsave(*(char_u **)(varp));
+       else if (p->flags & P_NUM)
+           *numval = *(long *) varp;
+       else
+           *numval = *(int *)varp;
+    }
+
+    return r;
+}
+#endif
+
 /*
  * Set the value of option "name".
  * Use "string" for string options, use "number" for other options.
+ *
+ * Returns NULL on success or error message on error.
  */
-    void
+    char_u *
 set_option_value(name, number, string, opt_flags)
     char_u     *name;
     long       number;
@@ -8699,11 +8986,11 @@ set_option_value(name, number, string, opt_flags)
        if (sandbox > 0 && (flags & P_SECURE))
        {
            EMSG(_(e_sandbox));
-           return;
+           return NULL;
        }
 #endif
        if (flags & P_STRING)
-           set_string_option(opt_idx, string, opt_flags);
+           return set_string_option(opt_idx, string, opt_flags);
        else
        {
            varp = get_varp_scope(&(options[opt_idx]), opt_flags);
@@ -8724,19 +9011,20 @@ set_option_value(name, number, string, opt_flags)
                         * num option using a string. */
                        EMSG3(_("E521: Number required: &%s = '%s'"),
                                                                name, string);
-                       return;     /* do nothing as we hit an error */
+                       return NULL;     /* do nothing as we hit an error */
 
                    }
                }
                if (flags & P_NUM)
-                   (void)set_num_option(opt_idx, varp, number,
+                   return set_num_option(opt_idx, varp, number,
                                                          NULL, 0, opt_flags);
                else
-                   (void)set_bool_option(opt_idx, varp, (int)number,
+                   return set_bool_option(opt_idx, varp, (int)number,
                                                                   opt_flags);
            }
        }
     }
+    return NULL;
 }
 
 /*
@@ -9172,7 +9460,7 @@ put_setstring(fd, cmd, name, valuep, expand)
     int                expand;
 {
     char_u     *s;
-    char_u     buf[MAXPATHL];
+    char_u     *buf;
 
     if (fprintf(fd, "%s %s=", cmd, name) < 0)
        return FAIL;
@@ -9190,9 +9478,16 @@ put_setstring(fd, cmd, name, valuep, expand)
        }
        else if (expand)
        {
+           buf = alloc(MAXPATHL);
+           if (buf == NULL)
+               return FAIL;
            home_replace(NULL, *valuep, buf, MAXPATHL, FALSE);
            if (put_escstr(fd, buf, 2) == FAIL)
+           {
+               vim_free(buf);
                return FAIL;
+           }
+           vim_free(buf);
        }
        else if (put_escstr(fd, *valuep, 2) == FAIL)
            return FAIL;
@@ -9403,6 +9698,85 @@ comp_col()
 }
 
 /*
+ * Unset local option value, similar to ":set opt<".
+ */
+
+    void
+unset_global_local_option(name, from)
+    char_u     *name;
+    void       *from;
+{
+    struct vimoption *p;
+    int                opt_idx;
+    buf_T      *buf = (buf_T *)from;
+
+    opt_idx = findoption(name);
+    p = &(options[opt_idx]);
+
+    switch ((int)p->indir)
+    {
+       /* global option with local value: use local value if it's been set */
+       case PV_EP:
+           clear_string_option(&buf->b_p_ep);
+           break;
+       case PV_KP:
+           clear_string_option(&buf->b_p_kp);
+           break;
+       case PV_PATH:
+           clear_string_option(&buf->b_p_path);
+           break;
+       case PV_AR:
+           buf->b_p_ar = -1;
+           break;
+       case PV_TAGS:
+           clear_string_option(&buf->b_p_tags);
+           break;
+#ifdef FEAT_FIND_ID
+       case PV_DEF:
+           clear_string_option(&buf->b_p_def);
+           break;
+       case PV_INC:
+           clear_string_option(&buf->b_p_inc);
+           break;
+#endif
+#ifdef FEAT_INS_EXPAND
+       case PV_DICT:
+           clear_string_option(&buf->b_p_dict);
+           break;
+       case PV_TSR:
+           clear_string_option(&buf->b_p_tsr);
+           break;
+#endif
+#ifdef FEAT_QUICKFIX
+       case PV_EFM:
+           clear_string_option(&buf->b_p_efm);
+           break;
+       case PV_GP:
+           clear_string_option(&buf->b_p_gp);
+           break;
+       case PV_MP:
+           clear_string_option(&buf->b_p_mp);
+           break;
+#endif
+#if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
+       case PV_BEXPR:
+           clear_string_option(&buf->b_p_bexpr);
+           break;
+#endif
+#if defined(FEAT_CRYPT)
+       case PV_CM:
+           clear_string_option(&buf->b_p_cm);
+           break;
+#endif
+#ifdef FEAT_STL_OPT
+       case PV_STL:
+           clear_string_option(&((win_T *)from)->w_p_stl);
+           break;
+#endif
+    }
+}
+
+/*
  * Get pointer to option variable, depending on local or global scope.
  */
     static char_u *
@@ -9645,9 +10019,6 @@ get_varp(p)
        case PV_MA:     return (char_u *)&(curbuf->b_p_ma);
        case PV_MOD:    return (char_u *)&(curbuf->b_changed);
        case PV_NF:     return (char_u *)&(curbuf->b_p_nf);
-#ifdef FEAT_OSFILETYPE
-       case PV_OFT:    return (char_u *)&(curbuf->b_p_oft);
-#endif
        case PV_PI:     return (char_u *)&(curbuf->b_p_pi);
 #ifdef FEAT_TEXTOBJ
        case PV_QE:     return (char_u *)&(curbuf->b_p_qe);
@@ -9750,11 +10121,19 @@ copy_winopt(from, to)
     to->wo_stl = vim_strsave(from->wo_stl);
 #endif
     to->wo_wrap = from->wo_wrap;
+#ifdef FEAT_DIFF
+    to->wo_wrap_save = from->wo_wrap_save;
+#endif
 #ifdef FEAT_LINEBREAK
     to->wo_lbr = from->wo_lbr;
 #endif
 #ifdef FEAT_SCROLLBIND
     to->wo_scb = from->wo_scb;
+    to->wo_scb_save = from->wo_scb_save;
+#endif
+#ifdef FEAT_CURSORBIND
+    to->wo_crb = from->wo_crb;
+    to->wo_crb_save = from->wo_crb_save;
 #endif
 #ifdef FEAT_SPELL
     to->wo_spell = from->wo_spell;
@@ -9766,6 +10145,7 @@ copy_winopt(from, to)
 #endif
 #ifdef FEAT_DIFF
     to->wo_diff = from->wo_diff;
+    to->wo_diff_saved = from->wo_diff_saved;
 #endif
 #ifdef FEAT_CONCEAL
     to->wo_cocu = vim_strsave(from->wo_cocu);
@@ -9773,11 +10153,16 @@ copy_winopt(from, to)
 #endif
 #ifdef FEAT_FOLDING
     to->wo_fdc = from->wo_fdc;
+    to->wo_fdc_save = from->wo_fdc_save;
     to->wo_fen = from->wo_fen;
+    to->wo_fen_save = from->wo_fen_save;
     to->wo_fdi = vim_strsave(from->wo_fdi);
     to->wo_fml = from->wo_fml;
     to->wo_fdl = from->wo_fdl;
+    to->wo_fdl_save = from->wo_fdl_save;
     to->wo_fdm = vim_strsave(from->wo_fdm);
+    to->wo_fdm_save = from->wo_diff_saved
+                             ? vim_strsave(from->wo_fdm_save) : empty_option;
     to->wo_fdn = from->wo_fdn;
 # ifdef FEAT_EVAL
     to->wo_fde = vim_strsave(from->wo_fde);
@@ -9809,6 +10194,7 @@ check_winopt(wop)
 #ifdef FEAT_FOLDING
     check_string_option(&wop->wo_fdi);
     check_string_option(&wop->wo_fdm);
+    check_string_option(&wop->wo_fdm_save);
 # ifdef FEAT_EVAL
     check_string_option(&wop->wo_fde);
     check_string_option(&wop->wo_fdt);
@@ -9839,6 +10225,7 @@ clear_winopt(wop)
 #ifdef FEAT_FOLDING
     clear_string_option(&wop->wo_fdi);
     clear_string_option(&wop->wo_fdm);
+    clear_string_option(&wop->wo_fdm_save);
 # ifdef FEAT_EVAL
     clear_string_option(&wop->wo_fde);
     clear_string_option(&wop->wo_fdt);
@@ -9995,9 +10382,6 @@ buf_copy_options(buf, flags)
            /* Don't copy 'filetype', it must be detected */
            buf->b_p_ft = empty_option;
 #endif
-#ifdef FEAT_OSFILETYPE
-           buf->b_p_oft = vim_strsave(p_oft);
-#endif
            buf->b_p_pi = p_pi;
 #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
            buf->b_p_cinw = vim_strsave(p_cinw);
@@ -10011,7 +10395,7 @@ buf_copy_options(buf, flags)
            buf->b_p_smc = p_smc;
 #endif
 #ifdef FEAT_SPELL
-           buf->b_s.b_p_spc = vim_strsave(p_spf);
+           buf->b_s.b_p_spc = vim_strsave(p_spc);
            (void)compile_cap_prog(&buf->b_s);
            buf->b_s.b_p_spf = vim_strsave(p_spf);
            buf->b_s.b_p_spl = vim_strsave(p_spl);
@@ -10877,7 +11261,8 @@ has_format_option(x)
 shortmess(x)
     int            x;
 {
-    return (   vim_strchr(p_shm, x) != NULL
+    return p_shm != NULL &&
+           (   vim_strchr(p_shm, x) != NULL
            || (vim_strchr(p_shm, 'a') != NULL
                && vim_strchr((char_u *)SHM_A, x) != NULL));
 }
@@ -11067,6 +11452,7 @@ change_compatible(on)
 
 /*
  * Return TRUE when option "name" has been set.
+ * Only works correctly for global options.
  */
     int
 option_was_set(name)
@@ -11083,6 +11469,19 @@ option_was_set(name)
 }
 
 /*
+ * Reset the flag indicating option "name" was set.
+ */
+    void
+reset_option_was_set(name)
+    char_u     *name;
+{
+    int idx = findoption(name);
+
+    if (idx >= 0)
+       options[idx].flags &= ~P_WAS_SET;
+}
+
+/*
  * compatible_set() - Called when 'compatible' has been set or unset.
  *
  * When 'compatible' set: Set all relevant options (those that have the P_VIM)
@@ -11284,16 +11683,19 @@ save_file_ff(buf)
  * from when editing started (save_file_ff() called).
  * Also when 'endofline' was changed and 'binary' is set, or when 'bomb' was
  * changed and 'binary' is not set.
- * Don't consider a new, empty buffer to be changed.
+ * When "ignore_empty" is true don't consider a new, empty buffer to be
+ * changed.
  */
     int
-file_ff_differs(buf)
+file_ff_differs(buf, ignore_empty)
     buf_T      *buf;
+    int                ignore_empty;
 {
     /* In a buffer that was never loaded the options are not valid. */
     if (buf->b_flags & BF_NEVERLOADED)
        return FALSE;
-    if ((buf->b_flags & BF_NEW)
+    if (ignore_empty
+           && (buf->b_flags & BF_NEW)
            && buf->b_ml.ml_line_count == 1
            && *ml_get_buf(buf, (linenr_T)1, FALSE) == NUL)
        return FALSE;
@@ -11321,3 +11723,121 @@ check_ff_value(p)
 {
     return check_opt_strings(p, p_ff_values, FALSE);
 }
+
+/*
+ * Return the effective shiftwidth value for current buffer, using the
+ * 'tabstop' value when 'shiftwidth' is zero.
+ */
+    long
+get_sw_value()
+{
+    return curbuf->b_p_sw ? curbuf->b_p_sw : curbuf->b_p_ts;
+}
+
+/*
+ * Return the effective softtabstop value for the current buffer, using the
+ * 'tabstop' value when 'softtabstop' is negative.
+ */
+    long
+get_sts_value()
+{
+    return curbuf->b_p_sts < 0 ? get_sw_value() : curbuf->b_p_sts;
+}
+
+/*
+ * Check matchpairs option for "*initc".
+ * If there is a match set "*initc" to the matching character and "*findc" to
+ * the opposite character.  Set "*backwards" to the direction.
+ * When "switchit" is TRUE swap the direction.
+ */
+    void
+find_mps_values(initc, findc, backwards, switchit)
+    int            *initc;
+    int            *findc;
+    int            *backwards;
+    int            switchit;
+{
+    char_u     *ptr;
+
+    ptr = curbuf->b_p_mps;
+    while (*ptr != NUL)
+    {
+#ifdef FEAT_MBYTE
+       if (has_mbyte)
+       {
+           char_u *prev;
+
+           if (mb_ptr2char(ptr) == *initc)
+           {
+               if (switchit)
+               {
+                   *findc = *initc;
+                   *initc = mb_ptr2char(ptr + mb_ptr2len(ptr) + 1);
+                   *backwards = TRUE;
+               }
+               else
+               {
+                   *findc = mb_ptr2char(ptr + mb_ptr2len(ptr) + 1);
+                   *backwards = FALSE;
+               }
+               return;
+           }
+           prev = ptr;
+           ptr += mb_ptr2len(ptr) + 1;
+           if (mb_ptr2char(ptr) == *initc)
+           {
+               if (switchit)
+               {
+                   *findc = *initc;
+                   *initc = mb_ptr2char(prev);
+                   *backwards = FALSE;
+               }
+               else
+               {
+                   *findc = mb_ptr2char(prev);
+                   *backwards = TRUE;
+               }
+               return;
+           }
+           ptr += mb_ptr2len(ptr);
+       }
+       else
+#endif
+       {
+           if (*ptr == *initc)
+           {
+               if (switchit)
+               {
+                   *backwards = TRUE;
+                   *findc = *initc;
+                   *initc = ptr[2];
+               }
+               else
+               {
+                   *backwards = FALSE;
+                   *findc = ptr[2];
+               }
+               return;
+           }
+           ptr += 2;
+           if (*ptr == *initc)
+           {
+               if (switchit)
+               {
+                   *backwards = FALSE;
+                   *findc = *initc;
+                   *initc = ptr[-2];
+               }
+               else
+               {
+                   *backwards = TRUE;
+                   *findc =  ptr[-2];
+               }
+               return;
+           }
+           ++ptr;
+       }
+       if (*ptr == ',')
+           ++ptr;
+    }
+}
index 0f697c2..167b562 100644 (file)
@@ -33,7 +33,7 @@
 #     ifdef EBCDIC
 #define DFLT_EFM       "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
 #     else
-#define DFLT_EFM       "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-Gfrom %f:%l:%c,%-Gfrom %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+#define DFLT_EFM       "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
 #     endif
 #    endif
 #   endif
 #define FO_ONE_LETTER  '1'
 #define FO_WHITE_PAR   'w'     /* trailing white space continues paragr. */
 #define FO_AUTO                'a'     /* automatic formatting */
+#define FO_REMOVE_COMS 'j'     /* remove comment leaders when joining lines */
 
 #define DFLT_FO_VI     "vt"
 #define DFLT_FO_VIM    "tcq"
-#define FO_ALL         "tcroq2vlb1mMBn,aw    /* for do_set() */
+#define FO_ALL         "tcroq2vlb1mMBn,awj"    /* for do_set() */
 
 /* characters for the p_cpo option: */
 #define CPO_ALTREAD    'a'     /* ":read" sets alternate file name */
 #define CPO_SUBPERCENT '/'     /* % in :s string uses previous one */
 #define CPO_BACKSL     '\\'    /* \ is not special in [] */
 #define CPO_CHDIR      '.'     /* don't chdir if buffer is modified */
+#define CPO_SCOLON     ';'     /* using "," and ";" will skip over char if
+                                * cursor would not move */
 /* default values for Vim, Vi and POSIX */
 #define CPO_VIM                "aABceFs"
-#define CPO_VI         "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>"
-#define CPO_ALL                "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\."
+#define CPO_VI         "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>;"
+#define CPO_ALL                "aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\.;"
 
 /* characters for p_ww option: */
 #define WW_ALL         "bshl<>[],~"
 #define GO_MENUS       'm'             /* use menu bar */
 #define GO_NOSYSMENU   'M'             /* don't source system menu */
 #define GO_POINTER     'p'             /* pointer enter/leave callbacks */
+#define GO_ASELPLUS    'P'             /* autoselectPlus */
 #define GO_RIGHT       'r'             /* use right scrollbar */
 #define GO_VRIGHT      'R'             /* right scrollbar with vert split */
 #define GO_TEAROFF     't'             /* add tear-off menu items */
@@ -391,6 +395,7 @@ EXTERN long p_ph;           /* 'pumheight' */
 EXTERN char_u  *p_cpo;         /* 'cpoptions' */
 #ifdef FEAT_CSCOPE
 EXTERN char_u  *p_csprg;       /* 'cscopeprg' */
+EXTERN int     p_csre;         /* 'cscoperelative' */
 # ifdef FEAT_QUICKFIX
 EXTERN char_u  *p_csqf;        /* 'cscopequickfix' */
 #  define      CSQF_CMDS   "sgdctefi"
@@ -448,6 +453,7 @@ EXTERN int  p_exrc;         /* 'exrc' */
 EXTERN char_u  *p_fencs;       /* 'fileencodings' */
 #endif
 EXTERN char_u  *p_ffs;         /* 'fileformats' */
+EXTERN long    p_fic;          /* 'fileignorecase' */
 #ifdef FEAT_FOLDING
 EXTERN char_u  *p_fcl;         /* 'foldclose' */
 EXTERN long    p_fdls;         /* 'foldlevelstart' */
@@ -552,6 +558,8 @@ EXTERN char_u       *p_iconstring;  /* 'iconstring' */
 EXTERN int     p_ic;           /* 'ignorecase' */
 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
 EXTERN char_u  *p_imak;        /* 'imactivatekey' */
+EXTERN char_u  *p_imaf;        /* 'imactivatefunc' */
+EXTERN char_u  *p_imsf;        /* 'imstatusfunc' */
 #endif
 #ifdef USE_IM_CONTROL
 EXTERN int     p_imcmdline;    /* 'imcmdline' */
@@ -647,6 +655,7 @@ EXTERN char_u       *p_cdpath;      /* 'cdpath' */
 EXTERN long    p_rdt;          /* 'redrawtime' */
 #endif
 EXTERN int     p_remap;        /* 'remap' */
+EXTERN long    p_re;           /* 'regexpengine' */
 EXTERN long    p_report;       /* 'report' */
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
 EXTERN long    p_pvh;          /* 'previewheight' */
@@ -709,6 +718,7 @@ EXTERN char_u       *p_sp;          /* 'shellpipe' */
 #endif
 EXTERN char_u  *p_shq;         /* 'shellquote' */
 EXTERN char_u  *p_sxq;         /* 'shellxquote' */
+EXTERN char_u  *p_sxe;         /* 'shellxescape' */
 EXTERN char_u  *p_srr;         /* 'shellredir' */
 #ifdef AMIGA
 EXTERN long    p_st;           /* 'shelltype' */
@@ -816,7 +826,7 @@ EXTERN long p_ttyscroll;    /* 'ttyscroll' */
 EXTERN char_u  *p_ttym;        /* 'ttymouse' */
 EXTERN unsigned ttym_flags;
 # ifdef IN_OPTION_C
-static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", NULL};
+static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", "sgr", NULL};
 # endif
 # define TTYM_XTERM            0x01
 # define TTYM_XTERM2           0x02
@@ -824,6 +834,8 @@ static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm"
 # define TTYM_NETTERM          0x08
 # define TTYM_JSBTERM          0x10
 # define TTYM_PTERM            0x20
+# define TTYM_URXVT            0x40
+# define TTYM_SGR              0x80
 #endif
 EXTERN char_u  *p_udir;        /* 'undodir' */
 EXTERN long    p_ul;           /* 'undolevels' */
@@ -854,7 +866,11 @@ static char *(p_ve_values[]) = {"block", "insert", "all", "onemore", NULL};
 # define VE_ONEMORE    8
 #endif
 EXTERN long    p_verbose;      /* 'verbose' */
-EXTERN char_u  *p_vfile;       /* 'verbosefile' */
+#ifdef IN_OPTION_C
+char_u *p_vfile = (char_u *)""; /* used before options are initialized */
+#else
+extern char_u  *p_vfile;       /* 'verbosefile' */
+#endif
 EXTERN int     p_warn;         /* 'warn' */
 #ifdef FEAT_CMDL_COMPL
 EXTERN char_u  *p_wop;         /* 'wildoptions' */
@@ -872,6 +888,7 @@ EXTERN int  p_wiv;          /* 'weirdinvert' */
 EXTERN char_u  *p_ww;          /* 'whichwrap' */
 EXTERN long    p_wc;           /* 'wildchar' */
 EXTERN long    p_wcm;          /* 'wildcharm' */
+EXTERN long    p_wic;          /* 'wildignorecase' */
 EXTERN char_u  *p_wim;         /* 'wildmode' */
 #ifdef FEAT_WILDMENU
 EXTERN int     p_wmnu;         /* 'wildmenu' */
@@ -979,9 +996,6 @@ enum
     , BV_MOD
     , BV_MPS
     , BV_NF
-#ifdef FEAT_OSFILETYPE
-    , BV_OFT
-#endif
 #ifdef FEAT_COMPL_FUNC
     , BV_OFU
 #endif
index 3c96e64..e5c7661 100644 (file)
@@ -22,6 +22,9 @@
 #undef TRUE            /* will be redefined by exec/types.h */
 #undef FALSE
 
+/* cproto fails on missing include files, skip them */
+#ifndef PROTO
+
 #ifndef LATTICE
 # include <exec/types.h>
 # include <exec/exec.h>
@@ -55,6 +58,8 @@
 # include <libraries/arp_pragmas.h>
 #endif
 
+#endif /* PROTO */
+
 /*
  * At this point TRUE and FALSE are defined as 1L and 0L, but we want 1 and 0.
  */
@@ -113,7 +118,7 @@ mch_write(p, len)
 }
 
 /*
- * mch_inchar(): low level input funcion.
+ * mch_inchar(): low level input function.
  * Get a characters from the keyboard.
  * If time == 0 do not wait for characters.
  * If time == n wait a short time for characters.
@@ -191,16 +196,16 @@ mch_char_avail()
 }
 
 /*
- * Return amount of memory still available.
+ * Return amount of memory still available in Kbyte.
  */
     long_u
 mch_avail_mem(special)
     int            special;
 {
 #ifdef __amigaos4__
-    return (long_u)AvailMem(MEMF_ANY);
+    return (long_u)AvailMem(MEMF_ANY) >> 10;
 #else
-    return (long_u)AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY);
+    return (long_u)(AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY)) >> 10;
 #endif
 }
 
@@ -283,7 +288,9 @@ mch_init()
 #endif
 }
 
-#include <workbench/startup.h>
+#ifndef PROTO
+# include <workbench/startup.h>
+#endif
 
 /*
  * Check_win checks whether we have an interactive window.
@@ -1002,7 +1009,9 @@ mch_screenmode(arg)
  * Heavely modified by mool.
  */
 
-#include <devices/conunit.h>
+#ifndef PROTO
+# include <devices/conunit.h>
+#endif
 
 /*
  * try to get the real window size
@@ -1022,7 +1031,7 @@ mch_get_shellsize()
 
     /* insure longword alignment */
 #ifdef __amigaos4__
-    if(!(id = AllocDosObject(DOS_INFODATA, 0)))
+    if (!(id = AllocDosObject(DOS_INFODATA, 0)))
        goto out;
 #else
     id = (struct InfoData *)(((long)id_a + 3L) & ~3L);
@@ -1129,9 +1138,11 @@ out_num(n)
  * say 'oml lib:amiga.lib -r sendpacket.o'
  */
 
+#ifndef PROTO
 /* #include <proto/exec.h> */
 /* #include <proto/dos.h> */
-#include <exec/memory.h>
+# include <exec/memory.h>
+#endif
 
 /*
  * Function - dos_packet written by Phil Lindsay, Carolyn Scheppner, and Andy
index 0395bce..bcdba32 100644 (file)
@@ -56,6 +56,9 @@
 # define TEMPNAMELEN   12
 #endif
 
+/* cproto fails on missing include files */
+#ifndef PROTO
+
 #include <exec/types.h>
 #include <libraries/dos.h>
 #include <libraries/dosextens.h>
@@ -67,6 +70,8 @@
 # include <proto/intuition.h>
 #endif
 
+#endif /* PROTO */
+
 #define FNAME_ILLEGAL ";*?`#%" /* illegal characters in a file name */
 
 /*
@@ -85,6 +90,7 @@ typedef long off_t;
 # include <unistd.h>
 #endif
 
+#ifndef PROTO
 /*
  * arpbase.h must be included before functions.h
  */
@@ -92,6 +98,8 @@ typedef long off_t;
 # include <libraries/arpbase.h>
 #endif
 
+#endif /* PROTO */
+
 /*
  * This won't be needed if you have a version of Lattice 4.01 without broken
  * break signal handling.
@@ -150,7 +158,10 @@ typedef long off_t;
 # define USR_VIMRC_FILE2 "home:.vimrc"
 #endif
 #ifndef USR_VIMRC_FILE3
-# define USR_VIMRC_FILE3 "$VIM/.vimrc"
+# define USR_VIMRC_FILE3 "home:vimfiles:vimrc"
+#endif
+#ifndef USR_VIMRC_FILE4
+# define USR_VIMRC_FILE4 "$VIM/.vimrc"
 #endif
 #ifndef EVIM_FILE
 # define EVIM_FILE     "$VIMRUNTIME/evim.vim"
@@ -163,7 +174,10 @@ typedef long off_t;
 # define USR_GVIMRC_FILE2 "home:.gvimrc"
 #endif
 #ifndef USR_GVIMRC_FILE3
-# define USR_GVIMRC_FILE3 "$VIM/.gvimrc"
+# define USR_GVIMRC_FILE3 "home:vimfiles:gvimrc"
+#endif
+#ifndef USR_GVIMRC_FILE4
+# define USR_GVIMRC_FILE4 "$VIM/.gvimrc"
 #endif
 
 #ifdef FEAT_VIMINFO
index 10135aa..2eed684 100644 (file)
 
 #include <float.h>
 #include <termios.h>
-#include <kernel/OS.h>
+#ifndef PROTO
+# include <kernel/OS.h>
+#endif
+
 #include "vim.h"
 
 #if USE_THREAD_FOR_INPUT_WITH_TIMEOUT
index 260834e..e55c389 100644 (file)
@@ -22,4 +22,6 @@
 
 /* select emulation */
 
-#include <net/socket.h>                /* for typedefs and #defines only */
+#ifndef PROTO
+# include <net/socket.h>               /* for typedefs and #defines only */
+#endif
index 103cded..17246d4 100644 (file)
 # define USR_VIMRC_FILE                "$HOME\\_vimrc"
 #endif
 #ifndef USR_VIMRC_FILE2
-# define USR_VIMRC_FILE2       "$VIM\\_vimrc"
+# define USR_VIMRC_FILE2       "$HOME\\vimfiles\\vimrc"
+#endif
+#ifndef USR_VIMRC_FILE3
+# define USR_VIMRC_FILE3       "$VIM\\_vimrc"
 #endif
 #ifndef EVIM_FILE
 # define EVIM_FILE             "$VIMRUNTIME\\evim.vim"
 #  define USR_GVIMRC_FILE      "$HOME\\_gvimrc"
 # endif
 # ifndef USR_GVIMRC_FILE2
-#  define USR_GVIMRC_FILE2     "$VIM\\_gvimrc"
+#  define USR_GVIMRC_FILE2     "$HOME\\vimfiles\\gvimrc"
+# endif
+# ifndef USR_GVIMRC_FILE3
+#  define USR_GVIMRC_FILE3     "$VIM\\_gvimrc"
 # endif
 # ifndef SYS_MENU_FILE
 #  define SYS_MENU_FILE                "$VIMRUNTIME\\menu.vim"
index cf575dd..78b79c2 100644 (file)
@@ -45,7 +45,7 @@
 /* Get stat.h or something similar. Comment: How come some OS get in in vim.h */
 # include <sys/stat.h>
 /* && defined(HAVE_CURSE) */
-/* The curses.h from MacOS X provides by default some BACKWARD compatibilty
+/* The curses.h from MacOS X provides by default some BACKWARD compatibility
  * definition which can cause us problem later on. So we undefine a few of them. */
 # include <curses.h>
 # undef reg
index 3ede648..2c4038e 100644 (file)
@@ -14,6 +14,8 @@
  */
 
 #define NO_X11_INCLUDES
+#define BalloonEval int   /* used in header files */
+
 #include "vim.h"
 #ifndef FEAT_GUI_MAC
 # include <CoreServices/CoreServices.h>
@@ -75,7 +77,7 @@ mac_string_convert(ptr, len, lenp, fail_on_error, from_enc, to_enc, unconvlenp)
        *unconvlenp = 0;
     cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
 
-    if(cfstr == NULL)
+    if (cfstr == NULL)
        fprintf(stderr, "Encoding failed\n");
     /* When conversion failed, try excluding bytes from the end, helps when
      * there is an incomplete byte sequence.  Only do up to 6 bytes to avoid
index 4ad8d26..d919f63 100644 (file)
     Error: MACOS 9 is no longer supported in Vim 7
 #endif
 
+/* Avoid a conflict for the definition of Boolean between Mac header files and
+ * X11 header files. */
+#define NO_X11_INCLUDES
+#define BalloonEval int   /* used in header files */
+
 #include "vim.h"
 #import <Cocoa/Cocoa.h>
 
@@ -23,9 +28,9 @@
  * Clipboard support for the console.
  * Don't include this when building the GUI version, the functions in
  * gui_mac.c are used then.  TODO: remove those instead?
- * But for MacVim we need these ones.
+ * But for MacVim we do need these ones.
  */
-#if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI) || defined(FEAT_GUI_MACVIM))
+#if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI_ENABLED) || defined(FEAT_GUI_MACVIM))
 
 /* Used to identify clipboard data copied from Vim. */
 
@@ -60,7 +65,7 @@ clip_mch_request_selection(VimClipboard *cbd)
     NSString *bestType = [pb availableTypeFromArray:supportedTypes];
     if (!bestType) goto releasepool;
 
-    int motion_type = MCHAR;
+    int motion_type = MAUTO;
     NSString *string = nil;
 
     if ([bestType isEqual:VimPboardType])
@@ -84,9 +89,7 @@ clip_mch_request_selection(VimClipboard *cbd)
 
     if (!string)
     {
-       /* Use NSStringPboardType.  The motion type is set to line-wise if the
-        * string contains at least one EOL character, otherwise it is set to
-        * character-wise (block-wise is never used).
+       /* Use NSStringPboardType.  The motion type is detected automatically.
         */
        NSMutableString *mstring =
                [[pb stringForType:NSStringPboardType] mutableCopy];
@@ -103,19 +106,13 @@ clip_mch_request_selection(VimClipboard *cbd)
                                           options:0 range:range];
        }
 
-       /* Scan for newline character to decide whether the string should be
-        * pasted line-wise or character-wise.
-        */
-       motion_type = MCHAR;
-       if (0 < n || NSNotFound != [mstring rangeOfString:@"\n"].location)
-           motion_type = MLINE;
-
        string = mstring;
     }
 
+    /* Default to MAUTO, uses MCHAR or MLINE depending on trailing NL. */
     if (!(MCHAR == motion_type || MLINE == motion_type || MBLOCK == motion_type
            || MAUTO == motion_type))
-       motion_type = MCHAR;
+       motion_type = MAUTO;
 
     char_u *str = (char_u*)[string UTF8String];
     int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
index 0df20c7..8cc0ecc 100644 (file)
  * Some functions are also used for Win16 (MS-Windows 3.1).
  */
 
-#include "vimio.h"
 #include "vim.h"
 
-#include <conio.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <conio.h>
+#endif
 
 /*
  * MS-DOS only code, not used for Win16.
 #ifndef WIN16
 
 
-#include <bios.h>
-#ifdef DJGPP
-# include <dpmi.h>
-# include <signal.h>
-# include <sys/movedata.h>
-# include <crt0.h>
-# ifdef FEAT_CLIPBOARD
-#  include <sys/segments.h>
+#ifndef PROTO
+# include <bios.h>
+# ifdef DJGPP
+#  include <dpmi.h>
+#  include <signal.h>
+#  include <sys/movedata.h>
+#  include <crt0.h>
+#  ifdef FEAT_CLIPBOARD
+#   include <sys/segments.h>
+#  endif
+# else
+#  include <alloc.h>
 # endif
-#else
-# include <alloc.h>
 #endif
 
 #if defined(DJGPP) || defined(PROTO)
@@ -551,15 +555,15 @@ mch_update_cursor(void)
 #endif
 
 /*
- * Return amount of memory currently available.
+ * Return amount of memory currently available in Kbyte.
  */
     long_u
 mch_avail_mem(int special)
 {
 #ifdef DJGPP
-    return _go32_dpmi_remaining_virtual_memory();
+    return _go32_dpmi_remaining_virtual_memory() >> 10;
 #else
-    return coreleft();
+    return coreleft() >> 10;
 #endif
 }
 
@@ -698,7 +702,7 @@ vim_kbhit(void)
  * If Vim should work over the serial line after a 'ctty com1' we must use
  * kbhit() and getch(). (jw)
  * Usually kbhit() is not used, because then CTRL-C and CTRL-P
- * will be catched by DOS (mool).
+ * will be caught by DOS (mool).
  *
  * return TRUE if a character is available, FALSE otherwise
  */
@@ -967,7 +971,7 @@ got3:                           s += 3;
 }
 
 /*
- * mch_inchar(): low level input funcion.
+ * mch_inchar(): low level input function.
  * Get a characters from the keyboard.
  * If time == 0 do not wait for characters.
  * If time == n wait a short time for characters.
@@ -989,7 +993,7 @@ mch_inchar(
 
     /*
      * if we got a ctrl-C when we were busy, there will be a "^C" somewhere
-     * on the sceen, so we need to redisplay it.
+     * on the screen, so we need to redisplay it.
      */
     if (delayed_redraw)
     {
@@ -1741,7 +1745,7 @@ mch_settmode(int tmode)
 mch_setmouse(int on)
 {
     mouse_active = on;
-    mouse_hidden = TRUE;       /* dont show it until moved */
+    mouse_hidden = TRUE;       /* don't show it until moved */
 }
 #endif
 
@@ -2131,8 +2135,10 @@ mch_rename(const char *OldFile, const char *NewFile)
 
 #undef setlocale
 
-#include <go32.h>
-#include <inlines/ctype.ha>
+#ifndef PROTO
+# include <go32.h>
+# include <inlines/ctype.ha>
+#endif
 #include <locale.h>
 
 #define UPCASE (__dj_ISALNUM | __dj_ISALPHA | __dj_ISGRAPH | __dj_ISPRINT | __dj_ISUPPER)
@@ -2233,7 +2239,7 @@ clip_mch_lose_selection(VimClipboard *cbd)
     void
 clip_mch_request_selection(VimClipboard *cbd)
 {
-    int                type = MCHAR;
+    int                type = MAUTO;
     char_u     *pAllocated = NULL;
     char_u     *pClipText = NULL;
     int                clip_data_format = 0;
@@ -2281,14 +2287,12 @@ clip_mch_request_selection(VimClipboard *cbd)
        {
            clip_data_format = CF_TEXT;
            pClipText = pAllocated;
-           type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
        }
 
        else if ((pAllocated = Win16GetClipboardData(CF_OEMTEXT)) != NULL)
        {
            clip_data_format = CF_OEMTEXT;
            pClipText = pAllocated;
-           type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
        }
 
        /* Did we get anything? */
@@ -2434,7 +2438,7 @@ Win16OpenClipboard(void)
     long    start_time;
     int            tick_count;
 
-    /* int 02xf, AX = 0x1701 attempts to open the Windows clipboard.  Upon
+    /* int 0x2f, AX = 0x1701 attempts to open the Windows clipboard.  Upon
      * return from the interrupt, if AX is non-zero, the clipboard was
      * successfully opened.  If AX is zero, the clipboard could not be opened
      * because it is currently in use by another process.
@@ -2529,7 +2533,7 @@ Win16EmptyClipboard(void)
 {
     __dpmi_regs  dpmi_regs;
 
-    /* int 02xf, AX = 0x1702 attempts to empty the Windows clipboard.  Upon
+    /* int 0x2f, AX = 0x1702 attempts to empty the Windows clipboard.  Upon
      * return from the interrupt, if AX == 0, the clipboard could not be
      * emptied (for some reason).
      */
@@ -2612,7 +2616,7 @@ Win16GetClipboardData(int clip_data_format)
     case CF_TEXT:                  /* Windows text */
     case CF_OEMTEXT:               /* DOS (OEM) text */
 
-       /* int 02xf, AX = 0x1704 returns the number of bytes of data currently
+       /* int 0x2f, AX = 0x1704 returns the number of bytes of data currently
         * on the Windows clipboard, for the specified format.  Upon return
         * from the interrupt, DX:AX = the number of bytes, rounded up to the
         * nearest multiple of 32.
@@ -2816,7 +2820,7 @@ Win16SetClipboardData(
        clip_data_size);                /* how many bytes to copy */
 
     /* Send data from the DOS transfer buffer to the Windows clipboard.
-     * int 02xf, AX = 0x1703 sends SI:CX bytes of data from the buffer
+     * int 0x2f, AX = 0x1703 sends SI:CX bytes of data from the buffer
      * at ES:BX, to the clipboard.
      */
     dpmi_regs.x.ax = 0x1703;                   /* send clipboard data */
index 95578bc..735410f 100644 (file)
 
 #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */
 
-#include <dos.h>
-#include <dir.h>
-#include <time.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <dos.h>
+# include <dir.h>
+# include <time.h>
+#endif
 
 #ifdef DJGPP
 # include <unistd.h>
index 6ee6379..96d3448 100644 (file)
 # endif
 #endif
 
-#include "vimio.h"
 #include "vim.h"
 
 #ifdef WIN16
 # define SHORT_FNAME           /* always 8.3 file name */
-# include <dos.h>
+/* cproto fails on missing include files */
+# ifndef PROTO
+#  include <dos.h>
+# endif
 # include <string.h>
 #endif
 #include <sys/types.h>
-#include <errno.h>
 #include <signal.h>
 #include <limits.h>
-#include <process.h>
+#ifndef PROTO
+# include <process.h>
+#endif
 
 #undef chdir
 #ifdef __GNUC__
 # include <direct.h>
 #endif
 
-#if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
-# include <shellapi.h>
-#endif
-
-#if defined(FEAT_PRINTER) && !defined(FEAT_POSTSCRIPT)
-# include <dlgs.h>
-# ifdef WIN3264
-#  include <winspool.h>
-# else
-#  include <print.h>
+#ifndef PROTO
+# if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
+#  include <shellapi.h>
 # endif
-# include <commdlg.h>
+
+# if defined(FEAT_PRINTER) && !defined(FEAT_POSTSCRIPT)
+#  include <dlgs.h>
+#  ifdef WIN3264
+#   include <winspool.h>
+#  else
+#   include <print.h>
+#  endif
+#  include <commdlg.h>
 #endif
 
+#endif /* PROTO */
+
 #ifdef __MINGW32__
 # ifndef FROM_LEFT_1ST_BUTTON_PRESSED
 #  define FROM_LEFT_1ST_BUTTON_PRESSED    0x0001
@@ -178,12 +184,14 @@ char * _fullpath(char *buf, char *fname, int len)
 }
 # endif
 
+# if !defined(__MINGW32__) || (__GNUC__ < 4)
 int _chdrive(int drive)
 {
     char temp [3] = "-:";
     temp[0] = drive + 'A' - 1;
     return !SetCurrentDirectory(temp);
 }
+# endif
 #else
 # ifdef __BORLANDC__
 /* being a more ANSI compliant compiler, BorlandC doesn't define _stricoll:
@@ -595,7 +603,7 @@ display_errors()
                                     gui.starting ? (char_u *)_("Message") :
 #endif
                                             (char_u *)_("Error"),
-                                    p, (char_u *)_("&Ok"), 1, NULL);
+                                    p, (char_u *)_("&Ok"), 1, NULL, FALSE);
                break;
            }
        ga_clear(&error_ga);
@@ -817,7 +825,11 @@ mch_libcall(
     BOOL fRunTimeLinkSuccess = FALSE;
 
     // Get a handle to the DLL module.
+# ifdef WIN16
     hinstLib = LoadLibrary(libname);
+# else
+    hinstLib = vimLoadLib(libname);
+# endif
 
     // If the handle is valid, try to get the function address.
     if (hinstLib != NULL)
@@ -895,736 +907,6 @@ mch_libcall(
 }
 #endif
 
-#if defined(FEAT_MBYTE) || defined(PROTO)
-/*
- * Convert an UTF-8 string to UTF-16.
- * "instr[inlen]" is the input.  "inlen" is in bytes.
- * When "outstr" is NULL only return the number of UTF-16 words produced.
- * Otherwise "outstr" must be a buffer of sufficient size.
- * Returns the number of UTF-16 words produced.
- */
-    int
-utf8_to_utf16(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
-{
-    int                outlen = 0;
-    char_u     *p = instr;
-    int                todo = inlen;
-    int                l;
-    int                ch;
-
-    while (todo > 0)
-    {
-       /* Only convert if we have a complete sequence. */
-       l = utf_ptr2len_len(p, todo);
-       if (l > todo)
-       {
-           /* Return length of incomplete sequence. */
-           if (unconvlenp != NULL)
-               *unconvlenp = todo;
-           break;
-       }
-
-       ch = utf_ptr2char(p);
-       if (ch >= 0x10000)
-       {
-           /* non-BMP character, encoding with surrogate pairs */
-           ++outlen;
-           if (outstr != NULL)
-           {
-               *outstr++ = (0xD800 - (0x10000 >> 10)) + (ch >> 10);
-               *outstr++ = 0xDC00 | (ch & 0x3FF);
-           }
-       }
-       else if (outstr != NULL)
-           *outstr++ = ch;
-       ++outlen;
-       p += l;
-       todo -= l;
-    }
-
-    return outlen;
-}
-
-/*
- * Convert an UTF-16 string to UTF-8.
- * The input is "instr[inlen]" with "inlen" in number of UTF-16 words.
- * When "outstr" is NULL only return the required number of bytes.
- * Otherwise "outstr" must be a buffer of sufficient size.
- * Return the number of bytes produced.
- */
-    int
-utf16_to_utf8(short_u *instr, int inlen, char_u *outstr)
-{
-    int                outlen = 0;
-    int                todo = inlen;
-    short_u    *p = instr;
-    int                l;
-    int                ch, ch2;
-
-    while (todo > 0)
-    {
-       ch = *p;
-       if (ch >= 0xD800 && ch <= 0xDBFF && todo > 1)
-       {
-           /* surrogate pairs handling */
-           ch2 = p[1];
-           if (ch2 >= 0xDC00 && ch2 <= 0xDFFF)
-           {
-               ch = ((ch - 0xD800) << 10) + (ch2 & 0x3FF) + 0x10000;
-               ++p;
-               --todo;
-           }
-       }
-       if (outstr != NULL)
-       {
-           l = utf_char2bytes(ch, outstr);
-           outstr += l;
-       }
-       else
-           l = utf_char2len(ch);
-       ++p;
-       outlen += l;
-       --todo;
-    }
-
-    return outlen;
-}
-
-/*
- * Call MultiByteToWideChar() and allocate memory for the result.
- * Returns the result in "*out[*outlen]" with an extra zero appended.
- * "outlen" is in words.
- */
-    void
-MultiByteToWideChar_alloc(UINT cp, DWORD flags,
-       LPCSTR in, int inlen,
-       LPWSTR *out, int *outlen)
-{
-    *outlen = MultiByteToWideChar(cp, flags, in, inlen, 0, 0);
-    /* Add one one word to avoid a zero-length alloc(). */
-    *out = (LPWSTR)alloc(sizeof(WCHAR) * (*outlen + 1));
-    if (*out != NULL)
-    {
-       MultiByteToWideChar(cp, flags, in, inlen, *out, *outlen);
-       (*out)[*outlen] = 0;
-    }
-}
-
-/*
- * Call WideCharToMultiByte() and allocate memory for the result.
- * Returns the result in "*out[*outlen]" with an extra NUL appended.
- */
-    void
-WideCharToMultiByte_alloc(UINT cp, DWORD flags,
-       LPCWSTR in, int inlen,
-       LPSTR *out, int *outlen,
-       LPCSTR def, LPBOOL useddef)
-{
-    *outlen = WideCharToMultiByte(cp, flags, in, inlen, NULL, 0, def, useddef);
-    /* Add one one byte to avoid a zero-length alloc(). */
-    *out = alloc((unsigned)*outlen + 1);
-    if (*out != NULL)
-    {
-       WideCharToMultiByte(cp, flags, in, inlen, *out, *outlen, def, useddef);
-       (*out)[*outlen] = 0;
-    }
-}
-
-#endif /* FEAT_MBYTE */
-
-#ifdef FEAT_CLIPBOARD
-/*
- * Clipboard stuff, for cutting and pasting text to other windows.
- */
-
-/* Type used for the clipboard type of Vim's data. */
-typedef struct
-{
-    int type;          /* MCHAR, MBLOCK or MLINE */
-    int txtlen;                /* length of CF_TEXT in bytes */
-    int ucslen;                /* length of CF_UNICODETEXT in words */
-    int rawlen;                /* length of clip_star.format_raw, including encoding,
-                          excluding terminating NUL */
-} VimClipType_t;
-
-/*
- * Make vim the owner of the current selection.  Return OK upon success.
- */
-/*ARGSUSED*/
-    int
-clip_mch_own_selection(VimClipboard *cbd)
-{
-    /*
-     * Never actually own the clipboard.  If another application sets the
-     * clipboard, we don't want to think that we still own it.
-     */
-    return FAIL;
-}
-
-/*
- * Make vim NOT the owner of the current selection.
- */
-/*ARGSUSED*/
-    void
-clip_mch_lose_selection(VimClipboard *cbd)
-{
-    /* Nothing needs to be done here */
-}
-
-/*
- * Copy "str[*size]" into allocated memory, changing CR-NL to NL.
- * Return the allocated result and the size in "*size".
- * Returns NULL when out of memory.
- */
-    static char_u *
-crnl_to_nl(const char_u *str, int *size)
-{
-    int                pos = 0;
-    int                str_len = *size;
-    char_u     *ret;
-    char_u     *retp;
-
-    /* Avoid allocating zero bytes, it generates an error message. */
-    ret = lalloc((long_u)(str_len == 0 ? 1 : str_len), TRUE);
-    if (ret != NULL)
-    {
-       retp = ret;
-       for (pos = 0; pos < str_len; ++pos)
-       {
-           if (str[pos] == '\r' && str[pos + 1] == '\n')
-           {
-               ++pos;
-               --(*size);
-           }
-           *retp++ = str[pos];
-       }
-    }
-
-    return ret;
-}
-
-#if defined(FEAT_MBYTE) || defined(PROTO)
-/*
- * Note: the following two functions are only guaranteed to work when using
- * valid MS-Windows codepages or when iconv() is available.
- */
-
-/*
- * Convert "str" from 'encoding' to UTF-16.
- * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
- * Output is returned as an allocated string.  "*lenp" is set to the length of
- * the result.  A trailing NUL is always added.
- * Returns NULL when out of memory.
- */
-    short_u *
-enc_to_utf16(char_u *str, int *lenp)
-{
-    vimconv_T  conv;
-    WCHAR      *ret;
-    char_u     *allocbuf = NULL;
-    int                len_loc;
-    int                length;
-
-    if (lenp == NULL)
-    {
-       len_loc = (int)STRLEN(str) + 1;
-       lenp = &len_loc;
-    }
-
-    if (enc_codepage > 0)
-    {
-       /* We can do any CP### -> UTF-16 in one pass, and we can do it
-        * without iconv() (convert_* may need iconv). */
-       MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
-    }
-    else
-    {
-       /* Use "latin1" by default, we might be called before we have p_enc
-        * set up.  Convert to utf-8 first, works better with iconv().  Does
-        * nothing if 'encoding' is "utf-8". */
-       conv.vc_type = CONV_NONE;
-       if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
-                                                  (char_u *)"utf-8") == FAIL)
-           return NULL;
-       if (conv.vc_type != CONV_NONE)
-       {
-           str = allocbuf = string_convert(&conv, str, lenp);
-           if (str == NULL)
-               return NULL;
-       }
-       convert_setup(&conv, NULL, NULL);
-
-       length = utf8_to_utf16(str, *lenp, NULL, NULL);
-       ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
-       if (ret != NULL)
-       {
-           utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
-           ret[length] = 0;
-       }
-
-       vim_free(allocbuf);
-    }
-
-    *lenp = length;
-    return (short_u *)ret;
-}
-
-/*
- * Convert an UTF-16 string to 'encoding'.
- * Input in "str" with length (counted in wide characters) "*lenp".  When
- * "lenp" is NULL, use wcslen().
- * Output is returned as an allocated string.  If "*lenp" is not NULL it is
- * set to the length of the result.
- * Returns NULL when out of memory.
- */
-    char_u *
-utf16_to_enc(short_u *str, int *lenp)
-{
-    vimconv_T  conv;
-    char_u     *utf8_str = NULL, *enc_str = NULL;
-    int                len_loc;
-
-    if (lenp == NULL)
-    {
-       len_loc = (int)wcslen(str) + 1;
-       lenp = &len_loc;
-    }
-
-    if (enc_codepage > 0)
-    {
-       /* We can do any UTF-16 -> CP### in one pass. */
-       int length;
-
-       WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
-                                           (LPSTR *)&enc_str, &length, 0, 0);
-       *lenp = length;
-       return enc_str;
-    }
-
-    /* Avoid allocating zero bytes, it generates an error message. */
-    utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
-    if (utf8_str != NULL)
-    {
-       *lenp = utf16_to_utf8(str, *lenp, utf8_str);
-
-       /* We might be called before we have p_enc set up. */
-       conv.vc_type = CONV_NONE;
-       convert_setup(&conv, (char_u *)"utf-8",
-                                           p_enc? p_enc: (char_u *)"latin1");
-       if (conv.vc_type == CONV_NONE)
-       {
-           /* p_enc is utf-8, so we're done. */
-           enc_str = utf8_str;
-       }
-       else
-       {
-           enc_str = string_convert(&conv, utf8_str, lenp);
-           vim_free(utf8_str);
-       }
-
-       convert_setup(&conv, NULL, NULL);
-    }
-
-    return enc_str;
-}
-#endif /* FEAT_MBYTE */
-
-/*
- * Wait for another process to Close the Clipboard.
- * Returns TRUE for success.
- */
-    static int
-vim_open_clipboard(void)
-{
-    int delay = 10;
-
-    while (!OpenClipboard(NULL))
-    {
-       if (delay > 500)
-           return FALSE;  /* waited too long, give up */
-       Sleep(delay);
-       delay *= 2;     /* wait for 10, 20, 40, 80, etc. msec */
-    }
-    return TRUE;
-}
-
-/*
- * Get the current selection and put it in the clipboard register.
- *
- * NOTE: Must use GlobalLock/Unlock here to ensure Win32s compatibility.
- * On NT/W95 the clipboard data is a fixed global memory object and
- * so its handle = its pointer.
- * On Win32s, however, co-operation with the Win16 system means that
- * the clipboard data is moveable and its handle is not a pointer at all,
- * so we can't just cast the return value of GetClipboardData to (char_u*).
- * <VN>
- */
-    void
-clip_mch_request_selection(VimClipboard *cbd)
-{
-    VimClipType_t      metadata = { -1, -1, -1, -1 };
-    HGLOBAL            hMem = NULL;
-    char_u             *str = NULL;
-#if defined(FEAT_MBYTE) && defined(WIN3264)
-    char_u             *to_free = NULL;
-#endif
-#ifdef FEAT_MBYTE
-    HGLOBAL            rawh = NULL;
-#endif
-    int                        str_size = 0;
-    int                        maxlen;
-    size_t             n;
-
-    /*
-     * Don't pass GetActiveWindow() as an argument to OpenClipboard() because
-     * then we can't paste back into the same window for some reason - webb.
-     */
-    if (!vim_open_clipboard())
-       return;
-
-    /* Check for vim's own clipboard format first.  This only gets the type of
-     * the data, still need to use CF_UNICODETEXT or CF_TEXT for the text. */
-    if (IsClipboardFormatAvailable(cbd->format))
-    {
-       VimClipType_t   *meta_p;
-       HGLOBAL         meta_h;
-
-       /* We have metadata on the clipboard; try to get it. */
-       if ((meta_h = GetClipboardData(cbd->format)) != NULL
-               && (meta_p = (VimClipType_t *)GlobalLock(meta_h)) != NULL)
-       {
-           /* The size of "VimClipType_t" changed, "rawlen" was added later.
-            * Only copy what is available for backwards compatibility. */
-           n = sizeof(VimClipType_t);
-           if (GlobalSize(meta_h) < n)
-               n = GlobalSize(meta_h);
-           memcpy(&metadata, meta_p, n);
-           GlobalUnlock(meta_h);
-       }
-    }
-
-#ifdef FEAT_MBYTE
-    /* Check for Vim's raw clipboard format first.  This is used without
-     * conversion, but only if 'encoding' matches. */
-    if (IsClipboardFormatAvailable(cbd->format_raw)
-                                     && metadata.rawlen > (int)STRLEN(p_enc))
-    {
-       /* We have raw data on the clipboard; try to get it. */
-       if ((rawh = GetClipboardData(cbd->format_raw)) != NULL)
-       {
-           char_u      *rawp;
-
-           rawp = (char_u *)GlobalLock(rawh);
-           if (rawp != NULL && STRCMP(p_enc, rawp) == 0)
-           {
-               n = STRLEN(p_enc) + 1;
-               str = rawp + n;
-               str_size = (int)(metadata.rawlen - n);
-           }
-           else
-           {
-               GlobalUnlock(rawh);
-               rawh = NULL;
-           }
-       }
-    }
-    if (str == NULL)
-    {
-#endif
-
-#if defined(FEAT_MBYTE) && defined(WIN3264)
-    /* Try to get the clipboard in Unicode if it's not an empty string. */
-    if (IsClipboardFormatAvailable(CF_UNICODETEXT) && metadata.ucslen != 0)
-    {
-       HGLOBAL hMemW;
-
-       if ((hMemW = GetClipboardData(CF_UNICODETEXT)) != NULL)
-       {
-           WCHAR *hMemWstr = (WCHAR *)GlobalLock(hMemW);
-
-           /* Use the length of our metadata if possible, but limit it to the
-            * GlobalSize() for safety. */
-           maxlen = (int)(GlobalSize(hMemW) / sizeof(WCHAR));
-           if (metadata.ucslen >= 0)
-           {
-               if (metadata.ucslen > maxlen)
-                   str_size = maxlen;
-               else
-                   str_size = metadata.ucslen;
-           }
-           else
-           {
-               for (str_size = 0; str_size < maxlen; ++str_size)
-                   if (hMemWstr[str_size] == NUL)
-                       break;
-           }
-           to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
-           GlobalUnlock(hMemW);
-       }
-    }
-    else
-#endif
-    /* Get the clipboard in the Active codepage. */
-    if (IsClipboardFormatAvailable(CF_TEXT))
-    {
-       if ((hMem = GetClipboardData(CF_TEXT)) != NULL)
-       {
-           str = (char_u *)GlobalLock(hMem);
-
-           /* The length is either what our metadata says or the strlen().
-            * But limit it to the GlobalSize() for safety. */
-           maxlen = (int)GlobalSize(hMem);
-           if (metadata.txtlen >= 0)
-           {
-               if (metadata.txtlen > maxlen)
-                   str_size = maxlen;
-               else
-                   str_size = metadata.txtlen;
-           }
-           else
-           {
-               for (str_size = 0; str_size < maxlen; ++str_size)
-                   if (str[str_size] == NUL)
-                       break;
-           }
-
-# if defined(FEAT_MBYTE) && defined(WIN3264)
-           /* The text is in the active codepage.  Convert to 'encoding',
-            * going through UTF-16. */
-           acp_to_enc(str, str_size, &to_free, &maxlen);
-           if (to_free != NULL)
-           {
-               str_size = maxlen;
-               str = to_free;
-           }
-# endif
-       }
-    }
-#ifdef FEAT_MBYTE
-    }
-#endif
-
-    if (str != NULL && *str != NUL)
-    {
-       char_u *temp_clipboard;
-
-       /* If the type is not known guess it. */
-       if (metadata.type == -1)
-           metadata.type = (vim_strchr(str, '\n') == NULL) ? MCHAR : MLINE;
-
-       /* Translate <CR><NL> into <NL>. */
-       temp_clipboard = crnl_to_nl(str, &str_size);
-       if (temp_clipboard != NULL)
-       {
-           clip_yank_selection(metadata.type, temp_clipboard, str_size, cbd);
-           vim_free(temp_clipboard);
-       }
-    }
-
-    /* unlock the global object */
-    if (hMem != NULL)
-       GlobalUnlock(hMem);
-#ifdef FEAT_MBYTE
-    if (rawh != NULL)
-       GlobalUnlock(rawh);
-#endif
-    CloseClipboard();
-#if defined(FEAT_MBYTE) && defined(WIN3264)
-    vim_free(to_free);
-#endif
-}
-
-#if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
-/*
- * Convert from the active codepage to 'encoding'.
- * Input is "str[str_size]".
- * The result is in allocated memory: "out[outlen]".  With terminating NUL.
- */
-    void
-acp_to_enc(str, str_size, out, outlen)
-    char_u     *str;
-    int                str_size;
-    char_u     **out;
-    int                *outlen;
-
-{
-    LPWSTR     widestr;
-
-    MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
-    if (widestr != NULL)
-    {
-       ++*outlen;      /* Include the 0 after the string */
-       *out = utf16_to_enc((short_u *)widestr, outlen);
-       vim_free(widestr);
-    }
-}
-#endif
-
-/*
- * Send the current selection to the clipboard.
- */
-    void
-clip_mch_set_selection(VimClipboard *cbd)
-{
-    char_u             *str = NULL;
-    VimClipType_t      metadata;
-    long_u             txtlen;
-    HGLOBAL            hMemRaw = NULL;
-    HGLOBAL            hMem = NULL;
-    HGLOBAL            hMemVim = NULL;
-# if defined(FEAT_MBYTE) && defined(WIN3264)
-    HGLOBAL            hMemW = NULL;
-# endif
-
-    /* If the '*' register isn't already filled in, fill it in now */
-    cbd->owned = TRUE;
-    clip_get_selection(cbd);
-    cbd->owned = FALSE;
-
-    /* Get the text to be put on the clipboard, with CR-LF. */
-    metadata.type = clip_convert_selection(&str, &txtlen, cbd);
-    if (metadata.type < 0)
-       return;
-    metadata.txtlen = (int)txtlen;
-    metadata.ucslen = 0;
-    metadata.rawlen = 0;
-
-#ifdef FEAT_MBYTE
-    /* Always set the raw bytes: 'encoding', NUL and the text.  This is used
-     * when copy/paste from/to Vim with the same 'encoding', so that illegal
-     * bytes can also be copied and no conversion is needed. */
-    {
-       LPSTR lpszMemRaw;
-
-       metadata.rawlen = (int)(txtlen + STRLEN(p_enc) + 1);
-       hMemRaw = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
-                                                        metadata.rawlen + 1);
-       lpszMemRaw = (LPSTR)GlobalLock(hMemRaw);
-       if (lpszMemRaw != NULL)
-       {
-           STRCPY(lpszMemRaw, p_enc);
-           memcpy(lpszMemRaw + STRLEN(p_enc) + 1, str, txtlen + 1);
-           GlobalUnlock(hMemRaw);
-       }
-       else
-           metadata.rawlen = 0;
-    }
-#endif
-
-# if defined(FEAT_MBYTE) && defined(WIN3264)
-    {
-       WCHAR           *out;
-       int             len = metadata.txtlen;
-
-       /* Convert the text to UTF-16. This is put on the clipboard as
-        * CF_UNICODETEXT. */
-       out = (WCHAR *)enc_to_utf16(str, &len);
-       if (out != NULL)
-       {
-           WCHAR *lpszMemW;
-
-           /* Convert the text for CF_TEXT to Active codepage. Otherwise it's
-            * p_enc, which has no relation to the Active codepage. */
-           metadata.txtlen = WideCharToMultiByte(GetACP(), 0, out, len,
-                                                              NULL, 0, 0, 0);
-           vim_free(str);
-           str = (char_u *)alloc((unsigned)(metadata.txtlen == 0 ? 1
-                                                         : metadata.txtlen));
-           if (str == NULL)
-           {
-               vim_free(out);
-               return;         /* out of memory */
-           }
-           WideCharToMultiByte(GetACP(), 0, out, len,
-                                                 str, metadata.txtlen, 0, 0);
-
-           /* Allocate memory for the UTF-16 text, add one NUL word to
-            * terminate the string. */
-           hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
-                                                  (len + 1) * sizeof(WCHAR));
-           lpszMemW = (WCHAR *)GlobalLock(hMemW);
-           if (lpszMemW != NULL)
-           {
-               memcpy(lpszMemW, out, len * sizeof(WCHAR));
-               lpszMemW[len] = NUL;
-               GlobalUnlock(hMemW);
-           }
-           vim_free(out);
-           metadata.ucslen = len;
-       }
-    }
-# endif
-
-    /* Allocate memory for the text, add one NUL byte to terminate the string.
-     */
-    hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, metadata.txtlen + 1);
-    {
-       LPSTR lpszMem = (LPSTR)GlobalLock(hMem);
-
-       if (lpszMem)
-       {
-           vim_strncpy(lpszMem, str, metadata.txtlen);
-           GlobalUnlock(hMem);
-       }
-    }
-
-    /* Set up metadata: */
-    {
-       VimClipType_t *lpszMemVim = NULL;
-
-       hMemVim = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE,
-                                                      sizeof(VimClipType_t));
-       lpszMemVim = (VimClipType_t *)GlobalLock(hMemVim);
-       memcpy(lpszMemVim, &metadata, sizeof(metadata));
-       GlobalUnlock(hMemVim);
-    }
-
-    /*
-     * Open the clipboard, clear it and put our text on it.
-     * Always set our Vim format.  Put Unicode and plain text on it.
-     *
-     * Don't pass GetActiveWindow() as an argument to OpenClipboard()
-     * because then we can't paste back into the same window for some
-     * reason - webb.
-     */
-    if (vim_open_clipboard())
-    {
-       if (EmptyClipboard())
-       {
-           SetClipboardData(cbd->format, hMemVim);
-           hMemVim = 0;
-# if defined(FEAT_MBYTE) && defined(WIN3264)
-           if (hMemW != NULL)
-           {
-               if (SetClipboardData(CF_UNICODETEXT, hMemW) != NULL)
-                   hMemW = NULL;
-           }
-# endif
-           /* Always use CF_TEXT.  On Win98 Notepad won't obtain the
-            * CF_UNICODETEXT text, only CF_TEXT. */
-           SetClipboardData(CF_TEXT, hMem);
-           hMem = 0;
-       }
-       CloseClipboard();
-    }
-
-    vim_free(str);
-    /* Free any allocations we didn't give to the clipboard: */
-    if (hMemRaw)
-       GlobalFree(hMemRaw);
-    if (hMem)
-       GlobalFree(hMem);
-# if defined(FEAT_MBYTE) && defined(WIN3264)
-    if (hMemW)
-       GlobalFree(hMemW);
-# endif
-    if (hMemVim)
-       GlobalFree(hMemVim);
-}
-
-#endif /* FEAT_CLIPBOARD */
-
-
 /*
  * Debugging helper: expose the MCH_WRITE_DUMP stuff to other modules
  */
@@ -1763,6 +1045,29 @@ static char_u            *prt_name = NULL;
 #define IDC_PRINTTEXT2         402
 #define IDC_PROGRESS           403
 
+#if !defined(FEAT_MBYTE) || defined(WIN16)
+# define vimSetDlgItemText(h, i, s) SetDlgItemText(h, i, s)
+#else
+    static BOOL
+vimSetDlgItemText(HWND hDlg, int nIDDlgItem, char_u *s)
+{
+    WCHAR   *wp = NULL;
+    BOOL    ret;
+
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+    {
+       wp = enc_to_utf16(s, NULL);
+    }
+    if (wp != NULL)
+    {
+       ret = SetDlgItemTextW(hDlg, nIDDlgItem, wp);
+       vim_free(wp);
+       return ret;
+    }
+    return SetDlgItemText(hDlg, nIDDlgItem, s);
+}
+#endif
+
 /*
  * Convert BGR to RGB for Windows GDI calls
  */
@@ -1779,7 +1084,7 @@ swap_me(COLORREF colorref)
 }
 
 /* Attempt to make this work for old and new compilers */
-#if !defined(_MSC_VER) || (_MSC_VER < 1300) || !defined(INT_PTR)
+#if !defined(_WIN64) && (!defined(_MSC_VER) || _MSC_VER < 1300)
 # define PDP_RETVAL BOOL
 #else
 # define PDP_RETVAL INT_PTR
@@ -1814,18 +1119,18 @@ PrintDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
                {
                    SendDlgItemMessage(hDlg, i, WM_SETFONT, (WPARAM)hfont, 1);
                    if (GetDlgItemText(hDlg,i, buff, sizeof(buff)))
-                       SetDlgItemText(hDlg,i, _(buff));
+                       vimSetDlgItemText(hDlg,i, _(buff));
                }
                SendDlgItemMessage(hDlg, IDCANCEL,
                                                WM_SETFONT, (WPARAM)hfont, 1);
                if (GetDlgItemText(hDlg,IDCANCEL, buff, sizeof(buff)))
-                   SetDlgItemText(hDlg,IDCANCEL, _(buff));
+                   vimSetDlgItemText(hDlg,IDCANCEL, _(buff));
            }
 #endif
            SetWindowText(hDlg, szAppName);
            if (prt_name != NULL)
            {
-               SetDlgItemText(hDlg, IDC_PRINTTEXT2, (LPSTR)prt_name);
+               vimSetDlgItemText(hDlg, IDC_PRINTTEXT2, (LPSTR)prt_name);
                vim_free(prt_name);
                prt_name = NULL;
            }
@@ -1854,12 +1159,12 @@ AbortProc(HDC hdcPrn, int iCode)
 {
     MSG msg;
 
-    while (!*bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+    while (!*bUserAbort && pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
     {
-       if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg))
+       if (!hDlgPrint || !pIsDialogMessage(hDlgPrint, &msg))
        {
            TranslateMessage(&msg);
-           DispatchMessage(&msg);
+           pDispatchMessage(&msg);
        }
     }
     return !*bUserAbort;
@@ -1867,7 +1172,7 @@ AbortProc(HDC hdcPrn, int iCode)
 
 #ifndef FEAT_GUI
 
-    static UINT CALLBACK
+    static UINT_PTR CALLBACK
 PrintHookProc(
        HWND hDlg,      // handle to dialog box
        UINT uiMsg,     // message identifier
@@ -2283,7 +1588,7 @@ mch_print_begin(prt_settings_T *psettings)
     SetAbortProc(prt_dlg.hDC, AbortProc);
 #endif
     wsprintf(szBuffer, _("Printing '%s'"), gettail(psettings->jobname));
-    SetDlgItemText(hDlgPrint, IDC_PRINTTEXT1, (LPSTR)szBuffer);
+    vimSetDlgItemText(hDlgPrint, IDC_PRINTTEXT1, (LPSTR)szBuffer);
 
     vim_memset(&di, 0, sizeof(DOCINFO));
     di.cbSize = sizeof(DOCINFO);
@@ -2317,7 +1622,7 @@ mch_print_end_page(void)
 mch_print_begin_page(char_u *msg)
 {
     if (msg != NULL)
-       SetDlgItemText(hDlgPrint, IDC_PROGRESS, (LPSTR)msg);
+       vimSetDlgItemText(hDlgPrint, IDC_PROGRESS, (LPSTR)msg);
     return (StartPage(prt_dlg.hDC) > 0);
 }
 
@@ -2346,10 +1651,41 @@ mch_print_start_line(margin, page_line)
     int
 mch_print_text_out(char_u *p, int len)
 {
-#ifdef FEAT_PROPORTIONAL_FONTS
+#if defined(FEAT_PROPORTIONAL_FONTS) || (defined(FEAT_MBYTE) && !defined(WIN16))
     SIZE       sz;
 #endif
+#if defined(FEAT_MBYTE) && !defined(WIN16)
+    WCHAR      *wp = NULL;
+    int                wlen = len;
+
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+    {
+       wp = enc_to_utf16(p, &wlen);
+    }
+    if (wp != NULL)
+    {
+       int ret = FALSE;
 
+       TextOutW(prt_dlg.hDC, prt_pos_x + prt_left_margin,
+                                        prt_pos_y + prt_top_margin, wp, wlen);
+       GetTextExtentPoint32W(prt_dlg.hDC, wp, wlen, &sz);
+       vim_free(wp);
+       prt_pos_x += (sz.cx - prt_tm.tmOverhang);
+       /* This is wrong when printing spaces for a TAB. */
+       if (p[len] != NUL)
+       {
+           wlen = MB_PTR2LEN(p + len);
+           wp = enc_to_utf16(p + len, &wlen);
+           if (wp != NULL)
+           {
+               GetTextExtentPoint32W(prt_dlg.hDC, wp, 1, &sz);
+               ret = (prt_pos_x + prt_left_margin + sz.cx > prt_right_margin);
+               vim_free(wp);
+           }
+       }
+       return ret;
+    }
+#endif
     TextOut(prt_dlg.hDC, prt_pos_x + prt_left_margin,
                                          prt_pos_y + prt_top_margin, p, len);
 #ifndef FEAT_PROPORTIONAL_FONTS
@@ -2408,7 +1744,9 @@ mch_print_set_fg(long_u fgcol)
 
 
 #if defined(FEAT_SHORTCUT) || defined(PROTO)
-# include <shlobj.h>
+# ifndef PROTO
+#  include <shlobj.h>
+# endif
 
 /*
  * When "fname" is the name of a shortcut (*.lnk) resolve the file it points
@@ -2510,7 +1848,7 @@ win32_set_foreground()
  *
  * So we create a hidden window, and arrange to destroy it on exit.
  */
-HWND message_window = 0;           /* window that's handling messsages */
+HWND message_window = 0;           /* window that's handling messages */
 
 #define VIM_CLASSNAME      "VIM_MESSAGES"
 #define VIM_CLASSNAME_LEN  (sizeof(VIM_CLASSNAME) - 1)
@@ -2573,7 +1911,7 @@ CleanUpMessaging(void)
 
 static int save_reply(HWND server, char_u *reply, int expr);
 
-/*s
+/*
  * The window procedure for the hidden message window.
  * It handles callback messages and notifications from servers.
  * In order to process these messages, it is necessary to run a
@@ -2613,7 +1951,6 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
        HWND            sender = (HWND)wParam;
        COPYDATASTRUCT  reply;
        char_u          *res;
-       char_u          winstr[30];
        int             retval;
        char_u          *str;
        char_u          *tofree;
@@ -2664,8 +2001,8 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
            reply.cbData = (DWORD)STRLEN(res) + 1;
 
            serverSendEnc(sender);
-           retval = (int)SendMessage(sender, WM_COPYDATA, (WPARAM)message_window,
-                                                           (LPARAM)(&reply));
+           retval = (int)SendMessage(sender, WM_COPYDATA,
+                                   (WPARAM)message_window, (LPARAM)(&reply));
            vim_free(res);
            return retval;
 
@@ -2686,6 +2023,8 @@ Messaging_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 #ifdef FEAT_AUTOCMD
                else if (data->dwData == COPYDATA_REPLY)
                {
+                   char_u      winstr[30];
+
                    sprintf((char *)winstr, PRINTF_HEX_LONG_U, (long_u)sender);
                    apply_autocmds(EVENT_REMOTEREPLY, winstr, str,
                                                                TRUE, curbuf);
@@ -3130,10 +2469,10 @@ serverProcessPendingMessages(void)
 {
     MSG msg;
 
-    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+    while (pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
     {
        TranslateMessage(&msg);
-       DispatchMessage(&msg);
+       pDispatchMessage(&msg);
     }
 }
 
@@ -3319,7 +2658,7 @@ init_logfont(LOGFONT *lf)
 
     ReleaseDC(hwnd, hdc);
 
-    /* If we couldn't find a useable font, return failure */
+    /* If we couldn't find a usable font, return failure */
     if (n == 1)
        return FAIL;
 
index 1a7250e..d482b34 100644 (file)
@@ -24,10 +24,10 @@ void qnx_init()
 #if defined(FEAT_GUI_PHOTON)
     PhChannelParms_t parms;
 
-    memset( &parms, 0, sizeof( parms ) );
+    memset(&parms, 0, sizeof(parms));
     parms.flags = Ph_DYNAMIC_BUFFER;
 
-    is_photon_available = (PhAttach( NULL, &parms ) != NULL) ? TRUE : FALSE;
+    is_photon_available = (PhAttach(NULL, &parms) != NULL) ? TRUE : FALSE;
 #endif
 }
 
@@ -39,8 +39,8 @@ void qnx_init()
 /* Turn on the clipboard for a console vim when photon is running */
 void qnx_clip_init()
 {
-    ifis_photon_available == TRUE && !gui.in_use)
-       clip_init( TRUE );
+    if (is_photon_available == TRUE && !gui.in_use)
+       clip_init(TRUE);
 }
 
 /*****************************************************************************/
@@ -48,32 +48,32 @@ void qnx_clip_init()
 
 /* No support for owning the clipboard */
 int
-clip_mch_own_selection( VimClipboard *cbd )
+clip_mch_own_selection(VimClipboard *cbd)
 {
     return FALSE;
 }
 
 void
-clip_mch_lose_selection( VimClipboard *cbd )
+clip_mch_lose_selection(VimClipboard *cbd)
 {
 }
 
 void
-clip_mch_request_selection( VimClipboard *cbd )
+clip_mch_request_selection(VimClipboard *cbd)
 {
     int                    type = MLINE, clip_length = 0, is_type_set = FALSE;
     void           *cbdata;
     PhClipHeader    *clip_header;
     char_u         *clip_text = NULL;
 
-    cbdata = PhClipboardPasteStart( PhInputGroup( NULL ));
-    if( cbdata != NULL )
+    cbdata = PhClipboardPasteStart(PhInputGroup(NULL));
+    if (cbdata != NULL)
     {
        /* Look for the vim specific clip first */
-       clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_VIM );
-       if( clip_header != NULL && clip_header->data != NULL )
+       clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_VIM);
+       if (clip_header != NULL && clip_header->data != NULL)
        {
-           switch( *(char *) clip_header->data )
+           switch(*(char *) clip_header->data)
            {
                default: /* fallthrough to line type */
                case 'L': type = MLINE; break;
@@ -86,27 +86,27 @@ clip_mch_request_selection( VimClipboard *cbd )
        }
 
        /* Try for just normal text */
-       clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_TEXT );
-       if( clip_header != NULL )
+       clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_TEXT);
+       if (clip_header != NULL)
        {
            clip_text = clip_header->data;
            clip_length  = clip_header->length - 1;
 
-           if( clip_text != NULL && is_type_set == FALSE )
-               type = (strchr( clip_text, '\r' ) != NULL) ? MLINE : MCHAR;
+           if (clip_text != NULL && is_type_set == FALSE)
+               type = MAUTO;
        }
 
-       if( (clip_text != NULL) && (clip_length > 0) )
+       if ((clip_text != NULL) && (clip_length > 0))
        {
-           clip_yank_selection( type, clip_text, clip_length, cbd );
+           clip_yank_selection(type, clip_text, clip_length, cbd);
        }
 
-       PhClipboardPasteFinish( cbdata );
+       PhClipboardPasteFinish(cbdata);
     }
 }
 
 void
-clip_mch_set_selection( VimClipboard *cbd )
+clip_mch_set_selection(VimClipboard *cbd)
 {
     int type;
     long_u  len;
@@ -114,31 +114,31 @@ clip_mch_set_selection( VimClipboard *cbd )
     PhClipHeader clip_header[2];
 
     /* Prevent recursion from clip_get_selection() */
-    if( cbd->owned == TRUE )
+    if (cbd->owned == TRUE)
        return;
 
     cbd->owned = TRUE;
-    clip_get_selection( cbd );
+    clip_get_selection(cbd);
     cbd->owned = FALSE;
 
-    type = clip_convert_selection( &str, &len, cbd );
-    if( type >= 0 )
+    type = clip_convert_selection(&str, &len, cbd);
+    if (type >= 0)
     {
-       text_clip = lalloc( len + 1, TRUE ); /* Normal text */
+       text_clip = lalloc(len + 1, TRUE); /* Normal text */
 
-       if( text_clip && vim_clip )
+       if (text_clip && vim_clip)
        {
-           memset( clip_header, 0, sizeof( clip_header ) );
+           memset(clip_header, 0, sizeof(clip_header));
 
-           STRNCPY( clip_header[0].type, CLIP_TYPE_VIM, 8 );
-           clip_header[0].length = sizeof( vim_clip );
+           STRNCPY(clip_header[0].type, CLIP_TYPE_VIM, 8);
+           clip_header[0].length = sizeof(vim_clip);
            clip_header[0].data   = vim_clip;
 
-           STRNCPY( clip_header[1].type, CLIP_TYPE_TEXT, 8 );
+           STRNCPY(clip_header[1].type, CLIP_TYPE_TEXT, 8);
            clip_header[1].length = len + 1;
            clip_header[1].data   = text_clip;
 
-           switch( type )
+           switch(type)
            {
                default: /* fallthrough to MLINE */
                case MLINE:     *vim_clip = 'L'; break;
@@ -148,14 +148,14 @@ clip_mch_set_selection( VimClipboard *cbd )
 #endif
            }
 
-           vim_strncpy( text_clip, str, len );
+           vim_strncpy(text_clip, str, len);
 
            vim_clip[ 1 ] = NUL;
 
-           PhClipboardCopy( PhInputGroup( NULL ), 2, clip_header);
+           PhClipboardCopy(PhInputGroup(NULL), 2, clip_header);
        }
-       vim_free( text_clip );
+       vim_free(text_clip);
     }
-    vim_free( str );
+    vim_free(str);
 }
 #endif
diff --git a/src/os_riscos.c b/src/os_riscos.c
deleted file mode 100644 (file)
index 5c443fc..0000000
+++ /dev/null
@@ -1,1292 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4:
- *
- * VIM - Vi IMproved   by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- * See README.txt for an overview of the Vim source code.
- */
-
-#include "vim.h"
-
-/*
- * os_riscos.c
- *
- * Thomas Leonard <tal197@ecs.soton.ac.uk>
- */
-
-const char *__dynamic_da_name = "Vim heap"; /* Enable and name our dynamic area */
-int ro_line_mode = TRUE;  /* For Ex mode we much echo chars to the screen ourselves */
-int windowed;          /* Flag - are we running inside a text window? */
-int WinLeft, WinTop;   /* We might be started inside a text window */
-int ScrollTop;         /* Make cursor movements relative to ScrollTop. */
-
-int old_escape_state = -1;
-int old_cursor_state = -1;
-
-#define rgb(r,g,b) ((b<<24) + (g<<16) + (r<<8))
-#define NORMAL_FG 0x00000000
-#define NORMAL_BG 0xffffffff
-
-/* Convert a DOS colour number to an RGB palette entry.
- * Mappings from X11 rgb/txt file.
- */
-    static int
-map_colour(dos)
-    int dos;           /* Standard DOS colour number. */
-{
-    switch (dos)
-    {
-       case 0: return 0;                       /* Black */
-       case 1: return rgb(0,0,139);            /* DarkBlue */
-       case 2: return rgb(0,100,0);            /* DarkGreen */
-       case 3: return rgb(0,139,139);          /* DarkCyan */
-       case 4: return rgb(139,0,0);            /* DarkRed */
-       case 5: return rgb(139,0,139);          /* DarkMagenta */
-       case 6: return rgb(165,42,42);          /* Brown, DarkYellow */
-       case 7: return rgb(211,211,211);        /* LightGray, LightGrey, Gray, Grey */
-       case 8: return rgb(169,169,169);        /* DarkGray, DarkGrey */
-       case 9: return rgb(173,216,230);        /* Blue, LightBlue */
-       case 10: return rgb(144,238,144);       /* Green, LightGreen */
-       case 11: return rgb(224,255,255);       /* Cyan, LightCyan */
-       case 12: return rgb(255,0,0);           /* Red, LightRed */
-       case 13: return rgb(255,0,255);         /* Magenta, LightMagenta */
-       case 14: return rgb(255,255,0);         /* Yellow, LightYellow */
-       case 15: return rgb(255,255,255);       /* White */
-    }
-    return rgb(100,100,100);
-}
-
-    static void
-text_fg(fg)
-    int fg;            /* Foregound colour in the form &BBGGRR00 */
-{
-    xswi(ColourTrans_SetTextColour, fg, 0, 0, 0);
-}
-
-    static void
-text_bg(bg)
-    int                bg;     /* Backgound colour in the form &BBGGRR00 */
-{
-    xswi(ColourTrans_SetTextColour, bg, 0, 0, 1 << 7);
-}
-
-#define OUT_NORMAL 0
-#define OUT_NUMBER 1           /* Reading in a number */
-
-    void
-mch_write(s, len)
-    char_u  *s;
-    int            len;
-{
-    static int mode = OUT_NORMAL;
-    static int x, y;                   /* For reading numbers in. */
-
-    if (!term_console)
-    {
-       /* Maybe we are running Vim remotely - don't interpret chars */
-       while (len--)
-       {
-           char_u c = *s++;
-           swi(OS_WriteC, c);
-           /* We might need to send a CR too. This shouldn't
-            * hurt if we don't need it, should it?
-            */
-           if (c == 10)
-               swi(OS_WriteI + 13);
-       }
-       return;
-    }
-
-    while (len--)
-    {
-       char_u c = *s++;
-       switch (mode)
-       {
-           case OUT_NUMBER:
-               if (c < '0' || c > '9')
-               {
-                   mode = OUT_NORMAL;
-               }
-               else
-               {
-                   x = (x * 10) + c - '0';
-                   continue;
-               }
-           /* note: no break here! */
-
-           case OUT_NORMAL:
-               switch (c)
-               {
-                   case 1:
-                       /* Number (in decimal) follows. */
-                       mode = OUT_NUMBER;
-                       y = x;
-                       x = 0;
-                       break;
-                   case 2:
-                       /* Position cursor. */
-                       swi(OS_WriteI + 31);
-                       swi(OS_WriteC, x);
-                       swi(OS_WriteC, y - ScrollTop);
-                       break;
-                   case 3:
-                       /* Set scroll region. */
-                       if (x == Rows -1 && y == 0 && !windowed)
-                       {
-                           /* Whole screen - remove text window.
-                            * This is MUCH faster.
-                            */
-                           swi(OS_WriteI + 26);
-                       }
-                       else
-                       {
-                           /* Create a text window. */
-                           swi(OS_WriteI + 28);
-                           swi(OS_WriteC, WinLeft);
-                           swi(OS_WriteC, WinTop + x);
-                           swi(OS_WriteC, WinLeft + Columns - 1);
-                           swi(OS_WriteC, WinTop + y);
-                       }
-                       ScrollTop = y;
-                       break;
-                   case 4:
-                       /* Normal mode. */
-                       text_fg(NORMAL_FG);
-                       text_bg(NORMAL_BG);
-                       break;
-                   case 5:
-                       /* Reverse mode. */
-                       text_fg(NORMAL_BG);
-                       text_bg(NORMAL_FG);
-                       break;
-                   case 10:
-                       swi(OS_NewLine);
-                       break;
-                   case 14:
-                       /* Cursor invisible. */
-                       swi(OS_WriteN,
-                            "\027\001\000\000\000\000\000\000\000\000",
-                            10);
-                       break;
-                   case 15:
-                       /* Cursor visible. */
-                       swi(OS_WriteN,
-                            "\027\001\002\000\000\000\000\000\000\000",
-                            10);
-                       break;
-                   case 16:
-                       /* Cursor very visible (flash) */
-                       swi(OS_WriteN,
-                            "\027\001\003\000\000\000\000\000\000\000",
-                            10);
-                   case 17:
-                       /* Set foreground colour. */
-                       text_fg(map_colour(x));
-                       break;
-                   case 18:
-                       /* Set background colour. */
-                       text_bg(map_colour(x));
-                       break;
-                   case 19:
-                       /* Scroll text down. */
-                       swi(OS_WriteN,
-                            "\027\007\000\002\000\000\000\000\000\000",
-                            10);
-                       break;
-                   default:
-                       swi(OS_WriteC, c);
-               }
-               continue;
-
-           default:
-               printf("[output error]");
-               mode = OUT_NORMAL;
-       }
-    }
-}
-
-/*
- * mch_inchar(): low level input funcion.
- * Get a characters from the keyboard.
- * Return the number of characters that are available.
- * If wtime == 0 do not wait for characters.
- * If wtime == n wait n msecs for characters.
- * If wtime == -1 wait forever for characters.
- *
- * TODO: call convert_input() for 'fileencoding' to 'encoding' conversion.
- */
-    int
-mch_inchar(buf, maxlen, wtime, tb_change_cnt)
-    char_u  *buf;
-    int            maxlen;
-    long    wtime;
-    int            tb_change_cnt;
-{
-    int got=0;
-    unsigned int start_time = clock();
-
-    if (ro_line_mode)
-    {
-       /* We're probably in Ex mode - get whole lines at a time. */
-
-       static char_u   line_buffer[256];
-       static int      remaining_chars = 0;
-       static int      buf_pos = 0;
-
-       /* Do we need to fetch another line? */
-       if (remaining_chars == 0)
-       {
-           int         old_esc_state;
-           swi(OS_Byte, 200, 1, 0xfe);
-           old_esc_state = r1;
-
-           buf_pos = 0;
-           if (xswi(OS_ReadLine, line_buffer, 255, 0, 255) & (c_flag | v_flag))
-           {
-               got_int = TRUE;     /* ESC pressed */
-               r1 = 0;
-           }
-           line_buffer[r1] = 13;
-           remaining_chars = r1 + 1;   /* Count CR as part of input */
-
-           swi(OS_Byte, 200, old_esc_state, 0);
-       }
-
-       /* Can we send the rest of the buffer back in one go? */
-       if (remaining_chars <= maxlen)
-       {
-           int     got = remaining_chars;
-
-           memcpy(buf, line_buffer + buf_pos, got);
-           remaining_chars = 0;
-           return  got;
-       }
-
-       /* Send as much as we can */
-       memcpy(buf, line_buffer + buf_pos, maxlen);
-       buf_pos += maxlen;
-       remaining_chars -= maxlen;
-
-       return maxlen;
-    }
-
-    if (!term_console)
-    {
-       /* Use OS_ReadC for all input.
-        * Avoids problems with remote access getting interference from
-        * the keyboard.
-        */
-       if (wtime == 0)
-           return 0;       /* Ignore quick key checks */
-
-       if (xswi(OS_ReadC) & c_flag)
-       {
-           got_int = TRUE;     /* ESC pressed - can this happen? */
-           swi(OS_Byte, 124);  /* Clear Escape state */
-           r0 = 0x1b;          /* It *might* not have been Escape! */
-       }
-       buf[0] = r0;
-       return 1;
-    }
-
-    /*
-     * OK, here's the plan:
-     *
-     * 1) Wait until wtime expires or we get a key
-     * 2) Get keys until the keyboard buffer is empty or buf is full
-     */
-
-    while (xswi(OS_Byte,145,0) & c_flag)
-    {
-       /* Nothing at all in the keyboard buffer.
-        * Has our time expired yet?
-        */
-       if ( (wtime != -1) && (clock() - start_time) >= wtime )
-           return 0;           /* Nothing read - giving up */
-    }
-
-    /* We've got one char (in r2) - are there any more? */
-
-    while (got < maxlen)
-    {
-       buf[got++] = r2;
-
-       if (xswi(OS_Byte,145,0) & c_flag)
-           return got;         /* Keyboard buffer empty */
-    }
-    return got;                        /* buf is full */
-}
-
-/*
- * return non-zero if a character is available
- */
-    int
-mch_char_avail()
-{
-    if (!term_console)
-       return 0;           /* Can't tell */
-    if (xswi(OS_Byte, 152, 0) & c_flag)
-       return 0;
-    return 1;
-}
-
-/* Find out how much free memory we have.
- * I don't know how to work this out exactly but, since we can claim
- * more memory from the OS, let's just report the free pool size.
- * Dynamic area 6 doesn't exist pre 3.6 according to StrongHelp, so
- * we'll use Wimp_SlotSize. If that fails (outside the desktop?)
- * then just return a big number and hope.
- */
-    long_u
-mch_avail_mem(special)
-    int special;
-{
-    if (xswi(Wimp_SlotSize, -1, -1) & v_flag)
-       return 0x7fffffff;
-    return r2;
-}
-
-    void
-mch_delay(msec, ignoreinput)
-    long       msec;
-    int                ignoreinput;
-{
-    int                start_time, time_now;
-    int                csec = msec / 10;
-
-    swi(OS_ReadMonotonicTime);
-    start_time = r0;
-
-    for (;;)
-    {
-       swi(OS_ReadMonotonicTime);
-       time_now = r0;
-       if (time_now - start_time > csec)
-           return;
-#ifdef FEAT_GUI
-       /* In the GUI, allow other programs to run while waiting. */
-       if (gui.in_use)
-           gui_mch_wait_for_chars(start_time + csec);
-#endif
-    }
-}
-
-/*
- * If the machine has job control, use it to suspend the program,
- * otherwise fake it by starting a new shell.
- */
-    void
-mch_suspend()
-{
-    suspend_shell();
-}
-
-    void
-mch_init()
-{
-    /*
-     * Read window size first. Calls to mch_get_shellsize() will
-     * simply return these values in future so that setting the
-     * text window (used for scrolling) won't give strange results.
-     */
-
-    int buf[7] = {132, 135, 256, 257, 1, 2, -1};
-
-    /* Command windows are no longer forced open, since if we are
-     * in the desktop then we'll use the GUI version.
-     * Opening a command window here messes up the GUI version startup
-     */
-#ifndef FEAT_GUI
-    swi(OS_WriteI);
-#endif
-    swi(OS_ReadVduVariables, buf, buf);
-    WinLeft = buf[0];
-    WinTop  = buf[1];
-    Columns = buf[2];
-    Rows    = buf[3] + 1;      /* Seems to be one off (VduVars wrong?) */
-    ScrollTop = 0;
-
-    /* Are we running in a textwindow? */
-    if (Rows == buf[5] + 1 && Columns == buf[4] + 1)
-       windowed = 0;
-    else
-       windowed = 1;
-
-    /* Choose a nice colour scheme. */
-    text_fg(NORMAL_FG);
-    text_bg(NORMAL_BG);
-}
-
-/*
- * Check_win checks whether we have an interactive stdout.
- */
-/* ARGSUSED */
-    int
-mch_check_win(argc, argv)
-    int            argc;
-    char    **argv;
-{
-    return OK;
-}
-
-/*
- * Return TRUE if the input comes from a terminal, FALSE otherwise.
- */
-    int
-mch_input_isatty()
-{
-    if (xswi(OS_ChangeRedirection, -1, -1) & v_flag)
-       return TRUE;            /* Error - TRUE is probably correct though */
-    if (r0 == 0)
-       return TRUE;
-    return FALSE;
-}
-
-#ifdef FEAT_TITLE
-    int
-mch_can_restore_title()
-{
-    return FALSE;
-}
-
-    int
-mch_can_restore_icon()
-{
-    return FALSE;
-}
-
-
-/*
- * Set the window title and icon.
- */
-    void
-mch_settitle(title, icon)
-    char_u *title;
-    char_u *icon;
-{
-    if (title == NULL)
-       title = (char_u *) "<untitled>";
-#ifdef FEAT_GUI
-    if (gui.in_use && strcmp(title, gui.window_title))
-    {
-       int length;
-       length = strlen(title);
-       if (length >= gui.window_title_size)
-           length = gui.window_title_size - 1;
-       strncpy(gui.window_title, title, length);
-       gui.window_title[length] = 0;
-       ro_redraw_title(gui.window_handle);
-    }
-#endif
-    return;
-}
-
-/*
- * Restore the window/icon title.
- * "which" is one of:
- *  1  only restore title
- *  2  only restore icon
- *  3  restore title and icon
- */
-    void
-mch_restore_title(which)
-    int which;
-{
-    return;
-}
-#endif
-
-/*
- * Insert user name in s[len].
- * Return OK if a name found.
- */
-    int
-mch_get_user_name(s, len)
-    char_u  *s;
-    int            len;
-{
-    /* RISC OS doesn't support user names. */
-    *s = NUL;
-    return FAIL;
-}
-
-/*
- * Insert host name in s[len].
- */
-
-    void
-mch_get_host_name(s, len)
-    char_u  *s;
-    int            len;
-{
-    if (xswi(OS_ReadVarVal, "Machine$Name", s, len, 0, 3) & v_flag)
-    {
-       /* Variable does not exist (normal operation) */
-       vim_strncpy(s, "(unknown)", len - 1);
-    }
-}
-
-/*
- * return process ID
- */
-    long
-mch_get_pid()
-{
-    if (xswi(Wimp_ReadSysInfo, 5) & v_flag)
-       return 0;
-    return r0;
-}
-
-/*
- * Get name of current directory into buffer 'buf' of length 'len' bytes.
- * Return OK for success, FAIL for failure.
- */
-    int
-mch_dirname(buf, len)
-    char_u  *buf;
-    int            len;
-{
-    if (xswi(OS_FSControl, 37, "@", buf, 0, 0, len) & v_flag)
-       return FAIL;
-    return OK;
-}
-
-/*
- * Get absolute file name into buffer 'buf' of length 'len' bytes.
- *
- * return FAIL for failure, OK for success
- */
-    int
-mch_FullName(fname, buf, len, force)
-    char_u *fname, *buf;
-    int len;
-    int        force;          /* Also expand when already absolute path name.
-                        * Not used under RISC OS.
-                        */
-{
-    if (xswi(OS_FSControl, 37, fname, buf, 0, 0, len) & v_flag)
-       return FAIL;
-    return OK;
-}
-
-/*
- * Return TRUE if "fname" does not depend on the current directory.
- */
-    int
-mch_isFullName(fname)
-    char_u     *fname;
-{
-    if (strstr(fname, "::") && strstr(fname,".$."))
-       return TRUE;
-    return FALSE;
-}
-
-/*
- * Get file permissions for 'name'.
- * Returns -1 when it doesn't exist.
- */
-    long
-mch_getperm(name)
-    char_u *name;
-{
-    struct stat statb;
-
-    if (stat((char *)name, &statb))
-       return -1;
-    return statb.st_mode;
-}
-
-/*
- * set file permission for 'name' to 'perm'
- *
- * return FAIL for failure, OK otherwise
- */
-    int
-mch_setperm(name, perm)
-    char_u  *name;
-    long    perm;
-{
-    return (chmod((char *)name, (mode_t)perm) == 0 ? OK : FAIL);
-}
-
-/*
- * Set hidden flag for "name".
- */
-/* ARGSUSED */
-    void
-mch_hide(name)
-    char_u     *name;
-{
-    /* can't hide a file */
-}
-
-/*
- * return TRUE if "name" is a directory
- * return FALSE if "name" is not a directory
- * return FALSE for error
- */
-    int
-mch_isdir(name)
-    char_u *name;
-{
-    if (xswi(OS_File, 17, name) & v_flag)
-       return FALSE;
-    if (r0 == 2 || r0 == 3)
-       return TRUE;            /* Count image files as directories. */
-    return FALSE;
-}
-
-/*
- * Return 1 if "name" can be executed, 0 if not.
- * Return -1 if unknown. Requires which to work.
- */
-    int
-mch_can_exe(name)
-    char_u     *name;
-{
-    char_u     *buf;
-    char_u     *p;
-    int                retval;
-
-    buf = alloc((unsigned)STRLEN(name) + 7);
-    if (buf == NULL)
-       return -1;
-    sprintf((char *)buf, "which %s", name);
-    p = get_cmd_output(buf, NULL, SHELL_SILENT);
-    vim_free(buf);
-    if (p == NULL)
-       return -1;
-    /* result can be: "name: Command not found" */
-    retval = (*p != NUL && strstr((char *)p, "not found") == NULL);
-    vim_free(p);
-    return retval;
-}
-
-/*
- * Check what "name" is:
- * NODE_NORMAL: file or directory (or doesn't exist)
- * NODE_WRITABLE: writable device, socket, fifo, etc.
- * NODE_OTHER: non-writable things
- */
-    int
-mch_nodetype(name)
-    char_u     *name;
-{
-    /* TODO */
-    return NODE_NORMAL;
-}
-
-    void
-mch_early_init()
-{
-    /* Turn off all the horrible filename munging in UnixLib. */
-    int __riscosify_control = __RISCOSIFY_NO_PROCESS;
-}
-
-    void
-mch_exit(r)
-    int r;
-{
-    settmode(TMODE_COOK);
-    exiting = TRUE;
-    out_flush();
-    ml_close_all(TRUE);                /* remove all memfiles */
-
-#ifdef FEAT_GUI
-    if (gui.in_use)
-       gui_exit(r);
-#endif
-    swi(OS_NewLine);
-    if (old_escape_state != -1)
-       swi(OS_Byte, 229, old_escape_state, 0);
-    if (old_cursor_state != -1)
-       swi(OS_Byte, 4, old_cursor_state);
-    exit(r);
-}
-
-    void
-mch_settmode(tmode)
-    int                tmode;      /* TMODE_RAW or TMODE_COOK */
-{
-    if (tmode == TMODE_COOK)
-    {
-       ro_line_mode = TRUE;
-       return;
-    }
-
-    ro_line_mode = FALSE;
-
-    if (term_console)
-    {
-       /* Block cursor. */
-       swi(OS_WriteN,
-               "\027\000\012\000\000\000\000\000\000\000",
-               10);
-
-       /* Disable the standard cursor key actions. */
-       swi(OS_Byte, 4, 1);
-       if (old_cursor_state == -1)
-           old_cursor_state = r1;
-    }
-
-    /* Stop Escape from quitting Vim! */
-    swi(OS_Byte, 229, 1, 0);
-    if (old_escape_state == -1)
-       old_escape_state = r1;
-}
-
-/*
- * set mouse clicks on or off (only works for xterms)
- */
-    void
-mch_setmouse(on)
-    int            on;
-{
-}
-
-/*
- * set screen mode, always fails.
- */
-/* ARGSUSED */
-    int
-mch_screenmode(arg)
-    char_u   *arg;
-{
-    EMSG(_(e_screenmode));
-    return FAIL;
-}
-
-/*
- * Try to get the current window size.
- * Return OK when size could be determined, FAIL otherwise.
- * Simply return results stored by mch_init() if we are the
- * machine's console. If not, we don't know how big the screen is.
- */
-    int
-mch_get_shellsize()
-{
-    /* if size changed: screenalloc will allocate new screen buffers */
-    return term_console ? OK : FAIL;
-}
-
-/*
- * Can't change the size.
- * Assume the user knows what he's doing and use the new values.
- */
-    void
-mch_set_shellsize()
-{
-    /* Assume the user knows what he's doing and use the new values. */
-}
-
-/*
- * Rows and/or Columns has changed.
- */
-    void
-mch_new_shellsize()
-{
-    /* Nothing to do. */
-}
-
-    int
-mch_call_shell(cmd, options)
-    char_u     *cmd;
-    int                options;        /* SHELL_*, see vim.h */
-{
-    int                retval;
-    int                tmode = cur_tmode;
-
-    if (cmd == NULL)
-       cmd = (char_u *) "GOS";
-
-#ifdef FEAT_GUI
-    if (gui.in_use)
-       return gui_mch_call_shell(cmd, options);
-#endif
-    if (options & SHELL_COOKED)
-       settmode(TMODE_COOK);           /* set to normal mode */
-    MSG_PUTS("\n");
-
-   /* I don't even want to think about what UnixLib must
-    * be doing to allow this to work...
-    */
-    retval = system(cmd);
-    if (retval && !(options & SHELL_SILENT))
-       EMSG(strerror(EOPSYS));         /* Doesn't seem to set errno? */
-
-    swi(OS_Byte, 229, 1, 0);           /* Re-disable escape */
-    if (tmode == TMODE_RAW)
-       settmode(TMODE_RAW);            /* set to raw mode */
-    return retval ? FAIL : OK;
-}
-
-/*
- * Check for Escape being pressed right now.
- * [ different if !term_console? ]
- */
-    void
-mch_breakcheck()
-{
-    if (xswi(OS_Byte, 121, 0xf0) & v_flag)
-       return;
-    if (r1 == 0xff)
-    {
-       got_int = TRUE;
-       swi(OS_Byte, 15, 1);    /* Flush input buffer */
-    }
-}
-
-/*
- * Recursively expand one path component into all matching files and/or
- * directories.
- * "path" has backslashes before chars that are not to be expanded.
- * Return the number of matches found.
- */
-    int
-mch_expandpath(gap, path, flags)
-    garray_T   *gap;   /* Grow array for results. */
-    char_u     *path;
-    int                flags;  /* EW_* flags */
-{
-    int                got;    /* Number of matches. */
-    char_u     *pattern;
-
-   /* Plan:
-    *
-    * 1) Get first part of path - no wildcards
-    * 2) Get next path element (wildcarded)
-    * 3) Get rest of path
-    *
-    * If (3) is nothing then only the leaf is wildcarded - add to gap
-    * Otherwise call recursively for each path in (2), passing (3)
-    *
-    * This is just the header function.
-    */
-
-    /* We must be able to modifiy path, so make a copy */
-    pattern = vim_strsave(path);
-    if (pattern == NULL)
-       return 0;
-    got = expand_section(gap, (char_u *)"", pattern, flags);
-    vim_free(pattern);
-    return got;
-}
-
-/*
- * expand_section(gap, "$.Dir1.Dir2", "ABBA*.myleaf##")
- *
- * calls expand_section(gap, "$.Dir1.Dir2.ABBA_Gold", "myleaf##")
- *   and expand_section(gap, "$.Dir1.Dir2.ABBA_Live", "myleaf##")
- *
- * If rest is just a leaf then all matches are added to gap.
- *
- * Returns number of items added to gap.
- */
-    int
-expand_section(gap, root, rest, flags)
-    garray_T   *gap;
-    char_u     *root;  /* Non-wildcarded path to search */
-    char_u     *rest;  /* Wildcarded remainder of path */
-    int                flags;  /* Add dirs/files/missing objects. */
-{
-    static char_u buf[MAXPATHL];       /* Temporary buffer. */
-    char_u dir[MAXPATHL];
-    int start_element = -1;            /* Start of wildcarded element */
-    char_u c;
-    int i;
-    int got, dir_pos;
-    int buflen;                        /* Chars used in buf[] */
-    int colon = 0;             /* Dir ends in ':' */
-
-    buflen = strlen(root);
-    STRNCPY(buf, root, buflen);        /* Copy root into buffer. */
-
-   /*
-    * Find end of nonwildcarded section.
-    * Count ':' as a path sep since Vim:Bug* is a valid pathname.
-    */
-
-    for (i = 0; c = rest[i]; i++)
-    {
-       if (c == PATHSEP)
-       {
-           start_element = i;
-           colon = 0;
-       }
-       if (c == ':')
-       {
-           start_element = i + 1;
-           colon = 1;
-       }
-       if (c == '#' || c == '*')
-           break;
-    }
-    if (c == 0)
-       start_element = i;
-
-   /*
-    * start_element +> terminator for non-wildcarded section.
-    * Transfer this bit into buf.
-    */
-    if (buflen + start_element + 4 >= MAXPATHL)
-       return 0;                       /* Buffer full */
-    if (start_element >= 0)
-    {
-       if (*root && !colon)
-           buf[buflen++] = PATHSEP;
-       strncpy(buf + buflen, rest, start_element);
-       buflen += start_element;
-    }
-    buf[buflen] = 0;
-
-   /*
-    * Did we reach the end of the string without hitting any wildcards?
-    */
-    if (c == 0)
-    {
-       /* Yes - add combined path to grow array and return. */
-       addfile(gap, buf, flags);
-       return 1;
-    }
-
-    if (start_element < 0 || !colon)
-       start_element++;
-    rest += start_element;
-
-   /*
-    * rest does contain wildcards if we get here.
-    *
-    * Now : have we reached the leaf names part yet?
-    * If so, add all matches (files and dirs) to gap.
-    * If not, get next path element and scan all matching directories.
-    */
-
-    start_element = -1;
-    for (i = 0; rest[i]; i++)
-    {
-       if (rest[i] == '.')
-       {
-           start_element = i;
-           rest[i] = 0;                /* Break string here. */
-           break;
-       }
-    }
-
-    /* If start_element is -1 then we are matching leaf names */
-
-    r3 = 0;                    /* Number of objs read. */
-    dir_pos = 0;               /* Position through directory. */
-    got = 0;                   /* Files added so far. */
-    while (dir_pos != -1)
-    {
-       buf[buflen] = 0;
-       if (xswi(OS_GBPB, 9,
-               buf,                            /* Directory to scan. */
-               buf + buflen + (1 - colon),     /* Buffer for result. */
-               1,                      /* Number of objects to read. */
-               dir_pos,                /* Search position. */
-               MAXPATHL - 2 - buflen,  /* Size of result buffer. */
-               rest)                   /* Wildcarded leafname. */
-                       & v_flag)
-       {
-           EMSG(r0 + 4);
-           r4 = -1;
-       }
-       dir_pos = r4;           /* r4 corrupted by addfile() */
-       if (r3 > 0)
-       {
-           char_u *path = buf;
-           if (buflen == 0)
-               path++;                 /* Don't do '.File' */
-           else if (!colon)
-               buf[buflen] = '.';              /* Join path and leaf */
-
-          /* Path -> full path of object found */
-           if (start_element == -1)
-           {
-               addfile(gap, path, flags);
-               got++;
-           }
-           else
-           {
-              /* Scan into subdirectories and images; ignore files */
-               swi(OS_File, 17, path);
-               if (r0 == 2 || r0 == 3)
-                   got += expand_section(gap,
-                                               path,
-                                               rest + start_element + 1,
-                                               flags);
-           }
-       }
-    }
-
-    /* Restore the dot if we removed it. */
-    if (start_element >= 0)
-       rest[start_element] = '.';
-    return got;
-}
-
-/*
- * mch_expand_wildcards() - this code does wild-card pattern matching using
- * the shell. It isn't used under RISC OS.
- *
- * return OK for success, FAIL for error (you may lose some memory) and put
- * an error message in *file.
- *
- * num_pat is number of input patterns
- * pat is array of pointers to input patterns
- * num_file is pointer to number of matched file names
- * file is pointer to array of pointers to matched file names
- */
-    int
-mch_expand_wildcards(num_pat, pat, num_file, file, flags)
-    int                    num_pat;
-    char_u       **pat;
-    int                   *num_file;
-    char_u      ***file;
-    int                    flags;              /* EW_* flags */
-{
-    /* This doesn't get called unless SPECIAL_WILDCHAR is defined. */
-    return FAIL;
-}
-
-/*
- * Return TRUE if "p" contains wildcards which can be expanded by
- * mch_expandpath().
- */
-    int
-mch_has_exp_wildcard(p)
-    char_u     *p;
-{
-    if (vim_strpbrk((char_u *)"*#", p))
-       return TRUE;
-    return FALSE;
-}
-
-/* Return TRUE if "p" contains wildcards. */
-    int
-mch_has_wildcard(p)
-    char_u     *p;
-{
-    if (vim_strpbrk((char_u *)"*#`", p))
-       return TRUE;
-    return FALSE;
-}
-
-    int                        /* see Unix unlink(2) */
-mch_remove(file)
-    char_u *file;      /* Name of file to delete. */
-{
-    if (xswi(OS_FSControl, 27, file, 0, 0) & v_flag)
-       return EXIT_FAILURE;
-    return EXIT_SUCCESS;
-}
-
-/* Try to make existing scripts work without modification.
- * Return a pointer to the new string (freed by caller), or NULL
- *
- * Two main cases:
- * - Absolute : $VIM/syntax/help.vim
- * - Relative : Adfs::4.$.!Vim.Resources.Syntax/help.vim
- */
-    char_u *
-mch_munge_fname(fname)
-    char_u *fname;
-{
-    char_u c;
-    int len;
-    char_u *retval;
-
-    retval = fname = vim_strsave(fname);
-    if (fname == NULL)
-       return NULL;
-
-    if (strncmp(fname, "$VIM/", 5) == 0)
-    {
-       strncpy(fname, "Vim:", 4);
-       for (fname += 5; c = *fname; fname++)
-       {
-           if (c == '.')
-               break;
-           if (c == '/')
-               fname[-1] = '.';
-           else
-               fname[-1] = c;
-       }
-       fname[-1] = '\0';
-    }
-    else
-    {
-       /* Check to see if the file exists without modification. */
-       if (xswi(OS_File, 17, fname) & v_flag)
-           r0 == 0;            /* Invalid filename? */
-       if (r0)
-           return retval;
-
-       len = strlen(fname);
-       if (strcmp(fname + len - 4, ".vim") == 0)
-       {
-           fname[len - 4] = '\0';
-           for (; c = *fname; fname++)
-           {
-               if (c == '/')
-                   *fname = '.';
-           }
-       }
-    }
-    return retval;
-}
-
-/* QuickFix reads munged names from the error file.
- * Correct them.
- */
-    int
-ro_buflist_add(old_name)
-    char_u  *old_name; /* Name of file found by quickfix */
-{
-    char_u  *fname;
-    char_u  *leaf;     /* Pointer to start of leaf in old_name */
-    char_u  *ptr;
-    char_u  c;
-    int            retval;
-
-    if (old_name == NULL)
-       return buflist_add(NULL, 0);
-
-    /* Copy the name so we can mess around with it. */
-    fname = vim_strsave(old_name);
-    if (fname == NULL)
-       /* Out of memory - can't modify name */
-       return buflist_add(old_name, 0);
-
-    /* Change `dir/main.c' into `dir.c.main' */
-    leaf = fname;
-    for (ptr = fname; c = *ptr; ptr++)
-    {
-       if (c == '/')
-       {
-           leaf = ptr + 1;
-           *ptr = '.';
-       }
-       else if (c == '.')
-           break;
-    }
-    if (c == '.')
-    {
-       /* Change `main.c' into `c.main'
-        *        |    |
-        *      leaf  ptr
-        */
-       ptr += old_name - fname;
-       *ptr = '\0';
-       sprintf(leaf,
-               "%s.%s",
-               ptr + 1,
-               leaf - fname + old_name);
-    }
-
-    retval = buflist_add(fname, 0);
-    free(fname);
-    return retval;
-}
-
-/* Change the current directory.
- * Strip trailing dots to make it easier to use with filename completion.
- * Return 0 for success, -1 for failure.
- */
-    int
-mch_chdir(dir)
-    char_u  *dir;
-{
-    int            length;
-    int            retval;
-    char_u  *new_dir;
-
-    if (p_verbose >= 5)
-    {
-       verbose_enter();
-       smsg((char_u *)"chdir(%s)", dir);
-       verbose_leave();
-    }
-    length = strlen(dir);
-    if (dir[length - 1] != '.')
-       return chdir(dir);          /* No trailing dots - nothing to do. */
-    new_dir = vim_strsave(dir);
-    if (new_dir == NULL)
-       return chdir(dir);          /* Can't allocate memory. */
-
-    while (new_dir[--length] == '.')
-       new_dir[length] = '\0';
-
-    retval = chdir(new_dir);
-    vim_free(new_dir);
-    return retval;
-}
-
-/* Examine the named file, and set the 'osfiletype' option
- * (in curbuf) to the file's type.
- */
-    void
-mch_read_filetype(file)
-    char_u  *file;
-{
-    int            type;
-    char_u  type_string[9];
-    int            i;
-
-    if (xswi(OS_File, 23, file) & v_flag)
-       type = 0xfff;           /* Default to Text */
-    else
-       type = r6;
-
-    /* Type is the numerical value - see if we have a textual equivalent */
-    swi(OS_FSControl, 18, 0, type);
-    ((int *) type_string)[0] = r2;
-    ((int *) type_string)[1] = r3;
-    type_string[8] = 0;
-    for (i = 0; type_string[i] > ' '; i++)
-       ;
-    type_string[i] = 0;
-
-    set_string_option_direct("osfiletype", -1, type_string, OPT_FREE, 0);
-    return;
-}
-
-    void
-mch_set_filetype(file, type)
-    char_u  *file;
-    char_u  *type;
-{
-    if (xswi(OS_FSControl, 31, type) & v_flag)
-    {
-       EMSG(_("E366: Invalid 'osfiletype' option - using Text"));
-       r2 = 0xfff;
-    }
-
-    swi(OS_File, 18, file, r2);
-}
-
-/* Return TRUE if the file's type matches 'type'
- * RISC OS types always start with '&'
- */
-    int
-mch_check_filetype(fname, type)
-    char_u  *fname;
-    char_u  *type;
-{
-    int            value;
-    char    *end;
-
-    if (*type != '&')
-       return FALSE;
-
-    value = strtol(type + 1, &end, 16);
-    if (*end)
-       return FALSE;           /* Invalid type (report error?) */
-
-    if (xswi(OS_File, 23, fname) & v_flag)
-       return FALSE;           /* Invalid filename? */
-
-    return (r0 && r6 == value);
-}
diff --git a/src/os_riscos.h b/src/os_riscos.h
deleted file mode 100644 (file)
index 47a48da..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4:
- *
- * VIM - Vi IMproved   by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <termios.h>
-#include <stdlib.h>
-#include <unixlib/local.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#define CASE_INSENSITIVE_FILENAME
-#define FEAT_MODIFY_FNAME
-#define FEAT_OSFILETYPE
-#define DFLT_OFT       "Text"
-#define USE_TERM_CONSOLE
-#define HAVE_AVAIL_MEM
-
-/* Longer filenames now accessible to all */
-#ifndef BASENAMELEN
-# define BASENAMELEN 64 /* Same length as unzip */
-#endif
-
-#ifndef TEMNAME
-# define TEMPNAME      "<Wimp$ScrapDir>.v?XXXXXX"
-# define TEMPNAMELEN   25
-#endif
-
-#ifndef DFLT_HELPFILE
-# define DFLT_HELPFILE "Vim:doc.help"
-#endif
-
-#ifndef DFLT_BDIR
-# define DFLT_BDIR     ".,<Wimp$ScrapDir>."    /* default for 'backupdir' */
-#endif
-
-/* Paths to try putting swap file in. */
-#ifndef DFLT_DIR
-# define DFLT_DIR      "<Wimp$ScrapDir>.,."    /* default for 'directory' */
-#endif
-
-#ifndef DFLT_VDIR
-# define DFLT_VDIR     "Choices:Vim.view"      /* default for 'viewdir' */
-#endif
-
-#ifndef TERMCAPFILE
-# define TERMCAPFILE   "Vim:TermCap"
-#endif
-#define HAVE_TGETENT
-
-#ifndef SYNTAX_FNAME
-# define SYNTAX_FNAME  "Vim:Syntax.%s"
-#endif
-
-#ifndef EVIM_FILE
-# define EVIM_FILE     "Vim:Evim"
-#endif
-
-#define FEAT_VIMINFO
-
-#ifndef VIMINFO_FILE
-# define VIMINFO_FILE  "<Choices$Write>.Vim.VimInfo"
-#endif
-#ifndef VIMINFO_FILE2
-# define VIMINFO_FILE2 "Choices:Vim.VimInfo"
-#endif
-
-#ifndef VIMRC_FILE
-# define VIMRC_FILE    "/vimrc"
-#endif
-#ifndef EXRC_FILE
-# define EXRC_FILE     "/exrc"
-#endif
-#ifndef GVIMRC_FILE
-# define GVIMRC_FILE   "/gvimrc"
-#endif
-#ifndef USR_VIMRC_FILE
-# define USR_VIMRC_FILE        "Vim:Evim"
-#endif
-#ifndef SESSION_FILE
-# define SESSION_FILE  "/Session.vim"
-#endif
-#ifndef USR_VIMRC_FILE
-# define USR_VIMRC_FILE        "Choices:Vim.VimRC"
-#endif
-#ifndef USR_GVIMRC_FILE
-# define USR_GVIMRC_FILE    "Choices:Vim.GVimRC"
-#endif
-#ifndef USR_EXRC_FILE
-# define USR_EXRC_FILE    "Choices:Vim.ExRC"
-#endif
-#ifndef SYS_VIMRC_FILE
-# define SYS_VIMRC_FILE            "Vim:VimRC"
-#endif
-#ifndef SYS_GVIMRC_FILE
-# define SYS_GVIMRC_FILE    "Vim:GVimRC"
-#endif
-#ifndef SYS_MENU_FILE
-# define SYS_MENU_FILE     "Vim:Menu"
-#endif
-#ifndef SYS_OPTWIN_FILE
-# define SYS_OPTWIN_FILE    "Vim:Optwin"
-#endif
-#ifndef FILETYPE_FILE
-# define FILETYPE_FILE     "Vim:Filetype"
-#endif
-#ifndef FTPLUGIN_FILE
-# define FTPLUGIN_FILE     "Vim:Ftplugin/vim"
-#endif
-#ifndef INDENT_FILE
-# define INDENT_FILE       "Vim:Indent/vim"
-#endif
-#ifndef FTOFF_FILE
-# define FTOFF_FILE        "Vim:Ftoff"
-#endif
-#ifndef FTPLUGOF_FILE
-# define FTPLUGOF_FILE     "Vim:Ftplugof"
-#endif
-#ifndef INDOFF_FILE
-# define INDOFF_FILE       "Vim:Indoff"
-#endif
-
-#define DFLT_ERRORFILE         "errors/vim"
-#define DFLT_RUNTIMEPATH       "Choices:Vim,Vim:,Choices:Vim.after"
-
-/*
- * RISC PCs have plenty of memory, use large buffers
- */
-#define CMDBUFFSIZE 1024       /* size of the command processing buffer */
-#define MAXPATHL    256                /* paths are always quite short though */
-
-#ifndef DFLT_MAXMEM
-# define DFLT_MAXMEM   (5*1024)    /* use up to 5 Mbyte for a buffer */
-#endif
-
-#ifndef DFLT_MAXMEMTOT
-# define DFLT_MAXMEMTOT        (10*1024)    /* use up to 10 Mbyte for Vim */
-#endif
-
-#ifdef HAVE_SIGSET
-# define signal sigset
-#endif
-
-#define n_flag (1<<31)
-#define z_flag (1<<30)
-#define c_flag (1<<29)
-#define v_flag (1<<28)
-
-/* These take r0-r7 as inputs, returns r0-r7 in global variables. */
-void swi(int swinum, ...);      /* Handles errors itself */
-int xswi(int swinum, ...);      /* Returns errors using v flag */
-extern int r0, r1, r2, r3, r4, r5, r6, r7;  /* For return values */
-
-#include <kernel.h>
-#include <swis.h>
-
-#define mch_memmove(to, from, len) memmove((char *)(to), (char *)(from), len)
-#define mch_rename(src, dst) rename(src, dst)
-#define mch_getenv(x) (char_u *)getenv((char *)x)
-#define mch_setenv(name, val, x) setenv(name, val, x)
index a82c65d..37cc3a7 100644 (file)
@@ -61,6 +61,11 @@ static int selinux_enabled = -1;
 #  include <cygwin/version.h>
 #  include <sys/cygwin.h>      /* for cygwin_conv_to_posix_path() and/or
                                 * for cygwin_conv_path() */
+#  ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
+#   define WIN32_LEAN_AND_MEAN
+#   include <windows.h>
+#   include "winclip.pro"
+#  endif
 # endif
 #endif
 
@@ -127,6 +132,7 @@ static RETSIGTYPE sig_sysmouse __ARGS(SIGPROTOARG);
 #  include <X11/Shell.h>
 #  include <X11/StringDefs.h>
 static Widget  xterm_Shell = (Widget)0;
+static void clip_update __ARGS((void));
 static void xterm_update __ARGS((void));
 # endif
 
@@ -154,6 +160,13 @@ static int did_set_icon = FALSE;
 
 static void may_core_dump __ARGS((void));
 
+#ifdef HAVE_UNION_WAIT
+typedef union wait waitstatus;
+#else
+typedef int waitstatus;
+#endif
+static pid_t wait4pid __ARGS((pid_t, waitstatus *));
+
 static int  WaitForChar __ARGS((long));
 #if defined(__BEOS__)
 int  RealWaitForChar __ARGS((int, long, int *));
@@ -271,7 +284,8 @@ static struct signalinfo
 #ifdef SIGBUS
     {SIGBUS,       "BUS",      TRUE},
 #endif
-#ifdef SIGSEGV
+#if defined(SIGSEGV) && !defined(FEAT_MZSCHEME)
+    /* MzScheme uses SEGV in its garbage collector */
     {SIGSEGV,      "SEGV",     TRUE},
 #endif
 #ifdef SIGSYS
@@ -283,7 +297,7 @@ static struct signalinfo
 #ifdef SIGTERM
     {SIGTERM,      "TERM",     TRUE},
 #endif
-#ifdef SIGVTALRM
+#if defined(SIGVTALRM) && !defined(FEAT_RUBY)
     {SIGVTALRM,            "VTALRM",   TRUE},
 #endif
 #if defined(SIGPROF) && !defined(FEAT_MZSCHEME) && !defined(WE_ARE_PROFILING)
@@ -1107,7 +1121,7 @@ deathtrap SIGDEFARG(sigarg)
  * On Linux, signal is not always handled immediately either.
  * See https://bugs.launchpad.net/bugs/291373
  *
- * volatile because it is used in in signal handler sigcont_handler().
+ * volatile because it is used in signal handler sigcont_handler().
  */
 static volatile int sigcont_received;
 static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
@@ -1123,6 +1137,75 @@ sigcont_handler SIGDEFARG(sigarg)
 }
 #endif
 
+# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+static void loose_clipboard __ARGS((void));
+# ifdef USE_SYSTEM
+static void save_clipboard __ARGS((void));
+static void restore_clipboard __ARGS((void));
+
+static void *clip_star_save = NULL;
+static void *clip_plus_save = NULL;
+# endif
+
+/*
+ * Called when Vim is going to sleep or execute a shell command.
+ * We can't respond to requests for the X selections.  Lose them, otherwise
+ * other applications will hang.  But first copy the text to cut buffer 0.
+ */
+    static void
+loose_clipboard()
+{
+    if (clip_star.owned || clip_plus.owned)
+    {
+       x11_export_final_selection();
+       if (clip_star.owned)
+           clip_lose_selection(&clip_star);
+       if (clip_plus.owned)
+           clip_lose_selection(&clip_plus);
+       if (x11_display != NULL)
+           XFlush(x11_display);
+    }
+}
+
+# ifdef USE_SYSTEM
+/*
+ * Save clipboard text to restore later.
+ */
+    static void
+save_clipboard()
+{
+    if (clip_star.owned)
+       clip_star_save = get_register('*', TRUE);
+    if (clip_plus.owned)
+       clip_plus_save = get_register('+', TRUE);
+}
+
+/*
+ * Restore clipboard text if no one own the X selection.
+ */
+    static void
+restore_clipboard()
+{
+    if (clip_star_save != NULL)
+    {
+       if (!clip_gen_owner_exists(&clip_star))
+           put_register('*', clip_star_save);
+       else
+           free_register(clip_star_save);
+       clip_star_save = NULL;
+    }
+    if (clip_plus_save != NULL)
+    {
+       if (!clip_gen_owner_exists(&clip_plus))
+           put_register('+', clip_plus_save);
+       else
+           free_register(clip_plus_save);
+       clip_plus_save = NULL;
+    }
+}
+# endif
+#endif
+
 /*
  * If the machine has job control, use it to suspend the program,
  * otherwise fake it by starting a new shell.
@@ -1137,19 +1220,7 @@ mch_suspend()
     out_flush();           /* needed to disable mouse on some systems */
 
 # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
-    /* Since we are going to sleep, we can't respond to requests for the X
-     * selections.  Lose them, otherwise other applications will hang.  But
-     * first copy the text to cut buffer 0. */
-    if (clip_star.owned || clip_plus.owned)
-    {
-       x11_export_final_selection();
-       if (clip_star.owned)
-           clip_lose_selection(&clip_star);
-       if (clip_plus.owned)
-           clip_lose_selection(&clip_plus);
-       if (x11_display != NULL)
-           XFlush(x11_display);
-    }
+    loose_clipboard();
 # endif
 
 # if defined(_REENTRANT) && defined(SIGCONT)
@@ -1203,6 +1274,9 @@ mch_init()
 #ifdef MACOS_CONVERT
     mac_conv_init();
 #endif
+#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
+    win_clip_init();
+#endif
 }
 
     static void
@@ -1485,7 +1559,7 @@ x_IOerror_check(dpy)
 {
     /* This function should not return, it causes exit().  Longjump instead. */
     LONGJMP(lc_jump_env, 1);
-#  ifdef VMS
+#  if defined(VMS) || defined(__CYGWIN__) || defined(__CYGWIN32__)
     return 0;  /* avoid the compiler complains about missing return value */
 #  endif
 }
@@ -1507,7 +1581,7 @@ x_IOerror_handler(dpy)
 
     /* This function should not return, it causes exit().  Longjump instead. */
     LONGJMP(x_jump_env, 1);
-# ifdef VMS
+# if defined(VMS) || defined(__CYGWIN__) || defined(__CYGWIN32__)
     return 0;  /* avoid the compiler complains about missing return value */
 # endif
 }
@@ -1726,6 +1800,11 @@ get_x11_windis()
     }
     if (x11_window == 0 || x11_display == NULL)
        return (result = FAIL);
+
+# ifdef FEAT_EVAL
+    set_vim_var_nr(VV_WINDOWID, (long)x11_window);
+# endif
+
     return (result = OK);
 }
 
@@ -2134,10 +2213,16 @@ use_xterm_like_mouse(name)
  * Return non-zero when using an xterm mouse, according to 'ttymouse'.
  * Return 1 for "xterm".
  * Return 2 for "xterm2".
+ * Return 3 for "urxvt".
+ * Return 4 for "sgr".
  */
     int
 use_xterm_mouse()
 {
+    if (ttym_flags == TTYM_SGR)
+       return 4;
+    if (ttym_flags == TTYM_URXVT)
+       return 3;
     if (ttym_flags == TTYM_XTERM2)
        return 2;
     if (ttym_flags == TTYM_XTERM)
@@ -2482,15 +2567,12 @@ mch_FullName(fname, buf, len, force)
        }
 
        l = STRLEN(buf);
-       if (l >= len)
-           retval = FAIL;
+       if (l >= len - 1)
+           retval = FAIL; /* no space for trailing "/" */
 #ifndef VMS
-       else
-       {
-           if (l > 0 && buf[l - 1] != '/' && *fname != NUL
+       else if (l > 0 && buf[l - 1] != '/' && *fname != NUL
                                                   && STRCMP(fname, ".") != 0)
-               STRCAT(buf, "/");
-       }
+           STRCAT(buf, "/");
 #endif
     }
 
@@ -2719,6 +2801,13 @@ mch_get_acl(fname)
 #ifdef HAVE_POSIX_ACL
     ret = (vim_acl_T)acl_get_file((char *)fname, ACL_TYPE_ACCESS);
 #else
+#ifdef HAVE_SOLARIS_ZFS_ACL
+    acl_t *aclent;
+
+    if (acl_get((char *)fname, 0, &aclent) < 0)
+       return NULL;
+    ret = (vim_acl_T)aclent;
+#else
 #ifdef HAVE_SOLARIS_ACL
     vim_acl_solaris_T   *aclent;
 
@@ -2764,6 +2853,7 @@ mch_get_acl(fname)
     ret = (vim_acl_T)aclent;
 #endif /* HAVE_AIX_ACL */
 #endif /* HAVE_SOLARIS_ACL */
+#endif /* HAVE_SOLARIS_ZFS_ACL */
 #endif /* HAVE_POSIX_ACL */
     return ret;
 }
@@ -2781,6 +2871,9 @@ mch_set_acl(fname, aclent)
 #ifdef HAVE_POSIX_ACL
     acl_set_file((char *)fname, ACL_TYPE_ACCESS, (acl_t)aclent);
 #else
+#ifdef HAVE_SOLARIS_ZFS_ACL
+    acl_set((char *)fname, (acl_t *)aclent);
+#else
 #ifdef HAVE_SOLARIS_ACL
     acl((char *)fname, SETACL, ((vim_acl_solaris_T *)aclent)->acl_cnt,
            ((vim_acl_solaris_T *)aclent)->acl_entry);
@@ -2789,6 +2882,7 @@ mch_set_acl(fname, aclent)
     chacl((char *)fname, aclent, ((struct acl *)aclent)->acl_len);
 #endif /* HAVE_AIX_ACL */
 #endif /* HAVE_SOLARIS_ACL */
+#endif /* HAVE_SOLARIS_ZFS_ACL */
 #endif /* HAVE_POSIX_ACL */
 }
 
@@ -2801,6 +2895,9 @@ mch_free_acl(aclent)
 #ifdef HAVE_POSIX_ACL
     acl_free((acl_t)aclent);
 #else
+#ifdef HAVE_SOLARIS_ZFS_ACL
+    acl_free((acl_t *)aclent);
+#else
 #ifdef HAVE_SOLARIS_ACL
     free(((vim_acl_solaris_T *)aclent)->acl_entry);
     free(aclent);
@@ -2809,6 +2906,7 @@ mch_free_acl(aclent)
     free(aclent);
 #endif /* HAVE_AIX_ACL */
 #endif /* HAVE_SOLARIS_ACL */
+#endif /* HAVE_SOLARIS_ZFS_ACL */
 #endif /* HAVE_POSIX_ACL */
 }
 #endif
@@ -3294,6 +3392,29 @@ mch_setmouse(on)
        return;
 
     xterm_mouse_vers = use_xterm_mouse();
+
+# ifdef FEAT_MOUSE_URXVT
+    if (ttym_flags == TTYM_URXVT)
+    {
+       out_str_nf((char_u *)
+                  (on
+                  ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
+                  : IF_EB("\033[?1015l", ESC_STR "[?1015l")));
+       ison = on;
+    }
+# endif
+
+# ifdef FEAT_MOUSE_SGR
+    if (ttym_flags == TTYM_SGR)
+    {
+       out_str_nf((char_u *)
+                  (on
+                  ? IF_EB("\033[?1006h", ESC_STR "[?1006h")
+                  : IF_EB("\033[?1006l", ESC_STR "[?1006l")));
+       ison = on;
+    }
+# endif
+
     if (xterm_mouse_vers > 0)
     {
        if (on) /* enable mouse events, use mouse tracking if available */
@@ -3372,13 +3493,14 @@ mch_setmouse(on)
             *    4 = Windows Cross Hair
             *    5 = Windows UP Arrow
             */
-#ifdef JSBTERM_MOUSE_NONADVANCED /* Disables full feedback of pointer movements */
+#  ifdef JSBTERM_MOUSE_NONADVANCED
+           /* Disables full feedback of pointer movements */
            out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK1Q\033\\",
                                         ESC_STR "[0~ZwLMRK1Q" ESC_STR "\\"));
-#else
+#  else
            out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK+1Q\033\\",
                                        ESC_STR "[0~ZwLMRK+1Q" ESC_STR "\\"));
-#endif
+#  endif
            ison = TRUE;
        }
        else
@@ -3410,6 +3532,9 @@ check_mouse_termcode()
 {
 # ifdef FEAT_MOUSE_XTERM
     if (use_xterm_mouse()
+# ifdef FEAT_MOUSE_URXVT
+           && use_xterm_mouse() != 3
+# endif
 #  ifdef FEAT_GUI
            && !gui.in_use
 #  endif
@@ -3499,6 +3624,48 @@ check_mouse_termcode()
     else
        del_mouse_termcode(KS_PTERM_MOUSE);
 # endif
+# ifdef FEAT_MOUSE_URXVT
+    /* same as the dec mouse */
+    if (use_xterm_mouse() == 3
+#  ifdef FEAT_GUI
+           && !gui.in_use
+#  endif
+           )
+    {
+       set_mouse_termcode(KS_URXVT_MOUSE, (char_u *)(term_is_8bit(T_NAME)
+                   ? IF_EB("\233", CSI_STR)
+                   : IF_EB("\033[", ESC_STR "[")));
+
+       if (*p_mouse != NUL)
+       {
+           mch_setmouse(FALSE);
+           setmouse();
+       }
+    }
+    else
+       del_mouse_termcode(KS_URXVT_MOUSE);
+# endif
+# ifdef FEAT_MOUSE_SGR
+    /* same as the dec mouse */
+    if (use_xterm_mouse() == 4
+#  ifdef FEAT_GUI
+           && !gui.in_use
+#  endif
+           )
+    {
+       set_mouse_termcode(KS_SGR_MOUSE, (char_u *)(term_is_8bit(T_NAME)
+                   ? IF_EB("\233<", CSI_STR "<")
+                   : IF_EB("\033[<", ESC_STR "[<")));
+
+       if (*p_mouse != NUL)
+       {
+           mch_setmouse(FALSE);
+           setmouse();
+       }
+    }
+    else
+       del_mouse_termcode(KS_SGR_MOUSE);
+# endif
 }
 #endif
 
@@ -3610,6 +3777,7 @@ mch_get_shellsize()
 
     Rows = rows;
     Columns = columns;
+    limit_screen_size();
     return OK;
 }
 
@@ -3643,26 +3811,43 @@ mch_new_shellsize()
     /* Nothing to do. */
 }
 
-#ifndef USE_SYSTEM
-static void append_ga_line __ARGS((garray_T *gap));
-
 /*
- * Append the text in "gap" below the cursor line and clear "gap".
+ * Wait for process "child" to end.
+ * Return "child" if it exited properly, <= 0 on error.
  */
-    static void
-append_ga_line(gap)
-    garray_T   *gap;
+    static pid_t
+wait4pid(child, status)
+    pid_t      child;
+    waitstatus *status;
 {
-    /* Remove trailing CR. */
-    if (gap->ga_len > 0
-           && !curbuf->b_p_bin
-           && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
-       --gap->ga_len;
-    ga_append(gap, NUL);
-    ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
-    gap->ga_len = 0;
+    pid_t wait_pid = 0;
+
+    while (wait_pid != child)
+    {
+       /* When compiled with Python threads are probably used, in which case
+        * wait() sometimes hangs for no obvious reason.  Use waitpid()
+        * instead and loop (like the GUI). Also needed for other interfaces,
+        * they might call system(). */
+# ifdef __NeXT__
+       wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
+# else
+       wait_pid = waitpid(child, status, WNOHANG);
+# endif
+       if (wait_pid == 0)
+       {
+           /* Wait for 10 msec before trying again. */
+           mch_delay(10L, TRUE);
+           continue;
+       }
+       if (wait_pid <= 0
+# ifdef ECHILD
+               && errno == ECHILD
+# endif
+          )
+           break;
+    }
+    return wait_pid;
 }
-#endif
 
     int
 mch_call_shell(cmd, options)
@@ -3706,6 +3891,11 @@ mch_call_shell(cmd, options)
     if (options & SHELL_COOKED)
        settmode(TMODE_COOK);       /* set to normal mode */
 
+# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+    save_clipboard();
+    loose_clipboard();
+# endif
+
 # ifdef __EMX__
     if (cmd == NULL)
        x = system(""); /* this starts an interactive shell in emx */
@@ -3776,6 +3966,9 @@ mch_call_shell(cmd, options)
 # ifdef FEAT_TITLE
     resettitle();
 # endif
+# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+    restore_clipboard();
+# endif
     return x;
 
 #else /* USE_SYSTEM */     /* don't use system(), use fork()/exec() */
@@ -3795,6 +3988,7 @@ mch_call_shell(cmd, options)
     int                retval = -1;
     char       **argv = NULL;
     int                argc;
+    char_u     *p_shcf_copy = NULL;
     int                i;
     char_u     *p;
     int                inquote;
@@ -3814,14 +4008,14 @@ mch_call_shell(cmd, options)
 # endif
     int                did_settmode = FALSE;   /* settmode(TMODE_RAW) called */
 
-    out_flush();
-    if (options & SHELL_COOKED)
-       settmode(TMODE_COOK);           /* set to normal mode */
-
     newcmd = vim_strsave(p_sh);
     if (newcmd == NULL)                /* out of memory */
        goto error;
 
+    out_flush();
+    if (options & SHELL_COOKED)
+       settmode(TMODE_COOK);           /* set to normal mode */
+
     /*
      * Do this loop twice:
      * 1: find number of arguments
@@ -3851,6 +4045,19 @@ mch_call_shell(cmd, options)
        }
        if (argv == NULL)
        {
+           /*
+            * Account for possible multiple args in p_shcf.
+            */
+           p = p_shcf;
+           for (;;)
+           {
+               p = skiptowhite(p);
+               if (*p == NUL)
+                   break;
+               ++argc;
+               p = skipwhite(p);
+           }
+
            argv = (char **)alloc((unsigned)((argc + 4) * sizeof(char *)));
            if (argv == NULL)       /* out of memory */
                goto error;
@@ -3858,9 +4065,27 @@ mch_call_shell(cmd, options)
     }
     if (cmd != NULL)
     {
+       char_u  *s;
+
        if (extra_shell_arg != NULL)
            argv[argc++] = (char *)extra_shell_arg;
-       argv[argc++] = (char *)p_shcf;
+
+       /* Break 'shellcmdflag' into white separated parts.  This doesn't
+        * handle quoted strings, they are very unlikely to appear. */
+       p_shcf_copy = alloc((unsigned)STRLEN(p_shcf) + 1);
+       if (p_shcf_copy == NULL)    /* out of memory */
+           goto error;
+       s = p_shcf_copy;
+       p = p_shcf;
+       while (*p != NUL)
+       {
+           argv[argc++] = (char *)s;
+           while (*p && *p != ' ' && *p != TAB)
+               *s++ = *p++;
+           *s++ = NUL;
+           p = skipwhite(p);
+       }
+
        argv[argc++] = (char *)cmd;
     }
     argv[argc] = NULL;
@@ -3885,11 +4110,21 @@ mch_call_shell(cmd, options)
        if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE)))
        {
            pty_master_fd = OpenPTY(&tty_name);     /* open pty */
-           if (pty_master_fd >= 0 && ((pty_slave_fd =
-                                   open(tty_name, O_RDWR | O_EXTRA, 0)) < 0))
+           if (pty_master_fd >= 0)
            {
-               close(pty_master_fd);
-               pty_master_fd = -1;
+               /* Leaving out O_NOCTTY may lead to waitpid() always returning
+                * 0 on Mac OS X 10.7 thereby causing freezes. Let's assume
+                * adding O_NOCTTY always works when defined. */
+#ifdef O_NOCTTY
+               pty_slave_fd = open(tty_name, O_RDWR | O_NOCTTY | O_EXTRA, 0);
+#else
+               pty_slave_fd = open(tty_name, O_RDWR | O_EXTRA, 0);
+#endif
+               if (pty_slave_fd < 0)
+               {
+                   close(pty_master_fd);
+                   pty_master_fd = -1;
+               }
            }
        }
        /*
@@ -4148,7 +4383,6 @@ mch_call_shell(cmd, options)
 # ifdef FEAT_GUI
                if (pty_master_fd >= 0)
                {
-                   close(pty_slave_fd);        /* close slave side of pty */
                    fromshell_fd = pty_master_fd;
                    toshell_fd = dup(pty_master_fd);
                }
@@ -4190,15 +4424,13 @@ mch_call_shell(cmd, options)
                    {
                        MSG_PUTS(_("\nCannot fork\n"));
                    }
-                   else if (wpid == 0)
+                   else if (wpid == 0) /* child */
                    {
                        linenr_T    lnum = curbuf->b_op_start.lnum;
                        int         written = 0;
                        char_u      *lp = ml_get(lnum);
-                       char_u      *s;
                        size_t      l;
 
-                       /* child */
                        close(fromshell_fd);
                        for (;;)
                        {
@@ -4210,7 +4442,8 @@ mch_call_shell(cmd, options)
                                len = write(toshell_fd, "", (size_t)1);
                            else
                            {
-                               s = vim_strchr(lp + written, NL);
+                               char_u  *s = vim_strchr(lp + written, NL);
+
                                len = write(toshell_fd, (char *)lp + written,
                                           s == NULL ? l
                                              : (size_t)(s - (lp + written)));
@@ -4221,7 +4454,7 @@ mch_call_shell(cmd, options)
                                 * should not have one. */
                                if (lnum != curbuf->b_op_end.lnum
                                        || !curbuf->b_p_bin
-                                       || (lnum != write_no_eol_lnum
+                                       || (lnum != curbuf->b_no_eol_lnum
                                            && (lnum !=
                                                    curbuf->b_ml.ml_line_count
                                                    || curbuf->b_p_eol)))
@@ -4243,7 +4476,7 @@ mch_call_shell(cmd, options)
                        }
                        _exit(0);
                    }
-                   else
+                   else /* parent */
                    {
                        close(toshell_fd);
                        toshell_fd = -1;
@@ -4430,7 +4663,7 @@ mch_call_shell(cmd, options)
                    ++noread_cnt;
                    while (RealWaitForChar(fromshell_fd, 10L, NULL))
                    {
-                       len = read(fromshell_fd, (char *)buffer
+                       len = read_eintr(fromshell_fd, buffer
 # ifdef FEAT_MBYTE
                                + buffer_off, (size_t)(BUFLEN - buffer_off)
 # else
@@ -4540,7 +4773,7 @@ mch_call_shell(cmd, options)
                     * typed characters (otherwise we would lose typeahead).
                     */
 # ifdef __NeXT__
-                   wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *) 0);
+                   wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
 # else
                    wait_pid = waitpid(pid, &status, WNOHANG);
 # endif
@@ -4555,6 +4788,11 @@ mch_call_shell(cmd, options)
                    }
                    else
                        wait_pid = 0;
+
+# if defined(FEAT_XCLIPBOARD) && defined(FEAT_X11)
+                   /* Handle any X events, e.g. serving the clipboard. */
+                   clip_update();
+# endif
                }
 finished:
                p_more = p_more_save;
@@ -4564,10 +4802,10 @@ finished:
                    {
                        append_ga_line(&ga);
                        /* remember that the NL was missing */
-                       write_no_eol_lnum = curwin->w_cursor.lnum;
+                       curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
                    }
                    else
-                       write_no_eol_lnum = 0;
+                       curbuf->b_no_eol_lnum = 0;
                    ga_clear(&ga);
                }
 
@@ -4581,6 +4819,45 @@ finished:
                    close(toshell_fd);
                close(fromshell_fd);
            }
+# if defined(FEAT_XCLIPBOARD) && defined(FEAT_X11)
+           else
+           {
+               /*
+                * Similar to the loop above, but only handle X events, no
+                * I/O.
+                */
+               for (;;)
+               {
+                   if (got_int)
+                   {
+                       /* CTRL-C sends a signal to the child, we ignore it
+                        * ourselves */
+#  ifdef HAVE_SETSID
+                       kill(-pid, SIGINT);
+#  else
+                       kill(0, SIGINT);
+#  endif
+                       got_int = FALSE;
+                   }
+# ifdef __NeXT__
+                   wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
+# else
+                   wait_pid = waitpid(pid, &status, WNOHANG);
+# endif
+                   if ((wait_pid == (pid_t)-1 && errno == ECHILD)
+                           || (wait_pid == pid && WIFEXITED(status)))
+                   {
+                       wait_pid = pid;
+                       break;
+                   }
+
+                   /* Handle any X events, e.g. serving the clipboard. */
+                   clip_update();
+
+                   mch_delay(10L, TRUE);
+               }
+           }
+# endif
 
            /*
             * Wait until our child has exited.
@@ -4589,38 +4866,24 @@ finished:
             * Don't wait if wait_pid was already set above, indicating the
             * child already exited.
             */
-           while (wait_pid != pid)
-           {
-# ifdef _THREAD_SAFE
-               /* Ugly hack: when compiled with Python threads are probably
-                * used, in which case wait() sometimes hangs for no obvious
-                * reason.  Use waitpid() instead and loop (like the GUI). */
-#  ifdef __NeXT__
-               wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
-#  else
-               wait_pid = waitpid(pid, &status, WNOHANG);
-#  endif
-               if (wait_pid == 0)
-               {
-                   /* Wait for 1/100 sec before trying again. */
-                   mch_delay(10L, TRUE);
-                   continue;
-               }
-# else
-               wait_pid = wait(&status);
-# endif
-               if (wait_pid <= 0
-# ifdef ECHILD
-                       && errno == ECHILD
+           if (wait_pid != pid)
+               wait_pid = wait4pid(pid, &status);
+
+# ifdef FEAT_GUI
+           /* Close slave side of pty.  Only do this after the child has
+            * exited, otherwise the child may hang when it tries to write on
+            * the pty. */
+           if (pty_master_fd >= 0)
+               close(pty_slave_fd);
 # endif
-                  )
-                   break;
-           }
 
            /* Make sure the child that writes to the external program is
             * dead. */
            if (wpid > 0)
+           {
                kill(wpid, SIGKILL);
+               wait4pid(wpid, NULL);
+           }
 
            /*
             * Set to raw mode right now, otherwise a CTRL-C after
@@ -4635,7 +4898,7 @@ finished:
            {
                /* LINTED avoid "bitwise operation on signed value" */
                retval = WEXITSTATUS(status);
-               if (retval && !emsg_silent)
+               if (retval != 0 && !emsg_silent)
                {
                    if (retval == EXEC_FAILED)
                    {
@@ -4656,6 +4919,7 @@ finished:
        }
     }
     vim_free(argv);
+    vim_free(p_shcf_copy);
 
 error:
     if (!did_settmode)
@@ -4766,7 +5030,8 @@ WaitForChar(msec)
 
 /*
  * Wait "msec" msec until a character is available from file descriptor "fd".
- * Time == -1 will block forever.
+ * "msec" == 0 will check for characters once.
+ * "msec" == -1 will block until a character is available.
  * When a GUI is being used, this will not be used for input -- webb
  * Returns also, when a request from Sniff is waiting -- toni.
  * Or when a Linux GPM mouse event is waiting.
@@ -5004,7 +5269,8 @@ RealWaitForChar(fd, msec, check_for_gpm)
        /*
         * Select on ready for reading and exceptional condition (end of file).
         */
-       FD_ZERO(&rfds); /* calls bzero() on a sun */
+select_eintr:
+       FD_ZERO(&rfds);
        FD_ZERO(&efds);
        FD_SET(fd, &rfds);
 # if !defined(__QNX__) && !defined(__CYGWIN32__)
@@ -5028,6 +5294,10 @@ RealWaitForChar(fd, msec, check_for_gpm)
            FD_SET(ConnectionNumber(xterm_dpy), &rfds);
            if (maxfd < ConnectionNumber(xterm_dpy))
                maxfd = ConnectionNumber(xterm_dpy);
+
+           /* An event may have already been read but not handled.  In
+            * particulary, XFlush may cause this. */
+           xterm_update();
        }
 # endif
 # ifdef FEAT_MOUSE_GPM
@@ -5048,14 +5318,14 @@ RealWaitForChar(fd, msec, check_for_gpm)
                maxfd = xsmp_icefd;
        }
 # endif
-#ifdef FEAT_NETBEANS_INTG
+# ifdef FEAT_NETBEANS_INTG
        if (nb_fd != -1)
        {
            FD_SET(nb_fd, &rfds);
            if (maxfd < nb_fd)
                maxfd = nb_fd;
        }
-#endif
+# endif
 
 # ifdef OLD_VMS
        /* Old VMS as v6.2 and older have broken select(). It waits more than
@@ -5064,6 +5334,21 @@ RealWaitForChar(fd, msec, check_for_gpm)
 # else
        ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
 # endif
+# ifdef EINTR
+       if (ret == -1 && errno == EINTR)
+       {
+           /* Check whether window has been resized, EINTR may be caused by
+            * SIGWINCH. */
+           if (do_resize)
+               handle_resize();
+
+           /* Interrupted by a signal, need to try again.  We ignore msec
+            * here, because we do want to check even after a timeout if
+            * characters are available.  Needed for reading output of an
+            * external command after the process has finished. */
+           goto select_eintr;
+       }
+# endif
 # ifdef __TANDEM
        if (ret == -1 && errno == ENOTSUP)
        {
@@ -5071,7 +5356,7 @@ RealWaitForChar(fd, msec, check_for_gpm)
            FD_ZERO(&efds);
            ret = 0;
        }
-#endif
+# endif
 # ifdef FEAT_MZSCHEME
        if (ret == 0 && mzquantum_used)
            /* loop if MzThreads must be scheduled and timeout occurred */
@@ -5645,7 +5930,7 @@ mch_expand_wildcards(num_pat, pat, num_file, file, flags)
 # if defined(__CYGWIN__) || defined(__CYGWIN32__)
     /* Translate <CR><NL> into <NL>.  Caution, buffer may contain NUL. */
     p = buffer;
-    for (i = 0; i < len; ++i)
+    for (i = 0; i < (int)len; ++i)
        if (!(buffer[i] == CAR && buffer[i + 1] == NL))
            *p++ = buffer[i];
     len = p - buffer;
@@ -5693,6 +5978,7 @@ mch_expand_wildcards(num_pat, pat, num_file, file, flags)
        if (shell_style == STYLE_PRINT && !did_find_nul)
        {
            /* If there is a NUL, set did_find_nul, else set check_spaces */
+           buffer[len] = NUL;
            if (len && (int)STRLEN(buffer) < (int)len - 1)
                did_find_nul = TRUE;
            else
@@ -5843,7 +6129,6 @@ save_patterns(num_pat, pat, num_file, file)
 }
 #endif
 
-
 /*
  * Return TRUE if the string "p" contains a wildcard that mch_expandpath() can
  * expand.
@@ -6562,7 +6847,7 @@ do_xterm_trace()
            xterm_hints.x = 2;
        return TRUE;
     }
-    if (mouse_code == NULL)
+    if (mouse_code == NULL || STRLEN(mouse_code) > 45)
     {
        xterm_trace = 0;
        return FALSE;
@@ -6623,6 +6908,21 @@ clear_xterm_clip()
 # endif
 
 /*
+ * Catch up with GUI or X events.
+ */
+    static void
+clip_update()
+{
+# ifdef FEAT_GUI
+    if (gui.in_use)
+       gui_mch_update();
+    else
+# endif
+    if (xterm_Shell != (Widget)0)
+       xterm_update();
+}
+
+/*
  * Catch up with any queued X events.  This may put keyboard input into the
  * input buffer, call resize call-backs, trigger timers etc.  If there is
  * nothing in the X event queue (& no timers pending), then we return
index 5fd28af..02eeafc 100644 (file)
 
 #define BASENAMELEN    (MAXNAMLEN - 5)
 
-#ifdef HAVE_ERRNO_H
-# include <errno.h>
-#endif
-
 #ifdef HAVE_PWD_H
 # include <pwd.h>
 #endif
 # define HAVE_TOTAL_MEM
 #endif
 
+
+#ifndef PROTO
+
 #ifdef VMS
 # include <unixio.h>
 # include <unixlib.h>
 # ifdef FEAT_GUI_GTK
 #  include "gui_gtk_vms.h"
 # endif
+#endif
+
+#endif /* PROTO */
 
+#ifdef VMS
 typedef struct dsc$descriptor   DESC;
 #endif
 
@@ -291,11 +294,24 @@ typedef struct dsc$descriptor   DESC;
 # endif
 #endif
 
-#if !defined(USR_VIMRC_FILE2) && defined(OS2)
-# define USR_VIMRC_FILE2 "$VIM/.vimrc"
+
+#if !defined(USR_EXRC_FILE2)
+# ifdef OS2
+#  define USR_VIMRC_FILE2      "$HOME/vimfiles/vimrc"
+# else
+#  ifdef VMS
+#   define USR_VIMRC_FILE2     "sys$login:vimfiles:vimrc"
+#  else
+#    define USR_VIMRC_FILE2    "~/.vim/vimrc"
+#  endif
+# endif
+#endif
+
+#if !defined(USR_VIMRC_FILE3) && defined(OS2)
+# define USR_VIMRC_FILE3 "$VIM/.vimrc"
 #endif
-#if !defined(USR_VIMRC_FILE2) && defined(VMS)
-# define USR_VIMRC_FILE2 "sys$login:_vimrc"
+#if !defined(USR_VIMRC_FILE3) && defined(VMS)
+# define USR_VIMRC_FILE3 "sys$login:_vimrc"
 #endif
 
 #ifndef USR_GVIMRC_FILE
@@ -306,9 +322,21 @@ typedef struct dsc$descriptor   DESC;
 # endif
 #endif
 
+#ifndef USR_GVIMRC_FILE2
+# ifdef OS2
+#  define USR_GVIMRC_FILE2     "$HOME/vimfiles/gvimrc"
+# else
+#  ifdef VMS
+#   define USR_GVIMRC_FILE2    "sys$login:vimfiles:gvimrc"
+#  else
+#   define USR_GVIMRC_FILE2    "~/.vim/gvimrc"
+#  endif
+# endif
+#endif
+
 #ifdef VMS
-# ifndef USR_GVIMRC_FILE2
-#  define USR_GVIMRC_FILE2  "sys$login:_gvimrc"
+# ifndef USR_GVIMRC_FILE3
+#  define USR_GVIMRC_FILE3  "sys$login:_gvimrc"
 # endif
 #endif
 
index ba34072..49e6e30 100644 (file)
 # pragma warn -obs
 #endif
 
-#include "vimio.h"
 #include "vim.h"
 
-#include <dos.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <dos.h>
+#endif
+
 #include <string.h>
 #include <sys/types.h>
-#include <errno.h>
 #include <signal.h>
 #include <limits.h>
-#include <process.h>
 
-#undef chdir
-#include <direct.h>
-#include <shellapi.h>  /* required for FindExecutable() */
+#ifndef PROTO
+# include <process.h>
+
+# undef chdir
+# include <direct.h>
+# include <shellapi.h> /* required for FindExecutable() */
+#endif
 
 
 /* Record all output and all keyboard & mouse input */
@@ -245,9 +250,9 @@ mch_system(char *cmd, int options)
        /* Wait for the command to terminate before continuing */
        while (GetModuleUsage((HINSTANCE)h_module) > 0 && again )
        {
-           while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) && again )
+           while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && again)
            {
-               if(msg.message == WM_QUIT)
+               if (msg.message == WM_QUIT)
 
                {
                    PostQuitMessage(msg.wParam);
@@ -381,13 +386,13 @@ mch_breakcheck()
 
 
 /*
- * How much memory is available?
+ * How much memory is available in Kbyte?
  */
     long_u
 mch_avail_mem(
     int special)
 {
-    return GetFreeSpace(0);
+    return GetFreeSpace(0) >> 10;
 }
 
 
index 17f876c..c5a89c8 100644 (file)
@@ -50,7 +50,7 @@
 #endif
 
 /* toupper() is not really broken, but it's very slow. Probably because of
- * using unicde characters on Windows NT */
+ * using unicode characters on Windows NT */
 #define BROKEN_TOUPPER
 
 #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */
@@ -63,16 +63,21 @@ typedef long off_t;
 
 #include <stdlib.h>
 #include <time.h>
-#include <dos.h>
-#include <dir.h>
 
-#ifndef STRICT
-# define STRICT
-#endif
-#ifndef COBJMACROS
-# define COBJMACROS    /* For OLE: Enable "friendlier" access to objects */
-#endif
-#include <windows.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <dos.h>
+# include <dir.h>
+
+# ifndef STRICT
+#  define STRICT
+# endif
+# ifndef COBJMACROS
+#  define COBJMACROS   /* For OLE: Enable "friendlier" access to objects */
+# endif
+# include <windows.h>
+
+#endif /* PROTO */
 
 /*
  *  plenty of memory, use large buffers
index 8529afb..4013353 100644 (file)
@@ -20,7 +20,6 @@
  * Roger Knobbe <rogerk@wonderware.com> did the initial port of Vim 3.0.
  */
 
-#include "vimio.h"
 #include "vim.h"
 
 #ifdef FEAT_MZSCHEME
 #endif
 
 #include <sys/types.h>
-#include <errno.h>
 #include <signal.h>
 #include <limits.h>
-#include <process.h>
+
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <process.h>
+#endif
 
 #undef chdir
 #ifdef __GNUC__
 # include <direct.h>
 #endif
 
-#if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
-# include <shellapi.h>
+#ifndef PROTO
+# if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
+#  include <shellapi.h>
+# endif
 #endif
 
 #ifdef __MINGW32__
 # endif
 #endif
 
+/*
+ * Reparse Point
+ */
+#ifndef FILE_ATTRIBUTE_REPARSE_POINT
+# define FILE_ATTRIBUTE_REPARSE_POINT  0x00000400
+#endif
+#ifndef IO_REPARSE_TAG_SYMLINK
+# define IO_REPARSE_TAG_SYMLINK                0xA000000C
+#endif
+
 /* Record all output and all keyboard & mouse input */
 /* #define MCH_WRITE_DUMP */
 
@@ -127,6 +141,10 @@ typedef int TRUSTEE;
 typedef int WORD;
 typedef int WCHAR;
 typedef void VOID;
+typedef int BY_HANDLE_FILE_INFORMATION;
+typedef int SE_OBJECT_TYPE;
+typedef int PSNSECINFO;
+typedef int PSNSECINFOW;
 #endif
 
 #ifndef FEAT_GUI_W32
@@ -154,6 +172,18 @@ static PFNGCKLN    s_pfnGetConsoleKeyboardLayoutName = NULL;
 # define wcsicmp(a, b) wcscmpi((a), (b))
 #endif
 
+#ifndef PROTO
+
+/* Enable common dialogs input unicode from IME if possible. */
+#ifdef FEAT_MBYTE
+LRESULT (WINAPI *pDispatchMessage)(CONST MSG *) = DispatchMessage;
+BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT) = GetMessage;
+BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG) = IsDialogMessage;
+BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT) = PeekMessage;
+#endif
+
+#endif /* PROTO */
+
 #ifndef FEAT_GUI_W32
 /* Win32 Console handles for input and output */
 static HANDLE g_hConIn  = INVALID_HANDLE_VALUE;
@@ -202,59 +232,138 @@ static int need_vimrun_warning = FALSE;
 static char *vimrun_path = "vimrun ";
 #endif
 
+static int win32_getattrs(char_u *name);
+static int win32_setattrs(char_u *name, int attrs);
+static int win32_set_archive(char_u *name);
+
 #ifndef FEAT_GUI_W32
 static int suppress_winsize = 1;       /* don't fiddle with console */
 #endif
 
+static char_u *exe_path = NULL;
+
     static void
 get_exe_name(void)
 {
-    char       temp[256];
-    static int did_set_PATH = FALSE;
+    /* Maximum length of $PATH is more than MAXPATHL.  8191 is often mentioned
+     * as the maximum length that works (plus a NUL byte). */
+#define MAX_ENV_PATH_LEN 8192
+    char       temp[MAX_ENV_PATH_LEN];
+    char_u     *p;
 
     if (exe_name == NULL)
     {
        /* store the name of the executable, may be used for $VIM */
-       GetModuleFileName(NULL, temp, 255);
+       GetModuleFileName(NULL, temp, MAX_ENV_PATH_LEN - 1);
        if (*temp != NUL)
            exe_name = FullName_save((char_u *)temp, FALSE);
     }
 
-    if (!did_set_PATH && exe_name != NULL)
+    if (exe_path == NULL && exe_name != NULL)
     {
-       char_u      *p;
-       char_u      *newpath;
-
-       /* Append our starting directory to $PATH, so that when doing "!xxd"
-        * it's found in our starting directory.  Needed because SearchPath()
-        * also looks there. */
-       p = mch_getenv("PATH");
-       newpath = alloc((unsigned)(STRLEN(p) + STRLEN(exe_name) + 2));
-       if (newpath != NULL)
+       exe_path = vim_strnsave(exe_name,
+                                    (int)(gettail_sep(exe_name) - exe_name));
+       if (exe_path != NULL)
        {
-           STRCPY(newpath, p);
-           STRCAT(newpath, ";");
-           vim_strncpy(newpath + STRLEN(newpath), exe_name,
-                                           gettail_sep(exe_name) - exe_name);
-           vim_setenv((char_u *)"PATH", newpath);
-           vim_free(newpath);
+           /* Append our starting directory to $PATH, so that when doing
+            * "!xxd" it's found in our starting directory.  Needed because
+            * SearchPath() also looks there. */
+           p = mch_getenv("PATH");
+           if (p == NULL
+                      || STRLEN(p) + STRLEN(exe_path) + 2 < MAX_ENV_PATH_LEN)
+           {
+               if (p == NULL || *p == NUL)
+                   temp[0] = NUL;
+               else
+               {
+                   STRCPY(temp, p);
+                   STRCAT(temp, ";");
+               }
+               STRCAT(temp, exe_path);
+               vim_setenv((char_u *)"PATH", temp);
+           }
        }
+    }
+}
+
+/*
+ * Unescape characters in "p" that appear in "escaped".
+ */
+    static void
+unescape_shellxquote(char_u *p, char_u *escaped)
+{
+    int            l = (int)STRLEN(p);
+    int            n;
+
+    while (*p != NUL)
+    {
+       if (*p == '^' && vim_strchr(escaped, p[1]) != NULL)
+           mch_memmove(p, p + 1, l--);
+#ifdef FEAT_MBYTE
+       n = (*mb_ptr2len)(p);
+#else
+       n = 1;
+#endif
+       p += n;
+       l -= n;
+    }
+}
+
+/*
+ * Load library "name".
+ */
+    HINSTANCE
+vimLoadLib(char *name)
+{
+    HINSTANCE  dll = NULL;
+    char       old_dir[MAXPATHL];
+
+    /* NOTE: Do not use mch_dirname() and mch_chdir() here, they may call
+     * vimLoadLib() recursively, which causes a stack overflow. */
+    if (exe_path == NULL)
+       get_exe_name();
+    if (exe_path != NULL)
+    {
+#ifdef FEAT_MBYTE
+       WCHAR old_dirw[MAXPATHL];
 
-       did_set_PATH = TRUE;
+       if (GetCurrentDirectoryW(MAXPATHL, old_dirw) != 0)
+       {
+           /* Change directory to where the executable is, both to make
+            * sure we find a .dll there and to avoid looking for a .dll
+            * in the current directory. */
+           SetCurrentDirectory(exe_path);
+           dll = LoadLibrary(name);
+           SetCurrentDirectoryW(old_dirw);
+           return dll;
+       }
+       /* Retry with non-wide function (for Windows 98). */
+       if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+#endif
+           if (GetCurrentDirectory(MAXPATHL, old_dir) != 0)
+           {
+               /* Change directory to where the executable is, both to make
+                * sure we find a .dll there and to avoid looking for a .dll
+                * in the current directory. */
+               SetCurrentDirectory(exe_path);
+               dll = LoadLibrary(name);
+               SetCurrentDirectory(old_dir);
+           }
     }
+    return dll;
 }
 
 #if defined(DYNAMIC_GETTEXT) || defined(PROTO)
 # ifndef GETTEXT_DLL
 #  define GETTEXT_DLL "libintl.dll"
 # endif
-/* Dummy funcitons */
+/* Dummy functions */
 static char *null_libintl_gettext(const char *);
 static char *null_libintl_textdomain(const char *);
 static char *null_libintl_bindtextdomain(const char *, const char *);
 static char *null_libintl_bind_textdomain_codeset(const char *, const char *);
 
-static HINSTANCE hLibintlDLL = 0;
+static HINSTANCE hLibintlDLL = NULL;
 char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
 char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
 char *(*dyn_libintl_bindtextdomain)(const char *, const char *)
@@ -282,26 +391,16 @@ dyn_libintl_init(char *libname)
     if (hLibintlDLL)
        return 1;
     /* Load gettext library (libintl.dll) */
-    hLibintlDLL = LoadLibrary(libname != NULL ? libname : GETTEXT_DLL);
+    hLibintlDLL = vimLoadLib(libname != NULL ? libname : GETTEXT_DLL);
     if (!hLibintlDLL)
     {
-       char_u      dirname[_MAX_PATH];
-
-       /* Try using the path from gvim.exe to find the .dll there. */
-       get_exe_name();
-       STRCPY(dirname, exe_name);
-       STRCPY(gettail(dirname), GETTEXT_DLL);
-       hLibintlDLL = LoadLibrary((char *)dirname);
-       if (!hLibintlDLL)
+       if (p_verbose > 0)
        {
-           if (p_verbose > 0)
-           {
-               verbose_enter();
-               EMSG2(_(e_loadlib), GETTEXT_DLL);
-               verbose_leave();
-           }
-           return 0;
+           verbose_enter();
+           EMSG2(_(e_loadlib), GETTEXT_DLL);
+           verbose_leave();
        }
+       return 0;
     }
     for (i = 0; libintl_entry[i].name != NULL
                                         && libintl_entry[i].ptr != NULL; ++i)
@@ -382,20 +481,78 @@ null_libintl_textdomain(const char *domainname)
 DWORD g_PlatformId;
 
 #ifdef HAVE_ACL
-# include <aclapi.h>
+# ifndef PROTO
+#  include <aclapi.h>
+# endif
+# ifndef PROTECTED_DACL_SECURITY_INFORMATION
+#  define PROTECTED_DACL_SECURITY_INFORMATION  0x80000000L
+# endif
+
 /*
  * These are needed to dynamically load the ADVAPI DLL, which is not
  * implemented under Windows 95 (and causes VIM to crash)
  */
-typedef DWORD (WINAPI *PSNSECINFO) (LPTSTR, enum SE_OBJECT_TYPE,
+typedef DWORD (WINAPI *PSNSECINFO) (LPSTR, SE_OBJECT_TYPE,
+       SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
+typedef DWORD (WINAPI *PGNSECINFO) (LPSTR, SE_OBJECT_TYPE,
+       SECURITY_INFORMATION, PSID *, PSID *, PACL *, PACL *,
+       PSECURITY_DESCRIPTOR *);
+# ifdef FEAT_MBYTE
+typedef DWORD (WINAPI *PSNSECINFOW) (LPWSTR, SE_OBJECT_TYPE,
        SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
-typedef DWORD (WINAPI *PGNSECINFO) (LPSTR, enum SE_OBJECT_TYPE,
+typedef DWORD (WINAPI *PGNSECINFOW) (LPWSTR, SE_OBJECT_TYPE,
        SECURITY_INFORMATION, PSID *, PSID *, PACL *, PACL *,
        PSECURITY_DESCRIPTOR *);
+# endif
 
 static HANDLE advapi_lib = NULL;       /* Handle for ADVAPI library */
 static PSNSECINFO pSetNamedSecurityInfo;
 static PGNSECINFO pGetNamedSecurityInfo;
+# ifdef FEAT_MBYTE
+static PSNSECINFOW pSetNamedSecurityInfoW;
+static PGNSECINFOW pGetNamedSecurityInfoW;
+# endif
+#endif
+
+typedef BOOL (WINAPI *PSETHANDLEINFORMATION)(HANDLE, DWORD, DWORD);
+
+static BOOL allowPiping = FALSE;
+static PSETHANDLEINFORMATION pSetHandleInformation;
+
+#ifdef HAVE_ACL
+/*
+ * Enables or disables the specified privilege.
+ */
+    static BOOL
+win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
+{
+    BOOL             bResult;
+    LUID             luid;
+    HANDLE           hToken;
+    TOKEN_PRIVILEGES tokenPrivileges;
+
+    if (!OpenProcessToken(GetCurrentProcess(),
+               TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
+       return FALSE;
+
+    if (!LookupPrivilegeValue(NULL, lpszPrivilege, &luid))
+    {
+       CloseHandle(hToken);
+       return FALSE;
+    }
+
+    tokenPrivileges.PrivilegeCount           = 1;
+    tokenPrivileges.Privileges[0].Luid       = luid;
+    tokenPrivileges.Privileges[0].Attributes = bEnable ?
+                                                   SE_PRIVILEGE_ENABLED : 0;
+
+    bResult = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges,
+           sizeof(TOKEN_PRIVILEGES), NULL, NULL);
+
+    CloseHandle(hToken);
+
+    return bResult && GetLastError() == ERROR_SUCCESS;
+}
 #endif
 
 /*
@@ -430,24 +587,49 @@ PlatformId(void)
             * Seems like a lot of overhead to load/unload ADVAPI32.DLL each
             * time we verify security...
             */
-           advapi_lib = LoadLibrary("ADVAPI32.DLL");
+           advapi_lib = vimLoadLib("ADVAPI32.DLL");
            if (advapi_lib != NULL)
            {
                pSetNamedSecurityInfo = (PSNSECINFO)GetProcAddress(advapi_lib,
                                                      "SetNamedSecurityInfoA");
                pGetNamedSecurityInfo = (PGNSECINFO)GetProcAddress(advapi_lib,
                                                      "GetNamedSecurityInfoA");
+# ifdef FEAT_MBYTE
+               pSetNamedSecurityInfoW = (PSNSECINFOW)GetProcAddress(advapi_lib,
+                                                     "SetNamedSecurityInfoW");
+               pGetNamedSecurityInfoW = (PGNSECINFOW)GetProcAddress(advapi_lib,
+                                                     "GetNamedSecurityInfoW");
+# endif
                if (pSetNamedSecurityInfo == NULL
-                       || pGetNamedSecurityInfo == NULL)
+                       || pGetNamedSecurityInfo == NULL
+# ifdef FEAT_MBYTE
+                       || pSetNamedSecurityInfoW == NULL
+                       || pGetNamedSecurityInfoW == NULL
+# endif
+                       )
                {
                    /* If we can't get the function addresses, set advapi_lib
                     * to NULL so that we don't use them. */
                    FreeLibrary(advapi_lib);
                    advapi_lib = NULL;
                }
+               /* Enable privilege for getting or setting SACLs. */
+               win32_enable_privilege(SE_SECURITY_NAME, TRUE);
            }
        }
 #endif
+       /*
+        * If we are on windows NT, try to load the pipe functions, only
+        * available from Win2K.
+        */
+       if (g_PlatformId == VER_PLATFORM_WIN32_NT)
+       {
+           HANDLE kernel32 = GetModuleHandle("kernel32");
+           pSetHandleInformation = (PSETHANDLEINFORMATION)GetProcAddress(
+                                           kernel32, "SetHandleInformation");
+
+           allowPiping = pSetHandleInformation != NULL;
+       }
        done = TRUE;
     }
 }
@@ -930,7 +1112,7 @@ decode_mouse_event(
            DWORD dwLR = (pmer->dwButtonState & LEFT_RIGHT);
 
            /* if either left or right button only is pressed, see if the
-            * the next mouse event has both of them pressed */
+            * next mouse event has both of them pressed */
            if (dwLR == LEFT || dwLR == RIGHT)
            {
                for (;;)
@@ -1175,9 +1357,10 @@ WaitForChar(long msec)
 
        if (msec > 0)
        {
-           /* If the specified wait time has passed, return. */
+           /* If the specified wait time has passed, return.  Beware that
+            * GetTickCount() may wrap around (overflow). */
            dwNow = GetTickCount();
-           if (dwNow >= dwEndTime)
+           if ((int)(dwNow - dwEndTime) >= 0)
                break;
        }
        if (msec != 0)
@@ -1342,7 +1525,7 @@ tgetch(int *pmodifiers, char_u *pch2)
 
 
 /*
- * mch_inchar(): low-level input funcion.
+ * mch_inchar(): low-level input function.
  * Get one or more characters from the keyboard or the mouse.
  * If time == 0, do not wait for characters.
  * If time == n, wait a short time for characters.
@@ -1364,6 +1547,11 @@ mch_inchar(
 #define TYPEAHEADLEN 20
     static char_u   typeahead[TYPEAHEADLEN];   /* previously typed bytes. */
     static int     typeaheadlen = 0;
+#ifdef FEAT_MBYTE
+    static char_u   *rest = NULL;      /* unconverted rest of previous read */
+    static int     restlen = 0;
+    int                    unconverted;
+#endif
 
     /* First use any typeahead that was kept because "buf" was too small. */
     if (typeaheadlen > 0)
@@ -1467,6 +1655,33 @@ mch_inchar(
 
            c = tgetch(&modifiers, &ch2);
 
+#ifdef FEAT_MBYTE
+           /* stolen from fill_input_buf() in ui.c */
+           if (rest != NULL)
+           {
+               /* Use remainder of previous call, starts with an invalid
+                * character that may become valid when reading more. */
+               if (restlen > TYPEAHEADLEN - typeaheadlen)
+                   unconverted = TYPEAHEADLEN - typeaheadlen;
+               else
+                   unconverted = restlen;
+               mch_memmove(typeahead + typeaheadlen, rest, unconverted);
+               if (unconverted == restlen)
+               {
+                   vim_free(rest);
+                   rest = NULL;
+               }
+               else
+               {
+                   restlen -= unconverted;
+                   mch_memmove(rest, rest + unconverted, restlen);
+               }
+               typeaheadlen += unconverted;
+           }
+           else
+               unconverted = 0;
+#endif
+
            if (typebuf_changed(tb_change_cnt))
            {
                /* "buf" may be invalid now if a client put something in the
@@ -1502,8 +1717,12 @@ mch_inchar(
                 * when 'tenc' is set. */
                if (input_conv.vc_type != CONV_NONE
                                                && (ch2 == NUL || c != K_NUL))
-                   n = convert_input(typeahead + typeaheadlen, n,
-                                                TYPEAHEADLEN - typeaheadlen);
+               {
+                   typeaheadlen -= unconverted;
+                   n = convert_input_safe(typeahead + typeaheadlen,
+                               n + unconverted, TYPEAHEADLEN - typeaheadlen,
+                               rest == NULL ? &rest : NULL, &restlen);
+               }
 #endif
 
                /* Use the ALT key to set the 8th bit of the character
@@ -1570,8 +1789,10 @@ theend:
 #endif /* FEAT_GUI_W32 */
 }
 
-#ifndef __MINGW32__
-# include <shellapi.h> /* required for FindExecutable() */
+#ifndef PROTO
+# ifndef __MINGW32__
+#  include <shellapi.h>        /* required for FindExecutable() */
+# endif
 #endif
 
 /*
@@ -1615,6 +1836,35 @@ executable_exists(char *name)
     return TRUE;
 }
 
+#if ((defined(__MINGW32__) || defined (__CYGWIN32__)) && \
+       __MSVCRT_VERSION__ >= 0x800) || (defined(_MSC_VER) && _MSC_VER >= 1400)
+/*
+ * Bad parameter handler.
+ *
+ * Certain MS CRT functions will intentionally crash when passed invalid
+ * parameters to highlight possible security holes.  Setting this function as
+ * the bad parameter handler will prevent the crash.
+ *
+ * In debug builds the parameters contain CRT information that might help track
+ * down the source of a problem, but in non-debug builds the arguments are all
+ * NULL/0.  Debug builds will also produce assert dialogs from the CRT, it is
+ * worth allowing these to make debugging of issues easier.
+ */
+    static void
+bad_param_handler(const wchar_t *expression,
+    const wchar_t *function,
+    const wchar_t *file,
+    unsigned int line,
+    uintptr_t pReserved)
+{
+}
+
+# define SET_INVALID_PARAM_HANDLER \
+       ((void)_set_invalid_parameter_handler(bad_param_handler))
+#else
+# define SET_INVALID_PARAM_HANDLER
+#endif
+
 #ifdef FEAT_GUI_W32
 
 /*
@@ -1627,6 +1877,9 @@ mch_init(void)
     extern int _fmode;
 #endif
 
+    /* Silently handle invalid parameters to CRT functions */
+    SET_INVALID_PARAM_HANDLER;
+
     /* Let critical errors result in a failure, not in a dialog box.  Required
      * for the timestamp test to work on removed floppies. */
     SetErrorMode(SEM_FAILCRITICALERRORS);
@@ -1679,16 +1932,7 @@ mch_init(void)
        set_option_value((char_u *)"grepprg", 0, (char_u *)"grep -n", 0);
 
 #ifdef FEAT_CLIPBOARD
-    clip_init(TRUE);
-
-    /*
-     * Vim's own clipboard format recognises whether the text is char, line,
-     * or rectangular block.  Only useful for copying between two Vims.
-     * "VimClipboard" was used for previous versions, using the first
-     * character to specify MCHAR, MLINE or MBLOCK.
-     */
-    clip_star.format = RegisterClipboardFormat("VimClipboard2");
-    clip_star.format_raw = RegisterClipboardFormat("VimRawBytes");
+    win_clip_init();
 #endif
 }
 
@@ -1835,8 +2079,7 @@ SaveConsoleBuffer(
        cb->BufferSize.X = cb->Info.dwSize.X;
        cb->BufferSize.Y = cb->Info.dwSize.Y;
        NumCells = cb->BufferSize.X * cb->BufferSize.Y;
-       if (cb->Buffer != NULL)
-           vim_free(cb->Buffer);
+       vim_free(cb->Buffer);
        cb->Buffer = (PCHAR_INFO)alloc(NumCells * sizeof(CHAR_INFO));
        if (cb->Buffer == NULL)
            return FALSE;
@@ -2103,6 +2346,9 @@ mch_init(void)
     extern int _fmode;
 #endif
 
+    /* Silently handle invalid parameters to CRT functions */
+    SET_INVALID_PARAM_HANDLER;
+
     /* Let critical errors result in a failure, not in a dialog box.  Required
      * for the timestamp test to work on removed floppies. */
     SetErrorMode(SEM_FAILCRITICALERRORS);
@@ -2171,16 +2417,7 @@ mch_init(void)
 #endif
 
 #ifdef FEAT_CLIPBOARD
-    clip_init(TRUE);
-
-    /*
-     * Vim's own clipboard format recognises whether the text is char, line, or
-     * rectangular block.  Only useful for copying between two Vims.
-     * "VimClipboard" was used for previous versions, using the first
-     * character to specify MCHAR, MLINE or MBLOCK.
-     */
-    clip_star.format = RegisterClipboardFormat("VimClipboard2");
-    clip_star.format_raw = RegisterClipboardFormat("VimRawBytes");
+    win_clip_init();
 #endif
 
     /* This will be NULL on anything but NT 4.0 */
@@ -2273,12 +2510,14 @@ fname_case(
     int                len)
 {
     char               szTrueName[_MAX_PATH + 2];
+    char               szTrueNameTemp[_MAX_PATH + 2];
     char               *ptrue, *ptruePrev;
     char               *porig, *porigPrev;
     int                        flen;
     WIN32_FIND_DATA    fb;
     HANDLE             hFind;
     int                        c;
+    int                        slen;
 
     flen = (int)STRLEN(name);
     if (flen == 0 || flen > _MAX_PATH)
@@ -2323,12 +2562,19 @@ fname_case(
        }
        *ptrue = NUL;
 
+       /* To avoid a slow failure append "\*" when searching a directory,
+        * server or network share. */
+       STRCPY(szTrueNameTemp, szTrueName);
+       slen = (int)strlen(szTrueNameTemp);
+       if (*porig == psepc && slen + 2 < _MAX_PATH)
+           STRCPY(szTrueNameTemp + slen, "\\*");
+
        /* Skip "", "." and "..". */
        if (ptrue > ptruePrev
                && (ptruePrev[0] != '.'
                    || (ptruePrev[1] != NUL
                        && (ptruePrev[1] != '.' || ptruePrev[2] != NUL)))
-               && (hFind = FindFirstFile(szTrueName, &fb))
+               && (hFind = FindFirstFile(szTrueNameTemp, &fb))
                                                      != INVALID_HANDLE_VALUE)
        {
            c = *porig;
@@ -2458,57 +2704,52 @@ mch_dirname(
 /*
  * get file permissions for `name'
  * -1 : error
- * else FILE_ATTRIBUTE_* defined in winnt.h
+ * else mode_t
  */
     long
 mch_getperm(char_u *name)
 {
-#ifdef FEAT_MBYTE
-    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-    {
-       WCHAR   *p = enc_to_utf16(name, NULL);
-       long    n;
+    struct stat st;
+    int n;
 
-       if (p != NULL)
-       {
-           n = (long)GetFileAttributesW(p);
-           vim_free(p);
-           if (n >= 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
-               return n;
-           /* Retry with non-wide function (for Windows 98). */
-       }
-    }
-#endif
-    return (long)GetFileAttributes((char *)name);
+    n = mch_stat(name, &st);
+    return n == 0 ? (int)st.st_mode : -1;
 }
 
 
 /*
- * set file permission for `name' to `perm'
+ * Set file permission for "name" to "perm".
+ *
+ * Return FAIL for failure, OK otherwise.
  */
     int
-mch_setperm(
-    char_u  *name,
-    long    perm)
+mch_setperm(char_u *name, long perm)
 {
-    perm |= FILE_ATTRIBUTE_ARCHIVE;    /* file has changed, set archive bit */
+    long       n = -1;
+
 #ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
-       WCHAR   *p = enc_to_utf16(name, NULL);
-       long    n;
+       WCHAR *p = enc_to_utf16(name, NULL);
 
        if (p != NULL)
        {
-           n = (long)SetFileAttributesW(p, perm);
+           n = _wchmod(p, perm);
            vim_free(p);
-           if (n || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
-               return n ? OK : FAIL;
+           if (n == -1 && GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+               return FAIL;
            /* Retry with non-wide function (for Windows 98). */
        }
     }
+    if (n == -1)
 #endif
-    return SetFileAttributes((char *)name, perm) ? OK : FAIL;
+       n = _chmod(name, perm);
+    if (n == -1)
+       return FAIL;
+
+    win32_set_archive(name);
+
+    return OK;
 }
 
 /*
@@ -2517,91 +2758,167 @@ mch_setperm(
     void
 mch_hide(char_u *name)
 {
-    int                perm;
-#ifdef FEAT_MBYTE
-    WCHAR      *p = NULL;
+    int attrs = win32_getattrs(name);
+    if (attrs == -1)
+       return;
+
+    attrs |= FILE_ATTRIBUTE_HIDDEN;
+    win32_setattrs(name, attrs);
+}
 
+/*
+ * return TRUE if "name" is a directory
+ * return FALSE if "name" is not a directory or upon error
+ */
+    int
+mch_isdir(char_u *name)
+{
+    int f = win32_getattrs(name);
+
+    if (f == -1)
+       return FALSE;               /* file does not exist at all */
+
+    return (f & FILE_ATTRIBUTE_DIRECTORY) != 0;
+}
+
+/*
+ * Create directory "name".
+ * Return 0 on success, -1 on error.
+ */
+    int
+mch_mkdir(char_u *name)
+{
+#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+    {
+       WCHAR   *p;
+       int     retval;
+
        p = enc_to_utf16(name, NULL);
+       if (p == NULL)
+           return -1;
+       retval = _wmkdir(p);
+       vim_free(p);
+       return retval;
+    }
 #endif
+    return _mkdir(name);
+}
+
+/*
+ * Return TRUE if file "fname" has more than one link.
+ */
+    int
+mch_is_hard_link(char_u *fname)
+{
+    BY_HANDLE_FILE_INFORMATION info;
+
+    return win32_fileinfo(fname, &info) == FILEINFO_OK
+                                                  && info.nNumberOfLinks > 1;
+}
 
+/*
+ * Return TRUE if file "fname" is a symbolic link.
+ */
+    int
+mch_is_symbolic_link(char_u *fname)
+{
+    HANDLE             hFind;
+    int                        res = FALSE;
+    WIN32_FIND_DATAA   findDataA;
+    DWORD              fileFlags = 0, reparseTag = 0;
 #ifdef FEAT_MBYTE
-    if (p != NULL)
+    WCHAR              *wn = NULL;
+    WIN32_FIND_DATAW   findDataW;
+
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+       wn = enc_to_utf16(fname, NULL);
+    if (wn != NULL)
     {
-       perm = GetFileAttributesW(p);
-       if (perm < 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+       hFind = FindFirstFileW(wn, &findDataW);
+       vim_free(wn);
+       if (hFind == INVALID_HANDLE_VALUE
+               && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
        {
            /* Retry with non-wide function (for Windows 98). */
-           vim_free(p);
-           p = NULL;
+           hFind = FindFirstFile(fname, &findDataA);
+           if (hFind != INVALID_HANDLE_VALUE)
+           {
+               fileFlags = findDataA.dwFileAttributes;
+               reparseTag = findDataA.dwReserved0;
+           }
+       }
+       else
+       {
+           fileFlags = findDataW.dwFileAttributes;
+           reparseTag = findDataW.dwReserved0;
        }
     }
-    if (p == NULL)
+    else
 #endif
-       perm = GetFileAttributes((char *)name);
-    if (perm >= 0)
     {
-       perm |= FILE_ATTRIBUTE_HIDDEN;
-#ifdef FEAT_MBYTE
-       if (p != NULL)
+       hFind = FindFirstFile(fname, &findDataA);
+       if (hFind != INVALID_HANDLE_VALUE)
        {
-           if (SetFileAttributesW(p, perm) == 0
-                   && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
-           {
-               /* Retry with non-wide function (for Windows 98). */
-               vim_free(p);
-               p = NULL;
-           }
+           fileFlags = findDataA.dwFileAttributes;
+           reparseTag = findDataA.dwReserved0;
        }
-       if (p == NULL)
-#endif
-           SetFileAttributes((char *)name, perm);
     }
-#ifdef FEAT_MBYTE
-    vim_free(p);
-#endif
+
+    if (hFind != INVALID_HANDLE_VALUE)
+       FindClose(hFind);
+
+    if ((fileFlags & FILE_ATTRIBUTE_REPARSE_POINT)
+           && reparseTag == IO_REPARSE_TAG_SYMLINK)
+       res = TRUE;
+
+    return res;
 }
 
 /*
- * return TRUE if "name" is a directory
- * return FALSE if "name" is not a directory or upon error
+ * Return TRUE if file "fname" has more than one link or if it is a symbolic
+ * link.
  */
     int
-mch_isdir(char_u *name)
+mch_is_linked(char_u *fname)
 {
-    int f = mch_getperm(name);
-
-    if (f == -1)
-       return FALSE;               /* file does not exist at all */
-
-    return (f & FILE_ATTRIBUTE_DIRECTORY) != 0;
+    if (mch_is_hard_link(fname) || mch_is_symbolic_link(fname))
+       return TRUE;
+    return FALSE;
 }
 
 /*
- * Return TRUE if file "fname" has more than one link.
+ * Get the by-handle-file-information for "fname".
+ * Returns FILEINFO_OK when OK.
+ * returns FILEINFO_ENC_FAIL when enc_to_utf16() failed.
+ * Returns FILEINFO_READ_FAIL when CreateFile() failed.
+ * Returns FILEINFO_INFO_FAIL when GetFileInformationByHandle() failed.
  */
     int
-mch_is_linked(char_u *fname)
+win32_fileinfo(char_u *fname, BY_HANDLE_FILE_INFORMATION *info)
 {
     HANDLE     hFile;
-    int                res = 0;
-    BY_HANDLE_FILE_INFORMATION inf;
+    int                res = FILEINFO_READ_FAIL;
 #ifdef FEAT_MBYTE
     WCHAR      *wn = NULL;
 
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+    {
        wn = enc_to_utf16(fname, NULL);
+       if (wn == NULL)
+           res = FILEINFO_ENC_FAIL;
+    }
     if (wn != NULL)
     {
        hFile = CreateFileW(wn,         /* file name */
                    GENERIC_READ,       /* access mode */
-                   0,                  /* share mode */
+                   FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */
                    NULL,               /* security descriptor */
                    OPEN_EXISTING,      /* creation disposition */
-                   0,                  /* file attributes */
+                   FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */
                    NULL);              /* handle to template file */
        if (hFile == INVALID_HANDLE_VALUE
-               && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+                             && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
        {
            /* Retry with non-wide function (for Windows 98). */
            vim_free(wn);
@@ -2612,17 +2929,18 @@ mch_is_linked(char_u *fname)
 #endif
        hFile = CreateFile(fname,       /* file name */
                    GENERIC_READ,       /* access mode */
-                   0,                  /* share mode */
+                   FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */
                    NULL,               /* security descriptor */
                    OPEN_EXISTING,      /* creation disposition */
-                   0,                  /* file attributes */
+                   FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */
                    NULL);              /* handle to template file */
 
     if (hFile != INVALID_HANDLE_VALUE)
     {
-       if (GetFileInformationByHandle(hFile, &inf) != 0
-               && inf.nNumberOfLinks > 1)
-           res = 1;
+       if (GetFileInformationByHandle(hFile, info) != 0)
+           res = FILEINFO_OK;
+       else
+           res = FILEINFO_INFO_FAIL;
        CloseHandle(hFile);
     }
 
@@ -2633,17 +2951,103 @@ mch_is_linked(char_u *fname)
 }
 
 /*
- * Return TRUE if file or directory "name" is writable (not readonly).
- * Strange semantics of Win32: a readonly directory is writable, but you can't
- * delete a file.  Let's say this means it is writable.
+ * get file attributes for `name'
+ * -1 : error
+ * else FILE_ATTRIBUTE_* defined in winnt.h
  */
+    static
     int
-mch_writable(char_u *name)
+win32_getattrs(char_u *name)
 {
-    int perm = mch_getperm(name);
+    int                attr;
+#ifdef FEAT_MBYTE
+    WCHAR      *p = NULL;
 
-    return (perm != -1 && (!(perm & FILE_ATTRIBUTE_READONLY)
-                                      || (perm & FILE_ATTRIBUTE_DIRECTORY)));
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+       p = enc_to_utf16(name, NULL);
+
+    if (p != NULL)
+    {
+       attr = GetFileAttributesW(p);
+       if (attr < 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+       {
+           /* Retry with non-wide function (for Windows 98). */
+           vim_free(p);
+           p = NULL;
+       }
+    }
+    if (p == NULL)
+#endif
+       attr = GetFileAttributes((char *)name);
+#ifdef FEAT_MBYTE
+    vim_free(p);
+#endif
+    return attr;
+}
+
+/*
+ * set file attributes for `name' to `attrs'
+ *
+ * return -1 for failure, 0 otherwise
+ */
+    static
+    int
+win32_setattrs(char_u *name, int attrs)
+{
+    int res;
+#ifdef FEAT_MBYTE
+    WCHAR      *p = NULL;
+
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+       p = enc_to_utf16(name, NULL);
+
+    if (p != NULL)
+    {
+       res = SetFileAttributesW(p, attrs);
+       if (res == FALSE
+           && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+       {
+           /* Retry with non-wide function (for Windows 98). */
+           vim_free(p);
+           p = NULL;
+       }
+    }
+    if (p == NULL)
+#endif
+       res = SetFileAttributes((char *)name, attrs);
+#ifdef FEAT_MBYTE
+    vim_free(p);
+#endif
+    return res ? 0 : -1;
+}
+
+/*
+ * Set archive flag for "name".
+ */
+    static
+    int
+win32_set_archive(char_u *name)
+{
+    int attrs = win32_getattrs(name);
+    if (attrs == -1)
+       return -1;
+
+    attrs |= FILE_ATTRIBUTE_ARCHIVE;
+    return win32_setattrs(name, attrs);
+}
+
+/*
+ * Return TRUE if file or directory "name" is writable (not readonly).
+ * Strange semantics of Win32: a readonly directory is writable, but you can't
+ * delete a file.  Let's say this means it is writable.
+ */
+    int
+mch_writable(char_u *name)
+{
+    int attrs = win32_getattrs(name);
+
+    return (attrs != -1 && (!(attrs & FILE_ATTRIBUTE_READONLY)
+                         || (attrs & FILE_ATTRIBUTE_DIRECTORY)));
 }
 
 /*
@@ -2752,6 +3156,7 @@ mch_get_acl(char_u *fname)
     return (vim_acl_T)NULL;
 #else
     struct my_acl   *p = NULL;
+    DWORD   err;
 
     /* This only works on Windows NT and 2000. */
     if (g_PlatformId == VER_PLATFORM_WIN32_NT && advapi_lib != NULL)
@@ -2759,23 +3164,82 @@ mch_get_acl(char_u *fname)
        p = (struct my_acl *)alloc_clear((unsigned)sizeof(struct my_acl));
        if (p != NULL)
        {
-           if (pGetNamedSecurityInfo(
-                       (LPTSTR)fname,          // Abstract filename
-                       SE_FILE_OBJECT,         // File Object
-                       // Retrieve the entire security descriptor.
-                       OWNER_SECURITY_INFORMATION |
-                       GROUP_SECURITY_INFORMATION |
-                       DACL_SECURITY_INFORMATION |
-                       SACL_SECURITY_INFORMATION,
-                       &p->pSidOwner,          // Ownership information.
-                       &p->pSidGroup,          // Group membership.
-                       &p->pDacl,              // Discretionary information.
-                       &p->pSacl,              // For auditing purposes.
-                       &p->pSecurityDescriptor
-                                   ) != ERROR_SUCCESS)
+# ifdef FEAT_MBYTE
+           WCHAR       *wn = NULL;
+
+           if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+               wn = enc_to_utf16(fname, NULL);
+           if (wn != NULL)
            {
-               mch_free_acl((vim_acl_T)p);
-               p = NULL;
+               /* Try to retrieve the entire security descriptor. */
+               err = pGetNamedSecurityInfoW(
+                           wn,                 // Abstract filename
+                           SE_FILE_OBJECT,     // File Object
+                           OWNER_SECURITY_INFORMATION |
+                           GROUP_SECURITY_INFORMATION |
+                           DACL_SECURITY_INFORMATION |
+                           SACL_SECURITY_INFORMATION,
+                           &p->pSidOwner,      // Ownership information.
+                           &p->pSidGroup,      // Group membership.
+                           &p->pDacl,          // Discretionary information.
+                           &p->pSacl,          // For auditing purposes.
+                           &p->pSecurityDescriptor);
+               if (err == ERROR_ACCESS_DENIED ||
+                       err == ERROR_PRIVILEGE_NOT_HELD)
+               {
+                   /* Retrieve only DACL. */
+                   (void)pGetNamedSecurityInfoW(
+                           wn,
+                           SE_FILE_OBJECT,
+                           DACL_SECURITY_INFORMATION,
+                           NULL,
+                           NULL,
+                           &p->pDacl,
+                           NULL,
+                           &p->pSecurityDescriptor);
+               }
+               if (p->pSecurityDescriptor == NULL)
+               {
+                   mch_free_acl((vim_acl_T)p);
+                   p = NULL;
+               }
+               vim_free(wn);
+           }
+           else
+# endif
+           {
+               /* Try to retrieve the entire security descriptor. */
+               err = pGetNamedSecurityInfo(
+                           (LPSTR)fname,       // Abstract filename
+                           SE_FILE_OBJECT,     // File Object
+                           OWNER_SECURITY_INFORMATION |
+                           GROUP_SECURITY_INFORMATION |
+                           DACL_SECURITY_INFORMATION |
+                           SACL_SECURITY_INFORMATION,
+                           &p->pSidOwner,      // Ownership information.
+                           &p->pSidGroup,      // Group membership.
+                           &p->pDacl,          // Discretionary information.
+                           &p->pSacl,          // For auditing purposes.
+                           &p->pSecurityDescriptor);
+               if (err == ERROR_ACCESS_DENIED ||
+                       err == ERROR_PRIVILEGE_NOT_HELD)
+               {
+                   /* Retrieve only DACL. */
+                   (void)pGetNamedSecurityInfo(
+                           (LPSTR)fname,
+                           SE_FILE_OBJECT,
+                           DACL_SECURITY_INFORMATION,
+                           NULL,
+                           NULL,
+                           &p->pDacl,
+                           NULL,
+                           &p->pSecurityDescriptor);
+               }
+               if (p->pSecurityDescriptor == NULL)
+               {
+                   mch_free_acl((vim_acl_T)p);
+                   p = NULL;
+               }
            }
        }
     }
@@ -2784,6 +3248,29 @@ mch_get_acl(char_u *fname)
 #endif
 }
 
+#ifdef HAVE_ACL
+/*
+ * Check if "acl" contains inherited ACE.
+ */
+    static BOOL
+is_acl_inherited(PACL acl)
+{
+    DWORD   i;
+    ACL_SIZE_INFORMATION    acl_info;
+    PACCESS_ALLOWED_ACE            ace;
+
+    acl_info.AceCount = 0;
+    GetAclInformation(acl, &acl_info, sizeof(acl_info), AclSizeInformation);
+    for (i = 0; i < acl_info.AceCount; i++)
+    {
+       GetAce(acl, i, (LPVOID *)&ace);
+       if (ace->Header.AceFlags & INHERITED_ACE)
+           return TRUE;
+    }
+    return FALSE;
+}
+#endif
+
 /*
  * Set the ACL of file "fname" to "acl" (unless it's NULL).
  * Errors are ignored.
@@ -2794,21 +3281,61 @@ mch_set_acl(char_u *fname, vim_acl_T acl)
 {
 #ifdef HAVE_ACL
     struct my_acl   *p = (struct my_acl *)acl;
+    SECURITY_INFORMATION    sec_info = 0;
 
     if (p != NULL && advapi_lib != NULL)
-       (void)pSetNamedSecurityInfo(
-                   (LPTSTR)fname,              // Abstract filename
-                   SE_FILE_OBJECT,             // File Object
-                   // Retrieve the entire security descriptor.
-                   OWNER_SECURITY_INFORMATION |
-                       GROUP_SECURITY_INFORMATION |
-                       DACL_SECURITY_INFORMATION |
-                       SACL_SECURITY_INFORMATION,
-                   p->pSidOwner,               // Ownership information.
-                   p->pSidGroup,               // Group membership.
-                   p->pDacl,                   // Discretionary information.
-                   p->pSacl                    // For auditing purposes.
-                   );
+    {
+# ifdef FEAT_MBYTE
+       WCHAR   *wn = NULL;
+# endif
+
+       /* Set security flags */
+       if (p->pSidOwner)
+           sec_info |= OWNER_SECURITY_INFORMATION;
+       if (p->pSidGroup)
+           sec_info |= GROUP_SECURITY_INFORMATION;
+       if (p->pDacl)
+       {
+           sec_info |= DACL_SECURITY_INFORMATION;
+           /* Do not inherit its parent's DACL.
+            * If the DACL is inherited, Cygwin permissions would be changed.
+            */
+           if (!is_acl_inherited(p->pDacl))
+               sec_info |= PROTECTED_DACL_SECURITY_INFORMATION;
+       }
+       if (p->pSacl)
+           sec_info |= SACL_SECURITY_INFORMATION;
+
+# ifdef FEAT_MBYTE
+       if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+           wn = enc_to_utf16(fname, NULL);
+       if (wn != NULL)
+       {
+           (void)pSetNamedSecurityInfoW(
+                       wn,                     // Abstract filename
+                       SE_FILE_OBJECT,         // File Object
+                       sec_info,
+                       p->pSidOwner,           // Ownership information.
+                       p->pSidGroup,           // Group membership.
+                       p->pDacl,               // Discretionary information.
+                       p->pSacl                // For auditing purposes.
+                       );
+           vim_free(wn);
+       }
+       else
+# endif
+       {
+           (void)pSetNamedSecurityInfo(
+                       (LPSTR)fname,           // Abstract filename
+                       SE_FILE_OBJECT,         // File Object
+                       sec_info,
+                       p->pSidOwner,           // Ownership information.
+                       p->pSidGroup,           // Group membership.
+                       p->pDacl,               // Discretionary information.
+                       p->pSacl                // For auditing purposes.
+                       );
+       }
+    }
 #endif
 }
 
@@ -3104,7 +3631,7 @@ mch_set_winsize_now(void)
  *    4. Prompt the user to press a key to close the console window
  */
     static int
-mch_system(char *cmd, int options)
+mch_system_classic(char *cmd, int options)
 {
     STARTUPINFO                si;
     PROCESS_INFORMATION pi;
@@ -3120,9 +3647,10 @@ mch_system(char *cmd, int options)
      * It's nicer to run a filter command in a minimized window, but in
      * Windows 95 this makes the command MUCH slower.  We can't do it under
      * Win32s either as it stops the synchronous spawn workaround working.
+     * Don't activate the window to keep focus on Vim.
      */
     if ((options & SHELL_DOOUT) && !mch_windows95() && !gui_is_win32s())
-       si.wShowWindow = SW_SHOWMINIMIZED;
+       si.wShowWindow = SW_SHOWMINNOACTIVE;
     else
        si.wShowWindow = SW_SHOWNORMAL;
     si.cbReserved2 = 0;
@@ -3160,10 +3688,12 @@ mch_system(char *cmd, int options)
        {
            MSG msg;
 
-           if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
+           if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
            {
                TranslateMessage(&msg);
-               DispatchMessage(&msg);
+               pDispatchMessage(&msg);
+               delay = 1;
+               continue;
            }
            if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
                break;
@@ -3208,6 +3738,506 @@ mch_system(char *cmd, int options)
 
     return ret;
 }
+
+/*
+ * Thread launched by the gui to send the current buffer data to the
+ * process. This way avoid to hang up vim totally if the children
+ * process take a long time to process the lines.
+ */
+    static DWORD WINAPI
+sub_process_writer(LPVOID param)
+{
+    HANDLE         g_hChildStd_IN_Wr = param;
+    linenr_T       lnum = curbuf->b_op_start.lnum;
+    DWORD          len = 0;
+    DWORD          l;
+    char_u         *lp = ml_get(lnum);
+    char_u         *s;
+    int                    written = 0;
+
+    for (;;)
+    {
+       l = (DWORD)STRLEN(lp + written);
+       if (l == 0)
+           len = 0;
+       else if (lp[written] == NL)
+       {
+           /* NL -> NUL translation */
+           WriteFile(g_hChildStd_IN_Wr, "", 1, &len, NULL);
+       }
+       else
+       {
+           s = vim_strchr(lp + written, NL);
+           WriteFile(g_hChildStd_IN_Wr, (char *)lp + written,
+                     s == NULL ? l : (DWORD)(s - (lp + written)),
+                     &len, NULL);
+       }
+       if (len == (int)l)
+       {
+           /* Finished a line, add a NL, unless this line should not have
+            * one. */
+           if (lnum != curbuf->b_op_end.lnum
+               || !curbuf->b_p_bin
+               || (lnum != curbuf->b_no_eol_lnum
+                   && (lnum != curbuf->b_ml.ml_line_count
+                       || curbuf->b_p_eol)))
+           {
+               WriteFile(g_hChildStd_IN_Wr, "\n", 1, (LPDWORD)&ignored, NULL);
+           }
+
+           ++lnum;
+           if (lnum > curbuf->b_op_end.lnum)
+               break;
+
+           lp = ml_get(lnum);
+           written = 0;
+       }
+       else if (len > 0)
+           written += len;
+    }
+
+    /* finished all the lines, close pipe */
+    CloseHandle(g_hChildStd_IN_Wr);
+    ExitThread(0);
+}
+
+
+# define BUFLEN 100    /* length for buffer, stolen from unix version */
+
+/*
+ * This function read from the children's stdout and write the
+ * data on screen or in the buffer accordingly.
+ */
+    static void
+dump_pipe(int      options,
+         HANDLE    g_hChildStd_OUT_Rd,
+         garray_T  *ga,
+         char_u    buffer[],
+         DWORD     *buffer_off)
+{
+    DWORD      availableBytes = 0;
+    DWORD      i;
+    int                ret;
+    DWORD      len;
+    DWORD      toRead;
+    int                repeatCount;
+
+    /* we query the pipe to see if there is any data to read
+     * to avoid to perform a blocking read */
+    ret = PeekNamedPipe(g_hChildStd_OUT_Rd, /* pipe to query */
+                       NULL,               /* optional buffer */
+                       0,                  /* buffer size */
+                       NULL,               /* number of read bytes */
+                       &availableBytes,    /* available bytes total */
+                       NULL);              /* byteLeft */
+
+    repeatCount = 0;
+    /* We got real data in the pipe, read it */
+    while (ret != 0 && availableBytes > 0)
+    {
+       repeatCount++;
+       toRead =
+# ifdef FEAT_MBYTE
+                (DWORD)(BUFLEN - *buffer_off);
+# else
+                (DWORD)BUFLEN;
+# endif
+       toRead = availableBytes < toRead ? availableBytes : toRead;
+       ReadFile(g_hChildStd_OUT_Rd, buffer
+# ifdef FEAT_MBYTE
+                + *buffer_off, toRead
+# else
+                , toRead
+# endif
+                , &len, NULL);
+
+       /* If we haven't read anything, there is a problem */
+       if (len == 0)
+           break;
+
+       availableBytes -= len;
+
+       if (options & SHELL_READ)
+       {
+           /* Do NUL -> NL translation, append NL separated
+            * lines to the current buffer. */
+           for (i = 0; i < len; ++i)
+           {
+               if (buffer[i] == NL)
+                   append_ga_line(ga);
+               else if (buffer[i] == NUL)
+                   ga_append(ga, NL);
+               else
+                   ga_append(ga, buffer[i]);
+           }
+       }
+# ifdef FEAT_MBYTE
+       else if (has_mbyte)
+       {
+           int         l;
+           int         c;
+           char_u      *p;
+
+           len += *buffer_off;
+           buffer[len] = NUL;
+
+           /* Check if the last character in buffer[] is
+            * incomplete, keep these bytes for the next
+            * round. */
+           for (p = buffer; p < buffer + len; p += l)
+           {
+               l = mb_cptr2len(p);
+               if (l == 0)
+                   l = 1;  /* NUL byte? */
+               else if (MB_BYTE2LEN(*p) != l)
+                   break;
+           }
+           if (p == buffer)    /* no complete character */
+           {
+               /* avoid getting stuck at an illegal byte */
+               if (len >= 12)
+                   ++p;
+               else
+               {
+                   *buffer_off = len;
+                   return;
+               }
+           }
+           c = *p;
+           *p = NUL;
+           msg_puts(buffer);
+           if (p < buffer + len)
+           {
+               *p = c;
+               *buffer_off = (DWORD)((buffer + len) - p);
+               mch_memmove(buffer, p, *buffer_off);
+               return;
+           }
+           *buffer_off = 0;
+       }
+# endif /* FEAT_MBYTE */
+       else
+       {
+           buffer[len] = NUL;
+           msg_puts(buffer);
+       }
+
+       windgoto(msg_row, msg_col);
+       cursor_on();
+       out_flush();
+    }
+}
+
+/*
+ * Version of system to use for windows NT > 5.0 (Win2K), use pipe
+ * for communication and doesn't open any new window.
+ */
+    static int
+mch_system_piped(char *cmd, int options)
+{
+    STARTUPINFO                si;
+    PROCESS_INFORMATION pi;
+    DWORD              ret = 0;
+
+    HANDLE g_hChildStd_IN_Rd = NULL;
+    HANDLE g_hChildStd_IN_Wr = NULL;
+    HANDLE g_hChildStd_OUT_Rd = NULL;
+    HANDLE g_hChildStd_OUT_Wr = NULL;
+
+    char_u     buffer[BUFLEN + 1]; /* reading buffer + size */
+    DWORD      len;
+
+    /* buffer used to receive keys */
+    char_u     ta_buf[BUFLEN + 1];     /* TypeAHead */
+    int                ta_len = 0;             /* valid bytes in ta_buf[] */
+
+    DWORD      i;
+    int                c;
+    int                noread_cnt = 0;
+    garray_T   ga;
+    int            delay = 1;
+    DWORD      buffer_off = 0; /* valid bytes in buffer[] */
+    char       *p = NULL;
+
+    SECURITY_ATTRIBUTES saAttr;
+
+    /* Set the bInheritHandle flag so pipe handles are inherited. */
+    saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
+    saAttr.bInheritHandle = TRUE;
+    saAttr.lpSecurityDescriptor = NULL;
+
+    if ( ! CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0)
+       /* Ensure the read handle to the pipe for STDOUT is not inherited. */
+       || ! pSetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0)
+       /* Create a pipe for the child process's STDIN. */
+       || ! CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0)
+       /* Ensure the write handle to the pipe for STDIN is not inherited. */
+       || ! pSetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0) )
+    {
+       CloseHandle(g_hChildStd_IN_Rd);
+       CloseHandle(g_hChildStd_IN_Wr);
+       CloseHandle(g_hChildStd_OUT_Rd);
+       CloseHandle(g_hChildStd_OUT_Wr);
+       MSG_PUTS(_("\nCannot create pipes\n"));
+    }
+
+    si.cb = sizeof(si);
+    si.lpReserved = NULL;
+    si.lpDesktop = NULL;
+    si.lpTitle = NULL;
+    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
+
+    /* set-up our file redirection */
+    si.hStdError = g_hChildStd_OUT_Wr;
+    si.hStdOutput = g_hChildStd_OUT_Wr;
+    si.hStdInput = g_hChildStd_IN_Rd;
+    si.wShowWindow = SW_HIDE;
+    si.cbReserved2 = 0;
+    si.lpReserved2 = NULL;
+
+    if (options & SHELL_READ)
+       ga_init2(&ga, 1, BUFLEN);
+
+    if (cmd != NULL)
+    {
+       p = (char *)vim_strsave((char_u *)cmd);
+       if (p != NULL)
+           unescape_shellxquote((char_u *)p, p_sxe);
+       else
+           p = cmd;
+    }
+
+    /* Now, run the command */
+    CreateProcess(NULL,                        /* Executable name */
+                 p,                    /* Command to execute */
+                 NULL,                 /* Process security attributes */
+                 NULL,                 /* Thread security attributes */
+
+                 // this command can be litigious, handle inheritance was
+                 // deactivated for pending temp file, but, if we deactivate
+                 // it, the pipes don't work for some reason.
+                 TRUE,                 /* Inherit handles, first deactivated,
+                                        * but needed */
+                 CREATE_DEFAULT_ERROR_MODE, /* Creation flags */
+                 NULL,                 /* Environment */
+                 NULL,                 /* Current directory */
+                 &si,                  /* Startup information */
+                 &pi);                 /* Process information */
+
+    if (p != cmd)
+       vim_free(p);
+
+    /* Close our unused side of the pipes */
+    CloseHandle(g_hChildStd_IN_Rd);
+    CloseHandle(g_hChildStd_OUT_Wr);
+
+    if (options & SHELL_WRITE)
+    {
+       HANDLE thread =
+          CreateThread(NULL,  /* security attributes */
+                       0,     /* default stack size */
+                       sub_process_writer, /* function to be executed */
+                       g_hChildStd_IN_Wr,  /* parameter */
+                       0,               /* creation flag, start immediately */
+                       NULL);              /* we don't care about thread id */
+       CloseHandle(thread);
+       g_hChildStd_IN_Wr = NULL;
+    }
+
+    /* Keep updating the window while waiting for the shell to finish. */
+    for (;;)
+    {
+       MSG     msg;
+
+       if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
+       {
+           TranslateMessage(&msg);
+           DispatchMessage(&msg);
+       }
+
+       /* write pipe information in the window */
+       if ((options & (SHELL_READ|SHELL_WRITE))
+# ifdef FEAT_GUI
+               || gui.in_use
+# endif
+           )
+       {
+           len = 0;
+           if (!(options & SHELL_EXPAND)
+               && ((options &
+                       (SHELL_READ|SHELL_WRITE|SHELL_COOKED))
+                   != (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
+# ifdef FEAT_GUI
+                   || gui.in_use
+# endif
+                   )
+               && (ta_len > 0 || noread_cnt > 4))
+           {
+               if (ta_len == 0)
+               {
+                   /* Get extra characters when we don't have any.  Reset the
+                    * counter and timer. */
+                   noread_cnt = 0;
+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
+                   gettimeofday(&start_tv, NULL);
+# endif
+                   len = ui_inchar(ta_buf, BUFLEN, 10L, 0);
+               }
+               if (ta_len > 0 || len > 0)
+               {
+                   /*
+                    * For pipes: Check for CTRL-C: send interrupt signal to
+                    * child.  Check for CTRL-D: EOF, close pipe to child.
+                    */
+                   if (len == 1 && cmd != NULL)
+                   {
+                       if (ta_buf[ta_len] == Ctrl_C)
+                       {
+                           /* Learn what exit code is expected, for
+                               * now put 9 as SIGKILL */
+                           TerminateProcess(pi.hProcess, 9);
+                       }
+                       if (ta_buf[ta_len] == Ctrl_D)
+                       {
+                           CloseHandle(g_hChildStd_IN_Wr);
+                           g_hChildStd_IN_Wr = NULL;
+                       }
+                   }
+
+                   /* replace K_BS by <BS> and K_DEL by <DEL> */
+                   for (i = ta_len; i < ta_len + len; ++i)
+                   {
+                       if (ta_buf[i] == CSI && len - i > 2)
+                       {
+                           c = TERMCAP2KEY(ta_buf[i + 1], ta_buf[i + 2]);
+                           if (c == K_DEL || c == K_KDEL || c == K_BS)
+                           {
+                               mch_memmove(ta_buf + i + 1, ta_buf + i + 3,
+                                           (size_t)(len - i - 2));
+                               if (c == K_DEL || c == K_KDEL)
+                                   ta_buf[i] = DEL;
+                               else
+                                   ta_buf[i] = Ctrl_H;
+                               len -= 2;
+                           }
+                       }
+                       else if (ta_buf[i] == '\r')
+                           ta_buf[i] = '\n';
+# ifdef FEAT_MBYTE
+                       if (has_mbyte)
+                           i += (*mb_ptr2len_len)(ta_buf + i,
+                                                   ta_len + len - i) - 1;
+# endif
+                   }
+
+                   /*
+                    * For pipes: echo the typed characters.  For a pty this
+                    * does not seem to work.
+                    */
+                   for (i = ta_len; i < ta_len + len; ++i)
+                   {
+                       if (ta_buf[i] == '\n' || ta_buf[i] == '\b')
+                           msg_putchar(ta_buf[i]);
+# ifdef FEAT_MBYTE
+                       else if (has_mbyte)
+                       {
+                           int l = (*mb_ptr2len)(ta_buf + i);
+
+                           msg_outtrans_len(ta_buf + i, l);
+                           i += l - 1;
+                       }
+# endif
+                       else
+                           msg_outtrans_len(ta_buf + i, 1);
+                   }
+                   windgoto(msg_row, msg_col);
+                   out_flush();
+
+                   ta_len += len;
+
+                   /*
+                    * Write the characters to the child, unless EOF has been
+                    * typed for pipes.  Write one character at a time, to
+                    * avoid losing too much typeahead.  When writing buffer
+                    * lines, drop the typed characters (only check for
+                    * CTRL-C).
+                    */
+                   if (options & SHELL_WRITE)
+                       ta_len = 0;
+                   else if (g_hChildStd_IN_Wr != NULL)
+                   {
+                       WriteFile(g_hChildStd_IN_Wr, (char*)ta_buf,
+                                   1, &len, NULL);
+                       // if we are typing in, we want to keep things reactive
+                       delay = 1;
+                       if (len > 0)
+                       {
+                           ta_len -= len;
+                           mch_memmove(ta_buf, ta_buf + len, ta_len);
+                       }
+                   }
+               }
+           }
+       }
+
+       if (ta_len)
+           ui_inchar_undo(ta_buf, ta_len);
+
+       if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+       {
+           dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
+           break;
+       }
+
+       ++noread_cnt;
+       dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
+
+       /* We start waiting for a very short time and then increase it, so
+        * that we respond quickly when the process is quick, and don't
+        * consume too much overhead when it's slow. */
+       if (delay < 50)
+           delay += 10;
+    }
+
+    /* Close the pipe */
+    CloseHandle(g_hChildStd_OUT_Rd);
+    if (g_hChildStd_IN_Wr != NULL)
+       CloseHandle(g_hChildStd_IN_Wr);
+
+    WaitForSingleObject(pi.hProcess, INFINITE);
+
+    /* Get the command exit code */
+    GetExitCodeProcess(pi.hProcess, &ret);
+
+    if (options & SHELL_READ)
+    {
+       if (ga.ga_len > 0)
+       {
+           append_ga_line(&ga);
+           /* remember that the NL was missing */
+           curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
+       }
+       else
+           curbuf->b_no_eol_lnum = 0;
+       ga_clear(&ga);
+    }
+
+    /* Close the handles to the subprocess, so that it goes away */
+    CloseHandle(pi.hThread);
+    CloseHandle(pi.hProcess);
+
+    return ret;
+}
+
+    static int
+mch_system(char *cmd, int options)
+{
+    /* if we can pipe and the shelltemp option is off */
+    if (allowPiping && !p_stmp)
+       return mch_system_piped(cmd, options);
+    else
+       return mch_system_classic(cmd, options);
+}
 #else
 
 # define mch_system(c, o) system(c)
@@ -3278,84 +4308,147 @@ mch_call_shell(
     else
     {
        /* we use "command" or "cmd" to start the shell; slow but easy */
-       char_u *newcmd;
-       long_u cmdlen =  (
-#ifdef FEAT_GUI_W32
-               STRLEN(vimrun_path) +
-#endif
-               STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+       char_u  *newcmd = NULL;
+       char_u  *cmdbase = cmd;
+       long_u  cmdlen;
 
-       newcmd = lalloc(cmdlen, TRUE);
-       if (newcmd != NULL)
+       /* Skip a leading ", ( and "(. */
+       if (*cmdbase == '"' )
+           ++cmdbase;
+       if (*cmdbase == '(')
+           ++cmdbase;
+
+       if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
        {
-           char_u *cmdbase = (*cmd == '"' ? cmd + 1 : cmd);
+           STARTUPINFO         si;
+           PROCESS_INFORMATION pi;
+           DWORD               flags = CREATE_NEW_CONSOLE;
+           char_u              *p;
+
+           si.cb = sizeof(si);
+           si.lpReserved = NULL;
+           si.lpDesktop = NULL;
+           si.lpTitle = NULL;
+           si.dwFlags = 0;
+           si.cbReserved2 = 0;
+           si.lpReserved2 = NULL;
+
+           cmdbase = skipwhite(cmdbase + 5);
+           if ((STRNICMP(cmdbase, "/min", 4) == 0)
+                   && vim_iswhite(cmdbase[4]))
+           {
+               cmdbase = skipwhite(cmdbase + 4);
+               si.dwFlags = STARTF_USESHOWWINDOW;
+               si.wShowWindow = SW_SHOWMINNOACTIVE;
+           }
+           else if ((STRNICMP(cmdbase, "/b", 2) == 0)
+                   && vim_iswhite(cmdbase[2]))
+           {
+               cmdbase = skipwhite(cmdbase + 2);
+               flags = CREATE_NO_WINDOW;
+               si.dwFlags = STARTF_USESTDHANDLES;
+               si.hStdInput = CreateFile("\\\\.\\NUL", // File name
+                   GENERIC_READ,                       // Access flags
+                   0,                                  // Share flags
+                   NULL,                               // Security att.
+                   OPEN_EXISTING,                      // Open flags
+                   FILE_ATTRIBUTE_NORMAL,              // File att.
+                   NULL);                              // Temp file
+               si.hStdOutput = si.hStdInput;
+               si.hStdError = si.hStdInput;
+           }
 
-           if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+           /* Remove a trailing ", ) and )" if they have a match
+            * at the start of the command. */
+           if (cmdbase > cmd)
            {
-               STARTUPINFO             si;
-               PROCESS_INFORMATION     pi;
-
-               si.cb = sizeof(si);
-               si.lpReserved = NULL;
-               si.lpDesktop = NULL;
-               si.lpTitle = NULL;
-               si.dwFlags = 0;
-               si.cbReserved2 = 0;
-               si.lpReserved2 = NULL;
-
-               cmdbase = skipwhite(cmdbase + 5);
-               if ((STRNICMP(cmdbase, "/min", 4) == 0)
-                       && vim_iswhite(cmdbase[4]))
-               {
-                   cmdbase = skipwhite(cmdbase + 4);
-                   si.dwFlags = STARTF_USESHOWWINDOW;
-                   si.wShowWindow = SW_SHOWMINNOACTIVE;
-               }
+               p = cmdbase + STRLEN(cmdbase);
+               if (p > cmdbase && p[-1] == '"' && *cmd == '"')
+                   *--p = NUL;
+               if (p > cmdbase && p[-1] == ')'
+                       && (*cmd =='(' || cmd[1] == '('))
+                   *--p = NUL;
+           }
 
-               /* When the command is in double quotes, but 'shellxquote' is
-                * empty, keep the double quotes around the command.
-                * Otherwise remove the double quotes, they aren't needed
-                * here, because we don't use a shell to run the command. */
-               if (*cmd == '"' && *p_sxq == NUL)
-               {
-                   newcmd[0] = '"';
-                   STRCPY(newcmd + 1, cmdbase);
-               }
-               else
+           newcmd = cmdbase;
+           unescape_shellxquote(cmdbase, p_sxe);
+
+           /*
+            * If creating new console, arguments are passed to the
+            * 'cmd.exe' as-is. If it's not, arguments are not treated
+            * correctly for current 'cmd.exe'. So unescape characters in
+            * shellxescape except '|' for avoiding to be treated as
+            * argument to them. Pass the arguments to sub-shell.
+            */
+           if (flags != CREATE_NEW_CONSOLE)
+           {
+               char_u  *subcmd;
+               char_u  *cmd_shell = mch_getenv("COMSPEC");
+
+               if (cmd_shell == NULL || *cmd_shell == NUL)
+                   cmd_shell = default_shell();
+
+               subcmd = vim_strsave_escaped_ext(cmdbase, "|", '^', FALSE);
+               if (subcmd != NULL)
                {
-                   STRCPY(newcmd, cmdbase);
-                   if (*cmd == '"' && *newcmd != NUL)
-                       newcmd[STRLEN(newcmd) - 1] = NUL;
+                   /* make "cmd.exe /c arguments" */
+                   cmdlen = STRLEN(cmd_shell) + STRLEN(subcmd) + 5;
+                   newcmd = lalloc(cmdlen, TRUE);
+                   if (newcmd != NULL)
+                       vim_snprintf((char *)newcmd, cmdlen, "%s /c %s",
+                                                      cmd_shell, subcmd);
+                   else
+                       newcmd = cmdbase;
+                   vim_free(subcmd);
                }
+           }
 
-               /*
-                * Now, start the command as a process, so that it doesn't
-                * inherit our handles which causes unpleasant dangling swap
-                * files if we exit before the spawned process
-                */
-               if (CreateProcess (NULL,        // Executable name
-                       newcmd,                 // Command to execute
-                       NULL,                   // Process security attributes
-                       NULL,                   // Thread security attributes
-                       FALSE,                  // Inherit handles
-                       CREATE_NEW_CONSOLE,     // Creation flags
-                       NULL,                   // Environment
-                       NULL,                   // Current directory
-                       &si,                    // Startup information
-                       &pi))                   // Process information
-                   x = 0;
-               else
-               {
-                   x = -1;
+           /*
+            * Now, start the command as a process, so that it doesn't
+            * inherit our handles which causes unpleasant dangling swap
+            * files if we exit before the spawned process
+            */
+           if (CreateProcess(NULL,             // Executable name
+                   newcmd,                     // Command to execute
+                   NULL,                       // Process security attributes
+                   NULL,                       // Thread security attributes
+                   FALSE,                      // Inherit handles
+                   flags,                      // Creation flags
+                   NULL,                       // Environment
+                   NULL,                       // Current directory
+                   &si,                        // Startup information
+                   &pi))                       // Process information
+               x = 0;
+           else
+           {
+               x = -1;
 #ifdef FEAT_GUI_W32
-                   EMSG(_("E371: Command not found"));
+               EMSG(_("E371: Command not found"));
 #endif
-               }
-               /* Close the handles to the subprocess, so that it goes away */
-               CloseHandle(pi.hThread);
-               CloseHandle(pi.hProcess);
            }
-           else
+
+           if (newcmd != cmdbase)
+               vim_free(newcmd);
+
+           if (si.hStdInput != NULL)
+           {
+               /* Close the handle to \\.\NUL */
+               CloseHandle(si.hStdInput);
+           }
+           /* Close the handles to the subprocess, so that it goes away */
+           CloseHandle(pi.hThread);
+           CloseHandle(pi.hProcess);
+       }
+       else
+       {
+           cmdlen = (
+#ifdef FEAT_GUI_W32
+               (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+#endif
+               STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+
+           newcmd = lalloc(cmdlen, TRUE);
+           if (newcmd != NULL)
            {
 #if defined(FEAT_GUI_W32)
                if (need_vimrun_warning)
@@ -3368,7 +4461,7 @@ mch_call_shell(
                            MB_ICONWARNING);
                    need_vimrun_warning = FALSE;
                }
-               if (!s_dont_use_vimrun)
+               if (!s_dont_use_vimrun && (!allowPiping || p_stmp))
                    /* Use vimrun to execute the command.  It opens a console
                     * window, which can be closed without killing Vim. */
                    vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
@@ -3381,8 +4474,8 @@ mch_call_shell(
                    vim_snprintf((char *)newcmd, cmdlen, "%s %s %s",
                                                           p_sh, p_shcf, cmd);
                x = mch_system((char *)newcmd, options);
+               vim_free(newcmd);
            }
-           vim_free(newcmd);
        }
     }
 
@@ -3392,7 +4485,8 @@ mch_call_shell(
     /* Print the return value, unless "vimrun" was used. */
     if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
 #if defined(FEAT_GUI_W32)
-               && ((options & SHELL_DOOUT) || s_dont_use_vimrun)
+               && ((options & SHELL_DOOUT) || s_dont_use_vimrun
+                                                 || (allowPiping && !p_stmp))
 #endif
            )
     {
@@ -4236,13 +5330,16 @@ mch_remove(char_u *name)
 #ifdef FEAT_MBYTE
     WCHAR      *wn = NULL;
     int                n;
+#endif
+
+    win32_setattrs(name, FILE_ATTRIBUTE_NORMAL);
 
+#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
        wn = enc_to_utf16(name, NULL);
        if (wn != NULL)
        {
-           SetFileAttributesW(wn, FILE_ATTRIBUTE_NORMAL);
            n = DeleteFileW(wn) ? 0 : -1;
            vim_free(wn);
            if (n == 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
@@ -4251,7 +5348,6 @@ mch_remove(char_u *name)
        }
     }
 #endif
-    SetFileAttributes(name, FILE_ATTRIBUTE_NORMAL);
     return DeleteFile(name) ? 0 : -1;
 }
 
@@ -4272,21 +5368,6 @@ mch_breakcheck(void)
 }
 
 
-/*
- * How much memory is available?
- * Return sum of available physical and page file memory.
- */
-/*ARGSUSED*/
-    long_u
-mch_avail_mem(int special)
-{
-    MEMORYSTATUS       ms;
-
-    ms.dwLength = sizeof(MEMORYSTATUS);
-    GlobalMemoryStatus(&ms);
-    return (long_u) (ms.dwAvailPhys + ms.dwAvailPageFile);
-}
-
 #ifdef FEAT_MBYTE
 /*
  * Same code as below, but with wide functions and no comments.
index 527d8c7..58b179f 100644 (file)
 
 #include "os_dos.h"            /* common MS-DOS and Win32 stuff */
 #ifndef __CYGWIN__
-#include <direct.h>            /* for _mkdir() */
+/* cproto fails on missing include files */
+# ifndef PROTO
+#  include <direct.h>          /* for _mkdir() */
+# endif
 #endif
 
 /* Stop the VC2005 compiler from nagging. */
 
 #define FEAT_SHORTCUT          /* resolve shortcuts */
 
-#if !defined(__MINGW32__) \
-       && !defined(__CYGWIN__) \
-       && (!defined(__BORLANDC__) || __BORLANDC__ >= 0x550) \
+#if (!defined(__BORLANDC__) || __BORLANDC__ >= 0x550) \
        && (!defined(_MSC_VER) || _MSC_VER > 1020)
 /*
  * Access Control List (actually security info).
- * Mingw and Cygwin don't have the acl stuff.
- * Borland only in version 5.5 and later.
+ * Borland has the acl stuff only in version 5.5 and later.
  * MSVC in 5.0, not in 4.2, don't know about 4.3.
  */
 # define HAVE_ACL
@@ -77,7 +77,6 @@
 #ifndef FEAT_GUI_W32           /* GUI works different */
 # define BREAKCHECK_SKIP    1  /* call mch_breakcheck() each time, it's fast */
 #endif
-#define HAVE_AVAIL_MEM
 
 #define HAVE_PUTENV            /* at least Bcc 5.2 and MSC have it */
 
 #ifndef COBJMACROS
 # define COBJMACROS    /* For OLE: Enable "friendlier" access to objects */
 #endif
-#include <windows.h>
+#ifndef PROTO
+# include <windows.h>
+# ifndef SM_CXPADDEDBORDER
+#  define SM_CXPADDEDBORDER     92
+# endif
+#endif
 
 /*
  * Win32 has plenty of memory, use large buffers
  */
 #define CMDBUFFSIZE 1024       /* size of the command processing buffer */
 
-/* _MAX_PATH is only 256 (stdlib.h), but we want more for the 'path' option,
+/* _MAX_PATH is only 260 (stdlib.h), but we want more for the 'path' option,
  * thus use a larger number. */
 #define MAXPATHL       1024
 
@@ -191,5 +195,23 @@ Trace(char *pszFormat, ...);
 #ifdef __BORLANDC__
 # define vim_mkdir(x, y) mkdir(x)
 #else
-# define vim_mkdir(x, y) _mkdir(x)
+# define vim_mkdir(x, y) mch_mkdir(x)
+#endif
+
+#ifndef PROTO
+
+/* Enable common dialogs input unicode from IME if possible. */
+#ifdef FEAT_MBYTE
+    /* The variables are defined in os_win32.c. */
+extern LRESULT (WINAPI *pDispatchMessage)(CONST MSG *);
+extern BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT);
+extern BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG);
+extern BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT);
+#else
+# define pDispatchMessage DispatchMessage
+# define pGetMessage GetMessage
+# define pIsDialogMessage IsDialogMessage
+# define pPeekMessage PeekMessage
 #endif
+
+#endif /* PROTO */
index 79f7c63..7f5df53 100644 (file)
@@ -20,6 +20,7 @@ LANGUAGES = \
                ko \
                ko.UTF-8 \
                nb \
+               nl \
                no \
                pl \
                pt_BR \
@@ -33,6 +34,17 @@ LANGUAGES = \
                zh_TW \
                zh_TW.UTF-8
 
+CONVERTED = \
+               cs.cp1250 \
+               ja.sjis \
+               ja.euc-jp \
+               pl.cp1250 \
+               pl.UTF-8 \
+               ru.cp1251 \
+               sk.cp1250 \
+               uk.cp1251 \
+               zh_CN.cp936
+
 MOFILES = \
                af.mo \
                ca.mo \
@@ -49,6 +61,7 @@ MOFILES = \
                ko.mo \
                ko.UTF-8.mo \
                nb.mo \
+               nl.mo \
                no.mo \
                pl.mo \
                pt_BR.mo \
@@ -62,9 +75,10 @@ MOFILES = \
                zh_TW.UTF-8.mo \
                zh_TW.mo
 
-CONVERTED = \
+MOCONVERTED = \
                cs.cp1250.mo \
                ja.sjis.mo \
+               ja.euc-jp.mo \
                pl.cp1250.mo \
                pl.UTF-8.mo \
                ru.cp1251.mo \
@@ -88,6 +102,7 @@ CHECKFILES = \
                ko.ck \
                ko.UTF-8.ck \
                nb.ck \
+               nl.ck \
                no.ck \
                pl.ck \
                pt_BR.ck \
@@ -102,6 +117,7 @@ CHECKFILES = \
                zh_TW.ck \
                cs.cp1250.ck \
                ja.sjis.ck \
+               ja.euc-jp.ck \
                pl.cp1250.ck \
                pl.UTF-8.ck \
                ru.cp1251.ck \
@@ -123,7 +139,7 @@ MSGMERGE = OLD_PO_FILE_INPUT=yes OLD_PO_FILE_OUTPUT=yes msgmerge
 
 .SUFFIXES:
 .SUFFIXES: .po .mo .pot .ck
-.PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES)
+.PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES) $(CONVERTED)
 
 .po.mo:
        $(MSGFMT) -o $@ $<
@@ -132,13 +148,13 @@ MSGMERGE = OLD_PO_FILE_INPUT=yes OLD_PO_FILE_OUTPUT=yes msgmerge
        $(VIM) -u NONE -e -X -S check.vim -c "if error == 0 | q | endif" -c cq $<
        touch $@
 
-all: $(MOFILES)
+all: $(MOFILES) $(MOCONVERTED)
 
 check: $(CHECKFILES)
 
-install: $(MOFILES)
+install: $(MOFILES) $(MOCONVERTED)
        @$(MAKE) prefixcheck
-       for lang in $(LANGUAGES); do \
+       for lang in $(LANGUAGES) $(CONVERTED); do \
          dir=$(LOCALEDIR)/$$lang/; \
          if test ! -x "$$dir"; then \
            mkdir $$dir; chmod 755 $$dir; \
@@ -155,13 +171,18 @@ install: $(MOFILES)
 
 uninstall:
        @$(MAKE) prefixcheck
-       for cat in $(MOFILES); do \
+       for cat in $(MOFILES) $(MOCONVERTED); do \
          cat=`basename $$cat`; \
          lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
          rm -f $(LOCALEDIR)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
        done
 
-converted: $(CONVERTED)
+converted: $(MOCONVERTED)
+
+# nl.po was added later, if it does not exist use a file with just a # in it
+# (an empty file doesn't work with old msgfmt).
+nl.po:
+       @( echo \# > nl.po )
 
 # Norwegian/Bokmal: "nb" is an alias for "no".
 # Copying the file is not efficient, but I don't know of another way to make
@@ -175,11 +196,15 @@ nb.po: no.po
 ja.sjis.po: ja.po
        @$(MAKE) sjiscorr
        rm -f ja.sjis.po
-       iconv -f euc-jp -t cp932 ja.po | ./sjiscorr > ja.sjis.po
+       iconv -f utf-8 -t cp932 ja.po | ./sjiscorr > ja.sjis.po
 
 sjiscorr: sjiscorr.c
        $(CC) -o sjiscorr sjiscorr.c
 
+ja.euc-jp.po: ja.po
+       iconv -f utf-8 -t euc-jp ja.po | \
+               sed -e 's/charset=utf-8/charset=euc-jp/' -e 's/# Original translations/# Generated from ja.po, DO NOT EDIT/' > ja.euc-jp.po
+
 # Convert cs.po to create cs.cp1250.po.
 cs.cp1250.po: cs.po
        rm -f cs.cp1250.po
index d636ece..ae5b393 100644 (file)
@@ -65,8 +65,7 @@ language.
        make xx
 
     This will extract all the strings from Vim and merge them in with the
-    existing translations.  Requires the GNU gettext utilities.  Also requires
-    unpacking the extra archive.
+    existing translations.  Requires the GNU gettext utilities.
     Your original xx.po file will be copied to xx.po.orig
 
     -- After you do this, you MUST do the next three steps! --
@@ -107,3 +106,25 @@ language.
        make xx.mo
 
     Look out for syntax errors and fix them.
+
+
+USING GETTEXT WITHOUT ICONV
+
+When using gettext which doesn't support iconv, the encoding of the .mo file
+must match your active encoding.  For that you must convert and change
+encoding of *.po file in advance of generating the *.mo file.  For example, to
+convert ja.po to EUC-JP (supposed as your system encoding):
+
+(1) Convert the file encoding:
+
+       mv ja.po ja.po.orig
+       iconv -f utf-8 -t euc-jp ja.po.orig > ja.po
+
+(2) Rewrite charset declaration in the file:
+
+    Open ja.po find this line:
+       "Content-Type: text/plain; charset=utf-8\n"
+    You should change "charset" like this:
+       "Content-Type: text/plain; charset=euc-jp\n"
+
+There are examples in the Makefile for the conversions already supported.
index 56fd428..d73660b 100644 (file)
@@ -1768,19 +1768,6 @@ msgstr "Seleksie"
 msgid "Undo"
 msgstr "Herroep"
 
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Kan nie Zap font '%s' laai nie"
-
-msgid "E611: Can't use font %s"
-msgstr "E611: Kan nie font %s gebruik nie"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Besig om doodsboodskap aan kindproses te stuur.\n"
-
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Kan nie venster titel vind nie \"%s\""
 
@@ -3752,9 +3739,6 @@ msgstr "E244: Ongeldige karakterstelnaam \"%s\" in fontnaam \"%s\""
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Ongeldige karakter '%c' in fontnaam \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ongeldige 'osfiletype' opsie - gaan Text gebruik"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Dubbel sein, staak\n"
 
index 3e0b4b7..b397ae0 100644 (file)
@@ -1,6 +1,6 @@
 # Catalan messages for vim.
-# Copyright (C) 2003-2008 Ernest Adrogué <eadrogue@gmx.net>.
-# This file is distributed under the GNU General Public License.
+# Copyright (C) 2003-2012 Ernest Adrogué <eadrogue@gmx.net>.
+# This file is distributed under the Vim License.
 #
 msgid ""
 msgstr ""
@@ -13,8 +13,6 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Catalan\n"
-"X-Poedit-Country: SPAIN\n"
 
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: No s'ha pogut assignar memòria per cap buffer, sortint..."
@@ -2077,21 +2075,6 @@ msgid "&Undo"
 msgstr "&Desfés"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: No s'ha pogut carregar la fosa Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: No es pot utilitzar la fosa %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Enviant un missatge per finalitzar el procés fill.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: No s'ha trobat el títol de finestra \"%s\""
 
@@ -4282,9 +4265,6 @@ msgstr "E244: Conjunt de car
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Caràcter '%c' il·legal en el tipus \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: L'opció 'osfiletype' no Ã©s vàlida - s'usa Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: S'ha rebut un doble senyal, sortint\n"
 
index 0d331f8..6369af4 100644 (file)
@@ -1700,7 +1700,7 @@ msgid ""
 "&Load File"
 msgstr ""
 "&OK\n"
-"&Lese Datei"
+"&Lies Datei"
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
@@ -1977,21 +1977,6 @@ msgid "&Undo"
 msgstr "&Rückgängig"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zap-Schriftart '%s' kann nicht geladen werden"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Schriftart %s kann nicht verwendet werden"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Sende Nachricht zum Beenden des Kind-Prozesses.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Kann Fenstertitel \"%s\" nicht finden"
 
@@ -2769,16 +2754,16 @@ msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
 msgstr "-Z\t\t\tEingeschränkter Modus (wie \"rvim\")"
 
 msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tModifikatioen (beim Schreiben von Dateien) sind nicht erlaubt"
+msgstr "-m\t\t\tModifikationen (beim Schreiben von Dateien) sind nicht erlaubt"
 
 msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tModifikatioen im Text nicht erlaubt"
+msgstr "-M\t\t\tModifikationen im Text nicht erlaubt"
 
 msgid "-b\t\t\tBinary mode"
 msgstr "-b\t\t\tBinärmodus"
 
 msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tList Modus"
+msgstr "-l\t\t\tLisp Modus"
 
 msgid "-C\t\t\tCompatible with Vi: 'compatible'"
 msgstr "-C\t\t\tKompatibel zu Vi: 'compatible'"
@@ -4169,9 +4154,6 @@ msgstr "E244: Unzul
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Unzulässiges Zeichen '%c' in der Schriftart \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Unzulässige 'osfiletype'-Option - verwende Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Doppel-Signal, beenden\n"
 
index 26409a8..1caad8a 100644 (file)
@@ -139,14 +139,6 @@ msgstr "E614: vim_SelFile: cannot return to current directory"
 msgid "E615: vim_SelFile: can't get current directory"
 msgstr "E615: vim_SelFile: cannot get current directory"
 
-#, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Cannot load Zap font '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Cannot use font %s"
-
 msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
 msgstr ""
 "Vim E458: Cannot allocate colourmap entry, some colours may be incorrect"
index 0da75bd..24062c0 100644 (file)
@@ -14,7 +14,7 @@
 #   Komputada leksikono: http://bertilow.com/div/komputada_leksikono/
 #
 # Lasta versio:
-#   http://svn.ikso.net/programtradukoj/vim/vim7/src/po/eo.po
+#   http://dominique.pelle.free.fr/vim-eo.php
 #
 # Äˆiu komento estas bonvenata...
 # Every remark is welcome...
@@ -23,10 +23,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vim(Esperanto)\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 21:08+0200\n"
-"PO-Revision-Date: 2010-08-06 21:34+0200\n"
+"POT-Creation-Date: 2013-05-27 04:50+0200\n"
+"PO-Revision-Date: 2013-05-27 04:55+0200\n"
 "Last-Translator: Dominique PELLÉ <dominique.pelle@gmail.com>\n"
 "Language-Team: \n"
+"Language: eo\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -53,6 +54,9 @@ msgstr "[Listo de lokoj]"
 msgid "[Quickfix List]"
 msgstr "[Listo de rapidriparoj]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: AÅ­tokomandoj haltigis komandon"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Ne eblas disponigi iun ajn bufron, nun eliras..."
 
@@ -186,7 +190,6 @@ msgstr "Subo"
 msgid "Top"
 msgstr "Supro"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -256,7 +259,7 @@ msgid "E787: Buffer changed unexpectedly"
 msgstr "E787: Bufro ÅanÄiÄis neatendite"
 
 msgid "E104: Escape not allowed in digraph"
-msgstr "E104: Eskapsigno malpermesita en duliteraĵo"
+msgstr "E104: Eskapsigno nepermesebla en duliteraĵo"
 
 msgid "E544: Keymap file not found"
 msgstr "E544: Dosiero de klavmapo ne troveblas"
@@ -314,6 +317,12 @@ msgstr " Kompletigo loka de Ålosilvorto (^N/^P)"
 msgid "Hit end of paragraph"
 msgstr "Atingis finon de alineo"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: Kompletiga funkcio ÅanÄis la fenestron"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Kompletiga funkcio forviÅis tekston"
+
 msgid "'dictionary' option is empty"
 msgstr "La opcio 'dictionary' estas malplena"
 
@@ -457,7 +466,7 @@ msgid "E711: List value has not enough items"
 msgstr "E711: Lista valoro ne havas sufiĉe da eroj"
 
 msgid "E690: Missing \"in\" after :for"
-msgstr "E690: \"in\" mankas malantaÅ­ \":for\""
+msgstr "E690: \"in\" mankas post \":for\""
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -471,7 +480,7 @@ msgid "E743: variable nested too deep for (un)lock"
 msgstr "E743: variablo ingita tro profunde por malÅlosi"
 
 msgid "E109: Missing ':' after '?'"
-msgstr "E109: Mankas ':' malantaÅ­ '?'"
+msgstr "E109: Mankas ':' post '?'"
 
 msgid "E691: Can only compare List with List"
 msgstr "E691: Eblas nur kompari Liston kun Listo"
@@ -557,7 +566,7 @@ msgstr "E117: Nekonata funkcio: %s"
 
 #, c-format
 msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: Ne sufiĉe da argumentoj de funkcio: %s"
+msgstr "E119: Ne sufiĉe da argumentoj por funkcio: %s"
 
 #, c-format
 msgid "E120: Using <SID> not in a script context: %s"
@@ -570,6 +579,9 @@ msgstr "E725: Alvoko de funkcio dict sen Vortaro: %s"
 msgid "E808: Number or Float required"
 msgstr "E808: Nombro aÅ­ Glitpunktnombro bezonata"
 
+msgid "add() argument"
+msgstr "argumento de add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Tro da argumentoj"
 
@@ -584,10 +596,19 @@ msgstr "E785: complete() uzeblas nur en Enmeta reÄimo"
 msgid "&Ok"
 msgstr "&Bone"
 
+msgid "extend() argument"
+msgstr "argumento de extend()"
+
 #, c-format
 msgid "E737: Key already exists: %s"
 msgstr "E737: Åœlosilo jam ekzistas: %s"
 
+msgid "map() argument"
+msgstr "argumento de map()"
+
+msgid "filter() argument"
+msgstr "argumento de filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld linioj: "
@@ -606,8 +627,11 @@ msgstr ""
 msgid "called inputrestore() more often than inputsave()"
 msgstr "alvokis inputrestore() pli ofte ol inputsave()"
 
+msgid "insert() argument"
+msgstr "argumento de insert()"
+
 msgid "E786: Range not allowed"
-msgstr "E786: Amplekso malpermesita"
+msgstr "E786: Amplekso nepermesebla"
 
 msgid "E701: Invalid type for len()"
 msgstr "E701: Nevalida datumtipo de len()"
@@ -631,12 +655,21 @@ msgstr "E241: Ne eblas sendi al %s"
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Ne eblas legi respondon de servilo"
 
+msgid "remove() argument"
+msgstr "argumento de remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Tro da simbolaj ligiloj (ĉu estas ciklo?)"
 
+msgid "reverse() argument"
+msgstr "argumento de reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: Ne eblas sendi al kliento"
 
+msgid "sort() argument"
+msgstr "argumento de sort()"
+
 msgid "E702: Sort compare function failed"
 msgstr "E702: Ordiga funkcio fiaskis"
 
@@ -671,14 +704,6 @@ msgid "E806: using Float as a String"
 msgstr "E806: uzo de Glitpunktnombro kiel Äˆeno"
 
 #, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Nomo de variablo Funcref ekendas per majusklo: %s"
-
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Nomo de variablo konfliktas kun ekzistanta funkcio: %s"
-
-#, c-format
 msgid "E706: Variable type mismatch for: %s"
 msgstr "E706: Nekongrua datumtipo de variablo: %s"
 
@@ -687,6 +712,14 @@ msgid "E795: Cannot delete variable %s"
 msgstr "E795: Ne eblas forviÅi variablon %s"
 
 #, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: Nomo de variablo Funcref devas finiÄi per majusklo: %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Nomo de variablo konfliktas kun ekzistanta funkcio: %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: Valoro estas Ålosita: %s"
 
@@ -708,10 +741,17 @@ msgstr "E123: Nedifinita funkcio: %s"
 msgid "E124: Missing '(': %s"
 msgstr "E124: Mankas '(': %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: Ne eblas uzi g: Ä‰i tie"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Nevalida argumento: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Ripetita nomo de argumento: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Mankas \":endfunction\""
 
@@ -854,7 +894,6 @@ msgstr "Skribas dosieron viminfo \"%s\""
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Tiu dosiero viminfo estis kreita de Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -862,7 +901,6 @@ msgstr ""
 "# Vi povas redakti Äin se vi estas singarda.\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Valoro de 'encoding' kiam tiu dosiero estis kreita\n"
 
@@ -930,7 +968,7 @@ msgid "E144: non-numeric argument to :z"
 msgstr "E144: nenumera argumento de :z"
 
 msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: Åœelkomandoj ne permesataj en rvim"
+msgstr "E145: Åœelkomandoj nepermeseblaj en rvim"
 
 msgid "E146: Regular expressions can't be delimited by letters"
 msgstr "E146: Ne eblas limigi regulesprimon per literoj"
@@ -975,6 +1013,9 @@ msgid "Pattern found in every line: %s"
 msgstr "Åœablono trovita en Ä‰iuj linioj: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "Åœablono ne trovita: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1223,7 +1264,7 @@ msgid "E319: Sorry, the command is not available in this version"
 msgstr "E319: BedaÅ­rinde, tiu komando ne haveblas en tiu versio"
 
 msgid "E172: Only one file name allowed"
-msgstr "E172: Nur unu dosiernomo permesita"
+msgstr "E172: Nur unu dosiernomo permesebla"
 
 msgid "1 more file to edit.  Quit anyway?"
 msgstr "1 plia redaktenda dosiero. Äˆu tamen eliri?"
@@ -1278,6 +1319,9 @@ msgstr "E182: Nevalida komanda nomo"
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: Komandoj difinataj de uzanto devas eki per majusklo"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: Rezervita nomo, neuzebla por komando difinita de uzanto"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Neniu komando-difinita-de-uzanto kiel: %s"
@@ -1288,7 +1332,8 @@ msgstr "E180: Nevalida valoro de kompletigo: %s"
 
 msgid "E468: Completion argument only allowed for custom completion"
 msgstr ""
-"E468: Argumento de kompletigo nur permesata por kompletigo difinita de uzanto"
+"E468: Argumento de kompletigo nur permesebla por kompletigo difinita de "
+"uzanto"
 
 msgid "E467: Custom completion requires a function argument"
 msgstr "E467: Uzula kompletigo bezonas funkcian argumenton"
@@ -1297,8 +1342,8 @@ msgid "unknown"
 msgstr "nekonata"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Ne eblas trovi agordaron de koloroj %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Ne eblas trovi agordaron de koloroj '%s'"
 
 msgid "Greetings, Vim user!"
 msgstr "Bonvenon, uzanto de Vim!"
@@ -1384,30 +1429,25 @@ msgstr "E809: #< ne haveblas sen la eblo +eval"
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: Neniu alterna dosiernomo por anstataÅ­igi al '#'"
 
-# DP: mi ne certas, Ä‰u <afile> tradukeblas
-# AM: laÅ­ mi ne
 msgid "E495: no autocommand file name to substitute for \"<afile>\""
 msgstr "E495: neniu dosiernomo de aÅ­tokomando por anstataÅ­igi al \"<afile>\""
 
-# DP: mi ne certas, Ä‰u <abuf> tradukeblas
-# AM: laÅ­ mi ne
 msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
 msgstr ""
 "E496: neniu numero de bufro de aÅ­tokomando por anstataÅ­igi al \"<abuf>\""
 
-# DP: mi ne certas, Ä‰u <amatch> tradukeblas
-# AM: laÅ­ mi ne
 # DP: Ä‰u match estas verbo aÅ­ nomo en la angla version?
 # AM: Ä‰i tie, nomo, Åajnas al mi
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
 msgstr ""
 "E497: neniu nomo de kongruo de aÅ­tokomando por anstataÅ­igi al \"<amatch>\""
 
-# DP: mi ne certas, Ä‰u <sfile> tradukeblas
-# AM: laÅ­ mi ne
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: neniu dosiernomo \":source\" por anstataÅ­igi al \"<sfile>\""
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: neniu uzebla numero de linio por \"<slnum>\""
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: Malplena dosiernomo por '%' aÅ­ '#', nur funkcias kun \":p:h\""
@@ -1487,7 +1527,7 @@ msgid "E583: multiple :else"
 msgstr "E583: pluraj \":else\""
 
 msgid "E584: :elseif after :else"
-msgstr "E584: \":elseif\" malantaÅ­ \":else\""
+msgstr "E584: \":elseif\" post \":else\""
 
 msgid "E585: :while/:for nesting too deep"
 msgstr "E585: \":while/:for\" ingita tro profunde"
@@ -1513,7 +1553,7 @@ msgstr "E603: \":catch\" sen \":try\""
 #. Give up for a ":catch" after ":finally" and ignore it.
 #. * Just parse.
 msgid "E604: :catch after :finally"
-msgstr "E604: \":catch\" malantaÅ­ \":finally\""
+msgstr "E604: \":catch\" post \":finally\""
 
 msgid "E606: :finally without :try"
 msgstr "E606: \":finally\" sen \":try\""
@@ -1529,7 +1569,7 @@ msgid "E193: :endfunction not inside a function"
 msgstr "E193: \":endfunction\" ekster funkcio"
 
 msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Nun malpermesas redakti alian bufron"
+msgstr "E788: Ne eblas redakti alian bufron nun"
 
 msgid "E811: Not allowed to change buffer information now"
 msgstr "E811: Ne eblas ÅanÄi informon de bufro nun"
@@ -1639,6 +1679,9 @@ msgstr "[NE konvertita]"
 msgid "[converted]"
 msgstr "[konvertita]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[ĉifrita]"
 
@@ -1816,6 +1859,7 @@ msgstr "1 signo"
 msgid "%lld characters"
 msgstr "%lld signoj"
 
+#. Explicit typecast avoids warning on Mac OS X 10.6
 #, c-format
 msgid "%ld characters"
 msgstr "%ld signoj"
@@ -1914,7 +1958,7 @@ msgstr "E367: Ne ekzistas tia grupo: \"%s\""
 
 #, c-format
 msgid "E215: Illegal character after *: %s"
-msgstr "E215: Nevalida signo malantaÅ­ *: %s"
+msgstr "E215: Nevalida signo post *: %s"
 
 #, c-format
 msgid "E216: No such event: %s"
@@ -2007,6 +2051,12 @@ msgstr "Neniu mapo trovita"
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: Nevalida reÄimo"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Ne sukcesis krei novan procezon por la grafika interfaco"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: La ida procezo ne sukcesis startigi la grafikan interfacon"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Ne eblas lanĉi la grafikan interfacon"
 
@@ -2090,7 +2140,7 @@ msgstr "AnstataÅ­igi per:"
 
 #. whole word only button
 msgid "Match whole word only"
-msgstr "Kongrui nur plenan vorton"
+msgstr "Kongrui kun nur plena vorto"
 
 #. match case button
 msgid "Match case"
@@ -2170,21 +2220,6 @@ msgid "&Undo"
 msgstr "&Malfari"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Ne eblas Åargi la tiparon Zap \"%s\""
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Ne eblas uzi tiparon %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Sendas mesaÄon por finigi idan procezon\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Ne eblas trovi titolon de fenestro \"%s\""
 
@@ -2230,7 +2265,7 @@ msgstr "E252: Nomo de tiparo: %s"
 
 #, c-format
 msgid "Font '%s' is not fixed-width"
-msgstr "Tiparo \"%s\" ne estas egallarÄa"
+msgstr "Tiparo '%s' ne estas egallarÄa"
 
 #, c-format
 msgid "E253: Fontset name: %s\n"
@@ -2486,7 +2521,7 @@ msgid ""
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: Trovi funkciojn, kiuj alvokas tiun funkcion\n"
@@ -2496,7 +2531,7 @@ msgstr ""
 "       g: Trovi tiun difinon\n"
 "       i: Trovi dosierojn, kiuj inkluzivas (#include) tiun dosieron\n"
 "       s: Trovi tiun C-simbolon\n"
-"       t: Trovi atribuojn al\n"
+"       t: Trovi tiun Ä‰enon\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2590,6 +2625,9 @@ msgstr "ne eblas enmeti linion"
 msgid "string cannot contain newlines"
 msgstr "ĉeno ne rajtas enhavi liniavancojn"
 
+msgid "error converting Scheme values to Vim"
+msgstr "eraro dum konverto de Scheme-valoro al Vim"
+
 msgid "Vim error: ~a"
 msgstr "Eraro de Vim: ~a"
 
@@ -2606,13 +2644,13 @@ msgid "linenr out of range"
 msgstr "numero de linio ekster limoj"
 
 msgid "not allowed in the Vim sandbox"
-msgstr "nepermesita en sabloludejo de Vim"
+msgstr "nepermesebla en sabloludejo de Vim"
 
 msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Pitono: Ne eblas uzi :py kaj :py3 en la sama seanco"
+msgstr "E836: Vim ne povas plenumi :python post uzo de :py3"
 
-msgid "E837: This Vim cannot execute :py3 after using :python"
-msgstr "E837: Pitono: Ne eblas uzi :py kaj :py3 en la sama seanco"
+msgid "only string keys are allowed"
+msgstr "nur Ä‰enaj Ålosiloj estas permeseblaj"
 
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
@@ -2624,18 +2662,11 @@ msgstr ""
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Ne eblas alvoki Pitonon rekursie"
 
-msgid "can't delete OutputObject attributes"
-msgstr "ne eblas forviÅi atributojn de OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "malmolspaceto (softspace) devas esti entjero"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Vim ne povas plenumi :py3  post uzo de :python"
 
-msgid "invalid attribute"
-msgstr "nevalida atributo"
-
-#, c-format
-msgid "<buffer object (deleted) at %p>"
-msgstr "<bufra objekto (forviÅita) Ä‰e %p>"
+msgid "index must be int or slice"
+msgstr "indekso devas esti 'int' aÅ­ 'slice'"
 
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_ devas esti apero de Äˆeno"
@@ -2669,7 +2700,7 @@ msgid "E273: unknown longjmp status %d"
 msgstr "E273: nekonata stato de longjmp: %d"
 
 msgid "Toggle implementation/definition"
-msgstr "Baskuli realigon/difinon"
+msgstr "Baskuligi realigon/difinon"
 
 msgid "Show base class of"
 msgstr "Vidigi bazan klason de"
@@ -2760,10 +2791,10 @@ msgid "Sniff: Error during write. Disconnected"
 msgstr "Sniff: Eraro dum skribo. Malkonektita"
 
 msgid "invalid buffer number"
-msgstr "nevalida nombro de bufroj"
+msgstr "nevalida numero de bufro"
 
 msgid "not implemented yet"
-msgstr "ne jam realigita"
+msgstr "ankoraÅ­ ne realigita"
 
 #. ???
 msgid "cannot set line(s)"
@@ -2825,12 +2856,6 @@ msgstr ""
 "E571: BedaÅ­rinde tiu komando estas malÅaltita: la biblioteko Tcl ne "
 "Åargeblis."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: TCL-ERARO: elira kodo ne estas entjera!? Bv. retpoÅti al vim-dev@vim."
-"org"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: elira kodo %d"
@@ -2859,10 +2884,10 @@ msgid "Too many edit arguments"
 msgstr "Tro da argumentoj de redakto"
 
 msgid "Argument missing after"
-msgstr "Argumento mankas malantaÅ­"
+msgstr "Argumento mankas post"
 
 msgid "Garbage after option argument"
-msgstr "Forĵetindaĵo malantaÅ­ argumento de opcio"
+msgstr "Forĵetindaĵo post argumento de opcio"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr "Tro da argumentoj \"+komando\", \"-c komando\" aÅ­ \"--cmd komando\""
@@ -2965,7 +2990,7 @@ msgstr ""
 "Argumentoj:\n"
 
 msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tNur dosiernomoj malantaÅ­ tio"
+msgstr "--\t\t\tNur dosiernomoj post tio"
 
 msgid "--literal\t\tDon't expand wildcards"
 msgstr "--literal\t\tNe malvolvi Äµokerojn"
@@ -2988,6 +3013,9 @@ msgstr "-v\t\t\tReÄimo Vi (kiel \"vi\")"
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tReÄimo Ex (kiel \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tPlibonigita Ex-reÄimo"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tSilenta (stapla) reÄimo (nur por \"ex\")"
 
@@ -3004,10 +3032,10 @@ msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
 msgstr "-Z\t\t\tLimigita reÄimo (kiel \"rvim\")"
 
 msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tÅœanÄoj (skribo al dosieroj) malpermesitaj"
+msgstr "-m\t\t\tÅœanÄoj (skribo al dosieroj) nepermeseblaj"
 
 msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tÅœanÄoj al teksto malpermesitaj"
+msgstr "-M\t\t\tÅœanÄoj al teksto nepermeseblaj"
 
 msgid "-b\t\t\tBinary mode"
 msgstr "-b\t\t\tDuuma reÄimo"
@@ -3035,7 +3063,7 @@ msgid "-r\t\t\tList swap files and exit"
 msgstr "-r\t\t\tListigi permutodosierojn .swp kaj eliri"
 
 msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (kun dosiernomo)\tRestaÅ­ri kolapsitan seancon"
+msgstr "-r (kun dosiernomo)\tRestaÅ­ri kolapsintan seancon"
 
 msgid "-L\t\t\tSame as -r"
 msgstr "-L\t\t\tKiel -r"
@@ -3190,12 +3218,6 @@ msgstr "-display <ekrano>\tLanĉi vim sur <ekrano>"
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\tLanĉi vim piktograme"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <nomo>\t\tUzi rimedon kvazaÅ­ vim estus <nomo>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (Nerealigita)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <koloro>\tUzi <koloro>-n por la fona koloro (ankaÅ­: -bg)"
 
@@ -3237,19 +3259,6 @@ msgstr "-xrm <rimedo>\tAgordi la specifitan <rimedo>-n"
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Argumentoj agnoskitaj de gvim (versio RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <nombro>\tKomenca larÄo de fenestro en kolumnoj"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <nombro>\tKomenca alto de fenestro en vicoj"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3264,6 +3273,9 @@ msgstr "--role <rolo>\tDoni unikan rolon por identigi la Ä‰efan fenestron"
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tMalfermi Vim en alia GTK fenestraĵo"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tIgas gvim afiÅi la identigilon de vindozo sur stdout"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <gepatra titolo>\tMalfermi Vim en gepatra aplikaĵo"
 
@@ -3322,7 +3334,6 @@ msgstr ""
 "\n"
 "ÅanÄo  linio kol teksto"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3331,7 +3342,6 @@ msgstr ""
 "# Markoj de dosiero:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3339,7 +3349,6 @@ msgstr ""
 "\n"
 "# Saltlisto (plej novaj unue):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3399,6 +3408,9 @@ msgstr "E298: Äˆu ne akiris blokon n-ro 1?"
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Äˆu ne akiris blokon n-ro 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Eraro dum Äisdatigo de Ä‰ifrada permutodosiero .swp"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ve, perdis la permutodosieron .swp!!!"
@@ -3655,7 +3667,7 @@ msgstr ""
 "        proceza ID: "
 
 msgid " (still running)"
-msgstr " (ankoraÅ­ rulas)"
+msgstr " (ankoraÅ­ rulas)"
 
 msgid ""
 "\n"
@@ -3757,24 +3769,20 @@ msgstr "      PLI NOVA ol permutodosiero .swp!\n"
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
 "(1) Alia programo eble redaktas la saman dosieron.\n"
 "    Se jes, estu singarda por ne havi du malsamajn\n"
-"    aperojn de la sama dosiero, kiam vi faros ÅanÄojn.\n"
+"    aperojn de la sama dosiero, kiam vi faros ÅanÄojn."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Eliru, aÅ­ daÅ­rigu singarde.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Eliru, aÅ­ daÅ­rigu singarde.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Redakta seanco de tiu dosiero kolapsis.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Redakta seanco de tiu dosiero kolapsis.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Se veras, uzu \":recover\" aÅ­ \"vim -r "
@@ -4008,7 +4016,6 @@ msgstr "Vim: konservo de dosieroj...\n"
 msgid "Vim: Finished.\n"
 msgstr "Vim: Finita.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ERARO: "
 
@@ -4068,6 +4075,9 @@ msgstr "Tajpu la Ålosilon denove: "
 msgid "Keys don't match!"
 msgstr "Åœlosiloj ne kongruas!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: tro longa vojo por kompletigo"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4110,11 +4120,15 @@ msgstr "lego el kontaktoskatolo de Netbeans"
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Konekto de NetBeans perdita por bufro %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans ne estas subtenata kun tiu grafika interfaco"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: nebeans jam konektata"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s estas nurlegebla (aldonu ! por transpasi)"
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: Neniu identigilo sub la kursoro"
@@ -4245,8 +4259,8 @@ msgid ""
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
 msgstr ""
-"Apartigis %s%ld de %ld Linioj; %ld de %ld Vortoj; %ld de %ld Signoj; %ld de %"
-"ld Bajtoj"
+"Apartigis %s%ld de %ld Linioj; %ld de %ld Vortoj; %ld de %ld Signoj; %ld de "
+"%ld Bajtoj"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
@@ -4257,8 +4271,8 @@ msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Kol %s de %s; Linio %ld de %ld; Vorto %ld de %ld; Signo %ld de %ld; Bajto %"
-"ld de %ld"
+"Kol %s de %s; Linio %ld de %ld; Vorto %ld de %ld; Signo %ld de %ld; Bajto "
+"%ld de %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4277,10 +4291,13 @@ msgid "E519: Option not supported"
 msgstr "E519: Opcio ne subtenata"
 
 msgid "E520: Not allowed in a modeline"
-msgstr "E520: Ne permesita en reÄimlinio"
+msgstr "E520: Nepermesebla en reÄimlinio"
+
+msgid "E846: Key code not set"
+msgstr "E846: Klavkodo ne agordita"
 
 msgid "E521: Number required after ="
-msgstr "E521: Nombro bezonata malantaÅ­ ="
+msgstr "E521: Nombro bezonata post ="
 
 msgid "E522: Not found in termcap"
 msgstr "E522: Netrovita en termcap"
@@ -4318,7 +4335,7 @@ msgstr "E525: Äˆeno de nula longo"
 
 #, c-format
 msgid "E526: Missing number after <%s>"
-msgstr "E526: Mankas nombro malantaÅ­ <%s>"
+msgstr "E526: Mankas nombro post <%s>"
 
 msgid "E527: Missing comma"
 msgstr "E527: Mankas komo"
@@ -4346,7 +4363,7 @@ msgstr "E534: Nevalida larÄa tiparo"
 
 #, c-format
 msgid "E535: Illegal character after <%c>"
-msgstr "E535: Nevalida signo malantaÅ­ <%c>"
+msgstr "E535: Nevalida signo post <%c>"
 
 msgid "E536: comma required"
 msgstr "E536: komo bezonata"
@@ -4429,7 +4446,7 @@ msgstr "E357: 'langmap': Kongrua signo mankas por %s"
 
 #, c-format
 msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': Ekstraj signoj malantaÅ­ punktokomo: %s"
+msgstr "E358: 'langmap': Ekstraj signoj post punktokomo: %s"
 
 msgid "cannot open "
 msgstr "ne eblas malfermi "
@@ -4502,7 +4519,7 @@ msgstr "E238: Eraro de presado: %s"
 
 #, c-format
 msgid "Printing '%s'"
-msgstr "Presas \"%s\""
+msgstr "Presas '%s'"
 
 #, c-format
 msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
@@ -4512,10 +4529,6 @@ msgstr "E244: Nevalida nomo de signaro \"%s\" en nomo de tiparo \"%s\""
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Nevalida signo '%c' en nomo de tiparo \"%s\""
 
-# DP: Ä‰u traduki Text?
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Nevalida opcio 'osfiletype' - uzas Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Duobla signalo, eliranta\n"
 
@@ -4740,18 +4753,9 @@ msgstr "E777: Äˆeno aÅ­ Listo atendita"
 msgid "E369: invalid item in %s%%[]"
 msgstr "E369: nevalida ano en %s%%[]"
 
-msgid "E339: Pattern too long"
-msgstr "E339: Åœablono tro longa"
-
-msgid "E50: Too many \\z("
-msgstr "E50: Tro da \\z("
-
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Tro da %s("
-
-msgid "E52: Unmatched \\z("
-msgstr "E52: Neekvilibra \\z("
+msgid "E769: Missing ] after %s["
+msgstr "E769: Mankas ] post %s["
 
 #, c-format
 msgid "E53: Unmatched %s%%("
@@ -4765,9 +4769,22 @@ msgstr "E54: Neekvilibra %s("
 msgid "E55: Unmatched %s)"
 msgstr "E55: Neekvilibra %s"
 
+msgid "E339: Pattern too long"
+msgstr "E339: Åœablono tro longa"
+
+msgid "E50: Too many \\z("
+msgstr "E50: Tro da \\z("
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: Tro da %s("
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: Neekvilibra \\z("
+
 #, c-format
 msgid "E59: invalid character after %s@"
-msgstr "E59: nevalida signo malantaÅ­ %s@"
+msgstr "E59: nevalida signo post %s@"
 
 #, c-format
 msgid "E60: Too many complex %s{...}s"
@@ -4792,18 +4809,18 @@ msgid "E65: Illegal back reference"
 msgstr "E65: Nevalida retro-referenco"
 
 msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( estas malpermesa tie"
+msgstr "E66: \\z( estas permesebla tie"
 
 # DP: vidu http://www.thefreedictionary.com/et+al.
 msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 kaj aliaj estas malpermesataj tie"
+msgstr "E67: \\z1 kaj aliaj estas nepermeseblaj tie"
 
 msgid "E68: Invalid character after \\z"
-msgstr "E68: Nevalida signo malantaÅ­ \\z"
+msgstr "E68: Nevalida signo post \\z"
 
 #, c-format
 msgid "E69: Missing ] after %s%%["
-msgstr "E69: Mankas ] malantaÅ­ %s%%["
+msgstr "E69: Mankas ] post %s%%["
 
 #, c-format
 msgid "E70: Empty %s%%[]"
@@ -4811,15 +4828,11 @@ msgstr "E70: Malplena %s%%[]"
 
 #, c-format
 msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: Nevalida signo malantaÅ­ %s%%[dxouU]"
+msgstr "E678: Nevalida signo post %s%%[dxouU]"
 
 #, c-format
 msgid "E71: Invalid character after %s%%"
-msgstr "E71: Nevalida signo malantaÅ­ %s%%"
-
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: Mankas ] malantaÅ­ %s["
+msgstr "E71: Nevalida signo post %s%%"
 
 #, c-format
 msgid "E554: Syntax error in %s{...}"
@@ -4828,6 +4841,83 @@ msgstr "E554: Sintaksa eraro en %s{...}"
 msgid "External submatches:\n"
 msgstr "Eksteraj subkongruoj:\n"
 
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr ""
+"E864: \\%#= povas nur esti sekvita de 0, 1, aÅ­ 2. La aÅ­tomata motoro de "
+"regulesprimo estos uzata "
+
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (NFA-regulesprimo) Mispoziciigita %c"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) Trovis finon de regulesprimo tro frue"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) Nekonata operatoro '\\z%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: Eraro dum prekomputado de NFA kun ekvivalentoklaso!"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) Nekonata operatoro '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (NFS-regulesprimo) Eraro dum legado de limoj de ripeto"
+
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr ""
+"E871: (NFA-regulesprimo) Ne povas havi mult-selekton tuj post alia mult-"
+"selekto!"
+
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (NFA-regulesprimo) tro da '('"
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (NFA-regulesprimo) propra end-eraro"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) Ne povis elpreni de la staplo!"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr ""
+"E875: (NFA-regulesprimo) (dum konverto de postmeto al NFA), restas tro da "
+"statoj en la staplo"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (NFA-regulesprimo) ne sufiĉa spaco por enmomorigi la tutan NFA "
+
+msgid "E999: (NFA regexp internal error) Should not process NOT node !"
+msgstr ""
+"E999: (interna eraro de NFA-regulesprimo) Ne devus procezi nodon 'NOT'!"
+
+#. should not be here :P
+msgid "E877: (NFA regexp) Invalid character class "
+msgstr "E877: (NFA-regulesprimo) Nevalida klaso de signo "
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) NE POVIS MALFERMI %s!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr ""
+"Ne povis malfermi provizoran protokolan dosieron por skribi, nun montras sur "
+"stderr ..."
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (NFA) Ne povis asigni memoron por traigi branĉojn!"
+
+msgid "Could not open temporary log file for writing "
+msgstr "Ne povis malfermi la provizoran protokolan dosieron por skribi "
+
 msgid " VREPLACE"
 msgstr " V-ANSTATAŬIGO"
 
@@ -4895,7 +4985,7 @@ msgid "E385: search hit BOTTOM without match for: %s"
 msgstr "E385: serĉo atingis SUBON sen trovi: %s"
 
 msgid "E386: Expected '?' or '/'  after ';'"
-msgstr "E386: Atendis '?' aÅ­ '/' malantaÅ­ ';'"
+msgstr "E386: Atendis '?' aÅ­ '/' post ';'"
 
 msgid " (includes previously listed match)"
 msgstr " (enhavas antaÅ­e listigitajn kongruojn)"
@@ -4905,7 +4995,7 @@ msgid "--- Included files "
 msgstr "--- Inkluzivitaj dosieroj "
 
 msgid "not found "
-msgstr "netrovita "
+msgstr "netrovitaj "
 
 msgid "in path ---\n"
 msgstr "en serĉvojo ---\n"
@@ -4979,6 +5069,10 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: Literumilo ne estas Åaltita"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "Averto: Ne eblas trovi vortliston \"%s_%s.spl\" aÅ­ \"%s_ascii.spl\""
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr "Averto: Ne eblas trovi vortliston \"%s.%s.spl\" aÅ­ \"%s.ascii.spl\""
 
@@ -5024,23 +5118,23 @@ msgstr "Nevalida valoro de FLAG en %s linio %d: %s"
 
 #, c-format
 msgid "FLAG after using flags in %s line %d: %s"
-msgstr "FLAG malantaÅ­ flagoj en %s linio %d: %s"
+msgstr "FLAG post flagoj en %s linio %d: %s"
 
 #, c-format
 msgid ""
 "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
 "%d"
 msgstr ""
-"Difino de COMPOUNDFORBIDFLAG malantaÅ­ ano PFX povas doni neÄustajn rezultojn "
-"en %s linio %d"
+"Difino de COMPOUNDFORBIDFLAG post ano PFX povas doni neÄustajn rezultojn en "
+"%s linio %d"
 
 #, c-format
 msgid ""
 "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
 "%d"
 msgstr ""
-"Difino de COMPOUNDPERMITFLAG malantaÅ­ ano PFX povas doni neÄustajn rezultojn "
-"en %s linio %d"
+"Difino de COMPOUNDPERMITFLAG post ano PFX povas doni neÄustajn rezultojn en "
+"%s linio %d"
 
 #, c-format
 msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
@@ -5176,7 +5270,7 @@ msgstr "Ripetita linio /encoding= ignorita en %s linio %d: %s"
 
 #, c-format
 msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "Linio /encoding= malantaÅ­ vorto ignorita en %s linio %d: %s"
+msgstr "Linio /encoding= post vorto ignorita en %s linio %d: %s"
 
 #, c-format
 msgid "Duplicate /regions= line ignored in %s line %d: %s"
@@ -5202,6 +5296,9 @@ msgstr "Nekonata flago en %s linio %d: %s"
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "Ignoris %d vorto(j)n kun neaskiaj signoj"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Ne sufiĉe da memoro, vortlisto estos nekompleta."
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "Densigis %d de %d nodoj; %d (%d%%) restantaj"
@@ -5379,8 +5476,8 @@ msgstr " liniavancoj"
 msgid "E395: contains argument not accepted here"
 msgstr "E395: La argumento \"contains\" ne akcepteblas tie"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: La argumento \"containedin\" ne akcepteblas tie"
+msgid "E844: invalid cchar value"
+msgstr "E844: nevalida valoro de cchar"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: La argumento \"group[t]here\" ne akcepteblas tie"
@@ -5392,6 +5489,9 @@ msgstr "E394: Ne trovis regionan elementon por %s"
 msgid "E397: Filename required"
 msgstr "E397: Dosiernomo bezonata"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Tro da sintaksaj inkluzivoj"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: Mankas ']': %s"
@@ -5404,6 +5504,9 @@ msgstr "E398: Mankas '=': %s"
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Ne sufiĉaj argumentoj: sintaksa regiono %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Tro da sintaksaj grupoj"
+
 msgid "E400: No cluster specified"
 msgstr "E400: Neniu fasko specifita"
 
@@ -5413,7 +5516,7 @@ msgstr "E401: Disigilo de Åablono netrovita: %s"
 
 #, c-format
 msgid "E402: Garbage after pattern: %s"
-msgstr "E402: Forĵetindaĵo malantaÅ­ Åablono: %s"
+msgstr "E402: Forĵetindaĵo post Åablono: %s"
 
 msgid "E403: syntax sync: line continuations pattern specified twice"
 msgstr "E403: sintaksa sinkronigo: Åablono de linia daÅ­rigo specifita dufoje"
@@ -5432,7 +5535,7 @@ msgstr "E406: Malplena argumento: %s"
 
 #, c-format
 msgid "E407: %s not allowed here"
-msgstr "E407: %s ne estas permesata tie"
+msgstr "E407: %s ne estas permesebla tie"
 
 #, c-format
 msgid "E408: %s must be first in contains list"
@@ -5507,6 +5610,9 @@ msgstr "E669: Nepresebla signo en nomo de grupo"
 msgid "W18: Invalid character in group name"
 msgstr "W18: Nevalida signo en nomo de grupo"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Tro da emfazaj kaj sintaksaj grupoj"
+
 msgid "E555: at bottom of tag stack"
 msgstr "E555: Ä‰e subo de stako de etikedoj"
 
@@ -5568,6 +5674,9 @@ msgstr "Serĉado de dosiero de etikedoj %s"
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Vojo de etikeda dosiero trunkita por %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Ignoro de longa linio en etikeda dosiero"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: Eraro de formato en etikeda dosiero \"%s\""
@@ -5584,9 +5693,6 @@ msgstr "E432: Etikeda dosiero ne estas ordigita: %s"
 msgid "E433: No tags file"
 msgstr "E433: Neniu etikeda dosiero"
 
-msgid "Ignoring long line in tags file"
-msgstr "Ignoro de longa linio en etikeda dosiero"
-
 msgid "E434: Can't find tag pattern"
 msgstr "E434: Ne eblas trovi Åablonon de etikedo"
 
@@ -5681,7 +5787,7 @@ msgstr "Ne legas malfaran dosieron, posedanto malsamas: %s"
 
 #, c-format
 msgid "Reading undo file: %s"
-msgstr "Legado de de malfara dosiero: %s"
+msgstr "Legado de malfara dosiero: %s"
 
 #, c-format
 msgid "E822: Cannot open undo file for reading: %s"
@@ -5753,20 +5859,20 @@ msgid "before"
 msgstr "antaÅ­"
 
 msgid "after"
-msgstr "malantaÅ­"
+msgstr "post"
 
 msgid "Nothing to undo"
 msgstr "Nenio por malfari"
 
-msgid "number changes  time            saved"
-msgstr "numero ÅanÄoj   tempo           konservita"
+msgid "number changes  when               saved"
+msgstr "numero ÅanÄoj   tempo              konservita"
 
 #, c-format
 msgid "%ld seconds ago"
 msgstr "antaÅ­ %ld sekundoj"
 
 msgid "E790: undojoin is not allowed after undo"
-msgstr "E790: undojoin estas nepermesita malantaÅ­ malfaro"
+msgstr "E790: undojoin estas nepermesebla post malfaro"
 
 msgid "E439: undo list corrupt"
 msgstr "E439: listo de malfaro estas difekta"
@@ -5860,13 +5966,6 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"Versio RISC operaciumo"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6054,7 +6153,7 @@ msgid "type  :help version7<Enter>   for version info"
 msgstr "tajpu  :help version7<Enenklavo>  por informo de versio"
 
 msgid "Running in Vi compatible mode"
-msgstr "Rulas en reÄimo kongrua kun Vi"
+msgstr "Rulas en reÄimo kongrua kun Vi"
 
 # DP: atentu al la spacetoj: Ä‰iuj Ä‰enoj devas havi la saman longon
 msgid "type  :set nocp<Enter>        for Vim defaults"
@@ -6069,11 +6168,11 @@ msgid "menu  Help->Orphans           for information    "
 msgstr "menuo  Help->Orfinoj              por pliaj informoj   "
 
 msgid "Running modeless, typed text is inserted"
-msgstr "Rulas senreÄime, tajpita teksto estas enmetita"
+msgstr "Rulas senreÄime, tajpita teksto estas enmetita"
 
 # DP: atentu al la spacetoj: Ä‰iuj Ä‰enoj devas havi la saman longon
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "menuo Redakti->Mallokaj Agordoj->Baskuli Enmetan ReÄimon"
+msgstr "menuo Redakti->Mallokaj Agordoj->Baskuligi Enmetan ReÄimon"
 
 # DP: atentu al la spacetoj: Ä‰iuj Ä‰enoj devas havi la saman longon
 msgid "                              for two modes      "
@@ -6082,7 +6181,7 @@ msgstr "                                  por du reÄimoj       "
 # DP: tiu Ä‰eno pli longas (mi ne volas igi Ä‰iujn aliajn Ä‰enojn
 #     pli longajn)
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
-msgstr "menuo Redakti->Mallokaj Agordoj->Baskuli ReÄimon Kongruan kun Vi"
+msgstr "menuo Redakti->Mallokaj Agordoj->Baskuligi ReÄimon Kongruan kun Vi"
 
 # DP: atentu al la spacetoj: Ä‰iuj Ä‰enoj devas havi la saman longon
 msgid "                              for Vim defaults   "
@@ -6206,7 +6305,7 @@ msgstr ""
 
 msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
 msgstr ""
-"E12: Malpermesata komando el exrc/vimrc en aktuala dosierujo aÅ­ etikeda serĉo"
+"E12: Nepermesebla komando el exrc/vimrc en aktuala dosierujo aÅ­ etikeda serĉo"
 
 msgid "E171: Missing :endif"
 msgstr "E171: Mankas \":endif\""
@@ -6301,7 +6400,7 @@ msgid "E24: No such abbreviation"
 msgstr "E24: Ne estas tia mallongigo"
 
 msgid "E477: No ! allowed"
-msgstr "E477: Neniu ! permesita"
+msgstr "E477: Neniu ! permesebla"
 
 msgid "E25: GUI cannot be used: Not enabled at compile time"
 msgstr "E25: Grafika interfaco ne uzeblas: MalÅaltita dum kompilado"
@@ -6348,7 +6447,7 @@ msgid "E35: No previous regular expression"
 msgstr "E35: Neniu antaÅ­a regulesprimo"
 
 msgid "E481: No range allowed"
-msgstr "E481: Amplekso ne permesita"
+msgstr "E481: Amplekso nepermesebla"
 
 msgid "E36: Not enough room"
 msgstr "E36: Ne sufiĉe da spaco"
@@ -6431,10 +6530,10 @@ msgid "E47: Error while reading errorfile"
 msgstr "E47: Eraro dum legado de erardosiero"
 
 msgid "E48: Not allowed in sandbox"
-msgstr "E48: Ne permesita en sabloludejo"
+msgstr "E48: Nepermesebla en sabloludejo"
 
 msgid "E523: Not allowed here"
-msgstr "E523: Ne permesita tie"
+msgstr "E523: Nepermesebla tie"
 
 msgid "E359: Screen mode setting not supported"
 msgstr "E359: ReÄimo de ekrano ne subtenata"
@@ -6519,6 +6618,9 @@ msgstr "E139: Dosiero estas Åargita en alia bufro"
 msgid "E764: Option '%s' is not set"
 msgstr "E764: La opcio '%s' ne estas Åaltita"
 
+msgid "E850: Invalid register name"
+msgstr "E850: Nevalida nomo de reÄistro"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "serĉo atingis SUPRON, daÅ­rigonte al SUBO"
 
@@ -6529,14 +6631,110 @@ msgstr "serĉo atingis SUBON, daÅ­rigonte al SUPRO"
 msgid "Need encryption key for \"%s\""
 msgstr "Åœlosilo de Ä‰ifrado bezonata por \"%s\""
 
+msgid "can't delete OutputObject attributes"
+msgstr "ne eblas forviÅi atributojn de OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "malmolspaceto (softspace) devas esti entjero"
+
+msgid "invalid attribute"
+msgstr "nevalida atributo"
+
 msgid "writelines() requires list of strings"
 msgstr "writelines() bezonas liston de Ä‰enoj"
 
 msgid "E264: Python: Error initialising I/O objects"
 msgstr "E264: Pitono: Eraro de pravalorizo de eneligaj objektoj"
 
-msgid "no such buffer"
-msgstr "ne estas tia bufro"
+msgid "empty keys are not allowed"
+msgstr "malplenaj Ålosiloj nepermeseblaj"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "ne eblas forviÅi atributojn de DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "Ne eblas ÅanÄi fiksan vortaron"
+
+msgid "Cannot set this attribute"
+msgstr "Ne eblas agordi tiun atributon"
+
+msgid "dict is locked"
+msgstr "vortaro estas Ålosita"
+
+msgid "failed to add key to dictionary"
+msgstr "aldono de Ålosilo al vortaro fiaskis"
+
+msgid "list index out of range"
+msgstr "indekso de listo ekster limoj"
+
+msgid "internal error: failed to get vim list item"
+msgstr "interna eraro: obteno de vim-a listero fiaskis"
+
+msgid "list is locked"
+msgstr "listo estas Ålosita"
+
+msgid "Failed to add item to list"
+msgstr "Aldono de listero fiaskis"
+
+msgid "internal error: no vim list item"
+msgstr "interna eraro: neniu vim-a listero"
+
+msgid "can only assign lists to slice"
+msgstr "nur eblas pravalorizi listojn al segmento"
+
+msgid "internal error: failed to add item to list"
+msgstr "interna eraro: aldono de listero fiaskis"
+
+msgid "can only concatenate with lists"
+msgstr "eblas nur kunmeti kun listoj"
+
+msgid "cannot delete vim.dictionary attributes"
+msgstr "ne eblas forviÅi atributojn de 'vim.dictionary'"
+
+msgid "cannot modify fixed list"
+msgstr "ne eblas ÅanÄi fiksan liston"
+
+msgid "cannot set this attribute"
+msgstr "ne eblas agordi tiun atributon"
+
+msgid "'self' argument must be a dictionary"
+msgstr "argumento 'self' devas esti vortaro"
+
+msgid "failed to run function"
+msgstr "fiaskis ruli funkcion"
+
+msgid "unable to get option value"
+msgstr "fiaskis akiri valoron de opcio"
+
+msgid "unable to unset global option"
+msgstr "ne povis malÅalti mallokan opcion"
+
+msgid "unable to unset option without global value"
+msgstr "ne povis malÅalti opcion sen malloka valoro"
+
+msgid "object must be integer"
+msgstr "objekto devas esti entjero."
+
+msgid "object must be string"
+msgstr "objekto devas esti Ä‰eno"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "provo de referenco al forviÅita langeto"
+
+#, c-format
+msgid "<tabpage object (deleted) at %p>"
+msgstr "<langeta objekto (forviÅita) Ä‰e %p>"
+
+#, c-format
+msgid "<tabpage object (unknown) at %p>"
+msgstr "<langeta objekto (nekonata) Ä‰e %p>"
+
+#, c-format
+msgid "<tabpage %d>"
+msgstr "<langeto %d>"
+
+msgid "no such tab page"
+msgstr "ne estas tia langeto"
 
 msgid "attempt to refer to deleted window"
 msgstr "provo de referenco al forviÅita fenestro"
@@ -6564,3 +6762,64 @@ msgstr "ne estas tia fenestro"
 
 msgid "attempt to refer to deleted buffer"
 msgstr "provo de referenco al forviÅita bufro"
+
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<bufra objekto (forviÅita) Ä‰e %p>"
+
+msgid "key must be integer"
+msgstr "Ålosilo devas esti entjero."
+
+msgid "expected vim.buffer object"
+msgstr "atendis objekton vim.buffer"
+
+msgid "failed to switch to given buffer"
+msgstr "ne povis salti al la specifita bufro"
+
+msgid "expected vim.window object"
+msgstr "atendis objekton vim.window"
+
+msgid "failed to find window in the current tab page"
+msgstr "ne povis trovi vindozon en la nuna langeto"
+
+msgid "did not switch to the specified window"
+msgstr "ne saltis al la specifita vindozo"
+
+msgid "expected vim.tabpage object"
+msgstr "atendis objekton vim.tabpage"
+
+msgid "did not switch to the specified tab page"
+msgstr "ne saltis al la specifita langeto"
+
+msgid "failed to run the code"
+msgstr "fiaskis ruli la kodon"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval ne revenis kun valida python-objekto"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: Konverto de revena python-objekto al vim-valoro fiaskis"
+
+msgid "unable to convert to vim structure"
+msgstr "ne povis konverti al vim-strukturo"
+
+msgid "NULL reference passed"
+msgstr "NULL-referenco argumento"
+
+msgid "internal error: invalid value type"
+msgstr "interna eraro: nevalida tipo de valoro"
+
+#~ msgid "E863: return value must be an instance of str"
+#~ msgstr "E863: elira valoro devas esti apero de str"
+
+#~ msgid "E860: Eval did not return a valid python 3 object"
+#~ msgstr "E860: Eval ne revenis kun valida python3-objekto"
+
+#~ msgid "E861: Failed to convert returned python 3 object to vim value"
+#~ msgstr "E861: Konverto de revena python3-objekto al vim-valoro fiaskis"
+
+#~ msgid "Only boolean objects are allowed"
+#~ msgstr "Nur buleaj objektoj estas permeseblaj"
+
+#~ msgid "no such key in dictionary"
+#~ msgstr "tiu Ålosilo ne ekzistas en vortaro"
index ed30f7a..5a916ca 100644 (file)
@@ -2806,24 +2806,6 @@ msgstr "Reemplazar &Todos"
 msgid "&Undo"
 msgstr "&Deshacer"
 
-#: gui_riscos.c:953
-#, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: No se pudo cargar el tipo de letra de impresión Zap '%s'"
-
-#: gui_riscos.c:1052
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: No se puede usar el tipo de letra de impresión %s"
-
-#: gui_riscos.c:3282
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Enviando mensaje para terminar los procesos dependientes (\"child\").\n"
-
 #: gui_w32.c:1177
 #, c-format
 msgid "E671: Cannot find window title \"%s\""
@@ -5814,10 +5796,6 @@ msgstr ""
 "E245: Carácter '%c' ilegal en el nombre del tipo de letra de\n"
 "impresión %s"
 
-#: os_riscos.c:1263
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: La opción \"osfiletype\" no es válida - usando Texto"
-
 #: os_unix.c:1065
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Señal doble, saliendo\n"
index 6a2a69a..5685d17 100644 (file)
@@ -367,7 +367,7 @@ msgstr "E684: Indeksi %ld luettelon rajojen ulkopuolella"
 
 #, c-format
 msgid "E121: Undefined variable: %s"
-msgstr "E121: Määrittelemätön muuttuja %s"
+msgstr "E121: Määrittelemätön muuttuja: %s"
 
 msgid "E111: Missing ']'"
 msgstr "E111: ] puuttuu"
@@ -392,7 +392,7 @@ msgstr "E715: Sanakirja tarvitaan"
 
 #, c-format
 msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Liikaa argumentteja funktiolle %s"
+msgstr "E118: Liikaa argumentteja funktiolle: %s"
 
 #, c-format
 msgid "E716: Key not present in Dictionary: %s"
@@ -1266,7 +1266,7 @@ msgstr "E179: -complete vaatii argumentin"
 
 #, c-format
 msgid "E181: Invalid attribute: %s"
-msgstr "E181: Virheellinen attribuutti %s"
+msgstr "E181: Virheellinen attribuutti: %s"
 
 msgid "E182: Invalid command name"
 msgstr "E182: Virheellinen komennon nimi"
@@ -2167,22 +2167,6 @@ msgid "&Undo"
 msgstr "&Kumoa"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zap-fontin latause ei onnistu %s"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Ei voi käyttää fonttia %s"
-
-# varmaan SIGTERM, ei SIGKILL tms.
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Lähetetään viestiä lapsiprosessien terminoimiseksi.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Ikkunan otsikkoa ei löydy %s"
 
@@ -2236,7 +2220,7 @@ msgstr "E253: Fontsetin nimi: %s\n"
 
 #, c-format
 msgid "Font0: %s\n"
-msgstr "Fontti0. %s\n"
+msgstr "Fontti0: %s\n"
 
 #, c-format
 msgid "Font1: %s\n"
@@ -2497,7 +2481,7 @@ msgstr ""
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
-msgstr "E625: ei voi avata csope-tietokantaa %s"
+msgstr "E625: ei voi avata cscope-tietokantaa: %s"
 
 msgid "E626: cannot get cscope database information"
 msgstr "E626: ei voi hakea cscope-tietokannan tietoja"
@@ -4468,9 +4452,6 @@ msgstr "E244: Virheellinen merkist
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Virheellinen merkki %c fontin nimessä %s"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Virheellinen osfiletype - käytetään Textiä"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Kaksoissignaali, lopetetaan\n"
 
@@ -5347,7 +5328,7 @@ msgstr "E397: Tiedostonimi puuttuu"
 
 #, c-format
 msgid "E789: Missing ']': %s"
-msgstr "E789: ] puuttuu; %s"
+msgstr "E789: ] puuttuu: %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
@@ -6192,11 +6173,11 @@ msgstr "E474: Virheellinen argumentti"
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475: Virheellinen argumentti %s"
+msgstr "E475: Virheellinen argumentti: %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
-msgstr "E15: Virheellinen ilmaus %s"
+msgstr "E15: Virheellinen ilmaus: %s"
 
 msgid "E16: Invalid range"
 msgstr "E16: Virheellinen arvoalue"
index 9d5035a..171b14a 100644 (file)
@@ -6,7 +6,7 @@
 #  FIRST AUTHOR  DindinX         <David.Odin@bigfoot.com>     2000.
 # SECOND AUTHOR  Adrien Beau     <version.francaise@free.fr>  2002, 2003.
 #  THIRD AUTHOR  David Blanchet  <david.blanchet@free.fr>     2006, 2008.
-# FOURTH AUTHOR  Dominique Pellé <dominique.pelle@gmail.com>  2008, 2010.
+# FOURTH AUTHOR  Dominique Pellé <dominique.pelle@gmail.com>  2008, 2013.
 #
 # Latest translation available at:
 #   http://dominique.pelle.free.fr/vim-fr.php
@@ -15,10 +15,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vim(Français)\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 21:08+0200\n"
-"PO-Revision-Date: 2010-08-06 21:31+0200\n"
+"POT-Creation-Date: 2013-05-27 04:55+0200\n"
+"PO-Revision-Date: 2013-05-27 10:22+0200\n"
 "Last-Translator: Dominique Pellé <dominique.pelle@gmail.com>\n"
 "Language-Team: \n"
+"Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO_8859-15\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -45,6 +46,9 @@ msgstr "[Liste des emplacements]"
 msgid "[Quickfix List]"
 msgstr "[Liste Quickfix]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Des autocommandes ont causé la terminaison de la commande"
+
 # AB - Il faut respecter l'esprit plus que la lettre.
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Aucun tampon ne peut Ãªtre alloué, Vim doit s'arrêter"
@@ -201,7 +205,6 @@ msgstr "Bas"
 msgid "Top"
 msgstr "Haut"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -353,6 +356,12 @@ msgstr " Compl
 msgid "Hit end of paragraph"
 msgstr "Fin du paragraphe"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: La fonction de complètement a changé la fenêtre"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: La fonction de complètement a effacé du texte"
+
 msgid "'dictionary' option is empty"
 msgstr "L'option 'dictionary' est vide"
 
@@ -634,6 +643,9 @@ msgstr "E725: Appel d'une fonction 
 msgid "E808: Number or Float required"
 msgstr "E808: Nombre ou Flottant requis"
 
+msgid "add() argument"
+msgstr "argument de add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Trop d'arguments"
 
@@ -650,10 +662,19 @@ msgstr "E785: complete() n'est utilisable que dans le mode Insertion"
 msgid "&Ok"
 msgstr "&Ok"
 
+msgid "extend() argument"
+msgstr "argument de extend()"
+
 #, c-format
 msgid "E737: Key already exists: %s"
 msgstr "E737: un mappage existe déjà pour %s"
 
+msgid "map() argument"
+msgstr "argument de map()"
+
+msgid "filter() argument"
+msgstr "argument de filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld lignes : "
@@ -674,6 +695,9 @@ msgstr ""
 msgid "called inputrestore() more often than inputsave()"
 msgstr "inputrestore() a Ã©té appelé plus de fois qu'inputsave()"
 
+msgid "insert() argument"
+msgstr "argument de insert()"
+
 msgid "E786: Range not allowed"
 msgstr "E786: Les plages ne sont pas autorisées"
 
@@ -702,13 +726,22 @@ msgstr "E241: L'envoi au serveur %s 
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Impossible de lire la réponse du serveur"
 
+msgid "remove() argument"
+msgstr "argument de remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Trop de liens symboliques (cycle ?)"
 
+msgid "reverse() argument"
+msgstr "argument de reverse()"
+
 # AB - La version française est meilleure que la version anglaise.
 msgid "E258: Unable to send to client"
 msgstr "E258: La réponse n'a pas pu Ãªtre envoyée au client"
 
+msgid "sort() argument"
+msgstr "argument de sort()"
+
 msgid "E702: Sort compare function failed"
 msgstr "E702: La fonction de comparaison de sort() a Ã©choué"
 
@@ -742,14 +775,6 @@ msgstr "E731: Utilisation d'un Dictionnaire comme une Cha
 msgid "E806: using Float as a String"
 msgstr "E806: Utilisation d'un Flottant comme une Chaîne"
 
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Le nom d'une Funcref doit commencer par une majuscule : %s"
-
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Le nom d'une variable entre en conflit avec la fonction %s"
-
 # DB : On doit pouvoir trouver nettement mieux que Ã§a.
 #, c-format
 msgid "E706: Variable type mismatch for: %s"
@@ -760,6 +785,14 @@ msgid "E795: Cannot delete variable %s"
 msgstr "E795: Impossible de supprimer la variable %s"
 
 #, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: Le nom d'une Funcref doit commencer par une majuscule : %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Le nom d'une variable entre en conflit avec la fonction %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: La valeur de %s est verrouillée"
 
@@ -784,10 +817,17 @@ msgstr "E123: Fonction non d
 msgid "E124: Missing '(': %s"
 msgstr "E124: Il manque '(' après %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: Impossible d'utiliser g: ici"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Argument invalide : %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Nom d'argument dupliqué : %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Il manque :endfunction"
 
@@ -979,7 +1019,6 @@ msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Ce fichier viminfo a Ã©té généré par Vim %s.\n"
 
 # AB - Les deux versions, bien que différentes, se valent.
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -987,7 +1026,6 @@ msgstr ""
 "# Vous pouvez l'éditer, mais soyez prudent.\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# 'encoding' dans lequel ce fichier a Ã©té Ã©crit\n"
 
@@ -1129,13 +1167,16 @@ msgstr "E148: :global doit 
 msgid "Pattern found in every line: %s"
 msgstr "Motif trouvé dans toutes les lignes : %s"
 
+#, c-format
+msgid "Pattern not found: %s"
+msgstr "Motif introuvable: %s"
+
 # AB - Ne pas traduire le dollar.
 # AB - Ce message n'est volontairement pas traduit. En effet, il fait partie
 #      d'un groupe de trois messages dans viminfo, dont deux ne sont pas soumis
 #      Ã  internationalisation. J'attends que les deux autres messages soient
 #      traduisibles pour traduire celui-ci.
 # DB - TODO : Qu'en est-il Ã  présent ?
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1465,6 +1506,10 @@ msgstr "E182: Nom de commande invalide"
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: Les commandes utilisateur doivent commencer par une majuscule"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841: Nom réservé, ne peux pas Ãªtre utilisé pour une commande utilisateur"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Aucune commande %s définie par l'utilisateur"
@@ -1483,8 +1528,8 @@ msgid "unknown"
 msgstr "inconnu"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Impossible de trouver le jeu de couleurs %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Impossible de trouver le jeu de couleurs '%s'"
 
 msgid "Greetings, Vim user!"
 msgstr "Bienvenue, utilisateur de Vim !"
@@ -1583,6 +1628,9 @@ msgstr "E497: Aucune correspondance d'autocommande 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: Aucun nom de fichier :source Ã  substituer Ã  \"<sfile>\""
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: aucun numéro de ligne Ã  utiliser pour \"<slnum>\""
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: Nom de fichier vide pour '%' ou '#', ne marche qu'avec \":p:h\""
@@ -1752,7 +1800,7 @@ msgid "E199: Active window or buffer deleted"
 msgstr "E199: Fenêtre ou tampon actif effacé"
 
 msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E812: Des autocommandes on changé le tampon ou le nom du tampon"
+msgstr "E812: Des autocommandes ont changé le tampon ou le nom du tampon"
 
 msgid "Illegal file name"
 msgstr "Nom de fichier invalide"
@@ -1823,6 +1871,9 @@ msgstr "[NON converti]"
 msgid "[converted]"
 msgstr "[converti]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[chiffré]"
 
@@ -2010,6 +2061,7 @@ msgstr "1 caract
 msgid "%lld characters"
 msgstr "%lld caractères"
 
+#. Explicit typecast avoids warning on Mac OS X 10.6
 #, c-format
 msgid "%ld characters"
 msgstr "%ld caractères"
@@ -2162,7 +2214,7 @@ msgid "E220: Missing }."
 msgstr "E220: } manquant."
 
 msgid "E490: No fold found"
-msgstr "E490: Aucune repli trouvé"
+msgstr "E490: Aucun repli trouvé"
 
 msgid "E350: Cannot create fold with current 'foldmethod'"
 msgstr "E350: Impossible de créer un repli avec la 'foldmethod'e actuelle"
@@ -2205,6 +2257,15 @@ msgstr "Aucun mappage trouv
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap : mode invalide"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr ""
+"E851: Ã‰chec lors de la création d'un nouveau processus pour l'interface "
+"graphique"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr ""
+"E852: Le processus fils n'a pas réussi Ã  démarrer l'interface graphique"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Impossible de démarrer l'interface graphique"
 
@@ -2369,21 +2430,6 @@ msgid "&Undo"
 msgstr "Ann&uler"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Impossible de charger la police Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Impossible d'utiliser la police %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Envoi d'un message pour interrompre le processus fils.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Titre de fenêtre \"%s\" introuvable"
 
@@ -2703,7 +2749,7 @@ msgid ""
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: Trouver les fonctions appelant cette fonction\n"
@@ -2713,7 +2759,7 @@ msgstr ""
 "       g: Trouver cette définition\n"
 "       i: Trouver les fichiers qui #incluent ce fichier\n"
 "       s: Trouver ce symbole C\n"
-"       t: Trouver les affectations Ã \n"
+"       t: Trouver cette chaîne\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2809,6 +2855,9 @@ msgstr "impossible d'ins
 msgid "string cannot contain newlines"
 msgstr "une chaîne ne peut pas contenir de saut-de-ligne"
 
+msgid "error converting Scheme values to Vim"
+msgstr "erreur lors de la conversion d'une valeur de Scheme Ã  Vim"
+
 msgid "Vim error: ~a"
 msgstr "Erreur Vim : ~a"
 
@@ -2828,10 +2877,10 @@ msgid "not allowed in the Vim sandbox"
 msgstr "non autorisé dans le bac Ã  sable"
 
 msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Python : impossible d'utiliser :py et :py3 dans la même session"
+msgstr "E836: Vim ne peut pas exécuter :python après avoir utilisé :py3"
 
-msgid "E837: This Vim cannot execute :py3 after using :python"
-msgstr "E837: Python : impossible d'utiliser :py et :py3 dans la même session"
+msgid "only string keys are allowed"
+msgstr "seule une chaine est autorisée comme clé"
 
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
@@ -2843,18 +2892,11 @@ msgstr ""
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Impossible d'invoquer Python récursivement"
 
-msgid "can't delete OutputObject attributes"
-msgstr "impossible d'effacer les attributs d'OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "softspace doit Ãªtre un nombre entier"
-
-msgid "invalid attribute"
-msgstr "attribut invalide"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Vim ne peut pas exécuter :py3 après avoir utilisé :python"
 
-#, c-format
-msgid "<buffer object (deleted) at %p>"
-msgstr "<objet tampon (effacé) Ã  %p>"
+msgid "index must be int or slice"
+msgstr "index doit Ãªtre int ou slice"
 
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_ doit Ãªtre une instance de chaîne (String)"
@@ -3044,11 +3086,6 @@ msgstr ""
 "E571: Désolé, commande désactivée: la bibliothèque Tcl n'a pas pu Ãªtre "
 "chargée."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ERREUR TCL: code de sortie non entier ?! Contactez vim-dev@vim.org, SVP"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: code de sortie %d"
@@ -3131,7 +3168,7 @@ msgid ""
 "More info with: \"vim -h\"\n"
 msgstr ""
 "\n"
-"Plus d'info avec: \"vim -h\"\n"
+"Plus d'info avec : \"vim -h\"\n"
 
 msgid "[file ..]       edit specified file(s)"
 msgstr "[fichier ...]  ouvrir le ou les fichiers spécifiés"
@@ -3208,6 +3245,9 @@ msgstr "-v\t\tMode Vi (comme \"vi\")"
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\tMode Ex (comme \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tMode Ex amélioré"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\tMode silencieux (batch) (seulement pour \"ex\")"
 
@@ -3408,12 +3448,6 @@ msgstr "-display <
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\tIconifier Vim au démarrage"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <nom>\t\tEmployer les ressources comme si Vim s'appelait <nom>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (non implémenté)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr ""
 "-background <coul>\tUtiliser <couleur> pour l'arrière-plan\t   (abrv : -bg)"
@@ -3456,19 +3490,6 @@ msgstr "-xrm <ressource>\tConfigurer la <ressource> sp
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Arguments reconnus par gvim (version RISC OS) :\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <nombre>\tNombre de colonnes initial de la fenêtre"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <nombre>\tNombre de lignes initial de la fenêtre"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3484,6 +3505,9 @@ msgstr "--role <r
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tOuvrir Vim dans un autre widget GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tGvim affiche l'ID de la fenêtre sur stdout"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <titre parent>\tOuvrir Vim dans une application parente"
 
@@ -3542,7 +3566,6 @@ msgstr ""
 "\n"
 "modif  ligne col fichier/texte"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3551,7 +3574,6 @@ msgstr ""
 "# Marques dans le fichier :\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3559,7 +3581,6 @@ msgstr ""
 "\n"
 "# Liste de sauts (le plus récent en premier) :\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3621,6 +3642,9 @@ msgstr "E298: Bloc n
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Bloc n°2 non récupéré ?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Erreur lors de la mise Ã  jour du fichier d'échange crypté"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Oups, le fichier d'échange a disparu !"
@@ -3984,24 +4008,20 @@ msgstr "      PLUS R
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
 "(1) Un autre programme est peut-être en train d'éditer ce fichier.\n"
 "    Si c'est le cas, faites attention Ã  ne pas vous retrouver avec\n"
-"    deux version différentes du même fichier en faisant des modifications.\n"
+"    deux versions différentes du même fichier en faisant des modifications."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Quittez, ou continuez prudemment.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Quittez, ou continuez prudemment.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Une session d'édition de ce fichier a planté.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Une session d'édition de ce fichier a planté.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Si c'est le cas, utilisez \":recover\" ou \"vim -r "
@@ -4236,7 +4256,6 @@ msgstr "Vim : pr
 msgid "Vim: Finished.\n"
 msgstr "Vim : Fini.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ERREUR : "
 
@@ -4295,6 +4314,9 @@ msgstr "Tapez la cl
 msgid "Keys don't match!"
 msgstr "Les clés ne correspondent pas !"
 
+msgid "E854: path too long for completion"
+msgstr "E854: chemin trop long pour complètement"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4339,11 +4361,15 @@ msgstr "read sur la socket Netbeans"
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Connexion NetBeans perdue pour le tampon %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans n'est pas supporté avec cette interface graphique"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans déjà connecté"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s est en lecture seule (ajoutez ! pour passer outre)"
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: Aucun identifiant sous le curseur"
@@ -4476,8 +4502,8 @@ msgid ""
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
 msgstr ""
-"%s%ld sur %ld Lignes ; %ld sur %ld Mots ; %ld sur %ld Caractères ; %ld sur %"
-"ld octets sélectionnés"
+"%s%ld sur %ld Lignes ; %ld sur %ld Mots ; %ld sur %ld Caractères ; %ld sur "
+"%ld octets sélectionnés"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
@@ -4489,8 +4515,8 @@ msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Colonne %s sur %s ; Ligne %ld sur %ld ; Mot %ld sur %ld ; Caractère %ld sur %"
-"ld ; Octet %ld sur %ld"
+"Colonne %s sur %s ; Ligne %ld sur %ld ; Mot %ld sur %ld ; Caractère %ld sur "
+"%ld ; Octet %ld sur %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4511,6 +4537,9 @@ msgstr "E519: Option non support
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Non autorisé dans une ligne de mode"
 
+msgid "E846: Key code not set"
+msgstr "E846: Le code de touche n'est pas configuré"
+
 msgid "E521: Number required after ="
 msgstr "E521: Nombre requis après ="
 
@@ -4748,9 +4777,6 @@ msgstr "E244: Jeu de caract
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Caractère '%c' invalide dans le nom de fonte \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Option 'osfiletype' invalide - Text est utilisé"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim : Double signal, sortie\n"
 
@@ -4975,18 +5001,9 @@ msgstr "E777: Cha
 msgid "E369: invalid item in %s%%[]"
 msgstr "E369: Ã©lément invalide dans %s%%[]"
 
-msgid "E339: Pattern too long"
-msgstr "E339: Motif trop long"
-
-msgid "E50: Too many \\z("
-msgstr "E50: Trop de \\z("
-
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Trop de %s("
-
-msgid "E52: Unmatched \\z("
-msgstr "E52: Pas de correspondance pour \\z("
+msgid "E769: Missing ] after %s["
+msgstr "E769: ']' manquant après %s["
 
 #, c-format
 msgid "E53: Unmatched %s%%("
@@ -5000,6 +5017,19 @@ msgstr "E54: %s( ouvrante non ferm
 msgid "E55: Unmatched %s)"
 msgstr "E55: %s) fermante non ouverte"
 
+msgid "E339: Pattern too long"
+msgstr "E339: Motif trop long"
+
+msgid "E50: Too many \\z("
+msgstr "E50: Trop de \\z("
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: Trop de %s("
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: Pas de correspondance pour \\z("
+
 #, c-format
 msgid "E59: invalid character after %s@"
 msgstr "E59: caractère invalide après %s@"
@@ -5052,16 +5082,89 @@ msgid "E71: Invalid character after %s%%"
 msgstr "E71: Caractère invalide après %s%%"
 
 #, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: ']' manquant après %s["
-
-#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Erreur de syntaxe dans %s{...}"
 
 msgid "External submatches:\n"
 msgstr "Sous-correspondances externes :\n"
 
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr ""
+"E864: \\%#= peut Ãªtre suivi uniquement de 0, 1 ou 2. Le moteur automatique "
+"sera utilisé "
+
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (regexp NFA) %c au mauvais endroit"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) Fin de regexp rencontrée prématurément"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) Opérateur inconnu '\\z%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: Erreur lors de la construction du NFA avec classe d'équivalence"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) Opérateur inconnu '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (regexp NFA) Erreur Ã  la lecture des limites de répétition"
+
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (regexp NFA) Un multi ne peut pas suivre un multi !"
+
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (regexp NFA) Trop de '('"
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (NFA regexp) erreur de terminaison"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) Impossible de dépiler !"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr ""
+"E875: (regexp NFA) (lors de la conversion de postfix Ã  NFA), il reste trop "
+"d'états sur la pile"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (regexp NFA) Pas assez de mémoire pour stocker le NFA"
+
+msgid "E999: (NFA regexp internal error) Should not process NOT node !"
+msgstr ""
+"E999: (erreur interne du regexp NFA) Un noeud 'NOT' ne devrait pas Ãªtre "
+"traité !"
+
+#. should not be here :P
+msgid "E877: (NFA regexp) Invalid character class "
+msgstr "E877: (regexp NFA) Classe de caractère invalide "
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) IMPOSSIBLE D'OUVRIR %s !"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr ""
+"Impossible d'ouvrir le fichier de log temporaire en Ã©criture, affichage sur "
+"stderr ... "
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr ""
+"E878: (NFA) Impossible d'allouer la mémoire pour parcourir les branches!"
+
+msgid "Could not open temporary log file for writing "
+msgstr "Impossible d'ouvrir le fichier de log en Ã©criture"
+
 msgid " VREPLACE"
 msgstr " VREMPLACEMENT"
 
@@ -5166,7 +5269,7 @@ msgid "All included files were found"
 msgstr "Tous les fichiers inclus ont Ã©té trouvés"
 
 msgid "No included files"
-msgstr "Aucun fichiers inclus"
+msgstr "Aucun fichier inclus"
 
 msgid "E388: Couldn't find definition"
 msgstr "E388: Impossible de trouver la définition"
@@ -5214,6 +5317,10 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: La vérification orthographique n'est pas activée"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "Alerte : Liste de mots \"%s_%s.spl\" ou \"%s_ascii.spl\" introuvable"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr "Alerte : Liste de mots \"%s.%s.spl\" ou \"%s.ascii.spl\" introuvable"
 
@@ -5235,7 +5342,7 @@ msgstr "E770: Section non support
 
 #, c-format
 msgid "Warning: region %s not supported"
-msgstr "Alerte : region %s non supportée"
+msgstr "Alerte : région %s non supportée"
 
 #, c-format
 msgid "Reading affix file %s ..."
@@ -5306,7 +5413,7 @@ msgstr ""
 
 #, c-format
 msgid "Duplicate affix in %s line %d: %s"
-msgstr "Affixe dupliquée dans %s ligne %d : %s"
+msgstr "Affixe dupliqué dans %s ligne %d : %s"
 
 #, c-format
 msgid ""
@@ -5441,6 +5548,9 @@ msgstr "Drapeaux non reconnus dans %s ligne %d : %s"
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "%d mot(s) ignoré(s) avec des caractères non-ASCII"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: mémoire insuffisante, liste de mots peut-être incomplète"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "%d noeuds compressés sur %d ; %d (%d%%) restants "
@@ -5506,7 +5616,7 @@ msgstr "Mot ajout
 
 msgid "E763: Word characters differ between spell files"
 msgstr ""
-"E763: Les caractères de mots diffèrent entre les fichier orthographiques"
+"E763: Les caractères de mots diffèrent entre les fichiers orthographiques"
 
 msgid "Sorry, no suggestions"
 msgstr "Désolé, aucune suggestion"
@@ -5624,8 +5734,8 @@ msgstr " coupures de ligne"
 msgid "E395: contains argument not accepted here"
 msgstr "E395: L'argument Â« contains Â» n'est pas accepté ici"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: L'argument Â« containedin Â» n'est pas accepté ici"
+msgid "E844: invalid cchar value"
+msgstr "E844: valeur de cchar invalide"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: L'argument Â« group[t]here Â» n'est pas accepté ici"
@@ -5637,6 +5747,9 @@ msgstr "E394: Aucun 
 msgid "E397: Filename required"
 msgstr "E397: Nom de fichier requis"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Trop d'inclusions de syntaxe"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: ']' manquant : %s"
@@ -5649,6 +5762,9 @@ msgstr "E398: '=' manquant : %s"
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Pas assez d'arguments : syntax region %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Trop de grappes de syntaxe"
+
 msgid "E400: No cluster specified"
 msgstr "E400: Aucune grappe spécifiée"
 
@@ -5754,6 +5870,9 @@ msgstr "E669: Caract
 msgid "W18: Invalid character in group name"
 msgstr "W18: Caractère invalide dans un nom de groupe"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Trop de groupes de surbrillance et de syntaxe"
+
 msgid "E555: at bottom of tag stack"
 msgstr "E555: En bas de la pile de marqueurs"
 
@@ -5814,6 +5933,9 @@ msgstr "Examen du fichier de marqueurs %s"
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Chemin de fichiers de marqueurs tronqué pour %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Ignore longue ligne dans le fichier de marqueurs"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: Erreur de format dans le fichier de marqueurs \"%s\""
@@ -5830,9 +5952,6 @@ msgstr "E432: Le fichier de marqueurs %s n'est pas ordonn
 msgid "E433: No tags file"
 msgstr "E433: Aucun fichier de marqueurs"
 
-msgid "Ignoring long line in tags file"
-msgstr "Ignore longue ligne dans le fichier de marqueurs"
-
 msgid "E434: Can't find tag pattern"
 msgstr "E434: Le motif de marqueur est introuvable"
 
@@ -5909,7 +6028,7 @@ msgstr ""
 
 #, c-format
 msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr "Le fichier d'annulations de sera pas Ã©crasé, impossible de lire : %s"
+msgstr "Le fichier d'annulations ne sera pas Ã©crasé, impossible de lire : %s"
 
 #, c-format
 msgid "Will not overwrite, this is not an undo file: %s"
@@ -6012,8 +6131,8 @@ msgid "Nothing to undo"
 msgstr "Rien Ã  annuler"
 
 # DB - Les deux premières colonnes sont alignées Ã  droite.
-msgid "number changes  time            saved"
-msgstr "numéro  modif.  instant         enregistré"
+msgid "number changes  when               saved"
+msgstr "numéro modif.   instant            enregistré"
 
 #, c-format
 msgid "%ld seconds ago"
@@ -6114,13 +6233,6 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"Version RISC OS"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6772,6 +6884,9 @@ msgstr "E139: Le fichier est charg
 msgid "E764: Option '%s' is not set"
 msgstr "E764: L'option '%s' n'est pas activée"
 
+msgid "E850: Invalid register name"
+msgstr "E850: Nom de registre invalide"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "La recherche a atteint le HAUT, et continue en BAS"
 
@@ -6782,14 +6897,110 @@ msgstr "La recherche a atteint le BAS, et continue en HAUT"
 msgid "Need encryption key for \"%s\""
 msgstr "Besoin de la clé de chiffrement pour \"%s\""
 
+msgid "can't delete OutputObject attributes"
+msgstr "impossible d'effacer les attributs d'OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "softspace doit Ãªtre un nombre entier"
+
+msgid "invalid attribute"
+msgstr "attribut invalide"
+
 msgid "writelines() requires list of strings"
 msgstr "writelines() requiert une liste de chaînes"
 
 msgid "E264: Python: Error initialising I/O objects"
 msgstr "E264: Python : Erreur d'initialisation des objets d'E/S"
 
-msgid "no such buffer"
-msgstr "Ce tampon n'existe pas"
+msgid "empty keys are not allowed"
+msgstr "les clés vides ne sont pas autorisées"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "Impossible d'effacer les attributs de DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "Impossible de modifier un dictionnaire fixe"
+
+msgid "Cannot set this attribute"
+msgstr "Impossible d'initialiser cet attribut"
+
+msgid "dict is locked"
+msgstr "dictionnaire est verrouillé"
+
+msgid "failed to add key to dictionary"
+msgstr "l'ajout de clé au dictionnaire a Ã©choué"
+
+msgid "list index out of range"
+msgstr "index de liste hors limites"
+
+msgid "internal error: failed to get vim list item"
+msgstr "erreur interne : accès Ã  un Ã©lément de liste a Ã©choué"
+
+msgid "list is locked"
+msgstr "liste verrouillée"
+
+msgid "Failed to add item to list"
+msgstr "Ajout Ã  la liste a Ã©choué"
+
+msgid "internal error: no vim list item"
+msgstr "erreur interne : pas d'élément de liste vim"
+
+msgid "can only assign lists to slice"
+msgstr "seules des tranches peuvent Ãªtre assignées aux listes"
+
+msgid "internal error: failed to add item to list"
+msgstr "erreur interne : ajout d'élément Ã  la liste a Ã©choué"
+
+msgid "can only concatenate with lists"
+msgstr "on ne peut que concaténer avec des listes"
+
+msgid "cannot delete vim.dictionary attributes"
+msgstr "impossible d'effacer les attributs de vim.dictionary"
+
+msgid "cannot modify fixed list"
+msgstr "impossible de modifier une liste fixe"
+
+msgid "cannot set this attribute"
+msgstr "impossible d'initialiser cet attribut"
+
+msgid "'self' argument must be a dictionary"
+msgstr "l'argument 'self' doit Ãªtre un dictionnaire"
+
+msgid "failed to run function"
+msgstr "exécution de la fonction a Ã©choué"
+
+msgid "unable to get option value"
+msgstr "impossible d'obtenir la valeur d'une option"
+
+msgid "unable to unset global option"
+msgstr "impossible de désactiver une option globale"
+
+msgid "unable to unset option without global value"
+msgstr "impossible de désactiver une option sans une valeur globale"
+
+msgid "object must be integer"
+msgstr "objet doit Ãªtre un nombre entier"
+
+msgid "object must be string"
+msgstr "objet doit Ãªtre de type string"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "tentative de référencer un onglet effacé"
+
+#, c-format
+msgid "<tabpage object (deleted) at %p>"
+msgstr "<objet onglet (effacé) Ã  %p>"
+
+#, c-format
+msgid "<tabpage object (unknown) at %p>"
+msgstr "<objet onglet (inconnu) Ã  %p>"
+
+#, c-format
+msgid "<tabpage %d>"
+msgstr "<onglet %d>"
+
+msgid "no such tab page"
+msgstr "cet onglet n'existe pas"
 
 msgid "attempt to refer to deleted window"
 msgstr "tentative de référencer une fenêtre effacée"
@@ -6817,3 +7028,64 @@ msgstr "Cette fen
 
 msgid "attempt to refer to deleted buffer"
 msgstr "tentative de référencer un tampon effacé"
+
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<objet tampon (effacé) Ã  %p>"
+
+msgid "key must be integer"
+msgstr "la clé doit Ãªtre un nombre entier"
+
+msgid "expected vim.buffer object"
+msgstr "objet vim.buffer attendu"
+
+msgid "failed to switch to given buffer"
+msgstr "impossible de se déplacer au tampon donné"
+
+msgid "expected vim.window object"
+msgstr "objet vim.window attendu"
+
+msgid "failed to find window in the current tab page"
+msgstr "impossible de trouver une fenêtre dans l'onglet courant"
+
+msgid "did not switch to the specified window"
+msgstr "ne s'est pas déplacé Ã  la fenêtre spécifiée"
+
+msgid "expected vim.tabpage object"
+msgstr "objet vim.tabpage attendu"
+
+msgid "did not switch to the specified tab page"
+msgstr "impossible de se déplacer Ã  l'onglet spécifié"
+
+msgid "failed to run the code"
+msgstr "exécution du code a Ã©choué"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval n'a pas retourné un objet python valide"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: Conversion d'objet python Ã  une valeur de vim a Ã©choué"
+
+msgid "unable to convert to vim structure"
+msgstr "conversion Ã  une structure vim impossible"
+
+msgid "NULL reference passed"
+msgstr "référence NULL passée"
+
+msgid "internal error: invalid value type"
+msgstr "erreur interne : type de valeur invalide"
+
+#~ msgid "E860: Eval did not return a valid python 3 object"
+#~ msgstr "E860: Eval n'a pas retourné un object python 3 valid"
+
+#~ msgid "E861: Failed to convert returned python 3 object to vim value"
+#~ msgstr "E861: Conversion d'objet python 3 Ã  une valeur de vim a Ã©choué"
+
+#~ msgid "E863: return value must be an instance of str"
+#~ msgstr "E863: valeur de retour doit Ãªtre une instance de Str"
+
+#~ msgid "Only boolean objects are allowed"
+#~ msgstr "Seuls les objets booléens sont autorisés"
+
+#~ msgid "no such key in dictionary"
+#~ msgstr "cette clé est inexistante dans le dictionnaire"
index ea35770..d0c5821 100644 (file)
@@ -2141,21 +2141,6 @@ msgid "&Undo"
 msgstr "&Cealaigh"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Ní féidir an chlófhoireann Zap '%s' a luchtú"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Ní féidir an chlófhoireann %s a Ãºsáid"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Ag seoladh teachtaireachta chun an macphróiseas a stopadh.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Ní féidir teideal na fuinneoige \"%s\" a aimsiú"
 
@@ -4476,9 +4461,6 @@ msgstr ""
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Carachtar neamhcheadaithe '%c' mar pháirt d'ainm cló \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Rogha neamhbhailí 'osfiletype' - ag baint Ãºsáid as `Text'"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Comhartha dúbailte, ag scor\n"
 
index baf7231..aabd20e 100644 (file)
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vim 7.3\n"
+"Project-Id-Version: vim 7.4b\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-09 12:53+0200\n"
-"PO-Revision-Date:  2010-08-09 21:00+0200\n"
+"POT-Creation-Date: 2013-07-29 16:11+0200\n"
+"PO-Revision-Date:  2013-08-03 17:14+0200\n"
 "Last-Translator:   Vlad Sandrini   <vlad.gently@gmail.com>\n"
 "Language-Team:     Italian"
 "                   Antonio Colombo <azc100@gmail.com>"
@@ -45,6 +45,9 @@ msgstr "[Lista Locazioni]"
 msgid "[Quickfix List]"
 msgstr "[Lista Quickfix]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Comando non completato a causa di autocomandi"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Non riesco ad allocare alcun buffer, esco..."
 
@@ -140,18 +143,18 @@ msgstr "[File nuovo]"
 msgid "[Read errors]"
 msgstr "[Errori in lettura]"
 
+msgid "[RO]"
+msgstr "[Sola Lettura]"
+
 msgid "[readonly]"
 msgstr "[in sola lettura]"
 
-#, c-format
 msgid "1 line --%d%%--"
 msgstr "1 linea --%d%%--"
 
-#, c-format
 msgid "%ld lines --%d%%--"
 msgstr "%ld linee --%d%%--"
 
-#, c-format
 msgid "line %ld of %ld --%d%%-- col "
 msgstr "linea %ld di %ld --%d%%-- col "
 
@@ -177,7 +180,6 @@ msgstr "Fon"
 msgid "Top"
 msgstr "Cim"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -303,6 +305,12 @@ msgstr " Completamento Keyword Locale (^N^P)"
 msgid "Hit end of paragraph"
 msgstr "Giunto alla fine del paragrafo"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: La funzione di completamento ha modificato la finestra"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: La funzione di completamento ha eliminato del testo"
+
 msgid "'dictionary' option is empty"
 msgstr "l'opzione 'dictionary' non Ã¨ impostata"
 
@@ -417,6 +425,10 @@ msgstr "E130: Funzione sconosciuta: %s"
 msgid "E461: Illegal variable name: %s"
 msgstr "E461: Nome di variabile non ammesso: %s"
 
+# nuovo
+msgid "E806: using Float as a String"
+msgstr "E806: uso di un numero con virgola come stringa"
+
 msgid "E687: Less targets than List items"
 msgstr "E687: Destinazioni più numerose degli elementi di Lista"
 
@@ -559,6 +571,9 @@ msgstr "E725: Chiamata di funzione dict in assenza di Dizionario: %s"
 msgid "E808: Number or Float required"
 msgstr "E808: Ci vuole un numero intero o con virgola"
 
+msgid "add() argument"
+msgstr "argomento di add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Troppi argomenti"
 
@@ -577,6 +592,15 @@ msgstr "&OK"
 msgid "E737: Key already exists: %s"
 msgstr "E737: Chiave già esistente: %s"
 
+msgid "extend() argument"
+msgstr "argomento di extend()"
+
+msgid "map() argument"
+msgstr "argomento di map()"
+
+msgid "filter() argument"
+msgstr "argomento di filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld linee: "
@@ -595,6 +619,9 @@ msgstr ""
 msgid "called inputrestore() more often than inputsave()"
 msgstr "inputrestore() chiamata più volte di inputsave()"
 
+msgid "insert() argument"
+msgstr "argomento di insert()"
+
 msgid "E786: Range not allowed"
 msgstr "E786: Intervallo non consentito"
 
@@ -620,12 +647,21 @@ msgstr "E241: Impossibile inviare a %s"
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Non riesco a leggere una risposta del server"
 
+msgid "remove() argument"
+msgstr "argomento di remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Troppi link simbolici (circolarità?)"
 
+msgid "reverse() argument"
+msgstr "argomento di reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: Impossibile inviare al client"
 
+msgid "sort() argument"
+msgstr "argomento di sort()"
+
 msgid "E702: Sort compare function failed"
 msgstr "E702: Funzione confronto nel sort non riuscita"
 
@@ -656,8 +692,13 @@ msgstr "E730: uso di Lista come Stringa"
 msgid "E731: using Dictionary as a String"
 msgstr "E731: uso di Dizionario come Stringa"
 
-msgid "E806: using Float as a String"
-msgstr "E806: uso di un numero con virgola come stringa"
+#, c-format
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: Tipo di variabile non corrispondente per: %s"
+
+#, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Non posso cancellare la variabile %s"
 
 #, c-format
 msgid "E704: Funcref variable name must start with a capital: %s"
@@ -669,14 +710,6 @@ msgid "E705: Variable name conflicts with existing function: %s"
 msgstr "E705: Nome di variabile in conflitto con una funzione esistente: %s"
 
 #, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: Tipo di variabile non corrispondente per: %s"
-
-#, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: Non posso cancellare la variabile %s"
-
-#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: Valore di %s non modificabile"
 
@@ -698,10 +731,17 @@ msgstr "E123: Funzione non definita: %s"
 msgid "E124: Missing '(': %s"
 msgstr "E124: Manca '(': %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: Non si può usare g: qui"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Argomento non ammesso: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Nome argomento duplicato: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Manca :endfunction"
 
@@ -846,7 +886,6 @@ msgstr "Scrivo file viminfo \"%s\""
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Questo file viminfo Ã¨ stato generato da Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -854,7 +893,6 @@ msgstr ""
 "# File modificabile, attento a quel che fai!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Valore di 'encoding' al momento della scrittura di questo file\n"
 
@@ -967,6 +1005,9 @@ msgid "Pattern found in every line: %s"
 msgstr "Espressione trovata su ogni linea: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "Espressione non trovata: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1271,6 +1312,9 @@ msgid "E183: User defined commands must start with an uppercase letter"
 msgstr ""
 "E183: I comandi definiti dall'utente devono iniziare con lettera maiuscola"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: Nome riservato, non usabile in un comando definito dall'utente"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Comando definito dall'utente %s inesistente"
@@ -1292,8 +1336,8 @@ msgid "unknown"
 msgstr "sconosciuto"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Non riesco a trovare schema colore %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Non riesco a trovare schema colore '%s'"
 
 msgid "Greetings, Vim user!"
 msgstr "Salve, utente Vim!"
@@ -1395,6 +1439,9 @@ msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr ""
 "E498: nessun nome di file :source trovato da sostituire per \"<sfile>\""
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: nessun numero di riga da usare per \"<slnum>\""
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: Un nome di file nullo per '%' o '#', va bene solo con \":p:h\""
@@ -1611,9 +1658,6 @@ msgstr "[socket]"
 msgid "[character special]"
 msgstr "[character special]"
 
-msgid "[RO]"
-msgstr "[Sola Lettura]"
-
 msgid "[CR missing]"
 msgstr "[manca CR]"
 
@@ -1626,6 +1670,9 @@ msgstr "[NON convertito]"
 msgid "[converted]"
 msgstr "[convertito]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[cifrato]"
 
@@ -2007,6 +2054,12 @@ msgstr "Non trovo il mapping"
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: modo non consentito"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Creazione di un nuovo processo fallita per la GUI"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Il processo figlio non Ã¨ riuscito a far partire la GUI"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Non posso inizializzare la GUI"
 
@@ -2167,21 +2220,6 @@ msgid "&Undo"
 msgstr "&U Disfa"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Non riesco a caricare il font Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Non riesco a usare il font %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Spedisco un messaggio per terminare il processo figlio.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Non trovo il titolo della finestra \"%s\""
 
@@ -2230,32 +2268,28 @@ msgid "Font '%s' is not fixed-width"
 msgstr "Il font '%s' non di larghezza fissa"
 
 #, c-format
-msgid "E253: Fontset name: %s\n"
-msgstr "E253: Nome fontset: %s\n"
+msgid "E253: Fontset name: %s"
+msgstr "E253: Nome fontset: %s"
 
 #, c-format
-msgid "Font0: %s\n"
-msgstr "Font0: %s\n"
+msgid "Font0: %s"
+msgstr "Font0: %s"
 
 #, c-format
-msgid "Font1: %s\n"
-msgstr "Font1: %s\n"
+msgid "Font1: %s"
+msgstr "Font1: %s"
 
 #, c-format
-msgid "Font%ld width is not twice that of font0\n"
-msgstr "La larghezza di font%ld non Ã¨ doppia di quella di font0\n"
+msgid "Font%ld width is not twice that of font0"
+msgstr "La larghezza di font%ld non Ã¨ doppia di quella di font0"
 
 #, c-format
-msgid "Font0 width: %ld\n"
-msgstr "Larghezza di Font0: %ld\n"
+msgid "Font0 width: %ld"
+msgstr "Larghezza di Font0: %ld"
 
 #, c-format
-msgid ""
-"Font1 width: %ld\n"
-"\n"
-msgstr ""
-"Larghezza di Font1: %ld\n"
-"\n"
+msgid "Font1 width: %ld"
+msgstr "Larghezza di Font1: %ld"
 
 msgid "Invalid font specification"
 msgstr "Specifica di font non valida"
@@ -2307,7 +2341,6 @@ msgstr "Pagina %d"
 msgid "No text to be printed"
 msgstr "Manca testo da stampare"
 
-#, c-format
 msgid "Printing page %d (%d%%)"
 msgstr "Sto stampando pagina %d (%d%%)"
 
@@ -2443,6 +2476,9 @@ msgstr "E566: Non riesco a creare pipes cscope"
 msgid "E622: Could not fork for cscope"
 msgstr "E622: Non riesco a fare fork per cscope"
 
+msgid "cs_create_connection setpgid failed"
+msgstr "cs_create_connection setpgid fallita"
+
 msgid "cs_create_connection exec failed"
 msgstr "cs_create_connection exec fallita"
 
@@ -2482,7 +2518,7 @@ msgid ""
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: Trova funzioni che chiamano questa\n"
@@ -2492,7 +2528,7 @@ msgstr ""
 "       g: Trova questa definizione\n"
 "       i: Trova file che #includono questo file\n"
 "       s: Trova questo simbolo C\n"
-"       t: Trova assegnazioni a\n"
+"       t: Trova questa stringa\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2586,6 +2622,9 @@ msgstr "non posso inserire la linea"
 msgid "string cannot contain newlines"
 msgstr "la stringa non può contenere caratteri 'A CAPO'"
 
+msgid "error converting Scheme values to Vim"
+msgstr "errore nel convertire i valori Scheme a Vim"
+
 msgid "Vim error: ~a"
 msgstr "Errore Vim: ~a"
 
@@ -2608,7 +2647,7 @@ msgid "E836: This Vim cannot execute :python after using :py3"
 msgstr "E836: Python: Impossibile usare :py e :py3 nella stessa sessione"
 
 msgid "E837: This Vim cannot execute :py3 after using :python"
-msgstr "E837: Python: Impossibile usare :py e :py3 nella stessa sessione"
+msgstr "E837: Impossibile usare ora :py3 dopo aver usato :python"
 
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
@@ -2620,55 +2659,12 @@ msgstr ""
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Python non può essere chiamato ricorsivamente"
 
-msgid "can't delete OutputObject attributes"
-msgstr "non riesco a cancellare gli attributi OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "softspace deve essere un numero intero"
-
-msgid "invalid attribute"
-msgstr "attributo non valido"
-
-msgid "attempt to refer to deleted buffer"
-msgstr "tentativo di referenza a buffer cancellato"
-
 msgid "line number out of range"
 msgstr "numero linea non nell'intervallo"
 
-#, c-format
-msgid "<buffer object (deleted) at %p>"
-msgstr "<buffer oggetto (cancellato) a %p>"
-
 msgid "invalid mark name"
 msgstr "nome di mark non valido"
 
-msgid "no such buffer"
-msgstr "buffer inesistente"
-
-msgid "attempt to refer to deleted window"
-msgstr "tentativo di referenza a una finestra cancellata"
-
-msgid "readonly attribute"
-msgstr "attributo 'readonly'"
-
-msgid "cursor position outside buffer"
-msgstr "posizione cursore fuori dal buffer"
-
-#, c-format
-msgid "<window object (deleted) at %p>"
-msgstr "<finestra oggetto (cancellata) a %p>"
-
-#, c-format
-msgid "<window object (unknown) at %p>"
-msgstr "<finestra oggetto (sconosciuta) a %p>"
-
-#, c-format
-msgid "<window %d>"
-msgstr "<finestra %d>"
-
-msgid "no such window"
-msgstr "finestra inesistente"
-
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_ deve essere un'istanza di String"
 
@@ -2840,7 +2836,7 @@ msgstr ""
 
 msgid "cannot register callback command: buffer/window reference not found"
 msgstr ""
-"non posso registrare comando callback: referenza a buffer/finestra "
+"non posso registrare comando callback: riferimento a buffer/finestra "
 "inesistente"
 
 msgid ""
@@ -2849,12 +2845,6 @@ msgstr ""
 "E571: Spiacente, comando non disponibile, non riesco a caricare libreria "
 "programmi Tcl."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ERRORE TCL: codice di ritorno non int!? Si prega notificare a vim-"
-"dev@vim.org"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: codice di uscita %d"
@@ -3010,6 +3000,9 @@ msgstr "-v\t\t\tModalit
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tModalità Ex (come \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tModalità Ex migliorata"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tModalità Silenziosa (batch) (solo per \"ex\")"
 
@@ -3207,12 +3200,6 @@ msgstr "-display <schermo>\tEsegui vim su <schermo>"
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\tInizia vim riducendolo ad icona"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <nome>\t\tUsa risorsa come se vim fosse <nome>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (Non implementato)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <colore>\tUsa <colore> come sfondo (anche: -bg)"
 
@@ -3252,19 +3239,6 @@ msgstr "-xrm <risorsa>\tImposta la risorsa specificata"
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Argomenti accettati da gvim (versione RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <numero>\tLarghezza iniziale finestra in colonne"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <numero>\tAltezza iniziale finestra in righe"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3281,6 +3255,9 @@ msgstr ""
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tApri Vim dentro un altro widget GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tStampa il Window ID su stdout"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <titolo padre>\tApri Vim in un'applicazione padre"
 
@@ -3339,7 +3316,6 @@ msgstr ""
 "\n"
 "modif linea  col testo"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3348,7 +3324,6 @@ msgstr ""
 "# File mark:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3356,7 +3331,6 @@ msgstr ""
 "\n"
 "# Jumplist (dai più recenti):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3415,6 +3389,9 @@ msgstr "E298: Non riesco a leggere blocco numero 1?"
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Non riesco a leggere blocco numero 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Errore aggiornando cifratura dello swap file"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ahimè, lo swap file Ã¨ perduto!!!"
@@ -3518,7 +3495,7 @@ msgid ""
 "If you wrote the text file after changing the crypt key press enter"
 msgstr ""
 "\n"
-"Se hai riscritto il file dopo aver cambio chiave di cifr., premi Invio"
+"Se hai riscritto il file dopo aver cambiato chiave di cifr., premi Invio"
 
 msgid ""
 "\n"
@@ -3773,24 +3750,20 @@ msgstr "      pi
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
 "(1) Un altro programma può essere in edit sullo stesso file.\n"
 "    Se Ã¨ così, attenzione a non trovarti con due versioni\n"
-"    differenti dello stesso file a cui vengono apportate modifiche.\n"
+"    differenti dello stesso file a cui vengono apportate modifiche."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Esci, o continua con prudenza.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Esci, o continua con prudenza.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Una sessione di edit per questo file Ã¨ finita male.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Una sessione di edit per questo file Ã¨ finita male.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Se Ã¨ così, usa \":recover\" oppure \"vim -r "
@@ -4022,7 +3995,6 @@ msgstr "Vim: preservo file...\n"
 msgid "Vim: Finished.\n"
 msgstr "Vim: Finito.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ERRORE: "
 
@@ -4081,6 +4053,9 @@ msgstr "Ribatti per conferma la stessa chiave: "
 msgid "Keys don't match!"
 msgstr "Le chiavi non corrispondono!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: percorso troppo lungo per il completamento"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4123,11 +4098,15 @@ msgstr "lettura da socket Netbeans"
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Connessione NetBeans persa per il buffer %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans non Ã¨ supportato con questa GUI"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans già connesso"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s Ã¨ in sola lettura (aggiungi ! per eseguire comunque)"
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: Nessun identificativo sotto il cursore"
@@ -4291,6 +4270,9 @@ msgstr "E519: Opzione non supportata"
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Non consentito in una 'modeline'"
 
+msgid "E846: Key code not set"
+msgstr "E846: Key code non impostato"
+
 msgid "E521: Number required after ="
 msgstr "E521: Ci vuole un numero dopo ="
 
@@ -4524,9 +4506,6 @@ msgstr "E244: Nome di charset non ammesso \"%s\" nel fonte di nome \"%s\""
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Carattere non ammesso '%c' nel font di nome \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Opzione 'osfiletype' non valida - uso 'Text'"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Segnale doppio, esco\n"
 
@@ -4534,7 +4513,6 @@ msgstr "Vim: Segnale doppio, esco\n"
 msgid "Vim: Caught deadly signal %s\n"
 msgstr "Vim: Intercettato segnale fatale %s\n"
 
-#, c-format
 msgid "Vim: Caught deadly signal\n"
 msgstr "Vim: Intercettato segnale fatale\n"
 
@@ -4678,26 +4656,21 @@ msgstr ""
 msgid "Vim Warning"
 msgstr "Avviso da Vim"
 
-#, c-format
 msgid "E372: Too many %%%c in format string"
 msgstr "E372: Troppi %%%c nella stringa di 'format'"
 
-#, c-format
 msgid "E373: Unexpected %%%c in format string"
 msgstr "E373: %%%c imprevisto nella stringa di 'format'"
 
 msgid "E374: Missing ] in format string"
 msgstr "E374: Manca ] nella stringa di 'format'"
 
-#, c-format
 msgid "E375: Unsupported %%%c in format string"
 msgstr "E375: %%%c non supportato nella stringa di 'format'"
 
-#, c-format
 msgid "E376: Invalid %%%c in format string prefix"
 msgstr "E376: %%%c non valido nel prefisso della stringa di 'format'"
 
-#, c-format
 msgid "E377: Invalid %%%c in format string"
 msgstr "E377: %%%c non valido nella stringa di 'format'"
 
@@ -4747,8 +4720,31 @@ msgid "E777: String or List expected"
 msgstr "E777: aspettavo Stringa o Lista"
 
 #, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: elemento non valido in %s%%[]"
+msgid "E769: Missing ] after %s["
+msgstr "E769: Manca ] dopo %s["
+
+msgid "E53: Unmatched %s%%("
+msgstr "E53: Senza riscontro: %s%%("
+
+#, c-format
+msgid "E54: Unmatched %s("
+msgstr "E54: Senza riscontro: %s("
+
+#, c-format
+msgid "E55: Unmatched %s)"
+msgstr "E55: Senza riscontro: %s)"
+
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( non consentito qui"
+
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 ecc. non consentiti qui"
+
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: Manca ] dopo %s%%["
+
+msgid "E70: Empty %s%%[]"
+msgstr "E70: %s%%[] vuoto"
 
 msgid "E339: Pattern too long"
 msgstr "E339: Espressione troppo lunga"
@@ -4764,18 +4760,6 @@ msgid "E52: Unmatched \\z("
 msgstr "E52: Senza riscontro: \\z("
 
 #, c-format
-msgid "E53: Unmatched %s%%("
-msgstr "E53: Senza riscontro: %s%%("
-
-#, c-format
-msgid "E54: Unmatched %s("
-msgstr "E54: Senza riscontro: %s("
-
-#, c-format
-msgid "E55: Unmatched %s)"
-msgstr "E55: Senza riscontro: %s)"
-
-#, c-format
 msgid "E59: invalid character after %s@"
 msgstr "E59: Carattere non ammesso dopo %s@"
 
@@ -4801,42 +4785,94 @@ msgstr "E64: %s%c senza nulla prima"
 msgid "E65: Illegal back reference"
 msgstr "E65: Riferimento all'indietro non ammesso"
 
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( non consentito qui"
-
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 ecc. non consentiti qui"
-
 msgid "E68: Invalid character after \\z"
 msgstr "E68: Carattere non ammesso dopo \\z"
 
-#, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: Manca ] dopo %s%%["
-
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: %s%%[] vuoto"
-
-#, c-format
 msgid "E678: Invalid character after %s%%[dxouU]"
 msgstr "E678: Carattere non valido dopo %s%%[dxouU]"
 
-#, c-format
 msgid "E71: Invalid character after %s%%"
 msgstr "E71: Carattere non ammesso dopo %s%%"
 
 #, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: Manca ] dopo %s["
-
-#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Errore sintattico in %s{...}"
 
 msgid "External submatches:\n"
 msgstr "Sotto-corrispondenze esterne:\n"
 
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr ""
+"E864: \\%#= può essere seguito solo da 0, 1 o 2. Sarà usato il motore automatico "
+
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (NFA regexp) %c fuori posto"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) Fine prematura dell'espressione regolare"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) Operatore sconosciuto '\\z%c'"
+
+msgid "E867: (NFA) Unknown operator '\\%%%c'"
+msgstr "E867: (NFA) Operatore sconosciuto '\\%%%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: Errore nel build di NFA con classe di equivalenza!"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) Operatore sconosciuto '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (NFA regexp) Errore nella lettura dei limiti di ripetizione"
+
+#. Can't have a multi follow a multi.
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (NFA regexp) Non si può avere multi dopo multi !"
+
+#. Too many `('
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (NFA regexp) Troppi '('"
+
+msgid "E879: (NFA regexp) Too many \\z("
+msgstr "E879: (NFA regexp) Troppi \\z("
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (NFA regexp) errore di terminazione corretta"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) Impossibile riprendere lo stack !"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr "E875: (NFA regexp) (Nella conversione da postfix a NFA), "
+"troppi stati lasciati sullo stack"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (NFA regexp) Non c'è spazio per immagazzinare l'intero NFA "
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (NFA) Non posso allocare memoria per il zigzag di ramo!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr ""
+"Non posso aprire il file temporaneo per la scrittura, mostro su stderr ... "
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) IMPOSSIBILE APRIRE %s !"
+
+msgid "Could not open temporary log file for writing "
+msgstr "Non posso aprire il log temporaneo in scrittura "
+
 msgid " VREPLACE"
 msgstr " V-SOSTITUISCI"
 
@@ -4988,6 +5024,10 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: Controllo ortografico non abilitato"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "Attenzione: Non trovo lista parole \"%s_%s.spl\" o \"%s_ascii.spl\""
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr "Attenzione: Non trovo lista parole \"%s.%s.spl\" o \"%s.ascii.spl\""
 
@@ -5212,7 +5252,9 @@ msgstr "Flag non riconosciuti in %s linea %d: %s"
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "%d parole con caratteri non-ASCII ignorate"
 
-#, c-format
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Memoria insufficiente, la lista parole sarà incompleta"
+
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "%d di %d nodi compressi; ne restano %d (%d%%)"
 
@@ -5326,6 +5368,9 @@ msgstr "E782: Errore leggendo il file .sug: %s"
 msgid "E783: duplicate char in MAP entry"
 msgstr "E783: carattere duplicato nell'elemento MAP"
 
+msgid "No Syntax items defined for this buffer"
+msgstr "Nessun elemento sintattico definito per questo buffer"
+
 #, c-format
 msgid "E390: Illegal argument: %s"
 msgstr "E390: Argomento non ammesso: %s"
@@ -5334,9 +5379,6 @@ msgstr "E390: Argomento non ammesso: %s"
 msgid "E391: No such syntax cluster: %s"
 msgstr "E391: 'cluster' sintattico inesistente: %s"
 
-msgid "No Syntax items defined for this buffer"
-msgstr "Nessun elemento sintattico definito per questo buffer"
-
 msgid "syncing on C-style comments"
 msgstr "sincronizzo i commenti nello stile C"
 
@@ -5389,8 +5431,8 @@ msgstr " interruzioni di linea"
 msgid "E395: contains argument not accepted here"
 msgstr "E395: contiene argomenti non accettati qui"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: argomento 'containedin' non accettato qui"
+msgid "E844: invalid cchar value"
+msgstr "E844: valore cchar non valido"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]here non ammesso qui"
@@ -5402,6 +5444,9 @@ msgstr "E394: Elemento di 'region' non trovato per %s"
 msgid "E397: Filename required"
 msgstr "E397: Nome file necessario"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Troppe inclusioni di sintassi"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: Manca ']': %s"
@@ -5414,6 +5459,9 @@ msgstr "E398: Manca '=': %s"
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Argomenti non sufficienti per: 'syntax region' %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Troppi 'cluster' sintattici"
+
 msgid "E400: No cluster specified"
 msgstr "E400: Nessun 'cluster' specificato"
 
@@ -5457,6 +5505,11 @@ msgstr "E409: Nome gruppo sconosciuto: %s"
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410: Sotto-comando :syntax non valido: %s"
 
+msgid ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+msgstr ""
+"  TOTALE     CONT.  CORRIS. PIU LENTO   MEDIA     NOME               MODELLO"
+
 msgid "E679: recursive loop loading syncolor.vim"
 msgstr "E679: ciclo ricorsivo nel caricamento di syncolor.vim"
 
@@ -5518,6 +5571,9 @@ msgstr "E669: Carattere non stampabile in un nome di gruppo"
 msgid "W18: Invalid character in group name"
 msgstr "W18: Carattere non ammesso in un nome di gruppo"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Troppi gruppi di evidenziazione e sintassi"
+
 msgid "E555: at bottom of tag stack"
 msgstr "E555: al fondo dello stack dei tag"
 
@@ -5578,6 +5634,9 @@ msgstr "Ricerca nel tag file %s"
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Percorso tag file troncato per %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Linea lunga ignorata nel tag file"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: Errore di formato nel tag file \"%s\""
@@ -5594,9 +5653,6 @@ msgstr "E432: Tag file non ordinato alfabeticamente: %s"
 msgid "E433: No tags file"
 msgstr "E433: Nessun tag file"
 
-msgid "Ignoring long line in tags file"
-msgstr "Linea lunga ignorata nel tag file"
-
 msgid "E434: Can't find tag pattern"
 msgstr "E434: Non riesco a trovare modello tag"
 
@@ -5768,8 +5824,8 @@ msgstr "dopo"
 msgid "Nothing to undo"
 msgstr "Nessuna modifica, Undo impossibile"
 
-msgid "number changes  time            saved"
-msgstr "numero modif.   ora             salv."
+msgid "number changes  when               saved"
+msgstr "numero modif.   quando             salv."
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5870,13 +5926,6 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"Versione RISC OS"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6164,7 +6213,6 @@ msgstr "Differenza con Vim"
 msgid "Edit with &Vim"
 msgstr "Apri con &Vim"
 
-#. Now concatenate
 msgid "Edit with existing Vim - "
 msgstr "Apri con Vim esistente - "
 
@@ -6517,6 +6565,9 @@ msgstr "E139: File gi
 msgid "E764: Option '%s' is not set"
 msgstr "E764: opzione '%s' non impostata"
 
+msgid "E850: Invalid register name"
+msgstr "E850: Nome registro non valido"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "raggiunta la CIMA nella ricerca, continuo dal FONDO"
 
@@ -6527,8 +6578,226 @@ msgstr "raggiunto il FONDO nella ricerca, continuo dalla CIMA"
 msgid "Need encryption key for \"%s\""
 msgstr "Serve una chiave di cifratura per \"%s\""
 
-msgid "writelines() requires list of strings"
-msgstr "writelines() richiede una lista di stringhe"
+#, c-format
+msgid "expected str() or unicode() instance, but got %s"
+msgstr "attesa istanza di str() o unicode(), trovato invece %s"
+
+#, c-format
+msgid "expected bytes() or str() instance, but got %s"
+msgstr "attesa istanza di bytes() o str(), trovato invece %s"
+
+#, c-format
+msgid ""
+"expected int(), long() or something supporting coercing to long(), but got %s"
+msgstr ""
+"atteso int(), long() o qualcosa che supporti forzatura a long(), trovato invece %s"
+
+#, c-format
+msgid "expected int() or something supporting coercing to int(), but got %s"
+msgstr "atteso int() o qualcosa che supporti forzatura a int(), trovato invece %s"
+
+msgid "value is too large to fit into C int type"
+msgstr "valore troppo grande per il tipo int del C"
+
+msgid "value is too small to fit into C int type"
+msgstr "valore troppo piccolo per il tipo int del C"
+
+msgid "number must be greater then zero"
+msgstr "il numero dev'essere maggiore di zero"
+
+msgid "number must be greater or equal to zero"
+msgstr "il numero dev'essere maggiore o uguale a zero"
+
+msgid "can't delete OutputObject attributes"
+msgstr "non riesco a cancellare gli attributi OutputObject"
+
+#, c-format
+msgid "invalid attribute: %s"
+msgstr "attributo non valido: %s"
 
 msgid "E264: Python: Error initialising I/O objects"
 msgstr "E264: Python: Errore di inizializzazione oggetti I/O"
+
+msgid "failed to change directory"
+msgstr "cambio directory non riuscito"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got %s"
+msgstr "atteso terzetto come risultato di imp.find_module(), trovato invece %s"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
+msgstr "atteso terzetto come risultato di imp.find_module(), trovato invece tuple di dimens. %d"
+
+msgid "internal error: imp.find_module returned tuple with NULL"
+msgstr "errore interno: imp.find_module restituisce tuple con NULL"
+
+msgid "cannot delete vim.Dictionary attributes"
+msgstr "non riesco a cancellare gli attributi vim.Dictionary"
+
+msgid "cannot modify fixed dictionary"
+msgstr "non posso modificare il dizionario fisso"
+
+#, c-format
+msgid "cannot set attribute %s"
+msgstr "non posso impostare attributo %s"
+
+msgid "hashtab changed during iteration"
+msgstr "hashtab cambiato durante l'iterazione"
+
+#, c-format
+msgid "expected sequence element of size 2, but got sequence of size %d"
+msgstr "atteso elemento sequenza di dimensione 2, trovata sequenza di dimensione %d"
+
+msgid "list constructor does not accept keyword arguments"
+msgstr "il costruttore di lista non accetta parole chiave come argomenti"
+
+msgid "list index out of range"
+msgstr "indice di lista non nell'intervallo"
+
+#. No more suitable format specifications in python-2.3
+#, c-format
+msgid "internal error: failed to get vim list item %d"
+msgstr "errore interno: non ho potuto ottenere l'elemento di vim list %d"
+
+msgid "failed to add item to list"
+msgstr "non ho potuto aggiungere un elemento alla lista"
+
+#, c-format
+msgid "internal error: no vim list item %d"
+msgstr "errore interno: non c'è un elemento di vim list %d"
+
+msgid "internal error: failed to add item to list"
+msgstr "errore interno: non ho potuto aggiungere un elemento alla lista"
+
+msgid "cannot delete vim.List attributes"
+msgstr "non riesco a cancellare gli attributi vim.List"
+
+msgid "cannot modify fixed list"
+msgstr "non posso modificare la lista fissa"
+
+#, c-format
+msgid "unnamed function %s does not exist"
+msgstr "la funzione anonima %s non esiste"
+
+#, c-format
+msgid "function %s does not exist"
+msgstr "la funzione %s non esiste"
+
+msgid "function constructor does not accept keyword arguments"
+msgstr "il costruttore di funzione non accetta parole chiave come argomenti"
+
+#, c-format
+msgid "failed to run function %s"
+msgstr "esecuzione non riuscita della funzione %s"
+
+msgid "unable to get option value"
+msgstr "impossibile ottenere il valore di opzione"
+
+msgid "internal error: unknown option type"
+msgstr "errore interno: tipo di opzione sconosciuto"
+
+msgid "problem while switching windows"
+msgstr "problema nel cambio finestra"
+
+#, c-format
+msgid "unable to unset global option %s"
+msgstr "impossibile deimpostare l'opzione globale %s"
+
+#, c-format
+msgid "unable to unset option %s which does not have global value"
+msgstr "impossibile deimpostare l'opzione %s che non ha un valore globale"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "tentativo di riferimento a linguetta cancellata"
+
+msgid "no such tab page"
+msgstr "linguetta inesistente"
+
+msgid "attempt to refer to deleted window"
+msgstr "tentativo di riferimento a una finestra cancellata"
+
+msgid "readonly attribute: buffer"
+msgstr "attributo in sola lettura: buffer"
+
+msgid "cursor position outside buffer"
+msgstr "posizione cursore fuori dal buffer"
+
+msgid "no such window"
+msgstr "finestra inesistente"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "tentativo di riferimento a buffer cancellato"
+
+msgid "failed to rename buffer"
+msgstr "cambio nome buffer non riuscito"
+
+msgid "mark name must be a single character"
+msgstr "il nome mark dev'essere un carattere singolo"
+
+#, c-format
+msgid "expected vim.Buffer object, but got %s"
+msgstr "atteso oggetto vim.Buffer, trovato %s"
+
+#, c-format
+msgid "failed to switch to buffer %d"
+msgstr "passaggio non riuscito al buffer %d"
+
+#, c-format
+msgid "expected vim.Window object, but got %s"
+msgstr "atteso oggetto vim.Window, trovato %s"
+
+msgid "failed to find window in the current tab page"
+msgstr "non Ã¨ stato possibile trovare la finestra nella pagina con linguette corrente"
+
+msgid "did not switch to the specified window"
+msgstr "passaggio alla finestra specificata non effettuato"
+
+#, c-format
+msgid "expected vim.TabPage object, but got %s"
+msgstr "atteso oggetto vim.TabPage, trovato %s"
+
+msgid "did not switch to the specified tab page"
+msgstr "passaggio alla linguetta specificata non effettuato"
+
+msgid "failed to run the code"
+msgstr "esecuzione del codice non riuscita"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval non ha restituito un oggetto python valido"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: Conversione non riuscita dell'oggetto python risultato a un valore vim"
+
+#, c-format
+msgid "unable to convert %s to vim dictionary"
+msgstr "impossibile convertire %s a dizionario vim"
+
+#, c-format
+msgid "unable to convert %s to vim structure"
+msgstr "impossibile convertire %s a struttura vim"
+
+msgid "internal error: NULL reference passed"
+msgstr "errore interno: passato riferimento NULL"
+
+msgid "internal error: invalid value type"
+msgstr "errore interno: tipo di valore non valido"
+
+msgid ""
+"Failed to set path hook: sys.path_hooks is not a list\n"
+"You should now do the following:\n"
+"- append vim.path_hook to sys.path_hooks\n"
+"- append vim.VIM_SPECIAL_PATH to sys.path\n"
+msgstr ""
+"Impostazione dell'ancora di percorso non riuscita: sys.path_hooks non Ã¨ una lista\n"
+"Dovresti fare così:\n"
+"- aggiungere vim.path_hook a vim.path_hooks\n"
+"- aggiungere vim.VIM_SPECIAL_PATH a sys.path\n"
+
+msgid ""
+"Failed to set path: sys.path is not a list\n"
+"You should now append vim.VIM_SPECIAL_PATH to sys.path"
+msgstr ""
+"Impostazione di percorso non riuscita: sys.path non Ã¨ una lista\n"
+"Dovresti aggiungere vim.VIM_SPECIAL_PATH a sys.path"
+
diff --git a/src/po/ja.euc-jp.po b/src/po/ja.euc-jp.po
new file mode 100644 (file)
index 0000000..49ae304
--- /dev/null
@@ -0,0 +1,6808 @@
+# Japanese translation for Vim                 vim:set foldmethod=marker:
+#
+# Do ":help uganda"  in Vim to read copying and usage conditions.
+# Do ":help credits" in Vim to see a list of people who contributed.
+#
+# Last Change: 2013 Jul 06
+#
+# Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
+# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+#
+# Generated from ja.po, DO NOT EDIT.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Vim 7.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-07-06 13:50+0900\n"
+"PO-Revision-Date: 2013-07-06 15:00+0900\n"
+"Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+"Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+"Language: Japanese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=euc-jp\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() Â¤Â¬Â¶ÃµÂ¥Ã‘¥¹¥ï¡¼¥É¤Ç¸Æ¤Ó½Ã¤µ¤ì¤Þ¤·¤¿"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: Blowfish°Å¹æ¤Î¥Ó¥Ã¥°/¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256¤Î¥Æ¥¹¥È¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Blowfish°Å¹æ¤Î¥Æ¥¹¥È¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "[Location List]"
+msgstr "[¾ì½ê¥ê¥¹¥È]"
+
+msgid "[Quickfix List]"
+msgstr "[Quickfix¥ê¥¹¥È]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: autocommand¤¬¥³¥Þ¥ó¥É¤ÎÄä»ß¤ò°ú¤­µ¯¤³¤·¤Þ¤·¤¿"
+
+msgid "E82: Cannot allocate any buffer, exiting..."
+msgstr "E82: Â¥Ã¥Ã¥Õ¥¡¤ò1¤Ä¤âºîÀ®¤Ç¤­¤Ê¤¤¤Î¤Ç, Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â¹..."
+
+msgid "E83: Cannot allocate buffer, using other one..."
+msgstr "E83: Â¥Ã¥Ã¥Õ¥¡¤òºîÀ®¤Ç¤­¤Ê¤¤¤Î¤Ç, Ã‚¾¤Î¤ò»ÈÃѤ·¤Þ¤¹..."
+
+msgid "E515: No buffers were unloaded"
+msgstr "E515: Â²Ã²ÃŠÃ¼Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E516: No buffers were deleted"
+msgstr "E516: ÂºÃ¯Â½Ã¼Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E517: No buffers were wiped out"
+msgstr "E517: Ã‡Ã‹Â´Ã¾Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "1 buffer unloaded"
+msgstr "1 Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬²òÊü¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "%d buffers unloaded"
+msgstr "%d Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬²òÊü¤µ¤ì¤Þ¤·¤¿"
+
+msgid "1 buffer deleted"
+msgstr "1 Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "%d buffers deleted"
+msgstr "%d Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿"
+
+msgid "1 buffer wiped out"
+msgstr "1 Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬ÇË´þ¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "%d buffers wiped out"
+msgstr "%d Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬ÇË´þ¤µ¤ì¤Þ¤·¤¿"
+
+msgid "E84: No modified buffer found"
+msgstr "E84: ÃŠÃ‘¹¹¤µ¤ì¤¿¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#. back where we started, didn't find anything.
+msgid "E85: There is no listed buffer"
+msgstr "E85: Â¥ÃªÂ¥Â¹Â¥ÃˆÃ‰Â½Â¼Â¨Â¤ÂµÂ¤Ã¬Â¤Ã«Â¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E86: Buffer %ld does not exist"
+msgstr "E86: Â¥Ã¥Ã¥Õ¥¡ %ld Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E87: Cannot go beyond last buffer"
+msgstr "E87: ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤ò±Û¤¨¤Æ°ÜÆ°¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E88: Cannot go before first buffer"
+msgstr "E88: ÂºÃ‡Â½Ã©Â¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤è¤êð¤Ø¤Ã°ÜÆ°¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E89: No write since last change for buffer %ld (add ! to override)"
+msgstr "E89: Â¥Ã¥Ã¥Õ¥¡ %ld Â¤ÃŽÃŠÃ‘¹¹¤ÃÊø¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (! Â¤Ã‡ÃŠÃ‘¹¹¤òÇË´þ)"
+
+msgid "E90: Cannot unload last buffer"
+msgstr "E90: ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤Ã²òÊü¤Ç¤­¤Þ¤»¤ó"
+
+msgid "W14: Warning: List of file names overflow"
+msgstr "W14: Â·Ã™Â¹Ã°: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤ÃŽÂ¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Â¬Ã„¹²á¤®¤Þ¤¹"
+
+#, c-format
+msgid "E92: Buffer %ld not found"
+msgstr "E92: Â¥Ã¥Ã¥Õ¥¡ %ld Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E93: More than one match for %s"
+msgstr "E93: %s Â¤Ã‹ÃŠÂ£Â¿Ã´Â¤ÃŽÂ³ÂºÃ…ö¤¬¤¢¤ê¤Þ¤·¤¿"
+
+#, c-format
+msgid "E94: No matching buffer for %s"
+msgstr "E94: %s Â¤Ã‹Â³ÂºÃ…ö¤¹¤ë¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#, c-format
+msgid "line %ld"
+msgstr "¹Ô %ld"
+
+msgid "E95: Buffer with this name already exists"
+msgstr "E95: Â¤Â³Â¤ÃŽÃŒÂ¾Ã°¤Î¥Ã¥Ã¥Õ¥¡¤Ã´û¤Ë¤¢¤ê¤Þ¤¹"
+
+msgid " [Modified]"
+msgstr " [Êѹ¹¤¢¤ê]"
+
+msgid "[Not edited]"
+msgstr "[̤ÊÔ½¸]"
+
+msgid "[New file]"
+msgstr "[¿·¥Õ¥¡¥¤¥ë]"
+
+msgid "[Read errors]"
+msgstr "[Æɹþ¥¨¥é¡¼]"
+
+msgid "[RO]"
+msgstr "[ÆÉÀì]"
+
+msgid "[readonly]"
+msgstr "[ÆɹþÀìÃÑ]"
+
+#, c-format
+msgid "1 line --%d%%--"
+msgstr "1 Â¹Ã” --%d%%--"
+
+#, c-format
+msgid "%ld lines --%d%%--"
+msgstr "%ld Â¹Ã” --%d%%--"
+
+#, c-format
+msgid "line %ld of %ld --%d%%-- col "
+msgstr "¹Ô %ld (ôÂΠ%ld) --%d%%-- col "
+
+msgid "[No Name]"
+msgstr "[̵̾]"
+
+#. must be a help buffer
+msgid "help"
+msgstr "¥Ø¥ë¥×"
+
+msgid "[Help]"
+msgstr "[¥Ø¥ë¥×]"
+
+msgid "[Preview]"
+msgstr "[¥×¥ì¥Ó¥å¡¼]"
+
+msgid "All"
+msgstr "ô¤Æ"
+
+msgid "Bot"
+msgstr "ËöÈø"
+
+msgid "Top"
+msgstr "ÀèƬ"
+
+msgid ""
+"\n"
+"# Buffer list:\n"
+msgstr ""
+"\n"
+"# Â¥Ã¥Ã¥Õ¥¡¥ê¥¹¥È:\n"
+
+msgid "[Scratch]"
+msgstr "[²¼½ñ¤­]"
+
+msgid ""
+"\n"
+"--- Signs ---"
+msgstr ""
+"\n"
+"--- Â¥ÂµÂ¥Â¤Â¥Ã³ ---"
+
+#, c-format
+msgid "Signs for %s:"
+msgstr "%s Â¤ÃŽÂ¥ÂµÂ¥Â¤Â¥Ã³:"
+
+#, c-format
+msgid "    line=%ld  id=%d  name=%s"
+msgstr "    Â¹Ã”=%ld  Â¼Â±ÃŠÃŒÂ»Ã’=%d  ÃŒÂ¾Ã°=%s"
+
+#, c-format
+msgid "E96: Can not diff more than %ld buffers"
+msgstr "E96: %ld Â°ÃŠÂ¾Ã¥Â¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤Ãdiff¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: Â°Ã¬Â»Ã¾Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃ†Ã‰Â¹Ã¾Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã½ñ¹þ¤¬¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E97: Cannot create diffs"
+msgstr "E97: ÂºÂ¹ÃŠÂ¬Â¤Ã²ÂºÃ®Ã€Â®Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³ "
+
+msgid "Patch file"
+msgstr "¥Ñ¥Ã¥Ã¥Õ¥¡¥¤¥ë"
+
+msgid "E816: Cannot read patch output"
+msgstr "E816: patch¤Î½ÃÎäòÆɹþ¤á¤Þ¤»¤ó"
+
+msgid "E98: Cannot read diff output"
+msgstr "E98: diff¤Î½ÃÎäòÆɹþ¤á¤Þ¤»¤ó"
+
+msgid "E99: Current buffer is not in diff mode"
+msgstr "E99: Â¸Â½ÂºÃŸÂ¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤Ãº¹Ê¬¥â¡¼¥É¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: ÂºÂ¹ÃŠÂ¬Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Â¢Â¤Ã«Ã‚¾¤Î¥Ã¥Ã¥Õ¥¡¤ÃÊѹ¹²Äǽ¤Ç¤¹"
+
+msgid "E100: No other buffer in diff mode"
+msgstr "E100: ÂºÂ¹ÃŠÂ¬Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Â¢Â¤Ã«Ã‚¾¤Î¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E101: More than two buffers in diff mode, don't know which one to use"
+msgstr ""
+"E101: ÂºÂ¹ÃŠÂ¬Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤¬2¸Ä°Ê¾å¤¢¤ë¤Î¤Ç¡¢¤É¤ì¤ò»È¤¦¤«ÆÃÄê¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E102: Can't find buffer \"%s\""
+msgstr "E102: Â¥Ã¥Ã¥Õ¥¡ \"%s\" Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E103: Buffer \"%s\" is not in diff mode"
+msgstr "E103: Â¥Ã¥Ã¥Õ¥¡ \"%s\" Â¤Ãº¹Ê¬¥â¡¼¥É¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: Ã½´ü¤»¤º¥Ã¥Ã¥Õ¥¡¤¬Êѹ¹Êѹ¹¤µ¤ì¤Þ¤·¤¿"
+
+msgid "E104: Escape not allowed in digraph"
+msgstr "E104: Â¹Ã§Â»ÃºÂ¤Ã‹Escape¤Ã»ÈÃѤǤ­¤Þ¤»¤ó"
+
+msgid "E544: Keymap file not found"
+msgstr "E544: Â¥Â­Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+msgid "E105: Using :loadkeymap not in a sourced file"
+msgstr "E105: :source Â¤Ã‡Â¼Ã¨Â¹Ã¾Â¤Ã Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â°ÃŠÂ³Â°Â¤Ã‡Â¤Ã :loadkeymap Â¤Ã²Â»ÃˆÂ¤Â¨Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E791: Empty keymap entry"
+msgstr "E791: Â¶ÃµÂ¤ÃŽÂ¥Â­Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥Ã—¥¨¥ó¥È¥ê"
+
+msgid " Keyword completion (^N^P)"
+msgstr " Â¥Â­Â¡Â¼Â¥Ã¯Â¡Â¼Â¥Ã‰ÃŠÃ¤Â´Â° (^N^P)"
+
+#. ctrl_x_mode == 0, ^P/^N compl.
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " ^X Â¥Ã¢Â¡Â¼Â¥Ã‰ (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+
+msgid " Whole line completion (^L^N^P)"
+msgstr " Â¹Ã”(ôÂÎ)Êä´° (^L^N^P)"
+
+msgid " File name completion (^F^N^P)"
+msgstr "¥Õ¥¡¥¤¥ë̾Êä´° (^F^N^P)"
+
+msgid " Tag completion (^]^N^P)"
+msgstr " Â¥Â¿Â¥Â°ÃŠÃ¤Â´Â° (^]^N^P)"
+
+msgid " Path pattern completion (^N^P)"
+msgstr " Â¥Ã‘¥¹¥Ñ¥¿¡¼¥óÊä´° (^N^P)"
+
+msgid " Definition completion (^D^N^P)"
+msgstr " Ã„êµÃÊä´° (^D^N^P)"
+
+msgid " Dictionary completion (^K^N^P)"
+msgstr " Â¼Â­Â½Ã±ÃŠÃ¤Â´Â° (^K^N^P)"
+
+msgid " Thesaurus completion (^T^N^P)"
+msgstr " Â¥Â·Â¥Â½Â¡Â¼Â¥Ã©Â¥Â¹ÃŠÃ¤Â´Â° (^T^N^P)"
+
+msgid " Command-line completion (^V^N^P)"
+msgstr " Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¥Ã©Â¥Â¤Â¥Ã³ÃŠÃ¤Â´Â° (^V^N^P)"
+
+msgid " User defined completion (^U^N^P)"
+msgstr " Â¥Ã¦Â¡Â¼Â¥Â¶Ã„êµÃÊä´° (^U^N^P)"
+
+msgid " Omni completion (^O^N^P)"
+msgstr " Â¥ÂªÂ¥Ã Â¥Ã‹ÃŠÃ¤Â´Â° (^O^N^P)"
+
+msgid " Spelling suggestion (s^N^P)"
+msgstr " Ã„֤꽤Àµ¸õÊä (s^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " Â¶Ã‰Â½ÃªÂ¥Â­Â¡Â¼Â¥Ã¯Â¡Â¼Â¥Ã‰ÃŠÃ¤Â´Â° (^N^P)"
+
+msgid "Hit end of paragraph"
+msgstr "ÃÊÃî¤ÎºÇ¸å¤Ë¥Ò¥Ã¥È"
+
+msgid "E839: Completion function changed window"
+msgstr "E839: ÃŠÃ¤Â´Ã–´Ø¿ô¤¬¥¦¥£¥ó¥É¥¦¤òÊѹ¹¤·¤Þ¤·¤¿"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: ÃŠÃ¤Â´Â°Â´Ã˜Â¿Ã´Â¤Â¬Â¥Ã†Â¥Â­Â¥Â¹Â¥ÃˆÂ¤Ã²ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "'dictionary' option is empty"
+msgstr "'dictionary' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬¶õ¤Ç¤¹"
+
+msgid "'thesaurus' option is empty"
+msgstr "'thesaurus' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬¶õ¤Ç¤¹"
+
+#, c-format
+msgid "Scanning dictionary: %s"
+msgstr "¼­½ñ¤ò¥¹¥­¥ã¥óÃæ: %s"
+
+msgid " (insert) Scroll (^E/^Y)"
+msgstr " (ÃÞÆþ) Â¥Â¹Â¥Â¯Â¥Ã­Â¡Â¼Â¥Ã«(^E/^Y)"
+
+msgid " (replace) Scroll (^E/^Y)"
+msgstr " (ÃÖ´¹) Â¥Â¹Â¥Â¯Â¥Ã­Â¡Â¼Â¥Ã« (^E/^Y)"
+
+#, c-format
+msgid "Scanning: %s"
+msgstr "¥¹¥­¥ã¥óÃæ: %s"
+
+msgid "Scanning tags."
+msgstr "¥¿¥°¤ò¥¹¥­¥ã¥óÃæ."
+
+msgid " Adding"
+msgstr " Ã„ɲÃÃæ"
+
+#. showmode might reset the internal line pointers, so it must
+#. * be called before line = ml_get(), or when this address is no
+#. * longer needed.  -- Acevedo.
+#.
+msgid "-- Searching..."
+msgstr "-- Â¸Â¡ÂºÃ·ÃƒÃ¦..."
+
+msgid "Back at original"
+msgstr "»Ã¤á¤ËÌá¤ë"
+
+msgid "Word from other line"
+msgstr "¾¤Î¹Ô¤Îñ¸ì"
+
+msgid "The only match"
+msgstr "ã°ì¤Î³ºÅö"
+
+#, c-format
+msgid "match %d of %d"
+msgstr "%d ÃˆÃ–ÌܤγºÅö (ô³ºÅö %d Â¸Ã„Ãæ)"
+
+#, c-format
+msgid "match %d"
+msgstr "%d ÃˆÃ–ÌܤγºÅö"
+
+msgid "E18: Unexpected characters in :let"
+msgstr "E18: Ã½´ü¤»¤Ìʸ»ú¤¬ :let Â¤Ã‹Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+
+#, c-format
+msgid "E684: list index out of range: %ld"
+msgstr "E684: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ¤ÃŽÂ¥Â¤Â¥Ã³Â¥Ã‡Â¥ÃƒÂ¥Â¯Â¥Â¹Â¤Â¬ÃˆÃ°Ã³°¤Ç¤¹: %ld"
+
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121: ÃŒÂ¤Ã„êµÃ¤ÎÊÑ¿ô¤Ç¤¹: %s"
+
+msgid "E111: Missing ']'"
+msgstr "E111: ']' Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E686: Argument of %s must be a List"
+msgstr "E686: %s Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Ã¥ê¥¹¥È·¿¤Ç¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E712: Argument of %s must be a List or Dictionary"
+msgstr "E712: %s Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Ã¥ê¥¹¥È·¿¤Þ¤¿¤Ã¼­½ñ·¿¤Ç¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â¶ÃµÂ¤ÃŽÂ¥Â­Â¡Â¼Â¤Ã²Â»ÃˆÂ¤Â¦Â¤Â³Â¤ÃˆÂ¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E714: List required"
+msgstr "E714: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Â¬Ã‰Â¬ÃפǤ¹"
+
+msgid "E715: Dictionary required"
+msgstr "E715: Â¼Â­Â½Ã±Â·Â¿Â¤Â¬Ã‰Â¬ÃפǤ¹"
+
+#, c-format
+msgid "E118: Too many arguments for function: %s"
+msgstr "E118: Â´Ã˜Â¿Ã´Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Ã‚¿²á¤®¤Þ¤¹: %s"
+
+#, c-format
+msgid "E716: Key not present in Dictionary: %s"
+msgstr "E716: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â¥Â­Â¡Â¼Â¤Â¬Ã‚¸ºß¤·¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E122: Function %s already exists, add ! to replace it"
+msgstr "E122: Â´Ã˜Â¿Ã´ %s Â¤ÃÄêµÃºÑ¤Ç¤¹, ÂºÃ†Ã„êµÃ¤¹¤ë¤Ë¤à! Â¤Ã²Ã„ɲ䷤Ƥ¯¤À¤µ¤¤"
+
+msgid "E717: Dictionary entry already exists"
+msgstr "E717: Â¼Â­Â½Ã±Â·Â¿Ã†Ã¢Â¤Ã‹Â¥Â¨Â¥Ã³Â¥ÃˆÂ¥ÃªÂ¤Â¬Â´Ã»Â¤Ã‹Ã‚¸ºß¤·¤Þ¤¹"
+
+msgid "E718: Funcref required"
+msgstr "E718: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Â¬Ã׵ᤵ¤ì¤Þ¤¹"
+
+msgid "E719: Cannot use [:] with a Dictionary"
+msgstr "E719: [:] Â¤Ã²Â¼Â­Â½Ã±Â·Â¿Â¤ÃˆÃȤ߹ç¤ï¤»¤Æ¤Ã»È¤¨¤Þ¤»¤ó"
+
+#, c-format
+msgid "E734: Wrong variable type for %s="
+msgstr "E734: Â°Ã›Â¤ÃŠÂ¤ÃƒÂ¤Â¿Â·Â¿Â¤ÃŽÃŠÃ‘¿ô¤Ç¤¹ %s="
+
+#, c-format
+msgid "E130: Unknown function: %s"
+msgstr "E130: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ´Ã˜Â¿Ã´Â¤Ã‡Â¤Â¹: %s"
+
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461: Ã‰Ã”Àµ¤ÊÊÑ¿ô̾¤Ç¤¹: %s"
+
+msgid "E806: using Float as a String"
+msgstr "E806: Ã‰Ã¢Ã†Â°Â¾Â®Â¿Ã´Ã…À¿ô¤òʸ»úÎó¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "E687: Less targets than List items"
+msgstr "E687: Â¥Â¿Â¡Â¼Â¥Â²Â¥ÃƒÂ¥ÃˆÂ¤Â¬Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Ã†Ã¢Â¤ÃŽÃ×ÃǤè¤ê¤â¾¯¤Ê¤¤¤Ç¤¹"
+
+msgid "E688: More targets than List items"
+msgstr "E688: Â¥Â¿Â¡Â¼Â¥Â²Â¥ÃƒÂ¥ÃˆÂ¤Â¬Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Ã†Ã¢Â¤ÃŽÃ×ÃǤè¤ê¤â¿¤¤¤Ç¤¹"
+
+msgid "Double ; in list of variables"
+msgstr "¥ê¥¹¥È·¿¤ÎÃäË2¤Ä°Ê¾å¤Î ; Â¤Â¬Â¸Â¡Â½Ã¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "E738: Can't list variables for %s"
+msgstr "E738: %s Â¤ÃŽÃƒÃ¤ò°ìÃ÷ɽ¼¨¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E689: Can only index a List or Dictionary"
+msgstr "E689: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤ÃˆÂ¼Â­Â½Ã±Â·Â¿Â°ÃŠÂ³Â°Â¤Ã¥¤¥ó¥Ç¥Ã¥¯¥¹»ØÄê¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E708: [:] must come last"
+msgstr "E708: [:] Â¤ÃºÇ¸å¤Ç¤Ê¤±¤ì¤Ã¤¤¤±¤Þ¤»¤ó"
+
+msgid "E709: [:] requires a List value"
+msgstr "E709: [:] Â¤Ã‹Â¤Ã¥ê¥¹¥È·¿¤ÎÃä¬É¬ÃפǤ¹"
+
+msgid "E710: List value has more items than target"
+msgstr "E710: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿ÃŠÃ‘¿ô¤Ë¥¿¡¼¥²¥Ã¥È¤è¤ê¤â¿¤¤Ã×ÃǤ¬¤¢¤ê¤Þ¤¹"
+
+msgid "E711: List value has not enough items"
+msgstr "E711: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿ÃŠÃ‘¿ô¤Ë½½Ê¬¤Ê¿ô¤ÎÃ×ÃǤ¬¤¢¤ê¤Þ¤»¤ó"
+
+#
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690: :for Â¤ÃŽÂ¸Ã¥Â¤Ã‹ \"in\" Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E107: Missing parentheses: %s"
+msgstr "E107: Â¥Â«Â¥ÃƒÂ¥Â³ '(' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E108: No such variable: \"%s\""
+msgstr "E108: Â¤Â½Â¤ÃŽÃŠÃ‘¿ô¤Ã¤¢¤ê¤Þ¤»¤ó: \"%s\""
+
+msgid "E743: variable nested too deep for (un)lock"
+msgstr "E743: (¥¢¥ó)¥í¥Ã¥¯¤¹¤ë¤Ë¤ÃÊÑ¿ô¤ÎÆþ¤ì»Ò¤¬¿¼²á¤®¤Þ¤¹"
+
+msgid "E109: Missing ':' after '?'"
+msgstr "E109: '?' Â¤ÃŽÂ¸Ã¥Â¤Ã‹ ':' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E691: Can only compare List with List"
+msgstr "E691: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Ã¥ê¥¹¥È·¿¤È¤·¤«Èæ³Ó¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E692: Invalid operation for Lists"
+msgstr "E692: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Ã‹Â¤Ã̵¸ú¤ÊÃàºî¤Ç¤¹"
+
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735: Â¼Â­Â½Ã±Â·Â¿Â¤Ã¼­½ñ·¿¤È¤·¤«Èæ³Ó¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â¤Ã̵¸ú¤ÊÃàºî¤Ç¤¹"
+
+msgid "E693: Can only compare Funcref with Funcref"
+msgstr "E693: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Ã´Ø¿ô»²¾È·¿¤È¤·¤«Èæ³Ó¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Ã‹Â¤Ã̵¸ú¤ÊÃàºî¤Ç¤¹"
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: '%' Â¤Ã²Ã‰Ã¢Ã†Â°Â¾Â®Â¿Ã´Ã…À¿ô¤ÈÃȤ߹ç¤ï¤»¤Æ¤Ã»È¤¨¤Þ¤»¤ó"
+
+msgid "E110: Missing ')'"
+msgstr "E110: ')' Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+msgid "E695: Cannot index a Funcref"
+msgstr "E695: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Ã¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E112: Option name missing: %s"
+msgstr "E112: Â¥ÂªÂ¥Ã—¥·¥ç¥ó̾¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E113: Unknown option: %s"
+msgstr "E113: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ç¤¹: %s"
+
+#, c-format
+msgid "E114: Missing quote: %s"
+msgstr "E114: Â°ÃºÃÑÉä (\") Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E115: Missing quote: %s"
+msgstr "E115: Â°ÃºÃÑÉä (') Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E696: Missing comma in List: %s"
+msgstr "E696: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Ã‹Â¥Â«Â¥Ã³Â¥ÃžÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤ÃŽÂºÃ‡Â¸Ã¥Â¤Ã‹ ']' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â¥Â³Â¥Ã­Â¥Ã³Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â½Ã…Ê£¥­¡¼¤¬¤¢¤ê¤Þ¤¹: \"%s\""
+
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â¥Â«Â¥Ã³Â¥ÃžÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723: Â¼Â­Â½Ã±Â·Â¿Â¤ÃŽÂºÃ‡Â¸Ã¥Â¤Ã‹ '}' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+msgid "E724: variable nested too deep for displaying"
+msgstr "E724: Ã‰Â½Â¼Â¨Â¤Â¹Â¤Ã«Â¤Ã‹Â¤ÃÊÑ¿ô¤ÎÆþ¤ì»Ò¤¬¿¼²á¤®¤Þ¤¹"
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: Â´Ã˜Â¿Ã´Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Ã‚¿²á¤®¤Þ¤¹: %s"
+
+#, c-format
+msgid "E116: Invalid arguments for function %s"
+msgstr "E116: Â´Ã˜Â¿Ã´Â¤ÃŽÃŒÂµÂ¸ÃºÂ¤ÃŠÂ°ÃºÂ¿Ã´Â¤Ã‡Â¤Â¹: %s"
+
+#, c-format
+msgid "E117: Unknown function: %s"
+msgstr "E117: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ´Ã˜Â¿Ã´Â¤Ã‡Â¤Â¹: %s"
+
+#, c-format
+msgid "E119: Not enough arguments for function: %s"
+msgstr "E119: Â´Ã˜Â¿Ã´Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Â¾Â¯Â¤ÃŠÂ²Ã¡Â¤Â®Â¤ÃžÂ¤Â¹: %s"
+
+#, c-format
+msgid "E120: Using <SID> not in a script context: %s"
+msgstr "E120: Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È°Ê³°¤Ç<SID>¤¬»È¤ï¤ì¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: Â¼Â­Â½Ã±ÃÑ´Ø¿ô¤¬¸Æ¤Ã¤ì¤Þ¤·¤¿¤¬¼­½ñ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808: Â¿Ã´ÃƒÃ¤«ÉâÆ°¾®¿ôÅÀ¿ô¤¬É¬ÃפǤ¹"
+
+msgid "add() argument"
+msgstr "add() Â¤ÃŽÂ°ÃºÂ¿Ã´"
+
+msgid "E699: Too many arguments"
+msgstr "E699: Â°ÃºÂ¿Ã´Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+msgid "E785: complete() can only be used in Insert mode"
+msgstr "E785: complete() Â¤ÃÃÞÆþ¥â¡¼¥É¤Ç¤·¤«ÃøÃѤǤ­¤Þ¤»¤ó"
+
+#.
+#. * Yes this is ugly, I don't particularly like it either.  But doing it
+#. * this way has the compelling advantage that translations need not to
+#. * be touched at all.  See below what 'ok' and 'ync' are used for.
+#.
+msgid "&Ok"
+msgstr "&Ok"
+
+#, c-format
+msgid "E737: Key already exists: %s"
+msgstr "E737: Â¥Â­Â¡Â¼Â¤Ã´û¤Ë¸ºß¤·¤Þ¤¹: %s"
+
+msgid "extend() argument"
+msgstr "extend() Â¤ÃŽÂ°ÃºÂ¿Ã´"
+
+msgid "map() argument"
+msgstr "map() Â¤ÃŽÂ°ÃºÂ¿Ã´"
+
+msgid "filter() argument"
+msgstr "filter() Â¤ÃŽÂ°ÃºÂ¿Ã´"
+
+#, c-format
+msgid "+-%s%3ld lines: "
+msgstr "+-%s%3ld Â¹Ã”: "
+
+#, c-format
+msgid "E700: Unknown function: %s"
+msgstr "E700: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ´Ã˜Â¿Ã´Â¤Ã‡Â¤Â¹: %s"
+
+msgid ""
+"&OK\n"
+"&Cancel"
+msgstr ""
+"·èÄê(&O)\n"
+"¥­¥ã¥ó¥»¥ë(&C)"
+
+msgid "called inputrestore() more often than inputsave()"
+msgstr "inputrestore() Â¤Â¬ inputsave() Â¤Ã¨Â¤ÃªÂ¤Ã¢Ã‚¿¤¯¸Æ¤Ã¤ì¤Þ¤·¤¿"
+
+msgid "insert() argument"
+msgstr "insert() Â¤ÃŽÂ°ÃºÂ¿Ã´"
+
+msgid "E786: Range not allowed"
+msgstr "E786: ÃˆÃ°Ã»ØÄê¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E701: Invalid type for len()"
+msgstr "E701: len() Â¤Ã‹Â¤Ã̵¸ú¤Ê·¿¤Ç¤¹"
+
+msgid "E726: Stride is zero"
+msgstr "E726: Â¥Â¹Â¥ÃˆÂ¥Ã©Â¥Â¤Â¥Ã‰(ð¿ÊÎÌ)¤¬ 0 Â¤Ã‡Â¤Â¹"
+
+msgid "E727: Start past end"
+msgstr "E727: Â³Â«Â»Ã°ÌÃÖ¤¬½ªÎ»°ÌÃÖ¤ò±Û¤¨¤Þ¤·¤¿"
+
+msgid "<empty>"
+msgstr "<¶õ>"
+
+msgid "E240: No connection to Vim server"
+msgstr "E240: Vim Â¥ÂµÂ¡Â¼Â¥Ã¤Ø¤ÎÀܳ¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E241: Unable to send to %s"
+msgstr "E241: %s Â¤Ã˜Ã÷¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E277: Unable to read a server reply"
+msgstr "E277: Â¥ÂµÂ¡Â¼Â¥Ã¤Î±þÅú¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "remove() argument"
+msgstr "remove() Â¤ÃŽÂ°ÃºÂ¿Ã´"
+
+# Added at 10-Mar-2004.
+msgid "E655: Too many symbolic links (cycle?)"
+msgstr "E655: Â¥Â·Â¥Ã³Â¥ÃœÂ¥ÃªÂ¥ÃƒÂ¥Â¯Â¥ÃªÂ¥Ã³Â¥Â¯Â¤Â¬Ã‚¿²á¤®¤Þ¤¹ (½Û´Ä¤·¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹)"
+
+msgid "reverse() argument"
+msgstr "reverse() Â¤ÃŽÂ°ÃºÂ¿Ã´"
+
+msgid "E258: Unable to send to client"
+msgstr "E258: Â¥Â¯Â¥Ã©Â¥Â¤Â¥Â¢Â¥Ã³Â¥ÃˆÂ¤Ã˜Ã÷¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+msgid "sort() argument"
+msgstr "sort() Â¤ÃŽÂ°ÃºÂ¿Ã´"
+
+msgid "E702: Sort compare function failed"
+msgstr "E702: Â¥Â½Â¡Â¼Â¥ÃˆÂ¤ÃŽÃˆÃ¦Â³Ã“´Ø¿ô¤¬¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "(Invalid)"
+msgstr "(̵¸ú)"
+
+msgid "E677: Error writing temp file"
+msgstr "E677: Â°Ã¬Â»Ã¾Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â½Ã±Â¹Ã¾ÃƒÃ¦Â¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬ÃˆÂ¯Ã€Â¸Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: Ã‰Ã¢Ã†Â°Â¾Â®Â¿Ã´Ã…À¿ô¤ò¿ôÃäȤ·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Ã²Â¿Ã´ÃƒÃ¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹¡£"
+
+msgid "E745: Using a List as a Number"
+msgstr "E745: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Ã²Â¿Ã´ÃƒÃ¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728: Â¼Â­Â½Ã±Â·Â¿Â¤Ã²Â¿Ã´ÃƒÃ¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "E729: using Funcref as a String"
+msgstr "E729: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Ã²ÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃˆÂ¤Â·Â¤Ã†Â°Â·Â¤ÃƒÂ¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+
+msgid "E730: using List as a String"
+msgstr "E730: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Ã²ÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃˆÂ¤Â·Â¤Ã†Â°Â·Â¤ÃƒÂ¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+
+msgid "E731: using Dictionary as a String"
+msgstr "E731: Â¼Â­Â½Ã±Â·Â¿Â¤Ã²ÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃˆÂ¤Â·Â¤Ã†Â°Â·Â¤ÃƒÂ¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+
+#, c-format
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: ÃŠÃ‘¿ô¤Î·¿¤¬°ìÃפ·¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: ÃŠÃ‘¿ô %s Â¤Ã²ÂºÃ¯Â½Ã¼Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿ÃŠÃ‘¿ô̾¤ÃÂçʸ»ú¤Ç»Ã¤Þ¤é¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: ÃŠÃ‘¿ô̾¤¬´û¸¤Î´Ø¿ô̾¤È¾×Æä·¤Þ¤¹: %s"
+
+#, c-format
+msgid "E741: Value is locked: %s"
+msgstr "E741: ÃƒÃ¤¬¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹: %s"
+
+msgid "Unknown"
+msgstr "ÉÔÌÀ"
+
+#, c-format
+msgid "E742: Cannot change value of %s"
+msgstr "E742: %s Â¤ÃŽÃƒÃ¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E698: variable nested too deep for making a copy"
+msgstr "E698: Â¥Â³Â¥Ã”¡¼¤ò¼è¤ë¤Ë¤ÃÊÑ¿ô¤ÎÆþ¤ì»Ò¤¬¿¼²á¤®¤Þ¤¹"
+
+#, c-format
+msgid "E123: Undefined function: %s"
+msgstr "E123: ÃŒÂ¤Ã„êµÃ¤Î´Ø¿ô¤Ç¤¹: %s"
+
+#, c-format
+msgid "E124: Missing '(': %s"
+msgstr "E124: '(' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+msgid "E862: Cannot use g: here"
+msgstr "E862: Â¤Â³Â¤Â³Â¤Ã‡Â¤Ã g: Â¤Ã»È¤¨¤Þ¤»¤ó"
+
+#, c-format
+msgid "E125: Illegal argument: %s"
+msgstr "E125: Ã‰Ã”Àµ¤Ê°ú¿ô¤Ç¤¹: %s"
+
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Â°ÃºÂ¿Ã´ÃŒÂ¾Â¤Â¬Â½Ã…Ê£¤·¤Æ¤¤¤Þ¤¹: %s"
+
+msgid "E126: Missing :endfunction"
+msgstr "E126: :endfunction Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: Â´Ã˜Â¿Ã´ÃŒÂ¾Â¤Â¬ÃŠÃ‘¿ô̾¤È¾×Æä·¤Þ¤¹: %s"
+
+#, c-format
+msgid "E127: Cannot redefine function %s: It is in use"
+msgstr "E127: Â´Ã˜Â¿Ã´ %s Â¤Ã²ÂºÃ†Ã„êµÃ¤Ç¤­¤Þ¤»¤ó: Â»ÃˆÃÑÃæ¤Ç¤¹"
+
+#, c-format
+msgid "E746: Function name does not match script file name: %s"
+msgstr "E746: Â´Ã˜Â¿Ã´ÃŒÂ¾Â¤Â¬Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È¤Î¥Õ¥¡¥¤¥ë̾¤È°ìÃפ·¤Þ¤»¤ó: %s"
+
+msgid "E129: Function name required"
+msgstr "E129: Â´Ã˜Â¿Ã´ÃŒÂ¾Â¤Â¬Ã׵ᤵ¤ì¤Þ¤¹"
+
+#, c-format
+msgid "E128: Function name must start with a capital or contain a colon: %s"
+msgstr "E128: Â´Ã˜Â¿Ã´ÃŒÂ¾Â¤ÃÂçʸ»ú¤Ç»Ã¤Þ¤ë¤«¥³¥í¥ó¤ò´Þ¤Þ¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E131: Cannot delete function %s: It is in use"
+msgstr "E131: Â´Ã˜Â¿Ã´ %s Â¤Ã²ÂºÃ¯Â½Ã¼Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³: Â»ÃˆÃÑÃæ¤Ç¤¹"
+
+msgid "E132: Function call depth is higher than 'maxfuncdepth'"
+msgstr "E132: Â´Ã˜Â¿Ã´Â¸Ã†Â½Ã¤ÎÆþ¤ì»Ò¿ô¤¬ 'maxfuncdepth' Â¤Ã²Ã„¶¤¨¤Þ¤·¤¿"
+
+#, c-format
+msgid "calling %s"
+msgstr "%s Â¤Ã²Â¼Ã‚¹ÔÃæ¤Ç¤¹"
+
+#, c-format
+msgid "%s aborted"
+msgstr "%s Â¤Â¬ÃƒÃ¦ÃƒÃ‡Â¤ÂµÂ¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿"
+
+#, c-format
+msgid "%s returning #%ld"
+msgstr "%s Â¤Â¬ #%ld Â¤Ã²ÃŠÃ–¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "%s returning %s"
+msgstr "%s Â¤Â¬ %s Â¤Ã²ÃŠÃ–¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "continuing in %s"
+msgstr "%s Â¤ÃŽÂ¼Ã‚¹Ô¤ò·Ñ³Ãæ¤Ç¤¹"
+
+msgid "E133: :return not inside a function"
+msgstr "E133: Â´Ã˜Â¿Ã´Â³Â°Â¤Ã‹ :return Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid ""
+"\n"
+"# global variables:\n"
+msgstr ""
+"\n"
+"# Â¥Â°Â¥Ã­Â¡Â¼Â¥Ã¥ëÊÑ¿ô:\n"
+
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\tLast set from "
+
+msgid "No old files"
+msgstr "¸Å¤¤¥Õ¥¡¥¤¥ë¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
+msgstr "<%s>%s%s  %d,  16¿Ê¿ô %02x,  8¿Ê¿ô %03o"
+
+#, c-format
+msgid "> %d, Hex %04x, Octal %o"
+msgstr "> %d, 16¿Ê¿ô %04x, 8¿Ê¿ô %o"
+
+#, c-format
+msgid "> %d, Hex %08x, Octal %o"
+msgstr "> %d, 16¿Ê¿ô %08x, 8¿Ê¿ô %o"
+
+msgid "E134: Move lines into themselves"
+msgstr "E134: Â¹Ã”¤ò¤½¤ì¼«¿È¤Ë¤Ã°ÜÆ°¤Ç¤­¤Þ¤»¤ó"
+
+msgid "1 line moved"
+msgstr "1 Â¹Ã”¤¬°ÜÆ°¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld lines moved"
+msgstr "%ld Â¹Ã”¤¬°ÜÆ°¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld lines filtered"
+msgstr "%ld Â¹Ã”¤¬¥Õ¥£¥ë¥¿½èÃý¤µ¤ì¤Þ¤·¤¿"
+
+msgid "E135: *Filter* Autocommands must not change current buffer"
+msgstr "E135: *¥Õ¥£¥ë¥¿* autocommand¤Ã¸½ºß¤Î¥Ã¥Ã¥Õ¥¡¤òÊѹ¹¤·¤Æ¤Ã¤¤¤±¤Þ¤»¤ó"
+
+msgid "[No write since last change]\n"
+msgstr "[ºÇ¸å¤ÎÊѹ¹¤¬Êø¤µ¤ì¤Æ¤¤¤Þ¤»¤ó]\n"
+
+#, c-format
+msgid "%sviminfo: %s in line: "
+msgstr "%sviminfo: %s Â¹Ã”ÌÜ: "
+
+msgid "E136: viminfo: Too many errors, skipping rest of file"
+msgstr "E136: viminfo: Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬Ã‚¿²á¤®¤ë¤Î¤Ç, Â°ÃŠÂ¹ÃŸÂ¤Ã¥¹¥­¥Ã¥×¤·¤Þ¤¹"
+
+#, c-format
+msgid "Reading viminfo file \"%s\"%s%s%s"
+msgstr "viminfo¥Õ¥¡¥¤¥ë \"%s\"%s%s%s Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤ÃŸÃƒÃ¦ "
+
+msgid " info"
+msgstr " Â¾Ã°ÃŠÃ³"
+
+msgid " marks"
+msgstr " Â¥ÃžÂ¡Â¼Â¥Â¯"
+
+msgid " oldfiles"
+msgstr " ÂµÃ¬Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â·Â²"
+
+msgid " FAILED"
+msgstr " Â¼ÂºÃ‡Ã”"
+
+#. avoid a wait_return for this message, it's annoying
+#, c-format
+msgid "E137: Viminfo file is not writable: %s"
+msgstr "E137: viminfo¥Õ¥¡¥¤¥ë¤¬½ñ¹þ¤ß¤Ç¤­¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E138: Can't write viminfo file %s!"
+msgstr "E138: viminfo¥Õ¥¡¥¤¥ë %s Â¤Ã²ÃŠÃ¸¤Ç¤­¤Þ¤»¤ó!"
+
+#, c-format
+msgid "Writing viminfo file \"%s\""
+msgstr "viminfo¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦"
+
+#. Write the info:
+#, c-format
+msgid "# This viminfo file was generated by Vim %s.\n"
+msgstr "# Â¤Â³Â¤ÃŽ viminfo Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã Vim %s Â¤Ã‹Â¤Ã¨Â¤ÃƒÂ¤Ã†Ã€Â¸Ã€Â®Â¤ÂµÂ¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿.\n"
+
+msgid ""
+"# You may edit it if you're careful!\n"
+"\n"
+msgstr ""
+"# ÃŠÃ‘¹¹¤¹¤ëºÃ¤Ë¤Ã½½Ê¬Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤!\n"
+"\n"
+
+msgid "# Value of 'encoding' when this file was written\n"
+msgstr "# Â¤Â³Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â½Ã±Â¤Â«Â¤Ã¬Â¤Â¿Â»Ã¾Â¤ÃŽ 'encoding' Â¤ÃŽÃƒÃ\n"
+
+msgid "Illegal starting char"
+msgstr "ÉÔÀµ¤ÊÀèƬʸ»ú¤Ç¤¹"
+
+msgid "Save As"
+msgstr "ÊÌ̾¤ÇÊø"
+
+msgid "Write partial file?"
+msgstr "¥Õ¥¡¥¤¥ë¤òÉôʬŪ¤ËÊø¤·¤Þ¤¹¤«?"
+
+msgid "E140: Use ! to write partial buffer"
+msgstr "E140: Â¥Ã¥Ã¥Õ¥¡¤òÉôʬŪ¤ËÊø¤¹¤ë¤Ë¤à! Â¤Ã²Â»ÃˆÂ¤ÃƒÂ¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+
+#, c-format
+msgid "Overwrite existing file \"%s\"?"
+msgstr "´û¸¤Î¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Â¾Ã¥Â½Ã±Â¤Â­Â¤Â·Â¤ÃžÂ¤Â¹Â¤Â«?"
+
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë \"%s\" Â¤Â¬Ã‚¸ºß¤·¤Þ¤¹. Â¾Ã¥Â½Ã±Â¤Â­Â¤Ã²Â¶Â¯Ã€Â©Â¤Â·Â¤ÃžÂ¤Â¹Â¤Â«?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤¹: %s (:silent! Â¤Ã²Ã„ɲäǾå½ñ)"
+
+#, c-format
+msgid "E141: No file name for buffer %ld"
+msgstr "E141: Â¥Ã¥Ã¥Õ¥¡ %ld Â¤Ã‹Â¤Ã̾𤬤¢¤ê¤Þ¤»¤ó"
+
+msgid "E142: File not written: Writing is disabled by 'write' option"
+msgstr "E142: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃÊø¤µ¤ì¤Þ¤»¤ó¤Ç¤·¤¿: 'write' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ë¤è¤ê̵¸ú¤Ç¤¹"
+
+#, c-format
+msgid ""
+"'readonly' option is set for \"%s\".\n"
+"Do you wish to write anyway?"
+msgstr ""
+"\"%s\" Â¤Ã‹Â¤Ã 'readonly' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹.\n"
+"¾å½ñ¤­¶¯À©¤ò¤·¤Þ¤¹¤«?"
+
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+"¥Õ¥¡¥¤¥ë \"%s\" Â¤ÃŽÂ¥Ã‘¡¼¥ß¥Ã¥·¥ç¥ó¤¬ÆɹþÀìÃѤǤ¹.\n"
+"¤½¤ì¤Ç¤â¶²¤é¤¯½ñ¤­¹þ¤à¤³¤È¤Ã²Äǽ¤Ç¤¹.\n"
+"·Ñ³¤·¤Þ¤¹¤«?"
+
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr "E505: \"%s\" Â¤ÃÆɹþÀìÃѤǤ¹ (¶¯À©½ñ¹þ¤Ë¤à! Â¤Ã²Ã„ɲÃ)"
+
+msgid "Edit File"
+msgstr "¥Õ¥¡¥¤¥ë¤òÊÔ½¸"
+
+#, c-format
+msgid "E143: Autocommands unexpectedly deleted new buffer %s"
+msgstr "E143: autocommand¤¬Ã½´ü¤»¤º¿·¤·¤¤¥Ã¥Ã¥Õ¥¡ %s Â¤Ã²ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "E144: non-numeric argument to :z"
+msgstr "E144: Â¿Ã´Â¤Ã‡Â¤Ã¤Ê¤¤°ú¿ô¤¬ :z Â¤Ã‹Ã…䵤ì¤Þ¤·¤¿"
+
+msgid "E145: Shell commands not allowed in rvim"
+msgstr "E145: rvim¤Ç¤Ã¥·¥§¥ë¥³¥Þ¥ó¥É¤ò»È¤¨¤Þ¤»¤ó"
+
+msgid "E146: Regular expressions can't be delimited by letters"
+msgstr "E146: Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½Â¤Ãʸ»ú¤Ç¶èÀڤ뤳¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
+msgstr "%s Â¤Ã‹ÃƒÃ–´¹¤·¤Þ¤¹¤«? (y/n/a/q/l/^E/^Y)"
+
+msgid "(Interrupted) "
+msgstr "(³ä¹þ¤Þ¤ì¤Þ¤·¤¿) "
+
+msgid "1 match"
+msgstr "1 Â²Ã•Â½ÃªÂ³ÂºÃ…ö¤·¤Þ¤·¤¿"
+
+msgid "1 substitution"
+msgstr "1 Â²Ã•Â½ÃªÃƒÃ–´¹¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld matches"
+msgstr "%ld Â²Ã•Â½ÃªÂ³ÂºÃ…ö¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld substitutions"
+msgstr "%ld Â²Ã•Â½ÃªÃƒÃ–´¹¤·¤Þ¤·¤¿"
+
+msgid " on 1 line"
+msgstr " (·× 1 Â¹Ã”Æâ)"
+
+#, c-format
+msgid " on %ld lines"
+msgstr " (·× %ld Â¹Ã”Æâ)"
+
+msgid "E147: Cannot do :global recursive"
+msgstr "E147: :global Â¤Ã²ÂºÃ†ÂµÂ¢Ã…ª¤Ë¤Ã»È¤¨¤Þ¤»¤ó"
+
+msgid "E148: Regular expression missing from global"
+msgstr "E148: global¥³¥Þ¥ó¥É¤ËÀµµ¬É½¸½¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "Pattern found in every line: %s"
+msgstr "¥Ñ¥¿¡¼¥ó¤¬Ã´¤Æ¤Î¹Ô¤Ç¸«¤Ä¤«¤ê¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "Pattern not found: %s"
+msgstr "¥Ñ¥¿¡¼¥ó¤Ã¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿: %s"
+
+msgid ""
+"\n"
+"# Last Substitute String:\n"
+"$"
+msgstr ""
+"\n"
+"# ÂºÃ‡Â¸Ã¥Â¤Ã‹ÃƒÃ–´¹¤µ¤ì¤¿Ê¸»úÎó:\n"
+"$"
+
+msgid "E478: Don't panic!"
+msgstr "E478: Â¹Â²Â¤Ã†Â¤ÃŠÂ¤Â¤Â¤Ã‡Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+
+#, c-format
+msgid "E661: Sorry, no '%s' help for %s"
+msgstr "E661: Â»Ã„Ç°¤Ç¤¹¤¬ '%s' Â¤ÃŽÂ¥Ã˜Â¥Ã«Â¥Ã—¤¬ %s Â¤Ã‹Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E149: Sorry, no help for %s"
+msgstr "E149: Â»Ã„Ç°¤Ç¤¹¤¬ %s Â¤Ã‹Â¤Ã¥Ø¥ë¥×¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "Sorry, help file \"%s\" not found"
+msgstr "»ÄÇ°¤Ç¤¹¤¬¥Ø¥ë¥×¥Õ¥¡¥¤¥ë \"%s\" Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E150: Not a directory: %s"
+msgstr "E150: Â¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã‡Â¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E152: Cannot open %s for writing"
+msgstr "E152: Â½Ã±Â¹Ã¾Â¤ÃŸÃѤË %s Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E153: Unable to open %s for reading"
+msgstr "E153: Ã†Ã‰Â¹Ã¾ÃѤË %s Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+
+# Added at 29-Apr-2004.
+#, c-format
+msgid "E670: Mix of help file encodings within a language: %s"
+msgstr "E670: 1¤Ä¤Î¸À¸ì¤Î¥Ø¥ë¥×¥Õ¥¡¥¤¥ë¤ËÊ£¿ô¤Î¥¨¥ó¥³¡¼¥É¤¬º®ºß¤·¤Æ¤¤¤Þ¤¹: %s"
+
+#, c-format
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154: Â¥Â¿Â¥Â° \"%s\" Â¤Â¬Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s/%s Â¤Ã‹Â½Ã…Ê£¤·¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "E160: Unknown sign command: %s"
+msgstr "E160: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽsign¥³¥Þ¥ó¥É¤Ç¤¹: %s"
+
+msgid "E156: Missing sign name"
+msgstr "E156: sign̾¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E612: Too many signs defined"
+msgstr "E612: sign¤ÎÄêµÃ¤¬Â¿¿ô¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+#, c-format
+msgid "E239: Invalid sign text: %s"
+msgstr "E239: ÃŒÂµÂ¸ÃºÂ¤ÃŠsign¤Î¥Æ¥­¥¹¥È¤Ç¤¹: %s"
+
+#, c-format
+msgid "E155: Unknown sign: %s"
+msgstr "E155: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽsign¤Ç¤¹: %s"
+
+msgid "E159: Missing sign number"
+msgstr "E159: sign¤ÎÈֹ椬¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E158: Invalid buffer name: %s"
+msgstr "E158: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã¥Ã¥Õ¥¡Ì¾¤Ç¤¹: %s"
+
+#, c-format
+msgid "E157: Invalid sign ID: %ld"
+msgstr "E157: ÃŒÂµÂ¸ÃºÂ¤ÃŠsign¼±Ê̻ҤǤ¹: %ld"
+
+# Added at 27-Jan-2004.
+msgid " (NOT FOUND)"
+msgstr "  (¸«¤Ä¤«¤ê¤Þ¤»¤ó)"
+
+msgid " (not supported)"
+msgstr " (È󥵥á¼¥È)"
+
+msgid "[Deleted]"
+msgstr "[ºï½üºÑ]"
+
+msgid "Entering Debug mode.  Type \"cont\" to continue."
+msgstr "¥Ç¥Ã¥Ã¥°¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹. Ã‚³¤±¤ë¤Ë¤à\"cont\" Â¤ÃˆÃ†Ã¾ÃŽÃ¤·¤Æ¤¯¤À¤µ¤¤."
+
+#, c-format
+msgid "line %ld: %s"
+msgstr "¹Ô %ld: %s"
+
+#, c-format
+msgid "cmd: %s"
+msgstr "¥³¥Þ¥ó¥É: %s"
+
+#, c-format
+msgid "Breakpoint in \"%s%s\" line %ld"
+msgstr "¥Ö¥ì¡¼¥¯¥Ã¥¤¥ó¥È \"%s%s\" Â¹Ã” %ld"
+
+#, c-format
+msgid "E161: Breakpoint not found: %s"
+msgstr "E161: Â¥Ã–¥ì¡¼¥¯¥Ã¥¤¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s"
+
+msgid "No breakpoints defined"
+msgstr "¥Ö¥ì¡¼¥¯¥Ã¥¤¥ó¥È¤¬ÄêµÃ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "%3d  %s %s  line %ld"
+msgstr "%3d  %s %s  Â¹Ã” %ld"
+
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: Â½Ã©Â¤Ã¡Â¤Ã‹ \":profile start {fname}\" Â¤Ã²Â¼Ã‚¹Ô¤·¤Æ¤¯¤À¤µ¤¤"
+
+#, c-format
+msgid "Save changes to \"%s\"?"
+msgstr "Êѹ¹¤ò \"%s\" Â¤Ã‹ÃŠÃ¸¤·¤Þ¤¹¤«?"
+
+msgid "Untitled"
+msgstr "̵Âê"
+
+#, c-format
+msgid "E162: No write since last change for buffer \"%s\""
+msgstr "E162: Â¥Ã¥Ã¥Õ¥¡ \"%s\" Â¤ÃŽÃŠÃ‘¹¹¤ÃÊø¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
+msgstr "·Ù¹ð: Ã½´ü¤»¤ºÂ¾¥Ã¥Ã¥Õ¥¡¤Ø°ÜÆ°¤·¤Þ¤·¤¿ (autocommands Â¤Ã²Ã„´¤Ù¤Æ¤¯¤À¤µ¤¤)"
+
+msgid "E163: There is only one file to edit"
+msgstr "E163: ÃŠÃ”½¸¤¹¤ë¥Õ¥¡¥¤¥ë¤Ã1¤Ä¤·¤«¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E164: Cannot go before first file"
+msgstr "E164: ÂºÃ‡Â½Ã©Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã¨Â¤ÃªÃ°¤Ë¤Ã¹Ô¤±¤Þ¤»¤ó"
+
+msgid "E165: Cannot go beyond last file"
+msgstr "E165: ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²Â±Ã›Â¤Â¨Â¤Ã†Â¸Ã¥Â¤Ã‹Â¤Ã¹Ô¤±¤Þ¤»¤ó"
+
+#, c-format
+msgid "E666: compiler not supported: %s"
+msgstr "E666: Â¤Â½Â¤ÃŽÂ¥Â³Â¥Ã³Â¥Ã‘¥¤¥é¤Ë¤ÃÂñþ¤·¤Æ¤¤¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "Searching for \"%s\" in \"%s\""
+msgstr "\"%s\" Â¤Ã² \"%s\" Â¤Â«Â¤Ã©Â¸Â¡ÂºÃ·ÃƒÃ¦"
+
+#, c-format
+msgid "Searching for \"%s\""
+msgstr "\"%s\" Â¤Ã²Â¸Â¡ÂºÃ·ÃƒÃ¦"
+
+#, c-format
+msgid "not found in 'runtimepath': \"%s\""
+msgstr "'runtimepath' Â¤ÃŽÃƒÃ¦Â¤Ã‹Â¤Ã¸«¤Ä¤«¤ê¤Þ¤»¤ó: \"%s\""
+
+msgid "Source Vim script"
+msgstr "Vim¥¹¥¯¥ê¥×¥È¤Î¼è¹þ¤ß"
+
+#, c-format
+msgid "Cannot source a directory: \"%s\""
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤Ã¼è¹þ¤á¤Þ¤»¤ó: \"%s\""
+
+#, c-format
+msgid "could not source \"%s\""
+msgstr "\"%s\" Â¤Ã²Â¼Ã¨Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "line %ld: could not source \"%s\""
+msgstr "¹Ô %ld: \"%s\" Â¤Ã²Â¼Ã¨Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "sourcing \"%s\""
+msgstr "\"%s\" Â¤Ã²Â¼Ã¨Â¹Ã¾ÃƒÃ¦"
+
+#, c-format
+msgid "line %ld: sourcing \"%s\""
+msgstr "¹Ô %ld: %s Â¤Ã²Â¼Ã¨Â¹Ã¾ÃƒÃ¦"
+
+#, c-format
+msgid "finished sourcing %s"
+msgstr "%s Â¤ÃŽÂ¼Ã¨Â¹Ã¾Â¤Ã²Â´Â°ÃŽÂ»"
+
+msgid "modeline"
+msgstr "¥â¡¼¥É¹Ô"
+
+msgid "--cmd argument"
+msgstr "--cmd Â°ÃºÂ¿Ã´"
+
+msgid "-c argument"
+msgstr "-c Â°ÃºÂ¿Ã´"
+
+msgid "environment variable"
+msgstr "´Ä¶­ÊÑ¿ô"
+
+msgid "error handler"
+msgstr "¥¨¥é¡¼¥Ã¥ó¥É¥é"
+
+msgid "W15: Warning: Wrong line separator, ^M may be missing"
+msgstr "W15: Â·Ã™Â¹Ã°: Â¹Ã”¶èÀÚ¤¬ÉÔÀµ¤Ç¤¹. ^M Â¤Â¬Â¤ÃŠÂ¤Â¤Â¤ÃŽÂ¤Ã‡Â¤Â·Â¤Ã§Â¤Â¦"
+
+msgid "E167: :scriptencoding used outside of a sourced file"
+msgstr "E167: :scriptencoding Â¤Â¬Â¼Ã¨Â¹Ã¾Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È°Ê³°¤Ç»ÈÃѤµ¤ì¤Þ¤·¤¿"
+
+msgid "E168: :finish used outside of a sourced file"
+msgstr "E168: :finish Â¤Â¬Â¼Ã¨Â¹Ã¾Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È°Ê³°¤Ç»ÈÃѤµ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "Current %slanguage: \"%s\""
+msgstr "¸½ºß¤Î %s¸À¸ì: \"%s\""
+
+#, c-format
+msgid "E197: Cannot set language to \"%s\""
+msgstr "E197: Â¸Ã€Â¸Ã¬Â¤Ã² \"%s\" Â¤Ã‹Ã€ÃŸÃ„ê¤Ç¤­¤Þ¤»¤ó"
+
+msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+msgstr "Ex¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹. Â¥ÃŽÂ¡Â¼Â¥ÃžÂ¥Ã«Â¤Ã‹ÃŒÃ¡Â¤Ã«Â¤Ã‹Â¤Ã\"visual\"¤ÈÆþÎ䷤Ƥ¯¤À¤µ¤¤."
+
+msgid "E501: At end-of-file"
+msgstr "E501: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ½ÂªÃŽÂ»Â°ÃŒÃƒÃ–"
+
+msgid "E169: Command too recursive"
+msgstr "E169: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬ÂºÃ†ÂµÂ¢Ã…ª²á¤®¤Þ¤¹"
+
+#, c-format
+msgid "E605: Exception not caught: %s"
+msgstr "E605: ÃŽÃ£Â³Â°Â¤Â¬ÃŠÃ¡Ã‚ª¤µ¤ì¤Þ¤»¤ó¤Ç¤·¤¿: %s"
+
+msgid "End of sourced file"
+msgstr "¼è¹þ¥Õ¥¡¥¤¥ë¤ÎºÇ¸å¤Ç¤¹"
+
+msgid "End of function"
+msgstr "´Ø¿ô¤ÎºÇ¸å¤Ç¤¹"
+
+msgid "E464: Ambiguous use of user-defined command"
+msgstr "E464: Â¥Ã¦Â¡Â¼Â¥Â¶Ã„êµÃ¥³¥Þ¥ó¥É¤Î¤¢¤¤¤Þ¤¤¤Ê»ÈÃѤǤ¹"
+
+msgid "E492: Not an editor command"
+msgstr "E492: Â¥Â¨Â¥Ã‡Â¥Â£Â¥Â¿Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã‡Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E493: Backwards range given"
+msgstr "E493: ÂµÃ•Â¤ÂµÂ¤ÃžÂ¤ÃŽÃˆÃ°Ã¤¬»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+msgid "Backwards range given, OK to swap"
+msgstr "µÕ¤µ¤Þ¤ÎÈð䬻ØÄꤵ¤ì¤Þ¤·¤¿, Ã†Ã¾Ã‚ؤ¨¤Þ¤¹¤«?"
+
+msgid "E494: Use w or w>>"
+msgstr "E494: w Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã w>> Â¤Ã²Â»ÃˆÃѤ·¤Æ¤¯¤À¤µ¤¤"
+
+msgid "E319: Sorry, the command is not available in this version"
+msgstr "E319: Â¤Â³Â¤ÃŽÂ¥Ã¡¼¥¸¥ç¥ó¤Ç¤Ã¤³¤Î¥³¥Þ¥ó¥É¤ÃÃøÃѤǤ­¤Þ¤»¤ó, Â¤Â´Â¤Ã¡Â¤Ã³Â¤ÃŠÂ¤ÂµÂ¤Â¤"
+
+msgid "E172: Only one file name allowed"
+msgstr "E172: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Ã 1 Â¤Ã„¤Ë¤·¤Æ¤¯¤À¤µ¤¤"
+
+msgid "1 more file to edit.  Quit anyway?"
+msgstr "ÊÔ½¸¤¹¤Ù¤­¥Õ¥¡¥¤¥ë¤¬ 1 Â¸Ã„¤¢¤ê¤Þ¤¹¤¬, Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â¹Â¤Â«?"
+
+#, c-format
+msgid "%d more files to edit.  Quit anyway?"
+msgstr "ÊÔ½¸¤¹¤Ù¤­¥Õ¥¡¥¤¥ë¤¬¤¢¤È %d Â¸Ã„¤¢¤ê¤Þ¤¹¤¬, Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â¹Â¤Â«?"
+
+msgid "E173: 1 more file to edit"
+msgstr "E173: ÃŠÃ”½¸¤¹¤Ù¤­¥Õ¥¡¥¤¥ë¤¬ 1 Â¸Ã„¤¢¤ê¤Þ¤¹"
+
+#, c-format
+msgid "E173: %ld more files to edit"
+msgstr "E173: ÃŠÃ”½¸¤¹¤Ù¤­¥Õ¥¡¥¤¥ë¤¬¤¢¤È %ld Â¸Ã„¤¢¤ê¤Þ¤¹"
+
+msgid "E174: Command already exists: add ! to replace it"
+msgstr "E174: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬Â´Ã»Â¤Ã‹Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹: ÂºÃ†Ã„êµÃ¤¹¤ë¤Ë¤à! Â¤Ã²Ã„ɲ䷤Ƥ¯¤À¤µ¤¤"
+
+msgid ""
+"\n"
+"    Name        Args Range Complete  Definition"
+msgstr ""
+"\n"
+"    ÃŒÂ¾Ã°        Â°ÃºÂ¿Ã´ ÃˆÃ°à ÃŠÃ¤Â´Â°      Ã„êµÃ"
+
+msgid "No user-defined commands found"
+msgstr "¥æ¡¼¥¶ÄêµÃ¥³¥Þ¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "E175: No attribute specified"
+msgstr "E175: Ã‚°À­¤ÃÄêµÃ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E176: Invalid number of arguments"
+msgstr "E176: Â°ÃºÂ¿Ã´Â¤ÃŽÂ¿Ã´Â¤Â¬ÃŒÂµÂ¸ÃºÂ¤Ã‡Â¤Â¹"
+
+msgid "E177: Count cannot be specified twice"
+msgstr "E177: Â¥Â«Â¥Â¦Â¥Ã³Â¥ÃˆÂ¤Ã²2½Å»ØÄꤹ¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E178: Invalid default value for count"
+msgstr "E178: Â¥Â«Â¥Â¦Â¥Ã³Â¥ÃˆÂ¤ÃŽÂ¾ÃŠÃŽÂ¬ÃƒÃ¤¬Ìµ¸ú¤Ç¤¹"
+
+msgid "E179: argument required for -complete"
+msgstr "E179: -Êä´°¤Î¤¿¤á¤Î°ú¿ô¤¬É¬ÃפǤ¹"
+
+#, c-format
+msgid "E181: Invalid attribute: %s"
+msgstr "E181: ÃŒÂµÂ¸ÃºÂ¤ÃŠÃ‚°À­¤Ç¤¹: %s"
+
+msgid "E182: Invalid command name"
+msgstr "E182: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰ÃŒÂ¾Â¤Ã‡Â¤Â¹"
+
+msgid "E183: User defined commands must start with an uppercase letter"
+msgstr "E183: Â¥Ã¦Â¡Â¼Â¥Â¶Ã„êµÃ¥³¥Þ¥ó¥É¤Ã±ÑÂçʸ»ú¤Ç»Ã¤Þ¤é¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: Ã½Ìó̾¤Ê¤Î¤Ç, Â¥Ã¦Â¡Â¼Â¥Â¶Ã„êµÃ¥³¥Þ¥ó¥É¤ËÃøÃѤǤ­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E184: No such user-defined command: %s"
+msgstr "E184: Â¤Â½Â¤ÃŽÂ¥Ã¦Â¡Â¼Â¥Â¶Ã„êµÃ¥³¥Þ¥ó¥É¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E180: Invalid complete value: %s"
+msgstr "E180: ÃŒÂµÂ¸ÃºÂ¤ÃŠÃŠÃ¤Â´Â°Â»Ã˜Ã„ê¤Ç¤¹: %s"
+
+msgid "E468: Completion argument only allowed for custom completion"
+msgstr "E468: ÃŠÃ¤Â´Â°Â°ÃºÂ¿Ã´Â¤Ã¥«¥¹¥¿¥àÊä´°¤Ç¤·¤«»ÈÃѤǤ­¤Þ¤»¤ó"
+
+msgid "E467: Custom completion requires a function argument"
+msgstr "E467: Â¥Â«Â¥Â¹Â¥Â¿Â¥Ã ÃŠÃ¤Â´Â°Â¤Ã‹Â¤Ã°ú¿ô¤È¤·¤Æ´Ø¿ô¤¬É¬ÃפǤ¹"
+
+msgid "unknown"
+msgstr "ÉÔÌÀ"
+
+#, c-format
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Â¥Â«Â¥Ã©Â¡Â¼Â¥Â¹Â¥Â­Â¡Â¼Â¥Ã  '%s' Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+msgid "Greetings, Vim user!"
+msgstr "Vim Â»ÃˆÂ¤Â¤Â¤ÂµÂ¤Ã³Â¡Â¢Â¤Ã¤Â¤Â¢!"
+
+msgid "E784: Cannot close last tab page"
+msgstr "E784: ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Â¿Â¥Ã–¥Ú¡¼¥¸¤òÊĤ¸¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "Already only one tab page"
+msgstr "´û¤Ë¥¿¥Ö¥Ú¡¼¥¸¤Ã1¤Ä¤·¤«¤¢¤ê¤Þ¤»¤ó"
+
+msgid "Edit File in new window"
+msgstr "¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤Ç¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤·¤Þ¤¹"
+
+#, c-format
+msgid "Tab page %d"
+msgstr "¥¿¥Ö¥Ú¡¼¥¸ %d"
+
+msgid "No swap file"
+msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "Append File"
+msgstr "Äɲåե¡¥¤¥ë"
+
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+msgstr ""
+"E747: Â¥Ã¥Ã¥Õ¥¡¤¬½¤Àµ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç, Â¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã²ÃŠÃ‘¹¹¤Ç¤­¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäÇ"
+"¾å½ñ)"
+
+msgid "E186: No previous directory"
+msgstr "E186: Ã°¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E187: Unknown"
+msgstr "E187: ÃŒÂ¤ÃƒÃŽ"
+
+msgid "E465: :winsize requires two number arguments"
+msgstr "E465: :winsize Â¤Ã‹Â¤Ã2¤Ä¤Î¿ôÃäΰú¿ô¤¬É¬ÃפǤ¹"
+
+#, c-format
+msgid "Window position: X %d, Y %d"
+msgstr "¥¦¥£¥ó¥É¥¦°ÌÃÖ: X %d, Y %d"
+
+msgid "E188: Obtaining window position not implemented for this platform"
+msgstr ""
+"E188: Â¤Â³Â¤ÃŽÂ¥Ã—¥é¥Ã¥È¥Û¡¼¥à¤Ë¤Ã¥¦¥£¥ó¥É¥¦°ÌÃ֤μèÆÀµ¡Ç½¤Ã¼ÂÃõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E466: :winpos requires two number arguments"
+msgstr "E466: :winpos Â¤Ã‹Â¤Ã2¤Ä¤Î¿ôÃäΰú¿ô¤¬É¬ÃפǤ¹"
+
+msgid "Save Redirection"
+msgstr "¥ê¥À¥¤¥ì¥¯¥È¤òÊø¤·¤Þ¤¹"
+
+msgid "Save View"
+msgstr "¥Ó¥å¡¼¤òÊø¤·¤Þ¤¹"
+
+msgid "Save Session"
+msgstr "¥»¥Ã¥·¥ç¥ó¾ðÊó¤òÊø¤·¤Þ¤¹"
+
+msgid "Save Setup"
+msgstr "ÀßÄê¤òÊø¤·¤Þ¤¹"
+
+#, c-format
+msgid "E739: Cannot create directory: %s"
+msgstr "E739: Â¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã²ÂºÃ®Ã€Â®Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E189: \"%s\" exists (add ! to override)"
+msgstr "E189: \"%s\" Â¤Â¬Ã‚¸ºß¤·¤Þ¤¹ (¾å½ñ¤¹¤ë¤Ë¤à! Â¤Ã²Ã„ɲ䷤Ƥ¯¤À¤µ¤¤)"
+
+#, c-format
+msgid "E190: Cannot open \"%s\" for writing"
+msgstr "E190: \"%s\" Â¤Ã²Â½Ã±Â¹Ã¾Â¤ÃŸÃѤȤ·¤Æ³«¤±¤Þ¤»¤ó"
+
+#. set mark
+msgid "E191: Argument must be a letter or forward/backward quote"
+msgstr "E191: Â°ÃºÂ¿Ã´Â¤Ã1ʸ»ú¤Î±Ñ»ú¤«°úÃÑÉä (' Â¤Â« `) Â¤Ã‡Â¤ÃŠÂ¤Â±Â¤Ã¬Â¤Ã¤¤¤±¤Þ¤»¤ó"
+
+msgid "E192: Recursive use of :normal too deep"
+msgstr "E192: :normal Â¤ÃŽÂºÃ†ÂµÂ¢ÃøÃѤ¬¿¼¤¯¤Ê¤ê²á¤®¤Þ¤·¤¿"
+
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< Â¤Ã +eval ÂµÂ¡Ã‡Â½Â¤Â¬ÃŒÂµÂ¤Â¤Â¤ÃˆÃøÃѤǤ­¤Þ¤»¤ó"
+
+msgid "E194: No alternate file name to substitute for '#'"
+msgstr "E194: '#'¤òÃÖ¤­´¹¤¨¤ëÉû¥Õ¥¡¥¤¥ë¤Î̾𤬤¢¤ê¤Þ¤»¤ó"
+
+msgid "E495: no autocommand file name to substitute for \"<afile>\""
+msgstr "E495: \"<afile>\"¤òÃÖ¤­´¹¤¨¤ëautocommand¤Î¥Õ¥¡¥¤¥ë̾¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
+msgstr "E496: \"<abuf>\"¤òÃÖ¤­´¹¤¨¤ëautocommand¥ååե¡Èֹ椬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E497: no autocommand match name to substitute for \"<amatch>\""
+msgstr "E497: \"<amatch>\"¤òÃÖ¤­´¹¤¨¤ëautocommand¤Î³ºÅö̾¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E498: no :source file name to substitute for \"<sfile>\""
+msgstr "E498: \"<sfile>\"¤òÃÖ¤­´¹¤¨¤ë :source Ã‚þåե¡¥¤¥ë̾¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: \"<slnum>\"¤òÃÖ¤­´¹¤¨¤ë¹ÔÈֹ椬¤¢¤ê¤Þ¤»¤ó"
+
+#, no-c-format
+msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+msgstr ""
+"E499: '%' Â¤Ã¤ '#' Â¤Â¬ÃŒÂµÃŒÂ¾Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŠÂ¤ÃŽÂ¤Ã‡ \":p:h\" Â¤Ã²ÃˆÂ¼Â¤Ã¯Â¤ÃŠÂ¤Â¤Â»ÃˆÂ¤Â¤ÃŠÃ½Â¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E500: Evaluates to an empty string"
+msgstr "E500: Â¶ÃµÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃˆÂ¤Â·Â¤Ã†Ã‰Â¾Â²Ã¤µ¤ì¤Þ¤·¤¿"
+
+msgid "E195: Cannot open viminfo file for reading"
+msgstr "E195: viminfo¥Õ¥¡¥¤¥ë¤òÆɹþÃѤȤ·¤Æ³«¤±¤Þ¤»¤ó"
+
+msgid "E196: No digraphs in this version"
+msgstr "E196: Â¤Â³Â¤ÃŽÂ¥Ã¡¼¥¸¥ç¥ó¤Ë¹ç»ú¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
+msgstr "E608: 'Vim' Â¤Ã‡Â»Ã¤Þ¤ëÎã³°¤à:throw Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+
+#. always scroll up, don't overwrite
+#, c-format
+msgid "Exception thrown: %s"
+msgstr "Îã³°¤¬È¯À¸¤·¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "Exception finished: %s"
+msgstr "Îã³°¤¬¼ý«¤·¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "Exception discarded: %s"
+msgstr "Îã³°¤¬ÇË´þ¤µ¤ì¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "%s, line %ld"
+msgstr "%s, Â¹Ã” %ld"
+
+#. always scroll up, don't overwrite
+#, c-format
+msgid "Exception caught: %s"
+msgstr "Îã³°¤¬Ê᪤µ¤ì¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "%s made pending"
+msgstr "%s Â¤Ã‹Â¤Ã¨Â¤ÃªÃŒÂ¤Â·Ã¨Ã„ê¾õÂÖ¤¬À¸¤¸¤Þ¤·¤¿"
+
+#, c-format
+msgid "%s resumed"
+msgstr "%s Â¤Â¬ÂºÃ†Â³Â«Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+#, c-format
+msgid "%s discarded"
+msgstr "%s Â¤Â¬Ã‡Ã‹Â´Ã¾Â¤ÂµÂ¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "Exception"
+msgstr "Îã³°"
+
+msgid "Error and interrupt"
+msgstr "¥¨¥é¡¼¤È³ä¹þ¤ß"
+
+msgid "Error"
+msgstr "¥¨¥é¡¼"
+
+#. if (pending & CSTP_INTERRUPT)
+msgid "Interrupt"
+msgstr "³ä¹þ¤ß"
+
+msgid "E579: :if nesting too deep"
+msgstr "E579: :if Â¤ÃŽÃ†Ã¾Â¤Ã¬Â»Ã’¤¬¿¼²á¤®¤Þ¤¹"
+
+msgid "E580: :endif without :if"
+msgstr "E580: :if Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :endif Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E581: :else without :if"
+msgstr "E581: :if Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :else Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E582: :elseif without :if"
+msgstr "E582: :if Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :elseif Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E583: multiple :else"
+msgstr "E583: ÃŠÂ£Â¿Ã´Â¤ÃŽ :else Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E584: :elseif after :else"
+msgstr "E584: :else Â¤ÃŽÂ¸Ã¥Â¤Ã‹ :elseif Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E585: :while/:for nesting too deep"
+msgstr "E585: :while Â¤Ã¤ :for Â¤ÃŽÃ†Ã¾Â¤Ã¬Â»Ã’¤¬¿¼²á¤®¤Þ¤¹"
+
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :while Â¤Ã¤ :for Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :continue Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E587: :break without :while or :for"
+msgstr "E587: :while Â¤Ã¤ :for Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :break Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E732: Using :endfor with :while"
+msgstr "E732: :endfor Â¤Ã² :while Â¤ÃˆÃȤ߹ç¤ï¤»¤Æ¤¤¤Þ¤¹"
+
+msgid "E733: Using :endwhile with :for"
+msgstr "E733: :endwhile Â¤Ã² :for Â¤ÃˆÃȤ߹ç¤ï¤»¤Æ¤¤¤Þ¤¹"
+
+msgid "E601: :try nesting too deep"
+msgstr "E601: :try Â¤ÃŽÃ†Ã¾Â¤Ã¬Â»Ã’¤¬¿¼²á¤®¤Þ¤¹"
+
+msgid "E603: :catch without :try"
+msgstr "E603: :try Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :catch Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+#. Give up for a ":catch" after ":finally" and ignore it.
+#. * Just parse.
+msgid "E604: :catch after :finally"
+msgstr "E604: :finally Â¤ÃŽÂ¸Ã¥Â¤Ã‹ :catch Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E606: :finally without :try"
+msgstr "E606: :try Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :finally Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+#. Give up for a multiple ":finally" and ignore it.
+msgid "E607: multiple :finally"
+msgstr "E607: ÃŠÂ£Â¿Ã´Â¤ÃŽ :finally Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E602: :endtry without :try"
+msgstr "E602: :try Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :endtry Â¤Ã‡Â¤Â¹"
+
+msgid "E193: :endfunction not inside a function"
+msgstr "E193: Â´Ã˜Â¿Ã´Â¤ÃŽÂ³Â°Â¤Ã‹ :endfunction Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: Â¸Â½ÂºÃŸÂ¤Ã¾¤Î¥Ã¥Ã¥Õ¥¡¤òÊÔ½¸¤¹¤ë¤³¤È¤Ãµö¤µ¤ì¤Þ¤»¤ó"
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: Â¸Â½ÂºÃŸÂ¤Ã¥ååե¡¾ðÊó¤òÊѹ¹¤¹¤ë¤³¤È¤Ãµö¤µ¤ì¤Þ¤»¤ó"
+
+msgid "tagname"
+msgstr "¥¿¥°Ì¾"
+
+msgid " kind file\n"
+msgstr " Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¼Ã¯ÃŽÃ \n"
+
+msgid "'history' option is zero"
+msgstr "¥ª¥×¥·¥ç¥ó 'history' Â¤Â¬Â¥Â¼Â¥Ã­Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid ""
+"\n"
+"# %s History (newest to oldest):\n"
+msgstr ""
+"\n"
+"# %s Â¹Ã ÃŒÃœÂ¤ÃŽÃúÎò (¿·¤·¤¤¤â¤Î¤«¤é¸Å¤¤¤â¤Î¤Ø):\n"
+
+msgid "Command Line"
+msgstr "¥³¥Þ¥ó¥É¥é¥¤¥ó"
+
+msgid "Search String"
+msgstr "¸¡º÷ʸ»úÎó"
+
+msgid "Expression"
+msgstr "¼°"
+
+msgid "Input Line"
+msgstr "ÆþÎùÔ"
+
+msgid "E198: cmd_pchar beyond the command length"
+msgstr "E198: cmd_pchar Â¤Â¬Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Ã„¹¤òĶ¤¨¤Þ¤·¤¿"
+
+msgid "E199: Active window or buffer deleted"
+msgstr "E199: Â¥Â¢Â¥Â¯Â¥Ã†Â¥Â£Â¥Ã–¤Ê¥¦¥£¥ó¥É¥¦¤«¥Ã¥Ã¥Õ¥¡¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿"
+
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: autocommand¤¬¥Ã¥Ã¥Õ¥¡¤«¥Ã¥Ã¥Õ¥¡Ì¾¤òÊѹ¹¤·¤Þ¤·¤¿"
+
+msgid "Illegal file name"
+msgstr "ÉÔÀµ¤Ê¥Õ¥¡¥¤¥ë̾"
+
+msgid "is a directory"
+msgstr " Â¤Ã¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹"
+
+msgid "is not a file"
+msgstr " Â¤Ã¥Õ¥¡¥¤¥ë¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr " Â¤Ã¥Ç¥Ã¥¤¥¹¤Ç¤¹ ('opendevice' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ç²óÈò¤Ç¤­¤Þ¤¹)"
+
+msgid "[New File]"
+msgstr "[¿·¥Õ¥¡¥¤¥ë]"
+
+msgid "[New DIRECTORY]"
+msgstr "[¿·µ¬¥Ç¥£¥ì¥¯¥È¥ê]"
+
+msgid "[File too big]"
+msgstr "[¥Õ¥¡¥¤¥ë²áÂç]"
+
+msgid "[Permission Denied]"
+msgstr "[ǧ²Ä¤¬¤¢¤ê¤Þ¤»¤ó]"
+
+msgid "E200: *ReadPre autocommands made the file unreadable"
+msgstr "E200: *ReadPre autocommand Â¤Â¬Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²Ã†Ã‰Â¹Ã¾Ã‰Ã”²Ä¤Ë¤·¤Þ¤·¤¿"
+
+msgid "E201: *ReadPre autocommands must not change current buffer"
+msgstr "E201: *ReadPre autocommand Â¤Ã¸½ºß¤Î¥Ã¥Ã¥Õ¥¡¤òÊѤ¨¤é¤ì¤Þ¤»¤ó"
+
+msgid "Vim: Reading from stdin...\n"
+msgstr "Vim: Ã‰Â¸Â½Ã Ã†Ã¾ÃŽÃ¤«¤éÆɹþÃæ...\n"
+
+msgid "Reading from stdin..."
+msgstr "ɸ½àÆþÎ䫤éÆɹþ¤ßÃæ..."
+
+#. Re-opening the original file failed!
+msgid "E202: Conversion made file unreadable!"
+msgstr "E202: ÃŠÃ‘´¹¤¬¥Õ¥¡¥¤¥ë¤òÆɹþÉԲĤˤ·¤Þ¤·¤¿"
+
+msgid "[fifo/socket]"
+msgstr "[FIFO/¥½¥±¥Ã¥È]"
+
+msgid "[fifo]"
+msgstr "[FIFO]"
+
+msgid "[socket]"
+msgstr "[¥½¥±¥Ã¥È]"
+
+msgid "[character special]"
+msgstr "[¥­¥ã¥é¥¯¥¿¡¦¥Ç¥Ã¥¤¥¹]"
+
+msgid "[CR missing]"
+msgstr "[CR̵]"
+
+msgid "[long lines split]"
+msgstr "[Ĺ¹Ôʬ³ä]"
+
+msgid "[NOT converted]"
+msgstr "[̤ÊÑ´¹]"
+
+msgid "[converted]"
+msgstr "[ÊÑ´¹ºÑ]"
+
+msgid "[blowfish]"
+msgstr "[blowfish°Å¹æ²½]"
+
+msgid "[crypted]"
+msgstr "[°Å¹æ²½]"
+
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[%ld Â¹Ã”ÌܤÇÊÑ´¹¥¨¥é¡¼]"
+
+#, c-format
+msgid "[ILLEGAL BYTE in line %ld]"
+msgstr "[%ld Â¹Ã”ÌܤÎÉÔÀµ¤Ê¥Ã¥¤¥È]"
+
+msgid "[READ ERRORS]"
+msgstr "[Æɹþ¥¨¥é¡¼]"
+
+msgid "Can't find temp file for conversion"
+msgstr "ÊÑ´¹¤ËɬÃפʰì»þ¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+msgid "Conversion with 'charconvert' failed"
+msgstr "'charconvert' Â¤Ã‹Â¤Ã¨Â¤Ã«ÃŠÃ‘´¹¤¬¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "can't read output of 'charconvert'"
+msgstr "'charconvert' Â¤ÃŽÂ½ÃÎäòÆɹþ¤á¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÃŠÃ½Ã‹Â¡Â¤Ã‡Â°Ã…¹æ²½¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+msgid "E676: No matching autocommands for acwrite buffer"
+msgstr "E676: acwrite¥ååե¡¤Î³ºÅö¤¹¤ëautocommand¤Ã¸ºß¤·¤Þ¤»¤ó"
+
+msgid "E203: Autocommands deleted or unloaded buffer to be written"
+msgstr "E203: ÃŠÃ¸¤¹¤ë¥Ã¥Ã¥Õ¥¡¤òautocommand¤¬ºï½ü¤«²òÊü¤·¤Þ¤·¤¿"
+
+msgid "E204: Autocommand changed number of lines in unexpected way"
+msgstr "E204: autocommand¤¬Ã½´ü¤»¤ÌÊýË¡¤Ç¹Ô¿ô¤òÊѹ¹¤·¤Þ¤·¤¿"
+
+# Added at 19-Jan-2004.
+msgid "NetBeans disallows writes of unmodified buffers"
+msgstr "NetBeans¤Ã̤Êѹ¹¤Î¥Ã¥Ã¥Õ¥¡¤ò¾å½ñ¤¹¤ë¤³¤È¤Ãµö²Ä¤·¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "Partial writes disallowed for NetBeans buffers"
+msgstr "NetBeans¥ååե¡¤Î°ìÉô¤ò½ñ¤­½Ã¤¹¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "is not a file or writable device"
+msgstr "¤Ã¥Õ¥¡¥¤¥ë¤Ç¤â½ñ¹þ¤ß²Äǽ¥Ç¥Ã¥¤¥¹¤Ç¤â¤¢¤ê¤Þ¤»¤ó"
+
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "'opendevice' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ë¤è¤ê¥Ç¥Ã¥¤¥¹¤Ø¤Î½ñ¤­¹þ¤ß¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "is read-only (add ! to override)"
+msgstr "¤ÃÆɹþÀìÃѤǤ¹ (¶¯À©½ñ¹þ¤Ë¤à! Â¤Ã²Ã„ɲÃ)"
+
+msgid "E506: Can't write to backup file (add ! to override)"
+msgstr "E506: Â¥Ã¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÊø¤Ç¤­¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäǶ¯À©Êø)"
+
+msgid "E507: Close error for backup file (add ! to override)"
+msgstr ""
+"E507: Â¥Ã¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ëºÃ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿ (! Â¤Ã²Ã„ɲäǶ¯À©)"
+
+msgid "E508: Can't read file for backup (add ! to override)"
+msgstr "E508: Â¥Ã¥Ã¥¯¥¢¥Ã¥×ÃÑ¥Õ¥¡¥¤¥ë¤òÆɹþ¤á¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäǶ¯À©Æɹþ)"
+
+msgid "E509: Cannot create backup file (add ! to override)"
+msgstr "E509: Â¥Ã¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òºî¤ì¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäǶ¯À©ºîÀ®)"
+
+msgid "E510: Can't make backup file (add ! to override)"
+msgstr "E510: Â¥Ã¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òºî¤ì¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäǶ¯À©ºîÀ®)"
+
+msgid "E460: The resource fork would be lost (add ! to override)"
+msgstr "E460: Â¥ÃªÂ¥Â½Â¡Â¼Â¥Â¹Â¥Ã•Â¥Â©Â¡Â¼Â¥Â¯Â¤Â¬Â¼ÂºÂ¤Ã¯Â¤Ã¬Â¤Ã«Â¤Â«Â¤Ã¢Â¤Â·Â¤Ã¬Â¤ÃžÂ¤Â»Â¤Ã³ (! Â¤Ã²Ã„ɲäǶ¯À©)"
+
+msgid "E214: Can't find temp file for writing"
+msgstr "E214: ÃŠÃ¸ÃÑ°ì»þ¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+msgid "E213: Cannot convert (add ! to write without conversion)"
+msgstr "E213: ÃŠÃ‘´¹¤Ç¤­¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäÇÊÑ´¹¤»¤º¤ËÊø)"
+
+msgid "E166: Can't open linked file for writing"
+msgstr "E166: Â¥ÃªÂ¥Ã³Â¥Â¯Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹Â½Ã±Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E212: Can't open file for writing"
+msgstr "E212: Â½Ã±Â¹Ã¾Â¤ÃŸÃѤ˥ե¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó"
+
+msgid "E667: Fsync failed"
+msgstr "E667: fsync Â¤Ã‹Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+
+msgid "E512: Close failed"
+msgstr "E512: ÃŠÃ„¤¸¤ë¤³¤È¤Ë¼ºÇÔ"
+
+msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+msgstr "E513: Â½Ã±Â¹Ã¾Â¤ÃŸÂ¥Â¨Â¥Ã©Â¡Â¼, ÃŠÃ‘´¹¼ºÇÔ (¾å½ñ¤¹¤ë¤Ë¤à'fenc' Â¤Ã²Â¶ÃµÂ¤Ã‹Â¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤)"
+
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: Â½Ã±Â¹Ã¾Â¤ÃŸÂ¥Â¨Â¥Ã©Â¡Â¼, ÃŠÃ‘´¹¼ºÇÔ, Â¹Ã”¿ô %ld (¾å½ñ¤¹¤ë¤Ë¤à'fenc' Â¤Ã²Â¶ÃµÂ¤Ã‹Â¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤Âµ"
+"¤¤)"
+
+msgid "E514: write error (file system full?)"
+msgstr "E514: Â½Ã±Â¹Ã¾Â¤ÃŸÂ¥Â¨Â¥Ã©Â¡Â¼, (¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤¬ËþÇÕ?)"
+
+msgid " CONVERSION ERROR"
+msgstr " ÃŠÃ‘´¹¥¨¥é¡¼"
+
+#, c-format
+msgid " in line %ld;"
+msgstr "¹Ô %ld;"
+
+msgid "[Device]"
+msgstr "[¥Ç¥Ã¥¤¥¹]"
+
+msgid "[New]"
+msgstr "[¿·]"
+
+msgid " [a]"
+msgstr " [a]"
+
+msgid " appended"
+msgstr " Ã„ɲÃ"
+
+msgid " [w]"
+msgstr " [w]"
+
+msgid " written"
+msgstr " Â½Ã±Â¹Ã¾Â¤ÃŸ"
+
+msgid "E205: Patchmode: can't save original file"
+msgstr "E205: patchmode: Â¸Â¶Ã‹ÃœÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃŠÃ¸¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E206: patchmode: can't touch empty original file"
+msgstr "E206: patchmode: Â¶ÃµÂ¤ÃŽÂ¸Â¶Ã‹ÃœÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²touch¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E207: Can't delete backup file"
+msgstr "E207: Â¥Ã¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ò¾Ã¤»¤Þ¤»¤ó"
+
+msgid ""
+"\n"
+"WARNING: Original file may be lost or damaged\n"
+msgstr ""
+"\n"
+"·Ù¹ð: Â¸Â¶Ã‹ÃœÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¼ÂºÂ¤Ã¯Â¤Ã¬Â¤Â¿Â¤Â«ÃŠÃ‘¹¹¤µ¤ì¤Þ¤·¤¿\n"
+
+msgid "don't quit the editor until the file is successfully written!"
+msgstr "¥Õ¥¡¥¤¥ë¤ÎÊø¤ËÀ®¸ù¤¹¤ë¤Þ¤Ç¥¨¥Ç¥£¥¿¤ò½ªÎ»¤·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤!"
+
+msgid "[dos]"
+msgstr "[dos]"
+
+msgid "[dos format]"
+msgstr "[dos¥Õ¥©¡¼¥Þ¥Ã¥È]"
+
+msgid "[mac]"
+msgstr "[mac]"
+
+msgid "[mac format]"
+msgstr "[mac¥Õ¥©¡¼¥Þ¥Ã¥È]"
+
+msgid "[unix]"
+msgstr "[unix]"
+
+msgid "[unix format]"
+msgstr "[unix¥Õ¥©¡¼¥Þ¥Ã¥È]"
+
+msgid "1 line, "
+msgstr "1 Â¹Ã”, "
+
+#, c-format
+msgid "%ld lines, "
+msgstr "%ld Â¹Ã”, "
+
+msgid "1 character"
+msgstr "1 ÃŠÂ¸Â»Ãº"
+
+#, c-format
+msgid "%lld characters"
+msgstr "%lld ÃŠÂ¸Â»Ãº"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
+msgid "%ld characters"
+msgstr "%ld ÃŠÂ¸Â»Ãº"
+
+msgid "[noeol]"
+msgstr "[noeol]"
+
+msgid "[Incomplete last line]"
+msgstr "[ºÇ½ª¹Ô¤¬ÉÔ´°Ã´]"
+
+#. don't overwrite messages here
+#. must give this prompt
+#. don't use emsg() here, don't want to flush the buffers
+msgid "WARNING: The file has been changed since reading it!!!"
+msgstr "·Ù¹ð: Ã†Ã‰Â¹Ã¾Â¤Ã³Â¤Ã€Â¸Ã¥Â¤Ã‹Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹ÃŠÃ‘¹¹¤¬¤¢¤ê¤Þ¤·¤¿!!!"
+
+msgid "Do you really want to write to it"
+msgstr "ËÜÅö¤Ë¾å½ñ¤­¤·¤Þ¤¹¤«"
+
+#, c-format
+msgid "E208: Error writing to \"%s\""
+msgstr "E208: \"%s\" Â¤Ã²Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "E209: Error closing \"%s\""
+msgstr "E209: \"%s\" Â¤Ã²ÃŠÃ„¤¸¤ë»þ¤Ë¥¨¥é¡¼¤Ç¤¹"
+
+#, c-format
+msgid "E210: Error reading \"%s\""
+msgstr "E210: \"%s\" Â¤Ã²Ã†Ã‰Â¹Ã¾ÃƒÃ¦Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹"
+
+msgid "E246: FileChangedShell autocommand deleted buffer"
+msgstr "E246: autocommand Â¤ÃŽ FileChangedShell Â¤Â¬Â¥Ã¥Ã¥Õ¥¡¤òºï½ü¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã´û¤Ë¸ºß¤·¤Þ¤»¤ó"
+
+#, c-format
+msgid ""
+"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
+"well"
+msgstr "W12: Â·Ã™Â¹Ã°: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Â¬ÃŠÃ‘¹¹¤µ¤ìVim¤Î¥Ã¥Ã¥Õ¥¡¤âÊѹ¹¤µ¤ì¤Þ¤·¤¿"
+
+msgid "See \":help W12\" for more info."
+msgstr "¾ÜºÙ¤à\":help W12\" Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+
+#, c-format
+msgid "W11: Warning: File \"%s\" has changed since editing started"
+msgstr "W11: Â·Ã™Â¹Ã°: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤ÃÊÔ½¸³«»Ã¸å¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿"
+
+msgid "See \":help W11\" for more info."
+msgstr "¾ÜºÙ¤à\":help W11\" Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+
+#, c-format
+msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
+msgstr "W16: Â·Ã™Â¹Ã°: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤ÃŽÂ¥Ã¢Â¡Â¼Â¥Ã‰Â¤Â¬ÃŠÃ”½¸³«»Ã¸å¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿"
+
+msgid "See \":help W16\" for more info."
+msgstr "¾ÜºÙ¤à\":help W16\" Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+
+#, c-format
+msgid "W13: Warning: File \"%s\" has been created after editing started"
+msgstr "W13: Â·Ã™Â¹Ã°: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤ÃÊÔ½¸³«»Ã¸å¤ËºîÀ®¤µ¤ì¤Þ¤·¤¿"
+
+msgid "Warning"
+msgstr "·Ù¹ð"
+
+msgid ""
+"&OK\n"
+"&Load File"
+msgstr ""
+"&OK\n"
+"¥Õ¥¡¥¤¥ëÆɹþ(&L)"
+
+#, c-format
+msgid "E462: Could not prepare for reloading \"%s\""
+msgstr "E462: \"%s\" Â¤Ã²Â¥ÃªÂ¥Ã­Â¡Â¼Â¥Ã‰Â¤Â¹Â¤Ã«Â½Ã ÃˆÃ·Â¤Â¬Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿"
+
+#, c-format
+msgid "E321: Could not reload \"%s\""
+msgstr "E321: \"%s\" Â¤Ã¥ê¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "--Deleted--"
+msgstr "--ºï½üºÑ--"
+
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "autocommand: %s <¥ååե¡=%d> Â¤Â¬Â¼Â«Ã†Â°Ã…ª¤Ëºï½ü¤µ¤ì¤Þ¤¹"
+
+#. the group doesn't exist
+#, c-format
+msgid "E367: No such group: \"%s\""
+msgstr "E367: Â¤Â½Â¤ÃŽÂ¥Â°Â¥Ã«Â¡Â¼Â¥Ã—¤Ã¤¢¤ê¤Þ¤»¤ó: \"%s\""
+
+#, c-format
+msgid "E215: Illegal character after *: %s"
+msgstr "E215: * Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "E216: No such event: %s"
+msgstr "E216: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÂ¥Â¤Â¥Ã™Â¥Ã³Â¥ÃˆÂ¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E216: No such group or event: %s"
+msgstr "E216: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÂ¥Â°Â¥Ã«Â¡Â¼Â¥Ã—¤â¤·¤¯¤Ã¥¤¥Ù¥ó¥È¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+#. Highlight title
+msgid ""
+"\n"
+"--- Auto-Commands ---"
+msgstr ""
+"\n"
+"--- Auto-Commands ---"
+
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <¥ååե¡=%d>: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã¥Ã¥Õ¥¡ÈÖ¹æ¤Ç¤¹ "
+
+msgid "E217: Can't execute autocommands for ALL events"
+msgstr "E217: Ã´¤Æ¤Î¥¤¥Ù¥ó¥È¤ËÂ䷤ƤÎautocommand¤Ã¼Â¹Ô¤Ç¤­¤Þ¤»¤ó"
+
+msgid "No matching autocommands"
+msgstr "³ºÅö¤¹¤ëautocommand¤Ã¸ºß¤·¤Þ¤»¤ó"
+
+msgid "E218: autocommand nesting too deep"
+msgstr "E218: autocommand¤ÎÆþ¤ì»Ò¤¬¿¼²á¤®¤Þ¤¹"
+
+#, c-format
+msgid "%s Auto commands for \"%s\""
+msgstr "%s Auto commands for \"%s\""
+
+#, c-format
+msgid "Executing %s"
+msgstr "%s Â¤Ã²Â¼Ã‚¹Ô¤·¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "autocommand %s"
+msgstr "autocommand %s"
+
+msgid "E219: Missing {."
+msgstr "E219: { Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³."
+
+msgid "E220: Missing }."
+msgstr "E220: } Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³."
+
+msgid "E490: No fold found"
+msgstr "E490: Ã€ÃžÂ¾Ã¶Â¤ÃŸÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E350: Cannot create fold with current 'foldmethod'"
+msgstr "E350: Â¸Â½ÂºÃŸÂ¤ÃŽ 'foldmethod' Â¤Ã‡Â¤ÃÀÞ¾ö¤ß¤òºîÀ®¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E351: Cannot delete fold with current 'foldmethod'"
+msgstr "E351: Â¸Â½ÂºÃŸÂ¤ÃŽ 'foldmethod' Â¤Ã‡Â¤ÃÀÞ¾ö¤ß¤òºï½ü¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "+--%3ld lines folded "
+msgstr "+--%3ld Â¹Ã”¤¬ÀÞ¾ö¤Þ¤ì¤Þ¤·¤¿ "
+
+msgid "E222: Add to read buffer"
+msgstr "E222: Ã†Ã‰Â¹Ã¾Â¥Ã¥Ã¥Õ¥¡¤ØÄɲÃ"
+
+msgid "E223: recursive mapping"
+msgstr "E223: ÂºÃ†ÂµÂ¢Ã…ª¥Þ¥Ã¥Ô¥ó¥°"
+
+#, c-format
+msgid "E224: global abbreviation already exists for %s"
+msgstr "E224: %s Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Â°Â¥Ã­Â¡Â¼Â¥Ã¥ëû½ÌÆþÎäôû¤Ë¸ºß¤·¤Þ¤¹"
+
+#, c-format
+msgid "E225: global mapping already exists for %s"
+msgstr "E225: %s Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Â°Â¥Ã­Â¡Â¼Â¥Ã¥ë¥Þ¥Ã¥Ô¥ó¥°¤Ã´û¤Ë¸ºß¤·¤Þ¤¹"
+
+#, c-format
+msgid "E226: abbreviation already exists for %s"
+msgstr "E226: %s Â¤ÃˆÂ¤Â¤Â¤Â¦ÃƒÂ»Â½ÃŒÃ†Ã¾ÃŽÃ¤Ã´û¤Ë¸ºß¤·¤Þ¤¹"
+
+#, c-format
+msgid "E227: mapping already exists for %s"
+msgstr "E227: %s Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥ÃžÂ¥ÃƒÂ¥Ã”¥ó¥°¤Ã´û¤Ë¸ºß¤·¤Þ¤¹"
+
+msgid "No abbreviation found"
+msgstr "û½ÌÆþÎäø«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "No mapping found"
+msgstr "¥Þ¥Ã¥Ô¥ó¥°¤Ã¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "E228: makemap: Illegal mode"
+msgstr "E228: makemap: Ã‰Ã”Àµ¤Ê¥â¡¼¥É"
+
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: GUIÃÑ¤Î¥×¥í¥»¥¹¤Îµ¯Æ°¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Â»Ã’¥×¥í¥»¥¹¤¬GUI¤Îµ¯Æ°¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "E229: Cannot start the GUI"
+msgstr "E229: GUI¤ò³«»Ã¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E230: Cannot read from \"%s\""
+msgstr "E230: \"%s\"¤«¤éÆɹþ¤à¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E665: Cannot start GUI, no valid font found"
+msgstr "E665: Ã­¸ú¤Ê¥Õ¥©¥ó¥È¤¬¸«¤Ä¤«¤é¤Ê¤¤¤Î¤Ç, GUI¤ò³«»Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E231: 'guifontwide' invalid"
+msgstr "E231: 'guifontwide' Â¤Â¬ÃŒÂµÂ¸ÃºÂ¤Ã‡Â¤Â¹"
+
+msgid "E599: Value of 'imactivatekey' is invalid"
+msgstr "E599: 'imactivatekey' Â¤Ã‹Ã€ÃŸÃ„ꤵ¤ì¤¿Ãä¬Ìµ¸ú¤Ç¤¹"
+
+#, c-format
+msgid "E254: Cannot allocate color %s"
+msgstr "E254: %s Â¤ÃŽÂ¿Â§Â¤Ã²Â³Ã¤Â¤ÃªÃ…ö¤Æ¤é¤ì¤Þ¤»¤ó"
+
+msgid "No match at cursor, finding next"
+msgstr "¥«¡¼¥½¥ë¤Î°ÌÃ֤˥ޥåä䢤ê¤Þ¤»¤ó, Â¼Â¡Â¤Ã²Â¸Â¡ÂºÃ·Â¤Â·Â¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+
+msgid "<cannot open> "
+msgstr "<³«¤±¤Þ¤»¤ó> "
+
+#, c-format
+msgid "E616: vim_SelFile: can't get font %s"
+msgstr "E616: vim_SelFile: Â¥Ã•Â¥Â©Â¥Ã³Â¥Ãˆ %s Â¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E614: vim_SelFile: can't return to current directory"
+msgstr "E614: vim_SelFile: Â¸Â½ÂºÃŸÂ¤ÃŽÂ¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã‹ÃŒÃ¡Â¤Ã¬Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "Pathname:"
+msgstr "¥Ñ¥¹Ì¾:"
+
+msgid "E615: vim_SelFile: can't get current directory"
+msgstr "E615: vim_SelFile: Â¸Â½ÂºÃŸÂ¤ÃŽÂ¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Cancel"
+msgstr "¥­¥ã¥ó¥»¥ë"
+
+msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
+msgstr "¥¹¥¯¥í¡¼¥ë¥Ã¡¼: Â²Ã¨Ãü¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿."
+
+msgid "Vim dialog"
+msgstr "Vim Â¥Ã€Â¥Â¤Â¥Â¢Â¥Ã­Â¥Â°"
+
+msgid "E232: Cannot create BalloonEval with both message and callback"
+msgstr "E232: Â¥Ã¡Â¥ÃƒÂ¥Â»Â¡Â¼Â¥Â¸Â¤ÃˆÂ¥Â³Â¡Â¼Â¥Ã«Â¥Ã¥Ã¥¯¤Î¤¢¤ë BalloonEval Â¤Ã²ÂºÃ®Ã€Â®Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid ""
+"&Yes\n"
+"&No\n"
+"&Cancel"
+msgstr ""
+"¤Ã¤¤(&Y)\n"
+"¤¤¤¤¤¨(&N)\n"
+"¥­¥ã¥ó¥»¥ë(&C)"
+
+msgid "Input _Methods"
+msgstr "¥¤¥ó¥×¥Ã¥È¥á¥½¥Ã¥É"
+
+msgid "VIM - Search and Replace..."
+msgstr "VIM - Â¸Â¡ÂºÃ·Â¤ÃˆÃƒÃ–´¹..."
+
+msgid "VIM - Search..."
+msgstr "VIM - Â¸Â¡ÂºÃ·..."
+
+msgid "Find what:"
+msgstr "¸¡º÷ʸ»úÎó:"
+
+msgid "Replace with:"
+msgstr "ÃÖ´¹Ê¸»úÎó:"
+
+#. whole word only button
+msgid "Match whole word only"
+msgstr "Àµ³Î¤Ë³ºÅö¤¹¤ë¤â¤Î¤À¤±"
+
+#. match case button
+msgid "Match case"
+msgstr "Âçʸ»ú/¾®Ê¸»ú¤ò¶èÊ̤¹¤ë"
+
+msgid "Direction"
+msgstr "Êý¸þ"
+
+#. 'Up' and 'Down' buttons
+msgid "Up"
+msgstr "¾å"
+
+msgid "Down"
+msgstr "²¼"
+
+#. 'Find Next' button
+msgid "Find Next"
+msgstr "¼¡¤ò¸¡º÷"
+
+#. 'Replace' button
+msgid "Replace"
+msgstr "ÃÖ´¹"
+
+#. 'Replace All' button
+msgid "Replace All"
+msgstr "ô¤ÆÃÖ´¹"
+
+msgid "Vim: Received \"die\" request from session manager\n"
+msgstr "Vim: Â¥Â»Â¥ÃƒÂ¥Â·Â¥Ã§Â¥Ã³Â¥ÃžÂ¥Ã¡¼¥¸¥ã¤«¤é \"die\" Ã×µá¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿\n"
+
+msgid "Close"
+msgstr "ÊĤ¸¤ë"
+
+msgid "New tab"
+msgstr "¿·µ¬¥¿¥Ö¥Ú¡¼¥¸"
+
+msgid "Open Tab..."
+msgstr "¥¿¥Ö¥Ú¡¼¥¸¤ò³«¤¯..."
+
+msgid "Vim: Main window unexpectedly destroyed\n"
+msgstr "Vim: Â¥Ã¡Â¥Â¤Â¥Ã³Â¥Â¦Â¥Â£Â¥Ã³Â¥Ã‰Â¥Â¦Â¤Â¬Ã‰Ã”°Õ¤ËÇ˲õ¤µ¤ì¤Þ¤·¤¿\n"
+
+msgid "&Filter"
+msgstr "¥Õ¥£¥ë¥¿(&F)"
+
+msgid "&Cancel"
+msgstr "¥­¥ã¥ó¥»¥ë(&C)"
+
+msgid "Directories"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê"
+
+msgid "Filter"
+msgstr "¥Õ¥£¥ë¥¿"
+
+msgid "&Help"
+msgstr "¥Ø¥ë¥×(&H)"
+
+msgid "Files"
+msgstr "¥Õ¥¡¥¤¥ë"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "Selection"
+msgstr "êÂò"
+
+msgid "Find &Next"
+msgstr "¼¡¤ò¸¡º÷(&N)"
+
+msgid "&Replace"
+msgstr "ÃÖ´¹(&R)"
+
+msgid "Replace &All"
+msgstr "ô¤ÆÃÖ´¹(&A)"
+
+msgid "&Undo"
+msgstr "¥¢¥ó¥É¥¥(&U)"
+
+#, c-format
+msgid "E671: Cannot find window title \"%s\""
+msgstr "E671: Â¥Â¿Â¥Â¤Â¥ÃˆÂ¥Ã«Â¤Â¬ \"%s\" Â¤ÃŽÂ¥Â¦Â¥Â£Â¥Ã³Â¥Ã‰Â¥Â¦Â¤Ã¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
+msgstr "E243: Â°ÃºÂ¿Ã´Â¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Þ¤»¤ó: \"-%s\"; OLEÈǤò»ÈÃѤ·¤Æ¤¯¤À¤µ¤¤."
+
+msgid "E672: Unable to open window inside MDI application"
+msgstr "E672: MDI¥¢¥×¥ê¤ÎÃæ¤Ç¤Ã¥¦¥£¥ó¥É¥¦¤ò³«¤±¤Þ¤»¤ó"
+
+msgid "Close tab"
+msgstr "¥¿¥Ö¥Ú¡¼¥¸¤òÊĤ¸¤ë"
+
+msgid "Open tab..."
+msgstr "¥¿¥Ö¥Ú¡¼¥¸¤ò³«¤¯"
+
+msgid "Find string (use '\\\\' to find  a '\\')"
+msgstr "¸¡º÷ʸ»úÎó ('\\' Â¤Ã²Â¸Â¡ÂºÃ·Â¤Â¹Â¤Ã«Â¤Ã‹Â¤Ã '\\\\')"
+
+msgid "Find & Replace (use '\\\\' to find  a '\\')"
+msgstr "¸¡º÷¡¦ÃÖ´¹ ('\\' Â¤Ã²Â¸Â¡ÂºÃ·Â¤Â¹Â¤Ã«Â¤Ã‹Â¤Ã '\\\\')"
+
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
+msgid "Not Used"
+msgstr "»È¤ï¤ì¤Þ¤»¤ó"
+
+msgid "Directory\t*.nothing\n"
+msgstr "¥Ç¥£¥ì¥¯¥È¥ê\t*.nothing\n"
+
+msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
+msgstr "Vim E458: Â¿Â§Â»Ã˜Ã„꤬Àµ¤·¤¯¤Ê¤¤¤Î¤Ç¥¨¥ó¥È¥ê¤ò³ä¤êÅö¤Æ¤é¤ì¤Þ¤»¤ó"
+
+#, c-format
+msgid "E250: Fonts for the following charsets are missing in fontset %s:"
+msgstr "E250: Â°ÃŠÂ²Â¼Â¤ÃŽÃŠÂ¸Â»ÃºÂ¥Â»Â¥ÃƒÂ¥ÃˆÂ¤ÃŽÂ¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³ %s:"
+
+#, c-format
+msgid "E252: Fontset name: %s"
+msgstr "E252: Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¥Â»Â¥ÃƒÂ¥ÃˆÃŒÂ¾: %s"
+
+#, c-format
+msgid "Font '%s' is not fixed-width"
+msgstr "¥Õ¥©¥ó¥È '%s' Â¤Ã¸ÇÄêÉý¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E253: Fontset name: %s"
+msgstr "E253: Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¥Â»Â¥ÃƒÂ¥ÃˆÃŒÂ¾: %s"
+
+#, c-format
+msgid "Font0: %s"
+msgstr "¥Õ¥©¥ó¥È0: %s"
+
+#, c-format
+msgid "Font1: %s"
+msgstr "¥Õ¥©¥ó¥È1: %s"
+
+#, c-format
+msgid "Font%ld width is not twice that of font0"
+msgstr "¥Õ¥©¥ó¥È%ld Â¤ÃŽÃ‰Ã½Â¤Â¬Â¥Ã•Â¥Â©Â¥Ã³Â¥Ãˆ0¤Î2ÇܤǤ䢤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "Font0 width: %ld"
+msgstr "¥Õ¥©¥ó¥È0¤ÎÉý: %ld"
+
+#, c-format
+msgid "Font1 width: %ld"
+msgstr "¥Õ¥©¥ó¥È1¤ÎÉý: %ld"
+
+msgid "Invalid font specification"
+msgstr "̵¸ú¤Ê¥Õ¥©¥ó¥È»ØÄê¤Ç¤¹"
+
+msgid "&Dismiss"
+msgstr "µÑ²¼¤¹¤ë(&D)"
+
+msgid "no specific match"
+msgstr "¥Þ¥Ã¥Ã¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "Vim - Font Selector"
+msgstr "Vim - Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÃªÂò"
+
+msgid "Name:"
+msgstr "̾ð:"
+
+#. create toggle button
+msgid "Show size in Points"
+msgstr "¥µ¥¤¥º¤ò¥Ã¥¤¥ó¥È¤Çɽ¼¨¤¹¤ë"
+
+msgid "Encoding:"
+msgstr "¥¨¥ó¥³¡¼¥É:"
+
+msgid "Font:"
+msgstr "¥Õ¥©¥ó¥È:"
+
+msgid "Style:"
+msgstr "¥¹¥¿¥¤¥ë:"
+
+msgid "Size:"
+msgstr "¥µ¥¤¥º:"
+
+msgid "E256: Hangul automata ERROR"
+msgstr "E256: Â¥Ã¥ó¥°¥ë¥ª¡¼¥È¥Þ¥È¥ó¥¨¥é¡¼"
+
+msgid "E550: Missing colon"
+msgstr "E550: Â¥Â³Â¥Ã­Â¥Ã³Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E551: Illegal component"
+msgstr "E551: Ã‰Ã”Àµ¤Ê¹½Ê¸Ã×ÃǤǤ¹"
+
+msgid "E552: digit expected"
+msgstr "E552: Â¿Ã´ÃƒÃ¤¬É¬ÃפǤ¹"
+
+#, c-format
+msgid "Page %d"
+msgstr "%d Â¥ÃšÂ¡Â¼Â¥Â¸"
+
+msgid "No text to be printed"
+msgstr "°õºþ¤¹¤ë¥Æ¥­¥¹¥È¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr "°õºþÃæ: Â¥ÃšÂ¡Â¼Â¥Â¸ %d (%d%%)"
+
+#, c-format
+msgid " Copy %d of %d"
+msgstr " Â¥Â³Â¥Ã”¡¼ %d (ô %d ÃƒÃ¦)"
+
+#, c-format
+msgid "Printed: %s"
+msgstr "°õºþ¤·¤Þ¤·¤¿: %s"
+
+msgid "Printing aborted"
+msgstr "°õºþ¤¬Ãæ»ß¤µ¤ì¤Þ¤·¤¿"
+
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: PostScript½ÃÃŽÃ¥Õ¥¡¥¤¥ë¤Î½ñ¹þ¤ß¥¨¥é¡¼¤Ç¤¹"
+
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: PostScript¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã PostScript Â¥ÃªÂ¥Â½Â¡Â¼Â¥Â¹Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤ÃÂñþ¤·¤Æ¤¤¤Ê¤¤ PostScript Â¥ÃªÂ¥Â½Â¡Â¼Â¥Â¹Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: Â¥ÃªÂ¥Â½Â¡Â¼Â¥Â¹Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã¥á¼¥¸¥ç¥ó¤¬°Û¤Ê¤ê¤Þ¤¹"
+
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: Â¸ÃŸÂ´Â¹Ã€Â­Â¤ÃŽÃŒÂµÂ¤Â¤Â¥ÃžÂ¥Ã«Â¥Ã¥å¤¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Èʸ»ú¥»¥Ã¥È¤Ç¤¹"
+
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: Â¥ÃžÂ¥Ã«Â¥Ã¥å¤¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ç¤àprintmbcharset Â¤Ã²Â¶ÃµÂ¤Ã‹Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr ""
+"E675: Â¥ÃžÂ¥Ã«Â¥Ã¥å¤¥Èʸ»ú¤ò°õºþ¤¹¤ë¤¿¤á¤Î¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: PostScript½ÃÃŽÃÃѤΥե¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: PostScript¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë \"prolog.ps\" Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: PostScript¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë \"cidfont.ps\" Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: PostScript¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë \"%s.ps\" Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: Â°ÃµÂºÃ¾Â¥Â¨Â¥Ã³Â¥Â³Â¡Â¼Â¥Ã‰ \"%s\" Â¤Ã˜ÃŠÃ‘´¹¤Ç¤­¤Þ¤»¤ó"
+
+msgid "Sending to printer..."
+msgstr "¥×¥ê¥ó¥¿¤ËÃ÷¿®Ãæ..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: PostScript¥Õ¥¡¥¤¥ë¤Î°õºþ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "Print job sent."
+msgstr "°õºþ¥¸¥ç¥Ö¤òÃ÷¿®¤·¤Þ¤·¤¿."
+
+msgid "Add a new database"
+msgstr "¿·¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÄɲÃ"
+
+msgid "Query for a pattern"
+msgstr "¥Ñ¥¿¡¼¥ó¤Î¥¯¥¨¥ê¡¼¤òÄɲÃ"
+
+msgid "Show this message"
+msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë"
+
+msgid "Kill a connection"
+msgstr "Àܳ¤ò½ªÎ»¤¹¤ë"
+
+msgid "Reinit all connections"
+msgstr "ô¤Æ¤ÎÀܳ¤òºÆ½é´ü²½¤¹¤ë"
+
+msgid "Show connections"
+msgstr "Àܳ¤òɽ¼¨¤¹¤ë"
+
+#, c-format
+msgid "E560: Usage: cs[cope] %s"
+msgstr "E560: Â»ÃˆÃÑÊýË¡: cs[cope] %s"
+
+msgid "This cscope command does not support splitting the window.\n"
+msgstr "¤³¤Îcscope¥³¥Þ¥ó¥É¤Ãʬ³ä¥¦¥£¥ó¥É¥¦¤Ç¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Þ¤»¤ó.\n"
+
+msgid "E562: Usage: cstag <ident>"
+msgstr "E562: Â»ÃˆÃÑË¡: cstag <ident>"
+
+msgid "E257: cstag: tag not found"
+msgstr "E257: cstag: Â¥Â¿Â¥Â°Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E563: stat(%s) error: %d"
+msgstr "E563: stat(%s) Â¥Â¨Â¥Ã©Â¡Â¼: %d"
+
+msgid "E563: stat error"
+msgstr "E563: stat Â¥Â¨Â¥Ã©Â¡Â¼"
+
+#, c-format
+msgid "E564: %s is not a directory or a valid cscope database"
+msgstr "E564: %s Â¤Ã¥Ç¥£¥ì¥¯¥È¥êµÚ¤Óí¸ú¤Êcscope¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "Added cscope database %s"
+msgstr "cscope¥Ç¡¼¥¿¥Ù¡¼¥¹ %s Â¤Ã²Ã„ɲÃ"
+
+#, c-format
+msgid "E262: error reading cscope connection %ld"
+msgstr "E262: cscope¤ÎÀܳ %ld Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤ÃŸÃƒÃ¦Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹"
+
+msgid "E561: unknown cscope search type"
+msgstr "E561: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽcscope¸¡º÷·¿¤Ç¤¹"
+
+msgid "E566: Could not create cscope pipes"
+msgstr "E566: cscope¥Ñ¥¤¥×¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "E622: Could not fork for cscope"
+msgstr "E622: cscope¤Îµ¯Æ°½àÈ÷(fork)¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "cs_create_connection setpgid failed"
+msgstr "cs_create_connection Â¤Ã˜Â¤ÃŽ setpgid Â¤Ã‹Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+
+msgid "cs_create_connection exec failed"
+msgstr "cs_create_connection Â¤ÃŽÂ¼Ã‚¹Ô¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "cs_create_connection: fdopen for to_fp failed"
+msgstr "cs_create_connection: to_fp Â¤ÃŽ fdopen Â¤Ã‹Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+
+msgid "cs_create_connection: fdopen for fr_fp failed"
+msgstr "cs_create_connection: fr_fp Â¤ÃŽ fdopen Â¤Ã‹Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+
+msgid "E623: Could not spawn cscope process"
+msgstr "E623: cscope¥×¥í¥»¥¹¤òµ¯Æ°¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "E567: no cscope connections"
+msgstr "E567: cscopeÀܳ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "E469: invalid cscopequickfix flag %c for %c"
+msgstr "E469: ÃŒÂµÂ¸ÃºÂ¤ÃŠ cscopequickfix Â¥Ã•Â¥Ã©Â¥Â° %c Â¤ÃŽ %c Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: cscope¥¯¥¨¥ê¡¼ %s of %s Â¤Ã‹Â³ÂºÃ…ö¤¬¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "cscope commands:\n"
+msgstr "cscope¥³¥Þ¥ó¥É:\n"
+
+#, c-format
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (»ÈÃÑË¡: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: Â¤Â³Â¤ÃŽÂ´Ã˜Â¿Ã´Â¤Ã²Â¸Ã†Â¤Ã³Â¤Ã‡Â¤Â¤Â¤Ã«Â´Ã˜Â¿Ã´Â¤Ã²ÃƒÂµÂ¤Â¹\n"
+"       d: Â¤Â³Â¤ÃŽÂ´Ã˜Â¿Ã´Â¤Â«Â¤Ã©Â¸Ã†Â¤Ã³Â¤Ã‡Â¤Â¤Â¤Ã«Â´Ã˜Â¿Ã´Â¤Ã²ÃƒÂµÂ¤Â¹\n"
+"       e: Â¤Â³Â¤ÃŽegrep¥Ñ¥¿¡¼¥ó¤òõ¤¹\n"
+"       f: Â¤Â³Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃƒÂµÂ¤Â¹\n"
+"       g: Â¤Â³Â¤ÃŽÃ„êµÃ¤òõ¤¹\n"
+"       i: Â¤Â³Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²#include¤·¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤òõ¤¹\n"
+"       s: Â¤Â³Â¤ÃŽC¥·¥ó¥Ü¥ë¤òõ¤¹\n"
+"       t: Â¤Â³Â¤ÃŽÂ¥Ã†Â¥Â­Â¥Â¹Â¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã²ÃƒÂµÂ¤Â¹\n"
+
+#, c-format
+msgid "E625: cannot open cscope database: %s"
+msgstr "E625: cscope¥Ç¡¼¥¿¥Ù¡¼¥¹: %s Â¤Ã²Â³Â«Â¤Â¯Â¤Â³Â¤ÃˆÂ¤Â¬Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E626: cannot get cscope database information"
+msgstr "E626: cscope¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¾ðÊó¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E568: duplicate cscope database not added"
+msgstr "E568: Â½Ã…Ê£¤¹¤ëcscope¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÃÄɲ䵤ì¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#, c-format
+msgid "E261: cscope connection %s not found"
+msgstr "E261: cscopeÀܳ %s Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#, c-format
+msgid "cscope connection %s closed"
+msgstr "cscopeÀܳ %s Â¤Â¬ÃŠÃ„¤¸¤é¤ì¤Þ¤·¤¿"
+
+#. should not reach here
+msgid "E570: fatal error in cs_manage_matches"
+msgstr "E570: cs_manage_matches Â¤Ã‡ÃƒÃ—̿Ū¤Ê¥¨¥é¡¼¤Ç¤¹"
+
+#, c-format
+msgid "Cscope tag: %s"
+msgstr "Cscope Â¥Â¿Â¥Â°: %s"
+
+msgid ""
+"\n"
+"   #   line"
+msgstr ""
+"\n"
+"   #   Â¹Ã”ÈÖ¹æ"
+
+msgid "filename / context / line\n"
+msgstr "¥Õ¥¡¥¤¥ë̾ / ÃŠÂ¸ÃŒÂ® / Â¹Ã”\n"
+
+#, c-format
+msgid "E609: Cscope error: %s"
+msgstr "E609: cscope¥¨¥é¡¼: %s"
+
+msgid "All cscope databases reset"
+msgstr "ô¤Æ¤Îcscope¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¥ê¥»¥Ã¥È¤·¤Þ¤¹"
+
+msgid "no cscope connections\n"
+msgstr "cscopeÀܳ¤¬¤¢¤ê¤Þ¤»¤ó\n"
+
+msgid " # pid    database name                       prepend path\n"
+msgstr " # pid    Â¥Ã‡Â¡Â¼Â¥Â¿Â¥Ã™Â¡Â¼Â¥Â¹ÃŒÂ¾                      prepend Â¥Ã‘¥¹\n"
+
+msgid "Lua library cannot be loaded."
+msgstr "Lua¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó."
+
+msgid "cannot save undo information"
+msgstr "¥¢¥ó¥É¥¥¾ðÊó¤¬Êø¤Ç¤­¤Þ¤»¤ó"
+
+msgid ""
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
+"loaded."
+msgstr "E815: Â¤Â³Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã̵¸ú¤Ç¤¹. MzScheme Â¥Ã©Â¥Â¤Â¥Ã–¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó."
+
+msgid "invalid expression"
+msgstr "̵¸ú¤Ê¼°¤Ç¤¹"
+
+msgid "expressions disabled at compile time"
+msgstr "¼°¤Ã¥³¥ó¥Ñ¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+msgid "hidden option"
+msgstr "±£¤·¥ª¥×¥·¥ç¥ó"
+
+msgid "unknown option"
+msgstr "̤ÃΤΥª¥×¥·¥ç¥ó¤Ç¤¹"
+
+msgid "window index is out of range"
+msgstr "Èðó°¤Î¥¦¥£¥ó¥É¥¦ÈÖ¹æ¤Ç¤¹"
+
+msgid "couldn't open buffer"
+msgstr "¥ååե¡¤ò³«¤±¤Þ¤»¤ó"
+
+msgid "cannot delete line"
+msgstr "¹Ô¤ò¾Ã¤»¤Þ¤»¤ó"
+
+msgid "cannot replace line"
+msgstr "¹Ô¤òÃÖ´¹¤Ç¤­¤Þ¤»¤ó"
+
+msgid "cannot insert line"
+msgstr "¹Ô¤òÃÞÆþ¤Ç¤­¤Þ¤»¤ó"
+
+msgid "string cannot contain newlines"
+msgstr "ʸ»úÎó¤Ë¤Ã²þ¹Ôʸ»ú¤ò´Þ¤á¤é¤ì¤Þ¤»¤ó"
+
+msgid "error converting Scheme values to Vim"
+msgstr "SchemeÃäÎVim¤Ø¤ÎÊÑ´¹¥¨¥é¡¼"
+
+msgid "Vim error: ~a"
+msgstr "Vim Â¥Â¨Â¥Ã©Â¡Â¼: ~a"
+
+msgid "Vim error"
+msgstr "Vim Â¥Â¨Â¥Ã©Â¡Â¼"
+
+msgid "buffer is invalid"
+msgstr "¥ååե¡¤Ã̵¸ú¤Ç¤¹"
+
+msgid "window is invalid"
+msgstr "¥¦¥£¥ó¥É¥¦¤Ã̵¸ú¤Ç¤¹"
+
+msgid "linenr out of range"
+msgstr "Èðó°¤Î¹ÔÈÖ¹æ¤Ç¤¹"
+
+msgid "not allowed in the Vim sandbox"
+msgstr "¥µ¥ó¥É¥Ü¥Ã¥¯¥¹¤Ç¤Ãµö¤µ¤ì¤Þ¤»¤ó"
+
+#, c-format
+msgid "E370: Could not load library %s"
+msgstr "E370: Â¥Ã©Â¥Â¤Â¥Ã–¥é¥ê %s Â¤Ã²Â¥Ã­Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿"
+
+msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+msgstr ""
+"¤³¤Î¥³¥Þ¥ó¥É¤Ã̵¸ú¤Ç¤¹, Â¤Â´Â¤Ã¡Â¤Ã³Â¤ÃŠÂ¤ÂµÂ¤Â¤: Perl¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿."
+
+msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
+msgstr ""
+"E299: Â¥ÂµÂ¥Ã³Â¥Ã‰Â¥ÃœÂ¥ÃƒÂ¥Â¯Â¥Â¹Â¤Ã‡Â¤Ã Safe Â¥Ã¢Â¥Â¸Â¥Ã¥Â¡Â¼Â¥Ã«Â¤Ã²Â»ÃˆÃѤ·¤Ê¤¤Perl¥¹¥¯¥ê¥×¥È¤Ã¶Ø¤¸¤é¤ì"
+"¤Æ¤¤¤Þ¤¹"
+
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Â¤Â³Â¤ÃŽVim¤Ç¤à:py3 Â¤Ã²Â»ÃˆÂ¤ÃƒÂ¤Â¿Â¸Ã¥Â¤Ã‹ :python Â¤Ã²Â»ÃˆÂ¤Â¨Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid ""
+"E263: Sorry, this command is disabled, the Python library could not be "
+"loaded."
+msgstr ""
+"E263: Â¤Â³Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã̵¸ú¤Ç¤¹,¤´¤á¤ó¤Ê¤µ¤¤: Python¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó"
+"¤Ç¤·¤¿."
+
+# Added at 07-Feb-2004.
+msgid "E659: Cannot invoke Python recursively"
+msgstr "E659: Python Â¤Ã²ÂºÃ†ÂµÂ¢Ã…ª¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Â¤Â³Â¤ÃŽVim¤Ç¤à:python Â¤Ã²Â»ÃˆÂ¤ÃƒÂ¤Â¿Â¸Ã¥Â¤Ã‹ :py3 Â¤Ã²Â»ÃˆÂ¤Â¨Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ Â¤Ãʸ»úÎó¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ç¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+
+msgid ""
+"E266: Sorry, this command is disabled, the Ruby library could not be loaded."
+msgstr ""
+"E266: Â¤Â³Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã̵¸ú¤Ç¤¹,¤´¤á¤ó¤Ê¤µ¤¤: Ruby¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¤Ç"
+"¤·¤¿."
+
+msgid "E267: unexpected return"
+msgstr "E267: Ã½´ü¤»¤Ì return Â¤Ã‡Â¤Â¹"
+
+msgid "E268: unexpected next"
+msgstr "E268: Ã½´ü¤»¤Ì next Â¤Ã‡Â¤Â¹"
+
+msgid "E269: unexpected break"
+msgstr "E269: Ã½´ü¤»¤Ì break Â¤Ã‡Â¤Â¹"
+
+msgid "E270: unexpected redo"
+msgstr "E270: Ã½´ü¤»¤Ì redo Â¤Ã‡Â¤Â¹"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: rescue Â¤ÃŽÂ³Â°Â¤ÃŽ retry Â¤Ã‡Â¤Â¹"
+
+msgid "E272: unhandled exception"
+msgstr "E272: Â¼Ã¨Â¤ÃªÂ°Â·Â¤Ã¯Â¤Ã¬Â¤ÃŠÂ¤Â«Â¤ÃƒÂ¤Â¿ÃŽÃ£Â³Â°Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+#, c-format
+msgid "E273: unknown longjmp status %d"
+msgstr "E273: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽlongjmp¾õÂÖ: %d"
+
+msgid "Toggle implementation/definition"
+msgstr "¼ÂÃõ¤ÈÄêµÃ¤òÀÚ¤êÂؤ¨¤ë"
+
+msgid "Show base class of"
+msgstr "¼¡¤Î¥¯¥é¥¹¤Î´ðÄì¤òɽ¼¨"
+
+msgid "Show overridden member function"
+msgstr "¥ª¡¼¥Ã¡¼¥é¥¤¥É¤µ¤ì¤¿¥á¥ó¥Ã´Ø¿ô¤òɽ¼¨"
+
+msgid "Retrieve from file"
+msgstr "¥Õ¥¡¥¤¥ë¤«¤é²óÉü¤¹¤ë"
+
+msgid "Retrieve from project"
+msgstr "¥×¥í¥¸¥§¥¯¥È¤«¤é²óÉü¤¹¤ë"
+
+msgid "Retrieve from all projects"
+msgstr "ô¤Æ¤Î¥×¥í¥¸¥§¥¯¥È¤«¤é²óÉü¤¹¤ë"
+
+msgid "Retrieve"
+msgstr "²óÉü"
+
+msgid "Show source of"
+msgstr "¼¡¤Î¥½¡¼¥¹¤òɽ¼¨¤¹¤ë"
+
+msgid "Find symbol"
+msgstr "¸«¤Ä¤±¤¿¥·¥ó¥Ü¥ë"
+
+msgid "Browse class"
+msgstr "¥¯¥é¥¹¤ò»²¾È"
+
+msgid "Show class in hierarchy"
+msgstr "³¬Ãؤǥ¯¥é¥¹¤òɽ¼¨"
+
+msgid "Show class in restricted hierarchy"
+msgstr "¸ÂÄꤵ¤ì¤¿³¬Ãؤǥ¯¥é¥¹¤òɽ¼¨"
+
+msgid "Xref refers to"
+msgstr "Xref Â¤ÃŽÂ»Â²Â¾ÃˆÃ€Ã¨"
+
+msgid "Xref referred by"
+msgstr "Xref Â¤Â¬Â»Â²Â¾ÃˆÂ¤ÂµÂ¤Ã¬Â¤Ã«"
+
+msgid "Xref has a"
+msgstr "Xref Â¤Â¬Â¼Â¡Â¤ÃŽÂ¤Ã¢Â¤ÃŽÂ¤Ã²Â¤Ã¢Â¤ÃƒÂ¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+
+msgid "Xref used by"
+msgstr "Xref Â¤Â¬Â»ÃˆÃѤµ¤ì¤ë"
+
+msgid "Show docu of"
+msgstr "¼¡¤Îʸ¾Ã¤òɽ¼¨"
+
+msgid "Generate docu for"
+msgstr "¼¡¤Îʸ¾Ã¤òÀ¸À®"
+
+msgid ""
+"Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
+"$PATH).\n"
+msgstr ""
+"SNiFF+¤ËÀܳ¤Ç¤­¤Þ¤»¤ó. Â´Ã„¶­¤ò¥Ã¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤(sniffemacs Â¤Â¬ $PATH Â¤Ã‹Â¤ÃŠÂ¤Â±"
+"¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó).\n"
+
+msgid "E274: Sniff: Error during read. Disconnected"
+msgstr "E274: Sniff: Ã†Ã‰Â¹Ã¾ÃƒÃ¦Â¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬ÃˆÂ¯Ã€Â¸Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿. Ã€ÃšÃƒÃ‡Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "SNiFF+ is currently "
+msgstr "¸½ºßSNiFF+ Â¤ÃŽÂ¾ÃµÃ‚֤áÖ"
+
+msgid "not "
+msgstr "̤"
+
+msgid "connected"
+msgstr "Àܳ¡×¤Ç¤¹"
+
+#, c-format
+msgid "E275: Unknown SNiFF+ request: %s"
+msgstr "E275: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽ SNiFF+ Â¥ÃªÂ¥Â¯Â¥Â¨Â¥Â¹Â¥ÃˆÂ¤Ã‡Â¤Â¹: %s"
+
+msgid "E276: Error connecting to SNiFF+"
+msgstr "E276: SNiFF+ Â¤Ã˜Â¤ÃŽÃ€ÃœÃ‚³Ãæ¤Î¥¨¥é¡¼¤Ç¤¹"
+
+msgid "E278: SNiFF+ not connected"
+msgstr "E278: SNiFF+ Â¤Ã‹Ã€ÃœÃ‚³¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E279: Not a SNiFF+ buffer"
+msgstr "E279: SNiFF+ Â¥Ã¥Ã¥Õ¥¡¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "Sniff: Error during write. Disconnected"
+msgstr "Sniff: Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦Â¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬ÃˆÂ¯Ã€Â¸Â¤Â·Â¤Â¿Â¤ÃŽÂ¤Ã‡Ã€ÃšÃƒÃ‡Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "invalid buffer number"
+msgstr "̵¸ú¤Ê¥Ã¥Ã¥Õ¥¡ÈÖ¹æ¤Ç¤¹"
+
+msgid "not implemented yet"
+msgstr "¤Þ¤À¼ÂÃõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#. ???
+msgid "cannot set line(s)"
+msgstr "¹Ô¤òÀßÄê¤Ç¤­¤Þ¤»¤ó"
+
+msgid "invalid mark name"
+msgstr "̵¸ú¤Ê¥Þ¡¼¥¯Ì¾¤Ç¤¹"
+
+msgid "mark not set"
+msgstr "¥Þ¡¼¥¯¤ÃÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "row %d column %d"
+msgstr "¹Ô %d ÃŽÃ³ %d"
+
+msgid "cannot insert/append line"
+msgstr "¹Ô¤ÎÃÞÆþ/Äɲäò¤Ç¤­¤Þ¤»¤ó"
+
+msgid "line number out of range"
+msgstr "Èðó°¤Î¹ÔÈÖ¹æ¤Ç¤¹"
+
+msgid "unknown flag: "
+msgstr "̤ÃΤΥե饰: "
+
+msgid "unknown vimOption"
+msgstr "̤ÃΤΠvimOption Â¤Ã‡Â¤Â¹"
+
+msgid "keyboard interrupt"
+msgstr "¥­¡¼¥Ü¡¼¥É³ä¹þ¤ß"
+
+msgid "vim error"
+msgstr "vim Â¥Â¨Â¥Ã©Â¡Â¼"
+
+msgid "cannot create buffer/window command: object is being deleted"
+msgstr ""
+"¥ååե¡/¥¦¥£¥ó¥É¥¦ºîÀ®¥³¥Þ¥ó¥É¤òºîÀ®¤Ç¤­¤Þ¤»¤ó: Â¥ÂªÂ¥Ã–¥¸¥§¥¯¥È¤¬¾Ãµî¤µ¤ì¤Æ¤¤¤Þ"
+"¤·¤¿"
+
+msgid ""
+"cannot register callback command: buffer/window is already being deleted"
+msgstr ""
+"¥³¡¼¥ë¥Ã¥Ã¥¯¥³¥Þ¥ó¥É¤òÅÃÿ¤Ç¤­¤Þ¤»¤ó: Â¥Ã¥Ã¥Õ¥¡/¥¦¥£¥ó¥É¥¦¤¬´û¤Ë¾Ãµî¤µ¤ì¤Þ¤·¤¿"
+
+#. This should never happen.  Famous last word?
+msgid ""
+"E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim."
+"org"
+msgstr ""
+"E280: TCL ÃƒÃ—̿Ū¥¨¥é¡¼: reflist Â±Ã¸Ã€Ã·!? vim-dev@vim.org Â¤Ã‹ÃŠÃ³Â¹Ã°Â¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+
+msgid "cannot register callback command: buffer/window reference not found"
+msgstr ""
+"¥³¡¼¥ë¥Ã¥Ã¥¯¥³¥Þ¥ó¥É¤òÅÃÿ¤Ç¤­¤Þ¤»¤ó: Â¥Ã¥Ã¥Õ¥¡/¥¦¥£¥ó¥É¥¦¤Î»²¾È¤¬¸«¤Ä¤«¤ê¤Þ¤»"
+"¤ó"
+
+msgid ""
+"E571: Sorry, this command is disabled: the Tcl library could not be loaded."
+msgstr ""
+"E571: Â¤Â³Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã̵¸ú¤Ç¤¹,¤´¤á¤ó¤Ê¤µ¤¤: Tcl¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¤Ç"
+"¤·¤¿."
+
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572: Â½ÂªÃŽÂ»Â¥Â³Â¡Â¼Â¥Ã‰ %d"
+
+msgid "cannot get line"
+msgstr "¹Ô¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó"
+
+msgid "Unable to register a command server name"
+msgstr "Ì¿Î᥵¡¼¥Ã¤Î̾ð¤òÅÃÿ¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E248: Failed to send command to the destination program"
+msgstr "E248: ÃŒÃœÃ…ª¤Î¥×¥í¥°¥é¥à¤Ø¤Î¥³¥Þ¥ó¥ÉÃ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "E573: Invalid server id used: %s"
+msgstr "E573: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥ÂµÂ¡Â¼Â¥ÃID¤¬»È¤ï¤ì¤Þ¤·¤¿: %s"
+
+msgid "E251: VIM instance registry property is badly formed.  Deleted!"
+msgstr "E251: VIM Â¼Ã‚ÂΤÎÅÃÿ¥×¥í¥Ñ¥Æ¥£¤¬ÉÔÀµ¤Ç¤¹. Â¾ÃƒÂµÃ®Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿!"
+
+msgid "Unknown option argument"
+msgstr "̤ÃΤΥª¥×¥·¥ç¥ó°ú¿ô¤Ç¤¹"
+
+msgid "Too many edit arguments"
+msgstr "ÊÔ½¸°ú¿ô¤¬Â¿²á¤®¤Þ¤¹"
+
+msgid "Argument missing after"
+msgstr "°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "Garbage after option argument"
+msgstr "¥ª¥×¥·¥ç¥ó°ú¿ô¤Î¸å¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+
+msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
+msgstr "\"+command\", \"-c command\", \"--cmd command\" Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+msgid "Invalid argument for"
+msgstr "̵¸ú¤Ê°ú¿ô¤Ç¤¹: "
+
+#, c-format
+msgid "%d files to edit\n"
+msgstr "%d Â¸Ã„¤Î¥Õ¥¡¥¤¥ë¤¬ÊÔ½¸¤ò¹µ¤¨¤Æ¤¤¤Þ¤¹\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "netbeans Â¤Ã¤³¤ÎGUI¤Ç¤ÃÃøÃѤǤ­¤Þ¤»¤ó\n"
+
+msgid "This Vim was not compiled with the diff feature."
+msgstr "¤³¤ÎVim¤Ë¤Ãdiffµ¡Ç½¤¬¤¢¤ê¤Þ¤»¤ó(¥³¥ó¥Ñ¥¤¥ë»þÀßÄê)."
+
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "'-nb' Â»ÃˆÃÑÉÔ²Äǽ¤Ç¤¹: Â¥Â³Â¥Ã³Â¥Ã‘¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
+
+msgid "Attempt to open script file again: \""
+msgstr "¥¹¥¯¥ê¥×¥È¥Õ¥¡¥¤¥ë¤òºÆ¤Ó³«¤¤¤Æ¤ß¤Þ¤¹: \""
+
+msgid "Cannot open for reading: \""
+msgstr "ÆɹþÃѤȤ·¤Æ³«¤±¤Þ¤»¤ó"
+
+msgid "Cannot open for script output: \""
+msgstr "¥¹¥¯¥ê¥×¥È½ÃÃŽÃÃѤò³«¤±¤Þ¤»¤ó"
+
+msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+msgstr "Vim: Â¥Â¨Â¥Ã©Â¡Â¼: NetBeans¤«¤égvim¤ò¥¹¥¿¡¼¥È¤Ç¤­¤Þ¤»¤ó\n"
+
+msgid "Vim: Warning: Output is not to a terminal\n"
+msgstr "Vim: Â·Ã™Â¹Ã°: ÃƒÂ¼Ã‹Ã¶Â¤Ã˜Â¤ÃŽÂ½ÃÎäǤ䢤ê¤Þ¤»¤ó\n"
+
+msgid "Vim: Warning: Input is not from a terminal\n"
+msgstr "Vim: Â·Ã™Â¹Ã°: ÃƒÂ¼Ã‹Ã¶Â¤Â«Â¤Ã©Â¤ÃŽÃ†Ã¾ÃŽÃ¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó\n"
+
+#. just in case..
+msgid "pre-vimrc command line"
+msgstr "vimrcð¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó"
+
+#, c-format
+msgid "E282: Cannot read from \"%s\""
+msgstr "E282: \"%s\"¤«¤éÆɹþ¤à¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+
+msgid ""
+"\n"
+"More info with: \"vim -h\"\n"
+msgstr ""
+"\n"
+"¤è¤ê¾ÜºÙ¤Ê¾ðÊó¤Ã: \"vim -h\"\n"
+
+msgid "[file ..]       edit specified file(s)"
+msgstr "[¥Õ¥¡¥¤¥ë..]    Â¤Â¢Â¤Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃŠÃ”½¸¤¹¤ë"
+
+msgid "-               read text from stdin"
+msgstr "-               Ã‰Â¸Â½Ã Ã†Ã¾ÃŽÃ¤«¤é¥Æ¥­¥¹¥È¤òÆɹþ¤à"
+
+msgid "-t tag          edit file where tag is defined"
+msgstr "-t Â¥Â¿Â¥Â°         Â¥Â¿Â¥Â°Â¤Â¬Ã„êµÃ¤µ¤ì¤¿¤È¤³¤í¤«¤éÊÔ½¸¤¹¤ë"
+
+msgid "-q [errorfile]  edit file with first error"
+msgstr "-q [errorfile]  ÂºÃ‡Â½Ã©Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡ÃŠÃ”½¸¤¹¤ë"
+
+msgid ""
+"\n"
+"\n"
+"usage:"
+msgstr ""
+"\n"
+"\n"
+"»ÈÃÑË¡:"
+
+msgid " vim [arguments] "
+msgstr " vim [°ú¿ô] "
+
+msgid ""
+"\n"
+"   or:"
+msgstr ""
+"\n"
+"   Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã:"
+
+msgid ""
+"\n"
+"Where case is ignored prepend / to make flag upper case"
+msgstr ""
+"\n"
+"Â羮ʸ»ú¤¬Ìµ»ë¤µ¤ì¤ë¾ì¹ç¤ÃÂçʸ»ú¤Ë¤¹¤ë¤¿¤á¤Ë / Â¤Ã²Ã°ÃÖ¤·¤Æ¤¯¤À¤µ¤¤"
+
+msgid ""
+"\n"
+"\n"
+"Arguments:\n"
+msgstr ""
+"\n"
+"\n"
+"°ú¿ô:\n"
+
+msgid "--\t\t\tOnly file names after this"
+msgstr "--\t\t\t¤³¤Î¤¢¤È¤Ë¤Ã¥Õ¥¡¥¤¥ë̾¤À¤±"
+
+msgid "--literal\t\tDon't expand wildcards"
+msgstr "--literal\t\t¥ï¥¤¥ë¥É¥«¡¼¥É¤òŸ³«¤·¤Ê¤¤"
+
+msgid "-register\t\tRegister this gvim for OLE"
+msgstr "-register\t\t¤³¤Îgvim¤òOLE¤È¤·¤ÆÅÃÿ¤¹¤ë"
+
+msgid "-unregister\t\tUnregister gvim for OLE"
+msgstr "-unregister\t\tgvim¤ÎOLEÃ…Ãÿ¤ò²ò½ü¤¹¤ë"
+
+msgid "-g\t\t\tRun using GUI (like \"gvim\")"
+msgstr "-g\t\t\tGUI¤Çµ¯Æ°¤¹¤ë (\"gvim\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+
+msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
+msgstr "-f or  --nofork\t¥Õ¥©¥¢¥°¥é¥¦¥ó¥É: GUI¤ò»Ã¤á¤ë¤È¤­¤Ëfork¤·¤Ê¤¤"
+
+msgid "-v\t\t\tVi mode (like \"vi\")"
+msgstr "-v\t\t\tVi¥â¡¼¥É (\"vi\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+
+msgid "-e\t\t\tEx mode (like \"ex\")"
+msgstr "-e\t\t\tEx¥â¡¼¥É (\"ex\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\t²þÎÉEx¥â¡¼¥É"
+
+msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+msgstr "-s\t\t\t¥µ¥¤¥ì¥ó¥È(¥ååÃ)¥â¡¼¥É (\"ex\" Ã€Ã¬ÃÑ)"
+
+msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
+msgstr "-d\t\t\tº¹Ê¬¥â¡¼¥É (\"vidiff\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+
+msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
+msgstr "-y\t\t\t¥¤¡¼¥¸¡¼¥â¡¼¥É (\"evim\" Â¤ÃˆÃ†Â±Â¤Â¸, Â¥Ã¢Â¡Â¼Â¥Ã‰ÃŒÂµ)"
+
+msgid "-R\t\t\tReadonly mode (like \"view\")"
+msgstr "-R\t\t\tÆɹþÀìÃѥ⡼¥É (\"view\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+
+msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
+msgstr "-Z\t\t\tÀ©¸Â¥â¡¼¥É (\"rvim\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+
+msgid "-m\t\t\tModifications (writing files) not allowed"
+msgstr "-m\t\t\tÊѹ¹ (¥Õ¥¡¥¤¥ëÊø»þ) Â¤Ã²Â¤Ã‡Â¤Â­Â¤ÃŠÂ¤Â¤Â¤Ã¨Â¤Â¦Â¤Ã‹Â¤Â¹Â¤Ã«"
+
+msgid "-M\t\t\tModifications in text not allowed"
+msgstr "-M\t\t\t¥Æ¥­¥¹¥È¤ÎÊÔ½¸¤ò¹Ô¤Ê¤¨¤Ê¤¤¤è¤¦¤Ë¤¹¤ë"
+
+msgid "-b\t\t\tBinary mode"
+msgstr "-b\t\t\t¥å¤¥Ê¥ê¥â¡¼¥É"
+
+msgid "-l\t\t\tLisp mode"
+msgstr "-l\t\t\tLisp¥â¡¼¥É"
+
+msgid "-C\t\t\tCompatible with Vi: 'compatible'"
+msgstr "-C\t\t\tVi¸ß´¹¥â¡¼¥É: 'compatible'"
+
+msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
+msgstr "-N\t\t\tViÈó¸ß´¹¥â¡¼¥É: 'nocompatible"
+
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr "-V[N][fname]\t\t¥í¥°½ÃÃŽÃÀßÄê [¥ì¥Ù¥ë N] [¥í¥°¥Õ¥¡¥¤¥ë̾ fname]"
+
+msgid "-D\t\t\tDebugging mode"
+msgstr "-D\t\t\t¥Ç¥Ã¥Ã¥°¥â¡¼¥É"
+
+msgid "-n\t\t\tNo swap file, use memory only"
+msgstr "-n\t\t\t¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤ò»ÈÃѤ»¤º¥á¥â¥ê¤À¤±"
+
+msgid "-r\t\t\tList swap files and exit"
+msgstr "-r\t\t\t¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤òÎóµó¤·½ªÎ»"
+
+msgid "-r (with file name)\tRecover crashed session"
+msgstr "-r (¥Õ¥¡¥¤¥ë̾)\t¥¯¥é¥Ã¥·¥å¤·¤¿¥»¥Ã¥·¥ç¥ó¤òÉüµ¢"
+
+msgid "-L\t\t\tSame as -r"
+msgstr "-L\t\t\t-r¤ÈƱ¤¸"
+
+msgid "-f\t\t\tDon't use newcli to open window"
+msgstr "-f\t\t\t¥¦¥£¥ó¥É¥¦¤ò³«¤¯¤Î¤Ë newcli Â¤Ã²Â»ÃˆÃѤ·¤Ê¤¤"
+
+msgid "-dev <device>\t\tUse <device> for I/O"
+msgstr "-dev <device>\t\tI/O¤Ë <device> Â¤Ã²Â»ÃˆÃѤ¹¤ë"
+
+msgid "-A\t\t\tstart in Arabic mode"
+msgstr "-A\t\t\t¥¢¥é¥Ó¥¢¸ì¥â¡¼¥É¤Çµ¯Æ°¤¹¤ë"
+
+msgid "-H\t\t\tStart in Hebrew mode"
+msgstr "-H\t\t\t¥Ø¥Ö¥é¥¤¸ì¥â¡¼¥É¤Çµ¯Æ°¤¹¤ë"
+
+msgid "-F\t\t\tStart in Farsi mode"
+msgstr "-F\t\t\t¥Ú¥ë¥·¥¢¸ì¥â¡¼¥É¤Çµ¯Æ°¤¹¤ë"
+
+msgid "-T <terminal>\tSet terminal type to <terminal>"
+msgstr "-T <terminal>\tüËö¤ò <terminal> Â¤Ã‹Ã€ÃŸÃ„ꤹ¤ë"
+
+msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
+msgstr "-u <vimrc>\t\t.vimrc¤ÎÂå¤ï¤ê¤Ë <vimrc> Â¤Ã²Â»ÃˆÂ¤Â¦"
+
+msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
+msgstr "-U <gvimrc>\t\t.gvimrc¤ÎÂå¤ï¤ê¤Ë <gvimrc> Â¤Ã²Â»ÃˆÂ¤Â¦"
+
+msgid "--noplugin\t\tDon't load plugin scripts"
+msgstr "--noplugin\t\t¥×¥é¥°¥¤¥ó¥¹¥¯¥ê¥×¥È¤ò¥í¡¼¥É¤·¤Ê¤¤"
+
+msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+msgstr "-p[N]\t\tN Â¸Ã„¥¿¥Ö¥Ú¡¼¥¸¤ò³«¤¯(¾ÊάÃÃ: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹Â¤Ã„¤­1¸Ä)"
+
+msgid "-o[N]\t\tOpen N windows (default: one for each file)"
+msgstr "-o[N]\t\tN Â¸Ã„¥¦¥£¥ó¥É¥¦¤ò³«¤¯(¾ÊάÃÃ: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹Â¤Ã„¤­1¸Ä)"
+
+msgid "-O[N]\t\tLike -o but split vertically"
+msgstr "-O[N]\t\t-o¤ÈƱ¤¸¤À¤¬¿âľʬ³ä"
+
+msgid "+\t\t\tStart at end of file"
+msgstr "+\t\t\t¥Õ¥¡¥¤¥ë¤ÎºÇ¸å¤«¤é¤Ã¤¸¤á¤ë"
+
+msgid "+<lnum>\t\tStart at line <lnum>"
+msgstr "+<lnum>\t\t<lnum> Â¹Ã”¤«¤é¤Ã¤¸¤á¤ë"
+
+msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
+msgstr "--cmd <command>\tvimrc¤ò¥í¡¼¥É¤¹¤ëð¤Ë <command> Â¤Ã²Â¼Ã‚¹Ô¤¹¤ë"
+
+msgid "-c <command>\t\tExecute <command> after loading the first file"
+msgstr "-c <command>\t\tºÇ½é¤Î¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¸å <command> Â¤Ã²Â¼Ã‚¹Ô¤¹¤ë"
+
+msgid "-S <session>\t\tSource file <session> after loading the first file"
+msgstr "-S <session>\t\tºÇ½é¤Î¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¸å¥Õ¥¡¥¤¥ë <session> Â¤Ã²Â¼Ã¨Â¹Ã¾Â¤Ã "
+
+msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
+msgstr "-s <scriptin>\t¥Õ¥¡¥¤¥ë <scriptin> Â¤Â«Â¤Ã©Â¥ÃŽÂ¡Â¼Â¥ÃžÂ¥Ã«Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã "
+
+msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
+msgstr "-w <scriptout>\tÆþÎä·¤¿Ã´¥³¥Þ¥ó¥É¤ò¥Õ¥¡¥¤¥ë <scriptout> Â¤Ã‹Ã„ɲ乤ë"
+
+msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
+msgstr "-W <scriptout>\tÆþÎä·¤¿Ã´¥³¥Þ¥ó¥É¤ò¥Õ¥¡¥¤¥ë <scriptout> Â¤Ã‹ÃŠÃ¸¤¹¤ë"
+
+msgid "-x\t\t\tEdit encrypted files"
+msgstr "-x\t\t\t°Å¹æ²½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤¹¤ë"
+
+msgid "-display <display>\tConnect vim to this particular X-server"
+msgstr "-display <display>\tvim¤ò»ØÄꤷ¤¿ X Â¥ÂµÂ¡Â¼Â¥Ã¤ËÀܳ¤¹¤ë"
+
+msgid "-X\t\t\tDo not connect to X server"
+msgstr "-X\t\t\tX¥µ¡¼¥Ã¤ËÀܳ¤·¤Ê¤¤"
+
+msgid "--remote <files>\tEdit <files> in a Vim server if possible"
+msgstr "--remote <files>\t²Äǽ¤Ê¤é¤ÃVim¥µ¡¼¥Ã¤Ç <files> Â¤Ã²ÃŠÃ”½¸¤¹¤ë"
+
+msgid "--remote-silent <files>  Same, don't complain if there is no server"
+msgstr "--remote-silent <files>  Ã†Â±Â¾Ã¥, Â¥ÂµÂ¡Â¼Â¥Ã¤¬Ìµ¤¯¤Æ¤â·Ù¹ðʸ¤ò½ÃÎ䷤ʤ¤"
+
+msgid ""
+"--remote-wait <files>  As --remote but wait for files to have been edited"
+msgstr "--remote-wait <files>\t--remote¸å Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃŠÃ”½¸¤¬½ª¤ï¤ë¤Î¤òÂÔ¤Ä"
+
+msgid ""
+"--remote-wait-silent <files>  Same, don't complain if there is no server"
+msgstr "--remote-wait-silent <files>  Ã†Â±Â¾Ã¥, Â¥ÂµÂ¡Â¼Â¥Ã¤¬Ìµ¤¯¤Æ¤â·Ù¹ðʸ¤ò½ÃÎ䷤ʤ¤"
+
+msgid ""
+"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+msgstr ""
+"--remote-tab[-wait][-silent] <files>  --remote¤Ç¥Õ¥¡¥¤¥ë1¤Ä¤Ë¤Ä¤­1¤Ä¤Î¥¿¥Ö"
+"¥Ú¡¼¥¸¤ò³«¤¯"
+
+msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
+msgstr "--remote-send <keys>\tVim¥µ¡¼¥Ã¤Ë <keys> Â¤Ã²Ã÷¿®¤·¤Æ½ªÎ»¤¹¤ë"
+
+msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
+msgstr "--remote-expr <expr>\t¥µ¡¼¥Ã¤Ç <expr> Â¤Ã²Â¼Ã‚¹Ô¤·¤Æ·ë²Ì¤òɽ¼¨¤¹¤ë"
+
+msgid "--serverlist\t\tList available Vim server names and exit"
+msgstr "--serverlist\t\tVim¥µ¡¼¥Ã̾¤Î°ìÃ÷¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë"
+
+msgid "--servername <name>\tSend to/become the Vim server <name>"
+msgstr "--servername <name>\tVim¥µ¡¼¥à<name> Â¤Ã‹Ã÷¿®/̾ðÀßÄꤹ¤ë"
+
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <file>\tµ¯Æ°¤Ë¤«¤«¤Ã¤¿»þ´Ö¤Î¾ÜºÙ¤ò <file> Â¤Ã˜Â½ÃÎ乤ë"
+
+msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
+msgstr "-i <viminfo>\t\t.viminfo¤ÎÂå¤ï¤ê¤Ë <viminfo> Â¤Ã²Â»ÃˆÂ¤Â¦"
+
+msgid "-h  or  --help\tPrint Help (this message) and exit"
+msgstr "-h or  --help\t¥Ø¥ë¥×(¤³¤Î¥á¥Ã¥»¡¼¥¸)¤òɽ¼¨¤·½ªÎ»¤¹¤ë"
+
+msgid "--version\t\tPrint version information and exit"
+msgstr "--version\t\t¥á¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·½ªÎ»¤¹¤ë"
+
+msgid ""
+"\n"
+"Arguments recognised by gvim (Motif version):\n"
+msgstr ""
+"\n"
+"gvim¤Ë¤è¤Ã¤Æ²ò¼á¤µ¤ì¤ë°ú¿ô(Motif¥á¼¥¸¥ç¥ó):\n"
+
+msgid ""
+"\n"
+"Arguments recognised by gvim (neXtaw version):\n"
+msgstr ""
+"\n"
+"gvim¤Ë¤è¤Ã¤Æ²ò¼á¤µ¤ì¤ë°ú¿ô(neXtaw¥á¼¥¸¥ç¥ó):\n"
+
+msgid ""
+"\n"
+"Arguments recognised by gvim (Athena version):\n"
+msgstr ""
+"\n"
+"gvim¤Ë¤è¤Ã¤Æ²ò¼á¤µ¤ì¤ë°ú¿ô(Athena¥á¼¥¸¥ç¥ó):\n"
+
+msgid "-display <display>\tRun vim on <display>"
+msgstr "-display <display>\t<display> Â¤Ã‡vim¤ò¼Â¹Ô¤¹¤ë"
+
+msgid "-iconic\t\tStart vim iconified"
+msgstr "-iconic\t\tºÇ¾®²½¤·¤¿¾õÂÖ¤Çvim¤òµ¯Æ°¤¹¤ë"
+
+msgid "-background <color>\tUse <color> for the background (also: -bg)"
+msgstr "-background <color>\tÇØ·Ê¿§¤Ë <color> Â¤Ã²Â»ÃˆÂ¤Â¦(ƱµÃ: -bg)"
+
+msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
+msgstr "-foreground <color>\tð·Ê¿§¤Ë <color> Â¤Ã²Â»ÃˆÂ¤Â¦(ƱµÃ: -fg)"
+
+msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
+msgstr "-font <font>\t\t¥Æ¥­¥¹¥Èɽ¼¨¤Ë <font> Â¤Ã²Â»ÃˆÂ¤Â¦(ƱµÃ: -fn)"
+
+msgid "-boldfont <font>\tUse <font> for bold text"
+msgstr "-boldfont <font>\tÂÀ»ú¤Ë <font> Â¤Ã²Â»ÃˆÂ¤Â¦"
+
+msgid "-italicfont <font>\tUse <font> for italic text"
+msgstr "-italicfont <for>\t¼ÃÂλú¤Ë <font> Â¤Ã²Â»ÃˆÂ¤Â¦"
+
+msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
+msgstr "-geometry <geom>\t½é´üÇÛÃ֤ˠ<geom> Â¤Ã²Â»ÃˆÂ¤Â¦(ƱµÃ: -geom)"
+
+msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
+msgstr "-borderwidth <width>\t¶­³¦¤ÎÉý¤ò <width> Â¤Ã‹Â¤Â¹Â¤Ã«(ƱµÃ: -bw)"
+
+msgid "-scrollbarwidth <width>  Use a scrollbar width of <width> (also: -sw)"
+msgstr ""
+"-scrollbarwidth <width>  Â¥Â¹Â¥Â¯Â¥Ã­Â¡Â¼Â¥Ã«Â¥Ã¡¼¤ÎÉý¤ò <width> Â¤Ã‹Â¤Â¹Â¤Ã«(ƱµÃ: -sw)"
+
+msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
+msgstr "-menuheight <height>\t¥á¥Ë¥å¡¼¥Ã¡¼¤Î¹â¤µ¤ò <height> Â¤Ã‹Â¤Â¹Â¤Ã«(ƱµÃ: -mh)"
+
+msgid "-reverse\t\tUse reverse video (also: -rv)"
+msgstr "-reverse\t\tȿž±ÇÃü¤ò»ÈÃѤ¹¤ë(ƱµÃ: -rv)"
+
+msgid "+reverse\t\tDon't use reverse video (also: +rv)"
+msgstr "+reverse\t\tȿž±ÇÃü¤ò»ÈÃѤ·¤Ê¤¤(ƱµÃ: +rv)"
+
+msgid "-xrm <resource>\tSet the specified resource"
+msgstr "-xrm <resource>\tÆÃÄê¤Î¥ê¥½¡¼¥¹¤ò»ÈÃѤ¹¤ë"
+
+msgid ""
+"\n"
+"Arguments recognised by gvim (GTK+ version):\n"
+msgstr ""
+"\n"
+"gvim¤Ë¤è¤Ã¤Æ²ò¼á¤µ¤ì¤ë°ú¿ô(GTK+¥á¼¥¸¥ç¥ó):\n"
+
+msgid "-display <display>\tRun vim on <display> (also: --display)"
+msgstr "-display <display>\t<display> Â¤Ã‡vim¤ò¼Â¹Ô¤¹¤ë(ƱµÃ: --display)"
+
+msgid "--role <role>\tSet a unique role to identify the main window"
+msgstr "--role <role>\t¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤ò¼±Ê̤¹¤ë°ì°Õ¤ÊÌò³ä(role)¤òÀßÄꤹ¤ë"
+
+msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
+msgstr "--socketid <xid>\t°Û¤Ê¤ëGTK widget¤ÇVim¤ò³«¤¯"
+
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\t¥¦¥£¥ó¥É¥¦ID¤òɸ½à½ÃÎä˽ÃÎ乤ë"
+
+msgid "-P <parent title>\tOpen Vim inside parent application"
+msgstr "-P <¿Æ¤Î¥¿¥¤¥È¥ë>\tVim¤ò¿Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÃæ¤Çµ¯Æ°¤¹¤ë"
+
+msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+msgstr "--windowid <HWND>\t°Û¤Ê¤ëWin32 widget¤ÎÆâÉô¤ËVim¤ò³«¤¯"
+
+msgid "No display"
+msgstr "¥Ç¥£¥¹¥×¥ì¥¤¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#. Failed to send, abort.
+msgid ": Send failed.\n"
+msgstr ": Ã÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿.\n"
+
+#. Let vim start normally.
+msgid ": Send failed. Trying to execute locally\n"
+msgstr ": Ã÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿. Â¥Ã­Â¡Â¼Â¥Â«Â¥Ã«Â¤Ã‡Â¤ÃŽÂ¼Ã‚¹Ô¤ò»î¤ß¤Æ¤¤¤Þ¤¹\n"
+
+#, c-format
+msgid "%d of %d edited"
+msgstr "%d Â¸Ã„ (%d Â¸Ã„Ãæ) Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃŠÃ”½¸¤·¤Þ¤·¤¿"
+
+msgid "No display: Send expression failed.\n"
+msgstr "¥Ç¥£¥¹¥×¥ì¥¤¤¬¤¢¤ê¤Þ¤»¤ó: Â¼Â°Â¤ÃŽÃ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿.\n"
+
+msgid ": Send expression failed.\n"
+msgstr ": Â¼Â°Â¤ÃŽÃ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿.\n"
+
+msgid "No marks set"
+msgstr "¥Þ¡¼¥¯¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "E283: No marks matching \"%s\""
+msgstr "E283: \"%s\" Â¤Ã‹Â³ÂºÃ…ö¤¹¤ë¥Þ¡¼¥¯¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#. Highlight title
+msgid ""
+"\n"
+"mark line  col file/text"
+msgstr ""
+"\n"
+"mark   Â¹Ã”   ÃŽÃ³ Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«/¥Æ¥­¥¹¥È"
+
+#. Highlight title
+msgid ""
+"\n"
+" jump line  col file/text"
+msgstr ""
+"\n"
+" jump   Â¹Ã”   ÃŽÃ³ Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«/¥Æ¥­¥¹¥È"
+
+#. Highlight title
+msgid ""
+"\n"
+"change line  col text"
+msgstr ""
+"\n"
+"Êѹ¹   Â¹Ã”    ÃŽÃ³  Â¥Ã†Â¥Â­Â¥Â¹Â¥Ãˆ"
+
+msgid ""
+"\n"
+"# File marks:\n"
+msgstr ""
+"\n"
+"# Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¥ÃžÂ¡Â¼Â¥Â¯:\n"
+
+#. Write the jumplist with -'
+msgid ""
+"\n"
+"# Jumplist (newest first):\n"
+msgstr ""
+"\n"
+"# Â¥Â¸Â¥Ã£Â¥Ã³Â¥Ã—¥ê¥¹¥È (¿·¤·¤¤¤â¤Î¤¬Àè):\n"
+
+msgid ""
+"\n"
+"# History of marks within files (newest to oldest):\n"
+msgstr ""
+"\n"
+"# Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Ã†Ã¢Â¥ÃžÂ¡Â¼Â¥Â¯Â¤ÃŽÃúÎò (¿·¤·¤¤¤â¤Î¤«¤é¸Å¤¤¤â¤Î):\n"
+
+msgid "Missing '>'"
+msgstr "'>' Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+msgid "E543: Not a valid codepage"
+msgstr "E543: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Â³Â¡Â¼Â¥Ã‰Â¥ÃšÂ¡Â¼Â¥Â¸Â¤Ã‡Â¤Â¹"
+
+msgid "E284: Cannot set IC values"
+msgstr "E284: IC¤ÎÃäòÀßÄê¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E285: Failed to create input context"
+msgstr "E285: Â¥Â¤Â¥Ã³Â¥Ã—¥Ã¥È¥³¥ó¥Æ¥­¥¹¥È¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "E286: Failed to open input method"
+msgstr "E286: Â¥Â¤Â¥Ã³Â¥Ã—¥Ã¥È¥á¥½¥Ã¥É¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "E287: Warning: Could not set destroy callback to IM"
+msgstr "E287: Â·Ã™Â¹Ã°: IM¤ÎÇ˲õ¥³¡¼¥ë¥Ã¥Ã¥¯¤òÀßÄê¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "E288: input method doesn't support any style"
+msgstr "E288: Â¥Â¤Â¥Ã³Â¥Ã—¥Ã¥È¥á¥½¥Ã¥É¤Ã¤É¤ó¤Ê¥¹¥¿¥¤¥ë¤â¥µ¥Ã¡¼¥È¤·¤Þ¤»¤ó"
+
+msgid "E289: input method doesn't support my preedit type"
+msgstr "E289: Â¥Â¤Â¥Ã³Â¥Ã—¥Ã¥È¥á¥½¥Ã¥É¤àmy preedit type Â¤Ã²Â¥ÂµÂ¥Ã¡¼¥È¤·¤Þ¤»¤ó"
+
+msgid "E293: block was not locked"
+msgstr "E293: Â¥Ã–¥í¥Ã¥¯¤¬¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E294: Seek error in swap file read"
+msgstr "E294: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ëÆɹþ»þ¤Ë¥·¡¼¥¯¥¨¥é¡¼¤Ç¤¹"
+
+msgid "E295: Read error in swap file"
+msgstr "E295: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤ÎÆɹþ¤ß¥¨¥é¡¼¤Ç¤¹"
+
+msgid "E296: Seek error in swap file write"
+msgstr "E296: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë½ñ¹þ¤ß»þ¤Ë¥·¡¼¥¯¥¨¥é¡¼¤Ç¤¹"
+
+msgid "E297: Write error in swap file"
+msgstr "E297: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤Î½ñ¹þ¤ß¥¨¥é¡¼¤Ç¤¹"
+
+msgid "E300: Swap file already exists (symlink attack?)"
+msgstr "E300: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬´û¤Ë¸ºß¤·¤Þ¤¹ (symlink¤Ë¤è¤ë¹¶·â?)"
+
+msgid "E298: Didn't get block nr 0?"
+msgstr "E298: Â¥Ã–¥í¥Ã¥¯ 0 Â¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³?"
+
+msgid "E298: Didn't get block nr 1?"
+msgstr "E298: Â¥Ã–¥í¥Ã¥¯ 1 Â¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³?"
+
+msgid "E298: Didn't get block nr 2?"
+msgstr "E298: Â¥Ã–¥í¥Ã¥¯ 2 Â¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³?"
+
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤Î°Å¹æ¤ò¹¹¿·Ãæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿"
+
+#. could not (re)open the swap file, what can we do????
+msgid "E301: Oops, lost the swap file!!!"
+msgstr "E301: Â¤ÂªÂ¤ÃƒÂ¤Ãˆ, Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬¼º¤ï¤ì¤Þ¤·¤¿!!!"
+
+msgid "E302: Could not rename swap file"
+msgstr "E302: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤Î̾ð¤òÊѤ¨¤é¤ì¤Þ¤»¤ó"
+
+#, c-format
+msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
+msgstr "E303: \"%s\" Â¤ÃŽÂ¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤ò³«¤±¤Ê¤¤¤Î¤Ç¥ê¥«¥Ã¥ê¤ÃÉÔ²Äǽ¤Ç¤¹"
+
+msgid "E304: ml_upd_block0(): Didn't get block 0??"
+msgstr "E304: ml_upd_block0(): Â¥Ã–¥í¥Ã¥¯ 0 Â¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿??"
+
+#, c-format
+msgid "E305: No swap file found for %s"
+msgstr "E305: %s Â¤Ã‹Â¤Ã¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+msgid "Enter number of swap file to use (0 to quit): "
+msgstr "»ÈÃѤ¹¤ë¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎÈÖ¹æ¤òÆþÎ䷤Ƥ¯¤À¤µ¤¤(0 Â¤Ã‡Â½ÂªÃŽÂ»): "
+
+#, c-format
+msgid "E306: Cannot open %s"
+msgstr "E306: %s Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "Unable to read block 0 from "
+msgstr "¥Ö¥í¥Ã¥¯ 0 Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³ "
+
+msgid ""
+"\n"
+"Maybe no changes were made or Vim did not update the swap file."
+msgstr ""
+"\n"
+"¶²¤é¤¯Êѹ¹¤¬¤µ¤ì¤Æ¤¤¤Ê¤¤¤«Vim¤¬¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤·¤Æ¤¤¤Þ¤»¤ó."
+
+msgid " cannot be used with this version of Vim.\n"
+msgstr " Vim¤Î¤³¤Î¥Ã¡¼¥¸¥ç¥ó¤Ç¤Ã»ÈÃѤǤ­¤Þ¤»¤ó.\n"
+
+msgid "Use Vim version 3.0.\n"
+msgstr "Vim¤Î¥Ã¡¼¥¸¥ç¥ó3.0¤ò»ÈÃѤ·¤Æ¤¯¤À¤µ¤¤.\n"
+
+#, c-format
+msgid "E307: %s does not look like a Vim swap file"
+msgstr "E307: %s Â¤ÃVim¤Î¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤Ç¤Ã¤Ê¤¤¤è¤¦¤Ç¤¹"
+
+msgid " cannot be used on this computer.\n"
+msgstr " Â¤Â³Â¤ÃŽÂ¥Â³Â¥Ã³Â¥Ã”¥å¡¼¥¿¤Ç¤Ã»ÈÃѤǤ­¤Þ¤»¤ó.\n"
+
+msgid "The file was created on "
+msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤Ã¼¡¤Î¾ì½ê¤Çºî¤é¤ì¤Þ¤·¤¿ "
+
+msgid ""
+",\n"
+"or the file has been damaged."
+msgstr ""
+",\n"
+"¤â¤·¤¯¤Ã¥Õ¥¡¥¤¥ë¤¬Â»½ý¤·¤Æ¤¤¤Þ¤¹."
+
+#, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr ""
+"E833: %s Â¤Ã¤³¤Î¥Ã¡¼¥¸¥ç¥ó¤ÎVim¤Ç¥µ¥Ã¡¼¥È¤·¤Æ¤¤¤Ê¤¤·Ã¼°¤Ç°Å¹æ²½¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr " Â¤Ã»½ý¤·¤Æ¤¤¤Þ¤¹ (¥Ú¡¼¥¸¥µ¥¤¥º¤¬ºÇ¾®Ãäò²¼²ó¤Ã¤Æ¤¤¤Þ¤¹).\n"
+
+#, c-format
+msgid "Using swap file \"%s\""
+msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Â»ÃˆÃÑÃæ"
+
+#, c-format
+msgid "Original file \"%s\""
+msgstr "¸¶ËÜ¥Õ¥¡¥¤¥ë \"%s\""
+
+msgid "E308: Warning: Original file may have been changed"
+msgstr "E308: Â·Ã™Â¹Ã°: Â¸Â¶Ã‹ÃœÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬ÃŠÃ‘¹¹¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤Ã°Å¹æ²½¤µ¤ì¤Æ¤¤¤Þ¤¹: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"¿·¤·¤¤°Å¹æ¥­¡¼¤òÆþÎä·¤¿¤¢¤È¤Ë¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤òÊø¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ã,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"¿·¤·¤¤°Å¹æ¥­¡¼¤òÆþÎ䷤Ƥ¯¤À¤µ¤¤."
+
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"°Å¹æ¥­¡¼¤òÊѤ¨¤¿¤¢¤È¤Ë¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤òÊø¤·¤¿¾ì¹ç¤Ã, Â¥Ã†Â¥Â­Â¥Â¹Â¥ÃˆÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ãˆ"
+
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤ËƱ¤¸°Å¹æ¥­¡¼¤ò»È¤¦¤¿¤á¤Ëenter¤À¤±¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤."
+
+#, c-format
+msgid "E309: Unable to read block 1 from %s"
+msgstr "E309: %s Â¤Â«Â¤Ã©Â¥Ã–¥í¥Ã¥¯ 1 Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "???MANY LINES MISSING"
+msgstr "???¿¤¯¤Î¹Ô¤¬¼º¤ï¤ì¤Æ¤¤¤Þ¤¹"
+
+msgid "???LINE COUNT WRONG"
+msgstr "???¹Ô¿ô¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "???EMPTY BLOCK"
+msgstr "???¥Ö¥í¥Ã¥¯¤¬¶õ¤Ç¤¹"
+
+msgid "???LINES MISSING"
+msgstr "???¹Ô¤¬¼º¤ï¤ì¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
+msgstr "E310: Â¥Ã–¥í¥Ã¥¯ 1 Â¤ÃŽID¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹(%s Â¤Â¬.swp¥Õ¥¡¥¤¥ë¤Ç¤Ê¤¤?)"
+
+msgid "???BLOCK MISSING"
+msgstr "???¥Ö¥í¥Ã¥¯¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "??? from here until ???END lines may be messed up"
+msgstr "??? Â¤Â³Â¤Â³Â¤Â«Â¤Ã© ???END Â¤ÃžÂ¤Ã‡Â¤ÃŽÂ¹Ã”¤¬Ç˲õ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ç¤¹"
+
+msgid "??? from here until ???END lines may have been inserted/deleted"
+msgstr "??? Â¤Â³Â¤Â³Â¤Â«Â¤Ã© ???END Â¤ÃžÂ¤Ã‡Â¤ÃŽÂ¹Ã”¤¬ÃÞÆþ¤«ºï½ü¤µ¤ì¤¿¤è¤¦¤Ç¤¹"
+
+msgid "???END"
+msgstr "???END"
+
+msgid "E311: Recovery Interrupted"
+msgstr "E311: Â¥ÃªÂ¥Â«Â¥Ã¥ê¤¬³ä¹þ¤Þ¤ì¤Þ¤·¤¿"
+
+msgid ""
+"E312: Errors detected while recovering; look for lines starting with ???"
+msgstr ""
+"E312: Â¥ÃªÂ¥Â«Â¥Ã¥ê¤ÎºÇÃæ¤Ë¥¨¥é¡¼¤¬¸¡½Ã¤µ¤ì¤Þ¤·¤¿; ???¤Ç»Ã¤Þ¤ë¹Ô¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤"
+
+msgid "See \":help E312\" for more information."
+msgstr "¾ÜºÙ¤à\":help E312\" Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+
+msgid "Recovery completed. You should check if everything is OK."
+msgstr "¥ê¥«¥Ã¥ê¤¬½ªÎ»¤·¤Þ¤·¤¿. Ã´¤Æ¤¬Àµ¤·¤¤¤«¥Ã¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤."
+
+msgid ""
+"\n"
+"(You might want to write out this file under another name\n"
+msgstr ""
+"\n"
+"(Êѹ¹¤ò¥Ã¥§¥Ã¥¯¤¹¤ë¤¿¤á¤Ë, Â¤Â³Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃŠÃŒÂ¤ÃŽÃŒÂ¾Ã°¤ÇÊø¤·¤¿¾å¤Ç\n"
+
+msgid "and run diff with the original file to check for changes)"
+msgstr "¸¶ËÜ¥Õ¥¡¥¤¥ë¤È¤Î diff Â¤Ã²Â¼Ã‚¹Ô¤¹¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "Éü¸µ´°Î». Â¥Ã¥Ã¥Õ¥¡¤ÎÆâÃƤÃ¥Õ¥¡¥¤¥ë¤ÈƱ¤¸¤Ë¤Ê¤ê¤Þ¤·¤¿."
+
+msgid ""
+"\n"
+"You may want to delete the .swp file now.\n"
+"\n"
+msgstr ""
+"\n"
+"¤½¤ì¤«¤é.swp¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤\n"
+"\n"
+
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤«¤é¼èÆÀ¤·¤¿°Å¹æ¥­¡¼¤ò¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë¤Ë»È¤¤¤Þ¤¹.\n"
+
+#. use msg() to start the scrolling properly
+msgid "Swap files found:"
+msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤¬Ê£¿ô¸«¤Ä¤«¤ê¤Þ¤·¤¿:"
+
+msgid "   In current directory:\n"
+msgstr "   Â¸Â½ÂºÃŸÂ¤ÃŽÂ¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥Ãª:\n"
+
+msgid "   Using specified name:\n"
+msgstr "   Â¤Â¢Â¤Ã«ÃŒÂ¾Ã°¤ò»ÈÃÑÃæ:\n"
+
+msgid "   In directory "
+msgstr "   Â¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥Ãª "
+
+msgid "      -- none --\n"
+msgstr "      -- Â¤ÃŠÂ¤Â· --\n"
+
+msgid "          owned by: "
+msgstr "            Â½ÃªÃ­¼Ô: "
+
+msgid "   dated: "
+msgstr "   Ã†Ã¼Ã‰Ã•: "
+
+msgid "             dated: "
+msgstr "             Ã†Ã¼Ã‰Ã•: "
+
+msgid "         [from Vim version 3.0]"
+msgstr "         [from Vim version 3.0]"
+
+msgid "         [does not look like a Vim swap file]"
+msgstr "         [Vim¤Î¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤Ç¤Ã¤Ê¤¤¤è¤¦¤Ç¤¹]"
+
+msgid "         file name: "
+msgstr "        Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾: "
+
+msgid ""
+"\n"
+"          modified: "
+msgstr ""
+"\n"
+"          ÃŠÃ‘¹¹¾õÂÖ: "
+
+msgid "YES"
+msgstr "¤¢¤ê"
+
+msgid "no"
+msgstr "¤Ê¤·"
+
+msgid ""
+"\n"
+"         user name: "
+msgstr ""
+"\n"
+"          Â¥Ã¦Â¡Â¼Â¥Â¶ÃŒÂ¾: "
+
+msgid "   host name: "
+msgstr "   Â¥Ã›Â¥Â¹Â¥ÃˆÃŒÂ¾: "
+
+msgid ""
+"\n"
+"         host name: "
+msgstr ""
+"\n"
+"          Â¥Ã›Â¥Â¹Â¥ÃˆÃŒÂ¾: "
+
+msgid ""
+"\n"
+"        process ID: "
+msgstr ""
+"\n"
+"        Â¥Ã—¥í¥»¥¹ID: "
+
+msgid " (still running)"
+msgstr " (¤Þ¤À¼Â¹ÔÃæ)"
+
+msgid ""
+"\n"
+"         [not usable with this version of Vim]"
+msgstr ""
+"\n"
+"         [¤³¤ÎVim¥á¼¥¸¥ç¥ó¤Ç¤Ã»ÈÃѤǤ­¤Þ¤»¤ó]"
+
+msgid ""
+"\n"
+"         [not usable on this computer]"
+msgstr ""
+"\n"
+"         [¤³¤Î¥³¥ó¥Ô¥å¡¼¥¿¤Ç¤Ã»ÈÃѤǤ­¤Þ¤»¤ó]"
+
+msgid "         [cannot be read]"
+msgstr "         [Æɹþ¤á¤Þ¤»¤ó]"
+
+msgid "         [cannot be opened]"
+msgstr "         [³«¤±¤Þ¤»¤ó]"
+
+msgid "E313: Cannot preserve, there is no swap file"
+msgstr "E313: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬Ìµ¤¤¤Î¤Ç°Ã»ý¤Ç¤­¤Þ¤»¤ó"
+
+msgid "File preserved"
+msgstr "¥Õ¥¡¥¤¥ë¤¬°Ã»ý¤µ¤ì¤Þ¤¹"
+
+msgid "E314: Preserve failed"
+msgstr "E314: Â°Ã»ý¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "E315: ml_get: invalid lnum: %ld"
+msgstr "E315: ml_get: ÃŒÂµÂ¸ÃºÂ¤ÃŠlnum¤Ç¤¹: %ld"
+
+#, c-format
+msgid "E316: ml_get: cannot find line %ld"
+msgstr "E316: ml_get: Â¹Ã” %ld Â¤Ã²Â¸Â«Â¤Ã„¤±¤é¤ì¤Þ¤»¤ó"
+
+msgid "E317: pointer block id wrong 3"
+msgstr "E317: Â¥Ã¥¤¥ó¥¿¥Ö¥í¥Ã¥¯¤ÎID¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹ 3"
+
+msgid "stack_idx should be 0"
+msgstr "stack_idx Â¤Ã 0 Â¤Ã‡Â¤Â¢Â¤Ã«Â¤Ã™Â¤Â­Â¤Ã‡Â¤Â¹"
+
+msgid "E318: Updated too many blocks?"
+msgstr "E318: Â¹Â¹Â¿Â·Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã–¥í¥Ã¥¯¤¬Â¿²á¤®¤ë¤«¤â?"
+
+msgid "E317: pointer block id wrong 4"
+msgstr "E317: Â¥Ã¥¤¥ó¥¿¥Ö¥í¥Ã¥¯¤ÎID¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹ 4"
+
+msgid "deleted block 1?"
+msgstr "¥Ö¥í¥Ã¥¯ 1 Â¤Ã¾Ã¤µ¤ì¤¿?"
+
+#, c-format
+msgid "E320: Cannot find line %ld"
+msgstr "E320: Â¹Ã” %ld Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+msgid "E317: pointer block id wrong"
+msgstr "E317: Â¥Ã¥¤¥ó¥¿¥Ö¥í¥Ã¥¯¤ÎID¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "pe_line_count is zero"
+msgstr "pe_line_count Â¤Â¬Â¥Â¼Â¥Ã­Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "E322: line number out of range: %ld past the end"
+msgstr "E322: Â¹Ã”Èֹ椬Èðó°¤Ç¤¹: %ld Ã„¶¤¨¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "E323: line count wrong in block %ld"
+msgstr "E323: Â¥Ã–¥í¥Ã¥¯ %ld Â¤ÃŽÂ¹Ã”¥«¥¦¥ó¥È¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "Stack size increases"
+msgstr "¥¹¥¿¥Ã¥¯¥µ¥¤¥º¤¬Ãý¤¨¤Þ¤¹"
+
+msgid "E317: pointer block id wrong 2"
+msgstr "E317: Â¥Ã¥¤¥ó¥¿¥Ö¥í¥Ã¥¯¤ÎID¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹ 2"
+
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773: \"%s\" Â¤ÃŽÂ¥Â·Â¥Ã³Â¥ÃœÂ¥ÃªÂ¥ÃƒÂ¥Â¯Â¥ÃªÂ¥Ã³Â¥Â¯Â¤Â¬Â¥Ã«Â¡Â¼Â¥Ã—¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "E325: ATTENTION"
+msgstr "E325: ÃƒÃ­Â°Ã•"
+
+msgid ""
+"\n"
+"Found a swap file by the name \""
+msgstr ""
+"\n"
+"¼¡¤Î̾ð¤Ç¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤ò¸«¤Ä¤±¤Þ¤·¤¿ \""
+
+msgid "While opening file \""
+msgstr "¼¡¤Î¥Õ¥¡¥¤¥ë¤ò³«¤¤¤Æ¤¤¤ëºÇÃæ \""
+
+msgid "      NEWER than swap file!\n"
+msgstr "      Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤è¤ê¤â¿·¤·¤¤¤Ç¤¹!\n"
+
+#. Some of these messages are long to allow translation to
+#. * other languages.
+msgid ""
+"\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
+msgstr ""
+"\n"
+"(1) ÃŠÃŒÂ¤ÃŽÂ¥Ã—¥í¥°¥é¥à¤¬Æ±¤¸¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤·¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó.\n"
+"    Â¤Â³Â¤ÃŽÂ¾Ã¬Â¹Ã§Â¤Ã‹Â¤Ã, ÃŠÃ‘¹¹¤ò¤·¤¿ºÃ¤ËºÇ½ªÅª¤Ë, Ã†Â±Â¤Â¸Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ°Ã›Â¤ÃŠÂ¤Ã«\n"
+"    2¤Ä¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬¤Ç¤­¤Æ¤·¤Þ¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤."
+
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Â½ÂªÃŽÂ»Â¤Â¹Â¤Ã«Â¤Â«, ÃƒÃ­Â°Ã•Â¤Â·Â¤ÃŠÂ¤Â¬Â¤Ã©Ã‚³¤±¤Æ¤¯¤À¤µ¤¤.\n"
+
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Â¤Â³Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃŠÃ”½¸¥»¥Ã¥·¥ç¥ó¤¬¥¯¥é¥Ã¥·¥å¤·¤¿.\n"
+
+msgid "    If this is the case, use \":recover\" or \"vim -r "
+msgstr "    Â¤Â³Â¤ÃŽÂ¾Ã¬Â¹Ã§Â¤Ã‹Â¤Ã \":recover\" Â¤Â« \"vim -r "
+
+msgid ""
+"\"\n"
+"    to recover the changes (see \":help recovery\").\n"
+msgstr ""
+"\"\n"
+"    Â¤Ã²Â»ÃˆÃѤ·¤ÆÊѹ¹¤ò¥ê¥«¥Ã¡¼¤·¤Þ¤¹(\":help recovery\" Â¤Ã²Â»Â²Â¾Ãˆ).\n"
+
+msgid "    If you did this already, delete the swap file \""
+msgstr "    Â´Ã»Â¤Ã‹Â¤Â³Â¤Ã¬Â¤Ã²Â¹Ã”¤Ê¤Ã¤¿¤Î¤Ê¤é¤Ã, Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë \""
+
+msgid ""
+"\"\n"
+"    to avoid this message.\n"
+msgstr ""
+"\"\n"
+"    Â¤Ã²Â¾ÃƒÂ¤Â»Â¤Ã¤³¤Î¥á¥Ã¥»¡¼¥¸¤ò²óÈò¤Ç¤­¤Þ¤¹.\n"
+
+msgid "Swap file \""
+msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë \""
+
+msgid "\" already exists!"
+msgstr "\" Â¤Â¬Â´Ã»Â¤Ã‹Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹!"
+
+msgid "VIM - ATTENTION"
+msgstr "VIM - ÃƒÃ­Â°Ã•"
+
+msgid "Swap file already exists!"
+msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤¬´û¤Ë¸ºß¤·¤Þ¤¹!"
+
+msgid ""
+"&Open Read-Only\n"
+"&Edit anyway\n"
+"&Recover\n"
+"&Quit\n"
+"&Abort"
+msgstr ""
+"ÆɹþÀìÃѤdz«¤¯(&O)\n"
+"¤È¤Ë¤«¤¯ÊÔ½¸¤¹¤ë(&E)\n"
+"Éü³è¤µ¤»¤ë(&R)\n"
+"½ªÎ»¤¹¤ë(&Q)\n"
+"Ãæ»ß¤¹¤ë(&A)"
+
+msgid ""
+"&Open Read-Only\n"
+"&Edit anyway\n"
+"&Recover\n"
+"&Delete it\n"
+"&Quit\n"
+"&Abort"
+msgstr ""
+"ÆɹþÀìÃѤdz«¤¯(&O)\n"
+"¤È¤Ë¤«¤¯ÊÔ½¸¤¹¤ë(&E)\n"
+"Éü³è¤µ¤»¤ë(&R)\n"
+"ºï½ü¤¹¤ë(&D)\n"
+"½ªÎ»¤¹¤ë(&Q)\n"
+"Ãæ»ß¤¹¤ë(&A)"
+
+msgid "E326: Too many swap files found"
+msgstr "E326: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬Â¿¿ô¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+msgid "E327: Part of menu-item path is not sub-menu"
+msgstr "E327: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¥Â¢Â¥Â¤Â¥Ã†Â¥Ã Â¤ÃŽÂ¥Ã‘¥¹¤ÎÉôʬ¤¬¥µ¥Ö¥á¥Ë¥å¡¼¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E328: Menu only exists in another mode"
+msgstr "E328: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¤Ã¾¤Î¥â¡¼¥É¤Ë¤À¤±¤¢¤ê¤Þ¤¹"
+
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: \"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼ÃŒÂ¾Â¤Â¬Â¶ÃµÂ¤Ã‡Â¤Â¹"
+
+msgid "E330: Menu path must not lead to a sub-menu"
+msgstr "E330: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¥Ã‘¥¹¤Ã¥µ¥Ö¥á¥Ë¥å¡¼¤òÀ¸¤¸¤ë¤Ù¤­¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E331: Must not add menu items directly to menu bar"
+msgstr "E331: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¥Ã¡¼¤Ë¤ÃľÀÜ¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤òÄɲäǤ­¤Þ¤»¤ó"
+
+msgid "E332: Separator cannot be part of a menu path"
+msgstr "E332: Â¶Ã¨Ã€ÃšÂ¤ÃªÂ¤Ã¥á¥Ë¥å¡¼¥Ñ¥¹¤Î°ìÉô¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#. Now we have found the matching menu, and we list the mappings
+#. Highlight title
+msgid ""
+"\n"
+"--- Menus ---"
+msgstr ""
+"\n"
+"--- Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼ ---"
+
+msgid "Tear off this menu"
+msgstr "¤³¤Î¥á¥Ë¥å¡¼¤òÀÚ¤ê¼è¤ë"
+
+msgid "E333: Menu path must lead to a menu item"
+msgstr "E333: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¥Ã‘¥¹¤Ã¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤òÀ¸¤¸¤Ê¤±¤ì¤Ã¤¤¤±¤Þ¤»¤ó"
+
+#, c-format
+msgid "E334: Menu not found: %s"
+msgstr "E334: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E335: Menu not defined for %s mode"
+msgstr "E335: %s Â¤Ã‹Â¤Ã¥á¥Ë¥å¡¼¤¬ÄêµÃ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E336: Menu path must lead to a sub-menu"
+msgstr "E336: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¥Ã‘¥¹¤Ã¥µ¥Ö¥á¥Ë¥å¡¼¤òÀ¸¤¸¤Ê¤±¤ì¤Ã¤¤¤±¤Þ¤»¤ó"
+
+msgid "E337: Menu not found - check menu names"
+msgstr "E337: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó - Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼ÃŒÂ¾Â¤Ã²Â³ÃŽÃ‡Â§Â¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+
+#, c-format
+msgid "Error detected while processing %s:"
+msgstr "%s Â¤ÃŽÂ½Ã¨ÃýÃæ¤Ë¥¨¥é¡¼¤¬¸¡½Ã¤µ¤ì¤Þ¤·¤¿:"
+
+#, c-format
+msgid "line %4ld:"
+msgstr "¹Ô %4ld:"
+
+#, c-format
+msgid "E354: Invalid register name: '%s'"
+msgstr "E354: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿ÃŒÂ¾: '%s'"
+
+msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
+msgstr "ÆüËܸì¥á¥Ã¥»¡¼¥¸ËÃÌõ/´Æ½¤: Ã‚¼²¬ Ã‚Àú <koron.kaoriya@gmail.com>"
+
+msgid "Interrupt: "
+msgstr "³ä¹þ¤ß: "
+
+msgid "Press ENTER or type command to continue"
+msgstr "³¤±¤ë¤Ë¤ÃENTER¤ò²¡¤¹¤«¥³¥Þ¥ó¥É¤òÆþÎ䷤Ƥ¯¤À¤µ¤¤"
+
+#, c-format
+msgid "%s line %ld"
+msgstr "%s Â¹Ã” %ld"
+
+msgid "-- More --"
+msgstr "-- Â·Ã‘³ --"
+
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPACE/d/j: Â²Ã¨ÃŒÃŒ/¥Ú¡¼¥¸/¹Ô Â²Â¼, b/u/k: Â¾Ã¥, q: Â½ÂªÃŽÂ» "
+
+msgid "Question"
+msgstr "¼ÃÌä"
+
+msgid ""
+"&Yes\n"
+"&No"
+msgstr ""
+"¤Ã¤¤(&Y)\n"
+"¤¤¤¤¤¨(&N)"
+
+msgid ""
+"&Yes\n"
+"&No\n"
+"Save &All\n"
+"&Discard All\n"
+"&Cancel"
+msgstr ""
+"¤Ã¤¤(&Y)\n"
+"¤¤¤¤¤¨(&N)\n"
+"ô¤ÆÊø(&A)\n"
+"ô¤ÆÊü´þ(&D)\n"
+"¥­¥ã¥ó¥»¥ë(&C)"
+
+msgid "Select Directory dialog"
+msgstr "¥Ç¥£¥ì¥¯¥È¥êêÂò¥À¥¤¥¢¥í¥°"
+
+msgid "Save File dialog"
+msgstr "¥Õ¥¡¥¤¥ëÊø¥À¥¤¥¢¥í¥°"
+
+msgid "Open File dialog"
+msgstr "¥Õ¥¡¥¤¥ëÆɹþ¥À¥¤¥¢¥í¥°"
+
+#. TODO: non-GUI file selector here
+msgid "E338: Sorry, no file browser in console mode"
+msgstr "E338: Â¥Â³Â¥Ã³Â¥Â½Â¡Â¼Â¥Ã«Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Ã¥Õ¥¡¥¤¥ë¥Ö¥é¥¦¥¶¤ò»È¤¨¤Þ¤»¤ó, Â¤Â´Â¤Ã¡Â¤Ã³Â¤ÃŠÂ¤ÂµÂ¤Â¤"
+
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766: printf() Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Ã‰Ã”½½Ê¬¤Ç¤¹"
+
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: printf() Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Ã‹Â¤ÃÉâÆ°¾¯¿ôÅÀ¿ô¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767: printf() Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+msgid "W10: Warning: Changing a readonly file"
+msgstr "W10: Â·Ã™Â¹Ã°: Ã†Ã‰Â¹Ã¾Ã€Ã¬ÃÑ¥Õ¥¡¥¤¥ë¤òÊѹ¹¤·¤Þ¤¹"
+
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr ""
+"ÈÖ¹æ¤È<Enter>¤òÆþÎ乤뤫¥Þ¥¦¥¹¤Ç¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤ (¶õ¤Ç¥­¥ã¥ó¥»¥ë): "
+
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "ÈÖ¹æ¤È<Enter>¤òÆþÎ䷤Ƥ¯¤À¤µ¤¤ (¶õ¤Ç¥­¥ã¥ó¥»¥ë): "
+
+msgid "1 more line"
+msgstr "1 Â¹Ã” Ã„ɲä·¤Þ¤·¤¿"
+
+msgid "1 line less"
+msgstr "1 Â¹Ã” ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+#, c-format
+msgid "%ld more lines"
+msgstr "%ld Â¹Ã” Ã„ɲä·¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld fewer lines"
+msgstr "%ld Â¹Ã” ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid " (Interrupted)"
+msgstr " (³ä¹þ¤Þ¤ì¤Þ¤·¤¿)"
+
+msgid "Beep!"
+msgstr "¥Ó¡¼¥Ã!"
+
+msgid "Vim: preserving files...\n"
+msgstr "Vim: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃŠÃ¸Ãæ...\n"
+
+#. close all memfiles, without deleting
+msgid "Vim: Finished.\n"
+msgstr "Vim: Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿.\n"
+
+msgid "ERROR: "
+msgstr "¥¨¥é¡¼: "
+
+#, c-format
+msgid ""
+"\n"
+"[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n"
+msgstr ""
+"\n"
+"[¥á¥â¥ê(¥å¤¥È)] Ãí³äÅö-²òÊüÎÌ %lu-%lu, Â»ÃˆÃÑÎÌ %lu, Â¥Ã”¡¼¥¯»þ %lu\n"
+
+#, c-format
+msgid ""
+"[calls] total re/malloc()'s %lu, total free()'s %lu\n"
+"\n"
+msgstr ""
+"[¸Æ½Ã] Ãí re/malloc() Â²Ã³Â¿Ã´ %lu, Ãí free() Â²Ã³Â¿Ã´ %lu\n"
+"\n"
+
+msgid "E340: Line is becoming too long"
+msgstr "E340: Â¹Ã”¤¬Ä¹¤¯¤Ê¤ê²á¤®¤Þ¤·¤¿"
+
+#, c-format
+msgid "E341: Internal error: lalloc(%ld, )"
+msgstr "E341: Ã†Ã¢Ã‰Ã´Â¥Â¨Â¥Ã©Â¡Â¼: lalloc(%ld,)"
+
+#, c-format
+msgid "E342: Out of memory!  (allocating %lu bytes)"
+msgstr "E342: Â¥Ã¡Â¥Ã¢Â¥ÃªÂ¤Â¬Ã‚­¤ê¤Þ¤»¤ó!  (%lu Â¥Ã¥¤¥È¤ò³äÅöÃ×µá)"
+
+#, c-format
+msgid "Calling shell to execute: \"%s\""
+msgstr "¼Â¹Ô¤Î¤¿¤á¤Ë¥·¥§¥ë¤ò¸Æ½Ã¤·Ãæ: \"%s\""
+
+msgid "E545: Missing colon"
+msgstr "E545: Â¥Â³Â¥Ã­Â¥Ã³Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E546: Illegal mode"
+msgstr "E546: Ã‰Ã”Àµ¤Ê¥â¡¼¥É¤Ç¤¹"
+
+msgid "E547: Illegal mouseshape"
+msgstr "E547: Ã‰Ã”Àµ¤Ê 'mouseshape' Â¤Ã‡Â¤Â¹"
+
+msgid "E548: digit expected"
+msgstr "E548: Â¿Ã´ÃƒÃ¤¬É¬ÃפǤ¹"
+
+msgid "E549: Illegal percentage"
+msgstr "E549: Ã‰Ã”Àµ¤Ê¥Ñ¡¼¥»¥ó¥Æ¡¼¥¸¤Ç¤¹"
+
+msgid "Enter encryption key: "
+msgstr "°Å¹æ²½ÃѤΥ­¡¼¤òÆþÎ䷤Ƥ¯¤À¤µ¤¤: "
+
+msgid "Enter same key again: "
+msgstr "¤â¤¦°ìÅÙƱ¤¸¥­¡¼¤òÆþÎ䷤Ƥ¯¤À¤µ¤¤: "
+
+msgid "Keys don't match!"
+msgstr "¥­¡¼¤¬°ìÃפ·¤Þ¤»¤ó"
+
+msgid "E854: path too long for completion"
+msgstr "E854: Â¥Ã‘¥¹¤¬Ä¹²á¤®¤ÆÊä´°¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid ""
+"E343: Invalid path: '**[number]' must be at the end of the path or be "
+"followed by '%s'."
+msgstr ""
+"E343: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã‘¥¹¤Ç¤¹: '**[¿ôÃÃ]' Â¤Ãpath¤ÎºÇ¸å¤« '%s' Â¤Â¬Ã‚³¤¤¤Æ¤Ê¤¤¤È¤¤¤±¤Þ¤»"
+"¤ó."
+
+#, c-format
+msgid "E344: Can't find directory \"%s\" in cdpath"
+msgstr "E344: cdpath¤Ë¤à\"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E345: Can't find file \"%s\" in path"
+msgstr "E345: path¤Ë¤à\"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E346: No more directory \"%s\" found in cdpath"
+msgstr "E346: cdpath¤Ë¤Ã¤³¤ì°Ê¾å \"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E347: No more file \"%s\" found in path"
+msgstr "E347: Â¥Ã‘¥¹¤Ë¤Ã¤³¤ì°Ê¾å \"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "Cannot connect to Netbeans #2"
+msgstr "Netbeans #2 Â¤Ã‹Ã€ÃœÃ‚³¤Ç¤­¤Þ¤»¤ó"
+
+msgid "Cannot connect to Netbeans"
+msgstr "Netbeans Â¤Ã‹Ã€ÃœÃ‚³¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
+msgstr ""
+"E668: NetBeans¤ÎÀܳ¾ðÊó¥Õ¥¡¥¤¥ë¤Î¥¢¥¯¥»¥¹¥â¡¼¥É¤ËÌäÂ꤬¤¢¤ê¤Þ¤¹: \"%s\""
+
+msgid "read from Netbeans socket"
+msgstr "Netbeans Â¤ÃŽÂ¥Â½Â¥Â±Â¥ÃƒÂ¥ÃˆÂ¤Ã²Ã†Ã‰Â¹Ã¾Â¤ÃŸ"
+
+#, c-format
+msgid "E658: NetBeans connection lost for buffer %ld"
+msgstr "E658: Â¥Ã¥Ã¥Õ¥¡ %ld Â¤ÃŽ NetBeans Ã€ÃœÃ‚³¤¬¼º¤ï¤ì¤Þ¤·¤¿"
+
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeans¤Ã¤³¤ÎGUI¤Ë¤ÃÂñþ¤·¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: NetBeans¤Ã´û¤ËÀܳ¤·¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s Â¤ÃÆɹþÀìÃѤǤ¹ (¶¯À©½ñ¹þ¤Ë¤à! Â¤Ã²Ã„ɲÃ)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤ÃŽÂ°ÃŒÃƒÃ–¤Ë¤Ã¼±Ê̻Ҥ¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E774: 'operatorfunc' is empty"
+msgstr "E774: 'operatorfunc' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬¶õ¤Ç¤¹"
+
+msgid "E775: Eval feature not available"
+msgstr "E775: Â¼Â°Ã‰Â¾Â²Ãµ¡Ç½¤¬Ìµ¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "Warning: terminal cannot highlight"
+msgstr "·Ù¹ð: Â»ÃˆÃѤ·¤Æ¤¤¤ëüËö¤Ã¥å¤¥é¥¤¥È¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E348: No string under cursor"
+msgstr "E348: Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤ÃŽÂ°ÃŒÃƒÃ–¤Ë¤Ãʸ»úÎ󤬤¢¤ê¤Þ¤»¤ó"
+
+msgid "E352: Cannot erase folds with current 'foldmethod'"
+msgstr "E352: Â¸Â½ÂºÃŸÂ¤ÃŽ 'foldmethod' Â¤Ã‡Â¤ÃÀÞ¾ö¤ß¤ò¾Ãµî¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E664: changelist is empty"
+msgstr "E664: ÃŠÃ‘¹¹¥ê¥¹¥È¤¬¶õ¤Ç¤¹"
+
+msgid "E662: At start of changelist"
+msgstr "E662: ÃŠÃ‘¹¹¥ê¥¹¥È¤ÎÀèƬ"
+
+msgid "E663: At end of changelist"
+msgstr "E663: ÃŠÃ‘¹¹¥ê¥¹¥È¤ÎËöÈø"
+
+msgid "Type  :quit<Enter>  to exit Vim"
+msgstr "Vim¤ò½ªÎ»¤¹¤ë¤Ë¤à:quit<Enter> Â¤ÃˆÃ†Ã¾ÃŽÃ¤·¤Æ¤¯¤À¤µ¤¤"
+
+#, c-format
+msgid "1 line %sed 1 time"
+msgstr "1 Â¹Ã”¤¬ %s Â¤Ã‡ 1 Â²Ã³Â½Ã¨Ãý¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "1 line %sed %d times"
+msgstr "1 Â¹Ã”¤¬ %s Â¤Ã‡ %d Â²Ã³Â½Ã¨Ãý¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld lines %sed 1 time"
+msgstr "%ld Â¹Ã”¤¬ %s Â¤Ã‡ 1 Â²Ã³Â½Ã¨Ãý¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld lines %sed %d times"
+msgstr "%ld Â¹Ã”¤¬ %s Â¤Ã‡ %d Â²Ã³Â½Ã¨Ãý¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld lines to indent... "
+msgstr "%ld Â¹Ã”¤¬¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤Þ¤¹... "
+
+msgid "1 line indented "
+msgstr "1 Â¹Ã”¤ò¥¤¥ó¥Ç¥ó¥È¤·¤Þ¤·¤¿ "
+
+#, c-format
+msgid "%ld lines indented "
+msgstr "%ld Â¹Ã”¤ò¥¤¥ó¥Ç¥ó¥È¤·¤Þ¤·¤¿ "
+
+msgid "E748: No previously used register"
+msgstr "E748: Â¤ÃžÂ¤Ã€Â¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿Â¤Ã²Â»ÃˆÃѤ·¤Æ¤¤¤Þ¤»¤ó"
+
+#. must display the prompt
+msgid "cannot yank; delete anyway"
+msgstr "¥ä¥ó¥¯¤Ç¤­¤Þ¤»¤ó; Â¤ÃˆÂ¤Ã‹Â¤Â«Â¤Â¯Â¾ÃƒÂµÃ®"
+
+msgid "1 line changed"
+msgstr "1 Â¹Ã”¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld lines changed"
+msgstr "%ld Â¹Ã”¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "freeing %ld lines"
+msgstr "%ld Â¹Ã”¤ò²òÊüÃæ"
+
+msgid "block of 1 line yanked"
+msgstr "1 Â¹Ã”¤Î¥Ö¥í¥Ã¥¯¤¬¥ä¥ó¥¯¤µ¤ì¤Þ¤·¤¿"
+
+msgid "1 line yanked"
+msgstr "1 Â¹Ã”¤¬¥ä¥ó¥¯¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "block of %ld lines yanked"
+msgstr "%ld Â¹Ã”¤Î¥Ö¥í¥Ã¥¯¤¬¥ä¥ó¥¯¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld lines yanked"
+msgstr "%ld Â¹Ã”¤¬¥ä¥ó¥¯¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "E353: Nothing in register %s"
+msgstr "E353: Â¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿ %s Â¤Ã‹Â¤Ã²¿¤â¤¢¤ê¤Þ¤»¤ó"
+
+#. Highlight title
+msgid ""
+"\n"
+"--- Registers ---"
+msgstr ""
+"\n"
+"--- Â¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿ ---"
+
+msgid "Illegal register name"
+msgstr "ÉÔÀµ¤Ê¥ì¥¸¥¹¥¿Ì¾"
+
+msgid ""
+"\n"
+"# Registers:\n"
+msgstr ""
+"\n"
+"# Â¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿:\n"
+
+#, c-format
+msgid "E574: Unknown register type %d"
+msgstr "E574: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿Â·Â¿ %d Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "%ld Cols; "
+msgstr "%ld ÃŽÃ³; "
+
+#, c-format
+msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
+msgstr "êÂò %s%ld / %ld Â¹Ã”; %ld / %ld ÃƒÂ±Â¸Ã¬; %ld / %ld Â¥Ã¥¤¥È"
+
+#, c-format
+msgid ""
+"Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+"Bytes"
+msgstr "êÂò %s%ld / %ld Â¹Ã”; %ld / %ld ÃƒÂ±Â¸Ã¬; %ld / %ld ÃŠÂ¸Â»Ãº; %ld / %ld Â¥Ã¥¤¥È"
+
+#, c-format
+msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
+msgstr "Îó %s / %s; Â¹Ã” %ld of %ld; ÃƒÂ±Â¸Ã¬ %ld / %ld; Â¥Ã¥¤¥È %ld / %ld"
+
+#, c-format
+msgid ""
+"Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+"%ld"
+msgstr ""
+"Îó %s / %s; Â¹Ã” %ld / %ld; ÃƒÂ±Â¸Ã¬ %ld / %ld; ÃŠÂ¸Â»Ãº %ld / %ld; Â¥Ã¥¤¥È %ld of %ld"
+
+#, c-format
+msgid "(+%ld for BOM)"
+msgstr "(+%ld for BOM)"
+
+msgid "%<%f%h%m%=Page %N"
+msgstr "%<%f%h%m%=%N Â¥ÃšÂ¡Â¼Â¥Â¸"
+
+msgid "Thanks for flying Vim"
+msgstr "Vim Â¤Ã²Â»ÃˆÂ¤ÃƒÂ¤Ã†Â¤Â¯Â¤Ã¬Â¤Ã†Â¤Â¢Â¤ÃªÂ¤Â¬Â¤ÃˆÂ¤Â¦"
+
+msgid "E518: Unknown option"
+msgstr "E518: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ç¤¹"
+
+msgid "E519: Option not supported"
+msgstr "E519: Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E520: Not allowed in a modeline"
+msgstr "E520: modeline Â¤Ã‡Â¤Ãµö²Ä¤µ¤ì¤Þ¤»¤ó"
+
+msgid "E846: Key code not set"
+msgstr "E846: Â¥Â­Â¡Â¼Â¥Â³Â¡Â¼Â¥Ã‰Â¤Â¬Ã€ÃŸÃ„ꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E521: Number required after ="
+msgstr "E521: = Â¤ÃŽÂ¸Ã¥Â¤Ã‹Â¤Ã¿ô»ú¤¬É¬ÃפǤ¹"
+
+msgid "E522: Not found in termcap"
+msgstr "E522: termcap Ã†Ã¢Â¤Ã‹Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E539: Illegal character <%s>"
+msgstr "E539: Ã‰Ã”Àµ¤Êʸ»ú¤Ç¤¹ <%s>"
+
+msgid "E529: Cannot set 'term' to empty string"
+msgstr "E529: 'term' Â¤Ã‹Â¤Ã¶õʸ»úÎó¤òÀßÄê¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E530: Cannot change term in GUI"
+msgstr "E530: GUI¤Ç¤à'term' Â¤Ã²ÃŠÃ‘¹¹¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E531: Use \":gui\" to start the GUI"
+msgstr "E531: GUI¤ò¥¹¥¿¡¼¥È¤¹¤ë¤Ë¤à\":gui\" Â¤Ã²Â»ÃˆÃѤ·¤Æ¤¯¤À¤µ¤¤"
+
+msgid "E589: 'backupext' and 'patchmode' are equal"
+msgstr "E589: 'backupext' Â¤Ãˆ 'patchmode' Â¤Â¬Ã†Â±Â¤Â¸Â¤Ã‡Â¤Â¹"
+
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: 'listchars'¤ÎÃäËÌ·½â¤¬¤¢¤ê¤Þ¤¹"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: 'fillchars'¤ÎÃäËÌ·½â¤¬¤¢¤ê¤Þ¤¹"
+
+msgid "E617: Cannot be changed in the GTK+ 2 GUI"
+msgstr "E617: GTK+2 GUI¤Ç¤ÃÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E524: Missing colon"
+msgstr "E524: Â¥Â³Â¥Ã­Â¥Ã³Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E525: Zero length string"
+msgstr "E525: ÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃŽÃ„¹¤µ¤¬¥¼¥í¤Ç¤¹"
+
+#, c-format
+msgid "E526: Missing number after <%s>"
+msgstr "E526: <%s> Â¤ÃŽÂ¸Ã¥Â¤Ã‹Â¿Ã´Â»ÃºÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E527: Missing comma"
+msgstr "E527: Â¥Â«Â¥Ã³Â¥ÃžÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E528: Must specify a ' value"
+msgstr "E528: ' Â¤ÃŽÃƒÃ¤ò»ØÄꤷ¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+
+msgid "E595: contains unprintable or wide character"
+msgstr "E595: Ã‰Â½Â¼Â¨Â¤Ã‡Â¤Â­Â¤ÃŠÂ¤Â¤ÃŠÂ¸Â»ÃºÂ¤Â«Â¥Ã¯Â¥Â¤Â¥Ã‰ÃŠÂ¸Â»ÃºÂ¤Ã²Â´ÃžÂ¤Ã³Â¤Ã‡Â¤Â¤Â¤ÃžÂ¤Â¹"
+
+msgid "E596: Invalid font(s)"
+msgstr "E596: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¤Ã‡Â¤Â¹"
+
+msgid "E597: can't select fontset"
+msgstr "E597: Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¥Â»Â¥ÃƒÂ¥ÃˆÂ¤Ã²ÃªÂò¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E598: Invalid fontset"
+msgstr "E598: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¥Â»Â¥ÃƒÂ¥ÃˆÂ¤Ã‡Â¤Â¹"
+
+msgid "E533: can't select wide font"
+msgstr "E533: Â¥Ã¯Â¥Â¤Â¥Ã‰Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¤Ã²ÃªÂò¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E534: Invalid wide font"
+msgstr "E534: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã¯Â¥Â¤Â¥Ã‰Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "E535: Illegal character after <%c>"
+msgstr "E535: <%c> Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹"
+
+msgid "E536: comma required"
+msgstr "E536: Â¥Â«Â¥Ã³Â¥ÃžÂ¤Â¬Ã‰Â¬ÃפǤ¹"
+
+#, c-format
+msgid "E537: 'commentstring' must be empty or contain %s"
+msgstr "E537: 'commentstring' Â¤Ã¶õ¤Ç¤¢¤ë¤« %s Â¤Ã²Â´ÃžÂ¤Ã Ã‰Â¬Ãפ¬¤¢¤ê¤Þ¤¹"
+
+msgid "E538: No mouse support"
+msgstr "E538: Â¥ÃžÂ¥Â¦Â¥Â¹Â¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+msgid "E540: Unclosed expression sequence"
+msgstr "E540: Â¼Â°Â¤Â¬Â½ÂªÃŽÂ»Â¤Â·Â¤Ã†Â¤Â¤Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E541: too many items"
+msgstr "E541: Ã×ÃǤ¬Â¿²á¤®¤Þ¤¹"
+
+msgid "E542: unbalanced groups"
+msgstr "E542: Â¥Â°Â¥Ã«Â¡Â¼Â¥Ã—¤¬Äà¹ç¤¤¤Þ¤»¤ó"
+
+msgid "E590: A preview window already exists"
+msgstr "E590: Â¥Ã—¥ì¥Ó¥å¡¼¥¦¥£¥ó¥É¥¦¤¬´û¤Ë¸ºß¤·¤Þ¤¹"
+
+msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
+msgstr ""
+"W17: Â¥Â¢Â¥Ã©Â¥Ã“¥¢Ê¸»ú¤Ë¤ÃUTF-8¤¬É¬ÃפʤΤÇ, ':set encoding=utf-8' Â¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+
+#, c-format
+msgid "E593: Need at least %d lines"
+msgstr "E593: ÂºÃ‡Ã„ã %d Â¤ÃŽÂ¹Ã”¿ô¤¬É¬ÃפǤ¹"
+
+#, c-format
+msgid "E594: Need at least %d columns"
+msgstr "E594: ÂºÃ‡Ã„ã %d Â¤ÃŽÂ¥Â«Â¥Ã©Â¥Ã Ã‰Ã½Â¤Â¬Ã‰Â¬ÃפǤ¹"
+
+#, c-format
+msgid "E355: Unknown option: %s"
+msgstr "E355: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ç¤¹: %s"
+
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521: Â¿Ã´Â»ÃºÂ¤Â¬Ã‰Â¬ÃפǤ¹: &%s = '%s'"
+
+msgid ""
+"\n"
+"--- Terminal codes ---"
+msgstr ""
+"\n"
+"--- ÃƒÂ¼Ã‹Ã¶Â¥Â³Â¡Â¼Â¥Ã‰ ---"
+
+msgid ""
+"\n"
+"--- Global option values ---"
+msgstr ""
+"\n"
+"--- Â¥Â°Â¥Ã­Â¡Â¼Â¥Ã¥ë¥ª¥×¥·¥ç¥óÃà---"
+
+msgid ""
+"\n"
+"--- Local option values ---"
+msgstr ""
+"\n"
+"--- Â¥Ã­Â¡Â¼Â¥Â«Â¥Ã«Â¥ÂªÂ¥Ã—¥·¥ç¥óÃà---"
+
+msgid ""
+"\n"
+"--- Options ---"
+msgstr ""
+"\n"
+"--- Â¥ÂªÂ¥Ã—¥·¥ç¥ó ---"
+
+msgid "E356: get_varp ERROR"
+msgstr "E356: get_varp Â¥Â¨Â¥Ã©Â¡Â¼"
+
+#, c-format
+msgid "E357: 'langmap': Matching character missing for %s"
+msgstr "E357: 'langmap': %s Â¤Ã‹Ã‚ñþ¤¹¤ëʸ»ú¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E358: 'langmap': Extra characters after semicolon: %s"
+msgstr "E358: 'langmap': Â¥Â»Â¥ÃŸÂ¥Â³Â¥Ã­Â¥Ã³Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã¾Ê¬¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹: %s"
+
+msgid "cannot open "
+msgstr "³«¤±¤Þ¤»¤ó "
+
+msgid "VIM: Can't open window!\n"
+msgstr "VIM: Â¥Â¦Â¥Â£Â¥Ã³Â¥Ã‰Â¥Â¦Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³!\n"
+
+msgid "Need Amigados version 2.04 or later\n"
+msgstr "Amigados¤Î¥Ã¡¼¥¸¥ç¥ó 2.04¤«¤½¤ì°Ê¹ß¤¬É¬ÃפǤ¹\n"
+
+#, c-format
+msgid "Need %s version %ld\n"
+msgstr "%s Â¤ÃŽÂ¥Ã¡¼¥¸¥ç¥ó %ld Â¤Â¬Ã‰Â¬ÃפǤ¹\n"
+
+msgid "Cannot open NIL:\n"
+msgstr "NIL¤ò³«¤±¤Þ¤»¤ó:\n"
+
+msgid "Cannot create "
+msgstr "ºîÀ®¤Ç¤­¤Þ¤»¤ó "
+
+#, c-format
+msgid "Vim exiting with %d\n"
+msgstr "Vim¤à%d Â¤Ã‡Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â¹\n"
+
+msgid "cannot change console mode ?!\n"
+msgstr "¥³¥ó¥½¡¼¥ë¥â¡¼¥É¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó?!\n"
+
+msgid "mch_get_shellsize: not a console??\n"
+msgstr "mch_get_shellsize: Â¥Â³Â¥Ã³Â¥Â½Â¡Â¼Â¥Ã«Â¤Ã‡Â¤Ã¤Ê¤¤??\n"
+
+#. if Vim opened a window: Executing a shell may cause crashes
+msgid "E360: Cannot execute shell with -f option"
+msgstr "E360: -f Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ç¥·¥§¥ë¤ò¼Â¹Ô¤Ç¤­¤Þ¤»¤ó"
+
+msgid "Cannot execute "
+msgstr "¼Â¹Ô¤Ç¤­¤Þ¤»¤ó "
+
+msgid "shell "
+msgstr "¥·¥§¥ë "
+
+msgid " returned\n"
+msgstr " ÃŒÃ¡Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿\n"
+
+msgid "ANCHOR_BUF_SIZE too small."
+msgstr "ANCHOR_BUF_SIZE Â¤Â¬Â¾Â®Â¤ÂµÂ²Ã¡Â¤Â®Â¤ÃžÂ¤Â¹."
+
+msgid "I/O ERROR"
+msgstr "Æþ½ÃÃŽÃ¥¨¥é¡¼"
+
+msgid "Message"
+msgstr "¥á¥Ã¥»¡¼¥¸"
+
+msgid "'columns' is not 80, cannot execute external commands"
+msgstr "'columns' Â¤Â¬80¤Ç¤Ã¤Ê¤¤¤¿¤á, Â³Â°Ã‰Ã´Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã²Â¼Ã‚¹Ô¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E237: Printer selection failed"
+msgstr "E237: Â¥Ã—¥ê¥ó¥¿¤ÎêÂò¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "to %s on %s"
+msgstr "%s Â¤Ã˜ (%s Â¾Ã¥Â¤ÃŽ)"
+
+#, c-format
+msgid "E613: Unknown printer font: %s"
+msgstr "E613: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥Ã—¥ê¥ó¥¿¥ª¥×¥·¥ç¥ó¤Ç¤¹: %s"
+
+#, c-format
+msgid "E238: Print error: %s"
+msgstr "E238: Â°ÃµÂºÃ¾Â¥Â¨Â¥Ã©Â¡Â¼: %s"
+
+#, c-format
+msgid "Printing '%s'"
+msgstr "°õºþ¤·¤Æ¤¤¤Þ¤¹: '%s'"
+
+#, c-format
+msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
+msgstr "E244: ÃŠÂ¸Â»ÃºÂ¥Â»Â¥ÃƒÂ¥ÃˆÃŒÂ¾ \"%s\" Â¤ÃÉÔÀµ¤Ç¤¹ (¥Õ¥©¥ó¥È̾ \"%s\")"
+
+#, c-format
+msgid "E245: Illegal char '%c' in font name \"%s\""
+msgstr "E245: '%c' Â¤ÃÉÔÀµ¤Êʸ»ú¤Ç¤¹ (¥Õ¥©¥ó¥È̾ \"%s\")"
+
+msgid "Vim: Double signal, exiting\n"
+msgstr "Vim: 2½Å¤Î¥·¥°¥Ê¥ë¤Î¤¿¤á, Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â¹\n"
+
+#, c-format
+msgid "Vim: Caught deadly signal %s\n"
+msgstr "Vim: ÃƒÃ—̿Ū¥·¥°¥Ê¥ë %s Â¤Ã²Â¸Â¡ÃƒÃŽÂ¤Â·Â¤ÃžÂ¤Â·Â¤Â¿\n"
+
+#, c-format
+msgid "Vim: Caught deadly signal\n"
+msgstr "Vim: ÃƒÃ—̿Ū¥·¥°¥Ê¥ë¤ò¸¡ÃΤ·¤Þ¤·¤¿\n"
+
+#, c-format
+msgid "Opening the X display took %ld msec"
+msgstr "X¥µ¡¼¥Ã¤Ø¤ÎÀܳ¤Ë %ld Â¥ÃŸÂ¥ÃªÃ‰ÃƒÂ¤Â«Â¤Â«Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid ""
+"\n"
+"Vim: Got X error\n"
+msgstr ""
+"\n"
+"Vim: X Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã²Â¸Â¡Â½Ã¤·¤Þ¤·¤¿r\n"
+
+msgid "Testing the X display failed"
+msgstr "X display Â¤ÃŽÂ¥Ã¥§¥Ã¥¯¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "Opening the X display timed out"
+msgstr "X display Â¤ÃŽ open Â¤Â¬Â¥Â¿Â¥Â¤Â¥Ã Â¥Â¢Â¥Â¦Â¥ÃˆÂ¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid ""
+"\n"
+"Could not get security context for "
+msgstr ""
+"\n"
+"¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó "
+
+msgid ""
+"\n"
+"Could not set security context for "
+msgstr ""
+"\n"
+"¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È¤òÀßÄê¤Ç¤­¤Þ¤»¤ó "
+
+msgid ""
+"\n"
+"Cannot execute shell "
+msgstr ""
+"\n"
+"¥·¥§¥ë¤ò¼Â¹Ô¤Ç¤­¤Þ¤»¤ó "
+
+msgid ""
+"\n"
+"Cannot execute shell sh\n"
+msgstr ""
+"\n"
+"sh Â¥Â·Â¥Â§Â¥Ã«Â¤Ã²Â¼Ã‚¹Ô¤Ç¤­¤Þ¤»¤ó\n"
+
+msgid ""
+"\n"
+"shell returned "
+msgstr ""
+"\n"
+"¥·¥§¥ë¤¬ÃäòÊÖ¤·¤Þ¤·¤¿ "
+
+msgid ""
+"\n"
+"Cannot create pipes\n"
+msgstr ""
+"\n"
+"¥Ñ¥¤¥×¤òºîÀ®¤Ç¤­¤Þ¤»¤ó\n"
+
+msgid ""
+"\n"
+"Cannot fork\n"
+msgstr ""
+"\n"
+"fork Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³\n"
+
+msgid ""
+"\n"
+"Command terminated\n"
+msgstr ""
+"\n"
+"¥³¥Þ¥ó¥É¤òÃæÃǤ·¤Þ¤·¤¿\n"
+
+msgid "XSMP lost ICE connection"
+msgstr "XSMP Â¤Â¬ICEÀܳ¤ò¼º¤¤¤Þ¤·¤¿"
+
+#, c-format
+msgid "dlerror = \"%s\""
+msgstr "dlerror = \"%s\""
+
+msgid "Opening the X display failed"
+msgstr "X display Â¤ÃŽ open Â¤Ã‹Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+
+msgid "XSMP handling save-yourself request"
+msgstr "XSMP Â¤Â¬save-yourselfÃ×µá¤ò½èÃý¤·¤Æ¤¤¤Þ¤¹"
+
+msgid "XSMP opening connection"
+msgstr "XSMP Â¤Â¬Ã€ÃœÃ‚³¤ò³«»Ã¤·¤Æ¤¤¤Þ¤¹"
+
+msgid "XSMP ICE connection watch failed"
+msgstr "XSMP ICEÀܳ¤¬¼ºÇÔ¤·¤¿¤è¤¦¤Ç¤¹"
+
+#, c-format
+msgid "XSMP SmcOpenConnection failed: %s"
+msgstr "XSMP SmcOpenConnection¤¬¼ºÇÔ¤·¤Þ¤·¤¿: %s"
+
+msgid "At line"
+msgstr "¹Ô"
+
+msgid "Could not load vim32.dll!"
+msgstr "vim32.dll Â¤Ã²Â¥Ã­Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿"
+
+msgid "VIM Error"
+msgstr "VIM¥¨¥é¡¼"
+
+msgid "Could not fix up function pointers to the DLL!"
+msgstr "DLL¤«¤é´Ø¿ô¥Ã¥¤¥ó¥¿¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#, c-format
+msgid "shell returned %d"
+msgstr "¥·¥§¥ë¤¬¥³¡¼¥É %d Â¤Ã‡Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+#, c-format
+msgid "Vim: Caught %s event\n"
+msgstr "Vim: Â¥Â¤Â¥Ã™Â¥Ã³Â¥Ãˆ %s Â¤Ã²Â¸Â¡ÃƒÃŽ\n"
+
+msgid "close"
+msgstr "ÊĤ¸¤ë"
+
+msgid "logoff"
+msgstr "¥í¥°¥ª¥Õ"
+
+msgid "shutdown"
+msgstr "¥·¥ã¥Ã¥È¥À¥¦¥ó"
+
+msgid "E371: Command not found"
+msgstr "E371: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid ""
+"VIMRUN.EXE not found in your $PATH.\n"
+"External commands will not pause after completion.\n"
+"See  :help win32-vimrun  for more information."
+msgstr ""
+"VIMRUN.EXE¤¬ $PATH Â¤ÃŽÃƒÃ¦Â¤Ã‹Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó.\n"
+"³°Éô¥³¥Þ¥ó¥É¤Î½ªÎ»¸å¤Ë°ì»þÄä»ß¤ò¤·¤Þ¤»¤ó.\n"
+"¾ÜºÙ¤à :help win32-vimrun  Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤."
+
+msgid "Vim Warning"
+msgstr "Vim¤Î·Ù¹ð"
+
+#, c-format
+msgid "E372: Too many %%%c in format string"
+msgstr "E372: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‹ %%%c Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+#, c-format
+msgid "E373: Unexpected %%%c in format string"
+msgstr "E373: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‹Ã½´ü¤»¤Ì %%%c Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "E374: Missing ] in format string"
+msgstr "E374: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‹ ] Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E375: Unsupported %%%c in format string"
+msgstr "E375: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‡Â¤Ã %%%c Â¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+
+#, c-format
+msgid "E376: Invalid %%%c in format string prefix"
+msgstr "E376: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃŽÃ°ÃÖ¤Ë̵¸ú¤Ê %%%c Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+#, c-format
+msgid "E377: Invalid %%%c in format string"
+msgstr "E377: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‹ÃŒÂµÂ¸ÃºÂ¤ÃŠ %%%c Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E378: 'errorformat' contains no pattern"
+msgstr "E378: 'errorformat' Â¤Ã‹Â¥Ã‘¥¿¡¼¥ó¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E379: Missing or empty directory name"
+msgstr "E379: Â¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÃŒÂ¾Â¤Â¬ÃŒÂµÂ¤Â¤Â¤Â«Â¶ÃµÂ¤Ã‡Â¤Â¹"
+
+msgid "E553: No more items"
+msgstr "E553: Ã×ÃǤ¬¤â¤¦¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "(%d of %d)%s%s: "
+msgstr "(%d of %d)%s%s: "
+
+msgid " (line deleted)"
+msgstr " (¹Ô¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿)"
+
+msgid "E380: At bottom of quickfix stack"
+msgstr "E380: quickfix Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤ÃŽÃ‹Ã¶ÃˆÃ¸Â¤Ã‡Â¤Â¹"
+
+msgid "E381: At top of quickfix stack"
+msgstr "E381: quickfix Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤ÃŽÃ€Ã¨Ã†Â¬Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "error list %d of %d; %d errors"
+msgstr "¥¨¥é¡¼°ìÃ÷ %d of %d; %d Â¸Ã„¥¨¥é¡¼"
+
+msgid "E382: Cannot write, 'buftype' option is set"
+msgstr "E382: 'buftype' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤Î¤Ç½ñ¹þ¤ß¤Þ¤»¤ó"
+
+msgid "Error file"
+msgstr "¥¨¥é¡¼¥Õ¥¡¥¤¥ë"
+
+msgid "E683: File name missing or invalid pattern"
+msgstr "E683: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Â¬ÃŒÂµÂ¤Â¤Â¤Â«ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã‘¥¿¡¼¥ó¤Ç¤¹"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E681: Buffer is not loaded"
+msgstr "E681: Â¥Ã¥Ã¥Õ¥¡¤ÃÆɤ߹þ¤Þ¤ì¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "E777: String or List expected"
+msgstr "E777: ÃŠÂ¸Â»ÃºÃŽÃ³Â¤Â«Â¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Â¬Ã‰Â¬ÃפǤ¹"
+
+#, c-format
+msgid "E369: invalid item in %s%%[]"
+msgstr "E369: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¹Ã ÃŒÃœÂ¤Ã‡Â¤Â¹: %s%%[]"
+
+#
+#, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: %s[ Â¤ÃŽÂ¸Ã¥Â¤Ã‹ ] Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E53: Unmatched %s%%("
+msgstr "E53: %s%%( Â¤Â¬Ã„à¤ê¹ç¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "E54: Unmatched %s("
+msgstr "E54: %s( Â¤Â¬Ã„à¤ê¹ç¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "E55: Unmatched %s)"
+msgstr "E55: %s) Â¤Â¬Ã„à¤ê¹ç¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( Â¤Ã¥³¥³¤Ç¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 Â¤Â½Â¤ÃŽÃ‚¾¤Ã¥³¥³¤Ç¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#
+#, c-format
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: %s%%[ Â¤ÃŽÂ¸Ã¥Â¤Ã‹ ] Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E70: Empty %s%%[]"
+msgstr "E70: %s%%[] Â¤Â¬Â¶ÃµÂ¤Ã‡Â¤Â¹"
+
+msgid "E339: Pattern too long"
+msgstr "E339: Â¥Ã‘¥¿¡¼¥ó¤¬Ä¹²á¤®¤Þ¤¹"
+
+msgid "E50: Too many \\z("
+msgstr "E50: \\z( Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: %s( Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: \\z( Â¤Â¬Ã„à¤ê¹ç¤Ã¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "E59: invalid character after %s@"
+msgstr "E59: %s@ Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤·¤¿"
+
+#, c-format
+msgid "E60: Too many complex %s{...}s"
+msgstr "E60: ÃŠÂ£Â»Â¨Â¤ÃŠ %s{...} Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+#, c-format
+msgid "E61: Nested %s*"
+msgstr "E61:%s* Â¤Â¬Ã†Ã¾Â¤Ã¬Â»Ã’¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "E62: Nested %s%c"
+msgstr "E62:%s%c Â¤Â¬Ã†Ã¾Â¤Ã¬Â»Ã’¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+
+#
+msgid "E63: invalid use of \\_"
+msgstr "E63: \\_ Â¤ÃŽÃŒÂµÂ¸ÃºÂ¤ÃŠÂ»ÃˆÃÑÊýË¡¤Ç¤¹"
+
+#, c-format
+msgid "E64: %s%c follows nothing"
+msgstr "E64:%s%c Â¤ÃŽÂ¸Ã¥Â¤Ã‹Â¤ÃŠÂ¤Ã‹Â¤Ã¢Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#
+msgid "E65: Illegal back reference"
+msgstr "E65: Ã‰Ã”Àµ¤Ê¸åÊý»²¾È¤Ç¤¹"
+
+#
+msgid "E68: Invalid character after \\z"
+msgstr "E68: \\z Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤·¤¿"
+
+#
+#, c-format
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678: %s%%[dxouU] Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤·¤¿"
+
+#
+#, c-format
+msgid "E71: Invalid character after %s%%"
+msgstr "E71: %s%% Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤·¤¿"
+
+#, c-format
+msgid "E554: Syntax error in %s{...}"
+msgstr "E554: %s{...} Ã†Ã¢Â¤Ã‹ÃŠÂ¸Ã‹Â¡Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "External submatches:\n"
+msgstr "³°Éô¤ÎÉôʬ³ºÅö:\n"
+
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr ""
+"E864: \\%#= Â¤Ã‹Â¤Ã 0, 1 Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã 2 Â¤ÃŽÂ¤ÃŸÂ¤Â¬Ã‚³¤±¤é¤ì¤Þ¤¹¡£"
+"Àµµ¬É½¸½¥¨¥ó¥¸¥ó¤Ã¼«Æ°ÃªÂò¤µ¤ì¤Þ¤¹¡£"
+
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (NFA Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½) Â°ÃŒÃƒÃ–¤¬¸í¤Ã¤Æ¤¤¤Þ¤¹: %c"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) Â´Ã¼Ã‚Ô¤è¤êÃ᤯Àµµ¬É½¸½¤Î½ªÃ¼¤ËÅþ㤷¤Þ¤·¤¿"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÂªÂ¥ÃšÂ¥Ã¬Â¡Â¼Â¥Â¿Â¤Ã‡Â¤Â¹: '\\z%c'"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\%%%c'"
+msgstr "E867: (NFA) ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÂªÂ¥ÃšÂ¥Ã¬Â¡Â¼Â¥Â¿Â¤Ã‡Â¤Â¹: '\\%%%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: Ã…ù²Ã¥¯¥é¥¹¤ò´Þ¤àNFA¹½Ãۤ˼ºÇÔ¤·¤Þ¤·¤¿!"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÂªÂ¥ÃšÂ¥Ã¬Â¡Â¼Â¥Â¿Â¤Ã‡Â¤Â¹: '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (NFA Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½) Â·Â«Â¤ÃªÃŠÃ–¤·¤ÎÀ©¸Â²ó¿ô¤òÆɹþÃæ¤Ë¥¨¥é¡¼"
+
+#. Can't have a multi follow a multi.
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (NFA Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½) Â·Â«Â¤ÃªÃŠÃ–¤· Â¤ÃŽÂ¸Ã¥Â¤Ã‹ Â·Â«Â¤ÃªÃŠÃ–¤· Â¤Ã¤Ç¤­¤Þ¤»¤ó!"
+
+#. Too many `('
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (NFA Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½) '(' Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+msgid "E879: (NFA regexp) Too many \\z("
+msgstr "E879: (NFA Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½) \\z( Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (NFA Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½) Â½ÂªÃƒÂ¼ÂµÂ­Â¹Ã¦Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤Ã²Â¥Ã¥Ã¥×¤Ç¤­¤Þ¤»¤ó!"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr ""
+"E875: (NFA Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½) (¸åÃÖʸ»úÎó¤òNFA¤ËÊÑ´¹Ãæ¤Ë) "
+"¥¹¥¿¥Ã¥¯¤Ë»Ä¤µ¤ì¤¿¥¹¥Æ¡¼¥È¤¬Â¿²á¤®¤Þ¤¹"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (NFA Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½) NFAôÂΤòÊø¤¹¤ë¤Ë¤Ã¶õ¤­¥¹¥Ú¡¼¥¹¤¬Â­¤ê¤Þ¤»¤ó"
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (NFA) Â¸Â½ÂºÃŸÂ²Â£ÃƒÃ‡ÃƒÃ¦Â¤ÃŽÂ¥Ã–¥é¥ó¥Ã¤Ë½½Ê¬¤Ê¥á¥â¥ê¤ò³ä¤êÅö¤Æ¤é¤ì¤Þ¤»¤ó!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr "NFAÀµµ¬É½¸½¥¨¥ó¥¸¥óÃÑ¤Î¥í¥°¥Õ¥¡¥¤¥ë¤ò½ñ¹þÃѤȤ·¤Æ³«¤±¤Þ¤»¤ó¡£"
+"¥í¥°¤Ãɸ½à½ÃÎä˽ÃÎä·¤Þ¤¹¡£"
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) Â¥Ã­Â¥Â°Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³!"
+
+msgid "Could not open temporary log file for writing "
+msgstr "NFAÀµµ¬É½¸½¥¨¥ó¥¸¥óÃÑ¤Î¥í¥°¥Õ¥¡¥¤¥ë¤ò½ñ¹þÃѤȤ·¤Æ³«¤±¤Þ¤»¤ó¡£"
+
+msgid " VREPLACE"
+msgstr " Â²Â¾ÃÛÃÖ´¹"
+
+msgid " REPLACE"
+msgstr " ÃƒÃ–´¹"
+
+msgid " REVERSE"
+msgstr " È¿Å¾"
+
+msgid " INSERT"
+msgstr " ÃÞÆþ"
+
+msgid " (insert)"
+msgstr " (ÃÞÆþ)"
+
+msgid " (replace)"
+msgstr " (ÃÖ´¹)"
+
+msgid " (vreplace)"
+msgstr " (²¾ÃÛÃÖ´¹)"
+
+msgid " Hebrew"
+msgstr " Â¥Ã˜Â¥Ã–¥é¥¤"
+
+msgid " Arabic"
+msgstr " Â¥Â¢Â¥Ã©Â¥Ã“¥¢"
+
+msgid " (lang)"
+msgstr " (¸À¸ì)"
+
+msgid " (paste)"
+msgstr " (Ž¤êÉÕ¤±)"
+
+msgid " VISUAL"
+msgstr " Â¥Ã“¥¸¥å¥¢¥ë"
+
+msgid " VISUAL LINE"
+msgstr " Â¥Ã“¥¸¥å¥¢¥ë Â¹Ã”"
+
+msgid " VISUAL BLOCK"
+msgstr " Â¥Ã“¥¸¥å¥¢¥ë Â¶Ã«Â·Ã"
+
+msgid " SELECT"
+msgstr " Â¥Â»Â¥Ã¬Â¥Â¯Â¥Ãˆ"
+
+msgid " SELECT LINE"
+msgstr " Â¹Ã”»Ø¸þêÂò"
+
+msgid " SELECT BLOCK"
+msgstr " Â¶Ã«Â·ÃêÂò"
+
+msgid "recording"
+msgstr "µ­Ã¿Ãæ"
+
+#, c-format
+msgid "E383: Invalid search string: %s"
+msgstr "E383: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¸Â¡ÂºÃ·ÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‡Â¤Â¹: %s"
+
+#, c-format
+msgid "E384: search hit TOP without match for: %s"
+msgstr "E384: Â¾Ã¥Â¤ÃžÂ¤Ã‡Â¸Â¡ÂºÃ·Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿Â¤Â¬Â³ÂºÃ…ö²Õ½ê¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E385: search hit BOTTOM without match for: %s"
+msgstr "E385: Â²Â¼Â¤ÃžÂ¤Ã‡Â¸Â¡ÂºÃ·Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿Â¤Â¬Â³ÂºÃ…ö²Õ½ê¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+msgid "E386: Expected '?' or '/'  after ';'"
+msgstr "E386: ';' Â¤ÃŽÂ¤Â¢Â¤ÃˆÂ¤Ã‹Â¤Ã '?' Â¤Â« '/' Â¤Â¬Â´Ã¼Ã‚Ô¤µ¤ì¤Æ¤¤¤ë"
+
+msgid " (includes previously listed match)"
+msgstr " (ð¤ËÎóµó¤·¤¿³ºÅö²Õ½ê¤ò´Þ¤à)"
+
+#. cursor at status line
+msgid "--- Included files "
+msgstr "--- Â¥Â¤Â¥Ã³Â¥Â¯Â¥Ã«Â¡Â¼Â¥Ã‰Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« "
+
+msgid "not found "
+msgstr "¸«¤Ä¤«¤ê¤Þ¤»¤ó "
+
+msgid "in path ---\n"
+msgstr "¥Ñ¥¹¤Ë ----\n"
+
+msgid "  (Already listed)"
+msgstr "  (´û¤ËÎóµó)"
+
+msgid "  NOT FOUND"
+msgstr "  Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "Scanning included file: %s"
+msgstr "¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤ò¥¹¥­¥ã¥óÃæ: %s"
+
+#, c-format
+msgid "Searching included file %s"
+msgstr "¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤ò¥¹¥­¥ã¥óÃæ %s"
+
+msgid "E387: Match is on current line"
+msgstr "E387: Â¸Â½ÂºÃŸÂ¹Ã”¤Ë³ºÅö¤¬¤¢¤ê¤Þ¤¹"
+
+msgid "All included files were found"
+msgstr "ô¤Æ¤Î¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+
+msgid "No included files"
+msgstr "¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E388: Couldn't find definition"
+msgstr "E388: Ã„êµÃ¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+
+msgid "E389: Couldn't find pattern"
+msgstr "E389: Â¥Ã‘¥¿¡¼¥ó¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+
+msgid "Substitute "
+msgstr "Substitute "
+
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# ÂºÃ‡Â¸Ã¥Â¤ÃŽ %s¸¡º÷¥Ñ¥¿¡¼¥ó:\n"
+"~"
+
+msgid "E759: Format error in spell file"
+msgstr "E759: Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ½Ã±Â¼Â°Â¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹"
+
+msgid "E758: Truncated spell file"
+msgstr "E758: Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Ã€ÃšÂ¼Ã¨Â¤Ã©Â¤Ã¬Â¤Ã†Â¤Â¤Â¤Ã«Â¤Ã¨Â¤Â¦Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "%s (%d Â¹Ã”ÌÜ) Â¤Ã‹Ã‚³¤¯¥Æ¥­¥¹¥È: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "%s (%d Â¹Ã”ÌÜ) Â¤ÃŽ affix ÃŒÂ¾Â¤Â¬Ã„¹²á¤®¤Þ¤¹: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr ""
+"E761: affix¥Õ¥¡¥¤¥ë¤Î FOL, LOW Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã UPP Â¤ÃŽÂ¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÂ¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762: FOL, LOW Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã UPP Â¤ÃŽÃŠÂ¸Â»ÃºÂ¤Â¬ÃˆÃ°Ã³°¤Ç¤¹"
+
+msgid "Compressing word tree..."
+msgstr "ñ¸ì¥Ä¥ê¡¼¤ò°µ½Ì¤·¤Æ¤¤¤Þ¤¹..."
+
+msgid "E756: Spell checking is not enabled"
+msgstr "E756: Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã¥§¥Ã¥¯¤Ã̵¸ú²½¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"·Ù¹ð: ÃƒÂ±Â¸Ã¬Â¥ÃªÂ¥Â¹Â¥Ãˆ \"%s_%s.spl\" Â¤ÂªÂ¤Ã¨Â¤Ã“ \"%s_ascii.spl\" Â¤Ã¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr ""
+"·Ù¹ð: ÃƒÂ±Â¸Ã¬Â¥ÃªÂ¥Â¹Â¥Ãˆ \"%s.%s.spl\" Â¤ÂªÂ¤Ã¨Â¤Ã“ \"%s.ascii.spl\" Â¤Ã¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "Reading spell file \"%s\""
+msgstr "¥¹¥Ú¥ë¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Ã†Ã‰Â¹Ã¾ÃƒÃ¦"
+
+msgid "E757: This does not look like a spell file"
+msgstr "E757: Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Ã¤Ê¤¤¤è¤¦¤Ç¤¹"
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771: Â¸Ã…¤¤¥¹¥Ú¥ë¥Õ¥¡¥¤¥ë¤Ê¤Î¤Ç, Â¥Â¢Â¥ÃƒÂ¥Ã—¥Ç¡¼¥È¤·¤Æ¤¯¤À¤µ¤¤"
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772: Â¤Ã¨Â¤ÃªÂ¿Â·Â¤Â·Â¤Â¤Â¥Ã¡¼¥¸¥ç¥ó¤Î Vim ÃѤΥ¹¥Ú¥ë¥Õ¥¡¥¤¥ë¤Ç¤¹"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770: Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹Â¥ÂµÂ¥Ã¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥»¥¯¥·¥ç¥ó¤¬¤¢¤ê¤Þ¤¹"
+
+#, c-format
+msgid "Warning: region %s not supported"
+msgstr "·Ù¹ð9: %s Â¤ÃˆÂ¤Â¤Â¤Â¦ÃˆÃ°Ã¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "Reading affix file %s ..."
+msgstr "affix Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s Â¤Ã²Ã†Ã‰Â¹Ã¾ÃƒÃ¦..."
+
+#, c-format
+msgid "Conversion failure for word in %s line %d: %s"
+msgstr "%s (%d Â¹Ã”ÌÜ) Â¤ÃŽÃƒÂ±Â¸Ã¬Â¤Ã²ÃŠÃ‘´¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿: %s"
+
+#, c-format
+msgid "Conversion in %s not supported: from %s to %s"
+msgstr "%s Ã†Ã¢Â¤ÃŽÂ¼Â¡Â¤ÃŽÃŠÃ‘´¹¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: %s Â¤Â«Â¤Ã© %s Â¤Ã˜"
+
+#, c-format
+msgid "Conversion in %s not supported"
+msgstr "%s Ã†Ã¢Â¤ÃŽÃŠÃ‘´¹¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "%s Ã†Ã¢Â¤ÃŽ %d Â¹Ã”ÌܤΠFLAG Â¤Ã‹ÃŒÂµÂ¸ÃºÂ¤ÃŠÃƒÃ¤¬¤¢¤ê¤Þ¤¹: %s"
+
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "%s Ã†Ã¢Â¤ÃŽ %d Â¹Ã”Ìܤ˥ե饰¤ÎÆó½Å»ÈÃѤ¬¤¢¤ê¤Þ¤¹: %s"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"%s Â¤ÃŽ %d Â¹Ã”ÌܤΠPFX Â¹Ã ÃŒÃœÂ¤ÃŽÂ¸Ã¥Â¤ÃŽ COMPOUNDFORBIDFLAG Â¤ÃŽÃ„êµÃ¤Ã¸í¤Ã¤¿·ë²Ì¤òÀ¸¤¸¤ë"
+"¤³¤È¤¬¤¢¤ê¤Þ¤¹"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"%s Â¤ÃŽ %d Â¹Ã”ÌܤΠPFX Â¹Ã ÃŒÃœÂ¤ÃŽÂ¸Ã¥Â¤ÃŽ COMPOUNDPERMITFLAG Â¤ÃŽÃ„êµÃ¤Ã¸í¤Ã¤¿·ë²Ì¤òÀ¸¤¸¤ë"
+"¤³¤È¤¬¤¢¤ê¤Þ¤¹"
+
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "COMPOUNDRULES Â¤ÃŽÃƒÃ¤Ë¸í¤ê¤¬¤¢¤ê¤Þ¤¹. Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s Â¤ÃŽ %d Â¹Ã”ÌÜ: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠCOMPOUNDWORDMAX Â¤ÃŽÃƒÃ¤Ë¸í¤ê¤¬¤¢¤ê¤Þ¤¹: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠCOMPOUNDMIN Â¤ÃŽÃƒÃ¤Ë¸í¤ê¤¬¤¢¤ê¤Þ¤¹: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠCOMPOUNDSYLMAX Â¤ÃŽÃƒÃ¤Ë¸í¤ê¤¬¤¢¤ê¤Þ¤¹: %s"
+
+#, c-format
+msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠCHECKCOMPOUNDPATTERN Â¤ÃŽÃƒÃ¤Ë¸í¤ê¤¬¤¢¤ê¤Þ¤¹: %s"
+
+#, c-format
+msgid "Different combining flag in continued affix block in %s line %d: %s"
+msgstr ""
+"%s Â¤ÃŽ %d Â¹Ã”ÌܤΠâ³ affix Â¥Ã–¥í¥Ã¥¯¤Î¥Õ¥é¥°¤ÎÃȹ礻¤Ë°ã¤¤¤¬¤¢¤ê¤Þ¤¹: %s"
+
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”Ìܤˠ½Åʣ¤·¤¿ affix Â¤Ã²Â¸Â¡Â½Ã¤·¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid ""
+"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
+"line %d: %s"
+msgstr ""
+"%s Â¤ÃŽ %d Â¹Ã”ÌܤΠaffix Â¤Ã BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
+"¤Ë»ÈÃѤ·¤Æ¤¯¤À¤µ¤¤: %s"
+
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤǤàY Â¤Â« N Â¤Â¬Ã‰Â¬ÃפǤ¹: %s"
+
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠ¾ò·ï¤òõ¤ì¤Æ¤¤¤Þ¤¹: %s"
+
+#, c-format
+msgid "Expected REP(SAL) count in %s line %d"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤˤàREP(SAL) Â¤ÃŽÂ²Ã³Â¿Ã´Â¤Â¬Ã‰Â¬ÃפǤ¹"
+
+#, c-format
+msgid "Expected MAP count in %s line %d"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤˤàMAP Â¤ÃŽÂ²Ã³Â¿Ã´Â¤Â¬Ã‰Â¬ÃפǤ¹"
+
+#, c-format
+msgid "Duplicate character in MAP in %s line %d"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠMAP Â¤Ã‹Â½Ã…Ê£¤·¤¿Ê¸»ú¤¬¤¢¤ê¤Þ¤¹"
+
+#, c-format
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”Ìܤˠǧ¼±¤Ç¤­¤Ê¤¤¤«½Åʣ¤·¤¿¹àÌܤ¬¤¢¤ê¤Þ¤¹: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "%s Â¹Ã”ÌܤË FOL/LOW/UPP Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "SYLLABLE Â¤Â¬Â»Ã˜Ã„ꤵ¤ì¤Ê¤¤ COMPOUNDSYLMAX"
+
+msgid "Too many postponed prefixes"
+msgstr "ÃÙ±ä¸åÃÖ»Ò¤¬Â¿²á¤®¤Þ¤¹"
+
+msgid "Too many compound flags"
+msgstr "Ê£¹ç¥Õ¥é¥°¤¬Â¿²á¤®¤Þ¤¹"
+
+msgid "Too many postponed prefixes and/or compound flags"
+msgstr "ÃÙ±ä¸åÃֻҠ¤È/¤â¤·¤¯¤àÊ£¹ç¥Õ¥é¥°¤¬Â¿²á¤®¤Þ¤¹"
+
+#, c-format
+msgid "Missing SOFO%s line in %s"
+msgstr "SOFO%s Â¹Ã”¤¬ %s Â¤Ã‹Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "Both SAL and SOFO lines in %s"
+msgstr "SAL¹Ô Â¤Ãˆ SOFO¹Ô Â¤Â¬ %s Â¤Ã‡ÃŽÂ¾ÃŠÃ½Â»Ã˜Ã„ꤵ¤ì¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”¤Î Â¥Ã•Â¥Ã©Â¥Â°Â¤Â¬Â¿Ã´ÃƒÃ¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠ¥Õ¥é¥°¤¬ÉÔÀµ¤Ç¤¹: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr "Ãà%s Â¤Ã¾¤Î .aff Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â»ÃˆÃѤµ¤ì¤¿¤Î¤È°Û¤Ê¤ê¤Þ¤¹"
+
+#, c-format
+msgid "Reading dictionary file %s ..."
+msgstr "¼­½ñ¥Õ¥¡¥¤¥ë %s Â¤Ã²Â¥Â¹Â¥Â­Â¥Ã£Â¥Ã³ÃƒÃ¦..."
+
+#, c-format
+msgid "E760: No word count in %s"
+msgstr "E760: %s Â¤Ã‹Â¤Ãñ¸ì¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "line %6d, word %6d - %s"
+msgstr "¹Ô %6d, ÃƒÂ±Â¸Ã¬ %6d - %s"
+
+#, c-format
+msgid "Duplicate word in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤǠ½Åʣñ¸ì¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "First duplicate word in %s line %d: %s"
+msgstr "½ÅÊ£¤Î¤¦¤ÃºÇ½é¤Îñ¸ì¤à%s Â¤ÃŽ %d Â¹Ã”ÌܤǤ¹: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d Â¸Ã„¤Îñ¸ì¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿ (%s Ã†Ã¢)"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr "ÈóASCIIʸ»ú¤ò´Þ¤à %d Â¸Ã„¤Îñ¸ì¤ò̵»ë¤·¤Þ¤·¤¿ (%s Ã†Ã¢)"
+
+#, c-format
+msgid "Reading word file %s ..."
+msgstr "ɸ½àÆþÎ䫤éÆɹþ¤ßÃæ %s ..."
+
+#, c-format
+msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠ½Åʣ¤·¤¿ /encoding= Â¹Ã”¤ò̵»ë¤·¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "/encoding= line after word ignored in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠñ¸ì¤Î¸å¤Î /encoding= Â¹Ã”¤ò̵»ë¤·¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "Duplicate /regions= line ignored in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠ½Åʣ¤·¤¿ /regions= Â¹Ã”¤ò̵»ë¤·¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "Too many regions in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌÜ, ÃˆÃ°Ã»ØÄ꤬¿²á¤®¤Þ¤¹: %s"
+
+#, c-format
+msgid "/ line ignored in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠ½Åʣ¤·¤¿ / Â¹Ã”¤ò̵»ë¤·¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "Invalid region nr in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”Ìܠ̵¸ú¤Ê nr ÃŽÃŽÂ°Ã¨Â¤Ã‡Â¤Â¹: %s"
+
+#, c-format
+msgid "Unrecognized flags in %s line %d: %s"
+msgstr "%s Â¤ÃŽ %d Â¹Ã”Ìܠǧ¼±ÉÔǽ¤Ê¥Õ¥é¥°¤Ç¤¹: %s"
+
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr "ÈóASCIIʸ»ú¤ò´Þ¤à %d Â¸Ã„¤Îñ¸ì¤ò̵»ë¤·¤Þ¤·¤¿"
+
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Â¥Ã¡Â¥Ã¢Â¥ÃªÂ¤Â¬Ã‚­¤ê¤Ê¤¤¤Î¤Ç¡¢Ã±¸ì¥ê¥¹¥È¤ÃÉÔ´°Ã´¤Ç¤¹"
+
+#, c-format
+msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+msgstr "¥Î¡¼¥É %d Â¸Ã„(ô %d Â¸Ã„Ãæ) Â¤Ã²Â°ÂµÂ½ÃŒÂ¤Â·Â¤ÃžÂ¤Â·Â¤Â¿; Â»Ã„¤ê %d (%d%%)"
+
+msgid "Reading back spell file..."
+msgstr "¥¹¥Ú¥ë¥Õ¥¡¥¤¥ë¤òµÕÆɹþÃæ"
+
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+msgid "Performing soundfolding..."
+msgstr "²»À¼¾ö¹þ¤ß¤ò¼Â¹ÔÃæ..."
+
+#, c-format
+msgid "Number of words after soundfolding: %ld"
+msgstr "²»À¼¾ö¹þ¤ß¸å¤ÎÃíñ¸ì¿ô: %ld"
+
+#, c-format
+msgid "Total number of words: %d"
+msgstr "Ãíñ¸ì¿ô: %d"
+
+#, c-format
+msgid "Writing suggestion file %s ..."
+msgstr "½¤Àµ¸õÊä¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦..."
+
+#, c-format
+msgid "Estimated runtime memory use: %d bytes"
+msgstr "¿äÄê¥á¥â¥ê»ÈÃÑÎÌ: %d Â¥Ã¥¤¥È"
+
+msgid "E751: Output file name must not have region name"
+msgstr "E751: Â½ÃÃŽÃ¥Õ¥¡¥¤¥ë̾¤Ë¤ÃÈðÃ̾¤ò´Þ¤á¤é¤ì¤Þ¤»¤ó"
+
+msgid "E754: Only up to 8 regions supported"
+msgstr "E754: ÃˆÃ°Ã¤à8 Â¸Ã„¤Þ¤Ç¤·¤«¥µ¥Ã¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "E755: Invalid region in %s"
+msgstr "E755: ÃŒÂµÂ¸ÃºÂ¤ÃŠÃˆÃ°Ã¤Ç¤¹: %s"
+
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr "·Ù¹ð: ÃŠÂ£Â¹Ã§Â¥Ã•Â¥Ã©Â¥Â°Â¤Ãˆ NOBREAK Â¤Â¬ÃŽÂ¾ÃŠÃ½Â¤ÃˆÂ¤Ã¢Â»Ã˜Ã„ꤵ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "Writing spell file %s ..."
+msgstr "¥¹¥Ú¥ë¥Õ¥¡¥¤¥ë %s Â¤Ã²Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦..."
+
+msgid "Done!"
+msgstr "¼Â¹Ô¤·¤Þ¤·¤¿!"
+
+#, c-format
+msgid "E765: 'spellfile' does not have %ld entries"
+msgstr "E765: 'spellfile' Â¤Ã‹Â¤Ã %ld Â¸Ã„¤Î¥¨¥ó¥È¥ê¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "Word removed from %s"
+msgstr "%s Â¤Â«Â¤Ã©ÃƒÂ±Â¸Ã¬Â¤Â¬ÂºÃ¯Â½Ã¼Â¤ÂµÂ¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿"
+
+#, c-format
+msgid "Word added to %s"
+msgstr "%s Â¤Ã‹ÃƒÂ±Â¸Ã¬Â¤Â¬Ã„ɲ䵤ì¤Þ¤·¤¿"
+
+msgid "E763: Word characters differ between spell files"
+msgstr "E763: ÃƒÂ±Â¸Ã¬Â¤ÃŽÃŠÂ¸Â»ÃºÂ¤Â¬Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃˆÂ°Ã›Â¤ÃŠÂ¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "Sorry, no suggestions"
+msgstr "»ÄÇ°¤Ç¤¹¤¬, Â½Â¤Ã€ÂµÂ¸ÃµÃŠÃ¤Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr "»ÄÇ°¤Ç¤¹¤¬, Â½Â¤Ã€ÂµÂ¸ÃµÃŠÃ¤Â¤Ã %ld Â¸Ã„¤·¤«¤¢¤ê¤Þ¤»¤ó"
+
+#. for when 'cmdheight' > 1
+#. avoid more prompt
+#, c-format
+msgid "Change \"%.*s\" to:"
+msgstr "\"%.*s\" Â¤Ã²Â¼Â¡Â¤Ã˜ÃŠÃ‘´¹:"
+
+#, c-format
+msgid " < \"%.*s\""
+msgstr " < \"%.*s\""
+
+msgid "E752: No previous spell replacement"
+msgstr "E752: Â¥Â¹Â¥ÃšÂ¥Ã«ÃƒÃ–´¹¤¬¤Þ¤À¼Â¹Ô¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "E753: Not found: %s"
+msgstr "E753: Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E778: This does not look like a .sug file: %s"
+msgstr "E778: .sug Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Ã¤Ê¤¤¤è¤¦¤Ç¤¹: %s"
+
+#, c-format
+msgid "E779: Old .sug file, needs to be updated: %s"
+msgstr "E779: Â¸Ã…¤¤ .sug Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŠÂ¤ÃŽÂ¤Ã‡, Â¥Â¢Â¥ÃƒÂ¥Ã—¥Ç¡¼¥È¤·¤Æ¤¯¤À¤µ¤¤: %s"
+
+#, c-format
+msgid "E780: .sug file is for newer version of Vim: %s"
+msgstr "E780: Â¤Ã¨Â¤ÃªÂ¿Â·Â¤Â·Â¤Â¤Â¥Ã¡¼¥¸¥ç¥ó¤Î Vim ÃѤΠ.sug Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Â¹: %s"
+
+#, c-format
+msgid "E781: .sug file doesn't match .spl file: %s"
+msgstr "E781: .sug Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬ .spl Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃˆÂ°Ã¬ÃƒÃ—¤·¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E782: error while reading .sug file: %s"
+msgstr "E782: .sug Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃ†Ã‰Â¹Ã¾ÃƒÃ¦Â¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬ÃˆÂ¯Ã€Â¸Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿: %s"
+
+#. This should have been checked when generating the .spl
+#. * file.
+msgid "E783: duplicate char in MAP entry"
+msgstr "E783: MAP Â¥Â¨Â¥Ã³Â¥ÃˆÂ¥ÃªÂ¤Ã‹Â½Ã…ʣʸ»ú¤¬Â¸ºß¤·¤Þ¤¹"
+
+msgid "No Syntax items defined for this buffer"
+msgstr "¤³¤Î¥Ã¥Ã¥Õ¥¡¤ËÄêµÃ¤µ¤ì¤¿¹½Ê¸Ã×ÃǤ䢤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E390: Illegal argument: %s"
+msgstr "E390: Ã‰Ã”Àµ¤Ê°ú¿ô¤Ç¤¹: %s"
+
+#, c-format
+msgid "E391: No such syntax cluster: %s"
+msgstr "E391: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÂ¹Â½ÃŠÂ¸Â¥Â¯Â¥Ã©Â¥Â¹Â¥Â¿Â¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+msgid "syncing on C-style comments"
+msgstr "C¸À¸ìÉ÷¥³¥á¥ó¥È¤«¤éƱ´üÃæ"
+
+msgid "no syncing"
+msgstr "ÈóƱ´ü"
+
+msgid "syncing starts "
+msgstr "Ʊ´ü³«»à"
+
+msgid " lines before top line"
+msgstr " Â¹Ã”ð(¥È¥Ã¥×¹Ô¤è¤ê¤â)"
+
+msgid ""
+"\n"
+"--- Syntax sync items ---"
+msgstr ""
+"\n"
+"--- Â¹Â½ÃŠÂ¸Ã†Â±Â´Ã¼Ã×ÃÇ ---"
+
+msgid ""
+"\n"
+"syncing on items"
+msgstr ""
+"\n"
+"Ã×ÃǾå¤ÇƱ´üÃæ"
+
+msgid ""
+"\n"
+"--- Syntax items ---"
+msgstr ""
+"\n"
+"--- Â¹Â½ÃŠÂ¸Ã×ÃÇ ---"
+
+#, c-format
+msgid "E392: No such syntax cluster: %s"
+msgstr "E392: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÂ¹Â½ÃŠÂ¸Â¥Â¯Â¥Ã©Â¥Â¹Â¥Â¿Â¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+msgid "minimal "
+msgstr "minimal "
+
+msgid "maximal "
+msgstr "maximal "
+
+msgid "; match "
+msgstr "; Â³ÂºÃ…ö "
+
+msgid " line breaks"
+msgstr " Â¸Ã„¤Î²þ¹Ô"
+
+msgid "E395: contains argument not accepted here"
+msgstr "E395: Â¤Â³Â¤ÃŽÂ¾Ã¬Â½ÃªÂ¤Ã‡Â¤Ã°ú¿ôcontains¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E844: invalid cchar value"
+msgstr "E844: ÃŒÂµÂ¸ÃºÂ¤ÃŠcchar¤ÎÃäǤ¹"
+
+msgid "E393: group[t]here not accepted here"
+msgstr "E393: Â¤Â³Â¤Â³Â¤Ã‡Â¤Ã¥°¥ë¡¼¥×¤Ãµö²Ä¤µ¤ì¤Þ¤»¤ó"
+
+#, c-format
+msgid "E394: Didn't find region item for %s"
+msgstr "E394: %s Â¤ÃŽÃˆÃ°ÃÃ×ÃǤ¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+msgid "E397: Filename required"
+msgstr "E397: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Â¬Ã‰Â¬ÃפǤ¹"
+
+msgid "E847: Too many syntax includes"
+msgstr "E847: Â¹Â½ÃŠÂ¸Â¤ÃŽÂ¼Ã¨Â¤ÃªÂ¹Ã¾Â¤ÃŸ(include)¤¬Â¿²á¤®¤Þ¤¹"
+
+#, c-format
+msgid "E789: Missing ']': %s"
+msgstr "E789: ']' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E398: Missing '=': %s"
+msgstr "E398: '=' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E399: Not enough arguments: syntax region %s"
+msgstr "E399: Â°ÃºÂ¿Ã´Â¤Â¬Ã‚­¤ê¤Þ¤»¤ó: Â¹Â½ÃŠÂ¸ÃˆÃ°à%s"
+
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Â¹Â½ÃŠÂ¸Â¥Â¯Â¥Ã©Â¥Â¹Â¥Â¿Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+msgid "E400: No cluster specified"
+msgstr "E400: Â¥Â¯Â¥Ã©Â¥Â¹Â¥Â¿Â¤Â¬Â»Ã˜Ã„ꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "E401: Pattern delimiter not found: %s"
+msgstr "E401: Â¥Ã‘¥¿¡¼¥ó¶èÀڤ꤬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E402: Garbage after pattern: %s"
+msgstr "E402: Â¥Ã‘¥¿¡¼¥ó¤Î¤¢¤È¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹: %s"
+
+msgid "E403: syntax sync: line continuations pattern specified twice"
+msgstr "E403: Â¹Â½ÃŠÂ¸Ã†Â±Â´Ã¼: Ã¢Â³¹Ô¥Ñ¥¿¡¼¥ó¤¬2ÅÙ»ØÄꤵ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "E404: Illegal arguments: %s"
+msgstr "E404: Ã‰Ã”Àµ¤Ê°ú¿ô¤Ç¤¹: %s"
+
+#, c-format
+msgid "E405: Missing equal sign: %s"
+msgstr "E405: Ã…ù¹æ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E406: Empty argument: %s"
+msgstr "E406: Â¶ÃµÂ¤ÃŽÂ°ÃºÂ¿Ã´: %s"
+
+#, c-format
+msgid "E407: %s not allowed here"
+msgstr "E407: %s Â¤Ã¥³¥³¤Ç¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+#, c-format
+msgid "E408: %s must be first in contains list"
+msgstr "E408: %s Â¤ÃÆâÃƥꥹ¥È¤ÎÀèƬ¤Ç¤Ê¤±¤ì¤Ã¤Ê¤é¤Ê¤¤"
+
+#, c-format
+msgid "E409: Unknown group name: %s"
+msgstr "E409: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥Â°Â¥Ã«Â¡Â¼Â¥Ã—̾: %s"
+
+#, c-format
+msgid "E410: Invalid :syntax subcommand: %s"
+msgstr "E410: ÃŒÂµÂ¸ÃºÂ¤ÃŠ :syntax Â¤ÃŽÂ¥ÂµÂ¥Ã–¥³¥Þ¥ó¥É: %s"
+
+msgid ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+msgstr ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+
+msgid "E679: recursive loop loading syncolor.vim"
+msgstr "E679: syncolor.vim Â¤ÃŽÂºÃ†ÂµÂ¢Â¸Ã†Â¤Ã“½Ã¤·¤ò¸¡½Ã¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "E411: highlight group not found: %s"
+msgstr "E411: Â¥Ã¥¤¥é¥¤¥È¥°¥ë¡¼¥×¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E412: Not enough arguments: \":highlight link %s\""
+msgstr "E412: Â°ÃºÂ¿Ã´Â¤Â¬Â½Â¼ÃŠÂ¬Â¤Ã‡Â¤Ã¤Ê¤¤: \":highlight link %s\""
+
+#, c-format
+msgid "E413: Too many arguments: \":highlight link %s\""
+msgstr "E413: Â°ÃºÂ¿Ã´Â¤Â¬Ã‚¿²á¤®¤Þ¤¹: \":highlight link %s\""
+
+msgid "E414: group has settings, highlight link ignored"
+msgstr "E414: Â¥Â°Â¥Ã«Â¡Â¼Â¥Ã—¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤Î¤Ç¥Ã¥¤¥é¥¤¥È¥ê¥ó¥¯¤Ã̵»ë¤µ¤ì¤Þ¤¹"
+
+#, c-format
+msgid "E415: unexpected equal sign: %s"
+msgstr "E415: Ã½´ü¤»¤ÌÅù¹æ¤Ç¤¹: %s"
+
+#, c-format
+msgid "E416: missing equal sign: %s"
+msgstr "E416: Ã…ù¹æ¤¬¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E417: missing argument: %s"
+msgstr "E417: Â°ÃºÂ¿Ã´Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#, c-format
+msgid "E418: Illegal value: %s"
+msgstr "E418: Ã‰Ã”Àµ¤ÊÃäǤ¹: %s"
+
+msgid "E419: FG color unknown"
+msgstr "E419: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÃ°·Ê¿§¤Ç¤¹"
+
+msgid "E420: BG color unknown"
+msgstr "E420: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÃ‡Ã˜Â·ÃŠÂ¿Â§Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "E421: Color name or number not recognized: %s"
+msgstr "E421: Â¥Â«Â¥Ã©Â¡Â¼ÃŒÂ¾Â¤Ã¤ÃˆÃ–¹æ¤òǧ¼±¤Ç¤­¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E422: terminal code too long: %s"
+msgstr "E422: Â½ÂªÃƒÂ¼Â¥Â³Â¡Â¼Â¥Ã‰Â¤Â¬Ã„¹²á¤®¤Þ¤¹: %s"
+
+#, c-format
+msgid "E423: Illegal argument: %s"
+msgstr "E423: Ã‰Ã”Àµ¤Ê°ú¿ô¤Ç¤¹: %s"
+
+msgid "E424: Too many different highlighting attributes in use"
+msgstr "E424: Ã‚¿¤¯¤Î°Û¤Ê¤ë¥Ã¥¤¥é¥¤¥È°À­¤¬»È¤ï¤ì²á¤®¤Æ¤¤¤Þ¤¹"
+
+msgid "E669: Unprintable character in group name"
+msgstr "E669: Â¥Â°Â¥Ã«Â¡Â¼Â¥Ã—̾¤Ë°õºþÉÔ²Äǽ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹"
+
+msgid "W18: Invalid character in group name"
+msgstr "W18: Â¥Â°Â¥Ã«Â¡Â¼Â¥Ã—̾¤ËÉÔÀµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹"
+
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Â¥Ã¥¤¥é¥¤¥È¤È¹½Ê¸¥°¥ë¡¼¥×¤¬Â¿²á¤®¤Þ¤¹"
+
+msgid "E555: at bottom of tag stack"
+msgstr "E555: Â¥Â¿Â¥Â°Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤ÃŽÃ‹Ã¶ÃˆÃ¸Â¤Ã‡Â¤Â¹"
+
+msgid "E556: at top of tag stack"
+msgstr "E556: Â¥Â¿Â¥Â°Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤ÃŽÃ€Ã¨Ã†Â¬Â¤Ã‡Â¤Â¹"
+
+msgid "E425: Cannot go before first matching tag"
+msgstr "E425: ÂºÃ‡Â½Ã©Â¤ÃŽÂ³ÂºÃ…ö¥¿¥°¤òĶ¤¨¤ÆÌá¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E426: tag not found: %s"
+msgstr "E426: Â¥Â¿Â¥Â°Â¤Â¬Â¸Â«Â¤Ã„¤«¤ê¤Þ¤»¤ó: %s"
+
+msgid "  # pri kind tag"
+msgstr "  # pri kind tag"
+
+msgid "file\n"
+msgstr "¥Õ¥¡¥¤¥ë\n"
+
+msgid "E427: There is only one matching tag"
+msgstr "E427: Â³ÂºÃ…ö¥¿¥°¤¬1¤Ä¤À¤±¤·¤«¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E428: Cannot go beyond last matching tag"
+msgstr "E428: ÂºÃ‡Â¸Ã¥Â¤Ã‹Â³ÂºÃ…ö¤¹¤ë¥¿¥°¤òĶ¤¨¤Æ¿Ê¤à¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "File \"%s\" does not exist"
+msgstr "¥Õ¥¡¥¤¥ë \"%s\" Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#. Give an indication of the number of matching tags
+#, c-format
+msgid "tag %d of %d%s"
+msgstr "¥¿¥° %d (ô%d%s)"
+
+msgid " or more"
+msgstr " Â¤Â«Â¤Â½Â¤Ã¬Â°ÃŠÂ¾Ã¥"
+
+msgid "  Using tag with different case!"
+msgstr "  Â¥Â¿Â¥Â°Â¤Ã²Â°Ã›Â¤ÃŠÂ¤Ã«case¤Ç»ÈÃѤ·¤Þ¤¹!"
+
+#, c-format
+msgid "E429: File \"%s\" does not exist"
+msgstr "E429: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#. Highlight title
+msgid ""
+"\n"
+"  # TO tag         FROM line  in file/text"
+msgstr ""
+"\n"
+"  # TO Â¥Â¿Â¥Â°        FROM Â¹Ã”    in file/text"
+
+#, c-format
+msgid "Searching tags file %s"
+msgstr "¥¿¥°¥Õ¥¡¥¤¥ë %s Â¤Ã²Â¸Â¡ÂºÃ·ÃƒÃ¦"
+
+#, c-format
+msgid "E430: Tag file path truncated for %s\n"
+msgstr "E430: Â¥Â¿Â¥Â°Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ¥Ã‘¥¹¤¬ %s Â¤Ã‹Ã€ÃšÂ¤ÃªÂ¼ÃŽÂ¤Ã†Â¤Ã©Â¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿\n"
+
+msgid "Ignoring long line in tags file"
+msgstr "¥¿¥°¥Õ¥¡¥¤¥ëÆâ¤ÎŤ¤¹Ô¤ò̵»ë¤·¤Þ¤¹"
+
+#, c-format
+msgid "E431: Format error in tags file \"%s\""
+msgstr "E431: Â¥Â¿Â¥Â°Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤ÃŽÂ¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÂ¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+#, c-format
+msgid "Before byte %ld"
+msgstr "ľÃ°¤Î %ld Â¥Ã¥¤¥È"
+
+#, c-format
+msgid "E432: Tags file not sorted: %s"
+msgstr "E432: Â¥Â¿Â¥Â°Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¥Â½Â¡Â¼Â¥ÃˆÂ¤ÂµÂ¤Ã¬Â¤Ã†Â¤Â¤Â¤ÃžÂ¤Â»Â¤Ã³: %s"
+
+#. never opened any tags file
+msgid "E433: No tags file"
+msgstr "E433: Â¥Â¿Â¥Â°Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E434: Can't find tag pattern"
+msgstr "E434: Â¥Â¿Â¥Â°Â¥Ã‘¥¿¡¼¥ó¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+
+msgid "E435: Couldn't find tag, just guessing!"
+msgstr "E435: Â¥Â¿Â¥Â°Â¤Ã²Â¸Â«Â¤Ã„¤±¤é¤ì¤Ê¤¤¤Î¤Çñ¤Ë¿ä¬¤·¤Þ¤¹!"
+
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "½ÅÊ£¤·¤¿¥Õ¥£¡¼¥ë¥É̾: %s"
+
+msgid "' not known. Available builtin terminals are:"
+msgstr "' Â¤Ã̤ÃΤǤ¹. Â¸Â½Â¹Ã”¤ÎÃȤ߹þ¤ßüËö¤Ã¼¡¤Î¤È¤ª¤ê¤Ç¤¹:"
+
+msgid "defaulting to '"
+msgstr "¾ÊάÃäò¼¡¤Î¤è¤¦¤ËÀßÄꤷ¤Þ¤¹ '"
+
+msgid "E557: Cannot open termcap file"
+msgstr "E557: termcap¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó"
+
+msgid "E558: Terminal entry not found in terminfo"
+msgstr "E558: terminfo¤ËüËö¥¨¥ó¥È¥ê¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+
+msgid "E559: Terminal entry not found in termcap"
+msgstr "E559: termcap¤ËüËö¥¨¥ó¥È¥ê¤ò¸«¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+
+#, c-format
+msgid "E436: No \"%s\" entry in termcap"
+msgstr "E436: termcap¤Ë \"%s\" Â¤ÃŽÂ¥Â¨Â¥Ã³Â¥ÃˆÂ¥ÃªÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E437: terminal capability \"cm\" required"
+msgstr "E437: ÃƒÂ¼Ã‹Ã¶Â¤Ã‹ \"cm\" ÂµÂ¡Ã‡Â½Â¤Â¬Ã‰Â¬ÃפǤ¹"
+
+#. Highlight title
+msgid ""
+"\n"
+"--- Terminal keys ---"
+msgstr ""
+"\n"
+"--- ÃƒÂ¼Ã‹Ã¶Â¥Â­Â¡Â¼ ---"
+
+msgid "new shell started\n"
+msgstr "¿·¤·¤¤¥·¥§¥ë¤òµ¯Æ°¤·¤Þ¤¹\n"
+
+msgid "Vim: Error reading input, exiting...\n"
+msgstr "Vim: Ã†Ã¾ÃŽÃ¤òÆɹþ¤ßÃæ¤Î¥¨¥é¡¼¤Ë¤è¤ê½ªÎ»¤·¤Þ¤¹...\n"
+
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "¶õ¤ÎêÂòÎΰè¤Î¤«¤ï¤ê¤ËCUT_BUFFER0¤¬»ÈÃѤµ¤ì¤Þ¤·¤¿"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: Ã½´ü¤»¤º¹Ô¥«¥¦¥ó¥È¤¬ÊѤï¤ê¤Þ¤·¤¿"
+
+#. must display the prompt
+msgid "No undo possible; continue anyway"
+msgstr "²Äǽ¤Ê¥¢¥ó¥É¥¥¤Ã¤¢¤ê¤Þ¤»¤ó: Â¤ÃˆÂ¤ÃªÂ¤Â¢Â¤Â¨Â¤ÂºÃ‚³¤±¤Þ¤¹"
+
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: Â½Ã±Â¹Ã¾Â¤ÃŸÃѤ˥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â²ÃµÂ¤Ã¬Â¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹ (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "'undodir'¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ë¤ò½ñ¤­¹þ¤á¤Þ¤»¤ó"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "¥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ë¤È¤·¤ÆÆɤ߹þ¤á¤Ê¤¤¤Î¤Ç¾å½ñ¤­¤·¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "¥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ë¤Ç¤Ã¤Ê¤¤¤Î¤Ç¾å½ñ¤­¤·¤Þ¤»¤ó: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "Âþ䬤ʤ¤¤Î¤Ç¥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ë¤Î½ñ¤­¹þ¤ß¤ò¥¹¥­¥Ã¥×¤·¤Þ¤¹"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "¥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ë½ñ¤­¹þ¤ßÃæ: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ½Ã±Â¤Â­Â¹Ã¾Â¤ÃŸÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "¥ª¡¼¥Ê¡¼¤¬°Û¤Ê¤ë¤Î¤Ç¥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤ß¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "¥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ëÆɹþÃæ: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²Ã†Ã‰Â¹Ã¾ÃѤȤ·¤Æ³«¤±¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: ÃˆÃ³Â°Ã…¹æ²½¥Õ¥¡¥¤¥ë¤¬°Å¹æ²½¤µ¤ì¤¿¥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ë¤ò»È¤Ã¤Æ¤Þ¤¹: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: Â°Ã…¹æ²½¤µ¤ì¤¿¥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ë¤Î²òÆɤ˼ºÇÔ¤·¤Þ¤·¤¿: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â°Ã…¹æ²½¤µ¤ì¤Æ¤¤¤Þ¤¹: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: Â¸ÃŸÂ´Â¹Ã€Â­Â¤ÃŽÃŒÂµÂ¤Â¤Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Â¹: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "¥Õ¥¡¥¤¥ë¤ÎÆâÃƤ¬ÊѤï¤Ã¤Æ¤¤¤ë¤¿¤á¡¢¥¢¥ó¥É¥¥¾ðÊó¤òÃøÃѤǤ­¤Þ¤»¤ó"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "¥¢¥ó¥É¥¥¥Õ¥¡¥¤¥ë %s Â¤ÃŽÂ¼Ã¨Â¹Ã¾Â¤Ã²Â´Â°ÃŽÂ»"
+
+msgid "Already at oldest change"
+msgstr "´û¤Ë°ìÈָŤ¤Êѹ¹¤Ç¤¹"
+
+msgid "Already at newest change"
+msgstr "´û¤Ë°ìÈÖ¿·¤·¤¤Êѹ¹¤Ç¤¹"
+
+#, c-format
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥ÃˆÃ–¹æ %ld Â¤Ã¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+
+msgid "E438: u_undo: line numbers wrong"
+msgstr "E438: u_undo: Â¹Ã”Èֹ椬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "more line"
+msgstr "¹Ô Ã„ɲä·¤Þ¤·¤¿"
+
+msgid "more lines"
+msgstr "¹Ô Ã„ɲä·¤Þ¤·¤¿"
+
+msgid "line less"
+msgstr "¹Ô ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "fewer lines"
+msgstr "¹Ô ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "change"
+msgstr "²Õ½êÊѹ¹¤·¤Þ¤·¤¿"
+
+msgid "changes"
+msgstr "²Õ½êÊѹ¹¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "%ld %s; %s #%ld  %s"
+msgstr "%ld %s; %s #%ld  %s"
+
+msgid "before"
+msgstr "ðÊý"
+
+msgid "after"
+msgstr "¸åÊý"
+
+msgid "Nothing to undo"
+msgstr "¥¢¥ó¥É¥¥Âþ䬤¢¤ê¤Þ¤»¤ó"
+
+msgid "number changes  when               saved"
+msgstr "ÄÌÈÖ   ÃŠÃ‘¹¹¿ô   ÃŠÃ‘¹¹»þ´ü           ÃŠÃ¸ºÑ"
+
+#, c-format
+msgid "%ld seconds ago"
+msgstr "%ld Ã‰ÃƒÂ·Ã²á¤·¤Æ¤¤¤Þ¤¹"
+
+msgid "E790: undojoin is not allowed after undo"
+msgstr "E790: undo Â¤ÃŽÃ„¾¸å¤Ë undojoin Â¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E439: undo list corrupt"
+msgstr "E439: Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥Â¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Â¬Â²ÃµÂ¤Ã¬Â¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+
+msgid "E440: undo line missing"
+msgstr "E440: Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥Â¹Ã”¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#. Only MS VC 4.1 and earlier can do Win32s
+msgid ""
+"\n"
+"MS-Windows 16/32-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 16/32 Â¥Ã“¥Ã¥È GUI ÃˆÃ‡"
+
+msgid ""
+"\n"
+"MS-Windows 64-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 64 Â¥Ã“¥Ã¥È GUI ÃˆÃ‡"
+
+msgid ""
+"\n"
+"MS-Windows 32-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 32 Â¥Ã“¥Ã¥È GUI ÃˆÃ‡"
+
+msgid " in Win32s mode"
+msgstr " in Win32s Â¥Ã¢Â¡Â¼Â¥Ã‰"
+
+msgid " with OLE support"
+msgstr " with OLE Â¥ÂµÂ¥Ã¡¼¥È"
+
+msgid ""
+"\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 64 Â¥Ã“¥Ã¥È Â¥Â³Â¥Ã³Â¥Â½Â¡Â¼Â¥Ã« ÃˆÃ‡"
+
+msgid ""
+"\n"
+"MS-Windows 32-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 32 Â¥Ã“¥Ã¥È Â¥Â³Â¥Ã³Â¥Â½Â¡Â¼Â¥Ã« ÃˆÃ‡"
+
+msgid ""
+"\n"
+"MS-Windows 16-bit version"
+msgstr ""
+"\n"
+"MS-Windows 16 Â¥Ã“¥Ã¥È ÃˆÃ‡"
+
+msgid ""
+"\n"
+"32-bit MS-DOS version"
+msgstr ""
+"\n"
+"32 Â¥Ã“¥Ã¥È MS-DOS ÃˆÃ‡"
+
+msgid ""
+"\n"
+"16-bit MS-DOS version"
+msgstr ""
+"\n"
+"16 Â¥Ã“¥Ã¥È MS-DOS ÃˆÃ‡"
+
+msgid ""
+"\n"
+"MacOS X (unix) version"
+msgstr ""
+"\n"
+"MacOS X (unix) ÃˆÃ‡"
+
+msgid ""
+"\n"
+"MacOS X version"
+msgstr ""
+"\n"
+"MacOS X ÃˆÃ‡"
+
+msgid ""
+"\n"
+"MacOS version"
+msgstr ""
+"\n"
+"MacOS ÃˆÃ‡"
+
+msgid ""
+"\n"
+"OpenVMS version"
+msgstr ""
+"\n"
+"OpenVMS ÃˆÃ‡"
+
+msgid ""
+"\n"
+"Included patches: "
+msgstr ""
+"\n"
+"ŬÃѺѥѥåÃ: "
+
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"ÄɲóÈÄ¥¥Ñ¥Ã¥Ã: "
+
+msgid "Modified by "
+msgstr "Modified by "
+
+msgid ""
+"\n"
+"Compiled "
+msgstr ""
+"\n"
+"Compiled "
+
+msgid "by "
+msgstr "by "
+
+msgid ""
+"\n"
+"Huge version "
+msgstr ""
+"\n"
+"Huge ÃˆÃ‡ "
+
+msgid ""
+"\n"
+"Big version "
+msgstr ""
+"\n"
+"Big ÃˆÃ‡ "
+
+msgid ""
+"\n"
+"Normal version "
+msgstr ""
+"\n"
+"Ä̾ï ÃˆÃ‡ "
+
+msgid ""
+"\n"
+"Small version "
+msgstr ""
+"\n"
+"Small ÃˆÃ‡ "
+
+msgid ""
+"\n"
+"Tiny version "
+msgstr ""
+"\n"
+"Tiny ÃˆÃ‡ "
+
+msgid "without GUI."
+msgstr "without GUI."
+
+msgid "with GTK2-GNOME GUI."
+msgstr "with GTK2-GNOME GUI."
+
+msgid "with GTK2 GUI."
+msgstr "with GTK2 GUI."
+
+msgid "with X11-Motif GUI."
+msgstr "with X11-Motif GUI."
+
+msgid "with X11-neXtaw GUI."
+msgstr "with X11-neXtaw GUI."
+
+msgid "with X11-Athena GUI."
+msgstr "with X11-Athena GUI."
+
+msgid "with Photon GUI."
+msgstr "with Photon GUI."
+
+msgid "with GUI."
+msgstr "with GUI."
+
+msgid "with Carbon GUI."
+msgstr "with Carbon GUI."
+
+msgid "with Cocoa GUI."
+msgstr "with Cocoa GUI."
+
+msgid "with (classic) GUI."
+msgstr "with (¥¯¥é¥·¥Ã¥¯) GUI."
+
+msgid "  Features included (+) or not (-):\n"
+msgstr "  ÂµÂ¡Ã‡Â½Â¤ÃŽÂ°Ã¬Ã÷ Ã­¸ú(+)/̵¸ú(-)\n"
+
+msgid "   system vimrc file: \""
+msgstr "      Â¥Â·Â¥Â¹Â¥Ã†Â¥Ã  vimrc: \""
+
+msgid "     user vimrc file: \""
+msgstr "        Â¥Ã¦Â¡Â¼Â¥Â¶ vimrc: \""
+
+msgid " 2nd user vimrc file: \""
+msgstr "     Ã‚è2¥æ¡¼¥¶ vimrc: \""
+
+msgid " 3rd user vimrc file: \""
+msgstr "     Ã‚è3¥æ¡¼¥¶ vimrc: \""
+
+msgid "      user exrc file: \""
+msgstr "         Â¥Ã¦Â¡Â¼Â¥Â¶ exrc: \""
+
+msgid "  2nd user exrc file: \""
+msgstr "      Ã‚è2¥æ¡¼¥¶ exrc: \""
+
+msgid "  system gvimrc file: \""
+msgstr "     Â¥Â·Â¥Â¹Â¥Ã†Â¥Ã  gvimrc: \""
+
+msgid "    user gvimrc file: \""
+msgstr "       Â¥Ã¦Â¡Â¼Â¥Â¶ gvimrc: \""
+
+msgid "2nd user gvimrc file: \""
+msgstr "    Ã‚è2¥æ¡¼¥¶ gvimrc: \""
+
+msgid "3rd user gvimrc file: \""
+msgstr "    Ã‚è3¥æ¡¼¥¶ gvimrc: \""
+
+msgid "    system menu file: \""
+msgstr "    Â¥Â·Â¥Â¹Â¥Ã†Â¥Ã Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼: \""
+
+msgid "  fall-back for $VIM: \""
+msgstr "       Â¾ÃŠÃŽÂ¬Â»Ã¾Â¤ÃŽ $VIM: \""
+
+msgid " f-b for $VIMRUNTIME: \""
+msgstr "¾Êά»þ¤Î $VIMRUNTIME: \""
+
+msgid "Compilation: "
+msgstr "¥³¥ó¥Ñ¥¤¥ë: "
+
+msgid "Compiler: "
+msgstr "¥³¥ó¥Ñ¥¤¥é: "
+
+msgid "Linking: "
+msgstr "¥ê¥ó¥¯: "
+
+msgid "  DEBUG BUILD"
+msgstr "¥Ç¥Ã¥Ã¥°¥Ó¥ë¥É"
+
+msgid "VIM - Vi IMproved"
+msgstr "VIM - Vi IMproved"
+
+msgid "version "
+msgstr "version "
+
+msgid "by Bram Moolenaar et al."
+msgstr "by Bram Moolenaar Â¾."
+
+msgid "Vim is open source and freely distributable"
+msgstr "Vim Â¤Ã¥ª¡¼¥×¥ó¥½¡¼¥¹¤Ç¤¢¤ê¼«Ã³¤ËÇÛÉÛ²Äǽ¤Ç¤¹"
+
+msgid "Help poor children in Uganda!"
+msgstr "¥¦¥¬¥ó¥À¤Î·Ã¤Þ¤ì¤Ê¤¤»Ò¶¡¤¿¤Ã¤Ë±ç½õ¤ò!"
+
+msgid "type  :help iccf<Enter>       for information "
+msgstr "¾ÜºÙ¤Ê¾ðÊó¤à          :help iccf<Enter>      "
+
+msgid "type  :q<Enter>               to exit         "
+msgstr "½ªÎ»¤¹¤ë¤Ë¤à          :q<Enter>              "
+
+msgid "type  :help<Enter>  or  <F1>  for on-line help"
+msgstr "¥ª¥ó¥é¥¤¥ó¥Ø¥ë¥×¤à    :help<Enter> Â¤Â« <F1>   "
+
+msgid "type  :help version7<Enter>   for version info"
+msgstr "¥á¼¥¸¥ç¥ó¾ðÊó¤à      :help version7<Enter>  "
+
+msgid "Running in Vi compatible mode"
+msgstr "Vi¸ß´¹¥â¡¼¥É¤ÇÆ°ºîÃæ"
+
+msgid "type  :set nocp<Enter>        for Vim defaults"
+msgstr "Vim¿ä¾©Ãäˤ¹¤ë¤Ë¤à   :set nocp<Enter>       "
+
+msgid "type  :help cp-default<Enter> for info on this"
+msgstr "¾ÜºÙ¤Ê¾ðÊó¤à          :help cp-default<Enter>"
+
+msgid "menu  Help->Orphans           for information    "
+msgstr "¾ÜºÙ¤Ã¥á¥Ë¥å¡¼¤Î Â¥Ã˜Â¥Ã«Â¥Ã—¢ª¸É»ù Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â²Â¼Â¤ÂµÂ¤Â¤   "
+
+msgid "Running modeless, typed text is inserted"
+msgstr "¥â¡¼¥É̵¤Ç¼Â¹ÔÃæ, Â¥Â¿Â¥Â¤Â¥Ã—¤·¤¿Ê¸»ú¤¬ÃÞÆþ¤µ¤ì¤Þ¤¹"
+
+msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
+msgstr "¥á¥Ë¥å¡¼¤Î ÃŠÃ”½¸¢ªÃ´ÂÎÀßÄꢪÃÞÆþ(½é¿´¼Ô)¥â¡¼¥ÉÀÚÂØ "
+
+msgid "                              for two modes      "
+msgstr "                              Â¤Ã‡Â¥Ã¢Â¡Â¼Â¥Ã‰Ã­¤Ë       "
+
+msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
+msgstr "¥á¥Ë¥å¡¼¤Î ÃŠÃ”½¸¢ªÃ´ÂÎÀßÄꢪVi¸ß´¹¥â¡¼¥ÉÀÚÂØ      "
+
+msgid "                              for Vim defaults   "
+msgstr "                              Â¤Ã‡Vim¤È¤·¤ÆÆ°ºî    "
+
+msgid "Sponsor Vim development!"
+msgstr "Vim¤Î³«È¯¤ò±þ±ç¤·¤Æ¤¯¤À¤µ¤¤!"
+
+msgid "Become a registered Vim user!"
+msgstr "Vim¤ÎÅÃÿ¥æ¡¼¥¶¤Ë¤Ê¤Ã¤Æ¤¯¤À¤µ¤¤!"
+
+msgid "type  :help sponsor<Enter>    for information "
+msgstr "¾ÜºÙ¤Ê¾ðÊó¤à          :help sponsor<Enter>   "
+
+msgid "type  :help register<Enter>   for information "
+msgstr "¾ÜºÙ¤Ê¾ðÊó¤à          :help register<Enter>  "
+
+msgid "menu  Help->Sponsor/Register  for information    "
+msgstr "¾ÜºÙ¤Ã¥á¥Ë¥å¡¼¤Î Â¥Ã˜Â¥Ã«Â¥Ã—¢ª¥¹¥Ã¥ó¥µ¡¼/Ã…Ãÿ Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â²Â¼Â¤ÂµÂ¤Â¤   "
+
+msgid "WARNING: Windows 95/98/ME detected"
+msgstr "   Â·Ã™Â¹Ã°: Windows 95/98/Me Â¤Ã²Â¸Â¡Â½Ã  "
+
+msgid "type  :help windows95<Enter>  for info on this"
+msgstr " Â¾ÃœÂºÃ™Â¤ÃŠÂ¾Ã°ÃŠÃ³Â¤Ã          :help windows95<Enter> "
+
+msgid "Already only one window"
+msgstr "´û¤Ë¥¦¥£¥ó¥É¥¦¤Ã1¤Ä¤·¤«¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E441: There is no preview window"
+msgstr "E441: Â¥Ã—¥ì¥Ó¥å¡¼¥¦¥£¥ó¥É¥¦¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E442: Can't split topleft and botright at the same time"
+msgstr "E442: ÂºÂ¸Â¾Ã¥Â¤ÃˆÂ±Â¦Â²Â¼Â¤Ã²Ã†Â±Â»Ã¾Â¤Ã‹ÃŠÂ¬Â³Ã¤Â¤Â¹Â¤Ã«Â¤Â³Â¤ÃˆÂ¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E443: Cannot rotate when another window is split"
+msgstr "E443: Ã‚¾¤Î¥¦¥£¥ó¥É¥¦¤¬Ê¬³ä¤µ¤ì¤Æ¤¤¤ë»þ¤Ë¤Ã½ç²ó¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E444: Cannot close last window"
+msgstr "E444: ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Â¦Â¥Â£Â¥Ã³Â¥Ã‰Â¥Â¦Â¤Ã²ÃŠÃ„¤¸¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: autocmd¥¦¥£¥ó¥É¥¦¤ÃÊĤ¸¤é¤ì¤Þ¤»¤ó"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: autocmd¥¦¥£¥ó¥É¥¦¤·¤«»Ä¤é¤Ê¤¤¤¿¤á¡¢¥¦¥£¥ó¥É¥¦¤ÃÊĤ¸¤é¤ì¤Þ¤»¤ó"
+
+msgid "E445: Other window contains changes"
+msgstr "E445: Ã‚¾¤Î¥¦¥£¥ó¥É¥¦¤Ë¤ÃÊѹ¹¤¬¤¢¤ê¤Þ¤¹"
+
+msgid "E446: No file name under cursor"
+msgstr "E446: Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤ÃŽÂ²Â¼Â¤Ã‹Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E447: Can't find file \"%s\" in path"
+msgstr "E447: path¤Ë¤à\"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "Edit with &multiple Vims"
+msgstr "Ê£¿ô¤ÎVim¤ÇÊÔ½¸¤¹¤ë (&M)"
+
+msgid "Edit with single &Vim"
+msgstr "1¤Ä¤ÎVim¤ÇÊÔ½¸¤¹¤ë (&V)"
+
+msgid "Diff with Vim"
+msgstr "Vim¤Çº¹Ê¬¤òɽ¼¨¤¹¤ë"
+
+msgid "Edit with &Vim"
+msgstr "Vim¤ÇÊÔ½¸¤¹¤ë (&V)"
+
+#. Now concatenate
+msgid "Edit with existing Vim - "
+msgstr "µ¯Æ°ºÑ¤ÎVim¤ÇÊÔ½¸¤¹¤ë - "
+
+msgid "Edits the selected file(s) with Vim"
+msgstr "êÂò¤·¤¿¥Õ¥¡¥¤¥ë¤òVim¤ÇÊÔ½¸¤¹¤ë"
+
+msgid "Error creating process: Check if gvim is in your path!"
+msgstr "¥×¥í¥»¥¹¤ÎºîÀ®¤Ë¼ºÇÔ: gvim¤¬´Ä¶­ÊÑ¿ôPATH¾å¤Ë¤¢¤ë¤«³Îǧ¤·¤Æ¤¯¤À¤µ¤¤!"
+
+msgid "gvimext.dll error"
+msgstr "gvimext.dll Â¥Â¨Â¥Ã©Â¡Â¼"
+
+msgid "Path length too long!"
+msgstr "¥Ñ¥¹¤¬Ä¹¤¹¤®¤Þ¤¹!"
+
+msgid "--No lines in buffer--"
+msgstr "--¥ååե¡¤Ë¹Ô¤¬¤¢¤ê¤Þ¤»¤ó--"
+
+#.
+#. * The error messages that can be shared are included here.
+#. * Excluded are errors that are only used once and debugging messages.
+#.
+msgid "E470: Command aborted"
+msgstr "E470: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬ÃƒÃ¦ÃƒÃ‡Â¤ÂµÂ¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "E471: Argument required"
+msgstr "E471: Â°ÃºÂ¿Ã´Â¤Â¬Ã‰Â¬ÃפǤ¹"
+
+msgid "E10: \\ should be followed by /, ? or &"
+msgstr "E10: \\ Â¤ÃŽÂ¸Ã¥Â¤Ã / Â¤Â« ? Â¤Â« & Â¤Ã‡Â¤ÃŠÂ¤Â±Â¤Ã¬Â¤Ã¤Ê¤ê¤Þ¤»¤ó"
+
+msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
+msgstr "E11: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¥Ã©Â¥Â¤Â¥Ã³Â¤Ã‡Â¤Ã̵¸ú¤Ç¤¹; <CR>¤Ç¼Â¹Ô, CTRL-C¤Ç¤ä¤á¤ë"
+
+msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
+msgstr ""
+"E12: Â¸Â½ÂºÃŸÂ¤ÃŽÂ¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã¤Â¥Â¿Â¥Â°Â¸Â¡ÂºÃ·Â¤Ã‡Â¤Ãexrc/vimrc¤Î¥³¥Þ¥ó¥É¤Ãµö²Ä¤µ¤ì¤Þ¤»¤ó"
+
+msgid "E171: Missing :endif"
+msgstr "E171: :endif Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E600: Missing :endtry"
+msgstr "E600: :endtry Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E170: Missing :endwhile"
+msgstr "E170: :endwhile Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E170: Missing :endfor"
+msgstr "E170: :endfor Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E588: :endwhile without :while"
+msgstr "E588: :while Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :endwhile Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E588: :endfor without :for"
+msgstr "E588: :endfor Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :for Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+
+msgid "E13: File exists (add ! to override)"
+msgstr "E13: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Ã‚¸ºß¤·¤Þ¤¹ (! Â¤Ã²Ã„ɲäǾå½ñ)"
+
+msgid "E472: Command failed"
+msgstr "E472: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "E234: Unknown fontset: %s"
+msgstr "E234: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¥Â»Â¥ÃƒÂ¥Ãˆ: %s"
+
+#, c-format
+msgid "E235: Unknown font: %s"
+msgstr "E235: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥Ã•Â¥Â©Â¥Ã³Â¥Ãˆ: %s"
+
+#, c-format
+msgid "E236: Font \"%s\" is not fixed-width"
+msgstr "E236: Â¥Ã•Â¥Â©Â¥Ã³Â¥Ãˆ \"%s\" Â¤Ã¸ÇÄêÉý¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E473: Internal error"
+msgstr "E473: Ã†Ã¢Ã‰Ã´Â¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹"
+
+msgid "Interrupted"
+msgstr "³ä¹þ¤Þ¤ì¤Þ¤·¤¿"
+
+msgid "E14: Invalid address"
+msgstr "E14: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Â¢Â¥Ã‰Â¥Ã¬Â¥Â¹Â¤Ã‡Â¤Â¹"
+
+msgid "E474: Invalid argument"
+msgstr "E474: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ°ÃºÂ¿Ã´Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "E475: Invalid argument: %s"
+msgstr "E475: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ°ÃºÂ¿Ã´Â¤Ã‡Â¤Â¹: %s"
+
+#, c-format
+msgid "E15: Invalid expression: %s"
+msgstr "E15: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¼Â°Â¤Ã‡Â¤Â¹: %s"
+
+msgid "E16: Invalid range"
+msgstr "E16: ÃŒÂµÂ¸ÃºÂ¤ÃŠÃˆÃ°Ã¤Ç¤¹"
+
+msgid "E476: Invalid command"
+msgstr "E476: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã‡Â¤Â¹"
+
+#, c-format
+msgid "E17: \"%s\" is a directory"
+msgstr "E17: \"%s\" Â¤Ã¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹"
+
+#, c-format
+msgid "E364: Library call failed for \"%s()\""
+msgstr "E364: \"%s\"() Â¤ÃŽÂ¥Ã©Â¥Â¤Â¥Ã–¥é¥ê¸Æ½Ã¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "E448: Could not load library function %s"
+msgstr "E448: Â¥Ã©Â¥Â¤Â¥Ã–¥é¥ê¤Î´Ø¿ô %s Â¤Ã²Â¥Ã­Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿"
+
+msgid "E19: Mark has invalid line number"
+msgstr "E19: Â¥ÃžÂ¡Â¼Â¥Â¯Â¤Ã‹ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¹Ã”Èֹ椬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤·¤¿"
+
+msgid "E20: Mark not set"
+msgstr "E20: Â¥ÃžÂ¡Â¼Â¥Â¯Â¤ÃÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E21: Cannot make changes, 'modifiable' is off"
+msgstr "E21: 'modifiable' Â¤Â¬Â¥ÂªÂ¥Ã•Â¤ÃŠÂ¤ÃŽÂ¤Ã‡, ÃŠÃ‘¹¹¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E22: Scripts nested too deep"
+msgstr "E22: Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È¤ÎÆþ¤ì»Ò¤¬¿¼²á¤®¤Þ¤¹"
+
+msgid "E23: No alternate file"
+msgstr "E23: Ã‰Ã»Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E24: No such abbreviation"
+msgstr "E24: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÃƒÂ»Â½ÃŒÃ†Ã¾ÃŽÃ¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E477: No ! allowed"
+msgstr "E477: ! Â¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E25: GUI cannot be used: Not enabled at compile time"
+msgstr "E25: GUI¤Ã»ÈÃÑÉÔ²Äǽ¤Ç¤¹: Â¥Â³Â¥Ã³Â¥Ã‘¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
+msgstr "E26: Â¥Ã˜Â¥Ã–¥é¥¤¸ì¤Ã»ÈÃÑÉÔ²Äǽ¤Ç¤¹: Â¥Â³Â¥Ã³Â¥Ã‘¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
+
+msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
+msgstr "E27: Â¥ÃšÂ¥Ã«Â¥Â·Â¥Â¢Â¸Ã¬Â¤Ã»ÈÃÑÉÔ²Äǽ¤Ç¤¹: Â¥Â³Â¥Ã³Â¥Ã‘¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
+
+msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
+msgstr "E800: Â¥Â¢Â¥Ã©Â¥Ã“¥¢¸ì¤Ã»ÈÃÑÉÔ²Äǽ¤Ç¤¹: Â¥Â³Â¥Ã³Â¥Ã‘¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
+
+#, c-format
+msgid "E28: No such highlight group name: %s"
+msgstr "E28: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÃŒÂ¾Â¤ÃŽÂ¥Ã¥¤¥é¥¤¥È¥°¥ë¡¼¥×¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+msgid "E29: No inserted text yet"
+msgstr "E29: Â¤ÃžÂ¤Ã€Â¥Ã†Â¥Â­Â¥Â¹Â¥ÃˆÂ¤Â¬ÃÞÆþ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E30: No previous command line"
+msgstr "E30: Â°ÃŠÃ°¤Ë¥³¥Þ¥ó¥É¹Ô¤¬¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E31: No such mapping"
+msgstr "E31: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÂ¥ÃžÂ¥ÃƒÂ¥Ã”¥ó¥°¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E479: No match"
+msgstr "E479: Â³ÂºÃ…ö¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E480: No match: %s"
+msgstr "E480: Â³ÂºÃ…ö¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+
+msgid "E32: No file name"
+msgstr "E32: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E33: No previous substitute regular expression"
+msgstr "E33: Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½ÃƒÃ–´¹¤¬¤Þ¤À¼Â¹Ô¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E34: No previous command"
+msgstr "E34: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬Â¤ÃžÂ¤Ã€Â¼Ã‚¹Ô¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E35: No previous regular expression"
+msgstr "E35: Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½Â¤Â¬Â¤ÃžÂ¤Ã€Â¼Ã‚¹Ô¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E481: No range allowed"
+msgstr "E481: ÃˆÃ°Ã»ØÄê¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E36: Not enough room"
+msgstr "E36: Â¥Â¦Â¥Â£Â¥Ã³Â¥Ã‰Â¥Â¦Â¤Ã‹Â½Â½ÃŠÂ¬Â¤ÃŠÂ¹Ã¢Â¤ÂµÂ¤Ã¢Â¤Â·Â¤Â¯Â¤ÃÉý¤¬¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E247: no registered server named \"%s\""
+msgstr "E247: %s Â¤ÃˆÂ¤Â¤Â¤Â¦ÃŒÂ¾Ã°¤ÎÅÃÿ¤µ¤ì¤¿¥µ¡¼¥Ã¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "E482: Can't create file %s"
+msgstr "E482: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s Â¤Ã²ÂºÃ®Ã€Â®Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E483: Can't get temp file name"
+msgstr "E483: Â°Ã¬Â»Ã¾Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃŒÂ¾Ã°¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E484: Can't open file %s"
+msgstr "E484: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+
+#, c-format
+msgid "E485: Can't read file %s"
+msgstr "E485: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E37: No write since last change (add ! to override)"
+msgstr "E37: ÂºÃ‡Â¸Ã¥Â¤ÃŽÃŠÃ‘¹¹¤¬Êø¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäÇÊѹ¹¤òÇË´þ)"
+
+msgid "E38: Null argument"
+msgstr "E38: Â°ÃºÂ¿Ã´Â¤Â¬Â¶ÃµÂ¤Ã‡Â¤Â¹"
+
+msgid "E39: Number expected"
+msgstr "E39: Â¿Ã´ÃƒÃ¤¬Ã׵ᤵ¤ì¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "E40: Can't open errorfile %s"
+msgstr "E40: Â¥Â¨Â¥Ã©Â¡Â¼Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E233: cannot open display"
+msgstr "E233: Â¥Ã‡Â¥Â£Â¥Â¹Â¥Ã—¥ì¥¤¤ò³«¤±¤Þ¤»¤ó"
+
+msgid "E41: Out of memory!"
+msgstr "E41: Â¥Ã¡Â¥Ã¢Â¥ÃªÂ¤Â¬Â¿Ã”¤­²Ì¤Æ¤Þ¤·¤¿!"
+
+msgid "Pattern not found"
+msgstr "¥Ñ¥¿¡¼¥ó¤Ã¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#, c-format
+msgid "E486: Pattern not found: %s"
+msgstr "E486: Â¥Ã‘¥¿¡¼¥ó¤Ã¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿: %s"
+
+msgid "E487: Argument must be positive"
+msgstr "E487: Â°ÃºÂ¿Ã´Â¤ÃÀµ¤ÎÃäǤʤ±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+
+msgid "E459: Cannot go back to previous directory"
+msgstr "E459: Ã°¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËÌá¤ì¤Þ¤»¤ó"
+
+msgid "E42: No Errors"
+msgstr "E42: Â¥Â¨Â¥Ã©Â¡Â¼Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E776: No location list"
+msgstr "E776: Â¾Ã¬Â½ÃªÂ¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "E43: Damaged match string"
+msgstr "E43: Â³ÂºÃ…öʸ»úÎó¤¬ÇË»¤·¤Æ¤¤¤Þ¤¹"
+
+msgid "E44: Corrupted regexp program"
+msgstr "E44: Ã‰Ã”Àµ¤ÊÀµµ¬É½¸½¥×¥í¥°¥é¥à¤Ç¤¹"
+
+msgid "E45: 'readonly' option is set (add ! to override)"
+msgstr "E45: 'readonly' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹ (! Â¤Ã²Ã„ɲäǾå½ñ¤­)"
+
+#, c-format
+msgid "E46: Cannot change read-only variable \"%s\""
+msgstr "E46: Ã†Ã‰Â¼Ã¨Ã€Ã¬ÃÑÊÑ¿ô \"%s\" Â¤Ã‹Â¤ÃÃäòÀßÄê¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: Â¥ÂµÂ¥Ã³Â¥Ã‰Â¥ÃœÂ¥ÃƒÂ¥Â¯Â¥Â¹Â¤Ã‡Â¤ÃÊÑ¿ô \"%s\" Â¤Ã‹ÃƒÃ¤òÀßÄê¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E47: Error while reading errorfile"
+msgstr "E47: Â¥Â¨Â¥Ã©Â¡Â¼Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃ†Ã‰Â¹Ã¾ÃƒÃ¦Â¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬ÃˆÂ¯Ã€Â¸Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "E48: Not allowed in sandbox"
+msgstr "E48: Â¥ÂµÂ¥Ã³Â¥Ã‰Â¥ÃœÂ¥ÃƒÂ¥Â¯Â¥Â¹Â¤Ã‡Â¤Ãµö¤µ¤ì¤Þ¤»¤ó"
+
+msgid "E523: Not allowed here"
+msgstr "E523: Â¤Â³Â¤Â³Â¤Ã‡Â¤Ãµö²Ä¤µ¤ì¤Þ¤»¤ó"
+
+msgid "E359: Screen mode setting not supported"
+msgstr "E359: Â¥Â¹Â¥Â¯Â¥ÃªÂ¡Â¼Â¥Ã³Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤ÃŽÃ€ÃŸÃ„ê¤Ë¤ÃÂñþ¤·¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E49: Invalid scroll size"
+msgstr "E49: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Â¹Â¥Â¯Â¥Ã­Â¡Â¼Â¥Ã«ÃŽÃŒÂ¤Ã‡Â¤Â¹"
+
+msgid "E91: 'shell' option is empty"
+msgstr "E91: 'shell' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬¶õ¤Ç¤¹"
+
+msgid "E255: Couldn't read in sign data!"
+msgstr "E255: sign Â¤ÃŽÂ¥Ã‡Â¡Â¼Â¥Â¿Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿"
+
+msgid "E72: Close error on swap file"
+msgstr "E72: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤Î¥¯¥í¡¼¥º»þ¥¨¥é¡¼¤Ç¤¹"
+
+msgid "E73: tag stack empty"
+msgstr "E73: Â¥Â¿Â¥Â°Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤Â¬Â¶ÃµÂ¤Ã‡Â¤Â¹"
+
+msgid "E74: Command too complex"
+msgstr "E74: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬ÃŠÂ£Â»Â¨Â²Ã¡Â¤Â®Â¤ÃžÂ¤Â¹"
+
+msgid "E75: Name too long"
+msgstr "E75: ÃŒÂ¾Ã°¤¬Ä¹²á¤®¤Þ¤¹"
+
+msgid "E76: Too many ["
+msgstr "E76: [ Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+msgid "E77: Too many file names"
+msgstr "E77: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+
+msgid "E488: Trailing characters"
+msgstr "E488: Ã¾Ê¬¤Êʸ»ú¤¬¸å¤í¤Ë¤¢¤ê¤Þ¤¹"
+
+msgid "E78: Unknown mark"
+msgstr "E78: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÃžÂ¡Â¼Â¥Â¯"
+
+msgid "E79: Cannot expand wildcards"
+msgstr "E79: Â¥Ã¯Â¥Â¤Â¥Ã«Â¥Ã‰Â¥Â«Â¡Â¼Â¥Ã‰Â¤Ã²Ã…¸³«¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
+msgstr "E591: 'winheight' Â¤Ã 'winminheight' Â¤Ã¨Â¤ÃªÂ¾Â®Â¤ÂµÂ¤Â¯Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
+msgstr "E592: 'winwidth' Â¤Ã 'winminwidth' Â¤Ã¨Â¤ÃªÂ¾Â®Â¤ÂµÂ¤Â¯Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "E80: Error while writing"
+msgstr "E80: Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼"
+
+msgid "Zero count"
+msgstr "¥¼¥í¥«¥¦¥ó¥È"
+
+msgid "E81: Using <SID> not in a script context"
+msgstr "E81: Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È°Ê³°¤Ç<SID>¤¬»È¤ï¤ì¤Þ¤·¤¿"
+
+msgid "E449: Invalid expression received"
+msgstr "E449: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¼Â°Â¤Ã²Â¼ÃµÂ¤Â±Â¼Ã¨Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+
+msgid "E463: Region is guarded, cannot modify"
+msgstr "E463: ÃŽÃŽÂ°Ã¨Â¤Â¬ÃŠÃ¸î¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç, ÃŠÃ‘¹¹¤Ç¤­¤Þ¤»¤ó"
+
+msgid "E744: NetBeans does not allow changes in read-only files"
+msgstr "E744: NetBeans Â¤ÃÆɹþÀìÃÑ¥Õ¥¡¥¤¥ë¤òÊѹ¹¤¹¤ë¤³¤È¤òµö¤·¤Þ¤»¤ó"
+
+#, c-format
+msgid "E685: Internal error: %s"
+msgstr "E685: Ã†Ã¢Ã‰Ã´Â¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹: %s"
+
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363: Â¥Ã‘¥¿¡¼¥ó¤¬ 'maxmempattern' Â°ÃŠÂ¾Ã¥Â¤ÃŽÂ¥Ã¡Â¥Ã¢Â¥ÃªÂ¤Ã²Â»ÃˆÃѤ·¤Þ¤¹"
+
+msgid "E749: empty buffer"
+msgstr "E749: Â¥Ã¥Ã¥Õ¥¡¤¬¶õ¤Ç¤¹"
+
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682: Â¸Â¡ÂºÃ·Â¥Ã‘¥¿¡¼¥ó¤«¶èÀڤ국¹æ¤¬ÉÔÀµ¤Ç¤¹"
+
+msgid "E139: File is loaded in another buffer"
+msgstr "E139: Ã†Â±Â¤Â¸ÃŒÂ¾Ã°¤Î¥Õ¥¡¥¤¥ë¤¬Â¾¤Î¥Ã¥Ã¥Õ¥¡¤ÇÆɹþ¤Þ¤ì¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764: Â¥ÂªÂ¥Ã—¥·¥ç¥ó '%s' Â¤ÃÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "E850: Invalid register name"
+msgstr "E850: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿ÃŒÂ¾Â¤Ã‡Â¤Â¹"
+
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "¾å¤Þ¤Ç¸¡º÷¤·¤¿¤Î¤Ç²¼¤ËÌá¤ê¤Þ¤¹"
+
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "²¼¤Þ¤Ç¸¡º÷¤·¤¿¤Î¤Ç¾å¤ËÌá¤ê¤Þ¤¹"
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "°Å¹æ¥­¡¼¤¬É¬ÃפǤ¹: \"%s\""
+
+msgid "empty keys are not allowed"
+msgstr "¶õ¤Î¥­¡¼¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+
+msgid "dictionary is locked"
+msgstr "¼­½ñ¤Ã¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+msgid "list is locked"
+msgstr "¥ê¥¹¥È¤Ã¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹"
+
+#, c-format
+msgid "failed to add key '%s' to dictionary"
+msgstr "¼­½ñ¤Ë¥­¡¼ '%s' Â¤Ã²Ã„ɲ乤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "index must be int or slice, not %s"
+msgstr "¥¤¥ó¥Ç¥Ã¥¯¥¹¤à%s Â¤Ã‡Â¤Ã¤Ê¤¯À°¿ô¤«¥¹¥é¥¤¥¹¤Ë¤·¤Æ¤¯¤À¤µ¤¤"
+
+#, c-format
+msgid "expected str() or unicode() instance, but got %s"
+msgstr "str() Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã unicode() Â¤ÃŽÂ¥Â¤Â¥Ã³Â¥Â¹Â¥Â¿Â¥Ã³Â¥Â¹Â¤Â¬Â´Ã¼Ã‚Ô¤µ¤ì¤Æ¤¤¤ë¤Î¤Ë %s Â¤Ã‡Â¤Â·Â¤Â¿"
+
+#, c-format
+msgid "expected bytes() or str() instance, but got %s"
+msgstr "bytes() Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã str() Â¤ÃŽÂ¥Â¤Â¥Ã³Â¥Â¹Â¥Â¿Â¥Ã³Â¥Â¹Â¤Â¬Â´Ã¼Ã‚Ô¤µ¤ì¤Æ¤¤¤ë¤Î¤Ë %s Â¤Ã‡Â¤Â·Â¤Â¿"
+
+#, c-format
+msgid ""
+"expected int(), long() or something supporting coercing to long(), but got %s"
+msgstr "long() Â¤Â«Â¤Â½Â¤Ã¬Â¤Ã˜ÃŠÃ‘´¹²Äǽ¤Ê¤â¤Î¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ë %s Â¤Ã‡Â¤Â·Â¤Â¿"
+
+#, c-format
+msgid "expected int() or something supporting coercing to int(), but got %s"
+msgstr "int() Â¤Â«Â¤Â½Â¤Ã¬Â¤Ã˜ÃŠÃ‘´¹²Äǽ¤Ê¤â¤Î¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ë %s Â¤Ã‡Â¤Â·Â¤Â¿"
+
+msgid "value is too large to fit into C int type"
+msgstr "C¸À¸ì¤Î int Â·Â¿Â¤ÃˆÂ¤Â·Â¤Ã†Â¤ÃÃä¬Â礭²á¤®¤Þ¤¹"
+
+msgid "value is too small to fit into C int type"
+msgstr "C¸À¸ì¤Î int Â·Â¿Â¤ÃˆÂ¤Â·Â¤Ã†Â¤ÃÃ䬾®¤µ²á¤®¤Þ¤¹"
+
+msgid "number must be greater then zero"
+msgstr "¿ôÃäà0 Â¤Ã¨Â¤ÃªÃ‚礭¤¯¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+
+msgid "number must be greater or equal to zero"
+msgstr "¿ôÃäà0 Â¤Â«Â¤Â½Â¤Ã¬Â°ÃŠÂ¾Ã¥Â¤Ã‡Â¤ÃŠÂ¤Â±Â¤Ã¬Â¤Ã¤Ê¤ê¤Þ¤»¤ó"
+
+msgid "can't delete OutputObject attributes"
+msgstr "OutputObject°À­¤ò¾Ã¤»¤Þ¤»¤ó"
+
+#, c-format
+msgid "invalid attribute: %s"
+msgstr "̵¸ú¤Ê°À­¤Ç¤¹: %s"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: I/O¥ª¥Ö¥¸¥§¥¯¥È¤Î½é´ü²½¥¨¥é¡¼"
+
+msgid "failed to change directory"
+msgstr "¼­½ñ¤ÎÊѹ¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got %s"
+msgstr "imp.find_module() Â¤Â¬ %s Â¤Ã²ÃŠÃ–¤·¤Þ¤·¤¿ (´üÂÔÃÃ: 2 Ã×ÃǤΥ¿¥×¥ë)"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
+msgstr "impl.find_module() Â¤Â¬ %d Ã×ÃǤΥ¿¥×¥ë¤òÊÖ¤·¤Þ¤·¤¿ (´üÂÔÃÃ: 2)"
+
+msgid "internal error: imp.find_module returned tuple with NULL"
+msgstr "ÆâÉô¥¨¥é¡¼: imp.find_module Â¤Â¬ NULL Â¤Ã²Â´ÃžÂ¤Ã Â¥Â¿Â¥Ã—¥ë¤òÊÖ¤·¤Þ¤·¤¿"
+
+msgid "cannot delete vim.Dictionary attributes"
+msgstr "vim.Dictionary°À­¤Ã¾Ã¤»¤Þ¤»¤ó"
+
+msgid "cannot modify fixed dictionary"
+msgstr "¸ÇÄꤵ¤ì¤¿¼­½ñ¤ÃÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "cannot set attribute %s"
+msgstr "°À­ %s Â¤ÃÀßÄê¤Ç¤­¤Þ¤»¤ó"
+
+msgid "hashtab changed during iteration"
+msgstr "¥¤¥Æ¥ì¡¼¥·¥ç¥óÃæ¤Ë hashtab Â¤Â¬ÃŠÃ‘¹¹¤µ¤ì¤Þ¤·¤¿"
+
+#, c-format
+msgid "expected sequence element of size 2, but got sequence of size %d"
+msgstr "¥·¡¼¥±¥ó¥¹¤ÎÃ×ÃÇ¿ô¤Ë¤à2 Â¤Â¬Â´Ã¼Ã‚Ô¤µ¤ì¤Æ¤¤¤Þ¤·¤¿¤¬ %d Â¤Ã‡Â¤Â·Â¤Â¿"
+
+msgid "list constructor does not accept keyword arguments"
+msgstr "¥ê¥¹¥È¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Ã¥­¡¼¥ï¡¼¥É°ú¿ô¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+msgid "list index out of range"
+msgstr "¥ê¥¹¥ÈÈðó°¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤¹"
+
+#. No more suitable format specifications in python-2.3
+#, c-format
+msgid "internal error: failed to get vim list item %d"
+msgstr "ÆâÉô¥¨¥é¡¼: vim¤Î¥ê¥¹¥ÈÃ×ÃÇ %d Â¤ÃŽÂ¼Ã¨Ã†Ã€Â¤Ã‹Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+
+msgid "failed to add item to list"
+msgstr "¥ê¥¹¥È¤Ø¤ÎÃ×ÃÇÄɲä˼ºÇÔ¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "internal error: no vim list item %d"
+msgstr "ÆâÉô¥¨¥é¡¼: vim¤Î¥ê¥¹¥ÈÃ×ÃÇ %d Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "internal error: failed to add item to list"
+msgstr "ÆâÉô¥¨¥é¡¼: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Ã˜Â¤ÃŽÃ×ÃÇÄɲä˼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "cannot delete vim.List attributes"
+msgstr "vim.List Ã‚°À­¤Ã¾Ã¤»¤Þ¤»¤ó"
+
+msgid "cannot modify fixed list"
+msgstr "¸ÇÄꤵ¤ì¤¿¥ê¥¹¥È¤ÃÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "unnamed function %s does not exist"
+msgstr "̵̾´Ø¿ô %s Â¤Ã¸ºß¤·¤Þ¤»¤ó"
+
+#, c-format
+msgid "function %s does not exist"
+msgstr "´Ø¿ô %s Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+
+msgid "function constructor does not accept keyword arguments"
+msgstr "´Ø¿ô¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Ã¥­¡¼¥ï¡¼¥É°ú¿ô¤ò¼õ¤±ÉÕ¤±¤Þ¤»¤ó"
+
+#, c-format
+msgid "failed to run function %s"
+msgstr "´Ø¿ô %s Â¤ÃŽÂ¼Ã‚¹Ô¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "unable to get option value"
+msgstr "¥ª¥×¥·¥ç¥ó¤ÎÃäüèÆÀ¤Ç¤­¤Þ¤»¤ó"
+
+msgid "internal error: unknown option type"
+msgstr "ÆâÉô¥¨¥é¡¼: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÂªÂ¥Ã—¥·¥ç¥ó·¿¤Ç¤¹"
+
+msgid "problem while switching windows"
+msgstr "¥¦¥£¥ó¥É¥¦¤òÀÚ´¹Ãæ¤ËÌäÂ꤬ȯÀ¸¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "unable to unset global option %s"
+msgstr "¥°¥í¡¼¥Ã¥ë¥ª¥×¥·¥ç¥ó %s Â¤ÃŽÃ€ÃŸÃ„ê²ò½ü¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "unable to unset option %s which does not have global value"
+msgstr "¥°¥í¡¼¥Ã¥ë¤ÊÃäÎ̵¤¤¥ª¥×¥·¥ç¥ó %s Â¤ÃŽÃ€ÃŸÃ„ê²ò½ü¤Ã¤Ç¤­¤Þ¤»¤ó"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "ºï½ü¤µ¤ì¤¿¥¿¥Ö¤ò»²¾È¤·¤è¤¦¤È¤·¤Þ¤·¤¿"
+
+msgid "no such tab page"
+msgstr "¤½¤Î¤è¤¦¤Ê¥¿¥Ö¥Ú¡¼¥¸¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "attempt to refer to deleted window"
+msgstr "ºï½ü¤µ¤ì¤¿¥¦¥£¥ó¥É¥¦¤ò»²¾È¤·¤è¤¦¤È¤·¤Þ¤·¤¿"
+
+msgid "readonly attribute: buffer"
+msgstr "ÆɹþÀìÃÑ°À­: Â¥Ã¥Ã¥Õ¥¡¡¼"
+
+msgid "cursor position outside buffer"
+msgstr "¥«¡¼¥½¥ë°ÌÃÖ¤¬¥Ã¥Ã¥Õ¥¡¤Î³°Â¦¤Ç¤¹"
+
+msgid "no such window"
+msgstr "¤½¤Î¤è¤¦¤Ê¥¦¥£¥ó¥É¥¦¤Ã¤¢¤ê¤Þ¤»¤ó"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "ºï½ü¤µ¤ì¤¿¥Ã¥Ã¥Õ¥¡¤ò»²¾È¤·¤è¤¦¤È¤·¤Þ¤·¤¿"
+
+msgid "failed to rename buffer"
+msgstr "¥ååե¡Ì¾¤ÎÊѹ¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "mark name must be a single character"
+msgstr "¥Þ¡¼¥¯Ì¾¤Ã1ʸ»ú¤Î¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È¤Ç¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+
+#, c-format
+msgid "expected vim.Buffer object, but got %s"
+msgstr "vim.Buffer¥ª¥Ö¥¸¥§¥¯¥È¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ë %s Â¤Ã‡Â¤Â·Â¤Â¿"
+
+#, c-format
+msgid "failed to switch to buffer %d"
+msgstr "»ØÄꤵ¤ì¤¿¥Ã¥Ã¥Õ¥¡ %d Â¤Ã˜Â¤ÃŽÃ€ÃšÂ¤ÃªÃ‚ؤ¨¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+#, c-format
+msgid "expected vim.Window object, but got %s"
+msgstr "vim.Window¥ª¥Ö¥¸¥§¥¯¥È¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ë %s Â¤Ã‡Â¤Â·Â¤Â¿"
+
+msgid "failed to find window in the current tab page"
+msgstr "¸½ºß¤Î¥¿¥Ö¤Ë¤Ã»ØÄꤵ¤ì¤¿¥¦¥£¥ó¥É¥¦¤¬¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "did not switch to the specified window"
+msgstr "»ØÄꤵ¤ì¤¿¥¦¥£¥ó¥É¥¦¤ËÀÚ¤êÂؤ¨¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#, c-format
+msgid "expected vim.TabPage object, but got %s"
+msgstr "vim.TabPage¥ª¥Ö¥¸¥§¥¯¥È¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ë %s Â¤Ã‡Â¤Â·Â¤Â¿"
+
+msgid "did not switch to the specified tab page"
+msgstr "»ØÄꤵ¤ì¤¿¥¿¥Ö¥Ú¡¼¥¸¤ËÀÚ¤êÂؤ¨¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "failed to run the code"
+msgstr "¥³¡¼¥É¤Î¼Â¹Ô¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Â¼Â°Ã‰Â¾Â²Ã¤Ãí¸ú¤Êpython¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤·¤Þ¤»¤ó¤Ç¤·¤¿"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: ÃŠÃ–¤µ¤ì¤¿python¥ª¥Ö¥¸¥§¥¯¥È¤òvim¤ÎÃäËÊÑ´¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+
+#, c-format
+msgid "unable to convert %s to vim dictionary"
+msgstr "%s vim¤Î¼­½ñ·¿¤ËÊÑ´¹¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "unable to convert %s to vim structure"
+msgstr "%s Â¤Ã²vim¤Î¹½Â¤ÂΤËÊÑ´¹¤Ç¤­¤Þ¤»¤ó"
+
+msgid "internal error: NULL reference passed"
+msgstr "ÆâÉô¥¨¥é¡¼: NULL»²¾È¤¬Å䵤ì¤Þ¤·¤¿"
+
+msgid "internal error: invalid value type"
+msgstr "ÆâÉô¥¨¥é¡¼: ÃŒÂµÂ¸ÃºÂ¤ÃŠÃƒÃ·¿¤Ç¤¹"
+
+msgid ""
+"Failed to set path hook: sys.path_hooks is not a list\n"
+"You should now do the following:\n"
+"- append vim.path_hook to sys.path_hooks\n"
+"- append vim.VIM_SPECIAL_PATH to sys.path\n"
+msgstr ""
+"¥Ñ¥¹¥Õ¥Ã¥¯¤ÎÀßÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: sys.path_hooks Â¤Â¬Â¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Ã‡Â¤Ã¤¢¤ê¤Þ¤»¤ó\n"
+"¤¹¤°¤Ë²¼µ­¤ò¼Â»Ü¤·¤Æ¤¯¤À¤µ¤¤:\n"
+"- vim.path_hooks Â¤Ã² sys.path_hooks Â¤Ã˜Ã„ɲÃ\n"
+"- vim.VIM_SPECIAL_PATH Â¤Ã² sys.path Â¤Ã˜Ã„ɲÃ\n"
+
+msgid ""
+"Failed to set path: sys.path is not a list\n"
+"You should now append vim.VIM_SPECIAL_PATH to sys.path"
+msgstr ""
+"¥Ñ¥¹¤ÎÀßÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: sys.path Â¤Â¬Â¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Ã‡Â¤Ã¤¢¤ê¤Þ¤»¤ó\n"
+"¤¹¤°¤Ë vim.VIM_SPECIAL_PATH Â¤Ã² sys.path Â¤Ã‹Ã„ɲ䷤Ƥ¯¤À¤µ¤¤"
index d24426f..a0ee4c2 100644 (file)
 # Do ":help uganda"  in Vim to read copying and usage conditions.
 # Do ":help credits" in Vim to see a list of people who contributed.
 #
-# MURAOKA Taro <koron.kaoriya@gmail.com>, 2001-8.
-# Last Change: 31-May-2008.
+# Last Change: 2013 Jul 06
+#
+# Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
+# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+#
+# Original translations.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 7.1\n"
+"Project-Id-Version: Vim 7.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-05-31 22:00+0900\n"
-"PO-Revision-Date: 2008-05-31 22:30+0900\n"
+"POT-Creation-Date: 2013-07-06 13:50+0900\n"
+"PO-Revision-Date: 2013-07-06 15:00+0900\n"
 "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
 "Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+"Language: Japanese\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=euc-jp\n"
+"Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() ãŒç©ºãƒ‘スワードã§å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸ"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: Blowfishæš—å·ã®ãƒ“ッグ/リトルエンディアンãŒé–“é•ã£ã¦ã„ã¾ã™"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256ã®ãƒ†ã‚¹ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Blowfishæš—å·ã®ãƒ†ã‚¹ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "[Location List]"
+msgstr "[場所リスト]"
+
+msgid "[Quickfix List]"
+msgstr "[Quickfixリスト]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: autocommandãŒã‚³ãƒžãƒ³ãƒ‰ã®åœæ­¢ã‚’引ãèµ·ã“ã—ã¾ã—ãŸ"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: Â¥Ã¥Ã¥Õ¥¡¤ò1¤Ä¤âºîÀ®¤Ç¤­¤Ê¤¤¤Î¤Ç, Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â¹..."
+msgstr "E82: ãƒãƒƒãƒ•ã‚¡ã‚’1ã¤ã‚‚作æˆã§ããªã„ã®ã§, çµ‚了ã—ã¾ã™..."
 
 msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: Â¥Ã¥Ã¥Õ¥¡¤òºîÀ®¤Ç¤­¤Ê¤¤¤Î¤Ç, Ã‚¾¤Î¤ò»ÈÃѤ·¤Þ¤¹..."
+msgstr "E83: ãƒãƒƒãƒ•ã‚¡ã‚’作æˆã§ããªã„ã®ã§, ä»–ã®ã‚’使用ã—ã¾ã™..."
 
 msgid "E515: No buffers were unloaded"
-msgstr "E515: Â²Ã²ÃŠÃ¼Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E515: è§£æ”¾ã•ã‚ŒãŸãƒãƒƒãƒ•ã‚¡ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E516: No buffers were deleted"
-msgstr "E516: ÂºÃ¯Â½Ã¼Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E516: å‰Šé™¤ã•ã‚ŒãŸãƒãƒƒãƒ•ã‚¡ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E517: No buffers were wiped out"
-msgstr "E517: Ã‡Ã‹Â´Ã¾Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E517: ç ´æ£„ã•ã‚ŒãŸãƒãƒƒãƒ•ã‚¡ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "1 buffer unloaded"
-msgstr "1 Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬²òÊü¤µ¤ì¤Þ¤·¤¿"
+msgstr "1 å€‹ã®ãƒãƒƒãƒ•ã‚¡ãŒè§£æ”¾ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%d buffers unloaded"
-msgstr "%d Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬²òÊü¤µ¤ì¤Þ¤·¤¿"
+msgstr "%d å€‹ã®ãƒãƒƒãƒ•ã‚¡ãŒè§£æ”¾ã•ã‚Œã¾ã—ãŸ"
 
 msgid "1 buffer deleted"
-msgstr "1 Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿"
+msgstr "1 å€‹ã®ãƒãƒƒãƒ•ã‚¡ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%d buffers deleted"
-msgstr "%d Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿"
+msgstr "%d å€‹ã®ãƒãƒƒãƒ•ã‚¡ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
 
 msgid "1 buffer wiped out"
-msgstr "1 Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬ÇË´þ¤µ¤ì¤Þ¤·¤¿"
+msgstr "1 å€‹ã®ãƒãƒƒãƒ•ã‚¡ãŒç ´æ£„ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%d buffers wiped out"
-msgstr "%d Â¸Ã„¤Î¥Ã¥Ã¥Õ¥¡¤¬ÇË´þ¤µ¤ì¤Þ¤·¤¿"
+msgstr "%d å€‹ã®ãƒãƒƒãƒ•ã‚¡ãŒç ´æ£„ã•ã‚Œã¾ã—ãŸ"
 
 msgid "E84: No modified buffer found"
-msgstr "E84: ÃŠÃ‘¹¹¤µ¤ì¤¿¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E84: å¤‰æ›´ã•ã‚ŒãŸãƒãƒƒãƒ•ã‚¡ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #. back where we started, didn't find anything.
 msgid "E85: There is no listed buffer"
-msgstr "E85: Â¥ÃªÂ¥Â¹Â¥ÃˆÃ‰Â½Â¼Â¨Â¤ÂµÂ¤Ã¬Â¤Ã«Â¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E85: ãƒªã‚¹ãƒˆè¡¨ç¤ºã•ã‚Œã‚‹ãƒãƒƒãƒ•ã‚¡ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E86: Buffer %ld does not exist"
-msgstr "E86: Â¥Ã¥Ã¥Õ¥¡ %ld Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E86: ãƒãƒƒãƒ•ã‚¡ %ld ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤ò±Û¤¨¤Æ°ÜÆ°¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E87: æœ€å¾Œã®ãƒãƒƒãƒ•ã‚¡ã‚’越ãˆã¦ç§»å‹•ã¯ã§ãã¾ã›ã‚“"
 
 msgid "E88: Cannot go before first buffer"
-msgstr "E88: ÂºÃ‡Â½Ã©Â¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤è¤êð¤Ø¤Ã°ÜÆ°¤Ç¤­¤Þ¤»¤ó"
+msgstr "E88: æœ€åˆã®ãƒãƒƒãƒ•ã‚¡ã‚ˆã‚Šå‰ã¸ã¯ç§»å‹•ã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "E89: No write since last change for buffer %ld (add ! to override)"
-msgstr "E89: Â¥Ã¥Ã¥Õ¥¡ %ld Â¤ÃŽÃŠÃ‘¹¹¤ÃÊø¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (! Â¤Ã‡ÃŠÃ‘¹¹¤òÇË´þ)"
+msgstr "E89: ãƒãƒƒãƒ•ã‚¡ %ld ã®å¤‰æ›´ã¯ä¿å­˜ã•ã‚Œã¦ã„ã¾ã›ã‚“ (! ã§å¤‰æ›´ã‚’破棄)"
 
 msgid "E90: Cannot unload last buffer"
-msgstr "E90: ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤Ã²òÊü¤Ç¤­¤Þ¤»¤ó"
+msgstr "E90: æœ€å¾Œã®ãƒãƒƒãƒ•ã‚¡ã¯è§£æ”¾ã§ãã¾ã›ã‚“"
 
 msgid "W14: Warning: List of file names overflow"
-msgstr "W14: Â·Ã™Â¹Ã°: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤ÃŽÂ¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Â¬Ã„¹²á¤®¤Þ¤¹"
+msgstr "W14: è­¦å‘Š: ãƒ•ã‚¡ã‚¤ãƒ«åã®ãƒªã‚¹ãƒˆãŒé•·éŽãŽã¾ã™"
 
 #, c-format
 msgid "E92: Buffer %ld not found"
-msgstr "E92: Â¥Ã¥Ã¥Õ¥¡ %ld Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "E92: ãƒãƒƒãƒ•ã‚¡ %ld ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E93: More than one match for %s"
-msgstr "E93: %s Â¤Ã‹ÃŠÂ£Â¿Ã´Â¤ÃŽÂ³ÂºÃ…ö¤¬¤¢¤ê¤Þ¤·¤¿"
+msgstr "E93: %s ã«è¤‡æ•°ã®è©²å½“ãŒã‚ã‚Šã¾ã—ãŸ"
 
 #, c-format
 msgid "E94: No matching buffer for %s"
-msgstr "E94: %s Â¤Ã‹Â³ÂºÃ…ö¤¹¤ë¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "E94: %s ã«è©²å½“ã™ã‚‹ãƒãƒƒãƒ•ã‚¡ã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
 
 #, c-format
 msgid "line %ld"
-msgstr "¹Ô %ld"
+msgstr "è¡Œ %ld"
 
 msgid "E95: Buffer with this name already exists"
-msgstr "E95: Â¤Â³Â¤ÃŽÃŒÂ¾Ã°¤Î¥Ã¥Ã¥Õ¥¡¤Ã´û¤Ë¤¢¤ê¤Þ¤¹"
+msgstr "E95: ã“ã®åå‰ã®ãƒãƒƒãƒ•ã‚¡ã¯æ—¢ã«ã‚ã‚Šã¾ã™"
 
 msgid " [Modified]"
-msgstr " [Êѹ¹¤¢¤ê]"
+msgstr " [変更ã‚ã‚Š]"
 
 msgid "[Not edited]"
-msgstr "[̤ÊÔ½¸]"
+msgstr "[未編集]"
 
 msgid "[New file]"
-msgstr "[¿·¥Õ¥¡¥¤¥ë]"
+msgstr "[新ファイル]"
 
 msgid "[Read errors]"
-msgstr "[Æɹþ¥¨¥é¡¼]"
+msgstr "[読込エラー]"
+
+msgid "[RO]"
+msgstr "[読専]"
 
 msgid "[readonly]"
-msgstr "[ÆɹþÀìÃÑ]"
+msgstr "[読込専用]"
 
 #, c-format
 msgid "1 line --%d%%--"
-msgstr "1 Â¹Ã” --%d%%--"
+msgstr "1 è¡Œ --%d%%--"
 
 #, c-format
 msgid "%ld lines --%d%%--"
-msgstr "%ld Â¹Ã” --%d%%--"
+msgstr "%ld è¡Œ --%d%%--"
 
 #, c-format
 msgid "line %ld of %ld --%d%%-- col "
-msgstr "¹Ô %ld (ôÂΠ%ld) --%d%%-- col "
+msgstr "è¡Œ %ld (全体 %ld) --%d%%-- col "
 
 msgid "[No Name]"
-msgstr "[̵̾]"
+msgstr "[ç„¡å]"
 
 #. must be a help buffer
 msgid "help"
-msgstr "¥Ø¥ë¥×"
+msgstr "ヘルプ"
 
 msgid "[Help]"
-msgstr "[¥Ø¥ë¥×]"
+msgstr "[ヘルプ]"
 
 msgid "[Preview]"
-msgstr "[¥×¥ì¥Ó¥å¡¼]"
+msgstr "[ã\83\97ã\83‹\83\93ã\83¥ã\83¼]"
 
 msgid "All"
-msgstr "ô¤Æ"
+msgstr "å…¨ã¦"
 
 msgid "Bot"
-msgstr "ËöÈø"
+msgstr "末尾"
 
 msgid "Top"
-msgstr "ÀèƬ"
+msgstr "先頭"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
 msgstr ""
 "\n"
-"# Â¥Ã¥Ã¥Õ¥¡¥ê¥¹¥È:\n"
+"# ãƒãƒƒãƒ•ã‚¡ãƒªã‚¹ãƒˆ:\n"
 
-msgid "[Location List]"
-msgstr "[¾ì½ê¥ê¥¹¥È]"
-
-msgid "[Quickfix List]"
-msgstr "[Quickfix¥ê¥¹¥È]"
+msgid "[Scratch]"
+msgstr "[下書ã]"
 
 msgid ""
 "\n"
 "--- Signs ---"
 msgstr ""
 "\n"
-"--- Â¥ÂµÂ¥Â¤Â¥Ã³ ---"
+"--- ã‚µã‚¤ãƒ³ ---"
 
 #, c-format
 msgid "Signs for %s:"
-msgstr "%s Â¤ÃŽÂ¥ÂµÂ¥Â¤Â¥Ã³:"
+msgstr "%s ã®ã‚µã‚¤ãƒ³:"
 
 #, c-format
 msgid "    line=%ld  id=%d  name=%s"
-msgstr "    Â¹Ã”=%ld  Â¼Â±ÃŠÃŒÂ»Ã’=%d  ÃŒÂ¾Ã°=%s"
+msgstr "    è¡Œ=%ld  è­˜åˆ¥å­=%d  åå‰=%s"
 
 #, c-format
 msgid "E96: Can not diff more than %ld buffers"
-msgstr "E96: %ld Â°ÃŠÂ¾Ã¥Â¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤Ãdiff¤Ç¤­¤Þ¤»¤ó"
+msgstr "E96: %ld ä»¥ä¸Šã®ãƒãƒƒãƒ•ã‚¡ã¯diffã§ãã¾ã›ã‚“"
+
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: ä¸€æ™‚ファイルã®èª­è¾¼ã‚‚ã—ãã¯æ›¸è¾¼ãŒã§ãã¾ã›ã‚“"
 
 msgid "E97: Cannot create diffs"
-msgstr "E97: ÂºÂ¹ÃŠÂ¬Â¤Ã²ÂºÃ®Ã€Â®Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³ "
+msgstr "E97: å·®åˆ†ã‚’作æˆã§ãã¾ã›ã‚“ "
 
 msgid "Patch file"
-msgstr "¥Ñ¥Ã¥Ã¥Õ¥¡¥¤¥ë"
+msgstr "パッãƒãƒ•ã‚¡ã‚¤ãƒ«"
+
+msgid "E816: Cannot read patch output"
+msgstr "E816: patchã®å‡ºåŠ›ã‚’読込ã‚ã¾ã›ã‚“"
 
 msgid "E98: Cannot read diff output"
-msgstr "E98: diff¤Î½ÃÎäòÆɹþ¤á¤Þ¤»¤ó"
+msgstr "E98: diffã®å‡ºåŠ›ã‚’読込ã‚ã¾ã›ã‚“"
 
 msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: Â¸Â½ÂºÃŸÂ¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤Ãº¹Ê¬¥â¡¼¥É¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E99: ç¾åœ¨ã®ãƒãƒƒãƒ•ã‚¡ã¯å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E793: ÂºÂ¹ÃŠÂ¬Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Â¢Â¤Ã«Ã‚¾¤Î¥Ã¥Ã¥Õ¥¡¤ÃÊѹ¹²Äǽ¤Ç¤¹"
+msgstr "E793: å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ã§ã‚ã‚‹ä»–ã®ãƒãƒƒãƒ•ã‚¡ã¯å¤‰æ›´å¯èƒ½ã§ã™"
 
 msgid "E100: No other buffer in diff mode"
-msgstr "E100: ÂºÂ¹ÃŠÂ¬Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Â¢Â¤Ã«Ã‚¾¤Î¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E100: å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ã§ã‚ã‚‹ä»–ã®ãƒãƒƒãƒ•ã‚¡ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E101: More than two buffers in diff mode, don't know which one to use"
 msgstr ""
-"E101: ÂºÂ¹ÃŠÂ¬Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤ÃŽÂ¥Ã¥Ã¥Õ¥¡¤¬2¸Ä°Ê¾å¤¢¤ë¤Î¤Ç¡¢¤É¤ì¤ò»È¤¦¤«ÆÃÄê¤Ç¤­¤Þ¤»¤ó"
+"E101: å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ã®ãƒãƒƒãƒ•ã‚¡ãŒ2個以上ã‚ã‚‹ã®ã§ã€ã©ã‚Œã‚’使ã†ã‹ç‰¹å®šã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: Â¥Ã¥Ã¥Õ¥¡ \"%s\" Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "E102: ãƒãƒƒãƒ•ã‚¡ \"%s\" ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: Â¥Ã¥Ã¥Õ¥¡ \"%s\" Â¤Ãº¹Ê¬¥â¡¼¥É¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E103: ãƒãƒƒãƒ•ã‚¡ \"%s\" ã¯å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E787: Buffer changed unexpectedly"
-msgstr "E787: Ã½´ü¤»¤º¥Ã¥Ã¥Õ¥¡¤¬Êѹ¹Êѹ¹¤µ¤ì¤Þ¤·¤¿"
+msgstr "E787: äºˆæœŸã›ãšãƒãƒƒãƒ•ã‚¡ãŒå¤‰æ›´å¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
 
 msgid "E104: Escape not allowed in digraph"
-msgstr "E104: Â¹Ã§Â»ÃºÂ¤Ã‹Escape¤Ã»ÈÃѤǤ­¤Þ¤»¤ó"
+msgstr "E104: åˆå­—ã«Escapeã¯ä½¿ç”¨ã§ãã¾ã›ã‚“"
 
 msgid "E544: Keymap file not found"
-msgstr "E544: Â¥Â­Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó"
+msgstr "E544: ã‚­ãƒ¼ãƒžãƒƒãƒ—ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: :source Â¤Ã‡Â¼Ã¨Â¹Ã¾Â¤Ã Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â°ÃŠÂ³Â°Â¤Ã‡Â¤Ã :loadkeymap Â¤Ã²Â»ÃˆÂ¤Â¨Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E105: :source ã§å–込むファイル以外ã§ã¯ :loadkeymap ã‚’使ãˆã¾ã›ã‚“"
 
 msgid "E791: Empty keymap entry"
-msgstr "E791: Â¶ÃµÂ¤ÃŽÂ¥Â­Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥Ã—¥¨¥ó¥È¥ê"
+msgstr "E791: ç©ºã®ã‚­ãƒ¼ãƒžãƒƒãƒ—エントリ"
 
 msgid " Keyword completion (^N^P)"
-msgstr " Â¥Â­Â¡Â¼Â¥Ã¯Â¡Â¼Â¥Ã‰ÃŠÃ¤Â´Â° (^N^P)"
+msgstr " ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰è£œå®Œ (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
 msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " ^X Â¥Ã¢Â¡Â¼Â¥Ã‰ (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " ^X ãƒ¢ãƒ¼ãƒ‰ (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
-msgstr " Â¹Ã”(ôÂÎ)Êä´° (^L^N^P)"
+msgstr " è¡Œ(全体)補完 (^L^N^P)"
 
 msgid " File name completion (^F^N^P)"
-msgstr "¥Õ¥¡¥¤¥ë̾Êä´° (^F^N^P)"
+msgstr "ファイルå補完 (^F^N^P)"
 
 msgid " Tag completion (^]^N^P)"
-msgstr " Â¥Â¿Â¥Â°ÃŠÃ¤Â´Â° (^]^N^P)"
+msgstr " ã‚¿ã‚°è£œå®Œ (^]^N^P)"
 
 msgid " Path pattern completion (^N^P)"
-msgstr " Â¥Ã‘¥¹¥Ñ¥¿¡¼¥óÊä´° (^N^P)"
+msgstr " ãƒ‘スパターン補完 (^N^P)"
 
 msgid " Definition completion (^D^N^P)"
-msgstr " Ã„êµÃÊä´° (^D^N^P)"
+msgstr " å®šç¾©è£œå®Œ (^D^N^P)"
 
 msgid " Dictionary completion (^K^N^P)"
-msgstr " Â¼Â­Â½Ã±ÃŠÃ¤Â´Â° (^K^N^P)"
+msgstr " è¾žæ›¸è£œå®Œ (^K^N^P)"
 
 msgid " Thesaurus completion (^T^N^P)"
-msgstr " Â¥Â·Â¥Â½Â¡Â¼Â¥Ã©Â¥Â¹ÃŠÃ¤Â´Â° (^T^N^P)"
+msgstr " ã‚·ã‚½ãƒ¼ãƒ©ã‚¹è£œå®Œ (^T^N^P)"
 
 msgid " Command-line completion (^V^N^P)"
-msgstr " Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¥Ã©Â¥Â¤Â¥Ã³ÃŠÃ¤Â´Â° (^V^N^P)"
+msgstr " ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³è£œå®Œ (^V^N^P)"
 
 msgid " User defined completion (^U^N^P)"
-msgstr " Â¥Ã¦Â¡Â¼Â¥Â¶Ã„êµÃÊä´° (^U^N^P)"
+msgstr " ãƒ¦ãƒ¼ã‚¶å®šç¾©è£œå®Œ (^U^N^P)"
 
 msgid " Omni completion (^O^N^P)"
-msgstr " Â¥ÂªÂ¥Ã Â¥Ã‹ÃŠÃ¤Â´Â° (^O^N^P)"
+msgstr " ã‚ªãƒ ãƒ‹è£œå®Œ (^O^N^P)"
 
 msgid " Spelling suggestion (s^N^P)"
-msgstr " Ã„֤꽤Àµ¸õÊä (s^N^P)"
+msgstr " ç¶´ã‚Šä¿®æ­£å€™è£œ (s^N^P)"
 
 msgid " Keyword Local completion (^N^P)"
-msgstr " Â¶Ã‰Â½ÃªÂ¥Â­Â¡Â¼Â¥Ã¯Â¡Â¼Â¥Ã‰ÃŠÃ¤Â´Â° (^N^P)"
+msgstr " å±€æ‰€ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰è£œå®Œ (^N^P)"
 
 msgid "Hit end of paragraph"
-msgstr "ÃÊÃî¤ÎºÇ¸å¤Ë¥Ò¥Ã¥È"
+msgstr "段è½ã®æœ€å¾Œã«ãƒ’ット"
+
+msgid "E839: Completion function changed window"
+msgstr "E839: è£œé–“関数ãŒã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’変更ã—ã¾ã—ãŸ"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: è£œå®Œé–¢æ•°ãŒãƒ†ã‚­ã‚¹ãƒˆã‚’削除ã—ã¾ã—ãŸ"
 
 msgid "'dictionary' option is empty"
-msgstr "'dictionary' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬¶õ¤Ç¤¹"
+msgstr "'dictionary' ã‚ªãƒ—ションãŒç©ºã§ã™"
 
 msgid "'thesaurus' option is empty"
-msgstr "'thesaurus' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬¶õ¤Ç¤¹"
+msgstr "'thesaurus' ã‚ªãƒ—ションãŒç©ºã§ã™"
 
 #, c-format
 msgid "Scanning dictionary: %s"
-msgstr "¼­½ñ¤ò¥¹¥­¥ã¥óÃæ: %s"
+msgstr "辞書をスキャン中: %s"
 
 msgid " (insert) Scroll (^E/^Y)"
-msgstr " (ÃÞÆþ) Â¥Â¹Â¥Â¯Â¥Ã­Â¡Â¼Â¥Ã«(^E/^Y)"
+msgstr " (挿入) ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«(^E/^Y)"
 
 msgid " (replace) Scroll (^E/^Y)"
-msgstr " (ÃÖ´¹) Â¥Â¹Â¥Â¯Â¥Ã­Â¡Â¼Â¥Ã« (^E/^Y)"
+msgstr " (ç½®æ›) ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ« (^E/^Y)"
 
 #, c-format
 msgid "Scanning: %s"
-msgstr "¥¹¥­¥ã¥óÃæ: %s"
+msgstr "スキャン中: %s"
 
-#, c-format
 msgid "Scanning tags."
-msgstr "¥¿¥°¤ò¥¹¥­¥ã¥óÃæ."
+msgstr "タグをスキャン中."
 
 msgid " Adding"
-msgstr " Ã„ɲÃÃæ"
+msgstr " è¿½åŠ ä¸­"
 
 #. showmode might reset the internal line pointers, so it must
 #. * be called before line = ml_get(), or when this address is no
 #. * longer needed.  -- Acevedo.
 #.
 msgid "-- Searching..."
-msgstr "-- Â¸Â¡ÂºÃ·ÃƒÃ¦..."
+msgstr "-- æ¤œç´¢ä¸­..."
 
 msgid "Back at original"
-msgstr "»Ã¤á¤ËÌá¤ë"
+msgstr "始ã‚ã«æˆ»ã‚‹"
 
 msgid "Word from other line"
-msgstr "¾¤Î¹Ô¤Îñ¸ì"
+msgstr "ä»–ã®è¡Œã®å˜èªž"
 
 msgid "The only match"
-msgstr "ã°ì¤Î³ºÅö"
+msgstr "唯一ã®è©²å½“"
 
 #, c-format
 msgid "match %d of %d"
-msgstr "%d ÃˆÃ–ÌܤγºÅö (ô³ºÅö %d Â¸Ã„Ãæ)"
+msgstr "%d ç•ªç›®ã®è©²å½“ (全該当 %d å€‹ä¸­)"
 
 #, c-format
 msgid "match %d"
-msgstr "%d ÃˆÃ–ÌܤγºÅö"
+msgstr "%d ç•ªç›®ã®è©²å½“"
 
 msgid "E18: Unexpected characters in :let"
-msgstr "E18: Ã½´ü¤»¤Ìʸ»ú¤¬ :let Â¤Ã‹Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "E18: äºˆæœŸã›ã¬æ–‡å­—㌠:let ã«ã‚ã‚Šã¾ã—ãŸ"
 
 #, c-format
 msgid "E684: list index out of range: %ld"
-msgstr "E684: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ¤ÃŽÂ¥Â¤Â¥Ã³Â¥Ã‡Â¥ÃƒÂ¥Â¯Â¥Â¹Â¤Â¬ÃˆÃ°Ã³°¤Ç¤¹: %ld"
+msgstr "E684: ãƒªã‚¹ãƒˆã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒç¯„囲外ã§ã™: %ld"
 
 #, c-format
 msgid "E121: Undefined variable: %s"
-msgstr "E121: ÃŒÂ¤Ã„êµÃ¤ÎÊÑ¿ô¤Ç¤¹: %s"
+msgstr "E121: æœªå®šç¾©ã®å¤‰æ•°ã§ã™: %s"
 
 msgid "E111: Missing ']'"
-msgstr "E111: ']' Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "E111: ']' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E686: Argument of %s must be a List"
-msgstr "E686: %s Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Ã¥ê¥¹¥È·¿¤Ç¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+msgstr "E686: %s ã®å¼•æ•°ã¯ãƒªã‚¹ãƒˆåž‹ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: %s Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Ã¥ê¥¹¥È·¿¤Þ¤¿¤Ã¼­½ñ·¿¤Ç¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+msgstr "E712: %s ã®å¼•æ•°ã¯ãƒªã‚¹ãƒˆåž‹ã¾ãŸã¯è¾žæ›¸åž‹ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
 
 msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â¶ÃµÂ¤ÃŽÂ¥Â­Â¡Â¼Â¤Ã²Â»ÃˆÂ¤Â¦Â¤Â³Â¤ÃˆÂ¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E713: è¾žæ›¸åž‹ã«ç©ºã®ã‚­ãƒ¼ã‚’使ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“"
 
 msgid "E714: List required"
-msgstr "E714: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Â¬Ã‰Â¬ÃפǤ¹"
+msgstr "E714: ãƒªã‚¹ãƒˆåž‹ãŒå¿…è¦ã§ã™"
 
 msgid "E715: Dictionary required"
-msgstr "E715: Â¼Â­Â½Ã±Â·Â¿Â¤Â¬Ã‰Â¬ÃפǤ¹"
+msgstr "E715: è¾žæ›¸åž‹ãŒå¿…è¦ã§ã™"
 
 #, c-format
 msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Â´Ã˜Â¿Ã´Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Ã‚¿²á¤®¤Þ¤¹: %s"
+msgstr "E118: é–¢æ•°ã®å¼•æ•°ãŒå¤šéŽãŽã¾ã™: %s"
 
 #, c-format
 msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â¥Â­Â¡Â¼Â¤Â¬Ã‚¸ºß¤·¤Þ¤»¤ó: %s"
+msgstr "E716: è¾žæ›¸åž‹ã«ã‚­ãƒ¼ãŒå­˜åœ¨ã—ã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: Â´Ã˜Â¿Ã´ %s Â¤ÃÄêµÃºÑ¤Ç¤¹, ÂºÃ†Ã„êµÃ¤¹¤ë¤Ë¤à! Â¤Ã²Ã„ɲ䷤Ƥ¯¤À¤µ¤¤"
+msgstr "E122: é–¢æ•° %s ã¯å®šç¾©æ¸ˆã§ã™, å†å®šç¾©ã™ã‚‹ã«ã¯ ! ã‚’追加ã—ã¦ãã ã•ã„"
 
 msgid "E717: Dictionary entry already exists"
-msgstr "E717: Â¼Â­Â½Ã±Â·Â¿Ã†Ã¢Â¤Ã‹Â¥Â¨Â¥Ã³Â¥ÃˆÂ¥ÃªÂ¤Â¬Â´Ã»Â¤Ã‹Ã‚¸ºß¤·¤Þ¤¹"
+msgstr "E717: è¾žæ›¸åž‹å†…ã«ã‚¨ãƒ³ãƒˆãƒªãŒæ—¢ã«å­˜åœ¨ã—ã¾ã™"
 
 msgid "E718: Funcref required"
-msgstr "E718: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Â¬Ã׵ᤵ¤ì¤Þ¤¹"
+msgstr "E718: é–¢æ•°å‚照型ãŒè¦æ±‚ã•ã‚Œã¾ã™"
 
 msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: [:] Â¤Ã²Â¼Â­Â½Ã±Â·Â¿Â¤ÃˆÃȤ߹ç¤ï¤»¤Æ¤Ã»È¤¨¤Þ¤»¤ó"
+msgstr "E719: [:] ã‚’辞書型ã¨çµ„ã¿åˆã‚ã›ã¦ã¯ä½¿ãˆã¾ã›ã‚“"
 
 #, c-format
 msgid "E734: Wrong variable type for %s="
-msgstr "E734: Â°Ã›Â¤ÃŠÂ¤ÃƒÂ¤Â¿Â·Â¿Â¤ÃŽÃŠÃ‘¿ô¤Ç¤¹ %s="
+msgstr "E734: ç•°ãªã£ãŸåž‹ã®å¤‰æ•°ã§ã™ %s="
 
 #, c-format
 msgid "E130: Unknown function: %s"
-msgstr "E130: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ´Ã˜Â¿Ã´Â¤Ã‡Â¤Â¹: %s"
+msgstr "E130: æœªçŸ¥ã®é–¢æ•°ã§ã™: %s"
 
 #, c-format
 msgid "E461: Illegal variable name: %s"
-msgstr "E461: Ã‰Ã”Àµ¤ÊÊÑ¿ô̾¤Ç¤¹: %s"
+msgstr "E461: ä¸æ­£ãªå¤‰æ•°åã§ã™: %s"
+
+msgid "E806: using Float as a String"
+msgstr "E806: æµ®å‹•å°æ•°ç‚¹æ•°ã‚’文字列ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
 
 msgid "E687: Less targets than List items"
-msgstr "E687: Â¥Â¿Â¡Â¼Â¥Â²Â¥ÃƒÂ¥ÃˆÂ¤Â¬Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Ã†Ã¢Â¤ÃŽÃ×ÃǤè¤ê¤â¾¯¤Ê¤¤¤Ç¤¹"
+msgstr "E687: ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãŒãƒªã‚¹ãƒˆåž‹å†…ã®è¦ç´ ã‚ˆã‚Šã‚‚å°‘ãªã„ã§ã™"
 
 msgid "E688: More targets than List items"
-msgstr "E688: Â¥Â¿Â¡Â¼Â¥Â²Â¥ÃƒÂ¥ÃˆÂ¤Â¬Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Ã†Ã¢Â¤ÃŽÃ×ÃǤè¤ê¤â¿¤¤¤Ç¤¹"
+msgstr "E688: ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãŒãƒªã‚¹ãƒˆåž‹å†…ã®è¦ç´ ã‚ˆã‚Šã‚‚多ã„ã§ã™"
 
 msgid "Double ; in list of variables"
-msgstr "¥ê¥¹¥È·¿¤ÎÃäË2¤Ä°Ê¾å¤Î ; Â¤Â¬Â¸Â¡Â½Ã¤µ¤ì¤Þ¤·¤¿"
+msgstr "リスト型ã®å€¤ã«2ã¤ä»¥ä¸Šã® ; ãŒæ¤œå‡ºã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "E738: Can't list variables for %s"
-msgstr "E738: %s Â¤ÃŽÃƒÃ¤ò°ìÃ÷ɽ¼¨¤Ç¤­¤Þ¤»¤ó"
+msgstr "E738: %s ã®å€¤ã‚’一覧表示ã§ãã¾ã›ã‚“"
 
 msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤ÃˆÂ¼Â­Â½Ã±Â·Â¿Â°ÃŠÂ³Â°Â¤Ã¥¤¥ó¥Ç¥Ã¥¯¥¹»ØÄê¤Ç¤­¤Þ¤»¤ó"
+msgstr "E689: ãƒªã‚¹ãƒˆåž‹ã¨è¾žæ›¸åž‹ä»¥å¤–ã¯ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹æŒ‡å®šã§ãã¾ã›ã‚“"
 
 msgid "E708: [:] must come last"
-msgstr "E708: [:] Â¤ÃºÇ¸å¤Ç¤Ê¤±¤ì¤Ã¤¤¤±¤Þ¤»¤ó"
+msgstr "E708: [:] ã¯æœ€å¾Œã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
 
 msgid "E709: [:] requires a List value"
-msgstr "E709: [:] Â¤Ã‹Â¤Ã¥ê¥¹¥È·¿¤ÎÃä¬É¬ÃפǤ¹"
+msgstr "E709: [:] ã«ã¯ãƒªã‚¹ãƒˆåž‹ã®å€¤ãŒå¿…è¦ã§ã™"
 
 msgid "E710: List value has more items than target"
-msgstr "E710: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿ÃŠÃ‘¿ô¤Ë¥¿¡¼¥²¥Ã¥È¤è¤ê¤â¿¤¤Ã×ÃǤ¬¤¢¤ê¤Þ¤¹"
+msgstr "E710: ãƒªã‚¹ãƒˆåž‹å¤‰æ•°ã«ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚ˆã‚Šã‚‚多ã„è¦ç´ ãŒã‚ã‚Šã¾ã™"
 
 msgid "E711: List value has not enough items"
-msgstr "E711: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿ÃŠÃ‘¿ô¤Ë½½Ê¬¤Ê¿ô¤ÎÃ×ÃǤ¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E711: ãƒªã‚¹ãƒˆåž‹å¤‰æ•°ã«å分ãªæ•°ã®è¦ç´ ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #
 msgid "E690: Missing \"in\" after :for"
-msgstr "E690: :for Â¤ÃŽÂ¸Ã¥Â¤Ã‹ \"in\" Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E690: :for ã®å¾Œã« \"in\" ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
-msgstr "E107: Â¥Â«Â¥ÃƒÂ¥Â³ '(' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E107: ã‚«ãƒƒã‚³ '(' ãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E108: No such variable: \"%s\""
-msgstr "E108: Â¤Â½Â¤ÃŽÃŠÃ‘¿ô¤Ã¤¢¤ê¤Þ¤»¤ó: \"%s\""
+msgstr "E108: ãã®å¤‰æ•°ã¯ã‚ã‚Šã¾ã›ã‚“: \"%s\""
 
 msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: (¥¢¥ó¥Ã)¥í¥Ã¥¯¤¹¤ë¤Ë¤ÃÊÑ¿ô¤ÎÆþ¤ì»Ò¤¬¿¼²á¤®¤Þ¤¹"
+msgstr "E743: (アン)ロックã™ã‚‹ã«ã¯å¤‰æ•°ã®å…¥ã‚Œå­ãŒæ·±éŽãŽã¾ã™"
 
 msgid "E109: Missing ':' after '?'"
-msgstr "E109: '?' Â¤ÃŽÂ¸Ã¥Â¤Ã‹ ':' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E109: '?' ã®å¾Œã« ':' ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E691: Can only compare List with List"
-msgstr "E691: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Ã¥ê¥¹¥È·¿¤È¤·¤«Èæ³Ó¤Ç¤­¤Þ¤»¤ó"
+msgstr "E691: ãƒªã‚¹ãƒˆåž‹ã¯ãƒªã‚¹ãƒˆåž‹ã¨ã—ã‹æ¯”較ã§ãã¾ã›ã‚“"
 
 msgid "E692: Invalid operation for Lists"
-msgstr "E692: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Ã‹Â¤Ã̵¸ú¤ÊÃàºî¤Ç¤¹"
+msgstr "E692: ãƒªã‚¹ãƒˆåž‹ã«ã¯ç„¡åŠ¹ãªæ“作ã§ã™"
 
 msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: Â¼Â­Â½Ã±Â·Â¿Â¤Ã¼­½ñ·¿¤È¤·¤«Èæ³Ó¤Ç¤­¤Þ¤»¤ó"
+msgstr "E735: è¾žæ›¸åž‹ã¯è¾žæ›¸åž‹ã¨ã—ã‹æ¯”較ã§ãã¾ã›ã‚“"
 
 msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â¤Ã̵¸ú¤ÊÃàºî¤Ç¤¹"
+msgstr "E736: è¾žæ›¸åž‹ã«ã¯ç„¡åŠ¹ãªæ“作ã§ã™"
 
 msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Ã´Ø¿ô»²¾È·¿¤È¤·¤«Èæ³Ó¤Ç¤­¤Þ¤»¤ó"
+msgstr "E693: é–¢æ•°å‚照型ã¯é–¢æ•°å‚照型ã¨ã—ã‹æ¯”較ã§ãã¾ã›ã‚“"
 
 msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Ã‹Â¤Ã̵¸ú¤ÊÃàºî¤Ç¤¹"
+msgstr "E694: é–¢æ•°å‚照型ã«ã¯ç„¡åŠ¹ãªæ“作ã§ã™"
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: '%' ã‚’浮動å°æ•°ç‚¹æ•°ã¨çµ„ã¿åˆã‚ã›ã¦ã¯ä½¿ãˆã¾ã›ã‚“"
 
 msgid "E110: Missing ')'"
-msgstr "E110: ')' Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "E110: ')' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "E695: Cannot index a Funcref"
-msgstr "E695: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Ã¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤­¤Þ¤»¤ó"
+msgstr "E695: é–¢æ•°å‚照型ã¯ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "E112: Option name missing: %s"
-msgstr "E112: Â¥ÂªÂ¥Ã—¥·¥ç¥ó̾¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E112: ã‚ªãƒ—ションåãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E113: Unknown option: %s"
-msgstr "E113: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ç¤¹: %s"
+msgstr "E113: æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™: %s"
 
 #, c-format
 msgid "E114: Missing quote: %s"
-msgstr "E114: Â°ÃºÃÑÉä (\") Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E114: å¼•ç”¨ç¬¦ (\") ãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E115: Missing quote: %s"
-msgstr "E115: Â°ÃºÃÑÉä (') Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E115: å¼•ç”¨ç¬¦ (') ãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E696: Missing comma in List: %s"
-msgstr "E696: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Ã‹Â¥Â«Â¥Ã³Â¥ÃžÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E696: ãƒªã‚¹ãƒˆåž‹ã«ã‚«ãƒ³ãƒžãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E697: Missing end of List ']': %s"
-msgstr "E697: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤ÃŽÂºÃ‡Â¸Ã¥Â¤Ã‹ ']' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E697: ãƒªã‚¹ãƒˆåž‹ã®æœ€å¾Œã« ']' ãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â¥Â³Â¥Ã­Â¥Ã³Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E720: è¾žæ›¸åž‹ã«ã‚³ãƒ­ãƒ³ãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â½Ã…Ê£¥­¡¼¤¬¤¢¤ê¤Þ¤¹: \"%s\""
+msgstr "E721: è¾žæ›¸åž‹ã«é‡è¤‡ã‚­ãƒ¼ãŒã‚ã‚Šã¾ã™: \"%s\""
 
 #, c-format
 msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Â¼Â­Â½Ã±Â·Â¿Â¤Ã‹Â¥Â«Â¥Ã³Â¥ÃžÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E722: è¾žæ›¸åž‹ã«ã‚«ãƒ³ãƒžãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Â¼Â­Â½Ã±Â·Â¿Â¤ÃŽÂºÃ‡Â¸Ã¥Â¤Ã‹ '}' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E723: è¾žæ›¸åž‹ã®æœ€å¾Œã« '}' ãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 msgid "E724: variable nested too deep for displaying"
-msgstr "E724: Ã‰Â½Â¼Â¨Â¤Â¹Â¤Ã«Â¤Ã‹Â¤ÃÊÑ¿ô¤ÎÆþ¤ì»Ò¤¬¿¼²á¤®¤Þ¤¹"
+msgstr "E724: è¡¨ç¤ºã™ã‚‹ã«ã¯å¤‰æ•°ã®å…¥ã‚Œå­ãŒæ·±éŽãŽã¾ã™"
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: é–¢æ•°ã®å¼•æ•°ãŒå¤šéŽãŽã¾ã™: %s"
+
+#, c-format
+msgid "E116: Invalid arguments for function %s"
+msgstr "E116: é–¢æ•°ã®ç„¡åŠ¹ãªå¼•æ•°ã§ã™: %s"
 
 #, c-format
 msgid "E117: Unknown function: %s"
-msgstr "E117: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ´Ã˜Â¿Ã´Â¤Ã‡Â¤Â¹: %s"
+msgstr "E117: æœªçŸ¥ã®é–¢æ•°ã§ã™: %s"
 
 #, c-format
 msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: Â´Ã˜Â¿Ã´Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Â¾Â¯Â¤ÃŠÂ²Ã¡Â¤Â®Â¤ÃžÂ¤Â¹: %s"
+msgstr "E119: é–¢æ•°ã®å¼•æ•°ãŒå°‘ãªéŽãŽã¾ã™: %s"
 
 #, c-format
 msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È°Ê³°¤Ç<SID>¤¬»È¤ï¤ì¤Þ¤·¤¿: %s"
+msgstr "E120: ã‚¹ã‚¯ãƒªãƒ—ト以外ã§<SID>ãŒä½¿ã‚ã‚Œã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E725: Â¼Â­Â½Ã±ÃÑ´Ø¿ô¤¬¸Æ¤Ã¤ì¤Þ¤·¤¿¤¬¼­½ñ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E725: è¾žæ›¸ç”¨é–¢æ•°ãŒå‘¼ã°ã‚Œã¾ã—ãŸãŒè¾žæ›¸ãŒã‚ã‚Šã¾ã›ã‚“: %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808: æ•°å€¤ã‹æµ®å‹•å°æ•°ç‚¹æ•°ãŒå¿…è¦ã§ã™"
+
+msgid "add() argument"
+msgstr "add() ã®å¼•æ•°"
 
 msgid "E699: Too many arguments"
-msgstr "E699: Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+msgstr "E699: å¼•æ•°ãŒå¤šéŽãŽã¾ã™"
 
 msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete() Â¤ÃÃÞÆþ¥â¡¼¥É¤Ç¤·¤«ÃøÃѤǤ­¤Þ¤»¤ó"
+msgstr "E785: complete() ã¯æŒ¿å…¥ãƒ¢ãƒ¼ãƒ‰ã§ã—ã‹åˆ©ç”¨ã§ãã¾ã›ã‚“"
 
 #.
 #. * Yes this is ugly, I don't particularly like it either.  But doing it
@@ -533,174 +592,216 @@ msgstr "&Ok"
 
 #, c-format
 msgid "E737: Key already exists: %s"
-msgstr "E737: %s Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Â­Â¡Â¼Â¤Ã´û¤Ë¸ºß¤·¤Þ¤¹"
+msgstr "E737: ã‚­ãƒ¼ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™: %s"
+
+msgid "extend() argument"
+msgstr "extend() ã®å¼•æ•°"
+
+msgid "map() argument"
+msgstr "map() ã®å¼•æ•°"
+
+msgid "filter() argument"
+msgstr "filter() ã®å¼•æ•°"
 
 #, c-format
 msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld Â¹Ã”:"
+msgstr "+-%s%3ld è¡Œ: "
 
 #, c-format
 msgid "E700: Unknown function: %s"
-msgstr "E700: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ´Ã˜Â¿Ã´Â¤Ã‡Â¤Â¹: %s"
+msgstr "E700: æœªçŸ¥ã®é–¢æ•°ã§ã™: %s"
 
 msgid ""
 "&OK\n"
 "&Cancel"
 msgstr ""
-"·èÄê(&O)\n"
-"¥­¥ã¥ó¥»¥ë(&C)"
+"決定(&O)\n"
+"キャンセル(&C)"
 
 msgid "called inputrestore() more often than inputsave()"
-msgstr "inputrestore() Â¤Â¬ inputsave() Â¤Ã¨Â¤ÃªÂ¤Ã¢Ã‚¿¤¯¸Æ¤Ã¤ì¤Þ¤·¤¿"
+msgstr "inputrestore() ãŒ inputsave() ã‚ˆã‚Šã‚‚多ã呼ã°ã‚Œã¾ã—ãŸ"
+
+msgid "insert() argument"
+msgstr "insert() ã®å¼•æ•°"
 
 msgid "E786: Range not allowed"
-msgstr "E786: ÃˆÃ°Ã»ØÄê¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E786: ç¯„囲指定ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E701: Invalid type for len()"
-msgstr "E701: len() Â¤Ã‹Â¤Ã̵¸ú¤Ê·¿¤Ç¤¹"
+msgstr "E701: len() ã«ã¯ç„¡åŠ¹ãªåž‹ã§ã™"
 
 msgid "E726: Stride is zero"
-msgstr "E726: Â¥Â¹Â¥ÃˆÂ¥Ã©Â¥Â¤Â¥Ã‰(ð¿ÊÎÌ)¤¬ 0 Â¤Ã‡Â¤Â¹"
+msgstr "E726: ã‚¹ãƒˆãƒ©ã‚¤ãƒ‰(å‰é€²é‡)㌠0 ã§ã™"
 
 msgid "E727: Start past end"
-msgstr "E727: Â³Â«Â»Ã°ÌÃÖ¤¬½ªÎ»°ÌÃÖ¤ò±Û¤¨¤Þ¤·¤¿"
+msgstr "E727: é–‹å§‹ä½ç½®ãŒçµ‚了ä½ç½®ã‚’越ãˆã¾ã—ãŸ"
 
 msgid "<empty>"
-msgstr "<¶õ>"
+msgstr "<空>"
 
 msgid "E240: No connection to Vim server"
-msgstr "E240: Vim Â¥ÂµÂ¡Â¼Â¥Ã¤Ø¤ÎÀܳ¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E240: Vim ã‚µãƒ¼ãƒã¸ã®æŽ¥ç¶šãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E241: Unable to send to %s"
-msgstr "E241: %s Â¤Ã˜Ã÷¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+msgstr "E241: %s ã¸é€ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
 
 msgid "E277: Unable to read a server reply"
-msgstr "E277: Â¥ÂµÂ¡Â¼Â¥Ã¤Î±þÅú¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E277: ã‚µãƒ¼ãƒã®å¿œç­”ãŒã‚ã‚Šã¾ã›ã‚“"
+
+msgid "remove() argument"
+msgstr "remove() ã®å¼•æ•°"
 
 # Added at 10-Mar-2004.
 msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: Â¥Â·Â¥Ã³Â¥ÃœÂ¥ÃªÂ¥ÃƒÂ¥Â¯Â¥ÃªÂ¥Ã³Â¥Â¯Â¤Â¬Ã‚¿²á¤®¤Þ¤¹ (½Û´Ä¤·¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹)"
+msgstr "E655: ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ãŒå¤šéŽãŽã¾ã™ (循環ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™)"
+
+msgid "reverse() argument"
+msgstr "reverse() ã®å¼•æ•°"
 
 msgid "E258: Unable to send to client"
-msgstr "E258: Â¥Â¯Â¥Ã©Â¥Â¤Â¥Â¢Â¥Ã³Â¥ÃˆÂ¤Ã˜Ã÷¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+msgstr "E258: ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸é€ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
+
+msgid "sort() argument"
+msgstr "sort() ã®å¼•æ•°"
 
 msgid "E702: Sort compare function failed"
-msgstr "E702: Â¥Â½Â¡Â¼Â¥ÃˆÂ¤ÃŽÃˆÃ¦Â³Ã“´Ø¿ô¤¬¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E702: ã‚½ãƒ¼ãƒˆã®æ¯”較関数ãŒå¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "(Invalid)"
-msgstr "(̵¸ú)"
+msgstr "(無効)"
 
 msgid "E677: Error writing temp file"
-msgstr "E677: Â°Ã¬Â»Ã¾Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â½Ã±Â¹Ã¾ÃƒÃ¦Â¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬ÃˆÂ¯Ã€Â¸Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "E677: ä¸€æ™‚ファイル書込中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: æµ®å‹•å°æ•°ç‚¹æ•°ã‚’数値ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
 
 msgid "E703: Using a Funcref as a Number"
-msgstr "E703: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Ã²Â¿Ã´ÃƒÃ¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹¡£"
+msgstr "E703: é–¢æ•°å‚照型を数値ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™ã€‚"
 
 msgid "E745: Using a List as a Number"
-msgstr "E745: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Ã²Â¿Ã´ÃƒÃ¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "E745: ãƒªã‚¹ãƒˆåž‹ã‚’数値ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
 
 msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: Â¼Â­Â½Ã±Â·Â¿Â¤Ã²Â¿Ã´ÃƒÃ¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "E728: è¾žæ›¸åž‹ã‚’数値ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
 
 msgid "E729: using Funcref as a String"
-msgstr "E729: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿Â¤Ã²ÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃˆÂ¤Â·Â¤Ã†Â°Â·Â¤ÃƒÂ¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+msgstr "E729: é–¢æ•°å‚照型を文字列ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
 
 msgid "E730: using List as a String"
-msgstr "E730: Â¥ÃªÂ¥Â¹Â¥ÃˆÂ·Â¿Â¤Ã²ÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃˆÂ¤Â·Â¤Ã†Â°Â·Â¤ÃƒÂ¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+msgstr "E730: ãƒªã‚¹ãƒˆåž‹ã‚’文字列ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
 
 msgid "E731: using Dictionary as a String"
-msgstr "E731: ÃŠÃ‘¿ô·¿¤òʸ»úÎó¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "E731: è¾žæ›¸åž‹ã‚’文字列ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
 
 #, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Â´Ã˜Â¿Ã´Â»Â²Â¾ÃˆÂ·Â¿ÃŠÃ‘¿ô̾¤ÃÂçʸ»ú¤Ç»Ã¤Þ¤é¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó: %s"
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: å¤‰æ•°ã®åž‹ãŒä¸€è‡´ã—ã¾ã›ã‚“: %s"
 
 #, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: ÃŠÃ‘¿ô̾¤¬´û¸¤Î´Ø¿ô̾¤È¾×Æä·¤Þ¤¹: %s"
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: å¤‰æ•° %s ã‚’削除ã§ãã¾ã›ã‚“"
 
 #, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: ÃŠÃ‘¿ô¤Î·¿¤¬°ìÃפ·¤Þ¤»¤ó: %s"
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: é–¢æ•°å‚照型変数åã¯å¤§æ–‡å­—ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: ÃŠÃ‘¿ô %s Â¤Ã²ÂºÃ¯Â½Ã¼Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: å¤‰æ•°åãŒæ—¢å­˜ã®é–¢æ•°åã¨è¡çªã—ã¾ã™: %s"
 
 #, c-format
 msgid "E741: Value is locked: %s"
-msgstr "E741: ÃƒÃ¤¬¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤¹: %s"
+msgstr "E741: å€¤ãŒãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™: %s"
 
 msgid "Unknown"
-msgstr "ÉÔÌÀ"
+msgstr "ä¸æ˜Ž"
 
 #, c-format
 msgid "E742: Cannot change value of %s"
-msgstr "E742: %s Â¤ÃŽÃƒÃ¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+msgstr "E742: %s ã®å€¤ã‚’変更ã§ãã¾ã›ã‚“"
 
 msgid "E698: variable nested too deep for making a copy"
-msgstr "E698: Â¥Â³Â¥Ã”¡¼¤ò¼è¤ë¤Ë¤ÃÊÑ¿ô¤ÎÆþ¤ì»Ò¤¬¿¼²á¤®¤Þ¤¹"
+msgstr "E698: ã‚³ãƒ”ーをå–ã‚‹ã«ã¯å¤‰æ•°ã®å…¥ã‚Œå­ãŒæ·±éŽãŽã¾ã™"
+
+#, c-format
+msgid "E123: Undefined function: %s"
+msgstr "E123: æœªå®šç¾©ã®é–¢æ•°ã§ã™: %s"
 
 #, c-format
 msgid "E124: Missing '(': %s"
-msgstr "E124: '(' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E124: '(' ãŒã‚ã‚Šã¾ã›ã‚“: %s"
+
+msgid "E862: Cannot use g: here"
+msgstr "E862: ã“ã“ã§ã¯ g: ã¯ä½¿ãˆã¾ã›ã‚“"
 
 #, c-format
 msgid "E125: Illegal argument: %s"
-msgstr "E125: Ã‰Ã”Àµ¤Ê°ú¿ô¤Ç¤¹: %s"
+msgstr "E125: ä¸æ­£ãªå¼•æ•°ã§ã™: %s"
+
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: å¼•æ•°åãŒé‡è¤‡ã—ã¦ã„ã¾ã™: %s"
 
 msgid "E126: Missing :endfunction"
-msgstr "E126: :endfunction Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E126: :endfunction ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: é–¢æ•°åãŒå¤‰æ•°åã¨è¡çªã—ã¾ã™: %s"
+
+#, c-format
+msgid "E127: Cannot redefine function %s: It is in use"
+msgstr "E127: é–¢æ•° %s ã‚’å†å®šç¾©ã§ãã¾ã›ã‚“: ä½¿ç”¨ä¸­ã§ã™"
 
 #, c-format
 msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: Â´Ã˜Â¿Ã´ÃŒÂ¾Â¤Â¬Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È¤Î¥Õ¥¡¥¤¥ë̾¤È°ìÃפ·¤Þ¤»¤ó: %s"
+msgstr "E746: é–¢æ•°åãŒã‚¹ã‚¯ãƒªãƒ—トã®ãƒ•ã‚¡ã‚¤ãƒ«åã¨ä¸€è‡´ã—ã¾ã›ã‚“: %s"
 
 msgid "E129: Function name required"
-msgstr "E129: Â´Ã˜Â¿Ã´ÃŒÂ¾Â¤Â¬Ã׵ᤵ¤ì¤Þ¤¹"
+msgstr "E129: é–¢æ•°åãŒè¦æ±‚ã•ã‚Œã¾ã™"
 
 #, c-format
 msgid "E128: Function name must start with a capital or contain a colon: %s"
-msgstr "E128: Â´Ã˜Â¿Ã´ÃŒÂ¾Â¤ÃÂçʸ»ú¤Ç»Ã¤Þ¤ë¤«¥³¥í¥ó¤ò´Þ¤Þ¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó: %s"
+msgstr "E128: é–¢æ•°åã¯å¤§æ–‡å­—ã§å§‹ã¾ã‚‹ã‹ã‚³ãƒ­ãƒ³ã‚’å«ã¾ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: Â´Ã˜Â¿Ã´ %s Â¤Ã²ÂºÃ¯Â½Ã¼Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³: Â»ÃˆÃÑÃæ¤Ç¤¹"
+msgstr "E131: é–¢æ•° %s ã‚’削除ã§ãã¾ã›ã‚“: ä½¿ç”¨ä¸­ã§ã™"
 
 msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: Â´Ã˜Â¿Ã´Â¸Ã†Â½Ã¤ÎÆþ¤ì»Ò¿ô¤¬ 'maxfuncdepth' Â¤Ã²Ã„¶¤¨¤Þ¤·¤¿"
+msgstr "E132: é–¢æ•°å‘¼å‡ºã®å…¥ã‚Œå­æ•°ãŒ 'maxfuncdepth' ã‚’超ãˆã¾ã—ãŸ"
 
 #, c-format
 msgid "calling %s"
-msgstr "%s Â¤Ã²Â¼Ã‚¹ÔÃæ¤Ç¤¹"
+msgstr "%s ã‚’実行中ã§ã™"
 
 #, c-format
 msgid "%s aborted"
-msgstr "%s Â¤Â¬ÃƒÃ¦ÃƒÃ‡Â¤ÂµÂ¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "%s ãŒä¸­æ–­ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%s returning #%ld"
-msgstr "%s Â¤Â¬ #%ld Â¤Ã²ÃŠÃ–¤·¤Þ¤·¤¿"
+msgstr "%s ãŒ #%ld ã‚’è¿”ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "%s returning %s"
-msgstr "%s Â¤Â¬ %s Â¤Ã²ÃŠÃ–¤·¤Þ¤·¤¿"
+msgstr "%s ãŒ %s ã‚’è¿”ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "continuing in %s"
-msgstr "%s Â¤ÃŽÂ¼Ã‚¹Ô¤ò·Ñ³Ãæ¤Ç¤¹"
+msgstr "%s ã®å®Ÿè¡Œã‚’継続中ã§ã™"
 
 msgid "E133: :return not inside a function"
-msgstr "E133: Â´Ã˜Â¿Ã´Â³Â°Â¤Ã‹ :return Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "E133: é–¢æ•°å¤–ã« :return ãŒã‚ã‚Šã¾ã—ãŸ"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
 msgstr ""
 "\n"
-"# Â¥Â°Â¥Ã­Â¡Â¼Â¥Ã¥ëÊÑ¿ô:\n"
+"# ã‚°ãƒ­ãƒ¼ãƒãƒ«å¤‰æ•°:\n"
 
 msgid ""
 "\n"
@@ -709,126 +810,130 @@ msgstr ""
 "\n"
 "\tLast set from "
 
+msgid "No old files"
+msgstr "å¤ã„ファイルã¯ã‚ã‚Šã¾ã›ã‚“"
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
-msgstr "<%s>%s%s  %d,  16¿Ê¿ô %02x,  8¿Ê¿ô %03o"
+msgstr "<%s>%s%s  %d,  16進数 %02x,  8進数 %03o"
 
 #, c-format
 msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, 16¿Ê¿ô %04x, 8¿Ê¿ô %o"
+msgstr "> %d, 16進数 %04x, 8進数 %o"
 
 #, c-format
 msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, 16¿Ê¿ô %08x, 8¿Ê¿ô %o"
+msgstr "> %d, 16進数 %08x, 8進数 %o"
 
 msgid "E134: Move lines into themselves"
-msgstr "E134: Â¹Ã”¤ò¤½¤ì¼«¿È¤Ë¤Ã°ÜÆ°¤Ç¤­¤Þ¤»¤ó"
+msgstr "E134: è¡Œã‚’ãれ自身ã«ã¯ç§»å‹•ã§ãã¾ã›ã‚“"
 
 msgid "1 line moved"
-msgstr "1 Â¹Ã”¤¬°ÜÆ°¤µ¤ì¤Þ¤·¤¿"
+msgstr "1 è¡ŒãŒç§»å‹•ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld lines moved"
-msgstr "%ld Â¹Ã”¤¬°ÜÆ°¤µ¤ì¤Þ¤·¤¿"
+msgstr "%ld è¡ŒãŒç§»å‹•ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld lines filtered"
-msgstr "%ld Â¹Ã”¤¬¥Õ¥£¥ë¥¿½èÃý¤µ¤ì¤Þ¤·¤¿"
+msgstr "%ld è¡ŒãŒãƒ•ã‚£ãƒ«ã‚¿å‡¦ç†ã•ã‚Œã¾ã—ãŸ"
 
 msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: *¥Õ¥£¥ë¥¿* autocommand¤Ã¸½ºß¤Î¥Ã¥Ã¥Õ¥¡¤òÊѹ¹¤·¤Æ¤Ã¤¤¤±¤Þ¤»¤ó"
+msgstr "E135: *フィルタ* autocommandã¯ç¾åœ¨ã®ãƒãƒƒãƒ•ã‚¡ã‚’変更ã—ã¦ã¯ã„ã‘ã¾ã›ã‚“"
 
 msgid "[No write since last change]\n"
-msgstr "[ºÇ¸å¤ÎÊѹ¹¤¬Êø¤µ¤ì¤Æ¤¤¤Þ¤»¤ó]\n"
+msgstr "[最後ã®å¤‰æ›´ãŒä¿å­˜ã•ã‚Œã¦ã„ã¾ã›ã‚“]\n"
 
 #, c-format
 msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s Â¹Ã”ÌÜ: "
+msgstr "%sviminfo: %s è¡Œç›®: "
 
 msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬Ã‚¿²á¤®¤ë¤Î¤Ç, Â°ÃŠÂ¹ÃŸÂ¤Ã¥¹¥­¥Ã¥×¤·¤Þ¤¹"
+msgstr "E136: viminfo: ã‚¨ãƒ©ãƒ¼ãŒå¤šéŽãŽã‚‹ã®ã§, ä»¥é™ã¯ã‚¹ã‚­ãƒƒãƒ—ã—ã¾ã™"
 
 #, c-format
 msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "viminfo¥Õ¥¡¥¤¥ë \"%s\"%s%s%s Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤ÃŸÃƒÃ¦ "
+msgstr "viminfoファイル \"%s\"%s%s%s ã‚’読込ã¿ä¸­ "
 
 msgid " info"
-msgstr " Â¾Ã°ÃŠÃ³"
+msgstr " æƒ…å ±"
 
 msgid " marks"
-msgstr " Â¥ÃžÂ¡Â¼Â¥Â¯"
+msgstr " ãƒžãƒ¼ã‚¯"
+
+msgid " oldfiles"
+msgstr " æ—§ãƒ•ã‚¡ã‚¤ãƒ«ç¾¤"
 
 msgid " FAILED"
-msgstr " Â¼ÂºÃ‡Ã”"
+msgstr " å¤±æ•—"
 
 #. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: viminfo¥Õ¥¡¥¤¥ë¤¬½ñ¹þ¤ß¤Ç¤­¤Þ¤»¤ó: %s"
+msgstr "E137: viminfoファイルãŒæ›¸è¾¼ã¿ã§ãã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: viminfo¥Õ¥¡¥¤¥ë %s Â¤Ã²ÃŠÃ¸¤Ç¤­¤Þ¤»¤ó!"
+msgstr "E138: viminfoファイル %s ã‚’ä¿å­˜ã§ãã¾ã›ã‚“!"
 
 #, c-format
 msgid "Writing viminfo file \"%s\""
-msgstr "viminfo¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦"
+msgstr "viminfoファイル \"%s\" ã‚’書込ã¿ä¸­"
 
 #. Write the info:
 #, c-format
 msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# Â¤Â³Â¤ÃŽ viminfo Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã Vim %s Â¤Ã‹Â¤Ã¨Â¤ÃƒÂ¤Ã†Ã€Â¸Ã€Â®Â¤ÂµÂ¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿.\n"
+msgstr "# ã“ã® viminfo ãƒ•ã‚¡ã‚¤ãƒ«ã¯ Vim %s ã«ã‚ˆã£ã¦ç”Ÿæˆã•ã‚Œã¾ã—ãŸ.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
 msgstr ""
-"# ÃŠÃ‘¹¹¤¹¤ëºÃ¤Ë¤Ã½½Ê¬Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤!\n"
+"# å¤‰æ›´ã™ã‚‹éš›ã«ã¯å分注æ„ã—ã¦ãã ã•ã„!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# Â¤Â³Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â½Ã±Â¤Â«Â¤Ã¬Â¤Â¿Â»Ã¾Â¤ÃŽ 'encoding' Â¤ÃŽÃƒÃ\n"
+msgstr "# ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ›¸ã‹ã‚ŒãŸæ™‚ã® 'encoding' ã®å€¤\n"
 
 msgid "Illegal starting char"
-msgstr "ÉÔÀµ¤ÊÀèƬʸ»ú¤Ç¤¹"
+msgstr "ä¸æ­£ãªå…ˆé ­æ–‡å­—ã§ã™"
 
 msgid "Save As"
-msgstr "ÊÌ̾¤ÇÊø"
+msgstr "別åã§ä¿å­˜"
 
 msgid "Write partial file?"
-msgstr "¥Õ¥¡¥¤¥ë¤òÉôʬŪ¤ËÊø¤·¤Þ¤¹¤«?"
+msgstr "ファイルを部分的ã«ä¿å­˜ã—ã¾ã™ã‹?"
 
 msgid "E140: Use ! to write partial buffer"
-msgstr "E140: Â¥Ã¥Ã¥Õ¥¡¤òÉôʬŪ¤ËÊø¤¹¤ë¤Ë¤à! Â¤Ã²Â»ÃˆÂ¤ÃƒÂ¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+msgstr "E140: ãƒãƒƒãƒ•ã‚¡ã‚’部分的ã«ä¿å­˜ã™ã‚‹ã«ã¯ ! ã‚’使ã£ã¦ãã ã•ã„"
 
 #, c-format
 msgid "Overwrite existing file \"%s\"?"
-msgstr "´û¸¤Î¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Â¾Ã¥Â½Ã±Â¤Â­Â¤Â·Â¤ÃžÂ¤Â¹Â¤Â«?"
+msgstr "既存ã®ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã‚’上書ãã—ã¾ã™ã‹?"
 
 #, c-format
 msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë \"%s\" Â¤Â¬Ã‚¸ºß¤·¤Þ¤¹. Â¾Ã¥Â½Ã±Â¤Â­Â¤Ã²Â¶Â¯Ã€Â©Â¤Â·Â¤ÃžÂ¤Â¹Â¤Â«?"
+msgstr "スワップファイル \"%s\" ãŒå­˜åœ¨ã—ã¾ã™. ä¸Šæ›¸ãを強制ã—ã¾ã™ã‹?"
 
 #, c-format
 msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤¹: %s (:silent! Â¤Ã²Ã„ɲäǾå½ñ)"
+msgstr "E768: ã‚¹ãƒ¯ãƒƒãƒ—ファイルãŒå­˜åœ¨ã—ã¾ã™: %s (:silent! ã‚’追加ã§ä¸Šæ›¸)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
-msgstr "E141: Â¥Ã¥Ã¥Õ¥¡ %ld Â¤Ã‹Â¤Ã̾𤬤¢¤ê¤Þ¤»¤ó"
+msgstr "E141: ãƒãƒƒãƒ•ã‚¡ %ld ã«ã¯åå‰ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃÊø¤µ¤ì¤Þ¤»¤ó¤Ç¤·¤¿: 'write' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ë¤è¤ê̵¸ú¤Ç¤¹"
+msgstr "E142: ãƒ•ã‚¡ã‚¤ãƒ«ã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ: 'write' ã‚ªãƒ—ションã«ã‚ˆã‚Šç„¡åŠ¹ã§ã™"
 
 #, c-format
 msgid ""
 "'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"\"%s\" Â¤Ã‹Â¤Ã 'readonly' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹.\n"
-"¾å½ñ¤­¶¯À©¤ò¤·¤Þ¤¹¤«?"
+"\"%s\" ã«ã¯ 'readonly' ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã™.\n"
+"上書ã強制をã—ã¾ã™ã‹?"
 
 #, c-format
 msgid ""
@@ -836,615 +941,633 @@ msgid ""
 "It may still be possible to write it.\n"
 "Do you wish to try?"
 msgstr ""
-"¥Õ¥¡¥¤¥ë \"%s\" Â¤ÃŽÂ¥Ã‘¡¼¥ß¥Ã¥·¥ç¥ó¤¬ÆɹþÀìÃѤǤ¹.\n"
-"¤½¤ì¤Ç¤â¶²¤é¤¯½ñ¤­¹þ¤à¤³¤È¤Ã²Äǽ¤Ç¤¹.\n"
-"·Ñ³¤·¤Þ¤¹¤«?"
+"ファイル \"%s\" ã®ãƒ‘ーミッションãŒèª­è¾¼å°‚用ã§ã™.\n"
+"ãã‚Œã§ã‚‚æらã書ã込むã“ã¨ã¯å¯èƒ½ã§ã™.\n"
+"継続ã—ã¾ã™ã‹?"
 
 #, c-format
 msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: \"%s\" Â¤ÃÆɹþÀìÃѤǤ¹ (¶¯À©½ñ¹þ¤Ë¤à! Â¤Ã²Ã„ɲÃ)"
+msgstr "E505: \"%s\" ã¯èª­è¾¼å°‚用ã§ã™ (強制書込ã«ã¯ ! ã‚’追加)"
 
 msgid "Edit File"
-msgstr "¥Õ¥¡¥¤¥ë¤òÊÔ½¸"
+msgstr "ファイルを編集"
 
 #, c-format
 msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: autocommand¤¬Ã½´ü¤»¤º¿·¤·¤¤¥Ã¥Ã¥Õ¥¡ %s Â¤Ã²ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "E143: autocommandãŒäºˆæœŸã›ãšæ–°ã—ã„ãƒãƒƒãƒ•ã‚¡ %s ã‚’削除ã—ã¾ã—ãŸ"
 
 msgid "E144: non-numeric argument to :z"
-msgstr "E144: Â¿Ã´Â¤Ã‡Â¤Ã¤Ê¤¤°ú¿ô¤¬ :z Â¤Ã‹Ã…䵤ì¤Þ¤·¤¿"
+msgstr "E144: æ•°ã§ã¯ãªã„引数㌠:z ã«æ¸¡ã•ã‚Œã¾ã—ãŸ"
 
 msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: rvim¤Ç¤Ã¥·¥§¥ë¥³¥Þ¥ó¥É¤ò»È¤¨¤Þ¤»¤ó"
+msgstr "E145: rvimã§ã¯ã‚·ã‚§ãƒ«ã‚³ãƒžãƒ³ãƒ‰ã‚’使ãˆã¾ã›ã‚“"
 
 msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½Â¤Ãʸ»ú¤Ç¶èÀڤ뤳¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+msgstr "E146: æ­£è¦è¡¨ç¾ã¯æ–‡å­—ã§åŒºåˆ‡ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "%s Â¤Ã‹ÃƒÃ–´¹¤·¤Þ¤¹¤«? (y/n/a/q/l/^E/^Y)"
+msgstr "%s ã«ç½®æ›ã—ã¾ã™ã‹? (y/n/a/q/l/^E/^Y)"
 
 msgid "(Interrupted) "
-msgstr "(³ä¹þ¤Þ¤ì¤Þ¤·¤¿)"
+msgstr "(割込ã¾ã‚Œã¾ã—ãŸ) "
 
 msgid "1 match"
-msgstr "1 Â²Ã•Â½ÃªÂ³ÂºÃ…ö¤·¤Þ¤·¤¿"
+msgstr "1 ç®‡æ‰€è©²å½“ã—ã¾ã—ãŸ"
 
 msgid "1 substitution"
-msgstr "1 Â²Ã•Â½ÃªÃƒÃ–´¹¤·¤Þ¤·¤¿"
+msgstr "1 ç®‡æ‰€ç½®æ›ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld matches"
-msgstr "%ld Â²Ã•Â½ÃªÂ³ÂºÃ…ö¤·¤Þ¤·¤¿"
+msgstr "%ld ç®‡æ‰€è©²å½“ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld substitutions"
-msgstr "%ld Â²Ã•Â½ÃªÃƒÃ–´¹¤·¤Þ¤·¤¿"
+msgstr "%ld ç®‡æ‰€ç½®æ›ã—ã¾ã—ãŸ"
 
 msgid " on 1 line"
-msgstr " (·× 1 Â¹Ã”Æâ)"
+msgstr " (計 1 è¡Œå†…)"
 
 #, c-format
 msgid " on %ld lines"
-msgstr " (·× %ld Â¹Ã”Æâ)"
+msgstr " (計 %ld è¡Œå†…)"
 
 msgid "E147: Cannot do :global recursive"
-msgstr "E147: :global Â¤Ã²ÂºÃ†ÂµÂ¢Ã…ª¤Ë¤Ã»È¤¨¤Þ¤»¤ó"
+msgstr "E147: :global ã‚’å†å¸°çš„ã«ã¯ä½¿ãˆã¾ã›ã‚“"
 
 msgid "E148: Regular expression missing from global"
-msgstr "E148: global¥³¥Þ¥ó¥É¤ËÀµµ¬É½¸½¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E148: globalコマンドã«æ­£è¦è¡¨ç¾ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "Pattern found in every line: %s"
-msgstr "¥Ñ¥¿¡¼¥ó¤¬Ã´¤Æ¤Î¹Ô¤Ç¤ß¤Ä¤«¤ê¤Þ¤·¤¿: %s"
+msgstr "パターンãŒå…¨ã¦ã®è¡Œã§è¦‹ã¤ã‹ã‚Šã¾ã—ãŸ: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "パターンã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
 "$"
 msgstr ""
 "\n"
-"# ÂºÃ‡Â¸Ã¥Â¤Ã‹ÃƒÃ–´¹¤µ¤ì¤¿Ê¸»úÎó:\n"
+"# æœ€å¾Œã«ç½®æ›ã•ã‚ŒãŸæ–‡å­—列:\n"
 "$"
 
 msgid "E478: Don't panic!"
-msgstr "E478: Â¹Â²Â¤Ã†Â¤ÃŠÂ¤Â¤Â¤Ã‡Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+msgstr "E478: æ…Œã¦ãªã„ã§ãã ã•ã„"
 
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: Â»Ã„Ç°¤Ç¤¹¤¬ '%s' Â¤ÃŽÂ¥Ã˜Â¥Ã«Â¥Ã—¤¬ %s Â¤Ã‹Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E661: æ®‹å¿µã§ã™ãŒ '%s' ã®ãƒ˜ãƒ«ãƒ—㌠%s ã«ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E149: Sorry, no help for %s"
-msgstr "E149: Â»Ã„Ç°¤Ç¤¹¤¬ %s Â¤Ã‹Â¤Ã¥Ø¥ë¥×¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E149: æ®‹å¿µã§ã™ãŒ %s ã«ã¯ãƒ˜ãƒ«ãƒ—ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "Sorry, help file \"%s\" not found"
-msgstr "»ÄÇ°¤Ç¤¹¤¬¥Ø¥ë¥×¥Õ¥¡¥¤¥ë \"%s\" Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "残念ã§ã™ãŒãƒ˜ãƒ«ãƒ—ファイル \"%s\" ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E150: Not a directory: %s"
-msgstr "E150: Â¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã‡Â¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E150: ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E152: Cannot open %s for writing"
-msgstr "E152: Â½Ã±Â¹Ã¾Â¤ÃŸÃѤË %s Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E152: æ›¸è¾¼ã¿ç”¨ã« %s ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 #, c-format
 msgid "E153: Unable to open %s for reading"
-msgstr "E153: Ã†Ã‰Â¹Ã¾ÃѤË %s Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E153: èª­è¾¼ç”¨ã« %s ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 # Added at 29-Apr-2004.
 #, c-format
 msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: 1¤Ä¤Î¸À¸ì¤Î¥Ø¥ë¥×¥Õ¥¡¥¤¥ë¤ËÊ£¿ô¤Î¥¨¥ó¥³¡¼¥É¤¬º®ºß¤·¤Æ¤¤¤Þ¤¹: %s"
+msgstr "E670: 1ã¤ã®è¨€èªžã®ãƒ˜ãƒ«ãƒ—ファイルã«è¤‡æ•°ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ãŒæ··åœ¨ã—ã¦ã„ã¾ã™: %s"
 
 #, c-format
 msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Â¥Â¿Â¥Â° \"%s\" Â¤Â¬Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s/%s Â¤Ã‹Â½Ã…Ê£¤·¤Æ¤¤¤Þ¤¹"
+msgstr "E154: ã‚¿ã‚° \"%s\" ãŒãƒ•ã‚¡ã‚¤ãƒ« %s/%s ã«é‡è¤‡ã—ã¦ã„ã¾ã™"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
-msgstr "E160: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽsign¥³¥Þ¥ó¥É¤Ç¤¹: %s"
+msgstr "E160: æœªçŸ¥ã®signコマンドã§ã™: %s"
 
 msgid "E156: Missing sign name"
-msgstr "E156: sign̾¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E156: signåãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E612: Too many signs defined"
-msgstr "E612: sign¤ÎÄêµÃ¤¬Â¿¿ô¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+msgstr "E612: signã®å®šç¾©ãŒå¤šæ•°è¦‹ã¤ã‹ã‚Šã¾ã—ãŸ"
 
 #, c-format
 msgid "E239: Invalid sign text: %s"
-msgstr "E239: ÃŒÂµÂ¸ÃºÂ¤ÃŠsign¤Î¥Æ¥­¥¹¥È¤Ç¤¹: %s"
+msgstr "E239: ç„¡åŠ¹ãªsignã®ãƒ†ã‚­ã‚¹ãƒˆã§ã™: %s"
 
 #, c-format
 msgid "E155: Unknown sign: %s"
-msgstr "E155: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽsign¤Ç¤¹: %s"
+msgstr "E155: æœªçŸ¥ã®signã§ã™: %s"
 
 msgid "E159: Missing sign number"
-msgstr "E159: sign¤ÎÈֹ椬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E159: signã®ç•ªå·ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E158: Invalid buffer name: %s"
-msgstr "E158: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã¥Ã¥Õ¥¡Ì¾¤Ç¤¹: %s"
+msgstr "E158: ç„¡åŠ¹ãªãƒãƒƒãƒ•ã‚¡åã§ã™: %s"
 
 #, c-format
 msgid "E157: Invalid sign ID: %ld"
-msgstr "E157: ÃŒÂµÂ¸ÃºÂ¤ÃŠsign¼±Ê̻ҤǤ¹: %ld"
+msgstr "E157: ç„¡åŠ¹ãªsign識別å­ã§ã™: %ld"
 
 # Added at 27-Jan-2004.
 msgid " (NOT FOUND)"
-msgstr "  (¤ß¤Ä¤«¤ê¤Þ¤»¤ó)"
+msgstr "  (見ã¤ã‹ã‚Šã¾ã›ã‚“)"
 
 msgid " (not supported)"
-msgstr " (È󥵥á¼¥È)"
+msgstr " (éžã‚µãƒãƒ¼ãƒˆ)"
 
 msgid "[Deleted]"
-msgstr "[ºï½üºÑ]"
+msgstr "[削除済]"
 
 msgid "Entering Debug mode.  Type \"cont\" to continue."
-msgstr "¥Ç¥Ã¥Ã¥°¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹. Ã‚³¤±¤ë¤Ë¤à\"cont\" Â¤ÃˆÃ†Ã¾ÃŽÃ¤·¤Æ¤¯¤À¤µ¤¤."
+msgstr "デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã¾ã™. ç¶šã‘ã‚‹ã«ã¯ \"cont\" ã¨å…¥åŠ›ã—ã¦ãã ã•ã„."
 
 #, c-format
 msgid "line %ld: %s"
-msgstr "¹Ô %ld: %s"
+msgstr "è¡Œ %ld: %s"
 
 #, c-format
 msgid "cmd: %s"
-msgstr "¥³¥Þ¥ó¥É: %s"
+msgstr "コマンド: %s"
 
 #, c-format
 msgid "Breakpoint in \"%s%s\" line %ld"
-msgstr "¥Ö¥ì¡¼¥¯¥Ã¥¤¥ó¥È \"%s%s\" Â¹Ã” %ld"
+msgstr "ブレークãƒã‚¤ãƒ³ãƒˆ \"%s%s\" è¡Œ %ld"
 
 #, c-format
 msgid "E161: Breakpoint not found: %s"
-msgstr "E161: Â¥Ã–¥ì¡¼¥¯¥Ã¥¤¥ó¥È¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó: %s"
+msgstr "E161: ãƒ–レークãƒã‚¤ãƒ³ãƒˆãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s"
 
 msgid "No breakpoints defined"
-msgstr "¥Ö¥ì¡¼¥¯¥Ã¥¤¥ó¥È¤¬ÄêµÃ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "ブレークãƒã‚¤ãƒ³ãƒˆãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "%3d  %s %s  line %ld"
-msgstr "%3d  %s %s  Â¹Ã” %ld"
+msgstr "%3d  %s %s  è¡Œ %ld"
 
-msgid "E750: First use :profile start <fname>"
-msgstr "E750: Â½Ã©Â¤Ã¡Â¤Ã‹ :profile start <fname> Â¤Ã²Â¼Ã‚¹Ô¤·¤Æ¤¯¤À¤µ¤¤"
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: åˆã‚ã« \":profile start {fname}\" ã‚’実行ã—ã¦ãã ã•ã„"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
-msgstr "Êѹ¹¤ò \"%s\" Â¤Ã‹ÃŠÃ¸¤·¤Þ¤¹¤«?"
+msgstr "変更を \"%s\" ã«ä¿å­˜ã—ã¾ã™ã‹?"
 
 msgid "Untitled"
-msgstr "̵Âê"
+msgstr "ç„¡é¡Œ"
 
 #, c-format
 msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: Â¥Ã¥Ã¥Õ¥¡ \"%s\" Â¤ÃŽÃŠÃ‘¹¹¤ÃÊø¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E162: ãƒãƒƒãƒ•ã‚¡ \"%s\" ã®å¤‰æ›´ã¯ä¿å­˜ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr "·Ù¹ð: Ã½´ü¤»¤ºÂ¾¥Ã¥Ã¥Õ¥¡¤Ø°ÜÆ°¤·¤Þ¤·¤¿ (autocommands Â¤Ã²Ã„´¤Ù¤Æ¤¯¤À¤µ¤¤)"
+msgstr "警告: äºˆæœŸã›ãšä»–ãƒãƒƒãƒ•ã‚¡ã¸ç§»å‹•ã—ã¾ã—㟠(autocommands ã‚’調ã¹ã¦ãã ã•ã„)"
 
 msgid "E163: There is only one file to edit"
-msgstr "E163: ÃŠÃ”½¸¤¹¤ë¥Õ¥¡¥¤¥ë¤Ã1¤Ä¤·¤«¤¢¤ê¤Þ¤»¤ó"
+msgstr "E163: ç·¨é›†ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã¯1ã¤ã—ã‹ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E164: Cannot go before first file"
-msgstr "E164: ÂºÃ‡Â½Ã©Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã¨Â¤ÃªÃ°¤Ë¤Ã¹Ô¤±¤Þ¤»¤ó"
+msgstr "E164: æœ€åˆã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚ˆã‚Šå‰ã«ã¯è¡Œã‘ã¾ã›ã‚“"
 
 msgid "E165: Cannot go beyond last file"
-msgstr "E165: ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²Â±Ã›Â¤Â¨Â¤Ã†Â¸Ã¥Â¤Ã‹Â¤Ã¹Ô¤±¤Þ¤»¤ó"
+msgstr "E165: æœ€å¾Œã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’越ãˆã¦å¾Œã«ã¯è¡Œã‘ã¾ã›ã‚“"
 
 #, c-format
 msgid "E666: compiler not supported: %s"
-msgstr "E666: Â¤Â½Â¤ÃŽÂ¥Â³Â¥Ã³Â¥Ã‘¥¤¥é¤Ë¤ÃÂñþ¤·¤Æ¤¤¤Þ¤»¤ó: %s"
+msgstr "E666: ãã®ã‚³ãƒ³ãƒ‘イラã«ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
-msgstr "\"%s\" Â¤Ã² \"%s\" Â¤Â«Â¤Ã©Â¸Â¡ÂºÃ·ÃƒÃ¦"
+msgstr "\"%s\" ã‚’ \"%s\" ã‹ã‚‰æ¤œç´¢ä¸­"
 
 #, c-format
 msgid "Searching for \"%s\""
-msgstr "\"%s\" Â¤Ã²Â¸Â¡ÂºÃ·ÃƒÃ¦"
+msgstr "\"%s\" ã‚’検索中"
 
 #, c-format
 msgid "not found in 'runtimepath': \"%s\""
-msgstr "'runtimepath' Â¤ÃŽÃƒÃ¦Â¤Ã‹Â¤Ã¤ß¤Ä¤«¤ê¤Þ¤»¤ó: \"%s\""
+msgstr "'runtimepath' ã®ä¸­ã«ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: \"%s\""
 
 msgid "Source Vim script"
-msgstr "Vim¥¹¥¯¥ê¥×¥È¤Î¼è¹þ¤ß"
+msgstr "Vimスクリプトã®å–è¾¼ã¿"
 
 #, c-format
 msgid "Cannot source a directory: \"%s\""
-msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤Ã¼è¹þ¤á¤Þ¤»¤ó: \"%s\""
+msgstr "ディレクトリã¯å–è¾¼ã‚ã¾ã›ã‚“: \"%s\""
 
 #, c-format
 msgid "could not source \"%s\""
-msgstr "\"%s\" Â¤Ã²Â¼Ã¨Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "\"%s\" ã‚’å–è¾¼ã‚ã¾ã›ã‚“"
 
 #, c-format
 msgid "line %ld: could not source \"%s\""
-msgstr "¹Ô %ld: \"%s\" Â¤Ã²Â¼Ã¨Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "è¡Œ %ld: \"%s\" ã‚’å–è¾¼ã‚ã¾ã›ã‚“"
 
 #, c-format
 msgid "sourcing \"%s\""
-msgstr "\"%s\" Â¤Ã²Â¼Ã¨Â¹Ã¾ÃƒÃ¦"
+msgstr "\"%s\" ã‚’å–込中"
 
 #, c-format
 msgid "line %ld: sourcing \"%s\""
-msgstr "¹Ô %ld: %s Â¤Ã²Â¼Ã¨Â¹Ã¾ÃƒÃ¦"
+msgstr "è¡Œ %ld: %s ã‚’å–込中"
 
 #, c-format
 msgid "finished sourcing %s"
-msgstr "%s Â¤ÃŽÂ¼Ã¨Â¹Ã¾Â¤Ã²Â´Â°ÃŽÂ»"
+msgstr "%s ã®å–込を完了"
 
 msgid "modeline"
-msgstr "¥â¡¼¥É¹Ô"
+msgstr "モード行"
 
 msgid "--cmd argument"
-msgstr "--cmd Â°ÃºÂ¿Ã´"
+msgstr "--cmd å¼•æ•°"
 
 msgid "-c argument"
-msgstr "-c Â°ÃºÂ¿Ã´"
+msgstr "-c å¼•æ•°"
 
 msgid "environment variable"
-msgstr "´Ä¶­ÊÑ¿ô"
+msgstr "環境変数"
 
 msgid "error handler"
-msgstr "¥¨¥é¡¼¥Ã¥ó¥É¥é"
+msgstr "エラーãƒãƒ³ãƒ‰ãƒ©"
 
 msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr "W15: Â·Ã™Â¹Ã°: Â¹Ã”¶èÀÚ¤¬ÉÔÀµ¤Ç¤¹. ^M Â¤Â¬Â¤ÃŠÂ¤Â¤Â¤ÃŽÂ¤Ã‡Â¤Â·Â¤Ã§Â¤Â¦"
+msgstr "W15: è­¦å‘Š: è¡ŒåŒºåˆ‡ãŒä¸æ­£ã§ã™. ^M ãŒãªã„ã®ã§ã—ょã†"
 
 msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: :scriptencoding Â¤Â¬Â¼Ã¨Â¹Ã¾Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È°Ê³°¤Ç»ÈÃѤµ¤ì¤Þ¤·¤¿"
+msgstr "E167: :scriptencoding ãŒå–込スクリプト以外ã§ä½¿ç”¨ã•ã‚Œã¾ã—ãŸ"
 
 msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: :finish Â¤Â¬Â¼Ã¨Â¹Ã¾Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È°Ê³°¤Ç»ÈÃѤµ¤ì¤Þ¤·¤¿"
+msgstr "E168: :finish ãŒå–込スクリプト以外ã§ä½¿ç”¨ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "Current %slanguage: \"%s\""
-msgstr "¸½ºß¤Î %s¸À¸ì: \"%s\""
+msgstr "ç¾åœ¨ã® %s言語: \"%s\""
 
 #, c-format
 msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Â¸Ã€Â¸Ã¬Â¤Ã² \"%s\" Â¤Ã‹Ã€ÃŸÃ„ê¤Ç¤­¤Þ¤»¤ó"
+msgstr "E197: è¨€èªžã‚’ \"%s\" ã«è¨­å®šã§ãã¾ã›ã‚“"
 
 msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
-msgstr "Ex¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹. Â¥ÃŽÂ¡Â¼Â¥ÃžÂ¥Ã«Â¤Ã‹ÃŒÃ¡Â¤Ã«Â¤Ã‹Â¤Ã\"visual\"¤ÈÆþÎ䷤Ƥ¯¤À¤µ¤¤."
+msgstr "Exモードã«å…¥ã‚Šã¾ã™. ãƒŽãƒ¼ãƒžãƒ«ã«æˆ»ã‚‹ã«ã¯\"visual\"ã¨å…¥åŠ›ã—ã¦ãã ã•ã„."
 
 msgid "E501: At end-of-file"
-msgstr "E501: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ½ÂªÃŽÂ»Â°ÃŒÃƒÃ–"
+msgstr "E501: ãƒ•ã‚¡ã‚¤ãƒ«ã®çµ‚了ä½ç½®"
 
 msgid "E169: Command too recursive"
-msgstr "E169: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬ÂºÃ†ÂµÂ¢Ã…ª²á¤®¤Þ¤¹"
+msgstr "E169: ã‚³ãƒžãƒ³ãƒ‰ãŒå†å¸°çš„éŽãŽã¾ã™"
 
 #, c-format
 msgid "E605: Exception not caught: %s"
-msgstr "E605: ÃŽÃ£Â³Â°Â¤Â¬ÃŠÃ¡Ã‚ª¤µ¤ì¤Þ¤»¤ó¤Ç¤·¤¿: %s"
+msgstr "E605: ä¾‹å¤–ãŒæ•æ‰ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ: %s"
 
 msgid "End of sourced file"
-msgstr "¼è¹þ¥Õ¥¡¥¤¥ë¤ÎºÇ¸å¤Ç¤¹"
+msgstr "å–込ファイルã®æœ€å¾Œã§ã™"
 
 msgid "End of function"
-msgstr "´Ø¿ô¤ÎºÇ¸å¤Ç¤¹"
+msgstr "関数ã®æœ€å¾Œã§ã™"
 
 msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: Â¥Ã¦Â¡Â¼Â¥Â¶Ã„êµÃ¥³¥Þ¥ó¥É¤Î¤¢¤¤¤Þ¤¤¤Ê»ÈÃѤǤ¹"
+msgstr "E464: ãƒ¦ãƒ¼ã‚¶å®šç¾©ã‚³ãƒžãƒ³ãƒ‰ã®ã‚ã„ã¾ã„ãªä½¿ç”¨ã§ã™"
 
 msgid "E492: Not an editor command"
-msgstr "E492: Â¥Â¨Â¥Ã‡Â¥Â£Â¥Â¿Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã‡Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E492: ã‚¨ãƒ‡ã‚£ã‚¿ã®ã‚³ãƒžãƒ³ãƒ‰ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E493: Backwards range given"
-msgstr "E493: ÂµÃ•Â¤ÂµÂ¤ÃžÂ¤ÃŽÃˆÃ°Ã¤¬»ØÄꤵ¤ì¤Þ¤·¤¿"
+msgstr "E493: é€†ã•ã¾ã®ç¯„囲ãŒæŒ‡å®šã•ã‚Œã¾ã—ãŸ"
 
 msgid "Backwards range given, OK to swap"
-msgstr "µÕ¤µ¤Þ¤ÎÈð䬻ØÄꤵ¤ì¤Þ¤·¤¿, Ã†Ã¾Ã‚ؤ¨¤Þ¤¹¤«?"
+msgstr "逆ã•ã¾ã®ç¯„囲ãŒæŒ‡å®šã•ã‚Œã¾ã—ãŸ, å…¥æ›¿ãˆã¾ã™ã‹?"
 
 msgid "E494: Use w or w>>"
-msgstr "E494: w Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã w>> Â¤Ã²Â»ÃˆÃѤ·¤Æ¤¯¤À¤µ¤¤"
+msgstr "E494: w ã‚‚ã—ã㯠w>> ã‚’使用ã—ã¦ãã ã•ã„"
 
 msgid "E319: Sorry, the command is not available in this version"
-msgstr "E319: Â¤Â³Â¤ÃŽÂ¥Ã¡¼¥¸¥ç¥ó¤Ç¤Ã¤³¤Î¥³¥Þ¥ó¥É¤ÃÃøÃѤǤ­¤Þ¤»¤ó, Â¤Â´Â¤Ã¡Â¤Ã³Â¤ÃŠÂ¤ÂµÂ¤Â¤"
+msgstr "E319: ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“, ã”ã‚ã‚“ãªã•ã„"
 
 msgid "E172: Only one file name allowed"
-msgstr "E172: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Ã 1 Â¤Ã„¤Ë¤·¤Æ¤¯¤À¤µ¤¤"
+msgstr "E172: ãƒ•ã‚¡ã‚¤ãƒ«å㯠1 ã¤ã«ã—ã¦ãã ã•ã„"
 
 msgid "1 more file to edit.  Quit anyway?"
-msgstr "ÊÔ½¸¤¹¤Ù¤­¥Õ¥¡¥¤¥ë¤¬ 1 Â¸Ã„¤¢¤ê¤Þ¤¹¤¬, Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â¹Â¤Â«?"
+msgstr "編集ã™ã¹ãファイル㌠1 å€‹ã‚ã‚Šã¾ã™ãŒ, çµ‚了ã—ã¾ã™ã‹?"
 
 #, c-format
 msgid "%d more files to edit.  Quit anyway?"
-msgstr "ÊÔ½¸¤¹¤Ù¤­¥Õ¥¡¥¤¥ë¤¬¤¢¤È %d Â¸Ã„¤¢¤ê¤Þ¤¹¤¬, Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â¹Â¤Â«?"
+msgstr "編集ã™ã¹ãファイルãŒã‚㨠%d å€‹ã‚ã‚Šã¾ã™ãŒ, çµ‚了ã—ã¾ã™ã‹?"
 
 msgid "E173: 1 more file to edit"
-msgstr "E173: ÃŠÃ”½¸¤¹¤Ù¤­¥Õ¥¡¥¤¥ë¤¬ 1 Â¸Ã„¤¢¤ê¤Þ¤¹"
+msgstr "E173: ç·¨é›†ã™ã¹ãファイル㌠1 å€‹ã‚ã‚Šã¾ã™"
 
 #, c-format
 msgid "E173: %ld more files to edit"
-msgstr "E173: ÃŠÃ”½¸¤¹¤Ù¤­¥Õ¥¡¥¤¥ë¤¬¤¢¤È %ld Â¸Ã„¤¢¤ê¤Þ¤¹"
+msgstr "E173: ç·¨é›†ã™ã¹ãファイルãŒã‚㨠%ld å€‹ã‚ã‚Šã¾ã™"
 
 msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬Â´Ã»Â¤Ã‹Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹: ÂºÃ†Ã„êµÃ¤¹¤ë¤Ë¤à! Â¤Ã²Ã„ɲ䷤Ƥ¯¤À¤µ¤¤"
+msgstr "E174: ã‚³ãƒžãƒ³ãƒ‰ãŒæ—¢ã«ã‚ã‚Šã¾ã™: å†å®šç¾©ã™ã‚‹ã«ã¯ ! ã‚’追加ã—ã¦ãã ã•ã„"
 
 msgid ""
 "\n"
 "    Name        Args Range Complete  Definition"
 msgstr ""
 "\n"
-"    ÃŒÂ¾Ã°        Â°ÃºÂ¿Ã´ ÃˆÃ°à ÃŠÃ¤Â´Â°      Ã„êµÃ"
+"    å剠       å¼•æ•° ç¯„囲  è£œå®Œ      å®šç¾©"
 
 msgid "No user-defined commands found"
-msgstr "¥æ¡¼¥¶ÄêµÃ¥³¥Þ¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "ユーザ定義コマンドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "E175: No attribute specified"
-msgstr "E175: Ã‚°À­¤ÃÄêµÃ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E175: å±žæ€§ã¯å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E176: Invalid number of arguments"
-msgstr "E176: Â°ÃºÂ¿Ã´Â¤ÃŽÂ¿Ã´Â¤Â¬ÃŒÂµÂ¸ÃºÂ¤Ã‡Â¤Â¹"
+msgstr "E176: å¼•æ•°ã®æ•°ãŒç„¡åŠ¹ã§ã™"
 
 msgid "E177: Count cannot be specified twice"
-msgstr "E177: Â¥Â«Â¥Â¦Â¥Ã³Â¥ÃˆÂ¤Ã²2½Å»ØÄꤹ¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E177: ã‚«ã‚¦ãƒ³ãƒˆã‚’2é‡æŒ‡å®šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
 
 msgid "E178: Invalid default value for count"
-msgstr "E178: Â¥Â«Â¥Â¦Â¥Ã³Â¥ÃˆÂ¤ÃŽÂ¾ÃŠÃŽÂ¬ÃƒÃ¤¬Ìµ¸ú¤Ç¤¹"
+msgstr "E178: ã‚«ã‚¦ãƒ³ãƒˆã®çœç•¥å€¤ãŒç„¡åŠ¹ã§ã™"
 
 msgid "E179: argument required for -complete"
-msgstr "E179: -Êä´°¤Î¤¿¤á¤Î°ú¿ô¤¬É¬ÃפǤ¹"
+msgstr "E179: -補完ã®ãŸã‚ã®å¼•æ•°ãŒå¿…è¦ã§ã™"
 
 #, c-format
 msgid "E181: Invalid attribute: %s"
-msgstr "E181: ÃŒÂµÂ¸ÃºÂ¤ÃŠÃ‚°À­¤Ç¤¹: %s"
+msgstr "E181: ç„¡åŠ¹ãªå±žæ€§ã§ã™: %s"
 
 msgid "E182: Invalid command name"
-msgstr "E182: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰ÃŒÂ¾Â¤Ã‡Â¤Â¹"
+msgstr "E182: ç„¡åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰åã§ã™"
 
 msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: Â¥Ã¦Â¡Â¼Â¥Â¶Ã„êµÃ¥³¥Þ¥ó¥É¤Ã±ÑÂçʸ»ú¤Ç»Ã¤Þ¤é¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+msgstr "E183: ãƒ¦ãƒ¼ã‚¶å®šç¾©ã‚³ãƒžãƒ³ãƒ‰ã¯è‹±å¤§æ–‡å­—ã§å§‹ã¾ã‚‰ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: äºˆç´„åãªã®ã§, ãƒ¦ãƒ¼ã‚¶å®šç¾©ã‚³ãƒžãƒ³ãƒ‰ã«åˆ©ç”¨ã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "E184: No such user-defined command: %s"
-msgstr "E184: Â¤Â½Â¤ÃŽÂ¥Ã¦Â¡Â¼Â¥Â¶Ã„êµÃ¥³¥Þ¥ó¥É¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E184: ãã®ãƒ¦ãƒ¼ã‚¶å®šç¾©ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E180: Invalid complete value: %s"
-msgstr "E180: ÃŒÂµÂ¸ÃºÂ¤ÃŠÃŠÃ¤Â´Â°Â»Ã˜Ã„ê¤Ç¤¹: %s"
+msgstr "E180: ç„¡åŠ¹ãªè£œå®ŒæŒ‡å®šã§ã™: %s"
 
 msgid "E468: Completion argument only allowed for custom completion"
-msgstr "E468: ÃŠÃ¤Â´Â°Â°ÃºÂ¿Ã´Â¤Ã¥«¥¹¥¿¥àÊä´°¤Ç¤·¤«»ÈÃѤǤ­¤Þ¤»¤ó"
+msgstr "E468: è£œå®Œå¼•æ•°ã¯ã‚«ã‚¹ã‚¿ãƒ è£œå®Œã§ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“"
 
 msgid "E467: Custom completion requires a function argument"
-msgstr "E467: Â¥Â«Â¥Â¹Â¥Â¿Â¥Ã ÃŠÃ¤Â´Â°Â¤Ã‹Â¤Ã°ú¿ô¤È¤·¤Æ´Ø¿ô¤¬É¬ÃפǤ¹"
+msgstr "E467: ã‚«ã‚¹ã‚¿ãƒ è£œå®Œã«ã¯å¼•æ•°ã¨ã—ã¦é–¢æ•°ãŒå¿…è¦ã§ã™"
+
+msgid "unknown"
+msgstr "ä¸æ˜Ž"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Â¥Â«Â¥Ã©Â¡Â¼Â¥Â¹Â¥Â­Â¡Â¼Â¥Ã  %s Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: ã‚«ãƒ©ãƒ¼ã‚¹ã‚­ãƒ¼ãƒ  '%s' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "Greetings, Vim user!"
-msgstr "Vim Â»ÃˆÂ¤Â¤Â¤ÂµÂ¤Ã³Â¡Â¢Â¤Ã¤Â¤Â¢!"
+msgstr "Vim ä½¿ã„ã•ã‚“ã€ã‚„ã‚!"
 
 msgid "E784: Cannot close last tab page"
-msgstr "E784: ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Â¿Â¥Ã–¥Ú¡¼¥¸¤òÊĤ¸¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E784: æœ€å¾Œã®ã‚¿ãƒ–ページを閉ã˜ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
 
 msgid "Already only one tab page"
-msgstr "´û¤Ë¥¿¥Ö¥Ú¡¼¥¸¤Ã1¤Ä¤·¤«¤¢¤ê¤Þ¤»¤ó"
+msgstr "æ—¢ã«ã‚¿ãƒ–ページã¯1ã¤ã—ã‹ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "Edit File in new window"
-msgstr "¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤Ç¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤·¤Þ¤¹"
+msgstr "æ–°ã—ã„ウィンドウã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã—ã¾ã™"
 
 #, c-format
 msgid "Tab page %d"
-msgstr "¥¿¥Ö¥Ú¡¼¥¸ %d"
+msgstr "ã\82¿ã\83\96ã\83\9aã\83¼ã\82¸ %d"
 
 msgid "No swap file"
-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "スワップファイルãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "Append File"
-msgstr "Äɲåե¡¥¤¥ë"
+msgstr "追加ファイル"
 
 msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
 msgstr ""
-"E747: Â¥Ã¥Ã¥Õ¥¡¤¬½¤Àµ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç, Â¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã²ÃŠÃ‘¹¹¤Ç¤­¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäÇ"
-"¾å½ñ)"
+"E747: ãƒãƒƒãƒ•ã‚¡ãŒä¿®æ­£ã•ã‚Œã¦ã„ã‚‹ã®ã§, ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’変更ã§ãã¾ã›ã‚“ (! ã‚’追加ã§"
+"上書)"
 
 msgid "E186: No previous directory"
-msgstr "E186: Ã°¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E186: å‰ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E187: Unknown"
-msgstr "E187: ÃŒÂ¤ÃƒÃŽ"
+msgstr "E187: æœªçŸ¥"
 
 msgid "E465: :winsize requires two number arguments"
-msgstr "E465: "
+msgstr "E465: :winsize ã«ã¯2ã¤ã®æ•°å€¤ã®å¼•æ•°ãŒå¿…è¦ã§ã™"
 
 #, c-format
 msgid "Window position: X %d, Y %d"
-msgstr "¥¦¥£¥ó¥É¥¦°ÌÃÖ: X %d, Y %d"
+msgstr "ウィンドウä½ç½®: X %d, Y %d"
 
 msgid "E188: Obtaining window position not implemented for this platform"
 msgstr ""
-"E188: Â¤Â³Â¤ÃŽÂ¥Ã—¥é¥Ã¥È¥Û¡¼¥à¤Ë¤Ã¥¦¥£¥ó¥É¥¦°ÌÃ֤μèÆÀµ¡Ç½¤Ã¼ÂÃõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+"E188: ã“ã®ãƒ—ラットホームã«ã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ä½ç½®ã®å–得機能ã¯å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos Â¤Ã‹Â¤Ã2¤Ä¤Î¿ôÃäΰú¿ô¤¬É¬ÃפǤ¹"
+msgstr "E466: :winpos ã«ã¯2ã¤ã®æ•°å€¤ã®å¼•æ•°ãŒå¿…è¦ã§ã™"
 
 msgid "Save Redirection"
-msgstr "¥ê¥À¥¤¥ì¥¯¥È¤òÊø¤·¤Þ¤¹"
+msgstr "リダイレクトをä¿å­˜ã—ã¾ã™"
 
 msgid "Save View"
-msgstr "¥Ó¥å¡¼¤òÊø¤·¤Þ¤¹"
+msgstr "ビューをä¿å­˜ã—ã¾ã™"
 
 msgid "Save Session"
-msgstr "¥»¥Ã¥·¥ç¥ó¾ðÊó¤òÊø¤·¤Þ¤¹"
+msgstr "セッション情報をä¿å­˜ã—ã¾ã™"
 
 msgid "Save Setup"
-msgstr "ÀßÄê¤òÊø¤·¤Þ¤¹"
+msgstr "設定をä¿å­˜ã—ã¾ã™"
 
 #, c-format
 msgid "E739: Cannot create directory: %s"
-msgstr "E739: Â¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã²ÂºÃ®Ã€Â®Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E739: ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作æˆã§ãã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" Â¤Â¬Ã‚¸ºß¤·¤Þ¤¹ (¾å½ñ¤¹¤ë¤Ë¤à! Â¤Ã²Ã„ɲ䷤Ƥ¯¤À¤µ¤¤)"
+msgstr "E189: \"%s\" ãŒå­˜åœ¨ã—ã¾ã™ (上書ã™ã‚‹ã«ã¯ ! ã‚’追加ã—ã¦ãã ã•ã„)"
 
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: \"%s\" Â¤Ã²Â½Ã±Â¹Ã¾Â¤ÃŸÃѤȤ·¤Æ³«¤±¤Þ¤»¤ó"
+msgstr "E190: \"%s\" ã‚’書込ã¿ç”¨ã¨ã—ã¦é–‹ã‘ã¾ã›ã‚“"
 
 #. set mark
 msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: Â°ÃºÂ¿Ã´Â¤Ãʸ»ú¤«Ã°¿Ê/¸åÂ९¥©¡¼¥È¤Ç¤·¤Ê¤±¤ì¤Ã¤¤¤±¤Þ¤»¤ó"
+msgstr "E191: å¼•æ•°ã¯1文字ã®è‹±å­—ã‹å¼•ç”¨ç¬¦ (' ã‹ `) ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
 
 msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: :normal Â¤ÃŽÂºÃ†ÂµÂ¢ÃøÃѤ¬¿¼¤¯¤Ê¤ê²á¤®¤Þ¤·¤¿"
+msgstr "E192: :normal ã®å†å¸°åˆ©ç”¨ãŒæ·±ããªã‚ŠéŽãŽã¾ã—ãŸ"
+
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< ã¯ +eval æ©Ÿèƒ½ãŒç„¡ã„ã¨åˆ©ç”¨ã§ãã¾ã›ã‚“"
 
 msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: '#'¤òÃÖ¤­´¹¤¨¤ëÉû¥Õ¥¡¥¤¥ë¤Î̾𤬤¢¤ê¤Þ¤»¤ó"
+msgstr "E194: '#'ã‚’ç½®ãæ›ãˆã‚‹å‰¯ãƒ•ã‚¡ã‚¤ãƒ«ã®åå‰ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: \"<afile>\"¤òÃÖ¤­´¹¤¨¤ëautocommand¤Î¥Õ¥¡¥¤¥ë̾¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E495: \"<afile>\"ã‚’ç½®ãæ›ãˆã‚‹autocommandã®ãƒ•ã‚¡ã‚¤ãƒ«åãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: \"<abuf>\"¤òÃÖ¤­´¹¤¨¤ëautocommand¥ååե¡Èֹ椬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E496: \"<abuf>\"ã‚’ç½®ãæ›ãˆã‚‹autocommandãƒãƒƒãƒ•ã‚¡ç•ªå·ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: \"<amatch>\"¤òÃÖ¤­´¹¤¨¤ëautocommand¤Î³ºÅö̾¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E497: \"<amatch>\"ã‚’ç½®ãæ›ãˆã‚‹autocommandã®è©²å½“åãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: \"<sfile>\"¤òÃÖ¤­´¹¤¨¤ë :source Ã‚þåե¡¥¤¥ë̾¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E498: \"<sfile>\"ã‚’ç½®ãæ›ãˆã‚‹ :source å¯¾è±¡ãƒ•ã‚¡ã‚¤ãƒ«åãŒã‚ã‚Šã¾ã›ã‚“"
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: \"<slnum>\"ã‚’ç½®ãæ›ãˆã‚‹è¡Œç•ªå·ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr ""
-"E499: '%' Â¤Ã¤ '#' Â¤Â¬ÃŒÂµÃŒÂ¾Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŠÂ¤ÃŽÂ¤Ã‡ \":p:h\" Â¤Ã²ÃˆÂ¼Â¤Ã¯Â¤ÃŠÂ¤Â¤Â»ÃˆÂ¤Â¤ÃŠÃ½Â¤Ã¤Ç¤­¤Þ¤»¤ó"
+"E499: '%' ã‚„ '#' ãŒç„¡åファイルãªã®ã§ \":p:h\" ã‚’ä¼´ã‚ãªã„使ã„æ–¹ã¯ã§ãã¾ã›ã‚“"
 
 msgid "E500: Evaluates to an empty string"
-msgstr "E500: Â¶ÃµÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃˆÂ¤Â·Â¤Ã†Ã‰Â¾Â²Ã¤µ¤ì¤Þ¤·¤¿"
+msgstr "E500: ç©ºæ–‡å­—列ã¨ã—ã¦è©•ä¾¡ã•ã‚Œã¾ã—ãŸ"
 
 msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: viminfo¥Õ¥¡¥¤¥ë¤òÆɹþÃѤȤ·¤Æ³«¤±¤Þ¤»¤ó"
+msgstr "E195: viminfoファイルを読込用ã¨ã—ã¦é–‹ã‘ã¾ã›ã‚“"
 
 msgid "E196: No digraphs in this version"
-msgstr "E196: Â¤Â³Â¤ÃŽÂ¥Ã¡¼¥¸¥ç¥ó¤Ë¹ç»ú¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E196: ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«åˆå­—ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr "E608: 'Vim' Â¤Ã‡Â»Ã¤Þ¤ëÎã³°¤à:throw Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E608: 'Vim' ã§å§‹ã¾ã‚‹ä¾‹å¤–㯠:throw ã§ãã¾ã›ã‚“"
 
 #. always scroll up, don't overwrite
 #, c-format
 msgid "Exception thrown: %s"
-msgstr "Îã³°¤¬È¯À¸¤·¤Þ¤·¤¿: %s"
+msgstr "例外ãŒç™ºç”Ÿã—ã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "Exception finished: %s"
-msgstr "Îã³°¤¬¼ý«¤·¤Þ¤·¤¿: %s"
+msgstr "例外ãŒåŽæŸã—ã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "Exception discarded: %s"
-msgstr "Îã³°¤¬ÇË´þ¤µ¤ì¤Þ¤·¤¿: %s"
+msgstr "例外ãŒç ´æ£„ã•ã‚Œã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "%s, line %ld"
-msgstr "%s, Â¹Ã” %ld"
+msgstr "%s, è¡Œ %ld"
 
 #. always scroll up, don't overwrite
 #, c-format
 msgid "Exception caught: %s"
-msgstr "Îã³°¤¬Ê᪤µ¤ì¤Þ¤·¤¿: %s"
+msgstr "例外ãŒæ•æ‰ã•ã‚Œã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "%s made pending"
-msgstr "%s Â¤Ã‹Â¤Ã¨Â¤ÃªÃŒÂ¤Â·Ã¨Ã„ê¾õÂÖ¤¬À¸¤¸¤Þ¤·¤¿"
+msgstr "%s ã«ã‚ˆã‚Šæœªæ±ºå®šçŠ¶æ…‹ãŒç”Ÿã˜ã¾ã—ãŸ"
 
 #, c-format
 msgid "%s resumed"
-msgstr "%s Â¤Â¬ÂºÃ†Â³Â«Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "%s ãŒå†é–‹ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "%s discarded"
-msgstr "%s Â¤Â¬Ã‡Ã‹Â´Ã¾Â¤ÂµÂ¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "%s ãŒç ´æ£„ã•ã‚Œã¾ã—ãŸ"
 
 msgid "Exception"
-msgstr "Îã³°"
+msgstr "例外"
 
 msgid "Error and interrupt"
-msgstr "¥¨¥é¡¼¤È³ä¹þ¤ß"
+msgstr "エラーã¨å‰²è¾¼ã¿"
 
 msgid "Error"
-msgstr "¥¨¥é¡¼"
+msgstr "ã\82¨ã\83©ã\83¼"
 
 #. if (pending & CSTP_INTERRUPT)
 msgid "Interrupt"
-msgstr "³ä¹þ¤ß"
+msgstr "割込ã¿"
 
 msgid "E579: :if nesting too deep"
-msgstr "E579: :if Â¤ÃŽÃ†Ã¾Â¤Ã¬Â»Ã’¤¬¿¼²á¤®¤Þ¤¹"
+msgstr "E579: :if ã®å…¥ã‚Œå­ãŒæ·±éŽãŽã¾ã™"
 
 msgid "E580: :endif without :if"
-msgstr "E580: :if Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :endif Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E580: :if ã®ãªã„ :endif ãŒã‚ã‚Šã¾ã™"
 
 msgid "E581: :else without :if"
-msgstr "E581: :if Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :else Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E581: :if ã®ãªã„ :else ãŒã‚ã‚Šã¾ã™"
 
 msgid "E582: :elseif without :if"
-msgstr "E582: :if Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :elseif Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E582: :if ã®ãªã„ :elseif ãŒã‚ã‚Šã¾ã™"
 
 msgid "E583: multiple :else"
-msgstr "E583: ÃŠÂ£Â¿Ã´Â¤ÃŽ :else Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E583: è¤‡æ•°ã® :else ãŒã‚ã‚Šã¾ã™"
 
 msgid "E584: :elseif after :else"
-msgstr "E584: :else Â¤ÃŽÂ¸Ã¥Â¤Ã‹ :elseif Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E584: :else ã®å¾Œã« :elseif ãŒã‚ã‚Šã¾ã™"
 
 msgid "E585: :while/:for nesting too deep"
-msgstr "E585: :while Â¤Ã¤ :for Â¤ÃŽÃ†Ã¾Â¤Ã¬Â»Ã’¤¬¿¼²á¤®¤Þ¤¹"
+msgstr "E585: :while ã‚„ :for ã®å…¥ã‚Œå­ãŒæ·±éŽãŽã¾ã™"
 
 msgid "E586: :continue without :while or :for"
-msgstr "E586: :while Â¤Ã¤ :for Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :continue Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E586: :while ã‚„ :for ã®ãªã„ :continue ãŒã‚ã‚Šã¾ã™"
 
 msgid "E587: :break without :while or :for"
-msgstr "E587: :while Â¤Ã¤ :for Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :break Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E587: :while ã‚„ :for ã®ãªã„ :break ãŒã‚ã‚Šã¾ã™"
 
 msgid "E732: Using :endfor with :while"
-msgstr "E732: :endfor Â¤Ã² :while Â¤ÃˆÃȤ߹ç¤ï¤»¤Æ¤¤¤Þ¤¹"
+msgstr "E732: :endfor ã‚’ :while ã¨çµ„ã¿åˆã‚ã›ã¦ã„ã¾ã™"
 
 msgid "E733: Using :endwhile with :for"
-msgstr "E733: :endwhile Â¤Ã² :for Â¤ÃˆÃȤ߹ç¤ï¤»¤Æ¤¤¤Þ¤¹"
+msgstr "E733: :endwhile ã‚’ :for ã¨çµ„ã¿åˆã‚ã›ã¦ã„ã¾ã™"
 
 msgid "E601: :try nesting too deep"
-msgstr "E601: :try Â¤ÃŽÃ†Ã¾Â¤Ã¬Â»Ã’¤¬¿¼²á¤®¤Þ¤¹"
+msgstr "E601: :try ã®å…¥ã‚Œå­ãŒæ·±éŽãŽã¾ã™"
 
 msgid "E603: :catch without :try"
-msgstr "E603: :try Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :catch Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E603: :try ã®ãªã„ :catch ãŒã‚ã‚Šã¾ã™"
 
 #. Give up for a ":catch" after ":finally" and ignore it.
 #. * Just parse.
 msgid "E604: :catch after :finally"
-msgstr "E604: :finally Â¤ÃŽÂ¸Ã¥Â¤Ã‹ :catch Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E604: :finally ã®å¾Œã« :catch ãŒã‚ã‚Šã¾ã™"
 
 msgid "E606: :finally without :try"
-msgstr "E606: :try Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :finally Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E606: :try ã®ãªã„ :finally ãŒã‚ã‚Šã¾ã™"
 
 #. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
-msgstr "E607: ÃŠÂ£Â¿Ã´Â¤ÃŽ :finalyy Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E607: è¤‡æ•°ã® :finally ãŒã‚ã‚Šã¾ã™"
 
 msgid "E602: :endtry without :try"
-msgstr "E602: :try Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :endtry Â¤Ã‡Â¤Â¹"
+msgstr "E602: :try ã®ãªã„ :endtry ã§ã™"
 
 msgid "E193: :endfunction not inside a function"
-msgstr "E193: Â´Ã˜Â¿Ã´Â¤ÃŽÂ³Â°Â¤Ã‹ :endfunction Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "E193: é–¢æ•°ã®å¤–ã« :endfunction ãŒã‚ã‚Šã¾ã—ãŸ"
 
 msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Â¸Â½ÂºÃŸÂ¤Ã¾¤Î¥Ã¥Ã¥Õ¥¡¤òÊÔ½¸¤¹¤ë¤³¤È¤Ãµö¤µ¤ì¤Þ¤»¤ó"
+msgstr "E788: ç¾åœ¨ã¯ä»–ã®ãƒãƒƒãƒ•ã‚¡ã‚’編集ã™ã‚‹ã“ã¨ã¯è¨±ã•ã‚Œã¾ã›ã‚“"
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: ç¾åœ¨ã¯ãƒãƒƒãƒ•ã‚¡æƒ…報を変更ã™ã‚‹ã“ã¨ã¯è¨±ã•ã‚Œã¾ã›ã‚“"
 
 msgid "tagname"
-msgstr "¥¿¥°Ì¾"
+msgstr "ã‚¿ã‚°å"
 
 msgid " kind file\n"
-msgstr " Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¼Ã¯ÃŽÃ \n"
+msgstr " ãƒ•ã‚¡ã‚¤ãƒ«ç¨®é¡ž\n"
 
 msgid "'history' option is zero"
-msgstr "¥ª¥×¥·¥ç¥ó 'history' Â¤Â¬Â¥Â¼Â¥Ã­Â¤Ã‡Â¤Â¹"
+msgstr "オプション 'history' ãŒã‚¼ãƒ­ã§ã™"
 
 #, c-format
 msgid ""
@@ -1452,361 +1575,381 @@ msgid ""
 "# %s History (newest to oldest):\n"
 msgstr ""
 "\n"
-"# %s Â¹Ã ÃŒÃœÂ¤ÃŽÃúÎò (¿·¤·¤¤¤â¤Î¤«¤é¸Å¤¤¤â¤Î¤Ø):\n"
+"# %s é …ç›®ã®å±¥æ­´ (æ–°ã—ã„ã‚‚ã®ã‹ã‚‰å¤ã„ã‚‚ã®ã¸):\n"
 
 msgid "Command Line"
-msgstr "¥³¥Þ¥ó¥É¥é¥¤¥ó"
+msgstr "コマンドライン"
 
 msgid "Search String"
-msgstr "¸¡º÷ʸ»úÎó"
+msgstr "検索文字列"
 
 msgid "Expression"
-msgstr "¼°"
+msgstr "å¼"
 
 msgid "Input Line"
-msgstr "ÆþÎùÔ"
+msgstr "入力行"
 
 msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar Â¤Â¬Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Ã„¹¤òĶ¤¨¤Þ¤·¤¿"
+msgstr "E198: cmd_pchar ãŒã‚³ãƒžãƒ³ãƒ‰é•·ã‚’超ãˆã¾ã—ãŸ"
 
 msgid "E199: Active window or buffer deleted"
-msgstr "E199: Â¥Â¢Â¥Â¯Â¥Ã†Â¥Â£Â¥Ã–¤Ê¥¦¥£¥ó¥É¥¦¤«¥Ã¥Ã¥Õ¥¡¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿"
+msgstr "E199: ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‹ãƒãƒƒãƒ•ã‚¡ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
+
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: autocommandãŒãƒãƒƒãƒ•ã‚¡ã‹ãƒãƒƒãƒ•ã‚¡åを変更ã—ã¾ã—ãŸ"
 
 msgid "Illegal file name"
-msgstr "ÉÔÀµ¤Ê¥Õ¥¡¥¤¥ë̾"
+msgstr "ä¸æ­£ãªãƒ•ã‚¡ã‚¤ãƒ«å"
 
 msgid "is a directory"
-msgstr " Â¤Ã¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹"
+msgstr " ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™"
 
 msgid "is not a file"
-msgstr " Â¤Ã¥Õ¥¡¥¤¥ë¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr " ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "is a device (disabled with 'opendevice' option)"
-msgstr " Â¤Ã¥Ç¥Ã¥¤¥¹¤Ç¤¹ ('opendevice' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ç²óÈò¤Ç¤­¤Þ¤¹)"
+msgstr " ã¯ãƒ‡ãƒã‚¤ã‚¹ã§ã™ ('opendevice' ã‚ªãƒ—ションã§å›žé¿ã§ãã¾ã™)"
 
 msgid "[New File]"
-msgstr "[¿·¥Õ¥¡¥¤¥ë]"
+msgstr "[新ファイル]"
 
 msgid "[New DIRECTORY]"
-msgstr "[¿·µ¬¥Ç¥£¥ì¥¯¥È¥ê]"
+msgstr "[æ–°è¦ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª]"
 
 msgid "[File too big]"
-msgstr "[¥Õ¥¡¥¤¥ë²áÂç]"
+msgstr "[ファイルéŽå¤§]"
 
 msgid "[Permission Denied]"
-msgstr "[ǧ²Ä¤¬¤¢¤ê¤Þ¤»¤ó]"
+msgstr "[èªå¯ãŒã‚ã‚Šã¾ã›ã‚“]"
 
 msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200: *ReadPre autocommand Â¤Â¬Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²Ã†Ã‰Â¹Ã¾Ã‰Ã”²Ä¤Ë¤·¤Þ¤·¤¿"
+msgstr "E200: *ReadPre autocommand ãŒãƒ•ã‚¡ã‚¤ãƒ«ã‚’読込ä¸å¯ã«ã—ã¾ã—ãŸ"
 
 msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: *ReadPre autocommand Â¤Ã¸½ºß¤Î¥Ã¥Ã¥Õ¥¡¤òÊѤ¨¤é¤ì¤Þ¤»¤ó"
+msgstr "E201: *ReadPre autocommand ã¯ç¾åœ¨ã®ãƒãƒƒãƒ•ã‚¡ã‚’変ãˆã‚‰ã‚Œã¾ã›ã‚“"
 
 msgid "Vim: Reading from stdin...\n"
-msgstr "Vim: Ã‰Â¸Â½Ã Ã†Ã¾ÃŽÃ¤«¤éÆɹþÃæ...\n"
+msgstr "Vim: æ¨™æº–入力ã‹ã‚‰èª­è¾¼ä¸­...\n"
 
 msgid "Reading from stdin..."
-msgstr "ɸ½àÆþÎ䫤éÆɹþ¤ßÃæ..."
+msgstr "標準入力ã‹ã‚‰èª­è¾¼ã¿ä¸­..."
 
 #. Re-opening the original file failed!
 msgid "E202: Conversion made file unreadable!"
-msgstr "E202: ÃŠÃ‘´¹¤¬¥Õ¥¡¥¤¥ë¤òÆɹþÉԲĤˤ·¤Þ¤·¤¿"
+msgstr "E202: å¤‰æ›ãŒãƒ•ã‚¡ã‚¤ãƒ«ã‚’読込ä¸å¯ã«ã—ã¾ã—ãŸ"
 
 msgid "[fifo/socket]"
-msgstr "[FIFO/¥½¥±¥Ã¥È]"
+msgstr "[FIFO/ソケット]"
 
 msgid "[fifo]"
 msgstr "[FIFO]"
 
 msgid "[socket]"
-msgstr "[¥½¥±¥Ã¥È]"
+msgstr "[ソケット]"
 
 msgid "[character special]"
-msgstr "[¥­¥ã¥é¥¯¥¿¡¦¥Ç¥Ã¥¤¥¹]"
-
-msgid "[RO]"
-msgstr "[ÆÉÀì]"
+msgstr "[キャラクタ・デãƒã‚¤ã‚¹]"
 
 msgid "[CR missing]"
-msgstr "[CR̵]"
-
-msgid "[NL found]"
-msgstr "[NLÍ­]"
+msgstr "[CRç„¡]"
 
 msgid "[long lines split]"
-msgstr "[Ĺ¹Ôʬ³ä]"
+msgstr "[長行分割]"
 
 msgid "[NOT converted]"
-msgstr "[̤ÊÑ´¹]"
+msgstr "[未変æ›]"
 
 msgid "[converted]"
-msgstr "[ÊÑ´¹ºÑ]"
+msgstr "[変æ›æ¸ˆ]"
+
+msgid "[blowfish]"
+msgstr "[blowfishæš—å·åŒ–]"
 
 msgid "[crypted]"
-msgstr "[°Å¹æ²½]"
+msgstr "[æš—å·åŒ–]"
 
 #, c-format
 msgid "[CONVERSION ERROR in line %ld]"
-msgstr "[%ld Â¹Ã”ÌܤÇÊÑ´¹¥¨¥é¡¼]"
+msgstr "[%ld Ã¨Â¡\8cç\9b®ã\81§å¤\89æ\8f\9bã\82¨ã\83©ã\83¼]"
 
 #, c-format
 msgid "[ILLEGAL BYTE in line %ld]"
-msgstr "[%ld Â¹Ã”ÌܤÎÉÔÀµ¤Ê¥Ã¥¤¥È]"
+msgstr "[%ld è¡Œç›®ã®ä¸æ­£ãªãƒã‚¤ãƒˆ]"
 
 msgid "[READ ERRORS]"
-msgstr "[Æɹþ¥¨¥é¡¼]"
+msgstr "[読込ã\82¨ã\83©ã\83¼]"
 
 msgid "Can't find temp file for conversion"
-msgstr "ÊÑ´¹¤ËɬÃפʰì»þ¥Õ¥¡¥¤¥ë¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó"
+msgstr "変æ›ã«å¿…è¦ãªä¸€æ™‚ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "Conversion with 'charconvert' failed"
-msgstr "'charconvert' Â¤Ã‹Â¤Ã¨Â¤Ã«ÃŠÃ‘´¹¤¬¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "'charconvert' ã«ã‚ˆã‚‹å¤‰æ›ãŒå¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "can't read output of 'charconvert'"
-msgstr "'charconvert' Â¤ÃŽÂ½ÃÎäòÆɹþ¤á¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "'charconvert' ã®å‡ºåŠ›ã‚’読込ã‚ã¾ã›ã‚“ã§ã—ãŸ"
+
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: ãƒ•ã‚¡ã‚¤ãƒ«ãŒæœªçŸ¥ã®æ–¹æ³•ã§æš—å·åŒ–ã•ã‚Œã¦ã„ã¾ã™"
 
 msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "E676: acwrite¥ååե¡¤Î³ºÅö¤¹¤ëautocommand¤Ã¸ºß¤·¤Þ¤»¤ó"
+msgstr "E676: acwriteãƒãƒƒãƒ•ã‚¡ã®è©²å½“ã™ã‚‹autocommandã¯å­˜åœ¨ã—ã¾ã›ã‚“"
 
 msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr "E203: ÃŠÃ¸¤¹¤ë¥Ã¥Ã¥Õ¥¡¤òautocommand¤¬ºï½ü¤«²òÊü¤·¤Þ¤·¤¿"
+msgstr "E203: ä¿å­˜ã™ã‚‹ãƒãƒƒãƒ•ã‚¡ã‚’autocommandãŒå‰Šé™¤ã‹è§£æ”¾ã—ã¾ã—ãŸ"
 
 msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: autocommand¤¬Ã½´ü¤»¤ÌÊýË¡¤Ç¹Ô¿ô¤òÊѹ¹¤·¤Þ¤·¤¿"
+msgstr "E204: autocommandãŒäºˆæœŸã›ã¬æ–¹æ³•ã§è¡Œæ•°ã‚’変更ã—ã¾ã—ãŸ"
 
 # Added at 19-Jan-2004.
 msgid "NetBeans disallows writes of unmodified buffers"
-msgstr "NetBeans¤Ã̤Êѹ¹¤Î¥Ã¥Ã¥Õ¥¡¤ò¾å½ñ¤¹¤ë¤³¤È¤Ãµö²Ä¤·¤Æ¤¤¤Þ¤»¤ó"
+msgstr "NetBeansã¯æœªå¤‰æ›´ã®ãƒãƒƒãƒ•ã‚¡ã‚’上書ã™ã‚‹ã“ã¨ã¯è¨±å¯ã—ã¦ã„ã¾ã›ã‚“"
 
 msgid "Partial writes disallowed for NetBeans buffers"
-msgstr "NetBeans¥ååե¡¤Î°ìÉô¤ò½ñ¤­½Ã¤¹¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "NetBeansãƒãƒƒãƒ•ã‚¡ã®ä¸€éƒ¨ã‚’書ã出ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“"
 
 msgid "is not a file or writable device"
-msgstr "¤Ã¥Õ¥¡¥¤¥ë¤Ç¤â½ñ¹þ¤ß²Äǽ¥Ç¥Ã¥¤¥¹¤Ç¤â¤¢¤ê¤Þ¤»¤ó"
+msgstr "ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã§ã‚‚書込ã¿å¯èƒ½ãƒ‡ãƒã‚¤ã‚¹ã§ã‚‚ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "writing to device disabled with 'opendevice' option"
-msgstr "'opendevice' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ë¤è¤ê¥Ç¥Ã¥¤¥¹¤Ø¤Î½ñ¤­¹þ¤ß¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "'opendevice' ã‚ªãƒ—ションã«ã‚ˆã‚Šãƒ‡ãƒã‚¤ã‚¹ã¸ã®æ›¸ãè¾¼ã¿ã¯ã§ãã¾ã›ã‚“"
 
 msgid "is read-only (add ! to override)"
-msgstr "¤ÃÆɹþÀìÃѤǤ¹ (¶¯À©½ñ¹þ¤Ë¤à! Â¤Ã²Ã„ɲÃ)"
+msgstr "ã¯èª­è¾¼å°‚用ã§ã™ (強制書込ã«ã¯ ! ã‚’追加)"
 
 msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: Â¥Ã¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÊø¤Ç¤­¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäǶ¯À©Êø)"
+msgstr "E506: ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルをä¿å­˜ã§ãã¾ã›ã‚“ (! ã‚’追加ã§å¼·åˆ¶ä¿å­˜)"
 
 msgid "E507: Close error for backup file (add ! to override)"
 msgstr ""
-"E507: Â¥Ã¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÊĤ¸¤ëºÃ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿ (! Â¤Ã²Ã„ɲäǶ¯À©)"
+"E507: ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルを閉ã˜ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠(! ã‚’追加ã§å¼·åˆ¶)"
 
 msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: Â¥Ã¥Ã¥¯¥¢¥Ã¥×ÃÑ¥Õ¥¡¥¤¥ë¤òÆɹþ¤á¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäǶ¯À©Æɹþ)"
+msgstr "E508: ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—用ファイルを読込ã‚ã¾ã›ã‚“ (! ã‚’追加ã§å¼·åˆ¶èª­è¾¼)"
 
 msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: Â¥Ã¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òºî¤ì¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäǶ¯À©ºîÀ®)"
+msgstr "E509: ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルを作れã¾ã›ã‚“ (! ã‚’追加ã§å¼·åˆ¶ä½œæˆ)"
 
 msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: Â¥Ã¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òºî¤ì¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäǶ¯À©ºîÀ®)"
+msgstr "E510: ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルを作れã¾ã›ã‚“ (! ã‚’追加ã§å¼·åˆ¶ä½œæˆ)"
 
 msgid "E460: The resource fork would be lost (add ! to override)"
-msgstr "E460: Â¥ÃªÂ¥Â½Â¡Â¼Â¥Â¹Â¥Ã•Â¥Â©Â¡Â¼Â¥Â¯Â¤Â¬Â¼ÂºÂ¤Ã¯Â¤Ã¬Â¤Ã«Â¤Â«Â¤Ã¢Â¤Â·Â¤Ã¬Â¤ÃžÂ¤Â»Â¤Ã³ (! Â¤Ã²Ã„ɲäǶ¯À©)"
+msgstr "E460: ãƒªã‚½ãƒ¼ã‚¹ãƒ•ã‚©ãƒ¼ã‚¯ãŒå¤±ã‚れるã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ (! ã‚’追加ã§å¼·åˆ¶)"
 
 msgid "E214: Can't find temp file for writing"
-msgstr "E214: ÃŠÃ¸ÃÑ°ì»þ¥Õ¥¡¥¤¥ë¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó"
+msgstr "E214: ä¿å­˜ç”¨ä¸€æ™‚ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: ÃŠÃ‘´¹¤Ç¤­¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäÇÊÑ´¹¤»¤º¤ËÊø)"
+msgstr "E213: å¤‰æ›ã§ãã¾ã›ã‚“ (! ã‚’追加ã§å¤‰æ›ã›ãšã«ä¿å­˜)"
 
 msgid "E166: Can't open linked file for writing"
-msgstr "E166: Â¥ÃªÂ¥Ã³Â¥Â¯Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹Â½Ã±Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E166: ãƒªãƒ³ã‚¯ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸è¾¼ã‚ã¾ã›ã‚“"
 
 msgid "E212: Can't open file for writing"
-msgstr "E212: Â½Ã±Â¹Ã¾Â¤ÃŸÃѤ˥ե¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó"
+msgstr "E212: æ›¸è¾¼ã¿ç”¨ã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 msgid "E667: Fsync failed"
-msgstr "E667: fsync Â¤Ã‹Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+msgstr "E667: fsync ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "E512: Close failed"
-msgstr "E512: ÃŠÃ„¤¸¤ë¤³¤È¤Ë¼ºÇÔ"
+msgstr "E512: é–‰ã˜ã‚‹ã“ã¨ã«å¤±æ•—"
 
 msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr "E513: Â½Ã±Â¹Ã¾Â¤ÃŸÂ¥Â¨Â¥Ã©Â¡Â¼, ÃŠÃ‘´¹¼ºÇÔ (¾å½ñ¤¹¤ë¤Ë¤à'fenc' Â¤Ã²Â¶ÃµÂ¤Ã‹Â¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤)"
+msgstr "E513: æ›¸è¾¼ã¿ã‚¨ãƒ©ãƒ¼, å¤‰æ›å¤±æ•— (上書ã™ã‚‹ã«ã¯ 'fenc' ã‚’空ã«ã—ã¦ãã ã•ã„)"
+
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: æ›¸è¾¼ã¿ã‚¨ãƒ©ãƒ¼, å¤‰æ›å¤±æ•—, è¡Œæ•° %ld (上書ã™ã‚‹ã«ã¯ 'fenc' ã‚’空ã«ã—ã¦ãã ã•"
+"ã„)"
 
 msgid "E514: write error (file system full?)"
-msgstr "E514: Â½Ã±Â¹Ã¾Â¤ÃŸÂ¥Â¨Â¥Ã©Â¡Â¼, (¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤¬ËþÇÕ?)"
+msgstr "E514: æ›¸è¾¼ã¿ã‚¨ãƒ©ãƒ¼, (ファイルシステムãŒæº€æ¯?)"
 
 msgid " CONVERSION ERROR"
-msgstr " ÃŠÃ‘´¹¥¨¥é¡¼"
+msgstr " å¤‰æ›ã‚¨ãƒ©ãƒ¼"
+
+#, c-format
+msgid " in line %ld;"
+msgstr "è¡Œ %ld;"
 
 msgid "[Device]"
-msgstr "[¥Ç¥Ã¥¤¥¹]"
+msgstr "[ã\83\87ã\83\90ã\82¤ã\82¹]"
 
 msgid "[New]"
-msgstr "[¿·]"
+msgstr "[æ–°]"
 
 msgid " [a]"
 msgstr " [a]"
 
 msgid " appended"
-msgstr " Ã„ɲÃ"
+msgstr " è¿½åŠ "
 
 msgid " [w]"
 msgstr " [w]"
 
 msgid " written"
-msgstr " Â½Ã±Â¹Ã¾Â¤ÃŸ"
+msgstr " æ›¸è¾¼ã¿"
 
 msgid "E205: Patchmode: can't save original file"
-msgstr "E205: patchmode: Â¸Â¶Ã‹ÃœÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃŠÃ¸¤Ç¤­¤Þ¤»¤ó"
+msgstr "E205: patchmode: åŽŸæœ¬ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ã§ãã¾ã›ã‚“"
 
 msgid "E206: patchmode: can't touch empty original file"
-msgstr "E206: patchmode: Â¶ÃµÂ¤ÃŽÂ¸Â¶Ã‹ÃœÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²touch¤Ç¤­¤Þ¤»¤ó"
+msgstr "E206: patchmode: ç©ºã®åŽŸæœ¬ãƒ•ã‚¡ã‚¤ãƒ«ã‚’touchã§ãã¾ã›ã‚“"
 
 msgid "E207: Can't delete backup file"
-msgstr "E207: Â¥Ã¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ò¾Ã¤»¤Þ¤»¤ó"
+msgstr "E207: ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ファイルを消ã›ã¾ã›ã‚“"
 
 msgid ""
 "\n"
 "WARNING: Original file may be lost or damaged\n"
 msgstr ""
 "\n"
-"·Ù¹ð: Â¸Â¶Ã‹ÃœÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¼ÂºÂ¤Ã¯Â¤Ã¬Â¤Â¿Â¤Â«ÃŠÃ‘¹¹¤µ¤ì¤Þ¤·¤¿\n"
+"警告: åŽŸæœ¬ãƒ•ã‚¡ã‚¤ãƒ«ãŒå¤±ã‚ã‚ŒãŸã‹å¤‰æ›´ã•ã‚Œã¾ã—ãŸ\n"
 
 msgid "don't quit the editor until the file is successfully written!"
-msgstr "¥Õ¥¡¥¤¥ë¤ÎÊø¤ËÀ®¸ù¤¹¤ë¤Þ¤Ç¥¨¥Ç¥£¥¿¤ò½ªÎ»¤·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤!"
+msgstr "ファイルã®ä¿å­˜ã«æˆåŠŸã™ã‚‹ã¾ã§ã‚¨ãƒ‡ã‚£ã‚¿ã‚’終了ã—ãªã„ã§ãã ã•ã„!"
 
 msgid "[dos]"
 msgstr "[dos]"
 
 msgid "[dos format]"
-msgstr "[dos¥Õ¥©¡¼¥Þ¥Ã¥È]"
+msgstr "[dosフォーマット]"
 
 msgid "[mac]"
 msgstr "[mac]"
 
 msgid "[mac format]"
-msgstr "[mac¥Õ¥©¡¼¥Þ¥Ã¥È]"
+msgstr "[macフォーマット]"
 
 msgid "[unix]"
 msgstr "[unix]"
 
 msgid "[unix format]"
-msgstr "[unix¥Õ¥©¡¼¥Þ¥Ã¥È]"
+msgstr "[unixフォーマット]"
 
 msgid "1 line, "
-msgstr "1 Â¹Ã”, "
+msgstr "1 è¡Œ, "
 
 #, c-format
 msgid "%ld lines, "
-msgstr "%ld Â¹Ã”, "
+msgstr "%ld è¡Œ, "
 
 msgid "1 character"
-msgstr "1 ÃŠÂ¸Â»Ãº"
+msgstr "1 æ–‡å­—"
+
+#, c-format
+msgid "%lld characters"
+msgstr "%lld æ–‡å­—"
 
+#. Explicit typecast avoids warning on Mac OS X 10.6
 #, c-format
 msgid "%ld characters"
-msgstr "%ld ÃŠÂ¸Â»Ãº"
+msgstr "%ld æ–‡å­—"
 
 msgid "[noeol]"
 msgstr "[noeol]"
 
 msgid "[Incomplete last line]"
-msgstr "[ºÇ½ª¹Ô¤¬ÉÔ´°Ã´]"
+msgstr "[最終行ãŒä¸å®Œå…¨]"
 
 #. don't overwrite messages here
 #. must give this prompt
 #. don't use emsg() here, don't want to flush the buffers
 msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "·Ù¹ð: Ã†Ã‰Â¹Ã¾Â¤Ã³Â¤Ã€Â¸Ã¥Â¤Ã‹Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹ÃŠÃ‘¹¹¤¬¤¢¤ê¤Þ¤·¤¿!!!"
+msgstr "警告: èª­è¾¼ã‚“ã å¾Œã«ãƒ•ã‚¡ã‚¤ãƒ«ã«å¤‰æ›´ãŒã‚ã‚Šã¾ã—ãŸ!!!"
 
 msgid "Do you really want to write to it"
-msgstr "ËÜÅö¤Ë¾å½ñ¤­¤·¤Þ¤¹¤«"
+msgstr "本当ã«ä¸Šæ›¸ãã—ã¾ã™ã‹"
 
 #, c-format
 msgid "E208: Error writing to \"%s\""
-msgstr "E208: \"%s\" Â¤Ã²Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹"
+msgstr "E208: \"%s\" ã‚’書込ã¿ä¸­ã®ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 #, c-format
 msgid "E209: Error closing \"%s\""
-msgstr "E209: \"%s\" Â¤Ã²ÃŠÃ„¤¸¤ë»þ¤Ë¥¨¥é¡¼¤Ç¤¹"
+msgstr "E209: \"%s\" ã‚’é–‰ã˜ã‚‹æ™‚ã«ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 #, c-format
 msgid "E210: Error reading \"%s\""
-msgstr "E210: \"%s\" Â¤Ã²Ã†Ã‰Â¹Ã¾ÃƒÃ¦Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹"
+msgstr "E210: \"%s\" ã‚’読込中ã®ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: autocommand Â¤ÃŽ FileChangedShell Â¤Â¬Â¥Ã¥Ã¥Õ¥¡¤òºï½ü¤·¤Þ¤·¤¿"
+msgstr "E246: autocommand ã® FileChangedShell ãŒãƒãƒƒãƒ•ã‚¡ã‚’削除ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "E211: File \"%s\" no longer available"
-msgstr "E211: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã´û¤Ë¸ºß¤·¤Þ¤»¤ó"
+msgstr "E211: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã›ã‚“"
 
 #, c-format
 msgid ""
 "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
 "well"
-msgstr "W12: Â·Ã™Â¹Ã°: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Â¬ÃŠÃ‘¹¹¤µ¤ìVim¤Î¥Ã¥Ã¥Õ¥¡¤âÊѹ¹¤µ¤ì¤Þ¤·¤¿"
+msgstr "W12: è­¦å‘Š: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ãŒå¤‰æ›´ã•ã‚ŒVimã®ãƒãƒƒãƒ•ã‚¡ã‚‚変更ã•ã‚Œã¾ã—ãŸ"
 
 msgid "See \":help W12\" for more info."
-msgstr "¾ÜºÙ¤à\":help W12\" Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+msgstr "詳細㯠\":help W12\" ã‚’å‚ç…§ã—ã¦ãã ã•ã„"
 
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: Â·Ã™Â¹Ã°: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤ÃÊÔ½¸³«»Ã¸å¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿"
+msgstr "W11: è­¦å‘Š: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã¯ç·¨é›†é–‹å§‹å¾Œã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
 
 msgid "See \":help W11\" for more info."
-msgstr "¾ÜºÙ¤à\":help W11\" Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+msgstr "詳細㯠\":help W11\" ã‚’å‚ç…§ã—ã¦ãã ã•ã„"
 
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr "W16: Â·Ã™Â¹Ã°: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤ÃŽÂ¥Ã¢Â¡Â¼Â¥Ã‰Â¤Â¬ÃŠÃ”½¸³«»Ã¸å¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿"
+msgstr "W16: è­¦å‘Š: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã®ãƒ¢ãƒ¼ãƒ‰ãŒç·¨é›†é–‹å§‹å¾Œã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
 
 msgid "See \":help W16\" for more info."
-msgstr "¾ÜºÙ¤à\":help W16\" Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+msgstr "詳細㯠\":help W16\" ã‚’å‚ç…§ã—ã¦ãã ã•ã„"
 
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: Â·Ã™Â¹Ã°: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤ÃÊÔ½¸³«»Ã¸å¤ËºîÀ®¤µ¤ì¤Þ¤·¤¿"
+msgstr "W13: è­¦å‘Š: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã¯ç·¨é›†é–‹å§‹å¾Œã«ä½œæˆã•ã‚Œã¾ã—ãŸ"
 
 msgid "Warning"
-msgstr "·Ù¹ð"
+msgstr "警告"
 
 msgid ""
 "&OK\n"
 "&Load File"
 msgstr ""
 "&OK\n"
-"¥Õ¥¡¥¤¥ëÆɹþ(&L)"
+"ファイル読込(&L)"
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: \"%s\" Â¤Ã²Â¥ÃªÂ¥Ã­Â¡Â¼Â¥Ã‰Â¤Â¹Â¤Ã«Â½Ã ÃˆÃ·Â¤Â¬Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿"
+msgstr "E462: \"%s\" ã‚’リロードã™ã‚‹æº–å‚™ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ"
 
 #, c-format
 msgid "E321: Could not reload \"%s\""
-msgstr "E321: \"%s\" Â¤Ã¥ê¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "E321: \"%s\" ã¯ãƒªãƒ­ãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "--Deleted--"
-msgstr "--ºï½üºÑ--"
+msgstr "--削除済--"
 
 #, c-format
 msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr "autocommand: %s <¥ååե¡=%d> Â¤Â¬Â¼Â«Ã†Â°Ã…ª¤Ëºï½ü¤µ¤ì¤Þ¤¹"
+msgstr "autocommand: %s <ãƒãƒƒãƒ•ã‚¡=%d> ãŒè‡ªå‹•çš„ã«å‰Šé™¤ã•ã‚Œã¾ã™"
 
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
-msgstr "E367: Â¤Â½Â¤ÃŽÂ¥Â°Â¥Ã«Â¡Â¼Â¥Ã—¤Ã¤¢¤ê¤Þ¤»¤ó: \"%s\""
+msgstr "E367: ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã‚ã‚Šã¾ã›ã‚“: \"%s\""
 
 #, c-format
 msgid "E215: Illegal character after *: %s"
-msgstr "E215: * Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤·¤¿: %s"
+msgstr "E215: * ã®å¾Œã«ä¸æ­£ãªæ–‡å­—ãŒã‚ã‚Šã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "E216: No such event: %s"
-msgstr "E216: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÂ¥Â¤Â¥Ã™Â¥Ã³Â¥ÃˆÂ¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E216: ãã®ã‚ˆã†ãªã‚¤ãƒ™ãƒ³ãƒˆã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E216: No such group or event: %s"
-msgstr "E216: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÂ¥Â°Â¥Ã«Â¡Â¼Â¥Ã—¤â¤·¤¯¤Ã¥¤¥Ù¥ó¥È¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E216: ãã®ã‚ˆã†ãªã‚°ãƒ«ãƒ¼ãƒ—ã‚‚ã—ãã¯ã‚¤ãƒ™ãƒ³ãƒˆã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 #. Highlight title
 msgid ""
@@ -1818,16 +1961,16 @@ msgstr ""
 
 #, c-format
 msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <¥ååե¡=%d>: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã¥Ã¥Õ¥¡ÈÖ¹æ¤Ç¤¹"
+msgstr "E680: <ãƒãƒƒãƒ•ã‚¡=%d>: ç„¡åŠ¹ãªãƒãƒƒãƒ•ã‚¡ç•ªå·ã§ã™ "
 
 msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: Ã´¤Æ¤Î¥¤¥Ù¥ó¥È¤ËÂ䷤ƤÎautocommand¤Ã¼Â¹Ô¤Ç¤­¤Þ¤»¤ó"
+msgstr "E217: å…¨ã¦ã®ã‚¤ãƒ™ãƒ³ãƒˆã«å¯¾ã—ã¦ã®autocommandã¯å®Ÿè¡Œã§ãã¾ã›ã‚“"
 
 msgid "No matching autocommands"
-msgstr "³ºÅö¤¹¤ëautocommand¤Ã¸ºß¤·¤Þ¤»¤ó"
+msgstr "該当ã™ã‚‹autocommandã¯å­˜åœ¨ã—ã¾ã›ã‚“"
 
 msgid "E218: autocommand nesting too deep"
-msgstr "E218: autocommand¤ÎÆþ¤ì»Ò¤¬¿¼²á¤®¤Þ¤¹"
+msgstr "E218: autocommandã®å…¥ã‚Œå­ãŒæ·±éŽãŽã¾ã™"
 
 #, c-format
 msgid "%s Auto commands for \"%s\""
@@ -1835,984 +1978,960 @@ msgstr "%s Auto commands for \"%s\""
 
 #, c-format
 msgid "Executing %s"
-msgstr "%s Â¤Ã²Â¼Ã‚¹Ô¤·¤Æ¤¤¤Þ¤¹"
+msgstr "%s ã‚’実行ã—ã¦ã„ã¾ã™"
 
 #, c-format
 msgid "autocommand %s"
 msgstr "autocommand %s"
 
 msgid "E219: Missing {."
-msgstr "E219: { Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³."
+msgstr "E219: { ãŒã‚ã‚Šã¾ã›ã‚“."
 
 msgid "E220: Missing }."
-msgstr "E220: } Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³."
+msgstr "E220: } ãŒã‚ã‚Šã¾ã›ã‚“."
 
 msgid "E490: No fold found"
-msgstr "E490: Ã€ÃžÂ¾Ã¶Â¤ÃŸÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E490: æŠ˜ç•³ã¿ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: Â¸Â½ÂºÃŸÂ¤ÃŽ 'foldmethod' Â¤Ã‡Â¤ÃÀÞ¾ö¤ß¤òºîÀ®¤Ç¤­¤Þ¤»¤ó"
+msgstr "E350: ç¾åœ¨ã® 'foldmethod' ã§ã¯æŠ˜ç•³ã¿ã‚’作æˆã§ãã¾ã›ã‚“"
 
 msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: Â¸Â½ÂºÃŸÂ¤ÃŽ 'foldmethod' Â¤Ã‡Â¤ÃÀÞ¾ö¤ß¤òºï½ü¤Ç¤­¤Þ¤»¤ó"
+msgstr "E351: ç¾åœ¨ã® 'foldmethod' ã§ã¯æŠ˜ç•³ã¿ã‚’削除ã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "+--%3ld lines folded "
-msgstr "+--%3ld Â¹Ã”¤¬ÀÞ¾ö¤Þ¤ì¤Þ¤·¤¿"
+msgstr "+--%3ld è¡ŒãŒæŠ˜ç•³ã¾ã‚Œã¾ã—㟠"
 
 msgid "E222: Add to read buffer"
-msgstr "E222: Ã†Ã‰Â¹Ã¾Â¥Ã¥Ã¥Õ¥¡¤ØÄɲÃ"
+msgstr "E222: èª­è¾¼ãƒãƒƒãƒ•ã‚¡ã¸è¿½åŠ "
 
 msgid "E223: recursive mapping"
-msgstr "E223: ÂºÃ†ÂµÂ¢Ã…ª¥Þ¥Ã¥Ô¥ó¥°"
+msgstr "E223: Ã¥\86\8d帰ç\9a\84ã\83\9eã\83\83ã\83\94ã\83³ã\82°"
 
 #, c-format
 msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: %s Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Â°Â¥Ã­Â¡Â¼Â¥Ã¥ëû½ÌÆþÎäôû¤Ë¸ºß¤·¤Þ¤¹"
+msgstr "E224: %s ã¨ã„ã†ã‚°ãƒ­ãƒ¼ãƒãƒ«çŸ­ç¸®å…¥åŠ›ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™"
 
 #, c-format
 msgid "E225: global mapping already exists for %s"
-msgstr "E225: %s Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Â°Â¥Ã­Â¡Â¼Â¥Ã¥ë¥Þ¥Ã¥Ô¥ó¥°¤Ã´û¤Ë¸ºß¤·¤Þ¤¹"
+msgstr "E225: %s ã¨ã„ã†ã‚°ãƒ­ãƒ¼ãƒãƒ«ãƒžãƒƒãƒ”ングã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™"
 
 #, c-format
 msgid "E226: abbreviation already exists for %s"
-msgstr "E226: %s Â¤ÃˆÂ¤Â¤Â¤Â¦ÃƒÂ»Â½ÃŒÃ†Ã¾ÃŽÃ¤Ã´û¤Ë¸ºß¤·¤Þ¤¹"
+msgstr "E226: %s ã¨ã„ã†çŸ­ç¸®å…¥åŠ›ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™"
 
 #, c-format
 msgid "E227: mapping already exists for %s"
-msgstr "E227: %s Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥ÃžÂ¥ÃƒÂ¥Ã”¥ó¥°¤Ã´û¤Ë¸ºß¤·¤Þ¤¹"
+msgstr "E227: %s ã¨ã„ã†ãƒžãƒƒãƒ”ングã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™"
 
 msgid "No abbreviation found"
-msgstr "û½ÌÆþÎääߤĤ«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "短縮入力ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "No mapping found"
-msgstr "¥Þ¥Ã¥Ô¥ó¥°¤Ã¤ß¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "マッピングã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: Ã‰Ã”Àµ¤Ê¥â¡¼¥É"
+msgstr "E228: makemap: ä¸æ­£ãªãƒ¢ãƒ¼ãƒ‰"
+
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: GUI用ã®ãƒ—ロセスã®èµ·å‹•ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: å­ãƒ—ロセスãŒGUIã®èµ·å‹•ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "E229: Cannot start the GUI"
-msgstr "E229: GUI¤ò³«»Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E229: GUIを開始ã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "E230: Cannot read from \"%s\""
-msgstr "E230: \"%s\"¤«¤éÆɹþ¤à¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+msgstr "E230: \"%s\"ã‹ã‚‰èª­è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“"
 
 msgid "E665: Cannot start GUI, no valid font found"
-msgstr "E665: Ã­¸ú¤Ê¥Õ¥©¥ó¥È¤¬¸«¤Ä¤«¤é¤Ê¤¤¤Î¤Ç, GUI¤ò³«»Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E665: æœ‰åŠ¹ãªãƒ•ã‚©ãƒ³ãƒˆãŒè¦‹ã¤ã‹ã‚‰ãªã„ã®ã§, GUIを開始ã§ãã¾ã›ã‚“"
 
 msgid "E231: 'guifontwide' invalid"
-msgstr "E231: 'guifontwide' Â¤Â¬ÃŒÂµÂ¸ÃºÂ¤Ã‡Â¤Â¹"
+msgstr "E231: 'guifontwide' ãŒç„¡åŠ¹ã§ã™"
 
 msgid "E599: Value of 'imactivatekey' is invalid"
-msgstr "E599: 'imactivatekey' Â¤Ã‹Ã€ÃŸÃ„ꤵ¤ì¤¿Ãä¬Ìµ¸ú¤Ç¤¹"
+msgstr "E599: 'imactivatekey' ã«è¨­å®šã•ã‚ŒãŸå€¤ãŒç„¡åŠ¹ã§ã™"
 
 #, c-format
 msgid "E254: Cannot allocate color %s"
-msgstr "E254: %s Â¤ÃŽÂ¿Â§Â¤Ã²Â³Ã¤Â¤ÃªÃ…ö¤Æ¤é¤ì¤Þ¤»¤ó"
+msgstr "E254: %s ã®è‰²ã‚’割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“"
 
 msgid "No match at cursor, finding next"
-msgstr "¥«¡¼¥½¥ë¤Î°ÌÃ֤˥ޥåä䢤ê¤Þ¤»¤ó, Â¼Â¡Â¤Ã²Â¸Â¡ÂºÃ·Â¤Â·Â¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+msgstr "カーソルã®ä½ç½®ã«ãƒžãƒƒãƒã¯ã‚ã‚Šã¾ã›ã‚“, æ¬¡ã‚’検索ã—ã¦ã„ã¾ã™"
 
 msgid "<cannot open> "
-msgstr "<³«¤±¤Þ¤»¤ó>"
+msgstr "<é–‹ã‘ã¾ã›ã‚“> "
 
 #, c-format
 msgid "E616: vim_SelFile: can't get font %s"
-msgstr "E616: vim_SelFile: Â¥Ã•Â¥Â©Â¥Ã³Â¥Ãˆ %s Â¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E616: vim_SelFile: ãƒ•ã‚©ãƒ³ãƒˆ %s ã‚’å–å¾—ã§ãã¾ã›ã‚“"
 
 msgid "E614: vim_SelFile: can't return to current directory"
-msgstr "E614: vim_SelFile: Â¸Â½ÂºÃŸÂ¤ÃŽÂ¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã‹ÃŒÃ¡Â¤Ã¬Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E614: vim_SelFile: ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«æˆ»ã‚Œã¾ã›ã‚“"
 
 msgid "Pathname:"
-msgstr "¥Ñ¥¹Ì¾:"
+msgstr "パスå:"
 
 msgid "E615: vim_SelFile: can't get current directory"
-msgstr "E615: vim_SelFile: Â¸Â½ÂºÃŸÂ¤ÃŽÂ¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E615: vim_SelFile: ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’å–å¾—ã§ãã¾ã›ã‚“"
 
 msgid "OK"
 msgstr "OK"
 
 msgid "Cancel"
-msgstr "¥­¥ã¥ó¥»¥ë"
+msgstr "キャンセル"
 
 msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-msgstr "¥¹¥¯¥í¡¼¥ë¥Ã¡¼: Â²Ã¨Ãü¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿."
+msgstr "スクロールãƒãƒ¼: ç”»åƒã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ."
 
 msgid "Vim dialog"
-msgstr "Vim Â¥Ã€Â¥Â¤Â¥Â¢Â¥Ã­Â¥Â°"
+msgstr "Vim Ã£\83\80ã\82¤ã\82¢ã\83­ã\82°"
 
 msgid "E232: Cannot create BalloonEval with both message and callback"
-msgstr "E232: Â¥Ã¡Â¥ÃƒÂ¥Â»Â¡Â¼Â¥Â¸Â¤ÃˆÂ¥Â³Â¡Â¼Â¥Ã«Â¥Ã¥Ã¥¯¤Î¤¢¤ë BalloonEval Â¤Ã²ÂºÃ®Ã€Â®Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
-
-msgid "Vim dialog..."
-msgstr "Vim Â¥Ã€Â¥Â¤Â¥Â¢Â¥Ã­Â¥Â°..."
+msgstr "E232: ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¨ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã®ã‚ã‚‹ BalloonEval ã‚’作æˆã§ãã¾ã›ã‚“"
 
 msgid ""
 "&Yes\n"
 "&No\n"
 "&Cancel"
 msgstr ""
-"¤Ã¤¤(&Y)\n"
-"¤¤¤¤¤¨(&N)\n"
-"¥­¥ã¥ó¥»¥ë(&C)"
+"ã¯ã„(&Y)\n"
+"ã„ã„ãˆ(&N)\n"
+"キャンセル(&C)"
 
 msgid "Input _Methods"
-msgstr "¥¤¥ó¥×¥Ã¥È¥á¥½¥Ã¥É"
+msgstr "インプットメソッド"
 
 msgid "VIM - Search and Replace..."
-msgstr "VIM - Â¸Â¡ÂºÃ·Â¤ÃˆÃƒÃ–´¹..."
+msgstr "VIM - æ¤œç´¢ã¨ç½®æ›..."
 
 msgid "VIM - Search..."
-msgstr "VIM - Â¸Â¡ÂºÃ·..."
+msgstr "VIM - æ¤œç´¢..."
 
 msgid "Find what:"
-msgstr "¸¡º÷ʸ»úÎó:"
+msgstr "検索文字列:"
 
 msgid "Replace with:"
-msgstr "ÃÖ´¹Ê¸»úÎó:"
+msgstr "ç½®æ›æ–‡å­—列:"
 
 #. whole word only button
 msgid "Match whole word only"
-msgstr "Àµ³Î¤Ë³ºÅö¤¹¤ë¤â¤Î¤À¤±"
+msgstr "正確ã«è©²å½“ã™ã‚‹ã‚‚ã®ã ã‘"
 
 #. match case button
 msgid "Match case"
-msgstr "Âçʸ»ú/¾®Ê¸»ú¤ò¶èÊ̤¹¤ë"
+msgstr "大文字/å°æ–‡å­—を区別ã™ã‚‹"
 
 msgid "Direction"
-msgstr "Êý¸þ"
+msgstr "æ–¹å‘"
 
 #. 'Up' and 'Down' buttons
 msgid "Up"
-msgstr "¾å"
+msgstr "上"
 
 msgid "Down"
-msgstr "²¼"
+msgstr "下"
 
+#. 'Find Next' button
 msgid "Find Next"
-msgstr "¼¡¤ò¸¡º÷"
+msgstr "次を検索"
 
+#. 'Replace' button
 msgid "Replace"
-msgstr "ÃÖ´¹"
+msgstr "ç½®æ›"
 
+#. 'Replace All' button
 msgid "Replace All"
-msgstr "ô¤ÆÃÖ´¹"
+msgstr "å…¨ã¦ç½®æ›"
 
 msgid "Vim: Received \"die\" request from session manager\n"
-msgstr "Vim: Â¥Â»Â¥ÃƒÂ¥Â·Â¥Ã§Â¥Ã³Â¥ÃžÂ¥Ã¡¼¥¸¥ã¤«¤é \"die\" Ã×µá¤ò¼õ¤±¼è¤ê¤Þ¤·¤¿\n"
+msgstr "Vim: ã‚»ãƒƒã‚·ãƒ§ãƒ³ãƒžãƒãƒ¼ã‚¸ãƒ£ã‹ã‚‰ \"die\" è¦æ±‚ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ\n"
 
 msgid "Close"
-msgstr "ÊĤ¸¤ë"
+msgstr "é–‰ã˜ã‚‹"
 
 msgid "New tab"
-msgstr "¿·µ¬¥¿¥Ö¥Ú¡¼¥¸"
+msgstr "æ\96°è¦\8fã\82¿ã\83\96ã\83\9aã\83¼ã\82¸"
 
 msgid "Open Tab..."
-msgstr "¥¿¥Ö¥Ú¡¼¥¸¤ò³«¤¯..."
+msgstr "タブページを開ã..."
 
 msgid "Vim: Main window unexpectedly destroyed\n"
-msgstr "Vim: Â¥Ã¡Â¥Â¤Â¥Ã³Â¥Â¦Â¥Â£Â¥Ã³Â¥Ã‰Â¥Â¦Â¤Â¬Ã‰Ã”°Õ¤ËÇ˲õ¤µ¤ì¤Þ¤·¤¿\n"
-
-msgid "Font Selection"
-msgstr "¥Õ¥©¥ó¥ÈêÂò"
-
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "¶õ¤ÎêÂòÎΰè¤Î¤«¤ï¤ê¤ËCUT_BUFFER0¤¬»ÈÃѤµ¤ì¤Þ¤·¤¿"
+msgstr "Vim: ãƒ¡ã‚¤ãƒ³ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒä¸æ„ã«ç ´å£Šã•ã‚Œã¾ã—ãŸ\n"
 
 msgid "&Filter"
-msgstr "¥Õ¥£¥ë¥¿(&F)"
+msgstr "ã\83\95ã\82£ã\83«ã\82¿(&F)"
 
 msgid "&Cancel"
-msgstr "¥­¥ã¥ó¥»¥ë(&C)"
+msgstr "キャンセル(&C)"
 
 msgid "Directories"
-msgstr "¥Ç¥£¥ì¥¯¥È¥ê"
+msgstr "ディレクトリ"
 
 msgid "Filter"
-msgstr "¥Õ¥£¥ë¥¿"
+msgstr "ã\83\95ã\82£ã\83«ã\82¿"
 
 msgid "&Help"
-msgstr "¥Ø¥ë¥×(&H)"
+msgstr "ヘルプ(&H)"
 
 msgid "Files"
-msgstr "¥Õ¥¡¥¤¥ë"
+msgstr "ファイル"
 
 msgid "&OK"
 msgstr "&OK"
 
 msgid "Selection"
-msgstr "êÂò"
+msgstr "é¸æŠž"
 
 msgid "Find &Next"
-msgstr "¼¡¤ò¸¡º÷(&N)"
+msgstr "次を検索(&N)"
 
 msgid "&Replace"
-msgstr "ÃÖ´¹(&R)"
+msgstr "ç½®æ›(&R)"
 
 msgid "Replace &All"
-msgstr "ô¤ÆÃÖ´¹(&A)"
+msgstr "å…¨ã¦ç½®æ›(&A)"
 
 msgid "&Undo"
-msgstr "¥¢¥ó¥É¥¥(&U)"
-
-#, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zap¥Õ¥©¥ó¥È '%s' Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Â¥Ã•Â¥Â©Â¥Ã³Â¥Ãˆ %s Â¤Ã²Â»ÃˆÃѤǤ­¤Þ¤»¤ó"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"»Ò¥×¥í¥»¥¹¤ØÄä»ß¥á¥Ã¥»¡¼¥¸¤òÃ÷¿®Ãæ¤Ç¤¹.\n"
+msgstr "アンドゥ(&U)"
 
 #, c-format
 msgid "E671: Cannot find window title \"%s\""
-msgstr "E671: Â¥Â¿Â¥Â¤Â¥ÃˆÂ¥Ã«Â¤Â¬ \"%s\" Â¤ÃŽÂ¥Â¦Â¥Â£Â¥Ã³Â¥Ã‰Â¥Â¦Â¤Ã¤ß¤Ä¤«¤ê¤Þ¤»¤ó"
+msgstr "E671: ã‚¿ã‚¤ãƒˆãƒ«ãŒ \"%s\" ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-msgstr "E243: Â°ÃºÂ¿Ã´Â¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Þ¤»¤ó: \"-%s\"; OLEÈǤò»ÈÃѤ·¤Æ¤¯¤À¤µ¤¤."
+msgstr "E243: å¼•æ•°ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¾ã›ã‚“: \"-%s\"; OLE版を使用ã—ã¦ãã ã•ã„."
 
 msgid "E672: Unable to open window inside MDI application"
-msgstr "E672: MDI¥¢¥×¥ê¤ÎÃæ¤Ç¤Ã¥¦¥£¥ó¥É¥¦¤ò³«¤±¤Þ¤»¤ó"
+msgstr "E672: MDIアプリã®ä¸­ã§ã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 msgid "Close tab"
-msgstr "¥¿¥Ö¥Ú¡¼¥¸¤òÊĤ¸¤ë"
+msgstr "タブページを閉ã˜ã‚‹"
 
 msgid "Open tab..."
-msgstr "¥¿¥Ö¥Ú¡¼¥¸¤ò³«¤¯"
+msgstr "タブページを開ã"
 
 msgid "Find string (use '\\\\' to find  a '\\')"
-msgstr "¸¡º÷ʸ»úÎó ('\\' Â¤Ã²Â¸Â¡ÂºÃ·Â¤Â¹Â¤Ã«Â¤Ã‹Â¤Ã '\\\\')"
+msgstr "検索文字列 ('\\' ã‚’検索ã™ã‚‹ã«ã¯ '\\\\')"
 
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
-msgstr "¸¡º÷¡¦ÃÖ´¹ ('\\' Â¤Ã²Â¸Â¡ÂºÃ·Â¤Â¹Â¤Ã«Â¤Ã‹Â¤Ã '\\\\')"
+msgstr "検索・置曠('\\' ã‚’検索ã™ã‚‹ã«ã¯ '\\\\')"
 
 #. We fake this: Use a filter that doesn't select anything and a default
 #. * file name that won't be used.
 msgid "Not Used"
-msgstr "»È¤ï¤ì¤Þ¤»¤ó"
+msgstr "使ã‚ã‚Œã¾ã›ã‚“"
 
 msgid "Directory\t*.nothing\n"
-msgstr "¥Ç¥£¥ì¥¯¥È¥ê\t*.nothing\n"
+msgstr "ディレクトリ\t*.nothing\n"
 
 msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-msgstr "Vim E458: Â¿Â§Â»Ã˜Ã„꤬Àµ¤·¤¯¤Ê¤¤¤Î¤Ç¥¨¥ó¥È¥ê¤ò³ä¤êÅö¤Æ¤é¤ì¤Þ¤»¤ó"
+msgstr "Vim E458: è‰²æŒ‡å®šãŒæ­£ã—ããªã„ã®ã§ã‚¨ãƒ³ãƒˆãƒªã‚’割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“"
 
 #, c-format
 msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-msgstr "E250: Â°ÃŠÂ²Â¼Â¤ÃŽÃŠÂ¸Â»ÃºÂ¥Â»Â¥ÃƒÂ¥ÃˆÂ¤ÃŽÂ¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³ %s:"
+msgstr "E250: ä»¥ä¸‹ã®æ–‡å­—セットã®ãƒ•ã‚©ãƒ³ãƒˆãŒã‚ã‚Šã¾ã›ã‚“ %s:"
 
 #, c-format
 msgid "E252: Fontset name: %s"
-msgstr "E252: Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¥Â»Â¥ÃƒÂ¥ÃˆÃŒÂ¾: %s"
+msgstr "E252: ãƒ•ã‚©ãƒ³ãƒˆã‚»ãƒƒãƒˆå: %s"
 
 #, c-format
 msgid "Font '%s' is not fixed-width"
-msgstr "¥Õ¥©¥ó¥È '%s' Â¤Ã¸ÇÄêÉý¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "フォント '%s' ã¯å›ºå®šå¹…ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
-msgid "E253: Fontset name: %s\n"
-msgstr "E253: Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¥Â»Â¥ÃƒÂ¥ÃˆÃŒÂ¾: %s\n"
+msgid "E253: Fontset name: %s"
+msgstr "E253: ãƒ•ã‚©ãƒ³ãƒˆã‚»ãƒƒãƒˆå: %s"
 
 #, c-format
-msgid "Font0: %s\n"
-msgstr "¥Õ¥©¥ó¥È0: %s\n"
+msgid "Font0: %s"
+msgstr "フォント0: %s"
 
 #, c-format
-msgid "Font1: %s\n"
-msgstr "¥Õ¥©¥ó¥È1: %s\n"
+msgid "Font1: %s"
+msgstr "フォント1: %s"
 
 #, c-format
-msgid "Font%ld width is not twice that of font0\n"
-msgstr "¥Õ¥©¥ó¥È%ld Â¤ÃŽÃ‰Ã½Â¤Â¬Â¥Ã•Â¥Â©Â¥Ã³Â¥Ãˆ0¤Î2ÇܤǤ䢤ê¤Þ¤»¤ó\n"
+msgid "Font%ld width is not twice that of font0"
+msgstr "フォント%ld ã®å¹…ãŒãƒ•ã‚©ãƒ³ãƒˆ0ã®2å€ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
-msgid "Font0 width: %ld\n"
-msgstr "¥Õ¥©¥ó¥È0¤ÎÉý: %ld\n"
+msgid "Font0 width: %ld"
+msgstr "フォント0ã®å¹…: %ld"
 
 #, c-format
-msgid ""
-"Font1 width: %ld\n"
-"\n"
-msgstr ""
-"¥Õ¥©¥ó¥È1¤ÎÉý: %ld\n"
-"\n"
+msgid "Font1 width: %ld"
+msgstr "フォント1ã®å¹…: %ld"
 
 msgid "Invalid font specification"
-msgstr "̵¸ú¤Ê¥Õ¥©¥ó¥È»ØÄê¤Ç¤¹"
+msgstr "無効ãªãƒ•ã‚©ãƒ³ãƒˆæŒ‡å®šã§ã™"
 
 msgid "&Dismiss"
-msgstr "µÑ²¼¤¹¤ë(&D)"
+msgstr "å´ä¸‹ã™ã‚‹(&D)"
 
 msgid "no specific match"
-msgstr "¥Þ¥Ã¥Ã¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "マッãƒã™ã‚‹ã‚‚ã®ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "Vim - Font Selector"
-msgstr "Vim - Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÃªÂò"
+msgstr "Vim - ãƒ•ã‚©ãƒ³ãƒˆé¸æŠž"
 
 msgid "Name:"
-msgstr "̾ð:"
+msgstr "åå‰:"
 
 #. create toggle button
 msgid "Show size in Points"
-msgstr "¥µ¥¤¥º¤ò¥Ã¥¤¥ó¥È¤Çɽ¼¨¤¹¤ë"
+msgstr "サイズをãƒã‚¤ãƒ³ãƒˆã§è¡¨ç¤ºã™ã‚‹"
 
 msgid "Encoding:"
-msgstr "¥¨¥ó¥³¡¼¥É:"
+msgstr "エンコード:"
 
 msgid "Font:"
-msgstr "¥Õ¥©¥ó¥È:"
+msgstr "フォント:"
 
 msgid "Style:"
-msgstr "¥¹¥¿¥¤¥ë:"
+msgstr "スタイル:"
 
 msgid "Size:"
-msgstr "¥µ¥¤¥º:"
+msgstr "ã\82µã\82¤ã\82º:"
 
 msgid "E256: Hangul automata ERROR"
-msgstr "E256: Â¥Ã¥ó¥°¥ë¥ª¡¼¥È¥Þ¥È¥ó¥¨¥é¡¼"
+msgstr "E256: Ã£\83\8fã\83³ã\82°ã\83«ã\82ªã\83¼ã\83\88ã\83\9eã\83\88ã\83³ã\82¨ã\83©ã\83¼"
 
 msgid "E550: Missing colon"
-msgstr "E550: Â¥Â³Â¥Ã­Â¥Ã³Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E550: ã‚³ãƒ­ãƒ³ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E551: Illegal component"
-msgstr "E551: Ã‰Ã”Àµ¤Ê¹½Ê¸Ã×ÃǤǤ¹"
+msgstr "E551: ä¸æ­£ãªæ§‹æ–‡è¦ç´ ã§ã™"
 
 msgid "E552: digit expected"
-msgstr "E552: Â¿Ã´ÃƒÃ¤¬É¬ÃפǤ¹"
+msgstr "E552: æ•°å€¤ãŒå¿…è¦ã§ã™"
 
 #, c-format
 msgid "Page %d"
-msgstr "%d Â¥ÃšÂ¡Â¼Â¥Â¸"
+msgstr "%d Ã£\83\9aã\83¼ã\82¸"
 
 msgid "No text to be printed"
-msgstr "°õºþ¤¹¤ë¥Æ¥­¥¹¥È¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "å°åˆ·ã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "Printing page %d (%d%%)"
-msgstr "°õºþÃæ: Â¥ÃšÂ¡Â¼Â¥Â¸ %d (%d%%)"
+msgstr "Ã¥\8d°å\88·ä¸­: Ã£\83\9aã\83¼ã\82¸ %d (%d%%)"
 
 #, c-format
 msgid " Copy %d of %d"
-msgstr " Â¥Â³Â¥Ã”¡¼ %d (ô %d ÃƒÃ¦)"
+msgstr " ã‚³ãƒ”ー %d (å…¨ %d ä¸­)"
 
 #, c-format
 msgid "Printed: %s"
-msgstr "°õºþ¤·¤Þ¤·¤¿: %s"
+msgstr "å°åˆ·ã—ã¾ã—ãŸ: %s"
 
 msgid "Printing aborted"
-msgstr "°õºþ¤¬Ãæ»ß¤µ¤ì¤Þ¤·¤¿"
+msgstr "å°åˆ·ãŒä¸­æ­¢ã•ã‚Œã¾ã—ãŸ"
 
 msgid "E455: Error writing to PostScript output file"
-msgstr "E455: PostScript½ÃÃŽÃ¥Õ¥¡¥¤¥ë¤Î½ñ¹þ¤ß¥¨¥é¡¼¤Ç¤¹"
+msgstr "E455: PostScript出力ファイルã®æ›¸è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 #, c-format
 msgid "E624: Can't open file \"%s\""
-msgstr "E624: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E624: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 #, c-format
 msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: PostScript¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E457: PostScriptã®ãƒªã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã‚’読込ã‚ã¾ã›ã‚“"
 
 #, c-format
 msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã PostScript Â¥ÃªÂ¥Â½Â¡Â¼Â¥Â¹Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E618: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã¯ PostScript ãƒªã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤ÃÂñþ¤·¤Æ¤¤¤Ê¤¤ PostScript Â¥ÃªÂ¥Â½Â¡Â¼Â¥Â¹Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Â¹"
+msgstr "E619: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã¯å¯¾å¿œã—ã¦ã„ãªã„ PostScript ãƒªã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™"
 
 #, c-format
 msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: Â¥ÃªÂ¥Â½Â¡Â¼Â¥Â¹Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã¥á¼¥¸¥ç¥ó¤¬°Û¤Ê¤ê¤Þ¤¹"
+msgstr "E621: ãƒªã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒç•°ãªã‚Šã¾ã™"
 
 msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: Â¸ÃŸÂ´Â¹Ã€Â­Â¤ÃŽÃŒÂµÂ¤Â¤Â¥ÃžÂ¥Ã«Â¥Ã¥å¤¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Èʸ»ú¥»¥Ã¥È¤Ç¤¹"
+msgstr "E673: äº’æ›æ€§ã®ç„¡ã„マルãƒãƒã‚¤ãƒˆã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã¨æ–‡å­—セットã§ã™"
 
 msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: Â¥ÃžÂ¥Ã«Â¥Ã¥å¤¥È¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ç¤àprintmbcharset Â¤Ã²Â¶ÃµÂ¤Ã‹Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E674: ãƒžãƒ«ãƒãƒã‚¤ãƒˆã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã§ã¯ printmbcharset ã‚’空ã«ã§ãã¾ã›ã‚“"
 
 msgid "E675: No default font specified for multi-byte printing."
 msgstr ""
-"E675: Â¥ÃžÂ¥Ã«Â¥Ã¥å¤¥Èʸ»ú¤ò°õºþ¤¹¤ë¤¿¤á¤Î¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+"E675: ãƒžãƒ«ãƒãƒã‚¤ãƒˆæ–‡å­—ã‚’å°åˆ·ã™ã‚‹ãŸã‚ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ•ã‚©ãƒ³ãƒˆãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E324: Can't open PostScript output file"
-msgstr "E324: PostScript½ÃÃŽÃÃѤΥե¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó"
+msgstr "E324: PostScript出力用ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 #, c-format
 msgid "E456: Can't open file \"%s\""
-msgstr "E456: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E456: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: PostScript¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë \"prolog.ps\" Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "E456: PostScriptã®ãƒªã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ« \"prolog.ps\" ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: PostScript¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë \"cidfont.ps\" Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "E456: PostScriptã®ãƒªã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ« \"cidfont.ps\" ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: PostScript¤Î¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë \"%s.ps\" Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "E456: PostScriptã®ãƒªã‚½ãƒ¼ã‚¹ãƒ•ã‚¡ã‚¤ãƒ« \"%s.ps\" ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: Â°ÃµÂºÃ¾Â¥Â¨Â¥Ã³Â¥Â³Â¡Â¼Â¥Ã‰ \"%s\" Â¤Ã˜ÃŠÃ‘´¹¤Ç¤­¤Þ¤»¤ó"
+msgstr "E620: å°åˆ·ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ \"%s\" ã¸å¤‰æ›ã§ãã¾ã›ã‚“"
 
 msgid "Sending to printer..."
-msgstr "¥×¥ê¥ó¥¿¤ËÃ÷¿®Ãæ..."
+msgstr "プリンタã«é€ä¿¡ä¸­..."
 
 msgid "E365: Failed to print PostScript file"
-msgstr "E365: PostScript¥Õ¥¡¥¤¥ë¤Î°õºþ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E365: PostScriptファイルã®å°åˆ·ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "Print job sent."
-msgstr "°õºþ¥¸¥ç¥Ö¤òÃ÷¿®¤·¤Þ¤·¤¿."
+msgstr "å°åˆ·ã‚¸ãƒ§ãƒ–ã‚’é€ä¿¡ã—ã¾ã—ãŸ."
 
 msgid "Add a new database"
-msgstr "¿·¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÄɲÃ"
+msgstr "新データベースを追加"
 
 msgid "Query for a pattern"
-msgstr "¥Ñ¥¿¡¼¥ó¤Î¥¯¥¨¥ê¡¼¤òÄɲÃ"
+msgstr "パターンã®ã‚¯ã‚¨ãƒªãƒ¼ã‚’追加"
 
 msgid "Show this message"
-msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë"
+msgstr "ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã™ã‚‹"
 
 msgid "Kill a connection"
-msgstr "Àܳ¤ò½ªÎ»¤¹¤ë"
+msgstr "接続を終了ã™ã‚‹"
 
 msgid "Reinit all connections"
-msgstr "ô¤Æ¤ÎÀܳ¤òºÆ½é´ü²½¤¹¤ë"
+msgstr "å…¨ã¦ã®æŽ¥ç¶šã‚’å†åˆæœŸåŒ–ã™ã‚‹"
 
 msgid "Show connections"
-msgstr "Àܳ¤òɽ¼¨¤¹¤ë"
+msgstr "接続を表示ã™ã‚‹"
 
 #, c-format
 msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: Â»ÃˆÃÑÊýË¡: cs[cope] %s"
+msgstr "E560: ä½¿ç”¨æ–¹æ³•: cs[cope] %s"
 
 msgid "This cscope command does not support splitting the window.\n"
-msgstr "¤³¤Îcscope¥³¥Þ¥ó¥É¤Ãʬ³ä¥¦¥£¥ó¥É¥¦¤Ç¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Þ¤»¤ó.\n"
+msgstr "ã“ã®cscopeコマンドã¯åˆ†å‰²ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã§ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¾ã›ã‚“.\n"
 
 msgid "E562: Usage: cstag <ident>"
-msgstr "E562: Â»ÃˆÃÑË¡: cstag <ident>"
+msgstr "E562: ä½¿ç”¨æ³•: cstag <ident>"
 
 msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: Â¥Â¿Â¥Â°Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "E257: cstag: ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E563: stat(%s) error: %d"
-msgstr "E563: stat(%s) Â¥Â¨Â¥Ã©Â¡Â¼: %d"
+msgstr "E563: stat(%s) Ã£\82¨ã\83©ã\83¼: %d"
 
 msgid "E563: stat error"
-msgstr "E563: stat Â¥Â¨Â¥Ã©Â¡Â¼"
+msgstr "E563: stat Ã£\82¨ã\83©ã\83¼"
 
 #, c-format
 msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s Â¤Ã¥Ç¥£¥ì¥¯¥È¥êµÚ¤Óí¸ú¤Êcscope¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E564: %s ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåŠã³æœ‰åŠ¹ãªcscopeã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "Added cscope database %s"
-msgstr "cscope¥Ç¡¼¥¿¥Ù¡¼¥¹ %s Â¤Ã²Ã„ɲÃ"
+msgstr "cscopeデータベース %s ã‚’追加"
 
 #, c-format
 msgid "E262: error reading cscope connection %ld"
-msgstr "E262: cscope¤ÎÀܳ %ld Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤ÃŸÃƒÃ¦Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹"
+msgstr "E262: cscopeã®æŽ¥ç¶š %ld ã‚’読込ã¿ä¸­ã®ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 msgid "E561: unknown cscope search type"
-msgstr "E561: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽcscope¸¡º÷·¿¤Ç¤¹"
+msgstr "E561: æœªçŸ¥ã®cscope検索型ã§ã™"
 
 msgid "E566: Could not create cscope pipes"
-msgstr "E566: cscope¥Ñ¥¤¥×¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "E566: cscopeパイプを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "E622: Could not fork for cscope"
-msgstr "E622: cscope¤Îµ¯Æ°½àÈ÷(fork)¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E622: cscopeã®èµ·å‹•æº–å‚™(fork)ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "cs_create_connection setpgid failed"
+msgstr "cs_create_connection ã¸ã® setpgid ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "cs_create_connection exec failed"
-msgstr "cs_create_connection Â¤ÃŽÂ¼Ã‚¹Ô¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "cs_create_connection ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: to_fp Â¤ÃŽ fdopen Â¤Ã‹Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+msgstr "cs_create_connection: to_fp ã® fdopen ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: fr_fp Â¤ÃŽ fdopen Â¤Ã‹Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+msgstr "cs_create_connection: fr_fp ã® fdopen ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "E623: Could not spawn cscope process"
-msgstr "E623: cscope¥×¥í¥»¥¹¤òµ¯Æ°¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "E623: cscopeプロセスを起動ã§ãã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "E567: no cscope connections"
-msgstr "E567: cscopeÀܳ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E567: cscope接続ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 #, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: cscope¥¯¥¨¥ê¡¼ %s of %s Â¤Ã‹Â³ÂºÃ…ö¤¬¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+msgid "E469: invalid cscopequickfix flag %c for %c"
+msgstr "E469: ç„¡åŠ¹ãª cscopequickfix ãƒ•ãƒ©ã‚° %c ã® %c ã§ã™"
 
 #, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: ÃŒÂµÂ¸ÃºÂ¤ÃŠ cscopequickfix Â¥Ã•Â¥Ã©Â¥Â° %c Â¤ÃŽ %c Â¤Ã‡Â¤Â¹"
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: cscopeクエリー %s of %s ã«è©²å½“ãŒã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "cscope commands:\n"
-msgstr "cscope¥³¥Þ¥ó¥É:\n"
+msgstr "cscopeコマンド:\n"
 
 #, c-format
-msgid "%-5s: %-30s (Usage: %s)"
-msgstr "%-5s: %-30s (»ÈÃÑË¡: %s)"
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (使用法: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: ã“ã®é–¢æ•°ã‚’呼んã§ã„る関数を探ã™\n"
+"       d: ã“ã®é–¢æ•°ã‹ã‚‰å‘¼ã‚“ã§ã„る関数を探ã™\n"
+"       e: ã“ã®egrepパターンを探ã™\n"
+"       f: ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’探ã™\n"
+"       g: ã“ã®å®šç¾©ã‚’探ã™\n"
+"       i: ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’#includeã—ã¦ã„るファイルを探ã™\n"
+"       s: ã“ã®Cシンボルを探ã™\n"
+"       t: ã“ã®ãƒ†ã‚­ã‚¹ãƒˆæ–‡å­—列を探ã™\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
-msgstr "E625: cscope¥Ç¡¼¥¿¥Ù¡¼¥¹: %s Â¤Ã²Â³Â«Â¤Â¯Â¤Â³Â¤ÃˆÂ¤Â¬Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E625: cscopeデータベース: %s ã‚’é–‹ãã“ã¨ãŒã§ãã¾ã›ã‚“"
 
 msgid "E626: cannot get cscope database information"
-msgstr "E626: cscope¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¾ðÊó¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó"
+msgstr "E626: cscopeデータベースã®æƒ…報をå–å¾—ã§ãã¾ã›ã‚“"
 
 msgid "E568: duplicate cscope database not added"
-msgstr "E568: Â½Ã…Ê£¤¹¤ëcscope¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÃÄɲ䵤ì¤Þ¤»¤ó¤Ç¤·¤¿"
-
-msgid "E569: maximum number of cscope connections reached"
-msgstr "E569: cscopeÀܳ¤ÎºÇÂç¿ô¤Ë㤷¤Þ¤·¤¿"
+msgstr "E568: é‡è¤‡ã™ã‚‹cscopeデータベースã¯è¿½åŠ ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ"
 
 #, c-format
 msgid "E261: cscope connection %s not found"
-msgstr "E261: cscopeÀܳ %s Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "E261: cscope接続 %s ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
 
 #, c-format
 msgid "cscope connection %s closed"
-msgstr "cscopeÀܳ %s Â¤Â¬ÃŠÃ„¤¸¤é¤ì¤Þ¤·¤¿"
+msgstr "cscope接続 %s ãŒé–‰ã˜ã‚‰ã‚Œã¾ã—ãŸ"
 
 #. should not reach here
 msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: cs_manage_matches Â¤Ã‡ÃƒÃ—̿Ū¤Ê¥¨¥é¡¼¤Ç¤¹"
+msgstr "E570: cs_manage_matches ã§è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ã§ã™"
 
 #, c-format
 msgid "Cscope tag: %s"
-msgstr "Cscope Â¥Â¿Â¥Â°: %s"
+msgstr "Cscope Ã£\82¿ã\82°: %s"
 
 msgid ""
 "\n"
 "   #   line"
 msgstr ""
 "\n"
-"   #   Â¹Ã”ÈÖ¹æ"
+"   #   è¡Œç•ªå·"
 
 msgid "filename / context / line\n"
-msgstr "¥Õ¥¡¥¤¥ë̾ / ÃŠÂ¸ÃŒÂ® / Â¹Ã”\n"
+msgstr "ファイルå / æ–‡è„ˆ / è¡Œ\n"
 
 #, c-format
 msgid "E609: Cscope error: %s"
-msgstr "E609: cscope¥¨¥é¡¼: %s"
+msgstr "E609: cscopeã\82¨ã\83©ã\83¼: %s"
 
 msgid "All cscope databases reset"
-msgstr "ô¤Æ¤Îcscope¥Ç¡¼¥¿¥Ù¡¼¥¹¤ò¥ê¥»¥Ã¥È¤·¤Þ¤¹"
+msgstr "å…¨ã¦ã®cscopeデータベースをリセットã—ã¾ã™"
 
 msgid "no cscope connections\n"
-msgstr "cscopeÀܳ¤¬¤¢¤ê¤Þ¤»¤ó\n"
+msgstr "cscope接続ãŒã‚ã‚Šã¾ã›ã‚“\n"
 
 msgid " # pid    database name                       prepend path\n"
-msgstr " # pid    Â¥Ã‡Â¡Â¼Â¥Â¿Â¥Ã™Â¡Â¼Â¥Â¹ÃŒÂ¾                      prepend Â¥Ã‘¥¹\n"
+msgstr " # pid    ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹å                      prepend ãƒ‘ス\n"
+
+msgid "Lua library cannot be loaded."
+msgstr "Luaライブラリをロードã§ãã¾ã›ã‚“."
+
+msgid "cannot save undo information"
+msgstr "アンドゥ情報ãŒä¿å­˜ã§ãã¾ã›ã‚“"
 
 msgid ""
-"???: Sorry, this command is disabled, the MzScheme library could not be "
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
-msgstr ""
-"???: Â¤Â³Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã̵¸ú¤Ç¤¹, Â¤Â´Â¤Ã¡Â¤Ã³Â¤ÃŠÂ¤ÂµÂ¤Â¤: MzScheme Â¥Ã©Â¥Â¤Â¥Ã–¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ"
-"¤»¤ó¤Ç¤·¤¿."
+msgstr "E815: ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ç„¡åŠ¹ã§ã™. MzScheme ãƒ©ã‚¤ãƒ–ラリをロードã§ãã¾ã›ã‚“."
 
 msgid "invalid expression"
-msgstr "̵¸ú¤Ê¼°¤Ç¤¹"
+msgstr "無効ãªå¼ã§ã™"
 
 msgid "expressions disabled at compile time"
-msgstr "¼°¤Ã¥³¥ó¥Ñ¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹"
+msgstr "å¼ã¯ã‚³ãƒ³ãƒ‘イル時ã«ç„¡åŠ¹ã«ã•ã‚Œã¦ã„ã¾ã™"
 
 msgid "hidden option"
-msgstr "±£¤·¥ª¥×¥·¥ç¥ó"
+msgstr "éš ã—オプション"
 
 msgid "unknown option"
-msgstr "̤ÃΤΥª¥×¥·¥ç¥ó¤Ç¤¹"
+msgstr "未知ã®ã‚ªãƒ—ションã§ã™"
 
 msgid "window index is out of range"
-msgstr "Èðó°¤Î¥¦¥£¥ó¥É¥¦ÈÖ¹æ¤Ç¤¹"
+msgstr "範囲外ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ç•ªå·ã§ã™"
 
 msgid "couldn't open buffer"
-msgstr "¥ååե¡¤ò³«¤±¤Þ¤»¤ó"
-
-msgid "cannot save undo information"
-msgstr "¥¢¥ó¥É¥¥¾ðÊó¤¬Êø¤Ç¤­¤Þ¤»¤ó"
+msgstr "ãƒãƒƒãƒ•ã‚¡ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 msgid "cannot delete line"
-msgstr "¹Ô¤ò¾Ã¤»¤Þ¤»¤ó"
+msgstr "行を消ã›ã¾ã›ã‚“"
 
 msgid "cannot replace line"
-msgstr "¹Ô¤òÃÖ´¹¤Ç¤­¤Þ¤»¤ó"
+msgstr "行を置æ›ã§ãã¾ã›ã‚“"
 
 msgid "cannot insert line"
-msgstr "¹Ô¤òÃÞÆþ¤Ç¤­¤Þ¤»¤ó"
+msgstr "行を挿入ã§ãã¾ã›ã‚“"
 
 msgid "string cannot contain newlines"
-msgstr "ʸ»úÎó¤Ë¤Ã²þ¹Ôʸ»ú¤ò´Þ¤á¤é¤ì¤Þ¤»¤ó"
+msgstr "文字列ã«ã¯æ”¹è¡Œæ–‡å­—ã‚’å«ã‚られã¾ã›ã‚“"
+
+msgid "error converting Scheme values to Vim"
+msgstr "Scheme値ã®Vimã¸ã®å¤‰æ›ã‚¨ãƒ©ãƒ¼"
 
 msgid "Vim error: ~a"
-msgstr "Vim Â¥Â¨Â¥Ã©Â¡Â¼: ~a"
+msgstr "Vim Ã£\82¨ã\83©ã\83¼: ~a"
 
 msgid "Vim error"
-msgstr "Vim Â¥Â¨Â¥Ã©Â¡Â¼"
+msgstr "Vim Ã£\82¨ã\83©ã\83¼"
 
 msgid "buffer is invalid"
-msgstr "¥ååե¡¤Ã̵¸ú¤Ç¤¹"
+msgstr "ãƒãƒƒãƒ•ã‚¡ã¯ç„¡åŠ¹ã§ã™"
 
 msgid "window is invalid"
-msgstr "¥¦¥£¥ó¥É¥¦¤Ã̵¸ú¤Ç¤¹"
+msgstr "ウィンドウã¯ç„¡åŠ¹ã§ã™"
 
 msgid "linenr out of range"
-msgstr "Èðó°¤Î¹ÔÈÖ¹æ¤Ç¤¹"
+msgstr "範囲外ã®è¡Œç•ªå·ã§ã™"
 
 msgid "not allowed in the Vim sandbox"
-msgstr "¥µ¥ó¥É¥Ü¥Ã¥¯¥¹¤Ç¤Ãµö¤µ¤ì¤Þ¤»¤ó"
+msgstr "サンドボックスã§ã¯è¨±ã•ã‚Œã¾ã›ã‚“"
+
+#, c-format
+msgid "E370: Could not load library %s"
+msgstr "E370: ãƒ©ã‚¤ãƒ–ラリ %s ã‚’ロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+msgstr ""
+"ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ç„¡åŠ¹ã§ã™, ã”ã‚ã‚“ãªã•ã„: Perlライブラリをロードã§ãã¾ã›ã‚“ã§ã—ãŸ."
+
+msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
+msgstr ""
+"E299: ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã§ã¯ Safe ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使用ã—ãªã„Perlスクリプトã¯ç¦ã˜ã‚‰ã‚Œ"
+"ã¦ã„ã¾ã™"
+
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: ã“ã®Vimã§ã¯ :py3 ã‚’使ã£ãŸå¾Œã« :python ã‚’使ãˆã¾ã›ã‚“"
 
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
 msgstr ""
-"E263: Â¤Â³Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã̵¸ú¤Ç¤¹,¤´¤á¤ó¤Ê¤µ¤¤: Python¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó"
-"¤Ç¤·¤¿."
+"E263: ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ç„¡åŠ¹ã§ã™,ã”ã‚ã‚“ãªã•ã„: Pythonライブラリをロードã§ãã¾ã›ã‚“"
+"ã§ã—ãŸ."
 
 # Added at 07-Feb-2004.
 msgid "E659: Cannot invoke Python recursively"
-msgstr "E659: Python Â¤Ã²ÂºÃ†ÂµÂ¢Ã…ª¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
-
-msgid "can't delete OutputObject attributes"
-msgstr "OutputObject°À­¤ò¾Ã¤»¤Þ¤»¤ó"
-
-msgid "softspace must be an integer"
-msgstr "softspace Â¤Ã integer Â¤Ã‡Â¤ÃŠÂ¤Â±Â¤Ã¬Â¤Ã¤Ê¤ê¤Þ¤»¤ó"
-
-msgid "invalid attribute"
-msgstr "̵¸ú¤Ê°À­¤Ç¤¹"
-
-msgid "writelines() requires list of strings"
-msgstr "writelines() Â¤Ã‹Â¤Ãʸ»úÎó¤Î¥ê¥¹¥È¤¬É¬ÃפǤ¹"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Python: I/O¥ª¥Ö¥¸¥§¥¯¥È¤Î½é´ü²½Ãæ¤Ë¥¨¥é¡¼¤Ç¤¹"
-
-msgid "attempt to refer to deleted buffer"
-msgstr "¾Ã¤µ¤ì¤¿¥Ã¥Ã¥Õ¥¡¤¬»²¾È¤µ¤ì¤Þ¤·¤¿"
-
-msgid "line number out of range"
-msgstr "Èðó°¤Î¹ÔÈÖ¹æ¤Ç¤¹"
-
-#, c-format
-msgid "<buffer object (deleted) at %8lX>"
-msgstr "<¥ååե¡¥ª¥Ö¥¸¥§¥¯¥È (¾ÃµîºÑ¤ß) %8lX>"
-
-msgid "invalid mark name"
-msgstr "̵¸ú¤Ê¥Þ¡¼¥¯Ì¾¤Ç¤¹"
-
-msgid "no such buffer"
-msgstr "¤½¤Î¤è¤¦¤Ê¥Ã¥Ã¥Õ¥¡¤Ã¤¢¤ê¤Þ¤»¤ó"
-
-msgid "attempt to refer to deleted window"
-msgstr "¾Ã¤µ¤ì¤¿¥¦¥£¥ó¥É¥¦¤¬»²¾È¤µ¤ì¤Þ¤·¤¿"
-
-msgid "readonly attribute"
-msgstr "ÆɹþÀìÃÑ°À­"
-
-msgid "cursor position outside buffer"
-msgstr "¥«¡¼¥½¥ë¤¬¥Ã¥Ã¥Õ¥¡¤Î³°¤Ë¤¢¤ê¤Þ¤¹"
-
-#, c-format
-msgid "<window object (deleted) at %.8lX>"
-msgstr "<¥¦¥£¥ó¥É¥¦¥ª¥Ö¥¸¥§¥¯¥È (¾ÃµîºÑ) %.8lX>"
-
-#, c-format
-msgid "<window object (unknown) at %.8lX>"
-msgstr "<¥¦¥£¥ó¥É¥¦¥ª¥Ö¥¸¥§¥¯¥È (̤ÃÎ) %.8lX>"
-
-#, c-format
-msgid "<window %d>"
-msgstr "<¥¦¥£¥ó¥É¥¦ %d>"
+msgstr "E659: Python ã‚’å†å¸°çš„ã«å®Ÿè¡Œã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
 
-msgid "no such window"
-msgstr "¤½¤Î¤è¤¦¤Ê¥¦¥£¥ó¥É¥¦¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: ã“ã®Vimã§ã¯ :python ã‚’使ã£ãŸå¾Œã« :py3 ã‚’使ãˆã¾ã›ã‚“"
 
 msgid "E265: $_ must be an instance of String"
-msgstr "E265: $_ Â¤Ãʸ»úÎó¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ç¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+msgstr "E265: $_ ã¯æ–‡å­—列ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
 
 msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr ""
-"E266: Â¤Â³Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã̵¸ú¤Ç¤¹,¤´¤á¤ó¤Ê¤µ¤¤: Ruby¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¤Ç"
-"¤·¤¿."
+"E266: ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ç„¡åŠ¹ã§ã™,ã”ã‚ã‚“ãªã•ã„: Rubyライブラリをロードã§ãã¾ã›ã‚“ã§"
+"ã—ãŸ."
 
 msgid "E267: unexpected return"
-msgstr "E267: Ã½´ü¤»¤Ì return Â¤Ã‡Â¤Â¹"
+msgstr "E267: äºˆæœŸã›ã¬ return ã§ã™"
 
 msgid "E268: unexpected next"
-msgstr "E268: Ã½´ü¤»¤Ì next Â¤Ã‡Â¤Â¹"
+msgstr "E268: äºˆæœŸã›ã¬ next ã§ã™"
 
 msgid "E269: unexpected break"
-msgstr "E269: Ã½´ü¤»¤Ì break Â¤Ã‡Â¤Â¹"
+msgstr "E269: äºˆæœŸã›ã¬ break ã§ã™"
 
 msgid "E270: unexpected redo"
-msgstr "E270: Ã½´ü¤»¤Ì redo Â¤Ã‡Â¤Â¹"
+msgstr "E270: äºˆæœŸã›ã¬ redo ã§ã™"
 
 msgid "E271: retry outside of rescue clause"
-msgstr "E271: rescue Â¤ÃŽÂ³Â°Â¤ÃŽ retry Â¤Ã‡Â¤Â¹"
+msgstr "E271: rescue ã®å¤–ã® retry ã§ã™"
 
 msgid "E272: unhandled exception"
-msgstr "E272: Â¼Ã¨Â¤ÃªÂ°Â·Â¤Ã¯Â¤Ã¬Â¤ÃŠÂ¤Â«Â¤ÃƒÂ¤Â¿ÃŽÃ£Â³Â°Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E272: å–り扱ã‚ã‚Œãªã‹ã£ãŸä¾‹å¤–ãŒã‚ã‚Šã¾ã™"
 
 #, c-format
 msgid "E273: unknown longjmp status %d"
-msgstr "E273: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽlongjmp¾õÂÖ: %d"
+msgstr "E273: æœªçŸ¥ã®longjmp状態: %d"
 
 msgid "Toggle implementation/definition"
-msgstr "¼ÂÃõ¤ÈÄêµÃ¤òÀÚ¤êÂؤ¨¤ë"
+msgstr "実装ã¨å®šç¾©ã‚’切り替ãˆã‚‹"
 
 msgid "Show base class of"
-msgstr "¼¡¤Î¥¯¥é¥¹¤Î´ðÄì¤òɽ¼¨"
+msgstr "次ã®ã‚¯ãƒ©ã‚¹ã®åŸºåº•ã‚’表示"
 
 msgid "Show overridden member function"
-msgstr "¥ª¡¼¥Ã¡¼¥é¥¤¥É¤µ¤ì¤¿¥á¥ó¥Ã´Ø¿ô¤òɽ¼¨"
+msgstr "オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•ã‚ŒãŸãƒ¡ãƒ³ãƒé–¢æ•°ã‚’表示"
 
 msgid "Retrieve from file"
-msgstr "¥Õ¥¡¥¤¥ë¤«¤é²óÉü¤¹¤ë"
+msgstr "ファイルã‹ã‚‰å›žå¾©ã™ã‚‹"
 
 msgid "Retrieve from project"
-msgstr "¥×¥í¥¸¥§¥¯¥È¤«¤é²óÉü¤¹¤ë"
+msgstr "プロジェクトã‹ã‚‰å›žå¾©ã™ã‚‹"
 
 msgid "Retrieve from all projects"
-msgstr "ô¤Æ¤Î¥×¥í¥¸¥§¥¯¥È¤«¤é²óÉü¤¹¤ë"
+msgstr "å…¨ã¦ã®ãƒ—ロジェクトã‹ã‚‰å›žå¾©ã™ã‚‹"
 
 msgid "Retrieve"
-msgstr "²óÉü"
+msgstr "回復"
 
 msgid "Show source of"
-msgstr "¼¡¤Î¥½¡¼¥¹¤òɽ¼¨¤¹¤ë"
+msgstr "次ã®ã‚½ãƒ¼ã‚¹ã‚’表示ã™ã‚‹"
 
 msgid "Find symbol"
-msgstr "¤ß¤Ä¤±¤¿¥·¥ó¥Ü¥ë"
+msgstr "見ã¤ã‘ãŸã‚·ãƒ³ãƒœãƒ«"
 
 msgid "Browse class"
-msgstr "¥¯¥é¥¹¤ò»²¾È"
+msgstr "クラスをå‚ç…§"
 
 msgid "Show class in hierarchy"
-msgstr "³¬Ãؤǥ¯¥é¥¹¤òɽ¼¨"
+msgstr "階層ã§ã‚¯ãƒ©ã‚¹ã‚’表示"
 
 msgid "Show class in restricted hierarchy"
-msgstr "¸ÂÄꤵ¤ì¤¿³¬Ãؤǥ¯¥é¥¹¤òɽ¼¨"
+msgstr "é™å®šã•ã‚ŒãŸéšŽå±¤ã§ã‚¯ãƒ©ã‚¹ã‚’表示"
 
 msgid "Xref refers to"
-msgstr "Xref Â¤ÃŽÂ»Â²Â¾ÃˆÃ€Ã¨"
+msgstr "Xref ã®å‚照先"
 
 msgid "Xref referred by"
-msgstr "Xref Â¤Â¬Â»Â²Â¾ÃˆÂ¤ÂµÂ¤Ã¬Â¤Ã«"
+msgstr "Xref ãŒå‚ç…§ã•ã‚Œã‚‹"
 
 msgid "Xref has a"
-msgstr "Xref Â¤Â¬Â¼Â¡Â¤ÃŽÂ¤Ã¢Â¤ÃŽÂ¤Ã²Â¤Ã¢Â¤ÃƒÂ¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+msgstr "Xref ãŒæ¬¡ã®ã‚‚ã®ã‚’ã‚‚ã£ã¦ã„ã¾ã™"
 
 msgid "Xref used by"
-msgstr "Xref Â¤Â¬Â»ÃˆÃѤµ¤ì¤ë"
+msgstr "Xref ãŒä½¿ç”¨ã•ã‚Œã‚‹"
 
 msgid "Show docu of"
-msgstr "¼¡¤Îʸ¾Ã¤òɽ¼¨"
+msgstr "次ã®æ–‡ç« ã‚’表示"
 
 msgid "Generate docu for"
-msgstr "¼¡¤Îʸ¾Ã¤òÀ¸À®"
+msgstr "次ã®æ–‡ç« ã‚’生æˆ"
 
 msgid ""
 "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
 "$PATH).\n"
 msgstr ""
-"SNiFF+¤ËÀܳ¤Ç¤­¤Þ¤»¤ó. Â´Ã„¶­¤ò¥Ã¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤(sniffemacs Â¤Â¬ $PATH Â¤Ã‹Â¤ÃŠÂ¤Â±"
-"¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó).\n"
+"SNiFF+ã«æŽ¥ç¶šã§ãã¾ã›ã‚“. ç’°å¢ƒã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„(sniffemacs ãŒ $PATH ã«ãªã‘"
+"ã‚Œã°ãªã‚Šã¾ã›ã‚“).\n"
 
 msgid "E274: Sniff: Error during read. Disconnected"
-msgstr "E274: Sniff: Ã†Ã‰Â¹Ã¾ÃƒÃ¦Â¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬ÃˆÂ¯Ã€Â¸Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿. Ã€ÃšÃƒÃ‡Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "E274: Sniff: èª­è¾¼ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ. åˆ‡æ–­ã—ã¾ã—ãŸ"
 
 msgid "SNiFF+ is currently "
-msgstr "¸½ºßSNiFF+ Â¤ÃŽÂ¾ÃµÃ‚֤áÖ"
+msgstr "ç¾åœ¨SNiFF+ ã®çŠ¶æ…‹ã¯ã€Œ"
 
 msgid "not "
-msgstr "̤"
+msgstr "未"
 
 msgid "connected"
-msgstr "Àܳ¡×¤Ç¤¹"
+msgstr "接続ã€ã§ã™"
 
 #, c-format
 msgid "E275: Unknown SNiFF+ request: %s"
-msgstr "E275: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽ SNiFF+ Â¥ÃªÂ¥Â¯Â¥Â¨Â¥Â¹Â¥ÃˆÂ¤Ã‡Â¤Â¹: %s"
+msgstr "E275: æœªçŸ¥ã® SNiFF+ ãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™: %s"
 
 msgid "E276: Error connecting to SNiFF+"
-msgstr "E276: SNiFF+ Â¤Ã˜Â¤ÃŽÃ€ÃœÃ‚³Ãæ¤Î¥¨¥é¡¼¤Ç¤¹"
+msgstr "E276: SNiFF+ ã¸ã®æŽ¥ç¶šä¸­ã®ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 msgid "E278: SNiFF+ not connected"
-msgstr "E278: SNiFF+ Â¤Ã‹Ã€ÃœÃ‚³¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E278: SNiFF+ ã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E279: Not a SNiFF+ buffer"
-msgstr "E279: SNiFF+ Â¥Ã¥Ã¥Õ¥¡¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E279: SNiFF+ ãƒãƒƒãƒ•ã‚¡ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "Sniff: Error during write. Disconnected"
-msgstr "Sniff: Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦Â¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬ÃˆÂ¯Ã€Â¸Â¤Â·Â¤Â¿Â¤ÃŽÂ¤Ã‡Ã€ÃšÃƒÃ‡Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "Sniff: æ›¸è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸã®ã§åˆ‡æ–­ã—ã¾ã—ãŸ"
 
 msgid "invalid buffer number"
-msgstr "̵¸ú¤Ê¥Ã¥Ã¥Õ¥¡ÈÖ¹æ¤Ç¤¹"
+msgstr "無効ãªãƒãƒƒãƒ•ã‚¡ç•ªå·ã§ã™"
 
 msgid "not implemented yet"
-msgstr "¤Þ¤À¼ÂÃõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #. ???
 msgid "cannot set line(s)"
-msgstr "¹Ô¤òÀßÄê¤Ç¤­¤Þ¤»¤ó"
+msgstr "行を設定ã§ãã¾ã›ã‚“"
+
+msgid "invalid mark name"
+msgstr "無効ãªãƒžãƒ¼ã‚¯åã§ã™"
 
 msgid "mark not set"
-msgstr "¥Þ¡¼¥¯¤ÃÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "マークã¯è¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "row %d column %d"
-msgstr "¹Ô %d ÃŽÃ³ %d"
+msgstr "è¡Œ %d åˆ— %d"
 
 msgid "cannot insert/append line"
-msgstr "¹Ô¤ÎÃÞÆþ/Äɲäò¤Ç¤­¤Þ¤»¤ó"
+msgstr "è¡Œã®æŒ¿å…¥/追加をã§ãã¾ã›ã‚“"
+
+msgid "line number out of range"
+msgstr "範囲外ã®è¡Œç•ªå·ã§ã™"
 
 msgid "unknown flag: "
-msgstr "̤ÃΤΥե饰:"
+msgstr "未知ã®ãƒ•ãƒ©ã‚°: "
 
 msgid "unknown vimOption"
-msgstr "̤ÃΤΠvimOption Â¤Ã‡Â¤Â¹"
+msgstr "未知㮠vimOption ã§ã™"
 
 msgid "keyboard interrupt"
-msgstr "¥­¡¼¥Ü¡¼¥É³ä¹þ¤ß"
+msgstr "キーボード割込ã¿"
 
 msgid "vim error"
-msgstr "vim Â¥Â¨Â¥Ã©Â¡Â¼"
+msgstr "vim Ã£\82¨ã\83©ã\83¼"
 
 msgid "cannot create buffer/window command: object is being deleted"
 msgstr ""
-"¥ååե¡/¥¦¥£¥ó¥É¥¦ºîÀ®¥³¥Þ¥ó¥É¤òºîÀ®¤Ç¤­¤Þ¤»¤ó: Â¥ÂªÂ¥Ã–¥¸¥§¥¯¥È¤¬¾Ãµî¤µ¤ì¤Æ¤¤¤Þ"
-"¤·¤¿"
+"ãƒãƒƒãƒ•ã‚¡/ウィンドウ作æˆã‚³ãƒžãƒ³ãƒ‰ã‚’作æˆã§ãã¾ã›ã‚“: ã‚ªãƒ–ジェクトãŒæ¶ˆåŽ»ã•ã‚Œã¦ã„ã¾"
+"ã—ãŸ"
 
 msgid ""
 "cannot register callback command: buffer/window is already being deleted"
 msgstr ""
-"¥³¡¼¥ë¥Ã¥Ã¥¯¥³¥Þ¥ó¥É¤òÅÃÿ¤Ç¤­¤Þ¤»¤ó: Â¥Ã¥Ã¥Õ¥¡/¥¦¥£¥ó¥É¥¦¤¬´û¤Ë¾Ãµî¤µ¤ì¤Þ¤·¤¿"
+"コールãƒãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã‚’登録ã§ãã¾ã›ã‚“: ãƒãƒƒãƒ•ã‚¡/ウィンドウãŒæ—¢ã«æ¶ˆåŽ»ã•ã‚Œã¾ã—ãŸ"
 
 #. This should never happen.  Famous last word?
 msgid ""
 "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim."
 "org"
 msgstr ""
-"E280: TCL ÃƒÃ—̿Ū¥¨¥é¡¼: reflist Â±Ã¸Ã€Ã·!? vim-dev@vim.org Â¤Ã‹ÃŠÃ³Â¹Ã°Â¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+"E280: TCL è‡´å‘½çš„エラー: reflist æ±šæŸ“!? vim-dev@vim.org ã«å ±å‘Šã—ã¦ãã ã•ã„"
 
 msgid "cannot register callback command: buffer/window reference not found"
 msgstr ""
-"¥³¡¼¥ë¥Ã¥Ã¥¯¥³¥Þ¥ó¥É¤òÅÃÿ¤Ç¤­¤Þ¤»¤ó: Â¥Ã¥Ã¥Õ¥¡/¥¦¥£¥ó¥É¥¦¤Î»²¾È¤¬¤ß¤Ä¤«¤ê¤Þ¤»"
-"¤ó"
+"コールãƒãƒƒã‚¯ã‚³ãƒžãƒ³ãƒ‰ã‚’登録ã§ãã¾ã›ã‚“: ãƒãƒƒãƒ•ã‚¡/ウィンドウã®å‚ç…§ãŒè¦‹ã¤ã‹ã‚Šã¾ã›"
+"ã‚“"
 
 msgid ""
 "E571: Sorry, this command is disabled: the Tcl library could not be loaded."
 msgstr ""
-"E571: Â¤Â³Â¤ÃŽÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã̵¸ú¤Ç¤¹,¤´¤á¤ó¤Ê¤µ¤¤: Tcl¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¤Ç"
-"¤·¤¿."
-
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: TCL Â¥Â¨Â¥Ã©Â¡Â¼: Â½ÂªÃŽÂ»Â¥Â³Â¡Â¼Â¥Ã‰Â¤Â¬Ã€Â°Â¿Ã´ÃƒÃ¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó!? vim-dev@vim.org Â¤Ã‹ÃŠÃ³Â¹Ã°Â¤Â·"
-"¤Æ¤¯¤À¤µ¤¤"
+"E571: ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ç„¡åŠ¹ã§ã™,ã”ã‚ã‚“ãªã•ã„: Tclライブラリをロードã§ãã¾ã›ã‚“ã§"
+"ã—ãŸ."
 
 #, c-format
 msgid "E572: exit code %d"
-msgstr "E572: Â½ÂªÃŽÂ»Â¥Â³Â¡Â¼Â¥Ã‰ %d"
+msgstr "E572: çµ‚了コード %d"
 
 msgid "cannot get line"
-msgstr "¹Ô¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó"
+msgstr "行をå–å¾—ã§ãã¾ã›ã‚“"
 
 msgid "Unable to register a command server name"
-msgstr "Ì¿Î᥵¡¼¥Ã¤Î̾ð¤òÅÃÿ¤Ç¤­¤Þ¤»¤ó"
+msgstr "命令サーãƒã®åå‰ã‚’登録ã§ãã¾ã›ã‚“"
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248: ÃŒÃœÃ…ª¤Î¥×¥í¥°¥é¥à¤Ø¤Î¥³¥Þ¥ó¥ÉÃ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E248: ç›®çš„ã®ãƒ—ログラムã¸ã®ã‚³ãƒžãƒ³ãƒ‰é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
-msgstr "E573: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥ÂµÂ¡Â¼Â¥ÃID¤¬»È¤ï¤ì¤Þ¤·¤¿: %s"
+msgstr "E573: ç„¡åŠ¹ãªã‚µãƒ¼ãƒIDãŒä½¿ã‚ã‚Œã¾ã—ãŸ: %s"
 
 msgid "E251: VIM instance registry property is badly formed.  Deleted!"
-msgstr "E251: VIM Â¼Ã‚ÂΤÎÅÃÿ¥×¥í¥Ñ¥Æ¥£¤¬ÉÔÀµ¤Ç¤¹. Â¾ÃƒÂµÃ®Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿!"
+msgstr "E251: VIM å®Ÿä½“ã®ç™»éŒ²ãƒ—ロパティãŒä¸æ­£ã§ã™. æ¶ˆåŽ»ã—ã¾ã—ãŸ!"
 
 msgid "Unknown option argument"
-msgstr "̤ÃΤΥª¥×¥·¥ç¥ó°ú¿ô¤Ç¤¹"
+msgstr "未知ã®ã‚ªãƒ—ション引数ã§ã™"
 
 msgid "Too many edit arguments"
-msgstr "ÊÔ½¸°ú¿ô¤¬Â¿²á¤®¤Þ¤¹"
+msgstr "編集引数ãŒå¤šéŽãŽã¾ã™"
 
 msgid "Argument missing after"
-msgstr "°ú¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "引数ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "Garbage after option argument"
-msgstr "¥ª¥×¥·¥ç¥ó°ú¿ô¤Î¸å¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹"
+msgstr "オプション引数ã®å¾Œã«ã‚´ãƒŸãŒã‚ã‚Šã¾ã™"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr "\"+command\", \"-c command\", \"--cmd command\" Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+msgstr "\"+command\", \"-c command\", \"--cmd command\" ã®å¼•æ•°ãŒå¤šéŽãŽã¾ã™"
 
 msgid "Invalid argument for"
-msgstr "̵¸ú¤Ê°ú¿ô¤Ç¤¹: "
+msgstr "無効ãªå¼•æ•°ã§ã™: "
 
 #, c-format
 msgid "%d files to edit\n"
-msgstr "%d Â¸Ã„¤Î¥Õ¥¡¥¤¥ë¤¬ÊÔ½¸¤ò¹µ¤¨¤Æ¤¤¤Þ¤¹\n"
+msgstr "%d å€‹ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒç·¨é›†ã‚’控ãˆã¦ã„ã¾ã™\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "netbeans ã¯ã“ã®GUIã§ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“\n"
 
 msgid "This Vim was not compiled with the diff feature."
-msgstr "¤³¤ÎVim¤Ë¤Ãdiffµ¡Ç½¤¬¤¢¤ê¤Þ¤»¤ó(¥³¥ó¥Ñ¥¤¥ë»þÀßÄê)."
+msgstr "ã“ã®Vimã«ã¯diff機能ãŒã‚ã‚Šã¾ã›ã‚“(コンパイル時設定)."
+
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "'-nb' ä½¿ç”¨ä¸å¯èƒ½ã§ã™: ã‚³ãƒ³ãƒ‘イル時ã«ç„¡åŠ¹ã«ã•ã‚Œã¦ã„ã¾ã™\n"
 
 msgid "Attempt to open script file again: \""
-msgstr "¥¹¥¯¥ê¥×¥È¥Õ¥¡¥¤¥ë¤òºÆ¤Ó³«¤¤¤Æ¤ß¤Þ¤¹: \""
+msgstr "スクリプトファイルをå†ã³é–‹ã„ã¦ã¿ã¾ã™: \""
 
 msgid "Cannot open for reading: \""
-msgstr "ÆɹþÃѤȤ·¤Æ³«¤±¤Þ¤»¤ó"
+msgstr "読込用ã¨ã—ã¦é–‹ã‘ã¾ã›ã‚“"
 
 msgid "Cannot open for script output: \""
-msgstr "¥¹¥¯¥ê¥×¥È½ÃÃŽÃÃѤò³«¤±¤Þ¤»¤ó"
+msgstr "スクリプト出力用を開ã‘ã¾ã›ã‚“"
 
 msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-msgstr "Vim: Â¥Â¨Â¥Ã©Â¡Â¼: NetBeans¤«¤égvim¤ò¥¹¥¿¡¼¥È¤Ç¤­¤Þ¤»¤ó\n"
+msgstr "Vim: ã‚¨ãƒ©ãƒ¼: NetBeansã‹ã‚‰gvimをスタートã§ãã¾ã›ã‚“\n"
 
 msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "Vim: Â·Ã™Â¹Ã°: ÃƒÂ¼Ã‹Ã¶Â¤Ã˜Â¤ÃŽÂ½ÃÎäǤ䢤ê¤Þ¤»¤ó\n"
+msgstr "Vim: è­¦å‘Š: ç«¯æœ«ã¸ã®å‡ºåŠ›ã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
 
 msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "Vim: Â·Ã™Â¹Ã°: ÃƒÂ¼Ã‹Ã¶Â¤Â«Â¤Ã©Â¤ÃŽÃ†Ã¾ÃŽÃ¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó\n"
+msgstr "Vim: è­¦å‘Š: ç«¯æœ«ã‹ã‚‰ã®å…¥åŠ›ã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
 
 #. just in case..
 msgid "pre-vimrc command line"
-msgstr "vimrcð¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó"
+msgstr "vimrcå‰ã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³"
 
 #, c-format
 msgid "E282: Cannot read from \"%s\""
-msgstr "E282: \"%s\"¤«¤éÆɹþ¤à¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"
+msgstr "E282: \"%s\"ã‹ã‚‰èª­è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“"
 
 msgid ""
 "\n"
 "More info with: \"vim -h\"\n"
 msgstr ""
 "\n"
-"¤è¤ê¾ÜºÙ¤Ê¾ðÊó¤Ã: \"vim -h\"\n"
+"より詳細ãªæƒ…å ±ã¯: \"vim -h\"\n"
 
 msgid "[file ..]       edit specified file(s)"
-msgstr "[¥Õ¥¡¥¤¥ë..]    Â¤Â¢Â¤Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃŠÃ”½¸¤¹¤ë"
+msgstr "[ファイル..]    ã‚るファイルを編集ã™ã‚‹"
 
 msgid "-               read text from stdin"
-msgstr "-               Ã‰Â¸Â½Ã Ã†Ã¾ÃŽÃ¤«¤é¥Æ¥­¥¹¥È¤òÆɹþ¤à"
+msgstr "-               æ¨™æº–入力ã‹ã‚‰ãƒ†ã‚­ã‚¹ãƒˆã‚’読込む"
 
 msgid "-t tag          edit file where tag is defined"
-msgstr "-t Â¥Â¿Â¥Â°         Â¥Â¿Â¥Â°Â¤Â¬Ã„êµÃ¤µ¤ì¤¿¤È¤³¤í¤«¤éÊÔ½¸¤¹¤ë"
+msgstr "-t ã‚¿ã‚°         ã‚¿ã‚°ãŒå®šç¾©ã•ã‚ŒãŸã¨ã“ã‚ã‹ã‚‰ç·¨é›†ã™ã‚‹"
 
 msgid "-q [errorfile]  edit file with first error"
-msgstr "-q [errorfile]  ÂºÃ‡Â½Ã©Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡ÃŠÃ”½¸¤¹¤ë"
+msgstr "-q [errorfile]  æœ€åˆã®ã‚¨ãƒ©ãƒ¼ã§ç·¨é›†ã™ã‚‹"
 
 msgid ""
 "\n"
@@ -2821,24 +2940,24 @@ msgid ""
 msgstr ""
 "\n"
 "\n"
-"»ÈÃÑË¡:"
+"使用法:"
 
 msgid " vim [arguments] "
-msgstr " vim [°ú¿ô]"
+msgstr " vim [引数] "
 
 msgid ""
 "\n"
 "   or:"
 msgstr ""
 "\n"
-"   Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã:"
+"   ã‚‚ã—ãã¯:"
 
 msgid ""
 "\n"
 "Where case is ignored prepend / to make flag upper case"
 msgstr ""
 "\n"
-"Â羮ʸ»ú¤¬Ìµ»ë¤µ¤ì¤ë¾ì¹ç¤ÃÂçʸ»ú¤Ë¤¹¤ë¤¿¤á¤Ë / Â¤Ã²Ã°ÃÖ¤·¤Æ¤¯¤À¤µ¤¤"
+"大å°æ–‡å­—ãŒç„¡è¦–ã•ã‚Œã‚‹å ´åˆã¯å¤§æ–‡å­—ã«ã™ã‚‹ãŸã‚ã« / ã‚’å‰ç½®ã—ã¦ãã ã•ã„"
 
 msgid ""
 "\n"
@@ -2847,325 +2966,315 @@ msgid ""
 msgstr ""
 "\n"
 "\n"
-"°ú¿ô:\n"
+"引数:\n"
 
 msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\t¤³¤Î¤¢¤È¤Ë¤Ã¥Õ¥¡¥¤¥ë̾¤À¤±"
+msgstr "--\t\t\tã“ã®ã‚ã¨ã«ã¯ãƒ•ã‚¡ã‚¤ãƒ«åã ã‘"
 
 msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\t¥ï¥¤¥ë¥É¥«¡¼¥É¤òŸ³«¤·¤Ê¤¤"
+msgstr "--literal\t\tワイルドカードを展開ã—ãªã„"
 
 msgid "-register\t\tRegister this gvim for OLE"
-msgstr "-register\t\t¤³¤Îgvim¤òOLE¤È¤·¤ÆÅÃÿ¤¹¤ë"
+msgstr "-register\t\tã“ã®gvimã‚’OLEã¨ã—ã¦ç™»éŒ²ã™ã‚‹"
 
 msgid "-unregister\t\tUnregister gvim for OLE"
-msgstr "-unregister\t\tgvim¤ÎOLEÃ…Ãÿ¤ò²ò½ü¤¹¤ë"
+msgstr "-unregister\t\tgvimã®OLE登録を解除ã™ã‚‹"
 
 msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-msgstr "-g\t\t\tGUI¤Çµ¯Æ°¤¹¤ë (\"gvim\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+msgstr "-g\t\t\tGUIã§èµ·å‹•ã™ã‚‹ (\"gvim\" ã¨åŒã˜)"
 
 msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
-msgstr "-f or  --nofork\t¥Õ¥©¥¢¥°¥é¥¦¥ó¥É: GUI¤ò»Ã¤á¤ë¤È¤­¤Ëfork¤·¤Ê¤¤"
+msgstr "-f or  --nofork\tフォアグラウンド: GUIを始ã‚ã‚‹ã¨ãã«forkã—ãªã„"
 
 msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tVi¥â¡¼¥É (\"vi\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+msgstr "-v\t\t\tViモード (\"vi\" ã¨åŒã˜)"
 
 msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tEx¥â¡¼¥É (\"ex\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+msgstr "-e\t\t\tExモード (\"ex\" ã¨åŒã˜)"
+
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\t改良Exモード"
 
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\t¥µ¥¤¥ì¥ó¥È(¥ååÃ)¥â¡¼¥É (\"ex\" Ã€Ã¬ÃÑ)"
+msgstr "-s\t\t\tサイレント(ãƒãƒƒãƒ)モード (\"ex\" å°‚用)"
 
 msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tº¹Ê¬¥â¡¼¥É (\"vidiff\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+msgstr "-d\t\t\t差分モード (\"vidiff\" ã¨åŒã˜)"
 
 msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\t¥¤¡¼¥¸¡¼¥â¡¼¥É (\"evim\" Â¤ÃˆÃ†Â±Â¤Â¸, Â¥Ã¢Â¡Â¼Â¥Ã‰ÃŒÂµ)"
+msgstr "-y\t\t\tイージーモード (\"evim\" ã¨åŒã˜, ãƒ¢ãƒ¼ãƒ‰ç„¡)"
 
 msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tÆɹþÀìÃѥ⡼¥É (\"view\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+msgstr "-R\t\t\t読込専用モード (\"view\" ã¨åŒã˜)"
 
 msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tÀ©¸Â¥â¡¼¥É (\"rvim\" Â¤ÃˆÃ†Â±Â¤Â¸)"
+msgstr "-Z\t\t\t制é™ãƒ¢ãƒ¼ãƒ‰ (\"rvim\" ã¨åŒã˜)"
 
 msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tÊѹ¹ (¥Õ¥¡¥¤¥ëÊø»þ) Â¤Ã²Â¤Ã‡Â¤Â­Â¤ÃŠÂ¤Â¤Â¤Ã¨Â¤Â¦Â¤Ã‹Â¤Â¹Â¤Ã«"
+msgstr "-m\t\t\t変更 (ファイルä¿å­˜æ™‚) ã‚’ã§ããªã„よã†ã«ã™ã‚‹"
 
 msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\t¥Æ¥­¥¹¥È¤ÎÊÔ½¸¤ò¹Ô¤Ê¤¨¤Ê¤¤¤è¤¦¤Ë¤¹¤ë"
+msgstr "-M\t\t\tテキストã®ç·¨é›†ã‚’è¡Œãªãˆãªã„よã†ã«ã™ã‚‹"
 
 msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\t¥å¤¥Ê¥ê¥â¡¼¥É"
+msgstr "-b\t\t\tãƒã‚¤ãƒŠãƒªãƒ¢ãƒ¼ãƒ‰"
 
 msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tLisp¥â¡¼¥É"
+msgstr "-l\t\t\tLispモード"
 
 msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\tVi¸ß´¹¥â¡¼¥É: 'compatible'"
+msgstr "-C\t\t\tVi互æ›ãƒ¢ãƒ¼ãƒ‰: 'compatible'"
 
 msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\tViÈó¸ß´¹¥â¡¼¥É: 'nocompatible"
+msgstr "-N\t\t\tViéžäº’æ›ãƒ¢ãƒ¼ãƒ‰: 'nocompatible"
 
 msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr "-V[N][fname]\t\t¥í¥°½ÃÃŽÃÀßÄê [¥ì¥Ù¥ë N] [¥í¥°¥Õ¥¡¥¤¥ë̾ fname]"
+msgstr "-V[N][fname]\t\tログ出力設定 [レベル N] [ログファイルå fname]"
 
 msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\t¥Ç¥Ã¥Ã¥°¥â¡¼¥É"
+msgstr "-D\t\t\tデãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰"
 
 msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\t¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤ò»ÈÃѤ»¤º¥á¥â¥ê¤À¤±"
+msgstr "-n\t\t\tスワップファイルを使用ã›ãšãƒ¡ãƒ¢ãƒªã ã‘"
 
 msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\t¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤òÎóµó¤·½ªÎ»"
+msgstr "-r\t\t\tスワップファイルを列挙ã—終了"
 
 msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (¥Õ¥¡¥¤¥ë̾)\t¥¯¥é¥Ã¥·¥å¤·¤¿¥»¥Ã¥·¥ç¥ó¤òÉüµ¢"
+msgstr "-r (ファイルå)\tクラッシュã—ãŸã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’復帰"
 
 msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\t-r¤ÈƱ¤¸"
+msgstr "-L\t\t\t-rã¨åŒã˜"
 
 msgid "-f\t\t\tDon't use newcli to open window"
-msgstr "-f\t\t\t¥¦¥£¥ó¥É¥¦¤ò³«¤¯¤Î¤Ë newcli Â¤Ã²Â»ÃˆÃѤ·¤Ê¤¤"
+msgstr "-f\t\t\tウィンドウを開ãã®ã« newcli ã‚’使用ã—ãªã„"
 
 msgid "-dev <device>\t\tUse <device> for I/O"
-msgstr "-dev <device>\t\tI/O¤Ë <device> Â¤Ã²Â»ÃˆÃѤ¹¤ë"
+msgstr "-dev <device>\t\tI/Oã« <device> ã‚’使用ã™ã‚‹"
 
 msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\t¥¢¥é¥Ó¥¢¸ì¥â¡¼¥É¤Çµ¯Æ°¤¹¤ë"
+msgstr "-A\t\t\tアラビア語モードã§èµ·å‹•ã™ã‚‹"
 
 msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\t¥Ø¥Ö¥é¥¤¸ì¥â¡¼¥É¤Çµ¯Æ°¤¹¤ë"
+msgstr "-H\t\t\tヘブライ語モードã§èµ·å‹•ã™ã‚‹"
 
 msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\t¥Ú¥ë¥·¥¢¸ì¥â¡¼¥É¤Çµ¯Æ°¤¹¤ë"
+msgstr "-F\t\t\tペルシア語モードã§èµ·å‹•ã™ã‚‹"
 
 msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <terminal>\tüËö¤ò <terminal> Â¤Ã‹Ã€ÃŸÃ„ꤹ¤ë"
+msgstr "-T <terminal>\t端末を <terminal> ã«è¨­å®šã™ã‚‹"
 
 msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\t.vimrc¤ÎÂå¤ï¤ê¤Ë <vimrc> Â¤Ã²Â»ÃˆÂ¤Â¦"
+msgstr "-u <vimrc>\t\t.vimrcã®ä»£ã‚ã‚Šã« <vimrc> ã‚’使ã†"
 
 msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-msgstr "-U <gvimrc>\t\t.gvimrc¤ÎÂå¤ï¤ê¤Ë <gvimrc> Â¤Ã²Â»ÃˆÂ¤Â¦"
+msgstr "-U <gvimrc>\t\t.gvimrcã®ä»£ã‚ã‚Šã« <gvimrc> ã‚’使ã†"
 
 msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\t¥×¥é¥°¥¤¥ó¥¹¥¯¥ê¥×¥È¤ò¥í¡¼¥É¤·¤Ê¤¤"
+msgstr "--noplugin\t\tプラグインスクリプトをロードã—ãªã„"
 
 msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-p[N]\t\tN Â¸Ã„¥¿¥Ö¥Ú¡¼¥¸¤ò³«¤¯(¾ÊάÃÃ: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹Â¤Ã„¤­1¸Ä)"
+msgstr "-p[N]\t\tN å€‹ã‚¿ãƒ–ページを開ã(çœç•¥å€¤: ãƒ•ã‚¡ã‚¤ãƒ«ã«ã¤ã1個)"
 
 msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tN Â¸Ã„¥¦¥£¥ó¥É¥¦¤ò³«¤¯(¾ÊάÃÃ: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹Â¤Ã„¤­1¸Ä)"
+msgstr "-o[N]\t\tN å€‹ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã(çœç•¥å€¤: ãƒ•ã‚¡ã‚¤ãƒ«ã«ã¤ã1個)"
 
 msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\t-o¤ÈƱ¤¸¤À¤¬¿âľʬ³ä"
+msgstr "-O[N]\t\t-oã¨åŒã˜ã ãŒåž‚直分割"
 
 msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\t¥Õ¥¡¥¤¥ë¤ÎºÇ¸å¤«¤é¤Ã¤¸¤á¤ë"
+msgstr "+\t\t\tファイルã®æœ€å¾Œã‹ã‚‰ã¯ã˜ã‚ã‚‹"
 
 msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<lnum>\t\t<lnum> Â¹Ã”¤«¤é¤Ã¤¸¤á¤ë"
+msgstr "+<lnum>\t\t<lnum> è¡Œã‹ã‚‰ã¯ã˜ã‚ã‚‹"
 
 msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr "--cmd <command>\tvimrc¤ò¥í¡¼¥É¤¹¤ëð¤Ë <command> Â¤Ã²Â¼Ã‚¹Ô¤¹¤ë"
+msgstr "--cmd <command>\tvimrcをロードã™ã‚‹å‰ã« <command> ã‚’実行ã™ã‚‹"
 
 msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr "-c <command>\t\tºÇ½é¤Î¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¸å <command> Â¤Ã²Â¼Ã‚¹Ô¤¹¤ë"
+msgstr "-c <command>\t\t最åˆã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ロード後 <command> ã‚’実行ã™ã‚‹"
 
 msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <session>\t\tºÇ½é¤Î¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¸å¥Õ¥¡¥¤¥ë <session> Â¤Ã²Â¼Ã¨Â¹Ã¾Â¤Ã "
+msgstr "-S <session>\t\t最åˆã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ロード後ファイル <session> ã‚’å–込む"
 
 msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <scriptin>\t¥Õ¥¡¥¤¥ë <scriptin> Â¤Â«Â¤Ã©Â¥ÃŽÂ¡Â¼Â¥ÃžÂ¥Ã«Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã "
+msgstr "-s <scriptin>\tファイル <scriptin> ã‹ã‚‰ãƒŽãƒ¼ãƒžãƒ«ã‚³ãƒžãƒ³ãƒ‰ã‚’読込む"
 
 msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr "-w <scriptout>\tÆþÎä·¤¿Ã´¥³¥Þ¥ó¥É¤ò¥Õ¥¡¥¤¥ë <scriptout> Â¤Ã‹Ã„ɲ乤ë"
+msgstr "-w <scriptout>\t入力ã—ãŸå…¨ã‚³ãƒžãƒ³ãƒ‰ã‚’ファイル <scriptout> ã«è¿½åŠ ã™ã‚‹"
 
 msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr "-W <scriptout>\tÆþÎä·¤¿Ã´¥³¥Þ¥ó¥É¤ò¥Õ¥¡¥¤¥ë <scriptout> Â¤Ã‹ÃŠÃ¸¤¹¤ë"
+msgstr "-W <scriptout>\t入力ã—ãŸå…¨ã‚³ãƒžãƒ³ãƒ‰ã‚’ファイル <scriptout> ã«ä¿å­˜ã™ã‚‹"
 
 msgid "-x\t\t\tEdit encrypted files"
-msgstr "-x\t\t\t°Å¹æ²½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤¹¤ë"
+msgstr "-x\t\t\tæš—å·åŒ–ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã™ã‚‹"
 
 msgid "-display <display>\tConnect vim to this particular X-server"
-msgstr "-display <display>\tvim¤ò»ØÄꤷ¤¿ X Â¥ÂµÂ¡Â¼Â¥Ã¤ËÀܳ¤¹¤ë"
+msgstr "-display <display>\tvimを指定ã—㟠X ã‚µãƒ¼ãƒã«æŽ¥ç¶šã™ã‚‹"
 
 msgid "-X\t\t\tDo not connect to X server"
-msgstr "-X\t\t\tX¥µ¡¼¥Ã¤ËÀܳ¤·¤Ê¤¤"
+msgstr "-X\t\t\tXサーãƒã«æŽ¥ç¶šã—ãªã„"
 
 msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-msgstr "--remote <files>\t²Äǽ¤Ê¤é¤ÃVim¥µ¡¼¥Ã¤Ç <files> Â¤Ã²ÃŠÃ”½¸¤¹¤ë"
+msgstr "--remote <files>\tå¯èƒ½ãªã‚‰ã°Vimサーãƒã§ <files> ã‚’編集ã™ã‚‹"
 
 msgid "--remote-silent <files>  Same, don't complain if there is no server"
-msgstr "--remote-silnet <files>  Ã†Â±Â¾Ã¥, Â¥ÂµÂ¡Â¼Â¥Ã¤¬Ìµ¤¯¤Æ¤â·Ù¹ðʸ¤ò½ÃÎ䷤ʤ¤"
+msgstr "--remote-silent <files>  åŒä¸Š, ã‚µãƒ¼ãƒãŒç„¡ãã¦ã‚‚警告文を出力ã—ãªã„"
 
 msgid ""
 "--remote-wait <files>  As --remote but wait for files to have been edited"
-msgstr "--remote-wait <files>\t--remote¸å Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃŠÃ”½¸¤¬½ª¤ï¤ë¤Î¤òÂÔ¤Ä"
+msgstr "--remote-wait <files>\t--remote後 ãƒ•ã‚¡ã‚¤ãƒ«ã®ç·¨é›†ãŒçµ‚ã‚ã‚‹ã®ã‚’å¾…ã¤"
 
 msgid ""
 "--remote-wait-silent <files>  Same, don't complain if there is no server"
-msgstr "--remote-wait-silent <files>  Ã†Â±Â¾Ã¥, Â¥ÂµÂ¡Â¼Â¥Ã¤¬Ìµ¤¯¤Æ¤â·Ù¹ðʸ¤ò½ÃÎ䷤ʤ¤"
+msgstr "--remote-wait-silent <files>  åŒä¸Š, ã‚µãƒ¼ãƒãŒç„¡ãã¦ã‚‚警告文を出力ã—ãªã„"
 
 msgid ""
 "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
 msgstr ""
-"--remote-tab[-wait][-silent] <files>  --remote¤Ç¥Õ¥¡¥¤¥ë1¤Ä¤Ë¤Ä¤­1¤Ä¤Î¥¿¥Ö"
-"¥Ú¡¼¥¸¤ò³«¤¯"
+"--remote-tab[-wait][-silent] <files>  --remoteã§ãƒ•ã‚¡ã‚¤ãƒ«1ã¤ã«ã¤ã1ã¤ã®ã‚¿ãƒ–"
+"ページを開ã"
 
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-msgstr "--remote-send <keys>\tVim¥µ¡¼¥Ã¤Ë <keys> Â¤Ã²Ã÷¿®¤·¤Æ½ªÎ»¤¹¤ë"
+msgstr "--remote-send <keys>\tVimサーãƒã« <keys> ã‚’é€ä¿¡ã—ã¦çµ‚了ã™ã‚‹"
 
 msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-msgstr "--remote-expr <expr>\t¥µ¡¼¥Ã¤Ç <expr> Â¤Ã²Â¼Ã‚¹Ô¤·¤Æ·ë²Ì¤òɽ¼¨¤¹¤ë"
+msgstr "--remote-expr <expr>\tサーãƒã§ <expr> ã‚’実行ã—ã¦çµæžœã‚’表示ã™ã‚‹"
 
 msgid "--serverlist\t\tList available Vim server names and exit"
-msgstr "--serverlist\t\tVim¥µ¡¼¥Ã̾¤Î°ìÃ÷¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë"
+msgstr "--serverlist\t\tVimサーãƒåã®ä¸€è¦§ã‚’表示ã—ã¦çµ‚了ã™ã‚‹"
 
 msgid "--servername <name>\tSend to/become the Vim server <name>"
-msgstr "--servename <name>\t\tVim¥µ¡¼¥à<name> Â¤Ã‹Ã÷¿®/̾ðÀßÄꤹ¤ë"
+msgstr "--servername <name>\tVimサーム<name> ã«é€ä¿¡/åå‰è¨­å®šã™ã‚‹"
+
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <file>\tèµ·å‹•ã«ã‹ã‹ã£ãŸæ™‚é–“ã®è©³ç´°ã‚’ <file> ã¸å‡ºåŠ›ã™ã‚‹"
 
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\t.viminfo¤ÎÂå¤ï¤ê¤Ë <viminfo> Â¤Ã²Â»ÃˆÂ¤Â¦"
+msgstr "-i <viminfo>\t\t.viminfoã®ä»£ã‚ã‚Šã« <viminfo> ã‚’使ã†"
 
 msgid "-h  or  --help\tPrint Help (this message) and exit"
-msgstr "-h or  --help\t¥Ø¥ë¥×(¤³¤Î¥á¥Ã¥»¡¼¥¸)¤òɽ¼¨¤·½ªÎ»¤¹¤ë"
+msgstr "-h or  --help\tヘルプ(ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸)を表示ã—終了ã™ã‚‹"
 
 msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\t¥á¼¥¸¥ç¥ó¾ðÊó¤òɽ¼¨¤·½ªÎ»¤¹¤ë"
+msgstr "--version\t\tãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報を表示ã—終了ã™ã‚‹"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (Motif version):\n"
 msgstr ""
 "\n"
-"gvim¤Ë¤è¤Ã¤Æ²ò¼á¤µ¤ì¤ë°ú¿ô(Motif¥á¼¥¸¥ç¥ó):\n"
+"gvimã«ã‚ˆã£ã¦è§£é‡ˆã•ã‚Œã‚‹å¼•æ•°(Motifãƒãƒ¼ã‚¸ãƒ§ãƒ³):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (neXtaw version):\n"
 msgstr ""
 "\n"
-"gvim¤Ë¤è¤Ã¤Æ²ò¼á¤µ¤ì¤ë°ú¿ô(neXtaw¥á¼¥¸¥ç¥ó):\n"
+"gvimã«ã‚ˆã£ã¦è§£é‡ˆã•ã‚Œã‚‹å¼•æ•°(neXtawãƒãƒ¼ã‚¸ãƒ§ãƒ³):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (Athena version):\n"
 msgstr ""
 "\n"
-"gvim¤Ë¤è¤Ã¤Æ²ò¼á¤µ¤ì¤ë°ú¿ô(Athena¥á¼¥¸¥ç¥ó):\n"
+"gvimã«ã‚ˆã£ã¦è§£é‡ˆã•ã‚Œã‚‹å¼•æ•°(Athenaãƒãƒ¼ã‚¸ãƒ§ãƒ³):\n"
 
 msgid "-display <display>\tRun vim on <display>"
-msgstr "-display <display>\t<display> Â¤Ã‡vim¤ò¼Â¹Ô¤¹¤ë"
+msgstr "-display <display>\t<display> ã§vimを実行ã™ã‚‹"
 
 msgid "-iconic\t\tStart vim iconified"
-msgstr "-iconic\t\tºÇ¾®²½¤·¤¿¾õÂÖ¤Çvim¤òµ¯Æ°¤¹¤ë"
-
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <name>\t\tvim¤Î̾¤¬ <name> Â¤Ã‡Â¤Â¢Â¤Ã«Â¤ÃˆÂ¤Â·Â¤Ã†Â¥ÃªÂ¥Â½Â¡Â¼Â¥Â¹Â¤Ã²Â»ÃˆÂ¤Â¦"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (¼ÂÃõ¤µ¤ì¤Æ¤¤¤Ê¤¤)\n"
+msgstr "-iconic\t\t最å°åŒ–ã—ãŸçŠ¶æ…‹ã§vimã‚’èµ·å‹•ã™ã‚‹"
 
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
-msgstr "-background <color>\tÇØ·Ê¿§¤Ë <color> Â¤Ã²Â»ÃˆÂ¤Â¦(ƱµÃ: -bg)"
+msgstr "-background <color>\t背景色㫠<color> ã‚’使ã†(åŒç¾©: -bg)"
 
 msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-msgstr "-foreground <color>\tð·Ê¿§¤Ë <color> Â¤Ã²Â»ÃˆÂ¤Â¦(ƱµÃ: -fg)"
+msgstr "-foreground <color>\tå‰æ™¯è‰²ã« <color> ã‚’使ã†(åŒç¾©: -fg)"
 
 msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-msgstr "-font <font>\t\t¥Æ¥­¥¹¥Èɽ¼¨¤Ë <font> Â¤Ã²Â»ÃˆÂ¤Â¦(ƱµÃ: -fn)"
+msgstr "-font <font>\t\tテキスト表示㫠<font> ã‚’使ã†(åŒç¾©: -fn)"
 
 msgid "-boldfont <font>\tUse <font> for bold text"
-msgstr "-boldfont <font>\tÂÀ»ú¤Ë <font> Â¤Ã²Â»ÃˆÂ¤Â¦"
+msgstr "-boldfont <font>\t太字㫠<font> ã‚’使ã†"
 
 msgid "-italicfont <font>\tUse <font> for italic text"
-msgstr "-italicfont <for>\t¼ÃÂλú¤Ë <font> Â¤Ã²Â»ÃˆÂ¤Â¦"
+msgstr "-italicfont <for>\t斜体字㫠<font> ã‚’使ã†"
 
 msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-msgstr "-geometry <geom>\t½é´üÇÛÃ֤ˠ<geom> Â¤Ã²Â»ÃˆÂ¤Â¦(ƱµÃ: -geom)"
+msgstr "-geometry <geom>\tåˆæœŸé…置㫠<geom> ã‚’使ã†(åŒç¾©: -geom)"
 
 msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-msgstr "-borderwidth <width>\t¶­³¦¤ÎÉý¤ò <width> Â¤Ã‹Â¤Â¹Â¤Ã«(ƱµÃ: -bw)"
+msgstr "-borderwidth <width>\t境界ã®å¹…ã‚’ <width> ã«ã™ã‚‹(åŒç¾©: -bw)"
 
 msgid "-scrollbarwidth <width>  Use a scrollbar width of <width> (also: -sw)"
 msgstr ""
-"-scrollbarwidth <width>  Â¥Â¹Â¥Â¯Â¥Ã­Â¡Â¼Â¥Ã«Â¥Ã¡¼¤ÎÉý¤ò <width> Â¤Ã‹Â¤Â¹Â¤Ã«(ƱµÃ: -sw)"
+"-scrollbarwidth <width>  ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼ã®å¹…ã‚’ <width> ã«ã™ã‚‹(åŒç¾©: -sw)"
 
 msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-msgstr "-menuheight <height>\t¥á¥Ë¥å¡¼¥Ã¡¼¤Î¹â¤µ¤ò <height> Â¤Ã‹Â¤Â¹Â¤Ã«(ƱµÃ: -mh)"
+msgstr "-menuheight <height>\tメニューãƒãƒ¼ã®é«˜ã•ã‚’ <height> ã«ã™ã‚‹(åŒç¾©: -mh)"
 
 msgid "-reverse\t\tUse reverse video (also: -rv)"
-msgstr "-reverse\t\tȿž±ÇÃü¤ò»ÈÃѤ¹¤ë(ƱµÃ: -rv)"
+msgstr "-reverse\t\tå転映åƒã‚’使用ã™ã‚‹(åŒç¾©: -rv)"
 
 msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-msgstr "+reverse\t\tȿž±ÇÃü¤ò»ÈÃѤ·¤Ê¤¤(ƱµÃ: +rv)"
+msgstr "+reverse\t\tå転映åƒã‚’使用ã—ãªã„(åŒç¾©: +rv)"
 
 msgid "-xrm <resource>\tSet the specified resource"
-msgstr "-xrm <resource>\tÆÃÄê¤Î¥ê¥½¡¼¥¹¤ò»ÈÃѤ¹¤ë"
-
-msgid ""
-"\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"gvim¤Ë¤è¤Ã¤Æ²ò¼á¤µ¤ì¤ë°ú¿ô(RISC OS¥á¼¥¸¥ç¥ó):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <number>\t½é´ü¤Î¥¦¥£¥ó¥É¥¦¤Î¥³¥é¥àñ°Ì¤ÎÉý"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <number>\t½é´ü¤Î¥¦¥£¥ó¥É¥¦¤Î¹Ôñ°Ì¤Î¹â¤µ"
+msgstr "-xrm <resource>\t特定ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’使用ã™ã‚‹"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
-"gvim¤Ë¤è¤Ã¤Æ²ò¼á¤µ¤ì¤ë°ú¿ô(GTK+¥á¼¥¸¥ç¥ó):\n"
+"gvimã«ã‚ˆã£ã¦è§£é‡ˆã•ã‚Œã‚‹å¼•æ•°(GTK+ãƒãƒ¼ã‚¸ãƒ§ãƒ³):\n"
 
 msgid "-display <display>\tRun vim on <display> (also: --display)"
-msgstr "-display <display>\t<display> Â¤Ã‡vim¤ò¼Â¹Ô¤¹¤ë(ƱµÃ: --display)"
+msgstr "-display <display>\t<display> ã§vimを実行ã™ã‚‹(åŒç¾©: --display)"
 
 msgid "--role <role>\tSet a unique role to identify the main window"
-msgstr "--role <role>\t¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤ò¼±Ê̤¹¤ë°ì°Õ¤ÊÌò³ä(role)¤òÀßÄꤹ¤ë"
+msgstr "--role <role>\tメインウィンドウを識別ã™ã‚‹ä¸€æ„ãªå½¹å‰²(role)を設定ã™ã‚‹"
 
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-msgstr "--socketid <xid>\t°Û¤Ê¤ëGTK widget¤ÇVim¤ò³«¤¯"
+msgstr "--socketid <xid>\tç•°ãªã‚‹GTK widgetã§Vimã‚’é–‹ã"
+
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tウィンドウIDを標準出力ã«å‡ºåŠ›ã™ã‚‹"
 
 msgid "-P <parent title>\tOpen Vim inside parent application"
-msgstr "-P <¿Æ¤Î¥¿¥¤¥È¥ë>\tVim¤ò¿Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÃæ¤Çµ¯Æ°¤¹¤ë"
+msgstr "-P <親ã®ã‚¿ã‚¤ãƒˆãƒ«>\tVimを親アプリケーションã®ä¸­ã§èµ·å‹•ã™ã‚‹"
 
 msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-msgstr "--windowid <HWND>\t°Û¤Ê¤ëWin32 widget¤ÎÆâÉô¤ËVim¤ò³«¤¯"
+msgstr "--windowid <HWND>\tç•°ãªã‚‹Win32 widgetã®å†…部ã«Vimã‚’é–‹ã"
 
 msgid "No display"
-msgstr "¥Ç¥£¥¹¥×¥ì¥¤¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+msgstr "ディスプレイãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #. Failed to send, abort.
 msgid ": Send failed.\n"
-msgstr ": Ã÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿.\n"
+msgstr ": é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸ.\n"
 
 #. Let vim start normally.
 msgid ": Send failed. Trying to execute locally\n"
-msgstr ": Ã÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿. Â¥Ã­Â¡Â¼Â¥Â«Â¥Ã«Â¤Ã‡Â¤ÃŽÂ¼Ã‚¹Ô¤ò»î¤ß¤Æ¤¤¤Þ¤¹\n"
+msgstr ": é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸ. ãƒ­ãƒ¼ã‚«ãƒ«ã§ã®å®Ÿè¡Œã‚’試ã¿ã¦ã„ã¾ã™\n"
 
 #, c-format
 msgid "%d of %d edited"
-msgstr "%d Â¸Ã„ (%d Â¸Ã„Ãæ) Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃŠÃ”½¸¤·¤Þ¤·¤¿"
+msgstr "%d å€‹ (%d å€‹ä¸­) ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã—ã¾ã—ãŸ"
 
 msgid "No display: Send expression failed.\n"
-msgstr "¥Ç¥£¥¹¥×¥ì¥¤¤¬¤¢¤ê¤Þ¤»¤ó: Â¼Â°Â¤ÃŽÃ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿.\n"
+msgstr "ディスプレイãŒã‚ã‚Šã¾ã›ã‚“: å¼ã®é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸ.\n"
 
 msgid ": Send expression failed.\n"
-msgstr ": Â¼Â°Â¤ÃŽÃ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿.\n"
+msgstr ": å¼ã®é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸ.\n"
 
 msgid "No marks set"
-msgstr "¥Þ¡¼¥¯¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "マークãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "E283: No marks matching \"%s\""
-msgstr "E283: \"%s\" Â¤Ã‹Â³ÂºÃ…ö¤¹¤ë¥Þ¡¼¥¯¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E283: \"%s\" ã«è©²å½“ã™ã‚‹ãƒžãƒ¼ã‚¯ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #. Highlight title
 msgid ""
@@ -3173,7 +3282,7 @@ msgid ""
 "mark line  col file/text"
 msgstr ""
 "\n"
-"mark   Â¹Ã”   ÃŽÃ³ Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«/¥Æ¥­¥¹¥È"
+"mark   è¡Œ   åˆ— ãƒ•ã‚¡ã‚¤ãƒ«/テキスト"
 
 #. Highlight title
 msgid ""
@@ -3181,7 +3290,7 @@ msgid ""
 " jump line  col file/text"
 msgstr ""
 "\n"
-" jump   Â¹Ã”   ÃŽÃ³ Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«/¥Æ¥­¥¹¥È"
+" jump   è¡Œ   åˆ— ãƒ•ã‚¡ã‚¤ãƒ«/テキスト"
 
 #. Highlight title
 msgid ""
@@ -3189,452 +3298,485 @@ msgid ""
 "change line  col text"
 msgstr ""
 "\n"
-"Êѹ¹   Â¹Ã”    ÃŽÃ³  Â¥Ã†Â¥Â­Â¥Â¹Â¥Ãˆ"
+"変更   è¡Œ    åˆ—  ãƒ†ã‚­ã‚¹ãƒˆ"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
 msgstr ""
 "\n"
-"# Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¥ÃžÂ¡Â¼Â¥Â¯:\n"
+"# Ã£\83\95ã\82¡ã\82¤ã\83«ã\83\9eã\83¼ã\82¯:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
 msgstr ""
 "\n"
-"# Â¥Â¸Â¥Ã£Â¥Ã³Â¥Ã—¥ê¥¹¥È (¿·¤·¤¤¤â¤Î¤¬Àè):\n"
+"# ã‚¸ãƒ£ãƒ³ãƒ—リスト (æ–°ã—ã„ã‚‚ã®ãŒå…ˆ):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
 msgstr ""
 "\n"
-"# Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Ã†Ã¢Â¥ÃžÂ¡Â¼Â¥Â¯Â¤ÃŽÃúÎò (¿·¤·¤¤¤â¤Î¤«¤é¸Å¤¤¤â¤Î):\n"
+"# ãƒ•ã‚¡ã‚¤ãƒ«å†…マークã®å±¥æ­´ (æ–°ã—ã„ã‚‚ã®ã‹ã‚‰å¤ã„ã‚‚ã®):\n"
 
 msgid "Missing '>'"
-msgstr "'>' Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "'>' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "E543: Not a valid codepage"
-msgstr "E543: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Â³Â¡Â¼Â¥Ã‰Â¥ÃšÂ¡Â¼Â¥Â¸Â¤Ã‡Â¤Â¹"
+msgstr "E543: ç„¡åŠ¹ãªã‚³ãƒ¼ãƒ‰ãƒšãƒ¼ã‚¸ã§ã™"
 
 msgid "E284: Cannot set IC values"
-msgstr "E284: IC¤ÎÃäòÀßÄê¤Ç¤­¤Þ¤»¤ó"
+msgstr "E284: ICã®å€¤ã‚’設定ã§ãã¾ã›ã‚“"
 
 msgid "E285: Failed to create input context"
-msgstr "E285: Â¥Â¤Â¥Ã³Â¥Ã—¥Ã¥È¥³¥ó¥Æ¥­¥¹¥È¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E285: ã‚¤ãƒ³ãƒ—ットコンテキストã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "E286: Failed to open input method"
-msgstr "E286: Â¥Â¤Â¥Ã³Â¥Ã—¥Ã¥È¥á¥½¥Ã¥É¤Î¥ª¡¼¥×¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E286: ã‚¤ãƒ³ãƒ—ットメソッドã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "E287: Warning: Could not set destroy callback to IM"
-msgstr "E287: Â·Ã™Â¹Ã°: IM¤ÎÇ˲õ¥³¡¼¥ë¥Ã¥Ã¥¯¤òÀßÄê¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "E287: è­¦å‘Š: IMã®ç ´å£Šã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’設定ã§ãã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "E288: input method doesn't support any style"
-msgstr "E288: Â¥Â¤Â¥Ã³Â¥Ã—¥Ã¥È¥á¥½¥Ã¥É¤Ã¤É¤ó¤Ê¥¹¥¿¥¤¥ë¤â¥µ¥Ã¡¼¥È¤·¤Þ¤»¤ó"
+msgstr "E288: ã‚¤ãƒ³ãƒ—ットメソッドã¯ã©ã‚“ãªã‚¹ã‚¿ã‚¤ãƒ«ã‚‚サãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
 
 msgid "E289: input method doesn't support my preedit type"
-msgstr "E289: Â¥Â¤Â¥Ã³Â¥Ã—¥Ã¥È¥á¥½¥Ã¥É¤àmy preedit type Â¤Ã²Â¥ÂµÂ¥Ã¡¼¥È¤·¤Þ¤»¤ó"
-
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: over-the-spot Â¥Â¹Â¥Â¿Â¥Â¤Â¥Ã«Â¤Ã‹Â¤Ãfontset¤¬É¬ÃפǤ¹"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr "E291: GTK+¤¬1.2.3¤è¤ê¤â¸Å¤¤¤Î¤Ç¥¹¥Æ¡¼¥¿¥¹¥¨¥ê¥¢¤¬Ìµ¸ú¤Ç¤¹"
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: Â¥Â¤Â¥Ã³Â¥Ã—¥Ã¥È¥á¥½¥Ã¥É¥µ¡¼¥à¤¬Æ°ºî¤·¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E289: ã‚¤ãƒ³ãƒ—ットメソッド㯠my preedit type ã‚’サãƒãƒ¼ãƒˆã—ã¾ã›ã‚“"
 
 msgid "E293: block was not locked"
-msgstr "E293: Â¥Ã–¥í¥Ã¥¯¤¬¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E293: ãƒ–ロックãŒãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E294: Seek error in swap file read"
-msgstr "E294: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ëÆɹþ»þ¤Ë¥·¡¼¥¯¥¨¥é¡¼¤Ç¤¹"
+msgstr "E294: ã‚¹ãƒ¯ãƒƒãƒ—ファイル読込時ã«ã‚·ãƒ¼ã‚¯ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 msgid "E295: Read error in swap file"
-msgstr "E295: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤ÎÆɹþ¤ß¥¨¥é¡¼¤Ç¤¹"
+msgstr "E295: ã‚¹ãƒ¯ãƒƒãƒ—ファイルã®èª­è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 msgid "E296: Seek error in swap file write"
-msgstr "E296: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë½ñ¹þ¤ß»þ¤Ë¥·¡¼¥¯¥¨¥é¡¼¤Ç¤¹"
+msgstr "E296: ã‚¹ãƒ¯ãƒƒãƒ—ファイル書込ã¿æ™‚ã«ã‚·ãƒ¼ã‚¯ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 msgid "E297: Write error in swap file"
-msgstr "E297: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤Î½ñ¹þ¤ß¥¨¥é¡¼¤Ç¤¹"
+msgstr "E297: ã‚¹ãƒ¯ãƒƒãƒ—ファイルã®æ›¸è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 msgid "E300: Swap file already exists (symlink attack?)"
-msgstr "E300: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬´û¤Ë¸ºß¤·¤Þ¤¹ (symlink¤Ë¤è¤ë¹¶·â?)"
+msgstr "E300: ã‚¹ãƒ¯ãƒƒãƒ—ファイルãŒæ—¢ã«å­˜åœ¨ã—ã¾ã™ (symlinkã«ã‚ˆã‚‹æ”»æ’ƒ?)"
 
 msgid "E298: Didn't get block nr 0?"
-msgstr "E298: Â¥Ã–¥í¥Ã¥¯ 0 Â¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³?"
+msgstr "E298: ãƒ–ロック 0 ã‚’å–å¾—ã§ãã¾ã›ã‚“?"
 
 msgid "E298: Didn't get block nr 1?"
-msgstr "E298: Â¥Ã–¥í¥Ã¥¯ 1 Â¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³?"
+msgstr "E298: ãƒ–ロック 1 ã‚’å–å¾—ã§ãã¾ã›ã‚“?"
 
 msgid "E298: Didn't get block nr 2?"
-msgstr "E298: Â¥Ã–¥í¥Ã¥¯ 2 Â¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³?"
+msgstr "E298: ãƒ–ロック 2 ã‚’å–å¾—ã§ãã¾ã›ã‚“?"
+
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: ã‚¹ãƒ¯ãƒƒãƒ—ファイルã®æš—å·ã‚’更新中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
 
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: Â¤ÂªÂ¤ÃƒÂ¤Ãˆ, Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬¼º¤ï¤ì¤Þ¤·¤¿!!!"
+msgstr "E301: ãŠã£ã¨, ã‚¹ãƒ¯ãƒƒãƒ—ファイルãŒå¤±ã‚ã‚Œã¾ã—ãŸ!!!"
 
 msgid "E302: Could not rename swap file"
-msgstr "E302: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤Î̾ð¤òÊѤ¨¤é¤ì¤Þ¤»¤ó"
+msgstr "E302: ã‚¹ãƒ¯ãƒƒãƒ—ファイルã®åå‰ã‚’変ãˆã‚‰ã‚Œã¾ã›ã‚“"
 
 #, c-format
 msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr "E303: \"%s\" Â¤ÃŽÂ¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤ò³«¤±¤Ê¤¤¤Î¤Ç¥ê¥«¥Ã¥ê¤ÃÉÔ²Äǽ¤Ç¤¹"
+msgstr "E303: \"%s\" ã®ã‚¹ãƒ¯ãƒƒãƒ—ファイルを開ã‘ãªã„ã®ã§ãƒªã‚«ãƒãƒªã¯ä¸å¯èƒ½ã§ã™"
 
 msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block0(): Â¥Ã–¥í¥Ã¥¯ 0 Â¤Ã²Â¼Ã¨Ã†Ã€Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿??"
+msgstr "E304: ml_upd_block0(): ãƒ–ロック 0 ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ??"
 
 #, c-format
 msgid "E305: No swap file found for %s"
-msgstr "E305: %s Â¤Ã‹Â¤Ã¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó"
+msgstr "E305: %s ã«ã¯ã‚¹ãƒ¯ãƒƒãƒ—ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "Enter number of swap file to use (0 to quit): "
-msgstr "»ÈÃѤ¹¤ë¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎÈÖ¹æ¤òÆþÎ䷤Ƥ¯¤À¤µ¤¤(0 Â¤Ã‡Â½ÂªÃŽÂ»): "
+msgstr "使用ã™ã‚‹ã‚¹ãƒ¯ãƒƒãƒ—ファイルã®ç•ªå·ã‚’入力ã—ã¦ãã ã•ã„(0 ã§çµ‚了): "
 
 #, c-format
 msgid "E306: Cannot open %s"
-msgstr "E306: %s Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E306: %s ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 msgid "Unable to read block 0 from "
-msgstr "¥Ö¥í¥Ã¥¯ 0 Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³ "
+msgstr "ブロック 0 ã‚’読込ã‚ã¾ã›ã‚“ "
 
 msgid ""
 "\n"
 "Maybe no changes were made or Vim did not update the swap file."
 msgstr ""
 "\n"
-"¶²¤é¤¯Êѹ¹¤¬¤µ¤ì¤Æ¤¤¤Ê¤¤¤«Vim¤¬¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤ò¹¹¿·¤·¤Æ¤¤¤Þ¤»¤ó."
+"æらã変更ãŒã•ã‚Œã¦ã„ãªã„ã‹VimãŒã‚¹ãƒ¯ãƒƒãƒ—ファイルを更新ã—ã¦ã„ã¾ã›ã‚“."
 
 msgid " cannot be used with this version of Vim.\n"
-msgstr " Vim¤Î¤³¤Î¥Ã¡¼¥¸¥ç¥ó¤Ç¤Ã»ÈÃѤǤ­¤Þ¤»¤ó.\n"
+msgstr " Vimã®ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“.\n"
 
 msgid "Use Vim version 3.0.\n"
-msgstr "Vim¤Î¥Ã¡¼¥¸¥ç¥ó3.0¤ò»ÈÃѤ·¤Æ¤¯¤À¤µ¤¤.\n"
+msgstr "Vimã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³3.0を使用ã—ã¦ãã ã•ã„.\n"
 
 #, c-format
 msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %s Â¤ÃVim¤Î¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤Ç¤Ã¤Ê¤¤¤è¤¦¤Ç¤¹"
+msgstr "E307: %s ã¯Vimã®ã‚¹ãƒ¯ãƒƒãƒ—ファイルã§ã¯ãªã„よã†ã§ã™"
 
 msgid " cannot be used on this computer.\n"
-msgstr " Â¤Â³Â¤ÃŽÂ¥Â³Â¥Ã³Â¥Ã”¥å¡¼¥¿¤Ç¤Ã»ÈÃѤǤ­¤Þ¤»¤ó.\n"
+msgstr " ã“ã®ã‚³ãƒ³ãƒ”ュータã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“.\n"
 
 msgid "The file was created on "
-msgstr "¤³¤Î¥Õ¥¡¥¤¥ë¤Ã¼¡¤Î¾ì½ê¤Çºî¤é¤ì¤Þ¤·¤¿ "
+msgstr "ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ¬¡ã®å ´æ‰€ã§ä½œã‚‰ã‚Œã¾ã—㟠"
 
 msgid ""
 ",\n"
 "or the file has been damaged."
 msgstr ""
 ",\n"
-"¤â¤·¤¯¤Ã¥Õ¥¡¥¤¥ë¤¬Â»½ý¤·¤Æ¤¤¤Þ¤¹."
+"ã‚‚ã—ãã¯ãƒ•ã‚¡ã‚¤ãƒ«ãŒæå‚·ã—ã¦ã„ã¾ã™."
+
+#, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr ""
+"E833: %s ã¯ã“ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®Vimã§ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„å½¢å¼ã§æš—å·åŒ–ã•ã‚Œã¦ã„ã¾ã™"
 
 msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr " Â¤Ã»½ý¤·¤Æ¤¤¤Þ¤¹ (¥Ú¡¼¥¸¥µ¥¤¥º¤¬ºÇ¾®Ãäò²¼²ó¤Ã¤Æ¤¤¤Þ¤¹).\n"
+msgstr " ã¯æå‚·ã—ã¦ã„ã¾ã™ (ページサイズãŒæœ€å°å€¤ã‚’下回ã£ã¦ã„ã¾ã™).\n"
 
 #, c-format
 msgid "Using swap file \"%s\""
-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Â»ÃˆÃÑÃæ"
+msgstr "スワップファイル \"%s\" ã‚’使用中"
 
 #, c-format
 msgid "Original file \"%s\""
-msgstr "¸¶ËÜ¥Õ¥¡¥¤¥ë \"%s\""
+msgstr "原本ファイル \"%s\""
 
 msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: Â·Ã™Â¹Ã°: Â¸Â¶Ã‹ÃœÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬ÃŠÃ‘¹¹¤µ¤ì¤Æ¤¤¤Þ¤¹"
+msgstr "E308: è­¦å‘Š: åŽŸæœ¬ãƒ•ã‚¡ã‚¤ãƒ«ãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™"
+
+#, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "スワップファイルã¯æš—å·åŒ–ã•ã‚Œã¦ã„ã¾ã™: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"æ–°ã—ã„æš—å·ã‚­ãƒ¼ã‚’入力ã—ãŸã‚ã¨ã«ãƒ†ã‚­ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ã—ã¦ã„ãªã„å ´åˆã¯,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"æ–°ã—ã„æš—å·ã‚­ãƒ¼ã‚’入力ã—ã¦ãã ã•ã„."
+
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"æš—å·ã‚­ãƒ¼ã‚’変ãˆãŸã‚ã¨ã«ãƒ†ã‚­ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ã—ãŸå ´åˆã¯, ãƒ†ã‚­ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã¨"
+
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"スワップファイルã«åŒã˜æš—å·ã‚­ãƒ¼ã‚’使ã†ãŸã‚ã«enterã ã‘を押ã—ã¦ãã ã•ã„."
 
 #, c-format
 msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: %s Â¤Â«Â¤Ã©Â¥Ã–¥í¥Ã¥¯ 1 Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E309: %s ã‹ã‚‰ãƒ–ロック 1 ã‚’読込ã‚ã¾ã›ã‚“"
 
 msgid "???MANY LINES MISSING"
-msgstr "???¿¤¯¤Î¹Ô¤¬¼º¤ï¤ì¤Æ¤¤¤Þ¤¹"
+msgstr "???多ãã®è¡ŒãŒå¤±ã‚ã‚Œã¦ã„ã¾ã™"
 
 msgid "???LINE COUNT WRONG"
-msgstr "???¹Ô¿ô¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "???行数ãŒé–“é•ã£ã¦ã„ã¾ã™"
 
 msgid "???EMPTY BLOCK"
-msgstr "???¥Ö¥í¥Ã¥¯¤¬¶õ¤Ç¤¹"
+msgstr "???ブロックãŒç©ºã§ã™"
 
 msgid "???LINES MISSING"
-msgstr "???¹Ô¤¬¼º¤ï¤ì¤Æ¤¤¤Þ¤¹"
+msgstr "???è¡ŒãŒå¤±ã‚ã‚Œã¦ã„ã¾ã™"
 
 #, c-format
 msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: Â¥Ã–¥í¥Ã¥¯ 1 Â¤ÃŽID¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹(%s Â¤Â¬.swp¥Õ¥¡¥¤¥ë¤Ç¤Ê¤¤?)"
+msgstr "E310: ãƒ–ロック 1 ã®IDãŒé–“é•ã£ã¦ã„ã¾ã™(%s ãŒ.swpファイルã§ãªã„?)"
 
 msgid "???BLOCK MISSING"
-msgstr "???¥Ö¥í¥Ã¥¯¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "???ブロックãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "??? from here until ???END lines may be messed up"
-msgstr "??? Â¤Â³Â¤Â³Â¤Â«Â¤Ã©???END¤Þ¤Ç¤Î¹Ô¤¬Ç˲õ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ç¤¹"
+msgstr "??? ã“ã“ã‹ã‚‰ ???END ã¾ã§ã®è¡ŒãŒç ´å£Šã•ã‚Œã¦ã„るよã†ã§ã™"
 
 msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? Â¤Â³Â¤Â³Â¤Â«Â¤Ã©??END¤Þ¤Ç¤Î¹Ô¤¬ÃÞÆþ¤«ºï½ü¤µ¤ì¤¿¤è¤¦¤Ç¤¹"
+msgstr "??? ã“ã“ã‹ã‚‰ ???END ã¾ã§ã®è¡ŒãŒæŒ¿å…¥ã‹å‰Šé™¤ã•ã‚ŒãŸã‚ˆã†ã§ã™"
 
 msgid "???END"
 msgstr "???END"
 
 msgid "E311: Recovery Interrupted"
-msgstr "E311: Â¥ÃªÂ¥Â«Â¥Ã¥ê¤¬³ä¹þ¤Þ¤ì¤Þ¤·¤¿"
+msgstr "E311: ãƒªã‚«ãƒãƒªãŒå‰²è¾¼ã¾ã‚Œã¾ã—ãŸ"
 
 msgid ""
 "E312: Errors detected while recovering; look for lines starting with ???"
 msgstr ""
-"E312: Â¥ÃªÂ¥Â«Â¥Ã¥ê¤ÎºÇÃæ¤Ë¥¨¥é¡¼¤¬¸¡½Ã¤µ¤ì¤Þ¤·¤¿; ???¤Ç»Ã¤Þ¤ë¹Ô¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤"
+"E312: ãƒªã‚«ãƒãƒªã®æœ€ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒæ¤œå‡ºã•ã‚Œã¾ã—ãŸ; ???ã§å§‹ã¾ã‚‹è¡Œã‚’å‚ç…§ã—ã¦ãã ã•ã„"
 
 msgid "See \":help E312\" for more information."
-msgstr "¾ÜºÙ¤à\":help E312\" Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+msgstr "詳細㯠\":help E312\" ã‚’å‚ç…§ã—ã¦ãã ã•ã„"
 
 msgid "Recovery completed. You should check if everything is OK."
-msgstr "¥ê¥«¥Ã¥ê¤¬½ªÎ»¤·¤Þ¤·¤¿. Ã´¤Æ¤¬Àµ¤·¤¤¤«¥Ã¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤."
+msgstr "リカãƒãƒªãŒçµ‚了ã—ã¾ã—ãŸ. å…¨ã¦ãŒæ­£ã—ã„ã‹ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„."
 
 msgid ""
 "\n"
 "(You might want to write out this file under another name\n"
 msgstr ""
 "\n"
-"(Êѹ¹¤ò¥Ã¥§¥Ã¥¯¤¹¤ë¤¿¤á¤Ë, Â¤Â³Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃŠÃŒÂ¤ÃŽÃŒÂ¾Ã°¤ÇÊø¤·¤¿¾å¤Ç\n"
+"(変更をãƒã‚§ãƒƒã‚¯ã™ã‚‹ãŸã‚ã«, ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’別ã®åå‰ã§ä¿å­˜ã—ãŸä¸Šã§\n"
+
+msgid "and run diff with the original file to check for changes)"
+msgstr "原本ファイルã¨ã® diff ã‚’実行ã™ã‚‹ã¨è‰¯ã„ã§ã—ょã†)"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "¸¶ËÜ¥Õ¥¡¥¤¥ë¤È¤Î diff Â¤Ã²Â¼Ã‚¹Ô¤¹¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦)\n"
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "復元完了. ãƒãƒƒãƒ•ã‚¡ã®å†…容ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã¨åŒã˜ã«ãªã‚Šã¾ã—ãŸ."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"¤½¤ì¤«¤é.swp¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤\n"
+"\n"
+"ãã‚Œã‹ã‚‰.swpファイルを削除ã—ã¦ãã ã•ã„\n"
 "\n"
 
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "スワップファイルã‹ã‚‰å–å¾—ã—ãŸæš—å·ã‚­ãƒ¼ã‚’テキストファイルã«ä½¿ã„ã¾ã™.\n"
+
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤¬Ê£¿ô¸«¤Ä¤«¤ê¤Þ¤·¤¿:"
+msgstr "スワップファイルãŒè¤‡æ•°è¦‹ã¤ã‹ã‚Šã¾ã—ãŸ:"
 
 msgid "   In current directory:\n"
-msgstr "   Â¸Â½ÂºÃŸÂ¤ÃŽÂ¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥Ãª:\n"
+msgstr "   ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª:\n"
 
 msgid "   Using specified name:\n"
-msgstr "   Â¤Â¢Â¤Ã«ÃŒÂ¾Ã°¤ò»ÈÃÑÃæ:\n"
+msgstr "   ã‚ã‚‹åå‰ã‚’使用中:\n"
 
 msgid "   In directory "
-msgstr "   Â¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥Ãª "
+msgstr "   ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª "
 
 msgid "      -- none --\n"
-msgstr "      -- Â¤ÃŠÂ¤Â· --\n"
+msgstr "      -- ãªã— --\n"
 
 msgid "          owned by: "
-msgstr "            Â½ÃªÃ­¼Ô: "
+msgstr "            æ‰€æœ‰è€…: "
 
 msgid "   dated: "
-msgstr "   Ã†Ã¼Ã‰Ã•: "
+msgstr "   æ—¥ä»˜: "
 
 msgid "             dated: "
-msgstr "             Ã†Ã¼Ã‰Ã•: "
+msgstr "             æ—¥ä»˜: "
 
 msgid "         [from Vim version 3.0]"
 msgstr "         [from Vim version 3.0]"
 
 msgid "         [does not look like a Vim swap file]"
-msgstr "         [Vim¤Î¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤Ç¤Ã¤Ê¤¤¤è¤¦¤Ç¤¹]"
+msgstr "         [Vimã®ã‚¹ãƒ¯ãƒƒãƒ—ファイルã§ã¯ãªã„よã†ã§ã™]"
 
 msgid "         file name: "
-msgstr "        Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾: "
+msgstr "        ãƒ•ã‚¡ã‚¤ãƒ«å: "
 
 msgid ""
 "\n"
 "          modified: "
 msgstr ""
 "\n"
-"          ÃŠÃ‘¹¹¾õÂÖ: "
+"          å¤‰æ›´çŠ¶æ…‹: "
 
 msgid "YES"
-msgstr "¤¢¤ê"
+msgstr "ã‚ã‚Š"
 
 msgid "no"
-msgstr "¤Ê¤·"
+msgstr "ãªã—"
 
 msgid ""
 "\n"
 "         user name: "
 msgstr ""
 "\n"
-"          Â¥Ã¦Â¡Â¼Â¥Â¶ÃŒÂ¾: "
+"          ãƒ¦ãƒ¼ã‚¶å: "
 
 msgid "   host name: "
-msgstr "   Â¥Ã›Â¥Â¹Â¥ÃˆÃŒÂ¾: "
+msgstr "   ãƒ›ã‚¹ãƒˆå: "
 
 msgid ""
 "\n"
 "         host name: "
 msgstr ""
 "\n"
-"          Â¥Ã›Â¥Â¹Â¥ÃˆÃŒÂ¾: "
+"          ãƒ›ã‚¹ãƒˆå: "
 
 msgid ""
 "\n"
 "        process ID: "
 msgstr ""
 "\n"
-"        Â¥Ã—¥í¥»¥¹ID: "
+"        Ã£\83\97ã\83­ã\82ȋ\82¹ID: "
 
 msgid " (still running)"
-msgstr " (¤Þ¤À¼Â¹ÔÃæ)"
+msgstr " (ã¾ã å®Ÿè¡Œä¸­)"
 
 msgid ""
 "\n"
 "         [not usable with this version of Vim]"
 msgstr ""
 "\n"
-"         [¤³¤ÎVim¥á¼¥¸¥ç¥ó¤Ç¤Ã»ÈÃѤǤ­¤Þ¤»¤ó]"
+"         [ã“ã®Vimãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“]"
 
 msgid ""
 "\n"
 "         [not usable on this computer]"
 msgstr ""
 "\n"
-"         [¤³¤Î¥³¥ó¥Ô¥å¡¼¥¿¤Ç¤Ã»ÈÃѤǤ­¤Þ¤»¤ó]"
+"         [ã“ã®ã‚³ãƒ³ãƒ”ュータã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“]"
 
 msgid "         [cannot be read]"
-msgstr "         [Æɹþ¤á¤Þ¤»¤ó]"
+msgstr "         [読込ã‚ã¾ã›ã‚“]"
 
 msgid "         [cannot be opened]"
-msgstr "         [³«¤±¤Þ¤»¤ó]"
+msgstr "         [é–‹ã‘ã¾ã›ã‚“]"
 
 msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬Ìµ¤¤¤Î¤Ç°Ã»ý¤Ç¤­¤Þ¤»¤ó"
+msgstr "E313: ã‚¹ãƒ¯ãƒƒãƒ—ファイルãŒç„¡ã„ã®ã§ç¶­æŒã§ãã¾ã›ã‚“"
 
 msgid "File preserved"
-msgstr "¥Õ¥¡¥¤¥ë¤¬°Ã»ý¤µ¤ì¤Þ¤¹"
+msgstr "ファイルãŒç¶­æŒã•ã‚Œã¾ã™"
 
 msgid "E314: Preserve failed"
-msgstr "E314: Â°Ã»ý¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E314: ç¶­æŒã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "E315: ml_get: invalid lnum: %ld"
-msgstr "E315: ml_get: ÃŒÂµÂ¸ÃºÂ¤ÃŠlnum¤Ç¤¹: %ld"
+msgstr "E315: ml_get: ç„¡åŠ¹ãªlnumã§ã™: %ld"
 
 #, c-format
 msgid "E316: ml_get: cannot find line %ld"
-msgstr "E316: ml_get: Â¹Ã” %ld Â¤Ã²Â¤ÃŸÂ¤Ã„¤±¤é¤ì¤Þ¤»¤ó"
+msgstr "E316: ml_get: è¡Œ %ld ã‚’見ã¤ã‘られã¾ã›ã‚“"
 
 msgid "E317: pointer block id wrong 3"
-msgstr "E317: Â¥Ã¥¤¥ó¥¿¥Ö¥í¥Ã¥¯¤ÎID¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹ 3"
+msgstr "E317: ãƒã‚¤ãƒ³ã‚¿ãƒ–ロックã®IDãŒé–“é•ã£ã¦ã„ã¾ã™ 3"
 
 msgid "stack_idx should be 0"
-msgstr "stack_idx Â¤Ã 0 Â¤Ã‡Â¤Â¢Â¤Ã«Â¤Ã™Â¤Â­Â¤Ã‡Â¤Â¹"
+msgstr "stack_idx ã¯ 0 ã§ã‚ã‚‹ã¹ãã§ã™"
 
 msgid "E318: Updated too many blocks?"
-msgstr "E318: Â¹Â¹Â¿Â·Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã–¥í¥Ã¥¯¤¬Â¿²á¤®¤ë¤«¤â?"
+msgstr "E318: æ›´æ–°ã•ã‚ŒãŸãƒ–ロックãŒå¤šéŽãŽã‚‹ã‹ã‚‚?"
 
 msgid "E317: pointer block id wrong 4"
-msgstr "E317: Â¥Ã¥¤¥ó¥¿¥Ö¥í¥Ã¥¯¤ÎID¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹ 4"
+msgstr "E317: ãƒã‚¤ãƒ³ã‚¿ãƒ–ロックã®IDãŒé–“é•ã£ã¦ã„ã¾ã™ 4"
 
 msgid "deleted block 1?"
-msgstr "¥Ö¥í¥Ã¥¯ 1 Â¤Ã¾Ã¤µ¤ì¤¿?"
+msgstr "ブロック 1 ã¯æ¶ˆã•ã‚ŒãŸ?"
 
 #, c-format
 msgid "E320: Cannot find line %ld"
-msgstr "E320: Â¹Ã” %ld Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "E320: è¡Œ %ld ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "E317: pointer block id wrong"
-msgstr "E317: Â¥Ã¥¤¥ó¥¿¥Ö¥í¥Ã¥¯¤ÎID¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "E317: ãƒã‚¤ãƒ³ã‚¿ãƒ–ロックã®IDãŒé–“é•ã£ã¦ã„ã¾ã™"
 
 msgid "pe_line_count is zero"
-msgstr "pe_line_count Â¤Â¬Â¥Â¼Â¥Ã­Â¤Ã‡Â¤Â¹"
+msgstr "pe_line_count ãŒã‚¼ãƒ­ã§ã™"
 
 #, c-format
 msgid "E322: line number out of range: %ld past the end"
-msgstr "E322: Â¹Ã”Èֹ椬Èðó°¤Ç¤¹: %ld Ã„¶¤¨¤Æ¤¤¤Þ¤¹"
+msgstr "E322: è¡Œç•ªå·ãŒç¯„囲外ã§ã™: %ld è¶…ãˆã¦ã„ã¾ã™"
 
 #, c-format
 msgid "E323: line count wrong in block %ld"
-msgstr "E323: Â¥Ã–¥í¥Ã¥¯ %ld Â¤ÃŽÂ¹Ã”¥«¥¦¥ó¥È¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "E323: ãƒ–ロック %ld ã®è¡Œã‚«ã‚¦ãƒ³ãƒˆãŒé–“é•ã£ã¦ã„ã¾ã™"
 
 msgid "Stack size increases"
-msgstr "¥¹¥¿¥Ã¥¯¥µ¥¤¥º¤¬Ãý¤¨¤Þ¤¹"
+msgstr "スタックサイズãŒå¢—ãˆã¾ã™"
 
 msgid "E317: pointer block id wrong 2"
-msgstr "E317: Â¥Ã¥¤¥ó¥¿¥Ö¥í¥Ã¥¯¤ÎID¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹ 2"
+msgstr "E317: ãƒã‚¤ãƒ³ã‚¿ãƒ–ロックã®IDãŒé–“é•ã£ã¦ã„ã¾ã™ 2"
 
 #, c-format
 msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: \"%s\" Â¤ÃŽÂ¥Â·Â¥Ã³Â¥ÃœÂ¥ÃªÂ¥ÃƒÂ¥Â¯Â¥ÃªÂ¥Ã³Â¥Â¯Â¤Â¬Â¥Ã«Â¡Â¼Â¥Ã—¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "E773: \"%s\" ã®ã‚·ãƒ³ãƒœãƒªãƒƒã‚¯ãƒªãƒ³ã‚¯ãŒãƒ«ãƒ¼ãƒ—ã«ãªã£ã¦ã„ã¾ã™"
 
 msgid "E325: ATTENTION"
-msgstr "E325: ÃƒÃ­Â°Ã•"
+msgstr "E325: æ³¨æ„"
 
 msgid ""
 "\n"
 "Found a swap file by the name \""
 msgstr ""
 "\n"
-"¼¡¤Î̾ð¤Ç¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤ò¸«¤Ä¤±¤Þ¤·¤¿ \""
+"次ã®åå‰ã§ã‚¹ãƒ¯ãƒƒãƒ—ファイルを見ã¤ã‘ã¾ã—㟠\""
 
 msgid "While opening file \""
-msgstr "¼¡¤Î¥Õ¥¡¥¤¥ë¤ò³«¤¤¤Æ¤¤¤ëºÇÃæ \""
+msgstr "次ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ã„ã¦ã„る最中 \""
 
 msgid "      NEWER than swap file!\n"
-msgstr "      Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤è¤ê¤â¿·¤·¤¤¤Ç¤¹!\n"
+msgstr "      ã‚¹ãƒ¯ãƒƒãƒ—ファイルよりも新ã—ã„ã§ã™!\n"
 
 #. Some of these messages are long to allow translation to
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) ÃŠÃŒÂ¤ÃŽÂ¥Ã—¥í¥°¥é¥à¤¬Æ±¤¸¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤·¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó.\n"
-"    Â¤Â³Â¤ÃŽÂ¾Ã¬Â¹Ã§Â¤Ã‹Â¤Ã, ÃŠÃ‘¹¹¤ò¤·¤¿ºÃ¤ËºÇ½ªÅª¤Ë, Ã†Â±Â¤Â¸Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ°Ã›Â¤ÃŠÂ¤Ã«\n"
-"    2¤Ä¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬¤Ç¤­¤Æ¤·¤Þ¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤.\n"
+"(1) åˆ¥ã®ãƒ—ログラムãŒåŒã˜ãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã—ã¦ã„ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“.\n"
+"    ã“ã®å ´åˆã«ã¯, å¤‰æ›´ã‚’ã—ãŸéš›ã«æœ€çµ‚çš„ã«, åŒã˜ãƒ•ã‚¡ã‚¤ãƒ«ã®ç•°ãªã‚‹\n"
+"    2ã¤ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã§ãã¦ã—ã¾ã†ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Â½ÂªÃŽÂ»Â¤Â¹Â¤Ã«Â¤Â«, ÃƒÃ­Â°Ã•Â¤Â·Â¤ÃŠÂ¤Â¬Â¤Ã©Ã‚³¤±¤Þ¤¹.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  çµ‚了ã™ã‚‹ã‹, æ³¨æ„ã—ãªãŒã‚‰ç¶šã‘ã¦ãã ã•ã„.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Â¤Â³Â¤ÃŽÂ¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃŠÃ”½¸¥»¥Ã¥·¥ç¥ó¤¬¥¯¥é¥Ã¥·¥å¤·¤¿.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ç·¨é›†ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ãŸ.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
-msgstr "    Â¤Â³Â¤ÃŽÂ¾Ã¬Â¹Ã§Â¤Ã‹Â¤Ã \":recover\" Â¤Â« \"vim -r "
+msgstr "    ã“ã®å ´åˆã«ã¯ \":recover\" ã‹ \"vim -r "
 
 msgid ""
 "\"\n"
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
 "\"\n"
-"    Â¤Ã²Â»ÃˆÃѤ·¤ÆÊѹ¹¤ò¥ê¥«¥Ã¡¼¤·¤Þ¤¹(\":help recover\" Â¤Ã²Â»Â²Â¾Ãˆ).\n"
+"    ã‚’使用ã—ã¦å¤‰æ›´ã‚’リカãƒãƒ¼ã—ã¾ã™(\":help recovery\" ã‚’å‚ç…§).\n"
 
 msgid "    If you did this already, delete the swap file \""
-msgstr "    Â´Ã»Â¤Ã‹Â¤Â³Â¤Ã¬Â¤Ã²Â¹Ã”¤Ê¤Ã¤¿¤Î¤Ê¤é¤Ã, Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë \""
+msgstr "    æ—¢ã«ã“れを行ãªã£ãŸã®ãªã‚‰ã°, ã‚¹ãƒ¯ãƒƒãƒ—ファイル \""
 
 msgid ""
 "\"\n"
 "    to avoid this message.\n"
 msgstr ""
 "\"\n"
-"    Â¤Ã²Â¾ÃƒÂ¤Â»Â¤Ã¤³¤Î¥á¥Ã¥»¡¼¥¸¤ò²óÈò¤Ç¤­¤Þ¤¹.\n"
+"    ã‚’消ã›ã°ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’回é¿ã§ãã¾ã™.\n"
 
 msgid "Swap file \""
-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë \""
+msgstr "スワップファイル \""
 
 msgid "\" already exists!"
-msgstr "\" Â¤Â¬Â´Ã»Â¤Ã‹Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹!"
+msgstr "\" ãŒæ—¢ã«ã‚ã‚Šã¾ã™!"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM - ÃƒÃ­Â°Ã•"
+msgstr "VIM - æ³¨æ„"
 
 msgid "Swap file already exists!"
-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥¤¥ë¤¬´û¤Ë¸ºß¤·¤Þ¤¹!"
+msgstr "スワップファイルãŒæ—¢ã«å­˜åœ¨ã—ã¾ã™!"
 
 msgid ""
 "&Open Read-Only\n"
@@ -3643,11 +3785,11 @@ msgid ""
 "&Quit\n"
 "&Abort"
 msgstr ""
-"ÆɹþÀìÃѤdz«¤¯(&O)\n"
-"¤È¤Ë¤«¤¯ÊÔ½¸¤¹¤ë(&E)\n"
-"Éü³è¤µ¤»¤ë(&R)ecover\n"
-"½ªÎ»¤¹¤ë(&Q)\n"
-"Ãæ»ß¤¹¤ë(&A)"
+"読込専用ã§é–‹ã(&O)\n"
+"ã¨ã«ã‹ã編集ã™ã‚‹(&E)\n"
+"復活ã•ã›ã‚‹(&R)\n"
+"終了ã™ã‚‹(&Q)\n"
+"中止ã™ã‚‹(&A)"
 
 msgid ""
 "&Open Read-Only\n"
@@ -3657,38 +3799,38 @@ msgid ""
 "&Quit\n"
 "&Abort"
 msgstr ""
-"ÆɹþÀìÃѤdz«¤¯(&O)\n"
-"¤È¤Ë¤«¤¯ÊÔ½¸¤¹¤ë(&E)\n"
-"Éü³è¤µ¤»¤ë(&R)ecover\n"
-"ºï½ü¤¹¤ë(&D)\n"
-"½ªÎ»¤¹¤ë(&Q)\n"
-"Ãæ»ß¤¹¤ë(&A)"
+"読込専用ã§é–‹ã(&O)\n"
+"ã¨ã«ã‹ã編集ã™ã‚‹(&E)\n"
+"復活ã•ã›ã‚‹(&R)\n"
+"削除ã™ã‚‹(&D)\n"
+"終了ã™ã‚‹(&Q)\n"
+"中止ã™ã‚‹(&A)"
 
 msgid "E326: Too many swap files found"
-msgstr "E326: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤¬Â¿¿ô¸«¤Ä¤«¤ê¤Þ¤·¤¿"
+msgstr "E326: ã‚¹ãƒ¯ãƒƒãƒ—ファイルãŒå¤šæ•°è¦‹ã¤ã‹ã‚Šã¾ã—ãŸ"
 
 msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¥Â¢Â¥Â¤Â¥Ã†Â¥Ã Â¤ÃŽÂ¥Ã‘¥¹¤ÎÉôʬ¤¬¥µ¥Ö¥á¥Ë¥å¡¼¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E327: ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚¢ã‚¤ãƒ†ãƒ ã®ãƒ‘スã®éƒ¨åˆ†ãŒã‚µãƒ–メニューã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E328: Menu only exists in another mode"
-msgstr "E328: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¤Ã¾¤Î¥â¡¼¥É¤Ë¤À¤±¤¢¤ê¤Þ¤¹"
+msgstr "E328: ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¯ä»–ã®ãƒ¢ãƒ¼ãƒ‰ã«ã ã‘ã‚ã‚Šã¾ã™"
 
 #, c-format
 msgid "E329: No menu \"%s\""
-msgstr "E329: \"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E329: \"%s\" ã¨ã„ã†ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #. Only a mnemonic or accelerator is not valid.
 msgid "E792: Empty menu name"
-msgstr "E792: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼ÃŒÂ¾Â¤Â¬Â¶ÃµÂ¤Ã‡Â¤Â¹"
+msgstr "E792: ãƒ¡ãƒ‹ãƒ¥ãƒ¼åãŒç©ºã§ã™"
 
 msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¥Ã‘¥¹¤Ã¥µ¥Ö¥á¥Ë¥å¡¼¤òÀ¸¤¸¤ë¤Ù¤­¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E330: ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ‘スã¯ã‚µãƒ–メニューを生ã˜ã‚‹ã¹ãã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¥Ã¡¼¤Ë¤ÃľÀÜ¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤òÄɲäǤ­¤Þ¤»¤ó"
+msgstr "E331: ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒãƒ¼ã«ã¯ç›´æŽ¥ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚¢ã‚¤ãƒ†ãƒ ã‚’追加ã§ãã¾ã›ã‚“"
 
 msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: Â¶Ã¨Ã€ÃšÂ¤ÃªÂ¤Ã¥á¥Ë¥å¡¼¥Ñ¥¹¤Î°ìÉô¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E332: åŒºåˆ‡ã‚Šã¯ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ‘スã®ä¸€éƒ¨ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #. Now we have found the matching menu, and we list the mappings
 #. Highlight title
@@ -3697,68 +3839,68 @@ msgid ""
 "--- Menus ---"
 msgstr ""
 "\n"
-"--- Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼ ---"
+"--- Ã£\83¡ã\83\8bã\83¥ã\83¼ ---"
 
 msgid "Tear off this menu"
-msgstr "¤³¤Î¥á¥Ë¥å¡¼¤òÀÚ¤ê¼è¤ë"
+msgstr "ã“ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’切りå–ã‚‹"
 
 msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¥Ã‘¥¹¤Ã¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤òÀ¸¤¸¤Ê¤±¤ì¤Ã¤¤¤±¤Þ¤»¤ó"
+msgstr "E333: ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ‘スã¯ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚¢ã‚¤ãƒ†ãƒ ã‚’生ã˜ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
 
 #, c-format
 msgid "E334: Menu not found: %s"
-msgstr "E334: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó: %s"
+msgstr "E334: ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E335: Menu not defined for %s mode"
-msgstr "E335: %s Â¤Ã‹Â¤Ã¥á¥Ë¥å¡¼¤¬ÄêµÃ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E335: %s ã«ã¯ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¥Ã‘¥¹¤Ã¥µ¥Ö¥á¥Ë¥å¡¼¤òÀ¸¤¸¤Ê¤±¤ì¤Ã¤¤¤±¤Þ¤»¤ó"
+msgstr "E336: ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãƒ‘スã¯ã‚µãƒ–メニューを生ã˜ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“"
 
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó - Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼ÃŒÂ¾Â¤Ã²Â³ÃŽÃ‡Â§Â¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+msgstr "E337: ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ - ãƒ¡ãƒ‹ãƒ¥ãƒ¼åを確èªã—ã¦ãã ã•ã„"
 
 #, c-format
 msgid "Error detected while processing %s:"
-msgstr "%s Â¤ÃŽÂ½Ã¨ÃýÃæ¤Ë¥¨¥é¡¼¤¬¸¡½Ã¤µ¤ì¤Þ¤·¤¿:"
+msgstr "%s ã®å‡¦ç†ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒæ¤œå‡ºã•ã‚Œã¾ã—ãŸ:"
 
 #, c-format
 msgid "line %4ld:"
-msgstr "¹Ô %4ld:"
+msgstr "è¡Œ %4ld:"
 
 #, c-format
 msgid "E354: Invalid register name: '%s'"
-msgstr "E354: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿ÃŒÂ¾: '%s'"
+msgstr "E354: ç„¡åŠ¹ãªãƒ¬ã‚¸ã‚¹ã‚¿å: '%s'"
 
 msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "ÆüËܸì¥á¥Ã¥»¡¼¥¸ËÃÌõ/´Æ½¤: Ã‚¼²¬ Ã‚Àú <koron.kaoriya@gmail.com>"
+msgstr "日本語メッセージ翻訳/監修: æ‘岡 å¤ªéƒŽ <koron.kaoriya@gmail.com>"
 
 msgid "Interrupt: "
-msgstr "³ä¹þ¤ß: "
+msgstr "割込ã¿: "
 
 msgid "Press ENTER or type command to continue"
-msgstr "³¤±¤ë¤Ë¤ÃENTER¤ò²¡¤¹¤«¥³¥Þ¥ó¥É¤òÆþÎ䷤Ƥ¯¤À¤µ¤¤"
+msgstr "続ã‘ã‚‹ã«ã¯ENTERを押ã™ã‹ã‚³ãƒžãƒ³ãƒ‰ã‚’入力ã—ã¦ãã ã•ã„"
 
 #, c-format
 msgid "%s line %ld"
-msgstr "%s Â¹Ã” %ld"
+msgstr "%s è¡Œ %ld"
 
 msgid "-- More --"
-msgstr "-- Â·Ã‘³ --"
+msgstr "-- ç¶™ç¶š --"
 
 msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " SPACE/d/j: Â²Ã¨ÃŒÃŒ/¥Ú¡¼¥¸/¹Ô Â²Â¼, b/uk: Â¾Ã¥, q: Â½ÂªÃŽÂ» "
+msgstr " SPACE/d/j: ç”»é¢/ページ/è¡Œ ä¸‹, b/u/k: ä¸Š, q: çµ‚了 "
 
 msgid "Question"
-msgstr "¼ÃÌä"
+msgstr "質å•"
 
 msgid ""
 "&Yes\n"
 "&No"
 msgstr ""
-"¤Ã¤¤(&Y)\n"
-"¤¤¤¤¤¨(&N)"
+"ã¯ã„(&Y)\n"
+"ã„ã„ãˆ(&N)"
 
 msgid ""
 "&Yes\n"
@@ -3767,70 +3909,73 @@ msgid ""
 "&Discard All\n"
 "&Cancel"
 msgstr ""
-"¤Ã¤¤(&Y)\n"
-"¤¤¤¤¤¨(&N)\n"
-"ô¤ÆÊø(&A)\n"
-"ô¤ÆÊü´þ(&D)\n"
-"¥­¥ã¥ó¥»¥ë(&C)"
+"ã¯ã„(&Y)\n"
+"ã„ã„ãˆ(&N)\n"
+"å…¨ã¦ä¿å­˜(&A)\n"
+"å…¨ã¦æ”¾æ£„(&D)\n"
+"キャンセル(&C)"
 
 msgid "Select Directory dialog"
-msgstr "¥Ç¥£¥ì¥¯¥È¥êêÂò¥À¥¤¥¢¥í¥°"
+msgstr "ã\83\87ã\82£ã\83‹\82¯ã\83\88ã\83ªé\81¸æ\8a\9eã\83\80ã\82¤ã\82¢ã\83­ã\82°"
 
 msgid "Save File dialog"
-msgstr "¥Õ¥¡¥¤¥ëÊø¥À¥¤¥¢¥í¥°"
+msgstr "ã\83\95ã\82¡ã\82¤ã\83«ä¿\9då­\98ã\83\80ã\82¤ã\82¢ã\83­ã\82°"
 
 msgid "Open File dialog"
-msgstr "¥Õ¥¡¥¤¥ëÆɹþ¥À¥¤¥¢¥í¥°"
+msgstr "ã\83\95ã\82¡ã\82¤ã\83«èª­è¾¼ã\83\80ã\82¤ã\82¢ã\83­ã\82°"
 
 #. TODO: non-GUI file selector here
 msgid "E338: Sorry, no file browser in console mode"
-msgstr "E338: Â¥Â³Â¥Ã³Â¥Â½Â¡Â¼Â¥Ã«Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Ã¥Õ¥¡¥¤¥ë¥Ö¥é¥¦¥¶¤ò»È¤¨¤Þ¤»¤ó, Â¤Â´Â¤Ã¡Â¤Ã³Â¤ÃŠÂ¤ÂµÂ¤Â¤"
+msgstr "E338: ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ¢ãƒ¼ãƒ‰ã§ã¯ãƒ•ã‚¡ã‚¤ãƒ«ãƒ–ラウザを使ãˆã¾ã›ã‚“, ã”ã‚ã‚“ãªã•ã„"
 
 msgid "E766: Insufficient arguments for printf()"
-msgstr "E766: printf() Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Ã‰Ã”½½Ê¬¤Ç¤¹"
+msgstr "E766: printf() ã®å¼•æ•°ãŒä¸å分ã§ã™"
+
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: printf() ã®å¼•æ•°ã«ã¯æµ®å‹•å°‘数点数ãŒæœŸå¾…ã•ã‚Œã¦ã„ã¾ã™"
 
 msgid "E767: Too many arguments to printf()"
-msgstr "E767: pirntf() Â¤ÃŽÂ°ÃºÂ¿Ã´Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+msgstr "E767: printf() ã®å¼•æ•°ãŒå¤šéŽãŽã¾ã™"
 
 msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: Â·Ã™Â¹Ã°: Ã†Ã‰Â¹Ã¾Ã€Ã¬ÃÑ¥Õ¥¡¥¤¥ë¤òÊѹ¹¤·¤Þ¤¹"
+msgstr "W10: è­¦å‘Š: èª­è¾¼å°‚用ファイルを変更ã—ã¾ã™"
 
-msgid "Type number or click with mouse (<Enter> cancels): "
-msgstr "¿ôÃäòÆþÎ乤뤫¥Þ¥¦¥¹¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤ (<Enter> Â¤Ã‡Â¥Â­Â¥Ã£Â¥Ã³Â¥Â»Â¥Ã«): "
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr ""
+"番å·ã¨<Enter>を入力ã™ã‚‹ã‹ãƒžã‚¦ã‚¹ã§ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãã ã•ã„ (空ã§ã‚­ãƒ£ãƒ³ã‚»ãƒ«): "
 
-msgid "Choice number (<Enter> cancels): "
-msgstr "ÈÖ¹æ¤òêÂò¤·¤Æ¤¯¤À¤µ¤¤ (<Enter> Â¤Ã‡Â¥Â­Â¥Ã£Â¥Ã³Â¥Â»Â¥Ã«): "
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "番å·ã¨<Enter>を入力ã—ã¦ãã ã•ã„ (空ã§ã‚­ãƒ£ãƒ³ã‚»ãƒ«): "
 
 msgid "1 more line"
-msgstr "1 Â¹Ã” Ã„ɲä·¤Þ¤·¤¿"
+msgstr "1 è¡Œ è¿½åŠ ã—ã¾ã—ãŸ"
 
 msgid "1 line less"
-msgstr "1 Â¹Ã” ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "1 è¡Œ å‰Šé™¤ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld more lines"
-msgstr "%ld Â¹Ã” Ã„ɲä·¤Þ¤·¤¿"
+msgstr "%ld è¡Œ è¿½åŠ ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld fewer lines"
-msgstr "%ld Â¹Ã” ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "%ld è¡Œ å‰Šé™¤ã—ã¾ã—ãŸ"
 
 msgid " (Interrupted)"
-msgstr " (³ä¹þ¤Þ¤ì¤Þ¤·¤¿)"
+msgstr " (割込ã¾ã‚Œã¾ã—ãŸ)"
 
 msgid "Beep!"
-msgstr "¥Ó¡¼¥Ã!"
+msgstr "ビーッ!"
 
 msgid "Vim: preserving files...\n"
-msgstr "Vim: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã²ÃŠÃ¸Ãæ...\n"
+msgstr "Vim: ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ä¸­...\n"
 
 #. close all memfiles, without deleting
 msgid "Vim: Finished.\n"
-msgstr "Vim: Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿.\n"
+msgstr "Vim: çµ‚了ã—ã¾ã—ãŸ.\n"
 
-#, c-format
 msgid "ERROR: "
-msgstr "¥¨¥é¡¼: "
+msgstr "ã\82¨ã\83©ã\83¼: "
 
 #, c-format
 msgid ""
@@ -3838,193 +3983,202 @@ msgid ""
 "[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n"
 msgstr ""
 "\n"
-"[¥á¥â¥ê(¥å¤¥È)] Ãí³äÅö-²òÊüÎÌ %lu-%lu, Â»ÃˆÃÑÎÌ %lu, Â¥Ã”¡¼¥¯»þ %lu\n"
+"[メモリ(ãƒã‚¤ãƒˆ)] ç·å‰²å½“-解放釠%lu-%lu, ä½¿ç”¨é‡ %lu, ãƒ”ーク時 %lu\n"
 
 #, c-format
 msgid ""
 "[calls] total re/malloc()'s %lu, total free()'s %lu\n"
 "\n"
 msgstr ""
-"[¸Æ½Ã] Ãí re/malloc() Â²Ã³Â¿Ã´ %lu, Ãí free() Â²Ã³Â¿Ã´ %lu\n"
+"[呼出] ç· re/malloc() å›žæ•° %lu, ç· free() å›žæ•° %lu\n"
 "\n"
 
 msgid "E340: Line is becoming too long"
-msgstr "E340: Â¹Ã”¤¬Ä¹¤¯¤Ê¤ê²á¤®¤Þ¤·¤¿"
+msgstr "E340: è¡ŒãŒé•·ããªã‚ŠéŽãŽã¾ã—ãŸ"
 
 #, c-format
 msgid "E341: Internal error: lalloc(%ld, )"
-msgstr "E341: Ã†Ã¢Ã‰Ã´Â¥Â¨Â¥Ã©Â¡Â¼: lalloc(%ld,)"
+msgstr "E341: Ã¥\86\85é\83¨ã\82¨ã\83©ã\83¼: lalloc(%ld,)"
 
 #, c-format
 msgid "E342: Out of memory!  (allocating %lu bytes)"
-msgstr "E342: Â¥Ã¡Â¥Ã¢Â¥ÃªÂ¤Â¬Ã‚­¤ê¤Þ¤»¤ó!  (%lu Â¥Ã¥¤¥È¤ò³äÅöÃ×µá)"
+msgstr "E342: ãƒ¡ãƒ¢ãƒªãŒè¶³ã‚Šã¾ã›ã‚“!  (%lu ãƒã‚¤ãƒˆã‚’割当è¦æ±‚)"
 
 #, c-format
 msgid "Calling shell to execute: \"%s\""
-msgstr "¼Â¹Ô¤Î¤¿¤á¤Ë¥·¥§¥ë¤ò¸Æ½Ã¤·Ãæ: \"%s\""
+msgstr "実行ã®ãŸã‚ã«ã‚·ã‚§ãƒ«ã‚’呼出ã—中: \"%s\""
 
 msgid "E545: Missing colon"
-msgstr "E545: Â¥Â³Â¥Ã­Â¥Ã³Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E545: ã‚³ãƒ­ãƒ³ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E546: Illegal mode"
-msgstr "E546: Ã‰Ã”Àµ¤Ê¥â¡¼¥É¤Ç¤¹"
+msgstr "E546: ä¸æ­£ãªãƒ¢ãƒ¼ãƒ‰ã§ã™"
 
 msgid "E547: Illegal mouseshape"
-msgstr "E547: Ã‰Ã”Àµ¤Ê 'mouseshape' Â¤Ã‡Â¤Â¹"
+msgstr "E547: ä¸æ­£ãª 'mouseshape' ã§ã™"
 
 msgid "E548: digit expected"
-msgstr "E548: Â¿Ã´ÃƒÃ¤¬É¬ÃפǤ¹"
+msgstr "E548: æ•°å€¤ãŒå¿…è¦ã§ã™"
 
 msgid "E549: Illegal percentage"
-msgstr "E549: Ã‰Ã”Àµ¤Ê¥Ñ¡¼¥»¥ó¥Æ¡¼¥¸¤Ç¤¹"
+msgstr "E549: ä¸æ­£ãªãƒ‘ーセンテージã§ã™"
 
 msgid "Enter encryption key: "
-msgstr "°Å¹æ²½ÃѤΥ­¡¼¤òÆþÎ䷤Ƥ¯¤À¤µ¤¤: "
+msgstr "æš—å·åŒ–用ã®ã‚­ãƒ¼ã‚’入力ã—ã¦ãã ã•ã„: "
 
 msgid "Enter same key again: "
-msgstr "¤â¤¦°ìÅÙƱ¤¸¥­¡¼¤òÆþÎ䷤Ƥ¯¤À¤µ¤¤: "
+msgstr "ã‚‚ã†ä¸€åº¦åŒã˜ã‚­ãƒ¼ã‚’入力ã—ã¦ãã ã•ã„: "
 
 msgid "Keys don't match!"
-msgstr "¥­¡¼¤¬°ìÃפ·¤Þ¤»¤ó"
+msgstr "キーãŒä¸€è‡´ã—ã¾ã›ã‚“"
+
+msgid "E854: path too long for completion"
+msgstr "E854: ãƒ‘スãŒé•·éŽãŽã¦è£œå®Œã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
 "followed by '%s'."
 msgstr ""
-"E343: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã‘¥¹¤Ç¤¹: '**[¿ôÃÃ]' Â¤Ãpath¤ÎºÇ¸å¤« '%s' Â¤Â¬Ã‚³¤¤¤Æ¤Ê¤¤¤È¤¤¤±¤Þ¤»"
-"¤ó."
+"E343: ç„¡åŠ¹ãªãƒ‘スã§ã™: '**[数値]' ã¯pathã®æœ€å¾Œã‹ '%s' ãŒç¶šã„ã¦ãªã„ã¨ã„ã‘ã¾ã›"
+"ã‚“."
 
 #, c-format
 msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: cdpath¤Ë¤à\"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E344: cdpathã«ã¯ \"%s\" ã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: path¤Ë¤à\"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E345: pathã«ã¯ \"%s\" ã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: cdpath¤Ë¤Ã¤³¤ì°Ê¾å \"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E346: cdpathã«ã¯ã“れ以上 \"%s\" ã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: Â¥Ã‘¥¹¤Ë¤Ã¤³¤ì°Ê¾å \"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E347: ãƒ‘スã«ã¯ã“れ以上 \"%s\" ã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“"
 
-#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
-msgstr "Netbeans #2 Â¤Ã‹Ã€ÃœÃ‚³¤Ç¤­¤Þ¤»¤ó"
+msgstr "Netbeans #2 ã«æŽ¥ç¶šã§ãã¾ã›ã‚“"
 
 msgid "Cannot connect to Netbeans"
-msgstr "Netbeans Â¤Ã‹Ã€ÃœÃ‚³¤Ç¤­¤Þ¤»¤ó"
+msgstr "Netbeans ã«æŽ¥ç¶šã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
 msgstr ""
-"E668: NetBeans¤ÎÀܳ¾ðÊó¥Õ¥¡¥¤¥ë¤Î¥¢¥¯¥»¥¹¥â¡¼¥É¤ËÌäÂ꤬¤¢¤ê¤Þ¤¹: \"%s\""
+"E668: NetBeansã®æŽ¥ç¶šæƒ…報ファイルã®ã‚¢ã‚¯ã‚»ã‚¹ãƒ¢ãƒ¼ãƒ‰ã«å•é¡ŒãŒã‚ã‚Šã¾ã™: \"%s\""
 
 msgid "read from Netbeans socket"
-msgstr "Netbeans Â¤ÃŽÂ¥Â½Â¥Â±Â¥ÃƒÂ¥ÃˆÂ¤Ã²Ã†Ã‰Â¹Ã¾Â¤ÃŸ"
+msgstr "Netbeans ã®ã‚½ã‚±ãƒƒãƒˆã‚’読込ã¿"
 
 #, c-format
 msgid "E658: NetBeans connection lost for buffer %ld"
-msgstr "E658: Â¥Ã¥Ã¥Õ¥¡ %ld Â¤ÃŽ NetBeans Ã€ÃœÃ‚³¤¬¼º¤ï¤ì¤Þ¤·¤¿"
+msgstr "E658: ãƒãƒƒãƒ•ã‚¡ %ld ã® NetBeans æŽ¥ç¶šãŒå¤±ã‚ã‚Œã¾ã—ãŸ"
 
-msgid "E505: "
-msgstr "E505: "
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeansã¯ã“ã®GUIã«ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: NetBeansã¯æ—¢ã«æŽ¥ç¶šã—ã¦ã„ã¾ã™"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s ã¯èª­è¾¼å°‚用ã§ã™ (強制書込ã«ã¯ ! ã‚’追加)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: ã‚«ãƒ¼ã‚½ãƒ«ã®ä½ç½®ã«ã¯è­˜åˆ¥å­ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: 'operatorfunc' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬¶õ¤Ç¤¹"
+msgstr "E774: 'operatorfunc' ã‚ªãƒ—ションãŒç©ºã§ã™"
 
 msgid "E775: Eval feature not available"
-msgstr "E775: Â¼Â°Ã‰Â¾Â²Ãµ¡Ç½¤¬Ìµ¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "E775: å¼è©•ä¾¡æ©Ÿèƒ½ãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™"
 
 msgid "Warning: terminal cannot highlight"
-msgstr "·Ù¹ð: Â»ÃˆÃѤ·¤Æ¤¤¤ëüËö¤Ã¥å¤¥é¥¤¥È¤Ç¤­¤Þ¤»¤ó"
+msgstr "警告: ä½¿ç”¨ã—ã¦ã„る端末ã¯ãƒã‚¤ãƒ©ã‚¤ãƒˆã§ãã¾ã›ã‚“"
 
 msgid "E348: No string under cursor"
-msgstr "E348: Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤ÃŽÂ°ÃŒÃƒÃ–¤Ë¤Ãʸ»úÎ󤬤¢¤ê¤Þ¤»¤ó"
-
-msgid "E349: No identifier under cursor"
-msgstr "E349: Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤ÃŽÂ°ÃŒÃƒÃ–¤Ë¤Ã¼±Ê̻Ҥ¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E348: ã‚«ãƒ¼ã‚½ãƒ«ã®ä½ç½®ã«ã¯æ–‡å­—列ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: Â¸Â½ÂºÃŸÂ¤ÃŽ 'foldmethod' Â¤Ã‡Â¤ÃÀÞ¾ö¤ß¤ò¾Ãµî¤Ç¤­¤Þ¤»¤ó"
+msgstr "E352: ç¾åœ¨ã® 'foldmethod' ã§ã¯æŠ˜ç•³ã¿ã‚’消去ã§ãã¾ã›ã‚“"
 
 msgid "E664: changelist is empty"
-msgstr "E664: ÃŠÃ‘¹¹¥ê¥¹¥È¤¬¶õ¤Ç¤¹"
+msgstr "E664: å¤‰æ›´ãƒªã‚¹ãƒˆãŒç©ºã§ã™"
 
 msgid "E662: At start of changelist"
-msgstr "E662: ÃŠÃ‘¹¹¥ê¥¹¥È¤ÎÀèƬ"
+msgstr "E662: å¤‰æ›´ãƒªã‚¹ãƒˆã®å…ˆé ­"
 
 msgid "E663: At end of changelist"
-msgstr "E663: ÃŠÃ‘¹¹¥ê¥¹¥È¤ÎËöÈø"
+msgstr "E663: å¤‰æ›´ãƒªã‚¹ãƒˆã®æœ«å°¾"
 
 msgid "Type  :quit<Enter>  to exit Vim"
-msgstr "Vim¤ò½ªÎ»¤¹¤ë¤Ë¤à:quit<Enter> Â¤ÃˆÃ†Ã¾ÃŽÃ¤·¤Æ¤¯¤À¤µ¤¤"
+msgstr "Vimを終了ã™ã‚‹ã«ã¯ :quit<Enter> ã¨å…¥åŠ›ã—ã¦ãã ã•ã„"
 
 #, c-format
 msgid "1 line %sed 1 time"
-msgstr "1 Â¹Ã”¤¬ %s Â¤Ã‡ 1 Â²Ã³Â½Ã¨Ãý¤µ¤ì¤Þ¤·¤¿"
+msgstr "1 è¡ŒãŒ %s ã§ 1 å›žå‡¦ç†ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "1 line %sed %d times"
-msgstr "1 Â¹Ã”¤¬ %s Â¤Ã‡ %d Â²Ã³Â½Ã¨Ãý¤µ¤ì¤Þ¤·¤¿"
+msgstr "1 è¡ŒãŒ %s ã§ %d å›žå‡¦ç†ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld lines %sed 1 time"
-msgstr "%ld Â¹Ã”¤¬ %s Â¤Ã‡ 1 Â²Ã³Â½Ã¨Ãý¤µ¤ì¤Þ¤·¤¿"
+msgstr "%ld è¡ŒãŒ %s ã§ 1 å›žå‡¦ç†ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld lines %sed %d times"
-msgstr "%ld Â¹Ã”¤¬ %s Â¤Ã‡ %d Â²Ã³Â½Ã¨Ãý¤µ¤ì¤Þ¤·¤¿"
+msgstr "%ld è¡ŒãŒ %s ã§ %d å›žå‡¦ç†ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld lines to indent... "
-msgstr "%ld Â¹Ã”¤¬¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤Þ¤¹... "
+msgstr "%ld è¡ŒãŒã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆã•ã‚Œã¾ã™... "
 
 msgid "1 line indented "
-msgstr "1 Â¹Ã”¤ò¥¤¥ó¥Ç¥ó¥È¤·¤Þ¤·¤¿"
+msgstr "1 è¡Œã‚’インデントã—ã¾ã—㟠"
 
 #, c-format
 msgid "%ld lines indented "
-msgstr "%ld Â¹Ã”¤ò¥¤¥ó¥Ç¥ó¥È¤·¤Þ¤·¤¿"
+msgstr "%ld è¡Œã‚’インデントã—ã¾ã—㟠"
 
 msgid "E748: No previously used register"
-msgstr "E748: Â¤ÃžÂ¤Ã€Â¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿Â¤Ã²Â»ÃˆÃѤ·¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E748: ã¾ã ãƒ¬ã‚¸ã‚¹ã‚¿ã‚’使用ã—ã¦ã„ã¾ã›ã‚“"
 
 #. must display the prompt
 msgid "cannot yank; delete anyway"
-msgstr "¥ä¥ó¥¯¤Ç¤­¤Þ¤»¤ó; Â¤ÃˆÂ¤Ã‹Â¤Â«Â¤Â¯Â¾ÃƒÂµÃ®"
+msgstr "ヤンクã§ãã¾ã›ã‚“; ã¨ã«ã‹ã消去"
 
 msgid "1 line changed"
-msgstr "1 Â¹Ã”¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿"
+msgstr "1 è¡ŒãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld lines changed"
-msgstr "%ld Â¹Ã”¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿"
+msgstr "%ld è¡ŒãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "freeing %ld lines"
-msgstr "%ld Â¹Ã”¤ò³«ÊüÃæ"
+msgstr "%ld è¡Œã‚’解放中"
 
 msgid "block of 1 line yanked"
-msgstr "1 Â¹Ã”¤Î¥Ö¥í¥Ã¥¯¤¬¥ä¥ó¥¯¤µ¤ì¤Þ¤·¤¿"
+msgstr "1 è¡Œã®ãƒ–ロックãŒãƒ¤ãƒ³ã‚¯ã•ã‚Œã¾ã—ãŸ"
 
 msgid "1 line yanked"
-msgstr "1 Â¹Ã”¤¬¥ä¥ó¥¯¤µ¤ì¤Þ¤·¤¿"
+msgstr "1 è¡ŒãŒãƒ¤ãƒ³ã‚¯ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "block of %ld lines yanked"
-msgstr "%ld Â¹Ã”¤Î¥Ö¥í¥Ã¥¯¤¬¥ä¥ó¥¯¤µ¤ì¤Þ¤·¤¿"
+msgstr "%ld è¡Œã®ãƒ–ロックãŒãƒ¤ãƒ³ã‚¯ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld lines yanked"
-msgstr "%ld Â¹Ã”¤¬¥ä¥ó¥¯¤µ¤ì¤Þ¤·¤¿"
+msgstr "%ld è¡ŒãŒãƒ¤ãƒ³ã‚¯ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "E353: Nothing in register %s"
-msgstr "E353: Â¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿ %s Â¤Ã‹Â¤Ã²¿¤â¤¢¤ê¤Þ¤»¤ó"
+msgstr "E353: ãƒ¬ã‚¸ã‚¹ã‚¿ %s ã«ã¯ä½•ã‚‚ã‚ã‚Šã¾ã›ã‚“"
 
 #. Highlight title
 msgid ""
@@ -4032,724 +4186,810 @@ msgid ""
 "--- Registers ---"
 msgstr ""
 "\n"
-"--- Â¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿ ---"
+"--- Ã£\83‹\82¸ã\82¹ã\82¿ ---"
 
 msgid "Illegal register name"
-msgstr "ÉÔÀµ¤Ê¥ì¥¸¥¹¥¿Ì¾"
+msgstr "ä¸æ­£ãªãƒ¬ã‚¸ã‚¹ã‚¿å"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
 msgstr ""
 "\n"
-"# Â¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿:\n"
+"# Ã£\83‹\82¸ã\82¹ã\82¿:\n"
 
 #, c-format
 msgid "E574: Unknown register type %d"
-msgstr "E574: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥Ã¬Â¥Â¸Â¥Â¹Â¥Â¿Â·Â¿ %d Â¤Ã‡Â¤Â¹"
+msgstr "E574: æœªçŸ¥ã®ãƒ¬ã‚¸ã‚¹ã‚¿åž‹ %d ã§ã™"
 
 #, c-format
 msgid "%ld Cols; "
-msgstr "%ld ÃŽÃ³; "
+msgstr "%ld åˆ—; "
 
 #, c-format
 msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
-msgstr "êÂò %s%ld / %ld Â¹Ã”; %ld / %ld ÃƒÂ±Â¸Ã¬; %ld / %ld ÃŠÂ¸Â»Ãº"
+msgstr "é¸æŠž %s%ld / %ld è¡Œ; %ld / %ld å˜èªž; %ld / %ld ãƒã‚¤ãƒˆ"
 
 #, c-format
 msgid ""
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
-msgstr "êÂò %s%ld / %ld Â¹Ã”; %ld / %ld ÃƒÂ±Â¸Ã¬; %ld / %ld ÃŠÂ¸Â»Ãº; %ld / %ld Â¥Ã¥¤¥È"
+msgstr "é¸æŠž %s%ld / %ld è¡Œ; %ld / %ld å˜èªž; %ld / %ld æ–‡å­—; %ld / %ld ãƒã‚¤ãƒˆ"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
-msgstr "Îó %s / %s; Â¹Ã” %ld of %ld; ÃƒÂ±Â¸Ã¬ %ld / %ld; ÃŠÂ¸Â»Ãº %ld / %ld"
+msgstr "列 %s / %s; è¡Œ %ld of %ld; å˜èªž %ld / %ld; ãƒã‚¤ãƒˆ %ld / %ld"
 
 #, c-format
 msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Îó %s / %s; Â¹Ã” %ld / %ld; ÃƒÂ±Â¸Ã¬ %ld / %ld; ÃŠÂ¸Â»Ãº %ld / %ld; Â¥Ã¥¤¥È %ld of %ld"
+"列 %s / %s; è¡Œ %ld / %ld; å˜èªž %ld / %ld; æ–‡å­— %ld / %ld; ãƒã‚¤ãƒˆ %ld of %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
 msgstr "(+%ld for BOM)"
 
 msgid "%<%f%h%m%=Page %N"
-msgstr "%<%f%h%m%=%N Â¥ÃšÂ¡Â¼Â¥Â¸"
+msgstr "%<%f%h%m%=%N Ã£\83\9aã\83¼ã\82¸"
 
 msgid "Thanks for flying Vim"
-msgstr "Vim Â¤Ã²Â»ÃˆÂ¤ÃƒÂ¤Ã†Â¤Â¯Â¤Ã¬Â¤Ã†Â¤Â¢Â¤ÃªÂ¤Â¬Â¤ÃˆÂ¤Â¦"
+msgstr "Vim ã‚’使ã£ã¦ãã‚Œã¦ã‚ã‚ŠãŒã¨ã†"
 
 msgid "E518: Unknown option"
-msgstr "E518: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ç¤¹"
+msgstr "E518: æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™"
 
 msgid "E519: Option not supported"
-msgstr "E519: Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E519: ã‚ªãƒ—ションã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E520: Not allowed in a modeline"
-msgstr "E520: modeline Â¤Ã‡Â¤Ãµö²Ä¤µ¤ì¤Þ¤»¤ó"
+msgstr "E520: modeline ã§ã¯è¨±å¯ã•ã‚Œã¾ã›ã‚“"
+
+msgid "E846: Key code not set"
+msgstr "E846: ã‚­ãƒ¼ã‚³ãƒ¼ãƒ‰ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E521: Number required after ="
-msgstr "E521: = Â¤ÃŽÂ¸Ã¥Â¤Ã‹Â¤Ã¿ô»ú¤¬É¬ÃפǤ¹"
+msgstr "E521: = ã®å¾Œã«ã¯æ•°å­—ãŒå¿…è¦ã§ã™"
 
 msgid "E522: Not found in termcap"
-msgstr "E522: termcap Ã†Ã¢Â¤Ã‹Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "E522: termcap å†…ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E539: Illegal character <%s>"
-msgstr "E539: Ã‰Ã”Àµ¤Êʸ»ú¤Ç¤¹ <%s>"
+msgstr "E539: ä¸æ­£ãªæ–‡å­—ã§ã™ <%s>"
 
 msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: 'term' Â¤Ã‹Â¤Ã¶õʸ»úÎó¤òÀßÄê¤Ç¤­¤Þ¤»¤ó"
+msgstr "E529: 'term' ã«ã¯ç©ºæ–‡å­—列を設定ã§ãã¾ã›ã‚“"
 
 msgid "E530: Cannot change term in GUI"
-msgstr "E530: GUI¤Ç¤à'term' Â¤Ã²ÃŠÃ‘¹¹¤Ç¤­¤Þ¤»¤ó"
+msgstr "E530: GUIã§ã¯ 'term' ã‚’変更ã§ãã¾ã›ã‚“"
 
 msgid "E531: Use \":gui\" to start the GUI"
-msgstr "E531: GUI¤ò¥¹¥¿¡¼¥È¤¹¤ë¤Ë¤à\":gui\" Â¤Ã²Â»ÃˆÃѤ·¤Æ¤¯¤À¤µ¤¤"
+msgstr "E531: GUIをスタートã™ã‚‹ã«ã¯ \":gui\" ã‚’使用ã—ã¦ãã ã•ã„"
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: 'backupext' Â¤Ãˆ 'patchmode' Â¤Â¬Ã†Â±Â¤Â¸Â¤Ã‡Â¤Â¹"
+msgstr "E589: 'backupext' ã¨ 'patchmode' ãŒåŒã˜ã§ã™"
+
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: 'listchars'ã®å€¤ã«çŸ›ç›¾ãŒã‚ã‚Šã¾ã™"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: 'fillchars'ã®å€¤ã«çŸ›ç›¾ãŒã‚ã‚Šã¾ã™"
 
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-msgstr "E617: GTK+2 GUI¤Ç¤ÃÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+msgstr "E617: GTK+2 GUIã§ã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
 
 msgid "E524: Missing colon"
-msgstr "E524: Â¥Â³Â¥Ã­Â¥Ã³Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E524: ã‚³ãƒ­ãƒ³ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E525: Zero length string"
-msgstr "E525: ÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃŽÃ„¹¤µ¤¬¥¼¥í¤Ç¤¹"
+msgstr "E525: æ–‡å­—列ã®é•·ã•ãŒã‚¼ãƒ­ã§ã™"
 
 #, c-format
 msgid "E526: Missing number after <%s>"
-msgstr "E526: <%s> Â¤ÃŽÂ¸Ã¥Â¤Ã‹Â¿Ã´Â»ÃºÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E526: <%s> ã®å¾Œã«æ•°å­—ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E527: Missing comma"
-msgstr "E527: Â¥Â«Â¥Ã³Â¥ÃžÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E527: ã‚«ãƒ³ãƒžãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E528: Must specify a ' value"
-msgstr "E528: ' Â¤ÃŽÃƒÃ¤ò»ØÄꤷ¤Ê¤±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+msgstr "E528: ' ã®å€¤ã‚’指定ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
 
 msgid "E595: contains unprintable or wide character"
-msgstr "E595: Ã‰Â½Â¼Â¨Â¤Ã‡Â¤Â­Â¤ÃŠÂ¤Â¤ÃŠÂ¸Â»ÃºÂ¤Â«Â¥Ã¯Â¥Â¤Â¥Ã‰ÃŠÂ¸Â»ÃºÂ¤Ã²Â´ÃžÂ¤Ã³Â¤Ã‡Â¤Â¤Â¤ÃžÂ¤Â¹"
+msgstr "E595: è¡¨ç¤ºã§ããªã„文字ã‹ãƒ¯ã‚¤ãƒ‰æ–‡å­—ã‚’å«ã‚“ã§ã„ã¾ã™"
 
 msgid "E596: Invalid font(s)"
-msgstr "E596: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¤Ã‡Â¤Â¹"
+msgstr "E596: ç„¡åŠ¹ãªãƒ•ã‚©ãƒ³ãƒˆã§ã™"
 
 msgid "E597: can't select fontset"
-msgstr "E597: Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¥Â»Â¥ÃƒÂ¥ÃˆÂ¤Ã²ÃªÂò¤Ç¤­¤Þ¤»¤ó"
+msgstr "E597: ãƒ•ã‚©ãƒ³ãƒˆã‚»ãƒƒãƒˆã‚’é¸æŠžã§ãã¾ã›ã‚“"
 
 msgid "E598: Invalid fontset"
-msgstr "E598: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¥Â»Â¥ÃƒÂ¥ÃˆÂ¤Ã‡Â¤Â¹"
+msgstr "E598: ç„¡åŠ¹ãªãƒ•ã‚©ãƒ³ãƒˆã‚»ãƒƒãƒˆã§ã™"
 
 msgid "E533: can't select wide font"
-msgstr "E533: Â¥Ã¯Â¥Â¤Â¥Ã‰Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¤Ã²ÃªÂò¤Ç¤­¤Þ¤»¤ó"
+msgstr "E533: ãƒ¯ã‚¤ãƒ‰ãƒ•ã‚©ãƒ³ãƒˆã‚’é¸æŠžã§ãã¾ã›ã‚“"
 
 msgid "E534: Invalid wide font"
-msgstr "E534: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã¯Â¥Â¤Â¥Ã‰Â¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¤Ã‡Â¤Â¹"
+msgstr "E534: ç„¡åŠ¹ãªãƒ¯ã‚¤ãƒ‰ãƒ•ã‚©ãƒ³ãƒˆã§ã™"
 
 #, c-format
 msgid "E535: Illegal character after <%c>"
-msgstr "E535: <%c> Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹"
+msgstr "E535: <%c> ã®å¾Œã«ä¸æ­£ãªæ–‡å­—ãŒã‚ã‚Šã¾ã™"
 
 msgid "E536: comma required"
-msgstr "E536: Â¥Â«Â¥Ã³Â¥ÃžÂ¤Â¬Ã‰Â¬ÃפǤ¹"
+msgstr "E536: ã‚«ãƒ³ãƒžãŒå¿…è¦ã§ã™"
 
 #, c-format
 msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr "E537: 'commentstring' Â¤Ã¶õ¤Ç¤¢¤ë¤« %s Â¤Ã²Â´ÃžÂ¤Ã Ã‰Â¬Ãפ¬¤¢¤ê¤Þ¤¹"
+msgstr "E537: 'commentstring' ã¯ç©ºã§ã‚ã‚‹ã‹ %s ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™"
 
 msgid "E538: No mouse support"
-msgstr "E538: Â¥ÃžÂ¥Â¦Â¥Â¹Â¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+msgstr "E538: ãƒžã‚¦ã‚¹ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¾ã›ã‚“"
 
 msgid "E540: Unclosed expression sequence"
-msgstr "E540: Â¼Â°Â¤Â¬Â½ÂªÃŽÂ»Â¤Â·Â¤Ã†Â¤Â¤Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E540: å¼ãŒçµ‚了ã—ã¦ã„ã¾ã›ã‚“"
 
 msgid "E541: too many items"
-msgstr "E541: Ã×ÃǤ¬Â¿²á¤®¤Þ¤¹"
+msgstr "E541: è¦ç´ ãŒå¤šéŽãŽã¾ã™"
 
 msgid "E542: unbalanced groups"
-msgstr "E542: Â¥Â°Â¥Ã«Â¡Â¼Â¥Ã—¤¬Äà¹ç¤¤¤Þ¤»¤ó"
+msgstr "E542: ã‚°ãƒ«ãƒ¼ãƒ—ãŒé‡£åˆã„ã¾ã›ã‚“"
 
 msgid "E590: A preview window already exists"
-msgstr "E590: Â¥Ã—¥ì¥Ó¥å¡¼¥¦¥£¥ó¥É¥¦¤¬´û¤Ë¸ºß¤·¤Þ¤¹"
+msgstr "E590: ãƒ—レビューウィンドウãŒæ—¢ã«å­˜åœ¨ã—ã¾ã™"
 
 msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
 msgstr ""
-"W17: Â¥Â¢Â¥Ã©Â¥Ã“¥¢Ê¸»ú¤Ë¤ÃUTF-8¤¬É¬ÃפʤΤÇ, ':set encoding=utf-8' Â¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤"
+"W17: ã‚¢ãƒ©ãƒ“ア文字ã«ã¯UTF-8ãŒå¿…è¦ãªã®ã§, ':set encoding=utf-8' ã—ã¦ãã ã•ã„"
 
 #, c-format
 msgid "E593: Need at least %d lines"
-msgstr "E593: ÂºÃ‡Ã„ã %d Â¤ÃŽÂ¹Ã”¿ô¤¬É¬ÃפǤ¹"
+msgstr "E593: æœ€ä½Ž %d ã®è¡Œæ•°ãŒå¿…è¦ã§ã™"
 
 #, c-format
 msgid "E594: Need at least %d columns"
-msgstr "E594: ÂºÃ‡Ã„ã %d Â¤ÃŽÂ¥Â«Â¥Ã©Â¥Ã Ã‰Ã½Â¤Â¬Ã‰Â¬ÃפǤ¹"
+msgstr "E594: æœ€ä½Ž %d ã®ã‚«ãƒ©ãƒ å¹…ãŒå¿…è¦ã§ã™"
 
 #, c-format
 msgid "E355: Unknown option: %s"
-msgstr "E355: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ç¤¹: %s"
+msgstr "E355: æœªçŸ¥ã®ã‚ªãƒ—ションã§ã™: %s"
 
 #. There's another character after zeros or the string
 #. * is empty.  In both cases, we are trying to set a
 #. * num option using a string.
 #, c-format
 msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: Â¿Ã´Â»ÃºÂ¤Â¬Ã‰Â¬ÃפǤ¹: &%s = '%s'"
+msgstr "E521: æ•°å­—ãŒå¿…è¦ã§ã™: &%s = '%s'"
 
 msgid ""
 "\n"
 "--- Terminal codes ---"
 msgstr ""
 "\n"
-"--- ÃƒÂ¼Ã‹Ã¶Â¥Â³Â¡Â¼Â¥Ã‰ ---"
+"--- ç«¯æœ«ã‚³ãƒ¼ãƒ‰ ---"
 
 msgid ""
 "\n"
 "--- Global option values ---"
 msgstr ""
 "\n"
-"--- Â¥Â°Â¥Ã­Â¡Â¼Â¥Ã¥ë¥ª¥×¥·¥ç¥óÃà---"
+"--- ã‚°ãƒ­ãƒ¼ãƒãƒ«ã‚ªãƒ—ション値 ---"
 
 msgid ""
 "\n"
 "--- Local option values ---"
 msgstr ""
 "\n"
-"--- Â¥Ã­Â¡Â¼Â¥Â«Â¥Ã«Â¥ÂªÂ¥Ã—¥·¥ç¥óÃà---"
+"--- ãƒ­ãƒ¼ã‚«ãƒ«ã‚ªãƒ—ション値 ---"
 
 msgid ""
 "\n"
 "--- Options ---"
 msgstr ""
 "\n"
-"--- Â¥ÂªÂ¥Ã—¥·¥ç¥ó ---"
+"--- ã‚ªãƒ—ション ---"
 
 msgid "E356: get_varp ERROR"
-msgstr "E356: get_varp Â¥Â¨Â¥Ã©Â¡Â¼"
+msgstr "E356: get_varp Ã£\82¨ã\83©ã\83¼"
 
 #, c-format
 msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': %s Â¤Ã‹Ã‚ñþ¤¹¤ëʸ»ú¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E357: 'langmap': %s ã«å¯¾å¿œã™ã‚‹æ–‡å­—ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': Â¥Â»Â¥ÃŸÂ¥Â³Â¥Ã­Â¥Ã³Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã¾Ê¬¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹: %s"
+msgstr "E358: 'langmap': ã‚»ãƒŸã‚³ãƒ­ãƒ³ã®å¾Œã«ä½™åˆ†ãªæ–‡å­—ãŒã‚ã‚Šã¾ã™: %s"
 
 msgid "cannot open "
-msgstr "³«¤±¤Þ¤»¤ó "
+msgstr "é–‹ã‘ã¾ã›ã‚“ "
 
 msgid "VIM: Can't open window!\n"
-msgstr "VIM: Â¥Â¦Â¥Â£Â¥Ã³Â¥Ã‰Â¥Â¦Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³!\n"
+msgstr "VIM: ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã‘ã¾ã›ã‚“!\n"
 
 msgid "Need Amigados version 2.04 or later\n"
-msgstr "Amigados¤Î¥Ã¡¼¥¸¥ç¥ó 2.04¤«¤½¤ì°Ê¹ß¤¬É¬ÃפǤ¹\n"
+msgstr "Amigadosã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.04ã‹ãれ以é™ãŒå¿…è¦ã§ã™\n"
 
 #, c-format
 msgid "Need %s version %ld\n"
-msgstr "%s Â¤ÃŽÂ¥Ã¡¼¥¸¥ç¥ó %ld Â¤Â¬Ã‰Â¬ÃפǤ¹\n"
+msgstr "%s ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %ld ãŒå¿…è¦ã§ã™\n"
 
 msgid "Cannot open NIL:\n"
-msgstr "NIL¤ò³«¤±¤Þ¤»¤ó:\n"
+msgstr "NILã‚’é–‹ã‘ã¾ã›ã‚“:\n"
 
 msgid "Cannot create "
-msgstr "ºîÀ®¤Ç¤­¤Þ¤»¤ó "
+msgstr "作æˆã§ãã¾ã›ã‚“ "
 
 #, c-format
 msgid "Vim exiting with %d\n"
-msgstr "Vim¤à%d Â¤Ã‡Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â¹\n"
+msgstr "Vim㯠%d ã§çµ‚了ã—ã¾ã™\n"
 
 msgid "cannot change console mode ?!\n"
-msgstr "¥³¥ó¥½¡¼¥ë¥â¡¼¥É¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó?!\n"
+msgstr "コンソールモードを変更ã§ãã¾ã›ã‚“?!\n"
 
 msgid "mch_get_shellsize: not a console??\n"
-msgstr "mch_get_shellsize: Â¥Â³Â¥Ã³Â¥Â½Â¡Â¼Â¥Ã«Â¤Ã‡Â¤Ã¤Ê¤¤??\n"
+msgstr "mch_get_shellsize: ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã§ã¯ãªã„??\n"
 
 #. if Vim opened a window: Executing a shell may cause crashes
 msgid "E360: Cannot execute shell with -f option"
-msgstr "E360: -f Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤Ç¥·¥§¥ë¤ò¼Â¹Ô¤Ç¤­¤Þ¤»¤ó"
+msgstr "E360: -f ã‚ªãƒ—ションã§ã‚·ã‚§ãƒ«ã‚’実行ã§ãã¾ã›ã‚“"
 
 msgid "Cannot execute "
-msgstr "¼Â¹Ô¤Ç¤­¤Þ¤»¤ó "
+msgstr "実行ã§ãã¾ã›ã‚“ "
 
 msgid "shell "
-msgstr "¥·¥§¥ë "
+msgstr "シェル "
 
 msgid " returned\n"
-msgstr " ÃŒÃ¡Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿\n"
+msgstr " æˆ»ã‚Šã¾ã—ãŸ\n"
 
 msgid "ANCHOR_BUF_SIZE too small."
-msgstr "ANCHOR_BUF_SIZE Â¤Â¬Â¾Â®Â¤ÂµÂ²Ã¡Â¤Â®Â¤ÃžÂ¤Â¹."
+msgstr "ANCHOR_BUF_SIZE ãŒå°ã•éŽãŽã¾ã™."
 
 msgid "I/O ERROR"
-msgstr "Æþ½ÃÃŽÃ¥¨¥é¡¼"
+msgstr "Ã¥\85¥å\87ºå\8a\9bã\82¨ã\83©ã\83¼"
 
 msgid "Message"
-msgstr "¥á¥Ã¥»¡¼¥¸"
+msgstr "ã\83¡ã\83\83ã\82ȋ\83¼ã\82¸"
 
 msgid "'columns' is not 80, cannot execute external commands"
-msgstr "'columns' Â¤Â¬80¤Ç¤Ã¤Ê¤¤¤¿¤á, Â³Â°Ã‰Ã´Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã²Â¼Ã‚¹Ô¤Ç¤­¤Þ¤»¤ó"
+msgstr "'columns' ãŒ80ã§ã¯ãªã„ãŸã‚, å¤–部コマンドを実行ã§ãã¾ã›ã‚“"
 
 msgid "E237: Printer selection failed"
-msgstr "E237: Â¥Ã—¥ê¥ó¥¿¤ÎêÂò¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E237: ãƒ—リンタã®é¸æŠžã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "to %s on %s"
-msgstr "%s Â¤Ã˜ (%s Â¾Ã¥Â¤ÃŽ)"
+msgstr "%s ã¸ (%s ä¸Šã®)"
 
 #, c-format
 msgid "E613: Unknown printer font: %s"
-msgstr "E613: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥Ã—¥ê¥ó¥¿¥ª¥×¥·¥ç¥ó¤Ç¤¹: %s"
+msgstr "E613: æœªçŸ¥ã®ãƒ—リンタオプションã§ã™: %s"
 
 #, c-format
 msgid "E238: Print error: %s"
-msgstr "E238: Â°ÃµÂºÃ¾Â¥Â¨Â¥Ã©Â¡Â¼: %s"
+msgstr "E238: Ã¥\8d°å\88·ã\82¨ã\83©ã\83¼: %s"
 
 #, c-format
 msgid "Printing '%s'"
-msgstr "°õºþ¤·¤Æ¤¤¤Þ¤¹: '%s'"
+msgstr "å°åˆ·ã—ã¦ã„ã¾ã™: '%s'"
 
 #, c-format
 msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-msgstr "E244: ÃŠÂ¸Â»ÃºÂ¥Â»Â¥ÃƒÂ¥ÃˆÃŒÂ¾ \"%s\" Â¤ÃÉÔÀµ¤Ç¤¹ (¥Õ¥©¥ó¥È̾ \"%s\")"
+msgstr "E244: æ–‡å­—セットå \"%s\" ã¯ä¸æ­£ã§ã™ (フォントå \"%s\")"
 
 #, c-format
 msgid "E245: Illegal char '%c' in font name \"%s\""
-msgstr "E245: '%c' Â¤ÃÉÔÀµ¤Êʸ»ú¤Ç¤¹ (¥Õ¥©¥ó¥È̾ \"%s\")"
-
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: ÃŒÂµÂ¸ÃºÂ¤ÃŠ 'osfiletype' Â¥ÂªÂ¥Ã—¥·¥ç¥ó - \"Text\" Â¤Ã²Â»ÃˆÂ¤Â¤Â¤ÃžÂ¤Â¹"
+msgstr "E245: '%c' ã¯ä¸æ­£ãªæ–‡å­—ã§ã™ (フォントå \"%s\")"
 
 msgid "Vim: Double signal, exiting\n"
-msgstr "Vim: 2½Å¤Î¥·¥°¥Ê¥ë¤Î¤¿¤á, Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â¹\n"
+msgstr "Vim: 2é‡ã®ã‚·ã‚°ãƒŠãƒ«ã®ãŸã‚, çµ‚了ã—ã¾ã™\n"
 
 #, c-format
 msgid "Vim: Caught deadly signal %s\n"
-msgstr "Vim: ÃƒÃ—̿Ū¥·¥°¥Ê¥ë %s Â¤Ã²Â¸Â¡ÃƒÃŽÂ¤Â·Â¤ÃžÂ¤Â·Â¤Â¿\n"
+msgstr "Vim: è‡´å‘½çš„シグナル %s ã‚’検知ã—ã¾ã—ãŸ\n"
 
 #, c-format
 msgid "Vim: Caught deadly signal\n"
-msgstr "Vim: ÃƒÃ—̿Ū¥·¥°¥Ê¥ë¤ò¸¡ÃΤ·¤Þ¤·¤¿\n"
+msgstr "Vim: è‡´å‘½çš„シグナルを検知ã—ã¾ã—ãŸ\n"
 
 #, c-format
 msgid "Opening the X display took %ld msec"
-msgstr "X¥µ¡¼¥Ã¤Ø¤ÎÀܳ¤Ë %ld Â¥ÃŸÂ¥ÃªÃ‰ÃƒÂ¤Â«Â¤Â«Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "Xサーãƒã¸ã®æŽ¥ç¶šã« %ld ãƒŸãƒªç§’ã‹ã‹ã‚Šã¾ã—ãŸ"
 
 msgid ""
 "\n"
 "Vim: Got X error\n"
 msgstr ""
 "\n"
-"Vim: X Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼Â¤Ã²Â¸Â¡Â½Ã¤·¤Þ¤·¤¿r\n"
+"Vim: X ã®ã‚¨ãƒ©ãƒ¼ã‚’検出ã—ã¾ã—ãŸr\n"
 
 msgid "Testing the X display failed"
-msgstr "X display Â¤ÃŽÂ¥Ã¥§¥Ã¥¯¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "X display ã®ãƒã‚§ãƒƒã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "Opening the X display timed out"
-msgstr "X display Â¤ÃŽ open Â¤Â¬Â¥Â¿Â¥Â¤Â¥Ã Â¥Â¢Â¥Â¦Â¥ÃˆÂ¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "X display ã® open ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸ"
 
 msgid ""
 "\n"
 "Could not get security context for "
 msgstr ""
 "\n"
-"¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó "
+"セキュリティコンテキストをå–å¾—ã§ãã¾ã›ã‚“ "
 
 msgid ""
 "\n"
 "Could not set security context for "
 msgstr ""
 "\n"
-"¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È¤òÀßÄê¤Ç¤­¤Þ¤»¤ó "
+"セキュリティコンテキストを設定ã§ãã¾ã›ã‚“ "
 
 msgid ""
 "\n"
 "Cannot execute shell "
 msgstr ""
 "\n"
-"¥·¥§¥ë¤ò¼Â¹Ô¤Ç¤­¤Þ¤»¤ó "
+"シェルを実行ã§ãã¾ã›ã‚“ "
 
 msgid ""
 "\n"
 "Cannot execute shell sh\n"
 msgstr ""
 "\n"
-"sh Â¥Â·Â¥Â§Â¥Ã«Â¤Ã²Â¼Ã‚¹Ô¤Ç¤­¤Þ¤»¤ó\n"
+"sh ã‚·ã‚§ãƒ«ã‚’実行ã§ãã¾ã›ã‚“\n"
 
 msgid ""
 "\n"
 "shell returned "
 msgstr ""
 "\n"
-"¥·¥§¥ë¤¬ÃäòÊÖ¤·¤Þ¤·¤¿ "
+"シェルãŒå€¤ã‚’è¿”ã—ã¾ã—㟠"
 
 msgid ""
 "\n"
 "Cannot create pipes\n"
 msgstr ""
 "\n"
-"¥Ñ¥¤¥×¤òºîÀ®¤Ç¤­¤Þ¤»¤ó\n"
+"パイプを作æˆã§ãã¾ã›ã‚“\n"
 
 msgid ""
 "\n"
 "Cannot fork\n"
 msgstr ""
 "\n"
-"fork Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³\n"
+"fork ã§ãã¾ã›ã‚“\n"
 
 msgid ""
 "\n"
 "Command terminated\n"
 msgstr ""
 "\n"
-"¥³¥Þ¥ó¥É¤òÃæÃǤ·¤Þ¤·¤¿\n"
+"コマンドを中断ã—ã¾ã—ãŸ\n"
 
 msgid "XSMP lost ICE connection"
-msgstr "XSMP Â¤Â¬ICEÀܳ¤ò¼º¤¤¤Þ¤·¤¿"
+msgstr "XSMP ãŒICE接続を失ã„ã¾ã—ãŸ"
 
 #, c-format
 msgid "dlerror = \"%s\""
 msgstr "dlerror = \"%s\""
 
 msgid "Opening the X display failed"
-msgstr "X display Â¤ÃŽ open Â¤Ã‹Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+msgstr "X display ã® open ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 msgid "XSMP handling save-yourself request"
-msgstr "XSMP Â¤Â¬save-yourselfÃ×µá¤ò½èÃý¤·¤Æ¤¤¤Þ¤¹"
+msgstr "XSMP ãŒsave-yourselfè¦æ±‚を処ç†ã—ã¦ã„ã¾ã™"
 
 msgid "XSMP opening connection"
-msgstr "XSMP Â¤Â¬Ã€ÃœÃ‚³¤ò³«»Ã¤·¤Æ¤¤¤Þ¤¹"
+msgstr "XSMP ãŒæŽ¥ç¶šã‚’開始ã—ã¦ã„ã¾ã™"
 
 msgid "XSMP ICE connection watch failed"
-msgstr "XSMP ICEÀܳ¤¬¼ºÇÔ¤·¤¿¤è¤¦¤Ç¤¹"
+msgstr "XSMP ICE接続ãŒå¤±æ•—ã—ãŸã‚ˆã†ã§ã™"
 
 #, c-format
 msgid "XSMP SmcOpenConnection failed: %s"
-msgstr "XSMP SmcOpenConnection¤¬¼ºÇÔ¤·¤Þ¤·¤¿: %s"
+msgstr "XSMP SmcOpenConnectionãŒå¤±æ•—ã—ã¾ã—ãŸ: %s"
 
 msgid "At line"
-msgstr "¹Ô"
+msgstr "è¡Œ"
 
 msgid "Could not load vim32.dll!"
-msgstr "vim32.dll Â¤Ã²Â¥Ã­Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿"
+msgstr "vim32.dll ã‚’ロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "VIM Error"
-msgstr "VIM¥¨¥é¡¼"
+msgstr "VIMã\82¨ã\83©ã\83¼"
 
 msgid "Could not fix up function pointers to the DLL!"
-msgstr "DLL¤«¤é´Ø¿ô¥Ã¥¤¥ó¥¿¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "DLLã‹ã‚‰é–¢æ•°ãƒã‚¤ãƒ³ã‚¿ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸ"
 
 #, c-format
 msgid "shell returned %d"
-msgstr "¥·¥§¥ë¤¬¥³¡¼¥É %d Â¤Ã‡Â½ÂªÃŽÂ»Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "シェルãŒã‚³ãƒ¼ãƒ‰ %d ã§çµ‚了ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "Vim: Caught %s event\n"
-msgstr "Vim: Â¥Â¤Â¥Ã™Â¥Ã³Â¥Ãˆ %s Â¤Ã²Â¸Â¡ÃƒÃŽ\n"
+msgstr "Vim: ã‚¤ãƒ™ãƒ³ãƒˆ %s ã‚’検知\n"
 
 msgid "close"
-msgstr "ÊĤ¸¤ë"
+msgstr "é–‰ã˜ã‚‹"
 
 msgid "logoff"
-msgstr "¥í¥°¥ª¥Õ"
+msgstr "ログオフ"
 
 msgid "shutdown"
-msgstr "¥·¥ã¥Ã¥È¥À¥¦¥ó"
+msgstr "シャットダウン"
 
 msgid "E371: Command not found"
-msgstr "E371: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E371: ã‚³ãƒžãƒ³ãƒ‰ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid ""
 "VIMRUN.EXE not found in your $PATH.\n"
 "External commands will not pause after completion.\n"
 "See  :help win32-vimrun  for more information."
 msgstr ""
-"VIMRUN.EXE¤¬ $PATH Â¤ÃŽÃƒÃ¦Â¤Ã‹Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó.\n"
-"³°Éô¥³¥Þ¥ó¥É¤Î½ªÎ»¸å¤Ë°ì»þÄä»ß¤ò¤·¤Þ¤»¤ó.\n"
-"¾ÜºÙ¤à :help win32-vimrun  Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â¤Â¯Â¤Ã€Â¤ÂµÂ¤Â¤."
+"VIMRUN.EXE㌠$PATH ã®ä¸­ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“.\n"
+"外部コマンドã®çµ‚了後ã«ä¸€æ™‚åœæ­¢ã‚’ã—ã¾ã›ã‚“.\n"
+"詳細㯠 :help win32-vimrun  ã‚’å‚ç…§ã—ã¦ãã ã•ã„."
 
 msgid "Vim Warning"
-msgstr "Vim¤Î·Ù¹ð"
+msgstr "Vimã®è­¦å‘Š"
 
 #, c-format
 msgid "E372: Too many %%%c in format string"
-msgstr "E372: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‹ %%%c Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+msgstr "E372: ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆæ–‡å­—列㫠%%%c ãŒå¤šéŽãŽã¾ã™"
 
 #, c-format
 msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‹Ã½´ü¤»¤Ì %%%c Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "E373: ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆæ–‡å­—列ã«äºˆæœŸã›ã¬ %%%c ãŒã‚ã‚Šã¾ã—ãŸ"
 
 msgid "E374: Missing ] in format string"
-msgstr "E374: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‹ ] Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E374: ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆæ–‡å­—列㫠] ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‡Â¤Ã %%%c Â¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Þ¤»¤ó"
+msgstr "E375: ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆæ–‡å­—列ã§ã¯ %%%c ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¾ã›ã‚“"
 
 #, c-format
 msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤ÃŽÃ°ÃÖ¤Ë̵¸ú¤Ê %%%c Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E376: ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆæ–‡å­—列ã®å‰ç½®ã«ç„¡åŠ¹ãª %%%c ãŒã‚ã‚Šã¾ã™"
 
 #, c-format
 msgid "E377: Invalid %%%c in format string"
-msgstr "E377: Â¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‹ÃŒÂµÂ¸ÃºÂ¤ÃŠ %%%c Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E377: ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆæ–‡å­—列ã«ç„¡åŠ¹ãª %%%c ãŒã‚ã‚Šã¾ã™"
 
 msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378: 'errorformat' Â¤Ã‹Â¥Ã‘¥¿¡¼¥ó¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E378: 'errorformat' ã«ãƒ‘ターンãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E379: Missing or empty directory name"
-msgstr "E379: Â¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÃŒÂ¾Â¤Â¬ÃŒÂµÂ¤Â¤Â¤Â«Â¶ÃµÂ¤Ã‡Â¤Â¹"
+msgstr "E379: ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåãŒç„¡ã„ã‹ç©ºã§ã™"
 
 msgid "E553: No more items"
-msgstr "E553: Ã×ÃǤ¬¤â¤¦¤¢¤ê¤Þ¤»¤ó"
+msgstr "E553: è¦ç´ ãŒã‚‚ã†ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "(%d of %d)%s%s: "
 msgstr "(%d of %d)%s%s: "
 
 msgid " (line deleted)"
-msgstr " (¹Ô¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿)"
+msgstr " (è¡ŒãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ)"
 
 msgid "E380: At bottom of quickfix stack"
-msgstr "E380: quickfix Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤ÃŽÃ‹Ã¶ÃˆÃ¸Â¤Ã‡Â¤Â¹"
+msgstr "E380: quickfix ã‚¹ã‚¿ãƒƒã‚¯ã®æœ«å°¾ã§ã™"
 
 msgid "E381: At top of quickfix stack"
-msgstr "E381: quickfix Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤ÃŽÃ€Ã¨Ã†Â¬Â¤Ã‡Â¤Â¹"
+msgstr "E381: quickfix ã‚¹ã‚¿ãƒƒã‚¯ã®å…ˆé ­ã§ã™"
 
 #, c-format
 msgid "error list %d of %d; %d errors"
-msgstr "¥¨¥é¡¼°ìÃ÷ %d of %d; %d Â¸Ã„¥¨¥é¡¼"
+msgstr "ã\82¨ã\83©ã\83¼ä¸\80覧 %d of %d; %d Ã¥\80\8bã\82¨ã\83©ã\83¼"
 
 msgid "E382: Cannot write, 'buftype' option is set"
-msgstr "E382: 'buftype' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤Î¤Ç½ñ¹þ¤ß¤Þ¤»¤ó"
+msgstr "E382: 'buftype' ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹ã®ã§æ›¸è¾¼ã¿ã¾ã›ã‚“"
+
+msgid "Error file"
+msgstr "エラーファイル"
 
 msgid "E683: File name missing or invalid pattern"
-msgstr "E683: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Â¬ÃŒÂµÂ¤Â¤Â¤Â«ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Ã‘¥¿¡¼¥ó¤Ç¤¹"
+msgstr "E683: ãƒ•ã‚¡ã‚¤ãƒ«åãŒç„¡ã„ã‹ç„¡åŠ¹ãªãƒ‘ターンã§ã™"
 
 #, c-format
 msgid "Cannot open file \"%s\""
-msgstr "¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "ファイル \"%s\" ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 msgid "E681: Buffer is not loaded"
-msgstr "E681: Â¥Ã¥Ã¥Õ¥¡¤ÃÆɤ߹þ¤Þ¤ì¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "E681: ãƒãƒƒãƒ•ã‚¡ã¯èª­ã¿è¾¼ã¾ã‚Œã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "E777: String or List expected"
-msgstr "E777: ÃŠÂ¸Â»ÃºÃŽÃ³Â¤Â«Â¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Â¬Ã‰Â¬ÃפǤ¹"
+msgstr "E777: æ–‡å­—列ã‹ãƒªã‚¹ãƒˆãŒå¿…è¦ã§ã™"
 
 #, c-format
 msgid "E369: invalid item in %s%%[]"
-msgstr "E369: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¹Ã ÃŒÃœÂ¤Ã‡Â¤Â¹: %s%%[]"
-
-msgid "E339: Pattern too long"
-msgstr "E339: Â¥Ã‘¥¿¡¼¥ó¤¬Ä¹²á¤®¤Þ¤¹"
-
-msgid "E50: Too many \\z("
-msgstr "E50: \\z( Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+msgstr "E369: ç„¡åŠ¹ãªé …ç›®ã§ã™: %s%%[]"
 
+#
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: %s( Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
-
-msgid "E52: Unmatched \\z("
-msgstr "E52: \\z( Â¤Â¬Ã„à¤ê¹ç¤Ã¤Æ¤¤¤Þ¤»¤ó"
+msgid "E769: Missing ] after %s["
+msgstr "E769: %s[ ã®å¾Œã« ] ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E53: Unmatched %s%%("
-msgstr "E53: %s%%( Â¤Â¬Ã„à¤ê¹ç¤Ã¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E53: %s%%( ãŒé‡£ã‚Šåˆã£ã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "E54: Unmatched %s("
-msgstr "E54: %s( Â¤Â¬Ã„à¤ê¹ç¤Ã¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E54: %s( ãŒé‡£ã‚Šåˆã£ã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "E55: Unmatched %s)"
-msgstr "E55: %s) Â¤Â¬Ã„à¤ê¹ç¤Ã¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E55: %s) ãŒé‡£ã‚Šåˆã£ã¦ã„ã¾ã›ã‚“"
+
+#
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( ã¯ã‚³ã‚³ã§ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 ãã®ä»–ã¯ã‚³ã‚³ã§ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#
+#, c-format
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: %s%%[ ã®å¾Œã« ] ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#, c-format
+msgid "E70: Empty %s%%[]"
+msgstr "E70: %s%%[] ãŒç©ºã§ã™"
+
+msgid "E339: Pattern too long"
+msgstr "E339: ãƒ‘ターンãŒé•·éŽãŽã¾ã™"
+
+msgid "E50: Too many \\z("
+msgstr "E50: \\z( ãŒå¤šéŽãŽã¾ã™"
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: %s( ãŒå¤šéŽãŽã¾ã™"
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: \\z( ãŒé‡£ã‚Šåˆã£ã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "E59: invalid character after %s@"
-msgstr "E59: %s@ Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤·¤¿"
+msgstr "E59: %s@ ã®å¾Œã«ä¸æ­£ãªæ–‡å­—ãŒã‚ã‚Šã¾ã—ãŸ"
 
 #, c-format
 msgid "E60: Too many complex %s{...}s"
-msgstr "E60: ÃŠÂ£Â»Â¨Â¤ÃŠ %s{...} Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+msgstr "E60: è¤‡é›‘㪠%s{...} ãŒå¤šéŽãŽã¾ã™"
 
 #, c-format
 msgid "E61: Nested %s*"
-msgstr "E61:%s* Â¤Â¬Ã†Ã¾Â¤Ã¬Â»Ã’¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "E61:%s* ãŒå…¥ã‚Œå­ã«ãªã£ã¦ã„ã¾ã™"
 
 #, c-format
 msgid "E62: Nested %s%c"
-msgstr "E62:%s%c Â¤Â¬Ã†Ã¾Â¤Ã¬Â»Ã’¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "E62:%s%c ãŒå…¥ã‚Œå­ã«ãªã£ã¦ã„ã¾ã™"
 
 #
 msgid "E63: invalid use of \\_"
-msgstr "E63: \\_ Â¤ÃŽÃŒÂµÂ¸ÃºÂ¤ÃŠÂ»ÃˆÃÑÊýË¡¤Ç¤¹"
+msgstr "E63: \\_ ã®ç„¡åŠ¹ãªä½¿ç”¨æ–¹æ³•ã§ã™"
 
 #, c-format
 msgid "E64: %s%c follows nothing"
-msgstr "E64:%s%c Â¤ÃŽÂ¸Ã¥Â¤Ã‹Â¤ÃŠÂ¤Ã‹Â¤Ã¢Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E64:%s%c ã®å¾Œã«ãªã«ã‚‚ã‚ã‚Šã¾ã›ã‚“"
 
 #
 msgid "E65: Illegal back reference"
-msgstr "E65: Ã‰Ã”Àµ¤Ê¸åÊý»²¾È¤Ç¤¹"
+msgstr "E65: ä¸æ­£ãªå¾Œæ–¹å‚ç…§ã§ã™"
 
 #
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( Â¤Ã¥³¥³¤Ç¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgid "E68: Invalid character after \\z"
+msgstr "E68: \\z ã®å¾Œã«ä¸æ­£ãªæ–‡å­—ãŒã‚ã‚Šã¾ã—ãŸ"
 
 #
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 Â¤Â½Â¤ÃŽÃ‚¾¤Ã¥³¥³¤Ç¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+#, c-format
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678: %s%%[dxouU] ã®å¾Œã«ä¸æ­£ãªæ–‡å­—ãŒã‚ã‚Šã¾ã—ãŸ"
 
 #
-msgid "E68: Invalid character after \\z"
-msgstr "E68: \\z Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤·¤¿"
+#, c-format
+msgid "E71: Invalid character after %s%%"
+msgstr "E71: %s%% ã®å¾Œã«ä¸æ­£ãªæ–‡å­—ãŒã‚ã‚Šã¾ã—ãŸ"
 
-#
 #, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: %s%%[ Â¤ÃŽÂ¸Ã¥Â¤Ã‹ ] Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgid "E554: Syntax error in %s{...}"
+msgstr "E554: %s{...} å†…ã«æ–‡æ³•ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã™"
+
+msgid "External submatches:\n"
+msgstr "外部ã®éƒ¨åˆ†è©²å½“:\n"
+
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr ""
+"E864: \\%#= ã«ã¯ 0, 1 ã‚‚ã—ã㯠2 ã®ã¿ãŒç¶šã‘られã¾ã™ã€‚"
+"æ­£è¦è¡¨ç¾ã‚¨ãƒ³ã‚¸ãƒ³ã¯è‡ªå‹•é¸æŠžã•ã‚Œã¾ã™ã€‚"
 
 #, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: %s%%[] Â¤Â¬Â¶ÃµÂ¤Ã‡Â¤Â¹"
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (NFA æ­£è¦è¡¨ç¾) ä½ç½®ãŒèª¤ã£ã¦ã„ã¾ã™: %c"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) æœŸå¾…より早ãæ­£è¦è¡¨ç¾ã®çµ‚端ã«åˆ°é”ã—ã¾ã—ãŸ"
 
-#
 #, c-format
-msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: %s%%[dxouU] Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤·¤¿"
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) æœªçŸ¥ã®ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ã§ã™: '\\z%c'"
 
-#
 #, c-format
-msgid "E71: Invalid character after %s%%"
-msgstr "E71: %s%% Â¤ÃŽÂ¸Ã¥Â¤Ã‹Ã‰Ã”Àµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤·¤¿"
+msgid "E867: (NFA) Unknown operator '\\%%%c'"
+msgstr "E867: (NFA) æœªçŸ¥ã®ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ã§ã™: '\\%%%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: ç­‰ä¾¡ã‚¯ãƒ©ã‚¹ã‚’å«ã‚€NFA構築ã«å¤±æ•—ã—ã¾ã—ãŸ!"
 
-#
 #, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: %s[ Â¤ÃŽÂ¸Ã¥Â¤Ã‹ ] Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) æœªçŸ¥ã®ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ã§ã™: '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (NFA æ­£è¦è¡¨ç¾) ç¹°ã‚Šè¿”ã—ã®åˆ¶é™å›žæ•°ã‚’読込中ã«ã‚¨ãƒ©ãƒ¼"
+
+#. Can't have a multi follow a multi.
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (NFA æ­£è¦è¡¨ç¾) ç¹°ã‚Šè¿”ã— ã®å¾Œã« ç¹°ã‚Šè¿”ã— ã¯ã§ãã¾ã›ã‚“!"
+
+#. Too many `('
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (NFA æ­£è¦è¡¨ç¾) '(' ãŒå¤šéŽãŽã¾ã™"
+
+msgid "E879: (NFA regexp) Too many \\z("
+msgstr "E879: (NFA æ­£è¦è¡¨ç¾) \\z( ãŒå¤šéŽãŽã¾ã™"
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (NFA æ­£è¦è¡¨ç¾) çµ‚端記å·ãŒã‚ã‚Šã¾ã›ã‚“"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) ã‚¹ã‚¿ãƒƒã‚¯ã‚’ãƒãƒƒãƒ—ã§ãã¾ã›ã‚“!"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr ""
+"E875: (NFA æ­£è¦è¡¨ç¾) (後置文字列をNFAã«å¤‰æ›ä¸­ã«) "
+"スタックã«æ®‹ã•ã‚ŒãŸã‚¹ãƒ†ãƒ¼ãƒˆãŒå¤šéŽãŽã¾ã™"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (NFA æ­£è¦è¡¨ç¾) NFA全体をä¿å­˜ã™ã‚‹ã«ã¯ç©ºãスペースãŒè¶³ã‚Šã¾ã›ã‚“"
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (NFA) ç¾åœ¨æ¨ªæ–­ä¸­ã®ãƒ–ランãƒã«å分ãªãƒ¡ãƒ¢ãƒªã‚’割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr "NFAæ­£è¦è¡¨ç¾ã‚¨ãƒ³ã‚¸ãƒ³ç”¨ã®ãƒ­ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã‚’書込用ã¨ã—ã¦é–‹ã‘ã¾ã›ã‚“。"
+"ログã¯æ¨™æº–出力ã«å‡ºåŠ›ã—ã¾ã™ã€‚"
 
 #, c-format
-msgid "E554: Syntax error in %s{...}"
-msgstr "E554: %s{...} Ã†Ã¢Â¤Ã‹ÃŠÂ¸Ã‹Â¡Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) ãƒ­ã‚°ãƒ•ã‚¡ã‚¤ãƒ« %s ã‚’é–‹ã‘ã¾ã›ã‚“!"
 
-msgid "External submatches:\n"
-msgstr "³°Éô¤ÎÉôʬ³ºÅö:\n"
+msgid "Could not open temporary log file for writing "
+msgstr "NFAæ­£è¦è¡¨ç¾ã‚¨ãƒ³ã‚¸ãƒ³ç”¨ã®ãƒ­ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã‚’書込用ã¨ã—ã¦é–‹ã‘ã¾ã›ã‚“。"
 
 msgid " VREPLACE"
-msgstr " Â²Â¾ÃÛÃÖ´¹"
+msgstr " ä»®æƒ³ç½®æ›"
 
 msgid " REPLACE"
-msgstr " ÃƒÃ–´¹"
+msgstr " ç½®æ›"
 
 msgid " REVERSE"
-msgstr " È¿Å¾"
+msgstr " å転"
 
 msgid " INSERT"
-msgstr " ÃÞÆþ"
+msgstr " æŒ¿å…¥"
 
 msgid " (insert)"
-msgstr " (ÃÞÆþ)"
+msgstr " (挿入)"
 
 msgid " (replace)"
-msgstr " (ÃÖ´¹)"
+msgstr " (ç½®æ›)"
 
 msgid " (vreplace)"
-msgstr " (²¾ÃÛÃÖ´¹)"
+msgstr " (仮想置æ›)"
 
 msgid " Hebrew"
-msgstr " Â¥Ã˜Â¥Ã–¥é¥¤"
+msgstr " Ã£\83\98ã\83\96ã\83©ã\82¤"
 
 msgid " Arabic"
-msgstr " Â¥Â¢Â¥Ã©Â¥Ã“¥¢"
+msgstr " Ã£\82¢ã\83©ã\83\93ã\82¢"
 
 msgid " (lang)"
-msgstr " (¸À¸ì)"
+msgstr " (言語)"
 
 msgid " (paste)"
-msgstr " (Ž¤êÉÕ¤±)"
+msgstr " (貼り付ã‘)"
 
 msgid " VISUAL"
-msgstr " Â¥Ã“¥¸¥å¥¢¥ë"
+msgstr " ãƒ“ジュアル"
 
 msgid " VISUAL LINE"
-msgstr " Â¥Ã“¥¸¥å¥¢¥ë Â¹Ã”"
+msgstr " ãƒ“ジュアル è¡Œ"
 
 msgid " VISUAL BLOCK"
-msgstr " Â¥Ã“¥¸¥å¥¢¥ë Â¶Ã«Â·Ã"
+msgstr " ãƒ“ジュアル çŸ©å½¢"
 
 msgid " SELECT"
-msgstr " Â¥Â»Â¥Ã¬Â¥Â¯Â¥Ãˆ"
+msgstr " ã‚»ãƒ¬ã‚¯ãƒˆ"
 
 msgid " SELECT LINE"
-msgstr " Â¹Ã”»Ø¸þêÂò"
+msgstr " è¡ŒæŒ‡å‘é¸æŠž"
 
 msgid " SELECT BLOCK"
-msgstr " Â¶Ã«Â·ÃêÂò"
+msgstr " çŸ©å½¢é¸æŠž"
 
 msgid "recording"
-msgstr "µ­Ã¿Ãæ"
+msgstr "記録中"
 
 #, c-format
 msgid "E383: Invalid search string: %s"
-msgstr "E383: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¸Â¡ÂºÃ·ÃŠÂ¸Â»ÃºÃŽÃ³Â¤Ã‡Â¤Â¹: %s"
+msgstr "E383: ç„¡åŠ¹ãªæ¤œç´¢æ–‡å­—列ã§ã™: %s"
 
 #, c-format
 msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: Â¾Ã¥Â¤ÃžÂ¤Ã‡Â¸Â¡ÂºÃ·Â¤Â·Â¤Â¿Â¤Â±Â¤Ã¬Â¤Ã‰Â³ÂºÃ…ö²Õ½ê¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E384: ä¸Šã¾ã§æ¤œç´¢ã—ã¾ã—ãŸãŒè©²å½“箇所ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: Â²Â¼Â¤ÃžÂ¤Ã‡Â¸Â¡ÂºÃ·Â¤Â·Â¤Â¿Â¤Â±Â¤Ã¬Â¤Ã‰Â³ÂºÃ…ö²Õ½ê¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E385: ä¸‹ã¾ã§æ¤œç´¢ã—ã¾ã—ãŸãŒè©²å½“箇所ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 msgid "E386: Expected '?' or '/'  after ';'"
-msgstr "E386: ';' Â¤ÃŽÂ¤Â¢Â¤ÃˆÂ¤Ã‹Â¤Ã '?' Â¤Â« '/' Â¤Â¬Â´Ã¼Ã‚Ô¤µ¤ì¤Æ¤¤¤ë"
+msgstr "E386: ';' ã®ã‚ã¨ã«ã¯ '?' ã‹ '/' ãŒæœŸå¾…ã•ã‚Œã¦ã„ã‚‹"
 
 msgid " (includes previously listed match)"
-msgstr " (ð¤ËÎóµó¤·¤¿³ºÅö²Õ½ê¤ò´Þ¤à)"
+msgstr " (å‰ã«åˆ—挙ã—ãŸè©²å½“箇所をå«ã‚€)"
 
 #. cursor at status line
 msgid "--- Included files "
-msgstr "--- Â¥Â¤Â¥Ã³Â¥Â¯Â¥Ã«Â¡Â¼Â¥Ã‰Â¤ÂµÂ¤Ã¬Â¤Â¿Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«"
+msgstr "--- ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ« "
 
 msgid "not found "
-msgstr "¤ß¤Ä¤«¤ê¤Þ¤»¤ó "
+msgstr "見ã¤ã‹ã‚Šã¾ã›ã‚“ "
 
 msgid "in path ---\n"
-msgstr "¥Ñ¥¹¤Ë ----\n"
+msgstr "パス㫠----\n"
 
 msgid "  (Already listed)"
-msgstr "  (´û¤ËÎóµó)"
+msgstr "  (æ—¢ã«åˆ—挙)"
 
 msgid "  NOT FOUND"
-msgstr "  Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgstr "  è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "Scanning included file: %s"
-msgstr "¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤ò¥¹¥­¥ã¥óÃæ: %s"
+msgstr "インクルードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’スキャン中: %s"
 
 #, c-format
 msgid "Searching included file %s"
-msgstr "¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤ò¥¹¥­¥ã¥óÃæ %s"
+msgstr "インクルードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’スキャン中 %s"
 
 msgid "E387: Match is on current line"
-msgstr "E387: Â¸Â½ÂºÃŸÂ¹Ã”¤Ë³ºÅö¤¬¤¢¤ê¤Þ¤¹"
+msgstr "E387: ç¾åœ¨è¡Œã«è©²å½“ãŒã‚ã‚Šã¾ã™"
 
 msgid "All included files were found"
-msgstr "ô¤Æ¤Î¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤¬¤ß¤Ä¤«¤ê¤Þ¤·¤¿"
+msgstr "å…¨ã¦ã®ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ"
 
 msgid "No included files"
-msgstr "¥¤¥ó¥¯¥ë¡¼¥É¥Õ¥¡¥¤¥ë¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "インクルードファイルã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E388: Couldn't find definition"
-msgstr "E388: Ã„êµÃ¤ò¤ß¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+msgstr "E388: å®šç¾©ã‚’見ã¤ã‘られã¾ã›ã‚“"
 
 msgid "E389: Couldn't find pattern"
-msgstr "E389: Â¥Ã‘¥¿¡¼¥ó¤ò¤ß¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+msgstr "E389: ãƒ‘ターンを見ã¤ã‘られã¾ã›ã‚“"
+
+msgid "Substitute "
+msgstr "Substitute "
 
 #, c-format
 msgid ""
@@ -4758,606 +4998,632 @@ msgid ""
 "~"
 msgstr ""
 "\n"
-"# ÂºÃ‡Â¸Ã¥Â¤ÃŽ %s¸¡º÷¥Ñ¥¿¡¼¥ó:\n"
+"# æœ€å¾Œã® %s検索パターン:\n"
 "~"
 
 msgid "E759: Format error in spell file"
-msgstr "E759: Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ½Ã±Â¼Â°Â¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹"
+msgstr "E759: ã‚¹ãƒšãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸å¼ã‚¨ãƒ©ãƒ¼ã§ã™"
 
 msgid "E758: Truncated spell file"
-msgstr "E758: Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Ã€ÃšÂ¼Ã¨Â¤Ã©Â¤Ã¬Â¤Ã†Â¤Â¤Â¤Ã«Â¤Ã¨Â¤Â¦Â¤Ã‡Â¤Â¹"
+msgstr "E758: ã‚¹ãƒšãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ãŒåˆ‡å–られã¦ã„るよã†ã§ã™"
 
 #, c-format
 msgid "Trailing text in %s line %d: %s"
-msgstr "%s (%d Â¹Ã”ÌÜ) Â¤Ã‹Ã‚³¤¯¥Æ¥­¥¹¥È: %s"
+msgstr "%s (%d è¡Œç›®) ã«ç¶šãテキスト: %s"
 
 #, c-format
 msgid "Affix name too long in %s line %d: %s"
-msgstr "%s (%d Â¹Ã”ÌÜ) Â¤ÃŽ affix ÃŒÂ¾Â¤Â¬Ã„¹²á¤®¤Þ¤¹: %s"
+msgstr "%s (%d è¡Œç›®) ã® affix åãŒé•·éŽãŽã¾ã™: %s"
 
 msgid "E761: Format error in affix file FOL, LOW or UPP"
 msgstr ""
-"E761: affix¥Õ¥¡¥¤¥ë¤Î FOL, LOW Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã UPP Â¤ÃŽÂ¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÂ¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+"E761: affixファイル㮠FOL, LOW ã‚‚ã—ã㯠UPP ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã™"
 
 msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: FOL, LOW Â¤Ã¢Â¤Â·Â¤Â¯Â¤Ã UPP Â¤ÃŽÃŠÂ¸Â»ÃºÂ¤Â¬ÃˆÃ°Ã³°¤Ç¤¹"
+msgstr "E762: FOL, LOW ã‚‚ã—ã㯠UPP ã®æ–‡å­—ãŒç¯„囲外ã§ã™"
 
 msgid "Compressing word tree..."
-msgstr "ñ¸ì¥Ä¥ê¡¼¤ò°µ½Ì¤·¤Æ¤¤¤Þ¤¹..."
+msgstr "å˜èªžãƒ„リーを圧縮ã—ã¦ã„ã¾ã™..."
 
 msgid "E756: Spell checking is not enabled"
-msgstr "E756: Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã¥§¥Ã¥¯¤Ã̵¸ú²½¤µ¤ì¤Æ¤¤¤Þ¤¹"
+msgstr "E756: ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯ã¯ç„¡åŠ¹åŒ–ã•ã‚Œã¦ã„ã¾ã™"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"警告: å˜èªžãƒªã‚¹ãƒˆ \"%s_%s.spl\" ãŠã‚ˆã³ \"%s_ascii.spl\" ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
-"·Ù¹ð: ÃƒÂ±Â¸Ã¬Â¥ÃªÂ¥Â¹Â¥Ãˆ \"%s.%s.spl\" Â¤ÂªÂ¤Ã¨Â¤Ã“ \"%s.ascii.spl\" Â¤Ã¸«¤Ä¤«¤ê¤Þ¤»¤ó"
+"警告: å˜èªžãƒªã‚¹ãƒˆ \"%s.%s.spl\" ãŠã‚ˆã³ \"%s.ascii.spl\" ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "Reading spell file \"%s\""
-msgstr "¥¹¥Ú¥ë¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Ã†Ã‰Â¹Ã¾ÃƒÃ¦"
+msgstr "スペルファイル \"%s\" ã‚’読込中"
 
 msgid "E757: This does not look like a spell file"
-msgstr "E757: Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Ã¤Ê¤¤¤è¤¦¤Ç¤¹"
+msgstr "E757: ã‚¹ãƒšãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ãªã„よã†ã§ã™"
 
 msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: Â¸Ã…¤¤¥¹¥Ú¥ë¥Õ¥¡¥¤¥ë¤Ê¤Î¤Ç, Â¥Â¢Â¥ÃƒÂ¥Ã—¥Ç¡¼¥È¤·¤Æ¤¯¤À¤µ¤¤"
+msgstr "E771: å¤ã„スペルファイルãªã®ã§, ã‚¢ãƒƒãƒ—デートã—ã¦ãã ã•ã„"
 
 msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: Â¤Ã¨Â¤ÃªÂ¿Â·Â¤Â·Â¤Â¤Â¥Ã¡¼¥¸¥ç¥ó¤Î Vim ÃѤΥ¹¥Ú¥ë¥Õ¥¡¥¤¥ë¤Ç¤¹"
+msgstr "E772: ã‚ˆã‚Šæ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Vim ç”¨ã®ã‚¹ãƒšãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™"
 
 msgid "E770: Unsupported section in spell file"
-msgstr "E770: Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‹Â¥ÂµÂ¥Ã¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥»¥¯¥·¥ç¥ó¤¬¤¢¤ê¤Þ¤¹"
+msgstr "E770: ã‚¹ãƒšãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã«ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„セクションãŒã‚ã‚Šã¾ã™"
 
 #, c-format
 msgid "Warning: region %s not supported"
-msgstr "·Ù¹ð9: %s Â¤ÃˆÂ¤Â¤Â¤Â¦ÃˆÃ°Ã¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "警告9: %s ã¨ã„ã†ç¯„囲ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "Reading affix file %s ..."
-msgstr "affix Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s Â¤Ã²Ã†Ã‰Â¹Ã¾ÃƒÃ¦..."
+msgstr "affix ãƒ•ã‚¡ã‚¤ãƒ« %s ã‚’読込中..."
 
 #, c-format
 msgid "Conversion failure for word in %s line %d: %s"
-msgstr "%s (%d Â¹Ã”ÌÜ) Â¤ÃŽÃƒÂ±Â¸Ã¬Â¤Ã²ÃŠÃ‘´¹¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿: %s"
+msgstr "%s (%d è¡Œç›®) ã®å˜èªžã‚’変æ›ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s"
 
 #, c-format
 msgid "Conversion in %s not supported: from %s to %s"
-msgstr "%s Ã†Ã¢Â¤ÃŽÂ¼Â¡Â¤ÃŽÃŠÃ‘´¹¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: %s Â¤Â«Â¤Ã© %s Â¤Ã˜"
+msgstr "%s å†…ã®æ¬¡ã®å¤‰æ›ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“: %s ã‹ã‚‰ %s ã¸"
 
 #, c-format
 msgid "Conversion in %s not supported"
-msgstr "%s Ã†Ã¢Â¤ÃŽÃŠÃ‘´¹¤Ã¥µ¥Ã¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "%s å†…ã®å¤‰æ›ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr "%s Ã†Ã¢Â¤ÃŽ %d Â¹Ã”ÌܤΠFLAG Â¤Ã‹ÃŒÂµÂ¸ÃºÂ¤ÃŠÃƒÃ¤¬¤¢¤ê¤Þ¤¹: %s"
+msgstr "%s å†…ã® %d è¡Œç›®ã® FLAG ã«ç„¡åŠ¹ãªå€¤ãŒã‚ã‚Šã¾ã™: %s"
 
 #, c-format
 msgid "FLAG after using flags in %s line %d: %s"
-msgstr "%s Ã†Ã¢Â¤ÃŽ %d Â¹Ã”Ìܤ˥ե饰¤ÎÆó½Å»ÈÃѤ¬¤¢¤ê¤Þ¤¹: %s"
+msgstr "%s å†…ã® %d è¡Œç›®ã«ãƒ•ãƒ©ã‚°ã®äºŒé‡ä½¿ç”¨ãŒã‚ã‚Šã¾ã™: %s"
 
 #, c-format
 msgid ""
 "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
 "%d"
 msgstr ""
-"%s Â¤ÃŽ %d Â¹Ã”ÌܤΠPFX Â¹Ã ÃŒÃœÂ¤ÃŽÂ¸Ã¥Â¤ÃŽ COMPOUNDFORBIDFLAG Â¤ÃŽÃ„êµÃ¤Ã¸í¤Ã¤¿·ë²Ì¤òÀ¸¤¸¤ë"
-"¤³¤È¤¬¤¢¤ê¤Þ¤¹"
+"%s ã® %d è¡Œç›®ã® PFX é …ç›®ã®å¾Œã® COMPOUNDFORBIDFLAG ã®å®šç¾©ã¯èª¤ã£ãŸçµæžœã‚’生ã˜ã‚‹"
+"ã“ã¨ãŒã‚ã‚Šã¾ã™"
 
 #, c-format
 msgid ""
 "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
 "%d"
 msgstr ""
-"%s Â¤ÃŽ %d Â¹Ã”ÌܤΠPFX Â¹Ã ÃŒÃœÂ¤ÃŽÂ¸Ã¥Â¤ÃŽ COMPOUNDPERMITFLAG Â¤ÃŽÃ„êµÃ¤Ã¸í¤Ã¤¿·ë²Ì¤òÀ¸¤¸¤ë"
-"¤³¤È¤¬¤¢¤ê¤Þ¤¹"
+"%s ã® %d è¡Œç›®ã® PFX é …ç›®ã®å¾Œã® COMPOUNDPERMITFLAG ã®å®šç¾©ã¯èª¤ã£ãŸçµæžœã‚’生ã˜ã‚‹"
+"ã“ã¨ãŒã‚ã‚Šã¾ã™"
+
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "COMPOUNDRULES ã®å€¤ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™. ãƒ•ã‚¡ã‚¤ãƒ« %s ã® %d è¡Œç›®: %s"
 
 #, c-format
 msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠCOMPOUNDWORDMAX Â¤ÃŽÃƒÃ¤Ë¸í¤ê¤¬¤¢¤ê¤Þ¤¹: %s"
+msgstr "%s ã® %d è¡Œç›®ã® COMPOUNDWORDMAX ã®å€¤ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™: %s"
 
 #, c-format
 msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠCOMPOUNDMIN Â¤ÃŽÃƒÃ¤Ë¸í¤ê¤¬¤¢¤ê¤Þ¤¹: %s"
+msgstr "%s ã® %d è¡Œç›®ã® COMPOUNDMIN ã®å€¤ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™: %s"
 
 #, c-format
 msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠCOMPOUNDSYLMAX Â¤ÃŽÃƒÃ¤Ë¸í¤ê¤¬¤¢¤ê¤Þ¤¹: %s"
+msgstr "%s ã® %d è¡Œç›®ã® COMPOUNDSYLMAX ã®å€¤ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™: %s"
 
 #, c-format
 msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠCHECKCOMPOUNDPATTERN Â¤ÃŽÃƒÃ¤Ë¸í¤ê¤¬¤¢¤ê¤Þ¤¹: %s"
+msgstr "%s ã® %d è¡Œç›®ã® CHECKCOMPOUNDPATTERN ã®å€¤ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™: %s"
 
 #, c-format
 msgid "Different combining flag in continued affix block in %s line %d: %s"
 msgstr ""
-"%s Â¤ÃŽ %d Â¹Ã”ÌܤΠâ³ affix Â¥Ã–¥í¥Ã¥¯¤Î¥Õ¥é¥°¤ÎÃȹ礻¤Ë°ã¤¤¤¬¤¢¤ê¤Þ¤¹: %s"
+"%s ã® %d è¡Œç›®ã® é€£ç¶š affix ãƒ–ロックã®ãƒ•ãƒ©ã‚°ã®çµ„åˆã›ã«é•ã„ãŒã‚ã‚Šã¾ã™: %s"
 
 #, c-format
 msgid "Duplicate affix in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”Ìܤˠ½Åʣ¤·¤¿ affix Â¤Ã²Â¸Â¡Â½Ã¤·¤Þ¤·¤¿: %s"
+msgstr "%s ã® %d è¡Œç›®ã« é‡è¤‡ã—㟠affix ã‚’検出ã—ã¾ã—ãŸ: %s"
 
 #, c-format
 msgid ""
 "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
 "line %d: %s"
 msgstr ""
-"%s Â¤ÃŽ %d Â¹Ã”ÌܤΠaffix Â¤Ã BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
-"¤Ë»ÈÃѤ·¤Æ¤¯¤À¤µ¤¤: %s"
+"%s ã® %d è¡Œç›®ã® affix ã¯ BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
+"ã«ä½¿ç”¨ã—ã¦ãã ã•ã„: %s"
 
 #, c-format
 msgid "Expected Y or N in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤǤàY Â¤Â« N Â¤Â¬Ã‰Â¬ÃפǤ¹: %s"
+msgstr "%s ã® %d è¡Œç›®ã§ã¯ Y ã‹ N ãŒå¿…è¦ã§ã™: %s"
 
 #, c-format
 msgid "Broken condition in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠ¾ò·ï¤òõ¤ì¤Æ¤¤¤Þ¤¹: %s"
+msgstr "%s ã® %d è¡Œç›®ã® æ¡ä»¶ã¯å£Šã‚Œã¦ã„ã¾ã™: %s"
 
 #, c-format
 msgid "Expected REP(SAL) count in %s line %d"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤˤàREP(SAL) Â¤ÃŽÂ²Ã³Â¿Ã´Â¤Â¬Ã‰Â¬ÃפǤ¹"
+msgstr "%s ã® %d è¡Œç›®ã«ã¯ REP(SAL) ã®å›žæ•°ãŒå¿…è¦ã§ã™"
 
 #, c-format
 msgid "Expected MAP count in %s line %d"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤˤàMAP Â¤ÃŽÂ²Ã³Â¿Ã´Â¤Â¬Ã‰Â¬ÃפǤ¹"
+msgstr "%s ã® %d è¡Œç›®ã«ã¯ MAP ã®å›žæ•°ãŒå¿…è¦ã§ã™"
 
 #, c-format
 msgid "Duplicate character in MAP in %s line %d"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠMAP Â¤Ã‹Â½Ã…Ê£¤·¤¿Ê¸»ú¤¬¤¢¤ê¤Þ¤¹"
+msgstr "%s ã® %d è¡Œç›®ã® MAP ã«é‡è¤‡ã—ãŸæ–‡å­—ãŒã‚ã‚Šã¾ã™"
 
 #, c-format
 msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”Ìܤˠǧ¼±¤Ç¤­¤Ê¤¤¤«½Åʣ¤·¤¿¹àÌܤ¬¤¢¤ê¤Þ¤¹: %s"
+msgstr "%s ã® %d è¡Œç›®ã« èªè­˜ã§ããªã„ã‹é‡è¤‡ã—ãŸé …ç›®ãŒã‚ã‚Šã¾ã™: %s"
 
 #, c-format
 msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "%s Â¹Ã”ÌܤË FOL/LOW/UPP Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "%s è¡Œç›®ã« FOL/LOW/UPP ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr "SYLLABLE Â¤Â¬Â»Ã˜Ã„ꤵ¤ì¤Ê¤¤ COMPOUNDSYLMAX"
+msgstr "SYLLABLE ãŒæŒ‡å®šã•ã‚Œãªã„ COMPOUNDSYLMAX"
 
 msgid "Too many postponed prefixes"
-msgstr "ÃÙ±ä¸åÃÖ»Ò¤¬Â¿¤¹¤®¤Þ¤¹"
+msgstr "é…延後置å­ãŒå¤šéŽãŽã¾ã™"
 
 msgid "Too many compound flags"
-msgstr "Ê£¹ç¥Õ¥é¥°¤¬Â¿²á¤®¤Þ¤¹"
+msgstr "複åˆãƒ•ãƒ©ã‚°ãŒå¤šéŽãŽã¾ã™"
 
 msgid "Too many postponed prefixes and/or compound flags"
-msgstr "ÃÙ±ä¸åÃֻҠ¤È/¤â¤·¤¯¤àÊ£¹ç¥Õ¥é¥°¤¬Â¿¤¹¤®¤Þ¤¹"
+msgstr "é…延後置孠ã¨/ã‚‚ã—ã㯠複åˆãƒ•ãƒ©ã‚°ãŒå¤šéŽãŽã¾ã™"
 
 #, c-format
 msgid "Missing SOFO%s line in %s"
-msgstr "SOFO%s Â¹Ã”¤¬ %s Â¤Ã‹Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "SOFO%s è¡ŒãŒ %s ã«ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "Both SAL and SOFO lines in %s"
-msgstr "SAL¹Ô Â¤Ãˆ SOFO¹Ô Â¤Â¬ %s Â¤Ã‡ÃŽÂ¾ÃŠÃ½Â»Ã˜Ã„ꤵ¤ì¤Æ¤¤¤Þ¤¹"
+msgstr "SALè¡Œ ã¨ SOFOè¡Œ ãŒ %s ã§ä¸¡æ–¹æŒ‡å®šã•ã‚Œã¦ã„ã¾ã™"
 
 #, c-format
 msgid "Flag is not a number in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”¤Î Â¥Ã•Â¥Ã©Â¥Â°Â¤Â¬Â¿Ã´ÃƒÃ¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "%s ã® %d è¡Œã® ãƒ•ãƒ©ã‚°ãŒæ•°å€¤ã§ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "Illegal flag in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠ¥Õ¥é¥°¤¬ÉÔÀµ¤Ç¤¹: %s"
+msgstr "%s ã® %d è¡Œç›®ã® ãƒ•ãƒ©ã‚°ãŒä¸æ­£ã§ã™: %s"
 
 #, c-format
 msgid "%s value differs from what is used in another .aff file"
-msgstr "Ãà%s Â¤Ã¾¤Î .aff Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â»ÃˆÃѤµ¤ì¤¿¤Î¤È°Û¤Ê¤ê¤Þ¤¹"
+msgstr "値 %s ã¯ä»–ã® .aff ãƒ•ã‚¡ã‚¤ãƒ«ã§ä½¿ç”¨ã•ã‚ŒãŸã®ã¨ç•°ãªã‚Šã¾ã™"
 
 #, c-format
 msgid "Reading dictionary file %s ..."
-msgstr "¼­½ñ¥Õ¥¡¥¤¥ë %s Â¤Ã²Â¥Â¹Â¥Â­Â¥Ã£Â¥Ã³ÃƒÃ¦..."
+msgstr "辞書ファイル %s ã‚’スキャン中..."
 
 #, c-format
 msgid "E760: No word count in %s"
-msgstr "E760: %s Â¤Ã‹Â¤Ãñ¸ì¿ô¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E760: %s ã«ã¯å˜èªžæ•°ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "line %6d, word %6d - %s"
-msgstr "¹Ô %6d, ÃƒÂ±Â¸Ã¬ %6d - %s"
+msgstr "è¡Œ %6d, å˜èªž %6d - %s"
 
 #, c-format
 msgid "Duplicate word in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤǠ½Åʣñ¸ì¤¬¤ß¤Ä¤«¤ê¤Þ¤·¤¿: %s"
+msgstr "%s ã® %d è¡Œç›®ã§ é‡è¤‡å˜èªžãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "First duplicate word in %s line %d: %s"
-msgstr "½ÅÊ£¤Î¤¦¤ÃºÇ½é¤Îñ¸ì¤à%s Â¤ÃŽ %d Â¹Ã”ÌܤǤ¹: %s"
+msgstr "é‡è¤‡ã®ã†ã¡æœ€åˆã®å˜èªžã¯ %s ã® %d è¡Œç›®ã§ã™: %s"
 
 #, c-format
 msgid "%d duplicate word(s) in %s"
-msgstr "%d Â¸Ã„¤Îñ¸ì¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿ (%s Ã†Ã¢)"
+msgstr "%d å€‹ã®å˜èªžãŒè¦‹ã¤ã‹ã‚Šã¾ã—㟠(%s å†…)"
 
 #, c-format
 msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr "ÈóASCIIʸ»ú¤ò´Þ¤à %d Â¸Ã„¤Îñ¸ì¤ò̵»ë¤·¤Þ¤·¤¿ (%s Ã†Ã¢)"
+msgstr "éžASCII文字をå«ã‚€ %d å€‹ã®å˜èªžã‚’無視ã—ã¾ã—㟠(%s å†…)"
 
 #, c-format
 msgid "Reading word file %s ..."
-msgstr "ɸ½àÆþÎ䫤éÆɹþ¤ßÃæ %s ..."
+msgstr "標準入力ã‹ã‚‰èª­è¾¼ã¿ä¸­ %s ..."
 
 #, c-format
 msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠ½Åʣ¤·¤¿ /encoding= Â¹Ã”¤ò̵»ë¤·¤Þ¤·¤¿: %s"
+msgstr "%s ã® %d è¡Œç›®ã® é‡è¤‡ã—㟠/encoding= è¡Œã‚’無視ã—ã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠñ¸ì¤Î¸å¤Î /encoding= Â¹Ã”¤ò̵»ë¤·¤Þ¤·¤¿: %s"
+msgstr "%s ã® %d è¡Œç›®ã® å˜èªžã®å¾Œã® /encoding= è¡Œã‚’無視ã—ã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠ½Åʣ¤·¤¿ /regions= Â¹Ã”¤ò̵»ë¤·¤Þ¤·¤¿: %s"
+msgstr "%s ã® %d è¡Œç›®ã® é‡è¤‡ã—㟠/regions= è¡Œã‚’無視ã—ã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "Too many regions in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌÜ, ÃˆÃ°Ã»ØÄ꤬¿¤¹¤®¤Þ¤¹: %s"
+msgstr "%s ã® %d è¡Œç›®, ç¯„囲指定ãŒå¤šéŽãŽã¾ã™: %s"
 
 #, c-format
 msgid "/ line ignored in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”ÌܤΠ½Åʣ¤·¤¿ / Â¹Ã”¤ò̵»ë¤·¤Þ¤·¤¿: %s"
+msgstr "%s ã® %d è¡Œç›®ã® é‡è¤‡ã—㟠/ è¡Œã‚’無視ã—ã¾ã—ãŸ: %s"
 
 #, c-format
 msgid "Invalid region nr in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”Ìܠ̵¸ú¤Ê nr ÃŽÃŽÂ°Ã¨Â¤Ã‡Â¤Â¹: %s"
+msgstr "%s ã® %d è¡Œç›® ç„¡åŠ¹ãª nr é ˜åŸŸã§ã™: %s"
 
 #, c-format
 msgid "Unrecognized flags in %s line %d: %s"
-msgstr "%s Â¤ÃŽ %d Â¹Ã”Ìܠǧ¼±ÉÔǽ¤Ê¥Õ¥é¥°¤Ç¤¹: %s"
+msgstr "%s ã® %d è¡Œç›® èªè­˜ä¸èƒ½ãªãƒ•ãƒ©ã‚°ã§ã™: %s"
 
 #, c-format
 msgid "Ignored %d words with non-ASCII characters"
-msgstr "ÈóASCIIʸ»ú¤ò´Þ¤à %d Â¸Ã„¤Îñ¸ì¤ò̵»ë¤·¤Þ¤·¤¿"
+msgstr "éžASCII文字をå«ã‚€ %d å€‹ã®å˜èªžã‚’無視ã—ã¾ã—ãŸ"
+
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: ãƒ¡ãƒ¢ãƒªãŒè¶³ã‚Šãªã„ã®ã§ã€å˜èªžãƒªã‚¹ãƒˆã¯ä¸å®Œå…¨ã§ã™"
 
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "¥Î¡¼¥É %d Â¸Ã„(ô %d Â¸Ã„Ãæ) Â¤Ã²Â°ÂµÂ½ÃŒÂ¤Â·Â¤ÃžÂ¤Â·Â¤Â¿; Â»Ã„¤ê %d (%d%%)"
+msgstr "ノード %d å€‹(å…¨ %d å€‹ä¸­) ã‚’圧縮ã—ã¾ã—ãŸ; æ®‹ã‚Š %d (%d%%)"
 
 msgid "Reading back spell file..."
-msgstr "¥¹¥Ú¥ë¥Õ¥¡¥¤¥ë¤òµÕÆɹþÃæ"
+msgstr "スペルファイルを逆読込中"
 
 #.
 #. * Go through the trie of good words, soundfold each word and add it to
 #. * the soundfold trie.
 #.
 msgid "Performing soundfolding..."
-msgstr "²»À¼¾ö¹þ¤ß¤ò¼Â¹ÔÃæ..."
+msgstr "音声畳込ã¿ã‚’実行中..."
 
 #, c-format
 msgid "Number of words after soundfolding: %ld"
-msgstr "²»À¼¾ö¹þ¤ß¸å¤ÎÃíñ¸ì¿ô: %ld"
+msgstr "音声畳込ã¿å¾Œã®ç·å˜èªžæ•°: %ld"
 
 #, c-format
 msgid "Total number of words: %d"
-msgstr "Ãíñ¸ì¿ô: %d"
+msgstr "ç·å˜èªžæ•°: %d"
 
 #, c-format
 msgid "Writing suggestion file %s ..."
-msgstr "½¤Àµ¸õÊä¥Õ¥¡¥¤¥ë \"%s\" Â¤Ã²Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦..."
+msgstr "修正候補ファイル \"%s\" ã‚’書込ã¿ä¸­..."
 
 #, c-format
 msgid "Estimated runtime memory use: %d bytes"
-msgstr "¿äÄê¥á¥â¥ê»ÈÃÑÎÌ: %d Â¥Ã¥¤¥È"
+msgstr "推定メモリ使用é‡: %d ãƒã‚¤ãƒˆ"
 
 msgid "E751: Output file name must not have region name"
-msgstr "E751: Â½ÃÃŽÃ¥Õ¥¡¥¤¥ë̾¤Ë¤ÃÈðÃ̾¤ò´Þ¤á¤é¤ì¤Þ¤»¤ó"
+msgstr "E751: å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«åã«ã¯ç¯„囲åã‚’å«ã‚られã¾ã›ã‚“"
 
 msgid "E754: Only up to 8 regions supported"
-msgstr "E754: ÃˆÃ°Ã¤à8 Â¸Ã„¤Þ¤Ç¤·¤«¥µ¥Ã¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E754: ç¯„囲㯠8 å€‹ã¾ã§ã—ã‹ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "E755: Invalid region in %s"
-msgstr "E755: ÃŒÂµÂ¸ÃºÂ¤ÃŠÃˆÃ°Ã¤Ç¤¹: %s"
+msgstr "E755: ç„¡åŠ¹ãªç¯„囲ã§ã™: %s"
 
 msgid "Warning: both compounding and NOBREAK specified"
-msgstr "·Ù¹ð: ÃŠÂ£Â¹Ã§Â¥Ã•Â¥Ã©Â¥Â°Â¤Ãˆ NOBREAK Â¤Â¬ÃŽÂ¾ÃŠÃ½Â¤ÃˆÂ¤Ã¢Â»Ã˜Ã„ꤵ¤ì¤Þ¤·¤¿"
+msgstr "警告: è¤‡åˆãƒ•ãƒ©ã‚°ã¨ NOBREAK ãŒä¸¡æ–¹ã¨ã‚‚指定ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "Writing spell file %s ..."
-msgstr "¥¹¥Ú¥ë¥Õ¥¡¥¤¥ë %s Â¤Ã²Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦..."
+msgstr "スペルファイル %s ã‚’書込ã¿ä¸­..."
 
 msgid "Done!"
-msgstr "¼Â¹Ô¤·¤Þ¤·¤¿!"
+msgstr "実行ã—ã¾ã—ãŸ!"
 
 #, c-format
 msgid "E765: 'spellfile' does not have %ld entries"
-msgstr "E765: 'spellfile' Â¤Ã‹Â¤Ã %ld Â¸Ã„¤Î¥¨¥ó¥È¥ê¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E765: 'spellfile' ã«ã¯ %ld å€‹ã®ã‚¨ãƒ³ãƒˆãƒªã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "Word removed from %s"
-msgstr "%s Â¤Â«Â¤Ã©ÃƒÂ±Â¸Ã¬Â¤Â¬ÂºÃ¯Â½Ã¼Â¤ÂµÂ¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "%s ã‹ã‚‰å˜èªžãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "Word added to %s"
-msgstr "%s Â¤Ã‹ÃƒÂ±Â¸Ã¬Â¤Â¬Ã„ɲ䵤ì¤Þ¤·¤¿"
+msgstr "%s ã«å˜èªžãŒè¿½åŠ ã•ã‚Œã¾ã—ãŸ"
 
 msgid "E763: Word characters differ between spell files"
-msgstr "E763: ÃƒÂ±Â¸Ã¬Â¤ÃŽÃŠÂ¸Â»ÃºÂ¤Â¬Â¥Â¹Â¥ÃšÂ¥Ã«Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃˆÂ°Ã›Â¤ÃŠÂ¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E763: å˜èªžã®æ–‡å­—ãŒã‚¹ãƒšãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã¨ç•°ãªã‚Šã¾ã™"
 
 msgid "Sorry, no suggestions"
-msgstr "»ÄÇ°¤Ç¤¹¤¬, Â½Â¤Ã€ÂµÂ¸ÃµÃŠÃ¤Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "残念ã§ã™ãŒ, ä¿®æ­£å€™è£œã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "Sorry, only %ld suggestions"
-msgstr "»ÄÇ°¤Ç¤¹¤¬, Â½Â¤Ã€ÂµÂ¸ÃµÃŠÃ¤Â¤Ã %ld Â¸Ã„¤·¤«¤¢¤ê¤Þ¤»¤ó"
+msgstr "残念ã§ã™ãŒ, ä¿®æ­£å€™è£œã¯ %ld å€‹ã—ã‹ã‚ã‚Šã¾ã›ã‚“"
 
 #. for when 'cmdheight' > 1
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
-msgstr "\"%.*s\" Â¤Ã²Â¼Â¡Â¤Ã˜ÃŠÃ‘´¹:"
+msgstr "\"%.*s\" ã‚’次ã¸å¤‰æ›:"
 
 #, c-format
 msgid " < \"%.*s\""
 msgstr " < \"%.*s\""
 
 msgid "E752: No previous spell replacement"
-msgstr "E752: Â¥Â¹Â¥ÃšÂ¥Ã«ÃƒÃ–´¹¤¬¤Þ¤À¼Â¹Ô¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E752: ã‚¹ãƒšãƒ«ç½®æ›ãŒã¾ã å®Ÿè¡Œã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "E753: Not found: %s"
-msgstr "E753: Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó: %s"
+msgstr "E753: è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E778: This does not look like a .sug file: %s"
-msgstr "E778: .sug Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Ã¤Ê¤¤¤è¤¦¤Ç¤¹: %s"
+msgstr "E778: .sug ãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ãªã„よã†ã§ã™: %s"
 
 #, c-format
 msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr "E779: Â¸Ã…¤¤ .sug Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŠÂ¤ÃŽÂ¤Ã‡, Â¥Â¢Â¥ÃƒÂ¥Ã—¥Ç¡¼¥È¤·¤Æ¤¯¤À¤µ¤¤: %s"
+msgstr "E779: å¤ã„ .sug ãƒ•ã‚¡ã‚¤ãƒ«ãªã®ã§, ã‚¢ãƒƒãƒ—デートã—ã¦ãã ã•ã„: %s"
 
 #, c-format
 msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr "E780: Â¤Ã¨Â¤ÃªÂ¿Â·Â¤Â·Â¤Â¤Â¥Ã¡¼¥¸¥ç¥ó¤Î Vim ÃѤΠ.sug Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã‡Â¤Â¹: %s"
+msgstr "E780: ã‚ˆã‚Šæ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã® Vim ç”¨ã® .sug ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™: %s"
 
 #, c-format
 msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr "E781: .sug Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬ .spl Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃˆÂ°Ã¬ÃƒÃ—¤·¤Þ¤»¤ó: %s"
+msgstr "E781: .sug ãƒ•ã‚¡ã‚¤ãƒ«ãŒ .spl ãƒ•ã‚¡ã‚¤ãƒ«ã¨ä¸€è‡´ã—ã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E782: error while reading .sug file: %s"
-msgstr "E782: .sug Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃ†Ã‰Â¹Ã¾ÃƒÃ¦Â¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬ÃˆÂ¯Ã€Â¸Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿: %s"
+msgstr "E782: .sug ãƒ•ã‚¡ã‚¤ãƒ«ã®èª­è¾¼ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: %s"
 
 #. This should have been checked when generating the .spl
 #. * file.
 msgid "E783: duplicate char in MAP entry"
-msgstr "E783: MAP Â¥Â¨Â¥Ã³Â¥ÃˆÂ¥ÃªÂ¤Ã‹Â½Ã…ʣʸ»ú¤¬Â¸ºß¤·¤Þ¤¹"
+msgstr "E783: MAP ã‚¨ãƒ³ãƒˆãƒªã«é‡è¤‡æ–‡å­—ãŒå­˜åœ¨ã—ã¾ã™"
+
+msgid "No Syntax items defined for this buffer"
+msgstr "ã“ã®ãƒãƒƒãƒ•ã‚¡ã«å®šç¾©ã•ã‚ŒãŸæ§‹æ–‡è¦ç´ ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E390: Illegal argument: %s"
-msgstr "E390: Ã‰Ã”Àµ¤Ê°ú¿ô¤Ç¤¹: %s"
+msgstr "E390: ä¸æ­£ãªå¼•æ•°ã§ã™: %s"
 
 #, c-format
 msgid "E391: No such syntax cluster: %s"
-msgstr "E391: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÂ¹Â½ÃŠÂ¸Â¥Â¯Â¥Ã©Â¥Â¹Â¥Â¿Â¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
-
-msgid "No Syntax items defined for this buffer"
-msgstr "¤³¤Î¥Ã¥Ã¥Õ¥¡¤ËÄêµÃ¤µ¤ì¤¿¹½Ê¸Ã×ÃǤ䢤ê¤Þ¤»¤ó"
+msgstr "E391: ãã®ã‚ˆã†ãªæ§‹æ–‡ã‚¯ãƒ©ã‚¹ã‚¿ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 msgid "syncing on C-style comments"
-msgstr "C¸À¸ìÉ÷¥³¥á¥ó¥È¤«¤éƱ´üÃæ"
+msgstr "C言語風コメントã‹ã‚‰åŒæœŸä¸­"
 
 msgid "no syncing"
-msgstr "ÈóƱ´ü"
+msgstr "éžåŒæœŸ"
 
 msgid "syncing starts "
-msgstr "Ʊ´ü³«»à"
+msgstr "åŒæœŸé–‹å§‹ "
 
 msgid " lines before top line"
-msgstr " Â¹Ã”ð(¥È¥Ã¥×¹Ô¤è¤ê¤â)"
+msgstr " è¡Œå‰(トップ行よりも)"
 
 msgid ""
 "\n"
 "--- Syntax sync items ---"
 msgstr ""
 "\n"
-"--- Â¹Â½ÃŠÂ¸Ã†Â±Â´Ã¼Ã×ÃÇ ---"
+"--- æ§‹æ–‡åŒæœŸè¦ç´  ---"
 
 msgid ""
 "\n"
 "syncing on items"
 msgstr ""
 "\n"
-"Ã×ÃǾå¤ÇƱ´üÃæ"
+"è¦ç´ ä¸Šã§åŒæœŸä¸­"
 
 msgid ""
 "\n"
 "--- Syntax items ---"
 msgstr ""
 "\n"
-"--- Â¹Â½ÃŠÂ¸Ã×ÃÇ ---"
+"--- æ§‹æ–‡è¦ç´  ---"
 
 #, c-format
 msgid "E392: No such syntax cluster: %s"
-msgstr "E392: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÂ¹Â½ÃŠÂ¸Â¥Â¯Â¥Ã©Â¥Â¹Â¥Â¿Â¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E392: ãã®ã‚ˆã†ãªæ§‹æ–‡ã‚¯ãƒ©ã‚¹ã‚¿ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 msgid "minimal "
-msgstr "minimal"
+msgstr "minimal "
 
 msgid "maximal "
-msgstr "maximal"
+msgstr "maximal "
 
 msgid "; match "
-msgstr "; Â³ÂºÃ…ö "
+msgstr "; è©²å½“ "
 
 msgid " line breaks"
-msgstr " Â¸Ã„¤Î²þ¹Ô"
+msgstr " å€‹ã®æ”¹è¡Œ"
 
 msgid "E395: contains argument not accepted here"
-msgstr "E395: Â¤Â³Â¤ÃŽÂ¾Ã¬Â½ÃªÂ¤Ã‡Â¤Ã°ú¿ôcontains¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E395: ã“ã®å ´æ‰€ã§ã¯å¼•æ•°containsã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: Â¤Â³Â¤ÃŽÂ¾Ã¬Â½ÃªÂ¤Ã‡Â¤Ã°ú¿ôcontainedin¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgid "E844: invalid cchar value"
+msgstr "E844: ç„¡åŠ¹ãªccharã®å€¤ã§ã™"
 
 msgid "E393: group[t]here not accepted here"
-msgstr "E393: Â¤Â³Â¤Â³Â¤Ã‡Â¤Ã¥°¥ë¡¼¥×¤Ãµö²Ä¤µ¤ì¤Þ¤»¤ó"
+msgstr "E393: ã“ã“ã§ã¯ã‚°ãƒ«ãƒ¼ãƒ—ã¯è¨±å¯ã•ã‚Œã¾ã›ã‚“"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
-msgstr "E394: %s Â¤ÃŽÃˆÃ°ÃÃ×ÃǤ¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó"
+msgstr "E394: %s ã®ç¯„囲è¦ç´ ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "E397: Filename required"
-msgstr "E397: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Â¬Ã‰Â¬ÃפǤ¹"
+msgstr "E397: ãƒ•ã‚¡ã‚¤ãƒ«åãŒå¿…è¦ã§ã™"
+
+msgid "E847: Too many syntax includes"
+msgstr "E847: æ§‹æ–‡ã®å–ã‚Šè¾¼ã¿(include)ãŒå¤šéŽãŽã¾ã™"
 
 #, c-format
 msgid "E789: Missing ']': %s"
-msgstr "E789: ']' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E789: ']' ãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
-msgstr "E398: '=' Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E398: '=' ãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: Â°ÃºÂ¿Ã´Â¤Â¬Ã‚­¤ê¤Þ¤»¤ó: Â¹Â½ÃŠÂ¸ÃˆÃ°à%s"
+msgstr "E399: å¼•æ•°ãŒè¶³ã‚Šã¾ã›ã‚“: æ§‹æ–‡ç¯„囲 %s"
+
+msgid "E848: Too many syntax clusters"
+msgstr "E848: æ§‹æ–‡ã‚¯ãƒ©ã‚¹ã‚¿ãŒå¤šéŽãŽã¾ã™"
 
 msgid "E400: No cluster specified"
-msgstr "E400: Â¥Â¯Â¥Ã©Â¥Â¹Â¥Â¿Â¤Â¬Â»Ã˜Ã„ꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E400: ã‚¯ãƒ©ã‚¹ã‚¿ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: Â¥Ã‘¥¿¡¼¥ó¶èÀڤ꤬¤ß¤Ä¤«¤ê¤Þ¤»¤ó: %s"
+msgstr "E401: ãƒ‘ターン区切りãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E402: Garbage after pattern: %s"
-msgstr "E402: Â¥Ã‘¥¿¡¼¥ó¤Î¤¢¤È¤Ë¥´¥ß¤¬¤¢¤ê¤Þ¤¹: %s"
+msgstr "E402: ãƒ‘ターンã®ã‚ã¨ã«ã‚´ãƒŸãŒã‚ã‚Šã¾ã™: %s"
 
 msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr "E403: Â¹Â½ÃŠÂ¸Ã†Â±Â´Ã¼: Ã¢Â³¹Ô¥Ñ¥¿¡¼¥ó¤¬2ÅÙ»ØÄꤵ¤ì¤Þ¤·¤¿"
+msgstr "E403: æ§‹æ–‡åŒæœŸ: é€£ç¶šè¡Œãƒ‘ターンãŒ2度指定ã•ã‚Œã¾ã—ãŸ"
 
 #, c-format
 msgid "E404: Illegal arguments: %s"
-msgstr "E404: Ã‰Ã”Àµ¤Ê°ú¿ô¤Ç¤¹: %s"
+msgstr "E404: ä¸æ­£ãªå¼•æ•°ã§ã™: %s"
 
 #, c-format
 msgid "E405: Missing equal sign: %s"
-msgstr "E405: Ã…ù¤·¤¤ sign Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E405: ç­‰å·ãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E406: Empty argument: %s"
-msgstr "E406: Â¶ÃµÂ¤ÃŽÂ°ÃºÂ¿Ã´: %s"
+msgstr "E406: ç©ºã®å¼•æ•°: %s"
 
 #, c-format
 msgid "E407: %s not allowed here"
-msgstr "E407: %s Â¤Ã¥³¥³¤Ç¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E407: %s ã¯ã‚³ã‚³ã§ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 #, c-format
 msgid "E408: %s must be first in contains list"
-msgstr "E408: %s Â¤ÃÆâÃƥꥹ¥È¤ÎÀèƬ¤Ç¤Ê¤±¤ì¤Ã¤Ê¤é¤Ê¤¤"
+msgstr "E408: %s ã¯å†…容リストã®å…ˆé ­ã§ãªã‘ã‚Œã°ãªã‚‰ãªã„"
 
 #, c-format
 msgid "E409: Unknown group name: %s"
-msgstr "E409: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥Â°Â¥Ã«Â¡Â¼Â¥Ã—̾: %s"
+msgstr "E409: æœªçŸ¥ã®ã‚°ãƒ«ãƒ¼ãƒ—å: %s"
 
 #, c-format
 msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: ÃŒÂµÂ¸ÃºÂ¤ÃŠ :syntax Â¤ÃŽÂ¥ÂµÂ¥Ã–¥³¥Þ¥ó¥É: %s"
+msgstr "E410: ç„¡åŠ¹ãª :syntax ã®ã‚µãƒ–コマンド: %s"
+
+msgid ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+msgstr ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
 
 msgid "E679: recursive loop loading syncolor.vim"
-msgstr "E679: syncolor.vim Â¤ÃŽÂºÃ†ÂµÂ¢Â¸Ã†Â¤Ã“½Ã¤·¤ò¸¡½Ã¤·¤Þ¤·¤¿"
+msgstr "E679: syncolor.vim ã®å†å¸°å‘¼ã³å‡ºã—を検出ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "E411: highlight group not found: %s"
-msgstr "E411: Â¥Ã¥¤¥é¥¤¥È¥°¥ë¡¼¥×¤¬¤ß¤Ä¤«¤ê¤Þ¤»¤ó: %s"
+msgstr "E411: ãƒã‚¤ãƒ©ã‚¤ãƒˆã‚°ãƒ«ãƒ¼ãƒ—ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Â°ÃºÂ¿Ã´Â¤Â¬Â½Â¼ÃŠÂ¬Â¤Ã‡Â¤Ã¤Ê¤¤: \":highlight link %s\""
+msgstr "E412: å¼•æ•°ãŒå……分ã§ã¯ãªã„: \":highlight link %s\""
 
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Â°ÃºÂ¿Ã´Â¤Â¬Ã‚¿²á¤®¤Þ¤¹: \":highlight link %s\""
+msgstr "E413: å¼•æ•°ãŒå¤šéŽãŽã¾ã™: \":highlight link %s\""
 
 msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: Â¥Â°Â¥Ã«Â¡Â¼Â¥Ã—¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤Î¤Ç¥Ã¥¤¥é¥¤¥È¥ê¥ó¥¯¤Ã̵»ë¤µ¤ì¤Þ¤¹"
+msgstr "E414: ã‚°ãƒ«ãƒ¼ãƒ—ãŒè¨­å®šã•ã‚Œã¦ã„ã‚‹ã®ã§ãƒã‚¤ãƒ©ã‚¤ãƒˆãƒªãƒ³ã‚¯ã¯ç„¡è¦–ã•ã‚Œã¾ã™"
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
-msgstr "E415: Ã½´ü¤»¤ÌƱ¤¸ sign Â¤Ã‡Â¤Â¹: %s"
+msgstr "E415: äºˆæœŸã›ã¬ç­‰å·ã§ã™: %s"
 
 #, c-format
 msgid "E416: missing equal sign: %s"
-msgstr "E416: Ã†Â±Â¤Â¸ sign Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E416: ç­‰å·ãŒãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E417: missing argument: %s"
-msgstr "E417: Â°ÃºÂ¿Ã´Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E417: å¼•æ•°ãŒã‚ã‚Šã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E418: Illegal value: %s"
-msgstr "E418: Ã‰Ã”Àµ¤ÊÃäǤ¹: %s"
+msgstr "E418: ä¸æ­£ãªå€¤ã§ã™: %s"
 
 msgid "E419: FG color unknown"
-msgstr "E419: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÃ°·Ê¿§¤Ç¤¹"
+msgstr "E419: æœªçŸ¥ã®å‰æ™¯è‰²ã§ã™"
 
 msgid "E420: BG color unknown"
-msgstr "E420: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÃ‡Ã˜Â·ÃŠÂ¿Â§Â¤Ã‡Â¤Â¹"
+msgstr "E420: æœªçŸ¥ã®èƒŒæ™¯è‰²ã§ã™"
 
 #, c-format
 msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: Â¥Â«Â¥Ã©Â¡Â¼ÃŒÂ¾Â¤Ã¤ÃˆÃ–¹æ¤òǧ¼±¤Ç¤­¤Þ¤»¤ó: %s"
+msgstr "E421: ã‚«ãƒ©ãƒ¼åや番å·ã‚’èªè­˜ã§ãã¾ã›ã‚“: %s"
 
 #, c-format
 msgid "E422: terminal code too long: %s"
-msgstr "E422: Â½ÂªÃƒÂ¼Â¥Â³Â¡Â¼Â¥Ã‰Â¤Â¬Ã„¹²á¤®¤Þ¤¹: %s"
+msgstr "E422: çµ‚端コードãŒé•·éŽãŽã¾ã™: %s"
 
 #, c-format
 msgid "E423: Illegal argument: %s"
-msgstr "E423: Ã‰Ã”Àµ¤Ê°ú¿ô¤Ç¤¹: %s"
+msgstr "E423: ä¸æ­£ãªå¼•æ•°ã§ã™: %s"
 
 msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: Ã‚¿¤¯¤Î°Û¤Ê¤ë¥Ã¥¤¥é¥¤¥È°À­¤¬»È¤ï¤ì²á¤®¤Æ¤¤¤Þ¤¹"
+msgstr "E424: å¤šãã®ç•°ãªã‚‹ãƒã‚¤ãƒ©ã‚¤ãƒˆå±žæ€§ãŒä½¿ã‚ã‚ŒéŽãŽã¦ã„ã¾ã™"
 
 msgid "E669: Unprintable character in group name"
-msgstr "E669: Â¥Â°Â¥Ã«Â¡Â¼Â¥Ã—̾¤Ë°õºþÉÔ²Äǽ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹"
+msgstr "E669: ã‚°ãƒ«ãƒ¼ãƒ—åã«å°åˆ·ä¸å¯èƒ½ãªæ–‡å­—ãŒã‚ã‚Šã¾ã™"
 
 msgid "W18: Invalid character in group name"
-msgstr "W18: Â¥Â°Â¥Ã«Â¡Â¼Â¥Ã—̾¤ËÉÔÀµ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹"
+msgstr "W18: ã‚°ãƒ«ãƒ¼ãƒ—åã«ä¸æ­£ãªæ–‡å­—ãŒã‚ã‚Šã¾ã™"
+
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: ãƒã‚¤ãƒ©ã‚¤ãƒˆã¨æ§‹æ–‡ã‚°ãƒ«ãƒ¼ãƒ—ãŒå¤šéŽãŽã¾ã™"
 
 msgid "E555: at bottom of tag stack"
-msgstr "E555: Â¥Â¿Â¥Â°Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤ÃŽÃ‹Ã¶ÃˆÃ¸Â¤Ã‡Â¤Â¹"
+msgstr "E555: ã‚¿ã‚°ã‚¹ã‚¿ãƒƒã‚¯ã®æœ«å°¾ã§ã™"
 
 msgid "E556: at top of tag stack"
-msgstr "E556: Â¥Â¿Â¥Â°Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤ÃŽÃ€Ã¨Ã†Â¬Â¤Ã‡Â¤Â¹"
+msgstr "E556: ã‚¿ã‚°ã‚¹ã‚¿ãƒƒã‚¯ã®å…ˆé ­ã§ã™"
 
 msgid "E425: Cannot go before first matching tag"
-msgstr "E425: ÂºÃ‡Â½Ã©Â¤ÃŽÂ³ÂºÃ…ö¥¿¥°¤òĶ¤¨¤ÆÌá¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E425: æœ€åˆã®è©²å½“タグを超ãˆã¦æˆ»ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "E426: tag not found: %s"
-msgstr "E426: Â¥Â¿Â¥Â°Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó: %s"
+msgstr "E426: ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“: %s"
 
 msgid "  # pri kind tag"
 msgstr "  # pri kind tag"
 
 msgid "file\n"
-msgstr "¥Õ¥¡¥¤¥ë\n"
+msgstr "ファイル\n"
 
 msgid "E427: There is only one matching tag"
-msgstr "E427: Â³ÂºÃ…ö¥¿¥°¤¬1¤Ä¤À¤±¤·¤«¤¢¤ê¤Þ¤»¤ó"
+msgstr "E427: è©²å½“ã‚¿ã‚°ãŒ1ã¤ã ã‘ã—ã‹ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: ÂºÃ‡Â¸Ã¥Â¤Ã‹Â³ÂºÃ…ö¤¹¤ë¥¿¥°¤òĶ¤¨¤Æ¿Ê¤à¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E428: æœ€å¾Œã«è©²å½“ã™ã‚‹ã‚¿ã‚°ã‚’超ãˆã¦é€²ã‚€ã“ã¨ã¯ã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "File \"%s\" does not exist"
-msgstr "¥Õ¥¡¥¤¥ë \"%s\" Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "ファイル \"%s\" ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #. Give an indication of the number of matching tags
 #, c-format
 msgid "tag %d of %d%s"
-msgstr "¥¿¥° %d (ô%d%s)"
+msgstr "ã‚¿ã‚° %d (å…¨%d%s)"
 
 msgid " or more"
-msgstr " Â¤Â«Â¤Â½Â¤Ã¬Â°ÃŠÂ¾Ã¥"
+msgstr " ã‹ãれ以上"
 
 msgid "  Using tag with different case!"
-msgstr "  Â¥Â¿Â¥Â°Â¤Ã²Â°Ã›Â¤ÃŠÂ¤Ã«case¤Ç»ÈÃѤ·¤Þ¤¹!"
+msgstr "  ã‚¿ã‚°ã‚’ç•°ãªã‚‹caseã§ä½¿ç”¨ã—ã¾ã™!"
 
 #, c-format
 msgid "E429: File \"%s\" does not exist"
-msgstr "E429: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E429: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #. Highlight title
 msgid ""
@@ -5365,59 +5631,66 @@ msgid ""
 "  # TO tag         FROM line  in file/text"
 msgstr ""
 "\n"
-"  # TO Â¥Â¿Â¥Â°        FROM Â¹Ã”    in file/text"
+"  # TO ã‚¿ã‚°        FROM è¡Œ    in file/text"
 
 #, c-format
 msgid "Searching tags file %s"
-msgstr "¥¿¥°¥Õ¥¡¥¤¥ë %s Â¤Ã²Â¸Â¡ÂºÃ·ÃƒÃ¦"
+msgstr "タグファイル %s ã‚’検索中"
 
 #, c-format
 msgid "E430: Tag file path truncated for %s\n"
-msgstr "E430: Â¥Â¿Â¥Â°Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÂ¥Ã‘¥¹¤¬ %s Â¤Ã‹Ã€ÃšÂ¤ÃªÂ¼ÃŽÂ¤Ã†Â¤Ã©Â¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿\n"
+msgstr "E430: ã‚¿ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ‘ス㌠%s ã«åˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã—ãŸ\n"
+
+msgid "Ignoring long line in tags file"
+msgstr "タグファイル内ã®é•·ã„行を無視ã—ã¾ã™"
 
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: Â¥Â¿Â¥Â°Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤ÃŽÂ¥Ã•Â¥Â©Â¡Â¼Â¥ÃžÂ¥ÃƒÂ¥ÃˆÂ¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E431: ã‚¿ã‚°ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã™"
 
 #, c-format
 msgid "Before byte %ld"
-msgstr "ľÃ°¤Î %ld Â¥Ã¥¤¥È"
+msgstr "ç›´å‰ã® %ld ãƒã‚¤ãƒˆ"
 
 #, c-format
 msgid "E432: Tags file not sorted: %s"
-msgstr "E432: Â¥Â¿Â¥Â°Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¥Â½Â¡Â¼Â¥ÃˆÂ¤ÂµÂ¤Ã¬Â¤Ã†Â¤Â¤Â¤ÃžÂ¤Â»Â¤Ã³: %s"
+msgstr "E432: ã‚¿ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚½ãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“: %s"
 
 #. never opened any tags file
 msgid "E433: No tags file"
-msgstr "E433: Â¥Â¿Â¥Â°Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E433: ã‚¿ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E434: Can't find tag pattern"
-msgstr "E434: Â¥Â¿Â¥Â°Â¥Ã‘¥¿¡¼¥ó¤ò¤ß¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+msgstr "E434: ã‚¿ã‚°ãƒ‘ターンを見ã¤ã‘られã¾ã›ã‚“"
 
 msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: Â¥Â¿Â¥Â°Â¤Ã²Â¤ÃŸÂ¤Ã„¤±¤é¤ì¤Ê¤¤¤Î¤Çñ¤Ë¿ä¬¤·¤Þ¤¹!"
+msgstr "E435: ã‚¿ã‚°ã‚’見ã¤ã‘られãªã„ã®ã§å˜ã«æŽ¨æ¸¬ã—ã¾ã™!"
+
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "é‡è¤‡ã—ãŸãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰å: %s"
 
 msgid "' not known. Available builtin terminals are:"
-msgstr "' Â¤Ã̤ÃΤǤ¹. Â¸Â½Â¹Ã”¤ÎÃȤ߹þ¤ßüËö¤Ã¼¡¤Î¤È¤ª¤ê¤Ç¤¹:"
+msgstr "' ã¯æœªçŸ¥ã§ã™. ç¾è¡Œã®çµ„ã¿è¾¼ã¿ç«¯æœ«ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™:"
 
 msgid "defaulting to '"
-msgstr "¾ÊάÃäò¼¡¤Î¤è¤¦¤ËÀßÄꤷ¤Þ¤¹ '"
+msgstr "çœç•¥å€¤ã‚’次ã®ã‚ˆã†ã«è¨­å®šã—ã¾ã™ '"
 
 msgid "E557: Cannot open termcap file"
-msgstr "E557: termcap¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó"
+msgstr "E557: termcapファイルを開ã‘ã¾ã›ã‚“"
 
 msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: terminfo¤ËüËö¥¨¥ó¥È¥ê¤ò¤ß¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+msgstr "E558: terminfoã«ç«¯æœ«ã‚¨ãƒ³ãƒˆãƒªã‚’見ã¤ã‘られã¾ã›ã‚“"
 
 msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: termcap¤ËüËö¥¨¥ó¥È¥ê¤ò¤ß¤Ä¤±¤é¤ì¤Þ¤»¤ó"
+msgstr "E559: termcapã«ç«¯æœ«ã‚¨ãƒ³ãƒˆãƒªã‚’見ã¤ã‘られã¾ã›ã‚“"
 
 #, c-format
 msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: termcap¤Ë \"%s\" Â¤ÃŽÂ¥Â¨Â¥Ã³Â¥ÃˆÂ¥ÃªÂ¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E436: termcapã« \"%s\" ã®ã‚¨ãƒ³ãƒˆãƒªãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: ÃƒÂ¼Ã‹Ã¶Â¤Ã‹ \"cm\" ÂµÂ¡Ã‡Â½Â¤Â¬Ã‰Â¬ÃפǤ¹"
+msgstr "E437: ç«¯æœ«ã« \"cm\" æ©Ÿèƒ½ãŒå¿…è¦ã§ã™"
 
 #. Highlight title
 msgid ""
@@ -5425,77 +5698,154 @@ msgid ""
 "--- Terminal keys ---"
 msgstr ""
 "\n"
-"--- ÃƒÂ¼Ã‹Ã¶Â¥Â­Â¡Â¼ ---"
+"--- Ã§Â«Â¯Ã¦\9c«ã\82­ã\83¼ ---"
 
 msgid "new shell started\n"
-msgstr "¿·¤·¤¤¥·¥§¥ë¤òµ¯Æ°¤·¤Þ¤¹\n"
+msgstr "æ–°ã—ã„シェルを起動ã—ã¾ã™\n"
 
 msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: Ã†Ã¾ÃŽÃ¤òÆɹþ¤ßÃæ¤Î¥¨¥é¡¼¤Ë¤è¤ê½ªÎ»¤·¤Þ¤¹...\n"
+msgstr "Vim: å…¥åŠ›ã‚’読込ã¿ä¸­ã®ã‚¨ãƒ©ãƒ¼ã«ã‚ˆã‚Šçµ‚了ã—ã¾ã™...\n"
+
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "空ã®é¸æŠžé ˜åŸŸã®ã‹ã‚ã‚Šã«CUT_BUFFER0ãŒä½¿ç”¨ã•ã‚Œã¾ã—ãŸ"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: äºˆæœŸã›ãšè¡Œã‚«ã‚¦ãƒ³ãƒˆãŒå¤‰ã‚ã‚Šã¾ã—ãŸ"
 
 #. must display the prompt
 msgid "No undo possible; continue anyway"
-msgstr "²Äǽ¤Ê¥¢¥ó¥É¥¥¤Ã¤¢¤ê¤Þ¤»¤ó: Â¤ÃˆÂ¤ÃªÂ¤Â¢Â¤Â¨Â¤ÂºÃ‚³¤±¤Þ¤¹"
+msgstr "å¯èƒ½ãªã‚¢ãƒ³ãƒ‰ã‚¥ã¯ã‚ã‚Šã¾ã›ã‚“: ã¨ã‚Šã‚ãˆãšç¶šã‘ã¾ã™"
+
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: æ›¸è¾¼ã¿ç”¨ã«ã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é–‹ã‘ã¾ã›ã‚“: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: ã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ãŒå£Šã‚Œã¦ã„ã¾ã™ (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "'undodir'ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ã‚’書ãè¾¼ã‚ã¾ã›ã‚“"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "アンドゥファイルã¨ã—ã¦èª­ã¿è¾¼ã‚ãªã„ã®ã§ä¸Šæ›¸ãã—ã¾ã›ã‚“: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "アンドゥファイルã§ã¯ãªã„ã®ã§ä¸Šæ›¸ãã—ã¾ã›ã‚“: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "対象ãŒãªã„ã®ã§ã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ã‚’スキップã—ã¾ã™"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "アンドゥファイル書ãè¾¼ã¿ä¸­: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: ã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ã‚¨ãƒ©ãƒ¼ã§ã™: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "オーナーãŒç•°ãªã‚‹ã®ã§ã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ã‚’読ã¿è¾¼ã¿ã¾ã›ã‚“: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "アンドゥファイル読込中: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: ã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ã‚’読込用ã¨ã—ã¦é–‹ã‘ã¾ã›ã‚“: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: ã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ã§ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: éžæš—å·åŒ–ファイルãŒæš—å·åŒ–ã•ã‚ŒãŸã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ã‚’使ã£ã¦ã¾ã™: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: æš—å·åŒ–ã•ã‚ŒãŸã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ã®è§£èª­ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: ã‚¢ãƒ³ãƒ‰ã‚¥ãƒ•ã‚¡ã‚¤ãƒ«ãŒæš—å·åŒ–ã•ã‚Œã¦ã„ã¾ã™: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: äº’æ›æ€§ã®ç„¡ã„アンドゥファイルã§ã™: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "ファイルã®å†…容ãŒå¤‰ã‚ã£ã¦ã„ã‚‹ãŸã‚ã€ã‚¢ãƒ³ãƒ‰ã‚¥æƒ…報を利用ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "アンドゥファイル %s ã®å–込を完了"
 
 msgid "Already at oldest change"
-msgstr "´û¤Ë°ìÈָŤ¤Êѹ¹¤Ç¤¹"
+msgstr "æ—¢ã«ä¸€ç•ªå¤ã„変更ã§ã™"
 
 msgid "Already at newest change"
-msgstr "´û¤Ë°ìÈÖ¿·¤·¤¤Êѹ¹¤Ç¤¹"
+msgstr "æ—¢ã«ä¸€ç•ªæ–°ã—ã„変更ã§ã™"
 
 #, c-format
-msgid "Undo number %ld not found"
-msgstr "¥¢¥ó¥É¥¥ÈÖ¹æ %ld Â¤Â¬Â¤ÃŸÂ¤Ã„¤«¤ê¤Þ¤»¤ó"
+msgid "E830: Undo number %ld not found"
+msgstr "E830: ã‚¢ãƒ³ãƒ‰ã‚¥ç•ªå· %ld ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
 
 msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: Â¹Ã”Èֹ椬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹"
+msgstr "E438: u_undo: è¡Œç•ªå·ãŒé–“é•ã£ã¦ã„ã¾ã™"
 
 msgid "more line"
-msgstr "¹Ô Ã„ɲä·¤Þ¤·¤¿"
+msgstr "è¡Œ è¿½åŠ ã—ã¾ã—ãŸ"
 
 msgid "more lines"
-msgstr "¹Ô Ã„ɲä·¤Þ¤·¤¿"
+msgstr "è¡Œ è¿½åŠ ã—ã¾ã—ãŸ"
 
 msgid "line less"
-msgstr "¹Ô ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "è¡Œ å‰Šé™¤ã—ã¾ã—ãŸ"
 
 msgid "fewer lines"
-msgstr "¹Ô ÂºÃ¯Â½Ã¼Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "è¡Œ å‰Šé™¤ã—ã¾ã—ãŸ"
 
 msgid "change"
-msgstr "²Õ½êÊѹ¹¤·¤Þ¤·¤¿"
+msgstr "箇所変更ã—ã¾ã—ãŸ"
 
 msgid "changes"
-msgstr "²Õ½êÊѹ¹¤·¤Þ¤·¤¿"
+msgstr "箇所変更ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "%ld %s; %s #%ld  %s"
 msgstr "%ld %s; %s #%ld  %s"
 
 msgid "before"
-msgstr "ðÊý"
+msgstr "å‰æ–¹"
 
 msgid "after"
-msgstr "¸åÊý"
+msgstr "後方"
 
 msgid "Nothing to undo"
-msgstr "¥¢¥ó¥É¥¥Âþ䬤¢¤ê¤Þ¤»¤ó"
+msgstr "アンドゥ対象ãŒã‚ã‚Šã¾ã›ã‚“"
 
-msgid "number changes  time"
-msgstr "Èֹ栠 ÃŠÃ‘¹¹     Â»Ã¾Â¹Ã¯"
+msgid "number changes  when               saved"
+msgstr "通番   å¤‰æ›´æ•°   å¤‰æ›´æ™‚期           ä¿å­˜æ¸ˆ"
 
 #, c-format
 msgid "%ld seconds ago"
-msgstr "%ld Ã‰ÃƒÂ·Ã²á¤·¤Æ¤¤¤Þ¤¹"
+msgstr "%ld ç§’経éŽã—ã¦ã„ã¾ã™"
 
 msgid "E790: undojoin is not allowed after undo"
-msgstr "E790: undo Â¤ÃŽÃ„¾¸å¤Ë undojoin Â¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E790: undo ã®ç›´å¾Œã« undojoin ã¯ã§ãã¾ã›ã‚“"
 
 msgid "E439: undo list corrupt"
-msgstr "E439: Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥Â¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Â¬Â²ÃµÂ¤Ã¬Â¤Ã†Â¤Â¤Â¤ÃžÂ¤Â¹"
+msgstr "E439: ã‚¢ãƒ³ãƒ‰ã‚¥ãƒªã‚¹ãƒˆãŒå£Šã‚Œã¦ã„ã¾ã™"
 
 msgid "E440: undo line missing"
-msgstr "E440: Â¥Â¢Â¥Ã³Â¥Ã‰Â¥Â¥Â¹Ã”¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E440: ã‚¢ãƒ³ãƒ‰ã‚¥è¡ŒãŒã‚ã‚Šã¾ã›ã‚“"
 
 #. Only MS VC 4.1 and earlier can do Win32s
 msgid ""
@@ -5503,90 +5853,104 @@ msgid ""
 "MS-Windows 16/32-bit GUI version"
 msgstr ""
 "\n"
-"MS-Windows 16/32 Â¥Ã“¥Ã¥È GUI ÃˆÃ‡"
+"MS-Windows 16/32 ãƒ“ット GUI ç‰ˆ"
 
 msgid ""
 "\n"
 "MS-Windows 64-bit GUI version"
 msgstr ""
 "\n"
-"MS-Windows 64 Â¥Ã“¥Ã¥È GUI ÃˆÃ‡"
+"MS-Windows 64 ãƒ“ット GUI ç‰ˆ"
 
 msgid ""
 "\n"
 "MS-Windows 32-bit GUI version"
 msgstr ""
 "\n"
-"MS-Windows 32 Â¥Ã“¥Ã¥È GUI ÃˆÃ‡"
+"MS-Windows 32 ãƒ“ット GUI ç‰ˆ"
 
 msgid " in Win32s mode"
-msgstr " in Win32s Â¥Ã¢Â¡Â¼Â¥Ã‰"
+msgstr " in Win32s ãƒ¢ãƒ¼ãƒ‰"
 
 msgid " with OLE support"
-msgstr " with OLE Â¥ÂµÂ¥Ã¡¼¥È"
+msgstr " with OLE ã‚µãƒãƒ¼ãƒˆ"
+
+msgid ""
+"\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 64 ãƒ“ット ã‚³ãƒ³ã‚½ãƒ¼ãƒ« ç‰ˆ"
 
 msgid ""
 "\n"
 "MS-Windows 32-bit console version"
 msgstr ""
 "\n"
-"MS-Windows 32 Â¥Ã“¥Ã¥È Â¥Â³Â¥Ã³Â¥Â½Â¡Â¼Â¥Ã« ÃˆÃ‡"
+"MS-Windows 32 ãƒ“ット ã‚³ãƒ³ã‚½ãƒ¼ãƒ« ç‰ˆ"
 
 msgid ""
 "\n"
 "MS-Windows 16-bit version"
 msgstr ""
 "\n"
-"MS-Windows 16 Â¥Ã“¥Ã¥È ÃˆÃ‡"
+"MS-Windows 16 ãƒ“ット ç‰ˆ"
 
 msgid ""
 "\n"
 "32-bit MS-DOS version"
 msgstr ""
 "\n"
-"32 Â¥Ã“¥Ã¥È MS-DOS ÃˆÃ‡"
+"32 ãƒ“ット MS-DOS ç‰ˆ"
 
 msgid ""
 "\n"
 "16-bit MS-DOS version"
 msgstr ""
 "\n"
-"16 Â¥Ã“¥Ã¥È MS-DOS ÃˆÃ‡"
+"16 ãƒ“ット MS-DOS ç‰ˆ"
 
 msgid ""
 "\n"
 "MacOS X (unix) version"
 msgstr ""
 "\n"
-"MacOS X (unix) ÃˆÃ‡"
+"MacOS X (unix) ç‰ˆ"
 
 msgid ""
 "\n"
 "MacOS X version"
 msgstr ""
 "\n"
-"MacOS X ÃˆÃ‡"
+"MacOS X ç‰ˆ"
 
 msgid ""
 "\n"
 "MacOS version"
 msgstr ""
 "\n"
-"MacOS ÃˆÃ‡"
+"MacOS ç‰ˆ"
 
 msgid ""
 "\n"
-"RISC OS version"
+"OpenVMS version"
 msgstr ""
 "\n"
-"RISC OS ÃˆÃ‡"
+"OpenVMS ç‰ˆ"
 
 msgid ""
 "\n"
 "Included patches: "
 msgstr ""
 "\n"
-"ŬÃѺѥѥåÃ: "
+"é©ç”¨æ¸ˆãƒ‘ッãƒ: "
+
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"追加拡張パッãƒ: "
 
 msgid "Modified by "
 msgstr "Modified by "
@@ -5606,35 +5970,35 @@ msgid ""
 "Huge version "
 msgstr ""
 "\n"
-"Huge ÃˆÃ‡ "
+"Huge ç‰ˆ "
 
 msgid ""
 "\n"
 "Big version "
 msgstr ""
 "\n"
-"Big ÃˆÃ‡ "
+"Big ç‰ˆ "
 
 msgid ""
 "\n"
 "Normal version "
 msgstr ""
 "\n"
-"Ä̾ï ÃˆÃ‡ "
+"通常 ç‰ˆ "
 
 msgid ""
 "\n"
 "Small version "
 msgstr ""
 "\n"
-"Small ÃˆÃ‡ "
+"Small ç‰ˆ "
 
 msgid ""
 "\n"
 "Tiny version "
 msgstr ""
 "\n"
-"Tiny ÃˆÃ‡ "
+"Tiny ç‰ˆ "
 
 msgid "without GUI."
 msgstr "without GUI."
@@ -5642,15 +6006,9 @@ msgstr "without GUI."
 msgid "with GTK2-GNOME GUI."
 msgstr "with GTK2-GNOME GUI."
 
-msgid "with GTK-GNOME GUI."
-msgstr "with GTK-GNOME GUI."
-
 msgid "with GTK2 GUI."
 msgstr "with GTK2 GUI."
 
-msgid "with GTK GUI."
-msgstr "with GTK GUI."
-
 msgid "with X11-Motif GUI."
 msgstr "with X11-Motif GUI."
 
@@ -5673,61 +6031,61 @@ msgid "with Cocoa GUI."
 msgstr "with Cocoa GUI."
 
 msgid "with (classic) GUI."
-msgstr "with (¥¯¥é¥·¥Ã¥¯) GUI."
+msgstr "with (ã\82¯ã\83©ã\82·ã\83\83ã\82¯) GUI."
 
 msgid "  Features included (+) or not (-):\n"
-msgstr "  ÂµÂ¡Ã‡Â½Â¤ÃŽÂ°Ã¬Ã÷ Ã­¸ú(+)/̵¸ú(-)\n"
+msgstr "  æ©Ÿèƒ½ã®ä¸€è¦§ æœ‰åŠ¹(+)/無効(-)\n"
 
 msgid "   system vimrc file: \""
-msgstr "      Â¥Â·Â¥Â¹Â¥Ã†Â¥Ã  vimrc: \""
+msgstr "      ã‚·ã‚¹ãƒ†ãƒ  vimrc: \""
 
 msgid "     user vimrc file: \""
-msgstr "        Â¥Ã¦Â¡Â¼Â¥Â¶ vimrc: \""
+msgstr "        Ã£\83¦ã\83¼ã\82¶ vimrc: \""
 
 msgid " 2nd user vimrc file: \""
-msgstr "     Ã‚è2¥æ¡¼¥¶ vimrc: \""
+msgstr "     Ã§Â¬Â¬2ã\83¦ã\83¼ã\82¶ vimrc: \""
 
 msgid " 3rd user vimrc file: \""
-msgstr "     Ã‚è3¥æ¡¼¥¶ vimrc: \""
+msgstr "     Ã§Â¬Â¬3ã\83¦ã\83¼ã\82¶ vimrc: \""
 
 msgid "      user exrc file: \""
-msgstr "         Â¥Ã¦Â¡Â¼Â¥Â¶ exrc: \""
+msgstr "         Ã£\83¦ã\83¼ã\82¶ exrc: \""
 
 msgid "  2nd user exrc file: \""
-msgstr "      Ã‚è2¥æ¡¼¥¶ exrc: \""
+msgstr "      Ã§Â¬Â¬2ã\83¦ã\83¼ã\82¶ exrc: \""
 
 msgid "  system gvimrc file: \""
-msgstr "     Â¥Â·Â¥Â¹Â¥Ã†Â¥Ã  gvimrc: \""
+msgstr "     ã‚·ã‚¹ãƒ†ãƒ  gvimrc: \""
 
 msgid "    user gvimrc file: \""
-msgstr "       Â¥Ã¦Â¡Â¼Â¥Â¶ gvimrc: \""
+msgstr "       Ã£\83¦ã\83¼ã\82¶ gvimrc: \""
 
 msgid "2nd user gvimrc file: \""
-msgstr "    Ã‚è2¥æ¡¼¥¶ gvimrc: \""
+msgstr "    Ã§Â¬Â¬2ã\83¦ã\83¼ã\82¶ gvimrc: \""
 
 msgid "3rd user gvimrc file: \""
-msgstr "    Ã‚è3¥æ¡¼¥¶ gvimrc: \""
+msgstr "    Ã§Â¬Â¬3ã\83¦ã\83¼ã\82¶ gvimrc: \""
 
 msgid "    system menu file: \""
-msgstr "    Â¥Â·Â¥Â¹Â¥Ã†Â¥Ã Â¥Ã¡Â¥Ã‹Â¥Ã¥Â¡Â¼: \""
+msgstr "    Ã£\82·ã\82¹ã\83\86ã\83 ã\83¡ã\83\8bã\83¥ã\83¼: \""
 
 msgid "  fall-back for $VIM: \""
-msgstr "       Â¾ÃŠÃŽÂ¬Â»Ã¾Â¤ÃŽ $VIM: \""
+msgstr "       çœç•¥æ™‚ã® $VIM: \""
 
 msgid " f-b for $VIMRUNTIME: \""
-msgstr "¾Êά»þ¤Î $VIMRUNTIME: \""
+msgstr "çœç•¥æ™‚ã® $VIMRUNTIME: \""
 
 msgid "Compilation: "
-msgstr "¥³¥ó¥Ñ¥¤¥ë: "
+msgstr "コンパイル: "
 
 msgid "Compiler: "
-msgstr "¥³¥ó¥Ñ¥¤¥é: "
+msgstr "コンパイラ: "
 
 msgid "Linking: "
-msgstr "¥ê¥ó¥¯: "
+msgstr "ã\83ªã\83³ã\82¯: "
 
 msgid "  DEBUG BUILD"
-msgstr "¥Ç¥Ã¥Ã¥°¥Ó¥ë¥É"
+msgstr "デãƒãƒƒã‚°ãƒ“ルド"
 
 msgid "VIM - Vi IMproved"
 msgstr "VIM - Vi IMproved"
@@ -5736,477 +6094,715 @@ msgid "version "
 msgstr "version "
 
 msgid "by Bram Moolenaar et al."
-msgstr "by Bram Moolenaar Â¾."
+msgstr "by Bram Moolenaar ä»–."
 
 msgid "Vim is open source and freely distributable"
-msgstr "Vim Â¤Ã¥ª¡¼¥×¥ó¥½¡¼¥¹¤Ç¤¢¤ê¼«Ã³¤ËÇÛÉÛ²Äǽ¤Ç¤¹"
+msgstr "Vim ã¯ã‚ªãƒ¼ãƒ—ンソースã§ã‚り自由ã«é…布å¯èƒ½ã§ã™"
 
 msgid "Help poor children in Uganda!"
-msgstr "¥¦¥¬¥ó¥À¤Î·Ã¤Þ¤ì¤Ê¤¤»Ò¶¡¤¿¤Ã¤Ë±ç½õ¤ò!"
+msgstr "ウガンダã®æµã¾ã‚Œãªã„å­ä¾›ãŸã¡ã«æ´åŠ©ã‚’!"
 
 msgid "type  :help iccf<Enter>       for information "
-msgstr "¾ÜºÙ¤Ê¾ðÊó¤à          :help iccf<Enter>      "
+msgstr "詳細ãªæƒ…報㯠          :help iccf<Enter>      "
 
 msgid "type  :q<Enter>               to exit         "
-msgstr "½ªÎ»¤¹¤ë¤Ë¤à          :q<Enter>              "
+msgstr "終了ã™ã‚‹ã«ã¯           :q<Enter>              "
 
 msgid "type  :help<Enter>  or  <F1>  for on-line help"
-msgstr "¥ª¥ó¥é¥¤¥ó¥Ø¥ë¥×¤à    :help<Enter> Â¤Â« <F1>   "
+msgstr "オンラインヘルプ㯠    :help<Enter> ã‹ <F1>   "
 
 msgid "type  :help version7<Enter>   for version info"
-msgstr "¥á¼¥¸¥ç¥ó¾ðÊó¤à      :help version7<Enter>  "
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報㯠      :help version7<Enter>  "
 
 msgid "Running in Vi compatible mode"
-msgstr "Vi¸ß´¹¥â¡¼¥É¤ÇÆ°ºîÃæ"
+msgstr "Vi互æ›ãƒ¢ãƒ¼ãƒ‰ã§å‹•ä½œä¸­"
 
 msgid "type  :set nocp<Enter>        for Vim defaults"
-msgstr "Vim¿ä¾©Ãäˤ¹¤ë¤Ë¤à   :set nocp<Enter>       "
+msgstr "Vim推奨値ã«ã™ã‚‹ã«ã¯    :set nocp<Enter>       "
 
 msgid "type  :help cp-default<Enter> for info on this"
-msgstr "¾ÜºÙ¤Ê¾ðÊó¤à          :help cp-default<Enter>"
+msgstr "詳細ãªæƒ…報㯠          :help cp-default<Enter>"
 
 msgid "menu  Help->Orphans           for information    "
-msgstr "¾ÜºÙ¤Ã¥á¥Ë¥å¡¼¤Î Â¥Ã˜Â¥Ã«Â¥Ã—¢ª¸É»ù Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â²Â¼Â¤ÂµÂ¤Â¤   "
+msgstr "詳細ã¯ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã® ãƒ˜ãƒ«ãƒ—→孤兠をå‚ç…§ã—ã¦ä¸‹ã•ã„   "
 
 msgid "Running modeless, typed text is inserted"
-msgstr "¥â¡¼¥É̵¤Ç¼Â¹ÔÃæ, Â¥Â¿Â¥Â¤Â¥Ã—¤·¤¿Ê¸»ú¤¬ÃÞÆþ¤µ¤ì¤Þ¤¹"
+msgstr "モード無ã§å®Ÿè¡Œä¸­, ã‚¿ã‚¤ãƒ—ã—ãŸæ–‡å­—ãŒæŒ¿å…¥ã•ã‚Œã¾ã™"
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "¥á¥Ë¥å¡¼¤Î ÃŠÃ”½¸¢ªÃ´ÂÎÀßÄꢪÃÞÆþ(½é¿´¼Ô)¥â¡¼¥ÉÀÚÂØ"
+msgstr "メニュー㮠編集→全体設定→挿入(åˆå¿ƒè€…)モード切替 "
 
 msgid "                              for two modes      "
-msgstr "                              Â¤Ã‡Â¥Ã¢Â¡Â¼Â¥Ã‰Ã­¤Ë       "
+msgstr "                              ã§ãƒ¢ãƒ¼ãƒ‰æœ‰ã«       "
 
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
-msgstr "¥á¥Ë¥å¡¼¤Î ÃŠÃ”½¸¢ªÃ´ÂÎÀßÄꢪVi¸ß´¹¥â¡¼¥ÉÀÚÂØ      "
+msgstr "メニュー㮠編集→全体設定→Vi互æ›ãƒ¢ãƒ¼ãƒ‰åˆ‡æ›¿      "
 
 msgid "                              for Vim defaults   "
-msgstr "                              Â¤Ã‡Vim¤È¤·¤ÆÆ°ºî    "
+msgstr "                              ã§Vimã¨ã—ã¦å‹•ä½œ    "
 
 msgid "Sponsor Vim development!"
-msgstr "Vim¤Î³«È¯¤ò±þ±ç¤·¤Æ¤¯¤À¤µ¤¤!"
+msgstr "Vimã®é–‹ç™ºã‚’å¿œæ´ã—ã¦ãã ã•ã„!"
 
 msgid "Become a registered Vim user!"
-msgstr "Vim¤ÎÅÃÿ¥æ¡¼¥¶¤Ë¤Ê¤Ã¤Æ¤¯¤À¤µ¤¤!"
+msgstr "Vimã®ç™»éŒ²ãƒ¦ãƒ¼ã‚¶ã«ãªã£ã¦ãã ã•ã„!"
 
 msgid "type  :help sponsor<Enter>    for information "
-msgstr "¾ÜºÙ¤Ê¾ðÊó¤à          :help sponsor<Enter>   "
+msgstr "詳細ãªæƒ…報㯠          :help sponsor<Enter>   "
 
 msgid "type  :help register<Enter>   for information "
-msgstr "¾ÜºÙ¤Ê¾ðÊó¤à          :help register<Enter>  "
+msgstr "詳細ãªæƒ…報㯠          :help register<Enter>  "
 
 msgid "menu  Help->Sponsor/Register  for information    "
-msgstr "¾ÜºÙ¤Ã¥á¥Ë¥å¡¼¤Î Â¥Ã˜Â¥Ã«Â¥Ã—¢ª¥¹¥Ã¥ó¥µ¡¼/Ã…Ãÿ Â¤Ã²Â»Â²Â¾ÃˆÂ¤Â·Â¤Ã†Â²Â¼Â¤ÂµÂ¤Â¤   "
+msgstr "詳細ã¯ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã® ãƒ˜ãƒ«ãƒ—→スãƒãƒ³ã‚µãƒ¼/登録 ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„   "
 
 msgid "WARNING: Windows 95/98/ME detected"
-msgstr "   Â·Ã™Â¹Ã°: Windows 95/98/Me Â¤Ã²Â¸Â¡Â½Ã  "
+msgstr "   è­¦å‘Š: Windows 95/98/Me ã‚’検出  "
 
 msgid "type  :help windows95<Enter>  for info on this"
-msgstr " Â¾ÃœÂºÃ™Â¤ÃŠÂ¾Ã°ÃŠÃ³Â¤Ã          :help windows95<Enter> "
+msgstr " è©³ç´°ãªæƒ…報㯠         :help windows95<Enter> "
 
 msgid "Already only one window"
-msgstr "´û¤Ë¥¦¥£¥ó¥É¥¦¤Ã1¤Ä¤·¤«¤¢¤ê¤Þ¤»¤ó"
+msgstr "æ—¢ã«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯1ã¤ã—ã‹ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E441: There is no preview window"
-msgstr "E441: Â¥Ã—¥ì¥Ó¥å¡¼¥¦¥£¥ó¥É¥¦¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E441: ãƒ—レビューウィンドウãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: ÂºÂ¸Â¾Ã¥Â¤ÃˆÂ±Â¦Â²Â¼Â¤Ã²Ã†Â±Â»Ã¾Â¤Ã‹ÃŠÂ¬Â³Ã¤Â¤Â¹Â¤Ã«Â¤Â³Â¤ÃˆÂ¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E442: å·¦ä¸Šã¨å³ä¸‹ã‚’åŒæ™‚ã«åˆ†å‰²ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
 
 msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: Ã‚¾¤Î¥¦¥£¥ó¥É¥¦¤¬Ê¬³ä¤µ¤ì¤Æ¤¤¤ë»þ¤Ë¤Ã½ç²ó¤Ç¤­¤Þ¤»¤ó"
+msgstr "E443: ä»–ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒåˆ†å‰²ã•ã‚Œã¦ã„る時ã«ã¯é †å›žã§ãã¾ã›ã‚“"
 
 msgid "E444: Cannot close last window"
-msgstr "E444: ÂºÃ‡Â¸Ã¥Â¤ÃŽÂ¥Â¦Â¥Â£Â¥Ã³Â¥Ã‰Â¥Â¦Â¤Ã²ÃŠÃ„¤¸¤ë¤³¤È¤Ã¤Ç¤­¤Þ¤»¤ó"
+msgstr "E444: æœ€å¾Œã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“"
+
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: autocmdウィンドウã¯é–‰ã˜ã‚‰ã‚Œã¾ã›ã‚“"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: autocmdウィンドウã—ã‹æ®‹ã‚‰ãªã„ãŸã‚ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯é–‰ã˜ã‚‰ã‚Œã¾ã›ã‚“"
 
 msgid "E445: Other window contains changes"
-msgstr "E445: Ã‚¾¤Î¥¦¥£¥ó¥É¥¦¤Ë¤ÃÊѹ¹¤¬¤¢¤ê¤Þ¤¹"
+msgstr "E445: ä»–ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯å¤‰æ›´ãŒã‚ã‚Šã¾ã™"
 
 msgid "E446: No file name under cursor"
-msgstr "E446: Â¥Â«Â¡Â¼Â¥Â½Â¥Ã«Â¤ÃŽÂ²Â¼Â¤Ã‹Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E446: ã‚«ãƒ¼ã‚½ãƒ«ã®ä¸‹ã«ãƒ•ã‚¡ã‚¤ãƒ«åãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: path¤Ë¤à\"%s\" Â¤ÃˆÂ¤Â¤Â¤Â¦Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
-
-#, c-format
-msgid "E370: Could not load library %s"
-msgstr "E370: Â¥Ã©Â¥Â¤Â¥Ã–¥é¥ê %s Â¤Ã²Â¥Ã­Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿"
-
-msgid "Sorry, this command is disabled: the Perl library could not be loaded."
-msgstr ""
-"¤³¤Î¥³¥Þ¥ó¥É¤Ã̵¸ú¤Ç¤¹, Â¤Â´Â¤Ã¡Â¤Ã³Â¤ÃŠÂ¤ÂµÂ¤Â¤: Perl¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿."
-
-msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-msgstr ""
-"E299: Â¥ÂµÂ¥Ã³Â¥Ã‰Â¥ÃœÂ¥ÃƒÂ¥Â¯Â¥Â¹Â¤Ã‡Â¤Ã Safe Â¥Ã¢Â¥Â¸Â¥Ã¥Â¡Â¼Â¥Ã«Â¤Ã²Â»ÃˆÃѤ·¤Ê¤¤Perl¥¹¥¯¥ê¥×¥È¤Ã¶Ø¤¸¤é¤ì"
-"¤Æ¤¤¤Þ¤¹"
+msgstr "E447: pathã«ã¯ \"%s\" ã¨ã„ã†ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "Edit with &multiple Vims"
-msgstr "Ê£¿ô¤ÎVim¤ÇÊÔ½¸¤¹¤ë (&M)"
+msgstr "複数ã®Vimã§ç·¨é›†ã™ã‚‹ (&M)"
 
 msgid "Edit with single &Vim"
-msgstr "1¤Ä¤ÎVim¤ÇÊÔ½¸¤¹¤ë (&V)"
+msgstr "1ã¤ã®Vimã§ç·¨é›†ã™ã‚‹ (&V)"
 
 msgid "Diff with Vim"
-msgstr "Vim¤Çº¹Ê¬¤ò¸«¤ë"
+msgstr "Vimã§å·®åˆ†ã‚’表示ã™ã‚‹"
 
 msgid "Edit with &Vim"
-msgstr "Vim¤ÇÊÔ½¸¤¹¤ë (&V)"
+msgstr "Vimã§ç·¨é›†ã™ã‚‹ (&V)"
 
 #. Now concatenate
 msgid "Edit with existing Vim - "
-msgstr "´û¸¤ÎVim¤ÇÊÔ½¸¤¹¤ë - "
+msgstr "起動済ã®Vimã§ç·¨é›†ã™ã‚‹ - "
 
 msgid "Edits the selected file(s) with Vim"
-msgstr "êÂò¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤òVim¤ÇÊÔ½¸¤¹¤ë"
+msgstr "é¸æŠžã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’Vimã§ç·¨é›†ã™ã‚‹"
 
 msgid "Error creating process: Check if gvim is in your path!"
-msgstr ""
-"µ¯Æ°¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: gvim Â¤Ã˜Â¤ÃŽÂ¥Ã‘¥¹¤¬Àµ¤·¤¯ÀßÄꤵ¤ì¤Æ¤¤¤ë¤«³Îǧ¤·¤Æ¤¯¤À¤µ¤¤!"
+msgstr "プロセスã®ä½œæˆã«å¤±æ•—: gvimãŒç’°å¢ƒå¤‰æ•°PATH上ã«ã‚ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„!"
 
 msgid "gvimext.dll error"
-msgstr "gvimext.dll Â¥Â¨Â¥Ã©Â¡Â¼"
+msgstr "gvimext.dll Ã£\82¨ã\83©ã\83¼"
 
 msgid "Path length too long!"
-msgstr "¥Ñ¥¹¤¬Ä¹²á¤®¤Þ¤¹!"
+msgstr "パスãŒé•·ã™ãŽã¾ã™!"
 
 msgid "--No lines in buffer--"
-msgstr "--¥ååե¡¤Ë¹Ô¤¬¤¢¤ê¤Þ¤»¤ó--"
+msgstr "--ãƒãƒƒãƒ•ã‚¡ã«è¡ŒãŒã‚ã‚Šã¾ã›ã‚“--"
 
 #.
 #. * The error messages that can be shared are included here.
 #. * Excluded are errors that are only used once and debugging messages.
 #.
 msgid "E470: Command aborted"
-msgstr "E470: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬ÃƒÃ¦ÃƒÃ‡Â¤ÂµÂ¤Ã¬Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "E470: ã‚³ãƒžãƒ³ãƒ‰ãŒä¸­æ–­ã•ã‚Œã¾ã—ãŸ"
 
 msgid "E471: Argument required"
-msgstr "E471: Â°ÃºÂ¿Ã´Â¤Â¬Ã‰Â¬ÃפǤ¹"
+msgstr "E471: å¼•æ•°ãŒå¿…è¦ã§ã™"
 
 msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: \\ Â¤ÃŽÂ¸Ã¥Â¤Ã / Â¤Â« ? Â¤Â« & Â¤Ã‡Â¤ÃŠÂ¤Â±Â¤Ã¬Â¤Ã¤Ê¤ê¤Þ¤»¤ó"
+msgstr "E10: \\ ã®å¾Œã¯ / ã‹ ? ã‹ & ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
 
 msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr "E11: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¥Ã©Â¥Â¤Â¥Ã³Â¤Ã‡Â¤Ã̵¸ú¤Ç¤¹; <CR>¤Ç¼Â¹Ô, CTRL-C¤Ç¤ä¤á¤ë"
+msgstr "E11: ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§ã¯ç„¡åŠ¹ã§ã™; <CR>ã§å®Ÿè¡Œ, CTRL-Cã§ã‚„ã‚ã‚‹"
 
 msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
 msgstr ""
-"E12: Â¸Â½ÂºÃŸÂ¤ÃŽÂ¥Ã‡Â¥Â£Â¥Ã¬Â¥Â¯Â¥ÃˆÂ¥ÃªÂ¤Ã¤Â¥Â¿Â¥Â°Â¸Â¡ÂºÃ·Â¤Ã‡Â¤Ãexrc/vimrc¤Î¥³¥Þ¥ó¥É¤Ãµö²Ä¤µ¤ì¤Þ¤»¤ó"
+"E12: ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚„タグ検索ã§ã¯exrc/vimrcã®ã‚³ãƒžãƒ³ãƒ‰ã¯è¨±å¯ã•ã‚Œã¾ã›ã‚“"
 
 msgid "E171: Missing :endif"
-msgstr "E171: :endif Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E171: :endif ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E600: Missing :endtry"
-msgstr "E600: :endtry Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E600: :endtry ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E170: Missing :endwhile"
-msgstr "E170: :endwhile Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E170: :endwhile ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E170: Missing :endfor"
-msgstr "E170: :endfor Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E170: :endfor ãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E588: :endwhile without :while"
-msgstr "E588: :while Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :endwhile Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E588: :while ã®ãªã„ :endwhile ãŒã‚ã‚Šã¾ã™"
 
 msgid "E588: :endfor without :for"
-msgstr "E588: :endfor Â¤ÃŽÂ¤ÃŠÂ¤Â¤ :for Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â¹"
+msgstr "E588: :endfor ã®ãªã„ :for ãŒã‚ã‚Šã¾ã™"
 
 msgid "E13: File exists (add ! to override)"
-msgstr "E13: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Â¬Ã‚¸ºß¤·¤Þ¤¹ (! Â¤Ã²Ã„ɲäǾå½ñ)"
+msgstr "E13: ãƒ•ã‚¡ã‚¤ãƒ«ãŒå­˜åœ¨ã—ã¾ã™ (! ã‚’追加ã§ä¸Šæ›¸)"
 
 msgid "E472: Command failed"
-msgstr "E472: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬Â¼ÂºÃ‡Ã”¤·¤Þ¤·¤¿"
+msgstr "E472: ã‚³ãƒžãƒ³ãƒ‰ãŒå¤±æ•—ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "E234: Unknown fontset: %s"
-msgstr "E234: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥Ã•Â¥Â©Â¥Ã³Â¥ÃˆÂ¥Â»Â¥ÃƒÂ¥Ãˆ: %s"
+msgstr "E234: æœªçŸ¥ã®ãƒ•ã‚©ãƒ³ãƒˆã‚»ãƒƒãƒˆ: %s"
 
 #, c-format
 msgid "E235: Unknown font: %s"
-msgstr "E235: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥Ã•Â¥Â©Â¥Ã³Â¥Ãˆ: %s"
+msgstr "E235: æœªçŸ¥ã®ãƒ•ã‚©ãƒ³ãƒˆ: %s"
 
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236: Â¥Ã•Â¥Â©Â¥Ã³Â¥Ãˆ \"%s\" Â¤Ã¸ÇÄêÉý¤Ç¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E236: ãƒ•ã‚©ãƒ³ãƒˆ \"%s\" ã¯å›ºå®šå¹…ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E473: Internal error"
-msgstr "E473: Ã†Ã¢Ã‰Ã´Â¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹"
+msgstr "E473: å†…部エラーã§ã™"
 
 msgid "Interrupted"
-msgstr "³ä¹þ¤Þ¤ì¤Þ¤·¤¿"
+msgstr "割込ã¾ã‚Œã¾ã—ãŸ"
 
 msgid "E14: Invalid address"
-msgstr "E14: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Â¢Â¥Ã‰Â¥Ã¬Â¥Â¹Â¤Ã‡Â¤Â¹"
+msgstr "E14: ç„¡åŠ¹ãªã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™"
 
 msgid "E474: Invalid argument"
-msgstr "E474: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ°ÃºÂ¿Ã´Â¤Ã‡Â¤Â¹"
+msgstr "E474: ç„¡åŠ¹ãªå¼•æ•°ã§ã™"
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ°ÃºÂ¿Ã´Â¤Ã‡Â¤Â¹: %s"
+msgstr "E475: ç„¡åŠ¹ãªå¼•æ•°ã§ã™: %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
-msgstr "E15: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¼Â°Â¤Ã‡Â¤Â¹: %s"
+msgstr "E15: ç„¡åŠ¹ãªå¼ã§ã™: %s"
 
 msgid "E16: Invalid range"
-msgstr "E16: ÃŒÂµÂ¸ÃºÂ¤ÃŠÃˆÃ°Ã¤Ç¤¹"
+msgstr "E16: ç„¡åŠ¹ãªç¯„囲ã§ã™"
 
 msgid "E476: Invalid command"
-msgstr "E476: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Ã‡Â¤Â¹"
+msgstr "E476: ç„¡åŠ¹ãªã‚³ãƒžãƒ³ãƒ‰ã§ã™"
 
 #, c-format
 msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" Â¤Ã¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹"
+msgstr "E17: \"%s\" ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™"
 
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: \"%s\"() Â¤ÃŽÂ¥Ã©Â¥Â¤Â¥Ã–¥é¥ê¸Æ½Ã¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E364: \"%s\"() ã®ãƒ©ã‚¤ãƒ–ラリ呼出ã«å¤±æ•—ã—ã¾ã—ãŸ"
 
 #, c-format
 msgid "E448: Could not load library function %s"
-msgstr "E448: Â¥Ã©Â¥Â¤Â¥Ã–¥é¥ê¤Î´Ø¿ô %s Â¤Ã²Â¥Ã­Â¡Â¼Â¥Ã‰Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿"
+msgstr "E448: ãƒ©ã‚¤ãƒ–ラリã®é–¢æ•° %s ã‚’ロードã§ãã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "E19: Mark has invalid line number"
-msgstr "E19: Â¥ÃžÂ¡Â¼Â¥Â¯Â¤Ã‹ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¹Ã”Èֹ椬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤·¤¿"
+msgstr "E19: ãƒžãƒ¼ã‚¯ã«ç„¡åŠ¹ãªè¡Œç•ªå·ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã—ãŸ"
 
 msgid "E20: Mark not set"
-msgstr "E20: Â¥ÃžÂ¡Â¼Â¥Â¯Â¤ÃÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E20: ãƒžãƒ¼ã‚¯ã¯è¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: 'modifiable' Â¤Â¬Â¥ÂªÂ¥Ã•Â¤ÃŠÂ¤ÃŽÂ¤Ã‡, ÃŠÃ‘¹¹¤Ç¤­¤Þ¤»¤ó"
+msgstr "E21: 'modifiable' ãŒã‚ªãƒ•ãªã®ã§, å¤‰æ›´ã§ãã¾ã›ã‚“"
 
 msgid "E22: Scripts nested too deep"
-msgstr "E22: Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È¤ÎÆþ¤ì»Ò¤¬¿¼²á¤®¤Þ¤¹"
+msgstr "E22: ã‚¹ã‚¯ãƒªãƒ—トã®å…¥ã‚Œå­ãŒæ·±éŽãŽã¾ã™"
 
 msgid "E23: No alternate file"
-msgstr "E23: Ã‰Ã»Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E23: å‰¯ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E24: No such abbreviation"
-msgstr "E24: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÃƒÂ»Â½ÃŒÃ†Ã¾ÃŽÃ¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E24: ãã®ã‚ˆã†ãªçŸ­ç¸®å…¥åŠ›ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E477: No ! allowed"
-msgstr "E477: ! Â¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E477: ! ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E25: GUI cannot be used: Not enabled at compile time"
-msgstr "E25: GUI¤Ã»ÈÃÑÉÔ²Äǽ¤Ç¤¹: Â¥Â³Â¥Ã³Â¥Ã‘¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹"
+msgstr "E25: GUIã¯ä½¿ç”¨ä¸å¯èƒ½ã§ã™: ã‚³ãƒ³ãƒ‘イル時ã«ç„¡åŠ¹ã«ã•ã‚Œã¦ã„ã¾ã™"
 
 msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-msgstr "E26: Â¥Ã˜Â¥Ã–¥é¥¤¸ì¤Ã»ÈÃÑÉÔ²Äǽ¤Ç¤¹: Â¥Â³Â¥Ã³Â¥Ã‘¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
+msgstr "E26: ãƒ˜ãƒ–ライ語ã¯ä½¿ç”¨ä¸å¯èƒ½ã§ã™: ã‚³ãƒ³ãƒ‘イル時ã«ç„¡åŠ¹ã«ã•ã‚Œã¦ã„ã¾ã™\n"
 
 msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-msgstr "E27: Â¥ÃšÂ¥Ã«Â¥Â·Â¥Â¢Â¸Ã¬Â¤Ã»ÈÃÑÉÔ²Äǽ¤Ç¤¹: Â¥Â³Â¥Ã³Â¥Ã‘¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
+msgstr "E27: ãƒšãƒ«ã‚·ã‚¢èªžã¯ä½¿ç”¨ä¸å¯èƒ½ã§ã™: ã‚³ãƒ³ãƒ‘イル時ã«ç„¡åŠ¹ã«ã•ã‚Œã¦ã„ã¾ã™\n"
 
 msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-msgstr "E800: Â¥Â¢Â¥Ã©Â¥Ã“¥¢¸ì¤Ã»ÈÃÑÉÔ²Äǽ¤Ç¤¹: Â¥Â³Â¥Ã³Â¥Ã‘¥¤¥ë»þ¤Ë̵¸ú¤Ë¤µ¤ì¤Æ¤¤¤Þ¤¹\n"
+msgstr "E800: ã‚¢ãƒ©ãƒ“ア語ã¯ä½¿ç”¨ä¸å¯èƒ½ã§ã™: ã‚³ãƒ³ãƒ‘イル時ã«ç„¡åŠ¹ã«ã•ã‚Œã¦ã„ã¾ã™\n"
 
 #, c-format
 msgid "E28: No such highlight group name: %s"
-msgstr "E28: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÃŒÂ¾Â¤ÃŽÂ¥Ã¥¤¥é¥¤¥È¥°¥ë¡¼¥×¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E28: ãã®ã‚ˆã†ãªåã®ãƒã‚¤ãƒ©ã‚¤ãƒˆã‚°ãƒ«ãƒ¼ãƒ—ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 msgid "E29: No inserted text yet"
-msgstr "E29: Â¤ÃžÂ¤Ã€Â¥Ã†Â¥Â­Â¥Â¹Â¥ÃˆÂ¤Â¬ÃÞÆþ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E29: ã¾ã ãƒ†ã‚­ã‚¹ãƒˆãŒæŒ¿å…¥ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E30: No previous command line"
-msgstr "E30: Â°ÃŠÃ°¤Ë¥³¥Þ¥ó¥É¹Ô¤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E30: ä»¥å‰ã«ã‚³ãƒžãƒ³ãƒ‰è¡ŒãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E31: No such mapping"
-msgstr "E31: Â¤Â½Â¤ÃŽÂ¤Ã¨Â¤Â¦Â¤ÃŠÂ¥ÃžÂ¥ÃƒÂ¥Ã”¥ó¥°¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E31: ãã®ã‚ˆã†ãªãƒžãƒƒãƒ”ングã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E479: No match"
-msgstr "E479: Â³ÂºÃ…ö¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E479: è©²å½“ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E480: No match: %s"
-msgstr "E480: Â³ÂºÃ…ö¤Ã¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E480: è©²å½“ã¯ã‚ã‚Šã¾ã›ã‚“: %s"
 
 msgid "E32: No file name"
-msgstr "E32: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Â¬Â¤Â¢Â¤ÃªÂ¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E32: ãƒ•ã‚¡ã‚¤ãƒ«åãŒã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E33: No previous substitute regular expression"
-msgstr "E33: Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½ÃƒÃ–´¹¤¬¤Þ¤À¼Â¹Ô¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E33: æ­£è¦è¡¨ç¾ç½®æ›ãŒã¾ã å®Ÿè¡Œã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E34: No previous command"
-msgstr "E34: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬Â¤ÃžÂ¤Ã€Â¼Ã‚¹Ô¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E34: ã‚³ãƒžãƒ³ãƒ‰ãŒã¾ã å®Ÿè¡Œã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E35: No previous regular expression"
-msgstr "E35: Ã€ÂµÂµÂ¬Ã‰Â½Â¸Â½Â¤Â¬Â¤ÃžÂ¤Ã€Â¼Ã‚¹Ô¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E35: æ­£è¦è¡¨ç¾ãŒã¾ã å®Ÿè¡Œã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E481: No range allowed"
-msgstr "E481: ÃˆÃ°Ã»ØÄê¤Ãµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E481: ç¯„囲指定ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
 
 msgid "E36: Not enough room"
-msgstr "E36: Â½Â¼ÃŠÂ¬Â¤ÃŠÃÆÎ̤¬¤¢¤ê¤Þ¤»¤ó"
+msgstr "E36: ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«å分ãªé«˜ã•ã‚‚ã—ãã¯å¹…ãŒã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247: %s Â¤ÃˆÂ¤Â¤Â¤Â¦ÃŒÂ¾Ã°¤ÎÅÃÿ¤µ¤ì¤¿¥µ¡¼¥Ã¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E247: %s ã¨ã„ã†åå‰ã®ç™»éŒ²ã•ã‚ŒãŸã‚µãƒ¼ãƒã¯ã‚ã‚Šã¾ã›ã‚“"
 
 #, c-format
 msgid "E482: Can't create file %s"
-msgstr "E482: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s Â¤Ã²ÂºÃ®Ã€Â®Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E482: ãƒ•ã‚¡ã‚¤ãƒ« %s ã‚’作æˆã§ãã¾ã›ã‚“"
 
 msgid "E483: Can't get temp file name"
-msgstr "E483: Â°Ã¬Â»Ã¾Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃŒÂ¾Ã°¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó"
+msgstr "E483: ä¸€æ™‚ファイルã®åå‰ã‚’å–å¾—ã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "E484: Can't open file %s"
-msgstr "E484: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« \"%s\" Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E484: ãƒ•ã‚¡ã‚¤ãƒ« \"%s\" ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 #, c-format
 msgid "E485: Can't read file %s"
-msgstr "E485: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E485: ãƒ•ã‚¡ã‚¤ãƒ« %s ã‚’読込ã‚ã¾ã›ã‚“"
 
 msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: ÂºÃ‡Â¸Ã¥Â¤ÃŽÃŠÃ‘¹¹¤¬Êø¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (! Â¤Ã²Ã„ɲäÇÊѹ¹¤òÇË´þ)"
+msgstr "E37: æœ€å¾Œã®å¤‰æ›´ãŒä¿å­˜ã•ã‚Œã¦ã„ã¾ã›ã‚“ (! ã‚’追加ã§å¤‰æ›´ã‚’破棄)"
 
 msgid "E38: Null argument"
-msgstr "E38: Â°ÃºÂ¿Ã´Â¤Â¬Â¶ÃµÂ¤Ã‡Â¤Â¹"
+msgstr "E38: å¼•æ•°ãŒç©ºã§ã™"
 
 msgid "E39: Number expected"
-msgstr "E39: Â¿Ã´ÃƒÃ¤¬Ã׵ᤵ¤ì¤Æ¤¤¤Þ¤¹"
+msgstr "E39: æ•°å€¤ãŒè¦æ±‚ã•ã‚Œã¦ã„ã¾ã™"
 
 #, c-format
 msgid "E40: Can't open errorfile %s"
-msgstr "E40: Â¥Â¨Â¥Ã©Â¡Â¼Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã« %s Â¤Ã²Â³Â«Â¤Â±Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E40: ã‚¨ãƒ©ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ« %s ã‚’é–‹ã‘ã¾ã›ã‚“"
 
 msgid "E233: cannot open display"
-msgstr "E233: Â¥Ã‡Â¥Â£Â¥Â¹Â¥Ã—¥ì¥¤¤ò³«¤±¤Þ¤»¤ó"
+msgstr "E233: ãƒ‡ã‚£ã‚¹ãƒ—レイを開ã‘ã¾ã›ã‚“"
 
 msgid "E41: Out of memory!"
-msgstr "E41: Â¥Ã¡Â¥Ã¢Â¥ÃªÂ¤Â¬Â¿Ã”¤­²Ì¤Æ¤Þ¤·¤¿!"
+msgstr "E41: ãƒ¡ãƒ¢ãƒªãŒå°½ãæžœã¦ã¾ã—ãŸ!"
 
 msgid "Pattern not found"
-msgstr "¥Ñ¥¿¡¼¥ó¤Ã¤ß¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "パターンã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
 
 #, c-format
 msgid "E486: Pattern not found: %s"
-msgstr "E486: Â¥Ã‘¥¿¡¼¥ó¤Ã¤ß¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿: %s"
+msgstr "E486: ãƒ‘ターンã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ: %s"
 
 msgid "E487: Argument must be positive"
-msgstr "E487: Â°ÃºÂ¿Ã´Â¤ÃÀµ¤ÎÃäǤʤ±¤ì¤Ã¤Ê¤ê¤Þ¤»¤ó"
+msgstr "E487: å¼•æ•°ã¯æ­£ã®å€¤ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
 
 msgid "E459: Cannot go back to previous directory"
-msgstr "E459: Ã°¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËÌá¤ì¤Þ¤»¤ó"
+msgstr "E459: å‰ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«æˆ»ã‚Œã¾ã›ã‚“"
 
 msgid "E42: No Errors"
-msgstr "E42: Â¥Â¨Â¥Ã©Â¡Â¼Â¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E42: ã‚¨ãƒ©ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E776: No location list"
-msgstr "E776: Â¾Ã¬Â½ÃªÂ¥ÃªÂ¥Â¹Â¥ÃˆÂ¤Ã¤¢¤ê¤Þ¤»¤ó"
+msgstr "E776: å ´æ‰€ãƒªã‚¹ãƒˆã¯ã‚ã‚Šã¾ã›ã‚“"
 
 msgid "E43: Damaged match string"
-msgstr "E43: Â³ÂºÃ…öʸ»úÎó¤¬ÇË»¤·¤Æ¤¤¤Þ¤¹"
+msgstr "E43: è©²å½“文字列ãŒç ´æã—ã¦ã„ã¾ã™"
 
 msgid "E44: Corrupted regexp program"
-msgstr "E44: Ã‰Ã”Àµ¤ÊÀµµ¬É½¸½¥×¥í¥°¥é¥à¤Ç¤¹"
+msgstr "E44: ä¸æ­£ãªæ­£è¦è¡¨ç¾ãƒ—ログラムã§ã™"
 
 msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: 'readonly' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹ (! Â¤Ã²Ã„ɲäǾå½ñ¤­)"
+msgstr "E45: 'readonly' ã‚ªãƒ—ションãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã™ (! ã‚’追加ã§ä¸Šæ›¸ã)"
 
 #, c-format
 msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: Ã†Ã‰Â¼Ã¨Ã€Ã¬ÃÑÊÑ¿ô \"%s\" Â¤Ã‹Â¤ÃÃäòÀßÄê¤Ç¤­¤Þ¤»¤ó"
+msgstr "E46: èª­å–専用変数 \"%s\" ã«ã¯å€¤ã‚’設定ã§ãã¾ã›ã‚“"
 
 #, c-format
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: Â¥ÂµÂ¥Ã³Â¥Ã‰Â¥ÃœÂ¥ÃƒÂ¥Â¯Â¥Â¹Â¤Ã‡Â¤ÃÊÑ¿ô \"%s\" Â¤Ã‹ÃƒÃ¤òÀßÄê¤Ç¤­¤Þ¤»¤ó"
+msgstr "E794: ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã§ã¯å¤‰æ•° \"%s\" ã«å€¤ã‚’設定ã§ãã¾ã›ã‚“"
 
 msgid "E47: Error while reading errorfile"
-msgstr "E47: Â¥Â¨Â¥Ã©Â¡Â¼Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«Â¤ÃŽÃ†Ã‰Â¹Ã¾ÃƒÃ¦Â¤Ã‹Â¥Â¨Â¥Ã©Â¡Â¼Â¤Â¬ÃˆÂ¯Ã€Â¸Â¤Â·Â¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "E47: ã‚¨ãƒ©ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã®èª­è¾¼ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ"
 
 msgid "E48: Not allowed in sandbox"
-msgstr "E48: Â¥ÂµÂ¥Ã³Â¥Ã‰Â¥ÃœÂ¥ÃƒÂ¥Â¯Â¥Â¹Â¤Ã‡Â¤Ãµö¤µ¤ì¤Þ¤»¤ó"
+msgstr "E48: ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã§ã¯è¨±ã•ã‚Œã¾ã›ã‚“"
 
 msgid "E523: Not allowed here"
-msgstr "E523: Â¤Â³Â¤Â³Â¤Ã‡Â¤Ãµö²Ä¤µ¤ì¤Þ¤»¤ó"
+msgstr "E523: ã“ã“ã§ã¯è¨±å¯ã•ã‚Œã¾ã›ã‚“"
 
 msgid "E359: Screen mode setting not supported"
-msgstr "E359: Â¥Â¹Â¥Â¯Â¥ÃªÂ¡Â¼Â¥Ã³Â¥Ã¢Â¡Â¼Â¥Ã‰Â¤ÃŽÃ€ÃŸÃ„ê¤Ë¤ÃÂñþ¤·¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E359: ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ãƒ¢ãƒ¼ãƒ‰ã®è¨­å®šã«ã¯å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“"
 
 msgid "E49: Invalid scroll size"
-msgstr "E49: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¥Â¹Â¥Â¯Â¥Ã­Â¡Â¼Â¥Ã«ÃŽÃŒÂ¤Ã‡Â¤Â¹"
+msgstr "E49: ç„¡åŠ¹ãªã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«é‡ã§ã™"
 
 msgid "E91: 'shell' option is empty"
-msgstr "E91: 'shell' Â¥ÂªÂ¥Ã—¥·¥ç¥ó¤¬¶õ¤Ç¤¹"
+msgstr "E91: 'shell' ã‚ªãƒ—ションãŒç©ºã§ã™"
 
 msgid "E255: Couldn't read in sign data!"
-msgstr "E255: sign Â¤ÃŽÂ¥Ã‡Â¡Â¼Â¥Â¿Â¤Ã²Ã†Ã‰Â¹Ã¾Â¤Ã¡Â¤ÃžÂ¤Â»Â¤Ã³Â¤Ã‡Â¤Â·Â¤Â¿"
+msgstr "E255: sign ã®ãƒ‡ãƒ¼ã‚¿ã‚’読込ã‚ã¾ã›ã‚“ã§ã—ãŸ"
 
 msgid "E72: Close error on swap file"
-msgstr "E72: Â¥Â¹Â¥Ã¯Â¥ÃƒÂ¥Ã—¥Õ¥¡¥¤¥ë¤Î¥¯¥í¡¼¥º»þ¥¨¥é¡¼¤Ç¤¹"
+msgstr "E72: ã‚¹ãƒ¯ãƒƒãƒ—ファイルã®ã‚¯ãƒ­ãƒ¼ã‚ºæ™‚エラーã§ã™"
 
 msgid "E73: tag stack empty"
-msgstr "E73: Â¥Â¿Â¥Â°Â¥Â¹Â¥Â¿Â¥ÃƒÂ¥Â¯Â¤Â¬Â¶ÃµÂ¤Ã‡Â¤Â¹"
+msgstr "E73: ã‚¿ã‚°ã‚¹ã‚¿ãƒƒã‚¯ãŒç©ºã§ã™"
 
 msgid "E74: Command too complex"
-msgstr "E74: Â¥Â³Â¥ÃžÂ¥Ã³Â¥Ã‰Â¤Â¬ÃŠÂ£Â»Â¨Â²Ã¡Â¤Â®Â¤ÃžÂ¤Â¹"
+msgstr "E74: ã‚³ãƒžãƒ³ãƒ‰ãŒè¤‡é›‘éŽãŽã¾ã™"
 
 msgid "E75: Name too long"
-msgstr "E75: ÃŒÂ¾Ã°¤¬Ä¹²á¤®¤Þ¤¹"
+msgstr "E75: åå‰ãŒé•·éŽãŽã¾ã™"
 
 msgid "E76: Too many ["
-msgstr "E76: [ Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+msgstr "E76: [ ãŒå¤šéŽãŽã¾ã™"
 
 msgid "E77: Too many file names"
-msgstr "E77: Â¥Ã•Â¥Â¡Â¥Â¤Â¥Ã«ÃŒÂ¾Â¤Â¬Ã‚¿²á¤®¤Þ¤¹"
+msgstr "E77: ãƒ•ã‚¡ã‚¤ãƒ«åãŒå¤šéŽãŽã¾ã™"
 
 msgid "E488: Trailing characters"
-msgstr "E488: Ã¾Ê¬¤Êʸ»ú¤¬¸å¤í¤Ë¤¢¤ê¤Þ¤¹"
+msgstr "E488: ä½™åˆ†ãªæ–‡å­—ãŒå¾Œã‚ã«ã‚ã‚Šã¾ã™"
 
 msgid "E78: Unknown mark"
-msgstr "E78: ÃŒÂ¤ÃƒÃŽÂ¤ÃŽÂ¥ÃžÂ¡Â¼Â¥Â¯"
+msgstr "E78: Ã¦\9cªç\9f¥ã\81®ã\83\9eã\83¼ã\82¯"
 
 msgid "E79: Cannot expand wildcards"
-msgstr "E79: Â¥Ã¯Â¥Â¤Â¥Ã«Â¥Ã‰Â¥Â«Â¡Â¼Â¥Ã‰Â¤Ã²Ã…¸³«¤Ç¤­¤Þ¤»¤ó"
+msgstr "E79: ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã‚’展開ã§ãã¾ã›ã‚“"
 
 msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr "E591: 'winheight' Â¤Ã 'winminheight' Â¤Ã¨Â¤ÃªÂ¾Â®Â¤ÂµÂ¤Â¯Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E591: 'winheight' ã¯ 'winminheight' ã‚ˆã‚Šå°ã•ãã§ãã¾ã›ã‚“"
 
 msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr "E592: 'winwidth' Â¤Ã 'winminwidth' Â¤Ã¨Â¤ÃªÂ¾Â®Â¤ÂµÂ¤Â¯Â¤Ã‡Â¤Â­Â¤ÃžÂ¤Â»Â¤Ã³"
+msgstr "E592: 'winwidth' ã¯ 'winminwidth' ã‚ˆã‚Šå°ã•ãã§ãã¾ã›ã‚“"
 
 msgid "E80: Error while writing"
-msgstr "E80: Â½Ã±Â¹Ã¾Â¤ÃŸÃƒÃ¦Â¤ÃŽÂ¥Â¨Â¥Ã©Â¡Â¼"
+msgstr "E80: Ã¦\9b¸è¾¼ã\81¿ä¸­ã\81®ã\82¨ã\83©ã\83¼"
 
 msgid "Zero count"
-msgstr "¥¼¥í¥«¥¦¥ó¥È"
+msgstr "ゼロカウント"
 
 msgid "E81: Using <SID> not in a script context"
-msgstr "E81: Â¥Â¹Â¥Â¯Â¥ÃªÂ¥Ã—¥È°Ê³°¤Ç<SID>¤¬»È¤ï¤ì¤Þ¤·¤¿"
+msgstr "E81: ã‚¹ã‚¯ãƒªãƒ—ト以外ã§<SID>ãŒä½¿ã‚ã‚Œã¾ã—ãŸ"
 
 msgid "E449: Invalid expression received"
-msgstr "E449: ÃŒÂµÂ¸ÃºÂ¤ÃŠÂ¼Â°Â¤Ã²Â¼ÃµÂ¤Â±Â¼Ã¨Â¤ÃªÂ¤ÃžÂ¤Â·Â¤Â¿"
+msgstr "E449: ç„¡åŠ¹ãªå¼ã‚’å—ã‘å–ã‚Šã¾ã—ãŸ"
 
 msgid "E463: Region is guarded, cannot modify"
-msgstr "E463: ÃŽÃŽÂ°Ã¨Â¤Â¬ÃŠÃ¸î¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç, ÃŠÃ‘¹¹¤Ç¤­¤Þ¤»¤ó"
+msgstr "E463: é ˜åŸŸãŒä¿è­·ã•ã‚Œã¦ã„ã‚‹ã®ã§, å¤‰æ›´ã§ãã¾ã›ã‚“"
 
 msgid "E744: NetBeans does not allow changes in read-only files"
-msgstr "E744: NetBeans Â¤ÃÆɹþÀìÃÑ¥Õ¥¡¥¤¥ë¤òÊѹ¹¤¹¤ë¤³¤È¤òµö¤·¤Þ¤»¤ó"
+msgstr "E744: NetBeans ã¯èª­è¾¼å°‚用ファイルを変更ã™ã‚‹ã“ã¨ã‚’許ã—ã¾ã›ã‚“"
 
 #, c-format
 msgid "E685: Internal error: %s"
-msgstr "E685: Ã†Ã¢Ã‰Ã´Â¥Â¨Â¥Ã©Â¡Â¼Â¤Ã‡Â¤Â¹: %s"
+msgstr "E685: å†…部エラーã§ã™: %s"
 
 msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr "E363: Â¥Ã‘¥¿¡¼¥ó¤¬ 'maxmempattern' Â°ÃŠÂ¾Ã¥Â¤ÃŽÂ¥Ã¡Â¥Ã¢Â¥ÃªÂ¤Ã²Â»ÃˆÃѤ·¤Þ¤¹"
+msgstr "E363: ãƒ‘ターン㌠'maxmempattern' ä»¥ä¸Šã®ãƒ¡ãƒ¢ãƒªã‚’使用ã—ã¾ã™"
 
 msgid "E749: empty buffer"
-msgstr "E749: Â¥Ã¥Ã¥Õ¥¡¤¬¶õ¤Ç¤¹"
+msgstr "E749: ãƒãƒƒãƒ•ã‚¡ãŒç©ºã§ã™"
 
 msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: Â¸Â¡ÂºÃ·Â¥Ã‘¥¿¡¼¥ó¤«¶èÀڤ국¹æ¤¬ÉÔÀµ¤Ç¤¹"
+msgstr "E682: æ¤œç´¢ãƒ‘ターンã‹åŒºåˆ‡ã‚Šè¨˜å·ãŒä¸æ­£ã§ã™"
 
 msgid "E139: File is loaded in another buffer"
-msgstr "E139: Ã†Â±Â¤Â¸ÃŒÂ¾Ã°¤Î¥Õ¥¡¥¤¥ë¤¬Â¾¤Î¥Ã¥Ã¥Õ¥¡¤ÇÆɹþ¤Þ¤ì¤Æ¤¤¤Þ¤¹"
+msgstr "E139: åŒã˜åå‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒä»–ã®ãƒãƒƒãƒ•ã‚¡ã§èª­è¾¼ã¾ã‚Œã¦ã„ã¾ã™"
 
 #, c-format
 msgid "E764: Option '%s' is not set"
-msgstr "E764: Â¥ÂªÂ¥Ã—¥·¥ç¥ó '%s' Â¤ÃÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
+msgstr "E764: ã‚ªãƒ—ション '%s' ã¯è¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+msgid "E850: Invalid register name"
+msgstr "E850: ç„¡åŠ¹ãªãƒ¬ã‚¸ã‚¹ã‚¿åã§ã™"
 
 msgid "search hit TOP, continuing at BOTTOM"
-msgstr "¾å¤Þ¤Ç¸¡º÷¤·¤¿¤Î¤Ç²¼¤ËÌá¤ê¤Þ¤¹"
+msgstr "上ã¾ã§æ¤œç´¢ã—ãŸã®ã§ä¸‹ã«æˆ»ã‚Šã¾ã™"
 
 msgid "search hit BOTTOM, continuing at TOP"
-msgstr "²¼¤Þ¤Ç¸¡º÷¤·¤¿¤Î¤Ç¾å¤ËÌá¤ê¤Þ¤¹"
+msgstr "下ã¾ã§æ¤œç´¢ã—ãŸã®ã§ä¸Šã«æˆ»ã‚Šã¾ã™"
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "æš—å·ã‚­ãƒ¼ãŒå¿…è¦ã§ã™: \"%s\""
+
+msgid "empty keys are not allowed"
+msgstr "空ã®ã‚­ãƒ¼ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+msgid "dictionary is locked"
+msgstr "辞書ã¯ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™"
+
+msgid "list is locked"
+msgstr "リストã¯ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™"
+
+#, c-format
+msgid "failed to add key '%s' to dictionary"
+msgstr "辞書ã«ã‚­ãƒ¼ '%s' ã‚’追加ã™ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#, c-format
+msgid "index must be int or slice, not %s"
+msgstr "インデックス㯠%s ã§ã¯ãªãæ•´æ•°ã‹ã‚¹ãƒ©ã‚¤ã‚¹ã«ã—ã¦ãã ã•ã„"
+
+#, c-format
+msgid "expected str() or unicode() instance, but got %s"
+msgstr "str() ã‚‚ã—ã㯠unicode() ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒæœŸå¾…ã•ã‚Œã¦ã„ã‚‹ã®ã« %s ã§ã—ãŸ"
+
+#, c-format
+msgid "expected bytes() or str() instance, but got %s"
+msgstr "bytes() ã‚‚ã—ã㯠str() ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒæœŸå¾…ã•ã‚Œã¦ã„ã‚‹ã®ã« %s ã§ã—ãŸ"
+
+#, c-format
+msgid ""
+"expected int(), long() or something supporting coercing to long(), but got %s"
+msgstr "long() ã‹ãã‚Œã¸å¤‰æ›å¯èƒ½ãªã‚‚ã®ãŒæœŸå¾…ã•ã‚Œã¦ã„ã‚‹ã®ã« %s ã§ã—ãŸ"
+
+#, c-format
+msgid "expected int() or something supporting coercing to int(), but got %s"
+msgstr "int() ã‹ãã‚Œã¸å¤‰æ›å¯èƒ½ãªã‚‚ã®ãŒæœŸå¾…ã•ã‚Œã¦ã„ã‚‹ã®ã« %s ã§ã—ãŸ"
+
+msgid "value is too large to fit into C int type"
+msgstr "C言語㮠int åž‹ã¨ã—ã¦ã¯å€¤ãŒå¤§ãéŽãŽã¾ã™"
+
+msgid "value is too small to fit into C int type"
+msgstr "C言語㮠int åž‹ã¨ã—ã¦ã¯å€¤ãŒå°ã•éŽãŽã¾ã™"
+
+msgid "number must be greater then zero"
+msgstr "数値㯠0 ã‚ˆã‚Šå¤§ãããªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+msgid "number must be greater or equal to zero"
+msgstr "数値㯠0 ã‹ãれ以上ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+msgid "can't delete OutputObject attributes"
+msgstr "OutputObject属性を消ã›ã¾ã›ã‚“"
+
+#, c-format
+msgid "invalid attribute: %s"
+msgstr "無効ãªå±žæ€§ã§ã™: %s"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: I/Oオブジェクトã®åˆæœŸåŒ–エラー"
+
+msgid "failed to change directory"
+msgstr "辞書ã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got %s"
+msgstr "imp.find_module() ãŒ %s ã‚’è¿”ã—ã¾ã—㟠(期待値: 2 è¦ç´ ã®ã‚¿ãƒ—ル)"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
+msgstr "impl.find_module() ãŒ %d è¦ç´ ã®ã‚¿ãƒ—ルを返ã—ã¾ã—㟠(期待値: 2)"
+
+msgid "internal error: imp.find_module returned tuple with NULL"
+msgstr "内部エラー: imp.find_module ãŒ NULL ã‚’å«ã‚€ã‚¿ãƒ—ルを返ã—ã¾ã—ãŸ"
+
+msgid "cannot delete vim.Dictionary attributes"
+msgstr "vim.Dictionary属性ã¯æ¶ˆã›ã¾ã›ã‚“"
+
+msgid "cannot modify fixed dictionary"
+msgstr "固定ã•ã‚ŒãŸè¾žæ›¸ã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "cannot set attribute %s"
+msgstr "属性 %s ã¯è¨­å®šã§ãã¾ã›ã‚“"
+
+msgid "hashtab changed during iteration"
+msgstr "イテレーション中㫠hashtab ãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
+
+#, c-format
+msgid "expected sequence element of size 2, but got sequence of size %d"
+msgstr "シーケンスã®è¦ç´ æ•°ã«ã¯ 2 ãŒæœŸå¾…ã•ã‚Œã¦ã„ã¾ã—ãŸãŒ %d ã§ã—ãŸ"
+
+msgid "list constructor does not accept keyword arguments"
+msgstr "リストã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã¯ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰å¼•æ•°ã‚’å—ã‘付ã‘ã¾ã›ã‚“"
+
+msgid "list index out of range"
+msgstr "リスト範囲外ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã§ã™"
+
+#. No more suitable format specifications in python-2.3
+#, c-format
+msgid "internal error: failed to get vim list item %d"
+msgstr "内部エラー: vimã®ãƒªã‚¹ãƒˆè¦ç´  %d ã®å–å¾—ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "failed to add item to list"
+msgstr "リストã¸ã®è¦ç´ è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#, c-format
+msgid "internal error: no vim list item %d"
+msgstr "内部エラー: vimã®ãƒªã‚¹ãƒˆè¦ç´  %d ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+msgid "internal error: failed to add item to list"
+msgstr "内部エラー: ãƒªã‚¹ãƒˆã¸ã®è¦ç´ è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "cannot delete vim.List attributes"
+msgstr "vim.List å±žæ€§ã¯æ¶ˆã›ã¾ã›ã‚“"
+
+msgid "cannot modify fixed list"
+msgstr "固定ã•ã‚ŒãŸãƒªã‚¹ãƒˆã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "unnamed function %s does not exist"
+msgstr "ç„¡å関数 %s ã¯å­˜åœ¨ã—ã¾ã›ã‚“"
+
+#, c-format
+msgid "function %s does not exist"
+msgstr "関数 %s ãŒã‚ã‚Šã¾ã›ã‚“"
+
+msgid "function constructor does not accept keyword arguments"
+msgstr "関数ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã¯ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰å¼•æ•°ã‚’å—ã‘付ã‘ã¾ã›ã‚“"
+
+#, c-format
+msgid "failed to run function %s"
+msgstr "関数 %s ã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "unable to get option value"
+msgstr "オプションã®å€¤ã¯å–å¾—ã§ãã¾ã›ã‚“"
+
+msgid "internal error: unknown option type"
+msgstr "内部エラー: æœªçŸ¥ã®ã‚ªãƒ—ション型ã§ã™"
+
+msgid "problem while switching windows"
+msgstr "ウィンドウを切æ›ä¸­ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸ"
+
+#, c-format
+msgid "unable to unset global option %s"
+msgstr "グローãƒãƒ«ã‚ªãƒ—ション %s ã®è¨­å®šè§£é™¤ã¯ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "unable to unset option %s which does not have global value"
+msgstr "グローãƒãƒ«ãªå€¤ã®ç„¡ã„オプション %s ã®è¨­å®šè§£é™¤ã¯ã§ãã¾ã›ã‚“"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "削除ã•ã‚ŒãŸã‚¿ãƒ–ã‚’å‚ç…§ã—よã†ã¨ã—ã¾ã—ãŸ"
+
+msgid "no such tab page"
+msgstr "ãã®ã‚ˆã†ãªã‚¿ãƒ–ページã¯ã‚ã‚Šã¾ã›ã‚“"
+
+msgid "attempt to refer to deleted window"
+msgstr "削除ã•ã‚ŒãŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’å‚ç…§ã—よã†ã¨ã—ã¾ã—ãŸ"
+
+msgid "readonly attribute: buffer"
+msgstr "読込専用属性: ãƒãƒƒãƒ•ã‚¡ãƒ¼"
+
+msgid "cursor position outside buffer"
+msgstr "カーソルä½ç½®ãŒãƒãƒƒãƒ•ã‚¡ã®å¤–å´ã§ã™"
+
+msgid "no such window"
+msgstr "ãã®ã‚ˆã†ãªã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "削除ã•ã‚ŒãŸãƒãƒƒãƒ•ã‚¡ã‚’å‚ç…§ã—よã†ã¨ã—ã¾ã—ãŸ"
+
+msgid "failed to rename buffer"
+msgstr "ãƒãƒƒãƒ•ã‚¡åã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "mark name must be a single character"
+msgstr "マークåã¯1文字ã®ã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“"
+
+#, c-format
+msgid "expected vim.Buffer object, but got %s"
+msgstr "vim.BufferオブジェクトãŒæœŸå¾…ã•ã‚Œã¦ã„ã‚‹ã®ã« %s ã§ã—ãŸ"
+
+#, c-format
+msgid "failed to switch to buffer %d"
+msgstr "指定ã•ã‚ŒãŸãƒãƒƒãƒ•ã‚¡ %d ã¸ã®åˆ‡ã‚Šæ›¿ãˆã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#, c-format
+msgid "expected vim.Window object, but got %s"
+msgstr "vim.WindowオブジェクトãŒæœŸå¾…ã•ã‚Œã¦ã„ã‚‹ã®ã« %s ã§ã—ãŸ"
+
+msgid "failed to find window in the current tab page"
+msgstr "ç¾åœ¨ã®ã‚¿ãƒ–ã«ã¯æŒ‡å®šã•ã‚ŒãŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãŒã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
+
+msgid "did not switch to the specified window"
+msgstr "指定ã•ã‚ŒãŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«åˆ‡ã‚Šæ›¿ãˆã¾ã›ã‚“ã§ã—ãŸ"
+
+#, c-format
+msgid "expected vim.TabPage object, but got %s"
+msgstr "vim.TabPageオブジェクトãŒæœŸå¾…ã•ã‚Œã¦ã„ã‚‹ã®ã« %s ã§ã—ãŸ"
+
+msgid "did not switch to the specified tab page"
+msgstr "指定ã•ã‚ŒãŸã‚¿ãƒ–ページã«åˆ‡ã‚Šæ›¿ãˆã¾ã›ã‚“ã§ã—ãŸ"
+
+msgid "failed to run the code"
+msgstr "コードã®å®Ÿè¡Œã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: å¼è©•ä¾¡ã¯æœ‰åŠ¹ãªpythonオブジェクトを返ã—ã¾ã›ã‚“ã§ã—ãŸ"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: è¿”ã•ã‚ŒãŸpythonオブジェクトをvimã®å€¤ã«å¤‰æ›ã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#, c-format
+msgid "unable to convert %s to vim dictionary"
+msgstr "%s vimã®è¾žæ›¸åž‹ã«å¤‰æ›ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "unable to convert %s to vim structure"
+msgstr "%s ã‚’vimã®æ§‹é€ ä½“ã«å¤‰æ›ã§ãã¾ã›ã‚“"
+
+msgid "internal error: NULL reference passed"
+msgstr "内部エラー: NULLå‚ç…§ãŒæ¸¡ã•ã‚Œã¾ã—ãŸ"
+
+msgid "internal error: invalid value type"
+msgstr "内部エラー: ç„¡åŠ¹ãªå€¤åž‹ã§ã™"
+
+msgid ""
+"Failed to set path hook: sys.path_hooks is not a list\n"
+"You should now do the following:\n"
+"- append vim.path_hook to sys.path_hooks\n"
+"- append vim.VIM_SPECIAL_PATH to sys.path\n"
+msgstr ""
+"パスフックã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: sys.path_hooks ãŒãƒªã‚¹ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
+"ã™ãã«ä¸‹è¨˜ã‚’実施ã—ã¦ãã ã•ã„:\n"
+"- vim.path_hooks ã‚’ sys.path_hooks ã¸è¿½åŠ \n"
+"- vim.VIM_SPECIAL_PATH ã‚’ sys.path ã¸è¿½åŠ \n"
+
+msgid ""
+"Failed to set path: sys.path is not a list\n"
+"You should now append vim.VIM_SPECIAL_PATH to sys.path"
+msgstr ""
+"パスã®è¨­å®šã«å¤±æ•—ã—ã¾ã—ãŸ: sys.path ãŒãƒªã‚¹ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
+"ã™ãã« vim.VIM_SPECIAL_PATH ã‚’ sys.path ã«è¿½åŠ ã—ã¦ãã ã•ã„"
index f80cde7..2765942 100644 (file)
@@ -3,21 +3,50 @@
 # Do ":help uganda"  in Vim to read copying and usage conditions.
 # Do ":help credits" in Vim to see a list of people who contributed.
 #
-# MURAOKA Taro <koron.kaoriya@gmail.com>, 2001-8.
-# Last Change: 31-May-2008.
+# Last Change: 2013 Jul 06
+#
+# Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
+# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+#
+# Original translations.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 7.1\n"
+"Project-Id-Version: Vim 7.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-05-31 22:00+0900\n"
-"PO-Revision-Date: 2008-05-31 22:30+0900\n"
+"POT-Creation-Date: 2013-07-06 13:50+0900\n"
+"PO-Revision-Date: 2013-07-06 15:00+0900\n"
 "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
 "Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+"Language: Japanese\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=cp932\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() \82ª\8bó\83p\83X\83\8f\81[\83h\82Ã…\8cÄ\82Ñ\8fo\82³\82ê\82Ãœ\82µ\82½"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: Blowfish\88Ã\8d\86\82ÃŒ\83r\83b\83O/\83\8a\83g\83\8b\83G\83\93\83f\83B\83A\83\93\82ª\8aÔ\88á\82Ã\82Ä\82¢\82Ãœ\82·"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256\82ÃŒ\83e\83X\83g\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Blowfish\88Ã\8d\86\82ÃŒ\83e\83X\83g\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+msgid "[Location List]"
+msgstr "[\8fê\8f\8a\83\8a\83X\83g]"
+
+msgid "[Quickfix List]"
+msgstr "[Quickfix\83\8a\83X\83g]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: autocommand\82ª\83R\83}\83\93\83h\82ÃŒ\92â\8e~\82ð\88ø\82«\8bN\82±\82µ\82Ãœ\82µ\82½"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: \83o\83b\83t\83@\82ð1\82Â\82à\8dì\90¬\82Ã…\82«\82È\82¢\82ÃŒ\82Ã…, \8fI\97¹\82µ\82Ãœ\82·..."
 
@@ -83,7 +112,7 @@ msgstr "W14: 
 
 #, c-format
 msgid "E92: Buffer %ld not found"
-msgstr "E92: \83o\83b\83t\83@ %ld \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E92: \83o\83b\83t\83@ %ld \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E93: More than one match for %s"
@@ -112,6 +141,9 @@ msgstr "[
 msgid "[Read errors]"
 msgstr "[\93Ç\8d\9e\83G\83\89\81[]"
 
+msgid "[RO]"
+msgstr "[\93Ç\90ê]"
+
 msgid "[readonly]"
 msgstr "[\93Ç\8d\9e\90ê\97p]"
 
@@ -149,7 +181,6 @@ msgstr "
 msgid "Top"
 msgstr "\90æ\93ª"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -157,11 +188,8 @@ msgstr ""
 "\n"
 "# \83o\83b\83t\83@\83\8a\83X\83g:\n"
 
-msgid "[Location List]"
-msgstr "[\8fê\8f\8a\83\8a\83X\83g]"
-
-msgid "[Quickfix List]"
-msgstr "[Quickfix\83\8a\83X\83g]"
+msgid "[Scratch]"
+msgstr "[\89º\8f\91\82«]"
 
 msgid ""
 "\n"
@@ -182,12 +210,18 @@ msgstr "    
 msgid "E96: Can not diff more than %ld buffers"
 msgstr "E96: %ld \88È\8fã\82ÃŒ\83o\83b\83t\83@\82Ãdiff\82Ã…\82«\82Ãœ\82¹\82ñ"
 
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: \88ê\8e\9e\83t\83@\83C\83\8b\82ÃŒ\93Ç\8d\9e\82à\82µ\82­\82Ã\8f\91\8d\9e\82ª\82Ã…\82«\82Ãœ\82¹\82ñ"
+
 msgid "E97: Cannot create diffs"
 msgstr "E97: \8d·\95ª\82ð\8dì\90¬\82Ã…\82«\82Ãœ\82¹\82ñ "
 
 msgid "Patch file"
 msgstr "\83p\83b\83`\83t\83@\83C\83\8b"
 
+msgid "E816: Cannot read patch output"
+msgstr "E816: patch\82ÃŒ\8fo\97Ã\82ð\93Ç\8d\9e\82ß\82Ãœ\82¹\82ñ"
+
 msgid "E98: Cannot read diff output"
 msgstr "E98: diff\82ÃŒ\8fo\97Ã\82ð\93Ç\8d\9e\82ß\82Ãœ\82¹\82ñ"
 
@@ -206,7 +240,7 @@ msgstr ""
 
 #, c-format
 msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: \83o\83b\83t\83@ \"%s\" \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E102: \83o\83b\83t\83@ \"%s\" \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E103: Buffer \"%s\" is not in diff mode"
@@ -219,7 +253,7 @@ msgid "E104: Escape not allowed in digraph"
 msgstr "E104: \8d\87\8e\9a\82ÉEscape\82Ã\8eg\97p\82Ã…\82«\82Ãœ\82¹\82ñ"
 
 msgid "E544: Keymap file not found"
-msgstr "E544: \83L\81[\83}\83b\83v\83t\83@\83C\83\8b\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E544: \83L\81[\83}\83b\83v\83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "E105: Using :loadkeymap not in a sourced file"
 msgstr "E105: :source \82Ã…\8eæ\8d\9e\82Þ\83t\83@\83C\83\8b\88È\8aO\82Ã…\82à:loadkeymap \82ð\8eg\82¦\82Ãœ\82¹\82ñ"
@@ -273,6 +307,12 @@ msgstr " 
 msgid "Hit end of paragraph"
 msgstr "\92i\97\8e\82ÃŒ\8dÃ…\8cã\82É\83q\83b\83g"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: \95â\8aÔ\8aÖ\90\94\82ª\83E\83B\83\93\83h\83E\82ð\95Ã\8dX\82µ\82Ãœ\82µ\82½"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: \95â\8a®\8aÖ\90\94\82ª\83e\83L\83X\83g\82ð\8dí\8f\9c\82µ\82Ãœ\82µ\82½"
+
 msgid "'dictionary' option is empty"
 msgstr "'dictionary' \83I\83v\83V\83\87\83\93\82ª\8bó\82Ã…\82·"
 
@@ -293,7 +333,6 @@ msgstr " (
 msgid "Scanning: %s"
 msgstr "\83X\83L\83\83\83\93\92\86: %s"
 
-#, c-format
 msgid "Scanning tags."
 msgstr "\83^\83O\82ð\83X\83L\83\83\83\93\92\86."
 
@@ -336,7 +375,7 @@ msgid "E121: Undefined variable: %s"
 msgstr "E121: \96¢\92è\8b`\82ÃŒ\95Ã\90\94\82Ã…\82·: %s"
 
 msgid "E111: Missing ']'"
-msgstr "E111: ']' \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E111: ']' \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E686: Argument of %s must be a List"
@@ -388,6 +427,9 @@ msgstr "E130: 
 msgid "E461: Illegal variable name: %s"
 msgstr "E461: \95s\90³\82È\95Ã\90\94\96¼\82Ã…\82·: %s"
 
+msgid "E806: using Float as a String"
+msgstr "E806: \95\82\93®\8f¬\90\94\93_\90\94\82ð\95¶\8e\9a\97ñ\82Æ\82µ\82Ä\88µ\82Ã\82Ä\82¢\82Ãœ\82·"
+
 msgid "E687: Less targets than List items"
 msgstr "E687: \83^\81[\83Q\83b\83g\82ª\83\8a\83X\83g\8c^\93à\82ÃŒ\97v\91f\82æ\82è\82à\8f­\82È\82¢\82Ã…\82·"
 
@@ -429,7 +471,7 @@ msgid "E108: No such variable: \"%s\""
 msgstr "E108: \82»\82ÃŒ\95Ã\90\94\82Ã\82 \82è\82Ãœ\82¹\82ñ: \"%s\""
 
 msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: (\83A\83\93\83`)\83\8d\83b\83N\82·\82é\82É\82Ã\95Ã\90\94\82ÃŒ\93ü\82ê\8eq\82ª\90[\89ß\82¬\82Ãœ\82·"
+msgstr "E743: (\83A\83\93)\83\8d\83b\83N\82·\82é\82É\82Ã\95Ã\90\94\82ÃŒ\93ü\82ê\8eq\82ª\90[\89ß\82¬\82Ãœ\82·"
 
 msgid "E109: Missing ':' after '?'"
 msgstr "E109: '?' \82ÃŒ\8cã\82É ':' \82ª\82 \82è\82Ãœ\82¹\82ñ"
@@ -452,8 +494,11 @@ msgstr "E693: 
 msgid "E694: Invalid operation for Funcrefs"
 msgstr "E694: \8aÖ\90\94\8eQ\8fÆ\8c^\82É\82Ã\96³\8cø\82È\91\80\8dì\82Ã…\82·"
 
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: '%' \82ð\95\82\93®\8f¬\90\94\93_\90\94\82Æ\91g\82Ã\8d\87\82í\82¹\82Ä\82Ã\8eg\82¦\82Ãœ\82¹\82ñ"
+
 msgid "E110: Missing ')'"
-msgstr "E110: ')' \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E110: ')' \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "E695: Cannot index a Funcref"
 msgstr "E695: \8aÖ\90\94\8eQ\8fÆ\8c^\82Ã\83C\83\93\83f\83b\83N\83X\82Ã…\82«\82Ãœ\82¹\82ñ"
@@ -502,6 +547,14 @@ msgid "E724: variable nested too deep for displaying"
 msgstr "E724: \95\\\8e¦\82·\82é\82É\82Ã\95Ã\90\94\82ÃŒ\93ü\82ê\8eq\82ª\90[\89ß\82¬\82Ãœ\82·"
 
 #, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: \8aÖ\90\94\82ÃŒ\88ø\90\94\82ª\91½\89ß\82¬\82Ãœ\82·: %s"
+
+#, c-format
+msgid "E116: Invalid arguments for function %s"
+msgstr "E116: \8aÖ\90\94\82ÃŒ\96³\8cø\82È\88ø\90\94\82Ã…\82·: %s"
+
+#, c-format
 msgid "E117: Unknown function: %s"
 msgstr "E117: \96¢\92m\82ÃŒ\8aÖ\90\94\82Ã…\82·: %s"
 
@@ -517,8 +570,14 @@ msgstr "E120: 
 msgid "E725: Calling dict function without Dictionary: %s"
 msgstr "E725: \8e«\8f\91\97p\8aÖ\90\94\82ª\8cÄ\82ÃŽ\82ê\82Ãœ\82µ\82½\82ª\8e«\8f\91\82ª\82 \82è\82Ãœ\82¹\82ñ: %s"
 
+msgid "E808: Number or Float required"
+msgstr "E808: \90\94\92l\82©\95\82\93®\8f¬\90\94\93_\90\94\82ª\95K\97v\82Ã…\82·"
+
+msgid "add() argument"
+msgstr "add() \82ÃŒ\88ø\90\94"
+
 msgid "E699: Too many arguments"
-msgstr "E699: \82ª\91½\89ß\82¬\82Ãœ\82·"
+msgstr "E699: \88ø\90\94\82ª\91½\89ß\82¬\82Ãœ\82·"
 
 msgid "E785: complete() can only be used in Insert mode"
 msgstr "E785: complete() \82Ã\91}\93ü\83\82\81[\83h\82Ã…\82µ\82©\97\98\97p\82Ã…\82«\82Ãœ\82¹\82ñ"
@@ -533,11 +592,20 @@ msgstr "&Ok"
 
 #, c-format
 msgid "E737: Key already exists: %s"
-msgstr "E737: %s \82Æ\82¢\82¤\83L\81[\82Ã\8aù\82É\91¶\8dÃ\82µ\82Ãœ\82·"
+msgstr "E737: \83L\81[\82Ã\8aù\82É\91¶\8dÃ\82µ\82Ãœ\82·: %s"
+
+msgid "extend() argument"
+msgstr "extend() \82ÃŒ\88ø\90\94"
+
+msgid "map() argument"
+msgstr "map() \82ÃŒ\88ø\90\94"
+
+msgid "filter() argument"
+msgstr "filter() \82ÃŒ\88ø\90\94"
 
 #, c-format
 msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld \8ds:"
+msgstr "+-%s%3ld \8ds: "
 
 #, c-format
 msgid "E700: Unknown function: %s"
@@ -553,6 +621,9 @@ msgstr ""
 msgid "called inputrestore() more often than inputsave()"
 msgstr "inputrestore() \82ª inputsave() \82æ\82è\82à\91½\82­\8cÄ\82ÃŽ\82ê\82Ãœ\82µ\82½"
 
+msgid "insert() argument"
+msgstr "insert() \82ÃŒ\88ø\90\94"
+
 msgid "E786: Range not allowed"
 msgstr "E786: \94Ã\88Ã\8ew\92è\82Ã\8b\96\89Â\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
 
@@ -578,13 +649,22 @@ msgstr "E241: %s 
 msgid "E277: Unable to read a server reply"
 msgstr "E277: \83T\81[\83o\82ÃŒ\89\9e\93\9a\82ª\82 \82è\82Ãœ\82¹\82ñ"
 
+msgid "remove() argument"
+msgstr "remove() \82ÃŒ\88ø\90\94"
+
 # Added at 10-Mar-2004.
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: \83V\83\93\83{\83\8a\83b\83N\83\8a\83\93\83N\82ª\91½\89ß\82¬\82Ãœ\82· (\8fz\8aÂ\82µ\82Ä\82¢\82é\89Â\94\\\90«\82ª\82 \82è\82Ãœ\82·)"
 
+msgid "reverse() argument"
+msgstr "reverse() \82ÃŒ\88ø\90\94"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: \83N\83\89\83C\83A\83\93\83g\82Ö\91\97\82é\82±\82Æ\82ª\82Ã…\82«\82Ãœ\82¹\82ñ"
 
+msgid "sort() argument"
+msgstr "sort() \82ÃŒ\88ø\90\94"
+
 msgid "E702: Sort compare function failed"
 msgstr "E702: \83\\\81[\83g\82ÃŒ\94ä\8ar\8aÖ\90\94\82ª\8e¸\94s\82µ\82Ãœ\82µ\82½"
 
@@ -594,6 +674,9 @@ msgstr "(
 msgid "E677: Error writing temp file"
 msgstr "E677: \88ê\8e\9e\83t\83@\83C\83\8b\8f\91\8d\9e\92\86\82É\83G\83\89\81[\82ª\94­\90¶\82µ\82Ãœ\82µ\82½"
 
+msgid "E805: Using a Float as a Number"
+msgstr "E805: \95\82\93®\8f¬\90\94\93_\90\94\82ð\90\94\92l\82Æ\82µ\82Ä\88µ\82Ã\82Ä\82¢\82Ãœ\82·"
+
 msgid "E703: Using a Funcref as a Number"
 msgstr "E703: \8aÖ\90\94\8eQ\8fÆ\8c^\82ð\90\94\92l\82Æ\82µ\82Ä\88µ\82Ã\82Ä\82¢\82Ãœ\82·\81B"
 
@@ -610,15 +693,7 @@ msgid "E730: using List as a String"
 msgstr "E730: \83\8a\83X\83g\8c^\82ð\95¶\8e\9a\97ñ\82Æ\82µ\82Ä\88µ\82Ã\82Ä\82¢\82Ãœ\82·"
 
 msgid "E731: using Dictionary as a String"
-msgstr "E731: \95Ã\90\94\8c^\82ð\95¶\8e\9a\97ñ\82Æ\82µ\82Ä\88µ\82Ã\82Ä\82¢\82Ãœ\82·"
-
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: \8aÖ\90\94\8eQ\8fÆ\8c^\95Ã\90\94\96¼\82Ã\91Ã¥\95¶\8e\9a\82Ã…\8en\82Ãœ\82ç\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ: %s"
-
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: \95Ã\90\94\96¼\82ª\8aù\91¶\82ÃŒ\8aÖ\90\94\96¼\82Æ\8fÕ\93Ë\82µ\82Ãœ\82·: %s"
+msgstr "E731: \8e«\8f\91\8c^\82ð\95¶\8e\9a\97ñ\82Æ\82µ\82Ä\88µ\82Ã\82Ä\82¢\82Ãœ\82·"
 
 #, c-format
 msgid "E706: Variable type mismatch for: %s"
@@ -629,6 +704,14 @@ msgid "E795: Cannot delete variable %s"
 msgstr "E795: \95Ã\90\94 %s \82ð\8dí\8f\9c\82Ã…\82«\82Ãœ\82¹\82ñ"
 
 #, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: \8aÖ\90\94\8eQ\8fÆ\8c^\95Ã\90\94\96¼\82Ã\91Ã¥\95¶\8e\9a\82Ã…\8en\82Ãœ\82ç\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ: %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: \95Ã\90\94\96¼\82ª\8aù\91¶\82ÃŒ\8aÖ\90\94\96¼\82Æ\8fÕ\93Ë\82µ\82Ãœ\82·: %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: \92l\82ª\83\8d\83b\83N\82³\82ê\82Ä\82¢\82Ãœ\82·: %s"
 
@@ -643,17 +726,36 @@ msgid "E698: variable nested too deep for making a copy"
 msgstr "E698: \83R\83s\81[\82ð\8eæ\82é\82É\82Ã\95Ã\90\94\82ÃŒ\93ü\82ê\8eq\82ª\90[\89ß\82¬\82Ãœ\82·"
 
 #, c-format
+msgid "E123: Undefined function: %s"
+msgstr "E123: \96¢\92è\8b`\82ÃŒ\8aÖ\90\94\82Ã…\82·: %s"
+
+#, c-format
 msgid "E124: Missing '(': %s"
 msgstr "E124: '(' \82ª\82 \82è\82Ãœ\82¹\82ñ: %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: \82±\82±\82Ã…\82àg: \82Ã\8eg\82¦\82Ãœ\82¹\82ñ"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: \95s\90³\82È\88ø\90\94\82Ã…\82·: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: \88ø\90\94\96¼\82ª\8fd\95¡\82µ\82Ä\82¢\82Ãœ\82·: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: :endfunction \82ª\82 \82è\82Ãœ\82¹\82ñ"
 
 #, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: \8aÖ\90\94\96¼\82ª\95Ã\90\94\96¼\82Æ\8fÕ\93Ë\82µ\82Ãœ\82·: %s"
+
+#, c-format
+msgid "E127: Cannot redefine function %s: It is in use"
+msgstr "E127: \8aÖ\90\94 %s \82ð\8dÄ\92è\8b`\82Ã…\82«\82Ãœ\82¹\82ñ: \8eg\97p\92\86\82Ã…\82·"
+
+#, c-format
 msgid "E746: Function name does not match script file name: %s"
 msgstr "E746: \8aÖ\90\94\96¼\82ª\83X\83N\83\8a\83v\83g\82ÃŒ\83t\83@\83C\83\8b\96¼\82Æ\88ê\92v\82µ\82Ãœ\82¹\82ñ: %s"
 
@@ -694,7 +796,6 @@ msgstr "%s 
 msgid "E133: :return not inside a function"
 msgstr "E133: \8aÖ\90\94\8aO\82É :return \82ª\82 \82è\82Ãœ\82µ\82½"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -709,6 +810,9 @@ msgstr ""
 "\n"
 "\tLast set from "
 
+msgid "No old files"
+msgstr "\8cÃ\82¢\83t\83@\83C\83\8b\82Ã\82 \82è\82Ãœ\82¹\82ñ"
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
 msgstr "<%s>%s%s  %d,  16\90i\90\94 %02x,  8\90i\90\94 %03o"
@@ -758,6 +862,9 @@ msgstr " 
 msgid " marks"
 msgstr " \83}\81[\83N"
 
+msgid " oldfiles"
+msgstr " \8b\8c\83t\83@\83C\83\8b\8cQ"
+
 msgid " FAILED"
 msgstr " \8e¸\94s"
 
@@ -779,7 +886,6 @@ msgstr "viminfo
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# \82±\82ÃŒ viminfo \83t\83@\83C\83\8b\82àVim %s \82É\82æ\82Ã\82Ä\90¶\90¬\82³\82ê\82Ãœ\82µ\82½.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -787,7 +893,6 @@ msgstr ""
 "# \95Ã\8dX\82·\82é\8dÛ\82É\82Ã\8f\\\95ª\92\8d\88Ó\82µ\82Ä\82­\82¾\82³\82¢!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# \82±\82ÃŒ\83t\83@\83C\83\8b\82ª\8f\91\82©\82ê\82½\8e\9e\82ÃŒ 'encoding' \82ÃŒ\92l\n"
 
@@ -865,7 +970,7 @@ msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
 msgstr "%s \82É\92u\8a·\82µ\82Ãœ\82·\82©? (y/n/a/q/l/^E/^Y)"
 
 msgid "(Interrupted) "
-msgstr "(\8a\84\8d\9e\82Ãœ\82ê\82Ãœ\82µ\82½)"
+msgstr "(\8a\84\8d\9e\82Ãœ\82ê\82Ãœ\82µ\82½) "
 
 msgid "1 match"
 msgstr "1 \89Ó\8f\8a\8aY\93\96\82µ\82Ãœ\82µ\82½"
@@ -896,9 +1001,12 @@ msgstr "E148: global
 
 #, c-format
 msgid "Pattern found in every line: %s"
-msgstr "\83p\83^\81[\83\93\82ª\91S\82Ä\82ÃŒ\8ds\82Ã…\82Ã\82Â\82©\82è\82Ãœ\82µ\82½: %s"
+msgstr "\83p\83^\81[\83\93\82ª\91S\82Ä\82ÃŒ\8ds\82Ã…\8c©\82Â\82©\82è\82Ãœ\82µ\82½: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "\83p\83^\81[\83\93\82Ã\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -921,7 +1029,7 @@ msgstr "E149: 
 
 #, c-format
 msgid "Sorry, help file \"%s\" not found"
-msgstr "\8ec\94O\82Ã…\82·\82ª\83w\83\8b\83v\83t\83@\83C\83\8b \"%s\" \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "\8ec\94O\82Ã…\82·\82ª\83w\83\8b\83v\83t\83@\83C\83\8b \"%s\" \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E150: Not a directory: %s"
@@ -975,7 +1083,7 @@ msgstr "E157: 
 
 # Added at 27-Jan-2004.
 msgid " (NOT FOUND)"
-msgstr "  (\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ)"
+msgstr "  (\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ)"
 
 msgid " (not supported)"
 msgstr " (\94ñ\83T\83|\81[\83g)"
@@ -1000,7 +1108,7 @@ msgstr "
 
 #, c-format
 msgid "E161: Breakpoint not found: %s"
-msgstr "E161: \83u\83\8c\81[\83N\83|\83C\83\93\83g\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
+msgstr "E161: \83u\83\8c\81[\83N\83|\83C\83\93\83g\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
 
 msgid "No breakpoints defined"
 msgstr "\83u\83\8c\81[\83N\83|\83C\83\93\83g\82ª\92è\8b`\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
@@ -1009,8 +1117,8 @@ msgstr "
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s  \8ds %ld"
 
-msgid "E750: First use :profile start <fname>"
-msgstr "E750: \8f\89\82ß\82É :profile start <fname> \82ð\8eÀ\8ds\82µ\82Ä\82­\82¾\82³\82¢"
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: \8f\89\82ß\82É \":profile start {fname}\" \82ð\8eÀ\8ds\82µ\82Ä\82­\82¾\82³\82¢"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
@@ -1049,7 +1157,7 @@ msgstr "\"%s\" 
 
 #, c-format
 msgid "not found in 'runtimepath': \"%s\""
-msgstr "'runtimepath' \82ÃŒ\92\86\82É\82Ã\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ: \"%s\""
+msgstr "'runtimepath' \82ÃŒ\92\86\82É\82Ã\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ: \"%s\""
 
 msgid "Source Vim script"
 msgstr "Vim\83X\83N\83\8a\83v\83g\82ÃŒ\8eæ\8d\9e\82Ã"
@@ -1202,6 +1310,9 @@ msgstr "E182: 
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: \83\86\81[\83U\92è\8b`\83R\83}\83\93\83h\82Ã\89p\91Ã¥\95¶\8e\9a\82Ã…\8en\82Ãœ\82ç\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: \97\\\96ñ\96¼\82È\82ÃŒ\82Ã…, \83\86\81[\83U\92è\8b`\83R\83}\83\93\83h\82É\97\98\97p\82Ã…\82«\82Ãœ\82¹\82ñ"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: \82»\82ÃŒ\83\86\81[\83U\92è\8b`\83R\83}\83\93\83h\82Ã\82 \82è\82Ãœ\82¹\82ñ: %s"
@@ -1216,9 +1327,12 @@ msgstr "E468: 
 msgid "E467: Custom completion requires a function argument"
 msgstr "E467: \83J\83X\83^\83\80\95â\8a®\82É\82Ã\88ø\90\94\82Æ\82µ\82Ä\8aÖ\90\94\82ª\95K\97v\82Ã…\82·"
 
+msgid "unknown"
+msgstr "\95s\96¾"
+
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: \83J\83\89\81[\83X\83L\81[\83\80 %s \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: \83J\83\89\81[\83X\83L\81[\83\80 '%s' \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "Greetings, Vim user!"
 msgstr "Vim \8eg\82¢\82³\82ñ\81A\82â\82 !"
@@ -1254,7 +1368,7 @@ msgid "E187: Unknown"
 msgstr "E187: \96¢\92m"
 
 msgid "E465: :winsize requires two number arguments"
-msgstr "E465: "
+msgstr "E465: :winsize \82É\82Ã2\82Â\82ÃŒ\90\94\92l\82ÃŒ\88ø\90\94\82ª\95K\97v\82Ã…\82·"
 
 #, c-format
 msgid "Window position: X %d, Y %d"
@@ -1293,11 +1407,14 @@ msgstr "E190: \"%s\" 
 
 #. set mark
 msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: \88ø\90\94\82Ã\95¶\8e\9a\82©\91O\90i/\8cã\91Þ\83N\83H\81[\83g\82Ã…\82µ\82È\82¯\82ê\82ÃŽ\82¢\82¯\82Ãœ\82¹\82ñ"
+msgstr "E191: \88ø\90\94\82Ã1\95¶\8e\9a\82ÃŒ\89p\8e\9a\82©\88ø\97p\95\84 (' \82© `) \82Ã…\82È\82¯\82ê\82ÃŽ\82¢\82¯\82Ãœ\82¹\82ñ"
 
 msgid "E192: Recursive use of :normal too deep"
 msgstr "E192: :normal \82ÃŒ\8dÄ\8bA\97\98\97p\82ª\90[\82­\82È\82è\89ß\82¬\82Ãœ\82µ\82½"
 
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< \82à+eval \8b@\94\\\82ª\96³\82¢\82Æ\97\98\97p\82Ã…\82«\82Ãœ\82¹\82ñ"
+
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: '#'\82ð\92u\82«\8a·\82¦\82é\95\9b\83t\83@\83C\83\8b\82ÃŒ\96¼\91O\82ª\82 \82è\82Ãœ\82¹\82ñ"
 
@@ -1313,6 +1430,9 @@ msgstr "E497: \"<amatch>\"
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: \"<sfile>\"\82ð\92u\82«\8a·\82¦\82é :source \91ÃŽ\8fÛ\83t\83@\83C\83\8b\96¼\82ª\82 \82è\82Ãœ\82¹\82ñ"
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: \"<slnum>\"\82ð\92u\82«\8a·\82¦\82é\8ds\94Ô\8d\86\82ª\82 \82è\82Ãœ\82¹\82ñ"
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr ""
@@ -1426,7 +1546,7 @@ msgstr "E606: :try 
 
 #. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
-msgstr "E607: \95¡\90\94\82ÃŒ :finaly\82ª\82 \82è\82Ãœ\82·"
+msgstr "E607: \95¡\90\94\82ÃŒ :finall\82ª\82 \82è\82Ãœ\82·"
 
 msgid "E602: :endtry without :try"
 msgstr "E602: :try \82ÃŒ\82È\82¢ :endtry \82Ã…\82·"
@@ -1437,6 +1557,9 @@ msgstr "E193: 
 msgid "E788: Not allowed to edit another buffer now"
 msgstr "E788: \8c»\8dÃ\82Ã\91¼\82ÃŒ\83o\83b\83t\83@\82ð\95Ã’\8fW\82·\82é\82±\82Æ\82Ã\8b\96\82³\82ê\82Ãœ\82¹\82ñ"
 
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: \8c»\8dÃ\82Ã\83o\83b\83t\83@\8fî\95ñ\82ð\95Ã\8dX\82·\82é\82±\82Æ\82Ã\8b\96\82³\82ê\82Ãœ\82¹\82ñ"
+
 msgid "tagname"
 msgstr "\83^\83O\96¼"
 
@@ -1472,6 +1595,9 @@ msgstr "E198: cmd_pchar 
 msgid "E199: Active window or buffer deleted"
 msgstr "E199: \83A\83N\83e\83B\83u\82È\83E\83B\83\93\83h\83E\82©\83o\83b\83t\83@\82ª\8dí\8f\9c\82³\82ê\82Ãœ\82µ\82½"
 
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: autocommand\82ª\83o\83b\83t\83@\82©\83o\83b\83t\83@\96¼\82ð\95Ã\8dX\82µ\82Ãœ\82µ\82½"
+
 msgid "Illegal file name"
 msgstr "\95s\90³\82È\83t\83@\83C\83\8b\96¼"
 
@@ -1524,15 +1650,9 @@ msgstr "[
 msgid "[character special]"
 msgstr "[\83L\83\83\83\89\83N\83^\81E\83f\83o\83C\83X]"
 
-msgid "[RO]"
-msgstr "[\93Ç\90ê]"
-
 msgid "[CR missing]"
 msgstr "[CR\96³]"
 
-msgid "[NL found]"
-msgstr "[NL\97L]"
-
 msgid "[long lines split]"
 msgstr "[\92·\8ds\95ª\8a\84]"
 
@@ -1542,6 +1662,9 @@ msgstr "[
 msgid "[converted]"
 msgstr "[\95Ã\8a·\8dÃ]"
 
+msgid "[blowfish]"
+msgstr "[blowfish\88Ã\8d\86\89»]"
+
 msgid "[crypted]"
 msgstr "[\88Ã\8d\86\89»]"
 
@@ -1557,7 +1680,7 @@ msgid "[READ ERRORS]"
 msgstr "[\93Ç\8d\9e\83G\83\89\81[]"
 
 msgid "Can't find temp file for conversion"
-msgstr "\95Ã\8a·\82É\95K\97v\82È\88ê\8e\9e\83t\83@\83C\83\8b\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "\95Ã\8a·\82É\95K\97v\82È\88ê\8e\9e\83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "Conversion with 'charconvert' failed"
 msgstr "'charconvert' \82É\82æ\82é\95Ã\8a·\82ª\8e¸\94s\82µ\82Ãœ\82µ\82½"
@@ -1565,6 +1688,9 @@ msgstr "'charconvert' 
 msgid "can't read output of 'charconvert'"
 msgstr "'charconvert' \82ÃŒ\8fo\97Ã\82ð\93Ç\8d\9e\82ß\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: \83t\83@\83C\83\8b\82ª\96¢\92m\82ÃŒ\95û\96@\82Ã…\88Ã\8d\86\89»\82³\82ê\82Ä\82¢\82Ãœ\82·"
+
 msgid "E676: No matching autocommands for acwrite buffer"
 msgstr "E676: acwrite\83o\83b\83t\83@\82ÃŒ\8aY\93\96\82·\82éautocommand\82Ã\91¶\8dÃ\82µ\82Ãœ\82¹\82ñ"
 
@@ -1610,7 +1736,7 @@ msgid "E460: The resource fork would be lost (add ! to override)"
 msgstr "E460: \83\8a\83\\\81[\83X\83t\83H\81[\83N\82ª\8e¸\82í\82ê\82é\82©\82à\82µ\82ê\82Ãœ\82¹\82ñ (! \82ð\92Ç\89Ã\82Ã…\8b­\90§)"
 
 msgid "E214: Can't find temp file for writing"
-msgstr "E214: \95Û\91¶\97p\88ê\8e\9e\83t\83@\83C\83\8b\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E214: \95Û\91¶\97p\88ê\8e\9e\83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
 msgstr "E213: \95Ã\8a·\82Ã…\82«\82Ãœ\82¹\82ñ (! \82ð\92Ç\89Ã\82Ã…\95Ã\8a·\82¹\82¸\82É\95Û\91¶)"
@@ -1630,12 +1756,24 @@ msgstr "E512: 
 msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
 msgstr "E513: \8f\91\8d\9e\82Ã\83G\83\89\81[, \95Ã\8a·\8e¸\94s (\8fã\8f\91\82·\82é\82É\82à'fenc' \82ð\8bó\82É\82µ\82Ä\82­\82¾\82³\82¢)"
 
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: \8f\91\8d\9e\82Ã\83G\83\89\81[, \95Ã\8a·\8e¸\94s, \8ds\90\94 %ld (\8fã\8f\91\82·\82é\82É\82à'fenc' \82ð\8bó\82É\82µ\82Ä\82­\82¾\82³"
+"\82¢)"
+
 msgid "E514: write error (file system full?)"
 msgstr "E514: \8f\91\8d\9e\82Ã\83G\83\89\81[, (\83t\83@\83C\83\8b\83V\83X\83e\83\80\82ª\96\9e\94t?)"
 
 msgid " CONVERSION ERROR"
 msgstr " \95Ã\8a·\83G\83\89\81["
 
+#, c-format
+msgid " in line %ld;"
+msgstr "\8ds %ld;"
+
 msgid "[Device]"
 msgstr "[\83f\83o\83C\83X]"
 
@@ -1702,6 +1840,11 @@ msgid "1 character"
 msgstr "1 \95¶\8e\9a"
 
 #, c-format
+msgid "%lld characters"
+msgstr "%lld \95¶\8e\9a"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "%ld \95¶\8e\9a"
 
@@ -1818,7 +1961,7 @@ msgstr ""
 
 #, c-format
 msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <\83o\83b\83t\83@=%d>: \96³\8cø\82È\83o\83b\83t\83@\94Ô\8d\86\82Ã…\82·"
+msgstr "E680: <\83o\83b\83t\83@=%d>: \96³\8cø\82È\83o\83b\83t\83@\94Ô\8d\86\82Ã…\82· "
 
 msgid "E217: Can't execute autocommands for ALL events"
 msgstr "E217: \91S\82Ä\82ÃŒ\83C\83x\83\93\83g\82É\91ÃŽ\82µ\82Ä\82ÃŒautocommand\82Ã\8eÀ\8ds\82Ã…\82«\82Ãœ\82¹\82ñ"
@@ -1858,7 +2001,7 @@ msgstr "E351: 
 
 #, c-format
 msgid "+--%3ld lines folded "
-msgstr "+--%3ld \8ds\82ª\90Ãœ\8fô\82Ãœ\82ê\82Ãœ\82µ\82½"
+msgstr "+--%3ld \8ds\82ª\90Ãœ\8fô\82Ãœ\82ê\82Ãœ\82µ\82½ "
 
 msgid "E222: Add to read buffer"
 msgstr "E222: \93Ç\8d\9e\83o\83b\83t\83@\82Ö\92Ç\89Ã"
@@ -1883,14 +2026,20 @@ msgid "E227: mapping already exists for %s"
 msgstr "E227: %s \82Æ\82¢\82¤\83}\83b\83s\83\93\83O\82Ã\8aù\82É\91¶\8dÃ\82µ\82Ãœ\82·"
 
 msgid "No abbreviation found"
-msgstr "\92Z\8fk\93ü\97Ã\82Ã\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+msgstr "\92Z\8fk\93ü\97Ã\82Ã\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
 
 msgid "No mapping found"
-msgstr "\83}\83b\83s\83\93\83O\82Ã\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+msgstr "\83}\83b\83s\83\93\83O\82Ã\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
 
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: \95s\90³\82È\83\82\81[\83h"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: GUI\97p\82ÃŒ\83v\83\8d\83Z\83X\82ÃŒ\8bN\93®\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: \8eq\83v\83\8d\83Z\83X\82ªGUI\82ÃŒ\8bN\93®\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: GUI\82ð\8aJ\8en\82Ã…\82«\82Ãœ\82¹\82ñ"
 
@@ -1915,7 +2064,7 @@ msgid "No match at cursor, finding next"
 msgstr "\83J\81[\83\\\83\8b\82ÃŒ\88Ê\92u\82É\83}\83b\83`\82Ã\82 \82è\82Ãœ\82¹\82ñ, \8e\9f\82ð\8c\9f\8dõ\82µ\82Ä\82¢\82Ãœ\82·"
 
 msgid "<cannot open> "
-msgstr "<\8aJ\82¯\82Ãœ\82¹\82ñ>"
+msgstr "<\8aJ\82¯\82Ãœ\82¹\82ñ> "
 
 #, c-format
 msgid "E616: vim_SelFile: can't get font %s"
@@ -1945,9 +2094,6 @@ msgstr "Vim 
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: \83\81\83b\83Z\81[\83W\82Æ\83R\81[\83\8b\83o\83b\83N\82ÃŒ\82 \82é BalloonEval \82ð\8dì\90¬\82Ã…\82«\82Ãœ\82¹\82ñ"
 
-msgid "Vim dialog..."
-msgstr "Vim \83_\83C\83A\83\8d\83O..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -1990,12 +2136,15 @@ msgstr "
 msgid "Down"
 msgstr "\89º"
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr "\8e\9f\82ð\8c\9f\8dõ"
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "\92u\8a·"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr "\91S\82Ä\92u\8a·"
 
@@ -2014,12 +2163,6 @@ msgstr "
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "Vim: \83\81\83C\83\93\83E\83B\83\93\83h\83E\82ª\95s\88Ó\82É\94j\89ó\82³\82ê\82Ãœ\82µ\82½\n"
 
-msgid "Font Selection"
-msgstr "\83t\83H\83\93\83g\91I\91ð"
-
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "\8bó\82ÃŒ\91I\91ð\97ÃŒ\88æ\82ÃŒ\82©\82í\82è\82ÉCUT_BUFFER0\82ª\8eg\97p\82³\82ê\82Ãœ\82µ\82½"
-
 msgid "&Filter"
 msgstr "\83t\83B\83\8b\83^(&F)"
 
@@ -2057,23 +2200,8 @@ msgid "&Undo"
 msgstr "\83A\83\93\83h\83D(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zap\83t\83H\83\93\83g '%s' \82ð\93Ç\8d\9e\82ß\82Ãœ\82¹\82ñ"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: \83t\83H\83\93\83g %s \82ð\8eg\97p\82Ã…\82«\82Ãœ\82¹\82ñ"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"\8eq\83v\83\8d\83Z\83X\82Ö\92â\8e~\83\81\83b\83Z\81[\83W\82ð\91\97\90M\92\86\82Å\82·.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
-msgstr "E671: \83^\83C\83g\83\8b\82ª \"%s\" \82ÃŒ\83E\83B\83\93\83h\83E\82Ã\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E671: \83^\83C\83g\83\8b\82ª \"%s\" \82ÃŒ\83E\83B\83\93\83h\83E\82Ã\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
@@ -2118,32 +2246,28 @@ msgid "Font '%s' is not fixed-width"
 msgstr "\83t\83H\83\93\83g '%s' \82Ã\8cÃ…\92è\95\9d\82Ã…\82Ã\82 \82è\82Ãœ\82¹\82ñ"
 
 #, c-format
-msgid "E253: Fontset name: %s\n"
-msgstr "E253: \83t\83H\83\93\83g\83Z\83b\83g\96¼: %s\n"
+msgid "E253: Fontset name: %s"
+msgstr "E253: \83t\83H\83\93\83g\83Z\83b\83g\96¼: %s"
 
 #, c-format
-msgid "Font0: %s\n"
-msgstr "\83t\83H\83\93\83g0: %s\n"
+msgid "Font0: %s"
+msgstr "\83t\83H\83\93\83g0: %s"
 
 #, c-format
-msgid "Font1: %s\n"
-msgstr "\83t\83H\83\93\83g1: %s\n"
+msgid "Font1: %s"
+msgstr "\83t\83H\83\93\83g1: %s"
 
 #, c-format
-msgid "Font%ld width is not twice that of font0\n"
-msgstr "\83t\83H\83\93\83g%ld \82ÃŒ\95\9d\82ª\83t\83H\83\93\83g0\82ÃŒ2\94{\82Ã…\82Ã\82 \82è\82Ãœ\82¹\82ñ\n"
+msgid "Font%ld width is not twice that of font0"
+msgstr "\83t\83H\83\93\83g%ld \82ÃŒ\95\9d\82ª\83t\83H\83\93\83g0\82ÃŒ2\94{\82Ã…\82Ã\82 \82è\82Ãœ\82¹\82ñ"
 
 #, c-format
-msgid "Font0 width: %ld\n"
-msgstr "\83t\83H\83\93\83g0\82ÃŒ\95\9d: %ld\n"
+msgid "Font0 width: %ld"
+msgstr "\83t\83H\83\93\83g0\82ÃŒ\95\9d: %ld"
 
 #, c-format
-msgid ""
-"Font1 width: %ld\n"
-"\n"
-msgstr ""
-"\83t\83H\83\93\83g1\82ÃŒ\95\9d: %ld\n"
-"\n"
+msgid "Font1 width: %ld"
+msgstr "\83t\83H\83\93\83g1\82ÃŒ\95\9d: %ld"
 
 msgid "Invalid font specification"
 msgstr "\96³\8cø\82È\83t\83H\83\93\83g\8ew\92è\82Ã…\82·"
@@ -2251,14 +2375,14 @@ msgid "E456: Can't open file \"%s\""
 msgstr "E456: \83t\83@\83C\83\8b \"%s\" \82ð\8aJ\82¯\82Ãœ\82¹\82ñ"
 
 msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: PostScript\82ÃŒ\83\8a\83\\\81[\83X\83t\83@\83C\83\8b \"prolog.ps\" \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E456: PostScript\82ÃŒ\83\8a\83\\\81[\83X\83t\83@\83C\83\8b \"prolog.ps\" \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: PostScript\82ÃŒ\83\8a\83\\\81[\83X\83t\83@\83C\83\8b \"cidfont.ps\" \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E456: PostScript\82ÃŒ\83\8a\83\\\81[\83X\83t\83@\83C\83\8b \"cidfont.ps\" \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: PostScript\82ÃŒ\83\8a\83\\\81[\83X\83t\83@\83C\83\8b \"%s.ps\" \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E456: PostScript\82ÃŒ\83\8a\83\\\81[\83X\83t\83@\83C\83\8b \"%s.ps\" \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E620: Unable to convert to print encoding \"%s\""
@@ -2302,7 +2426,7 @@ msgid "E562: Usage: cstag <ident>"
 msgstr "E562: \8eg\97p\96@: cstag <ident>"
 
 msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: \83^\83O\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E257: cstag: \83^\83O\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E563: stat(%s) error: %d"
@@ -2332,6 +2456,9 @@ msgstr "E566: cscope
 msgid "E622: Could not fork for cscope"
 msgstr "E622: cscope\82ÃŒ\8bN\93®\8f\80\94õ(fork)\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
 
+msgid "cs_create_connection setpgid failed"
+msgstr "cs_create_connection \82Ö\82ÃŒ setpgid \82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
 msgid "cs_create_connection exec failed"
 msgstr "cs_create_connection \82ÃŒ\8eÀ\8ds\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
 
@@ -2348,19 +2475,40 @@ msgid "E567: no cscope connections"
 msgstr "E567: cscope\90Ú\91±\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
 
 #, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: cscope\83N\83G\83\8a\81[ %s of %s \82É\8aY\93\96\82ª\82 \82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
-
-#, c-format
 msgid "E469: invalid cscopequickfix flag %c for %c"
 msgstr "E469: \96³\8cø\82È cscopequickfix \83t\83\89\83O %c \82ÃŒ %c \82Ã…\82·"
 
+#, c-format
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: cscope\83N\83G\83\8a\81[ %s of %s \82É\8aY\93\96\82ª\82 \82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+
 msgid "cscope commands:\n"
 msgstr "cscope\83R\83}\83\93\83h:\n"
 
 #, c-format
-msgid "%-5s: %-30s (Usage: %s)"
-msgstr "%-5s: %-30s (\8eg\97p\96@: %s)"
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (\8eg\97p\96@: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: \82±\82ÃŒ\8aÖ\90\94\82ð\8cÄ\82ñ\82Ã…\82¢\82é\8aÖ\90\94\82ð\92T\82·\n"
+"       d: \82±\82ÃŒ\8aÖ\90\94\82©\82ç\8cÄ\82ñ\82Ã…\82¢\82é\8aÖ\90\94\82ð\92T\82·\n"
+"       e: \82±\82ÃŒegrep\83p\83^\81[\83\93\82ð\92T\82·\n"
+"       f: \82±\82ÃŒ\83t\83@\83C\83\8b\82ð\92T\82·\n"
+"       g: \82±\82ÃŒ\92è\8b`\82ð\92T\82·\n"
+"       i: \82±\82ÃŒ\83t\83@\83C\83\8b\82ð#include\82µ\82Ä\82¢\82é\83t\83@\83C\83\8b\82ð\92T\82·\n"
+"       s: \82±\82ÃŒC\83V\83\93\83{\83\8b\82ð\92T\82·\n"
+"       t: \82±\82ÃŒ\83e\83L\83X\83g\95¶\8e\9a\97ñ\82ð\92T\82·\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2372,12 +2520,9 @@ msgstr "E626: cscope
 msgid "E568: duplicate cscope database not added"
 msgstr "E568: \8fd\95¡\82·\82écscope\83f\81[\83^\83x\81[\83X\82Ã\92Ç\89Ã\82³\82ê\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
 
-msgid "E569: maximum number of cscope connections reached"
-msgstr "E569: cscope\90Ú\91±\82ÃŒ\8dÃ…\91Ã¥\90\94\82É\92B\82µ\82Ãœ\82µ\82½"
-
 #, c-format
 msgid "E261: cscope connection %s not found"
-msgstr "E261: cscope\90Ú\91± %s \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+msgstr "E261: cscope\90Ú\91± %s \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
 
 #, c-format
 msgid "cscope connection %s closed"
@@ -2414,12 +2559,16 @@ msgstr "cscope
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    \83f\81[\83^\83x\81[\83X\96¼                      prepend \83p\83X\n"
 
+msgid "Lua library cannot be loaded."
+msgstr "Lua\83\89\83C\83u\83\89\83\8a\82ð\83\8d\81[\83h\82Ã…\82«\82Ãœ\82¹\82ñ."
+
+msgid "cannot save undo information"
+msgstr "\83A\83\93\83h\83D\8fî\95ñ\82ª\95Û\91¶\82Ã…\82«\82Ãœ\82¹\82ñ"
+
 msgid ""
-"???: Sorry, this command is disabled, the MzScheme library could not be "
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
-msgstr ""
-"???: \82±\82ÃŒ\83R\83}\83\93\83h\82Ã\96³\8cø\82Ã…\82·, \82²\82ß\82ñ\82È\82³\82¢: MzScheme \83\89\83C\83u\83\89\83\8a\82ð\83\8d\81[\83h\82Ã…\82«\82Ãœ"
-"\82¹\82ñ\82Å\82µ\82½."
+msgstr "E815: \82±\82ÃŒ\83R\83}\83\93\83h\82Ã\96³\8cø\82Ã…\82·. MzScheme \83\89\83C\83u\83\89\83\8a\82ð\83\8d\81[\83h\82Ã…\82«\82Ãœ\82¹\82ñ."
 
 msgid "invalid expression"
 msgstr "\96³\8cø\82È\8e®\82Ã…\82·"
@@ -2439,9 +2588,6 @@ msgstr "
 msgid "couldn't open buffer"
 msgstr "\83o\83b\83t\83@\82ð\8aJ\82¯\82Ãœ\82¹\82ñ"
 
-msgid "cannot save undo information"
-msgstr "\83A\83\93\83h\83D\8fî\95ñ\82ª\95Û\91¶\82Ã…\82«\82Ãœ\82¹\82ñ"
-
 msgid "cannot delete line"
 msgstr "\8ds\82ð\8fÃ\82¹\82Ãœ\82¹\82ñ"
 
@@ -2454,6 +2600,9 @@ msgstr "
 msgid "string cannot contain newlines"
 msgstr "\95¶\8e\9a\97ñ\82É\82Ã\89ü\8ds\95¶\8e\9a\82ð\8aÃœ\82ß\82ç\82ê\82Ãœ\82¹\82ñ"
 
+msgid "error converting Scheme values to Vim"
+msgstr "Scheme\92l\82ÃŒVim\82Ö\82ÃŒ\95Ã\8a·\83G\83\89\81["
+
 msgid "Vim error: ~a"
 msgstr "Vim \83G\83\89\81[: ~a"
 
@@ -2472,6 +2621,22 @@ msgstr "
 msgid "not allowed in the Vim sandbox"
 msgstr "\83T\83\93\83h\83{\83b\83N\83X\82Ã…\82Ã\8b\96\82³\82ê\82Ãœ\82¹\82ñ"
 
+#, c-format
+msgid "E370: Could not load library %s"
+msgstr "E370: \83\89\83C\83u\83\89\83\8a %s \82ð\83\8d\81[\83h\82Ã…\82«\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+
+msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+msgstr ""
+"\82±\82ÃŒ\83R\83}\83\93\83h\82Ã\96³\8cø\82Ã…\82·, \82²\82ß\82ñ\82È\82³\82¢: Perl\83\89\83C\83u\83\89\83\8a\82ð\83\8d\81[\83h\82Ã…\82«\82Ãœ\82¹\82ñ\82Ã…\82µ\82½."
+
+msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
+msgstr ""
+"E299: \83T\83\93\83h\83{\83b\83N\83X\82Ã…\82àSafe \83\82\83W\83\85\81[\83\8b\82ð\8eg\97p\82µ\82È\82¢Perl\83X\83N\83\8a\83v\83g\82Ã\8bÖ\82¶\82ç\82ê"
+"\82Ä\82¢\82Ü\82·"
+
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: \82±\82ÃŒVim\82Ã…\82à:py3 \82ð\8eg\82Ã\82½\8cã\82É :python \82ð\8eg\82¦\82Ãœ\82¹\82ñ"
+
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
@@ -2483,60 +2648,8 @@ msgstr ""
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Python \82ð\8dÄ\8bA\93I\82É\8eÀ\8ds\82·\82é\82±\82Æ\82Ã\82Ã…\82«\82Ãœ\82¹\82ñ"
 
-msgid "can't delete OutputObject attributes"
-msgstr "OutputObject\91®\90«\82ð\8fÃ\82¹\82Ãœ\82¹\82ñ"
-
-msgid "softspace must be an integer"
-msgstr "softspace \82àinteger \82Ã…\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ"
-
-msgid "invalid attribute"
-msgstr "\96³\8cø\82È\91®\90«\82Ã…\82·"
-
-msgid "writelines() requires list of strings"
-msgstr "writelines() \82É\82Ã\95¶\8e\9a\97ñ\82ÃŒ\83\8a\83X\83g\82ª\95K\97v\82Ã…\82·"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Python: I/O\83I\83u\83W\83F\83N\83g\82ÃŒ\8f\89\8aú\89»\92\86\82É\83G\83\89\81[\82Ã…\82·"
-
-msgid "attempt to refer to deleted buffer"
-msgstr "\8fÃ\82³\82ê\82½\83o\83b\83t\83@\82ª\8eQ\8fÆ\82³\82ê\82Ãœ\82µ\82½"
-
-msgid "line number out of range"
-msgstr "\94Ã\88Ã\8aO\82ÃŒ\8ds\94Ô\8d\86\82Ã…\82·"
-
-#, c-format
-msgid "<buffer object (deleted) at %8lX>"
-msgstr "<\83o\83b\83t\83@\83I\83u\83W\83F\83N\83g (\8fÃ\8b\8e\8dÃ\82Ã) %8lX>"
-
-msgid "invalid mark name"
-msgstr "\96³\8cø\82È\83}\81[\83N\96¼\82Ã…\82·"
-
-msgid "no such buffer"
-msgstr "\82»\82ÃŒ\82æ\82¤\82È\83o\83b\83t\83@\82Ã\82 \82è\82Ãœ\82¹\82ñ"
-
-msgid "attempt to refer to deleted window"
-msgstr "\8fÃ\82³\82ê\82½\83E\83B\83\93\83h\83E\82ª\8eQ\8fÆ\82³\82ê\82Ãœ\82µ\82½"
-
-msgid "readonly attribute"
-msgstr "\93Ç\8d\9e\90ê\97p\91®\90«"
-
-msgid "cursor position outside buffer"
-msgstr "\83J\81[\83\\\83\8b\82ª\83o\83b\83t\83@\82ÃŒ\8aO\82É\82 \82è\82Ãœ\82·"
-
-#, c-format
-msgid "<window object (deleted) at %.8lX>"
-msgstr "<\83E\83B\83\93\83h\83E\83I\83u\83W\83F\83N\83g (\8fÃ\8b\8e\8dÃ) %.8lX>"
-
-#, c-format
-msgid "<window object (unknown) at %.8lX>"
-msgstr "<\83E\83B\83\93\83h\83E\83I\83u\83W\83F\83N\83g (\96¢\92m) %.8lX>"
-
-#, c-format
-msgid "<window %d>"
-msgstr "<\83E\83B\83\93\83h\83E %d>"
-
-msgid "no such window"
-msgstr "\82»\82ÃŒ\82æ\82¤\82È\83E\83B\83\93\83h\83E\82Ã\82 \82è\82Ãœ\82¹\82ñ"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: \82±\82ÃŒVim\82Ã…\82à:python \82ð\8eg\82Ã\82½\8cã\82É :py3 \82ð\8eg\82¦\82Ãœ\82¹\82ñ"
 
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_ \82Ã\95¶\8e\9a\97ñ\82ÃŒ\83C\83\93\83X\83^\83\93\83X\82Ã…\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ"
@@ -2594,7 +2707,7 @@ msgid "Show source of"
 msgstr "\8e\9f\82ÃŒ\83\\\81[\83X\82ð\95\\\8e¦\82·\82é"
 
 msgid "Find symbol"
-msgstr "\82Ã\82Â\82¯\82½\83V\83\93\83{\83\8b"
+msgstr "\8c©\82Â\82¯\82½\83V\83\93\83{\83\8b"
 
 msgid "Browse class"
 msgstr "\83N\83\89\83X\82ð\8eQ\8fÆ"
@@ -2668,6 +2781,9 @@ msgstr "
 msgid "cannot set line(s)"
 msgstr "\8ds\82ð\90Ã\92è\82Ã…\82«\82Ãœ\82¹\82ñ"
 
+msgid "invalid mark name"
+msgstr "\96³\8cø\82È\83}\81[\83N\96¼\82Ã…\82·"
+
 msgid "mark not set"
 msgstr "\83}\81[\83N\82Ã\90Ã\92è\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
 
@@ -2678,8 +2794,11 @@ msgstr "
 msgid "cannot insert/append line"
 msgstr "\8ds\82ÃŒ\91}\93ü/\92Ç\89Ã\82ð\82Ã…\82«\82Ãœ\82¹\82ñ"
 
+msgid "line number out of range"
+msgstr "\94Ã\88Ã\8aO\82ÃŒ\8ds\94Ô\8d\86\82Ã…\82·"
+
 msgid "unknown flag: "
-msgstr "\96¢\92m\82ÃŒ\83t\83\89\83O:"
+msgstr "\96¢\92m\82ÃŒ\83t\83\89\83O: "
 
 msgid "unknown vimOption"
 msgstr "\96¢\92m\82ÃŒ vimOption \82Ã…\82·"
@@ -2709,7 +2828,7 @@ msgstr ""
 
 msgid "cannot register callback command: buffer/window reference not found"
 msgstr ""
-"\83R\81[\83\8b\83o\83b\83N\83R\83}\83\93\83h\82ð\93o\98^\82Ã…\82«\82Ãœ\82¹\82ñ: \83o\83b\83t\83@/\83E\83B\83\93\83h\83E\82ÃŒ\8eQ\8fÆ\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹"
+"\83R\81[\83\8b\83o\83b\83N\83R\83}\83\93\83h\82ð\93o\98^\82Ã…\82«\82Ãœ\82¹\82ñ: \83o\83b\83t\83@/\83E\83B\83\93\83h\83E\82ÃŒ\8eQ\8fÆ\82ª\8c©\82Â\82©\82è\82Ãœ\82¹"
 "\82ñ"
 
 msgid ""
@@ -2718,12 +2837,6 @@ msgstr ""
 "E571: \82±\82ÃŒ\83R\83}\83\93\83h\82Ã\96³\8cø\82Ã…\82·,\82²\82ß\82ñ\82È\82³\82¢: Tcl\83\89\83C\83u\83\89\83\8a\82ð\83\8d\81[\83h\82Ã…\82«\82Ãœ\82¹\82ñ\82Ã…"
 "\82µ\82½."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: TCL \83G\83\89\81[: \8fI\97¹\83R\81[\83h\82ª\90®\90\94\92l\82Ã…\82Ã\82 \82è\82Ãœ\82¹\82ñ!? vim-dev@vim.org \82É\95ñ\8d\90\82µ"
-"\82Ä\82­\82¾\82³\82¢"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: \8fI\97¹\83R\81[\83h %d"
@@ -2766,9 +2879,15 @@ msgstr "
 msgid "%d files to edit\n"
 msgstr "%d \8cÂ\82ÃŒ\83t\83@\83C\83\8b\82ª\95Ã’\8fW\82ð\8dT\82¦\82Ä\82¢\82Ãœ\82·\n"
 
+msgid "netbeans is not supported with this GUI\n"
+msgstr "netbeans \82Ã\82±\82ÃŒGUI\82Ã…\82Ã\97\98\97p\82Ã…\82«\82Ãœ\82¹\82ñ\n"
+
 msgid "This Vim was not compiled with the diff feature."
 msgstr "\82±\82ÃŒVim\82É\82Ãdiff\8b@\94\\\82ª\82 \82è\82Ãœ\82¹\82ñ(\83R\83\93\83p\83C\83\8b\8e\9e\90Ã\92è)."
 
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "'-nb' \8eg\97p\95s\89Â\94\\\82Ã…\82·: \83R\83\93\83p\83C\83\8b\8e\9e\82É\96³\8cø\82É\82³\82ê\82Ä\82¢\82Ãœ\82·\n"
+
 msgid "Attempt to open script file again: \""
 msgstr "\83X\83N\83\8a\83v\83g\83t\83@\83C\83\8b\82ð\8dÄ\82Ñ\8aJ\82¢\82Ä\82Ã\82Ãœ\82·: \""
 
@@ -2824,7 +2943,7 @@ msgstr ""
 "\8eg\97p\96@:"
 
 msgid " vim [arguments] "
-msgstr " vim [\88ø\90\94]"
+msgstr " vim [\88ø\90\94] "
 
 msgid ""
 "\n"
@@ -2873,6 +2992,9 @@ msgstr "-v\t\t\tVi
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tEx\83\82\81[\83h (\"ex\" \82Æ\93¯\82¶)"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\t\89ü\97ÇEx\83\82\81[\83h"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\t\83T\83C\83\8c\83\93\83g(\83o\83b\83`)\83\82\81[\83h (\"ex\" \90ê\97p)"
 
@@ -2997,7 +3119,7 @@ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
 msgstr "--remote <files>\t\89Â\94\\\82È\82ç\82ÃŽVim\83T\81[\83o\82Ã… <files> \82ð\95Ã’\8fW\82·\82é"
 
 msgid "--remote-silent <files>  Same, don't complain if there is no server"
-msgstr "--remote-silnet <files>  \93¯\8fã, \83T\81[\83o\82ª\96³\82­\82Ä\82à\8cx\8d\90\95¶\82ð\8fo\97Ã\82µ\82È\82¢"
+msgstr "--remote-silent <files>  \93¯\8fã, \83T\81[\83o\82ª\96³\82­\82Ä\82à\8cx\8d\90\95¶\82ð\8fo\97Ã\82µ\82È\82¢"
 
 msgid ""
 "--remote-wait <files>  As --remote but wait for files to have been edited"
@@ -3023,7 +3145,10 @@ msgid "--serverlist\t\tList available Vim server names and exit"
 msgstr "--serverlist\t\tVim\83T\81[\83o\96¼\82ÃŒ\88ê\97\97\82ð\95\\\8e¦\82µ\82Ä\8fI\97¹\82·\82é"
 
 msgid "--servername <name>\tSend to/become the Vim server <name>"
-msgstr "--servename <name>\t\tVim\83T\81[\83o <name> \82É\91\97\90M/\96¼\91O\90Ã\92è\82·\82é"
+msgstr "--servername <name>\tVim\83T\81[\83o <name> \82É\91\97\90M/\96¼\91O\90Ã\92è\82·\82é"
+
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <file>\t\8bN\93®\82É\82©\82©\82Ã\82½\8e\9e\8aÔ\82ÃŒ\8fÚ\8d×\82ð <file> \82Ö\8fo\97Ã\82·\82é"
 
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
 msgstr "-i <viminfo>\t\t.viminfo\82ÃŒ\91ã\82í\82è\82É <viminfo> \82ð\8eg\82¤"
@@ -3061,12 +3186,6 @@ msgstr "-display <display>\t<display> 
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\t\8dÃ…\8f¬\89»\82µ\82½\8fó\91Ô\82Ã…vim\82ð\8bN\93®\82·\82é"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <name>\t\tvim\82ÃŒ\96¼\82ª <name> \82Ã…\82 \82é\82Æ\82µ\82Ä\83\8a\83\\\81[\83X\82ð\8eg\82¤"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (\8eÀ\91\95\82³\82ê\82Ä\82¢\82È\82¢)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <color>\t\94w\8ci\90F\82É <color> \82ð\8eg\82¤(\93¯\8b`: -bg)"
 
@@ -3106,19 +3225,6 @@ msgstr "-xrm <resource>\t
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"gvim\82É\82æ\82Ã\82Ä\89ð\8eß\82³\82ê\82é\88ø\90\94(RISC OS\83o\81[\83W\83\87\83\93):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <number>\t\8f\89\8aú\82ÃŒ\83E\83B\83\93\83h\83E\82ÃŒ\83R\83\89\83\80\92P\88Ê\82ÃŒ\95\9d"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <number>\t\8f\89\8aú\82ÃŒ\83E\83B\83\93\83h\83E\82ÃŒ\8ds\92P\88Ê\82ÃŒ\8d\82\82³"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3133,6 +3239,9 @@ msgstr "--role <role>\t
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\t\88Ù\82È\82éGTK widget\82Ã…Vim\82ð\8aJ\82­"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\t\83E\83B\83\93\83h\83EID\82ð\95W\8f\80\8fo\97Ã\82É\8fo\97Ã\82·\82é"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <\90e\82ÃŒ\83^\83C\83g\83\8b>\tVim\82ð\90e\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ÃŒ\92\86\82Ã…\8bN\93®\82·\82é"
 
@@ -3191,7 +3300,6 @@ msgstr ""
 "\n"
 "\95Ã\8dX   \8ds    \97ñ  \83e\83L\83X\83g"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3200,7 +3308,6 @@ msgstr ""
 "# \83t\83@\83C\83\8b\83}\81[\83N:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3208,7 +3315,6 @@ msgstr ""
 "\n"
 "# \83W\83\83\83\93\83v\83\8a\83X\83g (\90V\82µ\82¢\82à\82ÃŒ\82ª\90æ):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3217,7 +3323,7 @@ msgstr ""
 "# \83t\83@\83C\83\8b\93à\83}\81[\83N\82ÃŒ\97\9a\97ð (\90V\82µ\82¢\82à\82ÃŒ\82©\82ç\8cÃ\82¢\82à\82ÃŒ):\n"
 
 msgid "Missing '>'"
-msgstr "'>' \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "'>' \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "E543: Not a valid codepage"
 msgstr "E543: \96³\8cø\82È\83R\81[\83h\83y\81[\83W\82Ã…\82·"
@@ -3240,15 +3346,6 @@ msgstr "E288: 
 msgid "E289: input method doesn't support my preedit type"
 msgstr "E289: \83C\83\93\83v\83b\83g\83\81\83\\\83b\83h\82àmy preedit type \82ð\83T\83|\81[\83g\82µ\82Ãœ\82¹\82ñ"
 
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: over-the-spot \83X\83^\83C\83\8b\82É\82Ãfontset\82ª\95K\97v\82Ã…\82·"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr "E291: GTK+\82ª1.2.3\82æ\82è\82à\8cÃ\82¢\82ÃŒ\82Ã…\83X\83e\81[\83^\83X\83G\83\8a\83A\82ª\96³\8cø\82Ã…\82·"
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: \83C\83\93\83v\83b\83g\83\81\83\\\83b\83h\83T\81[\83\82ª\93®\8dì\82µ\82Ä\82¢\82Ãœ\82¹\82ñ"
-
 msgid "E293: block was not locked"
 msgstr "E293: \83u\83\8d\83b\83N\82ª\83\8d\83b\83N\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
 
@@ -3276,6 +3373,9 @@ msgstr "E298: 
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: \83u\83\8d\83b\83N 2 \82ð\8eæ\93¾\82Ã…\82«\82Ãœ\82¹\82ñ?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: \83X\83\8f\83b\83v\83t\83@\83C\83\8b\82ÃŒ\88Ã\8d\86\82ð\8dX\90V\92\86\82É\83G\83\89\81[\82ª\94­\90¶\82µ\82Ãœ\82µ\82½"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: \82¨\82Ã\82Æ, \83X\83\8f\83b\83v\83t\83@\83C\83\8b\82ª\8e¸\82í\82ê\82Ãœ\82µ\82½!!!"
@@ -3292,7 +3392,7 @@ msgstr "E304: ml_upd_block0(): 
 
 #, c-format
 msgid "E305: No swap file found for %s"
-msgstr "E305: %s \82É\82Ã\83X\83\8f\83b\83v\83t\83@\83C\83\8b\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E305: %s \82É\82Ã\83X\83\8f\83b\83v\83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "Enter number of swap file to use (0 to quit): "
 msgstr "\8eg\97p\82·\82é\83X\83\8f\83b\83v\83t\83@\83C\83\8b\82ÃŒ\94Ô\8d\86\82ð\93ü\97Ã\82µ\82Ä\82­\82¾\82³\82¢(0 \82Ã…\8fI\97¹): "
@@ -3334,6 +3434,12 @@ msgstr ""
 ",\n"
 "\82à\82µ\82­\82Ã\83t\83@\83C\83\8b\82ª\91¹\8f\9d\82µ\82Ä\82¢\82Ãœ\82·."
 
+#, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr ""
+"E833: %s \82Ã\82±\82ÃŒ\83o\81[\83W\83\87\83\93\82ÃŒVim\82Ã…\83T\83|\81[\83g\82µ\82Ä\82¢\82È\82¢\8c`\8e®\82Ã…\88Ã\8d\86\89»\82³\82ê\82Ä\82¢\82Ãœ\82·"
+
 msgid " has been damaged (page size is smaller than minimum value).\n"
 msgstr " \82Ã\91¹\8f\9d\82µ\82Ä\82¢\82Ãœ\82· (\83y\81[\83W\83T\83C\83Y\82ª\8dÃ…\8f¬\92l\82ð\89º\89ñ\82Ã\82Ä\82¢\82Ãœ\82·).\n"
 
@@ -3349,6 +3455,38 @@ msgid "E308: Warning: Original file may have been changed"
 msgstr "E308: \8cx\8d\90\8c´\96{\83t\83@\83C\83\8b\82ª\95Ã\8dX\82³\82ê\82Ä\82¢\82Ãœ\82·"
 
 #, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "\83X\83\8f\83b\83v\83t\83@\83C\83\8b\82Ã\88Ã\8d\86\89»\82³\82ê\82Ä\82¢\82Ãœ\82·: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"\90V\82µ\82¢\88Ã\8d\86\83L\81[\82ð\93ü\97Ã\82µ\82½\82 \82Æ\82É\83e\83L\83X\83g\83t\83@\83C\83\8b\82ð\95Û\91¶\82µ\82Ä\82¢\82È\82¢\8fê\8d\87\82Ã,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"\90V\82µ\82¢\88Ã\8d\86\83L\81[\82ð\93ü\97Ã\82µ\82Ä\82­\82¾\82³\82¢."
+
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"\88Ã\8d\86\83L\81[\82ð\95Ã\82¦\82½\82 \82Æ\82É\83e\83L\83X\83g\83t\83@\83C\83\8b\82ð\95Û\91¶\82µ\82½\8fê\8d\87\82Ã, \83e\83L\83X\83g\83t\83@\83C\83\8b\82Æ"
+
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"\83X\83\8f\83b\83v\83t\83@\83C\83\8b\82É\93¯\82¶\88Ã\8d\86\83L\81[\82ð\8eg\82¤\82½\82ß\82Éenter\82¾\82¯\82ð\89\9f\82µ\82Ä\82­\82¾\82³\82¢."
+
+#, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309: %s \82©\82ç\83u\83\8d\83b\83N 1 \82ð\93Ç\8d\9e\82ß\82Ãœ\82¹\82ñ"
 
@@ -3372,10 +3510,10 @@ msgid "???BLOCK MISSING"
 msgstr "???\83u\83\8d\83b\83N\82ª\82 \82è\82Ãœ\82¹\82ñ"
 
 msgid "??? from here until ???END lines may be messed up"
-msgstr "??? \82±\82±\82©\82ç???END\82Ãœ\82Ã…\82ÃŒ\8ds\82ª\94j\89ó\82³\82ê\82Ä\82¢\82é\82æ\82¤\82Ã…\82·"
+msgstr "??? \82±\82±\82©\82ç ???END \82Ãœ\82Ã…\82ÃŒ\8ds\82ª\94j\89ó\82³\82ê\82Ä\82¢\82é\82æ\82¤\82Ã…\82·"
 
 msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? \82±\82±\82©\82ç??END\82Ãœ\82Ã…\82ÃŒ\8ds\82ª\91}\93ü\82©\8dí\8f\9c\82³\82ê\82½\82æ\82¤\82Ã…\82·"
+msgstr "??? \82±\82±\82©\82ç ???END \82Ãœ\82Ã…\82ÃŒ\8ds\82ª\91}\93ü\82©\8dí\8f\9c\82³\82ê\82½\82æ\82¤\82Ã…\82·"
 
 msgid "???END"
 msgstr "???END"
@@ -3401,16 +3539,24 @@ msgstr ""
 "\n"
 "(\95Ã\8dX\82ð\83`\83F\83b\83N\82·\82é\82½\82ß\82É, \82±\82ÃŒ\83t\83@\83C\83\8b\82ð\95Ê\82ÃŒ\96¼\91O\82Ã…\95Û\91¶\82µ\82½\8fã\82Ã…\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "\8c´\96{\83t\83@\83C\83\8b\82Æ\82ÃŒ diff \82ð\8eÀ\8ds\82·\82é\82Æ\97Ç\82¢\82Ã…\82µ\82Ã¥\82¤)\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "\8c´\96{\83t\83@\83C\83\8b\82Æ\82ÃŒ diff \82ð\8eÀ\8ds\82·\82é\82Æ\97Ç\82¢\82Ã…\82µ\82Ã¥\82¤)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "\95\9c\8c³\8a®\97¹. \83o\83b\83t\83@\82ÃŒ\93à\97e\82Ã\83t\83@\83C\83\8b\82Æ\93¯\82¶\82É\82È\82è\82Ãœ\82µ\82½."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
+"\n"
 "\82»\82ê\82©\82ç.swp\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82Ä\82­\82¾\82³\82¢\n"
 "\n"
 
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "\83X\83\8f\83b\83v\83t\83@\83C\83\8b\82©\82ç\8eæ\93¾\82µ\82½\88Ã\8d\86\83L\81[\82ð\83e\83L\83X\83g\83t\83@\83C\83\8b\82É\8eg\82¢\82Ãœ\82·.\n"
+
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
 msgstr "\83X\83\8f\83b\83v\83t\83@\83C\83\8b\82ª\95¡\90\94\8c©\82Â\82©\82è\82Ãœ\82µ\82½:"
@@ -3520,7 +3666,7 @@ msgstr "E315: ml_get: 
 
 #, c-format
 msgid "E316: ml_get: cannot find line %ld"
-msgstr "E316: ml_get: \8ds %ld \82ð\82Ã\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
+msgstr "E316: ml_get: \8ds %ld \82ð\8c©\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
 
 msgid "E317: pointer block id wrong 3"
 msgstr "E317: \83|\83C\83\93\83^\83u\83\8d\83b\83N\82ÃŒID\82ª\8aÔ\88á\82Ã\82Ä\82¢\82Ãœ\82· 3"
@@ -3539,7 +3685,7 @@ msgstr "
 
 #, c-format
 msgid "E320: Cannot find line %ld"
-msgstr "E320: \8ds %ld \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E320: \8ds %ld \82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "E317: pointer block id wrong"
 msgstr "E317: \83|\83C\83\93\83^\83u\83\8d\83b\83N\82ÃŒID\82ª\8aÔ\88á\82Ã\82Ä\82¢\82Ãœ\82·"
@@ -3585,24 +3731,20 @@ msgstr "      
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
 "(1) \95Ê\82ÃŒ\83v\83\8d\83O\83\89\83\80\82ª\93¯\82¶\83t\83@\83C\83\8b\82ð\95Ã’\8fW\82µ\82Ä\82¢\82é\82©\82à\82µ\82ê\82Ãœ\82¹\82ñ.\n"
 "    \82±\82ÃŒ\8fê\8d\87\82É\82Ã, \95Ã\8dX\82ð\82µ\82½\8dÛ\82É\8dÃ…\8fI\93I\82É, \93¯\82¶\83t\83@\83C\83\8b\82ÃŒ\88Ù\82È\82é\n"
-"    2\82Â\82ÃŒ\83C\83\93\83X\83^\83\93\83X\82ª\82Ã…\82«\82Ä\82µ\82Ãœ\82¤\82±\82Æ\82É\92\8d\88Ó\82µ\82Ä\82­\82¾\82³\82¢.\n"
+"    2\82Â\82ÃŒ\83C\83\93\83X\83^\83\93\83X\82ª\82Ã…\82«\82Ä\82µ\82Ãœ\82¤\82±\82Æ\82É\92\8d\88Ó\82µ\82Ä\82­\82¾\82³\82¢."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    \8fI\97¹\82·\82é\82©, \92\8d\88Ó\82µ\82È\82ª\82ç\91±\82¯\82Ãœ\82·.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  \8fI\97¹\82·\82é\82©, \92\8d\88Ó\82µ\82È\82ª\82ç\91±\82¯\82Ä\82­\82¾\82³\82¢.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) \82±\82ÃŒ\83t\83@\83C\83\8b\82ÃŒ\95Ã’\8fW\83Z\83b\83V\83\87\83\93\82ª\83N\83\89\83b\83V\83\85\82µ\82½.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) \82±\82ÃŒ\83t\83@\83C\83\8b\82ÃŒ\95Ã’\8fW\83Z\83b\83V\83\87\83\93\82ª\83N\83\89\83b\83V\83\85\82µ\82½.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    \82±\82ÃŒ\8fê\8d\87\82É\82à\":recover\" \82© \"vim -r "
@@ -3612,7 +3754,7 @@ msgid ""
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
 "\"\n"
-"    \82ð\8eg\97p\82µ\82Ä\95Ã\8dX\82ð\83\8a\83J\83o\81[\82µ\82Ãœ\82·(\":help recover\" \82ð\8eQ\8fÆ).\n"
+"    \82ð\8eg\97p\82µ\82Ä\95Ã\8dX\82ð\83\8a\83J\83o\81[\82µ\82Ãœ\82·(\":help recovery\" \82ð\8eQ\8fÆ).\n"
 
 msgid "    If you did this already, delete the swap file \""
 msgstr "    \8aù\82É\82±\82ê\82ð\8ds\82È\82Ã\82½\82ÃŒ\82È\82ç\82ÃŽ, \83X\83\8f\83b\83v\83t\83@\83C\83\8b \""
@@ -3645,7 +3787,7 @@ msgid ""
 msgstr ""
 "\93Ç\8d\9e\90ê\97p\82Ã…\8aJ\82­(&O)\n"
 "\82Æ\82É\82©\82­\95Ã’\8fW\82·\82é(&E)\n"
-"\95\9c\8a\88\82³\82¹\82é(&R)ecover\n"
+"\95\9c\8a\88\82³\82¹\82é(&R)\n"
 "\8fI\97¹\82·\82é(&Q)\n"
 "\92\86\8e~\82·\82é(&A)"
 
@@ -3659,7 +3801,7 @@ msgid ""
 msgstr ""
 "\93Ç\8d\9e\90ê\97p\82Ã…\8aJ\82­(&O)\n"
 "\82Æ\82É\82©\82­\95Ã’\8fW\82·\82é(&E)\n"
-"\95\9c\8a\88\82³\82¹\82é(&R)ecover\n"
+"\95\9c\8a\88\82³\82¹\82é(&R)\n"
 "\8dí\8f\9c\82·\82é(&D)\n"
 "\8fI\97¹\82·\82é(&Q)\n"
 "\92\86\8e~\82·\82é(&A)"
@@ -3707,7 +3849,7 @@ msgstr "E333: 
 
 #, c-format
 msgid "E334: Menu not found: %s"
-msgstr "E334: \83\81\83j\83\85\81[\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
+msgstr "E334: \83\81\83j\83\85\81[\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
 
 #, c-format
 msgid "E335: Menu not defined for %s mode"
@@ -3717,7 +3859,7 @@ msgid "E336: Menu path must lead to a sub-menu"
 msgstr "E336: \83\81\83j\83\85\81[\83p\83X\82Ã\83T\83u\83\81\83j\83\85\81[\82ð\90¶\82¶\82È\82¯\82ê\82ÃŽ\82¢\82¯\82Ãœ\82¹\82ñ"
 
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: \83\81\83j\83\85\81[\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ - \83\81\83j\83\85\81[\96¼\82ð\8am\94F\82µ\82Ä\82­\82¾\82³\82¢"
+msgstr "E337: \83\81\83j\83\85\81[\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ - \83\81\83j\83\85\81[\96¼\82ð\8am\94F\82µ\82Ä\82­\82¾\82³\82¢"
 
 #, c-format
 msgid "Error detected while processing %s:"
@@ -3748,7 +3890,7 @@ msgid "-- More --"
 msgstr "-- \8cp\91± --"
 
 msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " SPACE/d/j: \89æ\96Ê/\83y\81[\83W/\8d\89º, b/uk: \8fã, q: \8fI\97¹ "
+msgstr " SPACE/d/j: \89æ\96Ê/\83y\81[\83W/\8d\89º, b/u/k: \8fã, q: \8fI\97¹ "
 
 msgid "Question"
 msgstr "\8e¿\96â"
@@ -3789,17 +3931,21 @@ msgstr "E338: 
 msgid "E766: Insufficient arguments for printf()"
 msgstr "E766: printf() \82ÃŒ\88ø\90\94\82ª\95s\8f\\\95ª\82Ã…\82·"
 
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: printf() \82ÃŒ\88ø\90\94\82É\82Ã\95\82\93®\8f­\90\94\93_\90\94\82ª\8aú\91Ã’\82³\82ê\82Ä\82¢\82Ãœ\82·"
+
 msgid "E767: Too many arguments to printf()"
-msgstr "E767: pirntf() \82ÃŒ\88ø\90\94\82ª\91½\89ß\82¬\82Ãœ\82·"
+msgstr "E767: printf() \82ÃŒ\88ø\90\94\82ª\91½\89ß\82¬\82Ãœ\82·"
 
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: \8cx\8d\90\93Ç\8d\9e\90ê\97p\83t\83@\83C\83\8b\82ð\95Ã\8dX\82µ\82Ãœ\82·"
 
-msgid "Type number or click with mouse (<Enter> cancels): "
-msgstr "\90\94\92l\82ð\93ü\97Ã\82·\82é\82©\83}\83E\83X\82ð\83N\83\8a\83b\83N\82µ\82Ä\82­\82¾\82³\82¢ (<Enter> \82Ã…\83L\83\83\83\93\83Z\83\8b): "
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr ""
+"\94Ô\8d\86\82Æ<Enter>\82ð\93ü\97Ã\82·\82é\82©\83}\83E\83X\82Ã…\83N\83\8a\83b\83N\82µ\82Ä\82­\82¾\82³\82¢ (\8bó\82Ã…\83L\83\83\83\93\83Z\83\8b): "
 
-msgid "Choice number (<Enter> cancels): "
-msgstr "\94Ô\8d\86\82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢ (<Enter> \82Ã…\83L\83\83\83\93\83Z\83\8b): "
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "\94Ô\8d\86\82Æ<Enter>\82ð\93ü\97Ã\82µ\82Ä\82­\82¾\82³\82¢ (\8bó\82Ã…\83L\83\83\83\93\83Z\83\8b): "
 
 msgid "1 more line"
 msgstr "1 \8d\92Ç\89Ã\82µ\82Ãœ\82µ\82½"
@@ -3828,7 +3974,6 @@ msgstr "Vim: 
 msgid "Vim: Finished.\n"
 msgstr "Vim: \8fI\97¹\82µ\82Ãœ\82µ\82½.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "\83G\83\89\81[: "
 
@@ -3887,6 +4032,9 @@ msgstr "
 msgid "Keys don't match!"
 msgstr "\83L\81[\82ª\88ê\92v\82µ\82Ãœ\82¹\82ñ"
 
+msgid "E854: path too long for completion"
+msgstr "E854: \83p\83X\82ª\92·\89ß\82¬\82Ä\95â\8a®\82Ã…\82«\82Ãœ\82¹\82ñ"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -3911,7 +4059,6 @@ msgstr "E346: cdpath
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: \83p\83X\82É\82Ã\82±\82ê\88È\8fã \"%s\" \82Æ\82¢\82¤\83t\83@\83C\83\8b\82ª\82 \82è\82Ãœ\82¹\82ñ"
 
-#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
 msgstr "Netbeans #2 \82É\90Ú\91±\82Ã…\82«\82Ãœ\82¹\82ñ"
 
@@ -3930,11 +4077,21 @@ msgstr "Netbeans 
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: \83o\83b\83t\83@ %ld \82ÃŒ NetBeans \90Ú\91±\82ª\8e¸\82í\82ê\82Ãœ\82µ\82½"
 
-msgid "E505: "
-msgstr "E505: "
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeans\82Ã\82±\82ÃŒGUI\82É\82Ã\91ÃŽ\89\9e\82µ\82Ä\82¢\82Ãœ\82¹\82ñ"
 
-msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: 'operatorfunc' \83I\83v\83V\83\87\83\93\82ª\8bó\82Ã…\82·"
+msgid "E511: netbeans already connected"
+msgstr "E511: NetBeans\82Ã\8aù\82É\90Ú\91±\82µ\82Ä\82¢\82Ãœ\82·"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s \82Ã\93Ç\8d\9e\90ê\97p\82Ã…\82· (\8b­\90§\8f\91\8d\9e\82É\82à! \82ð\92Ç\89Ã)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: \83J\81[\83\\\83\8b\82ÃŒ\88Ê\92u\82É\82Ã\8e¯\95Ê\8eq\82ª\82 \82è\82Ãœ\82¹\82ñ"
+
+msgid "E774: 'operatorfunc' is empty"
+msgstr "E774: 'operatorfunc' \83I\83v\83V\83\87\83\93\82ª\8bó\82Ã…\82·"
 
 msgid "E775: Eval feature not available"
 msgstr "E775: \8e®\95]\89¿\8b@\94\\\82ª\96³\8cø\82É\82È\82Ã\82Ä\82¢\82Ãœ\82·"
@@ -3945,9 +4102,6 @@ msgstr "
 msgid "E348: No string under cursor"
 msgstr "E348: \83J\81[\83\\\83\8b\82ÃŒ\88Ê\92u\82É\82Ã\95¶\8e\9a\97ñ\82ª\82 \82è\82Ãœ\82¹\82ñ"
 
-msgid "E349: No identifier under cursor"
-msgstr "E349: \83J\81[\83\\\83\8b\82ÃŒ\88Ê\92u\82É\82Ã\8e¯\95Ê\8eq\82ª\82 \82è\82Ãœ\82¹\82ñ"
-
 msgid "E352: Cannot erase folds with current 'foldmethod'"
 msgstr "E352: \8c»\8dÃ\82ÃŒ 'foldmethod' \82Ã…\82Ã\90Ãœ\8fô\82Ã\82ð\8fÃ\8b\8e\82Ã…\82«\82Ãœ\82¹\82ñ"
 
@@ -3984,11 +4138,11 @@ msgid "%ld lines to indent... "
 msgstr "%ld \8ds\82ª\83C\83\93\83f\83\93\83g\82³\82ê\82Ãœ\82·... "
 
 msgid "1 line indented "
-msgstr "1 \8ds\82ð\83C\83\93\83f\83\93\83g\82µ\82Ãœ\82µ\82½"
+msgstr "1 \8ds\82ð\83C\83\93\83f\83\93\83g\82µ\82Ãœ\82µ\82½ "
 
 #, c-format
 msgid "%ld lines indented "
-msgstr "%ld \8ds\82ð\83C\83\93\83f\83\93\83g\82µ\82Ãœ\82µ\82½"
+msgstr "%ld \8ds\82ð\83C\83\93\83f\83\93\83g\82µ\82Ãœ\82µ\82½ "
 
 msgid "E748: No previously used register"
 msgstr "E748: \82Ãœ\82¾\83\8c\83W\83X\83^\82ð\8eg\97p\82µ\82Ä\82¢\82Ãœ\82¹\82ñ"
@@ -4006,7 +4160,7 @@ msgstr "%ld 
 
 #, c-format
 msgid "freeing %ld lines"
-msgstr "%ld \8ds\82ð\8aJ\95ú\92\86"
+msgstr "%ld \8ds\82ð\89ð\95ú\92\86"
 
 msgid "block of 1 line yanked"
 msgstr "1 \8ds\82ÃŒ\83u\83\8d\83b\83N\82ª\83\84\83\93\83N\82³\82ê\82Ãœ\82µ\82½"
@@ -4037,7 +4191,6 @@ msgstr ""
 msgid "Illegal register name"
 msgstr "\95s\90³\82È\83\8c\83W\83X\83^\96¼"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -4055,7 +4208,7 @@ msgstr "%ld 
 
 #, c-format
 msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
-msgstr "\91I\91ð %s%ld / %ld \8ds; %ld / %ld \92P\8cê; %ld / %ld \95¶\8e\9a"
+msgstr "\91I\91ð %s%ld / %ld \8ds; %ld / %ld \92P\8cê; %ld / %ld \83o\83C\83g"
 
 #, c-format
 msgid ""
@@ -4065,7 +4218,7 @@ msgstr "
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
-msgstr "\97ñ %s / %s; \8ds %ld of %ld; \92P\8cê %ld / %ld; \95¶\8e\9a %ld / %ld"
+msgstr "\97ñ %s / %s; \8ds %ld of %ld; \92P\8cê %ld / %ld; \83o\83C\83g %ld / %ld"
 
 #, c-format
 msgid ""
@@ -4093,11 +4246,14 @@ msgstr "E519: 
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: modeline \82Ã…\82Ã\8b\96\89Â\82³\82ê\82Ãœ\82¹\82ñ"
 
+msgid "E846: Key code not set"
+msgstr "E846: \83L\81[\83R\81[\83h\82ª\90Ã\92è\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
+
 msgid "E521: Number required after ="
 msgstr "E521: = \82ÃŒ\8cã\82É\82Ã\90\94\8e\9a\82ª\95K\97v\82Ã…\82·"
 
 msgid "E522: Not found in termcap"
-msgstr "E522: termcap \93à\82É\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E522: termcap \93à\82É\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E539: Illegal character <%s>"
@@ -4115,6 +4271,12 @@ msgstr "E531: GUI
 msgid "E589: 'backupext' and 'patchmode' are equal"
 msgstr "E589: 'backupext' \82Æ 'patchmode' \82ª\93¯\82¶\82Ã…\82·"
 
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: 'listchars'\82ÃŒ\92l\82É\96µ\8f\82\82ª\82 \82è\82Ãœ\82·"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: 'fillchars'\82ÃŒ\92l\82É\96µ\8f\82\82ª\82 \82è\82Ãœ\82·"
+
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: GTK+2 GUI\82Ã…\82Ã\95Ã\8dX\82Ã…\82«\82Ãœ\82¹\82ñ"
 
@@ -4321,9 +4483,6 @@ msgstr "E244: 
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: '%c' \82Ã\95s\90³\82È\95¶\8e\9a\82Ã…\82· (\83t\83H\83\93\83g\96¼ \"%s\")"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: \96³\8cø\82È 'osfiletype' \83I\83v\83V\83\87\83\93 - \"Text\" \82ð\8eg\82¢\82Ãœ\82·"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: 2\8fd\82ÃŒ\83V\83O\83i\83\8b\82ÃŒ\82½\82ß, \8fI\97¹\82µ\82Ãœ\82·\n"
 
@@ -4468,7 +4627,7 @@ msgid ""
 "External commands will not pause after completion.\n"
 "See  :help win32-vimrun  for more information."
 msgstr ""
-"VIMRUN.EXE\82ª $PATH \82ÃŒ\92\86\82É\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ.\n"
+"VIMRUN.EXE\82ª $PATH \82ÃŒ\92\86\82É\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ.\n"
 "\8aO\95\94\83R\83}\83\93\83h\82ÃŒ\8fI\97¹\8cã\82É\88ê\8e\9e\92â\8e~\82ð\82µ\82Ãœ\82¹\82ñ.\n"
 "\8fÚ\8d×\82à :help win32-vimrun  \82ð\8eQ\8fÆ\82µ\82Ä\82­\82¾\82³\82¢."
 
@@ -4527,6 +4686,9 @@ msgstr "
 msgid "E382: Cannot write, 'buftype' option is set"
 msgstr "E382: 'buftype' \83I\83v\83V\83\87\83\93\82ª\90Ã\92è\82³\82ê\82Ä\82¢\82é\82ÃŒ\82Ã…\8f\91\8d\9e\82Ã\82Ãœ\82¹\82ñ"
 
+msgid "Error file"
+msgstr "\83G\83\89\81[\83t\83@\83C\83\8b"
+
 msgid "E683: File name missing or invalid pattern"
 msgstr "E683: \83t\83@\83C\83\8b\96¼\82ª\96³\82¢\82©\96³\8cø\82È\83p\83^\81[\83\93\82Ã…\82·"
 
@@ -4544,18 +4706,10 @@ msgstr "E777: 
 msgid "E369: invalid item in %s%%[]"
 msgstr "E369: \96³\8cø\82È\8d\80\96Ú\82Ã…\82·: %s%%[]"
 
-msgid "E339: Pattern too long"
-msgstr "E339: \83p\83^\81[\83\93\82ª\92·\89ß\82¬\82Ãœ\82·"
-
-msgid "E50: Too many \\z("
-msgstr "E50: \\z( \82ª\91½\89ß\82¬\82Ãœ\82·"
-
+#
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: %s( \82ª\91½\89ß\82¬\82Ãœ\82·"
-
-msgid "E52: Unmatched \\z("
-msgstr "E52: \\z( \82ª\92Þ\82è\8d\87\82Ã\82Ä\82¢\82Ãœ\82¹\82ñ"
+msgid "E769: Missing ] after %s["
+msgstr "E769: %s[ \82ÃŒ\8cã\82É ] \82ª\82 \82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E53: Unmatched %s%%("
@@ -4569,6 +4723,36 @@ msgstr "E54: %s( 
 msgid "E55: Unmatched %s)"
 msgstr "E55: %s) \82ª\92Þ\82è\8d\87\82Ã\82Ä\82¢\82Ãœ\82¹\82ñ"
 
+#
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( \82Ã\83R\83R\82Ã…\82Ã\8b\96\89Â\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
+
+#
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 \82»\82ÃŒ\91¼\82Ã\83R\83R\82Ã…\82Ã\8b\96\89Â\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
+
+#
+#, c-format
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: %s%%[ \82ÃŒ\8cã\82É ] \82ª\82 \82è\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "E70: Empty %s%%[]"
+msgstr "E70: %s%%[] \82ª\8bó\82Ã…\82·"
+
+msgid "E339: Pattern too long"
+msgstr "E339: \83p\83^\81[\83\93\82ª\92·\89ß\82¬\82Ãœ\82·"
+
+msgid "E50: Too many \\z("
+msgstr "E50: \\z( \82ª\91½\89ß\82¬\82Ãœ\82·"
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: %s( \82ª\91½\89ß\82¬\82Ãœ\82·"
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: \\z( \82ª\92Þ\82è\8d\87\82Ã\82Ä\82¢\82Ãœ\82¹\82ñ"
+
 #, c-format
 msgid "E59: invalid character after %s@"
 msgstr "E59: %s@ \82ÃŒ\8cã\82É\95s\90³\82È\95¶\8e\9a\82ª\82 \82è\82Ãœ\82µ\82½"
@@ -4598,28 +4782,11 @@ msgid "E65: Illegal back reference"
 msgstr "E65: \95s\90³\82È\8cã\95û\8eQ\8fÆ\82Ã…\82·"
 
 #
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( \82Ã\83R\83R\82Ã…\82Ã\8b\96\89Â\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
-
-#
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 \82»\82ÃŒ\91¼\82Ã\83R\83R\82Ã…\82Ã\8b\96\89Â\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
-
-#
 msgid "E68: Invalid character after \\z"
 msgstr "E68: \\z \82ÃŒ\8cã\82É\95s\90³\82È\95¶\8e\9a\82ª\82 \82è\82Ãœ\82µ\82½"
 
 #
 #, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: %s%%[ \82ÃŒ\8cã\82É ] \82ª\82 \82è\82Ãœ\82¹\82ñ"
-
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: %s%%[] \82ª\8bó\82Ã…\82·"
-
-#
-#, c-format
 msgid "E678: Invalid character after %s%%[dxouU]"
 msgstr "E678: %s%%[dxouU] \82ÃŒ\8cã\82É\95s\90³\82È\95¶\8e\9a\82ª\82 \82è\82Ãœ\82µ\82½"
 
@@ -4628,11 +4795,6 @@ msgstr "E678: %s%%[dxouU] 
 msgid "E71: Invalid character after %s%%"
 msgstr "E71: %s%% \82ÃŒ\8cã\82É\95s\90³\82È\95¶\8e\9a\82ª\82 \82è\82Ãœ\82µ\82½"
 
-#
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: %s[ \82ÃŒ\8cã\82É ] \82ª\82 \82è\82Ãœ\82¹\82ñ"
-
 #, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: %s{...} \93à\82É\95¶\96@\83G\83\89\81[\82ª\82 \82è\82Ãœ\82·"
@@ -4640,6 +4802,81 @@ msgstr "E554: %s{...} 
 msgid "External submatches:\n"
 msgstr "\8aO\95\94\82ÃŒ\95\94\95ª\8aY\93\96:\n"
 
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr ""
+"E864: \\%#= \82É\82à0, 1 \82à\82µ\82­\82à2 \82ÃŒ\82Ã\82ª\91±\82¯\82ç\82ê\82Ãœ\82·\81B"
+"\90³\8bK\95\\\8c»\83G\83\93\83W\83\93\82Ã\8e©\93®\91I\91ð\82³\82ê\82Ãœ\82·\81B"
+
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (NFA \90³\8bK\95\\\8c») \88Ê\92u\82ª\8cë\82Ã\82Ä\82¢\82Ãœ\82·: %c"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) \8aú\91Ã’\82æ\82è\91\81\82­\90³\8bK\95\\\8c»\82ÃŒ\8fI\92[\82É\93\9e\92B\82µ\82Ãœ\82µ\82½"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) \96¢\92m\82ÃŒ\83I\83y\83\8c\81[\83^\82Ã…\82·: '\\z%c'"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\%%%c'"
+msgstr "E867: (NFA) \96¢\92m\82ÃŒ\83I\83y\83\8c\81[\83^\82Ã…\82·: '\\%%%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: \93\99\89¿\83N\83\89\83X\82ð\8aÃœ\82ÞNFA\8d\\\92z\82É\8e¸\94s\82µ\82Ãœ\82µ\82½!"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) \96¢\92m\82ÃŒ\83I\83y\83\8c\81[\83^\82Ã…\82·: '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (NFA \90³\8bK\95\\\8c») \8cJ\82è\95Ô\82µ\82ÃŒ\90§\8cÀ\89ñ\90\94\82ð\93Ç\8d\9e\92\86\82É\83G\83\89\81["
+
+#. Can't have a multi follow a multi.
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (NFA \90³\8bK\95\\\8c») \8cJ\82è\95Ô\82µ \82ÃŒ\8cã\82É \8cJ\82è\95Ô\82µ \82Ã\82Ã…\82«\82Ãœ\82¹\82ñ!"
+
+#. Too many `('
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (NFA \90³\8bK\95\\\8c») '(' \82ª\91½\89ß\82¬\82Ãœ\82·"
+
+msgid "E879: (NFA regexp) Too many \\z("
+msgstr "E879: (NFA \90³\8bK\95\\\8c») \\z( \82ª\91½\89ß\82¬\82Ãœ\82·"
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (NFA \90³\8bK\95\\\8c») \8fI\92[\8bL\8d\86\82ª\82 \82è\82Ãœ\82¹\82ñ"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) \83X\83^\83b\83N\82ð\83|\83b\83v\82Ã…\82«\82Ãœ\82¹\82ñ!"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr ""
+"E875: (NFA \90³\8bK\95\\\8c») (\8cã\92u\95¶\8e\9a\97ñ\82ðNFA\82É\95Ã\8a·\92\86\82É) "
+"\83X\83^\83b\83N\82É\8ec\82³\82ê\82½\83X\83e\81[\83g\82ª\91½\89ß\82¬\82Ü\82·"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (NFA \90³\8bK\95\\\8c») NFA\91S\91ÃŒ\82ð\95Û\91¶\82·\82é\82É\82Ã\8bó\82«\83X\83y\81[\83X\82ª\91«\82è\82Ãœ\82¹\82ñ"
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (NFA) \8c»\8dÃ\89¡\92f\92\86\82ÃŒ\83u\83\89\83\93\83`\82É\8f\\\95ª\82È\83\81\83\82\83\8a\82ð\8a\84\82è\93\96\82Ä\82ç\82ê\82Ãœ\82¹\82ñ!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr "NFA\90³\8bK\95\\\8c»\83G\83\93\83W\83\93\97p\82ÃŒ\83\8d\83O\83t\83@\83C\83\8b\82ð\8f\91\8d\9e\97p\82Æ\82µ\82Ä\8aJ\82¯\82Ãœ\82¹\82ñ\81B"
+"\83\8d\83O\82Ã\95W\8f\80\8fo\97Ã\82É\8fo\97Ã\82µ\82Ãœ\82·\81B"
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) \83\8d\83O\83t\83@\83C\83\8b %s \82ð\8aJ\82¯\82Ãœ\82¹\82ñ!"
+
+msgid "Could not open temporary log file for writing "
+msgstr "NFA\90³\8bK\95\\\8c»\83G\83\93\83W\83\93\97p\82ÃŒ\83\8d\83O\83t\83@\83C\83\8b\82ð\8f\91\8d\9e\97p\82Æ\82µ\82Ä\8aJ\82¯\82Ãœ\82¹\82ñ\81B"
+
 msgid " VREPLACE"
 msgstr " \89¼\91z\92u\8a·"
 
@@ -4700,11 +4937,11 @@ msgstr "E383: 
 
 #, c-format
 msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: \8fã\82Ãœ\82Ã…\8c\9f\8dõ\82µ\82½\82¯\82ê\82Ç\8aY\93\96\89Ó\8f\8a\82Ã\82 \82è\82Ãœ\82¹\82ñ: %s"
+msgstr "E384: \8fã\82Ãœ\82Ã…\8c\9f\8dõ\82µ\82Ãœ\82µ\82½\82ª\8aY\93\96\89Ó\8f\8a\82Ã\82 \82è\82Ãœ\82¹\82ñ: %s"
 
 #, c-format
 msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: \89º\82Ãœ\82Ã…\8c\9f\8dõ\82µ\82½\82¯\82ê\82Ç\8aY\93\96\89Ó\8f\8a\82Ã\82 \82è\82Ãœ\82¹\82ñ: %s"
+msgstr "E385: \89º\82Ãœ\82Ã…\8c\9f\8dõ\82µ\82Ãœ\82µ\82½\82ª\8aY\93\96\89Ó\8f\8a\82Ã\82 \82è\82Ãœ\82¹\82ñ: %s"
 
 msgid "E386: Expected '?' or '/'  after ';'"
 msgstr "E386: ';' \82ÃŒ\82 \82Æ\82É\82à'?' \82© '/' \82ª\8aú\91Ã’\82³\82ê\82Ä\82¢\82é"
@@ -4714,10 +4951,10 @@ msgstr " (
 
 #. cursor at status line
 msgid "--- Included files "
-msgstr "--- \83C\83\93\83N\83\8b\81[\83h\82³\82ê\82½\83t\83@\83C\83\8b"
+msgstr "--- \83C\83\93\83N\83\8b\81[\83h\82³\82ê\82½\83t\83@\83C\83\8b "
 
 msgid "not found "
-msgstr "\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ "
+msgstr "\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ "
 
 msgid "in path ---\n"
 msgstr "\83p\83X\82É ----\n"
@@ -4726,7 +4963,7 @@ msgid "  (Already listed)"
 msgstr "  (\8aù\82É\97ñ\8b\93)"
 
 msgid "  NOT FOUND"
-msgstr "  \82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "  \8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "Scanning included file: %s"
@@ -4740,16 +4977,19 @@ msgid "E387: Match is on current line"
 msgstr "E387: \8c»\8dÃ\8ds\82É\8aY\93\96\82ª\82 \82è\82Ãœ\82·"
 
 msgid "All included files were found"
-msgstr "\91S\82Ä\82ÃŒ\83C\83\93\83N\83\8b\81[\83h\82³\82ê\82½\83t\83@\83C\83\8b\82ª\82Ã\82Â\82©\82è\82Ãœ\82µ\82½"
+msgstr "\91S\82Ä\82ÃŒ\83C\83\93\83N\83\8b\81[\83h\82³\82ê\82½\83t\83@\83C\83\8b\82ª\8c©\82Â\82©\82è\82Ãœ\82µ\82½"
 
 msgid "No included files"
 msgstr "\83C\83\93\83N\83\8b\81[\83h\83t\83@\83C\83\8b\82Ã\82 \82è\82Ãœ\82¹\82ñ"
 
 msgid "E388: Couldn't find definition"
-msgstr "E388: \92è\8b`\82ð\82Ã\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
+msgstr "E388: \92è\8b`\82ð\8c©\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
 
 msgid "E389: Couldn't find pattern"
-msgstr "E389: \83p\83^\81[\83\93\82ð\82Ã\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
+msgstr "E389: \83p\83^\81[\83\93\82ð\8c©\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
+
+msgid "Substitute "
+msgstr "Substitute "
 
 #, c-format
 msgid ""
@@ -4789,6 +5029,11 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: \83X\83y\83\8b\83`\83F\83b\83N\82Ã\96³\8cø\89»\82³\82ê\82Ä\82¢\82Ãœ\82·"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"\8cx\8d\90\92P\8cê\83\8a\83X\83g \"%s_%s.spl\" \82¨\82æ\82Ñ \"%s_ascii.spl\" \82Ã\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
 "\8cx\8d\90\92P\8cê\83\8a\83X\83g \"%s.%s.spl\" \82¨\82æ\82Ñ \"%s.ascii.spl\" \82Ã\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
@@ -4854,6 +5099,10 @@ msgstr ""
 "\82±\82Æ\82ª\82 \82è\82Ãœ\82·"
 
 #, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "COMPOUNDRULES \82ÃŒ\92l\82É\8cë\82è\82ª\82 \82è\82Ãœ\82·. \83t\83@\83C\83\8b %s \82ÃŒ %d \8ds\96Ú: %s"
+
+#, c-format
 msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
 msgstr "%s \82ÃŒ %d \8ds\96Ú\82ÃŒ COMPOUNDWORDMAX \82ÃŒ\92l\82É\8cë\82è\82ª\82 \82è\82Ãœ\82·: %s"
 
@@ -4918,13 +5167,13 @@ msgid "COMPOUNDSYLMAX used without SYLLABLE"
 msgstr "SYLLABLE \82ª\8ew\92è\82³\82ê\82È\82¢ COMPOUNDSYLMAX"
 
 msgid "Too many postponed prefixes"
-msgstr "\92x\89\84\8cã\92u\8eq\82ª\91½\82·\82¬\82Ãœ\82·"
+msgstr "\92x\89\84\8cã\92u\8eq\82ª\91½\89ß\82¬\82Ãœ\82·"
 
 msgid "Too many compound flags"
 msgstr "\95¡\8d\87\83t\83\89\83O\82ª\91½\89ß\82¬\82Ãœ\82·"
 
 msgid "Too many postponed prefixes and/or compound flags"
-msgstr "\92x\89\84\8cã\92u\8e\82Æ/\82à\82µ\82­\82à\95¡\8d\87\83t\83\89\83O\82ª\91½\82·\82¬\82Ãœ\82·"
+msgstr "\92x\89\84\8cã\92u\8e\82Æ/\82à\82µ\82­\82à\95¡\8d\87\83t\83\89\83O\82ª\91½\89ß\82¬\82Ãœ\82·"
 
 #, c-format
 msgid "Missing SOFO%s line in %s"
@@ -4960,7 +5209,7 @@ msgstr "
 
 #, c-format
 msgid "Duplicate word in %s line %d: %s"
-msgstr "%s \82ÃŒ %d \8ds\96Ú\82Ã… \8fd\95¡\92P\8cê\82ª\82Ã\82Â\82©\82è\82Ãœ\82µ\82½: %s"
+msgstr "%s \82ÃŒ %d \8ds\96Ú\82Ã… \8fd\95¡\92P\8cê\82ª\8c©\82Â\82©\82è\82Ãœ\82µ\82½: %s"
 
 #, c-format
 msgid "First duplicate word in %s line %d: %s"
@@ -4992,7 +5241,7 @@ msgstr "%s 
 
 #, c-format
 msgid "Too many regions in %s line %d: %s"
-msgstr "%s \82ÃŒ %d \8ds\96Ú, \94Ã\88Ã\8ew\92è\82ª\91½\82·\82¬\82Ãœ\82·: %s"
+msgstr "%s \82ÃŒ %d \8ds\96Ú, \94Ã\88Ã\8ew\92è\82ª\91½\89ß\82¬\82Ãœ\82·: %s"
 
 #, c-format
 msgid "/ line ignored in %s line %d: %s"
@@ -5010,6 +5259,9 @@ msgstr "%s 
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "\94ñASCII\95¶\8e\9a\82ð\8aÃœ\82Þ %d \8cÂ\82ÃŒ\92P\8cê\82ð\96³\8e\8b\82µ\82Ãœ\82µ\82½"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: \83\81\83\82\83\8a\82ª\91«\82è\82È\82¢\82ÃŒ\82Ã…\81A\92P\8cê\83\8a\83X\83g\82Ã\95s\8a®\91S\82Ã…\82·"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "\83m\81[\83h %d \8cÂ(\91S %d \8cÂ\92\86\82ð\88³\8fk\82µ\82Ãœ\82µ\82½; \8ec\82è %d (%d%%)"
@@ -5097,7 +5349,7 @@ msgstr "E752: 
 
 #, c-format
 msgid "E753: Not found: %s"
-msgstr "E753: \82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
+msgstr "E753: \8c©\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
 
 #, c-format
 msgid "E778: This does not look like a .sug file: %s"
@@ -5124,6 +5376,9 @@ msgstr "E782: .sug 
 msgid "E783: duplicate char in MAP entry"
 msgstr "E783: MAP \83G\83\93\83g\83\8a\82É\8fd\95¡\95¶\8e\9a\82ª\91¶\8dÃ\82µ\82Ãœ\82·"
 
+msgid "No Syntax items defined for this buffer"
+msgstr "\82±\82ÃŒ\83o\83b\83t\83@\82É\92è\8b`\82³\82ê\82½\8d\\\95¶\97v\91f\82Ã\82 \82è\82Ãœ\82¹\82ñ"
+
 #, c-format
 msgid "E390: Illegal argument: %s"
 msgstr "E390: \95s\90³\82È\88ø\90\94\82Ã…\82·: %s"
@@ -5132,9 +5387,6 @@ msgstr "E390: 
 msgid "E391: No such syntax cluster: %s"
 msgstr "E391: \82»\82ÃŒ\82æ\82¤\82È\8d\\\95¶\83N\83\89\83X\83^\82Ã\82 \82è\82Ãœ\82¹\82ñ: %s"
 
-msgid "No Syntax items defined for this buffer"
-msgstr "\82±\82ÃŒ\83o\83b\83t\83@\82É\92è\8b`\82³\82ê\82½\8d\\\95¶\97v\91f\82Ã\82 \82è\82Ãœ\82¹\82ñ"
-
 msgid "syncing on C-style comments"
 msgstr "C\8c¾\8cê\95\97\83R\83\81\83\93\83g\82©\82ç\93¯\8aú\92\86"
 
@@ -5173,10 +5425,10 @@ msgid "E392: No such syntax cluster: %s"
 msgstr "E392: \82»\82ÃŒ\82æ\82¤\82È\8d\\\95¶\83N\83\89\83X\83^\82Ã\82 \82è\82Ãœ\82¹\82ñ: %s"
 
 msgid "minimal "
-msgstr "minimal"
+msgstr "minimal "
 
 msgid "maximal "
-msgstr "maximal"
+msgstr "maximal "
 
 msgid "; match "
 msgstr "; \8aY\93\96 "
@@ -5187,19 +5439,22 @@ msgstr " 
 msgid "E395: contains argument not accepted here"
 msgstr "E395: \82±\82ÃŒ\8fê\8f\8a\82Ã…\82Ã\88ø\90\94contains\82Ã\8b\96\89Â\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: \82±\82ÃŒ\8fê\8f\8a\82Ã…\82Ã\88ø\90\94containedin\82Ã\8b\96\89Â\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
+msgid "E844: invalid cchar value"
+msgstr "E844: \96³\8cø\82Ècchar\82ÃŒ\92l\82Ã…\82·"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: \82±\82±\82Ã…\82Ã\83O\83\8b\81[\83v\82Ã\8b\96\89Â\82³\82ê\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
-msgstr "E394: %s \82ÃŒ\94Ã\88Ã\97v\91f\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgstr "E394: %s \82ÃŒ\94Ã\88Ã\97v\91f\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "E397: Filename required"
 msgstr "E397: \83t\83@\83C\83\8b\96¼\82ª\95K\97v\82Ã…\82·"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: \8d\\\95¶\82ÃŒ\8eæ\82è\8d\9e\82Ã(include)\82ª\91½\89ß\82¬\82Ãœ\82·"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: ']' \82ª\82 \82è\82Ãœ\82¹\82ñ: %s"
@@ -5212,12 +5467,15 @@ msgstr "E398: '=' 
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: \88ø\90\94\82ª\91«\82è\82Ãœ\82¹\82ñ: \8d\\\95¶\94Ã\88à%s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: \8d\\\95¶\83N\83\89\83X\83^\82ª\91½\89ß\82¬\82Ãœ\82·"
+
 msgid "E400: No cluster specified"
 msgstr "E400: \83N\83\89\83X\83^\82ª\8ew\92è\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: \83p\83^\81[\83\93\8bæ\90Ø\82è\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
+msgstr "E401: \83p\83^\81[\83\93\8bæ\90Ø\82è\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
 
 #, c-format
 msgid "E402: Garbage after pattern: %s"
@@ -5232,7 +5490,7 @@ msgstr "E404: 
 
 #, c-format
 msgid "E405: Missing equal sign: %s"
-msgstr "E405: \93\99\82µ\82¢ sign \82ª\82 \82è\82Ãœ\82¹\82ñ: %s"
+msgstr "E405: \93\99\8d\86\82ª\82 \82è\82Ãœ\82¹\82ñ: %s"
 
 #, c-format
 msgid "E406: Empty argument: %s"
@@ -5254,12 +5512,17 @@ msgstr "E409: 
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410: \96³\8cø\82È :syntax \82ÃŒ\83T\83u\83R\83}\83\93\83h: %s"
 
+msgid ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+msgstr ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+
 msgid "E679: recursive loop loading syncolor.vim"
 msgstr "E679: syncolor.vim \82ÃŒ\8dÄ\8bA\8cÄ\82Ñ\8fo\82µ\82ð\8c\9f\8fo\82µ\82Ãœ\82µ\82½"
 
 #, c-format
 msgid "E411: highlight group not found: %s"
-msgstr "E411: \83n\83C\83\89\83C\83g\83O\83\8b\81[\83v\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
+msgstr "E411: \83n\83C\83\89\83C\83g\83O\83\8b\81[\83v\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
@@ -5274,11 +5537,11 @@ msgstr "E414: 
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
-msgstr "E415: \97\\\8aú\82¹\82Ê\93¯\82¶ sign \82Ã…\82·: %s"
+msgstr "E415: \97\\\8aú\82¹\82Ê\93\99\8d\86\82Ã…\82·: %s"
 
 #, c-format
 msgid "E416: missing equal sign: %s"
-msgstr "E416: \93¯\82¶ sign \82ª\82 \82è\82Ãœ\82¹\82ñ: %s"
+msgstr "E416: \93\99\8d\86\82ª\82ª\82 \82è\82Ãœ\82¹\82ñ: %s"
 
 #, c-format
 msgid "E417: missing argument: %s"
@@ -5315,6 +5578,9 @@ msgstr "E669: 
 msgid "W18: Invalid character in group name"
 msgstr "W18: \83O\83\8b\81[\83v\96¼\82É\95s\90³\82È\95¶\8e\9a\82ª\82 \82è\82Ãœ\82·"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: \83n\83C\83\89\83C\83g\82Æ\8d\\\95¶\83O\83\8b\81[\83v\82ª\91½\89ß\82¬\82Ãœ\82·"
+
 msgid "E555: at bottom of tag stack"
 msgstr "E555: \83^\83O\83X\83^\83b\83N\82ÃŒ\96\96\94ö\82Ã…\82·"
 
@@ -5326,7 +5592,7 @@ msgstr "E425: 
 
 #, c-format
 msgid "E426: tag not found: %s"
-msgstr "E426: \83^\83O\82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
+msgstr "E426: \83^\83O\82ª\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ: %s"
 
 msgid "  # pri kind tag"
 msgstr "  # pri kind tag"
@@ -5375,6 +5641,9 @@ msgstr "
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: \83^\83O\83t\83@\83C\83\8b\82ÃŒ\83p\83X\82ª %s \82É\90Ø\82è\8eÃŒ\82Ä\82ç\82ê\82Ãœ\82µ\82½\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "\83^\83O\83t\83@\83C\83\8b\93à\82ÃŒ\92·\82¢\8ds\82ð\96³\8e\8b\82µ\82Ãœ\82·"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: \83^\83O\83t\83@\83C\83\8b \"%s\" \82ÃŒ\83t\83H\81[\83}\83b\83g\82É\83G\83\89\81[\82ª\82 \82è\82Ãœ\82·"
@@ -5392,10 +5661,14 @@ msgid "E433: No tags file"
 msgstr "E433: \83^\83O\83t\83@\83C\83\8b\82ª\82 \82è\82Ãœ\82¹\82ñ"
 
 msgid "E434: Can't find tag pattern"
-msgstr "E434: \83^\83O\83p\83^\81[\83\93\82ð\82Ã\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
+msgstr "E434: \83^\83O\83p\83^\81[\83\93\82ð\8c©\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
 
 msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: \83^\83O\82ð\82Ã\82Â\82¯\82ç\82ê\82È\82¢\82ÃŒ\82Ã…\92P\82É\90\84\91ª\82µ\82Ãœ\82·!"
+msgstr "E435: \83^\83O\82ð\8c©\82Â\82¯\82ç\82ê\82È\82¢\82ÃŒ\82Ã…\92P\82É\90\84\91ª\82µ\82Ãœ\82·!"
+
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "\8fd\95¡\82µ\82½\83t\83B\81[\83\8b\83h\96¼: %s"
 
 msgid "' not known. Available builtin terminals are:"
 msgstr "' \82Ã\96¢\92m\82Ã…\82·. \8c»\8ds\82ÃŒ\91g\82Ã\8d\9e\82Ã\92[\96\96\82Ã\8e\9f\82ÃŒ\82Æ\82¨\82è\82Ã…\82·:"
@@ -5407,10 +5680,10 @@ msgid "E557: Cannot open termcap file"
 msgstr "E557: termcap\83t\83@\83C\83\8b\82ð\8aJ\82¯\82Ãœ\82¹\82ñ"
 
 msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: terminfo\82É\92[\96\96\83G\83\93\83g\83\8a\82ð\82Ã\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
+msgstr "E558: terminfo\82É\92[\96\96\83G\83\93\83g\83\8a\82ð\8c©\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
 
 msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: termcap\82É\92[\96\96\83G\83\93\83g\83\8a\82ð\82Ã\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
+msgstr "E559: termcap\82É\92[\96\96\83G\83\93\83g\83\8a\82ð\8c©\82Â\82¯\82ç\82ê\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E436: No \"%s\" entry in termcap"
@@ -5433,10 +5706,87 @@ msgstr "
 msgid "Vim: Error reading input, exiting...\n"
 msgstr "Vim: \93ü\97Ã\82ð\93Ç\8d\9e\82Ã\92\86\82ÃŒ\83G\83\89\81[\82É\82æ\82è\8fI\97¹\82µ\82Ãœ\82·...\n"
 
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "\8bó\82ÃŒ\91I\91ð\97ÃŒ\88æ\82ÃŒ\82©\82í\82è\82ÉCUT_BUFFER0\82ª\8eg\97p\82³\82ê\82Ãœ\82µ\82½"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: \97\\\8aú\82¹\82¸\8ds\83J\83E\83\93\83g\82ª\95Ã\82í\82è\82Ãœ\82µ\82½"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "\89Â\94\\\82È\83A\83\93\83h\83D\82Ã\82 \82è\82Ãœ\82¹\82ñ: \82Æ\82è\82 \82¦\82¸\91±\82¯\82Ãœ\82·"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: \8f\91\8d\9e\82Ã\97p\82É\83A\83\93\83h\83D\83t\83@\83C\83\8b\82ð\8aJ\82¯\82Ãœ\82¹\82ñ: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: \83A\83\93\83h\83D\83t\83@\83C\83\8b\82ª\89ó\82ê\82Ä\82¢\82Ãœ\82· (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "'undodir'\82ÃŒ\83f\83B\83\8c\83N\83g\83\8a\82É\83A\83\93\83h\83D\83t\83@\83C\83\8b\82ð\8f\91\82«\8d\9e\82ß\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "\83A\83\93\83h\83D\83t\83@\83C\83\8b\82Æ\82µ\82Ä\93Ç\82Ã\8d\9e\82ß\82È\82¢\82ÃŒ\82Ã…\8fã\8f\91\82«\82µ\82Ãœ\82¹\82ñ: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "\83A\83\93\83h\83D\83t\83@\83C\83\8b\82Ã…\82Ã\82È\82¢\82ÃŒ\82Ã…\8fã\8f\91\82«\82µ\82Ãœ\82¹\82ñ: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "\91ÃŽ\8fÛ\82ª\82È\82¢\82ÃŒ\82Ã…\83A\83\93\83h\83D\83t\83@\83C\83\8b\82ÃŒ\8f\91\82«\8d\9e\82Ã\82ð\83X\83L\83b\83v\82µ\82Ãœ\82·"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "\83A\83\93\83h\83D\83t\83@\83C\83\8b\8f\91\82«\8d\9e\82Ã\92\86: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: \83A\83\93\83h\83D\83t\83@\83C\83\8b\82ÃŒ\8f\91\82«\8d\9e\82Ã\83G\83\89\81[\82Ã…\82·: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "\83I\81[\83i\81[\82ª\88Ù\82È\82é\82ÃŒ\82Ã…\83A\83\93\83h\83D\83t\83@\83C\83\8b\82ð\93Ç\82Ã\8d\9e\82Ã\82Ãœ\82¹\82ñ: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "\83A\83\93\83h\83D\83t\83@\83C\83\8b\93Ç\8d\9e\92\86: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: \83A\83\93\83h\83D\83t\83@\83C\83\8b\82ð\93Ç\8d\9e\97p\82Æ\82µ\82Ä\8aJ\82¯\82Ãœ\82¹\82ñ: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: \83A\83\93\83h\83D\83t\83@\83C\83\8b\82Ã…\82Ã\82 \82è\82Ãœ\82¹\82ñ: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: \94ñ\88Ã\8d\86\89»\83t\83@\83C\83\8b\82ª\88Ã\8d\86\89»\82³\82ê\82½\83A\83\93\83h\83D\83t\83@\83C\83\8b\82ð\8eg\82Ã\82Ä\82Ãœ\82·: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: \88Ã\8d\86\89»\82³\82ê\82½\83A\83\93\83h\83D\83t\83@\83C\83\8b\82ÃŒ\89ð\93Ç\82É\8e¸\94s\82µ\82Ãœ\82µ\82½: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: \83A\83\93\83h\83D\83t\83@\83C\83\8b\82ª\88Ã\8d\86\89»\82³\82ê\82Ä\82¢\82Ãœ\82·: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: \8cÃ\8a·\90«\82ÃŒ\96³\82¢\83A\83\93\83h\83D\83t\83@\83C\83\8b\82Ã…\82·: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "\83t\83@\83C\83\8b\82ÃŒ\93à\97e\82ª\95Ã\82í\82Ã\82Ä\82¢\82é\82½\82ß\81A\83A\83\93\83h\83D\8fî\95ñ\82ð\97\98\97p\82Ã…\82«\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "\83A\83\93\83h\83D\83t\83@\83C\83\8b %s \82ÃŒ\8eæ\8d\9e\82ð\8a®\97¹"
+
 msgid "Already at oldest change"
 msgstr "\8aù\82É\88ê\94Ô\8cÃ\82¢\95Ã\8dX\82Ã…\82·"
 
@@ -5444,8 +5794,8 @@ msgid "Already at newest change"
 msgstr "\8aù\82É\88ê\94Ô\90V\82µ\82¢\95Ã\8dX\82Ã…\82·"
 
 #, c-format
-msgid "Undo number %ld not found"
-msgstr "\83A\83\93\83h\83D\94Ô\8d\86 %ld \82ª\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ"
+msgid "E830: Undo number %ld not found"
+msgstr "E830: \83A\83\93\83h\83D\94Ô\8d\86 %ld \82Ã\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ"
 
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: \8ds\94Ô\8d\86\82ª\8aÔ\88á\82Ã\82Ä\82¢\82Ãœ\82·"
@@ -5481,8 +5831,8 @@ msgstr "
 msgid "Nothing to undo"
 msgstr "\83A\83\93\83h\83D\91ÃŽ\8fÛ\82ª\82 \82è\82Ãœ\82¹\82ñ"
 
-msgid "number changes  time"
-msgstr "\94Ô\8d\86   \95Ã\8dX     \8e\9e\8d\8f"
+msgid "number changes  when               saved"
+msgstr "\92Ê\94Ô   \95Ã\8dX\90\94   \95Ã\8dX\8e\9e\8aú           \95Û\91¶\8dÃ"
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5527,6 +5877,13 @@ msgstr " with OLE 
 
 msgid ""
 "\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 64 \83r\83b\83\83R\83\93\83\\\81[\83\8b \94Ã…"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit console version"
 msgstr ""
 "\n"
@@ -5576,10 +5933,10 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
+"OpenVMS version"
 msgstr ""
 "\n"
-"RISC O\94Ã…"
+"OpenVM\94Ã…"
 
 msgid ""
 "\n"
@@ -5588,6 +5945,13 @@ msgstr ""
 "\n"
 "\93K\97p\8dÃ\83p\83b\83`: "
 
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"\92Ç\89Ã\8ag\92£\83p\83b\83`: "
+
 msgid "Modified by "
 msgstr "Modified by "
 
@@ -5642,15 +6006,9 @@ msgstr "without GUI."
 msgid "with GTK2-GNOME GUI."
 msgstr "with GTK2-GNOME GUI."
 
-msgid "with GTK-GNOME GUI."
-msgstr "with GTK-GNOME GUI."
-
 msgid "with GTK2 GUI."
 msgstr "with GTK2 GUI."
 
-msgid "with GTK GUI."
-msgstr "with GTK GUI."
-
 msgid "with X11-Motif GUI."
 msgstr "with X11-Motif GUI."
 
@@ -5772,7 +6130,7 @@ msgid "Running modeless, typed text is inserted"
 msgstr "\83\82\81[\83h\96³\82Ã…\8eÀ\8ds\92\86\83^\83C\83v\82µ\82½\95¶\8e\9a\82ª\91}\93ü\82³\82ê\82Ãœ\82·"
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "\83\81\83j\83\85\81[\82ÃŒ \95Ã’\8fW\81¨\91S\91ÃŒ\90Ã\92è\81¨\91}\93ü(\8f\89\90S\8eÃ’)\83\82\81[\83h\90Ø\91Ö"
+msgstr "\83\81\83j\83\85\81[\82ÃŒ \95Ã’\8fW\81¨\91S\91ÃŒ\90Ã\92è\81¨\91}\93ü(\8f\89\90S\8eÃ’)\83\82\81[\83h\90Ø\91Ö "
 
 msgid "                              for two modes      "
 msgstr "                              \82Ã…\83\82\81[\83h\97L\82É       "
@@ -5819,6 +6177,12 @@ msgstr "E443: 
 msgid "E444: Cannot close last window"
 msgstr "E444: \8dÃ…\8cã\82ÃŒ\83E\83B\83\93\83h\83E\82ð\95Â\82¶\82é\82±\82Æ\82Ã\82Ã…\82«\82Ãœ\82¹\82ñ"
 
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: autocmd\83E\83B\83\93\83h\83E\82Ã\95Â\82¶\82ç\82ê\82Ãœ\82¹\82ñ"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: autocmd\83E\83B\83\93\83h\83E\82µ\82©\8ec\82ç\82È\82¢\82½\82ß\81A\83E\83B\83\93\83h\83E\82Ã\95Â\82¶\82ç\82ê\82Ãœ\82¹\82ñ"
+
 msgid "E445: Other window contains changes"
 msgstr "E445: \91¼\82ÃŒ\83E\83B\83\93\83h\83E\82É\82Ã\95Ã\8dX\82ª\82 \82è\82Ãœ\82·"
 
@@ -5829,19 +6193,6 @@ msgstr "E446: 
 msgid "E447: Can't find file \"%s\" in path"
 msgstr "E447: path\82É\82à\"%s\" \82Æ\82¢\82¤\83t\83@\83C\83\8b\82ª\82 \82è\82Ãœ\82¹\82ñ"
 
-#, c-format
-msgid "E370: Could not load library %s"
-msgstr "E370: \83\89\83C\83u\83\89\83\8a %s \82ð\83\8d\81[\83h\82Ã…\82«\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
-
-msgid "Sorry, this command is disabled: the Perl library could not be loaded."
-msgstr ""
-"\82±\82ÃŒ\83R\83}\83\93\83h\82Ã\96³\8cø\82Ã…\82·, \82²\82ß\82ñ\82È\82³\82¢: Perl\83\89\83C\83u\83\89\83\8a\82ð\83\8d\81[\83h\82Ã…\82«\82Ãœ\82¹\82ñ\82Ã…\82µ\82½."
-
-msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-msgstr ""
-"E299: \83T\83\93\83h\83{\83b\83N\83X\82Ã…\82àSafe \83\82\83W\83\85\81[\83\8b\82ð\8eg\97p\82µ\82È\82¢Perl\83X\83N\83\8a\83v\83g\82Ã\8bÖ\82¶\82ç\82ê"
-"\82Ä\82¢\82Ü\82·"
-
 msgid "Edit with &multiple Vims"
 msgstr "\95¡\90\94\82ÃŒVim\82Ã…\95Ã’\8fW\82·\82é (&M)"
 
@@ -5849,27 +6200,26 @@ msgid "Edit with single &Vim"
 msgstr "1\82Â\82ÃŒVim\82Ã…\95Ã’\8fW\82·\82é (&V)"
 
 msgid "Diff with Vim"
-msgstr "Vim\82Ã…\8d·\95ª\82ð\8c©\82é"
+msgstr "Vim\82Ã…\8d·\95ª\82ð\95\\\8e¦\82·\82é"
 
 msgid "Edit with &Vim"
 msgstr "Vim\82Ã…\95Ã’\8fW\82·\82é (&V)"
 
 #. Now concatenate
 msgid "Edit with existing Vim - "
-msgstr "\8aù\91¶\82ÃŒVim\82Ã…\95Ã’\8fW\82·\82é - "
+msgstr "\8bN\93®\8dÃ\82ÃŒVim\82Ã…\95Ã’\8fW\82·\82é - "
 
 msgid "Edits the selected file(s) with Vim"
-msgstr "\91I\91ð\82³\82ê\82½\83t\83@\83C\83\8b\82ðVim\82Ã…\95Ã’\8fW\82·\82é"
+msgstr "\91I\91ð\82µ\82½\83t\83@\83C\83\8b\82ðVim\82Ã…\95Ã’\8fW\82·\82é"
 
 msgid "Error creating process: Check if gvim is in your path!"
-msgstr ""
-"\8bN\93®\82É\8e¸\94s\82µ\82Ãœ\82µ\82½: gvim \82Ö\82ÃŒ\83p\83X\82ª\90³\82µ\82­\90Ã\92è\82³\82ê\82Ä\82¢\82é\82©\8am\94F\82µ\82Ä\82­\82¾\82³\82¢!"
+msgstr "\83v\83\8d\83Z\83X\82ÃŒ\8dì\90¬\82É\8e¸\94s: gvim\82ª\8aÂ\8b«\95Ã\90\94PATH\8fã\82É\82 \82é\82©\8am\94F\82µ\82Ä\82­\82¾\82³\82¢!"
 
 msgid "gvimext.dll error"
 msgstr "gvimext.dll \83G\83\89\81["
 
 msgid "Path length too long!"
-msgstr "\83p\83X\82ª\92·\89ß\82¬\82Ãœ\82·!"
+msgstr "\83p\83X\82ª\92·\82·\82¬\82Ãœ\82·!"
 
 msgid "--No lines in buffer--"
 msgstr "--\83o\83b\83t\83@\82É\8ds\82ª\82 \82è\82Ãœ\82¹\82ñ--"
@@ -6037,7 +6387,7 @@ msgid "E481: No range allowed"
 msgstr "E481: \94Ã\88Ã\8ew\92è\82Ã\8b\96\89Â\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
 
 msgid "E36: Not enough room"
-msgstr "E36: \8f[\95ª\82È\97e\97Ê\82ª\82 \82è\82Ãœ\82¹\82ñ"
+msgstr "E36: \83E\83B\83\93\83h\83E\82É\8f\\\95ª\82È\8d\82\82³\82à\82µ\82­\82Ã\95\9d\82ª\82 \82è\82Ãœ\82¹\82ñ"
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
@@ -6078,11 +6428,11 @@ msgid "E41: Out of memory!"
 msgstr "E41: \83\81\83\82\83\8a\82ª\90s\82«\89Ê\82Ä\82Ãœ\82µ\82½!"
 
 msgid "Pattern not found"
-msgstr "\83p\83^\81[\83\93\82Ã\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+msgstr "\83p\83^\81[\83\93\82Ã\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
 
 #, c-format
 msgid "E486: Pattern not found: %s"
-msgstr "E486: \83p\83^\81[\83\93\82Ã\82Ã\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½: %s"
+msgstr "E486: \83p\83^\81[\83\93\82Ã\8c©\82Â\82©\82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½: %s"
 
 msgid "E487: Argument must be positive"
 msgstr "E487: \88ø\90\94\82Ã\90³\82ÃŒ\92l\82Ã…\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ"
@@ -6205,8 +6555,254 @@ msgstr "E139: 
 msgid "E764: Option '%s' is not set"
 msgstr "E764: \83I\83v\83V\83\87\83\93 '%s' \82Ã\90Ã\92è\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
 
+msgid "E850: Invalid register name"
+msgstr "E850: \96³\8cø\82È\83\8c\83W\83X\83^\96¼\82Ã…\82·"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "\8fã\82Ãœ\82Ã…\8c\9f\8dõ\82µ\82½\82ÃŒ\82Ã…\89º\82É\96ß\82è\82Ãœ\82·"
 
 msgid "search hit BOTTOM, continuing at TOP"
 msgstr "\89º\82Ãœ\82Ã…\8c\9f\8dõ\82µ\82½\82ÃŒ\82Ã…\8fã\82É\96ß\82è\82Ãœ\82·"
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "\88Ã\8d\86\83L\81[\82ª\95K\97v\82Ã…\82·: \"%s\""
+
+msgid "empty keys are not allowed"
+msgstr "\8bó\82ÃŒ\83L\81[\82Ã\8b\96\89Â\82³\82ê\82Ä\82¢\82Ãœ\82¹\82ñ"
+
+msgid "dictionary is locked"
+msgstr "\8e«\8f\91\82Ã\83\8d\83b\83N\82³\82ê\82Ä\82¢\82Ãœ\82·"
+
+msgid "list is locked"
+msgstr "\83\8a\83X\83g\82Ã\83\8d\83b\83N\82³\82ê\82Ä\82¢\82Ãœ\82·"
+
+#, c-format
+msgid "failed to add key '%s' to dictionary"
+msgstr "\8e«\8f\91\82É\83L\81[ '%s' \82ð\92Ç\89Ã\82·\82é\82ÃŒ\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+#, c-format
+msgid "index must be int or slice, not %s"
+msgstr "\83C\83\93\83f\83b\83N\83X\82à%s \82Ã…\82Ã\82È\82­\90®\90\94\82©\83X\83\89\83C\83X\82É\82µ\82Ä\82­\82¾\82³\82¢"
+
+#, c-format
+msgid "expected str() or unicode() instance, but got %s"
+msgstr "str() \82à\82µ\82­\82àunicode() \82ÃŒ\83C\83\93\83X\83^\83\93\83X\82ª\8aú\91Ã’\82³\82ê\82Ä\82¢\82é\82ÃŒ\82É %s \82Ã…\82µ\82½"
+
+#, c-format
+msgid "expected bytes() or str() instance, but got %s"
+msgstr "bytes() \82à\82µ\82­\82àstr() \82ÃŒ\83C\83\93\83X\83^\83\93\83X\82ª\8aú\91Ã’\82³\82ê\82Ä\82¢\82é\82ÃŒ\82É %s \82Ã…\82µ\82½"
+
+#, c-format
+msgid ""
+"expected int(), long() or something supporting coercing to long(), but got %s"
+msgstr "long() \82©\82»\82ê\82Ö\95Ã\8a·\89Â\94\\\82È\82à\82ÃŒ\82ª\8aú\91Ã’\82³\82ê\82Ä\82¢\82é\82ÃŒ\82É %s \82Ã…\82µ\82½"
+
+#, c-format
+msgid "expected int() or something supporting coercing to int(), but got %s"
+msgstr "int() \82©\82»\82ê\82Ö\95Ã\8a·\89Â\94\\\82È\82à\82ÃŒ\82ª\8aú\91Ã’\82³\82ê\82Ä\82¢\82é\82ÃŒ\82É %s \82Ã…\82µ\82½"
+
+msgid "value is too large to fit into C int type"
+msgstr "C\8c¾\8cê\82ÃŒ int \8c^\82Æ\82µ\82Ä\82Ã\92l\82ª\91Ã¥\82«\89ß\82¬\82Ãœ\82·"
+
+msgid "value is too small to fit into C int type"
+msgstr "C\8c¾\8cê\82ÃŒ int \8c^\82Æ\82µ\82Ä\82Ã\92l\82ª\8f¬\82³\89ß\82¬\82Ãœ\82·"
+
+msgid "number must be greater then zero"
+msgstr "\90\94\92l\82à0 \82æ\82è\91Ã¥\82«\82­\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ"
+
+msgid "number must be greater or equal to zero"
+msgstr "\90\94\92l\82à0 \82©\82»\82ê\88È\8fã\82Ã…\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ"
+
+msgid "can't delete OutputObject attributes"
+msgstr "OutputObject\91®\90«\82ð\8fÃ\82¹\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "invalid attribute: %s"
+msgstr "\96³\8cø\82È\91®\90«\82Ã…\82·: %s"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: I/O\83I\83u\83W\83F\83N\83g\82ÃŒ\8f\89\8aú\89»\83G\83\89\81["
+
+msgid "failed to change directory"
+msgstr "\8e«\8f\91\82ÃŒ\95Ã\8dX\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got %s"
+msgstr "imp.find_module() \82ª %s \82ð\95Ô\82µ\82Ãœ\82µ\82½ (\8aú\91Ã’\92l: 2 \97v\91f\82ÃŒ\83^\83v\83\8b)"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
+msgstr "impl.find_module() \82ª %d \97v\91f\82ÃŒ\83^\83v\83\8b\82ð\95Ô\82µ\82Ãœ\82µ\82½ (\8aú\91Ã’\92l: 2)"
+
+msgid "internal error: imp.find_module returned tuple with NULL"
+msgstr "\93à\95\94\83G\83\89\81[: imp.find_module \82ª NULL \82ð\8aÃœ\82Þ\83^\83v\83\8b\82ð\95Ô\82µ\82Ãœ\82µ\82½"
+
+msgid "cannot delete vim.Dictionary attributes"
+msgstr "vim.Dictionary\91®\90«\82Ã\8fÃ\82¹\82Ãœ\82¹\82ñ"
+
+msgid "cannot modify fixed dictionary"
+msgstr "\8cÃ…\92è\82³\82ê\82½\8e«\8f\91\82Ã\95Ã\8dX\82Ã…\82«\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "cannot set attribute %s"
+msgstr "\91®\90« %s \82Ã\90Ã\92è\82Ã…\82«\82Ãœ\82¹\82ñ"
+
+msgid "hashtab changed during iteration"
+msgstr "\83C\83e\83\8c\81[\83V\83\87\83\93\92\86\82É hashtab \82ª\95Ã\8dX\82³\82ê\82Ãœ\82µ\82½"
+
+#, c-format
+msgid "expected sequence element of size 2, but got sequence of size %d"
+msgstr "\83V\81[\83P\83\93\83X\82ÃŒ\97v\91f\90\94\82É\82à2 \82ª\8aú\91Ã’\82³\82ê\82Ä\82¢\82Ãœ\82µ\82½\82ª %d \82Ã…\82µ\82½"
+
+msgid "list constructor does not accept keyword arguments"
+msgstr "\83\8a\83X\83g\82ÃŒ\83R\83\93\83X\83g\83\89\83N\83^\82Ã\83L\81[\83\8f\81[\83h\88ø\90\94\82ð\8eó\82¯\95t\82¯\82Ãœ\82¹\82ñ"
+
+msgid "list index out of range"
+msgstr "\83\8a\83X\83g\94Ã\88Ã\8aO\82ÃŒ\83C\83\93\83f\83b\83N\83X\82Ã…\82·"
+
+#. No more suitable format specifications in python-2.3
+#, c-format
+msgid "internal error: failed to get vim list item %d"
+msgstr "\93à\95\94\83G\83\89\81[: vim\82ÃŒ\83\8a\83X\83g\97v\91f %d \82ÃŒ\8eæ\93¾\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+msgid "failed to add item to list"
+msgstr "\83\8a\83X\83g\82Ö\82ÃŒ\97v\91f\92Ç\89Ã\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+#, c-format
+msgid "internal error: no vim list item %d"
+msgstr "\93à\95\94\83G\83\89\81[: vim\82ÃŒ\83\8a\83X\83g\97v\91f %d \82Ã\82 \82è\82Ãœ\82¹\82ñ"
+
+msgid "internal error: failed to add item to list"
+msgstr "\93à\95\94\83G\83\89\81[: \83\8a\83X\83g\82Ö\82ÃŒ\97v\91f\92Ç\89Ã\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+msgid "cannot delete vim.List attributes"
+msgstr "vim.List \91®\90«\82Ã\8fÃ\82¹\82Ãœ\82¹\82ñ"
+
+msgid "cannot modify fixed list"
+msgstr "\8cÃ…\92è\82³\82ê\82½\83\8a\83X\83g\82Ã\95Ã\8dX\82Ã…\82«\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "unnamed function %s does not exist"
+msgstr "\96³\96¼\8aÖ\90\94 %s \82Ã\91¶\8dÃ\82µ\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "function %s does not exist"
+msgstr "\8aÖ\90\94 %s \82ª\82 \82è\82Ãœ\82¹\82ñ"
+
+msgid "function constructor does not accept keyword arguments"
+msgstr "\8aÖ\90\94\82ÃŒ\83R\83\93\83X\83g\83\89\83N\83^\82Ã\83L\81[\83\8f\81[\83h\88ø\90\94\82ð\8eó\82¯\95t\82¯\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "failed to run function %s"
+msgstr "\8aÖ\90\94 %s \82ÃŒ\8eÀ\8ds\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+msgid "unable to get option value"
+msgstr "\83I\83v\83V\83\87\83\93\82ÃŒ\92l\82Ã\8eæ\93¾\82Ã…\82«\82Ãœ\82¹\82ñ"
+
+msgid "internal error: unknown option type"
+msgstr "\93à\95\94\83G\83\89\81[: \96¢\92m\82ÃŒ\83I\83v\83V\83\87\83\93\8c^\82Ã…\82·"
+
+msgid "problem while switching windows"
+msgstr "\83E\83B\83\93\83h\83E\82ð\90Ø\8a·\92\86\82É\96â\91è\82ª\94­\90¶\82µ\82Ãœ\82µ\82½"
+
+#, c-format
+msgid "unable to unset global option %s"
+msgstr "\83O\83\8d\81[\83o\83\8b\83I\83v\83V\83\87\83\93 %s \82ÃŒ\90Ã\92è\89ð\8f\9c\82Ã\82Ã…\82«\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "unable to unset option %s which does not have global value"
+msgstr "\83O\83\8d\81[\83o\83\8b\82È\92l\82ÃŒ\96³\82¢\83I\83v\83V\83\87\83\93 %s \82ÃŒ\90Ã\92è\89ð\8f\9c\82Ã\82Ã…\82«\82Ãœ\82¹\82ñ"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "\8dí\8f\9c\82³\82ê\82½\83^\83u\82ð\8eQ\8fÆ\82µ\82æ\82¤\82Æ\82µ\82Ãœ\82µ\82½"
+
+msgid "no such tab page"
+msgstr "\82»\82ÃŒ\82æ\82¤\82È\83^\83u\83y\81[\83W\82Ã\82 \82è\82Ãœ\82¹\82ñ"
+
+msgid "attempt to refer to deleted window"
+msgstr "\8dí\8f\9c\82³\82ê\82½\83E\83B\83\93\83h\83E\82ð\8eQ\8fÆ\82µ\82æ\82¤\82Æ\82µ\82Ãœ\82µ\82½"
+
+msgid "readonly attribute: buffer"
+msgstr "\93Ç\8d\9e\90ê\97p\91®\90«: \83o\83b\83t\83@\81["
+
+msgid "cursor position outside buffer"
+msgstr "\83J\81[\83\\\83\8b\88Ê\92u\82ª\83o\83b\83t\83@\82ÃŒ\8aO\91¤\82Ã…\82·"
+
+msgid "no such window"
+msgstr "\82»\82ÃŒ\82æ\82¤\82È\83E\83B\83\93\83h\83E\82Ã\82 \82è\82Ãœ\82¹\82ñ"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "\8dí\8f\9c\82³\82ê\82½\83o\83b\83t\83@\82ð\8eQ\8fÆ\82µ\82æ\82¤\82Æ\82µ\82Ãœ\82µ\82½"
+
+msgid "failed to rename buffer"
+msgstr "\83o\83b\83t\83@\96¼\82ÃŒ\95Ã\8dX\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+msgid "mark name must be a single character"
+msgstr "\83}\81[\83N\96¼\82Ã1\95¶\8e\9a\82ÃŒ\83A\83\8b\83t\83@\83x\83b\83g\82Ã…\82È\82¯\82ê\82ÃŽ\82È\82è\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "expected vim.Buffer object, but got %s"
+msgstr "vim.Buffer\83I\83u\83W\83F\83N\83g\82ª\8aú\91Ã’\82³\82ê\82Ä\82¢\82é\82ÃŒ\82É %s \82Ã…\82µ\82½"
+
+#, c-format
+msgid "failed to switch to buffer %d"
+msgstr "\8ew\92è\82³\82ê\82½\83o\83b\83t\83@ %d \82Ö\82ÃŒ\90Ø\82è\91Ö\82¦\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+#, c-format
+msgid "expected vim.Window object, but got %s"
+msgstr "vim.Window\83I\83u\83W\83F\83N\83g\82ª\8aú\91Ã’\82³\82ê\82Ä\82¢\82é\82ÃŒ\82É %s \82Ã…\82µ\82½"
+
+msgid "failed to find window in the current tab page"
+msgstr "\8c»\8dÃ\82ÃŒ\83^\83u\82É\82Ã\8ew\92è\82³\82ê\82½\83E\83B\83\93\83h\83E\82ª\82 \82è\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+
+msgid "did not switch to the specified window"
+msgstr "\8ew\92è\82³\82ê\82½\83E\83B\83\93\83h\83E\82É\90Ø\82è\91Ö\82¦\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+
+#, c-format
+msgid "expected vim.TabPage object, but got %s"
+msgstr "vim.TabPage\83I\83u\83W\83F\83N\83g\82ª\8aú\91Ã’\82³\82ê\82Ä\82¢\82é\82ÃŒ\82É %s \82Ã…\82µ\82½"
+
+msgid "did not switch to the specified tab page"
+msgstr "\8ew\92è\82³\82ê\82½\83^\83u\83y\81[\83W\82É\90Ø\82è\91Ö\82¦\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+
+msgid "failed to run the code"
+msgstr "\83R\81[\83h\82ÃŒ\8eÀ\8ds\82É\8e¸\94s\82µ\82Ãœ\82µ\82½"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: \8e®\95]\89¿\82Ã\97L\8cø\82Èpython\83I\83u\83W\83F\83N\83g\82ð\95Ô\82µ\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: \95Ô\82³\82ê\82½python\83I\83u\83W\83F\83N\83g\82ðvim\82ÃŒ\92l\82É\95Ã\8a·\82Ã…\82«\82Ãœ\82¹\82ñ\82Ã…\82µ\82½"
+
+#, c-format
+msgid "unable to convert %s to vim dictionary"
+msgstr "%s vim\82ÃŒ\8e«\8f\91\8c^\82É\95Ã\8a·\82Ã…\82«\82Ãœ\82¹\82ñ"
+
+#, c-format
+msgid "unable to convert %s to vim structure"
+msgstr "%s \82ðvim\82ÃŒ\8d\\\91¢\91ÃŒ\82É\95Ã\8a·\82Ã…\82«\82Ãœ\82¹\82ñ"
+
+msgid "internal error: NULL reference passed"
+msgstr "\93à\95\94\83G\83\89\81[: NULL\8eQ\8fÆ\82ª\93n\82³\82ê\82Ãœ\82µ\82½"
+
+msgid "internal error: invalid value type"
+msgstr "\93à\95\94\83G\83\89\81[: \96³\8cø\82È\92l\8c^\82Ã…\82·"
+
+msgid ""
+"Failed to set path hook: sys.path_hooks is not a list\n"
+"You should now do the following:\n"
+"- append vim.path_hook to sys.path_hooks\n"
+"- append vim.VIM_SPECIAL_PATH to sys.path\n"
+msgstr ""
+"\83p\83X\83t\83b\83N\82ÃŒ\90Ã\92è\82É\8e¸\94s\82µ\82Ãœ\82µ\82½: sys.path_hooks \82ª\83\8a\83X\83g\82Ã…\82Ã\82 \82è\82Ãœ\82¹\82ñ\n"
+"\82·\82®\82É\89º\8bL\82ð\8eÀ\8e{\82µ\82Ä\82­\82¾\82³\82¢:\n"
+"- vim.path_hooks \82ð sys.path_hooks \82Ö\92Ç\89Ã\n"
+"- vim.VIM_SPECIAL_PATH \82ð sys.path \82Ö\92Ç\89Ã\n"
+
+msgid ""
+"Failed to set path: sys.path is not a list\n"
+"You should now append vim.VIM_SPECIAL_PATH to sys.path"
+msgstr ""
+"\83p\83X\82ÃŒ\90Ã\92è\82É\8e¸\94s\82µ\82Ãœ\82µ\82½: sys.path \82ª\83\8a\83X\83g\82Ã…\82Ã\82 \82è\82Ãœ\82¹\82ñ\n"
+"\82·\82®\82É vim.VIM_SPECIAL_PATH \82ð sys.path \82É\92Ç\89Ã\82µ\82Ä\82­\82¾\82³\82¢"
index ded1503..3da9a18 100644 (file)
@@ -1,12 +1,12 @@
 # Korean translation for Vim
 #
-# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2010
+# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2011
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vim 7.2\n"
+"Project-Id-Version: vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-18 09:43+0900\n"
+"POT-Creation-Date: 2011-02-16 16:18+0900\n"
 "PO-Revision-Date: 2010-02-18 09:49+0900\n"
 "Last-Translator: SungHyun Nam <goweol@gmail.com>\n"
 "Language-Team: GTP Korean <gnome-kr-translation@gnome.or.kr>\n"
@@ -14,6 +14,27 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: ë¹ˆ ë¹„밀번호로 bf_key_init() í•¨ìˆ˜ê°€ ë¶ˆë ¤ì¡ŒìŠµë‹ˆë‹¤"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: Blowfish big/little endian use wrong"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256 ì‹œí—˜ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Blowfish ì‹œí—˜ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+msgid "[Location List]"
+msgstr "[위치 ëª©ë¡]"
+
+msgid "[Quickfix List]"
+msgstr "[Quickfix ëª©ë¡]"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: ë²„í¼ë¥¼ í• ë‹¹í•  ìˆ˜ ì—†ì–´ì„œ ë냅니다..."
 
@@ -147,7 +168,6 @@ msgstr "바닥"
 msgid "Top"
 msgstr "꼭대기"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -155,12 +175,6 @@ msgstr ""
 "\n"
 "# ë²„í¼ ëª©ë¡:\n"
 
-msgid "[Location List]"
-msgstr "[위치 ëª©ë¡]"
-
-msgid "[Quickfix List]"
-msgstr "[Quickfix ëª©ë¡]"
-
 msgid "[Scratch]"
 msgstr "[Scratch]"
 
@@ -232,7 +246,7 @@ msgid "E105: Using :loadkeymap not in a sourced file"
 msgstr "E105: ë¶ˆëŸ¬ë“¤ì¸ íŒŒì¼ì—ì„œ :loadkeymap선사용하지 ì•Šì•˜ìŠµë‹ˆë‹¤"
 
 msgid "E791: Empty keymap entry"
-msgstr "E791: Ã­\82¤ë§µ Ã¬\97\94í\8a¸ë¦¬ê°\80 Ã«Â¹\84ì\96´ì\9e\88ì\8a´"
+msgstr "E791: Ã­\82¤ë§µ Ã¬\97\94í\8a¸ë¦¬ê°\80 Ã«Â¹\84ì\96´ì\9e\88ì\9d\8c"
 
 msgid " Keyword completion (^N^P)"
 msgstr " ë‚±ë§ ì™„성 (^N^P)"
@@ -280,6 +294,12 @@ msgstr " ë‚±ë§ ë¡œì»¬ ì™„성 (^N^P)"
 msgid "Hit end of paragraph"
 msgstr "단ë½ì˜ ë§ˆì§€ë§‰ ë§Œë‚¨"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: Completion ê¸°ëŠ¥ì´ ì°½ì„ ë°”꾸었습니다"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Completion ê¸°ëŠ¥ì´ ë¬¸ìžì—´ì„ ì§€ì› ìŠµë‹ˆë‹¤"
+
 msgid "'dictionary' option is empty"
 msgstr "'dictionary' ì˜µì…˜ì´ ë¹„었습니다"
 
@@ -367,7 +387,7 @@ msgstr "E118: í•¨ìˆ˜ì— ë„ˆë¬´ ë§Žì€ ì¸ìž ë„˜ê¹€: %s"
 
 #, c-format
 msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Dictionaryì\97\90 Ã­\82¤ê°\80 Ã¬\97\86ì\8a´: %s"
+msgstr "E716: Dictionaryì\97\90 Ã­\82¤ê°\80 Ã¬\97\86ì\9d\8c: %s"
 
 #, c-format
 msgid "E122: Function %s already exists, add ! to replace it"
@@ -585,7 +605,7 @@ msgid "E727: Start past end"
 msgstr "E727: ì‹œìž‘위치가 ë선지나침"
 
 msgid "<empty>"
-msgstr "<ë¹\84ì\96´ì\9e\88ì\8a´>"
+msgstr "<ë¹\84ì\96´ì\9e\88ì\9d\8c>"
 
 msgid "E240: No connection to Vim server"
 msgstr "E240: Vim ì„œë²„ì— ì—°ê²°ë˜ì–´ ìžˆì§€ ì•ŠìŠµë‹ˆë‹¤"
@@ -730,7 +750,6 @@ msgstr "%sì—ì„œ ê³„ì†"
 msgid "E133: :return not inside a function"
 msgstr "E133: :return촠함수 ì•ˆì— ìžˆì§€ ì•ŠìŠµë‹ˆë‹¤"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -821,7 +840,6 @@ msgstr "Viminfo íŒŒì¼ \"%s\"ì„(를) ì“°ëŠ” ì¤‘"
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# ì´ viminfo íŒŒì¼ì€ ë¹”촠만든 ê²ƒìž…니다 Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -829,7 +847,6 @@ msgstr ""
 "# ì¡°ì‹¬ë§Œ í•œë‹¤ë©´ ê³ ì¹  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# ì´ íŒŒì¼ì´ ì €ìž¥ë˜ì—ˆì„ ë•Œì˜ 'encoding'옠값\n"
 
@@ -855,7 +872,7 @@ msgstr "스왑 íŒŒì¼ \"%s\"ê°€ ìžˆìŠµë‹ˆë‹¤, ë®ì–´ì“¸ê¹Œìš”?"
 
 #, c-format
 msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: Ã¬\8a¤ì\99\91 Ã­\8c\8cì\9d¼ Ã¬\9e\88ì\8a´: %s (ë®ì–´ì“°ë ¤ë©´ :silent! ì‚¬ìš©)"
+msgstr "E768: Ã¬\8a¤ì\99\91 Ã­\8c\8cì\9d¼ Ã¬\9e\88ì\9d\8c: %s (ë®ì–´ì“°ë ¤ë©´ :silent! ì‚¬ìš©)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -940,7 +957,6 @@ msgstr "E148: globalì—ì„œ ì •ê·œí‘œí˜„ì‹ì´ ë¹ ì¡ŒìŠµë‹ˆë‹¤"
 msgid "Pattern found in every line: %s"
 msgstr "여러 ì¤„ì—ì„œ íŒ¨í„´ì„ ì°¾ì•˜ìŠµë‹ˆë‹¤: %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1049,8 +1065,8 @@ msgstr "중지ì ì´ ì •ì˜ë˜ì–´ ìžˆì§€ ì•ŠìŠµë‹ˆë‹¤"
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s  %ld ì¤„"
 
-msgid "E750: First use :profile start <fname>"
-msgstr "E750: ë¨¼ì € ':profile start <fname>'선사용하세요"
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: ë¨¼ì € \":profile start {fname}\"선사용하세요"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
@@ -1096,7 +1112,7 @@ msgstr "ë¹” ìŠ¤í¬ë¦½íŠ¸ ë¡œë“œ"
 
 #, c-format
 msgid "Cannot source a directory: \"%s\""
-msgstr "ë\94\94ë \89í\86 ë¦¬ë\8a\94 sourceí\95  Ã¬\88\98 Ã¬\97\86ì\8a´: \"%s\""
+msgstr "ë\94\94ë \89í\86 ë¦¬ë\8a\94 sourceí\95  Ã¬\88\98 Ã¬\97\86ì\9d\8c: \"%s\""
 
 #, c-format
 msgid "could not source \"%s\""
@@ -1121,11 +1137,11 @@ msgstr "%s ë¶ˆëŸ¬ë“¤ì´ê¸° ë"
 #~ msgid "modeline"
 #~ msgstr ""
 
-#~ msgid "--cmd argument"
-#~ msgstr ""
+msgid "--cmd argument"
+msgstr "--cmd ì¸ìž"
 
-#~ msgid "-c argument"
-#~ msgstr ""
+msgid "-c argument"
+msgstr "-c ì¸ìž"
 
 msgid "environment variable"
 msgstr "환경 ë³€ìˆ˜"
@@ -1242,6 +1258,9 @@ msgstr "E182: ìž˜ëª»ëœ ëª…ë ¹ ì´ë¦„"
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: ì‚¬ìš©ìž ì •ì˜ ëª…령쀠대문ìžë¡œ ì‹œìž‘해야 í•©ë‹ˆë‹¤"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: ì˜ˆì•½ëœ ì´ë¦„, ì‚¬ìš©ìž ì •ì˜ ëª…령으로 ì‚¬ìš©ë  ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: ê·¸ëŸ° ì‚¬ìš©ìž ì •ì˜ ëª…ë ¹ ì—†ìŒ: %s"
@@ -1256,6 +1275,9 @@ msgstr "E468: ì™„성 ì¸ìžëŠ” ì‚¬ìš©ìž ì™„성ì—서만 í—ˆìš©ë©ë‹ˆë‹¤"
 msgid "E467: Custom completion requires a function argument"
 msgstr "E467: ì‚¬ìš©ìž ì™„성쀠함수 ì¸ìžê°€ í•„요합니다"
 
+msgid "unknown"
+msgstr "모름"
+
 #, c-format
 msgid "E185: Cannot find color scheme %s"
 msgstr "E185: ìƒ‰ ìŠ¤í‚´ %sì„(를) ì°¾ì„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
@@ -1353,6 +1375,9 @@ msgstr "E497: \"<amatch>\"엠대해 ì¹˜í™˜í•  ìžë™ëª…ë ¹ ë§¤ì¹˜ ì´ë¦„ì´ ì—†
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: \"<sfile>\"엠대해 ì¹˜í™˜í•  :source íŒŒì¼ ì´ë¦„촠없습니다"
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: \"<slnum>\"엠사용렠줄 ë²ˆí˜¸ê°€ ì—†ìŠµë‹ˆë‹¤"
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: '%'나 '#'엠대한 ë¹ˆ íŒŒì¼ ì´ë¦„, ì˜¤ë¡œì§€ \":p:h\"와만 ë™ìž‘합니다"
@@ -1607,6 +1632,9 @@ msgstr "'charconvert'를 ì‚¬ìš©í•œ ë³€í™˜ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
 msgid "can't read output of 'charconvert'"
 msgstr "'charconvert'옠출력결과를 ì½ì„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: íŒŒì¼ì´ ëª¨ë¥´ëŠ” ë°©ë²•ìœ¼ë¡œ ì•”호화ë˜ì–´ ìžˆìŠµë‹ˆë‹¤"
+
 msgid "E676: No matching autocommands for acwrite buffer"
 msgstr "E676: acwrite ë²„í¼ì— ëŒ€í•œ autocommand를 ì°¾ì„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
@@ -1674,9 +1702,7 @@ msgstr "E513: ì“°ê¸° ì—러, ë³€í™˜ ì‹¤íŒ¨ (무시하려면 'fenc'를 ë¹„ìš°ë©´
 msgid ""
 "E513: write error, conversion failed in line %ld (make 'fenc' empty to "
 "override)"
-msgstr ""
-"E513: ì“°ê¸° ì—러, %ld ì¤„ì—ì„œ ë³€í™˜ ì‹¤íŒ¨ (무시하려면 'fenc'를 ë¹„ìš°ë©´ "
-"ë¨)"
+msgstr "E513: ì“°ê¸° ì—러, %ld ì¤„ì—ì„œ ë³€í™˜ ì‹¤íŒ¨ (무시하려면 'fenc'를 ë¹„ìš°ë©´ ë¨)"
 
 msgid "E514: write error (file system full?)"
 msgstr "E514: ì“°ê¸° ì—러 (파켠시스템촠꽉찼나요?)"
@@ -1754,6 +1780,11 @@ msgid "1 character"
 msgstr "1 ê¸€ìž"
 
 #, c-format
+msgid "%lld characters"
+msgstr "%lld ê¸€ìž"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "%ld ê¸€ìž"
 
@@ -1998,9 +2029,6 @@ msgstr "ë¹” ëŒ€í™”ìƒìž"
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: ë©”시지와 ì½œë°± ëª¨ë‘를 ì‚¬ìš©í•´ì„œëŠ” BalloonEval선만들 ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
-msgid "Vim dialog..."
-msgstr "ë¹” ëŒ€í™”ìƒìž..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -2043,12 +2071,15 @@ msgstr "위로"
 msgid "Down"
 msgstr "아래로"
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr "다쌠찾기"
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "바꾸기"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr "모둠바꾸기"
 
@@ -2067,9 +2098,6 @@ msgstr "탭 ì—´ê¸°..."
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "ë¹”: ë©”츠창촠죽게 ë  ê²ƒìž…니다\n"
 
-msgid "Font Selection"
-msgstr "글꼴 ê³ ë¥´ê¸°"
-
 msgid "&Filter"
 msgstr "거르개(&F)"
 
@@ -2107,21 +2135,6 @@ msgid "&Undo"
 msgstr "취소(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zap ê¸€ê¼´ '%s'ì„(를) ë¡œë“œí•  ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: ê¸€ê¼´ %sì„(를) ì‚¬ìš©í•  ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"ìžì‹ í”„로세스를 ë내기 ìœ„í•´ ë©”시지를 ë³´ëƒˆìŠµë‹ˆë‹¤.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: ì°½ ì œëª© \"%s\"ì„(를) ì°¾ì„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
@@ -2398,11 +2411,11 @@ msgid "E567: no cscope connections"
 msgstr "E567: cscope ì—°ê²°ì´ ì—†ìŠµë‹ˆë‹¤"
 
 #, c-format
-#~ msgid "E259: no matches found for cscope query %s of %s"
+#~ msgid "E469: invalid cscopequickfix flag %c for %c"
 #~ msgstr ""
 
 #, c-format
-#~ msgid "E469: invalid cscopequickfix flag %c for %c"
+#~ msgid "E259: no matches found for cscope query %s of %s"
 #~ msgstr ""
 
 msgid "cscope commands:\n"
@@ -2421,7 +2434,7 @@ msgid ""
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: ì´ í•¨ìˆ˜ë¥¼ ë¶€ë¥´ëŠ” í•¨ìˆ˜ë“¤ ì°¾ê¸°\n"
@@ -2431,7 +2444,7 @@ msgstr ""
 "       g: ì´ ì •ì˜ ì°¾ê¸°\n"
 "       i: ì´ íŒŒì¼ì„ í¬í•¨í•˜ëŠ” íŒŒì¼ë“¤ ì°¾ê¸°\n"
 "       s: ì´ C ì‹¬ë³¼ ì°¾ê¸°\n"
-"       t: Find assignments to\n"
+"       t: ì´ ë¬¸ìžì—´ ì°¾ê¸°\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2482,12 +2495,18 @@ msgstr "cscope ì—°ê²°ì´ ì—†ìŠµë‹ˆë‹¤\n"
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    ë°ì´í„°ë² ì´ìŠ¤ ì´ë¦„                   prepend path\n"
 
+#~ msgid "Lua library cannot be loaded."
+#~ msgstr ""
+
+msgid "cannot save undo information"
+msgstr "undo ì •ë³´ë¥¼ ì €ìž¥í•  ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
+
 msgid ""
 "E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
 msgstr ""
-"E815: ë¯¸ì•ˆí•©ë‹ˆë‹¤, ì´ ëª…령쀠사용할 ìˆ˜ ì—†ìŠµë‹ˆë‹¤, MzScheme ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ë¡œë”©í•  ìˆ˜ ì—†"
-"습니다."
+"E815: ë¯¸ì•ˆí•©ë‹ˆë‹¤, ì´ ëª…령쀠사용할 ìˆ˜ ì—†ìŠµë‹ˆë‹¤, MzScheme ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ë¡œë”©í•  "
+"ì\88\98 Ã¬\97\86ì\8aµë\8b\88ë\8b¤."
 
 msgid "invalid expression"
 msgstr "잘못뜠표현ì‹"
@@ -2507,9 +2526,6 @@ msgstr "ì°½ ë²ˆí˜¸ê°€ ë²”위를 ë²—어났습니다"
 msgid "couldn't open buffer"
 msgstr "버í¼ë¥¼ ì—´ ìˆ˜ ì—†ì—ˆìŠµë‹ˆë‹¤"
 
-msgid "cannot save undo information"
-msgstr "undo ì •ë³´ë¥¼ ì €ìž¥í•  ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
-
 msgid "cannot delete line"
 msgstr "줄선지울 ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
@@ -2540,6 +2556,9 @@ msgstr "줄 ë²ˆí˜¸ê°€ ë²”위를 ë²—어났습니다"
 msgid "not allowed in the Vim sandbox"
 msgstr "Vim sandboxì—서는 í—ˆìš©ë˜ì§€ ì•ŠìŠµë‹ˆë‹¤"
 
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: ì´ Vim쀠:py3선사용한 í›„ì— :python선사용할 ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
+
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
@@ -2559,51 +2578,12 @@ msgstr "softspace는 ì •ìˆ˜ì—¬ì•¼ë§Œ í•©ë‹ˆë‹¤"
 msgid "invalid attribute"
 msgstr "잘못뜠ì†ì„±"
 
-msgid "writelines() requires list of strings"
-msgstr "writelines()는 ë¬¸ìžì—´ ëª©ë¡ì´ í•„요합니다"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: íŒŒì´ì¬: I/O ê°ì²´ ì´ˆê¸°í™”중 ì—러가 ìƒê²¼ìŠµë‹ˆë‹¤"
-
-msgid "attempt to refer to deleted buffer"
-msgstr "지워진 ë²„í¼ë¥¼ ì°¸ì¡°í•˜ë ¤ê³  í•˜ì˜€ìŠµë‹ˆë‹¤"
-
-msgid "line number out of range"
-msgstr "줄 ë²ˆí˜¸ê°€ ë²”위를 ë²—어났습니다"
-
 #, c-format
 msgid "<buffer object (deleted) at %p>"
 msgstr "<%pì— ë²„í¼ ê°ì²´ (ì‚­ì œë¨)>"
 
-msgid "invalid mark name"
-msgstr "ìž˜ëª»ëœ ë§ˆí¬ ì´ë¦„"
-
-msgid "no such buffer"
-msgstr "그런 ë²„í¼ëŠ” ì—†ìŠµë‹ˆë‹¤"
-
-msgid "attempt to refer to deleted window"
-msgstr "지워진 ì°½ì„ ì°¸ì¡°í•˜ë ¤ê³  í•˜ì˜€ìŠµë‹ˆë‹¤"
-
-msgid "readonly attribute"
-msgstr "ì½ê¸° ì „ìš© ì†ì„±"
-
-msgid "cursor position outside buffer"
-msgstr "í¼ì„œ ìœ„치가 ë²„í¼ ë°–ì— ìžˆìŠµë‹ˆë‹¤"
-
-#, c-format
-msgid "<window object (deleted) at %p>"
-msgstr "<%pì— ì°½ ê°ì²´ (ì‚­ì œë¨)>"
-
-#, c-format
-msgid "<window object (unknown) at %p>"
-msgstr "<%pì— ì°½ ê°ì²´ (모름)>"
-
-#, c-format
-msgid "<window %d>"
-msgstr "<ì°½ %d>"
-
-msgid "no such window"
-msgstr "그런 ì°½ì€ ì—†ìŠµë‹ˆë‹¤"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: ì´ Vim쀠:python선사용한 í›„ì— :py3선사용할 ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
 #~ msgid "E265: $_ must be an instance of String"
 #~ msgstr ""
@@ -2735,6 +2715,9 @@ msgstr "아짠구현ë˜ì§€ ì•Šì•˜ìŠµë‹ˆë‹¤"
 msgid "cannot set line(s)"
 msgstr "줄선설정할 ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
+msgid "invalid mark name"
+msgstr "ìž˜ëª»ëœ ë§ˆí¬ ì´ë¦„"
+
 msgid "mark not set"
 msgstr "마í¬ê°€ ì„¤ì •ë˜ì§€ ì•Šì•˜ìŠµë‹ˆë‹¤"
 
@@ -2745,6 +2728,9 @@ msgstr "í–‰ %d ì—´ %d"
 msgid "cannot insert/append line"
 msgstr "줄선ë¼ì›Œë„£ê±°ë‚˜ ë”í•  ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
+msgid "line number out of range"
+msgstr "줄 ë²ˆí˜¸ê°€ ë²”위를 ë²—어났습니다"
+
 msgid "unknown flag: "
 msgstr "모르는 í”Œëž˜ê·¸: "
 
@@ -2829,11 +2815,14 @@ msgstr "너무 ë§Žì€ \"+command\" \"-c command\" í˜¹ì€ \"--cmd command\" ì¸
 msgid "%d files to edit\n"
 msgstr "%d íŒŒì¼ì„ ê³ ì¹˜ê¸°\n"
 
+msgid "netbeans is not supported with this GUI\n"
+msgstr "ì´ GUI는 netbeans를 ì§€ì›í•˜ì§€ ì•ŠìŠµë‹ˆë‹¤\n"
+
 msgid "This Vim was not compiled with the diff feature."
 msgstr "촠빔쀠diff ê¸°ëŠ¥ ì—†ì´ ì»´íŒŒì¼ ë˜ì—ˆìŠµë‹ˆë‹¤."
 
 msgid "'-nb' cannot be used: not enabled at compile time\n"
-msgstr "'-nb'ë\8a\94 Ã¬\82“\9a©í\95  Ã¬\88\98 Ã¬\97\86ì\8a´: ì»´íŒŒì¼í•  ë•Œ í¬í•¨ë˜ì§€ ì•ŠìŒ\n"
+msgstr "'-nb'ë\8a\94 Ã¬\82“\9a©í\95  Ã¬\88\98 Ã¬\97\86ì\9d\8c: ì»´íŒŒì¼í•  ë•Œ í¬í•¨ë˜ì§€ ì•ŠìŒ\n"
 
 msgid "Attempt to open script file again: \""
 msgstr "스í¬ë¦½íŠ¸ íŒŒì¼ì„ ë‹¤ì‹œ ì—´ë ¤ê³  ì‹œë„: \""
@@ -3074,7 +3063,8 @@ msgstr "--remote-wait-silent <files>  ê°™ìŒ, ì„œë²„ê°€ ì—†ë‹¤ê³  ë¶ˆí‰í•˜ì§€ 
 msgid ""
 "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
 msgstr ""
-"--remote-tab[-wait][-silent] <files>  --remote와 ê°™ì§€ë§Œ íŒŒì¼ë³„ë¡œ íƒ­ íŽ˜ì´ì§€ ì‚¬ìš©"
+"--remote-tab[-wait][-silent] <files>  --remote와 ê°™ì§€ë§Œ íŒŒì¼ë³„ë¡œ íƒ­ íŽ˜ì´ì§€ ì‚¬"
+"ìš©"
 
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <keys>\të¹” ì„œë²„ë¡œ <keys>를 ë³´ë‚´ê³  ë내기"
@@ -3127,12 +3117,6 @@ msgstr "-display <display>\t빔선<display>ì—ì„œ ì‹¤í–‰"
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\tì•„ì´ì½˜ ìƒíƒœë¡œ ë¹” ì‹œìž‘"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <name>\t\t빔촠<name>츠것처럼 ë¦¬ì†ŒìŠ¤ ì‚¬ìš©"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (구현ë˜ì§€ ì•ŠìŒ)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <color>\t바탕 ìƒ‰ìœ¼ë¡œ <color> ì‚¬ìš© (also: -bg)"
 
@@ -3254,7 +3238,6 @@ msgstr ""
 #~ "change line  col text"
 #~ msgstr ""
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3263,7 +3246,6 @@ msgstr ""
 "# íŒŒì¼ ë§ˆí¬:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3271,7 +3253,6 @@ msgstr ""
 "\n"
 "# ì í”„목론(새것촠먼저):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3303,15 +3284,6 @@ msgstr "E288: ìž…ë ¥ ë°©ì‹ì´ ì–´ë–¤ í˜•ì‹ë„ ì§€ì›í•˜ì§€ ì•ŠìŠµë‹ˆë‹¤"
 msgid "E289: input method doesn't support my preedit type"
 msgstr "E289: ìž…ë ¥ ë°©ì‹ì´ ë‚´ preedit í˜•ì‹ì„ ì§€ì›í•˜ì§€ ì•ŠìŠµë‹ˆë‹¤"
 
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: over-the-spot í˜•ì‹ì€ fontset촠사용ë˜ì–´ì•¼ í•©ë‹ˆë‹¤"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr "E291: GTK+ê°€ 1.2.3 ì´ì „ íŒìž…니다. ìƒíƒœ ì˜ì—­ì„ ì‚¬ìš©í•  ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: ìž…ë ¥ ì„œë²„ê°€ ì‹¤í–‰ë˜ì§€ ì•Šê³  ìžˆìŠµë‹ˆë‹¤"
-
 msgid "E293: block was not locked"
 msgstr "E293: êµ¬ì—­ì´ ìž ê¶ˆì§€ì§€ ì•Šì•˜ìŠµë‹ˆë‹¤"
 
@@ -3339,6 +3311,9 @@ msgstr "E298: êµ¬ì—­ ë²ˆí˜¸ 1선얻지 ëª»í–ˆë‚˜ìš”?"
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: êµ¬ì—­ ë²ˆí˜¸ 2를 ì–»ì§€ ëª»í–ˆë‚˜ìš”?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: ìŠ¤ì™‘ íŒŒì¼ì„ ì•”호화할 ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: ìœ¼ìœ½, ìŠ¤ì™‘ íŒŒì¼ì„ ìžƒì–´ë²„렸습니다!!!"
@@ -3395,6 +3370,12 @@ msgstr " ì´ ì»´í“¨í„°ì—서는 ì‚¬ìš©ë  ìˆ˜ ì—†ìŠµë‹ˆë‹¤.\n"
 #~ "or the file has been damaged."
 #~ msgstr ""
 
+#, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr ""
+"E833: %sì´(ê°€) ì•”호화ë˜ì–´ ìžˆëŠ” ë°, ì´ Vim쀠암호화를 ì§€ì›í•˜ì§€ ì•ŠìŠµë‹ˆë‹¤"
+
 #~ msgid " has been damaged (page size is smaller than minimum value).\n"
 #~ msgstr ""
 
@@ -3410,6 +3391,38 @@ msgid "E308: Warning: Original file may have been changed"
 msgstr "E308: ê²½ê³ : ì›ëž˜ íŒŒì¼ì´ ë°”뀌었습니다"
 
 #, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "스왑 íŒŒì¼ì´ ì•”호화ë¨: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"새로운 ì•”호 í‚¤ë¥¼ ìž…력했는 ë°, íŒŒì¼ì„ ì €ìž¥í•˜ì§€ ì•Šì•˜ì—ˆë‹¤ë©´,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"새로운 ì•”호 í‚¤ë¥¼ ìž…력하세요."
+
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"암호 í‚¤ë¥¼ ë°”ê¾¼ í›„엠파ì¼ì„ ì €ìž¥í–ˆì—ˆë‹¤ë©´ ê°™ì€ í‚¤ë¡œ í…스트 íŒŒì¼ê³¼"
+
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"스왑파ì¼ì„ ì €ìž¥í•˜ë ¤ë©´ ì—”터를 ëˆ„르세요"
+
+#, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309: %s옠구역 1ì„ ì½ì„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
@@ -3461,16 +3474,24 @@ msgstr ""
 "\n"
 "(어쩌면 ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥í•˜ê³  ì‹¶ìœ¼ì‹¤ ì§€ë„ ëª¨ë¥´ê² ìŠµë‹ˆë‹¤\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "그리고 ë°”뀠내용선확ì¸í•˜ë ¤ë©´ diff를 ì´ìš©í•˜ì‹­ì‹œì˜¤)\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "그리고 ë°”뀠내용선확ì¸í•˜ë ¤ë©´ ì›ëž˜ íŒŒì¼ì— ëŒ€í•´ diff를 ì‹¤í–‰í•˜ì„¸ìš”)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "복구가 ë났습니다. ë²„í¼ì˜ ë‚´ìš©ì´ íŒŒì¼ ë‚´ìš©ê³¼ ê°™ìŠµë‹ˆë‹¤."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"나중엠.swp íŒŒì¼ì„ ì§€ìš°ì‹­ì‹œì˜¤.\n"
+"\n"
+"ì´ì œ .swp íŒŒì¼ì„ ì§€ìš°ì…”ë„ ë©ë‹ˆë‹¤.\n"
 "\n"
 
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "í…스트 íŒŒì¼ì— ìŠ¤ì™‘파ì¼ì—ì„œ ê°€ì ¸ì˜¨ ì•”호 í‚¤ë¥¼ ì‚¬ìš©í•©ë‹ˆë‹¤.\n"
+
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
 msgstr "스왑 íŒŒì¼ì„ ì°¾ì•˜ìŒ:"
@@ -3677,10 +3698,12 @@ msgstr ""
 msgid "    If you did this already, delete the swap file \""
 msgstr "    ì´ë¯¸ ë³µêµ¬í•˜ì…¨ì—ˆë‹¤ë©´ ìŠ¤ì™‘파켠\""
 
-#~ msgid ""
-#~ "\"\n"
-#~ "    to avoid this message.\n"
-#~ msgstr ""
+msgid ""
+"\"\n"
+"    to avoid this message.\n"
+msgstr ""
+"\"\n"
+"    ì„(를) ì§€ìš°ì…”야 ì´ ë©”시지가 ì‚¬ë¼ì§‘니다.\n"
 
 msgid "Swap file \""
 msgstr "스왑 íŒŒì¼ \""
@@ -3889,7 +3912,6 @@ msgstr "ë¹”: íŒŒì¼ ë³´ì¡´ì¤‘...\n"
 msgid "Vim: Finished.\n"
 msgstr "ë¹”: ëŒë‚¬ìŠµë‹ˆë‹¤.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ì—러: "
 
@@ -3985,8 +4007,14 @@ msgstr "Netbeans ì†Œì¼“ì—ì„œ ì½ê¸°"
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: ë²„í¼ %ld엠대한 NetBeans ì—°ê²°ì„ ìžƒì–´ë²„렸습니다"
 
-#~ msgid "E505: "
-#~ msgstr ""
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: ì´ GUI는 netbeans를 ì§€ì›í•˜ì§€ ì•ŠìŠµë‹ˆë‹¤"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: netbeansê°€ ì´ë¯¸ ì—°ê²°ë˜ì–´ ìžˆìŠµë‹ˆë‹¤"
+
+msgid "E505: "
+msgstr "E505: "
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: ì»¤ì„œ ë°‘ì— ì‹ë³„ìžê°€ ì—†ìŠµë‹ˆë‹¤"
@@ -4092,7 +4120,6 @@ msgstr ""
 msgid "Illegal register name"
 msgstr "ì´ìƒí•œ ë ˆì§€ìŠ¤í„° ì´ë¦„"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -4117,8 +4144,8 @@ msgid ""
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
 msgstr ""
-"Selected %s%ld of %ld ë¼ì¸; %ld of %ld ë‹¨ì–´; %ld of %ld ë¬¸ìž; %ld of %ld "
-"ë°”ì´íŠ¸"
+"Selected %s%ld of %ld ë¼ì¸; %ld of %ld ë‹¨ì–´; %ld of %ld ë¬¸ìž; %ld of %ld ë°”ì´"
+"트"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
@@ -4129,8 +4156,8 @@ msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Col %s of %s; ë¼ì¸ %ld of %ld; ë‹¨ì–´ %ld of %ld; ë¬¸ìž %ld of %ld; ë°”ì´íŠ¸ %ld of "
-"%ld"
+"Col %s of %s; ë¼ì¸ %ld of %ld; ë‹¨ì–´ %ld of %ld; ë¬¸ìž %ld of %ld; ë°”ì´íŠ¸ %ld "
+"of %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4173,6 +4200,12 @@ msgstr "E531: GUI를 ì‹œìž‘하려면 \":gui\"를 ì‚¬ìš©í•˜ì‹­ì‹œì˜¤"
 msgid "E589: 'backupext' and 'patchmode' are equal"
 msgstr "E589: 'backupext'와 'patchmode'ê°€ ë™ì¼í•©ë‹ˆë‹¤"
 
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: 'listchars' ê°’ê³¼ ì¶©ëŒì´ ë°œìƒí•©ë‹ˆë‹¤"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: 'fillchars' ê°’ê³¼ ì¶©ëŒì´ ë°œìƒí•©ë‹ˆë‹¤"
+
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: GTK+ 2 GUIì—서는 ë°”뀔 ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
@@ -4378,9 +4411,6 @@ msgstr "E244: ìž˜ëª»ëœ ê¸€ìžì…‹ ì´ë¦„ \"%s\"ì´(ê°€) ê¸€ê¼´ ì´ë¦„ \"%s\"ì—
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: ìž˜ëª»ëœ ê¸€ìž '%c'ì´(ê°€) ê¸€ê¼´ ì´ë¦„ \"%s\"엠있습니다"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: ìž˜ëª»ëœ 'osfiletype' ì˜µì…˜ - Text를 ì‚¬ìš©í•©ë‹ˆë‹¤"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "ë¹”: ê°™ì€ ì‹œê·¸ë„ ë‘ ë²ˆ, ë냅니다\n"
 
@@ -4584,6 +4614,9 @@ msgstr "error list %d of %d; %d errors"
 msgid "E382: Cannot write, 'buftype' option is set"
 msgstr "E382: ì“¸ ìˆ˜ ì—†ìŒ, 'buftype' ì˜µì…˜ì´ ì„¤ì •ë˜ì–´ ìžˆìŠµë‹ˆë‹¤"
 
+msgid "Error file"
+msgstr "ì—러 íŒŒì¼"
+
 msgid "E683: File name missing or invalid pattern"
 msgstr "E683: íŒŒì¼ëª… ëˆ„뽠혹쀠잘못뜠패턴"
 
@@ -4839,6 +4872,10 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: ë§žì¶¤ë²• ê²€ì‚¬ê°€ í™œì„±í™”ë˜ì–´ ìžˆì§€ ì•ŠìŠµë‹ˆë‹¤"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "경고: ë‹¨ì–´ ëª©ë¡ \"%s_%s.spl\" í˜¹ì€ \"%s_ascii.spl\"선찾선수 ì—†ìŠµë‹ˆë‹¤"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr "경고: ë‹¨ì–´ ëª©ë¡ \"%s.%s.spl\" í˜¹ì€ \"%s.ascii.spl\"선찾선수 ì—†ìŠµë‹ˆë‹¤"
 
@@ -5062,6 +5099,9 @@ msgstr "%s ë¼ì¸ %d엠모르는 í”Œëž˜ê·¸: %s"
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "아스키 ë¬¸ìžì—´ì´ ì•„ë‹Œ %d개옠단어가 ë¬´ì‹œë˜ì—ˆìŠµë‹ˆë‹¤"
 
+#~ msgid "E845: Insufficient memory, word list will be incomplete"
+#~ msgstr ""
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "%d/%d ë…¸ë“œê°€ ì••ì¶•ë¨; %d (%d%%)ê°€ ë‚¨ìŒ"
@@ -5149,7 +5189,7 @@ msgstr "E752: ì² ìžê°€ ë°”ë€ì ì´ ì—†ìŠµë‹ˆë‹¤"
 
 #, c-format
 msgid "E753: Not found: %s"
-msgstr "E753: Ã¬Â°Â¾Ã¬\9d\84 Ã¬\88\98 Ã¬\97\86ì\8a´: %s"
+msgstr "E753: Ã¬Â°Â¾Ã¬\9d\84 Ã¬\88\98 Ã¬\97\86ì\9d\8c: %s"
 
 #, c-format
 msgid "E778: This does not look like a .sug file: %s"
@@ -5239,8 +5279,8 @@ msgstr " line breaks"
 msgid "E395: contains argument not accepted here"
 msgstr "E395: contains ì¸ìžëŠ” ì—¬ê¸°ì— ì“¸ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: containedin ì¸ìžëŠ” ì—¬ê¸°ì— ì“¸ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
+msgid "E844: invalid cchar value"
+msgstr "E844: ìž˜ëª»ëœ cchar ê°’"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]here는 ì—¬ê¸°ì—ì„œ ì‚¬ìš©ë  ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
@@ -5452,6 +5492,10 @@ msgstr "E434: íƒœê·¸ íŒ¨í„´ì„ ì°¾ì„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 msgid "E435: Couldn't find tag, just guessing!"
 msgstr "E435: íƒœê·¸ë¥¼ ì°¾ì„ ìˆ˜ ì—†ì§€ë§Œ ì´ê±° ê°™ìŠµë‹ˆë‹¤!"
 
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "중복뜠필드 ëª…: %s"
+
 msgid "' not known. Available builtin terminals are:"
 msgstr "' not known. Available builtin terminals are:"
 
@@ -5491,10 +5535,84 @@ msgstr "ë¹”: ìž…ë ¥ ì½ëŠ” ì¤‘ ì—러, ë내는중...\n"
 msgid "Used CUT_BUFFER0 instead of empty selection"
 msgstr "빈 ê³ ë¥´ê¸° ëŒ€ì‹  CUT_BUFFER0선사용했습니다"
 
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: ì¤„ ê°¯ìˆ˜ê°€ ëª¨ë¥´ëŠ” ì‚¬ì´ì— ë°”뀌었습니다"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "취소 ë¶ˆê°€ëŠ¥; ì–´ì¨Œë“  ê³„ì†í•©ë‹ˆë‹¤"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: ì“°ê¸° ìœ„í•´ undoì„ ì—´ ìˆ˜ ì—†ìŠµë‹ˆë‹¤: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: ê¹¨ì§„ undo íŒŒì¼ (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "'undodir'엠있는 ì–´ë–¤ ë””렉토리ì—ë„ undo íŒŒì¼ì„ ì“¸ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "ì½ì„ ìˆ˜ê°€ ì—†ì–´ì„œ undo íŒŒì¼ì— ë®ì–´ì“¸ ìˆ˜ ì—†ìŠµë‹ˆë‹¤: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "undo íŒŒì¼ì´ ì•„니어서 ë®ì–´ì“¸ ìˆ˜ ì—†ìŠµë‹ˆë‹¤: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "undoí•  ë‚´ìš©ì´ ì—†ì–´ì„œ undo íŒŒì¼ ì €ìž¥ì„ ê±´ë„ˆëœë‹ˆë‹¤"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "undo íŒŒì¼ ì“°ëŠ” ì¤‘: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: undo íŒŒì¼ ì“°ê¸° ì—러: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "소유ìžê°€ ë‹¬ë¼ì„œ undo íŒŒì¼ì„ ì½ì§€ ì•ŠìŠµë‹ˆë‹¤: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "undo íŒŒì¼ ì½ëŠ” ì¤‘: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: ì½ê¸° ìœ„í•´ undo íŒŒì¼ì„ ì—´ ìˆ˜ ì—†ìŠµë‹ˆë‹¤: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: undo íŒŒì¼ì´ ì•„닙니다: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: ì•”호화ë˜ì§€ ì•Šì€ íŒŒì¼ì´ ì•”호화뜠undo íŒŒì¼ì„ ê°€ì§€ê³  ìžˆìŠµë‹ˆë‹¤: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: Undo íŒŒì¼ì„ í•´ë…í•  ìˆ˜ ì—†ìŠµë‹ˆë‹¤: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: Undo íŒŒì¼ì´ ì•”호화ë˜ì—ˆìŠµë‹ˆë‹¤: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: í˜¸í™˜ë˜ì§€ ì•ŠëŠ” undo íŒŒì¼: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "파켠내용촠바뀌어서, undo ì •ë³´ë¥¼ ì‚¬ìš©í•  ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "undo íŒŒì¼ %sì„(를) ì½ì–´ë“¤ì˜€ìŠµë‹ˆë‹¤"
+
 msgid "Already at oldest change"
 msgstr "ë” ì´ìƒì˜ ìˆ˜ì •ì´ ì—†ì—ˆìŠµë‹ˆë‹¤"
 
@@ -5502,8 +5620,8 @@ msgid "Already at newest change"
 msgstr "ë” ì´ìƒì˜ ìˆ˜ì •ì€ ì—†ì—ˆìŠµë‹ˆë‹¤"
 
 #, c-format
-msgid "Undo number %ld not found"
-msgstr "취소 ë²ˆí˜¸ %ld를 ì°¾ì„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Undo ë²ˆí˜¸ %ld를 ì°¾ì„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: ìž˜ëª»ëœ ì¤„ ë²ˆí˜¸"
@@ -5539,8 +5657,8 @@ msgstr "after"
 msgid "Nothing to undo"
 msgstr "취소할 ê²Œ ì—†ìŠµë‹ˆë‹¤"
 
-msgid "number changes  time"
-msgstr "number changes  time"
+#~ msgid "number changes  when               saved"
+#~ msgstr ""
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5721,15 +5839,9 @@ msgstr "GUI ì—†ìŒ."
 msgid "with GTK2-GNOME GUI."
 msgstr "GTK2-GNOME GUI."
 
-msgid "with GTK-GNOME GUI."
-msgstr "GTK-GNOME GUI."
-
 msgid "with GTK2 GUI."
 msgstr "GTK2 GUI."
 
-msgid "with GTK GUI."
-msgstr "GTK GUI."
-
 msgid "with X11-Motif GUI."
 msgstr "X11-Motif GUI."
 
@@ -5902,7 +6014,7 @@ msgid "E813: Cannot close autocmd window"
 msgstr "E813: autocmd ì°½ì„ ë‹«ì„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
 msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E814: Ã¬Â°Â½Ã¬\9d\84 Ã«\8b«ì\9d\84 Ã¬\88\98 Ã¬\97\86ì\8a´, autocmd ì°½ë§Œ ë‚¨ìŒ"
+msgstr "E814: Ã¬Â°Â½Ã¬\9d\84 Ã«\8b«ì\9d\84 Ã¬\88\98 Ã¬\97\86ì\9d\8c, autocmd ì°½ë§Œ ë‚¨ìŒ"
 
 msgid "E445: Other window contains changes"
 msgstr "E445: ë‹¤ë¥¸ ì°½ì´ ë°”뀌었습니다"
@@ -6142,7 +6254,7 @@ msgid "E485: Can't read file %s"
 msgstr "E485: %s íŒŒì¼ì„ ì½ì„ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
 msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: Ã«Â§\88ì§\80ë§\89ì\9c¼ë¡\9c ÃªÂ³Â Ã¬Â¹\9c Ã«\92¤ Ã¬Â \80ì\9e¥ë\90\98ì§\80 Ã¬\95\8aì\95\98ì\8aµë\8b\88ë\8b¤ (ë\8d®ì\96´ì\93°려면 ! ë”하기)"
+msgstr "E37: Ã«Â§\88ì§\80ë§\89ì\9c¼ë¡\9c ÃªÂ³Â Ã¬Â¹\9c Ã«\92¤ Ã¬Â \80ì\9e¥ë\90\98ì§\80 Ã¬\95\8aì\95\98ì\8aµë\8b\88ë\8b¤ (무ì\8b\9cí\95\98려면 ! ë”하기)"
 
 msgid "E38: Null argument"
 msgstr "E38: ë„ ì¸ìž"
@@ -6177,7 +6289,7 @@ msgid "E42: No Errors"
 msgstr "E42: ì—러 ì—†ìŒ"
 
 msgid "E776: No location list"
-msgstr "E776: Ã¬\9c\84ì¹\98 Ã«ÂªÂ©Ã«Â¡\9d Ã¬\97\86ì\8a´"
+msgstr "E776: Ã¬\9c\84ì¹\98 Ã«ÂªÂ©Ã«Â¡\9d Ã¬\97\86ì\9d\8c"
 
 msgid "E43: Damaged match string"
 msgstr "E43: ê¹¨ì§„ ë§žëŠ” ë¬¸ìžì—´"
@@ -6194,7 +6306,7 @@ msgstr "E46: ì½ê¸° ì „ìš© ë³€ìˆ˜ \"%s\"ì„(를) ë°”ê¿€ ìˆ˜ ì—†ìŠµë‹ˆë‹¤"
 
 #, c-format
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: sandbox Ã¬\95\88ì\97\90ì\84\9cë\8a\94 Ã«Â³\80ì\88\98를 Ã¬\84¤ì \95í\95  Ã¬\88\98 Ã¬\97\86ì\8a´: \"%s\""
+msgstr "E794: sandbox Ã¬\95\88ì\97\90ì\84\9cë\8a\94 Ã«Â³\80ì\88\98를 Ã¬\84¤ì \95í\95  Ã¬\88\98 Ã¬\97\86ì\9d\8c: \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: ì—러파켠ì½ëŠ” ë„중엠ì—러"
@@ -6294,3 +6406,42 @@ msgstr "처ìŒê¹Œì§€ ì°¾ì•˜ìŒ, ëì—ì„œ ê³„ì†"
 msgid "search hit BOTTOM, continuing at TOP"
 msgstr "ë까지 ì°¾ì•˜ìŒ, ì²˜ìŒë¶€í„° ê³„ì†"
 
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "\"%s\"엠대한 ì•”호 í‚¤ê°€ í•„요합니다"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines()는 ë¬¸ìžì—´ ëª©ë¡ì´ í•„요합니다"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: íŒŒì´ì¬: I/O ê°ì²´ ì´ˆê¸°í™”중 ì—러가 ìƒê²¼ìŠµë‹ˆë‹¤"
+
+msgid "no such buffer"
+msgstr "그런 ë²„í¼ëŠ” ì—†ìŠµë‹ˆë‹¤"
+
+msgid "attempt to refer to deleted window"
+msgstr "지워진 ì°½ì„ ì°¸ì¡°í•˜ë ¤ê³  í•˜ì˜€ìŠµë‹ˆë‹¤"
+
+msgid "readonly attribute"
+msgstr "ì½ê¸° ì „ìš© ì†ì„±"
+
+msgid "cursor position outside buffer"
+msgstr "í¼ì„œ ìœ„치가 ë²„í¼ ë°–ì— ìžˆìŠµë‹ˆë‹¤"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<%pì— ì°½ ê°ì²´ (ì‚­ì œë¨)>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<%pì— ì°½ ê°ì²´ (모름)>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<ì°½ %d>"
+
+msgid "no such window"
+msgstr "그런 ì°½ì€ ì—†ìŠµë‹ˆë‹¤"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "지워진 ë²„í¼ë¥¼ ì°¸ì¡°í•˜ë ¤ê³  í•˜ì˜€ìŠµë‹ˆë‹¤"
index 3192cf2..5a447da 100644 (file)
@@ -1,12 +1,12 @@
 # Generated from ko.UTF-8.po, DO NOT EDIT
 #
-# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2010
+# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2011
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vim 7.2\n"
+"Project-Id-Version: vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-18 09:43+0900\n"
+"POT-Creation-Date: 2011-02-16 16:18+0900\n"
 "PO-Revision-Date: 2010-02-18 09:49+0900\n"
 "Last-Translator: SungHyun Nam <goweol@gmail.com>\n"
 "Language-Team: GTP Korean <gnome-kr-translation@gnome.or.kr>\n"
@@ -14,6 +14,27 @@ msgstr ""
 "Content-Type: text/plain; charset=euc-kr\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: ÂºÃ³ ÂºÃ±Â¹Ã¹øÈ£·Î bf_key_init() Ã‡Ã”¼ö°¡ ÂºÃ’·Ãó½À´Ã´Ù"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: Blowfish big/little endian use wrong"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256 Â½ÃƒÃ‡Ã¨Ã€ÃŒ Â½Ã‡Ã†ÃÇß½À´Ã´Ù."
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Blowfish Â½ÃƒÃ‡Ã¨Ã€ÃŒ Â½Ã‡Ã†ÃÇß½À´Ã´Ù."
+
+msgid "[Location List]"
+msgstr "[À§Ä¡ Â¸Ã±Â·Ã]"
+
+msgid "[Quickfix List]"
+msgstr "[Quickfix Â¸Ã±Â·Ã]"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Â¹Ã¶Ã†Ã›Â¸Â¦ Ã‡Ã’´çÇҠ¼ö Â¾Ã¸Â¾Ã®Â¼Â­ Â³Â¡Â³Ã€Â´Ã´Ù..."
 
@@ -147,7 +168,6 @@ msgstr "
 msgid "Top"
 msgstr "²À´ë±â"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -155,12 +175,6 @@ msgstr ""
 "\n"
 "# Â¹Ã¶Ã†Ã› Â¸Ã±Â·Ã:\n"
 
-msgid "[Location List]"
-msgstr "[À§Ä¡ Â¸Ã±Â·Ã]"
-
-msgid "[Quickfix List]"
-msgstr "[Quickfix Â¸Ã±Â·Ã]"
-
 msgid "[Scratch]"
 msgstr "[Scratch]"
 
@@ -232,7 +246,7 @@ msgid "E105: Using :loadkeymap not in a sourced file"
 msgstr "E105: ÂºÃ’·¯µéÀΠÆÄÀÿ¡¼­ :loadkeymapÀ» Â»Ã§Â¿Ã«Ã‡ÃÃö Â¾ÃŠÂ¾Ã’½À´Ã´Ù"
 
 msgid "E791: Empty keymap entry"
-msgstr "E791: Ã…°¸Ê Â¿Â£Ã†Â®Â¸Â®Â°Â¡ ÂºÃ±Â¾Ã®Ã€Ã–½¿"
+msgstr "E791: Ã…°¸Ê Â¿Â£Ã†Â®Â¸Â®Â°Â¡ ÂºÃ±Â¾Ã®Ã€Ã–À½"
 
 msgid " Keyword completion (^N^P)"
 msgstr " Â³Â¹Â¸Â» Â¿Ã¼º (^N^P)"
@@ -280,6 +294,12 @@ msgstr " 
 msgid "Hit end of paragraph"
 msgstr "´Ü¶ôÀǠ¸¶Ãö¸· Â¸Â¸Â³Â²"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: Completion Â±Ã¢Â´Ã‰Ã€ÃŒ ÃƒÂ¢Ã€Â» Â¹Ã™Â²Ã™Â¾ÃºÂ½Ã€Â´Ã´Ù"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Completion Â±Ã¢Â´Ã‰Ã€ÃŒ Â¹Â®Ã€ÃšÂ¿Â­Ã€Â» Ãö¿ü½À´Ã´Ù"
+
 msgid "'dictionary' option is empty"
 msgstr "'dictionary' Â¿Ã‰Â¼Ã‡Ã€ÃŒ ÂºÃ±Â¾ÃºÂ½Ã€Â´Ã´Ù"
 
@@ -367,7 +387,7 @@ msgstr "E118: 
 
 #, c-format
 msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Dictionary¿¡ Ã…°°¡ Â¾Ã¸Â½Â¿: %s"
+msgstr "E716: Dictionary¿¡ Ã…°°¡ Â¾Ã¸Ã€Â½: %s"
 
 #, c-format
 msgid "E122: Function %s already exists, add ! to replace it"
@@ -585,7 +605,7 @@ msgid "E727: Start past end"
 msgstr "E727: Â½ÃƒÃ€Ã›Ã€Â§Ã„¡°¡ Â³Â¡Ã€Â» Ãö³ªÄ§"
 
 msgid "<empty>"
-msgstr "<ºñ¾îÀÖ½¿>"
+msgstr "<ºñ¾îÀÖÀ½>"
 
 msgid "E240: No connection to Vim server"
 msgstr "E240: Vim Â¼Â­Â¹Ã¶Â¿Â¡ Â¿Â¬Â°Ã¡ÂµÃ‡Â¾Ã® Ã€Ã–Ãö Â¾ÃŠÂ½Ã€Â´Ã´Ù"
@@ -730,7 +750,6 @@ msgstr "%s
 msgid "E133: :return not inside a function"
 msgstr "E133: :returnÀ̠ÇÔ¼ö Â¾ÃˆÂ¿Â¡ Ã€Ã–Ãö Â¾ÃŠÂ½Ã€Â´Ã´Ù"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -821,7 +840,6 @@ msgstr "Viminfo 
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Ã€ÃŒ viminfo Ã†Ã„ÀÃ˼ ÂºÃ¶Ã€ÃŒ Â¸Â¸ÂµÃ§ Â°ÃÀԴô٠Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -829,7 +847,6 @@ msgstr ""
 "# Ã¶½É¸¸ Ã‡Ã‘´Ù¸é Â°Ã­Ã„Â¥ Â¼Ã¶ÂµÂµ Ã€Ã–½À´Ã´Ù!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Ã€ÃŒ Ã†Ã„ÀÃÀ̠ÀúÀåµÇ¾úÀ» Â¶Â§Ã€Ã‡ 'encoding'ÀǠ°ª\n"
 
@@ -855,7 +872,7 @@ msgstr "
 
 #, c-format
 msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: Â½ÂºÂ¿Ã’ Ã†Ã„ÀàÀÖ½¿: %s (µ¤¾î¾²·Ã¸é :silent! Â»Ã§Â¿Ã«)"
+msgstr "E768: Â½ÂºÂ¿Ã’ Ã†Ã„ÀàÀÖÀ½: %s (µ¤¾î¾²·Ã¸é :silent! Â»Ã§Â¿Ã«)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -940,7 +957,6 @@ msgstr "E148: global
 msgid "Pattern found in every line: %s"
 msgstr "¿©·¯ ÃÙ¿¡¼­ Ã†ÃÃ…ÃÀ» ÃƒÂ£Â¾Ã’½À´Ã´Ù: %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1049,8 +1065,8 @@ msgstr "
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s  %ld ÃÙ"
 
-msgid "E750: First use :profile start <fname>"
-msgstr "E750: Â¸Ã•Ã€Ãº ':profile start <fname>'À» Â»Ã§Â¿Ã«Ã‡Ã¼¼¿ä"
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: Â¸Ã•Ã€Ãº \":profile start {fname}\"À» Â»Ã§Â¿Ã«Ã‡Ã¼¼¿ä"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
@@ -1096,7 +1112,7 @@ msgstr "
 
 #, c-format
 msgid "Cannot source a directory: \"%s\""
-msgstr "µð·ºÅ丮´Â sourceÇҠ¼ö Â¾Ã¸Â½Â¿: \"%s\""
+msgstr "µð·ºÅ丮´Â sourceÇҠ¼ö Â¾Ã¸Ã€Â½: \"%s\""
 
 #, c-format
 msgid "could not source \"%s\""
@@ -1121,11 +1137,11 @@ msgstr "%s 
 #~ msgid "modeline"
 #~ msgstr ""
 
-#~ msgid "--cmd argument"
-#~ msgstr ""
+msgid "--cmd argument"
+msgstr "--cmd Ã€ÃŽÃ€Ãš"
 
-#~ msgid "-c argument"
-#~ msgstr ""
+msgid "-c argument"
+msgstr "-c Ã€ÃŽÃ€Ãš"
 
 msgid "environment variable"
 msgstr "ȯ°æ ÂºÂ¯Â¼Ã¶"
@@ -1242,6 +1258,9 @@ msgstr "E182: 
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: Â»Ã§Â¿Ã«Ã€Ãš Ã¤ÀǠ¸í·ÉÀº Â´Ã«Â¹Â®Ã€ÃšÂ·ÃŽ Â½ÃƒÃ€Ã›Ã‡Ã˜Â¾ÃŸ Ã‡Ã•Â´Ã´Ù"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: Â¿Â¹Â¾Ã ÂµÃˆ Ã€ÃŒÂ¸Â§, Â»Ã§Â¿Ã«Ã€Ãš Ã¤ÀǠ¸í·ÉÀ¸·Î Â»Ã§Â¿Ã«ÂµÃ‰ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Â±Ã—·± Â»Ã§Â¿Ã«Ã€Ãš Ã¤ÀǠ¸í·É Â¾Ã¸Ã€Â½: %s"
@@ -1256,6 +1275,9 @@ msgstr "E468: 
 msgid "E467: Custom completion requires a function argument"
 msgstr "E467: Â»Ã§Â¿Ã«Ã€Ãš Â¿Ã¼ºÀº Ã‡Ã”¼ö Ã€ÃŽÃ€ÃšÂ°Â¡ Ã‡ÃŠÂ¿Ã¤Ã‡Ã•Â´Ã´Ù"
 
+msgid "unknown"
+msgstr "¸ð¸§"
+
 #, c-format
 msgid "E185: Cannot find color scheme %s"
 msgstr "E185: Â»Ã¶ Â½ÂºÃ…´ %sÀ»(¸¦) ÃƒÂ£Ã€Â» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
@@ -1353,6 +1375,9 @@ msgstr "E497: \"<amatch>\"
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: \"<sfile>\"¿¡ Â´Ã«Ã‡Ã˜ Ã„¡È¯ÇÒ :source Ã†Ã„ÀàÀ̸§À̠¾ø½À´ôÙ"
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: \"<slnum>\"¿¡ Â»Ã§Â¿Ã«ÂµÃ‰ Ã٠¹øÈ£°¡ Â¾Ã¸Â½Ã€Â´Ã´Ù"
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: '%'³ª '#'¿¡ Â´Ã«Ã‡Ã‘ ÂºÃ³ Ã†Ã„ÀàÀ̸§, Â¿Ã€Â·ÃŽÃö \":p:h\"¿Ã¸¸ ÂµÂ¿Ã€Ã›Ã‡Ã•Â´Ã´Ù"
@@ -1607,6 +1632,9 @@ msgstr "'charconvert'
 msgid "can't read output of 'charconvert'"
 msgstr "'charconvert'ÀǠÃâ·Â°á°ú¸¦ Ã€ÃÀ» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: Ã†Ã„ÀÃÀ̠¸ð¸£´Â Â¹Ã¦Â¹Ã½Ã€Â¸Â·ÃŽ Â¾ÃȣȭµÇ¾î Ã€Ã–½À´Ã´Ù"
+
 msgid "E676: No matching autocommands for acwrite buffer"
 msgstr "E676: acwrite Â¹Ã¶Ã†Ã›Â¿Â¡ Â´Ã«Ã‡Ã‘ autocommand¸¦ ÃƒÂ£Ã€Â» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
@@ -1674,9 +1702,7 @@ msgstr "E513: 
 msgid ""
 "E513: write error, conversion failed in line %ld (make 'fenc' empty to "
 "override)"
-msgstr ""
-"E513: Â¾Â²Â±Ã¢ Â¿Â¡Â·Â¯, %ld ÃÙ¿¡¼­ ÂºÂ¯ÃˆÂ¯ Â½Ã‡Ã†Ã (¹«½ÃÇ÷øé 'fenc'¸¦ ÂºÃ±Â¿Ã¬Â¸Ã© "
-"µÊ)"
+msgstr "E513: Â¾Â²Â±Ã¢ Â¿Â¡Â·Â¯, %ld ÃÙ¿¡¼­ ÂºÂ¯ÃˆÂ¯ Â½Ã‡Ã†Ã (¹«½ÃÇ÷øé 'fenc'¸¦ ÂºÃ±Â¿Ã¬Â¸Ã© ÂµÃŠ)"
 
 msgid "E514: write error (file system full?)"
 msgstr "E514: Â¾Â²Â±Ã¢ Â¿Â¡Â·Â¯ (ÆÄÀà½Ã½ºÅÛÀ̠²Ëᳪ¿ä?)"
@@ -1754,6 +1780,11 @@ msgid "1 character"
 msgstr "1 Â±Ã›Ã€Ãš"
 
 #, c-format
+msgid "%lld characters"
+msgstr "%lld Â±Ã›Ã€Ãš"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "%ld Â±Ã›Ã€Ãš"
 
@@ -1998,9 +2029,6 @@ msgstr "
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: Â¸ÃžÂ½ÃƒÃö¿àÄùé Â¸Ã°ÂµÃŽÂ¸Â¦ Â»Ã§Â¿Ã«Ã‡Ã˜Â¼Â­Â´Ã‚ BalloonEvalÀ» Â¸Â¸ÂµÃ© Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
-msgid "Vim dialog..."
-msgstr "ºö Â´Ã«ÃˆÂ­Â»Ã³Ã€Ãš..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -2043,12 +2071,15 @@ msgstr "
 msgid "Down"
 msgstr "¾Æ·¡·Î"
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr "´ÙÀ½ ÃƒÂ£Â±Ã¢"
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "¹Ù²Ù±â"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr "¸ðµÎ Â¹Ã™Â²Ã™Â±Ã¢"
 
@@ -2067,9 +2098,6 @@ msgstr "
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "ºö: Â¸ÃžÃ€ÃŽ ÃƒÂ¢Ã€ÃŒ ÃװԠµÉ Â°ÃÀԴôÙ\n"
 
-msgid "Font Selection"
-msgstr "±Û²Ã Â°Ã­Â¸Â£Â±Ã¢"
-
 msgid "&Filter"
 msgstr "°Å¸£°³(&F)"
 
@@ -2107,21 +2135,6 @@ msgid "&Undo"
 msgstr "Ãë¼Ò(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zap Â±Ã›Â²Ãƒ '%s'À»(¸¦) Â·ÃŽÂµÃ¥Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Â±Ã›Â²Ãƒ %sÀ»(¸¦) Â»Ã§Â¿Ã«Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"ÀڽĠÇ÷μ¼½º¸¦ Â³Â¡Â³Â»Â±Ã¢ Ã€Â§Ã‡Ã˜ Â¸ÃžÂ½ÃƒÃö¸¦ ÂºÂ¸Â³Ã‚½À´Ã´Ù.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: ÃƒÂ¢ Ã¦¸ñ \"%s\"À»(¸¦) ÃƒÂ£Ã€Â» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
@@ -2398,11 +2411,11 @@ msgid "E567: no cscope connections"
 msgstr "E567: cscope Â¿Â¬Â°Ã¡Ã€ÃŒ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
 #, c-format
-#~ msgid "E259: no matches found for cscope query %s of %s"
+#~ msgid "E469: invalid cscopequickfix flag %c for %c"
 #~ msgstr ""
 
 #, c-format
-#~ msgid "E469: invalid cscopequickfix flag %c for %c"
+#~ msgid "E259: no matches found for cscope query %s of %s"
 #~ msgstr ""
 
 msgid "cscope commands:\n"
@@ -2421,7 +2434,7 @@ msgid ""
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: Ã€ÃŒ Ã‡Ã”¼ö¸¦ ÂºÃŽÂ¸Â£Â´Ã‚ Ã‡Ã”¼öµé ÃƒÂ£Â±Ã¢\n"
@@ -2431,7 +2444,7 @@ msgstr ""
 "       g: Ã€ÃŒ Ã¤ÀǠã±â\n"
 "       i: Ã€ÃŒ Ã†Ã„ÀÃÀ» Ã†Ã·Ã‡Ã”Çô ÆÄÀõé ÃƒÂ£Â±Ã¢\n"
 "       s: Ã€ÃŒ C Â½Ã‰ÂºÂ¼ ÃƒÂ£Â±Ã¢\n"
-"       t: Find assignments to\n"
+"       t: Ã€ÃŒ Â¹Â®Ã€ÃšÂ¿Â­ ÃƒÂ£Â±Ã¢\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2482,12 +2495,18 @@ msgstr "cscope 
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    ÂµÂ¥Ã€ÃŒÃ…ú£À̽º Ã€ÃŒÂ¸Â§                   prepend path\n"
 
+#~ msgid "Lua library cannot be loaded."
+#~ msgstr ""
+
+msgid "cannot save undo information"
+msgstr "undo Ã¤º¸¸¦ Ã€ÃºÃ€Ã¥Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
+
 msgid ""
 "E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
 msgstr ""
-"E815: Â¹ÃŒÂ¾ÃˆÃ‡Ã•Â´Ã´Ù, Ã€ÃŒ Â¸Ã­Â·Ã‰Ã€Âº Â»Ã§Â¿Ã«Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù, MzScheme Â¶Ã³Ã€ÃŒÂºÃªÂ·Â¯Â¸Â®Â¸Â¦ Â·ÃŽÂµÃ¹Ã‡Ã’ Â¼Ã¶ Â¾Ã¸"
-"½À´Ã´Ù."
+"E815: Â¹ÃŒÂ¾ÃˆÃ‡Ã•Â´Ã´Ù, Ã€ÃŒ Â¸Ã­Â·Ã‰Ã€Âº Â»Ã§Â¿Ã«Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù, MzScheme Â¶Ã³Ã€ÃŒÂºÃªÂ·Â¯Â¸Â®Â¸Â¦ Â·ÃŽÂµÃ¹Ã‡Ã’ "
+"¼ö Â¾Ã¸Â½Ã€Â´Ã´Ù."
 
 msgid "invalid expression"
 msgstr "À߸øµÈ Ã‡Â¥Ã‡Ã¶Â½Ã„"
@@ -2507,9 +2526,6 @@ msgstr "â 
 msgid "couldn't open buffer"
 msgstr "¹öÆÛ¸¦ Â¿Â­ Â¼Ã¶ Â¾Ã¸Â¾ÃºÂ½Ã€Â´Ã´Ù"
 
-msgid "cannot save undo information"
-msgstr "undo Ã¤º¸¸¦ Ã€ÃºÃ€Ã¥Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
-
 msgid "cannot delete line"
 msgstr "ÃÙÀ» Ãö¿ï Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
@@ -2540,6 +2556,9 @@ msgstr "
 msgid "not allowed in the Vim sandbox"
 msgstr "Vim sandbox¿¡¼­´Â Ã‡Ã£Â¿Ã«ÂµÃ‡Ãö Â¾ÃŠÂ½Ã€Â´Ã´Ù"
 
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Ã€ÃŒ Vim˼ :py3À» Â»Ã§Â¿Ã«Ã‡Ã‘ ÃˆÃ„¿¡ :pythonÀ» Â»Ã§Â¿Ã«Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
+
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
@@ -2559,51 +2578,12 @@ msgstr "softspace
 msgid "invalid attribute"
 msgstr "À߸øµÈ Â¼Ã“¼º"
 
-msgid "writelines() requires list of strings"
-msgstr "writelines()´Â Â¹Â®Ã€ÃšÂ¿Â­ Â¸Ã±Â·ÃÀ̠ÇÊ¿äÇÕ´ôÙ"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Ã†Ã„À̽ã: I/O Â°Â´ÃƒÂ¼ ÃƒÃŠÂ±Ã¢ÃˆÂ­Ãߠ¿¡·¯°¡ Â»Ã½Â°Ã¥Â½Ã€Â´Ã´Ù"
-
-msgid "attempt to refer to deleted buffer"
-msgstr "Ãö¿öÃø Â¹Ã¶Ã†Ã›Â¸Â¦ Ã‚üöÇ÷ðí Ã‡Ã¿´½À´Ã´Ù"
-
-msgid "line number out of range"
-msgstr "Ã٠¹øÈ£°¡ Â¹Ã¼Ã€Â§Â¸Â¦ Â¹Ã¾Â¾Ã®Â³ÂµÂ½Ã€Â´Ã´Ù"
-
 #, c-format
 msgid "<buffer object (deleted) at %p>"
 msgstr "<%p¿¡ Â¹Ã¶Ã†Ã› Â°Â´ÃƒÂ¼ (ȏæµÊ)>"
 
-msgid "invalid mark name"
-msgstr "À߸øµÈ Â¸Â¶Ã…© Ã€ÃŒÂ¸Â§"
-
-msgid "no such buffer"
-msgstr "±×·± Â¹Ã¶Ã†Ã›Â´Ã‚ Â¾Ã¸Â½Ã€Â´Ã´Ù"
-
-msgid "attempt to refer to deleted window"
-msgstr "Ãö¿öÃø ÃƒÂ¢Ã€Â» Ã‚üöÇ÷ðí Ã‡Ã¿´½À´Ã´Ù"
-
-msgid "readonly attribute"
-msgstr "Àñâ Ã€Ã¼Â¿Ã« Â¼Ã“¼º"
-
-msgid "cursor position outside buffer"
-msgstr "ÆÛ¼­ Ã€Â§Ã„¡°¡ Â¹Ã¶Ã†Ã› Â¹Ã›Â¿Â¡ Ã€Ã–½À´Ã´Ù"
-
-#, c-format
-msgid "<window object (deleted) at %p>"
-msgstr "<%p¿¡ ÃƒÂ¢ Â°Â´ÃƒÂ¼ (ȏæµÊ)>"
-
-#, c-format
-msgid "<window object (unknown) at %p>"
-msgstr "<%p¿¡ ÃƒÂ¢ Â°Â´ÃƒÂ¼ (¸ð¸§)>"
-
-#, c-format
-msgid "<window %d>"
-msgstr "<â %d>"
-
-msgid "no such window"
-msgstr "±×·± ÃƒÂ¢Ã€Âº Â¾Ã¸Â½Ã€Â´Ã´Ù"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Ã€ÃŒ Vim˼ :pythonÀ» Â»Ã§Â¿Ã«Ã‡Ã‘ ÃˆÃ„¿¡ :py3À» Â»Ã§Â¿Ã«Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
 #~ msgid "E265: $_ must be an instance of String"
 #~ msgstr ""
@@ -2735,6 +2715,9 @@ msgstr "
 msgid "cannot set line(s)"
 msgstr "ÃÙÀ» Â¼Â³Ã¤ÇҠ¼ö Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
+msgid "invalid mark name"
+msgstr "À߸øµÈ Â¸Â¶Ã…© Ã€ÃŒÂ¸Â§"
+
 msgid "mark not set"
 msgstr "¸¶Å©°¡ Â¼Â³Ã¤µÇÃö Â¾ÃŠÂ¾Ã’½À´Ã´Ù"
 
@@ -2745,6 +2728,9 @@ msgstr "
 msgid "cannot insert/append line"
 msgstr "ÃÙÀ» Â³Â¢Â¿Ã¶Â³Ã–°Å³ª Â´ÃµÃ‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
+msgid "line number out of range"
+msgstr "Ã٠¹øÈ£°¡ Â¹Ã¼Ã€Â§Â¸Â¦ Â¹Ã¾Â¾Ã®Â³ÂµÂ½Ã€Â´Ã´Ù"
+
 msgid "unknown flag: "
 msgstr "¸ð¸£´Â Ã‡ÃƒÂ·Â¡Â±Ã—: "
 
@@ -2829,11 +2815,14 @@ msgstr "
 msgid "%d files to edit\n"
 msgstr "%d Ã†Ã„ÀÃÀ» Â°Ã­Ã„¡±â\n"
 
+msgid "netbeans is not supported with this GUI\n"
+msgstr "ÀÌ GUI´Â netbeans¸¦ Ãö¿øÇÃÃö Â¾ÃŠÂ½Ã€Â´Ã´Ù\n"
+
 msgid "This Vim was not compiled with the diff feature."
 msgstr "À̠ºöÀº diff Â±Ã¢Â´Ã‰ Â¾Ã¸Ã€ÃŒ Ã„ÄÆÄÀàµÇ¾ú½À´Ã´Ù."
 
 msgid "'-nb' cannot be used: not enabled at compile time\n"
-msgstr "'-nb'´Â Â»Ã§Â¿Ã«Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Â¿: Ã„ÄÆÄÀÃÇҠ¶§ Ã†Ã·Ã‡Ã”µÇÃö Â¾ÃŠÃ€Â½\n"
+msgstr "'-nb'´Â Â»Ã§Â¿Ã«Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Ã€Â½: Ã„ÄÆÄÀÃÇҠ¶§ Ã†Ã·Ã‡Ã”µÇÃö Â¾ÃŠÃ€Â½\n"
 
 msgid "Attempt to open script file again: \""
 msgstr "½ºÅ©¸³Æ® Ã†Ã„ÀÃÀ» Â´Ã™Â½Ãƒ Â¿Â­Â·Ã°í Â½ÃƒÂµÂµ: \""
@@ -3074,7 +3063,8 @@ msgstr "--remote-wait-silent <files>  
 msgid ""
 "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
 msgstr ""
-"--remote-tab[-wait][-silent] <files>  --remote¿à°°Ãö¸¸ Ã†Ã„Àú°·Î Ã…ǠÆäÀÌÃö Â»Ã§Â¿Ã«"
+"--remote-tab[-wait][-silent] <files>  --remote¿à°°Ãö¸¸ Ã†Ã„Àú°·Î Ã…ǠÆäÀÌÃö Â»Ã§"
+"¿ë"
 
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <keys>\tºö Â¼Â­Â¹Ã¶Â·ÃŽ <keys>¸¦ ÂºÂ¸Â³Â»Â°Ã­ Â³Â¡Â³Â»Â±Ã¢"
@@ -3127,12 +3117,6 @@ msgstr "-display <display>\t
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\t¾ÆÀÌÄܠ»óŷΠºö Â½ÃƒÃ€Ã›"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <name>\t\tºöÀÌ <name>ÀΠ°Ã󷳠¸®¼Ò½º Â»Ã§Â¿Ã«"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (±¸ÇöµÇÃö Â¾ÃŠÃ€Â½)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <color>\t¹ÙÅà»öÀ¸·Î <color> Â»Ã§Â¿Ã« (also: -bg)"
 
@@ -3254,7 +3238,6 @@ msgstr ""
 #~ "change line  col text"
 #~ msgstr ""
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3263,7 +3246,6 @@ msgstr ""
 "# Ã†Ã„Àึũ:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3271,7 +3253,6 @@ msgstr ""
 "\n"
 "# Ã¡Çøñ·à(»õ°ÃÀ̠¸ÕÀú):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3303,15 +3284,6 @@ msgstr "E288: 
 msgid "E289: input method doesn't support my preedit type"
 msgstr "E289: Ã€Ã”·Â Â¹Ã¦Â½Ã„À̠³» preedit Ã‡Ã¼Â½Ã„À» Ãö¿øÇÃÃö Â¾ÃŠÂ½Ã€Â´Ã´Ù"
 
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: over-the-spot Ã‡Ã¼Â½Ã„˼ fontsetÀ̠»ç¿ëµÇ¾î¾ß Ã‡Ã•Â´Ã´Ù"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr "E291: GTK+°¡ 1.2.3 Ã€ÃŒÃ€Ã¼ Ã†Ã‡Ã€Ã”´Ã´Ù. Â»Ã³Ã… ¿µ¿ªÀ» Â»Ã§Â¿Ã«Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: Ã€Ã”·Â Â¼Â­Â¹Ã¶Â°Â¡ Â½Ã‡Ã‡Ã ÂµÃ‡Ãö Â¾ÃŠÂ°Ã­ Ã€Ã–½À´Ã´Ù"
-
 msgid "E293: block was not locked"
 msgstr "E293: Â±Â¸Â¿ÂªÃ€ÃŒ Ã€Ã¡Â±Ã…ÃöÃö Â¾ÃŠÂ¾Ã’½À´Ã´Ù"
 
@@ -3339,6 +3311,9 @@ msgstr "E298: 
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Â±Â¸Â¿Âª Â¹Ã¸ÃˆÂ£ 2¸¦ Â¾Ã²Ãö Â¸Ã¸Ã‡ÃŸÂ³ÂªÂ¿Ã¤?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Â½ÂºÂ¿Ã’ Ã†Ã„ÀÃÀ» Â¾ÃȣȭÇҠ¼ö Â¾Ã¸Â½Ã€Â´Ã´Ù"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ã€Â¸Ã€Â¹, Â½ÂºÂ¿Ã’ Ã†Ã„ÀÃÀ» Ã€Ã’¾î¹ö·È½À´Ã´Ù!!!"
@@ -3395,6 +3370,12 @@ msgstr " 
 #~ "or the file has been damaged."
 #~ msgstr ""
 
+#, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr ""
+"E833: %sÀÌ(°¡) Â¾ÃȣȭµÇ¾î Ã€Ã–´Â ÂµÂ¥, Ã€ÃŒ Vim˼ Â¾Ãȣȭ¸¦ Ãö¿øÇÃÃö Â¾ÃŠÂ½Ã€Â´Ã´Ù"
+
 #~ msgid " has been damaged (page size is smaller than minimum value).\n"
 #~ msgstr ""
 
@@ -3410,6 +3391,38 @@ msgid "E308: Warning: Original file may have been changed"
 msgstr "E308: Â°Ã¦Â°Ã­: Â¿Ã¸Â·Â¡ Ã†Ã„ÀÃÀ̠¹Ù²î¾ú½À´ôÙ"
 
 #, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "½º¿Ò Ã†Ã„ÀÃÀ̠¾ÃȣȭµÊ: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"»õ·Î¿î Â¾ÃÈ£ Ã…°¸¦ Ã€Ã”·ÂÇߴ µ¥, Ã†Ã„ÀÃÀ» Ã€ÃºÃ€Ã¥Ã‡ÃÃö Â¾ÃŠÂ¾Ã’¾ú´Ù¸é,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"»õ·Î¿î Â¾ÃÈ£ Ã…°¸¦ Ã€Ã”·ÂÇü¼¿ä."
+
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"¾ÃÈ£ Ã…°¸¦ Â¹Ã™Â²Ã› ÃˆÃ„¿¡ Ã†Ã„ÀÃÀ» Ã€ÃºÃ€Ã¥Ã‡ÃŸÂ¾ÃºÂ´Ã™Â¸Ã© Â°Â°Ã€Âº Ã…°·Î Ã…ؽºÆ® Ã†Ã„Àðú"
+
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"½º¿ÒÆÄÀÃÀ» Ã€ÃºÃ€Ã¥Ã‡Ã·Ã¸é Â¿Â£Ã…ø¦ Â´Â©Â¸Â£Â¼Â¼Â¿Ã¤"
+
+#, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309: %sÀǠ±¸¿ª 1À» Ã€ÃÀ» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
@@ -3461,16 +3474,24 @@ msgstr ""
 "\n"
 "(¾î¼¸é Â´Ã™Â¸Â¥ Ã€ÃŒÂ¸Â§Ã€Â¸Â·ÃŽ Ã€ÃºÃ€Ã¥Ã‡Ã°í Â½ÃÀ¸½Ç Ãöµµ Â¸Ã°Â¸Â£Â°ÃšÂ½Ã€Â´Ã´Ù\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "±×¸®°í Â¹Ã™Â²Ã¯ Â³Â»Â¿Ã«Ã€Â» ÃˆÂ®Ã€ÃŽÃ‡Ã·Ã¸é diff¸¦ Ã€ÃŒÂ¿Ã«Ã‡Ã½Ê½Ã¿À)\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "±×¸®°í Â¹Ã™Â²Ã¯ Â³Â»Â¿Ã«Ã€Â» ÃˆÂ®Ã€ÃŽÃ‡Ã·Ã¸é Â¿Ã¸Â·Â¡ Ã†Ã„Àÿ¡ Â´Ã«Ã‡Ã˜ diff¸¦ Â½Ã‡Ã‡Ã Ã‡Ã¼¼¿ä)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "º¹±¸°¡ Â³Â¡Â³ÂµÂ½Ã€Â´Ã´Ù. Â¹Ã¶Ã†Ã›Ã€Ã‡ Â³Â»Â¿Ã«Ã€ÃŒ Ã†Ã„Àà³»¿ë°ú Â°Â°Â½Ã€Â´Ã´Ù."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"³ªÃß¿¡ .swp Ã†Ã„ÀÃÀ» Ãö¿ì½Ê½Ã¿À.\n"
+"\n"
+"ÀÌæ .swp Ã†Ã„ÀÃÀ» Ãö¿ì¼Åµµ ÂµÃ‹Â´Ã´Ù.\n"
 "\n"
 
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "ÅؽºÆ® Ã†Ã„Àÿ¡ Â½ÂºÂ¿Ã’ÆÄÀÿ¡¼­ Â°Â¡Ã®¿Â Â¾ÃÈ£ Ã…°¸¦ Â»Ã§Â¿Ã«Ã‡Ã•Â´Ã´Ù.\n"
+
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
 msgstr "½º¿Ò Ã†Ã„ÀÃÀ» ÃƒÂ£Â¾Ã’À½:"
@@ -3677,10 +3698,12 @@ msgstr ""
 msgid "    If you did this already, delete the swap file \""
 msgstr "    Ã€ÃŒÂ¹ÃŒ ÂºÂ¹Â±Â¸Ã‡Ã¼Ì¾ú´Ù¸é Â½ÂºÂ¿Ã’ÆÄÀà\""
 
-#~ msgid ""
-#~ "\"\n"
-#~ "    to avoid this message.\n"
-#~ msgstr ""
+msgid ""
+"\"\n"
+"    to avoid this message.\n"
+msgstr ""
+"\"\n"
+"    Ã€Â»(¸¦) Ãö¿ì¼Å¾ß Ã€ÃŒ Â¸ÃžÂ½ÃƒÃö°¡ Â»Ã§Â¶Ã³Ãý´Ã´Ù.\n"
 
 msgid "Swap file \""
 msgstr "½º¿Ò Ã†Ã„Àà\""
@@ -3889,7 +3912,6 @@ msgstr "
 msgid "Vim: Finished.\n"
 msgstr "ºö: Â²Ã¸Â³ÂµÂ½Ã€Â´Ã´Ù.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "¿¡·¯: "
 
@@ -3985,8 +4007,14 @@ msgstr "Netbeans 
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Â¹Ã¶Ã†Ã› %ld¿¡ Â´Ã«Ã‡Ã‘ NetBeans Â¿Â¬Â°Ã¡Ã€Â» Ã€Ã’¾î¹ö·È½À´Ã´Ù"
 
-#~ msgid "E505: "
-#~ msgstr ""
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: Ã€ÃŒ GUI´Â netbeans¸¦ Ãö¿øÇÃÃö Â¾ÃŠÂ½Ã€Â´Ã´Ù"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: netbeans°¡ Ã€ÃŒÂ¹ÃŒ Â¿Â¬Â°Ã¡ÂµÃ‡Â¾Ã® Ã€Ã–½À´Ã´Ù"
+
+msgid "E505: "
+msgstr "E505: "
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: Ã„¿¼­ Â¹Ã˜Â¿Â¡ Â½Ã„º°ÀÚ°¡ Â¾Ã¸Â½Ã€Â´Ã´Ù"
@@ -4092,7 +4120,6 @@ msgstr ""
 msgid "Illegal register name"
 msgstr "ÀÌ»óÇѠ·¹Ãö½ºÅàÀ̸§"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -4117,8 +4144,8 @@ msgid ""
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
 msgstr ""
-"Selected %s%ld of %ld Â¶Ã³Ã€ÃŽ; %ld of %ld Â´ÃœÂ¾Ã®; %ld of %ld Â¹Â®Ã€Ãš; %ld of %ld "
-"¹ÙÀÌƮ"
+"Selected %s%ld of %ld Â¶Ã³Ã€ÃŽ; %ld of %ld Â´ÃœÂ¾Ã®; %ld of %ld Â¹Â®Ã€Ãš; %ld of %ld Â¹Ã™Ã€ÃŒ"
+"Æ®"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
@@ -4129,8 +4156,8 @@ msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Col %s of %s; Â¶Ã³Ã€ÃŽ %ld of %ld; Â´ÃœÂ¾Ã® %ld of %ld; Â¹Â®Ã€Ãš %ld of %ld; Â¹Ã™Ã€ÃŒÃ†Â® %ld of "
-"%ld"
+"Col %s of %s; Â¶Ã³Ã€ÃŽ %ld of %ld; Â´ÃœÂ¾Ã® %ld of %ld; Â¹Â®Ã€Ãš %ld of %ld; Â¹Ã™Ã€ÃŒÃ†Â® %ld "
+"of %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4173,6 +4200,12 @@ msgstr "E531: GUI
 msgid "E589: 'backupext' and 'patchmode' are equal"
 msgstr "E589: 'backupext'¿à'patchmode'°¡ ÂµÂ¿Ã€ÃÇմôÙ"
 
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: 'listchars' Â°ÂªÂ°Ãº ÃƒÃ¦ÂµÂ¹Ã€ÃŒ Â¹ÃŸÂ»Ã½Ã‡Ã•Â´Ã´Ù"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: 'fillchars' Â°ÂªÂ°Ãº ÃƒÃ¦ÂµÂ¹Ã€ÃŒ Â¹ÃŸÂ»Ã½Ã‡Ã•Â´Ã´Ù"
+
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: GTK+ 2 GUI¿¡¼­´Â Â¹Ã™Â²Ã° Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
@@ -4378,9 +4411,6 @@ msgstr "E244: 
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Ã€ÃŸÂ¸Ã¸ÂµÃˆ Â±Ã›Ã€Ãš '%c'ÀÌ(°¡) Â±Ã›Â²Ãƒ Ã€ÃŒÂ¸Â§ \"%s\"¿¡ Ã€Ã–½À´Ã´Ù"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ã€ÃŸÂ¸Ã¸ÂµÃˆ 'osfiletype' Â¿Ã‰Â¼Ã‡ - Text¸¦ Â»Ã§Â¿Ã«Ã‡Ã•Â´Ã´Ù"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "ºö: Â°Â°Ã€Âº Â½ÃƒÂ±Ã—³Î ÂµÃŽ Â¹Ã¸, Â³Â¡Â³Ã€Â´Ã´Ù\n"
 
@@ -4584,6 +4614,9 @@ msgstr "error list %d of %d; %d errors"
 msgid "E382: Cannot write, 'buftype' option is set"
 msgstr "E382: Â¾Âµ Â¼Ã¶ Â¾Ã¸Ã€Â½, 'buftype' Â¿Ã‰Â¼Ã‡Ã€ÃŒ Â¼Â³Ã¤µÇ¾î Ã€Ã–½À´Ã´Ù"
 
+msgid "Error file"
+msgstr "¿¡·¯ Ã†Ã„ÀÃ"
+
 msgid "E683: File name missing or invalid pattern"
 msgstr "E683: Ã†Ã„Àøí Â´Â©Â¶Ã´ ÃˆÂ¤Ã€Âº Ã€ÃŸÂ¸Ã¸ÂµÃˆ Ã†ÃÃ…Ã"
 
@@ -4839,6 +4872,10 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: Â¸Ã‚Ãã¹ý Â°Ã‹Â»Ã§Â°Â¡ ÃˆÂ°Â¼ÂºÃˆÂ­ÂµÃ‡Â¾Ã® Ã€Ã–Ãö Â¾ÃŠÂ½Ã€Â´Ã´Ù"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "°æ°í: Â´ÃœÂ¾Ã® Â¸Ã±Â·Ã \"%s_%s.spl\" ÃˆÂ¤Ã€Âº \"%s_ascii.spl\"À» ÃƒÂ£Ã€Â» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr "°æ°í: Â´ÃœÂ¾Ã® Â¸Ã±Â·Ã \"%s.%s.spl\" ÃˆÂ¤Ã€Âº \"%s.ascii.spl\"À» ÃƒÂ£Ã€Â» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
@@ -5062,6 +5099,9 @@ msgstr "%s 
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "¾Æ½ºÅ° Â¹Â®Ã€ÃšÂ¿Â­Ã€ÃŒ Â¾Ã†Â´Ã‘ %d°³ÀǠ´Ü¾î°¡ Â¹Â«Â½ÃƒÂµÃ‡Â¾ÃºÂ½Ã€Â´Ã´Ù"
 
+#~ msgid "E845: Insufficient memory, word list will be incomplete"
+#~ msgstr ""
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "%d/%d Â³Ã«ÂµÃ¥Â°Â¡ Â¾ÃÃàµÊ; %d (%d%%)°¡ Â³Â²Ã€Â½"
@@ -5149,7 +5189,7 @@ msgstr "E752: Ã¶
 
 #, c-format
 msgid "E753: Not found: %s"
-msgstr "E753: ÃƒÂ£Ã€Â» Â¼Ã¶ Â¾Ã¸Â½Â¿: %s"
+msgstr "E753: ÃƒÂ£Ã€Â» Â¼Ã¶ Â¾Ã¸Ã€Â½: %s"
 
 #, c-format
 msgid "E778: This does not look like a .sug file: %s"
@@ -5239,8 +5279,8 @@ msgstr " line breaks"
 msgid "E395: contains argument not accepted here"
 msgstr "E395: contains Ã€ÃŽÃ€ÃšÂ´Ã‚ Â¿Â©Â±Ã¢Â¿Â¡ Â¾Âµ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: containedin Ã€ÃŽÃ€ÃšÂ´Ã‚ Â¿Â©Â±Ã¢Â¿Â¡ Â¾Âµ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
+msgid "E844: invalid cchar value"
+msgstr "E844: Ã€ÃŸÂ¸Ã¸ÂµÃˆ cchar Â°Âª"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]here´Â Â¿Â©Â±Ã¢Â¿Â¡Â¼Â­ Â»Ã§Â¿Ã«ÂµÃ‰ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
@@ -5452,6 +5492,10 @@ msgstr "E434: 
 msgid "E435: Couldn't find tag, just guessing!"
 msgstr "E435: Ã…±׸¦ ÃƒÂ£Ã€Â» Â¼Ã¶ Â¾Ã¸Ãö¸¸ Ã€ÃŒÂ°Ã… Â°Â°Â½Ã€Â´Ã´Ù!"
 
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "Ãߺ¹µÈ Ã‡ÃŠÂµÃ¥ Â¸Ã­: %s"
+
 msgid "' not known. Available builtin terminals are:"
 msgstr "' not known. Available builtin terminals are:"
 
@@ -5491,10 +5535,84 @@ msgstr "
 msgid "Used CUT_BUFFER0 instead of empty selection"
 msgstr "ºó Â°Ã­Â¸Â£Â±Ã¢ Â´Ã«Â½Ã… CUT_BUFFER0À» Â»Ã§Â¿Ã«Ã‡ÃŸÂ½Ã€Â´Ã´Ù"
 
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: Ã٠°¹¼ö°¡ Â¸Ã°Â¸Â£Â´Ã‚ Â»Ã§Ã€ÃŒÂ¿Â¡ Â¹Ã™Â²Ã®Â¾ÃºÂ½Ã€Â´Ã´Ù"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "Ãë¼Ò ÂºÃ’°¡´É; Â¾Ã®Ã‚ᵍ Â°Ã¨Â¼Ã“ÇմôÙ"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: Â¾Â²Â±Ã¢ Ã€Â§Ã‡Ã˜ undoÀ» Â¿Â­ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: Â±ÃºÃø undo Ã†Ã„Àà(%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "'undodir'¿¡ Ã€Ã–´Â Â¾Ã®Â¶Â² ÂµÃ°Â·ÂºÃ…丮¿¡µµ undo Ã†Ã„ÀÃÀ» Â¾Âµ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "ÀÃÀ» Â¼Ã¶Â°Â¡ Â¾Ã¸Â¾Ã®Â¼Â­ undo Ã†Ã„Àÿ¡ ÂµÂ¤Â¾Ã®Â¾Âµ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "undo Ã†Ã„ÀÃÀ̠¾Æ´þ ÂµÂ¤Â¾Ã®Â¾Âµ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "undoÇҠ³»¿ëÀ̠¾ø¾î¼­ undo Ã†Ã„ÀàÀúÀåÀ» Â°Ã‡Â³ÃŠÂ¶Ã´Ã´Ù"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "undo Ã†Ã„Àྲ´Â Ãß: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: undo Ã†Ã„Àྲ±â Â¿Â¡Â·Â¯: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "¼ÒÀ¯ÀÚ°¡ Â´ÃžÂ¶Ã³Â¼Â­ undo Ã†Ã„ÀÃÀ» Ã€ÃÃö Â¾ÃŠÂ½Ã€Â´Ã´Ù: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "undo Ã†Ã„ÀàÀô Ãß: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: Ã€Ã±â Ã€Â§Ã‡Ã˜ undo Ã†Ã„ÀÃÀ» Â¿Â­ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: undo Ã†Ã„ÀÃÀ̠¾Æ´Õ´ôÙ: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: Â¾ÃȣȭµÇÃö Â¾ÃŠÃ€Âº Ã†Ã„ÀÃÀ̠¾ÃȣȭµÈ undo Ã†Ã„ÀÃÀ» Â°Â¡Ãö°í Ã€Ã–½À´Ã´Ù: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: Undo Ã†Ã„ÀÃÀ» Ã‡Ã˜ÂµÂ¶Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: Undo Ã†Ã„ÀÃÀ̠¾ÃȣȭµÇ¾ú½À´Ã´Ù: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: ÃˆÂ£ÃˆÂ¯ÂµÃ‡Ãö Â¾ÃŠÂ´Ã‚ undo Ã†Ã„ÀÃ: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "ÆÄÀà³»¿ëÀ̠¹Ù²î¾î¼­, undo Ã¤º¸¸¦ Â»Ã§Â¿Ã«Ã‡Ã’ Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "undo Ã†Ã„Àà%sÀ»(¸¦) Ã€Ã¾îµé¿´½À´Ã´Ù"
+
 msgid "Already at oldest change"
 msgstr "´õ Ã€ÃŒÂ»Ã³Ã€Ã‡ Â¼Ã¶Ã¤À̠¾ø¾ú½À´ôÙ"
 
@@ -5502,8 +5620,8 @@ msgid "Already at newest change"
 msgstr "´õ Ã€ÃŒÂ»Ã³Ã€Ã‡ Â¼Ã¶Ã¤Àº Â¾Ã¸Â¾ÃºÂ½Ã€Â´Ã´Ù"
 
 #, c-format
-msgid "Undo number %ld not found"
-msgstr "Ãë¼Ò Â¹Ã¸ÃˆÂ£ %ld¸¦ ÃƒÂ£Ã€Â» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Undo Â¹Ã¸ÃˆÂ£ %ld¸¦ ÃƒÂ£Ã€Â» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: Ã€ÃŸÂ¸Ã¸ÂµÃˆ Ã٠¹øÈ£"
@@ -5539,8 +5657,8 @@ msgstr "after"
 msgid "Nothing to undo"
 msgstr "Ãë¼ÒÇҠ°Ô Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
-msgid "number changes  time"
-msgstr "number changes  time"
+#~ msgid "number changes  when               saved"
+#~ msgstr ""
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5721,15 +5839,9 @@ msgstr "GUI 
 msgid "with GTK2-GNOME GUI."
 msgstr "GTK2-GNOME GUI."
 
-msgid "with GTK-GNOME GUI."
-msgstr "GTK-GNOME GUI."
-
 msgid "with GTK2 GUI."
 msgstr "GTK2 GUI."
 
-msgid "with GTK GUI."
-msgstr "GTK GUI."
-
 msgid "with X11-Motif GUI."
 msgstr "X11-Motif GUI."
 
@@ -5902,7 +6014,7 @@ msgid "E813: Cannot close autocmd window"
 msgstr "E813: autocmd ÃƒÂ¢Ã€Â» Â´ÃÀ» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
 msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E814: ÃƒÂ¢Ã€Â» Â´ÃÀ» Â¼Ã¶ Â¾Ã¸Â½Â¿, autocmd ÃƒÂ¢Â¸Â¸ Â³Â²Ã€Â½"
+msgstr "E814: ÃƒÂ¢Ã€Â» Â´ÃÀ» Â¼Ã¶ Â¾Ã¸Ã€Â½, autocmd ÃƒÂ¢Â¸Â¸ Â³Â²Ã€Â½"
 
 msgid "E445: Other window contains changes"
 msgstr "E445: Â´Ã™Â¸Â¥ ÃƒÂ¢Ã€ÃŒ Â¹Ã™Â²Ã®Â¾ÃºÂ½Ã€Â´Ã´Ù"
@@ -6142,7 +6254,7 @@ msgid "E485: Can't read file %s"
 msgstr "E485: %s Ã†Ã„ÀÃÀ» Ã€ÃÀ» Â¼Ã¶ Â¾Ã¸Â½Ã€Â´Ã´Ù"
 
 msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: Â¸Â¶Ãö¸·À¸·Î Â°Ã­Ã„£ ÂµÃš Ã€ÃºÃ€Ã¥ÂµÃ‡Ãö Â¾ÃŠÂ¾Ã’½À´Ã´Ù (µ¤¾î¾²·Ã¸é ! Â´ÃµÃ‡Ã±â)"
+msgstr "E37: Â¸Â¶Ãö¸·À¸·Î Â°Ã­Ã„£ ÂµÃš Ã€ÃºÃ€Ã¥ÂµÃ‡Ãö Â¾ÃŠÂ¾Ã’½À´Ã´Ù (¹«½ÃÇ÷øé ! Â´ÃµÃ‡Ã±â)"
 
 msgid "E38: Null argument"
 msgstr "E38: Â³ÃŽ Ã€ÃŽÃ€Ãš"
@@ -6177,7 +6289,7 @@ msgid "E42: No Errors"
 msgstr "E42: Â¿Â¡Â·Â¯ Â¾Ã¸Ã€Â½"
 
 msgid "E776: No location list"
-msgstr "E776: Ã€Â§Ã„¡ Â¸Ã±Â·Ã Â¾Ã¸Â½Â¿"
+msgstr "E776: Ã€Â§Ã„¡ Â¸Ã±Â·Ã Â¾Ã¸Ã€Â½"
 
 msgid "E43: Damaged match string"
 msgstr "E43: Â±ÃºÃø Â¸Ã‚´Â Â¹Â®Ã€ÃšÂ¿Â­"
@@ -6194,7 +6306,7 @@ msgstr "E46: 
 
 #, c-format
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: sandbox Â¾ÃˆÂ¿Â¡Â¼Â­Â´Ã‚ ÂºÂ¯Â¼Ã¶Â¸Â¦ Â¼Â³Ã¤ÇҠ¼ö Â¾Ã¸Â½Â¿: \"%s\""
+msgstr "E794: sandbox Â¾ÃˆÂ¿Â¡Â¼Â­Â´Ã‚ ÂºÂ¯Â¼Ã¶Â¸Â¦ Â¼Â³Ã¤ÇҠ¼ö Â¾Ã¸Ã€Â½: \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Â¿Â¡Â·Â¯Ã†Ã„ÀàÀô µµÃß¿¡ Â¿Â¡Â·Â¯"
@@ -6294,3 +6406,42 @@ msgstr "ó
 msgid "search hit BOTTOM, continuing at TOP"
 msgstr "³¡±îÃö ÃƒÂ£Â¾Ã’À½, ÃƒÂ³Ã€Â½ÂºÃŽÃ…à°è¼Ó"
 
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "\"%s\"¿¡ Â´Ã«Ã‡Ã‘ Â¾ÃÈ£ Ã…°°¡ Ã‡ÃŠÂ¿Ã¤Ã‡Ã•Â´Ã´Ù"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines()´Â Â¹Â®Ã€ÃšÂ¿Â­ Â¸Ã±Â·ÃÀ̠ÇÊ¿äÇÕ´ôÙ"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Ã†Ã„À̽ã: I/O Â°Â´ÃƒÂ¼ ÃƒÃŠÂ±Ã¢ÃˆÂ­Ãߠ¿¡·¯°¡ Â»Ã½Â°Ã¥Â½Ã€Â´Ã´Ù"
+
+msgid "no such buffer"
+msgstr "±×·± Â¹Ã¶Ã†Ã›Â´Ã‚ Â¾Ã¸Â½Ã€Â´Ã´Ù"
+
+msgid "attempt to refer to deleted window"
+msgstr "Ãö¿öÃø ÃƒÂ¢Ã€Â» Ã‚üöÇ÷ðí Ã‡Ã¿´½À´Ã´Ù"
+
+msgid "readonly attribute"
+msgstr "Àñâ Ã€Ã¼Â¿Ã« Â¼Ã“¼º"
+
+msgid "cursor position outside buffer"
+msgstr "ÆÛ¼­ Ã€Â§Ã„¡°¡ Â¹Ã¶Ã†Ã› Â¹Ã›Â¿Â¡ Ã€Ã–½À´Ã´Ù"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<%p¿¡ ÃƒÂ¢ Â°Â´ÃƒÂ¼ (ȏæµÊ)>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<%p¿¡ ÃƒÂ¢ Â°Â´ÃƒÂ¼ (¸ð¸§)>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<â %d>"
+
+msgid "no such window"
+msgstr "±×·± ÃƒÂ¢Ã€Âº Â¾Ã¸Â½Ã€Â´Ã´Ù"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "Ãö¿öÃø Â¹Ã¶Ã†Ã›Â¸Â¦ Ã‚üöÇ÷ðí Ã‡Ã¿´½À´Ã´Ù"
index 238bcc6..f6d4761 100644 (file)
@@ -2070,21 +2070,6 @@ msgid "&Undo"
 msgstr "&Angre"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Kan ikke laste Zap-skrifttype '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Kan ikke bruke skrifttype %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Sender beskjed om Ã¥ avslutte barneprosess.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Fant ikke vindutittel \"%s\""
 
@@ -4324,9 +4309,6 @@ msgstr "E244: Ulovlig navn p
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Ulovlig tegn '%c' i skrifttypenavn \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ugyldig 'osfiletype'-valg - bruker Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Dobbelt signal, avslutter\n"
 
diff --git a/src/po/nl.po b/src/po/nl.po
new file mode 100644 (file)
index 0000000..4750d4d
--- /dev/null
@@ -0,0 +1,5852 @@
+# Dutch Translation for Vim            vim:set foldmethod=marker:
+# Do ":help uganda"  in Vim to read copying and usage conditions.
+# Do ":help credits" in Vim to see a list of people who contributed.
+# Previous-Translator(s):
+# highlight: oplichten
+# Erwin Poeze <erwin.poeze@gmail.com>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: vim 7.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-29 07:43+0200\n"
+"PO-Revision-Date: 2012-03-28 08:07+0200\n"
+"Last-Translator: YOUR NAME <E-MAIL@ADDRESS>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.nl>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() uitgevoerd met leeg wachtwoord"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: gebruik Blowfish big/little endian is onjuist"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256 test mislukt"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Blowfish test mislukt"
+
+msgid "E82: Cannot allocate any buffer, exiting..."
+msgstr "E82: kan geen buffer aanmaken, beëindigen..."
+
+msgid "E83: Cannot allocate buffer, using other one..."
+msgstr "E83: kan geen buffer aanmaken, een andere wordt gebruikt..."
+
+msgid "E515: No buffers were unloaded"
+msgstr "E515: geen van de buffers is gelost"
+
+msgid "E516: No buffers were deleted"
+msgstr "E516: geen van de buffers is verwijderd"
+
+msgid "E517: No buffers were wiped out"
+msgstr "E517: geen van de buffers is gewist"
+
+msgid "1 buffer unloaded"
+msgstr "1 buffer gelost"
+
+#, c-format
+msgid "%d buffers unloaded"
+msgstr "%d buffers gelost"
+
+msgid "1 buffer deleted"
+msgstr "1 buffer verwijderd"
+
+#, c-format
+msgid "%d buffers deleted"
+msgstr "%d buffers verwijderd"
+
+msgid "1 buffer wiped out"
+msgstr "1 buffer gewist"
+
+#, c-format
+msgid "%d buffers wiped out"
+msgstr "%d buffers gewist"
+
+msgid "E84: No modified buffer found"
+msgstr "E84: geen aangepast buffer gevonden"
+
+#. back where we started, didn't find anything.
+msgid "E85: There is no listed buffer"
+msgstr "E85: er is geen vermelde buffer"
+
+#, c-format
+msgid "E86: Buffer %ld does not exist"
+msgstr "E86: Buffer %ld bestaat niet"
+
+msgid "E87: Cannot go beyond last buffer"
+msgstr "E87: kan niet voorbij het laatste buffer komen"
+
+msgid "E88: Cannot go before first buffer"
+msgstr "E88: kan niet vóór het eerste buffer komen"
+
+#, c-format
+msgid "E89: No write since last change for buffer %ld (add ! to override)"
+msgstr "E89: niets opgeslagen sinds laatste wijziging van buffer %ld (voeg ! toe om te forceren)"
+
+msgid "E90: Cannot unload last buffer"
+msgstr "E90: kan laatste buffer niet legen"
+
+msgid "W14: Warning: List of file names overflow"
+msgstr "W14: waarschuwing: lijst met bestandsnamen is vol"
+
+#, c-format
+msgid "E92: Buffer %ld not found"
+msgstr "E92: buffer %ld niet gevonden"
+
+#, c-format
+msgid "E93: More than one match for %s"
+msgstr "E93: %s meermaals gevonden"
+
+#, c-format
+msgid "E94: No matching buffer for %s"
+msgstr "E94: geen overeenkomstig buffer voor %s"
+
+#, c-format
+msgid "line %ld"
+msgstr "regel %ld"
+
+msgid "E95: Buffer with this name already exists"
+msgstr "E95: buffer met deze naam bestaat al"
+
+msgid " [Modified]"
+msgstr " [Gewijzigd]"
+
+msgid "[Not edited]"
+msgstr "[Niet bewerkt]"
+
+msgid "[New file]"
+msgstr "[Nieuw bestand]"
+
+msgid "[Read errors]"
+msgstr "[Leesfouten]"
+
+msgid "[readonly]"
+msgstr "[alleen-lezen]"
+
+#, c-format
+msgid "1 line --%d%%--"
+msgstr "1 regel --%d%%--"
+
+#, c-format
+msgid "%ld lines --%d%%--"
+msgstr "%ld regels --%d%%--"
+
+#, c-format
+msgid "line %ld of %ld --%d%%-- col "
+msgstr "regel %ld van %ld --%d%%-- kol "
+
+msgid "[No Name]"
+msgstr "[Geen naam]"
+
+#. must be a help buffer
+msgid "help"
+msgstr "hulp"
+
+msgid "[Help]"
+msgstr "[Hulp]"
+
+msgid "[Preview]"
+msgstr "[Voorvertoning]"
+
+msgid "All"
+msgstr "Alles"
+
+msgid "Bot"
+msgstr "Bodem"
+
+msgid "Top"
+msgstr "Top"
+
+#, c-format
+msgid ""
+"\n"
+"# Buffer list:\n"
+msgstr ""
+"\n"
+"# Bufferlijst:\n"
+
+msgid "[Location List]"
+msgstr "[Locatielijst]"
+
+msgid "[Quickfix list]"
+msgstr "[Quickfix-lijst]"
+
+msgid "[Scratch]"
+msgstr "[Klad]"
+
+msgid ""
+"\n"
+"--- Signs ---"
+msgstr ""
+"\n"
+"--- Tekens ---"
+
+#, c-format
+msgid "Signs for %s:"
+msgstr "Tekens voor %s:"
+
+#, c-format
+msgid "    line=%ld  id=%d  name=%s"
+msgstr "    regel=%ld  id=%d  naam=%s"
+
+#, c-format
+msgid "E96: Can not diff more than %ld buffers"
+msgstr "E96: kan niet meer dan %ld buffers vergelijken"
+
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: kan tijdelijke bestand niet lezen of opslaan"
+
+msgid "E97: Cannot create diffs"
+msgstr "E97: kan geen verschillen genereren"
+
+msgid "Patch file"
+msgstr "Patch-bestand"
+
+msgid "E816: Cannot read patch output"
+msgstr "E816: kan patch-uitvoer niet lezen"
+
+msgid "E98: Cannot read diff output"
+msgstr "E98: kan diff-uitvoer niet lezen"
+
+msgid "E99: Current buffer is not in diff mode"
+msgstr "E99: huidige buffer is niet in diff-modus"
+
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: geen ander buffer in diff-modus is bewerkbaar"
+
+msgid "E100: No other buffer in diff mode"
+msgstr "E100: geen ander buffer in diff-modus"
+
+msgid "E101: More than two buffers in diff mode, don't know which one to use"
+msgstr "E101: meer dan twee buffers in diff-modus, weet niet welke gebruikt moet worden"
+
+#, c-format
+msgid "E102: Can't find buffer \"%s\""
+msgstr "E102: kan buffer \"%s\" niet vinden"
+
+#, c-format
+msgid "E103: Buffer \"%s\" is not in diff mode"
+msgstr "E103: buffer \"%s\" is niet in diff-modus"
+
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: buffer is onverwacht gewijzigd"
+
+msgid "E104: Escape not allowed in digraph"
+msgstr "E104: Escape in digraph niet toegestaan"
+
+msgid "E544: Keymap file not found"
+msgstr "E544: bestand met toetsbindingen niet gevonden"
+
+msgid "E105: Using :loadkeymap not in a sourced file"
+msgstr "E105: Gebruik van :loadkeymap niet in een 'sourced' bestand"
+
+msgid "E791: Empty keymap entry"
+msgstr "E791: toetsbinding leeg"
+
+msgid " Keyword completion (^N^P)"
+msgstr " trefwoordvoltooiing (^N^P)"
+
+#. ctrl_x_mode == 0, ^P/^N compl.
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " ^X-modus (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+
+msgid " Whole line completion (^L^N^P)"
+msgstr " gehele-regelvoltooiing (^L^N^P)"
+
+msgid " File name completion (^F^N^P)"
+msgstr " bestandsnaamvoltooiing (^F^N^P)"
+
+msgid " Tag completion (^]^N^P)"
+msgstr " tag-voltooiing (^]^N^P)"
+
+msgid " Path pattern completion (^N^P)"
+msgstr " Padpatroonvoltooiing (^N^P)"
+
+msgid " Definition completion (^D^N^P)"
+msgstr " definitievoltooiiing (^D^N^P)"
+
+msgid " Dictionary completion (^K^N^P)"
+msgstr " Dictionaryvoltooiing (^K^N^P)"
+
+msgid " Thesaurus completion (^T^N^P)"
+msgstr " Thesaurusvoltooiing (^T^N^P)"
+
+msgid " Command-line completion (^V^N^P)"
+msgstr " opdrachtregelvoltooiing (^V^N^P)"
+
+msgid " User defined completion (^U^N^P)"
+msgstr " gebruikergedefinieerde voltooiing (^U^N^P)"
+
+msgid " Omni completion (^O^N^P)"
+msgstr " omni-voltooiing (^O^N^P)"
+
+msgid " Spelling suggestion (s^N^P)"
+msgstr " spellingsuggestie (s^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " lokaal-trefwoordvoltooiing (^N^P)"
+
+msgid "Hit end of paragraph"
+msgstr "Einde van paragraaf"
+
+msgid "'dictionary' option is empty"
+msgstr "'Dictionary'-optie is leeg"
+
+msgid "'thesaurus' option is empty"
+msgstr "'thesaurus'-optie is leeg"
+
+#, c-format
+msgid "Scanning dictionary: %s"
+msgstr "Doorzoeken Dictionary: %s"
+
+msgid " (insert) Scroll (^E/^Y)"
+msgstr " (invoegen) scroll (^E/^Y)"
+
+msgid " (replace) Scroll (^E/^Y)"
+msgstr " (vervangen) scroll (^E/^Y)"
+
+#, c-format
+msgid "Scanning: %s"
+msgstr "doorzoeken: %s"
+
+msgid "Scanning tags."
+msgstr "Doorzoeken tags."
+
+msgid " Adding"
+msgstr " toevoegen"
+
+#. showmode might reset the internal line pointers, so it must
+#. * be called before line = ml_get(), or when this address is no
+#. * longer needed.  -- Acevedo.
+#.
+msgid "-- Searching..."
+msgstr "-- doorzoeken..."
+
+msgid "Back at original"
+msgstr "Terug naar origineel"
+
+msgid "Word from other line"
+msgstr "Woord uit andere regel"
+
+msgid "The only match"
+msgstr "Het enige resultaat"
+
+#, c-format
+msgid "match %d of %d"
+msgstr "resultaat %d van %d"
+
+#, c-format
+msgid "match %d"
+msgstr "resultaat %d"
+
+msgid "E18: Unexpected characters in :let"
+msgstr "E18: onverwachte tekens in :let"
+
+#, c-format
+msgid "E684: list index out of range: %ld"
+msgstr "E684: lijstindex buiten bereik: %ld"
+
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121: ongedefinieerde variabele: %s"
+
+msgid "E111: Missing ']'"
+msgstr "E111: ontbrekende ']'"
+
+#, c-format
+msgid "E686: Argument of %s must be a List"
+msgstr "E686: argument van %s moet een List zijn"
+
+#, c-format
+msgid "E712: Argument of %s must be a List or Dictionary"
+msgstr "E712: argument van %s moet een List of Dictionary zijn"
+
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: kan geen leeg trefwoord als Dictionary gebruiken"
+
+msgid "E714: List required"
+msgstr "E714: List is vereist"
+
+msgid "E715: Dictionary required"
+msgstr "E715: Dictionary is vereist"
+
+#, c-format
+msgid "E118: Too many arguments for function: %s"
+msgstr "E118: te veel argumenten voor functie: %s"
+
+#, c-format
+msgid "E716: Key not present in Dictionary: %s"
+msgstr "E716: trefwoord niet aangetroffen in Dictionary: %s"
+
+#, c-format
+msgid "E122: Function %s already exists, add ! to replace it"
+msgstr "E122: function %s bestaat reeds, voeg ! toe om te vervangen"
+
+msgid "E717: Dictionary entry already exists"
+msgstr "E717: woord bestaat al in Dictionary"
+
+msgid "E718: Funcref required"
+msgstr "E718: Funcref is vereist"
+
+msgid "E719: Cannot use [:] with a Dictionary"
+msgstr "E719: kan [:] niet met een Dictionary gebruiken"
+
+#, c-format
+msgid "E734: Wrong variable type for %s="
+msgstr "E734: onjuist type variabele voor %s="
+
+#, c-format
+msgid "E130: Unknown function: %s"
+msgstr "E130: onbekende functie: %s"
+
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461: ongeldige variabelenaam: %s"
+
+msgid "E687: Less targets than List items"
+msgstr "E687: minder doelen dan Listitems"
+
+msgid "E688: More targets than List items"
+msgstr "E688: meer doelen dan Listitems"
+
+msgid "Double ; in list of variables"
+msgstr "Dubbele ; in variabelenlijst"
+
+#, c-format
+msgid "E738: Can't list variables for %s"
+msgstr "E738: kan variabelen voor %s niet tonen"
+
+msgid "E689: Can only index a List or Dictionary"
+msgstr "E689: alleen een List of Dictionary kan geïndexeerd worden"
+
+msgid "E708: [:] must come last"
+msgstr "E708: [:] moet als laatste staan"
+
+msgid "E709: [:] requires a List value"
+msgstr "E709: [:] vereist een Listwaarde"
+
+msgid "E710: List value has more items than target"
+msgstr "E710: Listwaarde heeft meer  value has more items than target"
+
+msgid "E711: List value has not enough items"
+msgstr "E711: Listwaarde heeft onvoldoende items"
+
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690: \"in\" ontbreekt na :for"
+
+#, c-format
+msgid "E107: Missing parentheses: %s"
+msgstr "E107: ontbrekende haakjes: %s"
+
+#, c-format
+msgid "E108: No such variable: \"%s\""
+msgstr "E108: onbekende variabele: \"%s\""
+
+msgid "E743: variable nested too deep for (un)lock"
+msgstr "E743: variabele is te diep genest om te beveiligen"
+
+msgid "E109: Missing ':' after '?'"
+msgstr "E109: ':' ontbreekt na '?'"
+
+msgid "E691: Can only compare List with List"
+msgstr "E691: List kan alleen met een Lijst worden vergeleken"
+
+msgid "E692: Invalid operation for Lists"
+msgstr "E692: ongeldige bewerking voor Listen"
+
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735: Dictionary kan alleen met Woordenboek worden vergeleken"
+
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736: ongeldige bewerking voor Dictionary"
+
+msgid "E693: Can only compare Funcref with Funcref"
+msgstr "E693: Funcref kan alleen met Funcref worden vergeleken"
+
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694: ongeldige bewerking voor Funcrefs"
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: '%' kan niet met Float worden gebruikt"
+
+msgid "E110: Missing ')'"
+msgstr "E110: ')' ontbreekt"
+
+msgid "E695: Cannot index a Funcref"
+msgstr "E695: een Funcref kan niet geïndexeerd worden"
+
+#, c-format
+msgid "E112: Option name missing: %s"
+msgstr "E112: optienaam ontbreekt: %s"
+
+#, c-format
+msgid "E113: Unknown option: %s"
+msgstr "E113: onbekende optie: %s"
+
+#, c-format
+msgid "E114: Missing quote: %s"
+msgstr "E114: ontbrekend aanhaalteken: %s"
+
+#, c-format
+msgid "E115: Missing quote: %s"
+msgstr "E115: ontbrekend aanhaalteken: %s"
+
+#, c-format
+msgid "E696: Missing comma in List: %s"
+msgstr "E696: komma ontbreekt in List: %s"
+
+#, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697: einde van List ']' ontbreekt: %s"
+
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720: dubbelepunt in Dictionary ontbreekt: %s"
+
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: dubbele sleutel in Dictionary: \"%s\""
+
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722: komma ontbreekt in Dictionary: %s"
+
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723: einde van Dictionary '}' ontbreekt: %s"
+
+msgid "E724: variable nested too deep for displaying"
+msgstr "E724: variabele is te diep genest om te tonen"
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: teveel argumenten voor functie %s"
+
+#, c-format
+msgid "E116: Invalid arguments for function %s"
+msgstr "E116: ongeldige argumenten voor functie %s"
+
+#, c-format
+msgid "E117: Unknown function: %s"
+msgstr "E117: onbekende functie: %s"
+
+#, c-format
+msgid "E119: Not enough arguments for function: %s"
+msgstr "E119: onvoldoende argumenten voor functie: %s"
+
+#, c-format
+msgid "E120: Using <SID> not in a script context: %s"
+msgstr "E120: gebruik van <SID> buiten een scriptcontext: %s"
+
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: dict-functie aanroep zonder Dictionary: %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808: Number of Float vereist"
+
+msgid "E699: Too many arguments"
+msgstr "E699:teveel argumenten"
+
+msgid "E785: complete() can only be used in Insert mode"
+msgstr "E785: complete() kan alleen in Invoegmodus worden gebruikt"
+
+#.
+#. * Yes this is ugly, I don't particularly like it either.  But doing it
+#. * this way has the compelling advantage that translations need not to
+#. * be touched at all.  See below what 'ok' and 'ync' are used for.
+#.
+msgid "&Ok"
+msgstr "&Ok"
+
+#, c-format
+msgid "E737: Key already exists: %s"
+msgstr "E737: sleutel bestaat al: %s"
+
+#, c-format
+msgid "+-%s%3ld lines: "
+msgstr "+-%s%3ld regels: "
+
+#, c-format
+msgid "E700: Unknown function: %s"
+msgstr "E700: onbekende functie: %s"
+
+msgid ""
+"&OK\n"
+"&Cancel"
+msgstr ""
+"&OK\n"
+"&Annuleren"
+
+msgid "called inputrestore() more often than inputsave()"
+msgstr "inputrestore() vaker aangeroepen dan inputsave()"
+
+msgid "E786: Range not allowed"
+msgstr "E786: bereik niet toegestaan"
+
+msgid "E701: Invalid type for len()"
+msgstr "E701: ongeldig type voor len()"
+
+msgid "E726: Stride is zero"
+msgstr "E726: stap is nul"
+
+msgid "E727: Start past end"
+msgstr "E727: start na einde"
+
+msgid "<empty>"
+msgstr "<leeg>"
+
+msgid "E240: No connection to Vim server"
+msgstr "E240: geen verbinding met Vim-server"
+
+#, c-format
+msgid "E241: Unable to send to %s"
+msgstr "E241: verzenden naar %s onmogelijk"
+
+msgid "E277: Unable to read a server reply"
+msgstr "E277: lezen van serverantwoord onmogelijk"
+
+msgid "E655: Too many symbolic links (cycle?)"
+msgstr "E655: teveel symbolische koppelingen (oneindige lus?)"
+
+msgid "E258: Unable to send to client"
+msgstr "E258: verzenden nar client onmogelijk"
+
+msgid "E702: Sort compare function failed"
+msgstr "E702: sorteer-vergelijkfunctie mislukt"
+
+msgid "(Invalid)"
+msgstr "(ongeldig)"
+
+msgid "E677: Error writing temp file"
+msgstr "E677: opslaan van temp-bestand is mislukt"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: een Float wordt als Number gebruikt"
+
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703: een Funcref wordt als Number gebruikt"
+
+msgid "E745: Using a List as a Number"
+msgstr "E745: List wordt als een Number gebruikt"
+
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728: Dictionary gebruiken als een Number"
+
+msgid "E729: using Funcref as a String"
+msgstr "E729: Funcref gebruiken als een String"
+
+msgid "E730: using List as a String"
+msgstr "E730: List gebruiken als een String"
+
+msgid "E731: using Dictionary as a String"
+msgstr "E731: Dictionary gebruiken als een String"
+
+msgid "E806: using Float as a String"
+msgstr "E806: Float gebruiken als een String"
+
+#, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: variabelenaam van Funcref moet beginnen met een hoofdletter: %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: variablenaam botst met bestaande functie: %s"
+
+#, c-format
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: variabelesoort past niet bij: %s"
+
+#, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: kan variabele %s niet verwijderen"
+
+#, c-format
+msgid "E741: Value is locked: %s"
+msgstr "E741: waarde is geblokkeerd: %s"
+
+msgid "Unknown"
+msgstr "Onbekend"
+
+#, c-format
+msgid "E742: Cannot change value of %s"
+msgstr "E742: kan waarde van %s niet veranderen"
+
+msgid "E698: variable nested too deep for making a copy"
+msgstr "E698: variabele te diep genest om een kopie te maken"
+
+#, c-format
+msgid "E123: Undefined function: %s"
+msgstr "E123: ongedefinieerde functie: %s"
+
+#, c-format
+msgid "E124: Missing '(': %s"
+msgstr "E124: ontbrekende '(': %s"
+
+#, c-format
+msgid "E125: Illegal argument: %s"
+msgstr "E125: ongeldig argument: %s"
+
+msgid "E126: Missing :endfunction"
+msgstr "E126: ontbrekende :endfunction"
+
+#, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: functienaam botst met variabele: %s"
+
+#, c-format
+msgid "E127: Cannot redefine function %s: It is in use"
+msgstr "E127: kan functie %s niet opnieuw definiëren, het is in gebruik"
+
+#, c-format
+msgid "E746: Function name does not match script file name: %s"
+msgstr "E746: functienaam komt niet overeen met bestandsnaam van het script: %s"
+
+msgid "E129: Function name required"
+msgstr "E129: functienaam is vereist"
+
+#, c-format
+msgid "E128: Function name must start with a capital or contain a colon: %s"
+msgstr "E128: functionnaam moet met een hoofdletter beginnen of een dubbelepunt bevatten: %s"
+
+#, c-format
+msgid "E131: Cannot delete function %s: It is in use"
+msgstr "E131: functie %s wordt gebruikt en kan niet worden verwijderd"
+
+msgid "E132: Function call depth is higher than 'maxfuncdepth'"
+msgstr "E132: diepte functieaanroep overstijgt 'maxfuncdepth'"
+
+#, c-format
+msgid "calling %s"
+msgstr "%s aanroepen"
+
+#, c-format
+msgid "%s aborted"
+msgstr "%s afgebroken"
+
+#, c-format
+msgid "%s returning #%ld"
+msgstr "%s komt terug met de waarde #%ld"
+
+#, c-format
+msgid "%s returning %s"
+msgstr "%s komt terug met de waarde %s"
+
+#, c-format
+msgid "continuing in %s"
+msgstr "voortzetten in %s"
+
+msgid "E133: :return not inside a function"
+msgstr "E133: :return niet binnen een functie"
+
+msgid ""
+"\n"
+"# global variables:\n"
+msgstr ""
+"\n"
+"# globale variabelen:\n"
+
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\tLaatst ingesteld door "
+
+msgid "No old files"
+msgstr "Geen oudere bestanden"
+
+#, c-format
+msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
+msgstr "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
+
+#, c-format
+msgid "> %d, Hex %04x, Octal %o"
+msgstr "> %d, Hex %04x, Octal %o"
+
+#, c-format
+msgid "> %d, Hex %08x, Octal %o"
+msgstr "> %d, Hex %08x, Octal %o"
+
+msgid "E134: Move lines into themselves"
+msgstr "E134: verplaats regels in zichzelf"
+
+msgid "1 line moved"
+msgstr "1 regel verplaatst"
+
+#, c-format
+msgid "%ld lines moved"
+msgstr "%ld regels verplaatst"
+
+#, c-format
+msgid "%ld lines filtered"
+msgstr "%ld regels gefilterd"
+
+msgid "E135: *Filter* Autocommands must not change current buffer"
+msgstr "E135: *Filter* Autocommands mogen huidige buffer niet wijzigen"
+
+msgid "[No write since last change]\n"
+msgstr "[Niets opgeslagen sinds laatste wijziging]\n"
+
+#, c-format
+msgid "%sviminfo: %s in line: "
+msgstr "%sviminfo: %s in regel: "
+
+msgid "E136: viminfo: Too many errors, skipping rest of file"
+msgstr "E136: viminfo: teveel fouten, restand van bestand overgeslagen"
+
+#, c-format
+msgid "Reading viminfo file \"%s\"%s%s%s"
+msgstr "Inlezen viminfo-bestand \"%s\"%s%s%s"
+
+msgid " info"
+msgstr " info"
+
+msgid " marks"
+msgstr " markering"
+
+msgid " oldfiles"
+msgstr " oud-bestanden"
+
+msgid " FAILED"
+msgstr " MISLUKT"
+
+#. avoid a wait_return for this message, it's annoying
+#, c-format
+msgid "E137: Viminfo file is not writable: %s"
+msgstr "E137: viminfo-bestand is niet schrijfbaar: %s"
+
+#, c-format
+msgid "E138: Can't write viminfo file %s!"
+msgstr "E138: kan niet naar viminfo-bestand %s schrijven!"
+
+#, c-format
+msgid "Writing viminfo file \"%s\""
+msgstr "viminfo-bestand \"%s\" opslaan"
+
+#. Write the info:
+#, c-format
+msgid "# This viminfo file was generated by Vim %s.\n"
+msgstr "# Dit viminfo-bestand is aangemaakt door Vim %s.\n"
+
+#, c-format
+msgid ""
+"# You may edit it if you're careful!\n"
+"\n"
+msgstr ""
+"# Bewerken is toegestaan, maar doe het met aandacht!\n"
+"\n"
+
+#, c-format
+msgid "# Value of 'encoding' when this file was written\n"
+msgstr "# Waarde van 'encoding' bij het opslaan van dit bestand\n"
+
+msgid "Illegal starting char"
+msgstr "Ongeldig startteken"
+
+msgid "Save As"
+msgstr "Opslaan als"
+
+msgid "Write partial file?"
+msgstr "Gedeeltelijk bestand opslaan?"
+
+msgid "E140: Use ! to write partial buffer"
+msgstr "E140: gebruik ! om gedeeltelijk buffer op te slaan"
+
+#, c-format
+msgid "Overwrite existing file \"%s\"?"
+msgstr "Bestaand bestand \"%s\" overschrijven?"
+
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "Wisselbestand \"%s\" bestaat, toch overschrijven?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: wisselbestand bestaat: %s (:silent! overschrijft)"
+
+#, c-format
+msgid "E141: No file name for buffer %ld"
+msgstr "E141: buffer %ld heeft geen bestandsnaam"
+
+msgid "E142: File not written: Writing is disabled by 'write' option"
+msgstr "E142: bestand is niet opgeslagen: opslaan is uitgeschakeld door 'write'-optie"
+
+#, c-format
+msgid ""
+"'readonly' option is set for \"%s\".\n"
+"Do you wish to write anyway?"
+msgstr ""
+"'alleen-lezen'-optie is inschakeld voor \"%s\".\n"
+"Toch opslaan?"
+
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+"Bestandsrechten van \"%s\" zijn alleen-lezen.\n"
+"Mogelijk kan er toch naar weggeschreven worden.\n"
+"Proberen op te slaan?"
+
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr "E505: \"%s\" is alleen-lezen (voeg ! toe om te overschrijven)"
+
+msgid "Edit File"
+msgstr "Bestand bewerken"
+
+#, c-format
+msgid "E143: Autocommands unexpectedly deleted new buffer %s"
+msgstr "E143: 'Autocommands' hebben het nieuwe buffer %s onverwacht verwijderd"
+
+msgid "E144: non-numeric argument to :z"
+msgstr "E144: niet-numeriek argument voor :z"
+
+msgid "E145: Shell commands not allowed in rvim"
+msgstr "E145: in rvim zijn shell-opdrachten zijn niet toegestaan"
+
+msgid "E146: Regular expressions can't be delimited by letters"
+msgstr "E146: reguliere expressies kunnen niet begrensd worden door letters"
+
+#, c-format
+msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
+msgstr "vervang door %s (y/n/a/q/l/^E/^Y)?"
+
+msgid "(Interrupted) "
+msgstr "(Onderbroken) "
+
+msgid "1 match"
+msgstr "1 overeenkomst"
+
+msgid "1 substitution"
+msgstr "1 vervanging"
+
+#, c-format
+msgid "%ld matches"
+msgstr "%ld overeenkomsten"
+
+#, c-format
+msgid "%ld substitutions"
+msgstr "%ld vervangingen"
+
+msgid " on 1 line"
+msgstr " op 1 regel"
+
+#, c-format
+msgid " on %ld lines"
+msgstr " op %ld regels"
+
+msgid "E147: Cannot do :global recursive"
+msgstr "E147: kan :global niet recursief uitvoeren"
+
+msgid "E148: Regular expression missing from global"
+msgstr "E148: reguliere expressies ontbreken bij global"
+
+#, c-format
+msgid "Pattern found in every line: %s"
+msgstr "Patroon aangetroffen in iedere regel: %s"
+
+#, c-format
+msgid ""
+"\n"
+"# Last Substitute String:\n"
+"$"
+msgstr ""
+"\n"
+"# Laatst vervangingsstring:\n"
+"$"
+
+msgid "E478: Don't panic!"
+msgstr "E478: geen paniek!"
+
+#, c-format
+msgid "E661: Sorry, no '%s' help for %s"
+msgstr "E661: helaas, geen '%s'-hulp voor %s"
+
+#, c-format
+msgid "E149: Sorry, no help for %s"
+msgstr "E149: helaas, geen hulp voor %s"
+
+#, c-format
+msgid "Sorry, help file \"%s\" not found"
+msgstr "helaas, hulpbestand \"%s\" is niet gevonden"
+
+#, c-format
+msgid "E150: Not a directory: %s"
+msgstr "E150: geen map: %s"
+
+#, c-format
+msgid "E152: Cannot open %s for writing"
+msgstr "E152: kan %s niet openen om naar te schrijven"
+
+#, c-format
+msgid "E153: Unable to open %s for reading"
+msgstr "E153: kan %s niet openen om uit te lezen"
+
+#, c-format
+msgid "E670: Mix of help file encodings within a language: %s"
+msgstr "E670: mengelmoes van hulpbestandcoderingen binnen een taal: %s"
+
+#, c-format
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154: dubbele tag \"%s\" in bestand %s/%s"
+
+#, c-format
+msgid "E160: Unknown sign command: %s"
+msgstr "E160: onbekende opdracht voor margetekens: %s"
+
+msgid "E156: Missing sign name"
+msgstr "E156: ontbrekende naam margeteken"
+
+msgid "E612: Too many signs defined"
+msgstr "E612: teveel margetekens gedefinieerd"
+
+#, c-format
+msgid "E239: Invalid sign text: %s"
+msgstr "E239: ongeldige tekst margeteken: %s"
+
+#, c-format
+msgid "E155: Unknown sign: %s"
+msgstr "E155: onbekend margeteken: %s"
+
+msgid "E159: Missing sign number"
+msgstr "E159: ontbrekend nummer margeteken"
+
+#, c-format
+msgid "E158: Invalid buffer name: %s"
+msgstr "E158: ongeldige buffernaam: %s"
+
+#, c-format
+msgid "E157: Invalid sign ID: %ld"
+msgstr "E157: ongeldige id margeteken: %ld"
+
+msgid " (NOT FOUND)"
+msgstr " (NIET GEVONDEN)"
+
+msgid " (not supported)"
+msgstr "(niet ondersteund)"
+
+msgid "[Deleted]"
+msgstr "[Verwijderd]"
+
+msgid "Entering Debug mode.  Type \"cont\" to continue."
+msgstr "Debug-modus gestart.  Typ \"cont\" om verder te gaan."
+
+#, c-format
+msgid "line %ld: %s"
+msgstr "regel %ld: %s"
+
+#, c-format
+msgid "cmd: %s"
+msgstr "cmd: %s"
+
+#, c-format
+msgid "Breakpoint in \"%s%s\" line %ld"
+msgstr "'Breakpoint' in \"%s%s\" regel %ld"
+
+#, c-format
+msgid "E161: Breakpoint not found: %s"
+msgstr "E161: 'Breakpoint' niet gevonden: %s"
+
+msgid "No breakpoints defined"
+msgstr "Geen 'breakpoints' opgegeven"
+
+#, c-format
+msgid "%3d  %s %s  line %ld"
+msgstr "%3d  %s %s  regel %ld"
+
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: gebruik eerst \":profile start {fname}\""
+
+#, c-format
+msgid "Save changes to \"%s\"?"
+msgstr "veranderingen opslaan in \"%s\"?"
+
+msgid "Untitled"
+msgstr "naamloos"
+
+#, c-format
+msgid "E162: No write since last change for buffer \"%s\""
+msgstr "E162: niets opgeslagen sinds laatste wijziging van buffer \"%s\""
+
+msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
+msgstr "Waarschuwing: onverwacht ander buffer binnengegaan (controleer 'autocommands')"
+
+msgid "E163: There is only one file to edit"
+msgstr "E163: slechts een bestand beschikbaar voor bewerking"
+
+msgid "E164: Cannot go before first file"
+msgstr "E164: kan niet verder terug dan eerste bestand"
+
+msgid "E165: Cannot go beyond last file"
+msgstr "E165: kan niet verder dan laatste bestand"
+
+#, c-format
+msgid "E666: compiler not supported: %s"
+msgstr "E666: compiler niet ondersteund: %s"
+
+#, c-format
+msgid "Searching for \"%s\" in \"%s\""
+msgstr "Naar \"%s\" in \"%s\" zoeken"
+
+#, c-format
+msgid "Searching for \"%s\""
+msgstr "Naar \"%s\" zoeken"
+
+#, c-format
+msgid "not found in 'runtimepath': \"%s\""
+msgstr "niet gevonden in 'runtimepath': \"%s\""
+
+msgid "Source Vim script"
+msgstr "Vim-script laden"
+
+#, c-format
+msgid "Cannot source a directory: \"%s\""
+msgstr "kan geen map laden: \"%s\""
+
+#, c-format
+msgid "could not source \"%s\""
+msgstr "kan \"%s\" niet laden"
+
+#, c-format
+msgid "line %ld: could not source \"%s\""
+msgstr "regel %ld: kan \"%s\" niet laden"
+
+#, c-format
+msgid "sourcing \"%s\""
+msgstr "\"%s\" laden"
+
+#, c-format
+msgid "line %ld: sourcing \"%s\""
+msgstr "regel %ld: \"%s\" laden"
+
+#, c-format
+msgid "finished sourcing %s"
+msgstr "laden van %s afgerond"
+
+msgid "modeline"
+msgstr "modusregel"
+
+msgid "--cmd argument"
+msgstr "argument van --cmd"
+
+msgid "-c argument"
+msgstr "argument van -c"
+
+msgid "environment variable"
+msgstr "omgevingsvariabele"
+
+msgid "error handler"
+msgstr "foutafhandeling"
+
+msgid "W15: Warning: Wrong line separator, ^M may be missing"
+msgstr "W15: waarschuwing: ongeldige regelscheiding, ^M kan ontbreken"
+
+msgid "E167: :scriptencoding used outside of a sourced file"
+msgstr "E167: :scriptencoding buiten een geladen bestand gebruikt"
+
+msgid "E168: :finish used outside of a sourced file"
+msgstr "E168: :finish buiten een geladen bestand gebruikt"
+
+#, c-format
+msgid "Current %slanguage: \"%s\""
+msgstr "Huidige %s-taal: \"%s\""
+
+#, c-format
+msgid "E197: Cannot set language to \"%s\""
+msgstr "E197: taal kan niet ingesteld worden op \"%s\""
+
+msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+msgstr "Ex-modus betreden.  Typ \"visual\" om naar de Normaal-modus te gaan."
+
+msgid "E501: At end-of-file"
+msgstr "E501: bij bestandseinde"
+
+msgid "E169: Command too recursive"
+msgstr "E169: opdracht te recursief"
+
+#, c-format
+msgid "E605: Exception not caught: %s"
+msgstr "E605: uitzondering niet afgevangen: %s"
+
+msgid "End of sourced file"
+msgstr "Einde van geladen bestand"
+
+msgid "End of function"
+msgstr "Einde van functie"
+
+msgid "E464: Ambiguous use of user-defined command"
+msgstr "E464: dubbelzinnig gebruik van gebruikergedefinieerde opdracht"
+
+msgid "E492: Not an editor command"
+msgstr "E492: geen editor-opdracht"
+
+msgid "E493: Backwards range given"
+msgstr "E493: Teruggaand bereik opgegeven"
+
+msgid "Backwards range given, OK to swap"
+msgstr "Teruggaand bereik opgegeven, wisselen is toegestaan"
+
+msgid "E494: Use w or w>>"
+msgstr "E494: w of w>> gebruiken"
+
+msgid "E319: Sorry, the command is not available in this version"
+msgstr "E319: Helaas, in deze versie is de opdracht niet beschikbaar"
+
+msgid "E172: Only one file name allowed"
+msgstr "E172: slechts een bestandsnaam toegestaan"
+
+msgid "1 more file to edit.  Quit anyway?"
+msgstr "1 bestand wacht nog op bewerking.  Toch stoppen?"
+
+#, c-format
+msgid "%d more files to edit.  Quit anyway?"
+msgstr "%d bestanden wachten nog op bewerking.  Toch stoppen?"
+
+msgid "E173: 1 more file to edit"
+msgstr "E173: 1 bestand wacht op bewerking"
+
+#, c-format
+msgid "E173: %ld more files to edit"
+msgstr "E173: %ld bestanden wachten op bewerking"
+
+msgid "E174: Command already exists: add ! to replace it"
+msgstr "E174: opdracht bestaat al: voeg ! toe om het te vervangen"
+
+msgid ""
+"\n"
+"    Name        Args Range Complete  Definition"
+msgstr ""
+"\n"
+"    Naam        Args Berk.  Compleet  Definitie"
+
+msgid "No user-defined commands found"
+msgstr "Geen gebruikergedefinieerde opdrachten gevonden"
+
+msgid "E175: No attribute specified"
+msgstr "E175: geen attribute opgegeven"
+
+msgid "E176: Invalid number of arguments"
+msgstr "E176: ongeldig aantal argumenten"
+
+msgid "E177: Count cannot be specified twice"
+msgstr "E177: aantal kan niet tweemaal worden opgegeven"
+
+msgid "E178: Invalid default value for count"
+msgstr "E178: ongeldige standaardwaarde voor aantal"
+
+msgid "E179: argument required for -complete"
+msgstr "E179: argument vereist voor -complete"
+
+#, c-format
+msgid "E181: Invalid attribute: %s"
+msgstr "E181: ongeldig attribute: %s"
+
+msgid "E182: Invalid command name"
+msgstr "E182: ongeldige opdrachtnaam"
+
+msgid "E183: User defined commands must start with an uppercase letter"
+msgstr "E183: door gebruiker gedefinieerde opdrachten moet een een hoofdletter beginnen"
+
+#, c-format
+msgid "E184: No such user-defined command: %s"
+msgstr "E184: deze door gebruiker gedefinieerde opdracht bestaat niet: %s"
+
+#, c-format
+msgid "E180: Invalid complete value: %s"
+msgstr "E180: ongeldige voltooiingswaarde: %s"
+
+msgid "E468: Completion argument only allowed for custom completion"
+msgstr "E468: argument voor voltooiing alleen toegestaan bij aangepaste voltooiing"
+
+msgid "E467: Custom completion requires a function argument"
+msgstr "E467: aangepaste voltooiing vereist een functieargument"
+
+msgid "unknown"
+msgstr "onbekend"
+
+#, c-format
+msgid "E185: Cannot find color scheme %s"
+msgstr "E185: kan kleurenschema %s niet vinden"
+
+msgid "Greetings, Vim user!"
+msgstr "Gegroet, Vim-gebruiker!"
+
+msgid "E784: Cannot close last tab page"
+msgstr "E784: laatste tabpagina kan niet afgesloten worden"
+
+msgid "Already only one tab page"
+msgstr "Reeds beperkt tot Ã©Ã©n tabpagina"
+
+msgid "Edit File in new window"
+msgstr "Bestand in nieuw venster bewerken"
+
+#, c-format
+msgid "Tab page %d"
+msgstr "Tabpagina %d"
+
+msgid "No swap file"
+msgstr "Geen wisselbestand"
+
+msgid "Append File"
+msgstr "Bestand toevoegen"
+
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+msgstr "E747: kan niet van map veranderen, buffer is gewijzigd (voeg ! toe om te forceren)"
+
+msgid "E186: No previous directory"
+msgstr "E186: geen voorgaande map"
+
+msgid "E187: Unknown"
+msgstr "E187: onbekend"
+
+msgid "E465: :winsize requires two number arguments"
+msgstr "E465: :winsize vereist twee getallen als argument"
+
+#, c-format
+msgid "Window position: X %d, Y %d"
+msgstr "Vensterpositie: X %d, Y %d"
+
+msgid "E188: Obtaining window position not implemented for this platform"
+msgstr "E188: verkrijgen van vensterpositie is voor dit platform niet geïmplementeerd"
+
+msgid "E466: :winpos requires two number arguments"
+msgstr "E466: :winpos vereist twee getallen als argument"
+
+msgid "Save Redirection"
+msgstr "'Redirection' opslaan"
+
+msgid "Save View"
+msgstr "Beeld opslaan"
+
+msgid "Save Session"
+msgstr "Sessie opslaan"
+
+msgid "Save Setup"
+msgstr "Instellingen opslaan"
+
+#, c-format
+msgid "E739: Cannot create directory: %s"
+msgstr "E739: kan map %s niet aanmaken"
+
+#, c-format
+msgid "E189: \"%s\" exists (add ! to override)"
+msgstr "E189: \"%s\" bestaat al (voeg ! toe om te forceren)"
+
+#, c-format
+msgid "E190: Cannot open \"%s\" for writing"
+msgstr "E190: \"%s\" kan niet worden beschreven"
+
+#. set mark
+msgid "E191: Argument must be a letter or forward/backward quote"
+msgstr "E191: argument moet een letter zijn of een aanhaalteken, voor of achterwaarts"
+
+msgid "E192: Recursive use of :normal too deep"
+msgstr "E192: recursief gebruik van :normal gaat te diep"
+
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< is zonder de +eval-functionaliteit niet beschikbaar"
+
+msgid "E194: No alternate file name to substitute for '#'"
+msgstr "E194: er is geen wisselende bestandsnaam beschikbaar om '#' te vervangen"
+
+msgid "E495: no autocommand file name to substitute for \"<afile>\""
+msgstr "E495: er is geen 'autocommand'-bestandsnaam om \"<afile>\" te vervangen"
+
+msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
+msgstr "E496: er is geen 'autocommand'-buffernummer om \"<abuf>\" te vervangen"
+
+msgid "E497: no autocommand match name to substitute for \"<amatch>\""
+msgstr "E497: er is geen 'autocommand'-naamovereenkomst om \"<amatch>\" te vervangen"
+
+msgid "E498: no :source file name to substitute for \"<sfile>\""
+msgstr "E498: er is geen :source-bestandsnaam om \"<sfile>\" te vervangen"
+
+#, no-c-format
+msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+msgstr "E499: lege bestandsnaam voor '%' of '#', werkt alleen samen met \":p:h\""
+
+msgid "E500: Evaluates to an empty string"
+msgstr "E500: resulteert in een lege string"
+
+msgid "E195: Cannot open viminfo file for reading"
+msgstr "E195: het 'viminfo'-bestand kan niet worden gelezen"
+
+msgid "E196: No digraphs in this version"
+msgstr "E196: deze versie bevat geen 'digraphs'"
+
+msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
+msgstr "E608: :throw exceptions met 'Vim' als voorvoegsel zijn niet mogelijk"
+
+#. always scroll up, don't overwrite
+#, c-format
+msgid "Exception thrown: %s"
+msgstr "Geworpen uitzondering: %s"
+
+#, c-format
+msgid "Exception finished: %s"
+msgstr "Afgeronde uitzondering: %s"
+
+#, c-format
+msgid "Exception discarded: %s"
+msgstr "Afgedankte uitzondering: %s"
+
+#, c-format
+msgid "%s, line %ld"
+msgstr "%s, regel %ld"
+
+#. always scroll up, don't overwrite
+#, c-format
+msgid "Exception caught: %s"
+msgstr "Gevangen uitzondering: %s"
+
+#, c-format
+msgid "%s made pending"
+msgstr "%s aanhanging gemaakt"
+
+#, c-format
+msgid "%s resumed"
+msgstr "%s voortgezet"
+
+#, c-format
+msgid "%s discarded"
+msgstr "%s afgedankt"
+
+msgid "Exception"
+msgstr "Uitzondering"
+
+msgid "Error and interrupt"
+msgstr "Fout en onderbreken"
+
+msgid "Error"
+msgstr "Fout"
+
+#. if (pending & CSTP_INTERRUPT)
+msgid "Interrupt"
+msgstr "Onderbreken"
+
+msgid "E579: :if nesting too deep"
+msgstr "E579: te diepe :if-nesting"
+
+msgid "E580: :endif without :if"
+msgstr "E580: :endif zonder :if"
+
+msgid "E581: :else without :if"
+msgstr "E581: :else zonder :if"
+
+msgid "E582: :elseif without :if"
+msgstr "E582: :elseif zonder :if"
+
+msgid "E583: multiple :else"
+msgstr "E583: meerdere :else"
+
+msgid "E584: :elseif after :else"
+msgstr "E584: :elseif na :else"
+
+msgid "E585: :while/:for nesting too deep"
+msgstr "E585: te diepe :while/:for-nesting"
+
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :continue zonder :while of :for"
+
+msgid "E587: :break without :while or :for"
+msgstr "E587: :break zonder :while of :for"
+
+msgid "E732: Using :endfor with :while"
+msgstr "E732: gebruik van :endfor met :while"
+
+msgid "E733: Using :endwhile with :for"
+msgstr "E733: gebruik van :endwhile met :for"
+
+msgid "E601: :try nesting too deep"
+msgstr "E601: te diepe :try-nesting"
+
+msgid "E603: :catch without :try"
+msgstr "E603: :catch zonder :try"
+
+#. Give up for a ":catch" after ":finally" and ignore it.
+#. * Just parse.
+msgid "E604: :catch after :finally"
+msgstr "E604: :catch na :finally"
+
+msgid "E606: :finally without :try"
+msgstr "E606: :finally zonder :try"
+
+#. Give up for a multiple ":finally" and ignore it.
+msgid "E607: multiple :finally"
+msgstr "E607: meerdere :finally"
+
+msgid "E602: :endtry without :try"
+msgstr "E602: :endtry zonder :try"
+
+msgid "E193: :endfunction not inside a function"
+msgstr "E193: :endfunction niet binnen een functie"
+
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: nu een andere buffer bewerken is niet toegestaan"
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: nu bufferinformatie wijzigen is niet toegestaan"
+
+msgid "tagname"
+msgstr "tagnaam"
+
+msgid " kind file\n"
+msgstr "soor bestand\n"
+
+msgid "'history' option is zero"
+msgstr "'history'-optie is nul"
+
+#, c-format
+msgid ""
+"\n"
+"# %s History (newest to oldest):\n"
+msgstr ""
+"\n"
+"# %s Historie (jongste naar oudste):\n"
+
+msgid "Command Line"
+msgstr "Opdrachtregel"
+
+msgid "Search String"
+msgstr "Zoekstring"
+
+msgid "Expression"
+msgstr "Expressie"
+
+msgid "Input Line"
+msgstr "Invoerregel"
+
+msgid "E198: cmd_pchar beyond the command length"
+msgstr "E198: cmd_pchar is langer dan toegestaan voor een opdracht"
+
+msgid "E199: Active window or buffer deleted"
+msgstr "E199: actieve venster of buffer verwijderd"
+
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: buffer of buffernaam gewijzigd door autocommands"
+
+msgid "Illegal file name"
+msgstr "Ongeldige bestandsnaam"
+
+msgid "is a directory"
+msgstr "is een map"
+
+msgid "is not a file"
+msgstr "is geen bestand"
+
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr "is een apparaat (uitgeschakeld door optie 'opendevice'"
+
+msgid "[New File]"
+msgstr "[Nieuw bestand]"
+
+msgid "[New DIRECTORY]"
+msgstr "[Nieuwe MAP]"
+
+msgid "[File too big]"
+msgstr "Bestand te groot"
+
+msgid "[Permission Denied]"
+msgstr "[Geen rechten]"
+
+msgid "E200: *ReadPre autocommands made the file unreadable"
+msgstr "E200: *ReadPre autocommands hebben het bestand niet-leesbaar gemaakt"
+
+msgid "E201: *ReadPre autocommands must not change current buffer"
+msgstr "E201: *ReadPre autocommands mogen huidige buffer niet wijzigen"
+
+msgid "Vim: Reading from stdin...\n"
+msgstr "Vim: lezen van standaardinvoer...\n"
+
+msgid "Reading from stdin..."
+msgstr "Lezen van standaardinvoer..."
+
+#. Re-opening the original file failed!
+msgid "E202: Conversion made file unreadable!"
+msgstr "E202: bestand niet-leesbaar gemaakt door conversatie"
+
+msgid "[fifo/socket]"
+msgstr "[fifo/socket]"
+
+msgid "[fifo]"
+msgstr "[fifo]"
+
+msgid "[socket]"
+msgstr "[socket]"
+
+msgid "[character special]"
+msgstr "[karakter speciaal]"
+
+msgid "[RO]"
+msgstr "[RO]"
+
+msgid "[CR missing]"
+msgstr "[CR ontbreekt]"
+
+msgid "[long lines split]"
+msgstr "[lange regels gesplitst]"
+
+msgid "[NOT converted]"
+msgstr "[NIET omgezet]"
+
+msgid "[converted]"
+msgstr "[omgezet]"
+
+msgid "[crypted]"
+msgstr "[versleuteld]"
+
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[OMZETFOUT in regel %ld]"
+
+#, c-format
+msgid "[ILLEGAL BYTE in line %ld]"
+msgstr "[ONGELDIGE BYTE in regel %ld]"
+
+msgid "[READ ERRORS]"
+msgstr "[LEESFOUTEN]"
+
+msgid "Can't find temp file for conversion"
+msgstr "Tijdelijk bestand voor conversie ontbreekt"
+
+msgid "Conversion with 'charconvert' failed"
+msgstr "Conversatie met 'charconvert' is mislukt"
+
+msgid "can't read output of 'charconvert'"
+msgstr "uitvoer van 'charconvert' kan niet worden gelezen"
+
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: bestand is met onbekende methode versleuteld"
+
+msgid "E676: No matching autocommands for acwrite buffer"
+msgstr "E676: geen overeenkomende autocommands voor 'acwrite'-buffer"
+
+msgid "E203: Autocommands deleted or unloaded buffer to be written"
+msgstr "E203: autocommands hebben buffer verwijderd of gelost die moest worden opgeslagen"
+
+msgid "E204: Autocommand changed number of lines in unexpected way"
+msgstr "E204: autocommand heeft op onverwachte wijze het aantal regels gewijzigd"
+
+msgid "NetBeans disallows writes of unmodified buffers"
+msgstr "Netbeans staat het opslaan van onveranderde buffers niet toe"
+
+msgid "Partial writes disallowed for NetBeans buffers"
+msgstr "Deelopslag voor buffers van Netbeans niet toegestaan"
+
+msgid "is not a file or writable device"
+msgstr "is geen bestand of schrijfbaar apparaat"
+
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "het schrijven naar apparaat is uitgeschakeld met optie 'opendevice'"
+
+msgid "is read-only (add ! to override)"
+msgstr "is alleen-lezen (voeg ! toe om te schrijven)"
+
+msgid "E506: Can't write to backup file (add ! to override)"
+msgstr "E506: kan niet naar back-upbestand schrijven (voeg hiervoor ! toe)"
+
+msgid "E507: Close error for backup file (add ! to override)"
+msgstr "E507: fout tijdens afsluiten van back-upbestand (voeg ! om toch af te sluiten)"
+
+msgid "E508: Can't read file for backup (add ! to override)"
+msgstr "E508: kan bestand voor back-up niet lezen (voeg ! toe om toch te lezen)"
+
+msgid "E509: Cannot create backup file (add ! to override)"
+msgstr "E509: kan back-upbestand niet aanmaken (voeg ! toe om dit toch aan te maken)"
+
+msgid "E510: Can't make backup file (add ! to override)"
+msgstr "E510: kan back-upbestand niet maken (voeg ! toe om dit toch te maken)"
+
+msgid "E460: The resource fork would be lost (add ! to override)"
+msgstr "E460: de afsplitsing van middelen zou verloren gaan (voeg ! toe om dit toch te doen)"
+
+msgid "E214: Can't find temp file for writing"
+msgstr "E214: kan tijdelijk bestand voor wegschrijven niet vinden"
+
+msgid "E213: Cannot convert (add ! to write without conversion)"
+msgstr "E213: kan niet omzetten (voeg ! toe om zonder omzetting op te slaan)"
+
+msgid "E166: Can't open linked file for writing"
+msgstr "E166: kan niet schrijven naar gekoppeld bestand"
+
+msgid "E212: Can't open file for writing"
+msgstr "E212: kan niet schrijven naar bestand"
+
+msgid "E667: Fsync failed"
+msgstr "E667: fsync is mislukt"
+
+msgid "E512: Close failed"
+msgstr "E512: Afsluiten is mislukt"
+
+msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+msgstr "E513: schrijffout waarbij omzetting is mislukt (leeg 'fenc' om te overschrijven)"
+
+#, c-format
+msgid "E513: write error, conversion failed in line %ld (make 'fenc' empty to override)"
+msgstr "E513: schrijffout waarbij omzetting in regel %ld is mislukt (leeg 'fenc' om te overschrijven)"
+
+msgid "E514: write error (file system full?)"
+msgstr "E514: schrijffout (is bestandssysteem vol?)"
+
+msgid " CONVERSION ERROR"
+msgstr " OMZETTINGFOUT"
+
+#, c-format
+msgid " in line %ld;"
+msgstr " in regel %ld;"
+
+msgid "[Device]"
+msgstr "[Apparaat]"
+
+msgid "[New]"
+msgstr "[Nieuw]"
+
+msgid " [a]"
+msgstr " [a]"
+
+msgid " appended"
+msgstr " toegevoegd"
+
+msgid " [w]"
+msgstr " [w]"
+
+msgid " written"
+msgstr " opgeslagen"
+
+msgid "E205: Patchmode: can't save original file"
+msgstr "E205: patch-modus: kan oorspronkelijke bestand niet opslaan"
+
+msgid "E206: patchmode: can't touch empty original file"
+msgstr "E206: patch-modus: kan oorspronkelijk leeg bestand niet aanraken"
+
+msgid "E207: Can't delete backup file"
+msgstr "E207: back-upbestand kan niet worden verwijderd"
+
+msgid ""
+"\n"
+"WARNING: Original file may be lost or damaged\n"
+msgstr ""
+"\n"
+"WAARSCHUWING: oorspronkelijk bestand kan verloren gaan of beschadigen\n"
+
+msgid "don't quit the editor until the file is successfully written!"
+msgstr "verlaat vim niet voordat het bestand volledig opgeslagen is!"
+
+msgid "[dos]"
+msgstr "[dos]"
+
+msgid "[dos format]"
+msgstr "[dos-format]"
+
+msgid "[mac]"
+msgstr "[mac]"
+
+msgid "[mac format]"
+msgstr "[mac-format]"
+
+msgid "[unix]"
+msgstr "[unix]"
+
+msgid "[unix format]"
+msgstr "[unix-format]"
+
+msgid "1 line, "
+msgstr "1 regel, "
+
+#, c-format
+msgid "%ld lines, "
+msgstr "%ld regels, "
+
+msgid "1 character"
+msgstr "1 teken"
+
+#, c-format
+msgid "%lld characters"
+msgstr "%lld tekens"
+
+#, c-format
+msgid "%ld characters"
+msgstr "%ld tekens"
+
+msgid "[noeol]"
+msgstr "[noeol]"
+
+msgid "[Incomplete last line]"
+msgstr "[Laatste regel onvolledig]"
+
+#. don't overwrite messages here
+#. must give this prompt
+#. don't use emsg() here, don't want to flush the buffers
+msgid "WARNING: The file has been changed since reading it!!!"
+msgstr "WAARSCHUWING: het bestand is na het laden gewijzigd!!!"
+
+msgid "Do you really want to write to it"
+msgstr "Wilt u er zeker naar schrijven"
+
+#, c-format
+msgid "E208: Error writing to \"%s\""
+msgstr "E208: schrijven naar \"%s\" is mislukt"
+
+#, c-format
+msgid "E209: Error closing \"%s\""
+msgstr "E209: afsluiten van \"%s\" is mislukt"
+
+#, c-format
+msgid "E210: Error reading \"%s\""
+msgstr "E210: lezen van \"%s\" is mislukt"
+
+msgid "E246: FileChangedShell autocommand deleted buffer"
+msgstr "E246: buffer verwijderd door 'autocommand' FileChangedShell"
+
+#, c-format
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211: bestand \"%s\" is niet meer beschikbaar"
+
+#, c-format
+msgid "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as well"
+msgstr "W12: waarschuwing: bestand \"%s\" en de buffer zijn gewijzigd in Vim "
+
+msgid "See \":help W12\" for more info."
+msgstr "Lees \":help W12\" voor meer informatie."
+
+#, c-format
+msgid "W11: Warning: File \"%s\" has changed since editing started"
+msgstr "W11: waarschuwing: bestand \"%s\" is gewijzigd sinds het begin van het bewerken"
+
+msgid "See \":help W11\" for more info."
+msgstr "Lees \":help W11\" voor meer informatie."
+
+#, c-format
+msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
+msgstr "W16: waarschuwing: rechten van bestand \"%s\" zijn gewijzigd sinds het begin van het bewerken"
+
+msgid "See \":help W16\" for more info."
+msgstr "Lees \":help W16\" voor meer informatie"
+
+#, c-format
+msgid "W13: Warning: File \"%s\" has been created after editing started"
+msgstr "W13: waarschuwing: na het begin van het bewerken van bestand \"%s\" is deze ook elders aangemaakt"
+
+msgid "Warning"
+msgstr "Waarschuwing"
+
+msgid ""
+"&OK\n"
+"&Load File"
+msgstr ""
+"&OK\n"
+"Bestand &Laden"
+
+#, c-format
+msgid "E462: Could not prepare for reloading \"%s\""
+msgstr "E462: het voorbereiden van \"%s\" voor het opnieuw laden is mislukt"
+
+#, c-format
+msgid "E321: Could not reload \"%s\""
+msgstr "E321: kan \"%s\" niet opnieuw laden"
+
+msgid "--Deleted--"
+msgstr "--Verwijderd--"
+
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "automatisch verwijderen 'autocommand': %s <buffer=%d>"
+
+#. the group doesn't exist
+#, c-format
+msgid "E367: No such group: \"%s\""
+msgstr "E367: groep \"%s\" bestaat niet"
+
+#, c-format
+msgid "E215: Illegal character after *: %s"
+msgstr "E215: ongeldig teken na *: %s"
+
+#, c-format
+msgid "E216: No such event: %s"
+msgstr "E216: onbekend 'event': %s"
+
+#, c-format
+msgid "E216: No such group or event: %s"
+msgstr "E216: onbekende groep of 'event': %s"
+
+#. Highlight title
+msgid ""
+"\n"
+"--- Auto-Commands ---"
+msgstr ""
+"\n"
+"--- Auto-Commands ---"
+
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <buffer=%d>: ongeldig buffernummer "
+
+msgid "E217: Can't execute autocommands for ALL events"
+msgstr "E217: autocommands kunnen niet voor alle 'events' worden uitgevoerd"
+
+msgid "No matching autocommands"
+msgstr "Geen overeenkomstige autocommands"
+
+msgid "E218: autocommand nesting too deep"
+msgstr "E218: hierarchie van aanroepen autocommands te diep"
+
+#, c-format
+msgid "%s Auto commands for \"%s\""
+msgstr "%s 'Auto commands' voor \"%s\""
+
+#, c-format
+msgid "Executing %s"
+msgstr "%s uitvoeren"
+
+#, c-format
+msgid "autocommand %s"
+msgstr "autocommand %s"
+
+msgid "E219: Missing {."
+msgstr "E219: ontbrekende {."
+
+msgid "E220: Missing }."
+msgstr "E220: ontbrekende }."
+
+msgid "E490: No fold found"
+msgstr "E490: geen vouw gevonden"
+
+msgid "E350: Cannot create fold with current 'foldmethod'"
+msgstr "E350: kan geen vouw aanmaken met huidige 'vouwmethode'"
+
+msgid "E351: Cannot delete fold with current 'foldmethod'"
+msgstr "E351: kan geen vouw verwijderen met huidige 'vouwmethode'"
+
+#, c-format
+msgid "+--%3ld lines folded "
+msgstr "+--%3ld regels gevouwen "
+
+msgid "E222: Add to read buffer"
+msgstr "E222: aan leesbuffer toevoegen"
+
+msgid "E223: recursive mapping"
+msgstr "E223: recursieve toewijzing"
+
+#, c-format
+msgid "E224: global abbreviation already exists for %s"
+msgstr "E224: algemene afkorting bestaat al voor %s"
+
+#, c-format
+msgid "E225: global mapping already exists for %s"
+msgstr "E225: er bestaat al een algemene toewijzing voor %s"
+
+#, c-format
+msgid "E226: abbreviation already exists for %s"
+msgstr "E226: er bestaat al een afkorting voor %s"
+
+#, c-format
+msgid "E227: mapping already exists for %s"
+msgstr "E227: toewijzing bestaat al voor %s"
+
+msgid "No abbreviation found"
+msgstr "Geen afkorting gevonden"
+
+msgid "No mapping found"
+msgstr "Geen toewijzing gevonden"
+
+msgid "E228: makemap: Illegal mode"
+msgstr "E228: makemap: ongeldige modus"
+
+msgid "E229: Cannot start the GUI"
+msgstr "E229: de GUI kan niet worden gestart"
+
+#, c-format
+msgid "E230: Cannot read from \"%s\""
+msgstr "E230: kan niet gelezen worden uit \"%s\""
+
+msgid "E665: Cannot start GUI, no valid font found"
+msgstr "E665: de GUI kan niet gestart worden, er is geen geldig lettertype gevonden"
+
+msgid "E231: 'guifontwide' invalid"
+msgstr "E231: 'guifontwide' ongeldig"
+
+msgid "E599: Value of 'imactivatekey' is invalid"
+msgstr "E599: waarde van 'imactivatekey' is ongeldig"
+
+#, c-format
+msgid "E254: Cannot allocate color %s"
+msgstr "E254: kan de kleur %s niet reserveren"
+
+msgid "No match at cursor, finding next"
+msgstr "Op cursorpositie is geen overeenkomst: de volgende zoeken"
+
+msgid "<cannot open> "
+msgstr "<kan niet openen> "
+
+#, c-format
+msgid "E616: vim_SelFile: can't get font %s"
+msgstr "E616: vim_SelFile: lettertype %s niet gevonden"
+
+msgid "E614: vim_SelFile: can't return to current directory"
+msgstr "E614: vim_SelFile: teruggaan naar huidige map is niet mogelijk"
+
+msgid "Pathname:"
+msgstr "Padnaam:"
+
+msgid "E615: vim_SelFile: can't get current directory"
+msgstr "E615: vim_SelFile: vaststellen huidige map is niet mogelijk"
+
+msgid "OK"
+msgstr "Ok"
+
+msgid "Cancel"
+msgstr "Annuleren"
+
+msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
+msgstr "Scrollbar-widget: vaststellen afmetingen van miniaturenkaart niet mogelijk."
+
+msgid "Vim dialog"
+msgstr "Vim-dialoog"
+
+msgid "E232: Cannot create BalloonEval with both message and callback"
+msgstr "E232: aanmaken 'BalloonEval' met zowel een bericht als een 'callback' is niet mogelijk"
+
+msgid "Vim dialog..."
+msgstr "Vim-dialoog..."
+
+msgid ""
+"&Yes\n"
+"&No\n"
+"&Cancel"
+msgstr ""
+"&Ja\n"
+"&Nee\n"
+"&Annuleren"
+
+msgid "Input _Methods"
+msgstr "Invoer_wijzen"
+
+msgid "VIM - Search and Replace..."
+msgstr "VIM - zoeken en vervangen..."
+
+msgid "VIM - Search..."
+msgstr "VIM - zoeken..."
+
+msgid "Find what:"
+msgstr "Zoek naar:"
+
+msgid "Replace with:"
+msgstr "Vervang door:"
+
+#. whole word only button
+msgid "Match whole word only"
+msgstr "Alleen volledig woord"
+
+#. match case button
+msgid "Match case"
+msgstr "Hoofdlettergevoelig"
+
+msgid "Direction"
+msgstr "Richting"
+
+#. 'Up' and 'Down' buttons
+msgid "Up"
+msgstr "Opwaarts"
+
+msgid "Down"
+msgstr "Neerwaarts"
+
+msgid "Find Next"
+msgstr "Volgende zoeken"
+
+msgid "Replace"
+msgstr "Vervangen"
+
+msgid "Replace All"
+msgstr "Alles vervangen"
+
+msgid "Vim: Received \"die\" request from session manager\n"
+msgstr "Vim: \"die\"-verzoek van sessiebeheerder ontvangen\n"
+
+msgid "Close"
+msgstr "Sluiten"
+
+msgid "New tab"
+msgstr "Nieuw tabblad"
+
+msgid "Open Tab..."
+msgstr "Tabblad openen..."
+
+msgid "Vim: Main window unexpectedly destroyed\n"
+msgstr "Vim: hoofdvenster onverwacht gesloten\n"
+
+msgid "Font Selection"
+msgstr "Lettertypeselectie"
+
+msgid "&Filter"
+msgstr "&Filter"
+
+msgid "&Cancel"
+msgstr "&Annuleren"
+
+msgid "Directories"
+msgstr "Mappen"
+
+msgid "Filter"
+msgstr "Filter"
+
+msgid "&Help"
+msgstr "&Hulp"
+
+msgid "Files"
+msgstr "Bestanden"
+
+msgid "&OK"
+msgstr "&Ok"
+
+msgid "Selection"
+msgstr "Selectie"
+
+msgid "Find &Next"
+msgstr "&Volgende zoeken"
+
+msgid "&Replace"
+msgstr "Ve&rvangen"
+
+msgid "Replace &All"
+msgstr "&Alles vervangen"
+
+msgid "&Undo"
+msgstr "&Herstellen"
+
+#, c-format
+msgid "E610: Can't load Zap font '%s'"
+msgstr "E610: Zap-lettertype '%s' kan niet worden geladen"
+
+#, c-format
+msgid "E611: Can't use font %s"
+msgstr "E611: lettertype %s kan niet worden gebruikt"
+
+msgid ""
+"\n"
+"Sending message to terminate child process.\n"
+msgstr ""
+"\n"
+"Bericht versturen om kindproces te beëindigen.\n"
+
+#, c-format
+msgid "E671: Cannot find window title \"%s\""
+msgstr "E671: kan venstertitel \"%s\" niet vinden"
+
+#, c-format
+msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
+msgstr "E243: argument niet ondersteund: \"-%s\"; gebruik de OLE-versie."
+
+msgid "E672: Unable to open window inside MDI application"
+msgstr "E672: kan geen venster binnen MDI-applicatie openen"
+
+msgid "Close tab"
+msgstr "Tabblad sluiten"
+
+msgid "Open tab..."
+msgstr "Tabblad openen..."
+
+msgid "Find string (use '\\\\' to find  a '\\')"
+msgstr "Tekenreeks zoeken (gebruik '\\\\' om een '\\' te vinden)"
+
+msgid "Find & Replace (use '\\\\' to find  a '\\')"
+msgstr "Zoeken & vervangen (gebruik '\\\\' om een '\\' te vinden')"
+
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
+msgid "Not Used"
+msgstr "Niet gebruikt"
+
+msgid "Directory\t*.nothing\n"
+msgstr "Map\t*.niets\n"
+
+msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
+msgstr "E458: kan geen kleur toewijzen, sommige kleuren kunnen onjuist zijn"
+
+#, c-format
+msgid "E250: Fonts for the following charsets are missing in fontset %s:"
+msgstr "E250: lettertypen voor de volgende tekenverzamelingen ontbreken in verzameling %s:"
+
+#, c-format
+msgid "E252: Fontset name: %s"
+msgstr "E252: naam lettertypeverzameling: %s"
+
+#, c-format
+msgid "Font '%s' is not fixed-width"
+msgstr "Lettertype '%s' heeft geen vaste breedte"
+
+#, c-format
+msgid "E253: Fontset name: %s\n"
+msgstr "E253: naam lettertypeverzameling: %s\n"
+
+#, c-format
+msgid "Font0: %s\n"
+msgstr "Font0: %s\n"
+
+#, c-format
+msgid "Font1: %s\n"
+msgstr "Font1: %s\n"
+
+#, c-format
+msgid "Font%ld width is not twice that of font0\n"
+msgstr "Breedte font%ld is niet het dubbele van font0\n"
+
+#, c-format
+msgid "Font0 width: %ld\n"
+msgstr "Font0-breedte: %ld\n"
+
+#, c-format
+msgid ""
+"Font1 width: %ld\n"
+"\n"
+msgstr ""
+"Font1-breedte: %ld\n"
+"\n"
+
+msgid "Invalid font specification"
+msgstr "Onjuiste specificatie van lettertype"
+
+msgid "&Dismiss"
+msgstr "&Afwijzen"
+
+msgid "no specific match"
+msgstr "geen specifieke overeenkomst"
+
+msgid "Vim - Font Selector"
+msgstr "Vim - Lettertypekiezer"
+
+msgid "Name:"
+msgstr "Naam:"
+
+#. create toggle button
+msgid "Show size in Points"
+msgstr "Grootte in punten tonen"
+
+msgid "Encoding:"
+msgstr "Codering:"
+
+msgid "Font:"
+msgstr "Lettertype:"
+
+msgid "Style:"
+msgstr "Stijl:"
+
+msgid "Size:"
+msgstr "Grootte:"
+
+msgid "E256: Hangul automata ERROR"
+msgstr "E256: 'Hangul automata'-fout"
+
+msgid "E550: Missing colon"
+msgstr "E550: dubbelepunt ontbreekt"
+
+msgid "E551: Illegal component"
+msgstr "E551: ongeldige component"
+
+msgid "E552: digit expected"
+msgstr "E552: cijfer verwacht"
+
+#, c-format
+msgid "Page %d"
+msgstr "Pagina %d"
+
+msgid "No text to be printed"
+msgstr "Geen tekst om af te drukken"
+
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr "Afdrukken van pagina %d (%d%%)"
+
+#, c-format
+msgid " Copy %d of %d"
+msgstr "Kopie %d van %d"
+
+#, c-format
+msgid "Printed: %s"
+msgstr "Afgedrukt: %s"
+
+msgid "Printing aborted"
+msgstr "Afdrukken afgebroken"
+
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: wegschrijven Postscript-uitvoerbestand is mislukt"
+
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: openen bestand \"%s\" is mislukt"
+
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: kan 'Postscript resource'-bestand \"%s\" niet lezen"
+
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: bestand \"%s\" is geen 'Postscript resource'-bestand"
+
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: bestand \"%s\" is geen ondersteund 'Postscript resource'-bestand"
+
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: 'resource'-bestand \"%s\" heeft verkeerde versie"
+
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: Multi-byte-codering en de tekenverzameling zijn onverenigbaar."
+
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: printmbcharset mag bij multi-byte-codering niet leeg zijn."
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr "E675: geen standaard lettertype opgegeven voor multi-byte-afdrukken."
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: openen van PostScript-uitoverbestand is mislukt"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: Bestand \"%s\" kan niet worden geopend"
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: 'PostScript resource'-bestand \"prolog.ps\" is niet gevonden"
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: 'PostScript resource'-bestand \"cidfont.ps\" is niet gevonden"
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: 'PostScript resource'-bestand \"%s.ps\" is niet gevonden"
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: omzetten naar afdrukcodering \"%s\" is mislukt"
+
+msgid "Sending to printer..."
+msgstr "Naar printer versturen..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: Afdrukken van PostScript-bestand is mislukt"
+
+msgid "Print job sent."
+msgstr "Afdrukopdracht verzonden"
+
+msgid "Add a new database"
+msgstr "Nieuwe databank toevoegen"
+
+msgid "Query for a pattern"
+msgstr "Naar een patroon zoeken"
+
+msgid "Show this message"
+msgstr "Dit bericht tonen"
+
+msgid "Kill a connection"
+msgstr "Een verbinding verbreken"
+
+msgid "Reinit all connections"
+msgstr "Alle verbindingen opnieuw initialiseren"
+
+msgid "Show connections"
+msgstr "Verbindingen tonen"
+
+#, c-format
+msgid "E560: Usage: cs[cope] %s"
+msgstr "E560: Gebruik: cs[cope] %s"
+
+msgid "This cscope command does not support splitting the window.\n"
+msgstr "Deze cscope-opdracht ondersteunt niet het splitsen van het venster.\n"
+
+msgid "E562: Usage: cstag <ident>"
+msgstr "E562: Gebruik: cstag <ident>"
+
+msgid "E257: cstag: tag not found"
+msgstr "E257: cstag: tag is gevonden"
+
+#, c-format
+msgid "E563: stat(%s) error: %d"
+msgstr "E563: bevraag((%s) fout: %d"
+
+msgid "E563: stat error"
+msgstr "E563: bevragingsfout"
+
+#, c-format
+msgid "E564: %s is not a directory or a valid cscope database"
+msgstr "E564: %s is geen map of een geldige cscope-databank"
+
+#, c-format
+msgid "Added cscope database %s"
+msgstr "cscope-databank %s toegevoegd"
+
+#, c-format
+msgid "E262: error reading cscope connection %ld"
+msgstr "E262: lezen van cscope-verbinding %ld is mislukt"
+
+msgid "E561: unknown cscope search type"
+msgstr "E561: soort cscope-zoekopdracht is onbekend"
+
+msgid "E566: Could not create cscope pipes"
+msgstr "E566: aanmaken cscopei-pijp is mislukt"
+
+msgid "E622: Could not fork for cscope"
+msgstr "E622: nieuw cscope-proces beginnen is mislukt"
+
+msgid "cs_create_connection exec failed"
+msgstr "uitvoering cs_create_connection is mislukt"
+
+msgid "cs_create_connection: fdopen for to_fp failed"
+msgstr "cs_create_connection: fdopen voor to_fp is mislukt"
+
+msgid "cs_create_connection: fdopen for fr_fp failed"
+msgstr "cs_create_connection: fdopen voor fr_fp is mislukt"
+
+msgid "E623: Could not spawn cscope process"
+msgstr "E623: voortbrengen cscope-proces is mislukt"
+
+msgid "E567: no cscope connections"
+msgstr "E567: geen cscope-verbindingen"
+
+#, c-format
+msgid "E469: invalid cscopequickfix flag %c for %c"
+msgstr "E469: cscopequickfix-vlag %c voor %c is ongeldig"
+
+#, c-format
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: cscope-zoekopdracht %s van %s leverde geen resultaten"
+
+msgid "cscope commands:\n"
+msgstr "cscope-opdrachten:\n"
+
+#, c-format
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (Gebruik: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find assignments to\n"
+msgstr ""
+"\n"
+"       c: zoek functies die deze functie aanroepen\n"
+"       d: zoek functies die door deze functie worden aangeroepen\n"
+"       e: zoek op dit egrep-patroon\n"
+"       f: zoek dit bestand\n"
+"       g: zoek deze definitie\n"
+"       i: zoek bestanden #inclusief dit bestand\n"
+"       s: zoek dit C-symbool\n"
+"       t: zoek toekenningen aan\n"
+
+#, c-format
+msgid "E625: cannot open cscope database: %s"
+msgstr "E625: openen is mislukt van cscope-databank: %s"
+
+msgid "E626: cannot get cscope database information"
+msgstr "E626: opvragen cscope-databankinformatie is mislukt"
+
+msgid "E568: duplicate cscope database not added"
+msgstr "E568: dubbele cscope-databank is niet toegevoegd"
+
+#, c-format
+msgid "E261: cscope connection %s not found"
+msgstr "E261: cscope-verbinding %s is niet gevonden"
+
+#, c-format
+msgid "cscope connection %s closed"
+msgstr "cscope-verbinding %s is verbroken"
+
+#. should not reach here
+msgid "E570: fatal error in cs_manage_matches"
+msgstr "E570: fatale fout in cs_manage_matches"
+
+#, c-format
+msgid "Cscope tag: %s"
+msgstr "Cscope-tag: %s"
+
+msgid ""
+"\n"
+"   #   line"
+msgstr ""
+"\n"
+"   #   regel"
+
+msgid "filename / context / line\n"
+msgstr "bestandsnaam / context / regel\n"
+
+#, c-format
+msgid "E609: Cscope error: %s"
+msgstr "E609: Cscope-fout: %s"
+
+msgid "All cscope databases reset"
+msgstr "Alle cscope-databanken opnieuw ingesteld"
+
+msgid "no cscope connections\n"
+msgstr "geen cscope-verbindingen\n"
+
+msgid " # pid    database name                       prepend path\n"
+msgstr " # pid    databanknaam                        padvoorvoegsel\n"
+
+msgid "E815: Sorry, this command is disabled, the MzScheme libraries could not be loaded."
+msgstr "E815: helaas, deze opdracht is uitgeschakeld. De MzScheme-bibliotheken kunnen niet geladen worden."
+
+msgid "invalid expression"
+msgstr "ongeldige uitdrukking"
+
+msgid "expressions disabled at compile time"
+msgstr "tijdens compileren zijn de expressies uitgeschakeld"
+
+msgid "hidden option"
+msgstr "verborgen optie"
+
+msgid "unknown option"
+msgstr "onbekende optie"
+
+msgid "window index is out of range"
+msgstr "vensterindex valt buiten het bereik"
+
+msgid "couldn't open buffer"
+msgstr "buffer openen is mislukt"
+
+msgid "cannot save undo information"
+msgstr "herstelinformatie kan niet worden opgeslagen"
+
+msgid "cannot delete line"
+msgstr "regel kan niet worden verwijderd"
+
+msgid "cannot replace line"
+msgstr "regel kan niet worden vervangen"
+
+msgid "cannot insert line"
+msgstr "regel kan niet worden ingevoegd"
+
+msgid "string cannot contain newlines"
+msgstr "tekenreeks kan geen regeleinden bevatten"
+
+msgid "Vim error: ~a"
+msgstr "Vim-fout: ~a"
+
+msgid "Vim error"
+msgstr "Vim-fout"
+
+msgid "buffer is invalid"
+msgstr "buffer is ongeldig"
+
+msgid "window is invalid"
+msgstr "venster is ongeldig"
+
+msgid "linenr out of range"
+msgstr "regelnummer buiten het bereik"
+
+msgid "not allowed in the Vim sandbox"
+msgstr "niet toegestaan in de Vim-zandbak"
+
+msgid "E263: Sorry, this command is disabled, the Python library could not be loaded."
+msgstr "E263: helaas, deze opdracht is uitgeschakeld. De Python-bibliotheek kan niet worden geladen."
+
+msgid "E659: Cannot invoke Python recursively"
+msgstr "E659: Python kan niet recursief worden aangeroepen"
+
+msgid "can't delete OutputObject attributes"
+msgstr "attributen van OutputObject kunnen niet worden verwijderd"
+
+msgid "softspace must be an integer"
+msgstr "zachte spatie moet een geheel getal zijn"
+
+msgid "invalid attribute"
+msgstr "ongeldig attribuut"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines() vereist een lijst met tekenreeksen"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: initialiseren I/O-objecten is mislukt"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "poging om naar een verwijderd buffer te verwijzen"
+
+msgid "line number out of range"
+msgstr "regelnummer valt buiten het bereik"
+
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<buffer-object (verwijderd) bij %p>"
+
+msgid "invalid mark name"
+msgstr "naam markering ongeldig"
+
+msgid "no such buffer"
+msgstr "onbekende buffer"
+
+msgid "attempt to refer to deleted window"
+msgstr "poging om naar een verwijderd venster te verwijzen"
+
+msgid "readonly attribute"
+msgstr "alleen-lezen attribuut"
+
+msgid "cursor position outside buffer"
+msgstr "cursorpositie valt buiten buffer"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<venster-object (verwijderd) bij %p>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<venster-object (onbekend) bij %p>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<venster %d>"
+
+msgid "no such window"
+msgstr "onbekend venster"
+
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ moet een instantie van String zijn"
+
+msgid "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
+msgstr "E266: helaas, deze opdracht is uitgeschakeld. De Ruby-bibliotheek kan niet worden geladen."
+
+msgid "E267: unexpected return"
+msgstr "E267: onverwacht resultaat"
+
+msgid "E268: unexpected next"
+msgstr "E268: onverwachte volgende"
+
+msgid "E269: unexpected break"
+msgstr "E269: onverwachte onderbreking"
+
+msgid "E270: unexpected redo"
+msgstr "E270: onverwachte herstelopdracht"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: hernieuwde poging buiten de reddingsclausule"
+
+msgid "E272: unhandled exception"
+msgstr "E272: niet-afgehandelde uitzondering"
+
+#, c-format
+msgid "E273: unknown longjmp status %d"
+msgstr "E273: onbekende longjmp-status %d"
+
+msgid "Toggle implementation/definition"
+msgstr "Implementatie/definitie wisselen"
+
+msgid "Show base class of"
+msgstr "Toon basisklasse van"
+
+msgid "Show overridden member function"
+msgstr "Toon overschreven member-functie"
+
+msgid "Retrieve from file"
+msgstr "Uit bestand halen"
+
+msgid "Retrieve from project"
+msgstr "Uit project halen"
+
+msgid "Retrieve from all projects"
+msgstr "Uit alle projecten halen"
+
+msgid "Retrieve"
+msgstr "Ophalen"
+
+msgid "Show source of"
+msgstr "Toon broncode van"
+
+msgid "Find symbol"
+msgstr "Zoek symbool"
+
+msgid "Browse class"
+msgstr "Bekijk klasse"
+
+msgid "Show class in hierarchy"
+msgstr "Toon klasse in hierarchie"
+
+msgid "Show class in restricted hierarchy"
+msgstr "Toon klasse in beperkte hierarchie"
+
+msgid "Xref refers to"
+msgstr "Xref verwijst naar"
+
+msgid "Xref referred by"
+msgstr "Xref wordt naar verwezen door"
+
+msgid "Xref has a"
+msgstr "Xref heeft een"
+
+msgid "Xref used by"
+msgstr "Xref gebruikt door"
+
+msgid "Show docu of"
+msgstr "Toon documentatie van"
+
+msgid "Generate docu for"
+msgstr "Genereer documentatie voor"
+
+msgid "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in $PATH).\n"
+msgstr "Verbinden met SNiFF+ is mislukt. Controleer omgevingsvariabelen (sniffemacs moet in $PATH staan).\n"
+
+msgid "E274: Sniff: Error during read. Disconnected"
+msgstr "E274: Sniff: leesfout. Verbroken"
+
+msgid "SNiFF+ is currently "
+msgstr "SNiFF+ is momenteel "
+
+msgid "not "
+msgstr "niet "
+
+msgid "connected"
+msgstr "verbonden"
+
+#, c-format
+msgid "E275: Unknown SNiFF+ request: %s"
+msgstr "E275: onbekend SNiFF+-verzoek: %s"
+
+msgid "E276: Error connecting to SNiFF+"
+msgstr "E276: verbinden met SNiFF+ is mislukt"
+
+msgid "E278: SNiFF+ not connected"
+msgstr "E278: SNiFF+ niet verbonden"
+
+msgid "E279: Not a SNiFF+ buffer"
+msgstr "E279: geen SNiFF+-buffer"
+
+msgid "Sniff: Error during write. Disconnected"
+msgstr "Sniff: schrijven is mislukt. Verbroken"
+
+msgid "invalid buffer number"
+msgstr "buffernummer is ongeldig"
+
+msgid "not implemented yet"
+msgstr "nog niet geïmplementeerd"
+
+#. ???
+msgid "cannot set line(s)"
+msgstr "kan regel(s) niet instellen"
+
+msgid "mark not set"
+msgstr "markering niet ingesteld"
+
+#, c-format
+msgid "row %d column %d"
+msgstr "rij %d kolom %d"
+
+msgid "cannot insert/append line"
+msgstr "invoegen/toevoegen regel is mislukt"
+
+msgid "unknown flag: "
+msgstr "unbekende instelling: "
+
+msgid "unknown vimOption"
+msgstr "onbekende vim-optie"
+
+msgid "keyboard interrupt"
+msgstr "toetsenbord-interrupt"
+
+msgid "vim error"
+msgstr "vim-fout"
+
+msgid "cannot create buffer/window command: object is being deleted"
+msgstr "aanmaken buffer-/vensteropdracht is mislukt: object wordt verwijderd"
+
+msgid "cannot register callback command: buffer/window is already being deleted"
+msgstr " kan 'callback'-opdracht niet registreren: buffer/venster is reeds verwijderd"
+
+#. This should never happen.  Famous last word?
+msgid "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim.org"
+msgstr "E280: TCL FATALE FOUT: reflist misschien corrupt!? Meld dit a.u.b. aan vim-dev@vim.org"
+
+msgid "cannot register callback command: buffer/window reference not found"
+msgstr "'callback'-opdracht kan niet worden geregistreerd: buffer-/vensterreferentie ontbreekt"
+
+msgid "E571: Sorry, this command is disabled: the Tcl library could not be loaded."
+msgstr "E571: Helaas, deze opdracht is uitgeschakeld: het laden van de Tcl-bibliotheek is mislukt."
+
+msgid "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
+msgstr "E281: Tcl-fout: afsluitcode is geen geheel getal!? Meld dit a.u.b. aan vim-dev@vim.org"
+
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572: afsluitcode %d"
+
+msgid "cannot get line"
+msgstr "kan regel niet verkrijgen"
+
+msgid "Unable to register a command server name"
+msgstr "Het registreren van een opdrachtservernaam is mislukt"
+
+msgid "E248: Failed to send command to the destination program"
+msgstr "E248: versturen van opdracht naar het doelprogramma is mislukt"
+
+#, c-format
+msgid "E573: Invalid server id used: %s"
+msgstr "E573: ongeldige server-id gebruikt: %s"
+
+msgid "E251: VIM instance registry property is badly formed.  Deleted!"
+msgstr "E251: registereigenschap van VIM-instantie is misvormd.  Verwijderd!"
+
+msgid "Unknown option argument"
+msgstr "Onbekend optieargument"
+
+msgid "Too many edit arguments"
+msgstr "Teveel bewerkargumenten"
+
+msgid "Argument missing after"
+msgstr "Argument ontbreekt na"
+
+msgid "Garbage after option argument"
+msgstr "Rommel na optieargument"
+
+msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
+msgstr "Teveel \"+opdracht\", \"-c opdracht\" of \"--cmd opdracht\"-argumenten"
+
+msgid "Invalid argument for"
+msgstr "Ongeldig argument voor"
+
+#, c-format
+msgid "%d files to edit\n"
+msgstr "%d bestanden om te bewerken\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "Netbeans wordt door deze GUI niet ondersteund\n"
+
+msgid "This Vim was not compiled with the diff feature."
+msgstr "Deze Vim is niet met de diff-functionaliteit gecompileerd"
+
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "'-nb' kan niet worden gebruikt: was tijdens compilatie niet ingeschakeld\n"
+
+msgid "Attempt to open script file again: \""
+msgstr "Poging scriptbestand wederom te openen: \""
+
+msgid "Cannot open for reading: \""
+msgstr "Openen om te lezen is mislukt: \""
+
+msgid "Cannot open for script output: \""
+msgstr "Openen voor script-uitvoer is mislukt: \""
+
+msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+msgstr "Vim: Fout: gvim starten vanuit Netbeans is mislukt\n"
+
+msgid "Vim: Warning: Output is not to a terminal\n"
+msgstr "Vim: Waarschuwing: Uitvoer gaan niet naar een terminal\n"
+
+msgid "Vim: Warning: Input is not from a terminal\n"
+msgstr "Vim: Waarschuwing: Invoer komt niet van een terminal\n"
+
+#. just in case..
+msgid "pre-vimrc command line"
+msgstr "pre-vimrc-opdracjtregel"
+
+#, c-format
+msgid "E282: Cannot read from \"%s\""
+msgstr "E282: Kan niet lezen vanuit \"%s\""
+
+msgid ""
+"\n"
+"More info with: \"vim -h\"\n"
+msgstr ""
+"\n"
+"Meer informatie via: \"vim -h\"\n"
+
+msgid "[file ..]       edit specified file(s)"
+msgstr "[bestand ..]       bewerk opgegeven bestand(en)"
+
+msgid "-               read text from stdin"
+msgstr "-               lees tekst vanuit stdin"
+
+msgid "-t tag          edit file where tag is defined"
+msgstr "-t tag          bewerk bestand waar tag is gedefinieerd"
+
+msgid "-q [errorfile]  edit file with first error"
+msgstr "-q [foutbestand]  bewerk bestand dat eerste fout bevat"
+
+msgid ""
+"\n"
+"\n"
+"usage:"
+msgstr ""
+"\n"
+"\n"
+"Gebruik:"
+
+msgid " vim [arguments] "
+msgstr " vim [argumenten] "
+
+msgid ""
+"\n"
+"   or:"
+msgstr ""
+"\n"
+"   of:"
+
+msgid ""
+"\n"
+"Where case is ignored prepend / to make flag upper case"
+msgstr ""
+"\n"
+"Daar waar hoofdletters genegeerd worden kan met / vlag in hoofdletters gezet worden"
+
+msgid ""
+"\n"
+"\n"
+"Arguments:\n"
+msgstr ""
+"\n"
+"\n"
+"Argumenten:\n"
+
+msgid "--\t\t\tOnly file names after this"
+msgstr "--\t\t\tHierna alleen bestandsnamen"
+
+msgid "--literal\t\tDon't expand wildcards"
+msgstr "--literal\t\tJokertekens niet vervangen"
+
+msgid "-register\t\tRegister this gvim for OLE"
+msgstr "-register\t\tDeze gvim voor OLE registreren"
+
+msgid "-unregister\t\tUnregister gvim for OLE"
+msgstr "-unregister\t\tgvim afmelden voor OLE"
+
+msgid "-g\t\t\tRun using GUI (like \"gvim\")"
+msgstr "-g\t\t\tMet GUI opstarten (zoals \"gvim\")"
+
+msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
+msgstr "-f  of  --nofork\tVoorgrond: niet afsplitsen tijdens opstarten GUI"
+
+msgid "-v\t\t\tVi mode (like \"vi\")"
+msgstr "-v\t\t\tVi-modus (zoals \"vi\")"
+
+msgid "-e\t\t\tEx mode (like \"ex\")"
+msgstr "-e\t\t\tEx-modus (zoals \"ex\")"
+
+msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+msgstr "-s\t\t\tStille (bulk)modus (alleen bij \"ex\")"
+
+msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
+msgstr "-d\t\t\tDiff-modus (zoals \"vimdiff\")"
+
+msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
+msgstr "-y\t\t\tEenvoudige modus (zoals \"evim\", zonder modus)"
+
+msgid "-R\t\t\tReadonly mode (like \"view\")"
+msgstr "-R\t\t\tAlleen-lezen modus (zoals \"view\")"
+
+msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
+msgstr "-Z\t\t\tBeperkte modus (zoals \"rvim\")"
+
+msgid "-m\t\t\tModifications (writing files) not allowed"
+msgstr "-m\t\t\tAanpassingen (bestanden opslaan) niet toegestaan"
+
+msgid "-M\t\t\tModifications in text not allowed"
+msgstr "-M\t\t\tTekstuele aanpassingen niet toegestaan"
+
+msgid "-b\t\t\tBinary mode"
+msgstr "-b\t\t\tBinaire modus"
+
+msgid "-l\t\t\tLisp mode"
+msgstr "-l\t\t\tLisp-modus"
+
+msgid "-C\t\t\tCompatible with Vi: 'compatible'"
+msgstr "-C\t\t\tUitwisselbaar met Vi: 'compatible'"
+
+msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
+msgstr "-N\t\t\tNiet volledig met Vi uitwisselbaar: 'nocompatible'"
+
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr "-V[N][fname]\t\tWees uitbundig [niveau N] [schrijf berichten naar fname]"
+
+msgid "-D\t\t\tDebugging mode"
+msgstr "-D\t\t\tFoutopspoormodus"
+
+msgid "-n\t\t\tNo swap file, use memory only"
+msgstr "-n\t\t\tGeen wisselbestand, alleen geheugen gebruiken"
+
+msgid "-r\t\t\tList swap files and exit"
+msgstr "-r\t\t\tWisselbestanden tonen en stoppen"
+
+msgid "-r (with file name)\tRecover crashed session"
+msgstr "-r (bestandsnaam)\tHerstel ontspoorde sessie"
+
+msgid "-L\t\t\tSame as -r"
+msgstr "-L\t\t\tGelijk aan -r"
+
+msgid "-f\t\t\tDon't use newcli to open window"
+msgstr "-f\t\t\tGebruik geen newcli om venster te openen"
+
+msgid "-dev <device>\t\tUse <device> for I/O"
+msgstr "-dev <device>\t\tGebruik <device> voor in- en uitvoer"
+
+msgid "-A\t\t\tstart in Arabic mode"
+msgstr "-A\t\t\tIn Arabische modus starten"
+
+msgid "-H\t\t\tStart in Hebrew mode"
+msgstr "-H\t\t\tIn Hebrewsche modus starten"
+
+msgid "-F\t\t\tStart in Farsi mode"
+msgstr "-F\t\t\tIn Perzische modus starten"
+
+msgid "-T <terminal>\tSet terminal type to <terminal>"
+msgstr "-T <terminal>\tTerminalsoort op <terminal> instellen"
+
+msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
+msgstr "-u <vimrc>\t\tGebruik <vimrc> in plaats van enige .vimrc"
+
+msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
+msgstr "-U <gvimrc>\t\tGebruik <gvimrc> in plaats van enige .gvimrc"
+
+msgid "--noplugin\t\tDon't load plugin scripts"
+msgstr "--noplugin\t\tGeen plugin-scripts laden"
+
+msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+msgstr "-p[N]\t\tN tabpagina's openen (standaard: 1 per bestand)"
+
+msgid "-o[N]\t\tOpen N windows (default: one for each file)"
+msgstr "-o[N]\t\tN vensters openen (standaard: 1 per bestand)"
+
+msgid "-O[N]\t\tLike -o but split vertically"
+msgstr "-O[N]\t\tGelijk aan -o maar vertikaal gesplitst"
+
+msgid "+\t\t\tStart at end of file"
+msgstr "+\t\t\tAan einde van bestand beginnen"
+
+msgid "+<lnum>\t\tStart at line <lnum>"
+msgstr "+<lnum>\t\tOp regel <lnum> beginnen"
+
+msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
+msgstr "--cmd <opdracht>\tOpdracht <opdracht> uitvoeren voor enige vimrc-bestand"
+
+msgid "-c <command>\t\tExecute <command> after loading the first file"
+msgstr "-c <opdracht>\t\tOpdracht <opdracht> uitvoeren na eerste bestand"
+
+msgid "-h  or  --help\tPrint Help (this message) and exit"
+msgstr "-h  of  --help\tDit bericht tonen en stoppen"
+
+msgid "--version\t\tPrint version information and exit"
+msgstr "--version\t\tVersieinformatie tonen en stoppen"
+
+msgid "E298: Didn't get block nr 0?"
+msgstr "E298: Ophalen blok nummer 0 mislukt?"
+
+msgid "E298: Didn't get block nr 1?"
+msgstr "E298: Ophalen blok nummer 1 mislukt?"
+
+msgid "E298: Didn't get block nr 2?"
+msgstr "E298: Ophalen blok nummer 2 mislukt?"
+
+#. could not (re)open the swap file, what can we do????
+msgid "E301: Oops, lost the swap file!!!"
+msgstr "E301: Helaas, wisselbestand is verdwenen!!!"
+
+msgid "Enter number of swap file to use (0 to quit): "
+msgstr "Typ het nummer van het wisselbestand om te gebruiken (0 om te stoppen): "
+
+#, c-format
+msgid "Using swap file \"%s\""
+msgstr "Toepassen van wisselbestand \"%s\""
+
+#, c-format
+msgid "Original file \"%s\""
+msgstr "Oorspronkelijke bestand \"%s\""
+
+msgid "Recovery completed. You should check if everything is OK."
+msgstr "Herstel is afgerond. Controleer of het resultaat juist is."
+
+msgid ""
+"\n"
+"(You might want to write out this file under another name\n"
+msgstr ""
+"\n"
+"(Een advies is dit bestand onder een andere naam op te slaan\n"
+
+msgid "and run diff with the original file to check for changes)"
+msgstr "en met 'diff' te controleren op wijzigingen)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "Herstel is afgerond. Inhoud van het buffer komt overeen met de bestandsinhoud."
+
+msgid ""
+"\n"
+"You may want to delete the .swp file now.\n"
+"\n"
+msgstr ""
+"\n"
+"Het .swp-bestand kan nu verwijderd worden.\n"
+"\n"
+
+#. use msg() to start the scrolling properly
+msgid "Swap files found:"
+msgstr "Gevonden wisselbestanden:"
+
+msgid "   In current directory:\n"
+msgstr "   In huidige map:\n"
+
+msgid "   Using specified name:\n"
+msgstr "   Gebruikt opgegeven naam:\n"
+
+msgid "   In directory "
+msgstr "   In map "
+
+msgid "      -- none --\n"
+msgstr "      -- geen --\n"
+
+msgid "          owned by: "
+msgstr "          eigenaar: "
+
+msgid "   dated: "
+msgstr "   datum: "
+
+msgid "             dated: "
+msgstr "             datum: "
+
+msgid "         [from Vim version 3.0]"
+msgstr "         [van Vim-versie 3.0]"
+
+msgid "         [does not look like a Vim swap file]"
+msgstr "         [lijkt geen Vvim-wisselbestand te zijn]"
+
+msgid "         file name: "
+msgstr "      bestandsnaam: "
+
+msgid ""
+"\n"
+"          modified: "
+msgstr ""
+"\n"
+"           bewerkt: "
+
+msgid "YES"
+msgstr "JA"
+
+msgid "no"
+msgstr "nee"
+
+msgid ""
+"\n"
+"         user name: "
+msgstr ""
+"\n"
+"    gebruikersnaam: "
+
+msgid "   host name: "
+msgstr "  host-naam:"
+
+msgid ""
+"\n"
+"         host name: "
+msgstr ""
+"\n"
+"         host-naam: "
+
+msgid ""
+"\n"
+"        process ID: "
+msgstr ""
+"\n"
+"         proces-id: "
+
+msgid " (still running)"
+msgstr "    (nog actief)"
+
+msgid ""
+"\n"
+"         [not usable with this version of Vim]"
+msgstr ""
+"\n"
+"         [onbruikbaar met deze versie van Vim]"
+
+msgid ""
+"\n"
+"         [not usable on this computer]"
+msgstr ""
+"\n"
+"         [onbruikbaar op deze computer]"
+
+msgid "         [cannot be read]"
+msgstr "         [lezen is onmogelijk]"
+
+msgid "         [cannot be opened]"
+msgstr "         [openen is onmogelijk]"
+
+msgid "E313: Cannot preserve, there is no swap file"
+msgstr "E313: kan niet worden behouden, want er is geen wisselbestand"
+
+msgid "File preserved"
+msgstr "Bestand behouden"
+
+msgid "E314: Preserve failed"
+msgstr "E314: behouden is mislukt"
+
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773: Symbolische koppelingslus voor \"%s\""
+
+msgid "E325: ATTENTION"
+msgstr "E325: OPGELET"
+
+msgid ""
+"\n"
+"Found a swap file by the name \""
+msgstr ""
+"\n"
+"Er is een wisselbestand aangetroffen met de naam \""
+
+msgid "While opening file \""
+msgstr "bij het openen van bestand \""
+
+msgid "      NEWER than swap file!\n"
+msgstr "    NIEUWER dan het wisselbestand!\n"
+
+#. Some of these messages are long to allow translation to
+#. * other languages.
+msgid ""
+"\n"
+"(1) Another program may be editing the same file.\n"
+"    If this is the case, be careful not to end up with two\n"
+"    different instances of the same file when making changes.\n"
+msgstr ""
+"\n"
+"(1) Mogelijk wordt dit bestand met een ander programma bewerkt.\n"
+"    Als dit het geval is, pas dan op niet met twee verschillende\n"
+"    versies van hetzelfde bestand te eindigen bij het bewerken.\n"
+
+msgid "    Quit, or continue with caution.\n"
+msgstr "    Stop of ga aandachtig verder.\n"
+
+msgid ""
+"\n"
+"(2) An edit session for this file crashed.\n"
+msgstr ""
+"\n"
+"(2) Een sessie waarin dit bestand werd bewerkt is onverhoeds gestopt.\n"
+
+msgid "    If this is the case, use \":recover\" or \"vim -r "
+msgstr "    Als dit het geval is, gebruikt dan \":recover\" of \"vim -r "
+
+msgid ""
+"\"\n"
+"    to recover the changes (see \":help recovery\").\n"
+msgstr ""
+"\"\n"
+"    om de aanpassingen te herstellen (zie \":help recovery\").\n"
+
+msgid "    If you did this already, delete the swap file \""
+msgstr "    Als dit al gedaan is, verwijder dan het wisselbestand \""
+
+msgid ""
+"\"\n"
+"    to avoid this message.\n"
+msgstr ""
+"\"\n"
+"    om dit bericht te voorkomen.\n"
+
+msgid "Swap file \""
+msgstr "Wisselbestand \""
+
+msgid "\" already exists!"
+msgstr "\" bestaat al!"
+
+msgid "VIM - ATTENTION"
+msgstr "VIM - OPGELET"
+
+msgid "Swap file already exists!"
+msgstr "Wisselbestand bestaat reeds."
+
+msgid ""
+"&Open Read-Only\n"
+"&Edit anyway\n"
+"&Recover\n"
+"&Quit\n"
+"&Abort"
+msgstr ""
+"Alleen-lezen &openen\n"
+"Toch b&ewerken\n"
+"He&rstellen\n"
+"&Stoppen\n"
+"&Afbreken"
+
+msgid ""
+"&Open Read-Only\n"
+"&Edit anyway\n"
+"&Recover\n"
+"&Delete it\n"
+"&Quit\n"
+"&Abort"
+msgstr ""
+"Alleen-lezen &openen\n"
+"Toch b&ewerken\n"
+"He&rstellen\n"
+"Verwij&deren\n"
+"&Stoppen\n"
+"&Afbreken"
+
+msgid "E326: Too many swap files found"
+msgstr "E326: teveel wisselbestanden aangetroffen"
+
+msgid "E327: Part of menu-item path is not sub-menu"
+msgstr "E327: deel van menu-itempad is geen submenu"
+
+msgid "E328: Menu only exists in another mode"
+msgstr "E328: menu bestaat alleen in andere modus"
+
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: geen menu \"%s\""
+
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: menunaam is leeg"
+
+#, c-format
+#~ msgid "E335: Menu not defined for %s mode"
+#~ msgstr ""
+
+#~ msgid "E336: Menu path must lead to a sub-menu"
+#~ msgstr ""
+
+#~ msgid "E337: Menu not found - check menu names"
+#~ msgstr ""
+
+#, c-format
+msgid "Error detected while processing %s:"
+msgstr "Fout opgetreden tijdens verwerken van %s:"
+
+#, c-format
+msgid "line %4ld:"
+msgstr "regel %4ld:"
+
+#, c-format
+#~ msgid "E354: Invalid register name: '%s'"
+#~ msgstr ""
+
+msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
+msgstr "Vertaald door: Erwin Poeze <erwin.poeze@gmail.com>"
+
+#~ msgid "Interrupt: "
+#~ msgstr ""
+
+msgid "Press ENTER or type command to continue"
+msgstr "Toets ENTER of typ een opdracht om verder te gaan"
+
+#, c-format
+msgid "%s line %ld"
+msgstr "%s regel %ld"
+
+msgid "-- More --"
+msgstr "-- meer --"
+
+#~ msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+#~ msgstr ""
+
+msgid "Question"
+msgstr "Vraag"
+
+#~ msgid ""
+#~ "&Yes\n"
+#~ "&No"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "&Yes\n"
+#~ "&No\n"
+#~ "Save &All\n"
+#~ "&Discard All\n"
+#~ "&Cancel"
+#~ msgstr ""
+
+#~ msgid "Select Directory dialog"
+#~ msgstr ""
+
+#~ msgid "Save File dialog"
+#~ msgstr ""
+
+#~ msgid "Open File dialog"
+#~ msgstr ""
+
+#. TODO: non-GUI file selector here
+#~ msgid "E338: Sorry, no file browser in console mode"
+#~ msgstr ""
+
+#~ msgid "E766: Insufficient arguments for printf()"
+#~ msgstr ""
+
+#~ msgid "E807: Expected Float argument for printf()"
+#~ msgstr ""
+
+#~ msgid "E767: Too many arguments to printf()"
+#~ msgstr ""
+
+#~ msgid "W10: Warning: Changing a readonly file"
+#~ msgstr ""
+
+#~ msgid "Type number and <Enter> or click with mouse (empty cancels): "
+#~ msgstr ""
+
+#~ msgid "Type number and <Enter> (empty cancels): "
+#~ msgstr ""
+
+msgid "1 more line"
+msgstr "1 regel meer"
+
+msgid "1 line less"
+msgstr "1 regel minder"
+
+#, c-format
+msgid "%ld more lines"
+msgstr "%ld regels meer"
+
+#, c-format
+msgid "%ld fewer lines"
+msgstr "%ld regels minder"
+
+msgid " (Interrupted)"
+msgstr " (onderbroken)"
+
+msgid "Beep!"
+msgstr "biep!"
+
+#~ msgid "Vim: preserving files...\n"
+#~ msgstr ""
+
+#. close all memfiles, without deleting
+#~ msgid "Vim: Finished.\n"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "ERROR: "
+#~ msgstr ""
+
+#, c-format
+#~ msgid ""
+#~ "\n"
+#~ "[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n"
+#~ msgstr ""
+
+#, c-format
+#~ msgid ""
+#~ "[calls] total re/malloc()'s %lu, total free()'s %lu\n"
+#~ "\n"
+#~ msgstr ""
+
+#~ msgid "E340: Line is becoming too long"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E341: Internal error: lalloc(%ld, )"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E342: Out of memory!  (allocating %lu bytes)"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Calling shell to execute: \"%s\""
+#~ msgstr ""
+
+#~ msgid "E545: Missing colon"
+#~ msgstr ""
+
+#~ msgid "E546: Illegal mode"
+#~ msgstr ""
+
+#~ msgid "E547: Illegal mouseshape"
+#~ msgstr ""
+
+#~ msgid "E548: digit expected"
+#~ msgstr ""
+
+#~ msgid "E549: Illegal percentage"
+#~ msgstr ""
+
+#~ msgid "Enter encryption key: "
+#~ msgstr ""
+
+#~ msgid "Enter same key again: "
+#~ msgstr ""
+
+#~ msgid "Keys don't match!"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E343: Invalid path: '**[number]' must be at the end of the path or be followed by '%s'."
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E344: Can't find directory \"%s\" in cdpath"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E345: Can't find file \"%s\" in path"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E346: No more directory \"%s\" found in cdpath"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E347: No more file \"%s\" found in path"
+#~ msgstr ""
+
+#~ msgid "Cannot connect to Netbeans #2"
+#~ msgstr ""
+
+#~ msgid "Cannot connect to Netbeans"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
+#~ msgstr ""
+
+#~ msgid "read from Netbeans socket"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E658: NetBeans connection lost for buffer %ld"
+#~ msgstr ""
+
+#~ msgid "E511: netbeans already connected"
+#~ msgstr ""
+
+#~ msgid "E505: "
+#~ msgstr ""
+
+#~ msgid "E349: No identifier under cursor"
+#~ msgstr ""
+
+#~ msgid "E774: 'operatorfunc' is empty"
+#~ msgstr ""
+
+#~ msgid "E775: Eval feature not available"
+#~ msgstr ""
+
+msgid "Warning: terminal cannot highlight"
+msgstr "waarschuwing: terminal kan niet oplichten"
+
+#~ msgid "E348: No string under cursor"
+#~ msgstr ""
+
+#~ msgid "E352: Cannot erase folds with current 'foldmethod'"
+#~ msgstr ""
+
+msgid "E664: changelist is empty"
+msgstr "E664: wijzigingslijst is leeg"
+
+msgid "E662: At start of changelist"
+msgstr "E662: begin van wijzigingslijst"
+
+msgid "E663: At end of changelist"
+msgstr "E663: einde van wijzigingslijst"
+
+msgid "Type  :quit<Enter>  to exit Vim"
+msgstr "Typ :quit<Enter> om Vim te verlaten"
+
+#, c-format
+msgid "1 line %sed 1 time"
+msgstr "1 regel %sed 1 maal"
+
+#, c-format
+msgid "1 line %sed %d times"
+msgstr "1 regel %sed %d maal"
+
+#, c-format
+msgid "%ld lines %sed 1 time"
+msgstr "%ld regels %sed 1 maal"
+
+#, c-format
+msgid "%ld lines %sed %d times"
+msgstr "%ld regels %sed %d maal"
+
+#, c-format
+msgid "%ld lines to indent... "
+msgstr "%ld in te springen regels... "
+
+msgid "1 line indented "
+msgstr "1 regel ingesprongen "
+
+#, c-format
+msgid "%ld lines indented "
+msgstr "%ld regels ingesprongen "
+
+#~ msgid "E748: No previously used register"
+#~ msgstr ""
+
+#. must display the prompt
+msgid "cannot yank; delete anyway"
+msgstr "kopiëren niet mogelijk; toch verwijderd"
+
+msgid "1 line changed"
+msgstr "1 regel gewijzigd"
+
+#, c-format
+msgid "%ld lines changed"
+msgstr "%ld regels gewijzigd"
+
+#, c-format
+#~ msgid "freeing %ld lines"
+#~ msgstr ""
+
+msgid "block of 1 line yanked"
+msgstr "blok van 1 regel gekopieerd"
+
+msgid "1 line yanked"
+msgstr "1 regel gekopieerd"
+
+#, c-format
+msgid "block of %ld lines yanked"
+msgstr "blok van %ld regels gekopieerd"
+
+#, c-format
+msgid "%ld lines yanked"
+msgstr "%ld regels gekopieerd"
+
+#, c-format
+msgid "E353: Nothing in register %s"
+msgstr "E353: niets in register %s"
+
+#. Highlight title
+msgid ""
+"\n"
+"--- Registers ---"
+msgstr ""
+"\n"
+"--- Registers ---"
+
+msgid "Illegal register name"
+msgstr "ongeldige registernaam"
+
+#, c-format
+msgid ""
+"\n"
+"# Registers:\n"
+msgstr ""
+"\n"
+"# Registers:\n"
+
+#, c-format
+#~ msgid "E574: Unknown register type %d"
+#~ msgstr ""
+
+#, c-format
+msgid "%ld Cols; "
+msgstr "%ld koln; "
+
+#, c-format
+msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
+msgstr "geselecteerd %s%ld van %ld regels; %ld van %ld woorden; %ld van %ld bytes"
+
+#, c-format
+msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"
+msgstr "geselecteerd %s%ld van %ld regels; %ld van %ld woorden; %ld van %ld rekens; %ld van %ld bytes"
+
+#, c-format
+msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
+msgstr "kol %s van %s; regel %ld van %ld; woord %ld van %ld; byte %ld van %ld"
+
+#, c-format
+msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"
+msgstr "kol %s van %s; regel %ld van %ld; woord %ld van %ld; teken %ld van %ld; byte %ld van %ld"
+
+#, c-format
+msgid "(+%ld for BOM)"
+msgstr "(+%ld voor BOD)"
+
+msgid "%<%f%h%m%=Page %N"
+msgstr "%<%f%h%m%=pagina %N"
+
+msgid "Thanks for flying Vim"
+msgstr "Dank voor het gebruik van Vim"
+
+msgid "E518: Unknown option"
+msgstr "E518: onbekende optie"
+
+msgid "E519: Option not supported"
+msgstr "E519: optie niet ondersteund"
+
+#~ msgid "E520: Not allowed in a modeline"
+#~ msgstr ""
+
+#~ msgid "E521: Number required after ="
+#~ msgstr ""
+
+#~ msgid "E522: Not found in termcap"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E539: Illegal character <%s>"
+#~ msgstr ""
+
+#~ msgid "E529: Cannot set 'term' to empty string"
+#~ msgstr ""
+
+#~ msgid "E530: Cannot change term in GUI"
+#~ msgstr ""
+
+#~ msgid "E531: Use \":gui\" to start the GUI"
+#~ msgstr ""
+
+#~ msgid "E589: 'backupext' and 'patchmode' are equal"
+#~ msgstr ""
+
+#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
+#~ msgstr ""
+
+#~ msgid "E524: Missing colon"
+#~ msgstr ""
+
+#~ msgid "E525: Zero length string"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E526: Missing number after <%s>"
+#~ msgstr ""
+
+#~ msgid "E527: Missing comma"
+#~ msgstr ""
+
+#~ msgid "E528: Must specify a ' value"
+#~ msgstr ""
+
+#~ msgid "E595: contains unprintable or wide character"
+#~ msgstr ""
+
+#~ msgid "E596: Invalid font(s)"
+#~ msgstr ""
+
+#~ msgid "E597: can't select fontset"
+#~ msgstr ""
+
+#~ msgid "E598: Invalid fontset"
+#~ msgstr ""
+
+#~ msgid "E533: can't select wide font"
+#~ msgstr ""
+
+#~ msgid "E534: Invalid wide font"
+#~ msgstr ""
+
+#, c-format
+msgid "E535: Illegal character after <%c>"
+msgstr "E535: ongeldig teken na <%c>"
+
+msgid "E536: comma required"
+msgstr "E536: komma is vereist"
+
+#, c-format
+msgid "E537: 'commentstring' must be empty or contain %s"
+msgstr "E537: 'commentstring' moet leeg zijn of het volgende bevatten: %s"
+
+msgid "E538: No mouse support"
+msgstr "E538: geen muisondersteuning"
+
+msgid "E540: Unclosed expression sequence"
+msgstr "E540: ongepaarde expressie-volgorde"
+
+msgid "E541: too many items"
+msgstr "E541: teveel items"
+
+msgid "E542: unbalanced groups"
+msgstr "E542: ongepaarde groepen"
+
+msgid "E590: A preview window already exists"
+msgstr "E590: een voorvertoningsvenster bestaat al"
+
+msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
+msgstr "W17: Arabisch vereist UTF-8, typ ':set encoding=utf-8'"
+
+#, c-format
+msgid "E593: Need at least %d lines"
+msgstr "E593: vereist minstens %d regels"
+
+#, c-format
+msgid "E594: Need at least %d columns"
+msgstr "E594: vereist minstens %d kolommen"
+
+#, c-format
+msgid "E355: Unknown option: %s"
+msgstr "E355: onbekende optie: %s"
+
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521: 'Number' vereist: &%s = '%s'"
+
+msgid ""
+"\n"
+"--- Terminal codes ---"
+msgstr ""
+"\n"
+"--- Terminal-codes ---"
+
+msgid ""
+"\n"
+"--- Global option values ---"
+msgstr ""
+"\n"
+"--- Globale optiewaarden ---"
+
+msgid ""
+"\n"
+"--- Local option values ---"
+msgstr ""
+"\n"
+"--- Lokale optiewaarden ---"
+
+msgid ""
+"\n"
+"--- Options ---"
+msgstr ""
+"\n"
+"--- Opties ---"
+
+#~ msgid "E356: get_varp ERROR"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E357: 'langmap': Matching character missing for %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E358: 'langmap': Extra characters after semicolon: %s"
+#~ msgstr ""
+
+msgid "cannot open "
+msgstr "gefaald tijden openen van "
+
+msgid "VIM: Can't open window!\n"
+msgstr "VIM: kan venster niet openen!\n"
+
+msgid "Need Amigados version 2.04 or later\n"
+msgstr "Vereist Amigados versie 2.04 of nieuwer\n"
+
+#, c-format
+msgid "Need %s version %ld\n"
+msgstr "Vereist %s versie %ld\n"
+
+#~ msgid "Cannot open NIL:\n"
+#~ msgstr ""
+
+msgid "Cannot create "
+msgstr "Gefaald tijdens aanmaken van "
+
+#, c-format
+msgid "Vim exiting with %d\n"
+msgstr "Vim stoppen met %d\n"
+
+#~ msgid "cannot change console mode ?!\n"
+#~ msgstr ""
+
+#~ msgid "mch_get_shellsize: not a console??\n"
+#~ msgstr ""
+
+#. if Vim opened a window: Executing a shell may cause crashes
+#~ msgid "E360: Cannot execute shell with -f option"
+#~ msgstr ""
+
+#~ msgid "Cannot execute "
+#~ msgstr ""
+
+#~ msgid "shell "
+#~ msgstr ""
+
+#~ msgid " returned\n"
+#~ msgstr ""
+
+#~ msgid "ANCHOR_BUF_SIZE too small."
+#~ msgstr ""
+
+#~ msgid "I/O ERROR"
+#~ msgstr ""
+
+#~ msgid "Message"
+#~ msgstr ""
+
+#~ msgid "'columns' is not 80, cannot execute external commands"
+#~ msgstr ""
+
+#~ msgid "E237: Printer selection failed"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "to %s on %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E613: Unknown printer font: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E238: Print error: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Printing '%s'"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E245: Illegal char '%c' in font name \"%s\""
+#~ msgstr ""
+
+#~ msgid "E366: Invalid 'osfiletype' option - using Text"
+#~ msgstr ""
+
+msgid "Vim: Double signal, exiting\n"
+msgstr "Vim: dubbel signaal, stoppen\n"
+
+#, c-format
+msgid "Vim: Caught deadly signal %s\n"
+msgstr "Vim: fataal signaal gevangen %s\n"
+
+#, c-format
+msgid "Vim: Caught deadly signal\n"
+msgstr "Vim: fataal signaal gevangen\n"
+
+#, c-format
+msgid "Opening the X display took %ld msec"
+msgstr "Openen van X-display vereiste %ld ms"
+
+#~ msgid ""
+#~ "\n"
+#~ "Vim: Got X error\n"
+#~ msgstr ""
+
+#~ msgid "Testing the X display failed"
+#~ msgstr ""
+
+#~ msgid "Opening the X display timed out"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "Could not get security context for "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "Could not set security context for "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "Cannot execute shell "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "Cannot execute shell sh\n"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "shell returned "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "Cannot create pipes\n"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "Cannot fork\n"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "Command terminated\n"
+#~ msgstr ""
+
+#~ msgid "XSMP lost ICE connection"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "dlerror = \"%s\""
+#~ msgstr ""
+
+#~ msgid "Opening the X display failed"
+#~ msgstr ""
+
+#~ msgid "XSMP handling save-yourself request"
+#~ msgstr ""
+
+#~ msgid "XSMP opening connection"
+#~ msgstr ""
+
+#~ msgid "XSMP ICE connection watch failed"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "XSMP SmcOpenConnection failed: %s"
+#~ msgstr ""
+
+msgid "At line"
+msgstr "Bij regel"
+
+#~ msgid "Could not load vim32.dll!"
+#~ msgstr ""
+
+msgid "VIM Error"
+msgstr "Vim-fout"
+
+#~ msgid "Could not fix up function pointers to the DLL!"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "shell returned %d"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Vim: Caught %s event\n"
+#~ msgstr ""
+
+msgid "close"
+msgstr "sluiten"
+
+msgid "logoff"
+msgstr "uitloggen"
+
+msgid "shutdown"
+msgstr "afsluiten"
+
+msgid "E371: Command not found"
+msgstr "E371: opdracht niet gevonden"
+
+#~ msgid ""
+#~ "VIMRUN.EXE not found in your $PATH.\n"
+#~ "External commands will not pause after completion.\n"
+#~ "See  :help win32-vimrun  for more information."
+#~ msgstr ""
+
+msgid "Vim Warning"
+msgstr "Vim-waarschuwing"
+
+#, c-format
+#~ msgid "E372: Too many %%%c in format string"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E373: Unexpected %%%c in format string"
+#~ msgstr ""
+
+#~ msgid "E374: Missing ] in format string"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E375: Unsupported %%%c in format string"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E376: Invalid %%%c in format string prefix"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E377: Invalid %%%c in format string"
+#~ msgstr ""
+
+#~ msgid "E378: 'errorformat' contains no pattern"
+#~ msgstr ""
+
+#~ msgid "E379: Missing or empty directory name"
+#~ msgstr ""
+
+#~ msgid "E553: No more items"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "(%d of %d)%s%s: "
+#~ msgstr ""
+
+#~ msgid " (line deleted)"
+#~ msgstr ""
+
+#~ msgid "E380: At bottom of quickfix stack"
+#~ msgstr ""
+
+#~ msgid "E381: At top of quickfix stack"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "error list %d of %d; %d errors"
+#~ msgstr ""
+
+#~ msgid "E382: Cannot write, 'buftype' option is set"
+#~ msgstr ""
+
+#~ msgid "E683: File name missing or invalid pattern"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Cannot open file \"%s\""
+#~ msgstr ""
+
+msgid "E681: Buffer is not loaded"
+msgstr "E681: buffer is niet geladen"
+
+#~ msgid "E777: String or List expected"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E369: invalid item in %s%%[]"
+#~ msgstr ""
+
+#~ msgid "E339: Pattern too long"
+#~ msgstr ""
+
+#~ msgid "E50: Too many \\z("
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E51: Too many %s("
+#~ msgstr ""
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: \\z( is niet gepaard"
+
+#, c-format
+msgid "E53: Unmatched %s%%("
+msgstr "E53: %s%%( is niet gepaard"
+
+#, c-format
+msgid "E54: Unmatched %s("
+msgstr "E54: %s( is niet gepaard"
+
+#, c-format
+msgid "E55: Unmatched %s)"
+msgstr "E55: %s) is ongepaard"
+
+#, c-format
+#~ msgid "E59: invalid character after %s@"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E60: Too many complex %s{...}s"
+#~ msgstr ""
+
+#, c-format
+msgid "E61: Nested %s*"
+msgstr "E61: geneste %s*"
+
+#, c-format
+msgid "E62: Nested %s%c"
+msgstr "E62: geneste %s%c"
+
+msgid "E63: invalid use of \\_"
+msgstr "E63: onjuist gebruikt van \\_"
+
+#, c-format
+msgid "E64: %s%c follows nothing"
+msgstr "E64: %s%c volgt op niets"
+
+msgid "E65: Illegal back reference"
+msgstr "E65: ongeldige terugverwijzing"
+
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( hier niet toegestaan"
+
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 en andere hier niet toegestaan"
+
+msgid "E68: Invalid character after \\z"
+msgstr "E68: ongeldig teken na \\z"
+
+#, c-format
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: ontbrekende ] na %s%%["
+
+#, c-format
+msgid "E70: Empty %s%%[]"
+msgstr "E70: leeg %s%%[]"
+
+#, c-format
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678: onjuist teken na %s%%[dxouU]"
+
+#, c-format
+msgid "E71: Invalid character after %s%%"
+msgstr "E71: onjuist teken na %s%%"
+
+#, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: ontbrekende ] na %s["
+
+#, c-format
+msgid "E554: Syntax error in %s{...}"
+msgstr "E554: Syntaxfout in %s{...}"
+
+#~ msgid "External submatches:\n"
+#~ msgstr ""
+
+#~ msgid " VREPLACE"
+#~ msgstr ""
+
+msgid " REPLACE"
+msgstr " VERVANGEN"
+
+#~ msgid " REVERSE"
+#~ msgstr ""
+
+msgid " INSERT"
+msgstr " INVOEGEN"
+
+msgid " (insert)"
+msgstr " (invoegen)"
+
+msgid " (replace)"
+msgstr " (vervangen)"
+
+#~ msgid " (vreplace)"
+#~ msgstr ""
+
+#~ msgid " Hebrew"
+#~ msgstr ""
+
+#~ msgid " Arabic"
+#~ msgstr ""
+
+#~ msgid " (lang)"
+#~ msgstr ""
+
+#~ msgid " (paste)"
+#~ msgstr ""
+
+msgid " VISUAL"
+msgstr " VISUEEL"
+
+msgid " VISUAL LINE"
+msgstr " VISUELE REGEL"
+
+msgid " VISUAL BLOCK"
+msgstr " VISUEEL BLOK"
+
+msgid " SELECT"
+msgstr " SELECTEREN"
+
+msgid " SELECT LINE"
+msgstr " REGELSELECTIE"
+
+msgid " SELECT BLOCK"
+msgstr " BLOKSELECTIE"
+
+msgid "recording"
+msgstr "opnemen"
+
+#, c-format
+msgid "E383: Invalid search string: %s"
+msgstr "E383: ongeldige zoekstring: %s"
+
+#, c-format
+msgid "E384: search hit TOP without match for: %s"
+msgstr "E384: TOP bereikt zonder overeenkomst voor: %s"
+
+#, c-format
+msgid "E385: search hit BOTTOM without match for: %s"
+msgstr "E385: BODEM bereikt zonder overeenkomst voor: %s"
+
+msgid "E386: Expected '?' or '/'  after ';'"
+msgstr "E386: verwachte '?' of '/' na ';'"
+
+msgid " (includes previously listed match)"
+msgstr " (bevat eerder getoonde overeenkomst)"
+
+#. cursor at status line
+msgid "--- Included files "
+msgstr "--- bevatte bestanden "
+
+msgid "not found "
+msgstr "niet gevonden "
+
+msgid "in path ---\n"
+msgstr "in pad ---\n"
+
+msgid "  (Already listed)"
+msgstr " (Reeds getoond)"
+
+msgid "  NOT FOUND"
+msgstr "  NIET GEVONDEN"
+
+#, c-format
+#~ msgid "Scanning included file: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Searching included file %s"
+#~ msgstr ""
+
+#~ msgid "E387: Match is on current line"
+#~ msgstr ""
+
+#~ msgid "All included files were found"
+#~ msgstr ""
+
+#~ msgid "No included files"
+#~ msgstr ""
+
+#~ msgid "E388: Couldn't find definition"
+#~ msgstr ""
+
+msgid "E389: Couldn't find pattern"
+msgstr "E389: kan zoekpatroon niet vinden"
+
+msgid "Substitute "
+msgstr "Vervangen "
+
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# Laatste %szoekpatroon:\n"
+"~"
+
+#~ msgid "E759: Format error in spell file"
+#~ msgstr ""
+
+#~ msgid "E758: Truncated spell file"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Trailing text in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Affix name too long in %s line %d: %s"
+#~ msgstr ""
+
+#~ msgid "E761: Format error in affix file FOL, LOW or UPP"
+#~ msgstr ""
+
+#~ msgid "E762: Character in FOL, LOW or UPP is out of range"
+#~ msgstr ""
+
+#~ msgid "Compressing word tree..."
+#~ msgstr ""
+
+#~ msgid "E756: Spell checking is not enabled"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Reading spell file \"%s\""
+#~ msgstr ""
+
+#~ msgid "E757: This does not look like a spell file"
+#~ msgstr ""
+
+#~ msgid "E771: Old spell file, needs to be updated"
+#~ msgstr ""
+
+#~ msgid "E772: Spell file is for newer version of Vim"
+#~ msgstr ""
+
+#~ msgid "E770: Unsupported section in spell file"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Warning: region %s not supported"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Reading affix file %s ..."
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Conversion failure for word in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Conversion in %s not supported: from %s to %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Conversion in %s not supported"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Invalid value for FLAG in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "FLAG after using flags in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Different combining flag in continued affix block in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Duplicate affix in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Expected Y or N in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Broken condition in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Expected REP(SAL) count in %s line %d"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Expected MAP count in %s line %d"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Duplicate character in MAP in %s line %d"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Unrecognized or duplicate item in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Missing FOL/LOW/UPP line in %s"
+#~ msgstr ""
+
+#~ msgid "COMPOUNDSYLMAX used without SYLLABLE"
+#~ msgstr ""
+
+#~ msgid "Too many postponed prefixes"
+#~ msgstr ""
+
+#~ msgid "Too many compound flags"
+#~ msgstr ""
+
+#~ msgid "Too many postponed prefixes and/or compound flags"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Missing SOFO%s line in %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Both SAL and SOFO lines in %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Flag is not a number in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Illegal flag in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "%s value differs from what is used in another .aff file"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Reading dictionary file %s ..."
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E760: No word count in %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "line %6d, word %6d - %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Duplicate word in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "First duplicate word in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "%d duplicate word(s) in %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Ignored %d word(s) with non-ASCII characters in %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Reading word file %s ..."
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "/encoding= line after word ignored in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Duplicate /regions= line ignored in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Too many regions in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "/ line ignored in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Invalid region nr in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Unrecognized flags in %s line %d: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Ignored %d words with non-ASCII characters"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+#~ msgstr ""
+
+#~ msgid "Reading back spell file..."
+#~ msgstr ""
+
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+#~ msgid "Performing soundfolding..."
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Number of words after soundfolding: %ld"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Total number of words: %d"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Writing suggestion file %s ..."
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Estimated runtime memory use: %d bytes"
+#~ msgstr ""
+
+#~ msgid "E751: Output file name must not have region name"
+#~ msgstr ""
+
+#~ msgid "E754: Only up to 8 regions supported"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E755: Invalid region in %s"
+#~ msgstr ""
+
+#~ msgid "Warning: both compounding and NOBREAK specified"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Writing spell file %s ..."
+#~ msgstr ""
+
+#~ msgid "Done!"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E765: 'spellfile' does not have %ld entries"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Word removed from %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Word added to %s"
+#~ msgstr ""
+
+#~ msgid "E763: Word characters differ between spell files"
+#~ msgstr ""
+
+#~ msgid "Sorry, no suggestions"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Sorry, only %ld suggestions"
+#~ msgstr ""
+
+#. for when 'cmdheight' > 1
+#. avoid more prompt
+#, c-format
+#~ msgid "Change \"%.*s\" to:"
+#~ msgstr ""
+
+#, c-format
+#~ msgid " < \"%.*s\""
+#~ msgstr ""
+
+#~ msgid "E752: No previous spell replacement"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E753: Not found: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E778: This does not look like a .sug file: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E779: Old .sug file, needs to be updated: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E780: .sug file is for newer version of Vim: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E781: .sug file doesn't match .spl file: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E782: error while reading .sug file: %s"
+#~ msgstr ""
+
+#. This should have been checked when generating the .spl
+#. * file.
+#~ msgid "E783: duplicate char in MAP entry"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E390: Illegal argument: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E391: No such syntax cluster: %s"
+#~ msgstr ""
+
+#~ msgid "No Syntax items defined for this buffer"
+#~ msgstr ""
+
+#~ msgid "syncing on C-style comments"
+#~ msgstr ""
+
+#~ msgid "no syncing"
+#~ msgstr ""
+
+#~ msgid "syncing starts "
+#~ msgstr ""
+
+#~ msgid " lines before top line"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "--- Syntax sync items ---"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "syncing on items"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\n"
+#~ "--- Syntax items ---"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E392: No such syntax cluster: %s"
+#~ msgstr ""
+
+#~ msgid "minimal "
+#~ msgstr ""
+
+#~ msgid "maximal "
+#~ msgstr ""
+
+#~ msgid "; match "
+#~ msgstr ""
+
+#~ msgid " line breaks"
+#~ msgstr ""
+
+#~ msgid "E395: contains argument not accepted here"
+#~ msgstr ""
+
+#~ msgid "E396: containedin argument not accepted here"
+#~ msgstr ""
+
+#~ msgid "E393: group[t]here not accepted here"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E394: Didn't find region item for %s"
+#~ msgstr ""
+
+#~ msgid "E397: Filename required"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E789: Missing ']': %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E398: Missing '=': %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E399: Not enough arguments: syntax region %s"
+#~ msgstr ""
+
+#~ msgid "E400: No cluster specified"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E401: Pattern delimiter not found: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E402: Garbage after pattern: %s"
+#~ msgstr ""
+
+#~ msgid "E403: syntax sync: line continuations pattern specified twice"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E404: Illegal arguments: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E405: Missing equal sign: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E406: Empty argument: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E407: %s not allowed here"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E408: %s must be first in contains list"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E409: Unknown group name: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E410: Invalid :syntax subcommand: %s"
+#~ msgstr ""
+
+#~ msgid "E679: recursive loop loading syncolor.vim"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E411: highlight group not found: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E412: Not enough arguments: \":highlight link %s\""
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E413: Too many arguments: \":highlight link %s\""
+#~ msgstr ""
+
+#~ msgid "E414: group has settings, highlight link ignored"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E415: unexpected equal sign: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E416: missing equal sign: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E417: missing argument: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E418: Illegal value: %s"
+#~ msgstr ""
+
+#~ msgid "E419: FG color unknown"
+#~ msgstr ""
+
+#~ msgid "E420: BG color unknown"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E421: Color name or number not recognized: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E422: terminal code too long: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E423: Illegal argument: %s"
+#~ msgstr ""
+
+#~ msgid "E424: Too many different highlighting attributes in use"
+#~ msgstr ""
+
+#~ msgid "E669: Unprintable character in group name"
+#~ msgstr ""
+
+#~ msgid "W18: Invalid character in group name"
+#~ msgstr ""
+
+#~ msgid "E555: at bottom of tag stack"
+#~ msgstr ""
+
+#~ msgid "E556: at top of tag stack"
+#~ msgstr ""
+
+#~ msgid "E425: Cannot go before first matching tag"
+#~ msgstr ""
+
+#, c-format
+msgid "E426: tag not found: %s"
+msgstr "E426: tag niet gevonden: %s"
+
+#~ msgid "  # pri kind tag"
+#~ msgstr ""
+
+#~ msgid "file\n"
+#~ msgstr ""
+
+#~ msgid "E427: There is only one matching tag"
+#~ msgstr ""
+
+#~ msgid "E428: Cannot go beyond last matching tag"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "File \"%s\" does not exist"
+#~ msgstr ""
+
+#. Give an indication of the number of matching tags
+#, c-format
+#~ msgid "tag %d of %d%s"
+#~ msgstr ""
+
+#~ msgid " or more"
+#~ msgstr ""
+
+#~ msgid "  Using tag with different case!"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E429: File \"%s\" does not exist"
+#~ msgstr ""
+
+#. Highlight title
+#~ msgid ""
+#~ "\n"
+#~ "  # TO tag         FROM line  in file/text"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Searching tags file %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E430: Tag file path truncated for %s\n"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E431: Format error in tags file \"%s\""
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Before byte %ld"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E432: Tags file not sorted: %s"
+#~ msgstr ""
+
+#. never opened any tags file
+msgid "E433: No tags file"
+msgstr "E433: geen tags-bestand"
+
+#~ msgid "Ignoring long line in tags file"
+#~ msgstr ""
+
+#~ msgid "E434: Can't find tag pattern"
+#~ msgstr ""
+
+#~ msgid "E435: Couldn't find tag, just guessing!"
+#~ msgstr ""
+
+#~ msgid "' not known. Available builtin terminals are:"
+#~ msgstr ""
+
+#~ msgid "defaulting to '"
+#~ msgstr ""
+
+#~ msgid "E557: Cannot open termcap file"
+#~ msgstr ""
+
+#~ msgid "E558: Terminal entry not found in terminfo"
+#~ msgstr ""
+
+#~ msgid "E559: Terminal entry not found in termcap"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E436: No \"%s\" entry in termcap"
+#~ msgstr ""
+
+#~ msgid "E437: terminal capability \"cm\" required"
+#~ msgstr ""
+
+#. Highlight title
+#~ msgid ""
+#~ "\n"
+#~ "--- Terminal keys ---"
+#~ msgstr ""
+
+#~ msgid "new shell started\n"
+#~ msgstr ""
+
+msgid "Vim: Error reading input, exiting...\n"
+msgstr "Vim: lezen van de invoer is mislukt. Stoppen...\n"
+
+#~ msgid "Used CUT_BUFFER0 instead of empty selection"
+#~ msgstr ""
+
+#. must display the prompt
+#~ msgid "No undo possible; continue anyway"
+#~ msgstr ""
+
+#. magic at start of header
+#. magic after last header
+#. magic at start of entry
+#. magic after last entry
+#. 2-byte undofile version number
+#. idem, encrypted
+#, c-format
+#~ msgid "E828: Cannot open undo file for writing: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E825: Corrupted undo file (%s): %s"
+#~ msgstr ""
+
+#~ msgid "Cannot write undo file in any directory in 'undodir'"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Will not overwrite with undo file, cannot read: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Will not overwrite, this is not an undo file: %s"
+#~ msgstr ""
+
+#~ msgid "Skipping undo file write, noting to undo"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Writing undo file: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E829: write error in undo file: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Not reading undo file, owner differs: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Reading undo file: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E822: Cannot open undo file for reading: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E823: Not an undo file: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E832: Non-encrypted file has encrypted undo file: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E826: Undo file decryption failed: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E827: Undo file is encrypted: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E824: Incompatible undo file: %s"
+#~ msgstr ""
+
+#~ msgid "File contents changed, cannot use undo info"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "Finished reading undo file %s"
+#~ msgstr ""
+
+msgid "Already at oldest change"
+msgstr "Reeds de laatste wijziging"
+
+msgid "Already at newest change"
+msgstr "Reeds de nieuwste wijziging"
+
+#, c-format
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Ongedaan-nummer %ld niet gevonden"
+
+msgid "E438: u_undo: line numbers wrong"
+msgstr "E438: u_undo: regelnummers onjuist"
+
+msgid "more line"
+msgstr "extra regel"
+
+msgid "more lines"
+msgstr "extra regel"
+
+msgid "line less"
+msgstr "regel minder"
+
+msgid "fewer lines"
+msgstr "regels minder"
+
+msgid "change"
+msgstr "wijziging"
+
+msgid "changes"
+msgstr "wijzigingen"
+
+#, c-format
+msgid "%ld %s; %s #%ld  %s"
+msgstr "%ld %s; %s #%ld  %s"
+
+msgid "before"
+msgstr "voor"
+
+msgid "after"
+msgstr "na"
+
+msgid "Nothing to undo"
+msgstr "Niets om ongedaan te maken"
+
+msgid "number changes  time"
+msgstr "aantal wijzign  tijd"
+
+#, c-format
+msgid "%ld seconds ago"
+msgstr "%ld seconden geleden"
+
+#~ msgid "E790: undojoin is not allowed after undo"
+#~ msgstr ""
+
+#~ msgid "E439: undo list corrupt"
+#~ msgstr ""
+
+#~ msgid "E440: undo line missing"
+#~ msgstr ""
+
+#. Only MS VC 4.1 and earlier can do Win32s
+msgid ""
+"\n"
+"MS-Windows 16/32-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 16/32-bit GUI-versie"
+
+msgid ""
+"\n"
+"MS-Windows 64-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 64-bit GUI-versie"
+
+msgid ""
+"\n"
+"MS-Windows 32-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 32-bit GUIversie"
+
+msgid " in Win32s mode"
+msgstr " in Win32s-modus"
+
+msgid " with OLE support"
+msgstr "met OLE-ondersteuning"
+
+msgid ""
+"\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 64-bit console-versie"
+
+msgid ""
+"\n"
+"MS-Windows 32-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 32-bit console-versie"
+
+msgid ""
+"\n"
+"MS-Windows 16-bit version"
+msgstr ""
+"\n"
+"MS-Windows 16-bit-versie"
+
+msgid ""
+"\n"
+"32-bit MS-DOS version"
+msgstr ""
+"\n"
+"32-bit MS-DOS-versie"
+
+msgid ""
+"\n"
+"16-bit MS-DOS version"
+msgstr ""
+"\n"
+"16-bit MS-DOS-versie"
+
+msgid ""
+"\n"
+"MacOS X (unix) version"
+msgstr ""
+"\n"
+"MacOS X (unix)-versie"
+
+msgid ""
+"\n"
+"MacOS X-versie"
+msgstr ""
+"\n"
+"MacOS X version"
+
+msgid ""
+"\n"
+"MacOS version"
+msgstr ""
+"\n"
+"MacOS-versie"
+
+msgid ""
+"\n"
+"RISC OS version"
+msgstr ""
+"\n"
+"RISC OS-versie"
+
+msgid ""
+"\n"
+"OpenVMS version"
+msgstr ""
+"\n"
+"OpenVMS-versie"
+
+msgid ""
+"\n"
+"Included patches: "
+msgstr ""
+"\n"
+"Inclusief 'patches': "
+
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"Extra 'patches': "
+
+msgid "Modified by "
+msgstr "Aangepast door "
+
+msgid ""
+"\n"
+"Compiled "
+msgstr ""
+"\n"
+"Gecompileerd "
+
+msgid "by "
+msgstr "door "
+
+msgid ""
+"\n"
+"Huge version "
+msgstr ""
+"\n"
+"Enorme versie "
+
+msgid ""
+"\n"
+"Big version "
+msgstr ""
+"\n"
+"Grote versie "
+
+msgid ""
+"\n"
+"Normal version "
+msgstr ""
+"\n"
+"Normale versie "
+
+msgid ""
+"\n"
+"Small version "
+msgstr ""
+"\n"
+"Kleine versie "
+
+msgid ""
+"\n"
+"Tiny version "
+msgstr ""
+"\n"
+"Mini versie "
+
+#~ msgid "without GUI."
+#~ msgstr ""
+
+#~ msgid "with GTK2-GNOME GUI."
+#~ msgstr ""
+
+#~ msgid "with GTK-GNOME GUI."
+#~ msgstr ""
+
+#~ msgid "with GTK2 GUI."
+#~ msgstr ""
+
+#~ msgid "with GTK GUI."
+#~ msgstr ""
+
+#~ msgid "with X11-Motif GUI."
+#~ msgstr ""
+
+#~ msgid "with X11-neXtaw GUI."
+#~ msgstr ""
+
+#~ msgid "with X11-Athena GUI."
+#~ msgstr ""
+
+#~ msgid "with Photon GUI."
+#~ msgstr ""
+
+#~ msgid "with GUI."
+#~ msgstr ""
+
+#~ msgid "with Carbon GUI."
+#~ msgstr ""
+
+#~ msgid "with Cocoa GUI."
+#~ msgstr ""
+
+#~ msgid "with (classic) GUI."
+#~ msgstr ""
+
+#~ msgid "  Features included (+) or not (-):\n"
+#~ msgstr ""
+
+#~ msgid "   system vimrc file: \""
+#~ msgstr ""
+
+#~ msgid "     user vimrc file: \""
+#~ msgstr ""
+
+#~ msgid " 2nd user vimrc file: \""
+#~ msgstr ""
+
+#~ msgid " 3rd user vimrc file: \""
+#~ msgstr ""
+
+#~ msgid "      user exrc file: \""
+#~ msgstr ""
+
+#~ msgid "  2nd user exrc file: \""
+#~ msgstr ""
+
+#~ msgid "  system gvimrc file: \""
+#~ msgstr ""
+
+#~ msgid "    user gvimrc file: \""
+#~ msgstr ""
+
+#~ msgid "2nd user gvimrc file: \""
+#~ msgstr ""
+
+#~ msgid "3rd user gvimrc file: \""
+#~ msgstr ""
+
+#~ msgid "    system menu file: \""
+#~ msgstr ""
+
+#~ msgid "  fall-back for $VIM: \""
+#~ msgstr ""
+
+#~ msgid " f-b for $VIMRUNTIME: \""
+#~ msgstr ""
+
+msgid "Compilation: "
+msgstr "Compilatie: "
+
+msgid "Compiler: "
+msgstr "Compiler: "
+
+msgid "Linking: "
+msgstr "Linking: "
+
+msgid "  DEBUG BUILD"
+msgstr "  DEBUG BUILD"
+
+msgid "VIM - Vi IMproved"
+msgstr "VIM - Vi IMproved"
+
+msgid "version "
+msgstr "versie "
+
+msgid "by Bram Moolenaar et al."
+msgstr "door Bram Moolenaar en anderen"
+
+msgid "Vim is open source and freely distributable"
+msgstr "Vim is open-source en vrij verspreidbaar"
+
+msgid "Help poor children in Uganda!"
+msgstr "Help arme kinderen in Uganda!"
+
+msgid "type  :help iccf<Enter>       for information "
+msgstr "typ :help iccf<Enter> voor informatie"
+
+msgid "type   :q<Enter>               to exit"
+msgstr "typ :q<Enter> om te stoppen"
+
+msgid "type  :help<Enter>  or  <F1>  for on-line help"
+msgstr "typ :help<Enter> of <F1> voor on-line hulp"
+
+msgid "type  :help version7<Enter>   for version info"
+msgstr "typ :help version7<Enter> voor versieinformatie"
+
+msgid "Running in Vi compatible mode"
+msgstr "wordt uitgevoerd in Vi compatible-modus"
+
+msgid "type :set nocp<Enter> for Vim defaults"
+msgstr "typ :set nocp<Enter>  voor standaardinstellingen van Vim"
+
+msgid "type  :help cp-default<Enter> for info on this"
+msgstr "typ :help cp-default<Enter> voor informatie hierover"
+
+msgid "menu  Help->Orphans           for information    "
+msgstr "menu Help->Orphans voor informatie"
+
+#~ msgid "Running modeless, typed text is inserted"
+#~ msgstr ""
+
+#~ msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
+#~ msgstr ""
+
+#~ msgid "                              for two modes      "
+#~ msgstr ""
+
+#~ msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
+#~ msgstr ""
+
+#~ msgid "                              for Vim defaults   "
+#~ msgstr ""
+
+msgid "Sponsor Vim development!"
+msgstr "Ondersteun de ontwikkeling van Vim!"
+
+msgid "Become a registered Vim user!"
+msgstr "Word een geregistreerde Vim-gebruiker!"
+
+msgid "type  :help sponsor<Enter>    for information "
+msgstr "typ   :help sponsor<Enter>    voor informatie "
+
+msgid "type  :help register<Enter>   for information "
+msgstr "typ   :help register<Enter>   voor informatie "
+
+msgid "menu  Help->Sponsor/Register  for information    "
+msgstr "menu  Help->Sponsor/Register  voor informatie    "
+
+msgid "WARNING: Windows 95/98/ME detected"
+msgstr "Waarschuwing: Windows 95/98/ME gedetecteerd"
+
+msgid "type  :help windows95<Enter>  for info on this"
+msgstr "typ   :help windows95<Enter>  voor informatie hierover"
+
+msgid "Already only one window"
+msgstr "Reeds beperkt tot een venster"
+
+msgid "E441: There is no preview window"
+msgstr "E441: er is geen voorvertoningsvenster"
+
+msgid "E442: Can't split topleft and botright at the same time"
+msgstr "E442: kan linkerbovenzijde en rechteronderzijde niet gelijktijdig splitsen"
+
+#~ msgid "E443: Cannot rotate when another window is split"
+#~ msgstr ""
+
+msgid "E444: Cannot close last window"
+msgstr "E444: sluiten laatste venster is mislukt"
+
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: sluiten autocmd-venster is mislukt"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: venster kan niet sluiten want autocmd-venster blijft als enige achter"
+
+msgid "E445: Other window contains changes"
+msgstr "E445: ander venster blijft achter"
+
+msgid "E446: No file name under cursor"
+msgstr "E446: cursor staat niet op een bestandsnaam"
+
+#, c-format
+msgid "E447: Can't find file \"%s\" in path"
+msgstr "E447: bestand \"%s\" niet in pad gevonden"
+
+#, c-format
+msgid "E370: Could not load library %s"
+msgstr "E370: laden van bibliotheek %s is mislukt"
+
+#~ msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+#~ msgstr ""
+
+#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
+#~ msgstr ""
+
+#~ msgid "Edit with &multiple Vims"
+#~ msgstr ""
+
+#~ msgid "Edit with single &Vim"
+#~ msgstr ""
+
+#~ msgid "Diff with Vim"
+#~ msgstr ""
+
+#~ msgid "Edit with &Vim"
+#~ msgstr ""
+
+#. Now concatenate
+#~ msgid "Edit with existing Vim - "
+#~ msgstr ""
+
+#~ msgid "Edits the selected file(s) with Vim"
+#~ msgstr ""
+
+#~ msgid "Error creating process: Check if gvim is in your path!"
+#~ msgstr ""
+
+#~ msgid "gvimext.dll error"
+#~ msgstr ""
+
+#~ msgid "Path length too long!"
+#~ msgstr ""
+
+msgid "--No lines in buffer--"
+msgstr "-- geen regels in buffer --"
+
+#.
+#. * The error messages that can be shared are included here.
+#. * Excluded are errors that are only used once and debugging messages.
+#.
+msgid "E470: Command aborted"
+msgstr "E470: opdracht afgebroken"
+
+msgid "E471: Argument required"
+msgstr "E471: Argument vereist"
+
+msgid "E10: \\ should be followed by /, ? or &"
+msgstr "E10: \\ moet worden gevolgd door /, ? of &"
+
+msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
+msgstr "E11: ongeldig in opdrachtregelvenster; <CR> voert uit, CTRL-C stopt"
+
+#~ msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
+#~ msgstr ""
+
+#~ msgid "E171: Missing :endif"
+#~ msgstr ""
+
+#~ msgid "E600: Missing :endtry"
+#~ msgstr ""
+
+#~ msgid "E170: Missing :endwhile"
+#~ msgstr ""
+
+#~ msgid "E170: Missing :endfor"
+#~ msgstr ""
+
+#~ msgid "E588: :endwhile without :while"
+#~ msgstr ""
+
+#~ msgid "E588: :endfor without :for"
+#~ msgstr ""
+
+#~ msgid "E13: File exists (add ! to override)"
+#~ msgstr ""
+
+#~ msgid "E472: Command failed"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E234: Unknown fontset: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E235: Unknown font: %s"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E236: Font \"%s\" is not fixed-width"
+#~ msgstr ""
+
+msgid "E473: Internal error"
+msgstr "E473: interne fout"
+
+msgid "Interrupted"
+msgstr "onderbroken"
+
+msgid "E14: Invalid address"
+msgstr "E14: ongeldig adres"
+
+msgid "E474: Invalid argument"
+msgstr "E474: ongeldig argument"
+
+#, c-format
+msgid "E475: Invalid argument: %s"
+msgstr "E475: ongeldig argument: %s"
+
+#, c-format
+msgid "E15: Invalid expression: %s"
+msgstr "E15: ongeldige expressie: %s"
+
+msgid "E16: Invalid range"
+msgstr "E16: ongeldig bereik"
+
+msgid "E476: Invalid command"
+msgstr "E476: ongeldige opdracht"
+
+#, c-format
+#~ msgid "E17: \"%s\" is a directory"
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E364: Library call failed for \"%s()\""
+#~ msgstr ""
+
+#, c-format
+#~ msgid "E448: Could not load library function %s"
+#~ msgstr ""
+
+msgid "E19: Mark has invalid line number"
+msgstr "E19: markering heeft een ongeldig regelnummer"
+
+msgid "E20: Mark not set"
+msgstr "E20: Markering is niet ingesteld"
+
+msgid "E21: Cannot make changes, 'modifiable' is off"
+msgstr "E21: kan geen veranderingen maken, 'modifiable' is uitgeschakeld"
+
+msgid "E22: Scripts nested too deep"
+msgstr "E22: scripts "
+
+#~ msgid "E23: No alternate file"
+#~ msgstr ""
+
+#~ msgid "E24: No such abbreviation"
+#~ msgstr ""
+
+#~ msgid "E477: No ! allowed"
+#~ msgstr ""
+
+#~ msgid "E25: GUI cannot be used: Not enabled at compile time"
+#~ msgstr ""
+
+#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
+#~ msgstr ""
+
+#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
+#~ msgstr ""
+
+#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
+#~ msgstr ""
+
+#, c-format
+msgid "E28: No such highlight group name: %s"
+msgstr "E28: naam van deze oplichtgroep is onbekend: %s"
+
+#~ msgid "E29: No inserted text yet"
+#~ msgstr ""
+
+#~ msgid "E30: No previous command line"
+#~ msgstr ""
+
+#~ msgid "E31: No such mapping"
+#~ msgstr ""
+
+msgid "E479: No match"
+msgstr "E479: geen overeenkomst"
+
+#, c-format
+msgid "E480: No match: %s"
+msgstr "E480: geen overeenkomst: %s"
+
+msgid "E32: No file name"
+msgstr "E32: geen bestandsnaam"
+
+msgid "E33: No previous substitute regular expression"
+msgstr "E33: geen eerdere reguliere expressie substitutie"
+
+msgid "E34: No previous command"
+msgstr "E34: geen eerdere opdracht"
+
+msgid "E35: No previous regular expression"
+msgstr "E35: geen eerdere reguliere expressie"
+
+msgid "E481: No range allowed"
+msgstr "E481: een bereik is niet toegestaan"
+
+msgid "E36: Not enough room"
+msgstr "E36: onvoldoende ruimte"
+
+#, c-format
+msgid "E247: no registered server named \"%s\""
+msgstr "E247: \"%s\" niet gevonden als geregistreerde server"
+
+#, c-format
+msgid "E482: Can't create file %s"
+msgstr "E482: aanmaken bestand %s is mislukt"
+
+msgid "E483: Can't get temp file name"
+msgstr "E483: bepalen naam tijdelijk bestand is mislukt"
+
+#, c-format
+msgid "E484: Can't open file %s"
+msgstr "E484: openen bestand %s is mislukt"
+
+#, c-format
+msgid "E485: Can't read file %s"
+msgstr "E485: lezen bestand %s is mislukt"
+
+msgid "E37: No write since last change (add ! to override)"
+msgstr "E37: niets opgeslagen sinds laatste wijziging (voeg ! toe om te forceren)"
+
+msgid "E38: Null argument"
+msgstr "E38: leeg argument (null)"
+
+msgid "E39: Number expected"
+msgstr "E39: getal verwacht"
+
+#, c-format
+msgid "E40: Can't open errorfile %s"
+msgstr "E40: openen foutenbestand %s is mislukt"
+
+msgid "E233: cannot open display"
+msgstr "E233: openen scherm is mislukt"
+
+msgid "E41: Out of memory!"
+msgstr "E41: te weinig geheugen!"
+
+msgid "Pattern not found"
+msgstr "patroon niet gevonden"
+
+#, c-format
+msgid "E486: Pattern not found: %s"
+msgstr "E486: patroon niet gevonden: %s"
+
+msgid "E487: Argument must be positive"
+msgstr "E487: argument moet positief zijn"
+
+msgid "E459: Cannot go back to previous directory"
+msgstr "E459: kan niet terug naar vorig Dictionary"
+
+msgid "E42: No Errors"
+msgstr "E42: geen fouten"
+
+#~ msgid "E776: No location list"
+#~ msgstr ""
+
+msgid "E43: Damaged match string"
+msgstr "E43: beschadigde zoekstring"
+
+msgid "E44: Corrupted regexp program"
+msgstr "E44: regexp-programma is misvormd"
+
+msgid "E45: 'readonly' option is set (add ! to override)"
+msgstr "E45: 'alleen-lezen'-optie is ingeschakeld (voeg ! toe om te overschrijven)"
+
+#, c-format
+msgid "E46: Cannot change read-only variable \"%s\""
+msgstr "E46: kan alleen-lezenvariabele \"%s\" niet veranderen"
+
+#, c-format
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: kan variabele niet instellen in de zandbak: \"%s\""
+
+msgid "E47: Error while reading errorfile"
+msgstr "E47: fout tijdens lezen foutenbestand"
+
+msgid "E48: Not allowed in sandbox"
+msgstr "E48: niet toegestaan in zandbak"
+
+msgid "E523: Not allowed here"
+msgstr "E523: hier niet toegestaan"
+
+msgid "E359: Screen mode setting not supported"
+msgstr "E359: instelling schermmodus niet ondersteund"
+
+msgid "E49: Invalid scroll size"
+msgstr "E49: ongeldige scroll-grootte"
+
+msgid "E91: 'shell' option is empty"
+msgstr "E91: 'shell'-optie is leeg"
+
+#~ msgid "E255: Couldn't read in sign data!"
+#~ msgstr ""
+
+#~ msgid "E72: Close error on swap file"
+#~ msgstr ""
+
+#~ msgid "E73: tag stack empty"
+#~ msgstr ""
+
+msgid "E74: Command too complex"
+msgstr "E74: opdracht te ingewikkeld"
+
+msgid "E75: Name too long"
+msgstr "E75: te lange naam"
+
+msgid "E76: Too many ["
+msgstr "E76: teveel ["
+
+msgid "E77: Too many file names"
+msgstr "E77: teveel bestandsnamen"
+
+msgid "E488: Trailing characters"
+msgstr "E488: nakomende tekens"
+
+msgid "E78: Unknown mark"
+msgstr "E78: onbekende markering"
+
+msgid "E79: Cannot expand wildcards"
+msgstr "E79: vervangen jokertekens is mislukt"
+
+msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
+msgstr "E591: 'winheight' kan niet kleiner zijn dan 'winminheight'"
+
+msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
+msgstr "E592: 'winwidth' kan niet kleiner zijn dan 'winminwidth'"
+
+msgid "E80: Error while writing"
+msgstr "E80: opslaan is mislukt"
+
+msgid "Zero count"
+msgstr "Aantal is nul"
+
+msgid "E81: Using <SID> not in a script context"
+msgstr "E81: <SID> wordt buiten de scriptcontext gebruikt"
+
+msgid "E449: Invalid expression received"
+msgstr "E449: ontvangen expressie is ongeldig"
+
+msgid "E463: Region is guarded, cannot modify"
+msgstr "E463: Regio is bescherm en kan niet worden veranderd"
+
+msgid "E744: NetBeans does not allow changes in read-only files"
+msgstr "E744: NetBeans staat geen veranderingen in alleen-lezenbestanden toe"
+
+#, c-format
+msgid "E685: Internal error: %s"
+msgstr "E685: interne fout: %s"
+
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363: patroon gebruikt meer geheugen dan 'maxmempattern'"
+
+msgid "E749: empty buffer"
+msgstr "E749: leeg buffer"
+
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682: zoekpatroon of scheidingsteken is ongeldig"
+
+msgid "E139: File is loaded in another buffer"
+msgstr "E139: bestand is in een ander buffer geladen"
+
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764: Optie '%s' is niet ingesteld"
+
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "zoeken bereikte TOP, verder vanaf BODEM"
+
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "zoeken bereikte BODEM, verder vanaf TOP"
+
index 238bcc6..f6d4761 100644 (file)
@@ -2070,21 +2070,6 @@ msgid "&Undo"
 msgstr "&Angre"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Kan ikke laste Zap-skrifttype '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Kan ikke bruke skrifttype %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Sender beskjed om Ã¥ avslutte barneprosess.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Fant ikke vindutittel \"%s\""
 
@@ -4324,9 +4309,6 @@ msgstr "E244: Ulovlig navn p
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Ulovlig tegn '%c' i skrifttypenavn \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ugyldig 'osfiletype'-valg - bruker Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Dobbelt signal, avslutter\n"
 
index facbd14..43f958c 100644 (file)
@@ -1,20 +1,20 @@
 # translation of pl.po to Polish
 # Polish Translation for Vim
 #
-# updated 2010 for vim-7.3
+# updated 2013 for vim-7.4
 #
 # FIRST AUTHOR Marcin Dalecki <martin@dalecki.de>, 2000.
-# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-10 18:13+0200\n"
+"POT-Creation-Date: 2013-07-06 19:33+0200\n"
 "PO-Revision-Date: 2010-08-10 18:15+0200\n"
 "Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
-"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
+"Language: pl\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Lokalize 1.0\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
@@ -41,6 +41,9 @@ msgstr "[Lista lokacji]"
 msgid "[Quickfix List]"
 msgstr "[Lista quickfix]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Autokomendy spowodowaÅ‚y porzucenie komendy"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Nie mogÄ™ zarezerwować bufora; zakoÅ„czenie..."
 
@@ -135,6 +138,9 @@ msgstr "[Nowy Plik]"
 msgid "[Read errors]"
 msgstr "[BÅ‚Ä…d odczytu]"
 
+msgid "[RO]"
+msgstr "[RO]"
+
 msgid "[readonly]"
 msgstr "[tylko odczyt]"
 
@@ -172,7 +178,6 @@ msgstr "Dół"
 msgid "Top"
 msgstr "Góra"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -299,6 +304,12 @@ msgstr " Lokalne dopeÅ‚nianie słów kluczowych (^N^P)"
 msgid "Hit end of paragraph"
 msgstr "DobiÅ‚em do koÅ„ca akapitu"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: Funkcja uzupeÅ‚niania zmieniÅ‚a okno"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Funkcja uzupeÅ‚nania usunęła tekst"
+
 msgid "'dictionary' option is empty"
 msgstr "opcja 'dictionary' jest pusta"
 
@@ -413,6 +424,9 @@ msgstr "E130: Nieznana funkcja: %s"
 msgid "E461: Illegal variable name: %s"
 msgstr "E461: Niedozwolona nazwa zmiennej: %s"
 
+msgid "E806: using Float as a String"
+msgstr "E806: Użycie Zmiennoprzecinkowej jako ÅaÅ„cucha"
+
 msgid "E687: Less targets than List items"
 msgstr "E687: Mniej celów niż elementów Listy"
 
@@ -555,6 +569,9 @@ msgstr "E725: WywoÅ‚anie funkcji \"dict\" bez SÅ‚ownika: %s"
 msgid "E808: Number or Float required"
 msgstr "E808: Wymagana Liczba lub Zmiennoprzecinkowa"
 
+msgid "add() argument"
+msgstr "argument add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Za dużo argumentów"
 
@@ -573,6 +590,15 @@ msgstr "&Ok"
 msgid "E737: Key already exists: %s"
 msgstr "E737: Klucz już istnieje: %s"
 
+msgid "extend() argument"
+msgstr "argument extend()"
+
+msgid "map() argument"
+msgstr "argument map()"
+
+msgid "filter() argument"
+msgstr "argument filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld wierszy: "
@@ -591,6 +617,9 @@ msgstr ""
 msgid "called inputrestore() more often than inputsave()"
 msgstr "wywoÅ‚ano inputrestore() wiÄ™cej razy niż inputsave()"
 
+msgid "insert() argument"
+msgstr "argument insert()"
+
 msgid "E786: Range not allowed"
 msgstr "E786: Zakres niedozwolony"
 
@@ -616,12 +645,21 @@ msgstr "E241: Nie mogÄ™ wysÅ‚ać do %s"
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Nie mogÄ™ czytać odpowiedzi serwera"
 
+msgid "remove() argument"
+msgstr "argument remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Za dużo dowiÄ…zaÅ„ symbolicznych (pÄ™tla?)"
 
+msgid "reverse() argument"
+msgstr "argument reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: Nie mogÄ™ wysÅ‚ać do klienta"
 
+msgid "sort() argument"
+msgstr "argument sort()"
+
 msgid "E702: Sort compare function failed"
 msgstr "E702: Funkcja porównywania w sort nie powiodÅ‚a siÄ™"
 
@@ -652,8 +690,13 @@ msgstr "E730: Użycie Listy jako ÅaÅ„cucha"
 msgid "E731: using Dictionary as a String"
 msgstr "E731: Użycie SÅ‚ownika jako ÅaÅ„cucha"
 
-msgid "E806: using Float as a String"
-msgstr "E806: Użycie Zmiennoprzecinkowej jako ÅaÅ„cucha"
+#, c-format
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: NieprawidÅ‚owy typ zmiennej dla: %s"
+
+#, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Nie mogÄ™ usunąć zmiennej %s"
 
 #, c-format
 msgid "E704: Funcref variable name must start with a capital: %s"
@@ -664,14 +707,6 @@ msgid "E705: Variable name conflicts with existing function: %s"
 msgstr "E705: Nazwa zmiennej jest w konflikcie z istniejÄ…cÄ… funkcjÄ…: %s"
 
 #, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: NieprawidÅ‚owy typ zmiennej dla: %s"
-
-#, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: Nie mogÄ™ usunąć zmiennej %s"
-
-#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: Wartość jest zablokowana: %s"
 
@@ -693,10 +728,17 @@ msgstr "E123: Nieznana funkcja: %s"
 msgid "E124: Missing '(': %s"
 msgstr "E124: Brak '(': %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: Nie można tutaj użyć g:"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Niedozwolony argument: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Powtórzona nazwa argumentu: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Brak :endfunction"
 
@@ -971,7 +1013,6 @@ msgstr "ZapisujÄ™ plik viminfo \"%s\""
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Ten plik viminfo zostaÅ‚ wygenerowany przez Vima %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -979,7 +1020,6 @@ msgstr ""
 "# Możesz go ostrożnie edytować!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Wartość 'encoding' w czasie zapisu tego pliku\n"
 
@@ -1089,6 +1129,9 @@ msgid "Pattern found in every line: %s"
 msgstr "Wzorzec znaleziono w każdym wierszu: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "Nie znaleziono wzorca: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1266,6 +1309,10 @@ msgstr ""
 "E183: Komendy zdefiniowane przez użytkownika muszÄ… rozpoczynać siÄ™ dużą "
 "literÄ…"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841: Nazwa zastrzeżona, nie można jej użyć w komendzie użytkownika"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Nie ma takiej komendy użytkownika: %s"
@@ -1285,8 +1332,8 @@ msgid "unknown"
 msgstr "nieznany"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Nie mogÄ™ znaleźć zestawu kolorów %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Nie mogÄ™ znaleźć zestawu kolorów '%s'"
 
 msgid "Greetings, Vim user!"
 msgstr "Witaj użytkowniku Vima!"
@@ -1384,6 +1431,9 @@ msgstr "E497: brak nazwy dopasowania autokomend pod \"<amatch>\""
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: brak nazwy pliku :source do postawienia pod \"<sfile>\""
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: brak numeru linii by użyć z \"<slnum>\""
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: Pusta nazwa pliku dla '%' lub '#', dziaÅ‚a tylko z \":p:h\""
@@ -1600,9 +1650,6 @@ msgstr "[socket]"
 msgid "[character special]"
 msgstr "[specjalny znak]"
 
-msgid "[RO]"
-msgstr "[RO]"
-
 msgid "[CR missing]"
 msgstr "[brak CR]'"
 
@@ -1615,6 +1662,9 @@ msgstr "[NIE przemienione]"
 msgid "[converted]"
 msgstr "[przemienione]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[zakodowane]"
 
@@ -2018,6 +2068,12 @@ msgstr "Scrollbar Widget: Nie mogÅ‚em otrzymać rozmiarów rysunku na przycisku.
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: Nie mogÄ™ stworzyć BalloonEval z powiadomieniem i wywoÅ‚aniem"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Nie mogÅ‚em stworzyć nowego procesu dla GUI"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Proces potomny nie mógÅ‚ uruchomić GUI"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Nie mogÄ™ odpalić GUI"
 
@@ -2147,21 +2203,6 @@ msgid "&Undo"
 msgstr "&Cofnij"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Nie mogÄ™ zaÅ‚adować czcionki Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Nie mogÄ™ użyć czcionki %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"WysyÅ‚am zawiadomienie koÅ„czÄ…ce proces pochodny.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Nie mogÄ™ znaleźć tytuÅ‚u okna \"%s\""
 
@@ -2211,32 +2252,28 @@ msgid "Font '%s' is not fixed-width"
 msgstr "Czcionka '%s' nie posiada znaków jednolitej szerokoÅ›ci"
 
 #, c-format
-msgid "E253: Fontset name: %s\n"
-msgstr "E253: Nazwa zestawu czcionek: %s\n"
+msgid "E253: Fontset name: %s"
+msgstr "E253: Nazwa zestawu czcionek: %s"
 
 #, c-format
-msgid "Font0: %s\n"
-msgstr "Font0: %s\n"
+msgid "Font0: %s"
+msgstr "Font0: %s"
 
 #, c-format
-msgid "Font1: %s\n"
-msgstr "Font1: %s\n"
+msgid "Font1: %s"
+msgstr "Font1: %s"
 
 #, c-format
-msgid "Font%ld width is not twice that of font0\n"
-msgstr "Szerokość font%ld nie jest podwójnÄ… szerokoÅ›ciÄ… font0\n"
+msgid "Font%ld width is not twice that of font0"
+msgstr "Szerokość font%ld nie jest podwójnÄ… szerokoÅ›ciÄ… font0"
 
 #, c-format
-msgid "Font0 width: %ld\n"
-msgstr "Szerokość font0: %ld\n"
+msgid "Font0 width: %ld"
+msgstr "Szerokość font0: %ld"
 
 #, c-format
-msgid ""
-"Font1 width: %ld\n"
-"\n"
-msgstr ""
-"Szerokość font1: %ld\n"
-"\n"
+msgid "Font1 width: %ld"
+msgstr "Szerokość font1: %ld"
 
 msgid "Invalid font specification"
 msgstr "NieprawidÅ‚owy opis czcionki"
@@ -2279,7 +2316,7 @@ msgid "E551: Illegal component"
 msgstr "E551: Niedozwolona część"
 
 msgid "E552: digit expected"
-msgstr "E552: oczekiwano cyfry"
+msgstr "E552: oczekiwaÅ‚em na cyfrÄ™"
 
 #, c-format
 msgid "Page %d"
@@ -2424,6 +2461,9 @@ msgstr "E566: Nie mogÅ‚em stworzyć potoku do cscope"
 msgid "E622: Could not fork for cscope"
 msgstr "E622: Nie mogÅ‚em utworzyć rozwidlenia dla cscope"
 
+msgid "cs_create_connection setpgid failed"
+msgstr "nie powiodÅ‚o siÄ™ setpgid cs_create_connection"
+
 msgid "cs_create_connection exec failed"
 msgstr "wykonanie cs_create_connection nie powiodÅ‚o siÄ™"
 
@@ -2463,7 +2503,7 @@ msgid ""
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: znajdź funkcje wywoÅ‚ujÄ…ce tÄ™ funkcjÄ™\n"
@@ -2473,7 +2513,7 @@ msgstr ""
 "       g: znajdź tÄ™ definicjÄ™\n"
 "       i: znajdź pliki wÅ‚Ä…czajÄ…ce (#include) ten plik\n"
 "       s: znajdź ten symbol C\n"
-"       t: znajdź przypisania do\n"
+"       t: znajdź ten Å‚aÅ„cuch znaków\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2567,6 +2607,9 @@ msgstr "nie mogÄ™ wprowadzić wiersza"
 msgid "string cannot contain newlines"
 msgstr "ciÄ…g nie może zawierać znaków nowego wiersza"
 
+msgid "error converting Scheme values to Vim"
+msgstr "bÅ‚Ä…d przy konwersji wartoÅ›ci Scheme do Vima"
+
 msgid "Vim error: ~a"
 msgstr "BÅ‚Ä…d vima: ~a"
 
@@ -2585,9 +2628,6 @@ msgstr "numer wiersza poza zakresem"
 msgid "not allowed in the Vim sandbox"
 msgstr "Niedozwolone w piaskownicy Vima"
 
-msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Python: nie można używać :py i :py3 w czasie jednej sesji"
-
 msgid "E837: This Vim cannot execute :py3 after using :python"
 msgstr "E837: Python: nie można używać :py i :py3 w czasie jednej sesji"
 
@@ -2598,18 +2638,8 @@ msgstr ""
 "E263: Przykro mi, ta komenda jest wyÅ‚Ä…czona, bo nie można zaÅ‚adować "
 "biblioteki Pythona"
 
-msgid "can't delete OutputObject attributes"
-msgstr "nie mogÄ™ skasować atrybutów OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "softspace musi być liczbÄ… caÅ‚kowitÄ…"
-
-msgid "invalid attribute"
-msgstr "niepoprawny atrybut"
-
-#, c-format
-msgid "<buffer object (deleted) at %p>"
-msgstr "<obiekt bufora (skasowany) w %p>"
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Python: nie można używać :py i :py3 w czasie jednej sesji"
 
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Nie można wywoÅ‚ać Pythona rekursywnie"
@@ -2800,12 +2830,6 @@ msgstr ""
 "E571: Przykro mi, ta komenda jest wyÅ‚Ä…czona, bo nie można zaÅ‚adować "
 "biblioteki Tcl."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: BÅÄ„D TCL: kod zakoÅ„czeniowy nie jest caÅ‚kowity!? ProszÄ™ zÅ‚ożyć raport "
-"o tym na vim-dev@vim.org"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: kod wyjÅ›cia %d"
@@ -2964,6 +2988,9 @@ msgstr "-v\t\t\tTryb vi (jak \"vi\")"
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tTryb ex (jak \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tUsprawniony tryb Ex"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tCichy tryb (tÅ‚a) (tylko dla \"ex\")"
 
@@ -3206,19 +3233,6 @@ msgstr "-xrm <resource>\tUstaw okreÅ›lony zasób"
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Argumenty rozpoznawane przez gvim (wersja RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <number>\tPoczÄ…tkowa szerokość okna w kolumnach"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <number>\tPoczÄ…tkowa wysokość okna w wierszach"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3233,6 +3247,9 @@ msgstr "--role <role>\tUstaw unikatowÄ… rolÄ™ do identyfikacji głównego okna"
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tOtwórz Vim wewnÄ…trz innego widgetu GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "-echo-wid\t\tGvim wypisze Window ID na wyjÅ›cie standardowe"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <tytuÅ‚ rodzica>\tOtwórz Vima wewnÄ…trz rodzicielskiej aplikacji"
 
@@ -3291,7 +3308,6 @@ msgstr ""
 "\n"
 "zmieÅ„ wrsz. kol tekst"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3300,7 +3316,6 @@ msgstr ""
 "# ZakÅ‚adki w plikach:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3308,7 +3323,6 @@ msgstr ""
 "\n"
 "# Lista odniesieÅ„ (poczÄ…wszy od najnowszych):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3367,6 +3381,9 @@ msgstr "E298: Nie otrzymaÅ‚em bloku nr 1?"
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Nie otrzymaÅ‚em bloku nr 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: BÅ‚Ä…d w czasie uaktualniania szyfrowania pliku wymiany"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ojej, zgubiÅ‚em plik wymiany!!!"
@@ -3723,24 +3740,20 @@ msgstr "      NOWSZE od pliku wymiany!\n"
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes.\n"
 msgstr ""
 "\n"
 "(1) Pewnie inny program obrabia ten sam plik.\n"
 "    JeÅ›li tak, bÄ…dź ostrożny, aby nie skoÅ„czyć z dwoma\n"
-"    różnymi wersjami jednego tego samego pliku po zmianach.\n"
+"    różnymi wersjami tego samego pliku po zmianach.\n"
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    ZakoÅ„cz lub ostrożnie kontynuuj.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  ZakoÅ„cz lub ostrożnie kontynuuj.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Sesja edycji dla pliku zaÅ‚amaÅ‚a siÄ™.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Sesja edycji dla pliku zaÅ‚amaÅ‚a siÄ™.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    JeÅ›li tak, to użyj \":recover\" lub \"vim -r "
@@ -3969,7 +3982,6 @@ msgstr "Vim: zachowujÄ™ plik...\n"
 msgid "Vim: Finished.\n"
 msgstr "Vim: ZakoÅ„czono.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "BÅÄ„D: "
 
@@ -4015,7 +4027,7 @@ msgid "E547: Illegal mouseshape"
 msgstr "E547: Niedozwolony obrys myszki"
 
 msgid "E548: digit expected"
-msgstr "E548: oczekiwano cyfry"
+msgstr "E548: oczekiwaÅ‚em na cyfrÄ™"
 
 msgid "E549: Illegal percentage"
 msgstr "E549: Niedozwolony procent"
@@ -4029,6 +4041,9 @@ msgstr "Wprowadź ponownie ten sam klucz: "
 msgid "Keys don't match!"
 msgstr "Klucze nie pasujÄ… do siebie!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: Å›cieżka za dÅ‚uga by uzupeÅ‚nić"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4070,11 +4085,15 @@ msgstr "odczyt z gniazda Netbeans"
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Bufor %ld utraciÅ‚ poÅ‚Ä…czenie z NetBeans"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans nie sÄ… obsÅ‚ugiwane przez to GUI"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans już podÅ‚Ä…czone"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s jest tylko do odczytu (dodaj ! aby wymusić)"
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: Brak identyfikatora pod kursorem"
@@ -4216,8 +4235,8 @@ msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Kol %s z %s; Wiersz %ld z %ld; SÅ‚owo %ld z %ld; Znak %ld z %ld; Bajt %ld z %"
-"ld"
+"Kol %s z %s; Wiersz %ld z %ld; SÅ‚owo %ld z %ld; Znak %ld z %ld; Bajt %ld z "
+"%ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4238,6 +4257,9 @@ msgstr "E519: Opcja nie jest wspomagana"
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Niedozwolone w modeline"
 
+msgid "E846: Key code not set"
+msgstr "E846: Kod klucza nie jest ustawiony"
+
 msgid "E521: Number required after ="
 msgstr "E521: Po = wymagany jest numer"
 
@@ -4472,9 +4494,6 @@ msgstr ""
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: NiewÅ‚aÅ›ciwa opcja 'osfiletype' - używam Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Podwójny sygnaÅ‚, wychodzÄ™\n"
 
@@ -4692,24 +4711,15 @@ msgid "E681: Buffer is not loaded"
 msgstr "E681: Bufor nie jest zaÅ‚adowany"
 
 msgid "E777: String or List expected"
-msgstr "E777: Oczekiwano Å‚aÅ„cucha lub listy"
+msgstr "E777: OczekiwaÅ‚em na Å‚aÅ„cuch lub listÄ™"
 
 #, c-format
 msgid "E369: invalid item in %s%%[]"
 msgstr "E369: NiewÅ‚aÅ›ciwy element w %s%%[]"
 
-msgid "E339: Pattern too long"
-msgstr "E339: Zbyt dÅ‚ugi wzorzec"
-
-msgid "E50: Too many \\z("
-msgstr "E50: Zbyt wiele \\z("
-
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Zbyt wiele %s("
-
-msgid "E52: Unmatched \\z("
-msgstr "E52: Niesparowany \\z("
+msgid "E769: Missing ] after %s["
+msgstr "E769: Brak ] po %s["
 
 #, c-format
 msgid "E53: Unmatched %s%%("
@@ -4723,6 +4733,33 @@ msgstr "E54: Niesparowany %s("
 msgid "E55: Unmatched %s)"
 msgstr "E55: Niesparowany %s)"
 
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( jest niedozwolone w tym miejscu"
+
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 i podobne sÄ… niedozwolone w tym miejscu"
+
+#, c-format
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: Brak ] po %s%%["
+
+#, c-format
+msgid "E70: Empty %s%%[]"
+msgstr "E70: Pusty %s%%[]"
+
+msgid "E339: Pattern too long"
+msgstr "E339: Zbyt dÅ‚ugi wzorzec"
+
+msgid "E50: Too many \\z("
+msgstr "E50: Zbyt wiele \\z("
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: Zbyt wiele %s("
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: Niesparowany \\z("
+
 #, c-format
 msgid "E59: invalid character after %s@"
 msgstr "E59: niedozwolony znak po %s@"
@@ -4749,24 +4786,10 @@ msgstr "E64: %s%c po niczym"
 msgid "E65: Illegal back reference"
 msgstr "E65: NiewÅ‚aÅ›ciwe odwoÅ‚anie wsteczne"
 
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( jest niedozwolone w tym miejscu"
-
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 i podobne sÄ… niedozwolone w tym miejscu"
-
 msgid "E68: Invalid character after \\z"
 msgstr "E68: niedopuszczalny znak po \\z"
 
 #, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: Brak ] po %s%%["
-
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: Pusty %s%%[]"
-
-#, c-format
 msgid "E678: Invalid character after %s%%[dxouU]"
 msgstr "E678: Niedozwolony znak po %s%%[dxouU]"
 
@@ -4775,16 +4798,82 @@ msgid "E71: Invalid character after %s%%"
 msgstr "E71: Niedozwolony znak po %s%%"
 
 #, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: Brak ] po %s["
-
-#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: BÅ‚Ä…d skÅ‚adni w %s{...}"
 
 msgid "External submatches:\n"
 msgstr "ZewnÄ™trzne poddopasowania:\n"
 
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr "E:864: \\%#= może być tylko przed 0, 1 lub 2. Zostanie użyty silnik automatyczny"
+
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (wyrażenie regularne NFA) Niepoprawnie umieszczone %c"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) przedwczesny koniec wyrażenia regularnego"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) Nieznany operator '\\z%c'"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\%%%c'"
+msgstr "E867: (NFA) Nieznany operator '\\%%%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: BÅ‚Ä…d przy budowwaniu NFA z klasÄ… ekwiwalencji"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) Nieznany operator '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (wyrażenie regularne NFA) BÅ‚Ä…d przy odczytywaniu limitów powtórzeÅ„"
+
+#. Can't have a multi follow a multi.
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (wyrażenie regularne NFA) wielokrotne nie może być po wielokrotnym!"
+
+#. Too many `('
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (wyrażenie regularne NFA) Zbyt dużo '('"
+
+msgid "E879: (NFA regexp) Too many \\z("
+msgstr "E879: (wyrażenie regularne NFA) Za dużo \\z("
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (wyrażenie regularne NFA) bÅ‚Ä…d poprawnego zakoÅ„czenia"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) Nie można zdjąć elementu ze stosu!"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr "E875: (wyrażenie regularne NFA) (w trakcie konwersji postfix do NFA), za wiele stanów na stosie"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (wyrażenie regularne NFA) Nie ma miejsca na caÅ‚e NFA "
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (NFA) Nie można przydzielić pamiÄ™ci do przejÅ›cia przez gaÅ‚Ä™zie!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr "Nie można otworzyć do zapisu tymczasowego pliku, pokazujÄ™ na stderr... "
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) NIE MOÅ»NA OTWORZYĆ %s !"
+
+msgid "Could not open temporary log file for writing "
+msgstr "Nie można otworzyć do zapisu tymczasowego pliku logowania"
+
 msgid " VREPLACE"
 msgstr " V-ZAMIANA"
 
@@ -4936,6 +5025,11 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: Sprawdzanie pisowni nie jest wÅ‚Ä…czone"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"Ostrzeżenie: Nie mogÄ™ znaleźć listy słów \"%s_%s.spl\" lub \"%s_ascii.spl\""
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
 "Ostrzeżenie: Nie mogÄ™ znaleźć listy słów \"%s.%s.spl\" lub \"%s.ascii.spl\""
@@ -5033,8 +5127,8 @@ msgid ""
 "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
 "line %d: %s"
 msgstr ""
-"Afiks użyty także dla BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST w %"
-"s wiersz %d: %s"
+"Afiks użyty także dla BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST w "
+"%s wiersz %d: %s"
 
 #, c-format
 msgid "Expected Y or N in %s line %d: %s"
@@ -5163,6 +5257,9 @@ msgstr "Nieznane flagi w %s wiersz %d: %s"
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "ZignorowaÅ‚em %d słów ze znakami nie ASCII"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Nie wystarczajÄ…ca ilość pamiÄ™ci, lista słów bÄ™dzie niekompletna"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "Skompresowano %d z %d wÄ™złów; pozostaje %d (%d%%)"
@@ -5277,6 +5374,9 @@ msgstr "E782: BÅ‚Ä…d w czasie odczytu pliku .sug: %s"
 msgid "E783: duplicate char in MAP entry"
 msgstr "E783: Podwojony znak we wpisie MAP"
 
+msgid "No Syntax items defined for this buffer"
+msgstr "Brak elementów skÅ‚adni okreÅ›lonych dla tego bufora"
+
 #, c-format
 msgid "E390: Illegal argument: %s"
 msgstr "E390: Niedozwolony argument: %s"
@@ -5285,9 +5385,6 @@ msgstr "E390: Niedozwolony argument: %s"
 msgid "E391: No such syntax cluster: %s"
 msgstr "E391: Nie ma takiego klastra skÅ‚adni: %s"
 
-msgid "No Syntax items defined for this buffer"
-msgstr "Brak elementów skÅ‚adni okreÅ›lonych dla tego bufora"
-
 msgid "syncing on C-style comments"
 msgstr "synchronizacja komentarzy w stylu C"
 
@@ -5340,6 +5437,9 @@ msgstr "znaków nowego wiersza"
 msgid "E395: contains argument not accepted here"
 msgstr "E395: argument contains niedozwolony w tym miejscu"
 
+msgid "E844: invalid cchar value"
+msgstr "E844: NiewÅ‚aÅ›ciwa wartość cchar"
+
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]here niedozwolone w tym miejscu"
 
@@ -5350,6 +5450,9 @@ msgstr "E394: Nie znalazÅ‚em elementów regionu dla %s"
 msgid "E397: Filename required"
 msgstr "E397: Wymagana nazwa pliku"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Za dużo wÅ‚Ä…czonych skÅ‚adni"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: Brak ']': %s"
@@ -5362,6 +5465,9 @@ msgstr "E398: Brak '=': %s"
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Za maÅ‚o argumentów: syntax region %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Za dużo klastrów skÅ‚adni"
+
 msgid "E400: No cluster specified"
 msgstr "E400: Brak specyfikacji klastra"
 
@@ -5404,6 +5510,11 @@ msgstr "E409: Nieznana nazwa grupy: %s"
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410: NiewÅ‚aÅ›ciwa podkomenda :syntax : %s"
 
+msgid ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+msgstr ""
+"  WSZYTKO    ILOŚĆ  PASUJE  NAJWOLN.    ÅšREDNIO   NAZWA              WZORZEC"
+
 msgid "E679: recursive loop loading syncolor.vim"
 msgstr "E679: rekursywna pÄ™tla wczytujÄ…ca syncolor.vim"
 
@@ -5465,6 +5576,9 @@ msgstr "E669: Niedrukowalny znak w nazwie grupy"
 msgid "W18: Invalid character in group name"
 msgstr "W18: nieprawidÅ‚owy znak w nazwie grupy"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Za dużo grup podÅ›wietlania i skÅ‚adni"
+
 msgid "E555: at bottom of tag stack"
 msgstr "E555: na dole stosu znaczników"
 
@@ -5525,6 +5639,9 @@ msgstr "Szukam w pliku znaczników %s"
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Trop szukania pliku znaczników obciÄ™ty dla %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "IgnorujÄ™ dÅ‚ugie wiersze w pliku znaczników"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: BÅ‚Ä…d formatu w pliku znaczników \"%s\""
@@ -5541,9 +5658,6 @@ msgstr "E432: Plik znaczników nieuporzÄ…dkowany: %s"
 msgid "E433: No tags file"
 msgstr "E433: Brak pliku znaczników"
 
-msgid "Ignoring long line in tags file"
-msgstr "IgnorujÄ™ dÅ‚ugie wiersze w pliku znaczników"
-
 msgid "E434: Can't find tag pattern"
 msgstr "E434: Nie mogÄ™ znaleźć wzorca znacznika"
 
@@ -5715,8 +5829,8 @@ msgstr "za"
 msgid "Nothing to undo"
 msgstr "Nie ma zmian do cofniÄ™cia"
 
-msgid "number changes  time            saved"
-msgstr "liczba zmiany  czas            zapisano"
+msgid "number changes  when               saved"
+msgstr "liczba zmiany   kiedy              zapisano"
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5817,13 +5931,6 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"wersja dla RISC OS"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6459,6 +6566,9 @@ msgstr "E139: Plik jest zaÅ‚adowany w innym buforze"
 msgid "E764: Option '%s' is not set"
 msgstr "E764: Nie ustawiono opcji '%s'"
 
+msgid "E850: Invalid register name"
+msgstr "E850: NiewÅ‚aÅ›ciwa nazwa rejestru"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "szukanie dobiÅ‚o GÓRY; kontynuacja od KOŃCA"
 
@@ -6469,35 +6579,167 @@ msgstr "szukanie dobiÅ‚o KOŃCA; kontynuacja od GÓRY"
 msgid "Need encryption key for \"%s\""
 msgstr "PotrzebujÄ™ klucza szyfrowania dla \"%s\""
 
-msgid "writelines() requires list of strings"
-msgstr "writelines() wymaga listy ciÄ…gów"
+msgid "empty keys are not allowed"
+msgstr "puste klucze nie sÄ… dozwolone"
+
+msgid "dictionary is locked"
+msgstr "sÅ‚ownik jest zablokowany"
+
+msgid "list is locked"
+msgstr "lista jest zablokowana"
+
+#, c-format
+msgid "failed to add key '%s' to dictionary"
+msgstr "nie powiodÅ‚o siÄ™ dodanie klucza '%s' do sÅ‚ownika"
+
+#, c-format
+msgid "index must be int or slice, not %s"
+msgstr "indeks musi być liczbÄ… lub wycinkiem, nie %s"
+
+#, c-format
+msgid "expected str() or unicode() instance, but got %s"
+msgstr "czekaÅ‚em na str() lub unicode(), a dostaÅ‚em %s"
+
+#, c-format
+msgid "expected bytes() or str() instance, but got %s"
+msgstr "czekaÅ‚em na bytes() lub str(), a dostaÅ‚em %s"
+
+#, c-format
+msgid ""
+"expected int(), long() or something supporting coercing to long(), but got %s"
+msgstr ""
+"czekaÅ‚em na int(), long() lub coÅ› co można zmienić na long(), ale dostaÅ‚em %s"
+
+#, c-format
+msgid "expected int() or something supporting coercing to int(), but got %s"
+msgstr "czekaÅ‚em na int() lub coÅ› co można zmienić na int(), ale dostaÅ‚em %s"
+
+msgid "value is too large to fit into C int type"
+msgstr "wartość zbyt duża by zmieÅ›ciÅ‚a siÄ™ w typie int C"
+
+msgid "value is too small to fit into C int type"
+msgstr "wartość jest zbyt maÅ‚a by zmieÅ›ciÅ‚a siÄ™ w typie int C"
+
+msgid "number must be greater then zero"
+msgstr "liczba musi być wiÄ™ksza niż zero"
+
+msgid "number must be greater or equal to zero"
+msgstr "liczba musi być wiÄ™ksza lub mniejsza niż zero"
+
+msgid "can't delete OutputObject attributes"
+msgstr "nie mogÄ™ skasować atrybutów OutputObject"
+
+#, c-format
+msgid "invalid attribute: %s"
+msgstr "niepoprawny atrybut: %s"
 
 msgid "E264: Python: Error initialising I/O objects"
 msgstr "E264: Python: BÅ‚Ä…d w uruchomieniu obiektów I/O"
 
-msgid "no such buffer"
-msgstr "nie ma takiego bufora"
+msgid "failed to change directory"
+msgstr "nie powiodÅ‚a siÄ™ zmiana katalogu"
 
-msgid "attempt to refer to deleted window"
-msgstr "próba odniesienia do skasowanego okna"
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got %s"
+msgstr "czekaÅ‚em na 3-krotkÄ™ jako wynik imp.find_module(), a dostaÅ‚em %s"
 
-msgid "readonly attribute"
-msgstr "atrybut tylko do odczytu"
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
+msgstr "czekaÅ‚em na 3-krotkÄ™ jako wynik imp.find_module(), a dostaÅ‚em krotkÄ™ o wielkoÅ›ci %d"
 
-msgid "cursor position outside buffer"
-msgstr "pozycja kursora poza buforem"
+msgid "internal error: imp.find_module returned tuple with NULL"
+msgstr "wewnÄ™trzny bÅ‚Ä…d: imp.find_module zwróciÅ‚ krotkÄ™ z NULL"
+
+msgid "cannot delete vim.Dictionary attributes"
+msgstr "nie mogÄ™ usunąć atrybutów vim.Dictionary"
+
+msgid "cannot modify fixed dictionary"
+msgstr "nie mogÄ™ zmienić zablokowanego sÅ‚ownika"
+
+#, c-format
+msgid "cannot set attribute %s"
+msgstr "nie mogÄ™ ustawić atrybutu %s"
+
+msgid "hashtab changed during iteration"
+msgstr "hashtab zmieniÅ‚ siÄ™ w czasie iteracji"
+
+#, c-format
+msgid "expected sequence element of size 2, but got sequence of size %d"
+msgstr "czekaÅ‚em na element sekwencyjny od dÅ‚ugoÅ›ci 2, a dostaÅ‚em sekwencjÄ™ o dÅ‚ugoÅ›ci %d"
+
+msgid "list constructor does not accept keyword arguments"
+msgstr "konstruktor listy nie akceptuje słów kluczowych jako argumentów"
+
+msgid "list index out of range"
+msgstr "indeks listy poza zakresem"
+
+#. No more suitable format specifications in python-2.3
+#, c-format
+msgid "internal error: failed to get vim list item %d"
+msgstr "bÅ‚Ä…d wewnÄ™trzny: nie powiodÅ‚o siÄ™ pobranie z listy Vima elementu %d"
+
+msgid "failed to add item to list"
+msgstr "nie powiodÅ‚o siÄ™ dodanie elementu do listy"
+
+#, c-format
+msgid "internal error: no vim list item %d"
+msgstr "bÅ‚Ä…d wewnÄ™trzny: w liÅ›cie Vima brak elementu %d"
+
+msgid "internal error: failed to add item to list"
+msgstr "bÅ‚Ä…d wewnÄ™trzny: nie powiodÅ‚o siÄ™ dodanie elementu do listy"
+
+msgid "cannot delete vim.List attributes"
+msgstr "nie mogÄ™ usunąć atrybutów vim.List"
+
+msgid "cannot modify fixed list"
+msgstr "nie mogÄ™ zmienić zablokowanej listy"
+
+#, c-format
+msgid "unnamed function %s does not exist"
+msgstr "nie nazwana funkcja %s nie istnieje"
 
 #, c-format
-msgid "<window object (deleted) at %p>"
-msgstr "<obiekt okna (skasowany) w %p>"
+msgid "function %s does not exist"
+msgstr "funkcja %s nie istnieje"
+
+msgid "function constructor does not accept keyword arguments"
+msgstr "konstruktor funkcji nie akceptuje słów kluczowych jako argumentów"
+
+#, c-format
+msgid "failed to run function %s"
+msgstr "nie mogÄ™ uruchomić funkcji %s"
+
+msgid "unable to get option value"
+msgstr "nie mogÄ™ pobrać wartoÅ›ci opcji"
+
+msgid "internal error: unknown option type"
+msgstr "bÅ‚Ä…d wewnÄ™trzny: nieznany typ opcji"
+
+msgid "problem while switching windows"
+msgstr "wystÄ…piÅ‚ problem w czasie zmiany okien"
 
 #, c-format
-msgid "<window object (unknown) at %p>"
-msgstr "<obiekt okna (nieznany) w %p>"
+msgid "unable to unset global option %s"
+msgstr "nie mogÄ™ wyzerować opcji globalnej %s"
 
 #, c-format
-msgid "<window %d>"
-msgstr "<okno %d>"
+msgid "unable to unset option %s which does not have global value"
+msgstr "nie mogÄ™ wyzerować opcji %s, która nie ma wartoÅ›ci globalnej"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "próba odniesienia do skasowanej karty"
+
+msgid "no such tab page"
+msgstr "nie ma takiej karty"
+
+msgid "attempt to refer to deleted window"
+msgstr "próba odniesienia do skasowanego okna"
+
+msgid "readonly attribute: buffer"
+msgstr "atrybut tylko do odczytu: bufor"
+
+msgid "cursor position outside buffer"
+msgstr "pozycja kursora poza buforem"
 
 msgid "no such window"
 msgstr "nie ma takiego okna"
@@ -6505,6 +6747,126 @@ msgstr "nie ma takiego okna"
 msgid "attempt to refer to deleted buffer"
 msgstr "próba odniesienia do skasowanego bufora"
 
+msgid "failed to rename buffer"
+msgstr "nie powiodÅ‚a siÄ™ zmiana nazwy bufora"
+
+msgid "mark name must be a single character"
+msgstr "nazwa zakÅ‚adki musi być pojedynczym znakiem"
+
+#, c-format
+msgid "expected vim.Buffer object, but got %s"
+msgstr "oczekiwaÅ‚em na obiekt vim.Buffer, a dostaÅ‚em %s"
+
+#, c-format
+msgid "failed to switch to buffer %d"
+msgstr "nie przeszedÅ‚em do bufora %d"
+
+#, c-format
+msgid "expected vim.Window object, but got %s"
+msgstr "oczekiwaÅ‚em na obiekt vim.Window, a dostaÅ‚em %s"
+
+msgid "failed to find window in the current tab page"
+msgstr "nie znaleziono okna na bieżącej karcie"
+
+msgid "did not switch to the specified window"
+msgstr "nie przeszedÅ‚em do okreÅ›lonego okna"
+
+#, c-format
+msgid "expected vim.TabPage object, but got %s"
+msgstr "oczekiwaÅ‚em na obiekt vim.TabPage, a dostaÅ‚em %s"
+
+msgid "did not switch to the specified tab page"
+msgstr "nie przeszedÅ‚em do okreÅ›lonej karty"
+
+msgid "failed to run the code"
+msgstr "uruchomienie kodu siÄ™ nie powiodÅ‚o"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: eval nie zwróciÅ‚o odpowiedniego obiektu pythona"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: Nie powiodÅ‚a siÄ™ konwersja obiektu pythona do wartoÅ›ci Vima"
+
+#, c-format
+msgid "unable to convert %s to vim dictionary"
+msgstr "nie można konwertować %s do sÅ‚ownika Vima"
+
+#, c-format
+msgid "unable to convert %s to vim structure"
+msgstr "nie można konwertować %s do struktury Vima"
+
+msgid "internal error: NULL reference passed"
+msgstr "bÅ‚Ä…d wewnÄ™trzny: przekazano referencjÄ™ NULL"
+
+msgid "internal error: invalid value type"
+msgstr "bÅ‚Ä…d wewnÄ™trzny: bÅ‚Ä™dny typ wartoÅ›ci"
+
+msgid ""
+"Failed to set path hook: sys.path_hooks is not a list\n"
+"You should now do the following:\n"
+"- append vim.path_hook to sys.path_hooks\n"
+"- append vim.VIM_SPECIAL_PATH to sys.path\n"
+msgstr ""
+"Nie mogÄ™ ustawić haka Å›cieżki: sys.path_hooks nie jest listÄ…\n"
+"PowinieneÅ› teraz wykonać nastÄ™pujÄ…ce czynnoÅ›ci:\n"
+"- dodać vim.path_hook do sys.path_hooks\n"
+"- dodać vim.VIM_SPECIAL_PATH do sys.path\n"
+
+msgid ""
+"Failed to set path: sys.path is not a list\n"
+"You should now append vim.VIM_SPECIAL_PATH to sys.path"
+msgstr ""
+"Nie mogÄ™ ustawić Å›cieżki: sys.path nie jest listÄ…\n"
+"Powinno siÄ™ teraz dodać vim.VIM_SPECIAL_PATH do sys.path"
+
+#~ msgid "softspace must be an integer"
+#~ msgstr "softspace musi być liczbÄ… caÅ‚kowitÄ…"
+
+#~ msgid "<buffer object (deleted) at %p>"
+#~ msgstr "<obiekt bufora (skasowany) w %p>"
+
+#~ msgid ""
+#~ "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim."
+#~ "org"
+#~ msgstr ""
+#~ "E281: BÅÄ„D TCL: kod zakoÅ„czeniowy nie jest caÅ‚kowity!? ProszÄ™ zÅ‚ożyć "
+#~ "raport o tym na vim-dev@vim.org"
+
+#~ msgid ""
+#~ "\n"
+#~ "Arguments recognised by gvim (RISC OS version):\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Argumenty rozpoznawane przez gvim (wersja RISC OS):\n"
+
+#~ msgid "--columns <number>\tInitial width of window in columns"
+#~ msgstr "--columns <number>\tPoczÄ…tkowa szerokość okna w kolumnach"
+
+#~ msgid "--rows <number>\tInitial height of window in rows"
+#~ msgstr "--rows <number>\tPoczÄ…tkowa wysokość okna w wierszach"
+
+#~ msgid "E505: "
+#~ msgstr "E505: "
+
+#~ msgid ""
+#~ "\n"
+#~ "RISC OS version"
+#~ msgstr ""
+#~ "\n"
+#~ "wersja dla RISC OS"
+
+#~ msgid "writelines() requires list of strings"
+#~ msgstr "writelines() wymaga listy ciÄ…gów"
+
+#~ msgid "<window object (deleted) at %p>"
+#~ msgstr "<obiekt okna (skasowany) w %p>"
+
+#~ msgid "<window object (unknown) at %p>"
+#~ msgstr "<obiekt okna (nieznany) w %p>"
+
+#~ msgid "<window %d>"
+#~ msgstr "<okno %d>"
+
 #~ msgid "-name <name>\t\tUse resource as if vim was <name>"
 #~ msgstr "-name <nazwa>\t\tUżywaj zasobów tak jak by Vim byÅ‚ <nazwa>"
 
index b5f649a..c402886 100644 (file)
@@ -1,20 +1,20 @@
 # translation of pl.po to Polish
 # Polish Translation for Vim
 #
-# updated 2010 for vim-7.3
+# updated 2013 for vim-7.4
 #
 # FIRST AUTHOR Marcin Dalecki <martin@dalecki.de>, 2000.
-# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-10 18:13+0200\n"
+"POT-Creation-Date: 2013-07-06 19:33+0200\n"
 "PO-Revision-Date: 2010-08-10 18:15+0200\n"
 "Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
-"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
+"Language: pl\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=cp1250\n"
+"Content-Type: text/plain; charset=CP1250\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Lokalize 1.0\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
@@ -41,6 +41,9 @@ msgstr "[Lista lokacji]"
 msgid "[Quickfix List]"
 msgstr "[Lista quickfix]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Autokomendy spowodowa³y porzucenie komendy"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Nie mogê zarezerwowaæ bufora; zakoñczenie..."
 
@@ -135,6 +138,9 @@ msgstr "[Nowy Plik]"
 msgid "[Read errors]"
 msgstr "[B³¹d odczytu]"
 
+msgid "[RO]"
+msgstr "[RO]"
+
 msgid "[readonly]"
 msgstr "[tylko odczyt]"
 
@@ -172,7 +178,6 @@ msgstr "D
 msgid "Top"
 msgstr "Góra"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -299,6 +304,12 @@ msgstr " Lokalne dope
 msgid "Hit end of paragraph"
 msgstr "Dobi³em do koñca akapitu"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: Funkcja uzupe³niania zmieni³a okno"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Funkcja uzupe³nania usunê³a tekst"
+
 msgid "'dictionary' option is empty"
 msgstr "opcja 'dictionary' jest pusta"
 
@@ -413,6 +424,9 @@ msgstr "E130: Nieznana funkcja: %s"
 msgid "E461: Illegal variable name: %s"
 msgstr "E461: Niedozwolona nazwa zmiennej: %s"
 
+msgid "E806: using Float as a String"
+msgstr "E806: U¿ycie Zmiennoprzecinkowej jako Â£añcucha"
+
 msgid "E687: Less targets than List items"
 msgstr "E687: Mniej celów ni¿ elementów Listy"
 
@@ -555,6 +569,9 @@ msgstr "E725: Wywo
 msgid "E808: Number or Float required"
 msgstr "E808: Wymagana Liczba lub Zmiennoprzecinkowa"
 
+msgid "add() argument"
+msgstr "argument add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Za du¿o argumentów"
 
@@ -573,6 +590,15 @@ msgstr "&Ok"
 msgid "E737: Key already exists: %s"
 msgstr "E737: Klucz ju¿ istnieje: %s"
 
+msgid "extend() argument"
+msgstr "argument extend()"
+
+msgid "map() argument"
+msgstr "argument map()"
+
+msgid "filter() argument"
+msgstr "argument filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld wierszy: "
@@ -591,6 +617,9 @@ msgstr ""
 msgid "called inputrestore() more often than inputsave()"
 msgstr "wywo³ano inputrestore() wiêcej razy ni¿ inputsave()"
 
+msgid "insert() argument"
+msgstr "argument insert()"
+
 msgid "E786: Range not allowed"
 msgstr "E786: Zakres niedozwolony"
 
@@ -616,12 +645,21 @@ msgstr "E241: Nie mog
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Nie mogê czytaæ odpowiedzi serwera"
 
+msgid "remove() argument"
+msgstr "argument remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Za du¿o dowi¹zañ symbolicznych (pêtla?)"
 
+msgid "reverse() argument"
+msgstr "argument reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: Nie mogê wys³aæ do klienta"
 
+msgid "sort() argument"
+msgstr "argument sort()"
+
 msgid "E702: Sort compare function failed"
 msgstr "E702: Funkcja porównywania w sort nie powiod³a siê"
 
@@ -652,8 +690,13 @@ msgstr "E730: U
 msgid "E731: using Dictionary as a String"
 msgstr "E731: U¿ycie S³ownika jako Â£añcucha"
 
-msgid "E806: using Float as a String"
-msgstr "E806: U¿ycie Zmiennoprzecinkowej jako Â£añcucha"
+#, c-format
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: Nieprawid³owy typ zmiennej dla: %s"
+
+#, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Nie mogê usun¹æ zmiennej %s"
 
 #, c-format
 msgid "E704: Funcref variable name must start with a capital: %s"
@@ -664,14 +707,6 @@ msgid "E705: Variable name conflicts with existing function: %s"
 msgstr "E705: Nazwa zmiennej jest w konflikcie z istniej¹c¹ funkcj¹: %s"
 
 #, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: Nieprawid³owy typ zmiennej dla: %s"
-
-#, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: Nie mogê usun¹æ zmiennej %s"
-
-#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: Warto\9cæ jest zablokowana: %s"
 
@@ -693,10 +728,17 @@ msgstr "E123: Nieznana funkcja: %s"
 msgid "E124: Missing '(': %s"
 msgstr "E124: Brak '(': %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: Nie mo¿na tutaj u¿yæ g:"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Niedozwolony argument: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Powtórzona nazwa argumentu: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Brak :endfunction"
 
@@ -971,7 +1013,6 @@ msgstr "Zapisuj
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Ten plik viminfo zosta³ wygenerowany przez Vima %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -979,7 +1020,6 @@ msgstr ""
 "# Mo¿esz go ostro¿nie edytowaæ!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Warto\9cæ 'encoding' w czasie zapisu tego pliku\n"
 
@@ -1089,6 +1129,9 @@ msgid "Pattern found in every line: %s"
 msgstr "Wzorzec znaleziono w ka¿dym wierszu: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "Nie znaleziono wzorca: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1266,6 +1309,10 @@ msgstr ""
 "E183: Komendy zdefiniowane przez u¿ytkownika musz¹ rozpoczynaæ siê du¿¹ "
 "liter¹"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841: Nazwa zastrze¿ona, nie mo¿na jej u¿yæ w komendzie u¿ytkownika"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Nie ma takiej komendy u¿ytkownika: %s"
@@ -1285,8 +1332,8 @@ msgid "unknown"
 msgstr "nieznany"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Nie mogê znale\9fæ zestawu kolorów %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Nie mogê znale\9fæ zestawu kolorów '%s'"
 
 msgid "Greetings, Vim user!"
 msgstr "Witaj u¿ytkowniku Vima!"
@@ -1384,6 +1431,9 @@ msgstr "E497: brak nazwy dopasowania autokomend pod \"<amatch>\""
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: brak nazwy pliku :source do postawienia pod \"<sfile>\""
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: brak numeru linii by u¿yæ z \"<slnum>\""
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: Pusta nazwa pliku dla '%' lub '#', dzia³a tylko z \":p:h\""
@@ -1600,9 +1650,6 @@ msgstr "[socket]"
 msgid "[character special]"
 msgstr "[specjalny znak]"
 
-msgid "[RO]"
-msgstr "[RO]"
-
 msgid "[CR missing]"
 msgstr "[brak CR]'"
 
@@ -1615,6 +1662,9 @@ msgstr "[NIE przemienione]"
 msgid "[converted]"
 msgstr "[przemienione]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[zakodowane]"
 
@@ -2018,6 +2068,12 @@ msgstr "Scrollbar Widget: Nie mog
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: Nie mogê stworzyæ BalloonEval z powiadomieniem i wywo³aniem"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Nie mog³em stworzyæ nowego procesu dla GUI"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Proces potomny nie móg³ uruchomiæ GUI"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Nie mogê odpaliæ GUI"
 
@@ -2147,21 +2203,6 @@ msgid "&Undo"
 msgstr "&Cofnij"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Nie mogê za³adowaæ czcionki Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Nie mogê u¿yæ czcionki %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Wysy³am zawiadomienie koñcz¹ce proces pochodny.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Nie mogê znale\9fæ tytu³u okna \"%s\""
 
@@ -2211,32 +2252,28 @@ msgid "Font '%s' is not fixed-width"
 msgstr "Czcionka '%s' nie posiada znaków jednolitej szeroko\9cci"
 
 #, c-format
-msgid "E253: Fontset name: %s\n"
-msgstr "E253: Nazwa zestawu czcionek: %s\n"
+msgid "E253: Fontset name: %s"
+msgstr "E253: Nazwa zestawu czcionek: %s"
 
 #, c-format
-msgid "Font0: %s\n"
-msgstr "Font0: %s\n"
+msgid "Font0: %s"
+msgstr "Font0: %s"
 
 #, c-format
-msgid "Font1: %s\n"
-msgstr "Font1: %s\n"
+msgid "Font1: %s"
+msgstr "Font1: %s"
 
 #, c-format
-msgid "Font%ld width is not twice that of font0\n"
-msgstr "Szeroko\9cæ font%ld nie jest podwójn¹ szeroko\9cci¹ font0\n"
+msgid "Font%ld width is not twice that of font0"
+msgstr "Szeroko\9cæ font%ld nie jest podwójn¹ szeroko\9cci¹ font0"
 
 #, c-format
-msgid "Font0 width: %ld\n"
-msgstr "Szeroko\9cæ font0: %ld\n"
+msgid "Font0 width: %ld"
+msgstr "Szeroko\9cæ font0: %ld"
 
 #, c-format
-msgid ""
-"Font1 width: %ld\n"
-"\n"
-msgstr ""
-"Szeroko\9cæ font1: %ld\n"
-"\n"
+msgid "Font1 width: %ld"
+msgstr "Szeroko\9cæ font1: %ld"
 
 msgid "Invalid font specification"
 msgstr "Nieprawid³owy opis czcionki"
@@ -2279,7 +2316,7 @@ msgid "E551: Illegal component"
 msgstr "E551: Niedozwolona czê\9cæ"
 
 msgid "E552: digit expected"
-msgstr "E552: oczekiwano cyfry"
+msgstr "E552: oczekiwa³em na cyfrê"
 
 #, c-format
 msgid "Page %d"
@@ -2424,6 +2461,9 @@ msgstr "E566: Nie mog
 msgid "E622: Could not fork for cscope"
 msgstr "E622: Nie mog³em utworzyæ rozwidlenia dla cscope"
 
+msgid "cs_create_connection setpgid failed"
+msgstr "nie powiod³o siê setpgid cs_create_connection"
+
 msgid "cs_create_connection exec failed"
 msgstr "wykonanie cs_create_connection nie powiod³o siê"
 
@@ -2463,7 +2503,7 @@ msgid ""
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: znajd\9f funkcje wywo³uj¹ce tê funkcjê\n"
@@ -2473,7 +2513,7 @@ msgstr ""
 "       g: znajd\9f tê definicjê\n"
 "       i: znajd\9f pliki w³¹czaj¹ce (#include) ten plik\n"
 "       s: znajd\9f ten symbol C\n"
-"       t: znajd\9f przypisania do\n"
+"       t: znajd\9f ten Â³añcuch znaków\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2567,6 +2607,9 @@ msgstr "nie mog
 msgid "string cannot contain newlines"
 msgstr "ci¹g nie mo¿e zawieraæ znaków nowego wiersza"
 
+msgid "error converting Scheme values to Vim"
+msgstr "b³¹d przy konwersji warto\9cci Scheme do Vima"
+
 msgid "Vim error: ~a"
 msgstr "B³¹d vima: ~a"
 
@@ -2585,9 +2628,6 @@ msgstr "numer wiersza poza zakresem"
 msgid "not allowed in the Vim sandbox"
 msgstr "Niedozwolone w piaskownicy Vima"
 
-msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Python: nie mo¿na u¿ywaæ :py i :py3 w czasie jednej sesji"
-
 msgid "E837: This Vim cannot execute :py3 after using :python"
 msgstr "E837: Python: nie mo¿na u¿ywaæ :py i :py3 w czasie jednej sesji"
 
@@ -2598,18 +2638,8 @@ msgstr ""
 "E263: Przykro mi, ta komenda jest wy³¹czona, bo nie mo¿na za³adowaæ "
 "biblioteki Pythona"
 
-msgid "can't delete OutputObject attributes"
-msgstr "nie mogê skasowaæ atrybutów OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "softspace musi byæ liczb¹ ca³kowit¹"
-
-msgid "invalid attribute"
-msgstr "niepoprawny atrybut"
-
-#, c-format
-msgid "<buffer object (deleted) at %p>"
-msgstr "<obiekt bufora (skasowany) w %p>"
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Python: nie mo¿na u¿ywaæ :py i :py3 w czasie jednej sesji"
 
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Nie mo¿na wywo³aæ Pythona rekursywnie"
@@ -2800,12 +2830,6 @@ msgstr ""
 "E571: Przykro mi, ta komenda jest wy³¹czona, bo nie mo¿na za³adowaæ "
 "biblioteki Tcl."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: B£¥D TCL: kod zakoñczeniowy nie jest ca³kowity!? Proszê z³o¿yæ raport "
-"o tym na vim-dev@vim.org"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: kod wyj\9ccia %d"
@@ -2964,6 +2988,9 @@ msgstr "-v\t\t\tTryb vi (jak \"vi\")"
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tTryb ex (jak \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tUsprawniony tryb Ex"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tCichy tryb (t³a) (tylko dla \"ex\")"
 
@@ -3206,19 +3233,6 @@ msgstr "-xrm <resource>\tUstaw okre
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Argumenty rozpoznawane przez gvim (wersja RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <number>\tPocz¹tkowa szeroko\9cæ okna w kolumnach"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <number>\tPocz¹tkowa wysoko\9cæ okna w wierszach"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3233,6 +3247,9 @@ msgstr "--role <role>\tUstaw unikatow
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tOtwórz Vim wewn¹trz innego widgetu GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "-echo-wid\t\tGvim wypisze Window ID na wyj\9ccie standardowe"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <tytu³ rodzica>\tOtwórz Vima wewn¹trz rodzicielskiej aplikacji"
 
@@ -3291,7 +3308,6 @@ msgstr ""
 "\n"
 "zmieñ wrsz. kol tekst"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3300,7 +3316,6 @@ msgstr ""
 "# Zak³adki w plikach:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3308,7 +3323,6 @@ msgstr ""
 "\n"
 "# Lista odniesieñ (pocz¹wszy od najnowszych):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3367,6 +3381,9 @@ msgstr "E298: Nie otrzyma
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Nie otrzyma³em bloku nr 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: B³¹d w czasie uaktualniania szyfrowania pliku wymiany"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ojej, zgubi³em plik wymiany!!!"
@@ -3723,24 +3740,20 @@ msgstr "      NOWSZE od pliku wymiany!\n"
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes.\n"
 msgstr ""
 "\n"
 "(1) Pewnie inny program obrabia ten sam plik.\n"
 "    Je\9cli tak, b¹d\9f ostro¿ny, aby nie skoñczyæ z dwoma\n"
-"    ró¿nymi wersjami jednego tego samego pliku po zmianach.\n"
+"    ró¿nymi wersjami tego samego pliku po zmianach.\n"
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Zakoñcz lub ostro¿nie kontynuuj.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Zakoñcz lub ostro¿nie kontynuuj.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Sesja edycji dla pliku za³ama³a siê.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Sesja edycji dla pliku za³ama³a siê.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Je\9cli tak, to u¿yj \":recover\" lub \"vim -r "
@@ -3969,7 +3982,6 @@ msgstr "Vim: zachowuj
 msgid "Vim: Finished.\n"
 msgstr "Vim: Zakoñczono.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "B£¥D: "
 
@@ -4015,7 +4027,7 @@ msgid "E547: Illegal mouseshape"
 msgstr "E547: Niedozwolony obrys myszki"
 
 msgid "E548: digit expected"
-msgstr "E548: oczekiwano cyfry"
+msgstr "E548: oczekiwa³em na cyfrê"
 
 msgid "E549: Illegal percentage"
 msgstr "E549: Niedozwolony procent"
@@ -4029,6 +4041,9 @@ msgstr "Wprowad
 msgid "Keys don't match!"
 msgstr "Klucze nie pasuj¹ do siebie!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: \9ccie¿ka za d³uga by uzupe³niæ"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4070,11 +4085,15 @@ msgstr "odczyt z gniazda Netbeans"
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Bufor %ld utraci³ po³¹czenie z NetBeans"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans nie s¹ obs³ugiwane przez to GUI"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans ju¿ pod³¹czone"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s jest tylko do odczytu (dodaj ! aby wymusiæ)"
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: Brak identyfikatora pod kursorem"
@@ -4216,8 +4235,8 @@ msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Kol %s z %s; Wiersz %ld z %ld; S³owo %ld z %ld; Znak %ld z %ld; Bajt %ld z %"
-"ld"
+"Kol %s z %s; Wiersz %ld z %ld; S³owo %ld z %ld; Znak %ld z %ld; Bajt %ld z "
+"%ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4238,6 +4257,9 @@ msgstr "E519: Opcja nie jest wspomagana"
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Niedozwolone w modeline"
 
+msgid "E846: Key code not set"
+msgstr "E846: Kod klucza nie jest ustawiony"
+
 msgid "E521: Number required after ="
 msgstr "E521: Po = wymagany jest numer"
 
@@ -4472,9 +4494,6 @@ msgstr ""
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Niew³a\9cciwa opcja 'osfiletype' - u¿ywam Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Podwójny sygna³, wychodzê\n"
 
@@ -4692,24 +4711,15 @@ msgid "E681: Buffer is not loaded"
 msgstr "E681: Bufor nie jest za³adowany"
 
 msgid "E777: String or List expected"
-msgstr "E777: Oczekiwano Â³añcucha lub listy"
+msgstr "E777: Oczekiwa³em na Â³añcuch lub listê"
 
 #, c-format
 msgid "E369: invalid item in %s%%[]"
 msgstr "E369: Niew³a\9cciwy element w %s%%[]"
 
-msgid "E339: Pattern too long"
-msgstr "E339: Zbyt d³ugi wzorzec"
-
-msgid "E50: Too many \\z("
-msgstr "E50: Zbyt wiele \\z("
-
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Zbyt wiele %s("
-
-msgid "E52: Unmatched \\z("
-msgstr "E52: Niesparowany \\z("
+msgid "E769: Missing ] after %s["
+msgstr "E769: Brak ] po %s["
 
 #, c-format
 msgid "E53: Unmatched %s%%("
@@ -4723,6 +4733,33 @@ msgstr "E54: Niesparowany %s("
 msgid "E55: Unmatched %s)"
 msgstr "E55: Niesparowany %s)"
 
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( jest niedozwolone w tym miejscu"
+
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 i podobne s¹ niedozwolone w tym miejscu"
+
+#, c-format
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: Brak ] po %s%%["
+
+#, c-format
+msgid "E70: Empty %s%%[]"
+msgstr "E70: Pusty %s%%[]"
+
+msgid "E339: Pattern too long"
+msgstr "E339: Zbyt d³ugi wzorzec"
+
+msgid "E50: Too many \\z("
+msgstr "E50: Zbyt wiele \\z("
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: Zbyt wiele %s("
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: Niesparowany \\z("
+
 #, c-format
 msgid "E59: invalid character after %s@"
 msgstr "E59: niedozwolony znak po %s@"
@@ -4749,24 +4786,10 @@ msgstr "E64: %s%c po niczym"
 msgid "E65: Illegal back reference"
 msgstr "E65: Niew³a\9cciwe odwo³anie wsteczne"
 
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( jest niedozwolone w tym miejscu"
-
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 i podobne s¹ niedozwolone w tym miejscu"
-
 msgid "E68: Invalid character after \\z"
 msgstr "E68: niedopuszczalny znak po \\z"
 
 #, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: Brak ] po %s%%["
-
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: Pusty %s%%[]"
-
-#, c-format
 msgid "E678: Invalid character after %s%%[dxouU]"
 msgstr "E678: Niedozwolony znak po %s%%[dxouU]"
 
@@ -4775,16 +4798,82 @@ msgid "E71: Invalid character after %s%%"
 msgstr "E71: Niedozwolony znak po %s%%"
 
 #, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: Brak ] po %s["
-
-#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: B³¹d sk³adni w %s{...}"
 
 msgid "External submatches:\n"
 msgstr "Zewnêtrzne poddopasowania:\n"
 
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr "E:864: \\%#= mo¿e byæ tylko przed 0, 1 lub 2. Zostanie u¿yty silnik automatyczny"
+
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (wyra¿enie regularne NFA) Niepoprawnie umieszczone %c"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) przedwczesny koniec wyra¿enia regularnego"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) Nieznany operator '\\z%c'"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\%%%c'"
+msgstr "E867: (NFA) Nieznany operator '\\%%%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: B³¹d przy budowwaniu NFA z klas¹ ekwiwalencji"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) Nieznany operator '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (wyra¿enie regularne NFA) B³¹d przy odczytywaniu limitów powtórzeñ"
+
+#. Can't have a multi follow a multi.
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (wyra¿enie regularne NFA) wielokrotne nie mo¿e byæ po wielokrotnym!"
+
+#. Too many `('
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (wyra¿enie regularne NFA) Zbyt du¿o '('"
+
+msgid "E879: (NFA regexp) Too many \\z("
+msgstr "E879: (wyra¿enie regularne NFA) Za du¿o \\z("
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (wyra¿enie regularne NFA) b³¹d poprawnego zakoñczenia"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) Nie mo¿na zdj¹æ elementu ze stosu!"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr "E875: (wyra¿enie regularne NFA) (w trakcie konwersji postfix do NFA), za wiele stanów na stosie"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (wyra¿enie regularne NFA) Nie ma miejsca na ca³e NFA "
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (NFA) Nie mo¿na przydzieliæ pamiêci do przej\9ccia przez ga³êzie!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr "Nie mo¿na otworzyæ do zapisu tymczasowego pliku, pokazujê na stderr... "
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) NIE MO¯NA OTWORZYÆ %s !"
+
+msgid "Could not open temporary log file for writing "
+msgstr "Nie mo¿na otworzyæ do zapisu tymczasowego pliku logowania"
+
 msgid " VREPLACE"
 msgstr " V-ZAMIANA"
 
@@ -4936,6 +5025,11 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: Sprawdzanie pisowni nie jest w³¹czone"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"Ostrze¿enie: Nie mogê znale\9fæ listy s³ów \"%s_%s.spl\" lub \"%s_ascii.spl\""
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
 "Ostrze¿enie: Nie mogê znale\9fæ listy s³ów \"%s.%s.spl\" lub \"%s.ascii.spl\""
@@ -5033,8 +5127,8 @@ msgid ""
 "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
 "line %d: %s"
 msgstr ""
-"Afiks u¿yty tak¿e dla BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST w %"
-"s wiersz %d: %s"
+"Afiks u¿yty tak¿e dla BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST w "
+"%s wiersz %d: %s"
 
 #, c-format
 msgid "Expected Y or N in %s line %d: %s"
@@ -5163,6 +5257,9 @@ msgstr "Nieznane flagi w %s wiersz %d: %s"
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "Zignorowa³em %d s³ów ze znakami nie ASCII"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Nie wystarczaj¹ca ilo\9cæ pamiêci, lista s³ów bêdzie niekompletna"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "Skompresowano %d z %d wêz³ów; pozostaje %d (%d%%)"
@@ -5277,6 +5374,9 @@ msgstr "E782: B
 msgid "E783: duplicate char in MAP entry"
 msgstr "E783: Podwojony znak we wpisie MAP"
 
+msgid "No Syntax items defined for this buffer"
+msgstr "Brak elementów sk³adni okre\9clonych dla tego bufora"
+
 #, c-format
 msgid "E390: Illegal argument: %s"
 msgstr "E390: Niedozwolony argument: %s"
@@ -5285,9 +5385,6 @@ msgstr "E390: Niedozwolony argument: %s"
 msgid "E391: No such syntax cluster: %s"
 msgstr "E391: Nie ma takiego klastra sk³adni: %s"
 
-msgid "No Syntax items defined for this buffer"
-msgstr "Brak elementów sk³adni okre\9clonych dla tego bufora"
-
 msgid "syncing on C-style comments"
 msgstr "synchronizacja komentarzy w stylu C"
 
@@ -5340,6 +5437,9 @@ msgstr "znak
 msgid "E395: contains argument not accepted here"
 msgstr "E395: argument contains niedozwolony w tym miejscu"
 
+msgid "E844: invalid cchar value"
+msgstr "E844: Niew³a\9cciwa warto\9cæ cchar"
+
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]here niedozwolone w tym miejscu"
 
@@ -5350,6 +5450,9 @@ msgstr "E394: Nie znalaz
 msgid "E397: Filename required"
 msgstr "E397: Wymagana nazwa pliku"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Za du¿o w³¹czonych sk³adni"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: Brak ']': %s"
@@ -5362,6 +5465,9 @@ msgstr "E398: Brak '=': %s"
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Za ma³o argumentów: syntax region %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Za du¿o klastrów sk³adni"
+
 msgid "E400: No cluster specified"
 msgstr "E400: Brak specyfikacji klastra"
 
@@ -5404,6 +5510,11 @@ msgstr "E409: Nieznana nazwa grupy: %s"
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410: Niew³a\9cciwa podkomenda :syntax : %s"
 
+msgid ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+msgstr ""
+"  WSZYTKO    ILO\8cÆ  PASUJE  NAJWOLN.    \8cREDNIO   NAZWA              WZORZEC"
+
 msgid "E679: recursive loop loading syncolor.vim"
 msgstr "E679: rekursywna pêtla wczytuj¹ca syncolor.vim"
 
@@ -5465,6 +5576,9 @@ msgstr "E669: Niedrukowalny znak w nazwie grupy"
 msgid "W18: Invalid character in group name"
 msgstr "W18: nieprawid³owy znak w nazwie grupy"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Za du¿o grup pod\9cwietlania i sk³adni"
+
 msgid "E555: at bottom of tag stack"
 msgstr "E555: na dole stosu znaczników"
 
@@ -5525,6 +5639,9 @@ msgstr "Szukam w pliku znacznik
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Trop szukania pliku znaczników obciêty dla %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Ignorujê d³ugie wiersze w pliku znaczników"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: B³¹d formatu w pliku znaczników \"%s\""
@@ -5541,9 +5658,6 @@ msgstr "E432: Plik znacznik
 msgid "E433: No tags file"
 msgstr "E433: Brak pliku znaczników"
 
-msgid "Ignoring long line in tags file"
-msgstr "Ignorujê d³ugie wiersze w pliku znaczników"
-
 msgid "E434: Can't find tag pattern"
 msgstr "E434: Nie mogê znale\9fæ wzorca znacznika"
 
@@ -5715,8 +5829,8 @@ msgstr "za"
 msgid "Nothing to undo"
 msgstr "Nie ma zmian do cofniêcia"
 
-msgid "number changes  time            saved"
-msgstr "liczba zmiany  czas            zapisano"
+msgid "number changes  when               saved"
+msgstr "liczba zmiany   kiedy              zapisano"
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5817,13 +5931,6 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"wersja dla RISC OS"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6459,6 +6566,9 @@ msgstr "E139: Plik jest za
 msgid "E764: Option '%s' is not set"
 msgstr "E764: Nie ustawiono opcji '%s'"
 
+msgid "E850: Invalid register name"
+msgstr "E850: Niew³a\9cciwa nazwa rejestru"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "szukanie dobi³o GÓRY; kontynuacja od KOÑCA"
 
@@ -6469,35 +6579,167 @@ msgstr "szukanie dobi
 msgid "Need encryption key for \"%s\""
 msgstr "Potrzebujê klucza szyfrowania dla \"%s\""
 
-msgid "writelines() requires list of strings"
-msgstr "writelines() wymaga listy ci¹gów"
+msgid "empty keys are not allowed"
+msgstr "puste klucze nie s¹ dozwolone"
+
+msgid "dictionary is locked"
+msgstr "s³ownik jest zablokowany"
+
+msgid "list is locked"
+msgstr "lista jest zablokowana"
+
+#, c-format
+msgid "failed to add key '%s' to dictionary"
+msgstr "nie powiod³o siê dodanie klucza '%s' do s³ownika"
+
+#, c-format
+msgid "index must be int or slice, not %s"
+msgstr "indeks musi byæ liczb¹ lub wycinkiem, nie %s"
+
+#, c-format
+msgid "expected str() or unicode() instance, but got %s"
+msgstr "czeka³em na str() lub unicode(), a dosta³em %s"
+
+#, c-format
+msgid "expected bytes() or str() instance, but got %s"
+msgstr "czeka³em na bytes() lub str(), a dosta³em %s"
+
+#, c-format
+msgid ""
+"expected int(), long() or something supporting coercing to long(), but got %s"
+msgstr ""
+"czeka³em na int(), long() lub co\9c co mo¿na zmieniæ na long(), ale dosta³em %s"
+
+#, c-format
+msgid "expected int() or something supporting coercing to int(), but got %s"
+msgstr "czeka³em na int() lub co\9c co mo¿na zmieniæ na int(), ale dosta³em %s"
+
+msgid "value is too large to fit into C int type"
+msgstr "warto\9cæ zbyt du¿a by zmie\9cci³a siê w typie int C"
+
+msgid "value is too small to fit into C int type"
+msgstr "warto\9cæ jest zbyt ma³a by zmie\9cci³a siê w typie int C"
+
+msgid "number must be greater then zero"
+msgstr "liczba musi byæ wiêksza ni¿ zero"
+
+msgid "number must be greater or equal to zero"
+msgstr "liczba musi byæ wiêksza lub mniejsza ni¿ zero"
+
+msgid "can't delete OutputObject attributes"
+msgstr "nie mogê skasowaæ atrybutów OutputObject"
+
+#, c-format
+msgid "invalid attribute: %s"
+msgstr "niepoprawny atrybut: %s"
 
 msgid "E264: Python: Error initialising I/O objects"
 msgstr "E264: Python: B³¹d w uruchomieniu obiektów I/O"
 
-msgid "no such buffer"
-msgstr "nie ma takiego bufora"
+msgid "failed to change directory"
+msgstr "nie powiod³a siê zmiana katalogu"
 
-msgid "attempt to refer to deleted window"
-msgstr "próba odniesienia do skasowanego okna"
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got %s"
+msgstr "czeka³em na 3-krotkê jako wynik imp.find_module(), a dosta³em %s"
 
-msgid "readonly attribute"
-msgstr "atrybut tylko do odczytu"
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
+msgstr "czeka³em na 3-krotkê jako wynik imp.find_module(), a dosta³em krotkê o wielko\9cci %d"
 
-msgid "cursor position outside buffer"
-msgstr "pozycja kursora poza buforem"
+msgid "internal error: imp.find_module returned tuple with NULL"
+msgstr "wewnêtrzny b³¹d: imp.find_module zwróci³ krotkê z NULL"
+
+msgid "cannot delete vim.Dictionary attributes"
+msgstr "nie mogê usun¹æ atrybutów vim.Dictionary"
+
+msgid "cannot modify fixed dictionary"
+msgstr "nie mogê zmieniæ zablokowanego s³ownika"
+
+#, c-format
+msgid "cannot set attribute %s"
+msgstr "nie mogê ustawiæ atrybutu %s"
+
+msgid "hashtab changed during iteration"
+msgstr "hashtab zmieni³ siê w czasie iteracji"
+
+#, c-format
+msgid "expected sequence element of size 2, but got sequence of size %d"
+msgstr "czeka³em na element sekwencyjny od d³ugo\9cci 2, a dosta³em sekwencjê o d³ugo\9cci %d"
+
+msgid "list constructor does not accept keyword arguments"
+msgstr "konstruktor listy nie akceptuje s³ów kluczowych jako argumentów"
+
+msgid "list index out of range"
+msgstr "indeks listy poza zakresem"
+
+#. No more suitable format specifications in python-2.3
+#, c-format
+msgid "internal error: failed to get vim list item %d"
+msgstr "b³¹d wewnêtrzny: nie powiod³o siê pobranie z listy Vima elementu %d"
+
+msgid "failed to add item to list"
+msgstr "nie powiod³o siê dodanie elementu do listy"
+
+#, c-format
+msgid "internal error: no vim list item %d"
+msgstr "b³¹d wewnêtrzny: w li\9ccie Vima brak elementu %d"
+
+msgid "internal error: failed to add item to list"
+msgstr "b³¹d wewnêtrzny: nie powiod³o siê dodanie elementu do listy"
+
+msgid "cannot delete vim.List attributes"
+msgstr "nie mogê usun¹æ atrybutów vim.List"
+
+msgid "cannot modify fixed list"
+msgstr "nie mogê zmieniæ zablokowanej listy"
+
+#, c-format
+msgid "unnamed function %s does not exist"
+msgstr "nie nazwana funkcja %s nie istnieje"
 
 #, c-format
-msgid "<window object (deleted) at %p>"
-msgstr "<obiekt okna (skasowany) w %p>"
+msgid "function %s does not exist"
+msgstr "funkcja %s nie istnieje"
+
+msgid "function constructor does not accept keyword arguments"
+msgstr "konstruktor funkcji nie akceptuje s³ów kluczowych jako argumentów"
+
+#, c-format
+msgid "failed to run function %s"
+msgstr "nie mogê uruchomiæ funkcji %s"
+
+msgid "unable to get option value"
+msgstr "nie mogê pobraæ warto\9cci opcji"
+
+msgid "internal error: unknown option type"
+msgstr "b³¹d wewnêtrzny: nieznany typ opcji"
+
+msgid "problem while switching windows"
+msgstr "wyst¹pi³ problem w czasie zmiany okien"
 
 #, c-format
-msgid "<window object (unknown) at %p>"
-msgstr "<obiekt okna (nieznany) w %p>"
+msgid "unable to unset global option %s"
+msgstr "nie mogê wyzerowaæ opcji globalnej %s"
 
 #, c-format
-msgid "<window %d>"
-msgstr "<okno %d>"
+msgid "unable to unset option %s which does not have global value"
+msgstr "nie mogê wyzerowaæ opcji %s, która nie ma warto\9cci globalnej"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "próba odniesienia do skasowanej karty"
+
+msgid "no such tab page"
+msgstr "nie ma takiej karty"
+
+msgid "attempt to refer to deleted window"
+msgstr "próba odniesienia do skasowanego okna"
+
+msgid "readonly attribute: buffer"
+msgstr "atrybut tylko do odczytu: bufor"
+
+msgid "cursor position outside buffer"
+msgstr "pozycja kursora poza buforem"
 
 msgid "no such window"
 msgstr "nie ma takiego okna"
@@ -6505,6 +6747,126 @@ msgstr "nie ma takiego okna"
 msgid "attempt to refer to deleted buffer"
 msgstr "próba odniesienia do skasowanego bufora"
 
+msgid "failed to rename buffer"
+msgstr "nie powiod³a siê zmiana nazwy bufora"
+
+msgid "mark name must be a single character"
+msgstr "nazwa zak³adki musi byæ pojedynczym znakiem"
+
+#, c-format
+msgid "expected vim.Buffer object, but got %s"
+msgstr "oczekiwa³em na obiekt vim.Buffer, a dosta³em %s"
+
+#, c-format
+msgid "failed to switch to buffer %d"
+msgstr "nie przeszed³em do bufora %d"
+
+#, c-format
+msgid "expected vim.Window object, but got %s"
+msgstr "oczekiwa³em na obiekt vim.Window, a dosta³em %s"
+
+msgid "failed to find window in the current tab page"
+msgstr "nie znaleziono okna na bie¿¹cej karcie"
+
+msgid "did not switch to the specified window"
+msgstr "nie przeszed³em do okre\9clonego okna"
+
+#, c-format
+msgid "expected vim.TabPage object, but got %s"
+msgstr "oczekiwa³em na obiekt vim.TabPage, a dosta³em %s"
+
+msgid "did not switch to the specified tab page"
+msgstr "nie przeszed³em do okre\9clonej karty"
+
+msgid "failed to run the code"
+msgstr "uruchomienie kodu siê nie powiod³o"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: eval nie zwróci³o odpowiedniego obiektu pythona"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: Nie powiod³a siê konwersja obiektu pythona do warto\9cci Vima"
+
+#, c-format
+msgid "unable to convert %s to vim dictionary"
+msgstr "nie mo¿na konwertowaæ %s do s³ownika Vima"
+
+#, c-format
+msgid "unable to convert %s to vim structure"
+msgstr "nie mo¿na konwertowaæ %s do struktury Vima"
+
+msgid "internal error: NULL reference passed"
+msgstr "b³¹d wewnêtrzny: przekazano referencjê NULL"
+
+msgid "internal error: invalid value type"
+msgstr "b³¹d wewnêtrzny: b³êdny typ warto\9cci"
+
+msgid ""
+"Failed to set path hook: sys.path_hooks is not a list\n"
+"You should now do the following:\n"
+"- append vim.path_hook to sys.path_hooks\n"
+"- append vim.VIM_SPECIAL_PATH to sys.path\n"
+msgstr ""
+"Nie mogê ustawiæ haka \9ccie¿ki: sys.path_hooks nie jest list¹\n"
+"Powiniene\9c teraz wykonaæ nastêpuj¹ce czynno\9cci:\n"
+"- dodaæ vim.path_hook do sys.path_hooks\n"
+"- dodaæ vim.VIM_SPECIAL_PATH do sys.path\n"
+
+msgid ""
+"Failed to set path: sys.path is not a list\n"
+"You should now append vim.VIM_SPECIAL_PATH to sys.path"
+msgstr ""
+"Nie mogê ustawiæ \9ccie¿ki: sys.path nie jest list¹\n"
+"Powinno siê teraz dodaæ vim.VIM_SPECIAL_PATH do sys.path"
+
+#~ msgid "softspace must be an integer"
+#~ msgstr "softspace musi byæ liczb¹ ca³kowit¹"
+
+#~ msgid "<buffer object (deleted) at %p>"
+#~ msgstr "<obiekt bufora (skasowany) w %p>"
+
+#~ msgid ""
+#~ "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim."
+#~ "org"
+#~ msgstr ""
+#~ "E281: B£¥D TCL: kod zakoñczeniowy nie jest ca³kowity!? Proszê z³o¿yæ "
+#~ "raport o tym na vim-dev@vim.org"
+
+#~ msgid ""
+#~ "\n"
+#~ "Arguments recognised by gvim (RISC OS version):\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Argumenty rozpoznawane przez gvim (wersja RISC OS):\n"
+
+#~ msgid "--columns <number>\tInitial width of window in columns"
+#~ msgstr "--columns <number>\tPocz¹tkowa szeroko\9cæ okna w kolumnach"
+
+#~ msgid "--rows <number>\tInitial height of window in rows"
+#~ msgstr "--rows <number>\tPocz¹tkowa wysoko\9cæ okna w wierszach"
+
+#~ msgid "E505: "
+#~ msgstr "E505: "
+
+#~ msgid ""
+#~ "\n"
+#~ "RISC OS version"
+#~ msgstr ""
+#~ "\n"
+#~ "wersja dla RISC OS"
+
+#~ msgid "writelines() requires list of strings"
+#~ msgstr "writelines() wymaga listy ci¹gów"
+
+#~ msgid "<window object (deleted) at %p>"
+#~ msgstr "<obiekt okna (skasowany) w %p>"
+
+#~ msgid "<window object (unknown) at %p>"
+#~ msgstr "<obiekt okna (nieznany) w %p>"
+
+#~ msgid "<window %d>"
+#~ msgstr "<okno %d>"
+
 #~ msgid "-name <name>\t\tUse resource as if vim was <name>"
 #~ msgstr "-name <nazwa>\t\tU¿ywaj zasobów tak jak by Vim by³ <nazwa>"
 
index 30ed4dc..a629d7b 100644 (file)
@@ -1,18 +1,18 @@
 # translation of pl.po to Polish
 # Polish Translation for Vim
 #
-# updated 2010 for vim-7.3
+# updated 2013 for vim-7.4
 #
 # FIRST AUTHOR Marcin Dalecki <martin@dalecki.de>, 2000.
-# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006, 2007, 2008, 2009, 2010.
+# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-10 18:13+0200\n"
+"POT-Creation-Date: 2013-07-06 19:33+0200\n"
 "PO-Revision-Date: 2010-08-10 18:15+0200\n"
 "Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
-"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
+"Language: pl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -41,6 +41,9 @@ msgstr "[Lista lokacji]"
 msgid "[Quickfix List]"
 msgstr "[Lista quickfix]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Autokomendy spowodowa³y porzucenie komendy"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Nie mogê zarezerwowaæ bufora; zakoñczenie..."
 
@@ -135,6 +138,9 @@ msgstr "[Nowy Plik]"
 msgid "[Read errors]"
 msgstr "[B³±d odczytu]"
 
+msgid "[RO]"
+msgstr "[RO]"
+
 msgid "[readonly]"
 msgstr "[tylko odczyt]"
 
@@ -172,7 +178,6 @@ msgstr "D
 msgid "Top"
 msgstr "Góra"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -299,6 +304,12 @@ msgstr " Lokalne dope
 msgid "Hit end of paragraph"
 msgstr "Dobi³em do koñca akapitu"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: Funkcja uzupe³niania zmieni³a okno"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Funkcja uzupe³nania usunê³a tekst"
+
 msgid "'dictionary' option is empty"
 msgstr "opcja 'dictionary' jest pusta"
 
@@ -413,6 +424,9 @@ msgstr "E130: Nieznana funkcja: %s"
 msgid "E461: Illegal variable name: %s"
 msgstr "E461: Niedozwolona nazwa zmiennej: %s"
 
+msgid "E806: using Float as a String"
+msgstr "E806: U¿ycie Zmiennoprzecinkowej jako Â£añcucha"
+
 msgid "E687: Less targets than List items"
 msgstr "E687: Mniej celów ni¿ elementów Listy"
 
@@ -555,6 +569,9 @@ msgstr "E725: Wywo
 msgid "E808: Number or Float required"
 msgstr "E808: Wymagana Liczba lub Zmiennoprzecinkowa"
 
+msgid "add() argument"
+msgstr "argument add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Za du¿o argumentów"
 
@@ -573,6 +590,15 @@ msgstr "&Ok"
 msgid "E737: Key already exists: %s"
 msgstr "E737: Klucz ju¿ istnieje: %s"
 
+msgid "extend() argument"
+msgstr "argument extend()"
+
+msgid "map() argument"
+msgstr "argument map()"
+
+msgid "filter() argument"
+msgstr "argument filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld wierszy: "
@@ -591,6 +617,9 @@ msgstr ""
 msgid "called inputrestore() more often than inputsave()"
 msgstr "wywo³ano inputrestore() wiêcej razy ni¿ inputsave()"
 
+msgid "insert() argument"
+msgstr "argument insert()"
+
 msgid "E786: Range not allowed"
 msgstr "E786: Zakres niedozwolony"
 
@@ -616,12 +645,21 @@ msgstr "E241: Nie mog
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Nie mogê czytaæ odpowiedzi serwera"
 
+msgid "remove() argument"
+msgstr "argument remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Za du¿o dowi±zañ symbolicznych (pêtla?)"
 
+msgid "reverse() argument"
+msgstr "argument reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: Nie mogê wys³aæ do klienta"
 
+msgid "sort() argument"
+msgstr "argument sort()"
+
 msgid "E702: Sort compare function failed"
 msgstr "E702: Funkcja porównywania w sort nie powiod³a siê"
 
@@ -652,8 +690,13 @@ msgstr "E730: U
 msgid "E731: using Dictionary as a String"
 msgstr "E731: U¿ycie S³ownika jako Â£añcucha"
 
-msgid "E806: using Float as a String"
-msgstr "E806: U¿ycie Zmiennoprzecinkowej jako Â£añcucha"
+#, c-format
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: Nieprawid³owy typ zmiennej dla: %s"
+
+#, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Nie mogê usun±æ zmiennej %s"
 
 #, c-format
 msgid "E704: Funcref variable name must start with a capital: %s"
@@ -664,14 +707,6 @@ msgid "E705: Variable name conflicts with existing function: %s"
 msgstr "E705: Nazwa zmiennej jest w konflikcie z istniej±c± funkcj±: %s"
 
 #, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: Nieprawid³owy typ zmiennej dla: %s"
-
-#, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: Nie mogê usun±æ zmiennej %s"
-
-#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: Warto¶æ jest zablokowana: %s"
 
@@ -693,10 +728,17 @@ msgstr "E123: Nieznana funkcja: %s"
 msgid "E124: Missing '(': %s"
 msgstr "E124: Brak '(': %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: Nie mo¿na tutaj u¿yæ g:"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Niedozwolony argument: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Powtórzona nazwa argumentu: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Brak :endfunction"
 
@@ -971,7 +1013,6 @@ msgstr "Zapisuj
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Ten plik viminfo zosta³ wygenerowany przez Vima %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -979,7 +1020,6 @@ msgstr ""
 "# Mo¿esz go ostro¿nie edytowaæ!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Warto¶æ 'encoding' w czasie zapisu tego pliku\n"
 
@@ -1089,6 +1129,9 @@ msgid "Pattern found in every line: %s"
 msgstr "Wzorzec znaleziono w ka¿dym wierszu: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "Nie znaleziono wzorca: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1266,6 +1309,10 @@ msgstr ""
 "E183: Komendy zdefiniowane przez u¿ytkownika musz± rozpoczynaæ siê du¿± "
 "liter±"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841: Nazwa zastrze¿ona, nie mo¿na jej u¿yæ w komendzie u¿ytkownika"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Nie ma takiej komendy u¿ytkownika: %s"
@@ -1285,8 +1332,8 @@ msgid "unknown"
 msgstr "nieznany"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Nie mogê znale¼æ zestawu kolorów %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Nie mogê znale¼æ zestawu kolorów '%s'"
 
 msgid "Greetings, Vim user!"
 msgstr "Witaj u¿ytkowniku Vima!"
@@ -1384,6 +1431,9 @@ msgstr "E497: brak nazwy dopasowania autokomend pod \"<amatch>\""
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: brak nazwy pliku :source do postawienia pod \"<sfile>\""
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: brak numeru linii by u¿yæ z \"<slnum>\""
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: Pusta nazwa pliku dla '%' lub '#', dzia³a tylko z \":p:h\""
@@ -1600,9 +1650,6 @@ msgstr "[socket]"
 msgid "[character special]"
 msgstr "[specjalny znak]"
 
-msgid "[RO]"
-msgstr "[RO]"
-
 msgid "[CR missing]"
 msgstr "[brak CR]'"
 
@@ -1615,6 +1662,9 @@ msgstr "[NIE przemienione]"
 msgid "[converted]"
 msgstr "[przemienione]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[zakodowane]"
 
@@ -2018,6 +2068,12 @@ msgstr "Scrollbar Widget: Nie mog
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: Nie mogê stworzyæ BalloonEval z powiadomieniem i wywo³aniem"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Nie mog³em stworzyæ nowego procesu dla GUI"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Proces potomny nie móg³ uruchomiæ GUI"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Nie mogê odpaliæ GUI"
 
@@ -2147,21 +2203,6 @@ msgid "&Undo"
 msgstr "&Cofnij"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Nie mogê za³adowaæ czcionki Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Nie mogê u¿yæ czcionki %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Wysy³am zawiadomienie koñcz±ce proces pochodny.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Nie mogê znale¼æ tytu³u okna \"%s\""
 
@@ -2211,32 +2252,28 @@ msgid "Font '%s' is not fixed-width"
 msgstr "Czcionka '%s' nie posiada znaków jednolitej szeroko¶ci"
 
 #, c-format
-msgid "E253: Fontset name: %s\n"
-msgstr "E253: Nazwa zestawu czcionek: %s\n"
+msgid "E253: Fontset name: %s"
+msgstr "E253: Nazwa zestawu czcionek: %s"
 
 #, c-format
-msgid "Font0: %s\n"
-msgstr "Font0: %s\n"
+msgid "Font0: %s"
+msgstr "Font0: %s"
 
 #, c-format
-msgid "Font1: %s\n"
-msgstr "Font1: %s\n"
+msgid "Font1: %s"
+msgstr "Font1: %s"
 
 #, c-format
-msgid "Font%ld width is not twice that of font0\n"
-msgstr "Szeroko¶æ font%ld nie jest podwójn± szeroko¶ci± font0\n"
+msgid "Font%ld width is not twice that of font0"
+msgstr "Szeroko¶æ font%ld nie jest podwójn± szeroko¶ci± font0"
 
 #, c-format
-msgid "Font0 width: %ld\n"
-msgstr "Szeroko¶æ font0: %ld\n"
+msgid "Font0 width: %ld"
+msgstr "Szeroko¶æ font0: %ld"
 
 #, c-format
-msgid ""
-"Font1 width: %ld\n"
-"\n"
-msgstr ""
-"Szeroko¶æ font1: %ld\n"
-"\n"
+msgid "Font1 width: %ld"
+msgstr "Szeroko¶æ font1: %ld"
 
 msgid "Invalid font specification"
 msgstr "Nieprawid³owy opis czcionki"
@@ -2279,7 +2316,7 @@ msgid "E551: Illegal component"
 msgstr "E551: Niedozwolona czê¶æ"
 
 msgid "E552: digit expected"
-msgstr "E552: oczekiwano cyfry"
+msgstr "E552: oczekiwa³em na cyfrê"
 
 #, c-format
 msgid "Page %d"
@@ -2424,6 +2461,9 @@ msgstr "E566: Nie mog
 msgid "E622: Could not fork for cscope"
 msgstr "E622: Nie mog³em utworzyæ rozwidlenia dla cscope"
 
+msgid "cs_create_connection setpgid failed"
+msgstr "nie powiod³o siê setpgid cs_create_connection"
+
 msgid "cs_create_connection exec failed"
 msgstr "wykonanie cs_create_connection nie powiod³o siê"
 
@@ -2463,7 +2503,7 @@ msgid ""
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: znajd¼ funkcje wywo³uj±ce tê funkcjê\n"
@@ -2473,7 +2513,7 @@ msgstr ""
 "       g: znajd¼ tê definicjê\n"
 "       i: znajd¼ pliki w³±czaj±ce (#include) ten plik\n"
 "       s: znajd¼ ten symbol C\n"
-"       t: znajd¼ przypisania do\n"
+"       t: znajd¼ ten Â³añcuch znaków\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2567,6 +2607,9 @@ msgstr "nie mog
 msgid "string cannot contain newlines"
 msgstr "ci±g nie mo¿e zawieraæ znaków nowego wiersza"
 
+msgid "error converting Scheme values to Vim"
+msgstr "b³±d przy konwersji warto¶ci Scheme do Vima"
+
 msgid "Vim error: ~a"
 msgstr "B³±d vima: ~a"
 
@@ -2585,9 +2628,6 @@ msgstr "numer wiersza poza zakresem"
 msgid "not allowed in the Vim sandbox"
 msgstr "Niedozwolone w piaskownicy Vima"
 
-msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Python: nie mo¿na u¿ywaæ :py i :py3 w czasie jednej sesji"
-
 msgid "E837: This Vim cannot execute :py3 after using :python"
 msgstr "E837: Python: nie mo¿na u¿ywaæ :py i :py3 w czasie jednej sesji"
 
@@ -2598,18 +2638,8 @@ msgstr ""
 "E263: Przykro mi, ta komenda jest wy³±czona, bo nie mo¿na za³adowaæ "
 "biblioteki Pythona"
 
-msgid "can't delete OutputObject attributes"
-msgstr "nie mogê skasowaæ atrybutów OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "softspace musi byæ liczb± ca³kowit±"
-
-msgid "invalid attribute"
-msgstr "niepoprawny atrybut"
-
-#, c-format
-msgid "<buffer object (deleted) at %p>"
-msgstr "<obiekt bufora (skasowany) w %p>"
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Python: nie mo¿na u¿ywaæ :py i :py3 w czasie jednej sesji"
 
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Nie mo¿na wywo³aæ Pythona rekursywnie"
@@ -2800,12 +2830,6 @@ msgstr ""
 "E571: Przykro mi, ta komenda jest wy³±czona, bo nie mo¿na za³adowaæ "
 "biblioteki Tcl."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: B£¡D TCL: kod zakoñczeniowy nie jest ca³kowity!? Proszê z³o¿yæ raport "
-"o tym na vim-dev@vim.org"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: kod wyj¶cia %d"
@@ -2964,6 +2988,9 @@ msgstr "-v\t\t\tTryb vi (jak \"vi\")"
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tTryb ex (jak \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tUsprawniony tryb Ex"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tCichy tryb (t³a) (tylko dla \"ex\")"
 
@@ -3206,19 +3233,6 @@ msgstr "-xrm <resource>\tUstaw okre
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Argumenty rozpoznawane przez gvim (wersja RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <number>\tPocz±tkowa szeroko¶æ okna w kolumnach"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <number>\tPocz±tkowa wysoko¶æ okna w wierszach"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3233,6 +3247,9 @@ msgstr "--role <role>\tUstaw unikatow
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tOtwórz Vim wewn±trz innego widgetu GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "-echo-wid\t\tGvim wypisze Window ID na wyj¶cie standardowe"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <tytu³ rodzica>\tOtwórz Vima wewn±trz rodzicielskiej aplikacji"
 
@@ -3291,7 +3308,6 @@ msgstr ""
 "\n"
 "zmieñ wrsz. kol tekst"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3300,7 +3316,6 @@ msgstr ""
 "# Zak³adki w plikach:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3308,7 +3323,6 @@ msgstr ""
 "\n"
 "# Lista odniesieñ (pocz±wszy od najnowszych):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3367,6 +3381,9 @@ msgstr "E298: Nie otrzyma
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Nie otrzyma³em bloku nr 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: B³±d w czasie uaktualniania szyfrowania pliku wymiany"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ojej, zgubi³em plik wymiany!!!"
@@ -3723,24 +3740,20 @@ msgstr "      NOWSZE od pliku wymiany!\n"
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes.\n"
 msgstr ""
 "\n"
 "(1) Pewnie inny program obrabia ten sam plik.\n"
 "    Je¶li tak, b±d¼ ostro¿ny, aby nie skoñczyæ z dwoma\n"
-"    ró¿nymi wersjami jednego tego samego pliku po zmianach.\n"
+"    ró¿nymi wersjami tego samego pliku po zmianach.\n"
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Zakoñcz lub ostro¿nie kontynuuj.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Zakoñcz lub ostro¿nie kontynuuj.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Sesja edycji dla pliku za³ama³a siê.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Sesja edycji dla pliku za³ama³a siê.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Je¶li tak, to u¿yj \":recover\" lub \"vim -r "
@@ -3969,7 +3982,6 @@ msgstr "Vim: zachowuj
 msgid "Vim: Finished.\n"
 msgstr "Vim: Zakoñczono.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "B£¡D: "
 
@@ -4015,7 +4027,7 @@ msgid "E547: Illegal mouseshape"
 msgstr "E547: Niedozwolony obrys myszki"
 
 msgid "E548: digit expected"
-msgstr "E548: oczekiwano cyfry"
+msgstr "E548: oczekiwa³em na cyfrê"
 
 msgid "E549: Illegal percentage"
 msgstr "E549: Niedozwolony procent"
@@ -4029,6 +4041,9 @@ msgstr "Wprowad
 msgid "Keys don't match!"
 msgstr "Klucze nie pasuj± do siebie!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: Â¶cie¿ka za d³uga by uzupe³niæ"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4070,11 +4085,15 @@ msgstr "odczyt z gniazda Netbeans"
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Bufor %ld utraci³ po³±czenie z NetBeans"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans nie s± obs³ugiwane przez to GUI"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans ju¿ pod³±czone"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s jest tylko do odczytu (dodaj ! aby wymusiæ)"
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: Brak identyfikatora pod kursorem"
@@ -4216,8 +4235,8 @@ msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Kol %s z %s; Wiersz %ld z %ld; S³owo %ld z %ld; Znak %ld z %ld; Bajt %ld z %"
-"ld"
+"Kol %s z %s; Wiersz %ld z %ld; S³owo %ld z %ld; Znak %ld z %ld; Bajt %ld z "
+"%ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4238,6 +4257,9 @@ msgstr "E519: Opcja nie jest wspomagana"
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Niedozwolone w modeline"
 
+msgid "E846: Key code not set"
+msgstr "E846: Kod klucza nie jest ustawiony"
+
 msgid "E521: Number required after ="
 msgstr "E521: Po = wymagany jest numer"
 
@@ -4472,9 +4494,6 @@ msgstr ""
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Niew³a¶ciwa opcja 'osfiletype' - u¿ywam Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Podwójny sygna³, wychodzê\n"
 
@@ -4692,24 +4711,15 @@ msgid "E681: Buffer is not loaded"
 msgstr "E681: Bufor nie jest za³adowany"
 
 msgid "E777: String or List expected"
-msgstr "E777: Oczekiwano Â³añcucha lub listy"
+msgstr "E777: Oczekiwa³em na Â³añcuch lub listê"
 
 #, c-format
 msgid "E369: invalid item in %s%%[]"
 msgstr "E369: Niew³a¶ciwy element w %s%%[]"
 
-msgid "E339: Pattern too long"
-msgstr "E339: Zbyt d³ugi wzorzec"
-
-msgid "E50: Too many \\z("
-msgstr "E50: Zbyt wiele \\z("
-
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Zbyt wiele %s("
-
-msgid "E52: Unmatched \\z("
-msgstr "E52: Niesparowany \\z("
+msgid "E769: Missing ] after %s["
+msgstr "E769: Brak ] po %s["
 
 #, c-format
 msgid "E53: Unmatched %s%%("
@@ -4723,6 +4733,33 @@ msgstr "E54: Niesparowany %s("
 msgid "E55: Unmatched %s)"
 msgstr "E55: Niesparowany %s)"
 
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( jest niedozwolone w tym miejscu"
+
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 i podobne s± niedozwolone w tym miejscu"
+
+#, c-format
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: Brak ] po %s%%["
+
+#, c-format
+msgid "E70: Empty %s%%[]"
+msgstr "E70: Pusty %s%%[]"
+
+msgid "E339: Pattern too long"
+msgstr "E339: Zbyt d³ugi wzorzec"
+
+msgid "E50: Too many \\z("
+msgstr "E50: Zbyt wiele \\z("
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: Zbyt wiele %s("
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: Niesparowany \\z("
+
 #, c-format
 msgid "E59: invalid character after %s@"
 msgstr "E59: niedozwolony znak po %s@"
@@ -4749,24 +4786,10 @@ msgstr "E64: %s%c po niczym"
 msgid "E65: Illegal back reference"
 msgstr "E65: Niew³a¶ciwe odwo³anie wsteczne"
 
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( jest niedozwolone w tym miejscu"
-
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 i podobne s± niedozwolone w tym miejscu"
-
 msgid "E68: Invalid character after \\z"
 msgstr "E68: niedopuszczalny znak po \\z"
 
 #, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: Brak ] po %s%%["
-
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: Pusty %s%%[]"
-
-#, c-format
 msgid "E678: Invalid character after %s%%[dxouU]"
 msgstr "E678: Niedozwolony znak po %s%%[dxouU]"
 
@@ -4775,16 +4798,82 @@ msgid "E71: Invalid character after %s%%"
 msgstr "E71: Niedozwolony znak po %s%%"
 
 #, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: Brak ] po %s["
-
-#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: B³±d sk³adni w %s{...}"
 
 msgid "External submatches:\n"
 msgstr "Zewnêtrzne poddopasowania:\n"
 
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr "E:864: \\%#= mo¿e byæ tylko przed 0, 1 lub 2. Zostanie u¿yty silnik automatyczny"
+
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (wyra¿enie regularne NFA) Niepoprawnie umieszczone %c"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) przedwczesny koniec wyra¿enia regularnego"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) Nieznany operator '\\z%c'"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\%%%c'"
+msgstr "E867: (NFA) Nieznany operator '\\%%%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: B³±d przy budowwaniu NFA z klas± ekwiwalencji"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) Nieznany operator '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (wyra¿enie regularne NFA) B³±d przy odczytywaniu limitów powtórzeñ"
+
+#. Can't have a multi follow a multi.
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (wyra¿enie regularne NFA) wielokrotne nie mo¿e byæ po wielokrotnym!"
+
+#. Too many `('
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (wyra¿enie regularne NFA) Zbyt du¿o '('"
+
+msgid "E879: (NFA regexp) Too many \\z("
+msgstr "E879: (wyra¿enie regularne NFA) Za du¿o \\z("
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (wyra¿enie regularne NFA) b³±d poprawnego zakoñczenia"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) Nie mo¿na zdj±æ elementu ze stosu!"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr "E875: (wyra¿enie regularne NFA) (w trakcie konwersji postfix do NFA), za wiele stanów na stosie"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (wyra¿enie regularne NFA) Nie ma miejsca na ca³e NFA "
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (NFA) Nie mo¿na przydzieliæ pamiêci do przej¶cia przez ga³êzie!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr "Nie mo¿na otworzyæ do zapisu tymczasowego pliku, pokazujê na stderr... "
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) NIE MO¯NA OTWORZYÆ %s !"
+
+msgid "Could not open temporary log file for writing "
+msgstr "Nie mo¿na otworzyæ do zapisu tymczasowego pliku logowania"
+
 msgid " VREPLACE"
 msgstr " V-ZAMIANA"
 
@@ -4936,6 +5025,11 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: Sprawdzanie pisowni nie jest w³±czone"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"Ostrze¿enie: Nie mogê znale¼æ listy s³ów \"%s_%s.spl\" lub \"%s_ascii.spl\""
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
 "Ostrze¿enie: Nie mogê znale¼æ listy s³ów \"%s.%s.spl\" lub \"%s.ascii.spl\""
@@ -5033,8 +5127,8 @@ msgid ""
 "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
 "line %d: %s"
 msgstr ""
-"Afiks u¿yty tak¿e dla BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST w %"
-"s wiersz %d: %s"
+"Afiks u¿yty tak¿e dla BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST w "
+"%s wiersz %d: %s"
 
 #, c-format
 msgid "Expected Y or N in %s line %d: %s"
@@ -5163,6 +5257,9 @@ msgstr "Nieznane flagi w %s wiersz %d: %s"
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "Zignorowa³em %d s³ów ze znakami nie ASCII"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Nie wystarczaj±ca ilo¶æ pamiêci, lista s³ów bêdzie niekompletna"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "Skompresowano %d z %d wêz³ów; pozostaje %d (%d%%)"
@@ -5277,6 +5374,9 @@ msgstr "E782: B
 msgid "E783: duplicate char in MAP entry"
 msgstr "E783: Podwojony znak we wpisie MAP"
 
+msgid "No Syntax items defined for this buffer"
+msgstr "Brak elementów sk³adni okre¶lonych dla tego bufora"
+
 #, c-format
 msgid "E390: Illegal argument: %s"
 msgstr "E390: Niedozwolony argument: %s"
@@ -5285,9 +5385,6 @@ msgstr "E390: Niedozwolony argument: %s"
 msgid "E391: No such syntax cluster: %s"
 msgstr "E391: Nie ma takiego klastra sk³adni: %s"
 
-msgid "No Syntax items defined for this buffer"
-msgstr "Brak elementów sk³adni okre¶lonych dla tego bufora"
-
 msgid "syncing on C-style comments"
 msgstr "synchronizacja komentarzy w stylu C"
 
@@ -5340,6 +5437,9 @@ msgstr "znak
 msgid "E395: contains argument not accepted here"
 msgstr "E395: argument contains niedozwolony w tym miejscu"
 
+msgid "E844: invalid cchar value"
+msgstr "E844: Niew³a¶ciwa warto¶æ cchar"
+
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]here niedozwolone w tym miejscu"
 
@@ -5350,6 +5450,9 @@ msgstr "E394: Nie znalaz
 msgid "E397: Filename required"
 msgstr "E397: Wymagana nazwa pliku"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Za du¿o w³±czonych sk³adni"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: Brak ']': %s"
@@ -5362,6 +5465,9 @@ msgstr "E398: Brak '=': %s"
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Za ma³o argumentów: syntax region %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Za du¿o klastrów sk³adni"
+
 msgid "E400: No cluster specified"
 msgstr "E400: Brak specyfikacji klastra"
 
@@ -5404,6 +5510,11 @@ msgstr "E409: Nieznana nazwa grupy: %s"
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410: Niew³a¶ciwa podkomenda :syntax : %s"
 
+msgid ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+msgstr ""
+"  WSZYTKO    ILO¦Æ  PASUJE  NAJWOLN.    Â¦REDNIO   NAZWA              WZORZEC"
+
 msgid "E679: recursive loop loading syncolor.vim"
 msgstr "E679: rekursywna pêtla wczytuj±ca syncolor.vim"
 
@@ -5465,6 +5576,9 @@ msgstr "E669: Niedrukowalny znak w nazwie grupy"
 msgid "W18: Invalid character in group name"
 msgstr "W18: nieprawid³owy znak w nazwie grupy"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Za du¿o grup pod¶wietlania i sk³adni"
+
 msgid "E555: at bottom of tag stack"
 msgstr "E555: na dole stosu znaczników"
 
@@ -5525,6 +5639,9 @@ msgstr "Szukam w pliku znacznik
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Trop szukania pliku znaczników obciêty dla %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Ignorujê d³ugie wiersze w pliku znaczników"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: B³±d formatu w pliku znaczników \"%s\""
@@ -5541,9 +5658,6 @@ msgstr "E432: Plik znacznik
 msgid "E433: No tags file"
 msgstr "E433: Brak pliku znaczników"
 
-msgid "Ignoring long line in tags file"
-msgstr "Ignorujê d³ugie wiersze w pliku znaczników"
-
 msgid "E434: Can't find tag pattern"
 msgstr "E434: Nie mogê znale¼æ wzorca znacznika"
 
@@ -5715,8 +5829,8 @@ msgstr "za"
 msgid "Nothing to undo"
 msgstr "Nie ma zmian do cofniêcia"
 
-msgid "number changes  time            saved"
-msgstr "liczba zmiany  czas            zapisano"
+msgid "number changes  when               saved"
+msgstr "liczba zmiany   kiedy              zapisano"
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5817,13 +5931,6 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"wersja dla RISC OS"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6459,6 +6566,9 @@ msgstr "E139: Plik jest za
 msgid "E764: Option '%s' is not set"
 msgstr "E764: Nie ustawiono opcji '%s'"
 
+msgid "E850: Invalid register name"
+msgstr "E850: Niew³a¶ciwa nazwa rejestru"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "szukanie dobi³o GÓRY; kontynuacja od KOÑCA"
 
@@ -6469,35 +6579,167 @@ msgstr "szukanie dobi
 msgid "Need encryption key for \"%s\""
 msgstr "Potrzebujê klucza szyfrowania dla \"%s\""
 
-msgid "writelines() requires list of strings"
-msgstr "writelines() wymaga listy ci±gów"
+msgid "empty keys are not allowed"
+msgstr "puste klucze nie s± dozwolone"
+
+msgid "dictionary is locked"
+msgstr "s³ownik jest zablokowany"
+
+msgid "list is locked"
+msgstr "lista jest zablokowana"
+
+#, c-format
+msgid "failed to add key '%s' to dictionary"
+msgstr "nie powiod³o siê dodanie klucza '%s' do s³ownika"
+
+#, c-format
+msgid "index must be int or slice, not %s"
+msgstr "indeks musi byæ liczb± lub wycinkiem, nie %s"
+
+#, c-format
+msgid "expected str() or unicode() instance, but got %s"
+msgstr "czeka³em na str() lub unicode(), a dosta³em %s"
+
+#, c-format
+msgid "expected bytes() or str() instance, but got %s"
+msgstr "czeka³em na bytes() lub str(), a dosta³em %s"
+
+#, c-format
+msgid ""
+"expected int(), long() or something supporting coercing to long(), but got %s"
+msgstr ""
+"czeka³em na int(), long() lub co¶ co mo¿na zmieniæ na long(), ale dosta³em %s"
+
+#, c-format
+msgid "expected int() or something supporting coercing to int(), but got %s"
+msgstr "czeka³em na int() lub co¶ co mo¿na zmieniæ na int(), ale dosta³em %s"
+
+msgid "value is too large to fit into C int type"
+msgstr "warto¶æ zbyt du¿a by zmie¶ci³a siê w typie int C"
+
+msgid "value is too small to fit into C int type"
+msgstr "warto¶æ jest zbyt ma³a by zmie¶ci³a siê w typie int C"
+
+msgid "number must be greater then zero"
+msgstr "liczba musi byæ wiêksza ni¿ zero"
+
+msgid "number must be greater or equal to zero"
+msgstr "liczba musi byæ wiêksza lub mniejsza ni¿ zero"
+
+msgid "can't delete OutputObject attributes"
+msgstr "nie mogê skasowaæ atrybutów OutputObject"
+
+#, c-format
+msgid "invalid attribute: %s"
+msgstr "niepoprawny atrybut: %s"
 
 msgid "E264: Python: Error initialising I/O objects"
 msgstr "E264: Python: B³±d w uruchomieniu obiektów I/O"
 
-msgid "no such buffer"
-msgstr "nie ma takiego bufora"
+msgid "failed to change directory"
+msgstr "nie powiod³a siê zmiana katalogu"
 
-msgid "attempt to refer to deleted window"
-msgstr "próba odniesienia do skasowanego okna"
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got %s"
+msgstr "czeka³em na 3-krotkê jako wynik imp.find_module(), a dosta³em %s"
 
-msgid "readonly attribute"
-msgstr "atrybut tylko do odczytu"
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
+msgstr "czeka³em na 3-krotkê jako wynik imp.find_module(), a dosta³em krotkê o wielko¶ci %d"
 
-msgid "cursor position outside buffer"
-msgstr "pozycja kursora poza buforem"
+msgid "internal error: imp.find_module returned tuple with NULL"
+msgstr "wewnêtrzny b³±d: imp.find_module zwróci³ krotkê z NULL"
+
+msgid "cannot delete vim.Dictionary attributes"
+msgstr "nie mogê usun±æ atrybutów vim.Dictionary"
+
+msgid "cannot modify fixed dictionary"
+msgstr "nie mogê zmieniæ zablokowanego s³ownika"
+
+#, c-format
+msgid "cannot set attribute %s"
+msgstr "nie mogê ustawiæ atrybutu %s"
+
+msgid "hashtab changed during iteration"
+msgstr "hashtab zmieni³ siê w czasie iteracji"
+
+#, c-format
+msgid "expected sequence element of size 2, but got sequence of size %d"
+msgstr "czeka³em na element sekwencyjny od d³ugo¶ci 2, a dosta³em sekwencjê o d³ugo¶ci %d"
+
+msgid "list constructor does not accept keyword arguments"
+msgstr "konstruktor listy nie akceptuje s³ów kluczowych jako argumentów"
+
+msgid "list index out of range"
+msgstr "indeks listy poza zakresem"
+
+#. No more suitable format specifications in python-2.3
+#, c-format
+msgid "internal error: failed to get vim list item %d"
+msgstr "b³±d wewnêtrzny: nie powiod³o siê pobranie z listy Vima elementu %d"
+
+msgid "failed to add item to list"
+msgstr "nie powiod³o siê dodanie elementu do listy"
+
+#, c-format
+msgid "internal error: no vim list item %d"
+msgstr "b³±d wewnêtrzny: w li¶cie Vima brak elementu %d"
+
+msgid "internal error: failed to add item to list"
+msgstr "b³±d wewnêtrzny: nie powiod³o siê dodanie elementu do listy"
+
+msgid "cannot delete vim.List attributes"
+msgstr "nie mogê usun±æ atrybutów vim.List"
+
+msgid "cannot modify fixed list"
+msgstr "nie mogê zmieniæ zablokowanej listy"
+
+#, c-format
+msgid "unnamed function %s does not exist"
+msgstr "nie nazwana funkcja %s nie istnieje"
 
 #, c-format
-msgid "<window object (deleted) at %p>"
-msgstr "<obiekt okna (skasowany) w %p>"
+msgid "function %s does not exist"
+msgstr "funkcja %s nie istnieje"
+
+msgid "function constructor does not accept keyword arguments"
+msgstr "konstruktor funkcji nie akceptuje s³ów kluczowych jako argumentów"
+
+#, c-format
+msgid "failed to run function %s"
+msgstr "nie mogê uruchomiæ funkcji %s"
+
+msgid "unable to get option value"
+msgstr "nie mogê pobraæ warto¶ci opcji"
+
+msgid "internal error: unknown option type"
+msgstr "b³±d wewnêtrzny: nieznany typ opcji"
+
+msgid "problem while switching windows"
+msgstr "wyst±pi³ problem w czasie zmiany okien"
 
 #, c-format
-msgid "<window object (unknown) at %p>"
-msgstr "<obiekt okna (nieznany) w %p>"
+msgid "unable to unset global option %s"
+msgstr "nie mogê wyzerowaæ opcji globalnej %s"
 
 #, c-format
-msgid "<window %d>"
-msgstr "<okno %d>"
+msgid "unable to unset option %s which does not have global value"
+msgstr "nie mogê wyzerowaæ opcji %s, która nie ma warto¶ci globalnej"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "próba odniesienia do skasowanej karty"
+
+msgid "no such tab page"
+msgstr "nie ma takiej karty"
+
+msgid "attempt to refer to deleted window"
+msgstr "próba odniesienia do skasowanego okna"
+
+msgid "readonly attribute: buffer"
+msgstr "atrybut tylko do odczytu: bufor"
+
+msgid "cursor position outside buffer"
+msgstr "pozycja kursora poza buforem"
 
 msgid "no such window"
 msgstr "nie ma takiego okna"
@@ -6505,6 +6747,126 @@ msgstr "nie ma takiego okna"
 msgid "attempt to refer to deleted buffer"
 msgstr "próba odniesienia do skasowanego bufora"
 
+msgid "failed to rename buffer"
+msgstr "nie powiod³a siê zmiana nazwy bufora"
+
+msgid "mark name must be a single character"
+msgstr "nazwa zak³adki musi byæ pojedynczym znakiem"
+
+#, c-format
+msgid "expected vim.Buffer object, but got %s"
+msgstr "oczekiwa³em na obiekt vim.Buffer, a dosta³em %s"
+
+#, c-format
+msgid "failed to switch to buffer %d"
+msgstr "nie przeszed³em do bufora %d"
+
+#, c-format
+msgid "expected vim.Window object, but got %s"
+msgstr "oczekiwa³em na obiekt vim.Window, a dosta³em %s"
+
+msgid "failed to find window in the current tab page"
+msgstr "nie znaleziono okna na bie¿±cej karcie"
+
+msgid "did not switch to the specified window"
+msgstr "nie przeszed³em do okre¶lonego okna"
+
+#, c-format
+msgid "expected vim.TabPage object, but got %s"
+msgstr "oczekiwa³em na obiekt vim.TabPage, a dosta³em %s"
+
+msgid "did not switch to the specified tab page"
+msgstr "nie przeszed³em do okre¶lonej karty"
+
+msgid "failed to run the code"
+msgstr "uruchomienie kodu siê nie powiod³o"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: eval nie zwróci³o odpowiedniego obiektu pythona"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: Nie powiod³a siê konwersja obiektu pythona do warto¶ci Vima"
+
+#, c-format
+msgid "unable to convert %s to vim dictionary"
+msgstr "nie mo¿na konwertowaæ %s do s³ownika Vima"
+
+#, c-format
+msgid "unable to convert %s to vim structure"
+msgstr "nie mo¿na konwertowaæ %s do struktury Vima"
+
+msgid "internal error: NULL reference passed"
+msgstr "b³±d wewnêtrzny: przekazano referencjê NULL"
+
+msgid "internal error: invalid value type"
+msgstr "b³±d wewnêtrzny: b³êdny typ warto¶ci"
+
+msgid ""
+"Failed to set path hook: sys.path_hooks is not a list\n"
+"You should now do the following:\n"
+"- append vim.path_hook to sys.path_hooks\n"
+"- append vim.VIM_SPECIAL_PATH to sys.path\n"
+msgstr ""
+"Nie mogê ustawiæ haka Â¶cie¿ki: sys.path_hooks nie jest list±\n"
+"Powiniene¶ teraz wykonaæ nastêpuj±ce czynno¶ci:\n"
+"- dodaæ vim.path_hook do sys.path_hooks\n"
+"- dodaæ vim.VIM_SPECIAL_PATH do sys.path\n"
+
+msgid ""
+"Failed to set path: sys.path is not a list\n"
+"You should now append vim.VIM_SPECIAL_PATH to sys.path"
+msgstr ""
+"Nie mogê ustawiæ Â¶cie¿ki: sys.path nie jest list±\n"
+"Powinno siê teraz dodaæ vim.VIM_SPECIAL_PATH do sys.path"
+
+#~ msgid "softspace must be an integer"
+#~ msgstr "softspace musi byæ liczb± ca³kowit±"
+
+#~ msgid "<buffer object (deleted) at %p>"
+#~ msgstr "<obiekt bufora (skasowany) w %p>"
+
+#~ msgid ""
+#~ "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim."
+#~ "org"
+#~ msgstr ""
+#~ "E281: B£¡D TCL: kod zakoñczeniowy nie jest ca³kowity!? Proszê z³o¿yæ "
+#~ "raport o tym na vim-dev@vim.org"
+
+#~ msgid ""
+#~ "\n"
+#~ "Arguments recognised by gvim (RISC OS version):\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Argumenty rozpoznawane przez gvim (wersja RISC OS):\n"
+
+#~ msgid "--columns <number>\tInitial width of window in columns"
+#~ msgstr "--columns <number>\tPocz±tkowa szeroko¶æ okna w kolumnach"
+
+#~ msgid "--rows <number>\tInitial height of window in rows"
+#~ msgstr "--rows <number>\tPocz±tkowa wysoko¶æ okna w wierszach"
+
+#~ msgid "E505: "
+#~ msgstr "E505: "
+
+#~ msgid ""
+#~ "\n"
+#~ "RISC OS version"
+#~ msgstr ""
+#~ "\n"
+#~ "wersja dla RISC OS"
+
+#~ msgid "writelines() requires list of strings"
+#~ msgstr "writelines() wymaga listy ci±gów"
+
+#~ msgid "<window object (deleted) at %p>"
+#~ msgstr "<obiekt okna (skasowany) w %p>"
+
+#~ msgid "<window object (unknown) at %p>"
+#~ msgstr "<obiekt okna (nieznany) w %p>"
+
+#~ msgid "<window %d>"
+#~ msgstr "<okno %d>"
+
 #~ msgid "-name <name>\t\tUse resource as if vim was <name>"
 #~ msgstr "-name <nazwa>\t\tU¿ywaj zasobów tak jak by Vim by³ <nazwa>"
 
index 1879913..a88cf2c 100644 (file)
@@ -2098,21 +2098,6 @@ msgid "&Undo"
 msgstr "&Desfazer"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Impossível carregar a fonte Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Impossível usar a fonte %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Enviando mensagem para terminar processo-filho.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Impossível encontrar janela de título \"%s\""
 
@@ -4342,9 +4327,6 @@ msgstr "E244: Conjunto de caracteres \"%s\" inv
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Caractere '%c' inválido no nome da fonte \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Valor inválido para 'osfiletype' - usando Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Sinal duplo, saindo\n"
 
index 7485f8d..72478d8 100644 (file)
@@ -1,39 +1,60 @@
 # Russian translation for Vim
-# 
+#
 # ÃŽÃ¡ Ã³Ã±Ã«Ã®Ã¢Ã¨Ã¿Ãµ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¿ Ã·Ã¨Ã²Ã Ã©Ã²Ã¥ Ã¢ Ã°Ã¥Ã¤Ã ÃªÃ²Ã®Ã°Ã¥ Vim ":help uganda"
-# ÃŽ Ã«Ã¾Ã¤Ã¿Ãµ, Ã¤Ã¥Ã«Ã Ã¾Ã¹Ã¨Ãµ Vim Ã·Ã¨Ã²Ã Ã©Ã²Ã¥ Ã¢ Ã°Ã¥Ã¤Ã ÃªÃ²Ã®Ã°Ã¥ ":help Ã Ã¢Ã²Ã®Ã°Ã»"
 #
 # vassily "vr" ragosin <vrr@users.sourceforge.net>, 2004
-#
-# Generated from ru.po, DO NOT EDIT.
+# Sergey Alyoshin <alyoshin.s@gmail.com>, 2013
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 6.3\n"
+"Project-Id-Version: vim_7.4_ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-06-15 09:39+0400\n"
-"PO-Revision-Date: 2004-05-19 00:23+0400\n"
-"Last-Translator: vassily ragosin <vrr@users.sourceforge.net>\n"
-"Language-Team: vassily ragosin <vrr@users.sourceforge.net>\n"
+"POT-Creation-Date: 2013-07-08 00:47+0400\n"
+"PO-Revision-Date: 2013-07-08 00:47+0400\n"
+"Last-Translator: Sergey Alyoshin <alyoshin.s@gmail.com>\n"
+"Language-Team: \n"
+"Language: Russian\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=cp1251\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() Ã¢Ã»Ã§Ã¢Ã Ã­ Ã± Ã¯Ã³Ã±Ã²Ã»Ã¬ Ã¯Ã Ã°Ã®Ã«Ã¥Ã¬"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr ""
+"E817: Ãåïðàâèëüíîå Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã®Ã¡Ã°Ã Ã²Ã­Ã®Ã£Ã®/ïðÿìîãî Ã¯Ã®Ã°Ã¿Ã¤ÃªÃ  Ã¡Ã Ã©Ã² Ã¢ Blowfish"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ Ã²Ã¥Ã±Ã² sha256"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ Ã²Ã¥Ã±Ã² Blowfish"
+
+msgid "[Location List]"
+msgstr "[Ñïèñîê Ã°Ã Ã±Ã¯Ã®Ã«Ã®Ã¦Ã¥Ã­Ã¨Ã©]"
+
+msgid "[Quickfix List]"
+msgstr "[Ñïèñîê Ã¡Ã»Ã±Ã²Ã°Ã»Ãµ Ã¨Ã±Ã¯Ã°Ã Ã¢Ã«Ã¥Ã­Ã¨Ã©]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Ã€Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã» Ã¢Ã»Ã§Ã¢Ã Ã«Ã¨ Ã¯Ã°Ã¥ÃªÃ°Ã Ã¹Ã¥Ã­Ã¨Ã¥ ÃªÃ®Ã¬Ã Ã­Ã¤Ã»"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Ãåâîçìîæíî Ã¢Ã»Ã¤Ã¥Ã«Ã¨Ã²Ã¼ Ã¯Ã Ã¬Ã¿Ã²Ã¼ Ã¤Ã Ã¦Ã¥ Ã¤Ã«Ã¿ Ã®Ã¤Ã­Ã®Ã£Ã® Ã¡Ã³Ã´Ã¥Ã°Ã , Ã¢Ã»ÃµÃ®Ã¤..."
 
 msgid "E83: Cannot allocate buffer, using other one..."
 msgstr "E83: Ãåâîçìîæíî Ã¢Ã»Ã¤Ã¥Ã«Ã¨Ã²Ã¼ Ã¯Ã Ã¬Ã¿Ã²Ã¼ Ã¤Ã«Ã¿ Ã¡Ã³Ã´Ã¥Ã°Ã , Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã¬ Ã¤Ã°Ã³Ã£Ã®Ã© Ã¡Ã³Ã´Ã¥Ã°..."
 
-#, c-format
 msgid "E515: No buffers were unloaded"
 msgstr "E515: Ãè Ã®Ã¤Ã¨Ã­ Ã¡Ã³Ã´Ã¥Ã° Ã­Ã¥ Ã¡Ã»Ã« Ã¢Ã»Ã£Ã°Ã³Ã¦Ã¥Ã­ Ã¨Ã§ Ã¯Ã Ã¬Ã¿Ã²Ã¨"
 
-#, c-format
 msgid "E516: No buffers were deleted"
 msgstr "E516: Ãè Ã®Ã¤Ã¨Ã­ Ã¡Ã³Ã´Ã¥Ã° Ã­Ã¥ Ã¡Ã»Ã« Ã³Ã¤Ã Ã«Â¸Ã­"
 
-#, c-format
 msgid "E517: No buffers were wiped out"
 msgstr "E517: Ãè Ã®Ã¤Ã¨Ã­ Ã¡Ã³Ã´Ã¥Ã° Ã­Ã¥ Ã¡Ã»Ã« Ã®Ã·Ã¨Ã¹Ã¥Ã­"
 
@@ -77,7 +98,8 @@ msgstr "E88: 
 
 #, c-format
 msgid "E89: No write since last change for buffer %ld (add ! to override)"
-msgstr "E89: ÃˆÃ§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¿ Ã¢ Ã¡Ã³Ã´Ã¥Ã°Ã¥ %ld Ã­Ã¥ Ã±Ã®ÃµÃ°Ã Ã­Ã¥Ã­Ã» (!, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+msgstr ""
+"E89: ÃˆÃ§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¿ Ã¢ Ã¡Ã³Ã´Ã¥Ã°Ã¥ %ld Ã­Ã¥ Ã±Ã®ÃµÃ°Ã Ã­Ã¥Ã­Ã» (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 msgid "E90: Cannot unload last buffer"
 msgstr "E90: Ãåâîçìîæíî Ã¢Ã»Ã£Ã°Ã³Ã§Ã¨Ã²Ã¼ Ã¨Ã§ Ã¯Ã Ã¬Ã¿Ã²Ã¨ Ã¯Ã®Ã±Ã«Ã¥Ã¤Ã­Ã¨Ã© Ã¡Ã³Ã´Ã¥Ã°"
@@ -116,6 +138,9 @@ msgstr "[
 msgid "[Read errors]"
 msgstr "[Îøèáêè Ã·Ã²Ã¥Ã­Ã¨Ã¿]"
 
+msgid "[RO]"
+msgstr "[Ò×]"
+
 msgid "[readonly]"
 msgstr "[òîëüêî Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿]"
 
@@ -131,15 +156,15 @@ msgstr "%ld 
 msgid "line %ld of %ld --%d%%-- col "
 msgstr "ñòð. %ld Ã¨Ã§ %ld --%d%%-- ÃªÃ®Ã«. "
 
-msgid "[No file]"
-msgstr "[Ãåò Ã´Ã Ã©Ã«Ã ]"
+msgid "[No Name]"
+msgstr "[Ãåò Ã¨Ã¬Ã¥Ã­Ã¨]"
 
 #. must be a help buffer
 msgid "help"
 msgstr "ñïðàâêà"
 
-msgid "[help]"
-msgstr "[ñïðàâêà]"
+msgid "[Help]"
+msgstr "[Ñïðàâêà]"
 
 msgid "[Preview]"
 msgstr "[Ãðåäïðîñìîòð]"
@@ -153,7 +178,6 @@ msgstr "
 msgid "Top"
 msgstr "Ãàâåðõó"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -161,11 +185,8 @@ msgstr ""
 "\n"
 "# Ã‘ïèñîê Ã¡Ã³Ã´Ã¥Ã°Ã®Ã¢:\n"
 
-msgid "[Error List]"
-msgstr "[Ñïèñîê Ã®Ã¸Ã¨Ã¡Ã®Ãª]"
-
-msgid "[No File]"
-msgstr "[Ãåò Ã´Ã Ã©Ã«Ã ]"
+msgid "[Scratch]"
+msgstr "[Âðåìåííûé]"
 
 msgid ""
 "\n"
@@ -186,18 +207,27 @@ msgstr "    
 msgid "E96: Can not diff more than %ld buffers"
 msgstr "E96: Ã‘ëåäèòü Ã§Ã  Ã®Ã²Ã«Ã¨Ã·Ã¨Ã¿Ã¬Ã¨ Ã¬Ã®Ã¦Ã­Ã® Ã­Ã¥ Ã¡Ã®Ã«Ã¥Ã¥ Ã·Ã¥Ã¬ Ã¢ %ld Ã¡Ã³Ã´Ã¥Ã°Ã Ãµ"
 
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: Ãåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã¨Ã«Ã¨ Ã§Ã Ã¯Ã¨Ã±Ã Ã²Ã¼ Ã¢Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã»Ã¥ Ã´Ã Ã©Ã«Ã»"
+
 msgid "E97: Cannot create diffs"
 msgstr "E97: Ãåâîçìîæíî Ã±Ã®Ã§Ã¤Ã Ã²Ã¼ Ã´Ã Ã©Ã«Ã» Ã®Ã²Ã«Ã¨Ã·Ã¨Ã©"
 
 msgid "Patch file"
 msgstr "Ôàéë-çàïëàòêà"
 
+msgid "E816: Cannot read patch output"
+msgstr "E816: Ãåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã¢Ã»Ã¢Ã®Ã¤ patch"
+
 msgid "E98: Cannot read diff output"
-msgstr "E98: Ãåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã¢Ã»Ã¢Ã®Ã¤ ÃªÃ®Ã¬Ã Ã­Ã¤Ã» diff"
+msgstr "E98: Ãåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã¢Ã»Ã¢Ã®Ã¤ diff"
 
 msgid "E99: Current buffer is not in diff mode"
 msgstr "E99: Ã€ÃªÃ²Ã¨Ã¢Ã­Ã»Ã© Ã¡Ã³Ã´Ã¥Ã° Ã­Ã¥ Ã­Ã ÃµÃ®Ã¤Ã¨Ã²Ã±Ã¿ Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬Ã¥ Ã®Ã²Ã«Ã¨Ã·Ã¨Ã©"
 
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: Ãîëüøå Ã­Ã¥Ã² Ã¨Ã§Ã¬Ã¥Ã­Ã¿Ã¥Ã¬Ã»Ãµ Ã¡Ã³Ã´Ã¥Ã°Ã®Ã¢ Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬Ã¥ Ã®Ã²Ã«Ã¨Ã·Ã¨Ã©"
+
 msgid "E100: No other buffer in diff mode"
 msgstr "E100: Ãîëüøå Ã­Ã¥Ã² Ã¡Ã³Ã´Ã¥Ã°Ã®Ã¢ Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬Ã¥ Ã®Ã²Ã«Ã¨Ã·Ã¨Ã©"
 
@@ -212,6 +242,9 @@ msgstr "E102: 
 msgid "E103: Buffer \"%s\" is not in diff mode"
 msgstr "E103: Ãóôåð \"%s\" Ã­Ã¥ Ã­Ã ÃµÃ®Ã¤Ã¨Ã²Ã±Ã¿ Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬Ã¥ Ã®Ã²Ã«Ã¨Ã·Ã¨Ã©"
 
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: Ãóôåð Ã­Ã¥Ã®Ã¦Ã¨Ã¤Ã Ã­Ã­Ã® Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã«Ã±Ã¿"
+
 msgid "E104: Escape not allowed in digraph"
 msgstr "E104: Ãêðàíèðóþùèé Ã±Ã¨Ã¬Ã¢Ã®Ã« Escape Ã­Ã¥Ã«Ã¼Ã§Ã¿ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ Ã¢ Ã¤Ã¨Ã£Ã°Ã Ã´Ã¥"
 
@@ -221,17 +254,15 @@ msgstr "E544: 
 msgid "E105: Using :loadkeymap not in a sourced file"
 msgstr "E105: ÃŠÃ®Ã¬Ã Ã­Ã¤Ã  :loadkeymap Ã¯Ã°Ã¨Ã¬Ã¥Ã­Ã¥Ã­Ã  Ã¢Ã­Ã¥ Ã´Ã Ã©Ã«Ã  Ã±Ã¶Ã¥Ã­Ã Ã°Ã¨Ã¿"
 
+msgid "E791: Empty keymap entry"
+msgstr "E791: Ã¯Ã³Ã±Ã²Ã Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã¼ Ã°Ã Ã±ÃªÃ«Ã Ã¤ÃªÃ¨ ÃªÃ«Ã Ã¢Ã¨Ã Ã²Ã³Ã°Ã»"
+
 msgid " Keyword completion (^N^P)"
 msgstr " Ã€Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥ ÃªÃ«Ã¾Ã·Ã¥Ã¢Ã®Ã£Ã® Ã±Ã«Ã®Ã¢Ã  (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^E^Y^L^]^F^I^K^D^V^N^P)"
-msgstr " Ã€Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥ ^X (^E^Y^L^]^F^I^K^D^V^N^P)"
-
-#. Scroll has it's own msgs, in it's place there is the msg for local
-#. * ctrl_x_mode = 0 (eg continue_status & CONT_LOCAL)  -- Acevedo
-msgid " Keyword Local completion (^N^P)"
-msgstr " ÃŒÃ¥Ã±Ã²Ã­Ã®Ã¥ Ã Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥ ÃªÃ«Ã¾Ã·Ã¥Ã¢Ã®Ã£Ã® Ã±Ã«Ã®Ã¢Ã  (^N^P)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " Ãåæèì ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr " Ã€Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥ Ã¶Ã¥Ã«Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¨ (^L^N^P)"
@@ -257,15 +288,33 @@ msgstr " 
 msgid " Command-line completion (^V^N^P)"
 msgstr " Ã€Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥ ÃªÃ®Ã¬Ã Ã­Ã¤Ã­Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¨ (^V^N^P)"
 
+msgid " User defined completion (^U^N^P)"
+msgstr " Ãîëüçîâàòåëüñêîå Ã Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥ (^U^N^P)"
+
+msgid " Omni completion (^O^N^P)"
+msgstr " Omni-äîïîëíåíèå (^O^N^P)"
+
+msgid " Spelling suggestion (s^N^P)"
+msgstr " Ãðåäëîæåíèå Ã¨Ã±Ã¯Ã°Ã Ã¢Ã«Ã¥Ã­Ã¨Ã¿ Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿ (s^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " ÃŒÃ¥Ã±Ã²Ã­Ã®Ã¥ Ã Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥ ÃªÃ«Ã¾Ã·Ã¥Ã¢Ã®Ã£Ã® Ã±Ã«Ã®Ã¢Ã  (^N^P)"
+
 msgid "Hit end of paragraph"
 msgstr "Êîíåö Ã Ã¡Ã§Ã Ã¶Ã "
 
-msgid "'thesaurus' option is empty"
-msgstr "ÃÃ¥ Ã§Ã Ã¤Ã Ã­Ã® Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨ 'thesaurus'"
+msgid "E839: Completion function changed window"
+msgstr "E839: Ã”óíêöèÿ Ã Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¿ Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã«Ã  Ã®ÃªÃ­Ã®"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Ã”óíêöèÿ Ã Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¿ Ã³Ã¤Ã Ã«Ã¨Ã«Ã  Ã²Ã¥ÃªÃ±Ã²"
 
 msgid "'dictionary' option is empty"
 msgstr "ÃÃ¥ Ã§Ã Ã¤Ã Ã­Ã® Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨ 'dictionary'"
 
+msgid "'thesaurus' option is empty"
+msgstr "ÃÃ¥ Ã§Ã Ã¤Ã Ã­Ã® Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨ 'thesaurus'"
+
 #, c-format
 msgid "Scanning dictionary: %s"
 msgstr "Ãðîñìîòð Ã±Ã«Ã®Ã¢Ã Ã°Ã¿: %s"
@@ -280,7 +329,6 @@ msgstr " (
 msgid "Scanning: %s"
 msgstr "Ãðîñìîòð: %s"
 
-#, c-format
 msgid "Scanning tags."
 msgstr "Âûïîëíÿåòñÿ Ã¯Ã®Ã¨Ã±Ãª Ã±Ã°Ã¥Ã¤Ã¨ Ã¬Ã¥Ã²Ã®Ãª."
 
@@ -311,11 +359,103 @@ msgstr "
 msgid "match %d"
 msgstr "ñîîòâåòñòâèå %d"
 
-#. Skip further arguments but do continue to
-#. * search for a trailing command.
+msgid "E18: Unexpected characters in :let"
+msgstr "E18: Ãåîæèäàííûå Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã» Ã¢ :let"
+
+#, c-format
+msgid "E684: list index out of range: %ld"
+msgstr "E684: ÃˆÃ­Ã¤Ã¥ÃªÃ± Ã±Ã¯Ã¨Ã±ÃªÃ  Ã§Ã  Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã Ã¬Ã¨ Ã¤Ã¨Ã Ã¯Ã Ã§Ã®Ã­Ã : %ld"
+
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121: Ãåîïðåäåë¸ííàÿ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã Ã¿: %s"
+
+msgid "E111: Missing ']'"
+msgstr "E111: Ãðîïóùåíà ']'"
+
+#, c-format
+msgid "E686: Argument of %s must be a List"
+msgstr "E686: Ãàðàìåòð %s Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã¡Ã»Ã²Ã¼ Ã±Ã¯Ã¨Ã±ÃªÃ®Ã¬"
+
+#, c-format
+msgid "E712: Argument of %s must be a List or Dictionary"
+msgstr "E712: Ãàðàìåòð %s Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã¡Ã»Ã²Ã¼ Ã±Ã¯Ã¨Ã±ÃªÃ®Ã¬ Ã¨Ã«Ã¨ Ã±Ã«Ã®Ã¢Ã Ã°Â¸Ã¬"
+
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: Ãåâîçìîæíî Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ Ã¯Ã³Ã±Ã²Ã®Ã© ÃªÃ«Ã¾Ã· Ã¤Ã«Ã¿ Ã±Ã«Ã®Ã¢Ã Ã°Ã¿"
+
+msgid "E714: List required"
+msgstr "E714: Ã’ðåáóåòñÿ Ã±Ã¯Ã¨Ã±Ã®Ãª"
+
+msgid "E715: Dictionary required"
+msgstr "E715: Ã’ðåáóåòñÿ Ã±Ã«Ã®Ã¢Ã Ã°Ã¼"
+
+#, c-format
+msgid "E118: Too many arguments for function: %s"
+msgstr "E118: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢ Ã¤Ã«Ã¿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ %s"
+
+#, c-format
+msgid "E716: Key not present in Dictionary: %s"
+msgstr "E716: Ãåò ÃªÃ«Ã¾Ã·Ã  Ã¢ Ã±Ã«Ã®Ã¢Ã Ã°Ã¥: %s"
+
+#, c-format
+msgid "E122: Function %s already exists, add ! to replace it"
+msgstr "E122: Ã”óíêöèÿ %s Ã³Ã¦Ã¥ Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã². Ã„îáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã§Ã Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã¥Â¸."
+
+msgid "E717: Dictionary entry already exists"
+msgstr "E717: Ã‡Ã Ã¯Ã¨Ã±Ã¼ Ã³Ã¦Ã¥ Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã² Ã¢ Ã±Ã«Ã®Ã¢Ã Ã°Ã¥"
+
+msgid "E718: Funcref required"
+msgstr "E718: Ã’ðåáóåòñÿ Ã±Ã±Ã»Ã«ÃªÃ  Ã­Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾"
+
+msgid "E719: Cannot use [:] with a Dictionary"
+msgstr "E719: Ãåâîçìîæíî Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ [:] Ã±Ã® Ã±Ã«Ã®Ã¢Ã Ã°Â¸Ã¬"
+
+#, c-format
+msgid "E734: Wrong variable type for %s="
+msgstr "E734: Ãåïðàâèëüíûé Ã²Ã¨Ã¯ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã®Ã© Ã¤Ã«Ã¿ %s="
+
+#, c-format
+msgid "E130: Unknown function: %s"
+msgstr "E130: Ãåèçâåñòíàÿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¿: %s"
+
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461: Ãåäîïóñòèìîå Ã¨Ã¬Ã¿ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã®Ã©: %s"
+
+msgid "E806: using Float as a String"
+msgstr "E806: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã·Ã¨Ã±Ã«Ã  Ã± Ã¯Ã«Ã Ã¢Ã Ã¾Ã¹Ã¥Ã© Ã²Ã®Ã·ÃªÃ®Ã© ÃªÃ Ãª Ã±Ã²Ã°Ã®ÃªÃ¨"
+
+msgid "E687: Less targets than List items"
+msgstr "E687: Ã–åëåé Ã¬Ã¥Ã­Ã¼Ã¸Ã¥ Ã·Ã¥Ã¬ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã®Ã¢ Ã±Ã¯Ã¨Ã±ÃªÃ "
+
+msgid "E688: More targets than List items"
+msgstr "E688: Ã–åëåé Ã¡Ã®Ã«Ã¼Ã¸Ã¥ Ã·Ã¥Ã¬ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã®Ã¢ Ã±Ã¯Ã¨Ã±ÃªÃ "
+
+msgid "Double ; in list of variables"
+msgstr "Äâîéíàÿ ; Ã¢ Ã±Ã¯Ã¨Ã±ÃªÃ¥ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã»Ãµ"
+
 #, c-format
-msgid "E106: Unknown variable: \"%s\""
-msgstr "E106: Ãåèçâåñòíàÿ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã Ã¿: \"%s\""
+msgid "E738: Can't list variables for %s"
+msgstr "E738: Ãåâîçìîæíî Ã®Ã²Ã®Ã¡Ã°Ã Ã§Ã¨Ã²Ã¼ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã»Ã¥ Ã¤Ã«Ã¿ %s"
+
+msgid "E689: Can only index a List or Dictionary"
+msgstr "E689: ÃˆÃ­Ã¤Ã¥ÃªÃ±Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã²Ã®Ã«Ã¼ÃªÃ® Ã±Ã¯Ã¨Ã±ÃªÃ  Ã¨Ã«Ã¨ Ã±Ã«Ã®Ã¢Ã Ã°Ã¿"
+
+msgid "E708: [:] must come last"
+msgstr "E708: [:] Ã¤Ã®Ã«Ã¦Ã­Ã® Ã¡Ã»Ã²Ã¼ Ã¯Ã®Ã±Ã«Ã¥Ã¤Ã­Ã¨Ã¬"
+
+msgid "E709: [:] requires a List value"
+msgstr "E709: [:] Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã² Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥Ã¬ Ã±Ã¯Ã¨Ã±Ã®Ãª"
+
+msgid "E710: List value has more items than target"
+msgstr "E710: Ãëåìåíòîâ Ã±Ã¯Ã¨Ã±ÃªÃ -çíà÷åíèÿ Ã¡Ã®Ã«Ã¼Ã¸Ã¥ Ã·Ã¥Ã¬ Ã¢ Ã¶Ã¥Ã«Ã¨"
+
+msgid "E711: List value has not enough items"
+msgstr "E711: Ã‘ïèñîê-çíà÷åíèå Ã­Ã¥ Ã±Ã®Ã¤Ã¥Ã°Ã¦Ã¨Ã² Ã¤Ã®Ã±Ã²Ã Ã²Ã®Ã·Ã­Ã® Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã®Ã¢"
+
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690: Ãðîïóùåíî \"in\" Ã¯Ã®Ã±Ã«Ã¥ :for"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -325,14 +465,38 @@ msgstr "E107: 
 msgid "E108: No such variable: \"%s\""
 msgstr "E108: Ãåò Ã²Ã ÃªÃ®Ã© Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã®Ã©: \"%s\""
 
+msgid "E743: variable nested too deep for (un)lock"
+msgstr "E743: Ã‘ëèøêîì Ã£Ã«Ã³Ã¡Ã®ÃªÃ® Ã¢Ã«Ã®Ã¦Ã¥Ã­Ã­Ã»Ã¥ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã»Ã¥ Ã¤Ã«Ã¿ (ðàç)áëîêèðîâêè"
+
 msgid "E109: Missing ':' after '?'"
 msgstr "E109: Ãðîïóùåíî ':' Ã¯Ã®Ã±Ã«Ã¥ '?'"
 
+msgid "E691: Can only compare List with List"
+msgstr "E691: Ã‘ïèñîê Ã¬Ã®Ã¦Ã­Ã® Ã±Ã°Ã Ã¢Ã­Ã¨Ã¢Ã Ã²Ã¼ Ã²Ã®Ã«Ã¼ÃªÃ® Ã±Ã® Ã±Ã¯Ã¨Ã±ÃªÃ®Ã¬"
+
+msgid "E692: Invalid operation for Lists"
+msgstr "E692: Ãåäîïóñòèìàÿ Ã®Ã¯Ã¥Ã°Ã Ã¶Ã¨Ã¿ Ã¤Ã«Ã¿ Ã±Ã¯Ã¨Ã±ÃªÃ®Ã¢"
+
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735: Ã‘ëîâàðü Ã¬Ã®Ã¦Ã­Ã® Ã±Ã°Ã Ã¢Ã­Ã¨Ã¢Ã Ã²Ã¼ Ã²Ã®Ã«Ã¼ÃªÃ® Ã±Ã® Ã±Ã«Ã®Ã¢Ã Ã°Â¸Ã¬"
+
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736: Ãåäîïóñòèìàÿ Ã®Ã¯Ã¥Ã°Ã Ã¶Ã¨Ã¿ Ã¤Ã«Ã¿ Ã±Ã«Ã®Ã¢Ã Ã°Ã¿"
+
+msgid "E693: Can only compare Funcref with Funcref"
+msgstr "E693: Ã‘ñûëêó Ã­Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾ Ã¬Ã®Ã¦Ã­Ã® Ã±Ã°Ã Ã¢Ã­Ã¨Ã¢Ã Ã²Ã¼ Ã²Ã®Ã«Ã¼ÃªÃ® Ã± Ã±Ã±Ã»Ã«ÃªÃ®Ã© Ã­Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾"
+
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694: Ãåäîïóñòèìàÿ Ã®Ã¯Ã¥Ã°Ã Ã¶Ã¨Ã¿ Ã¤Ã«Ã¿ Ã±Ã±Ã»Ã«ÃªÃ¨ Ã­Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾"
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: Ãåâîçìîæíî Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ '%' Ã± Ã·Ã¨Ã±Ã«Ã®Ã¬ Ã± Ã¯Ã«Ã Ã¢Ã Ã¾Ã¹Ã¥Ã© Ã²Ã®Ã·ÃªÃ®Ã©"
+
 msgid "E110: Missing ')'"
 msgstr "E110: Ãðîïóùåíà ')'"
 
-msgid "E111: Missing ']'"
-msgstr "E111: Ãðîïóùåíà ']'"
+msgid "E695: Cannot index a Funcref"
+msgstr "E695: Ãåâîçìîæíî Ã¨Ã­Ã¤Ã¥ÃªÃ±Ã¨Ã°Ã®Ã¢Ã Ã²Ã¼ Ã±Ã±Ã»Ã«ÃªÃ³ Ã­Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾"
 
 #, c-format
 msgid "E112: Option name missing: %s"
@@ -351,6 +515,37 @@ msgid "E115: Missing quote: %s"
 msgstr "E115: Ãðîïóùåíà ÃªÃ Ã¢Ã»Ã·ÃªÃ : %s"
 
 #, c-format
+msgid "E696: Missing comma in List: %s"
+msgstr "E696: Ãðîïóùåíà Ã§Ã Ã¯Ã¿Ã²Ã Ã¿ Ã¢ Ã±Ã¯Ã¨Ã±ÃªÃ¥: %s"
+
+#, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697: Ãðîïóùåíî Ã®ÃªÃ®Ã­Ã·Ã Ã­Ã¨Ã¥ Ã±Ã¯Ã¨Ã±ÃªÃ  ']': %s"
+
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720: Ãðîïóùåíî Ã¤Ã¢Ã®Ã¥Ã²Ã®Ã·Ã¨Ã¥ Ã¢ Ã±Ã«Ã®Ã¢Ã Ã°Ã¥: %s"
+
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: Ãîâòîð ÃªÃ«Ã¾Ã·Ã  Ã¢ Ã±Ã«Ã®Ã¢Ã Ã°Ã¥: \"%s\""
+
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722: Ãðîïóùåíà Ã§Ã Ã¯Ã¿Ã²Ã Ã¿ Ã¢ Ã±Ã«Ã®Ã¢Ã Ã°Ã¥: %s"
+
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723: Ãðîïóùåíî Ã®ÃªÃ®Ã­Ã·Ã Ã­Ã¨Ã¥ Ã±Ã«Ã®Ã¢Ã Ã°Ã¿ '}': %s"
+
+msgid "E724: variable nested too deep for displaying"
+msgstr "E724: Ã‘ëèøêîì Ã£Ã«Ã³Ã¡Ã®ÃªÃ® Ã¢Ã«Ã®Ã¦Ã¥Ã­Ã­Ã»Ã¥ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã»Ã¥ Ã¤Ã«Ã¿ Ã®Ã²Ã®Ã¡Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¿"
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢ Ã¤Ã«Ã¿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ %s"
+
+#, c-format
 msgid "E116: Invalid arguments for function %s"
 msgstr "E116: Ãàðàìåòðû Ã¤Ã«Ã¿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ %s Ã§Ã Ã¤Ã Ã­Ã» Ã­Ã¥Ã¢Ã¥Ã°Ã­Ã®"
 
@@ -359,10 +554,6 @@ msgid "E117: Unknown function: %s"
 msgstr "E117: Ãåèçâåñòíàÿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¿: %s"
 
 #, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢ Ã¤Ã«Ã¿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ %s"
-
-#, c-format
 msgid "E119: Not enough arguments for function: %s"
 msgstr "E119: Ãåäîñòàòî÷íî Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢ Ã¤Ã«Ã¿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ %s"
 
@@ -370,6 +561,22 @@ msgstr "E119: 
 msgid "E120: Using <SID> not in a script context: %s"
 msgstr "E120: <SID> Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿ Ã¢Ã­Ã¥ Ã±Ã¶Ã¥Ã­Ã Ã°Ã¨Ã¿: %s"
 
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: Ã‚ûçîâ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ dict Ã¡Ã¥Ã§ Ã±Ã«Ã®Ã¢Ã Ã°Ã¿: %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808: Ã’ðåáóåòñÿ Ã¶Ã¥Ã«Ã®Ã¥ Ã·Ã¨Ã±Ã«Ã® Ã¨Ã«Ã¨ Ã± Ã¯Ã«Ã Ã¢Ã Ã¾Ã¹Ã¥Ã© Ã²Ã®Ã·ÃªÃ®Ã©"
+
+msgid "add() argument"
+msgstr "ïàðàìåòð add()"
+
+msgid "E699: Too many arguments"
+msgstr "E699: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢"
+
+msgid "E785: complete() can only be used in Insert mode"
+msgstr "E785: complete() Ã¬Ã®Ã¦Ã¥Ã² Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼Ã±Ã¿ Ã²Ã®Ã«Ã¼ÃªÃ® Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬Ã¥ Ã‚ñòàâêè"
+
 #.
 #. * Yes this is ugly, I don't particularly like it either.  But doing it
 #. * this way has the compelling advantage that translations need not to
@@ -379,79 +586,183 @@ msgid "&Ok"
 msgstr "&Ok"
 
 #, c-format
+msgid "E737: Key already exists: %s"
+msgstr "E737: ÃŠÃ«Ã¾Ã· Ã³Ã¦Ã¥ Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã²: %s"
+
+msgid "extend() argument"
+msgstr "ïàðàìåòð extend()"
+
+msgid "map() argument"
+msgstr "ïàðàìåòð map()"
+
+msgid "filter() argument"
+msgstr "ïàðàìåòð filter()"
+
+#, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld Ã±Ã²Ã°Ã®Ãª: "
 
+#, c-format
+msgid "E700: Unknown function: %s"
+msgstr "E700: Ãåèçâåñòíàÿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¿: %s"
+
 msgid ""
 "&OK\n"
 "&Cancel"
 msgstr ""
 "&OK\n"
-"Î&òìåíà"
+"&C ÃŽÃ²Ã¬Ã¥Ã­Ã "
 
 msgid "called inputrestore() more often than inputsave()"
 msgstr "Ôóíêöèÿ inputrestore() Ã¢Ã»Ã§Ã»Ã¢Ã Ã¥Ã²Ã±Ã¿ Ã·Ã Ã¹Ã¥, Ã·Ã¥Ã¬ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¿ inputsave()"
 
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã¨Ã·Ã¥Ã±ÃªÃ¨Ãµ Ã±Ã±Ã»Ã«Ã®Ãª (öèêë?)"
+msgid "insert() argument"
+msgstr "ïàðàìåòð insert()"
+
+msgid "E786: Range not allowed"
+msgstr "E786: Ã„èàïàçîí Ã­Ã¥ Ã¤Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã²Ã±Ã¿"
+
+msgid "E701: Invalid type for len()"
+msgstr "E701: Ãåïðàâèëüíûå Ã²Ã¨Ã¯ Ã¤Ã«Ã¿ len()"
+
+msgid "E726: Stride is zero"
+msgstr "E726: Ãóëåâîé Ã¸Ã Ã£"
+
+msgid "E727: Start past end"
+msgstr "E727: Ãà÷àëî Ã¯Ã®Ã±Ã«Ã¥ ÃªÃ®Ã­Ã¶Ã "
+
+msgid "<empty>"
+msgstr "<ïóñòî>"
 
 msgid "E240: No connection to Vim server"
 msgstr "E240: Ãåò Ã±Ã¢Ã¿Ã§Ã¨ Ã± Ã±Ã¥Ã°Ã¢Ã¥Ã°Ã®Ã¬ Vim"
 
+#, c-format
+msgid "E241: Unable to send to %s"
+msgstr "E241: ÃÃ¥ Ã¬Ã®Ã£Ã³ Ã®Ã²Ã¯Ã°Ã Ã¢Ã¨Ã²Ã¼ Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã¥ Ã¤Ã«Ã¿ %s"
+
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Ã‘åðâåð Ã­Ã¥ Ã®Ã²Ã¢Ã¥Ã·Ã Ã¥Ã²"
 
+msgid "remove() argument"
+msgstr "ïàðàìåòð remove()"
+
+msgid "E655: Too many symbolic links (cycle?)"
+msgstr "E655: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã¨Ã·Ã¥Ã±ÃªÃ¨Ãµ Ã±Ã±Ã»Ã«Ã®Ãª (öèêë?)"
+
+msgid "reverse() argument"
+msgstr "ïàðàìåòð reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: ÃÃ¥ Ã¬Ã®Ã£Ã³ Ã®Ã²Ã¢Ã¥Ã²Ã¨Ã²Ã¼ ÃªÃ«Ã¨Ã¥Ã­Ã²Ã³"
 
-#, c-format
-msgid "E241: Unable to send to %s"
-msgstr "E241: ÃÃ¥ Ã¬Ã®Ã£Ã³ Ã®Ã²Ã¯Ã°Ã Ã¢Ã¨Ã²Ã¼ Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã¥ Ã¤Ã«Ã¿ %s"
+msgid "sort() argument"
+msgstr "ïàðàìåòð sort()"
+
+msgid "E702: Sort compare function failed"
+msgstr "E702: Ãåóäà÷íîå Ã§Ã Ã¢Ã¥Ã°Ã¸Ã¥Ã­Ã¨Ã¥ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ Ã±Ã°Ã Ã¢Ã­Ã¥Ã­Ã¨Ã¿ Ã¯Ã°Ã¨ Ã±Ã®Ã°Ã²Ã¨Ã°Ã®Ã¢ÃªÃ¥"
 
 msgid "(Invalid)"
 msgstr "(Ãåïðàâèëüíî)"
 
+msgid "E677: Error writing temp file"
+msgstr "E677: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã§Ã Ã¯Ã¨Ã±Ã¨ Ã¢Ã® Ã¢Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã»Ã© Ã´Ã Ã©Ã«"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã·Ã¨Ã±Ã«Ã  Ã± Ã¯Ã«Ã Ã¢Ã Ã¾Ã¹Ã¥Ã© Ã²Ã®Ã·ÃªÃ®Ã© ÃªÃ Ãª Ã¶Ã¥Ã«Ã®Ã£Ã®"
+
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã±Ã±Ã»Ã«ÃªÃ¨ Ã­Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾ ÃªÃ Ãª Ã·Ã¨Ã±Ã«Ã "
+
+msgid "E745: Using a List as a Number"
+msgstr "E745: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã±Ã¯Ã¨Ã±ÃªÃ  ÃªÃ Ãª Ã·Ã¨Ã±Ã«Ã "
+
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã±Ã«Ã®Ã¢Ã Ã°Ã¿ ÃªÃ Ãª Ã·Ã¨Ã±Ã«Ã "
+
+msgid "E729: using Funcref as a String"
+msgstr "E729: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã±Ã±Ã»Ã«ÃªÃ¨ Ã­Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾ ÃªÃ Ãª Ã±Ã²Ã°Ã®ÃªÃ¨"
+
+msgid "E730: using List as a String"
+msgstr "E730: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã±Ã¯Ã¨Ã±ÃªÃ  ÃªÃ Ãª Ã±Ã²Ã°Ã®ÃªÃ¨"
+
+msgid "E731: using Dictionary as a String"
+msgstr "E731: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã±Ã«Ã®Ã¢Ã Ã°Ã¿ ÃªÃ Ãª Ã±Ã²Ã°Ã®ÃªÃ¨"
+
 #, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: Ãåîïðåäåëåííàÿ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã Ã¿: %s"
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: Ãåñîîòâåòñòâèå Ã²Ã¨Ã¯Ã  Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã®Ã© Ã¤Ã«Ã¿: %s"
 
 #, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: Ãåäîïóñòèìîå Ã¨Ã¬Ã¿ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã®Ã©: %s"
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Ãåâîçìîæíî Ã³Ã¤Ã Ã«Ã¨Ã²Ã¼ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã³Ã¾ %s"
 
 #, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: Ã”óíêöèÿ %s Ã³Ã¦Ã¥ Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã². Ã„îáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã§Ã Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã¥Â¸."
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr ""
+"E704: ÃˆÃ¬Ã¿ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã®Ã© Ã±Ã±Ã»Ã«ÃªÃ¨ Ã­Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾ Ã¤Ã®Ã«Ã¦Ã­Ã® Ã­Ã Ã·Ã¨Ã­Ã Ã²Ã¼Ã±Ã¿ Ã± Ã§Ã Ã£Ã«Ã Ã¢Ã­Ã®Ã© Ã¡Ã³ÃªÃ¢Ã»: "
+"%s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: ÃˆÃ¬Ã¿ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã®Ã© ÃªÃ®Ã­Ã´Ã«Ã¨ÃªÃ²Ã³Ã¥Ã² Ã± Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¾Ã¹Ã¥Ã© Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¥Ã©: %s"
+
+#, c-format
+msgid "E741: Value is locked: %s"
+msgstr "E741: Ã‡Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã§Ã Ã¡Ã«Ã®ÃªÃ¨Ã°Ã®Ã¢Ã Ã­Ã®: %s"
+
+msgid "Unknown"
+msgstr "Ãåèçâåñòíî"
+
+#, c-format
+msgid "E742: Cannot change value of %s"
+msgstr "E742: Ãåâîçìîæíî Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ %s"
+
+msgid "E698: variable nested too deep for making a copy"
+msgstr "E698: Ã‘ëèøêîì Ã£Ã«Ã³Ã¡Ã®ÃªÃ® Ã¢Ã«Ã®Ã¦Ã¥Ã­Ã­Ã»Ã¥ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã»Ã¥ Ã¤Ã«Ã¿ ÃªÃ®Ã¯Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿"
 
 #, c-format
 msgid "E123: Undefined function: %s"
-msgstr "E123: Ãåîïðåäåëåííàÿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¿: %s"
+msgstr "E123: Ãåîïðåäåë¸ííàÿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¿: %s"
 
 #, c-format
 msgid "E124: Missing '(': %s"
 msgstr "E124: Ãðîïóùåíà '(': %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: Ã‡Ã¤Ã¥Ã±Ã¼ Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ g:"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Ãåäîïóñòèìûé Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Ãîâòîðÿþùååñÿ Ã¨Ã¬Ã¿ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã : %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Ãðîïóùåíà ÃªÃ®Ã¬Ã Ã­Ã¤Ã  :endfunction"
 
 #, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: ÃˆÃ¬Ã¿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ ÃªÃ®Ã­Ã´Ã«Ã¨ÃªÃ²Ã³Ã¥Ã² Ã± Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã®Ã©: %s"
+
+#, c-format
 msgid "E127: Cannot redefine function %s: It is in use"
 msgstr "E127: Ãåâîçìîæíî Ã¯Ã¥Ã°Ã¥Ã®Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã¨Ã²Ã¼ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾ %s, Ã®Ã­Ã  Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿"
 
+#, c-format
+msgid "E746: Function name does not match script file name: %s"
+msgstr "E746: ÃˆÃ¬Ã¿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ Ã­Ã¥ Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã³Ã¥Ã² Ã¨Ã¬Ã¥Ã­Ã¨ Ã´Ã Ã©Ã«Ã  Ã±Ã¶Ã¥Ã­Ã Ã°Ã¨Ã¿: %s"
+
 msgid "E129: Function name required"
 msgstr "E129: Ã’ðåáóåòñÿ Ã¨Ã¬Ã¿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨"
 
 #, c-format
-msgid "E128: Function name must start with a capital: %s"
-msgstr "E128: ÃˆÃ¬Ã¿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ Ã¤Ã®Ã«Ã¦Ã­Ã® Ã­Ã Ã·Ã¨Ã­Ã Ã²Ã¼Ã±Ã¿ Ã± Ã¯Ã°Ã®Ã¯Ã¨Ã±Ã­Ã®Ã© Ã¡Ã³ÃªÃ¢Ã»: %s"
-
-#, c-format
-msgid "E130: Undefined function: %s"
-msgstr "E130: Ã”óíêöèÿ %s Ã­Ã¥ Ã®Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã¥Ã­Ã "
+msgid "E128: Function name must start with a capital or contain a colon: %s"
+msgstr ""
+"E128: ÃˆÃ¬Ã¿ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ Ã¤Ã®Ã«Ã¦Ã­Ã® Ã­Ã Ã·Ã¨Ã­Ã Ã²Ã¼Ã±Ã¿ Ã± Ã§Ã Ã£Ã«Ã Ã¢Ã­Ã®Ã© Ã¡Ã³ÃªÃ¢Ã» Ã¨Ã«Ã¨ Ã±Ã®Ã¤Ã¥Ã°Ã¦Ã Ã²Ã¼ "
+"äâîåòî÷èå: %s"
 
 #, c-format
 msgid "E131: Cannot delete function %s: It is in use"
@@ -460,7 +771,6 @@ msgstr "E131: 
 msgid "E132: Function call depth is higher than 'maxfuncdepth'"
 msgstr "E132: ÃƒÃ«Ã³Ã¡Ã¨Ã­Ã  Ã¢Ã»Ã§Ã®Ã¢Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ Ã¡Ã®Ã«Ã¼Ã¸Ã¥, Ã·Ã¥Ã¬ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ 'maxfuncdepth'"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "calling %s"
 msgstr "âûçîâ %s"
@@ -474,10 +784,9 @@ msgid "%s returning #%ld"
 msgstr "%s Ã¢Ã®Ã§Ã¢Ã°Ã Ã¹Ã Ã¥Ã² #%ld"
 
 #, c-format
-msgid "%s returning \"%s\""
-msgstr "%s Ã¢Ã®Ã§Ã¢Ã°Ã Ã¹Ã Ã¥Ã² \"%s\""
+msgid "%s returning %s"
+msgstr "%s Ã¢Ã®Ã§Ã¢Ã°Ã Ã¹Ã Ã¥Ã² %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "continuing in %s"
 msgstr "ïðîäîëæåíèå Ã¢ %s"
@@ -485,7 +794,6 @@ msgstr "
 msgid "E133: :return not inside a function"
 msgstr "E133: ÃªÃ®Ã¬Ã Ã­Ã¤Ã  :return Ã¢Ã­Ã¥ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -493,6 +801,16 @@ msgstr ""
 "\n"
 "# Ã£Ã«Ã®Ã¡Ã Ã«Ã¼Ã­Ã»Ã¥ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã»Ã¥:\n"
 
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\t ïîñëåäíèé Ã°Ã Ã§ Ã®Ã¯Ã¶Ã¨Ã¿ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã  Ã¢ "
+
+msgid "No old files"
+msgstr "Ãåò Ã±Ã²Ã Ã°Ã»Ãµ Ã´Ã Ã©Ã«Ã®Ã¢"
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
 msgstr "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
@@ -543,9 +861,13 @@ msgstr " 
 msgid " marks"
 msgstr " Ã®Ã²Ã¬Ã¥Ã²Ã®Ãª"
 
+msgid " oldfiles"
+msgstr " Ã±Ã²Ã Ã°Ã»Ãµ Ã´Ã Ã©Ã«Ã®Ã¢"
+
 msgid " FAILED"
 msgstr " ÃÅÓÄÀ×ÃÃŽ"
 
+#. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
 msgstr "E137: Ãðàâà Ã­Ã  Ã§Ã Ã¯Ã¨Ã±Ã¼ Ã´Ã Ã©Ã«Ã  viminfo Ã®Ã²Ã±Ã³Ã²Ã±Ã²Ã¢Ã³Ã¾Ã²: %s"
@@ -563,7 +885,6 @@ msgstr "
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Ãòîò Ã´Ã Ã©Ã« viminfo Ã Ã¢Ã²Ã®Ã¬Ã Ã²Ã¨Ã·Ã¥Ã±ÃªÃ¨ Ã±Ã®Ã§Ã¤Ã Ã­ Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -571,7 +892,6 @@ msgstr ""
 "# Ã…ãî Ã¬Ã®Ã¦Ã­Ã® (îñòîðîæíî!) Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã²Ã¼.\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Ã‡Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨ 'encoding' Ã¢ Ã¬Ã®Ã¬Ã¥Ã­Ã² Ã§Ã Ã¯Ã¨Ã±Ã¨ Ã´Ã Ã©Ã«Ã \n"
 
@@ -581,11 +901,6 @@ msgstr "
 msgid "Save As"
 msgstr "Ñîõðàíèòü ÃªÃ Ãª"
 
-#. Overwriting a file that is loaded in another buffer is not a
-#. * good idea.
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: Ã”àéë Ã§Ã Ã£Ã°Ã³Ã¦Ã¥Ã­ Ã¢ Ã¤Ã°Ã³Ã£Ã®Ã¬ Ã¡Ã³Ã´Ã¥Ã°Ã¥"
-
 msgid "Write partial file?"
 msgstr "Çàïèñàòü Ã´Ã Ã©Ã« Ã·Ã Ã±Ã²Ã¨Ã·Ã­Ã®?"
 
@@ -593,8 +908,16 @@ msgid "E140: Use ! to write partial buffer"
 msgstr "E140: Ã„ëÿ Ã§Ã Ã¯Ã¨Ã±Ã¨ Ã·Ã Ã±Ã²Ã¨ Ã¡Ã³Ã´Ã¥Ã°Ã  Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã©Ã²Ã¥ !"
 
 #, c-format
-msgid "Overwrite existing file \"%.*s\"?"
-msgstr "Ãåðåïèñàòü Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¾Ã¹Ã¨Ã© Ã´Ã Ã©Ã« \"%.*s\"?"
+msgid "Overwrite existing file \"%s\"?"
+msgstr "Ãåðåçàïèñàòü Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¾Ã¹Ã¨Ã© Ã´Ã Ã©Ã« \"%s\"?"
+
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "Ñâîï-ôàéë \"%s\" Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã², Ã¯Ã¥Ã°Ã¥Ã§Ã Ã¯Ã¨Ã±Ã Ã²Ã¼?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: Ã‘âîï-ôàéë Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã²: %s (:silent! Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -605,12 +928,27 @@ msgstr "E142: 
 
 #, c-format
 msgid ""
-"'readonly' option is set for \"%.*s\".\n"
+"'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"Äëÿ \"%.*s\" Ã¢ÃªÃ«Ã¾Ã·Ã¥Ã­Ã  Ã®Ã¯Ã¶Ã¨Ã¿ 'readonly'.\n"
+"Äëÿ \"%s\" Ã¢ÃªÃ«Ã¾Ã·Ã¥Ã­Ã  Ã®Ã¯Ã¶Ã¨Ã¿ 'readonly'.\n"
 "Çàïèñàòü?"
 
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+"Ôàéë \"%s\" Ã¨Ã¬Ã¥Ã¥Ã² Ã°Ã¥Ã¦Ã¨Ã¬ Ã¤Ã®Ã±Ã²Ã³Ã¯Ã  Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿.\n"
+"Ãî, Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã®, Ã´Ã Ã©Ã« Ã³Ã¤Ã Ã±Ã²Ã±Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã Ã²Ã¼.\n"
+"Õîòèòå Ã¯Ã®Ã¯Ã°Ã®Ã¡Ã®Ã¢Ã Ã²Ã¼?"
+
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr ""
+"E505: \"%s\" Ã®Ã²ÃªÃ°Ã»Ã² Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿ (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+
 msgid "Edit File"
 msgstr "Ãåäàêòèðîâàíèå Ã´Ã Ã©Ã«Ã "
 
@@ -634,10 +972,17 @@ msgstr "
 msgid "(Interrupted) "
 msgstr "(Ãðåðâàíî)"
 
+msgid "1 match"
+msgstr "Îäíî Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã¨Ã¥"
+
 msgid "1 substitution"
 msgstr "Îäíà Ã§Ã Ã¬Ã¥Ã­Ã "
 
 #, c-format
+msgid "%ld matches"
+msgstr "%ld Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã¨Ã©"
+
+#, c-format
 msgid "%ld substitutions"
 msgstr "%ld Ã§Ã Ã¬Ã¥Ã­"
 
@@ -659,6 +1004,9 @@ msgid "Pattern found in every line: %s"
 msgstr "Ñîîòâåòñòâèå Ã¸Ã Ã¡Ã«Ã®Ã­Ã³ Ã­Ã Ã©Ã¤Ã¥Ã­Ã® Ã­Ã  ÃªÃ Ã¦Ã¤Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¥: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "Øàáëîí Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -673,7 +1021,7 @@ msgstr "E478: 
 
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: Ãª Ã±Ã®Ã¦Ã Ã«Ã¥Ã­Ã¨Ã¾, Ã±Ã¯Ã°Ã Ã¢ÃªÃ  '%s' Ã¤Ã«Ã¿ %s Ã®Ã²Ã±Ã³Ã²Ã±Ã²Ã¢Ã³Ã¥Ã²"
+msgstr "E661: ÃŠ Ã±Ã®Ã¦Ã Ã«Ã¥Ã­Ã¨Ã¾, Ã±Ã¯Ã°Ã Ã¢ÃªÃ  '%s' Ã¤Ã«Ã¿ %s Ã®Ã²Ã±Ã³Ã²Ã±Ã²Ã¢Ã³Ã¥Ã²"
 
 #, c-format
 msgid "E149: Sorry, no help for %s"
@@ -700,8 +1048,8 @@ msgid "E670: Mix of help file encodings within a language: %s"
 msgstr "E670: Ã”àéëû Ã±Ã¯Ã°Ã Ã¢ÃªÃ¨ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¾Ã² Ã°Ã Ã§Ã­Ã»Ã¥ ÃªÃ®Ã¤Ã¨Ã°Ã®Ã¢ÃªÃ¨ Ã¤Ã«Ã¿ Ã®Ã¤Ã­Ã®Ã£Ã® Ã¿Ã§Ã»ÃªÃ : %s"
 
 #, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s"
-msgstr "E154: Ãîâòîðÿþùàÿñÿ Ã¬Ã¥Ã²ÃªÃ  \"%s\" Ã¢ Ã´Ã Ã©Ã«Ã¥ %s"
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154: Ãîâòîðÿþùàÿñÿ Ã¬Ã¥Ã²ÃªÃ  \"%s\" Ã¢ Ã´Ã Ã©Ã«Ã¥ %s/%s"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
@@ -767,9 +1115,12 @@ msgstr "
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s Ã±Ã²Ã°. %ld"
 
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: Ãåðâîå Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ \":profile start {èìÿ-ôàéëà}\""
+
 #, c-format
-msgid "Save changes to \"%.*s\"?"
-msgstr "Ñîõðàíèòü Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¿ Ã¢ \"%.*s\"?"
+msgid "Save changes to \"%s\"?"
+msgstr "Ñîõðàíèòü Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¿ Ã¢ \"%s\"?"
 
 msgid "Untitled"
 msgstr "Ãåç Ã¨Ã¬Ã¥Ã­Ã¨"
@@ -793,7 +1144,7 @@ msgstr "E165: 
 
 #, c-format
 msgid "E666: compiler not supported: %s"
-msgstr "E666: ÃªÃ®Ã¬Ã¯Ã¨Ã«Ã¿Ã²Ã®Ã° Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã²Ã±Ã¿: %s"
+msgstr "E666: ÃŠÃ®Ã¬Ã¯Ã¨Ã«Ã¿Ã²Ã®Ã° Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã²Ã±Ã¿: %s"
 
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
@@ -834,6 +1185,21 @@ msgstr "
 msgid "finished sourcing %s"
 msgstr "ñ÷èòûâàíèå Ã±Ã¶Ã¥Ã­Ã Ã°Ã¨Ã¿ %s Ã§Ã Ã¢Ã¥Ã°Ã¸Ã¥Ã­Ã®"
 
+msgid "modeline"
+msgstr "ðåæèìíàÿ Ã±Ã²Ã°Ã®ÃªÃ "
+
+msgid "--cmd argument"
+msgstr "--cmd Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°"
+
+msgid "-c argument"
+msgstr "-c Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°"
+
+msgid "environment variable"
+msgstr "ïåðåìåííàÿ Ã®ÃªÃ°Ã³Ã¦Ã¥Ã­Ã¨Ã¿"
+
+msgid "error handler"
+msgstr "îáðàáîò÷èê Ã®Ã¸Ã¨Ã¡ÃªÃ¨"
+
 msgid "W15: Warning: Wrong line separator, ^M may be missing"
 msgstr ""
 "W15: Ãðåäóïðåæäåíèå: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã»Ã© Ã°Ã Ã§Ã¤Ã¥Ã«Ã¨Ã²Ã¥Ã«Ã¼ Ã±Ã²Ã°Ã®ÃªÃ¨. Ã‚îçìîæíî Ã¯Ã°Ã®Ã¯Ã³Ã¹Ã¥Ã­Ã® ^M"
@@ -845,100 +1211,25 @@ msgid "E168: :finish used outside of a sourced file"
 msgstr "E168: ÃŠÃ®Ã¬Ã Ã­Ã¤Ã  :finish Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿ Ã¢Ã­Ã¥ Ã´Ã Ã©Ã«Ã  Ã±Ã¶Ã¥Ã­Ã Ã°Ã¨Ã¿"
 
 #, c-format
-msgid "Page %d"
-msgstr "Ñòðàíèöà %d"
-
-msgid "No text to be printed"
-msgstr "Ãå÷àòàòü Ã­Ã¥Ã·Ã¥Ã£Ã®"
-
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Ãå÷àòü Ã±Ã²Ã°. %d (%d%%)"
+msgid "Current %slanguage: \"%s\""
+msgstr "Àêòèâíûé %sÿçûê: \"%s\""
 
 #, c-format
-msgid " Copy %d of %d"
-msgstr " ÃŠÃ®Ã¯Ã¨Ã¿ %d Ã¨Ã§ %d"
+msgid "E197: Cannot set language to \"%s\""
+msgstr "E197: Ãåâîçìîæíî Ã±Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã¿Ã§Ã»Ãª Ã­Ã  \"%s\""
 
-#, c-format
-msgid "Printed: %s"
-msgstr "Ãàïå÷àòàíî: %s"
+msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+msgstr "Ãåðåõîä Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬ Ex. Ã„ëÿ Ã¯Ã¥Ã°Ã¥ÃµÃ®Ã¤Ã  Ã¢ ÃŽÃ¡Ã»Ã·Ã­Ã»Ã© Ã°Ã¥Ã¦Ã¨Ã¬ Ã­Ã Ã¡Ã¥Ã°Ã¨Ã²Ã¥ \"visual\""
 
-#, c-format
-msgid "Printing aborted"
-msgstr "Ãå÷àòü Ã¯Ã°Ã¥ÃªÃ°Ã Ã¹Ã¥Ã­Ã "
+msgid "E501: At end-of-file"
+msgstr "E501: Ã‚ ÃªÃ®Ã­Ã¶Ã¥ Ã´Ã Ã©Ã«Ã "
 
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã§Ã Ã¯Ã¨Ã±Ã¨ Ã¢ Ã´Ã Ã©Ã« PostScript"
+msgid "E169: Command too recursive"
+msgstr "E169: Ã‘ëèøêîì Ã°Ã¥ÃªÃ³Ã°Ã±Ã¨Ã¢Ã­Ã Ã¿ ÃªÃ®Ã¬Ã Ã­Ã¤Ã "
 
 #, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« \"%s\""
-
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Ãåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript \"%s\""
-
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: Ã´Ã Ã©Ã« \"%s\" Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã´Ã Ã©Ã«Ã®Ã¬ Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript"
-
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: Ã´Ã Ã©Ã« \"%s\" Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã¤Ã®Ã¯Ã³Ã±Ã²Ã¨Ã¬Ã»Ã¬ Ã´Ã Ã©Ã«Ã®Ã¬ Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript"
-
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ \"%s\" Ã­Ã¥Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã­Ã®Ã© Ã¢Ã¥Ã°Ã±Ã¨Ã¨"
-
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« PostScript"
-
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« \"%s\""
-
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Ã”àéë Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript \"prolog.ps\" Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­"
-
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Ã”àéë Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript \"%s.ps\" Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­"
-
-#, c-format
-msgid "E620: Unable to convert from multi-byte to \"%s\" encoding"
-msgstr ""
-"E620: Ãðåîáðàçîâàíèå Ã¨Ã§ Ã¬Ã³Ã«Ã¼Ã²Ã¨Ã¡Ã Ã©Ã²Ã­Ã»Ãµ Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã®Ã¢ Ã¢ ÃªÃ®Ã¤Ã¨Ã°Ã®Ã¢ÃªÃ³ \"%s\" Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã®"
-
-msgid "Sending to printer..."
-msgstr "Îòïðàâêà Ã­Ã  Ã¯Ã¥Ã·Ã Ã²Ã¼..."
-
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ Ã¯Ã¥Ã·Ã Ã²Ã¼ Ã´Ã Ã©Ã«Ã  PostScript"
-
-msgid "Print job sent."
-msgstr "Çàäàíèå Ã­Ã  Ã¯Ã¥Ã·Ã Ã²Ã¼ Ã®Ã²Ã¯Ã°Ã Ã¢Ã«Ã¥Ã­Ã®."
-
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "Àêòèâíûé %sÿçûê: \"%s\""
-
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Ãåâîçìîæíî Ã±Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã¿Ã§Ã»Ãª Ã­Ã  \"%s\""
-
-msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
-msgstr "Ãåðåõîä Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬ Ex. Ã„ëÿ Ã¯Ã¥Ã°Ã¥ÃµÃ®Ã¤Ã  Ã¢ ÃŽÃ¡Ã»Ã·Ã­Ã»Ã© Ã°Ã¥Ã¦Ã¨Ã¬ Ã­Ã Ã¡Ã¥Ã°Ã¨Ã²Ã¥ \"visual\""
-
-#. must be at EOF
-msgid "E501: At end-of-file"
-msgstr "E501: Ã‚ ÃªÃ®Ã­Ã¶Ã¥ Ã´Ã Ã©Ã«Ã "
-
-msgid "E169: Command too recursive"
-msgstr "E169: Cëèøêîì Ã°Ã¥ÃªÃ³Ã°Ã±Ã¨Ã¢Ã­Ã Ã¿ ÃªÃ®Ã¬Ã Ã­Ã¤Ã "
-
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: ÃˆÃ±ÃªÃ«Ã¾Ã·Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã Ã¿ Ã±Ã¨Ã²Ã³Ã Ã¶Ã¨Ã¿ Ã­Ã¥ Ã®Ã¡Ã°Ã Ã¡Ã®Ã²Ã Ã­Ã : %s"
+msgid "E605: Exception not caught: %s"
+msgstr "E605: ÃˆÃ±ÃªÃ«Ã¾Ã·Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã Ã¿ Ã±Ã¨Ã²Ã³Ã Ã¶Ã¨Ã¿ Ã­Ã¥ Ã®Ã¡Ã°Ã Ã¡Ã®Ã²Ã Ã­Ã : %s"
 
 msgid "End of sourced file"
 msgstr "Êîíåö Ã±Ã·Ã¨Ã²Ã Ã­Ã­Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã "
@@ -995,7 +1286,7 @@ msgid "No user-defined commands found"
 msgstr "Êîìàíäû, Ã®Ã¯Ã°Ã¥Ã¤Ã¥Ã«Â¸Ã­Ã­Ã»Ã¥ Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¥Ã«Ã¥Ã¬, Ã­Ã¥ Ã®Ã¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã»."
 
 msgid "E175: No attribute specified"
-msgstr "E175: Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã° Ã­Ã¥ Ã§Ã Ã¤Ã Ã­"
+msgstr "E175: Ãàðàìåòð Ã­Ã¥ Ã§Ã Ã¤Ã Ã­"
 
 msgid "E176: Invalid number of arguments"
 msgstr "E176: Ãåïðàâèëüíîå ÃªÃ®Ã«Ã¨Ã·Ã¥Ã±Ã²Ã¢Ã® Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢"
@@ -1006,19 +1297,8 @@ msgstr "E177: 
 msgid "E178: Invalid default value for count"
 msgstr "E178: Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã·Ã¨Ã±Ã«Ã -ïðèñòàâêè Ã¯Ã® Ã³Ã¬Ã®Ã«Ã·Ã Ã­Ã¨Ã¾"
 
-msgid "E179: argument required for complete"
-msgstr "E179: Ã¤Ã«Ã¿ Ã§Ã Ã¢Ã¥Ã°Ã¸Ã¥Ã­Ã¨Ã¿ Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã²Ã±Ã¿ Ã³ÃªÃ Ã§Ã Ã²Ã¼ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°"
-
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¿: %s"
-
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr ""
-"E468: Ãàðàìåòð Ã Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¿ Ã¬Ã®Ã¦Ã­Ã® Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ Ã²Ã®Ã«Ã¼ÃªÃ® Ã± Ã®Ã±Ã®Ã¡Ã»Ã¬ Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥Ã¬"
-
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: ÃŽÃ±Ã®Ã¡Ã®Ã¥ Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥ Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã² Ã³ÃªÃ Ã§Ã Ã­Ã¨Ã¿ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨"
+msgid "E179: argument required for -complete"
+msgstr "E179: Ã„ëÿ -complete Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã²Ã±Ã¿ Ã³ÃªÃ Ã§Ã Ã²Ã¼ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°"
 
 #, c-format
 msgid "E181: Invalid attribute: %s"
@@ -1030,26 +1310,59 @@ msgstr "E182: 
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: ÃŠÃ®Ã¬Ã Ã­Ã¤Ã  Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¥Ã«Ã¿ Ã¤Ã®Ã«Ã¦Ã­Ã  Ã­Ã Ã·Ã¨Ã­Ã Ã²Ã¼Ã±Ã¿ Ã± Ã§Ã Ã£Ã«Ã Ã¢Ã­Ã®Ã© Ã¡Ã³ÃªÃ¢Ã»"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841: Ã‡Ã Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã¨Ã°Ã®Ã¢Ã Ã­Ã­Ã®Ã¥ Ã¨Ã¬Ã¿ Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼Ã±Ã¿ Ã¤Ã«Ã¿ ÃªÃ®Ã¬Ã Ã­Ã¤ Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¥Ã«Ã¿"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Ãåò Ã²Ã ÃªÃ®Ã© ÃªÃ®Ã¬Ã Ã­Ã¤Ã» Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¥Ã«Ã¿: %s"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Ã–âåòîâàÿ Ã±ÃµÃ¥Ã¬Ã  %s Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã "
+msgid "E180: Invalid complete value: %s"
+msgstr "E180: Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¿: %s"
+
+msgid "E468: Completion argument only allowed for custom completion"
+msgstr ""
+"E468: Ãàðàìåòð Ã Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¿ Ã¬Ã®Ã¦Ã­Ã® Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ Ã²Ã®Ã«Ã¼ÃªÃ® Ã± Ã®Ã±Ã®Ã¡Ã»Ã¬ Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥Ã¬"
+
+msgid "E467: Custom completion requires a function argument"
+msgstr "E467: ÃŽÃ±Ã®Ã¡Ã®Ã¥ Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥ Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã² Ã³ÃªÃ Ã§Ã Ã­Ã¨Ã¿ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã  Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨"
+
+msgid "unknown"
+msgstr "íåèçâåñòíî"
+
+#, c-format
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Ãåâîçìîæíî Ã­Ã Ã©Ã²Ã¨ Ã¶Ã¢Ã¥Ã²Ã®Ã¢Ã³Ã¾ Ã±ÃµÃ¥Ã¬Ã³ '%s'"
 
 msgid "Greetings, Vim user!"
-msgstr "Ãðèâåò, Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¥Ã«Ã¼ Vim!"
+msgstr "Ãðèâåòñòâóåì Ã¢Ã Ã±, Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¥Ã«Ã¼ Vim!"
+
+msgid "E784: Cannot close last tab page"
+msgstr "E784: Ãåëüçÿ Ã§Ã ÃªÃ°Ã»Ã²Ã¼ Ã¯Ã®Ã±Ã«Ã¥Ã¤Ã­Ã¾Ã¾ Ã¢ÃªÃ«Ã Ã¤ÃªÃ³"
+
+msgid "Already only one tab page"
+msgstr "Ãà Ã½ÃªÃ°Ã Ã­Ã¥ Ã¢Ã±Ã¥Ã£Ã® Ã®Ã¤Ã­Ã  Ã¢ÃªÃ«Ã Ã¤ÃªÃ "
 
 msgid "Edit File in new window"
 msgstr "Ãåäàêòèðîâàòü Ã´Ã Ã©Ã« Ã¢ Ã­Ã®Ã¢Ã®Ã¬ Ã®ÃªÃ­Ã¥"
 
+#, c-format
+msgid "Tab page %d"
+msgstr "Âêëàäêà %d"
+
 msgid "No swap file"
 msgstr "Ãåç Ã±Ã¢Ã®Ã¯-ôàéëà"
 
 msgid "Append File"
 msgstr "Äîáàâèòü Ã´Ã Ã©Ã«"
 
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+msgstr ""
+"E747: Ã‘ìåíà ÃªÃ Ã²Ã Ã«Ã®Ã£Ã  Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã , Ã¡Ã³Ã´Ã¥Ã° Ã¨Ã§Ã¬Ã¥Ã­Â¸Ã­ (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ "
+"ïðîâåðêó)"
+
 msgid "E186: No previous directory"
 msgstr "E186: Ãåò Ã¯Ã°Ã¥Ã¤Ã»Ã¤Ã³Ã¹Ã¥Ã£Ã® ÃªÃ Ã²Ã Ã«Ã®Ã£Ã "
 
@@ -1057,7 +1370,7 @@ msgid "E187: Unknown"
 msgstr "E187: Ãåèçâåñòíî"
 
 msgid "E465: :winsize requires two number arguments"
-msgstr "E465: ÃªÃ®Ã¬Ã Ã­Ã¤Ã  :winsize Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã² Ã³ÃªÃ Ã§Ã Ã­Ã¨Ã¿ Ã¤Ã¢Ã³Ãµ Ã·Ã¨Ã±Ã«Ã®Ã¢Ã»Ãµ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢"
+msgstr "E465: ÃŠÃ®Ã¬Ã Ã­Ã¤Ã  :winsize Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã² Ã³ÃªÃ Ã§Ã Ã­Ã¨Ã¿ Ã¤Ã¢Ã³Ãµ Ã·Ã¨Ã±Ã«Ã®Ã¢Ã»Ãµ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢"
 
 #, c-format
 msgid "Window position: X %d, Y %d"
@@ -1067,7 +1380,7 @@ msgid "E188: Obtaining window position not implemented for this platform"
 msgstr "E188: Ã‚ Ã¤Ã Ã­Ã­Ã®Ã© Ã±Ã¨Ã±Ã²Ã¥Ã¬Ã¥ Ã®Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¥ Ã¯Ã®Ã«Ã®Ã¦Ã¥Ã­Ã¨Ã¿ Ã®ÃªÃ­Ã  Ã­Ã¥ Ã°Ã Ã¡Ã®Ã²Ã Ã¥Ã²"
 
 msgid "E466: :winpos requires two number arguments"
-msgstr "E466: ÃªÃ®Ã¬Ã Ã­Ã¤Ã  :winpos Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã² Ã³ÃªÃ Ã§Ã Ã­Ã¨Ã¿ Ã¤Ã¢Ã³Ãµ Ã·Ã¨Ã±Ã«Ã®Ã¢Ã»Ãµ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢"
+msgstr "E466: ÃŠÃ®Ã¬Ã Ã­Ã¤Ã  :winpos Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã² Ã³ÃªÃ Ã§Ã Ã­Ã¨Ã¿ Ã¤Ã¢Ã³Ãµ Ã·Ã¨Ã±Ã«Ã®Ã¢Ã»Ãµ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢"
 
 msgid "Save Redirection"
 msgstr "Ãåðåíàïðàâëåíèå Ã§Ã Ã¯Ã¨Ã±Ã¨"
@@ -1082,8 +1395,12 @@ msgid "Save Setup"
 msgstr "Ñîõðàíåíèå Ã­Ã Ã±Ã²Ã°Ã®Ã¥Ãª"
 
 #, c-format
+msgid "E739: Cannot create directory: %s"
+msgstr "E739: Ãåâîçìîæíî Ã±Ã®Ã§Ã¤Ã Ã²Ã¼ ÃªÃ Ã²Ã Ã«Ã®Ã£: %s"
+
+#, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã² (!, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+msgstr "E189: \"%s\" Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã² (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
@@ -1096,6 +1413,9 @@ msgstr "E191: 
 msgid "E192: Recursive use of :normal too deep"
 msgstr "E192: Ã‘ëèøêîì Ã£Ã«Ã³Ã¡Ã®ÃªÃ Ã¿ Ã°Ã¥ÃªÃ³Ã°Ã±Ã¨Ã¿ Ã¯Ã°Ã¨ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¨ ÃªÃ®Ã¬Ã Ã­Ã¤Ã» :normal"
 
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< Ã­Ã¥ Ã¤Ã®Ã±Ã²Ã³Ã¯Ã­Ã® Ã¡Ã¥Ã§ Ã®Ã±Ã®Ã¡Ã¥Ã­Ã­Ã®Ã±Ã²Ã¨ +eval"
+
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: Ãåò Ã±Ã®Ã±Ã¥Ã¤Ã­Ã¥Ã£Ã® Ã¨Ã¬Ã¥Ã­Ã¨ Ã´Ã Ã©Ã«Ã  Ã¤Ã«Ã¿ Ã§Ã Ã¬Ã¥Ã­Ã» '#'"
 
@@ -1109,7 +1429,10 @@ msgid "E497: no autocommand match name to substitute for \"<amatch>\""
 msgstr "E497: Ãåò Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã­Ã®Ã£Ã® Ã¨Ã¬Ã¥Ã­Ã¨ Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã¨Ã¿ Ã¤Ã«Ã¿ Ã§Ã Ã¬Ã¥Ã­Ã» \"<amatch>\""
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: Ã­Ã¥Ã² Ã¨Ã¬Ã¥Ã­Ã¨ Ã´Ã Ã©Ã«Ã  :source Ã¤Ã«Ã¿ Ã§Ã Ã¬Ã¥Ã­Ã» \"<sfile>\""
+msgstr "E498: Ãåò Ã¨Ã¬Ã¥Ã­Ã¨ Ã´Ã Ã©Ã«Ã  :source Ã¤Ã«Ã¿ Ã§Ã Ã¬Ã¥Ã­Ã» \"<sfile>\""
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: Ãåò Ã­Ã®Ã¬Ã¥Ã°Ã  Ã±Ã²Ã°Ã®ÃªÃ¨ Ã¤Ã«Ã¿ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¿ \"<slnum>\""
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
@@ -1176,7 +1499,7 @@ msgid "Interrupt"
 msgstr "Ãðåðûâàíèå"
 
 msgid "E579: :if nesting too deep"
-msgstr "E579: Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã£Ã«Ã³Ã¡Ã®ÃªÃ® Ã¢Ã«Ã®Ã¦Ã¥Ã­Ã­Ã»Ã© :if"
+msgstr "E579: Ã‘ëèøêîì Ã£Ã«Ã³Ã¡Ã®ÃªÃ® Ã¢Ã«Ã®Ã¦Ã¥Ã­Ã­Ã»Ã© :if"
 
 msgid "E580: :endif without :if"
 msgstr "E580: :endif Ã¡Ã¥Ã§ :if"
@@ -1188,22 +1511,28 @@ msgid "E582: :elseif without :if"
 msgstr "E582: :elseif Ã¡Ã¥Ã§ :if"
 
 msgid "E583: multiple :else"
-msgstr "E583: Ã®Ã¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã® Ã­Ã¥Ã±ÃªÃ®Ã«Ã¼ÃªÃ® :else"
+msgstr "E583: ÃŽÃ¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã® Ã­Ã¥Ã±ÃªÃ®Ã«Ã¼ÃªÃ® :else"
 
 msgid "E584: :elseif after :else"
 msgstr "E584: :elseif Ã¯Ã®Ã±Ã«Ã¥ :else"
 
-msgid "E585: :while nesting too deep"
-msgstr "E585: Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã£Ã«Ã³Ã¡Ã®ÃªÃ® Ã¢Ã«Ã®Ã¦Ã¥Ã­Ã­Ã»Ã© :while"
+msgid "E585: :while/:for nesting too deep"
+msgstr "E585: Ã‘ëèøêîì Ã£Ã«Ã³Ã¡Ã®ÃªÃ®Ã¥ Ã¢Ã«Ã®Ã¦Ã¥Ã­Ã¨Ã¥ :while Ã¨Ã«Ã¨ :for"
 
-msgid "E586: :continue without :while"
-msgstr "E586: :continue Ã¡Ã¥Ã§ :while"
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :continue Ã¡Ã¥Ã§ :while Ã¨Ã«Ã¨ :for"
 
-msgid "E587: :break without :while"
-msgstr "E587: :break Ã¡Ã¥Ã§ :while"
+msgid "E587: :break without :while or :for"
+msgstr "E587: :break Ã¡Ã¥Ã§ :while Ã¨Ã«Ã¨ :for"
+
+msgid "E732: Using :endfor with :while"
+msgstr "E732: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ :endfor Ã± :while"
+
+msgid "E733: Using :endwhile with :for"
+msgstr "E733: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ :endwhile Ã± :for"
 
 msgid "E601: :try nesting too deep"
-msgstr "E601: Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã£Ã«Ã³Ã¡Ã®ÃªÃ® Ã¢Ã«Ã®Ã¦Ã¥Ã­Ã­Ã»Ã© :try"
+msgstr "E601: Ã‘ëèøêîì Ã£Ã«Ã³Ã¡Ã®ÃªÃ® Ã¢Ã«Ã®Ã¦Ã¥Ã­Ã­Ã»Ã© :try"
 
 msgid "E603: :catch without :try"
 msgstr "E603: :catch Ã¡Ã¥Ã§ :try"
@@ -1218,13 +1547,19 @@ msgstr "E606: :finally 
 
 #. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
-msgstr "E607: Ã®Ã¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã® Ã­Ã¥Ã±ÃªÃ®Ã«Ã¼ÃªÃ® :finally"
+msgstr "E607: ÃŽÃ¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã® Ã­Ã¥Ã±ÃªÃ®Ã«Ã¼ÃªÃ® :finally"
 
 msgid "E602: :endtry without :try"
 msgstr "E602: :endtry Ã¡Ã¥Ã§ :try"
 
 msgid "E193: :endfunction not inside a function"
-msgstr "E193: ÃªÃ®Ã¬Ã Ã­Ã¤Ã  :endfunction Ã¬Ã®Ã¦Ã¥Ã² Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼Ã±Ã¿ Ã²Ã®Ã«Ã¼ÃªÃ® Ã¢Ã­Ã³Ã²Ã°Ã¨ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨"
+msgstr "E193: ÃŠÃ®Ã¬Ã Ã­Ã¤Ã  :endfunction Ã¬Ã®Ã¦Ã¥Ã² Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼Ã±Ã¿ Ã²Ã®Ã«Ã¼ÃªÃ® Ã¢Ã­Ã³Ã²Ã°Ã¨ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨"
+
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: Ã‘åé÷àñ Ã­Ã¥ Ã¤Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã²Ã±Ã¿ Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã¤Ã°Ã³Ã£Ã®Ã£Ã® Ã¡Ã³Ã´Ã¥Ã°Ã "
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: Ã‘åé÷àñ Ã­Ã¥ Ã¤Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã²Ã±Ã¿ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¥ Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¨ Ã® Ã¡Ã³Ã´Ã¥Ã°Ã¥"
 
 msgid "tagname"
 msgstr "èìÿ Ã¬Ã¥Ã²ÃªÃ¨"
@@ -1261,6 +1596,9 @@ msgstr "E198: cmd_pchar 
 msgid "E199: Active window or buffer deleted"
 msgstr "E199: Ã“äàëåíî Ã ÃªÃ²Ã¨Ã¢Ã­Ã®Ã¥ Ã®ÃªÃ­Ã® Ã¨Ã«Ã¨ Ã¡Ã³Ã´Ã¥Ã°"
 
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: Ã€Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã» Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã«Ã¨ Ã¡Ã³Ã´Ã¥Ã° Ã¨Ã«Ã¨ Ã¨Ã¬Ã¿ Ã¡Ã³Ã´Ã¥Ã°Ã "
+
 msgid "Illegal file name"
 msgstr "Ãåäîïóñòèìîå Ã¨Ã¬Ã¿ Ã´Ã Ã©Ã«Ã "
 
@@ -1270,9 +1608,18 @@ msgstr "
 msgid "is not a file"
 msgstr "íå Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã´Ã Ã©Ã«Ã®Ã¬"
 
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr "ÿâëÿåòñÿ Ã³Ã±Ã²Ã°Ã®Ã©Ã±Ã²Ã¢Ã®Ã¬ (îòêëþ÷åíî Ã¯Ã°Ã¨ Ã®Ã¯Ã¶Ã¨Ã¨ 'opendevice')"
+
 msgid "[New File]"
 msgstr "[Ãîâûé Ã´Ã Ã©Ã«]"
 
+msgid "[New DIRECTORY]"
+msgstr "[Ãîâûé ÃŠÃ€Ã’ÀËÎÃ]"
+
+msgid "[File too big]"
+msgstr "[Ôàéë Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¡Ã®Ã«Ã¼Ã¸Ã®Ã©]"
+
 msgid "[Permission Denied]"
 msgstr "[Äîñòóï Ã§Ã Ã¯Ã°Ã¥Ã¹Â¸Ã­]"
 
@@ -1280,13 +1627,13 @@ msgid "E200: *ReadPre autocommands made the file unreadable"
 msgstr "E200: Ã‚ Ã°Ã¥Ã§Ã³Ã«Ã¼Ã²Ã Ã²Ã¥ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¿ Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤ *ReadPre Ã´Ã Ã©Ã« Ã±Ã²Ã Ã« Ã­Ã¥Ã·Ã¨Ã²Ã Ã¥Ã¬Ã»Ã¬"
 
 msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã» *ReadPre Ã­Ã¥ Ã¤Ã®Ã«Ã¦Ã­Ã» Ã¨Ã§Ã¬Ã¥Ã­Ã¿Ã²Ã¼ Ã ÃªÃ²Ã¨Ã¢Ã­Ã»Ã© Ã¡Ã³Ã´Ã¥Ã°"
+msgstr "E201: Ã€Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã» *ReadPre Ã­Ã¥ Ã¤Ã®Ã«Ã¦Ã­Ã» Ã¨Ã§Ã¬Ã¥Ã­Ã¿Ã²Ã¼ Ã ÃªÃ²Ã¨Ã¢Ã­Ã»Ã© Ã¡Ã³Ã´Ã¥Ã°"
 
 msgid "Vim: Reading from stdin...\n"
-msgstr "Vim: Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¿Ã¥Ã²Ã±Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¥ Ã¨Ã§ Ã±Ã²Ã Ã­Ã¤Ã Ã°Ã²Ã­Ã®Ã£Ã® Ã¯Ã®Ã²Ã®ÃªÃ  Ã¢Ã¢Ã®Ã¤Ã  stdin...\n"
+msgstr "Vim: Ã—òåíèå Ã¨Ã§ Ã±Ã²Ã Ã­Ã¤Ã Ã°Ã²Ã­Ã®Ã£Ã® Ã¯Ã®Ã²Ã®ÃªÃ  Ã¢Ã¢Ã®Ã¤Ã  stdin...\n"
 
 msgid "Reading from stdin..."
-msgstr "Âûïîëíÿåòñÿ Ã·Ã²Ã¥Ã­Ã¨Ã¥ Ã¨Ã§ Ã±Ã²Ã Ã­Ã¤Ã Ã°Ã²Ã­Ã®Ã£Ã® Ã¯Ã®Ã²Ã®ÃªÃ  Ã¢Ã¢Ã®Ã¤Ã  stdin..."
+msgstr "×òåíèå Ã¨Ã§ Ã±Ã²Ã Ã­Ã¤Ã Ã°Ã²Ã­Ã®Ã£Ã® Ã¯Ã®Ã²Ã®ÃªÃ  Ã¢Ã¢Ã®Ã¤Ã  stdin..."
 
 #. Re-opening the original file failed!
 msgid "E202: Conversion made file unreadable!"
@@ -1301,15 +1648,12 @@ msgstr "[fifo]"
 msgid "[socket]"
 msgstr "[ãíåçäî]"
 
-msgid "[RO]"
-msgstr "[RO]"
+msgid "[character special]"
+msgstr "[ñïåöèàëüíûé Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã¼Ã­Ã»Ã©]"
 
 msgid "[CR missing]"
 msgstr "[ïðîïóùåíû Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã» CR]"
 
-msgid "[NL found]"
-msgstr "[Îáíàðóæåíû Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã» NL]"
-
 msgid "[long lines split]"
 msgstr "[äëèííûå Ã±Ã²Ã°Ã®ÃªÃ¨ Ã°Ã Ã§Ã¡Ã¨Ã²Ã»]"
 
@@ -1319,11 +1663,15 @@ msgstr "[
 msgid "[converted]"
 msgstr "[ïåðåêîäèðîâàíî]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[çàøèôðîâàíî]"
 
-msgid "[CONVERSION ERROR]"
-msgstr "[ÎØÈÃÊÀ ÃÃÃ…ÃŽÃÃÀÇÎÂÀÃÈß]"
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[ÎØÈÃÊÀ ÃÃÃ…ÃŽÃÃÀÇÎÂÀÃÈߠâ Ã±Ã²Ã°Ã®ÃªÃ¥ %ld]"
 
 #, c-format
 msgid "[ILLEGAL BYTE in line %ld]"
@@ -1341,6 +1689,12 @@ msgstr "
 msgid "can't read output of 'charconvert'"
 msgstr "íåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã¢Ã»Ã¢Ã®Ã¤ 'charconvert'"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: Ã”àéë Ã§Ã Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­ Ã­Ã¥Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã­Ã»Ã¬ Ã¬Ã¥Ã²Ã®Ã¤Ã®Ã¬"
+
+msgid "E676: No matching autocommands for acwrite buffer"
+msgstr "E676: Ãåò Ã¯Ã®Ã¤ÃµÃ®Ã¤Ã¿Ã¹Ã¨Ãµ Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤ Ã¤Ã«Ã¿ Ã¡Ã³Ã´Ã¥Ã°Ã  acwrite"
+
 msgid "E203: Autocommands deleted or unloaded buffer to be written"
 msgstr ""
 "E203: Ãóôåð, ÃªÃ®Ã²Ã®Ã°Ã»Ã© Ã²Ã°Ã¥Ã¡Ã®Ã¢Ã Ã«Ã®Ã±Ã¼ Ã§Ã Ã¯Ã¨Ã±Ã Ã²Ã¼, Ã³Ã¤Ã Ã«Â¸Ã­ Ã¨Ã«Ã¨ Ã¢Ã»Ã£Ã°Ã³Ã¦Ã¥Ã­ Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã®Ã©"
@@ -1357,32 +1711,41 @@ msgstr "
 msgid "is not a file or writable device"
 msgstr "íå Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã´Ã Ã©Ã«Ã®Ã¬ Ã¨Ã«Ã¨ Ã³Ã±Ã²Ã°Ã®Ã©Ã±Ã²Ã¢Ã®Ã¬, Ã¤Ã®Ã±Ã²Ã³Ã¯Ã­Ã»Ã¬ Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã¨"
 
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "çàïèñü Ã¢ Ã³Ã±Ã²Ã°Ã®Ã©Ã±Ã²Ã¢Ã® Ã®Ã²ÃªÃ«Ã¾Ã·Ã¥Ã­Ã  Ã¯Ã°Ã¨ Ã®Ã¯Ã¶Ã¨Ã¨ 'opendevice'"
+
 msgid "is read-only (add ! to override)"
-msgstr "îòêðûò Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿ (!, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+msgstr "îòêðûò Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿ (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: Ã‡Ã Ã¯Ã¨Ã±Ã¼ Ã¢ Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã­Ã»Ã© Ã´Ã Ã©Ã« Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã  (!, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+msgstr ""
+"E506: Ã‡Ã Ã¯Ã¨Ã±Ã¼ Ã¢ Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã­Ã»Ã© Ã´Ã Ã©Ã« Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã  (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã§Ã ÃªÃ°Ã»Ã²Ã¨Ã¿ Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã­Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã  (!, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+msgstr ""
+"E507: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã§Ã ÃªÃ°Ã»Ã²Ã¨Ã¿ Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã­Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã  (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: Ãåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã­Ã»Ã© Ã´Ã Ã©Ã« (!, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+msgstr ""
+"E508: Ãåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã­Ã»Ã© Ã´Ã Ã©Ã« (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: Ãåâîçìîæíî Ã±Ã®Ã§Ã¤Ã Ã²Ã¼ Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã­Ã»Ã© Ã´Ã Ã©Ã« (!, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+msgstr ""
+"E509: Ãåâîçìîæíî Ã±Ã®Ã§Ã¤Ã Ã²Ã¼ Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã­Ã»Ã© Ã´Ã Ã©Ã« (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: Ãåâîçìîæíî Ã±Ã®Ã§Ã¤Ã Ã²Ã¼ Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã­Ã»Ã© Ã´Ã Ã©Ã« (!, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+msgstr ""
+"E510: Ãåâîçìîæíî Ã±Ã®Ã§Ã¤Ã Ã²Ã¼ Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã­Ã»Ã© Ã´Ã Ã©Ã« (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 msgid "E460: The resource fork would be lost (add ! to override)"
-msgstr "E460: Ã‚èëêà Ã°Ã¥Ã±Ã³Ã°Ã±Ã  Ã¡Ã³Ã¤Ã¥Ã² Ã¯Ã®Ã²Ã¥Ã°Ã¿Ã­Ã  (!, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+msgstr "E460: Ã‚åòâü Ã°Ã¥Ã±Ã³Ã°Ã±Ã  Ã¡Ã³Ã¤Ã¥Ã² Ã¯Ã®Ã²Ã¥Ã°Ã¿Ã­Ã  (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 msgid "E214: Can't find temp file for writing"
 msgstr "E214: Ã‚ðåìåííûé Ã´Ã Ã©Ã« Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã¨ Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­"
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: Ãåðåêîäèðîâêà Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã  (! Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã¨ Ã¡Ã¥Ã§ Ã¯Ã¥Ã°Ã¥ÃªÃ®Ã¤Ã¨Ã°Ã®Ã¢ÃªÃ¨)"
+msgstr ""
+"E213: Ãåðåêîäèðîâêà Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã  (äîáàâüòå ! Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã¨ Ã¡Ã¥Ã§ Ã¯Ã¥Ã°Ã¥ÃªÃ®Ã¤Ã¨Ã°Ã®Ã¢ÃªÃ¨)"
 
 msgid "E166: Can't open linked file for writing"
 msgstr "E166: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã±Ã¢Ã¿Ã§Ã Ã­Ã­Ã»Ã© Ã´Ã Ã©Ã« Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã¨"
@@ -1396,15 +1759,29 @@ msgstr "E667: 
 msgid "E512: Close failed"
 msgstr "E512: ÃŽÃ¯Ã¥Ã°Ã Ã¶Ã¨Ã¿ Ã§Ã ÃªÃ°Ã»Ã²Ã¨Ã¿ Ã­Ã¥ Ã³Ã¤Ã Ã«Ã Ã±Ã¼"
 
-msgid "E513: write error, conversion failed"
-msgstr "E513: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã§Ã Ã¯Ã¨Ã±Ã¨, Ã¯Ã°Ã¥Ã®Ã¡Ã°Ã Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼"
+msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+msgstr ""
+"E513: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã§Ã Ã¯Ã¨Ã±Ã¨, Ã¯Ã°Ã¥Ã®Ã¡Ã°Ã Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ (î÷èñòèòå 'fenc', Ã·Ã²Ã®Ã¡Ã» "
+"îáîéòè)"
+
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã§Ã Ã¯Ã¨Ã±Ã¨, Ã¯Ã°Ã¥Ã®Ã¡Ã°Ã Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã­Ã  Ã±Ã²Ã°Ã®ÃªÃ¥ %ld (î÷èñòèòå "
+"'fenc', Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨)"
 
 msgid "E514: write error (file system full?)"
-msgstr "E514: Ã®Ã¸Ã¨Ã¡ÃªÃ  Ã§Ã Ã¯Ã¨Ã±Ã¨ (íåò Ã±Ã¢Ã®Ã¡Ã®Ã¤Ã­Ã®Ã£Ã® Ã¬Ã¥Ã±Ã²Ã ?)"
+msgstr "E514: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã§Ã Ã¯Ã¨Ã±Ã¨ (íåò Ã±Ã¢Ã®Ã¡Ã®Ã¤Ã­Ã®Ã£Ã® Ã¬Ã¥Ã±Ã²Ã ?)"
 
 msgid " CONVERSION ERROR"
 msgstr " ÃŽÃ˜ÃˆÃÊÀ ÃÃÃ…ÃŽÃÃÀÇÎÂÀÃÈß"
 
+#, c-format
+msgid " in line %ld;"
+msgstr " Ã­Ã  Ã±Ã²Ã°Ã®ÃªÃ¥ %ld;"
+
 msgid "[Device]"
 msgstr "[Óñòðîéñòâî]"
 
@@ -1412,13 +1789,13 @@ msgid "[New]"
 msgstr "[Ãîâûé]"
 
 msgid " [a]"
-msgstr " [a]"
+msgstr " [ä]"
 
 msgid " appended"
 msgstr " Ã¤Ã®Ã¡Ã Ã¢Ã«Ã¥Ã­Ã®"
 
 msgid " [w]"
-msgstr " [w]"
+msgstr " [ç]"
 
 msgid " written"
 msgstr " Ã§Ã Ã¯Ã¨Ã±Ã Ã­Ã®"
@@ -1472,6 +1849,11 @@ msgid "1 character"
 msgstr "1 Ã±Ã¨Ã¬Ã¢Ã®Ã«"
 
 #, c-format
+msgid "%lld characters"
+msgstr "ñèìâîëîâ: %lld"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "ñèìâîëîâ: %ld"
 
@@ -1506,8 +1888,8 @@ msgid "E246: FileChangedShell autocommand deleted buffer"
 msgstr "E246: Ãóôåð Ã³Ã¤Ã Ã«Â¸Ã­ Ã¯Ã°Ã¨ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¨ Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã» FileChangedShell"
 
 #, c-format
-msgid "E211: Warning: File \"%s\" no longer available"
-msgstr "E211: Ãðåäóïðåæäåíèå: Ã´Ã Ã©Ã« \"%s\" Ã¡Ã®Ã«Ã¼Ã¸Ã¥ Ã­Ã¥ Ã¤Ã®Ã±Ã²Ã³Ã¯Ã¥Ã­"
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211: Ã”àéë \"%s\" Ã¡Ã®Ã«Ã¼Ã¸Ã¥ Ã­Ã¥ Ã¤Ã®Ã±Ã²Ã³Ã¯Ã¥Ã­"
 
 #, c-format
 msgid ""
@@ -1517,25 +1899,31 @@ msgstr ""
 "W12: Ãðåäóïðåæäåíèå: Ã´Ã Ã©Ã« \"%s\" Ã¨ Ã¡Ã³Ã´Ã¥Ã° Vim Ã¡Ã»Ã«Ã¨ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã» Ã­Ã¥Ã§Ã Ã¢Ã¨Ã±Ã¨Ã¬Ã® Ã¤Ã°Ã³Ã£ "
 "îò Ã¤Ã°Ã³Ã£Ã "
 
+msgid "See \":help W12\" for more info."
+msgstr "Ñì. \":help W12\" Ã¤Ã«Ã¿ Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã®Ã© Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¨."
+
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
 msgstr ""
 "W11: Ãðåäóïðåæäåíèå: Ã´Ã Ã©Ã« \"%s\" Ã¡Ã»Ã« Ã¨Ã§Ã¬Ã¥Ã­Â¸Ã­ Ã¯Ã®Ã±Ã«Ã¥ Ã­Ã Ã·Ã Ã«Ã  Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿"
 
+msgid "See \":help W11\" for more info."
+msgstr "Ñì. \":help W11\" Ã¤Ã«Ã¿ Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã®Ã© Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¨."
+
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
 "W16: Ãðåäóïðåæäåíèå: Ã°Ã¥Ã¦Ã¨Ã¬ Ã¤Ã®Ã±Ã²Ã³Ã¯Ã  Ãª Ã´Ã Ã©Ã«Ã³ \"%s\" Ã¡Ã»Ã« Ã¨Ã§Ã¬Ã¥Ã­Â¸Ã­ Ã¯Ã®Ã±Ã«Ã¥ Ã­Ã Ã·Ã Ã«Ã  "
 "ðåäàêòèðîâàíèÿ"
 
+msgid "See \":help W16\" for more info."
+msgstr "Ñì. \":help W16\" Ã¤Ã«Ã¿ Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã®Ã© Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¨."
+
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
 msgstr ""
 "W13: Ãðåäóïðåæäåíèå: Ã´Ã Ã©Ã« \"%s\" Ã¡Ã»Ã« Ã±Ã®Ã§Ã¤Ã Ã­ Ã¯Ã®Ã±Ã«Ã¥ Ã­Ã Ã·Ã Ã«Ã  Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿"
 
-msgid "See \":help W11\" for more info."
-msgstr "Ñì. Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã³Ã¾ Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¾ Ã¢ \":help W11\"."
-
 msgid "Warning"
 msgstr "Ãðåäóïðåæäåíèå"
 
@@ -1544,7 +1932,7 @@ msgid ""
 "&Load File"
 msgstr ""
 "&OK\n"
-"&Çàãðóçèòü Ã´Ã Ã©Ã«"
+"&Çàãðóçèòü Ã´Ã Ã©Ã«"
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
@@ -1557,6 +1945,10 @@ msgstr "E321: 
 msgid "--Deleted--"
 msgstr "--Óäàëåíî--"
 
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "àâòî-óäàëåíèå Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã»: %s <áóôôåð=%d>"
+
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
@@ -1582,6 +1974,10 @@ msgstr ""
 "\n"
 "--- Ã€Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã» ---"
 
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <buffer=%d>: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã»Ã© Ã­Ã®Ã¬Ã¥Ã° Ã¡Ã³Ã´Ã¥Ã°Ã  "
+
 msgid "E217: Can't execute autocommands for ALL events"
 msgstr "E217: Ãåâîçìîæíî Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã» Ã¤Ã«Ã¿ Ã‚ÑÅՠñîáûòèé"
 
@@ -1599,7 +1995,6 @@ msgstr "%s 
 msgid "Executing %s"
 msgstr "Âûïîëíåíèå %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "autocommand %s"
 msgstr "àâòîêîìàíäà %s"
@@ -1621,27 +2016,31 @@ msgid "E351: Cannot delete fold with current 'foldmethod'"
 msgstr ""
 "E351: Ã‘êëàäêà Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã¡Ã»Ã²Ã¼ Ã³Ã¤Ã Ã«Ã¥Ã­Ã  Ã± Ã²Ã¥ÃªÃ³Ã¹Ã¨Ã¬ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥Ã¬ Ã®Ã¯Ã¶Ã¨Ã¨ 'foldmethod'"
 
+#, c-format
+msgid "+--%3ld lines folded "
+msgstr "+--%3ld Ã±Ã²Ã°Ã®Ãª Ã¢ Ã±ÃªÃ«Ã Ã¤ÃªÃ¥"
+
 msgid "E222: Add to read buffer"
 msgstr "E222: Ã„îáàâëåíèå Ã¢ Ã¡Ã³Ã´Ã¥Ã° Ã·Ã²Ã¥Ã­Ã¨Ã¿"
 
 msgid "E223: recursive mapping"
-msgstr "E223: Ã°Ã¥ÃªÃ³Ã°Ã±Ã¨Ã¢Ã­Ã Ã¿ Ã¯Ã°Ã¨Ã¢Ã¿Ã§ÃªÃ "
+msgstr "E223: Ãåêóðñèâíàÿ Ã¯Ã°Ã¨Ã¢Ã¿Ã§ÃªÃ "
 
 #, c-format
 msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: Ã³Ã¦Ã¥ Ã¥Ã±Ã²Ã¼ Ã£Ã«Ã®Ã¡Ã Ã«Ã¼Ã­Ã®Ã¥ Ã±Ã®ÃªÃ°Ã Ã¹Ã¥Ã­Ã¨Ã¥ Ã¤Ã«Ã¿ %s"
+msgstr "E224: Ã“æå Ã¥Ã±Ã²Ã¼ Ã£Ã«Ã®Ã¡Ã Ã«Ã¼Ã­Ã®Ã¥ Ã±Ã®ÃªÃ°Ã Ã¹Ã¥Ã­Ã¨Ã¥ Ã¤Ã«Ã¿ %s"
 
 #, c-format
 msgid "E225: global mapping already exists for %s"
-msgstr "E225: Ã³Ã¦Ã¥ Ã¥Ã±Ã²Ã¼ Ã£Ã«Ã®Ã¡Ã Ã«Ã¼Ã­Ã Ã¿ Ã¯Ã°Ã¨Ã¢Ã¿Ã§ÃªÃ  Ã¤Ã«Ã¿ %s"
+msgstr "E225: Ã“æå Ã¥Ã±Ã²Ã¼ Ã£Ã«Ã®Ã¡Ã Ã«Ã¼Ã­Ã Ã¿ Ã¯Ã°Ã¨Ã¢Ã¿Ã§ÃªÃ  Ã¤Ã«Ã¿ %s"
 
 #, c-format
 msgid "E226: abbreviation already exists for %s"
-msgstr "E226: Ã³Ã¦Ã¥ Ã¥Ã±Ã²Ã¼ Ã±Ã®ÃªÃ°Ã Ã¹Ã¥Ã­Ã¨Ã¥ Ã¤Ã«Ã¿ %s"
+msgstr "E226: Ã“æå Ã¥Ã±Ã²Ã¼ Ã±Ã®ÃªÃ°Ã Ã¹Ã¥Ã­Ã¨Ã¥ Ã¤Ã«Ã¿ %s"
 
 #, c-format
 msgid "E227: mapping already exists for %s"
-msgstr "E227: Ã³Ã¦Ã¥ Ã¥Ã±Ã²Ã¼ Ã¯Ã°Ã¨Ã¢Ã¿Ã§ÃªÃ  Ã¤Ã«Ã¿ %s"
+msgstr "E227: Ã“æå Ã¥Ã±Ã²Ã¼ Ã¯Ã°Ã¨Ã¢Ã¿Ã§ÃªÃ  Ã¤Ã«Ã¿ %s"
 
 msgid "No abbreviation found"
 msgstr "Ñîêðàùåíèÿ Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã»"
@@ -1652,6 +2051,12 @@ msgstr "
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: Ã­Ã¥Ã¤Ã®Ã¯Ã³Ã±Ã²Ã¨Ã¬Ã»Ã© Ã°Ã¥Ã¦Ã¨Ã¬"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Ãåâîçìîæíî Ã±Ã®Ã§Ã¤Ã Ã²Ã¼ Ã­Ã®Ã¢Ã»Ã© Ã¯Ã°Ã®Ã¶Ã¥Ã±Ã± Ã¤Ã«Ã¿ Ã£Ã°Ã Ã´. Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã "
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Ãðîöåññó-ïîòîìêó Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã§Ã Ã¯Ã³Ã±Ã²Ã¨Ã²Ã¼ Ã£Ã°Ã Ã´. Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Ãåâîçìîæíî Ã¯Ã¥Ã°Ã¥Ã©Ã²Ã¨ Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ®Ã£Ã® Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã "
 
@@ -1664,15 +2069,18 @@ msgstr ""
 "E665: Ãåâîçìîæíî Ã¯Ã¥Ã°Ã¥Ã©Ã²Ã¨ Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬ Ã£Ã°Ã Ã´. Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã , Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã® Ã§Ã Ã¤Ã Ã­Ã» Ã¸Ã°Ã¨Ã´Ã²Ã»"
 
 msgid "E231: 'guifontwide' invalid"
-msgstr "E231: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã®Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨ 'guifontwide'"
+msgstr "E231: Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨ 'guifontwide'"
 
 msgid "E599: Value of 'imactivatekey' is invalid"
-msgstr "E599: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã®Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨ 'imactivatekey'"
+msgstr "E599: Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨ 'imactivatekey'"
 
 #, c-format
 msgid "E254: Cannot allocate color %s"
 msgstr "E254: Ãåâîçìîæíî Ã­Ã Ã§Ã­Ã Ã·Ã¨Ã²Ã¼ Ã¶Ã¢Ã¥Ã² %s"
 
+msgid "No match at cursor, finding next"
+msgstr "Ãåò Ã±Ã®Ã¢Ã¯Ã Ã¤Ã¥Ã­Ã¨Ã¿ Ã¯Ã®Ã¤ ÃªÃ³Ã°Ã±Ã®Ã°Ã®Ã¬, Ã¯Ã®Ã¨Ã±Ãª Ã±Ã«Ã¥Ã¤Ã³Ã¾Ã¹Ã¥Ã£Ã®"
+
 msgid "<cannot open> "
 msgstr "<íåëüçÿ Ã®Ã²ÃªÃ°Ã»Ã²Ã¼> "
 
@@ -1706,9 +2114,6 @@ msgstr ""
 "E232: \"Ãóçûðü\" Ã¤Ã«Ã¿ Ã¢Ã»Ã·Ã¨Ã±Ã«Ã¥Ã­Ã¨Ã©, Ã¢ÃªÃ«Ã¾Ã·Ã Ã¾Ã¹Ã¨Ã© Ã¨ Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã¥, Ã¨ Ã®Ã¡Ã°Ã Ã²Ã­Ã»Ã© Ã¢Ã»Ã§Ã®Ã¢, "
 "íå Ã¬Ã®Ã¦Ã¥Ã² Ã¡Ã»Ã²Ã¼ Ã±Ã®Ã§Ã¤Ã Ã­"
 
-msgid "Vim dialog..."
-msgstr "Äèàëîãîâîå Ã®ÃªÃ­Ã® Vim..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -1722,10 +2127,10 @@ msgid "Input _Methods"
 msgstr "Ìåòîäû Ã‚âîäà"
 
 msgid "VIM - Search and Replace..."
-msgstr "VIM - Ãîèñê Ã¨ Ã§Ã Ã¬Ã¥Ã­Ã ..."
+msgstr "VIM \97 Ãîèñê Ã¨ Ã§Ã Ã¬Ã¥Ã­Ã ..."
 
 msgid "VIM - Search..."
-msgstr "VIM - Ãîèñê..."
+msgstr "VIM \97 Ãîèñê..."
 
 msgid "Find what:"
 msgstr "×òî Ã¨Ã¹Ã¥Ã¬:"
@@ -1751,60 +2156,70 @@ msgstr "
 msgid "Down"
 msgstr "Âíèç"
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr "Ãàéòè Ã±Ã«Ã¥Ã¤Ã³Ã¾Ã¹Ã¥Ã¥"
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "Çàìåíà"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr "Çàìåíèòü Ã¢Ã±Ã¥"
 
 msgid "Vim: Received \"die\" request from session manager\n"
 msgstr "Vim: Ãîëó÷åí Ã§Ã Ã¯Ã°Ã®Ã± Ã­Ã  Ã¯Ã°Ã¥ÃªÃ°Ã Ã¹Ã¥Ã­Ã¨Ã¥ Ã°Ã Ã¡Ã®Ã²Ã» Ã®Ã² Ã¤Ã¨Ã±Ã¯Ã¥Ã²Ã·Ã¥Ã°Ã  Ã±Ã¥Ã Ã­Ã±Ã®Ã¢\n"
 
+msgid "Close"
+msgstr "Çàêðûòü"
+
+msgid "New tab"
+msgstr "Ãîâàÿ Ã¢ÃªÃ«Ã Ã¤ÃªÃ "
+
+msgid "Open Tab..."
+msgstr "Îòêðûòü Ã¢ÃªÃ«Ã Ã¤ÃªÃ³..."
+
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "Vim: ÃŽÃ±Ã­Ã®Ã¢Ã­Ã®Ã¥ Ã®ÃªÃ­Ã® Ã¡Ã»Ã«Ã® Ã­Ã¥Ã®Ã¦Ã¨Ã¤Ã Ã­Ã­Ã® Ã§Ã ÃªÃ°Ã»Ã²Ã®\n"
 
-msgid "Font Selection"
-msgstr "Âûáîð Ã¸Ã°Ã¨Ã´Ã²Ã "
+msgid "&Filter"
+msgstr "&Ôèëüòð"
 
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "Âìåñòî Ã¯Ã³Ã±Ã²Ã®Ã£Ã® Ã¢Ã»Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¿ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿ CUT_BUFFER0"
-
-msgid "Filter"
-msgstr "Ôèëüòð"
+msgid "&Cancel"
+msgstr "ÃŽ&òìåíà"
 
 msgid "Directories"
 msgstr "Êàòàëîãè"
 
-msgid "Help"
-msgstr "Ñïðàâêà"
+msgid "Filter"
+msgstr "Ôèëüòð"
+
+msgid "&Help"
+msgstr "&Ñïðàâêà"
 
 msgid "Files"
 msgstr "Ôàéëû"
 
+msgid "&OK"
+msgstr "&Äà"
+
 msgid "Selection"
 msgstr "Âûäåëåíèå"
 
-msgid "Undo"
-msgstr "Îòìåíà"
+msgid "Find &Next"
+msgstr "Ãàéòè &ñëåäóþùåå"
 
-#, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Ãåâîçìîæíî Ã§Ã Ã£Ã°Ã³Ã§Ã¨Ã²Ã¼ Ã¸Ã°Ã¨Ã´Ã² Zap '%s'"
+msgid "&Replace"
+msgstr "Çà&ìåíà"
 
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Ãåâîçìîæíî Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ Ã¸Ã°Ã¨Ã´Ã² %s"
+msgid "Replace &All"
+msgstr "Çàìåíèòü &âñå"
 
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Îòïðàâêà Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã¿ Ã¤Ã«Ã¿ Ã³Ã­Ã¨Ã·Ã²Ã®Ã¦Ã¥Ã­Ã¨Ã¿ Ã¯Ã°Ã®Ã¶Ã¥Ã±Ã±Ã -ïîòîìêà.\n"
+msgid "&Undo"
+msgstr "ÃŽ&òìåíà"
 
+#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: ÃŽÃªÃ­Ã® Ã± Ã§Ã Ã£Ã®Ã«Ã®Ã¢ÃªÃ®Ã¬ \"%s\" Ã­Ã¥ Ã®Ã¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã®"
 
@@ -1815,20 +2230,34 @@ msgstr "E243: 
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã®ÃªÃ­Ã® Ã¢Ã­Ã³Ã²Ã°Ã¨ Ã¯Ã°Ã¨Ã«Ã®Ã¦Ã¥Ã­Ã¨Ã¿ MDI"
 
+msgid "Close tab"
+msgstr "Çàêðûòü Ã¢ÃªÃ«Ã Ã¤ÃªÃ³"
+
+msgid "Open tab..."
+msgstr "Îòêðûòü Ã¢ÃªÃ«Ã Ã¤ÃªÃ³..."
+
 msgid "Find string (use '\\\\' to find  a '\\')"
 msgstr "Ãîèñê Ã±Ã²Ã°Ã®ÃªÃ¨ (èñïîëüçóéòå '\\\\' Ã¤Ã«Ã¿ Ã¯Ã®Ã¨Ã±ÃªÃ  '\\')"
 
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
 msgstr "Ãîèñê Ã¨ Ã§Ã Ã¬Ã¥Ã­Ã  (èñïîëüçóéòå '\\\\' Ã¤Ã«Ã¿ Ã¯Ã®Ã¨Ã±ÃªÃ  '\\')"
 
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
+msgid "Not Used"
+msgstr "ÃÃ¥ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿"
+
+msgid "Directory\t*.nothing\n"
+msgstr "Êàòàëîã\t*.íè÷åãî\n"
+
 msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
 msgstr ""
-"Vim E458: Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¢Ã»Ã¤Ã¥Ã«Ã¨Ã²Ã¼ Ã§Ã Ã¯Ã¨Ã±Ã¼ Ã¢ Ã²Ã Ã¡Ã«Ã¨Ã¶Ã¥ Ã¶Ã¢Ã¥Ã²Ã , Ã­Ã¥ÃªÃ®Ã²Ã®Ã°Ã»Ã¥ Ã¶Ã¢Ã¥Ã²Ã Ã¬Ã®Ã£Ã³Ã² "
+"Vim E458: Ãåâîçìîæíî Ã¢Ã»Ã¤Ã¥Ã«Ã¨Ã²Ã¼ Ã§Ã Ã¯Ã¨Ã±Ã¼ Ã¢ Ã²Ã Ã¡Ã«Ã¨Ã¶Ã¥ Ã¶Ã¢Ã¥Ã²Ã , Ã­Ã¥ÃªÃ®Ã²Ã®Ã°Ã»Ã¥ Ã¶Ã¢Ã¥Ã²Ã  Ã¬Ã®Ã£Ã³Ã² "
 "îòîáðàæàòüñÿ Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã®"
 
 #, c-format
 msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-msgstr "E250: Ã¢ Ã­Ã Ã¡Ã®Ã°Ã¥ Ã¸Ã°Ã¨Ã´Ã²Ã®Ã¢ %s Ã®Ã²Ã±Ã³Ã²Ã±Ã²Ã¢Ã³Ã¾Ã² Ã¸Ã°Ã¨Ã´Ã²Ã» Ã¤Ã«Ã¿ Ã±Ã«Ã¥Ã¤Ã³Ã¾Ã¹Ã¨Ãµ ÃªÃ®Ã¤Ã¨Ã°Ã®Ã¢Ã®Ãª:"
+msgstr "E250: Ã‚ Ã­Ã Ã¡Ã®Ã°Ã¥ Ã¸Ã°Ã¨Ã´Ã²Ã®Ã¢ %s Ã®Ã²Ã±Ã³Ã²Ã±Ã²Ã¢Ã³Ã¾Ã² Ã¸Ã°Ã¨Ã´Ã²Ã» Ã¤Ã«Ã¿ Ã±Ã«Ã¥Ã¤Ã³Ã¾Ã¹Ã¨Ãµ ÃªÃ®Ã¤Ã¨Ã°Ã®Ã¢Ã®Ãª:"
 
 #, c-format
 msgid "E252: Fontset name: %s"
@@ -1839,141 +2268,282 @@ msgid "Font '%s' is not fixed-width"
 msgstr "Øðèôò '%s' Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã¬Ã®Ã­Ã®Ã¸Ã¨Ã°Ã¨Ã­Ã­Ã»Ã¬"
 
 #, c-format
-msgid "E253: Fontset name: %s\n"
-msgstr "E253: Ãàáîð Ã¸Ã°Ã¨Ã´Ã²Ã®Ã¢: %s\n"
+msgid "E253: Fontset name: %s"
+msgstr "E253: Ãàáîð Ã¸Ã°Ã¨Ã´Ã²Ã®Ã¢: %s"
 
 #, c-format
-msgid "Font0: %s\n"
-msgstr "Font0: %s\n"
+msgid "Font0: %s"
+msgstr "Font0: %s"
 
 #, c-format
-msgid "Font1: %s\n"
-msgstr "Font1: %s\n"
+msgid "Font1: %s"
+msgstr "Font1: %s"
 
 #, c-format
-msgid "Font%ld width is not twice that of font0\n"
-msgstr "Øèðèíà Ã¸Ã°Ã¨Ã´Ã²Ã  font%ld Ã¤Ã®Ã«Ã¦Ã­Ã  Ã¡Ã»Ã²Ã¼ Ã¢Ã¤Ã¢Ã®Ã¥ Ã¡Ã®Ã«Ã¼Ã¸Ã¥ Ã¸Ã¨Ã°Ã¨Ã­Ã» Ã¸Ã°Ã¨Ã´Ã²Ã  font0\n"
+msgid "Font%ld width is not twice that of font0"
+msgstr "Øèðèíà Ã¸Ã°Ã¨Ã´Ã²Ã  font%ld Ã¤Ã®Ã«Ã¦Ã­Ã  Ã¡Ã»Ã²Ã¼ Ã¢Ã¤Ã¢Ã®Ã¥ Ã¡Ã®Ã«Ã¼Ã¸Ã¥ Ã¸Ã¨Ã°Ã¨Ã­Ã» Ã¸Ã°Ã¨Ã´Ã²Ã  font0"
 
 #, c-format
-msgid "Font0 width: %ld\n"
-msgstr "Øèðèíà Ã¸Ã°Ã¨Ã´Ã²Ã  font0: %ld\n"
+msgid "Font0 width: %ld"
+msgstr "Øèðèíà Ã¸Ã°Ã¨Ã´Ã²Ã  font0: %ld"
 
 #, c-format
-msgid ""
-"Font1 width: %ld\n"
-"\n"
-msgstr ""
-"Øèðèíà Ã¸Ã°Ã¨Ã´Ã²Ã  font1: %ld\n"
-"\n"
-
-msgid "E256: Hangul automata ERROR"
-msgstr "E256: ÃŽÃ˜ÃˆÃÊÀ Ã Ã¢Ã²Ã®Ã¬Ã Ã²Ã¨ÃªÃ¨ Ã•Ã Ã­Ã£Ã»Ã«"
+msgid "Font1 width: %ld"
+msgstr "Øèðèíà Ã¸Ã°Ã¨Ã´Ã²Ã  font1: %ld"
 
-msgid "Add a new database"
-msgstr "Äîáàâèòü Ã­Ã®Ã¢Ã³Ã¾ Ã¡Ã Ã§Ã³ Ã¤Ã Ã­Ã­Ã»Ãµ"
+msgid "Invalid font specification"
+msgstr "Ãåïðàâèëüíîå Ã®Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¥ Ã¸Ã°Ã¨Ã´Ã²Ã "
 
-msgid "Query for a pattern"
-msgstr "Çàïðîñ Ã¯Ã® Ã¸Ã Ã¡Ã«Ã®Ã­Ã³"
+msgid "&Dismiss"
+msgstr "ÃŽ&òêëîíèòü"
 
-msgid "Show this message"
-msgstr "Ãîêàçàòü Ã½Ã²Ã® Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã¥"
+msgid "no specific match"
+msgstr "íåò Ã±Ã¯Ã¥Ã¶Ã¨Ã Ã«Ã¼Ã­Ã®Ã£Ã® Ã±Ã®Ã¢Ã¯Ã Ã¤Ã¥Ã­Ã¨Ã¿"
 
-msgid "Kill a connection"
-msgstr "Óáèòü Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¥"
+msgid "Vim - Font Selector"
+msgstr "Vim \97 Ã‚ûáîð Ã¸Ã°Ã¨Ã´Ã²Ã "
 
-msgid "Reinit all connections"
-msgstr "Çàíîâî Ã¨Ã­Ã¨Ã¶Ã¨Ã Ã«Ã¨Ã§Ã¨Ã°Ã®Ã¢Ã Ã²Ã¼ Ã¢Ã±Ã¥ Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¿"
+msgid "Name:"
+msgstr "Ãàçâàíèå:"
 
-msgid "Show connections"
-msgstr "Ãîêàçàòü Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¿"
+#. create toggle button
+msgid "Show size in Points"
+msgstr "Ãîêàçûâàòü Ã°Ã Ã§Ã¬Ã¥Ã° Ã¢ Ã¯Ã³Ã­ÃªÃ²Ã Ãµ"
 
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥: cs[cope] %s"
+msgid "Encoding:"
+msgstr "Êîäèðîâêà:"
 
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "Ãòà ÃªÃ®Ã¬Ã Ã­Ã¤Ã  cscope Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã² Ã°Ã Ã§Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¥ Ã®ÃªÃ­Ã .\n"
+msgid "Font:"
+msgstr "Øðèôò:"
 
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥: cstag <èìÿ>"
+msgid "Style:"
+msgstr "Ñòèëü:"
 
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: Ã¬Ã¥Ã²ÃªÃ  Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã "
+msgid "Size:"
+msgstr "Ãàçìåð:"
 
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: Ã®Ã¸Ã¨Ã¡ÃªÃ  stat(%s): %d"
+msgid "E256: Hangul automata ERROR"
+msgstr "E256: ÃŽÃ˜ÃˆÃÊÀ Ã Ã¢Ã²Ã®Ã¬Ã Ã²Ã¨ÃªÃ¨ Ã•Ã Ã­Ã£Ã»Ã«"
 
-msgid "E563: stat error"
-msgstr "E563: Ã®Ã¸Ã¨Ã¡ÃªÃ  stat"
+msgid "E550: Missing colon"
+msgstr "E550: Ãðîïóùåíî Ã¤Ã¢Ã®Ã¥Ã²Ã®Ã·Ã¨Ã¥"
 
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ ÃªÃ Ã²Ã Ã«Ã®Ã£Ã®Ã¬ Ã¨Ã«Ã¨ Ã¨Ã¬Ã¥Ã­Ã¥Ã¬ Ã¡Ã Ã§Ã» cscope"
+msgid "E551: Illegal component"
+msgstr "E551: Ãåäîïóñòèìûé ÃªÃ®Ã¬Ã¯Ã®Ã­Ã¥Ã­Ã²"
 
-#, c-format
-msgid "Added cscope database %s"
-msgstr "Äîáàâëåíà Ã¡Ã Ã§Ã  Ã¤Ã Ã­Ã­Ã»Ãµ cscope %s"
+msgid "E552: digit expected"
+msgstr "E552: Ã’ðåáóåòñÿ Ã³ÃªÃ Ã§Ã Ã²Ã¼ Ã¶Ã¨Ã´Ã°Ã³"
 
 #, c-format
-msgid "E262: error reading cscope connection %ld"
-msgstr "E262: Ã®Ã¸Ã¨Ã¡ÃªÃ  Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­Ã¨Ã¿ Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¨ Ã®Ã² Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¿ cscope %ld"
-
-msgid "E561: unknown cscope search type"
-msgstr "E561: Ã­Ã¥Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã­Ã»Ã© Ã²Ã¨Ã¯ Ã¯Ã®Ã¨Ã±ÃªÃ  cscope"
-
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: Ãåâîçìîæíî Ã±Ã®Ã§Ã¤Ã Ã²Ã¼ Ã²Ã°Ã³Ã¡Ã³ Ã¤Ã«Ã¿ cscope"
+msgid "Page %d"
+msgstr "Ñòðàíèöà %d"
 
-msgid "E622: Could not fork for cscope"
-msgstr "E622: Ãåâîçìîæíî Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ fork() Ã¤Ã«Ã¿ cscope"
+msgid "No text to be printed"
+msgstr "Ãå÷àòàòü Ã­Ã¥Ã·Ã¥Ã£Ã®"
 
-msgid "cs_create_connection exec failed"
-msgstr "íå Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ cs_create_connection"
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr "Ãå÷àòü Ã±Ã²Ã°. %d (%d%%)"
 
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã§Ã Ã¯Ã³Ã±Ã²Ã¨Ã²Ã¼ Ã¯Ã°Ã®Ã¶Ã¥Ã±Ã± cscope"
+#, c-format
+msgid " Copy %d of %d"
+msgstr " ÃŠÃ®Ã¯Ã¨Ã¿ %d Ã¨Ã§ %d"
 
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ fdopen Ã¤Ã«Ã¿ to_fp"
+#, c-format
+msgid "Printed: %s"
+msgstr "Ãàïå÷àòàíî: %s"
 
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ fdopen Ã¤Ã«Ã¿ fr_fp"
+msgid "Printing aborted"
+msgstr "Ãå÷àòü Ã¯Ã°Ã¥ÃªÃ°Ã Ã¹Ã¥Ã­Ã "
 
-msgid "E567: no cscope connections"
-msgstr "E567: Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã© Ã± cscope Ã­Ã¥ Ã±Ã®Ã§Ã¤Ã Ã­Ã®"
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã§Ã Ã¯Ã¨Ã±Ã¨ Ã¢ Ã´Ã Ã©Ã« PostScript"
 
 #, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã® Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã¨Ã© Ã¯Ã® Ã§Ã Ã¯Ã°Ã®Ã±Ã³ cscope %s Ã¤Ã«Ã¿ %s"
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« \"%s\""
 
 #, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã»Ã© Ã´Ã«Ã Ã£ cscopequickfix %c Ã¤Ã«Ã¿ %c"
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: Ãåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript \"%s\""
 
-msgid "cscope commands:\n"
-msgstr "êîìàíäû cscope:\n"
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: Ã”àéë \"%s\" Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã´Ã Ã©Ã«Ã®Ã¬ Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript"
 
 #, c-format
-msgid "%-5s: %-30s (Usage: %s)"
-msgstr "%-5s: %-30s (Èñïîëüçîâàíèå: %s)"
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: Ã”àéë \"%s\" Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã¤Ã®Ã¯Ã³Ã±Ã²Ã¨Ã¬Ã»Ã¬ Ã´Ã Ã©Ã«Ã®Ã¬ Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript"
 
 #, c-format
-msgid "E625: cannot open cscope database: %s"
-msgstr "E625: Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã¡Ã Ã§Ã³ Ã¤Ã Ã­Ã­Ã»Ãµ cscope: %s"
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: Ã”àéë Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ \"%s\" Ã­Ã¥Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã­Ã®Ã© Ã¢Ã¥Ã°Ã±Ã¨Ã¨"
 
-msgid "E626: cannot get cscope database information"
-msgstr "E626: Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¿ Ã® Ã¡Ã Ã§Ã¥ Ã¤Ã Ã­Ã­Ã»Ãµ cscope Ã­Ã¥ Ã¤Ã®Ã±Ã²Ã³Ã¯Ã­Ã "
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: Ãåñîâìåñòèìûå Ã¬Ã­Ã®Ã£Ã®Ã¡Ã Ã©Ã²Ã®Ã¢Ã Ã¿ ÃªÃ®Ã¤Ã¨Ã°Ã®Ã¢ÃªÃ  Ã¨ Ã­Ã Ã¡Ã®Ã° Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã®Ã¢."
 
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: Ã¤Ã Ã­Ã­Ã Ã¿ Ã¡Ã Ã§Ã  Ã¤Ã Ã­Ã­Ã»Ãµ cscope Ã³Ã¦Ã¥ Ã¯Ã®Ã¤Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã "
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: printmbcharset Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã¡Ã»Ã²Ã¼ Ã¯Ã³Ã±Ã²Ã»Ã¬ Ã¯Ã°Ã¨ Ã¬Ã­Ã®Ã£Ã®Ã¡Ã Ã©Ã²Ã®Ã¢Ã®Ã© ÃªÃ®Ã¤Ã¨Ã°Ã®Ã¢ÃªÃ¥."
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr "E675: Ãåò Ã®Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¿ Ã¸Ã°Ã¨Ã´Ã²Ã  Ã¯Ã® Ã³Ã¬Ã®Ã«Ã·Ã Ã­Ã¨Ã¾ Ã¤Ã«Ã¿ Ã¬Ã­Ã®Ã£Ã®Ã¡Ã Ã©Ã²Ã®Ã¢Ã®Ã© Ã¯Ã¥Ã·Ã Ã²Ã¨."
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« PostScript"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« \"%s\""
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: Ã”àéë Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript \"prolog.ps\" Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­"
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: Ã”àéë Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript \"cidfont.ps\" Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­"
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: Ã”àéë Ã°Ã¥Ã±Ã³Ã°Ã±Ã®Ã¢ PostScript \"%s.ps\" Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­"
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: Ãåâîçìîæíî Ã¯Ã°Ã¥Ã®Ã¡Ã°Ã Ã§Ã®Ã¢Ã Ã²Ã¼ Ã¢ ÃªÃ®Ã¤Ã¨Ã°Ã®Ã¢ÃªÃ³ Ã¯Ã¥Ã·Ã Ã²Ã¼ \"%s\""
+
+msgid "Sending to printer..."
+msgstr "Îòïðàâêà Ã­Ã  Ã¯Ã¥Ã·Ã Ã²Ã¼..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ Ã¯Ã¥Ã·Ã Ã²Ã¼ Ã´Ã Ã©Ã«Ã  PostScript"
+
+msgid "Print job sent."
+msgstr "Çàäàíèå Ã­Ã  Ã¯Ã¥Ã·Ã Ã²Ã¼ Ã®Ã²Ã¯Ã°Ã Ã¢Ã«Ã¥Ã­Ã®."
+
+msgid "Add a new database"
+msgstr "Äîáàâèòü Ã­Ã®Ã¢Ã³Ã¾ Ã¡Ã Ã§Ã³ Ã¤Ã Ã­Ã­Ã»Ãµ"
+
+msgid "Query for a pattern"
+msgstr "Çàïðîñ Ã¯Ã® Ã¸Ã Ã¡Ã«Ã®Ã­Ã³"
+
+msgid "Show this message"
+msgstr "Ãîêàçàòü Ã½Ã²Ã® Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã¥"
+
+msgid "Kill a connection"
+msgstr "Óáèòü Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¥"
+
+msgid "Reinit all connections"
+msgstr "Çàíîâî Ã¨Ã­Ã¨Ã¶Ã¨Ã Ã«Ã¨Ã§Ã¨Ã°Ã®Ã¢Ã Ã²Ã¼ Ã¢Ã±Ã¥ Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¿"
+
+msgid "Show connections"
+msgstr "Ãîêàçàòü Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¿"
+
+#, c-format
+msgid "E560: Usage: cs[cope] %s"
+msgstr "E560: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥: cs[cope] %s"
+
+msgid "This cscope command does not support splitting the window.\n"
+msgstr "Ãòà ÃªÃ®Ã¬Ã Ã­Ã¤Ã  cscope Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã² Ã°Ã Ã§Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¥ Ã®ÃªÃ­Ã .\n"
+
+msgid "E562: Usage: cstag <ident>"
+msgstr "E562: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥: cstag <èìÿ>"
+
+msgid "E257: cstag: tag not found"
+msgstr "E257: cstag: Ã¬Ã¥Ã²ÃªÃ  Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã "
+
+#, c-format
+msgid "E563: stat(%s) error: %d"
+msgstr "E563: ÃŽÃ¸Ã¨Ã¡ÃªÃ  stat(%s): %d"
+
+msgid "E563: stat error"
+msgstr "E563: ÃŽÃ¸Ã¨Ã¡ÃªÃ  stat"
 
-msgid "E569: maximum number of cscope connections reached"
-msgstr "E569: Ã¤Ã®Ã±Ã²Ã¨Ã£Ã­Ã³Ã²Ã® Ã¬Ã ÃªÃ±Ã¨Ã¬Ã Ã«Ã¼Ã­Ã®Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã²ÃªÃ°Ã»Ã²Ã»Ãµ Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã© Ã± cscope"
+#, c-format
+msgid "E564: %s is not a directory or a valid cscope database"
+msgstr "E564: %s Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ ÃªÃ Ã²Ã Ã«Ã®Ã£Ã®Ã¬ Ã¨Ã«Ã¨ Ã¨Ã¬Ã¥Ã­Ã¥Ã¬ Ã¡Ã Ã§Ã» cscope"
+
+#, c-format
+msgid "Added cscope database %s"
+msgstr "Äîáàâëåíà Ã¡Ã Ã§Ã  Ã¤Ã Ã­Ã­Ã»Ãµ cscope %s"
+
+#, c-format
+msgid "E262: error reading cscope connection %ld"
+msgstr "E262: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­Ã¨Ã¿ Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¨ Ã®Ã² Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¿ cscope %ld"
+
+msgid "E561: unknown cscope search type"
+msgstr "E561: Ãåèçâåñòíûé Ã²Ã¨Ã¯ Ã¯Ã®Ã¨Ã±ÃªÃ  cscope"
+
+msgid "E566: Could not create cscope pipes"
+msgstr "E566: Ãåâîçìîæíî Ã±Ã®Ã§Ã¤Ã Ã²Ã¼ Ã²Ã°Ã³Ã¡Ã³ Ã¤Ã«Ã¿ cscope"
+
+msgid "E622: Could not fork for cscope"
+msgstr "E622: Ãåâîçìîæíî Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ fork() Ã¤Ã«Ã¿ cscope"
+
+msgid "cs_create_connection setpgid failed"
+msgstr "cs_create_connection: Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ setpgid"
+
+msgid "cs_create_connection exec failed"
+msgstr "cs_create_connection: Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ exec"
+
+msgid "cs_create_connection: fdopen for to_fp failed"
+msgstr "cs_create_connection: Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ fdopen Ã¤Ã«Ã¿ to_fp"
+
+msgid "cs_create_connection: fdopen for fr_fp failed"
+msgstr "cs_create_connection: Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ fdopen Ã¤Ã«Ã¿ fr_fp"
+
+msgid "E623: Could not spawn cscope process"
+msgstr "E623: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã§Ã Ã¯Ã³Ã±Ã²Ã¨Ã²Ã¼ Ã¯Ã°Ã®Ã¶Ã¥Ã±Ã± cscope"
+
+msgid "E567: no cscope connections"
+msgstr "E567: Ã‘îåäèíåíèé Ã± cscope Ã­Ã¥ Ã±Ã®Ã§Ã¤Ã Ã­Ã®"
+
+#, c-format
+msgid "E469: invalid cscopequickfix flag %c for %c"
+msgstr "E469: Ãåïðàâèëüíûé Ã´Ã«Ã Ã£ cscopequickfix %c Ã¤Ã«Ã¿ %c"
+
+#, c-format
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: ÃÃ¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã® Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã¨Ã© Ã¯Ã® Ã§Ã Ã¯Ã°Ã®Ã±Ã³ cscope %s Ã¤Ã«Ã¿ %s"
+
+msgid "cscope commands:\n"
+msgstr "Êîìàíäû cscope:\n"
+
+#, c-format
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (èñïîëüçîâàíèå: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: Ãàéòè Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ Ã¢Ã»Ã§Ã»Ã¢Ã Ã¾Ã¹Ã¨Ã¥ Ã½Ã²Ã³ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾\n"
+"       d: Ãàéòè Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ Ã¢Ã»Ã§Ã»Ã¢Ã Ã¥Ã¬Ã»Ã¥ Ã½Ã²Ã®Ã© Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¥Ã©\n"
+"       e: Ãàéòè Ã½Ã²Ã®Ã² Ã¸Ã Ã¡Ã«Ã®Ã­ egrep\n"
+"       f: Ãàéòè Ã½Ã²Ã®Ã² Ã´Ã Ã©Ã«\n"
+"       g: Ãàéòè Ã½Ã²Ã® Ã®Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¥\n"
+"       i: Ãàéòè Ã´Ã Ã©Ã«Ã» Ã¢ÃªÃ«Ã¾Ã·Ã Ã¾Ã¹Ã¨Ã¥ (#include) Ã½Ã²Ã®Ã² Ã´Ã Ã©Ã«\n"
+"       s: Ãàéòè Ã½Ã²Ã®Ã² C-ñèìâîë\n"
+"       t: Ãàéòè Ã½Ã²Ã³ Ã²Ã¥ÃªÃ±Ã²Ã®Ã¢Ã³Ã¾ Ã±Ã²Ã°Ã®ÃªÃ³\n"
+
+#, c-format
+msgid "E625: cannot open cscope database: %s"
+msgstr "E625: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã¡Ã Ã§Ã³ Ã¤Ã Ã­Ã­Ã»Ãµ cscope: %s"
+
+msgid "E626: cannot get cscope database information"
+msgstr "E626: ÃˆÃ­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¿ Ã® Ã¡Ã Ã§Ã¥ Ã¤Ã Ã­Ã­Ã»Ãµ cscope Ã­Ã¥ Ã¤Ã®Ã±Ã²Ã³Ã¯Ã­Ã "
+
+msgid "E568: duplicate cscope database not added"
+msgstr "E568: Ã„àííàÿ Ã¡Ã Ã§Ã  Ã¤Ã Ã­Ã­Ã»Ãµ cscope Ã³Ã¦Ã¥ Ã¯Ã®Ã¤Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã "
 
 #, c-format
 msgid "E261: cscope connection %s not found"
-msgstr "E261: Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¥ Ã± cscope %s Ã­Ã¥ Ã®Ã¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã®"
+msgstr "E261: Ã‘îåäèíåíèå Ã± cscope %s Ã­Ã¥ Ã®Ã¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã®"
 
 #, c-format
 msgid "cscope connection %s closed"
@@ -1981,7 +2551,7 @@ msgstr "
 
 #. should not reach here
 msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: ÃªÃ°Ã¨Ã²Ã¨Ã·Ã¥Ã±ÃªÃ Ã¿ Ã®Ã¸Ã¨Ã¡ÃªÃ  Ã¢ cs_manage_matches"
+msgstr "E570: ÃŠÃ°Ã¨Ã²Ã¨Ã·Ã¥Ã±ÃªÃ Ã¿ Ã®Ã¸Ã¨Ã¡ÃªÃ  Ã¢ cs_manage_matches"
 
 #, c-format
 msgid "Cscope tag: %s"
@@ -2010,30 +2580,18 @@ msgstr "
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    Ã¡Ã Ã§Ã  Ã¤Ã Ã­Ã­Ã»Ãµ                         Ã­Ã Ã·Ã Ã«Ã¼Ã­Ã»Ã© Ã¯Ã³Ã²Ã¼\n"
 
+msgid "Lua library cannot be loaded."
+msgstr "Ãèáëèîòåêà Lua Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã¡Ã»Ã²Ã¼ Ã§Ã Ã£Ã°Ã³Ã¦Ã¥Ã­Ã ."
+
+msgid "cannot save undo information"
+msgstr "íåâîçìîæíî Ã±Ã®ÃµÃ°Ã Ã­Ã¨Ã²Ã¼ Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¾ Ã®Ã¡ Ã®Ã²Ã¬Ã¥Ã­Ã¥ Ã®Ã¯Ã¥Ã°Ã Ã¶Ã¨Ã¨"
+
 msgid ""
-"E263: Sorry, this command is disabled, the Python library could not be "
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
 msgstr ""
-"E263: ÃŠ Ã±Ã®Ã¦Ã Ã«Ã¥Ã­Ã¨Ã¾ Ã½Ã²Ã  ÃªÃ®Ã¬Ã Ã­Ã¤Ã  Ã­Ã¥ Ã°Ã Ã¡Ã®Ã²Ã Ã¥Ã², Ã¯Ã®Ã±ÃªÃ®Ã«Ã¼ÃªÃ³ Ã­Ã¥ Ã§Ã Ã£Ã°Ã³Ã¦Ã¥Ã­Ã  Ã¡Ã¨Ã¡Ã«Ã¨Ã®Ã²Ã¥ÃªÃ  "
-"Python"
-
-msgid "E659: Cannot invoke Python recursively"
-msgstr "E659: Ãåâîçìîæíî Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ Ã°Ã¥ÃªÃ³Ã°Ã±Ã¨Ã¢Ã­Ã»Ã© Ã¢Ã»Ã§Ã®Ã¢ Python"
-
-msgid "can't delete OutputObject attributes"
-msgstr "íåâîçìîæíî Ã³Ã¤Ã Ã«Ã¨Ã²Ã¼ Ã Ã²Ã°Ã¨Ã¡Ã³Ã²Ã» OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "çíà÷åíèå softspace Ã¤Ã®Ã«Ã¦Ã­Ã® Ã¡Ã»Ã²Ã¼ Ã¶Ã¥Ã«Ã»Ã¬ Ã·Ã¨Ã±Ã«Ã®Ã¬"
-
-msgid "invalid attribute"
-msgstr "íåïðàâèëüíûé Ã Ã²Ã°Ã¨Ã¡Ã³Ã²"
-
-msgid "writelines() requires list of strings"
-msgstr "writelines() Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã² Ã³ÃªÃ Ã§Ã Ã­Ã¨Ã¿ Ã±Ã¯Ã¨Ã±ÃªÃ  Ã±Ã²Ã°Ã®Ãª"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Python: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã¨Ã­Ã¨Ã¶Ã¨Ã Ã«Ã¨Ã§Ã Ã¶Ã¨Ã¨ Ã®Ã¡ÃºÃ¥ÃªÃ²Ã®Ã¢ I/O"
+"E815: ÃŠ Ã±Ã®Ã¦Ã Ã«Ã¥Ã­Ã¨Ã¾ Ã½Ã²Ã  ÃªÃ®Ã¬Ã Ã­Ã¤Ã  Ã­Ã¥ Ã°Ã Ã¡Ã®Ã²Ã Ã¥Ã², Ã¯Ã®Ã±ÃªÃ®Ã«Ã¼ÃªÃ³ Ã­Ã¥ Ã§Ã Ã£Ã°Ã³Ã¦Ã¥Ã­Ã  Ã¡Ã¨Ã¡Ã«Ã¨Ã®Ã²Ã¥ÃªÃ  "
+"MzScheme"
 
 msgid "invalid expression"
 msgstr "íåïðàâèëüíîå Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¥"
@@ -2041,91 +2599,118 @@ msgstr "
 msgid "expressions disabled at compile time"
 msgstr "âûðàæåíèÿ Ã®Ã²ÃªÃ«Ã¾Ã·Ã¥Ã­Ã» Ã¯Ã°Ã¨ ÃªÃ®Ã¬Ã¯Ã¨Ã«Ã¿Ã¶Ã¨Ã¨"
 
-msgid "attempt to refer to deleted buffer"
-msgstr "ïîïûòêà Ã±Ã®Ã±Ã«Ã Ã²Ã¼Ã±Ã¿ Ã­Ã  Ã³Ã­Ã¨Ã·Ã²Ã®Ã¦Ã¥Ã­Ã­Ã»Ã© Ã¡Ã³Ã´Ã¥Ã°"
+msgid "hidden option"
+msgstr "ñêðûòàÿ Ã®Ã¯Ã¶Ã¨Ã¿"
 
-msgid "line number out of range"
-msgstr "çàïðåäåëüíûé Ã­Ã®Ã¬Ã¥Ã° Ã±Ã²Ã°Ã®ÃªÃ¨"
+msgid "unknown option"
+msgstr "íåèçâåñòíàÿ Ã®Ã¯Ã¶Ã¨Ã¿"
 
-#, c-format
-msgid "<buffer object (deleted) at %8lX>"
-msgstr "<îáúåêò Ã¡Ã³Ã´Ã¥Ã°Ã  (óäàëåí) Ã¢ %8lX>"
+msgid "window index is out of range"
+msgstr "èíäåêñ Ã®ÃªÃ­Ã  Ã§Ã  Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã Ã¬Ã¨ Ã¤Ã¨Ã Ã¯Ã Ã§Ã®Ã­Ã "
 
-msgid "invalid mark name"
-msgstr "íåïðàâèëüíîå Ã¨Ã¬Ã¿ Ã®Ã²Ã¬Ã¥Ã²ÃªÃ¨"
+msgid "couldn't open buffer"
+msgstr "íåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã¡Ã³Ã´Ã¥Ã°"
 
-msgid "no such buffer"
-msgstr "íåò Ã²Ã ÃªÃ®Ã£Ã® Ã¡Ã³Ã´Ã¥Ã°Ã "
+msgid "cannot delete line"
+msgstr "íåâîçìîæíî Ã³Ã¤Ã Ã«Ã¨Ã²Ã¼ Ã±Ã²Ã°Ã®ÃªÃ³"
 
-msgid "attempt to refer to deleted window"
-msgstr "ïîïûòêà Ã±Ã®Ã±Ã«Ã Ã²Ã¼Ã±Ã¿ Ã­Ã  Ã§Ã ÃªÃ°Ã»Ã²Ã®Ã¥ Ã®ÃªÃ­Ã®"
+msgid "cannot replace line"
+msgstr "íåâîçìîæíî Ã§Ã Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã±Ã²Ã°Ã®ÃªÃ³"
 
-msgid "readonly attribute"
-msgstr "àòðèáóò Ã¤Ã®Ã±Ã²Ã³Ã¯Ã¥Ã­ Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿"
+msgid "cannot insert line"
+msgstr "íåâîçìîæíî Ã¢Ã±Ã²Ã Ã¢Ã¨Ã²Ã¼ Ã±Ã²Ã°Ã®ÃªÃ³"
 
-msgid "cursor position outside buffer"
-msgstr "ïîçèöèÿ ÃªÃ³Ã°Ã±Ã®Ã°Ã  Ã­Ã ÃµÃ®Ã¤Ã¨Ã²Ã±Ã¿ Ã¢Ã­Ã¥ Ã¡Ã³Ã´Ã¥Ã°Ã "
+msgid "string cannot contain newlines"
+msgstr "ñòðîêà Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã±Ã®Ã¤Ã¥Ã°Ã¦Ã Ã²Ã¼ Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã­Ã®Ã¢Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¨"
 
-#, c-format
-msgid "<window object (deleted) at %.8lX>"
-msgstr "<îáúåêò Ã®ÃªÃ­Ã  (óäàëåí) Ã¢ %.8lX>"
+msgid "error converting Scheme values to Vim"
+msgstr "íåâîçìîæíî Ã¯Ã°Ã¥Ã®Ã¡Ã°Ã Ã§Ã®Ã¢Ã Ã²Ã¼ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¿ Scheme Ã¢ Vim"
 
-#, c-format
-msgid "<window object (unknown) at %.8lX>"
-msgstr "<îáúåêò Ã®ÃªÃ­Ã  (íåèçâåñòåí) Ã¢ %.8lX>"
+msgid "Vim error: ~a"
+msgstr "îøèáêà Vim: ~a"
 
-#, c-format
-msgid "<window %d>"
-msgstr "<îêíî %d>"
+msgid "Vim error"
+msgstr "îøèáêà Vim"
 
-msgid "no such window"
-msgstr "íåò Ã²Ã ÃªÃ®Ã£Ã® Ã®ÃªÃ­Ã "
+msgid "buffer is invalid"
+msgstr "íåïðàâèëüíûé Ã¡Ã³Ã´Ã¥Ã°"
 
-msgid "cannot save undo information"
-msgstr "íåâîçìîæíî Ã±Ã®ÃµÃ°Ã Ã­Ã¨Ã²Ã¼ Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¾ Ã®Ã¡ Ã®Ã²Ã¬Ã¥Ã­Ã¥ Ã®Ã¯Ã¥Ã°Ã Ã¶Ã¨Ã¨"
+msgid "window is invalid"
+msgstr "íåïðàâèëüíîå Ã®ÃªÃ­Ã®"
 
-msgid "cannot delete line"
-msgstr "íåâîçìîæíî Ã³Ã¤Ã Ã«Ã¨Ã²Ã¼ Ã±Ã²Ã°Ã®ÃªÃ³"
+msgid "linenr out of range"
+msgstr "íîìåð Ã±Ã²Ã°Ã®ÃªÃ¨ Ã§Ã  Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã Ã¬Ã¨ Ã¤Ã¨Ã Ã¯Ã Ã§Ã®Ã­Ã "
 
-msgid "cannot replace line"
-msgstr "íåâîçìîæíî Ã§Ã Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã±Ã²Ã°Ã®ÃªÃ³"
+msgid "not allowed in the Vim sandbox"
+msgstr "íå Ã¤Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã²Ã±Ã¿ Ã¢ Ã¯Ã¥Ã±Ã®Ã·Ã­Ã¨Ã¶Ã¥ Vim"
 
-msgid "cannot insert line"
-msgstr "íåâîçìîæíî Ã¢Ã±Ã²Ã Ã¢Ã¨Ã²Ã¼ Ã±Ã²Ã°Ã®ÃªÃ³"
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Ã„àííûé Vim Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ :python Ã¯Ã®Ã±Ã«Ã¥ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¿ :py3"
 
-msgid "string cannot contain newlines"
-msgstr "ñòðîêà Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã±Ã®Ã¤Ã¥Ã°Ã¦Ã Ã²Ã¼ Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã­Ã®Ã¢Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¨"
+msgid ""
+"E263: Sorry, this command is disabled, the Python library could not be "
+"loaded."
+msgstr ""
+"E263: ÃŠ Ã±Ã®Ã¦Ã Ã«Ã¥Ã­Ã¨Ã¾ Ã½Ã²Ã  ÃªÃ®Ã¬Ã Ã­Ã¤Ã  Ã­Ã¥ Ã°Ã Ã¡Ã®Ã²Ã Ã¥Ã², Ã¯Ã®Ã±ÃªÃ®Ã«Ã¼ÃªÃ³ Ã­Ã¥ Ã§Ã Ã£Ã°Ã³Ã¦Ã¥Ã­Ã  Ã¡Ã¨Ã¡Ã«Ã¨Ã®Ã²Ã¥ÃªÃ  "
+"Python"
+
+msgid "E659: Cannot invoke Python recursively"
+msgstr "E659: Ãåâîçìîæíî Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ Ã°Ã¥ÃªÃ³Ã°Ã±Ã¨Ã¢Ã­Ã»Ã© Ã¢Ã»Ã§Ã®Ã¢ Python"
+
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Ã„àííûé Vim Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ :py3 Ã¯Ã®Ã±Ã«Ã¥ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¿ :python"
+
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã¡Ã»Ã²Ã¼ Ã½ÃªÃ§Ã¥Ã¬Ã¯Ã«Ã¿Ã°Ã®Ã¬ Ã¨Ã«Ã¨ Ã±Ã²Ã°Ã®ÃªÃ®Ã©"
 
 msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr ""
 "E266: ÃŠ Ã±Ã®Ã¦Ã Ã«Ã¥Ã­Ã¨Ã¾ Ã½Ã²Ã  ÃªÃ®Ã¬Ã Ã­Ã¤Ã  Ã­Ã¥ Ã°Ã Ã¡Ã®Ã²Ã Ã¥Ã², Ã¯Ã®Ã±ÃªÃ®Ã«Ã¼ÃªÃ³ Ã­Ã¥ Ã§Ã Ã£Ã°Ã³Ã¦Ã¥Ã­Ã  Ã¡Ã¨Ã¡Ã«Ã¨Ã®Ã²Ã¥ÃªÃ  "
-"Ruby."
+"Ruby"
+
+msgid "E267: unexpected return"
+msgstr "E267: Ãåîæèäàííûé return"
+
+msgid "E268: unexpected next"
+msgstr "E268: Ãåîæèäàííûé next"
+
+msgid "E269: unexpected break"
+msgstr "E269: Ãåîæèäàííûé break"
+
+msgid "E270: unexpected redo"
+msgstr "E270: Ãåîæèäàííûé redo"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: retry Ã¢Ã­Ã¥ Ã®Ã¯Ã¥Ã°Ã Ã²Ã®Ã°Ã  rescue"
+
+msgid "E272: unhandled exception"
+msgstr "E272: Ãåîáðàáîòàííîå Ã¨Ã±ÃªÃ«Ã¾Ã·Ã¥Ã­Ã¨Ã¥"
 
 #, c-format
 msgid "E273: unknown longjmp status %d"
-msgstr "E273: Ã­Ã¥Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã­Ã®Ã¥ Ã±Ã®Ã±Ã²Ã®Ã¿Ã­Ã¨Ã¥ longjmp %d"
+msgstr "E273: Ãåèçâåñòíîå Ã±Ã®Ã±Ã²Ã®Ã¿Ã­Ã¨Ã¥ longjmp %d"
 
 msgid "Toggle implementation/definition"
 msgstr "Ãåðåêëþ÷åíèå Ã¬Ã¥Ã¦Ã¤Ã³ Ã°Ã¥Ã Ã«Ã¨Ã§Ã Ã¶Ã¨Ã¥Ã©/îïðåäåëåíèåì"
 
 msgid "Show base class of"
-msgstr "Ãîêàçàòü Ã¡Ã Ã§Ã®Ã¢Ã»Ã© ÃªÃ«Ã Ã±Ã± "
+msgstr "Ãîêàçàòü Ã®Ã±Ã­Ã®Ã¢Ã­Ã®Ã© ÃªÃ«Ã Ã±Ã±"
 
 msgid "Show overridden member function"
 msgstr "Ãîêàçàòü Ã¯Ã¥Ã°Ã¥Ã£Ã°Ã³Ã¦Ã¥Ã­Ã­Ã»Ã¥ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨"
 
 msgid "Retrieve from file"
-msgstr "Ãîëó÷åíèå Ã¨Ã§ Ã´Ã Ã©Ã«Ã "
+msgstr "Ãîëó÷èòü Ã¨Ã§ Ã´Ã Ã©Ã«Ã "
 
 msgid "Retrieve from project"
-msgstr "Ãîëó÷åíèå Ã¨Ã§ Ã¯Ã°Ã®Ã¥ÃªÃ²Ã "
+msgstr "Ãîëó÷èòü Ã¨Ã§ Ã¯Ã°Ã®Ã¥ÃªÃ²Ã "
 
 msgid "Retrieve from all projects"
-msgstr "Ãîëó÷åíèå Ã¨Ã§ Ã¢Ã±Ã¥Ãµ Ã¯Ã°Ã®Ã¥ÃªÃ²Ã®Ã¢"
+msgstr "Ãîëó÷èòü Ã¨Ã§ Ã¢Ã±Ã¥Ãµ Ã¯Ã°Ã®Ã¥ÃªÃ²Ã®Ã¢"
 
 msgid "Retrieve"
-msgstr "Ãîëó÷åíèå"
+msgstr "Ãîëó÷èòü"
 
 msgid "Show source of"
 msgstr "Ãîêàçàòü Ã¨Ã±ÃµÃ®Ã¤Ã­Ã»Ã© ÃªÃ®Ã¤"
@@ -2201,13 +2786,13 @@ msgstr "
 msgid "not implemented yet"
 msgstr "ïîêà Ã­Ã¥ Ã°Ã¥Ã Ã«Ã¨Ã§Ã®Ã¢Ã Ã­Ã®"
 
-msgid "unknown option"
-msgstr "íåèçâåñòíàÿ Ã®Ã¯Ã¶Ã¨Ã¿"
-
 #. ???
 msgid "cannot set line(s)"
 msgstr "íåâîçìîæíî Ã­Ã Ã§Ã­Ã Ã·Ã¨Ã²Ã¼ Ã±Ã²Ã°Ã®ÃªÃ³ Ã¨Ã«Ã¨ Ã±Ã²Ã°Ã®ÃªÃ¨"
 
+msgid "invalid mark name"
+msgstr "íåïðàâèëüíîå Ã¨Ã¬Ã¿ Ã®Ã²Ã¬Ã¥Ã²ÃªÃ¨"
+
 msgid "mark not set"
 msgstr "îòìåòêà Ã­Ã¥ Ã³Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­Ã "
 
@@ -2218,6 +2803,9 @@ msgstr "
 msgid "cannot insert/append line"
 msgstr "íåâîçìîæíî Ã¢Ã±Ã²Ã Ã¢Ã¨Ã²Ã¼ Ã¨Ã«Ã¨ Ã¤Ã®Ã¡Ã Ã¢Ã¨Ã²Ã¼ Ã±Ã²Ã°Ã®ÃªÃ³"
 
+msgid "line number out of range"
+msgstr "íîìåð Ã±Ã²Ã°Ã®ÃªÃ¨ Ã§Ã  Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã Ã¬Ã¨ Ã¤Ã¨Ã Ã¯Ã Ã§Ã®Ã­Ã "
+
 msgid "unknown flag: "
 msgstr "íåèçâåñòíûé Ã´Ã«Ã Ã£: "
 
@@ -2228,7 +2816,7 @@ msgid "keyboard interrupt"
 msgstr "êëàâèàòóðíîå Ã¯Ã°Ã¥Ã°Ã»Ã¢Ã Ã­Ã¨Ã¥"
 
 msgid "vim error"
-msgstr "îøèáêà vim"
+msgstr "îøèáêà VIM"
 
 msgid "cannot create buffer/window command: object is being deleted"
 msgstr "íåâîçìîæíî Ã±Ã®Ã§Ã¤Ã Ã²Ã¼ ÃªÃ®Ã¬Ã Ã­Ã¤Ã³ Ã¡Ã³Ã´Ã¥Ã°Ã  Ã¨Ã«Ã¨ Ã®ÃªÃ­Ã : Ã®Ã¡ÃºÃ¥ÃªÃ² Ã¢ Ã¯Ã°Ã®Ã¶Ã¥Ã±Ã±Ã¥ Ã³Ã¤Ã Ã«Ã¥Ã­Ã¨Ã¿"
@@ -2258,11 +2846,9 @@ msgstr ""
 "E571: ÃŠ Ã±Ã®Ã¦Ã Ã«Ã¥Ã­Ã¨Ã¾ Ã½Ã²Ã  ÃªÃ®Ã¬Ã Ã­Ã¤Ã  Ã­Ã¥ Ã°Ã Ã¡Ã®Ã²Ã Ã¥Ã², Ã¯Ã®Ã±ÃªÃ®Ã«Ã¼ÃªÃ³ Ã­Ã¥ Ã§Ã Ã£Ã°Ã³Ã¦Ã¥Ã­Ã  Ã¡Ã¨Ã¡Ã«Ã¨Ã®Ã²Ã¥ÃªÃ  "
 "Tcl"
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ÃŽÃ˜ÃˆÃÊÀ TCL: ÃŠÃ®Ã¤ Ã¢Ã»ÃµÃ®Ã¤Ã  Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã¶Ã¥Ã«Ã»Ã¬ Ã·Ã¨Ã±Ã«Ã®Ã¬?! Ã‘îîáùèòå Ã®Ã¡ Ã½Ã²Ã®Ã¬ Ã¢ "
-"vim-dev@vim.org"
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572: ÃŠÃ®Ã¤ Ã¢Ã»ÃµÃ®Ã¤Ã  %d"
 
 msgid "cannot get line"
 msgstr "íåâîçìîæíî Ã¯Ã®Ã«Ã³Ã·Ã¨Ã²Ã¼ Ã±Ã²Ã°Ã®ÃªÃ³"
@@ -2271,7 +2857,7 @@ msgid "Unable to register a command server name"
 msgstr "Ãåâîçìîæíî Ã§Ã Ã°Ã¥Ã£Ã¨Ã±Ã²Ã°Ã¨Ã°Ã®Ã¢Ã Ã²Ã¼ Ã¨Ã¬Ã¿ Ã±Ã¥Ã°Ã¢Ã¥Ã°Ã  ÃªÃ®Ã¬Ã Ã­Ã¤"
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248: ÃŽÃ²Ã¯Ã°Ã Ã¢ÃªÃ  ÃªÃ®Ã¬Ã Ã­Ã¤Ã» Ã¢ Ã¤Ã°Ã³Ã£Ã³Ã¾ Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã¬Ã³ Ã­Ã¥ Ã³Ã¤Ã Ã«Ã Ã±Ã¼"
+msgstr "E248: ÃÃ¥ Ã³Ã¤Ã Ã«Ã Ã±Ã¼ Ã®Ã²Ã¯Ã°Ã Ã¢ÃªÃ  ÃªÃ®Ã¬Ã Ã­Ã¤Ã» Ã¢ Ã¤Ã°Ã³Ã£Ã³Ã¾ Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã¬Ã³"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -2282,29 +2868,39 @@ msgstr ""
 "E251: Ãåïðàâèëüíî Ã±Ã´Ã®Ã°Ã¬Ã¨Ã°Ã®Ã¢Ã Ã­Ã® Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã¤Ã Ã­Ã­Ã®Ã£Ã® Ã¯Ã°Ã®Ã¶Ã¥Ã±Ã±Ã  VIM Ã¢ Ã°Ã¥Ã¥Ã±Ã²Ã°Ã¥. "
 "Óäàëåíî!"
 
-msgid "Unknown option"
-msgstr "Ãåèçâåñòíûé Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²"
+msgid "Unknown option argument"
+msgstr "Ãåèçâåñòíûé Ã­Ã¥Ã®Ã¡Ã¿Ã§Ã Ã²Ã¥Ã«Ã¼Ã­Ã»Ã© Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°"
 
 msgid "Too many edit arguments"
-msgstr "Ñëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã®Ã¢ Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿"
+msgstr "Ñëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢ Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿"
 
 msgid "Argument missing after"
-msgstr "Ãðîïóùåí Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã² Ã¯Ã®Ã±Ã«Ã¥"
+msgstr "Ãðîïóùåí Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã° Ã¯Ã®Ã±Ã«Ã¥"
 
-msgid "Garbage after option"
-msgstr "Ìóñîð Ã¯Ã®Ã±Ã«Ã¥ Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã "
+msgid "Garbage after option argument"
+msgstr "Ìóñîð Ã¯Ã®Ã±Ã«Ã¥ Ã­Ã¥Ã®Ã¡Ã¿Ã§Ã Ã²Ã¥Ã«Ã¼Ã­Ã®Ã£Ã® Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã "
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr ""
-"Ñëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã®Ã¢ \"+êîìàíäà\", \"-c ÃªÃ®Ã¬Ã Ã­Ã¤Ã \" Ã¨Ã«Ã¨ \"--cmd ÃªÃ®Ã¬Ã Ã­Ã¤Ã \""
+"Ñëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢ \"+êîìàíäà\", \"-c ÃªÃ®Ã¬Ã Ã­Ã¤Ã \" Ã¨Ã«Ã¨ \"--cmd ÃªÃ®Ã¬Ã Ã­Ã¤Ã \""
 
 msgid "Invalid argument for"
-msgstr "Ãåäîïóñòèìûå Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã» Ã¤Ã«Ã¿"
+msgstr "Ãåäîïóñòèìûé Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã° Ã¤Ã«Ã¿"
+
+#, c-format
+msgid "%d files to edit\n"
+msgstr "Ôàéëîâ Ã¤Ã«Ã¿ Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿: %d\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "NetBeans Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã²Ã±Ã¿ Ã± Ã½Ã²Ã¨Ã¬ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬\n"
 
 msgid "This Vim was not compiled with the diff feature."
 msgstr ""
 "Äàííûé Vim Ã¡Ã»Ã« Ã±ÃªÃ®Ã¬Ã¯Ã¨Ã«Ã¨Ã°Ã®Ã¢Ã Ã­ Ã± Ã¢Ã»ÃªÃ«Ã¾Ã·Ã¥Ã­Ã­Ã®Ã© Ã®Ã±Ã®Ã¡Ã¥Ã­Ã­Ã®Ã±Ã²Ã¼Ã¾ Ã¯Ã°Ã®Ã±Ã¬Ã®Ã²Ã°Ã  Ã®Ã²Ã«Ã¨Ã·Ã¨Ã©"
 
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "Ãåâîçìîæíî Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ '-nb': Ã­Ã¥ Ã¢ÃªÃ«Ã¾Ã·Ã¥Ã­Ã® Ã¯Ã°Ã¨ ÃªÃ®Ã¬Ã¯Ã¨Ã«Ã¿Ã¶Ã¨Ã¨\n"
+
 msgid "Attempt to open script file again: \""
 msgstr "Ãîïûòêà Ã¯Ã®Ã¢Ã²Ã®Ã°Ã­Ã®Ã£Ã® Ã®Ã²ÃªÃ°Ã»Ã²Ã¨Ã¿ Ã´Ã Ã©Ã«Ã  Ã±Ã¶Ã¥Ã­Ã Ã°Ã¨Ã¿: \""
 
@@ -2314,9 +2910,8 @@ msgstr "
 msgid "Cannot open for script output: \""
 msgstr "Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã¤Ã«Ã¿ Ã¢Ã»Ã¢Ã®Ã¤Ã  Ã±Ã¶Ã¥Ã­Ã Ã°Ã¨Ã¿: \""
 
-#, c-format
-msgid "%d files to edit\n"
-msgstr "Ôàéëîâ Ã¤Ã«Ã¿ Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿: %d\n"
+msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+msgstr "Vim: ÃŽÃ¸Ã¨Ã¡ÃªÃ : ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã§Ã Ã¯Ã³Ã±Ã²Ã¨Ã²Ã¼ gvim Ã¨Ã§ NetBeans\n"
 
 msgid "Vim: Warning: Output is not to a terminal\n"
 msgstr "Vim: Ãðåäóïðåæäåíèå: Ã‚ûâîä Ã®Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã­Ã¥ Ã­Ã  Ã²Ã¥Ã°Ã¬Ã¨Ã­Ã Ã«\n"
@@ -2343,13 +2938,16 @@ msgid "[file ..]       edit specified file(s)"
 msgstr "[ôàéë ..] Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã³ÃªÃ Ã§Ã Ã­Ã­Ã»Ãµ Ã´Ã Ã©Ã«Ã®Ã¢"
 
 msgid "-               read text from stdin"
-msgstr "-                Ã·Ã²Ã¥Ã­Ã¨Ã¥ Ã²Ã¥ÃªÃ±Ã²Ã  Ã¨Ã§ Ã¯Ã®Ã²Ã®ÃªÃ  Ã¢Ã¢Ã®Ã¤Ã  stdin"
+msgstr "-           Ã·Ã²Ã¥Ã­Ã¨Ã¥ Ã²Ã¥ÃªÃ±Ã²Ã  Ã¨Ã§ Ã¯Ã®Ã²Ã®ÃªÃ  Ã¢Ã¢Ã®Ã¤Ã  stdin"
 
 msgid "-t tag          edit file where tag is defined"
-msgstr "-t Ã¬Ã¥Ã²ÃªÃ          Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã´Ã Ã©Ã«Ã  Ã± Ã³ÃªÃ Ã§Ã Ã­Ã­Ã®Ã© Ã¬Ã¥Ã²ÃªÃ®Ã©"
+msgstr "-t Ã¬Ã¥Ã²ÃªÃ     Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã´Ã Ã©Ã«Ã  Ã± Ã³ÃªÃ Ã§Ã Ã­Ã­Ã®Ã© Ã¬Ã¥Ã²ÃªÃ®Ã©"
 
+# \n\t\t.. Ã¤Ã«Ã¿ Ã³Ã¬Ã¥Ã¹Ã¥Ã­Ã¨Ã¿ Ã¢ 80 Ã±Ã²Ã®Ã«Ã¡Ã¶Ã®Ã¢
 msgid "-q [errorfile]  edit file with first error"
-msgstr "-q [ôàéë Ã®Ã¸Ã¨Ã¡Ã®Ãª] Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã´Ã Ã©Ã«Ã  Ã± Ã¯Ã¥Ã°Ã¢Ã®Ã© Ã®Ã¸Ã¨Ã¡ÃªÃ®Ã©"
+msgstr ""
+"-q [ôàéë-îøèáîê]\n"
+"\t\t\t\t    Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã´Ã Ã©Ã«Ã  Ã± Ã¯Ã¥Ã°Ã¢Ã®Ã© Ã®Ã¸Ã¨Ã¡ÃªÃ®Ã©"
 
 msgid ""
 "\n"
@@ -2361,7 +2959,7 @@ msgstr ""
 "Èñïîëüçîâàíèå:"
 
 msgid " vim [arguments] "
-msgstr " vim [àðãóìåíòû] "
+msgstr " vim [ïàðàìåòðû] "
 
 msgid ""
 "\n"
@@ -2372,12 +2970,19 @@ msgstr ""
 
 msgid ""
 "\n"
+"Where case is ignored prepend / to make flag upper case"
+msgstr ""
+"\n"
+"Åñëè Ã°Ã¥Ã£Ã¨Ã±Ã²Ã° Ã¨Ã£Ã­Ã®Ã°Ã¨Ã°Ã³Ã¥Ã²Ã±Ã¿, Ã¤Ã®Ã¡Ã Ã¢Ã¼Ã²Ã¥ Ã¯Ã¥Ã°Ã¥Ã¤ Ã´Ã«Ã Ã£Ã®Ã¬ / Ã¤Ã«Ã¿ Ã¢Ã¥Ã°ÃµÃ­Ã¥Ã£Ã® Ã°Ã¥Ã£Ã¨Ã±Ã²Ã°Ã "
+
+msgid ""
+"\n"
 "\n"
 "Arguments:\n"
 msgstr ""
 "\n"
 "\n"
-"Àðãóìåíòû:\n"
+"Ãàðàìåòðû:\n"
 
 msgid "--\t\t\tOnly file names after this"
 msgstr "--\t\t\tÄàëåå Ã³ÃªÃ Ã§Ã»Ã¢Ã Ã¾Ã²Ã±Ã¿ Ã²Ã®Ã«Ã¼ÃªÃ® Ã¨Ã¬Ã¥Ã­Ã  Ã´Ã Ã©Ã«Ã®Ã¢"
@@ -2403,6 +3008,9 @@ msgstr "-v\t\t\t
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tÃåæèì Ex (êàê \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tÓëó÷øåííûé Ã°Ã¥Ã¦Ã¨Ã¬ Ex"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tÒèõèé (ïàêåòíûé) Ã°Ã¥Ã¦Ã¨Ã¬ (òîëüêî Ã¤Ã«Ã¿ \"ex\")"
 
@@ -2425,7 +3033,7 @@ msgid "-M\t\t\tModifications in text not allowed"
 msgstr "-M\t\t\tÃåç Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã®Ã±Ã²Ã¨ Ã¢Ã­Ã¥Ã±Ã¥Ã­Ã¨Ã¿ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã© Ã¢ Ã²Ã¥ÃªÃ±Ã²"
 
 msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tÃèíàðíûé Ã°Ã¥Ã¦Ã¨Ã¬"
+msgstr "-b\t\t\tÄâîè÷íûé Ã°Ã¥Ã¦Ã¨Ã¬"
 
 msgid "-l\t\t\tLisp mode"
 msgstr "-l\t\t\tÃåæèì Lisp"
@@ -2436,8 +3044,11 @@ msgstr "-C\t\t\t
 msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
 msgstr "-N\t\t\tÃåæèì Ã­Ã¥Ã¯Ã®Ã«Ã­Ã®Ã© Ã±Ã®Ã¢Ã¬Ã¥Ã±Ã²Ã¨Ã¬Ã®Ã±Ã²Ã¨ Ã± Vi: 'nocompatible'"
 
-msgid "-V[N]\t\tVerbose level"
-msgstr "-V[N]\t\tÓðîâåíü Ã¯Ã®Ã¤Ã°Ã®Ã¡Ã­Ã®Ã±Ã²Ã¨ Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã©"
+# \n\t\t.. Ã¤Ã«Ã¿ Ã³Ã¬Ã¥Ã¹Ã¥Ã­Ã¨Ã¿ Ã¢ 80 Ã±Ã²Ã®Ã«Ã¡Ã¶Ã®Ã¢
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr ""
+"-V[N][ôàéë]\t\tÂûâîäèòü Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã»Ã¥ Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã¿\n"
+"\t\t\t\t[óðîâåíü N] [çàïèñûâàòü Ã¢ Ã´Ã Ã©Ã«]"
 
 msgid "-D\t\t\tDebugging mode"
 msgstr "-D\t\t\tÃåæèì Ã®Ã²Ã«Ã Ã¤ÃªÃ¨"
@@ -2481,8 +3092,17 @@ msgstr "-U <gvimrc>\t\t
 msgid "--noplugin\t\tDon't load plugin scripts"
 msgstr "--noplugin\t\tÃÃ¥ Ã§Ã Ã£Ã°Ã³Ã¦Ã Ã²Ã¼ Ã±Ã¶Ã¥Ã­Ã Ã°Ã¨Ã¨ Ã¬Ã®Ã¤Ã³Ã«Ã¥Ã©"
 
+# \n\t\t.. Ã¤Ã«Ã¿ Ã³Ã¬Ã¥Ã¹Ã¥Ã­Ã¨Ã¿ Ã¢ 80 Ã±Ã²Ã®Ã«Ã¡Ã¶Ã®Ã¢
+msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+msgstr ""
+"-p[N]\t\tÎòêðûòü N Ã¢ÃªÃ«Ã Ã¤Ã®Ãª (ïî Ã³Ã¬Ã®Ã«Ã·Ã Ã­Ã¨Ã¾: Ã¯Ã® Ã®Ã¤Ã­Ã®Ã©\n"
+"\t\t\t\tíà ÃªÃ Ã¦Ã¤Ã»Ã© Ã´Ã Ã©Ã«)"
+
+# \n\t\t.. Ã¤Ã«Ã¿ Ã³Ã¬Ã¥Ã¹Ã¥Ã­Ã¨Ã¿ Ã¢ 80 Ã±Ã²Ã®Ã«Ã¡Ã¶Ã®Ã¢
 msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tÎòêðûòü N Ã®ÃªÃ®Ã­ (ïî Ã³Ã¬Ã®Ã«Ã·Ã Ã­Ã¨Ã¾: Ã¯Ã® Ã®Ã¤Ã­Ã®Ã¬Ã³ Ã­Ã  ÃªÃ Ã¦Ã¤Ã»Ã© Ã´Ã Ã©Ã«)"
+msgstr ""
+"-o[N]\t\tÎòêðûòü N Ã®ÃªÃ®Ã­ (ïî Ã³Ã¬Ã®Ã«Ã·Ã Ã­Ã¨Ã¾: Ã¯Ã® Ã®Ã¤Ã­Ã®Ã¬Ã³\n"
+"\t\t\t\tíà ÃªÃ Ã¦Ã¤Ã»Ã© Ã´Ã Ã©Ã«)"
 
 msgid "-O[N]\t\tLike -o but split vertically"
 msgstr "-O[N]\t\tÒî Ã¦Ã¥, Ã·Ã²Ã® Ã¨ -o, Ã­Ã® Ã± Ã¢Ã¥Ã°Ã²Ã¨ÃªÃ Ã«Ã¼Ã­Ã»Ã¬ Ã°Ã Ã§Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¥Ã¬ Ã®ÃªÃ®Ã­"
@@ -2499,11 +3119,17 @@ msgstr "--cmd <
 msgid "-c <command>\t\tExecute <command> after loading the first file"
 msgstr "-c <êîìàíäà>\t\tÂûïîëíèòü <êîìàíäó> Ã¯Ã®Ã±Ã«Ã¥ Ã§Ã Ã£Ã°Ã³Ã§ÃªÃ¨ Ã¯Ã¥Ã°Ã¢Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã "
 
+# \n\t\t.. Ã¤Ã«Ã¿ Ã³Ã¬Ã¥Ã¹Ã¥Ã­Ã¨Ã¿ Ã¢ 80 Ã±Ã²Ã®Ã«Ã¡Ã¶Ã®Ã¢
 msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <ñåàíñ>\t\tÃðî÷èòàòü Ã±Ã¶Ã¥Ã­Ã Ã°Ã¨Ã© <ñåàíñà> Ã¯Ã®Ã±Ã«Ã¥ Ã§Ã Ã£Ã°Ã³Ã§ÃªÃ¨ Ã¯Ã¥Ã°Ã¢Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã "
+msgstr ""
+"-S <ñåàíñ>\t\tÃðî÷èòàòü Ã±Ã¶Ã¥Ã­Ã Ã°Ã¨Ã© <ñåàíñà> Ã¯Ã®Ã±Ã«Ã¥ Ã§Ã Ã£Ã°Ã³Ã§ÃªÃ¨\n"
+"\t\t\t\tïåðâîãî Ã´Ã Ã©Ã«Ã "
 
+# \n\t\t.. Ã¤Ã«Ã¿ Ã³Ã¬Ã¥Ã¹Ã¥Ã­Ã¨Ã¿ Ã¢ 80 Ã±Ã²Ã®Ã«Ã¡Ã¶Ã®Ã¢
 msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <ñöåíàðèé>\tÃðî÷èòàòü ÃªÃ®Ã¬Ã Ã­Ã¤Ã» ÃŽÃ¡Ã»Ã·Ã­Ã®Ã£Ã® Ã°Ã¥Ã¦Ã¨Ã¬Ã  Ã¨Ã§ Ã´Ã Ã©Ã«Ã  <ñöåíàðèÿ>"
+msgstr ""
+"-s <ñöåíàðèé>\tÃðî÷èòàòü ÃªÃ®Ã¬Ã Ã­Ã¤Ã» ÃŽÃ¡Ã»Ã·Ã­Ã®Ã£Ã® Ã°Ã¥Ã¦Ã¨Ã¬Ã  Ã¨Ã§\n"
+"\t\t\t\tôàéëà <ñöåíàðèÿ>"
 
 msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
 msgstr "-w <ñöåíàðèé>\tÄîáàâëÿòü Ã¢Ã±Ã¥ Ã¢Ã¢Ã¥Ã¤Â¸Ã­Ã­Ã»Ã¥ ÃªÃ®Ã¬Ã Ã­Ã¤Ã» Ã¢ Ã´Ã Ã©Ã« <ñöåíàðèÿ>"
@@ -2515,7 +3141,7 @@ msgid "-x\t\t\tEdit encrypted files"
 msgstr "-x\t\t\tÃåäàêòèðîâàíèå Ã§Ã Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã­Ã»Ãµ Ã´Ã Ã©Ã«Ã®Ã¢"
 
 msgid "-display <display>\tConnect vim to this particular X-server"
-msgstr "-display <ýêðàí>\tÃîäñîåäèíèòü vim Ãª Ã³ÃªÃ Ã§Ã Ã­Ã­Ã®Ã¬Ã³ Ã±Ã¥Ã°Ã¢Ã¥Ã°Ã³ X"
+msgstr "-display <ýêðàí>\tÃîäñîåäèíèòü VIM Ãª Ã³ÃªÃ Ã§Ã Ã­Ã­Ã®Ã¬Ã³ X-ñåðâåðó"
 
 msgid "-X\t\t\tDo not connect to X server"
 msgstr "-X\t\t\tÃÃ¥ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¿Ã²Ã¼ Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¥ Ã± Ã±Ã¥Ã°Ã¢Ã¥Ã°Ã®Ã¬ X"
@@ -2536,6 +3162,11 @@ msgid ""
 msgstr ""
 "--remote-wait-silent <ôàéëû>  Ã’î Ã¦Ã¥, Ã­Ã® Ã¡Ã¥Ã§ Ã¦Ã Ã«Ã®Ã¡ Ã­Ã  Ã®Ã²Ã±Ã³Ã²Ã±Ã²Ã¢Ã¨Ã¥ Ã±Ã¥Ã°Ã¢Ã¥Ã°Ã "
 
+msgid ""
+"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+msgstr ""
+"--remote-tab[-wait][-silent] <ôàéëû>  Ã’î Ã¦Ã¥, Ã·Ã²Ã® Ã¨ --remote, Ã­Ã® Ã± Ã¢ÃªÃ«Ã Ã¤ÃªÃ Ã¬Ã¨"
+
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <êíîïêè>\tÎòïðàâèòü <êíîïêè> Ã­Ã  Ã±Ã¥Ã°Ã¢Ã¥Ã° Vim Ã¨ Ã¢Ã»Ã©Ã²Ã¨"
 
@@ -2549,6 +3180,9 @@ msgid "--servername <name>\tSend to/become the Vim server <name>"
 msgstr ""
 "--servername <èìÿ>\tÎòïðàâèòü Ã­Ã /ñòàòü Ã±Ã¥Ã°Ã¢Ã¥Ã°Ã®Ã¬ Vim Ã± Ã³ÃªÃ Ã§Ã Ã­Ã­Ã»Ã¬ <èìåíåì>"
 
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <ôàéë>\tÇàïèñàòü Ã¢Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã³Ã¾ Ã¬Ã¥Ã²ÃªÃ³ Ã® Ã§Ã Ã¯Ã³Ã±ÃªÃ¥ Ã¢ <ôàéë>"
+
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
 msgstr "-i <viminfo>\t\tÈñïîëüçîâàòü Ã¢Ã¬Ã¥Ã±Ã²Ã® .viminfo Ã´Ã Ã©Ã« <viminfo>"
 
@@ -2563,33 +3197,27 @@ msgid ""
 "Arguments recognised by gvim (Motif version):\n"
 msgstr ""
 "\n"
-"Àðãóìåíòû Ã¤Ã«Ã¿ gvim (âåðñèÿ Motif):\n"
+"Ãàðàìåòðû Ã¤Ã«Ã¿ gvim (âåðñèÿ Motif):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (neXtaw version):\n"
 msgstr ""
 "\n"
-"Àðãóìåíòû Ã¤Ã«Ã¿ gvim (âåðñèÿ neXtaw):\n"
+"Ãàðàìåòðû Ã¤Ã«Ã¿ gvim (âåðñèÿ neXtaw):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (Athena version):\n"
 msgstr ""
 "\n"
-"Àðãóìåíòû Ã¤Ã«Ã¿ gvim (âåðñèÿ Athena):\n"
+"Ãàðàìåòðû Ã¤Ã«Ã¿ gvim (âåðñèÿ Athena):\n"
 
 msgid "-display <display>\tRun vim on <display>"
-msgstr "-display <äèñïëåé>\tÇàïóñòèòü vim Ã­Ã  Ã³ÃªÃ Ã§Ã Ã­Ã­Ã®Ã¬ <äèñïëåå>"
+msgstr "-display <äèñïëåé>\tÇàïóñòèòü VIM Ã­Ã  Ã³ÃªÃ Ã§Ã Ã­Ã­Ã®Ã¬ <äèñïëåå>"
 
 msgid "-iconic\t\tStart vim iconified"
-msgstr "-iconic\t\tÇàïóñòèòü vim Ã¢ Ã±Ã¢Â¸Ã°Ã­Ã³Ã²Ã®Ã¬ Ã¢Ã¨Ã¤Ã¥"
-
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <èìÿ>\t\tÈñïîëüçîâàòü Ã°Ã¥Ã±Ã³Ã°Ã±, ÃªÃ Ãª Ã¥Ã±Ã«Ã¨ Ã¡Ã» vim Ã¡Ã»Ã« <èìåíåì>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (ÃÃ¥ Ã°Ã¥Ã Ã«Ã¨Ã§Ã®Ã¢Ã Ã­Ã®)\n"
+msgstr "-iconic\t\tÇàïóñòèòü VIM Ã¢ Ã±Ã¢Â¸Ã°Ã­Ã³Ã²Ã®Ã¬ Ã¢Ã¨Ã¤Ã¥"
 
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr ""
@@ -2633,27 +3261,14 @@ msgstr "-xrm <
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Àðãóìåíòû Ã¤Ã«Ã¿ gvim (âåðñèÿ RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <÷èñëî>\tÃåðâîíà÷àëüíàÿ Ã¸Ã¨Ã°Ã¨Ã­Ã  Ã®ÃªÃ­Ã  Ã¢ ÃªÃ®Ã«Ã®Ã­ÃªÃ Ãµ"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <÷èñëî>\tÃåðâîíà÷àëüíàÿ Ã¢Ã»Ã±Ã®Ã²Ã  Ã®ÃªÃ­Ã  Ã¢ Ã±Ã²Ã°Ã®ÃªÃ Ãµ"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
-"Àðãóìåíòû Ã¤Ã«Ã¿ gvim (âåðñèÿ GTK+):\n"
+"Ãàðàìåòðû Ã¤Ã«Ã¿ gvim (âåðñèÿ GTK+):\n"
 
 msgid "-display <display>\tRun vim on <display> (also: --display)"
 msgstr ""
-"-display <äèñïëåé>\tÇàïóñòèòü vim Ã­Ã  Ã³ÃªÃ Ã§Ã Ã­Ã­Ã®Ã¬ <äèñïëåå> (òàêæå: --display)"
+"-display <äèñïëåé>\tÇàïóñòèòü VIM Ã­Ã  Ã³ÃªÃ Ã§Ã Ã­Ã­Ã®Ã¬ <äèñïëåå> (òàêæå: --display)"
 
 msgid "--role <role>\tSet a unique role to identify the main window"
 msgstr ""
@@ -2662,9 +3277,15 @@ msgstr ""
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tÎòêðûòü Vim Ã¢Ã­Ã³Ã²Ã°Ã¨ Ã¤Ã°Ã³Ã£Ã®Ã£Ã® ÃªÃ®Ã¬Ã¯Ã®Ã­Ã¥Ã­Ã²Ã  GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tÂûâåñòè Window ID Ã¤Ã«Ã¿ gvim Ã­Ã  Ã±Ã²Ã Ã­Ã¤Ã Ã°Ã²Ã­Ã»Ã© Ã¯Ã®Ã²Ã®Ãª Ã¢Ã»Ã¢Ã®Ã¤Ã "
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <çàãîëîâîê Ã°Ã®Ã¤Ã¨Ã²Ã¥Ã«Ã¿>\tÎòêðûòü Vim Ã¢ Ã°Ã®Ã¤Ã¨Ã²Ã¥Ã«Ã¼Ã±ÃªÃ®Ã¬ Ã¯Ã°Ã¨Ã«Ã®Ã¦Ã¥Ã­Ã¨Ã¨"
 
+msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+msgstr "--windowid <HWND>\tÎòêðûòü Vim Ã¢Ã­Ã³Ã²Ã°Ã¨ Ã¤Ã°Ã³Ã£Ã®Ã£Ã® ÃªÃ®Ã¬Ã¯Ã®Ã­Ã¥Ã­Ã²Ã  win32"
+
 msgid "No display"
 msgstr "Ãåò Ã¤Ã¨Ã±Ã¯Ã«Ã¥Ã¿"
 
@@ -2717,7 +3338,6 @@ msgstr ""
 "\n"
 "èçìåí.  Ã±Ã²Ã°  ÃªÃ®Ã« Ã²Ã¥ÃªÃ±Ã²"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -2726,7 +3346,6 @@ msgstr ""
 "# ÃƒÃ«Ã®Ã¡Ã Ã«Ã¼Ã­Ã»Ã¥ Ã®Ã²Ã¬Ã¥Ã²ÃªÃ¨:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -2734,7 +3353,6 @@ msgstr ""
 "\n"
 "# Ã‘ïèñîê Ã¯Ã°Ã»Ã¦ÃªÃ®Ã¢ (ñíà÷àëà Ã¡Ã®Ã«Ã¥Ã¥ Ã±Ã¢Ã¥Ã¦Ã¨Ã¥):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -2763,24 +3381,14 @@ msgstr ""
 "ââîäà"
 
 msgid "E288: input method doesn't support any style"
-msgstr "E288: Ã¬Ã¥Ã²Ã®Ã¤ Ã¢Ã¢Ã®Ã¤Ã  Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã² Ã±Ã²Ã¨Ã«Ã¨"
+msgstr "E288: ÃŒÃ¥Ã²Ã®Ã¤ Ã¢Ã¢Ã®Ã¤Ã  Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã² Ã±Ã²Ã¨Ã«Ã¨"
 
 msgid "E289: input method doesn't support my preedit type"
 msgstr ""
-"E289: Ã¬Ã¥Ã²Ã®Ã¤ Ã¢Ã¢Ã®Ã¤Ã  Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã² Ã¬Ã®Ã© Ã²Ã¨Ã¯ Ã¯Ã°Ã¥Ã¤Ã¢Ã Ã°Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã®Ã£Ã® Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿"
-
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: Ã±Ã²Ã¨Ã«Ã¼ \"íàä Ã¬Ã¥Ã±Ã²Ã®Ã¬\" Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã² Ã³ÃªÃ Ã§Ã Ã­Ã¨Ã¿ Ã¸Ã°Ã¨Ã´Ã²Ã®Ã¢Ã®Ã£Ã® Ã­Ã Ã¡Ã®Ã°Ã "
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr ""
-"E291: GTK+ Ã¡Ã®Ã«Ã¥Ã¥ Ã°Ã Ã­Ã­Ã¥Ã© Ã¢Ã¥Ã°Ã±Ã¨Ã¨, Ã·Ã¥Ã¬ 1.2.3. ÃŽÃ¡Ã«Ã Ã±Ã²Ã¼ Ã±Ã®Ã±Ã²Ã®Ã¿Ã­Ã¨Ã¿ Ã­Ã¥ Ã°Ã Ã¡Ã®Ã²Ã Ã¥Ã²."
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: Ã‘åðâåð Ã¬Ã¥Ã²Ã®Ã¤Ã  Ã¢Ã¢Ã®Ã¤Ã  Ã­Ã¥ Ã§Ã Ã¯Ã³Ã¹Ã¥Ã­"
+"E289: ÃŒÃ¥Ã²Ã®Ã¤ Ã¢Ã¢Ã®Ã¤Ã  Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã² Ã¬Ã®Ã© Ã²Ã¨Ã¯ Ã¯Ã°Ã¥Ã¤Ã¢Ã Ã°Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã®Ã£Ã® Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿"
 
 msgid "E293: block was not locked"
-msgstr "E293: Ã¡Ã«Ã®Ãª Ã­Ã¥ Ã§Ã Ã¡Ã«Ã®ÃªÃ¨Ã°Ã®Ã¢Ã Ã­"
+msgstr "E293: Ãëîê Ã­Ã¥ Ã§Ã Ã¡Ã«Ã®ÃªÃ¨Ã°Ã®Ã¢Ã Ã­"
 
 msgid "E294: Seek error in swap file read"
 msgstr "E294: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã¯Ã®Ã¨Ã±ÃªÃ  Ã¯Ã°Ã¨ Ã·Ã²Ã¥Ã­Ã¨Ã¨ Ã±Ã¢Ã®Ã¯-ôàéëà"
@@ -2807,6 +3415,9 @@ msgstr "E298: 
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: ÃÃ¥ Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­ Ã¡Ã«Ã®Ãª Ã­Ã®Ã¬Ã¥Ã° 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã¯Ã°Ã¨ Ã®Ã¡Ã­Ã®Ã¢Ã«Ã¥Ã­Ã¨Ã¨ Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿ Ã±Ã¢Ã®Ã¯-ôàéëà"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: ÃŽÃ©, Ã¯Ã®Ã²Ã¥Ã°Ã¿Ã«Ã±Ã¿ Ã±Ã¢Ã®Ã¯-ôàéë!!!"
@@ -2819,8 +3430,8 @@ msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
 msgstr ""
 "E303: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã±Ã¢Ã®Ã¯-ôàéë Ã¤Ã«Ã¿ \"%s\", Ã¢Ã®Ã±Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­Ã¨Ã¥ Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã®"
 
-msgid "E304: ml_timestamp: Didn't get block 0??"
-msgstr "E304: ml_timestamp: ÃÃ¥ Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­ Ã¡Ã«Ã®Ãª 0??"
+msgid "E304: ml_upd_block0(): Didn't get block 0??"
+msgstr "E304: ml_upd_block0(): ÃÃ¥ Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­ Ã¡Ã«Ã®Ãª 0??"
 
 #, c-format
 msgid "E305: No swap file found for %s"
@@ -2868,6 +3479,14 @@ msgstr ""
 "ëèáî Ã´Ã Ã©Ã« Ã¡Ã»Ã« Ã¯Ã®Ã¢Ã°Ã¥Ã¦Ã¤Â¸Ã­."
 
 #, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr "E833: %s Ã§Ã Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­, Ã  Ã½Ã²Ã  Ã¢Ã¥Ã°Ã±Ã¨Ã¿ Vim Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã² Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã¨Ã¥"
+
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr " Ã¡Ã»Ã« Ã¯Ã®Ã¢Ã°Ã¥Ã¦Ã¤Â¸Ã­ (ðàçìåð Ã±Ã²Ã°Ã Ã­Ã¨Ã¶Ã» Ã¬Ã¥Ã­Ã¼Ã¸Ã¥ Ã¬Ã¨Ã­Ã¨Ã¬Ã Ã«Ã¼Ã­Ã®Ã£Ã® Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¿).\n"
+
+#, c-format
 msgid "Using swap file \"%s\""
 msgstr "Èñïîëüçóåòñÿ Ã±Ã¢Ã®Ã¯-ôàéë \"%s\""
 
@@ -2879,24 +3498,58 @@ msgid "E308: Warning: Original file may have been changed"
 msgstr "E308: Ãðåäóïðåæäåíèå: Ã¨Ã±ÃµÃ®Ã¤Ã­Ã»Ã© Ã´Ã Ã©Ã« Ã¬Ã®Ã£ Ã¡Ã»Ã²Ã¼ Ã¨Ã§Ã¬Ã¥Ã­Â¸Ã­"
 
 #, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: Ãåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã¡Ã«Ã®Ãª 1 Ã¨Ã§ %s"
-
-msgid "???MANY LINES MISSING"
-msgstr "???ÎÒÑÓÒÑÒÂÓÅÒ ÃŒÃÎÃΠÑÒÃÎÊ"
+msgid "Swap file is encrypted: \"%s\""
+msgstr "Ñâîï-ôàéë Ã§Ã Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­: \"%s\""
 
-msgid "???LINE COUNT WRONG"
-msgstr "???ÃÃ…ÃÃÀÂÈËÜÃÃŽÃ… Ã‡ÃÀ×ÅÃÈŠÑ×ÅÒ×ÈÊÀ Ã‘Ã’ÃÎÊ"
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"Åñëè Ã¢Ã» Ã¢Ã¢Ã¥Ã«Ã¨ Ã­Ã®Ã¢Ã»Ã© Ã¯Ã Ã°Ã®Ã«Ã¼ Ã¤Ã«Ã¿ Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿, Ã­Ã® Ã­Ã¥ Ã§Ã Ã¯Ã¨Ã±Ã Ã«Ã¨ Ã²Ã¥ÃªÃ±Ã²Ã®Ã¢Ã»Ã© Ã´Ã Ã©Ã«,"
 
-msgid "???EMPTY BLOCK"
-msgstr "???ÃÓÑÒÎÉ ÃËÎÊ"
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"òî Ã¢Ã¢Ã¥Ã¤Ã¨Ã²Ã¥ Ã­Ã®Ã¢Ã»Ã© Ã¯Ã Ã°Ã®Ã«Ã¼ Ã¤Ã«Ã¿ Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿."
+
+# Ãåðåâîä Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã¿ Ã°Ã Ã§Ã¤Ã¥Ã«Â¸Ã­ Ã­Ã  Ã¤Ã¢Ã¥ Ã·Ã Ã±Ã²Ã¨, Ã·Ã Ã±Ã²Ã¼ Ã¯Ã¥Ã°Ã¢Ã Ã¿
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"Åñëè Ã¢Ã» Ã§Ã Ã¯Ã¨Ã±Ã Ã«Ã¨ Ã²Ã¥ÃªÃ±Ã²Ã®Ã¢Ã»Ã© Ã´Ã Ã©Ã« Ã¯Ã®Ã±Ã«Ã¥ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¿ Ã¯Ã Ã°Ã®Ã«Ã¿ Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿, Ã²Ã® Ã­Ã Ã¦Ã¬Ã¨Ã²Ã¥"
+
+# Ãåðåâîä Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã¿ Ã°Ã Ã§Ã¤Ã¥Ã«Â¸Ã­ Ã­Ã  Ã¤Ã¢Ã¥ Ã·Ã Ã±Ã²Ã¨, Ã·Ã Ã±Ã²Ã¼ Ã¢Ã²Ã®Ã°Ã Ã¿
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"Enter Ã¤Ã«Ã¿ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¿ Ã®Ã¤Ã­Ã®Ã£Ã® ÃªÃ«Ã¾Ã·Ã  Ã¤Ã«Ã¿ Ã²Ã¥ÃªÃ±Ã²Ã®Ã¢Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã  Ã¨ Ã±Ã¢Ã®Ã¯-ôàéëà"
+
+#, c-format
+msgid "E309: Unable to read block 1 from %s"
+msgstr "E309: Ãåâîçìîæíî Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼ Ã¡Ã«Ã®Ãª 1 Ã¨Ã§ %s"
+
+msgid "???MANY LINES MISSING"
+msgstr "???ÎÒÑÓÒÑÒÂÓÅÒ ÃŒÃÎÃΠÑÒÃÎÊ"
+
+msgid "???LINE COUNT WRONG"
+msgstr "???ÃÃ…ÃÃÀÂÈËÜÃÃŽÃ… Ã‡ÃÀ×ÅÃÈŠÑרÒ×ÈÊÀ Ã‘Ã’ÃÎÊ"
+
+msgid "???EMPTY BLOCK"
+msgstr "???ÃÓÑÒÎÉ ÃËÎÊ"
 
 msgid "???LINES MISSING"
 msgstr "???ÎÒÑÓÒÑÒÂÓÞҠÑÒÃÎÊÈ"
 
 #, c-format
 msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã»Ã© Ã¡Ã«Ã®Ãª 1 ID (%s Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã´Ã Ã©Ã«Ã®Ã¬ .swp?)"
+msgstr "E310: Ãåïðàâèëüíûé Ã¡Ã«Ã®Ãª 1 ID (%s Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã´Ã Ã©Ã«Ã®Ã¬ .swp?)"
 
 msgid "???BLOCK MISSING"
 msgstr "???ÃÃÃŽÃÓÙÅàÃËÎÊ"
@@ -2920,7 +3573,7 @@ msgstr ""
 "ñ ???"
 
 msgid "See \":help E312\" for more information."
-msgstr "Ñì. Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã³Ã¾ Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¾ Ã¢ Ã±Ã¯Ã°Ã Ã¢Ã®Ã·Ã­Ã¨ÃªÃ¥ (\":help E312\")"
+msgstr "Ñì. \":help E312\" Ã¤Ã«Ã¿ Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¥Ã«Ã¼Ã­Ã®Ã© Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¨."
 
 msgid "Recovery completed. You should check if everything is OK."
 msgstr "Âîññòàíîâëåíèå Ã§Ã Ã¢Ã¥Ã°Ã¸Ã¥Ã­Ã®. Ãðîâåðüòå, Ã¢Ã±Â¸ Ã«Ã¨ Ã¢ Ã¯Ã®Ã°Ã¿Ã¤ÃªÃ¥."
@@ -2932,15 +3585,23 @@ msgstr ""
 "\n"
 "(Ìîæåòå Ã§Ã Ã¯Ã¨Ã±Ã Ã²Ã¼ Ã´Ã Ã©Ã« Ã¯Ã®Ã¤ Ã¤Ã°Ã³Ã£Ã¨Ã¬ Ã¨Ã¬Ã¥Ã­Ã¥Ã¬ Ã¨ Ã±Ã°Ã Ã¢Ã­Ã¨Ã²Ã¼ Ã¥Ã£Ã® Ã± Ã¨Ã±ÃµÃ®Ã¤Ã­Ã»Ã¬\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "ôàéëîì Ã¯Ã°Ã¨ Ã¯Ã®Ã¬Ã®Ã¹Ã¨ Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã¬Ã» diff).\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "ôàéëîì Ã¯Ã°Ã¨ Ã¯Ã®Ã¬Ã®Ã¹Ã¨ Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã¬Ã» diff)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "Âîññòàíîâëåíèå Ã§Ã Ã¢Ã¥Ã°Ã¸Ã¥Ã­Ã®. Ã‘îäåðæèìîå Ã¡Ã³Ã´Ã¥Ã°Ã®Ã¢ Ã¨ Ã´Ã Ã©Ã«Ã®Ã¢ Ã½ÃªÃ¢Ã¨Ã¢Ã Ã«Ã¥Ã­Ã²Ã­Ã®."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"Çàòåì Ã³Ã¤Ã Ã«Ã¨Ã²Ã¥ Ã´Ã Ã©Ã« .swp.\n"
 "\n"
+"Âåðîÿòíî, Ã±Ã¥Ã©Ã·Ã Ã± Ã¢Ã» Ã§Ã ÃµÃ®Ã²Ã¨Ã²Ã¥ Ã³Ã¤Ã Ã«Ã¨Ã²Ã¼ Ã´Ã Ã©Ã« .swp.\n"
+"\n"
+
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "Èñïîëüçîâàíèå ÃªÃ«Ã¾Ã·Ã  Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿ Ã¨Ã§ Ã±Ã¢Ã®Ã¯-ôàéëà Ã¤Ã«Ã¿ Ã²Ã¥ÃªÃ±Ã²Ã®Ã¢Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã .\n"
 
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
@@ -3054,7 +3715,7 @@ msgid "E316: ml_get: cannot find line %ld"
 msgstr "E316: ml_get: Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã­Ã Ã©Ã²Ã¨ Ã±Ã²Ã°Ã®ÃªÃ³ %ld"
 
 msgid "E317: pointer block id wrong 3"
-msgstr "E317: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã®Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã³ÃªÃ Ã§Ã Ã²Ã¥Ã«Ã¿ Ã¡Ã«Ã®ÃªÃ  3"
+msgstr "E317: Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã³ÃªÃ Ã§Ã Ã²Ã¥Ã«Ã¿ Ã¡Ã«Ã®ÃªÃ  3"
 
 msgid "stack_idx should be 0"
 msgstr "çíà÷åíèå stack_idx Ã¤Ã®Ã«Ã¦Ã­Ã® Ã¡Ã»Ã²Ã¼ Ã°Ã Ã¢Ã­Ã® 0"
@@ -3063,7 +3724,7 @@ msgid "E318: Updated too many blocks?"
 msgstr "E318: ÃŽÃ¡Ã­Ã®Ã¢Ã«Ã¥Ã­Ã® Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¬Ã­Ã®Ã£Ã® Ã¡Ã«Ã®ÃªÃ®Ã¢?"
 
 msgid "E317: pointer block id wrong 4"
-msgstr "E317: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã®Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã³ÃªÃ Ã§Ã Ã²Ã¥Ã«Ã¿ Ã¡Ã«Ã®ÃªÃ  4"
+msgstr "E317: Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã³ÃªÃ Ã§Ã Ã²Ã¥Ã«Ã¿ Ã¡Ã«Ã®ÃªÃ  4"
 
 msgid "deleted block 1?"
 msgstr "óäàë¸í Ã¡Ã«Ã®Ãª 1?"
@@ -3073,24 +3734,28 @@ msgid "E320: Cannot find line %ld"
 msgstr "E320: Ã‘òðîêà %ld Ã­Ã¥ Ã®Ã¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã "
 
 msgid "E317: pointer block id wrong"
-msgstr "E317: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã®Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã³ÃªÃ Ã§Ã Ã²Ã¥Ã«Ã¿ Ã¡Ã«Ã®ÃªÃ "
+msgstr "E317: Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã³ÃªÃ Ã§Ã Ã²Ã¥Ã«Ã¿ Ã¡Ã«Ã®ÃªÃ "
 
 msgid "pe_line_count is zero"
 msgstr "çíà÷åíèå pe_line_count Ã°Ã Ã¢Ã­Ã® Ã­Ã³Ã«Ã¾"
 
 #, c-format
 msgid "E322: line number out of range: %ld past the end"
-msgstr "E322: Ã­Ã®Ã¬Ã¥Ã° Ã±Ã²Ã°Ã®ÃªÃ¨ Ã§Ã  Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã Ã¬Ã¨ Ã¤Ã¨Ã Ã¯Ã Ã§Ã®Ã­Ã : %ld"
+msgstr "E322: Ãîìåð Ã±Ã²Ã°Ã®ÃªÃ¨ Ã§Ã  Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã Ã¬Ã¨ Ã¤Ã¨Ã Ã¯Ã Ã§Ã®Ã­Ã : %ld"
 
 #, c-format
 msgid "E323: line count wrong in block %ld"
-msgstr "E323: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã®Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã±Ã·Â¸Ã²Ã·Ã¨ÃªÃ  Ã±Ã²Ã°Ã®Ãª Ã¢ Ã¡Ã«Ã®ÃªÃ¥ %ld"
+msgstr "E323: Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã±Ã·Â¸Ã²Ã·Ã¨ÃªÃ  Ã±Ã²Ã°Ã®Ãª Ã¢ Ã¡Ã«Ã®ÃªÃ¥ %ld"
 
 msgid "Stack size increases"
 msgstr "Ãàçìåð Ã±Ã²Ã¥ÃªÃ  Ã³Ã¢Ã¥Ã«Ã¨Ã·Ã¥Ã­"
 
 msgid "E317: pointer block id wrong 2"
-msgstr "E317: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã®Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã³ÃªÃ Ã§Ã Ã²Ã¥Ã«Ã¿ Ã¡Ã«Ã®ÃªÃ  2"
+msgstr "E317: Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã³ÃªÃ Ã§Ã Ã²Ã¥Ã«Ã¿ Ã¡Ã«Ã®ÃªÃ  2"
+
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773: Ãåòëÿ Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã¼Ã­Ã»Ãµ Ã±Ã±Ã»Ã«Ã®Ãª Ã¤Ã«Ã¿ \"%s\""
 
 msgid "E325: ATTENTION"
 msgstr "E325: Ã‚ÃÈÌÀÃÈÅ"
@@ -3102,8 +3767,9 @@ msgstr ""
 "\n"
 "Îáíàðóæåí Ã±Ã¢Ã®Ã¯-ôàéë Ã± Ã¨Ã¬Ã¥Ã­Ã¥Ã¬ \""
 
+# Ã‘ Ã¬Ã Ã«Ã¥Ã­Ã¼ÃªÃ®Ã© Ã¡Ã³ÃªÃ¢Ã», Ã·Ã²Ã®Ã¡Ã» Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã®Ã¢Ã Ã«Ã® Ã¯Ã® Ã±Ã²Ã¨Ã«Ã¾ Ã±Ã®Ã±Ã¥Ã¤Ã­Ã¨Ã¬ Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã¿Ã¬.
 msgid "While opening file \""
-msgstr "Ãðè Ã®Ã²ÃªÃ°Ã»Ã²Ã¨Ã¨ Ã´Ã Ã©Ã«Ã : \""
+msgstr "ïðè Ã®Ã²ÃªÃ°Ã»Ã²Ã¨Ã¨ Ã´Ã Ã©Ã«Ã : \""
 
 msgid "      NEWER than swap file!\n"
 msgstr "                    Ãîëåå Ã‘ÂÅÆÈÉ, Ã·Ã¥Ã¬ Ã±Ã¢Ã®Ã¯-ôàéë!\n"
@@ -3112,24 +3778,23 @@ msgstr "                    
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) Ã‚îçìîæíî, Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã´Ã Ã©Ã«Ã  Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¿Ã¥Ã²Ã±Ã¿ Ã¢ Ã¤Ã°Ã³Ã£Ã®Ã© Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã¬Ã¥.\n"
-"    Ã…ñëè Ã½Ã²Ã® Ã²Ã Ãª, Ã²Ã® Ã¡Ã³Ã¤Ã¼Ã²Ã¥ Ã¢Ã­Ã¨Ã¬Ã Ã²Ã¥Ã«Ã¼Ã­Ã» Ã¯Ã°Ã¨ Ã¢Ã­Ã¥Ã±Ã¥Ã­Ã¨Ã¨ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã©,\n"
-"    Ã·Ã²Ã®Ã¡Ã» Ã³ Ã¢Ã Ã± Ã­Ã¥ Ã¯Ã®Ã¿Ã¢Ã¨Ã«Ã®Ã±Ã¼ Ã¤Ã¢Ã  Ã°Ã Ã§Ã­Ã»Ãµ Ã¢Ã Ã°Ã¨Ã Ã­Ã²Ã  Ã®Ã¤Ã­Ã®Ã£Ã® Ã¨ Ã²Ã®Ã£Ã® Ã¦Ã¥ Ã´Ã Ã©Ã«Ã .\n"
-
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Ã‡Ã Ã¢Ã¥Ã°Ã¸Ã¨Ã²Ã¥ Ã°Ã Ã¡Ã®Ã²Ã³ Ã¨Ã«Ã¨ Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã Ã©Ã²Ã¥ Ã± Ã®Ã±Ã²Ã®Ã°Ã®Ã¦Ã­Ã®Ã±Ã²Ã¼Ã¾.\n"
+"(1) Ã‚îçìîæíî, Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¥ Ã½Ã²Ã®Ã£Ã® Ã¦Ã¥ Ã´Ã Ã©Ã«Ã  Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¿Ã¥Ã²Ã±Ã¿ Ã¢ Ã¤Ã°Ã³Ã£Ã®Ã© Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã¬Ã¥.\n"
+"    Ã…ñëè Ã½Ã²Ã® Ã²Ã Ãª, Ã²Ã® Ã¡Ã³Ã¤Ã¼Ã²Ã¥ Ã¢Ã­Ã¨Ã¬Ã Ã²Ã¥Ã«Ã¼Ã­Ã» Ã¯Ã°Ã¨ Ã¢Ã­Ã¥Ã±Ã¥Ã­Ã¨Ã¨ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã©, Ã·Ã²Ã®Ã¡Ã»\n"
+"    Ã³ Ã¢Ã Ã± Ã­Ã¥ Ã¯Ã®Ã¿Ã¢Ã¨Ã«Ã®Ã±Ã¼ Ã¤Ã¢Ã  Ã°Ã Ã§Ã­Ã»Ãµ Ã¢Ã Ã°Ã¨Ã Ã­Ã²Ã  Ã®Ã¤Ã­Ã®Ã£Ã® Ã¨ Ã²Ã®Ã£Ã® Ã¦Ã¥ Ã´Ã Ã©Ã«Ã ."
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
+# Ã‘îîáùåíèå Ã°Ã Ã§Ã¤Ã¥Ã«Ã¥Ã­Ã®, " \n" Ã¤Ã®Ã¡Ã Ã¢Ã«Ã¥Ã­Ã® Ã².ê. Ã±Ã²Ã°Ã®ÃªÃ  Ã­Ã¥ Ã¯Ã®Ã¬Ã¥Ã¹Ã Ã¥Ã²Ã±Ã¿.
+msgid "  Quit, or continue with caution.\n"
 msgstr ""
-"\n"
-"(2) Ãðåäûäóùèé Ã±Ã¥Ã Ã­Ã± Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿ Ã½Ã²Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã  Ã§Ã Ã¢Ã¥Ã°Ã¸Â¸Ã­ Ã Ã¢Ã Ã°Ã¨Ã©Ã­Ã®.\n"
+" \n"
+"    Ã‡Ã Ã¢Ã¥Ã°Ã¸Ã¨Ã²Ã¥ Ã°Ã Ã¡Ã®Ã²Ã³ Ã¨Ã«Ã¨ Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã Ã©Ã²Ã¥ Ã± Ã®Ã±Ã²Ã®Ã°Ã®Ã¦Ã­Ã®Ã±Ã²Ã¼Ã¾.\n"
+
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Ã‘åàíñ Ã°Ã¥Ã¤Ã ÃªÃ²Ã¨Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿ Ã½Ã²Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã  Ã§Ã Ã¢Ã¥Ã°Ã¸Â¸Ã­ Ã Ã¢Ã Ã°Ã¨Ã©Ã­Ã®.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Ã‚ Ã½Ã²Ã®Ã¬ Ã±Ã«Ã³Ã·Ã Ã¥, Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã©Ã²Ã¥ ÃªÃ®Ã¬Ã Ã­Ã¤Ã³ \":recover\" Ã¨Ã«Ã¨ \"vim -r "
@@ -3139,7 +3804,7 @@ msgid ""
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
 "\"\n"
-"    Ã¤Ã«Ã¿ Ã¢Ã®Ã±Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­Ã¨Ã¿ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã© (ñì. \":help Ã¢Ã®Ã±Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­Ã¨Ã¥\").\n"
+"    Ã¤Ã«Ã¿ Ã¢Ã®Ã±Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­Ã¨Ã¿ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã© (ñì. \":help recovery\").\n"
 
 msgid "    If you did this already, delete the swap file \""
 msgstr "    Ã…ñëè Ã¢Ã» Ã³Ã¦Ã¥ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¿Ã«Ã¨ Ã½Ã²Ã³ Ã®Ã¯Ã¥Ã°Ã Ã¶Ã¨Ã¾, Ã³Ã¤Ã Ã«Ã¨Ã²Ã¥ Ã±Ã¢Ã®Ã¯-ôàéë \""
@@ -3158,7 +3823,7 @@ msgid "\" already exists!"
 msgstr "\" Ã³Ã¦Ã¥ Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã²!"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM - Ã‚ÃÈÌÀÃÈÅ"
+msgstr "VIM \97 Ã‚ÃÈÌÀÃÈÅ"
 
 msgid "Swap file already exists!"
 msgstr "Ñâîï-ôàéë Ã³Ã¦Ã¥ Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã²!"
@@ -3180,16 +3845,16 @@ msgid ""
 "&Open Read-Only\n"
 "&Edit anyway\n"
 "&Recover\n"
+"&Delete it\n"
 "&Quit\n"
-"&Abort\n"
-"&Delete it"
+"&Abort"
 msgstr ""
 "&O ÃŽÃ²ÃªÃ°Ã»Ã²Ã¼ Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿\n"
 "&E Ãåäàêòèðîâàòü\n"
 "&R Ã‚îññòàíîâèòü\n"
+"&D Ã“äàëèòü\n"
 "&Q Ã‚ûõîä\n"
-"&A Ãðåðâàòü\n"
-"&D Ã“äàëèòü"
+"&A Ãðåðâàòü"
 
 msgid "E326: Too many swap files found"
 msgstr "E326: ÃŽÃ¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã® Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¬Ã­Ã®Ã£Ã® Ã±Ã¢Ã®Ã¯-ôàéëîâ"
@@ -3200,8 +3865,13 @@ msgstr "E327: 
 msgid "E328: Menu only exists in another mode"
 msgstr "E328: ÃŒÃ¥Ã­Ã¾ Ã¢ Ã½Ã²Ã®Ã¬ Ã°Ã¥Ã¦Ã¨Ã¬Ã¥ Ã­Ã¥ Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã²"
 
-msgid "E329: No menu of that name"
-msgstr "E329: Ãåò Ã¬Ã¥Ã­Ã¾ Ã± Ã²Ã ÃªÃ¨Ã¬ Ã¨Ã¬Ã¥Ã­Ã¥Ã¬"
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: Ãåò Ã¬Ã¥Ã­Ã¾ %s"
+
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: Ãóñòîå Ã¨Ã¬Ã¿ Ã¬Ã¥Ã­Ã¾"
 
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: Ãóòü Ãª Ã¬Ã¥Ã­Ã¾ Ã­Ã¥ Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã¢Ã¥Ã±Ã²Ã¨ Ãª Ã¯Ã®Ã¤Ã¬Ã¥Ã­Ã¾"
@@ -3239,7 +3909,7 @@ msgid "E336: Menu path must lead to a sub-menu"
 msgstr "E336: Ãóòü Ãª Ã¬Ã¥Ã­Ã¾ Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã¢Ã¥Ã±Ã²Ã¨ Ãª Ã¯Ã®Ã¤Ã¬Ã¥Ã­Ã¾"
 
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: ÃŒÃ¥Ã­Ã¾ Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã® -- Ã¯Ã°Ã®Ã¢Ã¥Ã°Ã¼Ã²Ã¥ Ã¨Ã¬Ã¥Ã­Ã  Ã¬Ã¥Ã­Ã¾"
+msgstr "E337: ÃŒÃ¥Ã­Ã¾ Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã® \97 Ã¯Ã°Ã®Ã¢Ã¥Ã°Ã¼Ã²Ã¥ Ã¨Ã¬Ã¥Ã­Ã  Ã¬Ã¥Ã­Ã¾"
 
 #, c-format
 msgid "Error detected while processing %s:"
@@ -3249,31 +3919,30 @@ msgstr "
 msgid "line %4ld:"
 msgstr "ñòðîêà %4ld:"
 
-msgid "[string too long]"
-msgstr "[ñëèøêîì Ã¤Ã«Ã¨Ã­Ã­Ã Ã¿ Ã±Ã²Ã°Ã®ÃªÃ ]"
+#, c-format
+msgid "E354: Invalid register name: '%s'"
+msgstr "E354: Ãåäîïóñòèìîå Ã¨Ã¬Ã¿ Ã°Ã¥Ã£Ã¨Ã±Ã²Ã°Ã : '%s'"
 
 msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
 msgstr ""
 "Ãåðåâîä Ã±Ã®Ã®Ã¡Ã¹Ã¥Ã­Ã¨Ã© Ã­Ã  Ã°Ã³Ã±Ã±ÃªÃ¨Ã© Ã¿Ã§Ã»Ãª: Ã‚àñèëèé Ãàãîçèí <vrr@users.sourceforge."
-"net>"
+"net>, Ã‘åðãåé Ã€Ã«Â¸Ã¸Ã¨Ã­ <alyoshin.s@gmail.com>"
 
 msgid "Interrupt: "
 msgstr "Ãðåðûâàíèå: "
 
-msgid "Hit ENTER to continue"
-msgstr "Äëÿ Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã¥Ã­Ã¨Ã¿ Ã­Ã Ã¦Ã¬Ã¨Ã²Ã¥ ENTER"
+msgid "Press ENTER or type command to continue"
+msgstr "Ãàæìèòå ENTER Ã¨Ã«Ã¨ Ã¢Ã¢Ã¥Ã¤Ã¨Ã²Ã¥ ÃªÃ®Ã¬Ã Ã­Ã¤Ã³ Ã¤Ã«Ã¿ Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã¥Ã­Ã¨Ã¿"
 
-msgid "Hit ENTER or type command to continue"
-msgstr "Äëÿ Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã¥Ã­Ã¨Ã¿ Ã­Ã Ã¦Ã¬Ã¨Ã²Ã¥ ENTER Ã¨Ã«Ã¨ Ã¢Ã¢Ã¥Ã¤Ã¨Ã²Ã¥ ÃªÃ®Ã¬Ã Ã­Ã¤Ã³"
+#, c-format
+msgid "%s line %ld"
+msgstr "%s Ã±Ã²Ã°Ã®ÃªÃ  %ld"
 
 msgid "-- More --"
 msgstr "-- Ãðîäîëæåíèå Ã±Ã«Ã¥Ã¤Ã³Ã¥Ã² --"
 
-msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-msgstr " (RET/BS: Ã±Ã²Ã°Ã®ÃªÃ , SPACE/b: Ã±Ã²Ã°Ã Ã­Ã¨Ã¶Ã , d/u: Ã¯Ã®Ã«Ã±Ã²Ã°Ã Ã­Ã¨Ã¶Ã», q: Ã¢Ã»ÃµÃ®Ã¤)"
-
-msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-msgstr " (RET: Ã±Ã²Ã°Ã®ÃªÃ , SPACE: Ã±Ã²Ã°Ã Ã­Ã¨Ã¶Ã , d: Ã¯Ã®Ã«Ã±Ã²Ã°Ã Ã­Ã¨Ã¶Ã», q: Ã¢Ã»ÃµÃ®Ã¤)"
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPACE/d/j: Ã½ÃªÃ°Ã Ã­/ñòðàíèöà/ñòðîêà Ã¢Ã­Ã¨Ã§, b/u/k: Ã¢Ã¢Ã¥Ã°Ãµ, q: Ã¢Ã»ÃµÃ®Ã¤ "
 
 msgid "Question"
 msgstr "Âîïðîñ"
@@ -3282,8 +3951,8 @@ msgid ""
 "&Yes\n"
 "&No"
 msgstr ""
-"&Äà\n"
-"&Ãåò"
+"&Äà\n"
+"&Ãåò"
 
 msgid ""
 "&Yes\n"
@@ -3292,11 +3961,14 @@ msgid ""
 "&Discard All\n"
 "&Cancel"
 msgstr ""
-"&Äà\n"
-"&Ãåò\n"
-"Ñîõðàíèòü &âñå\n"
-"&Ãîòåðÿòü Ã¢Ã±Ã¥\n"
-"Î&òìåíà"
+"&Y Ã„à\n"
+"&N Ãåò\n"
+"&A Ã‘îõðàíèòü Ã¢Ã±Ã¥\n"
+"&D Ãîòåðÿòü Ã¢Ã±Ã¥\n"
+"&C ÃŽÃ²Ã¬Ã¥Ã­Ã "
+
+msgid "Select Directory dialog"
+msgstr "Âûáîð ÃªÃ Ã²Ã Ã«Ã®Ã£Ã "
 
 msgid "Save File dialog"
 msgstr "Ñîõðàíåíèå Ã´Ã Ã©Ã«Ã "
@@ -3309,14 +3981,29 @@ msgid "E338: Sorry, no file browser in console mode"
 msgstr ""
 "E338: ÃˆÃ§Ã¢Ã¨Ã­Ã¨Ã²Ã¥, Ã­Ã® Ã¢ ÃªÃ®Ã­Ã±Ã®Ã«Ã¼Ã­Ã®Ã¬ Ã°Ã¥Ã¦Ã¨Ã¬Ã¥ Ã­Ã¥Ã² Ã¯Ã°Ã®Ã¢Ã®Ã¤Ã­Ã¨ÃªÃ  Ã¯Ã® Ã´Ã Ã©Ã«Ã®Ã¢Ã®Ã© Ã±Ã¨Ã±Ã²Ã¥Ã¬Ã¥"
 
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766: Ãåäîñòàòî÷íî Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢ Ã¤Ã«Ã¿ printf()"
+
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: ÃŽÃ¦Ã¨Ã¤Ã Ã«Ã±Ã¿ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã° Ã²Ã¨Ã¯Ã  Ã± Ã¯Ã«Ã Ã¢Ã Ã¾Ã¹Ã¥Ã© Ã²Ã®Ã·ÃªÃ®Ã© Ã¤Ã«Ã¿ printf()"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢ Ã¤Ã«Ã¿ printf()"
+
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: Ãðåäóïðåæäåíèå: ÃˆÃ§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¥ Ã´Ã Ã©Ã«Ã  Ã± Ã¯Ã°Ã Ã¢Ã Ã¬Ã¨ Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿"
 
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr "Ââåäèòå Ã­Ã®Ã¬Ã¥Ã° Ã¨ <Enter> Ã¨Ã«Ã¨ Ã¹Â¸Ã«ÃªÃ­Ã¨Ã²Ã¥ Ã¬Ã»Ã¸Ã¼Ã¾ (ïóñòî Ã¤Ã«Ã¿ Ã®Ã²Ã¬Ã¥Ã­Ã»): "
+
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "Ââåäèòå Ã­Ã®Ã¬Ã¥Ã° Ã¨ <Enter> (ïóñòî Ã¤Ã«Ã¿ Ã®Ã²Ã¬Ã¥Ã­Ã»): "
+
 msgid "1 more line"
 msgstr "Äîáàâëåíà Ã®Ã¤Ã­Ã  Ã±Ã²Ã°Ã®ÃªÃ "
 
 msgid "1 line less"
-msgstr "Óäàëåíà Ã®Ã¤Ã­Ã  Ã±Ã²Ã°Ã®ÃªÃ "
+msgstr "Óáðàíà Ã®Ã¤Ã­Ã  Ã±Ã²Ã°Ã®ÃªÃ "
 
 #, c-format
 msgid "%ld more lines"
@@ -3324,19 +4011,21 @@ msgstr "
 
 #, c-format
 msgid "%ld fewer lines"
-msgstr "Óäàëåíî Ã±Ã²Ã°Ã®Ãª: %ld"
+msgstr "Óáðàíî Ã±Ã²Ã°Ã®Ãª: %ld"
 
 msgid " (Interrupted)"
 msgstr " (Ãðåðâàíî)"
 
+msgid "Beep!"
+msgstr "Ãè-áè!"
+
 msgid "Vim: preserving files...\n"
-msgstr "Vim: Ã±Ã®ÃµÃ°Ã Ã­Ã¿Ã¾Ã²Ã±Ã¿ Ã´Ã Ã©Ã«Ã»...\n"
+msgstr "Vim: Ã±Ã®ÃµÃ°Ã Ã­Ã¥Ã­Ã¨Ã¥ Ã´Ã Ã©Ã«Ã®Ã¢...\n"
 
 #. close all memfiles, without deleting
 msgid "Vim: Finished.\n"
 msgstr "Vim: ÃƒÃ®Ã²Ã®Ã¢Ã®.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ÎØÈÃÊÀ: "
 
@@ -3381,7 +4070,7 @@ msgid "E547: Illegal mouseshape"
 msgstr "E547: Ãåäîïóñòèìàÿ Ã´Ã®Ã°Ã¬Ã  ÃªÃ³Ã°Ã±Ã®Ã°Ã "
 
 msgid "E548: digit expected"
-msgstr "E548: Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã²Ã±Ã¿ Ã¢Ã¢Ã¥Ã±Ã²Ã¨ Ã¶Ã¨Ã´Ã°Ã³"
+msgstr "E548: Ã’ðåáóåòñÿ Ã¢Ã¢Ã¥Ã±Ã²Ã¨ Ã¶Ã¨Ã´Ã°Ã³"
 
 msgid "E549: Illegal percentage"
 msgstr "E549: Ãåäîïóñòèìîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã¯Ã°Ã®Ã¶Ã¥Ã­Ã²Ã®Ã¢"
@@ -3390,11 +4079,14 @@ msgid "Enter encryption key: "
 msgstr "Ââåäèòå Ã¯Ã Ã°Ã®Ã«Ã¼ Ã¤Ã«Ã¿ Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿: "
 
 msgid "Enter same key again: "
-msgstr "        Ãîâòîðèòå Ã¢Ã¢Ã®Ã¤ Ã¯Ã Ã°Ã®Ã«Ã¿:"
+msgstr "Ãîâòîðèòå Ã¢Ã¢Ã®Ã¤ Ã¯Ã Ã°Ã®Ã«Ã¿: "
 
 msgid "Keys don't match!"
 msgstr "Ââåä¸ííûå Ã¯Ã Ã°Ã®Ã«Ã¨ Ã­Ã¥ Ã±Ã®Ã¢Ã¯Ã Ã¤Ã Ã¾Ã²!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¡Ã®Ã«Ã¼Ã¸Ã®Ã© Ã¯Ã³Ã²Ã¼ Ã¤Ã«Ã¿ Ã Ã¢Ã²Ã®Ã¤Ã®Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¿"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -3419,18 +4111,8 @@ msgstr "E346: 
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: Ã‚ Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã­Ã»Ãµ ÃªÃ Ã²Ã Ã«Ã®Ã£Ã Ãµ Ã¡Ã®Ã«Ã¼Ã¸Ã¥ Ã­Ã¥Ã² Ã´Ã Ã©Ã«Ã®Ã¢ \"%s\""
 
-msgid "E550: Missing colon"
-msgstr "E550: Ãðîïóùåíî Ã¤Ã¢Ã®Ã¥Ã²Ã®Ã·Ã¨Ã¥"
-
-msgid "E551: Illegal component"
-msgstr "E551: Ãåäîïóñòèìûé ÃªÃ®Ã¬Ã¯Ã®Ã­Ã¥Ã­Ã²"
-
-msgid "E552: digit expected"
-msgstr "E552: Ã’ðåáóåòñÿ Ã³ÃªÃ Ã§Ã Ã²Ã¼ Ã¶Ã¨Ã´Ã°Ã³"
-
-#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
-msgstr "Ãåâîçìîæíî Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¨Ã²Ã¼Ã±Ã¿ Ã± Netbeans #2"
+msgstr "Ãåâîçìîæíî Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¨Ã²Ã¼Ã±Ã¿ Ã± NetBeans #2"
 
 msgid "Cannot connect to Netbeans"
 msgstr "Ãåâîçìîæíî Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¨Ã²Ã¼Ã±Ã¿ Ã± NetBeans"
@@ -3447,21 +4129,37 @@ msgstr "
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Ãîòåðÿíî Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¥ Ã± NetBeans Ã¤Ã«Ã¿ Ã¡Ã³Ã´Ã¥Ã°Ã  %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeans Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã²Ã±Ã¿ Ã± Ã½Ã²Ã¨Ã¬ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: Ã³Ã¦Ã¥ Ã±Ã®Ã¥Ã¤Ã¨Ã­Â¸Ã­ Ã± NetBeans"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s Ã®Ã²ÃªÃ°Ã»Ã² Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿ (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: Ãåò Ã¨Ã¬Ã¥Ã­Ã¨ Ã¢ Ã¯Ã®Ã§Ã¨Ã¶Ã¨Ã¨ ÃªÃ³Ã°Ã±Ã®Ã°Ã "
+
+msgid "E774: 'operatorfunc' is empty"
+msgstr "E774: Ã‡Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥Ã¬ Ã®Ã¯Ã¶Ã¨Ã¨ 'operatorfunc' Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã¯Ã³Ã±Ã²Ã Ã¿ Ã±Ã²Ã°Ã®ÃªÃ "
+
+msgid "E775: Eval feature not available"
+msgstr "E775: eval Ã­Ã¥ Ã¤Ã®Ã±Ã²Ã³Ã¯Ã­Ã "
+
 msgid "Warning: terminal cannot highlight"
 msgstr "Ãðåäóïðåæäåíèå: Ã²Ã¥Ã°Ã¬Ã¨Ã­Ã Ã« Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¿Ã²Ã¼ Ã¯Ã®Ã¤Ã±Ã¢Ã¥Ã²ÃªÃ³"
 
 msgid "E348: No string under cursor"
 msgstr "E348: Ãåò Ã±Ã²Ã°Ã®ÃªÃ¨ Ã¢ Ã¯Ã®Ã§Ã¨Ã¶Ã¨Ã¨ ÃªÃ³Ã°Ã±Ã®Ã°Ã "
 
-msgid "E349: No identifier under cursor"
-msgstr "E349: Ãåò Ã¨Ã¬Ã¥Ã­Ã¨ Ã¢ Ã¯Ã®Ã§Ã¨Ã¶Ã¨Ã¨ ÃªÃ³Ã°Ã±Ã®Ã°Ã "
-
 msgid "E352: Cannot erase folds with current 'foldmethod'"
 msgstr ""
 "E352: Ãåâîçìîæíî Ã±Ã²Ã¥Ã°Ã¥Ã²Ã¼ Ã±ÃªÃ«Ã Ã¤ÃªÃ¨ Ã± Ã²Ã¥ÃªÃ³Ã¹Ã¨Ã¬ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥Ã¬ Ã®Ã¯Ã¶Ã¨Ã¨ 'foldmethod'"
 
 msgid "E664: changelist is empty"
-msgstr "E664: Ã±Ã¯Ã¨Ã±Ã®Ãª Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã© Ã¯Ã³Ã±Ã²Ã®Ã©"
+msgstr "E664: Ã‘ïèñîê Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã© Ã¯Ã³Ã±Ã²Ã®Ã©"
 
 msgid "E662: At start of changelist"
 msgstr "E662: Ã‚ Ã­Ã Ã·Ã Ã«Ã¥ Ã±Ã¯Ã¨Ã±ÃªÃ  Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã©"
@@ -3499,6 +4197,9 @@ msgstr "
 msgid "%ld lines indented "
 msgstr "Èçìåíåíû Ã®Ã²Ã±Ã²Ã³Ã¯Ã» Ã¢ Ã±Ã²Ã°Ã®ÃªÃ Ãµ (%ld) "
 
+msgid "E748: No previously used register"
+msgstr "E748: Ãåò Ã¯Ã°Ã¥Ã¤Ã»Ã¤Ã³Ã¹Ã¥Ã£Ã® Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã­Ã®Ã£Ã® Ã°Ã¥Ã£Ã¨Ã±Ã²Ã°Ã "
+
 #. must display the prompt
 msgid "cannot yank; delete anyway"
 msgstr "ñêîïèðîâàòü Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼, Ã³Ã¤Ã Ã«Ã¥Ã­Ã¨Ã¥ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¥Ã­Ã®"
@@ -3514,10 +4215,17 @@ msgstr "
 msgid "freeing %ld lines"
 msgstr "î÷èùåíî Ã±Ã²Ã°Ã®Ãª: %ld"
 
+msgid "block of 1 line yanked"
+msgstr "ñêîïèðîâàí Ã¡Ã«Ã®Ãª Ã¨Ã§ Ã®Ã¤Ã­Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¨"
+
 msgid "1 line yanked"
 msgstr "ñêîïèðîâàíà Ã®Ã¤Ã­Ã  Ã±Ã²Ã°Ã®ÃªÃ "
 
 #, c-format
+msgid "block of %ld lines yanked"
+msgstr "ñêîïèðîâàí Ã¡Ã«Ã®Ãª Ã¨Ã§ Ã±Ã²Ã°Ã®Ãª: %ld"
+
+#, c-format
 msgid "%ld lines yanked"
 msgstr "ñêîïèðîâàíî Ã±Ã²Ã°Ã®Ãª: %ld"
 
@@ -3536,7 +4244,6 @@ msgstr ""
 msgid "Illegal register name"
 msgstr "Ãåäîïóñòèìîå Ã¨Ã¬Ã¿ Ã°Ã¥Ã£Ã¨Ã±Ã²Ã°Ã "
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -3549,10 +4256,6 @@ msgid "E574: Unknown register type %d"
 msgstr "E574: Ãåèçâåñòíûé Ã²Ã¨Ã¯ Ã°Ã¥Ã£Ã¨Ã±Ã²Ã°Ã  %d"
 
 #, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: Ãåäîïóñòèìîå Ã¨Ã¬Ã¿ Ã°Ã¥Ã£Ã¨Ã±Ã²Ã°Ã : '%s'"
-
-#, c-format
 msgid "%ld Cols; "
 msgstr "Êîëîíîê: %ld; "
 
@@ -3561,8 +4264,24 @@ msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
 msgstr "Âûäåëåíî %s%ld Ã¨Ã§ %ld Ã±Ã²Ã°Ã®Ãª; %ld Ã¨Ã§ %ld Ã±Ã«Ã®Ã¢; %ld Ã¨Ã§ %ld Ã¡Ã Ã©Ã²"
 
 #, c-format
+msgid ""
+"Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+"Bytes"
+msgstr ""
+"Âûäåëåíî %s%ld Ã¨Ã§ %ld Ã±Ã²Ã°.; %ld Ã¨Ã§ %ld Ã±Ã«Ã®Ã¢; %ld Ã¨Ã§ %ld Ã±Ã¨Ã¬Ã¢.; %ld Ã¨Ã§ %ld "
+"áàéò"
+
+#, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
-msgstr "Êîë. %s Ã¨Ã§ %s;  Ã±Ã²Ã°. %ld Ã¨Ã§ %ld; Ã±Ã«Ã®Ã¢Ã® %ld Ã¨Ã§ %ld; Ã¡Ã Ã©Ã² %ld Ã¨Ã§ %ld"
+msgstr "Êîë. %s Ã¨Ã§ %s; Ã±Ã²Ã°. %ld Ã¨Ã§ %ld; Ã±Ã«. %ld Ã¨Ã§ %ld; Ã¡Ã Ã©Ã² %ld Ã¨Ã§ %ld"
+
+#, c-format
+msgid ""
+"Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+"%ld"
+msgstr ""
+"Êîë. %s Ã¨Ã§ %s; Ã±Ã²Ã°. %ld Ã¨Ã§ %ld; Ã±Ã«. %ld Ã¨Ã§ %ld; Ã±Ã¨Ã¬Ã¢. %ld Ã¨Ã§ %ld; Ã¡Ã Ã©Ã² %ld "
+"èç %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -3583,12 +4302,8 @@ msgstr "E519: 
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: ÃÃ¥ Ã¤Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã²Ã±Ã¿ Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬Ã­Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¥"
 
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\t ïîñëåäíèé Ã°Ã Ã§ Ã®Ã¯Ã¶Ã¨Ã¿ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã  Ã¢ "
+msgid "E846: Key code not set"
+msgstr "E846: ÃŠÃ®Ã¤ ÃªÃ«Ã Ã¢Ã¨Ã¸Ã¨ Ã­Ã¥ Ã³Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­"
 
 msgid "E521: Number required after ="
 msgstr "E521: Ãîñëå = Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã²Ã±Ã¿ Ã³ÃªÃ Ã§Ã Ã²Ã¼ Ã·Ã¨Ã±Ã«Ã®"
@@ -3610,7 +4325,13 @@ msgid "E531: Use \":gui\" to start the GUI"
 msgstr "E531: Ã„ëÿ Ã§Ã Ã¯Ã³Ã±ÃªÃ  Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ®Ã£Ã® Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã  Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã©Ã²Ã¥ \":gui\""
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¿ Ã®Ã¯Ã¶Ã¨Ã© 'backupext' Ã¨ 'patchmode' Ã°Ã Ã¢Ã­Ã»"
+msgstr "E589: Ã‡Ã­Ã Ã·Ã¥Ã­Ã¨Ã¿ Ã®Ã¯Ã¶Ã¨Ã© 'backupext' Ã¨ 'patchmode' Ã°Ã Ã¢Ã­Ã»"
+
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: ÃŠÃ®Ã­Ã´Ã«Ã¨ÃªÃ²Ã³Ã¥Ã² Ã±Ã® Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥Ã¬ 'listchars'"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: ÃŠÃ®Ã­Ã´Ã«Ã¨ÃªÃ²Ã³Ã¥Ã² Ã±Ã® Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥Ã¬ 'fillchars'"
 
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: ÃÃ¥ Ã¬Ã®Ã¦Ã¥Ã² Ã¡Ã»Ã²Ã¼ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã® Ã¢ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ®Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã¥ GTK+ 2"
@@ -3632,19 +4353,19 @@ msgid "E528: Must specify a ' value"
 msgstr "E528: Ãåîáõîäèìî Ã³ÃªÃ Ã§Ã Ã²Ã¼ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã¤Ã«Ã¿ '"
 
 msgid "E595: contains unprintable or wide character"
-msgstr "E595: Ã±Ã®Ã¤Ã¥Ã°Ã¦Ã¨Ã² Ã­Ã¥Ã¯Ã¥Ã·Ã Ã²Ã­Ã»Ã© Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¨Ã«Ã¨ Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¤Ã¢Ã®Ã©Ã­Ã®Ã© Ã¸Ã¨Ã°Ã¨Ã­Ã»"
+msgstr "E595: Ã‘îäåðæèò Ã­Ã¥Ã¯Ã¥Ã·Ã Ã²Ã­Ã»Ã© Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¨Ã«Ã¨ Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¤Ã¢Ã®Ã©Ã­Ã®Ã© Ã¸Ã¨Ã°Ã¨Ã­Ã»"
 
 msgid "E596: Invalid font(s)"
 msgstr "E596: Ãåïðàâèëüíûå Ã¸Ã°Ã¨Ã´Ã²Ã»"
 
 msgid "E597: can't select fontset"
-msgstr "E597: Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¢Ã»Ã¡Ã°Ã Ã²Ã¼ Ã¸Ã°Ã¨Ã´Ã²Ã®Ã¢Ã®Ã© Ã­Ã Ã¡Ã®Ã°"
+msgstr "E597: Ãåâîçìîæíî Ã¢Ã»Ã¡Ã°Ã Ã²Ã¼ Ã¸Ã°Ã¨Ã´Ã²Ã®Ã¢Ã®Ã© Ã­Ã Ã¡Ã®Ã°"
 
 msgid "E598: Invalid fontset"
 msgstr "E598: Ãåïðàâèëüíûé Ã¸Ã°Ã¨Ã´Ã²Ã®Ã¢Ã®Ã© Ã­Ã Ã¡Ã®Ã°"
 
 msgid "E533: can't select wide font"
-msgstr "E533: Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¢Ã»Ã¡Ã°Ã Ã²Ã¼ Ã¸Ã°Ã¨Ã´Ã² Ã± Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã Ã¬Ã¨ Ã¤Ã¢Ã®Ã©Ã­Ã®Ã© Ã¸Ã¨Ã°Ã¨Ã­Ã»"
+msgstr "E533: Ãåâîçìîæíî Ã¢Ã»Ã¡Ã°Ã Ã²Ã¼ Ã¸Ã°Ã¨Ã´Ã² Ã± Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã Ã¬Ã¨ Ã¤Ã¢Ã®Ã©Ã­Ã®Ã© Ã¸Ã¨Ã°Ã¨Ã­Ã»"
 
 msgid "E534: Invalid wide font"
 msgstr "E534: Ãåïðàâèëüíûé Ã¸Ã°Ã¨Ã´Ã² Ã± Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã Ã¬Ã¨ Ã¤Ã¢Ã®Ã©Ã­Ã®Ã© Ã¸Ã¨Ã°Ã¨Ã­Ã»"
@@ -3654,7 +4375,7 @@ msgid "E535: Illegal character after <%c>"
 msgstr "E535: Ãåïðàâèëüíûé Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¯Ã®Ã±Ã«Ã¥ <%c>"
 
 msgid "E536: comma required"
-msgstr "E536: Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã²Ã±Ã¿ Ã§Ã Ã¯Ã¿Ã²Ã Ã¿"
+msgstr "E536: Ã’ðåáóåòñÿ Ã§Ã Ã¯Ã¿Ã²Ã Ã¿"
 
 #, c-format
 msgid "E537: 'commentstring' must be empty or contain %s"
@@ -3669,10 +4390,10 @@ msgid "E540: Unclosed expression sequence"
 msgstr "E540: Ãåçàêðûòàÿ Ã¯Ã®Ã±Ã«Ã¥Ã¤Ã®Ã¢Ã Ã²Ã¥Ã«Ã¼Ã­Ã®Ã±Ã²Ã¼ Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¿"
 
 msgid "E541: too many items"
-msgstr "E541: Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¬Ã­Ã®Ã£Ã® Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã®Ã¢"
+msgstr "E541: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã®Ã¢"
 
 msgid "E542: unbalanced groups"
-msgstr "E542: Ã­Ã¥Ã±Ã¡Ã Ã«Ã Ã­Ã±Ã¨Ã°Ã®Ã¢Ã Ã­Ã­Ã»Ã¥ Ã£Ã°Ã³Ã¯Ã¯Ã»"
+msgstr "E542: Ãåñáàëàíñèðîâàííûå Ã£Ã°Ã³Ã¯Ã¯Ã»"
 
 msgid "E590: A preview window already exists"
 msgstr "E590: ÃŽÃªÃ­Ã® Ã¯Ã°Ã¥Ã¤Ã¯Ã°Ã®Ã±Ã¬Ã®Ã²Ã°Ã  Ã³Ã¦Ã¥ Ã¥Ã±Ã²Ã¼"
@@ -3693,6 +4414,13 @@ msgstr "E594: 
 msgid "E355: Unknown option: %s"
 msgstr "E355: Ãåèçâåñòíàÿ Ã®Ã¯Ã¶Ã¨Ã¿: %s"
 
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521: Ã’ðåáóåòñÿ Ã³ÃªÃ Ã§Ã Ã²Ã¼ Ã·Ã¨Ã±Ã«Ã®: &%s = '%s'"
+
 msgid ""
 "\n"
 "--- Terminal codes ---"
@@ -3763,7 +4491,7 @@ msgstr "mch_get_shellsize: 
 
 #. if Vim opened a window: Executing a shell may cause crashes
 msgid "E360: Cannot execute shell with -f option"
-msgstr "E360: Ãåâîçìîæíî Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ Ã®Ã¡Ã®Ã«Ã®Ã·ÃªÃ³ Ã± Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã®Ã¬ -f"
+msgstr "E360: Ãåâîçìîæíî Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ Ã®Ã¡Ã®Ã«Ã®Ã·ÃªÃ³ Ã± Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¬ -f"
 
 msgid "Cannot execute "
 msgstr "Ãåâîçìîæíî Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ "
@@ -3780,8 +4508,8 @@ msgstr "
 msgid "I/O ERROR"
 msgstr "ÎØÈÃÊÀ Ã‚ÂÎÄÀ/ÂÛÂÎÄÀ"
 
-msgid "...(truncated)"
-msgstr "...(îáðåçàíî)"
+msgid "Message"
+msgstr "Ñîîáùåíèå"
 
 msgid "'columns' is not 80, cannot execute external commands"
 msgstr "Çíà÷åíèå Ã®Ã¯Ã¶Ã¨Ã¨ 'columns' Ã­Ã¥ Ã°Ã Ã¢Ã­Ã® 80, Ã¢Ã­Ã¥Ã¸Ã­Ã¨Ã¥ Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã¬Ã» Ã­Ã¥ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¿Ã¾Ã²Ã±Ã¿"
@@ -3801,9 +4529,6 @@ msgstr "E613: 
 msgid "E238: Print error: %s"
 msgstr "E238: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã¯Ã¥Ã·Ã Ã²Ã¨: %s"
 
-msgid "Unknown"
-msgstr "Ãåèçâåñòíî"
-
 #, c-format
 msgid "Printing '%s'"
 msgstr "Ãå÷àòü '%s'"
@@ -3816,9 +4541,6 @@ msgstr "E244: 
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Ãåäîïóñòèìûé Ã±Ã¨Ã¬Ã¢Ã®Ã« '%c' Ã¢ Ã¨Ã¬Ã¥Ã­Ã¨ Ã¸Ã°Ã¨Ã´Ã²Ã  \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ãåäîïóñòèìîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨ 'osfiletype' -- Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿ Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Ã„âîéíîé Ã±Ã¨Ã£Ã­Ã Ã«, Ã§Ã Ã¢Ã¥Ã°Ã¸Ã¥Ã­Ã¨Ã¥ Ã°Ã Ã¡Ã®Ã²Ã»\n"
 
@@ -3849,6 +4571,20 @@ msgstr "
 
 msgid ""
 "\n"
+"Could not get security context for "
+msgstr ""
+"\n"
+"Ãåâîçìîæíî Ã¯Ã®Ã«Ã³Ã·Ã¨Ã²Ã¼ ÃªÃ®Ã­Ã²Ã¥ÃªÃ±Ã² Ã¡Ã¥Ã§Ã®Ã¯Ã Ã±Ã­Ã®Ã±Ã²Ã¨ Ã¤Ã«Ã¿ "
+
+msgid ""
+"\n"
+"Could not set security context for "
+msgstr ""
+"\n"
+"Ãåâîçìîæíî Ã³Ã±Ã²Ã Ã­Ã®Ã¢Ã¨Ã²Ã¼ ÃªÃ®Ã­Ã²Ã¥ÃªÃ±Ã² Ã¡Ã¥Ã§Ã®Ã¯Ã Ã±Ã­Ã®Ã±Ã²Ã¨ Ã¤Ã«Ã¿ "
+
+msgid ""
+"\n"
 "Cannot execute shell "
 msgstr ""
 "\n"
@@ -3892,6 +4628,10 @@ msgstr ""
 msgid "XSMP lost ICE connection"
 msgstr "XSMP Ã³Ã²Ã¥Ã°Ã¿Ã­Ã® Ã±Ã®Ã¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¥ ICE"
 
+#, c-format
+msgid "dlerror = \"%s\""
+msgstr "dlerror = \"%s\""
+
 msgid "Opening the X display failed"
 msgstr "Ãåóäà÷íîå Ã®Ã²ÃªÃ°Ã»Ã²Ã¨Ã¥ Ã¤Ã¨Ã±Ã¯Ã«Ã¥Ã¿ X"
 
@@ -3911,15 +4651,12 @@ msgstr "XSMP 
 msgid "At line"
 msgstr " ñòðîêå"
 
-msgid "Could not allocate memory for command line."
-msgstr "Ãåâîçìîæíî Ã¢Ã»Ã¤Ã¥Ã«Ã¨Ã²Ã¼ Ã¯Ã Ã¬Ã¿Ã²Ã¼ Ã¤Ã«Ã¿ ÃªÃ®Ã¬Ã Ã­Ã¤Ã­Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¨."
+msgid "Could not load vim32.dll!"
+msgstr "Ãåâîçìîæíî Ã§Ã Ã£Ã°Ã³Ã§Ã¨Ã²Ã¼ vim32.dll!"
 
 msgid "VIM Error"
 msgstr "Îøèáêà VIM"
 
-msgid "Could not load vim32.dll!"
-msgstr "Ãåâîçìîæíî Ã§Ã Ã£Ã°Ã³Ã§Ã¨Ã²Ã¼ vim32.dll!"
-
 msgid "Could not fix up function pointers to the DLL!"
 msgstr "Ãåâîçìîæíî Ã¨Ã±Ã¯Ã°Ã Ã¢Ã¨Ã²Ã¼ Ã³ÃªÃ Ã§Ã Ã²Ã¥Ã«Ã¨ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã© Ã¤Ã«Ã¿ DLL!"
 
@@ -3982,7 +4719,7 @@ msgid "E378: 'errorformat' contains no pattern"
 msgstr "E378: Ã‚ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¨ Ã®Ã¯Ã¶Ã¨Ã¨ 'errorformat' Ã®Ã²Ã±Ã³Ã²Ã±Ã²Ã¢Ã³Ã¥Ã² Ã¸Ã Ã¡Ã«Ã®Ã­"
 
 msgid "E379: Missing or empty directory name"
-msgstr "E379: Ã¨Ã¬Ã¿ ÃªÃ Ã²Ã Ã«Ã®Ã£Ã  Ã­Ã¥ Ã§Ã Ã¤Ã Ã­Ã® Ã¨Ã«Ã¨ Ã°Ã Ã¢Ã­Ã® Ã¯Ã³Ã±Ã²Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¥"
+msgstr "E379: ÃˆÃ¬Ã¿ ÃªÃ Ã²Ã Ã«Ã®Ã£Ã  Ã­Ã¥ Ã§Ã Ã¤Ã Ã­Ã® Ã¨Ã«Ã¨ Ã°Ã Ã¢Ã­Ã® Ã¯Ã³Ã±Ã²Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¥"
 
 msgid "E553: No more items"
 msgstr "E553: Ãîëüøå Ã­Ã¥Ã² Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã®Ã¢"
@@ -4008,22 +4745,29 @@ msgid "E382: Cannot write, 'buftype' option is set"
 msgstr ""
 "E382: Ã‡Ã Ã¯Ã¨Ã±Ã¼ Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã , Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨ 'buftype' Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã¯Ã³Ã±Ã²Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ®Ã©"
 
+msgid "Error file"
+msgstr "Ôàéë Ã®Ã¸Ã¨Ã¡Ã®Ãª"
+
+msgid "E683: File name missing or invalid pattern"
+msgstr "E683: Ãåò Ã¨Ã¬Ã¥Ã­Ã¨ Ã´Ã Ã©Ã«Ã  Ã¨Ã«Ã¨ Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã»Ã© Ã¸Ã Ã¡Ã«Ã®Ã­"
+
 #, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: Ã­Ã¥Ã¤Ã®Ã¯Ã³Ã±Ã²Ã¨Ã¬Ã»Ã© Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã² Ã¢ %s%%[]"
+msgid "Cannot open file \"%s\""
+msgstr "Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« \"%s\""
 
-msgid "E339: Pattern too long"
-msgstr "E339: Ã‘ëèøêîì Ã¤Ã«Ã¨Ã­Ã­Ã»Ã© Ã¸Ã Ã¡Ã«Ã®Ã­"
+msgid "E681: Buffer is not loaded"
+msgstr "E681: Ãóôåð Ã­Ã¥ Ã¢Ã»Ã£Ã°Ã³Ã¦Ã¥Ã­"
 
-msgid "E50: Too many \\z("
-msgstr "E50: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® \\z("
+msgid "E777: String or List expected"
+msgstr "E777: Ã’ðåáóåòñÿ Ã±Ã²Ã°Ã®ÃªÃ  Ã¨Ã«Ã¨ Ã±Ã¯Ã¨Ã±Ã®Ãª"
 
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® %s("
+msgid "E369: invalid item in %s%%[]"
+msgstr "E369: Ãåäîïóñòèìûé Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã² Ã¢ %s%%[]"
 
-msgid "E52: Unmatched \\z("
-msgstr "E52: Ãåò Ã¯Ã Ã°Ã» Ã¤Ã«Ã¿ \\z("
+#, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: Ãðîïóùåíà ] Ã¯Ã®Ã±Ã«Ã¥ %s["
 
 #, c-format
 msgid "E53: Unmatched %s%%("
@@ -4037,21 +4781,36 @@ msgstr "E54: 
 msgid "E55: Unmatched %s)"
 msgstr "E55: Ãåò Ã¯Ã Ã°Ã» Ã¤Ã«Ã¿ %s)"
 
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã¡Ã»Ã²Ã¼ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã® Ã§Ã¤Ã¥Ã±Ã¼"
+
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 Ã¨ Ã².ï. Ã­Ã¥ Ã¬Ã®Ã£Ã³Ã² Ã¡Ã»Ã²Ã¼ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã» Ã§Ã¤Ã¥Ã±Ã¼"
+
 #, c-format
-msgid "E56: %s* operand could be empty"
-msgstr "E56: Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¯Ã³Ã±Ã²Ã®Ã© Ã®Ã¯Ã¥Ã°Ã Ã­Ã¤ %s*"
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: Ãðîïóùåíà ] Ã¯Ã®Ã±Ã«Ã¥ %s%%["
 
 #, c-format
-msgid "E57: %s+ operand could be empty"
-msgstr "E57: Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¯Ã³Ã±Ã²Ã®Ã© Ã®Ã¯Ã¥Ã°Ã Ã­Ã¤ %s+"
+msgid "E70: Empty %s%%[]"
+msgstr "E70: Ãóñòîå %s%%[]"
+
+msgid "E339: Pattern too long"
+msgstr "E339: Ã‘ëèøêîì Ã¤Ã«Ã¨Ã­Ã­Ã»Ã© Ã¸Ã Ã¡Ã«Ã®Ã­"
+
+msgid "E50: Too many \\z("
+msgstr "E50: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® \\z("
 
 #, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: Ã­Ã¥Ã¤Ã®Ã¯Ã³Ã±Ã²Ã¨Ã¬Ã»Ã© Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¯Ã®Ã±Ã«Ã¥ %s@"
+msgid "E51: Too many %s("
+msgstr "E51: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® %s("
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: Ãåò Ã¯Ã Ã°Ã» Ã¤Ã«Ã¿ \\z("
 
 #, c-format
-msgid "E58: %s{ operand could be empty"
-msgstr "E58: Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¯Ã³Ã±Ã²Ã®Ã© Ã®Ã¯Ã¥Ã°Ã Ã­Ã¤ %s{"
+msgid "E59: invalid character after %s@"
+msgstr "E59: Ãåäîïóñòèìûé Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¯Ã®Ã±Ã«Ã¥ %s@"
 
 #, c-format
 msgid "E60: Too many complex %s{...}s"
@@ -4066,7 +4825,7 @@ msgid "E62: Nested %s%c"
 msgstr "E62: Ã‚ëîæåííûå %s%c"
 
 msgid "E63: invalid use of \\_"
-msgstr "E63: Ã­Ã¥Ã¤Ã®Ã¯Ã³Ã±Ã²Ã¨Ã¬Ã®Ã¥ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ \\_"
+msgstr "E63: Ãåäîïóñòèìîå Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¥ \\_"
 
 #, c-format
 msgid "E64: %s%c follows nothing"
@@ -4075,22 +4834,12 @@ msgstr "E64: %s%c 
 msgid "E65: Illegal back reference"
 msgstr "E65: Ãåäîïóñòèìàÿ Ã®Ã¡Ã°Ã Ã²Ã­Ã Ã¿ Ã±Ã±Ã»Ã«ÃªÃ "
 
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã¡Ã»Ã²Ã¼ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã® Ã§Ã¤Ã¥Ã±Ã¼"
-
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 Ã¨ Ã².ï. Ã­Ã¥ Ã¬Ã®Ã£Ã³Ã² Ã¡Ã»Ã²Ã¼ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã» Ã§Ã¤Ã¥Ã±Ã¼"
-
 msgid "E68: Invalid character after \\z"
 msgstr "E68: Ãåäîïóñòèìûé Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¯Ã®Ã±Ã«Ã¥ \\z"
 
 #, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: Ãðîïóùåíà ] Ã¯Ã®Ã±Ã«Ã¥ %s%%["
-
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: Ãóñòîå %s%%[]"
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678: Ãåäîïóñòèìûé Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¯Ã®Ã±Ã«Ã¥ %s%%[dxouU]"
 
 #, c-format
 msgid "E71: Invalid character after %s%%"
@@ -4100,20 +4849,83 @@ msgstr "E71: 
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Ã‘èíòàêñè÷åñêàÿ Ã®Ã¸Ã¨Ã¡ÃªÃ  Ã¢ %s{...}"
 
-msgid "E361: Crash intercepted; regexp too complex?"
+msgid "External submatches:\n"
+msgstr "Âíåøíèå Ã¯Ã®Ã¤Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã¨Ã¿:\n"
+
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
 msgstr ""
-"E361: Ãðåäîòâðàùåíî Ã Ã¢Ã Ã°Ã¨Ã©Ã­Ã®Ã¥ Ã§Ã Ã¢Ã¥Ã°Ã¸Ã¥Ã­Ã¨Ã¥: Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã±Ã«Ã®Ã¦Ã­Ã®Ã¥ Ã°Ã¥Ã£Ã³Ã«Ã¿Ã°Ã­Ã®Ã¥ "
-"âûðàæåíèå?"
+"E864: Ã¯Ã®Ã±Ã«Ã¥ \\%#= Ã¬Ã®Ã¦Ã¥Ã² Ã¡Ã»Ã²Ã¼ Ã²Ã®Ã«Ã¼ÃªÃ® 0, 1 Ã¨Ã«Ã¨ 2. Ãóäåò Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼Ã±Ã¿ "
+"àâòîìàòè÷åñêàÿ Ã¬Ã Ã¸Ã¨Ã­Ã "
 
-msgid "E363: pattern caused out-of-stack error"
-msgstr "E363: Ã¯Ã°Ã¨Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¥ Ã¸Ã Ã¡Ã«Ã®Ã­Ã  Ã¯Ã°Ã¨Ã¢Ã¥Ã«Ã® Ãª Ã®Ã¸Ã¨Ã¡ÃªÃ¥ Ã¢Ã»ÃµÃ®Ã¤Ã  Ã§Ã  Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã» Ã±Ã²Ã¥ÃªÃ "
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (ðåã. Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¥ ÃÊÀ) Ã­Ã¥Ã®Ã¦Ã¨Ã¤Ã Ã­Ã­Ã»Ã© %c"
 
-msgid "External submatches:\n"
-msgstr "Âíåøíèå Ã¯Ã®Ã¤Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã¨Ã¿:\n"
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (ÃÊÀ) Ã­Ã¥Ã®Ã¦Ã¨Ã¤Ã Ã­Ã­Ã»Ã© ÃªÃ®Ã­Ã¥Ã¶ Ã°Ã¥Ã£Ã³Ã«Ã¿Ã°Ã­Ã®Ã£Ã® Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¿"
 
 #, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld Ã±Ã²Ã°Ã®Ãª Ã¢ Ã±ÃªÃ«Ã Ã¤ÃªÃ¥"
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (ÃÊÀ) Ã­Ã¥Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã­Ã»Ã© Ã®Ã¯Ã¥Ã°Ã Ã²Ã®Ã° '\\z%c'"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\%%%c'"
+msgstr "E867: (ÃÊÀ) Ã­Ã¥Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã­Ã»Ã© Ã®Ã¯Ã¥Ã°Ã Ã²Ã®Ã° '\\%%%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: Ã®Ã¸Ã¨Ã¡ÃªÃ  Ã¯Ã°Ã¨ Ã±Ã®Ã§Ã¤Ã Ã­Ã¨Ã¨ ÃÊÀ Ã± ÃªÃ«Ã Ã±Ã±Ã®Ã¬ Ã½ÃªÃ¢Ã¨Ã¢Ã Ã«Ã¥Ã­Ã²Ã­Ã®Ã±Ã²Ã¨!"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (ÃÊÀ) Ã­Ã¥Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã­Ã»Ã© Ã®Ã¯Ã¥Ã°Ã Ã²Ã®Ã° '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (ðåã. Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¥ ÃÊÀ) Ã®Ã¸Ã¨Ã¡ÃªÃ  Ã¯Ã°Ã¨ Ã·Ã²Ã¥Ã­Ã¨Ã¨ Ã£Ã°Ã Ã­Ã¨Ã¶ Ã¯Ã®Ã¢Ã²Ã®Ã°Ã¥Ã­Ã¨Ã¿"
+
+#. Can't have a multi follow a multi.
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (ðåã. Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¥ ÃÊÀ) Ã¬Ã­Ã®Ã¦Ã¥Ã±Ã²Ã¢Ã® Ã­Ã¥ Ã¬Ã®Ã¦Ã¥Ã² Ã±Ã«Ã¥Ã¤Ã®Ã¢Ã Ã²Ã¼ Ã§Ã  Ã¬Ã­Ã®Ã¦Ã¥Ã±Ã²Ã¢Ã®Ã¬!"
+
+#. Too many `('
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (ðåã. Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¥ ÃÊÀ) Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¬Ã­Ã®Ã£Ã® '('"
+
+msgid "E879: (NFA regexp) Too many \\z("
+msgstr "E879: (ðåã. Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¥ ÃÊÀ) Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¬Ã­Ã®Ã£Ã® \\z("
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (ðåã. Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¥ ÃÊÀ) Ã®Ã¸Ã¨Ã¡ÃªÃ  ÃªÃ®Ã°Ã°Ã¥ÃªÃ²Ã­Ã®Ã£Ã® Ã§Ã Ã¢Ã¥Ã°Ã¸Ã¥Ã­Ã¨Ã¿"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (ðåã. Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¥ ÃÊÀ) Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¢Ã§Ã¿Ã²Ã¼ Ã¨Ã§ Ã±Ã²Ã¥ÃªÃ !"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr ""
+"E875: (ðåã. Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¥ ÃÊÀ) Ã¢ Ã±Ã²Ã¥ÃªÃ¥ Ã®Ã±Ã²Ã Ã«Ã®Ã±Ã¼ Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¬Ã­Ã®Ã£Ã® Ã±Ã®Ã±Ã²Ã®Ã¿Ã­Ã¨Ã© (ïðè "
+"ïðåîáðàçîâàíèè Ã¨Ã§ postfix Ã¢ ÃÊÀ)"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (ðåã. Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã¥ ÃÊÀ) Ã­Ã¥Ã¤Ã®Ã±Ã²Ã Ã²Ã®Ã·Ã­Ã® Ã¬Ã¥Ã±Ã²Ã  Ã¤Ã«Ã¿ ÃµÃ°Ã Ã­Ã¥Ã­Ã¨Ã¿ Ã¢Ã±Ã¥Ã£Ã® ÃÊÀ"
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (ÃÊÀ) Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¢Ã»Ã¤Ã¥Ã«Ã¨Ã²Ã¼ Ã¯Ã Ã¬Ã¿Ã²Ã¼ Ã¤Ã«Ã¿ Ã¯Ã°Ã®ÃµÃ®Ã¤Ã  Ã¢Ã¥Ã²Ã¢Ã¨!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr ""
+"Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« Ã¢Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã®Ã£Ã® Ã¦Ã³Ã°Ã­Ã Ã«Ã  Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã¨, Ã¢Ã»Ã¢Ã®Ã¤ Ã­Ã  stderr..."
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(ÃÊÀ) Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ %s!"
+
+msgid "Could not open temporary log file for writing "
+msgstr "Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« Ã¢Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã®Ã£Ã® Ã¦Ã³Ã°Ã­Ã Ã«Ã  Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã¨"
 
 msgid " VREPLACE"
 msgstr " Ã‚ÈÃÒÓÀËÜÃÀߠÇÀÌÅÃÀ"
@@ -4169,23 +4981,17 @@ msgstr " 
 msgid "recording"
 msgstr "çàïèñü"
 
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "ïîèñê Ã¡Ã³Ã¤Ã¥Ã² Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã± ÃŠÃŽÃÖÀ Ã¤Ã®ÃªÃ³Ã¬Ã¥Ã­Ã²Ã "
-
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "ïîèñê Ã¡Ã³Ã¤Ã¥Ã² Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã± ÃÀ×ÀËÀ Ã¤Ã®ÃªÃ³Ã¬Ã¥Ã­Ã²Ã "
-
 #, c-format
 msgid "E383: Invalid search string: %s"
 msgstr "E383: Ãåïðàâèëüíàÿ Ã±Ã²Ã°Ã®ÃªÃ  Ã¯Ã®Ã¨Ã±ÃªÃ : %s"
 
 #, c-format
 msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: Ã¯Ã®Ã¨Ã±Ãª Ã§Ã ÃªÃ®Ã­Ã·Ã¥Ã­ Ã¢ ÃÀ×ÀËŠäîêóìåíòà; %s Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã®"
+msgstr "E384: Ãîèñê Ã§Ã ÃªÃ®Ã­Ã·Ã¥Ã­ Ã¢ ÃÀ×ÀËŠäîêóìåíòà; %s Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã®"
 
 #, c-format
 msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: Ã¯Ã®Ã¨Ã±Ãª Ã§Ã ÃªÃ®Ã­Ã·Ã¥Ã­ Ã¢ ÃŠÃŽÃÖŠäîêóìåíòà; %s Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã®"
+msgstr "E385: Ãîèñê Ã§Ã ÃªÃ®Ã­Ã·Ã¥Ã­ Ã¢ ÃŠÃŽÃÖŠäîêóìåíòà; %s Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã®"
 
 msgid "E386: Expected '?' or '/'  after ';'"
 msgstr "E386: Ãîñëå ';' Ã®Ã¦Ã¨Ã¤Ã Ã¥Ã²Ã±Ã¿ Ã¢Ã¢Ã®Ã¤ '?' Ã¨Ã«Ã¨ '/'"
@@ -4200,45 +5006,438 @@ msgstr "--- 
 msgid "not found "
 msgstr "íå Ã­Ã Ã©Ã¤Ã¥Ã­Ã® "
 
-msgid "in path ---\n"
-msgstr "ïî Ã¯Ã³Ã²Ã¨ ---\n"
+msgid "in path ---\n"
+msgstr "ïî Ã¯Ã³Ã²Ã¨ ---\n"
+
+msgid "  (Already listed)"
+msgstr " (Óæå Ã¯Ã®ÃªÃ Ã§Ã Ã­Ã®)"
+
+msgid "  NOT FOUND"
+msgstr " ÃÃ… ÃÀÉÄÅÃÃŽ"
+
+#, c-format
+msgid "Scanning included file: %s"
+msgstr "Ãðîñìîòð Ã¢ÃªÃ«Ã¾Ã·Â¸Ã­Ã­Ã»Ãµ Ã´Ã Ã©Ã«Ã®Ã¢: %s"
+
+#, c-format
+msgid "Searching included file %s"
+msgstr "Ãîèñê Ã¢ÃªÃ«Ã¾Ã·Â¸Ã­Ã­Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã  %s"
+
+msgid "E387: Match is on current line"
+msgstr "E387: Ã‘îîòâåòñòâèå Ã¢ Ã²Ã¥ÃªÃ³Ã¹Ã¥Ã© Ã±Ã²Ã°Ã®ÃªÃ¥"
+
+msgid "All included files were found"
+msgstr "Ãàéäåíû Ã¢Ã±Ã¥ Ã¢ÃªÃ«Ã¾Ã·Â¸Ã­Ã­Ã»Ã¥ Ã´Ã Ã©Ã«Ã»"
+
+msgid "No included files"
+msgstr "Âêëþ÷¸ííûõ Ã´Ã Ã©Ã«Ã®Ã¢ Ã­Ã¥Ã²"
+
+msgid "E388: Couldn't find definition"
+msgstr "E388: ÃŽÃ¯Ã°Ã¥Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¥ Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã®"
+
+msgid "E389: Couldn't find pattern"
+msgstr "E389: Ã˜Ã Ã¡Ã«Ã®Ã­ Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­"
+
+msgid "Substitute "
+msgstr "Çàìåíà "
+
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# Ãîñëåäíèé %sØàáëîí Ã¯Ã®Ã¨Ã±ÃªÃ :\n"
+"~"
+
+msgid "E759: Format error in spell file"
+msgstr "E759: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã´Ã®Ã°Ã¬Ã Ã²Ã  Ã¢ Ã´Ã Ã©Ã«Ã¥ Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿"
+
+msgid "E758: Truncated spell file"
+msgstr "E758: Ã”àéë Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿ Ã®Ã¡Ã°Ã¥Ã§Ã Ã­"
+
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "Ëèøíèé Ã²Ã¥ÃªÃ±Ã² Ã­Ã  ÃµÃ¢Ã®Ã±Ã²Ã¥ Ã¢ %s Ã±Ã²Ã°. %d: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "Èìÿ Ã Ã´Ã´Ã¨ÃªÃ±Ã  Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¤Ã«Ã¨Ã­Ã­Ã®Ã¥ Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr "E761: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã´Ã®Ã°Ã¬Ã Ã²Ã  Ã¢ Ã´Ã Ã©Ã«Ã¥ Ã Ã´Ã´Ã¨ÃªÃ±Ã®Ã¢ FOL, LOW Ã¨Ã«Ã¨ UPP"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762: Ã‘èìâîëû Ã¢ FOL, LOW Ã¨Ã«Ã¨ UPP Ã§Ã  Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã Ã¬Ã¨ Ã¤Ã¨Ã Ã¯Ã Ã§Ã®Ã­Ã "
+
+msgid "Compressing word tree..."
+msgstr "Ñæàòèå Ã¤Ã¥Ã°Ã¥Ã¢Ã  Ã±Ã«Ã®Ã¢..."
+
+msgid "E756: Spell checking is not enabled"
+msgstr "E756: Ãðîâåðêà Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿ Ã¢Ã»ÃªÃ«Ã¾Ã·Ã¥Ã­Ã "
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"Ãðåäóïðåæäåíèå: Ãåâîçìîæíî Ã­Ã Ã©Ã²Ã¨ Ã±Ã¯Ã¨Ã±Ã®Ãª Ã±Ã«Ã®Ã¢ \"%s_%s.spl\" Ã¨Ã«Ã¨ \"%s_ascii.spl"
+"\""
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr ""
+"Ãðåäóïðåæäåíèå: Ãåâîçìîæíî Ã­Ã Ã©Ã²Ã¨ Ã±Ã¯Ã¨Ã±Ã®Ãª Ã±Ã«Ã®Ã¢ \"%s.%s.spl\" Ã¨Ã«Ã¨ \"%s.ascii.spl"
+"\""
+
+#, c-format
+msgid "Reading spell file \"%s\""
+msgstr "×òåíèå Ã´Ã Ã©Ã«Ã  Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿ \"%s\""
+
+msgid "E757: This does not look like a spell file"
+msgstr "E757: Ãòî Ã­Ã¥ Ã¯Ã®ÃµÃ®Ã¦Ã¥ Ã­Ã  Ã´Ã Ã©Ã« Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿"
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771: Ã‘òàðûé Ã´Ã Ã©Ã« Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿, Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã²Ã±Ã¿ Ã¥Ã£Ã® Ã®Ã¡Ã­Ã®Ã¢Ã«Ã¥Ã­Ã¨Ã¥"
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772: Ã”àéë Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿ Ã¯Ã°Ã¥Ã¤Ã­Ã Ã§Ã­Ã Ã·Ã¥Ã­ Ã¤Ã«Ã¿ Ã¡Ã®Ã«Ã¥Ã¥ Ã­Ã®Ã¢Ã®Ã© Ã¢Ã¥Ã°Ã±Ã¨Ã¨ Vim"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770: Ãåïîääåðæèâàåìûé Ã°Ã Ã§Ã¤Ã¥Ã« Ã¢ Ã´Ã Ã©Ã«Ã¥ Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿"
+
+#, c-format
+msgid "Warning: region %s not supported"
+msgstr "Ãðåäóïðåæäåíèå: Ã°Ã¥Ã£Ã¨Ã®Ã­ %s Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã²Ã±Ã¿"
+
+#, c-format
+msgid "Reading affix file %s ..."
+msgstr "×òåíèå Ã´Ã Ã©Ã«Ã  Ã Ã´Ã´Ã¨ÃªÃ±Ã®Ã¢ %s ..."
+
+#, c-format
+msgid "Conversion failure for word in %s line %d: %s"
+msgstr "ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¯Ã°Ã¥Ã®Ã¡Ã°Ã Ã§Ã®Ã¢Ã Ã²Ã¼ Ã±Ã«Ã®Ã¢Ã® Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Conversion in %s not supported: from %s to %s"
+msgstr "Ãðåîáðàçîâàíèå Ã¢ %s Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã²Ã±Ã¿: Ã¨Ã§ %s Ã¢ %s"
+
+#, c-format
+msgid "Conversion in %s not supported"
+msgstr "Ãðåîáðàçîâàíèå Ã¢ %s Ã­Ã¥ Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦Ã¨Ã¢Ã Ã¥Ã²Ã±Ã¿"
+
+#, c-format
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ FLAG Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "FLAG Ã¯Ã®Ã±Ã«Ã¥ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¿ Ã´Ã«Ã Ã£Ã®Ã¢ Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Îïðåäåëåíèå COMPOUNDFORBIDFLAG Ã¯Ã®Ã±Ã«Ã¥ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã  PFX Ã¬Ã®Ã¦Ã¥Ã² Ã¤Ã Ã²Ã¼ Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã»Ã¥ "
+"ðåçóëüòàòû Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Îïðåäåëåíèå COMPOUNDPERMITFLAG Ã¯Ã®Ã±Ã«Ã¥ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã  PFX Ã¬Ã®Ã¦Ã¥Ã² Ã¤Ã Ã²Ã¼ Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã»Ã¥ "
+"ðåçóëüòàòû Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d"
+
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ COMPOUNDRULES Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+msgstr "Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ COMPOUNDWORDMAX Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ COMPOUNDMIN Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ COMPOUNDSYLMAX Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+msgstr "Ãåïðàâèëüíîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ CHECKCOMPOUNDPATTERN Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Different combining flag in continued affix block in %s line %d: %s"
+msgstr ""
+"Äðóãîé Ã®Ã¡ÃºÃ¥Ã¤Ã¨Ã­Ã¿Ã¾Ã¹Ã¨Ã© Ã´Ã«Ã Ã£ Ã¢ Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã Ã¾Ã¹Ã¥Ã¬ Ã¡Ã«Ã®ÃªÃ¥ Ã Ã´Ã´Ã¨ÃªÃ±Ã  Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr "Ãîâòîðÿþùèéñÿ Ã Ã´Ã´Ã¨ÃªÃ± Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid ""
+"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
+"line %d: %s"
+msgstr ""
+"Àôôèêñ Ã²Ã ÃªÃ¦Ã¥ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿ Ã¤Ã«Ã¿ BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
+"NOSUGGEST Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr "Îæèäàëîñü Y Ã¨Ã«Ã¨ N Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr "Ãàðóøåííîå Ã³Ã±Ã«Ã®Ã¢Ã¨Ã¥ Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Expected REP(SAL) count in %s line %d"
+msgstr "Îæèäàëñÿ Ã±Ã·Â¸Ã²Ã·Ã¨Ãª REP(SAL) Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d"
+
+#, c-format
+msgid "Expected MAP count in %s line %d"
+msgstr "Îæèäàëñÿ Ã±Ã·Â¸Ã²Ã·Ã¨Ãª MAP Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d"
+
+#, c-format
+msgid "Duplicate character in MAP in %s line %d"
+msgstr "Ãîâòîðÿþùèéñÿ Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¢ MAP Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d"
+
+#, c-format
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "Ãåðàñïîçíàííûé Ã¨Ã«Ã¨ Ã¯Ã®Ã¢Ã²Ã®Ã°Ã¿Ã¾Ã¹Ã¨Ã©Ã±Ã¿ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã² Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "Ãðîïóùåíà Ã±Ã²Ã°Ã®ÃªÃ  FOL/LOW/UPP Ã¢ %s"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "COMPOUNDSYLMAX Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿ Ã¡Ã¥Ã§ SYLLABLE"
+
+msgid "Too many postponed prefixes"
+msgstr "Ñëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã®Ã²Ã«Ã®Ã¦Ã¥Ã­Ã­Ã»Ãµ Ã¯Ã°Ã¥Ã´Ã¨ÃªÃ±Ã®Ã¢"
+
+msgid "Too many compound flags"
+msgstr "Ñëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã±Ã®Ã±Ã²Ã Ã¢Ã­Ã»Ãµ Ã´Ã«Ã Ã£Ã®Ã¢"
+
+msgid "Too many postponed prefixes and/or compound flags"
+msgstr "Ñëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã®Ã²Ã«Ã®Ã¦Ã¥Ã­Ã­Ã»Ãµ Ã¯Ã°Ã¥Ã´Ã¨ÃªÃ±Ã®Ã¢ Ã¨/èëè Ã±Ã®Ã±Ã²Ã Ã¢Ã­Ã»Ãµ Ã´Ã«Ã Ã£Ã®Ã¢"
+
+#, c-format
+msgid "Missing SOFO%s line in %s"
+msgstr "Ãðîïóùåíà Ã±Ã²Ã°Ã®ÃªÃ  SOFO%s Ã¢ %s"
+
+#, c-format
+msgid "Both SAL and SOFO lines in %s"
+msgstr "Îáå Ã±Ã²Ã°Ã®ÃªÃ¨ SAL Ã¨ SOFO Ã¢ %s"
+
+#, c-format
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "Ôëàã Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã·Ã¨Ã±Ã«Ã®Ã¬ Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "Ãåäîïóñòèìûé Ã´Ã«Ã Ã£ Ã¢ %s Ã­Ã  Ã±Ã²Ã°Ã®ÃªÃ¥ %d: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr "%s Ã¨Ã¬Ã¥Ã¥Ã² Ã¤Ã°Ã³Ã£Ã®Ã¥ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥, Ã·Ã¥Ã¬ Ã¢ Ã´Ã Ã©Ã«Ã¥ .aff"
+
+#, c-format
+msgid "Reading dictionary file %s ..."
+msgstr "×òåíèå Ã´Ã Ã©Ã«Ã  Ã±Ã«Ã®Ã¢Ã Ã°Ã¿ %s ..."
+
+#, c-format
+msgid "E760: No word count in %s"
+msgstr "E760: ÃŠÃ®Ã«Ã¨Ã·Ã¥Ã±Ã²Ã¢Ã® Ã±Ã«Ã®Ã¢ Ã­Ã¥ Ã³ÃªÃ Ã§Ã Ã­Ã® Ã¢ %s"
+
+#, c-format
+msgid "line %6d, word %6d - %s"
+msgstr "ñòðîêà %6d, Ã±Ã«Ã®Ã¢Ã® %6d \97 %s"
+
+#, c-format
+msgid "Duplicate word in %s line %d: %s"
+msgstr "Ãîâòîð Ã±Ã«Ã®Ã¢Ã  Ã¢ %s Ã­Ã  Ã±Ã²Ã°Ã®ÃªÃ¥ %d: %s "
+
+#, c-format
+msgid "First duplicate word in %s line %d: %s"
+msgstr "Ãåðâûé Ã¯Ã®Ã¢Ã²Ã®Ã° Ã±Ã«Ã®Ã¢Ã  Ã¢ %s Ã­Ã  Ã±Ã²Ã°Ã®ÃªÃ¥ %d: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d Ã¯Ã®Ã¢Ã²Ã®Ã°Ã¿Ã¾Ã¹Ã¨ÃµÃ±Ã¿ Ã±Ã«Ã®Ã¢ Ã¢ %s"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr "Ãðîïóùåíî %d Ã±Ã«Ã®Ã¢ Ã± Ã­Ã¥ ASCII Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã Ã¬Ã¨ Ã¢ %s"
+
+#, c-format
+msgid "Reading word file %s ..."
+msgstr "×òåíèå Ã´Ã Ã©Ã«Ã  Ã±Ã«Ã®Ã¢ %s ..."
+
+#, c-format
+msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+msgstr "Ãðîèãíîðèðîâàíà Ã¯Ã®Ã¢Ã²Ã®Ã°Ã¿Ã¾Ã¹Ã Ã¿Ã±Ã¿ Ã±Ã²Ã°Ã®ÃªÃ  /encoding= Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "/encoding= line after word ignored in %s line %d: %s"
+msgstr "Ãðîèãíîðèðîâàíà Ã±Ã²Ã°Ã®ÃªÃ  /encoding= Ã¯Ã®Ã±Ã«Ã¥ Ã±Ã«Ã®Ã¢Ã  Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Duplicate /regions= line ignored in %s line %d: %s"
+msgstr "Ãðîïóñêàåòñÿ Ã¯Ã®Ã¢Ã²Ã®Ã° Ã±Ã²Ã°Ã®ÃªÃ¨ /regions= Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Too many regions in %s line %d: %s"
+msgstr "Ñëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã°Ã¥Ã£Ã¨Ã®Ã­Ã®Ã¢ Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "/ line ignored in %s line %d: %s"
+msgstr "/ Ã±Ã²Ã°Ã®ÃªÃ  Ã¯Ã°Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã²Ã±Ã¿ Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Invalid region nr in %s line %d: %s"
+msgstr "Ãåäîïóñòèìûé Ã­Ã®Ã¬Ã¥Ã° Ã°Ã¥Ã£Ã¨Ã®Ã­Ã  Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Unrecognized flags in %s line %d: %s"
+msgstr "Ãåðàñïîçíàííûå Ã´Ã«Ã Ã£Ã¨ Ã¢ %s, Ã±Ã²Ã°Ã®ÃªÃ  %d: %s"
+
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr "Ãðîïóùåíî %d Ã±Ã«Ã®Ã¢ Ã± Ã­Ã¥ ASCII Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã Ã¬Ã¨"
+
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Ãåäîñòàòî÷íî Ã®Ã¯Ã¥Ã°Ã Ã²Ã¨Ã¢Ã­Ã®Ã© Ã¯Ã Ã¬Ã¿Ã²Ã¨, Ã±Ã¯Ã¨Ã±Ã®Ãª Ã±Ã«Ã®Ã¢ Ã¡Ã³Ã¤Ã¥Ã² Ã­Ã¥ Ã¯Ã®Ã«Ã®Ã­"
+
+#, c-format
+msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+msgstr "Ñæàòî %d Ã¨Ã§ %d Ã³Ã§Ã«Ã®Ã¢; Ã®Ã±Ã²Ã Ã«Ã®Ã±Ã¼ %d (%d%%)"
+
+msgid "Reading back spell file..."
+msgstr "×òåíèå Ã§Ã Ã¯Ã¨Ã±Ã Ã­Ã­Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã  Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿..."
+
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+msgid "Performing soundfolding..."
+msgstr "Âûïîëíåíèå Ã§Ã¢Ã³ÃªÃ®Ã¢Ã®Ã© Ã±Ã¢Â¸Ã°Ã²ÃªÃ¨..."
+
+#, c-format
+msgid "Number of words after soundfolding: %ld"
+msgstr "Êîëè÷åñòâî Ã±Ã«Ã®Ã¢ Ã¯Ã®Ã±Ã«Ã¥ Ã§Ã¢Ã³ÃªÃ®Ã¢Ã®Ã© Ã±Ã¢Â¸Ã°Ã²ÃªÃ¨: %ld"
+
+#, c-format
+msgid "Total number of words: %d"
+msgstr "Îáùåå ÃªÃ®Ã«Ã¨Ã·Ã¥Ã±Ã²Ã¢Ã® Ã±Ã«Ã®Ã¢: %d"
+
+#, c-format
+msgid "Writing suggestion file %s ..."
+msgstr "Çàïèñü Ã´Ã Ã©Ã«Ã  Ã¯Ã°Ã¥Ã¤Ã«Ã®Ã¦Ã¥Ã­Ã¨Ã¿ Ã¨Ã±Ã¯Ã°Ã Ã¢Ã«Ã¥Ã­Ã¨Ã© Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿ %s"
+
+#, c-format
+msgid "Estimated runtime memory use: %d bytes"
+msgstr "Îöåíêà Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã­Ã¨Ã¿ Ã¯Ã Ã¬Ã¿Ã²Ã¨ Ã¯Ã°Ã¨ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¨: %d Ã¡Ã Ã©Ã²"
+
+msgid "E751: Output file name must not have region name"
+msgstr "E751: ÃˆÃ¬Ã¿ Ã¢Ã»ÃµÃ®Ã¤Ã­Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã  Ã­Ã¥ Ã¤Ã®Ã«Ã¦Ã­Ã® Ã±Ã®Ã¤Ã¥Ã°Ã¦Ã Ã²Ã¼ Ã­Ã Ã§Ã¢Ã Ã­Ã¨Ã¿ Ã°Ã¥Ã£Ã¨Ã®Ã­Ã "
+
+msgid "E754: Only up to 8 regions supported"
+msgstr "E754: Ãîääåðæèâàåòñÿ Ã­Ã¥ Ã¡Ã®Ã«Ã¥Ã¥ 8-ìè Ã°Ã¥Ã£Ã¨Ã®Ã­Ã®Ã¢"
+
+#, c-format
+msgid "E755: Invalid region in %s"
+msgstr "E755: Ãåäîïóñòèìûé Ã°Ã¥Ã£Ã¨Ã®Ã­ Ã¢ %s"
+
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr "Ãðåäóïðåæäåíèå: Ã®Ã¡Ã  Ã±Ã®Ã±Ã²Ã Ã¢Ã­Ã»Ã¥ Ã¨ Ã³ÃªÃ Ã§Ã Ã­Ã® NOBREAK"
+
+#, c-format
+msgid "Writing spell file %s ..."
+msgstr "Çàïèñü Ã´Ã Ã©Ã«Ã  Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿ %s ..."
+
+msgid "Done!"
+msgstr "Çàâåðøåíî!"
+
+#, c-format
+msgid "E765: 'spellfile' does not have %ld entries"
+msgstr "E765: 'spellfile' Ã­Ã¥ Ã±Ã®Ã¤Ã¥Ã°Ã¦Ã¨Ã² %ld Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã®Ã¢"
+
+#, c-format
+msgid "Word removed from %s"
+msgstr "Ñëîâî Ã³Ã¤Ã Ã«Ã¥Ã­Ã® Ã¨Ã§ %s"
+
+#, c-format
+msgid "Word added to %s"
+msgstr "Ñëîâî Ã¤Ã®Ã¡Ã Ã¢Ã«Ã¥Ã­Ã® Ã¢ %s"
+
+msgid "E763: Word characters differ between spell files"
+msgstr "E763: Ã‘èìâîëû Ã±Ã«Ã®Ã¢ Ã®Ã²Ã«Ã¨Ã·Ã Ã¾Ã²Ã±Ã¿ Ã¢ Ã´Ã Ã©Ã«Ã Ãµ Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿"
+
+msgid "Sorry, no suggestions"
+msgstr "Èçâèíèòå, Ã­Ã¥Ã² Ã¯Ã°Ã¥Ã¤Ã¯Ã®Ã«Ã®Ã¦Ã¥Ã­Ã¨Ã©"
+
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr "Èçâèíèòå, Ã²Ã®Ã«Ã¼ÃªÃ® %ld Ã¯Ã°Ã¥Ã¤Ã¯Ã®Ã«Ã®Ã¦Ã¥Ã­Ã¨Ã©"
+
+#. for when 'cmdheight' > 1
+#. avoid more prompt
+#, c-format
+msgid "Change \"%.*s\" to:"
+msgstr "Çàìåíèòü \"%.*s\" Ã­Ã :"
+
+#, c-format
+msgid " < \"%.*s\""
+msgstr " < \"%.*s\""
+
+msgid "E752: No previous spell replacement"
+msgstr "E752: Ãåò Ã¯Ã°Ã¥Ã¤Ã»Ã¤Ã³Ã¹Ã¥Ã© Ã§Ã Ã¬Ã¥Ã­Ã» Ã¯Ã°Ã Ã¢Ã®Ã¯Ã¨Ã±Ã Ã­Ã¨Ã¿"
 
-msgid "  (Already listed)"
-msgstr " (Óæå Ã¯Ã®ÃªÃ Ã§Ã Ã­Ã®)"
+#, c-format
+msgid "E753: Not found: %s"
+msgstr "E753: ÃÃ¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã®: %s"
 
-msgid "  NOT FOUND"
-msgstr " ÃÃ… ÃÀÉÄÅÃÃŽ"
+#, c-format
+msgid "E778: This does not look like a .sug file: %s"
+msgstr "E778: Ãòî Ã­Ã¥ Ã¯Ã®ÃµÃ®Ã¦Ã¥ Ã­Ã  Ã´Ã Ã©Ã« .sug: %s"
 
 #, c-format
-msgid "Scanning included file: %s"
-msgstr "Ãðîñìîòð Ã¢ÃªÃ«Ã¾Ã·Â¸Ã­Ã­Ã»Ãµ Ã´Ã Ã©Ã«Ã®Ã¢: %s"
+msgid "E779: Old .sug file, needs to be updated: %s"
+msgstr "E779: Ã‘òàðûé Ã´Ã Ã©Ã« .sug, Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã² Ã®Ã¡Ã­Ã®Ã¢Ã«Ã¥Ã­Ã¨Ã¿: %s"
 
-msgid "E387: Match is on current line"
-msgstr "E387: Ã‘îîòâåòñòâèå Ã¢ Ã²Ã¥ÃªÃ³Ã¹Ã¥Ã© Ã±Ã²Ã°Ã®ÃªÃ¥"
+#, c-format
+msgid "E780: .sug file is for newer version of Vim: %s"
+msgstr "E780: Ã”àéë .sug Ã¤Ã«Ã¿ Ã¡Ã®Ã«Ã¥Ã¥ Ã­Ã®Ã¢Ã®Ã© Ã¢Ã¥Ã°Ã±Ã¨Ã¨ Vim: %s"
 
-msgid "All included files were found"
-msgstr "Ãàéäåíû Ã¢Ã±Ã¥ Ã¢ÃªÃ«Ã¾Ã·Â¸Ã­Ã­Ã»Ã¥ Ã´Ã Ã©Ã«Ã»"
+#, c-format
+msgid "E781: .sug file doesn't match .spl file: %s"
+msgstr "E781: Ã”àéë .sug Ã­Ã¥ Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã³Ã¥Ã² Ã´Ã Ã©Ã«Ã³ .spl: %s"
 
-msgid "No included files"
-msgstr "Âêëþ÷¸ííûõ Ã´Ã Ã©Ã«Ã®Ã¢ Ã­Ã¥Ã²"
+#, c-format
+msgid "E782: error while reading .sug file: %s"
+msgstr "E782: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã¯Ã°Ã¨ Ã·Ã²Ã¥Ã­Ã¨Ã¨ Ã´Ã Ã©Ã«Ã  .sug: %s"
 
-msgid "E388: Couldn't find definition"
-msgstr "E388: ÃŽÃ¯Ã°Ã¥Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¥ Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã®"
+#. This should have been checked when generating the .spl
+#. * file.
+msgid "E783: duplicate char in MAP entry"
+msgstr "E783: Ãîâòîðÿþùèéñÿ Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¢ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã¥ MAP"
 
-msgid "E389: Couldn't find pattern"
-msgstr "E389: Ã˜Ã Ã¡Ã«Ã®Ã­ Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­"
+msgid "No Syntax items defined for this buffer"
+msgstr "Ñèíòàêñè÷åñêèå Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã» Ã¤Ã«Ã¿ Ã¤Ã Ã­Ã­Ã®Ã£Ã® Ã¡Ã³Ã´Ã¥Ã°Ã  Ã­Ã¥ Ã®Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã¥Ã­Ã»"
 
 #, c-format
 msgid "E390: Illegal argument: %s"
-msgstr "E390: Ãåäîïóñòèìûé Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²: %s"
+msgstr "E390: Ãåäîïóñòèìûé Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°: %s"
 
 #, c-format
 msgid "E391: No such syntax cluster: %s"
 msgstr "E391: Ã‘èíòàêñè÷åñêèé ÃªÃ«Ã Ã±Ã²Ã¥Ã° %s Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­"
 
-msgid "No Syntax items defined for this buffer"
-msgstr "Ñèíòàêñè÷åñêèå Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã» Ã¤Ã«Ã¿ Ã¤Ã Ã­Ã­Ã®Ã£Ã® Ã¡Ã³Ã´Ã¥Ã°Ã  Ã­Ã¥ Ã®Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã¥Ã­Ã»"
-
 msgid "syncing on C-style comments"
 msgstr "Ñèíõðîíèçàöèÿ Ã¯Ã® ÃªÃ®Ã¬Ã¬Ã¥Ã­Ã²Ã Ã°Ã¨Ã¿Ã¬ Ã¢ Ã±Ã²Ã¨Ã«Ã¥ Ã¿Ã§Ã»ÃªÃ  C"
 
@@ -4288,29 +5487,39 @@ msgstr "; 
 msgid " line breaks"
 msgstr " Ã¯Ã¥Ã°Ã¥Ã­Ã®Ã±Ã®Ã¢ Ã±Ã²Ã°Ã®Ãª"
 
+msgid "E395: contains argument not accepted here"
+msgstr "E395: Ã‡Ã¤Ã¥Ã±Ã¼ Ã­Ã¥Ã«Ã¼Ã§Ã¿ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã° contains"
+
+msgid "E844: invalid cchar value"
+msgstr "E844: Ãåäîïóñòèìîå Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ cchar"
+
 msgid "E393: group[t]here not accepted here"
-msgstr "E393: Ã§Ã¤Ã¥Ã±Ã¼ Ã­Ã¥Ã«Ã¼Ã§Ã¿ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ group[t]here"
+msgstr "E393: Ã‡Ã¤Ã¥Ã±Ã¼ Ã­Ã¥Ã«Ã¼Ã§Ã¿ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ group[t]here"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
 msgstr "E394: Ãëåìåíò Ã®Ã¡Ã«Ã Ã±Ã²Ã¨ Ã¤Ã«Ã¿ %s Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­"
 
-msgid "E395: contains argument not accepted here"
-msgstr "E395: Ã§Ã¤Ã¥Ã±Ã¼ Ã­Ã¥Ã«Ã¼Ã§Ã¿ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã² contains"
-
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: Ã§Ã¤Ã¥Ã±Ã¼ Ã­Ã¥Ã«Ã¼Ã§Ã¿ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã² containedin"
-
 msgid "E397: Filename required"
 msgstr "E397: Ã’ðåáóåòñÿ Ã³ÃªÃ Ã§Ã Ã²Ã¼ Ã¨Ã¬Ã¿ Ã´Ã Ã©Ã«Ã "
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã·Ã¥Ã±ÃªÃ¨Ãµ Ã¢ÃªÃ«Ã¾Ã·Ã¥Ã­Ã¨Ã©"
+
+#, c-format
+msgid "E789: Missing ']': %s"
+msgstr "E789: Ãðîïóùåíî ']': %s"
+
 #, c-format
 msgid "E398: Missing '=': %s"
 msgstr "E398: Ãðîïóùåíî '=': %s"
 
 #, c-format
 msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: ÃÃ¥ ÃµÃ¢Ã Ã²Ã Ã¥Ã² Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã®Ã¢: Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã© Ã°Ã¥Ã£Ã¨Ã®Ã­ %s"
+msgstr "E399: ÃÃ¥ ÃµÃ¢Ã Ã²Ã Ã¥Ã² Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢: Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã© Ã°Ã¥Ã£Ã¨Ã®Ã­ %s"
+
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã·Ã¥Ã±ÃªÃ¨Ãµ ÃªÃ«Ã Ã±Ã²Ã¥Ã°Ã®Ã¢"
 
 msgid "E400: No cluster specified"
 msgstr "E400: ÃŠÃ«Ã Ã±Ã²Ã¥Ã° Ã­Ã¥ Ã³ÃªÃ Ã§Ã Ã­"
@@ -4325,11 +5534,11 @@ msgstr "E402: 
 
 msgid "E403: syntax sync: line continuations pattern specified twice"
 msgstr ""
-"E403: Ã±Ã¨Ã­ÃµÃ°Ã®Ã­Ã¨Ã§Ã Ã¶Ã¨Ã¿ Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã±Ã : Ã¸Ã Ã¡Ã«Ã®Ã­ Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã¥Ã­Ã¨Ã© Ã±Ã²Ã°Ã®ÃªÃ¨ Ã³ÃªÃ Ã§Ã Ã­ Ã¤Ã¢Ã Ã¦Ã¤Ã»"
+"E403: Ã‘èíõðîíèçàöèÿ Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã±Ã : Ã¸Ã Ã¡Ã«Ã®Ã­ Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã¥Ã­Ã¨Ã© Ã±Ã²Ã°Ã®ÃªÃ¨ Ã³ÃªÃ Ã§Ã Ã­ Ã¤Ã¢Ã Ã¦Ã¤Ã»"
 
 #, c-format
 msgid "E404: Illegal arguments: %s"
-msgstr "E404: Ãåäîïóñòèìûå Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã»: %s"
+msgstr "E404: Ãåäîïóñòèìûå Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã»: %s"
 
 #, c-format
 msgid "E405: Missing equal sign: %s"
@@ -4337,7 +5546,7 @@ msgstr "E405: 
 
 #, c-format
 msgid "E406: Empty argument: %s"
-msgstr "E406: Ãóñòîé Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²: %s"
+msgstr "E406: Ãóñòîé Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°: %s"
 
 #, c-format
 msgid "E407: %s not allowed here"
@@ -4355,32 +5564,40 @@ msgstr "E409: 
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410: Ãåïðàâèëüíàÿ Ã¯Ã®Ã¤ÃªÃ®Ã¬Ã Ã­Ã¤Ã  :syntax: %s"
 
+msgid ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+msgstr ""
+"  Ã‚ÑÅÃΠ      ÃŠÃŽÃ‹.  Ã‘ÎÎÒÂ. ÃŽÃ’ÑÒÀÞÙÈÉ    Ã‘ÃÅÄÃÈÉ    ÃˆÃŒÃŸ                Ã˜Ã€ÃËÎÃ"
+
+msgid "E679: recursive loop loading syncolor.vim"
+msgstr "E679: Ãåêóðñèâíàÿ Ã¯Ã¥Ã²Ã«Ã¿ Ã¯Ã°Ã¨ Ã§Ã Ã£Ã°Ã³Ã§ÃªÃ¥ syncolor.vim"
+
 #, c-format
 msgid "E411: highlight group not found: %s"
-msgstr "E411: Ã£Ã°Ã³Ã¯Ã¯Ã  Ã¯Ã®Ã¤Ã±Ã¢Ã¥Ã²ÃªÃ¨ Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã±Ã  %s Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã "
+msgstr "E411: ÃƒÃ°Ã³Ã¯Ã¯Ã  Ã¯Ã®Ã¤Ã±Ã¢Ã¥Ã²ÃªÃ¨ Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã±Ã  %s Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã "
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: ÃÃ¥ ÃµÃ¢Ã Ã²Ã Ã¥Ã² Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã®Ã¢: \":highlight link %s\""
+msgstr "E412: ÃÃ¥ ÃµÃ¢Ã Ã²Ã Ã¥Ã² Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢: \":highlight link %s\""
 
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã®Ã¢: \":highlight link %s\""
+msgstr "E413: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°Ã®Ã¢: \":highlight link %s\""
 
 msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: Ã³ Ã£Ã°Ã³Ã¯Ã¯Ã» Ã¥Ã±Ã²Ã¼ Ã±Ã®Ã¡Ã±Ã²Ã¢Ã¥Ã­Ã­Ã»Ã¥ Ã­Ã Ã±Ã²Ã°Ã®Ã©ÃªÃ¨, Ã±Ã±Ã»Ã«ÃªÃ  Ã¨Ã£Ã­Ã®Ã°Ã¨Ã°Ã³Ã¥Ã²Ã±Ã¿"
+msgstr "E414: Ã“ Ã£Ã°Ã³Ã¯Ã¯Ã» Ã¥Ã±Ã²Ã¼ Ã­Ã Ã±Ã²Ã°Ã®Ã©ÃªÃ¨, Ã¯Ã°Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã²Ã±Ã¿ highlight link"
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
-msgstr "E415: Ã­Ã¥Ã®Ã¦Ã¨Ã¤Ã Ã­Ã­Ã»Ã© Ã§Ã­Ã Ãª Ã°Ã Ã¢Ã¥Ã­Ã±Ã²Ã¢Ã : %s"
+msgstr "E415: Ãåîæèäàííûé Ã§Ã­Ã Ãª Ã°Ã Ã¢Ã¥Ã­Ã±Ã²Ã¢Ã : %s"
 
 #, c-format
 msgid "E416: missing equal sign: %s"
-msgstr "E416: Ã¯Ã°Ã®Ã¯Ã³Ã¹Ã¥Ã­ Ã§Ã­Ã Ãª Ã°Ã Ã¢Ã¥Ã­Ã±Ã²Ã¢Ã : %s"
+msgstr "E416: Ãðîïóùåí Ã§Ã­Ã Ãª Ã°Ã Ã¢Ã¥Ã­Ã±Ã²Ã¢Ã : %s"
 
 #, c-format
 msgid "E417: missing argument: %s"
-msgstr "E417: Ã¯Ã°Ã®Ã¯Ã³Ã¹Ã¥Ã­ Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²: %s"
+msgstr "E417: Ãðîïóùåí Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°: %s"
 
 #, c-format
 msgid "E418: Illegal value: %s"
@@ -4398,11 +5615,11 @@ msgstr "E421: 
 
 #, c-format
 msgid "E422: terminal code too long: %s"
-msgstr "E422: Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¤Ã«Ã¨Ã­Ã­Ã»Ã© ÃªÃ®Ã¤ Ã²Ã¥Ã°Ã¬Ã¨Ã­Ã Ã«Ã : %s"
+msgstr "E422: Ã‘ëèøêîì Ã¤Ã«Ã¨Ã­Ã­Ã»Ã© ÃªÃ®Ã¤ Ã²Ã¥Ã°Ã¬Ã¨Ã­Ã Ã«Ã : %s"
 
 #, c-format
 msgid "E423: Illegal argument: %s"
-msgstr "E423: Ãåäîïóñòèìûé Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²: %s"
+msgstr "E423: Ãåäîïóñòèìûé Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°: %s"
 
 msgid "E424: Too many different highlighting attributes in use"
 msgstr "E424: ÃˆÃ±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿ Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¬Ã­Ã®Ã£Ã® Ã°Ã Ã§Ã­Ã»Ãµ Ã Ã²Ã°Ã¨Ã¡Ã³Ã²Ã®Ã¢ Ã¯Ã®Ã¤Ã±Ã¢Ã¥Ã²ÃªÃ¨ Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã±Ã "
@@ -4410,16 +5627,17 @@ msgstr "E424: 
 msgid "E669: Unprintable character in group name"
 msgstr "E669: Ãåïå÷àòíûé Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¢ Ã¨Ã¬Ã¥Ã­Ã¨ Ã£Ã°Ã³Ã¯Ã¯Ã»"
 
-#. This is an error, but since there previously was no check only
-#. * give a warning.
 msgid "W18: Invalid character in group name"
 msgstr "W18: Ãåäîïóñòèìûé Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã¢ Ã¨Ã¬Ã¥Ã­Ã¨ Ã£Ã°Ã³Ã¯Ã¯Ã»"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Ã‘ëèøêîì Ã¬Ã­Ã®Ã£Ã® Ã£Ã°Ã³Ã¯Ã¯ Ã¯Ã®Ã¤Ã±Ã¢Ã¥Ã²ÃªÃ¨ Ã¨ Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã±Ã "
+
 msgid "E555: at bottom of tag stack"
-msgstr "E555: Ã¢Ã­Ã¨Ã§Ã³ Ã±Ã²Ã¥ÃªÃ  Ã¬Ã¥Ã²Ã®Ãª"
+msgstr "E555: Ã‚íèçó Ã±Ã²Ã¥ÃªÃ  Ã¬Ã¥Ã²Ã®Ãª"
 
 msgid "E556: at top of tag stack"
-msgstr "E556: Ã­Ã Ã¢Ã¥Ã°ÃµÃ³ Ã±Ã²Ã¥ÃªÃ  Ã¬Ã¥Ã²Ã®Ãª"
+msgstr "E556: Ãàâåðõó Ã±Ã²Ã¥ÃªÃ  Ã¬Ã¥Ã²Ã®Ãª"
 
 msgid "E425: Cannot go before first matching tag"
 msgstr "E425: Ãåâîçìîæíî Ã¯Ã¥Ã°Ã¥Ã©Ã²Ã¨ Ã¢ Ã¯Ã®Ã§Ã¨Ã¶Ã¨Ã¾ Ã¤Ã® Ã¯Ã¥Ã°Ã¢Ã®Ã© Ã±Ã®Ã¢Ã¯Ã Ã¤Ã Ã¾Ã¹Ã¥Ã© Ã¬Ã¥Ã²ÃªÃ¨"
@@ -4434,13 +5652,6 @@ msgstr "  # 
 msgid "file\n"
 msgstr "ôàéë\n"
 
-#.
-#. * Ask to select a tag from the list.
-#. * When using ":silent" assume that <CR> was entered.
-#.
-msgid "Enter nr of choice (<CR> to abort): "
-msgstr "Âûáåðèòå Ã­Ã³Ã¦Ã­Ã»Ã© Ã­Ã®Ã¬Ã¥Ã° (<CR> Ã¤Ã«Ã¿ Ã®Ã²ÃªÃ Ã§Ã ):"
-
 msgid "E427: There is only one matching tag"
 msgstr "E427: Ã…ñòü Ã²Ã®Ã«Ã¼ÃªÃ® Ã®Ã¤Ã­Ã  Ã±Ã®Ã¢Ã¯Ã Ã¤Ã Ã¾Ã¹Ã Ã¿ Ã¬Ã¥Ã²ÃªÃ "
 
@@ -4482,6 +5693,9 @@ msgstr "
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Ãóòü Ãª Ã´Ã Ã©Ã«Ã³ Ã¬Ã¥Ã²Ã®Ãª %s Ã®Ã¡Ã°Ã¥Ã§Ã Ã­\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Èãíîðèðîâàíèå Ã¤Ã«Ã¨Ã­Ã­Ã®Ã© Ã±Ã²Ã°Ã®ÃªÃ¨ Ã¢ Ã´Ã Ã©Ã«Ã¥ tags"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã´Ã®Ã°Ã¬Ã Ã²Ã  Ã¢ Ã´Ã Ã©Ã«Ã¥ Ã¬Ã¥Ã²Ã®Ãª \"%s\""
@@ -4504,6 +5718,10 @@ msgstr "E434: 
 msgid "E435: Couldn't find tag, just guessing!"
 msgstr "E435: ÃŒÃ¥Ã²ÃªÃ  Ã­Ã¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã , Ã¯Ã»Ã²Ã Ã¥Ã¬Ã±Ã¿ Ã³Ã£Ã Ã¤Ã Ã²Ã¼!"
 
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "Ãîâòîðÿþùååñÿ Ã¨Ã¬Ã¿ Ã¯Ã®Ã«Ã¿: %s"
+
 msgid "' not known. Available builtin terminals are:"
 msgstr "' Ã­Ã¥ Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã¥Ã­. Ã„îñòóïíû Ã¢Ã±Ã²Ã°Ã®Ã¥Ã­Ã­Ã»Ã¥ Ã²Ã¥Ã°Ã¬Ã¨Ã­Ã Ã«Ã»:"
 
@@ -4524,7 +5742,7 @@ msgid "E436: No \"%s\" entry in termcap"
 msgstr "E436: Ã‚ termcap Ã­Ã¥Ã² Ã§Ã Ã¯Ã¨Ã±Ã¨ \"%s\""
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: Ã²Ã°Ã¥Ã¡Ã³Ã¥Ã²Ã±Ã¿ Ã±Ã¯Ã®Ã±Ã®Ã¡Ã­Ã®Ã±Ã²Ã¼ Ã²Ã¥Ã°Ã¬Ã¨Ã­Ã Ã«Ã  \"cm\""
+msgstr "E437: Ã’ðåáóåòñÿ Ã±Ã¯Ã®Ã±Ã®Ã¡Ã­Ã®Ã±Ã²Ã¼ Ã²Ã¥Ã°Ã¬Ã¨Ã­Ã Ã«Ã  \"cm\""
 
 #. Highlight title
 msgid ""
@@ -4540,25 +5758,147 @@ msgstr "
 msgid "Vim: Error reading input, exiting...\n"
 msgstr "Vim: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã·Ã²Ã¥Ã­Ã¨Ã¿ Ã¢Ã¢Ã®Ã¤Ã , Ã¢Ã»ÃµÃ®Ã¤...\n"
 
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "Âìåñòî Ã¯Ã³Ã±Ã²Ã®Ã£Ã® Ã¢Ã»Ã¤Ã¥Ã«Ã¥Ã­Ã¨Ã¿ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã²Ã±Ã¿ CUT_BUFFER0"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: Ãåîæèäàííî Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã«Ã±Ã¿ Ã±Ã·Â¸Ã²Ã·Ã¨Ãª Ã±Ã²Ã°Ã®Ãª"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "Îòìåíà Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã ; Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã Ã²Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¥Ã­Ã¨Ã¥"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« Ã®Ã²Ã¬Ã¥Ã­ Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã¨: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: Ã”àéë Ã®Ã²Ã¬Ã¥Ã­ Ã¯Ã®Ã¢Ã°Ã¥Ã¦Ã¤Â¸Ã­ (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "Ãåâîçìîæíî Ã§Ã Ã¯Ã¨Ã±Ã Ã²Ã¼ Ã´Ã Ã©Ã« Ã®Ã²Ã¬Ã¥Ã­ Ã¢ ÃªÃ ÃªÃ®Ã¬-ëèáî ÃªÃ Ã²Ã Ã«Ã®Ã£Ã¥ Ã¨Ã§ 'undodir'"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "Ôàéë Ã®Ã²Ã¬Ã¥Ã­ Ã­Ã¥ Ã¯Ã¥Ã°Ã¥Ã§Ã Ã¯Ã¨Ã±Ã Ã­, Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¼: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "Ãåðåçàïèñü Ã­Ã¥ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¥Ã­Ã , Ã½Ã²Ã® Ã­Ã¥ Ã´Ã Ã©Ã« Ã®Ã²Ã¬Ã¥Ã­: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "Ãðîïóùåíà Ã§Ã Ã¯Ã¨Ã±Ã¼ Ã´Ã Ã©Ã«Ã  Ã®Ã²Ã¬Ã¥Ã­, Ã­Ã¥Ã·Ã¥Ã£Ã® Ã®Ã²Ã¬Ã¥Ã­Ã¿Ã²Ã¼"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "Çàïèñü Ã´Ã Ã©Ã«Ã  Ã®Ã²Ã¬Ã¥Ã­: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã¯Ã°Ã¨ Ã§Ã Ã¯Ã¨Ã±Ã¨ Ã´Ã Ã©Ã«Ã  Ã®Ã²Ã¬Ã¥Ã­: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "Ôàéë Ã®Ã²Ã¬Ã¥Ã­ Ã­Ã¥ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã­, Ã¤Ã°Ã³Ã£Ã®Ã© Ã¢Ã«Ã Ã¤Ã¥Ã«Ã¥Ã¶: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "×òåíèå Ã´Ã Ã©Ã«Ã  Ã®Ã²Ã¬Ã¥Ã­: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« Ã®Ã²Ã¬Ã¥Ã­ Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: Ãòî Ã­Ã¥ Ã´Ã Ã©Ã« Ã®Ã²Ã¬Ã¥Ã­: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: ÃÃ¥ Ã§Ã Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã­Ã»Ã© Ã´Ã Ã©Ã« Ã¨Ã¬Ã¥Ã¥Ã² Ã§Ã Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã­Ã»Ã© Ã´Ã Ã©Ã« Ã®Ã²Ã¬Ã¥Ã­: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¤Ã¥Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã²Ã¼ Ã´Ã Ã©Ã« Ã®Ã²Ã¬Ã¥Ã­: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: Ã”àéë Ã®Ã²Ã¬Ã¥Ã­ Ã§Ã Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: Ãåñîâìåñòèìûé Ã´Ã Ã©Ã« Ã®Ã²Ã¬Ã¥Ã­: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "Èçìåíèëîñü Ã±Ã®Ã¤Ã¥Ã°Ã¦Ã¨Ã¬Ã®Ã¥ Ã´Ã Ã©Ã«Ã , Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã®Ã¢Ã Ã²Ã¼ Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¾ Ã®Ã²Ã¬Ã¥Ã­"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "Çàâåðøåíî Ã·Ã²Ã¥Ã­Ã¨Ã¥ Ã´Ã Ã©Ã«Ã  Ã®Ã²Ã¬Ã¥Ã­ %s"
+
+msgid "Already at oldest change"
+msgstr "Óæå Ã­Ã  Ã±Ã Ã¬Ã®Ã¬ Ã¯Ã¥Ã°Ã¢Ã®Ã¬ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¨"
+
+msgid "Already at newest change"
+msgstr "Óæå Ã­Ã  Ã±Ã Ã¬Ã®Ã¬ Ã¯Ã®Ã±Ã«Ã¥Ã¤Ã­Ã¥Ã¬ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¨"
+
+#, c-format
+msgid "E830: Undo number %ld not found"
+msgstr "E830: ÃÃ¥ Ã­Ã Ã©Ã¤Ã¥Ã­Ã  Ã®Ã²Ã¬Ã¥Ã­Ã  Ã­Ã®Ã¬Ã¥Ã° %ld"
+
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã»Ã¥ Ã­Ã®Ã¬Ã¥Ã°Ã  Ã±Ã²Ã°Ã®Ãª"
 
-msgid "1 change"
-msgstr "Åäèíñòâåííîå Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¥"
+msgid "more line"
+msgstr "ñòð. Ã¤Ã®Ã¡Ã Ã¢Ã«Ã¥Ã­Ã "
+
+msgid "more lines"
+msgstr "ñòð. Ã¤Ã®Ã¡Ã Ã¢Ã«Ã¥Ã­Ã®"
+
+msgid "line less"
+msgstr "ñòð. Ã³Ã¤Ã Ã«Ã¥Ã­Ã "
+
+msgid "fewer lines"
+msgstr "ñòð. Ã³Ã¤Ã Ã«Ã¥Ã­Ã®"
+
+msgid "change"
+msgstr "èçì."
+
+msgid "changes"
+msgstr "èçì."
+
+#, c-format
+msgid "%ld %s; %s #%ld  %s"
+msgstr "%ld %s; %s #%ld  %s"
+
+msgid "before"
+msgstr "ïåðåä"
+
+msgid "after"
+msgstr "ïîñëå"
+
+msgid "Nothing to undo"
+msgstr "Ãå÷åãî Ã®Ã²Ã¬Ã¥Ã­Ã¿Ã²Ã¼"
+
+# Ã‡Ã Ã£Ã®Ã«Ã®Ã¢Ã®Ãª Ã²Ã Ã¡Ã«Ã¨Ã¶Ã» :undolist
+msgid "number changes  when               saved"
+msgstr " Ã­Ã®Ã¬Ã¥Ã°  Ã¨Ã§Ã¬Ã¥Ã­.  ÃªÃ®Ã£Ã¤Ã               Ã±Ã®ÃµÃ°Ã Ã­Ã¥Ã­Ã®"
 
 #, c-format
-msgid "%ld changes"
-msgstr "Èçìåíåíèé: %ld"
+msgid "%ld seconds ago"
+msgstr "%ld Ã± Ã­Ã Ã§Ã Ã¤"
+
+msgid "E790: undojoin is not allowed after undo"
+msgstr "E790: ÃŽÃ¡ÃºÃ¥Ã¤Ã¨Ã­Ã¥Ã­Ã¨Ã¥ Ã®Ã²Ã¬Ã¥Ã­ Ã­Ã¥ Ã¤Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã²Ã±Ã¿ Ã¯Ã®Ã±Ã«Ã¥ Ã®Ã²Ã¬Ã¥Ã­Ã»"
 
 msgid "E439: undo list corrupt"
 msgstr "E439: Ãîâðåæä¸í Ã±Ã¯Ã¨Ã±Ã®Ãª Ã®Ã²Ã¬Ã¥Ã­Ã»"
 
 msgid "E440: undo line missing"
-msgstr "E440: Ã¯Ã®Ã²Ã¥Ã°Ã¿Ã­Ã  Ã±Ã²Ã°Ã®ÃªÃ  Ã®Ã²Ã¬Ã¥Ã­Ã»"
+msgstr "E440: Ãîòåðÿíà Ã±Ã²Ã°Ã®ÃªÃ  Ã®Ã²Ã¬Ã¥Ã­Ã»"
 
 #. Only MS VC 4.1 and earlier can do Win32s
 msgid ""
@@ -4570,19 +5910,33 @@ msgstr ""
 
 msgid ""
 "\n"
+"MS-Windows 64-bit GUI version"
+msgstr ""
+"\n"
+"Âåðñèÿ Ã± Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬ Ã¤Ã«Ã¿ MS-Windows 64 Ã¡Ã¨Ã²"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit GUI version"
 msgstr ""
 "\n"
 "Âåðñèÿ Ã± Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬ Ã¤Ã«Ã¿ MS-Windows 32 Ã¡Ã¨Ã²"
 
 msgid " in Win32s mode"
-msgstr " Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬Ã¥ Win32s"
+msgstr " Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬Ã¥ Win32"
 
 msgid " with OLE support"
 msgstr " Ã± Ã¯Ã®Ã¤Ã¤Ã¥Ã°Ã¦ÃªÃ®Ã© OLE"
 
 msgid ""
 "\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"Êîíñîëüíàÿ Ã¢Ã¥Ã°Ã±Ã¨Ã¿ Ã¤Ã«Ã¿ MS-Windows 64 Ã¡Ã¨Ã²"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit console version"
 msgstr ""
 "\n"
@@ -4632,10 +5986,10 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
+"OpenVMS version"
 msgstr ""
 "\n"
-"Âåðñèÿ Ã¤Ã«Ã¿ RISC OS"
+"Âåðñèÿ Ã¤Ã«Ã¿ OpenVMS"
 
 msgid ""
 "\n"
@@ -4644,6 +5998,13 @@ msgstr ""
 "\n"
 "Çàïëàòêè: "
 
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"Äîïîëíèòåëüíûå Ã§Ã Ã¯Ã«Ã Ã²ÃªÃ¨: "
+
 msgid "Modified by "
 msgstr "Ѡèçìåíåíèÿìè, Ã¢Ã­Ã¥Ã±Â¸Ã­Ã­Ã»Ã¬Ã¨ "
 
@@ -4698,15 +6059,9 @@ msgstr "
 msgid "with GTK2-GNOME GUI."
 msgstr "ñ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬ GTK2-GNOME."
 
-msgid "with GTK-GNOME GUI."
-msgstr "ñ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬ GTK-GNOME."
-
 msgid "with GTK2 GUI."
 msgstr "ñ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬ GTK2."
 
-msgid "with GTK GUI."
-msgstr "ñ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬ GTK."
-
 msgid "with X11-Motif GUI."
 msgstr "ñ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬ X11-Motif."
 
@@ -4716,9 +6071,6 @@ msgstr "
 msgid "with X11-Athena GUI."
 msgstr "ñ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬ X11-Athena."
 
-msgid "with BeOS GUI."
-msgstr "ñ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬ BeOS."
-
 msgid "with Photon GUI."
 msgstr "ñ Ã£Ã°Ã Ã´Ã¨Ã·Ã¥Ã±ÃªÃ¨Ã¬ Ã¨Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã®Ã¬ Photon."
 
@@ -4789,7 +6141,7 @@ msgid "  DEBUG BUILD"
 msgstr "  ÃŽÃ’ËÀÄÎ×ÃÀߠÑÃÃŽÃÊÀ"
 
 msgid "VIM - Vi IMproved"
-msgstr "VIM ::: Vi IMproved (Óëó÷øåííûé Vi) ::: Ãóññêàÿ Ã¢Ã¥Ã°Ã±Ã¨Ã¿"
+msgstr "VIM \97 Vi IMproved (óëó÷øåííûé Vi)"
 
 msgid "version "
 msgstr "âåðñèÿ "
@@ -4828,16 +6180,16 @@ msgid "menu  Help->Orphans           for information    "
 msgstr "ìåíþ Ã‘ïðàâêà->Ñèðîòû             Ã¤Ã«Ã¿ Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­Ã¨Ã¿ Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¨     "
 
 msgid "Running modeless, typed text is inserted"
-msgstr "Ãåçðåæèìíàÿ Ã°Ã Ã¡Ã®Ã²Ã», Ã¢Ã±Ã²Ã Ã¢ÃªÃ  Ã¢Ã¢Ã¥Ã¤Â¸Ã­Ã­Ã®Ã£Ã® Ã²Ã¥ÃªÃ±Ã²Ã "
+msgstr "Ãåçðåæèìíàÿ Ã°Ã Ã¡Ã®Ã²Ã , Ã¢Ã±Ã²Ã Ã¢ÃªÃ  Ã¢Ã¢Ã¥Ã¤Â¸Ã­Ã­Ã®Ã£Ã® Ã²Ã¥ÃªÃ±Ã²Ã "
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "ìåíþ Ãðàâêà->Îáùèå Ãàñòðîéêè->Ãåæèì Ã‚ñòàâêè                     "
+msgstr "ìåíþ Ãðàâêà->Ãëîáàëüíûå Ã­Ã Ã±Ã²Ã°Ã®Ã©ÃªÃ¨->Ãåæèì Ã‚ñòàâêè                     "
 
 msgid "                              for two modes      "
 msgstr "                                 Ã¤Ã«Ã¿ Ã¤Ã¢Ã³Ãµ Ã°Ã¥Ã¦Ã¨Ã¬Ã®Ã¢               "
 
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
-msgstr "ìåíþ Ãðàâêà->Îáùèå Ãàñòðîéêè->Ñîâìåñòèìîñòü Ã± Vi                "
+msgstr "ìåíþ Ãðàâêà->Ãëîáàëüíûå Ã­Ã Ã±Ã²Ã°Ã®Ã©ÃªÃ¨->Ñîâìåñòèìîñòü Ã± Vi                "
 
 msgid "                              for Vim defaults   "
 msgstr "                                 Ã¤Ã«Ã¿ Ã¯Ã¥Ã°Ã¥ÃµÃ®Ã¤Ã  Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬ Vim       "
@@ -4863,6 +6215,9 @@ msgstr "
 msgid "type  :help windows95<Enter>  for info on this"
 msgstr "íàáåðèòå :help windows95<Enter>  Ã¤Ã«Ã¿ Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­Ã¨Ã¿ Ã¨Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Ã¨Ã¨     "
 
+msgid "Already only one window"
+msgstr "Ãà Ã½ÃªÃ°Ã Ã­Ã¥ Ã¢Ã±Ã¥Ã£Ã® Ã®Ã¤Ã­Ã® Ã®ÃªÃ­Ã®"
+
 msgid "E441: There is no preview window"
 msgstr "E441: ÃŽÃªÃ­Ã® Ã¯Ã°Ã¥Ã¤Ã¯Ã°Ã®Ã±Ã¬Ã®Ã²Ã°Ã  Ã®Ã²Ã±Ã³Ã²Ã±Ã²Ã¢Ã³Ã¥Ã²"
 
@@ -4875,8 +6230,11 @@ msgstr "E443: 
 msgid "E444: Cannot close last window"
 msgstr "E444: Ãåëüçÿ Ã§Ã ÃªÃ°Ã»Ã²Ã¼ Ã¯Ã®Ã±Ã«Ã¥Ã¤Ã­Ã¥Ã¥ Ã®ÃªÃ­Ã®"
 
-msgid "Already only one window"
-msgstr "Ãà Ã½ÃªÃ°Ã Ã­Ã¥ Ã¢Ã±Ã¥Ã£Ã® Ã®Ã¤Ã­Ã® Ã®ÃªÃ­Ã®"
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: Ãåëüçÿ Ã§Ã ÃªÃ°Ã»Ã²Ã¼ Ã®ÃªÃ­Ã® Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: Ãåëüçÿ Ã§Ã ÃªÃ°Ã»Ã²Ã¼ Ã®ÃªÃ­Ã®, Ã®Ã±Ã²Ã Ã­Ã¥Ã²Ã±Ã¿ Ã²Ã®Ã«Ã¼ÃªÃ® Ã®ÃªÃ­Ã® Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤"
 
 msgid "E445: Other window contains changes"
 msgstr "E445: Ã‚ Ã¤Ã°Ã³Ã£Ã®Ã¬ Ã®ÃªÃ­Ã¥ Ã¥Ã±Ã²Ã¼ Ã­Ã¥Ã±Ã®ÃµÃ°Ã Ã­Â¸Ã­Ã­Ã»Ã¥ Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¿"
@@ -4906,15 +6264,15 @@ msgstr "
 msgid "Edit with single &Vim"
 msgstr "Ãåäàêòèðîâàòü Ã¢ &îäíîì Vim"
 
-msgid "&Diff with Vim"
-msgstr "&Ñðàâíèòü Ã± Ã¯Ã®Ã¬Ã®Ã¹Ã¼Ã¾ Vim"
+msgid "Diff with Vim"
+msgstr "Ñðàâíèòü Ã± Ã¯Ã®Ã¬Ã®Ã¹Ã¼Ã¾ Vim"
 
 msgid "Edit with &Vim"
 msgstr "ÃÃ¥&äàêòèðîâàòü Ã± Ã¯Ã®Ã¬Ã®Ã¹Ã¼Ã¾ Vim"
 
 #. Now concatenate
-msgid "Edit with existing Vim - &"
-msgstr "Ãåäàêòèðîâàòü Ã¢ Ã§Ã Ã¯Ã³Ã¹Ã¥Ã­Ã­Ã®Ã¬ Vim - &"
+msgid "Edit with existing Vim - "
+msgstr "Ãåäàêòèðîâàòü Ã¢ Ã§Ã Ã¯Ã³Ã¹Ã¥Ã­Ã­Ã®Ã¬ Vim \97 "
 
 msgid "Edits the selected file(s) with Vim"
 msgstr "Ãåäàêòèðîâàòü Ã¢Ã»Ã¤Ã¥Ã«Ã¥Ã­Ã­Ã»Ã¥ Ã´Ã Ã©Ã«Ã» Ã± Ã¯Ã®Ã¬Ã®Ã¹Ã¼Ã¾ Vim"
@@ -4961,11 +6319,17 @@ msgstr "E600: 
 msgid "E170: Missing :endwhile"
 msgstr "E170: ÃŽÃ²Ã±Ã³Ã²Ã±Ã²Ã¢Ã³Ã¥Ã² ÃªÃ®Ã¬Ã Ã­Ã¤Ã  :endwhile"
 
+msgid "E170: Missing :endfor"
+msgstr "E170: ÃŽÃ²Ã±Ã³Ã²Ã±Ã²Ã¢Ã³Ã¥Ã² ÃªÃ®Ã¬Ã Ã­Ã¤Ã  :endfor"
+
 msgid "E588: :endwhile without :while"
 msgstr "E588: ÃŠÃ®Ã¬Ã Ã­Ã¤Ã  :endwhile Ã¡Ã¥Ã§ Ã¯Ã Ã°Ã­Ã®Ã© ÃªÃ®Ã¬Ã Ã­Ã¤Ã» :while"
 
+msgid "E588: :endfor without :for"
+msgstr "E588: :endfor Ã¡Ã¥Ã§ :for"
+
 msgid "E13: File exists (add ! to override)"
-msgstr "E13: Ã”àéë Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã² (äëÿ Ã¯Ã¥Ã°Ã¥Ã§Ã Ã¯Ã¨Ã±Ã¨ Ã¤Ã®Ã¡Ã Ã¢Ã¼Ã²Ã¥ !)"
+msgstr "E13: Ã”àéë Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã² (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã¯Ã¥Ã°Ã¥Ã§Ã Ã¯Ã¨Ã±Ã Ã²Ã¼)"
 
 msgid "E472: Command failed"
 msgstr "E472: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ ÃªÃ®Ã¬Ã Ã­Ã¤Ã³"
@@ -4980,7 +6344,7 @@ msgstr "E235: 
 
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236: Ã˜Ã°Ã¨Ã´Ã² \"%s\" Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã¬Ã®Ã­Ã®Ã¸Ã¨Ã°Ã¨Ã­Ã­Ã»Ã¬ Ã¸Ã°Ã¨Ã´Ã²Ã®Ã¬"
+msgstr "E236: Ã˜Ã°Ã¨Ã´Ã² \"%s\" Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã¬Ã®Ã­Ã®Ã¸Ã¨Ã°Ã¨Ã­Ã­Ã»Ã¬"
 
 msgid "E473: Internal error"
 msgstr "E473: Ã‚íóòðåííÿÿ Ã®Ã¸Ã¨Ã¡ÃªÃ "
@@ -4992,11 +6356,11 @@ msgid "E14: Invalid address"
 msgstr "E14: Ãåäîïóñòèìûé Ã Ã¤Ã°Ã¥Ã±"
 
 msgid "E474: Invalid argument"
-msgstr "E474: Ãåäîïóñòèìûé Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²"
+msgstr "E474: Ãåäîïóñòèìûé Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°"
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475: Ãåäîïóñòèìûé Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²: %s"
+msgstr "E475: Ãåäîïóñòèìûé Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°: %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
@@ -5012,9 +6376,6 @@ msgstr "E476: 
 msgid "E17: \"%s\" is a directory"
 msgstr "E17: \"%s\" Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ ÃªÃ Ã²Ã Ã«Ã®Ã£Ã®Ã¬"
 
-msgid "E18: Unexpected characters before '='"
-msgstr "E18: Ãåðåä '=' Ã®Ã¡Ã­Ã Ã°Ã³Ã¦Ã¥Ã­Ã» Ã­Ã¥Ã®Ã¦Ã¨Ã¤Ã Ã­Ã­Ã»Ã¥ Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã»"
-
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
 msgstr "E364: Ãåóäà÷íûé Ã¢Ã»Ã§Ã®Ã¢ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ \"%s()\" Ã¨Ã§ Ã¡Ã¨Ã¡Ã«Ã¨Ã®Ã²Ã¥ÃªÃ¨"
@@ -5098,7 +6459,7 @@ msgstr "E36: 
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247: Ã±Ã¥Ã°Ã¢Ã¥Ã° \"%s\" Ã­Ã¥ Ã§Ã Ã°Ã¥Ã£Ã¨Ã±Ã²Ã°Ã¨Ã°Ã®Ã¢Ã Ã­"
+msgstr "E247: Ã‘åðâåð \"%s\" Ã­Ã¥ Ã§Ã Ã°Ã¥Ã£Ã¨Ã±Ã²Ã°Ã¨Ã°Ã®Ã¢Ã Ã­"
 
 #, c-format
 msgid "E482: Can't create file %s"
@@ -5119,7 +6480,7 @@ msgid "E37: No write since last change (add ! to override)"
 msgstr "E37: ÃˆÃ§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã¿ Ã­Ã¥ Ã±Ã®ÃµÃ°Ã Ã­Ã¥Ã­Ã» (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
 
 msgid "E38: Null argument"
-msgstr "E38: Ãóëåâîé Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²"
+msgstr "E38: Ãóëåâîé Ã¯Ã Ã°Ã Ã¬Ã¥Ã²Ã°"
 
 msgid "E39: Number expected"
 msgstr "E39: Ã’ðåáóåòñÿ Ã·Ã¨Ã±Ã«Ã®"
@@ -5129,7 +6490,7 @@ msgid "E40: Can't open errorfile %s"
 msgstr "E40: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã´Ã Ã©Ã« Ã®Ã¸Ã¨Ã¡Ã®Ãª %s"
 
 msgid "E233: cannot open display"
-msgstr "E233: Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã­Ã® Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã¤Ã¨Ã±Ã¯Ã«Ã¥Ã©"
+msgstr "E233: Ãåâîçìîæíî Ã®Ã²ÃªÃ°Ã»Ã²Ã¼ Ã¤Ã¨Ã±Ã¯Ã«Ã¥Ã©"
 
 msgid "E41: Out of memory!"
 msgstr "E41: ÃÃ¥ ÃµÃ¢Ã Ã²Ã Ã¥Ã² Ã¯Ã Ã¬Ã¿Ã²Ã¨!"
@@ -5148,7 +6509,10 @@ msgid "E459: Cannot go back to previous directory"
 msgstr "E459: Ã‚îçâðàò Ã¢ Ã¯Ã°Ã¥Ã¤Ã»Ã¤Ã³Ã¹Ã¨Ã© ÃªÃ Ã²Ã Ã«Ã®Ã£ Ã­Ã¥Ã¢Ã®Ã§Ã¬Ã®Ã¦Ã¥Ã­"
 
 msgid "E42: No Errors"
-msgstr "E42: ÃŽÃ¸Ã¨Ã¡Ã®Ãª Ã­Ã¥Ã²"
+msgstr "E42: Ãåò Ã®Ã¸Ã¨Ã¡Ã®Ãª"
+
+msgid "E776: No location list"
+msgstr "E776: Ãåò Ã±Ã¯Ã¨Ã±ÃªÃ  Ã°Ã Ã±Ã¯Ã®Ã«Ã®Ã¦Ã¥Ã­Ã¨Ã©"
 
 msgid "E43: Damaged match string"
 msgstr "E43: Ãîâðåæäåíà Ã±Ã²Ã°Ã®ÃªÃ  Ã±Ã®Ã®Ã²Ã¢Ã¥Ã²Ã±Ã²Ã¢Ã¨Ã¿"
@@ -5157,12 +6521,15 @@ msgid "E44: Corrupted regexp program"
 msgstr "E44: Ãðîãðàììà Ã®Ã¡Ã°Ã Ã¡Ã®Ã²ÃªÃ¨ Ã°Ã¥Ã£Ã³Ã«Ã¿Ã°Ã­Ã»Ãµ Ã¢Ã»Ã°Ã Ã¦Ã¥Ã­Ã¨Ã© Ã¯Ã®Ã¢Ã°Ã¥Ã¦Ã¤Ã¥Ã­Ã "
 
 msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr ""
-"E45: Ã‚êëþ÷åíà Ã®Ã¯Ã¶Ã¨Ã¿ 'readonly' (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã­Ã¥ Ã®Ã¡Ã°Ã Ã¹Ã Ã²Ã¼ Ã¢Ã­Ã¨Ã¬Ã Ã­Ã¨Ã¿)"
+msgstr "E45: Ã‚êëþ÷åíà Ã®Ã¯Ã¶Ã¨Ã¿ 'readonly' (äîáàâüòå !, Ã·Ã²Ã®Ã¡Ã» Ã®Ã¡Ã®Ã©Ã²Ã¨ Ã¯Ã°Ã®Ã¢Ã¥Ã°ÃªÃ³)"
+
+#, c-format
+msgid "E46: Cannot change read-only variable \"%s\""
+msgstr "E46: Ãåâîçìîæíî Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã³Ã¾ Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿ \"%s\""
 
 #, c-format
-msgid "E46: Cannot set read-only variable \"%s\""
-msgstr "E46: Ãåâîçìîæíî Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã¤Ã®Ã±Ã²Ã³Ã¯Ã­Ã³Ã¾ Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã³Ã¾ \"%s\""
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: Ãåâîçìîæíî Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã¯Ã¥Ã°Ã¥Ã¬Ã¥Ã­Ã­Ã³Ã¾ Ã¢ Ã¯Ã¥Ã±Ã®Ã·Ã­Ã¨Ã¶Ã¥: \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã¯Ã°Ã¨ Ã·Ã²Ã¥Ã­Ã¨Ã¨ Ã´Ã Ã©Ã«Ã  Ã®Ã¸Ã¨Ã¡Ã®Ãª"
@@ -5235,3 +6602,282 @@ msgstr "E449: 
 msgid "E463: Region is guarded, cannot modify"
 msgstr "E463: Ãåâîçìîæíî Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã®ÃµÃ°Ã Ã­Ã¿Ã¥Ã¬Ã³Ã¾ Ã®Ã¡Ã«Ã Ã±Ã²Ã¼"
 
+msgid "E744: NetBeans does not allow changes in read-only files"
+msgstr "E744: NetBeans Ã­Ã¥ Ã¤Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã² Ã¨Ã§Ã¬Ã¥Ã­Ã¥Ã­Ã¨Ã© Ã¢ Ã´Ã Ã©Ã«Ã Ãµ Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿"
+
+#, c-format
+msgid "E685: Internal error: %s"
+msgstr "E685: Ã‚íóòðåííÿÿ Ã®Ã¸Ã¨Ã¡ÃªÃ : %s"
+
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363: Ã˜Ã Ã¡Ã«Ã®Ã­ Ã¨Ã±Ã¯Ã®Ã«Ã¼Ã§Ã³Ã¥Ã² Ã¡Ã®Ã«Ã¼Ã¸Ã¥ Ã¯Ã Ã¬Ã¿Ã²Ã¨ Ã·Ã¥Ã¬ 'maxmempattern'"
+
+msgid "E749: empty buffer"
+msgstr "E749: Ãóñòîé Ã¡Ã³Ã´Ã¥Ã°"
+
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682: Ãåïðàâèëüíàÿ Ã±Ã²Ã°Ã®ÃªÃ  Ã¯Ã®Ã¨Ã±ÃªÃ  Ã¨Ã«Ã¨ Ã°Ã Ã§Ã¤Ã¥Ã«Ã¨Ã²Ã¥Ã«Ã¼"
+
+msgid "E139: File is loaded in another buffer"
+msgstr "E139: Ã”àéë Ã§Ã Ã£Ã°Ã³Ã¦Ã¥Ã­ Ã¢ Ã¤Ã°Ã³Ã£Ã®Ã¬ Ã¡Ã³Ã´Ã¥Ã°Ã¥"
+
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764: ÃŽÃ¯Ã¶Ã¨Ã¿ '%s' Ã­Ã¥ Ã³Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­Ã "
+
+msgid "E850: Invalid register name"
+msgstr "E850: Ãåäîïóñòèìîå Ã¨Ã¬Ã¿ Ã°Ã¥Ã£Ã¨Ã±Ã²Ã°Ã "
+
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "Ãîèñê Ã¡Ã³Ã¤Ã¥Ã² Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã± ÃŠÃŽÃÖÀ Ã¤Ã®ÃªÃ³Ã¬Ã¥Ã­Ã²Ã "
+
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "Ãîèñê Ã¡Ã³Ã¤Ã¥Ã² Ã¯Ã°Ã®Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã± ÃÀ×ÀËÀ Ã¤Ã®ÃªÃ³Ã¬Ã¥Ã­Ã²Ã "
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "Òðåáóåòñÿ ÃªÃ«Ã¾Ã· Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã¨Ã¿ Ã¤Ã«Ã¿ \"%s\""
+
+msgid "empty keys are not allowed"
+msgstr "Ãóñòûå ÃªÃ«Ã¾Ã·Ã¨ Ã­Ã¥ Ã¤Ã®Ã¯Ã³Ã±Ã²Ã¨Ã¬Ã»"
+
+msgid "dictionary is locked"
+msgstr "Ñëîâàðü Ã§Ã Ã¡Ã«Ã®ÃªÃ¨Ã°Ã®Ã¢Ã Ã­"
+
+msgid "list is locked"
+msgstr "Ñïèñîê Ã§Ã Ã¡Ã«Ã®ÃªÃ¨Ã°Ã®Ã¢Ã Ã­"
+
+#, c-format
+msgid "failed to add key '%s' to dictionary"
+msgstr "Ãåâîçìîæíî Ã¤Ã®Ã¡Ã Ã¢Ã¨Ã²Ã¼ ÃªÃ«Ã¾Ã· '%s' Ãª Ã±Ã«Ã®Ã¢Ã Ã°Ã¾"
+
+#, c-format
+msgid "index must be int or slice, not %s"
+msgstr "Èíäåêñ Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã¡Ã»Ã²Ã¼ Ã¶Ã¥Ã«Ã»Ã¬ Ã·Ã¨Ã±Ã«Ã®Ã¬ Ã¨Ã«Ã¨ Ã¢Ã»Ã¡Ã®Ã°ÃªÃ®Ã©, Ã  Ã­Ã¥ %s"
+
+#, c-format
+msgid "expected str() or unicode() instance, but got %s"
+msgstr "Îæèäàëñÿ Ã½ÃªÃ§Ã¥Ã¬Ã¯Ã«Ã¿Ã° str() Ã¨Ã«Ã¨ unicode(), Ã­Ã® Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­ %s"
+
+#, c-format
+msgid "expected bytes() or str() instance, but got %s"
+msgstr "Îæèäàëñÿ Ã½ÃªÃ§Ã¥Ã¬Ã¯Ã«Ã¿Ã° bytes() Ã¨Ã«Ã¨ str(), Ã­Ã® Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­ %s"
+
+#, c-format
+msgid ""
+"expected int(), long() or something supporting coercing to long(), but got %s"
+msgstr "Îæèäàëîñü int(), long() Ã¨Ã«Ã¨ Ã·Ã²Ã®-òî Ã¯Ã°Ã¨Ã¢Ã®Ã¤Ã¨Ã¬Ã®Ã¥ Ãª long(), Ã­Ã® Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­Ã® %s"
+
+#, c-format
+msgid "expected int() or something supporting coercing to int(), but got %s"
+msgstr "Îæèäàëîñü int() Ã¨Ã«Ã¨ Ã·Ã²Ã®-òî Ã¯Ã°Ã¨Ã¢Ã®Ã¤Ã¨Ã¬Ã®Ã¥ Ãª int(), Ã­Ã® Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­Ã® %s"
+
+msgid "value is too large to fit into C int type"
+msgstr "Çíà÷åíèå Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¢Ã¥Ã«Ã¨ÃªÃ® Ã¤Ã«Ã¿ Ã¶Ã¥Ã«Ã®Ã·Ã¨Ã±Ã«Ã¥Ã­Ã­Ã®Ã£Ã® Ã²Ã¨Ã¯Ã  C"
+
+msgid "value is too small to fit into C int type"
+msgstr "Çíà÷åíèå Ã±Ã«Ã¨Ã¸ÃªÃ®Ã¬ Ã¬Ã Ã«Ã® Ã¤Ã«Ã¿ Ã¶Ã¥Ã«Ã®Ã·Ã¨Ã±Ã«Ã¥Ã­Ã­Ã®Ã£Ã® Ã²Ã¨Ã¯Ã  C"
+
+msgid "number must be greater then zero"
+msgstr "Ãîìåð Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã¡Ã»Ã²Ã¼ Ã¡Ã®Ã«Ã¼Ã¸Ã¥ Ã­Ã³Ã«Ã¿"
+
+msgid "number must be greater or equal to zero"
+msgstr "Ãîìåð Ã¤Ã®Ã«Ã¦Ã¥Ã­ Ã¡Ã»Ã²Ã¼ Ã¡Ã®Ã«Ã¼Ã¸Ã¥ Ã¨Ã«Ã¨ Ã°Ã Ã¢Ã¥Ã­ Ã­Ã³Ã«Ã¾"
+
+msgid "can't delete OutputObject attributes"
+msgstr "Ãåâîçìîæíî Ã³Ã¤Ã Ã«Ã¨Ã²Ã¼ Ã Ã²Ã°Ã¨Ã¡Ã³Ã²Ã» OutputObject"
+
+#, c-format
+msgid "invalid attribute: %s"
+msgstr "Ãåïðàâèëüíûé Ã Ã²Ã°Ã¨Ã¡Ã³Ã²: %s"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: ÃŽÃ¸Ã¨Ã¡ÃªÃ  Ã¨Ã­Ã¨Ã¶Ã¨Ã Ã«Ã¨Ã§Ã Ã¶Ã¨Ã¨ Ã®Ã¡ÃºÃ¥ÃªÃ²Ã®Ã¢ I/O"
+
+msgid "failed to change directory"
+msgstr "Ãåâîçìîæíî Ã±Ã¬Ã¥Ã­Ã¨Ã²Ã¼ ÃªÃ Ã²Ã Ã«Ã®Ã£"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got %s"
+msgstr "Îæèäàëñÿ 3-êîðòåæ ÃªÃ Ãª Ã°Ã¥Ã§Ã³Ã«Ã¼Ã²Ã Ã² imp.find_module(), Ã­Ã® Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­ %s"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
+msgstr ""
+"Îæèäàëñÿ 3-êîðòåæ ÃªÃ Ãª Ã°Ã¥Ã§Ã³Ã«Ã¼Ã²Ã Ã² imp.find_module(), Ã­Ã® Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­ ÃªÃ®Ã°Ã²Ã¥Ã¦ Ã± "
+"ðàçìåðîì %d"
+
+msgid "internal error: imp.find_module returned tuple with NULL"
+msgstr "Âíóòðåííÿÿ Ã®Ã¸Ã¨Ã¡ÃªÃ : imp.find_module Ã¢Ã®Ã§Ã¢Ã°Ã Ã²Ã¨Ã« "
+
+msgid "cannot delete vim.Dictionary attributes"
+msgstr "Ãåâîçìîæíî Ã³Ã¤Ã Ã«Ã¨Ã²Ã¼ Ã Ã²Ã°Ã¨Ã¡Ã³Ã²Ã» vim.Dictionary"
+
+msgid "cannot modify fixed dictionary"
+msgstr "Ãåâîçìîæíî Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã´Ã¨ÃªÃ±Ã¨Ã°Ã®Ã¢Ã Ã­Ã­Ã»Ã© Ã±Ã«Ã®Ã¢Ã Ã°Ã¼"
+
+#, c-format
+msgid "cannot set attribute %s"
+msgstr "Ãåâîçìîæíî Ã³Ã±Ã²Ã Ã­Ã®Ã¢Ã¨Ã²Ã¼ Ã Ã²Ã°Ã¨Ã¡Ã³Ã² %s"
+
+msgid "hashtab changed during iteration"
+msgstr "Õýø-òàáëèöà Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã«Ã Ã±Ã¼ Ã¯Ã°Ã¨ Ã¨Ã²Ã¥Ã°Ã Ã¶Ã¨Ã¨"
+
+#, c-format
+msgid "expected sequence element of size 2, but got sequence of size %d"
+msgstr ""
+"Îæèäàëñÿ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²-ïîñëåäîâàòåëüíîñòü Ã°Ã Ã§Ã¬Ã¥Ã°Ã  2, Ã  Ã°Ã Ã§Ã¬Ã¥Ã° Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­Ã­Ã®Ã© "
+"ïîñëåäîâàòåëüíîñòè %d"
+
+msgid "list constructor does not accept keyword arguments"
+msgstr "Êîíñòðóêòîð Ã±Ã¯Ã¨Ã±ÃªÃ  Ã­Ã¥ Ã¤Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã² ÃªÃ«Ã¾Ã·Ã¥Ã¢Ã»Ã¥ Ã±Ã«Ã®Ã¢Ã  ÃªÃ Ãª Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã»"
+
+msgid "list index out of range"
+msgstr "Èíäåêñ Ã±Ã¯Ã¨Ã±ÃªÃ  Ã§Ã  Ã¯Ã°Ã¥Ã¤Ã¥Ã«Ã Ã¬Ã¨ Ã¤Ã¨Ã Ã¯Ã Ã§Ã®Ã­Ã "
+
+#. No more suitable format specifications in python-2.3
+#, c-format
+msgid "internal error: failed to get vim list item %d"
+msgstr "Âíóòðåííÿÿ Ã®Ã¸Ã¨Ã¡ÃªÃ : Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¯Ã®Ã«Ã³Ã·Ã¨Ã²Ã¼ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã² VIM-ñïèñêà %d"
+
+msgid "failed to add item to list"
+msgstr "Ãåâîçìîæíî Ã¤Ã®Ã¡Ã Ã¢Ã¨Ã²Ã¼ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã² Ã¢ Ã±Ã¯Ã¨Ã±Ã®Ãª"
+
+#, c-format
+msgid "internal error: no vim list item %d"
+msgstr "Âíóòðåííÿÿ Ã®Ã¸Ã¨Ã¡ÃªÃ : Ã­Ã¥Ã² Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã  VIM-ñïèñêà %d"
+
+msgid "internal error: failed to add item to list"
+msgstr "Âíóòðåííÿÿ Ã®Ã¸Ã¨Ã¡ÃªÃ : Ã­Ã¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¤Ã®Ã¡Ã Ã¢Ã¨Ã²Ã¼ Ã½Ã«Ã¥Ã¬Ã¥Ã­Ã² Ã¢ Ã±Ã¯Ã¨Ã±Ã®Ãª"
+
+msgid "cannot delete vim.List attributes"
+msgstr "Ãåâîçìîæíî Ã³Ã¤Ã Ã«Ã¨Ã²Ã¼ Ã Ã²Ã°Ã¨Ã¡Ã³Ã²Ã» vim.List"
+
+msgid "cannot modify fixed list"
+msgstr "Ãåâîçìîæíî Ã¨Ã§Ã¬Ã¥Ã­Ã¨Ã²Ã¼ Ã´Ã¨ÃªÃ±Ã¨Ã°Ã®Ã¢Ã Ã­Ã­Ã»Ã© Ã±Ã¯Ã¨Ã±Ã®Ãª"
+
+#, c-format
+msgid "unnamed function %s does not exist"
+msgstr "ÃÃ¥ Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã² Ã¡Ã¥Ã§Ã»Ã¬Ã¿Ã­Ã­Ã®Ã© Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ %s"
+
+#, c-format
+msgid "function %s does not exist"
+msgstr "Ôóíêöèÿ %s Ã­Ã¥ Ã±Ã³Ã¹Ã¥Ã±Ã²Ã¢Ã³Ã¥Ã²"
+
+msgid "function constructor does not accept keyword arguments"
+msgstr "Êîíñòðóêòîð Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¨ Ã­Ã¥ Ã¤Ã®Ã¯Ã³Ã±ÃªÃ Ã¥Ã² ÃªÃ«Ã¾Ã·Ã¥Ã¢Ã»Ã¥ Ã±Ã«Ã®Ã¢Ã  ÃªÃ Ãª Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã»"
+
+#, c-format
+msgid "failed to run function %s"
+msgstr "Ãåâîçìîæíî Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ Ã´Ã³Ã­ÃªÃ¶Ã¨Ã¾ %s"
+
+msgid "unable to get option value"
+msgstr "Ãåâîçìîæíî Ã¯Ã®Ã«Ã³Ã·Ã¨Ã²Ã¼ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ Ã®Ã¯Ã¶Ã¨Ã¨"
+
+msgid "internal error: unknown option type"
+msgstr "Âíóòðåííÿÿ Ã®Ã¸Ã¨Ã¡ÃªÃ : Ã­Ã¥Ã¨Ã§Ã¢Ã¥Ã±Ã²Ã­Ã»Ã© Ã²Ã¨Ã¯ Ã®Ã¯Ã¶Ã¨Ã¨"
+
+msgid "problem while switching windows"
+msgstr "Ãðîáëåìà Ã¯Ã°Ã¨ Ã¯Ã¥Ã°Ã¥ÃªÃ«Ã¾Ã·Ã¥Ã­Ã¨Ã¨ Ã®ÃªÃ®Ã­"
+
+#, c-format
+msgid "unable to unset global option %s"
+msgstr "Ãåâîçìîæíî Ã±Ã¡Ã°Ã®Ã±Ã¨Ã²Ã¼ Ã£Ã«Ã®Ã¡Ã Ã«Ã¼Ã­Ã³Ã¾ Ã®Ã¯Ã¶Ã¨Ã¾ %s"
+
+#, c-format
+msgid "unable to unset option %s which does not have global value"
+msgstr "Ãåâîçìîæíî Ã±Ã¡Ã°Ã®Ã±Ã¨Ã²Ã¼ Ã®Ã¯Ã¶Ã¨Ã¾ %s Ã¡Ã¥Ã§ Ã£Ã«Ã®Ã¡Ã Ã«Ã¼Ã­Ã®Ã£Ã® Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¿"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "Ãîïûòêà Ã±Ã®Ã±Ã«Ã Ã²Ã¼Ã±Ã¿ Ã­Ã  Ã³Ã¤Ã Ã«Â¸Ã­Ã­Ã³Ã¾ Ã¢ÃªÃ«Ã Ã¤ÃªÃ³"
+
+msgid "no such tab page"
+msgstr "Ãåò Ã²Ã ÃªÃ®Ã© Ã¢ÃªÃ«Ã Ã¤ÃªÃ¨"
+
+msgid "attempt to refer to deleted window"
+msgstr "Ãîïûòêà Ã±Ã®Ã±Ã«Ã Ã²Ã¼Ã±Ã¿ Ã­Ã  Ã§Ã ÃªÃ°Ã»Ã²Ã®Ã¥ Ã®ÃªÃ­Ã®"
+
+msgid "readonly attribute: buffer"
+msgstr "Àòðèáóò Ã²Ã®Ã«Ã¼ÃªÃ® Ã¤Ã«Ã¿ Ã·Ã²Ã¥Ã­Ã¨Ã¿: Ã¡Ã³Ã´Ã¥Ã°"
+
+msgid "cursor position outside buffer"
+msgstr "Ãîçèöèÿ ÃªÃ³Ã°Ã±Ã®Ã°Ã  Ã­Ã ÃµÃ®Ã¤Ã¨Ã²Ã±Ã¿ Ã¢Ã­Ã¥ Ã¡Ã³Ã´Ã¥Ã°Ã "
+
+msgid "no such window"
+msgstr "Ãåò Ã²Ã ÃªÃ®Ã£Ã® Ã®ÃªÃ­Ã "
+
+msgid "attempt to refer to deleted buffer"
+msgstr "Ãîïûòêà Ã±Ã®Ã±Ã«Ã Ã²Ã¼Ã±Ã¿ Ã­Ã  Ã³Ã­Ã¨Ã·Ã²Ã®Ã¦Ã¥Ã­Ã­Ã»Ã© Ã¡Ã³Ã´Ã¥Ã°"
+
+msgid "failed to rename buffer"
+msgstr "Ãåâîçìîæíî Ã¯Ã¥Ã°Ã¥Ã¨Ã¬Ã¥Ã­Ã®Ã¢Ã Ã²Ã¼ Ã¡Ã³Ã´Ã¥Ã°"
+
+msgid "mark name must be a single character"
+msgstr "Ãàçâàíèå Ã®Ã²Ã¬Ã¥Ã²ÃªÃ¨ Ã¤Ã®Ã«Ã¦Ã­Ã® Ã¡Ã»Ã²Ã¼ Ã®Ã¤Ã­Ã¨Ã¬ Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã®Ã¬"
+
+#, c-format
+msgid "expected vim.Buffer object, but got %s"
+msgstr "Îæèäàëñÿ Ã®Ã¡ÃºÃ¥ÃªÃ² vim.Buffer, Ã­Ã® Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­ %s"
+
+#, c-format
+msgid "failed to switch to buffer %d"
+msgstr "Ãåâîçìîæíî Ã¯Ã¥Ã°Ã¥ÃªÃ«Ã¾Ã·Ã¨Ã²Ã¼Ã±Ã¿ Ã­Ã  Ã¡Ã³Ã´Ã¥Ã° %d"
+
+#, c-format
+msgid "expected vim.Window object, but got %s"
+msgstr "Îæèäàëñÿ Ã®Ã¡ÃºÃ¥ÃªÃ² vim.Window, Ã­Ã® Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­ %s"
+
+msgid "failed to find window in the current tab page"
+msgstr "Ãåâîçìîæíî Ã­Ã Ã©Ã²Ã¨ Ã®ÃªÃ­Ã® Ã¢ Ã²Ã¥ÃªÃ³Ã¹Ã¥Ã© Ã¢ÃªÃ«Ã Ã¤ÃªÃ¥"
+
+msgid "did not switch to the specified window"
+msgstr "Ãåâîçìîæíî Ã¯Ã¥Ã°Ã¥ÃªÃ«Ã¾Ã·Ã¨Ã²Ã¼Ã±Ã¿ Ã­Ã  Ã³ÃªÃ Ã§Ã Ã­Ã­Ã®Ã¥ Ã®ÃªÃ­Ã®"
+
+#, c-format
+msgid "expected vim.TabPage object, but got %s"
+msgstr "Îæèäàëñÿ Ã®Ã¡ÃºÃ¥ÃªÃ² vim.TabPage, Ã­Ã® Ã¯Ã®Ã«Ã³Ã·Ã¥Ã­ %s"
+
+msgid "did not switch to the specified tab page"
+msgstr "Ãåâîçìîæíî Ã¯Ã¥Ã°Ã¥ÃªÃ«Ã¾Ã·Ã¨Ã²Ã¼Ã±Ã¿ Ã­Ã  Ã³ÃªÃ Ã§Ã Ã­Ã­Ã³Ã¾ Ã¢ÃªÃ«Ã Ã¤ÃªÃ³"
+
+msgid "failed to run the code"
+msgstr "Ãåâîçìîæíî Ã¢Ã»Ã¯Ã®Ã«Ã­Ã¨Ã²Ã¼ ÃªÃ®Ã¤"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval Ã­Ã¥ Ã¢Ã®Ã§Ã¢Ã°Ã Ã²Ã¨Ã« Ã¤Ã®Ã¯Ã³Ã±Ã²Ã¨Ã¬Ã®Ã£Ã® Ã®Ã¡ÃºÃ¥ÃªÃ²Ã  Python"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr ""
+"E859: ÃÃ¥ Ã³Ã¤Ã Ã«Ã®Ã±Ã¼ Ã¯Ã°Ã¥Ã®Ã¡Ã°Ã Ã§Ã®Ã¢Ã Ã²Ã¼ Ã¢Ã®Ã§Ã¢Ã°Ã Ã¹Â¸Ã­Ã­Ã»Ã© Ã®Ã¡ÃºÃ¥ÃªÃ² Python Ã¢ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¥ VIM"
+
+#, c-format
+msgid "unable to convert %s to vim dictionary"
+msgstr "Ãåâîçìîæíî Ã¯Ã°Ã¥Ã®Ã¡Ã°Ã Ã§Ã®Ã¢Ã Ã²Ã¼ %s Ã¢ Ã±Ã«Ã®Ã¢Ã Ã°Ã¼ VIM"
+
+#, c-format
+msgid "unable to convert %s to vim structure"
+msgstr "Ãåâîçìîæíî Ã¯Ã°Ã¥Ã®Ã¡Ã°Ã Ã§Ã®Ã¢Ã Ã²Ã¼ %s Ã¢ Ã±Ã²Ã°Ã³ÃªÃ²Ã³Ã°Ã³ VIM"
+
+msgid "internal error: NULL reference passed"
+msgstr "Âíóòðåííÿÿ Ã®Ã¸Ã¨Ã¡ÃªÃ : Ã¯Ã¥Ã°Ã¥Ã¤Ã Ã­Ã  Ã±Ã±Ã»Ã«ÃªÃ  Ã­Ã  NULL"
+
+msgid "internal error: invalid value type"
+msgstr "Âíóòðåííÿÿ Ã®Ã¸Ã¨Ã¡ÃªÃ : Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã»Ã© Ã²Ã¨Ã¯ Ã§Ã­Ã Ã·Ã¥Ã­Ã¨Ã¿"
+
+msgid ""
+"Failed to set path hook: sys.path_hooks is not a list\n"
+"You should now do the following:\n"
+"- append vim.path_hook to sys.path_hooks\n"
+"- append vim.VIM_SPECIAL_PATH to sys.path\n"
+msgstr ""
+"Îøèáêà Ã¯Ã°Ã¨ Ã³Ã±Ã²Ã Ã­Ã®Ã¢ÃªÃ¥ Ã¯Ã¥Ã°Ã¥ÃµÃ¢Ã Ã²Ã·Ã¨ÃªÃ  Ã¯Ã³Ã²Ã¨: sys.path_hooks Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã±Ã¯Ã¨Ã±ÃªÃ®Ã¬\n"
+"Ñëåäóåò Ã±Ã¤Ã¥Ã«Ã Ã²Ã¼ Ã±Ã«Ã¥Ã¤Ã³Ã¾Ã¹Ã¥Ã¥:\n"
+"\97 Ã„îáàâèòü vim.path_hook  Ã¢ sys.path_hooks\n"
+"\97 Ã„îáàâèòü vim.VIM_SPECIAL_PATH Ã¢ sys.path\n"
+
+msgid ""
+"Failed to set path: sys.path is not a list\n"
+"You should now append vim.VIM_SPECIAL_PATH to sys.path"
+msgstr ""
+"Îøèáêà Ã¯Ã°Ã¨ Ã³Ã±Ã²Ã Ã­Ã®Ã¢ÃªÃ¥ Ã¯Ã³Ã²Ã¨: sys.path Ã­Ã¥ Ã¿Ã¢Ã«Ã¿Ã¥Ã²Ã±Ã¿ Ã±Ã¯Ã¨Ã±ÃªÃ®Ã¬\n"
+"Ñëåäóåò Ã¤Ã®Ã¡Ã Ã¢Ã¨Ã²Ã¼ vim.VIM_SPECIAL_PATH Ã¢ sys.path"
index 612d3a6..3f99a47 100644 (file)
@@ -1,39 +1,60 @@
 # Russian translation for Vim
-# 
+#
 # ÐžÐ± ÑƒÑловиÑÑ… Ð¸ÑпользованиѠчитайте Ð² Ñ€ÐµÐ´Ð°ÐºÑ‚оре Vim ":help uganda"
-# Ðž Ð»ÑŽÐ´ÑÑ…, Ð´ÐµÐ»Ð°ÑŽÑ‰Ð¸Ñ… Vim Ñ‡Ð¸Ñ‚айте Ð² Ñ€ÐµÐ´Ð°ÐºÑ‚оре ":help Ð°Ð²Ñ‚оры"
 #
 # vassily "vr" ragosin <vrr@users.sourceforge.net>, 2004
-#
-# Original translations.
+# Sergey Alyoshin <alyoshin.s@gmail.com>, 2013
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 6.3\n"
+"Project-Id-Version: vim_7.4_ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-06-15 09:39+0400\n"
-"PO-Revision-Date: 2004-05-19 00:23+0400\n"
-"Last-Translator: vassily ragosin <vrr@users.sourceforge.net>\n"
-"Language-Team: vassily ragosin <vrr@users.sourceforge.net>\n"
+"POT-Creation-Date: 2013-07-08 00:47+0400\n"
+"PO-Revision-Date: 2013-07-08 00:47+0400\n"
+"Last-Translator: Sergey Alyoshin <alyoshin.s@gmail.com>\n"
+"Language-Team: \n"
+"Language: Russian\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() Ð²Ñ‹Ð·Ð²Ð°Ð½ Ñ Ð¿ÑƒÑтым Ð¿Ð°Ñ€Ð¾Ð»ÐµÐ¼"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr ""
+"E817: Ðеправильное Ð¸Ñпользование Ð¾Ð±Ñ€Ð°Ñ‚ного/прÑмого Ð¿Ð¾Ñ€Ñдка Ð±Ð°Ð¹Ñ‚ Ð² Blowfish"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ñ‚еÑÑ‚ sha256"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ñ‚еÑÑ‚ Blowfish"
+
+msgid "[Location List]"
+msgstr "[СпиÑок Ñ€Ð°Ñположений]"
+
+msgid "[Quickfix List]"
+msgstr "[СпиÑок Ð±Ñ‹Ñтрых Ð¸Ñправлений]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Ðвтокоманды Ð²Ñ‹Ð·Ð²Ð°Ð»Ð¸ Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ðµ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Ðевозможно Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼ÑÑ‚ÑŒ Ð´Ð°Ð¶Ðµ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð±ÑƒÑ„ера, Ð²Ñ‹Ñ…од..."
 
 msgid "E83: Cannot allocate buffer, using other one..."
 msgstr "E83: Ðевозможно Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼ÑÑ‚ÑŒ Ð´Ð»Ñ Ð±ÑƒÑ„ера, Ð¸Ñпользуем Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ð±ÑƒÑ„ер..."
 
-#, c-format
 msgid "E515: No buffers were unloaded"
 msgstr "E515: Ðи Ð¾Ð´Ð¸Ð½ Ð±ÑƒÑ„ер Ð½Ðµ Ð±Ñ‹Ð» Ð²Ñ‹Ð³Ñ€ÑƒÐ¶ÐµÐ½ Ð¸Ð· Ð¿Ð°Ð¼Ñти"
 
-#, c-format
 msgid "E516: No buffers were deleted"
 msgstr "E516: Ðи Ð¾Ð´Ð¸Ð½ Ð±ÑƒÑ„ер Ð½Ðµ Ð±Ñ‹Ð» ÑƒÐ´Ð°Ð»Ñ‘н"
 
-#, c-format
 msgid "E517: No buffers were wiped out"
 msgstr "E517: Ðи Ð¾Ð´Ð¸Ð½ Ð±ÑƒÑ„ер Ð½Ðµ Ð±Ñ‹Ð» Ð¾Ñ‡Ð¸Ñ‰ÐµÐ½"
 
@@ -77,7 +98,8 @@ msgstr "E88: Ð­Ñ‚о Ð¿ÐµÑ€Ð²Ñ‹Ð¹ Ð±ÑƒÑ„ер"
 
 #, c-format
 msgid "E89: No write since last change for buffer %ld (add ! to override)"
-msgstr "E89: Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ð±ÑƒÑ„ере %ld Ð½Ðµ Ñохранены (!, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+msgstr ""
+"E89: Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ð±ÑƒÑ„ере %ld Ð½Ðµ Ñохранены (добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 msgid "E90: Cannot unload last buffer"
 msgstr "E90: Ðевозможно Ð²Ñ‹Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ Ð¸Ð· Ð¿Ð°Ð¼Ñти Ð¿Ð¾Ñледний Ð±ÑƒÑ„ер"
@@ -116,6 +138,9 @@ msgstr "[Ðовый Ñ„айл]"
 msgid "[Read errors]"
 msgstr "[Ошибки Ñ‡Ñ‚ениÑ]"
 
+msgid "[RO]"
+msgstr "[ТЧ]"
+
 msgid "[readonly]"
 msgstr "[только Ð´Ð»Ñ Ñ‡Ñ‚ениÑ]"
 
@@ -131,15 +156,15 @@ msgstr "%ld ÑÑ‚Ñ€. --%d%%--"
 msgid "line %ld of %ld --%d%%-- col "
 msgstr "ÑÑ‚Ñ€. %ld Ð¸Ð· %ld --%d%%-- ÐºÐ¾Ð». "
 
-msgid "[No file]"
-msgstr "[Ðет Ñ„айла]"
+msgid "[No Name]"
+msgstr "[Ðет Ð¸Ð¼ÐµÐ½Ð¸]"
 
 #. must be a help buffer
 msgid "help"
 msgstr "Ñправка"
 
-msgid "[help]"
-msgstr "[Ñправка]"
+msgid "[Help]"
+msgstr "[Справка]"
 
 msgid "[Preview]"
 msgstr "[ПредпроÑмотр]"
@@ -153,7 +178,6 @@ msgstr "Внизу"
 msgid "Top"
 msgstr "Ðаверху"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -161,11 +185,8 @@ msgstr ""
 "\n"
 "# Ð¡Ð¿Ð¸Ñок Ð±ÑƒÑ„еров:\n"
 
-msgid "[Error List]"
-msgstr "[СпиÑок Ð¾ÑˆÐ¸Ð±Ð¾Ðº]"
-
-msgid "[No File]"
-msgstr "[Ðет Ñ„айла]"
+msgid "[Scratch]"
+msgstr "[Временный]"
 
 msgid ""
 "\n"
@@ -186,18 +207,27 @@ msgstr "    Ñтрока=%ld  id=%d  Ð¸Ð¼Ñ=%s"
 msgid "E96: Can not diff more than %ld buffers"
 msgstr "E96: Ð¡Ð»ÐµÐ´Ð¸Ñ‚ÑŒ Ð·Ð° Ð¾Ñ‚личиÑми Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ðµ Ð±Ð¾Ð»ÐµÐµ Ñ‡ÐµÐ¼ Ð² %ld Ð±ÑƒÑ„ерах"
 
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: Ðевозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ð¸Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñать Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ðµ Ñ„айлы"
+
 msgid "E97: Cannot create diffs"
 msgstr "E97: Ðевозможно Ñоздать Ñ„айлы Ð¾Ñ‚личий"
 
 msgid "Patch file"
 msgstr "Файл-заплатка"
 
+msgid "E816: Cannot read patch output"
+msgstr "E816: Ðевозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ð²Ñ‹Ð²Ð¾Ð´ patch"
+
 msgid "E98: Cannot read diff output"
-msgstr "E98: Ðевозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ð²Ñ‹Ð²Ð¾Ð´ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ diff"
+msgstr "E98: Ðевозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ð²Ñ‹Ð²Ð¾Ð´ diff"
 
 msgid "E99: Current buffer is not in diff mode"
 msgstr "E99: Ðктивный Ð±ÑƒÑ„ер Ð½Ðµ Ð½Ð°Ñ…одитÑѠв Ñ€ÐµÐ¶Ð¸Ð¼Ðµ Ð¾Ñ‚личий"
 
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: Ð‘ольше Ð½ÐµÑ‚ Ð¸Ð·Ð¼ÐµÐ½Ñемых Ð±ÑƒÑ„еров Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ Ð¾Ñ‚личий"
+
 msgid "E100: No other buffer in diff mode"
 msgstr "E100: Ð‘ольше Ð½ÐµÑ‚ Ð±ÑƒÑ„еров Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ Ð¾Ñ‚личий"
 
@@ -212,6 +242,9 @@ msgstr "E102: Ðе Ð¼Ð¾Ð³Ñƒ Ð½Ð°Ð¹Ñ‚и Ð±ÑƒÑ„ер \"%s\""
 msgid "E103: Buffer \"%s\" is not in diff mode"
 msgstr "E103: Ð‘уфер \"%s\" Ð½Ðµ Ð½Ð°Ñ…одитÑѠв Ñ€ÐµÐ¶Ð¸Ð¼Ðµ Ð¾Ñ‚личий"
 
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: Ð‘уфер Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»ÑÑ"
+
 msgid "E104: Escape not allowed in digraph"
 msgstr "E104: Ð­ÐºÑ€Ð°Ð½Ð¸Ñ€ÑƒÑŽÑ‰Ð¸Ð¹ Ñимвол Escape Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать Ð² Ð´Ð¸Ð³Ñ€Ð°Ñ„е"
 
@@ -221,17 +254,15 @@ msgstr "E544: Ð¤Ð°Ð¹Ð» Ñ Ñ€Ð°Ñкладкой ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚уры Ð½Ðµ Ð½Ð°Ð¹
 msgid "E105: Using :loadkeymap not in a sourced file"
 msgstr "E105: ÐšÐ¾Ð¼Ð°Ð½Ð´Ð° :loadkeymap Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð° Ð²Ð½Ðµ Ñ„айла ÑценариÑ"
 
+msgid "E791: Empty keymap entry"
+msgstr "E791: Ð¿ÑƒÑтаѠзапиÑÑŒ Ñ€Ð°Ñкладки ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚уры"
+
 msgid " Keyword completion (^N^P)"
 msgstr " Ðвтодополнение ÐºÐ»ÑŽÑ‡ÐµÐ²Ð¾Ð³Ð¾ Ñлова (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^E^Y^L^]^F^I^K^D^V^N^P)"
-msgstr " Ðвтодополнение ^X (^E^Y^L^]^F^I^K^D^V^N^P)"
-
-#. Scroll has it's own msgs, in it's place there is the msg for local
-#. * ctrl_x_mode = 0 (eg continue_status & CONT_LOCAL)  -- Acevedo
-msgid " Keyword Local completion (^N^P)"
-msgstr " ÐœÐµÑтное Ð°Ð²Ñ‚одополнение ÐºÐ»ÑŽÑ‡ÐµÐ²Ð¾Ð³Ð¾ Ñлова (^N^P)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " Ð ÐµÐ¶Ð¸Ð¼ ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr " Ðвтодополнение Ñ†ÐµÐ»Ð¾Ð¹ Ñтроки (^L^N^P)"
@@ -257,15 +288,33 @@ msgstr " Ðвтодополнение Ñинонимов (^T^N^P)"
 msgid " Command-line completion (^V^N^P)"
 msgstr " Ðвтодополнение ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки (^V^N^P)"
 
+msgid " User defined completion (^U^N^P)"
+msgstr " ÐŸÐ¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ельÑкое Ð°Ð²Ñ‚одополнение (^U^N^P)"
+
+msgid " Omni completion (^O^N^P)"
+msgstr " Omni-дополнение (^O^N^P)"
+
+msgid " Spelling suggestion (s^N^P)"
+msgstr " ÐŸÑ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ Ð¸ÑправлениѠправопиÑаниѠ(s^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " ÐœÐµÑтное Ð°Ð²Ñ‚одополнение ÐºÐ»ÑŽÑ‡ÐµÐ²Ð¾Ð³Ð¾ Ñлова (^N^P)"
+
 msgid "Hit end of paragraph"
 msgstr "Конец Ð°Ð±Ð·Ð°Ñ†Ð°"
 
-msgid "'thesaurus' option is empty"
-msgstr "Ðе Ð·Ð°Ð´Ð°Ð½Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ†Ð¸Ð¸ 'thesaurus'"
+msgid "E839: Completion function changed window"
+msgstr "E839: Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð°Ð²Ñ‚одополнениѠизменила Ð¾ÐºÐ½Ð¾"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð°Ð²Ñ‚одополнениѠудалила Ñ‚екÑÑ‚"
 
 msgid "'dictionary' option is empty"
 msgstr "Ðе Ð·Ð°Ð´Ð°Ð½Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ†Ð¸Ð¸ 'dictionary'"
 
+msgid "'thesaurus' option is empty"
+msgstr "Ðе Ð·Ð°Ð´Ð°Ð½Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ†Ð¸Ð¸ 'thesaurus'"
+
 #, c-format
 msgid "Scanning dictionary: %s"
 msgstr "ПроÑмотр ÑловарÑ: %s"
@@ -280,7 +329,6 @@ msgstr " (замена) ÐŸÑ€Ð¾ÐºÑ€ÑƒÑ‚ка (^E/^Y)"
 msgid "Scanning: %s"
 msgstr "ПроÑмотр: %s"
 
-#, c-format
 msgid "Scanning tags."
 msgstr "ВыполнÑетÑѠпоиÑк Ñреди Ð¼ÐµÑ‚ок."
 
@@ -311,11 +359,103 @@ msgstr "ÑоответÑтвие %d Ð¸Ð· %d"
 msgid "match %d"
 msgstr "ÑоответÑтвие %d"
 
-#. Skip further arguments but do continue to
-#. * search for a trailing command.
+msgid "E18: Unexpected characters in :let"
+msgstr "E18: Ðеожиданные Ñимволы Ð² :let"
+
+#, c-format
+msgid "E684: list index out of range: %ld"
+msgstr "E684: Ð˜Ð½Ð´ÐµÐºÑ ÑпиÑка Ð·Ð° Ð¿Ñ€ÐµÐ´ÐµÐ»Ð°Ð¼Ð¸ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°: %ld"
+
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121: ÐеопределённаѠпеременнаÑ: %s"
+
+msgid "E111: Missing ']'"
+msgstr "E111: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° ']'"
+
+#, c-format
+msgid "E686: Argument of %s must be a List"
+msgstr "E686: ÐŸÐ°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ %s Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ ÑпиÑком"
+
+#, c-format
+msgid "E712: Argument of %s must be a List or Dictionary"
+msgstr "E712: ÐŸÐ°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ %s Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ ÑпиÑком Ð¸Ð»Ð¸ Ñловарём"
+
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: Ðевозможно Ð¸Ñпользовать Ð¿ÑƒÑтой ÐºÐ»ÑŽÑ‡ Ð´Ð»Ñ ÑловарÑ"
+
+msgid "E714: List required"
+msgstr "E714: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ ÑпиÑок"
+
+msgid "E715: Dictionary required"
+msgstr "E715: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ Ñловарь"
+
+#, c-format
+msgid "E118: Too many arguments for function: %s"
+msgstr "E118: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров Ð´Ð»Ñ Ñ„ункции %s"
+
+#, c-format
+msgid "E716: Key not present in Dictionary: %s"
+msgstr "E716: Ðет ÐºÐ»ÑŽÑ‡Ð° Ð² Ñловаре: %s"
+
+#, c-format
+msgid "E122: Function %s already exists, add ! to replace it"
+msgstr "E122: Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ %s ÑƒÐ¶Ðµ ÑущеÑтвует. Ð”обавьте !, Ñ‡Ñ‚обы Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ ÐµÑ‘."
+
+msgid "E717: Dictionary entry already exists"
+msgstr "E717: Ð—апиÑÑŒ ÑƒÐ¶Ðµ ÑущеÑтвует Ð² Ñловаре"
+
+msgid "E718: Funcref required"
+msgstr "E718: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ ÑÑылка Ð½Ð° Ñ„ункцию"
+
+msgid "E719: Cannot use [:] with a Dictionary"
+msgstr "E719: Ðевозможно Ð¸Ñпользовать [:] Ñо Ñловарём"
+
+#, c-format
+msgid "E734: Wrong variable type for %s="
+msgstr "E734: Ðеправильный Ñ‚ип Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ Ð´Ð»Ñ %s="
+
+#, c-format
+msgid "E130: Unknown function: %s"
+msgstr "E130: ÐеизвеÑтнаѠфункциÑ: %s"
+
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461: ÐедопуÑтимое Ð¸Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹: %s"
+
+msgid "E806: using Float as a String"
+msgstr "E806: Ð˜Ñпользование Ñ‡Ð¸Ñла Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚очкой ÐºÐ°Ðº Ñтроки"
+
+msgid "E687: Less targets than List items"
+msgstr "E687: Ð¦ÐµÐ»ÐµÐ¹ Ð¼ÐµÐ½ÑŒÑˆÐµ Ñ‡ÐµÐ¼ Ñлементов ÑпиÑка"
+
+msgid "E688: More targets than List items"
+msgstr "E688: Ð¦ÐµÐ»ÐµÐ¹ Ð±Ð¾Ð»ÑŒÑˆÐµ Ñ‡ÐµÐ¼ Ñлементов ÑпиÑка"
+
+msgid "Double ; in list of variables"
+msgstr "ДвойнаѠ; Ð² ÑпиÑке Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ…"
+
 #, c-format
-msgid "E106: Unknown variable: \"%s\""
-msgstr "E106: ÐеизвеÑтнаѠпеременнаÑ: \"%s\""
+msgid "E738: Can't list variables for %s"
+msgstr "E738: Ðевозможно Ð¾Ñ‚образить Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ðµ Ð´Ð»Ñ %s"
+
+msgid "E689: Can only index a List or Dictionary"
+msgstr "E689: Ð˜Ð½Ð´ÐµÐºÑирование Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ñ‚олько ÑпиÑка Ð¸Ð»Ð¸ ÑловарÑ"
+
+msgid "E708: [:] must come last"
+msgstr "E708: [:] Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ð¾Ñледним"
+
+msgid "E709: [:] requires a List value"
+msgstr "E709: [:] Ñ‚ребует Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ ÑпиÑок"
+
+msgid "E710: List value has more items than target"
+msgstr "E710: Ð­Ð»ÐµÐ¼ÐµÐ½Ñ‚ов ÑпиÑка-значениѠбольше Ñ‡ÐµÐ¼ Ð² Ñ†ÐµÐ»Ð¸"
+
+msgid "E711: List value has not enough items"
+msgstr "E711: Ð¡Ð¿Ð¸Ñок-значение Ð½Ðµ Ñодержит Ð´Ð¾Ñтаточно Ñлементов"
+
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ \"in\" Ð¿Ð¾Ñле :for"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -325,14 +465,38 @@ msgstr "E107: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ñ‹ Ñкобки: %s"
 msgid "E108: No such variable: \"%s\""
 msgstr "E108: Ðет Ñ‚акой Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹: \"%s\""
 
+msgid "E743: variable nested too deep for (un)lock"
+msgstr "E743: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð³Ð»ÑƒÐ±Ð¾ÐºÐ¾ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ðµ Ð´Ð»Ñ (раз)блокировки"
+
 msgid "E109: Missing ':' after '?'"
 msgstr "E109: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ ':' Ð¿Ð¾Ñле '?'"
 
+msgid "E691: Can only compare List with List"
+msgstr "E691: Ð¡Ð¿Ð¸Ñок Ð¼Ð¾Ð¶Ð½Ð¾ Ñравнивать Ñ‚олько Ñо ÑпиÑком"
+
+msgid "E692: Invalid operation for Lists"
+msgstr "E692: ÐедопуÑтимаѠоперациѠдлѠÑпиÑков"
+
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735: Ð¡Ð»Ð¾Ð²Ð°Ñ€ÑŒ Ð¼Ð¾Ð¶Ð½Ð¾ Ñравнивать Ñ‚олько Ñо Ñловарём"
+
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736: ÐедопуÑтимаѠоперациѠдлѠÑловарÑ"
+
+msgid "E693: Can only compare Funcref with Funcref"
+msgstr "E693: Ð¡Ñылку Ð½Ð° Ñ„ункцию Ð¼Ð¾Ð¶Ð½Ð¾ Ñравнивать Ñ‚олько Ñ ÑÑылкой Ð½Ð° Ñ„ункцию"
+
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694: ÐедопуÑтимаѠоперациѠдлѠÑÑылки Ð½Ð° Ñ„ункцию"
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: Ðевозможно Ð¸Ñпользовать '%' Ñ Ñ‡Ð¸Ñлом Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚очкой"
+
 msgid "E110: Missing ')'"
 msgstr "E110: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° ')'"
 
-msgid "E111: Missing ']'"
-msgstr "E111: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° ']'"
+msgid "E695: Cannot index a Funcref"
+msgstr "E695: Ðевозможно Ð¸Ð½Ð´ÐµÐºÑировать ÑÑылку Ð½Ð° Ñ„ункцию"
 
 #, c-format
 msgid "E112: Option name missing: %s"
@@ -351,6 +515,37 @@ msgid "E115: Missing quote: %s"
 msgstr "E115: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°: %s"
 
 #, c-format
+msgid "E696: Missing comma in List: %s"
+msgstr "E696: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° Ð·Ð°Ð¿ÑтаѠв ÑпиÑке: %s"
+
+#, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ðµ ÑпиÑка ']': %s"
+
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð´Ð²Ð¾ÐµÑ‚очие Ð² Ñловаре: %s"
+
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: ÐŸÐ¾Ð²Ñ‚ор ÐºÐ»ÑŽÑ‡Ð° Ð² Ñловаре: \"%s\""
+
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° Ð·Ð°Ð¿ÑтаѠв Ñловаре: %s"
+
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ðµ ÑловарѠ'}': %s"
+
+msgid "E724: variable nested too deep for displaying"
+msgstr "E724: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð³Ð»ÑƒÐ±Ð¾ÐºÐ¾ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ðµ Ð´Ð»Ñ Ð¾Ñ‚ображениÑ"
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров Ð´Ð»Ñ Ñ„ункции %s"
+
+#, c-format
 msgid "E116: Invalid arguments for function %s"
 msgstr "E116: ÐŸÐ°Ñ€Ð°Ð¼ÐµÑ‚ры Ð´Ð»Ñ Ñ„ункции %s Ð·Ð°Ð´Ð°Ð½Ñ‹ Ð½ÐµÐ²ÐµÑ€Ð½Ð¾"
 
@@ -359,10 +554,6 @@ msgid "E117: Unknown function: %s"
 msgstr "E117: ÐеизвеÑтнаѠфункциÑ: %s"
 
 #, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров Ð´Ð»Ñ Ñ„ункции %s"
-
-#, c-format
 msgid "E119: Not enough arguments for function: %s"
 msgstr "E119: ÐедоÑтаточно Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров Ð´Ð»Ñ Ñ„ункции %s"
 
@@ -370,6 +561,22 @@ msgstr "E119: ÐедоÑтаточно Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров Ð´Ð»Ñ Ñ„ункци
 msgid "E120: Using <SID> not in a script context: %s"
 msgstr "E120: <SID> Ð¸ÑпользуетÑѠвне ÑценариÑ: %s"
 
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: Ð’ызов Ñ„ункции dict Ð±ÐµÐ· ÑловарÑ: %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑѠцелое Ñ‡Ð¸Ñло Ð¸Ð»Ð¸ Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚очкой"
+
+msgid "add() argument"
+msgstr "параметр add()"
+
+msgid "E699: Too many arguments"
+msgstr "E699: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров"
+
+msgid "E785: complete() can only be used in Insert mode"
+msgstr "E785: complete() Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸ÑпользоватьÑѠтолько Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ Ð’Ñтавки"
+
 #.
 #. * Yes this is ugly, I don't particularly like it either.  But doing it
 #. * this way has the compelling advantage that translations need not to
@@ -379,79 +586,183 @@ msgid "&Ok"
 msgstr "&Ok"
 
 #, c-format
+msgid "E737: Key already exists: %s"
+msgstr "E737: ÐšÐ»ÑŽÑ‡ ÑƒÐ¶Ðµ ÑущеÑтвует: %s"
+
+msgid "extend() argument"
+msgstr "параметр extend()"
+
+msgid "map() argument"
+msgstr "параметр map()"
+
+msgid "filter() argument"
+msgstr "параметр filter()"
+
+#, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld Ñтрок: "
 
+#, c-format
+msgid "E700: Unknown function: %s"
+msgstr "E700: ÐеизвеÑтнаѠфункциÑ: %s"
+
 msgid ""
 "&OK\n"
 "&Cancel"
 msgstr ""
 "&OK\n"
-"О&тмена"
+"&C ÐžÑ‚мена"
 
 msgid "called inputrestore() more often than inputsave()"
 msgstr "ФункциѠinputrestore() Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÑ‚ÑѠчаще, Ñ‡ÐµÐ¼ Ñ„ункциѠinputsave()"
 
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ ÑимволичеÑких ÑÑылок (цикл?)"
+msgid "insert() argument"
+msgstr "параметр insert()"
+
+msgid "E786: Range not allowed"
+msgstr "E786: Ð”иапазон Ð½Ðµ Ð´Ð¾Ð¿ÑƒÑкаетÑÑ"
+
+msgid "E701: Invalid type for len()"
+msgstr "E701: Ðеправильные Ñ‚ип Ð´Ð»Ñ len()"
+
+msgid "E726: Stride is zero"
+msgstr "E726: Ðулевой ÑˆÐ°Ð³"
+
+msgid "E727: Start past end"
+msgstr "E727: Ðачало Ð¿Ð¾Ñле ÐºÐ¾Ð½Ñ†Ð°"
+
+msgid "<empty>"
+msgstr "<пуÑто>"
 
 msgid "E240: No connection to Vim server"
 msgstr "E240: Ðет ÑвÑзи Ñ Ñервером Vim"
 
+#, c-format
+msgid "E241: Unable to send to %s"
+msgstr "E241: Ðе Ð¼Ð¾Ð³Ñƒ Ð¾Ñ‚править Ñообщение Ð´Ð»Ñ %s"
+
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Ð¡ÐµÑ€Ð²ÐµÑ€ Ð½Ðµ Ð¾Ñ‚вечает"
 
+msgid "remove() argument"
+msgstr "параметр remove()"
+
+msgid "E655: Too many symbolic links (cycle?)"
+msgstr "E655: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ ÑимволичеÑких ÑÑылок (цикл?)"
+
+msgid "reverse() argument"
+msgstr "параметр reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: Ðе Ð¼Ð¾Ð³Ñƒ Ð¾Ñ‚ветить ÐºÐ»Ð¸ÐµÐ½Ñ‚у"
 
-#, c-format
-msgid "E241: Unable to send to %s"
-msgstr "E241: Ðе Ð¼Ð¾Ð³Ñƒ Ð¾Ñ‚править Ñообщение Ð´Ð»Ñ %s"
+msgid "sort() argument"
+msgstr "параметр sort()"
+
+msgid "E702: Sort compare function failed"
+msgstr "E702: Ðеудачное Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ðµ Ñ„ункции ÑравнениѠпри Ñортировке"
 
 msgid "(Invalid)"
 msgstr "(Ðеправильно)"
 
+msgid "E677: Error writing temp file"
+msgstr "E677: ÐžÑˆÐ¸Ð±ÐºÐ° Ð·Ð°Ð¿Ð¸Ñи Ð²Ð¾ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¹ Ñ„айл"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: Ð˜Ñпользование Ñ‡Ð¸Ñла Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚очкой ÐºÐ°Ðº Ñ†ÐµÐ»Ð¾Ð³Ð¾"
+
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703: Ð˜Ñпользование ÑÑылки Ð½Ð° Ñ„ункцию ÐºÐ°Ðº Ñ‡Ð¸Ñла"
+
+msgid "E745: Using a List as a Number"
+msgstr "E745: Ð˜Ñпользование ÑпиÑка ÐºÐ°Ðº Ñ‡Ð¸Ñла"
+
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728: Ð˜Ñпользование ÑловарѠкак Ñ‡Ð¸Ñла"
+
+msgid "E729: using Funcref as a String"
+msgstr "E729: Ð˜Ñпользование ÑÑылки Ð½Ð° Ñ„ункцию ÐºÐ°Ðº Ñтроки"
+
+msgid "E730: using List as a String"
+msgstr "E730: Ð˜Ñпользование ÑпиÑка ÐºÐ°Ðº Ñтроки"
+
+msgid "E731: using Dictionary as a String"
+msgstr "E731: Ð˜Ñпользование ÑловарѠкак Ñтроки"
+
 #, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: ÐеопределеннаѠпеременнаÑ: %s"
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: ÐеÑоответÑтвие Ñ‚ипа Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ Ð´Ð»Ñ: %s"
 
 #, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: ÐедопуÑтимое Ð¸Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹: %s"
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Ðевозможно ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½ÑƒÑŽ %s"
 
 #, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ %s ÑƒÐ¶Ðµ ÑущеÑтвует. Ð”обавьте !, Ñ‡Ñ‚обы Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ ÐµÑ‘."
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr ""
+"E704: Ð˜Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ ÑÑылки Ð½Ð° Ñ„ункцию Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ‚ÑŒÑѠѠзаглавной Ð±ÑƒÐºÐ²Ñ‹: "
+"%s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Ð˜Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ ÐºÐ¾Ð½Ñ„ликтует Ñ ÑущеÑтвующей Ñ„ункцией: %s"
+
+#, c-format
+msgid "E741: Value is locked: %s"
+msgstr "E741: Ð—начение Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¾: %s"
+
+msgid "Unknown"
+msgstr "ÐеизвеÑтно"
+
+#, c-format
+msgid "E742: Cannot change value of %s"
+msgstr "E742: Ðевозможно Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ %s"
+
+msgid "E698: variable nested too deep for making a copy"
+msgstr "E698: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð³Ð»ÑƒÐ±Ð¾ÐºÐ¾ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ðµ Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ"
 
 #, c-format
 msgid "E123: Undefined function: %s"
-msgstr "E123: ÐеопределеннаѠфункциÑ: %s"
+msgstr "E123: ÐеопределённаѠфункциÑ: %s"
 
 #, c-format
 msgid "E124: Missing '(': %s"
 msgstr "E124: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° '(': %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: Ð—деÑÑŒ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ñпользовать g:"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: ÐедопуÑтимый Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: ÐŸÐ¾Ð²Ñ‚орÑющееÑѠимѠпараметра: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° :endfunction"
 
 #, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: Ð˜Ð¼Ñ Ñ„ункции ÐºÐ¾Ð½Ñ„ликтует Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹: %s"
+
+#, c-format
 msgid "E127: Cannot redefine function %s: It is in use"
 msgstr "E127: Ðевозможно Ð¿ÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ Ñ„ункцию %s, Ð¾Ð½Ð° Ð¸ÑпользуетÑÑ"
 
+#, c-format
+msgid "E746: Function name does not match script file name: %s"
+msgstr "E746: Ð˜Ð¼Ñ Ñ„ункции Ð½Ðµ ÑоответÑтвует Ð¸Ð¼ÐµÐ½Ð¸ Ñ„айла ÑценариÑ: %s"
+
 msgid "E129: Function name required"
 msgstr "E129: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑѠимѠфункции"
 
 #, c-format
-msgid "E128: Function name must start with a capital: %s"
-msgstr "E128: Ð˜Ð¼Ñ Ñ„ункции Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ‚ÑŒÑѠѠпропиÑной Ð±ÑƒÐºÐ²Ñ‹: %s"
-
-#, c-format
-msgid "E130: Undefined function: %s"
-msgstr "E130: Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ %s Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð°"
+msgid "E128: Function name must start with a capital or contain a colon: %s"
+msgstr ""
+"E128: Ð˜Ð¼Ñ Ñ„ункции Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ‚ÑŒÑѠѠзаглавной Ð±ÑƒÐºÐ²Ñ‹ Ð¸Ð»Ð¸ Ñодержать "
+"двоеточие: %s"
 
 #, c-format
 msgid "E131: Cannot delete function %s: It is in use"
@@ -460,7 +771,6 @@ msgstr "E131: Ðевозможно ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ñ„ункцию %s, Ð¾Ð½Ð° Ð¸Ñ
 msgid "E132: Function call depth is higher than 'maxfuncdepth'"
 msgstr "E132: Ð“лубина Ð²Ñ‹Ð·Ð¾Ð²Ð° Ñ„ункции Ð±Ð¾Ð»ÑŒÑˆÐµ, Ñ‡ÐµÐ¼ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ 'maxfuncdepth'"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "calling %s"
 msgstr "вызов %s"
@@ -474,10 +784,9 @@ msgid "%s returning #%ld"
 msgstr "%s Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÐµÑ‚ #%ld"
 
 #, c-format
-msgid "%s returning \"%s\""
-msgstr "%s Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÐµÑ‚ \"%s\""
+msgid "%s returning %s"
+msgstr "%s Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÐµÑ‚ %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "continuing in %s"
 msgstr "продолжение Ð² %s"
@@ -485,7 +794,6 @@ msgstr "продолжение Ð² %s"
 msgid "E133: :return not inside a function"
 msgstr "E133: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° :return Ð²Ð½Ðµ Ñ„ункции"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -493,6 +801,16 @@ msgstr ""
 "\n"
 "# Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ñ‹Ðµ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ðµ:\n"
 
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\tÐ’ Ð¿Ð¾Ñледний Ñ€Ð°Ð· Ð¾Ð¿Ñ†Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð° Ð² "
+
+msgid "No old files"
+msgstr "Ðет Ñтарых Ñ„айлов"
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
 msgstr "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
@@ -543,9 +861,13 @@ msgstr " Ð¸Ð½Ñ„о"
 msgid " marks"
 msgstr " Ð¾Ñ‚меток"
 
+msgid " oldfiles"
+msgstr " Ñтарых Ñ„айлов"
+
 msgid " FAILED"
 msgstr " ÐЕУДÐЧÐО"
 
+#. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
 msgstr "E137: ÐŸÑ€Ð°Ð²Ð° Ð½Ð° Ð·Ð°Ð¿Ð¸ÑÑŒ Ñ„айла viminfo Ð¾Ñ‚ÑутÑтвуют: %s"
@@ -563,7 +885,6 @@ msgstr "ЗапиÑÑŒ Ñ„айла viminfo \"%s\""
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Ð­Ñ‚от Ñ„айл viminfo Ð°Ð²Ñ‚оматичеÑки Ñоздан Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -571,7 +892,6 @@ msgstr ""
 "# Ð•Ð³Ð¾ Ð¼Ð¾Ð¶Ð½Ð¾ (оÑторожно!) Ñ€ÐµÐ´Ð°ÐºÑ‚ировать.\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Ð—начение Ð¾Ð¿Ñ†Ð¸Ð¸ 'encoding' Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ‚ Ð·Ð°Ð¿Ð¸Ñи Ñ„айла\n"
 
@@ -581,11 +901,6 @@ msgstr "ÐедопуÑтимый Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ñимвол"
 msgid "Save As"
 msgstr "Сохранить ÐºÐ°Ðº"
 
-#. Overwriting a file that is loaded in another buffer is not a
-#. * good idea.
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: Ð¤Ð°Ð¹Ð» Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½ Ð² Ð´Ñ€ÑƒÐ³Ð¾Ð¼ Ð±ÑƒÑ„ере"
-
 msgid "Write partial file?"
 msgstr "ЗапиÑать Ñ„айл Ñ‡Ð°Ñтично?"
 
@@ -593,8 +908,16 @@ msgid "E140: Use ! to write partial buffer"
 msgstr "E140: Ð”лѠзапиÑи Ñ‡Ð°Ñти Ð±ÑƒÑ„ера Ð¸Ñпользуйте !"
 
 #, c-format
-msgid "Overwrite existing file \"%.*s\"?"
-msgstr "ПерепиÑать ÑущеÑтвующий Ñ„айл \"%.*s\"?"
+msgid "Overwrite existing file \"%s\"?"
+msgstr "ПерезапиÑать ÑущеÑтвующий Ñ„айл \"%s\"?"
+
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "Своп-файл \"%s\" ÑущеÑтвует, Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñать?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: Ð¡Ð²Ð¾Ð¿-файл ÑущеÑтвует: %s (:silent! Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -605,12 +928,27 @@ msgstr "E142: Ð¤Ð°Ð¹Ð» Ð½Ðµ Ñохранён: Ð·Ð°Ð¿Ð¸ÑÑŒ Ð¾Ñ‚ключена Ð¾
 
 #, c-format
 msgid ""
-"'readonly' option is set for \"%.*s\".\n"
+"'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"ДлѠ\"%.*s\" Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° Ð¾Ð¿Ñ†Ð¸Ñ 'readonly'.\n"
+"ДлѠ\"%s\" Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° Ð¾Ð¿Ñ†Ð¸Ñ 'readonly'.\n"
 "ЗапиÑать?"
 
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+"Файл \"%s\" Ð¸Ð¼ÐµÐµÑ‚ Ñ€ÐµÐ¶Ð¸Ð¼ Ð´Ð¾Ñтупа Ñ‚олько Ð´Ð»Ñ Ñ‡Ñ‚ениÑ.\n"
+"Ðо, Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ñ„айл ÑƒÐ´Ð°ÑÑ‚ÑѠзапиÑать.\n"
+"Хотите Ð¿Ð¾Ð¿Ñ€Ð¾Ð±Ð¾Ð²Ð°Ñ‚ÑŒ?"
+
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr ""
+"E505: \"%s\" Ð¾Ñ‚крыт Ñ‚олько Ð´Ð»Ñ Ñ‡Ñ‚ениѠ(добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+
 msgid "Edit File"
 msgstr "Редактирование Ñ„айла"
 
@@ -634,10 +972,17 @@ msgstr "заменить Ð½Ð° %s? (y/n/a/q/l/^E/^Y)"
 msgid "(Interrupted) "
 msgstr "(Прервано)"
 
+msgid "1 match"
+msgstr "Одно ÑоответÑтвие"
+
 msgid "1 substitution"
 msgstr "Одна Ð·Ð°Ð¼ÐµÐ½Ð°"
 
 #, c-format
+msgid "%ld matches"
+msgstr "%ld ÑоответÑтвий"
+
+#, c-format
 msgid "%ld substitutions"
 msgstr "%ld Ð·Ð°Ð¼ÐµÐ½"
 
@@ -659,6 +1004,9 @@ msgid "Pattern found in every line: %s"
 msgstr "СоответÑтвие ÑˆÐ°Ð±Ð»Ð¾Ð½Ñƒ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ð½Ð° ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñтроке: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "Шаблон Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -673,7 +1021,7 @@ msgstr "E478: Ð¡Ð¿Ð¾ÐºÐ¾Ð¹Ñтвие, Ñ‚олько ÑпокойÑтвие!"
 
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: Ãº Ñожалению, Ñправка '%s' Ð´Ð»Ñ %s Ð¾Ñ‚ÑутÑтвует"
+msgstr "E661: Ã\9a Ñожалению, Ñправка '%s' Ð´Ð»Ñ %s Ð¾Ñ‚ÑутÑтвует"
 
 #, c-format
 msgid "E149: Sorry, no help for %s"
@@ -700,8 +1048,8 @@ msgid "E670: Mix of help file encodings within a language: %s"
 msgstr "E670: Ð¤Ð°Ð¹Ð»Ñ‹ Ñправки Ð¸Ñпользуют Ñ€Ð°Ð·Ð½Ñ‹Ðµ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ¸ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñзыка: %s"
 
 #, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s"
-msgstr "E154: ÐŸÐ¾Ð²Ñ‚орÑющаÑÑѠметка \"%s\" Ð² Ñ„айле %s"
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154: ÐŸÐ¾Ð²Ñ‚орÑющаÑÑѠметка \"%s\" Ð² Ñ„айле %s/%s"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
@@ -767,9 +1115,12 @@ msgstr "Точки Ð¾Ñтановки Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ñ‹"
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s ÑÑ‚Ñ€. %ld"
 
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: ÐŸÐµÑ€Ð²Ð¾Ðµ Ð¸Ñпользование \":profile start {имÑ-файла}\""
+
 #, c-format
-msgid "Save changes to \"%.*s\"?"
-msgstr "Сохранить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² \"%.*s\"?"
+msgid "Save changes to \"%s\"?"
+msgstr "Сохранить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² \"%s\"?"
 
 msgid "Untitled"
 msgstr "Без Ð¸Ð¼ÐµÐ½Ð¸"
@@ -793,7 +1144,7 @@ msgstr "E165: Ð­Ñ‚о Ð¿Ð¾Ñледний Ñ„айл"
 
 #, c-format
 msgid "E666: compiler not supported: %s"
-msgstr "E666: ÃºомпилÑтор Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ: %s"
+msgstr "E666: Ã\9aомпилÑтор Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ: %s"
 
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
@@ -834,6 +1185,21 @@ msgstr "Ñтрока %ld: Ñчитывание \"%s\""
 msgid "finished sourcing %s"
 msgstr "Ñчитывание ÑценариѠ%s Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾"
 
+msgid "modeline"
+msgstr "режимнаѠÑтрока"
+
+msgid "--cmd argument"
+msgstr "--cmd Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€"
+
+msgid "-c argument"
+msgstr "-c Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€"
+
+msgid "environment variable"
+msgstr "переменнаѠокружениÑ"
+
+msgid "error handler"
+msgstr "обработчик Ð¾ÑˆÐ¸Ð±ÐºÐ¸"
+
 msgid "W15: Warning: Wrong line separator, ^M may be missing"
 msgstr ""
 "W15: ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ель Ñтроки. Ð’озможно Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ ^M"
@@ -845,100 +1211,25 @@ msgid "E168: :finish used outside of a sourced file"
 msgstr "E168: ÐšÐ¾Ð¼Ð°Ð½Ð´Ð° :finish Ð¸ÑпользуетÑѠвне Ñ„айла ÑценариÑ"
 
 #, c-format
-msgid "Page %d"
-msgstr "Страница %d"
-
-msgid "No text to be printed"
-msgstr "Печатать Ð½ÐµÑ‡ÐµÐ³Ð¾"
-
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Печать ÑÑ‚Ñ€. %d (%d%%)"
+msgid "Current %slanguage: \"%s\""
+msgstr "Ðктивный %sÑзык: \"%s\""
 
 #, c-format
-msgid " Copy %d of %d"
-msgstr " ÐšÐ¾Ð¿Ð¸Ñ %d Ð¸Ð· %d"
+msgid "E197: Cannot set language to \"%s\""
+msgstr "E197: Ðевозможно Ñменить Ñзык Ð½Ð° \"%s\""
 
-#, c-format
-msgid "Printed: %s"
-msgstr "Ðапечатано: %s"
+msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+msgstr "Переход Ð² Ñ€ÐµÐ¶Ð¸Ð¼ Ex. Ð”лѠперехода Ð² ÐžÐ±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ñ€ÐµÐ¶Ð¸Ð¼ Ð½Ð°Ð±ÐµÑ€Ð¸Ñ‚е \"visual\""
 
-#, c-format
-msgid "Printing aborted"
-msgstr "Печать Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰ÐµÐ½Ð°"
+msgid "E501: At end-of-file"
+msgstr "E501: Ð’ ÐºÐ¾Ð½Ñ†Ðµ Ñ„айла"
 
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: ÐžÑˆÐ¸Ð±ÐºÐ° Ð·Ð°Ð¿Ð¸Ñи Ð² Ñ„айл PostScript"
+msgid "E169: Command too recursive"
+msgstr "E169: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ñ€ÐµÐºÑƒÑ€ÑивнаѠкоманда"
 
 #, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Ðевозможно Ð¾Ñ‚крыть Ñ„айл \"%s\""
-
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Ðевозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ñ„айл Ñ€ÐµÑурÑов PostScript \"%s\""
-
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: Ñ„айл \"%s\" Ð½Ðµ ÑвлÑетÑѠфайлом Ñ€ÐµÑурÑов PostScript"
-
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: Ñ„айл \"%s\" Ð½Ðµ ÑвлÑетÑѠдопуÑтимым Ñ„айлом Ñ€ÐµÑурÑов PostScript"
-
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: Ñ„айл Ñ€ÐµÑурÑов \"%s\" Ð½ÐµÐ¸Ð·Ð²ÐµÑтной Ð²ÐµÑ€Ñии"
-
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Ðевозможно Ð¾Ñ‚крыть Ñ„айл PostScript"
-
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Ðевозможно Ð¾Ñ‚крыть Ñ„айл \"%s\""
-
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Ð¤Ð°Ð¹Ð» Ñ€ÐµÑурÑов PostScript \"prolog.ps\" Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
-
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Ð¤Ð°Ð¹Ð» Ñ€ÐµÑурÑов PostScript \"%s.ps\" Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
-
-#, c-format
-msgid "E620: Unable to convert from multi-byte to \"%s\" encoding"
-msgstr ""
-"E620: ÐŸÑ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð¸Ð· Ð¼ÑƒÐ»ÑŒÑ‚ибайтных Ñимволов Ð² ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÑƒ \"%s\" Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾"
-
-msgid "Sending to printer..."
-msgstr "Отправка Ð½Ð° Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ..."
-
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ Ñ„айла PostScript"
-
-msgid "Print job sent."
-msgstr "Задание Ð½Ð° Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ Ð¾Ñ‚правлено."
-
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "Ðктивный %sÑзык: \"%s\""
-
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Ðевозможно Ñменить Ñзык Ð½Ð° \"%s\""
-
-msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
-msgstr "Переход Ð² Ñ€ÐµÐ¶Ð¸Ð¼ Ex. Ð”лѠперехода Ð² ÐžÐ±Ñ‹Ñ‡Ð½Ñ‹Ð¹ Ñ€ÐµÐ¶Ð¸Ð¼ Ð½Ð°Ð±ÐµÑ€Ð¸Ñ‚е \"visual\""
-
-#. must be at EOF
-msgid "E501: At end-of-file"
-msgstr "E501: Ð’ ÐºÐ¾Ð½Ñ†Ðµ Ñ„айла"
-
-msgid "E169: Command too recursive"
-msgstr "E169: Cлишком Ñ€ÐµÐºÑƒÑ€ÑивнаѠкоманда"
-
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: Ð˜ÑключительнаѠÑитуациѠне Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ана: %s"
+msgid "E605: Exception not caught: %s"
+msgstr "E605: Ð˜ÑключительнаѠÑитуациѠне Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ана: %s"
 
 msgid "End of sourced file"
 msgstr "Конец Ñчитанного Ñ„айла"
@@ -995,7 +1286,7 @@ msgid "No user-defined commands found"
 msgstr "Команды, Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘нные Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚елем, Ð½Ðµ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ñ‹."
 
 msgid "E175: No attribute specified"
-msgstr "E175: Ã¿араметр Ð½Ðµ Ð·Ð°Ð´Ð°Ð½"
+msgstr "E175: Ã\9fараметр Ð½Ðµ Ð·Ð°Ð´Ð°Ð½"
 
 msgid "E176: Invalid number of arguments"
 msgstr "E176: Ðеправильное ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтво Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров"
@@ -1006,19 +1297,8 @@ msgstr "E177: Ð§Ð¸Ñло-приÑтавку Ð½ÐµÐ»ÑŒÐ·Ñ ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°Ñ‚ÑŒ Ð´Ð²
 msgid "E178: Invalid default value for count"
 msgstr "E178: Ðеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñ‡Ð¸Ñла-приÑтавки Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ"
 
-msgid "E179: argument required for complete"
-msgstr "E179: Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ‚ребуетÑѠуказать Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€"
-
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: Ðеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ: %s"
-
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr ""
-"E468: ÐŸÐ°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ Ð°Ð²Ñ‚одополнениѠможно Ð¸Ñпользовать Ñ‚олько Ñ Ð¾Ñобым Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼"
-
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: ÐžÑобое Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ‚ребует ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ра Ñ„ункции"
+msgid "E179: argument required for -complete"
+msgstr "E179: Ð”лѠ-complete Ñ‚ребуетÑѠуказать Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€"
 
 #, c-format
 msgid "E181: Invalid attribute: %s"
@@ -1030,26 +1310,59 @@ msgstr "E182: Ðеправильное Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹"
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: ÐšÐ¾Ð¼Ð°Ð½Ð´Ð° Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚елѠдолжна Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ‚ÑŒÑѠѠзаглавной Ð±ÑƒÐºÐ²Ñ‹"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841: Ð—арезервированное Ð¸Ð¼Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸ÑпользоватьÑѠдлѠкоманд Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚елÑ"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Ðет Ñ‚акой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚елÑ: %s"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Ð¦Ð²ÐµÑ‚оваѠÑхема %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð°"
+msgid "E180: Invalid complete value: %s"
+msgstr "E180: Ðеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ: %s"
+
+msgid "E468: Completion argument only allowed for custom completion"
+msgstr ""
+"E468: ÐŸÐ°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ Ð°Ð²Ñ‚одополнениѠможно Ð¸Ñпользовать Ñ‚олько Ñ Ð¾Ñобым Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼"
+
+msgid "E467: Custom completion requires a function argument"
+msgstr "E467: ÐžÑобое Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ Ñ‚ребует ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ра Ñ„ункции"
+
+msgid "unknown"
+msgstr "неизвеÑтно"
+
+#, c-format
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Ðевозможно Ð½Ð°Ð¹Ñ‚и Ñ†Ð²ÐµÑ‚овую Ñхему '%s'"
 
 msgid "Greetings, Vim user!"
-msgstr "Привет, Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ель Vim!"
+msgstr "ПриветÑтвуем Ð²Ð°Ñ, Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ель Vim!"
+
+msgid "E784: Cannot close last tab page"
+msgstr "E784: ÐельзѠзакрыть Ð¿Ð¾Ñледнюю Ð²ÐºÐ»Ð°Ð´ÐºÑƒ"
+
+msgid "Already only one tab page"
+msgstr "Ðа Ñкране Ð²Ñего Ð¾Ð´Ð½Ð° Ð²ÐºÐ»Ð°Ð´ÐºÐ°"
 
 msgid "Edit File in new window"
 msgstr "Редактировать Ñ„айл Ð² Ð½Ð¾Ð²Ð¾Ð¼ Ð¾ÐºÐ½Ðµ"
 
+#, c-format
+msgid "Tab page %d"
+msgstr "Вкладка %d"
+
 msgid "No swap file"
 msgstr "Без Ñвоп-файла"
 
 msgid "Append File"
 msgstr "Добавить Ñ„айл"
 
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+msgstr ""
+"E747: Ð¡Ð¼ÐµÐ½Ð° ÐºÐ°Ñ‚алога Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°, Ð±ÑƒÑ„ер Ð¸Ð·Ð¼ÐµÐ½Ñ‘н (добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и "
+"проверку)"
+
 msgid "E186: No previous directory"
 msgstr "E186: Ðет Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ³Ð¾ ÐºÐ°Ñ‚алога"
 
@@ -1057,7 +1370,7 @@ msgid "E187: Unknown"
 msgstr "E187: ÐеизвеÑтно"
 
 msgid "E465: :winsize requires two number arguments"
-msgstr "E465: Ãºоманда :winsize Ñ‚ребует ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð²ÑƒÑ… Ñ‡Ð¸Ñловых Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров"
+msgstr "E465: Ã\9aоманда :winsize Ñ‚ребует ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð²ÑƒÑ… Ñ‡Ð¸Ñловых Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров"
 
 #, c-format
 msgid "Window position: X %d, Y %d"
@@ -1067,7 +1380,7 @@ msgid "E188: Obtaining window position not implemented for this platform"
 msgstr "E188: Ð’ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑиÑтеме Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾ÐºÐ½Ð° Ð½Ðµ Ñ€Ð°Ð±Ð¾Ñ‚ает"
 
 msgid "E466: :winpos requires two number arguments"
-msgstr "E466: Ãºоманда :winpos Ñ‚ребует ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð²ÑƒÑ… Ñ‡Ð¸Ñловых Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров"
+msgstr "E466: Ã\9aоманда :winpos Ñ‚ребует ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð²ÑƒÑ… Ñ‡Ð¸Ñловых Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров"
 
 msgid "Save Redirection"
 msgstr "Перенаправление Ð·Ð°Ð¿Ð¸Ñи"
@@ -1082,8 +1395,12 @@ msgid "Save Setup"
 msgstr "Сохранение Ð½Ð°Ñтроек"
 
 #, c-format
+msgid "E739: Cannot create directory: %s"
+msgstr "E739: Ðевозможно Ñоздать ÐºÐ°Ñ‚алог: %s"
+
+#, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" ÑущеÑтвует (!, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+msgstr "E189: \"%s\" ÑущеÑтвует (добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
@@ -1096,6 +1413,9 @@ msgstr "E191: ÐŸÐ°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ð¿Ñ€Ñмой/обратно
 msgid "E192: Recursive use of :normal too deep"
 msgstr "E192: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð³Ð»ÑƒÐ±Ð¾ÐºÐ°Ñ Ñ€ÐµÐºÑƒÑ€ÑиѠпри Ð¸Ñпользовании ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ :normal"
 
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< Ð½Ðµ Ð´Ð¾Ñтупно Ð±ÐµÐ· Ð¾ÑобенноÑти +eval"
+
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: Ðет ÑоÑеднего Ð¸Ð¼ÐµÐ½Ð¸ Ñ„айла Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ‹ '#'"
 
@@ -1109,7 +1429,10 @@ msgid "E497: no autocommand match name to substitute for \"<amatch>\""
 msgstr "E497: Ðет Ð°Ð²Ñ‚окомандного Ð¸Ð¼ÐµÐ½Ð¸ ÑоответÑтвиѠдлѠзамены \"<amatch>\""
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: Ð½ÐµÑ‚ Ð¸Ð¼ÐµÐ½Ð¸ Ñ„айла :source Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ‹ \"<sfile>\""
+msgstr "E498: Ðет Ð¸Ð¼ÐµÐ½Ð¸ Ñ„айла :source Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ‹ \"<sfile>\""
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: Ðет Ð½Ð¾Ð¼ÐµÑ€Ð° Ñтроки Ð´Ð»Ñ Ð¸ÑпользованиѠ\"<slnum>\""
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
@@ -1176,7 +1499,7 @@ msgid "Interrupt"
 msgstr "Прерывание"
 
 msgid "E579: :if nesting too deep"
-msgstr "E579: Ñлишком Ð³Ð»ÑƒÐ±Ð¾ÐºÐ¾ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ð¹ :if"
+msgstr "E579: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð³Ð»ÑƒÐ±Ð¾ÐºÐ¾ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ð¹ :if"
 
 msgid "E580: :endif without :if"
 msgstr "E580: :endif Ð±ÐµÐ· :if"
@@ -1188,22 +1511,28 @@ msgid "E582: :elseif without :if"
 msgstr "E582: :elseif Ð±ÐµÐ· :if"
 
 msgid "E583: multiple :else"
-msgstr "E583: Ã¾бнаружено Ð½ÐµÑколько :else"
+msgstr "E583: Ã\9eбнаружено Ð½ÐµÑколько :else"
 
 msgid "E584: :elseif after :else"
 msgstr "E584: :elseif Ð¿Ð¾Ñле :else"
 
-msgid "E585: :while nesting too deep"
-msgstr "E585: Ñлишком Ð³Ð»ÑƒÐ±Ð¾ÐºÐ¾ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ð¹ :while"
+msgid "E585: :while/:for nesting too deep"
+msgstr "E585: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð³Ð»ÑƒÐ±Ð¾ÐºÐ¾Ðµ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ :while Ð¸Ð»Ð¸ :for"
 
-msgid "E586: :continue without :while"
-msgstr "E586: :continue Ð±ÐµÐ· :while"
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :continue Ð±ÐµÐ· :while Ð¸Ð»Ð¸ :for"
 
-msgid "E587: :break without :while"
-msgstr "E587: :break Ð±ÐµÐ· :while"
+msgid "E587: :break without :while or :for"
+msgstr "E587: :break Ð±ÐµÐ· :while Ð¸Ð»Ð¸ :for"
+
+msgid "E732: Using :endfor with :while"
+msgstr "E732: Ð˜Ñпользование :endfor Ñ :while"
+
+msgid "E733: Using :endwhile with :for"
+msgstr "E733: Ð˜Ñпользование :endwhile Ñ :for"
 
 msgid "E601: :try nesting too deep"
-msgstr "E601: Ñлишком Ð³Ð»ÑƒÐ±Ð¾ÐºÐ¾ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ð¹ :try"
+msgstr "E601: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð³Ð»ÑƒÐ±Ð¾ÐºÐ¾ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ‹Ð¹ :try"
 
 msgid "E603: :catch without :try"
 msgstr "E603: :catch Ð±ÐµÐ· :try"
@@ -1218,13 +1547,19 @@ msgstr "E606: :finally Ð±ÐµÐ· :try"
 
 #. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
-msgstr "E607: Ã¾бнаружено Ð½ÐµÑколько :finally"
+msgstr "E607: Ã\9eбнаружено Ð½ÐµÑколько :finally"
 
 msgid "E602: :endtry without :try"
 msgstr "E602: :endtry Ð±ÐµÐ· :try"
 
 msgid "E193: :endfunction not inside a function"
-msgstr "E193: ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° :endfunction Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸ÑпользоватьÑѠтолько Ð²Ð½ÑƒÑ‚ри Ñ„ункции"
+msgstr "E193: ÐšÐ¾Ð¼Ð°Ð½Ð´Ð° :endfunction Ð¼Ð¾Ð¶ÐµÑ‚ Ð¸ÑпользоватьÑѠтолько Ð²Ð½ÑƒÑ‚ри Ñ„ункции"
+
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð½Ðµ Ð´Ð¾Ð¿ÑƒÑкаетÑѠредактирование Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ð±ÑƒÑ„ера"
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð½Ðµ Ð´Ð¾Ð¿ÑƒÑкаетÑѠизменение Ð¸Ð½Ñ„ормации Ð¾ Ð±ÑƒÑ„ере"
 
 msgid "tagname"
 msgstr "имѠметки"
@@ -1261,6 +1596,9 @@ msgstr "E198: cmd_pchar Ð±Ð¾Ð»ÑŒÑˆÐµ Ð´Ð»Ð¸Ð½Ñ‹ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹"
 msgid "E199: Active window or buffer deleted"
 msgstr "E199: Ð£Ð´Ð°Ð»ÐµÐ½Ð¾ Ð°ÐºÑ‚ивное Ð¾ÐºÐ½Ð¾ Ð¸Ð»Ð¸ Ð±ÑƒÑ„ер"
 
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: Ðвтокоманды Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð¸ Ð±ÑƒÑ„ер Ð¸Ð»Ð¸ Ð¸Ð¼Ñ Ð±ÑƒÑ„ера"
+
 msgid "Illegal file name"
 msgstr "ÐедопуÑтимое Ð¸Ð¼Ñ Ñ„айла"
 
@@ -1270,9 +1608,18 @@ msgstr "ÑвлÑетÑѠкаталогом"
 msgid "is not a file"
 msgstr "не ÑвлÑетÑѠфайлом"
 
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr "ÑвлÑетÑѠуÑтройÑтвом (отключено Ð¿Ñ€Ð¸ Ð¾Ð¿Ñ†Ð¸Ð¸ 'opendevice')"
+
 msgid "[New File]"
 msgstr "[Ðовый Ñ„айл]"
 
+msgid "[New DIRECTORY]"
+msgstr "[Ðовый ÐšÐТÐЛОГ]"
+
+msgid "[File too big]"
+msgstr "[Файл Ñлишком Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹]"
+
 msgid "[Permission Denied]"
 msgstr "[ДоÑтуп Ð·Ð°Ð¿Ñ€ÐµÑ‰Ñ‘н]"
 
@@ -1280,13 +1627,13 @@ msgid "E200: *ReadPre autocommands made the file unreadable"
 msgstr "E200: Ð’ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚ате Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð°Ð²Ñ‚окоманд *ReadPre Ñ„айл Ñтал Ð½ÐµÑ‡Ð¸Ñ‚аемым"
 
 msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: Ã°втокоманды *ReadPre Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð¸Ð·Ð¼ÐµÐ½ÑÑ‚ÑŒ Ð°ÐºÑ‚ивный Ð±ÑƒÑ„ер"
+msgstr "E201: Ã\90втокоманды *ReadPre Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ Ð¸Ð·Ð¼ÐµÐ½ÑÑ‚ÑŒ Ð°ÐºÑ‚ивный Ð±ÑƒÑ„ер"
 
 msgid "Vim: Reading from stdin...\n"
-msgstr "Vim: Ã²Ñ\8bÿþûýÑ\8fõÑ\82Ñ\81Ñ\8f Ã‘\87тение Ð¸Ð· Ñтандартного Ð¿Ð¾Ñ‚ока Ð²Ð²Ð¾Ð´Ð° stdin...\n"
+msgstr "Vim: Ã§тение Ð¸Ð· Ñтандартного Ð¿Ð¾Ñ‚ока Ð²Ð²Ð¾Ð´Ð° stdin...\n"
 
 msgid "Reading from stdin..."
-msgstr "Ã\92Ñ\8bÿþûýÑ\8fõÑ\82Ñ\81Ñ\8f Ã‘\87тение Ð¸Ð· Ñтандартного Ð¿Ð¾Ñ‚ока Ð²Ð²Ð¾Ð´Ð° stdin..."
+msgstr "çтение Ð¸Ð· Ñтандартного Ð¿Ð¾Ñ‚ока Ð²Ð²Ð¾Ð´Ð° stdin..."
 
 #. Re-opening the original file failed!
 msgid "E202: Conversion made file unreadable!"
@@ -1301,15 +1648,12 @@ msgstr "[fifo]"
 msgid "[socket]"
 msgstr "[гнездо]"
 
-msgid "[RO]"
-msgstr "[RO]"
+msgid "[character special]"
+msgstr "[Ñпециальный Ñимвольный]"
 
 msgid "[CR missing]"
 msgstr "[пропущены Ñимволы CR]"
 
-msgid "[NL found]"
-msgstr "[Обнаружены Ñимволы NL]"
-
 msgid "[long lines split]"
 msgstr "[длинные Ñтроки Ñ€Ð°Ð·Ð±Ð¸Ñ‚Ñ‹]"
 
@@ -1319,11 +1663,15 @@ msgstr "[БЕЗ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ð¹]"
 msgid "[converted]"
 msgstr "[перекодировано]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[зашифровано]"
 
-msgid "[CONVERSION ERROR]"
-msgstr "[ОШИБКРПРЕОБРÐЗОВÐÐИЯ]"
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[ОШИБКРПРЕОБРÐЗОВÐÐИЯ Ð² Ñтроке %ld]"
 
 #, c-format
 msgid "[ILLEGAL BYTE in line %ld]"
@@ -1341,6 +1689,12 @@ msgstr "Преобразование Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ 'charconvert' Ð½Ðµ Ð²Ñ‹Ð¿
 msgid "can't read output of 'charconvert'"
 msgstr "невозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ð²Ñ‹Ð²Ð¾Ð´ 'charconvert'"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: Ð¤Ð°Ð¹Ð» Ð·Ð°ÑˆÐ¸Ñ„рован Ð½ÐµÐ¸Ð·Ð²ÐµÑтным Ð¼ÐµÑ‚одом"
+
+msgid "E676: No matching autocommands for acwrite buffer"
+msgstr "E676: Ðет Ð¿Ð¾Ð´Ñ…одÑщих Ð°Ð²Ñ‚окоманд Ð´Ð»Ñ Ð±ÑƒÑ„ера acwrite"
+
 msgid "E203: Autocommands deleted or unloaded buffer to be written"
 msgstr ""
 "E203: Ð‘уфер, ÐºÐ¾Ñ‚орый Ñ‚ребовалоÑÑŒ Ð·Ð°Ð¿Ð¸Ñать, ÑƒÐ´Ð°Ð»Ñ‘н Ð¸Ð»Ð¸ Ð²Ñ‹Ð³Ñ€ÑƒÐ¶ÐµÐ½ Ð°Ð²Ñ‚окомандой"
@@ -1357,32 +1711,41 @@ msgstr "ЧаÑтичнаѠзапиÑÑŒ Ð±ÑƒÑ„еров NetBeans Ð½Ðµ Ð´Ð¾Ð¿ÑƒÑ
 msgid "is not a file or writable device"
 msgstr "не ÑвлÑетÑѠфайлом Ð¸Ð»Ð¸ ÑƒÑтройÑтвом, Ð´Ð¾Ñтупным Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи"
 
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "запиÑÑŒ Ð² ÑƒÑтройÑтво Ð¾Ñ‚ключена Ð¿Ñ€Ð¸ Ð¾Ð¿Ñ†Ð¸Ð¸ 'opendevice'"
+
 msgid "is read-only (add ! to override)"
-msgstr "открыт Ñ‚олько Ð´Ð»Ñ Ñ‡Ñ‚ениѠ(!, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+msgstr "открыт Ñ‚олько Ð´Ð»Ñ Ñ‡Ñ‚ениѠ(добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: Ð—апиÑÑŒ Ð² Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ñ‹Ð¹ Ñ„айл Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð° (!, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+msgstr ""
+"E506: Ð—апиÑÑŒ Ð² Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ñ‹Ð¹ Ñ„айл Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð° (добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: ÐžÑˆÐ¸Ð±ÐºÐ° Ð·Ð°ÐºÑ€Ñ‹Ñ‚иѠрезервного Ñ„айла (!, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+msgstr ""
+"E507: ÐžÑˆÐ¸Ð±ÐºÐ° Ð·Ð°ÐºÑ€Ñ‹Ñ‚иѠрезервного Ñ„айла (добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: Ðевозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ñ‹Ð¹ Ñ„айл (!, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+msgstr ""
+"E508: Ðевозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ñ‹Ð¹ Ñ„айл (добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: Ðевозможно Ñоздать Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ñ‹Ð¹ Ñ„айл (!, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+msgstr ""
+"E509: Ðевозможно Ñоздать Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ñ‹Ð¹ Ñ„айл (добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: Ðевозможно Ñоздать Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ñ‹Ð¹ Ñ„айл (!, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+msgstr ""
+"E510: Ðевозможно Ñоздать Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ñ‹Ð¹ Ñ„айл (добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 msgid "E460: The resource fork would be lost (add ! to override)"
-msgstr "E460: Ã\92øûúð Ã‘\80õÑ\81Ñ\83Ñ\80Ñ\81ð Ã±Ñ\83ôõÑ\82 Ã¿Ã¾Ñ\82õÑ\80Ñ\8fýð (!, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+msgstr "E460: Ã\92õÑ\82òÑ\8c Ã‘\80õÑ\81Ñ\83Ñ\80Ñ\81ð Ã±Ñ\83ôõÑ\82 Ã¿Ã¾Ñ\82õÑ\80Ñ\8fýð (ôþñðòÑ\8cÑ\82õ !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 msgid "E214: Can't find temp file for writing"
 msgstr "E214: Ð’ременный Ñ„айл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: ÐŸÐµÑ€ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ° Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð° (! Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ¸)"
+msgstr ""
+"E213: ÐŸÐµÑ€ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ° Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð° (добавьте ! Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи Ð±ÐµÐ· Ð¿ÐµÑ€ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ¸)"
 
 msgid "E166: Can't open linked file for writing"
 msgstr "E166: Ðевозможно Ð¾Ñ‚крыть ÑвÑзанный Ñ„айл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи"
@@ -1396,15 +1759,29 @@ msgstr "E667: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ñ„ункцию fsync()"
 msgid "E512: Close failed"
 msgstr "E512: ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚иѠне ÑƒÐ´Ð°Ð»Ð°ÑÑŒ"
 
-msgid "E513: write error, conversion failed"
-msgstr "E513: ÐžÑˆÐ¸Ð±ÐºÐ° Ð·Ð°Ð¿Ð¸Ñи, Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ"
+msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+msgstr ""
+"E513: ÐžÑˆÐ¸Ð±ÐºÐ° Ð·Ð°Ð¿Ð¸Ñи, Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ (очиÑтите 'fenc', Ñ‡Ñ‚обы "
+"обойти)"
+
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: ÐžÑˆÐ¸Ð±ÐºÐ° Ð·Ð°Ð¿Ð¸Ñи, Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ðµ Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð½Ð° Ñтроке %ld (очиÑтите "
+"'fenc', Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и)"
 
 msgid "E514: write error (file system full?)"
-msgstr "E514: Ã¾шибка Ð·Ð°Ð¿Ð¸Ñи (нет Ñвободного Ð¼ÐµÑта?)"
+msgstr "E514: Ã\9eшибка Ð·Ð°Ð¿Ð¸Ñи (нет Ñвободного Ð¼ÐµÑта?)"
 
 msgid " CONVERSION ERROR"
 msgstr " ÐžÐ¨Ð˜Ð‘КРПРЕОБРÐЗОВÐÐИЯ"
 
+#, c-format
+msgid " in line %ld;"
+msgstr " Ð½Ð° Ñтроке %ld;"
+
 msgid "[Device]"
 msgstr "[УÑтройÑтво]"
 
@@ -1412,13 +1789,13 @@ msgid "[New]"
 msgstr "[Ðовый]"
 
 msgid " [a]"
-msgstr " [a]"
+msgstr " [д]"
 
 msgid " appended"
 msgstr " Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾"
 
 msgid " [w]"
-msgstr " [w]"
+msgstr " [з]"
 
 msgid " written"
 msgstr " Ð·Ð°Ð¿Ð¸Ñано"
@@ -1472,6 +1849,11 @@ msgid "1 character"
 msgstr "1 Ñимвол"
 
 #, c-format
+msgid "%lld characters"
+msgstr "Ñимволов: %lld"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "Ñимволов: %ld"
 
@@ -1506,8 +1888,8 @@ msgid "E246: FileChangedShell autocommand deleted buffer"
 msgstr "E246: Ð‘уфер ÑƒÐ´Ð°Ð»Ñ‘н Ð¿Ñ€Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ð¸ Ð°Ð²Ñ‚окоманды FileChangedShell"
 
 #, c-format
-msgid "E211: Warning: File \"%s\" no longer available"
-msgstr "E211: Ã\9fÑ\80õôÑ\83ÿÑ\80õöôõýøõ: Ã‘\84айл \"%s\" Ð±Ð¾Ð»ÑŒÑˆÐµ Ð½Ðµ Ð´Ð¾Ñтупен"
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211: Ã¤айл \"%s\" Ð±Ð¾Ð»ÑŒÑˆÐµ Ð½Ðµ Ð´Ð¾Ñтупен"
 
 #, c-format
 msgid ""
@@ -1517,25 +1899,31 @@ msgstr ""
 "W12: ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„айл \"%s\" Ð¸ Ð±ÑƒÑ„ер Vim Ð±Ñ‹Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ‹ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð´Ñ€ÑƒÐ³ "
 "от Ð´Ñ€ÑƒÐ³Ð°"
 
+msgid "See \":help W12\" for more info."
+msgstr "См. \":help W12\" Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ельной Ð¸Ð½Ñ„ормации."
+
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
 msgstr ""
 "W11: ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„айл \"%s\" Ð±Ñ‹Ð» Ð¸Ð·Ð¼ÐµÐ½Ñ‘н Ð¿Ð¾Ñле Ð½Ð°Ñ‡Ð°Ð»Ð° Ñ€ÐµÐ´Ð°ÐºÑ‚ированиÑ"
 
+msgid "See \":help W11\" for more info."
+msgstr "См. \":help W11\" Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ельной Ð¸Ð½Ñ„ормации."
+
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
 "W16: ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ€ÐµÐ¶Ð¸Ð¼ Ð´Ð¾Ñтупа Ðº Ñ„айлу \"%s\" Ð±Ñ‹Ð» Ð¸Ð·Ð¼ÐµÐ½Ñ‘н Ð¿Ð¾Ñле Ð½Ð°Ñ‡Ð°Ð»Ð° "
 "редактированиÑ"
 
+msgid "See \":help W16\" for more info."
+msgstr "См. \":help W16\" Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ельной Ð¸Ð½Ñ„ормации."
+
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
 msgstr ""
 "W13: ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ñ„айл \"%s\" Ð±Ñ‹Ð» Ñоздан Ð¿Ð¾Ñле Ð½Ð°Ñ‡Ð°Ð»Ð° Ñ€ÐµÐ´Ð°ÐºÑ‚ированиÑ"
 
-msgid "See \":help W11\" for more info."
-msgstr "См. Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ельную Ð¸Ð½Ñ„ормацию Ð² \":help W11\"."
-
 msgid "Warning"
 msgstr "Предупреждение"
 
@@ -1544,7 +1932,7 @@ msgid ""
 "&Load File"
 msgstr ""
 "&OK\n"
-"&Загрузить Ñ„айл"
+"&Загрузить Ñ„айл"
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
@@ -1557,6 +1945,10 @@ msgstr "E321: Ðевозможно Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÑƒ \
 msgid "--Deleted--"
 msgstr "--Удалено--"
 
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "авто-удаление Ð°Ð²Ñ‚окоманды: %s <буффер=%d>"
+
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
@@ -1582,6 +1974,10 @@ msgstr ""
 "\n"
 "--- Ðвтокоманды ---"
 
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <buffer=%d>: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ Ð±ÑƒÑ„ера "
+
 msgid "E217: Can't execute autocommands for ALL events"
 msgstr "E217: Ðевозможно Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ð°Ð²Ñ‚окоманды Ð´Ð»Ñ Ð’СЕХ Ñобытий"
 
@@ -1599,7 +1995,6 @@ msgstr "%s Ðвтокоманды Ð´Ð»Ñ \"%s\""
 msgid "Executing %s"
 msgstr "Выполнение %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "autocommand %s"
 msgstr "автокоманда %s"
@@ -1621,27 +2016,31 @@ msgid "E351: Cannot delete fold with current 'foldmethod'"
 msgstr ""
 "E351: Ð¡ÐºÐ»Ð°Ð´ÐºÐ° Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ ÑƒÐ´Ð°Ð»ÐµÐ½Ð° Ñ Ñ‚екущим Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ Ð¾Ð¿Ñ†Ð¸Ð¸ 'foldmethod'"
 
+#, c-format
+msgid "+--%3ld lines folded "
+msgstr "+--%3ld Ñтрок Ð² Ñкладке"
+
 msgid "E222: Add to read buffer"
 msgstr "E222: Ð”обавление Ð² Ð±ÑƒÑ„ер Ñ‡Ñ‚ениÑ"
 
 msgid "E223: recursive mapping"
-msgstr "E223: Ñ€ÐµÐºÑƒÑ€ÑивнаѠпривÑзка"
+msgstr "E223: Ð ÐµÐºÑƒÑ€ÑивнаѠпривÑзка"
 
 #, c-format
 msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: ÑƒÐ¶Ðµ ÐµÑÑ‚ÑŒ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ Ñокращение Ð´Ð»Ñ %s"
+msgstr "E224: Ð£Ð¶Ðµ ÐµÑÑ‚ÑŒ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ðµ Ñокращение Ð´Ð»Ñ %s"
 
 #, c-format
 msgid "E225: global mapping already exists for %s"
-msgstr "E225: ÑƒÐ¶Ðµ ÐµÑÑ‚ÑŒ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¸Ð²Ñзка Ð´Ð»Ñ %s"
+msgstr "E225: Ð£Ð¶Ðµ ÐµÑÑ‚ÑŒ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¸Ð²Ñзка Ð´Ð»Ñ %s"
 
 #, c-format
 msgid "E226: abbreviation already exists for %s"
-msgstr "E226: ÑƒÐ¶Ðµ ÐµÑÑ‚ÑŒ Ñокращение Ð´Ð»Ñ %s"
+msgstr "E226: Ð£Ð¶Ðµ ÐµÑÑ‚ÑŒ Ñокращение Ð´Ð»Ñ %s"
 
 #, c-format
 msgid "E227: mapping already exists for %s"
-msgstr "E227: ÑƒÐ¶Ðµ ÐµÑÑ‚ÑŒ Ð¿Ñ€Ð¸Ð²Ñзка Ð´Ð»Ñ %s"
+msgstr "E227: Ð£Ð¶Ðµ ÐµÑÑ‚ÑŒ Ð¿Ñ€Ð¸Ð²Ñзка Ð´Ð»Ñ %s"
 
 msgid "No abbreviation found"
 msgstr "СокращениѠне Ð½Ð°Ð¹Ð´ÐµÐ½Ñ‹"
@@ -1652,6 +2051,12 @@ msgstr "ПривÑзки Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ‹"
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтимый Ñ€ÐµÐ¶Ð¸Ð¼"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Ðевозможно Ñоздать Ð½Ð¾Ð²Ñ‹Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÑѠдлѠграф. Ð¸Ð½Ñ‚ерфейÑа"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: ÐŸÑ€Ð¾Ñ†ÐµÑÑу-потомку Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð·Ð°Ð¿ÑƒÑтить Ð³Ñ€Ð°Ñ„. Ð¸Ð½Ñ‚ерфейÑ"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Ðевозможно Ð¿ÐµÑ€ÐµÐ¹Ñ‚и Ð² Ñ€ÐµÐ¶Ð¸Ð¼ Ð³Ñ€Ð°Ñ„ичеÑкого Ð¸Ð½Ñ‚ерфейÑа"
 
@@ -1664,15 +2069,18 @@ msgstr ""
 "E665: Ðевозможно Ð¿ÐµÑ€ÐµÐ¹Ñ‚и Ð² Ñ€ÐµÐ¶Ð¸Ð¼ Ð³Ñ€Ð°Ñ„. Ð¸Ð½Ñ‚ерфейÑа, Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾ Ð·Ð°Ð´Ð°Ð½Ñ‹ ÑˆÑ€Ð¸Ñ„Ñ‚Ñ‹"
 
 msgid "E231: 'guifontwide' invalid"
-msgstr "E231: Ã½еправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ†Ð¸Ð¸ 'guifontwide'"
+msgstr "E231: Ã\9dеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ†Ð¸Ð¸ 'guifontwide'"
 
 msgid "E599: Value of 'imactivatekey' is invalid"
-msgstr "E599: Ã½еправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ†Ð¸Ð¸ 'imactivatekey'"
+msgstr "E599: Ã\9dеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ†Ð¸Ð¸ 'imactivatekey'"
 
 #, c-format
 msgid "E254: Cannot allocate color %s"
 msgstr "E254: Ðевозможно Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ Ñ†Ð²ÐµÑ‚ %s"
 
+msgid "No match at cursor, finding next"
+msgstr "Ðет ÑовпадениѠпод ÐºÑƒÑ€Ñором, Ð¿Ð¾Ð¸Ñк Ñледующего"
+
 msgid "<cannot open> "
 msgstr "<нельзѠоткрыть> "
 
@@ -1706,9 +2114,6 @@ msgstr ""
 "E232: \"Пузырь\" Ð´Ð»Ñ Ð²Ñ‹Ñ‡Ð¸Ñлений, Ð²ÐºÐ»ÑŽÑ‡Ð°ÑŽÑ‰Ð¸Ð¹ Ð¸ Ñообщение, Ð¸ Ð¾Ð±Ñ€Ð°Ñ‚ный Ð²Ñ‹Ð·Ð¾Ð², "
 "не Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñоздан"
 
-msgid "Vim dialog..."
-msgstr "Диалоговое Ð¾ÐºÐ½Ð¾ Vim..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -1722,10 +2127,10 @@ msgid "Input _Methods"
 msgstr "Методы Ð’вода"
 
 msgid "VIM - Search and Replace..."
-msgstr "VIM - ÐŸÐ¾Ð¸Ñк Ð¸ Ð·Ð°Ð¼ÐµÐ½Ð°..."
+msgstr "VIM â€” ÐŸÐ¾Ð¸Ñк Ð¸ Ð·Ð°Ð¼ÐµÐ½Ð°..."
 
 msgid "VIM - Search..."
-msgstr "VIM - ÐŸÐ¾Ð¸Ñк..."
+msgstr "VIM â€” ÐŸÐ¾Ð¸Ñк..."
 
 msgid "Find what:"
 msgstr "Что Ð¸Ñ‰ÐµÐ¼:"
@@ -1751,60 +2156,70 @@ msgstr "Вверх"
 msgid "Down"
 msgstr "Вниз"
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr "Ðайти Ñледующее"
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "Замена"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr "Заменить Ð²Ñе"
 
 msgid "Vim: Received \"die\" request from session manager\n"
 msgstr "Vim: ÐŸÐ¾Ð»ÑƒÑ‡ÐµÐ½ Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð¾Ñ‚ Ð´Ð¸Ñпетчера ÑеанÑов\n"
 
+msgid "Close"
+msgstr "Закрыть"
+
+msgid "New tab"
+msgstr "ÐоваѠвкладка"
+
+msgid "Open Tab..."
+msgstr "Открыть Ð²ÐºÐ»Ð°Ð´ÐºÑƒ..."
+
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "Vim: ÐžÑновное Ð¾ÐºÐ½Ð¾ Ð±Ñ‹Ð»Ð¾ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾ Ð·Ð°ÐºÑ€Ñ‹Ñ‚о\n"
 
-msgid "Font Selection"
-msgstr "Выбор ÑˆÑ€Ð¸Ñ„та"
+msgid "&Filter"
+msgstr "&Фильтр"
 
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "ВмеÑто Ð¿ÑƒÑтого Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸ÑпользуетÑÑ CUT_BUFFER0"
-
-msgid "Filter"
-msgstr "Фильтр"
+msgid "&Cancel"
+msgstr "О&тмена"
 
 msgid "Directories"
 msgstr "Каталоги"
 
-msgid "Help"
-msgstr "Справка"
+msgid "Filter"
+msgstr "Фильтр"
+
+msgid "&Help"
+msgstr "&Справка"
 
 msgid "Files"
 msgstr "Файлы"
 
+msgid "&OK"
+msgstr "&Да"
+
 msgid "Selection"
 msgstr "Выделение"
 
-msgid "Undo"
-msgstr "Ã\9eÑ\82üõýð"
+msgid "Find &Next"
+msgstr "Ã\9dðùÑ\82ø &Ñ\81ûõôÑ\83Ñ\8eÑ\89õõ"
 
-#, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Ðевозможно Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ ÑˆÑ€Ð¸Ñ„Ñ‚ Zap '%s'"
+msgid "&Replace"
+msgstr "За&мена"
 
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Ðевозможно Ð¸Ñпользовать ÑˆÑ€Ð¸Ñ„Ñ‚ %s"
+msgid "Replace &All"
+msgstr "Заменить &вÑе"
 
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Отправка ÑообщениѠдлѠуничтожениѠпроцеÑÑа-потомка.\n"
+msgid "&Undo"
+msgstr "О&тмена"
 
+#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: ÐžÐºÐ½Ð¾ Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð¼ \"%s\" Ð½Ðµ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾"
 
@@ -1815,20 +2230,34 @@ msgstr "E243: ÐŸÐ°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ: \"-%s\"; Ð¸Ñ
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672: Ðевозможно Ð¾Ñ‚крыть Ð¾ÐºÐ½Ð¾ Ð²Ð½ÑƒÑ‚ри Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ MDI"
 
+msgid "Close tab"
+msgstr "Закрыть Ð²ÐºÐ»Ð°Ð´ÐºÑƒ"
+
+msgid "Open tab..."
+msgstr "Открыть Ð²ÐºÐ»Ð°Ð´ÐºÑƒ..."
+
 msgid "Find string (use '\\\\' to find  a '\\')"
 msgstr "ПоиÑк Ñтроки (иÑпользуйте '\\\\' Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка '\\')"
 
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
 msgstr "ПоиÑк Ð¸ Ð·Ð°Ð¼ÐµÐ½Ð° (иÑпользуйте '\\\\' Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка '\\')"
 
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
+msgid "Not Used"
+msgstr "Ðе Ð¸ÑпользуетÑÑ"
+
+msgid "Directory\t*.nothing\n"
+msgstr "Каталог\t*.ничего\n"
+
 msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
 msgstr ""
-"Vim E458: Ã½ÃµÃ²Ã¾Ã·Ã¼Ã¾Ã¶Ã½Ã¾ Ã²Ñ\8bôõûøÑ\82Ñ\8c Ã·Ã°Ã¿Ã¸Ñ\81Ñ\8c Ã² Ã‘\82ðñûøÑ\86õ Ã‘\86òõÑ\82ð, Ã½ÃµÃºÃ¾Ñ\82þÑ\80Ñ\8bõ Ã‘\86òõÑ\82ðмогут "
+"Vim E458: Ã\9dõòþ÷üþöýþ Ã²Ñ\8bôõûøÑ\82Ñ\8c Ã·Ã°Ã¿Ã¸Ñ\81Ñ\8c Ã² Ã‘\82ðñûøÑ\86õ Ã‘\86òõÑ\82ð, Ã½ÃµÃºÃ¾Ñ\82þÑ\80Ñ\8bõ Ã‘\86òõÑ\82ð Ð¼Ð¾Ð³ÑƒÑ‚ "
 "отображатьÑѠнеправильно"
 
 #, c-format
 msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-msgstr "E250: Ã² Ð½Ð°Ð±Ð¾Ñ€Ðµ ÑˆÑ€Ð¸Ñ„тов %s Ð¾Ñ‚ÑутÑтвуют ÑˆÑ€Ð¸Ñ„Ñ‚Ñ‹ Ð´Ð»Ñ Ñледующих ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð¾Ðº:"
+msgstr "E250: Ã\92 Ð½Ð°Ð±Ð¾Ñ€Ðµ ÑˆÑ€Ð¸Ñ„тов %s Ð¾Ñ‚ÑутÑтвуют ÑˆÑ€Ð¸Ñ„Ñ‚Ñ‹ Ð´Ð»Ñ Ñледующих ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð¾Ðº:"
 
 #, c-format
 msgid "E252: Fontset name: %s"
@@ -1839,141 +2268,282 @@ msgid "Font '%s' is not fixed-width"
 msgstr "Шрифт '%s' Ð½Ðµ ÑвлÑетÑѠмоноширинным"
 
 #, c-format
-msgid "E253: Fontset name: %s\n"
-msgstr "E253: Ðабор ÑˆÑ€Ð¸Ñ„тов: %s\n"
+msgid "E253: Fontset name: %s"
+msgstr "E253: Ðабор ÑˆÑ€Ð¸Ñ„тов: %s"
 
 #, c-format
-msgid "Font0: %s\n"
-msgstr "Font0: %s\n"
+msgid "Font0: %s"
+msgstr "Font0: %s"
 
 #, c-format
-msgid "Font1: %s\n"
-msgstr "Font1: %s\n"
+msgid "Font1: %s"
+msgstr "Font1: %s"
 
 #, c-format
-msgid "Font%ld width is not twice that of font0\n"
-msgstr "Ширина ÑˆÑ€Ð¸Ñ„та font%ld Ð´Ð¾Ð»Ð¶Ð½Ð° Ð±Ñ‹Ñ‚ÑŒ Ð²Ð´Ð²Ð¾Ðµ Ð±Ð¾Ð»ÑŒÑˆÐµ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹ ÑˆÑ€Ð¸Ñ„та font0\n"
+msgid "Font%ld width is not twice that of font0"
+msgstr "Ширина ÑˆÑ€Ð¸Ñ„та font%ld Ð´Ð¾Ð»Ð¶Ð½Ð° Ð±Ñ‹Ñ‚ÑŒ Ð²Ð´Ð²Ð¾Ðµ Ð±Ð¾Ð»ÑŒÑˆÐµ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹ ÑˆÑ€Ð¸Ñ„та font0"
 
 #, c-format
-msgid "Font0 width: %ld\n"
-msgstr "Ширина ÑˆÑ€Ð¸Ñ„та font0: %ld\n"
+msgid "Font0 width: %ld"
+msgstr "Ширина ÑˆÑ€Ð¸Ñ„та font0: %ld"
 
 #, c-format
-msgid ""
-"Font1 width: %ld\n"
-"\n"
-msgstr ""
-"Ширина ÑˆÑ€Ð¸Ñ„та font1: %ld\n"
-"\n"
-
-msgid "E256: Hangul automata ERROR"
-msgstr "E256: ÐžÐ¨Ð˜Ð‘КРавтоматики Ð¥Ð°Ð½Ð³Ñ‹Ð»"
+msgid "Font1 width: %ld"
+msgstr "Ширина ÑˆÑ€Ð¸Ñ„та font1: %ld"
 
-msgid "Add a new database"
-msgstr "Ã\94þñðòøÑ\82Ñ\8c Ã½Ã¾Ã²Ñ\83Ñ\8e Ã±Ã°Ã·Ñ\83 Ã´Ã°Ã½Ã½Ñ\8bÑ\85"
+msgid "Invalid font specification"
+msgstr "Ã\9dõÿÑ\80ðòøÃȄ\8cýþõ Ã¾Ã¿Ñ\80õôõûõýøõ Ã‘\88Ñ\80øÑ\84Ñ\82ð"
 
-msgid "Query for a pattern"
-msgstr "Ã\97ðÿÑ\80þÑ\81 Ã¿Ã¾ Ã‘\88ðñûþýÑ\83"
+msgid "&Dismiss"
+msgstr "Ã\9e&Ñ\82úûþýøÑ\82Ñ\8c"
 
-msgid "Show this message"
-msgstr "Ã\9fþúð÷ðÑ\82Ñ\8c Ã‘\8dÑ\82þ Ã‘\81þþñÑ\89õýøõ"
+msgid "no specific match"
+msgstr "ýõÑ\82 Ã‘\81ÿõÑ\86øðÃȄ\8cýþóþ Ã‘\81þòÿðôõýøÑ\8f"
 
-msgid "Kill a connection"
-msgstr "Убить Ñоединение"
+msgid "Vim - Font Selector"
+msgstr "Vim â€” Ð’ыбор ÑˆÑ€Ð¸Ñ„та"
 
-msgid "Reinit all connections"
-msgstr "Ã\97ðýþòþ Ã¸Ã½Ã¸Ñ\86øðûø÷øÑ\80þòðÑ\82Ñ\8c Ã²Ñ\81õ Ã‘\81þõôøýõýøÑ\8f"
+msgid "Name:"
+msgstr "Ã\9dð÷òðýøõ:"
 
-msgid "Show connections"
-msgstr "Показать ÑоединениÑ"
+#. create toggle button
+msgid "Show size in Points"
+msgstr "Показывать Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð² Ð¿ÑƒÐ½ÐºÑ‚ах"
 
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: Ð˜Ñпользование: cs[cope] %s"
+msgid "Encoding:"
+msgstr "Кодировка:"
 
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "íÑ\82ð ÃºÃ¾Ã¼Ã°Ã½Ã´Ã° cscope Ã½Ãµ Ã¿Ã¾Ã´Ã´ÃµÑ\80öøòðõÑ\82 Ã‘\80ð÷ôõûõýøõ Ã¾ÃºÃ½Ã°.\n"
+msgid "Font:"
+msgstr "èÑ\80øÑ\84Ñ\82:"
 
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: Ð˜Ñпользование: cstag <имÑ>"
+msgid "Style:"
+msgstr "Стиль:"
 
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: Ð¼ÐµÑ‚ка Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð°"
+msgid "Size:"
+msgstr "Размер:"
 
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: Ð¾ÑˆÐ¸Ð±ÐºÐ° stat(%s): %d"
+msgid "E256: Hangul automata ERROR"
+msgstr "E256: ÐžÐ¨Ð˜Ð‘КРавтоматики Ð¥Ð°Ð½Ð³Ñ‹Ð»"
 
-msgid "E563: stat error"
-msgstr "E563: Ð¾ÑˆÐ¸Ð±ÐºÐ° stat"
+msgid "E550: Missing colon"
+msgstr "E550: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð´Ð²Ð¾ÐµÑ‚очие"
 
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s Ð½Ðµ ÑвлÑетÑѠкаталогом Ð¸Ð»Ð¸ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ð±Ð°Ð·Ñ‹ cscope"
+msgid "E551: Illegal component"
+msgstr "E551: ÐедопуÑтимый ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚"
 
-#, c-format
-msgid "Added cscope database %s"
-msgstr "Добавлена Ð±Ð°Ð·Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ… cscope %s"
+msgid "E552: digit expected"
+msgstr "E552: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑѠуказать Ñ†Ð¸Ñ„ру"
 
 #, c-format
-msgid "E262: error reading cscope connection %ld"
-msgstr "E262: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„ормации Ð¾Ñ‚ ÑоединениѠcscope %ld"
-
-msgid "E561: unknown cscope search type"
-msgstr "E561: Ð½ÐµÐ¸Ð·Ð²ÐµÑтный Ñ‚ип Ð¿Ð¾Ð¸Ñка cscope"
-
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: Ðевозможно Ñоздать Ñ‚рубу Ð´Ð»Ñ cscope"
+msgid "Page %d"
+msgstr "Страница %d"
 
-msgid "E622: Could not fork for cscope"
-msgstr "E622: Ðевозможно Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ fork() Ð´Ð»Ñ cscope"
+msgid "No text to be printed"
+msgstr "Печатать Ð½ÐµÑ‡ÐµÐ³Ð¾"
 
-msgid "cs_create_connection exec failed"
-msgstr "не ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ cs_create_connection"
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr "Печать ÑÑ‚Ñ€. %d (%d%%)"
 
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð·Ð°Ð¿ÑƒÑтить Ð¿Ñ€Ð¾Ñ†ÐµÑÑ cscope"
+#, c-format
+msgid " Copy %d of %d"
+msgstr " ÐšÐ¾Ð¿Ð¸Ñ %d Ð¸Ð· %d"
 
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ fdopen Ð´Ð»Ñ to_fp"
+#, c-format
+msgid "Printed: %s"
+msgstr "Ðапечатано: %s"
 
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ fdopen Ð´Ð»Ñ fr_fp"
+msgid "Printing aborted"
+msgstr "Печать Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰ÐµÐ½Ð°"
 
-msgid "E567: no cscope connections"
-msgstr "E567: Ñоединений Ñ cscope Ð½Ðµ Ñоздано"
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: ÐžÑˆÐ¸Ð±ÐºÐ° Ð·Ð°Ð¿Ð¸Ñи Ð² Ñ„айл PostScript"
 
 #, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÑоответÑтвий Ð¿Ð¾ Ð·Ð°Ð¿Ñ€Ð¾Ñу cscope %s Ð´Ð»Ñ %s"
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: Ðевозможно Ð¾Ñ‚крыть Ñ„айл \"%s\""
 
 #, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ„лаг cscopequickfix %c Ð´Ð»Ñ %c"
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: Ðевозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ñ„айл Ñ€ÐµÑурÑов PostScript \"%s\""
 
-msgid "cscope commands:\n"
-msgstr "команды cscope:\n"
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: Ð¤Ð°Ð¹Ð» \"%s\" Ð½Ðµ ÑвлÑетÑѠфайлом Ñ€ÐµÑурÑов PostScript"
 
 #, c-format
-msgid "%-5s: %-30s (Usage: %s)"
-msgstr "%-5s: %-30s (ИÑпользование: %s)"
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: Ð¤Ð°Ð¹Ð» \"%s\" Ð½Ðµ ÑвлÑетÑѠдопуÑтимым Ñ„айлом Ñ€ÐµÑурÑов PostScript"
 
 #, c-format
-msgid "E625: cannot open cscope database: %s"
-msgstr "E625: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚крыть Ð±Ð°Ð·Ñƒ Ð´Ð°Ð½Ð½Ñ‹Ñ… cscope: %s"
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: Ð¤Ð°Ð¹Ð» Ñ€ÐµÑурÑов \"%s\" Ð½ÐµÐ¸Ð·Ð²ÐµÑтной Ð²ÐµÑ€Ñии"
 
-msgid "E626: cannot get cscope database information"
-msgstr "E626: Ð¸Ð½Ñ„ормациѠо Ð±Ð°Ð·Ðµ Ð´Ð°Ð½Ð½Ñ‹Ñ… cscope Ð½Ðµ Ð´Ð¾Ñтупна"
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: ÐеÑовмеÑтимые Ð¼Ð½Ð¾Ð³Ð¾Ð±Ð°Ð¹Ñ‚оваѠкодировка Ð¸ Ð½Ð°Ð±Ð¾Ñ€ Ñимволов."
 
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: Ð´Ð°Ð½Ð½Ð°Ñ Ð±Ð°Ð·Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ… cscope ÑƒÐ¶Ðµ Ð¿Ð¾Ð´Ñоединена"
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: printmbcharset Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¿ÑƒÑтым Ð¿Ñ€Ð¸ Ð¼Ð½Ð¾Ð³Ð¾Ð±Ð°Ð¹Ñ‚овой ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐµ."
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr "E675: Ðет Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑˆÑ€Ð¸Ñ„та Ð¿Ð¾ ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð±Ð°Ð¹Ñ‚овой Ð¿ÐµÑ‡Ð°Ñ‚и."
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: Ðевозможно Ð¾Ñ‚крыть Ñ„айл PostScript"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: Ðевозможно Ð¾Ñ‚крыть Ñ„айл \"%s\""
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: Ð¤Ð°Ð¹Ð» Ñ€ÐµÑурÑов PostScript \"prolog.ps\" Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: Ð¤Ð°Ð¹Ð» Ñ€ÐµÑурÑов PostScript \"cidfont.ps\" Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: Ð¤Ð°Ð¹Ð» Ñ€ÐµÑурÑов PostScript \"%s.ps\" Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: Ðевозможно Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð² ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÑƒ Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ \"%s\""
+
+msgid "Sending to printer..."
+msgstr "Отправка Ð½Ð° Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ Ñ„айла PostScript"
+
+msgid "Print job sent."
+msgstr "Задание Ð½Ð° Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ Ð¾Ñ‚правлено."
+
+msgid "Add a new database"
+msgstr "Добавить Ð½Ð¾Ð²ÑƒÑŽ Ð±Ð°Ð·Ñƒ Ð´Ð°Ð½Ð½Ñ‹Ñ…"
+
+msgid "Query for a pattern"
+msgstr "ЗапроѠпо ÑˆÐ°Ð±Ð»Ð¾Ð½Ñƒ"
+
+msgid "Show this message"
+msgstr "Показать Ñто Ñообщение"
+
+msgid "Kill a connection"
+msgstr "Убить Ñоединение"
+
+msgid "Reinit all connections"
+msgstr "Заново Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ð²Ñе ÑоединениÑ"
+
+msgid "Show connections"
+msgstr "Показать ÑоединениÑ"
+
+#, c-format
+msgid "E560: Usage: cs[cope] %s"
+msgstr "E560: Ð˜Ñпользование: cs[cope] %s"
+
+msgid "This cscope command does not support splitting the window.\n"
+msgstr "Эта ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° cscope Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð¾ÐºÐ½Ð°.\n"
+
+msgid "E562: Usage: cstag <ident>"
+msgstr "E562: Ð˜Ñпользование: cstag <имÑ>"
+
+msgid "E257: cstag: tag not found"
+msgstr "E257: cstag: Ð¼ÐµÑ‚ка Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð°"
+
+#, c-format
+msgid "E563: stat(%s) error: %d"
+msgstr "E563: ÐžÑˆÐ¸Ð±ÐºÐ° stat(%s): %d"
+
+msgid "E563: stat error"
+msgstr "E563: ÐžÑˆÐ¸Ð±ÐºÐ° stat"
 
-msgid "E569: maximum number of cscope connections reached"
-msgstr "E569: Ð´Ð¾Ñтигнуто Ð¼Ð°ÐºÑимальное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ñ‚крытых Ñоединений Ñ cscope"
+#, c-format
+msgid "E564: %s is not a directory or a valid cscope database"
+msgstr "E564: %s Ð½Ðµ ÑвлÑетÑѠкаталогом Ð¸Ð»Ð¸ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ð±Ð°Ð·Ñ‹ cscope"
+
+#, c-format
+msgid "Added cscope database %s"
+msgstr "Добавлена Ð±Ð°Ð·Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ… cscope %s"
+
+#, c-format
+msgid "E262: error reading cscope connection %ld"
+msgstr "E262: ÐžÑˆÐ¸Ð±ÐºÐ° Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„ормации Ð¾Ñ‚ ÑоединениѠcscope %ld"
+
+msgid "E561: unknown cscope search type"
+msgstr "E561: ÐеизвеÑтный Ñ‚ип Ð¿Ð¾Ð¸Ñка cscope"
+
+msgid "E566: Could not create cscope pipes"
+msgstr "E566: Ðевозможно Ñоздать Ñ‚рубу Ð´Ð»Ñ cscope"
+
+msgid "E622: Could not fork for cscope"
+msgstr "E622: Ðевозможно Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ fork() Ð´Ð»Ñ cscope"
+
+msgid "cs_create_connection setpgid failed"
+msgstr "cs_create_connection: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ setpgid"
+
+msgid "cs_create_connection exec failed"
+msgstr "cs_create_connection: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ exec"
+
+msgid "cs_create_connection: fdopen for to_fp failed"
+msgstr "cs_create_connection: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ fdopen Ð´Ð»Ñ to_fp"
+
+msgid "cs_create_connection: fdopen for fr_fp failed"
+msgstr "cs_create_connection: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ fdopen Ð´Ð»Ñ fr_fp"
+
+msgid "E623: Could not spawn cscope process"
+msgstr "E623: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð·Ð°Ð¿ÑƒÑтить Ð¿Ñ€Ð¾Ñ†ÐµÑÑ cscope"
+
+msgid "E567: no cscope connections"
+msgstr "E567: Ð¡Ð¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ð¹ Ñ cscope Ð½Ðµ Ñоздано"
+
+#, c-format
+msgid "E469: invalid cscopequickfix flag %c for %c"
+msgstr "E469: Ðеправильный Ñ„лаг cscopequickfix %c Ð´Ð»Ñ %c"
+
+#, c-format
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: Ðе Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÑоответÑтвий Ð¿Ð¾ Ð·Ð°Ð¿Ñ€Ð¾Ñу cscope %s Ð´Ð»Ñ %s"
+
+msgid "cscope commands:\n"
+msgstr "Команды cscope:\n"
+
+#, c-format
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (иÑпользование: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: Ðайти Ñ„ункции Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð¸Ðµ Ñту Ñ„ункцию\n"
+"       d: Ðайти Ñ„ункции Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ñ‹Ðµ Ñтой Ñ„ункцией\n"
+"       e: Ðайти Ñтот ÑˆÐ°Ð±Ð»Ð¾Ð½ egrep\n"
+"       f: Ðайти Ñтот Ñ„айл\n"
+"       g: Ðайти Ñто Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ\n"
+"       i: Ðайти Ñ„айлы Ð²ÐºÐ»ÑŽÑ‡Ð°ÑŽÑ‰Ð¸Ðµ (#include) Ñтот Ñ„айл\n"
+"       s: Ðайти Ñтот C-Ñимвол\n"
+"       t: Ðайти Ñту Ñ‚екÑтовую Ñтроку\n"
+
+#, c-format
+msgid "E625: cannot open cscope database: %s"
+msgstr "E625: Ðевозможно Ð¾Ñ‚крыть Ð±Ð°Ð·Ñƒ Ð´Ð°Ð½Ð½Ñ‹Ñ… cscope: %s"
+
+msgid "E626: cannot get cscope database information"
+msgstr "E626: Ð˜Ð½Ñ„ормациѠо Ð±Ð°Ð·Ðµ Ð´Ð°Ð½Ð½Ñ‹Ñ… cscope Ð½Ðµ Ð´Ð¾Ñтупна"
+
+msgid "E568: duplicate cscope database not added"
+msgstr "E568: Ð”аннаѠбаза Ð´Ð°Ð½Ð½Ñ‹Ñ… cscope ÑƒÐ¶Ðµ Ð¿Ð¾Ð´Ñоединена"
 
 #, c-format
 msgid "E261: cscope connection %s not found"
-msgstr "E261: Ñоединение Ñ cscope %s Ð½Ðµ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾"
+msgstr "E261: Ð¡Ð¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ðµ Ñ cscope %s Ð½Ðµ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾"
 
 #, c-format
 msgid "cscope connection %s closed"
@@ -1981,7 +2551,7 @@ msgstr "Ñоединение Ñ cscope %s Ð·Ð°ÐºÑ€Ñ‹Ñ‚о"
 
 #. should not reach here
 msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: ÃºритичеÑкаѠошибка Ð² cs_manage_matches"
+msgstr "E570: Ã\9aритичеÑкаѠошибка Ð² cs_manage_matches"
 
 #, c-format
 msgid "Cscope tag: %s"
@@ -2010,30 +2580,18 @@ msgstr "ÑоединениѠѠcscope Ð¾Ñ‚ÑутÑтвуют\n"
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    Ð±Ð°Ð·Ð° Ð´Ð°Ð½Ð½Ñ‹Ñ…                         Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ Ð¿ÑƒÑ‚ÑŒ\n"
 
+msgid "Lua library cannot be loaded."
+msgstr "Библиотека Lua Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð°."
+
+msgid "cannot save undo information"
+msgstr "невозможно Ñохранить Ð¸Ð½Ñ„ормацию Ð¾Ð± Ð¾Ñ‚мене Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸"
+
 msgid ""
-"E263: Sorry, this command is disabled, the Python library could not be "
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
 msgstr ""
-"E263: Ðš Ñожалению Ñта ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð½Ðµ Ñ€Ð°Ð±Ð¾Ñ‚ает, Ð¿Ð¾Ñкольку Ð½Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ека "
-"Python"
-
-msgid "E659: Cannot invoke Python recursively"
-msgstr "E659: Ðевозможно Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ñ€ÐµÐºÑƒÑ€Ñивный Ð²Ñ‹Ð·Ð¾Ð² Python"
-
-msgid "can't delete OutputObject attributes"
-msgstr "невозможно ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ð°Ñ‚рибуты OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "значение softspace Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ñ†ÐµÐ»Ñ‹Ð¼ Ñ‡Ð¸Ñлом"
-
-msgid "invalid attribute"
-msgstr "неправильный Ð°Ñ‚рибут"
-
-msgid "writelines() requires list of strings"
-msgstr "writelines() Ñ‚ребует ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑпиÑка Ñтрок"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Python: ÐžÑˆÐ¸Ð±ÐºÐ° Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚ов I/O"
+"E815: Ðš Ñожалению Ñта ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð½Ðµ Ñ€Ð°Ð±Ð¾Ñ‚ает, Ð¿Ð¾Ñкольку Ð½Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ека "
+"MzScheme"
 
 msgid "invalid expression"
 msgstr "неправильное Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ"
@@ -2041,91 +2599,118 @@ msgstr "неправильное Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ"
 msgid "expressions disabled at compile time"
 msgstr "выражениѠотключены Ð¿Ñ€Ð¸ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции"
 
-msgid "attempt to refer to deleted buffer"
-msgstr "попытка ÑоÑлатьÑѠна ÑƒÐ½Ð¸Ñ‡Ñ‚оженный Ð±ÑƒÑ„ер"
+msgid "hidden option"
+msgstr "ÑкрытаѠопциÑ"
 
-msgid "line number out of range"
-msgstr "÷ðÿÑ\80õôõÃȄ\8cýÑ\8bù Ã½Ã¾Ã¼ÃµÑ\80 Ã‘\81Ñ\82Ñ\80þúø"
+msgid "unknown option"
+msgstr "ýõø÷òõÑ\81Ñ\82ýðÑ\8f Ã¾Ã¿Ñ\86øÑ\8f"
 
-#, c-format
-msgid "<buffer object (deleted) at %8lX>"
-msgstr "<объект Ð±ÑƒÑ„ера (удален) Ð² %8lX>"
+msgid "window index is out of range"
+msgstr "индекѠокна Ð·Ð° Ð¿Ñ€ÐµÐ´ÐµÐ»Ð°Ð¼Ð¸ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
 
-msgid "invalid mark name"
-msgstr "ýõÿÑ\80ðòøÃȄ\8cýþõ Ã¸Ã¼Ñ\8f Ã¾Ñ\82üõÑ\82úø"
+msgid "couldn't open buffer"
+msgstr "ýõòþ÷üþöýþ Ã¾Ñ\82úÑ\80Ñ\8bÑ\82Ñ\8c Ã±Ñ\83Ñ\84õÑ\80"
 
-msgid "no such buffer"
-msgstr "нет Ñ‚акого Ð±ÑƒÑ„ера"
+msgid "cannot delete line"
+msgstr "невозможно ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ñтроку"
 
-msgid "attempt to refer to deleted window"
-msgstr "ÿþÿÑ\8bÑ\82úð Ã‘\81þÑ\81ûðÑ\82Ñ\8cÑ\81Ñ\8f Ã½Ã° Ã·Ã°ÃºÑ\80Ñ\8bÑ\82þõ Ã¾ÃºÃ½Ã¾"
+msgid "cannot replace line"
+msgstr "ýõòþ÷üþöýþ Ã·Ã°Ã¼ÃµÃ½Ã¸Ñ\82Ñ\8c Ã‘\81Ñ\82Ñ\80þúÑ\83"
 
-msgid "readonly attribute"
-msgstr "ðÑ\82Ñ\80øñÑ\83Ñ\82 Ã´Ã¾Ñ\81Ñ\82Ñ\83ÿõý Ã‘\82þÃȄ\8cúþ Ã´ÃȄ\8f Ã‘\87Ñ\82õýøÑ\8f"
+msgid "cannot insert line"
+msgstr "ýõòþ÷üþöýþ Ã²Ñ\81Ñ\82ðòøÑ\82Ñ\8c Ã‘\81Ñ\82Ñ\80þúÑ\83"
 
-msgid "cursor position outside buffer"
-msgstr "позициѠкурÑора Ð½Ð°Ñ…одитÑѠвне Ð±ÑƒÑ„ера"
+msgid "string cannot contain newlines"
+msgstr "Ñтрока Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ñодержать Ñимвол Ð½Ð¾Ð²Ð¾Ð¹ Ñтроки"
 
-#, c-format
-msgid "<window object (deleted) at %.8lX>"
-msgstr "<объект Ð¾ÐºÐ½Ð° (удален) Ð² %.8lX>"
+msgid "error converting Scheme values to Vim"
+msgstr "невозможно Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Scheme Ð² Vim"
 
-#, c-format
-msgid "<window object (unknown) at %.8lX>"
-msgstr "<объект Ð¾ÐºÐ½Ð° (неизвеÑтен) Ð² %.8lX>"
+msgid "Vim error: ~a"
+msgstr "ошибка Vim: ~a"
 
-#, c-format
-msgid "<window %d>"
-msgstr "<окно %d>"
+msgid "Vim error"
+msgstr "ошибка Vim"
 
-msgid "no such window"
-msgstr "нет Ñ‚акого Ð¾ÐºÐ½Ð°"
+msgid "buffer is invalid"
+msgstr "неправильный Ð±ÑƒÑ„ер"
 
-msgid "cannot save undo information"
-msgstr "ýõòþ÷üþöýþ Ã‘\81þÑ\85Ñ\80ðýøÑ\82Ñ\8c Ã¸Ã½Ñ\84þÑ\80üðÑ\86øÑ\8e Ã¾Ã± Ã¾Ñ\82üõýõ Ã¾Ã¿ÃµÑ\80ðÑ\86øø"
+msgid "window is invalid"
+msgstr "ýõÿÑ\80ðòøÃȄ\8cýþõ Ã¾ÃºÃ½Ã¾"
 
-msgid "cannot delete line"
-msgstr "ýõòþ÷üþöýþ Ã‘\83ôðûøÑ\82Ñ\8c Ã‘\81Ñ\82Ñ\80þúÑ\83"
+msgid "linenr out of range"
+msgstr "ýþüõÑ\80 Ã‘\81Ñ\82Ñ\80þúø Ã·Ã° Ã¿Ñ\80õôõûðüø Ã´Ã¸Ã°Ã¿Ã°Ã·Ã¾Ã½Ã°"
 
-msgid "cannot replace line"
-msgstr "невозможно Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ñтроку"
+msgid "not allowed in the Vim sandbox"
+msgstr "не Ð´Ð¾Ð¿ÑƒÑкаетÑѠв Ð¿ÐµÑочнице Vim"
 
-msgid "cannot insert line"
-msgstr "невозможно Ð²Ñтавить Ñтроку"
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Ð”анный Vim Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ :python Ð¿Ð¾Ñле Ð¸ÑпользованиѠ:py3"
 
-msgid "string cannot contain newlines"
-msgstr "Ñтрока Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ñодержать Ñимвол Ð½Ð¾Ð²Ð¾Ð¹ Ñтроки"
+msgid ""
+"E263: Sorry, this command is disabled, the Python library could not be "
+"loaded."
+msgstr ""
+"E263: Ðš Ñожалению Ñта ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð½Ðµ Ñ€Ð°Ð±Ð¾Ñ‚ает, Ð¿Ð¾Ñкольку Ð½Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ека "
+"Python"
+
+msgid "E659: Cannot invoke Python recursively"
+msgstr "E659: Ðевозможно Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ñ€ÐµÐºÑƒÑ€Ñивный Ð²Ñ‹Ð·Ð¾Ð² Python"
+
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Ð”анный Vim Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ :py3 Ð¿Ð¾Ñле Ð¸ÑпользованиѠ:python"
+
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ ÑкземплÑром Ð¸Ð»Ð¸ Ñтрокой"
 
 msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr ""
 "E266: Ðš Ñожалению Ñта ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð½Ðµ Ñ€Ð°Ð±Ð¾Ñ‚ает, Ð¿Ð¾Ñкольку Ð½Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ека "
-"Ruby."
+"Ruby"
+
+msgid "E267: unexpected return"
+msgstr "E267: Ðеожиданный return"
+
+msgid "E268: unexpected next"
+msgstr "E268: Ðеожиданный next"
+
+msgid "E269: unexpected break"
+msgstr "E269: Ðеожиданный break"
+
+msgid "E270: unexpected redo"
+msgstr "E270: Ðеожиданный redo"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: retry Ð²Ð½Ðµ Ð¾Ð¿ÐµÑ€Ð°Ñ‚ора rescue"
+
+msgid "E272: unhandled exception"
+msgstr "E272: Ðеобработанное Ð¸Ñключение"
 
 #, c-format
 msgid "E273: unknown longjmp status %d"
-msgstr "E273: Ã½еизвеÑтное ÑоÑтоÑние longjmp %d"
+msgstr "E273: Ã\9dеизвеÑтное ÑоÑтоÑние longjmp %d"
 
 msgid "Toggle implementation/definition"
 msgstr "Переключение Ð¼ÐµÐ¶Ð´Ñƒ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸ÐµÐ¹/определением"
 
 msgid "Show base class of"
-msgstr "Ã\9fþúð÷ðÑ\82Ñ\8c Ã±Ã°Ã·Ã¾Ã²Ñ\8bù ÃºÃ»Ã°Ñ\81Ñ\81 "
+msgstr "Ã\9fþúð÷ðÑ\82Ñ\8c Ã¾Ñ\81ýþòýþù ÃºÃ»Ã°Ñ\81Ñ\81"
 
 msgid "Show overridden member function"
 msgstr "Показать Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ñ‹Ðµ Ñ„ункции"
 
 msgid "Retrieve from file"
-msgstr "Ã\9fþÃȄ\83Ñ\87õýøõ Ð¸Ð· Ñ„айла"
+msgstr "Ã\9fþÃȄ\83Ñ\87øÑ\82Ñ\8c Ð¸Ð· Ñ„айла"
 
 msgid "Retrieve from project"
-msgstr "Ã\9fþÃȄ\83Ñ\87õýøõ Ð¸Ð· Ð¿Ñ€Ð¾ÐµÐºÑ‚а"
+msgstr "Ã\9fþÃȄ\83Ñ\87øÑ\82Ñ\8c Ð¸Ð· Ð¿Ñ€Ð¾ÐµÐºÑ‚а"
 
 msgid "Retrieve from all projects"
-msgstr "Ã\9fþÃȄ\83Ñ\87õýøõ Ð¸Ð· Ð²Ñех Ð¿Ñ€Ð¾ÐµÐºÑ‚ов"
+msgstr "Ã\9fþÃȄ\83Ñ\87øÑ\82Ñ\8c Ð¸Ð· Ð²Ñех Ð¿Ñ€Ð¾ÐµÐºÑ‚ов"
 
 msgid "Retrieve"
-msgstr "Ã\9fþÃȄ\83Ñ\87õýøõ"
+msgstr "Ã\9fþÃȄ\83Ñ\87øÑ\82Ñ\8c"
 
 msgid "Show source of"
 msgstr "Показать Ð¸Ñходный ÐºÐ¾Ð´"
@@ -2201,13 +2786,13 @@ msgstr "неправильный Ð½Ð¾Ð¼ÐµÑ€ Ð±ÑƒÑ„ера"
 msgid "not implemented yet"
 msgstr "пока Ð½Ðµ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾"
 
-msgid "unknown option"
-msgstr "неизвеÑтнаѠопциÑ"
-
 #. ???
 msgid "cannot set line(s)"
 msgstr "невозможно Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ Ñтроку Ð¸Ð»Ð¸ Ñтроки"
 
+msgid "invalid mark name"
+msgstr "неправильное Ð¸Ð¼Ñ Ð¾Ñ‚метки"
+
 msgid "mark not set"
 msgstr "отметка Ð½Ðµ ÑƒÑтановлена"
 
@@ -2218,6 +2803,9 @@ msgstr "Ñ€Ñд %d ÐºÐ¾Ð»Ð¾Ð½ÐºÐ° %d"
 msgid "cannot insert/append line"
 msgstr "невозможно Ð²Ñтавить Ð¸Ð»Ð¸ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ Ñтроку"
 
+msgid "line number out of range"
+msgstr "номер Ñтроки Ð·Ð° Ð¿Ñ€ÐµÐ´ÐµÐ»Ð°Ð¼Ð¸ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
+
 msgid "unknown flag: "
 msgstr "неизвеÑтный Ñ„лаг: "
 
@@ -2228,7 +2816,7 @@ msgid "keyboard interrupt"
 msgstr "клавиатурное Ð¿Ñ€ÐµÑ€Ñ‹Ð²Ð°Ð½Ð¸Ðµ"
 
 msgid "vim error"
-msgstr "ошибка vim"
+msgstr "ошибка VIM"
 
 msgid "cannot create buffer/window command: object is being deleted"
 msgstr "невозможно Ñоздать ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð±ÑƒÑ„ера Ð¸Ð»Ð¸ Ð¾ÐºÐ½Ð°: Ð¾Ð±ÑŠÐµÐºÑ‚ Ð² Ð¿Ñ€Ð¾Ñ†ÐµÑÑе ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ"
@@ -2258,11 +2846,9 @@ msgstr ""
 "E571: Ðš Ñожалению Ñта ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð½Ðµ Ñ€Ð°Ð±Ð¾Ñ‚ает, Ð¿Ð¾Ñкольку Ð½Ðµ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð° Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ека "
 "Tcl"
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ÐžÐ¨Ð˜Ð‘КРTCL: ÐšÐ¾Ð´ Ð²Ñ‹Ñ…ода Ð½Ðµ ÑвлÑетÑѠцелым Ñ‡Ð¸Ñлом?! Ð¡Ð¾Ð¾Ð±Ñ‰Ð¸Ñ‚е Ð¾Ð± Ñтом Ð² "
-"vim-dev@vim.org"
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572: ÐšÐ¾Ð´ Ð²Ñ‹Ñ…ода %d"
 
 msgid "cannot get line"
 msgstr "невозможно Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ Ñтроку"
@@ -2271,7 +2857,7 @@ msgid "Unable to register a command server name"
 msgstr "Ðевозможно Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрировать Ð¸Ð¼Ñ Ñервера ÐºÐ¾Ð¼Ð°Ð½Ð´"
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248: Ã\9eÑ\82ÿÑ\80ðòúð ÃºÃ¾Ã¼Ã°Ã½Ã´Ñ\8b Ã² Ã´Ñ\80Ñ\83óÑ\83Ñ\8e Ã¿Ñ\80þóÑ\80ðüüÑ\83 Ã½Ãµ Ã‘\83ôðûðÑ\81Ñ\8c"
+msgstr "E248: Ã\9dõ Ã‘\83ôðûðÑ\81Ñ\8c Ã¾Ñ\82ÿÑ\80ðòúð ÃºÃ¾Ã¼Ã°Ã½Ã´Ñ\8b Ã² Ã´Ñ\80Ñ\83óÑ\83Ñ\8e Ã¿Ñ\80þóÑ\80ðüüÑ\83"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -2282,29 +2868,39 @@ msgstr ""
 "E251: Ðеправильно Ñформировано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð¿Ñ€Ð¾Ñ†ÐµÑÑа VIM Ð² Ñ€ÐµÐµÑтре. "
 "Удалено!"
 
-msgid "Unknown option"
-msgstr "Ã\9dõø÷òõÑ\81Ñ\82ýÑ\8bù Ã°Ñ\80óÑ\83üõýÑ\82"
+msgid "Unknown option argument"
+msgstr "Ã\9dõø÷òõÑ\81Ñ\82ýÑ\8bù Ã½ÃµÃ¾Ã±Ñ\8f÷ðÑ\82õÃȄ\8cýÑ\8bù Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80"
 
 msgid "Too many edit arguments"
-msgstr "áûøÑ\88úþü Ã¼Ã½Ã¾Ã³Ã¾ Ã°Ñ\80óÑ\83üõýÑ\82ов Ñ€ÐµÐ´Ð°ÐºÑ‚ированиÑ"
+msgstr "áûøÑ\88úþü Ã¼Ã½Ã¾Ã³Ã¾ Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80ов Ñ€ÐµÐ´Ð°ÐºÑ‚ированиÑ"
 
 msgid "Argument missing after"
-msgstr "Ã\9fÑ\80þÿÑ\83Ñ\89õý Ã°Ñ\80óÑ\83üõýÑ\82 Ð¿Ð¾Ñле"
+msgstr "Ã\9fÑ\80þÿÑ\83Ñ\89õý Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80 Ð¿Ð¾Ñле"
 
-msgid "Garbage after option"
-msgstr "Ã\9cÑ\83Ñ\81þÑ\80 Ã¿Ã¾Ñ\81ûõ Ã°Ñ\80óÑ\83üõýÑ\82а"
+msgid "Garbage after option argument"
+msgstr "Ã\9cÑ\83Ñ\81þÑ\80 Ã¿Ã¾Ñ\81ûõ Ã½ÃµÃ¾Ã±Ñ\8f÷ðÑ\82õÃȄ\8cýþóþ Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80а"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr ""
-"áûøÑ\88úþü Ã¼Ã½Ã¾Ã³Ã¾ Ã°Ñ\80óÑ\83üõýÑ\82ов \"+команда\", \"-c ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°\" Ð¸Ð»Ð¸ \"--cmd ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°\""
+"áûøÑ\88úþü Ã¼Ã½Ã¾Ã³Ã¾ Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80ов \"+команда\", \"-c ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°\" Ð¸Ð»Ð¸ \"--cmd ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°\""
 
 msgid "Invalid argument for"
-msgstr "ÐедопуÑтимые Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹ Ð´Ð»Ñ"
+msgstr "ÐедопуÑтимый Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ Ð´Ð»Ñ"
+
+#, c-format
+msgid "%d files to edit\n"
+msgstr "Файлов Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚ированиÑ: %d\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "NetBeans Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ Ñ Ñтим Ð³Ñ€Ð°Ñ„ичеÑким Ð¸Ð½Ñ‚ерфейÑом\n"
 
 msgid "This Vim was not compiled with the diff feature."
 msgstr ""
 "Данный Vim Ð±Ñ‹Ð» Ñкомпилирован Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ð¾Ð¹ Ð¾ÑобенноÑтью Ð¿Ñ€Ð¾Ñмотра Ð¾Ñ‚личий"
 
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "Ðевозможно Ð¸Ñпользовать '-nb': Ð½Ðµ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ Ð¿Ñ€Ð¸ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции\n"
+
 msgid "Attempt to open script file again: \""
 msgstr "Попытка Ð¿Ð¾Ð²Ñ‚орного Ð¾Ñ‚крытиѠфайла ÑценариÑ: \""
 
@@ -2314,9 +2910,8 @@ msgstr "Ðевозможно Ð¾Ñ‚крыть Ð´Ð»Ñ Ñ‡Ñ‚ениÑ: \""
 msgid "Cannot open for script output: \""
 msgstr "Ðевозможно Ð¾Ñ‚крыть Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° ÑценариÑ: \""
 
-#, c-format
-msgid "%d files to edit\n"
-msgstr "Файлов Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚ированиÑ: %d\n"
+msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+msgstr "Vim: ÐžÑˆÐ¸Ð±ÐºÐ°: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð·Ð°Ð¿ÑƒÑтить gvim Ð¸Ð· NetBeans\n"
 
 msgid "Vim: Warning: Output is not to a terminal\n"
 msgstr "Vim: ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð’ывод Ð¾ÑущеÑтвлÑетÑѠне Ð½Ð° Ñ‚ерминал\n"
@@ -2343,13 +2938,16 @@ msgid "[file ..]       edit specified file(s)"
 msgstr "[файл ..] Ñ€ÐµÐ´Ð°ÐºÑ‚ирование ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ñ… Ñ„айлов"
 
 msgid "-               read text from stdin"
-msgstr "-                Ñ‡Ñ‚ение Ñ‚екÑта Ð¸Ð· Ð¿Ð¾Ñ‚ока Ð²Ð²Ð¾Ð´Ð° stdin"
+msgstr "-           Ñ‡Ñ‚ение Ñ‚екÑта Ð¸Ð· Ð¿Ð¾Ñ‚ока Ð²Ð²Ð¾Ð´Ð° stdin"
 
 msgid "-t tag          edit file where tag is defined"
-msgstr "-t Ð¼ÐµÑ‚ка         Ñ€ÐµÐ´Ð°ÐºÑ‚ирование Ñ„айла Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¹ Ð¼ÐµÑ‚кой"
+msgstr "-t Ð¼ÐµÑ‚ка    Ñ€ÐµÐ´Ð°ÐºÑ‚ирование Ñ„айла Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¹ Ð¼ÐµÑ‚кой"
 
+# \n\t\t.. Ð´Ð»Ñ ÑƒÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² 80 Ñтолбцов
 msgid "-q [errorfile]  edit file with first error"
-msgstr "-q [файл Ð¾ÑˆÐ¸Ð±Ð¾Ðº] Ñ€ÐµÐ´Ð°ÐºÑ‚ирование Ñ„айла Ñ Ð¿ÐµÑ€Ð²Ð¾Ð¹ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹"
+msgstr ""
+"-q [файл-ошибок]\n"
+"\t\t\t\t    Ñ€ÐµÐ´Ð°ÐºÑ‚ирование Ñ„айла Ñ Ð¿ÐµÑ€Ð²Ð¾Ð¹ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹"
 
 msgid ""
 "\n"
@@ -2361,7 +2959,7 @@ msgstr ""
 "ИÑпользование:"
 
 msgid " vim [arguments] "
-msgstr " vim [ðÑ\80óÑ\83üõýÑ\82Ñ‹] "
+msgstr " vim [ÿðÑ\80ðüõÑ\82Ñ\80Ñ‹] "
 
 msgid ""
 "\n"
@@ -2372,12 +2970,19 @@ msgstr ""
 
 msgid ""
 "\n"
+"Where case is ignored prepend / to make flag upper case"
+msgstr ""
+"\n"
+"ЕÑли Ñ€ÐµÐ³Ð¸ÑÑ‚Ñ€ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚ÑÑ, Ð´Ð¾Ð±Ð°Ð²ÑŒÑ‚е Ð¿ÐµÑ€ÐµÐ´ Ñ„лагом / Ð´Ð»Ñ Ð²ÐµÑ€Ñ…него Ñ€ÐµÐ³Ð¸Ñтра"
+
+msgid ""
+"\n"
 "\n"
 "Arguments:\n"
 msgstr ""
 "\n"
 "\n"
-"Ã\90Ñ\80óÑ\83üõýÑ\82Ñ‹:\n"
+"Ã\9fðÑ\80ðüõÑ\82Ñ\80Ñ‹:\n"
 
 msgid "--\t\t\tOnly file names after this"
 msgstr "--\t\t\tДалее ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‚ÑѠтолько Ð¸Ð¼ÐµÐ½Ð° Ñ„айлов"
@@ -2403,6 +3008,9 @@ msgstr "-v\t\t\tРежим Vi (как \"vi\")"
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tРежим Ex (как \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tУлучшенный Ñ€ÐµÐ¶Ð¸Ð¼ Ex"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tТихий (пакетный) Ñ€ÐµÐ¶Ð¸Ð¼ (только Ð´Ð»Ñ \"ex\")"
 
@@ -2425,7 +3033,7 @@ msgid "-M\t\t\tModifications in text not allowed"
 msgstr "-M\t\t\tБез Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти Ð²Ð½ÐµÑениѠизменений Ð² Ñ‚екÑÑ‚"
 
 msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tÃ\91øýðÑ\80ный Ñ€ÐµÐ¶Ð¸Ð¼"
+msgstr "-b\t\t\tÃ\94òþøÑ\87ный Ñ€ÐµÐ¶Ð¸Ð¼"
 
 msgid "-l\t\t\tLisp mode"
 msgstr "-l\t\t\tРежим Lisp"
@@ -2436,8 +3044,11 @@ msgstr "-C\t\t\tРежим ÑовмеÑтимоÑти Ñ Vi: 'compatible'"
 msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
 msgstr "-N\t\t\tРежим Ð½ÐµÐ¿Ð¾Ð»Ð½Ð¾Ð¹ ÑовмеÑтимоÑти Ñ Vi: 'nocompatible'"
 
-msgid "-V[N]\t\tVerbose level"
-msgstr "-V[N]\t\tУровень Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñти Ñообщений"
+# \n\t\t.. Ð´Ð»Ñ ÑƒÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² 80 Ñтолбцов
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr ""
+"-V[N][файл]\t\tВыводить Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ельные ÑообщениÑ\n"
+"\t\t\t\t[уровень N] [запиÑывать Ð² Ñ„айл]"
 
 msgid "-D\t\t\tDebugging mode"
 msgstr "-D\t\t\tРежим Ð¾Ñ‚ладки"
@@ -2481,8 +3092,17 @@ msgstr "-U <gvimrc>\t\tИÑпользовать <gvimrc> Ð²Ð¼ÐµÑто Ð»ÑŽÐ±Ñ‹Ñ…
 msgid "--noplugin\t\tDon't load plugin scripts"
 msgstr "--noplugin\t\tÐе Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°Ñ‚ÑŒ Ñценарии Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¹"
 
+# \n\t\t.. Ð´Ð»Ñ ÑƒÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² 80 Ñтолбцов
+msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+msgstr ""
+"-p[N]\t\tОткрыть N Ð²ÐºÐ»Ð°Ð´Ð¾Ðº (по ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ: Ð¿Ð¾ Ð¾Ð´Ð½Ð¾Ð¹\n"
+"\t\t\t\tна ÐºÐ°Ð¶Ð´Ñ‹Ð¹ Ñ„айл)"
+
+# \n\t\t.. Ð´Ð»Ñ ÑƒÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² 80 Ñтолбцов
 msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tОткрыть N Ð¾ÐºÐ¾Ð½ (по ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ: Ð¿Ð¾ Ð¾Ð´Ð½Ð¾Ð¼Ñƒ Ð½Ð° ÐºÐ°Ð¶Ð´Ñ‹Ð¹ Ñ„айл)"
+msgstr ""
+"-o[N]\t\tОткрыть N Ð¾ÐºÐ¾Ð½ (по ÑƒÐ¼Ð¾Ð»Ñ‡Ð°Ð½Ð¸ÑŽ: Ð¿Ð¾ Ð¾Ð´Ð½Ð¾Ð¼Ñƒ\n"
+"\t\t\t\tна ÐºÐ°Ð¶Ð´Ñ‹Ð¹ Ñ„айл)"
 
 msgid "-O[N]\t\tLike -o but split vertically"
 msgstr "-O[N]\t\tТо Ð¶Ðµ, Ñ‡Ñ‚о Ð¸ -o, Ð½Ð¾ Ñ Ð²ÐµÑ€Ñ‚икальным Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼ Ð¾ÐºÐ¾Ð½"
@@ -2499,11 +3119,17 @@ msgstr "--cmd <команда>\tВыполнить <команду> Ð¿ÐµÑ€ÐµÐ´ 
 msgid "-c <command>\t\tExecute <command> after loading the first file"
 msgstr "-c <команда>\t\tВыполнить <команду> Ð¿Ð¾Ñле Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ Ð¿ÐµÑ€Ð²Ð¾Ð³Ð¾ Ñ„айла"
 
+# \n\t\t.. Ð´Ð»Ñ ÑƒÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² 80 Ñтолбцов
 msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <ÑеанÑ>\t\tПрочитать Ñценарий <ÑеанÑа> Ð¿Ð¾Ñле Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ Ð¿ÐµÑ€Ð²Ð¾Ð³Ð¾ Ñ„айла"
+msgstr ""
+"-S <ÑеанÑ>\t\tПрочитать Ñценарий <ÑеанÑа> Ð¿Ð¾Ñле Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸\n"
+"\t\t\t\tпервого Ñ„айла"
 
+# \n\t\t.. Ð´Ð»Ñ ÑƒÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² 80 Ñтолбцов
 msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <Ñценарий>\tПрочитать ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ ÐžÐ±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ð¸Ð· Ñ„айла <ÑценариÑ>"
+msgstr ""
+"-s <Ñценарий>\tПрочитать ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ ÐžÐ±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ð¸Ð·\n"
+"\t\t\t\tфайла <ÑценариÑ>"
 
 msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
 msgstr "-w <Ñценарий>\tДобавлÑÑ‚ÑŒ Ð²Ñе Ð²Ð²ÐµÐ´Ñ‘нные ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Ð² Ñ„айл <ÑценариÑ>"
@@ -2515,7 +3141,7 @@ msgid "-x\t\t\tEdit encrypted files"
 msgstr "-x\t\t\tРедактирование Ð·Ð°ÑˆÐ¸Ñ„рованных Ñ„айлов"
 
 msgid "-display <display>\tConnect vim to this particular X-server"
-msgstr "-display <Ñкран>\tПодÑоединить vim Ðº ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñƒ Ñерверу X"
+msgstr "-display <Ñкран>\tПодÑоединить VIM Ðº ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñƒ X-Ñерверу"
 
 msgid "-X\t\t\tDo not connect to X server"
 msgstr "-X\t\t\tÐе Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑÑ‚ÑŒ Ñоединение Ñ Ñервером X"
@@ -2536,6 +3162,11 @@ msgid ""
 msgstr ""
 "--remote-wait-silent <файлы>  Ð¢Ð¾ Ð¶Ðµ, Ð½Ð¾ Ð±ÐµÐ· Ð¶Ð°Ð»Ð¾Ð± Ð½Ð° Ð¾Ñ‚ÑутÑтвие Ñервера"
 
+msgid ""
+"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+msgstr ""
+"--remote-tab[-wait][-silent] <файлы>  Ð¢Ð¾ Ð¶Ðµ, Ñ‡Ñ‚о Ð¸ --remote, Ð½Ð¾ Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ°Ð¼Ð¸"
+
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <кнопки>\tОтправить <кнопки> Ð½Ð° Ñервер Vim Ð¸ Ð²Ñ‹Ð¹Ñ‚и"
 
@@ -2549,6 +3180,9 @@ msgid "--servername <name>\tSend to/become the Vim server <name>"
 msgstr ""
 "--servername <имÑ>\tОтправить Ð½Ð°/Ñтать Ñервером Vim Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ <именем>"
 
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <файл>\tЗапиÑать Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½ÑƒÑŽ Ð¼ÐµÑ‚ку Ð¾ Ð·Ð°Ð¿ÑƒÑке Ð² <файл>"
+
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
 msgstr "-i <viminfo>\t\tИÑпользовать Ð²Ð¼ÐµÑто .viminfo Ñ„айл <viminfo>"
 
@@ -2563,33 +3197,27 @@ msgid ""
 "Arguments recognised by gvim (Motif version):\n"
 msgstr ""
 "\n"
-"Ã\90Ñ\80óÑ\83üõýÑ\82Ñ‹ Ð´Ð»Ñ gvim (верÑиѠMotif):\n"
+"Ã\9fðÑ\80ðüõÑ\82Ñ\80Ñ‹ Ð´Ð»Ñ gvim (верÑиѠMotif):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (neXtaw version):\n"
 msgstr ""
 "\n"
-"Ã\90Ñ\80óÑ\83üõýÑ\82Ñ‹ Ð´Ð»Ñ gvim (верÑиѠneXtaw):\n"
+"Ã\9fðÑ\80ðüõÑ\82Ñ\80Ñ‹ Ð´Ð»Ñ gvim (верÑиѠneXtaw):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (Athena version):\n"
 msgstr ""
 "\n"
-"Ã\90Ñ\80óÑ\83üõýÑ\82Ñ‹ Ð´Ð»Ñ gvim (верÑиѠAthena):\n"
+"Ã\9fðÑ\80ðüõÑ\82Ñ\80Ñ‹ Ð´Ð»Ñ gvim (верÑиѠAthena):\n"
 
 msgid "-display <display>\tRun vim on <display>"
-msgstr "-display <диÑплей>\tЗапуÑтить vim Ð½Ð° ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼ <диÑплее>"
+msgstr "-display <диÑплей>\tЗапуÑтить VIM Ð½Ð° ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼ <диÑплее>"
 
 msgid "-iconic\t\tStart vim iconified"
-msgstr "-iconic\t\tЗапуÑтить vim Ð² Ñвёрнутом Ð²Ð¸Ð´Ðµ"
-
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <имÑ>\t\tИÑпользовать Ñ€ÐµÑурÑ, ÐºÐ°Ðº ÐµÑли Ð±Ñ‹ vim Ð±Ñ‹Ð» <именем>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (Ðе Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð¾)\n"
+msgstr "-iconic\t\tЗапуÑтить VIM Ð² Ñвёрнутом Ð²Ð¸Ð´Ðµ"
 
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr ""
@@ -2633,27 +3261,14 @@ msgstr "-xrm <реÑурÑ>\tУÑтановить ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¹ <реÑур
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Ðргументы Ð´Ð»Ñ gvim (верÑиѠRISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <чиÑло>\tПервоначальнаѠширина Ð¾ÐºÐ½Ð° Ð² ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ñ…"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <чиÑло>\tПервоначальнаѠвыÑота Ð¾ÐºÐ½Ð° Ð² Ñтроках"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
-"Ã\90Ñ\80óÑ\83üõýÑ\82Ñ‹ Ð´Ð»Ñ gvim (верÑиѠGTK+):\n"
+"Ã\9fðÑ\80ðüõÑ\82Ñ\80Ñ‹ Ð´Ð»Ñ gvim (верÑиѠGTK+):\n"
 
 msgid "-display <display>\tRun vim on <display> (also: --display)"
 msgstr ""
-"-display <диÑплей>\tЗапуÑтить vim Ð½Ð° ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼ <диÑплее> (также: --display)"
+"-display <диÑплей>\tЗапуÑтить VIM Ð½Ð° ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼ <диÑплее> (также: --display)"
 
 msgid "--role <role>\tSet a unique role to identify the main window"
 msgstr ""
@@ -2662,9 +3277,15 @@ msgstr ""
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tОткрыть Vim Ð²Ð½ÑƒÑ‚ри Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚а GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tВывеÑти Window ID Ð´Ð»Ñ gvim Ð½Ð° Ñтандартный Ð¿Ð¾Ñ‚ок Ð²Ñ‹Ð²Ð¾Ð´Ð°"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <заголовок Ñ€Ð¾Ð´Ð¸Ñ‚елÑ>\tОткрыть Vim Ð² Ñ€Ð¾Ð´Ð¸Ñ‚ельÑком Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¸"
 
+msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+msgstr "--windowid <HWND>\tОткрыть Vim Ð²Ð½ÑƒÑ‚ри Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚а win32"
+
 msgid "No display"
 msgstr "Ðет Ð´Ð¸ÑплеÑ"
 
@@ -2717,7 +3338,6 @@ msgstr ""
 "\n"
 "измен.  ÑÑ‚Ñ€  ÐºÐ¾Ð» Ñ‚екÑÑ‚"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -2726,7 +3346,6 @@ msgstr ""
 "# Ð“лобальные Ð¾Ñ‚метки:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -2734,7 +3353,6 @@ msgstr ""
 "\n"
 "# Ð¡Ð¿Ð¸Ñок Ð¿Ñ€Ñ‹Ð¶ÐºÐ¾Ð² (Ñначала Ð±Ð¾Ð»ÐµÐµ Ñвежие):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -2763,24 +3381,14 @@ msgstr ""
 "ввода"
 
 msgid "E288: input method doesn't support any style"
-msgstr "E288: Ã¼етод Ð²Ð²Ð¾Ð´Ð° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñтили"
+msgstr "E288: Ã\9cетод Ð²Ð²Ð¾Ð´Ð° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ñтили"
 
 msgid "E289: input method doesn't support my preedit type"
 msgstr ""
-"E289: Ð¼ÐµÑ‚од Ð²Ð²Ð¾Ð´Ð° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ð¼Ð¾Ð¹ Ñ‚ип Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ельного Ñ€ÐµÐ´Ð°ÐºÑ‚ированиÑ"
-
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: Ñтиль \"над Ð¼ÐµÑтом\" Ñ‚ребует ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑˆÑ€Ð¸Ñ„тового Ð½Ð°Ð±Ð¾Ñ€Ð°"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr ""
-"E291: GTK+ Ð±Ð¾Ð»ÐµÐµ Ñ€Ð°Ð½Ð½ÐµÐ¹ Ð²ÐµÑ€Ñии, Ñ‡ÐµÐ¼ 1.2.3. ÐžÐ±Ð»Ð°ÑÑ‚ÑŒ ÑоÑтоÑниѠне Ñ€Ð°Ð±Ð¾Ñ‚ает."
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: Ð¡ÐµÑ€Ð²ÐµÑ€ Ð¼ÐµÑ‚ода Ð²Ð²Ð¾Ð´Ð° Ð½Ðµ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½"
+"E289: ÐœÐµÑ‚од Ð²Ð²Ð¾Ð´Ð° Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ Ð¼Ð¾Ð¹ Ñ‚ип Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ельного Ñ€ÐµÐ´Ð°ÐºÑ‚ированиÑ"
 
 msgid "E293: block was not locked"
-msgstr "E293: Ã±лок Ð½Ðµ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½"
+msgstr "E293: Ã\91лок Ð½Ðµ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½"
 
 msgid "E294: Seek error in swap file read"
 msgstr "E294: ÐžÑˆÐ¸Ð±ÐºÐ° Ð¿Ð¾Ð¸Ñка Ð¿Ñ€Ð¸ Ñ‡Ñ‚ении Ñвоп-файла"
@@ -2807,6 +3415,9 @@ msgstr "E298: Ðе Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ Ð±Ð»Ð¾Ðº Ð½Ð¾Ð¼ÐµÑ€ 1?"
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Ðе Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ Ð±Ð»Ð¾Ðº Ð½Ð¾Ð¼ÐµÑ€ 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: ÐžÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ð¸ ÑˆÐ¸Ñ„рованиѠÑвоп-файла"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: ÐžÐ¹, Ð¿Ð¾Ñ‚ерÑлÑÑ Ñвоп-файл!!!"
@@ -2819,8 +3430,8 @@ msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
 msgstr ""
 "E303: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð¾Ñ‚крыть Ñвоп-файл Ð´Ð»Ñ \"%s\", Ð²Ð¾ÑÑтановление Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾"
 
-msgid "E304: ml_timestamp: Didn't get block 0??"
-msgstr "E304: ml_timestamp: Ðе Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ Ð±Ð»Ð¾Ðº 0??"
+msgid "E304: ml_upd_block0(): Didn't get block 0??"
+msgstr "E304: ml_upd_block0(): Ðе Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ Ð±Ð»Ð¾Ðº 0??"
 
 #, c-format
 msgid "E305: No swap file found for %s"
@@ -2868,6 +3479,14 @@ msgstr ""
 "либо Ñ„айл Ð±Ñ‹Ð» Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘н."
 
 #, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr "E833: %s Ð·Ð°ÑˆÐ¸Ñ„рован, Ð° Ñта Ð²ÐµÑ€ÑиѠVim Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ ÑˆÐ¸Ñ„рование"
+
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr " Ð±Ñ‹Ð» Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘н (размер Ñтраницы Ð¼ÐµÐ½ÑŒÑˆÐµ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ).\n"
+
+#, c-format
 msgid "Using swap file \"%s\""
 msgstr "ИÑпользуетÑÑ Ñвоп-файл \"%s\""
 
@@ -2879,24 +3498,58 @@ msgid "E308: Warning: Original file may have been changed"
 msgstr "E308: ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð¸Ñходный Ñ„айл Ð¼Ð¾Ð³ Ð±Ñ‹Ñ‚ÑŒ Ð¸Ð·Ð¼ÐµÐ½Ñ‘н"
 
 #, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: Ðевозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ð±Ð»Ð¾Ðº 1 Ð¸Ð· %s"
-
-msgid "???MANY LINES MISSING"
-msgstr "???ОТСУТСТВУЕТ ÐœÐОГО Ð¡Ð¢Ð ÐžÐš"
+msgid "Swap file is encrypted: \"%s\""
+msgstr "Своп-файл Ð·Ð°ÑˆÐ¸Ñ„рован: \"%s\""
 
-msgid "???LINE COUNT WRONG"
-msgstr "???ÐЕПРÐВИЛЬÐОЕ Ð—ÐÐЧЕÐИЕ Ð¡Ð§Ð•Ð¢Ð§Ð˜ÐšÐ Ð¡Ð¢Ð ÐžÐš"
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"ЕÑли Ð²Ñ‹ Ð²Ð²ÐµÐ»Ð¸ Ð½Ð¾Ð²Ñ‹Ð¹ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ Ð´Ð»Ñ ÑˆÐ¸Ñ„рованиÑ, Ð½Ð¾ Ð½Ðµ Ð·Ð°Ð¿Ð¸Ñали Ñ‚екÑтовый Ñ„айл,"
 
-msgid "???EMPTY BLOCK"
-msgstr "???ПУСТОЙ Ð‘ЛОК"
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"то Ð²Ð²ÐµÐ´Ð¸Ñ‚е Ð½Ð¾Ð²Ñ‹Ð¹ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ Ð´Ð»Ñ ÑˆÐ¸Ñ„рованиÑ."
+
+# ÐŸÐµÑ€ÐµÐ²Ð¾Ð´ ÑообщениѠразделён Ð½Ð° Ð´Ð²Ðµ Ñ‡Ð°Ñти, Ñ‡Ð°ÑÑ‚ÑŒ Ð¿ÐµÑ€Ð²Ð°Ñ
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"ЕÑли Ð²Ñ‹ Ð·Ð°Ð¿Ð¸Ñали Ñ‚екÑтовый Ñ„айл Ð¿Ð¾Ñле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ ÑˆÐ¸Ñ„рованиÑ, Ñ‚о Ð½Ð°Ð¶Ð¼Ð¸Ñ‚е"
+
+# ÐŸÐµÑ€ÐµÐ²Ð¾Ð´ ÑообщениѠразделён Ð½Ð° Ð´Ð²Ðµ Ñ‡Ð°Ñти, Ñ‡Ð°ÑÑ‚ÑŒ Ð²Ñ‚ораÑ
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"Enter Ð´Ð»Ñ Ð¸ÑпользованиѠодного ÐºÐ»ÑŽÑ‡Ð° Ð´Ð»Ñ Ñ‚екÑтового Ñ„айла Ð¸ Ñвоп-файла"
+
+#, c-format
+msgid "E309: Unable to read block 1 from %s"
+msgstr "E309: Ðевозможно Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать Ð±Ð»Ð¾Ðº 1 Ð¸Ð· %s"
+
+msgid "???MANY LINES MISSING"
+msgstr "???ОТСУТСТВУЕТ ÐœÐОГО Ð¡Ð¢Ð ÐžÐš"
+
+msgid "???LINE COUNT WRONG"
+msgstr "???ÐЕПРÐВИЛЬÐОЕ Ð—ÐÐЧЕÐИЕ Ð¡Ð§ÐТЧИКРСТРОК"
+
+msgid "???EMPTY BLOCK"
+msgstr "???ПУСТОЙ Ð‘ЛОК"
 
 msgid "???LINES MISSING"
 msgstr "???ОТСУТСТВУЮТ Ð¡Ð¢Ð ÐžÐšÐ˜"
 
 #, c-format
 msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: Ã½еправильный Ð±Ð»Ð¾Ðº 1 ID (%s Ð½Ðµ ÑвлÑетÑѠфайлом .swp?)"
+msgstr "E310: Ã\9dеправильный Ð±Ð»Ð¾Ðº 1 ID (%s Ð½Ðµ ÑвлÑетÑѠфайлом .swp?)"
 
 msgid "???BLOCK MISSING"
 msgstr "???ПРОПУЩЕРБЛОК"
@@ -2920,7 +3573,7 @@ msgstr ""
 "Ñ ???"
 
 msgid "See \":help E312\" for more information."
-msgstr "См. Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ельную Ð¸Ð½Ñ„ормацию Ð² Ñправочнике (\":help E312\")"
+msgstr "См. \":help E312\" Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ельной Ð¸Ð½Ñ„ормации."
 
 msgid "Recovery completed. You should check if everything is OK."
 msgstr "ВоÑÑтановление Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾. ÐŸÑ€Ð¾Ð²ÐµÑ€ÑŒÑ‚е, Ð²ÑÑ‘ Ð»Ð¸ Ð² Ð¿Ð¾Ñ€Ñдке."
@@ -2932,15 +3585,23 @@ msgstr ""
 "\n"
 "(Можете Ð·Ð°Ð¿Ð¸Ñать Ñ„айл Ð¿Ð¾Ð´ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ð¸ Ñравнить ÐµÐ³Ð¾ Ñ Ð¸Ñходным\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "файлом Ð¿Ñ€Ð¸ Ð¿Ð¾Ð¼Ð¾Ñ‰Ð¸ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ diff).\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "файлом Ð¿Ñ€Ð¸ Ð¿Ð¾Ð¼Ð¾Ñ‰Ð¸ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ diff)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "ВоÑÑтановление Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¾. Ð¡Ð¾Ð´ÐµÑ€Ð¶Ð¸Ð¼Ð¾Ðµ Ð±ÑƒÑ„еров Ð¸ Ñ„айлов Ñквивалентно."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"Затем ÑƒÐ´Ð°Ð»Ð¸Ñ‚е Ñ„айл .swp.\n"
 "\n"
+"ВероÑтно, ÑейчаѠвы Ð·Ð°Ñ…отите ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ñ„айл .swp.\n"
+"\n"
+
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "ИÑпользование ÐºÐ»ÑŽÑ‡Ð° ÑˆÐ¸Ñ„рованиѠиз Ñвоп-файла Ð´Ð»Ñ Ñ‚екÑтового Ñ„айла.\n"
 
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
@@ -3054,7 +3715,7 @@ msgid "E316: ml_get: cannot find line %ld"
 msgstr "E316: ml_get: Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ‚и Ñтроку %ld"
 
 msgid "E317: pointer block id wrong 3"
-msgstr "E317: Ã½еправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ð°Ñ‚елѠблока 3"
+msgstr "E317: Ã\9dеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ð°Ñ‚елѠблока 3"
 
 msgid "stack_idx should be 0"
 msgstr "значение stack_idx Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ñ€Ð°Ð²Ð½Ð¾ 0"
@@ -3063,7 +3724,7 @@ msgid "E318: Updated too many blocks?"
 msgstr "E318: ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¾ Ñлишком Ð¼Ð½Ð¾Ð³Ð¾ Ð±Ð»Ð¾ÐºÐ¾Ð²?"
 
 msgid "E317: pointer block id wrong 4"
-msgstr "E317: Ã½еправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ð°Ñ‚елѠблока 4"
+msgstr "E317: Ã\9dеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ð°Ñ‚елѠблока 4"
 
 msgid "deleted block 1?"
 msgstr "удалён Ð±Ð»Ð¾Ðº 1?"
@@ -3073,24 +3734,28 @@ msgid "E320: Cannot find line %ld"
 msgstr "E320: Ð¡Ñ‚рока %ld Ð½Ðµ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð°"
 
 msgid "E317: pointer block id wrong"
-msgstr "E317: Ã½еправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ð°Ñ‚елѠблока"
+msgstr "E317: Ã\9dеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ð°Ñ‚елѠблока"
 
 msgid "pe_line_count is zero"
 msgstr "значение pe_line_count Ñ€Ð°Ð²Ð½Ð¾ Ð½ÑƒÐ»ÑŽ"
 
 #, c-format
 msgid "E322: line number out of range: %ld past the end"
-msgstr "E322: Ã½омер Ñтроки Ð·Ð° Ð¿Ñ€ÐµÐ´ÐµÐ»Ð°Ð¼Ð¸ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°: %ld"
+msgstr "E322: Ã\9dомер Ñтроки Ð·Ð° Ð¿Ñ€ÐµÐ´ÐµÐ»Ð°Ð¼Ð¸ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°: %ld"
 
 #, c-format
 msgid "E323: line count wrong in block %ld"
-msgstr "E323: Ã½еправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñчётчика Ñтрок Ð² Ð±Ð»Ð¾ÐºÐµ %ld"
+msgstr "E323: Ã\9dеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ñчётчика Ñтрок Ð² Ð±Ð»Ð¾ÐºÐµ %ld"
 
 msgid "Stack size increases"
 msgstr "Размер Ñтека ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½"
 
 msgid "E317: pointer block id wrong 2"
-msgstr "E317: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ð°Ñ‚елѠблока 2"
+msgstr "E317: Ðеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ ÑƒÐºÐ°Ð·Ð°Ñ‚елѠблока 2"
+
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773: ÐŸÐµÑ‚лѠÑимвольных ÑÑылок Ð´Ð»Ñ \"%s\""
 
 msgid "E325: ATTENTION"
 msgstr "E325: Ð’ÐИМÐÐИЕ"
@@ -3102,8 +3767,9 @@ msgstr ""
 "\n"
 "Обнаружен Ñвоп-файл Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ \""
 
+# Ð¡ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¾Ð¹ Ð±ÑƒÐºÐ²Ñ‹, Ñ‡Ñ‚обы ÑоответÑтвовало Ð¿Ð¾ Ñтилю ÑоÑедним ÑообщениÑм.
 msgid "While opening file \""
-msgstr "Ã\9fри Ð¾Ñ‚крытии Ñ„айла: \""
+msgstr "ÿри Ð¾Ñ‚крытии Ñ„айла: \""
 
 msgid "      NEWER than swap file!\n"
 msgstr "                    Ð‘олее Ð¡Ð’ЕЖИЙ, Ñ‡ÐµÐ¼ Ñвоп-файл!\n"
@@ -3112,24 +3778,23 @@ msgstr "                    Ð‘олее Ð¡Ð’ЕЖИЙ, Ñ‡ÐµÐ¼ Ñвоп-файл!\n
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) Ð’озможно, Ñ€ÐµÐ´Ð°ÐºÑ‚ирование Ñ„айла Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑѠв Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ðµ.\n"
-"    Ð•Ñли Ñто Ñ‚ак, Ñ‚о Ð±ÑƒÐ´ÑŒÑ‚е Ð²Ð½Ð¸Ð¼Ð°Ñ‚ельны Ð¿Ñ€Ð¸ Ð²Ð½ÐµÑении Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹,\n"
-"    Ñ‡Ñ‚обы Ñƒ Ð²Ð°Ñ Ð½Ðµ Ð¿Ð¾ÑвилоÑÑŒ Ð´Ð²Ð° Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚а Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð¸ Ñ‚ого Ð¶Ðµ Ñ„айла.\n"
-
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Ð—авершите Ñ€Ð°Ð±Ð¾Ñ‚у Ð¸Ð»Ð¸ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶Ð°Ð¹Ñ‚е Ñ Ð¾ÑторожноÑтью.\n"
+"(1) Ð’озможно, Ñ€ÐµÐ´Ð°ÐºÑ‚ирование Ñтого Ð¶Ðµ Ñ„айла Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑетÑѠв Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ðµ.\n"
+"    Ð•Ñли Ñто Ñ‚ак, Ñ‚о Ð±ÑƒÐ´ÑŒÑ‚е Ð²Ð½Ð¸Ð¼Ð°Ñ‚ельны Ð¿Ñ€Ð¸ Ð²Ð½ÐµÑении Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹, Ñ‡Ñ‚обы\n"
+"    Ñƒ Ð²Ð°Ñ Ð½Ðµ Ð¿Ð¾ÑвилоÑÑŒ Ð´Ð²Ð° Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚а Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð¸ Ñ‚ого Ð¶Ðµ Ñ„айла."
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
+# Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ðµ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¾, " \n" Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ Ñ‚.к. Ñтрока Ð½Ðµ Ð¿Ð¾Ð¼ÐµÑ‰Ð°ÐµÑ‚ÑÑ.
+msgid "  Quit, or continue with caution.\n"
 msgstr ""
-"\n"
-"(2) ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¹ ÑеанѠредактированиѠÑтого Ñ„айла Ð·Ð°Ð²ÐµÑ€ÑˆÑ‘н Ð°Ð²Ð°Ñ€Ð¸Ð¹Ð½Ð¾.\n"
+" \n"
+"    Ð—авершите Ñ€Ð°Ð±Ð¾Ñ‚у Ð¸Ð»Ð¸ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶Ð°Ð¹Ñ‚е Ñ Ð¾ÑторожноÑтью.\n"
+
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Ð¡ÐµÐ°Ð½Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚ированиѠÑтого Ñ„айла Ð·Ð°Ð²ÐµÑ€ÑˆÑ‘н Ð°Ð²Ð°Ñ€Ð¸Ð¹Ð½Ð¾.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Ð’ Ñтом Ñлучае, Ð¸Ñпользуйте ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ \":recover\" Ð¸Ð»Ð¸ \"vim -r "
@@ -3139,7 +3804,7 @@ msgid ""
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
 "\"\n"
-"    Ð´Ð»Ñ Ð²Ð¾ÑÑтановлениѠизменений (Ñм. \":help Ð²Ð¾ÑÑтановление\").\n"
+"    Ð´Ð»Ñ Ð²Ð¾ÑÑтановлениѠизменений (Ñм. \":help recovery\").\n"
 
 msgid "    If you did this already, delete the swap file \""
 msgstr "    Ð•Ñли Ð²Ñ‹ ÑƒÐ¶Ðµ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñли Ñту Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸ÑŽ, ÑƒÐ´Ð°Ð»Ð¸Ñ‚е Ñвоп-файл \""
@@ -3158,7 +3823,7 @@ msgid "\" already exists!"
 msgstr "\" ÑƒÐ¶Ðµ ÑущеÑтвует!"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM - Ð’ÐИМÐÐИЕ"
+msgstr "VIM â€” Ð’ÐИМÐÐИЕ"
 
 msgid "Swap file already exists!"
 msgstr "Своп-файл ÑƒÐ¶Ðµ ÑущеÑтвует!"
@@ -3180,16 +3845,16 @@ msgid ""
 "&Open Read-Only\n"
 "&Edit anyway\n"
 "&Recover\n"
+"&Delete it\n"
 "&Quit\n"
-"&Abort\n"
-"&Delete it"
+"&Abort"
 msgstr ""
 "&O ÐžÑ‚крыть Ð´Ð»Ñ Ñ‡Ñ‚ениÑ\n"
 "&E Ð ÐµÐ´Ð°ÐºÑ‚ировать\n"
 "&R Ð’оÑÑтановить\n"
+"&D Ð£Ð´Ð°Ð»Ð¸Ñ‚ÑŒ\n"
 "&Q Ð’ыход\n"
-"&A ÐŸÑ€ÐµÑ€Ð²Ð°Ñ‚ÑŒ\n"
-"&D Ð£Ð´Ð°Ð»Ð¸Ñ‚ÑŒ"
+"&A ÐŸÑ€ÐµÑ€Ð²Ð°Ñ‚ÑŒ"
 
 msgid "E326: Too many swap files found"
 msgstr "E326: ÐžÐ±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¾ Ñлишком Ð¼Ð½Ð¾Ð³Ð¾ Ñвоп-файлов"
@@ -3200,8 +3865,13 @@ msgstr "E327: ÐšÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚ Ð¿ÑƒÑ‚и Ðº Ñлементу Ð¼ÐµÐ½ÑŽ Ð½Ðµ Ñв
 msgid "E328: Menu only exists in another mode"
 msgstr "E328: ÐœÐµÐ½ÑŽ Ð² Ñтом Ñ€ÐµÐ¶Ð¸Ð¼Ðµ Ð½Ðµ ÑущеÑтвует"
 
-msgid "E329: No menu of that name"
-msgstr "E329: Ðет Ð¼ÐµÐ½ÑŽ Ñ Ñ‚аким Ð¸Ð¼ÐµÐ½ÐµÐ¼"
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: Ðет Ð¼ÐµÐ½ÑŽ %s"
+
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: ÐŸÑƒÑтое Ð¸Ð¼Ñ Ð¼ÐµÐ½ÑŽ"
 
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: ÐŸÑƒÑ‚ÑŒ Ðº Ð¼ÐµÐ½ÑŽ Ð½Ðµ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð²ÐµÑти Ðº Ð¿Ð¾Ð´Ð¼ÐµÐ½ÑŽ"
@@ -3239,7 +3909,7 @@ msgid "E336: Menu path must lead to a sub-menu"
 msgstr "E336: ÐŸÑƒÑ‚ÑŒ Ðº Ð¼ÐµÐ½ÑŽ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð²ÐµÑти Ðº Ð¿Ð¾Ð´Ð¼ÐµÐ½ÑŽ"
 
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: ÐœÐµÐ½ÑŽ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ -- Ð¿Ñ€Ð¾Ð²ÐµÑ€ÑŒÑ‚е Ð¸Ð¼ÐµÐ½Ð° Ð¼ÐµÐ½ÑŽ"
+msgstr "E337: ÐœÐµÐ½ÑŽ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ â€” Ð¿Ñ€Ð¾Ð²ÐµÑ€ÑŒÑ‚е Ð¸Ð¼ÐµÐ½Ð° Ð¼ÐµÐ½ÑŽ"
 
 #, c-format
 msgid "Error detected while processing %s:"
@@ -3249,31 +3919,30 @@ msgstr "Обнаружена Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ке %s:"
 msgid "line %4ld:"
 msgstr "Ñтрока %4ld:"
 
-msgid "[string too long]"
-msgstr "[Ñлишком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ Ñтрока]"
+#, c-format
+msgid "E354: Invalid register name: '%s'"
+msgstr "E354: ÐедопуÑтимое Ð¸Ð¼Ñ Ñ€ÐµÐ³Ð¸Ñтра: '%s'"
 
 msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
 msgstr ""
 "Перевод Ñообщений Ð½Ð° Ñ€ÑƒÑÑкий Ñзык: Ð’аÑилий Ð Ð°Ð³Ð¾Ð·Ð¸Ð½ <vrr@users.sourceforge."
-"net>"
+"net>, Ð¡ÐµÑ€Ð³ÐµÐ¹ Ðлёшин <alyoshin.s@gmail.com>"
 
 msgid "Interrupt: "
 msgstr "Прерывание: "
 
-msgid "Hit ENTER to continue"
-msgstr "Ã\94ÃȄ\8f Ã¿Ñ\80þôþûöõýøÑ\8f Ã½Ã°Ã¶Ã¼Ã¸Ñ\82õ ENTER"
+msgid "Press ENTER or type command to continue"
+msgstr "Ã\9dðöüøÑ\82õ ENTER Ã¸Ã»Ã¸ Ã²Ã²ÃµÃ´Ã¸Ñ\82õ ÃºÃ¾Ã¼Ã°Ã½Ã´Ñ\83 Ã´ÃȄ\8f Ã¿Ñ\80þôþûöõýøÑ\8f"
 
-msgid "Hit ENTER or type command to continue"
-msgstr "ДлѠпродолжениѠнажмите ENTER Ð¸Ð»Ð¸ Ð²Ð²ÐµÐ´Ð¸Ñ‚е ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ"
+#, c-format
+msgid "%s line %ld"
+msgstr "%s Ñтрока %ld"
 
 msgid "-- More --"
 msgstr "-- ÐŸÑ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ðµ Ñледует --"
 
-msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-msgstr " (RET/BS: Ñтрока, SPACE/b: Ñтраница, d/u: Ð¿Ð¾Ð»Ñтраницы, q: Ð²Ñ‹Ñ…од)"
-
-msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-msgstr " (RET: Ñтрока, SPACE: Ñтраница, d: Ð¿Ð¾Ð»Ñтраницы, q: Ð²Ñ‹Ñ…од)"
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPACE/d/j: Ñкран/Ñтраница/Ñтрока Ð²Ð½Ð¸Ð·, b/u/k: Ð²Ð²ÐµÑ€Ñ…, q: Ð²Ñ‹Ñ…од "
 
 msgid "Question"
 msgstr "ВопроÑ"
@@ -3282,8 +3951,8 @@ msgid ""
 "&Yes\n"
 "&No"
 msgstr ""
-"&Да\n"
-"&Ðет"
+"&Да\n"
+"&Ðет"
 
 msgid ""
 "&Yes\n"
@@ -3292,11 +3961,14 @@ msgid ""
 "&Discard All\n"
 "&Cancel"
 msgstr ""
-"&Да\n"
-"&Ðет\n"
-"Сохранить &вÑе\n"
-"&ПотерÑÑ‚ÑŒ Ð²Ñе\n"
-"О&тмена"
+"&Y Ð”а\n"
+"&N Ðет\n"
+"&A Ð¡Ð¾Ñ…ранить Ð²Ñе\n"
+"&D ÐŸÐ¾Ñ‚ерÑÑ‚ÑŒ Ð²Ñе\n"
+"&C ÐžÑ‚мена"
+
+msgid "Select Directory dialog"
+msgstr "Выбор ÐºÐ°Ñ‚алога"
 
 msgid "Save File dialog"
 msgstr "Сохранение Ñ„айла"
@@ -3309,14 +3981,29 @@ msgid "E338: Sorry, no file browser in console mode"
 msgstr ""
 "E338: Ð˜Ð·Ð²Ð¸Ð½Ð¸Ñ‚е, Ð½Ð¾ Ð² ÐºÐ¾Ð½Ñольном Ñ€ÐµÐ¶Ð¸Ð¼Ðµ Ð½ÐµÑ‚ Ð¿Ñ€Ð¾Ð²Ð¾Ð´Ð½Ð¸ÐºÐ° Ð¿Ð¾ Ñ„айловой ÑиÑтеме"
 
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766: ÐедоÑтаточно Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров Ð´Ð»Ñ printf()"
+
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: ÐžÐ¶Ð¸Ð´Ð°Ð»ÑѠпараметр Ñ‚ипа Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ Ñ‚очкой Ð´Ð»Ñ printf()"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров Ð´Ð»Ñ printf()"
+
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ: Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ñ„айла Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ Ñ‚олько Ð´Ð»Ñ Ñ‡Ñ‚ениÑ"
 
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr "Введите Ð½Ð¾Ð¼ÐµÑ€ Ð¸ <Enter> Ð¸Ð»Ð¸ Ñ‰Ñ‘лкните Ð¼Ñ‹ÑˆÑŒÑŽ (пуÑто Ð´Ð»Ñ Ð¾Ñ‚мены): "
+
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "Введите Ð½Ð¾Ð¼ÐµÑ€ Ð¸ <Enter> (пуÑто Ð´Ð»Ñ Ð¾Ñ‚мены): "
+
 msgid "1 more line"
 msgstr "Добавлена Ð¾Ð´Ð½Ð° Ñтрока"
 
 msgid "1 line less"
-msgstr "ãôðûõна Ð¾Ð´Ð½Ð° Ñтрока"
+msgstr "ãñÑ\80ðна Ð¾Ð´Ð½Ð° Ñтрока"
 
 #, c-format
 msgid "%ld more lines"
@@ -3324,19 +4011,21 @@ msgstr "Добавлено Ñтрок: %ld"
 
 #, c-format
 msgid "%ld fewer lines"
-msgstr "ãôðûõно Ñтрок: %ld"
+msgstr "ãñÑ\80ðно Ñтрок: %ld"
 
 msgid " (Interrupted)"
 msgstr " (Прервано)"
 
+msgid "Beep!"
+msgstr "Би-би!"
+
 msgid "Vim: preserving files...\n"
-msgstr "Vim: ÑохранÑÑŽÑ‚ÑѠфайлы...\n"
+msgstr "Vim: Ñохранение Ñ„айлов...\n"
 
 #. close all memfiles, without deleting
 msgid "Vim: Finished.\n"
 msgstr "Vim: Ð“отово.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ОШИБКÐ: "
 
@@ -3381,7 +4070,7 @@ msgid "E547: Illegal mouseshape"
 msgstr "E547: ÐедопуÑтимаѠформа ÐºÑƒÑ€Ñора"
 
 msgid "E548: digit expected"
-msgstr "E548: Ñ‚ребуетÑѠввеÑти Ñ†Ð¸Ñ„ру"
+msgstr "E548: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑѠввеÑти Ñ†Ð¸Ñ„ру"
 
 msgid "E549: Illegal percentage"
 msgstr "E549: ÐедопуÑтимое Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ñ†ÐµÐ½Ñ‚ов"
@@ -3390,11 +4079,14 @@ msgid "Enter encryption key: "
 msgstr "Введите Ð¿Ð°Ñ€Ð¾Ð»ÑŒ Ð´Ð»Ñ ÑˆÐ¸Ñ„рованиÑ: "
 
 msgid "Enter same key again: "
-msgstr "        ÐŸÐ¾Ð²Ñ‚орите Ð²Ð²Ð¾Ð´ Ð¿Ð°Ñ€Ð¾Ð»Ñ:"
+msgstr "Повторите Ð²Ð²Ð¾Ð´ Ð¿Ð°Ñ€Ð¾Ð»Ñ: "
 
 msgid "Keys don't match!"
 msgstr "Введённые Ð¿Ð°Ñ€Ð¾Ð»Ð¸ Ð½Ðµ Ñовпадают!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: Ñлишком Ð±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ Ð¿ÑƒÑ‚ÑŒ Ð´Ð»Ñ Ð°Ð²Ñ‚одополнениÑ"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -3419,18 +4111,8 @@ msgstr "E346: Ð’ Ð¿ÑƒÑ‚и Ñмены ÐºÐ°Ñ‚алога Ð±Ð¾Ð»ÑŒÑˆÐµ Ð½ÐµÑ‚ ÐºÐ°Ñ‚
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: Ð’ Ð¸Ð·Ð²ÐµÑтных ÐºÐ°Ñ‚алогах Ð±Ð¾Ð»ÑŒÑˆÐµ Ð½ÐµÑ‚ Ñ„айлов \"%s\""
 
-msgid "E550: Missing colon"
-msgstr "E550: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð´Ð²Ð¾ÐµÑ‚очие"
-
-msgid "E551: Illegal component"
-msgstr "E551: ÐедопуÑтимый ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚"
-
-msgid "E552: digit expected"
-msgstr "E552: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑѠуказать Ñ†Ð¸Ñ„ру"
-
-#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
-msgstr "Ðевозможно ÑоединитьÑÑ Ñ Netbeans #2"
+msgstr "Ðевозможно ÑоединитьÑÑ Ñ NetBeans #2"
 
 msgid "Cannot connect to Netbeans"
 msgstr "Ðевозможно ÑоединитьÑÑ Ñ NetBeans"
@@ -3447,21 +4129,37 @@ msgstr "чтение Ð¸Ð· Ð³Ð½ÐµÐ·Ð´Ð° NetBeans"
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: ÐŸÐ¾Ñ‚ерÑно Ñоединение Ñ NetBeans Ð´Ð»Ñ Ð±ÑƒÑ„ера %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeans Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ Ñ Ñтим Ð³Ñ€Ð°Ñ„ичеÑким Ð¸Ð½Ñ‚ерфейÑом"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: ÑƒÐ¶Ðµ Ñоединён Ñ NetBeans"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s Ð¾Ñ‚крыт Ñ‚олько Ð´Ð»Ñ Ñ‡Ñ‚ениѠ(добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: Ðет Ð¸Ð¼ÐµÐ½Ð¸ Ð² Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¸ ÐºÑƒÑ€Ñора"
+
+msgid "E774: 'operatorfunc' is empty"
+msgstr "E774: Ð—начением Ð¾Ð¿Ñ†Ð¸Ð¸ 'operatorfunc' ÑвлÑетÑѠпуÑтаѠÑтрока"
+
+msgid "E775: Eval feature not available"
+msgstr "E775: eval Ð½Ðµ Ð´Ð¾Ñтупна"
+
 msgid "Warning: terminal cannot highlight"
 msgstr "Предупреждение: Ñ‚ерминал Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑÑ‚ÑŒ Ð¿Ð¾Ð´Ñветку"
 
 msgid "E348: No string under cursor"
 msgstr "E348: Ðет Ñтроки Ð² Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¸ ÐºÑƒÑ€Ñора"
 
-msgid "E349: No identifier under cursor"
-msgstr "E349: Ðет Ð¸Ð¼ÐµÐ½Ð¸ Ð² Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¸ ÐºÑƒÑ€Ñора"
-
 msgid "E352: Cannot erase folds with current 'foldmethod'"
 msgstr ""
 "E352: Ðевозможно Ñтереть Ñкладки Ñ Ñ‚екущим Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ Ð¾Ð¿Ñ†Ð¸Ð¸ 'foldmethod'"
 
 msgid "E664: changelist is empty"
-msgstr "E664: ÑпиÑок Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ Ð¿ÑƒÑтой"
+msgstr "E664: Ð¡Ð¿Ð¸Ñок Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ Ð¿ÑƒÑтой"
 
 msgid "E662: At start of changelist"
 msgstr "E662: Ð’ Ð½Ð°Ñ‡Ð°Ð»Ðµ ÑпиÑка Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹"
@@ -3499,6 +4197,9 @@ msgstr "Изменён Ð¾Ñ‚Ñтуп Ð² Ð¾Ð´Ð½Ð¾Ð¹ Ñтроке "
 msgid "%ld lines indented "
 msgstr "Изменены Ð¾Ñ‚Ñтупы Ð² Ñтроках (%ld) "
 
+msgid "E748: No previously used register"
+msgstr "E748: Ðет Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ³Ð¾ Ð¸Ñпользованного Ñ€ÐµÐ³Ð¸Ñтра"
+
 #. must display the prompt
 msgid "cannot yank; delete anyway"
 msgstr "Ñкопировать Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ, ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ðµ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¾"
@@ -3514,10 +4215,17 @@ msgstr "изменено Ñтрок: %ld"
 msgid "freeing %ld lines"
 msgstr "очищено Ñтрок: %ld"
 
+msgid "block of 1 line yanked"
+msgstr "Ñкопирован Ð±Ð»Ð¾Ðº Ð¸Ð· Ð¾Ð´Ð½Ð¾Ð¹ Ñтроки"
+
 msgid "1 line yanked"
 msgstr "Ñкопирована Ð¾Ð´Ð½Ð° Ñтрока"
 
 #, c-format
+msgid "block of %ld lines yanked"
+msgstr "Ñкопирован Ð±Ð»Ð¾Ðº Ð¸Ð· Ñтрок: %ld"
+
+#, c-format
 msgid "%ld lines yanked"
 msgstr "Ñкопировано Ñтрок: %ld"
 
@@ -3536,7 +4244,6 @@ msgstr ""
 msgid "Illegal register name"
 msgstr "ÐедопуÑтимое Ð¸Ð¼Ñ Ñ€ÐµÐ³Ð¸Ñтра"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -3549,10 +4256,6 @@ msgid "E574: Unknown register type %d"
 msgstr "E574: ÐеизвеÑтный Ñ‚ип Ñ€ÐµÐ³Ð¸Ñтра %d"
 
 #, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: ÐедопуÑтимое Ð¸Ð¼Ñ Ñ€ÐµÐ³Ð¸Ñтра: '%s'"
-
-#, c-format
 msgid "%ld Cols; "
 msgstr "Колонок: %ld; "
 
@@ -3561,8 +4264,24 @@ msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
 msgstr "Выделено %s%ld Ð¸Ð· %ld Ñтрок; %ld Ð¸Ð· %ld Ñлов; %ld Ð¸Ð· %ld Ð±Ð°Ð¹Ñ‚"
 
 #, c-format
+msgid ""
+"Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+"Bytes"
+msgstr ""
+"Выделено %s%ld Ð¸Ð· %ld ÑÑ‚Ñ€.; %ld Ð¸Ð· %ld Ñлов; %ld Ð¸Ð· %ld Ñимв.; %ld Ð¸Ð· %ld "
+"байт"
+
+#, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
-msgstr "Кол. %s Ð¸Ð· %s;  ÑÑ‚Ñ€. %ld Ð¸Ð· %ld; Ñлово %ld Ð¸Ð· %ld; Ð±Ð°Ð¹Ñ‚ %ld Ð¸Ð· %ld"
+msgstr "Кол. %s Ð¸Ð· %s; ÑÑ‚Ñ€. %ld Ð¸Ð· %ld; Ñл. %ld Ð¸Ð· %ld; Ð±Ð°Ð¹Ñ‚ %ld Ð¸Ð· %ld"
+
+#, c-format
+msgid ""
+"Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+"%ld"
+msgstr ""
+"Кол. %s Ð¸Ð· %s; ÑÑ‚Ñ€. %ld Ð¸Ð· %ld; Ñл. %ld Ð¸Ð· %ld; Ñимв. %ld Ð¸Ð· %ld; Ð±Ð°Ð¹Ñ‚ %ld "
+"из %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -3583,12 +4302,8 @@ msgstr "E519: ÐžÐ¿Ñ†Ð¸Ñ Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ"
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Ðе Ð´Ð¾Ð¿ÑƒÑкаетÑѠв Ñ€ÐµÐ¶Ð¸Ð¼Ð½Ð¾Ð¹ Ñтроке"
 
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tÐ’ Ð¿Ð¾Ñледний Ñ€Ð°Ð· Ð¾Ð¿Ñ†Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð° Ð² "
+msgid "E846: Key code not set"
+msgstr "E846: ÐšÐ¾Ð´ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Ð½Ðµ ÑƒÑтановлен"
 
 msgid "E521: Number required after ="
 msgstr "E521: ÐŸÐ¾Ñле = Ñ‚ребуетÑѠуказать Ñ‡Ð¸Ñло"
@@ -3610,7 +4325,13 @@ msgid "E531: Use \":gui\" to start the GUI"
 msgstr "E531: Ð”лѠзапуÑка Ð³Ñ€Ð°Ñ„ичеÑкого Ð¸Ð½Ñ‚ерфейÑа Ð¸Ñпользуйте \":gui\""
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð¿Ñ†Ð¸Ð¹ 'backupext' Ð¸ 'patchmode' Ñ€Ð°Ð²Ð½Ñ‹"
+msgstr "E589: Ð—начениѠопций 'backupext' Ð¸ 'patchmode' Ñ€Ð°Ð²Ð½Ñ‹"
+
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: ÐšÐ¾Ð½Ñ„ликтует Ñо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ 'listchars'"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: ÐšÐ¾Ð½Ñ„ликтует Ñо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ 'fillchars'"
 
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: Ðе Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¾ Ð² Ð³Ñ€Ð°Ñ„ичеÑком Ð¸Ð½Ñ‚ерфейÑе GTK+ 2"
@@ -3632,19 +4353,19 @@ msgid "E528: Must specify a ' value"
 msgstr "E528: Ðеобходимо ÑƒÐºÐ°Ð·Ð°Ñ‚ÑŒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð´Ð»Ñ '"
 
 msgid "E595: contains unprintable or wide character"
-msgstr "E595: Ñодержит Ð½ÐµÐ¿ÐµÑ‡Ð°Ñ‚ный Ñимвол Ð¸Ð»Ð¸ Ñимвол Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¹ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹"
+msgstr "E595: Ð¡Ð¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ Ð½ÐµÐ¿ÐµÑ‡Ð°Ñ‚ный Ñимвол Ð¸Ð»Ð¸ Ñимвол Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¹ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹"
 
 msgid "E596: Invalid font(s)"
 msgstr "E596: Ðеправильные ÑˆÑ€Ð¸Ñ„Ñ‚Ñ‹"
 
 msgid "E597: can't select fontset"
-msgstr "E597: Ã½евозможно Ð²Ñ‹Ð±Ñ€Ð°Ñ‚ÑŒ ÑˆÑ€Ð¸Ñ„товой Ð½Ð°Ð±Ð¾Ñ€"
+msgstr "E597: Ã\9dевозможно Ð²Ñ‹Ð±Ñ€Ð°Ñ‚ÑŒ ÑˆÑ€Ð¸Ñ„товой Ð½Ð°Ð±Ð¾Ñ€"
 
 msgid "E598: Invalid fontset"
 msgstr "E598: Ðеправильный ÑˆÑ€Ð¸Ñ„товой Ð½Ð°Ð±Ð¾Ñ€"
 
 msgid "E533: can't select wide font"
-msgstr "E533: Ã½евозможно Ð²Ñ‹Ð±Ñ€Ð°Ñ‚ÑŒ ÑˆÑ€Ð¸Ñ„Ñ‚ Ñ Ñимволами Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¹ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹"
+msgstr "E533: Ã\9dевозможно Ð²Ñ‹Ð±Ñ€Ð°Ñ‚ÑŒ ÑˆÑ€Ð¸Ñ„Ñ‚ Ñ Ñимволами Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¹ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹"
 
 msgid "E534: Invalid wide font"
 msgstr "E534: Ðеправильный ÑˆÑ€Ð¸Ñ„Ñ‚ Ñ Ñимволами Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¹ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹"
@@ -3654,7 +4375,7 @@ msgid "E535: Illegal character after <%c>"
 msgstr "E535: Ðеправильный Ñимвол Ð¿Ð¾Ñле <%c>"
 
 msgid "E536: comma required"
-msgstr "E536: Ñ‚ребуетÑѠзапÑтаÑ"
+msgstr "E536: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑѠзапÑтаÑ"
 
 #, c-format
 msgid "E537: 'commentstring' must be empty or contain %s"
@@ -3669,10 +4390,10 @@ msgid "E540: Unclosed expression sequence"
 msgstr "E540: ÐезакрытаѠпоÑледовательноÑÑ‚ÑŒ Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ"
 
 msgid "E541: too many items"
-msgstr "E541: Ñлишком Ð¼Ð½Ð¾Ð³Ð¾ Ñлементов"
+msgstr "E541: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ñлементов"
 
 msgid "E542: unbalanced groups"
-msgstr "E542: Ã½еÑбаланÑированные Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹"
+msgstr "E542: Ã\9dеÑбаланÑированные Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹"
 
 msgid "E590: A preview window already exists"
 msgstr "E590: ÐžÐºÐ½Ð¾ Ð¿Ñ€ÐµÐ´Ð¿Ñ€Ð¾Ñмотра ÑƒÐ¶Ðµ ÐµÑÑ‚ÑŒ"
@@ -3693,6 +4414,13 @@ msgstr "E594: Ðужно Ñ…отѠбы %d ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº"
 msgid "E355: Unknown option: %s"
 msgstr "E355: ÐеизвеÑтнаѠопциÑ: %s"
 
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑѠуказать Ñ‡Ð¸Ñло: &%s = '%s'"
+
 msgid ""
 "\n"
 "--- Terminal codes ---"
@@ -3763,7 +4491,7 @@ msgstr "mch_get_shellsize: Ð½Ðµ Ð² ÐºÐ¾Ð½Ñоли??\n"
 
 #. if Vim opened a window: Executing a shell may cause crashes
 msgid "E360: Cannot execute shell with -f option"
-msgstr "E360: Ã\9dõòþ÷üþöýþ Ã²Ñ\8bÿþûýøÑ\82Ñ\8c Ã¾Ã±Ã¾Ã»Ã¾Ñ\87úÑ\83 Ã‘\81 Ã°Ñ\80óÑ\83üõýÑ\82ом -f"
+msgstr "E360: Ã\9dõòþ÷üþöýþ Ã²Ñ\8bÿþûýøÑ\82Ñ\8c Ã¾Ã±Ã¾Ã»Ã¾Ñ\87úÑ\83 Ã‘\81 Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80ом -f"
 
 msgid "Cannot execute "
 msgstr "Ðевозможно Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ "
@@ -3780,8 +4508,8 @@ msgstr "Ñлишком Ð¼Ð°Ð»Ð°Ñ Ð²ÐµÐ»Ð¸Ñ‡Ð¸Ð½Ð° ANCHOR_BUF_SIZE."
 msgid "I/O ERROR"
 msgstr "ОШИБКРВВОДÐ/ВЫВОДÐ"
 
-msgid "...(truncated)"
-msgstr "...(обрезано)"
+msgid "Message"
+msgstr "Сообщение"
 
 msgid "'columns' is not 80, cannot execute external commands"
 msgstr "Значение Ð¾Ð¿Ñ†Ð¸Ð¸ 'columns' Ð½Ðµ Ñ€Ð°Ð²Ð½Ð¾ 80, Ð²Ð½ÐµÑˆÐ½Ð¸Ðµ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ Ð½Ðµ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÑÑŽÑ‚ÑÑ"
@@ -3801,9 +4529,6 @@ msgstr "E613: ÐеизвеÑтный ÑˆÑ€Ð¸Ñ„Ñ‚ Ð¿Ñ€Ð¸Ð½Ñ‚ера: %s"
 msgid "E238: Print error: %s"
 msgstr "E238: ÐžÑˆÐ¸Ð±ÐºÐ° Ð¿ÐµÑ‡Ð°Ñ‚и: %s"
 
-msgid "Unknown"
-msgstr "ÐеизвеÑтно"
-
 #, c-format
 msgid "Printing '%s'"
 msgstr "Печать '%s'"
@@ -3816,9 +4541,6 @@ msgstr "E244: ÐедопуÑтимое Ð¸Ð¼Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ¸ \"%s\" Ð² Ð¸Ð¼
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: ÐедопуÑтимый Ñимвол '%c' Ð² Ð¸Ð¼ÐµÐ½Ð¸ ÑˆÑ€Ð¸Ñ„та \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: ÐедопуÑтимое Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ†Ð¸Ð¸ 'osfiletype' -- Ð¸ÑпользуетÑÑ Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Ð”войной Ñигнал, Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ðµ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹\n"
 
@@ -3849,6 +4571,20 @@ msgstr "Открытие Ð´Ð¸ÑплеѠX Ð½Ðµ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¾ Ð² Ð¾Ñ‚вед
 
 msgid ""
 "\n"
+"Could not get security context for "
+msgstr ""
+"\n"
+"Ðевозможно Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ ÐºÐ¾Ð½Ñ‚екÑÑ‚ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑти Ð´Ð»Ñ "
+
+msgid ""
+"\n"
+"Could not set security context for "
+msgstr ""
+"\n"
+"Ðевозможно ÑƒÑтановить ÐºÐ¾Ð½Ñ‚екÑÑ‚ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑти Ð´Ð»Ñ "
+
+msgid ""
+"\n"
 "Cannot execute shell "
 msgstr ""
 "\n"
@@ -3892,6 +4628,10 @@ msgstr ""
 msgid "XSMP lost ICE connection"
 msgstr "XSMP ÑƒÑ‚ерÑно Ñоединение ICE"
 
+#, c-format
+msgid "dlerror = \"%s\""
+msgstr "dlerror = \"%s\""
+
 msgid "Opening the X display failed"
 msgstr "Ðеудачное Ð¾Ñ‚крытие Ð´Ð¸ÑплеѠX"
 
@@ -3911,15 +4651,12 @@ msgstr "XSMP Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð¾ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¾ SmcOpenConnection: %s"
 msgid "At line"
 msgstr "Ð’ Ñтроке"
 
-msgid "Could not allocate memory for command line."
-msgstr "Ã\9dõòþ÷üþöýþ Ã²Ñ\8bôõûøÑ\82Ñ\8c Ã¿Ã°Ã¼Ñ\8fÑ\82Ñ\8c Ã´ÃȄ\8f ÃºÃ¾Ã¼Ã°Ã½Ã´Ã½Ã¾Ã¹ Ã‘\81Ñ\82Ñ\80þúø."
+msgid "Could not load vim32.dll!"
+msgstr "Ã\9dõòþ÷üþöýþ Ã·Ã°Ã³Ñ\80Ñ\83÷øÑ\82Ñ\8c vim32.dll!"
 
 msgid "VIM Error"
 msgstr "Ошибка VIM"
 
-msgid "Could not load vim32.dll!"
-msgstr "Ðевозможно Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ vim32.dll!"
-
 msgid "Could not fix up function pointers to the DLL!"
 msgstr "Ðевозможно Ð¸Ñправить ÑƒÐºÐ°Ð·Ð°Ñ‚ели Ñ„ункций Ð´Ð»Ñ DLL!"
 
@@ -3982,7 +4719,7 @@ msgid "E378: 'errorformat' contains no pattern"
 msgstr "E378: Ð’ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¸ Ð¾Ð¿Ñ†Ð¸Ð¸ 'errorformat' Ð¾Ñ‚ÑутÑтвует ÑˆÐ°Ð±Ð»Ð¾Ð½"
 
 msgid "E379: Missing or empty directory name"
-msgstr "E379: Ã¸мѠкаталога Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð¾ Ð¸Ð»Ð¸ Ñ€Ð°Ð²Ð½Ð¾ Ð¿ÑƒÑтой Ñтроке"
+msgstr "E379: Ã\98мѠкаталога Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð¾ Ð¸Ð»Ð¸ Ñ€Ð°Ð²Ð½Ð¾ Ð¿ÑƒÑтой Ñтроке"
 
 msgid "E553: No more items"
 msgstr "E553: Ð‘ольше Ð½ÐµÑ‚ Ñлементов"
@@ -4008,22 +4745,29 @@ msgid "E382: Cannot write, 'buftype' option is set"
 msgstr ""
 "E382: Ð—апиÑÑŒ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°, Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ†Ð¸Ð¸ 'buftype' Ð½Ðµ ÑвлÑетÑѠпуÑтой Ñтрокой"
 
+msgid "Error file"
+msgstr "Файл Ð¾ÑˆÐ¸Ð±Ð¾Ðº"
+
+msgid "E683: File name missing or invalid pattern"
+msgstr "E683: Ðет Ð¸Ð¼ÐµÐ½Ð¸ Ñ„айла Ð¸Ð»Ð¸ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ ÑˆÐ°Ð±Ð»Ð¾Ð½"
+
 #, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтимый Ñлемент Ð² %s%%[]"
+msgid "Cannot open file \"%s\""
+msgstr "Ðевозможно Ð¾Ñ‚крыть Ñ„айл \"%s\""
 
-msgid "E339: Pattern too long"
-msgstr "E339: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ð¹ ÑˆÐ°Ð±Ð»Ð¾Ð½"
+msgid "E681: Buffer is not loaded"
+msgstr "E681: Ð‘уфер Ð½Ðµ Ð²Ñ‹Ð³Ñ€ÑƒÐ¶ÐµÐ½"
 
-msgid "E50: Too many \\z("
-msgstr "E50: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ \\z("
+msgid "E777: String or List expected"
+msgstr "E777: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ Ñтрока Ð¸Ð»Ð¸ ÑпиÑок"
 
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ %s("
+msgid "E369: invalid item in %s%%[]"
+msgstr "E369: ÐедопуÑтимый Ñлемент Ð² %s%%[]"
 
-msgid "E52: Unmatched \\z("
-msgstr "E52: Ðет Ð¿Ð°Ñ€Ñ‹ Ð´Ð»Ñ \\z("
+#, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° ] Ð¿Ð¾Ñле %s["
 
 #, c-format
 msgid "E53: Unmatched %s%%("
@@ -4037,21 +4781,36 @@ msgstr "E54: Ðет Ð¿Ð°Ñ€Ñ‹ Ð´Ð»Ñ %s("
 msgid "E55: Unmatched %s)"
 msgstr "E55: Ðет Ð¿Ð°Ñ€Ñ‹ Ð´Ð»Ñ %s)"
 
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¸Ñпользовано Ð·Ð´ÐµÑÑŒ"
+
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 Ð¸ Ñ‚.п. Ð½Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¸Ñпользованы Ð·Ð´ÐµÑÑŒ"
+
 #, c-format
-msgid "E56: %s* operand could be empty"
-msgstr "E56: Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿ÑƒÑтой Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´ %s*"
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° ] Ð¿Ð¾Ñле %s%%["
 
 #, c-format
-msgid "E57: %s+ operand could be empty"
-msgstr "E57: Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿ÑƒÑтой Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´ %s+"
+msgid "E70: Empty %s%%[]"
+msgstr "E70: ÐŸÑƒÑтое %s%%[]"
+
+msgid "E339: Pattern too long"
+msgstr "E339: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ð¹ ÑˆÐ°Ð±Ð»Ð¾Ð½"
+
+msgid "E50: Too many \\z("
+msgstr "E50: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ \\z("
 
 #, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтимый Ñимвол Ð¿Ð¾Ñле %s@"
+msgid "E51: Too many %s("
+msgstr "E51: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ %s("
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: Ðет Ð¿Ð°Ñ€Ñ‹ Ð´Ð»Ñ \\z("
 
 #, c-format
-msgid "E58: %s{ operand could be empty"
-msgstr "E58: Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿ÑƒÑтой Ð¾Ð¿ÐµÑ€Ð°Ð½Ð´ %s{"
+msgid "E59: invalid character after %s@"
+msgstr "E59: ÐедопуÑтимый Ñимвол Ð¿Ð¾Ñле %s@"
 
 #, c-format
 msgid "E60: Too many complex %s{...}s"
@@ -4066,7 +4825,7 @@ msgid "E62: Nested %s%c"
 msgstr "E62: Ð’ложенные %s%c"
 
 msgid "E63: invalid use of \\_"
-msgstr "E63: Ã½едопуÑтимое Ð¸Ñпользование \\_"
+msgstr "E63: Ã\9dедопуÑтимое Ð¸Ñпользование \\_"
 
 #, c-format
 msgid "E64: %s%c follows nothing"
@@ -4075,22 +4834,12 @@ msgstr "E64: %s%c Ð½Ð¸ Ð·Ð° Ñ‡ÐµÐ¼ Ð½Ðµ Ñледует"
 msgid "E65: Illegal back reference"
 msgstr "E65: ÐедопуÑтимаѠобратнаѠÑÑылка"
 
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¸Ñпользовано Ð·Ð´ÐµÑÑŒ"
-
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 Ð¸ Ñ‚.п. Ð½Ðµ Ð¼Ð¾Ð³ÑƒÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð¸Ñпользованы Ð·Ð´ÐµÑÑŒ"
-
 msgid "E68: Invalid character after \\z"
 msgstr "E68: ÐедопуÑтимый Ñимвол Ð¿Ð¾Ñле \\z"
 
 #, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð° ] Ð¿Ð¾Ñле %s%%["
-
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: ÐŸÑƒÑтое %s%%[]"
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678: ÐедопуÑтимый Ñимвол Ð¿Ð¾Ñле %s%%[dxouU]"
 
 #, c-format
 msgid "E71: Invalid character after %s%%"
@@ -4100,20 +4849,83 @@ msgstr "E71: ÐедопуÑтимый Ñимвол Ð¿Ð¾Ñле %s%%"
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Ð¡Ð¸Ð½Ñ‚акÑичеÑкаѠошибка Ð² %s{...}"
 
-msgid "E361: Crash intercepted; regexp too complex?"
+msgid "External submatches:\n"
+msgstr "Внешние Ð¿Ð¾Ð´ÑоответÑтвиÑ:\n"
+
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
 msgstr ""
-"E361: ÐŸÑ€ÐµÐ´Ð¾Ñ‚вращено Ð°Ð²Ð°Ñ€Ð¸Ð¹Ð½Ð¾Ðµ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ðµ: Ñлишком Ñложное Ñ€ÐµÐ³ÑƒÐ»Ñрное "
-"òÑ\8bÑ\80ðöõýøõ?"
+"E864: Ð¿Ð¾Ñле \\%#= Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ñ‚олько 0, 1 Ð¸Ð»Ð¸ 2. Ð‘удет Ð¸ÑпользоватьÑÑ "
+"ðòÑ\82þüðÑ\82øÑ\87õÑ\81úðÑ\8f Ã¼Ã°Ñ\88øýð"
 
-msgid "E363: pattern caused out-of-stack error"
-msgstr "E363: Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° Ð¿Ñ€Ð¸Ð²ÐµÐ»Ð¾ Ðº Ð¾ÑˆÐ¸Ð±ÐºÐµ Ð²Ñ‹Ñ…ода Ð·Ð° Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‹ Ñтека"
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (рег. Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ ÐКÐ) Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ %c"
 
-msgid "External submatches:\n"
-msgstr "Внешние Ð¿Ð¾Ð´ÑоответÑтвиÑ:\n"
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (ÐКÐ) Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ð¹ ÐºÐ¾Ð½ÐµÑ† Ñ€ÐµÐ³ÑƒÐ»Ñрного Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ"
 
 #, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld Ñтрок Ð² Ñкладке"
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (ÐКÐ) Ð½ÐµÐ¸Ð·Ð²ÐµÑтный Ð¾Ð¿ÐµÑ€Ð°Ñ‚ор '\\z%c'"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\%%%c'"
+msgstr "E867: (ÐКÐ) Ð½ÐµÐ¸Ð·Ð²ÐµÑтный Ð¾Ð¿ÐµÑ€Ð°Ñ‚ор '\\%%%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñоздании ÐКРѠклаÑÑом ÑквивалентноÑти!"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (ÐКÐ) Ð½ÐµÐ¸Ð·Ð²ÐµÑтный Ð¾Ð¿ÐµÑ€Ð°Ñ‚ор '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (рег. Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ ÐКÐ) Ð¾ÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ‡Ñ‚ении Ð³Ñ€Ð°Ð½Ð¸Ñ† Ð¿Ð¾Ð²Ñ‚орениÑ"
+
+#. Can't have a multi follow a multi.
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (рег. Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ ÐКÐ) Ð¼Ð½Ð¾Ð¶ÐµÑтво Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ‚ Ñледовать Ð·Ð° Ð¼Ð½Ð¾Ð¶ÐµÑтвом!"
+
+#. Too many `('
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (рег. Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ ÐКÐ) Ñлишком Ð¼Ð½Ð¾Ð³Ð¾ '('"
+
+msgid "E879: (NFA regexp) Too many \\z("
+msgstr "E879: (рег. Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ ÐКÐ) Ñлишком Ð¼Ð½Ð¾Ð³Ð¾ \\z("
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (рег. Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ ÐКÐ) Ð¾ÑˆÐ¸Ð±ÐºÐ° ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚ного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (рег. Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ ÐКÐ) Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ð·ÑÑ‚ÑŒ Ð¸Ð· Ñтека!"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr ""
+"E875: (рег. Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ ÐКÐ) Ð² Ñтеке Ð¾ÑталоÑÑŒ Ñлишком Ð¼Ð½Ð¾Ð³Ð¾ ÑоÑтоÑний (при "
+"преобразовании Ð¸Ð· postfix Ð² ÐКÐ)"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (рег. Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ ÐКÐ) Ð½ÐµÐ´Ð¾Ñтаточно Ð¼ÐµÑта Ð´Ð»Ñ Ñ…ранениѠвÑего ÐКÐ"
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (ÐКÐ) Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð²Ñ‹Ð´ÐµÐ»Ð¸Ñ‚ÑŒ Ð¿Ð°Ð¼ÑÑ‚ÑŒ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ…ода Ð²ÐµÑ‚ви!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr ""
+"Ðевозможно Ð¾Ñ‚крыть Ñ„айл Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¶ÑƒÑ€Ð½Ð°Ð»Ð° Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи, Ð²Ñ‹Ð²Ð¾Ð´ Ð½Ð° stderr..."
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(ÐКÐ) Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ‚крыть %s!"
+
+msgid "Could not open temporary log file for writing "
+msgstr "Ðевозможно Ð¾Ñ‚крыть Ñ„айл Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¶ÑƒÑ€Ð½Ð°Ð»Ð° Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи"
 
 msgid " VREPLACE"
 msgstr " Ð’ИРТУÐЛЬÐÐЯ Ð—ÐМЕÐÐ"
@@ -4169,23 +4981,17 @@ msgstr " Ð’ЫДЕЛЕÐИЕ Ð‘ЛОКÐ"
 msgid "recording"
 msgstr "запиÑÑŒ"
 
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "поиÑк Ð±ÑƒÐ´ÐµÑ‚ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½ Ñ ÐšÐžÐЦРдокумента"
-
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "поиÑк Ð±ÑƒÐ´ÐµÑ‚ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½ Ñ ÐÐЧÐЛРдокумента"
-
 #, c-format
 msgid "E383: Invalid search string: %s"
 msgstr "E383: ÐеправильнаѠÑтрока Ð¿Ð¾Ð¸Ñка: %s"
 
 #, c-format
 msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: Ã¿оиÑк Ð·Ð°ÐºÐ¾Ð½Ñ‡ÐµÐ½ Ð² ÐÐЧÐЛЕ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚а; %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾"
+msgstr "E384: Ã\9fоиÑк Ð·Ð°ÐºÐ¾Ð½Ñ‡ÐµÐ½ Ð² ÐÐЧÐЛЕ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚а; %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾"
 
 #, c-format
 msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: Ã¿оиÑк Ð·Ð°ÐºÐ¾Ð½Ñ‡ÐµÐ½ Ð² ÐšÐžÐЦЕ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚а; %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾"
+msgstr "E385: Ã\9fоиÑк Ð·Ð°ÐºÐ¾Ð½Ñ‡ÐµÐ½ Ð² ÐšÐžÐЦЕ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚а; %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾"
 
 msgid "E386: Expected '?' or '/'  after ';'"
 msgstr "E386: ÐŸÐ¾Ñле ';' Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚ÑѠввод '?' Ð¸Ð»Ð¸ '/'"
@@ -4200,45 +5006,438 @@ msgstr "--- Ð’ключённые Ñ„айлы "
 msgid "not found "
 msgstr "не Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ "
 
-msgid "in path ---\n"
-msgstr "по Ð¿ÑƒÑ‚и ---\n"
+msgid "in path ---\n"
+msgstr "по Ð¿ÑƒÑ‚и ---\n"
+
+msgid "  (Already listed)"
+msgstr " (Уже Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾)"
+
+msgid "  NOT FOUND"
+msgstr " ÐЕ ÐÐЙДЕÐО"
+
+#, c-format
+msgid "Scanning included file: %s"
+msgstr "ПроÑмотр Ð²ÐºÐ»ÑŽÑ‡Ñ‘нных Ñ„айлов: %s"
+
+#, c-format
+msgid "Searching included file %s"
+msgstr "ПоиÑк Ð²ÐºÐ»ÑŽÑ‡Ñ‘нного Ñ„айла %s"
+
+msgid "E387: Match is on current line"
+msgstr "E387: Ð¡Ð¾Ð¾Ñ‚ветÑтвие Ð² Ñ‚екущей Ñтроке"
+
+msgid "All included files were found"
+msgstr "Ðайдены Ð²Ñе Ð²ÐºÐ»ÑŽÑ‡Ñ‘нные Ñ„айлы"
+
+msgid "No included files"
+msgstr "Включённых Ñ„айлов Ð½ÐµÑ‚"
+
+msgid "E388: Couldn't find definition"
+msgstr "E388: ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾"
+
+msgid "E389: Couldn't find pattern"
+msgstr "E389: Ð¨Ð°Ð±Ð»Ð¾Ð½ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
+
+msgid "Substitute "
+msgstr "Замена "
+
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# ÐŸÐ¾Ñледний %sШаблон Ð¿Ð¾Ð¸Ñка:\n"
+"~"
+
+msgid "E759: Format error in spell file"
+msgstr "E759: ÐžÑˆÐ¸Ð±ÐºÐ° Ñ„ормата Ð² Ñ„айле Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниÑ"
+
+msgid "E758: Truncated spell file"
+msgstr "E758: Ð¤Ð°Ð¹Ð» Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниѠобрезан"
+
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "Лишний Ñ‚екÑÑ‚ Ð½Ð° Ñ…воÑте Ð² %s ÑÑ‚Ñ€. %d: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "ИмѠаффикÑа Ñлишком Ð´Ð»Ð¸Ð½Ð½Ð¾Ðµ Ð² %s, Ñтрока %d: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr "E761: ÐžÑˆÐ¸Ð±ÐºÐ° Ñ„ормата Ð² Ñ„айле Ð°Ñ„фикÑов FOL, LOW Ð¸Ð»Ð¸ UPP"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762: Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð² FOL, LOW Ð¸Ð»Ð¸ UPP Ð·Ð° Ð¿Ñ€ÐµÐ´ÐµÐ»Ð°Ð¼Ð¸ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
+
+msgid "Compressing word tree..."
+msgstr "Сжатие Ð´ÐµÑ€ÐµÐ²Ð° Ñлов..."
+
+msgid "E756: Spell checking is not enabled"
+msgstr "E756: ÐŸÑ€Ð¾Ð²ÐµÑ€ÐºÐ° Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниѠвыключена"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"Предупреждение: Ðевозможно Ð½Ð°Ð¹Ñ‚и ÑпиÑок Ñлов \"%s_%s.spl\" Ð¸Ð»Ð¸ \"%s_ascii.spl"
+"\""
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr ""
+"Предупреждение: Ðевозможно Ð½Ð°Ð¹Ñ‚и ÑпиÑок Ñлов \"%s.%s.spl\" Ð¸Ð»Ð¸ \"%s.ascii.spl"
+"\""
+
+#, c-format
+msgid "Reading spell file \"%s\""
+msgstr "Чтение Ñ„айла Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниѠ\"%s\""
+
+msgid "E757: This does not look like a spell file"
+msgstr "E757: Ð­Ñ‚о Ð½Ðµ Ð¿Ð¾Ñ…оже Ð½Ð° Ñ„айл Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниÑ"
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771: Ð¡Ñ‚арый Ñ„айл Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниÑ, Ñ‚ребуетÑѠего Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ðµ"
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772: Ð¤Ð°Ð¹Ð» Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниѠпредназначен Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ Ð½Ð¾Ð²Ð¾Ð¹ Ð²ÐµÑ€Ñии Vim"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770: Ðеподдерживаемый Ñ€Ð°Ð·Ð´ÐµÐ» Ð² Ñ„айле Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниÑ"
+
+#, c-format
+msgid "Warning: region %s not supported"
+msgstr "Предупреждение: Ñ€ÐµÐ³Ð¸Ð¾Ð½ %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ"
+
+#, c-format
+msgid "Reading affix file %s ..."
+msgstr "Чтение Ñ„айла Ð°Ñ„фикÑов %s ..."
+
+#, c-format
+msgid "Conversion failure for word in %s line %d: %s"
+msgstr "Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ñлово Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Conversion in %s not supported: from %s to %s"
+msgstr "Преобразование Ð² %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ: Ð¸Ð· %s Ð² %s"
+
+#, c-format
+msgid "Conversion in %s not supported"
+msgstr "Преобразование Ð² %s Ð½Ðµ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑÑ"
+
+#, c-format
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "Ðеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ FLAG Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "FLAG Ð¿Ð¾Ñле Ð¸ÑпользованиѠфлагов Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Определение COMPOUNDFORBIDFLAG Ð¿Ð¾Ñле Ñлемента PFX Ð¼Ð¾Ð¶ÐµÑ‚ Ð´Ð°Ñ‚ÑŒ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ðµ "
+"результаты Ð² %s, Ñтрока %d"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Определение COMPOUNDPERMITFLAG Ð¿Ð¾Ñле Ñлемента PFX Ð¼Ð¾Ð¶ÐµÑ‚ Ð´Ð°Ñ‚ÑŒ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ðµ "
+"результаты Ð² %s, Ñтрока %d"
+
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "Ðеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ COMPOUNDRULES Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+msgstr "Ðеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ COMPOUNDWORDMAX Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "Ðеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ COMPOUNDMIN Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "Ðеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ COMPOUNDSYLMAX Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+msgstr "Ðеправильное Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ CHECKCOMPOUNDPATTERN Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Different combining flag in continued affix block in %s line %d: %s"
+msgstr ""
+"Другой Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ñющий Ñ„лаг Ð² Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶Ð°ÑŽÑ‰ÐµÐ¼ Ð±Ð»Ð¾ÐºÐµ Ð°Ñ„фикÑа Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr "ПовторÑющийÑѠаффикѠв %s, Ñтрока %d: %s"
+
+#, c-format
+msgid ""
+"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
+"line %d: %s"
+msgstr ""
+"ÐффикѠтакже Ð¸ÑпользуетÑѠдлѠBAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
+"NOSUGGEST Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr "ОжидалоÑÑŒ Y Ð¸Ð»Ð¸ N Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr "Ðарушенное ÑƒÑловие Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Expected REP(SAL) count in %s line %d"
+msgstr "ОжидалÑÑ Ñчётчик REP(SAL) Ð² %s, Ñтрока %d"
+
+#, c-format
+msgid "Expected MAP count in %s line %d"
+msgstr "ОжидалÑÑ Ñчётчик MAP Ð² %s, Ñтрока %d"
+
+#, c-format
+msgid "Duplicate character in MAP in %s line %d"
+msgstr "ПовторÑющийÑÑ Ñимвол Ð² MAP Ð² %s, Ñтрока %d"
+
+#, c-format
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "ÐераÑпознанный Ð¸Ð»Ð¸ Ð¿Ð¾Ð²Ñ‚орÑющийÑÑ Ñлемент Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "Пропущена Ñтрока FOL/LOW/UPP Ð² %s"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "COMPOUNDSYLMAX Ð¸ÑпользуетÑѠбез SYLLABLE"
+
+msgid "Too many postponed prefixes"
+msgstr "Слишком Ð¼Ð½Ð¾Ð³Ð¾ Ð¾Ñ‚ложенных Ð¿Ñ€ÐµÑ„икÑов"
+
+msgid "Too many compound flags"
+msgstr "Слишком Ð¼Ð½Ð¾Ð³Ð¾ ÑоÑтавных Ñ„лагов"
+
+msgid "Too many postponed prefixes and/or compound flags"
+msgstr "Слишком Ð¼Ð½Ð¾Ð³Ð¾ Ð¾Ñ‚ложенных Ð¿Ñ€ÐµÑ„икÑов Ð¸/или ÑоÑтавных Ñ„лагов"
+
+#, c-format
+msgid "Missing SOFO%s line in %s"
+msgstr "Пропущена Ñтрока SOFO%s Ð² %s"
+
+#, c-format
+msgid "Both SAL and SOFO lines in %s"
+msgstr "Обе Ñтроки SAL Ð¸ SOFO Ð² %s"
+
+#, c-format
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "Флаг Ð½Ðµ ÑвлÑетÑѠчиÑлом Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "ÐедопуÑтимый Ñ„лаг Ð² %s Ð½Ð° Ñтроке %d: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr "%s Ð¸Ð¼ÐµÐµÑ‚ Ð´Ñ€ÑƒÐ³Ð¾Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ, Ñ‡ÐµÐ¼ Ð² Ñ„айле .aff"
+
+#, c-format
+msgid "Reading dictionary file %s ..."
+msgstr "Чтение Ñ„айла ÑловарѠ%s ..."
+
+#, c-format
+msgid "E760: No word count in %s"
+msgstr "E760: ÐšÐ¾Ð»Ð¸Ñ‡ÐµÑтво Ñлов Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½Ð¾ Ð² %s"
+
+#, c-format
+msgid "line %6d, word %6d - %s"
+msgstr "Ñтрока %6d, Ñлово %6d â€” %s"
+
+#, c-format
+msgid "Duplicate word in %s line %d: %s"
+msgstr "Повтор Ñлова Ð² %s Ð½Ð° Ñтроке %d: %s "
+
+#, c-format
+msgid "First duplicate word in %s line %d: %s"
+msgstr "Первый Ð¿Ð¾Ð²Ñ‚ор Ñлова Ð² %s Ð½Ð° Ñтроке %d: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d Ð¿Ð¾Ð²Ñ‚орÑющихÑÑ Ñлов Ð² %s"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr "Пропущено %d Ñлов Ñ Ð½Ðµ ASCII Ñимволами Ð² %s"
+
+#, c-format
+msgid "Reading word file %s ..."
+msgstr "Чтение Ñ„айла Ñлов %s ..."
+
+#, c-format
+msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+msgstr "Проигнорирована Ð¿Ð¾Ð²Ñ‚орÑющаÑÑÑ Ñтрока /encoding= Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "/encoding= line after word ignored in %s line %d: %s"
+msgstr "Проигнорирована Ñтрока /encoding= Ð¿Ð¾Ñле Ñлова Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Duplicate /regions= line ignored in %s line %d: %s"
+msgstr "ПропуÑкаетÑѠповтор Ñтроки /regions= Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Too many regions in %s line %d: %s"
+msgstr "Слишком Ð¼Ð½Ð¾Ð³Ð¾ Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð¾Ð² Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "/ line ignored in %s line %d: %s"
+msgstr "/ Ñтрока Ð¿Ñ€Ð¾Ð¿ÑƒÑкаетÑѠв %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Invalid region nr in %s line %d: %s"
+msgstr "ÐедопуÑтимый Ð½Ð¾Ð¼ÐµÑ€ Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð° Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Unrecognized flags in %s line %d: %s"
+msgstr "ÐераÑпознанные Ñ„лаги Ð² %s, Ñтрока %d: %s"
+
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr "Пропущено %d Ñлов Ñ Ð½Ðµ ASCII Ñимволами"
+
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: ÐедоÑтаточно Ð¾Ð¿ÐµÑ€Ð°Ñ‚ивной Ð¿Ð°Ð¼Ñти, ÑпиÑок Ñлов Ð±ÑƒÐ´ÐµÑ‚ Ð½Ðµ Ð¿Ð¾Ð»Ð¾Ð½"
+
+#, c-format
+msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+msgstr "Сжато %d Ð¸Ð· %d ÑƒÐ·Ð»Ð¾Ð²; Ð¾ÑталоÑÑŒ %d (%d%%)"
+
+msgid "Reading back spell file..."
+msgstr "Чтение Ð·Ð°Ð¿Ð¸Ñанного Ñ„айла Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниÑ..."
+
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+msgid "Performing soundfolding..."
+msgstr "Выполнение Ð·Ð²ÑƒÐºÐ¾Ð²Ð¾Ð¹ Ñвёртки..."
+
+#, c-format
+msgid "Number of words after soundfolding: %ld"
+msgstr "КоличеÑтво Ñлов Ð¿Ð¾Ñле Ð·Ð²ÑƒÐºÐ¾Ð²Ð¾Ð¹ Ñвёртки: %ld"
+
+#, c-format
+msgid "Total number of words: %d"
+msgstr "Общее ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтво Ñлов: %d"
+
+#, c-format
+msgid "Writing suggestion file %s ..."
+msgstr "ЗапиÑÑŒ Ñ„айла Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ñправлений Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниѠ%s"
+
+#, c-format
+msgid "Estimated runtime memory use: %d bytes"
+msgstr "Оценка Ð¸ÑпользованиѠпамÑти Ð¿Ñ€Ð¸ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ð¸: %d Ð±Ð°Ð¹Ñ‚"
+
+msgid "E751: Output file name must not have region name"
+msgstr "E751: Ð˜Ð¼Ñ Ð²Ñ‹Ñ…одного Ñ„айла Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ñодержать Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð°"
+
+msgid "E754: Only up to 8 regions supported"
+msgstr "E754: ÐŸÐ¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÑ‚ÑѠне Ð±Ð¾Ð»ÐµÐµ 8-ми Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð¾Ð²"
+
+#, c-format
+msgid "E755: Invalid region in %s"
+msgstr "E755: ÐедопуÑтимый Ñ€ÐµÐ³Ð¸Ð¾Ð½ Ð² %s"
+
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr "Предупреждение: Ð¾Ð±Ð° ÑоÑтавные Ð¸ ÑƒÐºÐ°Ð·Ð°Ð½Ð¾ NOBREAK"
+
+#, c-format
+msgid "Writing spell file %s ..."
+msgstr "ЗапиÑÑŒ Ñ„айла Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниѠ%s ..."
+
+msgid "Done!"
+msgstr "Завершено!"
+
+#, c-format
+msgid "E765: 'spellfile' does not have %ld entries"
+msgstr "E765: 'spellfile' Ð½Ðµ Ñодержит %ld Ñлементов"
+
+#, c-format
+msgid "Word removed from %s"
+msgstr "Слово ÑƒÐ´Ð°Ð»ÐµÐ½Ð¾ Ð¸Ð· %s"
+
+#, c-format
+msgid "Word added to %s"
+msgstr "Слово Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ Ð² %s"
+
+msgid "E763: Word characters differ between spell files"
+msgstr "E763: Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ‹ Ñлов Ð¾Ñ‚личаютÑѠв Ñ„айлах Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниÑ"
+
+msgid "Sorry, no suggestions"
+msgstr "Извините, Ð½ÐµÑ‚ Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹"
+
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr "Извините, Ñ‚олько %ld Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹"
+
+#. for when 'cmdheight' > 1
+#. avoid more prompt
+#, c-format
+msgid "Change \"%.*s\" to:"
+msgstr "Заменить \"%.*s\" Ð½Ð°:"
+
+#, c-format
+msgid " < \"%.*s\""
+msgstr " < \"%.*s\""
+
+msgid "E752: No previous spell replacement"
+msgstr "E752: Ðет Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ Ð·Ð°Ð¼ÐµÐ½Ñ‹ Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸ÑаниÑ"
 
-msgid "  (Already listed)"
-msgstr " (Уже Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð¾)"
+#, c-format
+msgid "E753: Not found: %s"
+msgstr "E753: Ðе Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾: %s"
 
-msgid "  NOT FOUND"
-msgstr " ÐЕ ÐÐЙДЕÐО"
+#, c-format
+msgid "E778: This does not look like a .sug file: %s"
+msgstr "E778: Ð­Ñ‚о Ð½Ðµ Ð¿Ð¾Ñ…оже Ð½Ð° Ñ„айл .sug: %s"
 
 #, c-format
-msgid "Scanning included file: %s"
-msgstr "ПроÑмотр Ð²ÐºÐ»ÑŽÑ‡Ñ‘нных Ñ„айлов: %s"
+msgid "E779: Old .sug file, needs to be updated: %s"
+msgstr "E779: Ð¡Ñ‚арый Ñ„айл .sug, Ñ‚ребует Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ: %s"
 
-msgid "E387: Match is on current line"
-msgstr "E387: Ð¡Ð¾Ð¾Ñ‚ветÑтвие Ð² Ñ‚екущей Ñтроке"
+#, c-format
+msgid "E780: .sug file is for newer version of Vim: %s"
+msgstr "E780: Ð¤Ð°Ð¹Ð» .sug Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ Ð½Ð¾Ð²Ð¾Ð¹ Ð²ÐµÑ€Ñии Vim: %s"
 
-msgid "All included files were found"
-msgstr "Ðайдены Ð²Ñе Ð²ÐºÐ»ÑŽÑ‡Ñ‘нные Ñ„айлы"
+#, c-format
+msgid "E781: .sug file doesn't match .spl file: %s"
+msgstr "E781: Ð¤Ð°Ð¹Ð» .sug Ð½Ðµ ÑоответÑтвует Ñ„айлу .spl: %s"
 
-msgid "No included files"
-msgstr "Включённых Ñ„айлов Ð½ÐµÑ‚"
+#, c-format
+msgid "E782: error while reading .sug file: %s"
+msgstr "E782: ÐžÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ‡Ñ‚ении Ñ„айла .sug: %s"
 
-msgid "E388: Couldn't find definition"
-msgstr "E388: ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾"
+#. This should have been checked when generating the .spl
+#. * file.
+msgid "E783: duplicate char in MAP entry"
+msgstr "E783: ÐŸÐ¾Ð²Ñ‚орÑющийÑÑ Ñимвол Ð² Ñлементе MAP"
 
-msgid "E389: Couldn't find pattern"
-msgstr "E389: Ð¨Ð°Ð±Ð»Ð¾Ð½ Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
+msgid "No Syntax items defined for this buffer"
+msgstr "СинтакÑичеÑкие Ñлементы Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð±ÑƒÑ„ера Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ñ‹"
 
 #, c-format
 msgid "E390: Illegal argument: %s"
-msgstr "E390: Ã\9dõôþÿÑ\83Ñ\81Ñ\82øüÑ\8bù Ã°Ñ\80óÑ\83üõýÑ\82: %s"
+msgstr "E390: Ã\9dõôþÿÑ\83Ñ\81Ñ\82øüÑ\8bù Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80: %s"
 
 #, c-format
 msgid "E391: No such syntax cluster: %s"
 msgstr "E391: Ð¡Ð¸Ð½Ñ‚акÑичеÑкий ÐºÐ»Ð°Ñтер %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
 
-msgid "No Syntax items defined for this buffer"
-msgstr "СинтакÑичеÑкие Ñлементы Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð±ÑƒÑ„ера Ð½Ðµ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ñ‹"
-
 msgid "syncing on C-style comments"
 msgstr "СинхронизациѠпо ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚ариÑм Ð² Ñтиле Ñзыка C"
 
@@ -4288,29 +5487,39 @@ msgstr "; ÑоответÑтвие "
 msgid " line breaks"
 msgstr " Ð¿ÐµÑ€ÐµÐ½Ð¾Ñов Ñтрок"
 
+msgid "E395: contains argument not accepted here"
+msgstr "E395: Ð—деÑÑŒ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ contains"
+
+msgid "E844: invalid cchar value"
+msgstr "E844: ÐедопуÑтимое Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ cchar"
+
 msgid "E393: group[t]here not accepted here"
-msgstr "E393: Ã·деÑÑŒ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать group[t]here"
+msgstr "E393: Ã\97деÑÑŒ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать group[t]here"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
 msgstr "E394: Ð­Ð»ÐµÐ¼ÐµÐ½Ñ‚ Ð¾Ð±Ð»Ð°Ñти Ð´Ð»Ñ %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½"
 
-msgid "E395: contains argument not accepted here"
-msgstr "E395: Ð·Ð´ÐµÑÑŒ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ contains"
-
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: Ð·Ð´ÐµÑÑŒ Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ containedin"
-
 msgid "E397: Filename required"
 msgstr "E397: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑѠуказать Ð¸Ð¼Ñ Ñ„айла"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ ÑинтакÑичеÑких Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¹"
+
+#, c-format
+msgid "E789: Missing ']': %s"
+msgstr "E789: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ ']': %s"
+
 #, c-format
 msgid "E398: Missing '=': %s"
 msgstr "E398: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ '=': %s"
 
 #, c-format
 msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: Ðе Ñ…ватает Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ов: ÑинтакÑичеÑкий Ñ€ÐµÐ³Ð¸Ð¾Ð½ %s"
+msgstr "E399: Ðе Ñ…ватает Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров: ÑинтакÑичеÑкий Ñ€ÐµÐ³Ð¸Ð¾Ð½ %s"
+
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ ÑинтакÑичеÑких ÐºÐ»Ð°Ñтеров"
 
 msgid "E400: No cluster specified"
 msgstr "E400: ÐšÐ»Ð°Ñтер Ð½Ðµ ÑƒÐºÐ°Ð·Ð°Ð½"
@@ -4325,11 +5534,11 @@ msgstr "E402: ÐœÑƒÑор Ð¿Ð¾Ñле ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°: %s"
 
 msgid "E403: syntax sync: line continuations pattern specified twice"
 msgstr ""
-"E403: ÑинхронизациѠÑинтакÑиÑа: ÑˆÐ°Ð±Ð»Ð¾Ð½ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ð¹ Ñтроки ÑƒÐºÐ°Ð·Ð°Ð½ Ð´Ð²Ð°Ð¶Ð´Ñ‹"
+"E403: Ð¡Ð¸Ð½Ñ…ронизациѠÑинтакÑиÑа: ÑˆÐ°Ð±Ð»Ð¾Ð½ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ð¹ Ñтроки ÑƒÐºÐ°Ð·Ð°Ð½ Ð´Ð²Ð°Ð¶Ð´Ñ‹"
 
 #, c-format
 msgid "E404: Illegal arguments: %s"
-msgstr "E404: Ã\9dõôþÿÑ\83Ñ\81Ñ\82øüÑ\8bõ Ã°Ñ\80óÑ\83üõýÑ\82Ñ‹: %s"
+msgstr "E404: Ã\9dõôþÿÑ\83Ñ\81Ñ\82øüÑ\8bõ Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80Ñ‹: %s"
 
 #, c-format
 msgid "E405: Missing equal sign: %s"
@@ -4337,7 +5546,7 @@ msgstr "E405: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½ Ð·Ð½Ð°Ðº Ñ€Ð°Ð²ÐµÐ½Ñтва: %s"
 
 #, c-format
 msgid "E406: Empty argument: %s"
-msgstr "E406: Ã\9fÑ\83Ñ\81Ñ\82þù Ã°Ñ\80óÑ\83üõýÑ\82: %s"
+msgstr "E406: Ã\9fÑ\83Ñ\81Ñ\82þù Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80: %s"
 
 #, c-format
 msgid "E407: %s not allowed here"
@@ -4355,32 +5564,40 @@ msgstr "E409: ÐеизвеÑтнаѠгруппа: %s"
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410: ÐеправильнаѠподкоманда :syntax: %s"
 
+msgid ""
+"  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"
+msgstr ""
+"  Ð’СЕГО       ÐšÐžÐ›.  Ð¡ÐžÐžÐ¢Ð’. ÐžÐ¢Ð¡Ð¢ÐЮЩИЙ    Ð¡Ð Ð•Ð”ÐИЙ    Ð˜ÐœÐ¯                Ð¨ÐБЛОÐ"
+
+msgid "E679: recursive loop loading syncolor.vim"
+msgstr "E679: Ð ÐµÐºÑƒÑ€ÑивнаѠпетлѠпри Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐµ syncolor.vim"
+
 #, c-format
 msgid "E411: highlight group not found: %s"
-msgstr "E411: Ã³руппа Ð¿Ð¾Ð´Ñветки ÑинтакÑиÑа %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð°"
+msgstr "E411: Ã\93руппа Ð¿Ð¾Ð´Ñветки ÑинтакÑиÑа %s Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð°"
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Ã\9dõ Ã‘\85òðÑ\82ðõÑ\82 Ã°Ñ\80óÑ\83üõýÑ\82ов: \":highlight link %s\""
+msgstr "E412: Ã\9dõ Ã‘\85òðÑ\82ðõÑ\82 Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80ов: \":highlight link %s\""
 
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Ã¡Ã»Ã¸Ñ\88úþü Ã¼Ã½Ã¾Ã³Ã¾ Ã°Ñ\80óÑ\83üõýÑ\82ов: \":highlight link %s\""
+msgstr "E413: Ã¡Ã»Ã¸Ñ\88úþü Ã¼Ã½Ã¾Ã³Ã¾ Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80ов: \":highlight link %s\""
 
 msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: Ñƒ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ ÐµÑÑ‚ÑŒ ÑобÑтвенные Ð½Ð°Ñтройки, ÑÑылка Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÐµÑ‚ÑÑ"
+msgstr "E414: Ð£ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ ÐµÑÑ‚ÑŒ Ð½Ð°Ñтройки, Ð¿Ñ€Ð¾Ð¿ÑƒÑкаетÑÑ highlight link"
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
-msgstr "E415: Ã½еожиданный Ð·Ð½Ð°Ðº Ñ€Ð°Ð²ÐµÐ½Ñтва: %s"
+msgstr "E415: Ã\9dеожиданный Ð·Ð½Ð°Ðº Ñ€Ð°Ð²ÐµÐ½Ñтва: %s"
 
 #, c-format
 msgid "E416: missing equal sign: %s"
-msgstr "E416: Ã¿ропущен Ð·Ð½Ð°Ðº Ñ€Ð°Ð²ÐµÐ½Ñтва: %s"
+msgstr "E416: Ã\9fропущен Ð·Ð½Ð°Ðº Ñ€Ð°Ð²ÐµÐ½Ñтва: %s"
 
 #, c-format
 msgid "E417: missing argument: %s"
-msgstr "E417: Ã¿Ñ\80þÿÑ\83Ñ\89õý Ã°Ñ\80óÑ\83üõýÑ\82: %s"
+msgstr "E417: Ã\9fÑ\80þÿÑ\83Ñ\89õý Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80: %s"
 
 #, c-format
 msgid "E418: Illegal value: %s"
@@ -4398,11 +5615,11 @@ msgstr "E421: Ð˜Ð¼Ñ Ð¸Ð»Ð¸ Ð½Ð¾Ð¼ÐµÑ€ Ñ†Ð²ÐµÑ‚а Ð½Ðµ Ð¸Ð·Ð²ÐµÑтно: %s"
 
 #, c-format
 msgid "E422: terminal code too long: %s"
-msgstr "E422: Ñлишком Ð´Ð»Ð¸Ð½Ð½Ñ‹Ð¹ ÐºÐ¾Ð´ Ñ‚ерминала: %s"
+msgstr "E422: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ð¹ ÐºÐ¾Ð´ Ñ‚ерминала: %s"
 
 #, c-format
 msgid "E423: Illegal argument: %s"
-msgstr "E423: Ã\9dõôþÿÑ\83Ñ\81Ñ\82øüÑ\8bù Ã°Ñ\80óÑ\83üõýÑ\82: %s"
+msgstr "E423: Ã\9dõôþÿÑ\83Ñ\81Ñ\82øüÑ\8bù Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80: %s"
 
 msgid "E424: Too many different highlighting attributes in use"
 msgstr "E424: Ð˜ÑпользуетÑÑ Ñлишком Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð°Ñ‚рибутов Ð¿Ð¾Ð´Ñветки ÑинтакÑиÑа"
@@ -4410,16 +5627,17 @@ msgstr "E424: Ð˜ÑпользуетÑÑ Ñлишком Ð¼Ð½Ð¾Ð³Ð¾ Ñ€Ð°Ð·Ð½Ñ‹Ñ… Ð°
 msgid "E669: Unprintable character in group name"
 msgstr "E669: Ðепечатный Ñимвол Ð² Ð¸Ð¼ÐµÐ½Ð¸ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹"
 
-#. This is an error, but since there previously was no check only
-#. * give a warning.
 msgid "W18: Invalid character in group name"
 msgstr "W18: ÐедопуÑтимый Ñимвол Ð² Ð¸Ð¼ÐµÐ½Ð¸ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Ð¡Ð»Ð¸ÑˆÐºÐ¾Ð¼ Ð¼Ð½Ð¾Ð³Ð¾ Ð³Ñ€ÑƒÐ¿Ð¿ Ð¿Ð¾Ð´Ñветки Ð¸ ÑинтакÑиÑа"
+
 msgid "E555: at bottom of tag stack"
-msgstr "E555: Ã²низу Ñтека Ð¼ÐµÑ‚ок"
+msgstr "E555: Ã\92низу Ñтека Ð¼ÐµÑ‚ок"
 
 msgid "E556: at top of tag stack"
-msgstr "E556: Ã½аверху Ñтека Ð¼ÐµÑ‚ок"
+msgstr "E556: Ã\9dаверху Ñтека Ð¼ÐµÑ‚ок"
 
 msgid "E425: Cannot go before first matching tag"
 msgstr "E425: Ðевозможно Ð¿ÐµÑ€ÐµÐ¹Ñ‚и Ð² Ð¿Ð¾Ð·Ð¸Ñ†Ð¸ÑŽ Ð´Ð¾ Ð¿ÐµÑ€Ð²Ð¾Ð¹ Ñовпадающей Ð¼ÐµÑ‚ки"
@@ -4434,13 +5652,6 @@ msgstr "  # Ð¿Ñ€Ð¸ Ñ‚ип  Ð¼ÐµÑ‚ка"
 msgid "file\n"
 msgstr "файл\n"
 
-#.
-#. * Ask to select a tag from the list.
-#. * When using ":silent" assume that <CR> was entered.
-#.
-msgid "Enter nr of choice (<CR> to abort): "
-msgstr "Выберите Ð½ÑƒÐ¶Ð½Ñ‹Ð¹ Ð½Ð¾Ð¼ÐµÑ€ (<CR> Ð´Ð»Ñ Ð¾Ñ‚каза):"
-
 msgid "E427: There is only one matching tag"
 msgstr "E427: Ð•ÑÑ‚ÑŒ Ñ‚олько Ð¾Ð´Ð½Ð° ÑовпадающаѠметка"
 
@@ -4482,6 +5693,9 @@ msgstr "ПоиÑк Ð² Ñ„айле Ð¼ÐµÑ‚ок %s"
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: ÐŸÑƒÑ‚ÑŒ Ðº Ñ„айлу Ð¼ÐµÑ‚ок %s Ð¾Ð±Ñ€ÐµÐ·Ð°Ð½\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Игнорирование Ð´Ð»Ð¸Ð½Ð½Ð¾Ð¹ Ñтроки Ð² Ñ„айле tags"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: ÐžÑˆÐ¸Ð±ÐºÐ° Ñ„ормата Ð² Ñ„айле Ð¼ÐµÑ‚ок \"%s\""
@@ -4504,6 +5718,10 @@ msgstr "E434: Ðе Ð½Ð°Ð¹Ð´ÐµÐ½ ÑˆÐ°Ð±Ð»Ð¾Ð½ Ð¼ÐµÑ‚ки"
 msgid "E435: Couldn't find tag, just guessing!"
 msgstr "E435: ÐœÐµÑ‚ка Ð½Ðµ Ð½Ð°Ð¹Ð´ÐµÐ½Ð°, Ð¿Ñ‹Ñ‚аемÑѠугадать!"
 
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "ПовторÑющееÑѠимѠполÑ: %s"
+
 msgid "' not known. Available builtin terminals are:"
 msgstr "' Ð½Ðµ Ð¸Ð·Ð²ÐµÑтен. Ð”оÑтупны Ð²Ñтроенные Ñ‚ерминалы:"
 
@@ -4524,7 +5742,7 @@ msgid "E436: No \"%s\" entry in termcap"
 msgstr "E436: Ð’ termcap Ð½ÐµÑ‚ Ð·Ð°Ð¿Ð¸Ñи \"%s\""
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: Ñ‚ребуетÑÑ ÑпоÑобноÑÑ‚ÑŒ Ñ‚ерминала \"cm\""
+msgstr "E437: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ ÑпоÑобноÑÑ‚ÑŒ Ñ‚ерминала \"cm\""
 
 #. Highlight title
 msgid ""
@@ -4540,25 +5758,147 @@ msgstr "запуÑк Ð½Ð¾Ð²Ð¾Ð¹ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ¸\n"
 msgid "Vim: Error reading input, exiting...\n"
 msgstr "Vim: ÐžÑˆÐ¸Ð±ÐºÐ° Ñ‡Ñ‚ениѠввода, Ð²Ñ‹Ñ…од...\n"
 
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "ВмеÑто Ð¿ÑƒÑтого Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸ÑпользуетÑÑ CUT_BUFFER0"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: Ðеожиданно Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»ÑÑ Ñчётчик Ñтрок"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "Отмена Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°; Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶Ð°Ñ‚ÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ðµ"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: Ðевозможно Ð¾Ñ‚крыть Ñ„айл Ð¾Ñ‚мен Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: Ð¤Ð°Ð¹Ð» Ð¾Ñ‚мен Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘н (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "Ðевозможно Ð·Ð°Ð¿Ð¸Ñать Ñ„айл Ð¾Ñ‚мен Ð² ÐºÐ°ÐºÐ¾Ð¼-либо ÐºÐ°Ñ‚алоге Ð¸Ð· 'undodir'"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "Файл Ð¾Ñ‚мен Ð½Ðµ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñан, Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ать: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "ПерезапиÑÑŒ Ð½Ðµ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð°, Ñто Ð½Ðµ Ñ„айл Ð¾Ñ‚мен: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "Пропущена Ð·Ð°Ð¿Ð¸ÑÑŒ Ñ„айла Ð¾Ñ‚мен, Ð½ÐµÑ‡ÐµÐ³Ð¾ Ð¾Ñ‚менÑÑ‚ÑŒ"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "ЗапиÑÑŒ Ñ„айла Ð¾Ñ‚мен: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: ÐžÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ð·Ð°Ð¿Ð¸Ñи Ñ„айла Ð¾Ñ‚мен: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "Файл Ð¾Ñ‚мен Ð½Ðµ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚ан, Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ†: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "Чтение Ñ„айла Ð¾Ñ‚мен: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: Ðевозможно Ð¾Ñ‚крыть Ñ„айл Ð¾Ñ‚мен Ð´Ð»Ñ Ñ‡Ñ‚ениÑ: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: Ð­Ñ‚о Ð½Ðµ Ñ„айл Ð¾Ñ‚мен: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: Ðе Ð·Ð°ÑˆÐ¸Ñ„рованный Ñ„айл Ð¸Ð¼ÐµÐµÑ‚ Ð·Ð°ÑˆÐ¸Ñ„рованный Ñ„айл Ð¾Ñ‚мен: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð´ÐµÑˆÐ¸Ñ„ровать Ñ„айл Ð¾Ñ‚мен: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: Ð¤Ð°Ð¹Ð» Ð¾Ñ‚мен Ð·Ð°ÑˆÐ¸Ñ„рован: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: ÐеÑовмеÑтимый Ñ„айл Ð¾Ñ‚мен: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "ИзменилоÑÑŒ Ñодержимое Ñ„айла, Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ Ð¸Ñпользовать Ð¸Ð½Ñ„ормацию Ð¾Ñ‚мен"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "Завершено Ñ‡Ñ‚ение Ñ„айла Ð¾Ñ‚мен %s"
+
+msgid "Already at oldest change"
+msgstr "Уже Ð½Ð° Ñамом Ð¿ÐµÑ€Ð²Ð¾Ð¼ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¸"
+
+msgid "Already at newest change"
+msgstr "Уже Ð½Ð° Ñамом Ð¿Ð¾Ñледнем Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¸"
+
+#, c-format
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Ðе Ð½Ð°Ð¹Ð´ÐµÐ½Ð° Ð¾Ñ‚мена Ð½Ð¾Ð¼ÐµÑ€ %ld"
+
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ðµ Ð½Ð¾Ð¼ÐµÑ€Ð° Ñтрок"
 
-msgid "1 change"
-msgstr "ЕдинÑтвенное Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ"
+msgid "more line"
+msgstr "ÑÑ‚Ñ€. Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð°"
+
+msgid "more lines"
+msgstr "ÑÑ‚Ñ€. Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾"
+
+msgid "line less"
+msgstr "ÑÑ‚Ñ€. ÑƒÐ´Ð°Ð»ÐµÐ½Ð°"
+
+msgid "fewer lines"
+msgstr "ÑÑ‚Ñ€. ÑƒÐ´Ð°Ð»ÐµÐ½Ð¾"
+
+msgid "change"
+msgstr "изм."
+
+msgid "changes"
+msgstr "изм."
+
+#, c-format
+msgid "%ld %s; %s #%ld  %s"
+msgstr "%ld %s; %s #%ld  %s"
+
+msgid "before"
+msgstr "перед"
+
+msgid "after"
+msgstr "поÑле"
+
+msgid "Nothing to undo"
+msgstr "Ðечего Ð¾Ñ‚менÑÑ‚ÑŒ"
+
+# Ð—аголовок Ñ‚аблицы :undolist
+msgid "number changes  when               saved"
+msgstr " Ð½Ð¾Ð¼ÐµÑ€  Ð¸Ð·Ð¼ÐµÐ½.  ÐºÐ¾Ð³Ð´Ð°              Ñохранено"
 
 #, c-format
-msgid "%ld changes"
-msgstr "Изменений: %ld"
+msgid "%ld seconds ago"
+msgstr "%ld Ñ Ð½Ð°Ð·Ð°Ð´"
+
+msgid "E790: undojoin is not allowed after undo"
+msgstr "E790: ÐžÐ±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ðµ Ð¾Ñ‚мен Ð½Ðµ Ð´Ð¾Ð¿ÑƒÑкаетÑѠпоÑле Ð¾Ñ‚мены"
 
 msgid "E439: undo list corrupt"
 msgstr "E439: ÐŸÐ¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘н ÑпиÑок Ð¾Ñ‚мены"
 
 msgid "E440: undo line missing"
-msgstr "E440: Ã¿отерÑна Ñтрока Ð¾Ñ‚мены"
+msgstr "E440: Ã\9fотерÑна Ñтрока Ð¾Ñ‚мены"
 
 #. Only MS VC 4.1 and earlier can do Win32s
 msgid ""
@@ -4570,19 +5910,33 @@ msgstr ""
 
 msgid ""
 "\n"
+"MS-Windows 64-bit GUI version"
+msgstr ""
+"\n"
+"ВерÑиѠѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом Ð´Ð»Ñ MS-Windows 64 Ð±Ð¸Ñ‚"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit GUI version"
 msgstr ""
 "\n"
 "ВерÑиѠѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом Ð´Ð»Ñ MS-Windows 32 Ð±Ð¸Ñ‚"
 
 msgid " in Win32s mode"
-msgstr " Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ Win32s"
+msgstr " Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ðµ Win32"
 
 msgid " with OLE support"
 msgstr " Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ OLE"
 
 msgid ""
 "\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"КонÑольнаѠверÑиѠдлѠMS-Windows 64 Ð±Ð¸Ñ‚"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit console version"
 msgstr ""
 "\n"
@@ -4632,10 +5986,10 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
+"OpenVMS version"
 msgstr ""
 "\n"
-"ВерÑиѠдлѠRISC OS"
+"ВерÑиѠдлѠOpenVMS"
 
 msgid ""
 "\n"
@@ -4644,6 +5998,13 @@ msgstr ""
 "\n"
 "Заплатки: "
 
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"Дополнительные Ð·Ð°Ð¿Ð»Ð°Ñ‚ки: "
+
 msgid "Modified by "
 msgstr "С Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñми, Ð²Ð½ÐµÑёнными "
 
@@ -4698,15 +6059,9 @@ msgstr "без Ð³Ñ€Ð°Ñ„ичеÑкого Ð¸Ð½Ñ‚ерфейÑа."
 msgid "with GTK2-GNOME GUI."
 msgstr "ѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом GTK2-GNOME."
 
-msgid "with GTK-GNOME GUI."
-msgstr "ѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом GTK-GNOME."
-
 msgid "with GTK2 GUI."
 msgstr "ѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом GTK2."
 
-msgid "with GTK GUI."
-msgstr "ѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом GTK."
-
 msgid "with X11-Motif GUI."
 msgstr "ѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом X11-Motif."
 
@@ -4716,9 +6071,6 @@ msgstr "ѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом X11-neXtaw."
 msgid "with X11-Athena GUI."
 msgstr "ѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом X11-Athena."
 
-msgid "with BeOS GUI."
-msgstr "ѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом BeOS."
-
 msgid "with Photon GUI."
 msgstr "ѠграфичеÑким Ð¸Ð½Ñ‚ерфейÑом Photon."
 
@@ -4789,7 +6141,7 @@ msgid "  DEBUG BUILD"
 msgstr "  ÐžÐ¢Ð›ÐДОЧÐÐЯ Ð¡Ð‘ОРКÐ"
 
 msgid "VIM - Vi IMproved"
-msgstr "VIM ::: Vi IMproved (Улучшенный Vi) ::: Ð ÑƒÑÑкаѠверÑиÑ"
+msgstr "VIM â€” Vi IMproved (улучшенный Vi)"
 
 msgid "version "
 msgstr "верÑиѠ"
@@ -4828,16 +6180,16 @@ msgid "menu  Help->Orphans           for information    "
 msgstr "меню Ð¡Ð¿Ñ€Ð°Ð²ÐºÐ°->Сироты             Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„ормации     "
 
 msgid "Running modeless, typed text is inserted"
-msgstr "БезрежимнаѠработы, Ð²Ñтавка Ð²Ð²ÐµÐ´Ñ‘нного Ñ‚екÑта"
+msgstr "БезрежимнаѠработа, Ð²Ñтавка Ð²Ð²ÐµÐ´Ñ‘нного Ñ‚екÑта"
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "üõýÑ\8e Ã\9fÑ\80ðòúð->Ã\9eñÑ\89øõ Ã\9dаÑтройки->Режим Ð’Ñтавки                     "
+msgstr "üõýÑ\8e Ã\9fÑ\80ðòúð->Ã\93ûþñðÃȄ\8cýÑ\8bõ Ã½аÑтройки->Режим Ð’Ñтавки                     "
 
 msgid "                              for two modes      "
 msgstr "                                 Ð´Ð»Ñ Ð´Ð²ÑƒÑ… Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð²               "
 
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
-msgstr "üõýÑ\8e Ã\9fÑ\80ðòúð->Ã\9eñÑ\89øõ Ã\9dаÑтройки->СовмеÑтимоÑÑ‚ÑŒ Ñ Vi                "
+msgstr "üõýÑ\8e Ã\9fÑ\80ðòúð->Ã\93ûþñðÃȄ\8cýÑ\8bõ Ã½аÑтройки->СовмеÑтимоÑÑ‚ÑŒ Ñ Vi                "
 
 msgid "                              for Vim defaults   "
 msgstr "                                 Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…ода Ð² Ñ€ÐµÐ¶Ð¸Ð¼ Vim       "
@@ -4863,6 +6215,9 @@ msgstr "ПРЕДУПРЕЖДЕÐИЕ: Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð° Windows 95/98/ME"
 msgid "type  :help windows95<Enter>  for info on this"
 msgstr "наберите :help windows95<Enter>  Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„ормации     "
 
+msgid "Already only one window"
+msgstr "Ðа Ñкране Ð²Ñего Ð¾Ð´Ð½Ð¾ Ð¾ÐºÐ½Ð¾"
+
 msgid "E441: There is no preview window"
 msgstr "E441: ÐžÐºÐ½Ð¾ Ð¿Ñ€ÐµÐ´Ð¿Ñ€Ð¾Ñмотра Ð¾Ñ‚ÑутÑтвует"
 
@@ -4875,8 +6230,11 @@ msgstr "E443: Ðевозможно Ð¿Ð¾Ð¼ÐµÐ½ÑÑ‚ÑŒ Ð¼ÐµÑтами, Ð¿Ð¾ÐºÐ° Ð´
 msgid "E444: Cannot close last window"
 msgstr "E444: ÐельзѠзакрыть Ð¿Ð¾Ñледнее Ð¾ÐºÐ½Ð¾"
 
-msgid "Already only one window"
-msgstr "Ðа Ñкране Ð²Ñего Ð¾Ð´Ð½Ð¾ Ð¾ÐºÐ½Ð¾"
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: ÐельзѠзакрыть Ð¾ÐºÐ½Ð¾ Ð°Ð²Ñ‚окоманд"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: ÐельзѠзакрыть Ð¾ÐºÐ½Ð¾, Ð¾ÑтанетÑѠтолько Ð¾ÐºÐ½Ð¾ Ð°Ð²Ñ‚окоманд"
 
 msgid "E445: Other window contains changes"
 msgstr "E445: Ð’ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ Ð¾ÐºÐ½Ðµ ÐµÑÑ‚ÑŒ Ð½ÐµÑохранённые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ"
@@ -4906,15 +6264,15 @@ msgstr "Редактировать Ð² &разных Vim-ах"
 msgid "Edit with single &Vim"
 msgstr "Редактировать Ð² &одном Vim"
 
-msgid "&Diff with Vim"
-msgstr "&Сравнить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Vim"
+msgid "Diff with Vim"
+msgstr "Сравнить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Vim"
 
 msgid "Edit with &Vim"
 msgstr "Ре&дактировать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Vim"
 
 #. Now concatenate
-msgid "Edit with existing Vim - &"
-msgstr "Редактировать Ð² Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð½Ð¾Ð¼ Vim - &"
+msgid "Edit with existing Vim - "
+msgstr "Редактировать Ð² Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð½Ð¾Ð¼ Vim â€” "
 
 msgid "Edits the selected file(s) with Vim"
 msgstr "Редактировать Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ðµ Ñ„айлы Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Vim"
@@ -4961,11 +6319,17 @@ msgstr "E600: ÐžÑ‚ÑутÑтвует ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° :endtry"
 msgid "E170: Missing :endwhile"
 msgstr "E170: ÐžÑ‚ÑутÑтвует ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° :endwhile"
 
+msgid "E170: Missing :endfor"
+msgstr "E170: ÐžÑ‚ÑутÑтвует ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° :endfor"
+
 msgid "E588: :endwhile without :while"
 msgstr "E588: ÐšÐ¾Ð¼Ð°Ð½Ð´Ð° :endwhile Ð±ÐµÐ· Ð¿Ð°Ñ€Ð½Ð¾Ð¹ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ :while"
 
+msgid "E588: :endfor without :for"
+msgstr "E588: :endfor Ð±ÐµÐ· :for"
+
 msgid "E13: File exists (add ! to override)"
-msgstr "E13: Ã¤Ã°Ã¹Ã» Ã‘\81Ñ\83Ñ\89õÑ\81Ñ\82òÑ\83õÑ\82 (ôÃȄ\8f Ã¿ÃµÑ\80õ÷ðÿøÑ\81ø Ã´Ã¾Ã±Ã°Ã²Ñ\8cÑ\82õ !)"
+msgstr "E13: Ã¤Ã°Ã¹Ã» Ã‘\81Ñ\83Ñ\89õÑ\81Ñ\82òÑ\83õÑ\82 (ôþñðòÑ\8cÑ\82õ !, Ã‘\87Ñ\82þñÑ\8b Ã¿ÃµÑ\80õ÷ðÿøÑ\81ðÑ\82Ñ\8c)"
 
 msgid "E472: Command failed"
 msgstr "E472: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ"
@@ -4980,7 +6344,7 @@ msgstr "E235: ÐеизвеÑтный ÑˆÑ€Ð¸Ñ„Ñ‚: %s"
 
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236: Ð¨Ñ€Ð¸Ñ„Ñ‚ \"%s\" Ð½Ðµ ÑвлÑетÑѠмоноширинным ÑˆÑ€Ð¸Ñ„том"
+msgstr "E236: Ð¨Ñ€Ð¸Ñ„Ñ‚ \"%s\" Ð½Ðµ ÑвлÑетÑѠмоноширинным"
 
 msgid "E473: Internal error"
 msgstr "E473: Ð’нутреннÑѠошибка"
@@ -4992,11 +6356,11 @@ msgid "E14: Invalid address"
 msgstr "E14: ÐедопуÑтимый Ð°Ð´Ñ€ÐµÑ"
 
 msgid "E474: Invalid argument"
-msgstr "E474: Ã\9dõôþÿÑ\83Ñ\81Ñ\82øüÑ\8bù Ã°Ñ\80óÑ\83üõýÑ\82"
+msgstr "E474: Ã\9dõôþÿÑ\83Ñ\81Ñ\82øüÑ\8bù Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80"
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475: Ã\9dõôþÿÑ\83Ñ\81Ñ\82øüÑ\8bù Ã°Ñ\80óÑ\83üõýÑ\82: %s"
+msgstr "E475: Ã\9dõôþÿÑ\83Ñ\81Ñ\82øüÑ\8bù Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80: %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
@@ -5012,9 +6376,6 @@ msgstr "E476: ÐедопуÑтимаѠкоманда"
 msgid "E17: \"%s\" is a directory"
 msgstr "E17: \"%s\" ÑвлÑетÑѠкаталогом"
 
-msgid "E18: Unexpected characters before '='"
-msgstr "E18: ÐŸÐµÑ€ÐµÐ´ '=' Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ñ‹ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñ‹Ðµ Ñимволы"
-
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
 msgstr "E364: Ðеудачный Ð²Ñ‹Ð·Ð¾Ð² Ñ„ункции \"%s()\" Ð¸Ð· Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚еки"
@@ -5098,7 +6459,7 @@ msgstr "E36: ÐедоÑтаточно Ð¼ÐµÑта"
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247: Ñервер \"%s\" Ð½Ðµ Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрирован"
+msgstr "E247: Ð¡ÐµÑ€Ð²ÐµÑ€ \"%s\" Ð½Ðµ Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрирован"
 
 #, c-format
 msgid "E482: Can't create file %s"
@@ -5119,7 +6480,7 @@ msgid "E37: No write since last change (add ! to override)"
 msgstr "E37: Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ Ñохранены (добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
 
 msgid "E38: Null argument"
-msgstr "E38: Ã\9dÑ\83ûõòþù Ã°Ñ\80óÑ\83üõýÑ\82"
+msgstr "E38: Ã\9dÑ\83ûõòþù Ã¿Ã°Ñ\80ðüõÑ\82Ñ\80"
 
 msgid "E39: Number expected"
 msgstr "E39: Ð¢Ñ€ÐµÐ±ÑƒÐµÑ‚ÑѠчиÑло"
@@ -5129,7 +6490,7 @@ msgid "E40: Can't open errorfile %s"
 msgstr "E40: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð¾Ñ‚крыть Ñ„айл Ð¾ÑˆÐ¸Ð±Ð¾Ðº %s"
 
 msgid "E233: cannot open display"
-msgstr "E233: Ã½евозможно Ð¾Ñ‚крыть Ð´Ð¸Ñплей"
+msgstr "E233: Ã\9dевозможно Ð¾Ñ‚крыть Ð´Ð¸Ñплей"
 
 msgid "E41: Out of memory!"
 msgstr "E41: Ðе Ñ…ватает Ð¿Ð°Ð¼Ñти!"
@@ -5148,7 +6509,10 @@ msgid "E459: Cannot go back to previous directory"
 msgstr "E459: Ð’озврат Ð² Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð¸Ð¹ ÐºÐ°Ñ‚алог Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶ÐµÐ½"
 
 msgid "E42: No Errors"
-msgstr "E42: ÐžÑˆÐ¸Ð±Ð¾Ðº Ð½ÐµÑ‚"
+msgstr "E42: Ðет Ð¾ÑˆÐ¸Ð±Ð¾Ðº"
+
+msgid "E776: No location list"
+msgstr "E776: Ðет ÑпиÑка Ñ€Ð°Ñположений"
 
 msgid "E43: Damaged match string"
 msgstr "E43: ÐŸÐ¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð° Ñтрока ÑоответÑтвиÑ"
@@ -5157,12 +6521,15 @@ msgid "E44: Corrupted regexp program"
 msgstr "E44: ÐŸÑ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ки Ñ€ÐµÐ³ÑƒÐ»Ñрных Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ð¹ Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð°"
 
 msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr ""
-"E45: Ð’ключена Ð¾Ð¿Ñ†Ð¸Ñ 'readonly' (добавьте !, Ñ‡Ñ‚обы Ð½Ðµ Ð¾Ð±Ñ€Ð°Ñ‰Ð°Ñ‚ÑŒ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ)"
+msgstr "E45: Ð’ключена Ð¾Ð¿Ñ†Ð¸Ñ 'readonly' (добавьте !, Ñ‡Ñ‚обы Ð¾Ð±Ð¾Ð¹Ñ‚и Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÑƒ)"
+
+#, c-format
+msgid "E46: Cannot change read-only variable \"%s\""
+msgstr "E46: Ðевозможно Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½ÑƒÑŽ Ñ‚олько Ð´Ð»Ñ Ñ‡Ñ‚ениѠ\"%s\""
 
 #, c-format
-msgid "E46: Cannot set read-only variable \"%s\""
-msgstr "E46: Ðевозможно Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ð´Ð¾Ñтупную Ñ‚олько Ð´Ð»Ñ Ñ‡Ñ‚ениѠпеременную \"%s\""
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: Ðевозможно Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½ÑƒÑŽ Ð² Ð¿ÐµÑочнице: \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: ÐžÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ‡Ñ‚ении Ñ„айла Ð¾ÑˆÐ¸Ð±Ð¾Ðº"
@@ -5235,3 +6602,282 @@ msgstr "E449: ÐŸÐ¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ Ð½ÐµÐ´Ð¾Ð¿ÑƒÑтимое Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ"
 msgid "E463: Region is guarded, cannot modify"
 msgstr "E463: Ðевозможно Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ð¾Ñ…ранÑемую Ð¾Ð±Ð»Ð°ÑÑ‚ÑŒ"
 
+msgid "E744: NetBeans does not allow changes in read-only files"
+msgstr "E744: NetBeans Ð½Ðµ Ð´Ð¾Ð¿ÑƒÑкает Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ Ð² Ñ„айлах Ñ‚олько Ð´Ð»Ñ Ñ‡Ñ‚ениÑ"
+
+#, c-format
+msgid "E685: Internal error: %s"
+msgstr "E685: Ð’нутреннÑѠошибка: %s"
+
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363: Ð¨Ð°Ð±Ð»Ð¾Ð½ Ð¸Ñпользует Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¿Ð°Ð¼Ñти Ñ‡ÐµÐ¼ 'maxmempattern'"
+
+msgid "E749: empty buffer"
+msgstr "E749: ÐŸÑƒÑтой Ð±ÑƒÑ„ер"
+
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682: ÐеправильнаѠÑтрока Ð¿Ð¾Ð¸Ñка Ð¸Ð»Ð¸ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ель"
+
+msgid "E139: File is loaded in another buffer"
+msgstr "E139: Ð¤Ð°Ð¹Ð» Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½ Ð² Ð´Ñ€ÑƒÐ³Ð¾Ð¼ Ð±ÑƒÑ„ере"
+
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764: ÐžÐ¿Ñ†Ð¸Ñ '%s' Ð½Ðµ ÑƒÑтановлена"
+
+msgid "E850: Invalid register name"
+msgstr "E850: ÐедопуÑтимое Ð¸Ð¼Ñ Ñ€ÐµÐ³Ð¸Ñтра"
+
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "ПоиÑк Ð±ÑƒÐ´ÐµÑ‚ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½ Ñ ÐšÐžÐЦРдокумента"
+
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "ПоиÑк Ð±ÑƒÐ´ÐµÑ‚ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½ Ñ ÐÐЧÐЛРдокумента"
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "ТребуетÑѠключ ÑˆÐ¸Ñ„рованиѠдлѠ\"%s\""
+
+msgid "empty keys are not allowed"
+msgstr "ПуÑтые ÐºÐ»ÑŽÑ‡Ð¸ Ð½Ðµ Ð´Ð¾Ð¿ÑƒÑтимы"
+
+msgid "dictionary is locked"
+msgstr "Словарь Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½"
+
+msgid "list is locked"
+msgstr "СпиÑок Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²Ð°Ð½"
+
+#, c-format
+msgid "failed to add key '%s' to dictionary"
+msgstr "Ðевозможно Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ ÐºÐ»ÑŽÑ‡ '%s' Ðº Ñловарю"
+
+#, c-format
+msgid "index must be int or slice, not %s"
+msgstr "ИндекѠдолжен Ð±Ñ‹Ñ‚ÑŒ Ñ†ÐµÐ»Ñ‹Ð¼ Ñ‡Ð¸Ñлом Ð¸Ð»Ð¸ Ð²Ñ‹Ð±Ð¾Ñ€ÐºÐ¾Ð¹, Ð° Ð½Ðµ %s"
+
+#, c-format
+msgid "expected str() or unicode() instance, but got %s"
+msgstr "ОжидалÑÑ ÑкземплÑÑ€ str() Ð¸Ð»Ð¸ unicode(), Ð½Ð¾ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ %s"
+
+#, c-format
+msgid "expected bytes() or str() instance, but got %s"
+msgstr "ОжидалÑÑ ÑкземплÑÑ€ bytes() Ð¸Ð»Ð¸ str(), Ð½Ð¾ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ %s"
+
+#, c-format
+msgid ""
+"expected int(), long() or something supporting coercing to long(), but got %s"
+msgstr "ОжидалоÑÑŒ int(), long() Ð¸Ð»Ð¸ Ñ‡Ñ‚о-то Ð¿Ñ€Ð¸Ð²Ð¾Ð´Ð¸Ð¼Ð¾Ðµ Ðº long(), Ð½Ð¾ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ %s"
+
+#, c-format
+msgid "expected int() or something supporting coercing to int(), but got %s"
+msgstr "ОжидалоÑÑŒ int() Ð¸Ð»Ð¸ Ñ‡Ñ‚о-то Ð¿Ñ€Ð¸Ð²Ð¾Ð´Ð¸Ð¼Ð¾Ðµ Ðº int(), Ð½Ð¾ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¾ %s"
+
+msgid "value is too large to fit into C int type"
+msgstr "Значение Ñлишком Ð²ÐµÐ»Ð¸ÐºÐ¾ Ð´Ð»Ñ Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñленного Ñ‚ипа C"
+
+msgid "value is too small to fit into C int type"
+msgstr "Значение Ñлишком Ð¼Ð°Ð»Ð¾ Ð´Ð»Ñ Ñ†ÐµÐ»Ð¾Ñ‡Ð¸Ñленного Ñ‚ипа C"
+
+msgid "number must be greater then zero"
+msgstr "Ðомер Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ð±Ð¾Ð»ÑŒÑˆÐµ Ð½ÑƒÐ»Ñ"
+
+msgid "number must be greater or equal to zero"
+msgstr "Ðомер Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð±Ñ‹Ñ‚ÑŒ Ð±Ð¾Ð»ÑŒÑˆÐµ Ð¸Ð»Ð¸ Ñ€Ð°Ð²ÐµÐ½ Ð½ÑƒÐ»ÑŽ"
+
+msgid "can't delete OutputObject attributes"
+msgstr "Ðевозможно ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ð°Ñ‚рибуты OutputObject"
+
+#, c-format
+msgid "invalid attribute: %s"
+msgstr "Ðеправильный Ð°Ñ‚рибут: %s"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: ÐžÑˆÐ¸Ð±ÐºÐ° Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Ð¾Ð±ÑŠÐµÐºÑ‚ов I/O"
+
+msgid "failed to change directory"
+msgstr "Ðевозможно Ñменить ÐºÐ°Ñ‚алог"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got %s"
+msgstr "ОжидалÑÑ 3-кортеж ÐºÐ°Ðº Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚ат imp.find_module(), Ð½Ð¾ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ %s"
+
+#, c-format
+msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
+msgstr ""
+"ОжидалÑÑ 3-кортеж ÐºÐ°Ðº Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚ат imp.find_module(), Ð½Ð¾ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ ÐºÐ¾Ñ€Ñ‚еж Ñ "
+"размером %d"
+
+msgid "internal error: imp.find_module returned tuple with NULL"
+msgstr "ВнутреннÑѠошибка: imp.find_module Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚ил "
+
+msgid "cannot delete vim.Dictionary attributes"
+msgstr "Ðевозможно ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ð°Ñ‚рибуты vim.Dictionary"
+
+msgid "cannot modify fixed dictionary"
+msgstr "Ðевозможно Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ñ„икÑированный Ñловарь"
+
+#, c-format
+msgid "cannot set attribute %s"
+msgstr "Ðевозможно ÑƒÑтановить Ð°Ñ‚рибут %s"
+
+msgid "hashtab changed during iteration"
+msgstr "Ð¥Ñш-таблица Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð°ÑÑŒ Ð¿Ñ€Ð¸ Ð¸Ñ‚ерации"
+
+#, c-format
+msgid "expected sequence element of size 2, but got sequence of size %d"
+msgstr ""
+"ОжидалÑÑ Ñлемент-поÑледовательноÑÑ‚ÑŒ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° 2, Ð° Ñ€Ð°Ð·Ð¼ÐµÑ€ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ð¾Ð¹ "
+"поÑледовательноÑти %d"
+
+msgid "list constructor does not accept keyword arguments"
+msgstr "КонÑтруктор ÑпиÑка Ð½Ðµ Ð´Ð¾Ð¿ÑƒÑкает ÐºÐ»ÑŽÑ‡ÐµÐ²Ñ‹Ðµ Ñлова ÐºÐ°Ðº Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹"
+
+msgid "list index out of range"
+msgstr "ИндекѠÑпиÑка Ð·Ð° Ð¿Ñ€ÐµÐ´ÐµÐ»Ð°Ð¼Ð¸ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°"
+
+#. No more suitable format specifications in python-2.3
+#, c-format
+msgid "internal error: failed to get vim list item %d"
+msgstr "ВнутреннÑѠошибка: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ Ñлемент VIM-ÑпиÑка %d"
+
+msgid "failed to add item to list"
+msgstr "Ðевозможно Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ Ñлемент Ð² ÑпиÑок"
+
+#, c-format
+msgid "internal error: no vim list item %d"
+msgstr "ВнутреннÑѠошибка: Ð½ÐµÑ‚ Ñлемента VIM-ÑпиÑка %d"
+
+msgid "internal error: failed to add item to list"
+msgstr "ВнутреннÑѠошибка: Ð½Ðµ ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ Ñлемент Ð² ÑпиÑок"
+
+msgid "cannot delete vim.List attributes"
+msgstr "Ðевозможно ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ð°Ñ‚рибуты vim.List"
+
+msgid "cannot modify fixed list"
+msgstr "Ðевозможно Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ Ñ„икÑированный ÑпиÑок"
+
+#, c-format
+msgid "unnamed function %s does not exist"
+msgstr "Ðе ÑущеÑтвует Ð±ÐµÐ·Ñ‹Ð¼Ñнной Ñ„ункции %s"
+
+#, c-format
+msgid "function %s does not exist"
+msgstr "ФункциѠ%s Ð½Ðµ ÑущеÑтвует"
+
+msgid "function constructor does not accept keyword arguments"
+msgstr "КонÑтруктор Ñ„ункции Ð½Ðµ Ð´Ð¾Ð¿ÑƒÑкает ÐºÐ»ÑŽÑ‡ÐµÐ²Ñ‹Ðµ Ñлова ÐºÐ°Ðº Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ‹"
+
+#, c-format
+msgid "failed to run function %s"
+msgstr "Ðевозможно Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ñ„ункцию %s"
+
+msgid "unable to get option value"
+msgstr "Ðевозможно Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ Ð¾Ð¿Ñ†Ð¸Ð¸"
+
+msgid "internal error: unknown option type"
+msgstr "ВнутреннÑѠошибка: Ð½ÐµÐ¸Ð·Ð²ÐµÑтный Ñ‚ип Ð¾Ð¿Ñ†Ð¸Ð¸"
+
+msgid "problem while switching windows"
+msgstr "Проблема Ð¿Ñ€Ð¸ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ð¸ Ð¾ÐºÐ¾Ð½"
+
+#, c-format
+msgid "unable to unset global option %s"
+msgstr "Ðевозможно ÑброÑить Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½ÑƒÑŽ Ð¾Ð¿Ñ†Ð¸ÑŽ %s"
+
+#, c-format
+msgid "unable to unset option %s which does not have global value"
+msgstr "Ðевозможно ÑброÑить Ð¾Ð¿Ñ†Ð¸ÑŽ %s Ð±ÐµÐ· Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "Попытка ÑоÑлатьÑѠна ÑƒÐ´Ð°Ð»Ñ‘нную Ð²ÐºÐ»Ð°Ð´ÐºÑƒ"
+
+msgid "no such tab page"
+msgstr "Ðет Ñ‚акой Ð²ÐºÐ»Ð°Ð´ÐºÐ¸"
+
+msgid "attempt to refer to deleted window"
+msgstr "Попытка ÑоÑлатьÑѠна Ð·Ð°ÐºÑ€Ñ‹Ñ‚ое Ð¾ÐºÐ½Ð¾"
+
+msgid "readonly attribute: buffer"
+msgstr "Ðтрибут Ñ‚олько Ð´Ð»Ñ Ñ‡Ñ‚ениÑ: Ð±ÑƒÑ„ер"
+
+msgid "cursor position outside buffer"
+msgstr "ПозициѠкурÑора Ð½Ð°Ñ…одитÑѠвне Ð±ÑƒÑ„ера"
+
+msgid "no such window"
+msgstr "Ðет Ñ‚акого Ð¾ÐºÐ½Ð°"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "Попытка ÑоÑлатьÑѠна ÑƒÐ½Ð¸Ñ‡Ñ‚оженный Ð±ÑƒÑ„ер"
+
+msgid "failed to rename buffer"
+msgstr "Ðевозможно Ð¿ÐµÑ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ñ‚ÑŒ Ð±ÑƒÑ„ер"
+
+msgid "mark name must be a single character"
+msgstr "Ðазвание Ð¾Ñ‚метки Ð´Ð¾Ð»Ð¶Ð½Ð¾ Ð±Ñ‹Ñ‚ÑŒ Ð¾Ð´Ð½Ð¸Ð¼ Ñимволом"
+
+#, c-format
+msgid "expected vim.Buffer object, but got %s"
+msgstr "ОжидалÑѠобъект vim.Buffer, Ð½Ð¾ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ %s"
+
+#, c-format
+msgid "failed to switch to buffer %d"
+msgstr "Ðевозможно Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑѠна Ð±ÑƒÑ„ер %d"
+
+#, c-format
+msgid "expected vim.Window object, but got %s"
+msgstr "ОжидалÑѠобъект vim.Window, Ð½Ð¾ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ %s"
+
+msgid "failed to find window in the current tab page"
+msgstr "Ðевозможно Ð½Ð°Ð¹Ñ‚и Ð¾ÐºÐ½Ð¾ Ð² Ñ‚екущей Ð²ÐºÐ»Ð°Ð´ÐºÐµ"
+
+msgid "did not switch to the specified window"
+msgstr "Ðевозможно Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑѠна ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ðµ Ð¾ÐºÐ½Ð¾"
+
+#, c-format
+msgid "expected vim.TabPage object, but got %s"
+msgstr "ОжидалÑѠобъект vim.TabPage, Ð½Ð¾ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½ %s"
+
+msgid "did not switch to the specified tab page"
+msgstr "Ðевозможно Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑѠна ÑƒÐºÐ°Ð·Ð°Ð½Ð½ÑƒÑŽ Ð²ÐºÐ»Ð°Ð´ÐºÑƒ"
+
+msgid "failed to run the code"
+msgstr "Ðевозможно Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ ÐºÐ¾Ð´"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval Ð½Ðµ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚ил Ð´Ð¾Ð¿ÑƒÑтимого Ð¾Ð±ÑŠÐµÐºÑ‚а Python"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr ""
+"E859: Ðе ÑƒÐ´Ð°Ð»Ð¾ÑÑŒ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ñ‘нный Ð¾Ð±ÑŠÐµÐºÑ‚ Python Ð² Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ VIM"
+
+#, c-format
+msgid "unable to convert %s to vim dictionary"
+msgstr "Ðевозможно Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ %s Ð² Ñловарь VIM"
+
+#, c-format
+msgid "unable to convert %s to vim structure"
+msgstr "Ðевозможно Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ñ‚ÑŒ %s Ð² Ñтруктуру VIM"
+
+msgid "internal error: NULL reference passed"
+msgstr "ВнутреннÑѠошибка: Ð¿ÐµÑ€ÐµÐ´Ð°Ð½Ð° ÑÑылка Ð½Ð° NULL"
+
+msgid "internal error: invalid value type"
+msgstr "ВнутреннÑѠошибка: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¹ Ñ‚ип Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ"
+
+msgid ""
+"Failed to set path hook: sys.path_hooks is not a list\n"
+"You should now do the following:\n"
+"- append vim.path_hook to sys.path_hooks\n"
+"- append vim.VIM_SPECIAL_PATH to sys.path\n"
+msgstr ""
+"Ошибка Ð¿Ñ€Ð¸ ÑƒÑтановке Ð¿ÐµÑ€ÐµÑ…ватчика Ð¿ÑƒÑ‚и: sys.path_hooks Ð½Ðµ ÑвлÑетÑÑ ÑпиÑком\n"
+"Следует Ñделать Ñледующее:\n"
+"— Ð”обавить vim.path_hook  Ð² sys.path_hooks\n"
+"— Ð”обавить vim.VIM_SPECIAL_PATH Ð² sys.path\n"
+
+msgid ""
+"Failed to set path: sys.path is not a list\n"
+"You should now append vim.VIM_SPECIAL_PATH to sys.path"
+msgstr ""
+"Ошибка Ð¿Ñ€Ð¸ ÑƒÑтановке Ð¿ÑƒÑ‚и: sys.path Ð½Ðµ ÑвлÑетÑÑ ÑпиÑком\n"
+"Следует Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ vim.VIM_SPECIAL_PATH Ð² sys.path"
index d7706ba..fec4740 100644 (file)
@@ -18,10 +18,10 @@ main(argc, argv)
        {
                for (p = buffer; *p != 0; p++)
                {
-                       if (strncmp(p, "charset=euc-jp", 14) == 0)
+                       if (strncmp(p, "charset=utf-8", 13) == 0)
                        {
                                fputs("charset=cp932", stdout);
-                               p += 13;
+                               p += 12;
                        }
                        else if (strncmp(p, "ja.po - Japanese message file", 29) == 0)
                        {
index bc1efda..ebc31c1 100644 (file)
@@ -1908,19 +1908,6 @@ msgstr "Nahradi
 msgid "&Undo"
 msgstr "&Spä\9d"
 
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Nemô\9eem naèíta\9d chybný font '%s'"
-
-msgid "E611: Can't use font %s"
-msgstr "E611: Nedá sa pou\9eí\9d písmo %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Posielam správu na ukonèenie synovského procesu.\n"
-
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Nemo\9eno nájs\9d okno s titulkom \"%s\""
 
@@ -4095,9 +4082,6 @@ msgstr "E244: Chybn
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Chybný znak '%c' v názve písma \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Chybná 'osfiletype' vo¾ba - pou\9eitie Textu"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: dvojitý signál, konèím\n"
 
index b59b014..477f441 100644 (file)
@@ -1908,19 +1908,6 @@ msgstr "Nahradi
 msgid "&Undo"
 msgstr "&Spä»"
 
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Nemô¾em naèíta» chybný font '%s'"
-
-msgid "E611: Can't use font %s"
-msgstr "E611: Nedá sa pou¾í» písmo %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Posielam správu na ukonèenie synovského procesu.\n"
-
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Nemo¾no nájs» okno s titulkom \"%s\""
 
@@ -4095,9 +4082,6 @@ msgstr "E244: Chybn
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Chybný znak '%c' v názve písma \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Chybná 'osfiletype' voµba - pou¾itie Textu"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: dvojitý signál, konèím\n"
 
index 256cc4d..43c8de9 100644 (file)
@@ -173,7 +173,7 @@ msgstr "Tecken f
 
 #, c-format
 msgid "    line=%ld  id=%d  name=%s"
-msgstr "    line=%ld  id=%d  namn%s"
+msgstr "    line=%ld  id=%d  namn=%s"
 
 #, c-format
 msgid "E96: Can not diff more than %ld buffers"
@@ -2038,21 +2038,6 @@ msgid "&Undo"
 msgstr "&Ã…ngra"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Kan inte läsa in Zap-typsnitt '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Kan inte använda typsnitt %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Skickar meddelande för att avsluta barnprocess.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Kan inte hitta fönstertitel \"%s\""
 
@@ -4303,9 +4288,6 @@ msgstr "E244: Otill
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: OtillÃ¥tet tecken '%c' i typsnittsnamn \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ogiltig 'osfiletype'-flagga - använder Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Dubbelsignal, avslutar\n"
 
index 8516458..7d4b572 100644 (file)
@@ -14,10 +14,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 12:13+0300\n"
+"POT-Creation-Date: 2013-01-17 10:06+0200\n"
 "PO-Revision-Date: 2010-06-18 21:53+0300\n"
 "Last-Translator: Ã€Ã­Ã Ã²Ã®Ã«Â³Ã© Ã‘àõí³ê <sakhnik@gmail.com>\n"
 "Language-Team: Bohdan Vlasyuk <bohdan@vstu.edu.ua>\n"
+"Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=cp1251\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -43,6 +44,9 @@ msgstr "[
 msgid "[Quickfix List]"
 msgstr "[Ñïèñîê Ã¢Ã¨Ã¯Ã°Ã Ã¢Ã«Ã¥Ã­Ã¼]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Ã€Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã¨ Ã¯Ã°Ã¨Ã§Ã¢Ã¥Ã«Ã¨ Ã¤Ã® Ã±ÃªÃ Ã±Ã³Ã¢Ã Ã­Ã­Ã¿ ÃªÃ®Ã¬Ã Ã­Ã¤Ã¨"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Ãåìຠìîæëèâîñò³ Ã°Ã®Ã§Ã¬Â³Ã±Ã²Ã¨Ã²Ã¨ ÃµÃ®Ã· Ã®Ã¤Ã¨Ã­ Ã¡Ã³Ã´Ã¥Ã°, Ã§Ã Ã¢Ã¥Ã°Ã¸Ã¥Ã­Ã­Ã¿ Ã°Ã®Ã¡Ã®Ã²Ã¨..."
 
@@ -174,7 +178,6 @@ msgstr "
 msgid "Top"
 msgstr "Âãîð³"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -235,11 +238,11 @@ msgstr ""
 
 #, c-format
 msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã¡Ã³Ã´Ã¥Ã° \"%s\""
+msgstr "E102: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã¡Ã³Ã´Ã¥Ã° Â«%s»"
 
 #, c-format
 msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: Ãóôåð \"%s\" Ã­Ã¥ Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬Â³ Ã¯Ã®Ã°Â³Ã¢Ã­Ã¿Ã­Ã­Ã¿"
+msgstr "E103: Ãóôåð Â«%s» Ã­Ã¥ Ã¢ Ã°Ã¥Ã¦Ã¨Ã¬Â³ Ã¯Ã®Ã°Â³Ã¢Ã­Ã¿Ã­Ã­Ã¿"
 
 msgid "E787: Buffer changed unexpectedly"
 msgstr "E787: Ãóôåð Ã­Ã¥Ã±Ã¯Ã®Ã¤Â³Ã¢Ã Ã­Ã® Ã§Ã¬Â³Ã­Ã¨Ã¢Ã±Ã¿"
@@ -302,6 +305,13 @@ msgstr " 
 msgid "Hit end of paragraph"
 msgstr "Òðàïèâñÿ ÃªÂ³Ã­Ã¥Ã¶Ã¼ Ã¯Ã Ã°Ã Ã£Ã°Ã Ã´Ã "
 
+# msgstr "E443: "
+msgid "E839: Completion function changed window"
+msgstr "E839: Ã”óíêö³ÿ Ã¤Ã®Ã¯Ã®Ã¢Ã­Ã¥Ã­Ã­Ã¿ Ã§Ã¬Â³Ã­Ã¨Ã«Ã  Ã¢Â³ÃªÃ­Ã®"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Ã”óíêö³ÿ Ã¤Ã®Ã¯Ã®Ã¢Ã­Ã¥Ã­Ã­Ã¿ Ã§Ã­Ã¨Ã¹Ã¨Ã«Ã  Ã²Ã¥ÃªÃ±Ã²"
+
 msgid "'dictionary' option is empty"
 msgstr "Îïö³ÿ 'dictionary' Ã¯Ã®Ã°Ã®Ã¦Ã­Ã¿"
 
@@ -448,7 +458,7 @@ msgid "E711: List value has not enough items"
 msgstr "E711: Ã‘ïèñîê Ã¬Ã Âº Ã­Ã¥Ã¤Ã®Ã±Ã²Ã Ã²Ã­Ã¼Ã® Ã¥Ã«Ã¥Ã¬Ã¥Ã­Ã²Â³Ã¢"
 
 msgid "E690: Missing \"in\" after :for"
-msgstr "E690: Ãðîïóùåíî \"in\" Ã¯Â³Ã±Ã«Ã¿ :for"
+msgstr "E690: Ãðîïóùåíî Â«in» Ã¯Â³Ã±Ã«Ã¿ :for"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -456,7 +466,7 @@ msgstr "E107: 
 
 #, c-format
 msgid "E108: No such variable: \"%s\""
-msgstr "E108: Ã‡Ã¬Â³Ã­Ã­Ã®Â¿ Ã­Ã¥Ã¬Ã Âº: \"%s\""
+msgstr "E108: Ã‡Ã¬Â³Ã­Ã­Ã®Â¿ Ã­Ã¥Ã¬Ã Âº: Â«%s»"
 
 msgid "E743: variable nested too deep for (un)lock"
 msgstr "E743: Ã‡Ã¬Â³Ã­Ã­Ã  Ã¬Ã Âº Ã§Ã Ã¡Ã Ã£Ã Ã²Ã® Ã¢ÃªÃ«Ã Ã¤Ã¥Ã­Ã¼ Ã¹Ã®Ã¡ Ã¡Ã³Ã²Ã¨ Ã§Ã -/â³äêðèòîþ."
@@ -501,11 +511,11 @@ msgstr "E113: 
 
 #, c-format
 msgid "E114: Missing quote: %s"
-msgstr "E114: Ãðàêóº '\"': %s"
+msgstr "E114: Ãðàêóº Ã«Ã Ã¯ÃªÃ¨: %s"
 
 #, c-format
 msgid "E115: Missing quote: %s"
-msgstr "E115: Ãðàêóº \"'\": %s"
+msgstr "E115: Ãðàêóº Ã«Ã Ã¯ÃªÃ¨: %s"
 
 # msgstr "E404: "
 #, c-format
@@ -523,7 +533,7 @@ msgstr "E720: 
 
 #, c-format
 msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Ãîâòîðåííÿ ÃªÃ«Ã¾Ã·Ã  Ã¢ Ã±Ã«Ã®Ã¢Ã­Ã¨ÃªÃ³: \"%s\""
+msgstr "E721: Ãîâòîðåííÿ ÃªÃ«Ã¾Ã·Ã  Ã¢ Ã±Ã«Ã®Ã¢Ã­Ã¨ÃªÃ³: Â«%s»"
 
 # msgstr "E235: "
 #, c-format
@@ -565,6 +575,10 @@ msgstr "E725: 
 msgid "E808: Number or Float required"
 msgstr "E808: Ã’ðåáà Ã¢ÃªÃ Ã§Ã Ã²Ã¨ Number Ã·Ã¨ Float"
 
+# msgstr "E14: "
+msgid "add() argument"
+msgstr "àðãóìåíò add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Ã‡Ã Ã¡Ã Ã£Ã Ã²Ã® Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Â³Ã¢"
 
@@ -580,11 +594,23 @@ msgstr "E785: complete() 
 msgid "&Ok"
 msgstr "&O:Ãàðàçä"
 
+# msgstr "E14: "
+msgid "extend() argument"
+msgstr "àðãóìåíò extend()"
+
 # msgstr "E226: "
 #, c-format
 msgid "E737: Key already exists: %s"
 msgstr "E737: ÃŠÃ«Ã¾Ã· Ã¢Ã¦Ã¥ Â³Ã±Ã­Ã³Âº: %s"
 
+# msgstr "E14: "
+msgid "map() argument"
+msgstr "àðãóìåíò map()"
+
+# msgstr "E14: "
+msgid "filter() argument"
+msgstr "àðãóìåíò filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld Ã°Ã¿Ã¤ÃªÂ³Ã¢: "
@@ -603,6 +629,10 @@ msgstr ""
 msgid "called inputrestore() more often than inputsave()"
 msgstr "Âèêëèêè Ã¤Ã® inputrestore() Ã·Ã Ã±Ã²Â³Ã¸Ã¥, Ã­Â³Ã¦ Ã¤Ã® inputsave()"
 
+# msgstr "E14: "
+msgid "insert() argument"
+msgstr "àðãóìåíò insert()"
+
 # msgstr "E406: "
 msgid "E786: Range not allowed"
 msgstr "E786: Â²Ã­Ã²Ã¥Ã°Ã¢Ã Ã« Ã­Ã¥ Ã¤Ã®Ã§Ã¢Ã®Ã«Ã¥Ã­Ã®"
@@ -630,12 +660,24 @@ msgstr "E241: 
 msgid "E277: Unable to read a server reply"
 msgstr "E277: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ Ã¢Â³Ã¤Ã¯Ã®Ã¢Â³Ã¤Ã¼ Ã±Ã¥Ã°Ã¢Ã¥Ã°Ã "
 
+# msgstr "E14: "
+msgid "remove() argument"
+msgstr "àðãóìåíò remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Ã‡Ã Ã¡Ã Ã£Ã Ã²Ã® Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã¼Ã­Ã¨Ãµ Ã¯Ã®Ã±Ã¨Ã«Ã Ã­Ã¼ (öèêë?)"
 
+# msgstr "E14: "
+msgid "reverse() argument"
+msgstr "àðãóìåíò reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã­Ã Ã¤Â³Ã±Ã«Ã Ã²Ã¨ ÃªÃ«Â³ÂºÃ­Ã²Ã³"
 
+# msgstr "E14: "
+msgid "sort() argument"
+msgstr "àðãóìåíò sort()"
+
 # msgstr "E364: "
 msgid "E702: Sort compare function failed"
 msgstr "E702: Ãîìèëêà Ã³ Ã´Ã³Ã­ÃªÃ¶Â³Â¿ Ã¯Ã®Ã°Â³Ã¢Ã­Ã¿Ã­Ã­Ã¿"
@@ -673,14 +715,6 @@ msgid "E806: using Float as a String"
 msgstr "E806: Float Ã¢Ã¦Ã¨Ã²Ã® Ã¿Ãª String"
 
 #, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Ãàçâà Ã§Ã¬Â³Ã­Ã­Ã®Â¿ Funcref Ã¬Ã Âº Ã¯Ã®Ã·Ã¨Ã­Ã Ã²Ã¨Ã±Ã¿ Ã§ Ã¢Ã¥Ã«Ã¨ÃªÃ®Â¿ Ã«Â³Ã²Ã¥Ã°Ã¨: %s"
-
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Ãàçâà Ã§Ã¬Â³Ã­Ã­Ã®Â¿ Ã±Ã¯Â³Ã¢Ã¯Ã Ã¤Ã Âº Ã§ Â³Ã±Ã­Ã³Ã¾Ã·Ã®Ã¾ Ã´Ã³Ã­ÃªÃ¶Â³ÂºÃ¾: %s"
-
-#, c-format
 msgid "E706: Variable type mismatch for: %s"
 msgstr "E706: Ãåïðàâèëüíèé Ã²Ã¨Ã¯ Ã§Ã¬Â³Ã­Ã­Ã®Â¿: %s"
 
@@ -689,6 +723,14 @@ msgid "E795: Cannot delete variable %s"
 msgstr "E795: ÃÃ¥ Ã¬Ã®Ã¦Ã­Ã  Ã§Ã­Ã¨Ã¹Ã¨Ã²Ã¨ Ã§Ã¬Â³Ã­Ã­Ã³ %s"
 
 #, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: Ãàçâà Ã§Ã¬Â³Ã­Ã­Ã®Â¿ Funcref Ã¬Ã Âº Ã¯Ã®Ã·Ã¨Ã­Ã Ã²Ã¨Ã±Ã¿ Ã§ Ã¢Ã¥Ã«Ã¨ÃªÃ®Â¿ Ã«Â³Ã²Ã¥Ã°Ã¨: %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Ãàçâà Ã§Ã¬Â³Ã­Ã­Ã®Â¿ Ã±Ã¯Â³Ã¢Ã¯Ã Ã¤Ã Âº Ã§ Â³Ã±Ã­Ã³Ã¾Ã·Ã®Ã¾ Ã´Ã³Ã­ÃªÃ¶Â³ÂºÃ¾: %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: Ã‡Ã­Ã Ã·Ã¥Ã­Ã­Ã¿ Ã§Ã ÃµÃ¨Ã¹Ã¥Ã­Ã¥: %s"
 
@@ -714,6 +756,10 @@ msgstr "E124: 
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Ãåäîçâîëåíèé Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Ãàçâà Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã³ Ã¯Ã®Ã¢Ã²Ã®Ã°Ã¾ÂºÃ²Ã¼Ã±Ã¿: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Ãðàêóº :endfunction"
 
@@ -785,7 +831,7 @@ msgid "No old files"
 msgstr "Æîäíîãî Ã±Ã²Ã Ã°Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã³"
 
 msgid "Entering Debug mode.  Type \"cont\" to continue."
-msgstr "Ãåæèì Ã­Ã Ã«Ã Ã£Ã®Ã¤Ã¦Ã¥Ã­Ã­Ã¿.  Ã™Ã®Ã¡ Ã¯Ã°Ã®Ã¤Ã®Ã¢Ã¦Ã¨Ã²Ã¨ Ã¢Ã¢Ã¥Ã¤Â³Ã²Ã¼ \"cont\"."
+msgstr "Ãåæèì Ã­Ã Ã«Ã Ã£Ã®Ã¤Ã¦Ã¥Ã­Ã­Ã¿.  Ã™Ã®Ã¡ Ã¯Ã°Ã®Ã¤Ã®Ã¢Ã¦Ã¨Ã²Ã¨ Ã¢Ã¢Ã¥Ã¤Â³Ã²Ã¼ Â«cont»."
 
 #, c-format
 msgid "line %ld: %s"
@@ -797,7 +843,7 @@ msgstr "
 
 #, c-format
 msgid "Breakpoint in \"%s%s\" line %ld"
-msgstr "Òî÷êà Ã§Ã³Ã¯Ã¨Ã­ÃªÃ¨ Ã¢ \"%s%s\" Ã°Ã¿Ã¤Ã®Ãª %ld"
+msgstr "Òî÷êà Ã§Ã³Ã¯Ã¨Ã­ÃªÃ¨ Ã¢ Â«%s%s» Ã°Ã¿Ã¤Ã®Ãª %ld"
 
 #, c-format
 msgid "E161: Breakpoint not found: %s"
@@ -811,21 +857,21 @@ msgid "%3d  %s %s  line %ld"
 msgstr "%3d %s %s   Ã°Ã¿Ã¤Ã®Ãª %ld"
 
 msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: Ã‘ïî÷àòêó Ã§Ã°Ã®Ã¡Â³Ã²Ã¼ \":profile start {ôàéë}\""
+msgstr "E750: Ã‘ïî÷àòêó Ã§Ã°Ã®Ã¡Â³Ã²Ã¼ Â«:profile start {ôàéë}»"
 
 msgid "Save As"
 msgstr "Çáåðåãòè Ã¿Ãª"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
-msgstr "Çáåðåãòè Ã§Ã¬Â³Ã­Ã¨ Ã¢ \"%s\"?"
+msgstr "Çáåðåãòè Ã§Ã¬Â³Ã­Ã¨ Ã¢ Â«%s»?"
 
 msgid "Untitled"
 msgstr "Ãåíàçâàíèé"
 
 #, c-format
 msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: Ãóôåð \"%s\" Ã¬Ã Âº Ã­Ã¥Ã§Ã¡Ã¥Ã°Ã¥Ã¦Ã¥Ã­Â³ Ã§Ã¬Â³Ã­Ã¨"
+msgstr "E162: Ãóôåð Â«%s» Ã¬Ã Âº Ã­Ã¥Ã§Ã¡Ã¥Ã°Ã¥Ã¦Ã¥Ã­Â³ Ã§Ã¬Â³Ã­Ã¨"
 
 msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
 msgstr ""
@@ -847,38 +893,38 @@ msgstr "E666: 
 # msgstr "E195: "
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
-msgstr "Ãîøóê \"%s\" Ã¢ \"%s\""
+msgstr "Ãîøóê Â«%s» Ã¢ Â«%s»"
 
 #, c-format
 msgid "Searching for \"%s\""
-msgstr "Ãîøóê \"%s\""
+msgstr "Ãîøóê Â«%s»"
 
 #, c-format
 msgid "not found in 'runtimepath': \"%s\""
-msgstr " 'runtimepath' Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã® \"%s\""
+msgstr " 'runtimepath' Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã® Â«%s»"
 
 msgid "Source Vim script"
 msgstr "Ãðî÷èòàòè Ã±ÃªÃ°Ã¨Ã¯Ã² Vim"
 
 #, c-format
 msgid "Cannot source a directory: \"%s\""
-msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ ÃªÃ Ã²Ã Ã«Ã®Ã£: \"%s\""
+msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ ÃªÃ Ã²Ã Ã«Ã®Ã£: Â«%s»"
 
 #, c-format
 msgid "could not source \"%s\""
-msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Ã¨ÃªÃ®Ã­Ã Ã²Ã¨ \"%s\""
+msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Ã¨ÃªÃ®Ã­Ã Ã²Ã¨ Â«%s»"
 
 #, c-format
 msgid "line %ld: could not source \"%s\""
-msgstr "ðÿäîê %ld: Ã­Ã¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Ã¨ÃªÃ®Ã­Ã Ã²Ã¨ \"%s\""
+msgstr "ðÿäîê %ld: Ã­Ã¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Ã¨ÃªÃ®Ã­Ã Ã²Ã¨ Â«%s»"
 
 #, c-format
 msgid "sourcing \"%s\""
-msgstr "âèêîíóºòüñÿ \"%s\""
+msgstr "âèêîíóºòüñÿ Â«%s»"
 
 #, c-format
 msgid "line %ld: sourcing \"%s\""
-msgstr "ðÿäîê %ld: Ã¢Ã¨ÃªÃ®Ã­Ã³ÂºÃ²Ã¼Ã±Ã¿ \"%s\""
+msgstr "ðÿäîê %ld: Ã¢Ã¨ÃªÃ®Ã­Ã³ÂºÃ²Ã¼Ã±Ã¿ Â«%s»"
 
 #, c-format
 msgid "finished sourcing %s"
@@ -912,11 +958,11 @@ msgstr "E168: :finish 
 
 #, c-format
 msgid "Current %slanguage: \"%s\""
-msgstr "Ìîâà (%s): \"%s\""
+msgstr "Ìîâà (%s): Â«%s»"
 
 #, c-format
 msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Ã±Ã²Ã Ã­Ã®Ã¢Ã¨Ã²Ã¨ Ã¬Ã®Ã¢Ã³ \"%s\""
+msgstr "E197: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Ã±Ã²Ã Ã­Ã®Ã¢Ã¨Ã²Ã¨ Ã¬Ã®Ã¢Ã³ Â«%s»"
 
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
@@ -959,7 +1005,7 @@ msgstr "E136: viminfo: 
 
 #, c-format
 msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "Ç÷èòóºòüñÿ Ã´Ã Ã©Ã« viminfo: \"%s\"%s%s%s"
+msgstr "Ç÷èòóºòüñÿ Ã´Ã Ã©Ã« viminfo: Â«%s»%s%s%s"
 
 msgid " info"
 msgstr " Â³Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Â³Ã¿"
@@ -976,7 +1022,7 @@ msgstr " 
 #. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: ÃÃ¥ Ã¤Ã®Ã§Ã¢Ã®Ã«Ã¥Ã­Ã® Ã§Ã Ã¯Ã¨Ã± Ã³ Ã´Ã Ã©Ã« viminfo: \"%s\""
+msgstr "E137: ÃÃ¥ Ã¤Ã®Ã§Ã¢Ã®Ã«Ã¥Ã­Ã® Ã§Ã Ã¯Ã¨Ã± Ã³ Ã´Ã Ã©Ã« viminfo: %s"
 
 #, c-format
 msgid "E138: Can't write viminfo file %s!"
@@ -984,14 +1030,13 @@ msgstr "E138: 
 
 #, c-format
 msgid "Writing viminfo file \"%s\""
-msgstr "Çàïèñóºòüñÿ Ã´Ã Ã©Ã« viminfo \"%s\""
+msgstr "Çàïèñóºòüñÿ Ã´Ã Ã©Ã« viminfo Â«%s»"
 
 #. Write the info:
 #, c-format
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Ã–åé Ã´Ã Ã©Ã« Ã Ã¢Ã²Ã®Ã¬Ã Ã²Ã¨Ã·Ã­Ã® Ã±Ã²Ã¢Ã®Ã°Ã¥Ã­Ã¨Ã© Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -999,7 +1044,6 @@ msgstr ""
 "# ÃŒÃ®Ã¦Ã¥Ã²Ã¥ Ã°Ã¥Ã¤Ã Ã£Ã³Ã¢Ã Ã²Ã¨, Ã Ã«Ã¥ ÃŽÃÃ…ÃÅÆÃÃŽ!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Ã‡Ã­Ã Ã·Ã¥Ã­Ã­Ã¿ 'encoding' Ã¯Â³Ã¤ Ã·Ã Ã± Ã±Ã²Ã¢Ã®Ã°Ã¥Ã­Ã­Ã¿ Ã¶Ã¼Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã³\n"
 
@@ -1014,11 +1058,11 @@ msgstr "E140: 
 
 #, c-format
 msgid "Overwrite existing file \"%s\"?"
-msgstr "Ãåðåïèñàòè Â³Ã±Ã­Ã³Ã¾Ã·Ã¨Ã© Ã´Ã Ã©Ã« \"%s\"?"
+msgstr "Ãåðåïèñàòè Â³Ã±Ã­Ã³Ã¾Ã·Ã¨Ã© Ã´Ã Ã©Ã« Â«%s»?"
 
 #, c-format
 msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "Ôàéë Ã®Ã¡Ã¬Â³Ã­Ã³ \"%s\" Â³Ã±Ã­Ã³Âº, Ã¯Ã¥Ã°Ã¥Ã§Ã Ã¯Ã¨Ã±Ã Ã²Ã¨?"
+msgstr "Ôàéë Ã®Ã¡Ã¬Â³Ã­Ã³ Â«%s» Â³Ã±Ã­Ã³Âº, Ã¯Ã¥Ã°Ã¥Ã§Ã Ã¯Ã¨Ã±Ã Ã²Ã¨?"
 
 #, c-format
 msgid "E768: Swap file exists: %s (:silent! overrides)"
@@ -1036,7 +1080,7 @@ msgid ""
 "'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"Äëÿ \"%s\" Ã¢Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­Ã® 'readonly'.\n"
+"Äëÿ Â«%s» Ã¢Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­Ã® 'readonly'.\n"
 "Ãàæàºòå Ã¢Ã±Ã¥ Ã®Ã¤Ã­Ã® Ã¯Ã°Ã®Ã¤Ã®Ã¢Ã¦Ã¨Ã²Ã¨ Ã§Ã Ã¯Ã¨Ã±?"
 
 #, c-format
@@ -1045,13 +1089,13 @@ msgid ""
 "It may still be possible to write it.\n"
 "Do you wish to try?"
 msgstr ""
-"Ôàéë \"%s\" Ã¤Ã®Ã§Ã¢Ã®Ã«Ã¥Ã­Ã® Ã²Â³Ã«Ã¼ÃªÃ¨ Ã·Ã¨Ã²Ã Ã²Ã¨.\n"
+"Ôàéë Â«%s» Ã¤Ã®Ã§Ã¢Ã®Ã«Ã¥Ã­Ã® Ã²Â³Ã«Ã¼ÃªÃ¨ Ã·Ã¨Ã²Ã Ã²Ã¨.\n"
 "Ãðîòå, Ã¬Ã®Ã¦Ã«Ã¨Ã¢Ã®, Ã©Ã®Ã£Ã® Ã¬Ã®Ã¦Ã­Ã  Ã§Ã Ã¯Ã¨Ã±Ã Ã²Ã¨.\n"
 "Õî÷åòå Ã±Ã¯Ã°Ã®Ã¡Ã³Ã¢Ã Ã²Ã¨?"
 
 #, c-format
 msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: \"%s\" Ã²Â³Ã«Ã¼ÃªÃ¨ Ã¤Ã«Ã¿ Ã·Ã¨Ã²Ã Ã­Ã­Ã¿ (! Ã¹Ã®Ã¡ Ã­Ã¥ Ã§Ã¢Ã Ã¦Ã Ã²Ã¨)"
+msgstr "E505: Â«%s» Ã²Â³Ã«Ã¼ÃªÃ¨ Ã¤Ã«Ã¿ Ã·Ã¨Ã²Ã Ã­Ã­Ã¿ (! Ã¹Ã®Ã¡ Ã­Ã¥ Ã§Ã¢Ã Ã¦Ã Ã²Ã¨)"
 
 msgid "Edit File"
 msgstr "Ãåäàãóâàòè Ã”àéë"
@@ -1108,7 +1152,6 @@ msgstr "E148: 
 msgid "Pattern found in every line: %s"
 msgstr "Çðàçîê Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã® Ã³ ÃªÃ®Ã¦Ã­Ã®Ã¬Ã³ Ã°Ã¿Ã¤ÃªÃ³: %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1131,7 +1174,7 @@ msgstr "E149: 
 
 #, c-format
 msgid "Sorry, help file \"%s\" not found"
-msgstr "Âèáà÷òå, Ã´Ã Ã©Ã« Ã¤Ã®Ã¯Ã®Ã¬Ã®Ã£Ã¨ \"%s\" Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã®"
+msgstr "Âèáà÷òå, Ã´Ã Ã©Ã« Ã¤Ã®Ã¯Ã®Ã¬Ã®Ã£Ã¨ Â«%s» Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã®"
 
 #, c-format
 msgid "E150: Not a directory: %s"
@@ -1151,7 +1194,7 @@ msgstr "E670: Ì³
 
 #, c-format
 msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Ãîâòîðåííÿ Ã²Ã¥Â´Ã³ \"%s\" Ã³ Ã´Ã Ã©Ã«Â³ %s/%s"
+msgstr "E154: Ãîâòîðåííÿ Ã²Ã¥Â´Ã³ Â«%s» Ã³ Ã´Ã Ã©Ã«Â³ %s/%s"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
@@ -1192,7 +1235,7 @@ msgid "[Deleted]"
 msgstr "[Çíèùåíî]"
 
 msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
-msgstr "Ãåæèì Ex. Ã„ëÿ Ã¯Ã®Ã¢Ã¥Ã°Ã­Ã¥Ã­Ã­Ã¿ Ã¤Ã® Ã­Ã®Ã°Ã¬Ã Ã«Ã¼Ã­Ã®Ã£Ã® Ã°Ã¥Ã¦Ã¨Ã¬Ã³ Ã¢Ã¨ÃªÃ®Ã­Ã Ã©Ã²Ã¥ \"visual\""
+msgstr "Ãåæèì Ex. Ã„ëÿ Ã¯Ã®Ã¢Ã¥Ã°Ã­Ã¥Ã­Ã­Ã¿ Ã¤Ã® Ã­Ã®Ã°Ã¬Ã Ã«Ã¼Ã­Ã®Ã£Ã® Ã°Ã¥Ã¦Ã¨Ã¬Ã³ Ã¢Ã¨ÃªÃ®Ã­Ã Ã©Ã²Ã¥ Â«visual»"
 
 msgid "E501: At end-of-file"
 msgstr "E501: ÃŠÂ³Ã­Ã¥Ã¶Ã¼ Ã´Ã Ã©Ã«Ã³"
@@ -1220,7 +1263,7 @@ msgid "E493: Backwards range given"
 msgstr "E493: Â²Ã­Ã²Ã¥Ã°Ã¢Ã Ã« Ã§Ã Ã¤Ã Ã­Ã® Ã­Ã Ã¢Ã¨Ã¢Ã®Ã°Â³Ã²"
 
 msgid "Backwards range given, OK to swap"
-msgstr "²íòåðâàë Ã§Ã Ã¤Ã Ã­Ã® Ã­Ã Ã¢Ã¨Ã¢Ã®Ã°Â³Ã², Ã¹Ã®Ã¡ Ã¯Ã®Ã¬Â³Ã­Ã¿Ã²Ã¨ Ã¬Â³Ã±Ã¶Ã¿Ã¬Ã¨ -- ÃƒÃ€ÃÀÇÄ"
+msgstr "²íòåðâàë Ã§Ã Ã¤Ã Ã­Ã® Ã­Ã Ã¢Ã¨Ã¢Ã®Ã°Â³Ã², Ã¹Ã®Ã¡ Ã¯Ã®Ã¬Â³Ã­Ã¿Ã²Ã¨ Ã¬Â³Ã±Ã¶Ã¿Ã¬Ã¨ \97 ÃƒÃ€ÃÀÇÄ"
 
 msgid "E494: Use w or w>>"
 msgstr "E494: Ã‘ïðîáóéòå w Ã Ã¡Ã® w>>"
@@ -1288,6 +1331,9 @@ msgstr "E182: 
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: ÃŠÃ®Ã¬Ã Ã­Ã¤Ã¨ ÃªÃ®Ã°Ã¨Ã±Ã²Ã³Ã¢Ã Ã·Ã  Ã¯Ã®Ã¢Ã¨Ã­Ã­Â³ Ã¯Ã®Ã·Ã¨Ã­Ã Ã²Ã¨Ã±Ã¿ Ã§ Ã¢Ã¥Ã«Ã¨ÃªÃ®Â¿ Ã«Â³Ã²Ã¥Ã°Ã¨"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: Ã‡Ã Ã°Ã¥Ã§Ã¥Ã°Ã¢Ã®Ã¢Ã Ã­Ã  Ã­Ã Ã§Ã¢Ã , Ã­Ã¥ Ã¬Ã®Ã¦Ã­Ã  Ã¢Ã¨ÃªÃ®Ã°Ã¨Ã±Ã²Ã Ã²Ã¨ Ã¤Ã«Ã¿ ÃªÃ®Ã°Ã¨Ã±Ã²Ã³Ã¢Ã Ã¶Ã¼ÃªÃ®Â¿ ÃªÃ®Ã¬Ã Ã­Ã¤Ã¨"
+
 # msgstr "E183: "
 #, c-format
 msgid "E184: No such user-defined command: %s"
@@ -1309,8 +1355,8 @@ msgstr "
 
 # msgstr "E184: "
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã±ÃµÃ¥Ã¬Ã³ ÃªÃ®Ã«Ã¼Ã®Ã°Â³Ã¢ %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã±ÃµÃ¥Ã¬Ã³ ÃªÃ®Ã«Ã¼Ã®Ã°Â³Ã¢ Â«%s»"
 
 msgid "Greetings, Vim user!"
 msgstr "³òàííÿ, ÃªÃ®Ã°Ã¨Ã±Ã²Ã³Ã¢Ã Ã·Ã³ Vim!"
@@ -1380,12 +1426,12 @@ msgstr "E739: 
 
 #, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: Ã”àéë \"%s\" Â³Ã±Ã­Ã³Âº (! Ã¹Ã®Ã¡ Ã­Ã¥ Ã§Ã¢Ã Ã¦Ã Ã²Ã¨)"
+msgstr "E189: Ã”àéë Â«%s» Â³Ã±Ã­Ã³Âº (! Ã¹Ã®Ã¡ Ã­Ã¥ Ã§Ã¢Ã Ã¦Ã Ã²Ã¨)"
 
 # msgstr "E189: "
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã¨ \"%s\" Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã³"
+msgstr "E190: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã¨ Â«%s» Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã¨Ã±Ã³"
 
 # msgstr "E190: "
 #. set mark
@@ -1404,23 +1450,26 @@ msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: Ãåìຠíàçâè Ã¢Ã²Ã®Ã°Ã¨Ã­Ã­Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã³ Ã¤Ã«Ã¿ Ã§Ã Ã¬Â³Ã­Ã¨ '#'"
 
 msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: Ãåìຠíàçâè Ã´Ã Ã©Ã«Ã³ Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã¨ Ã¤Ã«Ã¿ Ã§Ã Ã¬Â³Ã­Ã¨ \"<afile>\""
+msgstr "E495: Ãåìຠíàçâè Ã´Ã Ã©Ã«Ã³ Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã¨ Ã¤Ã«Ã¿ Ã§Ã Ã¬Â³Ã­Ã¨ Â«<afile>»"
 
 msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: Ãåìຠíîìåðà Ã¡Ã³Ã´Ã¥Ã°Ã  Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã¨ Ã¤Ã«Ã¿ Ã§Ã Ã¬Â³Ã­Ã¨ \"<abuf>\""
+msgstr "E496: Ãåìຠíîìåðà Ã¡Ã³Ã´Ã¥Ã°Ã  Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã¨ Ã¤Ã«Ã¿ Ã§Ã Ã¬Â³Ã­Ã¨ Â«<abuf>»"
 
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: Ãåìຠíàçâè Ã§Ã¡Â³Ã£Ã³ Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã¨ Ã¤Ã«Ã¿ Ã§Ã Ã¬Â³Ã­Ã¨ \"<amatch>\""
+msgstr "E497: Ãåìຠíàçâè Ã§Ã¡Â³Ã£Ã³ Ã Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã¨ Ã¤Ã«Ã¿ Ã§Ã Ã¬Â³Ã­Ã¨ Â«<amatch>»"
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: Ãåìຠíàçâè Ã´Ã Ã©Ã«Ã³ :source Ã¤Ã«Ã¿ Ã§Ã Ã¬Â³Ã­Ã¨ \"<sfile>\""
+msgstr "E498: Ãåìຠíàçâè Ã´Ã Ã©Ã«Ã³ :source Ã¤Ã«Ã¿ Ã§Ã Ã¬Â³Ã­Ã¨ Â«<sfile>»"
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: Ã­Ã¥Ã¬Ã Âº Ã­Ã®Ã¬Ã¥Ã°Ã  Ã°Ã¿Ã¤ÃªÃ , Ã¹Ã®Ã¡ Ã¢Ã¨ÃªÃ®Ã°Ã¨Ã±Ã²Ã Ã²Ã¨ Ã§ Â«<sfile>»"
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: Ãàçâà Ã´Ã Ã©Ã«Ã³ Ã¤Ã«Ã¿ '%' Ã·Ã¨ '#' Ã¯Ã®Ã°Ã®Ã¦Ã­Ã¿, Ã¯Ã°Ã Ã¶Ã¾Âº Ã«Ã¨Ã¸Ã¥ Ã§ \":p:h\""
+msgstr "E499: Ãàçâà Ã´Ã Ã©Ã«Ã³ Ã¤Ã«Ã¿ '%' Ã·Ã¨ '#' Ã¯Ã®Ã°Ã®Ã¦Ã­Ã¿, Ã¯Ã°Ã Ã¶Ã¾Âº Ã«Ã¨Ã¸Ã¥ Ã§ Â«:p:h»"
 
 msgid "E500: Evaluates to an empty string"
-msgstr "E500: Ãåçóëüòàò -- Ã¯Ã®Ã°Ã®Ã¦Ã­Â³Ã© Ã°Ã¿Ã¤Ã®Ãª"
+msgstr "E500: Ãåçóëüòàò \97 Ã¯Ã®Ã°Ã®Ã¦Ã­Â³Ã© Ã°Ã¿Ã¤Ã®Ãª"
 
 msgid "E195: Cannot open viminfo file for reading"
 msgstr "E195: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ Ã´Ã Ã©Ã« viminfo"
@@ -1652,6 +1701,9 @@ msgstr "[
 msgid "[converted]"
 msgstr "[êîíâåðòîâàíî]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[çàøèôðîâàíî]"
 
@@ -1853,50 +1905,50 @@ msgstr "
 
 #, c-format
 msgid "E208: Error writing to \"%s\""
-msgstr "E208: Ãîìèëêà Ã§Ã Ã¯Ã¨Ã±Ã³ Ã³ \"%s\""
+msgstr "E208: Ãîìèëêà Ã§Ã Ã¯Ã¨Ã±Ã³ Ã³ Â«%s»"
 
 #, c-format
 msgid "E209: Error closing \"%s\""
-msgstr "E209: Ãîìèëêà Ã§Ã ÃªÃ°Ã¨Ã²Ã²Ã¿ \"%s\""
+msgstr "E209: Ãîìèëêà Ã§Ã ÃªÃ°Ã¨Ã²Ã²Ã¿ Â«%s»"
 
 #, c-format
 msgid "E210: Error reading \"%s\""
-msgstr "E210: Ãîìèëêà Ã·Ã¨Ã²Ã Ã­Ã­Ã¿ \"%s\""
+msgstr "E210: Ãîìèëêà Ã·Ã¨Ã²Ã Ã­Ã­Ã¿ Â«%s»"
 
 msgid "E246: FileChangedShell autocommand deleted buffer"
 msgstr "E246: Ã€Ã¢Ã²Ã®ÃªÃ®Ã¬Ã Ã­Ã¤Ã  FileChangedShell Ã§Ã­Ã¨Ã¹Ã¨Ã«Ã  Ã¡Ã³Ã´Ã¥Ã°"
 
 #, c-format
 msgid "E211: File \"%s\" no longer available"
-msgstr "E211: Ã”àéë \"%s\" Ã¡Â³Ã«Ã¼Ã¸Ã¥ Ã­Ã¥ Ã¤Ã®Ã±Ã¿Ã¦Ã­Ã¨Ã©"
+msgstr "E211: Ã”àéë Â«%s» Ã¡Â³Ã«Ã¼Ã¸Ã¥ Ã­Ã¥ Ã¤Ã®Ã±Ã¿Ã¦Ã­Ã¨Ã©"
 
 #, c-format
 msgid ""
 "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
 "well"
-msgstr "W12: Ã‡Ã Ã±Ã²Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã­Ã¿: Ã”àéë \"%s\" Ã§Ã¬Â³Ã­Ã¨Ã¢Ã±Ã¿, Ã Ã«Ã¥ Ã© Ã¡Ã³Ã´Ã¥Ã° Ã³ Vim Ã²Ã ÃªÃ®Ã¦"
+msgstr "W12: Ã‡Ã Ã±Ã²Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã­Ã¿: Ã”àéë Â«%s» Ã§Ã¬Â³Ã­Ã¨Ã¢Ã±Ã¿, Ã Ã«Ã¥ Ã© Ã¡Ã³Ã´Ã¥Ã° Ã³ Vim Ã²Ã ÃªÃ®Ã¦"
 
 msgid "See \":help W12\" for more info."
-msgstr "Äèâ. \":help W12\" Ã¤Ã«Ã¿ Ã³Ã²Ã®Ã·Ã­Ã¥Ã­Ã­Ã¿."
+msgstr "Äèâ. Â«:help W12» Ã¤Ã«Ã¿ Ã³Ã²Ã®Ã·Ã­Ã¥Ã­Ã­Ã¿."
 
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: Ã‡Ã Ã±Ã²Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã­Ã¿: Ã”àéë \"%s\" Ã§Ã¬Â³Ã­Ã¨Ã¢Ã±Ã¿ Ã¯Â³Ã±Ã«Ã¿ Ã¯Ã®Ã·Ã Ã²ÃªÃ³ Ã°Ã¥Ã¤Ã Ã£Ã³Ã¢Ã Ã­Ã­Ã¿"
+msgstr "W11: Ã‡Ã Ã±Ã²Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã­Ã¿: Ã”àéë Â«%s» Ã§Ã¬Â³Ã­Ã¨Ã¢Ã±Ã¿ Ã¯Â³Ã±Ã«Ã¿ Ã¯Ã®Ã·Ã Ã²ÃªÃ³ Ã°Ã¥Ã¤Ã Ã£Ã³Ã¢Ã Ã­Ã­Ã¿"
 
 msgid "See \":help W11\" for more info."
-msgstr "Äèâ. \":help W11\" Ã¤Ã«Ã¿ Ã³Ã²Ã®Ã·Ã­Ã¥Ã­Ã­Ã¿."
+msgstr "Äèâ. Â«:help W11» Ã¤Ã«Ã¿ Ã³Ã²Ã®Ã·Ã­Ã¥Ã­Ã­Ã¿."
 
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
-"W16: Ã‡Ã Ã±Ã²Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã­Ã¿: Ãåæèì Ã´Ã Ã©Ã«Ã³ \"%s\" Ã§Ã¬Â³Ã­Ã¨Ã¢Ã±Ã¿ Ã¯Â³Ã±Ã«Ã¿ Ã¯Ã®Ã·Ã Ã²ÃªÃ³ Ã°Ã¥Ã¤Ã Ã£Ã³Ã¢Ã Ã­Ã­Ã¿"
+"W16: Ã‡Ã Ã±Ã²Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã­Ã¿: Ãåæèì Ã´Ã Ã©Ã«Ã³ Â«%s» Ã§Ã¬Â³Ã­Ã¨Ã¢Ã±Ã¿ Ã¯Â³Ã±Ã«Ã¿ Ã¯Ã®Ã·Ã Ã²ÃªÃ³ Ã°Ã¥Ã¤Ã Ã£Ã³Ã¢Ã Ã­Ã­Ã¿"
 
 msgid "See \":help W16\" for more info."
-msgstr "Äèâ. \":help W16\" Ã¤Ã«Ã¿ Ã³Ã²Ã®Ã·Ã­Ã¥Ã­Ã­Ã¿."
+msgstr "Äèâ. Â«:help W16» Ã¤Ã«Ã¿ Ã³Ã²Ã®Ã·Ã­Ã¥Ã­Ã­Ã¿."
 
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: Ã‡Ã Ã±Ã²Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã­Ã¿: Ã”àéë \"%s\" Ã¡Ã³Ã«Ã® Ã±Ã²Ã¢Ã®Ã°Ã¥Ã­Ã® Ã¯Â³Ã±Ã«Ã¿ Ã¯Ã®Ã·Ã Ã²ÃªÃ³ Ã°Ã¥Ã¤Ã Ã£Ã³Ã¢Ã Ã­Ã­Ã¿"
+msgstr "W13: Ã‡Ã Ã±Ã²Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã­Ã¿: Ã”àéë Â«%s» Ã¡Ã³Ã«Ã® Ã±Ã²Ã¢Ã®Ã°Ã¥Ã­Ã® Ã¯Â³Ã±Ã«Ã¿ Ã¯Ã®Ã·Ã Ã²ÃªÃ³ Ã°Ã¥Ã¤Ã Ã£Ã³Ã¢Ã Ã­Ã­Ã¿"
 
 msgid "Warning"
 msgstr "Çàñòåðåæåííÿ"
@@ -1910,11 +1962,11 @@ msgstr ""
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Â³Ã¤Ã£Ã®Ã²Ã³Ã¢Ã Ã²Ã¨ \"%s\" Ã¤Ã«Ã¿ Ã¯Ã¥Ã°Ã¥Ã·Ã¨Ã²Ã Ã­Ã­Ã¿"
+msgstr "E462: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Â³Ã¤Ã£Ã®Ã²Ã³Ã¢Ã Ã²Ã¨ Â«%s», Ã¹Ã®Ã¡ Ã¯Ã¥Ã°Ã¥Ã·Ã¨Ã²Ã Ã²Ã¨"
 
 #, c-format
 msgid "E321: Could not reload \"%s\""
-msgstr "E321: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã¥Ã°Ã¥Ã·Ã¨Ã²Ã Ã²Ã¨ \"%s\""
+msgstr "E321: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã¥Ã°Ã¥Ã·Ã¨Ã²Ã Ã²Ã¨ Â«%s»"
 
 msgid "--Deleted--"
 msgstr "--Çíèùåíî--"
@@ -1926,7 +1978,7 @@ msgstr "
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
-msgstr "E367: Ãåìຠòàêãðóïè: \"%s\""
+msgstr "E367: Ãåìຠòàêãðóïè: Â«%s»"
 
 #, c-format
 msgid "E215: Illegal character after *: %s"
@@ -1968,7 +2020,7 @@ msgstr "E218: 
 # msgstr "E218: "
 #, c-format
 msgid "%s Auto commands for \"%s\""
-msgstr "Àâòîêîìàíäè %s Ã¤Ã«Ã¿ \"%s\""
+msgstr "Àâòîêîìàíäè %s Ã¤Ã«Ã¿ Â«%s»"
 
 #, c-format
 msgid "Executing %s"
@@ -2067,6 +2119,12 @@ msgstr "Scrollbar Widget: 
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã±Ã²Ã¢Ã®Ã°Ã¨Ã²Ã¨ BalloonEval Ã§ Ã¯Ã®Ã¢Â³Ã¤Ã®Ã¬Ã«Ã¥Ã­Ã­Ã¿Ã¬ Â³ Ã´Ã³Ã­ÃªÃ¶Â³ÂºÃ¾"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã±Ã²Ã¢Ã®Ã°Ã¨Ã²Ã¨ Ã­Ã®Ã¢Ã¨Ã© Ã¯Ã°Ã®Ã¶Ã¥Ã± Ã¤Ã«Ã¿ GUI"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Ã„î÷³ðí³é Ã¯Ã°Ã®Ã¶Ã¥Ã± Ã­Ã¥ Ã§Ã¬Â³Ã£ Ã§Ã Ã¯Ã³Ã±Ã²Ã¨Ã²Ã¨ GUI"
+
 # msgstr "E228: "
 msgid "E229: Cannot start the GUI"
 msgstr "E229: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã Ã¯Ã³Ã±Ã²Ã¨Ã²Ã¨ GUI"
@@ -2074,7 +2132,7 @@ msgstr "E229: 
 # msgstr "E229: "
 #, c-format
 msgid "E230: Cannot read from \"%s\""
-msgstr "E230: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ Ã§ \"%s\""
+msgstr "E230: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ Ã§ Â«%s»"
 
 msgid "E665: Cannot start GUI, no valid font found"
 msgstr "E665: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã Ã¯Ã³Ã±Ã²Ã¨Ã²Ã¨ GUI, Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã® Ã¸Ã°Ã¨Ã´Ã²"
@@ -2148,7 +2206,7 @@ msgid "Replace All"
 msgstr "Çàì³íèòè Ã³Ã±Â³"
 
 msgid "Vim: Received \"die\" request from session manager\n"
-msgstr "Vim: ÃŽÃ²Ã°Ã¨Ã¬Ã Ã¢ Ã§Ã Ã¯Ã¨Ã² \"die\" Ã¢Â³Ã¤ Ã¬Ã¥Ã­Ã¥Ã¤Ã¦Ã¥Ã°Ã  Ã±Ã¥Ã±Â³Ã©\n"
+msgstr "Vim: ÃŽÃ²Ã°Ã¨Ã¬Ã Ã¢ Ã§Ã Ã¯Ã¨Ã² Â«die» Ã¢Â³Ã¤ Ã¬Ã¥Ã­Ã¥Ã¤Ã¦Ã¥Ã°Ã  Ã±Ã¥Ã±Â³Ã©\n"
 
 msgid "Close"
 msgstr "Çàêðèòè"
@@ -2199,29 +2257,12 @@ msgid "&Undo"
 msgstr "&U:Ñêàñóâàòè"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã Ã¢Ã Ã­Ã²Ã Ã¦Ã¨Ã²Ã¨ Ã¸Ã°Ã¨Ã´Ã² Zap '%s'"
-
-# msgstr "E235: "
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Ã¨ÃªÃ®Ã°Ã¨Ã±Ã²Ã Ã²Ã¨ Ã¸Ã°Ã¨Ã´Ã² %s"
-
-# msgstr "E242: "
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Ãîñèëàºòüñÿ Ã¯Ã®Ã¢Â³Ã¤Ã®Ã¬Ã«Ã¥Ã­Ã­Ã¿ Ã¹Ã®Ã¡ Ã¯Ã°Ã¨Ã¯Ã¨Ã­Ã¨Ã²Ã¨ Ã¤Ã®Ã·Â³Ã°Ã­Â³Ã© Ã¯Ã°Ã®Ã¶Ã¥Ã±.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
-msgstr "E671: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã¢Â³ÃªÃ­Ã® \"%s\""
+msgstr "E671: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã¢Â³ÃªÃ­Ã® Â«%s»"
 
 #, c-format
 msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-msgstr "E243: Ã€Ã°Ã£Ã³Ã¬Ã¥Ã­Ã² Ã­Ã¥ Ã¯Â³Ã¤Ã²Ã°Ã¨Ã¬Ã³ÂºÃ²Ã¼Ã±Ã¿: \"-%s\"; ÃªÃ®Ã°Ã¨Ã±Ã²Ã³Ã©Ã²Ã¥Ã±Ã¼ Ã¢Ã¥Ã°Ã±Â³ÂºÃ¾ Ã§ OLE."
+msgstr "E243: Ã€Ã°Ã£Ã³Ã¬Ã¥Ã­Ã² Ã­Ã¥ Ã¯Â³Ã¤Ã²Ã°Ã¨Ã¬Ã³ÂºÃ²Ã¼Ã±Ã¿: Â«-%s»; ÃªÃ®Ã°Ã¨Ã±Ã²Ã³Ã©Ã²Ã¥Ã±Ã¼ Ã¢Ã¥Ã°Ã±Â³ÂºÃ¾ Ã§ OLE."
 
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã¨ Ã¢Â³ÃªÃ­Ã® Ã¢Ã±Ã¥Ã°Ã¥Ã¤Ã¨Ã­Â³ Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã¨ MDI"
@@ -2366,23 +2407,23 @@ msgstr "E455: 
 
 #, c-format
 msgid "E624: Can't open file \"%s\""
-msgstr "E624: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã¨ Ã´Ã Ã©Ã« \"%s\""
+msgstr "E624: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã¨ Ã´Ã Ã©Ã« Â«%s»"
 
 #, c-format
 msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript \"%s\""
+msgstr "E457: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript Â«%s»"
 
 #, c-format
 msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: \"%s\" Ã­Ã¥ Âº Ã´Ã Ã©Ã«Ã®Ã¬ Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript"
+msgstr "E618: Â«%s» Ã­Ã¥ Âº Ã´Ã Ã©Ã«Ã®Ã¬ Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript"
 
 #, c-format
 msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: \"%s\" Ã­Ã¥ Âº Ã¯Â³Ã¤Ã²Ã°Ã¨Ã¬Ã³Ã¢Ã Ã­Ã¨Ã¬ Ã´Ã Ã©Ã«Ã®Ã¬ Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript"
+msgstr "E619: Â«%s» Ã­Ã¥ Âº Ã¯Â³Ã¤Ã²Ã°Ã¨Ã¬Ã³Ã¢Ã Ã­Ã¨Ã¬ Ã´Ã Ã©Ã«Ã®Ã¬ Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript"
 
 #, c-format
 msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: Ãåïðàâèëüíà Ã¢Ã¥Ã°Ã±Â³Ã¿ Ã´Ã Ã©Ã«Ã³ Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ \"%s\""
+msgstr "E621: Ãåïðàâèëüíà Ã¢Ã¥Ã°Ã±Â³Ã¿ Ã´Ã Ã©Ã«Ã³ Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ Â«%s»"
 
 msgid "E673: Incompatible multi-byte encoding and character set."
 msgstr "E673: Ãåñóì³ñí³ Ã¡Ã Ã£Ã Ã²Ã®Ã¡Ã Ã©Ã²Ã®Ã¢Ã¥ ÃªÃ®Ã¤Ã³Ã¢Ã Ã­Ã­Ã¿ Ã© Ã­Ã Ã¡Â³Ã° Ã±Ã¨Ã¬Ã¢Ã®Ã«Â³Ã¢."
@@ -2399,21 +2440,21 @@ msgstr "E324: 
 
 #, c-format
 msgid "E456: Can't open file \"%s\""
-msgstr "E456: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã¨ Ã´Ã Ã©Ã« \"%s\""
+msgstr "E456: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã¨ Ã´Ã Ã©Ã« Â«%s»"
 
 msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript \"prolog.ps\""
+msgstr "E456: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript Â«prolog.ps»"
 
 msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript \"cidfont.ps\""
+msgstr "E456: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript Â«cidfont.ps»"
 
 #, c-format
 msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript \"%s.ps\""
+msgstr "E456: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã´Ã Ã©Ã« Ã°Ã¥Ã±Ã³Ã°Ã±Â³Ã¢ PostScript Â«%s.ps»"
 
 #, c-format
 msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã¥Ã°Ã¥Ã²Ã¢Ã®Ã°Ã¨Ã²Ã¨ Ã¤Ã® ÃªÃ®Ã¤Ã³Ã¢Ã Ã­Ã­Ã¿ Ã¤Ã°Ã³ÃªÃ³ \"%s\""
+msgstr "E620: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã¥Ã°Ã¥Ã²Ã¢Ã®Ã°Ã¨Ã²Ã¨ Ã¤Ã® ÃªÃ®Ã¤Ã³Ã¢Ã Ã­Ã­Ã¿ Ã¤Ã°Ã³ÃªÃ³ Â«%s»"
 
 msgid "Sending to printer..."
 msgstr "³äñèëàºòüñÿ Ã­Ã  Ã¯Ã°Ã¨Ã­Ã²Ã¥Ã°..."
@@ -2526,7 +2567,7 @@ msgid ""
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: Ã‡Ã­Ã Ã©Ã²Ã¨ Ã´Ã³Ã­ÃªÃ¶Â³Â¿, Ã¹Ã® Ã¢Ã¨ÃªÃ«Ã¨ÃªÃ Ã¾Ã²Ã¼ Ã¶Ã¾ Ã´Ã³Ã­ÃªÃ¶Â³Ã¾\n"
@@ -2536,7 +2577,7 @@ msgstr ""
 "       g: Ã‡Ã­Ã Ã©Ã²Ã¨ Ã¶Ã¥ Ã¢Ã¨Ã§Ã­Ã Ã·Ã¥Ã­Ã­Ã¿\n"
 "       i: Ã‡Ã­Ã Ã©Ã²Ã¨ Ã´Ã Ã©Ã«Ã¨, Ã¿ÃªÂ³ Ã¢ÃªÃ«Ã¾Ã·Ã Ã¾Ã²Ã¼ Ã¢ Ã±Ã¥Ã¡Ã¥ Ã¶Ã¥Ã© Ã´Ã Ã©Ã«\n"
 "       s: Ã‡Ã­Ã Ã©Ã²Ã¨ Ã¶Ã¥Ã© Ã±Ã¨Ã¬Ã¢Ã®Ã« C\n"
-"       t: Ã‡Ã­Ã Ã©Ã²Ã¨ Ã¯Ã°Ã¨Ã±Ã¢Ã®ÂºÃ­Ã­Ã¿ Ã¶Ã¼Ã®Ã¬Ã³\n"
+"       t: Ã‡Ã­Ã Ã©Ã²Ã¨ Ã¶Ã¥Ã© Ã²Ã¥ÃªÃ±Ã²\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2649,12 +2690,12 @@ msgstr "
 msgid "not allowed in the Vim sandbox"
 msgstr "íå Ã¤Ã®Ã§Ã¢Ã®Ã«Ã¥Ã­Ã® Ã³ Ã¯Â³Ã±Ã®Ã·Ã­Ã¨Ã¶Â³ Vim"
 
-msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Python: ÃÃ¥ Ã¬Ã®Ã¦Ã­Ã  Ã¢Ã¨ÃªÃ®Ã°Ã¨Ã±Ã²Ã Ã²Ã¨ :py Â³ :py3 Ã¢ Ã®Ã¤Ã­Ã®Ã¬Ã³ Ã±Ã¥Ã Ã­Ã±Â³"
-
 msgid "E837: This Vim cannot execute :py3 after using :python"
 msgstr "E837: Python: ÃÃ¥ Ã¬Ã®Ã¦Ã­Ã  Ã¢Ã¨ÃªÃ®Ã°Ã¨Ã±Ã²Ã Ã²Ã¨ :py Â³ :py3 Ã¢ Ã®Ã¤Ã­Ã®Ã¬Ã³ Ã±Ã¥Ã Ã­Ã±Â³"
 
+msgid "only string keys are allowed"
+msgstr "Äîçâîëåíî Ã²Â³Ã«Ã¼ÃªÃ¨ Ã²Ã¥ÃªÃ±Ã²Ã®Ã¢Â³ ÃªÃ«Ã¾Ã·Â³"
+
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
@@ -2662,23 +2703,28 @@ msgstr ""
 "E263: Ã‚èáà÷òå, Ã¶Ã¿ ÃªÃ®Ã¬Ã Ã­Ã¤Ã  Ã¢Ã¨Ã¬ÃªÃ­Ã¥Ã­Ã , Ã¡Â³Ã¡Ã«Â³Ã®Ã²Ã¥ÃªÃ  Python Ã­Ã¥ Ã¬Ã®Ã¦Ã¥ Ã¡Ã³Ã²Ã¨ "
 "çàâàíòàæåíà."
 
-msgid "can't delete OutputObject attributes"
-msgstr "íå Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã¨Ã¹Ã¨Ã²Ã¨ Ã Ã²Ã°Ã¨Ã¡Ã³Ã²Ã¨ OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "softspace Ã¬Ã Âº Ã¡Ã³Ã²Ã¨ Ã¶Â³Ã«Ã¨Ã¬"
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: Eval Ã­Ã¥ Ã¯Ã®Ã¢Ã¥Ã°Ã­Ã³Ã¢ Ã¤Â³Ã©Ã±Ã­Ã¨Ã© Ã®Ã¡\92ºêò python 3"
 
-# msgstr "E180: "
-msgid "invalid attribute"
-msgstr "íåïðàâèëüíèé Ã Ã²Ã°Ã¨Ã¡Ã³Ã²"
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr "E861: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã¥Ã°Ã¥Ã²Ã¢Ã®Ã°Ã¨Ã²Ã¨ Ã®Ã¡\92ºêò python 3 Ã³ Ã§Ã­Ã Ã·Ã¥Ã­Ã­Ã¿ vim"
 
 #, c-format
 msgid "<buffer object (deleted) at %p>"
 msgstr "<îá'ºêò Ã¡Ã³Ã´Ã¥Ã°Ã  (çíèùåíî) Ã§Ã  Ã Ã¤Ã°Ã¥Ã±Ã®Ã¾ %p>"
 
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Python: ÃÃ¥ Ã¬Ã®Ã¦Ã­Ã  Ã¢Ã¨ÃªÃ®Ã°Ã¨Ã±Ã²Ã Ã²Ã¨ :py Â³ :py3 Ã¢ Ã®Ã¤Ã­Ã®Ã¬Ã³ Ã±Ã¥Ã Ã­Ã±Â³"
+
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: ÃÃ¥ Ã¬Ã®Ã¦Ã­Ã  Ã°Ã¥ÃªÃ³Ã°Ã±Ã¨Ã¢Ã­Ã® Ã¢Ã¨ÃªÃ«Ã¨ÃªÃ Ã²Ã¨ Python"
 
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval Ã­Ã¥ Ã¯Ã®Ã¢Ã¥Ã°Ã­Ã³Ã¢ Ã¤Â³Ã©Ã±Ã­Ã¨Ã© Ã®Ã¡\92ºêò python"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã¥Ã°Ã¥Ã²Ã¢Ã®Ã°Ã¨Ã²Ã¨ Ã®Ã¡\92ºêò python Ã³ Ã§Ã­Ã Ã·Ã¥Ã­Ã­Ã¿ vim"
+
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_ Ã¬Ã Âº Ã¡Ã³Ã²Ã¨ Ã¥ÃªÃ§Ã¥Ã¬Ã¯Ã«Ã¿Ã°Ã®Ã¬ String"
 
@@ -2863,12 +2909,6 @@ msgid ""
 msgstr ""
 "E571: Ã‚èáà÷òå, Ã¶Ã¿ ÃªÃ®Ã¬Ã Ã­Ã¤Ã  Ã¢Ã¨Ã¬ÃªÃ­Ã¥Ã­Ã , Ã¡Â³Ã¡Ã«Â³Ã®Ã²Ã¥ÃªÃ  Tcl Ã­Ã¥ Ã¬Ã®Ã¦Ã¥ Ã¡Ã³Ã²Ã¨ Ã§Ã Ã¢Ã Ã­Ã²Ã Ã¦Ã¥Ã­Ã ."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ÃÎÌÈËÊÀ TCL: ÃªÃ®Ã¤ Ã¢Ã¨ÃµÃ®Ã¤Ã³ Ã­Ã¥ Âº Ã¶Â³Ã«Ã¨Ã¬!? Ãóäü Ã«Ã Ã±ÃªÃ , Ã¯Ã®Ã¢Â³Ã¤Ã®Ã¬Ã²Ã¥ Ã³ vim-"
-"dev@vim.org"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: ÃŠÃ®Ã¤ Ã¢Ã¨ÃµÃ®Ã¤Ã³ %d"
@@ -2880,7 +2920,7 @@ msgid "Unable to register a command server name"
 msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã Ã°Ã¥ÂºÃ±Ã²Ã°Ã³Ã¢Ã Ã²Ã¨ Ã­Ã Ã§Ã¢Ã³ Ã±Ã¥Ã°Ã¢Ã¥Ã°Ã  ÃªÃ®Ã¬Ã Ã­Ã¤"
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤Â³Ã±Ã«Ã Ã²Ã¨ ÃªÃ®Ã¬Ã Ã­Ã¤Ã³ Ã¤Ã® Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã¨-ïðèçíà÷åííÿ"
+msgstr "E248: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤Â³Ã±Ã«Ã Ã²Ã¨ ÃªÃ®Ã¬Ã Ã­Ã¤Ã³ Ã¤Ã® Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã¨-ö³ë³"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -2903,7 +2943,7 @@ msgstr "
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr ""
-"Çàáàãàòî Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Â³Ã¢ Ã³ \"+êîìàíäà\", \"-c ÃªÃ®Ã¬Ã Ã­Ã¤Ã \" Ã Ã¡Ã® \"--cmd ÃªÃ®Ã¬Ã Ã­Ã¤Ã \""
+"Çàáàãàòî Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Â³Ã¢ Ã³ Â«+êîìàíäà», Â«-c ÃªÃ®Ã¬Ã Ã­Ã¤Ã Â» Ã Ã¡Ã® Â«--cmd ÃªÃ®Ã¬Ã Ã­Ã¤Ã Â»"
 
 # msgstr "E14: "
 msgid "Invalid argument for"
@@ -2946,7 +2986,7 @@ msgstr "
 
 #, c-format
 msgid "E282: Cannot read from \"%s\""
-msgstr "E282: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ Ã§ \"%s\""
+msgstr "E282: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ Ã§ Â«%s»"
 
 # msgstr "E282: "
 msgid ""
@@ -2954,7 +2994,7 @@ msgid ""
 "More info with: \"vim -h\"\n"
 msgstr ""
 "\n"
-"ijçíàéòåñÿ Ã¡Â³Ã«Ã¼Ã¸Ã¥: \"vim -h\"\n"
+"ijçíàéòåñÿ Ã¡Â³Ã«Ã¼Ã¸Ã¥: Â«vim -h»\n"
 
 msgid "[file ..]       edit specified file(s)"
 msgstr "[ôàéë ..]       Ã°Ã¥Ã¤Ã Ã£Ã³Ã¢Ã Ã²Ã¨ Ã¢ÃªÃ Ã§Ã Ã­Â³ Ã´Ã Ã©Ã«Ã¨"
@@ -3017,31 +3057,34 @@ msgid "-unregister\t\tUnregister gvim for OLE"
 msgstr "-unregister\t\tÑêàñóâàòè Ã°Ã¥ÂºÃ±Ã²Ã°Ã Ã¶Â³Ã¾ Ã¶Ã¼Ã®Ã£Ã® gvim Ã¤Ã«Ã¿ OLE"
 
 msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-msgstr "-g\t\t\tÇàïóñòèòè GUI (í³áè \"gvim\")"
+msgstr "-g\t\t\tÇàïóñòèòè GUI (í³áè Â«gvim»)"
 
 msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
 msgstr "-f  Ã·Ã¨  --nofork\tÃåðåäí³é Ã¯Ã«Ã Ã­: Ã²Ã°Ã¨Ã¬Ã Ã²Ã¨ Ã²Ã¥Ã°Ã¬Â³Ã­Ã Ã« Ã¯Â³Ã±Ã«Ã¿ Ã§Ã Ã¯Ã³Ã±ÃªÃ³ GUI"
 
 msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tÃåæèì Vi (í³áè \"vi\")"
+msgstr "-v\t\t\tÃåæèì Vi (í³áè Â«vi»)"
 
 msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tÃåæèì Ex (í³áè \"ex\")"
+msgstr "-e\t\t\tÃåæèì Ex (í³áè Â«ex»)"
+
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tÃîêðàùåíèé Ã°Ã¥Ã¦Ã¨Ã¬ Ex"
 
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tÌîâ÷àçíèé (ïàêåòíèé) Ã°Ã¥Ã¦Ã¨Ã¬ (ëèøå Ã¤Ã«Ã¿ \"ex\")"
+msgstr "-s\t\t\tÌîâ÷àçíèé (ïàêåòíèé) Ã°Ã¥Ã¦Ã¨Ã¬ (ëèøå Ã¤Ã«Ã¿ Â«ex»)"
 
 msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tÃåæèì Ã¯Ã®Ã°Â³Ã¢Ã­Ã¿Ã­Ã­Ã¿ (í³áè \"vimdiff\")"
+msgstr "-d\t\t\tÃåæèì Ã¯Ã®Ã°Â³Ã¢Ã­Ã¿Ã­Ã­Ã¿ (í³áè Â«vimdiff»)"
 
 msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tÃðîñòèé Ã°Ã¥Ã¦Ã¨Ã¬ (í³áè \"evim\", Ã¡Ã¥Ã§ Ã°Ã¥Ã¦Ã¨Ã¬Â³Ã¢)"
+msgstr "-y\t\t\tÃðîñòèé Ã°Ã¥Ã¦Ã¨Ã¬ (í³áè Â«evim», Ã¡Ã¥Ã§ Ã°Ã¥Ã¦Ã¨Ã¬Â³Ã¢)"
 
 msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tÃåæèì Ã¯Ã¥Ã°Ã¥Ã£Ã«Ã¿Ã¤Ã³ (í³áè \"view\")"
+msgstr "-R\t\t\tÃåæèì Ã¯Ã¥Ã°Ã¥Ã£Ã«Ã¿Ã¤Ã³ (í³áè Â«view»)"
 
 msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tÎáìåæåíèé Ã°Ã¥Ã¦Ã¨Ã¬ (í³áè \"rvim\")"
+msgstr "-Z\t\t\tÎáìåæåíèé Ã°Ã¥Ã¦Ã¨Ã¬ (í³áè Â«rvim»)"
 
 msgid "-m\t\t\tModifications (writing files) not allowed"
 msgstr "-m\t\t\tÇì³íè (çàïèñ Ã´Ã Ã©Ã«Â³Ã¢) Ã­Ã¥ Ã¤Ã®Ã§Ã¢Ã®Ã«Ã¥Ã­Ã®"
@@ -3266,19 +3309,6 @@ msgstr "-xrm <
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Àðãóìåíòè gvim (âåðñ³ÿ RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <ê³ëüê³ñòü>\tÃî÷àòêîâà ÃªÂ³Ã«Ã¼ÃªÂ³Ã±Ã²Ã¼ ÃªÃ®Ã«Ã®Ã­Ã®Ãª Ã¢Â³ÃªÃ­Ã "
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <ê³ëüê³ñòü>\tÃî÷àòêîâà ÃªÂ³Ã«Ã¼ÃªÂ³Ã±Ã²Ã¼ Ã°Ã¿Ã¤ÃªÂ³Ã¢ Ã¢Â³ÃªÃ­Ã "
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3294,6 +3324,9 @@ msgstr ""
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\t³äêðèòè Vim Ã¢ Â³Ã­Ã¸Ã®Ã¬Ã³ Ã¥Ã«Ã¥Ã¬Ã¥Ã­Ã²Â³ Â³Ã­Ã²Ã¥Ã°Ã´Ã¥Ã©Ã±Ã³ GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tÕàé gvim Ã­Ã Ã¤Ã°Ã³ÃªÃ³Âº Â³Ã¤Ã¥Ã­Ã²Ã¨Ã´Â³ÃªÃ Ã²Ã®Ã° Ã¢Â³ÃªÃ­Ã  Ã­Ã  stdout"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <çàãîëîâîê Ã¡Ã Ã²Ã¼ÃªÃ >\t³äêðèòè Vim Ã¢Ã±Ã¥Ã°Ã¥Ã¤Ã¨Ã­Â³ Ã¡Ã Ã²Ã¼ÃªÂ³Ã¢Ã±Ã¼ÃªÃ®Ã£Ã® Ã¢Â³ÃªÃ­Ã "
 
@@ -3326,7 +3359,7 @@ msgstr "
 
 #, c-format
 msgid "E283: No marks matching \"%s\""
-msgstr "E283: Ãîì³òêó \"%s\" Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã®"
+msgstr "E283: Ãîì³òêó Â«%s» Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã®"
 
 # msgstr "E283: "
 #. Highlight title
@@ -3355,7 +3388,6 @@ msgstr ""
 "çì³íèòè Ã°Ã¿Ã¤. Ã±Ã²Ã®Ã¢Ã¯. Ã²Ã¥ÃªÃ±Ã²"
 
 # TODO
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3364,7 +3396,6 @@ msgstr ""
 "# Ãîì³òêè:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3373,7 +3404,6 @@ msgstr ""
 "# Ã‘ïèñîê Ã¯Ã¥Ã°Ã¥ÃµÃ®Ã¤Â³Ã¢ (â³ä Ã­Ã Ã©Ã­Ã®Ã¢Â³Ã¸Ã¨Ãµ):\n"
 
 # TODO
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3439,6 +3469,9 @@ msgstr "E298: 
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Ãåìຠáëîêó 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Ãîìèëêà Ã¯Ã®Ã­Ã®Ã¢Ã«Ã¥Ã­Ã­Ã¿ Ã¸Ã¨Ã´Ã°Ã³Ã¢Ã Ã­Ã­Ã¿ Ã´Ã Ã©Ã«Ã³ Ã®Ã¡Ã¬Â³Ã­Ã³"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: ÃŽÃ©, Ã¢Ã²Ã°Ã Ã·Ã¥Ã­Ã® Ã´Ã Ã©Ã« Ã®Ã¡Ã¬Â³Ã­Ã³!!!"
@@ -3451,7 +3484,7 @@ msgstr "E302: 
 #, c-format
 msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
 msgstr ""
-"E303: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ Ã´Ã Ã©Ã« Ã®Ã¡Ã¬Â³Ã­Ã³ Ã¤Ã«Ã¿ \"%s\", Ã¢Â³Ã¤Ã­Ã®Ã¢Ã«Ã¥Ã­Ã­Ã¿ Ã­Ã¥Ã¬Ã®Ã¦Ã«Ã¨Ã¢Ã¥"
+"E303: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã°Ã®Ã·Ã¨Ã²Ã Ã²Ã¨ Ã´Ã Ã©Ã« Ã®Ã¡Ã¬Â³Ã­Ã³ Ã¤Ã«Ã¿ Â«%s», Ã¢Â³Ã¤Ã­Ã®Ã¢Ã«Ã¥Ã­Ã­Ã¿ Ã­Ã¥Ã¬Ã®Ã¦Ã«Ã¨Ã¢Ã¥"
 
 msgid "E304: ml_upd_block0(): Didn't get block 0??"
 msgstr "E304: ml_upd_block0(): Ãåìຠáëîêó 0??"
@@ -3511,18 +3544,18 @@ msgstr " 
 
 #, c-format
 msgid "Using swap file \"%s\""
-msgstr "Âèêîðèñòîâóºòüñÿ Ã´Ã Ã©Ã« Ã®Ã¡Ã¬Â³Ã­Ã³ \"%s\""
+msgstr "Âèêîðèñòîâóºòüñÿ Ã´Ã Ã©Ã« Ã®Ã¡Ã¬Â³Ã­Ã³ Â«%s»"
 
 #, c-format
 msgid "Original file \"%s\""
-msgstr "Ãî÷àòêîâèé Ã´Ã Ã©Ã« \"%s\""
+msgstr "Ãî÷àòêîâèé Ã´Ã Ã©Ã« Â«%s»"
 
 msgid "E308: Warning: Original file may have been changed"
 msgstr "E308: Ã‡Ã Ã±Ã²Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã­Ã¿: ÃŒÃ®Ã¦Ã«Ã¨Ã¢Ã®, Ã¯Ã®Ã·Ã Ã²ÃªÃ®Ã¢Ã¨Ã© Ã´Ã Ã©Ã« Ã¡Ã³Ã«Ã® Ã§Ã¬Â³Ã­Ã¥Ã­Ã®"
 
 #, c-format
 msgid "Swap file is encrypted: \"%s\""
-msgstr "Ôàéë Ã®Ã¡Ã¬Â³Ã­Ã³ Ã§Ã Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã¨Ã©: \"%s\""
+msgstr "Ôàéë Ã®Ã¡Ã¬Â³Ã­Ã³ Ã§Ã Ã¸Ã¨Ã´Ã°Ã®Ã¢Ã Ã­Ã¨Ã©: Â«%s»"
 
 msgid ""
 "\n"
@@ -3597,7 +3630,7 @@ msgstr ""
 "ïî÷èíàþòüñÿ Ã§ ???"
 
 msgid "See \":help E312\" for more information."
-msgstr "Äèâ. \":help E312\" Ã¤Ã«Ã¿ Ã³Ã²Ã®Ã·Ã­Ã¥Ã­Ã­Ã¿."
+msgstr "Äèâ. Â«:help E312» Ã¤Ã«Ã¿ Ã³Ã²Ã®Ã·Ã­Ã¥Ã­Ã­Ã¿."
 
 msgid "Recovery completed. You should check if everything is OK."
 msgstr "³äíîâëåííÿ Ã§Ã ÃªÂ³Ã­Ã·Ã¥Ã­Ã®, Ã¯Ã¥Ã°Ã¥Ã¢Â³Ã°Ã²Ã¥ Ã·Ã¨ Ã¢Ã±Ã¥ Ã£Ã Ã°Ã Ã§Ã¤."
@@ -3787,7 +3820,7 @@ msgstr "E317: 
 
 #, c-format
 msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: Ã–èêë³÷í³ Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã¼Ã­Â³ Ã¯Ã®Ã±Ã¨Ã«Ã Ã­Ã­Ã¿ \"%s\""
+msgstr "E773: Ã–èêë³÷í³ Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã¼Ã­Â³ Ã¯Ã®Ã±Ã¨Ã«Ã Ã­Ã­Ã¿ Â«%s»"
 
 # msgstr "E317: "
 msgid "E325: ATTENTION"
@@ -3810,54 +3843,50 @@ msgstr "      
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) ÃŒÃ®Ã¦Ã«Ã¨Ã¢Ã®, Â³Ã­Ã¸Ã  Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã  Ã¢Ã¦Ã¥ Ã°Ã¥Ã¤Ã Ã£Ã³Âº Ã¶Ã¥Ã© Ã±Ã Ã¬Ã¨Ã© Ã´Ã Ã©Ã«.\n"
-"    Ãóäüòå Ã®Ã¡Ã¥Ã°Ã¥Ã¦Ã­Â³, Ã¹Ã®Ã¡ Ã­Ã¥ Ã§Ã Ã«Ã¨Ã¸Ã¨Ã«Ã¨Ã±Ã¿ Ã¤Ã¢Ã  Ã°Â³Ã§Ã­Â³ Ã¥ÃªÃ§Ã¥Ã¬Ã¯Ã«Ã¿Ã°Ã¨\n"
-"    Ã®Ã¤Ã­Ã®Ã£Ã® Ã© Ã²Ã®Ã£Ã® Ã±Ã Ã¬Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã³ Ã¯Â³Ã±Ã«Ã¿ Ã§Ã¬Â³Ã­.\n"
+"(1) ÃŒÃ®Ã¦Ã«Ã¨Ã¢Ã®, Â³Ã­Ã¸Ã  Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã  Ã¢Ã¦Ã¥ Ã°Ã¥Ã¤Ã Ã£Ã³Âº Ã¶Ã¥Ã© Ã±Ã Ã¬Ã¨Ã© Ã´Ã Ã©Ã«. ÃŸÃªÃ¹Ã® Ã¶Ã¥ Ã²Ã Ãª,\n"
+"    Ã¡Ã³Ã¤Ã¼Ã²Ã¥ Ã®Ã¡Ã¥Ã°Ã¥Ã¦Ã­Â³, Ã¹Ã®Ã¡ Ã­Ã¥ Ã§Ã Ã«Ã¨Ã¸Ã¨Ã«Ã¨Ã±Ã¿ Ã¤Ã¢Ã  Ã°Â³Ã§Ã­Â³ Ã¥ÃªÃ§Ã¥Ã¬Ã¯Ã«Ã¿Ã°Ã¨\n"
+"    Ã®Ã¤Ã­Ã®Ã£Ã® Ã© Ã²Ã®Ã£Ã® Ã±Ã Ã¬Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã³ Ã¯Â³Ã±Ã«Ã¿ Ã§Ã¬Â³Ã­."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Ã‚èéä³òü, Ã Ã¡Ã® Ã¯Ã°Ã®Ã¤Ã®Ã¢Ã¦Ã³Ã©Ã²Ã¥ Ã®Ã¡Ã¥Ã°Ã¥Ã¦Ã­Ã®.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Ã‚èéä³òü Ã Ã¡Ã® Ã¯Ã°Ã®Ã¤Ã®Ã¢Ã¦Ã³Ã©Ã²Ã¥ Ã®Ã¡Ã¥Ã°Ã¥Ã¦Ã­Ã®.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Ã‘åàíñ Ã°Ã¥Ã¤Ã Ã£Ã³Ã¢Ã Ã­Ã­Ã¿ Ã¶Ã¼Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã³ Ã§Ã Ã§Ã­Ã Ã¢ ÃªÃ°Ã ÃµÃ³.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Ã‘åàíñ Ã°Ã¥Ã¤Ã Ã£Ã³Ã¢Ã Ã­Ã­Ã¿ Ã¶Ã¼Ã®Ã£Ã® Ã´Ã Ã©Ã«Ã³ Ã§Ã Ã§Ã­Ã Ã¢ ÃªÃ°Ã ÃµÃ³.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
-msgstr "    ÃŸÃªÃ¹Ã® Ã¶Ã¥ Ã±Ã¯Ã°Ã Ã¢Ã¤Â³ Ã²Ã°Ã Ã¯Ã¨Ã«Ã®Ã±Ã¿, Ã±Ã¯Ã°Ã®Ã¡Ã³Ã©Ã²Ã¥ \":recover\" Ã Ã¡Ã® \"vim -r "
+msgstr "    ÃŸÃªÃ¹Ã® Ã¶Ã¥ Ã±Ã¯Ã°Ã Ã¢Ã¤Â³ Ã²Ã°Ã Ã¯Ã¨Ã«Ã®Ã±Ã¿, Ã±Ã¯Ã°Ã®Ã¡Ã³Ã©Ã²Ã¥ Â«:recover» Ã Ã¡Ã® Â«vim -r "
 
 msgid ""
 "\"\n"
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
-"\"\n"
-"    Ã¹Ã®Ã¡ Ã¢Â³Ã¤Ã­Ã®Ã¢Ã¨Ã²Ã¨ Ã§Ã¬Â³Ã­Ã¨ (äèâ. \":help recovery\").\n"
+"»\n"
+"    Ã¹Ã®Ã¡ Ã¢Â³Ã¤Ã­Ã®Ã¢Ã¨Ã²Ã¨ Ã§Ã¬Â³Ã­Ã¨ (äèâ. Â«:help recovery»).\n"
 
 msgid "    If you did this already, delete the swap file \""
-msgstr "    ÃŸÃªÃ¹Ã® Ã¢Ã¨ Ã¢Ã¦Ã¥ Ã¶Ã¥ Ã§Ã°Ã®Ã¡Ã¨Ã«Ã¨, Ã§Ã­Ã¨Ã¹Â³Ã²Ã¼ Ã´Ã Ã©Ã« Ã®Ã¡Ã¬Â³Ã­Ã³ \""
+msgstr "    ÃŸÃªÃ¹Ã® Ã¢Ã¨ Ã¢Ã¦Ã¥ Ã¶Ã¥ Ã§Ã°Ã®Ã¡Ã¨Ã«Ã¨, Ã§Ã­Ã¨Ã¹Â³Ã²Ã¼ Ã´Ã Ã©Ã« Ã®Ã¡Ã¬Â³Ã­Ã³ Â«"
 
 msgid ""
 "\"\n"
 "    to avoid this message.\n"
 msgstr ""
-"\"\n"
+"»,\n"
 "    Ã¹Ã®Ã¡ Ã¯Ã®Ã§Ã¡Ã³Ã²Ã¨Ã±Ã¿ Ã¶Ã¼Ã®Ã£Ã® Ã¯Ã®Ã¢Â³Ã¤Ã®Ã¬Ã«Ã¥Ã­Ã­Ã¿.\n"
 "\n"
 
 msgid "Swap file \""
-msgstr "Ôàéë Ã®Ã¡Ã¬Â³Ã­Ã³ \""
+msgstr "Ôàéë Ã®Ã¡Ã¬Â³Ã­Ã³ Â«"
 
 msgid "\" already exists!"
-msgstr "\" Ã¢Ã¦Ã¥ Â³Ã±Ã­Ã³Âº!"
+msgstr "» Ã¢Ã¦Ã¥ Â³Ã±Ã­Ã³Âº!"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM -- Ã“ÂÀÃÀ"
+msgstr "VIM \97 Ã“ÂÀÃÀ"
 
 msgid "Swap file already exists!"
 msgstr "Ôàéë Ã®Ã¡Ã¬Â³Ã­Ã³ Ã¢Ã¦Ã¥ Â³Ã±Ã­Ã³Âº!"
@@ -3904,7 +3933,7 @@ msgstr "E328: 
 # msgstr "E328: "
 #, c-format
 msgid "E329: No menu \"%s\""
-msgstr "E329: Ãåìຠìåíþ \"%s\""
+msgstr "E329: Ãåìຠìåíþ Â«%s»"
 
 #. Only a mnemonic or accelerator is not valid.
 msgid "E792: Empty menu name"
@@ -3954,7 +3983,7 @@ msgstr "E336: 
 
 # msgstr "E336: "
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: ÃŒÃ¥Ã­Ã¾ Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã® -- Ã¯Ã¥Ã°Ã¥Ã¢Â³Ã°Ã²Ã¥ Ã­Ã Ã§Ã¢Ã³"
+msgstr "E337: ÃŒÃ¥Ã­Ã¾ Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã® \97 Ã¯Ã¥Ã°Ã¥Ã¢Â³Ã°Ã²Ã¥ Ã­Ã Ã§Ã¢Ã³"
 
 # msgstr "E337: "
 #, c-format
@@ -4070,7 +4099,6 @@ msgstr "Vim: 
 msgid "Vim: Finished.\n"
 msgstr "Vim: Ã‡Ã Ã¢Ã¥Ã°Ã¸Ã¥Ã­Ã®.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ÃÎÌÈËÊÀ: "
 
@@ -4106,7 +4134,7 @@ msgstr "E342: 
 # msgstr "E342: "
 #, c-format
 msgid "Calling shell to execute: \"%s\""
-msgstr "Âèêëèêàºòüñÿ Ã®Ã¡Ã®Ã«Ã®Ã­ÃªÃ  Ã¹Ã®Ã¡ Ã¢Ã¨ÃªÃ®Ã­Ã Ã²Ã¨: \"%s\""
+msgstr "Âèêëèêàºòüñÿ Ã®Ã¡Ã®Ã«Ã®Ã­ÃªÃ  Ã¹Ã®Ã¡ Ã¢Ã¨ÃªÃ®Ã­Ã Ã²Ã¨: Â«%s»"
 
 msgid "E545: Missing colon"
 msgstr "E545: Ãðîïóùåíî Ã¤Ã¢Ã®ÃªÃ°Ã Ã¯ÃªÃ³"
@@ -4132,6 +4160,9 @@ msgstr "
 msgid "Keys don't match!"
 msgstr "Êëþ÷³ Ã­Ã¥ Ã®Ã¤Ã­Ã ÃªÃ®Ã¢Â³!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: Ã¸Ã«Ã¿Ãµ Ã§Ã Ã­Ã Ã¤Ã²Ã® Ã¤Ã®Ã¢Ã£Ã¨Ã© Ã¤Ã«Ã¿ Ã¤Ã®Ã¯Ã®Ã¢Ã­Ã¥Ã­Ã­Ã¿"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4143,22 +4174,22 @@ msgstr ""
 # msgstr "E343: "
 #, c-format
 msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ ÃªÃ Ã²Ã Ã«Ã®Ã£ \"%s\" Ã³ cdpath"
+msgstr "E344: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ ÃªÃ Ã²Ã Ã«Ã®Ã£ Â«%s» Ã³ cdpath"
 
 # msgstr "E344: "
 #, c-format
 msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã´Ã Ã©Ã« \"%s\" Ã³ path"
+msgstr "E345: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã´Ã Ã©Ã« Â«%s» Ã³ path"
 
 # msgstr "E345: "
 #, c-format
 msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: Ã“ cdpath Ã­Ã¥Ã¬Ã Âº Ã¡Â³Ã«Ã¼Ã¸Ã¥ ÃªÃ Ã²Ã Ã«Ã®Ã£Ã³ \"%s\""
+msgstr "E346: Ã“ cdpath Ã­Ã¥Ã¬Ã Âº Ã¡Â³Ã«Ã¼Ã¸Ã¥ ÃªÃ Ã²Ã Ã«Ã®Ã£Ã³ Â«%s»"
 
 # msgstr "E346: "
 #, c-format
 msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: Ã“ Ã¸Ã«Ã¿ÃµÃ³ Ã¯Ã®Ã¸Ã³ÃªÃ³ Ã¡Â³Ã«Ã¼Ã¸Ã¥ Ã­Ã¥Ã¬Ã Âº Ã´Ã Ã©Ã«Â³Ã¢ \"%s\""
+msgstr "E347: Ã“ Ã¸Ã«Ã¿ÃµÃ³ Ã¯Ã®Ã¸Ã³ÃªÃ³ Ã¡Â³Ã«Ã¼Ã¸Ã¥ Ã­Ã¥Ã¬Ã Âº Ã´Ã Ã©Ã«Â³Ã¢ Â«%s»"
 
 msgid "Cannot connect to Netbeans #2"
 msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§'ºäíàòèñÿ Â³Ã§ Netbeans #2"
@@ -4170,7 +4201,7 @@ msgstr "
 msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
 msgstr ""
 "E668: Ãåïðàâèëüíèé Ã°Ã¥Ã¦Ã¨Ã¬ Ã¤Ã®Ã±Ã²Ã³Ã¯Ã³ Ã¤Ã® Ã´Ã Ã©Ã«Ã³ Â³Ã­Ã´Ã®Ã°Ã¬Ã Ã¶Â³Â¿ Ã¯Ã°Ã® Ã§'ºäíàííÿ Ã§ "
-"NetBenans: \"%s\""
+"NetBenans: Â«%s»"
 
 msgid "read from Netbeans socket"
 msgstr "÷èòàºòüñÿ Ã§ Ã±Ã®ÃªÃ¥Ã²Ã  Netbeans"
@@ -4179,11 +4210,15 @@ msgstr "
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Ã‚òðà÷åíî Ã§Ã¢'ÿçîê Â³Ã§ NetBeans Ã¤Ã«Ã¿ Ã¡Ã³Ã´Ã¥Ã°Ã  %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans Ã­Ã¥ Ã¯Â³Ã¤Ã²Ã°Ã¨Ã¬Ã³ÂºÃ²Ã¼Ã±Ã¿ Ã§ Ã¶Ã¨Ã¬ GUI"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans Ã¢Ã¦Ã¥ Ã¯Â³Ã¤'ºäíàíî"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s Ã²Â³Ã«Ã¼ÃªÃ¨ Ã¤Ã«Ã¿ Ã·Ã¨Ã²Ã Ã­Ã­Ã¿ (! Ã¹Ã®Ã¡ Ã­Ã¥ Ã§Ã¢Ã Ã¦Ã Ã²Ã¨)"
 
 # msgstr "E348: "
 msgid "E349: No identifier under cursor"
@@ -4327,8 +4362,8 @@ msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Êîëîíêà %s Ã§ %s; Ã°Ã¿Ã¤Ã®Ãª %ld Ã§ %ld; Ã±Ã«Ã®Ã¢Ã® %ld Ã§ %ld; Ã±Ã¨Ã¬Ã¢Ã®Ã« %ld of %ld; Ã¡Ã Ã©Ã² %"
-"ld Ã§ %ld"
+"Êîëîíêà %s Ã§ %s; Ã°Ã¿Ã¤Ã®Ãª %ld Ã§ %ld; Ã±Ã«Ã®Ã¢Ã® %ld Ã§ %ld; Ã±Ã¨Ã¬Ã¢Ã®Ã« %ld of %ld; Ã¡Ã Ã©Ã² "
+"%ld Ã§ %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4349,6 +4384,9 @@ msgstr "E519: 
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: ÃÃ¥ Ã¤Ã®Ã§Ã¢Ã®Ã«Ã¥Ã­Ã® Ã³ modeline"
 
+msgid "E846: Key code not set"
+msgstr "E846: ÃŠÃ®Ã¤ ÃªÃ«Ã¾Ã·Ã  Ã­Ã¥ Ã¢Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­Ã®"
+
 msgid "E521: Number required after ="
 msgstr "E521: Ã³ñëÿ = Ã¯Ã®Ã²Ã°Â³Ã¡Ã­Ã® Ã¢ÃªÃ Ã§Ã Ã²Ã¨ Ã·Ã¨Ã±Ã«Ã®"
 
@@ -4366,7 +4404,7 @@ msgid "E530: Cannot change term in GUI"
 msgstr "E530: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã¬Â³Ã­Ã¨Ã²Ã¨ term Ã¢ GUI"
 
 msgid "E531: Use \":gui\" to start the GUI"
-msgstr "E531: Ã‡Ã Ã±Ã²Ã®Ã±Ã³Ã©Ã²Ã¥ \":gui\" Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã³Ã±ÃªÃ³ GUI"
+msgstr "E531: Ã‡Ã Ã±Ã²Ã®Ã±Ã³Ã©Ã²Ã¥ Â«:gui» Ã¤Ã«Ã¿ Ã§Ã Ã¯Ã³Ã±ÃªÃ³ GUI"
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
 msgstr "E589: ÃŽÃ¯Ã¶Â³Â¿ 'backupext' Â³ 'patchmode' Ã®Ã¤Ã­Ã ÃªÃ®Ã¢Â³"
@@ -4584,16 +4622,12 @@ msgstr "
 
 #, c-format
 msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-msgstr "E244: Ãåêîðåêòíà Ã­Ã Ã§Ã¢Ã  Ã­Ã Ã¡Ã®Ã°Ã³ Ã±Ã¨Ã¬Ã¢Ã®Ã«Â³Ã¢ \"%s\" Ã³ Ã­Ã Ã§Ã¢Â³ Ã¸Ã°Ã¨Ã´Ã²Ã³ \"%s\""
+msgstr "E244: Ãåêîðåêòíà Ã­Ã Ã§Ã¢Ã  Ã­Ã Ã¡Ã®Ã°Ã³ Ã±Ã¨Ã¬Ã¢Ã®Ã«Â³Ã¢ Â«%s» Ã³ Ã­Ã Ã§Ã¢Â³ Ã¸Ã°Ã¨Ã´Ã²Ã³ Â«%s»"
 
 #, c-format
 msgid "E245: Illegal char '%c' in font name \"%s\""
-msgstr "E245: Ãîìèëêîâèé Ã±Ã¨Ã¬Ã¢Ã®Ã« %c Ã¢ Ã­Ã Ã§Ã¢Â³ Ã¸Ã°Ã¨Ã´Ã²Ã³ \"%s\""
+msgstr "E245: Ãîìèëêîâèé Ã±Ã¨Ã¬Ã¢Ã®Ã« %c Ã¢ Ã­Ã Ã§Ã¢Â³ Ã¸Ã°Ã¨Ã´Ã²Ã³ Â«%s»"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ãåïðàâèëüíà Ã®Ã¯Ã¶Â³Ã¿ 'osfiletype' -- Ã¡Ã³Ã¤Ã¥ `Text'"
-
-# msgstr "E366: "
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Ã„â³÷³ Ã®Ã²Ã°Ã¨Ã¬Ã Ã­Ã® Ã±Ã¨Ã£Ã­Ã Ã«, Ã¢Ã¨ÃµÂ³Ã¤\n"
 
@@ -4684,7 +4718,7 @@ msgstr "XSMP 
 
 #, c-format
 msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
+msgstr "dlerror = Â«%s»"
 
 msgid "Opening the X display failed"
 msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã¨ Ã¤Ã¨Ã±Ã¯Ã«Ã¥Ã© X"
@@ -4815,7 +4849,7 @@ msgstr "E683: 
 
 #, c-format
 msgid "Cannot open file \"%s\""
-msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã¨ Ã´Ã Ã©Ã« \"%s\""
+msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã¨ Ã´Ã Ã©Ã« Â«%s»"
 
 msgid "E681: Buffer is not loaded"
 msgstr "E681: Ãóôåð Ã­Ã¥ Ã§Ã Ã¢Ã Ã­Ã²Ã Ã¦Ã¥Ã­Ã®"
@@ -5075,13 +5109,17 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: Ãåðåâ³ðêà Ã®Ã°Ã´Ã®Ã£Ã°Ã Ã´Â³Â¿ Ã­Ã¥ Ã¤Ã®Ã§Ã¢Ã®Ã«Ã¥Ã­Ã "
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "Çàñòåðåæåííÿ: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã±Ã¯Ã¨Ã±Ã®Ãª Ã±Ã«Â³Ã¢ Â«%s_%s.spl» Ã·Ã¨ Â«%s_ascii.spl»"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
-"Çàñòåðåæåííÿ: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã±Ã¯Ã¨Ã±Ã®Ãª Ã±Ã«Â³Ã¢ \"%s.%s.spl\" Ã·Ã¨ \"%s.ascii.spl\""
+"Çàñòåðåæåííÿ: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã±Ã¯Ã¨Ã±Ã®Ãª Ã±Ã«Â³Ã¢ Â«%s.%s.spl» Ã·Ã¨ Â«%s.ascii.spl»"
 
 #, c-format
 msgid "Reading spell file \"%s\""
-msgstr "×èòàºòüñÿ Ã´Ã Ã©Ã« Ã®Ã°Ã´Ã®Ã£Ã°Ã Ã´Â³Â¿ \"%s\""
+msgstr "×èòàºòüñÿ Ã´Ã Ã©Ã« Ã®Ã°Ã´Ã®Ã£Ã°Ã Ã´Â³Â¿ Â«%s»"
 
 msgid "E757: This does not look like a spell file"
 msgstr "E757: ÃÃ¥ Ã±ÃµÃ®Ã¦Ã¥ Ã­Ã  Ã´Ã Ã©Ã« Ã®Ã°Ã´Ã®Ã£Ã°Ã Ã´Â³Â¿"
@@ -5300,6 +5338,9 @@ msgstr "
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "Ãðî³ãíîðîâàíî %d Ã±Ã«Â³Ã¢ Â³Ã§ Ã­Ã¥-ASCII Ã±Ã¨Ã¬Ã¢Ã®Ã«Ã Ã¬Ã¨"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Ãåäîñòàòíüî Ã¯Ã Ã¬\92ÿò³, Ã±Ã¯Ã¨Ã±Ã®Ãª Ã±Ã«Â³Ã¢ Ã¡Ã³Ã¤Ã¥ Ã­Ã¥Ã¯Ã®Ã¢Ã­Ã¨Ã¬"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "Ñòèñíåíî %d Ã§ %d Ã¢Ã³Ã§Ã«Â³Ã¢; Ã§Ã Ã«Ã¨Ã¸Ã¨Ã«Ã®Ã±Ã¿ %d (%d%%)"
@@ -5376,11 +5417,11 @@ msgstr "
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
-msgstr "Çàì³íèòè \"%.*s\" Ã­Ã :"
+msgstr "Çàì³íèòè Â«%.*s» Ã­Ã :"
 
 #, c-format
 msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
+msgstr " < Â«%.*s»"
 
 # msgstr "E34: "
 msgid "E752: No previous spell replacement"
@@ -5480,6 +5521,10 @@ msgstr " 
 msgid "E395: contains argument not accepted here"
 msgstr "E395: ÃŒÂ³Ã±Ã²Ã¨Ã²Ã¼ Ã­Ã¥Ã¯Ã°Ã¨Ã©Ã­Ã¿Ã²Ã­Â³ Ã²Ã³Ã² Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Ã¨"
 
+# msgstr "E14: "
+msgid "E844: invalid cchar value"
+msgstr "E844: Ãåêîðåêòíå Ã§Ã­Ã Ã·Ã¥Ã­Ã­Ã¿ cchar"
+
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]hete Ã²Ã³Ã² Ã­Ã¥Ã¯Ã°Ã¨Ã©Ã­Ã¿Ã²Ã­Ã¨Ã©"
 
@@ -5491,6 +5536,9 @@ msgstr "E394: 
 msgid "E397: Filename required"
 msgstr "E397: Ãîòð³áíà Ã­Ã Ã§Ã¢Ã  Ã´Ã Ã©Ã«Ã³"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Ã‡Ã Ã¡Ã Ã£Ã Ã²Ã® Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã·Ã­Ã¨Ãµ Ã¢ÃªÃ«Ã¾Ã·Ã¥Ã­Ã¼"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: Ãðîïóùåíî ']': %s"
@@ -5504,6 +5552,9 @@ msgstr "E398: 
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Ãðàêóº Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Â³Ã¢: Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã·Ã­Ã¨Ã© Ã°Ã¥Ã£Â³Ã®Ã­ %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Ã‡Ã Ã¡Ã Ã£Ã Ã²Ã® Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã·Ã­Ã¨Ãµ ÃªÃ«Ã Ã±Ã²Ã¥Ã°Â³Ã¢"
+
 msgid "E400: No cluster specified"
 msgstr "E400: ÃŠÃ«Ã Ã±Ã²Ã¥Ã° Ã­Ã¥ Ã¢ÃªÃ Ã§Ã Ã­Ã®"
 
@@ -5563,12 +5614,12 @@ msgstr "E411: 
 # msgstr "E411: "
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Ãåäîñòàòíüî Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Â³Ã¢: \":highlight link %s\""
+msgstr "E412: Ãåäîñòàòíüî Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Â³Ã¢: Â«:highlight link %s»"
 
 # msgstr "E412: "
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Ã‡Ã Ã¡Ã Ã£Ã Ã²Ã® Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Â³Ã¢: \":highlight link %s\""
+msgstr "E413: Ã‡Ã Ã¡Ã Ã£Ã Ã²Ã® Ã Ã°Ã£Ã³Ã¬Ã¥Ã­Ã²Â³Ã¢: Â«:highlight link %s»"
 
 # msgstr "E413: "
 msgid "E414: group has settings, highlight link ignored"
@@ -5626,6 +5677,9 @@ msgstr "E669: 
 msgid "W18: Invalid character in group name"
 msgstr "W18: Ãåêîðåêòíèé Ã±Ã¨Ã¬Ã¢Ã®Ã« Ã³ Ã­Ã Ã§Ã¢Â³ Ã£Ã°Ã³Ã¯Ã¨"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Ã‡Ã Ã¡Ã Ã£Ã Ã²Ã® Ã£Ã°Ã³Ã¯ Ã¯Â³Ã¤Ã±Ã¢Â³Ã·Ã³Ã¢Ã Ã­Ã­Ã¿ Â³ Ã±Ã¨Ã­Ã²Ã ÃªÃ±Ã¨Ã±Ã³"
+
 # msgstr "E424: "
 msgid "E555: at bottom of tag stack"
 msgstr "E555: ÃŠÂ³Ã­Ã¥Ã¶Ã¼ Ã±Ã²Ã¥ÃªÃ³ Ã²Ã¥Â´Â³Ã¢"
@@ -5643,13 +5697,13 @@ msgstr "E426: 
 
 # msgstr "E426: "
 msgid "  # pri kind tag"
-msgstr "  # Ã¯Ã°Â³ Ã²Ã¨Ã¯  Ã²Ã¥Â´"
+msgstr "  # Ã¯Ã°Â³ Ã²Ã¨Ã¯ Ã²Ã¥Â´"
 
 msgid "file\n"
 msgstr "ôàéë\n"
 
 msgid "E427: There is only one matching tag"
-msgstr "E427: Ã‹Ã¨Ã¸Ã¥ Ã®Ã¤Ã­Ã¨Ã­ Ã¢Â³Ã¤Ã¯Ã®Ã¢Â³Ã¤Ã­Ã¨Ã© Ã²Ã¥Â´"
+msgstr "E427: Ã‹Ã¨Ã¸Ã¥ Ã®Ã¤Ã¨Ã­ Ã¢Â³Ã¤Ã¯Ã®Ã¢Â³Ã¤Ã­Ã¨Ã© Ã²Ã¥Â´"
 
 # msgstr "E427: "
 msgid "E428: Cannot go beyond last matching tag"
@@ -5658,7 +5712,7 @@ msgstr "E428: 
 # msgstr "E428: "
 #, c-format
 msgid "File \"%s\" does not exist"
-msgstr "Ôàéë \"%s\" Ã­Ã¥ Â³Ã±Ã­Ã³Âº"
+msgstr "Ôàéë Â«%s» Ã­Ã¥ Â³Ã±Ã­Ã³Âº"
 
 #. Give an indication of the number of matching tags
 #, c-format
@@ -5673,7 +5727,7 @@ msgstr "  
 
 #, c-format
 msgid "E429: File \"%s\" does not exist"
-msgstr "E429: Ã”àéë \"%s\" Ã­Ã¥ Â³Ã±Ã­Ã³Âº"
+msgstr "E429: Ã”àéë Â«%s» Ã­Ã¥ Â³Ã±Ã­Ã³Âº"
 
 # msgstr "E429: "
 #. Highlight title
@@ -5692,10 +5746,13 @@ msgstr "
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Ã˜Ã«Ã¿Ãµ Ã´Ã Ã©Ã«Ã³ Ã²Ã¥Â´Â³Ã¢ Ã±ÃªÃ®Ã°Ã®Ã·Ã¥Ã­Ã® Ã¤Ã® %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "²ãíîðóºòüñÿ Ã¤Ã®Ã¢Ã£Ã¨Ã© Ã°Ã¿Ã¤Ã®Ãª Ã³ Ã´Ã Ã©Ã«Â³ Ã§ Ã¯Ã®Ã§Ã­Ã Ã·ÃªÃ Ã¬Ã¨"
+
 # msgstr "E430: "
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: Ãîìèëêà Ã´Ã®Ã°Ã¬Ã Ã²Ã³ Ã³ Ã´Ã Ã©Ã«Â³ Ã²Ã¥Â´Â³Ã¢ \"%s\""
+msgstr "E431: Ãîìèëêà Ã´Ã®Ã°Ã¬Ã Ã²Ã³ Ã³ Ã´Ã Ã©Ã«Â³ Ã²Ã¥Â´Â³Ã¢ Â«%s»"
 
 # msgstr "E431: "
 #, c-format
@@ -5711,9 +5768,6 @@ msgstr "E432: 
 msgid "E433: No tags file"
 msgstr "E433: Ãåìຠôàéëó Ã²Ã¥Â´Â³Ã¢"
 
-msgid "Ignoring long line in tags file"
-msgstr "²ãíîðóºòüñÿ Ã¤Ã®Ã¢Ã£Ã¨Ã© Ã°Ã¿Ã¤Ã®Ãª Ã³ Ã´Ã Ã©Ã«Â³ Ã§ Ã¯Ã®Ã§Ã­Ã Ã·ÃªÃ Ã¬Ã¨"
-
 # msgstr "E433: "
 msgid "E434: Can't find tag pattern"
 msgstr "E434: ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã Ã©Ã²Ã¨ Ã§Ã°Ã Ã§Ã®Ãª Ã²Ã¥Â´Ã³"
@@ -5744,10 +5798,10 @@ msgstr "E559: 
 
 #, c-format
 msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: Ãåìຠçàïèñó \"%s\" Ã¯Ã°Ã® Ã¬Ã®Ã¦Ã«Ã¨Ã¢Ã®Ã±Ã²Â³ Ã²Ã¥Ã°Ã¬Â³Ã­Ã Ã«Ã³"
+msgstr "E436: Ãåìຠçàïèñó Â«%s» Ã¯Ã°Ã® Ã¬Ã®Ã¦Ã«Ã¨Ã¢Ã®Ã±Ã²Â³ Ã²Ã¥Ã°Ã¬Â³Ã­Ã Ã«Ã³"
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: Ãîòð³áíà Ã¬Ã®Ã¦Ã«Ã¨Ã¢Â³Ã±Ã²Ã¼ Ã²Ã¥Ã°Ã¬Â³Ã­Ã Ã«Ã³ \"cm\""
+msgstr "E437: Ãîòð³áíà Ã¬Ã®Ã¦Ã«Ã¨Ã¢Â³Ã±Ã²Ã¼ Ã²Ã¥Ã°Ã¬Â³Ã­Ã Ã«Ã³ Â«cm»"
 
 #. Highlight title
 msgid ""
@@ -5892,8 +5946,8 @@ msgstr "
 msgid "Nothing to undo"
 msgstr "Ãåìຠí³÷îãî Ã±ÃªÃ Ã±Ã®Ã¢Ã³Ã¢Ã Ã²Ã¨"
 
-msgid "number changes  time            saved"
-msgstr "íîìåð  Ã§Ã¬Â³Ã­     Ã·Ã Ã±             Ã§Ã¡Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã®"
+msgid "number changes  when               saved"
+msgstr "íîìåð  Ã§Ã¬Â³Ã­Ã¨    Ã·Ã Ã±             Ã§Ã¡Ã¥Ã°Ã¥Ã¦Ã¥Ã­Ã®"
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5998,13 +6052,6 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"Âåðñ³ÿ Ã¤Ã«Ã¿ RISC OS"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6169,7 +6216,7 @@ msgid "by Bram Moolenaar et al."
 msgstr "àâòîð: Bram Moolenaar Ã²Ã  Â³Ã­."
 
 msgid "Vim is open source and freely distributable"
-msgstr "Vim -- Ã¶Ã¥ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã  Ã© Ã¢Â³Ã«Ã¼Ã­Ã® Ã°Ã®Ã§Ã¯Ã®Ã¢Ã±Ã¾Ã¤Ã¦Ã³Ã¢Ã Ã­Ã  Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã "
+msgstr "Vim \97 Ã¶Ã¥ Ã¢Â³Ã¤ÃªÃ°Ã¨Ã²Ã  Ã© Ã¢Â³Ã«Ã¼Ã­Ã® Ã°Ã®Ã§Ã¯Ã®Ã¢Ã±Ã¾Ã¤Ã¦Ã³Ã¢Ã Ã­Ã  Ã¯Ã°Ã®Ã£Ã°Ã Ã¬Ã "
 
 msgid "Help poor children in Uganda!"
 msgstr "Äîïîìîæ³òü Ã±Ã¨Ã°Ã®Ã²Ã Ã¬ Ã§ Ã“ãàíäè!"
@@ -6271,7 +6318,7 @@ msgstr "E446: 
 # msgstr "E446: "
 #, c-format
 msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: Ã”àéë \"%s\" Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã® Ã³ Ã¸Ã«Ã¿ÃµÃ³ Ã¯Ã®Ã¸Ã³ÃªÃ³"
+msgstr "E447: Ã”àéë Â«%s» Ã­Ã¥ Ã§Ã­Ã Ã©Ã¤Ã¥Ã­Ã® Ã³ Ã¸Ã«Ã¿ÃµÃ³ Ã¯Ã®Ã¸Ã³ÃªÃ³"
 
 #, c-format
 msgid "E370: Could not load library %s"
@@ -6373,7 +6420,7 @@ msgstr "E235: 
 # msgstr "E235: "
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236: Ã˜Ã°Ã¨Ã´Ã² \"%s\" Ã­Ã¥ Ã¬Ã®Ã­Ã®Ã¸Ã¨Ã°Ã¨Ã­Ã­Ã¨Ã©"
+msgstr "E236: Ã˜Ã°Ã¨Ã´Ã² Â«%s» Ã­Ã¥ Ã¬Ã®Ã­Ã®Ã¸Ã¨Ã°Ã¨Ã­Ã­Ã¨Ã©"
 
 msgid "E473: Internal error"
 msgstr "E473: Ã‚íóòð³øíÿ Ã¯Ã®Ã¬Ã¨Ã«ÃªÃ "
@@ -6406,11 +6453,11 @@ msgstr "E476: 
 
 #, c-format
 msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" -- Ã¶Ã¥ ÃªÃ Ã²Ã Ã«Ã®Ã£"
+msgstr "E17: Â«%s» \97 Ã¶Ã¥ ÃªÃ Ã²Ã Ã«Ã®Ã£"
 
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: Ã³áë³îòå÷íèé Ã¢Ã¨ÃªÃ«Ã¨Ãª Ã¤Ã® \"%s()\" Ã­Ã¥ Ã¢Ã¤Ã Ã¢Ã±Ã¿"
+msgstr "E364: Ã³áë³îòå÷íèé Ã¢Ã¨ÃªÃ«Ã¨Ãª Ã¤Ã® Â«%s()» Ã­Ã¥ Ã¢Ã¤Ã Ã¢Ã±Ã¿"
 
 #, c-format
 msgid "E448: Could not load library function %s"
@@ -6506,7 +6553,7 @@ msgstr "E36: Ì³
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247: Ãåìຠçàðåºñòðîâàíèõ Ã±Ã¥Ã°Ã¢Ã¥Ã°Â³Ã¢ Ã§ Ã­Ã Ã§Ã¢Ã®Ã¾ \"%s\""
+msgstr "E247: Ãåìຠçàðåºñòðîâàíèõ Ã±Ã¥Ã°Ã¢Ã¥Ã°Â³Ã¢ Ã§ Ã­Ã Ã§Ã¢Ã®Ã¾ Â«%s»"
 
 # msgstr "E36: "
 #, c-format
@@ -6573,11 +6620,11 @@ msgstr "E45: 
 
 #, c-format
 msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: Ã‡Ã¬Â³Ã­Ã­Ã  Ã²Â³Ã«Ã¼ÃªÃ¨ Ã¤Ã«Ã¿ Ã·Ã¨Ã²Ã Ã­Ã­Ã¿: \"%s\""
+msgstr "E46: Ã‡Ã¬Â³Ã­Ã­Ã  Ã²Â³Ã«Ã¼ÃªÃ¨ Ã¤Ã«Ã¿ Ã·Ã¨Ã²Ã Ã­Ã­Ã¿: Â«%s»"
 
 #, c-format
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: ÃÃ¥ Ã¬Ã®Ã¦Ã­Ã  Ã¢Ã±Ã²Ã Ã­Ã®Ã¢Ã¨Ã²Ã¨ Ã§Ã¬Â³Ã­Ã­Ã³ Ã³ Ã¯Â³Ã±Ã®Ã·Ã­Ã¨Ã¶Â³: \"%s\""
+msgstr "E794: ÃÃ¥ Ã¬Ã®Ã¦Ã­Ã  Ã¢Ã±Ã²Ã Ã­Ã®Ã¢Ã¨Ã²Ã¨ Ã§Ã¬Â³Ã­Ã­Ã³ Ã³ Ã¯Â³Ã±Ã®Ã·Ã­Ã¨Ã¶Â³: Â«%s»"
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Ãîìèëêà Ã·Ã¨Ã²Ã Ã­Ã­Ã¿ Ã´Ã Ã©Ã«Ã³ Ã¯Ã®Ã¬Ã¨Ã«Ã®Ãª"
@@ -6674,6 +6721,9 @@ msgstr "E139: 
 msgid "E764: Option '%s' is not set"
 msgstr "E764: ÃŽÃ¯Ã¶Â³Ã¿ '%s' Ã­Ã¥ Ã¢Ã±Ã²Ã Ã­Ã®Ã¢Ã«Ã¥Ã­Ã "
 
+msgid "E850: Invalid register name"
+msgstr "E850: Ãåïðàâèëüíà Ã­Ã Ã§Ã¢Ã  Ã°Ã¥Ã£Â³Ã±Ã²Ã°Ã³"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "Ãîøóê Ã¤Â³Ã©Ã¸Ã®Ã¢ Ã¤Ã® ÃÎ×ÀÒÊÓ, Ã¯Ã°Ã®Ã¤Ã®Ã¢Ã¦Ã³ÂºÃ²Ã¼Ã±Ã¿ Ã§ ÃŠÂ²ÃÖß"
 
@@ -6682,7 +6732,17 @@ msgstr "
 
 #, c-format
 msgid "Need encryption key for \"%s\""
-msgstr "Äëÿ \"%s\" Ã¯Ã®Ã²Ã°Â³Ã¡Ã¥Ã­ ÃªÃ«Ã¾Ã·: "
+msgstr "Äëÿ Â«%s» Ã¯Ã®Ã²Ã°Â³Ã¡Ã¥Ã­ ÃªÃ«Ã¾Ã·: "
+
+msgid "can't delete OutputObject attributes"
+msgstr "íå Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã¨Ã¹Ã¨Ã²Ã¨ Ã Ã²Ã°Ã¨Ã¡Ã³Ã²Ã¨ OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "softspace Ã¬Ã Âº Ã¡Ã³Ã²Ã¨ Ã¶Â³Ã«Ã¨Ã¬"
+
+# msgstr "E180: "
+msgid "invalid attribute"
+msgstr "íåïðàâèëüíèé Ã Ã²Ã°Ã¨Ã¡Ã³Ã²"
 
 msgid "writelines() requires list of strings"
 msgstr "äëÿ writelines() Ã¯Ã®Ã²Ã°Â³Ã¡Ã¥Ã­ Ã±Ã¯Ã¨Ã±Ã®Ãª Ã°Ã¿Ã¤ÃªÂ³Ã¢"
@@ -6693,6 +6753,61 @@ msgstr "E264: Python: 
 msgid "no such buffer"
 msgstr "òàêîãî Ã¡Ã³Ã´Ã¥Ã°Ã  Ã­Ã¥Ã¬Ã Âº"
 
+# msgstr "E406: "
+msgid "empty keys are not allowed"
+msgstr "ïîðîæí³ ÃªÃ«Ã¾Ã·Â³ Ã­Ã¥ Ã¤Ã®Ã§Ã¢Ã®Ã«Ã¥Ã­Â³"
+
+msgid "failed to add key to dictionary"
+msgstr "íå Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¤Ã®Ã¤Ã Ã²Ã¨ ÃªÃ«Ã¾Ã· Ã¤Ã® Ã±Ã«Ã®Ã¢Ã­Ã¨ÃªÃ "
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "íå Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã§Ã­Ã¨Ã¹Ã¨Ã²Ã¨ Ã Ã²Ã°Ã¨Ã¡Ã³Ã²Ã¨ DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "ÃÃ¥ Ã¬Ã®Ã¦Ã­Ã  Ã§Ã¬Â³Ã­Ã¨Ã²Ã¨ Ã´Â³ÃªÃ±Ã®Ã¢Ã Ã­Ã¨Ã© Ã±Ã«Ã®Ã¢Ã­Ã¨Ãª"
+
+msgid "Only boolean objects are allowed"
+msgstr "Äîçâîëåíî Ã²Â³Ã«Ã¼ÃªÃ¨ Ã«Ã®Ã£Â³Ã·Ã­Â³ Ã®Ã¡\92ºêòè"
+
+msgid "Cannot set this attribute"
+msgstr "ÃÃ¥ Ã¬Ã®Ã¦Ã­Ã  Ã¢Ã±Ã²Ã Ã­Ã®Ã¢Ã¨Ã²Ã¨ Ã¶Ã¥Ã© Ã Ã²Ã°Ã¨Ã¡Ã³Ã²"
+
+msgid "no such key in dictionary"
+msgstr "íåìຠòàêîãî ÃªÃ«Ã¾Ã·Ã  Ã¢ Ã±Ã«Ã®Ã¢Ã­Ã¨ÃªÃ³"
+
+msgid "dict is locked"
+msgstr "ñëîâíèê Ã§Ã Ã¡Ã«Ã®ÃªÃ®Ã¢Ã Ã­Ã®"
+
+msgid "internal error: failed to get vim list item"
+msgstr "âíóòð³øíÿ Ã¯Ã®Ã¬Ã¨Ã«ÃªÃ : Ã­Ã¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã®Ã²Ã°Ã¨Ã¬Ã Ã²Ã¨ Ã¥Ã«Ã¥Ã¬Ã¥Ã­Ã² Ã±Ã¯Ã¨Ã±ÃªÃ³ vim"
+
+msgid "list is locked"
+msgstr "ñïèñîê Ã§Ã Ã¡Ã«Ã®ÃªÃ®Ã¢Ã Ã­Ã®"
+
+msgid "Failed to add item to list"
+msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¤Ã®Ã¤Ã Ã²Ã¨ Ã¥Ã«Ã¥Ã¬Ã¥Ã­Ã² Ã¤Ã® Ã±Ã¯Ã¨Ã±ÃªÃ³"
+
+msgid "internal error: no vim list item"
+msgstr "âíóòð³øíÿ Ã¯Ã®Ã¬Ã¨Ã«ÃªÃ : Ã­Ã¥Ã¬Ã Âº Ã¥Ã«Ã¥Ã¬Ã¥Ã­Ã²Ã  Ã±Ã¯Ã¨Ã±ÃªÃ³ vim"
+
+msgid "can only assign lists to slice"
+msgstr "ìîæíà Ã¯Ã°Ã¨Ã±Ã¢Ã®Ã¾Ã¢Ã Ã²Ã¨ Ã±Ã¯Ã¨Ã±ÃªÃ¨ Ã²Â³Ã«Ã¼ÃªÃ¨ Ã§Ã°Â³Ã§Ã Ã¬"
+
+msgid "internal error: failed to add item to list"
+msgstr "âíóòð³øíÿ Ã¯Ã®Ã¬Ã¨Ã«ÃªÃ : Ã­Ã¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¤Ã®Ã¤Ã Ã²Ã¨ Ã¥Ã«Ã¥Ã¬Ã¥Ã­Ã² Ã¤Ã® Ã±Ã¯Ã¨Ã±ÃªÃ³"
+
+msgid "can only concatenate with lists"
+msgstr "ìîæíà Ã§\92ºäíóâàòè Ã²Â³Ã«Ã¼ÃªÃ¨ Ã§Â³ Ã±Ã¯Ã¨Ã±ÃªÃ Ã¬Ã¨"
+
+msgid "Cannot modify fixed list"
+msgstr "ÃÃ¥ Ã¬Ã®Ã¦Ã­Ã  Ã§Ã¬Â³Ã­Ã¨Ã²Ã¨ Ã´Â³ÃªÃ±Ã®Ã¢Ã Ã­Ã¨Ã© Ã±Ã¯Ã¨Ã±Ã®Ãª"
+
+msgid "'self' argument must be a dictionary"
+msgstr "Àðãóìåíò Â«self» Ã¬Ã Âº Ã¡Ã³Ã²Ã¨ Ã±Ã«Ã®Ã¢Ã­Ã¨ÃªÃ®Ã¬"
+
+msgid "failed to run function"
+msgstr "ÃÃ¥ Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¢Ã¨ÃªÃ®Ã­Ã Ã²Ã¨ Ã´Ã³Ã­ÃªÃ¶Â³Ã¾"
+
 msgid "attempt to refer to deleted window"
 msgstr "ñïðîáà Ã§Ã¢Ã¥Ã°Ã­Ã³Ã²Ã¨Ã±Ã¿ Ã¤Ã® Ã§Ã­Ã¨Ã¹Ã¥Ã­Ã®Ã£Ã® Ã¢Â³ÃªÃ­Ã "
 
@@ -6720,43 +6835,11 @@ msgstr "
 msgid "attempt to refer to deleted buffer"
 msgstr "ñïðîáà Ã§Ã¢Ã¥Ã°Ã­Ã¥Ã­Ã­Ã¿ Ã¤Ã® Ã§Ã­Ã¨Ã¹Ã¥Ã­Ã®Ã£Ã® Ã¡Ã³Ã´Ã¥Ã°Ã "
 
-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
-#~ msgstr "-name <íàçâà>\t\tÂèêîðèñòàòè Ã°Ã¥Ã±Ã³Ã°Ã±Ã¨, Ã­Â³Ã¡Ã¨ vim Ã¬Ã Âº Ã§Ã Ã¤Ã Ã­Ã³ <íàçâó>"
-
-#~ msgid "\t\t\t  (Unimplemented)\n"
-#~ msgstr "\t\t\t  (ÃÃ¥ Ã¤Â³Âº)\n"
-
-#~ msgid "E396: containedin argument not accepted here"
-#~ msgstr "E396: Ã€Ã°Ã£Ã³Ã¬Ã¥Ã­Ã² containedin Ã²Ã³Ã² Ã­Ã¥Ã¯Ã°Ã¨Ã©Ã­Ã¿Ã²Ã­Ã¨Ã©"
-
-# msgstr "E232: "
-#~ msgid "Vim dialog..."
-#~ msgstr "ijàëîã Vim..."
-
-# msgstr "E234: "
-#~ msgid "Font Selection"
-#~ msgstr "Âèáðàòè Ã¸Ã°Ã¨Ã´Ã²"
-
-# msgstr "E289: "
-#~ msgid "E290: over-the-spot style requires fontset"
-#~ msgstr "E290: Ã‘òèëü over-the-spot Ã¢Ã¨Ã¬Ã Ã£Ã Âº Ã­Ã Ã¡Â³Ã° Ã¸Ã°Ã¨Ã´Ã²Â³Ã¢"
-
-# msgstr "E290: "
-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-#~ msgstr "E291: Ã“ Ã¢Ã Ã± Ã±Ã²Ã Ã°Ã¸Ã  Ã§Ã  1.2.3 Ã¢Ã¥Ã°Ã±Â³Ã¿ GTK+. ÃŽÃ¡Ã«Ã Ã±Ã²Ã¼ Ã±Ã²Ã Ã­Ã³ Ã¢Ã¨Ã¬ÃªÃ­Ã¥Ã­Ã®"
-
-# msgstr "E291: "
-#~ msgid "E292: Input Method Server is not running"
-#~ msgstr "E292: Ã‘åðâåð Ã¬Ã¥Ã²Ã®Ã¤Ã³ Ã¢Ã¢Ã®Ã¤Ã³ Ã­Ã¥ Ã´Ã³Ã­ÃªÃ¶Â³Ã®Ã­Ã³Âº"
-
-#~ msgid "with GTK-GNOME GUI."
-#~ msgstr "ç GUI GTK-GNOME."
-
-#~ msgid "with GTK GUI."
-#~ msgstr "ç GUI GTK."
+msgid "unable to convert to vim structure"
+msgstr "íå Ã¢Ã¤Ã Ã«Ã®Ã±Ã¿ Ã¯Ã¥Ã°Ã¥Ã²Ã¢Ã®Ã°Ã¨Ã²Ã¨ Ã¤Ã® Ã±Ã²Ã°Ã³ÃªÃ²Ã³Ã°Ã¨ vim"
 
-#~ msgid "[NL found]"
-#~ msgstr "[Çíàéäåíî NL]"
+msgid "NULL reference passed"
+msgstr "ïåðåäàíî Ã¯Ã®Ã±Ã¨Ã«Ã Ã­Ã­Ã¿ NULL"
 
-#~ msgid "E569: maximum number of cscope connections reached"
-#~ msgstr "E569: ÃŠÂ³Ã«Ã¼ÃªÂ³Ã±Ã²Ã¼ Ã§'ºäíàíü Ã§ cscope Ã¤Ã®Ã±Ã¿Ã£Ã«Ã  Ã¬Ã ÃªÃ±Ã¨Ã¬Ã³Ã¬Ã³"
+msgid "internal error: invalid value type"
+msgstr "âíóòð³øíÿ Ã¯Ã®Ã¬Ã¨Ã«ÃªÃ : Ã­Ã¥Ã¯Ã°Ã Ã¢Ã¨Ã«Ã¼Ã­Ã¨Ã© Ã²Ã¨Ã¯ Ã§Ã­Ã Ã·Ã¥Ã­Ã­Ã¿"
index fb624e7..cd79bdc 100644 (file)
@@ -14,10 +14,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 12:13+0300\n"
+"POT-Creation-Date: 2013-01-17 10:06+0200\n"
 "PO-Revision-Date: 2010-06-18 21:53+0300\n"
 "Last-Translator: Ðнатолій Ð¡Ð°Ñ…нік <sakhnik@gmail.com>\n"
 "Language-Team: Bohdan Vlasyuk <bohdan@vstu.edu.ua>\n"
+"Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -43,6 +44,9 @@ msgstr "[СпиÑок Ð¼Ñ–Ñць]"
 msgid "[Quickfix List]"
 msgstr "[СпиÑок Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½ÑŒ]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Ðвтокоманди Ð¿Ñ€Ð¸Ð·Ð²ÐµÐ»Ð¸ Ð´Ð¾ ÑкаÑуваннѠкоманди"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Ðемає Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑ‚Ñ– Ñ€Ð¾Ð·Ð¼Ñ–Ñтити Ñ…оч Ð¾Ð´Ð¸Ð½ Ð±ÑƒÑ„ер, Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚и..."
 
@@ -174,7 +178,6 @@ msgstr "Знизу"
 msgid "Top"
 msgstr "Вгорі"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -235,11 +238,11 @@ msgstr ""
 
 #, c-format
 msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ð±ÑƒÑ„ер \"%s\""
+msgstr "E102: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ð±ÑƒÑ„ер Â«%s»"
 
 #, c-format
 msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: Ð‘уфер \"%s\" Ð½Ðµ Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ñ– Ð¿Ð¾Ñ€Ñ–внÑннÑ"
+msgstr "E103: Ð‘уфер Â«%s» Ð½Ðµ Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ñ– Ð¿Ð¾Ñ€Ñ–внÑннÑ"
 
 msgid "E787: Buffer changed unexpectedly"
 msgstr "E787: Ð‘уфер Ð½ÐµÑподівано Ð·Ð¼Ñ–нивÑÑ"
@@ -302,6 +305,13 @@ msgstr " Ð”оповненнѠміÑцевих ÐºÐ»ÑŽÑ‡Ð¾Ð²Ð¸Ñ… Ñлів (^N^P)"
 msgid "Hit end of paragraph"
 msgstr "ТрапивÑѠкінець Ð¿Ð°Ñ€Ð°Ð³Ñ€Ð°Ñ„а"
 
+# msgstr "E443: "
+msgid "E839: Completion function changed window"
+msgstr "E839: Ð¤ÑƒÐ½ÐºÑ†Ñ–ѠдоповненнѠзмінила Ð²Ñ–кно"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Ð¤ÑƒÐ½ÐºÑ†Ñ–ѠдоповненнѠзнищила Ñ‚екÑÑ‚"
+
 msgid "'dictionary' option is empty"
 msgstr "ОпціѠ'dictionary' Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ"
 
@@ -448,7 +458,7 @@ msgid "E711: List value has not enough items"
 msgstr "E711: Ð¡Ð¿Ð¸Ñок Ð¼Ð°Ñ” Ð½ÐµÐ´Ð¾Ñтатньо ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚ів"
 
 msgid "E690: Missing \"in\" after :for"
-msgstr "E690: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ \"in\" Ð¿Ñ–ÑлѠ:for"
+msgstr "E690: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Â«in» Ð¿Ñ–ÑлѠ:for"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -456,7 +466,7 @@ msgstr "E107: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð´ÑƒÐ¶ÐºÐ¸: %s"
 
 #, c-format
 msgid "E108: No such variable: \"%s\""
-msgstr "E108: Ð—мінної Ð½ÐµÐ¼Ð°Ñ”: \"%s\""
+msgstr "E108: Ð—мінної Ð½ÐµÐ¼Ð°Ñ”: Â«%s»"
 
 msgid "E743: variable nested too deep for (un)lock"
 msgstr "E743: Ð—мінна Ð¼Ð°Ñ” Ð·Ð°Ð±Ð°Ð³Ð°Ñ‚о Ð²ÐºÐ»Ð°Ð´ÐµÐ½ÑŒ Ñ‰Ð¾Ð± Ð±ÑƒÑ‚и Ð·Ð°-/відкритою."
@@ -501,11 +511,11 @@ msgstr "E113: Ðевідома Ð¾Ð¿Ñ†Ñ–Ñ: %s"
 
 #, c-format
 msgid "E114: Missing quote: %s"
-msgstr "E114: Ð‘ракує '\"': %s"
+msgstr "E114: Ð‘ракує Ð»Ð°Ð¿ÐºÐ¸: %s"
 
 #, c-format
 msgid "E115: Missing quote: %s"
-msgstr "E115: Ð‘ракує \"'\": %s"
+msgstr "E115: Ð‘ракує Ð»Ð°Ð¿ÐºÐ¸: %s"
 
 # msgstr "E404: "
 #, c-format
@@ -523,7 +533,7 @@ msgstr "E720: Ð‘ракує Ð´Ð²Ð¾ÐºÑ€Ð°Ð¿ÐºÐ¸ Ñƒ Ñловнику: %s"
 
 #, c-format
 msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: ÐŸÐ¾Ð²Ñ‚ореннѠключа Ð² Ñловнику: \"%s\""
+msgstr "E721: ÐŸÐ¾Ð²Ñ‚ореннѠключа Ð² Ñловнику: Â«%s»"
 
 # msgstr "E235: "
 #, c-format
@@ -565,6 +575,10 @@ msgstr "E725: Ð’иклик dict-функції Ð±ÐµÐ· Ñловника: %s"
 msgid "E808: Number or Float required"
 msgstr "E808: Ð¢Ñ€ÐµÐ±Ð° Ð²ÐºÐ°Ð·Ð°Ñ‚и Number Ñ‡Ð¸ Float"
 
+# msgstr "E14: "
+msgid "add() argument"
+msgstr "аргумент add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Ð—абагато Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ів"
 
@@ -580,11 +594,23 @@ msgstr "E785: complete() Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¶Ð¸Ð²Ð°Ñ‚и Ñ‚ільки Ð² Ñ€ÐµÐ¶Ð¸Ð¼Ñ–
 msgid "&Ok"
 msgstr "&O:Гаразд"
 
+# msgstr "E14: "
+msgid "extend() argument"
+msgstr "аргумент extend()"
+
 # msgstr "E226: "
 #, c-format
 msgid "E737: Key already exists: %s"
 msgstr "E737: ÐšÐ»ÑŽÑ‡ Ð²Ð¶Ðµ Ñ–Ñнує: %s"
 
+# msgstr "E14: "
+msgid "map() argument"
+msgstr "аргумент map()"
+
+# msgstr "E14: "
+msgid "filter() argument"
+msgstr "аргумент filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld Ñ€Ñдків: "
@@ -603,6 +629,10 @@ msgstr ""
 msgid "called inputrestore() more often than inputsave()"
 msgstr "Виклики Ð´Ð¾ inputrestore() Ñ‡Ð°Ñтіше, Ð½Ñ–ж Ð´Ð¾ inputsave()"
 
+# msgstr "E14: "
+msgid "insert() argument"
+msgstr "аргумент insert()"
+
 # msgstr "E406: "
 msgid "E786: Range not allowed"
 msgstr "E786: Ð†Ð½Ñ‚ервал Ð½Ðµ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾"
@@ -630,12 +660,24 @@ msgstr "E241: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідіÑлати Ð´Ð¾ %s"
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати Ð²Ñ–дповідь Ñервера"
 
+# msgstr "E14: "
+msgid "remove() argument"
+msgstr "аргумент remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Ð—абагато Ñимвольних Ð¿Ð¾Ñилань (цикл?)"
 
+# msgstr "E14: "
+msgid "reverse() argument"
+msgstr "аргумент reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠнадіÑлати ÐºÐ»Ñ–єнту"
 
+# msgstr "E14: "
+msgid "sort() argument"
+msgstr "аргумент sort()"
+
 # msgstr "E364: "
 msgid "E702: Sort compare function failed"
 msgstr "E702: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ñƒ Ñ„ункції Ð¿Ð¾Ñ€Ñ–внÑннÑ"
@@ -673,14 +715,6 @@ msgid "E806: using Float as a String"
 msgstr "E806: Float Ð²Ð¶Ð¸Ñ‚о Ñк String"
 
 #, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Ðазва Ð·Ð¼Ñ–нної Funcref Ð¼Ð°Ñ” Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ‚иÑѠз Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ— Ð»Ñ–тери: %s"
-
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Ðазва Ð·Ð¼Ñ–нної Ñпівпадає Ð· Ñ–Ñнуючою Ñ„ункцією: %s"
-
-#, c-format
 msgid "E706: Variable type mismatch for: %s"
 msgstr "E706: Ðеправильний Ñ‚ип Ð·Ð¼Ñ–нної: %s"
 
@@ -689,6 +723,14 @@ msgid "E795: Cannot delete variable %s"
 msgstr "E795: Ðе Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð½Ð¸Ñ‰Ð¸Ñ‚и Ð·Ð¼Ñ–нну %s"
 
 #, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: Ðазва Ð·Ð¼Ñ–нної Funcref Ð¼Ð°Ñ” Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ‚иÑѠз Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ— Ð»Ñ–тери: %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Ðазва Ð·Ð¼Ñ–нної Ñпівпадає Ð· Ñ–Ñнуючою Ñ„ункцією: %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: Ð—наченнѠзахищене: %s"
 
@@ -714,6 +756,10 @@ msgstr "E124: Ð‘ракує '(': %s"
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Ðедозволений Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Ðазва Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚у Ð¿Ð¾Ð²Ñ‚орюєтьÑÑ: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Ð‘ракує :endfunction"
 
@@ -785,7 +831,7 @@ msgid "No old files"
 msgstr "Жодного Ñтарого Ñ„айлу"
 
 msgid "Entering Debug mode.  Type \"cont\" to continue."
-msgstr "Режим Ð½Ð°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ.  Ð©Ð¾Ð± Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶Ð¸Ñ‚и Ð²Ð²ÐµÐ´Ñ–Ñ‚ÑŒ \"cont\"."
+msgstr "Режим Ð½Ð°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ.  Ð©Ð¾Ð± Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶Ð¸Ñ‚и Ð²Ð²ÐµÐ´Ñ–Ñ‚ÑŒ Â«cont»."
 
 #, c-format
 msgid "line %ld: %s"
@@ -797,7 +843,7 @@ msgstr "команда: %s"
 
 #, c-format
 msgid "Breakpoint in \"%s%s\" line %ld"
-msgstr "Точка Ð·ÑƒÐ¿Ð¸Ð½ÐºÐ¸ Ð² \"%s%s\" Ñ€Ñдок %ld"
+msgstr "Точка Ð·ÑƒÐ¿Ð¸Ð½ÐºÐ¸ Ð² Â«%s%s» Ñ€Ñдок %ld"
 
 #, c-format
 msgid "E161: Breakpoint not found: %s"
@@ -811,21 +857,21 @@ msgid "%3d  %s %s  line %ld"
 msgstr "%3d %s %s   Ñ€Ñдок %ld"
 
 msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: Ð¡Ð¿Ð¾Ñ‡Ð°Ñ‚ку Ð·Ñ€Ð¾Ð±Ñ–Ñ‚ÑŒ \":profile start {файл}\""
+msgstr "E750: Ð¡Ð¿Ð¾Ñ‡Ð°Ñ‚ку Ð·Ñ€Ð¾Ð±Ñ–Ñ‚ÑŒ Â«:profile start {файл}»"
 
 msgid "Save As"
 msgstr "Зберегти Ñк"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
-msgstr "Зберегти Ð·Ð¼Ñ–ни Ð² \"%s\"?"
+msgstr "Зберегти Ð·Ð¼Ñ–ни Ð² Â«%s»?"
 
 msgid "Untitled"
 msgstr "Ðеназваний"
 
 #, c-format
 msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: Ð‘уфер \"%s\" Ð¼Ð°Ñ” Ð½ÐµÐ·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ñ– Ð·Ð¼Ñ–ни"
+msgstr "E162: Ð‘уфер Â«%s» Ð¼Ð°Ñ” Ð½ÐµÐ·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ñ– Ð·Ð¼Ñ–ни"
 
 msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
 msgstr ""
@@ -847,38 +893,38 @@ msgstr "E666: ÐšÐ¾Ð¼Ð¿Ñ–лÑтор Ð½Ðµ Ð¿Ñ–дтримуєтьÑÑ: %s"
 # msgstr "E195: "
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
-msgstr "Пошук \"%s\" Ð² \"%s\""
+msgstr "Пошук Â«%s» Ð² Â«%s»"
 
 #, c-format
 msgid "Searching for \"%s\""
-msgstr "Пошук \"%s\""
+msgstr "Пошук Â«%s»"
 
 #, c-format
 msgid "not found in 'runtimepath': \"%s\""
-msgstr "Ð’ 'runtimepath' Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ \"%s\""
+msgstr "Ð’ 'runtimepath' Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Â«%s»"
 
 msgid "Source Vim script"
 msgstr "Прочитати Ñкрипт Vim"
 
 #, c-format
 msgid "Cannot source a directory: \"%s\""
-msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати ÐºÐ°Ñ‚алог: \"%s\""
+msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати ÐºÐ°Ñ‚алог: Â«%s»"
 
 #, c-format
 msgid "could not source \"%s\""
-msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвиконати \"%s\""
+msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвиконати Â«%s»"
 
 #, c-format
 msgid "line %ld: could not source \"%s\""
-msgstr "Ñ€Ñдок %ld: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾ÑѠвиконати \"%s\""
+msgstr "Ñ€Ñдок %ld: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾ÑѠвиконати Â«%s»"
 
 #, c-format
 msgid "sourcing \"%s\""
-msgstr "виконуєтьÑÑ \"%s\""
+msgstr "виконуєтьÑѠ«%s»"
 
 #, c-format
 msgid "line %ld: sourcing \"%s\""
-msgstr "Ñ€Ñдок %ld: Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑÑ \"%s\""
+msgstr "Ñ€Ñдок %ld: Ð²Ð¸ÐºÐ¾Ð½ÑƒÑ”Ñ‚ÑŒÑѠ«%s»"
 
 #, c-format
 msgid "finished sourcing %s"
@@ -912,11 +958,11 @@ msgstr "E168: :finish Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтано Ð¿Ð¾Ð·Ð° Ð²Ð¸ÐºÐ¾Ð½ÑƒÐ²Ð°Ð½Ð¸Ð¼ Ñ„
 
 #, c-format
 msgid "Current %slanguage: \"%s\""
-msgstr "Мова (%s): \"%s\""
+msgstr "Мова (%s): Â«%s»"
 
 #, c-format
 msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвÑтановити Ð¼Ð¾Ð²Ñƒ \"%s\""
+msgstr "E197: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвÑтановити Ð¼Ð¾Ð²Ñƒ Â«%s»"
 
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
@@ -959,7 +1005,7 @@ msgstr "E136: viminfo: Ð—абагато Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº, Ñ€ÐµÑˆÑ‚а Ñ„айлу Ð±
 
 #, c-format
 msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "ЗчитуєтьÑѠфайл viminfo: \"%s\"%s%s%s"
+msgstr "ЗчитуєтьÑѠфайл viminfo: Â«%s»%s%s%s"
 
 msgid " info"
 msgstr " Ñ–нформаціÑ"
@@ -976,7 +1022,7 @@ msgstr " ÐЕ Ð’ДÐЛОСЯ"
 #. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Ðе Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð·Ð°Ð¿Ð¸Ñ Ñƒ Ñ„айл viminfo: \"%s\""
+msgstr "E137: Ðе Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ð·Ð°Ð¿Ð¸Ñ Ñƒ Ñ„айл viminfo: %s"
 
 #, c-format
 msgid "E138: Can't write viminfo file %s!"
@@ -984,14 +1030,13 @@ msgstr "E138: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзапиÑати Ñ„айл viminfo %s!"
 
 #, c-format
 msgid "Writing viminfo file \"%s\""
-msgstr "ЗапиÑуєтьÑѠфайл viminfo \"%s\""
+msgstr "ЗапиÑуєтьÑѠфайл viminfo Â«%s»"
 
 #. Write the info:
 #, c-format
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Ð¦ÐµÐ¹ Ñ„айл Ð°Ð²Ñ‚оматично Ñтворений Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -999,7 +1044,6 @@ msgstr ""
 "# ÐœÐ¾Ð¶ÐµÑ‚е Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ñ‚и, Ð°Ð»Ðµ ÐžÐ‘ЕРЕЖÐО!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Ð—наченнѠ'encoding' Ð¿Ñ–д Ñ‡Ð°Ñ ÑтвореннѠцього Ñ„айлу\n"
 
@@ -1014,11 +1058,11 @@ msgstr "E140: Ð’икориÑтайте ! Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу Ñ‡Ð°Ñтини Ð±Ñƒ
 
 #, c-format
 msgid "Overwrite existing file \"%s\"?"
-msgstr "ПерепиÑати Ñ–Ñнуючий Ñ„айл \"%s\"?"
+msgstr "ПерепиÑати Ñ–Ñнуючий Ñ„айл Â«%s»?"
 
 #, c-format
 msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "Файл Ð¾Ð±Ð¼Ñ–ну \"%s\" Ñ–Ñнує, Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñати?"
+msgstr "Файл Ð¾Ð±Ð¼Ñ–ну Â«%s» Ñ–Ñнує, Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñати?"
 
 #, c-format
 msgid "E768: Swap file exists: %s (:silent! overrides)"
@@ -1036,7 +1080,7 @@ msgid ""
 "'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"ДлѠ\"%s\" Ð²Ñтановлено 'readonly'.\n"
+"ДлѠ«%s» Ð²Ñтановлено 'readonly'.\n"
 "Бажаєте Ð²Ñе Ð¾Ð´Ð½Ð¾ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶Ð¸Ñ‚и Ð·Ð°Ð¿Ð¸Ñ?"
 
 #, c-format
@@ -1045,13 +1089,13 @@ msgid ""
 "It may still be possible to write it.\n"
 "Do you wish to try?"
 msgstr ""
-"Файл \"%s\" Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ñ‚ільки Ñ‡Ð¸Ñ‚ати.\n"
+"Файл Â«%s» Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ñ‚ільки Ñ‡Ð¸Ñ‚ати.\n"
 "Проте, Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾, Ð¹Ð¾Ð³Ð¾ Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð°Ð¿Ð¸Ñати.\n"
 "Хочете Ñпробувати?"
 
 #, c-format
 msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: \"%s\" Ñ‚ільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚аннѠ(! Ñ‰Ð¾Ð± Ð½Ðµ Ð·Ð²Ð°Ð¶Ð°Ñ‚и)"
+msgstr "E505: Â«%s» Ñ‚ільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚аннѠ(! Ñ‰Ð¾Ð± Ð½Ðµ Ð·Ð²Ð°Ð¶Ð°Ñ‚и)"
 
 msgid "Edit File"
 msgstr "Редагувати Ð¤Ð°Ð¹Ð»"
@@ -1108,7 +1152,6 @@ msgstr "E148: Ð£ global Ð±Ñ€Ð°ÐºÑƒÑ” Ð·Ñ€Ð°Ð·ÐºÐ°"
 msgid "Pattern found in every line: %s"
 msgstr "Зразок Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñƒ ÐºÐ¾Ð¶Ð½Ð¾Ð¼Ñƒ Ñ€Ñдку: %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1131,7 +1174,7 @@ msgstr "E149: Ð’ибачте, Ð½ÐµÐ¼Ð°Ñ” Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸ Ð´Ð»Ñ %s"
 
 #, c-format
 msgid "Sorry, help file \"%s\" not found"
-msgstr "Вибачте, Ñ„айл Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸ \"%s\" Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾"
+msgstr "Вибачте, Ñ„айл Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸ Â«%s» Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾"
 
 #, c-format
 msgid "E150: Not a directory: %s"
@@ -1151,7 +1194,7 @@ msgstr "E670: ÐœÑ–шанина ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½ÑŒ Ñ„айлу Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸ Ð´Ð»
 
 #, c-format
 msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: ÐŸÐ¾Ð²Ñ‚ореннѠтеґу \"%s\" Ñƒ Ñ„айлі %s/%s"
+msgstr "E154: ÐŸÐ¾Ð²Ñ‚ореннѠтеґу Â«%s» Ñƒ Ñ„айлі %s/%s"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
@@ -1192,7 +1235,7 @@ msgid "[Deleted]"
 msgstr "[Знищено]"
 
 msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
-msgstr "Режим Ex. Ð”лѠповерненнѠдо Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚е \"visual\""
+msgstr "Режим Ex. Ð”лѠповерненнѠдо Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð¹Ñ‚е Â«visual»"
 
 msgid "E501: At end-of-file"
 msgstr "E501: ÐšÑ–нець Ñ„айлу"
@@ -1220,7 +1263,7 @@ msgid "E493: Backwards range given"
 msgstr "E493: Ð†Ð½Ñ‚ервал Ð·Ð°Ð´Ð°Ð½Ð¾ Ð½Ð°Ð²Ð¸Ð²Ð¾Ñ€Ñ–Ñ‚"
 
 msgid "Backwards range given, OK to swap"
-msgstr "Інтервал Ð·Ð°Ð´Ð°Ð½Ð¾ Ð½Ð°Ð²Ð¸Ð²Ð¾Ñ€Ñ–Ñ‚, Ñ‰Ð¾Ð± Ð¿Ð¾Ð¼Ñ–нÑти Ð¼Ñ–ÑцÑми -- Ð“ÐРÐЗД"
+msgstr "Інтервал Ð·Ð°Ð´Ð°Ð½Ð¾ Ð½Ð°Ð²Ð¸Ð²Ð¾Ñ€Ñ–Ñ‚, Ñ‰Ð¾Ð± Ð¿Ð¾Ð¼Ñ–нÑти Ð¼Ñ–ÑцÑми â€” Ð“ÐРÐЗД"
 
 msgid "E494: Use w or w>>"
 msgstr "E494: Ð¡Ð¿Ñ€Ð¾Ð±ÑƒÐ¹Ñ‚е w Ð°Ð±Ð¾ w>>"
@@ -1288,6 +1331,9 @@ msgstr "E182: Ðеправильна Ð½Ð°Ð·Ð²Ð° ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸"
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: ÐšÐ¾Ð¼Ð°Ð½Ð´Ð¸ ÐºÐ¾Ñ€Ð¸Ñтувача Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ– Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ‚иÑѠз Ð²ÐµÐ»Ð¸ÐºÐ¾Ñ— Ð»Ñ–тери"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: Ð—арезервована Ð½Ð°Ð·Ð²Ð°, Ð½Ðµ Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувацької ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸"
+
 # msgstr "E183: "
 #, c-format
 msgid "E184: No such user-defined command: %s"
@@ -1309,8 +1355,8 @@ msgstr "Ðевідомо"
 
 # msgstr "E184: "
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ñхему ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ñ–в %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ñхему ÐºÐ¾Ð»ÑŒÐ¾Ñ€Ñ–в Â«%s»"
 
 msgid "Greetings, Vim user!"
 msgstr "ВітаннÑ, ÐºÐ¾Ñ€Ð¸Ñтувачу Vim!"
@@ -1380,12 +1426,12 @@ msgstr "E739: Ðе Ð²Ð´Ð°Ð»Ð¾ÑÑ Ñтворити ÐºÐ°Ñ‚алог: %s"
 
 #, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: Ð¤Ð°Ð¹Ð» \"%s\" Ñ–Ñнує (! Ñ‰Ð¾Ð± Ð½Ðµ Ð·Ð²Ð°Ð¶Ð°Ñ‚и)"
+msgstr "E189: Ð¤Ð°Ð¹Ð» Â«%s» Ñ–Ñнує (! Ñ‰Ð¾Ð± Ð½Ðµ Ð·Ð²Ð°Ð¶Ð°Ñ‚и)"
 
 # msgstr "E189: "
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити \"%s\" Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу"
+msgstr "E190: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити Â«%s» Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу"
 
 # msgstr "E190: "
 #. set mark
@@ -1404,23 +1450,26 @@ msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: Ðемає Ð½Ð°Ð·Ð²Ð¸ Ð²Ñ‚оринного Ñ„айлу Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–ни '#'"
 
 msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: Ðемає Ð½Ð°Ð·Ð²Ð¸ Ñ„айлу Ð°Ð²Ñ‚окоманди Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–ни \"<afile>\""
+msgstr "E495: Ðемає Ð½Ð°Ð·Ð²Ð¸ Ñ„айлу Ð°Ð²Ñ‚окоманди Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–ни Â«<afile>»"
 
 msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: Ðемає Ð½Ð¾Ð¼ÐµÑ€Ð° Ð±ÑƒÑ„ера Ð°Ð²Ñ‚окоманди Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–ни \"<abuf>\""
+msgstr "E496: Ðемає Ð½Ð¾Ð¼ÐµÑ€Ð° Ð±ÑƒÑ„ера Ð°Ð²Ñ‚окоманди Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–ни Â«<abuf>»"
 
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: Ðемає Ð½Ð°Ð·Ð²Ð¸ Ð·Ð±Ñ–гу Ð°Ð²Ñ‚окоманди Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–ни \"<amatch>\""
+msgstr "E497: Ðемає Ð½Ð°Ð·Ð²Ð¸ Ð·Ð±Ñ–гу Ð°Ð²Ñ‚окоманди Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–ни Â«<amatch>»"
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: Ðемає Ð½Ð°Ð·Ð²Ð¸ Ñ„айлу :source Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–ни \"<sfile>\""
+msgstr "E498: Ðемає Ð½Ð°Ð·Ð²Ð¸ Ñ„айлу :source Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–ни Â«<sfile>»"
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: Ð½ÐµÐ¼Ð°Ñ” Ð½Ð¾Ð¼ÐµÑ€Ð° Ñ€Ñдка, Ñ‰Ð¾Ð± Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати Ð· Â«<sfile>»"
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: Ðазва Ñ„айлу Ð´Ð»Ñ '%' Ñ‡Ð¸ '#' Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ, Ð¿Ñ€Ð°Ñ†ÑŽÑ” Ð»Ð¸ÑˆÐµ Ð· \":p:h\""
+msgstr "E499: Ðазва Ñ„айлу Ð´Ð»Ñ '%' Ñ‡Ð¸ '#' Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ, Ð¿Ñ€Ð°Ñ†ÑŽÑ” Ð»Ð¸ÑˆÐµ Ð· Â«:p:h»"
 
 msgid "E500: Evaluates to an empty string"
-msgstr "E500: Ð ÐµÐ·ÑƒÐ»ÑŒÑ‚ат -- Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–й Ñ€Ñдок"
+msgstr "E500: Ð ÐµÐ·ÑƒÐ»ÑŒÑ‚ат â€” Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–й Ñ€Ñдок"
 
 msgid "E195: Cannot open viminfo file for reading"
 msgstr "E195: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати Ñ„айл viminfo"
@@ -1652,6 +1701,9 @@ msgstr "[ÐЕ ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚овано]"
 msgid "[converted]"
 msgstr "[конвертовано]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[зашифровано]"
 
@@ -1853,50 +1905,50 @@ msgstr "Ви Ñправді Ñ…очете Ð¹Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¿Ð¸Ñати??"
 
 #, c-format
 msgid "E208: Error writing to \"%s\""
-msgstr "E208: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ð·Ð°Ð¿Ð¸Ñу Ñƒ \"%s\""
+msgstr "E208: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ð·Ð°Ð¿Ð¸Ñу Ñƒ Â«%s»"
 
 #, c-format
 msgid "E209: Error closing \"%s\""
-msgstr "E209: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ \"%s\""
+msgstr "E209: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ð·Ð°ÐºÑ€Ð¸Ñ‚тѠ«%s»"
 
 #, c-format
 msgid "E210: Error reading \"%s\""
-msgstr "E210: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ñ‡Ð¸Ñ‚аннѠ\"%s\""
+msgstr "E210: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ñ‡Ð¸Ñ‚аннѠ«%s»"
 
 msgid "E246: FileChangedShell autocommand deleted buffer"
 msgstr "E246: Ðвтокоманда FileChangedShell Ð·Ð½Ð¸Ñ‰Ð¸Ð»Ð° Ð±ÑƒÑ„ер"
 
 #, c-format
 msgid "E211: File \"%s\" no longer available"
-msgstr "E211: Ð¤Ð°Ð¹Ð» \"%s\" Ð±Ñ–льше Ð½Ðµ Ð´Ð¾ÑÑжний"
+msgstr "E211: Ð¤Ð°Ð¹Ð» Â«%s» Ð±Ñ–льше Ð½Ðµ Ð´Ð¾ÑÑжний"
 
 #, c-format
 msgid ""
 "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
 "well"
-msgstr "W12: Ð—аÑтереженнÑ: Ð¤Ð°Ð¹Ð» \"%s\" Ð·Ð¼Ñ–нивÑÑ, Ð°Ð»Ðµ Ð¹ Ð±ÑƒÑ„ер Ñƒ Vim Ñ‚акож"
+msgstr "W12: Ð—аÑтереженнÑ: Ð¤Ð°Ð¹Ð» Â«%s» Ð·Ð¼Ñ–нивÑÑ, Ð°Ð»Ðµ Ð¹ Ð±ÑƒÑ„ер Ñƒ Vim Ñ‚акож"
 
 msgid "See \":help W12\" for more info."
-msgstr "Див. \":help W12\" Ð´Ð»Ñ ÑƒÑ‚очненнÑ."
+msgstr "Див. Â«:help W12» Ð´Ð»Ñ ÑƒÑ‚очненнÑ."
 
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: Ð—аÑтереженнÑ: Ð¤Ð°Ð¹Ð» \"%s\" Ð·Ð¼Ñ–нивÑѠпіÑлѠпочатку Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ"
+msgstr "W11: Ð—аÑтереженнÑ: Ð¤Ð°Ð¹Ð» Â«%s» Ð·Ð¼Ñ–нивÑѠпіÑлѠпочатку Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ"
 
 msgid "See \":help W11\" for more info."
-msgstr "Див. \":help W11\" Ð´Ð»Ñ ÑƒÑ‚очненнÑ."
+msgstr "Див. Â«:help W11» Ð´Ð»Ñ ÑƒÑ‚очненнÑ."
 
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
-"W16: Ð—аÑтереженнÑ: Ð ÐµÐ¶Ð¸Ð¼ Ñ„айлу \"%s\" Ð·Ð¼Ñ–нивÑѠпіÑлѠпочатку Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ"
+"W16: Ð—аÑтереженнÑ: Ð ÐµÐ¶Ð¸Ð¼ Ñ„айлу Â«%s» Ð·Ð¼Ñ–нивÑѠпіÑлѠпочатку Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ"
 
 msgid "See \":help W16\" for more info."
-msgstr "Див. \":help W16\" Ð´Ð»Ñ ÑƒÑ‚очненнÑ."
+msgstr "Див. Â«:help W16» Ð´Ð»Ñ ÑƒÑ‚очненнÑ."
 
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: Ð—аÑтереженнÑ: Ð¤Ð°Ð¹Ð» \"%s\" Ð±ÑƒÐ»Ð¾ Ñтворено Ð¿Ñ–ÑлѠпочатку Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ"
+msgstr "W13: Ð—аÑтереженнÑ: Ð¤Ð°Ð¹Ð» Â«%s» Ð±ÑƒÐ»Ð¾ Ñтворено Ð¿Ñ–ÑлѠпочатку Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ"
 
 msgid "Warning"
 msgstr "ЗаÑтереженнÑ"
@@ -1910,11 +1962,11 @@ msgstr ""
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпідготувати \"%s\" Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñ‚аннÑ"
+msgstr "E462: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпідготувати Â«%s», Ñ‰Ð¾Ð± Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñ‚ати"
 
 #, c-format
 msgid "E321: Could not reload \"%s\""
-msgstr "E321: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠперечитати \"%s\""
+msgstr "E321: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠперечитати Â«%s»"
 
 msgid "--Deleted--"
 msgstr "--Знищено--"
@@ -1926,7 +1978,7 @@ msgstr "Ðвтоматичне Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð°Ð²Ñ‚окоманди: %s <бу
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
-msgstr "E367: Ðемає Ñ‚акої Ð³Ñ€ÑƒÐ¿Ð¸: \"%s\""
+msgstr "E367: Ðемає Ñ‚акої Ð³Ñ€ÑƒÐ¿Ð¸: Â«%s»"
 
 #, c-format
 msgid "E215: Illegal character after *: %s"
@@ -1968,7 +2020,7 @@ msgstr "E218: Ð—абагато Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð¸Ñ… Ð°Ð²Ñ‚окоманд"
 # msgstr "E218: "
 #, c-format
 msgid "%s Auto commands for \"%s\""
-msgstr "Ðвтокоманди %s Ð´Ð»Ñ \"%s\""
+msgstr "Ðвтокоманди %s Ð´Ð»Ñ Â«%s»"
 
 #, c-format
 msgid "Executing %s"
@@ -2067,6 +2119,12 @@ msgstr "Scrollbar Widget: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвизначити Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ Ñ
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: Ðе Ð²Ð´Ð°Ð»Ð¾ÑÑ Ñтворити BalloonEval Ð· Ð¿Ð¾Ð²Ñ–домленнÑм Ñ– Ñ„ункцією"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Ðе Ð²Ð´Ð°Ð»Ð¾ÑÑ Ñтворити Ð½Ð¾Ð²Ð¸Ð¹ Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð´Ð»Ñ GUI"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Ð”очірній Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ðµ Ð·Ð¼Ñ–г Ð·Ð°Ð¿ÑƒÑтити GUI"
+
 # msgstr "E228: "
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзапуÑтити GUI"
@@ -2074,7 +2132,7 @@ msgstr "E229: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзапуÑтити GUI"
 # msgstr "E229: "
 #, c-format
 msgid "E230: Cannot read from \"%s\""
-msgstr "E230: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати Ð· \"%s\""
+msgstr "E230: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати Ð· Â«%s»"
 
 msgid "E665: Cannot start GUI, no valid font found"
 msgstr "E665: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзапуÑтити GUI, Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÑˆÑ€Ð¸Ñ„Ñ‚"
@@ -2148,7 +2206,7 @@ msgid "Replace All"
 msgstr "Замінити ÑƒÑÑ–"
 
 msgid "Vim: Received \"die\" request from session manager\n"
-msgstr "Vim: ÐžÑ‚римав Ð·Ð°Ð¿Ð¸Ñ‚ \"die\" Ð²Ñ–д Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ð° ÑеÑій\n"
+msgstr "Vim: ÐžÑ‚римав Ð·Ð°Ð¿Ð¸Ñ‚ Â«die» Ð²Ñ–д Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ð° ÑеÑій\n"
 
 msgid "Close"
 msgstr "Закрити"
@@ -2199,29 +2257,12 @@ msgid "&Undo"
 msgstr "&U:СкаÑувати"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзавантажити ÑˆÑ€Ð¸Ñ„Ñ‚ Zap '%s'"
-
-# msgstr "E235: "
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвикориÑтати ÑˆÑ€Ð¸Ñ„Ñ‚ %s"
-
-# msgstr "E242: "
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"ПоÑилаєтьÑѠповідомленнѠщоб Ð¿Ñ€Ð¸Ð¿Ð¸Ð½Ð¸Ñ‚и Ð´Ð¾Ñ‡Ñ–рній Ð¿Ñ€Ð¾Ñ†ÐµÑ.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
-msgstr "E671: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ð²Ñ–кно \"%s\""
+msgstr "E671: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ð²Ñ–кно Â«%s»"
 
 #, c-format
 msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-msgstr "E243: Ðргумент Ð½Ðµ Ð¿Ñ–дтримуєтьÑÑ: \"-%s\"; ÐºÐ¾Ñ€Ð¸ÑтуйтеÑÑŒ Ð²ÐµÑ€Ñією Ð· OLE."
+msgstr "E243: Ðргумент Ð½Ðµ Ð¿Ñ–дтримуєтьÑÑ: Â«-%s»; ÐºÐ¾Ñ€Ð¸ÑтуйтеÑÑŒ Ð²ÐµÑ€Ñією Ð· OLE."
 
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити Ð²Ñ–кно Ð²Ñередині Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ MDI"
@@ -2366,23 +2407,23 @@ msgstr "E455: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзапиÑати Ð²Ð¸Ñ…ідний Ñ„айл Pos
 
 #, c-format
 msgid "E624: Can't open file \"%s\""
-msgstr "E624: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити Ñ„айл \"%s\""
+msgstr "E624: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити Ñ„айл Â«%s»"
 
 #, c-format
 msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати Ñ„айл Ñ€ÐµÑурÑів PostScript \"%s\""
+msgstr "E457: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати Ñ„айл Ñ€ÐµÑурÑів PostScript Â«%s»"
 
 #, c-format
 msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: \"%s\" Ð½Ðµ Ñ” Ñ„айлом Ñ€ÐµÑурÑів PostScript"
+msgstr "E618: Â«%s» Ð½Ðµ Ñ” Ñ„айлом Ñ€ÐµÑурÑів PostScript"
 
 #, c-format
 msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: \"%s\" Ð½Ðµ Ñ” Ð¿Ñ–дтримуваним Ñ„айлом Ñ€ÐµÑурÑів PostScript"
+msgstr "E619: Â«%s» Ð½Ðµ Ñ” Ð¿Ñ–дтримуваним Ñ„айлом Ñ€ÐµÑурÑів PostScript"
 
 #, c-format
 msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: Ðеправильна Ð²ÐµÑ€ÑіѠфайлу Ñ€ÐµÑурÑів \"%s\""
+msgstr "E621: Ðеправильна Ð²ÐµÑ€ÑіѠфайлу Ñ€ÐµÑурÑів Â«%s»"
 
 msgid "E673: Incompatible multi-byte encoding and character set."
 msgstr "E673: ÐеÑуміÑні Ð±Ð°Ð³Ð°Ñ‚обайтове ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¹ Ð½Ð°Ð±Ñ–Ñ€ Ñимволів."
@@ -2399,21 +2440,21 @@ msgstr "E324: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити Ñ„айл PostScript Ð´Ð»Ñ Ð²
 
 #, c-format
 msgid "E456: Can't open file \"%s\""
-msgstr "E456: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити Ñ„айл \"%s\""
+msgstr "E456: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити Ñ„айл Â«%s»"
 
 msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ñ„айл Ñ€ÐµÑурÑів PostScript \"prolog.ps\""
+msgstr "E456: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ñ„айл Ñ€ÐµÑурÑів PostScript Â«prolog.ps»"
 
 msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ñ„айл Ñ€ÐµÑурÑів PostScript \"cidfont.ps\""
+msgstr "E456: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ñ„айл Ñ€ÐµÑурÑів PostScript Â«cidfont.ps»"
 
 #, c-format
 msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ñ„айл Ñ€ÐµÑурÑів PostScript \"%s.ps\""
+msgstr "E456: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ñ„айл Ñ€ÐµÑурÑів PostScript Â«%s.ps»"
 
 #, c-format
 msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠперетворити Ð´Ð¾ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ñ€ÑƒÐºÑƒ \"%s\""
+msgstr "E620: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠперетворити Ð´Ð¾ ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ñ€ÑƒÐºÑƒ Â«%s»"
 
 msgid "Sending to printer..."
 msgstr "ВідÑилаєтьÑѠна Ð¿Ñ€Ð¸Ð½Ñ‚ер..."
@@ -2526,7 +2567,7 @@ msgid ""
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: Ð—найти Ñ„ункції, Ñ‰Ð¾ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°ÑŽÑ‚ÑŒ Ñ†ÑŽ Ñ„ункцію\n"
@@ -2536,7 +2577,7 @@ msgstr ""
 "       g: Ð—найти Ñ†Ðµ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ\n"
 "       i: Ð—найти Ñ„айли, Ñкі Ð²ÐºÐ»ÑŽÑ‡Ð°ÑŽÑ‚ÑŒ Ð² Ñебе Ñ†ÐµÐ¹ Ñ„айл\n"
 "       s: Ð—найти Ñ†ÐµÐ¹ Ñимвол C\n"
-"       t: Ð—найти Ð¿Ñ€Ð¸ÑвоєннѠцьому\n"
+"       t: Ð—найти Ñ†ÐµÐ¹ Ñ‚екÑÑ‚\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2649,12 +2690,12 @@ msgstr "номер Ñ€Ñдка Ð·Ð° Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ñ„айлу"
 msgid "not allowed in the Vim sandbox"
 msgstr "не Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ñƒ Ð¿Ñ–Ñочниці Vim"
 
-msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Python: Ðе Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати :py Ñ– :py3 Ð² Ð¾Ð´Ð½Ð¾Ð¼Ñƒ ÑеанÑÑ–"
-
 msgid "E837: This Vim cannot execute :py3 after using :python"
 msgstr "E837: Python: Ðе Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати :py Ñ– :py3 Ð² Ð¾Ð´Ð½Ð¾Ð¼Ñƒ ÑеанÑÑ–"
 
+msgid "only string keys are allowed"
+msgstr "Дозволено Ñ‚ільки Ñ‚екÑтові ÐºÐ»ÑŽÑ‡Ñ–"
+
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
@@ -2662,23 +2703,28 @@ msgstr ""
 "E263: Ð’ибачте, Ñ†Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð°, Ð±Ñ–бліотека Python Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚и "
 "завантажена."
 
-msgid "can't delete OutputObject attributes"
-msgstr "не Ð²Ð´Ð°Ð»Ð¾ÑѠзнищити Ð°Ñ‚рибути OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "softspace Ð¼Ð°Ñ” Ð±ÑƒÑ‚и Ñ†Ñ–лим"
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: Eval Ð½Ðµ Ð¿Ð¾Ð²ÐµÑ€Ð½ÑƒÐ² Ð´Ñ–йÑний Ð¾Ð±â€™Ñ”кт python 3"
 
-# msgstr "E180: "
-msgid "invalid attribute"
-msgstr "неправильний Ð°Ñ‚рибут"
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr "E861: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠперетворити Ð¾Ð±â€™Ñ”кт python 3 Ñƒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ vim"
 
 #, c-format
 msgid "<buffer object (deleted) at %p>"
 msgstr "<об'єкт Ð±ÑƒÑ„ера (знищено) Ð·Ð° Ð°Ð´Ñ€ÐµÑою %p>"
 
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Python: Ðе Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати :py Ñ– :py3 Ð² Ð¾Ð´Ð½Ð¾Ð¼Ñƒ ÑеанÑÑ–"
+
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Ðе Ð¼Ð¾Ð¶Ð½Ð° Ñ€ÐµÐºÑƒÑ€Ñивно Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ‚и Python"
 
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval Ð½Ðµ Ð¿Ð¾Ð²ÐµÑ€Ð½ÑƒÐ² Ð´Ñ–йÑний Ð¾Ð±â€™Ñ”кт python"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠперетворити Ð¾Ð±â€™Ñ”кт python Ñƒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ vim"
+
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_ Ð¼Ð°Ñ” Ð±ÑƒÑ‚и ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñром String"
 
@@ -2863,12 +2909,6 @@ msgid ""
 msgstr ""
 "E571: Ð’ибачте, Ñ†Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð°, Ð±Ñ–бліотека Tcl Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚и Ð·Ð°Ð²Ð°Ð½Ñ‚ажена."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ÐŸÐžÐœÐ˜Ð›ÐšÐ TCL: ÐºÐ¾Ð´ Ð²Ð¸Ñ…оду Ð½Ðµ Ñ” Ñ†Ñ–лим!? Ð‘удь Ð»Ð°Ñка, Ð¿Ð¾Ð²Ñ–домте Ñƒ vim-"
-"dev@vim.org"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: ÐšÐ¾Ð´ Ð²Ð¸Ñ…оду %d"
@@ -2880,7 +2920,7 @@ msgid "Unable to register a command server name"
 msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзареєÑтрувати Ð½Ð°Ð·Ð²Ñƒ Ñервера ÐºÐ¾Ð¼Ð°Ð½Ð´"
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідіÑлати ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð´Ð¾ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸-призначеннÑ"
+msgstr "E248: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідіÑлати ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ Ð´Ð¾ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸-цілі"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -2903,7 +2943,7 @@ msgstr "СміттѠпіÑлѠаргументу Ð¾Ð¿Ñ†Ñ–Ñ—"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr ""
-"Забагато Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ів Ñƒ \"+команда\", \"-c ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°\" Ð°Ð±Ð¾ \"--cmd ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°\""
+"Забагато Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ів Ñƒ Â«+команда», Â«-c ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Â» Ð°Ð±Ð¾ Â«--cmd ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Â»"
 
 # msgstr "E14: "
 msgid "Invalid argument for"
@@ -2946,7 +2986,7 @@ msgstr "команди Ð¿ÐµÑ€ÐµÐ´ vimrc"
 
 #, c-format
 msgid "E282: Cannot read from \"%s\""
-msgstr "E282: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати Ð· \"%s\""
+msgstr "E282: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати Ð· Â«%s»"
 
 # msgstr "E282: "
 msgid ""
@@ -2954,7 +2994,7 @@ msgid ""
 "More info with: \"vim -h\"\n"
 msgstr ""
 "\n"
-"ДізнайтеÑѠбільше: \"vim -h\"\n"
+"ДізнайтеÑѠбільше: Â«vim -h»\n"
 
 msgid "[file ..]       edit specified file(s)"
 msgstr "[файл ..]       Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ñ‚и Ð²ÐºÐ°Ð·Ð°Ð½Ñ– Ñ„айли"
@@ -3017,31 +3057,34 @@ msgid "-unregister\t\tUnregister gvim for OLE"
 msgstr "-unregister\t\tСкаÑувати Ñ€ÐµÑ”Ñтрацію Ñ†ÑŒÐ¾Ð³Ð¾ gvim Ð´Ð»Ñ OLE"
 
 msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-msgstr "-g\t\t\tЗапуÑтити GUI (ніби \"gvim\")"
+msgstr "-g\t\t\tЗапуÑтити GUI (ніби Â«gvim»)"
 
 msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
 msgstr "-f  Ñ‡Ð¸  --nofork\tПередній Ð¿Ð»Ð°Ð½: Ñ‚римати Ñ‚ермінал Ð¿Ñ–ÑлѠзапуÑку GUI"
 
 msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tРежим Vi (ніби \"vi\")"
+msgstr "-v\t\t\tРежим Vi (ніби Â«vi»)"
 
 msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tРежим Ex (ніби \"ex\")"
+msgstr "-e\t\t\tРежим Ex (ніби Â«ex»)"
+
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tПокращений Ñ€ÐµÐ¶Ð¸Ð¼ Ex"
 
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tМовчазний (пакетний) Ñ€ÐµÐ¶Ð¸Ð¼ (лише Ð´Ð»Ñ \"ex\")"
+msgstr "-s\t\t\tМовчазний (пакетний) Ñ€ÐµÐ¶Ð¸Ð¼ (лише Ð´Ð»Ñ Â«ex»)"
 
 msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tРежим Ð¿Ð¾Ñ€Ñ–внÑннѠ(ніби \"vimdiff\")"
+msgstr "-d\t\t\tРежим Ð¿Ð¾Ñ€Ñ–внÑннѠ(ніби Â«vimdiff»)"
 
 msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tПроÑтий Ñ€ÐµÐ¶Ð¸Ð¼ (ніби \"evim\", Ð±ÐµÐ· Ñ€ÐµÐ¶Ð¸Ð¼Ñ–в)"
+msgstr "-y\t\t\tПроÑтий Ñ€ÐµÐ¶Ð¸Ð¼ (ніби Â«evim», Ð±ÐµÐ· Ñ€ÐµÐ¶Ð¸Ð¼Ñ–в)"
 
 msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tРежим Ð¿ÐµÑ€ÐµÐ³Ð»Ñду (ніби \"view\")"
+msgstr "-R\t\t\tРежим Ð¿ÐµÑ€ÐµÐ³Ð»Ñду (ніби Â«view»)"
 
 msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tОбмежений Ñ€ÐµÐ¶Ð¸Ð¼ (ніби \"rvim\")"
+msgstr "-Z\t\t\tОбмежений Ñ€ÐµÐ¶Ð¸Ð¼ (ніби Â«rvim»)"
 
 msgid "-m\t\t\tModifications (writing files) not allowed"
 msgstr "-m\t\t\tЗміни (запиѠфайлів) Ð½Ðµ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾"
@@ -3266,19 +3309,6 @@ msgstr "-xrm <реÑурÑ>\t\tÐ’Ñтановити Ð·Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñ€ÐµÑ
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Ðргументи gvim (верÑÑ–Ñ RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <кількіÑÑ‚ÑŒ>\tПочаткова ÐºÑ–лькіÑÑ‚ÑŒ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº Ð²Ñ–кна"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <кількіÑÑ‚ÑŒ>\tПочаткова ÐºÑ–лькіÑÑ‚ÑŒ Ñ€Ñдків Ð²Ñ–кна"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3294,6 +3324,9 @@ msgstr ""
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tВідкрити Vim Ð² Ñ–ншому ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ñ– Ñ–нтерфейÑу GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tХай gvim Ð½Ð°Ð´Ñ€ÑƒÐºÑƒÑ” Ñ–дентифікатор Ð²Ñ–кна Ð½Ð° stdout"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <заголовок Ð±Ð°Ñ‚ька>\tВідкрити Vim Ð²Ñередині Ð±Ð°Ñ‚ьківÑького Ð²Ñ–кна"
 
@@ -3326,7 +3359,7 @@ msgstr "Ðе Ð²Ñтановлено Ð¶Ð¾Ð´Ð½Ð¾Ñ— Ð¿Ð¾Ð¼Ñ–тки"
 
 #, c-format
 msgid "E283: No marks matching \"%s\""
-msgstr "E283: ÐŸÐ¾Ð¼Ñ–тку \"%s\" Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾"
+msgstr "E283: ÐŸÐ¾Ð¼Ñ–тку Â«%s» Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾"
 
 # msgstr "E283: "
 #. Highlight title
@@ -3355,7 +3388,6 @@ msgstr ""
 "змінити Ñ€Ñд. Ñтовп. Ñ‚екÑÑ‚"
 
 # TODO
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3364,7 +3396,6 @@ msgstr ""
 "# ÐŸÐ¾Ð¼Ñ–тки:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3373,7 +3404,6 @@ msgstr ""
 "# Ð¡Ð¿Ð¸Ñок Ð¿ÐµÑ€ÐµÑ…одів (від Ð½Ð°Ð¹Ð½Ð¾Ð²Ñ–ших):\n"
 
 # TODO
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3439,6 +3469,9 @@ msgstr "E298: Ðемає Ð±Ð»Ð¾ÐºÑƒ 1?"
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Ðемає Ð±Ð»Ð¾ÐºÑƒ 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ð¿Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑˆÐ¸Ñ„руваннѠфайлу Ð¾Ð±Ð¼Ñ–ну"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: ÐžÐ¹, Ð²Ñ‚рачено Ñ„айл Ð¾Ð±Ð¼Ñ–ну!!!"
@@ -3451,7 +3484,7 @@ msgstr "E302: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠперейменувати Ñ„айлу Ð¾Ð±Ð¼Ñ–
 #, c-format
 msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
 msgstr ""
-"E303: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати Ñ„айл Ð¾Ð±Ð¼Ñ–ну Ð´Ð»Ñ \"%s\", Ð²Ñ–дновленнѠнеможливе"
+"E303: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠпрочитати Ñ„айл Ð¾Ð±Ð¼Ñ–ну Ð´Ð»Ñ Â«%s», Ð²Ñ–дновленнѠнеможливе"
 
 msgid "E304: ml_upd_block0(): Didn't get block 0??"
 msgstr "E304: ml_upd_block0(): Ðемає Ð±Ð»Ð¾ÐºÑƒ 0??"
@@ -3511,18 +3544,18 @@ msgstr " Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¸Ð¹ (розмір Ñторінки Ð¼ÐµÐ½ÑˆÐ¸Ð¹ Ð¼Ñ–
 
 #, c-format
 msgid "Using swap file \"%s\""
-msgstr "ВикориÑтовуєтьÑѠфайл Ð¾Ð±Ð¼Ñ–ну \"%s\""
+msgstr "ВикориÑтовуєтьÑѠфайл Ð¾Ð±Ð¼Ñ–ну Â«%s»"
 
 #, c-format
 msgid "Original file \"%s\""
-msgstr "Початковий Ñ„айл \"%s\""
+msgstr "Початковий Ñ„айл Â«%s»"
 
 msgid "E308: Warning: Original file may have been changed"
 msgstr "E308: Ð—аÑтереженнÑ: ÐœÐ¾Ð¶Ð»Ð¸Ð²Ð¾, Ð¿Ð¾Ñ‡Ð°Ñ‚ковий Ñ„айл Ð±ÑƒÐ»Ð¾ Ð·Ð¼Ñ–нено"
 
 #, c-format
 msgid "Swap file is encrypted: \"%s\""
-msgstr "Файл Ð¾Ð±Ð¼Ñ–ну Ð·Ð°ÑˆÐ¸Ñ„рований: \"%s\""
+msgstr "Файл Ð¾Ð±Ð¼Ñ–ну Ð·Ð°ÑˆÐ¸Ñ„рований: Â«%s»"
 
 msgid ""
 "\n"
@@ -3597,7 +3630,7 @@ msgstr ""
 "починаютьÑѠз ???"
 
 msgid "See \":help E312\" for more information."
-msgstr "Див. \":help E312\" Ð´Ð»Ñ ÑƒÑ‚очненнÑ."
+msgstr "Див. Â«:help E312» Ð´Ð»Ñ ÑƒÑ‚очненнÑ."
 
 msgid "Recovery completed. You should check if everything is OK."
 msgstr "ВідновленнѠзакінчено, Ð¿ÐµÑ€ÐµÐ²Ñ–рте Ñ‡Ð¸ Ð²Ñе Ð³Ð°Ñ€Ð°Ð·Ð´."
@@ -3787,7 +3820,7 @@ msgstr "E317: Ð’казівник Ð±Ð»Ð¾ÐºÑƒ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ 2"
 
 #, c-format
 msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: Ð¦Ð¸ÐºÐ»Ñ–чні Ñимвольні Ð¿Ð¾ÑиланнѠ\"%s\""
+msgstr "E773: Ð¦Ð¸ÐºÐ»Ñ–чні Ñимвольні Ð¿Ð¾ÑиланнѠ«%s»"
 
 # msgstr "E317: "
 msgid "E325: ATTENTION"
@@ -3810,54 +3843,50 @@ msgstr "      ÐОВІШИЙ Ð·Ð° Ñ„айл Ð¾Ð±Ð¼Ñ–ну!\n"
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) ÐœÐ¾Ð¶Ð»Ð¸Ð²Ð¾, Ñ–нша Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ð²Ð¶Ðµ Ñ€ÐµÐ´Ð°Ð³ÑƒÑ” Ñ†ÐµÐ¹ Ñамий Ñ„айл.\n"
-"    Ã\91удьте Ð¾Ð±ÐµÑ€ÐµÐ¶Ð½Ñ–, Ñ‰Ð¾Ð± Ð½Ðµ Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð»Ð¸ÑѠдва Ñ€Ñ–зні ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñри\n"
-"    Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð¹ Ñ‚ого Ñамого Ñ„айлу Ð¿Ñ–ÑлѠзмін.\n"
+"(1) ÐœÐ¾Ð¶Ð»Ð¸Ð²Ð¾, Ñ–нша Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ð²Ð¶Ðµ Ñ€ÐµÐ´Ð°Ð³ÑƒÑ” Ñ†ÐµÐ¹ Ñамий Ñ„айл. Ð¯ÐºÑ‰Ð¾ Ñ†Ðµ Ñ‚ак,\n"
+"    Ã±удьте Ð¾Ð±ÐµÑ€ÐµÐ¶Ð½Ñ–, Ñ‰Ð¾Ð± Ð½Ðµ Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð»Ð¸ÑѠдва Ñ€Ñ–зні ÐµÐºÐ·ÐµÐ¼Ð¿Ð»Ñри\n"
+"    Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð¹ Ñ‚ого Ñамого Ñ„айлу Ð¿Ñ–ÑлѠзмін."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Ð’ийдіть, Ð°Ð±Ð¾ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÑƒÐ¹Ñ‚е Ð¾Ð±ÐµÑ€ÐµÐ¶Ð½Ð¾.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Ð’ийдіть Ð°Ð±Ð¾ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÑƒÐ¹Ñ‚е Ð¾Ð±ÐµÑ€ÐµÐ¶Ð½Ð¾.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Ð¡ÐµÐ°Ð½Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñ„айлу Ð·Ð°Ð·Ð½Ð°Ð² ÐºÑ€Ð°Ñ…у.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Ð¡ÐµÐ°Ð½Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñ„айлу Ð·Ð°Ð·Ð½Ð°Ð² ÐºÑ€Ð°Ñ…у.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
-msgstr "    Ð¯ÐºÑ‰Ð¾ Ñ†Ðµ Ñправді Ñ‚рапилоÑÑ, Ñпробуйте \":recover\" Ð°Ð±Ð¾ \"vim -r "
+msgstr "    Ð¯ÐºÑ‰Ð¾ Ñ†Ðµ Ñправді Ñ‚рапилоÑÑ, Ñпробуйте Â«:recover» Ð°Ð±Ð¾ Â«vim -r "
 
 msgid ""
 "\"\n"
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
-"\"\n"
-"    Ñ‰Ð¾Ð± Ð²Ñ–дновити Ð·Ð¼Ñ–ни (див. \":help recovery\").\n"
+"»\n"
+"    Ñ‰Ð¾Ð± Ð²Ñ–дновити Ð·Ð¼Ñ–ни (див. Â«:help recovery»).\n"
 
 msgid "    If you did this already, delete the swap file \""
-msgstr "    Ð¯ÐºÑ‰Ð¾ Ð²Ð¸ Ð²Ð¶Ðµ Ñ†Ðµ Ð·Ñ€Ð¾Ð±Ð¸Ð»Ð¸, Ð·Ð½Ð¸Ñ‰Ñ–Ñ‚ÑŒ Ñ„айл Ð¾Ð±Ð¼Ñ–ну \""
+msgstr "    Ð¯ÐºÑ‰Ð¾ Ð²Ð¸ Ð²Ð¶Ðµ Ñ†Ðµ Ð·Ñ€Ð¾Ð±Ð¸Ð»Ð¸, Ð·Ð½Ð¸Ñ‰Ñ–Ñ‚ÑŒ Ñ„айл Ð¾Ð±Ð¼Ñ–ну Â«"
 
 msgid ""
 "\"\n"
 "    to avoid this message.\n"
 msgstr ""
-"\"\n"
+"»,\n"
 "    Ñ‰Ð¾Ð± Ð¿Ð¾Ð·Ð±ÑƒÑ‚иÑѠцього Ð¿Ð¾Ð²Ñ–домленнÑ.\n"
 "\n"
 
 msgid "Swap file \""
-msgstr "Файл Ð¾Ð±Ð¼Ñ–ну \""
+msgstr "Файл Ð¾Ð±Ð¼Ñ–ну Â«"
 
 msgid "\" already exists!"
-msgstr "\" Ð²Ð¶Ðµ Ñ–Ñнує!"
+msgstr "» Ð²Ð¶Ðµ Ñ–Ñнує!"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM -- Ð£Ð’ÐГÐ"
+msgstr "VIM â€” Ð£Ð’ÐГÐ"
 
 msgid "Swap file already exists!"
 msgstr "Файл Ð¾Ð±Ð¼Ñ–ну Ð²Ð¶Ðµ Ñ–Ñнує!"
@@ -3904,7 +3933,7 @@ msgstr "E328: ÐœÐµÐ½ÑŽ Ð¼Ð¾Ð¶Ðµ Ð±ÑƒÑ‚и Ñ‚ільки Ð² Ñ–ншому Ñ€ÐµÐ¶Ð¸Ð¼
 # msgstr "E328: "
 #, c-format
 msgid "E329: No menu \"%s\""
-msgstr "E329: Ðемає Ð¼ÐµÐ½ÑŽ \"%s\""
+msgstr "E329: Ðемає Ð¼ÐµÐ½ÑŽ Â«%s»"
 
 #. Only a mnemonic or accelerator is not valid.
 msgid "E792: Empty menu name"
@@ -3954,7 +3983,7 @@ msgstr "E336: Ð¨Ð»ÑÑ… Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ Ð²ÐµÑти Ð´Ð¾ Ð¿Ñ–дменю"
 
 # msgstr "E336: "
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: ÐœÐµÐ½ÑŽ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ -- Ð¿ÐµÑ€ÐµÐ²Ñ–рте Ð½Ð°Ð·Ð²Ñƒ"
+msgstr "E337: ÐœÐµÐ½ÑŽ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ â€” Ð¿ÐµÑ€ÐµÐ²Ñ–рте Ð½Ð°Ð·Ð²Ñƒ"
 
 # msgstr "E337: "
 #, c-format
@@ -4070,7 +4099,6 @@ msgstr "Vim: Ð—аготовлюютьÑѠфайли...\n"
 msgid "Vim: Finished.\n"
 msgstr "Vim: Ð—авершено.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ПОМИЛКÐ: "
 
@@ -4106,7 +4134,7 @@ msgstr "E342: Ð—абракло Ð¿Ð°Ð¼'ÑÑ‚Ñ–!  (потрібно Ð±ÑƒÐ»Ð¾ %lu Ð±
 # msgstr "E342: "
 #, c-format
 msgid "Calling shell to execute: \"%s\""
-msgstr "ВикликаєтьÑѠоболонка Ñ‰Ð¾Ð± Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚и: \"%s\""
+msgstr "ВикликаєтьÑѠоболонка Ñ‰Ð¾Ð± Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚и: Â«%s»"
 
 msgid "E545: Missing colon"
 msgstr "E545: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð´Ð²Ð¾ÐºÑ€Ð°Ð¿ÐºÑƒ"
@@ -4132,6 +4160,9 @@ msgstr "Повторіть ÐºÐ»ÑŽÑ‡: "
 msgid "Keys don't match!"
 msgstr "Ключі Ð½Ðµ Ð¾Ð´Ð½Ð°ÐºÐ¾Ð²Ñ–!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: ÑˆÐ»ÑÑ… Ð·Ð°Ð½Ð°Ð´Ñ‚о Ð´Ð¾Ð²Ð³Ð¸Ð¹ Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4143,22 +4174,22 @@ msgstr ""
 # msgstr "E343: "
 #, c-format
 msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти ÐºÐ°Ñ‚алог \"%s\" Ñƒ cdpath"
+msgstr "E344: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти ÐºÐ°Ñ‚алог Â«%s» Ñƒ cdpath"
 
 # msgstr "E344: "
 #, c-format
 msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ñ„айл \"%s\" Ñƒ path"
+msgstr "E345: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ñ„айл Â«%s» Ñƒ path"
 
 # msgstr "E345: "
 #, c-format
 msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: Ð£ cdpath Ð½ÐµÐ¼Ð°Ñ” Ð±Ñ–льше ÐºÐ°Ñ‚алогу \"%s\""
+msgstr "E346: Ð£ cdpath Ð½ÐµÐ¼Ð°Ñ” Ð±Ñ–льше ÐºÐ°Ñ‚алогу Â«%s»"
 
 # msgstr "E346: "
 #, c-format
 msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: Ð£ ÑˆÐ»Ñху Ð¿Ð¾ÑˆÑƒÐºÑƒ Ð±Ñ–льше Ð½ÐµÐ¼Ð°Ñ” Ñ„айлів \"%s\""
+msgstr "E347: Ð£ ÑˆÐ»Ñху Ð¿Ð¾ÑˆÑƒÐºÑƒ Ð±Ñ–льше Ð½ÐµÐ¼Ð°Ñ” Ñ„айлів Â«%s»"
 
 msgid "Cannot connect to Netbeans #2"
 msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠз'єднатиÑѠіз Netbeans #2"
@@ -4170,7 +4201,7 @@ msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠз'єднатиÑѠіз Netbeans"
 msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
 msgstr ""
 "E668: Ðеправильний Ñ€ÐµÐ¶Ð¸Ð¼ Ð´Ð¾Ñтупу Ð´Ð¾ Ñ„айлу Ñ–нформації Ð¿Ñ€Ð¾ Ð·'єднаннѠз "
-"NetBenans: \"%s\""
+"NetBenans: Â«%s»"
 
 msgid "read from Netbeans socket"
 msgstr "читаєтьÑѠз Ñокета Netbeans"
@@ -4179,11 +4210,15 @@ msgstr "читаєтьÑѠз Ñокета Netbeans"
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Ð’трачено Ð·Ð²'Ñзок Ñ–з NetBeans Ð´Ð»Ñ Ð±ÑƒÑ„ера %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans Ð½Ðµ Ð¿Ñ–дтримуєтьÑѠз Ñ†Ð¸Ð¼ GUI"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans Ð²Ð¶Ðµ Ð¿Ñ–д'єднано"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s Ñ‚ільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚аннѠ(! Ñ‰Ð¾Ð± Ð½Ðµ Ð·Ð²Ð°Ð¶Ð°Ñ‚и)"
 
 # msgstr "E348: "
 msgid "E349: No identifier under cursor"
@@ -4327,8 +4362,8 @@ msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Колонка %s Ð· %s; Ñ€Ñдок %ld Ð· %ld; Ñлово %ld Ð· %ld; Ñимвол %ld of %ld; Ð±Ð°Ð¹Ñ‚ %"
-"ld Ð· %ld"
+"Колонка %s Ð· %s; Ñ€Ñдок %ld Ð· %ld; Ñлово %ld Ð· %ld; Ñимвол %ld of %ld; Ð±Ð°Ð¹Ñ‚ "
+"%ld Ð· %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4349,6 +4384,9 @@ msgstr "E519: ÐžÐ¿Ñ†Ñ–Ѡне Ð¿Ñ–дтримуєтьÑÑ"
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Ðе Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ñƒ modeline"
 
+msgid "E846: Key code not set"
+msgstr "E846: ÐšÐ¾Ð´ ÐºÐ»ÑŽÑ‡Ð° Ð½Ðµ Ð²Ñтановлено"
+
 msgid "E521: Number required after ="
 msgstr "E521: ÐŸÑ–ÑлѠ= Ð¿Ð¾Ñ‚рібно Ð²ÐºÐ°Ð·Ð°Ñ‚и Ñ‡Ð¸Ñло"
 
@@ -4366,7 +4404,7 @@ msgid "E530: Cannot change term in GUI"
 msgstr "E530: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзмінити term Ð² GUI"
 
 msgid "E531: Use \":gui\" to start the GUI"
-msgstr "E531: Ð—аÑтоÑуйте \":gui\" Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку GUI"
+msgstr "E531: Ð—аÑтоÑуйте Â«:gui» Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку GUI"
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
 msgstr "E589: ÐžÐ¿Ñ†Ñ–Ñ— 'backupext' Ñ– 'patchmode' Ð¾Ð´Ð½Ð°ÐºÐ¾Ð²Ñ–"
@@ -4584,16 +4622,12 @@ msgstr "ДрукуєтьÑÑ '%s'"
 
 #, c-format
 msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-msgstr "E244: Ðекоректна Ð½Ð°Ð·Ð²Ð° Ð½Ð°Ð±Ð¾Ñ€Ñƒ Ñимволів \"%s\" Ñƒ Ð½Ð°Ð·Ð²Ñ– ÑˆÑ€Ð¸Ñ„ту \"%s\""
+msgstr "E244: Ðекоректна Ð½Ð°Ð·Ð²Ð° Ð½Ð°Ð±Ð¾Ñ€Ñƒ Ñимволів Â«%s» Ñƒ Ð½Ð°Ð·Ð²Ñ– ÑˆÑ€Ð¸Ñ„ту Â«%s»"
 
 #, c-format
 msgid "E245: Illegal char '%c' in font name \"%s\""
-msgstr "E245: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñимвол %c Ð² Ð½Ð°Ð·Ð²Ñ– ÑˆÑ€Ð¸Ñ„ту \"%s\""
+msgstr "E245: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ¾Ð²Ð¸Ð¹ Ñимвол %c Ð² Ð½Ð°Ð·Ð²Ñ– ÑˆÑ€Ð¸Ñ„ту Â«%s»"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ðеправильна Ð¾Ð¿Ñ†Ñ–Ñ 'osfiletype' -- Ð±ÑƒÐ´Ðµ `Text'"
-
-# msgstr "E366: "
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Ð”вічі Ð¾Ñ‚римано Ñигнал, Ð²Ð¸Ñ…ід\n"
 
@@ -4684,7 +4718,7 @@ msgstr "XSMP Ð²Ñ‚ратив Ð·'єднаннѠICE"
 
 #, c-format
 msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
+msgstr "dlerror = Â«%s»"
 
 msgid "Opening the X display failed"
 msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити Ð´Ð¸Ñплей X"
@@ -4815,7 +4849,7 @@ msgstr "E683: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ Ð½Ð°Ð·Ð²Ñƒ Ñ„айлу Ñ‡Ð¸ Ð½ÐµÐºÐ¾Ñ€ÐµÐºÑ‚ни
 
 #, c-format
 msgid "Cannot open file \"%s\""
-msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити Ñ„айл \"%s\""
+msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвідкрити Ñ„айл Â«%s»"
 
 msgid "E681: Buffer is not loaded"
 msgstr "E681: Ð‘уфер Ð½Ðµ Ð·Ð°Ð²Ð°Ð½Ñ‚ажено"
@@ -5075,13 +5109,17 @@ msgid "E756: Spell checking is not enabled"
 msgstr "E756: ÐŸÐµÑ€ÐµÐ²Ñ–рка Ð¾Ñ€Ñ„ографії Ð½Ðµ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð°"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "ЗаÑтереженнÑ: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти ÑпиÑок Ñлів Â«%s_%s.spl» Ñ‡Ð¸ Â«%s_ascii.spl»"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
-"ЗаÑтереженнÑ: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти ÑпиÑок Ñлів \"%s.%s.spl\" Ñ‡Ð¸ \"%s.ascii.spl\""
+"ЗаÑтереженнÑ: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти ÑпиÑок Ñлів Â«%s.%s.spl» Ñ‡Ð¸ Â«%s.ascii.spl»"
 
 #, c-format
 msgid "Reading spell file \"%s\""
-msgstr "ЧитаєтьÑѠфайл Ð¾Ñ€Ñ„ографії \"%s\""
+msgstr "ЧитаєтьÑѠфайл Ð¾Ñ€Ñ„ографії Â«%s»"
 
 msgid "E757: This does not look like a spell file"
 msgstr "E757: Ðе Ñхоже Ð½Ð° Ñ„айл Ð¾Ñ€Ñ„ографії"
@@ -5300,6 +5338,9 @@ msgstr "Ðерозпізнані Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ– Ñƒ %s Ñƒ Ñ€Ñдку %d: %s"
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "Проігноровано %d Ñлів Ñ–з Ð½Ðµ-ASCII Ñимволами"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: ÐедоÑтатньо Ð¿Ð°Ð¼â€™ÑÑ‚Ñ–, ÑпиÑок Ñлів Ð±ÑƒÐ´Ðµ Ð½ÐµÐ¿Ð¾Ð²Ð½Ð¸Ð¼"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "СтиÑнено %d Ð· %d Ð²ÑƒÐ·Ð»Ñ–в; Ð·Ð°Ð»Ð¸ÑˆÐ¸Ð»Ð¾ÑÑ %d (%d%%)"
@@ -5376,11 +5417,11 @@ msgstr "Пробачте, Ñ‚ільки %ld Ð¿Ñ€Ð¾Ð¿Ð¾Ð·Ð¸Ñ†Ñ–й"
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
-msgstr "Замінити \"%.*s\" Ð½Ð°:"
+msgstr "Замінити Â«%.*s» Ð½Ð°:"
 
 #, c-format
 msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
+msgstr " < Â«%.*s»"
 
 # msgstr "E34: "
 msgid "E752: No previous spell replacement"
@@ -5480,6 +5521,10 @@ msgstr " Ñ€Ð¾Ð·Ñ€Ð¸Ð²Ð¸ Ñ€Ñдків"
 msgid "E395: contains argument not accepted here"
 msgstr "E395: ÐœÑ–Ñтить Ð½ÐµÐ¿Ñ€Ð¸Ð¹Ð½Ñтні Ñ‚ут Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚и"
 
+# msgstr "E14: "
+msgid "E844: invalid cchar value"
+msgstr "E844: Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ cchar"
+
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]hete Ñ‚ут Ð½ÐµÐ¿Ñ€Ð¸Ð¹Ð½Ñтний"
 
@@ -5491,6 +5536,9 @@ msgstr "E394: Ðе Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚ Ñ€ÐµÐ³Ñ–ону Ð´Ð»Ñ %s"
 msgid "E397: Filename required"
 msgstr "E397: ÐŸÐ¾Ñ‚рібна Ð½Ð°Ð·Ð²Ð° Ñ„айлу"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Ð—абагато ÑинтакÑичних Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½ÑŒ"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ ']': %s"
@@ -5504,6 +5552,9 @@ msgstr "E398: ÐŸÑ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ `=': %s"
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Ð‘ракує Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ів: ÑинтакÑичний Ñ€ÐµÐ³Ñ–он %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Ð—абагато ÑинтакÑичних ÐºÐ»Ð°Ñтерів"
+
 msgid "E400: No cluster specified"
 msgstr "E400: ÐšÐ»Ð°Ñтер Ð½Ðµ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾"
 
@@ -5563,12 +5614,12 @@ msgstr "E411: Ð“рупу Ð¿Ñ–дÑвічуваннѠне Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾: %s"
 # msgstr "E411: "
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: ÐедоÑтатньо Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ів: \":highlight link %s\""
+msgstr "E412: ÐедоÑтатньо Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ів: Â«:highlight link %s»"
 
 # msgstr "E412: "
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Ð—абагато Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ів: \":highlight link %s\""
+msgstr "E413: Ð—абагато Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ів: Â«:highlight link %s»"
 
 # msgstr "E413: "
 msgid "E414: group has settings, highlight link ignored"
@@ -5626,6 +5677,9 @@ msgstr "E669: Ðедруковний Ñимвол Ñƒ Ð½Ð°Ð·Ð²Ñ– Ð³Ñ€ÑƒÐ¿Ð¸"
 msgid "W18: Invalid character in group name"
 msgstr "W18: Ðекоректний Ñимвол Ñƒ Ð½Ð°Ð·Ð²Ñ– Ð³Ñ€ÑƒÐ¿Ð¸"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Ð—абагато Ð³Ñ€ÑƒÐ¿ Ð¿Ñ–дÑвічуваннѠі ÑинтакÑиÑу"
+
 # msgstr "E424: "
 msgid "E555: at bottom of tag stack"
 msgstr "E555: ÐšÑ–нець Ñтеку Ñ‚еґів"
@@ -5643,13 +5697,13 @@ msgstr "E426: Ð¢ÐµÒ‘ Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾: %s"
 
 # msgstr "E426: "
 msgid "  # pri kind tag"
-msgstr "  # Ð¿Ñ€Ñ– Ñ‚ип  Ñ‚еґ"
+msgstr "  # Ð¿Ñ€Ñ– Ñ‚ип Ñ‚еґ"
 
 msgid "file\n"
 msgstr "файл\n"
 
 msgid "E427: There is only one matching tag"
-msgstr "E427: Ã\9bøÑ\88õ Ã¾Ã´Ã½Ã¸Ã½ Ã²Ñ\96ôÿþòÑ\96ôýøù Ã‘\82õÒ\91"
+msgstr "E427: Ð›Ð¸ÑˆÐµ Ð¾Ð´Ð¸Ð½ Ð²Ñ–дповідний Ñ‚еґ"
 
 # msgstr "E427: "
 msgid "E428: Cannot go beyond last matching tag"
@@ -5658,7 +5712,7 @@ msgstr "E428: Ð¦Ðµ Ð²Ð¶Ðµ Ð¾Ñтанній Ð²Ñ–дповідний Ñ‚еґ"
 # msgstr "E428: "
 #, c-format
 msgid "File \"%s\" does not exist"
-msgstr "Файл \"%s\" Ð½Ðµ Ñ–Ñнує"
+msgstr "Файл Â«%s» Ð½Ðµ Ñ–Ñнує"
 
 #. Give an indication of the number of matching tags
 #, c-format
@@ -5673,7 +5727,7 @@ msgstr "  Ð’икориÑтано Ñ‚еґ, Ð½Ðµ Ñ€Ð¾Ð·Ñ€Ñ–знÑючи Ð²ÐµÐ»Ð¸Ðº
 
 #, c-format
 msgid "E429: File \"%s\" does not exist"
-msgstr "E429: Ð¤Ð°Ð¹Ð» \"%s\" Ð½Ðµ Ñ–Ñнує"
+msgstr "E429: Ð¤Ð°Ð¹Ð» Â«%s» Ð½Ðµ Ñ–Ñнує"
 
 # msgstr "E429: "
 #. Highlight title
@@ -5692,10 +5746,13 @@ msgstr "ШукаєтьÑѠу Ñ„айлі Ñ‚еґів %s"
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Ð¨Ð»ÑÑ… Ñ„айлу Ñ‚еґів Ñкорочено Ð´Ð¾ %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "ІгноруєтьÑѠдовгий Ñ€Ñдок Ñƒ Ñ„айлі Ð· Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÐ°Ð¼Ð¸"
+
 # msgstr "E430: "
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ñ„ормату Ñƒ Ñ„айлі Ñ‚еґів \"%s\""
+msgstr "E431: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ñ„ормату Ñƒ Ñ„айлі Ñ‚еґів Â«%s»"
 
 # msgstr "E431: "
 #, c-format
@@ -5711,9 +5768,6 @@ msgstr "E432: Ð¤Ð°Ð¹Ð» Ñ‚еґів Ð½Ðµ Ð²Ð¿Ð¾Ñ€Ñдкований: %s"
 msgid "E433: No tags file"
 msgstr "E433: Ðемає Ñ„айлу Ñ‚еґів"
 
-msgid "Ignoring long line in tags file"
-msgstr "ІгноруєтьÑѠдовгий Ñ€Ñдок Ñƒ Ñ„айлі Ð· Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐºÐ°Ð¼Ð¸"
-
 # msgstr "E433: "
 msgid "E434: Can't find tag pattern"
 msgstr "E434: Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠзнайти Ð·Ñ€Ð°Ð·Ð¾Ðº Ñ‚еґу"
@@ -5744,10 +5798,10 @@ msgstr "E559: Ðемає Ñ–нформації Ð¿Ñ€Ð¾ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑ‚Ñ– Ñ‚ер
 
 #, c-format
 msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: Ðемає Ð·Ð°Ð¿Ð¸Ñу \"%s\" Ð¿Ñ€Ð¾ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑ‚Ñ– Ñ‚ерміналу"
+msgstr "E436: Ðемає Ð·Ð°Ð¿Ð¸Ñу Â«%s» Ð¿Ñ€Ð¾ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑ‚Ñ– Ñ‚ерміналу"
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: ÐŸÐ¾Ñ‚рібна Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ–ÑÑ‚ÑŒ Ñ‚ерміналу \"cm\""
+msgstr "E437: ÐŸÐ¾Ñ‚рібна Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ–ÑÑ‚ÑŒ Ñ‚ерміналу Â«cm»"
 
 #. Highlight title
 msgid ""
@@ -5892,8 +5946,8 @@ msgstr "піÑлÑ"
 msgid "Nothing to undo"
 msgstr "Ðемає Ð½Ñ–чого ÑкаÑовувати"
 
-msgid "number changes  time            saved"
-msgstr "номер  Ð·Ð¼Ñ–н     Ñ‡Ð°Ñ             Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾"
+msgid "number changes  when               saved"
+msgstr "номер  Ð·Ð¼Ñ–ни    Ñ‡Ð°Ñ             Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾"
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5998,13 +6052,6 @@ msgstr ""
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"ВерÑіѠдлѠRISC OS"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6169,7 +6216,7 @@ msgid "by Bram Moolenaar et al."
 msgstr "автор: Bram Moolenaar Ñ‚а Ñ–н."
 
 msgid "Vim is open source and freely distributable"
-msgstr "Vim -- Ñ†Ðµ Ð²Ñ–дкрита Ð¹ Ð²Ñ–льно Ñ€Ð¾Ð·Ð¿Ð¾Ð²Ñюджувана Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°"
+msgstr "Vim â€” Ñ†Ðµ Ð²Ñ–дкрита Ð¹ Ð²Ñ–льно Ñ€Ð¾Ð·Ð¿Ð¾Ð²Ñюджувана Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð°"
 
 msgid "Help poor children in Uganda!"
 msgstr "Допоможіть Ñиротам Ð· Ð£Ð³Ð°Ð½Ð´Ð¸!"
@@ -6271,7 +6318,7 @@ msgstr "E446: Ðемає Ð½Ð°Ð·Ð²Ð¸ Ñ„айлу Ð½Ð°Ð´ ÐºÑƒÑ€Ñором"
 # msgstr "E446: "
 #, c-format
 msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: Ð¤Ð°Ð¹Ð» \"%s\" Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñƒ ÑˆÐ»Ñху Ð¿Ð¾ÑˆÑƒÐºÑƒ"
+msgstr "E447: Ð¤Ð°Ð¹Ð» Â«%s» Ð½Ðµ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ Ñƒ ÑˆÐ»Ñху Ð¿Ð¾ÑˆÑƒÐºÑƒ"
 
 #, c-format
 msgid "E370: Could not load library %s"
@@ -6373,7 +6420,7 @@ msgstr "E235: Ðевідомий ÑˆÑ€Ð¸Ñ„Ñ‚: %s"
 # msgstr "E235: "
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236: Ð¨Ñ€Ð¸Ñ„Ñ‚ \"%s\" Ð½Ðµ Ð¼Ð¾Ð½Ð¾ÑˆÐ¸Ñ€Ð¸Ð½Ð½Ð¸Ð¹"
+msgstr "E236: Ð¨Ñ€Ð¸Ñ„Ñ‚ Â«%s» Ð½Ðµ Ð¼Ð¾Ð½Ð¾ÑˆÐ¸Ñ€Ð¸Ð½Ð½Ð¸Ð¹"
 
 msgid "E473: Internal error"
 msgstr "E473: Ð’нутрішнѠпомилка"
@@ -6406,11 +6453,11 @@ msgstr "E476: Ðекоректна ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°"
 
 #, c-format
 msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" -- Ñ†Ðµ ÐºÐ°Ñ‚алог"
+msgstr "E17: Â«%s» â€” Ñ†Ðµ ÐºÐ°Ñ‚алог"
 
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: Ð‘ібліотечний Ð²Ð¸ÐºÐ»Ð¸Ðº Ð´Ð¾ \"%s()\" Ð½Ðµ Ð²Ð´Ð°Ð²ÑÑ"
+msgstr "E364: Ð‘ібліотечний Ð²Ð¸ÐºÐ»Ð¸Ðº Ð´Ð¾ Â«%s()» Ð½Ðµ Ð²Ð´Ð°Ð²ÑÑ"
 
 #, c-format
 msgid "E448: Could not load library function %s"
@@ -6506,7 +6553,7 @@ msgstr "E36: ÐœÑ–ÑцѠне Ð²Ð¸Ñтачить"
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247: Ðемає Ð·Ð°Ñ€ÐµÑ”Ñтрованих Ñерверів Ð· Ð½Ð°Ð·Ð²Ð¾ÑŽ \"%s\""
+msgstr "E247: Ðемає Ð·Ð°Ñ€ÐµÑ”Ñтрованих Ñерверів Ð· Ð½Ð°Ð·Ð²Ð¾ÑŽ Â«%s»"
 
 # msgstr "E36: "
 #, c-format
@@ -6573,11 +6620,11 @@ msgstr "E45: Ð’Ñтановлено Ð¾Ð¿Ñ†Ñ–ÑŽ 'readonly' (! Ñ‰Ð¾Ð± Ð½Ðµ Ð·Ð²Ð°
 
 #, c-format
 msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: Ð—мінна Ñ‚ільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚аннÑ: \"%s\""
+msgstr "E46: Ð—мінна Ñ‚ільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚аннÑ: Â«%s»"
 
 #, c-format
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: Ðе Ð¼Ð¾Ð¶Ð½Ð° Ð²Ñтановити Ð·Ð¼Ñ–нну Ñƒ Ð¿Ñ–Ñочниці: \"%s\""
+msgstr "E794: Ðе Ð¼Ð¾Ð¶Ð½Ð° Ð²Ñтановити Ð·Ð¼Ñ–нну Ñƒ Ð¿Ñ–Ñочниці: Â«%s»"
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ñ‡Ð¸Ñ‚аннѠфайлу Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº"
@@ -6674,6 +6721,9 @@ msgstr "E139: Ð¤Ð°Ð¹Ð» ÑƒÐ¶Ðµ Ð·Ð°Ð²Ð°Ð½Ñ‚ажено Ð² Ñ–нший Ð±ÑƒÑ„ер"
 msgid "E764: Option '%s' is not set"
 msgstr "E764: ÐžÐ¿Ñ†Ñ–Ñ '%s' Ð½Ðµ Ð²Ñтановлена"
 
+msgid "E850: Invalid register name"
+msgstr "E850: Ðеправильна Ð½Ð°Ð·Ð²Ð° Ñ€ÐµÐ³Ñ–Ñтру"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "Пошук Ð´Ñ–йшов Ð´Ð¾ ÐŸÐžÐ§ÐТКУ, Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÑƒÑ”Ñ‚ÑŒÑѠз ÐšÐ†ÐЦЯ"
 
@@ -6682,7 +6732,17 @@ msgstr "Пошук Ð´Ñ–йшов Ð´Ð¾ ÐšÐ†ÐЦЯ, Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÑƒÑ”Ñ‚ÑŒÑѠз 
 
 #, c-format
 msgid "Need encryption key for \"%s\""
-msgstr "ДлѠ\"%s\" Ð¿Ð¾Ñ‚рібен ÐºÐ»ÑŽÑ‡: "
+msgstr "ДлѠ«%s» Ð¿Ð¾Ñ‚рібен ÐºÐ»ÑŽÑ‡: "
+
+msgid "can't delete OutputObject attributes"
+msgstr "не Ð²Ð´Ð°Ð»Ð¾ÑѠзнищити Ð°Ñ‚рибути OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "softspace Ð¼Ð°Ñ” Ð±ÑƒÑ‚и Ñ†Ñ–лим"
+
+# msgstr "E180: "
+msgid "invalid attribute"
+msgstr "неправильний Ð°Ñ‚рибут"
 
 msgid "writelines() requires list of strings"
 msgstr "длѠwritelines() Ð¿Ð¾Ñ‚рібен ÑпиÑок Ñ€Ñдків"
@@ -6693,6 +6753,61 @@ msgstr "E264: Python: ÐŸÐ¾Ð¼Ð¸Ð»ÐºÐ° Ñ–ніціалізації Ð¾Ð±'єктів
 msgid "no such buffer"
 msgstr "такого Ð±ÑƒÑ„ера Ð½ÐµÐ¼Ð°Ñ”"
 
+# msgstr "E406: "
+msgid "empty keys are not allowed"
+msgstr "порожні ÐºÐ»ÑŽÑ‡Ñ– Ð½Ðµ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ñ–"
+
+msgid "failed to add key to dictionary"
+msgstr "не Ð²Ð´Ð°Ð»Ð¾ÑѠдодати ÐºÐ»ÑŽÑ‡ Ð´Ð¾ Ñловника"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "не Ð²Ð´Ð°Ð»Ð¾ÑѠзнищити Ð°Ñ‚рибути DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "Ðе Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð¼Ñ–нити Ñ„ікÑований Ñловник"
+
+msgid "Only boolean objects are allowed"
+msgstr "Дозволено Ñ‚ільки Ð»Ð¾Ð³Ñ–чні Ð¾Ð±â€™Ñ”кти"
+
+msgid "Cannot set this attribute"
+msgstr "Ðе Ð¼Ð¾Ð¶Ð½Ð° Ð²Ñтановити Ñ†ÐµÐ¹ Ð°Ñ‚рибут"
+
+msgid "no such key in dictionary"
+msgstr "немає Ñ‚акого ÐºÐ»ÑŽÑ‡Ð° Ð² Ñловнику"
+
+msgid "dict is locked"
+msgstr "Ñловник Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¾"
+
+msgid "internal error: failed to get vim list item"
+msgstr "внутрішнѠпомилка: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾ÑѠотримати ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚ ÑпиÑку vim"
+
+msgid "list is locked"
+msgstr "ÑпиÑок Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¾"
+
+msgid "Failed to add item to list"
+msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠдодати ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚ Ð´Ð¾ ÑпиÑку"
+
+msgid "internal error: no vim list item"
+msgstr "внутрішнѠпомилка: Ð½ÐµÐ¼Ð°Ñ” ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚а ÑпиÑку vim"
+
+msgid "can only assign lists to slice"
+msgstr "можна Ð¿Ñ€Ð¸Ñвоювати ÑпиÑки Ñ‚ільки Ð·Ñ€Ñ–зам"
+
+msgid "internal error: failed to add item to list"
+msgstr "внутрішнѠпомилка: Ð½Ðµ Ð²Ð´Ð°Ð»Ð¾ÑѠдодати ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚ Ð´Ð¾ ÑпиÑку"
+
+msgid "can only concatenate with lists"
+msgstr "можна Ð·â€™Ñ”днувати Ñ‚ільки Ð·Ñ– ÑпиÑками"
+
+msgid "Cannot modify fixed list"
+msgstr "Ðе Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð¼Ñ–нити Ñ„ікÑований ÑпиÑок"
+
+msgid "'self' argument must be a dictionary"
+msgstr "Ðргумент Â«self» Ð¼Ð°Ñ” Ð±ÑƒÑ‚и Ñловником"
+
+msgid "failed to run function"
+msgstr "Ðе Ð²Ð´Ð°Ð»Ð¾ÑѠвиконати Ñ„ункцію"
+
 msgid "attempt to refer to deleted window"
 msgstr "Ñпроба Ð·Ð²ÐµÑ€Ð½ÑƒÑ‚иÑѠдо Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ð²Ñ–кна"
 
@@ -6720,43 +6835,11 @@ msgstr "такого Ð²Ñ–кна Ð½ÐµÐ¼Ð°Ñ”"
 msgid "attempt to refer to deleted buffer"
 msgstr "Ñпроба Ð·Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð´Ð¾ Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð¾Ð³Ð¾ Ð±ÑƒÑ„ера"
 
-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
-#~ msgstr "-name <назва>\t\tВикориÑтати Ñ€ÐµÑурÑи, Ð½Ñ–би vim Ð¼Ð°Ñ” Ð·Ð°Ð´Ð°Ð½Ñƒ <назву>"
-
-#~ msgid "\t\t\t  (Unimplemented)\n"
-#~ msgstr "\t\t\t  (Ðе Ð´Ñ–Ñ”)\n"
-
-#~ msgid "E396: containedin argument not accepted here"
-#~ msgstr "E396: Ðргумент containedin Ñ‚ут Ð½ÐµÐ¿Ñ€Ð¸Ð¹Ð½Ñтний"
-
-# msgstr "E232: "
-#~ msgid "Vim dialog..."
-#~ msgstr "Діалог Vim..."
-
-# msgstr "E234: "
-#~ msgid "Font Selection"
-#~ msgstr "Вибрати ÑˆÑ€Ð¸Ñ„Ñ‚"
-
-# msgstr "E289: "
-#~ msgid "E290: over-the-spot style requires fontset"
-#~ msgstr "E290: Ð¡Ñ‚иль over-the-spot Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” Ð½Ð°Ð±Ñ–Ñ€ ÑˆÑ€Ð¸Ñ„тів"
-
-# msgstr "E290: "
-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-#~ msgstr "E291: Ð£ Ð²Ð°Ñ Ñтарша Ð·Ð° 1.2.3 Ð²ÐµÑ€ÑÑ–Ñ GTK+. ÐžÐ±Ð»Ð°ÑÑ‚ÑŒ Ñтану Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾"
-
-# msgstr "E291: "
-#~ msgid "E292: Input Method Server is not running"
-#~ msgstr "E292: Ð¡ÐµÑ€Ð²ÐµÑ€ Ð¼ÐµÑ‚оду Ð²Ð²Ð¾Ð´Ñƒ Ð½Ðµ Ñ„ункціонує"
-
-#~ msgid "with GTK-GNOME GUI."
-#~ msgstr "з GUI GTK-GNOME."
-
-#~ msgid "with GTK GUI."
-#~ msgstr "з GUI GTK."
+msgid "unable to convert to vim structure"
+msgstr "не Ð²Ð´Ð°Ð»Ð¾ÑѠперетворити Ð´Ð¾ Ñтруктури vim"
 
-#~ msgid "[NL found]"
-#~ msgstr "[Знайдено NL]"
+msgid "NULL reference passed"
+msgstr "передано Ð¿Ð¾ÑиланнѠNULL"
 
-#~ msgid "E569: maximum number of cscope connections reached"
-#~ msgstr "E569: ÐšÑ–лькіÑÑ‚ÑŒ Ð·'єднань Ð· cscope Ð´Ð¾ÑÑгла Ð¼Ð°ÐºÑимуму"
+msgid "internal error: invalid value type"
+msgstr "внутрішнѠпомилка: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¸Ð¹ Ñ‚ип Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ"
index ba3a26d..908b2eb 100644 (file)
@@ -1785,21 +1785,6 @@ msgid "Undo"
 msgstr "Hủy thao tác"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Không nạp Ä‘ược phông chữ Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Không sá»­ dụng Ä‘ược phông chữ %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Gá»­i thông báo Ä‘ể \"hủy diệt\" (dừng) tiến trình con.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Không tìm Ä‘ược tiêu Ä‘á» cá»­a sổ \"%s\""
 
@@ -3801,9 +3786,6 @@ msgstr "E244: Tên bảng mã không cho phép \"%s\" trong tên phông chữ \"
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Ký tá»± không cho phép '%c' trong tên phông chữ \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Giá trị tùy chá»n 'osfiletype' không cho phép - sá»­ dụng Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Tín hiệu Ä‘ôi, thoát\n"
 
index 6bfbb36..419913a 100644 (file)
@@ -241,9 +241,8 @@ msgstr " æ–‡ä»¶å补全 (^F^N^P)"
 msgid " Tag completion (^]^N^P)"
 msgstr " Tag è¡¥å…¨ (^]^N^P)"
 
-#, fuzzy
-#~ msgid " Path pattern completion (^N^P)"
-#~ msgstr " è·¯å¾„模å¼è¡¥å…¨ (^N^P)"
+msgid " Path pattern completion (^N^P)"
+msgstr " å¤´æ–‡ä»¶æ¨¡å¼è¡¥å…¨ (^N^P)"
 
 msgid " Definition completion (^D^N^P)"
 msgstr " å®šä¹‰è¡¥å…¨ (^D^N^P)"
@@ -2016,21 +2015,6 @@ msgid "&Undo"
 msgstr "撤销(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: æ— æ³•åŠ è½½ Zap å­—体 '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: æ— æ³•ä½¿ç”¨å­—体 %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"正在å‘é€æ¶ˆæ¯ç»ˆæ­¢å­è¿›ç¨‹ã€‚\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: æ‰¾ä¸åˆ°çª—å£æ ‡é¢˜ \"%s\""
 
@@ -4226,9 +4210,6 @@ msgstr "E244: å­—符集 \"%s\" ä¸èƒ½å¯¹åº”字体\"%s\""
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: ä¸æ­£ç¡®çš„字符 '%c' å‡ºçŽ°åœ¨å­—体å称 \"%s\" å†…"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: ä¸æ­£ç¡®çš„ 'osfiletype' é€‰é¡¹ - ä½¿ç”¨çº¯æ–‡å­—模å¼"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: åŒé‡ä¿¡å·ï¼Œé€€å‡ºä¸­\n"
 
@@ -5302,7 +5283,7 @@ msgstr "Vim: è¯»é”™è¯¯ï¼Œé€€å‡ºä¸­...\n"
 
 #. must display the prompt
 msgid "No undo possible; continue anyway"
-msgstr "无法撤销;请继续"
+msgstr "无法撤销;ä»ç„¶ç»§ç»­"
 
 msgid "Already at oldest change"
 msgstr "å·²ä½äºŽæœ€æ—§çš„改å˜"
@@ -5619,13 +5600,13 @@ msgid "type  :help cp-default<Enter> for info on this"
 msgstr "输入  :help cp-default<Enter> æŸ¥çœ‹ç›¸å…³è¯´æ˜Ž    "
 
 msgid "menu  Help->Orphans           for information    "
-msgstr "èœå•  Help->Orphans           æŸ¥çœ‹è¯´æ˜Ž           "
+msgstr "èœå•  å¸®åŠ©->孤儿           æŸ¥çœ‹è¯´æ˜Ž           "
 
 msgid "Running modeless, typed text is inserted"
 msgstr "无模å¼è¿è¡Œï¼Œè¾“入文字å³æ’å…¥"
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "èœå•  Edit->Global Settings->Toggle Insert Mode  "
+msgstr "èœå•  ç¼–辑->全局设定->å¼€/å…³æ’入模张 "
 
 #, fuzzy
 #~ msgid "                              for two modes      "
index 7b33e31..585789e 100644 (file)
@@ -2016,21 +2016,6 @@ msgid "&Undo"
 msgstr "³·Ãú(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: ÃŽÃžÂ·Â¨Â¼Ã“ÔØ Zap Ã—ÖÌå '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: ÃŽÃžÂ·Â¨ÃŠÂ¹Ã“Ã×ÖÌå %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"ÕýÔÚ·¢ËÃÃûâÖÕÖ¹×Ó½ø³Ì¡£\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Ã•Ã’²»µ½´°¿Ú±êÌâ \"%s\""
 
@@ -4226,9 +4211,6 @@ msgstr "E244: 
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Â²Â»Ã•Ã½ÃˆÂ·ÂµÃ„×Ö·û '%c' Â³Ã¶ÃÖÔÚ×ÖÌåÃû³Æ \"%s\" Ã„Ú"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Â²Â»Ã•Ã½ÃˆÂ·ÂµÃ„ 'osfiletype' Ã‘¡Ãî - ÃŠÂ¹Ã“ô¿ÎÄ×Öģʽ"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Ã‹Â«Ã–ØÃźţ¬Ã˳öÖÃ\n"
 
index 696b3dd..3db2241 100644 (file)
@@ -2016,21 +2016,6 @@ msgid "&Undo"
 msgstr "³·Ãú(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: ÃŽÃžÂ·Â¨Â¼Ã“ÔØ Zap Ã—ÖÌå '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: ÃŽÃžÂ·Â¨ÃŠÂ¹Ã“Ã×ÖÌå %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"ÕýÔÚ·¢ËÃÃûâÖÕÖ¹×Ó½ø³Ì¡£\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Ã•Ã’²»µ½´°¿Ú±êÌâ \"%s\""
 
@@ -4226,9 +4211,6 @@ msgstr "E244: 
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Â²Â»Ã•Ã½ÃˆÂ·ÂµÃ„×Ö·û '%c' Â³Ã¶ÃÖÔÚ×ÖÌåÃû³Æ \"%s\" Ã„Ú"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Â²Â»Ã•Ã½ÃˆÂ·ÂµÃ„ 'osfiletype' Ã‘¡Ãî - ÃŠÂ¹Ã“ô¿ÎÄ×Öģʽ"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Ã‹Â«Ã–ØÃźţ¬Ã˳öÖÃ\n"
 
index 7aea37b..d7b6501 100644 (file)
@@ -1806,21 +1806,6 @@ msgid "Undo"
 msgstr "復原"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: ç„¡æ³•é–‹å•Ÿ Zap å­—åž‹ '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: ç„¡æ³•ä½¿ç”¨å­—åž‹ %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"é€å‡ºä¸­æ–·å­ç¨‹å¼çš„訊æ¯ä¸­.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: æ‰¾ä¸åˆ°æ¨™é¡Œç‚º \"%s\" çš„視窗"
 
@@ -3785,9 +3770,6 @@ msgstr "E244: å­—元集 \"%s\" ç„¡æ³•å°æ‡‰å­—åž‹\"%s\""
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: ä¸æ­£ç¢ºçš„å­—å…ƒ '%c' å‡ºç¾åœ¨å­—åž‹å稱 \"%s\" å…§"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: ä¸æ­£ç¢ºçš„ 'filetype' é¸é … - ä½¿ç”¨ç´”文字模å¼"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: é›™é‡signal, é›¢é–‹ä¸­\n"
 
index ed844c7..6f43c80 100644 (file)
@@ -1799,21 +1799,6 @@ msgid "Undo"
 msgstr "´_­ì"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: ÂµLªk¶}±Ò Zap Â¦r«¬ '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: ÂµLªk¨Ã¥Î¦r«¬ %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"°e¥X¤¤Â_¤lµ{¦¡ªº°T®§¤¤.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Â§Ã¤Â¤Â£Â¨Ã¬Â¼ÃÃD¬° \"%s\" ÂªÂºÂµÃ¸ÂµÂ¡"
 
@@ -3778,9 +3763,6 @@ msgstr "E244: 
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Â¤Â£Â¥Â¿Â½Tªº¦r¤¸ '%c' Â¥X²{¦b¦r«¬¦WºÙ \"%s\" Â¤Âº"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Â¤Â£Â¥Â¿Â½Tªº 'filetype' Â¿Ã¯Â¶Âµ - Â¨Ã¥Î¯Â¤å¦r¼Ò¦¡"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Ã‚ù­«signal, Ã‚֦}¤¤\n"
 
index 0afa0b7..44ed878 100644 (file)
@@ -558,8 +558,11 @@ pum_set_selected(n, repeat)
            win_T       *curwin_save = curwin;
            int         res = OK;
 
-           /* Open a preview window.  3 lines by default. */
+           /* Open a preview window.  3 lines by default.  Prefer
+            * 'previewheight' if set and smaller. */
            g_do_tagpreview = 3;
+           if (p_pvh > 0 && p_pvh < g_do_tagpreview)
+               g_do_tagpreview = p_pvh;
            resized = prepare_tagpreview(FALSE);
            g_do_tagpreview = 0;
 
index 40fb2a9..191ecd8 100644 (file)
    typedef int LPBOOL;
 #  include "os_win16.pro"
 #  include "os_mswin.pro"
+#  include "winclip.pro"
 # endif
 # ifdef WIN3264
 #  include "os_win32.pro"
 #  include "os_mswin.pro"
+#  include "winclip.pro"
 #  if (defined(__GNUC__) && !defined(__MINGW32__)) \
        || (defined(__BORLANDC__) && __BORLANDC__ < 0x502)
 extern int _stricoll __ARGS((char *a, char *b));
@@ -62,9 +64,6 @@ extern int _stricoll __ARGS((char *a, char *b));
 # ifdef __BEOS__
 #  include "os_beos.pro"
 # endif
-# ifdef RISCOS
-#  include "os_riscos.pro"
-# endif
 # ifdef __QNX__
 #  include "os_qnx.pro"
 # endif
@@ -245,9 +244,6 @@ extern char *vim_SelFile __ARGS((Widget toplevel, char *prompt, char *init_path,
 #  ifdef FEAT_GUI_X11
 #   include "gui_x11.pro"
 #  endif
-#  ifdef RISCOS
-#   include "gui_riscos.pro"
-#  endif
 #  ifdef FEAT_GUI_PHOTON
 #   include "gui_photon.pro"
 #  endif
index df9c0b4..9e97f67 100644 (file)
@@ -1,7 +1,7 @@
 /* buffer.c */
 int open_buffer __ARGS((int read_stdin, exarg_T *eap, int flags));
 int buf_valid __ARGS((buf_T *buf));
-void close_buffer __ARGS((win_T *win, buf_T *buf, int action));
+void close_buffer __ARGS((win_T *win, buf_T *buf, int action, int abort_if_last));
 void buf_clear_file __ARGS((buf_T *buf));
 void buf_freeall __ARGS((buf_T *buf, int flags));
 void goto_buffer __ARGS((exarg_T *eap, int start, int dir, int count));
@@ -17,7 +17,7 @@ int buflist_getfile __ARGS((int n, linenr_T lnum, int options, int forceit));
 void buflist_getfpos __ARGS((void));
 buf_T *buflist_findname_exp __ARGS((char_u *fname));
 buf_T *buflist_findname __ARGS((char_u *ffname));
-int buflist_findpat __ARGS((char_u *pattern, char_u *pattern_end, int unlisted, int diffmode));
+int buflist_findpat __ARGS((char_u *pattern, char_u *pattern_end, int unlisted, int diffmode, int curtab_only));
 int ExpandBufnames __ARGS((char_u *pat, int *num_file, char_u ***file, int options));
 buf_T *buflist_findnr __ARGS((int nr));
 char_u *buflist_nr2name __ARGS((int n, int fullname, int helptail));
@@ -51,7 +51,8 @@ void ex_buffer_all __ARGS((exarg_T *eap));
 void do_modelines __ARGS((int flags));
 int read_viminfo_bufferlist __ARGS((vir_T *virp, int writing));
 void write_viminfo_bufferlist __ARGS((FILE *fp));
-char *buf_spname __ARGS((buf_T *buf));
+char_u *buf_spname __ARGS((buf_T *buf));
+int find_win_for_buf __ARGS((buf_T *buf, win_T **wp, tabpage_T **tp));
 void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr));
 linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr));
 int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type));
@@ -60,6 +61,7 @@ int buf_findsign __ARGS((buf_T *buf, int id));
 int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum));
 int buf_findsigntype_id __ARGS((buf_T *buf, linenr_T lnum, int typenr));
 int buf_signcount __ARGS((buf_T *buf, linenr_T lnum));
+void buf_delete_signs __ARGS((buf_T *buf));
 void buf_delete_all_signs __ARGS((void));
 void sign_list_placed __ARGS((buf_T *rbuf));
 void sign_mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after));
index 472f1cd..72eed4b 100644 (file)
@@ -19,8 +19,9 @@ int linetabsize_col __ARGS((int startcol, char_u *s));
 int win_linetabsize __ARGS((win_T *wp, char_u *p, colnr_T len));
 int vim_isIDc __ARGS((int c));
 int vim_iswordc __ARGS((int c));
+int vim_iswordc_buf __ARGS((int c, buf_T *buf));
 int vim_iswordp __ARGS((char_u *p));
-int vim_iswordc_buf __ARGS((char_u *p, buf_T *buf));
+int vim_iswordp_buf __ARGS((char_u *p, buf_T *buf));
 int vim_isfilec __ARGS((int c));
 int vim_isfilec_or_wc __ARGS((int c));
 int vim_isprintc __ARGS((int c));
index be5be71..5573b8c 100644 (file)
@@ -1,7 +1,7 @@
 /* digraph.c */
 int do_digraph __ARGS((int c));
 int get_digraph __ARGS((int cmdline));
-int getdigraph __ARGS((int char1, int char2, int meta));
+int getdigraph __ARGS((int char1, int char2, int meta_char));
 void putdigraph __ARGS((char_u *str));
 void listdigraphs __ARGS((void));
 char_u *keymap_init __ARGS((void));
index e2398c4..1eed378 100644 (file)
@@ -39,4 +39,5 @@ int in_cinkeys __ARGS((int keytyped, int when, int line_is_empty));
 int hkmap __ARGS((int c));
 void ins_scroll __ARGS((void));
 void ins_horscroll __ARGS((void));
+int ins_copychar __ARGS((linenr_T lnum));
 /* vim: set ft=c : */
index 5a85e46..ee2da1b 100644 (file)
@@ -23,8 +23,9 @@ int eval_to_number __ARGS((char_u *expr));
 list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
 int get_spellword __ARGS((list_T *list, char_u **pp));
 typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
-void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, int str_arg_only, typval_T *rettv));
 long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
 void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
 void *save_funccal __ARGS((void));
 void restore_funccal __ARGS((void *vfc));
@@ -32,6 +33,8 @@ void prof_child_enter __ARGS((proftime_T *tm));
 void prof_child_exit __ARGS((proftime_T *tm));
 int eval_foldexpr __ARGS((char_u *arg, int *cp));
 void ex_let __ARGS((exarg_T *eap));
+void list_add_watch __ARGS((list_T *l, listwatch_T *lw));
+void list_rem_watch __ARGS((list_T *l, listwatch_T *lwrem));
 void *eval_for_line __ARGS((char_u *arg, int *errp, char_u **nextcmdp, int skip));
 int next_for_item __ARGS((void *fi_void, char_u *arg));
 void free_for_info __ARGS((void *fi_void));
@@ -45,13 +48,25 @@ char_u *get_user_var_name __ARGS((expand_T *xp, int idx));
 list_T *list_alloc __ARGS((void));
 void list_unref __ARGS((list_T *l));
 void list_free __ARGS((list_T *l, int recurse));
+listitem_T *listitem_alloc __ARGS((void));
+void listitem_free __ARGS((listitem_T *item));
+void listitem_remove __ARGS((list_T *l, listitem_T *item));
 dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
+listitem_T *list_find __ARGS((list_T *l, long n));
 char_u *list_find_str __ARGS((list_T *l, long idx));
+void list_append __ARGS((list_T *l, listitem_T *item));
 int list_append_tv __ARGS((list_T *l, typval_T *tv));
 int list_append_dict __ARGS((list_T *list, dict_T *dict));
 int list_append_string __ARGS((list_T *l, char_u *str, int len));
+int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
+void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
 int garbage_collect __ARGS((void));
+void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+void set_ref_in_list __ARGS((list_T *l, int copyID));
+void set_ref_in_item __ARGS((typval_T *tv, int copyID));
 dict_T *dict_alloc __ARGS((void));
+void dict_unref __ARGS((dict_T *d));
+void dict_free __ARGS((dict_T *d, int recurse));
 dictitem_T *dictitem_alloc __ARGS((char_u *key));
 void dictitem_free __ARGS((dictitem_T *item));
 int dict_add __ARGS((dict_T *d, dictitem_T *item));
@@ -62,6 +77,10 @@ char_u *get_dict_string __ARGS((dict_T *d, char_u *key, int save));
 long get_dict_number __ARGS((dict_T *d, char_u *key));
 char_u *get_function_name __ARGS((expand_T *xp, int idx));
 char_u *get_expr_name __ARGS((expand_T *xp, int idx));
+int func_call __ARGS((char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv));
+void dict_extend __ARGS((dict_T *d1, dict_T *d2, char_u *action));
+void mzscheme_call_vim __ARGS((char_u *name, typval_T *args, typval_T *rettv));
+float_T vim_round __ARGS((float_T f));
 long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit));
 void set_vim_var_nr __ARGS((int idx, long val));
 long get_vim_var_nr __ARGS((int idx));
@@ -81,7 +100,8 @@ long get_tv_number_chk __ARGS((typval_T *varp, int *denote));
 char_u *get_tv_string_chk __ARGS((typval_T *varp));
 char_u *get_var_value __ARGS((char_u *name));
 void new_script_vars __ARGS((scid_T id));
-void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
+void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var, int scope));
+void unref_var_dict __ARGS((dict_T *dict));
 void vars_clear __ARGS((hashtab_T *ht));
 void copy_tv __ARGS((typval_T *from, typval_T *to));
 void ex_echo __ARGS((exarg_T *eap));
@@ -89,9 +109,13 @@ void ex_echohl __ARGS((exarg_T *eap));
 void ex_execute __ARGS((exarg_T *eap));
 void ex_function __ARGS((exarg_T *eap));
 void free_all_functions __ARGS((void));
+int translated_function_exists __ARGS((char_u *name));
+char_u *get_expanded_name __ARGS((char_u *name, int check));
 void func_dump_profile __ARGS((FILE *fd));
 char_u *get_user_func_name __ARGS((expand_T *xp, int idx));
 void ex_delfunction __ARGS((exarg_T *eap));
+void func_unref __ARGS((char_u *name));
+void func_ref __ARGS((char_u *name));
 void ex_return __ARGS((exarg_T *eap));
 int do_return __ARGS((exarg_T *eap, int reanimate, int is_cmd, void *rettv));
 void discard_pending_return __ARGS((void *rettv));
index ff868ca..a94f5d0 100644 (file)
@@ -19,10 +19,12 @@ void viminfo_writestring __ARGS((FILE *fd, char_u *p));
 void do_fixdel __ARGS((exarg_T *eap));
 void print_line_no_prefix __ARGS((linenr_T lnum, int use_number, int list));
 void print_line __ARGS((linenr_T lnum, int use_number, int list));
+int rename_buffer __ARGS((char_u *new_fname));
 void ex_file __ARGS((exarg_T *eap));
 void ex_update __ARGS((exarg_T *eap));
 void ex_write __ARGS((exarg_T *eap));
 int do_write __ARGS((exarg_T *eap));
+int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
 void ex_wnext __ARGS((exarg_T *eap));
 void do_wqall __ARGS((exarg_T *eap));
 int not_writing __ARGS((void));
index 2c89fe3..d30ba41 100644 (file)
@@ -17,12 +17,13 @@ char *profile_msg __ARGS((proftime_T *tm));
 void profile_setlimit __ARGS((long msec, proftime_T *tm));
 int profile_passed_limit __ARGS((proftime_T *tm));
 void profile_zero __ARGS((proftime_T *tm));
+void profile_divide __ARGS((proftime_T *tm, int count, proftime_T *tm2));
 void profile_add __ARGS((proftime_T *tm, proftime_T *tm2));
 void profile_self __ARGS((proftime_T *self, proftime_T *total, proftime_T *children));
 void profile_get_wait __ARGS((proftime_T *tm));
 void profile_sub_wait __ARGS((proftime_T *tm, proftime_T *tma));
 int profile_equal __ARGS((proftime_T *tm1, proftime_T *tm2));
-int profile_cmp __ARGS((proftime_T *tm1, proftime_T *tm2));
+int profile_cmp __ARGS((const proftime_T *tm1, const proftime_T *tm2));
 void ex_profile __ARGS((exarg_T *eap));
 char_u *get_profile_name __ARGS((expand_T *xp, int idx));
 void set_context_in_profile_cmd __ARGS((expand_T *xp, char_u *arg));
@@ -42,7 +43,7 @@ int check_changed_any __ARGS((int hidden));
 int check_fname __ARGS((void));
 int buf_write_all __ARGS((buf_T *buf, int forceit));
 int get_arglist __ARGS((garray_T *gap, char_u *str));
-int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp));
+int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp, int wig));
 void set_arglist __ARGS((char_u *str));
 void check_arg_idx __ARGS((win_T *win));
 void ex_args __ARGS((exarg_T *eap));
@@ -83,5 +84,7 @@ void ex_checktime __ARGS((exarg_T *eap));
 char_u *get_mess_lang __ARGS((void));
 void set_lang_var __ARGS((void));
 void ex_language __ARGS((exarg_T *eap));
+void free_locales __ARGS((void));
 char_u *get_lang_arg __ARGS((expand_T *xp, int idx));
+char_u *get_locales __ARGS((expand_T *xp, int idx));
 /* vim: set ft=c : */
index 8b0bd7c..816fd3f 100644 (file)
@@ -1,7 +1,7 @@
 /* ex_docmd.c */
 void do_exmode __ARGS((int improved));
 int do_cmdline_cmd __ARGS((char_u *cmd));
-int do_cmdline __ARGS((char_u *cmdline, char_u *(*getline)(int, void *, int), void *cookie, int flags));
+int do_cmdline __ARGS((char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags));
 int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
 void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
 int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
@@ -40,6 +40,7 @@ void ex_splitview __ARGS((exarg_T *eap));
 void tabpage_new __ARGS((void));
 void do_exedit __ARGS((exarg_T *eap, win_T *old_curwin));
 void free_cd_dir __ARGS((void));
+void post_chdir __ARGS((int local));
 void ex_cd __ARGS((exarg_T *eap));
 void do_sleep __ARGS((long msec));
 int vim_mkdir_emsg __ARGS((char_u *name, int prot));
index cdc49a8..a8f960b 100644 (file)
@@ -31,7 +31,7 @@ char_u *sm_gettail __ARGS((char_u *s));
 char_u *addstar __ARGS((char_u *fname, int len, int context));
 void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
 int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
-int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
+int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped));
 char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
 void init_history __ARGS((void));
 int get_histtype __ARGS((char_u *name));
@@ -48,10 +48,10 @@ int del_history_idx __ARGS((int histype, int idx));
 void remove_key_from_history __ARGS((void));
 int get_list_range __ARGS((char_u **str, int *num1, int *num2));
 void ex_history __ARGS((exarg_T *eap));
-void prepare_viminfo_history __ARGS((int asklen));
-int read_viminfo_history __ARGS((vir_T *virp));
+void prepare_viminfo_history __ARGS((int asklen, int writing));
+int read_viminfo_history __ARGS((vir_T *virp, int writing));
 void finish_viminfo_history __ARGS((void));
-void write_viminfo_history __ARGS((FILE *fp));
+void write_viminfo_history __ARGS((FILE *fp, int merge));
 void cmd_pchar __ARGS((int c, int offset));
 int cmd_gchar __ARGS((int offset));
 char_u *script_get __ARGS((exarg_T *eap, char_u *cmd));
index 88d3c27..7aa99cf 100644 (file)
@@ -2,6 +2,8 @@
 void filemess __ARGS((buf_T *buf, char_u *name, char_u *s, int attr));
 int readfile __ARGS((char_u *fname, char_u *sfname, linenr_T from, linenr_T lines_to_skip, linenr_T lines_to_read, exarg_T *eap, int flags));
 int prep_exarg __ARGS((exarg_T *eap, buf_T *buf));
+void set_file_options __ARGS((int set_options, exarg_T *eap));
+void set_forced_fenc __ARGS((exarg_T *eap));
 int prepare_crypt_read __ARGS((FILE *fp));
 char_u *prepare_crypt_write __ARGS((buf_T *buf, int *lenp));
 int check_file_readonly __ARGS((char_u *fname, int perm));
@@ -35,6 +37,7 @@ void au_event_restore __ARGS((char_u *old_ei));
 void do_autocmd __ARGS((char_u *arg, int forceit));
 int do_doautocmd __ARGS((char_u *arg, int do_msg));
 void ex_doautoall __ARGS((exarg_T *eap));
+int check_nomodeline __ARGS((char_u **argp));
 void aucmd_prepbuf __ARGS((aco_save_T *aco, buf_T *buf));
 void aucmd_restbuf __ARGS((aco_save_T *aco));
 int apply_autocmds __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf));
@@ -43,8 +46,13 @@ int has_cursorhold __ARGS((void));
 int trigger_cursorhold __ARGS((void));
 int has_cursormoved __ARGS((void));
 int has_cursormovedI __ARGS((void));
+int has_textchanged __ARGS((void));
+int has_textchangedI __ARGS((void));
+int has_insertcharpre __ARGS((void));
 void block_autocmds __ARGS((void));
 void unblock_autocmds __ARGS((void));
+int is_autocmd_blocked __ARGS((void));
+char_u *getnextac __ARGS((int c, void *cookie, int indent));
 int has_autocmd __ARGS((event_T event, char_u *sfname, buf_T *buf));
 char_u *get_augroup_name __ARGS((expand_T *xp, int idx));
 char_u *set_context_in_autocmd __ARGS((expand_T *xp, char_u *arg, int doautocmd));
@@ -54,4 +62,6 @@ int au_exists __ARGS((char_u *arg));
 int match_file_pat __ARGS((char_u *pattern, regprog_T *prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs));
 int match_file_list __ARGS((char_u *list, char_u *sfname, char_u *ffname));
 char_u *file_pat_to_reg_pat __ARGS((char_u *pat, char_u *pat_end, char *allow_dirs, int no_bslash));
+long read_eintr __ARGS((int fd, void *buf, size_t bufsize));
+long write_eintr __ARGS((int fd, void *buf, size_t bufsize));
 /* vim: set ft=c : */
index 3318bbd..10f7201 100644 (file)
@@ -27,7 +27,7 @@ void clearFolding __ARGS((win_T *win));
 void foldUpdate __ARGS((win_T *wp, linenr_T top, linenr_T bot));
 void foldUpdateAll __ARGS((win_T *win));
 int foldMoveTo __ARGS((int updown, int dir, long count));
-void foldInitWin __ARGS((win_T *newwin));
+void foldInitWin __ARGS((win_T *new_win));
 int find_wl_entry __ARGS((win_T *win, linenr_T lnum));
 void foldAdjustVisual __ARGS((void));
 void foldAdjustCursor __ARGS((void));
index 06081c3..371f770 100644 (file)
@@ -4,8 +4,9 @@ char_u *get_recorded __ARGS((void));
 char_u *get_inserted __ARGS((void));
 int stuff_empty __ARGS((void));
 void typeahead_noflush __ARGS((int c));
-void flush_buffers __ARGS((int typeahead));
+void flush_buffers __ARGS((int flush_typeahead));
 void ResetRedobuff __ARGS((void));
+void CancelRedo __ARGS((void));
 void saveRedobuff __ARGS((void));
 void restoreRedobuff __ARGS((void));
 void AppendToRedobuff __ARGS((char_u *s));
@@ -51,6 +52,7 @@ int do_map __ARGS((int maptype, char_u *arg, int mode, int abbrev));
 int get_map_mode __ARGS((char_u **cmdp, int forceit));
 void map_clear __ARGS((char_u *cmdp, char_u *arg, int forceit, int abbr));
 void map_clear_int __ARGS((buf_T *buf, int mode, int local, int abbr));
+char_u *map_mode_to_chars __ARGS((int mode));
 int map_to_exists __ARGS((char_u *str, char_u *modechars, int abbr));
 int map_to_exists_mode __ARGS((char_u *rhs, int mode, int abbr));
 char_u *set_context_in_map_cmd __ARGS((expand_T *xp, char_u *cmd, char_u *arg, int forceit, int isabbrev, int isunmap, cmdidx_T cmdidx));
@@ -61,7 +63,7 @@ void vim_unescape_csi __ARGS((char_u *p));
 int makemap __ARGS((FILE *fd, buf_T *buf));
 int put_escstr __ARGS((FILE *fd, char_u *strstart, int what));
 void check_map_keycodes __ARGS((void));
-char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr));
+char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr, mapblock_T **mp_ptr, int *local_ptr));
 void init_mappings __ARGS((void));
 void add_map __ARGS((char_u *map, int mode));
 /* vim: set ft=c : */
index 353c33b..efc8e40 100644 (file)
@@ -27,5 +27,5 @@ void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
 void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
 Window gui_x11_get_wid __ARGS((void));
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
 /* vim: set ft=c : */
index 8b88358..2bff89b 100644 (file)
@@ -13,7 +13,7 @@ void gui_mch_create_scrollbar __ARGS((scrollbar_T *sb, int orient));
 void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
 char_u *gui_mch_browsedir __ARGS((char_u *title, char_u *initdir));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield, int ex_cmd));
 void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
 void gui_make_popup __ARGS((char_u *path_name, int mouse_pos));
 void gui_mch_find_dialog __ARGS((exarg_T *eap));
index 2484082..e4b2111 100644 (file)
@@ -4,6 +4,7 @@ void gui_mch_free_all __ARGS((void));
 void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
 void gui_mch_stop_blink __ARGS((void));
 void gui_mch_start_blink __ARGS((void));
+int gui_mch_early_init_check __ARGS((void));
 int gui_mch_init_check __ARGS((void));
 void gui_mch_show_tabline __ARGS((int showit));
 int gui_mch_showing_tabline __ARGS((void));
@@ -20,6 +21,7 @@ int gui_mch_get_winpos __ARGS((int *x, int *y));
 void gui_mch_set_winpos __ARGS((int x, int y));
 int gui_mch_maximized __ARGS((void));
 void gui_mch_unmaximize __ARGS((void));
+void gui_mch_newfont __ARGS((void));
 void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
 void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
 void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
@@ -57,6 +59,7 @@ void clip_mch_request_selection __ARGS((VimClipboard *cbd));
 void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
 int clip_mch_own_selection __ARGS((VimClipboard *cbd));
 void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+int clip_gtk_owner_exists __ARGS((VimClipboard *cbd));
 void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
 void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
 void gui_mch_draw_menubar __ARGS((void));
index ba6e2ad..2010f97 100644 (file)
@@ -81,7 +81,7 @@ int gui_mch_get_mouse_x __ARGS((void));
 int gui_mch_get_mouse_y __ARGS((void));
 void gui_mch_setmouse __ARGS((int x, int y));
 void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
 void gui_mch_set_foreground __ARGS((void));
 void gui_mch_show_tabline __ARGS((int showit));
index 3e08ec9..e455f01 100644 (file)
@@ -29,7 +29,7 @@ void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
 void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
 Window gui_x11_get_wid __ARGS((void));
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield, int ex_cmd));
 void gui_mch_enable_footer __ARGS((int showit));
 void gui_mch_set_footer __ARGS((char_u *s));
 void gui_mch_show_toolbar __ARGS((int showit));
index 6a3ff04..0a5041e 100644 (file)
@@ -8,7 +8,7 @@ void gui_mch_exit __ARGS((int rc));
 void gui_mch_update __ARGS((void));
 int gui_mch_wait_for_chars __ARGS((int wtime));
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *default_name, char_u *ext, char_u *initdir, char_u *filter));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield, int ex_cmd));
 int gui_mch_get_winpos __ARGS((int *x, int *y));
 void gui_mch_set_winpos __ARGS((int x, int y));
 void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
diff --git a/src/proto/gui_riscos.pro b/src/proto/gui_riscos.pro
deleted file mode 100644 (file)
index 9bfc02b..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Prototypes for gui_riscos.c
- * Based on gui_x11_pro.h (10 March 2002 version)
- */
-void gui_mch_prepare __ARGS((int *argc, char **argv));
-int gui_mch_init_check __ARGS((void));
-int gui_mch_init __ARGS((void));
-void gui_mch_uninit __ARGS((void));
-void gui_mch_new_colors __ARGS((void));
-int gui_mch_open __ARGS((void));
-void gui_init_tooltip_font __ARGS((void));
-void gui_init_menu_font __ARGS((void));void gui_mch_exit __ARGS((int rc));
-int gui_mch_get_winpos __ARGS((int *x, int *y));
-void gui_mch_set_winpos __ARGS((int x, int y));
-void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
-void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
-int gui_mch_init_font __ARGS((char_u *font_name, int do_fontset));
-GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
-int gui_mch_adjust_charheight __ARGS((void));
-void gui_mch_set_font __ARGS((GuiFont font));
-void gui_mch_set_fontset __ARGS((GuiFontset fontset));
-void gui_mch_free_font __ARGS((GuiFont font));
-void gui_mch_free_fontset __ARGS((GuiFontset fontset));
-GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int giveErrorIfMissing, int fixed_width));
-guicolor_T gui_mch_get_color __ARGS((char_u *reqname));
-void gui_mch_set_fg_color __ARGS((guicolor_T color));
-void gui_mch_set_bg_color __ARGS((guicolor_T color));
-void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
-int gui_mch_haskey __ARGS((char_u *name));
-void gui_mch_beep __ARGS((void));
-void gui_mch_flash __ARGS((int msec));
-void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
-void gui_mch_iconify __ARGS((void));
-void gui_mch_set_foreground __ARGS((void));
-void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
-void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
-void gui_mch_update __ARGS((void));
-int gui_mch_wait_for_chars __ARGS((long wtime));
-void gui_mch_flush __ARGS((void));
-void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
-void gui_mch_clear_all __ARGS((void));
-void gui_mch_delete_lines __ARGS((int row, int num_lines));
-void gui_mch_insert_lines __ARGS((int row, int num_lines));
-void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
-int clip_mch_own_selection __ARGS((VimClipboard *cbd));
-void clip_mch_request_selection __ARGS((VimClipboard *cbd));
-void clip_mch_set_selection __ARGS((VimClipboard *cbd));
-void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
-void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
-void gui_mch_draw_menubar __ARGS((void));
-void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
-void gui_mch_stop_blink __ARGS((void));
-void gui_mch_start_blink __ARGS((void));
-void process_event __ARGS((int event, int *block));
-void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
-long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
-void gui_mch_getmouse __ARGS((int *x, int *y));
-void gui_mch_setmouse __ARGS((int x, int y));
-void gui_mch_drawsign __ARGS((int row, int col, int typenr));
-void gui_mch_destroy_sign __ARGS((XImage *sign));
-void gui_mch_mousehide __ARGS((int hide));
-void mch_set_mouse_shape __ARGS((int shape));
-void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu));
-
-void ro_redraw_title __ARGS((int window));
-int ro_ok_to_quit __ARGS((void));
-/* vim: set ft=c : */
index 0f82c5a..a7802a9 100644 (file)
@@ -49,6 +49,7 @@ void gui_mch_flash __ARGS((int msec));
 void gui_mch_delete_lines __ARGS((int row, int num_lines));
 void gui_mch_insert_lines __ARGS((int row, int num_lines));
 void gui_mch_exit __ARGS((int rc));
+void gui_mch_wide_font_changed __ARGS((void));
 int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
 int gui_mch_maximized __ARGS((void));
 void gui_mch_newfont __ARGS((void));
@@ -74,6 +75,6 @@ void gui_make_popup __ARGS((char_u *path_name, int mouse_pos));
 void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
 void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
 void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
 void gui_mch_set_foreground __ARGS((void));
 /* vim: set ft=c : */
index 657a4c6..a333233 100644 (file)
@@ -49,6 +49,7 @@ void gui_mch_flash __ARGS((int msec));
 void gui_mch_delete_lines __ARGS((int row, int num_lines));
 void gui_mch_insert_lines __ARGS((int row, int num_lines));
 void gui_mch_exit __ARGS((int rc));
+void gui_mch_wide_font_changed __ARGS((void));
 int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
 int gui_mch_maximized __ARGS((void));
 void gui_mch_newfont __ARGS((void));
@@ -81,7 +82,7 @@ void gui_make_tearoff __ARGS((char_u *path_name));
 void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
 void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
 void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
 void gui_mch_set_foreground __ARGS((void));
 void gui_mch_drawsign __ARGS((int row, int col, int typenr));
 void *gui_mch_register_sign __ARGS((char_u *signfile));
index 3bac4cc..8db66a6 100644 (file)
@@ -6,4 +6,6 @@ void ex_luado __ARGS((exarg_T *eap));
 void ex_luafile __ARGS((exarg_T *eap));
 void lua_buffer_free __ARGS((buf_T *buf));
 void lua_window_free __ARGS((win_T *win));
+void do_luaeval __ARGS((char_u *str, typval_T *arg, typval_T *rettv));
+void set_ref_in_lua __ARGS((int copyID));
 /* vim: set ft=c : */
index 60e99bd..d1180bf 100644 (file)
@@ -14,6 +14,7 @@ void mzvim_check_threads __ARGS((void));
 void mzvim_reset_timer __ARGS((void));
 void *mzvim_eval_string __ARGS((char_u *str));
 int mzthreads_allowed __ARGS((void));
-void mzscheme_main __ARGS((void));
+int mzscheme_main __ARGS((int argc, char **argv));
 void do_mzeval __ARGS((char_u *str, typval_T *rettv));
+int vim_main2 __ARGS((int argc, char **argv));
 /* vim: set ft=c : */
index ec12402..369a5d8 100644 (file)
@@ -4,6 +4,10 @@ void python_end __ARGS((void));
 int python_loaded __ARGS((void));
 void ex_python __ARGS((exarg_T *eap));
 void ex_pyfile __ARGS((exarg_T *eap));
+void ex_pydo __ARGS((exarg_T *eap));
 void python_buffer_free __ARGS((buf_T *buf));
 void python_window_free __ARGS((win_T *win));
+void python_tabpage_free __ARGS((tabpage_T *tab));
+void do_pyeval __ARGS((char_u *str, typval_T *rettv));
+void set_ref_in_python __ARGS((int copyID));
 /* vim: set ft=c : */
index 9c132c3..1e2a522 100644 (file)
@@ -4,6 +4,10 @@ void python3_end __ARGS((void));
 int python3_loaded __ARGS((void));
 void ex_py3 __ARGS((exarg_T *eap));
 void ex_py3file __ARGS((exarg_T *eap));
+void ex_py3do __ARGS((exarg_T *eap));
 void python3_buffer_free __ARGS((buf_T *buf));
 void python3_window_free __ARGS((win_T *win));
+void python3_tabpage_free __ARGS((tabpage_T *tab));
+void do_py3eval __ARGS((char_u *str, typval_T *rettv));
+void set_ref_in_python3 __ARGS((int copyID));
 /* vim: set ft=c : */
index 7dedb22..3e03b1f 100644 (file)
@@ -6,4 +6,5 @@ void ex_rubydo __ARGS((exarg_T *eap));
 void ex_rubyfile __ARGS((exarg_T *eap));
 void ruby_buffer_free __ARGS((buf_T *buf));
 void ruby_window_free __ARGS((win_T *win));
+void vim_ruby_init __ARGS((void *stack_start));
 /* vim: set ft=c : */
index 1457829..e8cef9d 100644 (file)
@@ -5,8 +5,9 @@ void setpcmark __ARGS((void));
 void checkpcmark __ARGS((void));
 pos_T *movemark __ARGS((int count));
 pos_T *movechangelist __ARGS((int count));
+pos_T *getmark_buf __ARGS((buf_T *buf, int c, int changefile));
 pos_T *getmark __ARGS((int c, int changefile));
-pos_T *getmark_fnum __ARGS((int c, int changefile, int *fnum));
+pos_T *getmark_buf_fnum __ARGS((buf_T *buf, int c, int changefile, int *fnum));
 pos_T *getnextmark __ARGS((pos_T *startpos, int dir, int begin_line));
 void fmarks_check_names __ARGS((buf_T *buf));
 int check_mark __ARGS((pos_T *pos));
index 9519a19..c599dac 100644 (file)
@@ -2,7 +2,9 @@
 int enc_canon_props __ARGS((char_u *name));
 char_u *mb_init __ARGS((void));
 int bomb_size __ARGS((void));
+void remove_bom __ARGS((char_u *s));
 int mb_get_class __ARGS((char_u *p));
+int mb_get_class_buf __ARGS((char_u *p, buf_T *buf));
 int dbcs_class __ARGS((unsigned lead, unsigned trail));
 int latin_char2len __ARGS((int c));
 int latin_char2bytes __ARGS((int c, char_u *buf));
@@ -56,7 +58,7 @@ void utf_find_illegal __ARGS((void));
 int utf_valid_string __ARGS((char_u *s, char_u *end));
 int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
 void mb_adjust_cursor __ARGS((void));
-void mb_adjustpos __ARGS((pos_T *lp));
+void mb_adjustpos __ARGS((buf_T *buf, pos_T *lp));
 char_u *mb_prevptr __ARGS((char_u *line, char_u *p));
 int mb_charlen __ARGS((char_u *str));
 int mb_charlen_len __ARGS((char_u *str, int len));
index 09b9152..f67b8e0 100644 (file)
@@ -4,7 +4,7 @@ int verb_msg __ARGS((char_u *s));
 int msg_attr __ARGS((char_u *s, int attr));
 int msg_attr_keep __ARGS((char_u *s, int attr, int keep));
 char_u *msg_strtrunc __ARGS((char_u *s, int force));
-void trunc_string __ARGS((char_u *s, char_u *buf, int room));
+void trunc_string __ARGS((char_u *s, char_u *buf, int room, int buflen));
 void reset_last_sourcing __ARGS((void));
 void msg_source __ARGS((int attr));
 int emsg_not_now __ARGS((void));
@@ -33,6 +33,7 @@ char_u *msg_outtrans_one __ARGS((char_u *p, int attr));
 int msg_outtrans_len_attr __ARGS((char_u *msgstr, int len, int attr));
 void msg_make __ARGS((char_u *arg));
 int msg_outtrans_special __ARGS((char_u *strstart, int from));
+char_u *str2special_save __ARGS((char_u *str, int is_lhs));
 char_u *str2special __ARGS((char_u **sp, int from));
 void str2specialbuf __ARGS((char_u *sp, char_u *buf, int len));
 void msg_prt_line __ARGS((char_u *s, int list));
@@ -44,6 +45,7 @@ void msg_puts_attr __ARGS((char_u *s, int attr));
 void may_clear_sb_text __ARGS((void));
 void clear_sb_text __ARGS((void));
 void show_sb_text __ARGS((void));
+void msg_sb_eol __ARGS((void));
 int msg_use_printf __ARGS((void));
 void mch_errmsg __ARGS((char *str));
 void mch_msg __ARGS((char *str));
@@ -63,7 +65,7 @@ void verbose_stop __ARGS((void));
 int verbose_open __ARGS((void));
 void give_warning __ARGS((char_u *message, int hl));
 void msg_advance __ARGS((int col));
-int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
 void display_confirm_msg __ARGS((void));
 int vim_dialog_yesno __ARGS((int type, char_u *title, char_u *message, int dflt));
 int vim_dialog_yesnocancel __ARGS((int type, char_u *title, char_u *message, int dflt));
index 93bfff6..0354535 100644 (file)
@@ -5,8 +5,9 @@ int get_indent_buf __ARGS((buf_T *buf, linenr_T lnum));
 int get_indent_str __ARGS((char_u *ptr, int ts));
 int set_indent __ARGS((int size, int flags));
 int get_number_indent __ARGS((linenr_T lnum));
-int open_line __ARGS((int dir, int flags, int old_indent));
-int get_leader_len __ARGS((char_u *line, char_u **flags, int backward));
+int open_line __ARGS((int dir, int flags, int second_line_indent));
+int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int include_space));
+int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
 int plines __ARGS((linenr_T lnum));
 int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
 int plines_nofill __ARGS((linenr_T lnum));
@@ -41,6 +42,7 @@ void unchanged __ARGS((buf_T *buf, int ff));
 void check_status __ARGS((buf_T *buf));
 void change_warning __ARGS((int col));
 int ask_yesno __ARGS((char_u *str, int direct));
+int is_mouse_key __ARGS((int c));
 int get_keystroke __ARGS((void));
 int get_number __ARGS((int colon, int *mouse_used));
 int prompt_for_number __ARGS((int *mouse_used));
@@ -49,6 +51,7 @@ void beep_flush __ARGS((void));
 void vim_beep __ARGS((void));
 void init_homedir __ARGS((void));
 void free_homedir __ARGS((void));
+void free_users __ARGS((void));
 char_u *expand_env_save __ARGS((char_u *src));
 char_u *expand_env_save_opt __ARGS((char_u *src, int one));
 void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
@@ -56,6 +59,8 @@ void expand_env_esc __ARGS((char_u *srcp, char_u *dst, int dstlen, int esc, int
 char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
 void vim_setenv __ARGS((char_u *name, char_u *val));
 char_u *get_env_name __ARGS((expand_T *xp, int idx));
+char_u *get_users __ARGS((expand_T *xp, int idx));
+int match_user __ARGS((char_u *name));
 void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
 char_u *home_replace_save __ARGS((buf_T *buf, char_u *src));
 int fullpathcmp __ARGS((char_u *s1, char_u *s2, int checkname));
index 671bd9f..16c5918 100644 (file)
@@ -14,6 +14,7 @@ int decl __ARGS((pos_T *lp));
 linenr_T get_cursor_rel_lnum __ARGS((win_T *wp, linenr_T lnum));
 void check_cursor_lnum __ARGS((void));
 void check_cursor_col __ARGS((void));
+void check_cursor_col_win __ARGS((win_T *win));
 void check_cursor __ARGS((void));
 void adjust_cursor_col __ARGS((void));
 int leftcol_changed __ARGS((void));
@@ -40,6 +41,7 @@ void copy_spaces __ARGS((char_u *ptr, size_t count));
 void copy_chars __ARGS((char_u *ptr, size_t count, int c));
 void del_trailing_spaces __ARGS((char_u *ptr));
 void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
+void vim_strcat __ARGS((char_u *to, char_u *from, size_t tosize));
 int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
 void vim_free __ARGS((void *x));
 int vim_stricmp __ARGS((char *s1, char *s2));
@@ -56,6 +58,7 @@ int ga_grow __ARGS((garray_T *gap, int n));
 char_u *ga_concat_strings __ARGS((garray_T *gap));
 void ga_concat __ARGS((garray_T *gap, char_u *s));
 void ga_append __ARGS((garray_T *gap, int c));
+void append_ga_line __ARGS((garray_T *gap));
 int name_to_mod_mask __ARGS((int c));
 int simplify_key __ARGS((int key, int *modifiers));
 int handle_x_keys __ARGS((int key));
@@ -113,4 +116,5 @@ time_t get8ctime __ARGS((FILE *fd));
 char_u *read_string __ARGS((FILE *fd, int cnt));
 int put_bytes __ARGS((FILE *fd, long_u nr, int len));
 void put_time __ARGS((FILE *fd, time_t the_time));
+int has_non_ascii __ARGS((char_u *s));
 /* vim: set ft=c : */
index 5fe3844..595e3b8 100644 (file)
@@ -24,7 +24,7 @@ int win_col_off __ARGS((win_T *wp));
 int curwin_col_off __ARGS((void));
 int win_col_off2 __ARGS((win_T *wp));
 int curwin_col_off2 __ARGS((void));
-void curs_columns __ARGS((int scroll));
+void curs_columns __ARGS((int may_scroll));
 void scrolldown __ARGS((long line_count, int byfold));
 void scrollup __ARGS((long line_count, int byfold));
 void check_topfill __ARGS((win_T *wp, int down));
index d07c260..a8c144e 100644 (file)
@@ -15,6 +15,7 @@ void get_yank_register __ARGS((int regname, int writing));
 int may_get_selection __ARGS((int regname));
 void *get_register __ARGS((int name, int copy));
 void put_register __ARGS((int name, void *reg));
+void free_register __ARGS((void *reg));
 int yank_register_mline __ARGS((int regname));
 int do_record __ARGS((int c));
 int do_execreg __ARGS((int regname, int colon, int addcr, int silent));
@@ -36,7 +37,7 @@ void adjust_cursor_eol __ARGS((void));
 int preprocs_left __ARGS((void));
 int get_register_name __ARGS((int num));
 void ex_display __ARGS((exarg_T *eap));
-int do_join __ARGS((long count, int insert_space, int save_undo));
+int do_join __ARGS((long count, int insert_space, int save_undo, int use_formatoptions));
 void op_format __ARGS((oparg_T *oap, int keep_cursor));
 void op_formatexpr __ARGS((oparg_T *oap));
 int fex_format __ARGS((linenr_T lnum, long count, int c));
index d14c89b..853a342 100644 (file)
@@ -22,7 +22,8 @@ void set_string_option_direct __ARGS((char_u *name, int opt_idx, char_u *val, in
 char_u *check_colorcolumn __ARGS((win_T *wp));
 char_u *check_stl_option __ARGS((char_u *s));
 int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags));
-void set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
+int get_option_value_strict __ARGS((char_u *name, long *numval, char_u **stringval, int opt_type, void *from));
+char_u *set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
 char_u *get_term_code __ARGS((char_u *tname));
 char_u *get_highlight_default __ARGS((void));
 char_u *get_encoding_default __ARGS((void));
@@ -33,6 +34,7 @@ void free_termoptions __ARGS((void));
 void free_one_termoption __ARGS((char_u *var));
 void set_term_defaults __ARGS((void));
 void comp_col __ARGS((void));
+void unset_global_local_option __ARGS((char_u *name, void *from));
 char_u *get_equalprg __ARGS((void));
 void win_copy_options __ARGS((win_T *wp_from, win_T *wp_to));
 void copy_winopt __ARGS((winopt_T *from, winopt_T *to));
@@ -52,8 +54,12 @@ int shortmess __ARGS((int x));
 void vimrc_found __ARGS((char_u *fname, char_u *envname));
 void change_compatible __ARGS((int on));
 int option_was_set __ARGS((char_u *name));
+void reset_option_was_set __ARGS((char_u *name));
 int can_bs __ARGS((int what));
 void save_file_ff __ARGS((buf_T *buf));
-int file_ff_differs __ARGS((buf_T *buf));
+int file_ff_differs __ARGS((buf_T *buf, int ignore_empty));
 int check_ff_value __ARGS((char_u *p));
+long get_sw_value __ARGS((void));
+long get_sts_value __ARGS((void));
+void find_mps_values __ARGS((int *initc, int *findc, int *backwards, int switchit));
 /* vim: set ft=c : */
diff --git a/src/proto/os_beos.pro b/src/proto/os_beos.pro
new file mode 100644 (file)
index 0000000..c537101
--- /dev/null
@@ -0,0 +1,4 @@
+/* os_beos.c */
+void beos_cleanup_read_thread __ARGS((void));
+int beos_select __ARGS((int nbits, struct fd_set *rbits, struct fd_set *wbits, struct fd_set *ebits, struct timeval *timeout));
+/* vim: set ft=c : */
index 2bf927d..0d29979 100644 (file)
@@ -22,17 +22,6 @@ int mch_chdir __ARGS((char *path));
 int can_end_termcap_mode __ARGS((int give_msg));
 int mch_screenmode __ARGS((char_u *arg));
 int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
-int utf8_to_utf16 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
-int utf16_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
-void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
-void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
-int clip_mch_own_selection __ARGS((VimClipboard *cbd));
-void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
-short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
-char_u *utf16_to_enc __ARGS((short_u *str, int *lenp));
-void clip_mch_request_selection __ARGS((VimClipboard *cbd));
-void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
-void clip_mch_set_selection __ARGS((VimClipboard *cbd));
 void DumpPutS __ARGS((const char *psz));
 int mch_get_winpos __ARGS((int *x, int *y));
 void mch_set_winpos __ARGS((int x, int y));
diff --git a/src/proto/os_riscos.pro b/src/proto/os_riscos.pro
deleted file mode 100644 (file)
index 9ea4cd5..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* os_riscos.c */
-void mch_write __ARGS((char_u *s, int len));
-int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
-int mch_char_avail __ARGS((void));
-long_u mch_avail_mem __ARGS((int special));
-void mch_delay __ARGS((long msec, int ignoreinput));
-void mch_suspend __ARGS((void));
-void mch_init __ARGS((void));
-int mch_check_win __ARGS((int argc, char **argv));
-int mch_input_isatty __ARGS((void));
-int mch_can_restore_title __ARGS((void));
-int mch_can_restore_icon __ARGS((void));
-void mch_settitle __ARGS((char_u *title, char_u *icon));
-void mch_restore_title __ARGS((int which));
-int mch_get_user_name __ARGS((char_u *s, int len));
-void mch_get_host_name __ARGS((char_u *s, int len));
-long mch_get_pid __ARGS((void));
-int mch_dirname __ARGS((char_u *buf, int len));
-int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
-int mch_isFullName __ARGS((char_u *fname));
-long mch_getperm __ARGS((char_u *name));
-int mch_setperm __ARGS((char_u *name, long perm));
-void mch_hide __ARGS((char_u *name));
-int mch_isdir __ARGS((char_u *name));
-int mch_can_exe __ARGS((char_u *name));
-int mch_nodetype __ARGS((char_u *name));
-void mch_early_init __ARGS((void));
-void mch_exit __ARGS((int r));
-void mch_settmode __ARGS((int tmode));
-void mch_setmouse __ARGS((int on));
-int mch_screenmode __ARGS((char_u *arg));
-int mch_get_shellsize __ARGS((void));
-void mch_set_shellsize __ARGS((void));
-void mch_new_shellsize __ARGS((void));
-int mch_call_shell __ARGS((char_u *cmd, int options));
-void mch_breakcheck __ARGS((void));
-int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
-int expand_section __ARGS((garray_T *gap, char_u *root, char_u *rest, int flags));
-int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
-int mch_has_exp_wildcard __ARGS((char_u *p));
-int mch_has_wildcard __ARGS((char_u *p));
-int mch_remove __ARGS((char_u *file));
-char_u *mch_munge_fname __ARGS((char_u *fname));
-int ro_buflist_add __ARGS((char_u *old_name));
-int mch_chdir __ARGS((char_u *dir));
-void mch_read_filetype __ARGS((char_u *file));
-void mch_set_filetype __ARGS((char_u *file, char_u *type));
-int mch_check_filetype __ARGS((char_u *fname, char_u *type));
-/* vim: set ft=c : */
index 5ca85c7..a4c590f 100644 (file)
@@ -1,4 +1,5 @@
 /* os_win32.c */
+HINSTANCE vimLoadLib __ARGS((char *name));
 int dyn_libintl_init __ARGS((char *libname));
 void dyn_libintl_end __ARGS((void));
 void PlatformId __ARGS((void));
@@ -19,7 +20,11 @@ long mch_getperm __ARGS((char_u *name));
 int mch_setperm __ARGS((char_u *name, long perm));
 void mch_hide __ARGS((char_u *name));
 int mch_isdir __ARGS((char_u *name));
+int mch_mkdir __ARGS((char_u *name));
+int mch_is_hard_link __ARGS((char_u *fname));
+int mch_is_symbolic_link __ARGS((char_u *fname));
 int mch_is_linked __ARGS((char_u *fname));
+int win32_fileinfo __ARGS((char_u *fname, BY_HANDLE_FILE_INFORMATION *info));
 int mch_writable __ARGS((char_u *name));
 int mch_can_exe __ARGS((char_u *name));
 int mch_nodetype __ARGS((char_u *name));
@@ -37,7 +42,6 @@ void mch_write __ARGS((char_u *s, int len));
 void mch_delay __ARGS((long msec, int ignoreinput));
 int mch_remove __ARGS((char_u *name));
 void mch_breakcheck __ARGS((void));
-long_u mch_avail_mem __ARGS((int special));
 int mch_wrename __ARGS((WCHAR *wold, WCHAR *wnew));
 int mch_rename __ARGS((const char *pszOldFile, const char *pszNewFile));
 char *default_shell __ARGS((void));
index 5cd1731..38c9c33 100644 (file)
@@ -2,16 +2,17 @@
 int re_multiline __ARGS((regprog_T *prog));
 int re_lookbehind __ARGS((regprog_T *prog));
 char_u *skip_regexp __ARGS((char_u *startp, int dirc, int magic, char_u **newp));
-regprog_T *vim_regcomp __ARGS((char_u *expr, int re_flags));
 int vim_regcomp_had_eol __ARGS((void));
 void free_regexp_stuff __ARGS((void));
-int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
-int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
-long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
 reg_extmatch_T *ref_extmatch __ARGS((reg_extmatch_T *em));
 void unref_extmatch __ARGS((reg_extmatch_T *em));
 char_u *regtilde __ARGS((char_u *source, int magic));
 int vim_regsub __ARGS((regmatch_T *rmp, char_u *source, char_u *dest, int copy, int magic, int backslash));
 int vim_regsub_multi __ARGS((regmmatch_T *rmp, linenr_T lnum, char_u *source, char_u *dest, int copy, int magic, int backslash));
 char_u *reg_submatch __ARGS((int no));
+regprog_T *vim_regcomp __ARGS((char_u *expr_arg, int re_flags));
+void vim_regfree __ARGS((regprog_T *prog));
+int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
 /* vim: set ft=c : */
index be791e0..31f97d5 100644 (file)
@@ -5,6 +5,7 @@ void redraw_later_clear __ARGS((void));
 void redraw_all_later __ARGS((int type));
 void redraw_curbuf_later __ARGS((int type));
 void redraw_buf_later __ARGS((buf_T *buf, int type));
+int redraw_asap __ARGS((int type));
 void redrawWinline __ARGS((linenr_T lnum, int invalid));
 void update_curbuf __ARGS((int type));
 void update_screen __ARGS((int type));
@@ -31,8 +32,8 @@ void reset_cterm_colors __ARGS((void));
 void screen_draw_rectangle __ARGS((int row, int col, int height, int width, int invert));
 void screen_fill __ARGS((int start_row, int end_row, int start_col, int end_col, int c1, int c2, int attr));
 void check_for_delay __ARGS((int check_msg_scroll));
-int screen_valid __ARGS((int clear));
-void screenalloc __ARGS((int clear));
+int screen_valid __ARGS((int doclear));
+void screenalloc __ARGS((int doclear));
 void free_screenlines __ARGS((void));
 void screenclear __ARGS((void));
 int can_clear __ARGS((char_u *p));
@@ -50,4 +51,6 @@ int redrawing __ARGS((void));
 int messaging __ARGS((void));
 void showruler __ARGS((int always));
 int number_width __ARGS((win_T *wp));
+int screen_screencol __ARGS((void));
+int screen_screenrow __ARGS((void));
 /* vim: set ft=c : */
index 7f3947c..f94fb69 100644 (file)
@@ -32,6 +32,7 @@ int current_block __ARGS((oparg_T *oap, long count, int include, int what, int o
 int current_tagblock __ARGS((oparg_T *oap, long count_arg, int include));
 int current_par __ARGS((oparg_T *oap, long count, int include, int type));
 int current_quote __ARGS((oparg_T *oap, long count, int include, int quotechar));
+int current_search __ARGS((long count, int forward));
 int linewhite __ARGS((linenr_T lnum));
 void find_pattern_in_path __ARGS((char_u *ptr, int dir, int len, int whole, int skip_comments, int type, long count, int action, linenr_T start_lnum, linenr_T end_lnum));
 int read_viminfo_search_pattern __ARGS((vir_T *virp, int force));
index 3c4d975..464b354 100644 (file)
@@ -2,6 +2,7 @@
 void sha256_start __ARGS((context_sha256_T *ctx));
 void sha256_update __ARGS((context_sha256_T *ctx, char_u *input, UINT32_T length));
 void sha256_finish __ARGS((context_sha256_T *ctx, char_u digest[32]));
+char_u *sha256_bytes __ARGS((char_u *buf, int buf_len, char_u *salt, int salt_len));
 char_u *sha256_key __ARGS((char_u *buf, char_u *salt, int salt_len));
 int sha256_self_test __ARGS((void));
 void sha2_seed __ARGS((char_u *header, int header_len, char_u *salt, int salt_len));
index 7ae13e9..af81ac6 100644 (file)
@@ -19,6 +19,8 @@ int get_syntax_info __ARGS((int *seqnrp));
 int syn_get_sub_char __ARGS((void));
 int syn_get_stack_item __ARGS((int i));
 int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
+void ex_syntime __ARGS((exarg_T *eap));
+char_u *get_syntime_arg __ARGS((expand_T *xp, int idx));
 void init_highlight __ARGS((int both, int reset));
 int load_colors __ARGS((char_u *name));
 void do_highlight __ARGS((char_u *line, int forceit, int init));
index 66c4c2e..25d9b96 100644 (file)
@@ -26,6 +26,7 @@ void term_settitle __ARGS((char_u *title));
 void ttest __ARGS((int pairs));
 void add_long_to_buf __ARGS((long_u val, char_u *dst));
 void check_shellsize __ARGS((void));
+void limit_screen_size __ARGS((void));
 void win_new_shellsize __ARGS((void));
 void shell_resized __ARGS((void));
 void shell_resized_check __ARGS((void));
@@ -34,6 +35,7 @@ void settmode __ARGS((int tmode));
 void starttermcap __ARGS((void));
 void stoptermcap __ARGS((void));
 void may_req_termresponse __ARGS((void));
+void may_req_ambiguous_character_width __ARGS((void));
 int swapping_screen __ARGS((void));
 void setmouse __ARGS((void));
 int mouse_has __ARGS((int c));
@@ -50,7 +52,7 @@ char_u *find_termcode __ARGS((char_u *name));
 char_u *get_termcode __ARGS((int i));
 void del_termcode __ARGS((char_u *name));
 void set_mouse_topline __ARGS((win_T *wp));
-int check_termcode __ARGS((int max_offset, char_u *buf, int buflen));
+int check_termcode __ARGS((int max_offset, char_u *buf, int bufsize, int *buflen));
 char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
 int find_term_bykeys __ARGS((char_u *src));
 void show_termcodes __ARGS((void));
index 7b65680..234e99f 100644 (file)
@@ -11,17 +11,17 @@ void ui_set_shellsize __ARGS((int mustset));
 void ui_new_shellsize __ARGS((void));
 void ui_breakcheck __ARGS((void));
 void clip_init __ARGS((int can_use));
-void clip_update_selection __ARGS((void));
+void clip_update_selection __ARGS((VimClipboard *clip));
 void clip_own_selection __ARGS((VimClipboard *cbd));
 void clip_lose_selection __ARGS((VimClipboard *cbd));
-void clip_copy_selection __ARGS((void));
 void clip_auto_select __ARGS((void));
-int clip_isautosel __ARGS((void));
+int clip_isautosel_star __ARGS((void));
+int clip_isautosel_plus __ARGS((void));
 void clip_modeless __ARGS((int button, int is_click, int is_drag));
 void clip_start_selection __ARGS((int col, int row, int repeated_click));
 void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
 void clip_may_redraw_selection __ARGS((int row, int col, int len));
-void clip_clear_selection __ARGS((void));
+void clip_clear_selection __ARGS((VimClipboard *cbd));
 void clip_may_clear_selection __ARGS((int row1, int row2));
 void clip_scroll_selection __ARGS((int rows));
 void clip_copy_modeless_selection __ARGS((int both));
@@ -29,6 +29,7 @@ int clip_gen_own_selection __ARGS((VimClipboard *cbd));
 void clip_gen_lose_selection __ARGS((VimClipboard *cbd));
 void clip_gen_set_selection __ARGS((VimClipboard *cbd));
 void clip_gen_request_selection __ARGS((VimClipboard *cbd));
+int clip_gen_owner_exists __ARGS((VimClipboard *cbd));
 int vim_is_input_buf_full __ARGS((void));
 int vim_is_input_buf_empty __ARGS((void));
 int vim_free_in_input_buf __ARGS((void));
@@ -52,6 +53,7 @@ void clip_x11_request_selection __ARGS((Widget myShell, Display *dpy, VimClipboa
 void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd));
 int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd));
 void clip_x11_set_selection __ARGS((VimClipboard *cbd));
+int clip_x11_owner_exists __ARGS((VimClipboard *cbd));
 void yank_cut_buffer0 __ARGS((Display *dpy, VimClipboard *cbd));
 int jump_to_mouse __ARGS((int flags, int *inclusive, int which_button));
 int mouse_comp_pos __ARGS((win_T *win, int *rowp, int *colp, linenr_T *lnump));
index 3f371f9..e6fb78f 100644 (file)
@@ -4,6 +4,7 @@ int highest_patch __ARGS((void));
 int has_patch __ARGS((int n));
 void ex_version __ARGS((exarg_T *eap));
 void list_version __ARGS((void));
+void maybe_intro_message __ARGS((void));
 void intro_message __ARGS((int colon));
 void ex_intro __ARGS((exarg_T *eap));
 /* vim: set ft=c : */
diff --git a/src/proto/winclip.pro b/src/proto/winclip.pro
new file mode 100644 (file)
index 0000000..996847e
--- /dev/null
@@ -0,0 +1,14 @@
+/* winclip.c */
+int utf8_to_utf16 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
+int utf16_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
+void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
+void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
+void win_clip_init __ARGS((void));
+int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
+char_u *utf16_to_enc __ARGS((short_u *str, int *lenp));
+void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
+/* vim: set ft=c : */
index 7b019a7..fdba722 100644 (file)
@@ -1,13 +1,14 @@
 /* window.c */
 void do_window __ARGS((int nchar, long Prenum, int xchar));
 int win_split __ARGS((int size, int flags));
-int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
+int win_split_ins __ARGS((int size, int flags, win_T *new_wp, int dir));
 int win_valid __ARGS((win_T *win));
 int win_count __ARGS((void));
 int make_windows __ARGS((int count, int vertical));
 void win_move_after __ARGS((win_T *win1, win_T *win2));
 void win_equal __ARGS((win_T *next_curwin, int current, int dir));
 void close_windows __ARGS((buf_T *buf, int keep_curwin));
+int one_window __ARGS((void));
 void win_close __ARGS((win_T *win, int free_buf));
 void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
 void win_free_all __ARGS((void));
@@ -26,11 +27,12 @@ int valid_tabpage __ARGS((tabpage_T *tpc));
 tabpage_T *find_tabpage __ARGS((int n));
 int tabpage_index __ARGS((tabpage_T *ftp));
 void goto_tabpage __ARGS((int n));
-void goto_tabpage_tp __ARGS((tabpage_T *tp));
+void goto_tabpage_tp __ARGS((tabpage_T *tp, int trigger_enter_autocmds, int trigger_leave_autocmds));
 void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
 void tabpage_move __ARGS((int nr));
 void win_goto __ARGS((win_T *wp));
 win_T *win_find_nr __ARGS((int winnr));
+tabpage_T *win_find_tabpage __ARGS((win_T *win));
 void win_enter __ARGS((win_T *wp, int undo_sync));
 win_T *buf_jump_open_win __ARGS((buf_T *buf));
 win_T *buf_jump_open_tab __ARGS((buf_T *buf));
@@ -50,6 +52,8 @@ void win_setwidth_win __ARGS((int width, win_T *wp));
 void win_setminheight __ARGS((void));
 void win_drag_status_line __ARGS((win_T *dragwin, int offset));
 void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
+void win_new_height __ARGS((win_T *wp, int height));
+void win_new_width __ARGS((win_T *wp, int width));
 void win_comp_scroll __ARGS((win_T *wp));
 void command_height __ARGS((void));
 void last_status __ARGS((int morewin));
@@ -66,9 +70,15 @@ int only_one_window __ARGS((void));
 void check_lnums __ARGS((int do_curwin));
 void make_snapshot __ARGS((int idx));
 void restore_snapshot __ARGS((int idx, int close_curwin));
+int switch_win __ARGS((win_T **save_curwin, tabpage_T **save_curtab, win_T *win, tabpage_T *tp, int no_display));
+void restore_win __ARGS((win_T *save_curwin, tabpage_T *save_curtab, int no_display));
+void switch_buffer __ARGS((buf_T **save_curbuf, buf_T *buf));
+void restore_buffer __ARGS((buf_T *save_curbuf));
 int win_hasvertsplit __ARGS((void));
 int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id));
 int match_delete __ARGS((win_T *wp, int id, int perr));
 void clear_matches __ARGS((win_T *wp));
 matchitem_T *get_match __ARGS((win_T *wp, int id));
+int get_win_number __ARGS((win_T *wp, win_T *first_win));
+int get_tab_number __ARGS((tabpage_T *tp));
 /* vim: set ft=c : */
index 944eccf..4dad54c 100644 (file)
--- a/src/pty.c
+++ b/src/pty.c
  * It has been modified to work better with Vim.
  * The parts that are not used in Vim have been deleted.
  * See the "screen" sources for the complete stuff.
+ *
+ * This specific version is distibuted under the Vim license (attribution by
+ * Juergen Weigert), the GPL applies to the original version, see the
+ * copyright notice below.
  */
 
 /* Copyright (c) 1993
 static void initmaster __ARGS((int));
 
 /*
- *  Open all ptys with O_NOCTTY, just to be on the safe side
- *  (RISCos mips breaks otherwise)
+ *  Open all ptys with O_NOCTTY, just to be on the safe side.
  */
 #ifndef O_NOCTTY
 # define O_NOCTTY 0
@@ -209,8 +212,8 @@ OpenPTY(ttyn)
 #ifdef _SEQUENT_
     fvhangup(s);
 #endif
-    strncpy(PtyName, m, sizeof(PtyName));
-    strncpy(TtyName, s, sizeof(TtyName));
+    vim_strncpy((char_u *)PtyName, (char_u *)m, sizeof(PtyName) - 1);
+    vim_strncpy((char_u *)TtyName, (char_u *)s, sizeof(TtyName) - 1);
     initmaster(f);
     *ttyn = TtyName;
     return f;
@@ -301,7 +304,7 @@ OpenPTY(ttyn)
        return -1;
     }
     signal(SIGCHLD, sigcld);
-    strncpy(TtyName, m, sizeof(TtyName));
+    vim_strncpy((char_u *)TtyName, (char_u *)m, sizeof(TtyName) - 1);
     initmaster(f);
     *ttyn = TtyName;
     return f;
@@ -326,7 +329,7 @@ OpenPTY(ttyn)
     /* a dumb looking loop replaced by mycrofts code: */
     if ((f = open("/dev/ptc", O_RDWR | O_NOCTTY | O_EXTRA)) < 0)
        return -1;
-    strncpy(TtyName, ttyname(f), sizeof(TtyName));
+    vim_strncpy((char_u *)TtyName, (char_u *)ttyname(f), sizeof(TtyName) - 1);
     if (geteuid() != ROOT_UID && mch_access(TtyName, R_OK | W_OK))
     {
        close(f);
index c67397a..ebb0282 100644 (file)
@@ -126,12 +126,14 @@ static int        is_qf_win __ARGS((win_T *win, qf_info_T *qi));
 static win_T   *qf_find_win __ARGS((qf_info_T *qi));
 static buf_T   *qf_find_buf __ARGS((qf_info_T *qi));
 static void    qf_update_buffer __ARGS((qf_info_T *qi));
+static void    qf_set_title __ARGS((qf_info_T *qi));
 static void    qf_fill_buffer __ARGS((qf_info_T *qi));
 #endif
 static char_u  *get_mef_name __ARGS((void));
-static buf_T   *load_dummy_buffer __ARGS((char_u *fname));
-static void    wipe_dummy_buffer __ARGS((buf_T *buf));
-static void    unload_dummy_buffer __ARGS((buf_T *buf));
+static void    restore_start_dir __ARGS((char_u *dirname_start));
+static buf_T   *load_dummy_buffer __ARGS((char_u *fname, char_u *dirname_start, char_u *resulting_dir));
+static void    wipe_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
+static void    unload_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
 static qf_info_T *ll_get_or_alloc_list __ARGS((win_T *));
 
 /* Quickfix window check helper macro */
@@ -245,7 +247,7 @@ qf_init_ext(qi, efile, buf, tv, errorformat, newlist, lnumfirst, lnumlast,
                        {'t', "."},
                        {'m', ".\\+"},
                        {'r', ".*"},
-                       {'p', "[- .]*"},
+                       {'p', "[-       .]*"},
                        {'v', "\\d\\+"},
                        {'s', ".\\+"}
                    };
@@ -561,6 +563,10 @@ qf_init_ext(qi, efile, buf, tv, errorformat, newlist, lnumfirst, lnumlast,
            break;
 
        IObuff[CMDBUFFSIZE - 2] = NUL;  /* for very long lines */
+#ifdef FEAT_MBYTE
+       remove_bom(IObuff);
+#endif
+
        if ((efmp = vim_strrchr(IObuff, '\n')) != NULL)
            *efmp = NUL;
 #ifdef USE_CRNL
@@ -671,11 +677,23 @@ restofline:
                }
                if ((i = (int)fmt_ptr->addr[7]) > 0)            /* %p */
                {
+                   char_u      *match_ptr;
+
                    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
                        continue;
-                   col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
-                   if (*((char_u *)regmatch.startp[i]) != TAB)
-                       use_viscol = TRUE;
+                   col = 0;
+                   for (match_ptr = regmatch.startp[i];
+                                  match_ptr != regmatch.endp[i]; ++match_ptr)
+                   {
+                       ++col;
+                       if (*match_ptr == TAB)
+                       {
+                           col += 7;
+                           col -= col % 8;
+                       }
+                   }
+                   ++col;
+                   use_viscol = TRUE;
                }
                if ((i = (int)fmt_ptr->addr[8]) > 0)            /* %v */
                {
@@ -845,7 +863,7 @@ qf_init_ok:
     for (fmt_ptr = fmt_first; fmt_ptr != NULL; fmt_ptr = fmt_first)
     {
        fmt_first = fmt_ptr->next;
-       vim_free(fmt_ptr->prog);
+       vim_regfree(fmt_ptr->prog);
        vim_free(fmt_ptr);
     }
     qf_clean_dir_stack(&dir_stack);
@@ -894,8 +912,7 @@ qf_new_list(qi, qf_title)
     }
     else
        qi->qf_curlist = qi->qf_listcount++;
-    qi->qf_lists[qi->qf_curlist].qf_index = 0;
-    qi->qf_lists[qi->qf_curlist].qf_count = 0;
+    vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
     if (qf_title != NULL)
     {
        char_u *p = alloc((int)STRLEN(qf_title) + 2);
@@ -904,8 +921,6 @@ qf_new_list(qi, qf_title)
        if (p != NULL)
            sprintf((char *)p, ":%s", (char *)qf_title);
     }
-    else
-       qi->qf_lists[qi->qf_curlist].qf_title = NULL;
 }
 
 /*
@@ -1164,8 +1179,11 @@ copy_loclist(from, to)
 
        /* When no valid entries are present in the list, qf_ptr points to
         * the first item in the list */
-       if (to_qfl->qf_nonevalid == TRUE)
+       if (to_qfl->qf_nonevalid)
+       {
            to_qfl->qf_ptr = to_qfl->qf_start;
+           to_qfl->qf_index = 1;
+       }
     }
 
     to->w_llist->qf_curlist = qi->qf_curlist;  /* current list */
@@ -1182,21 +1200,17 @@ qf_get_fnum(directory, fname)
     if (fname == NULL || *fname == NUL)                /* no file name */
        return 0;
     {
-#ifdef RISCOS
-       /* Name is reported as `main.c', but file is `c.main' */
-       return ro_buflist_add(fname);
-#else
        char_u      *ptr;
        int         fnum;
 
-# ifdef VMS
+#ifdef VMS
        vms_remove_version(fname);
-# endif
-# ifdef BACKSLASH_IN_FILENAME
+#endif
+#ifdef BACKSLASH_IN_FILENAME
        if (directory != NULL)
            slash_adjust(directory);
        slash_adjust(fname);
-# endif
+#endif
        if (directory != NULL && !vim_isAbsName(fname)
                && (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
        {
@@ -1221,7 +1235,6 @@ qf_get_fnum(directory, fname)
            return fnum;
        }
        return buflist_add(fname, 0);
-#endif
     }
 }
 
@@ -1603,6 +1616,8 @@ qf_jump(qi, dir, errornr, forceit)
      */
     if (bt_quickfix(curbuf) && !opened_window)
     {
+       win_T *usable_win_ptr = NULL;
+
        /*
         * If there is no file specified, we don't know where to go.
         * But do advance, otherwise ":cn" gets stuck.
@@ -1610,14 +1625,32 @@ qf_jump(qi, dir, errornr, forceit)
        if (qf_ptr->qf_fnum == 0)
            goto theend;
 
-       /* Locate a window showing a normal buffer */
        usable_win = 0;
-       FOR_ALL_WINDOWS(win)
-           if (win->w_buffer->b_p_bt[0] == NUL)
-           {
-               usable_win = 1;
-               break;
-           }
+
+       ll_ref = curwin->w_llist_ref;
+       if (ll_ref != NULL)
+       {
+           /* Find a window using the same location list that is not a
+            * quickfix window. */
+           FOR_ALL_WINDOWS(usable_win_ptr)
+               if (usable_win_ptr->w_llist == ll_ref
+                       && usable_win_ptr->w_buffer->b_p_bt[0] != 'q')
+               {
+                   usable_win = 1;
+                   break;
+               }
+       }
+
+       if (!usable_win)
+       {
+           /* Locate a window showing a normal buffer */
+           FOR_ALL_WINDOWS(win)
+               if (win->w_buffer->b_p_bt[0] == NUL)
+               {
+                   usable_win = 1;
+                   break;
+               }
+       }
 
        /*
         * If no usable window is found and 'switchbuf' contains "usetab"
@@ -1646,8 +1679,6 @@ win_found:
         */
        if (((firstwin == lastwin) && bt_quickfix(curbuf)) || !usable_win)
        {
-           ll_ref = curwin->w_llist_ref;
-
            flags = WSP_ABOVE;
            if (ll_ref != NULL)
                flags |= WSP_NEWLOC;
@@ -1656,9 +1687,7 @@ win_found:
            opened_window = TRUE;       /* close it when fail */
            p_swb = empty_option;       /* don't split again */
            swb_flags = 0;
-# ifdef FEAT_SCROLLBIND
-           curwin->w_p_scb = FALSE;
-# endif
+           RESET_BINDING(curwin);
            if (ll_ref != NULL)
            {
                /* The new window should use the location list from the
@@ -1672,12 +1701,7 @@ win_found:
            if (curwin->w_llist_ref != NULL)
            {
                /* In a location window */
-               ll_ref = curwin->w_llist_ref;
-
-               /* Find the window with the same location list */
-               FOR_ALL_WINDOWS(win)
-                   if (win->w_llist == ll_ref)
-                       break;
+               win = usable_win_ptr;
                if (win == NULL)
                {
                    /* Find the window showing the selected file */
@@ -1847,8 +1871,10 @@ win_found:
 #endif
        if (print_message)
        {
-           /* Update the screen before showing the message */
-           update_topline_redraw();
+           /* Update the screen before showing the message, unless the screen
+            * scrolled up. */
+           if (!msg_scrolled)
+               update_topline_redraw();
            sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
                    qi->qf_lists[qi->qf_curlist].qf_count,
                    qf_ptr->qf_cleared ? _(" (line deleted)") : "",
@@ -2075,7 +2101,7 @@ qf_age(eap)
            if (qi->qf_curlist == 0)
            {
                EMSG(_("E380: At bottom of quickfix stack"));
-               return;
+               break;
            }
            --qi->qf_curlist;
        }
@@ -2084,13 +2110,12 @@ qf_age(eap)
            if (qi->qf_curlist >= qi->qf_listcount - 1)
            {
                EMSG(_("E381: At top of quickfix stack"));
-               return;
+               break;
            }
            ++qi->qf_curlist;
        }
     }
     qf_msg(qi);
-
 }
 
     static void
@@ -2114,17 +2139,28 @@ qf_free(qi, idx)
     int                idx;
 {
     qfline_T   *qfp;
+    int                stop = FALSE;
 
     while (qi->qf_lists[idx].qf_count)
     {
        qfp = qi->qf_lists[idx].qf_start->qf_next;
-       vim_free(qi->qf_lists[idx].qf_start->qf_text);
-       vim_free(qi->qf_lists[idx].qf_start->qf_pattern);
-       vim_free(qi->qf_lists[idx].qf_start);
+       if (qi->qf_lists[idx].qf_title != NULL && !stop)
+       {
+           vim_free(qi->qf_lists[idx].qf_start->qf_text);
+           stop = (qi->qf_lists[idx].qf_start == qfp);
+           vim_free(qi->qf_lists[idx].qf_start->qf_pattern);
+           vim_free(qi->qf_lists[idx].qf_start);
+           if (stop)
+               /* Somehow qf_count may have an incorrect value, set it to 1
+                * to avoid crashing when it's wrong.
+                * TODO: Avoid qf_count being incorrect. */
+               qi->qf_lists[idx].qf_count = 1;
+       }
        qi->qf_lists[idx].qf_start = qfp;
        --qi->qf_lists[idx].qf_count;
     }
     vim_free(qi->qf_lists[idx].qf_title);
+    qi->qf_lists[idx].qf_title = NULL;
 }
 
 /*
@@ -2244,6 +2280,7 @@ ex_cwindow(eap)
      * it if we have errors; otherwise, leave it closed.
      */
     if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
+           || qi->qf_lists[qi->qf_curlist].qf_count == 0
            || qi->qf_curlist >= qi->qf_listcount)
     {
        if (win != NULL)
@@ -2328,14 +2365,14 @@ ex_copen(eap)
        /* The current window becomes the previous window afterwards. */
        win = curwin;
 
-       if (eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
-           /* Create the new window at the very bottom. */
+       if ((eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
+               && cmdmod.split == 0)
+           /* Create the new window at the very bottom, except when
+            * :belowright or :aboveleft is used. */
            win_goto(lastwin);
        if (win_split(height, WSP_BELOW | WSP_NEWLOC) == FAIL)
            return;             /* not enough room for window */
-#ifdef FEAT_SCROLLBIND
-       curwin->w_p_scb = FALSE;
-#endif
+       RESET_BINDING(curwin);
 
        if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
        {
@@ -2362,6 +2399,7 @@ ex_copen(eap)
            set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
                                                                   OPT_LOCAL);
            set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
+           RESET_BINDING(curwin);
 #ifdef FEAT_DIFF
            curwin->w_p_diff = FALSE;
 #endif
@@ -2390,8 +2428,7 @@ ex_copen(eap)
     qf_fill_buffer(qi);
 
     if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
-       set_internal_string_var((char_u *)"w:quickfix_title",
-                                      qi->qf_lists[qi->qf_curlist].qf_title);
+       qf_set_title(qi);
 
     curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
     curwin->w_cursor.col = 0;
@@ -2528,6 +2565,8 @@ qf_update_buffer(qi)
     qf_info_T  *qi;
 {
     buf_T      *buf;
+    win_T      *win;
+    win_T      *curwin_save;
     aco_save_T aco;
 
     /* Check if a buffer for the quickfix list exists.  Update it. */
@@ -2539,6 +2578,16 @@ qf_update_buffer(qi)
 
        qf_fill_buffer(qi);
 
+       if (qi->qf_lists[qi->qf_curlist].qf_title != NULL
+           && (win = qf_find_win(qi)) != NULL)
+       {
+           curwin_save = curwin;
+           curwin = win;
+           qf_set_title(qi);
+           curwin = curwin_save;
+
+       }
+
        /* restore curwin/curbuf and a few other things */
        aucmd_restbuf(&aco);
 
@@ -2546,6 +2595,14 @@ qf_update_buffer(qi)
     }
 }
 
+    static void
+qf_set_title(qi)
+    qf_info_T  *qi;
+{
+    set_internal_string_var((char_u *)"w:quickfix_title",
+                                   qi->qf_lists[qi->qf_curlist].qf_title);
+}
+
 /*
  * Fill current buffer with quickfix errors, replacing any previous contents.
  * curbuf must be the quickfix buffer!
@@ -2657,7 +2714,7 @@ qf_fill_buffer(qi)
 bt_quickfix(buf)
     buf_T      *buf;
 {
-    return (buf->b_p_bt[0] == 'q');
+    return buf != NULL && buf->b_p_bt[0] == 'q';
 }
 
 /*
@@ -2668,8 +2725,8 @@ bt_quickfix(buf)
 bt_nofile(buf)
     buf_T      *buf;
 {
-    return (buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
-           || buf->b_p_bt[0] == 'a';
+    return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
+           || buf->b_p_bt[0] == 'a');
 }
 
 /*
@@ -2679,7 +2736,7 @@ bt_nofile(buf)
 bt_dontwrite(buf)
     buf_T      *buf;
 {
-    return (buf->b_p_bt[0] == 'n');
+    return buf != NULL && buf->b_p_bt[0] == 'n';
 }
 
     int
@@ -2744,6 +2801,13 @@ ex_make(eap)
 #ifdef FEAT_AUTOCMD
     char_u     *au_name = NULL;
 
+    /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
+    if (grep_internal(eap->cmdidx))
+    {
+       ex_vimgrep(eap);
+       return;
+    }
+
     switch (eap->cmdidx)
     {
        case CMD_make:      au_name = (char_u *)"make"; break;
@@ -2765,13 +2829,6 @@ ex_make(eap)
     }
 #endif
 
-    /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
-    if (grep_internal(eap->cmdidx))
-    {
-       ex_vimgrep(eap);
-       return;
-    }
-
     if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
        || eap->cmdidx == CMD_lgrepadd)
        wp = curwin;
@@ -2819,17 +2876,21 @@ ex_make(eap)
                                           (eap->cmdidx != CMD_grepadd
                                            && eap->cmdidx != CMD_lgrepadd),
                                           *eap->cmdlinep);
+    if (wp != NULL)
+       qi = GET_LOC_LIST(wp);
 #ifdef FEAT_AUTOCMD
     if (au_name != NULL)
+    {
        apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
                                               curbuf->b_fname, TRUE, curbuf);
+       if (qi->qf_curlist < qi->qf_listcount)
+           res = qi->qf_lists[qi->qf_curlist].qf_count;
+       else
+           res = 0;
+    }
 #endif
     if (res > 0 && !eap->forceit)
-    {
-       if (wp != NULL)
-           qi = GET_LOC_LIST(wp);
        qf_jump(qi, 0, 0, FALSE);               /* display first error */
-    }
 
     mch_remove(fname);
     vim_free(fname);
@@ -2974,11 +3035,28 @@ ex_cfile(eap)
 {
     win_T      *wp = NULL;
     qf_info_T  *qi = &ql_info;
+#ifdef FEAT_AUTOCMD
+    char_u     *au_name = NULL;
+#endif
 
     if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
-       || eap->cmdidx == CMD_laddfile)
+                                              || eap->cmdidx == CMD_laddfile)
        wp = curwin;
 
+#ifdef FEAT_AUTOCMD
+    switch (eap->cmdidx)
+    {
+       case CMD_cfile:     au_name = (char_u *)"cfile"; break;
+       case CMD_cgetfile:  au_name = (char_u *)"cgetfile"; break;
+       case CMD_caddfile:  au_name = (char_u *)"caddfile"; break;
+       case CMD_lfile:     au_name = (char_u *)"lfile"; break;
+       case CMD_lgetfile:  au_name = (char_u *)"lgetfile"; break;
+       case CMD_laddfile:  au_name = (char_u *)"laddfile"; break;
+       default: break;
+    }
+    if (au_name != NULL)
+       apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, NULL, FALSE, curbuf);
+#endif
 #ifdef FEAT_BROWSE
     if (cmdmod.browse)
     {
@@ -3010,10 +3088,22 @@ ex_cfile(eap)
                                  && (eap->cmdidx == CMD_cfile
                                             || eap->cmdidx == CMD_lfile))
     {
+#ifdef FEAT_AUTOCMD
+       if (au_name != NULL)
+           apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
+#endif
        if (wp != NULL)
            qi = GET_LOC_LIST(wp);
        qf_jump(qi, 0, 0, eap->forceit);        /* display first error */
     }
+
+    else
+    {
+#ifdef FEAT_AUTOCMD
+       if (au_name != NULL)
+           apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
+#endif
+    }
 }
 
 /*
@@ -3034,6 +3124,9 @@ ex_vimgrep(eap)
     char_u     *p;
     int                fi;
     qf_info_T  *qi = &ql_info;
+#ifdef FEAT_AUTOCMD
+    qfline_T   *cur_qf_start;
+#endif
     qfline_T   *prevp = NULL;
     long       lnum;
     buf_T      *buf;
@@ -3051,18 +3144,22 @@ ex_vimgrep(eap)
     int                flags = 0;
     colnr_T    col;
     long       tomatch;
-    char_u     dirname_start[MAXPATHL];
-    char_u     dirname_now[MAXPATHL];
+    char_u     *dirname_start = NULL;
+    char_u     *dirname_now = NULL;
     char_u     *target_dir = NULL;
 #ifdef FEAT_AUTOCMD
     char_u     *au_name =  NULL;
 
     switch (eap->cmdidx)
     {
-       case CMD_vimgrep: au_name = (char_u *)"vimgrep"; break;
-       case CMD_lvimgrep: au_name = (char_u *)"lvimgrep"; break;
-       case CMD_vimgrepadd: au_name = (char_u *)"vimgrepadd"; break;
+       case CMD_vimgrep:     au_name = (char_u *)"vimgrep"; break;
+       case CMD_lvimgrep:    au_name = (char_u *)"lvimgrep"; break;
+       case CMD_vimgrepadd:  au_name = (char_u *)"vimgrepadd"; break;
        case CMD_lvimgrepadd: au_name = (char_u *)"lvimgrepadd"; break;
+       case CMD_grep:        au_name = (char_u *)"grep"; break;
+       case CMD_lgrep:       au_name = (char_u *)"lgrep"; break;
+       case CMD_grepadd:     au_name = (char_u *)"grepadd"; break;
+       case CMD_lgrepadd:    au_name = (char_u *)"lgrepadd"; break;
        default: break;
     }
     if (au_name != NULL)
@@ -3097,7 +3194,20 @@ ex_vimgrep(eap)
        EMSG(_(e_invalpat));
        goto theend;
     }
-    regmatch.regprog = vim_regcomp(s, RE_MAGIC);
+
+    if (s != NULL && *s == NUL)
+    {
+       /* Pattern is empty, use last search pattern. */
+       if (last_search_pat() == NULL)
+       {
+           EMSG(_(e_noprevre));
+           goto theend;
+       }
+       regmatch.regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
+    }
+    else
+       regmatch.regprog = vim_regcomp(s, RE_MAGIC);
+
     if (regmatch.regprog == NULL)
        goto theend;
     regmatch.rmm_ic = p_ic;
@@ -3122,7 +3232,7 @@ ex_vimgrep(eap)
            ;
 
     /* parse the list of arguments */
-    if (get_arglist_exp(p, &fcount, &fnames) == FAIL)
+    if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
        goto theend;
     if (fcount == 0)
     {
@@ -3130,10 +3240,21 @@ ex_vimgrep(eap)
        goto theend;
     }
 
+    dirname_start = alloc(MAXPATHL);
+    dirname_now = alloc(MAXPATHL);
+    if (dirname_start == NULL || dirname_now == NULL)
+       goto theend;
+
     /* Remember the current directory, because a BufRead autocommand that does
      * ":lcd %:p:h" changes the meaning of short path names. */
     mch_dirname(dirname_start, MAXPATHL);
 
+#ifdef FEAT_AUTOCMD
+     /* Remember the value of qf_start, so that we can check for autocommands
+      * changing the current quickfix list. */
+    cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
+#endif
+
     seconds = (time_t)0;
     for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
     {
@@ -3178,19 +3299,7 @@ ex_vimgrep(eap)
 
            /* Load file into a buffer, so that 'fileencoding' is detected,
             * autocommands applied, etc. */
-           buf = load_dummy_buffer(fname);
-
-           /* When autocommands changed directory: go back.  We assume it was
-            * ":lcd %:p:h". */
-           mch_dirname(dirname_now, MAXPATHL);
-           if (STRCMP(dirname_start, dirname_now) != 0)
-           {
-               exarg_T ea;
-
-               ea.arg = dirname_start;
-               ea.cmdidx = CMD_lcd;
-               ex_cd(&ea);
-           }
+           buf = load_dummy_buffer(fname, dirname_start, dirname_now);
 
            p_mls = save_mls;
 #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
@@ -3201,6 +3310,28 @@ ex_vimgrep(eap)
            /* Use existing, loaded buffer. */
            using_dummy = FALSE;
 
+#ifdef FEAT_AUTOCMD
+       if (cur_qf_start != qi->qf_lists[qi->qf_curlist].qf_start)
+       {
+           int idx;
+
+           /* Autocommands changed the quickfix list.  Find the one we were
+            * using and restore it. */
+           for (idx = 0; idx < LISTCOUNT; ++idx)
+               if (cur_qf_start == qi->qf_lists[idx].qf_start)
+               {
+                   qi->qf_curlist = idx;
+                   break;
+               }
+           if (idx == LISTCOUNT)
+           {
+               /* List cannot be found, create a new one. */
+               qf_new_list(qi, *eap->cmdlinep);
+               cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
+           }
+       }
+#endif
+
        if (buf == NULL)
        {
            if (!got_int)
@@ -3252,6 +3383,9 @@ ex_vimgrep(eap)
                if (got_int)
                    break;
            }
+#ifdef FEAT_AUTOCMD
+           cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
+#endif
 
            if (using_dummy)
            {
@@ -3261,7 +3395,7 @@ ex_vimgrep(eap)
                {
                    /* Never keep a dummy buffer if there is another buffer
                     * with the same name. */
-                   wipe_dummy_buffer(buf);
+                   wipe_dummy_buffer(buf, dirname_start);
                    buf = NULL;
                }
                else if (!cmdmod.hide
@@ -3277,12 +3411,12 @@ ex_vimgrep(eap)
                     * many swap files. */
                    if (!found_match)
                    {
-                       wipe_dummy_buffer(buf);
+                       wipe_dummy_buffer(buf, dirname_start);
                        buf = NULL;
                    }
                    else if (buf != first_match_buf || (flags & VGR_NOJUMP))
                    {
-                       unload_dummy_buffer(buf);
+                       unload_dummy_buffer(buf, dirname_start);
                        buf = NULL;
                    }
                }
@@ -3366,8 +3500,10 @@ ex_vimgrep(eap)
     }
 
 theend:
+    vim_free(dirname_now);
+    vim_free(dirname_start);
     vim_free(target_dir);
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 }
 
 /*
@@ -3426,15 +3562,52 @@ skip_vimgrep_pat(p, s, flags)
 }
 
 /*
- * Load file "fname" into a dummy buffer and return the buffer pointer.
+ * Restore current working directory to "dirname_start" if they differ, taking
+ * into account whether it is set locally or globally.
+ */
+    static void
+restore_start_dir(dirname_start)
+    char_u     *dirname_start;
+{
+    char_u *dirname_now = alloc(MAXPATHL);
+
+    if (NULL != dirname_now)
+    {
+       mch_dirname(dirname_now, MAXPATHL);
+       if (STRCMP(dirname_start, dirname_now) != 0)
+       {
+           /* If the directory has changed, change it back by building up an
+            * appropriate ex command and executing it. */
+           exarg_T ea;
+
+           ea.arg = dirname_start;
+           ea.cmdidx = (curwin->w_localdir == NULL) ? CMD_cd : CMD_lcd;
+           ex_cd(&ea);
+       }
+       vim_free(dirname_now);
+    }
+}
+
+/*
+ * Load file "fname" into a dummy buffer and return the buffer pointer,
+ * placing the directory resulting from the buffer load into the
+ * "resulting_dir" pointer. "resulting_dir" must be allocated by the caller
+ * prior to calling this function. Restores directory to "dirname_start" prior
+ * to returning, if autocmds or the 'autochdir' option have changed it.
+ *
+ * If creating the dummy buffer does not fail, must call unload_dummy_buffer()
+ * or wipe_dummy_buffer() later!
+ *
  * Returns NULL if it fails.
- * Must call unload_dummy_buffer() or wipe_dummy_buffer() later!
  */
     static buf_T *
-load_dummy_buffer(fname)
+load_dummy_buffer(fname, dirname_start, resulting_dir)
     char_u     *fname;
+    char_u     *dirname_start;  /* in: old directory */
+    char_u     *resulting_dir;  /* out: new directory */
 {
     buf_T      *newbuf;
+    buf_T      *newbuf_to_wipe = NULL;
     int                failed = TRUE;
     aco_save_T aco;
 
@@ -3471,33 +3644,48 @@ load_dummy_buffer(fname)
            failed = FALSE;
            if (curbuf != newbuf)
            {
-               /* Bloody autocommands changed the buffer! */
-               if (buf_valid(newbuf))
-                   wipe_buffer(newbuf, FALSE);
+               /* Bloody autocommands changed the buffer!  Can happen when
+                * using netrw and editing a remote file.  Use the current
+                * buffer instead, delete the dummy one after restoring the
+                * window stuff. */
+               newbuf_to_wipe = newbuf;
                newbuf = curbuf;
            }
        }
 
        /* restore curwin/curbuf and a few other things */
        aucmd_restbuf(&aco);
+       if (newbuf_to_wipe != NULL && buf_valid(newbuf_to_wipe))
+           wipe_buffer(newbuf_to_wipe, FALSE);
     }
 
+    /*
+     * When autocommands/'autochdir' option changed directory: go back.
+     * Let the caller know what the resulting dir was first, in case it is
+     * important.
+     */
+    mch_dirname(resulting_dir, MAXPATHL);
+    restore_start_dir(dirname_start);
+
     if (!buf_valid(newbuf))
        return NULL;
     if (failed)
     {
-       wipe_dummy_buffer(newbuf);
+       wipe_dummy_buffer(newbuf, dirname_start);
        return NULL;
     }
     return newbuf;
 }
 
 /*
- * Wipe out the dummy buffer that load_dummy_buffer() created.
+ * Wipe out the dummy buffer that load_dummy_buffer() created. Restores
+ * directory to "dirname_start" prior to returning, if autocmds or the
+ * 'autochdir' option have changed it.
  */
     static void
-wipe_dummy_buffer(buf)
+wipe_dummy_buffer(buf, dirname_start)
     buf_T      *buf;
+    char_u     *dirname_start;
 {
     if (curbuf != buf)         /* safety check */
     {
@@ -3517,18 +3705,28 @@ wipe_dummy_buffer(buf)
         * new aborting error, interrupt, or uncaught exception. */
        leave_cleanup(&cs);
 #endif
+       /* When autocommands/'autochdir' option changed directory: go back. */
+       restore_start_dir(dirname_start);
     }
 }
 
 /*
- * Unload the dummy buffer that load_dummy_buffer() created.
+ * Unload the dummy buffer that load_dummy_buffer() created. Restores
+ * directory to "dirname_start" prior to returning, if autocmds or the
+ * 'autochdir' option have changed it.
  */
     static void
-unload_dummy_buffer(buf)
+unload_dummy_buffer(buf, dirname_start)
     buf_T      *buf;
+    char_u     *dirname_start;
 {
     if (curbuf != buf)         /* safety check */
-       close_buffer(NULL, buf, DOBUF_UNLOAD);
+    {
+       close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
+
+       /* When autocommands/'autochdir' option changed directory: go back. */
+       restore_start_dir(dirname_start);
+    }
 }
 
 #if defined(FEAT_EVAL) || defined(PROTO)
@@ -3697,7 +3895,7 @@ set_errorlist(wp, list, action, title)
     }
 
     if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
-       /* empty list or no valid entry */
+       /* no valid entry */
        qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
     else
        qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
@@ -3841,16 +4039,35 @@ ex_helpgrep(eap)
     qf_info_T  *qi = &ql_info;
     int                new_qi = FALSE;
     win_T      *wp;
-
-    /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
-    save_cpo = p_cpo;
-    p_cpo = empty_option;
+#ifdef FEAT_AUTOCMD
+    char_u     *au_name =  NULL;
+#endif
 
 #ifdef FEAT_MULTI_LANG
     /* Check for a specified language */
     lang = check_help_lang(eap->arg);
 #endif
 
+#ifdef FEAT_AUTOCMD
+    switch (eap->cmdidx)
+    {
+       case CMD_helpgrep:  au_name = (char_u *)"helpgrep"; break;
+       case CMD_lhelpgrep: au_name = (char_u *)"lhelpgrep"; break;
+       default: break;
+    }
+    if (au_name != NULL)
+    {
+       apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
+                                              curbuf->b_fname, TRUE, curbuf);
+       if (did_throw || force_abort)
+           return;
+    }
+#endif
+
+    /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
+    save_cpo = p_cpo;
+    p_cpo = empty_option;
+
     if (eap->cmdidx == CMD_lhelpgrep)
     {
        /* Find an existing help window */
@@ -3876,6 +4093,16 @@ ex_helpgrep(eap)
     regmatch.rm_ic = FALSE;
     if (regmatch.regprog != NULL)
     {
+#ifdef FEAT_MBYTE
+       vimconv_T vc;
+
+       /* Help files are in utf-8 or latin1, convert lines when 'encoding'
+        * differs. */
+       vc.vc_type = CONV_NONE;
+       if (!enc_utf8)
+           convert_setup(&vc, (char_u *)"utf-8", p_enc);
+#endif
+
        /* create a new quickfix list */
        qf_new_list(qi, *eap->cmdlinep);
 
@@ -3910,21 +4137,33 @@ ex_helpgrep(eap)
                        lnum = 1;
                        while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int)
                        {
-                           if (vim_regexec(&regmatch, IObuff, (colnr_T)0))
+                           char_u    *line = IObuff;
+#ifdef FEAT_MBYTE
+                           /* Convert a line if 'encoding' is not utf-8 and
+                            * the line contains a non-ASCII character. */
+                           if (vc.vc_type != CONV_NONE
+                                                  && has_non_ascii(IObuff)) {
+                               line = string_convert(&vc, IObuff, NULL);
+                               if (line == NULL)
+                                   line = IObuff;
+                           }
+#endif
+
+                           if (vim_regexec(&regmatch, line, (colnr_T)0))
                            {
-                               int     l = (int)STRLEN(IObuff);
+                               int     l = (int)STRLEN(line);
 
                                /* remove trailing CR, LF, spaces, etc. */
-                               while (l > 0 && IObuff[l - 1] <= ' ')
-                                    IObuff[--l] = NUL;
+                               while (l > 0 && line[l - 1] <= ' ')
+                                    line[--l] = NUL;
 
                                if (qf_add_entry(qi, &prevp,
                                            NULL,       /* dir */
                                            fnames[fi],
                                            0,
-                                           IObuff,
+                                           line,
                                            lnum,
-                                           (int)(regmatch.startp[0] - IObuff)
+                                           (int)(regmatch.startp[0] - line)
                                                                + 1, /* col */
                                            FALSE,      /* vis_col */
                                            NULL,       /* search pattern */
@@ -3934,9 +4173,17 @@ ex_helpgrep(eap)
                                            ) == FAIL)
                                {
                                    got_int = TRUE;
+#ifdef FEAT_MBYTE
+                                   if (line != IObuff)
+                                       vim_free(line);
+#endif
                                    break;
                                }
                            }
+#ifdef FEAT_MBYTE
+                           if (line != IObuff)
+                               vim_free(line);
+#endif
                            ++lnum;
                            line_breakcheck();
                        }
@@ -3946,7 +4193,12 @@ ex_helpgrep(eap)
                FreeWild(fcount, fnames);
            }
        }
-       vim_free(regmatch.regprog);
+
+       vim_regfree(regmatch.regprog);
+#ifdef FEAT_MBYTE
+       if (vc.vc_type != CONV_NONE)
+           convert_setup(&vc, NULL, NULL);
+#endif
 
        qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
        qi->qf_lists[qi->qf_curlist].qf_ptr =
@@ -3964,6 +4216,17 @@ ex_helpgrep(eap)
     qf_update_buffer(qi);
 #endif
 
+#ifdef FEAT_AUTOCMD
+    if (au_name != NULL)
+    {
+       apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+                                              curbuf->b_fname, TRUE, curbuf);
+       if (!new_qi && qi != &ql_info && qf_find_buf(qi) == NULL)
+           /* autocommands made "qi" invalid */
+           return;
+    }
+#endif
+
     /* Jump to first match. */
     if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
        qf_jump(qi, 0, 0, FALSE);
index 480f4cc..06bbb4a 100644 (file)
  * Named character class support added by Walter Briscoe (1998 Jul 01)
  */
 
+/* Uncomment the first if you do not want to see debugging logs or files
+ * related to regular expressions, even when compiling with -DDEBUG.
+ * Uncomment the second to get the regexp debugging. */
+/* #undef DEBUG */
+/* #define DEBUG */
+
 #include "vim.h"
 
-#undef DEBUG
+#ifdef DEBUG
+/* show/save debugging data when BT engine is used */
+# define BT_REGEXP_DUMP
+/* save the debugging data to a file instead of displaying it */
+# define BT_REGEXP_LOG
+# define BT_REGEXP_DEBUG_LOG
+# define BT_REGEXP_DEBUG_LOG_NAME      "bt_regexp_debug.log"
+#endif
 
 /*
  * The "internal use only" fields in regexp.h are present to pass info from
@@ -326,9 +339,10 @@ toggle_Magic(x)
 /* Used for an error (down from) vim_regcomp(): give the error message, set
  * rc_did_emsg and return NULL */
 #define EMSG_RET_NULL(m) return (EMSG(m), rc_did_emsg = TRUE, (void *)NULL)
-#define EMSG_M_RET_NULL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, (void *)NULL)
 #define EMSG_RET_FAIL(m) return (EMSG(m), rc_did_emsg = TRUE, FAIL)
-#define EMSG_ONE_RET_NULL EMSG_M_RET_NULL(_("E369: invalid item in %s%%[]"), reg_magic == MAGIC_ALL)
+#define EMSG2_RET_NULL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, (void *)NULL)
+#define EMSG2_RET_FAIL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, FAIL)
+#define EMSG_ONE_RET_NULL EMSG2_RET_NULL(_("E369: invalid item in %s%%[]"), reg_magic == MAGIC_ALL)
 
 #define MAX_LIMIT      (32767L << 16L)
 
@@ -336,11 +350,23 @@ static int re_multi_type __ARGS((int));
 static int cstrncmp __ARGS((char_u *s1, char_u *s2, int *n));
 static char_u *cstrchr __ARGS((char_u *, int));
 
+#ifdef BT_REGEXP_DUMP
+static void    regdump __ARGS((char_u *, bt_regprog_T *));
+#endif
 #ifdef DEBUG
-static void    regdump __ARGS((char_u *, regprog_T *));
 static char_u  *regprop __ARGS((char_u *));
 #endif
 
+static char_u e_missingbracket[] = N_("E769: Missing ] after %s[");
+static char_u e_unmatchedpp[] = N_("E53: Unmatched %s%%(");
+static char_u e_unmatchedp[] = N_("E54: Unmatched %s(");
+static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)");
+#ifdef FEAT_SYN_HL
+static char_u e_z_not_allowed[] = N_("E66: \\z( not allowed here");
+static char_u e_z1_not_allowed[] = N_("E67: \\z1 et al. not allowed here");
+#endif
+static char_u e_missing_sb[] = N_("E69: Missing ] after %s%%[");
+static char_u e_empty_sb[]  = N_("E70: Empty %s%%[]");
 #define NOT_MULTI      0
 #define MULTI_ONE      1
 #define MULTI_MULT     2
@@ -630,7 +656,13 @@ static char_u META_flags[] = {
 };
 #endif
 
-static int     curchr;
+static int     curchr;         /* currently parsed character */
+/* Previous character.  Note: prevchr is sometimes -1 when we are not at the
+ * start, eg in /[ ^I]^ the pattern was never found even if it existed,
+ * because ^ was taken to be magic -- webb */
+static int     prevchr;
+static int     prevprevchr;    /* previous-previous character */
+static int     nextchr;        /* used for ungetchr() */
 
 /* arguments for reg() */
 #define REG_NOPAREN    0       /* toplevel reg() */
@@ -638,10 +670,25 @@ static int        curchr;
 #define REG_ZPAREN     2       /* \z(\) */
 #define REG_NPAREN     3       /* \%(\) */
 
+typedef struct
+{
+     char_u    *regparse;
+     int       prevchr_len;
+     int       curchr;
+     int       prevchr;
+     int       prevprevchr;
+     int       nextchr;
+     int       at_start;
+     int       prev_at_start;
+     int       regnpar;
+} parse_state_T;
+
 /*
  * Forward declarations for vim_regcomp()'s friends.
  */
 static void    initchr __ARGS((char_u *));
+static void    save_parse_state __ARGS((parse_state_T *ps));
+static void    restore_parse_state __ARGS((parse_state_T *ps));
 static int     getchr __ARGS((void));
 static void    skipchr_keepstart __ARGS((void));
 static int     peekchr __ARGS((void));
@@ -666,16 +713,24 @@ static char_u     *regnext __ARGS((char_u *));
 static void    regc __ARGS((int b));
 #ifdef FEAT_MBYTE
 static void    regmbc __ARGS((int c));
+# define REGMBC(x) regmbc(x);
+# define CASEMBC(x) case x:
 #else
 # define regmbc(c) regc(c)
+# define REGMBC(x)
+# define CASEMBC(x)
 #endif
 static void    reginsert __ARGS((int, char_u *));
+static void    reginsert_nr __ARGS((int op, long val, char_u *opnd));
 static void    reginsert_limits __ARGS((int, long, long, char_u *));
 static char_u  *re_put_long __ARGS((char_u *pr, long_u val));
 static int     read_limits __ARGS((long *, long *));
 static void    regtail __ARGS((char_u *, char_u *));
 static void    regoptail __ARGS((char_u *, char_u *));
 
+static regengine_T bt_regengine;
+static regengine_T nfa_regengine;
+
 /*
  * Return TRUE if compiled regular expression "prog" can match a line break.
  */
@@ -758,6 +813,7 @@ char *EQUIVAL_CLASS_C[16] = {
 /*
  * Produce the bytes for equivalence class "c".
  * Currently only handles latin1, latin9 and utf-8.
+ * NOTE: When changing this function, also change nfa_emit_equi_class()
  */
     static void
 reg_equi_class(c)
@@ -787,68 +843,295 @@ reg_equi_class(c)
        switch (c)
        {
            case 'A': case '\300': case '\301': case '\302':
+           CASEMBC(0x100) CASEMBC(0x102) CASEMBC(0x104) CASEMBC(0x1cd)
+           CASEMBC(0x1de) CASEMBC(0x1e0) CASEMBC(0x1ea2)
            case '\303': case '\304': case '\305':
                      regmbc('A'); regmbc('\300'); regmbc('\301');
                      regmbc('\302'); regmbc('\303'); regmbc('\304');
                      regmbc('\305');
+                     REGMBC(0x100) REGMBC(0x102) REGMBC(0x104)
+                     REGMBC(0x1cd) REGMBC(0x1de) REGMBC(0x1e0)
+                     REGMBC(0x1ea2)
+                     return;
+           case 'B': CASEMBC(0x1e02) CASEMBC(0x1e06)
+                     regmbc('B'); REGMBC(0x1e02) REGMBC(0x1e06)
                      return;
            case 'C': case '\307':
+           CASEMBC(0x106) CASEMBC(0x108) CASEMBC(0x10a) CASEMBC(0x10c)
                      regmbc('C'); regmbc('\307');
+                     REGMBC(0x106) REGMBC(0x108) REGMBC(0x10a)
+                     REGMBC(0x10c)
+                     return;
+           case 'D': CASEMBC(0x10e) CASEMBC(0x110) CASEMBC(0x1e0a)
+           CASEMBC(0x1e0e) CASEMBC(0x1e10)
+                     regmbc('D'); REGMBC(0x10e) REGMBC(0x110)
+                     REGMBC(0x1e0a) REGMBC(0x1e0e) REGMBC(0x1e10)
                      return;
            case 'E': case '\310': case '\311': case '\312': case '\313':
+           CASEMBC(0x112) CASEMBC(0x114) CASEMBC(0x116) CASEMBC(0x118)
+           CASEMBC(0x11a) CASEMBC(0x1eba) CASEMBC(0x1ebc)
                      regmbc('E'); regmbc('\310'); regmbc('\311');
                      regmbc('\312'); regmbc('\313');
+                     REGMBC(0x112) REGMBC(0x114) REGMBC(0x116)
+                     REGMBC(0x118) REGMBC(0x11a) REGMBC(0x1eba)
+                     REGMBC(0x1ebc)
+                     return;
+           case 'F': CASEMBC(0x1e1e)
+                     regmbc('F'); REGMBC(0x1e1e)
+                     return;
+           case 'G': CASEMBC(0x11c) CASEMBC(0x11e) CASEMBC(0x120)
+           CASEMBC(0x122) CASEMBC(0x1e4) CASEMBC(0x1e6) CASEMBC(0x1f4)
+           CASEMBC(0x1e20)
+                     regmbc('G'); REGMBC(0x11c) REGMBC(0x11e)
+                     REGMBC(0x120) REGMBC(0x122) REGMBC(0x1e4)
+                     REGMBC(0x1e6) REGMBC(0x1f4) REGMBC(0x1e20)
+                     return;
+           case 'H': CASEMBC(0x124) CASEMBC(0x126) CASEMBC(0x1e22)
+           CASEMBC(0x1e26) CASEMBC(0x1e28)
+                     regmbc('H'); REGMBC(0x124) REGMBC(0x126)
+                     REGMBC(0x1e22) REGMBC(0x1e26) REGMBC(0x1e28)
                      return;
            case 'I': case '\314': case '\315': case '\316': case '\317':
+           CASEMBC(0x128) CASEMBC(0x12a) CASEMBC(0x12c) CASEMBC(0x12e)
+           CASEMBC(0x130) CASEMBC(0x1cf) CASEMBC(0x1ec8)
                      regmbc('I'); regmbc('\314'); regmbc('\315');
                      regmbc('\316'); regmbc('\317');
+                     REGMBC(0x128) REGMBC(0x12a) REGMBC(0x12c)
+                     REGMBC(0x12e) REGMBC(0x130) REGMBC(0x1cf)
+                     REGMBC(0x1ec8)
+                     return;
+           case 'J': CASEMBC(0x134)
+                     regmbc('J'); REGMBC(0x134)
+                     return;
+           case 'K': CASEMBC(0x136) CASEMBC(0x1e8) CASEMBC(0x1e30)
+           CASEMBC(0x1e34)
+                     regmbc('K'); REGMBC(0x136) REGMBC(0x1e8)
+                     REGMBC(0x1e30) REGMBC(0x1e34)
+                     return;
+           case 'L': CASEMBC(0x139) CASEMBC(0x13b) CASEMBC(0x13d)
+           CASEMBC(0x13f) CASEMBC(0x141) CASEMBC(0x1e3a)
+                     regmbc('L'); REGMBC(0x139) REGMBC(0x13b)
+                     REGMBC(0x13d) REGMBC(0x13f) REGMBC(0x141)
+                     REGMBC(0x1e3a)
+                     return;
+           case 'M': CASEMBC(0x1e3e) CASEMBC(0x1e40)
+                     regmbc('M'); REGMBC(0x1e3e) REGMBC(0x1e40)
                      return;
            case 'N': case '\321':
+           CASEMBC(0x143) CASEMBC(0x145) CASEMBC(0x147) CASEMBC(0x1e44)
+           CASEMBC(0x1e48)
                      regmbc('N'); regmbc('\321');
+                     REGMBC(0x143) REGMBC(0x145) REGMBC(0x147)
+                     REGMBC(0x1e44) REGMBC(0x1e48)
                      return;
            case 'O': case '\322': case '\323': case '\324': case '\325':
-           case '\326':
+           case '\326': case '\330':
+           CASEMBC(0x14c) CASEMBC(0x14e) CASEMBC(0x150) CASEMBC(0x1a0)
+           CASEMBC(0x1d1) CASEMBC(0x1ea) CASEMBC(0x1ec) CASEMBC(0x1ece)
                      regmbc('O'); regmbc('\322'); regmbc('\323');
                      regmbc('\324'); regmbc('\325'); regmbc('\326');
+                     regmbc('\330');
+                     REGMBC(0x14c) REGMBC(0x14e) REGMBC(0x150)
+                     REGMBC(0x1a0) REGMBC(0x1d1) REGMBC(0x1ea)
+                     REGMBC(0x1ec) REGMBC(0x1ece)
+                     return;
+           case 'P': case 0x1e54: case 0x1e56:
+                     regmbc('P'); REGMBC(0x1e54) REGMBC(0x1e56)
+                     return;
+           case 'R': CASEMBC(0x154) CASEMBC(0x156) CASEMBC(0x158)
+           CASEMBC(0x1e58) CASEMBC(0x1e5e)
+                     regmbc('R'); REGMBC(0x154) REGMBC(0x156) REGMBC(0x158)
+                     REGMBC(0x1e58) REGMBC(0x1e5e)
+                     return;
+           case 'S': CASEMBC(0x15a) CASEMBC(0x15c) CASEMBC(0x15e)
+           CASEMBC(0x160) CASEMBC(0x1e60)
+                     regmbc('S'); REGMBC(0x15a) REGMBC(0x15c)
+                     REGMBC(0x15e) REGMBC(0x160) REGMBC(0x1e60)
+                     return;
+           case 'T': CASEMBC(0x162) CASEMBC(0x164) CASEMBC(0x166)
+           CASEMBC(0x1e6a) CASEMBC(0x1e6e)
+                     regmbc('T'); REGMBC(0x162) REGMBC(0x164)
+                     REGMBC(0x166) REGMBC(0x1e6a) REGMBC(0x1e6e)
                      return;
            case 'U': case '\331': case '\332': case '\333': case '\334':
+           CASEMBC(0x168) CASEMBC(0x16a) CASEMBC(0x16c) CASEMBC(0x16e)
+           CASEMBC(0x170) CASEMBC(0x172) CASEMBC(0x1af) CASEMBC(0x1d3)
+           CASEMBC(0x1ee6)
                      regmbc('U'); regmbc('\331'); regmbc('\332');
                      regmbc('\333'); regmbc('\334');
+                     REGMBC(0x168) REGMBC(0x16a) REGMBC(0x16c)
+                     REGMBC(0x16e) REGMBC(0x170) REGMBC(0x172)
+                     REGMBC(0x1af) REGMBC(0x1d3) REGMBC(0x1ee6)
+                     return;
+           case 'V': CASEMBC(0x1e7c)
+                     regmbc('V'); REGMBC(0x1e7c)
+                     return;
+           case 'W': CASEMBC(0x174) CASEMBC(0x1e80) CASEMBC(0x1e82)
+           CASEMBC(0x1e84) CASEMBC(0x1e86)
+                     regmbc('W'); REGMBC(0x174) REGMBC(0x1e80)
+                     REGMBC(0x1e82) REGMBC(0x1e84) REGMBC(0x1e86)
+                     return;
+           case 'X': CASEMBC(0x1e8a) CASEMBC(0x1e8c)
+                     regmbc('X'); REGMBC(0x1e8a) REGMBC(0x1e8c)
                      return;
            case 'Y': case '\335':
+           CASEMBC(0x176) CASEMBC(0x178) CASEMBC(0x1e8e) CASEMBC(0x1ef2)
+           CASEMBC(0x1ef6) CASEMBC(0x1ef8)
                      regmbc('Y'); regmbc('\335');
+                     REGMBC(0x176) REGMBC(0x178) REGMBC(0x1e8e)
+                     REGMBC(0x1ef2) REGMBC(0x1ef6) REGMBC(0x1ef8)
+                     return;
+           case 'Z': CASEMBC(0x179) CASEMBC(0x17b) CASEMBC(0x17d)
+           CASEMBC(0x1b5) CASEMBC(0x1e90) CASEMBC(0x1e94)
+                     regmbc('Z'); REGMBC(0x179) REGMBC(0x17b)
+                     REGMBC(0x17d) REGMBC(0x1b5) REGMBC(0x1e90)
+                     REGMBC(0x1e94)
                      return;
            case 'a': case '\340': case '\341': case '\342':
            case '\343': case '\344': case '\345':
+           CASEMBC(0x101) CASEMBC(0x103) CASEMBC(0x105) CASEMBC(0x1ce)
+           CASEMBC(0x1df) CASEMBC(0x1e1) CASEMBC(0x1ea3)
                      regmbc('a'); regmbc('\340'); regmbc('\341');
                      regmbc('\342'); regmbc('\343'); regmbc('\344');
                      regmbc('\345');
+                     REGMBC(0x101) REGMBC(0x103) REGMBC(0x105)
+                     REGMBC(0x1ce) REGMBC(0x1df) REGMBC(0x1e1)
+                     REGMBC(0x1ea3)
+                     return;
+           case 'b': CASEMBC(0x1e03) CASEMBC(0x1e07)
+                     regmbc('b'); REGMBC(0x1e03) REGMBC(0x1e07)
                      return;
            case 'c': case '\347':
+           CASEMBC(0x107) CASEMBC(0x109) CASEMBC(0x10b) CASEMBC(0x10d)
                      regmbc('c'); regmbc('\347');
+                     REGMBC(0x107) REGMBC(0x109) REGMBC(0x10b)
+                     REGMBC(0x10d)
+                     return;
+           case 'd': CASEMBC(0x10f) CASEMBC(0x111) CASEMBC(0x1d0b)
+           CASEMBC(0x1e11)
+                     regmbc('d'); REGMBC(0x10f) REGMBC(0x111)
+                     REGMBC(0x1e0b) REGMBC(0x01e0f) REGMBC(0x1e11)
                      return;
            case 'e': case '\350': case '\351': case '\352': case '\353':
+           CASEMBC(0x113) CASEMBC(0x115) CASEMBC(0x117) CASEMBC(0x119)
+           CASEMBC(0x11b) CASEMBC(0x1ebb) CASEMBC(0x1ebd)
                      regmbc('e'); regmbc('\350'); regmbc('\351');
                      regmbc('\352'); regmbc('\353');
+                     REGMBC(0x113) REGMBC(0x115) REGMBC(0x117)
+                     REGMBC(0x119) REGMBC(0x11b) REGMBC(0x1ebb)
+                     REGMBC(0x1ebd)
+                     return;
+           case 'f': CASEMBC(0x1e1f)
+                     regmbc('f'); REGMBC(0x1e1f)
+                     return;
+           case 'g': CASEMBC(0x11d) CASEMBC(0x11f) CASEMBC(0x121)
+           CASEMBC(0x123) CASEMBC(0x1e5) CASEMBC(0x1e7) CASEMBC(0x1f5)
+           CASEMBC(0x1e21)
+                     regmbc('g'); REGMBC(0x11d) REGMBC(0x11f)
+                     REGMBC(0x121) REGMBC(0x123) REGMBC(0x1e5)
+                     REGMBC(0x1e7) REGMBC(0x1f5) REGMBC(0x1e21)
+                     return;
+           case 'h': CASEMBC(0x125) CASEMBC(0x127) CASEMBC(0x1e23)
+           CASEMBC(0x1e27) CASEMBC(0x1e29) CASEMBC(0x1e96)
+                     regmbc('h'); REGMBC(0x125) REGMBC(0x127)
+                     REGMBC(0x1e23) REGMBC(0x1e27) REGMBC(0x1e29)
+                     REGMBC(0x1e96)
                      return;
            case 'i': case '\354': case '\355': case '\356': case '\357':
+           CASEMBC(0x129) CASEMBC(0x12b) CASEMBC(0x12d) CASEMBC(0x12f)
+           CASEMBC(0x1d0) CASEMBC(0x1ec9)
                      regmbc('i'); regmbc('\354'); regmbc('\355');
                      regmbc('\356'); regmbc('\357');
+                     REGMBC(0x129) REGMBC(0x12b) REGMBC(0x12d)
+                     REGMBC(0x12f) REGMBC(0x1d0) REGMBC(0x1ec9)
+                     return;
+           case 'j': CASEMBC(0x135) CASEMBC(0x1f0)
+                     regmbc('j'); REGMBC(0x135) REGMBC(0x1f0)
+                     return;
+           case 'k': CASEMBC(0x137) CASEMBC(0x1e9) CASEMBC(0x1e31)
+           CASEMBC(0x1e35)
+                     regmbc('k'); REGMBC(0x137) REGMBC(0x1e9)
+                     REGMBC(0x1e31) REGMBC(0x1e35)
+                     return;
+           case 'l': CASEMBC(0x13a) CASEMBC(0x13c) CASEMBC(0x13e)
+           CASEMBC(0x140) CASEMBC(0x142) CASEMBC(0x1e3b)
+                     regmbc('l'); REGMBC(0x13a) REGMBC(0x13c)
+                     REGMBC(0x13e) REGMBC(0x140) REGMBC(0x142)
+                     REGMBC(0x1e3b)
+                     return;
+           case 'm': CASEMBC(0x1e3f) CASEMBC(0x1e41)
+                     regmbc('m'); REGMBC(0x1e3f) REGMBC(0x1e41)
                      return;
            case 'n': case '\361':
+           CASEMBC(0x144) CASEMBC(0x146) CASEMBC(0x148) CASEMBC(0x149)
+           CASEMBC(0x1e45) CASEMBC(0x1e49)
                      regmbc('n'); regmbc('\361');
+                     REGMBC(0x144) REGMBC(0x146) REGMBC(0x148)
+                     REGMBC(0x149) REGMBC(0x1e45) REGMBC(0x1e49)
                      return;
            case 'o': case '\362': case '\363': case '\364': case '\365':
-           case '\366':
+           case '\366': case '\370':
+           CASEMBC(0x14d) CASEMBC(0x14f) CASEMBC(0x151) CASEMBC(0x1a1)
+           CASEMBC(0x1d2) CASEMBC(0x1eb) CASEMBC(0x1ed) CASEMBC(0x1ecf)
                      regmbc('o'); regmbc('\362'); regmbc('\363');
                      regmbc('\364'); regmbc('\365'); regmbc('\366');
+                     regmbc('\370');
+                     REGMBC(0x14d) REGMBC(0x14f) REGMBC(0x151)
+                     REGMBC(0x1a1) REGMBC(0x1d2) REGMBC(0x1eb)
+                     REGMBC(0x1ed) REGMBC(0x1ecf)
+                     return;
+           case 'p': CASEMBC(0x1e55) CASEMBC(0x1e57)
+                     regmbc('p'); REGMBC(0x1e55) REGMBC(0x1e57)
+                     return;
+           case 'r': CASEMBC(0x155) CASEMBC(0x157) CASEMBC(0x159)
+           CASEMBC(0x1e59) CASEMBC(0x1e5f)
+                     regmbc('r'); REGMBC(0x155) REGMBC(0x157) REGMBC(0x159)
+                     REGMBC(0x1e59) REGMBC(0x1e5f)
+                     return;
+           case 's': CASEMBC(0x15b) CASEMBC(0x15d) CASEMBC(0x15f)
+           CASEMBC(0x161) CASEMBC(0x1e61)
+                     regmbc('s'); REGMBC(0x15b) REGMBC(0x15d)
+                     REGMBC(0x15f) REGMBC(0x161) REGMBC(0x1e61)
+                     return;
+           case 't': CASEMBC(0x163) CASEMBC(0x165) CASEMBC(0x167)
+           CASEMBC(0x1e6b) CASEMBC(0x1e6f) CASEMBC(0x1e97)
+                     regmbc('t'); REGMBC(0x163) REGMBC(0x165) REGMBC(0x167)
+                     REGMBC(0x1e6b) REGMBC(0x1e6f) REGMBC(0x1e97)
                      return;
            case 'u': case '\371': case '\372': case '\373': case '\374':
+           CASEMBC(0x169) CASEMBC(0x16b) CASEMBC(0x16d) CASEMBC(0x16f)
+           CASEMBC(0x171) CASEMBC(0x173) CASEMBC(0x1b0) CASEMBC(0x1d4)
+           CASEMBC(0x1ee7)
                      regmbc('u'); regmbc('\371'); regmbc('\372');
                      regmbc('\373'); regmbc('\374');
+                     REGMBC(0x169) REGMBC(0x16b) REGMBC(0x16d)
+                     REGMBC(0x16f) REGMBC(0x171) REGMBC(0x173)
+                     REGMBC(0x1b0) REGMBC(0x1d4) REGMBC(0x1ee7)
+                     return;
+           case 'v': CASEMBC(0x1e7d)
+                     regmbc('v'); REGMBC(0x1e7d)
+                     return;
+           case 'w': CASEMBC(0x175) CASEMBC(0x1e81) CASEMBC(0x1e83)
+           CASEMBC(0x1e85) CASEMBC(0x1e87) CASEMBC(0x1e98)
+                     regmbc('w'); REGMBC(0x175) REGMBC(0x1e81)
+                     REGMBC(0x1e83) REGMBC(0x1e85) REGMBC(0x1e87)
+                     REGMBC(0x1e98)
+                     return;
+           case 'x': CASEMBC(0x1e8b) CASEMBC(0x1e8d)
+                     regmbc('x'); REGMBC(0x1e8b) REGMBC(0x1e8d)
                      return;
            case 'y': case '\375': case '\377':
+           CASEMBC(0x177) CASEMBC(0x1e8f) CASEMBC(0x1e99)
+           CASEMBC(0x1ef3) CASEMBC(0x1ef7) CASEMBC(0x1ef9)
                      regmbc('y'); regmbc('\375'); regmbc('\377');
+                     REGMBC(0x177) REGMBC(0x1e8f) REGMBC(0x1e99)
+                     REGMBC(0x1ef3) REGMBC(0x1ef7) REGMBC(0x1ef9)
+                     return;
+           case 'z': CASEMBC(0x17a) CASEMBC(0x17c) CASEMBC(0x17e)
+           CASEMBC(0x1b6) CASEMBC(0x1e91) CASEMBC(0x1e95)
+                     regmbc('z'); REGMBC(0x17a) REGMBC(0x17c)
+                     REGMBC(0x17e) REGMBC(0x1b6) REGMBC(0x1e91)
+                     REGMBC(0x1e95)
                      return;
        }
 #endif
@@ -891,6 +1174,16 @@ get_coll_element(pp)
     return 0;
 }
 
+static void get_cpo_flags __ARGS((void));
+static int reg_cpo_lit; /* 'cpoptions' contains 'l' flag */
+static int reg_cpo_bsl; /* 'cpoptions' contains '\' flag */
+
+    static void
+get_cpo_flags()
+{
+    reg_cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
+    reg_cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
+}
 
 /*
  * Skip over a "[]" range.
@@ -901,15 +1194,10 @@ get_coll_element(pp)
 skip_anyof(p)
     char_u     *p;
 {
-    int                cpo_lit;        /* 'cpoptions' contains 'l' flag */
-    int                cpo_bsl;        /* 'cpoptions' contains '\' flag */
 #ifdef FEAT_MBYTE
     int                l;
 #endif
 
-    cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
-    cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
-
     if (*p == '^')     /* Complement of range. */
        ++p;
     if (*p == ']' || *p == '-')
@@ -928,9 +1216,9 @@ skip_anyof(p)
                    mb_ptr_adv(p);
            }
        else if (*p == '\\'
-               && !cpo_bsl
+               && !reg_cpo_bsl
                && (vim_strchr(REGEXP_INRANGE, p[1]) != NULL
-                   || (!cpo_lit && vim_strchr(REGEXP_ABBR, p[1]) != NULL)))
+                   || (!reg_cpo_lit && vim_strchr(REGEXP_ABBR, p[1]) != NULL)))
            p += 2;
        else if (*p == '[')
        {
@@ -969,6 +1257,7 @@ skip_regexp(startp, dirc, magic, newp)
        mymagic = MAGIC_ON;
     else
        mymagic = MAGIC_OFF;
+    get_cpo_flags();
 
     for (; p[0] != NUL; mb_ptr_adv(p))
     {
@@ -1008,8 +1297,12 @@ skip_regexp(startp, dirc, magic, newp)
     return p;
 }
 
+static regprog_T  *bt_regcomp __ARGS((char_u *expr, int re_flags));
+static void bt_regfree __ARGS((regprog_T *prog));
+
 /*
- * vim_regcomp() - compile a regular expression into internal code
+ * bt_regcomp() - compile a regular expression into internal code for the
+ * traditional back track matcher.
  * Returns the program in allocated space.  Returns NULL for an error.
  *
  * We can't allocate space until we know how big the compiled form will be,
@@ -1028,12 +1321,12 @@ skip_regexp(startp, dirc, magic, newp)
  * of the structure of the compiled regexp.
  * "re_flags": RE_MAGIC and/or RE_STRING.
  */
-    regprog_T *
-vim_regcomp(expr, re_flags)
+    static regprog_T *
+bt_regcomp(expr, re_flags)
     char_u     *expr;
     int                re_flags;
 {
-    regprog_T  *r;
+    bt_regprog_T    *r;
     char_u     *scan;
     char_u     *longest;
     int                len;
@@ -1060,7 +1353,7 @@ vim_regcomp(expr, re_flags)
 #endif
 
     /* Allocate space. */
-    r = (regprog_T *)lalloc(sizeof(regprog_T) + regsize, TRUE);
+    r = (bt_regprog_T *)lalloc(sizeof(bt_regprog_T) + regsize, TRUE);
     if (r == NULL)
        return NULL;
 
@@ -1155,10 +1448,21 @@ vim_regcomp(expr, re_flags)
            r->regmlen = len;
        }
     }
-#ifdef DEBUG
+#ifdef BT_REGEXP_DUMP
     regdump(expr, r);
 #endif
-    return r;
+    r->engine = &bt_regengine;
+    return (regprog_T *)r;
+}
+
+/*
+ * Free a compiled regexp program, returned by bt_regcomp().
+ */
+    static void
+bt_regfree(prog)
+    regprog_T   *prog;
+{
+    vim_free(prog);
 }
 
 /*
@@ -1176,6 +1480,7 @@ regcomp_start(expr, re_flags)
        reg_magic = MAGIC_OFF;
     reg_string = (re_flags & RE_STRING);
     reg_strict = (re_flags & RE_STRICT);
+    get_cpo_flags();
 
     num_complex_braces = 0;
     regnpar = 1;
@@ -1205,7 +1510,7 @@ vim_regcomp_had_eol()
 #endif
 
 /*
- * reg - regular expression, i.e. main body or parenthesized thing
+ * Parse regular expression, i.e. main body or parenthesized thing.
  *
  * Caller must absorb opening parenthesis.
  *
@@ -1242,7 +1547,7 @@ reg(paren, flagp)
     {
        /* Make a MOPEN node. */
        if (regnpar >= NSUBEXP)
-           EMSG_M_RET_NULL(_("E51: Too many %s("), reg_magic == MAGIC_ALL);
+           EMSG2_RET_NULL(_("E51: Too many %s("), reg_magic == MAGIC_ALL);
        parno = regnpar;
        ++regnpar;
        ret = regnode(MOPEN + parno);
@@ -1303,14 +1608,14 @@ reg(paren, flagp)
        else
 #endif
            if (paren == REG_NPAREN)
-           EMSG_M_RET_NULL(_("E53: Unmatched %s%%("), reg_magic == MAGIC_ALL);
+           EMSG2_RET_NULL(_(e_unmatchedpp), reg_magic == MAGIC_ALL);
        else
-           EMSG_M_RET_NULL(_("E54: Unmatched %s("), reg_magic == MAGIC_ALL);
+           EMSG2_RET_NULL(_(e_unmatchedp), reg_magic == MAGIC_ALL);
     }
     else if (paren == REG_NOPAREN && peekchr() != NUL)
     {
        if (curchr == Magic(')'))
-           EMSG_M_RET_NULL(_("E55: Unmatched %s)"), reg_magic == MAGIC_ALL);
+           EMSG2_RET_NULL(_(e_unmatchedpar), reg_magic == MAGIC_ALL);
        else
            EMSG_RET_NULL(_(e_trailing));       /* "Can't happen". */
        /* NOTREACHED */
@@ -1325,7 +1630,7 @@ reg(paren, flagp)
 }
 
 /*
- * Handle one alternative of an | operator.
+ * Parse one alternative of an | operator.
  * Implements the & operator.
  */
     static char_u *
@@ -1368,7 +1673,7 @@ regbranch(flagp)
 }
 
 /*
- * Handle one alternative of an | or & operator.
+ * Parse one alternative of an | or & operator.
  * Implements the concatenation operator.
  */
     static char_u *
@@ -1448,7 +1753,7 @@ regconcat(flagp)
 }
 
 /*
- * regpiece - something followed by possible [*+=]
+ * Parse something followed by possible [*+=].
  *
  * Note that the branching code sequences used for = and the general cases
  * of * and + are somewhat optimized:  they use the same NOTHING node as
@@ -1515,7 +1820,9 @@ regpiece(flagp)
        case Magic('@'):
            {
                int     lop = END;
+               int     nr;
 
+               nr = getdecchrs();
                switch (no_Magic(getchr()))
                {
                    case '=': lop = MATCH; break;                 /* \@= */
@@ -1528,7 +1835,7 @@ regpiece(flagp)
                              }
                }
                if (lop == END)
-                   EMSG_M_RET_NULL(_("E59: invalid character after %s@"),
+                   EMSG2_RET_NULL(_("E59: invalid character after %s@"),
                                                      reg_magic == MAGIC_ALL);
                /* Look behind must match with behind_pos. */
                if (lop == BEHIND || lop == NOBEHIND)
@@ -1537,7 +1844,14 @@ regpiece(flagp)
                    *flagp |= HASLOOKBH;
                }
                regtail(ret, regnode(END)); /* operand ends */
-               reginsert(lop, ret);
+               if (lop == BEHIND || lop == NOBEHIND)
+               {
+                   if (nr < 0)
+                       nr = 0; /* no limit is same as zero limit */
+                   reginsert_nr(lop, nr, ret);
+               }
+               else
+                   reginsert(lop, ret);
                break;
            }
 
@@ -1562,7 +1876,7 @@ regpiece(flagp)
            else
            {
                if (num_complex_braces >= 10)
-                   EMSG_M_RET_NULL(_("E60: Too many complex %s{...}s"),
+                   EMSG2_RET_NULL(_("E60: Too many complex %s{...}s"),
                                                      reg_magic == MAGIC_ALL);
                reginsert(BRACE_COMPLEX + num_complex_braces, ret);
                regoptail(ret, regnode(BACK));
@@ -1589,8 +1903,20 @@ regpiece(flagp)
     return ret;
 }
 
+/* When making changes to classchars also change nfa_classcodes. */
+static char_u  *classchars = (char_u *)".iIkKfFpPsSdDxXoOwWhHaAlLuU";
+static int     classcodes[] = {
+    ANY, IDENT, SIDENT, KWORD, SKWORD,
+    FNAME, SFNAME, PRINT, SPRINT,
+    WHITE, NWHITE, DIGIT, NDIGIT,
+    HEX, NHEX, OCTAL, NOCTAL,
+    WORD, NWORD, HEAD, NHEAD,
+    ALPHA, NALPHA, LOWER, NLOWER,
+    UPPER, NUPPER
+};
+
 /*
- * regatom - the lowest level
+ * Parse the lowest level.
  *
  * Optimization:  gobbles an entire sequence of ordinary characters so that
  * it can turn them into a single node, which is smaller to store and
@@ -1602,24 +1928,11 @@ regatom(flagp)
 {
     char_u         *ret;
     int                    flags;
-    int                    cpo_lit;        /* 'cpoptions' contains 'l' flag */
-    int                    cpo_bsl;        /* 'cpoptions' contains '\' flag */
     int                    c;
-    static char_u   *classchars = (char_u *)".iIkKfFpPsSdDxXoOwWhHaAlLuU";
-    static int     classcodes[] = {ANY, IDENT, SIDENT, KWORD, SKWORD,
-                                   FNAME, SFNAME, PRINT, SPRINT,
-                                   WHITE, NWHITE, DIGIT, NDIGIT,
-                                   HEX, NHEX, OCTAL, NOCTAL,
-                                   WORD, NWORD, HEAD, NHEAD,
-                                   ALPHA, NALPHA, LOWER, NLOWER,
-                                   UPPER, NUPPER
-                                   };
     char_u         *p;
     int                    extra = 0;
 
     *flagp = WORST;            /* Tentatively. */
-    cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
-    cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
 
     c = getchr();
     switch (c)
@@ -1826,7 +2139,7 @@ regatom(flagp)
            {
 #ifdef FEAT_SYN_HL
                case '(': if (reg_do_extmatch != REX_SET)
-                             EMSG_RET_NULL(_("E66: \\z( not allowed here"));
+                             EMSG_RET_NULL(_(e_z_not_allowed));
                          if (one_exactly)
                              EMSG_ONE_RET_NULL;
                          ret = reg(REG_ZPAREN, &flags);
@@ -1845,7 +2158,7 @@ regatom(flagp)
                case '7':
                case '8':
                case '9': if (reg_do_extmatch != REX_USE)
-                             EMSG_RET_NULL(_("E67: \\z1 et al. not allowed here"));
+                             EMSG_RET_NULL(_(e_z1_not_allowed));
                          ret = regnode(ZREF + c - '0');
                          re_has_z = REX_USE;
                          break;
@@ -1909,7 +2222,7 @@ regatom(flagp)
                              while ((c = getchr()) != ']')
                              {
                                  if (c == NUL)
-                                     EMSG_M_RET_NULL(_("E69: Missing ] after %s%%["),
+                                     EMSG2_RET_NULL(_(e_missing_sb),
                                                      reg_magic == MAGIC_ALL);
                                  br = regnode(BRANCH);
                                  if (ret == NULL)
@@ -1925,7 +2238,7 @@ regatom(flagp)
                                      return NULL;
                              }
                              if (ret == NULL)
-                                 EMSG_M_RET_NULL(_("E70: Empty %s%%[]"),
+                                 EMSG2_RET_NULL(_(e_empty_sb),
                                                      reg_magic == MAGIC_ALL);
                              lastbranch = regnode(BRANCH);
                              br = regnode(NOTHING);
@@ -1969,7 +2282,7 @@ regatom(flagp)
                              }
 
                              if (i < 0)
-                                 EMSG_M_RET_NULL(
+                                 EMSG2_RET_NULL(
                                        _("E678: Invalid character after %s%%[dxouU]"),
                                        reg_magic == MAGIC_ALL);
 #ifdef FEAT_MBYTE
@@ -2041,7 +2354,7 @@ regatom(flagp)
                              }
                          }
 
-                         EMSG_M_RET_NULL(_("E71: Invalid character after %s%%"),
+                         EMSG2_RET_NULL(_("E71: Invalid character after %s%%"),
                                                      reg_magic == MAGIC_ALL);
            }
        }
@@ -2112,7 +2425,7 @@ collection:
                            }
 
                            /* Handle \o40, \x20 and \u20AC style sequences */
-                           if (endc == '\\' && !cpo_lit && !cpo_bsl)
+                           if (endc == '\\' && !reg_cpo_lit && !reg_cpo_bsl)
                                endc = coll_get_char();
 
                            if (startc > endc)
@@ -2154,9 +2467,9 @@ collection:
                     * Posix doesn't recognize backslash at all.
                     */
                    else if (*regparse == '\\'
-                           && !cpo_bsl
+                           && !reg_cpo_bsl
                            && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
-                               || (!cpo_lit
+                               || (!reg_cpo_lit
                                    && vim_strchr(REGEXP_ABBR,
                                                       regparse[1]) != NULL)))
                    {
@@ -2166,13 +2479,15 @@ collection:
                            /* '\n' in range: also match NL */
                            if (ret != JUST_CALC_SIZE)
                            {
-                               if (*ret == ANYBUT)
-                                   *ret = ANYBUT + ADD_NL;
-                               else if (*ret == ANYOF)
+                               /* Using \n inside [^] does not change what
+                                * matches. "[^\n]" is the same as ".". */
+                               if (*ret == ANYOF)
+                               {
                                    *ret = ANYOF + ADD_NL;
+                                   *flagp |= HASNL;
+                               }
                                /* else: must have had a \n already */
                            }
-                           *flagp |= HASNL;
                            regparse++;
                            startc = -1;
                        }
@@ -2334,8 +2649,7 @@ collection:
                break;
            }
            else if (reg_strict)
-               EMSG_M_RET_NULL(_("E769: Missing ] after %s["),
-                                                      reg_magic > MAGIC_OFF);
+               EMSG2_RET_NULL(_(e_missingbracket), reg_magic > MAGIC_OFF);
        }
        /* FALLTHROUGH */
 
@@ -2426,7 +2740,7 @@ use_multibytecode(c)
 #endif
 
 /*
- * emit a node
+ * Emit a node.
  * Return pointer to generated code.
  */
     static char_u *
@@ -2468,6 +2782,8 @@ regc(b)
 regmbc(c)
     int                c;
 {
+    if (!has_mbyte && c > 0xff)
+       return;
     if (regcode == JUST_CALC_SIZE)
        regsize += (*mb_char2len)(c);
     else
@@ -2476,7 +2792,7 @@ regmbc(c)
 #endif
 
 /*
- * reginsert - insert an operator in front of already-emitted operand
+ * Insert an operator in front of already-emitted operand
  *
  * Means relocating the operand.
  */
@@ -2507,7 +2823,39 @@ reginsert(op, opnd)
 }
 
 /*
- * reginsert_limits - insert an operator in front of already-emitted operand.
+ * Insert an operator in front of already-emitted operand.
+ * Add a number to the operator.
+ */
+    static void
+reginsert_nr(op, val, opnd)
+    int                op;
+    long       val;
+    char_u     *opnd;
+{
+    char_u     *src;
+    char_u     *dst;
+    char_u     *place;
+
+    if (regcode == JUST_CALC_SIZE)
+    {
+       regsize += 7;
+       return;
+    }
+    src = regcode;
+    regcode += 7;
+    dst = regcode;
+    while (src > opnd)
+       *--dst = *--src;
+
+    place = opnd;              /* Op node, where operand used to be. */
+    *place++ = op;
+    *place++ = NUL;
+    *place++ = NUL;
+    place = re_put_long(place, (long_u)val);
+}
+
+/*
+ * Insert an operator in front of already-emitted operand.
  * The operator has the given limit values as operands.  Also set next pointer.
  *
  * Means relocating the operand.
@@ -2559,7 +2907,7 @@ re_put_long(p, val)
 }
 
 /*
- * regtail - set the next-pointer at the end of a node chain
+ * Set the next-pointer at the end of a node chain.
  */
     static void
 regtail(p, val)
@@ -2588,7 +2936,7 @@ regtail(p, val)
     else
        offset = (int)(val - scan);
     /* When the offset uses more than 16 bits it can no longer fit in the two
-     * bytes avaliable.  Use a global flag to avoid having to check return
+     * bytes available.  Use a global flag to avoid having to check return
      * values in too many places. */
     if (offset > 0xffff)
        reg_toolong = TRUE;
@@ -2600,7 +2948,7 @@ regtail(p, val)
 }
 
 /*
- * regoptail - regtail on item after a BRANCH; nop if none
+ * Like regtail, on item after a BRANCH; nop if none.
  */
     static void
 regoptail(p, val)
@@ -2616,22 +2964,15 @@ regoptail(p, val)
 }
 
 /*
- * getchr() - get the next character from the pattern. We know about
- * magic and such, so therefore we need a lexical analyzer.
+ * Functions for getting characters from the regexp input.
  */
 
-/* static int      curchr; */
-static int     prevprevchr;
-static int     prevchr;
-static int     nextchr;    /* used for ungetchr() */
-/*
- * Note: prevchr is sometimes -1 when we are not at the start,
- * eg in /[ ^I]^ the pattern was never found even if it existed, because ^ was
- * taken to be magic -- webb
- */
 static int     at_start;       /* True when on the first character */
 static int     prev_at_start;  /* True when on the second character */
 
+/*
+ * Start parsing at "str".
+ */
     static void
 initchr(str)
     char_u *str;
@@ -2643,6 +2984,47 @@ initchr(str)
     prev_at_start = FALSE;
 }
 
+/*
+ * Save the current parse state, so that it can be restored and parsing
+ * starts in the same state again.
+ */
+    static void
+save_parse_state(ps)
+    parse_state_T *ps;
+{
+    ps->regparse = regparse;
+    ps->prevchr_len = prevchr_len;
+    ps->curchr = curchr;
+    ps->prevchr = prevchr;
+    ps->prevprevchr = prevprevchr;
+    ps->nextchr = nextchr;
+    ps->at_start = at_start;
+    ps->prev_at_start = prev_at_start;
+    ps->regnpar = regnpar;
+}
+
+/*
+ * Restore a previously saved parse state.
+ */
+    static void
+restore_parse_state(ps)
+    parse_state_T *ps;
+{
+    regparse = ps->regparse;
+    prevchr_len = ps->prevchr_len;
+    curchr = ps->curchr;
+    prevchr = ps->prevchr;
+    prevprevchr = ps->prevprevchr;
+    nextchr = ps->nextchr;
+    at_start = ps->at_start;
+    prev_at_start = ps->prev_at_start;
+    regnpar = ps->regnpar;
+}
+
+
+/*
+ * Get the next character without advancing.
+ */
     static int
 peekchr()
 {
@@ -2851,6 +3233,10 @@ skipchr_keepstart()
     prevprevchr = prpr;
 }
 
+/*
+ * Get the next character from the pattern. We know about magic and such, so
+ * therefore we need a lexical analyzer.
+ */
     static int
 getchr()
 {
@@ -2910,7 +3296,7 @@ gethexchrs(maxinputlen)
 }
 
 /*
- * get and return the value of the decimal string immediately after the
+ * Get and return the value of the decimal string immediately after the
  * current position. Return -1 for invalid.  Consumes all digits.
  */
     static int
@@ -2928,6 +3314,7 @@ getdecchrs()
        nr *= 10;
        nr += c - '0';
        ++regparse;
+       curchr = -1; /* no longer valid */
     }
 
     if (i == 0)
@@ -3105,8 +3492,8 @@ typedef struct regbehind_S
 } regbehind_T;
 
 static char_u  *reg_getline __ARGS((linenr_T lnum));
-static long    vim_regexec_both __ARGS((char_u *line, colnr_T col, proftime_T *tm));
-static long    regtry __ARGS((regprog_T *prog, colnr_T col));
+static long    bt_regexec_both __ARGS((char_u *line, colnr_T col, proftime_T *tm));
+static long    regtry __ARGS((bt_regprog_T *prog, colnr_T col));
 static void    cleanup_subexpr __ARGS((void));
 #ifdef FEAT_SYN_HL
 static void    cleanup_zsubexpr __ARGS((void));
@@ -3132,6 +3519,7 @@ static void       save_se_one __ARGS((save_se_T *savep, char_u **pp));
        *(pp) = (savep)->se_u.ptr; }
 
 static int     re_num_cmp __ARGS((long_u val, char_u *scan));
+static int     match_with_backref __ARGS((linenr_T start_lnum, colnr_T start_col, linenr_T end_lnum, colnr_T end_col, int *bytelen));
 static int     regmatch __ARGS((char_u *prog));
 static int     regrepeat __ARGS((char_u *p, long maxcount));
 
@@ -3163,7 +3551,7 @@ static colnr_T    ireg_maxcol;
 /*
  * Sometimes need to save a copy of a line.  Since alloc()/free() is very
  * slow, we keep one allocated piece of memory and only re-allocate it when
- * it's too small.  It's freed in vim_regexec_both() when finished.
+ * it's too small.  It's freed in bt_regexec_both() when finished.
  */
 static char_u  *reg_tofree = NULL;
 static unsigned        reg_tofreelen;
@@ -3180,7 +3568,7 @@ static unsigned   reg_tofreelen;
  * reg_startpos                <invalid>               reg_mmatch->startpos
  * reg_endpos          <invalid>               reg_mmatch->endpos
  * reg_win             NULL                    window in which to search
- * reg_buf             <invalid>               buffer in which to search
+ * reg_buf             curbuf                  buffer in which to search
  * reg_firstlnum       <invalid>               first line in which to search
  * reg_maxline         0                       last line nr
  * reg_line_lbr                FALSE or TRUE           FALSE
@@ -3321,6 +3709,8 @@ static lpos_T     reg_endzpos[NSUBEXP];   /* idem, end pos */
 /* TRUE if using multi-line regexp. */
 #define REG_MULTI      (reg_match == NULL)
 
+static int  bt_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+
 /*
  * Match a regexp against a string.
  * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
@@ -3328,8 +3718,8 @@ static lpos_T     reg_endzpos[NSUBEXP];   /* idem, end pos */
  *
  * Return TRUE if there is a match, FALSE if not.
  */
-    int
-vim_regexec(rmp, line, col)
+    static int
+bt_regexec(rmp, line, col)
     regmatch_T *rmp;
     char_u     *line;  /* string to match against */
     colnr_T    col;    /* column to start looking for match */
@@ -3338,22 +3728,26 @@ vim_regexec(rmp, line, col)
     reg_mmatch = NULL;
     reg_maxline = 0;
     reg_line_lbr = FALSE;
+    reg_buf = curbuf;
     reg_win = NULL;
     ireg_ic = rmp->rm_ic;
 #ifdef FEAT_MBYTE
     ireg_icombine = FALSE;
 #endif
     ireg_maxcol = 0;
-    return (vim_regexec_both(line, col, NULL) != 0);
+    return (bt_regexec_both(line, col, NULL) != 0);
 }
 
 #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
        || defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+
+static int  bt_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+
 /*
  * Like vim_regexec(), but consider a "\n" in "line" to be a line break.
  */
-    int
-vim_regexec_nl(rmp, line, col)
+    static int
+bt_regexec_nl(rmp, line, col)
     regmatch_T *rmp;
     char_u     *line;  /* string to match against */
     colnr_T    col;    /* column to start looking for match */
@@ -3362,16 +3756,19 @@ vim_regexec_nl(rmp, line, col)
     reg_mmatch = NULL;
     reg_maxline = 0;
     reg_line_lbr = TRUE;
+    reg_buf = curbuf;
     reg_win = NULL;
     ireg_ic = rmp->rm_ic;
 #ifdef FEAT_MBYTE
     ireg_icombine = FALSE;
 #endif
     ireg_maxcol = 0;
-    return (vim_regexec_both(line, col, NULL) != 0);
+    return (bt_regexec_both(line, col, NULL) != 0);
 }
 #endif
 
+static long bt_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+
 /*
  * Match a regexp against multiple lines.
  * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
@@ -3380,8 +3777,8 @@ vim_regexec_nl(rmp, line, col)
  * Return zero if there is no match.  Return number of lines contained in the
  * match otherwise.
  */
-    long
-vim_regexec_multi(rmp, win, buf, lnum, col, tm)
+    static long
+bt_regexec_multi(rmp, win, buf, lnum, col, tm)
     regmmatch_T        *rmp;
     win_T      *win;           /* window in which to search or NULL */
     buf_T      *buf;           /* buffer in which to search */
@@ -3390,7 +3787,6 @@ vim_regexec_multi(rmp, win, buf, lnum, col, tm)
     proftime_T *tm;            /* timeout limit or NULL */
 {
     long       r;
-    buf_T      *save_curbuf = curbuf;
 
     reg_match = NULL;
     reg_mmatch = rmp;
@@ -3405,10 +3801,7 @@ vim_regexec_multi(rmp, win, buf, lnum, col, tm)
 #endif
     ireg_maxcol = rmp->rmm_maxcol;
 
-    /* Need to switch to buffer "buf" to make vim_iswordc() work. */
-    curbuf = buf;
-    r = vim_regexec_both(NULL, col, tm);
-    curbuf = save_curbuf;
+    r = bt_regexec_both(NULL, col, tm);
 
     return r;
 }
@@ -3418,12 +3811,12 @@ vim_regexec_multi(rmp, win, buf, lnum, col, tm)
  * lines ("line" is NULL, use reg_getline()).
  */
     static long
-vim_regexec_both(line, col, tm)
+bt_regexec_both(line, col, tm)
     char_u     *line;
     colnr_T    col;            /* column to start looking for match */
     proftime_T *tm UNUSED;     /* timeout limit or NULL */
 {
-    regprog_T  *prog;
+    bt_regprog_T       *prog;
     char_u     *s;
     long       retval = 0L;
 
@@ -3449,14 +3842,14 @@ vim_regexec_both(line, col, tm)
 
     if (REG_MULTI)
     {
-       prog = reg_mmatch->regprog;
+       prog = (bt_regprog_T *)reg_mmatch->regprog;
        line = reg_getline((linenr_T)0);
        reg_startpos = reg_mmatch->startpos;
        reg_endpos = reg_mmatch->endpos;
     }
     else
     {
-       prog = reg_match->regprog;
+       prog = (bt_regprog_T *)reg_match->regprog;
        reg_startp = reg_match->startp;
        reg_endp = reg_match->endp;
     }
@@ -3538,6 +3931,7 @@ vim_regexec_both(line, col, tm)
 
     regline = line;
     reglnum = 0;
+    reg_toolong = FALSE;
 
     /* Simplest case: Anchored match need be tried only once. */
     if (prog->reganch)
@@ -3697,7 +4091,7 @@ unref_extmatch(em)
  */
     static long
 regtry(prog, col)
-    regprog_T  *prog;
+    bt_regprog_T    *prog;
     colnr_T    col;
 {
     reginput = regline + col;
@@ -3781,12 +4175,91 @@ static int reg_prev_class __ARGS((void));
 reg_prev_class()
 {
     if (reginput > regline)
-       return mb_get_class(reginput - 1
-                                    - (*mb_head_off)(regline, reginput - 1));
+       return mb_get_class_buf(reginput - 1
+                           - (*mb_head_off)(regline, reginput - 1), reg_buf);
     return -1;
 }
 
 #endif
+#ifdef FEAT_VISUAL
+static int reg_match_visual __ARGS((void));
+
+/*
+ * Return TRUE if the current reginput position matches the Visual area.
+ */
+    static int
+reg_match_visual()
+{
+    pos_T      top, bot;
+    linenr_T    lnum;
+    colnr_T    col;
+    win_T      *wp = reg_win == NULL ? curwin : reg_win;
+    int                mode;
+    colnr_T    start, end;
+    colnr_T    start2, end2;
+    colnr_T    cols;
+
+    /* Check if the buffer is the current buffer. */
+    if (reg_buf != curbuf || VIsual.lnum == 0)
+       return FALSE;
+
+    if (VIsual_active)
+    {
+       if (lt(VIsual, wp->w_cursor))
+       {
+           top = VIsual;
+           bot = wp->w_cursor;
+       }
+       else
+       {
+           top = wp->w_cursor;
+           bot = VIsual;
+       }
+       mode = VIsual_mode;
+    }
+    else
+    {
+       if (lt(curbuf->b_visual.vi_start, curbuf->b_visual.vi_end))
+       {
+           top = curbuf->b_visual.vi_start;
+           bot = curbuf->b_visual.vi_end;
+       }
+       else
+       {
+           top = curbuf->b_visual.vi_end;
+           bot = curbuf->b_visual.vi_start;
+       }
+       mode = curbuf->b_visual.vi_mode;
+    }
+    lnum = reglnum + reg_firstlnum;
+    if (lnum < top.lnum || lnum > bot.lnum)
+       return FALSE;
+
+    if (mode == 'v')
+    {
+       col = (colnr_T)(reginput - regline);
+       if ((lnum == top.lnum && col < top.col)
+               || (lnum == bot.lnum && col >= bot.col + (*p_sel != 'e')))
+           return FALSE;
+    }
+    else if (mode == Ctrl_V)
+    {
+       getvvcol(wp, &top, &start, NULL, &end);
+       getvvcol(wp, &bot, &start2, NULL, &end2);
+       if (start2 < start)
+           start = start2;
+       if (end2 > end)
+           end = end2;
+       if (top.col == MAXCOL || bot.col == MAXCOL)
+           end = MAXCOL;
+       cols = win_linetabsize(wp, regline, (colnr_T)(reginput - regline));
+       if (cols < start || cols > end - (*p_sel == 'e'))
+           return FALSE;
+    }
+    return TRUE;
+}
+#endif
+
 #define ADVANCE_REGINPUT() mb_ptr_adv(reginput)
 
 /*
@@ -3829,7 +4302,7 @@ regmatch(scan)
 #define RA_NOMATCH     5       /* didn't match */
 
   /* Make "regstack" and "backpos" empty.  They are allocated and freed in
-   * vim_regexec_both() to reduce malloc()/free() calls. */
+   * bt_regexec_both() to reduce malloc()/free() calls. */
   regstack.ga_len = 0;
   backpos.ga_len = 0;
 
@@ -3838,14 +4311,14 @@ regmatch(scan)
    */
   for (;;)
   {
-    /* Some patterns my cause a long time to match, even though they are not
+    /* Some patterns may cause a long time to match, even though they are not
      * illegal.  E.g., "\([a-z]\+\)\+Q".  Allow breaking them with CTRL-C. */
     fast_breakcheck();
 
 #ifdef DEBUG
     if (scan != NULL && regnarrate)
     {
-       mch_errmsg(regprop(scan));
+       mch_errmsg((char *)regprop(scan));
        mch_errmsg("(\n");
     }
 #endif
@@ -3866,7 +4339,7 @@ regmatch(scan)
 #ifdef DEBUG
        if (regnarrate)
        {
-           mch_errmsg(regprop(scan));
+           mch_errmsg((char *)regprop(scan));
            mch_errmsg("...\n");
 # ifdef FEAT_SYN_HL
            if (re_extmatch_in != NULL)
@@ -3878,7 +4351,7 @@ regmatch(scan)
                {
                    mch_errmsg("    \"");
                    if (re_extmatch_in->matches[i] != NULL)
-                       mch_errmsg(re_extmatch_in->matches[i]);
+                       mch_errmsg((char *)re_extmatch_in->matches[i]);
                    mch_errmsg("\"\n");
                }
            }
@@ -3944,16 +4417,15 @@ regmatch(scan)
            break;
 
          case RE_MARK:
-           /* Compare the mark position to the match position.  NOTE: Always
-            * uses the current buffer. */
+           /* Compare the mark position to the match position. */
            {
                int     mark = OPERAND(scan)[0];
                int     cmp = OPERAND(scan)[1];
                pos_T   *pos;
 
-               pos = getmark(mark, FALSE);
+               pos = getmark_buf(reg_buf, mark, FALSE);
                if (pos == NULL              /* mark doesn't exist */
-                       || pos->lnum <= 0    /* mark isn't set (in curbuf) */
+                       || pos->lnum <= 0    /* mark isn't set in reg_buf */
                        || (pos->lnum == reglnum + reg_firstlnum
                                ? (pos->col == (colnr_T)(reginput - regline)
                                    ? (cmp == '<' || cmp == '>')
@@ -3969,80 +4441,9 @@ regmatch(scan)
 
          case RE_VISUAL:
 #ifdef FEAT_VISUAL
-           /* Check if the buffer is the current buffer. and whether the
-            * position is inside the Visual area. */
-           if (reg_buf != curbuf || VIsual.lnum == 0)
-               status = RA_NOMATCH;
-           else
-           {
-               pos_T       top, bot;
-               linenr_T    lnum;
-               colnr_T     col;
-               win_T       *wp = reg_win == NULL ? curwin : reg_win;
-               int         mode;
-
-               if (VIsual_active)
-               {
-                   if (lt(VIsual, wp->w_cursor))
-                   {
-                       top = VIsual;
-                       bot = wp->w_cursor;
-                   }
-                   else
-                   {
-                       top = wp->w_cursor;
-                       bot = VIsual;
-                   }
-                   mode = VIsual_mode;
-               }
-               else
-               {
-                   if (lt(curbuf->b_visual.vi_start, curbuf->b_visual.vi_end))
-                   {
-                       top = curbuf->b_visual.vi_start;
-                       bot = curbuf->b_visual.vi_end;
-                   }
-                   else
-                   {
-                       top = curbuf->b_visual.vi_end;
-                       bot = curbuf->b_visual.vi_start;
-                   }
-                   mode = curbuf->b_visual.vi_mode;
-               }
-               lnum = reglnum + reg_firstlnum;
-               col = (colnr_T)(reginput - regline);
-               if (lnum < top.lnum || lnum > bot.lnum)
-                   status = RA_NOMATCH;
-               else if (mode == 'v')
-               {
-                   if ((lnum == top.lnum && col < top.col)
-                           || (lnum == bot.lnum
-                                        && col >= bot.col + (*p_sel != 'e')))
-                       status = RA_NOMATCH;
-               }
-               else if (mode == Ctrl_V)
-               {
-                   colnr_T         start, end;
-                   colnr_T         start2, end2;
-                   colnr_T         cols;
-
-                   getvvcol(wp, &top, &start, NULL, &end);
-                   getvvcol(wp, &bot, &start2, NULL, &end2);
-                   if (start2 < start)
-                       start = start2;
-                   if (end2 > end)
-                       end = end2;
-                   if (top.col == MAXCOL || bot.col == MAXCOL)
-                       end = MAXCOL;
-                   cols = win_linetabsize(wp,
-                                     regline, (colnr_T)(reginput - regline));
-                   if (cols < start || cols > end - (*p_sel == 'e'))
-                       status = RA_NOMATCH;
-               }
-           }
-#else
-           status = RA_NOMATCH;
+           if (!reg_match_visual())
 #endif
+               status = RA_NOMATCH;
            break;
 
          case RE_LNUM:
@@ -4072,7 +4473,7 @@ regmatch(scan)
                int this_class;
 
                /* Get class of current and previous char (if it exists). */
-               this_class = mb_get_class(reginput);
+               this_class = mb_get_class_buf(reginput, reg_buf);
                if (this_class <= 1)
                    status = RA_NOMATCH;  /* not on a word at all */
                else if (reg_prev_class() == this_class)
@@ -4081,8 +4482,8 @@ regmatch(scan)
 #endif
            else
            {
-               if (!vim_iswordc(c)
-                       || (reginput > regline && vim_iswordc(reginput[-1])))
+               if (!vim_iswordc_buf(c, reg_buf) || (reginput > regline
+                                  && vim_iswordc_buf(reginput[-1], reg_buf)))
                    status = RA_NOMATCH;
            }
            break;
@@ -4096,7 +4497,7 @@ regmatch(scan)
                int this_class, prev_class;
 
                /* Get class of current and previous char (if it exists). */
-               this_class = mb_get_class(reginput);
+               this_class = mb_get_class_buf(reginput, reg_buf);
                prev_class = reg_prev_class();
                if (this_class == prev_class
                        || prev_class == 0 || prev_class == 1)
@@ -4105,13 +4506,14 @@ regmatch(scan)
 #endif
            else
            {
-               if (!vim_iswordc(reginput[-1])
-                       || (reginput[0] != NUL && vim_iswordc(c)))
+               if (!vim_iswordc_buf(reginput[-1], reg_buf)
+                       || (reginput[0] != NUL && vim_iswordc_buf(c, reg_buf)))
                    status = RA_NOMATCH;
            }
            break; /* Matched with EOW */
 
          case ANY:
+           /* ANY does not match new lines. */
            if (c == NUL)
                status = RA_NOMATCH;
            else
@@ -4133,14 +4535,14 @@ regmatch(scan)
            break;
 
          case KWORD:
-           if (!vim_iswordp(reginput))
+           if (!vim_iswordp_buf(reginput, reg_buf))
                status = RA_NOMATCH;
            else
                ADVANCE_REGINPUT();
            break;
 
          case SKWORD:
-           if (VIM_ISDIGIT(*reginput) || !vim_iswordp(reginput))
+           if (VIM_ISDIGIT(*reginput) || !vim_iswordp_buf(reginput, reg_buf))
                status = RA_NOMATCH;
            else
                ADVANCE_REGINPUT();
@@ -4161,14 +4563,14 @@ regmatch(scan)
            break;
 
          case PRINT:
-           if (ptr2cells(reginput) != 1)
+           if (!vim_isprintc(PTR2CHAR(reginput)))
                status = RA_NOMATCH;
            else
                ADVANCE_REGINPUT();
            break;
 
          case SPRINT:
-           if (VIM_ISDIGIT(*reginput) || ptr2cells(reginput) != 1)
+           if (VIM_ISDIGIT(*reginput) || !vim_isprintc(PTR2CHAR(reginput)))
                status = RA_NOMATCH;
            else
                ADVANCE_REGINPUT();
@@ -4578,9 +4980,6 @@ regmatch(scan)
          case BACKREF + 9:
            {
                int             len;
-               linenr_T        clnum;
-               colnr_T         ccol;
-               char_u          *p;
 
                no = op - BACKREF;
                cleanup_subexpr();
@@ -4622,67 +5021,15 @@ regmatch(scan)
                        {
                            /* Messy situation: Need to compare between two
                             * lines. */
-                           ccol = reg_startpos[no].col;
-                           clnum = reg_startpos[no].lnum;
-                           for (;;)
-                           {
-                               /* Since getting one line may invalidate
-                                * the other, need to make copy.  Slow! */
-                               if (regline != reg_tofree)
-                               {
-                                   len = (int)STRLEN(regline);
-                                   if (reg_tofree == NULL
-                                                || len >= (int)reg_tofreelen)
-                                   {
-                                       len += 50;      /* get some extra */
-                                       vim_free(reg_tofree);
-                                       reg_tofree = alloc(len);
-                                       if (reg_tofree == NULL)
-                                       {
-                                           status = RA_FAIL; /* outof memory!*/
-                                           break;
-                                       }
-                                       reg_tofreelen = len;
-                                   }
-                                   STRCPY(reg_tofree, regline);
-                                   reginput = reg_tofree
-                                                      + (reginput - regline);
-                                   regline = reg_tofree;
-                               }
-
-                               /* Get the line to compare with. */
-                               p = reg_getline(clnum);
-                               if (clnum == reg_endpos[no].lnum)
-                                   len = reg_endpos[no].col - ccol;
-                               else
-                                   len = (int)STRLEN(p + ccol);
-
-                               if (cstrncmp(p + ccol, reginput, &len) != 0)
-                               {
-                                   status = RA_NOMATCH;  /* doesn't match */
-                                   break;
-                               }
-                               if (clnum == reg_endpos[no].lnum)
-                                   break;              /* match and at end! */
-                               if (reglnum >= reg_maxline)
-                               {
-                                   status = RA_NOMATCH;  /* text too short */
-                                   break;
-                               }
-
-                               /* Advance to next line. */
-                               reg_nextline();
-                               ++clnum;
-                               ccol = 0;
-                               if (got_int)
-                               {
-                                   status = RA_FAIL;
-                                   break;
-                               }
-                           }
-
-                           /* found a match!  Note that regline may now point
-                            * to a copy of the line, that should not matter. */
+                           int r = match_with_backref(
+                                           reg_startpos[no].lnum,
+                                           reg_startpos[no].col,
+                                           reg_endpos[no].lnum,
+                                           reg_endpos[no].col,
+                                           &len);
+
+                           if (r != RA_MATCH)
+                               status = r;
                        }
                    }
                }
@@ -5153,7 +5500,7 @@ regmatch(scan)
                /* save the position after the found match for next */
                reg_save(&(((regbehind_T *)rp) - 1)->save_after, &backpos);
 
-               /* start looking for a match with operand at the current
+               /* Start looking for a match with operand at the current
                 * position.  Go back one character until we find the
                 * result, hitting the start of the line or the previous
                 * line (for multi-line matching).
@@ -5165,7 +5512,7 @@ regmatch(scan)
                rp->rs_state = RS_BEHIND2;
 
                reg_restore(&rp->rs_un.regsave, &backpos);
-               scan = OPERAND(rp->rs_scan);
+               scan = OPERAND(rp->rs_scan) + 4;
            }
            break;
 
@@ -5193,12 +5540,22 @@ regmatch(scan)
            }
            else
            {
+               long limit;
+
                /* No match or a match that doesn't end where we want it: Go
                 * back one character.  May go to previous line once. */
                no = OK;
+               limit = OPERAND_MIN(rp->rs_scan);
                if (REG_MULTI)
                {
-                   if (rp->rs_un.regsave.rs_u.pos.col == 0)
+                   if (limit > 0
+                           && ((rp->rs_un.regsave.rs_u.pos.lnum
+                                                   < behind_pos.rs_u.pos.lnum
+                                   ? (colnr_T)STRLEN(regline)
+                                   : behind_pos.rs_u.pos.col)
+                               - rp->rs_un.regsave.rs_u.pos.col >= limit))
+                       no = FAIL;
+                   else if (rp->rs_un.regsave.rs_u.pos.col == 0)
                    {
                        if (rp->rs_un.regsave.rs_u.pos.lnum
                                        < behind_pos.rs_u.pos.lnum
@@ -5214,20 +5571,34 @@ regmatch(scan)
                        }
                    }
                    else
-                       --rp->rs_un.regsave.rs_u.pos.col;
+                   {
+#ifdef FEAT_MBYTE
+                       if (has_mbyte)
+                           rp->rs_un.regsave.rs_u.pos.col -=
+                               (*mb_head_off)(regline, regline
+                                   + rp->rs_un.regsave.rs_u.pos.col - 1) + 1;
+                       else
+#endif
+                           --rp->rs_un.regsave.rs_u.pos.col;
+                   }
                }
                else
                {
                    if (rp->rs_un.regsave.rs_u.ptr == regline)
                        no = FAIL;
                    else
-                       --rp->rs_un.regsave.rs_u.ptr;
+                   {
+                       mb_ptr_back(regline, rp->rs_un.regsave.rs_u.ptr);
+                       if (limit > 0 && (long)(behind_pos.rs_u.ptr
+                                    - rp->rs_un.regsave.rs_u.ptr) > limit)
+                           no = FAIL;
+                   }
                }
                if (no == OK)
                {
                    /* Advanced, prepare for finding match again. */
                    reg_restore(&rp->rs_un.regsave, &backpos);
-                   scan = OPERAND(rp->rs_scan);
+                   scan = OPERAND(rp->rs_scan) + 4;
                    if (status == RA_MATCH)
                    {
                        /* We did match, so subexpr may have been changed,
@@ -5472,7 +5843,7 @@ regrepeat(p, maxcount)
       case SIDENT + ADD_NL:
        while (count < maxcount)
        {
-           if (vim_isIDc(*scan) && (testval || !VIM_ISDIGIT(*scan)))
+           if (vim_isIDc(PTR2CHAR(scan)) && (testval || !VIM_ISDIGIT(*scan)))
            {
                mb_ptr_adv(scan);
            }
@@ -5502,7 +5873,8 @@ regrepeat(p, maxcount)
       case SKWORD + ADD_NL:
        while (count < maxcount)
        {
-           if (vim_iswordp(scan) && (testval || !VIM_ISDIGIT(*scan)))
+           if (vim_iswordp_buf(scan, reg_buf)
+                                         && (testval || !VIM_ISDIGIT(*scan)))
            {
                mb_ptr_adv(scan);
            }
@@ -5532,7 +5904,7 @@ regrepeat(p, maxcount)
       case SFNAME + ADD_NL:
        while (count < maxcount)
        {
-           if (vim_isfilec(*scan) && (testval || !VIM_ISDIGIT(*scan)))
+           if (vim_isfilec(PTR2CHAR(scan)) && (testval || !VIM_ISDIGIT(*scan)))
            {
                mb_ptr_adv(scan);
            }
@@ -5572,7 +5944,8 @@ regrepeat(p, maxcount)
                if (got_int)
                    break;
            }
-           else if (ptr2cells(scan) == 1 && (testval || !VIM_ISDIGIT(*scan)))
+           else if (vim_isprintc(PTR2CHAR(scan)) == 1
+                                         && (testval || !VIM_ISDIGIT(*scan)))
            {
                mb_ptr_adv(scan);
            }
@@ -5848,9 +6221,14 @@ regnext(p)
     static int
 prog_magic_wrong()
 {
-    if (UCHARAT(REG_MULTI
-               ? reg_mmatch->regprog->program
-               : reg_match->regprog->program) != REGMAGIC)
+    regprog_T  *prog;
+
+    prog = REG_MULTI ? reg_mmatch->regprog : reg_match->regprog;
+    if (prog->engine == &nfa_regengine)
+       /* For NFA matcher we don't check the magic */
+       return FALSE;
+
+    if (UCHARAT(((bt_regprog_T *)prog)->program) != REGMAGIC)
     {
        EMSG(_(e_re_corr));
        return TRUE;
@@ -6074,8 +6452,77 @@ re_num_cmp(val, scan)
     return val == n;
 }
 
+/*
+ * Check whether a backreference matches.
+ * Returns RA_FAIL, RA_NOMATCH or RA_MATCH.
+ * If "bytelen" is not NULL, it is set to the bytelength of the whole match.
+ */
+    static int
+match_with_backref(start_lnum, start_col, end_lnum, end_col, bytelen)
+    linenr_T start_lnum;
+    colnr_T  start_col;
+    linenr_T end_lnum;
+    colnr_T  end_col;
+    int             *bytelen;
+{
+    linenr_T   clnum = start_lnum;
+    colnr_T    ccol = start_col;
+    int                len;
+    char_u     *p;
 
-#ifdef DEBUG
+    if (bytelen != NULL)
+       *bytelen = 0;
+    for (;;)
+    {
+       /* Since getting one line may invalidate the other, need to make copy.
+        * Slow! */
+       if (regline != reg_tofree)
+       {
+           len = (int)STRLEN(regline);
+           if (reg_tofree == NULL || len >= (int)reg_tofreelen)
+           {
+               len += 50;      /* get some extra */
+               vim_free(reg_tofree);
+               reg_tofree = alloc(len);
+               if (reg_tofree == NULL)
+                   return RA_FAIL; /* out of memory!*/
+               reg_tofreelen = len;
+           }
+           STRCPY(reg_tofree, regline);
+           reginput = reg_tofree + (reginput - regline);
+           regline = reg_tofree;
+       }
+
+       /* Get the line to compare with. */
+       p = reg_getline(clnum);
+       if (clnum == end_lnum)
+           len = end_col - ccol;
+       else
+           len = (int)STRLEN(p + ccol);
+
+       if (cstrncmp(p + ccol, reginput, &len) != 0)
+           return RA_NOMATCH;  /* doesn't match */
+       if (bytelen != NULL)
+           *bytelen += len;
+       if (clnum == end_lnum)
+           break;              /* match and at end! */
+       if (reglnum >= reg_maxline)
+           return RA_NOMATCH;  /* text too short */
+
+       /* Advance to next line. */
+       reg_nextline();
+       ++clnum;
+       ccol = 0;
+       if (got_int)
+           return RA_FAIL;
+    }
+
+    /* found a match!  Note that regline may now point to a copy of the line,
+     * that should not matter. */
+    return RA_MATCH;
+}
+
+#ifdef BT_REGEXP_DUMP
 
 /*
  * regdump - dump a regexp onto stdout in vaguely comprehensible form
@@ -6083,14 +6530,22 @@ re_num_cmp(val, scan)
     static void
 regdump(pattern, r)
     char_u     *pattern;
-    regprog_T  *r;
+    bt_regprog_T       *r;
 {
     char_u  *s;
     int            op = EXACTLY;       /* Arbitrary non-END op. */
     char_u  *next;
     char_u  *end = NULL;
+    FILE    *f;
 
-    printf("\r\nregcomp(%s):\r\n", pattern);
+#ifdef BT_REGEXP_LOG
+    f = fopen("bt_regexp_log.log", "a");
+#else
+    f = stdout;
+#endif
+    if (f == NULL)
+       return;
+    fprintf(f, "-------------------------------------\n\r\nregcomp(%s):\r\n", pattern);
 
     s = r->program + 1;
     /*
@@ -6100,45 +6555,65 @@ regdump(pattern, r)
     while (op != END || s <= end)
     {
        op = OP(s);
-       printf("%2d%s", (int)(s - r->program), regprop(s)); /* Where, what. */
+       fprintf(f, "%2d%s", (int)(s - r->program), regprop(s)); /* Where, what. */
        next = regnext(s);
        if (next == NULL)       /* Next ptr. */
-           printf("(0)");
+           fprintf(f, "(0)");
        else
-           printf("(%d)", (int)((s - r->program) + (next - s)));
+           fprintf(f, "(%d)", (int)((s - r->program) + (next - s)));
        if (end < next)
            end = next;
        if (op == BRACE_LIMITS)
        {
-           /* Two short ints */
-           printf(" minval %ld, maxval %ld", OPERAND_MIN(s), OPERAND_MAX(s));
+           /* Two ints */
+           fprintf(f, " minval %ld, maxval %ld", OPERAND_MIN(s), OPERAND_MAX(s));
            s += 8;
        }
+       else if (op == BEHIND || op == NOBEHIND)
+       {
+           /* one int */
+           fprintf(f, " count %ld", OPERAND_MIN(s));
+           s += 4;
+       }
+       else if (op == RE_LNUM || op == RE_COL || op == RE_VCOL)
+       {
+           /* one int plus comperator */
+           fprintf(f, " count %ld", OPERAND_MIN(s));
+           s += 5;
+       }
        s += 3;
        if (op == ANYOF || op == ANYOF + ADD_NL
                || op == ANYBUT || op == ANYBUT + ADD_NL
                || op == EXACTLY)
        {
            /* Literal string, where present. */
+           fprintf(f, "\nxxxxxxxxx\n");
            while (*s != NUL)
-               printf("%c", *s++);
+               fprintf(f, "%c", *s++);
+           fprintf(f, "\nxxxxxxxxx\n");
            s++;
        }
-       printf("\r\n");
+       fprintf(f, "\r\n");
     }
 
     /* Header fields of interest. */
     if (r->regstart != NUL)
-       printf("start `%s' 0x%x; ", r->regstart < 256
+       fprintf(f, "start `%s' 0x%x; ", r->regstart < 256
                ? (char *)transchar(r->regstart)
                : "multibyte", r->regstart);
     if (r->reganch)
-       printf("anchored; ");
+       fprintf(f, "anchored; ");
     if (r->regmust != NULL)
-       printf("must have \"%s\"", r->regmust);
-    printf("\r\n");
+       fprintf(f, "must have \"%s\"", r->regmust);
+    fprintf(f, "\r\n");
+
+#ifdef BT_REGEXP_LOG
+    fclose(f);
+#endif
 }
+#endif     /* BT_REGEXP_DUMP */
 
+#ifdef DEBUG
 /*
  * regprop - printable representation of opcode
  */
@@ -6146,12 +6621,12 @@ regdump(pattern, r)
 regprop(op)
     char_u        *op;
 {
-    char_u         *p;
-    static char_u   buf[50];
+    char           *p;
+    static char            buf[50];
 
-    (void) strcpy(buf, ":");
+    STRCPY(buf, ":");
 
-    switch (OP(op))
+    switch ((int) OP(op))
     {
       case BOL:
        p = "BOL";
@@ -6518,10 +6993,10 @@ regprop(op)
        break;
     }
     if (p != NULL)
-       (void) strcat(buf, p);
-    return buf;
+       STRCAT(buf, p);
+    return (char_u *)buf;
 }
-#endif
+#endif     /* DEBUG */
 
 #ifdef FEAT_MBYTE
 static void mb_decompose __ARGS((int c, int *c1, int *c2, int *c3));
@@ -6591,7 +7066,7 @@ mb_decompose(c, c1, c2, c3)
 {
     decomp_T d;
 
-    if (c >= 0x4b20 && c <= 0xfb4f)
+    if (c >= 0xfb20 && c <= 0xfb4f)
     {
        d = decomp_table[c - 0xfb20];
        *c1 = d.a;
@@ -6871,6 +7346,7 @@ static regmatch_T *submatch_match;
 static regmmatch_T     *submatch_mmatch;
 static linenr_T                submatch_firstlnum;
 static linenr_T                submatch_maxline;
+static int             submatch_line_lbr;
 #endif
 
 #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) || defined(PROTO)
@@ -6904,6 +7380,7 @@ vim_regsub(rmp, source, dest, copy, magic, backslash)
     reg_match = rmp;
     reg_mmatch = NULL;
     reg_maxline = 0;
+    reg_buf = curbuf;
     return vim_regsub_both(source, dest, copy, magic, backslash);
 }
 #endif
@@ -6940,7 +7417,8 @@ vim_regsub_both(source, dest, copy, magic, backslash)
     int                c;
     int                cc;
     int                no = -1;
-    fptr_T     func = (fptr_T)NULL;
+    fptr_T     func_all = (fptr_T)NULL;
+    fptr_T     func_one = (fptr_T)NULL;
     linenr_T   clnum = 0;      /* init for GCC */
     int                len = 0;        /* init for GCC */
 #ifdef FEAT_EVAL
@@ -6997,6 +7475,7 @@ vim_regsub_both(source, dest, copy, magic, backslash)
            submatch_mmatch = reg_mmatch;
            submatch_firstlnum = reg_firstlnum;
            submatch_maxline = reg_maxline;
+           submatch_line_lbr = reg_line_lbr;
            save_reg_win = reg_win;
            save_ireg_ic = ireg_ic;
            can_f_submatch = TRUE;
@@ -7008,9 +7487,10 @@ vim_regsub_both(source, dest, copy, magic, backslash)
 
                for (s = eval_result; *s != NUL; mb_ptr_adv(s))
                {
-                   /* Change NL to CR, so that it becomes a line break.
+                   /* Change NL to CR, so that it becomes a line break,
+                    * unless called from vim_regexec_nl().
                     * Skip over a backslashed character. */
-                   if (*s == NL)
+                   if (*s == NL && !submatch_line_lbr)
                        *s = CAR;
                    else if (*s == '\\' && s[1] != NUL)
                    {
@@ -7019,8 +7499,9 @@ vim_regsub_both(source, dest, copy, magic, backslash)
                         * :s/abc\\\ndef/\="aaa\\\nbbb"/  on text:
                         *   abc\
                         *   def
+                        * Not when called from vim_regexec_nl().
                         */
-                       if (*s == NL)
+                       if (*s == NL && !submatch_line_lbr)
                            *s = CAR;
                        had_backslash = TRUE;
                    }
@@ -7043,6 +7524,7 @@ vim_regsub_both(source, dest, copy, magic, backslash)
            reg_mmatch = submatch_mmatch;
            reg_firstlnum = submatch_firstlnum;
            reg_maxline = submatch_maxline;
+           reg_line_lbr = submatch_line_lbr;
            reg_win = save_reg_win;
            ireg_ic = save_ireg_ic;
            can_f_submatch = FALSE;
@@ -7069,16 +7551,16 @@ vim_regsub_both(source, dest, copy, magic, backslash)
            {
                switch (*src++)
                {
-               case 'u':   func = (fptr_T)do_upper;
+               case 'u':   func_one = (fptr_T)do_upper;
                            continue;
-               case 'U':   func = (fptr_T)do_Upper;
+               case 'U':   func_all = (fptr_T)do_Upper;
                            continue;
-               case 'l':   func = (fptr_T)do_lower;
+               case 'l':   func_one = (fptr_T)do_lower;
                            continue;
-               case 'L':   func = (fptr_T)do_Lower;
+               case 'L':   func_all = (fptr_T)do_Lower;
                            continue;
                case 'e':
-               case 'E':   func = (fptr_T)NULL;
+               case 'E':   func_one = func_all = (fptr_T)NULL;
                            continue;
                }
            }
@@ -7131,11 +7613,14 @@ vim_regsub_both(source, dest, copy, magic, backslash)
 #endif
 
            /* Write to buffer, if copy is set. */
-           if (func == (fptr_T)NULL)   /* just copy */
-               cc = c;
-           else
+           if (func_one != (fptr_T)NULL)
                /* Turbo C complains without the typecast */
-               func = (fptr_T)(func(&cc, c));
+               func_one = (fptr_T)(func_one(&cc, c));
+           else if (func_all != (fptr_T)NULL)
+               /* Turbo C complains without the typecast */
+               func_all = (fptr_T)(func_all(&cc, c));
+           else /* just copy */
+               cc = c;
 
 #ifdef FEAT_MBYTE
            if (has_mbyte)
@@ -7246,11 +7731,14 @@ vim_regsub_both(source, dest, copy, magic, backslash)
 #endif
                                c = *s;
 
-                           if (func == (fptr_T)NULL)   /* just copy */
-                               cc = c;
-                           else
+                           if (func_one != (fptr_T)NULL)
+                               /* Turbo C complains without the typecast */
+                               func_one = (fptr_T)(func_one(&cc, c));
+                           else if (func_all != (fptr_T)NULL)
                                /* Turbo C complains without the typecast */
-                               func = (fptr_T)(func(&cc, c));
+                               func_all = (fptr_T)(func_all(&cc, c));
+                           else /* just copy */
+                               cc = c;
 
 #ifdef FEAT_MBYTE
                            if (has_mbyte)
@@ -7411,3 +7899,192 @@ reg_submatch(no)
     return retval;
 }
 #endif
+
+static regengine_T bt_regengine =
+{
+    bt_regcomp,
+    bt_regfree,
+    bt_regexec,
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+       || defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+    bt_regexec_nl,
+#endif
+    bt_regexec_multi
+#ifdef DEBUG
+    ,(char_u *)""
+#endif
+};
+
+
+#include "regexp_nfa.c"
+
+static regengine_T nfa_regengine =
+{
+    nfa_regcomp,
+    nfa_regfree,
+    nfa_regexec,
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+       || defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+    nfa_regexec_nl,
+#endif
+    nfa_regexec_multi
+#ifdef DEBUG
+    ,(char_u *)""
+#endif
+};
+
+/* Which regexp engine to use? Needed for vim_regcomp().
+ * Must match with 'regexpengine'. */
+static int regexp_engine = 0;
+#define            AUTOMATIC_ENGINE    0
+#define            BACKTRACKING_ENGINE 1
+#define            NFA_ENGINE          2
+#ifdef DEBUG
+static char_u regname[][30] = {
+                   "AUTOMATIC Regexp Engine",
+                   "BACKTRACKING Regexp Engine",
+                   "NFA Regexp Engine"
+                           };
+#endif
+
+/*
+ * Compile a regular expression into internal code.
+ * Returns the program in allocated memory.
+ * Use vim_regfree() to free the memory.
+ * Returns NULL for an error.
+ */
+    regprog_T *
+vim_regcomp(expr_arg, re_flags)
+    char_u     *expr_arg;
+    int                re_flags;
+{
+    regprog_T   *prog = NULL;
+    char_u     *expr = expr_arg;
+
+    regexp_engine = p_re;
+
+    /* Check for prefix "\%#=", that sets the regexp engine */
+    if (STRNCMP(expr, "\\%#=", 4) == 0)
+    {
+       int newengine = expr[4] - '0';
+
+       if (newengine == AUTOMATIC_ENGINE
+           || newengine == BACKTRACKING_ENGINE
+           || newengine == NFA_ENGINE)
+       {
+           regexp_engine = expr[4] - '0';
+           expr += 5;
+#ifdef DEBUG
+           EMSG3("New regexp mode selected (%d): %s", regexp_engine,
+                                                   regname[newengine]);
+#endif
+       }
+       else
+       {
+           EMSG(_("E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be used "));
+           regexp_engine = AUTOMATIC_ENGINE;
+       }
+    }
+#ifdef DEBUG
+    bt_regengine.expr = expr;
+    nfa_regengine.expr = expr;
+#endif
+
+    /*
+     * First try the NFA engine, unless backtracking was requested.
+     */
+    if (regexp_engine != BACKTRACKING_ENGINE)
+        prog = nfa_regengine.regcomp(expr, re_flags);
+    else
+       prog = bt_regengine.regcomp(expr, re_flags);
+
+    if (prog == NULL)      /* error compiling regexp with initial engine */
+    {
+#ifdef BT_REGEXP_DEBUG_LOG
+       if (regexp_engine != BACKTRACKING_ENGINE)   /* debugging log for NFA */
+       {
+           FILE *f;
+           f = fopen(BT_REGEXP_DEBUG_LOG_NAME, "a");
+           if (f)
+           {
+               fprintf(f, "Syntax error in \"%s\"\n", expr);
+               fclose(f);
+           }
+           else
+               EMSG2("(NFA) Could not open \"%s\" to write !!!",
+                        BT_REGEXP_DEBUG_LOG_NAME);
+       }
+#endif
+       /*
+        * If NFA engine failed, then revert to the backtracking engine.
+        * Except when there was a syntax error, which was properly handled by
+        * NFA engine.
+        */
+       if (regexp_engine == AUTOMATIC_ENGINE)
+           prog = bt_regengine.regcomp(expr, re_flags);
+    }
+
+    return prog;
+}
+
+/*
+ * Free a compiled regexp program, returned by vim_regcomp().
+ */
+    void
+vim_regfree(prog)
+    regprog_T   *prog;
+{
+    if (prog != NULL)
+       prog->engine->regfree(prog);
+}
+
+/*
+ * Match a regexp against a string.
+ * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+ * Uses curbuf for line count and 'iskeyword'.
+ *
+ * Return TRUE if there is a match, FALSE if not.
+ */
+    int
+vim_regexec(rmp, line, col)
+    regmatch_T *rmp;
+    char_u      *line;  /* string to match against */
+    colnr_T     col;    /* column to start looking for match */
+{
+    return rmp->regprog->engine->regexec(rmp, line, col);
+}
+
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+       || defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+/*
+ * Like vim_regexec(), but consider a "\n" in "line" to be a line break.
+ */
+    int
+vim_regexec_nl(rmp, line, col)
+    regmatch_T *rmp;
+    char_u *line;
+    colnr_T col;
+{
+    return rmp->regprog->engine->regexec_nl(rmp, line, col);
+}
+#endif
+
+/*
+ * Match a regexp against multiple lines.
+ * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+ * Uses curbuf for line count and 'iskeyword'.
+ *
+ * Return zero if there is no match.  Return number of lines contained in the
+ * match otherwise.
+ */
+    long
+vim_regexec_multi(rmp, win, buf, lnum, col, tm)
+    regmmatch_T *rmp;
+    win_T       *win;           /* window in which to search or NULL */
+    buf_T       *buf;           /* buffer in which to search */
+    linenr_T    lnum;           /* nr of line to start looking for match */
+    colnr_T     col;            /* column to start looking for match */
+    proftime_T *tm;            /* timeout limit or NULL */
+{
+    return rmp->regprog->engine->regexec_multi(rmp, win, buf, lnum, col, tm);
+}
index 09c8d0c..84e8d19 100644 (file)
 #define NSUBEXP  10
 
 /*
+ * In the NFA engine: how many braces are allowed.
+ * TODO(RE): Use dynamic memory allocation instead of static, like here
+ */
+#define NFA_MAX_BRACES 20
+
+typedef struct regengine regengine_T;
+
+/*
  * Structure returned by vim_regcomp() to pass on to vim_regexec().
+ * This is the general structure. For the actual matcher, two specific
+ * structures are used. See code below.
+ */
+typedef struct regprog
+{
+    regengine_T                *engine;
+    unsigned           regflags;
+} regprog_T;
+
+/*
+ * Structure used by the back track matcher.
  * These fields are only to be used in regexp.c!
- * See regep.c for an explanation.
+ * See regexp.c for an explanation.
  */
 typedef struct
 {
+    /* These two members implement regprog_T */
+    regengine_T                *engine;
+    unsigned           regflags;
+
     int                        regstart;
     char_u             reganch;
     char_u             *regmust;
     int                        regmlen;
-    unsigned           regflags;
+#ifdef FEAT_SYN_HL
     char_u             reghasz;
-    char_u             program[1];             /* actually longer.. */
-} regprog_T;
+#endif
+    char_u             program[1];     /* actually longer.. */
+} bt_regprog_T;
+
+/*
+ * Structure representing a NFA state.
+ * A NFA state may have no outgoing edge, when it is a NFA_MATCH state.
+ */
+typedef struct nfa_state nfa_state_T;
+struct nfa_state
+{
+    int                        c;
+    nfa_state_T                *out;
+    nfa_state_T                *out1;
+    int                        id;
+    int                        lastlist[2]; /* 0: normal, 1: recursive */
+    int                        val;
+};
+
+/*
+ * Structure used by the NFA matcher.
+ */
+typedef struct
+{
+    /* These two members implement regprog_T */
+    regengine_T                *engine;
+    unsigned           regflags;
+
+    nfa_state_T                *start;         /* points into state[] */
+
+    int                        reganch;        /* pattern starts with ^ */
+    int                        regstart;       /* char at start of pattern */
+    char_u             *match_text;    /* plain text to match with */
+
+    int                        has_zend;       /* pattern contains \ze */
+    int                        has_backref;    /* pattern contains \1 .. \9 */
+#ifdef FEAT_SYN_HL
+    int                        reghasz;
+#endif
+#ifdef DEBUG
+    char_u             *pattern;
+#endif
+    int                        nsubexp;        /* number of () */
+    int                        nstate;
+    nfa_state_T                state[1];       /* actually longer.. */
+} nfa_regprog_T;
 
 /*
  * Structure to be used for single-line matching.
@@ -78,4 +145,19 @@ typedef struct
     char_u             *matches[NSUBEXP];
 } reg_extmatch_T;
 
+struct regengine
+{
+    regprog_T  *(*regcomp)(char_u*, int);
+    void       (*regfree)(regprog_T *);
+    int                (*regexec)(regmatch_T*, char_u*, colnr_T);
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+       || defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+    int                (*regexec_nl)(regmatch_T*, char_u*, colnr_T);
+#endif
+    long       (*regexec_multi)(regmmatch_T*, win_T*, buf_T*, linenr_T, colnr_T, proftime_T*);
+#ifdef DEBUG
+    char_u     *expr;
+#endif
+};
+
 #endif /* _REGEXP_H */
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
new file mode 100644 (file)
index 0000000..35b42ef
--- /dev/null
@@ -0,0 +1,6787 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * NFA regular expression implementation.
+ *
+ * This file is included in "regexp.c".
+ */
+
+/*
+ * Logging of NFA engine.
+ *
+ * The NFA engine can write four log files:
+ * - Error log: Contains NFA engine's fatal errors.
+ * - Dump log: Contains compiled NFA state machine's information.
+ * - Run log: Contains information of matching procedure.
+ * - Debug log: Contains detailed information of matching procedure. Can be
+ *   disabled by undefining NFA_REGEXP_DEBUG_LOG.
+ * The first one can also be used without debug mode.
+ * The last three are enabled when compiled as debug mode and individually
+ * disabled by commenting them out.
+ * The log files can get quite big!
+ * Do disable all of this when compiling Vim for debugging, undefine DEBUG in
+ * regexp.c
+ */
+#ifdef DEBUG
+# define NFA_REGEXP_ERROR_LOG  "nfa_regexp_error.log"
+# define ENABLE_LOG
+# define NFA_REGEXP_DUMP_LOG   "nfa_regexp_dump.log"
+# define NFA_REGEXP_RUN_LOG    "nfa_regexp_run.log"
+# define NFA_REGEXP_DEBUG_LOG  "nfa_regexp_debug.log"
+#endif
+
+enum
+{
+    NFA_SPLIT = -1024,
+    NFA_MATCH,
+    NFA_SKIP_CHAR,                 /* matches a 0-length char */
+
+    NFA_START_COLL,                /* [abc] start */
+    NFA_END_COLL,                  /* [abc] end */
+    NFA_START_NEG_COLL,                    /* [^abc] start */
+    NFA_END_NEG_COLL,              /* [^abc] end (postfix only) */
+    NFA_RANGE,                     /* range of the two previous items
+                                    * (postfix only) */
+    NFA_RANGE_MIN,                 /* low end of a range  */
+    NFA_RANGE_MAX,                 /* high end of a range  */
+
+    NFA_CONCAT,                            /* concatenate two previous items (postfix
+                                    * only) */
+    NFA_OR,                        /* \| (postfix only) */
+    NFA_STAR,                      /* greedy * (posfix only) */
+    NFA_STAR_NONGREEDY,                    /* non-greedy * (postfix only) */
+    NFA_QUEST,                     /* greedy \? (postfix only) */
+    NFA_QUEST_NONGREEDY,           /* non-greedy \? (postfix only) */
+
+    NFA_BOL,                       /* ^    Begin line */
+    NFA_EOL,                       /* $    End line */
+    NFA_BOW,                       /* \<   Begin word */
+    NFA_EOW,                       /* \>   End word */
+    NFA_BOF,                       /* \%^  Begin file */
+    NFA_EOF,                       /* \%$  End file */
+    NFA_NEWL,
+    NFA_ZSTART,                            /* Used for \zs */
+    NFA_ZEND,                      /* Used for \ze */
+    NFA_NOPEN,                     /* Start of subexpression marked with \%( */
+    NFA_NCLOSE,                            /* End of subexpr. marked with \%( ... \) */
+    NFA_START_INVISIBLE,
+    NFA_START_INVISIBLE_FIRST,
+    NFA_START_INVISIBLE_NEG,
+    NFA_START_INVISIBLE_NEG_FIRST,
+    NFA_START_INVISIBLE_BEFORE,
+    NFA_START_INVISIBLE_BEFORE_FIRST,
+    NFA_START_INVISIBLE_BEFORE_NEG,
+    NFA_START_INVISIBLE_BEFORE_NEG_FIRST,
+    NFA_START_PATTERN,
+    NFA_END_INVISIBLE,
+    NFA_END_INVISIBLE_NEG,
+    NFA_END_PATTERN,
+    NFA_COMPOSING,                 /* Next nodes in NFA are part of the
+                                      composing multibyte char */
+    NFA_END_COMPOSING,             /* End of a composing char in the NFA */
+    NFA_OPT_CHARS,                 /* \%[abc] */
+
+    /* The following are used only in the postfix form, not in the NFA */
+    NFA_PREV_ATOM_NO_WIDTH,        /* Used for \@= */
+    NFA_PREV_ATOM_NO_WIDTH_NEG,            /* Used for \@! */
+    NFA_PREV_ATOM_JUST_BEFORE,     /* Used for \@<= */
+    NFA_PREV_ATOM_JUST_BEFORE_NEG,  /* Used for \@<! */
+    NFA_PREV_ATOM_LIKE_PATTERN,            /* Used for \@> */
+
+    NFA_BACKREF1,                  /* \1 */
+    NFA_BACKREF2,                  /* \2 */
+    NFA_BACKREF3,                  /* \3 */
+    NFA_BACKREF4,                  /* \4 */
+    NFA_BACKREF5,                  /* \5 */
+    NFA_BACKREF6,                  /* \6 */
+    NFA_BACKREF7,                  /* \7 */
+    NFA_BACKREF8,                  /* \8 */
+    NFA_BACKREF9,                  /* \9 */
+#ifdef FEAT_SYN_HL
+    NFA_ZREF1,                     /* \z1 */
+    NFA_ZREF2,                     /* \z2 */
+    NFA_ZREF3,                     /* \z3 */
+    NFA_ZREF4,                     /* \z4 */
+    NFA_ZREF5,                     /* \z5 */
+    NFA_ZREF6,                     /* \z6 */
+    NFA_ZREF7,                     /* \z7 */
+    NFA_ZREF8,                     /* \z8 */
+    NFA_ZREF9,                     /* \z9 */
+#endif
+    NFA_SKIP,                      /* Skip characters */
+
+    NFA_MOPEN,
+    NFA_MOPEN1,
+    NFA_MOPEN2,
+    NFA_MOPEN3,
+    NFA_MOPEN4,
+    NFA_MOPEN5,
+    NFA_MOPEN6,
+    NFA_MOPEN7,
+    NFA_MOPEN8,
+    NFA_MOPEN9,
+
+    NFA_MCLOSE,
+    NFA_MCLOSE1,
+    NFA_MCLOSE2,
+    NFA_MCLOSE3,
+    NFA_MCLOSE4,
+    NFA_MCLOSE5,
+    NFA_MCLOSE6,
+    NFA_MCLOSE7,
+    NFA_MCLOSE8,
+    NFA_MCLOSE9,
+
+#ifdef FEAT_SYN_HL
+    NFA_ZOPEN,
+    NFA_ZOPEN1,
+    NFA_ZOPEN2,
+    NFA_ZOPEN3,
+    NFA_ZOPEN4,
+    NFA_ZOPEN5,
+    NFA_ZOPEN6,
+    NFA_ZOPEN7,
+    NFA_ZOPEN8,
+    NFA_ZOPEN9,
+
+    NFA_ZCLOSE,
+    NFA_ZCLOSE1,
+    NFA_ZCLOSE2,
+    NFA_ZCLOSE3,
+    NFA_ZCLOSE4,
+    NFA_ZCLOSE5,
+    NFA_ZCLOSE6,
+    NFA_ZCLOSE7,
+    NFA_ZCLOSE8,
+    NFA_ZCLOSE9,
+#endif
+
+    /* NFA_FIRST_NL */
+    NFA_ANY,           /*      Match any one character. */
+    NFA_IDENT,         /*      Match identifier char */
+    NFA_SIDENT,                /*      Match identifier char but no digit */
+    NFA_KWORD,         /*      Match keyword char */
+    NFA_SKWORD,                /*      Match word char but no digit */
+    NFA_FNAME,         /*      Match file name char */
+    NFA_SFNAME,                /*      Match file name char but no digit */
+    NFA_PRINT,         /*      Match printable char */
+    NFA_SPRINT,                /*      Match printable char but no digit */
+    NFA_WHITE,         /*      Match whitespace char */
+    NFA_NWHITE,                /*      Match non-whitespace char */
+    NFA_DIGIT,         /*      Match digit char */
+    NFA_NDIGIT,                /*      Match non-digit char */
+    NFA_HEX,           /*      Match hex char */
+    NFA_NHEX,          /*      Match non-hex char */
+    NFA_OCTAL,         /*      Match octal char */
+    NFA_NOCTAL,                /*      Match non-octal char */
+    NFA_WORD,          /*      Match word char */
+    NFA_NWORD,         /*      Match non-word char */
+    NFA_HEAD,          /*      Match head char */
+    NFA_NHEAD,         /*      Match non-head char */
+    NFA_ALPHA,         /*      Match alpha char */
+    NFA_NALPHA,                /*      Match non-alpha char */
+    NFA_LOWER,         /*      Match lowercase char */
+    NFA_NLOWER,                /*      Match non-lowercase char */
+    NFA_UPPER,         /*      Match uppercase char */
+    NFA_NUPPER,                /*      Match non-uppercase char */
+
+    NFA_CURSOR,                /*      Match cursor pos */
+    NFA_LNUM,          /*      Match line number */
+    NFA_LNUM_GT,       /*      Match > line number */
+    NFA_LNUM_LT,       /*      Match < line number */
+    NFA_COL,           /*      Match cursor column */
+    NFA_COL_GT,                /*      Match > cursor column */
+    NFA_COL_LT,                /*      Match < cursor column */
+    NFA_VCOL,          /*      Match cursor virtual column */
+    NFA_VCOL_GT,       /*      Match > cursor virtual column */
+    NFA_VCOL_LT,       /*      Match < cursor virtual column */
+    NFA_MARK,          /*      Match mark */
+    NFA_MARK_GT,       /*      Match > mark */
+    NFA_MARK_LT,       /*      Match < mark */
+    NFA_VISUAL,                /*      Match Visual area */
+
+    NFA_FIRST_NL = NFA_ANY + ADD_NL,
+    NFA_LAST_NL = NFA_NUPPER + ADD_NL,
+
+    /* Character classes [:alnum:] etc */
+    NFA_CLASS_ALNUM,
+    NFA_CLASS_ALPHA,
+    NFA_CLASS_BLANK,
+    NFA_CLASS_CNTRL,
+    NFA_CLASS_DIGIT,
+    NFA_CLASS_GRAPH,
+    NFA_CLASS_LOWER,
+    NFA_CLASS_PRINT,
+    NFA_CLASS_PUNCT,
+    NFA_CLASS_SPACE,
+    NFA_CLASS_UPPER,
+    NFA_CLASS_XDIGIT,
+    NFA_CLASS_TAB,
+    NFA_CLASS_RETURN,
+    NFA_CLASS_BACKSPACE,
+    NFA_CLASS_ESCAPE
+};
+
+/* Keep in sync with classchars. */
+static int nfa_classcodes[] = {
+    NFA_ANY, NFA_IDENT, NFA_SIDENT, NFA_KWORD,NFA_SKWORD,
+    NFA_FNAME, NFA_SFNAME, NFA_PRINT, NFA_SPRINT,
+    NFA_WHITE, NFA_NWHITE, NFA_DIGIT, NFA_NDIGIT,
+    NFA_HEX, NFA_NHEX, NFA_OCTAL, NFA_NOCTAL,
+    NFA_WORD, NFA_NWORD, NFA_HEAD, NFA_NHEAD,
+    NFA_ALPHA, NFA_NALPHA, NFA_LOWER, NFA_NLOWER,
+    NFA_UPPER, NFA_NUPPER
+};
+
+static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c");
+
+/* NFA regexp \ze operator encountered. */
+static int nfa_has_zend;
+
+/* NFA regexp \1 .. \9 encountered. */
+static int nfa_has_backref;
+
+#ifdef FEAT_SYN_HL
+/* NFA regexp has \z( ), set zsubexpr. */
+static int nfa_has_zsubexpr;
+#endif
+
+/* Number of sub expressions actually being used during execution. 1 if only
+ * the whole match (subexpr 0) is used. */
+static int nfa_nsubexpr;
+
+static int *post_start;  /* holds the postfix form of r.e. */
+static int *post_end;
+static int *post_ptr;
+
+static int nstate;     /* Number of states in the NFA. Also used when
+                        * executing. */
+static int istate;     /* Index in the state vector, used in alloc_state() */
+
+/* If not NULL match must end at this position */
+static save_se_T *nfa_endp = NULL;
+
+/* listid is global, so that it increases on recursive calls to
+ * nfa_regmatch(), which means we don't have to clear the lastlist field of
+ * all the states. */
+static int nfa_listid;
+static int nfa_alt_listid;
+
+/* 0 for first call to nfa_regmatch(), 1 for recursive call. */
+static int nfa_ll_index = 0;
+
+static int nfa_regcomp_start __ARGS((char_u *expr, int re_flags));
+static int nfa_get_reganch __ARGS((nfa_state_T *start, int depth));
+static int nfa_get_regstart __ARGS((nfa_state_T *start, int depth));
+static char_u *nfa_get_match_text __ARGS((nfa_state_T *start));
+static int realloc_post_list __ARGS((void));
+static int nfa_recognize_char_class __ARGS((char_u *start, char_u *end, int extra_newl));
+static int nfa_emit_equi_class __ARGS((int c));
+static int nfa_regatom __ARGS((void));
+static int nfa_regpiece __ARGS((void));
+static int nfa_regconcat __ARGS((void));
+static int nfa_regbranch __ARGS((void));
+static int nfa_reg __ARGS((int paren));
+#ifdef DEBUG
+static void nfa_set_code __ARGS((int c));
+static void nfa_postfix_dump __ARGS((char_u *expr, int retval));
+static void nfa_print_state __ARGS((FILE *debugf, nfa_state_T *state));
+static void nfa_print_state2 __ARGS((FILE *debugf, nfa_state_T *state, garray_T *indent));
+static void nfa_dump __ARGS((nfa_regprog_T *prog));
+#endif
+static int *re2post __ARGS((void));
+static nfa_state_T *alloc_state __ARGS((int c, nfa_state_T *out, nfa_state_T *out1));
+static void st_error __ARGS((int *postfix, int *end, int *p));
+static int nfa_max_width __ARGS((nfa_state_T *startstate, int depth));
+static nfa_state_T *post2nfa __ARGS((int *postfix, int *end, int nfa_calc_size));
+static void nfa_postprocess __ARGS((nfa_regprog_T *prog));
+static int check_char_class __ARGS((int class, int c));
+static void nfa_save_listids __ARGS((nfa_regprog_T *prog, int *list));
+static void nfa_restore_listids __ARGS((nfa_regprog_T *prog, int *list));
+static int nfa_re_num_cmp __ARGS((long_u val, int op, long_u pos));
+static long nfa_regtry __ARGS((nfa_regprog_T *prog, colnr_T col));
+static long nfa_regexec_both __ARGS((char_u *line, colnr_T col));
+static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags));
+static void nfa_regfree __ARGS((regprog_T *prog));
+static int nfa_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+static long nfa_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+static int match_follows __ARGS((nfa_state_T *startstate, int depth));
+static int failure_chance __ARGS((nfa_state_T *state, int depth));
+
+/* helper functions used when doing re2post() ... regatom() parsing */
+#define EMIT(c)        do {                            \
+                   if (post_ptr >= post_end && realloc_post_list() == FAIL) \
+                       return FAIL;            \
+                   *post_ptr++ = c;            \
+               } while (0)
+
+/*
+ * Initialize internal variables before NFA compilation.
+ * Return OK on success, FAIL otherwise.
+ */
+    static int
+nfa_regcomp_start(expr, re_flags)
+    char_u     *expr;
+    int                re_flags;           /* see vim_regcomp() */
+{
+    size_t     postfix_size;
+    int                nstate_max;
+
+    nstate = 0;
+    istate = 0;
+    /* A reasonable estimation for maximum size */
+    nstate_max = (int)(STRLEN(expr) + 1) * 25;
+
+    /* Some items blow up in size, such as [A-z].  Add more space for that.
+     * When it is still not enough realloc_post_list() will be used. */
+    nstate_max += 1000;
+
+    /* Size for postfix representation of expr. */
+    postfix_size = sizeof(int) * nstate_max;
+
+    post_start = (int *)lalloc(postfix_size, TRUE);
+    if (post_start == NULL)
+       return FAIL;
+    post_ptr = post_start;
+    post_end = post_start + nstate_max;
+    nfa_has_zend = FALSE;
+    nfa_has_backref = FALSE;
+
+    /* shared with BT engine */
+    regcomp_start(expr, re_flags);
+
+    return OK;
+}
+
+/*
+ * Figure out if the NFA state list starts with an anchor, must match at start
+ * of the line.
+ */
+    static int
+nfa_get_reganch(start, depth)
+    nfa_state_T *start;
+    int                depth;
+{
+    nfa_state_T *p = start;
+
+    if (depth > 4)
+       return 0;
+
+    while (p != NULL)
+    {
+       switch (p->c)
+       {
+           case NFA_BOL:
+           case NFA_BOF:
+               return 1; /* yes! */
+
+           case NFA_ZSTART:
+           case NFA_ZEND:
+           case NFA_CURSOR:
+           case NFA_VISUAL:
+
+           case NFA_MOPEN:
+           case NFA_MOPEN1:
+           case NFA_MOPEN2:
+           case NFA_MOPEN3:
+           case NFA_MOPEN4:
+           case NFA_MOPEN5:
+           case NFA_MOPEN6:
+           case NFA_MOPEN7:
+           case NFA_MOPEN8:
+           case NFA_MOPEN9:
+           case NFA_NOPEN:
+#ifdef FEAT_SYN_HL
+           case NFA_ZOPEN:
+           case NFA_ZOPEN1:
+           case NFA_ZOPEN2:
+           case NFA_ZOPEN3:
+           case NFA_ZOPEN4:
+           case NFA_ZOPEN5:
+           case NFA_ZOPEN6:
+           case NFA_ZOPEN7:
+           case NFA_ZOPEN8:
+           case NFA_ZOPEN9:
+#endif
+               p = p->out;
+               break;
+
+           case NFA_SPLIT:
+               return nfa_get_reganch(p->out, depth + 1)
+                                      && nfa_get_reganch(p->out1, depth + 1);
+
+           default:
+               return 0; /* noooo */
+       }
+    }
+    return 0;
+}
+
+/*
+ * Figure out if the NFA state list starts with a character which must match
+ * at start of the match.
+ */
+    static int
+nfa_get_regstart(start, depth)
+    nfa_state_T *start;
+    int                depth;
+{
+    nfa_state_T *p = start;
+
+    if (depth > 4)
+       return 0;
+
+    while (p != NULL)
+    {
+       switch (p->c)
+       {
+           /* all kinds of zero-width matches */
+           case NFA_BOL:
+           case NFA_BOF:
+           case NFA_BOW:
+           case NFA_EOW:
+           case NFA_ZSTART:
+           case NFA_ZEND:
+           case NFA_CURSOR:
+           case NFA_VISUAL:
+           case NFA_LNUM:
+           case NFA_LNUM_GT:
+           case NFA_LNUM_LT:
+           case NFA_COL:
+           case NFA_COL_GT:
+           case NFA_COL_LT:
+           case NFA_VCOL:
+           case NFA_VCOL_GT:
+           case NFA_VCOL_LT:
+           case NFA_MARK:
+           case NFA_MARK_GT:
+           case NFA_MARK_LT:
+
+           case NFA_MOPEN:
+           case NFA_MOPEN1:
+           case NFA_MOPEN2:
+           case NFA_MOPEN3:
+           case NFA_MOPEN4:
+           case NFA_MOPEN5:
+           case NFA_MOPEN6:
+           case NFA_MOPEN7:
+           case NFA_MOPEN8:
+           case NFA_MOPEN9:
+           case NFA_NOPEN:
+#ifdef FEAT_SYN_HL
+           case NFA_ZOPEN:
+           case NFA_ZOPEN1:
+           case NFA_ZOPEN2:
+           case NFA_ZOPEN3:
+           case NFA_ZOPEN4:
+           case NFA_ZOPEN5:
+           case NFA_ZOPEN6:
+           case NFA_ZOPEN7:
+           case NFA_ZOPEN8:
+           case NFA_ZOPEN9:
+#endif
+               p = p->out;
+               break;
+
+           case NFA_SPLIT:
+           {
+               int c1 = nfa_get_regstart(p->out, depth + 1);
+               int c2 = nfa_get_regstart(p->out1, depth + 1);
+
+               if (c1 == c2)
+                   return c1; /* yes! */
+               return 0;
+           }
+
+           default:
+               if (p->c > 0)
+                   return p->c; /* yes! */
+               return 0;
+       }
+    }
+    return 0;
+}
+
+/*
+ * Figure out if the NFA state list contains just literal text and nothing
+ * else.  If so return a string in allocated memory with what must match after
+ * regstart.  Otherwise return NULL.
+ */
+    static char_u *
+nfa_get_match_text(start)
+    nfa_state_T *start;
+{
+    nfa_state_T *p = start;
+    int                len = 0;
+    char_u     *ret;
+    char_u     *s;
+
+    if (p->c != NFA_MOPEN)
+       return NULL; /* just in case */
+    p = p->out;
+    while (p->c > 0)
+    {
+       len += MB_CHAR2LEN(p->c);
+       p = p->out;
+    }
+    if (p->c != NFA_MCLOSE || p->out->c != NFA_MATCH)
+       return NULL;
+
+    ret = alloc(len);
+    if (ret != NULL)
+    {
+       len = 0;
+       p = start->out->out; /* skip first char, it goes into regstart */
+       s = ret;
+       while (p->c > 0)
+       {
+#ifdef FEAT_MBYTE
+           if (has_mbyte)
+               s += (*mb_char2bytes)(p->c, s);
+           else
+#endif
+               *s++ = p->c;
+           p = p->out;
+       }
+       *s = NUL;
+    }
+    return ret;
+}
+
+/*
+ * Allocate more space for post_start.  Called when
+ * running above the estimated number of states.
+ */
+    static int
+realloc_post_list()
+{
+    int   nstate_max = (int)(post_end - post_start);
+    int   new_max = nstate_max + 1000;
+    int   *new_start;
+    int          *old_start;
+
+    new_start = (int *)lalloc(new_max * sizeof(int), TRUE);
+    if (new_start == NULL)
+       return FAIL;
+    mch_memmove(new_start, post_start, nstate_max * sizeof(int));
+    old_start = post_start;
+    post_start = new_start;
+    post_ptr = new_start + (post_ptr - old_start);
+    post_end = post_start + new_max;
+    vim_free(old_start);
+    return OK;
+}
+
+/*
+ * Search between "start" and "end" and try to recognize a
+ * character class in expanded form. For example [0-9].
+ * On success, return the id the character class to be emitted.
+ * On failure, return 0 (=FAIL)
+ * Start points to the first char of the range, while end should point
+ * to the closing brace.
+ */
+    static int
+nfa_recognize_char_class(start, end, extra_newl)
+    char_u  *start;
+    char_u  *end;
+    int            extra_newl;
+{
+#   define CLASS_not           0x80
+#   define CLASS_af            0x40
+#   define CLASS_AF            0x20
+#   define CLASS_az            0x10
+#   define CLASS_AZ            0x08
+#   define CLASS_o7            0x04
+#   define CLASS_o9            0x02
+#   define CLASS_underscore    0x01
+
+    int                newl = FALSE;
+    char_u     *p;
+    int                config = 0;
+
+    if (extra_newl == TRUE)
+       newl = TRUE;
+
+    if (*end != ']')
+       return FAIL;
+    p = start;
+    if (*p == '^')
+    {
+       config |= CLASS_not;
+       p++;
+    }
+
+    while (p < end)
+    {
+       if (p + 2 < end && *(p + 1) == '-')
+       {
+           switch (*p)
+           {
+               case '0':
+                   if (*(p + 2) == '9')
+                   {
+                       config |= CLASS_o9;
+                       break;
+                   }
+                   else
+                   if (*(p + 2) == '7')
+                   {
+                       config |= CLASS_o7;
+                       break;
+                   }
+               case 'a':
+                   if (*(p + 2) == 'z')
+                   {
+                       config |= CLASS_az;
+                       break;
+                   }
+                   else
+                   if (*(p + 2) == 'f')
+                   {
+                       config |= CLASS_af;
+                       break;
+                   }
+               case 'A':
+                   if (*(p + 2) == 'Z')
+                   {
+                       config |= CLASS_AZ;
+                       break;
+                   }
+                   else
+                   if (*(p + 2) == 'F')
+                   {
+                       config |= CLASS_AF;
+                       break;
+                   }
+               /* FALLTHROUGH */
+               default:
+                   return FAIL;
+           }
+           p += 3;
+       }
+       else if (p + 1 < end && *p == '\\' && *(p + 1) == 'n')
+       {
+           newl = TRUE;
+           p += 2;
+       }
+       else if (*p == '_')
+       {
+           config |= CLASS_underscore;
+           p ++;
+       }
+       else if (*p == '\n')
+       {
+           newl = TRUE;
+           p ++;
+       }
+       else
+           return FAIL;
+    } /* while (p < end) */
+
+    if (p != end)
+       return FAIL;
+
+    if (newl == TRUE)
+       extra_newl = ADD_NL;
+
+    switch (config)
+    {
+       case CLASS_o9:
+           return extra_newl + NFA_DIGIT;
+       case CLASS_not |  CLASS_o9:
+           return extra_newl + NFA_NDIGIT;
+       case CLASS_af | CLASS_AF | CLASS_o9:
+           return extra_newl + NFA_HEX;
+       case CLASS_not | CLASS_af | CLASS_AF | CLASS_o9:
+           return extra_newl + NFA_NHEX;
+       case CLASS_o7:
+           return extra_newl + NFA_OCTAL;
+       case CLASS_not | CLASS_o7:
+           return extra_newl + NFA_NOCTAL;
+       case CLASS_az | CLASS_AZ | CLASS_o9 | CLASS_underscore:
+           return extra_newl + NFA_WORD;
+       case CLASS_not | CLASS_az | CLASS_AZ | CLASS_o9 | CLASS_underscore:
+           return extra_newl + NFA_NWORD;
+       case CLASS_az | CLASS_AZ | CLASS_underscore:
+           return extra_newl + NFA_HEAD;
+       case CLASS_not | CLASS_az | CLASS_AZ | CLASS_underscore:
+           return extra_newl + NFA_NHEAD;
+       case CLASS_az | CLASS_AZ:
+           return extra_newl + NFA_ALPHA;
+       case CLASS_not | CLASS_az | CLASS_AZ:
+           return extra_newl + NFA_NALPHA;
+       case CLASS_az:
+          return extra_newl + NFA_LOWER;
+       case CLASS_not | CLASS_az:
+           return extra_newl + NFA_NLOWER;
+       case CLASS_AZ:
+           return extra_newl + NFA_UPPER;
+       case CLASS_not | CLASS_AZ:
+           return extra_newl + NFA_NUPPER;
+    }
+    return FAIL;
+}
+
+/*
+ * Produce the bytes for equivalence class "c".
+ * Currently only handles latin1, latin9 and utf-8.
+ * Emits bytes in postfix notation: 'a,b,NFA_OR,c,NFA_OR' is
+ * equivalent to 'a OR b OR c'
+ *
+ * NOTE! When changing this function, also update reg_equi_class()
+ */
+    static int
+nfa_emit_equi_class(c)
+    int            c;
+{
+#define EMIT2(c)   EMIT(c); EMIT(NFA_CONCAT);
+
+#ifdef FEAT_MBYTE
+    if (enc_utf8 || STRCMP(p_enc, "latin1") == 0
+                                        || STRCMP(p_enc, "iso-8859-15") == 0)
+#endif
+    {
+       switch (c)
+       {
+           case 'A': case 0300: case 0301: case 0302:
+           case 0303: case 0304: case 0305:
+                   EMIT2('A');     EMIT2(0300);    EMIT2(0301);
+                   EMIT2(0302);    EMIT2(0303);    EMIT2(0304);
+                   EMIT2(0305);
+                   return OK;
+
+           case 'C': case 0307:
+                   EMIT2('C');     EMIT2(0307);
+                   return OK;
+
+           case 'E': case 0310: case 0311: case 0312: case 0313:
+                   EMIT2('E');     EMIT2(0310);    EMIT2(0311);
+                   EMIT2(0312);    EMIT2(0313);
+                   return OK;
+
+           case 'I': case 0314: case 0315: case 0316: case 0317:
+                   EMIT2('I');     EMIT2(0314);    EMIT2(0315);
+                   EMIT2(0316);    EMIT2(0317);
+                   return OK;
+
+           case 'N': case 0321:
+                   EMIT2('N');     EMIT2(0321);
+                   return OK;
+
+           case 'O': case 0322: case 0323: case 0324: case 0325:
+           case 0326:
+                   EMIT2('O');     EMIT2(0322);    EMIT2(0323);
+                   EMIT2(0324);    EMIT2(0325);    EMIT2(0326);
+                   return OK;
+
+           case 'U': case 0331: case 0332: case 0333: case 0334:
+                   EMIT2('U');     EMIT2(0331);    EMIT2(0332);
+                   EMIT2(0333);    EMIT2(0334);
+                   return OK;
+
+           case 'Y': case 0335:
+                   EMIT2('Y');     EMIT2(0335);
+                   return OK;
+
+           case 'a': case 0340: case 0341: case 0342:
+           case 0343: case 0344: case 0345:
+                   EMIT2('a');     EMIT2(0340);    EMIT2(0341);
+                   EMIT2(0342);    EMIT2(0343);    EMIT2(0344);
+                   EMIT2(0345);
+                   return OK;
+
+           case 'c': case 0347:
+                   EMIT2('c');     EMIT2(0347);
+                   return OK;
+
+           case 'e': case 0350: case 0351: case 0352: case 0353:
+                   EMIT2('e');     EMIT2(0350);    EMIT2(0351);
+                   EMIT2(0352);    EMIT2(0353);
+                   return OK;
+
+           case 'i': case 0354: case 0355: case 0356: case 0357:
+                   EMIT2('i');     EMIT2(0354);    EMIT2(0355);
+                   EMIT2(0356);    EMIT2(0357);
+                   return OK;
+
+           case 'n': case 0361:
+                   EMIT2('n');     EMIT2(0361);
+                   return OK;
+
+           case 'o': case 0362: case 0363: case 0364: case 0365:
+           case 0366:
+                   EMIT2('o');     EMIT2(0362);    EMIT2(0363);
+                   EMIT2(0364);    EMIT2(0365);    EMIT2(0366);
+                   return OK;
+
+           case 'u': case 0371: case 0372: case 0373: case 0374:
+                   EMIT2('u');     EMIT2(0371);    EMIT2(0372);
+                   EMIT2(0373);    EMIT2(0374);
+                   return OK;
+
+           case 'y': case 0375: case 0377:
+                   EMIT2('y');     EMIT2(0375);    EMIT2(0377);
+                   return OK;
+
+           default:
+                   return FAIL;
+       }
+    }
+
+    EMIT(c);
+    return OK;
+#undef EMIT2
+}
+
+/*
+ * Code to parse regular expression.
+ *
+ * We try to reuse parsing functions in regexp.c to
+ * minimize surprise and keep the syntax consistent.
+ */
+
+/*
+ * Parse the lowest level.
+ *
+ * An atom can be one of a long list of items.  Many atoms match one character
+ * in the text.  It is often an ordinary character or a character class.
+ * Braces can be used to make a pattern into an atom.  The "\z(\)" construct
+ * is only for syntax highlighting.
+ *
+ * atom    ::=     ordinary-atom
+ *     or  \( pattern \)
+ *     or  \%( pattern \)
+ *     or  \z( pattern \)
+ */
+    static int
+nfa_regatom()
+{
+    int                c;
+    int                charclass;
+    int                equiclass;
+    int                collclass;
+    int                got_coll_char;
+    char_u     *p;
+    char_u     *endp;
+#ifdef FEAT_MBYTE
+    char_u     *old_regparse = regparse;
+#endif
+    int                extra = 0;
+    int                emit_range;
+    int                negated;
+    int                result;
+    int                startc = -1;
+    int                endc = -1;
+    int                oldstartc = -1;
+
+    c = getchr();
+    switch (c)
+    {
+       case NUL:
+           EMSG_RET_FAIL(_("E865: (NFA) Regexp end encountered prematurely"));
+
+       case Magic('^'):
+           EMIT(NFA_BOL);
+           break;
+
+       case Magic('$'):
+           EMIT(NFA_EOL);
+#if defined(FEAT_SYN_HL) || defined(PROTO)
+           had_eol = TRUE;
+#endif
+           break;
+
+       case Magic('<'):
+           EMIT(NFA_BOW);
+           break;
+
+       case Magic('>'):
+           EMIT(NFA_EOW);
+           break;
+
+       case Magic('_'):
+           c = no_Magic(getchr());
+           if (c == '^')       /* "\_^" is start-of-line */
+           {
+               EMIT(NFA_BOL);
+               break;
+           }
+           if (c == '$')       /* "\_$" is end-of-line */
+           {
+               EMIT(NFA_EOL);
+#if defined(FEAT_SYN_HL) || defined(PROTO)
+               had_eol = TRUE;
+#endif
+               break;
+           }
+
+           extra = ADD_NL;
+
+           /* "\_[" is collection plus newline */
+           if (c == '[')
+               goto collection;
+
+       /* "\_x" is character class plus newline */
+       /*FALLTHROUGH*/
+
+       /*
+        * Character classes.
+        */
+       case Magic('.'):
+       case Magic('i'):
+       case Magic('I'):
+       case Magic('k'):
+       case Magic('K'):
+       case Magic('f'):
+       case Magic('F'):
+       case Magic('p'):
+       case Magic('P'):
+       case Magic('s'):
+       case Magic('S'):
+       case Magic('d'):
+       case Magic('D'):
+       case Magic('x'):
+       case Magic('X'):
+       case Magic('o'):
+       case Magic('O'):
+       case Magic('w'):
+       case Magic('W'):
+       case Magic('h'):
+       case Magic('H'):
+       case Magic('a'):
+       case Magic('A'):
+       case Magic('l'):
+       case Magic('L'):
+       case Magic('u'):
+       case Magic('U'):
+           p = vim_strchr(classchars, no_Magic(c));
+           if (p == NULL)
+           {
+               EMSGN("INTERNAL: Unknown character class char: %ld", c);
+               return FAIL;
+           }
+#ifdef FEAT_MBYTE
+           /* When '.' is followed by a composing char ignore the dot, so that
+            * the composing char is matched here. */
+           if (enc_utf8 && c == Magic('.') && utf_iscomposing(peekchr()))
+           {
+               old_regparse = regparse;
+               c = getchr();
+               goto nfa_do_multibyte;
+           }
+#endif
+           EMIT(nfa_classcodes[p - classchars]);
+           if (extra == ADD_NL)
+           {
+               EMIT(NFA_NEWL);
+               EMIT(NFA_OR);
+               regflags |= RF_HASNL;
+           }
+           break;
+
+       case Magic('n'):
+           if (reg_string)
+               /* In a string "\n" matches a newline character. */
+               EMIT(NL);
+           else
+           {
+               /* In buffer text "\n" matches the end of a line. */
+               EMIT(NFA_NEWL);
+               regflags |= RF_HASNL;
+           }
+           break;
+
+       case Magic('('):
+           if (nfa_reg(REG_PAREN) == FAIL)
+               return FAIL;        /* cascaded error */
+           break;
+
+       case Magic('|'):
+       case Magic('&'):
+       case Magic(')'):
+           EMSGN(_(e_misplaced), no_Magic(c));
+           return FAIL;
+
+       case Magic('='):
+       case Magic('?'):
+       case Magic('+'):
+       case Magic('@'):
+       case Magic('*'):
+       case Magic('{'):
+           /* these should follow an atom, not form an atom */
+           EMSGN(_(e_misplaced), no_Magic(c));
+           return FAIL;
+
+       case Magic('~'):
+           {
+               char_u      *lp;
+
+               /* Previous substitute pattern.
+                * Generated as "\%(pattern\)". */
+               if (reg_prev_sub == NULL)
+               {
+                   EMSG(_(e_nopresub));
+                   return FAIL;
+               }
+               for (lp = reg_prev_sub; *lp != NUL; mb_cptr_adv(lp))
+               {
+                   EMIT(PTR2CHAR(lp));
+                   if (lp != reg_prev_sub)
+                       EMIT(NFA_CONCAT);
+               }
+               EMIT(NFA_NOPEN);
+               break;
+           }
+
+       case Magic('1'):
+       case Magic('2'):
+       case Magic('3'):
+       case Magic('4'):
+       case Magic('5'):
+       case Magic('6'):
+       case Magic('7'):
+       case Magic('8'):
+       case Magic('9'):
+           EMIT(NFA_BACKREF1 + (no_Magic(c) - '1'));
+           nfa_has_backref = TRUE;
+           break;
+
+       case Magic('z'):
+           c = no_Magic(getchr());
+           switch (c)
+           {
+               case 's':
+                   EMIT(NFA_ZSTART);
+                   break;
+               case 'e':
+                   EMIT(NFA_ZEND);
+                   nfa_has_zend = TRUE;
+                   break;
+#ifdef FEAT_SYN_HL
+               case '1':
+               case '2':
+               case '3':
+               case '4':
+               case '5':
+               case '6':
+               case '7':
+               case '8':
+               case '9':
+                   /* \z1...\z9 */
+                   if (reg_do_extmatch != REX_USE)
+                       EMSG_RET_FAIL(_(e_z1_not_allowed));
+                   EMIT(NFA_ZREF1 + (no_Magic(c) - '1'));
+                   /* No need to set nfa_has_backref, the sub-matches don't
+                    * change when \z1 .. \z9 matches or not. */
+                   re_has_z = REX_USE;
+                   break;
+               case '(':
+                   /* \z(  */
+                   if (reg_do_extmatch != REX_SET)
+                       EMSG_RET_FAIL(_(e_z_not_allowed));
+                   if (nfa_reg(REG_ZPAREN) == FAIL)
+                       return FAIL;        /* cascaded error */
+                   re_has_z = REX_SET;
+                   break;
+#endif
+               default:
+                   EMSGN(_("E867: (NFA) Unknown operator '\\z%c'"),
+                                                                no_Magic(c));
+                   return FAIL;
+           }
+           break;
+
+       case Magic('%'):
+           c = no_Magic(getchr());
+           switch (c)
+           {
+               /* () without a back reference */
+               case '(':
+                   if (nfa_reg(REG_NPAREN) == FAIL)
+                       return FAIL;
+                   EMIT(NFA_NOPEN);
+                   break;
+
+               case 'd':   /* %d123 decimal */
+               case 'o':   /* %o123 octal */
+               case 'x':   /* %xab hex 2 */
+               case 'u':   /* %uabcd hex 4 */
+               case 'U':   /* %U1234abcd hex 8 */
+                   {
+                       int nr;
+
+                       switch (c)
+                       {
+                           case 'd': nr = getdecchrs(); break;
+                           case 'o': nr = getoctchrs(); break;
+                           case 'x': nr = gethexchrs(2); break;
+                           case 'u': nr = gethexchrs(4); break;
+                           case 'U': nr = gethexchrs(8); break;
+                           default:  nr = -1; break;
+                       }
+
+                       if (nr < 0)
+                           EMSG2_RET_FAIL(
+                              _("E678: Invalid character after %s%%[dxouU]"),
+                                   reg_magic == MAGIC_ALL);
+                       /* TODO: what if a composing character follows? */
+                       EMIT(nr);
+                   }
+                   break;
+
+               /* Catch \%^ and \%$ regardless of where they appear in the
+                * pattern -- regardless of whether or not it makes sense. */
+               case '^':
+                   EMIT(NFA_BOF);
+                   break;
+
+               case '$':
+                   EMIT(NFA_EOF);
+                   break;
+
+               case '#':
+                   EMIT(NFA_CURSOR);
+                   break;
+
+               case 'V':
+                   EMIT(NFA_VISUAL);
+                   break;
+
+               case '[':
+                   {
+                       int         n;
+
+                       /* \%[abc] */
+                       for (n = 0; (c = peekchr()) != ']'; ++n)
+                       {
+                           if (c == NUL)
+                               EMSG2_RET_FAIL(_(e_missing_sb),
+                                                     reg_magic == MAGIC_ALL);
+                           /* recursive call! */
+                           if (nfa_regatom() == FAIL)
+                               return FAIL;
+                       }
+                       getchr();  /* get the ] */
+                       if (n == 0)
+                           EMSG2_RET_FAIL(_(e_empty_sb),
+                                                     reg_magic == MAGIC_ALL);
+                       EMIT(NFA_OPT_CHARS);
+                       EMIT(n);
+
+                       /* Emit as "\%(\%[abc]\)" to be able to handle
+                        * "\%[abc]*" which would cause the empty string to be
+                        * matched an unlimited number of times. NFA_NOPEN is
+                        * added only once at a position, while NFA_SPLIT is
+                        * added multiple times.  This is more efficient than
+                        * not allowsing NFA_SPLIT multiple times, it is used
+                        * a lot. */
+                       EMIT(NFA_NOPEN);
+                       break;
+                   }
+
+               default:
+                   {
+                       int     n = 0;
+                       int     cmp = c;
+
+                       if (c == '<' || c == '>')
+                           c = getchr();
+                       while (VIM_ISDIGIT(c))
+                       {
+                           n = n * 10 + (c - '0');
+                           c = getchr();
+                       }
+                       if (c == 'l' || c == 'c' || c == 'v')
+                       {
+                           if (c == 'l')
+                               /* \%{n}l  \%{n}<l  \%{n}>l  */
+                               EMIT(cmp == '<' ? NFA_LNUM_LT :
+                                    cmp == '>' ? NFA_LNUM_GT : NFA_LNUM);
+                           else if (c == 'c')
+                               /* \%{n}c  \%{n}<c  \%{n}>c  */
+                               EMIT(cmp == '<' ? NFA_COL_LT :
+                                    cmp == '>' ? NFA_COL_GT : NFA_COL);
+                           else
+                               /* \%{n}v  \%{n}<v  \%{n}>v  */
+                               EMIT(cmp == '<' ? NFA_VCOL_LT :
+                                    cmp == '>' ? NFA_VCOL_GT : NFA_VCOL);
+                           EMIT(n);
+                           break;
+                       }
+                       else if (c == '\'' && n == 0)
+                       {
+                           /* \%'m  \%<'m  \%>'m  */
+                           EMIT(cmp == '<' ? NFA_MARK_LT :
+                                cmp == '>' ? NFA_MARK_GT : NFA_MARK);
+                           EMIT(getchr());
+                           break;
+                       }
+                   }
+                   EMSGN(_("E867: (NFA) Unknown operator '\\%%%c'"),
+                                                                no_Magic(c));
+                   return FAIL;
+           }
+           break;
+
+       case Magic('['):
+collection:
+           /*
+            * [abc]  uses NFA_START_COLL - NFA_END_COLL
+            * [^abc] uses NFA_START_NEG_COLL - NFA_END_NEG_COLL
+            * Each character is produced as a regular state, using
+            * NFA_CONCAT to bind them together.
+            * Besides normal characters there can be:
+            * - character classes  NFA_CLASS_*
+            * - ranges, two characters followed by NFA_RANGE.
+            */
+
+           p = regparse;
+           endp = skip_anyof(p);
+           if (*endp == ']')
+           {
+               /*
+                * Try to reverse engineer character classes. For example,
+                * recognize that [0-9] stands for  \d and [A-Za-z_] with \h,
+                * and perform the necessary substitutions in the NFA.
+                */
+               result = nfa_recognize_char_class(regparse, endp,
+                                                           extra == ADD_NL);
+               if (result != FAIL)
+               {
+                   if (result >= NFA_DIGIT && result <= NFA_NUPPER)
+                       EMIT(result);
+                   else        /* must be char class + newline */
+                   {
+                       EMIT(result - ADD_NL);
+                       EMIT(NFA_NEWL);
+                       EMIT(NFA_OR);
+                   }
+                   regparse = endp;
+                   mb_ptr_adv(regparse);
+                   return OK;
+               }
+               /*
+                * Failed to recognize a character class. Use the simple
+                * version that turns [abc] into 'a' OR 'b' OR 'c'
+                */
+               startc = endc = oldstartc = -1;
+               negated = FALSE;
+               if (*regparse == '^')                   /* negated range */
+               {
+                   negated = TRUE;
+                   mb_ptr_adv(regparse);
+                   EMIT(NFA_START_NEG_COLL);
+               }
+               else
+                   EMIT(NFA_START_COLL);
+               if (*regparse == '-')
+               {
+                   startc = '-';
+                   EMIT(startc);
+                   EMIT(NFA_CONCAT);
+                   mb_ptr_adv(regparse);
+               }
+               /* Emit the OR branches for each character in the [] */
+               emit_range = FALSE;
+               while (regparse < endp)
+               {
+                   oldstartc = startc;
+                   startc = -1;
+                   got_coll_char = FALSE;
+                   if (*regparse == '[')
+                   {
+                       /* Check for [: :], [= =], [. .] */
+                       equiclass = collclass = 0;
+                       charclass = get_char_class(&regparse);
+                       if (charclass == CLASS_NONE)
+                       {
+                           equiclass = get_equi_class(&regparse);
+                           if (equiclass == 0)
+                               collclass = get_coll_element(&regparse);
+                       }
+
+                       /* Character class like [:alpha:]  */
+                       if (charclass != CLASS_NONE)
+                       {
+                           switch (charclass)
+                           {
+                               case CLASS_ALNUM:
+                                   EMIT(NFA_CLASS_ALNUM);
+                                   break;
+                               case CLASS_ALPHA:
+                                   EMIT(NFA_CLASS_ALPHA);
+                                   break;
+                               case CLASS_BLANK:
+                                   EMIT(NFA_CLASS_BLANK);
+                                   break;
+                               case CLASS_CNTRL:
+                                   EMIT(NFA_CLASS_CNTRL);
+                                   break;
+                               case CLASS_DIGIT:
+                                   EMIT(NFA_CLASS_DIGIT);
+                                   break;
+                               case CLASS_GRAPH:
+                                   EMIT(NFA_CLASS_GRAPH);
+                                   break;
+                               case CLASS_LOWER:
+                                   EMIT(NFA_CLASS_LOWER);
+                                   break;
+                               case CLASS_PRINT:
+                                   EMIT(NFA_CLASS_PRINT);
+                                   break;
+                               case CLASS_PUNCT:
+                                   EMIT(NFA_CLASS_PUNCT);
+                                   break;
+                               case CLASS_SPACE:
+                                   EMIT(NFA_CLASS_SPACE);
+                                   break;
+                               case CLASS_UPPER:
+                                   EMIT(NFA_CLASS_UPPER);
+                                   break;
+                               case CLASS_XDIGIT:
+                                   EMIT(NFA_CLASS_XDIGIT);
+                                   break;
+                               case CLASS_TAB:
+                                   EMIT(NFA_CLASS_TAB);
+                                   break;
+                               case CLASS_RETURN:
+                                   EMIT(NFA_CLASS_RETURN);
+                                   break;
+                               case CLASS_BACKSPACE:
+                                   EMIT(NFA_CLASS_BACKSPACE);
+                                   break;
+                               case CLASS_ESCAPE:
+                                   EMIT(NFA_CLASS_ESCAPE);
+                                   break;
+                           }
+                           EMIT(NFA_CONCAT);
+                           continue;
+                       }
+                       /* Try equivalence class [=a=] and the like */
+                       if (equiclass != 0)
+                       {
+                           result = nfa_emit_equi_class(equiclass);
+                           if (result == FAIL)
+                           {
+                               /* should never happen */
+                               EMSG_RET_FAIL(_("E868: Error building NFA with equivalence class!"));
+                           }
+                           continue;
+                       }
+                       /* Try collating class like [. .]  */
+                       if (collclass != 0)
+                       {
+                           startc = collclass;  /* allow [.a.]-x as a range */
+                           /* Will emit the proper atom at the end of the
+                            * while loop. */
+                       }
+                   }
+                   /* Try a range like 'a-x' or '\t-z'. Also allows '-' as a
+                    * start character. */
+                   if (*regparse == '-' && oldstartc != -1)
+                   {
+                       emit_range = TRUE;
+                       startc = oldstartc;
+                       mb_ptr_adv(regparse);
+                       continue;           /* reading the end of the range */
+                   }
+
+                   /* Now handle simple and escaped characters.
+                    * Only "\]", "\^", "\]" and "\\" are special in Vi.  Vim
+                    * accepts "\t", "\e", etc., but only when the 'l' flag in
+                    * 'cpoptions' is not included.
+                    * Posix doesn't recognize backslash at all.
+                    */
+                   if (*regparse == '\\'
+                           && !reg_cpo_bsl
+                           && regparse + 1 <= endp
+                           && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
+                               || (!reg_cpo_lit
+                                   && vim_strchr(REGEXP_ABBR, regparse[1])
+                                                                     != NULL)
+                           )
+                       )
+                   {
+                       mb_ptr_adv(regparse);
+
+                       if (*regparse == 'n')
+                           startc = reg_string ? NL : NFA_NEWL;
+                       else
+                           if  (*regparse == 'd'
+                                   || *regparse == 'o'
+                                   || *regparse == 'x'
+                                   || *regparse == 'u'
+                                   || *regparse == 'U'
+                               )
+                           {
+                               /* TODO(RE) This needs more testing */
+                               startc = coll_get_char();
+                               got_coll_char = TRUE;
+                               mb_ptr_back(old_regparse, regparse);
+                           }
+                           else
+                           {
+                               /* \r,\t,\e,\b */
+                               startc = backslash_trans(*regparse);
+                           }
+                   }
+
+                   /* Normal printable char */
+                   if (startc == -1)
+                       startc = PTR2CHAR(regparse);
+
+                   /* Previous char was '-', so this char is end of range. */
+                   if (emit_range)
+                   {
+                       endc = startc;
+                       startc = oldstartc;
+                       if (startc > endc)
+                           EMSG_RET_FAIL(_(e_invrange));
+
+                       if (endc > startc + 2)
+                       {
+                           /* Emit a range instead of the sequence of
+                            * individual characters. */
+                           if (startc == 0)
+                               /* \x00 is translated to \x0a, start at \x01. */
+                               EMIT(1);
+                           else
+                               --post_ptr; /* remove NFA_CONCAT */
+                           EMIT(endc);
+                           EMIT(NFA_RANGE);
+                           EMIT(NFA_CONCAT);
+                       }
+                       else
+#ifdef FEAT_MBYTE
+                            if (has_mbyte && ((*mb_char2len)(startc) > 1
+                                   || (*mb_char2len)(endc) > 1))
+                       {
+                           /* Emit the characters in the range.
+                            * "startc" was already emitted, so skip it.
+                            * */
+                           for (c = startc + 1; c <= endc; c++)
+                           {
+                               EMIT(c);
+                               EMIT(NFA_CONCAT);
+                           }
+                       }
+                       else
+#endif
+                       {
+#ifdef EBCDIC
+                           int alpha_only = FALSE;
+
+                           /* for alphabetical range skip the gaps
+                            * 'i'-'j', 'r'-'s', 'I'-'J' and 'R'-'S'. */
+                           if (isalpha(startc) && isalpha(endc))
+                               alpha_only = TRUE;
+#endif
+                           /* Emit the range. "startc" was already emitted, so
+                            * skip it. */
+                           for (c = startc + 1; c <= endc; c++)
+#ifdef EBCDIC
+                               if (!alpha_only || isalpha(startc))
+#endif
+                               {
+                                   EMIT(c);
+                                   EMIT(NFA_CONCAT);
+                               }
+                       }
+                       emit_range = FALSE;
+                       startc = -1;
+                   }
+                   else
+                   {
+                       /* This char (startc) is not part of a range. Just
+                        * emit it.
+                        * Normally, simply emit startc. But if we get char
+                        * code=0 from a collating char, then replace it with
+                        * 0x0a.
+                        * This is needed to completely mimic the behaviour of
+                        * the backtracking engine. */
+                       if (startc == NFA_NEWL)
+                       {
+                           /* Line break can't be matched as part of the
+                            * collection, add an OR below. But not for negated
+                            * range. */
+                           if (!negated)
+                               extra = ADD_NL;
+                       }
+                       else
+                       {
+                           if (got_coll_char == TRUE && startc == 0)
+                               EMIT(0x0a);
+                           else
+                               EMIT(startc);
+                           EMIT(NFA_CONCAT);
+                       }
+                   }
+
+                   mb_ptr_adv(regparse);
+               } /* while (p < endp) */
+
+               mb_ptr_back(old_regparse, regparse);
+               if (*regparse == '-')       /* if last, '-' is just a char */
+               {
+                   EMIT('-');
+                   EMIT(NFA_CONCAT);
+               }
+
+               /* skip the trailing ] */
+               regparse = endp;
+               mb_ptr_adv(regparse);
+
+               /* Mark end of the collection. */
+               if (negated == TRUE)
+                   EMIT(NFA_END_NEG_COLL);
+               else
+                   EMIT(NFA_END_COLL);
+
+               /* \_[] also matches \n but it's not negated */
+               if (extra == ADD_NL)
+               {
+                   EMIT(reg_string ? NL : NFA_NEWL);
+                   EMIT(NFA_OR);
+               }
+
+               return OK;
+           } /* if exists closing ] */
+
+           if (reg_strict)
+               EMSG_RET_FAIL(_(e_missingbracket));
+           /* FALLTHROUGH */
+
+       default:
+           {
+#ifdef FEAT_MBYTE
+               int     plen;
+
+nfa_do_multibyte:
+               /* plen is length of current char with composing chars */
+               if (enc_utf8 && ((*mb_char2len)(c)
+                           != (plen = (*mb_ptr2len)(old_regparse))
+                                                      || utf_iscomposing(c)))
+               {
+                   int i = 0;
+
+                   /* A base character plus composing characters, or just one
+                    * or more composing characters.
+                    * This requires creating a separate atom as if enclosing
+                    * the characters in (), where NFA_COMPOSING is the ( and
+                    * NFA_END_COMPOSING is the ). Note that right now we are
+                    * building the postfix form, not the NFA itself;
+                    * a composing char could be: a, b, c, NFA_COMPOSING
+                    * where 'b' and 'c' are chars with codes > 256. */
+                   for (;;)
+                   {
+                       EMIT(c);
+                       if (i > 0)
+                           EMIT(NFA_CONCAT);
+                       if ((i += utf_char2len(c)) >= plen)
+                           break;
+                       c = utf_ptr2char(old_regparse + i);
+                   }
+                   EMIT(NFA_COMPOSING);
+                   regparse = old_regparse + plen;
+               }
+               else
+#endif
+               {
+                   c = no_Magic(c);
+                   EMIT(c);
+               }
+               return OK;
+           }
+    }
+
+    return OK;
+}
+
+/*
+ * Parse something followed by possible [*+=].
+ *
+ * A piece is an atom, possibly followed by a multi, an indication of how many
+ * times the atom can be matched.  Example: "a*" matches any sequence of "a"
+ * characters: "", "a", "aa", etc.
+ *
+ * piece   ::=     atom
+ *     or  atom  multi
+ */
+    static int
+nfa_regpiece()
+{
+    int                i;
+    int                op;
+    int                ret;
+    long       minval, maxval;
+    int                greedy = TRUE;      /* Braces are prefixed with '-' ? */
+    parse_state_T old_state;
+    parse_state_T new_state;
+    int                c2;
+    int                old_post_pos;
+    int                my_post_start;
+    int                quest;
+
+    /* Save the current parse state, so that we can use it if <atom>{m,n} is
+     * next. */
+    save_parse_state(&old_state);
+
+    /* store current pos in the postfix form, for \{m,n} involving 0s */
+    my_post_start = (int)(post_ptr - post_start);
+
+    ret = nfa_regatom();
+    if (ret == FAIL)
+       return FAIL;        /* cascaded error */
+
+    op = peekchr();
+    if (re_multi_type(op) == NOT_MULTI)
+       return OK;
+
+    skipchr();
+    switch (op)
+    {
+       case Magic('*'):
+           EMIT(NFA_STAR);
+           break;
+
+       case Magic('+'):
+           /*
+            * Trick: Normally, (a*)\+ would match the whole input "aaa".  The
+            * first and only submatch would be "aaa". But the backtracking
+            * engine interprets the plus as "try matching one more time", and
+            * a* matches a second time at the end of the input, the empty
+            * string.
+            * The submatch will be the empty string.
+            *
+            * In order to be consistent with the old engine, we replace
+            * <atom>+ with <atom><atom>*
+            */
+           restore_parse_state(&old_state);
+           curchr = -1;
+           if (nfa_regatom() == FAIL)
+               return FAIL;
+           EMIT(NFA_STAR);
+           EMIT(NFA_CONCAT);
+           skipchr();          /* skip the \+  */
+           break;
+
+       case Magic('@'):
+           c2 = getdecchrs();
+           op = no_Magic(getchr());
+           i = 0;
+           switch(op)
+           {
+               case '=':
+                   /* \@= */
+                   i = NFA_PREV_ATOM_NO_WIDTH;
+                   break;
+               case '!':
+                   /* \@! */
+                   i = NFA_PREV_ATOM_NO_WIDTH_NEG;
+                   break;
+               case '<':
+                   op = no_Magic(getchr());
+                   if (op == '=')
+                       /* \@<= */
+                       i = NFA_PREV_ATOM_JUST_BEFORE;
+                   else if (op == '!')
+                       /* \@<! */
+                       i = NFA_PREV_ATOM_JUST_BEFORE_NEG;
+                   break;
+               case '>':
+                   /* \@>  */
+                   i = NFA_PREV_ATOM_LIKE_PATTERN;
+                   break;
+           }
+           if (i == 0)
+           {
+               EMSGN(_("E869: (NFA) Unknown operator '\\@%c'"), op);
+               return FAIL;
+           }
+           EMIT(i);
+           if (i == NFA_PREV_ATOM_JUST_BEFORE
+                                       || i == NFA_PREV_ATOM_JUST_BEFORE_NEG)
+               EMIT(c2);
+           break;
+
+       case Magic('?'):
+       case Magic('='):
+           EMIT(NFA_QUEST);
+           break;
+
+       case Magic('{'):
+           /* a{2,5} will expand to 'aaa?a?a?'
+            * a{-1,3} will expand to 'aa??a??', where ?? is the nongreedy
+            * version of '?'
+            * \v(ab){2,3} will expand to '(ab)(ab)(ab)?', where all the
+            * parenthesis have the same id
+            */
+
+           greedy = TRUE;
+           c2 = peekchr();
+           if (c2 == '-' || c2 == Magic('-'))
+           {
+               skipchr();
+               greedy = FALSE;
+           }
+           if (!read_limits(&minval, &maxval))
+               EMSG_RET_FAIL(_("E870: (NFA regexp) Error reading repetition limits"));
+
+           /*  <atom>{0,inf}, <atom>{0,} and <atom>{}  are equivalent to
+            *  <atom>*  */
+           if (minval == 0 && maxval == MAX_LIMIT)
+           {
+               if (greedy)
+                   /* \{}, \{0,} */
+                   EMIT(NFA_STAR);
+               else
+                   /* \{-}, \{-0,} */
+                   EMIT(NFA_STAR_NONGREEDY);
+               break;
+           }
+
+           /* Special case: x{0} or x{-0} */
+           if (maxval == 0)
+           {
+               /* Ignore result of previous call to nfa_regatom() */
+               post_ptr = post_start + my_post_start;
+               /* NFA_SKIP_CHAR has 0-length and works everywhere */
+               EMIT(NFA_SKIP_CHAR);
+               return OK;
+           }
+
+           /* Ignore previous call to nfa_regatom() */
+           post_ptr = post_start + my_post_start;
+           /* Save parse state after the repeated atom and the \{} */
+           save_parse_state(&new_state);
+
+           quest = (greedy == TRUE? NFA_QUEST : NFA_QUEST_NONGREEDY);
+           for (i = 0; i < maxval; i++)
+           {
+               /* Goto beginning of the repeated atom */
+               restore_parse_state(&old_state);
+               old_post_pos = (int)(post_ptr - post_start);
+               if (nfa_regatom() == FAIL)
+                   return FAIL;
+               /* after "minval" times, atoms are optional */
+               if (i + 1 > minval)
+               {
+                   if (maxval == MAX_LIMIT)
+                   {
+                       if (greedy)
+                           EMIT(NFA_STAR);
+                       else
+                           EMIT(NFA_STAR_NONGREEDY);
+                   }
+                   else
+                       EMIT(quest);
+               }
+               if (old_post_pos != my_post_start)
+                   EMIT(NFA_CONCAT);
+               if (i + 1 > minval && maxval == MAX_LIMIT)
+                   break;
+           }
+
+           /* Go to just after the repeated atom and the \{} */
+           restore_parse_state(&new_state);
+           curchr = -1;
+
+           break;
+
+
+       default:
+           break;
+    }  /* end switch */
+
+    if (re_multi_type(peekchr()) != NOT_MULTI)
+       /* Can't have a multi follow a multi. */
+       EMSG_RET_FAIL(_("E871: (NFA regexp) Can't have a multi follow a multi !"));
+
+    return OK;
+}
+
+/*
+ * Parse one or more pieces, concatenated.  It matches a match for the
+ * first piece, followed by a match for the second piece, etc.  Example:
+ * "f[0-9]b", first matches "f", then a digit and then "b".
+ *
+ * concat  ::=     piece
+ *     or  piece piece
+ *     or  piece piece piece
+ *     etc.
+ */
+    static int
+nfa_regconcat()
+{
+    int                cont = TRUE;
+    int                first = TRUE;
+
+    while (cont)
+    {
+       switch (peekchr())
+       {
+           case NUL:
+           case Magic('|'):
+           case Magic('&'):
+           case Magic(')'):
+               cont = FALSE;
+               break;
+
+           case Magic('Z'):
+#ifdef FEAT_MBYTE
+               regflags |= RF_ICOMBINE;
+#endif
+               skipchr_keepstart();
+               break;
+           case Magic('c'):
+               regflags |= RF_ICASE;
+               skipchr_keepstart();
+               break;
+           case Magic('C'):
+               regflags |= RF_NOICASE;
+               skipchr_keepstart();
+               break;
+           case Magic('v'):
+               reg_magic = MAGIC_ALL;
+               skipchr_keepstart();
+               curchr = -1;
+               break;
+           case Magic('m'):
+               reg_magic = MAGIC_ON;
+               skipchr_keepstart();
+               curchr = -1;
+               break;
+           case Magic('M'):
+               reg_magic = MAGIC_OFF;
+               skipchr_keepstart();
+               curchr = -1;
+               break;
+           case Magic('V'):
+               reg_magic = MAGIC_NONE;
+               skipchr_keepstart();
+               curchr = -1;
+               break;
+
+           default:
+               if (nfa_regpiece() == FAIL)
+                   return FAIL;
+               if (first == FALSE)
+                   EMIT(NFA_CONCAT);
+               else
+                   first = FALSE;
+               break;
+       }
+    }
+
+    return OK;
+}
+
+/*
+ * Parse a branch, one or more concats, separated by "\&".  It matches the
+ * last concat, but only if all the preceding concats also match at the same
+ * position.  Examples:
+ *      "foobeep\&..." matches "foo" in "foobeep".
+ *      ".*Peter\&.*Bob" matches in a line containing both "Peter" and "Bob"
+ *
+ * branch ::=      concat
+ *             or  concat \& concat
+ *             or  concat \& concat \& concat
+ *             etc.
+ */
+    static int
+nfa_regbranch()
+{
+    int                ch;
+    int                old_post_pos;
+
+    old_post_pos = (int)(post_ptr - post_start);
+
+    /* First branch, possibly the only one */
+    if (nfa_regconcat() == FAIL)
+       return FAIL;
+
+    ch = peekchr();
+    /* Try next concats */
+    while (ch == Magic('&'))
+    {
+       skipchr();
+       EMIT(NFA_NOPEN);
+       EMIT(NFA_PREV_ATOM_NO_WIDTH);
+       old_post_pos = (int)(post_ptr - post_start);
+       if (nfa_regconcat() == FAIL)
+           return FAIL;
+       /* if concat is empty, skip a input char. But do emit a node */
+       if (old_post_pos == (int)(post_ptr - post_start))
+           EMIT(NFA_SKIP_CHAR);
+       EMIT(NFA_CONCAT);
+       ch = peekchr();
+    }
+
+    /* Even if a branch is empty, emit one node for it */
+    if (old_post_pos == (int)(post_ptr - post_start))
+       EMIT(NFA_SKIP_CHAR);
+
+    return OK;
+}
+
+/*
+ *  Parse a pattern, one or more branches, separated by "\|".  It matches
+ *  anything that matches one of the branches.  Example: "foo\|beep" matches
+ *  "foo" and matches "beep".  If more than one branch matches, the first one
+ *  is used.
+ *
+ *  pattern ::=            branch
+ *     or  branch \| branch
+ *     or  branch \| branch \| branch
+ *     etc.
+ */
+    static int
+nfa_reg(paren)
+    int                paren;  /* REG_NOPAREN, REG_PAREN, REG_NPAREN or REG_ZPAREN */
+{
+    int                parno = 0;
+
+    if (paren == REG_PAREN)
+    {
+       if (regnpar >= NSUBEXP) /* Too many `(' */
+           EMSG_RET_FAIL(_("E872: (NFA regexp) Too many '('"));
+       parno = regnpar++;
+    }
+#ifdef FEAT_SYN_HL
+    else if (paren == REG_ZPAREN)
+    {
+       /* Make a ZOPEN node. */
+       if (regnzpar >= NSUBEXP)
+           EMSG_RET_FAIL(_("E879: (NFA regexp) Too many \\z("));
+       parno = regnzpar++;
+    }
+#endif
+
+    if (nfa_regbranch() == FAIL)
+       return FAIL;        /* cascaded error */
+
+    while (peekchr() == Magic('|'))
+    {
+       skipchr();
+       if (nfa_regbranch() == FAIL)
+           return FAIL;    /* cascaded error */
+       EMIT(NFA_OR);
+    }
+
+    /* Check for proper termination. */
+    if (paren != REG_NOPAREN && getchr() != Magic(')'))
+    {
+       if (paren == REG_NPAREN)
+           EMSG2_RET_FAIL(_(e_unmatchedpp), reg_magic == MAGIC_ALL);
+       else
+           EMSG2_RET_FAIL(_(e_unmatchedp), reg_magic == MAGIC_ALL);
+    }
+    else if (paren == REG_NOPAREN && peekchr() != NUL)
+    {
+       if (peekchr() == Magic(')'))
+           EMSG2_RET_FAIL(_(e_unmatchedpar), reg_magic == MAGIC_ALL);
+       else
+           EMSG_RET_FAIL(_("E873: (NFA regexp) proper termination error"));
+    }
+    /*
+     * Here we set the flag allowing back references to this set of
+     * parentheses.
+     */
+    if (paren == REG_PAREN)
+    {
+       had_endbrace[parno] = TRUE;     /* have seen the close paren */
+       EMIT(NFA_MOPEN + parno);
+    }
+#ifdef FEAT_SYN_HL
+    else if (paren == REG_ZPAREN)
+       EMIT(NFA_ZOPEN + parno);
+#endif
+
+    return OK;
+}
+
+#ifdef DEBUG
+static char_u code[50];
+
+    static void
+nfa_set_code(c)
+    int            c;
+{
+    int            addnl = FALSE;
+
+    if (c >= NFA_FIRST_NL && c <= NFA_LAST_NL)
+    {
+       addnl = TRUE;
+       c -= ADD_NL;
+    }
+
+    STRCPY(code, "");
+    switch (c)
+    {
+       case NFA_MATCH:     STRCPY(code, "NFA_MATCH "); break;
+       case NFA_SPLIT:     STRCPY(code, "NFA_SPLIT "); break;
+       case NFA_CONCAT:    STRCPY(code, "NFA_CONCAT "); break;
+       case NFA_NEWL:      STRCPY(code, "NFA_NEWL "); break;
+       case NFA_ZSTART:    STRCPY(code, "NFA_ZSTART"); break;
+       case NFA_ZEND:      STRCPY(code, "NFA_ZEND"); break;
+
+       case NFA_BACKREF1:  STRCPY(code, "NFA_BACKREF1"); break;
+       case NFA_BACKREF2:  STRCPY(code, "NFA_BACKREF2"); break;
+       case NFA_BACKREF3:  STRCPY(code, "NFA_BACKREF3"); break;
+       case NFA_BACKREF4:  STRCPY(code, "NFA_BACKREF4"); break;
+       case NFA_BACKREF5:  STRCPY(code, "NFA_BACKREF5"); break;
+       case NFA_BACKREF6:  STRCPY(code, "NFA_BACKREF6"); break;
+       case NFA_BACKREF7:  STRCPY(code, "NFA_BACKREF7"); break;
+       case NFA_BACKREF8:  STRCPY(code, "NFA_BACKREF8"); break;
+       case NFA_BACKREF9:  STRCPY(code, "NFA_BACKREF9"); break;
+#ifdef FEAT_SYN_HL
+       case NFA_ZREF1:     STRCPY(code, "NFA_ZREF1"); break;
+       case NFA_ZREF2:     STRCPY(code, "NFA_ZREF2"); break;
+       case NFA_ZREF3:     STRCPY(code, "NFA_ZREF3"); break;
+       case NFA_ZREF4:     STRCPY(code, "NFA_ZREF4"); break;
+       case NFA_ZREF5:     STRCPY(code, "NFA_ZREF5"); break;
+       case NFA_ZREF6:     STRCPY(code, "NFA_ZREF6"); break;
+       case NFA_ZREF7:     STRCPY(code, "NFA_ZREF7"); break;
+       case NFA_ZREF8:     STRCPY(code, "NFA_ZREF8"); break;
+       case NFA_ZREF9:     STRCPY(code, "NFA_ZREF9"); break;
+#endif
+       case NFA_SKIP:      STRCPY(code, "NFA_SKIP"); break;
+
+       case NFA_PREV_ATOM_NO_WIDTH:
+                           STRCPY(code, "NFA_PREV_ATOM_NO_WIDTH"); break;
+       case NFA_PREV_ATOM_NO_WIDTH_NEG:
+                           STRCPY(code, "NFA_PREV_ATOM_NO_WIDTH_NEG"); break;
+       case NFA_PREV_ATOM_JUST_BEFORE:
+                           STRCPY(code, "NFA_PREV_ATOM_JUST_BEFORE"); break;
+       case NFA_PREV_ATOM_JUST_BEFORE_NEG:
+                        STRCPY(code, "NFA_PREV_ATOM_JUST_BEFORE_NEG"); break;
+       case NFA_PREV_ATOM_LIKE_PATTERN:
+                           STRCPY(code, "NFA_PREV_ATOM_LIKE_PATTERN"); break;
+
+       case NFA_NOPEN:             STRCPY(code, "NFA_NOPEN"); break;
+       case NFA_NCLOSE:            STRCPY(code, "NFA_NCLOSE"); break;
+       case NFA_START_INVISIBLE:   STRCPY(code, "NFA_START_INVISIBLE"); break;
+       case NFA_START_INVISIBLE_FIRST:
+                            STRCPY(code, "NFA_START_INVISIBLE_FIRST"); break;
+       case NFA_START_INVISIBLE_NEG:
+                              STRCPY(code, "NFA_START_INVISIBLE_NEG"); break;
+       case NFA_START_INVISIBLE_NEG_FIRST:
+                        STRCPY(code, "NFA_START_INVISIBLE_NEG_FIRST"); break;
+       case NFA_START_INVISIBLE_BEFORE:
+                           STRCPY(code, "NFA_START_INVISIBLE_BEFORE"); break;
+       case NFA_START_INVISIBLE_BEFORE_FIRST:
+                     STRCPY(code, "NFA_START_INVISIBLE_BEFORE_FIRST"); break;
+       case NFA_START_INVISIBLE_BEFORE_NEG:
+                       STRCPY(code, "NFA_START_INVISIBLE_BEFORE_NEG"); break;
+       case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:
+                 STRCPY(code, "NFA_START_INVISIBLE_BEFORE_NEG_FIRST"); break;
+       case NFA_START_PATTERN:   STRCPY(code, "NFA_START_PATTERN"); break;
+       case NFA_END_INVISIBLE:     STRCPY(code, "NFA_END_INVISIBLE"); break;
+       case NFA_END_INVISIBLE_NEG: STRCPY(code, "NFA_END_INVISIBLE_NEG"); break;
+       case NFA_END_PATTERN:       STRCPY(code, "NFA_END_PATTERN"); break;
+
+       case NFA_COMPOSING:         STRCPY(code, "NFA_COMPOSING"); break;
+       case NFA_END_COMPOSING:     STRCPY(code, "NFA_END_COMPOSING"); break;
+       case NFA_OPT_CHARS:         STRCPY(code, "NFA_OPT_CHARS"); break;
+
+       case NFA_MOPEN:
+       case NFA_MOPEN1:
+       case NFA_MOPEN2:
+       case NFA_MOPEN3:
+       case NFA_MOPEN4:
+       case NFA_MOPEN5:
+       case NFA_MOPEN6:
+       case NFA_MOPEN7:
+       case NFA_MOPEN8:
+       case NFA_MOPEN9:
+           STRCPY(code, "NFA_MOPEN(x)");
+           code[10] = c - NFA_MOPEN + '0';
+           break;
+       case NFA_MCLOSE:
+       case NFA_MCLOSE1:
+       case NFA_MCLOSE2:
+       case NFA_MCLOSE3:
+       case NFA_MCLOSE4:
+       case NFA_MCLOSE5:
+       case NFA_MCLOSE6:
+       case NFA_MCLOSE7:
+       case NFA_MCLOSE8:
+       case NFA_MCLOSE9:
+           STRCPY(code, "NFA_MCLOSE(x)");
+           code[11] = c - NFA_MCLOSE + '0';
+           break;
+#ifdef FEAT_SYN_HL
+       case NFA_ZOPEN:
+       case NFA_ZOPEN1:
+       case NFA_ZOPEN2:
+       case NFA_ZOPEN3:
+       case NFA_ZOPEN4:
+       case NFA_ZOPEN5:
+       case NFA_ZOPEN6:
+       case NFA_ZOPEN7:
+       case NFA_ZOPEN8:
+       case NFA_ZOPEN9:
+           STRCPY(code, "NFA_ZOPEN(x)");
+           code[10] = c - NFA_ZOPEN + '0';
+           break;
+       case NFA_ZCLOSE:
+       case NFA_ZCLOSE1:
+       case NFA_ZCLOSE2:
+       case NFA_ZCLOSE3:
+       case NFA_ZCLOSE4:
+       case NFA_ZCLOSE5:
+       case NFA_ZCLOSE6:
+       case NFA_ZCLOSE7:
+       case NFA_ZCLOSE8:
+       case NFA_ZCLOSE9:
+           STRCPY(code, "NFA_ZCLOSE(x)");
+           code[11] = c - NFA_ZCLOSE + '0';
+           break;
+#endif
+       case NFA_EOL:           STRCPY(code, "NFA_EOL "); break;
+       case NFA_BOL:           STRCPY(code, "NFA_BOL "); break;
+       case NFA_EOW:           STRCPY(code, "NFA_EOW "); break;
+       case NFA_BOW:           STRCPY(code, "NFA_BOW "); break;
+       case NFA_EOF:           STRCPY(code, "NFA_EOF "); break;
+       case NFA_BOF:           STRCPY(code, "NFA_BOF "); break;
+       case NFA_LNUM:          STRCPY(code, "NFA_LNUM "); break;
+       case NFA_LNUM_GT:       STRCPY(code, "NFA_LNUM_GT "); break;
+       case NFA_LNUM_LT:       STRCPY(code, "NFA_LNUM_LT "); break;
+       case NFA_COL:           STRCPY(code, "NFA_COL "); break;
+       case NFA_COL_GT:        STRCPY(code, "NFA_COL_GT "); break;
+       case NFA_COL_LT:        STRCPY(code, "NFA_COL_LT "); break;
+       case NFA_VCOL:          STRCPY(code, "NFA_VCOL "); break;
+       case NFA_VCOL_GT:       STRCPY(code, "NFA_VCOL_GT "); break;
+       case NFA_VCOL_LT:       STRCPY(code, "NFA_VCOL_LT "); break;
+       case NFA_MARK:          STRCPY(code, "NFA_MARK "); break;
+       case NFA_MARK_GT:       STRCPY(code, "NFA_MARK_GT "); break;
+       case NFA_MARK_LT:       STRCPY(code, "NFA_MARK_LT "); break;
+       case NFA_CURSOR:        STRCPY(code, "NFA_CURSOR "); break;
+       case NFA_VISUAL:        STRCPY(code, "NFA_VISUAL "); break;
+
+       case NFA_STAR:          STRCPY(code, "NFA_STAR "); break;
+       case NFA_STAR_NONGREEDY: STRCPY(code, "NFA_STAR_NONGREEDY "); break;
+       case NFA_QUEST:         STRCPY(code, "NFA_QUEST"); break;
+       case NFA_QUEST_NONGREEDY: STRCPY(code, "NFA_QUEST_NON_GREEDY"); break;
+       case NFA_SKIP_CHAR:     STRCPY(code, "NFA_SKIP_CHAR"); break;
+       case NFA_OR:            STRCPY(code, "NFA_OR"); break;
+
+       case NFA_START_COLL:    STRCPY(code, "NFA_START_COLL"); break;
+       case NFA_END_COLL:      STRCPY(code, "NFA_END_COLL"); break;
+       case NFA_START_NEG_COLL: STRCPY(code, "NFA_START_NEG_COLL"); break;
+       case NFA_END_NEG_COLL:  STRCPY(code, "NFA_END_NEG_COLL"); break;
+       case NFA_RANGE:         STRCPY(code, "NFA_RANGE"); break;
+       case NFA_RANGE_MIN:     STRCPY(code, "NFA_RANGE_MIN"); break;
+       case NFA_RANGE_MAX:     STRCPY(code, "NFA_RANGE_MAX"); break;
+
+       case NFA_CLASS_ALNUM:   STRCPY(code, "NFA_CLASS_ALNUM"); break;
+       case NFA_CLASS_ALPHA:   STRCPY(code, "NFA_CLASS_ALPHA"); break;
+       case NFA_CLASS_BLANK:   STRCPY(code, "NFA_CLASS_BLANK"); break;
+       case NFA_CLASS_CNTRL:   STRCPY(code, "NFA_CLASS_CNTRL"); break;
+       case NFA_CLASS_DIGIT:   STRCPY(code, "NFA_CLASS_DIGIT"); break;
+       case NFA_CLASS_GRAPH:   STRCPY(code, "NFA_CLASS_GRAPH"); break;
+       case NFA_CLASS_LOWER:   STRCPY(code, "NFA_CLASS_LOWER"); break;
+       case NFA_CLASS_PRINT:   STRCPY(code, "NFA_CLASS_PRINT"); break;
+       case NFA_CLASS_PUNCT:   STRCPY(code, "NFA_CLASS_PUNCT"); break;
+       case NFA_CLASS_SPACE:   STRCPY(code, "NFA_CLASS_SPACE"); break;
+       case NFA_CLASS_UPPER:   STRCPY(code, "NFA_CLASS_UPPER"); break;
+       case NFA_CLASS_XDIGIT:  STRCPY(code, "NFA_CLASS_XDIGIT"); break;
+       case NFA_CLASS_TAB:     STRCPY(code, "NFA_CLASS_TAB"); break;
+       case NFA_CLASS_RETURN:  STRCPY(code, "NFA_CLASS_RETURN"); break;
+       case NFA_CLASS_BACKSPACE:   STRCPY(code, "NFA_CLASS_BACKSPACE"); break;
+       case NFA_CLASS_ESCAPE:  STRCPY(code, "NFA_CLASS_ESCAPE"); break;
+
+       case NFA_ANY:   STRCPY(code, "NFA_ANY"); break;
+       case NFA_IDENT: STRCPY(code, "NFA_IDENT"); break;
+       case NFA_SIDENT:STRCPY(code, "NFA_SIDENT"); break;
+       case NFA_KWORD: STRCPY(code, "NFA_KWORD"); break;
+       case NFA_SKWORD:STRCPY(code, "NFA_SKWORD"); break;
+       case NFA_FNAME: STRCPY(code, "NFA_FNAME"); break;
+       case NFA_SFNAME:STRCPY(code, "NFA_SFNAME"); break;
+       case NFA_PRINT: STRCPY(code, "NFA_PRINT"); break;
+       case NFA_SPRINT:STRCPY(code, "NFA_SPRINT"); break;
+       case NFA_WHITE: STRCPY(code, "NFA_WHITE"); break;
+       case NFA_NWHITE:STRCPY(code, "NFA_NWHITE"); break;
+       case NFA_DIGIT: STRCPY(code, "NFA_DIGIT"); break;
+       case NFA_NDIGIT:STRCPY(code, "NFA_NDIGIT"); break;
+       case NFA_HEX:   STRCPY(code, "NFA_HEX"); break;
+       case NFA_NHEX:  STRCPY(code, "NFA_NHEX"); break;
+       case NFA_OCTAL: STRCPY(code, "NFA_OCTAL"); break;
+       case NFA_NOCTAL:STRCPY(code, "NFA_NOCTAL"); break;
+       case NFA_WORD:  STRCPY(code, "NFA_WORD"); break;
+       case NFA_NWORD: STRCPY(code, "NFA_NWORD"); break;
+       case NFA_HEAD:  STRCPY(code, "NFA_HEAD"); break;
+       case NFA_NHEAD: STRCPY(code, "NFA_NHEAD"); break;
+       case NFA_ALPHA: STRCPY(code, "NFA_ALPHA"); break;
+       case NFA_NALPHA:STRCPY(code, "NFA_NALPHA"); break;
+       case NFA_LOWER: STRCPY(code, "NFA_LOWER"); break;
+       case NFA_NLOWER:STRCPY(code, "NFA_NLOWER"); break;
+       case NFA_UPPER: STRCPY(code, "NFA_UPPER"); break;
+       case NFA_NUPPER:STRCPY(code, "NFA_NUPPER"); break;
+
+       default:
+           STRCPY(code, "CHAR(x)");
+           code[5] = c;
+    }
+
+    if (addnl == TRUE)
+       STRCAT(code, " + NEWLINE ");
+
+}
+
+#ifdef ENABLE_LOG
+static FILE *log_fd;
+
+/*
+ * Print the postfix notation of the current regexp.
+ */
+    static void
+nfa_postfix_dump(expr, retval)
+    char_u  *expr;
+    int            retval;
+{
+    int *p;
+    FILE *f;
+
+    f = fopen(NFA_REGEXP_DUMP_LOG, "a");
+    if (f != NULL)
+    {
+       fprintf(f, "\n-------------------------\n");
+       if (retval == FAIL)
+           fprintf(f, ">>> NFA engine failed ... \n");
+       else if (retval == OK)
+           fprintf(f, ">>> NFA engine succeeded !\n");
+       fprintf(f, "Regexp: \"%s\"\nPostfix notation (char): \"", expr);
+       for (p = post_start; *p && p < post_ptr; p++)
+       {
+           nfa_set_code(*p);
+           fprintf(f, "%s, ", code);
+       }
+       fprintf(f, "\"\nPostfix notation (int): ");
+       for (p = post_start; *p && p < post_ptr; p++)
+               fprintf(f, "%d ", *p);
+       fprintf(f, "\n\n");
+       fclose(f);
+    }
+}
+
+/*
+ * Print the NFA starting with a root node "state".
+ */
+    static void
+nfa_print_state(debugf, state)
+    FILE *debugf;
+    nfa_state_T *state;
+{
+    garray_T indent;
+
+    ga_init2(&indent, 1, 64);
+    ga_append(&indent, '\0');
+    nfa_print_state2(debugf, state, &indent);
+    ga_clear(&indent);
+}
+
+    static void
+nfa_print_state2(debugf, state, indent)
+    FILE *debugf;
+    nfa_state_T *state;
+    garray_T *indent;
+{
+    char_u  *p;
+
+    if (state == NULL)
+       return;
+
+    fprintf(debugf, "(%2d)", abs(state->id));
+
+    /* Output indent */
+    p = (char_u *)indent->ga_data;
+    if (indent->ga_len >= 3)
+    {
+       int     last = indent->ga_len - 3;
+       char_u  save[2];
+
+       STRNCPY(save, &p[last], 2);
+       STRNCPY(&p[last], "+-", 2);
+       fprintf(debugf, " %s", p);
+       STRNCPY(&p[last], save, 2);
+    }
+    else
+       fprintf(debugf, " %s", p);
+
+    nfa_set_code(state->c);
+    fprintf(debugf, "%s (%d) (id=%d) val=%d\n",
+                code,
+                state->c,
+                abs(state->id),
+                state->val);
+    if (state->id < 0)
+       return;
+
+    state->id = abs(state->id) * -1;
+
+    /* grow indent for state->out */
+    indent->ga_len -= 1;
+    if (state->out1)
+       ga_concat(indent, (char_u *)"| ");
+    else
+       ga_concat(indent, (char_u *)"  ");
+    ga_append(indent, '\0');
+
+    nfa_print_state2(debugf, state->out, indent);
+
+    /* replace last part of indent for state->out1 */
+    indent->ga_len -= 3;
+    ga_concat(indent, (char_u *)"  ");
+    ga_append(indent, '\0');
+
+    nfa_print_state2(debugf, state->out1, indent);
+
+    /* shrink indent */
+    indent->ga_len -= 3;
+    ga_append(indent, '\0');
+}
+
+/*
+ * Print the NFA state machine.
+ */
+    static void
+nfa_dump(prog)
+    nfa_regprog_T *prog;
+{
+    FILE *debugf = fopen(NFA_REGEXP_DUMP_LOG, "a");
+
+    if (debugf != NULL)
+    {
+       nfa_print_state(debugf, prog->start);
+
+       if (prog->reganch)
+           fprintf(debugf, "reganch: %d\n", prog->reganch);
+       if (prog->regstart != NUL)
+           fprintf(debugf, "regstart: %c (decimal: %d)\n",
+                                             prog->regstart, prog->regstart);
+       if (prog->match_text != NULL)
+           fprintf(debugf, "match_text: \"%s\"\n", prog->match_text);
+
+       fclose(debugf);
+    }
+}
+#endif     /* ENABLE_LOG */
+#endif     /* DEBUG */
+
+/*
+ * Parse r.e. @expr and convert it into postfix form.
+ * Return the postfix string on success, NULL otherwise.
+ */
+    static int *
+re2post()
+{
+    if (nfa_reg(REG_NOPAREN) == FAIL)
+       return NULL;
+    EMIT(NFA_MOPEN);
+    return post_start;
+}
+
+/* NB. Some of the code below is inspired by Russ's. */
+
+/*
+ * Represents an NFA state plus zero or one or two arrows exiting.
+ * if c == MATCH, no arrows out; matching state.
+ * If c == SPLIT, unlabeled arrows to out and out1 (if != NULL).
+ * If c < 256, labeled arrow with character c to out.
+ */
+
+static nfa_state_T     *state_ptr; /* points to nfa_prog->state */
+
+/*
+ * Allocate and initialize nfa_state_T.
+ */
+    static nfa_state_T *
+alloc_state(c, out, out1)
+    int                c;
+    nfa_state_T        *out;
+    nfa_state_T        *out1;
+{
+    nfa_state_T *s;
+
+    if (istate >= nstate)
+       return NULL;
+
+    s = &state_ptr[istate++];
+
+    s->c    = c;
+    s->out  = out;
+    s->out1 = out1;
+    s->val  = 0;
+
+    s->id   = istate;
+    s->lastlist[0] = 0;
+    s->lastlist[1] = 0;
+
+    return s;
+}
+
+/*
+ * A partially built NFA without the matching state filled in.
+ * Frag_T.start points at the start state.
+ * Frag_T.out is a list of places that need to be set to the
+ * next state for this fragment.
+ */
+
+/* Since the out pointers in the list are always
+ * uninitialized, we use the pointers themselves
+ * as storage for the Ptrlists. */
+typedef union Ptrlist Ptrlist;
+union Ptrlist
+{
+    Ptrlist    *next;
+    nfa_state_T        *s;
+};
+
+struct Frag
+{
+    nfa_state_T *start;
+    Ptrlist    *out;
+};
+typedef struct Frag Frag_T;
+
+static Frag_T frag __ARGS((nfa_state_T *start, Ptrlist *out));
+static Ptrlist *list1 __ARGS((nfa_state_T **outp));
+static void patch __ARGS((Ptrlist *l, nfa_state_T *s));
+static Ptrlist *append __ARGS((Ptrlist *l1, Ptrlist *l2));
+static void st_push __ARGS((Frag_T s, Frag_T **p, Frag_T *stack_end));
+static Frag_T st_pop __ARGS((Frag_T **p, Frag_T *stack));
+
+/*
+ * Initialize a Frag_T struct and return it.
+ */
+    static Frag_T
+frag(start, out)
+    nfa_state_T        *start;
+    Ptrlist    *out;
+{
+    Frag_T n;
+
+    n.start = start;
+    n.out = out;
+    return n;
+}
+
+/*
+ * Create singleton list containing just outp.
+ */
+    static Ptrlist *
+list1(outp)
+    nfa_state_T        **outp;
+{
+    Ptrlist *l;
+
+    l = (Ptrlist *)outp;
+    l->next = NULL;
+    return l;
+}
+
+/*
+ * Patch the list of states at out to point to start.
+ */
+    static void
+patch(l, s)
+    Ptrlist    *l;
+    nfa_state_T        *s;
+{
+    Ptrlist *next;
+
+    for (; l; l = next)
+    {
+       next = l->next;
+       l->s = s;
+    }
+}
+
+
+/*
+ * Join the two lists l1 and l2, returning the combination.
+ */
+    static Ptrlist *
+append(l1, l2)
+    Ptrlist *l1;
+    Ptrlist *l2;
+{
+    Ptrlist *oldl1;
+
+    oldl1 = l1;
+    while (l1->next)
+       l1 = l1->next;
+    l1->next = l2;
+    return oldl1;
+}
+
+/*
+ * Stack used for transforming postfix form into NFA.
+ */
+static Frag_T empty;
+
+    static void
+st_error(postfix, end, p)
+    int *postfix UNUSED;
+    int *end UNUSED;
+    int *p UNUSED;
+{
+#ifdef NFA_REGEXP_ERROR_LOG
+    FILE *df;
+    int *p2;
+
+    df = fopen(NFA_REGEXP_ERROR_LOG, "a");
+    if (df)
+    {
+       fprintf(df, "Error popping the stack!\n");
+#ifdef DEBUG
+       fprintf(df, "Current regexp is \"%s\"\n", nfa_regengine.expr);
+#endif
+       fprintf(df, "Postfix form is: ");
+#ifdef DEBUG
+       for (p2 = postfix; p2 < end; p2++)
+       {
+           nfa_set_code(*p2);
+           fprintf(df, "%s, ", code);
+       }
+       nfa_set_code(*p);
+       fprintf(df, "\nCurrent position is: ");
+       for (p2 = postfix; p2 <= p; p2 ++)
+       {
+           nfa_set_code(*p2);
+           fprintf(df, "%s, ", code);
+       }
+#else
+       for (p2 = postfix; p2 < end; p2++)
+       {
+           fprintf(df, "%d, ", *p2);
+       }
+       fprintf(df, "\nCurrent position is: ");
+       for (p2 = postfix; p2 <= p; p2 ++)
+       {
+           fprintf(df, "%d, ", *p2);
+       }
+#endif
+       fprintf(df, "\n--------------------------\n");
+       fclose(df);
+    }
+#endif
+    EMSG(_("E874: (NFA) Could not pop the stack !"));
+}
+
+/*
+ * Push an item onto the stack.
+ */
+    static void
+st_push(s, p, stack_end)
+    Frag_T s;
+    Frag_T **p;
+    Frag_T *stack_end;
+{
+    Frag_T *stackp = *p;
+
+    if (stackp >= stack_end)
+       return;
+    *stackp = s;
+    *p = *p + 1;
+}
+
+/*
+ * Pop an item from the stack.
+ */
+    static Frag_T
+st_pop(p, stack)
+    Frag_T **p;
+    Frag_T *stack;
+{
+    Frag_T *stackp;
+
+    *p = *p - 1;
+    stackp = *p;
+    if (stackp < stack)
+       return empty;
+    return **p;
+}
+
+/*
+ * Estimate the maximum byte length of anything matching "state".
+ * When unknown or unlimited return -1.
+ */
+    static int
+nfa_max_width(startstate, depth)
+    nfa_state_T *startstate;
+    int                depth;
+{
+    int                    l, r;
+    nfa_state_T            *state = startstate;
+    int                    len = 0;
+
+    /* detect looping in a NFA_SPLIT */
+    if (depth > 4)
+       return -1;
+
+    while (state != NULL)
+    {
+       switch (state->c)
+       {
+           case NFA_END_INVISIBLE:
+           case NFA_END_INVISIBLE_NEG:
+               /* the end, return what we have */
+               return len;
+
+           case NFA_SPLIT:
+               /* two alternatives, use the maximum */
+               l = nfa_max_width(state->out, depth + 1);
+               r = nfa_max_width(state->out1, depth + 1);
+               if (l < 0 || r < 0)
+                   return -1;
+               return len + (l > r ? l : r);
+
+           case NFA_ANY:
+           case NFA_START_COLL:
+           case NFA_START_NEG_COLL:
+               /* matches some character, including composing chars */
+#ifdef FEAT_MBYTE
+               if (enc_utf8)
+                   len += MB_MAXBYTES;
+               else if (has_mbyte)
+                   len += 2;
+               else
+#endif
+                   ++len;
+               if (state->c != NFA_ANY)
+               {
+                   /* skip over the characters */
+                   state = state->out1->out;
+                   continue;
+               }
+               break;
+
+           case NFA_DIGIT:
+           case NFA_WHITE:
+           case NFA_HEX:
+           case NFA_OCTAL:
+               /* ascii */
+               ++len;
+               break;
+
+           case NFA_IDENT:
+           case NFA_SIDENT:
+           case NFA_KWORD:
+           case NFA_SKWORD:
+           case NFA_FNAME:
+           case NFA_SFNAME:
+           case NFA_PRINT:
+           case NFA_SPRINT:
+           case NFA_NWHITE:
+           case NFA_NDIGIT:
+           case NFA_NHEX:
+           case NFA_NOCTAL:
+           case NFA_WORD:
+           case NFA_NWORD:
+           case NFA_HEAD:
+           case NFA_NHEAD:
+           case NFA_ALPHA:
+           case NFA_NALPHA:
+           case NFA_LOWER:
+           case NFA_NLOWER:
+           case NFA_UPPER:
+           case NFA_NUPPER:
+               /* possibly non-ascii */
+#ifdef FEAT_MBYTE
+               if (has_mbyte)
+                   len += 3;
+               else
+#endif
+                   ++len;
+               break;
+
+           case NFA_START_INVISIBLE:
+           case NFA_START_INVISIBLE_NEG:
+           case NFA_START_INVISIBLE_BEFORE:
+           case NFA_START_INVISIBLE_BEFORE_NEG:
+               /* zero-width, out1 points to the END state */
+               state = state->out1->out;
+               continue;
+
+           case NFA_BACKREF1:
+           case NFA_BACKREF2:
+           case NFA_BACKREF3:
+           case NFA_BACKREF4:
+           case NFA_BACKREF5:
+           case NFA_BACKREF6:
+           case NFA_BACKREF7:
+           case NFA_BACKREF8:
+           case NFA_BACKREF9:
+#ifdef FEAT_SYN_HL
+           case NFA_ZREF1:
+           case NFA_ZREF2:
+           case NFA_ZREF3:
+           case NFA_ZREF4:
+           case NFA_ZREF5:
+           case NFA_ZREF6:
+           case NFA_ZREF7:
+           case NFA_ZREF8:
+           case NFA_ZREF9:
+#endif
+           case NFA_NEWL:
+           case NFA_SKIP:
+               /* unknown width */
+               return -1;
+
+           case NFA_BOL:
+           case NFA_EOL:
+           case NFA_BOF:
+           case NFA_EOF:
+           case NFA_BOW:
+           case NFA_EOW:
+           case NFA_MOPEN:
+           case NFA_MOPEN1:
+           case NFA_MOPEN2:
+           case NFA_MOPEN3:
+           case NFA_MOPEN4:
+           case NFA_MOPEN5:
+           case NFA_MOPEN6:
+           case NFA_MOPEN7:
+           case NFA_MOPEN8:
+           case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+           case NFA_ZOPEN:
+           case NFA_ZOPEN1:
+           case NFA_ZOPEN2:
+           case NFA_ZOPEN3:
+           case NFA_ZOPEN4:
+           case NFA_ZOPEN5:
+           case NFA_ZOPEN6:
+           case NFA_ZOPEN7:
+           case NFA_ZOPEN8:
+           case NFA_ZOPEN9:
+           case NFA_ZCLOSE:
+           case NFA_ZCLOSE1:
+           case NFA_ZCLOSE2:
+           case NFA_ZCLOSE3:
+           case NFA_ZCLOSE4:
+           case NFA_ZCLOSE5:
+           case NFA_ZCLOSE6:
+           case NFA_ZCLOSE7:
+           case NFA_ZCLOSE8:
+           case NFA_ZCLOSE9:
+#endif
+           case NFA_MCLOSE:
+           case NFA_MCLOSE1:
+           case NFA_MCLOSE2:
+           case NFA_MCLOSE3:
+           case NFA_MCLOSE4:
+           case NFA_MCLOSE5:
+           case NFA_MCLOSE6:
+           case NFA_MCLOSE7:
+           case NFA_MCLOSE8:
+           case NFA_MCLOSE9:
+           case NFA_NOPEN:
+           case NFA_NCLOSE:
+
+           case NFA_LNUM_GT:
+           case NFA_LNUM_LT:
+           case NFA_COL_GT:
+           case NFA_COL_LT:
+           case NFA_VCOL_GT:
+           case NFA_VCOL_LT:
+           case NFA_MARK_GT:
+           case NFA_MARK_LT:
+           case NFA_VISUAL:
+           case NFA_LNUM:
+           case NFA_CURSOR:
+           case NFA_COL:
+           case NFA_VCOL:
+           case NFA_MARK:
+
+           case NFA_ZSTART:
+           case NFA_ZEND:
+           case NFA_OPT_CHARS:
+           case NFA_SKIP_CHAR:
+           case NFA_START_PATTERN:
+           case NFA_END_PATTERN:
+           case NFA_COMPOSING:
+           case NFA_END_COMPOSING:
+               /* zero-width */
+               break;
+
+           default:
+               if (state->c < 0)
+                   /* don't know what this is */
+                   return -1;
+               /* normal character */
+               len += MB_CHAR2LEN(state->c);
+               break;
+       }
+
+       /* normal way to continue */
+       state = state->out;
+    }
+
+    /* unrecognized, "cannot happen" */
+    return -1;
+}
+
+/*
+ * Convert a postfix form into its equivalent NFA.
+ * Return the NFA start state on success, NULL otherwise.
+ */
+    static nfa_state_T *
+post2nfa(postfix, end, nfa_calc_size)
+    int                *postfix;
+    int                *end;
+    int                nfa_calc_size;
+{
+    int                *p;
+    int                mopen;
+    int                mclose;
+    Frag_T     *stack = NULL;
+    Frag_T     *stackp = NULL;
+    Frag_T     *stack_end = NULL;
+    Frag_T     e1;
+    Frag_T     e2;
+    Frag_T     e;
+    nfa_state_T        *s;
+    nfa_state_T        *s1;
+    nfa_state_T        *matchstate;
+    nfa_state_T        *ret = NULL;
+
+    if (postfix == NULL)
+       return NULL;
+
+#define PUSH(s)            st_push((s), &stackp, stack_end)
+#define POP()      st_pop(&stackp, stack);             \
+                   if (stackp < stack)                 \
+                   {                                   \
+                       st_error(postfix, end, p);      \
+                       return NULL;                    \
+                   }
+
+    if (nfa_calc_size == FALSE)
+    {
+       /* Allocate space for the stack. Max states on the stack : nstate */
+       stack = (Frag_T *)lalloc((nstate + 1) * sizeof(Frag_T), TRUE);
+       stackp = stack;
+       stack_end = stack + (nstate + 1);
+    }
+
+    for (p = postfix; p < end; ++p)
+    {
+       switch (*p)
+       {
+       case NFA_CONCAT:
+           /* Concatenation.
+            * Pay attention: this operator does not exist in the r.e. itself
+            * (it is implicit, really).  It is added when r.e. is translated
+            * to postfix form in re2post(). */
+           if (nfa_calc_size == TRUE)
+           {
+               /* nstate += 0; */
+               break;
+           }
+           e2 = POP();
+           e1 = POP();
+           patch(e1.out, e2.start);
+           PUSH(frag(e1.start, e2.out));
+           break;
+
+       case NFA_OR:
+           /* Alternation */
+           if (nfa_calc_size == TRUE)
+           {
+               nstate++;
+               break;
+           }
+           e2 = POP();
+           e1 = POP();
+           s = alloc_state(NFA_SPLIT, e1.start, e2.start);
+           if (s == NULL)
+               goto theend;
+           PUSH(frag(s, append(e1.out, e2.out)));
+           break;
+
+       case NFA_STAR:
+           /* Zero or more, prefer more */
+           if (nfa_calc_size == TRUE)
+           {
+               nstate++;
+               break;
+           }
+           e = POP();
+           s = alloc_state(NFA_SPLIT, e.start, NULL);
+           if (s == NULL)
+               goto theend;
+           patch(e.out, s);
+           PUSH(frag(s, list1(&s->out1)));
+           break;
+
+       case NFA_STAR_NONGREEDY:
+           /* Zero or more, prefer zero */
+           if (nfa_calc_size == TRUE)
+           {
+               nstate++;
+               break;
+           }
+           e = POP();
+           s = alloc_state(NFA_SPLIT, NULL, e.start);
+           if (s == NULL)
+               goto theend;
+           patch(e.out, s);
+           PUSH(frag(s, list1(&s->out)));
+           break;
+
+       case NFA_QUEST:
+           /* one or zero atoms=> greedy match */
+           if (nfa_calc_size == TRUE)
+           {
+               nstate++;
+               break;
+           }
+           e = POP();
+           s = alloc_state(NFA_SPLIT, e.start, NULL);
+           if (s == NULL)
+               goto theend;
+           PUSH(frag(s, append(e.out, list1(&s->out1))));
+           break;
+
+       case NFA_QUEST_NONGREEDY:
+           /* zero or one atoms => non-greedy match */
+           if (nfa_calc_size == TRUE)
+           {
+               nstate++;
+               break;
+           }
+           e = POP();
+           s = alloc_state(NFA_SPLIT, NULL, e.start);
+           if (s == NULL)
+               goto theend;
+           PUSH(frag(s, append(e.out, list1(&s->out))));
+           break;
+
+       case NFA_END_COLL:
+       case NFA_END_NEG_COLL:
+           /* On the stack is the sequence starting with NFA_START_COLL or
+            * NFA_START_NEG_COLL and all possible characters. Patch it to
+            * add the output to the start. */
+           if (nfa_calc_size == TRUE)
+           {
+               nstate++;
+               break;
+           }
+           e = POP();
+           s = alloc_state(NFA_END_COLL, NULL, NULL);
+           if (s == NULL)
+               goto theend;
+           patch(e.out, s);
+           e.start->out1 = s;
+           PUSH(frag(e.start, list1(&s->out)));
+           break;
+
+       case NFA_RANGE:
+           /* Before this are two characters, the low and high end of a
+            * range.  Turn them into two states with MIN and MAX. */
+           if (nfa_calc_size == TRUE)
+           {
+               /* nstate += 0; */
+               break;
+           }
+           e2 = POP();
+           e1 = POP();
+           e2.start->val = e2.start->c;
+           e2.start->c = NFA_RANGE_MAX;
+           e1.start->val = e1.start->c;
+           e1.start->c = NFA_RANGE_MIN;
+           patch(e1.out, e2.start);
+           PUSH(frag(e1.start, e2.out));
+           break;
+
+       case NFA_SKIP_CHAR:
+           /* Symbol of 0-length, Used in a repetition
+            * with max/min count of 0 */
+           if (nfa_calc_size == TRUE)
+           {
+               nstate++;
+               break;
+           }
+           s = alloc_state(NFA_SKIP_CHAR, NULL, NULL);
+           if (s == NULL)
+               goto theend;
+           PUSH(frag(s, list1(&s->out)));
+           break;
+
+       case NFA_OPT_CHARS:
+         {
+           int    n;
+
+           /* \%[abc] implemented as:
+            *    NFA_SPLIT
+            *    +-CHAR(a)
+            *    | +-NFA_SPLIT
+            *    |   +-CHAR(b)
+            *    |   | +-NFA_SPLIT
+            *    |   |   +-CHAR(c)
+            *    |   |   | +-next
+            *    |   |   +- next
+            *    |   +- next
+            *    +- next
+            */
+           n = *++p; /* get number of characters */
+           if (nfa_calc_size == TRUE)
+           {
+               nstate += n;
+               break;
+           }
+           s = NULL; /* avoid compiler warning */
+           e1.out = NULL; /* stores list with out1's */
+           s1 = NULL; /* previous NFA_SPLIT to connect to */
+           while (n-- > 0)
+           {
+               e = POP(); /* get character */
+               s = alloc_state(NFA_SPLIT, e.start, NULL);
+               if (s == NULL)
+                   goto theend;
+               if (e1.out == NULL)
+                   e1 = e;
+               patch(e.out, s1);
+               append(e1.out, list1(&s->out1));
+               s1 = s;
+           }
+           PUSH(frag(s, e1.out));
+           break;
+         }
+
+       case NFA_PREV_ATOM_NO_WIDTH:
+       case NFA_PREV_ATOM_NO_WIDTH_NEG:
+       case NFA_PREV_ATOM_JUST_BEFORE:
+       case NFA_PREV_ATOM_JUST_BEFORE_NEG:
+       case NFA_PREV_ATOM_LIKE_PATTERN:
+         {
+           int before = (*p == NFA_PREV_ATOM_JUST_BEFORE
+                                     || *p == NFA_PREV_ATOM_JUST_BEFORE_NEG);
+           int pattern = (*p == NFA_PREV_ATOM_LIKE_PATTERN);
+           int start_state;
+           int end_state;
+           int n = 0;
+           nfa_state_T *zend;
+           nfa_state_T *skip;
+
+           switch (*p)
+           {
+               case NFA_PREV_ATOM_NO_WIDTH:
+                   start_state = NFA_START_INVISIBLE;
+                   end_state = NFA_END_INVISIBLE;
+                   break;
+               case NFA_PREV_ATOM_NO_WIDTH_NEG:
+                   start_state = NFA_START_INVISIBLE_NEG;
+                   end_state = NFA_END_INVISIBLE_NEG;
+                   break;
+               case NFA_PREV_ATOM_JUST_BEFORE:
+                   start_state = NFA_START_INVISIBLE_BEFORE;
+                   end_state = NFA_END_INVISIBLE;
+                   break;
+               case NFA_PREV_ATOM_JUST_BEFORE_NEG:
+                   start_state = NFA_START_INVISIBLE_BEFORE_NEG;
+                   end_state = NFA_END_INVISIBLE_NEG;
+                   break;
+               default: /* NFA_PREV_ATOM_LIKE_PATTERN: */
+                   start_state = NFA_START_PATTERN;
+                   end_state = NFA_END_PATTERN;
+                   break;
+           }
+
+           if (before)
+               n = *++p; /* get the count */
+
+           /* The \@= operator: match the preceding atom with zero width.
+            * The \@! operator: no match for the preceding atom.
+            * The \@<= operator: match for the preceding atom.
+            * The \@<! operator: no match for the preceding atom.
+            * Surrounds the preceding atom with START_INVISIBLE and
+            * END_INVISIBLE, similarly to MOPEN. */
+
+           if (nfa_calc_size == TRUE)
+           {
+               nstate += pattern ? 4 : 2;
+               break;
+           }
+           e = POP();
+           s1 = alloc_state(end_state, NULL, NULL);
+           if (s1 == NULL)
+               goto theend;
+
+           s = alloc_state(start_state, e.start, s1);
+           if (s == NULL)
+               goto theend;
+           if (pattern)
+           {
+               /* NFA_ZEND -> NFA_END_PATTERN -> NFA_SKIP -> what follows. */
+               skip = alloc_state(NFA_SKIP, NULL, NULL);
+               zend = alloc_state(NFA_ZEND, s1, NULL);
+               s1->out= skip;
+               patch(e.out, zend);
+               PUSH(frag(s, list1(&skip->out)));
+           }
+           else
+           {
+               patch(e.out, s1);
+               PUSH(frag(s, list1(&s1->out)));
+               if (before)
+               {
+                   if (n <= 0)
+                       /* See if we can guess the maximum width, it avoids a
+                        * lot of pointless tries. */
+                       n = nfa_max_width(e.start, 0);
+                   s->val = n; /* store the count */
+               }
+           }
+           break;
+         }
+
+#ifdef FEAT_MBYTE
+       case NFA_COMPOSING:     /* char with composing char */
+#if 0
+           /* TODO */
+           if (regflags & RF_ICOMBINE)
+           {
+               /* use the base character only */
+           }
+#endif
+           /* FALLTHROUGH */
+#endif
+
+       case NFA_MOPEN: /* \( \) Submatch */
+       case NFA_MOPEN1:
+       case NFA_MOPEN2:
+       case NFA_MOPEN3:
+       case NFA_MOPEN4:
+       case NFA_MOPEN5:
+       case NFA_MOPEN6:
+       case NFA_MOPEN7:
+       case NFA_MOPEN8:
+       case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+       case NFA_ZOPEN: /* \z( \) Submatch */
+       case NFA_ZOPEN1:
+       case NFA_ZOPEN2:
+       case NFA_ZOPEN3:
+       case NFA_ZOPEN4:
+       case NFA_ZOPEN5:
+       case NFA_ZOPEN6:
+       case NFA_ZOPEN7:
+       case NFA_ZOPEN8:
+       case NFA_ZOPEN9:
+#endif
+       case NFA_NOPEN: /* \%( \) "Invisible Submatch" */
+           if (nfa_calc_size == TRUE)
+           {
+               nstate += 2;
+               break;
+           }
+
+           mopen = *p;
+           switch (*p)
+           {
+               case NFA_NOPEN: mclose = NFA_NCLOSE; break;
+#ifdef FEAT_SYN_HL
+               case NFA_ZOPEN: mclose = NFA_ZCLOSE; break;
+               case NFA_ZOPEN1: mclose = NFA_ZCLOSE1; break;
+               case NFA_ZOPEN2: mclose = NFA_ZCLOSE2; break;
+               case NFA_ZOPEN3: mclose = NFA_ZCLOSE3; break;
+               case NFA_ZOPEN4: mclose = NFA_ZCLOSE4; break;
+               case NFA_ZOPEN5: mclose = NFA_ZCLOSE5; break;
+               case NFA_ZOPEN6: mclose = NFA_ZCLOSE6; break;
+               case NFA_ZOPEN7: mclose = NFA_ZCLOSE7; break;
+               case NFA_ZOPEN8: mclose = NFA_ZCLOSE8; break;
+               case NFA_ZOPEN9: mclose = NFA_ZCLOSE9; break;
+#endif
+#ifdef FEAT_MBYTE
+               case NFA_COMPOSING: mclose = NFA_END_COMPOSING; break;
+#endif
+               default:
+                   /* NFA_MOPEN, NFA_MOPEN1 .. NFA_MOPEN9 */
+                   mclose = *p + NSUBEXP;
+                   break;
+           }
+
+           /* Allow "NFA_MOPEN" as a valid postfix representation for
+            * the empty regexp "". In this case, the NFA will be
+            * NFA_MOPEN -> NFA_MCLOSE. Note that this also allows
+            * empty groups of parenthesis, and empty mbyte chars */
+           if (stackp == stack)
+           {
+               s = alloc_state(mopen, NULL, NULL);
+               if (s == NULL)
+                   goto theend;
+               s1 = alloc_state(mclose, NULL, NULL);
+               if (s1 == NULL)
+                   goto theend;
+               patch(list1(&s->out), s1);
+               PUSH(frag(s, list1(&s1->out)));
+               break;
+           }
+
+           /* At least one node was emitted before NFA_MOPEN, so
+            * at least one node will be between NFA_MOPEN and NFA_MCLOSE */
+           e = POP();
+           s = alloc_state(mopen, e.start, NULL);   /* `(' */
+           if (s == NULL)
+               goto theend;
+
+           s1 = alloc_state(mclose, NULL, NULL);   /* `)' */
+           if (s1 == NULL)
+               goto theend;
+           patch(e.out, s1);
+
+#ifdef FEAT_MBYTE
+           if (mopen == NFA_COMPOSING)
+               /* COMPOSING->out1 = END_COMPOSING */
+               patch(list1(&s->out1), s1);
+#endif
+
+           PUSH(frag(s, list1(&s1->out)));
+           break;
+
+       case NFA_BACKREF1:
+       case NFA_BACKREF2:
+       case NFA_BACKREF3:
+       case NFA_BACKREF4:
+       case NFA_BACKREF5:
+       case NFA_BACKREF6:
+       case NFA_BACKREF7:
+       case NFA_BACKREF8:
+       case NFA_BACKREF9:
+#ifdef FEAT_SYN_HL
+       case NFA_ZREF1:
+       case NFA_ZREF2:
+       case NFA_ZREF3:
+       case NFA_ZREF4:
+       case NFA_ZREF5:
+       case NFA_ZREF6:
+       case NFA_ZREF7:
+       case NFA_ZREF8:
+       case NFA_ZREF9:
+#endif
+           if (nfa_calc_size == TRUE)
+           {
+               nstate += 2;
+               break;
+           }
+           s = alloc_state(*p, NULL, NULL);
+           if (s == NULL)
+               goto theend;
+           s1 = alloc_state(NFA_SKIP, NULL, NULL);
+           if (s1 == NULL)
+               goto theend;
+           patch(list1(&s->out), s1);
+           PUSH(frag(s, list1(&s1->out)));
+           break;
+
+       case NFA_LNUM:
+       case NFA_LNUM_GT:
+       case NFA_LNUM_LT:
+       case NFA_VCOL:
+       case NFA_VCOL_GT:
+       case NFA_VCOL_LT:
+       case NFA_COL:
+       case NFA_COL_GT:
+       case NFA_COL_LT:
+       case NFA_MARK:
+       case NFA_MARK_GT:
+       case NFA_MARK_LT:
+         {
+           int n = *++p; /* lnum, col or mark name */
+
+           if (nfa_calc_size == TRUE)
+           {
+               nstate += 1;
+               break;
+           }
+           s = alloc_state(p[-1], NULL, NULL);
+           if (s == NULL)
+               goto theend;
+           s->val = n;
+           PUSH(frag(s, list1(&s->out)));
+           break;
+         }
+
+       case NFA_ZSTART:
+       case NFA_ZEND:
+       default:
+           /* Operands */
+           if (nfa_calc_size == TRUE)
+           {
+               nstate++;
+               break;
+           }
+           s = alloc_state(*p, NULL, NULL);
+           if (s == NULL)
+               goto theend;
+           PUSH(frag(s, list1(&s->out)));
+           break;
+
+       } /* switch(*p) */
+
+    } /* for(p = postfix; *p; ++p) */
+
+    if (nfa_calc_size == TRUE)
+    {
+       nstate++;
+       goto theend;    /* Return value when counting size is ignored anyway */
+    }
+
+    e = POP();
+    if (stackp != stack)
+       EMSG_RET_NULL(_("E875: (NFA regexp) (While converting from postfix to NFA), too many states left on stack"));
+
+    if (istate >= nstate)
+       EMSG_RET_NULL(_("E876: (NFA regexp) Not enough space to store the whole NFA "));
+
+    matchstate = &state_ptr[istate++]; /* the match state */
+    matchstate->c = NFA_MATCH;
+    matchstate->out = matchstate->out1 = NULL;
+    matchstate->id = 0;
+
+    patch(e.out, matchstate);
+    ret = e.start;
+
+theend:
+    vim_free(stack);
+    return ret;
+
+#undef POP1
+#undef PUSH1
+#undef POP2
+#undef PUSH2
+#undef POP
+#undef PUSH
+}
+
+/*
+ * After building the NFA program, inspect it to add optimization hints.
+ */
+    static void
+nfa_postprocess(prog)
+    nfa_regprog_T   *prog;
+{
+    int i;
+    int c;
+
+    for (i = 0; i < prog->nstate; ++i)
+    {
+       c = prog->state[i].c;
+       if (c == NFA_START_INVISIBLE
+               || c == NFA_START_INVISIBLE_NEG
+               || c == NFA_START_INVISIBLE_BEFORE
+               || c == NFA_START_INVISIBLE_BEFORE_NEG)
+       {
+           int directly;
+
+           /* Do it directly when what follows is possibly the end of the
+            * match. */
+           if (match_follows(prog->state[i].out1->out, 0))
+               directly = TRUE;
+           else
+           {
+               int ch_invisible = failure_chance(prog->state[i].out, 0);
+               int ch_follows = failure_chance(prog->state[i].out1->out, 0);
+
+               /* Postpone when the invisible match is expensive or has a
+                * lower chance of failing. */
+               if (c == NFA_START_INVISIBLE_BEFORE
+                    || c == NFA_START_INVISIBLE_BEFORE_NEG)
+               {
+                   /* "before" matches are very expensive when
+                    * unbounded, always prefer what follows then,
+                    * unless what follows will always match.
+                    * Otherwise strongly prefer what follows. */
+                   if (prog->state[i].val <= 0 && ch_follows > 0)
+                       directly = FALSE;
+                   else
+                       directly = ch_follows * 10 < ch_invisible;
+               }
+               else
+               {
+                   /* normal invisible, first do the one with the
+                    * highest failure chance */
+                   directly = ch_follows < ch_invisible;
+               }
+           }
+           if (directly)
+               /* switch to the _FIRST state */
+               ++prog->state[i].c;
+       }
+    }
+}
+
+/****************************************************************
+ * NFA execution code.
+ ****************************************************************/
+
+typedef struct
+{
+    int            in_use; /* number of subexpr with useful info */
+
+    /* When REG_MULTI is TRUE list.multi is used, otherwise list.line. */
+    union
+    {
+       struct multipos
+       {
+           lpos_T      start;
+           lpos_T      end;
+       } multi[NSUBEXP];
+       struct linepos
+       {
+           char_u      *start;
+           char_u      *end;
+       } line[NSUBEXP];
+    } list;
+} regsub_T;
+
+typedef struct
+{
+    regsub_T   norm; /* \( .. \) matches */
+#ifdef FEAT_SYN_HL
+    regsub_T   synt; /* \z( .. \) matches */
+#endif
+} regsubs_T;
+
+/* nfa_pim_T stores a Postponed Invisible Match. */
+typedef struct nfa_pim_S nfa_pim_T;
+struct nfa_pim_S
+{
+    int                result;         /* NFA_PIM_*, see below */
+    nfa_state_T        *state;         /* the invisible match start state */
+    regsubs_T  subs;           /* submatch info, only party used */
+    union
+    {
+       lpos_T  pos;
+       char_u  *ptr;
+    } end;                     /* where the match must end */
+};
+
+/* Values for done in nfa_pim_T. */
+#define NFA_PIM_UNUSED   0     /* pim not used */
+#define NFA_PIM_TODO     1     /* pim not done yet */
+#define NFA_PIM_MATCH    2     /* pim executed, matches */
+#define NFA_PIM_NOMATCH  3     /* pim executed, no match */
+
+
+/* nfa_thread_T contains execution information of a NFA state */
+typedef struct
+{
+    nfa_state_T        *state;
+    int                count;
+    nfa_pim_T  pim;            /* if pim.result != NFA_PIM_UNUSED: postponed
+                                * invisible match */
+    regsubs_T  subs;           /* submatch info, only party used */
+} nfa_thread_T;
+
+/* nfa_list_T contains the alternative NFA execution states. */
+typedef struct
+{
+    nfa_thread_T    *t;                /* allocated array of states */
+    int                    n;          /* nr of states currently in "t" */
+    int                    len;        /* max nr of states in "t" */
+    int                    id;         /* ID of the list */
+    int                    has_pim;    /* TRUE when any state has a PIM */
+} nfa_list_T;
+
+#ifdef ENABLE_LOG
+static void log_subsexpr __ARGS((regsubs_T *subs));
+static void log_subexpr __ARGS((regsub_T *sub));
+static char *pim_info __ARGS((nfa_pim_T *pim));
+
+    static void
+log_subsexpr(subs)
+    regsubs_T *subs;
+{
+    log_subexpr(&subs->norm);
+# ifdef FEAT_SYN_HL
+    if (nfa_has_zsubexpr)
+       log_subexpr(&subs->synt);
+# endif
+}
+
+    static void
+log_subexpr(sub)
+    regsub_T *sub;
+{
+    int j;
+
+    for (j = 0; j < sub->in_use; j++)
+       if (REG_MULTI)
+           fprintf(log_fd, "*** group %d, start: c=%d, l=%d, end: c=%d, l=%d\n",
+                   j,
+                   sub->list.multi[j].start.col,
+                   (int)sub->list.multi[j].start.lnum,
+                   sub->list.multi[j].end.col,
+                   (int)sub->list.multi[j].end.lnum);
+       else
+       {
+           char *s = (char *)sub->list.line[j].start;
+           char *e = (char *)sub->list.line[j].end;
+
+           fprintf(log_fd, "*** group %d, start: \"%s\", end: \"%s\"\n",
+                   j,
+                   s == NULL ? "NULL" : s,
+                   e == NULL ? "NULL" : e);
+       }
+}
+
+    static char *
+pim_info(pim)
+    nfa_pim_T *pim;
+{
+    static char buf[30];
+
+    if (pim == NULL || pim->result == NFA_PIM_UNUSED)
+       buf[0] = NUL;
+    else
+    {
+       sprintf(buf, " PIM col %d", REG_MULTI ? (int)pim->end.pos.col
+               : (int)(pim->end.ptr - reginput));
+    }
+    return buf;
+}
+
+#endif
+
+/* Used during execution: whether a match has been found. */
+static int nfa_match;
+
+static void copy_pim __ARGS((nfa_pim_T *to, nfa_pim_T *from));
+static void clear_sub __ARGS((regsub_T *sub));
+static void copy_sub __ARGS((regsub_T *to, regsub_T *from));
+static void copy_sub_off __ARGS((regsub_T *to, regsub_T *from));
+static int sub_equal __ARGS((regsub_T *sub1, regsub_T *sub2));
+static int match_backref __ARGS((regsub_T *sub, int subidx, int *bytelen));
+static int has_state_with_pos __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim));
+static int pim_equal __ARGS((nfa_pim_T *one, nfa_pim_T *two));
+static int state_in_list __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs));
+static regsubs_T *addstate __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs_arg, nfa_pim_T *pim, int off));
+static void addstate_here __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim, int *ip));
+
+/*
+ * Copy postponed invisible match info from "from" to "to".
+ */
+    static void
+copy_pim(to, from)
+    nfa_pim_T *to;
+    nfa_pim_T *from;
+{
+    to->result = from->result;
+    to->state = from->state;
+    copy_sub(&to->subs.norm, &from->subs.norm);
+#ifdef FEAT_SYN_HL
+    if (nfa_has_zsubexpr)
+       copy_sub(&to->subs.synt, &from->subs.synt);
+#endif
+    to->end = from->end;
+}
+
+    static void
+clear_sub(sub)
+    regsub_T *sub;
+{
+    if (REG_MULTI)
+       /* Use 0xff to set lnum to -1 */
+       vim_memset(sub->list.multi, 0xff,
+                                     sizeof(struct multipos) * nfa_nsubexpr);
+    else
+       vim_memset(sub->list.line, 0, sizeof(struct linepos) * nfa_nsubexpr);
+    sub->in_use = 0;
+}
+
+/*
+ * Copy the submatches from "from" to "to".
+ */
+    static void
+copy_sub(to, from)
+    regsub_T   *to;
+    regsub_T   *from;
+{
+    to->in_use = from->in_use;
+    if (from->in_use > 0)
+    {
+       /* Copy the match start and end positions. */
+       if (REG_MULTI)
+           mch_memmove(&to->list.multi[0],
+                       &from->list.multi[0],
+                       sizeof(struct multipos) * from->in_use);
+       else
+           mch_memmove(&to->list.line[0],
+                       &from->list.line[0],
+                       sizeof(struct linepos) * from->in_use);
+    }
+}
+
+/*
+ * Like copy_sub() but exclude the main match.
+ */
+    static void
+copy_sub_off(to, from)
+    regsub_T   *to;
+    regsub_T   *from;
+{
+    if (to->in_use < from->in_use)
+       to->in_use = from->in_use;
+    if (from->in_use > 1)
+    {
+       /* Copy the match start and end positions. */
+       if (REG_MULTI)
+           mch_memmove(&to->list.multi[1],
+                       &from->list.multi[1],
+                       sizeof(struct multipos) * (from->in_use - 1));
+       else
+           mch_memmove(&to->list.line[1],
+                       &from->list.line[1],
+                       sizeof(struct linepos) * (from->in_use - 1));
+    }
+}
+
+/*
+ * Return TRUE if "sub1" and "sub2" have the same start positions.
+ */
+    static int
+sub_equal(sub1, sub2)
+    regsub_T   *sub1;
+    regsub_T   *sub2;
+{
+    int                i;
+    int                todo;
+    linenr_T   s1;
+    linenr_T   s2;
+    char_u     *sp1;
+    char_u     *sp2;
+
+    todo = sub1->in_use > sub2->in_use ? sub1->in_use : sub2->in_use;
+    if (REG_MULTI)
+    {
+       for (i = 0; i < todo; ++i)
+       {
+           if (i < sub1->in_use)
+               s1 = sub1->list.multi[i].start.lnum;
+           else
+               s1 = -1;
+           if (i < sub2->in_use)
+               s2 = sub2->list.multi[i].start.lnum;
+           else
+               s2 = -1;
+           if (s1 != s2)
+               return FALSE;
+           if (s1 != -1 && sub1->list.multi[i].start.col
+                                            != sub2->list.multi[i].start.col)
+               return FALSE;
+       }
+    }
+    else
+    {
+       for (i = 0; i < todo; ++i)
+       {
+           if (i < sub1->in_use)
+               sp1 = sub1->list.line[i].start;
+           else
+               sp1 = NULL;
+           if (i < sub2->in_use)
+               sp2 = sub2->list.line[i].start;
+           else
+               sp2 = NULL;
+           if (sp1 != sp2)
+               return FALSE;
+       }
+    }
+
+    return TRUE;
+}
+
+#ifdef ENABLE_LOG
+    static void
+report_state(char *action,
+            regsub_T *sub,
+            nfa_state_T *state,
+            int lid,
+            nfa_pim_T *pim)
+{
+    int col;
+
+    if (sub->in_use <= 0)
+       col = -1;
+    else if (REG_MULTI)
+       col = sub->list.multi[0].start.col;
+    else
+       col = (int)(sub->list.line[0].start - regline);
+    nfa_set_code(state->c);
+    fprintf(log_fd, "> %s state %d to list %d. char %d: %s (start col %d)%s\n",
+           action, abs(state->id), lid, state->c, code, col,
+           pim_info(pim));
+}
+#endif
+
+/*
+ * Return TRUE if the same state is already in list "l" with the same
+ * positions as "subs".
+ */
+    static int
+has_state_with_pos(l, state, subs, pim)
+    nfa_list_T         *l;     /* runtime state list */
+    nfa_state_T                *state; /* state to update */
+    regsubs_T          *subs;  /* pointers to subexpressions */
+    nfa_pim_T          *pim;   /* postponed match or NULL */
+{
+    nfa_thread_T       *thread;
+    int                        i;
+
+    for (i = 0; i < l->n; ++i)
+    {
+       thread = &l->t[i];
+       if (thread->state->id == state->id
+               && sub_equal(&thread->subs.norm, &subs->norm)
+#ifdef FEAT_SYN_HL
+               && (!nfa_has_zsubexpr
+                               || sub_equal(&thread->subs.synt, &subs->synt))
+#endif
+               && pim_equal(&thread->pim, pim))
+           return TRUE;
+    }
+    return FALSE;
+}
+
+/*
+ * Return TRUE if "one" and "two" are equal.  That includes when both are not
+ * set.
+ */
+    static int
+pim_equal(one, two)
+    nfa_pim_T *one;
+    nfa_pim_T *two;
+{
+    int one_unused = (one == NULL || one->result == NFA_PIM_UNUSED);
+    int two_unused = (two == NULL || two->result == NFA_PIM_UNUSED);
+
+    if (one_unused)
+       /* one is unused: equal when two is also unused */
+       return two_unused;
+    if (two_unused)
+       /* one is used and two is not: not equal */
+       return FALSE;
+    /* compare the position */
+    if (REG_MULTI)
+       return one->end.pos.lnum == two->end.pos.lnum
+           && one->end.pos.col == two->end.pos.col;
+    return one->end.ptr == two->end.ptr;
+}
+
+/*
+ * Return TRUE if "state" leads to a NFA_MATCH without advancing the input.
+ */
+    static int
+match_follows(startstate, depth)
+    nfa_state_T *startstate;
+    int                depth;
+{
+    nfa_state_T            *state = startstate;
+
+    /* avoid too much recursion */
+    if (depth > 10)
+       return FALSE;
+
+    while (state != NULL)
+    {
+       switch (state->c)
+       {
+           case NFA_MATCH:
+           case NFA_MCLOSE:
+           case NFA_END_INVISIBLE:
+           case NFA_END_INVISIBLE_NEG:
+           case NFA_END_PATTERN:
+               return TRUE;
+
+           case NFA_SPLIT:
+               return match_follows(state->out, depth + 1)
+                                    || match_follows(state->out1, depth + 1);
+
+           case NFA_START_INVISIBLE:
+           case NFA_START_INVISIBLE_FIRST:
+           case NFA_START_INVISIBLE_BEFORE:
+           case NFA_START_INVISIBLE_BEFORE_FIRST:
+           case NFA_START_INVISIBLE_NEG:
+           case NFA_START_INVISIBLE_NEG_FIRST:
+           case NFA_START_INVISIBLE_BEFORE_NEG:
+           case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:
+           case NFA_COMPOSING:
+               /* skip ahead to next state */
+               state = state->out1->out;
+               continue;
+
+           case NFA_ANY:
+           case NFA_IDENT:
+           case NFA_SIDENT:
+           case NFA_KWORD:
+           case NFA_SKWORD:
+           case NFA_FNAME:
+           case NFA_SFNAME:
+           case NFA_PRINT:
+           case NFA_SPRINT:
+           case NFA_WHITE:
+           case NFA_NWHITE:
+           case NFA_DIGIT:
+           case NFA_NDIGIT:
+           case NFA_HEX:
+           case NFA_NHEX:
+           case NFA_OCTAL:
+           case NFA_NOCTAL:
+           case NFA_WORD:
+           case NFA_NWORD:
+           case NFA_HEAD:
+           case NFA_NHEAD:
+           case NFA_ALPHA:
+           case NFA_NALPHA:
+           case NFA_LOWER:
+           case NFA_NLOWER:
+           case NFA_UPPER:
+           case NFA_NUPPER:
+           case NFA_START_COLL:
+           case NFA_START_NEG_COLL:
+           case NFA_NEWL:
+               /* state will advance input */
+               return FALSE;
+
+           default:
+               if (state->c > 0)
+                   /* state will advance input */
+                   return FALSE;
+
+               /* Others: zero-width or possibly zero-width, might still find
+                * a match at the same position, keep looking. */
+               break;
+       }
+       state = state->out;
+    }
+    return FALSE;
+}
+
+
+/*
+ * Return TRUE if "state" is already in list "l".
+ */
+    static int
+state_in_list(l, state, subs)
+    nfa_list_T         *l;     /* runtime state list */
+    nfa_state_T                *state; /* state to update */
+    regsubs_T          *subs;  /* pointers to subexpressions */
+{
+    if (state->lastlist[nfa_ll_index] == l->id)
+    {
+       if (!nfa_has_backref || has_state_with_pos(l, state, subs, NULL))
+           return TRUE;
+    }
+    return FALSE;
+}
+
+/*
+ * Add "state" and possibly what follows to state list ".".
+ * Returns "subs_arg", possibly copied into temp_subs.
+ */
+
+    static regsubs_T *
+addstate(l, state, subs_arg, pim, off)
+    nfa_list_T         *l;         /* runtime state list */
+    nfa_state_T                *state;     /* state to update */
+    regsubs_T          *subs_arg;  /* pointers to subexpressions */
+    nfa_pim_T          *pim;       /* postponed look-behind match */
+    int                        off;        /* byte offset, when -1 go to next line */
+{
+    int                        subidx;
+    nfa_thread_T       *thread;
+    lpos_T             save_lpos;
+    int                        save_in_use;
+    char_u             *save_ptr;
+    int                        i;
+    regsub_T           *sub;
+    regsubs_T          *subs = subs_arg;
+    static regsubs_T   temp_subs;
+#ifdef ENABLE_LOG
+    int                        did_print = FALSE;
+#endif
+
+    switch (state->c)
+    {
+       case NFA_NCLOSE:
+       case NFA_MCLOSE:
+       case NFA_MCLOSE1:
+       case NFA_MCLOSE2:
+       case NFA_MCLOSE3:
+       case NFA_MCLOSE4:
+       case NFA_MCLOSE5:
+       case NFA_MCLOSE6:
+       case NFA_MCLOSE7:
+       case NFA_MCLOSE8:
+       case NFA_MCLOSE9:
+#ifdef FEAT_SYN_HL
+       case NFA_ZCLOSE:
+       case NFA_ZCLOSE1:
+       case NFA_ZCLOSE2:
+       case NFA_ZCLOSE3:
+       case NFA_ZCLOSE4:
+       case NFA_ZCLOSE5:
+       case NFA_ZCLOSE6:
+       case NFA_ZCLOSE7:
+       case NFA_ZCLOSE8:
+       case NFA_ZCLOSE9:
+#endif
+       case NFA_MOPEN:
+       case NFA_ZEND:
+       case NFA_SPLIT:
+       case NFA_SKIP_CHAR:
+           /* These nodes are not added themselves but their "out" and/or
+            * "out1" may be added below.  */
+           break;
+
+       case NFA_BOL:
+       case NFA_BOF:
+           /* "^" won't match past end-of-line, don't bother trying.
+            * Except when at the end of the line, or when we are going to the
+            * next line for a look-behind match. */
+           if (reginput > regline
+                   && *reginput != NUL
+                   && (nfa_endp == NULL
+                       || !REG_MULTI
+                       || reglnum == nfa_endp->se_u.pos.lnum))
+               goto skip_add;
+           /* FALLTHROUGH */
+
+       case NFA_MOPEN1:
+       case NFA_MOPEN2:
+       case NFA_MOPEN3:
+       case NFA_MOPEN4:
+       case NFA_MOPEN5:
+       case NFA_MOPEN6:
+       case NFA_MOPEN7:
+       case NFA_MOPEN8:
+       case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+       case NFA_ZOPEN:
+       case NFA_ZOPEN1:
+       case NFA_ZOPEN2:
+       case NFA_ZOPEN3:
+       case NFA_ZOPEN4:
+       case NFA_ZOPEN5:
+       case NFA_ZOPEN6:
+       case NFA_ZOPEN7:
+       case NFA_ZOPEN8:
+       case NFA_ZOPEN9:
+#endif
+       case NFA_NOPEN:
+       case NFA_ZSTART:
+           /* These nodes need to be added so that we can bail out when it
+            * was added to this list before at the same position to avoid an
+            * endless loop for "\(\)*" */
+
+       default:
+           if (state->lastlist[nfa_ll_index] == l->id)
+           {
+               /* This state is already in the list, don't add it again,
+                * unless it is an MOPEN that is used for a backreference or
+                * when there is a PIM. */
+               if (!nfa_has_backref && pim == NULL && !l->has_pim)
+               {
+skip_add:
+#ifdef ENABLE_LOG
+                   nfa_set_code(state->c);
+                   fprintf(log_fd, "> Not adding state %d to list %d. char %d: %s\n",
+                           abs(state->id), l->id, state->c, code);
+#endif
+                   return subs;
+               }
+
+               /* Do not add the state again when it exists with the same
+                * positions. */
+               if (has_state_with_pos(l, state, subs, pim))
+                   goto skip_add;
+           }
+
+           /* When there are backreferences or PIMs the number of states may
+            * be (a lot) bigger than anticipated. */
+           if (l->n == l->len)
+           {
+               int newlen = l->len * 3 / 2 + 50;
+
+               if (subs != &temp_subs)
+               {
+                   /* "subs" may point into the current array, need to make a
+                    * copy before it becomes invalid. */
+                   copy_sub(&temp_subs.norm, &subs->norm);
+#ifdef FEAT_SYN_HL
+                   if (nfa_has_zsubexpr)
+                       copy_sub(&temp_subs.synt, &subs->synt);
+#endif
+                   subs = &temp_subs;
+               }
+
+               l->t = vim_realloc(l->t, newlen * sizeof(nfa_thread_T));
+               l->len = newlen;
+           }
+
+           /* add the state to the list */
+           state->lastlist[nfa_ll_index] = l->id;
+           thread = &l->t[l->n++];
+           thread->state = state;
+           if (pim == NULL)
+               thread->pim.result = NFA_PIM_UNUSED;
+           else
+           {
+               copy_pim(&thread->pim, pim);
+               l->has_pim = TRUE;
+           }
+           copy_sub(&thread->subs.norm, &subs->norm);
+#ifdef FEAT_SYN_HL
+           if (nfa_has_zsubexpr)
+               copy_sub(&thread->subs.synt, &subs->synt);
+#endif
+#ifdef ENABLE_LOG
+           report_state("Adding", &thread->subs.norm, state, l->id, pim);
+           did_print = TRUE;
+#endif
+    }
+
+#ifdef ENABLE_LOG
+    if (!did_print)
+       report_state("Processing", &subs->norm, state, l->id, pim);
+#endif
+    switch (state->c)
+    {
+       case NFA_MATCH:
+           nfa_match = TRUE;
+           break;
+
+       case NFA_SPLIT:
+           /* order matters here */
+           subs = addstate(l, state->out, subs, pim, off);
+           subs = addstate(l, state->out1, subs, pim, off);
+           break;
+
+       case NFA_SKIP_CHAR:
+       case NFA_NOPEN:
+       case NFA_NCLOSE:
+           subs = addstate(l, state->out, subs, pim, off);
+           break;
+
+       case NFA_MOPEN:
+       case NFA_MOPEN1:
+       case NFA_MOPEN2:
+       case NFA_MOPEN3:
+       case NFA_MOPEN4:
+       case NFA_MOPEN5:
+       case NFA_MOPEN6:
+       case NFA_MOPEN7:
+       case NFA_MOPEN8:
+       case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+       case NFA_ZOPEN:
+       case NFA_ZOPEN1:
+       case NFA_ZOPEN2:
+       case NFA_ZOPEN3:
+       case NFA_ZOPEN4:
+       case NFA_ZOPEN5:
+       case NFA_ZOPEN6:
+       case NFA_ZOPEN7:
+       case NFA_ZOPEN8:
+       case NFA_ZOPEN9:
+#endif
+       case NFA_ZSTART:
+           if (state->c == NFA_ZSTART)
+           {
+               subidx = 0;
+               sub = &subs->norm;
+           }
+#ifdef FEAT_SYN_HL
+           else if (state->c >= NFA_ZOPEN)
+           {
+               subidx = state->c - NFA_ZOPEN;
+               sub = &subs->synt;
+           }
+#endif
+           else
+           {
+               subidx = state->c - NFA_MOPEN;
+               sub = &subs->norm;
+           }
+
+           /* avoid compiler warnings */
+           save_ptr = NULL;
+           save_lpos.lnum = 0;
+           save_lpos.col = 0;
+
+           /* Set the position (with "off" added) in the subexpression.  Save
+            * and restore it when it was in use.  Otherwise fill any gap. */
+           if (REG_MULTI)
+           {
+               if (subidx < sub->in_use)
+               {
+                   save_lpos = sub->list.multi[subidx].start;
+                   save_in_use = -1;
+               }
+               else
+               {
+                   save_in_use = sub->in_use;
+                   for (i = sub->in_use; i < subidx; ++i)
+                   {
+                       sub->list.multi[i].start.lnum = -1;
+                       sub->list.multi[i].end.lnum = -1;
+                   }
+                   sub->in_use = subidx + 1;
+               }
+               if (off == -1)
+               {
+                   sub->list.multi[subidx].start.lnum = reglnum + 1;
+                   sub->list.multi[subidx].start.col = 0;
+               }
+               else
+               {
+                   sub->list.multi[subidx].start.lnum = reglnum;
+                   sub->list.multi[subidx].start.col =
+                                         (colnr_T)(reginput - regline + off);
+               }
+           }
+           else
+           {
+               if (subidx < sub->in_use)
+               {
+                   save_ptr = sub->list.line[subidx].start;
+                   save_in_use = -1;
+               }
+               else
+               {
+                   save_in_use = sub->in_use;
+                   for (i = sub->in_use; i < subidx; ++i)
+                   {
+                       sub->list.line[i].start = NULL;
+                       sub->list.line[i].end = NULL;
+                   }
+                   sub->in_use = subidx + 1;
+               }
+               sub->list.line[subidx].start = reginput + off;
+           }
+
+           subs = addstate(l, state->out, subs, pim, off);
+
+           if (save_in_use == -1)
+           {
+               if (REG_MULTI)
+                   sub->list.multi[subidx].start = save_lpos;
+               else
+                   sub->list.line[subidx].start = save_ptr;
+           }
+           else
+               sub->in_use = save_in_use;
+           break;
+
+       case NFA_MCLOSE:
+           if (nfa_has_zend)
+           {
+               /* Do not overwrite the position set by \ze. If no \ze
+                * encountered end will be set in nfa_regtry(). */
+               subs = addstate(l, state->out, subs, pim, off);
+               break;
+           }
+       case NFA_MCLOSE1:
+       case NFA_MCLOSE2:
+       case NFA_MCLOSE3:
+       case NFA_MCLOSE4:
+       case NFA_MCLOSE5:
+       case NFA_MCLOSE6:
+       case NFA_MCLOSE7:
+       case NFA_MCLOSE8:
+       case NFA_MCLOSE9:
+#ifdef FEAT_SYN_HL
+       case NFA_ZCLOSE:
+       case NFA_ZCLOSE1:
+       case NFA_ZCLOSE2:
+       case NFA_ZCLOSE3:
+       case NFA_ZCLOSE4:
+       case NFA_ZCLOSE5:
+       case NFA_ZCLOSE6:
+       case NFA_ZCLOSE7:
+       case NFA_ZCLOSE8:
+       case NFA_ZCLOSE9:
+#endif
+       case NFA_ZEND:
+           if (state->c == NFA_ZEND)
+           {
+               subidx = 0;
+               sub = &subs->norm;
+           }
+#ifdef FEAT_SYN_HL
+           else if (state->c >= NFA_ZCLOSE)
+           {
+               subidx = state->c - NFA_ZCLOSE;
+               sub = &subs->synt;
+           }
+#endif
+           else
+           {
+               subidx = state->c - NFA_MCLOSE;
+               sub = &subs->norm;
+           }
+
+           /* We don't fill in gaps here, there must have been an MOPEN that
+            * has done that. */
+           save_in_use = sub->in_use;
+           if (sub->in_use <= subidx)
+               sub->in_use = subidx + 1;
+           if (REG_MULTI)
+           {
+               save_lpos = sub->list.multi[subidx].end;
+               if (off == -1)
+               {
+                   sub->list.multi[subidx].end.lnum = reglnum + 1;
+                   sub->list.multi[subidx].end.col = 0;
+               }
+               else
+               {
+                   sub->list.multi[subidx].end.lnum = reglnum;
+                   sub->list.multi[subidx].end.col =
+                                         (colnr_T)(reginput - regline + off);
+               }
+               /* avoid compiler warnings */
+               save_ptr = NULL;
+           }
+           else
+           {
+               save_ptr = sub->list.line[subidx].end;
+               sub->list.line[subidx].end = reginput + off;
+               /* avoid compiler warnings */
+               save_lpos.lnum = 0;
+               save_lpos.col = 0;
+           }
+
+           subs = addstate(l, state->out, subs, pim, off);
+
+           if (REG_MULTI)
+               sub->list.multi[subidx].end = save_lpos;
+           else
+               sub->list.line[subidx].end = save_ptr;
+           sub->in_use = save_in_use;
+           break;
+    }
+    return subs;
+}
+
+/*
+ * Like addstate(), but the new state(s) are put at position "*ip".
+ * Used for zero-width matches, next state to use is the added one.
+ * This makes sure the order of states to be tried does not change, which
+ * matters for alternatives.
+ */
+    static void
+addstate_here(l, state, subs, pim, ip)
+    nfa_list_T         *l;     /* runtime state list */
+    nfa_state_T                *state; /* state to update */
+    regsubs_T          *subs;  /* pointers to subexpressions */
+    nfa_pim_T          *pim;   /* postponed look-behind match */
+    int                        *ip;
+{
+    int tlen = l->n;
+    int count;
+    int listidx = *ip;
+
+    /* first add the state(s) at the end, so that we know how many there are */
+    addstate(l, state, subs, pim, 0);
+
+    /* when "*ip" was at the end of the list, nothing to do */
+    if (listidx + 1 == tlen)
+       return;
+
+    /* re-order to put the new state at the current position */
+    count = l->n - tlen;
+    if (count == 0)
+       return; /* no state got added */
+    if (count == 1)
+    {
+       /* overwrite the current state */
+       l->t[listidx] = l->t[l->n - 1];
+    }
+    else if (count > 1)
+    {
+       if (l->n + count - 1 >= l->len)
+       {
+           /* not enough space to move the new states, reallocate the list
+            * and move the states to the right position */
+           nfa_thread_T *newl;
+
+           l->len = l->len * 3 / 2 + 50;
+           newl = (nfa_thread_T *)alloc(l->len * sizeof(nfa_thread_T));
+           if (newl == NULL)
+               return;
+           mch_memmove(&(newl[0]),
+                   &(l->t[0]),
+                   sizeof(nfa_thread_T) * listidx);
+           mch_memmove(&(newl[listidx]),
+                   &(l->t[l->n - count]),
+                   sizeof(nfa_thread_T) * count);
+           mch_memmove(&(newl[listidx + count]),
+                   &(l->t[listidx + 1]),
+                   sizeof(nfa_thread_T) * (l->n - count - listidx - 1));
+           vim_free(l->t);
+           l->t = newl;
+       }
+       else
+       {
+           /* make space for new states, then move them from the
+            * end to the current position */
+           mch_memmove(&(l->t[listidx + count]),
+                   &(l->t[listidx + 1]),
+                   sizeof(nfa_thread_T) * (l->n - listidx - 1));
+           mch_memmove(&(l->t[listidx]),
+                   &(l->t[l->n - 1]),
+                   sizeof(nfa_thread_T) * count);
+       }
+    }
+    --l->n;
+    *ip = listidx - 1;
+}
+
+/*
+ * Check character class "class" against current character c.
+ */
+    static int
+check_char_class(class, c)
+    int                class;
+    int                c;
+{
+    switch (class)
+    {
+       case NFA_CLASS_ALNUM:
+           if (c >= 1 && c <= 255 && isalnum(c))
+               return OK;
+           break;
+       case NFA_CLASS_ALPHA:
+           if (c >= 1 && c <= 255 && isalpha(c))
+               return OK;
+           break;
+       case NFA_CLASS_BLANK:
+           if (c == ' ' || c == '\t')
+               return OK;
+           break;
+       case NFA_CLASS_CNTRL:
+           if (c >= 1 && c <= 255 && iscntrl(c))
+               return OK;
+           break;
+       case NFA_CLASS_DIGIT:
+           if (VIM_ISDIGIT(c))
+               return OK;
+           break;
+       case NFA_CLASS_GRAPH:
+           if (c >= 1 && c <= 255 && isgraph(c))
+               return OK;
+           break;
+       case NFA_CLASS_LOWER:
+           if (MB_ISLOWER(c))
+               return OK;
+           break;
+       case NFA_CLASS_PRINT:
+           if (vim_isprintc(c))
+               return OK;
+           break;
+       case NFA_CLASS_PUNCT:
+           if (c >= 1 && c <= 255 && ispunct(c))
+               return OK;
+           break;
+       case NFA_CLASS_SPACE:
+           if ((c >= 9 && c <= 13) || (c == ' '))
+               return OK;
+           break;
+       case NFA_CLASS_UPPER:
+           if (MB_ISUPPER(c))
+               return OK;
+           break;
+       case NFA_CLASS_XDIGIT:
+           if (vim_isxdigit(c))
+               return OK;
+           break;
+       case NFA_CLASS_TAB:
+           if (c == '\t')
+               return OK;
+           break;
+       case NFA_CLASS_RETURN:
+           if (c == '\r')
+               return OK;
+           break;
+       case NFA_CLASS_BACKSPACE:
+           if (c == '\b')
+               return OK;
+           break;
+       case NFA_CLASS_ESCAPE:
+           if (c == '\033')
+               return OK;
+           break;
+
+       default:
+           /* should not be here :P */
+           EMSGN("E877: (NFA regexp) Invalid character class: %ld", class);
+           return FAIL;
+    }
+    return FAIL;
+}
+
+/*
+ * Check for a match with subexpression "subidx".
+ * Return TRUE if it matches.
+ */
+    static int
+match_backref(sub, subidx, bytelen)
+    regsub_T   *sub;       /* pointers to subexpressions */
+    int                subidx;
+    int                *bytelen;   /* out: length of match in bytes */
+{
+    int                len;
+
+    if (sub->in_use <= subidx)
+    {
+retempty:
+       /* backref was not set, match an empty string */
+       *bytelen = 0;
+       return TRUE;
+    }
+
+    if (REG_MULTI)
+    {
+       if (sub->list.multi[subidx].start.lnum < 0
+                                      || sub->list.multi[subidx].end.lnum < 0)
+           goto retempty;
+       if (sub->list.multi[subidx].start.lnum == reglnum
+                              && sub->list.multi[subidx].end.lnum == reglnum)
+       {
+           len = sub->list.multi[subidx].end.col
+                                         - sub->list.multi[subidx].start.col;
+           if (cstrncmp(regline + sub->list.multi[subidx].start.col,
+                                                        reginput, &len) == 0)
+           {
+               *bytelen = len;
+               return TRUE;
+           }
+       }
+       else
+       {
+           if (match_with_backref(
+                       sub->list.multi[subidx].start.lnum,
+                       sub->list.multi[subidx].start.col,
+                       sub->list.multi[subidx].end.lnum,
+                       sub->list.multi[subidx].end.col,
+                       bytelen) == RA_MATCH)
+               return TRUE;
+       }
+    }
+    else
+    {
+       if (sub->list.line[subidx].start == NULL
+                                       || sub->list.line[subidx].end == NULL)
+           goto retempty;
+       len = (int)(sub->list.line[subidx].end - sub->list.line[subidx].start);
+       if (cstrncmp(sub->list.line[subidx].start, reginput, &len) == 0)
+       {
+           *bytelen = len;
+           return TRUE;
+       }
+    }
+    return FALSE;
+}
+
+#ifdef FEAT_SYN_HL
+
+static int match_zref __ARGS((int subidx, int *bytelen));
+
+/*
+ * Check for a match with \z subexpression "subidx".
+ * Return TRUE if it matches.
+ */
+    static int
+match_zref(subidx, bytelen)
+    int                subidx;
+    int                *bytelen;   /* out: length of match in bytes */
+{
+    int                len;
+
+    cleanup_zsubexpr();
+    if (re_extmatch_in == NULL || re_extmatch_in->matches[subidx] == NULL)
+    {
+       /* backref was not set, match an empty string */
+       *bytelen = 0;
+       return TRUE;
+    }
+
+    len = (int)STRLEN(re_extmatch_in->matches[subidx]);
+    if (cstrncmp(re_extmatch_in->matches[subidx], reginput, &len) == 0)
+    {
+       *bytelen = len;
+       return TRUE;
+    }
+    return FALSE;
+}
+#endif
+
+/*
+ * Save list IDs for all NFA states of "prog" into "list".
+ * Also reset the IDs to zero.
+ * Only used for the recursive value lastlist[1].
+ */
+    static void
+nfa_save_listids(prog, list)
+    nfa_regprog_T   *prog;
+    int                    *list;
+{
+    int                    i;
+    nfa_state_T            *p;
+
+    /* Order in the list is reverse, it's a bit faster that way. */
+    p = &prog->state[0];
+    for (i = prog->nstate; --i >= 0; )
+    {
+       list[i] = p->lastlist[1];
+       p->lastlist[1] = 0;
+       ++p;
+    }
+}
+
+/*
+ * Restore list IDs from "list" to all NFA states.
+ */
+    static void
+nfa_restore_listids(prog, list)
+    nfa_regprog_T   *prog;
+    int                    *list;
+{
+    int                    i;
+    nfa_state_T            *p;
+
+    p = &prog->state[0];
+    for (i = prog->nstate; --i >= 0; )
+    {
+       p->lastlist[1] = list[i];
+       ++p;
+    }
+}
+
+    static int
+nfa_re_num_cmp(val, op, pos)
+    long_u     val;
+    int                op;
+    long_u     pos;
+{
+    if (op == 1) return pos > val;
+    if (op == 2) return pos < val;
+    return val == pos;
+}
+
+static int recursive_regmatch __ARGS((nfa_state_T *state, nfa_pim_T *pim, nfa_regprog_T *prog, regsubs_T *submatch, regsubs_T *m, int **listids));
+static int nfa_regmatch __ARGS((nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *submatch, regsubs_T *m));
+
+/*
+ * Recursively call nfa_regmatch()
+ * "pim" is NULL or contains info about a Postponed Invisible Match (start
+ * position).
+ */
+    static int
+recursive_regmatch(state, pim, prog, submatch, m, listids)
+    nfa_state_T            *state;
+    nfa_pim_T      *pim;
+    nfa_regprog_T   *prog;
+    regsubs_T      *submatch;
+    regsubs_T      *m;
+    int                    **listids;
+{
+    int                save_reginput_col = (int)(reginput - regline);
+    int                save_reglnum = reglnum;
+    int                save_nfa_match = nfa_match;
+    int                save_nfa_listid = nfa_listid;
+    save_se_T   *save_nfa_endp = nfa_endp;
+    save_se_T   endpos;
+    save_se_T   *endposp = NULL;
+    int                result;
+    int                need_restore = FALSE;
+
+    if (pim != NULL)
+    {
+       /* start at the position where the postponed match was */
+       if (REG_MULTI)
+           reginput = regline + pim->end.pos.col;
+       else
+           reginput = pim->end.ptr;
+    }
+
+    if (state->c == NFA_START_INVISIBLE_BEFORE
+        || state->c == NFA_START_INVISIBLE_BEFORE_FIRST
+        || state->c == NFA_START_INVISIBLE_BEFORE_NEG
+        || state->c == NFA_START_INVISIBLE_BEFORE_NEG_FIRST)
+    {
+       /* The recursive match must end at the current position. When "pim" is
+        * not NULL it specifies the current position. */
+       endposp = &endpos;
+       if (REG_MULTI)
+       {
+           if (pim == NULL)
+           {
+               endpos.se_u.pos.col = (int)(reginput - regline);
+               endpos.se_u.pos.lnum = reglnum;
+           }
+           else
+               endpos.se_u.pos = pim->end.pos;
+       }
+       else
+       {
+           if (pim == NULL)
+               endpos.se_u.ptr = reginput;
+           else
+               endpos.se_u.ptr = pim->end.ptr;
+       }
+
+       /* Go back the specified number of bytes, or as far as the
+        * start of the previous line, to try matching "\@<=" or
+        * not matching "\@<!". This is very inefficient, limit the number of
+        * bytes if possible. */
+       if (state->val <= 0)
+       {
+           if (REG_MULTI)
+           {
+               regline = reg_getline(--reglnum);
+               if (regline == NULL)
+                   /* can't go before the first line */
+                   regline = reg_getline(++reglnum);
+           }
+           reginput = regline;
+       }
+       else
+       {
+           if (REG_MULTI && (int)(reginput - regline) < state->val)
+           {
+               /* Not enough bytes in this line, go to end of
+                * previous line. */
+               regline = reg_getline(--reglnum);
+               if (regline == NULL)
+               {
+                   /* can't go before the first line */
+                   regline = reg_getline(++reglnum);
+                   reginput = regline;
+               }
+               else
+                   reginput = regline + STRLEN(regline);
+           }
+           if ((int)(reginput - regline) >= state->val)
+           {
+               reginput -= state->val;
+#ifdef FEAT_MBYTE
+               if (has_mbyte)
+                   reginput -= mb_head_off(regline, reginput);
+#endif
+           }
+           else
+               reginput = regline;
+       }
+    }
+
+#ifdef ENABLE_LOG
+    if (log_fd != stderr)
+       fclose(log_fd);
+    log_fd = NULL;
+#endif
+    /* Have to clear the lastlist field of the NFA nodes, so that
+     * nfa_regmatch() and addstate() can run properly after recursion. */
+    if (nfa_ll_index == 1)
+    {
+       /* Already calling nfa_regmatch() recursively.  Save the lastlist[1]
+        * values and clear them. */
+       if (*listids == NULL)
+       {
+           *listids = (int *)lalloc(sizeof(int) * nstate, TRUE);
+           if (*listids == NULL)
+           {
+               EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!"));
+               return 0;
+           }
+       }
+       nfa_save_listids(prog, *listids);
+       need_restore = TRUE;
+       /* any value of nfa_listid will do */
+    }
+    else
+    {
+       /* First recursive nfa_regmatch() call, switch to the second lastlist
+        * entry.  Make sure nfa_listid is different from a previous recursive
+        * call, because some states may still have this ID. */
+       ++nfa_ll_index;
+       if (nfa_listid <= nfa_alt_listid)
+           nfa_listid = nfa_alt_listid;
+    }
+
+    /* Call nfa_regmatch() to check if the current concat matches at this
+     * position. The concat ends with the node NFA_END_INVISIBLE */
+    nfa_endp = endposp;
+    result = nfa_regmatch(prog, state->out, submatch, m);
+
+    if (need_restore)
+       nfa_restore_listids(prog, *listids);
+    else
+    {
+       --nfa_ll_index;
+       nfa_alt_listid = nfa_listid;
+    }
+
+    /* restore position in input text */
+    reglnum = save_reglnum;
+    if (REG_MULTI)
+       regline = reg_getline(reglnum);
+    reginput = regline + save_reginput_col;
+    nfa_match = save_nfa_match;
+    nfa_endp = save_nfa_endp;
+    nfa_listid = save_nfa_listid;
+
+#ifdef ENABLE_LOG
+    log_fd = fopen(NFA_REGEXP_RUN_LOG, "a");
+    if (log_fd != NULL)
+    {
+       fprintf(log_fd, "****************************\n");
+       fprintf(log_fd, "FINISHED RUNNING nfa_regmatch() recursively\n");
+       fprintf(log_fd, "MATCH = %s\n", result == TRUE ? "OK" : "FALSE");
+       fprintf(log_fd, "****************************\n");
+    }
+    else
+    {
+       EMSG(_("Could not open temporary log file for writing, displaying on stderr ... "));
+       log_fd = stderr;
+    }
+#endif
+
+    return result;
+}
+
+static int skip_to_start __ARGS((int c, colnr_T *colp));
+static long find_match_text __ARGS((colnr_T startcol, int regstart, char_u *match_text));
+
+/*
+ * Estimate the chance of a match with "state" failing.
+ * empty match: 0
+ * NFA_ANY: 1
+ * specific character: 99
+ */
+    static int
+failure_chance(state, depth)
+    nfa_state_T *state;
+    int                depth;
+{
+    int c = state->c;
+    int l, r;
+
+    /* detect looping */
+    if (depth > 4)
+       return 1;
+
+    switch (c)
+    {
+       case NFA_SPLIT:
+           if (state->out->c == NFA_SPLIT || state->out1->c == NFA_SPLIT)
+               /* avoid recursive stuff */
+               return 1;
+           /* two alternatives, use the lowest failure chance */
+           l = failure_chance(state->out, depth + 1);
+           r = failure_chance(state->out1, depth + 1);
+           return l < r ? l : r;
+
+       case NFA_ANY:
+           /* matches anything, unlikely to fail */
+           return 1;
+
+       case NFA_MATCH:
+       case NFA_MCLOSE:
+           /* empty match works always */
+           return 0;
+
+       case NFA_START_INVISIBLE:
+       case NFA_START_INVISIBLE_FIRST:
+       case NFA_START_INVISIBLE_NEG:
+       case NFA_START_INVISIBLE_NEG_FIRST:
+       case NFA_START_INVISIBLE_BEFORE:
+       case NFA_START_INVISIBLE_BEFORE_FIRST:
+       case NFA_START_INVISIBLE_BEFORE_NEG:
+       case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:
+       case NFA_START_PATTERN:
+           /* recursive regmatch is expensive, use low failure chance */
+           return 5;
+
+       case NFA_BOL:
+       case NFA_EOL:
+       case NFA_BOF:
+       case NFA_EOF:
+       case NFA_NEWL:
+           return 99;
+
+       case NFA_BOW:
+       case NFA_EOW:
+           return 90;
+
+       case NFA_MOPEN:
+       case NFA_MOPEN1:
+       case NFA_MOPEN2:
+       case NFA_MOPEN3:
+       case NFA_MOPEN4:
+       case NFA_MOPEN5:
+       case NFA_MOPEN6:
+       case NFA_MOPEN7:
+       case NFA_MOPEN8:
+       case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+       case NFA_ZOPEN:
+       case NFA_ZOPEN1:
+       case NFA_ZOPEN2:
+       case NFA_ZOPEN3:
+       case NFA_ZOPEN4:
+       case NFA_ZOPEN5:
+       case NFA_ZOPEN6:
+       case NFA_ZOPEN7:
+       case NFA_ZOPEN8:
+       case NFA_ZOPEN9:
+       case NFA_ZCLOSE:
+       case NFA_ZCLOSE1:
+       case NFA_ZCLOSE2:
+       case NFA_ZCLOSE3:
+       case NFA_ZCLOSE4:
+       case NFA_ZCLOSE5:
+       case NFA_ZCLOSE6:
+       case NFA_ZCLOSE7:
+       case NFA_ZCLOSE8:
+       case NFA_ZCLOSE9:
+#endif
+       case NFA_NOPEN:
+       case NFA_MCLOSE1:
+       case NFA_MCLOSE2:
+       case NFA_MCLOSE3:
+       case NFA_MCLOSE4:
+       case NFA_MCLOSE5:
+       case NFA_MCLOSE6:
+       case NFA_MCLOSE7:
+       case NFA_MCLOSE8:
+       case NFA_MCLOSE9:
+       case NFA_NCLOSE:
+           return failure_chance(state->out, depth + 1);
+
+       case NFA_BACKREF1:
+       case NFA_BACKREF2:
+       case NFA_BACKREF3:
+       case NFA_BACKREF4:
+       case NFA_BACKREF5:
+       case NFA_BACKREF6:
+       case NFA_BACKREF7:
+       case NFA_BACKREF8:
+       case NFA_BACKREF9:
+#ifdef FEAT_SYN_HL
+       case NFA_ZREF1:
+       case NFA_ZREF2:
+       case NFA_ZREF3:
+       case NFA_ZREF4:
+       case NFA_ZREF5:
+       case NFA_ZREF6:
+       case NFA_ZREF7:
+       case NFA_ZREF8:
+       case NFA_ZREF9:
+#endif
+           /* backreferences don't match in many places */
+           return 94;
+
+       case NFA_LNUM_GT:
+       case NFA_LNUM_LT:
+       case NFA_COL_GT:
+       case NFA_COL_LT:
+       case NFA_VCOL_GT:
+       case NFA_VCOL_LT:
+       case NFA_MARK_GT:
+       case NFA_MARK_LT:
+       case NFA_VISUAL:
+           /* before/after positions don't match very often */
+           return 85;
+
+       case NFA_LNUM:
+           return 90;
+
+       case NFA_CURSOR:
+       case NFA_COL:
+       case NFA_VCOL:
+       case NFA_MARK:
+           /* specific positions rarely match */
+           return 98;
+
+       case NFA_COMPOSING:
+           return 95;
+
+       default:
+           if (c > 0)
+               /* character match fails often */
+               return 95;
+    }
+
+    /* something else, includes character classes */
+    return 50;
+}
+
+/*
+ * Skip until the char "c" we know a match must start with.
+ */
+    static int
+skip_to_start(c, colp)
+    int                c;
+    colnr_T    *colp;
+{
+    char_u *s;
+
+    /* Used often, do some work to avoid call overhead. */
+    if (!ireg_ic
+#ifdef FEAT_MBYTE
+               && !has_mbyte
+#endif
+               )
+       s = vim_strbyte(regline + *colp, c);
+    else
+       s = cstrchr(regline + *colp, c);
+    if (s == NULL)
+       return FAIL;
+    *colp = (int)(s - regline);
+    return OK;
+}
+
+/*
+ * Check for a match with match_text.
+ * Called after skip_to_start() has found regstart.
+ * Returns zero for no match, 1 for a match.
+ */
+    static long
+find_match_text(startcol, regstart, match_text)
+    colnr_T startcol;
+    int            regstart;
+    char_u  *match_text;
+{
+    colnr_T col = startcol;
+    int            c1, c2;
+    int            len1, len2;
+    int            match;
+
+    for (;;)
+    {
+       match = TRUE;
+       len2 = MB_CHAR2LEN(regstart); /* skip regstart */
+       for (len1 = 0; match_text[len1] != NUL; len1 += MB_CHAR2LEN(c1))
+       {
+           c1 = PTR2CHAR(match_text + len1);
+           c2 = PTR2CHAR(regline + col + len2);
+           if (c1 != c2 && (!ireg_ic || MB_TOLOWER(c1) != MB_TOLOWER(c2)))
+           {
+               match = FALSE;
+               break;
+           }
+           len2 += MB_CHAR2LEN(c2);
+       }
+       if (match
+#ifdef FEAT_MBYTE
+               /* check that no composing char follows */
+               && !(enc_utf8
+                          && utf_iscomposing(PTR2CHAR(regline + col + len2)))
+#endif
+               )
+       {
+           cleanup_subexpr();
+           if (REG_MULTI)
+           {
+               reg_startpos[0].lnum = reglnum;
+               reg_startpos[0].col = col;
+               reg_endpos[0].lnum = reglnum;
+               reg_endpos[0].col = col + len2;
+           }
+           else
+           {
+               reg_startp[0] = regline + col;
+               reg_endp[0] = regline + col + len2;
+           }
+           return 1L;
+       }
+
+       /* Try finding regstart after the current match. */
+       col += MB_CHAR2LEN(regstart); /* skip regstart */
+       if (skip_to_start(regstart, &col) == FAIL)
+           break;
+    }
+    return 0L;
+}
+
+/*
+ * Main matching routine.
+ *
+ * Run NFA to determine whether it matches reginput.
+ *
+ * When "nfa_endp" is not NULL it is a required end-of-match position.
+ *
+ * Return TRUE if there is a match, FALSE otherwise.
+ * Note: Caller must ensure that: start != NULL.
+ */
+    static int
+nfa_regmatch(prog, start, submatch, m)
+    nfa_regprog_T      *prog;
+    nfa_state_T                *start;
+    regsubs_T          *submatch;
+    regsubs_T          *m;
+{
+    int                result;
+    int                size = 0;
+    int                flag = 0;
+    int                go_to_nextline = FALSE;
+    nfa_thread_T *t;
+    nfa_list_T list[2];
+    int                listidx;
+    nfa_list_T *thislist;
+    nfa_list_T *nextlist;
+    int                *listids = NULL;
+    nfa_state_T *add_state;
+    int                add_here;
+    int                add_count;
+    int                add_off = 0;
+    int                toplevel = start->c == NFA_MOPEN;
+#ifdef NFA_REGEXP_DEBUG_LOG
+    FILE       *debug = fopen(NFA_REGEXP_DEBUG_LOG, "a");
+
+    if (debug == NULL)
+    {
+       EMSG2(_("(NFA) COULD NOT OPEN %s !"), NFA_REGEXP_DEBUG_LOG);
+       return FALSE;
+    }
+#endif
+    nfa_match = FALSE;
+
+    /* Allocate memory for the lists of nodes. */
+    size = (nstate + 1) * sizeof(nfa_thread_T);
+    list[0].t = (nfa_thread_T *)lalloc(size, TRUE);
+    list[0].len = nstate + 1;
+    list[1].t = (nfa_thread_T *)lalloc(size, TRUE);
+    list[1].len = nstate + 1;
+    if (list[0].t == NULL || list[1].t == NULL)
+       goto theend;
+
+#ifdef ENABLE_LOG
+    log_fd = fopen(NFA_REGEXP_RUN_LOG, "a");
+    if (log_fd != NULL)
+    {
+       fprintf(log_fd, "**********************************\n");
+       nfa_set_code(start->c);
+       fprintf(log_fd, " RUNNING nfa_regmatch() starting with state %d, code %s\n",
+       abs(start->id), code);
+       fprintf(log_fd, "**********************************\n");
+    }
+    else
+    {
+       EMSG(_("Could not open temporary log file for writing, displaying on stderr ... "));
+       log_fd = stderr;
+    }
+#endif
+
+    thislist = &list[0];
+    thislist->n = 0;
+    thislist->has_pim = FALSE;
+    nextlist = &list[1];
+    nextlist->n = 0;
+    nextlist->has_pim = FALSE;
+#ifdef ENABLE_LOG
+    fprintf(log_fd, "(---) STARTSTATE first\n");
+#endif
+    thislist->id = nfa_listid + 1;
+
+    /* Inline optimized code for addstate(thislist, start, m, 0) if we know
+     * it's the first MOPEN. */
+    if (toplevel)
+    {
+       if (REG_MULTI)
+       {
+           m->norm.list.multi[0].start.lnum = reglnum;
+           m->norm.list.multi[0].start.col = (colnr_T)(reginput - regline);
+       }
+       else
+           m->norm.list.line[0].start = reginput;
+       m->norm.in_use = 1;
+       addstate(thislist, start->out, m, NULL, 0);
+    }
+    else
+       addstate(thislist, start, m, NULL, 0);
+
+#define        ADD_STATE_IF_MATCH(state)                       \
+    if (result) {                                      \
+       add_state = state->out;                         \
+       add_off = clen;                                 \
+    }
+
+    /*
+     * Run for each character.
+     */
+    for (;;)
+    {
+       int     curc;
+       int     clen;
+
+#ifdef FEAT_MBYTE
+       if (has_mbyte)
+       {
+           curc = (*mb_ptr2char)(reginput);
+           clen = (*mb_ptr2len)(reginput);
+       }
+       else
+#endif
+       {
+           curc = *reginput;
+           clen = 1;
+       }
+       if (curc == NUL)
+       {
+           clen = 0;
+           go_to_nextline = FALSE;
+       }
+
+       /* swap lists */
+       thislist = &list[flag];
+       nextlist = &list[flag ^= 1];
+       nextlist->n = 0;            /* clear nextlist */
+       nextlist->has_pim = FALSE;
+       ++nfa_listid;
+       thislist->id = nfa_listid;
+       nextlist->id = nfa_listid + 1;
+
+#ifdef ENABLE_LOG
+       fprintf(log_fd, "------------------------------------------\n");
+       fprintf(log_fd, ">>> Reginput is \"%s\"\n", reginput);
+       fprintf(log_fd, ">>> Advanced one character ... Current char is %c (code %d) \n", curc, (int)curc);
+       fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n);
+       {
+           int i;
+
+           for (i = 0; i < thislist->n; i++)
+               fprintf(log_fd, "%d  ", abs(thislist->t[i].state->id));
+       }
+       fprintf(log_fd, "\n");
+#endif
+
+#ifdef NFA_REGEXP_DEBUG_LOG
+       fprintf(debug, "\n-------------------\n");
+#endif
+       /*
+        * If the state lists are empty we can stop.
+        */
+       if (thislist->n == 0)
+           break;
+
+       /* compute nextlist */
+       for (listidx = 0; listidx < thislist->n; ++listidx)
+       {
+           t = &thislist->t[listidx];
+
+#ifdef NFA_REGEXP_DEBUG_LOG
+           nfa_set_code(t->state->c);
+           fprintf(debug, "%s, ", code);
+#endif
+#ifdef ENABLE_LOG
+           {
+               int col;
+
+               if (t->subs.norm.in_use <= 0)
+                   col = -1;
+               else if (REG_MULTI)
+                   col = t->subs.norm.list.multi[0].start.col;
+               else
+                   col = (int)(t->subs.norm.list.line[0].start - regline);
+               nfa_set_code(t->state->c);
+               fprintf(log_fd, "(%d) char %d %s (start col %d)%s ... \n",
+                       abs(t->state->id), (int)t->state->c, code, col,
+                       pim_info(&t->pim));
+           }
+#endif
+
+           /*
+            * Handle the possible codes of the current state.
+            * The most important is NFA_MATCH.
+            */
+           add_state = NULL;
+           add_here = FALSE;
+           add_count = 0;
+           switch (t->state->c)
+           {
+           case NFA_MATCH:
+             {
+               nfa_match = TRUE;
+               copy_sub(&submatch->norm, &t->subs.norm);
+#ifdef FEAT_SYN_HL
+               if (nfa_has_zsubexpr)
+                   copy_sub(&submatch->synt, &t->subs.synt);
+#endif
+#ifdef ENABLE_LOG
+               log_subsexpr(&t->subs);
+#endif
+               /* Found the left-most longest match, do not look at any other
+                * states at this position.  When the list of states is going
+                * to be empty quit without advancing, so that "reginput" is
+                * correct. */
+               if (nextlist->n == 0)
+                   clen = 0;
+               goto nextchar;
+             }
+
+           case NFA_END_INVISIBLE:
+           case NFA_END_INVISIBLE_NEG:
+           case NFA_END_PATTERN:
+               /*
+                * This is only encountered after a NFA_START_INVISIBLE or
+                * NFA_START_INVISIBLE_BEFORE node.
+                * They surround a zero-width group, used with "\@=", "\&",
+                * "\@!", "\@<=" and "\@<!".
+                * If we got here, it means that the current "invisible" group
+                * finished successfully, so return control to the parent
+                * nfa_regmatch().  For a look-behind match only when it ends
+                * in the position in "nfa_endp".
+                * Submatches are stored in *m, and used in the parent call.
+                */
+#ifdef ENABLE_LOG
+               if (nfa_endp != NULL)
+               {
+                   if (REG_MULTI)
+                       fprintf(log_fd, "Current lnum: %d, endp lnum: %d; current col: %d, endp col: %d\n",
+                               (int)reglnum,
+                               (int)nfa_endp->se_u.pos.lnum,
+                               (int)(reginput - regline),
+                               nfa_endp->se_u.pos.col);
+                   else
+                       fprintf(log_fd, "Current col: %d, endp col: %d\n",
+                               (int)(reginput - regline),
+                               (int)(nfa_endp->se_u.ptr - reginput));
+               }
+#endif
+               /* If "nfa_endp" is set it's only a match if it ends at
+                * "nfa_endp" */
+               if (nfa_endp != NULL && (REG_MULTI
+                       ? (reglnum != nfa_endp->se_u.pos.lnum
+                           || (int)(reginput - regline)
+                                               != nfa_endp->se_u.pos.col)
+                       : reginput != nfa_endp->se_u.ptr))
+                   break;
+
+               /* do not set submatches for \@! */
+               if (t->state->c != NFA_END_INVISIBLE_NEG)
+               {
+                   copy_sub(&m->norm, &t->subs.norm);
+#ifdef FEAT_SYN_HL
+                   if (nfa_has_zsubexpr)
+                       copy_sub(&m->synt, &t->subs.synt);
+#endif
+               }
+#ifdef ENABLE_LOG
+               fprintf(log_fd, "Match found:\n");
+               log_subsexpr(m);
+#endif
+               nfa_match = TRUE;
+               break;
+
+           case NFA_START_INVISIBLE:
+           case NFA_START_INVISIBLE_FIRST:
+           case NFA_START_INVISIBLE_NEG:
+           case NFA_START_INVISIBLE_NEG_FIRST:
+           case NFA_START_INVISIBLE_BEFORE:
+           case NFA_START_INVISIBLE_BEFORE_FIRST:
+           case NFA_START_INVISIBLE_BEFORE_NEG:
+           case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:
+               {
+#ifdef ENABLE_LOG
+                   fprintf(log_fd, "Failure chance invisible: %d, what follows: %d\n",
+                           failure_chance(t->state->out, 0),
+                           failure_chance(t->state->out1->out, 0));
+#endif
+                   /* Do it directly if there already is a PIM or when
+                    * nfa_postprocess() detected it will work better. */
+                   if (t->pim.result != NFA_PIM_UNUSED
+                        || t->state->c == NFA_START_INVISIBLE_FIRST
+                        || t->state->c == NFA_START_INVISIBLE_NEG_FIRST
+                        || t->state->c == NFA_START_INVISIBLE_BEFORE_FIRST
+                        || t->state->c == NFA_START_INVISIBLE_BEFORE_NEG_FIRST)
+                   {
+                       int in_use = m->norm.in_use;
+
+                       /* Copy submatch info for the recursive call, so that
+                        * \1 can be matched. */
+                       copy_sub_off(&m->norm, &t->subs.norm);
+
+                       /*
+                        * First try matching the invisible match, then what
+                        * follows.
+                        */
+                       result = recursive_regmatch(t->state, NULL, prog,
+                                                      submatch, m, &listids);
+
+                       /* for \@! and \@<! it is a match when the result is
+                        * FALSE */
+                       if (result != (t->state->c == NFA_START_INVISIBLE_NEG
+                              || t->state->c == NFA_START_INVISIBLE_NEG_FIRST
+                              || t->state->c
+                                          == NFA_START_INVISIBLE_BEFORE_NEG
+                              || t->state->c
+                                    == NFA_START_INVISIBLE_BEFORE_NEG_FIRST))
+                       {
+                           /* Copy submatch info from the recursive call */
+                           copy_sub_off(&t->subs.norm, &m->norm);
+#ifdef FEAT_SYN_HL
+                           if (nfa_has_zsubexpr)
+                               copy_sub_off(&t->subs.synt, &m->synt);
+#endif
+
+                           /* t->state->out1 is the corresponding
+                            * END_INVISIBLE node; Add its out to the current
+                            * list (zero-width match). */
+                           add_here = TRUE;
+                           add_state = t->state->out1->out;
+                       }
+                       m->norm.in_use = in_use;
+                   }
+                   else
+                   {
+                       nfa_pim_T pim;
+
+                       /*
+                        * First try matching what follows.  Only if a match
+                        * is found verify the invisible match matches.  Add a
+                        * nfa_pim_T to the following states, it contains info
+                        * about the invisible match.
+                        */
+                       pim.state = t->state;
+                       pim.result = NFA_PIM_TODO;
+                       pim.subs.norm.in_use = 0;
+#ifdef FEAT_SYN_HL
+                       pim.subs.synt.in_use = 0;
+#endif
+                       if (REG_MULTI)
+                       {
+                           pim.end.pos.col = (int)(reginput - regline);
+                           pim.end.pos.lnum = reglnum;
+                       }
+                       else
+                           pim.end.ptr = reginput;
+
+                       /* t->state->out1 is the corresponding END_INVISIBLE
+                        * node; Add its out to the current list (zero-width
+                        * match). */
+                       addstate_here(thislist, t->state->out1->out, &t->subs,
+                                                              &pim, &listidx);
+                   }
+               }
+               break;
+
+           case NFA_START_PATTERN:
+             {
+               nfa_state_T *skip = NULL;
+#ifdef ENABLE_LOG
+               int         skip_lid = 0;
+#endif
+
+               /* There is no point in trying to match the pattern if the
+                * output state is not going to be added to the list. */
+               if (state_in_list(nextlist, t->state->out1->out, &t->subs))
+               {
+                   skip = t->state->out1->out;
+#ifdef ENABLE_LOG
+                   skip_lid = nextlist->id;
+#endif
+               }
+               else if (state_in_list(nextlist,
+                                         t->state->out1->out->out, &t->subs))
+               {
+                   skip = t->state->out1->out->out;
+#ifdef ENABLE_LOG
+                   skip_lid = nextlist->id;
+#endif
+               }
+               else if (state_in_list(thislist,
+                                         t->state->out1->out->out, &t->subs))
+               {
+                   skip = t->state->out1->out->out;
+#ifdef ENABLE_LOG
+                   skip_lid = thislist->id;
+#endif
+               }
+               if (skip != NULL)
+               {
+#ifdef ENABLE_LOG
+                   nfa_set_code(skip->c);
+                   fprintf(log_fd, "> Not trying to match pattern, output state %d is already in list %d. char %d: %s\n",
+                           abs(skip->id), skip_lid, skip->c, code);
+#endif
+                   break;
+               }
+
+               /* First try matching the pattern. */
+               result = recursive_regmatch(t->state, NULL, prog,
+                                                      submatch, m, &listids);
+               if (result)
+               {
+                   int bytelen;
+
+#ifdef ENABLE_LOG
+                   fprintf(log_fd, "NFA_START_PATTERN matches:\n");
+                   log_subsexpr(m);
+#endif
+                   /* Copy submatch info from the recursive call */
+                   copy_sub_off(&t->subs.norm, &m->norm);
+#ifdef FEAT_SYN_HL
+                   if (nfa_has_zsubexpr)
+                       copy_sub_off(&t->subs.synt, &m->synt);
+#endif
+                   /* Now we need to skip over the matched text and then
+                    * continue with what follows. */
+                   if (REG_MULTI)
+                       /* TODO: multi-line match */
+                       bytelen = m->norm.list.multi[0].end.col
+                                                 - (int)(reginput - regline);
+                   else
+                       bytelen = (int)(m->norm.list.line[0].end - reginput);
+
+#ifdef ENABLE_LOG
+                   fprintf(log_fd, "NFA_START_PATTERN length: %d\n", bytelen);
+#endif
+                   if (bytelen == 0)
+                   {
+                       /* empty match, output of corresponding
+                        * NFA_END_PATTERN/NFA_SKIP to be used at current
+                        * position */
+                       add_here = TRUE;
+                       add_state = t->state->out1->out->out;
+                   }
+                   else if (bytelen <= clen)
+                   {
+                       /* match current character, output of corresponding
+                        * NFA_END_PATTERN to be used at next position. */
+                       add_state = t->state->out1->out->out;
+                       add_off = clen;
+                   }
+                   else
+                   {
+                       /* skip over the matched characters, set character
+                        * count in NFA_SKIP */
+                       add_state = t->state->out1->out;
+                       add_off = bytelen;
+                       add_count = bytelen - clen;
+                   }
+               }
+               break;
+             }
+
+           case NFA_BOL:
+               if (reginput == regline)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+
+           case NFA_EOL:
+               if (curc == NUL)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+
+           case NFA_BOW:
+               result = TRUE;
+
+               if (curc == NUL)
+                   result = FALSE;
+#ifdef FEAT_MBYTE
+               else if (has_mbyte)
+               {
+                   int this_class;
+
+                   /* Get class of current and previous char (if it exists). */
+                   this_class = mb_get_class_buf(reginput, reg_buf);
+                   if (this_class <= 1)
+                       result = FALSE;
+                   else if (reg_prev_class() == this_class)
+                       result = FALSE;
+               }
+#endif
+               else if (!vim_iswordc_buf(curc, reg_buf)
+                          || (reginput > regline
+                                  && vim_iswordc_buf(reginput[-1], reg_buf)))
+                   result = FALSE;
+               if (result)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+
+           case NFA_EOW:
+               result = TRUE;
+               if (reginput == regline)
+                   result = FALSE;
+#ifdef FEAT_MBYTE
+               else if (has_mbyte)
+               {
+                   int this_class, prev_class;
+
+                   /* Get class of current and previous char (if it exists). */
+                   this_class = mb_get_class_buf(reginput, reg_buf);
+                   prev_class = reg_prev_class();
+                   if (this_class == prev_class
+                                       || prev_class == 0 || prev_class == 1)
+                       result = FALSE;
+               }
+#endif
+               else if (!vim_iswordc_buf(reginput[-1], reg_buf)
+                       || (reginput[0] != NUL
+                                          && vim_iswordc_buf(curc, reg_buf)))
+                   result = FALSE;
+               if (result)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+
+           case NFA_BOF:
+               if (reglnum == 0 && reginput == regline
+                                       && (!REG_MULTI || reg_firstlnum == 1))
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+
+           case NFA_EOF:
+               if (reglnum == reg_maxline && curc == NUL)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+
+#ifdef FEAT_MBYTE
+           case NFA_COMPOSING:
+           {
+               int         mc = curc;
+               int         len = 0;
+               nfa_state_T *end;
+               nfa_state_T *sta;
+               int         cchars[MAX_MCO];
+               int         ccount = 0;
+               int         j;
+
+               sta = t->state->out;
+               len = 0;
+               if (utf_iscomposing(sta->c))
+               {
+                   /* Only match composing character(s), ignore base
+                    * character.  Used for ".{composing}" and "{composing}"
+                    * (no preceding character). */
+                   len += mb_char2len(mc);
+               }
+               if (ireg_icombine && len == 0)
+               {
+                   /* If \Z was present, then ignore composing characters.
+                    * When ignoring the base character this always matches. */
+                   if (len == 0 && sta->c != curc)
+                       result = FAIL;
+                   else
+                       result = OK;
+                   while (sta->c != NFA_END_COMPOSING)
+                       sta = sta->out;
+               }
+
+               /* Check base character matches first, unless ignored. */
+               else if (len > 0 || mc == sta->c)
+               {
+                   if (len == 0)
+                   {
+                       len += mb_char2len(mc);
+                       sta = sta->out;
+                   }
+
+                   /* We don't care about the order of composing characters.
+                    * Get them into cchars[] first. */
+                   while (len < clen)
+                   {
+                       mc = mb_ptr2char(reginput + len);
+                       cchars[ccount++] = mc;
+                       len += mb_char2len(mc);
+                       if (ccount == MAX_MCO)
+                           break;
+                   }
+
+                   /* Check that each composing char in the pattern matches a
+                    * composing char in the text.  We do not check if all
+                    * composing chars are matched. */
+                   result = OK;
+                   while (sta->c != NFA_END_COMPOSING)
+                   {
+                       for (j = 0; j < ccount; ++j)
+                           if (cchars[j] == sta->c)
+                               break;
+                       if (j == ccount)
+                       {
+                           result = FAIL;
+                           break;
+                       }
+                       sta = sta->out;
+                   }
+               }
+               else
+                   result = FAIL;
+
+               end = t->state->out1;       /* NFA_END_COMPOSING */
+               ADD_STATE_IF_MATCH(end);
+               break;
+           }
+#endif
+
+           case NFA_NEWL:
+               if (curc == NUL && !reg_line_lbr && REG_MULTI
+                                                   && reglnum <= reg_maxline)
+               {
+                   go_to_nextline = TRUE;
+                   /* Pass -1 for the offset, which means taking the position
+                    * at the start of the next line. */
+                   add_state = t->state->out;
+                   add_off = -1;
+               }
+               else if (curc == '\n' && reg_line_lbr)
+               {
+                   /* match \n as if it is an ordinary character */
+                   add_state = t->state->out;
+                   add_off = 1;
+               }
+               break;
+
+           case NFA_START_COLL:
+           case NFA_START_NEG_COLL:
+             {
+               /* What follows is a list of characters, until NFA_END_COLL.
+                * One of them must match or none of them must match. */
+               nfa_state_T     *state;
+               int             result_if_matched;
+               int             c1, c2;
+
+               /* Never match EOL. If it's part of the collection it is added
+                * as a separate state with an OR. */
+               if (curc == NUL)
+                   break;
+
+               state = t->state->out;
+               result_if_matched = (t->state->c == NFA_START_COLL);
+               for (;;)
+               {
+                   if (state->c == NFA_END_COLL)
+                   {
+                       result = !result_if_matched;
+                       break;
+                   }
+                   if (state->c == NFA_RANGE_MIN)
+                   {
+                       c1 = state->val;
+                       state = state->out; /* advance to NFA_RANGE_MAX */
+                       c2 = state->val;
+#ifdef ENABLE_LOG
+                       fprintf(log_fd, "NFA_RANGE_MIN curc=%d c1=%d c2=%d\n",
+                               curc, c1, c2);
+#endif
+                       if (curc >= c1 && curc <= c2)
+                       {
+                           result = result_if_matched;
+                           break;
+                       }
+                       if (ireg_ic)
+                       {
+                           int curc_low = MB_TOLOWER(curc);
+                           int done = FALSE;
+
+                           for ( ; c1 <= c2; ++c1)
+                               if (MB_TOLOWER(c1) == curc_low)
+                               {
+                                   result = result_if_matched;
+                                   done = TRUE;
+                                   break;
+                               }
+                           if (done)
+                               break;
+                       }
+                   }
+                   else if (state->c < 0 ? check_char_class(state->c, curc)
+                               : (curc == state->c
+                                  || (ireg_ic && MB_TOLOWER(curc)
+                                                   == MB_TOLOWER(state->c))))
+                   {
+                       result = result_if_matched;
+                       break;
+                   }
+                   state = state->out;
+               }
+               if (result)
+               {
+                   /* next state is in out of the NFA_END_COLL, out1 of
+                    * START points to the END state */
+                   add_state = t->state->out1->out;
+                   add_off = clen;
+               }
+               break;
+             }
+
+           case NFA_ANY:
+               /* Any char except '\0', (end of input) does not match. */
+               if (curc > 0)
+               {
+                   add_state = t->state->out;
+                   add_off = clen;
+               }
+               break;
+
+           /*
+            * Character classes like \a for alpha, \d for digit etc.
+            */
+           case NFA_IDENT:     /*  \i  */
+               result = vim_isIDc(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_SIDENT:    /*  \I  */
+               result = !VIM_ISDIGIT(curc) && vim_isIDc(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_KWORD:     /*  \k  */
+               result = vim_iswordp_buf(reginput, reg_buf);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_SKWORD:    /*  \K  */
+               result = !VIM_ISDIGIT(curc)
+                                       && vim_iswordp_buf(reginput, reg_buf);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_FNAME:     /*  \f  */
+               result = vim_isfilec(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_SFNAME:    /*  \F  */
+               result = !VIM_ISDIGIT(curc) && vim_isfilec(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_PRINT:     /*  \p  */
+               result = vim_isprintc(PTR2CHAR(reginput));
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_SPRINT:    /*  \P  */
+               result = !VIM_ISDIGIT(curc) && vim_isprintc(PTR2CHAR(reginput));
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_WHITE:     /*  \s  */
+               result = vim_iswhite(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_NWHITE:    /*  \S  */
+               result = curc != NUL && !vim_iswhite(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_DIGIT:     /*  \d  */
+               result = ri_digit(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_NDIGIT:    /*  \D  */
+               result = curc != NUL && !ri_digit(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_HEX:       /*  \x  */
+               result = ri_hex(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_NHEX:      /*  \X  */
+               result = curc != NUL && !ri_hex(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_OCTAL:     /*  \o  */
+               result = ri_octal(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_NOCTAL:    /*  \O  */
+               result = curc != NUL && !ri_octal(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_WORD:      /*  \w  */
+               result = ri_word(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_NWORD:     /*  \W  */
+               result = curc != NUL && !ri_word(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_HEAD:      /*  \h  */
+               result = ri_head(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_NHEAD:     /*  \H  */
+               result = curc != NUL && !ri_head(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_ALPHA:     /*  \a  */
+               result = ri_alpha(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_NALPHA:    /*  \A  */
+               result = curc != NUL && !ri_alpha(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_LOWER:     /*  \l  */
+               result = ri_lower(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_NLOWER:    /*  \L  */
+               result = curc != NUL && !ri_lower(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_UPPER:     /*  \u  */
+               result = ri_upper(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_NUPPER:    /* \U   */
+               result = curc != NUL && !ri_upper(curc);
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+
+           case NFA_BACKREF1:
+           case NFA_BACKREF2:
+           case NFA_BACKREF3:
+           case NFA_BACKREF4:
+           case NFA_BACKREF5:
+           case NFA_BACKREF6:
+           case NFA_BACKREF7:
+           case NFA_BACKREF8:
+           case NFA_BACKREF9:
+#ifdef FEAT_SYN_HL
+           case NFA_ZREF1:
+           case NFA_ZREF2:
+           case NFA_ZREF3:
+           case NFA_ZREF4:
+           case NFA_ZREF5:
+           case NFA_ZREF6:
+           case NFA_ZREF7:
+           case NFA_ZREF8:
+           case NFA_ZREF9:
+#endif
+               /* \1 .. \9  \z1 .. \z9 */
+             {
+               int subidx;
+               int bytelen;
+
+               if (t->state->c <= NFA_BACKREF9)
+               {
+                   subidx = t->state->c - NFA_BACKREF1 + 1;
+                   result = match_backref(&t->subs.norm, subidx, &bytelen);
+               }
+#ifdef FEAT_SYN_HL
+               else
+               {
+                   subidx = t->state->c - NFA_ZREF1 + 1;
+                   result = match_zref(subidx, &bytelen);
+               }
+#endif
+
+               if (result)
+               {
+                   if (bytelen == 0)
+                   {
+                       /* empty match always works, output of NFA_SKIP to be
+                        * used next */
+                       add_here = TRUE;
+                       add_state = t->state->out->out;
+                   }
+                   else if (bytelen <= clen)
+                   {
+                       /* match current character, jump ahead to out of
+                        * NFA_SKIP */
+                       add_state = t->state->out->out;
+                       add_off = clen;
+                   }
+                   else
+                   {
+                       /* skip over the matched characters, set character
+                        * count in NFA_SKIP */
+                       add_state = t->state->out;
+                       add_off = bytelen;
+                       add_count = bytelen - clen;
+                   }
+               }
+               break;
+             }
+           case NFA_SKIP:
+             /* character of previous matching \1 .. \9  or \@> */
+             if (t->count - clen <= 0)
+             {
+                 /* end of match, go to what follows */
+                 add_state = t->state->out;
+                 add_off = clen;
+             }
+             else
+             {
+                 /* add state again with decremented count */
+                 add_state = t->state;
+                 add_off = 0;
+                 add_count = t->count - clen;
+             }
+             break;
+
+           case NFA_LNUM:
+           case NFA_LNUM_GT:
+           case NFA_LNUM_LT:
+               result = (REG_MULTI &&
+                       nfa_re_num_cmp(t->state->val, t->state->c - NFA_LNUM,
+                           (long_u)(reglnum + reg_firstlnum)));
+               if (result)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+
+           case NFA_COL:
+           case NFA_COL_GT:
+           case NFA_COL_LT:
+               result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_COL,
+                       (long_u)(reginput - regline) + 1);
+               if (result)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+
+           case NFA_VCOL:
+           case NFA_VCOL_GT:
+           case NFA_VCOL_LT:
+               result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_VCOL,
+                   (long_u)win_linetabsize(
+                           reg_win == NULL ? curwin : reg_win,
+                           regline, (colnr_T)(reginput - regline)) + 1);
+               if (result)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+
+           case NFA_MARK:
+           case NFA_MARK_GT:
+           case NFA_MARK_LT:
+             {
+               pos_T   *pos = getmark_buf(reg_buf, t->state->val, FALSE);
+
+               /* Compare the mark position to the match position. */
+               result = (pos != NULL                /* mark doesn't exist */
+                       && pos->lnum > 0    /* mark isn't set in reg_buf */
+                       && (pos->lnum == reglnum + reg_firstlnum
+                               ? (pos->col == (colnr_T)(reginput - regline)
+                                   ? t->state->c == NFA_MARK
+                                   : (pos->col < (colnr_T)(reginput - regline)
+                                       ? t->state->c == NFA_MARK_GT
+                                       : t->state->c == NFA_MARK_LT))
+                               : (pos->lnum < reglnum + reg_firstlnum
+                                   ? t->state->c == NFA_MARK_GT
+                                   : t->state->c == NFA_MARK_LT)));
+               if (result)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+             }
+
+           case NFA_CURSOR:
+               result = (reg_win != NULL
+                       && (reglnum + reg_firstlnum == reg_win->w_cursor.lnum)
+                       && ((colnr_T)(reginput - regline)
+                                                  == reg_win->w_cursor.col));
+               if (result)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+               break;
+
+           case NFA_VISUAL:
+#ifdef FEAT_VISUAL
+               result = reg_match_visual();
+               if (result)
+               {
+                   add_here = TRUE;
+                   add_state = t->state->out;
+               }
+#endif
+               break;
+
+           case NFA_MOPEN1:
+           case NFA_MOPEN2:
+           case NFA_MOPEN3:
+           case NFA_MOPEN4:
+           case NFA_MOPEN5:
+           case NFA_MOPEN6:
+           case NFA_MOPEN7:
+           case NFA_MOPEN8:
+           case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+           case NFA_ZOPEN:
+           case NFA_ZOPEN1:
+           case NFA_ZOPEN2:
+           case NFA_ZOPEN3:
+           case NFA_ZOPEN4:
+           case NFA_ZOPEN5:
+           case NFA_ZOPEN6:
+           case NFA_ZOPEN7:
+           case NFA_ZOPEN8:
+           case NFA_ZOPEN9:
+#endif
+           case NFA_NOPEN:
+           case NFA_ZSTART:
+               /* These states are only added to be able to bail out when
+                * they are added again, nothing is to be done. */
+               break;
+
+           default:    /* regular character */
+             {
+               int c = t->state->c;
+
+#ifdef DEBUG
+               if (c < 0)
+                   EMSGN("INTERNAL: Negative state char: %ld", c);
+#endif
+               result = (c == curc);
+
+               if (!result && ireg_ic)
+                   result = MB_TOLOWER(c) == MB_TOLOWER(curc);
+#ifdef FEAT_MBYTE
+               /* If there is a composing character which is not being
+                * ignored there can be no match. Match with composing
+                * character uses NFA_COMPOSING above. */
+               if (result && enc_utf8 && !ireg_icombine
+                                               && clen != utf_char2len(curc))
+                   result = FALSE;
+#endif
+               ADD_STATE_IF_MATCH(t->state);
+               break;
+             }
+
+           } /* switch (t->state->c) */
+
+           if (add_state != NULL)
+           {
+               nfa_pim_T *pim;
+
+               if (t->pim.result == NFA_PIM_UNUSED)
+                   pim = NULL;
+               else
+                   pim = &t->pim;
+
+               /* Handle the postponed invisible match if the match might end
+                * without advancing and before the end of the line. */
+               if (pim != NULL && (clen == 0 || match_follows(add_state, 0)))
+               {
+                   if (pim->result == NFA_PIM_TODO)
+                   {
+#ifdef ENABLE_LOG
+                       fprintf(log_fd, "\n");
+                       fprintf(log_fd, "==================================\n");
+                       fprintf(log_fd, "Postponed recursive nfa_regmatch()\n");
+                       fprintf(log_fd, "\n");
+#endif
+                       result = recursive_regmatch(pim->state, pim,
+                                                prog, submatch, m, &listids);
+                       pim->result = result ? NFA_PIM_MATCH : NFA_PIM_NOMATCH;
+                       /* for \@! and \@<! it is a match when the result is
+                        * FALSE */
+                       if (result != (pim->state->c == NFA_START_INVISIBLE_NEG
+                            || pim->state->c == NFA_START_INVISIBLE_NEG_FIRST
+                            || pim->state->c
+                                          == NFA_START_INVISIBLE_BEFORE_NEG
+                            || pim->state->c
+                                    == NFA_START_INVISIBLE_BEFORE_NEG_FIRST))
+                       {
+                           /* Copy submatch info from the recursive call */
+                           copy_sub_off(&pim->subs.norm, &m->norm);
+#ifdef FEAT_SYN_HL
+                           if (nfa_has_zsubexpr)
+                               copy_sub_off(&pim->subs.synt, &m->synt);
+#endif
+                       }
+                   }
+                   else
+                   {
+                       result = (pim->result == NFA_PIM_MATCH);
+#ifdef ENABLE_LOG
+                       fprintf(log_fd, "\n");
+                       fprintf(log_fd, "Using previous recursive nfa_regmatch() result, result == %d\n", pim->result);
+                       fprintf(log_fd, "MATCH = %s\n", result == TRUE ? "OK" : "FALSE");
+                       fprintf(log_fd, "\n");
+#endif
+                   }
+
+                   /* for \@! and \@<! it is a match when result is FALSE */
+                   if (result != (pim->state->c == NFA_START_INVISIBLE_NEG
+                            || pim->state->c == NFA_START_INVISIBLE_NEG_FIRST
+                            || pim->state->c
+                                          == NFA_START_INVISIBLE_BEFORE_NEG
+                            || pim->state->c
+                                    == NFA_START_INVISIBLE_BEFORE_NEG_FIRST))
+                   {
+                       /* Copy submatch info from the recursive call */
+                       copy_sub_off(&t->subs.norm, &pim->subs.norm);
+#ifdef FEAT_SYN_HL
+                       if (nfa_has_zsubexpr)
+                           copy_sub_off(&t->subs.synt, &pim->subs.synt);
+#endif
+                   }
+                   else
+                       /* look-behind match failed, don't add the state */
+                       continue;
+
+                   /* Postponed invisible match was handled, don't add it to
+                    * following states. */
+                   pim = NULL;
+               }
+
+               if (add_here)
+                   addstate_here(thislist, add_state, &t->subs, pim, &listidx);
+               else
+               {
+                   addstate(nextlist, add_state, &t->subs, pim, add_off);
+                   if (add_count > 0)
+                       nextlist->t[nextlist->n - 1].count = add_count;
+               }
+           }
+
+       } /* for (thislist = thislist; thislist->state; thislist++) */
+
+       /* Look for the start of a match in the current position by adding the
+        * start state to the list of states.
+        * The first found match is the leftmost one, thus the order of states
+        * matters!
+        * Do not add the start state in recursive calls of nfa_regmatch(),
+        * because recursive calls should only start in the first position.
+        * Unless "nfa_endp" is not NULL, then we match the end position.
+        * Also don't start a match past the first line. */
+       if (nfa_match == FALSE
+               && ((toplevel
+                       && reglnum == 0
+                       && clen != 0
+                       && (ireg_maxcol == 0
+                           || (colnr_T)(reginput - regline) < ireg_maxcol))
+                   || (nfa_endp != NULL
+                       && (REG_MULTI
+                           ? (reglnum < nfa_endp->se_u.pos.lnum
+                              || (reglnum == nfa_endp->se_u.pos.lnum
+                                  && (int)(reginput - regline)
+                                                   < nfa_endp->se_u.pos.col))
+                           : reginput < nfa_endp->se_u.ptr))))
+       {
+#ifdef ENABLE_LOG
+           fprintf(log_fd, "(---) STARTSTATE\n");
+#endif
+           /* Inline optimized code for addstate() if we know the state is
+            * the first MOPEN. */
+           if (toplevel)
+           {
+               int add = TRUE;
+               int c;
+
+               if (prog->regstart != NUL && clen != 0)
+               {
+                   if (nextlist->n == 0)
+                   {
+                       colnr_T col = (colnr_T)(reginput - regline) + clen;
+
+                       /* Nextlist is empty, we can skip ahead to the
+                        * character that must appear at the start. */
+                       if (skip_to_start(prog->regstart, &col) == FAIL)
+                           break;
+#ifdef ENABLE_LOG
+                       fprintf(log_fd, "  Skipping ahead %d bytes to regstart\n",
+                               col - ((colnr_T)(reginput - regline) + clen));
+#endif
+                       reginput = regline + col - clen;
+                   }
+                   else
+                   {
+                       /* Checking if the required start character matches is
+                        * cheaper than adding a state that won't match. */
+                       c = PTR2CHAR(reginput + clen);
+                       if (c != prog->regstart && (!ireg_ic || MB_TOLOWER(c)
+                                              != MB_TOLOWER(prog->regstart)))
+                       {
+#ifdef ENABLE_LOG
+                           fprintf(log_fd, "  Skipping start state, regstart does not match\n");
+#endif
+                           add = FALSE;
+                       }
+                   }
+               }
+
+               if (add)
+               {
+                   if (REG_MULTI)
+                       m->norm.list.multi[0].start.col =
+                                        (colnr_T)(reginput - regline) + clen;
+                   else
+                       m->norm.list.line[0].start = reginput + clen;
+                   addstate(nextlist, start->out, m, NULL, clen);
+               }
+           }
+           else
+               addstate(nextlist, start, m, NULL, clen);
+       }
+
+#ifdef ENABLE_LOG
+       fprintf(log_fd, ">>> Thislist had %d states available: ", thislist->n);
+       {
+           int i;
+
+           for (i = 0; i < thislist->n; i++)
+               fprintf(log_fd, "%d  ", abs(thislist->t[i].state->id));
+       }
+       fprintf(log_fd, "\n");
+#endif
+
+nextchar:
+       /* Advance to the next character, or advance to the next line, or
+        * finish. */
+       if (clen != 0)
+           reginput += clen;
+       else if (go_to_nextline || (nfa_endp != NULL && REG_MULTI
+                                       && reglnum < nfa_endp->se_u.pos.lnum))
+           reg_nextline();
+       else
+           break;
+    }
+
+#ifdef ENABLE_LOG
+    if (log_fd != stderr)
+       fclose(log_fd);
+    log_fd = NULL;
+#endif
+
+theend:
+    /* Free memory */
+    vim_free(list[0].t);
+    vim_free(list[1].t);
+    vim_free(listids);
+#undef ADD_STATE_IF_MATCH
+#ifdef NFA_REGEXP_DEBUG_LOG
+    fclose(debug);
+#endif
+
+    return nfa_match;
+}
+
+/*
+ * Try match of "prog" with at regline["col"].
+ * Returns 0 for failure, number of lines contained in the match otherwise.
+ */
+    static long
+nfa_regtry(prog, col)
+    nfa_regprog_T   *prog;
+    colnr_T        col;
+{
+    int                i;
+    regsubs_T  subs, m;
+    nfa_state_T        *start = prog->start;
+#ifdef ENABLE_LOG
+    FILE       *f;
+#endif
+
+    reginput = regline + col;
+
+#ifdef ENABLE_LOG
+    f = fopen(NFA_REGEXP_RUN_LOG, "a");
+    if (f != NULL)
+    {
+       fprintf(f, "\n\n\t=======================================================\n");
+#ifdef DEBUG
+       fprintf(f, "\tRegexp is \"%s\"\n", nfa_regengine.expr);
+#endif
+       fprintf(f, "\tInput text is \"%s\" \n", reginput);
+       fprintf(f, "\t=======================================================\n\n");
+       nfa_print_state(f, start);
+       fprintf(f, "\n\n");
+       fclose(f);
+    }
+    else
+       EMSG(_("Could not open temporary log file for writing "));
+#endif
+
+    clear_sub(&subs.norm);
+    clear_sub(&m.norm);
+#ifdef FEAT_SYN_HL
+    clear_sub(&subs.synt);
+    clear_sub(&m.synt);
+#endif
+
+    if (nfa_regmatch(prog, start, &subs, &m) == FALSE)
+       return 0;
+
+    cleanup_subexpr();
+    if (REG_MULTI)
+    {
+       for (i = 0; i < subs.norm.in_use; i++)
+       {
+           reg_startpos[i] = subs.norm.list.multi[i].start;
+           reg_endpos[i] = subs.norm.list.multi[i].end;
+       }
+
+       if (reg_startpos[0].lnum < 0)
+       {
+           reg_startpos[0].lnum = 0;
+           reg_startpos[0].col = col;
+       }
+       if (reg_endpos[0].lnum < 0)
+       {
+           /* pattern has a \ze but it didn't match, use current end */
+           reg_endpos[0].lnum = reglnum;
+           reg_endpos[0].col = (int)(reginput - regline);
+       }
+       else
+           /* Use line number of "\ze". */
+           reglnum = reg_endpos[0].lnum;
+    }
+    else
+    {
+       for (i = 0; i < subs.norm.in_use; i++)
+       {
+           reg_startp[i] = subs.norm.list.line[i].start;
+           reg_endp[i] = subs.norm.list.line[i].end;
+       }
+
+       if (reg_startp[0] == NULL)
+           reg_startp[0] = regline + col;
+       if (reg_endp[0] == NULL)
+           reg_endp[0] = reginput;
+    }
+
+#ifdef FEAT_SYN_HL
+    /* Package any found \z(...\) matches for export. Default is none. */
+    unref_extmatch(re_extmatch_out);
+    re_extmatch_out = NULL;
+
+    if (prog->reghasz == REX_SET)
+    {
+       cleanup_zsubexpr();
+       re_extmatch_out = make_extmatch();
+       for (i = 0; i < subs.synt.in_use; i++)
+       {
+           if (REG_MULTI)
+           {
+               struct multipos *mpos = &subs.synt.list.multi[i];
+
+               /* Only accept single line matches. */
+               if (mpos->start.lnum >= 0 && mpos->start.lnum == mpos->end.lnum)
+                   re_extmatch_out->matches[i] =
+                       vim_strnsave(reg_getline(mpos->start.lnum)
+                                                           + mpos->start.col,
+                                            mpos->end.col - mpos->start.col);
+           }
+           else
+           {
+               struct linepos *lpos = &subs.synt.list.line[i];
+
+               if (lpos->start != NULL && lpos->end != NULL)
+                   re_extmatch_out->matches[i] =
+                           vim_strnsave(lpos->start,
+                                             (int)(lpos->end - lpos->start));
+           }
+       }
+    }
+#endif
+
+    return 1 + reglnum;
+}
+
+/*
+ * Match a regexp against a string ("line" points to the string) or multiple
+ * lines ("line" is NULL, use reg_getline()).
+ *
+ * Returns 0 for failure, number of lines contained in the match otherwise.
+ */
+    static long
+nfa_regexec_both(line, startcol)
+    char_u     *line;
+    colnr_T    startcol;       /* column to start looking for match */
+{
+    nfa_regprog_T   *prog;
+    long           retval = 0L;
+    int                    i;
+    colnr_T        col = startcol;
+
+    if (REG_MULTI)
+    {
+       prog = (nfa_regprog_T *)reg_mmatch->regprog;
+       line = reg_getline((linenr_T)0);    /* relative to the cursor */
+       reg_startpos = reg_mmatch->startpos;
+       reg_endpos = reg_mmatch->endpos;
+    }
+    else
+    {
+       prog = (nfa_regprog_T *)reg_match->regprog;
+       reg_startp = reg_match->startp;
+       reg_endp = reg_match->endp;
+    }
+
+    /* Be paranoid... */
+    if (prog == NULL || line == NULL)
+    {
+       EMSG(_(e_null));
+       goto theend;
+    }
+
+    /* If pattern contains "\c" or "\C": overrule value of ireg_ic */
+    if (prog->regflags & RF_ICASE)
+       ireg_ic = TRUE;
+    else if (prog->regflags & RF_NOICASE)
+       ireg_ic = FALSE;
+
+#ifdef FEAT_MBYTE
+    /* If pattern contains "\Z" overrule value of ireg_icombine */
+    if (prog->regflags & RF_ICOMBINE)
+       ireg_icombine = TRUE;
+#endif
+
+    regline = line;
+    reglnum = 0;    /* relative to line */
+
+    nfa_has_zend = prog->has_zend;
+    nfa_has_backref = prog->has_backref;
+    nfa_nsubexpr = prog->nsubexp;
+    nfa_listid = 1;
+    nfa_alt_listid = 2;
+#ifdef DEBUG
+    nfa_regengine.expr = prog->pattern;
+#endif
+
+    if (prog->reganch && col > 0)
+       return 0L;
+
+    need_clear_subexpr = TRUE;
+#ifdef FEAT_SYN_HL
+    /* Clear the external match subpointers if necessary. */
+    if (prog->reghasz == REX_SET)
+    {
+       nfa_has_zsubexpr = TRUE;
+       need_clear_zsubexpr = TRUE;
+    }
+    else
+       nfa_has_zsubexpr = FALSE;
+#endif
+
+    if (prog->regstart != NUL)
+    {
+       /* Skip ahead until a character we know the match must start with.
+        * When there is none there is no match. */
+       if (skip_to_start(prog->regstart, &col) == FAIL)
+           return 0L;
+
+       /* If match_text is set it contains the full text that must match.
+        * Nothing else to try. Doesn't handle combining chars well. */
+       if (prog->match_text != NULL
+#ifdef FEAT_MBYTE
+                   && !ireg_icombine
+#endif
+               )
+           return find_match_text(col, prog->regstart, prog->match_text);
+    }
+
+    /* If the start column is past the maximum column: no need to try. */
+    if (ireg_maxcol > 0 && col >= ireg_maxcol)
+       goto theend;
+
+    nstate = prog->nstate;
+    for (i = 0; i < nstate; ++i)
+    {
+       prog->state[i].id = i;
+       prog->state[i].lastlist[0] = 0;
+       prog->state[i].lastlist[1] = 0;
+    }
+
+    retval = nfa_regtry(prog, col);
+
+#ifdef DEBUG
+    nfa_regengine.expr = NULL;
+#endif
+
+theend:
+    return retval;
+}
+
+/*
+ * Compile a regular expression into internal code for the NFA matcher.
+ * Returns the program in allocated space.  Returns NULL for an error.
+ */
+    static regprog_T *
+nfa_regcomp(expr, re_flags)
+    char_u     *expr;
+    int                re_flags;
+{
+    nfa_regprog_T      *prog = NULL;
+    size_t             prog_size;
+    int                        *postfix;
+
+    if (expr == NULL)
+       return NULL;
+
+#ifdef DEBUG
+    nfa_regengine.expr = expr;
+#endif
+
+    init_class_tab();
+
+    if (nfa_regcomp_start(expr, re_flags) == FAIL)
+       return NULL;
+
+    /* Build postfix form of the regexp. Needed to build the NFA
+     * (and count its size). */
+    postfix = re2post();
+    if (postfix == NULL)
+    {
+       /* TODO: only give this error for debugging? */
+       if (post_ptr >= post_end)
+           EMSGN("Internal error: estimated max number of states insufficient: %ld", post_end - post_start);
+       goto fail;          /* Cascaded (syntax?) error */
+    }
+
+    /*
+     * In order to build the NFA, we parse the input regexp twice:
+     * 1. first pass to count size (so we can allocate space)
+     * 2. second to emit code
+     */
+#ifdef ENABLE_LOG
+    {
+       FILE *f = fopen(NFA_REGEXP_RUN_LOG, "a");
+
+       if (f != NULL)
+       {
+           fprintf(f, "\n*****************************\n\n\n\n\tCompiling regexp \"%s\" ... hold on !\n", expr);
+           fclose(f);
+       }
+    }
+#endif
+
+    /*
+     * PASS 1
+     * Count number of NFA states in "nstate". Do not build the NFA.
+     */
+    post2nfa(postfix, post_ptr, TRUE);
+
+    /* allocate the regprog with space for the compiled regexp */
+    prog_size = sizeof(nfa_regprog_T) + sizeof(nfa_state_T) * (nstate - 1);
+    prog = (nfa_regprog_T *)lalloc(prog_size, TRUE);
+    if (prog == NULL)
+       goto fail;
+    state_ptr = prog->state;
+
+    /*
+     * PASS 2
+     * Build the NFA
+     */
+    prog->start = post2nfa(postfix, post_ptr, FALSE);
+    if (prog->start == NULL)
+       goto fail;
+
+    prog->regflags = regflags;
+    prog->engine = &nfa_regengine;
+    prog->nstate = nstate;
+    prog->has_zend = nfa_has_zend;
+    prog->has_backref = nfa_has_backref;
+    prog->nsubexp = regnpar;
+
+    nfa_postprocess(prog);
+
+    prog->reganch = nfa_get_reganch(prog->start, 0);
+    prog->regstart = nfa_get_regstart(prog->start, 0);
+    prog->match_text = nfa_get_match_text(prog->start);
+
+#ifdef ENABLE_LOG
+    nfa_postfix_dump(expr, OK);
+    nfa_dump(prog);
+#endif
+#ifdef FEAT_SYN_HL
+    /* Remember whether this pattern has any \z specials in it. */
+    prog->reghasz = re_has_z;
+#endif
+#ifdef DEBUG
+    prog->pattern = vim_strsave(expr);
+    nfa_regengine.expr = NULL;
+#endif
+
+out:
+    vim_free(post_start);
+    post_start = post_ptr = post_end = NULL;
+    state_ptr = NULL;
+    return (regprog_T *)prog;
+
+fail:
+    vim_free(prog);
+    prog = NULL;
+#ifdef ENABLE_LOG
+    nfa_postfix_dump(expr, FAIL);
+#endif
+#ifdef DEBUG
+    nfa_regengine.expr = NULL;
+#endif
+    goto out;
+}
+
+/*
+ * Free a compiled regexp program, returned by nfa_regcomp().
+ */
+    static void
+nfa_regfree(prog)
+    regprog_T   *prog;
+{
+    if (prog != NULL)
+    {
+       vim_free(((nfa_regprog_T *)prog)->match_text);
+#ifdef DEBUG
+       vim_free(((nfa_regprog_T *)prog)->pattern);
+#endif
+       vim_free(prog);
+    }
+}
+
+/*
+ * Match a regexp against a string.
+ * "rmp->regprog" is a compiled regexp as returned by nfa_regcomp().
+ * Uses curbuf for line count and 'iskeyword'.
+ *
+ * Return TRUE if there is a match, FALSE if not.
+ */
+    static int
+nfa_regexec(rmp, line, col)
+    regmatch_T *rmp;
+    char_u     *line;  /* string to match against */
+    colnr_T    col;    /* column to start looking for match */
+{
+    reg_match = rmp;
+    reg_mmatch = NULL;
+    reg_maxline = 0;
+    reg_line_lbr = FALSE;
+    reg_buf = curbuf;
+    reg_win = NULL;
+    ireg_ic = rmp->rm_ic;
+#ifdef FEAT_MBYTE
+    ireg_icombine = FALSE;
+#endif
+    ireg_maxcol = 0;
+    return (nfa_regexec_both(line, col) != 0);
+}
+
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+       || defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+
+static int  nfa_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+
+/*
+ * Like nfa_regexec(), but consider a "\n" in "line" to be a line break.
+ */
+    static int
+nfa_regexec_nl(rmp, line, col)
+    regmatch_T *rmp;
+    char_u     *line;  /* string to match against */
+    colnr_T    col;    /* column to start looking for match */
+{
+    reg_match = rmp;
+    reg_mmatch = NULL;
+    reg_maxline = 0;
+    reg_line_lbr = TRUE;
+    reg_buf = curbuf;
+    reg_win = NULL;
+    ireg_ic = rmp->rm_ic;
+#ifdef FEAT_MBYTE
+    ireg_icombine = FALSE;
+#endif
+    ireg_maxcol = 0;
+    return (nfa_regexec_both(line, col) != 0);
+}
+#endif
+
+
+/*
+ * Match a regexp against multiple lines.
+ * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+ * Uses curbuf for line count and 'iskeyword'.
+ *
+ * Return zero if there is no match.  Return number of lines contained in the
+ * match otherwise.
+ *
+ * Note: the body is the same as bt_regexec() except for nfa_regexec_both()
+ *
+ * ! Also NOTE : match may actually be in another line. e.g.:
+ * when r.e. is \nc, cursor is at 'a' and the text buffer looks like
+ *
+ * +-------------------------+
+ * |a                        |
+ * |b                        |
+ * |c                        |
+ * |                         |
+ * +-------------------------+
+ *
+ * then nfa_regexec_multi() returns 3. while the original
+ * vim_regexec_multi() returns 0 and a second call at line 2 will return 2.
+ *
+ * FIXME if this behavior is not compatible.
+ */
+    static long
+nfa_regexec_multi(rmp, win, buf, lnum, col, tm)
+    regmmatch_T        *rmp;
+    win_T      *win;           /* window in which to search or NULL */
+    buf_T      *buf;           /* buffer in which to search */
+    linenr_T   lnum;           /* nr of line to start looking for match */
+    colnr_T    col;            /* column to start looking for match */
+    proftime_T *tm UNUSED;     /* timeout limit or NULL */
+{
+    reg_match = NULL;
+    reg_mmatch = rmp;
+    reg_buf = buf;
+    reg_win = win;
+    reg_firstlnum = lnum;
+    reg_maxline = reg_buf->b_ml.ml_line_count - lnum;
+    reg_line_lbr = FALSE;
+    ireg_ic = rmp->rmm_ic;
+#ifdef FEAT_MBYTE
+    ireg_icombine = FALSE;
+#endif
+    ireg_maxcol = rmp->rmm_maxcol;
+
+    return nfa_regexec_both(NULL, col);
+}
+
+#ifdef DEBUG
+# undef ENABLE_LOG
+#endif
index 380eb8b..a72ecaf 100644 (file)
@@ -89,6 +89,9 @@
 
 #include "vim.h"
 
+#define MB_FILLER_CHAR '<'  /* character used when a double-width character
+                            * doesn't fit. */
+
 /*
  * The attributes that are actually active for writing to the screen.
  */
@@ -265,6 +268,151 @@ redraw_buf_later(buf, type)
 }
 
 /*
+ * Redraw as soon as possible.  When the command line is not scrolled redraw
+ * right away and restore what was on the command line.
+ * Return a code indicating what happened.
+ */
+    int
+redraw_asap(type)
+    int                type;
+{
+    int                rows;
+    int                r;
+    int                ret = 0;
+    schar_T    *screenline;    /* copy from ScreenLines[] */
+    sattr_T    *screenattr;    /* copy from ScreenAttrs[] */
+#ifdef FEAT_MBYTE
+    int                i;
+    u8char_T   *screenlineUC = NULL;   /* copy from ScreenLinesUC[] */
+    u8char_T   *screenlineC[MAX_MCO];  /* copy from ScreenLinesC[][] */
+    schar_T    *screenline2 = NULL;    /* copy from ScreenLines2[] */
+#endif
+
+    redraw_later(type);
+    if (msg_scrolled || (State != NORMAL && State != NORMAL_BUSY))
+       return ret;
+
+    /* Allocate space to save the text displayed in the command line area. */
+    rows = Rows - cmdline_row;
+    screenline = (schar_T *)lalloc(
+                          (long_u)(rows * Columns * sizeof(schar_T)), FALSE);
+    screenattr = (sattr_T *)lalloc(
+                          (long_u)(rows * Columns * sizeof(sattr_T)), FALSE);
+    if (screenline == NULL || screenattr == NULL)
+       ret = 2;
+#ifdef FEAT_MBYTE
+    if (enc_utf8)
+    {
+       screenlineUC = (u8char_T *)lalloc(
+                         (long_u)(rows * Columns * sizeof(u8char_T)), FALSE);
+       if (screenlineUC == NULL)
+           ret = 2;
+       for (i = 0; i < p_mco; ++i)
+       {
+           screenlineC[i] = (u8char_T *)lalloc(
+                         (long_u)(rows * Columns * sizeof(u8char_T)), FALSE);
+           if (screenlineC[i] == NULL)
+               ret = 2;
+       }
+    }
+    if (enc_dbcs == DBCS_JPNU)
+    {
+       screenline2 = (schar_T *)lalloc(
+                          (long_u)(rows * Columns * sizeof(schar_T)), FALSE);
+       if (screenline2 == NULL)
+           ret = 2;
+    }
+#endif
+
+    if (ret != 2)
+    {
+       /* Save the text displayed in the command line area. */
+       for (r = 0; r < rows; ++r)
+       {
+           mch_memmove(screenline + r * Columns,
+                       ScreenLines + LineOffset[cmdline_row + r],
+                       (size_t)Columns * sizeof(schar_T));
+           mch_memmove(screenattr + r * Columns,
+                       ScreenAttrs + LineOffset[cmdline_row + r],
+                       (size_t)Columns * sizeof(sattr_T));
+#ifdef FEAT_MBYTE
+           if (enc_utf8)
+           {
+               mch_memmove(screenlineUC + r * Columns,
+                           ScreenLinesUC + LineOffset[cmdline_row + r],
+                           (size_t)Columns * sizeof(u8char_T));
+               for (i = 0; i < p_mco; ++i)
+                   mch_memmove(screenlineC[i] + r * Columns,
+                               ScreenLinesC[r] + LineOffset[cmdline_row + r],
+                               (size_t)Columns * sizeof(u8char_T));
+           }
+           if (enc_dbcs == DBCS_JPNU)
+               mch_memmove(screenline2 + r * Columns,
+                           ScreenLines2 + LineOffset[cmdline_row + r],
+                           (size_t)Columns * sizeof(schar_T));
+#endif
+       }
+
+       update_screen(0);
+       ret = 3;
+
+       if (must_redraw == 0)
+       {
+           int off = (int)(current_ScreenLine - ScreenLines);
+
+           /* Restore the text displayed in the command line area. */
+           for (r = 0; r < rows; ++r)
+           {
+               mch_memmove(current_ScreenLine,
+                           screenline + r * Columns,
+                           (size_t)Columns * sizeof(schar_T));
+               mch_memmove(ScreenAttrs + off,
+                           screenattr + r * Columns,
+                           (size_t)Columns * sizeof(sattr_T));
+#ifdef FEAT_MBYTE
+               if (enc_utf8)
+               {
+                   mch_memmove(ScreenLinesUC + off,
+                               screenlineUC + r * Columns,
+                               (size_t)Columns * sizeof(u8char_T));
+                   for (i = 0; i < p_mco; ++i)
+                       mch_memmove(ScreenLinesC[i] + off,
+                                   screenlineC[i] + r * Columns,
+                                   (size_t)Columns * sizeof(u8char_T));
+               }
+               if (enc_dbcs == DBCS_JPNU)
+                   mch_memmove(ScreenLines2 + off,
+                               screenline2 + r * Columns,
+                               (size_t)Columns * sizeof(schar_T));
+#endif
+               SCREEN_LINE(cmdline_row + r, 0, Columns, Columns, FALSE);
+           }
+           ret = 4;
+       }
+    }
+
+    vim_free(screenline);
+    vim_free(screenattr);
+#ifdef FEAT_MBYTE
+    if (enc_utf8)
+    {
+       vim_free(screenlineUC);
+       for (i = 0; i < p_mco; ++i)
+           vim_free(screenlineC[i]);
+    }
+    if (enc_dbcs == DBCS_JPNU)
+       vim_free(screenline2);
+#endif
+
+    /* Show the intro message when appropriate. */
+    maybe_intro_message();
+
+    setcursor();
+
+    return ret;
+}
+
+/*
  * Changed something in the current window, at buffer line "lnum", that
  * requires that line and possibly other lines to be redrawn.
  * Used when entering/leaving Insert mode with the cursor on a folded line.
@@ -516,8 +664,10 @@ update_screen(type)
 # endif
 # ifdef FEAT_CLIPBOARD
                /* When Visual area changed, may have to update selection. */
-               if (clip_star.available && clip_isautosel())
-                   clip_update_selection();
+               if (clip_star.available && clip_isautosel_star())
+                   clip_update_selection(&clip_star);
+               if (clip_plus.available && clip_isautosel_plus())
+                   clip_update_selection(&clip_plus);
 # endif
 #ifdef FEAT_GUI
                /* Remove the cursor before starting to do anything, because
@@ -543,6 +693,11 @@ update_screen(type)
 #if defined(FEAT_SEARCH_EXTRA)
     end_search_hl();
 #endif
+#ifdef FEAT_INS_EXPAND
+    /* May need to redraw the popup menu. */
+    if (pum_visible())
+       pum_redraw();
+#endif
 
 #ifdef FEAT_WINDOWS
     /* Reset b_mod_set flags.  Going through all windows is probably faster
@@ -564,13 +719,8 @@ update_screen(type)
        showmode();
 
     /* May put up an introductory message when not editing a file */
-    if (!did_intro && bufempty()
-           && curbuf->b_fname == NULL
-#ifdef FEAT_WINDOWS
-           && firstwin->w_next == NULL
-#endif
-           && vim_strchr(p_shm, SHM_INTRO) == NULL)
-       intro_message(FALSE);
+    if (!did_intro)
+       maybe_intro_message();
     did_intro = TRUE;
 
 #ifdef FEAT_GUI
@@ -764,9 +914,13 @@ update_debug_sign(buf, lnum)
            doit = TRUE;
     }
 
-    /* Return when there is nothing to do or screen updating already
-     * happening. */
-    if (!doit || updating_screen)
+    /* Return when there is nothing to do, screen updating is already
+     * happening (recursive call) or still starting up. */
+    if (!doit || updating_screen
+#ifdef FEAT_GUI
+           || gui.starting
+#endif
+           || starting)
        return;
 
     /* update all windows that need updating */
@@ -807,8 +961,10 @@ updateWindow(wp)
 
 #ifdef FEAT_CLIPBOARD
     /* When Visual area changed, may have to update selection. */
-    if (clip_star.available && clip_isautosel())
-       clip_update_selection();
+    if (clip_star.available && clip_isautosel_star())
+       clip_update_selection(&clip_star);
+    if (clip_plus.available && clip_isautosel_plus())
+       clip_update_selection(&clip_plus);
 #endif
 
     win_update(wp);
@@ -1622,6 +1778,10 @@ win_update(wp)
 # endif
                                        syntax_check_changed(lnum)))
 #endif
+#ifdef FEAT_SEARCH_EXTRA
+                               /* match in fixed position might need redraw */
+                               ||  wp->w_match_head != NULL
+#endif
                                )))))
        {
 #ifdef FEAT_SEARCH_EXTRA
@@ -1633,11 +1793,11 @@ win_update(wp)
             * When at start of changed lines: May scroll following lines
             * up or down to minimize redrawing.
             * Don't do this when the change continues until the end.
-            * Don't scroll when dollar_vcol is non-zero, keep the "$".
+            * Don't scroll when dollar_vcol >= 0, keep the "$".
             */
            if (lnum == mod_top
                    && mod_bot != MAXLNUM
-                   && !(dollar_vcol != 0 && mod_bot == mod_top + 1))
+                   && !(dollar_vcol >= 0 && mod_bot == mod_top + 1))
            {
                int             old_rows = 0;
                int             new_rows = 0;
@@ -1864,12 +2024,12 @@ win_update(wp)
            if (row > wp->w_height)     /* past end of screen */
            {
                /* we may need the size of that too long line later on */
-               if (dollar_vcol == 0)
+               if (dollar_vcol == -1)
                    wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
                ++idx;
                break;
            }
-           if (dollar_vcol == 0)
+           if (dollar_vcol == -1)
                wp->w_lines[idx].wl_size = row - srow;
            ++idx;
 #ifdef FEAT_FOLDING
@@ -1986,7 +2146,7 @@ win_update(wp)
            }
 #endif
        }
-       else if (dollar_vcol == 0)
+       else if (dollar_vcol == -1)
            wp->w_botline = lnum;
 
        /* make sure the rest of the screen is blank */
@@ -2001,7 +2161,7 @@ win_update(wp)
     wp->w_old_botfill = wp->w_botfill;
 #endif
 
-    if (dollar_vcol == 0)
+    if (dollar_vcol == -1)
     {
        /*
         * There is a trick with w_botline.  If we invalidate it on each
@@ -2308,18 +2468,28 @@ fold_line(wp, fold_count, foldinfo, lnum, row)
        {
            int     w = number_width(wp);
            long num;
+           char *fmt = "%*ld ";
 
            if (len > w + 1)
                len = w + 1;
 
-           if (wp->w_p_nu)
-               /* 'number' */
+           if (wp->w_p_nu && !wp->w_p_rnu)
+               /* 'number' + 'norelativenumber' */
                num = (long)lnum;
            else
+           {
                /* 'relativenumber', don't use negative numbers */
-               num = (long)abs((int)get_cursor_rel_lnum(wp, lnum));
+               num = labs((long)get_cursor_rel_lnum(wp, lnum));
+               if (num == 0 && wp->w_p_nu && wp->w_p_rnu)
+               {
+                   /* 'number' + 'relativenumber': cursor line shows absolute
+                    * line number */
+                   num = lnum;
+                   fmt = "%-*ld ";
+               }
+           }
 
-           sprintf((char *)buf, "%*ld ", w, num);
+           sprintf((char *)buf, fmt, w, num);
 #ifdef FEAT_RIGHTLEFT
            if (wp->w_p_rl)
                /* the line number isn't reversed */
@@ -2531,7 +2701,9 @@ fold_line(wp, fold_count, foldinfo, lnum, row)
                /* Visual block mode: highlight the chars part of the block */
                if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
                {
-                   if (wp->w_old_cursor_lcol + txtcol < (colnr_T)W_WIDTH(wp))
+                   if (wp->w_old_cursor_lcol != MAXCOL
+                            && wp->w_old_cursor_lcol + txtcol
+                                                      < (colnr_T)W_WIDTH(wp))
                        len = wp->w_old_cursor_lcol;
                    else
                        len = W_WIDTH(wp) - txtcol;
@@ -2825,6 +2997,14 @@ win_line(wp, lnum, startrow, endrow, nochange)
     int                vcol_off        = 0;    /* offset for concealed characters */
     int                did_wcol        = FALSE;
 # define VCOL_HLC (vcol - vcol_off)
+# define FIX_FOR_BOGUSCOLS \
+    { \
+       n_extra += vcol_off; \
+       vcol -= vcol_off; \
+       vcol_off = 0; \
+       col -= boguscols; \
+       boguscols = 0; \
+    }
 #else
 # define VCOL_HLC (vcol)
 #endif
@@ -2991,7 +3171,10 @@ win_line(wp, lnum, startrow, endrow, nochange)
            area_highlighting = TRUE;
            attr = hl_attr(HLF_V);
 #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
-           if (clip_star.available && !clip_star.owned && clip_isautosel())
+           if ((clip_star.available && !clip_star.owned
+                                                    && clip_isautosel_star())
+                   || (clip_plus.available && !clip_plus.owned
+                                                   && clip_isautosel_plus()))
                attr = hl_attr(HLF_VNC);
 #endif
        }
@@ -3222,8 +3405,7 @@ win_line(wp, lnum, startrow, endrow, nochange)
                /* no bad word found at line start, don't check until end of a
                 * word */
                spell_hlf = HLF_COUNT;
-               word_end = (int)(spell_to_word_end(ptr, wp)
-                                                                 - line + 1);
+               word_end = (int)(spell_to_word_end(ptr, wp) - line + 1);
            }
            else
            {
@@ -3332,9 +3514,11 @@ win_line(wp, lnum, startrow, endrow, nochange)
 #endif
 
 #ifdef FEAT_SYN_HL
-    /* Cursor line highlighting for 'cursorline'.  Not when Visual mode is
-     * active, because it's not clear what is selected then. */
-    if (wp->w_p_cul && lnum == wp->w_cursor.lnum && !VIsual_active)
+    /* Cursor line highlighting for 'cursorline' in the current window.  Not
+     * when Visual mode is active, because it's not clear what is selected
+     * then. */
+    if (wp->w_p_cul && lnum == wp->w_cursor.lnum
+                                        && !(wp == curwin  && VIsual_active))
     {
        line_attr = hl_attr(HLF_CUL);
        area_highlighting = TRUE;
@@ -3405,9 +3589,9 @@ win_line(wp, lnum, startrow, endrow, nochange)
 # endif
                   )
                {
-                   int_u       text_sign;
+                   int text_sign;
 # ifdef FEAT_SIGN_ICONS
-                   int_u       icon_sign;
+                   int icon_sign;
 # endif
 
                    /* Draw two cells with the sign value or blank. */
@@ -3469,16 +3653,24 @@ win_line(wp, lnum, startrow, endrow, nochange)
                            )
                    {
                        long num;
+                       char *fmt = "%*ld ";
 
-                       if (wp->w_p_nu)
-                           /* 'number' */
+                       if (wp->w_p_nu && !wp->w_p_rnu)
+                           /* 'number' + 'norelativenumber' */
                            num = (long)lnum;
                        else
+                       {
                            /* 'relativenumber', don't use negative numbers */
-                           num = (long)abs((int)get_cursor_rel_lnum(wp,
-                                                                   lnum));
+                           num = labs((long)get_cursor_rel_lnum(wp, lnum));
+                           if (num == 0 && wp->w_p_nu && wp->w_p_rnu)
+                           {
+                               /* 'number' + 'relativenumber' */
+                               num = lnum;
+                               fmt = "%-*ld ";
+                           }
+                       }
 
-                       sprintf((char *)extra, "%*ld ",
+                       sprintf((char *)extra, fmt,
                                                number_width(wp), num);
                        if (wp->w_skipcol > 0)
                            for (p_extra = extra; *p_extra == ' '; ++p_extra)
@@ -3496,9 +3688,12 @@ win_line(wp, lnum, startrow, endrow, nochange)
                    char_attr = hl_attr(HLF_N);
 #ifdef FEAT_SYN_HL
                    /* When 'cursorline' is set highlight the line number of
-                    * the current line differently. */
-                   if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
-                       char_attr = hl_combine_attr(hl_attr(HLF_CUL), char_attr);
+                    * the current line differently.
+                    * TODO: Can we use CursorLine instead of CursorLineNr
+                    * when CursorLineNr isn't set? */
+                   if ((wp->w_p_cul || wp->w_p_rnu)
+                                                && lnum == wp->w_cursor.lnum)
+                       char_attr = hl_attr(HLF_CLN);
 #endif
                }
            }
@@ -3537,6 +3732,11 @@ win_line(wp, lnum, startrow, endrow, nochange)
                     * required when 'linebreak' is also set. */
                    if (tocol == vcol)
                        tocol += n_extra;
+#ifdef FEAT_SYN_HL
+                   /* combine 'showbreak' with 'cursorline' */
+                   if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
+                       char_attr = hl_combine_attr(char_attr, HLF_CLN);
+#endif
                }
 # endif
            }
@@ -3559,7 +3759,7 @@ win_line(wp, lnum, startrow, endrow, nochange)
        }
 
        /* When still displaying '$' of change command, stop at cursor */
-       if (dollar_vcol != 0 && wp == curwin
+       if (dollar_vcol >= 0 && wp == curwin
                   && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
 #ifdef FEAT_DIFF
                                   && filler_todo <= 0
@@ -4006,11 +4206,11 @@ win_line(wp, lnum, startrow, endrow, nochange)
 
                /* If a double-width char doesn't fit at the left side display
                 * a '<' in the first column.  Don't do this for unprintable
-                * charactes. */
+                * characters. */
                if (n_skip > 0 && mb_l > 1 && n_extra == 0)
                {
                    n_extra = 1;
-                   c_extra = '<';
+                   c_extra = MB_FILLER_CHAR;
                    c = ' ';
                    if (area_attr == 0 && search_attr == 0)
                    {
@@ -4212,7 +4412,14 @@ win_line(wp, lnum, startrow, endrow, nochange)
                                1), (colnr_T)vcol, NULL) - 1;
                    c_extra = ' ';
                    if (vim_iswhite(c))
+                   {
+#ifdef FEAT_CONCEAL
+                       if (c == TAB)
+                           /* See "Tab alignment" below. */
+                           FIX_FOR_BOGUSCOLS;
+#endif
                        c = ' ';
+                   }
                }
 #endif
 
@@ -4253,7 +4460,16 @@ win_line(wp, lnum, startrow, endrow, nochange)
                {
                    /* tab amount depends on current column */
                    n_extra = (int)wp->w_buffer->b_p_ts
-                                  - vcol % (int)wp->w_buffer->b_p_ts - 1;
+                                       - vcol % (int)wp->w_buffer->b_p_ts - 1;
+#ifdef FEAT_CONCEAL
+                   /* Tab alignment should be identical regardless of
+                    * 'conceallevel' value. So tab compensates of all
+                    * previous concealed characters, and thus resets vcol_off
+                    * and boguscols accumulated so far in the line. Note that
+                    * the tab can be longer than 'tabstop' when there
+                    * are concealed characters. */
+                   FIX_FOR_BOGUSCOLS;
+#endif
 #ifdef FEAT_MBYTE
                    mb_utf8 = FALSE;    /* don't draw as UTF-8 */
 #endif
@@ -4570,6 +4786,15 @@ win_line(wp, lnum, startrow, endrow, nochange)
            c = lcs_prec;
            lcs_prec_todo = NUL;
 #ifdef FEAT_MBYTE
+           if (has_mbyte && (*mb_char2cells)(mb_c) > 1)
+           {
+               /* Double-width character being overwritten by the "precedes"
+                * character, need to fill up half the character. */
+               c_extra = MB_FILLER_CHAR;
+               n_extra = 1;
+               n_attr = 2;
+               extra_attr = hl_attr(HLF_AT);
+           }
            mb_c = c;
            if (enc_utf8 && (*mb_char2len)(c) > 1)
            {
@@ -5307,8 +5532,9 @@ char_needs_redraw(off_from, off_to, cols)
                    && (ScreenLinesUC[off_from] != ScreenLinesUC[off_to]
                        || (ScreenLinesUC[off_from] != 0
                            && comp_char_differs(off_from, off_to))
-                       || (cols > 1 && ScreenLines[off_from + 1]
-                                                != ScreenLines[off_to + 1])))
+                       || ((*mb_off2cells)(off_from, off_from + cols) > 1
+                           && ScreenLines[off_from + 1]
+                                                 != ScreenLines[off_to + 1])))
 #endif
               ))
        return TRUE;
@@ -5366,6 +5592,12 @@ screen_line(row, coloff, endcol, clear_width
 # define CHAR_CELLS 1
 #endif
 
+    /* Check for illegal row and col, just in case. */
+    if (row >= Rows)
+       row = Rows - 1;
+    if (endcol > Columns)
+       endcol = Columns;
+
 # ifdef FEAT_CLIPBOARD
     clip_may_clear_selection(row, row);
 # endif
@@ -6211,7 +6443,7 @@ win_redr_status(wp)
        }
        if (wp->w_buffer->b_p_ro)
        {
-           STRCPY(p + len, "[RO]");
+           STRCPY(p + len, _("[RO]"));
            len += 4;
        }
 
@@ -6436,6 +6668,8 @@ win_redr_custom(wp, draw_ruler)
     struct     stl_hlrec hltab[STL_MAX_ITEM];
     struct     stl_hlrec tabtab[STL_MAX_ITEM];
     int                use_sandbox = FALSE;
+    win_T      *ewp;
+    int                p_crb_save;
 
     /* setup environment for the task at hand */
     if (wp == NULL)
@@ -6514,16 +6748,31 @@ win_redr_custom(wp, draw_ruler)
     if (maxwidth <= 0)
        return;
 
+    /* Temporarily reset 'cursorbind', we don't want a side effect from moving
+     * the cursor away and back. */
+    ewp = wp == NULL ? curwin : wp;
+    p_crb_save = ewp->w_p_crb;
+    ewp->w_p_crb = FALSE;
+
     /* Make a copy, because the statusline may include a function call that
      * might change the option value and free the memory. */
     stl = vim_strsave(stl);
-    width = build_stl_str_hl(wp == NULL ? curwin : wp,
-                               buf, sizeof(buf),
+    width = build_stl_str_hl(ewp, buf, sizeof(buf),
                                stl, use_sandbox,
                                fillchar, maxwidth, hltab, tabtab);
     vim_free(stl);
-    len = (int)STRLEN(buf);
+    ewp->w_p_crb = p_crb_save;
+
+    /* Make all characters printable. */
+    p = transstr(buf);
+    if (p != NULL)
+    {
+       vim_strncpy(buf, p, sizeof(buf) - 1);
+       vim_free(p);
+    }
 
+    /* fill up with "fillchar" */
+    len = (int)STRLEN(buf);
     while (width < maxwidth && len < (int)sizeof(buf) - 1)
     {
 #ifdef FEAT_MBYTE
@@ -6591,16 +6840,17 @@ screen_putchar(c, row, col, attr)
     int            row, col;
     int            attr;
 {
-#ifdef FEAT_MBYTE
     char_u     buf[MB_MAXBYTES + 1];
 
-    buf[(*mb_char2bytes)(c, buf)] = NUL;
-#else
-    char_u     buf[2];
-
-    buf[0] = c;
-    buf[1] = NUL;
+#ifdef FEAT_MBYTE
+    if (has_mbyte)
+       buf[(*mb_char2bytes)(c, buf)] = NUL;
+    else
 #endif
+    {
+       buf[0] = c;
+       buf[1] = NUL;
+    }
     screen_puts(buf, row, col, attr);
 }
 
@@ -6994,7 +7244,7 @@ end_search_hl()
 {
     if (search_hl.rm.regprog != NULL)
     {
-       vim_free(search_hl.rm.regprog);
+       vim_regfree(search_hl.rm.regprog);
        search_hl.rm.regprog = NULL;
     }
 }
@@ -7196,7 +7446,7 @@ next_search_hl(win, shl, lnum, mincol)
            if (shl == &search_hl)
            {
                /* don't free regprog in the match list, it's a copy */
-               vim_free(shl->rm.regprog);
+               vim_regfree(shl->rm.regprog);
                no_hlsearch = TRUE;
            }
            shl->rm.regprog = NULL;
@@ -7827,15 +8077,15 @@ check_for_delay(check_msg_scroll)
 
 /*
  * screen_valid -  allocate screen buffers if size changed
- *   If "clear" is TRUE: clear screen if it has been resized.
+ *   If "doclear" is TRUE: clear screen if it has been resized.
  *     Returns TRUE if there is a valid screen to write to.
  *     Returns FALSE when starting up and screen not initialized yet.
  */
     int
-screen_valid(clear)
-    int            clear;
+screen_valid(doclear)
+    int            doclear;
 {
-    screenalloc(clear);            /* allocate screen buffers if size changed */
+    screenalloc(doclear);         /* allocate screen buffers if size changed */
     return (ScreenLines != NULL);
 }
 
@@ -7850,8 +8100,8 @@ screen_valid(clear)
  * final size of the shell is needed.
  */
     void
-screenalloc(clear)
-    int            clear;
+screenalloc(doclear)
+    int            doclear;
 {
     int                    new_row, old_row;
 #ifdef FEAT_GUI
@@ -8047,7 +8297,7 @@ give_up:
             * (used when resizing the window at the "--more--" prompt or when
             * executing an external command, for the GUI).
             */
-           if (!clear)
+           if (!doclear)
            {
                (void)vim_memset(new_ScreenLines + new_row * Columns,
                                      ' ', (size_t)Columns * sizeof(schar_T));
@@ -8137,7 +8387,7 @@ give_up:
     screen_Columns = Columns;
 
     must_redraw = CLEAR;       /* need to clear the screen later */
-    if (clear)
+    if (doclear)
        screenclear2();
 
 #ifdef FEAT_GUI
@@ -9018,7 +9268,7 @@ screen_ins_lines(off, row, line_count, end, wp)
            || (wp != NULL && wp->w_width != Columns)
 # endif
        )
-       clip_clear_selection();
+       clip_clear_selection(&clip_star);
     else
        clip_scroll_selection(-line_count);
 #endif
@@ -9239,7 +9489,7 @@ screen_del_lines(off, row, line_count, end, force, wp)
            || (wp != NULL && wp->w_width != Columns)
 # endif
        )
-       clip_clear_selection();
+       clip_clear_selection(&clip_star);
     else
        clip_scroll_selection(line_count);
 #endif
@@ -9826,7 +10076,7 @@ get_trans_bufname(buf)
     buf_T      *buf;
 {
     if (buf_spname(buf) != NULL)
-       STRCPY(NameBuff, buf_spname(buf));
+       vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
     else
        home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
     trans_characters(NameBuff, MAXPATHL);
@@ -10175,12 +10425,12 @@ number_width(wp)
     int                n;
     linenr_T   lnum;
 
-    if (wp->w_p_nu)
-       /* 'number' */
-       lnum = wp->w_buffer->b_ml.ml_line_count;
-    else
-       /* 'relativenumber' */
+    if (wp->w_p_rnu && !wp->w_p_nu)
+       /* cursor line shows "0" */
        lnum = wp->w_height;
+    else
+       /* cursor line shows absolute line number */
+       lnum = wp->w_buffer->b_ml.ml_line_count;
 
     if (lnum == wp->w_nrwidth_line_count)
        return wp->w_nrwidth_width;
@@ -10201,3 +10451,23 @@ number_width(wp)
     return n;
 }
 #endif
+
+/*
+ * Return the current cursor column. This is the actual position on the
+ * screen. First column is 0.
+ */
+    int
+screen_screencol()
+{
+    return screen_cur_col;
+}
+
+/*
+ * Return the current cursor row. This is the actual position on the screen.
+ * First row is 0.
+ */
+    int
+screen_screenrow()
+{
+    return screen_cur_row;
+}
index 26dac9d..23dc27e 100644 (file)
@@ -73,7 +73,7 @@ struct spat
 {
     char_u         *pat;       /* the pattern (in allocated memory) or NULL */
     int                    magic;      /* magicness of the pattern */
-    int                    no_scs;     /* no smarcase for this pattern */
+    int                    no_scs;     /* no smartcase for this pattern */
     struct soffset  off;
 };
 
@@ -572,7 +572,8 @@ searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
        extra_col = 0;
 #ifdef FEAT_MBYTE
     /* Watch out for the "col" being MAXCOL - 2, used in a closed fold. */
-    else if (has_mbyte && pos->lnum >= 1 && pos->lnum <= buf->b_ml.ml_line_count
+    else if (dir != BACKWARD && has_mbyte
+                   && pos->lnum >= 1 && pos->lnum <= buf->b_ml.ml_line_count
                                                     && pos->col < MAXCOL - 2)
     {
        ptr = ml_get_buf(buf, pos->lnum, FALSE) + pos->col;
@@ -726,6 +727,8 @@ searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
                                        ++matchcol;
                                }
                            }
+                           if (matchcol == 0 && (options & SEARCH_START))
+                               break;
                            if (ptr[matchcol] == NUL
                                    || (nmatched = vim_regexec_multi(&regmatch,
                                              win, buf, lnum + matchpos.lnum,
@@ -866,7 +869,7 @@ searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
                    /* With the SEARCH_END option move to the last character
                     * of the match.  Don't do it for an empty match, end
                     * should be same as start then. */
-                   if (options & SEARCH_END && !(options & SEARCH_NOOF)
+                   if ((options & SEARCH_END) && !(options & SEARCH_NOOF)
                            && !(matchpos.lnum == endpos.lnum
                                && matchpos.col == endpos.col))
                    {
@@ -969,7 +972,7 @@ searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
     }
     while (--count > 0 && found);   /* stop after count matches or no match */
 
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 
     called_emsg |= save_called_emsg;
 
@@ -1161,12 +1164,20 @@ do_search(oap, dirc, pat, count, options, tm)
        {
            if (spats[RE_SEARCH].pat == NULL)       /* no previous pattern */
            {
-               EMSG(_(e_noprevre));
-               retval = 0;
-               goto end_do_search;
+               pat = spats[RE_SUBST].pat;
+               if (pat == NULL)
+               {
+                   EMSG(_(e_noprevre));
+                   retval = 0;
+                   goto end_do_search;
+               }
+               searchstr = pat;
+           }
+           else
+           {
+               /* make search_regcomp() use spats[RE_SEARCH].pat */
+               searchstr = (char_u *)"";
            }
-           /* make search_regcomp() use spats[RE_SEARCH].pat */
-           searchstr = (char_u *)"";
        }
 
        if (pat != NULL && *pat != NUL) /* look for (new) offset */
@@ -1538,8 +1549,9 @@ searchc(cap, t_cmd)
     int                        col;
     char_u             *p;
     int                        len;
+    int                        stop = TRUE;
 #ifdef FEAT_MBYTE
-    static char_u      bytes[MB_MAXBYTES];
+    static char_u      bytes[MB_MAXBYTES + 1];
     static int         bytelen = 1;    /* >1 for multi-byte char */
 #endif
 
@@ -1572,6 +1584,12 @@ searchc(cap, t_cmd)
        t_cmd = last_t_cmd;
        c = lastc;
        /* For multi-byte re-use last bytes[] and bytelen. */
+
+       /* Force a move of at least one char, so ";" and "," will move the
+        * cursor, even if the cursor is right in front of char we are looking
+        * at. */
+       if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1 && t_cmd)
+           stop = FALSE;
     }
 
     if (dir == BACKWARD)
@@ -1604,14 +1622,15 @@ searchc(cap, t_cmd)
                }
                if (bytelen == 1)
                {
-                   if (p[col] == c)
+                   if (p[col] == c && stop)
                        break;
                }
                else
                {
-                   if (vim_memcmp(p + col, bytes, bytelen) == 0)
+                   if (vim_memcmp(p + col, bytes, bytelen) == 0 && stop)
                        break;
                }
+               stop = TRUE;
            }
        }
        else
@@ -1621,8 +1640,9 @@ searchc(cap, t_cmd)
            {
                if ((col += dir) < 0 || col >= len)
                    return FAIL;
-               if (p[col] == c)
+               if (p[col] == c && stop)
                    break;
+               stop = TRUE;
            }
        }
     }
@@ -1769,28 +1789,8 @@ findmatchlimit(oap, initc, flags, maxtravel)
     }
     else if (initc != '#' && initc != NUL)
     {
-       /* 'matchpairs' is "x:y,x:y" */
-       for (ptr = curbuf->b_p_mps; *ptr; ptr += 2)
-       {
-           if (*ptr == initc)
-           {
-               findc = initc;
-               initc = ptr[2];
-               backwards = TRUE;
-               break;
-           }
-           ptr += 2;
-           if (*ptr == initc)
-           {
-               findc = initc;
-               initc = ptr[-2];
-               backwards = FALSE;
-               break;
-           }
-           if (ptr[1] != ',')
-               break;
-       }
-       if (!findc)             /* invalid initc! */
+       find_mps_values(&initc, &findc, &backwards, TRUE);
+       if (findc == NUL)
            return NULL;
     }
     /*
@@ -1869,36 +1869,14 @@ findmatchlimit(oap, initc, flags, maxtravel)
                    --pos.col;
                for (;;)
                {
-                   initc = linep[pos.col];
+                   initc = PTR2CHAR(linep + pos.col);
                    if (initc == NUL)
                        break;
 
-                   for (ptr = curbuf->b_p_mps; *ptr; ++ptr)
-                   {
-                       if (*ptr == initc)
-                       {
-                           findc = ptr[2];
-                           backwards = FALSE;
-                           break;
-                       }
-                       ptr += 2;
-                       if (*ptr == initc)
-                       {
-                           findc = ptr[-2];
-                           backwards = TRUE;
-                           break;
-                       }
-                       if (!*++ptr)
-                           break;
-                   }
+                   find_mps_values(&initc, &findc, &backwards, FALSE);
                    if (findc)
                        break;
-#ifdef FEAT_MBYTE
-                   if (has_mbyte)
-                       pos.col += (*mb_ptr2len)(linep + pos.col);
-                   else
-#endif
-                       ++pos.col;
+                   pos.col += MB_PTR2LEN(linep + pos.col);
                }
                if (!findc)
                {
@@ -2243,7 +2221,8 @@ findmatchlimit(oap, initc, flags, maxtravel)
         *   inquote if the number of quotes in a line is even, unless this
         *   line or the previous one ends in a '\'.  Complicated, isn't it?
         */
-       switch (c = linep[pos.col])
+       c = PTR2CHAR(linep + pos.col);
+       switch (c)
        {
        case NUL:
            /* at end of line without trailing backslash, reset inquote */
@@ -2385,24 +2364,24 @@ check_linecomment(line)
     {
        if (vim_strchr(p, ';') != NULL) /* there may be comments */
        {
-           int instr = FALSE;  /* inside of string */
+           int in_str = FALSE; /* inside of string */
 
            p = line;           /* scan from start */
            while ((p = vim_strpbrk(p, (char_u *)"\";")) != NULL)
            {
                if (*p == '"')
                {
-                   if (instr)
+                   if (in_str)
                    {
                        if (*(p - 1) != '\\') /* skip escaped quote */
-                           instr = FALSE;
+                           in_str = FALSE;
                    }
                    else if (p == line || ((p - line) >= 2
                                      /* skip #\" form */
                                      && *(p - 1) != '\\' && *(p - 2) != '#'))
-                       instr = TRUE;
+                       in_str = TRUE;
                }
-               else if (!instr && ((p - line) < 2
+               else if (!in_str && ((p - line) < 2
                                    || (*(p - 1) != '\\' && *(p - 2) != '#')))
                    break;      /* found! */
                ++p;
@@ -2452,26 +2431,27 @@ showmatch(c)
      * Only show match for chars in the 'matchpairs' option.
      */
     /* 'matchpairs' is "x:y,x:y" */
-    for (p = curbuf->b_p_mps; *p != NUL; p += 2)
+    for (p = curbuf->b_p_mps; *p != NUL; ++p)
     {
 #ifdef FEAT_RIGHTLEFT
-       if (*p == c && (curwin->w_p_rl ^ p_ri))
+       if (PTR2CHAR(p) == c && (curwin->w_p_rl ^ p_ri))
            break;
 #endif
-       p += 2;
-       if (*p == c
+       p += MB_PTR2LEN(p) + 1;
+       if (PTR2CHAR(p) == c
 #ifdef FEAT_RIGHTLEFT
                && !(curwin->w_p_rl ^ p_ri)
 #endif
           )
            break;
-       if (p[1] != ',')
+       p += MB_PTR2LEN(p);
+       if (*p == NUL)
            return;
     }
 
     if ((lpos = findmatch(NULL, NUL)) == NULL)     /* no match, so beep */
        vim_beep();
-    else if (lpos->lnum >= curwin->w_topline)
+    else if (lpos->lnum >= curwin->w_topline && lpos->lnum < curwin->w_botline)
     {
        if (!curwin->w_p_wrap)
            getvcol(curwin, lpos, NULL, &vcol, NULL);
@@ -2484,8 +2464,8 @@ showmatch(c)
            save_siso = p_siso;
            /* Handle "$" in 'cpo': If the ')' is typed on top of the "$",
             * stop displaying the "$". */
-           if (dollar_vcol > 0 && dollar_vcol == curwin->w_virtcol)
-               dollar_vcol = 0;
+           if (dollar_vcol >= 0 && dollar_vcol == curwin->w_virtcol)
+               dollar_vcol = -1;
            ++curwin->w_virtcol;        /* do display ')' just before "$" */
            update_screen(VALID);       /* show the new char first */
 
@@ -3403,7 +3383,7 @@ current_sent(oap, count, include)
 
 #ifdef FEAT_VISUAL
     /*
-     * When visual area is bigger than one character: Extend it.
+     * When the Visual area is bigger than one character: Extend it.
      */
     if (VIsual_active && !equalpos(start_pos, VIsual))
     {
@@ -3491,8 +3471,8 @@ extend:
 #endif
 
     /*
-     * If cursor started on blank, check if it is just before the start of the
-     * next sentence.
+     * If the cursor started on a blank, check if it is just before the start
+     * of the next sentence.
      */
     while (c = gchar_pos(&pos), vim_iswhite(c))        /* vim_iswhite() is a macro */
        incl(&pos);
@@ -3541,7 +3521,7 @@ extend:
 #ifdef FEAT_VISUAL
     if (VIsual_active)
     {
-       /* avoid getting stuck with "is" on a single space before a sent. */
+       /* Avoid getting stuck with "is" on a single space before a sentence. */
        if (equalpos(start_pos, curwin->w_cursor))
            goto extend;
        if (*p_sel == 'e')
@@ -3566,7 +3546,7 @@ extend:
 
 /*
  * Find block under the cursor, cursor at end.
- * "what" and "other" are two matching parenthesis/paren/etc.
+ * "what" and "other" are two matching parenthesis/brace/etc.
  */
     int
 current_block(oap, count, include, what, other)
@@ -3901,7 +3881,7 @@ again:
        curwin->w_cursor = old_pos;
        goto theend;
     }
-    spat = alloc(len + 29);
+    spat = alloc(len + 31);
     epat = alloc(len + 9);
     if (spat == NULL || epat == NULL)
     {
@@ -3910,7 +3890,7 @@ again:
        curwin->w_cursor = old_pos;
        goto theend;
     }
-    sprintf((char *)spat, "<%.*s\\%%(\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+    sprintf((char *)spat, "<%.*s\\>\\%%(\\s\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
     sprintf((char *)epat, "</%.*s>\\c", len, p);
 
     r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
@@ -4508,6 +4488,205 @@ current_quote(oap, count, include, quotechar)
 
 #endif /* FEAT_TEXTOBJ */
 
+#if defined(FEAT_VISUAL) || defined(PROTO)
+static int is_one_char __ARGS((char_u *pattern));
+
+/*
+ * Find next search match under cursor, cursor at end.
+ * Used while an operator is pending, and in Visual mode.
+ * TODO: redo only works when used in operator pending mode
+ */
+    int
+current_search(count, forward)
+    long       count;
+    int                forward;        /* move forward or backwards */
+{
+    pos_T      start_pos;      /* position before the pattern */
+    pos_T      orig_pos;       /* position of the cursor at beginning */
+    pos_T      pos;            /* position after the pattern */
+    int                i;
+    int                dir;
+    int                result;         /* result of various function calls */
+    char_u     old_p_ws = p_ws;
+    int                flags = 0;
+    pos_T      save_VIsual = VIsual;
+    int                one_char;
+
+    /* wrapping should not occur */
+    p_ws = FALSE;
+
+    /* Correct cursor when 'selection' is exclusive */
+    if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
+       dec_cursor();
+
+    if (VIsual_active)
+    {
+       orig_pos = curwin->w_cursor;
+
+       pos = curwin->w_cursor;
+       start_pos = VIsual;
+
+       /* make sure, searching further will extend the match */
+       if (VIsual_active)
+       {
+           if (forward)
+               incl(&pos);
+           else
+               decl(&pos);
+       }
+    }
+    else
+       orig_pos = pos = start_pos = curwin->w_cursor;
+
+    /* Is the pattern is zero-width? */
+    one_char = is_one_char(spats[last_idx].pat);
+    if (one_char == -1)
+       return FAIL;  /* invalid pattern */
+
+    /*
+     * The trick is to first search backwards and then search forward again,
+     * so that a match at the current cursor position will be correctly
+     * captured.
+     */
+    for (i = 0; i < 2; i++)
+    {
+       if (forward)
+           dir = i;
+       else
+           dir = !i;
+
+       flags = 0;
+       if (!dir && !one_char)
+           flags = SEARCH_END;
+
+       result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
+               spats[last_idx].pat, (long) (i ? count : 1),
+               SEARCH_KEEP | flags, RE_SEARCH, 0, NULL);
+
+       /* First search may fail, but then start searching from the
+        * beginning of the file (cursor might be on the search match)
+        * except when Visual mode is active, so that extending the visual
+        * selection works. */
+       if (!result && i) /* not found, abort */
+       {
+           curwin->w_cursor = orig_pos;
+           if (VIsual_active)
+               VIsual = save_VIsual;
+           p_ws = old_p_ws;
+           return FAIL;
+       }
+       else if (!i && !result)
+       {
+           if (forward) /* try again from start of buffer */
+           {
+               clearpos(&pos);
+           }
+           else /* try again from end of buffer */
+           {
+               /* searching backwards, so set pos to last line and col */
+               pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
+               pos.col  = (colnr_T)STRLEN(
+                               ml_get(curwin->w_buffer->b_ml.ml_line_count));
+           }
+       }
+
+    }
+
+    start_pos = pos;
+    flags = forward ? SEARCH_END : 0;
+
+    /* move to match, except for zero-width matches, in which case, we are
+     * already on the next match */
+    if (!one_char)
+       result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
+           spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
+
+    if (!VIsual_active)
+       VIsual = start_pos;
+
+    p_ws = old_p_ws;
+    curwin->w_cursor = pos;
+    VIsual_active = TRUE;
+    VIsual_mode = 'v';
+
+    if (VIsual_active)
+    {
+       redraw_curbuf_later(INVERTED);  /* update the inversion */
+       if (*p_sel == 'e')
+       {
+           /* Correction for exclusive selection depends on the direction. */
+           if (forward && ltoreq(VIsual, curwin->w_cursor))
+               inc_cursor();
+           else if (!forward && ltoreq(curwin->w_cursor, VIsual))
+               inc(&VIsual);
+       }
+
+    }
+
+#ifdef FEAT_FOLDING
+    if (fdo_flags & FDO_SEARCH && KeyTyped)
+       foldOpenCursor();
+#endif
+
+    may_start_select('c');
+#ifdef FEAT_MOUSE
+    setmouse();
+#endif
+#ifdef FEAT_CLIPBOARD
+    /* Make sure the clipboard gets updated.  Needed because start and
+     * end are still the same, and the selection needs to be owned */
+    clip_star.vmode = NUL;
+#endif
+    redraw_curbuf_later(INVERTED);
+    showmode();
+
+    return OK;
+}
+
+/*
+ * Check if the pattern is one character or zero-width.
+ * Returns TRUE, FALSE or -1 for failure.
+ */
+    static int
+is_one_char(pattern)
+    char_u     *pattern;
+{
+    regmmatch_T        regmatch;
+    int                nmatched = 0;
+    int                result = -1;
+    pos_T      pos;
+    int                save_called_emsg = called_emsg;
+
+    if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
+                                             SEARCH_KEEP, &regmatch) == FAIL)
+       return -1;
+
+    /* move to match */
+    clearpos(&pos);
+    if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
+                                    SEARCH_KEEP, RE_SEARCH, 0, NULL) != FAIL)
+    {
+       /* Zero-width pattern should match somewhere, then we can check if
+        * start and end are in the same position. */
+       called_emsg = FALSE;
+       nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
+                                                 pos.lnum, (colnr_T)0, NULL);
+
+       if (!called_emsg)
+           result = (nmatched != 0
+               && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
+               && regmatch.startpos[0].col == regmatch.endpos[0].col);
+
+       if (!result && incl(&pos) == 0 && pos.col == regmatch.endpos[0].col)
+           result  = TRUE;
+    }
+
+    called_emsg |= save_called_emsg;
+    vim_regfree(regmatch.regprog);
+    return result;
+}
+#endif /* FEAT_VISUAL */
+
 #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
        || defined(PROTO)
 /*
@@ -4527,7 +4706,7 @@ linewhite(lnum)
 #if defined(FEAT_FIND_ID) || defined(PROTO)
 /*
  * Find identifiers or defines in included files.
- * if p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
+ * If p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
  */
     void
 find_pattern_in_path(ptr, dir, len, whole, skip_comments,
@@ -4573,9 +4752,6 @@ find_pattern_in_path(ptr, dir, len, whole, skip_comments,
     char_u     *already = NULL;
     char_u     *startp = NULL;
     char_u     *inc_opt = NULL;
-#ifdef RISCOS
-    int                previous_munging = __riscosify_control;
-#endif
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
     win_T      *curwin_save = NULL;
 #endif
@@ -4588,11 +4764,6 @@ find_pattern_in_path(ptr, dir, len, whole, skip_comments,
     if (file_line == NULL)
        return;
 
-#ifdef RISCOS
-    /* UnixLib knows best how to munge c file names - turn munging back on. */
-    int __riscosify_control = 0;
-#endif
-
     if (type != CHECK_PATH && type != FIND_DEFINE
 #ifdef FEAT_INS_EXPAND
        /* when CONT_SOL is set compare "ptr" with the beginning of the line
@@ -4653,7 +4824,7 @@ find_pattern_in_path(ptr, dir, len, whole, skip_comments,
            if (inc_opt != NULL && strstr((char *)inc_opt, "\\zs") != NULL)
                /* Use text from '\zs' to '\ze' (or end) of 'include'. */
                new_fname = find_file_name_in_path(incl_regmatch.startp[0],
-                             (int)(incl_regmatch.endp[0] - incl_regmatch.startp[0]),
+                      (int)(incl_regmatch.endp[0] - incl_regmatch.startp[0]),
                                 FNAME_EXP|FNAME_INCL|FNAME_REL, 1L, p_fname);
            else
                /* Use text after match with 'include'. */
@@ -4731,17 +4902,33 @@ find_pattern_in_path(ptr, dir, len, whole, skip_comments,
                         * Isolate the file name.
                         * Include the surrounding "" or <> if present.
                         */
-                       for (p = incl_regmatch.endp[0]; !vim_isfilec(*p); p++)
-                           ;
-                       for (i = 0; vim_isfilec(p[i]); i++)
-                           ;
+                       if (inc_opt != NULL
+                                  && strstr((char *)inc_opt, "\\zs") != NULL)
+                       {
+                           /* pattern contains \zs, use the match */
+                           p = incl_regmatch.startp[0];
+                           i = (int)(incl_regmatch.endp[0]
+                                                  - incl_regmatch.startp[0]);
+                       }
+                       else
+                       {
+                           /* find the file name after the end of the match */
+                           for (p = incl_regmatch.endp[0];
+                                                 *p && !vim_isfilec(*p); p++)
+                               ;
+                           for (i = 0; vim_isfilec(p[i]); i++)
+                               ;
+                       }
+
                        if (i == 0)
                        {
                            /* Nothing found, use the rest of the line. */
                            p = incl_regmatch.endp[0];
                            i = (int)STRLEN(p);
                        }
-                       else
+                       /* Avoid checking before the start of the line, can
+                        * happen if \zs appears in the regexp. */
+                       else if (p > line)
                        {
                            if (p[-1] == '"' || p[-1] == '<')
                            {
@@ -4892,7 +5079,7 @@ search_line:
 #ifdef FEAT_COMMENTS
                        if ((*line != '#' ||
                                STRNCMP(skipwhite(line + 1), "define", 6) != 0)
-                               && get_leader_len(line, NULL, FALSE))
+                               && get_leader_len(line, NULL, FALSE, TRUE))
                            matched = FALSE;
 
                        /*
@@ -5075,9 +5262,7 @@ search_line:
                        if (win_split(0, 0) == FAIL)
 #endif
                            break;
-#ifdef FEAT_SCROLLBIND
-                       curwin->w_p_scb = FALSE;
-#endif
+                       RESET_BINDING(curwin);
                    }
                    if (depth == -1)
                    {
@@ -5134,7 +5319,7 @@ exit_matched:
                    && !(compl_cont_status & CONT_SOL)
 #endif
                    && *startp != NUL
-                   && *(p = startp + 1) != NUL)
+                   && *(p = startp + MB_PTR2LEN(startp)) != NUL)
                goto search_line;
        }
        line_breakcheck();
@@ -5166,7 +5351,15 @@ exit_matched:
                depth_displayed = depth;
        }
        if (depth >= 0)         /* we could read the line */
+       {
            files[depth].lnum++;
+           /* Remove any CR and LF from the line. */
+           i = (int)STRLEN(line);
+           if (i > 0 && line[i - 1] == '\n')
+               line[--i] = NUL;
+           if (i > 0 && line[i - 1] == '\r')
+               line[--i] = NUL;
+       }
        else if (!already)
        {
            if (++lnum > end_lnum)
@@ -5219,14 +5412,9 @@ exit_matched:
 
 fpip_end:
     vim_free(file_line);
-    vim_free(regmatch.regprog);
-    vim_free(incl_regmatch.regprog);
-    vim_free(def_regmatch.regprog);
-
-#ifdef RISCOS
-   /* Restore previous file munging state. */
-    __riscosify_control = previous_munging;
-#endif
+    vim_regfree(regmatch.regprog);
+    vim_regfree(incl_regmatch.regprog);
+    vim_regfree(def_regmatch.regprog);
 }
 
     static void
index 0b931a8..0cfe0eb 100644 (file)
@@ -7,9 +7,11 @@
  * See README.txt for an overview of the Vim source code.
  *
  * FIPS-180-2 compliant SHA-256 implementation
- * GPL by Christophe Devine.
+ * GPL by Christophe Devine, applies to older version.
  * Modified for md5deep, in public domain.
  * Modified For Vim, Mohsin Ahmed, http://www.cs.albany.edu/~mosh
+ * Mohsin Ahmed states this work is distributed under the VIM License or GPL,
+ * at your choice.
  *
  * Vim specific notes:
  * Functions exported by this file:
@@ -271,14 +273,13 @@ sha256_finish(ctx, digest)
 #endif /* FEAT_CRYPT || FEAT_PERSISTENT_UNDO */
 
 #if defined(FEAT_CRYPT) || defined(PROTO)
-static char_u *sha256_bytes __ARGS((char_u *buf, int buf_len, char_u *salt, int salt_len));
 static unsigned int get_some_time __ARGS((void));
 
 /*
  * Returns hex digest of "buf[buf_len]" in a static array.
  * if "salt" is not NULL also do "salt[salt_len]".
  */
-    static char_u *
+    char_u *
 sha256_bytes(buf, buf_len, salt, salt_len)
     char_u *buf;
     int    buf_len;
index b7e91ae..20344f2 100644 (file)
  *                         few bytes as possible, see offset2bytes())
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"    /* for lseek(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 #if defined(FEAT_SPELL) || defined(PROTO)
@@ -327,6 +323,16 @@ typedef int idx_T;
 typedef long idx_T;
 #endif
 
+#ifdef VMS
+# define SPL_FNAME_TMPL  "%s_%s.spl"
+# define SPL_FNAME_ADD   "_add."
+# define SPL_FNAME_ASCII "_ascii."
+#else
+# define SPL_FNAME_TMPL  "%s.%s.spl"
+# define SPL_FNAME_ADD   ".add."
+# define SPL_FNAME_ASCII ".ascii."
+#endif
+
 /* Flags used for a word.  Only the lowest byte can be used, the region byte
  * comes above it. */
 #define WF_REGION   0x01       /* region byte follows */
@@ -2471,14 +2477,24 @@ spell_load_lang(lang)
         * Find the first spell file for "lang" in 'runtimepath' and load it.
         */
        vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
-                                       "spell/%s.%s.spl", lang, spell_enc());
+#ifdef VMS
+                                       "spell/%s_%s.spl",
+#else
+                                       "spell/%s.%s.spl",
+#endif
+                                                          lang, spell_enc());
        r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
 
        if (r == FAIL && *sl.sl_lang != NUL)
        {
            /* Try loading the ASCII version. */
            vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
-                                                 "spell/%s.ascii.spl", lang);
+#ifdef VMS
+                                                 "spell/%s_ascii.spl",
+#else
+                                                 "spell/%s.ascii.spl",
+#endif
+                                                                       lang);
            r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
 
 #ifdef FEAT_AUTOCMD
@@ -2496,7 +2512,12 @@ spell_load_lang(lang)
 
     if (r == FAIL)
     {
-       smsg((char_u *)_("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
+       smsg((char_u *)
+#ifdef VMS
+       _("Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""),
+#else
+       _("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
+#endif
                                                     lang, spell_enc(), lang);
     }
     else if (sl.sl_slang != NULL)
@@ -2530,7 +2551,7 @@ spell_enc()
 int_wordlist_spl(fname)
     char_u         *fname;
 {
-    vim_snprintf((char *)fname, MAXPATHL, "%s.%s.spl",
+    vim_snprintf((char *)fname, MAXPATHL, SPL_FNAME_TMPL,
                                                  int_wordlist, spell_enc());
 }
 
@@ -2637,7 +2658,7 @@ slang_clear(lp)
     ga_clear(gap);
 
     for (i = 0; i < lp->sl_prefixcnt; ++i)
-       vim_free(lp->sl_prefprog[i]);
+       vim_regfree(lp->sl_prefprog[i]);
     lp->sl_prefixcnt = 0;
     vim_free(lp->sl_prefprog);
     lp->sl_prefprog = NULL;
@@ -2648,7 +2669,7 @@ slang_clear(lp)
     vim_free(lp->sl_midword);
     lp->sl_midword = NULL;
 
-    vim_free(lp->sl_compprog);
+    vim_regfree(lp->sl_compprog);
     vim_free(lp->sl_comprules);
     vim_free(lp->sl_compstartflags);
     vim_free(lp->sl_compallflags);
@@ -2785,8 +2806,8 @@ spell_load_file(fname, lang, old_lp, silent)
        if (lp->sl_fname == NULL)
            goto endFAIL;
 
-       /* Check for .add.spl. */
-       lp->sl_add = strstr((char *)gettail(fname), ".add.") != NULL;
+       /* Check for .add.spl (_add.spl for VMS). */
+       lp->sl_add = strstr((char *)gettail(fname), SPL_FNAME_ADD) != NULL;
     }
     else
        lp = old_lp;
@@ -3613,7 +3634,7 @@ read_compound(fd, slang, len)
        }
 
        /* Add all flags to "sl_compallflags". */
-       if (vim_strchr((char_u *)"+*[]/", c) == NULL
+       if (vim_strchr((char_u *)"?*+[]/", c) == NULL
                && !byte_in_str(slang->sl_compallflags, c))
        {
            *ap++ = c;
@@ -3643,7 +3664,7 @@ read_compound(fd, slang, len)
        /* Copy flag to "sl_comprules", unless we run into a wildcard. */
        if (crp != NULL)
        {
-           if (c == '+' || c == '*')
+           if (c == '?' || c == '+' || c == '*')
            {
                vim_free(slang->sl_comprules);
                slang->sl_comprules = NULL;
@@ -3661,8 +3682,8 @@ read_compound(fd, slang, len)
        }
        else                /* normal char, "[abc]" and '*' are copied as-is */
        {
-           if (c == '+' || c == '~')
-               *pp++ = '\\';       /* "a+" becomes "a\+" */
+           if (c == '?' || c == '+' || c == '~')
+               *pp++ = '\\';       /* "a?" becomes "a\?", "a+" becomes "a\+" */
 #ifdef FEAT_MBYTE
            if (enc_utf8)
                pp += mb_char2bytes(c, pp);
@@ -4207,7 +4228,7 @@ did_set_spelllang(wp)
     ga_init2(&ga, sizeof(langp_T), 2);
     clear_midword(wp);
 
-    /* Make a copy of 'spellang', the SpellFileMissing autocommands may change
+    /* Make a copy of 'spelllang', the SpellFileMissing autocommands may change
      * it under our fingers. */
     spl_copy = vim_strsave(wp->w_s->b_p_spl);
     if (spl_copy == NULL)
@@ -4679,7 +4700,7 @@ spell_free_all()
     buf_T      *buf;
     char_u     fname[MAXPATHL];
 
-    /* Go through all buffers and handle 'spelllang'. */ //<VN>
+    /* Go through all buffers and handle 'spelllang'. <VN> */
     for (buf = firstbuf; buf != NULL; buf = buf->b_next)
        ga_clear(&buf->b_s.b_langp);
 
@@ -4700,8 +4721,6 @@ spell_free_all()
        int_wordlist = NULL;
     }
 
-    init_spell_chartab();
-
     vim_free(repl_to);
     repl_to = NULL;
     vim_free(repl_from);
@@ -4930,6 +4949,8 @@ typedef struct spellinfo_S
 
     sblock_T   *si_blocks;     /* memory blocks used */
     long       si_blocks_cnt;  /* memory blocks allocated */
+    int                si_did_emsg;    /* TRUE when ran out of memory */
+
     long       si_compress_cnt;    /* words to add before lowering
                                       compression limit */
     wordnode_T *si_first_free; /* List of nodes that have been freed during
@@ -4951,7 +4972,7 @@ typedef struct spellinfo_S
     char_u     *si_info;       /* info text chars or NULL  */
     int                si_region_count; /* number of regions supported (1 when there
                                    are no regions) */
-    char_u     si_region_name[16]; /* region names; used only if
+    char_u     si_region_name[17]; /* region names; used only if
                                     * si_region_count > 1) */
 
     garray_T   si_rep;         /* list of fromto_T entries from REP lines */
@@ -4997,7 +5018,6 @@ static void aff_check_string __ARGS((char_u *spinval, char_u *affval, char *name
 static int str_equal __ARGS((char_u *s1, char_u        *s2));
 static void add_fromto __ARGS((spellinfo_T *spin, garray_T *gap, char_u        *from, char_u *to));
 static int sal_to_bool __ARGS((char_u *s));
-static int has_non_ascii __ARGS((char_u *s));
 static void spell_free_aff __ARGS((afffile_T *aff));
 static int spell_read_dic __ARGS((spellinfo_T *spin, char_u *fname, afffile_T *affile));
 static int get_affix_flags __ARGS((afffile_T *affile, char_u *afflist));
@@ -5027,7 +5047,7 @@ static int sug_filltable __ARGS((spellinfo_T *spin, wordnode_T *node, int startw
 static int offset2bytes __ARGS((int nr, char_u *buf));
 static int bytes2offset __ARGS((char_u **pp));
 static void sug_write __ARGS((spellinfo_T *spin, char_u *fname));
-static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int overwrite, int added_word));
+static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int over_write, int added_word));
 static void spell_message __ARGS((spellinfo_T *spin, char_u *str));
 static void init_spellfile __ARGS((void));
 
@@ -5456,21 +5476,25 @@ spell_read_aff(spin, fname)
            }
            else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
            {
-               /* Concatenate this string to previously defined ones, using a
-                * slash to separate them. */
-               l = (int)STRLEN(items[1]) + 1;
-               if (compflags != NULL)
-                   l += (int)STRLEN(compflags) + 1;
-               p = getroom(spin, l, FALSE);
-               if (p != NULL)
+               /* Don't use the first rule if it is a number. */
+               if (compflags != NULL || *skipdigits(items[1]) != NUL)
                {
+                   /* Concatenate this string to previously defined ones,
+                    * using a slash to separate them. */
+                   l = (int)STRLEN(items[1]) + 1;
                    if (compflags != NULL)
+                       l += (int)STRLEN(compflags) + 1;
+                   p = getroom(spin, l, FALSE);
+                   if (p != NULL)
                    {
-                       STRCPY(p, compflags);
-                       STRCAT(p, "/");
+                       if (compflags != NULL)
+                       {
+                           STRCPY(p, compflags);
+                           STRCAT(p, "/");
+                       }
+                       STRCAT(p, items[1]);
+                       compflags = p;
                    }
-                   STRCAT(p, items[1]);
-                   compflags = p;
                }
            }
            else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
@@ -5778,7 +5802,7 @@ spell_read_aff(spin, fname)
                                        {
                                            sprintf((char *)buf, "^%s",
                                                          aff_entry->ae_cond);
-                                           vim_free(aff_entry->ae_prog);
+                                           vim_regfree(aff_entry->ae_prog);
                                            aff_entry->ae_prog = vim_regcomp(
                                                    buf, RE_MAGIC + RE_STRING);
                                        }
@@ -6270,7 +6294,7 @@ process_compflags(spin, aff, compflags)
 
     for (p = compflags; *p != NUL; )
     {
-       if (vim_strchr((char_u *)"/*+[]", *p) != NULL)
+       if (vim_strchr((char_u *)"/?*+[]", *p) != NULL)
            /* Copy non-flag characters directly. */
            *tp++ = *p++;
        else
@@ -6299,7 +6323,7 @@ process_compflags(spin, aff, compflags)
                    {
                        check_renumber(spin);
                        id = spin->si_newcompID--;
-                   } while (vim_strchr((char_u *)"/+*[]\\-^", id) != NULL);
+                   } while (vim_strchr((char_u *)"/?*+[]\\-^", id) != NULL);
                    ci->ci_newID = id;
                    hash_add(&aff->af_comp, ci->ci_key);
                }
@@ -6458,23 +6482,6 @@ sal_to_bool(s)
 }
 
 /*
- * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
- * When "s" is NULL FALSE is returned.
- */
-    static int
-has_non_ascii(s)
-    char_u     *s;
-{
-    char_u     *p;
-
-    if (s != NULL)
-       for (p = s; *p != NUL; ++p)
-           if (*p >= 128)
-               return TRUE;
-    return FALSE;
-}
-
-/*
  * Free the structure filled by spell_read_aff().
  */
     static void
@@ -6500,7 +6507,7 @@ spell_free_aff(aff)
                --todo;
                ah = HI2AH(hi);
                for (ae = ah->ah_first; ae != NULL; ae = ae->ae_next)
-                   vim_free(ae->ae_prog);
+                   vim_regfree(ae->ae_prog);
            }
        }
        if (ht == &aff->af_suff)
@@ -6930,7 +6937,7 @@ store_aff_word(spin, word, afflist, affile, ht, xht, condit, flags,
                            if (ae->ae_add == NULL)
                                *newword = NUL;
                            else
-                               STRCPY(newword, ae->ae_add);
+                               vim_strncpy(newword, ae->ae_add, MAXWLEN - 1);
                            p = word;
                            if (ae->ae_chop != NULL)
                            {
@@ -6951,7 +6958,7 @@ store_aff_word(spin, word, afflist, affile, ht, xht, condit, flags,
                        else
                        {
                            /* suffix: chop/add at the end of the word */
-                           STRCPY(newword, word);
+                           vim_strncpy(newword, word, MAXWLEN - 1);
                            if (ae->ae_chop != NULL)
                            {
                                /* Remove chop string. */
@@ -7343,10 +7350,21 @@ getroom(spin, len, align)
 
     if (bl == NULL || bl->sb_used + len > SBLOCKSIZE)
     {
-       /* Allocate a block of memory. This is not freed until much later. */
-       bl = (sblock_T *)alloc_clear((unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
+       if (len >= SBLOCKSIZE)
+           bl = NULL;
+       else
+           /* Allocate a block of memory. It is not freed until much later. */
+           bl = (sblock_T *)alloc_clear(
+                                  (unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
        if (bl == NULL)
+       {
+           if (!spin->si_did_emsg)
+           {
+               EMSG(_("E845: Insufficient memory, word list will be incomplete"));
+               spin->si_did_emsg = TRUE;
+           }
            return NULL;
+       }
        bl->sb_next = spin->si_blocks;
        spin->si_blocks = bl;
        bl->sb_used = 0;
@@ -7361,6 +7379,7 @@ getroom(spin, len, align)
 
 /*
  * Make a copy of a string into memory allocated with getroom().
+ * Returns NULL when out of memory.
  */
     static char_u *
 getroom_save(spin, s)
@@ -7395,6 +7414,7 @@ free_blocks(bl)
 
 /*
  * Allocate the root of a word tree.
+ * Returns NULL when out of memory.
  */
     static wordnode_T *
 wordtree_alloc(spin)
@@ -7625,7 +7645,7 @@ tree_add_word(spin, word, root, flags, region, affixID)
 
        /* Compress both trees.  Either they both have many nodes, which makes
         * compression useful, or one of them is small, which means
-        * compression goes fast.  But when filling the souldfold word tree
+        * compression goes fast.  But when filling the soundfold word tree
         * there is no keep-case tree. */
        wordtree_compress(spin, spin->si_foldroot);
        if (affixID >= 0)
@@ -7679,6 +7699,7 @@ spell_check_msm()
 /*
  * Get a wordnode_T, either from the list of previously freed nodes or
  * allocate a new one.
+ * Returns NULL when out of memory.
  */
     static wordnode_T *
 get_wordnode(spin)
@@ -7696,7 +7717,8 @@ get_wordnode(spin)
        --spin->si_free_count;
     }
 #ifdef SPELL_PRINTTREE
-    n->wn_nr = ++spin->si_wordnode_nr;
+    if (n != NULL)
+       n->wn_nr = ++spin->si_wordnode_nr;
 #endif
     return n;
 }
@@ -8531,7 +8553,7 @@ ex_mkspell(eap)
     }
 
     /* Expand all the remaining arguments (e.g., $VIMRUNTIME). */
-    if (get_arglist_exp(arg, &fcount, &fnames) == OK)
+    if (get_arglist_exp(arg, &fcount, &fnames, FALSE) == OK)
     {
        mkspell(fcount, fnames, ascii, eap->forceit, FALSE);
        FreeWild(fcount, fnames);
@@ -8548,7 +8570,7 @@ spell_make_sugfile(spin, wfname)
     spellinfo_T        *spin;
     char_u     *wfname;
 {
-    char_u     fname[MAXPATHL];
+    char_u     *fname = NULL;
     int                len;
     slang_T    *slang;
     int                free_slang = FALSE;
@@ -8612,13 +8634,17 @@ spell_make_sugfile(spin, wfname)
      * Write the .sug file.
      * Make the file name by changing ".spl" to ".sug".
      */
-    STRCPY(fname, wfname);
+    fname = alloc(MAXPATHL);
+    if (fname == NULL)
+       goto theend;
+    vim_strncpy(fname, wfname, MAXPATHL - 1);
     len = (int)STRLEN(fname);
     fname[len - 2] = 'u';
     fname[len - 1] = 'g';
     sug_write(spin, fname);
 
 theend:
+    vim_free(fname);
     if (free_slang)
        slang_free(slang);
     free_blocks(spin->si_blocks);
@@ -8645,7 +8671,7 @@ sug_filltree(spin, slang)
     unsigned   words_done = 0;
     int                wordcount[MAXWLEN];
 
-    /* We use si_foldroot for the souldfolded trie. */
+    /* We use si_foldroot for the soundfolded trie. */
     spin->si_foldroot = wordtree_alloc(spin);
     if (spin->si_foldroot == NULL)
        return FAIL;
@@ -9028,6 +9054,9 @@ open_spellbuf()
     {
        buf->b_spell = TRUE;
        buf->b_p_swf = TRUE;    /* may create a swap file */
+#ifdef FEAT_CRYPT
+       buf->b_p_key = empty_option;
+#endif
        ml_open(buf);
        ml_open_file(buf);      /* create swap file now */
     }
@@ -9057,15 +9086,15 @@ close_spellbuf(buf)
  * and ".spl" is appended to make the output file name.
  */
     static void
-mkspell(fcount, fnames, ascii, overwrite, added_word)
+mkspell(fcount, fnames, ascii, over_write, added_word)
     int                fcount;
     char_u     **fnames;
     int                ascii;              /* -ascii argument given */
-    int                overwrite;          /* overwrite existing output file */
+    int                over_write;         /* overwrite existing output file */
     int                added_word;         /* invoked through "zg" */
 {
-    char_u     fname[MAXPATHL];
-    char_u     wfname[MAXPATHL];
+    char_u     *fname = NULL;
+    char_u     *wfname;
     char_u     **innames;
     int                incount;
     afffile_T  *(afile[8]);
@@ -9093,6 +9122,10 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
     innames = &fnames[1];
     incount = fcount - 1;
 
+    wfname = alloc(MAXPATHL);
+    if (wfname == NULL)
+       return;
+
     if (fcount >= 1)
     {
        len = (int)STRLEN(fnames[0]);
@@ -9102,32 +9135,32 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
             * "path/en.latin1.add.spl". */
            innames = &fnames[0];
            incount = 1;
-           vim_snprintf((char *)wfname, sizeof(wfname), "%s.spl", fnames[0]);
+           vim_snprintf((char *)wfname, MAXPATHL, "%s.spl", fnames[0]);
        }
        else if (fcount == 1)
        {
            /* For ":mkspell path/vim" output file is "path/vim.latin1.spl". */
            innames = &fnames[0];
            incount = 1;
-           vim_snprintf((char *)wfname, sizeof(wfname), "%s.%s.spl", fnames[0],
-                            spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+           vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
+                 fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
        }
        else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0)
        {
            /* Name ends in ".spl", use as the file name. */
-           vim_strncpy(wfname, fnames[0], sizeof(wfname) - 1);
+           vim_strncpy(wfname, fnames[0], MAXPATHL - 1);
        }
        else
            /* Name should be language, make the file name from it. */
-           vim_snprintf((char *)wfname, sizeof(wfname), "%s.%s.spl", fnames[0],
-                            spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+           vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
+                 fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
 
        /* Check for .ascii.spl. */
-       if (strstr((char *)gettail(wfname), ".ascii.") != NULL)
+       if (strstr((char *)gettail(wfname), SPL_FNAME_ASCII) != NULL)
            spin.si_ascii = TRUE;
 
        /* Check for .add.spl. */
-       if (strstr((char *)gettail(wfname), ".add.") != NULL)
+       if (strstr((char *)gettail(wfname), SPL_FNAME_ADD) != NULL)
            spin.si_add = TRUE;
     }
 
@@ -9141,17 +9174,21 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
     {
        /* Check for overwriting before doing things that may take a lot of
         * time. */
-       if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
+       if (!over_write && mch_stat((char *)wfname, &st) >= 0)
        {
            EMSG(_(e_exists));
-           return;
+           goto theend;
        }
        if (mch_isdir(wfname))
        {
            EMSG2(_(e_isadir2), wfname);
-           return;
+           goto theend;
        }
 
+       fname = alloc(MAXPATHL);
+       if (fname == NULL)
+           goto theend;
+
        /*
         * Init the aff and dic pointers.
         * Get the region names if there are more than 2 arguments.
@@ -9167,7 +9204,7 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
                                                || innames[i][len - 3] != '_')
                {
                    EMSG2(_("E755: Invalid region in %s"), innames[i]);
-                   return;
+                   goto theend;
                }
                spin.si_region_name[i * 2] = TOLOWER_ASC(innames[i][len - 2]);
                spin.si_region_name[i * 2 + 1] =
@@ -9184,7 +9221,7 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
                || spin.si_prefroot == NULL)
        {
            free_blocks(spin.si_blocks);
-           return;
+           goto theend;
        }
 
        /* When not producing a .add.spl file clear the character table when
@@ -9205,7 +9242,7 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
            spin.si_conv.vc_type = CONV_NONE;
            spin.si_region = 1 << i;
 
-           vim_snprintf((char *)fname, sizeof(fname), "%s.aff", innames[i]);
+           vim_snprintf((char *)fname, MAXPATHL, "%s.aff", innames[i]);
            if (mch_stat((char *)fname, &st) >= 0)
            {
                /* Read the .aff file.  Will init "spin->si_conv" based on the
@@ -9216,7 +9253,7 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
                else
                {
                    /* Read the .dic file and store the words in the trees. */
-                   vim_snprintf((char *)fname, sizeof(fname), "%s.dic",
+                   vim_snprintf((char *)fname, MAXPATHL, "%s.dic",
                                                                  innames[i]);
                    if (spell_read_dic(&spin, fname, afile[i]) == FAIL)
                        error = TRUE;
@@ -9298,6 +9335,10 @@ mkspell(fcount, fnames, ascii, overwrite, added_word)
            spell_make_sugfile(&spin, wfname);
 
     }
+
+theend:
+    vim_free(fname);
+    vim_free(wfname);
 }
 
 /*
@@ -9350,7 +9391,7 @@ spell_add_word(word, len, bad, idx, undo)
     buf_T      *buf = NULL;
     int                new_spf = FALSE;
     char_u     *fname;
-    char_u     fnamebuf[MAXPATHL];
+    char_u     *fnamebuf = NULL;
     char_u     line[MAXWLEN * 2];
     long       fpos, fpos_next = 0;
     int                i;
@@ -9380,6 +9421,9 @@ spell_add_word(word, len, bad, idx, undo)
            EMSG2(_(e_notset), "spellfile");
            return;
        }
+       fnamebuf = alloc(MAXPATHL);
+       if (fnamebuf == NULL)
+           return;
 
        for (spf = curwin->w_s->b_p_spf, i = 1; *spf != NUL; ++i)
        {
@@ -9389,6 +9433,7 @@ spell_add_word(word, len, bad, idx, undo)
            if (*spf == NUL)
            {
                EMSGN(_("E765: 'spellfile' does not have %ld entries"), idx);
+               vim_free(fnamebuf);
                return;
            }
        }
@@ -9400,6 +9445,7 @@ spell_add_word(word, len, bad, idx, undo)
        if (buf != NULL && bufIsChanged(buf))
        {
            EMSG(_(e_bufloaded));
+           vim_free(fnamebuf);
            return;
        }
 
@@ -9494,6 +9540,7 @@ spell_add_word(word, len, bad, idx, undo)
 
        redraw_all_later(SOME_VALID);
     }
+    vim_free(fnamebuf);
 }
 
 /*
@@ -9502,7 +9549,7 @@ spell_add_word(word, len, bad, idx, undo)
     static void
 init_spellfile()
 {
-    char_u     buf[MAXPATHL];
+    char_u     *buf;
     int                l;
     char_u     *fname;
     char_u     *rtp;
@@ -9512,6 +9559,10 @@ init_spellfile()
 
     if (*curwin->w_s->b_p_spl != NUL && curwin->w_s->b_langp.ga_len > 0)
     {
+       buf = alloc(MAXPATHL);
+       if (buf == NULL)
+           return;
+
        /* Find the end of the language name.  Exclude the region.  If there
         * is a path separator remember the start of the tail. */
        for (lend = curwin->w_s->b_p_spl; *lend != NUL
@@ -9530,7 +9581,8 @@ init_spellfile()
            if (aspath)
                /* Use directory of an entry with path, e.g., for
                 * "/dir/lg.utf-8.spl" use "/dir". */
-               vim_strncpy(buf, curbuf->b_s.b_p_spl, lstart - curbuf->b_s.b_p_spl - 1);
+               vim_strncpy(buf, curbuf->b_s.b_p_spl,
+                                           lstart - curbuf->b_s.b_p_spl - 1);
            else
                /* Copy the path from 'runtimepath' to buf[]. */
                copy_option_part(&rtp, buf, MAXPATHL, ",");
@@ -9539,13 +9591,14 @@ init_spellfile()
                /* Use the first language name from 'spelllang' and the
                 * encoding used in the first loaded .spl file. */
                if (aspath)
-                   vim_strncpy(buf, curbuf->b_s.b_p_spl, lend - curbuf->b_s.b_p_spl);
+                   vim_strncpy(buf, curbuf->b_s.b_p_spl,
+                                                 lend - curbuf->b_s.b_p_spl);
                else
                {
                    /* Create the "spell" directory if it doesn't exist yet. */
                    l = (int)STRLEN(buf);
                    vim_snprintf((char *)buf + l, MAXPATHL - l, "/spell");
-                   if (!filewritable(buf) != 2)
+                   if (filewritable(buf) != 2)
                        vim_mkdir(buf, 0755);
 
                    l = (int)STRLEN(buf);
@@ -9553,7 +9606,8 @@ init_spellfile()
                                 "/%.*s", (int)(lend - lstart), lstart);
                }
                l = (int)STRLEN(buf);
-               fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)->lp_slang->sl_fname;
+               fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)
+                                                        ->lp_slang->sl_fname;
                vim_snprintf((char *)buf + l, MAXPATHL - l, ".%s.add",
                        fname != NULL
                          && strstr((char *)gettail(fname), ".ascii.") != NULL
@@ -9563,6 +9617,8 @@ init_spellfile()
            }
            aspath = FALSE;
        }
+
+       vim_free(buf);
     }
 }
 
@@ -9837,10 +9893,7 @@ spell_iswordp(p, wp)
        {
            /* be quick for ASCII */
            if (wp->w_s->b_spell_ismw[*p])
-           {
                s = p + 1;              /* skip a mid-word character */
-               l = MB_BYTE2LEN(*s);
-           }
        }
        else
        {
@@ -9848,10 +9901,7 @@ spell_iswordp(p, wp)
            if (c < 256 ? wp->w_s->b_spell_ismw[c]
                    : (wp->w_s->b_spell_ismw_mb != NULL
                           && vim_strchr(wp->w_s->b_spell_ismw_mb, c) != NULL))
-           {
                s = p + l;
-               l = MB_BYTE2LEN(*s);
-           }
        }
 
        c = mb_ptr2char(s);
@@ -10223,7 +10273,7 @@ spell_suggest(count)
 
            /* The suggested word may replace only part of the bad word, add
             * the not replaced part. */
-           STRCPY(wcopy, stp->st_word);
+           vim_strncpy(wcopy, stp->st_word, MAXWLEN);
            if (sug.su_badlen > stp->st_orglen)
                vim_strncpy(wcopy + stp->st_wordlen,
                                               sug.su_badptr + stp->st_orglen,
@@ -11130,7 +11180,7 @@ allcap_copy(word, wcopy)
            c = *s++;
 
 #ifdef FEAT_MBYTE
-       /* We only change ÃŸ to SS when we are certain latin1 is used.  It
+       /* We only change 0xdf to SS when we are certain latin1 is used.  It
         * would cause weird errors in other 8-bit encodings. */
        if (enc_latin1like && c == 0xdf)
        {
@@ -12972,7 +13022,7 @@ score_comp_sal(su)
 
 /*
  * Combine the list of suggestions in su->su_ga and su->su_sga.
- * They are intwined.
+ * They are entwined.
  */
     static void
 score_combine(su)
@@ -13124,7 +13174,7 @@ stp_sal_score(stp, su, slang, badsound)
        pbad = badsound2;
     }
 
-    if (lendiff > 0)
+    if (lendiff > 0 && stp->st_wordlen + lendiff < MAXWLEN)
     {
        /* Add part of the bad word to the good word, so that we soundfold
         * what replaces the bad word. */
@@ -13410,7 +13460,7 @@ badword:
 
                /* Add a small penalty for changing the first letter from
                 * lower to upper case.  Helps for "tath" -> "Kath", which is
-                * less common thatn "tath" -> "path".  Don't do it when the
+                * less common than "tath" -> "path".  Don't do it when the
                 * letter is the same, that has already been counted. */
                gc = PTR2CHAR(p);
                if (SPELL_ISUPPER(gc))
@@ -13645,7 +13695,7 @@ similar_chars(slang, c1, c2)
 {
     int                m1, m2;
 #ifdef FEAT_MBYTE
-    char_u     buf[MB_MAXBYTES];
+    char_u     buf[MB_MAXBYTES + 1];
     hashitem_T  *hi;
 
     if (c1 >= 256)
@@ -13811,11 +13861,8 @@ add_suggestion(su, gap, goodword, badlenarg, score, altscore, had_bonus,
                    su->su_sfmaxscore = cleanup_suggestions(gap,
                                      su->su_sfmaxscore, SUG_CLEAN_COUNT(su));
                else
-               {
-                   i = su->su_maxscore;
                    su->su_maxscore = cleanup_suggestions(gap,
                                        su->su_maxscore, SUG_CLEAN_COUNT(su));
-               }
            }
        }
     }
@@ -13840,7 +13887,7 @@ check_suggestions(su, gap)
     for (i = gap->ga_len - 1; i >= 0; --i)
     {
        /* Need to append what follows to check for "the the". */
-       STRCPY(longword, stp[i].st_word);
+       vim_strncpy(longword, stp[i].st_word, MAXWLEN);
        len = stp[i].st_wordlen;
        vim_strncpy(longword + len, su->su_badptr + stp[i].st_orglen,
                                                               MAXWLEN - len);
@@ -14186,7 +14233,7 @@ spell_soundfold_sal(slang, inword, res)
        *t = NUL;
     }
     else
-       STRCPY(word, s);
+       vim_strncpy(word, s, MAXWLEN - 1);
 
     smp = (salitem_T *)slang->sl_sal.ga_data;
 
@@ -14448,13 +14495,15 @@ spell_soundfold_wsal(slang, inword, res)
     int                p0 = -333;
     int                c0;
     int                did_white = FALSE;
+    int                wordlen;
+
 
     /*
      * Convert the multi-byte string to a wide-character string.
      * Remove accents, if wanted.  We actually remove all non-word characters.
      * But keep white space.
      */
-    n = 0;
+    wordlen = 0;
     for (s = inword; *s != NUL; )
     {
        t = s;
@@ -14475,12 +14524,12 @@ spell_soundfold_wsal(slang, inword, res)
                    continue;
            }
        }
-       word[n++] = c;
+       word[wordlen++] = c;
     }
-    word[n] = NUL;
+    word[wordlen] = NUL;
 
     /*
-     * This comes from Aspell phonet.cpp.
+     * This algorithm comes from Aspell phonet.cpp.
      * Converted from C++ to C.  Added support for multi-byte chars.
      * Changed to keep spaces.
      */
@@ -14665,7 +14714,7 @@ spell_soundfold_wsal(slang, inword, res)
                            }
                        if (k > k0)
                            mch_memmove(word + i + k0, word + i + k,
-                                   sizeof(int) * (STRLEN(word + i + k) + 1));
+                                   sizeof(int) * (wordlen - (i + k) + 1));
 
                        /* new "actual letter" */
                        c = word[i];
@@ -14693,7 +14742,7 @@ spell_soundfold_wsal(slang, inword, res)
                            if (c != NUL)
                                wres[reslen++] = c;
                            mch_memmove(word, word + i + 1,
-                                   sizeof(int) * (STRLEN(word + i + 1) + 1));
+                                      sizeof(int) * (wordlen - (i + 1) + 1));
                            i = 0;
                            z0 = 1;
                        }
index 884d6a9..f74d218 100644 (file)
@@ -63,15 +63,16 @@ typedef struct growarray
 
 #define GA_EMPTY    {0, 0, 0, 0, NULL}
 
-/*
- * This is here because regexp.h needs pos_T and below regprog_T is used.
- */
-#include "regexp.h"
-
 typedef struct window_S                win_T;
 typedef struct wininfo_S       wininfo_T;
 typedef struct frame_S         frame_T;
 typedef int                    scid_T;         /* script ID */
+typedef struct file_buffer     buf_T;  /* forward declaration */
+
+/*
+ * This is here because regexp.h needs pos_T and below regprog_T is used.
+ */
+#include "regexp.h"
 
 /*
  * This is here because gui.h needs the pos_T and win_T, and win_T needs gui.h
@@ -140,14 +141,22 @@ typedef struct
 #ifdef FEAT_FOLDING
     long       wo_fdc;
 # define w_p_fdc w_onebuf_opt.wo_fdc   /* 'foldcolumn' */
+    int                wo_fdc_save;
+# define w_p_fdc_save w_onebuf_opt.wo_fdc_save /* 'foldenable' saved for diff mode */
     int                wo_fen;
 # define w_p_fen w_onebuf_opt.wo_fen   /* 'foldenable' */
+    int                wo_fen_save;
+# define w_p_fen_save w_onebuf_opt.wo_fen_save /* 'foldenable' saved for diff mode */
     char_u     *wo_fdi;
 # define w_p_fdi w_onebuf_opt.wo_fdi   /* 'foldignore' */
     long       wo_fdl;
 # define w_p_fdl w_onebuf_opt.wo_fdl   /* 'foldlevel' */
+    int                wo_fdl_save;
+# define w_p_fdl_save w_onebuf_opt.wo_fdl_save /* 'foldlevel' state saved for diff mode */
     char_u     *wo_fdm;
 # define w_p_fdm w_onebuf_opt.wo_fdm   /* 'foldmethod' */
+    char_u     *wo_fdm_save;
+# define w_p_fdm_save w_onebuf_opt.wo_fdm_save /* 'fdm' saved for diff mode */
     long       wo_fml;
 # define w_p_fml w_onebuf_opt.wo_fml   /* 'foldminlines' */
     long       wo_fdn;
@@ -212,9 +221,17 @@ typedef struct
 #ifdef FEAT_SCROLLBIND
     int                wo_scb;
 # define w_p_scb w_onebuf_opt.wo_scb   /* 'scrollbind' */
+    int                wo_diff_saved; /* options were saved for starting diff mode */
+# define w_p_diff_saved w_onebuf_opt.wo_diff_saved
+    int                wo_scb_save;    /* 'scrollbind' saved for diff mode*/
+# define w_p_scb_save w_onebuf_opt.wo_scb_save
 #endif
     int                wo_wrap;
 #define w_p_wrap w_onebuf_opt.wo_wrap  /* 'wrap' */
+#ifdef FEAT_DIFF
+    int                wo_wrap_save;   /* 'wrap' state saved for diff mode*/
+# define w_p_wrap_save w_onebuf_opt.wo_wrap_save
+#endif
 #ifdef FEAT_CONCEAL
     char_u     *wo_cocu;               /* 'concealcursor' */
 # define w_p_cocu w_onebuf_opt.wo_cocu
@@ -224,6 +241,8 @@ typedef struct
 #ifdef FEAT_CURSORBIND
     int                wo_crb;
 # define w_p_crb w_onebuf_opt.wo_crb   /* 'cursorbind' */
+    int                wo_crb_save;    /* 'cursorbind' state saved for diff mode*/
+# define w_p_crb_save w_onebuf_opt.wo_crb_save
 #endif
 
 #ifdef FEAT_EVAL
@@ -378,6 +397,35 @@ typedef struct memfile         memfile_T;
 typedef long               blocknr_T;
 
 /*
+ * mf_hashtab_T is a chained hashtable with blocknr_T key and arbitrary
+ * structures as items.  This is an intrusive data structure: we require
+ * that items begin with mf_hashitem_T which contains the key and linked
+ * list pointers.  List of items in each bucket is doubly-linked.
+ */
+
+typedef struct mf_hashitem_S mf_hashitem_T;
+
+struct mf_hashitem_S
+{
+    mf_hashitem_T   *mhi_next;
+    mf_hashitem_T   *mhi_prev;
+    blocknr_T      mhi_key;
+};
+
+#define MHT_INIT_SIZE   64
+
+typedef struct mf_hashtab_S
+{
+    long_u         mht_mask;       /* mask used for hash value (nr of items
+                                    * in array is "mht_mask" + 1) */
+    long_u         mht_count;      /* nr of items inserted into hashtable */
+    mf_hashitem_T   **mht_buckets;  /* points to mht_small_buckets or
+                                    *dynamically allocated array */
+    mf_hashitem_T   *mht_small_buckets[MHT_INIT_SIZE];   /* initial buckets */
+    char           mht_fixed;      /* non-zero value forbids growth */
+} mf_hashtab_T;
+
+/*
  * for each (previously) used block in the memfile there is one block header.
  *
  * The block may be linked in the used list OR in the free list.
@@ -394,11 +442,11 @@ typedef long                  blocknr_T;
 
 struct block_hdr
 {
+    mf_hashitem_T bh_hashitem;      /* header for hash table and key */
+#define bh_bnum bh_hashitem.mhi_key /* block number, part of bh_hashitem */
+
     bhdr_T     *bh_next;           /* next block_hdr in free or used list */
     bhdr_T     *bh_prev;           /* previous block_hdr in used list */
-    bhdr_T     *bh_hash_next;      /* next block_hdr in hash list */
-    bhdr_T     *bh_hash_prev;      /* previous block_hdr in hash list */
-    blocknr_T  bh_bnum;            /* block number */
     char_u     *bh_data;           /* pointer to memory (for used block) */
     int                bh_page_count;      /* number of pages in this block */
 
@@ -417,9 +465,9 @@ typedef struct nr_trans NR_TRANS;
 
 struct nr_trans
 {
-    NR_TRANS   *nt_next;               /* next nr_trans in hash list */
-    NR_TRANS   *nt_prev;               /* previous nr_trans in hash list */
-    blocknr_T  nt_old_bnum;            /* old, negative, number */
+    mf_hashitem_T nt_hashitem;         /* header for hash table and key */
+#define nt_old_bnum nt_hashitem.mhi_key        /* old, negative, number */
+
     blocknr_T  nt_new_bnum;            /* new, positive, number */
 };
 
@@ -463,6 +511,8 @@ typedef struct expand
     int                xp_numfiles;            /* number of files found by
                                                    file name completion */
     char_u     **xp_files;             /* list of files */
+    char_u     *xp_line;               /* text being completed */
+    int                xp_col;                 /* cursor position in line */
 } expand_T;
 
 /* values for xp_backslash */
@@ -497,14 +547,6 @@ typedef struct
 # endif
 } cmdmod_T;
 
-typedef struct file_buffer buf_T;  /* forward declaration */
-
-/*
- * Simplistic hashing scheme to quickly locate the blocks in the used list.
- * 64 blocks are found directly (64 * 4K = 256K, most files are smaller).
- */
-#define MEMHASHSIZE    64
-#define MEMHASH(nr)    ((nr) & (MEMHASHSIZE - 1))
 #define MF_SEED_LEN    8
 
 struct memfile
@@ -517,8 +559,8 @@ struct memfile
     bhdr_T     *mf_used_last;          /* lru block_hdr in used list */
     unsigned   mf_used_count;          /* number of pages in used list */
     unsigned   mf_used_count_max;      /* maximum number of pages in memory */
-    bhdr_T     *mf_hash[MEMHASHSIZE];  /* array of hash lists */
-    NR_TRANS   *mf_trans[MEMHASHSIZE]; /* array of trans lists */
+    mf_hashtab_T mf_hash;              /* hash lists */
+    mf_hashtab_T mf_trans;             /* trans lists */
     blocknr_T  mf_blocknr_max;         /* highest positive block number + 1*/
     blocknr_T  mf_blocknr_min;         /* lowest negative block number - 1 */
     blocknr_T  mf_neg_count;           /* number of negative blocks numbers */
@@ -979,12 +1021,14 @@ typedef struct mapblock mapblock_T;
 struct mapblock
 {
     mapblock_T *m_next;        /* next mapblock in list */
-    char_u     *m_keys;        /* mapped from */
+    char_u     *m_keys;        /* mapped from, lhs */
+    char_u     *m_str;         /* mapped to, rhs */
+    char_u     *m_orig_str;    /* rhs as entered by the user */
     int                m_keylen;       /* strlen(m_keys) */
-    char_u     *m_str;         /* mapped to */
     int                m_mode;         /* valid mode */
     int                m_noremap;      /* if non-zero no re-mapping for m_str */
     char       m_silent;       /* <silent> used, don't echo commands */
+    char       m_nowait;       /* <nowait> used */
 #ifdef FEAT_EVAL
     char       m_expr;         /* <expr> used, m_str is an expression */
     scid_T     m_script_ID;    /* ID of script where map was defined */
@@ -1082,6 +1126,11 @@ typedef struct
 #define VAR_DICT    5  /* "v_dict" is used */
 #define VAR_FLOAT   6  /* "v_float" is used */
 
+/* Values for "dv_scope". */
+#define VAR_SCOPE     1        /* a:, v:, s:, etc. scope dictionaries */
+#define VAR_DEF_SCOPE 2        /* l:, g: scope dictionaries: here funcrefs are not
+                          allowed to mask existing functions */
+
 /* Values for "v_lock". */
 #define VAR_LOCKED  1  /* locked with lock(), can use unlock() */
 #define VAR_FIXED   2  /* locked forever */
@@ -1152,11 +1201,12 @@ typedef struct dictitem_S dictitem_T;
  */
 struct dictvar_S
 {
+    char       dv_lock;        /* zero, VAR_LOCKED, VAR_FIXED */
+    char       dv_scope;       /* zero, VAR_SCOPE, VAR_DEF_SCOPE */
     int                dv_refcount;    /* reference count */
-    hashtab_T  dv_hashtab;     /* hashtab that refers to the items */
     int                dv_copyID;      /* ID used by deepcopy() */
+    hashtab_T  dv_hashtab;     /* hashtab that refers to the items */
     dict_T     *dv_copydict;   /* copied dict used by deepcopy() */
-    char       dv_lock;        /* zero, VAR_LOCKED, VAR_FIXED */
     dict_T     *dv_used_next;  /* next dict in used dicts list */
     dict_T     *dv_used_prev;  /* previous dict in used dicts list */
 };
@@ -1177,11 +1227,27 @@ struct dictvar_S
 typedef struct qf_info_S qf_info_T;
 #endif
 
+#ifdef FEAT_PROFILE
+/*
+ * Used for :syntime: timing of executing a syntax pattern.
+ */
+typedef struct {
+    proftime_T total;          /* total time used */
+    proftime_T slowest;        /* time of slowest call */
+    long       count;          /* nr of times used */
+    long       match;          /* nr of times matched */
+} syn_time_T;
+#endif
+
+/*
+ * These are items normally related to a buffer.  But when using ":ownsyntax"
+ * a window may have its own instance.
+ */
 typedef struct {
 #ifdef FEAT_SYN_HL
     hashtab_T  b_keywtab;              /* syntax keywords hash table */
     hashtab_T  b_keywtab_ic;           /* idem, ignore case */
-    int                b_syn_error;            /* TRUE when error occured in HL */
+    int                b_syn_error;            /* TRUE when error occurred in HL */
     int                b_syn_ic;               /* ignore case for :syn cmds */
     int                b_syn_spell;            /* SYNSPL_ values */
     garray_T   b_syn_patterns;         /* table for syntax patterns */
@@ -1197,6 +1263,9 @@ typedef struct {
     long       b_syn_sync_linebreaks;  /* offset for multi-line pattern */
     char_u     *b_syn_linecont_pat;    /* line continuation pattern */
     regprog_T  *b_syn_linecont_prog;   /* line continuation program */
+#ifdef FEAT_PROFILE
+    syn_time_T  b_syn_linecont_time;
+#endif
     int                b_syn_linecont_ic;      /* ignore-case flag for above */
     int                b_syn_topgrp;           /* for ":syntax include" */
 # ifdef FEAT_CONCEAL
@@ -1266,6 +1335,10 @@ struct file_buffer
     int                b_nwindows;     /* nr of windows open on this buffer */
 
     int                b_flags;        /* various BF_ flags */
+#ifdef FEAT_AUTOCMD
+    int                b_closing;      /* buffer is being closed, don't let
+                                  autocommands close it too. */
+#endif
 
     /*
      * b_ffname has the full path of the file (NULL for no name).
@@ -1506,9 +1579,6 @@ struct file_buffer
     int                b_p_ml_nobin;   /* b_p_ml saved for binary mode */
     int                b_p_ma;         /* 'modifiable' */
     char_u     *b_p_nf;        /* 'nrformats' */
-#ifdef FEAT_OSFILETYPE
-    char_u     *b_p_oft;       /* 'osfiletype' */
-#endif
     int                b_p_pi;         /* 'preserveindent' */
 #ifdef FEAT_TEXTOBJ
     char_u     *b_p_qe;        /* 'quoteescape' */
@@ -1563,6 +1633,9 @@ struct file_buffer
 
     /* end of buffer options */
 
+    linenr_T   b_no_eol_lnum;  /* non-zero lnum when last line of next binary
+                                * write should not have an end-of-line */
+
     int                b_start_eol;    /* last line had eol when it was read */
     int                b_start_ffc;    /* first char of 'ff' when edit started */
 #ifdef FEAT_MBYTE
@@ -1573,7 +1646,7 @@ struct file_buffer
 
 #ifdef FEAT_EVAL
     dictitem_T b_bufvar;       /* variable for "b:" Dictionary */
-    dict_T     b_vars;         /* internal variables, local to buffer */
+    dict_T     *b_vars;        /* internal variables, local to buffer */
 #endif
 
 #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
@@ -1719,7 +1792,15 @@ struct tabpage_S
     frame_T        *(tp_snapshot[SNAP_COUNT]);  /* window layout snapshots */
 #ifdef FEAT_EVAL
     dictitem_T     tp_winvar;      /* variable for "t:" Dictionary */
-    dict_T         tp_vars;        /* internal variables, local to tab page */
+    dict_T         *tp_vars;       /* internal variables, local to tab page */
+#endif
+
+#ifdef FEAT_PYTHON
+    void           *tp_python_ref;     /* The Python value for this tab page */
+#endif
+
+#ifdef FEAT_PYTHON3
+    void           *tp_python3_ref;    /* The Python value for this tab page */
 #endif
 };
 
@@ -1822,13 +1903,17 @@ struct window_S
                                       often, keep it the first item!) */
 
 #if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
-    synblock_T *w_s;
+    synblock_T *w_s;               /* for :ownsyntax */
 #endif
 
 #ifdef FEAT_WINDOWS
     win_T      *w_prev;            /* link to previous window */
     win_T      *w_next;            /* link to next window */
 #endif
+#ifdef FEAT_AUTOCMD
+    int                w_closing;          /* window is being closed, don't let
+                                      autocommands close it too. */
+#endif
 
     frame_T    *w_frame;           /* frame containing this window */
 
@@ -2038,7 +2123,7 @@ struct window_S
 
 #ifdef FEAT_EVAL
     dictitem_T w_winvar;       /* variable for "w:" Dictionary */
-    dict_T     w_vars;         /* internal variables, local to window */
+    dict_T     *w_vars;        /* internal variables, local to window */
 #endif
 
 #if defined(FEAT_RIGHTLEFT) && defined(FEAT_FKMAP)
@@ -2339,11 +2424,6 @@ struct VimMenu
     MenuHandle menu_handle;
     MenuHandle submenu_handle;
 #endif
-#ifdef RISCOS
-    int                *id;                /* Not used, but gui.c needs it */
-    int                greyed_out;         /* Flag */
-    int                hidden;
-#endif
 #ifdef FEAT_GUI_PHOTON
     PtWidget_t *id;
     PtWidget_t *submenu_id;
index fbc123c..a8de63a 100644 (file)
@@ -68,6 +68,8 @@ static garray_T highlight_ga; /* highlight groups for 'highlight' option */
 
 #define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data)))
 
+#define MAX_HL_ID       20000  /* maximum value for a highlight ID. */
+
 #ifdef FEAT_CMDL_COMPL
 /* Flags to indicate an additional string for highlight name completion. */
 static int include_none = 0;   /* when 1 include "None" */
@@ -103,7 +105,7 @@ static GuiFont font_name2handle __ARGS((char_u *name));
 # ifdef FEAT_XFONTSET
 static GuiFontset fontset_name2handle __ARGS((char_u *name, int fixed_width));
 # endif
-static void hl_do_font __ARGS((int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip));
+static void hl_do_font __ARGS((int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip, int free_font));
 #endif
 
 /*
@@ -151,6 +153,9 @@ typedef struct syn_pattern
     short       sp_syn_match_id;       /* highlight group ID of pattern */
     char_u     *sp_pattern;            /* regexp to match, pattern */
     regprog_T  *sp_prog;               /* regexp to match, program */
+#ifdef FEAT_PROFILE
+    syn_time_T  sp_time;
+#endif
     int                 sp_ic;                 /* ignore-case flag for sp_prog */
     short       sp_off_flags;          /* see below */
     int                 sp_offsets[SPO_COUNT]; /* offsets */
@@ -219,16 +224,19 @@ typedef struct syn_cluster_S
 
 /*
  * Syntax group IDs have different types:
- *     0 -  9999  normal syntax groups
- * 10000 - 14999  ALLBUT indicator (current_syn_inc_tag added)
- * 15000 - 19999  TOP indicator (current_syn_inc_tag added)
- * 20000 - 24999  CONTAINED indicator (current_syn_inc_tag added)
- * >= 25000      cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
+ *     0 - 19999  normal syntax groups
+ * 20000 - 20999  ALLBUT indicator (current_syn_inc_tag added)
+ * 21000 - 21999  TOP indicator (current_syn_inc_tag added)
+ * 22000 - 22999  CONTAINED indicator (current_syn_inc_tag added)
+ * 23000 - 32767  cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
  */
-#define SYNID_ALLBUT   10000       /* syntax group ID for contains=ALLBUT */
-#define SYNID_TOP      15000       /* syntax group ID for contains=TOP */
-#define SYNID_CONTAINED        20000       /* syntax group ID for contains=CONTAINED */
-#define SYNID_CLUSTER  25000       /* first syntax group ID for clusters */
+#define SYNID_ALLBUT   MAX_HL_ID   /* syntax group ID for contains=ALLBUT */
+#define SYNID_TOP      21000       /* syntax group ID for contains=TOP */
+#define SYNID_CONTAINED        22000       /* syntax group ID for contains=CONTAINED */
+#define SYNID_CLUSTER  23000       /* first syntax group ID for clusters */
+
+#define MAX_SYN_INC_TAG        999         /* maximum before the above overflow */
+#define MAX_CLUSTER_ID  (32767 - SYNID_CLUSTER)
 
 /*
  * Annoying Hack(TM):  ":syn include" needs this pointer to pass to
@@ -264,6 +272,8 @@ static keyentry_T dumkey;
  */
 static int keepend_level = -1;
 
+static char msg_no_items[] = N_("No Syntax items defined for this buffer");
+
 /*
  * For the current state we need to remember more than just the idx.
  * When si_m_endpos.lnum is 0, the items other than si_idx are unknown.
@@ -390,6 +400,21 @@ static short *copy_id_list __ARGS((short *list));
 static int in_id_list __ARGS((stateitem_T *item, short *cont_list, struct sp_syn *ssp, int contained));
 static int push_current_state __ARGS((int idx));
 static void pop_current_state __ARGS((void));
+#ifdef FEAT_PROFILE
+static void syn_clear_time __ARGS((syn_time_T *tt));
+static void syntime_clear __ARGS((void));
+#ifdef __BORLANDC__
+static int _RTLENTRYF syn_compare_syntime __ARGS((const void *v1, const void *v2));
+#else
+static int syn_compare_syntime __ARGS((const void *v1, const void *v2));
+#endif
+static void syntime_report __ARGS((void));
+static int syn_time_on = FALSE;
+# define IF_SYN_TIME(p) (p)
+#else
+# define IF_SYN_TIME(p) NULL
+typedef int syn_time_T;
+#endif
 
 static void syn_stack_apply_changes_block __ARGS((synblock_T *block, buf_T *buf));
 static void find_endpos __ARGS((int idx, lpos_T *startpos, lpos_T *m_endpos, lpos_T *hl_endpos, long *flagsp, lpos_T *end_endpos, int *end_idx, reg_extmatch_T *start_ext));
@@ -401,7 +426,7 @@ static void limit_pos_zero __ARGS((lpos_T *pos, lpos_T *limit));
 static void syn_add_end_off __ARGS((lpos_T *result, regmmatch_T *regmatch, synpat_T *spp, int idx, int extra));
 static void syn_add_start_off __ARGS((lpos_T *result, regmmatch_T *regmatch, synpat_T *spp, int idx, int extra));
 static char_u *syn_getcurline __ARGS((void));
-static int syn_regexec __ARGS((regmmatch_T *rmp, linenr_T lnum, colnr_T col));
+static int syn_regexec __ARGS((regmmatch_T *rmp, linenr_T lnum, colnr_T col, syn_time_T *st));
 static int check_keyword_id __ARGS((char_u *line, int startcol, int *endcol, long *flags, short **next_list, stateitem_T *cur_si, int *ccharp));
 static void syn_cmd_case __ARGS((exarg_T *eap, int syncing));
 static void syn_cmd_spell __ARGS((exarg_T *eap, int syncing));
@@ -554,7 +579,13 @@ syntax_start(wp, lnum)
     if (INVALID_STATE(&current_state))
     {
        syn_sync(wp, lnum, last_valid);
-       first_stored = current_lnum + syn_block->b_syn_sync_minlines;
+       if (current_lnum == 1)
+           /* First line is always valid, no matter "minlines". */
+           first_stored = 1;
+       else
+           /* Need to parse "minlines" lines before state can be considered
+            * valid to store. */
+           first_stored = current_lnum + syn_block->b_syn_sync_minlines;
     }
     else
        first_stored = current_lnum;
@@ -966,7 +997,8 @@ syn_match_linecont(lnum)
     {
        regmatch.rmm_ic = syn_block->b_syn_linecont_ic;
        regmatch.regprog = syn_block->b_syn_linecont_prog;
-       return syn_regexec(&regmatch, lnum, (colnr_T)0);
+       return syn_regexec(&regmatch, lnum, (colnr_T)0,
+                               IF_SYN_TIME(&syn_block->b_syn_linecont_time));
     }
     return FALSE;
 }
@@ -985,7 +1017,10 @@ syn_start_line()
      * previous line and regions that have "keepend".
      */
     if (current_state.ga_len > 0)
+    {
        syn_update_ends(TRUE);
+       check_state_ends();
+    }
 
     next_match_idx = -1;
     ++current_line_id;
@@ -1059,7 +1094,6 @@ syn_update_ends(startofline)
        }
     }
     check_keepend();
-    check_state_ends();
 }
 
 /****************************************
@@ -1941,9 +1975,9 @@ syn_current_attr(syncing, displaying, can_spell, keep_state)
            if (do_keywords)
            {
              line = syn_getcurline();
-             if (vim_iswordc_buf(line + current_col, syn_buf)
+             if (vim_iswordp_buf(line + current_col, syn_buf)
                      && (current_col == 0
-                         || !vim_iswordc_buf(line + current_col - 1
+                         || !vim_iswordp_buf(line + current_col - 1
 #ifdef FEAT_MBYTE
                              - (has_mbyte
                                  ? (*mb_head_off)(line, line + current_col - 1)
@@ -2055,8 +2089,10 @@ syn_current_attr(syncing, displaying, can_spell, keep_state)
 
                            regmatch.rmm_ic = spp->sp_ic;
                            regmatch.regprog = spp->sp_prog;
-                           if (!syn_regexec(&regmatch, current_lnum,
-                                                            (colnr_T)lc_col))
+                           if (!syn_regexec(&regmatch,
+                                            current_lnum,
+                                            (colnr_T)lc_col,
+                                            IF_SYN_TIME(&spp->sp_time)))
                            {
                                /* no match in this line, try another one */
                                spp->sp_startcol = MAXCOL;
@@ -2528,7 +2564,7 @@ push_next_match(cur_si)
 check_state_ends()
 {
     stateitem_T        *cur_si;
-    int                had_extend = FALSE;
+    int                had_extend;
 
     cur_si = &CUR_STATE(current_state.ga_len - 1);
     for (;;)
@@ -2561,6 +2597,9 @@ check_state_ends()
 #endif
                update_si_attr(current_state.ga_len - 1);
 
+               /* nextgroup= should not match in the end pattern */
+               current_next_list = NULL;
+
                /* what matches next may be different now, clear it */
                next_match_idx = 0;
                next_match_col = MAXCOL;
@@ -2578,8 +2617,7 @@ check_state_ends()
 
                /* When the ended item has "extend", another item with
                 * "keepend" now needs to check for its end. */
-                if (cur_si->si_flags & HL_EXTEND)
-                    had_extend = TRUE;
+                had_extend = (cur_si->si_flags & HL_EXTEND);
 
                pop_current_state();
 
@@ -2935,7 +2973,8 @@ find_endpos(idx, startpos, m_endpos, hl_endpos, flagsp, end_endpos,
 
            regmatch.rmm_ic = spp->sp_ic;
            regmatch.regprog = spp->sp_prog;
-           if (syn_regexec(&regmatch, startpos->lnum, lc_col))
+           if (syn_regexec(&regmatch, startpos->lnum, lc_col,
+                                                 IF_SYN_TIME(&spp->sp_time)))
            {
                if (best_idx == -1 || regmatch.startpos[0].col
                                              < best_regmatch.startpos[0].col)
@@ -2966,7 +3005,8 @@ find_endpos(idx, startpos, m_endpos, hl_endpos, flagsp, end_endpos,
                lc_col = 0;
            regmatch.rmm_ic = spp_skip->sp_ic;
            regmatch.regprog = spp_skip->sp_prog;
-           if (syn_regexec(&regmatch, startpos->lnum, lc_col)
+           if (syn_regexec(&regmatch, startpos->lnum, lc_col,
+                                             IF_SYN_TIME(&spp_skip->sp_time))
                    && regmatch.startpos[0].col
                                             <= best_regmatch.startpos[0].col)
            {
@@ -3214,13 +3254,37 @@ syn_getcurline()
  * Returns TRUE when there is a match.
  */
     static int
-syn_regexec(rmp, lnum, col)
+syn_regexec(rmp, lnum, col, st)
     regmmatch_T        *rmp;
     linenr_T   lnum;
     colnr_T    col;
+    syn_time_T  *st UNUSED;
 {
+    int r;
+#ifdef FEAT_PROFILE
+    proftime_T pt;
+
+    if (syn_time_on)
+       profile_start(&pt);
+#endif
+
     rmp->rmm_maxcol = syn_buf->b_p_smc;
-    if (vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, NULL) > 0)
+    r = vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, NULL);
+
+#ifdef FEAT_PROFILE
+    if (syn_time_on)
+    {
+       profile_end(&pt);
+       profile_add(&st->total, &pt);
+       if (profile_cmp(&pt, &st->slowest) < 0)
+           st->slowest = pt;
+       ++st->count;
+       if (r > 0)
+           ++st->match;
+    }
+#endif
+
+    if (r > 0)
     {
        rmp->startpos[0].lnum += lnum;
        rmp->endpos[0].lnum += lnum;
@@ -3265,7 +3329,7 @@ check_keyword_id(line, startcol, endcolp, flagsp, next_listp, cur_si, ccharp)
 #endif
            ++kwlen;
     }
-    while (vim_iswordc_buf(kwp + kwlen, syn_buf));
+    while (vim_iswordp_buf(kwp + kwlen, syn_buf));
 
     if (kwlen > MAXKEYWLEN)
        return 0;
@@ -3431,7 +3495,7 @@ syntax_clear(block)
     block->b_syn_sync_maxlines = 0;
     block->b_syn_sync_linebreaks = 0;
 
-    vim_free(block->b_syn_linecont_prog);
+    vim_regfree(block->b_syn_linecont_prog);
     block->b_syn_linecont_prog = NULL;
     vim_free(block->b_syn_linecont_pat);
     block->b_syn_linecont_pat = NULL;
@@ -3442,6 +3506,9 @@ syntax_clear(block)
     /* free the stored states */
     syn_stack_free_all(block);
     invalidate_current_state();
+
+    /* Reset the counter for ":syn include" */
+    running_syn_inc_tag = 0;
 }
 
 /*
@@ -3477,7 +3544,7 @@ syntax_sync_clear()
     curwin->w_s->b_syn_sync_maxlines = 0;
     curwin->w_s->b_syn_sync_linebreaks = 0;
 
-    vim_free(curwin->w_s->b_syn_linecont_prog);
+    vim_regfree(curwin->w_s->b_syn_linecont_prog);
     curwin->w_s->b_syn_linecont_prog = NULL;
     vim_free(curwin->w_s->b_syn_linecont_pat);
     curwin->w_s->b_syn_linecont_pat = NULL;
@@ -3516,7 +3583,7 @@ syn_clear_pattern(block, i)
     int                i;
 {
     vim_free(SYN_ITEMS(block)[i].sp_pattern);
-    vim_free(SYN_ITEMS(block)[i].sp_prog);
+    vim_regfree(SYN_ITEMS(block)[i].sp_prog);
     /* Only free sp_cont_list and sp_next_list of first start pattern */
     if (i == 0 || SYN_ITEMS(block)[i - 1].sp_type != SPTYPE_START)
     {
@@ -3751,7 +3818,7 @@ syn_cmd_list(eap, syncing)
 
     if (!syntax_present(curwin))
     {
-       MSG(_("No Syntax items defined for this buffer"));
+       MSG(_(msg_no_items));
        return;
     }
 
@@ -3988,17 +4055,17 @@ syn_list_one(id, syncing, link_only)
 }
 
     static void
-syn_list_flags(nl, flags, attr)
-    struct name_list   *nl;
+syn_list_flags(nlist, flags, attr)
+    struct name_list   *nlist;
     int                        flags;
     int                        attr;
 {
     int                i;
 
-    for (i = 0; nl[i].flag != 0; ++i)
-       if (flags & nl[i].flag)
+    for (i = 0; nlist[i].flag != 0; ++i)
+       if (flags & nlist[i].flag)
        {
-           msg_puts_attr((char_u *)nl[i].name, attr);
+           msg_puts_attr((char_u *)nlist[i].name, attr);
            msg_putchar(' ');
        }
 }
@@ -4537,6 +4604,13 @@ get_syn_options(arg, opt, conceal_char)
                ;
 #endif
            }
+#ifdef FEAT_CONCEAL
+           if (!vim_isprintc_strict(*conceal_char))
+           {
+               EMSG(_("E844: invalid cchar value"));
+               return NULL;
+           }
+#endif
            arg = skipwhite(arg + 7);
        }
        else
@@ -4654,6 +4728,8 @@ syn_cmd_include(eap, syncing)
            return;
        }
        sgl_id = syn_check_cluster(arg, (int)(group_name_end - arg));
+       if (sgl_id == 0)
+           return;
        /* separate_nextcmd() and expand_filename() depend on this */
        eap->arg = rest;
     }
@@ -4682,6 +4758,11 @@ syn_cmd_include(eap, syncing)
      * Save and restore the existing top-level grouplist id and ":syn
      * include" tag around the actual inclusion.
      */
+    if (running_syn_inc_tag >= MAX_SYN_INC_TAG)
+    {
+       EMSG((char_u *)_("E847: Too many syntax includes"));
+       return;
+    }
     prev_syn_inc_tag = current_syn_inc_tag;
     current_syn_inc_tag = ++running_syn_inc_tag;
     prev_toplvl_grp = curwin->w_s->b_syn_topgrp;
@@ -4705,7 +4786,7 @@ syn_cmd_keyword(eap, syncing)
     char_u     *group_name_end;
     int                syn_id;
     char_u     *rest;
-    char_u     *keyword_copy;
+    char_u     *keyword_copy = NULL;
     char_u     *p;
     char_u     *kw;
     syn_opt_arg_T syn_opt_arg;
@@ -4717,9 +4798,9 @@ syn_cmd_keyword(eap, syncing)
     if (rest != NULL)
     {
        syn_id = syn_check_group(arg, (int)(group_name_end - arg));
-
-       /* allocate a buffer, for removing the backslashes in the keyword */
-       keyword_copy = alloc((unsigned)STRLEN(rest) + 1);
+       if (syn_id != 0)
+           /* allocate a buffer, for removing backslashes in the keyword */
+           keyword_copy = alloc((unsigned)STRLEN(rest) + 1);
        if (keyword_copy != NULL)
        {
            syn_opt_arg.flags = 0;
@@ -4910,7 +4991,7 @@ syn_cmd_match(eap, syncing)
     /*
      * Something failed, free the allocated memory.
      */
-    vim_free(item.sp_prog);
+    vim_regfree(item.sp_prog);
     vim_free(item.sp_pattern);
     vim_free(syn_opt_arg.cont_list);
     vim_free(syn_opt_arg.cont_in_list);
@@ -5126,7 +5207,8 @@ syn_cmd_region(eap, syncing)
                            (item == ITEM_SKIP) ? SPTYPE_SKIP : SPTYPE_END;
                    SYN_ITEMS(curwin->w_s)[idx].sp_flags |= syn_opt_arg.flags;
                    SYN_ITEMS(curwin->w_s)[idx].sp_syn.id = syn_id;
-                   SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag = current_syn_inc_tag;
+                   SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag =
+                                                         current_syn_inc_tag;
                    SYN_ITEMS(curwin->w_s)[idx].sp_syn_match_id =
                                                        ppp->pp_matchgroup_id;
 #ifdef FEAT_CONCEAL
@@ -5166,7 +5248,7 @@ syn_cmd_region(eap, syncing)
        {
            if (!success)
            {
-               vim_free(ppp->pp_synp->sp_prog);
+               vim_regfree(ppp->pp_synp->sp_prog);
                vim_free(ppp->pp_synp->sp_pattern);
            }
            vim_free(ppp->pp_synp);
@@ -5419,6 +5501,14 @@ syn_add_cluster(name)
        curwin->w_s->b_syn_clusters.ga_growsize = 10;
     }
 
+    len = curwin->w_s->b_syn_clusters.ga_len;
+    if (len >= MAX_CLUSTER_ID)
+    {
+       EMSG((char_u *)_("E848: Too many syntax clusters"));
+       vim_free(name);
+       return 0;
+    }
+
     /*
      * Make room for at least one other cluster entry.
      */
@@ -5427,7 +5517,6 @@ syn_add_cluster(name)
        vim_free(name);
        return 0;
     }
-    len = curwin->w_s->b_syn_clusters.ga_len;
 
     vim_memset(&(SYN_CLSTR(curwin->w_s)[len]), 0, sizeof(syn_cluster_T));
     SYN_CLSTR(curwin->w_s)[len].scl_name = name;
@@ -5469,8 +5558,10 @@ syn_cmd_cluster(eap, syncing)
 
     if (rest != NULL)
     {
-       scl_id = syn_check_cluster(arg, (int)(group_name_end - arg))
-                                                             - SYNID_CLUSTER;
+       scl_id = syn_check_cluster(arg, (int)(group_name_end - arg));
+       if (scl_id == 0)
+           return;
+       scl_id -= SYNID_CLUSTER;
 
        for (;;)
        {
@@ -5509,7 +5600,7 @@ syn_cmd_cluster(eap, syncing)
        if (got_clstr)
        {
            redraw_curbuf_later(SOME_VALID);
-           syn_stack_free_all(curwin->w_s);    /* Need to recompute all syntax. */
+           syn_stack_free_all(curwin->w_s);    /* Need to recompute all. */
        }
     }
 
@@ -5567,6 +5658,9 @@ get_syn_pattern(arg, ci)
     if (ci->sp_prog == NULL)
        return NULL;
     ci->sp_ic = curwin->w_s->b_syn_ic;
+#ifdef FEAT_PROFILE
+    syn_clear_time(&ci->sp_time);
+#endif
 
     /*
      * Check for a match, highlight or region offset.
@@ -5741,8 +5835,11 @@ syn_cmd_sync(eap, syncing)
                cpo_save = p_cpo;
                p_cpo = (char_u *)"";
                curwin->w_s->b_syn_linecont_prog =
-                           vim_regcomp(curwin->w_s->b_syn_linecont_pat, RE_MAGIC);
+                      vim_regcomp(curwin->w_s->b_syn_linecont_pat, RE_MAGIC);
                p_cpo = cpo_save;
+#ifdef FEAT_PROFILE
+               syn_clear_time(&curwin->w_s->b_syn_linecont_time);
+#endif
 
                if (curwin->w_s->b_syn_linecont_prog == NULL)
                {
@@ -5925,7 +6022,7 @@ get_id_list(arg, keylen, list)
                            id = -1;        /* remember that we found one */
                        }
                    }
-                   vim_free(regmatch.regprog);
+                   vim_regfree(regmatch.regprog);
                }
            }
            vim_free(name);
@@ -6027,7 +6124,7 @@ in_id_list(cur_si, list, ssp, contained)
     static int depth = 0;
     int                r;
 
-    /* If spp has a "containedin" list and "cur_si" is in it, return TRUE. */
+    /* If ssp has a "containedin" list and "cur_si" is in it, return TRUE. */
     if (cur_si != NULL && ssp->cont_in_list != NULL
                                            && !(cur_si->si_flags & HL_MATCH))
     {
@@ -6198,7 +6295,7 @@ ex_ownsyntax(eap)
        curwin->w_p_spell = FALSE;      /* No spell checking */
        clear_string_option(&curwin->w_s->b_p_spc);
        clear_string_option(&curwin->w_s->b_p_spf);
-       vim_free(curwin->w_s->b_cap_prog);
+       vim_regfree(curwin->w_s->b_cap_prog);
        curwin->w_s->b_cap_prog = NULL;
        clear_string_option(&curwin->w_s->b_p_spl);
 #endif
@@ -6429,8 +6526,205 @@ syn_get_foldlevel(wp, lnum)
 }
 #endif
 
-#endif /* FEAT_SYN_HL */
+#ifdef FEAT_PROFILE
+/*
+ * ":syntime".
+ */
+    void
+ex_syntime(eap)
+    exarg_T    *eap;
+{
+    if (STRCMP(eap->arg, "on") == 0)
+       syn_time_on = TRUE;
+    else if (STRCMP(eap->arg, "off") == 0)
+       syn_time_on = FALSE;
+    else if (STRCMP(eap->arg, "clear") == 0)
+       syntime_clear();
+    else if (STRCMP(eap->arg, "report") == 0)
+       syntime_report();
+    else
+       EMSG2(_(e_invarg2), eap->arg);
+}
+
+    static void
+syn_clear_time(st)
+    syn_time_T *st;
+{
+    profile_zero(&st->total);
+    profile_zero(&st->slowest);
+    st->count = 0;
+    st->match = 0;
+}
 
+/*
+ * Clear the syntax timing for the current buffer.
+ */
+    static void
+syntime_clear()
+{
+    int                idx;
+    synpat_T   *spp;
+
+    if (!syntax_present(curwin))
+    {
+       MSG(_(msg_no_items));
+       return;
+    }
+    for (idx = 0; idx < curwin->w_s->b_syn_patterns.ga_len; ++idx)
+    {
+       spp = &(SYN_ITEMS(curwin->w_s)[idx]);
+       syn_clear_time(&spp->sp_time);
+    }
+}
+
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+/*
+ * Function given to ExpandGeneric() to obtain the possible arguments of the
+ * ":syntime {on,off,clear,report}" command.
+ */
+    char_u *
+get_syntime_arg(xp, idx)
+    expand_T   *xp UNUSED;
+    int                idx;
+{
+    switch (idx)
+    {
+       case 0: return (char_u *)"on";
+       case 1: return (char_u *)"off";
+       case 2: return (char_u *)"clear";
+       case 3: return (char_u *)"report";
+    }
+    return NULL;
+}
+#endif
+
+typedef struct
+{
+    proftime_T total;
+    int                count;
+    int                match;
+    proftime_T slowest;
+    proftime_T average;
+    int                id;
+    char_u     *pattern;
+} time_entry_T;
+
+    static int
+#ifdef __BORLANDC__
+_RTLENTRYF
+#endif
+syn_compare_syntime(v1, v2)
+    const void *v1;
+    const void *v2;
+{
+    const time_entry_T *s1 = v1;
+    const time_entry_T *s2 = v2;
+
+    return profile_cmp(&s1->total, &s2->total);
+}
+
+/*
+ * Clear the syntax timing for the current buffer.
+ */
+    static void
+syntime_report()
+{
+    int                idx;
+    synpat_T   *spp;
+# ifdef FEAT_FLOAT
+    proftime_T tm;
+# endif
+    int                len;
+    proftime_T total_total;
+    int                total_count = 0;
+    garray_T    ga;
+    time_entry_T *p;
+
+    if (!syntax_present(curwin))
+    {
+       MSG(_(msg_no_items));
+       return;
+    }
+
+    ga_init2(&ga, sizeof(time_entry_T), 50);
+    profile_zero(&total_total);
+    for (idx = 0; idx < curwin->w_s->b_syn_patterns.ga_len; ++idx)
+    {
+       spp = &(SYN_ITEMS(curwin->w_s)[idx]);
+       if (spp->sp_time.count > 0)
+       {
+           ga_grow(&ga, 1);
+           p = ((time_entry_T *)ga.ga_data) + ga.ga_len;
+           p->total = spp->sp_time.total;
+           profile_add(&total_total, &spp->sp_time.total);
+           p->count = spp->sp_time.count;
+           p->match = spp->sp_time.match;
+           total_count += spp->sp_time.count;
+           p->slowest = spp->sp_time.slowest;
+# ifdef FEAT_FLOAT
+           profile_divide(&spp->sp_time.total, spp->sp_time.count, &tm);
+           p->average = tm;
+# endif
+           p->id = spp->sp_syn.id;
+           p->pattern = spp->sp_pattern;
+           ++ga.ga_len;
+       }
+    }
+
+    /* sort on total time */
+    qsort(ga.ga_data, (size_t)ga.ga_len, sizeof(time_entry_T),
+                                                        syn_compare_syntime);
+
+    MSG_PUTS_TITLE(_("  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"));
+    MSG_PUTS("\n");
+    for (idx = 0; idx < ga.ga_len && !got_int; ++idx)
+    {
+       spp = &(SYN_ITEMS(curwin->w_s)[idx]);
+       p = ((time_entry_T *)ga.ga_data) + idx;
+
+       MSG_PUTS(profile_msg(&p->total));
+       MSG_PUTS(" "); /* make sure there is always a separating space */
+       msg_advance(13);
+       msg_outnum(p->count);
+       MSG_PUTS(" ");
+       msg_advance(20);
+       msg_outnum(p->match);
+       MSG_PUTS(" ");
+       msg_advance(26);
+       MSG_PUTS(profile_msg(&p->slowest));
+       MSG_PUTS(" ");
+       msg_advance(38);
+# ifdef FEAT_FLOAT
+       MSG_PUTS(profile_msg(&p->average));
+       MSG_PUTS(" ");
+# endif
+       msg_advance(50);
+       msg_outtrans(HL_TABLE()[p->id - 1].sg_name);
+       MSG_PUTS(" ");
+
+       msg_advance(69);
+       if (Columns < 80)
+           len = 20; /* will wrap anyway */
+       else
+           len = Columns - 70;
+       if (len > (int)STRLEN(p->pattern))
+           len = (int)STRLEN(p->pattern);
+       msg_outtrans_len(p->pattern, len);
+       MSG_PUTS("\n");
+    }
+    ga_clear(&ga);
+    if (!got_int)
+    {
+       MSG_PUTS("\n");
+       MSG_PUTS(profile_msg(&total_total));
+       msg_advance(13);
+       msg_outnum(total_count);
+       MSG_PUTS("\n");
+    }
+}
+#endif
+
+#endif /* FEAT_SYN_HL */
 
 /**************************************
  *  Highlighting stuff               *
@@ -6475,8 +6769,6 @@ static char *(highlight_init_both[]) =
             "DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red"),
 #endif
 #ifdef FEAT_INS_EXPAND
-       CENT("PmenuThumb cterm=reverse",
-            "PmenuThumb cterm=reverse gui=reverse"),
        CENT("PmenuSbar ctermbg=Grey",
             "PmenuSbar ctermbg=Grey guibg=Grey"),
 #endif
@@ -6499,6 +6791,8 @@ static char *(highlight_init_light[]) =
             "Directory term=bold ctermfg=DarkBlue guifg=Blue"),
        CENT("LineNr term=underline ctermfg=Brown",
             "LineNr term=underline ctermfg=Brown guifg=Brown"),
+       CENT("CursorLineNr term=bold ctermfg=Brown",
+            "CursorLineNr term=bold ctermfg=Brown gui=bold guifg=Brown"),
        CENT("MoreMsg term=bold ctermfg=DarkGreen",
             "MoreMsg term=bold ctermfg=DarkGreen gui=bold guifg=SeaGreen"),
        CENT("Question term=standout ctermfg=DarkGreen",
@@ -6516,10 +6810,12 @@ static char *(highlight_init_light[]) =
             "SpellLocal term=underline ctermbg=Cyan guisp=DarkCyan gui=undercurl"),
 #endif
 #ifdef FEAT_INS_EXPAND
-       CENT("Pmenu ctermbg=LightMagenta",
-            "Pmenu ctermbg=LightMagenta guibg=LightMagenta"),
-       CENT("PmenuSel ctermbg=LightGrey",
-            "PmenuSel ctermbg=LightGrey guibg=Grey"),
+       CENT("PmenuThumb ctermbg=Black",
+            "PmenuThumb ctermbg=Black guibg=Black"),
+       CENT("Pmenu ctermbg=LightMagenta ctermfg=Black",
+            "Pmenu ctermbg=LightMagenta ctermfg=Black guibg=LightMagenta"),
+       CENT("PmenuSel ctermbg=LightGrey ctermfg=Black",
+            "PmenuSel ctermbg=LightGrey ctermfg=Black guibg=Grey"),
 #endif
        CENT("SpecialKey term=bold ctermfg=DarkBlue",
             "SpecialKey term=bold ctermfg=DarkBlue guifg=Blue"),
@@ -6585,6 +6881,8 @@ static char *(highlight_init_dark[]) =
             "Directory term=bold ctermfg=LightCyan guifg=Cyan"),
        CENT("LineNr term=underline ctermfg=Yellow",
             "LineNr term=underline ctermfg=Yellow guifg=Yellow"),
+       CENT("CursorLineNr term=bold ctermfg=Yellow",
+            "CursorLineNr term=bold ctermfg=Yellow gui=bold guifg=Yellow"),
        CENT("MoreMsg term=bold ctermfg=LightGreen",
             "MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen"),
        CENT("Question term=standout ctermfg=LightGreen",
@@ -6604,10 +6902,12 @@ static char *(highlight_init_dark[]) =
             "SpellLocal term=underline ctermbg=Cyan guisp=Cyan gui=undercurl"),
 #endif
 #ifdef FEAT_INS_EXPAND
-       CENT("Pmenu ctermbg=Magenta",
-            "Pmenu ctermbg=Magenta guibg=Magenta"),
-       CENT("PmenuSel ctermbg=DarkGrey",
-            "PmenuSel ctermbg=DarkGrey guibg=DarkGrey"),
+       CENT("PmenuThumb ctermbg=White",
+            "PmenuThumb ctermbg=White guibg=White"),
+       CENT("Pmenu ctermbg=Magenta ctermfg=Black",
+            "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
+       CENT("PmenuSel ctermbg=Black ctermfg=DarkGrey",
+            "PmenuSel ctermbg=Black ctermfg=DarkGrey guibg=DarkGrey"),
 #endif
        CENT("Title term=bold ctermfg=LightMagenta",
             "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
@@ -7212,14 +7512,13 @@ do_highlight(line, forceit, init)
                HL_TABLE()[idx].sg_fontset = NOFONTSET;
 # endif
                hl_do_font(idx, arg, is_normal_group, is_menu_group,
-                                                           is_tooltip_group);
+                                                    is_tooltip_group, FALSE);
 
 # ifdef FEAT_XFONTSET
                if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
                {
-                   /* New fontset was accepted. Free the old one, if there was
-                    * one.
-                    */
+                   /* New fontset was accepted. Free the old one, if there
+                    * was one. */
                    gui_mch_free_fontset(temp_sg_fontset);
                    vim_free(HL_TABLE()[idx].sg_font_name);
                    HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
@@ -7230,8 +7529,7 @@ do_highlight(line, forceit, init)
                if (HL_TABLE()[idx].sg_font != NOFONT)
                {
                    /* New font was accepted. Free the old one, if there was
-                    * one.
-                    */
+                    * one. */
                    gui_mch_free_font(temp_sg_font);
                    vim_free(HL_TABLE()[idx].sg_font_name);
                    HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
@@ -7600,10 +7898,10 @@ do_highlight(line, forceit, init)
                /*
                 * Copy characters from arg[] to buf[], translating <> codes.
                 */
-               for (p = arg, off = 0; off < 100 && *p; )
+               for (p = arg, off = 0; off < 100 - 6 && *p; )
                {
                    len = trans_special(&p, buf + off, FALSE);
-                   if (len)                /* recognized special char */
+                   if (len > 0)            /* recognized special char */
                        off += len;
                    else                    /* copy as normal char */
                        buf[off++] = *p++;
@@ -8017,12 +8315,13 @@ fontset_name2handle(name, fixed_width)
  * Get the font or fontset for one highlight group.
  */
     static void
-hl_do_font(idx, arg, do_normal, do_menu, do_tooltip)
+hl_do_font(idx, arg, do_normal, do_menu, do_tooltip, free_font)
     int                idx;
     char_u     *arg;
     int                do_normal;              /* set normal font */
     int                do_menu UNUSED;         /* set menu font */
     int                do_tooltip UNUSED;      /* set tooltip font */
+    int                free_font;              /* free current font/fontset */
 {
 # ifdef FEAT_XFONTSET
     /* If 'guifontset' is not empty, first try using the name as a
@@ -8036,6 +8335,9 @@ hl_do_font(idx, arg, do_normal, do_menu, do_tooltip)
        || do_tooltip
 #  endif
            )
+    {
+       if (free_font)
+           gui_mch_free_fontset(HL_TABLE()[idx].sg_fontset);
        HL_TABLE()[idx].sg_fontset = fontset_name2handle(arg, 0
 #  ifdef FONTSET_ALWAYS
                || do_menu
@@ -8044,10 +8346,11 @@ hl_do_font(idx, arg, do_normal, do_menu, do_tooltip)
                || do_tooltip
 #  endif
                );
+    }
     if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
     {
-       /* If it worked and it's the Normal group, use it as the
-        * normal fontset.  Same for the Menu group. */
+       /* If it worked and it's the Normal group, use it as the normal
+        * fontset.  Same for the Menu group. */
        if (do_normal)
            gui_init_font(arg, TRUE);
 #   if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && defined(FEAT_MENU)
@@ -8079,6 +8382,8 @@ hl_do_font(idx, arg, do_normal, do_menu, do_tooltip)
     else
 # endif
     {
+       if (free_font)
+           gui_mch_free_font(HL_TABLE()[idx].sg_font);
        HL_TABLE()[idx].sg_font = font_name2handle(arg);
        /* If it worked and it's the Normal group, use it as the
         * normal font.  Same for the Menu group. */
@@ -8545,8 +8850,8 @@ highlight_list_arg(id, didh, type, iarg, sarg, name)
                if (iarg & hl_attr_table[i])
                {
                    if (buf[0] != NUL)
-                       STRCAT(buf, ",");
-                   STRCAT(buf, hl_name_table[i]);
+                       vim_strcat(buf, (char_u *)",", 100);
+                   vim_strcat(buf, (char_u *)hl_name_table[i], 100);
                    iarg &= ~hl_attr_table[i];      /* don't want "inverse" */
                }
            }
@@ -8965,6 +9270,13 @@ syn_add_group(name)
        highlight_ga.ga_growsize = 10;
     }
 
+    if (highlight_ga.ga_len >= MAX_HL_ID)
+    {
+       EMSG(_("E849: Too many highlight and syntax groups"));
+       vim_free(name);
+       return 0;
+    }
+
     /*
      * Make room for at least one other syntax_highlight entry.
      */
@@ -9108,7 +9420,7 @@ gui_do_one_color(idx, do_menu, do_tooltip)
     if (HL_TABLE()[idx].sg_font_name != NULL)
     {
        hl_do_font(idx, HL_TABLE()[idx].sg_font_name, FALSE, do_menu,
-                  do_tooltip);
+                                                           do_tooltip, TRUE);
        didit = TRUE;
     }
     if (HL_TABLE()[idx].sg_gui_fg_name != NULL)
@@ -9422,7 +9734,7 @@ highlight_list_two(cnt, attr)
     int            cnt;
     int            attr;
 {
-    msg_puts_attr((char_u *)("N \bI \b!  \b" + cnt / 11), attr);
+    msg_puts_attr((char_u *)&("N \bI \b!  \b"[cnt / 11]), attr);
     msg_clr_eos();
     out_flush();
     ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
index fdd8dec..8a3c81c 100644 (file)
--- a/src/tag.c
+++ b/src/tag.c
  * Code to handle tags and the tag stack
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"    /* for lseek(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 /*
@@ -208,7 +204,7 @@ do_tag(tag, type, count, forceit, verbose)
     else
     {
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-       if (g_do_tagpreview)
+       if (g_do_tagpreview != 0)
            use_tagstack = FALSE;
        else
 #endif
@@ -226,7 +222,7 @@ do_tag(tag, type, count, forceit, verbose)
                    ))
        {
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-           if (g_do_tagpreview)
+           if (g_do_tagpreview != 0)
            {
                if (ptag_entry.tagname != NULL
                        && STRCMP(ptag_entry.tagname, tag) == 0)
@@ -282,7 +278,7 @@ do_tag(tag, type, count, forceit, verbose)
        {
            if (
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-                   g_do_tagpreview ? ptag_entry.tagname == NULL :
+                   g_do_tagpreview != 0 ? ptag_entry.tagname == NULL :
 #endif
                    tagstacklen == 0)
            {
@@ -365,7 +361,7 @@ do_tag(tag, type, count, forceit, verbose)
               )
            {
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-               if (g_do_tagpreview)
+               if (g_do_tagpreview != 0)
                {
                    cur_match = ptag_entry.cur_match;
                    cur_fnum = ptag_entry.cur_fnum;
@@ -403,7 +399,7 @@ do_tag(tag, type, count, forceit, verbose)
                prevtagstackidx = tagstackidx;
 
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-               if (g_do_tagpreview)
+               if (g_do_tagpreview != 0)
                {
                    cur_match = ptag_entry.cur_match;
                    cur_fnum = ptag_entry.cur_fnum;
@@ -441,7 +437,7 @@ do_tag(tag, type, count, forceit, verbose)
        }
 
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-       if (g_do_tagpreview)
+       if (g_do_tagpreview != 0)
        {
            if (type != DT_SELECT && type != DT_JUMP)
            {
@@ -496,7 +492,7 @@ do_tag(tag, type, count, forceit, verbose)
        if (use_tagstack)
            name = tagstack[tagstackidx].tagname;
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-       else if (g_do_tagpreview)
+       else if (g_do_tagpreview != 0)
            name = ptag_entry.tagname;
 #endif
        else
@@ -624,7 +620,7 @@ do_tag(tag, type, count, forceit, verbose)
                    parse_match(matches[i], &tagp);
                    if (!new_tag && (
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-                               (g_do_tagpreview
+                               (g_do_tagpreview != 0
                                 && i == ptag_entry.cur_match) ||
 #endif
                                (use_tagstack
@@ -779,17 +775,25 @@ do_tag(tag, type, count, forceit, verbose)
            {
                list_T  *list;
                char_u  tag_name[128 + 1];
-               char_u  fname[MAXPATHL + 1];
-               char_u  cmd[CMDBUFFSIZE + 1];
+               char_u  *fname;
+               char_u  *cmd;
 
                /*
                 * Add the matching tags to the location list for the current
                 * window.
                 */
 
+               fname = alloc(MAXPATHL + 1);
+               cmd = alloc(CMDBUFFSIZE + 1);
                list = list_alloc();
-               if (list == NULL)
+               if (list == NULL || fname == NULL || cmd == NULL)
+               {
+                   vim_free(cmd);
+                   vim_free(fname);
+                   if (list != NULL)
+                       list_free(list, TRUE);
                    goto end_do_tag;
+               }
 
                for (i = 0; i < num_matches; ++i)
                {
@@ -810,7 +814,7 @@ do_tag(tag, type, count, forceit, verbose)
                    p = tag_full_fname(&tagp);
                    if (p == NULL)
                        continue;
-                   STRCPY(fname, p);
+                   vim_strncpy(fname, p, MAXPATHL);
                    vim_free(p);
 
                    /*
@@ -915,6 +919,8 @@ do_tag(tag, type, count, forceit, verbose)
                set_errorlist(curwin, list, ' ', IObuff);
 
                list_free(list, TRUE);
+               vim_free(fname);
+               vim_free(cmd);
 
                cur_match = 0;          /* Jump to the first tag */
            }
@@ -966,7 +972,7 @@ do_tag(tag, type, count, forceit, verbose)
                ++tagstackidx;
            }
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-           else if (g_do_tagpreview)
+           else if (g_do_tagpreview != 0)
            {
                ptag_entry.cur_match = cur_match;
                ptag_entry.cur_fnum = cur_fnum;
@@ -1271,6 +1277,7 @@ find_tags(pat, num_matches, matchesp, flags, mincount, buf_ffname)
 {
     FILE       *fp;
     char_u     *lbuf;                  /* line buffer */
+    int                lbuf_size = LSIZE;      /* length of lbuf */
     char_u     *tag_fname;             /* name of tag file */
     tagname_T  tn;                     /* info for get_tagfname() */
     int                first_file;             /* trying first tag file */
@@ -1285,6 +1292,7 @@ find_tags(pat, num_matches, matchesp, flags, mincount, buf_ffname)
     char_u     *s;
     int                i;
 #ifdef FEAT_TAG_BINS
+    int                tag_file_sorted = NUL;  /* !_TAG_FILE_SORTED value */
     struct tag_search_info     /* Binary search file offsets */
     {
        off_t   low_offset;     /* offset for first char of first line that
@@ -1345,7 +1353,6 @@ find_tags(pat, num_matches, matchesp, flags, mincount, buf_ffname)
     int                match_count = 0;                /* number of matches found */
     char_u     **matches;
     int                mtt;
-    int                len;
     int                help_save;
 #ifdef FEAT_MULTI_LANG
     int                help_pri = 0;
@@ -1354,13 +1361,8 @@ find_tags(pat, num_matches, matchesp, flags, mincount, buf_ffname)
     char_u     *saved_pat = NULL;              /* copy of pat[] */
 #endif
 
-    /* Use two sets of variables for the pattern: "orgpat" holds the values
-     * for the original pattern and "convpat" converted from 'encoding' to
-     * encoding of the tags file.  "pats" point to either one of these. */
-    pat_T      *pats;
     pat_T      orgpat;                 /* holds unconverted pattern info */
 #ifdef FEAT_MBYTE
-    pat_T      convpat;                /* holds converted pattern info */
     vimconv_T  vimconv;
 #endif
 
@@ -1384,7 +1386,6 @@ find_tags(pat, num_matches, matchesp, flags, mincount, buf_ffname)
 
     help_save = curbuf->b_help;
     orgpat.pat = pat;
-    pats = &orgpat;
 #ifdef FEAT_MBYTE
     vimconv.vc_type = CONV_NONE;
 #endif
@@ -1392,7 +1393,7 @@ find_tags(pat, num_matches, matchesp, flags, mincount, buf_ffname)
 /*
  * Allocate memory for the buffers that are used
  */
-    lbuf = alloc(LSIZE);
+    lbuf = alloc(lbuf_size);
     tag_fname = alloc(MAXPATHL + 1);
 #ifdef FEAT_EMACS_TAGS
     ebuf = alloc(LSIZE);
@@ -1418,30 +1419,32 @@ find_tags(pat, num_matches, matchesp, flags, mincount, buf_ffname)
     if (help_only)                             /* want tags from help file */
        curbuf->b_help = TRUE;                  /* will be restored later */
 
-    pats->len = (int)STRLEN(pat);
+    orgpat.len = (int)STRLEN(pat);
 #ifdef FEAT_MULTI_LANG
     if (curbuf->b_help)
     {
        /* When "@ab" is specified use only the "ab" language, otherwise
         * search all languages. */
-       if (pats->len > 3 && pat[pats->len - 3] == '@'
-                                         && ASCII_ISALPHA(pat[pats->len - 2])
-                                        && ASCII_ISALPHA(pat[pats->len - 1]))
+       if (orgpat.len > 3 && pat[orgpat.len - 3] == '@'
+                                         && ASCII_ISALPHA(pat[orgpat.len - 2])
+                                        && ASCII_ISALPHA(pat[orgpat.len - 1]))
        {
-           saved_pat = vim_strnsave(pat, pats->len - 3);
+           saved_pat = vim_strnsave(pat, orgpat.len - 3);
            if (saved_pat != NULL)
            {
-               help_lang_find = &pat[pats->len - 2];
-               pats->pat = saved_pat;
-               pats->len -= 3;
+               help_lang_find = &pat[orgpat.len - 2];
+               orgpat.pat = saved_pat;
+               orgpat.len -= 3;
            }
        }
     }
 #endif
-    if (p_tl != 0 && pats->len > p_tl)         /* adjust for 'taglength' */
-       pats->len = p_tl;
+    if (p_tl != 0 && orgpat.len > p_tl)                /* adjust for 'taglength' */
+       orgpat.len = p_tl;
 
-    prepare_pats(pats, has_re);
+    prepare_pats(&orgpat, has_re);
+    if (has_re && orgpat.regmatch.regprog == NULL)
+       goto findtag_end;
 
 #ifdef FEAT_TAG_BINS
     /* This is only to avoid a compiler warning for using search_info
@@ -1460,13 +1463,13 @@ find_tags(pat, num_matches, matchesp, flags, mincount, buf_ffname)
      * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
      */
 #ifdef FEAT_TAG_BINS
-    pats->regmatch.rm_ic = ((p_ic || !noic)
-                               && (findall || pats->headlen == 0 || !p_tbs));
+    orgpat.regmatch.rm_ic = ((p_ic || !noic)
+                               && (findall || orgpat.headlen == 0 || !p_tbs));
     for (round = 1; round <= 2; ++round)
     {
-      linear = (pats->headlen == 0 || !p_tbs || round == 2);
+      linear = (orgpat.headlen == 0 || !p_tbs || round == 2);
 #else
-      pats->regmatch.rm_ic = (p_ic || !noic);
+      orgpat.regmatch.rm_ic = (p_ic || !noic);
 #endif
 
       /*
@@ -1695,6 +1698,36 @@ find_tags(pat, num_matches, matchesp, flags, mincount, buf_ffname)
            }
 line_read_in:
 
+#ifdef FEAT_MBYTE
+           if (vimconv.vc_type != CONV_NONE)
+           {
+               char_u  *conv_line;
+               int     len;
+
+               /* Convert every line.  Converting the pattern from 'enc' to
+                * the tags file encoding doesn't work, because characters are
+                * not recognized. */
+               conv_line = string_convert(&vimconv, lbuf, NULL);
+               if (conv_line != NULL)
+               {
+                   /* Copy or swap lbuf and conv_line. */
+                   len = (int)STRLEN(conv_line) + 1;
+                   if (len > lbuf_size)
+                   {
+                       vim_free(lbuf);
+                       lbuf = conv_line;
+                       lbuf_size = len;
+                   }
+                   else
+                   {
+                       STRCPY(lbuf, conv_line);
+                       vim_free(conv_line);
+                   }
+               }
+           }
+#endif
+
+
 #ifdef FEAT_EMACS_TAGS
            /*
             * Emacs tags line with CTRL-L: New file name on next line.
@@ -1764,6 +1797,38 @@ line_read_in:
             */
            if (state == TS_START)
            {
+               /* The header ends when the line sorts below "!_TAG_".
+                * There may be non-header items before the header though,
+                * e.g. "!" itself. When case is folded lower case letters
+                * sort before "_". */
+               if (STRNCMP(lbuf, "!_TAG_", 6) <= 0
+                               || (lbuf[0] == '!' && ASCII_ISLOWER(lbuf[1])))
+               {
+                   /*
+                    * Read header line.
+                    */
+#ifdef FEAT_TAG_BINS
+                   if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
+                       tag_file_sorted = lbuf[18];
+#endif
+#ifdef FEAT_MBYTE
+                   if (STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
+                   {
+                       /* Prepare to convert every line from the specified
+                        * encoding to 'encoding'. */
+                       for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
+                           ;
+                       *p = NUL;
+                       convert_setup(&vimconv, lbuf + 20, p_enc);
+                   }
+#endif
+
+                   /* Read the next line.  Unrecognized flags are ignored. */
+                   continue;
+               }
+
+               /* Headers ends. */
+
 #ifdef FEAT_TAG_BINS
                /*
                 * When there is no tag head, or ignoring case, need to do a
@@ -1780,26 +1845,22 @@ line_read_in:
                if (linear)
 # endif
                    state = TS_LINEAR;
-               else if (STRNCMP(lbuf, "!_TAG_", 6) > 0)
+               else if (tag_file_sorted == NUL)
                    state = TS_BINARY;
-               else if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
-               {
-                   /* Check sorted flag */
-                   if (lbuf[18] == '1')
+               else if (tag_file_sorted == '1')
                        state = TS_BINARY;
-                   else if (lbuf[18] == '2')
-                   {
-                       state = TS_BINARY;
-                       sortic = TRUE;
-                       pats->regmatch.rm_ic = (p_ic || !noic);
-                   }
-                   else
-                       state = TS_LINEAR;
+               else if (tag_file_sorted == '2')
+               {
+                   state = TS_BINARY;
+                   sortic = TRUE;
+                   orgpat.regmatch.rm_ic = (p_ic || !noic);
                }
+               else
+                   state = TS_LINEAR;
 
-               if (state == TS_BINARY && pats->regmatch.rm_ic && !sortic)
+               if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
                {
-                   /* binary search won't work for ignoring case, use linear
+                   /* Binary search won't work for ignoring case, use linear
                     * search. */
                    linear = TRUE;
                    state = TS_LINEAR;
@@ -1837,40 +1898,12 @@ line_read_in:
 #endif
            }
 
-#ifdef FEAT_MBYTE
-           if (lbuf[0] == '!' && pats == &orgpat
-                          && STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
-           {
-               /* Convert the search pattern from 'encoding' to the
-                * specified encoding. */
-               for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
-                   ;
-               *p = NUL;
-               convert_setup(&vimconv, p_enc, lbuf + 20);
-               if (vimconv.vc_type != CONV_NONE)
-               {
-                   convpat.pat = string_convert(&vimconv, pats->pat, NULL);
-                   if (convpat.pat != NULL)
-                   {
-                       pats = &convpat;
-                       pats->len = (int)STRLEN(pats->pat);
-                       prepare_pats(pats, has_re);
-                       pats->regmatch.rm_ic = orgpat.regmatch.rm_ic;
-                   }
-               }
-
-               /* Prepare for converting a match the other way around. */
-               convert_setup(&vimconv, lbuf + 20, p_enc);
-               continue;
-           }
-#endif
-
            /*
             * Figure out where the different strings are in this line.
             * For "normal" tags: Do a quick check if the tag matches.
             * This speeds up tag searching a lot!
             */
-           if (pats->headlen
+           if (orgpat.headlen
 #ifdef FEAT_EMACS_TAGS
                            && !is_etag
 #endif
@@ -1879,12 +1912,39 @@ line_read_in:
                tagp.tagname = lbuf;
 #ifdef FEAT_TAG_ANYWHITE
                tagp.tagname_end = skiptowhite(lbuf);
-               if (*tagp.tagname_end == NUL)       /* corrupted tag line */
+               if (*tagp.tagname_end == NUL)
 #else
                tagp.tagname_end = vim_strchr(lbuf, TAB);
-               if (tagp.tagname_end == NULL)       /* corrupted tag line */
+               if (tagp.tagname_end == NULL)
 #endif
                {
+                   if (vim_strchr(lbuf, NL) == NULL)
+                   {
+                       /* Truncated line, ignore it.  Has been reported for
+                        * Mozilla JS with extremely long names. */
+                       if (p_verbose >= 5)
+                       {
+                           verbose_enter();
+                           MSG(_("Ignoring long line in tags file"));
+                           verbose_leave();
+                       }
+#ifdef FEAT_TAG_BINS
+                       if (state != TS_LINEAR)
+                       {
+                           /* Avoid getting stuck. */
+                           linear = TRUE;
+                           state = TS_LINEAR;
+# ifdef HAVE_FSEEKO
+                           fseeko(fp, search_info.low_offset, SEEK_SET);
+# else
+                           fseek(fp, (long)search_info.low_offset, SEEK_SET);
+# endif
+                       }
+#endif
+                       continue;
+                   }
+
+                   /* Corrupted tag line. */
                    line_error = TRUE;
                    break;
                }
@@ -1927,9 +1987,9 @@ line_read_in:
                cmplen = (int)(tagp.tagname_end - tagp.tagname);
                if (p_tl != 0 && cmplen > p_tl)     /* adjust for 'taglength' */
                    cmplen = p_tl;
-               if (has_re && pats->headlen < cmplen)
-                   cmplen = pats->headlen;
-               else if (state == TS_LINEAR && pats->headlen != cmplen)
+               if (has_re && orgpat.headlen < cmplen)
+                   cmplen = orgpat.headlen;
+               else if (state == TS_LINEAR && orgpat.headlen != cmplen)
                    continue;
 
 #ifdef FEAT_TAG_BINS
@@ -1948,10 +2008,10 @@ line_read_in:
                     * Compare the current tag with the searched tag.
                     */
                    if (sortic)
-                       tagcmp = tag_strnicmp(tagp.tagname, pats->head,
+                       tagcmp = tag_strnicmp(tagp.tagname, orgpat.head,
                                                              (size_t)cmplen);
                    else
-                       tagcmp = STRNCMP(tagp.tagname, pats->head, cmplen);
+                       tagcmp = STRNCMP(tagp.tagname, orgpat.head, cmplen);
 
                    /*
                     * A match with a shorter tag means to search forward.
@@ -1959,9 +2019,9 @@ line_read_in:
                     */
                    if (tagcmp == 0)
                    {
-                       if (cmplen < pats->headlen)
+                       if (cmplen < orgpat.headlen)
                            tagcmp = -1;
-                       else if (cmplen > pats->headlen)
+                       else if (cmplen > orgpat.headlen)
                            tagcmp = 1;
                    }
 
@@ -2005,7 +2065,7 @@ line_read_in:
                }
                else if (state == TS_SKIP_BACK)
                {
-                   if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+                   if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
                        state = TS_STEP_FORWARD;
                    else
                        /* Have to skip back more.  Restore the curr_offset
@@ -2015,7 +2075,7 @@ line_read_in:
                }
                else if (state == TS_STEP_FORWARD)
                {
-                   if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+                   if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
                    {
                        if ((off_t)ftell(fp) > search_info.match_offset)
                            break;      /* past last match */
@@ -2026,7 +2086,7 @@ line_read_in:
                else
 #endif
                    /* skip this match if it can't match */
-                   if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+                   if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
                    continue;
 
                /*
@@ -2077,41 +2137,41 @@ line_read_in:
            if (p_tl != 0 && cmplen > p_tl)         /* adjust for 'taglength' */
                cmplen = p_tl;
            /* if tag length does not match, don't try comparing */
-           if (pats->len != cmplen)
+           if (orgpat.len != cmplen)
                match = FALSE;
            else
            {
-               if (pats->regmatch.rm_ic)
+               if (orgpat.regmatch.rm_ic)
                {
-                   match = (MB_STRNICMP(tagp.tagname, pats->pat, cmplen) == 0);
+                   match = (MB_STRNICMP(tagp.tagname, orgpat.pat, cmplen) == 0);
                    if (match)
-                       match_no_ic = (STRNCMP(tagp.tagname, pats->pat,
+                       match_no_ic = (STRNCMP(tagp.tagname, orgpat.pat,
                                                                cmplen) == 0);
                }
                else
-                   match = (STRNCMP(tagp.tagname, pats->pat, cmplen) == 0);
+                   match = (STRNCMP(tagp.tagname, orgpat.pat, cmplen) == 0);
            }
 
            /*
             * Has a regexp: Also find tags matching regexp.
             */
            match_re = FALSE;
-           if (!match && pats->regmatch.regprog != NULL)
+           if (!match && orgpat.regmatch.regprog != NULL)
            {
                int     cc;
 
                cc = *tagp.tagname_end;
                *tagp.tagname_end = NUL;
-               match = vim_regexec(&pats->regmatch, tagp.tagname, (colnr_T)0);
+               match = vim_regexec(&orgpat.regmatch, tagp.tagname, (colnr_T)0);
                if (match)
                {
-                   matchoff = (int)(pats->regmatch.startp[0] - tagp.tagname);
-                   if (pats->regmatch.rm_ic)
+                   matchoff = (int)(orgpat.regmatch.startp[0] - tagp.tagname);
+                   if (orgpat.regmatch.rm_ic)
                    {
-                       pats->regmatch.rm_ic = FALSE;
-                       match_no_ic = vim_regexec(&pats->regmatch, tagp.tagname,
+                       orgpat.regmatch.rm_ic = FALSE;
+                       match_no_ic = vim_regexec(&orgpat.regmatch, tagp.tagname,
                                                                  (colnr_T)0);
-                       pats->regmatch.rm_ic = TRUE;
+                       orgpat.regmatch.rm_ic = TRUE;
                    }
                }
                *tagp.tagname_end = cc;
@@ -2168,7 +2228,7 @@ line_read_in:
                        else
                            mtt = MT_GL_OTH;
                    }
-                   if (pats->regmatch.rm_ic && !match_no_ic)
+                   if (orgpat.regmatch.rm_ic && !match_no_ic)
                        mtt += MT_IC_OFF;
                    if (match_re)
                        mtt += MT_RE_OFF;
@@ -2181,35 +2241,8 @@ line_read_in:
                 */
                if (ga_grow(&ga_match[mtt], 1) == OK)
                {
-#ifdef FEAT_MBYTE
-                   char_u      *conv_line = NULL;
-                   char_u      *lbuf_line = lbuf;
+                   int len;
 
-                   if (vimconv.vc_type != CONV_NONE)
-                   {
-                       /* Convert the tag line from the encoding of the tags
-                        * file to 'encoding'.  Then parse the line again. */
-                       conv_line = string_convert(&vimconv, lbuf, NULL);
-                       if (conv_line != NULL)
-                       {
-                           if (parse_tag_line(conv_line,
-#ifdef FEAT_EMACS_TAGS
-                                       is_etag,
-#endif
-                                       &tagp) == OK)
-                               lbuf_line = conv_line;
-                           else
-                               /* doesn't work, go back to unconverted line. */
-                               (void)parse_tag_line(lbuf,
-#ifdef FEAT_EMACS_TAGS
-                                                    is_etag,
-#endif
-                                                    &tagp);
-                       }
-                   }
-#else
-# define lbuf_line lbuf
-#endif
                    if (help_only)
                    {
 #ifdef FEAT_MULTI_LANG
@@ -2301,7 +2334,7 @@ line_read_in:
                         * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
                         */
                        len = (int)STRLEN(tag_fname)
-                                                + (int)STRLEN(lbuf_line) + 3;
+                                                + (int)STRLEN(lbuf) + 3;
 #ifdef FEAT_EMACS_TAGS
                        if (is_etag)
                            len += (int)STRLEN(ebuf) + 1;
@@ -2331,7 +2364,7 @@ line_read_in:
                            else
                                *s++ = NUL;
 #endif
-                           STRCPY(s, lbuf_line);
+                           STRCPY(s, lbuf);
                        }
                    }
 
@@ -2367,10 +2400,6 @@ line_read_in:
                        else
                            vim_free(mfp);
                    }
-#ifdef FEAT_MBYTE
-                   /* Note: this makes the values in "tagp" invalid! */
-                   vim_free(conv_line);
-#endif
                }
                else    /* Out of memory! Just forget about the rest. */
                {
@@ -2409,19 +2438,12 @@ line_read_in:
        }
 #endif
 #ifdef FEAT_MBYTE
-       if (pats == &convpat)
-       {
-           /* Go back from converted pattern to original pattern. */
-           vim_free(pats->pat);
-           vim_free(pats->regmatch.regprog);
-           orgpat.regmatch.rm_ic = pats->regmatch.rm_ic;
-           pats = &orgpat;
-       }
        if (vimconv.vc_type != CONV_NONE)
            convert_setup(&vimconv, NULL, NULL);
 #endif
 
 #ifdef FEAT_TAG_BINS
+       tag_file_sorted = NUL;
        if (sort_error)
        {
            EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
@@ -2455,13 +2477,13 @@ line_read_in:
 #ifdef FEAT_TAG_BINS
       /* stop searching when already did a linear search, or when TAG_NOIC
        * used, and 'ignorecase' not set or already did case-ignore search */
-      if (stop_searching || linear || (!p_ic && noic) || pats->regmatch.rm_ic)
+      if (stop_searching || linear || (!p_ic && noic) || orgpat.regmatch.rm_ic)
          break;
 # ifdef FEAT_CSCOPE
       if (use_cscope)
          break;
 # endif
-      pats->regmatch.rm_ic = TRUE;     /* try another time while ignoring case */
+      orgpat.regmatch.rm_ic = TRUE;    /* try another time while ignoring case */
     }
 #endif
 
@@ -2474,7 +2496,7 @@ line_read_in:
 
 findtag_end:
     vim_free(lbuf);
-    vim_free(pats->regmatch.regprog);
+    vim_regfree(orgpat.regmatch.regprog);
     vim_free(tag_fname);
 #ifdef FEAT_EMACS_TAGS
     vim_free(ebuf);
@@ -3114,7 +3136,7 @@ jumpto_tag(lbuf, forceit, keep_help)
 #endif
 
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-    if (g_do_tagpreview)
+    if (g_do_tagpreview != 0)
     {
        postponed_split = 0;    /* don't split again below */
        curwin_save = curwin;   /* Save current window */
@@ -3143,9 +3165,7 @@ jumpto_tag(lbuf, forceit, keep_help)
     {
        win_split(postponed_split > 0 ? postponed_split : 0,
                                                       postponed_split_flags);
-# ifdef FEAT_SCROLLBIND
-       curwin->w_p_scb = FALSE;
-# endif
+       RESET_BINDING(curwin);
     }
 #endif
 
@@ -3154,7 +3174,7 @@ jumpto_tag(lbuf, forceit, keep_help)
        /* A :ta from a help file will keep the b_help flag set.  For ":ptag"
         * we need to use the flag from the window where we came from. */
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-       if (g_do_tagpreview)
+       if (g_do_tagpreview != 0)
            keep_help_flag = curwin_save->w_buffer->b_help;
        else
 #endif
@@ -3328,7 +3348,8 @@ jumpto_tag(lbuf, forceit, keep_help)
        }
 
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-       if (g_do_tagpreview && curwin != curwin_save && win_valid(curwin_save))
+       if (g_do_tagpreview != 0
+                          && curwin != curwin_save && win_valid(curwin_save))
        {
            /* Return cursor to where we were */
            validate_cursor();
@@ -3782,8 +3803,9 @@ add_tag_field(dict, field_name, start, end)
     char_u  *start;            /* start of the value */
     char_u  *end;              /* after the value; can be NULL */
 {
-    char_u     buf[MAXPATHL];
+    char_u     *buf;
     int                len = 0;
+    int                retval;
 
     /* check that the field name doesn't exist yet */
     if (dict_find(dict, (char_u *)field_name, -1) != NULL)
@@ -3796,6 +3818,9 @@ add_tag_field(dict, field_name, start, end)
        }
        return FAIL;
     }
+    buf = alloc(MAXPATHL);
+    if (buf == NULL)
+       return FAIL;
     if (start != NULL)
     {
        if (end == NULL)
@@ -3805,12 +3830,14 @@ add_tag_field(dict, field_name, start, end)
                --end;
        }
        len = (int)(end - start);
-       if (len > (int)sizeof(buf) - 1)
-           len = sizeof(buf) - 1;
+       if (len > MAXPATHL - 1)
+           len = MAXPATHL - 1;
        vim_strncpy(buf, start, len);
     }
     buf[len] = NUL;
-    return dict_add_nr_str(dict, field_name, 0L, buf);
+    retval = dict_add_nr_str(dict, field_name, 0L, buf);
+    vim_free(buf);
+    return retval;
 }
 
 /*
index 8c42662..d4e4e0d 100644 (file)
@@ -52,7 +52,7 @@
 
 /*
  * Here are the builtin termcap entries.  They are not stored as complete
- * Tcarr structures, as such a structure is too big.
+ * structures with all entries, as such a structure is too big.
  *
  * The entries are compact, therefore they normally are included even when
  * HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
@@ -106,11 +106,24 @@ static char_u *tgetent_error __ARGS((char_u *, char_u *));
 char           *tgetstr __ARGS((char *, char **));
 
 # ifdef FEAT_TERMRESPONSE
+    /* Change this to "if 1" to debug what happens with termresponse. */
+#  if 0
+#   define DEBUG_TERMRESPONSE
+    static void log_tr(char *msg);
+#   define LOG_TR(msg) log_tr(msg)
+#  else
+#   define LOG_TR(msg)
+#  endif
 /* Request Terminal Version status: */
 #  define CRV_GET      1       /* send T_CRV when switched to RAW mode */
 #  define CRV_SENT     2       /* did send T_CRV, waiting for answer */
 #  define CRV_GOT      3       /* received T_CRV response */
 static int crv_status = CRV_GET;
+/* Request Cursor position report: */
+#  define U7_GET       1       /* send T_U7 when switched to RAW mode */
+#  define U7_SENT      2       /* did send T_U7, waiting for answer */
+#  define U7_GOT       3       /* received T_U7 response */
+static int u7_status = U7_GET;
 # endif
 
 /*
@@ -199,71 +212,6 @@ static struct builtin_term builtin_termcaps[] =
 #endif
 
 #ifndef NO_BUILTIN_TCAPS
-# if defined(RISCOS) || defined(ALL_BUILTIN_TCAPS)
-/*
- * Default for the Acorn.
- */
-    {(int)KS_NAME,     "riscos"},
-    {(int)KS_CL,       "\014"},                /* Cls and Home Cursor */
-    {(int)KS_CM,       "\001%d\001%d\002"},    /* Position cursor */
-
-    {(int)KS_CCO,      "16"},                  /* Allow 16 colors */
-
-    {(int)KS_CAF,      "\001%d\021"},          /* Set foreground colour */
-    {(int)KS_CAB,      "\001%d\022"},          /* Set background colour */
-
-
-    {(int)KS_ME,       "\004"},                /* Normal mode */
-    {(int)KS_MR,       "\005"},                /* Reverse */
-
-    {(int)KS_VI,       "\016"},                /* Cursor invisible */
-    {(int)KS_VE,       "\017"},                /* Cursor visible */
-    {(int)KS_VS,       "\020"},                /* Cursor very visible */
-
-    {(int)KS_CS,       "\001%d\001%d\003"},    /* Set scroll region */
-    {(int)KS_SR,       "\023"},                /* Scroll text down */
-    {K_UP,             "\217"},
-    {K_DOWN,           "\216"},
-    {K_LEFT,           "\214"},
-    {K_RIGHT,          "\215"},
-    {K_S_UP,           "\237"},
-    {K_S_DOWN,         "\236"},
-    {K_S_LEFT,         "\234"},
-    {K_S_RIGHT,                "\235"},
-
-    {K_F1,             "\201"},
-    {K_F2,             "\202"},
-    {K_F3,             "\203"},
-    {K_F4,             "\204"},
-    {K_F5,             "\205"},
-    {K_F6,             "\206"},
-    {K_F7,             "\207"},
-    {K_F8,             "\210"},
-    {K_F9,             "\211"},
-    {K_F10,            "\312"},
-    {K_F11,            "\313"},
-    {K_F12,            "\314"},
-    {K_S_F1,           "\221"},
-    {K_S_F2,           "\222"},
-    {K_S_F3,           "\223"},
-    {K_S_F4,           "\224"},
-    {K_S_F5,           "\225"},
-    {K_S_F6,           "\226"},
-    {K_S_F7,           "\227"},
-    {K_S_F8,           "\230"},
-    {K_S_F9,           "\231"},
-    {K_S_F10,          "\332"},
-    {K_S_F11,          "\333"},
-    {K_S_F12,          "\334"},
-    {K_BS,             "\010"},
-    {K_INS,            "\315"},
-    {K_DEL,            "\177"},
-    {K_HOME,           "\036"},
-    {K_END,            "\213"},
-    {K_PAGEUP,         "\237"},
-    {K_PAGEDOWN,       "\236"},
-# endif        /* Acorn terminal */
-
 
 # if defined(AMIGA) || defined(ALL_BUILTIN_TCAPS)
 /*
@@ -998,6 +946,7 @@ static struct builtin_term builtin_termcaps[] =
     {(int)KS_CWP,      IF_EB("\033[3;%d;%dt", ESC_STR "[3;%d;%dt")},
 #  endif
     {(int)KS_CRV,      IF_EB("\033[>c", ESC_STR "[>c")},
+    {(int)KS_U7,       IF_EB("\033[6n", ESC_STR "[6n")},
 
     {K_UP,             IF_EB("\033O*A", ESC_STR "O*A")},
     {K_DOWN,           IF_EB("\033O*B", ESC_STR "O*B")},
@@ -1286,6 +1235,7 @@ static struct builtin_term builtin_termcaps[] =
     {(int)KS_CWP,      "[%dCWP%d]"},
 #  endif
     {(int)KS_CRV,      "[CRV]"},
+    {(int)KS_U7,       "[U7]"},
     {K_UP,             "[KU]"},
     {K_DOWN,           "[KD]"},
     {K_LEFT,           "[KL]"},
@@ -1399,10 +1349,6 @@ static struct builtin_term builtin_termcaps[] =
 /*
  * DEFAULT_TERM is used, when no terminal is specified with -T option or $TERM.
  */
-#ifdef RISCOS
-# define DEFAULT_TERM  (char_u *)"riscos"
-#endif
-
 #ifdef AMIGA
 # define DEFAULT_TERM  (char_u *)"amiga"
 #endif
@@ -1665,6 +1611,7 @@ set_termname(term)
                                {KS_TS, "ts"}, {KS_FS, "fs"},
                                {KS_CWP, "WP"}, {KS_CWS, "WS"},
                                {KS_CSI, "SI"}, {KS_CEI, "EI"},
+                               {KS_U7, "u7"},
                                {(enum SpecialKey)0, NULL}
                            };
 
@@ -1922,7 +1869,9 @@ set_termname(term)
 #    ifdef FEAT_GUI
        if (!gui.in_use)
 #    endif
+#    ifndef FEAT_CYGWIN_WIN32_CLIPBOARD
            clip_init(FALSE);
+#    endif
 #   endif
        if (use_xterm_like_mouse(term))
        {
@@ -1933,7 +1882,12 @@ set_termname(term)
        }
 #  endif
        if (p != NULL)
+       {
            set_option_value((char_u *)"ttym", 0L, p, 0);
+           /* Reset the WAS_SET flag, 'ttymouse' can be set to "sgr" or
+            * "xterm2" in check_termcode(). */
+           reset_option_was_set((char_u *)"ttym");
+       }
        if (p == NULL
 #   ifdef FEAT_GUI
                || gui.in_use
@@ -1990,6 +1944,7 @@ set_termname(term)
     full_screen = TRUE;                /* we can use termcap codes from now on */
     set_term_defaults();       /* use current values as defaults */
 #ifdef FEAT_TERMRESPONSE
+    LOG_TR("setting crv_status to CRV_GET");
     crv_status = CRV_GET;      /* Get terminal version later */
 #endif
 
@@ -2065,6 +2020,8 @@ set_termname(term)
 #  define HMT_DEC      4
 #  define HMT_JSBTERM  8
 #  define HMT_PTERM    16
+#  define HMT_URXVT    32
+#  define HMT_SGR      64
 static int has_mouse_termcode = 0;
 # endif
 
@@ -2100,6 +2057,16 @@ set_mouse_termcode(n, s)
        has_mouse_termcode |= HMT_PTERM;
     else
 #   endif
+#   ifdef FEAT_MOUSE_URXVT
+    if (n == KS_URXVT_MOUSE)
+       has_mouse_termcode |= HMT_URXVT;
+    else
+#   endif
+#   ifdef FEAT_MOUSE_SGR
+    if (n == KS_SGR_MOUSE)
+       has_mouse_termcode |= HMT_SGR;
+    else
+#   endif
        has_mouse_termcode |= HMT_NORMAL;
 #  endif
 }
@@ -2137,6 +2104,16 @@ del_mouse_termcode(n)
        has_mouse_termcode &= ~HMT_PTERM;
     else
 #   endif
+#   ifdef FEAT_MOUSE_URXVT
+    if (n == KS_URXVT_MOUSE)
+       has_mouse_termcode &= ~HMT_URXVT;
+    else
+#   endif
+#   ifdef FEAT_MOUSE_SGR
+    if (n == KS_SGR_MOUSE)
+       has_mouse_termcode &= ~HMT_SGR;
+    else
+#   endif
        has_mouse_termcode &= ~HMT_NORMAL;
 #  endif
 }
@@ -2979,8 +2956,10 @@ get_bytes_from_buf(buf, bytes, num_bytes)
                return -1;
            if (buf[len++] == (int)KS_ZERO)
                c = NUL;
-           ++len;      /* skip KE_FILLER */
-           /* else it should be KS_SPECIAL, and c already equals K_SPECIAL */
+           /* else it should be KS_SPECIAL; when followed by KE_FILLER c is
+            * K_SPECIAL, or followed by KE_CSI and c must be CSI. */
+           if (buf[len++] == (int)KE_CSI)
+               c = CSI;
        }
        else if (c == CSI && buf[len] == KS_EXTRA
                                               && buf[len + 1] == (int)KE_CSI)
@@ -2994,15 +2973,29 @@ get_bytes_from_buf(buf, bytes, num_bytes)
 #endif
 
 /*
- * Check if the new shell size is valid, correct it if it's too small.
+ * Check if the new shell size is valid, correct it if it's too small or way
+ * too big.
  */
     void
 check_shellsize()
 {
-    if (Columns < MIN_COLUMNS)
-       Columns = MIN_COLUMNS;
     if (Rows < min_rows())     /* need room for one window and command line */
        Rows = min_rows();
+    limit_screen_size();
+}
+
+/*
+ * Limit Rows and Columns to avoid an overflow in Rows * Columns.
+ */
+    void
+limit_screen_size()
+{
+    if (Columns < MIN_COLUMNS)
+       Columns = MIN_COLUMNS;
+    else if (Columns > 10000)
+       Columns = 10000;
+    if (Rows > 1000)
+       Rows = 1000;
 }
 
 /*
@@ -3053,10 +3046,19 @@ shell_resized_check()
     int                old_Rows = Rows;
     int                old_Columns = Columns;
 
-    (void)ui_get_shellsize();
-    check_shellsize();
-    if (old_Rows != Rows || old_Columns != Columns)
-       shell_resized();
+    if (!exiting
+#ifdef FEAT_GUI
+           /* Do not get the size when executing a shell command during
+            * startup. */
+           && !gui.starting
+#endif
+           )
+    {
+       (void)ui_get_shellsize();
+       check_shellsize();
+       if (old_Rows != Rows || old_Columns != Columns)
+           shell_resized();
+    }
 }
 
 /*
@@ -3083,12 +3085,20 @@ set_shellsize(width, height, mustset)
     if (width < 0 || height < 0)    /* just checking... */
        return;
 
-    if (State == HITRETURN || State == SETWSIZE) /* postpone the resizing */
+    if (State == HITRETURN || State == SETWSIZE)
     {
+       /* postpone the resizing */
        State = SETWSIZE;
        return;
     }
 
+    /* curwin->w_buffer can be NULL when we are closing a window and the
+     * buffer has already been closed and removing a scrollbar causes a resize
+     * event. Don't resize then, it will happen after entering another buffer.
+     */
+    if (curwin->w_buffer == NULL)
+       return;
+
     ++busy;
 
 #ifdef AMIGA
@@ -3206,7 +3216,8 @@ settmode(tmode)
                /* May need to check for T_CRV response and termcodes, it
                 * doesn't work in Cooked mode, an external program may get
                 * them. */
-               if (tmode != TMODE_RAW && crv_status == CRV_SENT)
+               if (tmode != TMODE_RAW && (crv_status == CRV_SENT
+                                        || u7_status == U7_SENT))
                    (void)vpeekc_nomap();
                check_for_codes_from_term();
            }
@@ -3267,9 +3278,19 @@ stoptermcap()
        if (!gui.in_use && !gui.starting)
 # endif
        {
-           /* May need to check for T_CRV response. */
-           if (crv_status == CRV_SENT)
-               (void)vpeekc_nomap();
+           /* May need to discard T_CRV or T_U7 response. */
+           if (crv_status == CRV_SENT || u7_status == U7_SENT)
+           {
+# ifdef UNIX
+               /* Give the terminal a chance to respond. */
+               mch_delay(100L, FALSE);
+# endif
+# ifdef TCIFLUSH
+               /* Discard data received but not read. */
+               if (exiting)
+                   tcflush(fileno(stdin), TCIFLUSH);
+# endif
+           }
            /* Check for termcodes first, otherwise an external program may
             * get them. */
            check_for_codes_from_term();
@@ -3314,6 +3335,7 @@ may_req_termresponse()
 # endif
            && *T_CRV != NUL)
     {
+       LOG_TR("Sending CRV");
        out_str(T_CRV);
        crv_status = CRV_SENT;
        /* check for the characters now, otherwise they might be eaten by
@@ -3322,6 +3344,74 @@ may_req_termresponse()
        (void)vpeekc_nomap();
     }
 }
+
+# if defined(FEAT_MBYTE) || defined(PROTO)
+/*
+ * Check how the terminal treats ambiguous character width (UAX #11).
+ * First, we move the cursor to (1, 0) and print a test ambiguous character
+ * \u25bd (WHITE DOWN-POINTING TRIANGLE) and query current cursor position.
+ * If the terminal treats \u25bd as single width, the position is (1, 1),
+ * or if it is treated as double width, that will be (1, 2).
+ * This function has the side effect that changes cursor position, so
+ * it must be called immediately after entering termcap mode.
+ */
+    void
+may_req_ambiguous_character_width()
+{
+    if (u7_status == U7_GET
+           && cur_tmode == TMODE_RAW
+           && termcap_active
+           && p_ek
+#  ifdef UNIX
+           && isatty(1)
+           && isatty(read_cmd_fd)
+#  endif
+           && *T_U7 != NUL
+           && !option_was_set((char_u *)"ambiwidth"))
+    {
+        char_u buf[16];
+
+        LOG_TR("Sending U7 request");
+        /* Do this in the second row.  In the first row the returned sequence
+         * may be CSI 1;2R, which is the same as <S-F3>. */
+        term_windgoto(1, 0);
+        buf[mb_char2bytes(0x25bd, buf)] = 0;
+        out_str(buf);
+        out_str(T_U7);
+        u7_status = U7_SENT;
+        term_windgoto(0, 0);
+        out_str((char_u *)"  ");
+        term_windgoto(0, 0);
+        /* check for the characters now, otherwise they might be eaten by
+         * get_keystroke() */
+        out_flush();
+        (void)vpeekc_nomap();
+    }
+}
+# endif
+
+# ifdef DEBUG_TERMRESPONSE
+    static void
+log_tr(char *msg)
+{
+    static FILE *fd_tr = NULL;
+    static proftime_T start;
+    proftime_T now;
+
+    if (fd_tr == NULL)
+    {
+       fd_tr = fopen("termresponse.log", "w");
+       profile_start(&start);
+    }
+    now = start;
+    profile_end(&now);
+    fprintf(fd_tr, "%s: %s %s\n",
+           profile_msg(&now),
+           must_redraw == NOT_VALID ? "NV"
+                                        : must_redraw == CLEAR ? "CL" : "  ",
+           msg);
+}
+# endif
 #endif
 
 /*
@@ -3793,6 +3883,7 @@ switch_to_8bit()
        need_gather = TRUE;             /* need to fill termleader[] */
     }
     detected_8bit = TRUE;
+    LOG_TR("Switching to 8 bit");
 }
 #endif
 
@@ -3828,23 +3919,27 @@ set_mouse_topline(wp)
  * Check from typebuf.tb_buf[typebuf.tb_off] to typebuf.tb_buf[typebuf.tb_off
  * + max_offset].
  * Return 0 for no match, -1 for partial match, > 0 for full match.
+ * Return KEYLEN_REMOVED when a key code was deleted.
  * With a match, the match is removed, the replacement code is inserted in
  * typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
  * returned.
- * When "buf" is not NULL, it is used instead of typebuf.tb_buf[]. "buflen" is
- * then the length of the string in buf[].
+ * When "buf" is not NULL, buf[bufsize] is used instead of typebuf.tb_buf[].
+ * "buflen" is then the length of the string in buf[] and is updated for
+ * inserts and deletes.
  */
     int
-check_termcode(max_offset, buf, buflen)
+check_termcode(max_offset, buf, bufsize, buflen)
     int                max_offset;
     char_u     *buf;
-    int                buflen;
+    int                bufsize;
+    int                *buflen;
 {
     char_u     *tp;
     char_u     *p;
     int                slen = 0;       /* init for GCC */
     int                modslen;
     int                len;
+    int                retval = 0;
     int                offset;
     char_u     key_name[2];
     int                modifiers;
@@ -3894,8 +3989,7 @@ check_termcode(max_offset, buf, buflen)
      * Check at several positions in typebuf.tb_buf[], to catch something like
      * "x<Up>" that can be mapped. Stop at max_offset, because characters
      * after that cannot be used for mapping, and with @r commands
-     * typebuf.tb_buf[]
-     * can become very long.
+     * typebuf.tb_buf[] can become very long.
      * This is used often, KEEP IT FAST!
      */
     for (offset = 0; offset < max_offset; ++offset)
@@ -3909,10 +4003,10 @@ check_termcode(max_offset, buf, buflen)
        }
        else
        {
-           if (offset >= buflen)
+           if (offset >= *buflen)
                break;
            tp = buf + offset;
-           len = buflen - offset;
+           len = *buflen - offset;
        }
 
        /*
@@ -4064,15 +4158,32 @@ check_termcode(max_offset, buf, buflen)
        }
 
 #ifdef FEAT_TERMRESPONSE
-       if (key_name[0] == NUL)
+       if (key_name[0] == NUL
+           /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+           || key_name[0] == KS_URXVT_MOUSE
+# ifdef FEAT_MBYTE
+           || u7_status == U7_SENT
+# endif
+            )
        {
-           /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c".  Also
-            * eat other possible responses to t_RV, rxvt returns
-            * "<Esc>[?1;2c".  Also accept CSI instead of <Esc>[.
-            * mrxvt has been reported to have "+" in the version. Assume
-            * the escape sequence ends with a letter or one of "{|}~". */
-           if (*T_CRV != NUL && ((tp[0] == ESC && tp[1] == '[' && len >= 3)
-                                              || (tp[0] == CSI && len >= 2)))
+           /* Check for some responses from terminal start with "<Esc>[" or
+            * CSI.
+            *
+            * - xterm version string: <Esc>[>{x};{vers};{y}c
+            *   Also eat other possible responses to t_RV, rxvt returns
+            *   "<Esc>[?1;2c". Also accept CSI instead of <Esc>[.
+            *   mrxvt has been reported to have "+" in the version. Assume
+            *   the escape sequence ends with a letter or one of "{|}~".
+            *
+            * - cursor position report: <Esc>[{row};{col}R
+            *   The final byte is 'R'. now it is only used for checking for
+            *   ambiguous-width character state.
+            */
+           p = tp[0] == CSI ? tp + 1 : tp + 2;
+           if ((*T_CRV != NUL || *T_U7 != NUL)
+                       && ((tp[0] == ESC && tp[1] == '[' && len >= 3)
+                           || (tp[0] == CSI && len >= 2))
+                       && (VIM_ISDIGIT(*p) || *p == '>' || *p == '?'))
            {
                j = 0;
                extra = 0;
@@ -4080,14 +4191,64 @@ check_termcode(max_offset, buf, buflen)
                                && !(tp[i] >= '{' && tp[i] <= '~')
                                && !ASCII_ISALPHA(tp[i]); ++i)
                    if (tp[i] == ';' && ++j == 1)
-                       extra = atoi((char *)tp + i + 1);
+                       extra = i + 1;
                if (i == len)
-                   return -1;          /* not enough characters */
+               {
+                   LOG_TR("Not enough characters for CRV");
+                   return -1;
+               }
+
+#ifdef FEAT_MBYTE
+               /* Eat it when it has 2 arguments and ends in 'R'. Ignore it
+                * when u7_status is not "sent", <S-F3> sends something
+                * similar. */
+               if (j == 1 && tp[i] == 'R' && u7_status == U7_SENT)
+               {
+                   char *aw = NULL;
+
+                   LOG_TR("Received U7 status");
+                   u7_status = U7_GOT;
+# ifdef FEAT_AUTOCMD
+                   did_cursorhold = TRUE;
+# endif
+                   if (extra > 0)
+                       extra = atoi((char *)tp + extra);
+                   if (extra == 2)
+                       aw = "single";
+                   else if (extra == 3)
+                       aw = "double";
+                   if (aw != NULL && STRCMP(aw, p_ambw) != 0)
+                   {
+                       /* Setting the option causes a screen redraw. Do that
+                        * right away if possible, keeping any messages. */
+                       set_option_value((char_u *)"ambw", 0L, (char_u *)aw, 0);
+#ifdef DEBUG_TERMRESPONSE
+                       {
+                           char buf[100];
+                           int  r = redraw_asap(CLEAR);
 
+                           sprintf(buf, "set 'ambiwidth', redraw_asap(): %d",
+                                                                          r);
+                           log_tr(buf);
+                       }
+#else
+                       redraw_asap(CLEAR);
+#endif
+                   }
+                   key_name[0] = (int)KS_EXTRA;
+                   key_name[1] = (int)KE_IGNORE;
+                   slen = i + 1;
+               }
+               else
+#endif
                /* eat it when at least one digit and ending in 'c' */
-               if (i > 2 + (tp[0] != CSI) && tp[i] == 'c')
+               if (*T_CRV != NUL && i > 2 + (tp[0] != CSI) && tp[i] == 'c')
                {
+                   LOG_TR("Received CRV");
                    crv_status = CRV_GOT;
+# ifdef FEAT_AUTOCMD
+                   did_cursorhold = TRUE;
+# endif
 
                    /* If this code starts with CSI, you can bet that the
                     * terminal uses 8-bit codes. */
@@ -4097,18 +4258,33 @@ check_termcode(max_offset, buf, buflen)
                    /* rxvt sends its version number: "20703" is 2.7.3.
                     * Ignore it for when the user has set 'term' to xterm,
                     * even though it's an rxvt. */
+                   if (extra > 0)
+                       extra = atoi((char *)tp + extra);
                    if (extra > 20000)
                        extra = 0;
 
                    if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
                    {
-                       /* if xterm version >= 95 use mouse dragging */
-                       if (extra >= 95)
-                           set_option_value((char_u *)"ttym", 0L,
+                       /* Only set 'ttymouse' automatically if it was not set
+                        * by the user already. */
+                       if (!option_was_set((char_u *)"ttym"))
+                       {
+# ifdef TTYM_SGR
+                           if (extra >= 277)
+                               set_option_value((char_u *)"ttym", 0L,
+                                                         (char_u *)"sgr", 0);
+                           else
+# endif
+                           /* if xterm version >= 95 use mouse dragging */
+                           if (extra >= 95)
+                               set_option_value((char_u *)"ttym", 0L,
                                                       (char_u *)"xterm2", 0);
+                       }
+
                        /* if xterm version >= 141 try to get termcap codes */
                        if (extra >= 141)
                        {
+                           LOG_TR("Enable checking for XT codes");
                            check_for_codes = TRUE;
                            need_gather = TRUE;
                            req_codes_from_term();
@@ -4147,7 +4323,10 @@ check_termcode(max_offset, buf, buflen)
                    }
 
                if (i == len)
+               {
+                   LOG_TR("not enough characters for XT");
                    return -1;          /* not enough characters */
+               }
            }
        }
 #endif
@@ -4184,18 +4363,24 @@ check_termcode(max_offset, buf, buflen)
        /*
         * If it is a mouse click, get the coordinates.
         */
-       if (key_name[0] == (int)KS_MOUSE
+       if (key_name[0] == KS_MOUSE
 # ifdef FEAT_MOUSE_JSB
-               || key_name[0] == (int)KS_JSBTERM_MOUSE
+               || key_name[0] == KS_JSBTERM_MOUSE
 # endif
 # ifdef FEAT_MOUSE_NET
-               || key_name[0] == (int)KS_NETTERM_MOUSE
+               || key_name[0] == KS_NETTERM_MOUSE
 # endif
 # ifdef FEAT_MOUSE_DEC
-               || key_name[0] == (int)KS_DEC_MOUSE
+               || key_name[0] == KS_DEC_MOUSE
 # endif
 # ifdef FEAT_MOUSE_PTERM
-               || key_name[0] == (int)KS_PTERM_MOUSE
+               || key_name[0] == KS_PTERM_MOUSE
+# endif
+# ifdef FEAT_MOUSE_URXVT
+               || key_name[0] == KS_URXVT_MOUSE
+# endif
+# ifdef FEAT_MOUSE_SGR
+               || key_name[0] == KS_SGR_MOUSE
 # endif
                )
        {
@@ -4275,7 +4460,101 @@ check_termcode(max_offset, buf, buflen)
                    else
                        break;
                }
+           }
+
+# if defined(FEAT_MOUSE_URXVT) || defined(FEAT_MOUSE_SGR)
+           if (key_name[0] == KS_URXVT_MOUSE
+               || key_name[0] == KS_SGR_MOUSE)
+           {
+               for (;;)
+               {
+                   /* URXVT 1015 mouse reporting mode:
+                    * Almost identical to xterm mouse mode, except the values
+                    * are decimal instead of bytes.
+                    *
+                    * \033[%d;%d;%dM
+                    *            ^-- row
+                    *         ^----- column
+                    *      ^-------- code
+                    *
+                    * SGR 1006 mouse reporting mode:
+                    * Almost identical to xterm mouse mode, except the values
+                    * are decimal instead of bytes.
+                    *
+                    * \033[<%d;%d;%dM
+                    *             ^-- row
+                    *          ^----- column
+                    *       ^-------- code
+                    *
+                    * \033[<%d;%d;%dm        : mouse release event
+                    *             ^-- row
+                    *          ^----- column
+                    *       ^-------- code
+                    */
+                   p = tp + slen;
+
+                   mouse_code = getdigits(&p);
+                   if (*p++ != ';')
+                       return -1;
+
+                   /* when mouse reporting is SGR, add 32 to mouse code */
+                    if (key_name[0] == KS_SGR_MOUSE)
+                        mouse_code += 32;
+
+                   mouse_col = getdigits(&p) - 1;
+                   if (*p++ != ';')
+                       return -1;
+
+                   mouse_row = getdigits(&p) - 1;
+                    if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
+                       mouse_code |= MOUSE_RELEASE;
+                    else if (*p != 'M')
+                       return -1;
+                    p++;
+
+                   slen += (int)(p - (tp + slen));
+
+                   /* skip this one if next one has same code (like xterm
+                    * case) */
+                   j = termcodes[idx].len;
+                   if (STRNCMP(tp, tp + slen, (size_t)j) == 0)
+                   {
+                       int slen2;
+                       int cmd_complete = 0;
+
+                       /* check if the command is complete by looking for the
+                        * 'M' */
+                       for (slen2 = slen; slen2 < len; slen2++)
+                       {
+                           if (tp[slen2] == 'M'
+                                || (key_name[0] == KS_SGR_MOUSE
+                                                        && tp[slen2] == 'm'))
+                           {
+                               cmd_complete = 1;
+                               break;
+                           }
+                       }
+                       p += j;
+                       if (cmd_complete && getdigits(&p) == mouse_code)
+                       {
+                           slen += j; /* skip the \033[ */
+                           continue;
+                       }
+                   }
+                   break;
+               }
+           }
+# endif
 
+       if (key_name[0] == (int)KS_MOUSE
+#ifdef FEAT_MOUSE_URXVT
+           || key_name[0] == (int)KS_URXVT_MOUSE
+#endif
+#ifdef FEAT_MOUSE_SGR
+           || key_name[0] == KS_SGR_MOUSE
+#endif
+           )
+       {
 #  if !defined(MSWIN) && !defined(MSDOS)
                /*
                 * Handle mouse events.
@@ -4940,6 +5219,13 @@ check_termcode(max_offset, buf, buflen)
 #endif
                string[new_slen++] = key_name[1];
        }
+       else if (new_slen == 0 && key_name[0] == KS_EXTRA
+                                                 && key_name[1] == KE_IGNORE)
+       {
+           /* Do not put K_IGNORE into the buffer, do return KEYLEN_REMOVED
+            * to indicate what happened. */
+           retval = KEYLEN_REMOVED;
+       }
        else
        {
            string[new_slen++] = K_SPECIAL;
@@ -4969,16 +5255,26 @@ check_termcode(max_offset, buf, buflen)
            if (extra < 0)
                /* remove matched characters */
                mch_memmove(buf + offset, buf + offset - extra,
-                                          (size_t)(buflen + offset + extra));
+                                          (size_t)(*buflen + offset + extra));
            else if (extra > 0)
-               /* insert the extra space we need */
+           {
+               /* Insert the extra space we need.  If there is insufficient
+                * space return -1. */
+               if (*buflen + extra + new_slen >= bufsize)
+                   return -1;
                mch_memmove(buf + offset + extra, buf + offset,
-                                                  (size_t)(buflen - offset));
+                                                  (size_t)(*buflen - offset));
+           }
            mch_memmove(buf + offset, string, (size_t)new_slen);
+           *buflen = *buflen + extra + new_slen;
        }
-       return (len + extra + offset);
+       return retval == 0 ? (len + extra + offset) : retval;
     }
 
+#ifdef FEAT_TERMRESPONSE
+    LOG_TR("normal character");
+#endif
+
     return 0;                      /* no match found */
 }
 
@@ -5219,12 +5515,12 @@ find_term_bykeys(src)
     char_u     *src;
 {
     int                i;
-    int                slen;
+    int                slen = (int)STRLEN(src);
 
     for (i = 0; i < tc_len; ++i)
     {
-       slen = termcodes[i].len;
-       if (slen > 1 && STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
+       if (slen == termcodes[i].len
+                       && STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
            return i;
     }
     return -1;
@@ -5433,6 +5729,13 @@ req_more_codes_from_term()
      * many, there can be a buffer overflow somewhere. */
     while (xt_index_out < xt_index_in + 10 && key_names[xt_index_out] != NULL)
     {
+# ifdef DEBUG_TERMRESPONSE
+       char dbuf[100];
+
+       sprintf(dbuf, "Requesting XT %d: %s",
+                                      xt_index_out, key_names[xt_index_out]);
+       log_tr(dbuf);
+# endif
        sprintf(buf, "\033P+q%02x%02x\033\\",
                      key_names[xt_index_out][0], key_names[xt_index_out][1]);
        out_str_nf((char_u *)buf);
@@ -5479,6 +5782,14 @@ got_code_from_term(code, len)
                break;
            }
        }
+# ifdef DEBUG_TERMRESPONSE
+       {
+           char buf[100];
+
+           sprintf(buf, "Received XT %d: %s", xt_index_in, (char *)name);
+           log_tr(buf);
+       }
+# endif
        if (key_names[i] != NULL)
        {
            for (i = 8; (c = hexhex2nr(code + i)) >= 0; i += 2)
@@ -5497,7 +5808,17 @@ got_code_from_term(code, len)
                    set_keep_msg_from_hist();
                    set_color_count(i);
                    init_highlight(TRUE, FALSE);
-                   redraw_later(CLEAR);
+#ifdef DEBUG_TERMRESPONSE
+                   {
+                       char buf[100];
+                       int  r = redraw_asap(CLEAR);
+
+                       sprintf(buf, "Received t_Co, redraw_asap(): %d", r);
+                       log_tr(buf);
+                   }
+#else
+                   redraw_asap(CLEAR);
+#endif
                }
            }
            else
index cc9f8ac..22b60b1 100644 (file)
@@ -83,10 +83,11 @@ enum SpecialKey
 #ifdef FEAT_VERTSPLIT
     KS_CSV,    /* scroll region vertical */
 #endif
-    KS_OP      /* original color pair */
+    KS_OP,     /* original color pair */
+    KS_U7      /* request cursor position */
 };
 
-#define KS_LAST            KS_OP
+#define KS_LAST            KS_U7
 
 /*
  * the terminal capabilities are stored in this array
@@ -158,6 +159,7 @@ extern char_u *(term_strings[]);    /* current terminal strings */
 #define T_CEI  (term_str(KS_CEI))      /* end insert mode */
 #define T_CRV  (term_str(KS_CRV))      /* request version string */
 #define T_OP   (term_str(KS_OP))       /* original color pair */
+#define T_U7   (term_str(KS_U7))       /* request cursor position */
 
 #define TMODE_COOK  0  /* terminal mode for external cmds and Ex mode */
 #define TMODE_SLEEP 1  /* terminal mode for sleeping (cooked but no echo) */
index 2a9a267..ed605e9 100644 (file)
@@ -13,7 +13,7 @@
 #include "vim.h"
 #include "termlib.pro"
 
-#if !defined(AMIGA) && !defined(VMS) && !defined(MACOS) && !defined(RISCOS)
+#if !defined(AMIGA) && !defined(VMS) && !defined(MACOS)
 # include <sgtty.h>
 #endif
 
index a2644cd..0c1e9af 100644 (file)
@@ -13,6 +13,8 @@ VIMPROG = /vim
 # test25       uses symbolic link
 # test27       can't edit file with "*"
 # test52       only for Win32
+# test85       no Lua interface
+# test86, 87   no Python interface
 
 SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
                test7.out test8.out test9.out \
@@ -27,7 +29,11 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
                test56.out test57.out test58.out test59.out test60.out \
                test61.out test62.out test63.out test64.out test65.out \
                test66.out test67.out test68.out test69.out test70.out \
-               test71.out test72.out test73.out
+               test71.out test72.out test73.out test74.out test75.out \
+               test76.out test77.out test78.out test79.out test80.out \
+               test81.out test82.out test83.out test84.out test88.out \
+               test89.out test90.out test91.out test92.out test93.out \
+               test94.out test95.out test96.out test97.out test98.out
 
 .SUFFIXES: .in .out
 
@@ -120,3 +126,25 @@ test70.out: test70.in
 test71.out: test71.in
 test72.out: test72.in
 test73.out: test73.in
+test74.out: test74.in
+test75.out: test75.in
+test76.out: test76.in
+test77.out: test77.in
+test78.out: test78.in
+test79.out: test79.in
+test80.out: test80.in
+test81.out: test81.in
+test82.out: test82.in
+test83.out: test83.in
+test84.out: test84.in
+test88.out: test88.in
+test89.out: test89.in
+test90.out: test90.in
+test91.out: test91.in
+test92.out: test92.in
+test93.out: test93.in
+test94.out: test94.in
+test95.out: test95.in
+test96.out: test96.in
+test97.out: test97.in
+test98.out: test98.in
index 900a637..a57649e 100644 (file)
@@ -11,7 +11,7 @@ VIMPROG = ..\\vim
 # test12       can't unlink a swap file
 # test25       uses symbolic link
 # test27       can't edit file with "*" in file name
-# test31       16 bit version runs out of memory...
+# test97       \{ and \$ are not escaped characters.
 
 SCRIPTS16 =    test1.out test19.out test20.out test22.out \
                test23.out test24.out test28.out test29.out \
@@ -27,7 +27,12 @@ SCRIPTS =    test3.out test4.out test5.out test6.out test7.out \
                test30.out test31.out test32.out test33.out test34.out \
                test37.out test38.out test39.out test40.out test41.out \
                test42.out test52.out test65.out test66.out test67.out \
-               test68.out test69.out test71.out test72.out test73.out
+               test68.out test69.out test71.out test72.out test73.out \
+               test74.out test75.out test76.out test77.out test78.out \
+               test79.out test80.out test81.out test82.out test83.out \
+               test84.out test85.out test86.out test87.out test88.out \
+               test89.out test90.out test91.out test92.out test93.out \
+               test94.out test95.out test96.out test98.out
 
 SCRIPTS32 =    test50.out test70.out
 
@@ -35,40 +40,52 @@ SCRIPTS_GUI = test16.out
 
 .SUFFIXES: .in .out
 
-nongui:        fixff $(SCRIPTS16) $(SCRIPTS)
-       echo ALL DONE
+nongui:        fixff $(SCRIPTS16) $(SCRIPTS) report
 
-small:
-       echo ALL DONE
+small: report
 
-gui:   fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI)
-       echo ALL DONE
+gui:   fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI) report
 
-win32: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS32)
-       echo ALL DONE
+win32: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS32) report
 
 fixff:
        -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
-       -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q dotest.in
+       -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
+               dotest.in test60.ok test71.ok test74.ok
+
+report:
+       @echo ""
+       @echo Test results:
+       @IF EXIST test.log ( type test.log & echo TEST FAILURE & exit /b 1 ) \
+               ELSE ( ECHO ALL DONE )
 
 clean:
        -del *.out
+       -del *.failed
        -if exist test.ok del test.ok
        -if exist small.vim del small.vim
        -if exist tiny.vim del tiny.vim
        -if exist mbyte.vim del mbyte.vim
        -if exist mzscheme.vim del mzscheme.vim
+       -if exist lua.vim del lua.vim
        -del X*
+       -if exist Xdir1 rd /s /q Xdir1
+       -if exist Xfind rd /s /q Xfind
        -if exist viminfo del viminfo
+       -del test.log
 
 .in.out:
+       -if exist $*.failed del $*.failed
        copy $*.ok test.ok
        $(VIMPROG) -u dos.vim -U NONE --noplugin -s dotest.in $*.in
-       diff test.out $*.ok
-       -if exist $*.out del $*.out
-       rename test.out $*.out
+       @diff test.out $*.ok & if errorlevel 1 \
+               ( move /y test.out $*.failed & echo $* FAILED >> test.log ) \
+               else ( move /y test.out $*.out )
        -del X*
-       -del X*.*
        -del test.ok
-       -rmdir /s /q Xfind
+       -if exist Xdir1 rd /s /q Xdir1
+       -if exist Xfind rd /s /q Xfind
        -if exist viminfo del viminfo
+
+nolog:
+       -del test.log
index 2d40ab5..6c1fae0 100644 (file)
@@ -28,7 +28,7 @@ VIMPROG = ..$(DIRSLASH)vim
 # test12       can't unlink a swap file
 # test25       uses symbolic link
 # test27       can't edit file with "*" in file name
-# test31       16 bit version runs out of memory...
+# test97       \{ and \$ are not escaped characters.
 
 SCRIPTS16 =    test1.out test19.out test20.out test22.out \
                test23.out test24.out test28.out test29.out \
@@ -47,7 +47,12 @@ SCRIPTS =    test3.out test4.out test5.out test6.out test7.out \
                test30.out test31.out test32.out test33.out test34.out \
                test37.out test38.out test39.out test40.out test41.out \
                test42.out test52.out test65.out test66.out test67.out \
-               test68.out test69.out test71.out test72.out test72.out
+               test68.out test69.out test71.out test72.out test73.out \
+               test74.out test75.out test76.out test77.out test78.out \
+               test79.out test80.out test81.out test82.out test83.out \
+               test84.out test85.out test86.out test87.out test88.out \
+               test89.out test90.out test91.out test92.out test93.out \
+               test94.out test95.out test96.out test98.out
 
 SCRIPTS32 =    test50.out test70.out
 
@@ -72,6 +77,8 @@ win32:        fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS32)
 
 fixff:
        -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
+       -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
+               dotest.in test60.ok test71.ok test74.ok
 
 clean:
        -$(DEL) *.out
@@ -80,6 +87,7 @@ clean:
        -$(DEL) tiny.vim
        -$(DEL) mbyte.vim
        -$(DEL) mzscheme.vim
+       -$(DEL) lua.vim
        -$(DEL) X*
        -$(DEL) viminfo
 
index 46e9b6c..5741f32 100644 (file)
@@ -13,6 +13,9 @@ VIMPROG = ../vim.exe
 # test25       uses symbolic link
 # test27       can't edit file with "*" in file name
 # test52       only for Win32
+# test85       no Lua interface
+# test86, 87   no Python interface
+# test97       \{ and \$ are not escaped characters.
 
 SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
                test7.out test8.out test9.out \
@@ -27,7 +30,11 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
                test56.out test57.out test58.out test59.out test60.out \
                test61.out test62.out test63.out test64.out test65.out \
                test66.out test67.out test68.out test69.out test70.out \
-               test71.out test72.out test73.out
+               test71.out test72.out test73.out test74.out test75.out \
+               test76.out test77.out test78.out test79.out test80.out \
+               test81.out test82.out test83.out test84.out test88.out \
+               test89.out test90.out test91.out test92.out test93.out \
+               test94.out test95.out test96.out test98.out
 
 .SUFFIXES: .in .out
 
index 4e2c096..e6f6fbc 100644 (file)
@@ -4,7 +4,7 @@
 # Authors:     Zoltan Arpadffy, <arpadffy@polarhome.com>
 #              Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
 #
-# Last change:  2010 Aug 04
+# Last change:  2013 Jul 09
 #
 # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
 # Edit the lines in the Configuration section below to select.
@@ -74,7 +74,11 @@ SCRIPT = test1.out  test2.out  test3.out  test4.out  test5.out  \
         test56.out test57.out test60.out \
         test61.out test62.out test63.out test64.out test65.out \
         test66.out test67.out test68.out test69.out \
-        test71.out test72.out
+        test71.out test72.out test74.out test75.out test76.out \
+        test77.out test78.out test79.out test80.out test81.out \
+        test82.out test83.out test84.out test88.out test89.out \
+        test90.out test91.out test92.out test93.out test94.out \
+        test95.out test96.out test97.out test98.out
 
 # Known problems:
 # Test 30: a problem around mac format - unknown reason
@@ -87,6 +91,7 @@ SCRIPT = test1.out  test2.out  test3.out  test4.out  test5.out  \
 # with too many dots).
 #
 # Test 72: unknown reason
+# Test 85: no Lua interface
 
 .IFDEF WANT_GUI
 SCRIPT_GUI = test16.out
@@ -181,5 +186,6 @@ clean :
        -@ if "''F$SEARCH("small.vim")'"    .NES. "" then delete/noconfirm/nolog small.vim.*
        -@ if "''F$SEARCH("mbyte.vim")'"    .NES. "" then delete/noconfirm/nolog mbyte.vim.*
        -@ if "''F$SEARCH("mzscheme.vim")'" .NES. "" then delete/noconfirm/nolog mzscheme.vim.*
+       -@ if "''F$SEARCH("lua.vim")'" .NES. "" then delete/noconfirm/nolog lua.vim.*
        -@ if "''F$SEARCH("viminfo.*")'"    .NES. "" then delete/noconfirm/nolog viminfo.*.*
 
index 4951dc2..0292dd2 100644 (file)
@@ -10,9 +10,10 @@ VIMPROG = ../vim
 #   This will make testing about 10 times as slow.
 # VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --log-file=valgrind.$*
 
+
 SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
                test7.out test8.out test9.out test10.out test11.out \
-               test12.out  test13.out test14.out test15.out test17.out \
+               test12.out test13.out test14.out test15.out test17.out \
                test18.out test19.out test20.out test21.out test22.out \
                test23.out test24.out test25.out test26.out test27.out \
                test28.out test29.out test30.out test31.out test32.out \
@@ -23,7 +24,12 @@ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
                test54.out test55.out test56.out test57.out test58.out \
                test59.out test60.out test61.out test62.out test63.out \
                test64.out test65.out test66.out test67.out test68.out \
-               test69.out test70.out test71.out test72.out test73.out
+               test69.out test70.out test71.out test72.out test73.out \
+               test74.out test75.out test76.out test77.out test78.out \
+               test79.out test80.out test81.out test82.out test83.out \
+               test84.out test85.out test86.out test87.out test88.out \
+               test89.out test90.out test91.out test92.out test93.out \
+               test94.out test95.out test96.out test97.out test98.out
 
 SCRIPTS_GUI = test16.out
 
@@ -43,12 +49,16 @@ report:
 
 $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
 
+RM_ON_RUN = test.out X* viminfo
+RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok
+RUN_VIM = $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in
+
 clean:
-       -rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* valgrind.pid* viminfo
+       -rm -rf *.out *.failed *.rej *.orig test.log $(RM_ON_RUN) $(RM_ON_START) valgrind.*
 
 test1.out: test1.in
-       -rm -f $*.failed tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* viminfo
-       $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
+       -rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START)
+       $(RUN_VIM) $*.in
        @/bin/sh -c "if diff test.out $*.ok; \
                then mv -f test.out $*.out; \
                else echo; \
@@ -57,18 +67,34 @@ test1.out: test1.in
        -rm -rf X* viminfo
 
 .in.out:
-       -rm -rf $*.failed test.ok test.out X* viminfo
+       -rm -rf $*.failed test.ok $(RM_ON_RUN)
        cp $*.ok test.ok
-       # Sleep a moment to avoid that the xterm title is messed up
-       @-sleep .2
-       -$(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
-       @/bin/sh -c "if test -f test.out; then\
+       # Sleep a moment to avoid that the xterm title is messed up.
+       # 200 msec is sufficient, but only modern sleep supports a fraction of
+       # a second, fall back to a second if it fails.
+       @-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
+       -$(RUN_VIM) $*.in
+
+       # For flaky tests retry one time.
+       @/bin/sh -c "if test -f test.out -a $* = test61; then \
+                 if diff test.out $*.ok; \
+                 then echo flaky test ok first time; \
+                 else rm -rf $*.failed $(RM_ON_RUN); \
+                       $(RUN_VIM) $*.in; \
+                 fi \
+               fi"
+
+       # Check if the test.out file matches test.ok.
+       @/bin/sh -c "if test -f test.out; then \
                  if diff test.out $*.ok; \
                  then mv -f test.out $*.out; \
                  else echo $* FAILED >>test.log; mv -f test.out $*.failed; \
                  fi \
                else echo $* NO OUTPUT >>test.log; \
                fi"
+       @/bin/sh -c "if test -f valgrind; then\
+                 mv -f valgrind valgrind.$*; \
+               fi"
        -rm -rf X* test.ok viminfo
 
 test49.out: test49.vim
index 78ef7e0..ef2d93c 100644 (file)
@@ -13,7 +13,7 @@ Scripts = test1.out test2.out test3.out test4.out test5.out test6.out
                test33.out test34.out test35.out test36.out test37.out
                test38.out test39.out test40.out test41.out test42.out
                test43.out test44.out test45.out test46.out test47.out
-               test48.out test49.out
+               test48.out test49.out test74.out
 
 ScriptsGUI = test16.out
 
diff --git a/src/testdir/python2/module.py b/src/testdir/python2/module.py
new file mode 100644 (file)
index 0000000..e90106a
--- /dev/null
@@ -0,0 +1,2 @@
+import before_1
+dir = '2'
diff --git a/src/testdir/python3/module.py b/src/testdir/python3/module.py
new file mode 100644 (file)
index 0000000..24bd036
--- /dev/null
@@ -0,0 +1,2 @@
+import before_1
+dir = '3'
diff --git a/src/testdir/python_after/after.py b/src/testdir/python_after/after.py
new file mode 100644 (file)
index 0000000..5cf8fa4
--- /dev/null
@@ -0,0 +1,2 @@
+import before_2
+dir = "after"
diff --git a/src/testdir/python_before/before.py b/src/testdir/python_before/before.py
new file mode 100644 (file)
index 0000000..531e81a
--- /dev/null
@@ -0,0 +1 @@
+dir = "before"
diff --git a/src/testdir/python_before/before_1.py b/src/testdir/python_before/before_1.py
new file mode 100644 (file)
index 0000000..fa81ada
--- /dev/null
@@ -0,0 +1 @@
+# empty file
diff --git a/src/testdir/python_before/before_2.py b/src/testdir/python_before/before_2.py
new file mode 100644 (file)
index 0000000..fa81ada
--- /dev/null
@@ -0,0 +1 @@
+# empty file
diff --git a/src/testdir/pythonx/failing.py b/src/testdir/pythonx/failing.py
new file mode 100644 (file)
index 0000000..30e73a0
--- /dev/null
@@ -0,0 +1 @@
+raise NotImplementedError
diff --git a/src/testdir/pythonx/failing_import.py b/src/testdir/pythonx/failing_import.py
new file mode 100644 (file)
index 0000000..511cae7
--- /dev/null
@@ -0,0 +1 @@
+raise ImportError
diff --git a/src/testdir/pythonx/module.py b/src/testdir/pythonx/module.py
new file mode 100644 (file)
index 0000000..6bf5a64
--- /dev/null
@@ -0,0 +1 @@
+dir = 'x'
diff --git a/src/testdir/pythonx/modulex.py b/src/testdir/pythonx/modulex.py
new file mode 100644 (file)
index 0000000..ec6a706
--- /dev/null
@@ -0,0 +1 @@
+ddir = 'xx'
diff --git a/src/testdir/pythonx/topmodule/__init__.py b/src/testdir/pythonx/topmodule/__init__.py
new file mode 100644 (file)
index 0000000..792d600
--- /dev/null
@@ -0,0 +1 @@
+#
diff --git a/src/testdir/pythonx/topmodule/submodule/__init__.py b/src/testdir/pythonx/topmodule/submodule/__init__.py
new file mode 100644 (file)
index 0000000..792d600
--- /dev/null
@@ -0,0 +1 @@
+#
diff --git a/src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py b/src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py
new file mode 100644 (file)
index 0000000..792d600
--- /dev/null
@@ -0,0 +1 @@
+#
diff --git a/src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py b/src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py
new file mode 100644 (file)
index 0000000..792d600
--- /dev/null
@@ -0,0 +1 @@
+#
index a3b5841..c175fa5 100644 (file)
@@ -15,6 +15,7 @@ If Vim was not compiled with the +multi_byte feature, the mbyte.vim script will
 be set like small.vim above.  mbyte.vim is sourced by tests that require the
 +multi_byte feature.
 Similar logic is applied to the +mzscheme feature, using mzscheme.vim.
+Similar logic is applied to the +lua feature, using lua.vim.
 
 STARTTEST
 :" Write a single line to test.out to check if testing works at all.
@@ -28,10 +29,17 @@ w! test.out
 qa!
 \e:w! mbyte.vim
 :w! mzscheme.vim
+:w! lua.vim
+:"
 :" If +multi_byte feature supported, make mbyte.vim empty.
 :if has("multi_byte") | sp another | w! mbyte.vim | q | endif
+:"
 :" If +mzscheme feature supported, make mzscheme.vim empty.
 :if has("mzscheme") | sp another | w! mzscheme.vim | q | endif
+:"
+:" If +lua feature supported, make lua.vim empty.
+:if has("lua") | sp another | w! lua.vim | q | endif
+:"
 :" If +eval feature supported quit here, leaving tiny.vim and small.vim empty.
 :" Otherwise write small.vim to skip the test.
 :if 1 | q! | endif
index 6d0c721..2d0d546 100644 (file)
@@ -2,56 +2,113 @@ Test for 'errorformat'.  This will fail if the quickfix feature was disabled.
 
 STARTTEST
 :so small.vim
-:/start of errorfile/,/end of errorfile/w! Xerrorfile
+:" Also test a BOM is ignored.
+:so mbyte.vim
+:set encoding=utf-8
+:7/start of errorfile/,/end of errorfile/w! Xerrorfile1
+:7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
 :/start of testfile/,/end of testfile/w! Xtestfile
-:cf Xerrorfile
-rA
+:set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m
+:set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m
+:cf Xerrorfile2
+:clast
+:copen
+:let a=w:quickfix_title
+:wincmd p
+lgR\12=a\r\e
+:cf Xerrorfile1
+grA
 :cn
-rB
+gRLINE 6, COL 19\e
 :cn
-rC
+gRNO COLUMN SPECIFIED\e
 :cn
-rD
+gRAGAIN NO COLUMN\e
 :cn
-rE
+gRCOL 1\e
+:cn
+gRCOL 2\e
+:cn
+gRCOL 10\e
+:cn
+gRVCOL 10\e
+:cn
+grI
+:cn
+gR. SPACE POINTER\e
+:cn
+gR. DOT POINTER\e
+:cn
+gR. DASH POINTER\e
+:cn
+gR. TAB-SPACE POINTER\e
+:clast
+:cprev
+:cprev
+:wincmd w
+:let a=w:quickfix_title
+:wincmd p
+lgR\12=a\r\e
 :w! test.out             " Write contents of this file
 :qa!
 ENDTEST
 
 start of errorfile
 "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
-"Xtestfile", line 7 col 19; this is an error
+"Xtestfile", line 6 col 19; this is an error
 gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include  version.c
-Xtestfile:13: parse error before `asd'
+Xtestfile:9: parse error before `asd'
 make: *** [vim] Error 1
-in file "Xtestfile" linenr 16: there is an error
+in file "Xtestfile" linenr 10: there is an error
 
 2 returned
-"Xtestfile", linenr 19: yet another problem
+"Xtestfile", line 11 col 1; this is an error
+"Xtestfile", line 12 col 2; this is another error
+"Xtestfile", line 14:10; this is an error in column 10
+=Xtestfile=, line 15:10; this is another error, but in vcol 10 this time
+"Xtestfile", linenr 16: yet another problem
+Error in "Xtestfile" at line 17:
+x should be a dot
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17
+            ^
+Error in "Xtestfile" at line 18:
+x should be a dot
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18
+.............^
+Error in "Xtestfile" at line 19:
+x should be a dot
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19
+--------------^
+Error in "Xtestfile" at line 20:
+x should be a dot
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20
+              ^
 
 Does anyone know what is the problem and how to correction it?
+"Xtestfile", line 21 col 9: What is the title of the quickfix window?
+"Xtestfile", line 22 col 9: What is the title of the quickfix window?
 end of errorfile
 
 start of testfile
-line 2  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 3  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 4  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 5  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 6  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 7  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 8  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 9  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  2
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  3
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  4
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  5
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  6
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  7
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  8
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  9
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 10
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 11
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 12
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 13
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 14
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 15
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 16
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 21
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 22
 end of testfile
index 2c86889..76a02f4 100644 (file)
@@ -1,23 +1,23 @@
 start of testfile
-line 2  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 3  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 4  xxxAxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 5  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 6  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 7  xxxxxxxxxxBxxxxxxxxxxxxxxxxxxx
-line 8  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 9  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-Cine 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-Dine 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-Eine 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  2
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  3
+       xxxxxxxxxxAxxxxxxxxxxxxxxxxxxx    line  4
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  5
+       xxxxxxxxxxxxxxxxxLINE 6, COL 19   line  6
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  7
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  8
+       NO COLUMN SPECIFIEDxxxxxxxxxxx    line  9
+       AGAIN NO COLUMNxxxxxxxxxxxxxxx    line 10
+COL 1  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 11
+       COL 2xxxxxxxxxxxxxxxxxxxxxxxxx    line 12
+       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 13
+       xxxxxxxxCOL 10xxxxxxxxxxxxxxxx    line 14
+       xVCOL 10xxxxxxxxxxxxxxxxxxxxxx    line 15
+       Ixxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 16
+       xxxx. SPACE POINTERxxxxxxxxxxx    line 17
+       xxxxx. DOT POINTERxxxxxxxxxxxx    line 18
+       xxxxxx. DASH POINTERxxxxxxxxxx    line 19
+       xxxxxxx. TAB-SPACE POINTERxxxx    line 20
+       xxxxxxxx:cf Xerrorfile1xxxxxxx    line 21
+       xxxxxxxx:cf Xerrorfile2xxxxxxx    line 22
 end of testfile
index 05c8025..ebcb58c 100644 (file)
@@ -2,6 +2,7 @@ Tests for "vaBiB", end could be wrong.
 Also test ":s/pat/sub/" with different ~s in sub.
 Also test for ^Vxff and ^Vo123 in Insert mode.
 Also test "[m", "]m", "[M" and "]M"
+Also test search()
 
 STARTTEST
 :so small.vim
@@ -34,6 +35,19 @@ j2]MaH\e:.w >>test.out
 2[MaJ\e:.w >>test.out
 k[MaK\e:.w >>test.out
 3[MaL\e:.w >>test.out
+:"
+/^foobar
+:let startline = line('.')
+:call search('foobar', 'c')
+:call append(line('$'), line('.') - startline)
+j:call search('^$', 'c')
+:call append(line('$'), line('.') - startline)
+:call search('^$', 'bc')
+:call append(line('$'), line('.') - startline)
+/two
+:call search('.', 'c')
+:call append(line('$'), getline('.')[col('.') - 1:])
+:/^search()/,$w >>test.out
 :qa!
 ENDTEST
 
@@ -64,3 +78,9 @@ Piece of Java
                }
        } e3
 }
+
+foobar
+
+
+one two
+search()
index e893ba8..1fd8916 100644 (file)
@@ -15,3 +15,8 @@ ABC !a\ fg\a8
        }JH e3
        }K e2
 {LF
+search()
+0
+1
+1
+two
index aa00517..b2cd159 100644 (file)
@@ -2,6 +2,7 @@ Tests for resetting "secure" flag after GUI has started.
 For KDE set a font, empty 'guifont' may cause a hang.
 
 STARTTEST
+:if $DISPLAY == "" | e! test.ok | wq! test.out | endif
 :set exrc secure
 :if has("gui_kde")
 :  set guifont=Courier\ 10\ Pitch/8/-1/5/50/0/0/0/0/0
index e59144f..bc542c7 100644 (file)
@@ -1,4 +1,6 @@
-Tests for "gf" on ${VAR}
+Tests for:
+- "gf" on ${VAR},
+- ":checkpath!" with various 'include' settings.
 
 STARTTEST
 :so small.vim
@@ -7,6 +9,13 @@ STARTTEST
 :else
 : set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,}
 :endif
+:function! DeleteDirectory(dir)
+: if has("win16") || has("win32") || has("win64") || has("dos16") || has("dos32")
+:  exec "silent !rmdir /Q /S " . a:dir
+: else
+:  exec "silent !rm -rf " . a:dir
+: endif
+:endfun
 :if has("unix")
 :let $CDIR = "."
 /CDIR
@@ -18,10 +27,115 @@ STARTTEST
 :endif
 /TDIR
 :endif
+:" Dummy writing for making that sure gf doesn't fail even if the current
+:" file is modified. It can be occurred when executing the following command
+:" directly on Windows without fixing the 'fileformat':
+:"  > nmake -f Make_dos.mak test17.out
+:w! test.out
 gf
+:set ff=unix
 :w! test.out
-:qa!
+:brewind
 ENDTEST
 
        ${CDIR}/test17a.in
        $TDIR/test17a.in
+
+STARTTEST
+:" check for 'include' without \zs or \ze
+:lang C
+:call delete("./Xbase.a")
+:call DeleteDirectory("Xdir1")
+:!mkdir Xdir1
+:!mkdir "Xdir1/dir2"
+:e! Xdir1/dir2/foo.a
+i#include   "bar.a"\e
+:w
+:e Xdir1/dir2/bar.a
+i#include      "baz.a"\e
+:w
+:e Xdir1/dir2/baz.a
+i#include            "foo.a"\e
+:w
+:e Xbase.a
+:set path=Xdir1/dir2
+i#include    <foo.a>\e
+:w
+:redir! >>test.out
+:checkpath!
+:redir END
+:brewind
+ENDTEST
+
+STARTTEST
+:" check for 'include' with \zs and \ze
+:call delete("./Xbase.b")
+:call DeleteDirectory("Xdir1")
+:!mkdir Xdir1
+:!mkdir "Xdir1/dir2"
+:let &include='^\s*%inc\s*/\zs[^/]\+\ze'
+:function! DotsToSlashes()
+:  return substitute(v:fname, '\.', '/', 'g') . '.b'
+:endfunction
+:let &includeexpr='DotsToSlashes()'
+:e! Xdir1/dir2/foo.b
+i%inc   /bar/\e
+:w
+:e Xdir1/dir2/bar.b
+i%inc      /baz/\e
+:w
+:e Xdir1/dir2/baz.b
+i%inc            /foo/\e
+:w
+:e Xbase.b
+:set path=Xdir1/dir2
+i%inc    /foo/\e
+:w
+:redir! >>test.out
+:checkpath!
+:redir END
+:brewind
+ENDTEST
+
+STARTTEST
+:" check for 'include' with \zs and no \ze
+:call delete("./Xbase.c")
+:call DeleteDirectory("Xdir1")
+:!mkdir Xdir1
+:!mkdir "Xdir1/dir2"
+:let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
+:function! StripNewlineChar()
+:  if v:fname =~ '\n$'
+:    return v:fname[:-2]
+:  endif
+:  return v:fname
+:endfunction
+:let &includeexpr='StripNewlineChar()'
+:e! Xdir1/dir2/foo.c
+i%inc   bar.c\e
+:w
+:e Xdir1/dir2/bar.c
+i%inc      baz.c\e
+:w
+:e Xdir1/dir2/baz.c
+i%inc            foo.c\e
+:w
+:e Xdir1/dir2/FALSE.c
+i%inc            foo.c\e
+:w
+:e Xbase.c
+:set path=Xdir1/dir2
+i%inc    FALSE.c foo.c\e
+:w
+:redir! >>test.out
+:checkpath!
+:redir END
+:brewind
+:" change "\" to "/" for Windows and fix 'fileformat'
+:e test.out
+:%s#\\#/#g
+:set ff&
+:w
+:q
+ENDTEST
+
index 7e89364..b2a66d5 100644 (file)
@@ -1,3 +1,33 @@
 This file is just to test "gf" in test 17.
 The contents is not important.
 Just testing!
+
+
+--- Included files in path ---
+Xdir1/dir2/foo.a
+Xdir1/dir2/foo.a -->
+  Xdir1/dir2/bar.a
+  Xdir1/dir2/bar.a -->
+    Xdir1/dir2/baz.a
+    Xdir1/dir2/baz.a -->
+      "foo.a"  (Already listed)
+
+
+--- Included files in path ---
+Xdir1/dir2/foo.b
+Xdir1/dir2/foo.b -->
+  Xdir1/dir2/bar.b
+  Xdir1/dir2/bar.b -->
+    Xdir1/dir2/baz.b
+    Xdir1/dir2/baz.b -->
+      foo  (Already listed)
+
+
+--- Included files in path ---
+Xdir1/dir2/foo.c
+Xdir1/dir2/foo.c -->
+  Xdir1/dir2/bar.c
+  Xdir1/dir2/bar.c -->
+    Xdir1/dir2/baz.c
+    Xdir1/dir2/baz.c -->
+      foo.c  (Already listed)
index bdcfb77..aafa34e 100644 (file)
@@ -1,6 +1,8 @@
 Tests for "r<Tab>" with 'smarttab' and 'expandtab' set/not set.
+Also test that dv_ works correctly
 
 STARTTEST
+:so small.vim
 :set smarttab expandtab ts=8 sw=4
 :" make sure that backspace works, no matter what termcap is used
 :set t_kD=\16x7f t_kb=\16x08
@@ -12,7 +14,12 @@ r
 0wR                    \b\b\b\e
 :" Test replacing with Tabs
 0wR                    \e
-:?^start?,$w! test.out
+:" Test that copyindent works with expandtab set
+:set expandtab smartindent copyindent ts=8 sw=8 sts=8
+o{
+x\e:set nosol
+/Second line/
+fwdv_:?^start?,$w! test.out
 :qa!
 ENDTEST
 
@@ -23,3 +30,4 @@ test text
     a cde
     f ghi
 test text
+  Second line beginning with whitespace
index ba4eb63..4146214 100644 (file)
@@ -5,3 +5,6 @@ test text
     a cde
                hi
 test text
+{
+        x
+  with whitespace
index 80eb90b..7dfc1af 100644 (file)
Binary files a/src/testdir/test24.in and b/src/testdir/test24.in differ
index ed25dd4..cd61210 100644 (file)
@@ -27,3 +27,6 @@ xx foobar xA xx
 xx an A xx
 XX 9;
 YY 77;
+ xyz 
+ bcd
+ BB
index 6c7d3d5..2df2f70 100644 (file)
@@ -4,16 +4,17 @@ Test for joining lines and marks in them
  and with 'cpoptions' flag 'j' set or not
 
 STARTTEST
+:so small.vim
 :set nocompatible viminfo+=nviminfo
 :set nojoinspaces
 :set cpoptions-=j
 /firstline/
-j"tdGpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+j"td/^STARTTEST/-1
+PJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
 j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j joinspaces
 j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
 j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j nojoinspaces compatible
-j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjdG:?firstline?+1,$w! test.out
-:qa!
+j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjd/STARTTEST/-2
 ENDTEST
 
 firstline
@@ -54,3 +55,148 @@ as dfg?
 hjkl iop!
 ert
 
+STARTTEST
+/^{/+1
+:set comments=s1:/*,mb:*,ex:*/,://
+:set nojoinspaces fo=j
+:set backspace=eol,start
+:.,+3join
+j4J
+:.,+2join
+j3J
+:.,+2join
+j3J
+:.,+2join
+jj3J
+ENDTEST
+
+{
+
+/*
+ * Make sure the previous comment leader is not removed.
+ */
+
+/*
+ * Make sure the previous comment leader is not removed.
+ */
+
+// Should the next comment leader be left alone?
+// Yes.
+
+// Should the next comment leader be left alone?
+// Yes.
+
+/* Here the comment leader should be left intact. */
+// And so should this one.
+
+/* Here the comment leader should be left intact. */
+// And so should this one.
+
+if (condition) // Remove the next comment leader!
+               // OK, I will.
+    action();
+
+if (condition) // Remove the next comment leader!
+               // OK, I will.
+    action();
+}
+
+STARTTEST
+/^{/+1
+:set comments=sO:*\ -,mO:*\ \ ,exO:*/
+:set comments+=s1:/*,mb:*,ex:*/,://
+:set comments+=s1:>#,mb:#,ex:#<,:<
+:set cpoptions-=j joinspaces fo=j
+:set backspace=eol,start
+:.,+3join
+j4J
+:.,+8join
+j9J
+:.,+2join
+j3J
+:.,+2join
+j3J
+:.,+2join
+jj3J
+j:.,+2join
+jj3J
+j:.,+5join
+j6J
+oSome code!\r// Make sure backspacing does not remove this comment leader.\e0i\b\e
+ENDTEST
+
+{
+
+/*
+ * Make sure the previous comment leader is not removed.
+ */
+
+/*
+ * Make sure the previous comment leader is not removed.
+ */
+
+/* List:
+ * - item1
+ *   foo bar baz
+ *   foo bar baz
+ * - item2
+ *   foo bar baz
+ *   foo bar baz
+ */
+
+/* List:
+ * - item1
+ *   foo bar baz
+ *   foo bar baz
+ * - item2
+ *   foo bar baz
+ *   foo bar baz
+ */
+
+// Should the next comment leader be left alone?
+// Yes.
+
+// Should the next comment leader be left alone?
+// Yes.
+
+/* Here the comment leader should be left intact. */
+// And so should this one.
+
+/* Here the comment leader should be left intact. */
+// And so should this one.
+
+if (condition) // Remove the next comment leader!
+               // OK, I will.
+    action();
+
+if (condition) // Remove the next comment leader!
+               // OK, I will.
+    action();
+
+int i = 7 /* foo *// 3
+ // comment
+ ;
+
+int i = 7 /* foo *// 3
+ // comment
+ ;
+
+># Note that the last character of the ending comment leader (left angle
+ # bracket) is a comment leader itself. Make sure that this comment leader is
+ # not removed from the next line #<
+< On this line a new comment is opened which spans 2 lines. This comment should
+< retain its comment leader.
+
+># Note that the last character of the ending comment leader (left angle
+ # bracket) is a comment leader itself. Make sure that this comment leader is
+ # not removed from the next line #<
+< On this line a new comment is opened which spans 2 lines. This comment should
+< retain its comment leader.
+
+}
+
+STARTTEST
+:g/^STARTTEST/.,/^ENDTEST/d
+:?firstline?+1,$w! test.out
+:qa!
+ENDTEST
index 97abf08..902d52f 100644 (file)
@@ -47,3 +47,42 @@ asdfasdf      asdf
 asdfasdf       asdf
 asdfasdf               asdf
 zx cvn.  as dfg? hjkl iop! ert  a
+
+
+{
+/* Make sure the previous comment leader is not removed. */
+/* Make sure the previous comment leader is not removed. */
+// Should the next comment leader be left alone? Yes.
+// Should the next comment leader be left alone? Yes.
+/* Here the comment leader should be left intact. */ // And so should this one.
+/* Here the comment leader should be left intact. */ // And so should this one.
+if (condition) // Remove the next comment leader! OK, I will.
+    action();
+if (condition) // Remove the next comment leader! OK, I will.
+    action();
+}
+
+
+{
+/* Make sure the previous comment leader is not removed.  */
+/* Make sure the previous comment leader is not removed.  */
+/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
+/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
+// Should the next comment leader be left alone?  Yes.
+// Should the next comment leader be left alone?  Yes.
+/* Here the comment leader should be left intact. */ // And so should this one.
+/* Here the comment leader should be left intact. */ // And so should this one.
+if (condition) // Remove the next comment leader!  OK, I will.
+    action();
+if (condition) // Remove the next comment leader!  OK, I will.
+    action();
+int i = 7 /* foo *// 3 // comment
+ ;
+int i = 7 /* foo *// 3 // comment
+ ;
+># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
+># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
+
+Some code!// Make sure backspacing does not remove this comment leader.
+}
+
index 35582bd..a754394 100644 (file)
@@ -299,18 +299,39 @@ char *(array[100]) = {
 
 enum soppie
 {
-       yes = 0,
-       no,
-       maybe
+yes = 0,
+no,
+maybe
 };
 
 typedef enum soppie
 {
-       yes = 0,
-       no,
-       maybe
+yes = 0,
+no,
+maybe
 };
 
+static enum
+{
+yes = 0,
+no,
+maybe
+} soppie;
+
+public static enum
+{
+yes = 0,
+no,
+maybe
+} soppie;
+
+static private enum
+{
+yes = 0,
+no,
+maybe
+} soppie;
+
 {
        int a,
                b;
@@ -799,6 +820,69 @@ main()
        df */
                hello
 }
+
+/* valid namespaces with normal indent */
+namespace
+{
+{
+  111111111111;
+}
+}
+namespace /* test */
+{
+  11111111111111111;
+}
+namespace // test
+{
+  111111111111111111;
+}
+namespace
+{
+  111111111111111111;
+}
+namespace test
+{
+  111111111111111111;
+}
+namespace{
+  111111111111111111;
+}
+namespace test{
+  111111111111111111;
+}
+namespace {
+  111111111111111111;
+}
+namespace test {
+  111111111111111111;
+namespace test2 {
+  22222222222222222;
+}
+}
+
+/* invalid namespaces use block indent */
+namespace test test2 {
+  111111111111111111111;
+}
+namespace11111111111 {
+  111111111111;
+}
+namespace() {
+  1111111111111;
+}
+namespace()
+{
+  111111111111111111;
+}
+namespace test test2
+{
+  1111111111111111111;
+}
+namespace111111111
+{
+  111111111111111111;
+}
+
 /* end of AUTO */
 
 STARTTEST
@@ -907,6 +991,24 @@ main ( int first_par, /*
 
 STARTTEST
 :set cin
+:set cino=es,n0s
+/main
+=][
+ENDTEST
+
+main(void)
+{
+       /* Make sure that cino=X0s is not parsed like cino=Xs. */
+       if (cond)
+               foo();
+       else
+       {
+               bar();
+       }
+}
+
+STARTTEST
+:set cin
 :set cino=
 ]]=][
 ENDTEST
@@ -1246,6 +1348,20 @@ protected:
 };
 
 STARTTEST
+:set cino=(0,gs,hs
+2kdd]]=][
+ENDTEST
+
+class Foo : public Bar
+{
+public:
+virtual void method1(void) = 0;
+virtual void method2(int arg1,
+int arg2,
+int arg3) = 0;
+};
+
+STARTTEST
 :set cino=+20
 2kdd]]=][
 ENDTEST
@@ -1315,6 +1431,626 @@ int main ()
 }
 
 STARTTEST
+:set cino=(0,ts
+2kdd=][
+ENDTEST
+
+void func(int a
+#if defined(FOO)
+                 , int b
+                 , int c
+#endif
+                )
+{
+}
+
+STARTTEST
+:set cino=(0
+2kdd=][
+ENDTEST
+
+void
+func(int a
+#if defined(FOO)
+                 , int b
+                 , int c
+#endif
+                )
+{
+}
+
+STARTTEST
+:set cino&
+2kdd=7][
+ENDTEST
+
+void func(void)
+{
+       if(x==y)
+               if(y==z)
+                       foo=1;
+               else { bar=1;
+                       baz=2;
+               }
+       printf("Foo!\n");
+}
+
+void func1(void)
+{
+       char* tab[] = {"foo", "bar",
+               "baz", "quux",
+                       "this line used", "to be indented incorrectly"};
+       foo();
+}
+
+void func2(void)
+{
+       int tab[] =
+       {1, 2,
+               3, 4,
+               5, 6};
+
+               printf("This line used to be indented incorrectly.\n");
+}
+
+int foo[]
+#ifdef BAR
+
+= { 1, 2, 3,
+       4, 5, 6 }
+
+#endif
+;
+       int baz;
+
+void func3(void)
+{
+       int tab[] = {
+       1, 2,
+       3, 4,
+       5, 6};
+
+printf("Don't you dare indent this line incorrectly!\n");
+}
+
+void
+func4(a, b,
+               c)
+int a;
+int b;
+int c;
+{
+}
+
+void
+func5(
+               int a,
+               int b)
+{
+}
+
+void
+func6(
+               int a)
+{
+}
+
+STARTTEST
+:set cino&
+:set cino+=l1
+2kdd=][
+ENDTEST
+
+void func(void)
+{
+       int tab[] =
+       {
+               1, 2, 3,
+               4, 5, 6};
+
+       printf("Indent this line correctly!\n");
+
+       switch (foo)
+       {
+               case bar:
+                       printf("bar");
+                       break;
+               case baz: {
+                       printf("baz");
+                       break;
+               }
+               case quux:
+printf("But don't break the indentation of this instruction\n");
+break;
+       }
+}
+
+STARTTEST
+:set cino&
+2kdd=][
+ENDTEST
+
+void func(void)
+{
+       cout << "a"
+       << "b"
+       << ") :"
+       << "c";
+}
+
+STARTTEST
+:set com=s1:/*,m:*,ex:*/
+]]3jofoo();\e
+ENDTEST
+
+void func(void)
+{
+       /*
+        * This is a comment.
+        */
+}
+
+STARTTEST
+:set cino&
+2kdd=][
+ENDTEST
+
+void func(void)
+{
+       for (int i = 0; i < 10; ++i)
+               if (i & 1) {
+                       foo(1);
+               } else
+                       foo(0);
+baz();
+}
+
+STARTTEST
+:set cino=k2s,(0
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+
+       if (   c1
+       && (      c2
+       || c3))
+       foo;
+       func( c1
+       && (     c2
+       || c3))
+       foo;
+}
+
+STARTTEST
+:set cino=k2s,(s
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+
+       if (   c1
+       && (      c2
+       || c3))
+       foo;
+       func(   c1
+       && (      c2
+       || c3))
+       foo;
+}
+
+STARTTEST
+:set cino=k2s,(s,U1
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+       if (c123456789
+       && (c22345
+       || c3))
+       printf("foo\n");
+
+       c = c1 &&
+       (
+       c2 ||
+       c3
+       ) && c4;
+}
+
+STARTTEST
+:set cino=k2s,(0,W4
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+       if (c123456789
+       && (c22345
+       || c3))
+       printf("foo\n");
+
+       if (   c1
+       && (   c2
+       || c3))
+       foo;
+
+       a_long_line(
+       argument,
+       argument);
+       a_short_line(argument,
+       argument);
+}
+
+STARTTEST
+:set cino=k2s,u2
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+       if (c123456789
+       && (c22345
+       || c3))
+       printf("foo\n");
+}
+
+STARTTEST
+:set cino=k2s,(0,w1
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+       if (condition1
+       && condition2)
+       action();
+       function(argument1
+       && argument2);
+
+       if (c1 && (c2 ||
+       c3))
+       foo;
+       if (c1 &&
+       (c2 || c3))
+       {
+       }
+       if (c123456789
+       && (c22345
+       || c3))
+       printf("foo\n");
+
+       if (   c1
+       && (      c2
+       || c3))
+       foo;
+       func(   c1
+       && (      c2
+       || c3))
+       foo;
+}
+
+STARTTEST
+:set cino=k2,(s
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+       if (condition1
+         && condition2)
+               action();
+       function(argument1
+               && argument2);
+
+       if (c1 && (c2 ||
+                 c3))
+               foo;
+       if (c1 &&
+         (c2 || c3))
+       {
+       }
+}
+
+STARTTEST
+:set cino=N-s
+/^NAMESPACESTART
+=/^NAMESPACEEND
+ENDTEST
+
+NAMESPACESTART
+/* valid namespaces with normal indent */
+namespace
+{
+   {
+       111111111111;
+}
+}
+namespace /* test */
+{
+  11111111111111111;
+}
+namespace // test
+{
+  111111111111111111;
+}
+namespace
+{
+  111111111111111111;
+}
+namespace test
+{
+  111111111111111111;
+}
+namespace{
+  111111111111111111;
+}
+namespace test{
+  111111111111111111;
+}
+namespace {
+  111111111111111111;
+}
+namespace test {
+  111111111111111111;
+namespace test2 {
+  22222222222222222;
+}
+}
+
+/* invalid namespaces use block indent */
+namespace test test2 {
+  111111111111111111111;
+}
+namespace11111111111 {
+  111111111111;
+}
+namespace() {
+  1111111111111;
+}
+namespace()
+{
+  111111111111111111;
+}
+namespace test test2
+{
+  1111111111111111111;
+}
+namespace111111111
+{
+  111111111111111111;
+}
+NAMESPACEEND
+
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+var bar = {
+foo: {
+that: this,
+some: ok,
+},
+"bar":{
+a : 2,
+b: "123abc",
+x: 4,
+"y": 5
+}
+}
+JSEND
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+var foo = [
+1,  // indent 8 more
+2,
+3
+];  // indent 8 less
+JSEND
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+function bar() {
+var foo = [
+1,
+2,
+3
+];  // indent 16 less
+}
+JSEND
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+(function($){
+
+var class_name='myclass';
+
+function private_method() {
+}
+
+var public_method={
+method: function(options,args){
+private_method();
+}
+}
+
+function init(options) {
+
+$(this).data(class_name+'_public',$.extend({},{
+foo: 'bar',
+bar: 2,  // indent 8 more
+foobar: [  // indent 8 more
+1,  // indent 8 more
+2,  // indent 16 more
+3   // indent 16 more
+],
+callback: function(){  // indent 8 more
+return true;  // indent 8 more
+}  // indent 8 more
+}, options||{}));
+}
+
+$.fn[class_name]=function() {
+
+var _arguments=arguments;
+return this.each(function(){
+
+var options=$(this).data(class_name+'_public');
+if (!options) {
+init.apply(this,_arguments);
+
+} else {
+var method=public_method[_arguments[0]];
+
+if (typeof(method)!='function') {
+console.log(class_name+' has no method "'+_arguments[0]+'"');
+return false;
+}
+_arguments[0]=options;
+method.apply(this,_arguments);
+}
+});
+}
+
+})(jQuery);
+JSEND
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+function init(options) {
+$(this).data(class_name+'_public',$.extend({},{
+foo: 'bar',
+bar: 2,
+foobar: [
+1,  // indent 8 more
+2,  // indent 8 more
+3   // indent 8 more
+],
+callback: function(){
+return true;
+}
+}, options||{}));
+}
+JSEND
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+(function($){
+function init(options) {
+$(this).data(class_name+'_public',$.extend({},{
+foo: 'bar',
+bar: 2,  // indent 8 more
+foobar: [  // indent 8 more
+1,  // indent 8 more
+2,  // indent 16 more
+3  // indent 16 more
+],
+callback: function(){  // indent 8 more
+return true;  // indent 8 more
+}  // indent 8 more
+}, options||{}));
+}
+})(jQuery);
+JSEND
+
+STARTTEST
 :g/^STARTTEST/.,/^ENDTEST/d
 :1;/start of AUTO/,$wq! test.out
 ENDTEST
index 8c015a3..d73a5e1 100644 (file)
@@ -299,6 +299,27 @@ typedef enum soppie
        maybe
 };
 
+static enum
+{
+       yes = 0,
+       no,
+       maybe
+} soppie;
+
+public static enum
+{
+       yes = 0,
+       no,
+       maybe
+} soppie;
+
+static private enum
+{
+       yes = 0,
+       no,
+       maybe
+} soppie;
+
 {
        int a,
                b;
@@ -787,6 +808,69 @@ main()
           df */
        hello
 }
+
+/* valid namespaces with normal indent */
+namespace
+{
+       {
+               111111111111;
+       }
+}
+namespace /* test */
+{
+       11111111111111111;
+}
+namespace // test
+{
+       111111111111111111;
+}
+namespace
+{
+       111111111111111111;
+}
+namespace test
+{
+       111111111111111111;
+}
+namespace{
+       111111111111111111;
+}
+namespace test{
+       111111111111111111;
+}
+namespace {
+       111111111111111111;
+}
+namespace test {
+       111111111111111111;
+       namespace test2 {
+               22222222222222222;
+       }
+}
+
+/* invalid namespaces use block indent */
+namespace test test2 {
+       111111111111111111111;
+}
+namespace11111111111 {
+       111111111111;
+}
+namespace() {
+       1111111111111;
+}
+namespace()
+{
+       111111111111111111;
+}
+namespace test test2
+{
+       1111111111111111111;
+}
+namespace111111111
+{
+       111111111111111111;
+}
+
 /* end of AUTO */
 
 
@@ -870,6 +954,18 @@ main ( int first_par, /*
 }
 
 
+main(void)
+{
+       /* Make sure that cino=X0s is not parsed like cino=Xs. */
+       if (cond)
+               foo();
+       else
+       {
+               bar();
+       }
+}
+
+
 {
        do
        {
@@ -1127,6 +1223,16 @@ protected:
 };
 
 
+class Foo : public Bar
+{
+       public:
+               virtual void method1(void) = 0;
+               virtual void method2(int arg1,
+                                                        int arg2,
+                                                        int arg3) = 0;
+};
+
+
        void
 foo()
 {
@@ -1183,3 +1289,532 @@ int main ()
                foo;
 }
 
+
+void func(int a
+#if defined(FOO)
+                 , int b
+                 , int c
+#endif
+                )
+{
+}
+
+
+       void
+func(int a
+#if defined(FOO)
+        , int b
+        , int c
+#endif
+       )
+{
+}
+
+
+void func(void)
+{
+       if(x==y)
+               if(y==z)
+                       foo=1;
+               else { bar=1;
+                       baz=2;
+               }
+       printf("Foo!\n");
+}
+
+void func1(void)
+{
+       char* tab[] = {"foo", "bar",
+               "baz", "quux",
+               "this line used", "to be indented incorrectly"};
+       foo();
+}
+
+void func2(void)
+{
+       int tab[] =
+       {1, 2,
+               3, 4,
+               5, 6};
+
+       printf("This line used to be indented incorrectly.\n");
+}
+
+int foo[]
+#ifdef BAR
+
+= { 1, 2, 3,
+       4, 5, 6 }
+
+#endif
+       ;
+int baz;
+
+void func3(void)
+{
+       int tab[] = {
+               1, 2,
+               3, 4,
+               5, 6};
+
+       printf("Don't you dare indent this line incorrectly!\n");
+}
+
+       void
+func4(a, b,
+               c)
+       int a;
+       int b;
+       int c;
+{
+}
+
+       void
+func5(
+               int a,
+               int b)
+{
+}
+
+       void
+func6(
+               int a)
+{
+}
+
+
+void func(void)
+{
+       int tab[] =
+       {
+               1, 2, 3,
+               4, 5, 6};
+
+       printf("Indent this line correctly!\n");
+
+       switch (foo)
+       {
+               case bar:
+                       printf("bar");
+                       break;
+               case baz: {
+                       printf("baz");
+                       break;
+               }
+               case quux:
+                       printf("But don't break the indentation of this instruction\n");
+                       break;
+       }
+}
+
+
+void func(void)
+{
+       cout << "a"
+               << "b"
+               << ") :"
+               << "c";
+}
+
+
+void func(void)
+{
+       /*
+        * This is a comment.
+        */
+       foo();
+}
+
+
+void func(void)
+{
+       for (int i = 0; i < 10; ++i)
+               if (i & 1) {
+                       foo(1);
+               } else
+                       foo(0);
+       baz();
+}
+
+
+void func(void)
+{
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+                        && argument2);
+
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+
+       if (   c1
+                       && (      c2
+                                         || c3))
+               foo;
+       func( c1
+                 && (     c2
+                                  || c3))
+               foo;
+}
+
+
+void func(void)
+{
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+               && argument2);
+
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+
+       if (   c1
+                       && (      c2
+                               || c3))
+               foo;
+       func(   c1
+               && (      c2
+                       || c3))
+               foo;
+}
+
+
+void func(void)
+{
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+               && argument2);
+
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+       if (c123456789
+                       && (c22345
+                               || c3))
+               printf("foo\n");
+
+       c = c1 &&
+               (
+                       c2 ||
+                       c3
+               ) && c4;
+}
+
+
+void func(void)
+{
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+                        && argument2);
+
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+       if (c123456789
+                       && (c22345
+                               || c3))
+               printf("foo\n");
+
+       if (   c1
+                       && (   c2
+                                  || c3))
+               foo;
+
+       a_long_line(
+               argument,
+               argument);
+       a_short_line(argument,
+                                argument);
+}
+
+
+void func(void)
+{
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+                       && argument2);
+
+       if (c1 && (c2 ||
+                         c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+       if (c123456789
+                       && (c22345
+                         || c3))
+               printf("foo\n");
+}
+
+
+void func(void)
+{
+       if (condition1
+                       && condition2)
+               action();
+       function(argument1
+                        && argument2);
+
+       if (c1 && (c2 ||
+                               c3))
+               foo;
+       if (c1 &&
+                       (c2 || c3))
+       {
+       }
+       if (c123456789
+                       && (c22345
+                               || c3))
+               printf("foo\n");
+
+       if (   c1
+                       && (      c2
+                               || c3))
+               foo;
+       func(   c1
+                && (      c2
+                        || c3))
+               foo;
+}
+
+
+void func(void)
+{
+       if (condition1
+         && condition2)
+               action();
+       function(argument1
+               && argument2);
+
+       if (c1 && (c2 ||
+                 c3))
+               foo;
+       if (c1 &&
+         (c2 || c3))
+       {
+       }
+}
+
+
+NAMESPACESTART
+/* valid namespaces with normal indent */
+namespace
+{
+{
+       111111111111;
+}
+}
+namespace /* test */
+{
+11111111111111111;
+}
+namespace // test
+{
+111111111111111111;
+}
+namespace
+{
+111111111111111111;
+}
+namespace test
+{
+111111111111111111;
+}
+namespace{
+111111111111111111;
+}
+namespace test{
+111111111111111111;
+}
+namespace {
+111111111111111111;
+}
+namespace test {
+111111111111111111;
+namespace test2 {
+22222222222222222;
+}
+}
+
+/* invalid namespaces use block indent */
+namespace test test2 {
+       111111111111111111111;
+}
+namespace11111111111 {
+       111111111111;
+}
+namespace() {
+       1111111111111;
+}
+namespace()
+{
+       111111111111111111;
+}
+namespace test test2
+{
+       1111111111111111111;
+}
+namespace111111111
+{
+       111111111111111111;
+}
+NAMESPACEEND
+
+
+
+JSSTART
+var bar = {
+       foo: {
+               that: this,
+               some: ok,
+       },
+       "bar":{
+               a : 2,
+               b: "123abc",
+               x: 4,
+               "y": 5
+       }
+}
+JSEND
+
+
+JSSTART
+var foo = [
+1,  // indent 8 more
+       2,
+       3
+       ];  // indent 8 less
+JSEND
+
+
+JSSTART
+function bar() {
+       var foo = [
+               1,
+               2,
+               3
+                       ];  // indent 16 less
+}
+JSEND
+
+
+JSSTART
+(function($){
+
+       var class_name='myclass';
+
+       function private_method() {
+       }
+
+       var public_method={
+               method: function(options,args){
+                       private_method();
+               }
+       }
+
+       function init(options) {
+
+               $(this).data(class_name+'_public',$.extend({},{
+                       foo: 'bar',
+               bar: 2,  // indent 8 more
+               foobar: [  // indent 8 more
+                       1,  // indent 8 more
+               2,  // indent 16 more
+               3   // indent 16 more
+                       ],
+               callback: function(){  // indent 8 more
+                       return true;  // indent 8 more
+               }  // indent 8 more
+               }, options||{}));
+       }
+
+       $.fn[class_name]=function() {
+
+               var _arguments=arguments;
+               return this.each(function(){
+
+                       var options=$(this).data(class_name+'_public');
+                       if (!options) {
+                               init.apply(this,_arguments);
+
+                       } else {
+                               var method=public_method[_arguments[0]];
+
+                               if (typeof(method)!='function') {
+                                       console.log(class_name+' has no method "'+_arguments[0]+'"');
+                                       return false;
+                               }
+                               _arguments[0]=options;
+                               method.apply(this,_arguments);
+                       }
+               });
+       }
+
+})(jQuery);
+JSEND
+
+
+JSSTART
+function init(options) {
+       $(this).data(class_name+'_public',$.extend({},{
+               foo: 'bar',
+               bar: 2,
+               foobar: [
+               1,  // indent 8 more
+               2,  // indent 8 more
+               3   // indent 8 more
+               ],
+               callback: function(){
+                       return true;
+               }
+       }, options||{}));
+}
+JSEND
+
+
+JSSTART
+(function($){
+       function init(options) {
+               $(this).data(class_name+'_public',$.extend({},{
+                       foo: 'bar',
+               bar: 2,  // indent 8 more
+               foobar: [  // indent 8 more
+                       1,  // indent 8 more
+               2,  // indent 16 more
+               3  // indent 16 more
+                       ],
+               callback: function(){  // indent 8 more
+                       return true;  // indent 8 more
+               }  // indent 8 more
+               }, options||{}));
+       }
+})(jQuery);
+JSEND
+
index b00c760..7dc2334 100644 (file)
@@ -63,6 +63,12 @@ A 3\e:close
 :" write "testtext 1"
 A 3\e:close!
 :w >>test.out
+:set nohidden
+:" test ":all!" hides changed buffer; write "testtext 2 2 2"
+:sp Xtest4
+GA 4\e:all!
+:1wincmd w
+:w >>test.out
 :qa!
 ENDTEST
 
index 3311ad5..185bdc7 100644 (file)
@@ -9,3 +9,4 @@ testtext 3 3
 testtext 1
 testtext 3 3 3
 testtext 1
+testtext 2 2 2
index 28fd00c..5abc140 100644 (file)
@@ -1,5 +1,6 @@
 Test for user functions.
 Also test an <expr> mapping calling a function.
+Also test that a builtin function cannot be replaced.
 
 STARTTEST
 :so small.vim
@@ -58,7 +59,10 @@ XX+-XX
 ---*---
 (one
 (two
-[(one again\e:$-5,$w! test.out
+[(one again\e:call append(line('$'), max([1, 2, 3]))
+:call extend(g:, {'max': function('min')})
+:call append(line('$'), max([1, 2, 3]))
+:$-7,$w! test.out
 :delfunc Table
 :delfunc Compute
 :delfunc Expr1
index 951dd8b..6053812 100644 (file)
@@ -1,6 +1,8 @@
 xxx4asdf fail nop ok 9 333
-XX111XX
+XX111-XX
 ---222---
 1. one
 2. two
 1. one again
+3
+3
index 4c3b6b4..8cdb526 100644 (file)
-Test character classes in regexp
+Test character classes in regexp using regexpengine 0, 1, 2.
 
 STARTTEST
-/^start-here
-j:s/\d//g
-j:s/\D//g
-j:s/\o//g
-j:s/\O//g
-j:s/\x//g
-j:s/\X//g
-j:s/\w//g
-j:s/\W//g
-j:s/\h//g
-j:s/\H//g
-j:s/\a//g
-j:s/\A//g
-j:s/\l//g
-j:s/\L//g
-j:s/\u//g
-j:s/\U//g
+/^start-here/+1
+Y:s/\%#=0\d//g
+p:s/\%#=1\d//g
+p:s/\%#=2\d//g
+p:s/\%#=0[0-9]//g
+p:s/\%#=1[0-9]//g
+p:s/\%#=2[0-9]//g
+p:s/\%#=0\D//g
+p:s/\%#=1\D//g
+p:s/\%#=2\D//g
+p:s/\%#=0[^0-9]//g
+p:s/\%#=1[^0-9]//g
+p:s/\%#=2[^0-9]//g
+p:s/\%#=0\o//g
+p:s/\%#=1\o//g
+p:s/\%#=2\o//g
+p:s/\%#=0[0-7]//g
+p:s/\%#=1[0-7]//g
+p:s/\%#=2[0-7]//g
+p:s/\%#=0\O//g
+p:s/\%#=1\O//g
+p:s/\%#=2\O//g
+p:s/\%#=0[^0-7]//g
+p:s/\%#=1[^0-7]//g
+p:s/\%#=2[^0-7]//g
+p:s/\%#=0\x//g
+p:s/\%#=1\x//g
+p:s/\%#=2\x//g
+p:s/\%#=0[0-9A-Fa-f]//g
+p:s/\%#=1[0-9A-Fa-f]//g
+p:s/\%#=2[0-9A-Fa-f]//g
+p:s/\%#=0\X//g
+p:s/\%#=1\X//g
+p:s/\%#=2\X//g
+p:s/\%#=0[^0-9A-Fa-f]//g
+p:s/\%#=1[^0-9A-Fa-f]//g
+p:s/\%#=2[^0-9A-Fa-f]//g
+p:s/\%#=0\w//g
+p:s/\%#=1\w//g
+p:s/\%#=2\w//g
+p:s/\%#=0[0-9A-Za-z_]//g
+p:s/\%#=1[0-9A-Za-z_]//g
+p:s/\%#=2[0-9A-Za-z_]//g
+p:s/\%#=0\W//g
+p:s/\%#=1\W//g
+p:s/\%#=2\W//g
+p:s/\%#=0[^0-9A-Za-z_]//g
+p:s/\%#=1[^0-9A-Za-z_]//g
+p:s/\%#=2[^0-9A-Za-z_]//g
+p:s/\%#=0\h//g
+p:s/\%#=1\h//g
+p:s/\%#=2\h//g
+p:s/\%#=0[A-Za-z_]//g
+p:s/\%#=1[A-Za-z_]//g
+p:s/\%#=2[A-Za-z_]//g
+p:s/\%#=0\H//g
+p:s/\%#=1\H//g
+p:s/\%#=2\H//g
+p:s/\%#=0[^A-Za-z_]//g
+p:s/\%#=1[^A-Za-z_]//g
+p:s/\%#=2[^A-Za-z_]//g
+p:s/\%#=0\a//g
+p:s/\%#=1\a//g
+p:s/\%#=2\a//g
+p:s/\%#=0[A-Za-z]//g
+p:s/\%#=1[A-Za-z]//g
+p:s/\%#=2[A-Za-z]//g
+p:s/\%#=0\A//g
+p:s/\%#=1\A//g
+p:s/\%#=2\A//g
+p:s/\%#=0[^A-Za-z]//g
+p:s/\%#=1[^A-Za-z]//g
+p:s/\%#=2[^A-Za-z]//g
+p:s/\%#=0\l//g
+p:s/\%#=1\l//g
+p:s/\%#=2\l//g
+p:s/\%#=0[a-z]//g
+p:s/\%#=1[a-z]//g
+p:s/\%#=2[a-z]//g
+p:s/\%#=0\L//g
+p:s/\%#=1\L//g
+p:s/\%#=2\L//g
+p:s/\%#=0[^a-z]//g
+p:s/\%#=1[^a-z]//g
+p:s/\%#=2[^a-z]//g
+p:s/\%#=0\u//g
+p:s/\%#=1\u//g
+p:s/\%#=2\u//g
+p:s/\%#=0[A-Z]//g
+p:s/\%#=1[A-Z]//g
+p:s/\%#=2[A-Z]//g
+p:s/\%#=0\U//g
+p:s/\%#=1\U//g
+p:s/\%#=2\U//g
+p:s/\%#=0[^A-Z]//g
+p:s/\%#=1[^A-Z]//g
+p:s/\%#=2[^A-Z]//g
 :/^start-here/+1,$wq! test.out
 ENDTEST
 
 start-here
        \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
-       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
index 5f70fc2..f72a74b 100644 (file)
@@ -1,16 +1,96 @@
        \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
 0123456789
        \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+01234567
+01234567
+01234567
+01234567
+01234567
 01234567
        \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
 0123456789ABCDEFabcdef
        \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
 0123456789ABCDEFGHIXYZ_abcdefghiwxyz
        \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
 ABCDEFGHIXYZ_abcdefghiwxyz
        \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
 ABCDEFGHIXYZabcdefghiwxyz
        \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~\7f\80\82\90\9b¦±¼ÇÓé
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
 abcdefghiwxyz
        \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+       \f\r !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~\7f\80\82\90\9b¦±¼ÇÓé
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
 ABCDEFGHIXYZ
index f6fb612..d92a18f 100644 (file)
@@ -3,18 +3,18 @@ Test for "*Cmd" autocommands
 STARTTEST
 :so small.vim
 :/^start/,$w! Xxx              " write lines below to Xxx
-:au BufReadCmd testA 0r Xxx|$del
-:e testA                       " will read text of Xxd instead
-:au BufWriteCmd testA call append(line("$"), "write")
+:au BufReadCmd XtestA 0r Xxx|$del
+:e XtestA                      " will read text of Xxd instead
+:au BufWriteCmd XtestA call append(line("$"), "write")
 :w                             " will append a line to the file
-:r testA                       " should not read anything
+:r XtestA                      " should not read anything
 :                              " now we have:
 :                              " 1     start of Xxx
 :                              " 2             test40
 :                              " 3     end of Xxx
 :                              " 4     write
-:au FileReadCmd testB '[r Xxx
-:2r testB                      " will read Xxx below line 2 instead
+:au FileReadCmd XtestB '[r Xxx
+:2r XtestB                     " will read Xxx below line 2 instead
 :                              " 1     start of Xxx
 :                              " 2             test40
 :                              " 3     start of Xxx
@@ -22,10 +22,10 @@ STARTTEST
 :                              " 5     end of Xxx
 :                              " 6     end of Xxx
 :                              " 7     write
-:au FileWriteCmd testC '[,']copy $
+:au FileWriteCmd XtestC '[,']copy $
 4GA1\e
-:4,5w testC                    " will copy lines 4 and 5 to the end
-:r testC                       " should not read anything
+:4,5w XtestC                   " will copy lines 4 and 5 to the end
+:r XtestC                      " should not read anything
 :                              " 1     start of Xxx
 :                              " 2             test40
 :                              " 3     start of Xxx
@@ -35,14 +35,14 @@ STARTTEST
 :                              " 7     write
 :                              " 8             test401
 :                              " 9     end of Xxx
-:au FILEAppendCmd testD '[,']w! test.out
-:w >>testD                     " will write all lines to test.out
-:$r testD                      " should not read anything
+:au FILEAppendCmd XtestD '[,']w! test.out
+:w >>XtestD                    " will write all lines to test.out
+:$r XtestD                     " should not read anything
 :$w >>test.out                 " append "end of Xxx" to test.out
-:au BufReadCmd testE 0r test.out|$del
-:sp testE                      " split window with test.out
+:au BufReadCmd XtestE 0r test.out|$del
+:sp XtestE                     " split window with test.out
 5Goasdf\e\17\17:"
-:au BufWriteCmd testE w! test.out
+:au BufWriteCmd XtestE w! test.out
 :wall                          " will write other window to test.out
 :                              " 1     start of Xxx
 :                              " 2             test40
index 26f0e0c..7c54507 100644 (file)
@@ -1,6 +1,7 @@
 Tests for regexp with various magic settings.
 
 STARTTEST
+:so small.vim
 :set nocompatible viminfo+=nviminfo
 /^1
 /a*b\{2}c\+/e
@@ -13,7 +14,11 @@ x/\V^aa$
 x:set magic
 /\v(a)(b)\2\1\1/e
 x/\V[ab]\(\[xy]\)\1
-x:?^1?,$w! test.out
+x:$
+:set undolevels=100
+dv?bar?
+Yup:"
+:?^1?,$w! test.out
 :qa!
 ENDTEST
 
@@ -25,3 +30,5 @@ ENDTEST
 6 x ^aa$ x
 7 (a)(b) abbaa
 8 axx [ab]xx
+9 foobar
+
index 425316b..0b37a6a 100644 (file)
@@ -6,3 +6,6 @@
 6 x aa$ x
 7 (a)(b) abba
 8 axx ab]xx
+9 foobar
+9 foo
+
index 455c3e3..0c5b6db 100644 (file)
@@ -27,7 +27,14 @@ x/[\u4f7f\u5929]\+
 x/\%U12345678
 x/[\U1234abcd\u1234\uabcd]
 x/\%d21879b
-x:?^1?,$w! test.out
+x/ [[=A=]]* [[=B=]]* [[=C=]]* [[=D=]]* [[=E=]]* [[=F=]]* [[=G=]]* [[=H=]]* [[=I=]]* [[=J=]]* [[=K=]]* [[=L=]]* [[=M=]]* [[=N=]]* [[=O=]]* [[=P=]]* [[=Q=]]* [[=R=]]* [[=S=]]* [[=T=]]* [[=U=]]* [[=V=]]* [[=W=]]* [[=X=]]* [[=Y=]]* [[=Z=]]*/e
+x/ [[=a=]]* [[=b=]]* [[=c=]]* [[=d=]]* [[=e=]]* [[=f=]]* [[=g=]]* [[=h=]]* [[=i=]]* [[=j=]]* [[=k=]]* [[=l=]]* [[=m=]]* [[=n=]]* [[=o=]]* [[=p=]]* [[=q=]]* [[=r=]]* [[=s=]]* [[=t=]]* [[=u=]]* [[=v=]]* [[=w=]]* [[=x=]]* [[=y=]]* [[=z=]]*/e
+x:" Test backwards search from a multi-byte char
+/x
+x?.
+x:let @w=':%s#comb[i]nations#Å“Ì„á¹£Ìm̥̄ᾱ̆Ì#g'
+:@w
+:?^1?,$w! test.out
 :e! test.out
 G:put =matchstr(\"×בגד\", \".\", 0, 2) " ×‘
 :put =matchstr(\"×בגד\", \"..\", 0, 2) " ×‘×’
@@ -53,3 +60,7 @@ d å¤©ä½¿x
 e ü’…™¸y
 f ü’Š¯z
 g aå•·bb
+h AÀÃÂÃÄÅĀĂĄÇǞǠẢ BḂḆ CÇĆĈĊČ DÄŽÄḊḎḠEÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÃŒÃÃŽÃĨĪĬĮİÇỈ JÄ´ KĶǨḰḴ LĹĻĽĿÅḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎÅƠǑǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ Vá¹¼ WŴẀẂẄẆ XẊẌ YÃŶŸẎỲỶỸ ZŹŻŽƵáºáº”
+i aàáâãäåÄăąǎǟǡả bḃḇ cçćĉċĠdÄđḋá¸á¸‘ eèéêëēĕėęěẻẽ fḟ gÄğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįÇỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṠnñńņňʼnṅṉ oòóôõöøÅÅÅ‘Æ¡Ç’Ç«Ç­á» pṕṗ q rŕŗřṙṟ sÅ›Åşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vá¹½ wŵáºáºƒáº…ẇẘ xẋẠyýÿŷáºáº™á»³á»·á»¹ zźżžƶẑẕ
+j 0123â¤x
+k combinations
index 40161e5..0bd0b8a 100644 (file)
@@ -14,6 +14,10 @@ d ä½¿x
 e y
 f z
 g abb
+h AÀÃÂÃÄÅĀĂĄÇǞǠẢ BḂḆ CÇĆĈĊČ DÄŽÄḊḎḠEÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÃŒÃÃŽÃĨĪĬĮİÇỈ JÄ´ KĶǨḰḴ LĹĻĽĿÅḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎÅƠǑǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ Vá¹¼ WŴẀẂẄẆ XẊẌ YÃŶŸẎỲỶỸ ZŹŻŽƵáº
+i aàáâãäåÄăąǎǟǡả bḃḇ cçćĉċĠdÄđḋá¸á¸‘ eèéêëēĕėęěẻẽ fḟ gÄğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįÇỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṠnñńņňʼnṅṉ oòóôõöøÅÅÅ‘Æ¡Ç’Ç«Ç­á» pṕṗ q rŕŗřṙṟ sÅ›Åşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vá¹½ wŵáºáºƒáº…ẇẘ xẋẠyýÿŷáºáº™á»³á»·á»¹ zźżžƶẑ
+j 012â¤
+k Å“Ì„á¹£Ìm̥̄ᾱ̆Ì
 ×‘
 ×‘×’
 ×
index c87387b..13ad824 100644 (file)
@@ -36,7 +36,22 @@ j:let three = three . "-" . winline()
 :call append("$", two)
 :call append("$", three)
 :$-2,$w! test.out
-:unlet one two three
+:" Test that diffing shows correct filler lines
+:diffoff!
+:windo :bw!
+:enew
+:put =range(4,10)
+:1d _
+:vnew
+:put =range(1,10)
+:1d _
+:windo :diffthis
+:wincmd h
+:let w0=line('w0')
+:enew
+:put =w0
+:.w >> test.out
+:unlet! one two three w0
 :qa!
 ENDTEST
 
index 3307b93..b1cba92 100644 (file)
@@ -1,3 +1,4 @@
 2-4-5-6-8-9
 1-2-4-5-8
 2-3-4-5-6-7-8
+1
index 2179fe6..48f4abb 100644 (file)
@@ -54,8 +54,12 @@ $5lrxa<-- should be 'x'\e
 ^O\e3li\ 5\e4li\ 5\e4li\ 5   <-- should show the name of a noted text editor\e
 ^o\e4li\19\e4li\19\e4li\19   <-- and its version number\e-dd
 :"
+:" Test for yanking and pasting using the small delete register
+gg/^foo
+dewve"-p
 :wq! test.out
 ENDTEST
+foo, bar
 keyword keyw
 all your base are belong to us
 1 2 3 4 5 6
index 4fcbe50..334cb5a 100644 (file)
@@ -1,3 +1,4 @@
+, foo
 keyword keyword
 all your base 
 are belong to vim
index 1842af2..bf1ceed 100644 (file)
@@ -85,8 +85,15 @@ Results of test49.vim:
 *** Test  83: OK (2835)
 *** Test  84: OK (934782101)
 *** Test  85: OK (198689)
---- Test  86: All tests were run with throwing exceptions on error.
+--- Test  86: No Crash for vimgrep on BufUnload
+*** Test  86: OK (0)
+--- Test  87: 3
+--- Test  87: 5
+--- Test  87: abcdefghijk
+--- Test  87: Successfully executed funcref Add2
+*** Test  87: OK (0)
+--- Test  88: All tests were run with throwing exceptions on error.
              The $VIMNOERRTHROW control is not configured.
---- Test  86: All tests were run with throwing exceptions on interrupt.
+--- Test  88: All tests were run with throwing exceptions on interrupt.
              The $VIMNOINTTHROW control is not configured.
-*** Test  86: OK (50443995)
+*** Test  88: OK (50443995)
index 3b0982a..e08da57 100644 (file)
@@ -1,6 +1,6 @@
 " Vim script language tests
 " Author:      Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
-" Last Change: 2006 Apr 28
+" Last Change: 2013 Jun 06
 
 "-------------------------------------------------------------------------------
 " Test environment                                                         {{{1
@@ -8711,7 +8711,7 @@ try
                endif
            else
                if cmd == "let"
-                   let match = MATCH(0, thrmsg, 'E106', "Unknown variable")
+                   let match = MATCH(0, thrmsg, 'E121', "Undefined variable")
                elseif cmd == "unlet"
                    let match = MATCH(0, thrmsg, 'E108', "No such variable")
                endif
@@ -9603,9 +9603,59 @@ delfunction Delete_autocommands
 
 Xcheck 198689
 
+"-------------------------------------------------------------------------------
+" Test 86:  setloclist crash                                               {{{1
+"
+"          Executing a setloclist() on BufUnload shouldn't crash Vim
+"-------------------------------------------------------------------------------
+
+func F
+    au BufUnload * :call setloclist(0, [{'bufnr':1, 'lnum':1, 'col':1, 'text': 'tango down'}])
+
+    :lvimgrep /.*/ *.mak
+endfunc
+
+XpathINIT
+
+ExecAsScript F
+
+delfunction F
+Xout  "No Crash for vimgrep on BufUnload"
+Xcheck 0 
+
+"-------------------------------------------------------------------------------
+" Test 87   using (expr) ? funcref : funcref                               {{{1
+"
+"          Vim needs to correctly parse the funcref and even when it does
+"          not execute the funcref, it needs to consume the trailing ()
+"-------------------------------------------------------------------------------
+
+XpathINIT
+
+func Add2(x1, x2)
+    return a:x1 + a:x2
+endfu
+
+func GetStr()
+    return "abcdefghijklmnopqrstuvwxyp"
+endfu
+
+echo function('Add2')(2,3)
+
+Xout 1 ? function('Add2')(1,2) : function('Add2')(2,3)
+Xout 0 ? function('Add2')(1,2) : function('Add2')(2,3)
+" Make sure, GetStr() still works.
+Xout GetStr()[0:10]
+
+
+delfunction GetStr
+delfunction Add2
+Xout  "Successfully executed funcref Add2"
+
+Xcheck 0 
 
 "-------------------------------------------------------------------------------
-" Test 86:  $VIMNOERRTHROW and $VIMNOINTTHROW support                      {{{1
+" Test 88:  $VIMNOERRTHROW and $VIMNOINTTHROW support                      {{{1
 "
 "          It is possible to configure Vim for throwing exceptions on error
 "          or interrupt, controlled by variables $VIMNOERRTHROW and
index d78ac8e..0cbf4bf 100644 (file)
@@ -33,7 +33,7 @@ endfun
        " This could change for CygWin to //cygdrive/c
        let dir1='c:/x.x.y'
        if filereadable(dir1) || isdirectory(dir1)
-               call confirm( "'".dir1."' exists, cannot run test" )
+               echo "FATAL: '".dir1."' exists, cannot run test"
                return
        endif
        let file1=dir1.'/zz.y.txt'
@@ -41,13 +41,18 @@ endfun
        let dir2=dir1.'/VimIsTheGreatestSinceSlicedBread'
        let file2=dir2.'/z.txt'
        let nofile2=dir2.'/zz.txt'
-       let resdir1='c:/XX2235~1.Y'
+       call MakeDir( dir1 )
+       let resdir1 = substitute(fnamemodify(dir1, ':p:8'), '\\$', '', '')
+       if resdir1 !~ '\V\^c:/XX\x\x\x\x~1.Y\$'
+               echo "FATAL: unexpected short name: " . resdir1
+               echo "INFO: please report your OS to vim-dev"
+               return
+       endif
        let resfile1=resdir1.'/ZZY~1.TXT'
        let resnofile1=resdir1.'/z.y.txt'
        let resdir2=resdir1.'/VIMIST~1'
        let resfile2=resdir2.'/z.txt'
        let resnofile2=resdir2.'/zz.txt'
-       call MakeDir( dir1 )
        call MakeDir( dir2 )
        call MakeFile( file1 )
        call MakeFile( file2 )
index c2023e9..2cc7d10 100644 (file)
@@ -28,6 +28,24 @@ fXdat
 :put =matchstr(\"abcd\", \".\", 0, -1) " a
 :put =match(\"abcd\", \".\", 0, 5) " -1
 :put =match(\"abcd\", \".\", 0, -1) " 0
+/^foobar
+gncsearchmatch\e/one\_s*two\_s
+:1
+gnd
+/[a]bcdx
+:1
+2gnd/join
+/$
+0gnd
+/\>\zs
+0gnd/^
+gnd$h/\zs
+gnd/[u]niquepattern/s
+vlgnd
+/mother
+:set selection=exclusive
+$cgNmongoose\e/i
+cgnj\e
 :/^start:/,/^end:/wq! test.out
 ENDTEST
 
@@ -45,4 +63,16 @@ voo "nah" sdf " asdf" sdf " sdf" sd
 -<b>asdf<i>Xasdf</i>asdf</b>-
 -<b>asdX<i>as<b />df</i>asdf</b>-
 </begin>
+SEARCH:
+foobar
+one
+two
+abcdx | abcdx | abcdx
+join 
+lines
+zero width pattern
+delete first and last chars
+uniquepattern uniquepattern
+my very excellent mother just served us nachos
+for (i=0; i<=10; i++)
 end:
index c371c6a..40031ed 100644 (file)
@@ -18,4 +18,13 @@ c
 a
 -1
 0
+SEARCH:
+searchmatch
+abcdx |  | abcdx
+join lines
+zerowidth pattern
+elete first and last char
+ uniquepattern
+my very excellent mongoose just served us nachos
+for (j=0; i<=10; i++)
 end:
index 7d0008e..991c460 100644 (file)
@@ -3,6 +3,7 @@ Tests for List and Dictionary types.     vim: set ft=vim :
 STARTTEST
 :so small.vim
 :fun Test(...)
+:lang C
 :" Creating List directly with different types
 :let l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},]
 :$put =string(l)
@@ -342,13 +343,52 @@ let l = [0, 1, 2, 3]
 :$put =(d == d)
 :$put =(l != deepcopy(l))
 :$put =(d != deepcopy(d))
+:"
+:" compare complex recursively linked list and dict
+:let l = []
+:call add(l, l)
+:let dict4 = {"l": l}
+:call add(dict4.l, dict4)
+:let lcopy = deepcopy(l)
+:let dict4copy = deepcopy(dict4)
+:$put =(l == lcopy)
+:$put =(dict4 == dict4copy)
+:"
+:" Pass the same List to extend()
+:let l = [1, 2, 3, 4, 5]
+:call extend(l, l)
+:$put =string(l)
+:"
+:" Pass the same Dict to extend()
+:let d = { 'a': {'b': 'B'}}
+:call extend(d, d)
+:$put =string(d)
+:"
+:" Pass the same Dict to extend() with "error"
+:try
+:  call extend(d, d, "error")
+:catch
+:  $put =v:exception[:15] . v:exception[-1:-1]
+:endtry
+:$put =string(d)
 :endfun
+:"
 :call Test(1, 2, [3, 4], {5: 6})  " This may take a while
 :"
 :delfunc Test
 :unlet dict
 :call garbagecollect(1)
 :"
+:" test for patch 7.3.637
+:let a = 'No error caught'
+:try|foldopen|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
+o\12=a\r\e:"
+:lang C
+:redir => a
+:try|foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
+:redir END
+o\12=a\r\e:"
+:"
 :/^start:/,$wq! test.out
 ENDTEST
 
index da83002..7375007 100644 (file)
@@ -109,3 +109,15 @@ caught a:000[3]
 1
 0
 0
+1
+1
+[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
+{'a': {'b': 'B'}}
+Vim(call):E737: a
+{'a': {'b': 'B'}}
+Vim(foldopen):E490:
+
+
+Error detected while processing :
+E492: Not an editor command: foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
+
index d74af57..8d972e4 100644 (file)
@@ -53,15 +53,19 @@ b321b
 t02: numeric
 abc
 ab
-a
 a321
 a123
 a122
+a
+x-22
 b321
 b123
+
 c123d
+-24
  123b
 c321d
+0
 b322b
 b321
 b321b
index 1777133..aa3d373 100644 (file)
@@ -21,6 +21,10 @@ ab
 a
 
 
+
+-24
+x-22
+0
 a122
 a123
 b123
index 9600e83..cef1cfa 100644 (file)
@@ -7,6 +7,10 @@ STARTTEST
 :set enc=latin1
 :e!
 :"
+:" Check using z= in new buffer (crash fixed by patch 7.4a.028).
+:set maxmem=512 spell
+iasd\ez=:"
+:"
 :" Function to test .aff/.dic with list of good and bad words.
 :func TestOne(aff, dic)
   set spellfile=
index f9a1574..dc24ab9 100644 (file)
@@ -4,6 +4,10 @@ undo-able pieces.  Do that by setting 'undolevels'.
 Also tests :earlier and :later.
 
 STARTTEST
+:echo undotree().entries
+ENDTEST
+
+STARTTEST
 :" Delete three characters and undo
 Gx:set ul=100
 x:set ul=100
@@ -80,6 +84,26 @@ ggO---\e:0put c
 ggO---\e:0put b
 ggO---\e:0put a
 ggO---\e:w >>test.out
+:so small.vim
+:set nocp viminfo+=nviminfo
+:enew!
+oa\e
+:set ul=100
+ob\e
+:set ul=100
+o1\ea2\12=setline('.','1234')
+
+\euu:"
+oc\e
+:set ul=100
+o1\ea2\12=setline('.','1234')
+
+\eu:"
+od\e
+:set ul=100
+o1\ea2\12=string(123)
+\eu:"
+:%w >>test.out
 :qa!
 ENDTEST
 
index 6e25e3b..ea4b473 100644 (file)
@@ -41,3 +41,9 @@ one one one
 two
 two
 three
+
+a
+b
+c
+12
+d
index b813830..03415d1 100644 (file)
@@ -36,7 +36,7 @@ STARTTEST
 :call settabvar(2, 'val_list', ['red', 'blue', 'green'])
 :"
 :let test_status = 'gettabvar: fail'
-:if gettabvar(2, 'val_num') == 100 && gettabvar(2, 'val_str') == 'SetTabVar test') && gettabvar(2, 'val_list') == ['red', 'blue', 'green'])
+:if gettabvar(2, 'val_num') == 100 && gettabvar(2, 'val_str') == 'SetTabVar test' && gettabvar(2, 'val_list') == ['red', 'blue', 'green']
 :    let test_status = 'gettabvar: pass'
 :endif
 :call append(line('$'), test_status)
@@ -49,6 +49,139 @@ STARTTEST
 :tabclose
 :call append(line('$'), test_status)
 :"
+:if has('gui') || has('clientserver')
+:" Test for ":tab drop exist-file" to keep current window.
+:sp test1
+:tab drop test1
+:let test_status = 'tab drop 1: fail'
+:if tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1
+:    let test_status = 'tab drop 1: pass'
+:endif
+:close
+:call append(line('$'), test_status)
+:"
+:"
+:" Test for ":tab drop new-file" to keep current window of tabpage 1.
+:split
+:tab drop newfile
+:let test_status = 'tab drop 2: fail'
+:if tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1
+:    let test_status = 'tab drop 2: pass'
+:endif
+:tabclose
+:q
+:call append(line('$'), test_status)
+:"
+:"
+:" Test for ":tab drop multi-opend-file" to keep current tabpage and window.
+:new test1
+:tabnew
+:new test1
+:tab drop test1
+:let test_status = 'tab drop 3: fail'
+:if tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1
+:    let test_status = 'tab drop 3: pass'
+:endif
+:tabclose
+:q
+:call append(line('$'), test_status)
+:else
+:" :drop not supported
+:call append(line('$'), 'tab drop 1: pass')
+:call append(line('$'), 'tab drop 2: pass')
+:call append(line('$'), 'tab drop 3: pass')
+:endif
+:"
+:"
+:for i in range(9) | tabnew | endfor
+1gt
+Go\12=tabpagenr()\r\r\e
+:tabmove 5
+i\12=tabpagenr()\r\r\e
+:tabmove -2
+i\12=tabpagenr()\r\r\e
+:tabmove +4
+i\12=tabpagenr()\r\r\e
+:tabmove
+i\12=tabpagenr()\r\r\e
+:tabmove -20
+i\12=tabpagenr()\r\r\e
+:tabmove +20
+i\12=tabpagenr()\r\r\e
+:3tabmove
+i\12=tabpagenr()\r\r\e
+:7tabmove 5
+i\12=tabpagenr()\r\r\e
+:let a='No error caught.'
+:try
+:tabmove foo
+:catch E474
+:let a='E474 caught.'
+:endtry
+i\12=a\r\e
+:"
+:" Test autocommands
+:tabonly!
+:let g:r=[]
+:command -nargs=1 -bar C :call add(g:r, '=== ' . <q-args> . ' ===')|<args>
+:function Test()
+    let hasau=has('autocmd')
+    if hasau
+        autocmd TabEnter * :call add(g:r, 'TabEnter')
+        autocmd WinEnter * :call add(g:r, 'WinEnter')
+        autocmd BufEnter * :call add(g:r, 'BufEnter')
+        autocmd TabLeave * :call add(g:r, 'TabLeave')
+        autocmd WinLeave * :call add(g:r, 'WinLeave')
+        autocmd BufLeave * :call add(g:r, 'BufLeave')
+    endif
+    let t:a='a'
+    C tab split
+    if !hasau
+        let g:r+=['WinLeave', 'TabLeave', 'WinEnter', 'TabEnter']
+    endif
+    let t:a='b'
+    C tabnew
+    if !hasau
+        let g:r+=['WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter']
+    endif
+    let t:a='c'
+    call add(g:r, join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')))
+    C call map(range(1, tabpagenr('$')), 'settabvar(v:val, ''a'', v:val*2)')
+    call add(g:r, join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')))
+    let w:a='a'
+    C vsplit
+    if !hasau
+        let g:r+=['WinLeave', 'WinEnter']
+    endif
+    let w:a='a'
+    let tabn=tabpagenr()
+    let winr=range(1, winnr('$'))
+    C tabnext 1
+    if !hasau
+        let g:r+=['BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter']
+    endif
+    call add(g:r, join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')))
+    C call map(copy(winr), 'settabwinvar('.tabn.', v:val, ''a'', v:val*2)')
+    call add(g:r, join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')))
+    if hasau
+        augroup TabDestructive
+            autocmd TabEnter * :C tabnext 2 | C tabclose 3
+        augroup END
+        C tabnext 3
+        let g:r+=[tabpagenr().'/'.tabpagenr('$')]
+        autocmd! TabDestructive TabEnter
+        C tabnew
+        C tabnext 1
+        autocmd TabDestructive TabEnter * nested :C tabnext 2 | C tabclose 3
+        C tabnext 3
+        let g:r+=[tabpagenr().'/'.tabpagenr('$')]
+    else
+        let g:r+=["=== tabnext 3 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","=== tabclose 3 ===","2/2","=== tabnew ===","WinLeave","TabLeave","WinEnter","TabEnter","BufLeave","BufEnter","=== tabnext 1 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","BufEnter","=== tabnext 3 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","=== tabclose 3 ===","BufEnter","=== tabclose 3 ===","2/2",]
+    endif
+endfunction
+:call Test()
+:$ put =g:r
+:"
 :"
 :/^Results/,$w! test.out
 :qa!
index 9a51e44..e35b2b1 100644 (file)
@@ -5,3 +5,84 @@ this is tab page 1
 this is tab page 4
 gettabvar: pass
 settabvar: pass
+tab drop 1: pass
+tab drop 2: pass
+tab drop 3: pass
+1
+6
+4
+8
+10
+1
+10
+4
+6
+E474 caught.
+=== tab split ===
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnew ===
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufLeave
+BufEnter
+a b c
+=== call map(range(1, tabpagenr('$')), 'settabvar(v:val, ''a'', v:val*2)') ===
+2 4 6
+=== vsplit ===
+WinLeave
+WinEnter
+=== tabnext 1 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufEnter
+a a
+=== call map(copy(winr), 'settabwinvar('.tabn.', v:val, ''a'', v:val*2)') ===
+2 4
+=== tabnext 3 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnext 2 ===
+=== tabclose 3 ===
+2/2
+=== tabnew ===
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufLeave
+BufEnter
+=== tabnext 1 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufEnter
+=== tabnext 3 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnext 2 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnext 2 ===
+=== tabclose 3 ===
+BufEnter
+=== tabclose 3 ===
+2/2
index d45e357..b0b1c91 100644 (file)
@@ -1,4 +1,5 @@
-Test for regexp patterns.
+Test for regexp patterns without multi-byte support.
+See test95 for multi-byte tests.
 
 A pattern that gives the expected result produces OK, so that we know it was
 actually tried.
@@ -14,154 +15,594 @@ STARTTEST
 :"    etc.
 :"  When there is no match use only the first two items.
 :let tl = []
-:call add(tl, ['ab', 'aab', 'ab'])
-:call add(tl, ['b', 'abcdef', 'b'])
-:call add(tl, ['bc*', 'abccccdef', 'bcccc'])
-:call add(tl, ['bc\{-}', 'abccccdef', 'b'])
-:call add(tl, ['bc\{-}\(d\)', 'abccccdef', 'bccccd', 'd'])
-:call add(tl, ['bc*', 'abbdef', 'b'])
-:call add(tl, ['c*', 'ccc', 'ccc'])
-:call add(tl, ['bc*', 'abdef', 'b'])
-:call add(tl, ['c*', 'abdef', ''])
-:call add(tl, ['bc\+', 'abccccdef', 'bcccc'])
-:call add(tl, ['bc\+', 'abdef']) "no match
+:"
+:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+:"""" Previously written tests """"""""""""""""""""""""""""""""
+:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+:"
+:call add(tl, [2, 'ab', 'aab', 'ab'])
+:call add(tl, [2, 'b', 'abcdef', 'b'])
+:call add(tl, [2, 'bc*', 'abccccdef', 'bcccc'])
+:call add(tl, [2, 'bc\{-}', 'abccccdef', 'b'])
+:call add(tl, [2, 'bc\{-}\(d\)', 'abccccdef', 'bccccd', 'd'])
+:call add(tl, [2, 'bc*', 'abbdef', 'b'])
+:call add(tl, [2, 'c*', 'ccc', 'ccc'])
+:call add(tl, [2, 'bc*', 'abdef', 'b'])
+:call add(tl, [2, 'c*', 'abdef', ''])
+:call add(tl, [2, 'bc\+', 'abccccdef', 'bcccc'])
+:call add(tl, [2, 'bc\+', 'abdef']) "no match
 :"
 :"operator \|
-:call add(tl, ['a\|ab', 'cabd', 'a']) "alternation is ordered
-:"
-:call add(tl, ['c\?', 'ccb', 'c'])
-:call add(tl, ['bc\?', 'abd', 'b'])
-:call add(tl, ['bc\?', 'abccd', 'bc'])
-:"
-:call add(tl, ['\va{1}', 'ab', 'a'])
-:"
-:call add(tl, ['\va{2}', 'aa', 'aa'])
-:call add(tl, ['\va{2}', 'caad', 'aa'])
-:call add(tl, ['\va{2}', 'aba'])
-:call add(tl, ['\va{2}', 'ab'])
-:call add(tl, ['\va{2}', 'abaa', 'aa'])
-:call add(tl, ['\va{2}', 'aaa', 'aa'])
-:"
-:call add(tl, ['\vb{1}', 'abca', 'b'])
-:call add(tl, ['\vba{2}', 'abaa', 'baa'])
-:call add(tl, ['\vba{3}', 'aabaac'])
-:"
-:call add(tl, ['\v(ab){1}', 'ab', 'ab', 'ab'])
-:call add(tl, ['\v(ab){1}', 'dabc', 'ab', 'ab'])
-:call add(tl, ['\v(ab){1}', 'acb'])
-:"
-:call add(tl, ['\v(ab){0,2}', 'acb', "", ""])
-:call add(tl, ['\v(ab){0,2}', 'ab', 'ab', 'ab'])
-:call add(tl, ['\v(ab){1,2}', 'ab', 'ab', 'ab'])
-:call add(tl, ['\v(ab){1,2}', 'ababc', 'abab', 'ab'])
-:call add(tl, ['\v(ab){2,4}', 'ababcab', 'abab', 'ab'])
-:call add(tl, ['\v(ab){2,4}', 'abcababa', 'abab', 'ab'])
-:"
-:call add(tl, ['\v(ab){2}', 'abab', 'abab', 'ab'])
-:call add(tl, ['\v(ab){2}', 'cdababe', 'abab', 'ab'])
-:call add(tl, ['\v(ab){2}', 'abac'])
-:call add(tl, ['\v(ab){2}', 'abacabab', 'abab', 'ab'])
-:call add(tl, ['\v((ab){2}){2}', 'abababab', 'abababab', 'abab', 'ab'])
-:call add(tl, ['\v((ab){2}){2}', 'abacabababab', 'abababab', 'abab', 'ab'])
-:"
-:call add(tl, ['\v(a{1}){1}', 'a', 'a', 'a'])
-:call add(tl, ['\v(a{2}){1}', 'aa', 'aa', 'aa'])
-:call add(tl, ['\v(a{2}){1}', 'aaac', 'aa', 'aa'])
-:call add(tl, ['\v(a{2}){1}', 'daaac', 'aa', 'aa'])
-:call add(tl, ['\v(a{1}){2}', 'daaac', 'aa', 'a'])
-:call add(tl, ['\v(a{1}){2}', 'aaa', 'aa', 'a'])
-:call add(tl, ['\v(a{2})+', 'adaac', 'aa', 'aa'])
-:call add(tl, ['\v(a{2})+', 'aa', 'aa', 'aa'])
-:call add(tl, ['\v(a{2}){1}', 'aa', 'aa', 'aa'])
-:call add(tl, ['\v(a{1}){2}', 'aa', 'aa', 'a'])
-:call add(tl, ['\v(a{1}){1}', 'a', 'a', 'a'])
-:call add(tl, ['\v(a{2}){2}', 'aaaa', 'aaaa', 'aa'])
-:call add(tl, ['\v(a{2}){2}', 'aaabaaaa', 'aaaa', 'aa'])
-:"
-:call add(tl, ['\v(a+){2}', 'dadaac', 'aa', 'a'])
-:call add(tl, ['\v(a{3}){2}', 'aaaaaaa', 'aaaaaa', 'aaa'])
-:"
-:call add(tl, ['\v(a{1,2}){2}', 'daaac', 'aaa', 'a'])
-:call add(tl, ['\v(a{1,3}){2}', 'daaaac', 'aaaa', 'a'])
-:call add(tl, ['\v(a{1,3}){2}', 'daaaaac', 'aaaaa', 'aa'])
-:call add(tl, ['\v(a{1,3}){3}', 'daac'])
-:call add(tl, ['\v(a{1,2}){2}', 'dac'])
-:call add(tl, ['\v(a+)+', 'daac', 'aa', 'aa'])
-:call add(tl, ['\v(a+)+', 'aaa', 'aaa', 'aaa'])
-:call add(tl, ['\v(a+){1,2}', 'aaa', 'aaa', 'aaa'])
-:call add(tl, ['\v(a+)(a+)', 'aaa', 'aaa', 'aa', 'a'])
-:call add(tl, ['\v(a{3})+', 'daaaac', 'aaa', 'aaa'])
-:call add(tl, ['\v(a|b|c)+', 'aacb', 'aacb', 'b'])
-:call add(tl, ['\v(a|b|c){2}', 'abcb', 'ab', 'b'])
-:call add(tl, ['\v(abc){2}', 'abcabd', ])
-:call add(tl, ['\v(abc){2}', 'abdabcabc','abcabc', 'abc'])
-:"
-:call add(tl, ['a*', 'cc', ''])
-:call add(tl, ['\v(a*)+', 'cc', ''])
-:call add(tl, ['\v((ab)+)+', 'ab', 'ab', 'ab', 'ab'])
-:call add(tl, ['\v(((ab)+)+)+', 'ab', 'ab', 'ab', 'ab', 'ab'])
-:call add(tl, ['\v(((ab)+)+)+', 'dababc', 'abab', 'abab', 'abab', 'ab'])
-:call add(tl, ['\v(a{0,2})+', 'cc', ''])
-:call add(tl, ['\v(a*)+', '', ''])
-:call add(tl, ['\v((a*)+)+', '', ''])
-:call add(tl, ['\v((ab)*)+', '', ''])
-:call add(tl, ['\va{1,3}', 'aab', 'aa'])
-:call add(tl, ['\va{2,3}', 'abaa', 'aa'])
-:"
-:call add(tl, ['\v((ab)+|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
-:call add(tl, ['\v(a{2})|(b{3})', 'bbabbbb', 'bbb', '', 'bbb'])
-:call add(tl, ['\va{2}|b{2}', 'abab'])
-:call add(tl, ['\v(a)+|(c)+', 'bbacbaacbbb', 'a', 'a'])
-:call add(tl, ['\vab{2,3}c', 'aabbccccccccccccc', 'abbc'])
-:call add(tl, ['\vab{2,3}c', 'aabbbccccccccccccc', 'abbbc'])
-:call add(tl, ['\vab{2,3}cd{2,3}e', 'aabbbcddee', 'abbbcdde'])
-:call add(tl, ['\va(bc){2}d', 'aabcbfbc' ])
-:call add(tl, ['\va*a{2}', 'a', ])
-:call add(tl, ['\va*a{2}', 'aa', 'aa' ])
-:call add(tl, ['\va*a{2}', 'aaa', 'aaa' ])
-:call add(tl, ['\va*a{2}', 'bbbabcc', ])
-:call add(tl, ['\va*b*|a*c*', 'a', 'a'])
-:call add(tl, ['\va{1}b{1}|a{1}b{1}', ''])
+:call add(tl, [2, 'a\|ab', 'cabd', 'a']) "alternation is ordered
+:"
+:call add(tl, [2, 'c\?', 'ccb', 'c'])
+:call add(tl, [2, 'bc\?', 'abd', 'b'])
+:call add(tl, [2, 'bc\?', 'abccd', 'bc'])
+:"
+:call add(tl, [2, '\va{1}', 'ab', 'a'])
+:"
+:call add(tl, [2, '\va{2}', 'aa', 'aa'])
+:call add(tl, [2, '\va{2}', 'caad', 'aa'])
+:call add(tl, [2, '\va{2}', 'aba'])
+:call add(tl, [2, '\va{2}', 'ab'])
+:call add(tl, [2, '\va{2}', 'abaa', 'aa'])
+:call add(tl, [2, '\va{2}', 'aaa', 'aa'])
+:"
+:call add(tl, [2, '\vb{1}', 'abca', 'b'])
+:call add(tl, [2, '\vba{2}', 'abaa', 'baa'])
+:call add(tl, [2, '\vba{3}', 'aabaac'])
+:"
+:call add(tl, [2, '\v(ab){1}', 'ab', 'ab', 'ab'])
+:call add(tl, [2, '\v(ab){1}', 'dabc', 'ab', 'ab'])
+:call add(tl, [2, '\v(ab){1}', 'acb'])
+:"
+:call add(tl, [2, '\v(ab){0,2}', 'acb', "", ""])
+:call add(tl, [2, '\v(ab){0,2}', 'ab', 'ab', 'ab'])
+:call add(tl, [2, '\v(ab){1,2}', 'ab', 'ab', 'ab'])
+:call add(tl, [2, '\v(ab){1,2}', 'ababc', 'abab', 'ab'])
+:call add(tl, [2, '\v(ab){2,4}', 'ababcab', 'abab', 'ab'])
+:call add(tl, [2, '\v(ab){2,4}', 'abcababa', 'abab', 'ab'])
+:"
+:call add(tl, [2, '\v(ab){2}', 'abab', 'abab', 'ab'])
+:call add(tl, [2, '\v(ab){2}', 'cdababe', 'abab', 'ab'])
+:call add(tl, [2, '\v(ab){2}', 'abac'])
+:call add(tl, [2, '\v(ab){2}', 'abacabab', 'abab', 'ab'])
+:call add(tl, [2, '\v((ab){2}){2}', 'abababab', 'abababab', 'abab', 'ab'])
+:call add(tl, [2, '\v((ab){2}){2}', 'abacabababab', 'abababab', 'abab', 'ab'])
+:"
+:call add(tl, [2, '\v(a{1}){1}', 'a', 'a', 'a'])
+:call add(tl, [2, '\v(a{2}){1}', 'aa', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{2}){1}', 'aaac', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{2}){1}', 'daaac', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{1}){2}', 'daaac', 'aa', 'a'])
+:call add(tl, [2, '\v(a{1}){2}', 'aaa', 'aa', 'a'])
+:call add(tl, [2, '\v(a{2})+', 'adaac', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{2})+', 'aa', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{2}){1}', 'aa', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{1}){2}', 'aa', 'aa', 'a'])
+:call add(tl, [2, '\v(a{1}){1}', 'a', 'a', 'a'])
+:call add(tl, [2, '\v(a{2}){2}', 'aaaa', 'aaaa', 'aa'])
+:call add(tl, [2, '\v(a{2}){2}', 'aaabaaaa', 'aaaa', 'aa'])
+:"
+:call add(tl, [2, '\v(a+){2}', 'dadaac', 'aa', 'a'])
+:call add(tl, [2, '\v(a{3}){2}', 'aaaaaaa', 'aaaaaa', 'aaa'])
+:"
+:call add(tl, [2, '\v(a{1,2}){2}', 'daaac', 'aaa', 'a'])
+:call add(tl, [2, '\v(a{1,3}){2}', 'daaaac', 'aaaa', 'a'])
+:call add(tl, [2, '\v(a{1,3}){2}', 'daaaaac', 'aaaaa', 'aa'])
+:call add(tl, [2, '\v(a{1,3}){3}', 'daac'])
+:call add(tl, [2, '\v(a{1,2}){2}', 'dac'])
+:call add(tl, [2, '\v(a+)+', 'daac', 'aa', 'aa'])
+:call add(tl, [2, '\v(a+)+', 'aaa', 'aaa', 'aaa'])
+:call add(tl, [2, '\v(a+){1,2}', 'aaa', 'aaa', 'aaa'])
+:call add(tl, [2, '\v(a+)(a+)', 'aaa', 'aaa', 'aa', 'a'])
+:call add(tl, [2, '\v(a{3})+', 'daaaac', 'aaa', 'aaa'])
+:call add(tl, [2, '\v(a|b|c)+', 'aacb', 'aacb', 'b'])
+:call add(tl, [2, '\v(a|b|c){2}', 'abcb', 'ab', 'b'])
+:call add(tl, [2, '\v(abc){2}', 'abcabd', ])
+:call add(tl, [2, '\v(abc){2}', 'abdabcabc','abcabc', 'abc'])
+:"
+:call add(tl, [2, 'a*', 'cc', ''])
+:call add(tl, [2, '\v(a*)+', 'cc', ''])
+:call add(tl, [2, '\v((ab)+)+', 'ab', 'ab', 'ab', 'ab'])
+:call add(tl, [2, '\v(((ab)+)+)+', 'ab', 'ab', 'ab', 'ab', 'ab'])
+:call add(tl, [2, '\v(((ab)+)+)+', 'dababc', 'abab', 'abab', 'abab', 'ab'])
+:call add(tl, [2, '\v(a{0,2})+', 'cc', ''])
+:call add(tl, [2, '\v(a*)+', '', ''])
+:call add(tl, [2, '\v((a*)+)+', '', ''])
+:call add(tl, [2, '\v((ab)*)+', '', ''])
+:call add(tl, [2, '\va{1,3}', 'aab', 'aa'])
+:call add(tl, [2, '\va{2,3}', 'abaa', 'aa'])
+:"
+:call add(tl, [2, '\v((ab)+|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
+:call add(tl, [2, '\v(a{2})|(b{3})', 'bbabbbb', 'bbb', '', 'bbb'])
+:call add(tl, [2, '\va{2}|b{2}', 'abab'])
+:call add(tl, [2, '\v(a)+|(c)+', 'bbacbaacbbb', 'a', 'a'])
+:call add(tl, [2, '\vab{2,3}c', 'aabbccccccccccccc', 'abbc'])
+:call add(tl, [2, '\vab{2,3}c', 'aabbbccccccccccccc', 'abbbc'])
+:call add(tl, [2, '\vab{2,3}cd{2,3}e', 'aabbbcddee', 'abbbcdde'])
+:call add(tl, [2, '\va(bc){2}d', 'aabcbfbc' ])
+:call add(tl, [2, '\va*a{2}', 'a', ])
+:call add(tl, [2, '\va*a{2}', 'aa', 'aa' ])
+:call add(tl, [2, '\va*a{2}', 'aaa', 'aaa' ])
+:call add(tl, [2, '\va*a{2}', 'bbbabcc', ])
+:call add(tl, [2, '\va*b*|a*c*', 'a', 'a'])
+:call add(tl, [2, '\va{1}b{1}|a{1}b{1}', ''])
 :"
 :"submatches
-:call add(tl, ['\v(a)', 'ab', 'a', 'a'])
-:call add(tl, ['\v(a)(b)', 'ab', 'ab', 'a', 'b'])
-:call add(tl, ['\v(ab)(b)(c)', 'abbc', 'abbc', 'ab', 'b', 'c'])
-:call add(tl, ['\v((a)(b))', 'ab', 'ab', 'ab', 'a', 'b'])
-:call add(tl, ['\v(a)|(b)', 'ab', 'a', 'a'])
+:call add(tl, [2, '\v(a)', 'ab', 'a', 'a'])
+:call add(tl, [2, '\v(a)(b)', 'ab', 'ab', 'a', 'b'])
+:call add(tl, [2, '\v(ab)(b)(c)', 'abbc', 'abbc', 'ab', 'b', 'c'])
+:call add(tl, [2, '\v((a)(b))', 'ab', 'ab', 'ab', 'a', 'b'])
+:call add(tl, [2, '\v(a)|(b)', 'ab', 'a', 'a'])
+:"
+:call add(tl, [2, '\v(a*)+', 'aaaa', 'aaaa', ''])
+:call add(tl, [2, 'x', 'abcdef'])
+:"
+:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+:""""" Simple tests """""""""""""""""""""""""""""""""""""""""""
+:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+:"
+:" Search single groups
+:call add(tl, [2, 'ab', 'aab', 'ab'])
+:call add(tl, [2, 'ab', 'baced'])
+:call add(tl, [2, 'ab', '                    ab           ', 'ab'])
+:"
+:" Search multi-modifiers
+:call add(tl, [2, 'x*', 'xcd', 'x'])
+:call add(tl, [2, 'x*', 'xxxxxxxxxxxxxxxxsofijiojgf', 'xxxxxxxxxxxxxxxx'])
+:" empty match is good
+:call add(tl, [2, 'x*', 'abcdoij', ''])
+:" no match here
+:call add(tl, [2, 'x\+', 'abcdoin'])
+:call add(tl, [2, 'x\+', 'abcdeoijdfxxiuhfij', 'xx'])
+:call add(tl, [2, 'x\+', 'xxxxx', 'xxxxx'])
+:call add(tl, [2, 'x\+', 'abc x siufhiush xxxxxxxxx', 'x'])
+:call add(tl, [2, 'x\=', 'x sdfoij', 'x'])
+:call add(tl, [2, 'x\=', 'abc sfoij', '']) " empty match is good
+:call add(tl, [2, 'x\=', 'xxxxxxxxx c', 'x'])
+:call add(tl, [2, 'x\?', 'x sdfoij', 'x'])
+:" empty match is good
+:call add(tl, [2, 'x\?', 'abc sfoij', ''])
+:call add(tl, [2, 'x\?', 'xxxxxxxxxx c', 'x'])
+:"
+:call add(tl, [2, 'a\{0,0}', 'abcdfdoij', ''])
+:" same thing as 'a?'
+:call add(tl, [2, 'a\{0,1}', 'asiubid axxxaaa', 'a'])
+:" same thing as 'a\{0,1}'
+:call add(tl, [2, 'a\{1,0}', 'asiubid axxxaaa', 'a'])
+:call add(tl, [2, 'a\{3,6}', 'aa siofuh'])
+:call add(tl, [2, 'a\{3,6}', 'aaaaa asfoij afaa', 'aaaaa'])
+:call add(tl, [2, 'a\{3,6}', 'aaaaaaaa', 'aaaaaa'])
+:call add(tl, [2, 'a\{0}', 'asoiuj', ''])
+:call add(tl, [2, 'a\{2}', 'aaaa', 'aa'])
+:call add(tl, [2, 'a\{2}', 'iuash fiusahfliusah fiushfilushfi uhsaifuh askfj nasfvius afg aaaa sfiuhuhiushf', 'aa'])
+:call add(tl, [2, 'a\{2}', 'abcdefghijklmnopqrestuvwxyz1234567890'])
+:" same thing as 'a*'
+:call add(tl, [2, 'a\{0,}', 'oij sdigfusnf', ''])
+:call add(tl, [2, 'a\{0,}', 'aaaaa aa', 'aaaaa'])
+:call add(tl, [2, 'a\{2,}', 'sdfiougjdsafg'])
+:call add(tl, [2, 'a\{2,}', 'aaaaasfoij ', 'aaaaa'])
+:call add(tl, [2, 'a\{5,}', 'xxaaaaxxx '])
+:call add(tl, [2, 'a\{5,}', 'xxaaaaaxxx ', 'aaaaa'])
+:call add(tl, [2, 'a\{,0}', 'oidfguih iuhi hiu aaaa', ''])
+:call add(tl, [2, 'a\{,5}', 'abcd', 'a'])
+:call add(tl, [2, 'a\{,5}', 'aaaaaaaaaa', 'aaaaa'])
+:" leading star as normal char when \{} follows
+:call add(tl, [2, '^*\{4,}$', '***'])
+:call add(tl, [2, '^*\{4,}$', '****', '****'])
+:call add(tl, [2, '^*\{4,}$', '*****', '*****'])
+:" same thing as 'a*'
+:call add(tl, [2, 'a\{}', 'bbbcddiuhfcd', ''])
+:call add(tl, [2, 'a\{}', 'aaaaioudfh coisf jda', 'aaaa'])
+:"
+:call add(tl, [2, 'a\{-0,0}', 'abcdfdoij', ''])
+:" anti-greedy version of 'a?'
+:call add(tl, [2, 'a\{-0,1}', 'asiubid axxxaaa', ''])
+:call add(tl, [2, 'a\{-3,6}', 'aa siofuh'])
+:call add(tl, [2, 'a\{-3,6}', 'aaaaa asfoij afaa', 'aaa'])
+:call add(tl, [2, 'a\{-3,6}', 'aaaaaaaa', 'aaa'])
+:call add(tl, [2, 'a\{-0}', 'asoiuj', ''])
+:call add(tl, [2, 'a\{-2}', 'aaaa', 'aa'])
+:call add(tl, [2, 'a\{-2}', 'abcdefghijklmnopqrestuvwxyz1234567890'])
+:call add(tl, [2, 'a\{-0,}', 'oij sdigfusnf', ''])
+:call add(tl, [2, 'a\{-0,}', 'aaaaa aa', ''])
+:call add(tl, [2, 'a\{-2,}', 'sdfiougjdsafg'])
+:call add(tl, [2, 'a\{-2,}', 'aaaaasfoij ', 'aa'])
+:call add(tl, [2, 'a\{-,0}', 'oidfguih iuhi hiu aaaa', ''])
+:call add(tl, [2, 'a\{-,5}', 'abcd', ''])
+:call add(tl, [2, 'a\{-,5}', 'aaaaaaaaaa', ''])
+:" anti-greedy version of 'a*'
+:call add(tl, [2, 'a\{-}', 'bbbcddiuhfcd', ''])
+:call add(tl, [2, 'a\{-}', 'aaaaioudfh coisf jda', ''])
+:"
+:" Test groups of characters and submatches
+:call add(tl, [2, '\(abc\)*', 'abcabcabc', 'abcabcabc', 'abc'])
+:call add(tl, [2, '\(ab\)\+', 'abababaaaaa', 'ababab', 'ab'])
+:call add(tl, [2, '\(abaaaaa\)*cd', 'cd', 'cd', ''])
+:call add(tl, [2, '\(test1\)\? \(test2\)\?', 'test1 test3', 'test1 ', 'test1', ''])
+:call add(tl, [2, '\(test1\)\= \(test2\) \(test4443\)\=', ' test2 test4443 yupiiiiiiiiiii', ' test2 test4443', '', 'test2', 'test4443'])
+:call add(tl, [2, '\(\(sub1\) hello \(sub 2\)\)', 'asterix sub1 hello sub 2 obelix', 'sub1 hello sub 2', 'sub1 hello sub 2', 'sub1', 'sub 2'])
+:call add(tl, [2, '\(\(\(yyxxzz\)\)\)', 'abcdddsfiusfyyzzxxyyxxzz', 'yyxxzz', 'yyxxzz', 'yyxxzz', 'yyxxzz'])
+:call add(tl, [2, '\v((ab)+|c+)+', 'abcccaba', 'abcccab', 'ab', 'ab'])
+:call add(tl, [2, '\v((ab)|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
+:call add(tl, [2, '\v(a(c*)+b)+', 'acbababaaa', 'acbabab', 'ab', ''])
+:call add(tl, [2, '\v(a|b*)+', 'aaaa', 'aaaa', ''])
+:call add(tl, [2, '\p*', 'aá  ', 'aá '])
+:"
+:" Test greedy-ness and lazy-ness
+:call add(tl, [2, 'a\{-2,7}','aaaaaaaaaaaaa', 'aa'])
+:call add(tl, [2, 'a\{-2,7}x','aaaaaaaaax', 'aaaaaaax'])
+:call add(tl, [2, 'a\{2,7}','aaaaaaaaaaaaaaaaaaaa', 'aaaaaaa'])
+:call add(tl, [2, 'a\{2,7}x','aaaaaaaaax', 'aaaaaaax'])
+:call add(tl, [2, '\vx(.{-,8})yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz','ayxa','xayzxayz'])
+:call add(tl, [2, '\vx(.*)yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz', 'ayxayzxayzxa',''])
+:call add(tl, [2, '\v(a{1,2}){-2,3}','aaaaaaa','aaaa','aa'])
+:call add(tl, [2, '\v(a{-1,3})+','aa','aa','a'])
+:"
+:" Test Character classes
+:call add(tl, [2, '\d\+e\d\d','test 10e23 fd','10e23'])
+:"
+:" Test collections and character range []
+:call add(tl, [2, '\v[a]', 'abcd', 'a'])
+:call add(tl, [2, 'a[bcd]', 'abcd', 'ab'])
+:call add(tl, [2, 'a[b-d]', 'acbd', 'ac'])
+:call add(tl, [2, '[a-d][e-f][x-x]d', 'cexdxx', 'cexd'])
+:call add(tl, [2, '\v[[:alpha:]]+', 'abcdefghijklmnopqrstuvwxyz6','abcdefghijklmnopqrstuvwxyz'])
+:call add(tl, [2, '[[:alpha:]\+]', '6x8','x'])
+:call add(tl, [2, '[^abc]\+','abcabcabc'])
+:call add(tl, [2, '[^abc]','defghiasijvoinasoiunbvb','d'])
+:call add(tl, [2, '[^abc]\+','ddddddda','ddddddd'])
+:call add(tl, [2, '[^a-d]\+','aaaAAAZIHFNCddd','AAAZIHFNC'])
+:call add(tl, [2, '[a-f]*','iiiiiiii',''])
+:call add(tl, [2, '[a-f]*','abcdefgh','abcdef'])
+:call add(tl, [2, '[^a-f]\+','abcdefgh','gh'])
+:call add(tl, [2, '[a-c]\{-3,6}','abcabc','abc'])
+:call add(tl, [2, '[^[:alpha:]]\+','abcccadfoij7787ysf287yrnccdu','7787'])
+:call add(tl, [2, '[-a]', '-', '-'])
+:call add(tl, [2, '[a-]', '-', '-'])
+:call add(tl, [2, '[a-f]*\c','ABCDEFGH','ABCDEF'])
+:call add(tl, [2, '[abc][xyz]\c','-af-AF-BY--','BY'])
+:" filename regexp
+:call add(tl, [2, '[-./[:alnum:]_~]\+', 'log13.file', 'log13.file'])
+:" special chars
+:call add(tl, [2, '[\]\^\-\\]\+', '\^\\\-\---^', '\^\\\-\---^'])
+:" collation elem
+:call add(tl, [2, '[[.a.]]\+', 'aa', 'aa'])
+:" middle of regexp
+:call add(tl, [2, 'abc[0-9]*ddd', 'siuhabc ii'])
+:call add(tl, [2, 'abc[0-9]*ddd', 'adf abc44482ddd oijs', 'abc44482ddd'])
+:call add(tl, [2, '\_[0-9]\+', 'asfi9888u', '9888'])
+:call add(tl, [2, '[0-9\n]\+', 'asfi9888u', '9888'])
+:call add(tl, [2, '\_[0-9]\+', "asfi\n9888u", "\n9888"])
+:call add(tl, [2, '\_f', "  \na ", "\n"])
+:call add(tl, [2, '\_f\+', "  \na ", "\na"])
+:call add(tl, [2, '[0-9A-Za-z-_.]\+', " @0_a.A-{ ", "0_a.A-"])
+:"
+:"""" Test start/end of line, start/end of file
+:call add(tl, [2, '^a.', "a_\nb ", "a_"])
+:call add(tl, [2, '^a.', "b a \na_"])
+:call add(tl, [2, '.a$', " a\n "])
+:call add(tl, [2, '.a$', " a b\n_a", "_a"])
+:call add(tl, [2, '\%^a.', "a a\na", "a "])
+:call add(tl, [2, '\%^a', " a \na "])
+:call add(tl, [2, '.a\%$', " a\n "])
+:call add(tl, [2, '.a\%$', " a\n_a", "_a"])
+:"
+:"""" Test recognition of some character classes
+:call add(tl, [2, '[0-9]', '8', '8'])
+:call add(tl, [2, '[^0-9]', '8'])
+:call add(tl, [2, '[0-9a-fA-F]*', '0a7', '0a7'])
+:call add(tl, [2, '[^0-9A-Fa-f]\+', '0a7'])
+:call add(tl, [2, '[a-z_A-Z0-9]\+', 'aso_sfoij', 'aso_sfoij'])
+:call add(tl, [2, '[a-z]', 'a', 'a'])
+:call add(tl, [2, '[a-zA-Z]', 'a', 'a'])
+:call add(tl, [2, '[A-Z]', 'a'])
+:call add(tl, [2, '\C[^A-Z]\+', 'ABCOIJDEOIFNSD jsfoij sa', ' jsfoij sa'])
+:"
+:"""" Tests for \z features
+:" match ends at \ze
+:call add(tl, [2, 'xx \ze test', 'xx '])
+:call add(tl, [2, 'abc\zeend', 'oij abcend', 'abc'])
+:call add(tl, [2, 'aa\zebb\|aaxx', ' aabb ', 'aa'])
+:call add(tl, [2, 'aa\zebb\|aaxx', ' aaxx ', 'aaxx'])
+:call add(tl, [2, 'aabb\|aa\zebb', ' aabb ', 'aabb'])
+:call add(tl, [2, 'aa\zebb\|aaebb', ' aabb ', 'aa'])
+:" match starts at \zs
+:call add(tl, [2, 'abc\zsdd', 'ddabcddxyzt', 'dd'])
+:call add(tl, [2, 'aa \zsax', ' ax'])
+:call add(tl, [2, 'abc \zsmatch\ze abc', 'abc abc abc match abc abc', 'match'])
+:call add(tl, [2, '\v(a \zsif .*){2}', 'a if then a if last', 'if last', 'a if last'])
+:call add(tl, [2, '\>\zs.', 'aword. ', '.'])
+:"
+:"""" Tests for \@= and \& features
+:call add(tl, [2, 'abc\@=', 'abc', 'ab'])
+:call add(tl, [2, 'abc\@=cd', 'abcd', 'abcd'])
+:call add(tl, [2, 'abc\@=', 'ababc', 'ab'])
+:" will never match, no matter the input text
+:call add(tl, [2, 'abcd\@=e', 'abcd'])
+:" will never match
+:call add(tl, [2, 'abcd\@=e', 'any text in here ... '])
+:call add(tl, [2, '\v(abc)@=..', 'xabcd', 'ab', 'abc'])
+:call add(tl, [2, '\(.*John\)\@=.*Bob', 'here is John, and here is B'])
+:call add(tl, [2, '\(John.*\)\@=.*Bob', 'John is Bobs friend', 'John is Bob', 'John is Bobs friend'])
+:call add(tl, [2, '\<\S\+\())\)\@=', '$((i=i+1))', 'i=i+1', '))'])
+:call add(tl, [2, '.*John\&.*Bob', 'here is John, and here is B'])
+:call add(tl, [2, '.*John\&.*Bob', 'John is Bobs friend', 'John is Bob'])
+:call add(tl, [2, '\v(test1)@=.*yep', 'this is a test1, yep it is', 'test1, yep', 'test1'])
+:call add(tl, [2, 'foo\(bar\)\@!', 'foobar'])
+:call add(tl, [2, 'foo\(bar\)\@!', 'foo bar', 'foo'])
+:call add(tl, [2, 'if \(\(then\)\@!.\)*$', ' if then else'])
+:call add(tl, [2, 'if \(\(then\)\@!.\)*$', ' if else ', 'if else ', ' '])
+:call add(tl, [2, '\(foo\)\@!bar', 'foobar', 'bar'])
+:call add(tl, [2, '\(foo\)\@!...bar', 'foobar'])
+:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' bar foo '])
+:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo bar '])
+:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo xxx ', 'foo'])
+:call add(tl, [2, '[ ]\@!\p\%([ ]\@!\p\)*:', 'implicit mappings:', 'mappings:'])
+:call add(tl, [2, '[ ]\@!\p\([ ]\@!\p\)*:', 'implicit mappings:', 'mappings:', 's'])
+:call add(tl, [2, 'm\k\+_\@=\%(_\@!\k\)\@<=\k\+e', 'mx__xe', 'mx__xe'])
+:call add(tl, [2, '\%(\U\@<=S\k*\|S\l\)R', 'SuR', 'SuR'])
+:"
+:"""" Combining different tests and features
+:call add(tl, [2, '[[:alpha:]]\{-2,6}', '787abcdiuhsasiuhb4', 'ab'])
+:call add(tl, [2, '', 'abcd', ''])
+:call add(tl, [2, '\v(())', 'any possible text', ''])
+:call add(tl, [2, '\v%(ab(xyz)c)', '   abxyzc ', 'abxyzc', 'xyz'])
+:call add(tl, [2, '\v(test|)empty', 'tesempty', 'empty', ''])
+:call add(tl, [2, '\v(a|aa)(a|aa)', 'aaa', 'aa', 'a', 'a'])
+:"
+:"""" \%u and friends
+:call add(tl, [2, '\%d32', 'yes no', ' '])
+:call add(tl, [2, '\%o40', 'yes no', ' '])
+:call add(tl, [2, '\%x20', 'yes no', ' '])
+:call add(tl, [2, '\%u0020', 'yes no', ' '])
+:call add(tl, [2, '\%U00000020', 'yes no', ' '])
 :"
-:call add(tl, ['\v(a*)+', 'aaaa', 'aaaa', ''])
-:call add(tl, ['x', 'abcdef'])
+:""""" \%[abc]
+:call add(tl, [2, 'foo\%[bar]', 'fobar'])
+:call add(tl, [2, 'foo\%[bar]', 'foobar', 'foobar'])
+:call add(tl, [2, 'foo\%[bar]', 'fooxx', 'foo'])
+:call add(tl, [2, 'foo\%[bar]', 'foobxx', 'foob'])
+:call add(tl, [2, 'foo\%[bar]', 'foobaxx', 'fooba'])
+:call add(tl, [2, 'foo\%[bar]', 'foobarxx', 'foobar'])
+:call add(tl, [2, 'foo\%[bar]x', 'foobxx', 'foobx'])
+:call add(tl, [2, 'foo\%[bar]x', 'foobarxx', 'foobarx'])
+:call add(tl, [2, '\%[bar]x', 'barxx', 'barx'])
+:call add(tl, [2, '\%[bar]x', 'bxx', 'bx'])
+:call add(tl, [2, '\%[bar]x', 'xxx', 'x'])
+:call add(tl, [2, 'b\%[[ao]r]', 'bar bor', 'bar'])
+:call add(tl, [2, 'b\%[[]]r]', 'b]r bor', 'b]r'])
+:call add(tl, [2, '@\%[\w\-]*', '<http://john.net/pandoc/>[@pandoc]', '@pandoc'])
+:"
+:"""" Alternatives, must use first longest match
+:call add(tl, [2, 'goo\|go', 'google', 'goo'])
+:call add(tl, [2, '\<goo\|\<go', 'google', 'goo'])
+:call add(tl, [2, '\<goo\|go', 'google', 'goo'])
+:"
+:"""" Back references
+:call add(tl, [2, '\(\i\+\) \1', ' abc abc', 'abc abc', 'abc'])
+:call add(tl, [2, '\(\i\+\) \1', 'xgoo goox', 'goo goo', 'goo'])
+:call add(tl, [2, '\(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9', 'xabcddefghiabcddefghix', 'abcddefghiabcddefghi', 'a', 'b', 'c', 'dd', 'e', 'f', 'g', 'h', 'i'])
+:call add(tl, [2, '\(\d*\)a \1b', ' a b ', 'a b', ''])
+:call add(tl, [2, '^.\(.\).\_..\1.', "aaa\naaa\nb", "aaa\naaa", 'a'])
+:call add(tl, [2, '^.*\.\(.*\)/.\+\(\1\)\@<!$', 'foo.bat/foo.com', 'foo.bat/foo.com', 'bat'])
+:call add(tl, [2, '^.*\.\(.*\)/.\+\(\1\)\@<!$', 'foo.bat/foo.bat'])
+:call add(tl, [2, '^.*\.\(.*\)/.\+\(\1\)\@<=$', 'foo.bat/foo.bat', 'foo.bat/foo.bat', 'bat', 'bat'])
+:call add(tl, [2, '\\\@<!\${\(\d\+\%(:.\{-}\)\?\\\@<!\)}', '2013-06-27${0}', '${0}', '0'])
+:"
+:"""" Look-behind with limit
+:call add(tl, [2, '<\@<=span.', 'xxspanxx<spanyyy', 'spany'])
+:call add(tl, [2, '<\@1<=span.', 'xxspanxx<spanyyy', 'spany'])
+:call add(tl, [2, '<\@2<=span.', 'xxspanxx<spanyyy', 'spany'])
+:call add(tl, [2, '\(<<\)\@<=span.', 'xxspanxxxx<spanxx<<spanyyy', 'spany', '<<'])
+:call add(tl, [2, '\(<<\)\@1<=span.', 'xxspanxxxx<spanxx<<spanyyy'])
+:call add(tl, [2, '\(<<\)\@2<=span.', 'xxspanxxxx<spanxx<<spanyyy', 'spany', '<<'])
+:call add(tl, [2, '\(foo\)\@<!bar.', 'xx foobar1 xbar2 xx', 'bar2'])
+:"
+:" look-behind match in front of a zero-width item
+:call add(tl, [2, '\v\C%(<Last Changed:\s+)@<=.*$', '" test header'])
+:call add(tl, [2, '\v\C%(<Last Changed:\s+)@<=.*$', '" Last Changed: 1970', '1970'])
+:call add(tl, [2, '\(foo\)\@<=\>', 'foobar'])
+:call add(tl, [2, '\(foo\)\@<=\>', 'barfoo', '', 'foo'])
+:call add(tl, [2, '\(foo\)\@<=.*', 'foobar', 'bar', 'foo'])
+:"
+:""""" \@>
+:call add(tl, [2, '\(a*\)\@>a', 'aaaa'])
+:call add(tl, [2, '\(a*\)\@>b', 'aaab', 'aaab', 'aaa'])
+:" TODO: BT engine does not restore submatch after failure
+:call add(tl, [1, '\(a*\)\@>a\|a\+', 'aaaa', 'aaaa'])
+:"
+:"""" "\_" prepended negated collection matches EOL
+:call add(tl, [2, '\_[^8-9]\+', "asfi\n9888", "asfi\n"])
+:call add(tl, [2, '\_[^a]\+', "asfi\n9888", "sfi\n9888"])
+:"
+:"""" Requiring lots of states.
+:call add(tl, [2, '[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}', " 12345678-1234-1234-1234-123456789012 ", "12345678-1234-1234-1234-123456789012", "1234-"])
+:"
+:"""" Skip adding state twice
+:call add(tl, [2, '^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=', "#if FOO", "#if", ' FOO'])
+:"
+:"""" Run the tests
 :"
 :for t in tl
-:  let l = matchlist(t[1], t[0])
+:  let re = t[0]
+:  let pat = t[1]
+:  let text = t[2]
+:  let matchidx = 3
+:  for engine in [0, 1, 2]
+:    if engine == 2 && re == 0 || engine == 1 && re ==1
+:      continue
+:    endif
+:    let &regexpengine = engine
+:    try
+:      let l = matchlist(text, pat)
+:    catch
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"'
+:    endtry
 :" check the match itself
-:  if len(l) == 0 && len(t) > 2
-:    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", did not match, expected: \"' . t[2] . '\"'
-:  elseif len(l) > 0 && len(t) == 2
-:    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", match: \"' . l[0] . '\", expected no match'
-:  elseif len(t) > 2 && l[0] != t[2]
-:    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", match: \"' . l[0] . '\", expected: \"' . t[2] . '\"'
-:  else
-:    $put ='OK'
-:  endif
-:  if len(l) > 0
+:    if len(l) == 0 && len(t) > matchidx
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"'
+:    elseif len(l) > 0 && len(t) == matchidx
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match'
+:    elseif len(t) > matchidx && l[0] != t[matchidx]
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"'
+:    else
+:      $put ='OK ' . engine . ' - ' . pat
+:    endif
+:    if len(l) > 0
 :"   check all the nine submatches
-:    for i in range(1, 9)
-:      if len(t) <= i + 2
-:        let e = ''
-:      else
-:        let e = t[i + 2]
-:      endif
-:      if l[i] != e
-:        $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
-:      endif
-:    endfor
-:    unlet i
-:  endif
+:      for i in range(1, 9)
+:        if len(t) <= matchidx + i
+:          let e = ''
+:        else
+:          let e = t[matchidx + i]
+:        endif
+:        if l[i] != e
+:          $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
+:        endif
+:      endfor
+:      unlet i
+:    endif
+:  endfor
 :endfor
 :unlet t tl e l
-:/^Results/,$wq! test.out
+:"
+:"""""" multi-line tests """"""""""""""""""""
+:let tl = []
+:"
+:"""" back references
+:call add(tl, [2, '^.\(.\).\_..\1.', ['aaa', 'aaa', 'b'], ['XX', 'b']])
+:call add(tl, [2, '\v.*\/(.*)\n.*\/\1$', ['./Dir1/Dir2/zyxwvuts.txt', './Dir1/Dir2/abcdefgh.bat', '', './Dir1/Dir2/file1.txt', './OtherDir1/OtherDir2/file1.txt'], ['./Dir1/Dir2/zyxwvuts.txt', './Dir1/Dir2/abcdefgh.bat', '', 'XX']])
+:"
+:"""" line breaks
+:call add(tl, [2, '\S.*\nx', ['abc', 'def', 'ghi', 'xjk', 'lmn'], ['abc', 'def', 'XXjk', 'lmn']])
+:"
+:" Check that \_[0-9] matching EOL does not break a following \>
+:call add(tl, [2, '\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>', ['', 'localnet/192.168.0.1', ''], ['', 'localnet/XX', '']])
+:"
+:" Check a pattern with a line break and ^ and $
+:call add(tl, [2, 'a\n^b$\n^c', ['a', 'b', 'c'], ['XX']])
+:"
+:"""" Run the multi-line tests
+:"
+:$put ='multi-line tests'
+:for t in tl
+:  let re = t[0]
+:  let pat = t[1]
+:  let before = t[2]
+:  let after = t[3]
+:  for engine in [0, 1, 2]
+:    if engine == 2 && re == 0 || engine == 1 && re ==1
+:      continue
+:    endif
+:    let &regexpengine = engine
+:    new
+:    call setline(1, before)
+:    exe '%s/' . pat . '/XX/'
+:    let result = getline(1, '$')
+:    q!
+:    if result != after
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . string(before) . '\", expected: \"' . string(after) . '\", got: \"' . string(result) . '\"'
+:    else
+:      $put ='OK ' . engine . ' - ' . pat
+:    endif
+:  endfor
+:endfor
+:unlet t tl
+:"
+:" Check that using a pattern on two lines doesn't get messed up by using
+:" matchstr() with \ze in between.
+:set re=0
+/^Substitute here
+:.+1,.+2s/""/\='"'.matchstr(getline("."), '\d\+\ze<').'"'
+/^Substitute here
+:.+1,.+2yank
+Go\ep:"
+:"
+:" Check a pattern with a look beind crossing a line boundary
+/^Behind:
+/\(<\_[xy]\+\)\@3<=start
+:.yank
+Go\ep:"
+:"
+:" Check matching Visual area
+/^Visual:
+jfxvfx:s/\%Ve/E/g
+jV:s/\%Va/A/g
+jfx\16fxj:s/\%Vo/O/g
+:/^Visual/+1,/^Visual/+4yank
+Go\ep:"
+:"
+:" Check matching marks
+/^Marks:
+jfSmsfEme:.-4,.+6s/.\%>'s.*\%<'e../here/
+jfSmsj0fEme:.-4,.+6s/.\%>'s\_.*\%<'e../again/
+:/^Marks:/+1,/^Marks:/+3yank
+Go\ep:"
+:"
+:" Check patterns matching cursor position.
+:func! Postest()
+ new
+ call setline(1, ['ffooooo', 'boboooo', 'zoooooo', 'koooooo', 'moooooo', "\t\t\tfoo", 'abababababababfoo', 'bababababababafoo', '********_'])
+ call setpos('.', [0, 1, 0, 0])
+ s/\%>3c.//g
+ call setpos('.', [0, 2, 4, 0])
+ s/\%#.*$//g
+ call setpos('.', [0, 3, 0, 0])
+ s/\%<3c./_/g
+ %s/\%4l\%>5c./_/g
+ %s/\%6l\%>25v./_/g
+ %s/\%>6l\%3c./!/g
+ %s/\%>7l\%12c./?/g
+ %s/\%>7l\%<9l\%>5v\%<8v./#/g
+ 1,$yank
+ quit!
+endfunc
+Go-0-\e:set re=0
+:call Postest()
+:put
+o-1-\e:set re=1
+:call Postest()
+:put
+o-2-\e:set re=2
+:call Postest()
+:put
+:"
+:" start and end of buffer
+/\%^
+yeGo\ep:"
+50%/\%^..
+yeGo\epA END\e:"
+50%/\%$
+"ayb20gg/..\%$
+"bybGo\e"apo\e"bp:"
+:"
+:""""" Write the results """""""""""""
+:/\%#=1^Results/,$wq! test.out
 ENDTEST
 
+Substitute here:
+<T="">Ta 5</Title>
+<T="">Ac 7</Title>
+
+Behind:
+asdfasd<yyy
+xxstart1
+asdfasd<yy
+xxxstart2
+asdfasd<yy
+xxstart3
+
+Visual:
+thexe the thexethe
+andaxand andaxand
+oooxofor foroxooo
+oooxofor foroxooo
+
+Marks:
+asdfSasdfsadfEasdf
+asdfSas
+dfsadfEasdf
+
 Results of test64:
index 1692aae..2df568d 100644 (file)
 Results of test64:
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
+OK 0 - ab
+OK 1 - ab
+OK 2 - ab
+OK 0 - b
+OK 1 - b
+OK 2 - b
+OK 0 - bc*
+OK 1 - bc*
+OK 2 - bc*
+OK 0 - bc\{-}
+OK 1 - bc\{-}
+OK 2 - bc\{-}
+OK 0 - bc\{-}\(d\)
+OK 1 - bc\{-}\(d\)
+OK 2 - bc\{-}\(d\)
+OK 0 - bc*
+OK 1 - bc*
+OK 2 - bc*
+OK 0 - c*
+OK 1 - c*
+OK 2 - c*
+OK 0 - bc*
+OK 1 - bc*
+OK 2 - bc*
+OK 0 - c*
+OK 1 - c*
+OK 2 - c*
+OK 0 - bc\+
+OK 1 - bc\+
+OK 2 - bc\+
+OK 0 - bc\+
+OK 1 - bc\+
+OK 2 - bc\+
+OK 0 - a\|ab
+OK 1 - a\|ab
+OK 2 - a\|ab
+OK 0 - c\?
+OK 1 - c\?
+OK 2 - c\?
+OK 0 - bc\?
+OK 1 - bc\?
+OK 2 - bc\?
+OK 0 - bc\?
+OK 1 - bc\?
+OK 2 - bc\?
+OK 0 - \va{1}
+OK 1 - \va{1}
+OK 2 - \va{1}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \vb{1}
+OK 1 - \vb{1}
+OK 2 - \vb{1}
+OK 0 - \vba{2}
+OK 1 - \vba{2}
+OK 2 - \vba{2}
+OK 0 - \vba{3}
+OK 1 - \vba{3}
+OK 2 - \vba{3}
+OK 0 - \v(ab){1}
+OK 1 - \v(ab){1}
+OK 2 - \v(ab){1}
+OK 0 - \v(ab){1}
+OK 1 - \v(ab){1}
+OK 2 - \v(ab){1}
+OK 0 - \v(ab){1}
+OK 1 - \v(ab){1}
+OK 2 - \v(ab){1}
+OK 0 - \v(ab){0,2}
+OK 1 - \v(ab){0,2}
+OK 2 - \v(ab){0,2}
+OK 0 - \v(ab){0,2}
+OK 1 - \v(ab){0,2}
+OK 2 - \v(ab){0,2}
+OK 0 - \v(ab){1,2}
+OK 1 - \v(ab){1,2}
+OK 2 - \v(ab){1,2}
+OK 0 - \v(ab){1,2}
+OK 1 - \v(ab){1,2}
+OK 2 - \v(ab){1,2}
+OK 0 - \v(ab){2,4}
+OK 1 - \v(ab){2,4}
+OK 2 - \v(ab){2,4}
+OK 0 - \v(ab){2,4}
+OK 1 - \v(ab){2,4}
+OK 2 - \v(ab){2,4}
+OK 0 - \v(ab){2}
+OK 1 - \v(ab){2}
+OK 2 - \v(ab){2}
+OK 0 - \v(ab){2}
+OK 1 - \v(ab){2}
+OK 2 - \v(ab){2}
+OK 0 - \v(ab){2}
+OK 1 - \v(ab){2}
+OK 2 - \v(ab){2}
+OK 0 - \v(ab){2}
+OK 1 - \v(ab){2}
+OK 2 - \v(ab){2}
+OK 0 - \v((ab){2}){2}
+OK 1 - \v((ab){2}){2}
+OK 2 - \v((ab){2}){2}
+OK 0 - \v((ab){2}){2}
+OK 1 - \v((ab){2}){2}
+OK 2 - \v((ab){2}){2}
+OK 0 - \v(a{1}){1}
+OK 1 - \v(a{1}){1}
+OK 2 - \v(a{1}){1}
+OK 0 - \v(a{2}){1}
+OK 1 - \v(a{2}){1}
+OK 2 - \v(a{2}){1}
+OK 0 - \v(a{2}){1}
+OK 1 - \v(a{2}){1}
+OK 2 - \v(a{2}){1}
+OK 0 - \v(a{2}){1}
+OK 1 - \v(a{2}){1}
+OK 2 - \v(a{2}){1}
+OK 0 - \v(a{1}){2}
+OK 1 - \v(a{1}){2}
+OK 2 - \v(a{1}){2}
+OK 0 - \v(a{1}){2}
+OK 1 - \v(a{1}){2}
+OK 2 - \v(a{1}){2}
+OK 0 - \v(a{2})+
+OK 1 - \v(a{2})+
+OK 2 - \v(a{2})+
+OK 0 - \v(a{2})+
+OK 1 - \v(a{2})+
+OK 2 - \v(a{2})+
+OK 0 - \v(a{2}){1}
+OK 1 - \v(a{2}){1}
+OK 2 - \v(a{2}){1}
+OK 0 - \v(a{1}){2}
+OK 1 - \v(a{1}){2}
+OK 2 - \v(a{1}){2}
+OK 0 - \v(a{1}){1}
+OK 1 - \v(a{1}){1}
+OK 2 - \v(a{1}){1}
+OK 0 - \v(a{2}){2}
+OK 1 - \v(a{2}){2}
+OK 2 - \v(a{2}){2}
+OK 0 - \v(a{2}){2}
+OK 1 - \v(a{2}){2}
+OK 2 - \v(a{2}){2}
+OK 0 - \v(a+){2}
+OK 1 - \v(a+){2}
+OK 2 - \v(a+){2}
+OK 0 - \v(a{3}){2}
+OK 1 - \v(a{3}){2}
+OK 2 - \v(a{3}){2}
+OK 0 - \v(a{1,2}){2}
+OK 1 - \v(a{1,2}){2}
+OK 2 - \v(a{1,2}){2}
+OK 0 - \v(a{1,3}){2}
+OK 1 - \v(a{1,3}){2}
+OK 2 - \v(a{1,3}){2}
+OK 0 - \v(a{1,3}){2}
+OK 1 - \v(a{1,3}){2}
+OK 2 - \v(a{1,3}){2}
+OK 0 - \v(a{1,3}){3}
+OK 1 - \v(a{1,3}){3}
+OK 2 - \v(a{1,3}){3}
+OK 0 - \v(a{1,2}){2}
+OK 1 - \v(a{1,2}){2}
+OK 2 - \v(a{1,2}){2}
+OK 0 - \v(a+)+
+OK 1 - \v(a+)+
+OK 2 - \v(a+)+
+OK 0 - \v(a+)+
+OK 1 - \v(a+)+
+OK 2 - \v(a+)+
+OK 0 - \v(a+){1,2}
+OK 1 - \v(a+){1,2}
+OK 2 - \v(a+){1,2}
+OK 0 - \v(a+)(a+)
+OK 1 - \v(a+)(a+)
+OK 2 - \v(a+)(a+)
+OK 0 - \v(a{3})+
+OK 1 - \v(a{3})+
+OK 2 - \v(a{3})+
+OK 0 - \v(a|b|c)+
+OK 1 - \v(a|b|c)+
+OK 2 - \v(a|b|c)+
+OK 0 - \v(a|b|c){2}
+OK 1 - \v(a|b|c){2}
+OK 2 - \v(a|b|c){2}
+OK 0 - \v(abc){2}
+OK 1 - \v(abc){2}
+OK 2 - \v(abc){2}
+OK 0 - \v(abc){2}
+OK 1 - \v(abc){2}
+OK 2 - \v(abc){2}
+OK 0 - a*
+OK 1 - a*
+OK 2 - a*
+OK 0 - \v(a*)+
+OK 1 - \v(a*)+
+OK 2 - \v(a*)+
+OK 0 - \v((ab)+)+
+OK 1 - \v((ab)+)+
+OK 2 - \v((ab)+)+
+OK 0 - \v(((ab)+)+)+
+OK 1 - \v(((ab)+)+)+
+OK 2 - \v(((ab)+)+)+
+OK 0 - \v(((ab)+)+)+
+OK 1 - \v(((ab)+)+)+
+OK 2 - \v(((ab)+)+)+
+OK 0 - \v(a{0,2})+
+OK 1 - \v(a{0,2})+
+OK 2 - \v(a{0,2})+
+OK 0 - \v(a*)+
+OK 1 - \v(a*)+
+OK 2 - \v(a*)+
+OK 0 - \v((a*)+)+
+OK 1 - \v((a*)+)+
+OK 2 - \v((a*)+)+
+OK 0 - \v((ab)*)+
+OK 1 - \v((ab)*)+
+OK 2 - \v((ab)*)+
+OK 0 - \va{1,3}
+OK 1 - \va{1,3}
+OK 2 - \va{1,3}
+OK 0 - \va{2,3}
+OK 1 - \va{2,3}
+OK 2 - \va{2,3}
+OK 0 - \v((ab)+|c*)+
+OK 1 - \v((ab)+|c*)+
+OK 2 - \v((ab)+|c*)+
+OK 0 - \v(a{2})|(b{3})
+OK 1 - \v(a{2})|(b{3})
+OK 2 - \v(a{2})|(b{3})
+OK 0 - \va{2}|b{2}
+OK 1 - \va{2}|b{2}
+OK 2 - \va{2}|b{2}
+OK 0 - \v(a)+|(c)+
+OK 1 - \v(a)+|(c)+
+OK 2 - \v(a)+|(c)+
+OK 0 - \vab{2,3}c
+OK 1 - \vab{2,3}c
+OK 2 - \vab{2,3}c
+OK 0 - \vab{2,3}c
+OK 1 - \vab{2,3}c
+OK 2 - \vab{2,3}c
+OK 0 - \vab{2,3}cd{2,3}e
+OK 1 - \vab{2,3}cd{2,3}e
+OK 2 - \vab{2,3}cd{2,3}e
+OK 0 - \va(bc){2}d
+OK 1 - \va(bc){2}d
+OK 2 - \va(bc){2}d
+OK 0 - \va*a{2}
+OK 1 - \va*a{2}
+OK 2 - \va*a{2}
+OK 0 - \va*a{2}
+OK 1 - \va*a{2}
+OK 2 - \va*a{2}
+OK 0 - \va*a{2}
+OK 1 - \va*a{2}
+OK 2 - \va*a{2}
+OK 0 - \va*a{2}
+OK 1 - \va*a{2}
+OK 2 - \va*a{2}
+OK 0 - \va*b*|a*c*
+OK 1 - \va*b*|a*c*
+OK 2 - \va*b*|a*c*
+OK 0 - \va{1}b{1}|a{1}b{1}
+OK 1 - \va{1}b{1}|a{1}b{1}
+OK 2 - \va{1}b{1}|a{1}b{1}
+OK 0 - \v(a)
+OK 1 - \v(a)
+OK 2 - \v(a)
+OK 0 - \v(a)(b)
+OK 1 - \v(a)(b)
+OK 2 - \v(a)(b)
+OK 0 - \v(ab)(b)(c)
+OK 1 - \v(ab)(b)(c)
+OK 2 - \v(ab)(b)(c)
+OK 0 - \v((a)(b))
+OK 1 - \v((a)(b))
+OK 2 - \v((a)(b))
+OK 0 - \v(a)|(b)
+OK 1 - \v(a)|(b)
+OK 2 - \v(a)|(b)
+OK 0 - \v(a*)+
+OK 1 - \v(a*)+
+OK 2 - \v(a*)+
+OK 0 - x
+OK 1 - x
+OK 2 - x
+OK 0 - ab
+OK 1 - ab
+OK 2 - ab
+OK 0 - ab
+OK 1 - ab
+OK 2 - ab
+OK 0 - ab
+OK 1 - ab
+OK 2 - ab
+OK 0 - x*
+OK 1 - x*
+OK 2 - x*
+OK 0 - x*
+OK 1 - x*
+OK 2 - x*
+OK 0 - x*
+OK 1 - x*
+OK 2 - x*
+OK 0 - x\+
+OK 1 - x\+
+OK 2 - x\+
+OK 0 - x\+
+OK 1 - x\+
+OK 2 - x\+
+OK 0 - x\+
+OK 1 - x\+
+OK 2 - x\+
+OK 0 - x\+
+OK 1 - x\+
+OK 2 - x\+
+OK 0 - x\=
+OK 1 - x\=
+OK 2 - x\=
+OK 0 - x\=
+OK 1 - x\=
+OK 2 - x\=
+OK 0 - x\=
+OK 1 - x\=
+OK 2 - x\=
+OK 0 - x\?
+OK 1 - x\?
+OK 2 - x\?
+OK 0 - x\?
+OK 1 - x\?
+OK 2 - x\?
+OK 0 - x\?
+OK 1 - x\?
+OK 2 - x\?
+OK 0 - a\{0,0}
+OK 1 - a\{0,0}
+OK 2 - a\{0,0}
+OK 0 - a\{0,1}
+OK 1 - a\{0,1}
+OK 2 - a\{0,1}
+OK 0 - a\{1,0}
+OK 1 - a\{1,0}
+OK 2 - a\{1,0}
+OK 0 - a\{3,6}
+OK 1 - a\{3,6}
+OK 2 - a\{3,6}
+OK 0 - a\{3,6}
+OK 1 - a\{3,6}
+OK 2 - a\{3,6}
+OK 0 - a\{3,6}
+OK 1 - a\{3,6}
+OK 2 - a\{3,6}
+OK 0 - a\{0}
+OK 1 - a\{0}
+OK 2 - a\{0}
+OK 0 - a\{2}
+OK 1 - a\{2}
+OK 2 - a\{2}
+OK 0 - a\{2}
+OK 1 - a\{2}
+OK 2 - a\{2}
+OK 0 - a\{2}
+OK 1 - a\{2}
+OK 2 - a\{2}
+OK 0 - a\{0,}
+OK 1 - a\{0,}
+OK 2 - a\{0,}
+OK 0 - a\{0,}
+OK 1 - a\{0,}
+OK 2 - a\{0,}
+OK 0 - a\{2,}
+OK 1 - a\{2,}
+OK 2 - a\{2,}
+OK 0 - a\{2,}
+OK 1 - a\{2,}
+OK 2 - a\{2,}
+OK 0 - a\{5,}
+OK 1 - a\{5,}
+OK 2 - a\{5,}
+OK 0 - a\{5,}
+OK 1 - a\{5,}
+OK 2 - a\{5,}
+OK 0 - a\{,0}
+OK 1 - a\{,0}
+OK 2 - a\{,0}
+OK 0 - a\{,5}
+OK 1 - a\{,5}
+OK 2 - a\{,5}
+OK 0 - a\{,5}
+OK 1 - a\{,5}
+OK 2 - a\{,5}
+OK 0 - ^*\{4,}$
+OK 1 - ^*\{4,}$
+OK 2 - ^*\{4,}$
+OK 0 - ^*\{4,}$
+OK 1 - ^*\{4,}$
+OK 2 - ^*\{4,}$
+OK 0 - ^*\{4,}$
+OK 1 - ^*\{4,}$
+OK 2 - ^*\{4,}$
+OK 0 - a\{}
+OK 1 - a\{}
+OK 2 - a\{}
+OK 0 - a\{}
+OK 1 - a\{}
+OK 2 - a\{}
+OK 0 - a\{-0,0}
+OK 1 - a\{-0,0}
+OK 2 - a\{-0,0}
+OK 0 - a\{-0,1}
+OK 1 - a\{-0,1}
+OK 2 - a\{-0,1}
+OK 0 - a\{-3,6}
+OK 1 - a\{-3,6}
+OK 2 - a\{-3,6}
+OK 0 - a\{-3,6}
+OK 1 - a\{-3,6}
+OK 2 - a\{-3,6}
+OK 0 - a\{-3,6}
+OK 1 - a\{-3,6}
+OK 2 - a\{-3,6}
+OK 0 - a\{-0}
+OK 1 - a\{-0}
+OK 2 - a\{-0}
+OK 0 - a\{-2}
+OK 1 - a\{-2}
+OK 2 - a\{-2}
+OK 0 - a\{-2}
+OK 1 - a\{-2}
+OK 2 - a\{-2}
+OK 0 - a\{-0,}
+OK 1 - a\{-0,}
+OK 2 - a\{-0,}
+OK 0 - a\{-0,}
+OK 1 - a\{-0,}
+OK 2 - a\{-0,}
+OK 0 - a\{-2,}
+OK 1 - a\{-2,}
+OK 2 - a\{-2,}
+OK 0 - a\{-2,}
+OK 1 - a\{-2,}
+OK 2 - a\{-2,}
+OK 0 - a\{-,0}
+OK 1 - a\{-,0}
+OK 2 - a\{-,0}
+OK 0 - a\{-,5}
+OK 1 - a\{-,5}
+OK 2 - a\{-,5}
+OK 0 - a\{-,5}
+OK 1 - a\{-,5}
+OK 2 - a\{-,5}
+OK 0 - a\{-}
+OK 1 - a\{-}
+OK 2 - a\{-}
+OK 0 - a\{-}
+OK 1 - a\{-}
+OK 2 - a\{-}
+OK 0 - \(abc\)*
+OK 1 - \(abc\)*
+OK 2 - \(abc\)*
+OK 0 - \(ab\)\+
+OK 1 - \(ab\)\+
+OK 2 - \(ab\)\+
+OK 0 - \(abaaaaa\)*cd
+OK 1 - \(abaaaaa\)*cd
+OK 2 - \(abaaaaa\)*cd
+OK 0 - \(test1\)\? \(test2\)\?
+OK 1 - \(test1\)\? \(test2\)\?
+OK 2 - \(test1\)\? \(test2\)\?
+OK 0 - \(test1\)\= \(test2\) \(test4443\)\=
+OK 1 - \(test1\)\= \(test2\) \(test4443\)\=
+OK 2 - \(test1\)\= \(test2\) \(test4443\)\=
+OK 0 - \(\(sub1\) hello \(sub 2\)\)
+OK 1 - \(\(sub1\) hello \(sub 2\)\)
+OK 2 - \(\(sub1\) hello \(sub 2\)\)
+OK 0 - \(\(\(yyxxzz\)\)\)
+OK 1 - \(\(\(yyxxzz\)\)\)
+OK 2 - \(\(\(yyxxzz\)\)\)
+OK 0 - \v((ab)+|c+)+
+OK 1 - \v((ab)+|c+)+
+OK 2 - \v((ab)+|c+)+
+OK 0 - \v((ab)|c*)+
+OK 1 - \v((ab)|c*)+
+OK 2 - \v((ab)|c*)+
+OK 0 - \v(a(c*)+b)+
+OK 1 - \v(a(c*)+b)+
+OK 2 - \v(a(c*)+b)+
+OK 0 - \v(a|b*)+
+OK 1 - \v(a|b*)+
+OK 2 - \v(a|b*)+
+OK 0 - \p*
+OK 1 - \p*
+OK 2 - \p*
+OK 0 - a\{-2,7}
+OK 1 - a\{-2,7}
+OK 2 - a\{-2,7}
+OK 0 - a\{-2,7}x
+OK 1 - a\{-2,7}x
+OK 2 - a\{-2,7}x
+OK 0 - a\{2,7}
+OK 1 - a\{2,7}
+OK 2 - a\{2,7}
+OK 0 - a\{2,7}x
+OK 1 - a\{2,7}x
+OK 2 - a\{2,7}x
+OK 0 - \vx(.{-,8})yz(.*)
+OK 1 - \vx(.{-,8})yz(.*)
+OK 2 - \vx(.{-,8})yz(.*)
+OK 0 - \vx(.*)yz(.*)
+OK 1 - \vx(.*)yz(.*)
+OK 2 - \vx(.*)yz(.*)
+OK 0 - \v(a{1,2}){-2,3}
+OK 1 - \v(a{1,2}){-2,3}
+OK 2 - \v(a{1,2}){-2,3}
+OK 0 - \v(a{-1,3})+
+OK 1 - \v(a{-1,3})+
+OK 2 - \v(a{-1,3})+
+OK 0 - \d\+e\d\d
+OK 1 - \d\+e\d\d
+OK 2 - \d\+e\d\d
+OK 0 - \v[a]
+OK 1 - \v[a]
+OK 2 - \v[a]
+OK 0 - a[bcd]
+OK 1 - a[bcd]
+OK 2 - a[bcd]
+OK 0 - a[b-d]
+OK 1 - a[b-d]
+OK 2 - a[b-d]
+OK 0 - [a-d][e-f][x-x]d
+OK 1 - [a-d][e-f][x-x]d
+OK 2 - [a-d][e-f][x-x]d
+OK 0 - \v[[:alpha:]]+
+OK 1 - \v[[:alpha:]]+
+OK 2 - \v[[:alpha:]]+
+OK 0 - [[:alpha:]\+]
+OK 1 - [[:alpha:]\+]
+OK 2 - [[:alpha:]\+]
+OK 0 - [^abc]\+
+OK 1 - [^abc]\+
+OK 2 - [^abc]\+
+OK 0 - [^abc]
+OK 1 - [^abc]
+OK 2 - [^abc]
+OK 0 - [^abc]\+
+OK 1 - [^abc]\+
+OK 2 - [^abc]\+
+OK 0 - [^a-d]\+
+OK 1 - [^a-d]\+
+OK 2 - [^a-d]\+
+OK 0 - [a-f]*
+OK 1 - [a-f]*
+OK 2 - [a-f]*
+OK 0 - [a-f]*
+OK 1 - [a-f]*
+OK 2 - [a-f]*
+OK 0 - [^a-f]\+
+OK 1 - [^a-f]\+
+OK 2 - [^a-f]\+
+OK 0 - [a-c]\{-3,6}
+OK 1 - [a-c]\{-3,6}
+OK 2 - [a-c]\{-3,6}
+OK 0 - [^[:alpha:]]\+
+OK 1 - [^[:alpha:]]\+
+OK 2 - [^[:alpha:]]\+
+OK 0 - [-a]
+OK 1 - [-a]
+OK 2 - [-a]
+OK 0 - [a-]
+OK 1 - [a-]
+OK 2 - [a-]
+OK 0 - [a-f]*\c
+OK 1 - [a-f]*\c
+OK 2 - [a-f]*\c
+OK 0 - [abc][xyz]\c
+OK 1 - [abc][xyz]\c
+OK 2 - [abc][xyz]\c
+OK 0 - [-./[:alnum:]_~]\+
+OK 1 - [-./[:alnum:]_~]\+
+OK 2 - [-./[:alnum:]_~]\+
+OK 0 - [\]\^\-\\]\+
+OK 1 - [\]\^\-\\]\+
+OK 2 - [\]\^\-\\]\+
+OK 0 - [[.a.]]\+
+OK 1 - [[.a.]]\+
+OK 2 - [[.a.]]\+
+OK 0 - abc[0-9]*ddd
+OK 1 - abc[0-9]*ddd
+OK 2 - abc[0-9]*ddd
+OK 0 - abc[0-9]*ddd
+OK 1 - abc[0-9]*ddd
+OK 2 - abc[0-9]*ddd
+OK 0 - \_[0-9]\+
+OK 1 - \_[0-9]\+
+OK 2 - \_[0-9]\+
+OK 0 - [0-9\n]\+
+OK 1 - [0-9\n]\+
+OK 2 - [0-9\n]\+
+OK 0 - \_[0-9]\+
+OK 1 - \_[0-9]\+
+OK 2 - \_[0-9]\+
+OK 0 - \_f
+OK 1 - \_f
+OK 2 - \_f
+OK 0 - \_f\+
+OK 1 - \_f\+
+OK 2 - \_f\+
+OK 0 - [0-9A-Za-z-_.]\+
+OK 1 - [0-9A-Za-z-_.]\+
+OK 2 - [0-9A-Za-z-_.]\+
+OK 0 - ^a.
+OK 1 - ^a.
+OK 2 - ^a.
+OK 0 - ^a.
+OK 1 - ^a.
+OK 2 - ^a.
+OK 0 - .a$
+OK 1 - .a$
+OK 2 - .a$
+OK 0 - .a$
+OK 1 - .a$
+OK 2 - .a$
+OK 0 - \%^a.
+OK 1 - \%^a.
+OK 2 - \%^a.
+OK 0 - \%^a
+OK 1 - \%^a
+OK 2 - \%^a
+OK 0 - .a\%$
+OK 1 - .a\%$
+OK 2 - .a\%$
+OK 0 - .a\%$
+OK 1 - .a\%$
+OK 2 - .a\%$
+OK 0 - [0-9]
+OK 1 - [0-9]
+OK 2 - [0-9]
+OK 0 - [^0-9]
+OK 1 - [^0-9]
+OK 2 - [^0-9]
+OK 0 - [0-9a-fA-F]*
+OK 1 - [0-9a-fA-F]*
+OK 2 - [0-9a-fA-F]*
+OK 0 - [^0-9A-Fa-f]\+
+OK 1 - [^0-9A-Fa-f]\+
+OK 2 - [^0-9A-Fa-f]\+
+OK 0 - [a-z_A-Z0-9]\+
+OK 1 - [a-z_A-Z0-9]\+
+OK 2 - [a-z_A-Z0-9]\+
+OK 0 - [a-z]
+OK 1 - [a-z]
+OK 2 - [a-z]
+OK 0 - [a-zA-Z]
+OK 1 - [a-zA-Z]
+OK 2 - [a-zA-Z]
+OK 0 - [A-Z]
+OK 1 - [A-Z]
+OK 2 - [A-Z]
+OK 0 - \C[^A-Z]\+
+OK 1 - \C[^A-Z]\+
+OK 2 - \C[^A-Z]\+
+OK 0 - xx \ze test
+OK 1 - xx \ze test
+OK 2 - xx \ze test
+OK 0 - abc\zeend
+OK 1 - abc\zeend
+OK 2 - abc\zeend
+OK 0 - aa\zebb\|aaxx
+OK 1 - aa\zebb\|aaxx
+OK 2 - aa\zebb\|aaxx
+OK 0 - aa\zebb\|aaxx
+OK 1 - aa\zebb\|aaxx
+OK 2 - aa\zebb\|aaxx
+OK 0 - aabb\|aa\zebb
+OK 1 - aabb\|aa\zebb
+OK 2 - aabb\|aa\zebb
+OK 0 - aa\zebb\|aaebb
+OK 1 - aa\zebb\|aaebb
+OK 2 - aa\zebb\|aaebb
+OK 0 - abc\zsdd
+OK 1 - abc\zsdd
+OK 2 - abc\zsdd
+OK 0 - aa \zsax
+OK 1 - aa \zsax
+OK 2 - aa \zsax
+OK 0 - abc \zsmatch\ze abc
+OK 1 - abc \zsmatch\ze abc
+OK 2 - abc \zsmatch\ze abc
+OK 0 - \v(a \zsif .*){2}
+OK 1 - \v(a \zsif .*){2}
+OK 2 - \v(a \zsif .*){2}
+OK 0 - \>\zs.
+OK 1 - \>\zs.
+OK 2 - \>\zs.
+OK 0 - abc\@=
+OK 1 - abc\@=
+OK 2 - abc\@=
+OK 0 - abc\@=cd
+OK 1 - abc\@=cd
+OK 2 - abc\@=cd
+OK 0 - abc\@=
+OK 1 - abc\@=
+OK 2 - abc\@=
+OK 0 - abcd\@=e
+OK 1 - abcd\@=e
+OK 2 - abcd\@=e
+OK 0 - abcd\@=e
+OK 1 - abcd\@=e
+OK 2 - abcd\@=e
+OK 0 - \v(abc)@=..
+OK 1 - \v(abc)@=..
+OK 2 - \v(abc)@=..
+OK 0 - \(.*John\)\@=.*Bob
+OK 1 - \(.*John\)\@=.*Bob
+OK 2 - \(.*John\)\@=.*Bob
+OK 0 - \(John.*\)\@=.*Bob
+OK 1 - \(John.*\)\@=.*Bob
+OK 2 - \(John.*\)\@=.*Bob
+OK 0 - \<\S\+\())\)\@=
+OK 1 - \<\S\+\())\)\@=
+OK 2 - \<\S\+\())\)\@=
+OK 0 - .*John\&.*Bob
+OK 1 - .*John\&.*Bob
+OK 2 - .*John\&.*Bob
+OK 0 - .*John\&.*Bob
+OK 1 - .*John\&.*Bob
+OK 2 - .*John\&.*Bob
+OK 0 - \v(test1)@=.*yep
+OK 1 - \v(test1)@=.*yep
+OK 2 - \v(test1)@=.*yep
+OK 0 - foo\(bar\)\@!
+OK 1 - foo\(bar\)\@!
+OK 2 - foo\(bar\)\@!
+OK 0 - foo\(bar\)\@!
+OK 1 - foo\(bar\)\@!
+OK 2 - foo\(bar\)\@!
+OK 0 - if \(\(then\)\@!.\)*$
+OK 1 - if \(\(then\)\@!.\)*$
+OK 2 - if \(\(then\)\@!.\)*$
+OK 0 - if \(\(then\)\@!.\)*$
+OK 1 - if \(\(then\)\@!.\)*$
+OK 2 - if \(\(then\)\@!.\)*$
+OK 0 - \(foo\)\@!bar
+OK 1 - \(foo\)\@!bar
+OK 2 - \(foo\)\@!bar
+OK 0 - \(foo\)\@!...bar
+OK 1 - \(foo\)\@!...bar
+OK 2 - \(foo\)\@!...bar
+OK 0 - ^\%(.*bar\)\@!.*\zsfoo
+OK 1 - ^\%(.*bar\)\@!.*\zsfoo
+OK 2 - ^\%(.*bar\)\@!.*\zsfoo
+OK 0 - ^\%(.*bar\)\@!.*\zsfoo
+OK 1 - ^\%(.*bar\)\@!.*\zsfoo
+OK 2 - ^\%(.*bar\)\@!.*\zsfoo
+OK 0 - ^\%(.*bar\)\@!.*\zsfoo
+OK 1 - ^\%(.*bar\)\@!.*\zsfoo
+OK 2 - ^\%(.*bar\)\@!.*\zsfoo
+OK 0 - [ ]\@!\p\%([ ]\@!\p\)*:
+OK 1 - [ ]\@!\p\%([ ]\@!\p\)*:
+OK 2 - [ ]\@!\p\%([ ]\@!\p\)*:
+OK 0 - [ ]\@!\p\([ ]\@!\p\)*:
+OK 1 - [ ]\@!\p\([ ]\@!\p\)*:
+OK 2 - [ ]\@!\p\([ ]\@!\p\)*:
+OK 0 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
+OK 1 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
+OK 2 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
+OK 0 - \%(\U\@<=S\k*\|S\l\)R
+OK 1 - \%(\U\@<=S\k*\|S\l\)R
+OK 2 - \%(\U\@<=S\k*\|S\l\)R
+OK 0 - [[:alpha:]]\{-2,6}
+OK 1 - [[:alpha:]]\{-2,6}
+OK 2 - [[:alpha:]]\{-2,6}
+OK 0 - 
+OK 1 - 
+OK 2 - 
+OK 0 - \v(())
+OK 1 - \v(())
+OK 2 - \v(())
+OK 0 - \v%(ab(xyz)c)
+OK 1 - \v%(ab(xyz)c)
+OK 2 - \v%(ab(xyz)c)
+OK 0 - \v(test|)empty
+OK 1 - \v(test|)empty
+OK 2 - \v(test|)empty
+OK 0 - \v(a|aa)(a|aa)
+OK 1 - \v(a|aa)(a|aa)
+OK 2 - \v(a|aa)(a|aa)
+OK 0 - \%d32
+OK 1 - \%d32
+OK 2 - \%d32
+OK 0 - \%o40
+OK 1 - \%o40
+OK 2 - \%o40
+OK 0 - \%x20
+OK 1 - \%x20
+OK 2 - \%x20
+OK 0 - \%u0020
+OK 1 - \%u0020
+OK 2 - \%u0020
+OK 0 - \%U00000020
+OK 1 - \%U00000020
+OK 2 - \%U00000020
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]x
+OK 1 - foo\%[bar]x
+OK 2 - foo\%[bar]x
+OK 0 - foo\%[bar]x
+OK 1 - foo\%[bar]x
+OK 2 - foo\%[bar]x
+OK 0 - \%[bar]x
+OK 1 - \%[bar]x
+OK 2 - \%[bar]x
+OK 0 - \%[bar]x
+OK 1 - \%[bar]x
+OK 2 - \%[bar]x
+OK 0 - \%[bar]x
+OK 1 - \%[bar]x
+OK 2 - \%[bar]x
+OK 0 - b\%[[ao]r]
+OK 1 - b\%[[ao]r]
+OK 2 - b\%[[ao]r]
+OK 0 - b\%[[]]r]
+OK 1 - b\%[[]]r]
+OK 2 - b\%[[]]r]
+OK 0 - @\%[\w\-]*
+OK 1 - @\%[\w\-]*
+OK 2 - @\%[\w\-]*
+OK 0 - goo\|go
+OK 1 - goo\|go
+OK 2 - goo\|go
+OK 0 - \<goo\|\<go
+OK 1 - \<goo\|\<go
+OK 2 - \<goo\|\<go
+OK 0 - \<goo\|go
+OK 1 - \<goo\|go
+OK 2 - \<goo\|go
+OK 0 - \(\i\+\) \1
+OK 1 - \(\i\+\) \1
+OK 2 - \(\i\+\) \1
+OK 0 - \(\i\+\) \1
+OK 1 - \(\i\+\) \1
+OK 2 - \(\i\+\) \1
+OK 0 - \(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9
+OK 1 - \(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9
+OK 2 - \(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9
+OK 0 - \(\d*\)a \1b
+OK 1 - \(\d*\)a \1b
+OK 2 - \(\d*\)a \1b
+OK 0 - ^.\(.\).\_..\1.
+OK 1 - ^.\(.\).\_..\1.
+OK 2 - ^.\(.\).\_..\1.
+OK 0 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 1 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 2 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 0 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 1 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 2 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 0 - ^.*\.\(.*\)/.\+\(\1\)\@<=$
+OK 1 - ^.*\.\(.*\)/.\+\(\1\)\@<=$
+OK 2 - ^.*\.\(.*\)/.\+\(\1\)\@<=$
+OK 0 - \\\@<!\${\(\d\+\%(:.\{-}\)\?\\\@<!\)}
+OK 1 - \\\@<!\${\(\d\+\%(:.\{-}\)\?\\\@<!\)}
+OK 2 - \\\@<!\${\(\d\+\%(:.\{-}\)\?\\\@<!\)}
+OK 0 - <\@<=span.
+OK 1 - <\@<=span.
+OK 2 - <\@<=span.
+OK 0 - <\@1<=span.
+OK 1 - <\@1<=span.
+OK 2 - <\@1<=span.
+OK 0 - <\@2<=span.
+OK 1 - <\@2<=span.
+OK 2 - <\@2<=span.
+OK 0 - \(<<\)\@<=span.
+OK 1 - \(<<\)\@<=span.
+OK 2 - \(<<\)\@<=span.
+OK 0 - \(<<\)\@1<=span.
+OK 1 - \(<<\)\@1<=span.
+OK 2 - \(<<\)\@1<=span.
+OK 0 - \(<<\)\@2<=span.
+OK 1 - \(<<\)\@2<=span.
+OK 2 - \(<<\)\@2<=span.
+OK 0 - \(foo\)\@<!bar.
+OK 1 - \(foo\)\@<!bar.
+OK 2 - \(foo\)\@<!bar.
+OK 0 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 1 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 2 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 0 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 1 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 2 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 0 - \(foo\)\@<=\>
+OK 1 - \(foo\)\@<=\>
+OK 2 - \(foo\)\@<=\>
+OK 0 - \(foo\)\@<=\>
+OK 1 - \(foo\)\@<=\>
+OK 2 - \(foo\)\@<=\>
+OK 0 - \(foo\)\@<=.*
+OK 1 - \(foo\)\@<=.*
+OK 2 - \(foo\)\@<=.*
+OK 0 - \(a*\)\@>a
+OK 1 - \(a*\)\@>a
+OK 2 - \(a*\)\@>a
+OK 0 - \(a*\)\@>b
+OK 1 - \(a*\)\@>b
+OK 2 - \(a*\)\@>b
+OK 0 - \(a*\)\@>a\|a\+
+OK 2 - \(a*\)\@>a\|a\+
+OK 0 - \_[^8-9]\+
+OK 1 - \_[^8-9]\+
+OK 2 - \_[^8-9]\+
+OK 0 - \_[^a]\+
+OK 1 - \_[^a]\+
+OK 2 - \_[^a]\+
+OK 0 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
+OK 1 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
+OK 2 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
+OK 0 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=
+OK 1 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=
+OK 2 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=
+multi-line tests
+OK 0 - ^.\(.\).\_..\1.
+OK 1 - ^.\(.\).\_..\1.
+OK 2 - ^.\(.\).\_..\1.
+OK 0 - \v.*\/(.*)\n.*\/\1$
+OK 1 - \v.*\/(.*)\n.*\/\1$
+OK 2 - \v.*\/(.*)\n.*\/\1$
+OK 0 - \S.*\nx
+OK 1 - \S.*\nx
+OK 2 - \S.*\nx
+OK 0 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
+OK 1 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
+OK 2 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
+OK 0 - a\n^b$\n^c
+OK 1 - a\n^b$\n^c
+OK 2 - a\n^b$\n^c
+
+<T="5">Ta 5</Title>
+<T="7">Ac 7</Title>
+
+xxstart3
+
+thexE thE thExethe
+AndAxAnd AndAxAnd
+oooxOfOr fOrOxooo
+oooxOfOr fOrOxooo
+
+asdfhereasdf
+asdfagainasdf
+
+-0-
+ffo
+bob
+__ooooo
+koooo__
+moooooo
+                       f__
+ab!babababababfoo
+ba!ab##abab?bafoo
+**!*****_
+-1-
+ffo
+bob
+__ooooo
+koooo__
+moooooo
+                       f__
+ab!babababababfoo
+ba!ab##abab?bafoo
+**!*****_
+-2-
+ffo
+bob
+__ooooo
+koooo__
+moooooo
+                       f__
+ab!babababababfoo
+ba!ab##abab?bafoo
+**!*****_
+Test
+Test END
+EN
+E
index 896e9ed..ca53f27 100644 (file)
@@ -1,4 +1,4 @@
-Test for floating point.
+Test for floating point and logical operators.
 
 STARTTEST
 :so small.vim
@@ -72,6 +72,23 @@ STARTTEST
 :$put ='float2nr'
 :$put =float2nr(123.456)
 :$put =float2nr(-123.456)
+:$put ='AND'
+:$put =and(127, 127)
+:$put =and(127, 16)
+:$put =and(127, 128)
+:$put ='OR'
+:$put =or(16, 7)
+:$put =or(8, 7)
+:$put =or(0, 123)
+:$put ='XOR'
+:$put =xor(127, 127)
+:$put =xor(127, 16)
+:$put =xor(127, 128)
+:$put ='invert'
+:$put =and(invert(127), 65535)
+:$put =and(invert(16), 65535)
+:$put =and(invert(128), 65535)
+:$put =invert(1.0)
 :/^Results/,$wq! test.out
 ENDTEST
 
index 26c7312..7aac326 100644 (file)
@@ -54,3 +54,20 @@ trunc
 float2nr
 123
 -123
+AND
+127
+16
+0
+OR
+23
+15
+123
+XOR
+0
+111
+255
+invert
+65408
+65519
+65407
+0
index 113b540..f1fdce3 100644 (file)
@@ -3,12 +3,14 @@ Test for visual block shift and tab characters.
 
 STARTTEST
 :so small.vim
+/^one
+fe\164jR\eugvr1:'<,'>w! test.out
 /^abcdefgh
 \164jI    \ej<<11|D
 7|a            \e
 7|a               \e
 7|a            \e4k13|\164j<
-:$-4,$w! test.out
+:$-5,$w >> test.out
 :$-4,$s/\s\+//g
 \164kI    \ej<<
 7|a            \e
@@ -18,6 +20,12 @@ STARTTEST
 :qa!
 ENDTEST
 
+one two three
+one two three
+one two three
+one two three
+one two three
+
 abcdefghijklmnopqrstuvwxyz
 abcdefghijklmnopqrstuvwxyz
 abcdefghijklmnopqrstuvwxyz
index 2c2249b..4c3ab0f 100644 (file)
@@ -1,3 +1,9 @@
+on1 two three
+on1 two three
+on1 two three
+on1 two three
+on1 two three
+
     abcdefghijklmnopqrstuvwxyz
 abcdefghij
     abc            defghijklmnopqrstuvwxyz
index 94104c0..e79aed5 100644 (file)
@@ -51,6 +51,67 @@ a b
 }
 
 STARTTEST
+/^{/+1
+:set tw=5 fo=tcn comments=:#
+A b\ejA b\e
+ENDTEST
+
+{
+  1 a
+# 1 a
+}
+
+STARTTEST
+/^{/+1
+:set tw=5 fo=qn comments=:#
+gwap
+ENDTEST
+
+{
+# 1 a b
+}
+
+STARTTEST
+/^{/+1
+:set tw=5 fo=q2 comments=:#
+gwap
+ENDTEST
+
+{
+# x
+#   a b
+}
+
+STARTTEST
+/^{/+2
+:set tw& fo=a
+I^^\e
+ENDTEST
+
+{
+   1aa
+   2bb
+}
+
+STARTTEST
+/mno pqr/
+:setl tw=20 fo=an12wcq comments=s1:/*,mb:*,ex:*/
+A vwx yz\e
+ENDTEST
+
+/* abc def ghi jkl 
+ *    mno pqr stu
+ */
+
+STARTTEST
+/^#/
+:setl tw=12 fo=tqnc comments=:#
+A foobar\e
+ENDTEST
+
+# 1 xxxxx
+
+STARTTEST
 :g/^STARTTEST/.,/^ENDTEST/d
 :1;/^Results/,$wq! test.out
 ENDTEST
index 85f35cf..7ec93e6 100644 (file)
@@ -33,3 +33,36 @@ a b
 #a b
 }
 
+
+{
+  1 a
+    b
+# 1 a
+#   b
+}
+
+
+{
+# 1 a
+#   b
+}
+
+
+{
+# x a
+#   b
+}
+
+
+{ 1aa ^^2bb }
+
+
+/* abc def ghi jkl 
+ *    mno pqr stu 
+ *    vwx yz
+ */
+
+
+# 1 xxxxx
+#   foobar
+
index 578f76b..9558cb8 100644 (file)
@@ -1,4 +1,6 @@
 Test for multi-byte text formatting.
+Also test, that 'mps' with multibyte chars works.
+And test "ra" on multi-byte characters.
 
 STARTTEST
 :so mbyte.vim
@@ -134,6 +136,24 @@ ENDTEST
 }
 
 STARTTEST
+/^{/+1
+:set mps+=\16u2018:\16u2019
+d%
+ENDTEST
+
+{
+‘ two three â€™ four
+}
+STARTTEST
+/^ra test
+jVjra
+ENDTEST
+
+ra test
+ï½bbï½
+ï½ï½b
+
+STARTTEST
 :g/^STARTTEST/.,/^ENDTEST/d
 :1;/^Results/,$wq! test.out
 ENDTEST
index 3dfe402..f742ee1 100644 (file)
@@ -140,3 +140,12 @@ a
 a
 }
 
+
+{
+ four
+}
+
+ra test
+aaaa
+aaa
+
index 01f43ea..9fbe818 100644 (file)
@@ -41,9 +41,19 @@ STARTTEST
 :if l2[2] == l2
 :let res = "OK"
 :else
-:let res = "FAILED"
+:let res = "FAILED: " . l2[2]
 :endif
 :call setline(search("^3"), "circular test " . res)
+:" funcrefs
+:mz (define vim:max (vim-eval "function('max')"))
+:mz (define m (vim:max '(1 100 8)))
+:let m = mzeval('m')
+:if m == 100
+:let fref_res = "OK"
+:else
+:let fref_res = "FAILED: " . m
+:end
+:call append(line('$'), 'funcrefs '. fref_res)
 :?^1?,$w! test.out
 :qa!
 ENDTEST
index f8d2d31..9c82a86 100644 (file)
@@ -3,3 +3,4 @@ scalar test OK
 2 line 2
 dictionary with list OK
 circular test OK
+funcrefs OK
index 7de2930..155fd41 100644 (file)
@@ -1,14 +1,19 @@
 Test for encryption.
+The test data is in another file to avoid problems with 'encoding', especially
+cp932.
 
 STARTTEST
 :so small.vim
+:set enc=latin1
+:bwipe!
+:r test71a.in
 :/^start of text/+1
 :let text_lines = getline('.', line('.') + 2)
 :/^start of cm=zip bytes/+1
 :let cm0_bytes = getline('.', '.')
 :/^start of cm=blowfish bytes/+1
 :let cm1_bytes = getline('.', '.')
-:bwipe
+:bwipe!
 :call append(0, text_lines)
 :$d
 :X
@@ -60,16 +65,3 @@ barbar
 :qa!
 ENDTEST
 
-start of text
-01234567890123456789012345678901234567
-line 2  foo bar blah
-line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-end of text
-
-start of cm=zip bytes
-VimCrypt~01!\ 6\1clV'Þ}Mg ê£V©ç\aE#3\8e2Ué\97
-end of cm=zip bytes
-
-start of cm=blowfish bytes
-VimCrypt~02!k)¾\17\97#\16ÃS\9cõ=ºàÈ#Â¥M´\86JÃAÃÂ¥M´\86!\80\15\9bõ\ fáÒ\19\82\16\98÷\rÚ
-end of cm=blowfish bytes
diff --git a/src/testdir/test71a.in b/src/testdir/test71a.in
new file mode 100644 (file)
index 0000000..85bd22c
--- /dev/null
@@ -0,0 +1,14 @@
+
+start of text
+01234567890123456789012345678901234567
+line 2  foo bar blah
+line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+end of text
+
+start of cm=zip bytes
+VimCrypt~01!\ 6\1clV'Þ}Mg ê£V©ç\aE#3\8e2Ué\97
+end of cm=zip bytes
+
+start of cm=blowfish bytes
+VimCrypt~02!k)¾\17\97#\16ÃS\9cõ=ºàÈ#Â¥M´\86JÃAÃÂ¥M´\86!\80\15\9bõ\ fáÒ\19\82\16\98÷\rÚ
+end of cm=blowfish bytes
index 6acb6d8..220adad 100644 (file)
@@ -51,6 +51,12 @@ dd:set ul=100
 :e Xtestfile
 uuu:w >>test.out
 :"
+:" Test that reading the undofiles when setting undofile works
+:set noundofile ul=0
+i
+\eu:e! Xtestfile
+:set undofile ul=100
+uuuuuu:w >>test.out
 :" And now with encryption, cryptmethod=zip
 :e! Xtestfile
 :set undofile cm=zip
index 44210c9..bb267d0 100644 (file)
@@ -7,6 +7,16 @@ seven
 eight
 nine
 ten
+one
+two
+three
+four
+five
+six
+seven
+eight
+nine
+ten
 monday
 wednesday
 thursday
index 5472247..666e4d2 100644 (file)
@@ -158,6 +158,16 @@ SVoyager 2\e:w
 :" Find the file containing 'E.T.' in the Xfind/in/path directory
 :find file     
 :exec "w >>" . test_out
+:"
+:" Test that completion works when path=.,,
+:"
+:set path=.,,
+:" Open Jimmy Hoffa file
+:e in/file.txt
+:exec "w >>" . test_out
+:" Search for the file containing Holy Grail in same directory as in/path.txt
+:find stu      
+:exec "w >>" . test_out
 :q
 :exec "cd " . cwd
 :call DeleteDirectory("Xfind")
index 366f951..90efab7 100644 (file)
@@ -17,3 +17,5 @@ Voyager 1
 Voyager 2
 Jimmy Hoffa
 E.T.
+Jimmy Hoffa
+Another Holy Grail
diff --git a/src/testdir/test74.in b/src/testdir/test74.in
new file mode 100644 (file)
index 0000000..4fbe5e4
--- /dev/null
@@ -0,0 +1,36 @@
+" Tests for storing global variables in the .viminfo file vim: set ft=vim:
+
+STARTTEST
+:so small.vim
+:" Do all test in a separate window to avoid E211 when we recursively
+:" delete the Xfind directory during cleanup
+:"
+:" This will cause a few errors, do it silently.
+:set visualbell
+:set nocp viminfo+=!,nviminfo
+:let MY_GLOBAL_DICT={'foo': 1, 'bar': 0, 'longvarible': 1000}
+:" store a really long list, so line wrapping will occur in viminfo file
+:let MY_GLOBAL_LIST=range(1,100)
+:wv! Xviminfo
+:unlet MY_GLOBAL_DICT
+:unlet MY_GLOBAL_LIST
+:rv! Xviminfo
+:call delete('Xviminfo')
+:if exists("MY_GLOBAL_DICT")
+:redir >> test.out
+:echo MY_GLOBAL_DICT
+:redir end
+:endif
+:if exists("MY_GLOBAL_LIST")
+:redir >> test.out
+:echo MY_GLOBAL_LIST
+:redir end
+:endif
+:redir >> test.out
+:echo "foobar"
+:redir end
+:endif
+:qa!
+ENDTEST
+
+eof
diff --git a/src/testdir/test74.ok b/src/testdir/test74.ok
new file mode 100644 (file)
index 0000000..b026c33
--- /dev/null
@@ -0,0 +1,5 @@
+
+{'foo': 1, 'longvarible': 1000, 'bar': 0}
+[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
+
+foobar
diff --git a/src/testdir/test75.in b/src/testdir/test75.in
new file mode 100644 (file)
index 0000000..f43970d
--- /dev/null
@@ -0,0 +1,24 @@
+" Tests for functions.
+
+STARTTEST
+:so small.vim
+:set cpo-=<
+:" Test maparg() with a string result
+:map foo<C-V> is<F4>foo
+:vnoremap <script> <buffer> <expr> <silent> bar isbar
+:call append('$', maparg('foo<C-V>'))
+:call append('$', string(maparg('foo<C-V>', '', 0, 1)))
+:call append('$', string(maparg('bar', '', 0, 1)))
+:map <buffer> <nowait> foo bar
+:call append('$', string(maparg('foo', '', 0, 1)))
+:"
+:map abc x<char-114>x
+:call append('$', maparg('abc'))
+:map abc y<S-char-114>y
+:call append('$', maparg('abc'))
+:"
+:/^eof/+1,$w! test.out
+:qa!
+ENDTEST
+
+eof
diff --git a/src/testdir/test75.ok b/src/testdir/test75.ok
new file mode 100644 (file)
index 0000000..d8f9a2a
--- /dev/null
@@ -0,0 +1,6 @@
+is<F4>foo
+{'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'nowait': 0, 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
+{'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'nowait': 0, 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
+{'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ', 'nowait': 1, 'expr': 0, 'sid': 0, 'rhs': 'bar', 'buffer': 1}
+xrx
+yRy
diff --git a/src/testdir/test76.in b/src/testdir/test76.in
new file mode 100644 (file)
index 0000000..db7ebe2
--- /dev/null
@@ -0,0 +1,46 @@
+Tests for completefunc/omnifunc. vim: set ft=vim :
+
+STARTTEST
+:"Test that nothing happens if the 'completefunc' opens
+:"a new window (no completion, no crash)
+:so small.vim
+:function! DummyCompleteOne(findstart, base)
+:  if a:findstart
+:    return 0
+:  else
+:    wincmd n
+:    return ['onedef', 'oneDEF']
+:  endif
+:endfunction
+:setlocal completefunc=DummyCompleteOne
+/^one
+A\18\15\ e\e:q!
+:function! DummyCompleteTwo(findstart, base)
+:  if a:findstart
+:    wincmd n
+:    return 0
+:  else
+:    return ['twodef', 'twoDEF']
+:  endif
+:endfunction
+:setlocal completefunc=DummyCompleteTwo
+/^two
+A\18\15\ e\e:q!
+:"Test that 'completefunc' works when it's OK.
+:function! DummyCompleteThree(findstart, base)
+:  if a:findstart
+:    return 0
+:  else
+:    return ['threedef', 'threeDEF']
+:  endif
+:endfunction
+:setlocal completefunc=DummyCompleteThree
+/^three
+A\18\15\ e\e:/^+++/,/^three/w! test.out
+:qa!
+ENDTEST
+
++++
+one
+two
+three
diff --git a/src/testdir/test76.ok b/src/testdir/test76.ok
new file mode 100644 (file)
index 0000000..2a70acb
--- /dev/null
@@ -0,0 +1,4 @@
++++
+
+two
+threeDEF
diff --git a/src/testdir/test77.in b/src/testdir/test77.in
new file mode 100644 (file)
index 0000000..0dbc4fc
--- /dev/null
@@ -0,0 +1,30 @@
+Inserts 2 million lines with consecutive integers starting from 1
+(essentially, the output of GNU's seq 1 2000000), writes them to Xtest
+and writes its cksum to test.out.
+
+We need 2 million lines to trigger a call to mf_hash_grow().  If it would mess
+up the lines the checksum would differ.
+
+cksum is part of POSIX and so should be available on most Unixes.
+If it isn't available then the test will be skipped.
+
+STARTTEST
+:so small.vim
+:if !executable("cksum")
+: e! test.ok
+: w! test.out
+: qa!
+:endif
+:set fileformat=unix undolevels=-1
+ggdG
+:let i = 1
+:while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile
+ggdd
+:w! Xtest
+:r !cksum Xtest
+:s/\s/ /g
+:set fileformat&
+:.w! test.out
+:qa!
+ENDTEST
+
diff --git a/src/testdir/test77.ok b/src/testdir/test77.ok
new file mode 100644 (file)
index 0000000..11f148c
--- /dev/null
@@ -0,0 +1 @@
+3678979763 14888896 Xtest
diff --git a/src/testdir/test78.in b/src/testdir/test78.in
new file mode 100644 (file)
index 0000000..1850bd9
--- /dev/null
@@ -0,0 +1,46 @@
+Inserts 10000 lines with text to fill the swap file with two levels of pointer
+blocks.  Then recovers from the swap file and checks all text is restored.
+
+We need about 10000 lines of 100 characters to get two levels of pointer
+blocks.
+
+STARTTEST
+:so small.vim
+:set nocp fileformat=unix undolevels=-1 viminfo+=nviminfo
+:e! Xtest
+ggdG
+:let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
+:let i = 1
+:let linecount = 10000
+:while i <= linecount | call append(i - 1, i . text) | let i += 1 | endwhile
+:preserve
+:" get the name of the swap file
+:redir => swapname
+:swapname
+:redir END
+:let swapname = substitute(swapname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '')
+:" make a copy of the swap file in Xswap
+:set bin
+:exe 'sp ' . swapname
+:w! Xswap
+:echo swapname
+:set nobin
+:new
+:only!
+:bwipe! Xtest
+:call rename('Xswap', swapname)
+:recover Xtest
+:call delete(swapname)
+:new
+:call append(0, 'recovery start')
+:wincmd w
+:let linedollar = line('$')
+:if linedollar < linecount | exe 'wincmd w' | call append(line('$'), "expected " . linecount . " lines but found only " . linedollar) | exe 'wincmd w' | let linecount = linedollar | endif
+:let i = 1
+:while i <= linecount | if getline(i) != i . text | exe 'wincmd w' | call append(line('$'), i . ' differs') | exe 'wincmd w' | endif | let i += 1 | endwhile
+:q!
+:call append(line('$'), 'recovery end')
+:w! test.out
+:qa!
+ENDTEST
+
diff --git a/src/testdir/test78.ok b/src/testdir/test78.ok
new file mode 100644 (file)
index 0000000..6c3ecef
--- /dev/null
@@ -0,0 +1,3 @@
+recovery start
+
+recovery end
diff --git a/src/testdir/test79.in b/src/testdir/test79.in
new file mode 100644 (file)
index 0000000..f15ecc0
Binary files /dev/null and b/src/testdir/test79.in differ
diff --git a/src/testdir/test79.ok b/src/testdir/test79.ok
new file mode 100644 (file)
index 0000000..bb30d14
Binary files /dev/null and b/src/testdir/test79.ok differ
index 6fe1715..d9d00d9 100644 (file)
@@ -1,4 +1,5 @@
 Test for BufWritePre autocommand that deletes or unloads the buffer.
+Test for BufUnload autocommand that unloads all other buffers.
 
 STARTTEST
 :so small.vim
@@ -16,6 +17,27 @@ $r2:.,/end of/w! Xxx2   " write test file Xxx2
 :bwipe test.out         " remove test.out from the buffer list
 :w                      " write it, will delete the buffer and give an error msg
 :w >>test.out           " Append contents of this file
+:au! BufWritePre
+:func CloseAll()
+  let i = 0
+  while i <= bufnr('$')
+    if i != bufnr('%') && bufloaded(i)
+      exe  i . "bunload"
+    endif
+    let i += 1
+  endwhile
+endfunc
+:func WriteToOut()
+  edit! test.out
+  $put ='VimLeave done'
+  write
+endfunc
+:set viminfo='100,nviminfo
+:au BufUnload * call CloseAll()
+:au VimLeave * call WriteToOut()
+:e small.vim
+:sp mbyte.vim
+:q
 :qa!
 ENDTEST
 
index 29b066a..adecb2f 100644 (file)
@@ -4,3 +4,4 @@ end of Xxx
 start of Xxx1
        test
 end of Xxx
+VimLeave done
diff --git a/src/testdir/test80.in b/src/testdir/test80.in
new file mode 100644 (file)
index 0000000..7f6ecfc
--- /dev/null
@@ -0,0 +1,180 @@
+Test for *sub-replace-special* and *sub-replace-expression* on substitue().
+Test for submatch() on substitue().
+Test for *:s%* on :substitute.
+
+STARTTEST
+:so small.vim
+ENDTEST
+
+TEST_1:
+
+STARTTEST
+:set magic
+:set cpo&
+:$put =\"\n\nTEST_1:\"
+:$put =substitute('A', 'A', '&&', '')
+:$put =substitute('B', 'B', '\&', '')
+:$put =substitute('C123456789', 'C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\0\9\8\7\6\5\4\3\2\1', '')
+:$put =substitute('D', 'D', 'd', '')
+:$put =substitute('E', 'E', '~', '')
+:$put =substitute('F', 'F', '\~', '')
+:$put =substitute('G', 'G', '\ugg', '')
+:$put =substitute('H', 'H', '\Uh\Eh', '')
+:$put =substitute('I', 'I', '\lII', '')
+:$put =substitute('J', 'J', '\LJ\EJ', '')
+:$put =substitute('K', 'K', '\Uk\ek', '')
+:$put =substitute('lLl', 'L', '\16\r', '')
+:$put =substitute('mMm', 'M', '\r', '')
+:$put =substitute('nNn', 'N', '\\16\r', '')
+:$put =substitute('oOo', 'O', '\n', '')
+:$put =substitute('pPp', 'P', '\b', '')
+:$put =substitute('qQq', 'Q', '\t', '')
+:$put =substitute('rRr', 'R', '\\', '')
+:$put =substitute('sSs', 'S', '\c', '')
+:$put =substitute('uUu', 'U', \"\n\", '')
+:$put =substitute('vVv', 'V', \"\b\", '')
+:$put =substitute('wWw', 'W', \"\\\", '')
+:$put =substitute('xXx', 'X', \"\r\", '')
+:$put =substitute('Y', 'Y', '\L\uyYy\l\EY', '')
+:$put =substitute('Z', 'Z', '\U\lZzZ\u\Ez', '')
+/^TEST_2
+ENDTEST
+
+TEST_2:
+
+STARTTEST
+:set nomagic
+:set cpo&
+:$put =\"\n\nTEST_2:\"
+:$put =substitute('A', 'A', '&&', '')
+:$put =substitute('B', 'B', '\&', '')
+:$put =substitute('C123456789', 'C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\0\9\8\7\6\5\4\3\2\1', '')
+:$put =substitute('D', 'D', 'd', '')
+:$put =substitute('E', 'E', '~', '')
+:$put =substitute('F', 'F', '\~', '')
+:$put =substitute('G', 'G', '\ugg', '')
+:$put =substitute('H', 'H', '\Uh\Eh', '')
+:$put =substitute('I', 'I', '\lII', '')
+:$put =substitute('J', 'J', '\LJ\EJ', '')
+:$put =substitute('K', 'K', '\Uk\ek', '')
+:$put =substitute('lLl', 'L', '\16\r', '')
+:$put =substitute('mMm', 'M', '\r', '')
+:$put =substitute('nNn', 'N', '\\16\r', '')
+:$put =substitute('oOo', 'O', '\n', '')
+:$put =substitute('pPp', 'P', '\b', '')
+:$put =substitute('qQq', 'Q', '\t', '')
+:$put =substitute('rRr', 'R', '\\', '')
+:$put =substitute('sSs', 'S', '\c', '')
+:$put =substitute('tTt', 'T', \"\r\", '')
+:$put =substitute('uUu', 'U', \"\n\", '')
+:$put =substitute('vVv', 'V', \"\b\", '')
+:$put =substitute('wWw', 'W', \"\\\", '')
+:$put =substitute('X', 'X', '\L\uxXx\l\EX', '')
+:$put =substitute('Y', 'Y', '\U\lYyY\u\Ey', '')
+/^TEST_3
+ENDTEST
+
+TEST_3:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_3:\"
+:let y = substitute('aAa', 'A', '\="\\"', '')           | $put =y
+:let y = substitute('bBb', 'B', '\="\\\\"', '')         | $put =y
+:let y = substitute('cCc', 'C', '\="\16\r"', '')         | $put =y
+:let y = substitute('dDd', 'D', '\="\\\16\r"', '')       | $put =y
+:let y = substitute('eEe', 'E', '\="\\\\\16\r"', '')     | $put =y
+:let y = substitute('fFf', 'F', '\="\\r"', '')          | $put =y
+:let y = substitute('jJj', 'J', '\="\\n"', '')          | $put =y
+:let y = substitute('kKk', 'K', '\="\r"', '')           | $put =y
+:let y = substitute('lLl', 'L', '\="\n"', '')           | $put =y
+/^TEST_4
+ENDTEST
+
+TEST_4:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_4:\"
+:let y = substitute('aAa', 'A', '\=substitute(submatch(0), ".", "\\", "")', '')       | $put =y
+:let y = substitute('bBb', 'B', '\=substitute(submatch(0), ".", "\\\\", "")', '')     | $put =y
+:let y = substitute('cCc', 'C', '\=substitute(submatch(0), ".", "\16\r", "")', '')     | $put =y
+:let y = substitute('dDd', 'D', '\=substitute(submatch(0), ".", "\\\16\r", "")', '')   | $put =y
+:let y = substitute('eEe', 'E', '\=substitute(submatch(0), ".", "\\\\\16\r", "")', '') | $put =y
+:let y = substitute('fFf', 'F', '\=substitute(submatch(0), ".", "\\r", "")', '')      | $put =y
+:let y = substitute('jJj', 'J', '\=substitute(submatch(0), ".", "\\n", "")', '')      | $put =y
+:let y = substitute('kKk', 'K', '\=substitute(submatch(0), ".", "\r", "")', '')       | $put =y
+:let y = substitute('lLl', 'L', '\=substitute(submatch(0), ".", "\n", "")', '')       | $put =y
+/^TEST_5
+ENDTEST
+
+TEST_5:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_5:\"
+:$put =substitute('A123456789', 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\=submatch(0) . submatch(9) . submatch(8) . submatch(7) . submatch(6) . submatch(5) . submatch(4) . submatch(3) . submatch(2) . submatch(1)', '')
+/^TEST_6
+ENDTEST
+
+TEST_6:
+
+STARTTEST
+:set magic&
+:$put =\"\n\nTEST_6:\"
+:set cpo+=/
+:$put =substitute('A', 'A', 'a', '')
+:$put =substitute('B', 'B', '%', '')
+:set cpo-=/
+:$put =substitute('C', 'C', 'c', '')
+:$put =substitute('D', 'D', '%', '')
+/^TEST_7
+ENDTEST
+
+TEST_7:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_7:\"
+:$put =substitute('A\16\rA', 'A.', '\=submatch(0)', '')
+:$put =substitute(\"B\nB\", 'B.', '\=submatch(0)', '')
+/^TEST_8
+ENDTEST
+
+TEST_8:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_8:\"
+:$put =',,X'
+:s/\(^\|,\)\ze\(,\|X\)/\1N/g
+:$put =',,Y'
+:s/\(^\|,\)\ze\(,\|Y\)/\1N/gc
+a:$put =',,Z'
+:s/\(^\|,\)\ze\(,\|Z\)/\1N/gc
+yy/^TEST_9:
+ENDTEST
+
+TEST_9:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_9:\"
+:$put ='xxx'
+:s/x/X/gc
+yyq/^TEST_10:
+ENDTEST
+
+TEST_10:
+
+STARTTEST
+:/^Results/,$wq! test.out
+ENDTEST
+
+Results of test72:
diff --git a/src/testdir/test80.ok b/src/testdir/test80.ok
new file mode 100644 (file)
index 0000000..45b1d1d
--- /dev/null
@@ -0,0 +1,115 @@
+Results of test72:
+
+
+TEST_1:
+AA
+&
+C123456789987654321
+d
+~
+~
+Gg
+Hh
+iI
+jJ
+Kk
+l\rl
+m\rm
+n\rn
+o
+o
+p\bp
+q      q
+r\r
+scs
+u
+u
+v\bv
+w\w
+x\rx
+YyyY
+zZZz
+
+
+TEST_2:
+AA
+&
+C123456789987654321
+d
+~
+~
+Gg
+Hh
+iI
+jJ
+Kk
+l\rl
+m\rm
+n\rn
+o
+o
+p\bp
+q      q
+r\r
+scs
+t\rt
+u
+u
+v\bv
+w\w
+XxxX
+yYYy
+
+
+TEST_3:
+a\a
+b\\b
+c\rc
+d\\rd
+e\\\re
+f\rf
+j\nj
+k\rk
+l
+l
+
+
+TEST_4:
+a\a
+b\b
+c\rc
+d\rd
+e\\re
+f\rf
+j
+j
+k\rk
+l
+l
+
+
+TEST_5:
+A123456789987654321
+
+
+TEST_6:
+a
+%
+c
+%
+
+
+TEST_7:
+A\rA
+B
+B
+
+
+TEST_8:
+N,,NX
+N,,NY
+N,,NZ
+
+
+TEST_9:
+XXx
diff --git a/src/testdir/test81.in b/src/testdir/test81.in
new file mode 100644 (file)
index 0000000..82a6892
--- /dev/null
@@ -0,0 +1,22 @@
+Test for t movement command and 'cpo-;' setting
+
+STARTTEST
+:set nocompatible viminfo+=nviminfo
+:set cpo-=;
+/firstline/
+j0tt;D
+0fz;D
+$Fy;D
+$Ty;D:set cpo+=;
+j0tt;;D
+$Ty;;D:?firstline?+1,$w! test.out
+:qa!
+ENDTEST
+
+firstline
+aaa two three four
+    zzz
+yyy   
+bbb yee yoo four
+ccc two three four
+ddd yee yoo four
diff --git a/src/testdir/test81.ok b/src/testdir/test81.ok
new file mode 100644 (file)
index 0000000..e9f17dc
--- /dev/null
@@ -0,0 +1,6 @@
+aaa two
+    z
+y
+bbb y
+ccc
+ddd yee y
diff --git a/src/testdir/test82.in b/src/testdir/test82.in
new file mode 100644 (file)
index 0000000..8503f54
--- /dev/null
@@ -0,0 +1,103 @@
+Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
+Also test "g~ap".
+
+STARTTEST
+:so small.vim
+:if !has("multi_byte")
+: e! test.ok
+: w! test.out
+: qa!
+:endif
+:set enc=utf8
+ggdG
+:
+:function! Ch(a, op, b, expected)
+:  if eval(printf('"%s" %s "%s"', a:a, a:op, a:b)) != a:expected
+:    call append(line('$'), printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
+:  else
+:    let b:passed += 1
+:  endif
+:endfunction
+:
+:function! Chk(a, b, result)
+:  if a:result == 0
+:    call Ch(a:a, '==?', a:b, 1)
+:    call Ch(a:a, '!=?', a:b, 0)
+:    call Ch(a:a, '<=?', a:b, 1)
+:    call Ch(a:a, '>=?', a:b, 1)
+:    call Ch(a:a, '<?', a:b, 0)
+:    call Ch(a:a, '>?', a:b, 0)
+:  elseif a:result > 0
+:    call Ch(a:a, '==?', a:b, 0)
+:    call Ch(a:a, '!=?', a:b, 1)
+:    call Ch(a:a, '<=?', a:b, 0)
+:    call Ch(a:a, '>=?', a:b, 1)
+:    call Ch(a:a, '<?', a:b, 0)
+:    call Ch(a:a, '>?', a:b, 1)
+:  else
+:    call Ch(a:a, '==?', a:b, 0)
+:    call Ch(a:a, '!=?', a:b, 1)
+:    call Ch(a:a, '<=?', a:b, 1)
+:    call Ch(a:a, '>=?', a:b, 0)
+:    call Ch(a:a, '<?', a:b, 1)
+:    call Ch(a:a, '>?', a:b, 0)
+:  endif
+:endfunction
+:
+:function! Check(a, b, result)
+:  call Chk(a:a, a:b, a:result)
+:  call Chk(a:b, a:a, -a:result)
+:endfunction
+:
+:function! LT(a, b)
+:  call Check(a:a, a:b, -1)
+:endfunction
+:
+:function! GT(a, b)
+:  call Check(a:a, a:b, 1)
+:endfunction
+:
+:function! EQ(a, b)
+:  call Check(a:a, a:b, 0)
+:endfunction
+:
+:let b:passed=0
+:call EQ('', '')
+:call LT('', 'a')
+:call EQ('abc', 'abc')
+:call EQ('Abc', 'abC')
+:call LT('ab', 'abc')
+:call LT('AB', 'abc')
+:call LT('ab', 'aBc')
+:call EQ('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xb9\xd0\xa6\xd0\xa3\xd0\xba\xd0\x95\xd0\xbd')
+:call LT('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xaf\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd')
+:call EQ('\xe2\x84\xaa', 'k')
+:call LT('\xe2\x84\xaa', 'kkkkkk')
+:call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
+:call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
+:call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
+:call EQ('Abc\x80', 'AbC\x80')
+:call LT('Abc\x80', 'AbC\x81')
+:call LT('Abc', 'AbC\x80')
+:call LT('abc\x80DEF', 'abc\x80def')  " case folding stops at the first bad character
+:call LT('\xc3XYZ', '\xc3xyz')
+:call EQ('\xef\xbc\xba', '\xef\xbd\x9a')  " FF3A (upper), FF5A (lower)
+:call GT('\xef\xbc\xba', '\xef\xbc\xff')  " first string is ok and equals \xef\xbd\x9a after folding, second string is illegal and was left unchanged, then the strings were bytewise compared
+:call LT('\xc3', '\xc3\x83')
+:call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
+:for n in range(0x60, 0xFF) | call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) | endfor
+:for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
+:for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
+:call append(0, printf('%d checks passed', b:passed))
+:"
+:" test that g~ap changes one paragraph only.
+:new
+iabcd
+
+defg\egg0g~ap:let lns = getline(1,3)
+:q!
+:call append(line('$'), lns)
+:"
+:wq! test.out
+ENDTEST
+
diff --git a/src/testdir/test82.ok b/src/testdir/test82.ok
new file mode 100644 (file)
index 0000000..3f1866a
--- /dev/null
@@ -0,0 +1,5 @@
+3732 checks passed
+
+ABCD
+
+defg
diff --git a/src/testdir/test83-tags2 b/src/testdir/test83-tags2
new file mode 100644 (file)
index 0000000..7f9f21b
--- /dev/null
@@ -0,0 +1,2 @@
+!_TAG_FILE_ENCODING    cp932   //
+\82`\82a\82b Xtags2.txt      /\82`\82a\82b
diff --git a/src/testdir/test83-tags3 b/src/testdir/test83-tags3
new file mode 100644 (file)
index 0000000..0cb6591
--- /dev/null
@@ -0,0 +1,102 @@
+!_TAG_FILE_SORTED      1       //
+!_TAG_FILE_ENCODING    cp932   //
+abc1   Xtags3.txt      /\82`\82a\82b
+abc2   Xtags3.txt      /\82`\82a\82b
+abc3   Xtags3.txt      /\82`\82a\82b
+abc4   Xtags3.txt      /\82`\82a\82b
+abc5   Xtags3.txt      /\82`\82a\82b
+abc6   Xtags3.txt      /\82`\82a\82b
+abc7   Xtags3.txt      /\82`\82a\82b
+abc8   Xtags3.txt      /\82`\82a\82b
+abc9   Xtags3.txt      /\82`\82a\82b
+abc10  Xtags3.txt      /\82`\82a\82b
+abc11  Xtags3.txt      /\82`\82a\82b
+abc12  Xtags3.txt      /\82`\82a\82b
+abc13  Xtags3.txt      /\82`\82a\82b
+abc14  Xtags3.txt      /\82`\82a\82b
+abc15  Xtags3.txt      /\82`\82a\82b
+abc16  Xtags3.txt      /\82`\82a\82b
+abc17  Xtags3.txt      /\82`\82a\82b
+abc18  Xtags3.txt      /\82`\82a\82b
+abc19  Xtags3.txt      /\82`\82a\82b
+abc20  Xtags3.txt      /\82`\82a\82b
+abc21  Xtags3.txt      /\82`\82a\82b
+abc22  Xtags3.txt      /\82`\82a\82b
+abc23  Xtags3.txt      /\82`\82a\82b
+abc24  Xtags3.txt      /\82`\82a\82b
+abc25  Xtags3.txt      /\82`\82a\82b
+abc26  Xtags3.txt      /\82`\82a\82b
+abc27  Xtags3.txt      /\82`\82a\82b
+abc28  Xtags3.txt      /\82`\82a\82b
+abc29  Xtags3.txt      /\82`\82a\82b
+abc30  Xtags3.txt      /\82`\82a\82b
+abc31  Xtags3.txt      /\82`\82a\82b
+abc32  Xtags3.txt      /\82`\82a\82b
+abc33  Xtags3.txt      /\82`\82a\82b
+abc34  Xtags3.txt      /\82`\82a\82b
+abc35  Xtags3.txt      /\82`\82a\82b
+abc36  Xtags3.txt      /\82`\82a\82b
+abc37  Xtags3.txt      /\82`\82a\82b
+abc38  Xtags3.txt      /\82`\82a\82b
+abc39  Xtags3.txt      /\82`\82a\82b
+abc40  Xtags3.txt      /\82`\82a\82b
+abc41  Xtags3.txt      /\82`\82a\82b
+abc42  Xtags3.txt      /\82`\82a\82b
+abc43  Xtags3.txt      /\82`\82a\82b
+abc44  Xtags3.txt      /\82`\82a\82b
+abc45  Xtags3.txt      /\82`\82a\82b
+abc46  Xtags3.txt      /\82`\82a\82b
+abc47  Xtags3.txt      /\82`\82a\82b
+abc48  Xtags3.txt      /\82`\82a\82b
+abc49  Xtags3.txt      /\82`\82a\82b
+abc50  Xtags3.txt      /\82`\82a\82b
+abc51  Xtags3.txt      /\82`\82a\82b
+abc52  Xtags3.txt      /\82`\82a\82b
+abc53  Xtags3.txt      /\82`\82a\82b
+abc54  Xtags3.txt      /\82`\82a\82b
+abc55  Xtags3.txt      /\82`\82a\82b
+abc56  Xtags3.txt      /\82`\82a\82b
+abc57  Xtags3.txt      /\82`\82a\82b
+abc58  Xtags3.txt      /\82`\82a\82b
+abc59  Xtags3.txt      /\82`\82a\82b
+abc60  Xtags3.txt      /\82`\82a\82b
+abc61  Xtags3.txt      /\82`\82a\82b
+abc62  Xtags3.txt      /\82`\82a\82b
+abc63  Xtags3.txt      /\82`\82a\82b
+abc64  Xtags3.txt      /\82`\82a\82b
+abc65  Xtags3.txt      /\82`\82a\82b
+abc66  Xtags3.txt      /\82`\82a\82b
+abc67  Xtags3.txt      /\82`\82a\82b
+abc68  Xtags3.txt      /\82`\82a\82b
+abc69  Xtags3.txt      /\82`\82a\82b
+abc70  Xtags3.txt      /\82`\82a\82b
+abc71  Xtags3.txt      /\82`\82a\82b
+abc72  Xtags3.txt      /\82`\82a\82b
+abc73  Xtags3.txt      /\82`\82a\82b
+abc74  Xtags3.txt      /\82`\82a\82b
+abc75  Xtags3.txt      /\82`\82a\82b
+abc76  Xtags3.txt      /\82`\82a\82b
+abc77  Xtags3.txt      /\82`\82a\82b
+abc78  Xtags3.txt      /\82`\82a\82b
+abc79  Xtags3.txt      /\82`\82a\82b
+abc80  Xtags3.txt      /\82`\82a\82b
+abc81  Xtags3.txt      /\82`\82a\82b
+abc82  Xtags3.txt      /\82`\82a\82b
+abc83  Xtags3.txt      /\82`\82a\82b
+abc84  Xtags3.txt      /\82`\82a\82b
+abc85  Xtags3.txt      /\82`\82a\82b
+abc86  Xtags3.txt      /\82`\82a\82b
+abc87  Xtags3.txt      /\82`\82a\82b
+abc88  Xtags3.txt      /\82`\82a\82b
+abc89  Xtags3.txt      /\82`\82a\82b
+abc90  Xtags3.txt      /\82`\82a\82b
+abc91  Xtags3.txt      /\82`\82a\82b
+abc92  Xtags3.txt      /\82`\82a\82b
+abc93  Xtags3.txt      /\82`\82a\82b
+abc94  Xtags3.txt      /\82`\82a\82b
+abc95  Xtags3.txt      /\82`\82a\82b
+abc96  Xtags3.txt      /\82`\82a\82b
+abc97  Xtags3.txt      /\82`\82a\82b
+abc98  Xtags3.txt      /\82`\82a\82b
+abc99  Xtags3.txt      /\82`\82a\82b
+abc100 Xtags3.txt      /\82`\82a\82b
diff --git a/src/testdir/test83.in b/src/testdir/test83.in
new file mode 100644 (file)
index 0000000..297d560
--- /dev/null
@@ -0,0 +1,76 @@
+Tests for tag search with !_TAG_FILE_ENCODING.
+
+STARTTEST
+:so mbyte.vim
+:set enc=utf8
+:if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21"
+: e! test.ok
+: w! test.out
+: qa!
+:endif
+
+:/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
+:/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
+:/^text for tags3$/,/^text for tags3$/+1w! Xtags3.txt
+:/^tags1$/+1,/^tags1-end$/-1w! Xtags1
+
+ggdG
+
+:call setline('.', 'Results of test83')
+
+:" case1:
+:new
+:set tags=Xtags1
+:let v:errmsg = ''
+:tag abcdefghijklmnopqrs
+:if v:errmsg =~ 'E426:' || getline('.') != 'abcdefghijklmnopqrs'
+: close
+: put ='case1: failed'
+:else
+: close
+: put ='case1: ok'
+:endif
+
+:" case2:
+:new
+:set tags=test83-tags2
+:let v:errmsg = ''
+:tag /.BC
+:if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
+: close
+: put ='case2: failed'
+:else
+: close
+: put ='case2: ok'
+:endif
+
+:" case3:
+:new
+:set tags=test83-tags3
+:let v:errmsg = ''
+:tag abc50
+:if v:errmsg =~ 'E426:' || getline('.') != 'ABC'
+: close
+: put ='case3: failed'
+:else
+: close
+: put ='case3: ok'
+:endif
+:close
+
+:wq! test.out
+ENDTEST
+
+text for tags1
+abcdefghijklmnopqrs
+
+text for tags2
+ABC
+
+text for tags3
+ABC
+
+tags1
+!_TAG_FILE_ENCODING    utf-8   //
+abcdefghijklmnopqrs    Xtags1.txt      /abcdefghijklmnopqrs
+tags1-end
diff --git a/src/testdir/test83.ok b/src/testdir/test83.ok
new file mode 100644 (file)
index 0000000..61a1a04
--- /dev/null
@@ -0,0 +1,4 @@
+Results of test83
+case1: ok
+case2: ok
+case3: ok
diff --git a/src/testdir/test84.in b/src/testdir/test84.in
new file mode 100644 (file)
index 0000000..25482db
--- /dev/null
@@ -0,0 +1,35 @@
+Tests for curswant not changing when setting an option
+
+STARTTEST
+:so small.vim
+:/^start target options$/+1,/^end target options$/-1 yank
+:let target_option_names = split(@0)
+:function TestCurswant(option_name)
+:  normal! ggf8j
+:  let curswant_before = winsaveview().curswant
+:  execute 'let' '&'.a:option_name '=' '&'.a:option_name
+:  let curswant_after = winsaveview().curswant
+:  return [a:option_name, curswant_before, curswant_after]
+:endfunction
+:
+:new
+:put =['1234567890', '12345']
+:1 delete _
+:let result = []
+:for option_name in target_option_names
+:  call add(result, TestCurswant(option_name))
+:endfor
+:
+:new
+:put =map(copy(result), 'join(v:val, '' '')')
+:1 delete _
+:write test.out
+:
+:qall!
+ENDTEST
+
+start target options
+       tabstop
+       timeoutlen
+       ttimeoutlen
+end target options
diff --git a/src/testdir/test84.ok b/src/testdir/test84.ok
new file mode 100644 (file)
index 0000000..8b8e4ee
--- /dev/null
@@ -0,0 +1,3 @@
+tabstop 7 4
+timeoutlen 7 7
+ttimeoutlen 7 7
diff --git a/src/testdir/test85.in b/src/testdir/test85.in
new file mode 100644 (file)
index 0000000..c5ca873
--- /dev/null
@@ -0,0 +1,85 @@
+Test for Lua interface and luaeval() function
+
+STARTTEST
+:so small.vim
+:so lua.vim
+:set nocompatible viminfo+=nviminfo
+:lua l = vim.list():add"item0":add"dictionary with list OK":add"item2"
+:lua h = vim.dict(); h.list = l
+:call garbagecollect()
+/^1
+:" change buffer contents
+:lua curbuf = vim.buffer()
+:lua curline = vim.eval"line('.')"
+:lua curbuf[curline] = "1 changed line 1"
+:" scalar test
+:let tmp_string = luaeval('"string"')
+:let tmp_1000 = luaeval('1000')
+:if printf("%s%.0f", tmp_string, tmp_1000) == "string1000"
+:let scalar_res = "OK"
+:else
+:let scalar_res = "FAILED"
+:endif
+:call append(search("^1"), "scalar test " . scalar_res)
+:" dictionary containing a list
+:let tmp = luaeval("h").list[1]
+:/^2/put =tmp
+:" circular list (at the same time test lists containing lists)
+:lua l[2] = l
+:let l2 = luaeval("h").list
+:if l2[2] == l2
+:let res = "OK"
+:else
+:let res = "FAILED"
+:endif
+:call setline(search("^3"), "circular test " . res)
+
+:let l = []
+:lua l = vim.eval("l")
+:lua l:add(123)
+:lua l:add("abc")
+:lua l:add(vim.eval("[1, 2, 3]"))
+:lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}"))
+:lua l:insert(123)
+:lua l:insert("abc")
+:lua l:insert(vim.eval("[1, 2, 3]"))
+:lua l:insert(vim.eval("{'a':1, 'b':2, 'c':3}"))
+:lua l[0] = l[0]
+:lua l[1] = l[1]
+:lua l[2] = l[2]
+:lua l[3] = l[3]
+:lua l[0] = 123
+:lua l[1] = "abc"
+:lua l[2] = vim.eval("[1, 2, 3]")
+:lua l[3] = vim.eval("{'a':1, 'b':2, 'c':3}")
+:lua l[3] = nil
+:lua l[2] = nil
+:lua l[1] = nil
+:lua l[0] = nil
+:lua l = nil
+:$put =string(l)
+
+:let d = {}
+:lua d = vim.eval("d")
+:lua d[0] = 123
+:lua d[1] = "abc"
+:lua d[2] = vim.eval("[1, 2, 3]")
+:lua d[3] = vim.eval("{'a':1, 'b':2, 'c':3}")
+:lua d[4] = d[0]
+:lua d[5] = d[1]
+:lua d[6] = d[2]
+:lua d[7] = d[3]
+:lua d[3] = nil
+:lua d[2] = nil
+:lua d[1] = nil
+:lua d[0] = nil
+:lua d = nil
+:$put =string(d)
+
+:?^1?,$w! test.out
+:qa!
+ENDTEST
+
+1 line 1
+2 line 2
+3 line 3
diff --git a/src/testdir/test85.ok b/src/testdir/test85.ok
new file mode 100644 (file)
index 0000000..4753483
--- /dev/null
@@ -0,0 +1,7 @@
+1 changed line 1
+scalar test OK
+2 line 2
+dictionary with list OK
+circular test OK
+[123.0, 'abc', [1, 2, 3], {'a': 1, 'b': 2, 'c': 3}]
+{'4': 123.0, '5': 'abc', '6': [1, 2, 3], '7': {'a': 1, 'b': 2, 'c': 3}}
diff --git a/src/testdir/test86.in b/src/testdir/test86.in
new file mode 100644 (file)
index 0000000..ba3557b
--- /dev/null
@@ -0,0 +1,1320 @@
+Tests for various python features.     vim: set ft=vim :
+
+NOTE: This will cause errors when run under valgrind.
+This would require recompiling Python with:
+  ./configure --without-pymalloc
+See http://svn.python.org/view/python/trunk/Misc/README.valgrind?view=markup
+
+STARTTEST
+:so small.vim
+:set encoding=latin1
+:set noswapfile
+:if !has('python') | e! test.ok | wq! test.out | endif
+:lang C
+:fun Test()
+:py import vim
+:let l = []
+:py l=vim.bindeval('l')
+:py f=vim.bindeval('function("strlen")')
+:" Extending List directly with different types
+:py l.extend([1, "as'd", [1, 2, f, {'a': 1}]])
+:$put =string(l)
+:$put =string(l[-1])
+:try
+:  $put =string(l[-4])
+:catch
+:  $put =v:exception[:13]
+:endtry
+:" List assignment
+:py l[0]=0
+:$put =string(l)
+:py l[-2]=f
+:$put =string(l)
+:"
+:" Extending Dictionary directly with different types
+:let d = {}
+:fun d.f()
+:  return 1
+:endfun
+py << EOF
+d=vim.bindeval('d')
+d['1']='asd'
+d.update(b=[1, 2, f])
+d.update((('-1', {'a': 1}),))
+d.update({'0': -1})
+dk = d.keys()
+dv = d.values()
+di = d.items()
+cmpfun = lambda a, b: cmp(repr(a), repr(b))
+dk.sort(cmpfun)
+dv.sort(cmpfun)
+di.sort(cmpfun)
+EOF
+:$put =pyeval('d[''f''](self={})')
+:$put =pyeval('repr(dk)')
+:$put =substitute(pyeval('repr(dv)'),'0x\x\+','','g')
+:$put =substitute(pyeval('repr(di)'),'0x\x\+','','g')
+:for [key, Val] in sort(items(d))
+:  $put =string(key) . ' : ' . string(Val)
+:  unlet key Val
+:endfor
+:py del dk
+:py del di
+:py del dv
+:"
+:" removing items with del
+:py del l[2]
+:$put =string(l)
+:let l = range(8)
+:py l=vim.bindeval('l')
+:try
+:   py del l[:3]
+:   py del l[1:]
+:catch
+:   $put =v:exception
+:endtry
+:$put =string(l)
+:"
+:py del d['-1']
+:py del d['f']
+:$put =string(pyeval('d.get(''b'', 1)'))
+:$put =string(pyeval('d.pop(''b'')'))
+:$put =string(pyeval('d.get(''b'', 1)'))
+:$put =string(pyeval('d.pop(''1'', 2)'))
+:$put =string(pyeval('d.pop(''1'', 2)'))
+:$put =pyeval('repr(d.has_key(''0''))')
+:$put =pyeval('repr(d.has_key(''1''))')
+:$put =pyeval('repr(''0'' in d)')
+:$put =pyeval('repr(''1'' in d)')
+:$put =pyeval('repr(list(iter(d)))')
+:$put =string(d)
+:$put =pyeval('repr(d.popitem())')
+:$put =pyeval('repr(d.get(''0''))')
+:$put =pyeval('repr(list(iter(d)))')
+:"
+:" removing items out of range: silently skip items that don't exist
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:" The following two ranges delete nothing as they match empty list:
+:py del l[2:1]
+:$put =string(l)
+:py del l[2:2]
+:$put =string(l)
+:py del l[2:3]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[2:4]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[2:5]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[2:6]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:" The following two ranges delete nothing as they match empty list:
+:py del l[-1:2]
+:$put =string(l)
+:py del l[-2:2]
+:$put =string(l)
+:py del l[-3:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[-4:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[-5:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[-6:2]
+:$put =string(l)
+:"
+:" Slice assignment to a list
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[0:0]=['a']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[1:2]=['b']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[2:4]=['c']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[4:4]=['d']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[-1:2]=['e']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[-10:2]=['f']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[2:-10]=['g']
+:$put =string(l)
+:let l = []
+:py l=vim.bindeval('l')
+:py l[0:0]=['h']
+:$put =string(l)
+:"
+:" Locked variables
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:lockvar! l
+:py l[2]='i'
+:$put =string(l)
+:unlockvar! l
+:"
+:" Function calls
+:fun New(...)
+:   return ['NewStart']+a:000+['NewEnd']
+:endfun
+:fun DictNew(...) dict
+:   return ['DictNewStart']+a:000+['DictNewEnd', self]
+:endfun
+:let l=[function('New'), function('DictNew')]
+:py l=vim.bindeval('l')
+:py l.extend(list(l[0](1, 2, 3)))
+:$put =string(l)
+:py l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
+:$put =string(l)
+:py l.extend([l[0].name])
+:$put =string(l)
+:try
+:   py l[1](1, 2, 3)
+:catch
+:   $put =v:exception[:16]
+:endtry
+:py f=l[0]
+:delfunction New
+:try
+:   py f(1, 2, 3)
+:catch
+:   $put =v:exception[:16]
+:endtry
+:if has('float')
+:   let l=[0.0]
+:   py l=vim.bindeval('l')
+:   py l.extend([0.0])
+:   $put =string(l)
+:else
+:   $put ='[0.0, 0.0]'
+:endif
+:let messages=[]
+:delfunction DictNew
+py <<EOF
+import sys
+d=vim.bindeval('{}')
+m=vim.bindeval('messages')
+def em(expr, g=globals(), l=locals()):
+    try:
+        exec(expr, g, l)
+    except:
+        m.extend([sys.exc_type.__name__])
+
+em('d["abc1"]')
+em('d["abc1"]="\\0"')
+em('d["abc1"]=vim')
+em('d[""]=1')
+em('d["a\\0b"]=1')
+em('d[u"a\\0b"]=1')
+
+em('d.pop("abc1")')
+em('d.popitem()')
+del em
+del m
+EOF
+:$put =messages
+:unlet messages
+:" locked and scope attributes
+:let d={} | let dl={} | lockvar dl
+:for s in split("d dl v: g:")
+:    let name=tr(s, ':', 's')
+:    execute 'py '.name.'=vim.bindeval("'.s.'")'
+:    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".pyeval(name.".".v:val)'), ';')
+:    $put =toput
+:endfor
+:silent! let d.abc2=1
+:silent! let dl.abc3=1
+:py d.locked=True
+:py dl.locked=False
+:silent! let d.def=1
+:silent! let dl.def=1
+:put ='d:'.string(d)
+:put ='dl:'.string(dl)
+:unlet d dl
+:
+:let l=[] | let ll=[] | lockvar ll
+:for s in split("l ll")
+:    let name=tr(s, ':', 's')
+:    execute 'py '.name.'=vim.bindeval("'.s.'")'
+:    let toput=s.' : locked:'.pyeval(name.'.locked')
+:    $put =toput
+:endfor
+:silent! call extend(l, [0])
+:silent! call extend(ll, [0])
+:py l.locked=True
+:py ll.locked=False
+:silent! call extend(l, [1])
+:silent! call extend(ll, [1])
+:put ='l:'.string(l)
+:put ='ll:'.string(ll)
+:unlet l ll
+:"
+:" pyeval()
+:let l=pyeval('range(3)')
+:$put =string(l)
+:let d=pyeval('{"a": "b", "c": 1, "d": ["e"]}')
+:$put =sort(items(d))
+:if has('float')
+:   let f=pyeval('0.0')
+:   $put =string(f)
+:else
+:   $put ='0.0'
+:endif
+:" Invalid values:
+:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
+:   try
+:      let v=pyeval(e)
+:   catch
+:      let toput=e.":\t".v:exception[:13]
+:      $put =toput
+:   endtry
+:endfor
+:"
+:" threading
+:let l = [0]
+:py l=vim.bindeval('l')
+py <<EOF
+import threading
+import time
+
+class T(threading.Thread):
+    def __init__(self):
+        threading.Thread.__init__(self)
+        self.t = 0
+        self.running = True
+
+    def run(self):
+        while self.running:
+            self.t += 1
+            time.sleep(0.1)
+
+t = T()
+del T
+t.start()
+EOF
+:sleep 1
+:py t.running = False
+:py t.join()
+:py l[0] = t.t > 8  # check if the background thread is working
+:py del time
+:py del threading
+:$put =string(l)
+:"
+:" settrace
+:let l = []
+:py l=vim.bindeval('l')
+py <<EOF
+import sys
+
+def traceit(frame, event, arg):
+    global l
+    if event == "line":
+        l.extend([frame.f_lineno])
+    return traceit
+
+def trace_main():
+    for i in range(5):
+        pass
+EOF
+:py sys.settrace(traceit)
+:py trace_main()
+:py sys.settrace(None)
+:py del traceit
+:py del trace_main
+:$put =string(l)
+:"
+:" Slice
+:py ll = vim.bindeval('[0, 1, 2, 3, 4, 5]')
+:py l = ll[:4]
+:$put =string(pyeval('l'))
+:py l = ll[2:]
+:$put =string(pyeval('l'))
+:py l = ll[:-4]
+:$put =string(pyeval('l'))
+:py l = ll[-2:]
+:$put =string(pyeval('l'))
+:py l = ll[2:4]
+:$put =string(pyeval('l'))
+:py l = ll[4:2]
+:$put =string(pyeval('l'))
+:py l = ll[-4:-2]
+:$put =string(pyeval('l'))
+:py l = ll[-2:-4]
+:$put =string(pyeval('l'))
+:py l = ll[:]
+:$put =string(pyeval('l'))
+:py l = ll[0:6]
+:$put =string(pyeval('l'))
+:py l = ll[-10:10]
+:$put =string(pyeval('l'))
+:"
+:" Vars
+:let g:foo = 'bac'
+:let w:abc3 = 'def'
+:let b:baz = 'bar'
+:let t:bar = 'jkl'
+:try
+:  throw "Abc"
+:catch
+:  put =pyeval('vim.vvars[''exception'']')
+:endtry
+:put =pyeval('vim.vars[''foo'']')
+:put =pyeval('vim.current.window.vars[''abc3'']')
+:put =pyeval('vim.current.buffer.vars[''baz'']')
+:put =pyeval('vim.current.tabpage.vars[''bar'']')
+:"
+:" Options
+:" paste:          boolean, global
+:" previewheight   number,  global
+:" operatorfunc:   string,  global
+:" number:         boolean, window-local
+:" numberwidth:    number,  window-local
+:" colorcolumn:    string,  window-local
+:" statusline:     string,  window-local/global
+:" autoindent:     boolean, buffer-local
+:" shiftwidth:     number,  buffer-local
+:" omnifunc:       string,  buffer-local
+:" preserveindent: boolean, buffer-local/global
+:" path:           string,  buffer-local/global
+:let g:bufs=[bufnr('%')]
+:new
+:let g:bufs+=[bufnr('%')]
+:vnew
+:let g:bufs+=[bufnr('%')]
+:wincmd j
+:vnew
+:let g:bufs+=[bufnr('%')]
+:wincmd l
+:fun RecVars(opt)
+:  let gval =string(eval('&g:'.a:opt))
+:  let wvals=join(map(range(1, 4),  'v:val.":".string(getwinvar(v:val, "&".a:opt))'))
+:  let bvals=join(map(copy(g:bufs), 'v:val.":".string(getbufvar(v:val, "&".a:opt))'))
+:  put ='  G: '.gval
+:  put ='  W: '.wvals
+:  put ='  B: '.wvals
+:endfun
+py << EOF
+def e(s, g=globals(), l=locals()):
+    try:
+        exec(s, g, l)
+    except:
+        vim.command('return ' + repr(sys.exc_type.__name__))
+
+def ev(s, g=globals(), l=locals()):
+    try:
+        return eval(s, g, l)
+    except:
+        vim.command('let exc=' + repr(sys.exc_type.__name__))
+        return 0
+EOF
+:fun E(s)
+:   python e(vim.eval('a:s'))
+:endfun
+:fun Ev(s)
+:   let r=pyeval('ev(vim.eval("a:s"))')
+:   if exists('exc')
+:       throw exc
+:   endif
+:   return r
+:endfun
+:py gopts1=vim.options
+:py wopts1=vim.windows[2].options
+:py wopts2=vim.windows[0].options
+:py wopts3=vim.windows[1].options
+:py bopts1=vim.buffers[vim.bindeval("g:bufs")[2]].options
+:py bopts2=vim.buffers[vim.bindeval("g:bufs")[1]].options
+:py bopts3=vim.buffers[vim.bindeval("g:bufs")[0]].options
+:set path=.,..,,
+:let lst=[]
+:let lst+=[['paste',          1,     0,     1,     2,      1,    1,      0    ]]
+:let lst+=[['previewheight',  5,     1,     6,     'a',    0,    1,      0    ]]
+:let lst+=[['operatorfunc',   'A',   'B',   'C',   2,      0,    1,      0    ]]
+:let lst+=[['number',         0,     1,     1,     0,      1,    0,      1    ]]
+:let lst+=[['numberwidth',    2,     3,     5,     -100,   0,    0,      1    ]]
+:let lst+=[['colorcolumn',    '+1',  '+2',  '+3',  'abc4',  0,    0,      1    ]]
+:let lst+=[['statusline',     '1',   '2',   '4',   0,      0,    1,      1    ]]
+:let lst+=[['autoindent',     0,     1,     1,     2,      1,    0,      2    ]]
+:let lst+=[['shiftwidth',     0,     2,     1,     3,      0,    0,      2    ]]
+:let lst+=[['omnifunc',       'A',   'B',   'C',   1,      0,    0,      2    ]]
+:let lst+=[['preserveindent', 0,     1,     1,     2,      1,    1,      2    ]]
+:let lst+=[['path',           '.,,', ',,',  '.',   0,      0,    1,      2    ]]
+:for       [oname,            oval1, oval2, oval3, invval, bool, global, local] in lst
+:   py oname=vim.eval('oname')
+:   py oval1=vim.bindeval('oval1')
+:   py oval2=vim.bindeval('oval2')
+:   py oval3=vim.bindeval('oval3')
+:   if invval is 0 || invval is 1
+:       py invval=bool(vim.bindeval('invval'))
+:   else
+:       py invval=vim.bindeval('invval')
+:   endif
+:   if bool
+:       py oval1=bool(oval1)
+:       py oval2=bool(oval2)
+:       py oval3=bool(oval3)
+:   endif
+:   put ='>>> '.oname
+:   for v in ['gopts1', 'wopts1', 'bopts1']
+:       try
+:           put ='  p/'.v.': '.Ev('repr('.v.'['''.oname.'''])')
+:       catch
+:           put ='  p/'.v.'! '.v:exception
+:       endtry
+:       let r=E(v.'['''.oname.''']=invval')
+:       if r isnot 0
+:           put ='  inv: '.string(invval).'! '.r
+:       endif
+:       for vv in (v is# 'gopts1' ? [v] : [v, v[:-2].'2', v[:-2].'3'])
+:           let val=substitute(vv, '^.opts', 'oval', '')
+:           let r=E(vv.'['''.oname.''']='.val)
+:           if r isnot 0
+:               put ='  '.vv.'! '.r
+:           endif
+:       endfor
+:   endfor
+:   call RecVars(oname)
+:   for v in ['wopts3', 'bopts3']
+:       let r=E('del '.v.'["'.oname.'"]')
+:       if r isnot 0
+:           put ='  del '.v.'! '.r
+:       endif
+:   endfor
+:   call RecVars(oname)
+:endfor
+:delfunction RecVars
+:delfunction E
+:delfunction Ev
+:py del ev
+:py del e
+:only
+:for buf in g:bufs[1:]
+:   execute 'bwipeout!' buf
+:endfor
+:py del gopts1
+:py del wopts1
+:py del wopts2
+:py del wopts3
+:py del bopts1
+:py del bopts2
+:py del bopts3
+:py del oval1
+:py del oval2
+:py del oval3
+:py del oname
+:py del invval
+:"
+:" Test buffer object
+:vnew
+:put ='First line'
+:put ='Second line'
+:put ='Third line'
+:1 delete _
+:py b=vim.current.buffer
+:wincmd w
+:mark a
+:augroup BUFS
+:   autocmd BufFilePost * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")'))
+:   autocmd BufFilePre * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")'))
+:augroup END
+py << EOF
+cb = vim.current.buffer
+# Tests BufferAppend and BufferItem
+cb.append(b[0])
+# Tests BufferSlice and BufferAssSlice
+cb.append('abc5') # Will be overwritten
+cb[-1:] = b[:-2]
+# Test BufferLength and BufferAssSlice
+cb.append('def') # Will not be overwritten
+cb[len(cb):] = b[:]
+# Test BufferAssItem and BufferMark
+cb.append('ghi') # Will be overwritten
+cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
+# Test BufferRepr
+cb.append(repr(cb) + repr(b))
+# Modify foreign buffer
+b.append('foo')
+b[0]='bar'
+b[0:0]=['baz']
+vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number)
+# Test assigning to name property
+import os
+old_name = cb.name
+cb.name = 'foo'
+cb.append(cb.name[-11:].replace(os.path.sep, '/'))
+b.name = 'bar'
+cb.append(b.name[-11:].replace(os.path.sep, '/'))
+cb.name = old_name
+cb.append(cb.name[-17:].replace(os.path.sep, '/'))
+del old_name
+# Test CheckBuffer
+for _b in vim.buffers:
+    if _b is not cb:
+        vim.command('bwipeout! ' + str(_b.number))
+del _b
+cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
+for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc6")', 'b.name = "!"'):
+    try:
+        exec(expr)
+    except vim.error:
+        pass
+    else:
+        # Usually a SEGV here
+        # Should not happen in any case
+        cb.append('No exception for ' + expr)
+vim.command('cd .')
+del b
+EOF
+:augroup BUFS
+:   autocmd!
+:augroup END
+:augroup! BUFS
+:"
+:" Test vim.buffers object
+:set hidden
+:edit a
+:buffer #
+:edit b
+:buffer #
+:edit c
+:buffer #
+py << EOF
+try:
+    from __builtin__ import next
+except ImportError:
+    next = lambda o: o.next()
+# Check GCing iterator that was not fully exhausted
+i = iter(vim.buffers)
+cb.append('i:' + str(next(i)))
+# and also check creating more then one iterator at a time
+i2 = iter(vim.buffers)
+cb.append('i2:' + str(next(i2)))
+cb.append('i:' + str(next(i)))
+# The following should trigger GC and not cause any problems
+del i
+del i2
+i3 = iter(vim.buffers)
+cb.append('i3:' + str(next(i3)))
+del i3
+
+prevnum = 0
+for b in vim.buffers:
+    # Check buffer order
+    if prevnum >= b.number:
+        cb.append('!!! Buffer numbers not in strictly ascending order')
+    # Check indexing: vim.buffers[number].number == number
+    cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b))
+    prevnum = b.number
+del prevnum
+
+cb.append(str(len(vim.buffers)))
+
+bnums = list(map(lambda b: b.number, vim.buffers))[1:]
+
+# Test wiping out buffer with existing iterator
+i4 = iter(vim.buffers)
+cb.append('i4:' + str(next(i4)))
+vim.command('bwipeout! ' + str(bnums.pop(0)))
+try:
+    next(i4)
+except vim.error:
+    pass
+else:
+    cb.append('!!!! No vim.error')
+i4 = iter(vim.buffers)
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+cb.append('i4:' + str(next(i4)))
+try:
+    next(i4)
+except StopIteration:
+    cb.append('StopIteration')
+del i4
+del bnums
+EOF
+:"
+:" Test vim.{tabpage,window}list and vim.{tabpage,window} objects
+:tabnew 0
+:tabnew 1
+:vnew a.1
+:tabnew 2
+:vnew a.2
+:vnew b.2
+:vnew c.2
+py << EOF
+cb.append('Number of tabs: ' + str(len(vim.tabpages)))
+cb.append('Current tab pages:')
+def W(w):
+    if repr(w).find('(unknown)') != -1:
+        return '<window object (unknown)>'
+    else:
+        return repr(w)
+
+start = len(cb)
+
+def Cursor(w):
+    if w.buffer is cb:
+        return repr((start - w.cursor[0], w.cursor[1]))
+    else:
+        return repr(w.cursor)
+
+for t in vim.tabpages:
+    cb.append('  ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window))
+    cb.append('  Windows:')
+    for w in t.windows:
+        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w))
+        # Other values depend on the size of the terminal, so they are checked partly:
+        for attr in ('height', 'row', 'width', 'col'):
+            try:
+                aval = getattr(w, attr)
+                if type(aval) is not long:
+                    raise TypeError
+                if aval < 0:
+                    raise ValueError
+            except Exception:
+                cb.append('!!!!!! Error while getting attribute ' + attr + ': ' + sys.exc_type.__name__)
+        del aval
+        del attr
+        w.cursor = (len(w.buffer), 0)
+del W
+del Cursor
+cb.append('Number of windows in current tab page: ' + str(len(vim.windows)))
+if list(vim.windows) != list(vim.current.tabpage.windows):
+    cb.append('!!!!!! Windows differ')
+EOF
+:"
+:" Test vim.current
+py << EOF
+def H(o):
+    return repr(o)
+cb.append('Current tab page: ' + repr(vim.current.tabpage))
+cb.append('Current window: ' + repr(vim.current.window) + ': ' + H(vim.current.window) + ' is ' + H(vim.current.tabpage.window))
+cb.append('Current buffer: ' + repr(vim.current.buffer) + ': ' + H(vim.current.buffer) + ' is ' + H(vim.current.window.buffer)+ ' is ' + H(vim.current.tabpage.window.buffer))
+del H
+# Assigning: fails
+try:
+    vim.current.window = vim.tabpages[0].window
+except ValueError:
+    cb.append('ValueError at assigning foreign tab window')
+
+for attr in ('window', 'tabpage', 'buffer'):
+    try:
+        setattr(vim.current, attr, None)
+    except TypeError:
+        cb.append('Type error at assigning None to vim.current.' + attr)
+del attr
+
+# Assigning: success
+vim.current.tabpage = vim.tabpages[-2]
+vim.current.buffer = cb
+vim.current.window = vim.windows[0]
+vim.current.window.cursor = (len(vim.current.buffer), 0)
+cb.append('Current tab page: ' + repr(vim.current.tabpage))
+cb.append('Current window: ' + repr(vim.current.window))
+cb.append('Current buffer: ' + repr(vim.current.buffer))
+cb.append('Current line: ' + repr(vim.current.line))
+ws = list(vim.windows)
+ts = list(vim.tabpages)
+for b in vim.buffers:
+    if b is not cb:
+        vim.command('bwipeout! ' + str(b.number))
+del b
+cb.append('w.valid: ' + repr([w.valid for w in ws]))
+cb.append('t.valid: ' + repr([t.valid for t in ts]))
+del w
+del t
+del ts
+del ws
+EOF
+:tabonly!
+:only!
+:"
+:" Test types
+py << EOF
+for expr, attr in (
+    ('vim.vars',                         'Dictionary'),
+    ('vim.options',                      'Options'),
+    ('vim.bindeval("{}")',               'Dictionary'),
+    ('vim.bindeval("[]")',               'List'),
+    ('vim.bindeval("function(\'tr\')")', 'Function'),
+    ('vim.current.buffer',               'Buffer'),
+    ('vim.current.range',                'Range'),
+    ('vim.current.window',               'Window'),
+    ('vim.current.tabpage',              'TabPage'),
+):
+    cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
+del expr
+del attr
+EOF
+:"
+:" Test __dir__() method
+py << EOF
+for name, o in (
+        ('current',    vim.current),
+        ('buffer',     vim.current.buffer),
+        ('window',     vim.current.window),
+        ('tabpage',    vim.current.tabpage),
+        ('range',      vim.current.range),
+        ('dictionary', vim.bindeval('{}')),
+        ('list',       vim.bindeval('[]')),
+        ('function',   vim.bindeval('function("tr")')),
+        ('output',     sys.stdout),
+    ):
+    cb.append(name + ':' + ','.join(dir(o)))
+del name
+del o
+EOF
+:"
+:" Test vim.*.__new__
+:$put =string(pyeval('vim.Dictionary({})'))
+:$put =string(pyeval('vim.Dictionary(a=1)'))
+:$put =string(pyeval('vim.Dictionary(((''a'', 1),))'))
+:$put =string(pyeval('vim.List()'))
+:$put =string(pyeval('vim.List(iter(''abc7''))'))
+:$put =string(pyeval('vim.Function(''tr'')'))
+:"
+:" Test stdout/stderr
+:redir => messages
+:py sys.stdout.write('abc8') ; sys.stdout.write('def')
+:py sys.stderr.write('abc9') ; sys.stderr.write('def')
+:py sys.stdout.writelines(iter('abcA'))
+:py sys.stderr.writelines(iter('abcB'))
+:redir END
+:$put =string(substitute(messages, '\d\+', '', 'g'))
+:" Test subclassing
+:fun Put(...)
+:   $put =string(a:000)
+:   return a:000
+:endfun
+py << EOF
+class DupDict(vim.Dictionary):
+    def __setitem__(self, key, value):
+        super(DupDict, self).__setitem__(key, value)
+        super(DupDict, self).__setitem__('dup_' + key, value)
+dd = DupDict()
+dd['a'] = 'b'
+
+class DupList(vim.List):
+    def __getitem__(self, idx):
+        return [super(DupList, self).__getitem__(idx)] * 2
+
+dl = DupList()
+dl2 = DupList(iter('abcC'))
+dl.extend(dl2[0])
+
+class DupFun(vim.Function):
+    def __call__(self, arg):
+        return super(DupFun, self).__call__(arg, arg)
+
+df = DupFun('Put')
+EOF
+:$put =string(sort(keys(pyeval('dd'))))
+:$put =string(pyeval('dl'))
+:$put =string(pyeval('dl2'))
+:$put =string(pyeval('df(2)'))
+:$put =string(pyeval('dl') is# pyeval('dl'))
+:$put =string(pyeval('dd') is# pyeval('dd'))
+:$put =string(pyeval('df'))
+:delfunction Put
+py << EOF
+del DupDict
+del DupList
+del DupFun
+del dd
+del dl
+del dl2
+del df
+EOF
+:"
+:" Test chdir
+py << EOF
+import os
+fnamemodify = vim.Function('fnamemodify')
+cb.append(fnamemodify('.', ':p:h:t'))
+cb.append(vim.eval('@%'))
+os.chdir('..')
+path = fnamemodify('.', ':p:h:t')
+if path != 'src':
+  # Running tests from a shadow directory, so move up another level
+  # This will result in @% looking like shadow/testdir/test86.in, hence the
+  # extra fnamemodify
+  os.chdir('..')
+  cb.append(fnamemodify('.', ':p:h:t'))
+  cb.append(fnamemodify(vim.eval('@%'), ':s?^%s.??' % path).replace(os.path.sep, '/'))
+  os.chdir(path)
+  del path
+else:
+  cb.append(fnamemodify('.', ':p:h:t'))
+  cb.append(vim.eval('@%').replace(os.path.sep, '/'))
+os.chdir('testdir')
+cb.append(fnamemodify('.', ':p:h:t'))
+cb.append(vim.eval('@%'))
+del fnamemodify
+EOF
+:"
+:" Test errors
+:fun F() dict
+:endfun
+:fun D()
+:endfun
+py << EOF
+def ee(expr, g=globals(), l=locals()):
+    try:
+        exec(expr, g, l)
+    except:
+        ei = sys.exc_info()
+        msg = sys.exc_info()[0].__name__ + ':' + repr(sys.exc_info()[1].args)
+        msg = msg.replace('TypeError:(\'argument 1 ', 'TypeError:(\'')
+        if expr.find('None') > -1:
+            msg = msg.replace('TypeError:(\'iteration over non-sequence\',)',
+                              'TypeError:("\'NoneType\' object is not iterable",)')
+        if expr.find('FailingNumber') > -1:
+            msg = msg.replace(', not \'FailingNumber\'', '').replace('"', '\'')
+            msg = msg.replace('TypeError:(\'iteration over non-sequence\',)',
+                              'TypeError:("\'FailingNumber\' object is not iterable",)')
+        if msg.find('(\'\'') > -1 or msg.find('(\'can\'t') > -1:
+            msg = msg.replace('(\'', '("').replace('\',)', '",)')
+        if expr == 'fd(self=[])':
+            # HACK: PyMapping_Check changed meaning
+            msg = msg.replace('AttributeError:(\'keys\',)',
+                              'TypeError:(\'unable to convert list to vim dictionary\',)')
+        cb.append(expr + ':' + msg)
+    else:
+        cb.append(expr + ':NOT FAILED')
+d = vim.Dictionary()
+ned = vim.Dictionary(foo='bar', baz='abcD')
+dl = vim.Dictionary(a=1)
+dl.locked = True
+l = vim.List()
+ll = vim.List('abcE')
+ll.locked = True
+f = vim.Function('string')
+fd = vim.Function('F')
+fdel = vim.Function('D')
+vim.command('delfunction D')
+
+def subexpr_test(expr, name, subexprs):
+    cb.append('>>> Testing %s using %s' % (name, expr))
+    for subexpr in subexprs:
+        ee(expr % subexpr)
+    cb.append('<<< Finished')
+
+def stringtochars_test(expr):
+    return subexpr_test(expr, 'StringToChars', (
+        '1',       # Fail type checks
+        'u"\\0"',  # Fail PyString_AsStringAndSize(bytes, , NULL) check
+        '"\\0"',   # Fail PyString_AsStringAndSize(object, , NULL) check
+    ))
+
+class Mapping(object):
+    def __init__(self, d):
+        self.d = d
+
+    def __getitem__(self, key):
+        return self.d[key]
+
+    def keys(self):
+        return self.d.keys()
+
+    def items(self):
+        return self.d.items()
+
+def convertfrompyobject_test(expr, recurse=True):
+    # pydict_to_tv
+    stringtochars_test(expr % '{%s : 1}')
+    if recurse:
+        convertfrompyobject_test(expr % '{"abcF" : %s}', False)
+    # pymap_to_tv
+    stringtochars_test(expr % 'Mapping({%s : 1})')
+    if recurse:
+        convertfrompyobject_test(expr % 'Mapping({"abcG" : %s})', False)
+    # pyseq_to_tv
+    iter_test(expr)
+    return subexpr_test(expr, 'ConvertFromPyObject', (
+        'None',                 # Not conversible
+        '{"": 1}',              # Empty key not allowed
+        '{u"": 1}',             # Same, but with unicode object
+        'FailingMapping()',     #
+        'FailingMappingKey()',  #
+        'FailingNumber()',      #
+    ))
+
+def convertfrompymapping_test(expr):
+    convertfrompyobject_test(expr)
+    return subexpr_test(expr, 'ConvertFromPyMapping', (
+        '[]',
+    ))
+
+def iter_test(expr):
+    return subexpr_test(expr, '*Iter*', (
+        'FailingIter()',
+        'FailingIterNext()',
+    ))
+
+def number_test(expr, natural=False, unsigned=False):
+    if natural:
+        unsigned = True
+    return subexpr_test(expr, 'NumberToLong', (
+        '[]',
+        'None',
+    ) + (unsigned and ('-1',) or ())
+    + (natural and ('0',) or ()))
+
+class FailingTrue(object):
+    def __nonzero__(self):
+        raise NotImplementedError('bool')
+
+class FailingIter(object):
+    def __iter__(self):
+        raise NotImplementedError('iter')
+
+class FailingIterNext(object):
+    def __iter__(self):
+        return self
+
+    def next(self):
+        raise NotImplementedError('next')
+
+class FailingMappingKey(object):
+    def __getitem__(self, item):
+        raise NotImplementedError('getitem:mappingkey')
+
+    def keys(self):
+        return list("abcH")
+
+class FailingMapping(object):
+    def __getitem__(self):
+        raise NotImplementedError('getitem:mapping')
+
+    def keys(self):
+        raise NotImplementedError('keys')
+
+class FailingList(list):
+    def __getitem__(self, idx):
+        if i == 2:
+            raise NotImplementedError('getitem:list')
+        else:
+            return super(FailingList, self).__getitem__(idx)
+
+class NoArgsCall(object):
+    def __call__(self):
+        pass
+
+class FailingCall(object):
+    def __call__(self, path):
+        raise NotImplementedError('call')
+
+class FailingNumber(object):
+    def __int__(self):
+        raise NotImplementedError('int')
+
+cb.append("> Output")
+cb.append(">> OutputSetattr")
+ee('del sys.stdout.softspace')
+number_test('sys.stdout.softspace = %s', unsigned=True)
+number_test('sys.stderr.softspace = %s', unsigned=True)
+ee('sys.stdout.attr = None')
+cb.append(">> OutputWrite")
+ee('sys.stdout.write(None)')
+cb.append(">> OutputWriteLines")
+ee('sys.stdout.writelines(None)')
+ee('sys.stdout.writelines([1])')
+iter_test('sys.stdout.writelines(%s)')
+cb.append("> VimCommand")
+stringtochars_test('vim.command(%s)')
+ee('vim.command("", 2)')
+#! Not checked: vim->python exceptions translating: checked later
+cb.append("> VimToPython")
+#! Not checked: everything: needs errors in internal python functions
+cb.append("> VimEval")
+stringtochars_test('vim.eval(%s)')
+ee('vim.eval("", FailingTrue())')
+#! Not checked: everything: needs errors in internal python functions
+cb.append("> VimEvalPy")
+stringtochars_test('vim.bindeval(%s)')
+ee('vim.eval("", 2)')
+#! Not checked: vim->python exceptions translating: checked later
+cb.append("> VimStrwidth")
+stringtochars_test('vim.strwidth(%s)')
+cb.append("> VimForeachRTP")
+ee('vim.foreach_rtp(None)')
+ee('vim.foreach_rtp(NoArgsCall())')
+ee('vim.foreach_rtp(FailingCall())')
+ee('vim.foreach_rtp(int, 2)')
+cb.append('> import')
+old_rtp = vim.options['rtp']
+vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
+ee('import xxx_no_such_module_xxx')
+ee('import failing_import')
+ee('import failing')
+vim.options['rtp'] = old_rtp
+del old_rtp
+cb.append("> Dictionary")
+cb.append(">> DictionaryConstructor")
+ee('vim.Dictionary("abcI")')
+##! Not checked: py_dict_alloc failure
+cb.append(">> DictionarySetattr")
+ee('del d.locked')
+ee('d.locked = FailingTrue()')
+ee('vim.vvars.locked = False')
+ee('d.scope = True')
+ee('d.xxx = True')
+cb.append(">> _DictionaryItem")
+ee('d.get("a", 2, 3)')
+stringtochars_test('d.get(%s)')
+ee('d.pop("a")')
+ee('dl.pop("a")')
+cb.append(">> DictionaryIterNext")
+ee('for i in ned: ned["a"] = 1')
+del i
+cb.append(">> DictionaryAssItem")
+ee('dl["b"] = 1')
+stringtochars_test('d[%s] = 1')
+convertfrompyobject_test('d["a"] = %s')
+cb.append(">> DictionaryUpdate")
+cb.append(">>> kwargs")
+cb.append(">>> iter")
+ee('d.update(FailingMapping())')
+ee('d.update([FailingIterNext()])')
+iter_test('d.update(%s)')
+convertfrompyobject_test('d.update(%s)')
+stringtochars_test('d.update(((%s, 0),))')
+convertfrompyobject_test('d.update((("a", %s),))')
+cb.append(">> DictionaryPopItem")
+ee('d.popitem(1, 2)')
+cb.append(">> DictionaryHasKey")
+ee('d.has_key()')
+cb.append("> List")
+cb.append(">> ListConstructor")
+ee('vim.List(1, 2)')
+ee('vim.List(a=1)')
+iter_test('vim.List(%s)')
+convertfrompyobject_test('vim.List([%s])')
+cb.append(">> ListItem")
+ee('l[1000]')
+cb.append(">> ListAssItem")
+ee('ll[1] = 2')
+ee('l[1000] = 3')
+cb.append(">> ListAssSlice")
+ee('ll[1:100] = "abcJ"')
+iter_test('l[:] = %s')
+convertfrompyobject_test('l[:] = [%s]')
+cb.append(">> ListConcatInPlace")
+iter_test('l.extend(%s)')
+convertfrompyobject_test('l.extend([%s])')
+cb.append(">> ListSetattr")
+ee('del l.locked')
+ee('l.locked = FailingTrue()')
+ee('l.xxx = True')
+cb.append("> Function")
+cb.append(">> FunctionConstructor")
+ee('vim.Function("123")')
+ee('vim.Function("xxx_non_existent_function_xxx")')
+ee('vim.Function("xxx#non#existent#function#xxx")')
+cb.append(">> FunctionCall")
+convertfrompyobject_test('f(%s)')
+convertfrompymapping_test('fd(self=%s)')
+cb.append("> TabPage")
+cb.append(">> TabPageAttr")
+ee('vim.current.tabpage.xxx')
+cb.append("> TabList")
+cb.append(">> TabListItem")
+ee('vim.tabpages[1000]')
+cb.append("> Window")
+cb.append(">> WindowAttr")
+ee('vim.current.window.xxx')
+cb.append(">> WindowSetattr")
+ee('vim.current.window.buffer = 0')
+ee('vim.current.window.cursor = (100000000, 100000000)')
+ee('vim.current.window.cursor = True')
+number_test('vim.current.window.height = %s', unsigned=True)
+number_test('vim.current.window.width = %s', unsigned=True)
+ee('vim.current.window.xxxxxx = True')
+cb.append("> WinList")
+cb.append(">> WinListItem")
+ee('vim.windows[1000]')
+cb.append("> Buffer")
+cb.append(">> StringToLine (indirect)")
+ee('vim.current.buffer[0] = u"\\na"')
+ee('vim.current.buffer[0] = "\\na"')
+cb.append(">> SetBufferLine (indirect)")
+ee('vim.current.buffer[0] = True')
+cb.append(">> SetBufferLineList (indirect)")
+ee('vim.current.buffer[:] = True')
+ee('vim.current.buffer[:] = ["\\na", "bc"]')
+cb.append(">> InsertBufferLines (indirect)")
+ee('vim.current.buffer.append(None)')
+ee('vim.current.buffer.append(["\\na", "bc"])')
+ee('vim.current.buffer.append("\\nbc")')
+cb.append(">> RBItem")
+ee('vim.current.buffer[100000000]')
+cb.append(">> RBAsItem")
+ee('vim.current.buffer[100000000] = ""')
+cb.append(">> BufferAttr")
+ee('vim.current.buffer.xxx')
+cb.append(">> BufferSetattr")
+ee('vim.current.buffer.name = True')
+ee('vim.current.buffer.xxx = True')
+cb.append(">> BufferMark")
+ee('vim.current.buffer.mark(0)')
+ee('vim.current.buffer.mark("abcM")')
+ee('vim.current.buffer.mark("!")')
+cb.append(">> BufferRange")
+ee('vim.current.buffer.range(1, 2, 3)')
+cb.append("> BufMap")
+cb.append(">> BufMapItem")
+ee('vim.buffers[100000000]')
+number_test('vim.buffers[%s]', natural=True)
+cb.append("> Current")
+cb.append(">> CurrentGetattr")
+ee('vim.current.xxx')
+cb.append(">> CurrentSetattr")
+ee('vim.current.line = True')
+ee('vim.current.buffer = True')
+ee('vim.current.window = True')
+ee('vim.current.tabpage = True')
+ee('vim.current.xxx = True')
+del d
+del ned
+del dl
+del l
+del ll
+del f
+del fd
+del fdel
+del subexpr_test
+del stringtochars_test
+del Mapping
+del convertfrompyobject_test
+del convertfrompymapping_test
+del iter_test
+del number_test
+del FailingTrue
+del FailingIter
+del FailingIterNext
+del FailingMapping
+del FailingMappingKey
+del FailingList
+del NoArgsCall
+del FailingCall
+del FailingNumber
+EOF
+:delfunction F
+:"
+:" Test import
+py << EOF
+sys.path.insert(0, os.path.join(os.getcwd(), 'python_before'))
+sys.path.append(os.path.join(os.getcwd(), 'python_after'))
+vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
+l = []
+def callback(path):
+    l.append(path[-len('/testdir'):].replace(os.path.sep, '/'))
+vim.foreach_rtp(callback)
+cb.append(repr(l))
+del l
+def callback(path):
+    return path[-len('/testdir'):].replace(os.path.sep, '/')
+cb.append(repr(vim.foreach_rtp(callback)))
+del callback
+from module import dir as d
+from modulex import ddir
+cb.append(d + ',' + ddir)
+import before
+cb.append(before.dir)
+import after
+cb.append(after.dir)
+import topmodule as tm
+import topmodule.submodule as tms
+import topmodule.submodule.subsubmodule.subsubsubmodule as tmsss
+cb.append(tm.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/__init__.py'):])
+cb.append(tms.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/__init__.py'):])
+cb.append(tmsss.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/subsubmodule/subsubsubmodule.py'):])
+del before
+del after
+del d
+del ddir
+del tm
+del tms
+del tmsss
+EOF
+:"
+:" Test exceptions
+:fun Exe(e)
+:   execute a:e
+:endfun
+py << EOF
+Exe = vim.bindeval('function("Exe")')
+ee('vim.command("throw \'abcN\'")')
+ee('Exe("throw \'def\'")')
+ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")')
+ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")')
+ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")')
+ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")')
+del Exe
+EOF
+:delfunction Exe
+:"
+:" Cleanup
+py << EOF
+del cb
+del ee
+del sys
+del os
+del vim
+EOF
+:endfun
+:"
+:fun RunTest()
+:let checkrefs = !empty($PYTHONDUMPREFS)
+:let start = getline(1, '$')
+:for i in range(checkrefs ? 10 : 1)
+:   if i != 0
+:       %d _
+:       call setline(1, start)
+:   endif
+:   call Test()
+:   if i == 0
+:       let result = getline(1, '$')
+:   endif
+:endfor
+:if checkrefs
+:   %d _
+:   call setline(1, result)
+:endif
+:endfun
+:"
+:call RunTest()
+:delfunction RunTest
+:delfunction Test
+:call garbagecollect(1)
+:"
+:/^start:/,$wq! test.out
+:" vim: et ts=4 isk-=\:
+:call getchar()
+ENDTEST
+
+start:
diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok
new file mode 100644 (file)
index 0000000..c8517b3
--- /dev/null
@@ -0,0 +1,1197 @@
+start:
+[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
+[1, 2, function('strlen'), {'a': 1}]
+Vim(put):E684:
+[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
+[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
+1
+['-1', '0', '1', 'b', 'f']
+['asd', -1L, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >]
+[('-1', <vim.dictionary object at >), ('0', -1L), ('1', 'asd'), ('b', <vim.list object at >), ('f', <vim.Function '1'>)]
+'-1' : {'a': 1}
+'0' : -1
+'1' : 'asd'
+'b' : [1, 2, function('strlen')]
+'f' : function('1')
+[0, function('strlen')]
+[3]
+[1, 2, function('strlen')]
+[1, 2, function('strlen')]
+1
+'asd'
+2
+True
+False
+True
+False
+['0']
+{'0': -1}
+('0', -1L)
+None
+[]
+[0, 1, 2, 3]
+[0, 1, 2, 3]
+[0, 1, 3]
+[0, 1]
+[0, 1]
+[0, 1]
+[0, 1, 2, 3]
+[0, 1, 2, 3]
+[0, 2, 3]
+[2, 3]
+[2, 3]
+[2, 3]
+['a', 0, 1, 2, 3]
+[0, 'b', 2, 3]
+[0, 1, 'c']
+[0, 1, 2, 3, 'd']
+[0, 1, 2, 'e', 3]
+['f', 2, 3]
+[0, 1, 'g', 2, 3]
+['h']
+[0, 1, 2, 3]
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
+Vim(python):E725:
+Vim(python):E117:
+[0.0, 0.0]
+KeyError
+TypeError
+TypeError
+ValueError
+TypeError
+TypeError
+KeyError
+KeyError
+d : locked:0;scope:0
+dl : locked:1;scope:0
+v: : locked:2;scope:1
+g: : locked:0;scope:2
+d:{'abc2': 1}
+dl:{'def': 1}
+l : locked:0
+ll : locked:1
+l:[0]
+ll:[1]
+[0, 1, 2]
+['a', 'b']
+['c', 1]
+['d', ['e']]
+0.0
+"\0":  Vim(let):E859:
+{"\0": 1}:     Vim(let):E859:
+undefined_name:        Vim(let):Trace
+vim:   Vim(let):E859:
+[1]
+[1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1]
+[0, 1, 2, 3]
+[2, 3, 4, 5]
+[0, 1]
+[4, 5]
+[2, 3]
+[]
+[2, 3]
+[]
+[0, 1, 2, 3, 4, 5]
+[0, 1, 2, 3, 4, 5]
+[0, 1, 2, 3, 4, 5]
+Abc
+bac
+def
+bar
+jkl
+>>> paste
+  p/gopts1: False
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 2! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 1
+  W: 1:1 2:1 3:1 4:1
+  B: 1:1 2:1 3:1 4:1
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 1
+  W: 1:1 2:1 3:1 4:1
+  B: 1:1 2:1 3:1 4:1
+>>> previewheight
+  p/gopts1: 12
+  inv: 'a'! TypeError
+  p/wopts1! KeyError
+  inv: 'a'! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 'a'! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 5
+  W: 1:5 2:5 3:5 4:5
+  B: 1:5 2:5 3:5 4:5
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 5
+  W: 1:5 2:5 3:5 4:5
+  B: 1:5 2:5 3:5 4:5
+>>> operatorfunc
+  p/gopts1: ''
+  inv: 2! TypeError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 2! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 'A'
+  W: 1:'A' 2:'A' 3:'A' 4:'A'
+  B: 1:'A' 2:'A' 3:'A' 4:'A'
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 'A'
+  W: 1:'A' 2:'A' 3:'A' 4:'A'
+  B: 1:'A' 2:'A' 3:'A' 4:'A'
+>>> number
+  p/gopts1! KeyError
+  inv: 0! KeyError
+  gopts1! KeyError
+  p/wopts1: False
+  p/bopts1! KeyError
+  inv: 0! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 0
+  W: 1:1 2:1 3:0 4:0
+  B: 1:1 2:1 3:0 4:0
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: 0
+  W: 1:1 2:1 3:0 4:0
+  B: 1:1 2:1 3:0 4:0
+>>> numberwidth
+  p/gopts1! KeyError
+  inv: -100! KeyError
+  gopts1! KeyError
+  p/wopts1: 8
+  inv: -100! error
+  p/bopts1! KeyError
+  inv: -100! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 8
+  W: 1:3 2:5 3:2 4:8
+  B: 1:3 2:5 3:2 4:8
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: 8
+  W: 1:3 2:5 3:2 4:8
+  B: 1:3 2:5 3:2 4:8
+>>> colorcolumn
+  p/gopts1! KeyError
+  inv: 'abc4'! KeyError
+  gopts1! KeyError
+  p/wopts1: ''
+  inv: 'abc4'! error
+  p/bopts1! KeyError
+  inv: 'abc4'! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: ''
+  W: 1:'+2' 2:'+3' 3:'+1' 4:''
+  B: 1:'+2' 2:'+3' 3:'+1' 4:''
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: ''
+  W: 1:'+2' 2:'+3' 3:'+1' 4:''
+  B: 1:'+2' 2:'+3' 3:'+1' 4:''
+>>> statusline
+  p/gopts1: ''
+  inv: 0! TypeError
+  p/wopts1: None
+  inv: 0! TypeError
+  p/bopts1! KeyError
+  inv: 0! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: '1'
+  W: 1:'2' 2:'4' 3:'1' 4:'1'
+  B: 1:'2' 2:'4' 3:'1' 4:'1'
+  del bopts3! KeyError
+  G: '1'
+  W: 1:'2' 2:'1' 3:'1' 4:'1'
+  B: 1:'2' 2:'1' 3:'1' 4:'1'
+>>> autoindent
+  p/gopts1! KeyError
+  inv: 2! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: False
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+>>> shiftwidth
+  p/gopts1! KeyError
+  inv: 3! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 3! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: 8
+  G: 8
+  W: 1:0 2:2 3:8 4:1
+  B: 1:0 2:2 3:8 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 8
+  W: 1:0 2:2 3:8 4:1
+  B: 1:0 2:2 3:8 4:1
+>>> omnifunc
+  p/gopts1! KeyError
+  inv: 1! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 1! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: ''
+  inv: 1! TypeError
+  G: ''
+  W: 1:'A' 2:'B' 3:'' 4:'C'
+  B: 1:'A' 2:'B' 3:'' 4:'C'
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: ''
+  W: 1:'A' 2:'B' 3:'' 4:'C'
+  B: 1:'A' 2:'B' 3:'' 4:'C'
+>>> preserveindent
+  p/gopts1! KeyError
+  inv: 2! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: False
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+>>> path
+  p/gopts1: '.,..,,'
+  inv: 0! TypeError
+  p/wopts1! KeyError
+  inv: 0! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: None
+  inv: 0! TypeError
+  G: '.,,'
+  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+  del wopts3! KeyError
+  G: '.,,'
+  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+First line
+First line
+def
+First line
+Second line
+Third line
+(7, 2)
+<buffer test86.in><buffer >
+baz
+bar
+Second line
+Third line
+foo
+1:BufFilePre:1
+1:BufFilePost:1
+testdir/foo
+5:BufFilePre:5
+5:BufFilePost:5
+testdir/bar
+1:BufFilePre:1
+1:BufFilePost:1
+testdir/test86.in
+valid: b:False, cb:True
+i:<buffer test86.in>
+i2:<buffer test86.in>
+i:<buffer a>
+i3:<buffer test86.in>
+1:<buffer test86.in>=<buffer test86.in>
+8:<buffer a>=<buffer a>
+9:<buffer b>=<buffer b>
+10:<buffer c>=<buffer c>
+4
+i4:<buffer test86.in>
+i4:<buffer test86.in>
+StopIteration
+Number of tabs: 4
+Current tab pages:
+  <tabpage 0>(1): 1 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (37, 0)
+  <tabpage 1>(2): 1 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
+  <tabpage 2>(3): 2 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
+    <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
+  <tabpage 3>(4): 4 windows, current is <window 0>
+  Windows:
+    <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
+    <window 1>(2): displays buffer <buffer b.2>; cursor is at (1, 0)
+    <window 2>(3): displays buffer <buffer a.2>; cursor is at (1, 0)
+    <window 3>(4): displays buffer <buffer 2>; cursor is at (1, 0)
+Number of windows in current tab page: 4
+Current tab page: <tabpage 3>
+Current window: <window 0>: <window 0> is <window 0>
+Current buffer: <buffer c.2>: <buffer c.2> is <buffer c.2> is <buffer c.2>
+ValueError at assigning foreign tab window
+Type error at assigning None to vim.current.window
+Type error at assigning None to vim.current.tabpage
+Type error at assigning None to vim.current.buffer
+Current tab page: <tabpage 2>
+Current window: <window 0>
+Current buffer: <buffer test86.in>
+Current line: 'Type error at assigning None to vim.current.buffer'
+w.valid: [True, False]
+t.valid: [True, False, True, False]
+vim.vars:Dictionary:True
+vim.options:Options:True
+vim.bindeval("{}"):Dictionary:True
+vim.bindeval("[]"):List:True
+vim.bindeval("function('tr')"):Function:True
+vim.current.buffer:Buffer:True
+vim.current.range:Range:True
+vim.current.window:Window:True
+vim.current.tabpage:TabPage:True
+current:__dir__,__members__,buffer,line,range,tabpage,window
+buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars
+window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars
+tabpage:__dir__,__members__,number,valid,vars,window,windows
+range:__dir__,__members__,append,end,start
+dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
+list:__dir__,__members__,extend,locked
+function:__dir__,__members__,softspace
+output:__dir__,__members__,flush,softspace,write,writelines
+{}
+{'a': 1}
+{'a': 1}
+[]
+['a', 'b', 'c', '7']
+function('tr')
+'
+abcdef
+line  :
+abcdef
+abcA
+line  :
+abcB'
+['a', 'dup_a']
+['a', 'a']
+['a', 'b', 'c', 'C']
+[2, 2]
+[2, 2]
+1
+1
+function('Put')
+testdir
+test86.in
+src
+testdir/test86.in
+testdir
+test86.in
+> Output
+>> OutputSetattr
+del sys.stdout.softspace:AttributeError:("can't delete OutputObject attributes",)
+>>> Testing NumberToLong using sys.stdout.softspace = %s
+sys.stdout.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+sys.stdout.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+sys.stdout.softspace = -1:ValueError:('number must be greater or equal to zero',)
+<<< Finished
+>>> Testing NumberToLong using sys.stderr.softspace = %s
+sys.stderr.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+sys.stderr.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+sys.stderr.softspace = -1:ValueError:('number must be greater or equal to zero',)
+<<< Finished
+sys.stdout.attr = None:AttributeError:('invalid attribute: attr',)
+>> OutputWrite
+sys.stdout.write(None):TypeError:('coercing to Unicode: need string or buffer, NoneType found',)
+>> OutputWriteLines
+sys.stdout.writelines(None):TypeError:("'NoneType' object is not iterable",)
+sys.stdout.writelines([1]):TypeError:('coercing to Unicode: need string or buffer, int found',)
+>>> Testing *Iter* using sys.stdout.writelines(%s)
+sys.stdout.writelines(FailingIter()):NotImplementedError:('iter',)
+sys.stdout.writelines(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+> VimCommand
+>>> Testing StringToChars using vim.command(%s)
+vim.command(1):TypeError:('expected str() or unicode() instance, but got int',)
+vim.command(u"\0"):TypeError:('expected string without null bytes',)
+vim.command("\0"):TypeError:('expected string without null bytes',)
+<<< Finished
+vim.command("", 2):TypeError:('command() takes exactly one argument (2 given)',)
+> VimToPython
+> VimEval
+>>> Testing StringToChars using vim.eval(%s)
+vim.eval(1):TypeError:('expected str() or unicode() instance, but got int',)
+vim.eval(u"\0"):TypeError:('expected string without null bytes',)
+vim.eval("\0"):TypeError:('expected string without null bytes',)
+<<< Finished
+vim.eval("", FailingTrue()):TypeError:('function takes exactly 1 argument (2 given)',)
+> VimEvalPy
+>>> Testing StringToChars using vim.bindeval(%s)
+vim.bindeval(1):TypeError:('expected str() or unicode() instance, but got int',)
+vim.bindeval(u"\0"):TypeError:('expected string without null bytes',)
+vim.bindeval("\0"):TypeError:('expected string without null bytes',)
+<<< Finished
+vim.eval("", 2):TypeError:('function takes exactly 1 argument (2 given)',)
+> VimStrwidth
+>>> Testing StringToChars using vim.strwidth(%s)
+vim.strwidth(1):TypeError:('expected str() or unicode() instance, but got int',)
+vim.strwidth(u"\0"):TypeError:('expected string without null bytes',)
+vim.strwidth("\0"):TypeError:('expected string without null bytes',)
+<<< Finished
+> VimForeachRTP
+vim.foreach_rtp(None):TypeError:("'NoneType' object is not callable",)
+vim.foreach_rtp(NoArgsCall()):TypeError:('__call__() takes exactly 1 argument (2 given)',)
+vim.foreach_rtp(FailingCall()):NotImplementedError:('call',)
+vim.foreach_rtp(int, 2):TypeError:('foreach_rtp() takes exactly one argument (2 given)',)
+> import
+import xxx_no_such_module_xxx:ImportError:('No module named xxx_no_such_module_xxx',)
+import failing_import:ImportError:('No module named failing_import',)
+import failing:NotImplementedError:()
+> Dictionary
+>> DictionaryConstructor
+vim.Dictionary("abcI"):ValueError:('expected sequence element of size 2, but got sequence of size 1',)
+>> DictionarySetattr
+del d.locked:AttributeError:('cannot delete vim.Dictionary attributes',)
+d.locked = FailingTrue():NotImplementedError:('bool',)
+vim.vvars.locked = False:TypeError:('cannot modify fixed dictionary',)
+d.scope = True:AttributeError:('cannot set attribute scope',)
+d.xxx = True:AttributeError:('cannot set attribute xxx',)
+>> _DictionaryItem
+d.get("a", 2, 3):TypeError:('function takes at most 2 arguments (3 given)',)
+>>> Testing StringToChars using d.get(%s)
+d.get(1):TypeError:('expected str() or unicode() instance, but got int',)
+d.get(u"\0"):TypeError:('expected string without null bytes',)
+d.get("\0"):TypeError:('expected string without null bytes',)
+<<< Finished
+d.pop("a"):KeyError:('a',)
+dl.pop("a"):error:('dictionary is locked',)
+>> DictionaryIterNext
+for i in ned: ned["a"] = 1:RuntimeError:('hashtab changed during iteration',)
+>> DictionaryAssItem
+dl["b"] = 1:error:('dictionary is locked',)
+>>> Testing StringToChars using d[%s] = 1
+d[1] = 1:TypeError:('expected str() or unicode() instance, but got int',)
+d[u"\0"] = 1:TypeError:('expected string without null bytes',)
+d["\0"] = 1:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = {%s : 1}
+d["a"] = {1 : 1}:TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = {u"\0" : 1}:TypeError:('expected string without null bytes',)
+d["a"] = {"\0" : 1}:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = {"abcF" : {%s : 1}}
+d["a"] = {"abcF" : {1 : 1}}:TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = {"abcF" : {u"\0" : 1}}:TypeError:('expected string without null bytes',)
+d["a"] = {"abcF" : {"\0" : 1}}:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = {"abcF" : Mapping({%s : 1})}
+d["a"] = {"abcF" : Mapping({1 : 1})}:TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = {"abcF" : Mapping({u"\0" : 1})}:TypeError:('expected string without null bytes',)
+d["a"] = {"abcF" : Mapping({"\0" : 1})}:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d["a"] = {"abcF" : %s}
+d["a"] = {"abcF" : FailingIter()}:TypeError:('unable to convert FailingIter to vim structure',)
+d["a"] = {"abcF" : FailingIterNext()}:NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s}
+d["a"] = {"abcF" : None}:TypeError:('unable to convert NoneType to vim structure',)
+d["a"] = {"abcF" : {"": 1}}:ValueError:('empty keys are not allowed',)
+d["a"] = {"abcF" : {u"": 1}}:ValueError:('empty keys are not allowed',)
+d["a"] = {"abcF" : FailingMapping()}:NotImplementedError:('keys',)
+d["a"] = {"abcF" : FailingMappingKey()}:NotImplementedError:('getitem:mappingkey',)
+d["a"] = {"abcF" : FailingNumber()}:TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({%s : 1})
+d["a"] = Mapping({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = Mapping({u"\0" : 1}):TypeError:('expected string without null bytes',)
+d["a"] = Mapping({"\0" : 1}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({"abcG" : {%s : 1}})
+d["a"] = Mapping({"abcG" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = Mapping({"abcG" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+d["a"] = Mapping({"abcG" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({"abcG" : Mapping({%s : 1})})
+d["a"] = Mapping({"abcG" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = Mapping({"abcG" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s})
+d["a"] = Mapping({"abcG" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',)
+d["a"] = Mapping({"abcG" : FailingIterNext()}):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s})
+d["a"] = Mapping({"abcG" : None}):TypeError:('unable to convert NoneType to vim structure',)
+d["a"] = Mapping({"abcG" : {"": 1}}):ValueError:('empty keys are not allowed',)
+d["a"] = Mapping({"abcG" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+d["a"] = Mapping({"abcG" : FailingMapping()}):NotImplementedError:('keys',)
+d["a"] = Mapping({"abcG" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+d["a"] = Mapping({"abcG" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using d["a"] = %s
+d["a"] = FailingIter():TypeError:('unable to convert FailingIter to vim structure',)
+d["a"] = FailingIterNext():NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = %s
+d["a"] = None:TypeError:('unable to convert NoneType to vim structure',)
+d["a"] = {"": 1}:ValueError:('empty keys are not allowed',)
+d["a"] = {u"": 1}:ValueError:('empty keys are not allowed',)
+d["a"] = FailingMapping():NotImplementedError:('keys',)
+d["a"] = FailingMappingKey():NotImplementedError:('getitem:mappingkey',)
+d["a"] = FailingNumber():TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>> DictionaryUpdate
+>>> kwargs
+>>> iter
+d.update(FailingMapping()):NotImplementedError:('keys',)
+d.update([FailingIterNext()]):NotImplementedError:('next',)
+>>> Testing *Iter* using d.update(%s)
+d.update(FailingIter()):NotImplementedError:('iter',)
+d.update(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+>>> Testing StringToChars using d.update({%s : 1})
+d.update({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+d.update({u"\0" : 1}):TypeError:('expected string without null bytes',)
+d.update({"\0" : 1}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update({"abcF" : {%s : 1}})
+d.update({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+d.update({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+d.update({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update({"abcF" : Mapping({%s : 1})})
+d.update({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+d.update({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+d.update({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d.update({"abcF" : %s})
+d.update({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',)
+d.update({"abcF" : FailingIterNext()}):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update({"abcF" : %s})
+d.update({"abcF" : None}):TypeError:('unable to convert NoneType to vim structure',)
+d.update({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
+d.update({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+d.update({"abcF" : FailingMapping()}):NotImplementedError:('keys',)
+d.update({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+d.update({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({%s : 1}))
+d.update(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
+d.update(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
+d.update(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({"abcG" : {%s : 1}}))
+d.update(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
+d.update(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
+d.update(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({"abcG" : Mapping({%s : 1})}))
+d.update(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
+d.update(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
+d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d.update(Mapping({"abcG" : %s}))
+d.update(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to vim structure',)
+d.update(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s}))
+d.update(Mapping({"abcG" : None})):TypeError:('unable to convert NoneType to vim structure',)
+d.update(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
+d.update(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
+d.update(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
+d.update(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
+d.update(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using d.update(%s)
+d.update(FailingIter()):NotImplementedError:('iter',)
+d.update(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update(%s)
+d.update(None):TypeError:("'NoneType' object is not iterable",)
+d.update({"": 1}):ValueError:('empty keys are not allowed',)
+d.update({u"": 1}):ValueError:('empty keys are not allowed',)
+d.update(FailingMapping()):NotImplementedError:('keys',)
+d.update(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
+d.update(FailingNumber()):TypeError:("'FailingNumber' object is not iterable",)
+<<< Finished
+>>> Testing StringToChars using d.update(((%s, 0),))
+d.update(((1, 0),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update(((u"\0", 0),)):TypeError:('expected string without null bytes',)
+d.update((("\0", 0),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {%s : 1}),))
+d.update((("a", {1 : 1}),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", {u"\0" : 1}),)):TypeError:('expected string without null bytes',)
+d.update((("a", {"\0" : 1}),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {"abcF" : {%s : 1}}),))
+d.update((("a", {"abcF" : {1 : 1}}),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", {"abcF" : {u"\0" : 1}}),)):TypeError:('expected string without null bytes',)
+d.update((("a", {"abcF" : {"\0" : 1}}),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {"abcF" : Mapping({%s : 1})}),))
+d.update((("a", {"abcF" : Mapping({1 : 1})}),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", {"abcF" : Mapping({u"\0" : 1})}),)):TypeError:('expected string without null bytes',)
+d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d.update((("a", {"abcF" : %s}),))
+d.update((("a", {"abcF" : FailingIter()}),)):TypeError:('unable to convert FailingIter to vim structure',)
+d.update((("a", {"abcF" : FailingIterNext()}),)):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),))
+d.update((("a", {"abcF" : None}),)):TypeError:('unable to convert NoneType to vim structure',)
+d.update((("a", {"abcF" : {"": 1}}),)):ValueError:('empty keys are not allowed',)
+d.update((("a", {"abcF" : {u"": 1}}),)):ValueError:('empty keys are not allowed',)
+d.update((("a", {"abcF" : FailingMapping()}),)):NotImplementedError:('keys',)
+d.update((("a", {"abcF" : FailingMappingKey()}),)):NotImplementedError:('getitem:mappingkey',)
+d.update((("a", {"abcF" : FailingNumber()}),)):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),))
+d.update((("a", Mapping({1 : 1})),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", Mapping({u"\0" : 1})),)):TypeError:('expected string without null bytes',)
+d.update((("a", Mapping({"\0" : 1})),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({"abcG" : {%s : 1}})),))
+d.update((("a", Mapping({"abcG" : {1 : 1}})),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", Mapping({"abcG" : {u"\0" : 1}})),)):TypeError:('expected string without null bytes',)
+d.update((("a", Mapping({"abcG" : {"\0" : 1}})),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({"abcG" : Mapping({%s : 1})})),))
+d.update((("a", Mapping({"abcG" : Mapping({1 : 1})})),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", Mapping({"abcG" : Mapping({u"\0" : 1})})),)):TypeError:('expected string without null bytes',)
+d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),))
+d.update((("a", Mapping({"abcG" : FailingIter()})),)):TypeError:('unable to convert FailingIter to vim structure',)
+d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),))
+d.update((("a", Mapping({"abcG" : None})),)):TypeError:('unable to convert NoneType to vim structure',)
+d.update((("a", Mapping({"abcG" : {"": 1}})),)):ValueError:('empty keys are not allowed',)
+d.update((("a", Mapping({"abcG" : {u"": 1}})),)):ValueError:('empty keys are not allowed',)
+d.update((("a", Mapping({"abcG" : FailingMapping()})),)):NotImplementedError:('keys',)
+d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):NotImplementedError:('getitem:mappingkey',)
+d.update((("a", Mapping({"abcG" : FailingNumber()})),)):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using d.update((("a", %s),))
+d.update((("a", FailingIter()),)):TypeError:('unable to convert FailingIter to vim structure',)
+d.update((("a", FailingIterNext()),)):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", %s),))
+d.update((("a", None),)):TypeError:('unable to convert NoneType to vim structure',)
+d.update((("a", {"": 1}),)):ValueError:('empty keys are not allowed',)
+d.update((("a", {u"": 1}),)):ValueError:('empty keys are not allowed',)
+d.update((("a", FailingMapping()),)):NotImplementedError:('keys',)
+d.update((("a", FailingMappingKey()),)):NotImplementedError:('getitem:mappingkey',)
+d.update((("a", FailingNumber()),)):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>> DictionaryPopItem
+d.popitem(1, 2):TypeError:('popitem() takes no arguments (2 given)',)
+>> DictionaryHasKey
+d.has_key():TypeError:('has_key() takes exactly one argument (0 given)',)
+> List
+>> ListConstructor
+vim.List(1, 2):TypeError:('function takes at most 1 argument (2 given)',)
+vim.List(a=1):TypeError:('list constructor does not accept keyword arguments',)
+>>> Testing *Iter* using vim.List(%s)
+vim.List(FailingIter()):NotImplementedError:('iter',)
+vim.List(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+>>> Testing StringToChars using vim.List([{%s : 1}])
+vim.List([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([{u"\0" : 1}]):TypeError:('expected string without null bytes',)
+vim.List([{"\0" : 1}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using vim.List([{"abcF" : {%s : 1}}])
+vim.List([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',)
+vim.List([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using vim.List([{"abcF" : Mapping({%s : 1})}])
+vim.List([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',)
+vim.List([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using vim.List([{"abcF" : %s}])
+vim.List([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to vim structure',)
+vim.List([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}])
+vim.List([{"abcF" : None}]):TypeError:('unable to convert NoneType to vim structure',)
+vim.List([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',)
+vim.List([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',)
+vim.List([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',)
+vim.List([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',)
+vim.List([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({%s : 1})])
+vim.List([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',)
+vim.List([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({"abcG" : {%s : 1}})])
+vim.List([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',)
+vim.List([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({"abcG" : Mapping({%s : 1})})])
+vim.List([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',)
+vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})])
+vim.List([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to vim structure',)
+vim.List([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})])
+vim.List([Mapping({"abcG" : None})]):TypeError:('unable to convert NoneType to vim structure',)
+vim.List([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',)
+vim.List([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',)
+vim.List([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',)
+vim.List([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',)
+vim.List([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using vim.List([%s])
+vim.List([FailingIter()]):TypeError:('unable to convert FailingIter to vim structure',)
+vim.List([FailingIterNext()]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([%s])
+vim.List([None]):TypeError:('unable to convert NoneType to vim structure',)
+vim.List([{"": 1}]):ValueError:('empty keys are not allowed',)
+vim.List([{u"": 1}]):ValueError:('empty keys are not allowed',)
+vim.List([FailingMapping()]):NotImplementedError:('keys',)
+vim.List([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',)
+vim.List([FailingNumber()]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>> ListItem
+l[1000]:IndexError:('list index out of range',)
+>> ListAssItem
+ll[1] = 2:error:('list is locked',)
+l[1000] = 3:IndexError:('list index out of range',)
+>> ListAssSlice
+ll[1:100] = "abcJ":error:('list is locked',)
+>>> Testing *Iter* using l[:] = %s
+l[:] = FailingIter():NotImplementedError:('iter',)
+l[:] = FailingIterNext():NotImplementedError:('next',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [{%s : 1}]
+l[:] = [{1 : 1}]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [{u"\0" : 1}]:TypeError:('expected string without null bytes',)
+l[:] = [{"\0" : 1}]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [{"abcF" : {%s : 1}}]
+l[:] = [{"abcF" : {1 : 1}}]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [{"abcF" : {u"\0" : 1}}]:TypeError:('expected string without null bytes',)
+l[:] = [{"abcF" : {"\0" : 1}}]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [{"abcF" : Mapping({%s : 1})}]
+l[:] = [{"abcF" : Mapping({1 : 1})}]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [{"abcF" : Mapping({u"\0" : 1})}]:TypeError:('expected string without null bytes',)
+l[:] = [{"abcF" : Mapping({"\0" : 1})}]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using l[:] = [{"abcF" : %s}]
+l[:] = [{"abcF" : FailingIter()}]:TypeError:('unable to convert FailingIter to vim structure',)
+l[:] = [{"abcF" : FailingIterNext()}]:NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}]
+l[:] = [{"abcF" : None}]:TypeError:('unable to convert NoneType to vim structure',)
+l[:] = [{"abcF" : {"": 1}}]:ValueError:('empty keys are not allowed',)
+l[:] = [{"abcF" : {u"": 1}}]:ValueError:('empty keys are not allowed',)
+l[:] = [{"abcF" : FailingMapping()}]:NotImplementedError:('keys',)
+l[:] = [{"abcF" : FailingMappingKey()}]:NotImplementedError:('getitem:mappingkey',)
+l[:] = [{"abcF" : FailingNumber()}]:TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({%s : 1})]
+l[:] = [Mapping({1 : 1})]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [Mapping({u"\0" : 1})]:TypeError:('expected string without null bytes',)
+l[:] = [Mapping({"\0" : 1})]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({"abcG" : {%s : 1}})]
+l[:] = [Mapping({"abcG" : {1 : 1}})]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [Mapping({"abcG" : {u"\0" : 1}})]:TypeError:('expected string without null bytes',)
+l[:] = [Mapping({"abcG" : {"\0" : 1}})]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({"abcG" : Mapping({%s : 1})})]
+l[:] = [Mapping({"abcG" : Mapping({1 : 1})})]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [Mapping({"abcG" : Mapping({u"\0" : 1})})]:TypeError:('expected string without null bytes',)
+l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})]
+l[:] = [Mapping({"abcG" : FailingIter()})]:TypeError:('unable to convert FailingIter to vim structure',)
+l[:] = [Mapping({"abcG" : FailingIterNext()})]:NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})]
+l[:] = [Mapping({"abcG" : None})]:TypeError:('unable to convert NoneType to vim structure',)
+l[:] = [Mapping({"abcG" : {"": 1}})]:ValueError:('empty keys are not allowed',)
+l[:] = [Mapping({"abcG" : {u"": 1}})]:ValueError:('empty keys are not allowed',)
+l[:] = [Mapping({"abcG" : FailingMapping()})]:NotImplementedError:('keys',)
+l[:] = [Mapping({"abcG" : FailingMappingKey()})]:NotImplementedError:('getitem:mappingkey',)
+l[:] = [Mapping({"abcG" : FailingNumber()})]:TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using l[:] = [%s]
+l[:] = [FailingIter()]:TypeError:('unable to convert FailingIter to vim structure',)
+l[:] = [FailingIterNext()]:NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [%s]
+l[:] = [None]:TypeError:('unable to convert NoneType to vim structure',)
+l[:] = [{"": 1}]:ValueError:('empty keys are not allowed',)
+l[:] = [{u"": 1}]:ValueError:('empty keys are not allowed',)
+l[:] = [FailingMapping()]:NotImplementedError:('keys',)
+l[:] = [FailingMappingKey()]:NotImplementedError:('getitem:mappingkey',)
+l[:] = [FailingNumber()]:TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>> ListConcatInPlace
+>>> Testing *Iter* using l.extend(%s)
+l.extend(FailingIter()):NotImplementedError:('iter',)
+l.extend(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+>>> Testing StringToChars using l.extend([{%s : 1}])
+l.extend([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([{u"\0" : 1}]):TypeError:('expected string without null bytes',)
+l.extend([{"\0" : 1}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l.extend([{"abcF" : {%s : 1}}])
+l.extend([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',)
+l.extend([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l.extend([{"abcF" : Mapping({%s : 1})}])
+l.extend([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',)
+l.extend([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using l.extend([{"abcF" : %s}])
+l.extend([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to vim structure',)
+l.extend([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}])
+l.extend([{"abcF" : None}]):TypeError:('unable to convert NoneType to vim structure',)
+l.extend([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',)
+l.extend([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',)
+l.extend([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',)
+l.extend([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',)
+l.extend([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({%s : 1})])
+l.extend([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',)
+l.extend([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({"abcG" : {%s : 1}})])
+l.extend([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',)
+l.extend([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({"abcG" : Mapping({%s : 1})})])
+l.extend([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',)
+l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})])
+l.extend([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to vim structure',)
+l.extend([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})])
+l.extend([Mapping({"abcG" : None})]):TypeError:('unable to convert NoneType to vim structure',)
+l.extend([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',)
+l.extend([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',)
+l.extend([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',)
+l.extend([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',)
+l.extend([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using l.extend([%s])
+l.extend([FailingIter()]):TypeError:('unable to convert FailingIter to vim structure',)
+l.extend([FailingIterNext()]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([%s])
+l.extend([None]):TypeError:('unable to convert NoneType to vim structure',)
+l.extend([{"": 1}]):ValueError:('empty keys are not allowed',)
+l.extend([{u"": 1}]):ValueError:('empty keys are not allowed',)
+l.extend([FailingMapping()]):NotImplementedError:('keys',)
+l.extend([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',)
+l.extend([FailingNumber()]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>> ListSetattr
+del l.locked:AttributeError:('cannot delete vim.List attributes',)
+l.locked = FailingTrue():NotImplementedError:('bool',)
+l.xxx = True:AttributeError:('cannot set attribute xxx',)
+> Function
+>> FunctionConstructor
+vim.Function("123"):ValueError:('unnamed function 123 does not exist',)
+vim.Function("xxx_non_existent_function_xxx"):ValueError:('function xxx_non_existent_function_xxx does not exist',)
+vim.Function("xxx#non#existent#function#xxx"):NOT FAILED
+>> FunctionCall
+>>> Testing StringToChars using f({%s : 1})
+f({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+f({u"\0" : 1}):TypeError:('expected string without null bytes',)
+f({"\0" : 1}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using f({"abcF" : {%s : 1}})
+f({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+f({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+f({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using f({"abcF" : Mapping({%s : 1})})
+f({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+f({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+f({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using f({"abcF" : %s})
+f({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',)
+f({"abcF" : FailingIterNext()}):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using f({"abcF" : %s})
+f({"abcF" : None}):TypeError:('unable to convert NoneType to vim structure',)
+f({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
+f({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+f({"abcF" : FailingMapping()}):NotImplementedError:('keys',)
+f({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+f({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using f(Mapping({%s : 1}))
+f(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
+f(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
+f(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using f(Mapping({"abcG" : {%s : 1}}))
+f(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
+f(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
+f(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using f(Mapping({"abcG" : Mapping({%s : 1})}))
+f(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
+f(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
+f(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using f(Mapping({"abcG" : %s}))
+f(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to vim structure',)
+f(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s}))
+f(Mapping({"abcG" : None})):TypeError:('unable to convert NoneType to vim structure',)
+f(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
+f(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
+f(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
+f(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
+f(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using f(%s)
+f(FailingIter()):TypeError:('unable to convert FailingIter to vim structure',)
+f(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using f(%s)
+f(None):TypeError:('unable to convert NoneType to vim structure',)
+f({"": 1}):ValueError:('empty keys are not allowed',)
+f({u"": 1}):ValueError:('empty keys are not allowed',)
+f(FailingMapping()):NotImplementedError:('keys',)
+f(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
+f(FailingNumber()):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using fd(self={%s : 1})
+fd(self={1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self={u"\0" : 1}):TypeError:('expected string without null bytes',)
+fd(self={"\0" : 1}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using fd(self={"abcF" : {%s : 1}})
+fd(self={"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self={"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+fd(self={"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using fd(self={"abcF" : Mapping({%s : 1})})
+fd(self={"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self={"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+fd(self={"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using fd(self={"abcF" : %s})
+fd(self={"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',)
+fd(self={"abcF" : FailingIterNext()}):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self={"abcF" : %s})
+fd(self={"abcF" : None}):TypeError:('unable to convert NoneType to vim structure',)
+fd(self={"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
+fd(self={"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+fd(self={"abcF" : FailingMapping()}):NotImplementedError:('keys',)
+fd(self={"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+fd(self={"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({%s : 1}))
+fd(self=Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self=Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
+fd(self=Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({"abcG" : {%s : 1}}))
+fd(self=Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self=Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
+fd(self=Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({"abcG" : Mapping({%s : 1})}))
+fd(self=Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self=Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
+fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using fd(self=Mapping({"abcG" : %s}))
+fd(self=Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to vim structure',)
+fd(self=Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s}))
+fd(self=Mapping({"abcG" : None})):TypeError:('unable to convert NoneType to vim structure',)
+fd(self=Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
+fd(self=Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
+fd(self=Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
+fd(self=Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
+fd(self=Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using fd(self=%s)
+fd(self=FailingIter()):TypeError:('unable to convert FailingIter to vim dictionary',)
+fd(self=FailingIterNext()):TypeError:('unable to convert FailingIterNext to vim dictionary',)
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self=%s)
+fd(self=None):TypeError:('unable to convert NoneType to vim dictionary',)
+fd(self={"": 1}):ValueError:('empty keys are not allowed',)
+fd(self={u"": 1}):ValueError:('empty keys are not allowed',)
+fd(self=FailingMapping()):NotImplementedError:('keys',)
+fd(self=FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
+fd(self=FailingNumber()):TypeError:('unable to convert FailingNumber to vim dictionary',)
+<<< Finished
+>>> Testing ConvertFromPyMapping using fd(self=%s)
+fd(self=[]):TypeError:('unable to convert list to vim dictionary',)
+<<< Finished
+> TabPage
+>> TabPageAttr
+vim.current.tabpage.xxx:AttributeError:('xxx',)
+> TabList
+>> TabListItem
+vim.tabpages[1000]:IndexError:('no such tab page',)
+> Window
+>> WindowAttr
+vim.current.window.xxx:AttributeError:('xxx',)
+>> WindowSetattr
+vim.current.window.buffer = 0:TypeError:('readonly attribute: buffer',)
+vim.current.window.cursor = (100000000, 100000000):error:('cursor position outside buffer',)
+vim.current.window.cursor = True:TypeError:('argument must be 2-item sequence, not bool',)
+>>> Testing NumberToLong using vim.current.window.height = %s
+vim.current.window.height = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+vim.current.window.height = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+vim.current.window.height = -1:ValueError:('number must be greater or equal to zero',)
+<<< Finished
+>>> Testing NumberToLong using vim.current.window.width = %s
+vim.current.window.width = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+vim.current.window.width = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+vim.current.window.width = -1:ValueError:('number must be greater or equal to zero',)
+<<< Finished
+vim.current.window.xxxxxx = True:AttributeError:('xxxxxx',)
+> WinList
+>> WinListItem
+vim.windows[1000]:IndexError:('no such window',)
+> Buffer
+>> StringToLine (indirect)
+vim.current.buffer[0] = u"\na":error:('string cannot contain newlines',)
+vim.current.buffer[0] = "\na":error:('string cannot contain newlines',)
+>> SetBufferLine (indirect)
+vim.current.buffer[0] = True:TypeError:('bad argument type for built-in operation',)
+>> SetBufferLineList (indirect)
+vim.current.buffer[:] = True:TypeError:('bad argument type for built-in operation',)
+vim.current.buffer[:] = ["\na", "bc"]:error:('string cannot contain newlines',)
+>> InsertBufferLines (indirect)
+vim.current.buffer.append(None):TypeError:('bad argument type for built-in operation',)
+vim.current.buffer.append(["\na", "bc"]):error:('string cannot contain newlines',)
+vim.current.buffer.append("\nbc"):error:('string cannot contain newlines',)
+>> RBItem
+vim.current.buffer[100000000]:IndexError:('line number out of range',)
+>> RBAsItem
+vim.current.buffer[100000000] = "":IndexError:('line number out of range',)
+>> BufferAttr
+vim.current.buffer.xxx:AttributeError:('xxx',)
+>> BufferSetattr
+vim.current.buffer.name = True:TypeError:('expected str() or unicode() instance, but got bool',)
+vim.current.buffer.xxx = True:AttributeError:('xxx',)
+>> BufferMark
+vim.current.buffer.mark(0):TypeError:('expected str() or unicode() instance, but got int',)
+vim.current.buffer.mark("abcM"):ValueError:('mark name must be a single character',)
+vim.current.buffer.mark("!"):error:('invalid mark name',)
+>> BufferRange
+vim.current.buffer.range(1, 2, 3):TypeError:('function takes exactly 2 arguments (3 given)',)
+> BufMap
+>> BufMapItem
+vim.buffers[100000000]:KeyError:(100000000,)
+>>> Testing NumberToLong using vim.buffers[%s]
+vim.buffers[[]]:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+vim.buffers[None]:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+vim.buffers[-1]:ValueError:('number must be greater then zero',)
+vim.buffers[0]:ValueError:('number must be greater then zero',)
+<<< Finished
+> Current
+>> CurrentGetattr
+vim.current.xxx:AttributeError:('xxx',)
+>> CurrentSetattr
+vim.current.line = True:TypeError:('bad argument type for built-in operation',)
+vim.current.buffer = True:TypeError:('expected vim.Buffer object, but got bool',)
+vim.current.window = True:TypeError:('expected vim.Window object, but got bool',)
+vim.current.tabpage = True:TypeError:('expected vim.TabPage object, but got bool',)
+vim.current.xxx = True:AttributeError:('xxx',)
+['/testdir']
+'/testdir'
+2,xx
+before
+after
+pythonx/topmodule/__init__.py
+pythonx/topmodule/submodule/__init__.py
+pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py
+vim.command("throw 'abcN'"):error:('abcN',)
+Exe("throw 'def'"):error:('def',)
+vim.eval("Exe('throw ''ghi''')"):error:('ghi',)
+vim.eval("Exe('echoerr ''jkl''')"):error:('Vim(echoerr):jkl',)
+vim.eval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)
+vim.bindeval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)
diff --git a/src/testdir/test87.in b/src/testdir/test87.in
new file mode 100644 (file)
index 0000000..0ee6df3
--- /dev/null
@@ -0,0 +1,1271 @@
+Tests for various python features.     vim: set ft=vim :
+
+STARTTEST
+:so small.vim
+:set noswapfile
+:if !has('python3') | e! test.ok | wq! test.out | endif
+:lang C
+:fun Test()
+:py3 import vim
+:let l = []
+:py3 l=vim.bindeval('l')
+:py3 f=vim.bindeval('function("strlen")')
+:" Extending List directly with different types
+:py3 l+=[1, "as'd", [1, 2, f, {'a': 1}]]
+:$put =string(l)
+:$put =string(l[-1])
+:try
+:  $put =string(l[-4])
+:catch
+:  $put =v:exception[:13]
+:endtry
+:" List assignment
+:py3 l[0]=0
+:$put =string(l)
+:py3 l[-2]=f
+:$put =string(l)
+:"
+:" Extending Dictionary directly with different types
+:let d = {}
+:fun d.f()
+:  return 1
+:endfun
+py3 << EOF
+d=vim.bindeval('d')
+d['1']='asd'
+d.update(b=[1, 2, f])
+d.update((('-1', {'a': 1}),))
+d.update({'0': -1})
+dk = d.keys()
+dv = d.values()
+di = d.items()
+dk.sort(key=repr)
+dv.sort(key=repr)
+di.sort(key=repr)
+EOF
+:$put =py3eval('d[''f''](self={})')
+:$put =py3eval('repr(dk)')
+:$put =substitute(py3eval('repr(dv)'),'0x\x\+','','g')
+:$put =substitute(py3eval('repr(di)'),'0x\x\+','','g')
+:for [key, Val] in sort(items(d))
+:  $put =string(key) . ' : ' . string(Val)
+:  unlet key Val
+:endfor
+:py3 del dk
+:py3 del di
+:py3 del dv
+:"
+:" removing items with del
+:py3 del l[2]
+:$put =string(l)
+:let l = range(8)
+:py3 l=vim.bindeval('l')
+:try
+:   py3 del l[:3]
+:   py3 del l[1:]
+:catch
+:   $put =v:exception
+:endtry
+:$put =string(l)
+:"
+:py3 del d['-1']
+:py3 del d['f']
+:$put =string(py3eval('d.get(''b'', 1)'))
+:$put =string(py3eval('d.pop(''b'')'))
+:$put =string(py3eval('d.get(''b'', 1)'))
+:$put =string(py3eval('d.pop(''1'', 2)'))
+:$put =string(py3eval('d.pop(''1'', 2)'))
+:$put =py3eval('repr(d.has_key(''0''))')
+:$put =py3eval('repr(d.has_key(''1''))')
+:$put =py3eval('repr(''0'' in d)')
+:$put =py3eval('repr(''1'' in d)')
+:$put =py3eval('repr(list(iter(d)))')
+:$put =string(d)
+:$put =py3eval('repr(d.popitem())')
+:$put =py3eval('repr(d.get(''0''))')
+:$put =py3eval('repr(list(iter(d)))')
+:"
+:" removing items out of range: silently skip items that don't exist
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:" The following two ranges delete nothing as they match empty list:
+:py3 del l[2:1]
+:$put =string(l)
+:py3 del l[2:2]
+:$put =string(l)
+:py3 del l[2:3]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[2:4]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[2:5]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[2:6]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:" The following two ranges delete nothing as they match empty list:
+:py3 del l[-1:2]
+:$put =string(l)
+:py3 del l[-2:2]
+:$put =string(l)
+:py3 del l[-3:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[-4:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[-5:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[-6:2]
+:$put =string(l)
+:"
+:" Slice assignment to a list
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[0:0]=['a']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[1:2]=['b']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[2:4]=['c']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[4:4]=['d']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[-1:2]=['e']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[-10:2]=['f']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[2:-10]=['g']
+:$put =string(l)
+:let l = []
+:py3 l=vim.bindeval('l')
+:py3 l[0:0]=['h']
+:$put =string(l)
+:"
+:" Locked variables
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:lockvar! l
+:py3 l[2]='i'
+:$put =string(l)
+:unlockvar! l
+:"
+:" Function calls
+:fun New(...)
+:   return ['NewStart']+a:000+['NewEnd']
+:endfun
+:fun DictNew(...) dict
+:   return ['DictNewStart']+a:000+['DictNewEnd', self]
+:endfun
+:let l=[function('New'), function('DictNew')]
+:py3 l=vim.bindeval('l')
+:py3 l.extend(list(l[0](1, 2, 3)))
+:$put =string(l)
+:py3 l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
+:$put =string(l)
+:py3 l+=[l[0].name]
+:$put =string(l)
+:try
+:   py3 l[1](1, 2, 3)
+:catch
+:   $put =v:exception[:13]
+:endtry
+:py3 f=l[0]
+:delfunction New
+:try
+:   py3 f(1, 2, 3)
+:catch
+:   $put =v:exception[:13]
+:endtry
+:if has('float')
+:   let l=[0.0]
+:   py3 l=vim.bindeval('l')
+:   py3 l.extend([0.0])
+:   $put =string(l)
+:else
+:   $put ='[0.0, 0.0]'
+:endif
+:let messages=[]
+:delfunction DictNew
+py3 <<EOF
+d=vim.bindeval('{}')
+m=vim.bindeval('messages')
+def em(expr, g=globals(), l=locals()):
+    try:
+        exec(expr, g, l)
+    except Exception as e:
+        m.extend([e.__class__.__name__])
+
+em('d["abc1"]')
+em('d["abc1"]="\\0"')
+em('d["abc1"]=vim')
+em('d[""]=1')
+em('d["a\\0b"]=1')
+em('d[b"a\\0b"]=1')
+
+em('d.pop("abc1")')
+em('d.popitem()')
+del em
+del m
+EOF
+:$put =messages
+:unlet messages
+:" locked and scope attributes
+:let d={} | let dl={} | lockvar dl
+:for s in split("d dl v: g:")
+:    let name=tr(s, ':', 's')
+:    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
+:    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';')
+:    $put =toput
+:endfor
+:silent! let d.abc2=1
+:silent! let dl.abc3=1
+:py3 d.locked=True
+:py3 dl.locked=False
+:silent! let d.def=1
+:silent! let dl.def=1
+:put ='d:'.string(d)
+:put ='dl:'.string(dl)
+:unlet d dl
+:
+:let l=[] | let ll=[] | lockvar ll
+:for s in split("l ll")
+:    let name=tr(s, ':', 's')
+:    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
+:    let toput=s.' : locked:'.py3eval(name.'.locked')
+:    $put =toput
+:endfor
+:silent! call extend(l, [0])
+:silent! call extend(ll, [0])
+:py3 l.locked=True
+:py3 ll.locked=False
+:silent! call extend(l, [1])
+:silent! call extend(ll, [1])
+:put ='l:'.string(l)
+:put ='ll:'.string(ll)
+:unlet l ll
+:"
+:" py3eval()
+:let l=py3eval('[0, 1, 2]')
+:$put =string(l)
+:let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
+:$put =sort(items(d))
+:if has('float')
+:   let f=py3eval('0.0')
+:   $put =string(f)
+:else
+:   $put ='0.0'
+:endif
+:" Invalid values:
+:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
+:   try
+:      let v=py3eval(e)
+:   catch
+:      let toput=e.":\t".v:exception[:13]
+:      $put =toput
+:   endtry
+:endfor
+:"
+:" threading
+:let l = [0]
+:py3 l=vim.bindeval('l')
+py3 <<EOF
+import threading
+import time
+
+class T(threading.Thread):
+    def __init__(self):
+        threading.Thread.__init__(self)
+        self.t = 0
+        self.running = True
+
+    def run(self):
+        while self.running:
+            self.t += 1
+            time.sleep(0.1)
+
+t = T()
+del T
+t.start()
+EOF
+:sleep 1
+:py3 t.running = False
+:py3 t.join()
+:py3 l[0] = t.t > 8  # check if the background thread is working
+:py3 del time
+:py3 del threading
+:$put =string(l)
+:"
+:" settrace
+:let l = []
+:py3 l=vim.bindeval('l')
+py3 <<EOF
+import sys
+
+def traceit(frame, event, arg):
+    global l
+    if event == "line":
+        l += [frame.f_lineno]
+    return traceit
+
+def trace_main():
+    for i in range(5):
+        pass
+EOF
+:py3 sys.settrace(traceit)
+:py3 trace_main()
+:py3 sys.settrace(None)
+:py3 del traceit
+:py3 del trace_main
+:$put =string(l)
+:"
+:" Vars
+:let g:foo = 'bac'
+:let w:abc3 = 'def'
+:let b:baz = 'bar'
+:let t:bar = 'jkl'
+:try
+:  throw "Abc"
+:catch
+:  put =py3eval('vim.vvars[''exception'']')
+:endtry
+:put =py3eval('vim.vars[''foo'']')
+:put =py3eval('vim.current.window.vars[''abc3'']')
+:put =py3eval('vim.current.buffer.vars[''baz'']')
+:put =py3eval('vim.current.tabpage.vars[''bar'']')
+:"
+:" Options
+:" paste:          boolean, global
+:" previewheight   number,  global
+:" operatorfunc:   string,  global
+:" number:         boolean, window-local
+:" numberwidth:    number,  window-local
+:" colorcolumn:    string,  window-local
+:" statusline:     string,  window-local/global
+:" autoindent:     boolean, buffer-local
+:" shiftwidth:     number,  buffer-local
+:" omnifunc:       string,  buffer-local
+:" preserveindent: boolean, buffer-local/global
+:" path:           string,  buffer-local/global
+:let g:bufs=[bufnr('%')]
+:new
+:let g:bufs+=[bufnr('%')]
+:vnew
+:let g:bufs+=[bufnr('%')]
+:wincmd j
+:vnew
+:let g:bufs+=[bufnr('%')]
+:wincmd l
+:fun RecVars(opt)
+:  let gval =string(eval('&g:'.a:opt))
+:  let wvals=join(map(range(1, 4),  'v:val.":".string(getwinvar(v:val, "&".a:opt))'))
+:  let bvals=join(map(copy(g:bufs), 'v:val.":".string(getbufvar(v:val, "&".a:opt))'))
+:  put ='  G: '.gval
+:  put ='  W: '.wvals
+:  put ='  B: '.wvals
+:endfun
+py3 << EOF
+def e(s, g=globals(), l=locals()):
+    try:
+        exec(s, g, l)
+    except Exception as e:
+        vim.command('return ' + repr(e.__class__.__name__))
+
+def ev(s, g=globals(), l=locals()):
+    try:
+        return eval(s, g, l)
+    except Exception as e:
+        vim.command('let exc=' + repr(e.__class__.__name__))
+        return 0
+EOF
+:fun E(s)
+:   python3 e(vim.eval('a:s'))
+:endfun
+:fun Ev(s)
+:   let r=py3eval('ev(vim.eval("a:s"))')
+:   if exists('exc')
+:       throw exc
+:   endif
+:   return r
+:endfun
+:py3 gopts1=vim.options
+:py3 wopts1=vim.windows[2].options
+:py3 wopts2=vim.windows[0].options
+:py3 wopts3=vim.windows[1].options
+:py3 bopts1=vim.buffers[vim.bindeval("g:bufs")[2]].options
+:py3 bopts2=vim.buffers[vim.bindeval("g:bufs")[1]].options
+:py3 bopts3=vim.buffers[vim.bindeval("g:bufs")[0]].options
+:set path=.,..,,
+:let lst=[]
+:let lst+=[['paste',          1,     0,     1,     2,      1,    1,      0    ]]
+:let lst+=[['previewheight',  5,     1,     6,     'a',    0,    1,      0    ]]
+:let lst+=[['operatorfunc',   'A',   'B',   'C',   2,      0,    1,      0    ]]
+:let lst+=[['number',         0,     1,     1,     0,      1,    0,      1    ]]
+:let lst+=[['numberwidth',    2,     3,     5,     -100,   0,    0,      1    ]]
+:let lst+=[['colorcolumn',    '+1',  '+2',  '+3',  'abc4',  0,    0,      1    ]]
+:let lst+=[['statusline',     '1',   '2',   '4',   0,      0,    1,      1    ]]
+:let lst+=[['autoindent',     0,     1,     1,     2,      1,    0,      2    ]]
+:let lst+=[['shiftwidth',     0,     2,     1,     3,      0,    0,      2    ]]
+:let lst+=[['omnifunc',       'A',   'B',   'C',   1,      0,    0,      2    ]]
+:let lst+=[['preserveindent', 0,     1,     1,     2,      1,    1,      2    ]]
+:let lst+=[['path',           '.,,', ',,',  '.',   0,      0,    1,      2    ]]
+:for       [oname,            oval1, oval2, oval3, invval, bool, global, local] in lst
+:   py3 oname=vim.eval('oname')
+:   py3 oval1=vim.bindeval('oval1')
+:   py3 oval2=vim.bindeval('oval2')
+:   py3 oval3=vim.bindeval('oval3')
+:   if invval is 0 || invval is 1
+:       py3 invval=bool(vim.bindeval('invval'))
+:   else
+:       py3 invval=vim.bindeval('invval')
+:   endif
+:   if bool
+:       py3 oval1=bool(oval1)
+:       py3 oval2=bool(oval2)
+:       py3 oval3=bool(oval3)
+:   endif
+:   put ='>>> '.oname
+:   for v in ['gopts1', 'wopts1', 'bopts1']
+:       try
+:           put ='  p/'.v.': '.Ev('repr('.v.'['''.oname.'''])')
+:       catch
+:           put ='  p/'.v.'! '.v:exception
+:       endtry
+:       let r=E(v.'['''.oname.''']=invval')
+:       if r isnot 0
+:           put ='  inv: '.string(invval).'! '.r
+:       endif
+:       for vv in (v is# 'gopts1' ? [v] : [v, v[:-2].'2', v[:-2].'3'])
+:           let val=substitute(vv, '^.opts', 'oval', '')
+:           let r=E(vv.'['''.oname.''']='.val)
+:           if r isnot 0
+:               put ='  '.vv.'! '.r
+:           endif
+:       endfor
+:   endfor
+:   call RecVars(oname)
+:   for v in ['wopts3', 'bopts3']
+:       let r=E('del '.v.'["'.oname.'"]')
+:       if r isnot 0
+:           put ='  del '.v.'! '.r
+:       endif
+:   endfor
+:   call RecVars(oname)
+:endfor
+:delfunction RecVars
+:delfunction E
+:delfunction Ev
+:py3 del ev
+:py3 del e
+:only
+:for buf in g:bufs[1:]
+:   execute 'bwipeout!' buf
+:endfor
+:py3 del gopts1
+:py3 del wopts1
+:py3 del wopts2
+:py3 del wopts3
+:py3 del bopts1
+:py3 del bopts2
+:py3 del bopts3
+:py3 del oval1
+:py3 del oval2
+:py3 del oval3
+:py3 del oname
+:py3 del invval
+:"
+:" Test buffer object
+:vnew
+:put ='First line'
+:put ='Second line'
+:put ='Third line'
+:1 delete _
+:py3 b=vim.current.buffer
+:wincmd w
+:mark a
+:augroup BUFS
+:   autocmd BufFilePost * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")'))
+:   autocmd BufFilePre * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")'))
+:augroup END
+py3 << EOF
+cb = vim.current.buffer
+# Tests BufferAppend and BufferItem
+cb.append(b[0])
+# Tests BufferSlice and BufferAssSlice
+cb.append('abc5') # Will be overwritten
+cb[-1:] = b[:-2]
+# Test BufferLength and BufferAssSlice
+cb.append('def') # Will not be overwritten
+cb[len(cb):] = b[:]
+# Test BufferAssItem and BufferMark
+cb.append('ghi') # Will be overwritten
+cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
+# Test BufferRepr
+cb.append(repr(cb) + repr(b))
+# Modify foreign buffer
+b.append('foo')
+b[0]='bar'
+b[0:0]=['baz']
+vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number)
+# Test assigning to name property
+import os
+old_name = cb.name
+cb.name = 'foo'
+cb.append(cb.name[-11:].replace(os.path.sep, '/'))
+b.name = 'bar'
+cb.append(b.name[-11:].replace(os.path.sep, '/'))
+cb.name = old_name
+cb.append(cb.name[-17:].replace(os.path.sep, '/'))
+del old_name
+# Test CheckBuffer
+for _b in vim.buffers:
+    if _b is not cb:
+        vim.command('bwipeout! ' + str(_b.number))
+del _b
+cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
+for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc6")'):
+    try:
+        exec(expr)
+    except vim.error:
+        pass
+    else:
+        # Usually a SEGV here
+        # Should not happen in any case
+        cb.append('No exception for ' + expr)
+vim.command('cd .')
+del b
+EOF
+:"
+:" Test vim.buffers object
+:set hidden
+:edit a
+:buffer #
+:edit b
+:buffer #
+:edit c
+:buffer #
+py3 << EOF
+# Check GCing iterator that was not fully exhausted
+i = iter(vim.buffers)
+cb.append('i:' + str(next(i)))
+# and also check creating more then one iterator at a time
+i2 = iter(vim.buffers)
+cb.append('i2:' + str(next(i2)))
+cb.append('i:' + str(next(i)))
+# The following should trigger GC and not cause any problems
+del i
+del i2
+i3 = iter(vim.buffers)
+cb.append('i3:' + str(next(i3)))
+del i3
+
+prevnum = 0
+for b in vim.buffers:
+    # Check buffer order
+    if prevnum >= b.number:
+        cb.append('!!! Buffer numbers not in strictly ascending order')
+    # Check indexing: vim.buffers[number].number == number
+    cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b))
+    prevnum = b.number
+del prevnum
+
+cb.append(str(len(vim.buffers)))
+
+bnums = list(map(lambda b: b.number, vim.buffers))[1:]
+
+# Test wiping out buffer with existing iterator
+i4 = iter(vim.buffers)
+cb.append('i4:' + str(next(i4)))
+vim.command('bwipeout! ' + str(bnums.pop(0)))
+try:
+    next(i4)
+except vim.error:
+    pass
+else:
+    cb.append('!!!! No vim.error')
+i4 = iter(vim.buffers)
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+cb.append('i4:' + str(next(i4)))
+try:
+    next(i4)
+except StopIteration:
+    cb.append('StopIteration')
+del i4
+del bnums
+EOF
+:"
+:" Test vim.{tabpage,window}list and vim.{tabpage,window} objects
+:tabnew 0
+:tabnew 1
+:vnew a.1
+:tabnew 2
+:vnew a.2
+:vnew b.2
+:vnew c.2
+py3 << EOF
+cb.append('Number of tabs: ' + str(len(vim.tabpages)))
+cb.append('Current tab pages:')
+
+def W(w):
+    if '(unknown)' in repr(w):
+        return '<window object (unknown)>'
+    else:
+        return repr(w)
+
+def Cursor(w, start=len(cb)):
+    if w.buffer is cb:
+        return repr((start - w.cursor[0], w.cursor[1]))
+    else:
+        return repr(w.cursor)
+
+for t in vim.tabpages:
+    cb.append('  ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window))
+    cb.append('  Windows:')
+    for w in t.windows:
+        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w))
+        # Other values depend on the size of the terminal, so they are checked partly:
+        for attr in ('height', 'row', 'width', 'col'):
+            try:
+                aval = getattr(w, attr)
+                if type(aval) is not int:
+                    raise TypeError
+                if aval < 0:
+                    raise ValueError
+            except Exception as e:
+                cb.append('!!!!!! Error while getting attribute ' + attr + ': ' + e.__class__.__name__)
+        del aval
+        del attr
+        w.cursor = (len(w.buffer), 0)
+del W
+del Cursor
+cb.append('Number of windows in current tab page: ' + str(len(vim.windows)))
+if list(vim.windows) != list(vim.current.tabpage.windows):
+    cb.append('!!!!!! Windows differ')
+EOF
+:"
+:" Test vim.current
+py3 << EOF
+def H(o):
+    return repr(o)
+cb.append('Current tab page: ' + repr(vim.current.tabpage))
+cb.append('Current window: ' + repr(vim.current.window) + ': ' + H(vim.current.window) + ' is ' + H(vim.current.tabpage.window))
+cb.append('Current buffer: ' + repr(vim.current.buffer) + ': ' + H(vim.current.buffer) + ' is ' + H(vim.current.window.buffer)+ ' is ' + H(vim.current.tabpage.window.buffer))
+del H
+# Assigning: fails
+try:
+    vim.current.window = vim.tabpages[0].window
+except ValueError:
+    cb.append('ValueError at assigning foreign tab window')
+
+for attr in ('window', 'tabpage', 'buffer'):
+    try:
+        setattr(vim.current, attr, None)
+    except TypeError:
+        cb.append('Type error at assigning None to vim.current.' + attr)
+del attr
+
+# Assigning: success
+vim.current.tabpage = vim.tabpages[-2]
+vim.current.buffer = cb
+vim.current.window = vim.windows[0]
+vim.current.window.cursor = (len(vim.current.buffer), 0)
+cb.append('Current tab page: ' + repr(vim.current.tabpage))
+cb.append('Current window: ' + repr(vim.current.window))
+cb.append('Current buffer: ' + repr(vim.current.buffer))
+cb.append('Current line: ' + repr(vim.current.line))
+ws = list(vim.windows)
+ts = list(vim.tabpages)
+for b in vim.buffers:
+    if b is not cb:
+        vim.command('bwipeout! ' + str(b.number))
+del b
+cb.append('w.valid: ' + repr([w.valid for w in ws]))
+cb.append('t.valid: ' + repr([t.valid for t in ts]))
+del w
+del t
+del ts
+del ws
+EOF
+:tabonly!
+:only!
+:"
+:" Test types
+py3 << EOF
+for expr, attr in (
+    ('vim.vars',                         'Dictionary'),
+    ('vim.options',                      'Options'),
+    ('vim.bindeval("{}")',               'Dictionary'),
+    ('vim.bindeval("[]")',               'List'),
+    ('vim.bindeval("function(\'tr\')")', 'Function'),
+    ('vim.current.buffer',               'Buffer'),
+    ('vim.current.range',                'Range'),
+    ('vim.current.window',               'Window'),
+    ('vim.current.tabpage',              'TabPage'),
+):
+    cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
+del expr
+del attr
+EOF
+:"
+:" Test __dir__() method
+py3 << EOF
+for name, o in (
+        ('current',    vim.current),
+        ('buffer',     vim.current.buffer),
+        ('window',     vim.current.window),
+        ('tabpage',    vim.current.tabpage),
+        ('range',      vim.current.range),
+        ('dictionary', vim.bindeval('{}')),
+        ('list',       vim.bindeval('[]')),
+        ('function',   vim.bindeval('function("tr")')),
+        ('output',     sys.stdout),
+    ):
+    cb.append(name + ':' + ','.join(dir(o)))
+del name
+del o
+EOF
+:"
+:" Test vim.*.__new__
+:$put =string(py3eval('vim.Dictionary({})'))
+:$put =string(py3eval('vim.Dictionary(a=1)'))
+:$put =string(py3eval('vim.Dictionary(((''a'', 1),))'))
+:$put =string(py3eval('vim.List()'))
+:$put =string(py3eval('vim.List(iter(''abc7''))'))
+:$put =string(py3eval('vim.Function(''tr'')'))
+:"
+:" Test stdout/stderr
+:redir => messages
+:py3 sys.stdout.write('abc8') ; sys.stdout.write('def')
+:py3 sys.stderr.write('abc9') ; sys.stderr.write('def')
+:py3 sys.stdout.writelines(iter('abcA'))
+:py3 sys.stderr.writelines(iter('abcB'))
+:redir END
+:$put =string(substitute(messages, '\d\+', '', 'g'))
+:" Test subclassing
+:fun Put(...)
+:   $put =string(a:000)
+:   return a:000
+:endfun
+py3 << EOF
+class DupDict(vim.Dictionary):
+    def __setitem__(self, key, value):
+        super(DupDict, self).__setitem__(key, value)
+        super(DupDict, self).__setitem__('dup_' + key, value)
+dd = DupDict()
+dd['a'] = 'b'
+
+class DupList(vim.List):
+    def __getitem__(self, idx):
+        return [super(DupList, self).__getitem__(idx)] * 2
+
+dl = DupList()
+dl2 = DupList(iter('abcC'))
+dl.extend(dl2[0])
+
+class DupFun(vim.Function):
+    def __call__(self, arg):
+        return super(DupFun, self).__call__(arg, arg)
+
+df = DupFun('Put')
+EOF
+:$put =string(sort(keys(py3eval('dd'))))
+:$put =string(py3eval('dl'))
+:$put =string(py3eval('dl2'))
+:$put =string(py3eval('df(2)'))
+:$put =string(py3eval('dl') is# py3eval('dl'))
+:$put =string(py3eval('dd') is# py3eval('dd'))
+:$put =string(py3eval('df'))
+:delfunction Put
+py3 << EOF
+del DupDict
+del DupList
+del DupFun
+del dd
+del dl
+del dl2
+del df
+EOF
+:"
+:" Test chdir
+py3 << EOF
+import os
+fnamemodify = vim.Function('fnamemodify')
+cb.append(str(fnamemodify('.', ':p:h:t')))
+cb.append(vim.eval('@%'))
+os.chdir('..')
+cb.append(str(fnamemodify('.', ':p:h:t')))
+cb.append(vim.eval('@%').replace(os.path.sep, '/'))
+os.chdir('testdir')
+cb.append(str(fnamemodify('.', ':p:h:t')))
+cb.append(vim.eval('@%'))
+del fnamemodify
+EOF
+:"
+:" Test errors
+:fun F() dict
+:endfun
+:fun D()
+:endfun
+py3 << EOF
+import re
+
+py33_type_error_pattern = re.compile('^__call__\(\) takes (\d+) positional argument but (\d+) were given$')
+
+def ee(expr, g=globals(), l=locals()):
+    try:
+        try:
+            exec(expr, g, l)
+        except Exception as e:
+            if sys.version_info >= (3, 3) and e.__class__ is AttributeError and str(e).find('has no attribute')>=0 and not str(e).startswith("'vim."):
+                cb.append(expr + ':' + repr((e.__class__, AttributeError(str(e)[str(e).rfind(" '") + 2:-1]))))
+            elif sys.version_info >= (3, 3) and e.__class__ is ImportError and str(e).find('No module named \'') >= 0:
+                cb.append(expr + ':' + repr((e.__class__, ImportError(str(e).replace("'", '')))))
+            elif sys.version_info >= (3, 3) and e.__class__ is TypeError:
+                m = py33_type_error_pattern.search(str(e))
+                if m:
+                    msg = '__call__() takes exactly {0} positional argument ({1} given)'.format(m.group(1), m.group(2))
+                    cb.append(expr + ':' + repr((e.__class__, TypeError(msg))))
+                else:
+                    cb.append(expr + ':' + repr((e.__class__, e)))
+            else:
+                cb.append(expr + ':' + repr((e.__class__, e)))
+        else:
+            cb.append(expr + ':NOT FAILED')
+    except Exception as e:
+        cb.append(expr + '::' + repr((e.__class__, e)))
+
+d = vim.Dictionary()
+ned = vim.Dictionary(foo='bar', baz='abcD')
+dl = vim.Dictionary(a=1)
+dl.locked = True
+l = vim.List()
+ll = vim.List('abcE')
+ll.locked = True
+f = vim.Function('string')
+fd = vim.Function('F')
+fdel = vim.Function('D')
+vim.command('delfunction D')
+
+def subexpr_test(expr, name, subexprs):
+    cb.append('>>> Testing %s using %s' % (name, expr))
+    for subexpr in subexprs:
+        ee(expr % subexpr)
+    cb.append('<<< Finished')
+
+def stringtochars_test(expr):
+    return subexpr_test(expr, 'StringToChars', (
+        '1',       # Fail type checks
+        'b"\\0"',  # Fail PyString_AsStringAndSize(object, , NULL) check
+        '"\\0"',   # Fail PyString_AsStringAndSize(bytes, , NULL) check
+    ))
+
+class Mapping(object):
+    def __init__(self, d):
+        self.d = d
+
+    def __getitem__(self, key):
+        return self.d[key]
+
+    def keys(self):
+        return self.d.keys()
+
+    def items(self):
+        return self.d.items()
+
+def convertfrompyobject_test(expr, recurse=True):
+    # pydict_to_tv
+    stringtochars_test(expr % '{%s : 1}')
+    if recurse:
+        convertfrompyobject_test(expr % '{"abcF" : %s}', False)
+    # pymap_to_tv
+    stringtochars_test(expr % 'Mapping({%s : 1})')
+    if recurse:
+        convertfrompyobject_test(expr % 'Mapping({"abcG" : %s})', False)
+    # pyseq_to_tv
+    iter_test(expr)
+    return subexpr_test(expr, 'ConvertFromPyObject', (
+        'None',                 # Not conversible
+        '{b"": 1}',             # Empty key not allowed
+        '{"": 1}',              # Same, but with unicode object
+        'FailingMapping()',     #
+        'FailingMappingKey()',  #
+        'FailingNumber()',      #
+    ))
+
+def convertfrompymapping_test(expr):
+    convertfrompyobject_test(expr)
+    return subexpr_test(expr, 'ConvertFromPyMapping', (
+        '[]',
+    ))
+
+def iter_test(expr):
+    return subexpr_test(expr, '*Iter*', (
+        'FailingIter()',
+        'FailingIterNext()',
+    ))
+
+def number_test(expr, natural=False, unsigned=False):
+    if natural:
+        unsigned = True
+    return subexpr_test(expr, 'NumberToLong', (
+        '[]',
+        'None',
+    ) + (('-1',) if unsigned else ())
+    + (('0',) if natural else ()))
+
+class FailingTrue(object):
+    def __bool__(self):
+        raise NotImplementedError('bool')
+
+class FailingIter(object):
+    def __iter__(self):
+        raise NotImplementedError('iter')
+
+class FailingIterNext(object):
+    def __iter__(self):
+        return self
+
+    def __next__(self):
+        raise NotImplementedError('next')
+
+class FailingMappingKey(object):
+    def __getitem__(self, item):
+        raise NotImplementedError('getitem:mappingkey')
+
+    def keys(self):
+        return list("abcH")
+
+class FailingMapping(object):
+    def __getitem__(self):
+        raise NotImplementedError('getitem:mapping')
+
+    def keys(self):
+        raise NotImplementedError('keys')
+
+class FailingList(list):
+    def __getitem__(self, idx):
+        if i == 2:
+            raise NotImplementedError('getitem:list')
+        else:
+            return super(FailingList, self).__getitem__(idx)
+
+class NoArgsCall(object):
+    def __call__(self):
+        pass
+
+class FailingCall(object):
+    def __call__(self, path):
+        raise NotImplementedError('call')
+
+class FailingNumber(object):
+    def __int__(self):
+        raise NotImplementedError('int')
+
+cb.append("> Output")
+cb.append(">> OutputSetattr")
+ee('del sys.stdout.softspace')
+number_test('sys.stdout.softspace = %s', unsigned=True)
+number_test('sys.stderr.softspace = %s', unsigned=True)
+ee('sys.stdout.attr = None')
+cb.append(">> OutputWrite")
+ee('sys.stdout.write(None)')
+cb.append(">> OutputWriteLines")
+ee('sys.stdout.writelines(None)')
+ee('sys.stdout.writelines([1])')
+iter_test('sys.stdout.writelines(%s)')
+cb.append("> VimCommand")
+stringtochars_test('vim.command(%s)')
+ee('vim.command("", 2)')
+#! Not checked: vim->python exceptions translating: checked later
+cb.append("> VimToPython")
+#! Not checked: everything: needs errors in internal python functions
+cb.append("> VimEval")
+stringtochars_test('vim.eval(%s)')
+ee('vim.eval("", FailingTrue())')
+#! Not checked: everything: needs errors in internal python functions
+cb.append("> VimEvalPy")
+stringtochars_test('vim.bindeval(%s)')
+ee('vim.eval("", 2)')
+#! Not checked: vim->python exceptions translating: checked later
+cb.append("> VimStrwidth")
+stringtochars_test('vim.strwidth(%s)')
+cb.append("> VimForeachRTP")
+ee('vim.foreach_rtp(None)')
+ee('vim.foreach_rtp(NoArgsCall())')
+ee('vim.foreach_rtp(FailingCall())')
+ee('vim.foreach_rtp(int, 2)')
+cb.append('> import')
+old_rtp = vim.options['rtp']
+vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
+ee('import xxx_no_such_module_xxx')
+ee('import failing_import')
+ee('import failing')
+vim.options['rtp'] = old_rtp
+del old_rtp
+cb.append("> Dictionary")
+cb.append(">> DictionaryConstructor")
+ee('vim.Dictionary("abcI")')
+##! Not checked: py_dict_alloc failure
+cb.append(">> DictionarySetattr")
+ee('del d.locked')
+ee('d.locked = FailingTrue()')
+ee('vim.vvars.locked = False')
+ee('d.scope = True')
+ee('d.xxx = True')
+cb.append(">> _DictionaryItem")
+ee('d.get("a", 2, 3)')
+stringtochars_test('d.get(%s)')
+ee('d.pop("a")')
+ee('dl.pop("a")')
+cb.append(">> DictionaryIterNext")
+ee('for i in ned: ned["a"] = 1')
+del i
+cb.append(">> DictionaryAssItem")
+ee('dl["b"] = 1')
+stringtochars_test('d[%s] = 1')
+convertfrompyobject_test('d["a"] = %s')
+cb.append(">> DictionaryUpdate")
+cb.append(">>> kwargs")
+cb.append(">>> iter")
+ee('d.update(FailingMapping())')
+ee('d.update([FailingIterNext()])')
+iter_test('d.update(%s)')
+convertfrompyobject_test('d.update(%s)')
+stringtochars_test('d.update(((%s, 0),))')
+convertfrompyobject_test('d.update((("a", %s),))')
+cb.append(">> DictionaryPopItem")
+ee('d.popitem(1, 2)')
+cb.append(">> DictionaryHasKey")
+ee('d.has_key()')
+cb.append("> List")
+cb.append(">> ListConstructor")
+ee('vim.List(1, 2)')
+ee('vim.List(a=1)')
+iter_test('vim.List(%s)')
+convertfrompyobject_test('vim.List([%s])')
+cb.append(">> ListItem")
+ee('l[1000]')
+cb.append(">> ListAssItem")
+ee('ll[1] = 2')
+ee('l[1000] = 3')
+cb.append(">> ListAssSlice")
+ee('ll[1:100] = "abcJ"')
+iter_test('l[:] = %s')
+convertfrompyobject_test('l[:] = [%s]')
+cb.append(">> ListConcatInPlace")
+iter_test('l.extend(%s)')
+convertfrompyobject_test('l.extend([%s])')
+cb.append(">> ListSetattr")
+ee('del l.locked')
+ee('l.locked = FailingTrue()')
+ee('l.xxx = True')
+cb.append("> Function")
+cb.append(">> FunctionConstructor")
+ee('vim.Function("123")')
+ee('vim.Function("xxx_non_existent_function_xxx")')
+ee('vim.Function("xxx#non#existent#function#xxx")')
+cb.append(">> FunctionCall")
+convertfrompyobject_test('f(%s)')
+convertfrompymapping_test('fd(self=%s)')
+cb.append("> TabPage")
+cb.append(">> TabPageAttr")
+ee('vim.current.tabpage.xxx')
+cb.append("> TabList")
+cb.append(">> TabListItem")
+ee('vim.tabpages[1000]')
+cb.append("> Window")
+cb.append(">> WindowAttr")
+ee('vim.current.window.xxx')
+cb.append(">> WindowSetattr")
+ee('vim.current.window.buffer = 0')
+ee('vim.current.window.cursor = (100000000, 100000000)')
+ee('vim.current.window.cursor = True')
+number_test('vim.current.window.height = %s', unsigned=True)
+number_test('vim.current.window.width = %s', unsigned=True)
+ee('vim.current.window.xxxxxx = True')
+cb.append("> WinList")
+cb.append(">> WinListItem")
+ee('vim.windows[1000]')
+cb.append("> Buffer")
+cb.append(">> StringToLine (indirect)")
+ee('vim.current.buffer[0] = "\\na"')
+ee('vim.current.buffer[0] = b"\\na"')
+cb.append(">> SetBufferLine (indirect)")
+ee('vim.current.buffer[0] = True')
+cb.append(">> SetBufferLineList (indirect)")
+ee('vim.current.buffer[:] = True')
+ee('vim.current.buffer[:] = ["\\na", "bc"]')
+cb.append(">> InsertBufferLines (indirect)")
+ee('vim.current.buffer.append(None)')
+ee('vim.current.buffer.append(["\\na", "bc"])')
+ee('vim.current.buffer.append("\\nbc")')
+cb.append(">> RBItem")
+ee('vim.current.buffer[100000000]')
+cb.append(">> RBAsItem")
+ee('vim.current.buffer[100000000] = ""')
+cb.append(">> BufferAttr")
+ee('vim.current.buffer.xxx')
+cb.append(">> BufferSetattr")
+ee('vim.current.buffer.name = True')
+ee('vim.current.buffer.xxx = True')
+cb.append(">> BufferMark")
+ee('vim.current.buffer.mark(0)')
+ee('vim.current.buffer.mark("abcM")')
+ee('vim.current.buffer.mark("!")')
+cb.append(">> BufferRange")
+ee('vim.current.buffer.range(1, 2, 3)')
+cb.append("> BufMap")
+cb.append(">> BufMapItem")
+ee('vim.buffers[100000000]')
+number_test('vim.buffers[%s]', natural=True)
+cb.append("> Current")
+cb.append(">> CurrentGetattr")
+ee('vim.current.xxx')
+cb.append(">> CurrentSetattr")
+ee('vim.current.line = True')
+ee('vim.current.buffer = True')
+ee('vim.current.window = True')
+ee('vim.current.tabpage = True')
+ee('vim.current.xxx = True')
+del d
+del ned
+del dl
+del l
+del ll
+del f
+del fd
+del fdel
+del subexpr_test
+del stringtochars_test
+del Mapping
+del convertfrompyobject_test
+del convertfrompymapping_test
+del iter_test
+del number_test
+del FailingTrue
+del FailingIter
+del FailingIterNext
+del FailingMapping
+del FailingMappingKey
+del FailingList
+del NoArgsCall
+del FailingCall
+del FailingNumber
+EOF
+:delfunction F
+:"
+:" Test import
+py3 << EOF
+sys.path.insert(0, os.path.join(os.getcwd(), 'python_before'))
+sys.path.append(os.path.join(os.getcwd(), 'python_after'))
+vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
+l = []
+def callback(path):
+    l.append(os.path.relpath(path))
+vim.foreach_rtp(callback)
+cb.append(repr(l))
+del l
+def callback(path):
+    return os.path.relpath(path)
+cb.append(repr(vim.foreach_rtp(callback)))
+del callback
+from module import dir as d
+from modulex import ddir
+cb.append(d + ',' + ddir)
+import before
+cb.append(before.dir)
+import after
+cb.append(after.dir)
+import topmodule as tm
+import topmodule.submodule as tms
+import topmodule.submodule.subsubmodule.subsubsubmodule as tmsss
+cb.append(tm.__file__.replace(os.path.sep, '/')[-len('modulex/topmodule/__init__.py'):])
+cb.append(tms.__file__.replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/__init__.py'):])
+cb.append(tmsss.__file__.replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/subsubmodule/subsubsubmodule.py'):])
+del before
+del after
+del d
+del ddir
+del tm
+del tms
+del tmsss
+EOF
+:"
+:" Test exceptions
+:fun Exe(e)
+:   execute a:e
+:endfun
+py3 << EOF
+Exe = vim.bindeval('function("Exe")')
+ee('vim.command("throw \'abcN\'")')
+ee('Exe("throw \'def\'")')
+ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")')
+ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")')
+ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")')
+ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")')
+del Exe
+EOF
+:delfunction Exe
+:"
+:" Cleanup
+py3 << EOF
+del cb
+del ee
+del sys
+del os
+del vim
+EOF
+:endfun
+:"
+:fun RunTest()
+:let checkrefs = !empty($PYTHONDUMPREFS)
+:let start = getline(1, '$')
+:for i in range(checkrefs ? 10 : 1)
+:   if i != 0
+:       %d _
+:       call setline(1, start)
+:   endif
+:   call Test()
+:   if i == 0
+:       let result = getline(1, '$')
+:   endif
+:endfor
+:if checkrefs
+:   %d _
+:   call setline(1, result)
+:endif
+:endfun
+:"
+:call RunTest()
+:delfunction RunTest
+:delfunction Test
+:call garbagecollect(1)
+:"
+:/^start:/,$wq! test.out
+:" vim: et ts=4 isk-=\:
+:call getchar()
+ENDTEST
+
+start:
diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok
new file mode 100644 (file)
index 0000000..9a2d686
--- /dev/null
@@ -0,0 +1,1186 @@
+start:
+[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
+[1, 2, function('strlen'), {'a': 1}]
+Vim(put):E684:
+[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
+[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
+1
+[b'-1', b'0', b'1', b'b', b'f']
+[-1, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >, b'asd']
+[(b'-1', <vim.dictionary object at >), (b'0', -1), (b'1', b'asd'), (b'b', <vim.list object at >), (b'f', <vim.Function '1'>)]
+'-1' : {'a': 1}
+'0' : -1
+'1' : 'asd'
+'b' : [1, 2, function('strlen')]
+'f' : function('1')
+[0, function('strlen')]
+[3]
+[1, 2, function('strlen')]
+[1, 2, function('strlen')]
+1
+'asd'
+2
+True
+False
+True
+False
+[b'0']
+{'0': -1}
+(b'0', -1)
+None
+[]
+[0, 1, 2, 3]
+[0, 1, 2, 3]
+[0, 1, 3]
+[0, 1]
+[0, 1]
+[0, 1]
+[0, 1, 2, 3]
+[0, 1, 2, 3]
+[0, 2, 3]
+[2, 3]
+[2, 3]
+[2, 3]
+['a', 0, 1, 2, 3]
+[0, 'b', 2, 3]
+[0, 1, 'c']
+[0, 1, 2, 3, 'd']
+[0, 1, 2, 'e', 3]
+['f', 2, 3]
+[0, 1, 'g', 2, 3]
+['h']
+[0, 1, 2, 3]
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
+Vim(py3):E725:
+Vim(py3):E117:
+[0.0, 0.0]
+KeyError
+TypeError
+TypeError
+ValueError
+TypeError
+TypeError
+KeyError
+KeyError
+d : locked:0;scope:0
+dl : locked:1;scope:0
+v: : locked:2;scope:1
+g: : locked:0;scope:2
+d:{'abc2': 1}
+dl:{'def': 1}
+l : locked:0
+ll : locked:1
+l:[0]
+ll:[1]
+[0, 1, 2]
+['a', 'b']
+['c', 1]
+['d', ['e']]
+0.0
+"\0":  Vim(let):E859:
+{"\0": 1}:     Vim(let):E859:
+undefined_name:        Vim(let):Trace
+vim:   Vim(let):E859:
+[1]
+[1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1]
+Abc
+bac
+def
+bar
+jkl
+>>> paste
+  p/gopts1: False
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 2! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 1
+  W: 1:1 2:1 3:1 4:1
+  B: 1:1 2:1 3:1 4:1
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 1
+  W: 1:1 2:1 3:1 4:1
+  B: 1:1 2:1 3:1 4:1
+>>> previewheight
+  p/gopts1: 12
+  inv: 'a'! TypeError
+  p/wopts1! KeyError
+  inv: 'a'! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 'a'! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 5
+  W: 1:5 2:5 3:5 4:5
+  B: 1:5 2:5 3:5 4:5
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 5
+  W: 1:5 2:5 3:5 4:5
+  B: 1:5 2:5 3:5 4:5
+>>> operatorfunc
+  p/gopts1: b''
+  inv: 2! TypeError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 2! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 'A'
+  W: 1:'A' 2:'A' 3:'A' 4:'A'
+  B: 1:'A' 2:'A' 3:'A' 4:'A'
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 'A'
+  W: 1:'A' 2:'A' 3:'A' 4:'A'
+  B: 1:'A' 2:'A' 3:'A' 4:'A'
+>>> number
+  p/gopts1! KeyError
+  inv: 0! KeyError
+  gopts1! KeyError
+  p/wopts1: False
+  p/bopts1! KeyError
+  inv: 0! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 0
+  W: 1:1 2:1 3:0 4:0
+  B: 1:1 2:1 3:0 4:0
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: 0
+  W: 1:1 2:1 3:0 4:0
+  B: 1:1 2:1 3:0 4:0
+>>> numberwidth
+  p/gopts1! KeyError
+  inv: -100! KeyError
+  gopts1! KeyError
+  p/wopts1: 8
+  inv: -100! error
+  p/bopts1! KeyError
+  inv: -100! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 8
+  W: 1:3 2:5 3:2 4:8
+  B: 1:3 2:5 3:2 4:8
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: 8
+  W: 1:3 2:5 3:2 4:8
+  B: 1:3 2:5 3:2 4:8
+>>> colorcolumn
+  p/gopts1! KeyError
+  inv: 'abc4'! KeyError
+  gopts1! KeyError
+  p/wopts1: b''
+  inv: 'abc4'! error
+  p/bopts1! KeyError
+  inv: 'abc4'! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: ''
+  W: 1:'+2' 2:'+3' 3:'+1' 4:''
+  B: 1:'+2' 2:'+3' 3:'+1' 4:''
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: ''
+  W: 1:'+2' 2:'+3' 3:'+1' 4:''
+  B: 1:'+2' 2:'+3' 3:'+1' 4:''
+>>> statusline
+  p/gopts1: b''
+  inv: 0! TypeError
+  p/wopts1: None
+  inv: 0! TypeError
+  p/bopts1! KeyError
+  inv: 0! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: '1'
+  W: 1:'2' 2:'4' 3:'1' 4:'1'
+  B: 1:'2' 2:'4' 3:'1' 4:'1'
+  del bopts3! KeyError
+  G: '1'
+  W: 1:'2' 2:'1' 3:'1' 4:'1'
+  B: 1:'2' 2:'1' 3:'1' 4:'1'
+>>> autoindent
+  p/gopts1! KeyError
+  inv: 2! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: False
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+>>> shiftwidth
+  p/gopts1! KeyError
+  inv: 3! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 3! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: 8
+  G: 8
+  W: 1:0 2:2 3:8 4:1
+  B: 1:0 2:2 3:8 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 8
+  W: 1:0 2:2 3:8 4:1
+  B: 1:0 2:2 3:8 4:1
+>>> omnifunc
+  p/gopts1! KeyError
+  inv: 1! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 1! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: b''
+  inv: 1! TypeError
+  G: ''
+  W: 1:'A' 2:'B' 3:'' 4:'C'
+  B: 1:'A' 2:'B' 3:'' 4:'C'
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: ''
+  W: 1:'A' 2:'B' 3:'' 4:'C'
+  B: 1:'A' 2:'B' 3:'' 4:'C'
+>>> preserveindent
+  p/gopts1! KeyError
+  inv: 2! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: False
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+>>> path
+  p/gopts1: b'.,..,,'
+  inv: 0! TypeError
+  p/wopts1! KeyError
+  inv: 0! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: None
+  inv: 0! TypeError
+  G: '.,,'
+  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+  del wopts3! KeyError
+  G: '.,,'
+  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+First line
+First line
+def
+First line
+Second line
+Third line
+(7, 2)
+<buffer test87.in><buffer >
+baz
+bar
+Second line
+Third line
+foo
+1:BufFilePre:1
+1:BufFilePost:1
+testdir/foo
+5:BufFilePre:5
+5:BufFilePost:5
+testdir/bar
+1:BufFilePre:1
+1:BufFilePost:1
+testdir/test87.in
+valid: b:False, cb:True
+i:<buffer test87.in>
+i2:<buffer test87.in>
+i:<buffer a>
+i3:<buffer test87.in>
+1:<buffer test87.in>=<buffer test87.in>
+8:<buffer a>=<buffer a>
+9:<buffer b>=<buffer b>
+10:<buffer c>=<buffer c>
+4
+i4:<buffer test87.in>
+i4:<buffer test87.in>
+StopIteration
+Number of tabs: 4
+Current tab pages:
+  <tabpage 0>(1): 1 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (37, 0)
+  <tabpage 1>(2): 1 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
+  <tabpage 2>(3): 2 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
+    <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
+  <tabpage 3>(4): 4 windows, current is <window 0>
+  Windows:
+    <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
+    <window 1>(2): displays buffer <buffer b.2>; cursor is at (1, 0)
+    <window 2>(3): displays buffer <buffer a.2>; cursor is at (1, 0)
+    <window 3>(4): displays buffer <buffer 2>; cursor is at (1, 0)
+Number of windows in current tab page: 4
+Current tab page: <tabpage 3>
+Current window: <window 0>: <window 0> is <window 0>
+Current buffer: <buffer c.2>: <buffer c.2> is <buffer c.2> is <buffer c.2>
+ValueError at assigning foreign tab window
+Type error at assigning None to vim.current.window
+Type error at assigning None to vim.current.tabpage
+Type error at assigning None to vim.current.buffer
+Current tab page: <tabpage 2>
+Current window: <window 0>
+Current buffer: <buffer test87.in>
+Current line: 'Type error at assigning None to vim.current.buffer'
+w.valid: [True, False]
+t.valid: [True, False, True, False]
+vim.vars:Dictionary:True
+vim.options:Options:True
+vim.bindeval("{}"):Dictionary:True
+vim.bindeval("[]"):List:True
+vim.bindeval("function('tr')"):Function:True
+vim.current.buffer:Buffer:True
+vim.current.range:Range:True
+vim.current.window:Window:True
+vim.current.tabpage:TabPage:True
+current:__dir__,buffer,line,range,tabpage,window
+buffer:__dir__,append,mark,name,number,options,range,valid,vars
+window:__dir__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars
+tabpage:__dir__,number,valid,vars,window,windows
+range:__dir__,append,end,start
+dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
+list:__dir__,extend,locked
+function:__dir__,softspace
+output:__dir__,flush,softspace,write,writelines
+{}
+{'a': 1}
+{'a': 1}
+[]
+['a', 'b', 'c', '7']
+function('tr')
+'
+abcdef
+line  :
+abcdef
+abcA
+line  :
+abcB'
+['a', 'dup_a']
+['a', 'a']
+['a', 'b', 'c', 'C']
+[2, 2]
+[2, 2]
+1
+1
+function('Put')
+b'testdir'
+test87.in
+b'src'
+testdir/test87.in
+b'testdir'
+test87.in
+> Output
+>> OutputSetattr
+del sys.stdout.softspace:(<class 'AttributeError'>, AttributeError("can't delete OutputObject attributes",))
+>>> Testing NumberToLong using sys.stdout.softspace = %s
+sys.stdout.softspace = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+sys.stdout.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+sys.stdout.softspace = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+<<< Finished
+>>> Testing NumberToLong using sys.stderr.softspace = %s
+sys.stderr.softspace = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+sys.stderr.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+sys.stderr.softspace = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+<<< Finished
+sys.stdout.attr = None:(<class 'AttributeError'>, AttributeError('invalid attribute: attr',))
+>> OutputWrite
+sys.stdout.write(None):(<class 'TypeError'>, TypeError("Can't convert 'NoneType' object to str implicitly",))
+>> OutputWriteLines
+sys.stdout.writelines(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
+sys.stdout.writelines([1]):(<class 'TypeError'>, TypeError("Can't convert 'int' object to str implicitly",))
+>>> Testing *Iter* using sys.stdout.writelines(%s)
+sys.stdout.writelines(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+sys.stdout.writelines(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+> VimCommand
+>>> Testing StringToChars using vim.command(%s)
+vim.command(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.command(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.command("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+vim.command("", 2):(<class 'TypeError'>, TypeError('command() takes exactly one argument (2 given)',))
+> VimToPython
+> VimEval
+>>> Testing StringToChars using vim.eval(%s)
+vim.eval(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.eval(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.eval("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+vim.eval("", FailingTrue()):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
+> VimEvalPy
+>>> Testing StringToChars using vim.bindeval(%s)
+vim.bindeval(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.bindeval(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.bindeval("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+vim.eval("", 2):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
+> VimStrwidth
+>>> Testing StringToChars using vim.strwidth(%s)
+vim.strwidth(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.strwidth(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.strwidth("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+> VimForeachRTP
+vim.foreach_rtp(None):(<class 'TypeError'>, TypeError("'NoneType' object is not callable",))
+vim.foreach_rtp(NoArgsCall()):(<class 'TypeError'>, TypeError('__call__() takes exactly 1 positional argument (2 given)',))
+vim.foreach_rtp(FailingCall()):(<class 'NotImplementedError'>, NotImplementedError('call',))
+vim.foreach_rtp(int, 2):(<class 'TypeError'>, TypeError('foreach_rtp() takes exactly one argument (2 given)',))
+> import
+import xxx_no_such_module_xxx:(<class 'ImportError'>, ImportError('No module named xxx_no_such_module_xxx',))
+import failing_import:(<class 'ImportError'>, ImportError('No module named failing_import',))
+import failing:(<class 'NotImplementedError'>, NotImplementedError())
+> Dictionary
+>> DictionaryConstructor
+vim.Dictionary("abcI"):(<class 'ValueError'>, ValueError('expected sequence element of size 2, but got sequence of size 1',))
+>> DictionarySetattr
+del d.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.Dictionary attributes',))
+d.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError('bool',))
+vim.vvars.locked = False:(<class 'TypeError'>, TypeError('cannot modify fixed dictionary',))
+d.scope = True:(<class 'AttributeError'>, AttributeError('cannot set attribute scope',))
+d.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set attribute xxx',))
+>> _DictionaryItem
+d.get("a", 2, 3):(<class 'TypeError'>, TypeError('function takes at most 2 arguments (3 given)',))
+>>> Testing StringToChars using d.get(%s)
+d.get(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.get(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.get("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+d.pop("a"):(<class 'KeyError'>, KeyError('a',))
+dl.pop("a"):(<class 'vim.error'>, error('dictionary is locked',))
+>> DictionaryIterNext
+for i in ned: ned["a"] = 1:(<class 'RuntimeError'>, RuntimeError('hashtab changed during iteration',))
+>> DictionaryAssItem
+dl["b"] = 1:(<class 'vim.error'>, error('dictionary is locked',))
+>>> Testing StringToChars using d[%s] = 1
+d[1] = 1:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d[b"\0"] = 1:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["\0"] = 1:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = {%s : 1}
+d["a"] = {1 : 1}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = {b"\0" : 1}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = {"\0" : 1}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = {"abcF" : {%s : 1}}
+d["a"] = {"abcF" : {1 : 1}}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = {"abcF" : {b"\0" : 1}}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = {"abcF" : {"\0" : 1}}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = {"abcF" : Mapping({%s : 1})}
+d["a"] = {"abcF" : Mapping({1 : 1})}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = {"abcF" : Mapping({b"\0" : 1})}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = {"abcF" : Mapping({"\0" : 1})}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d["a"] = {"abcF" : %s}
+d["a"] = {"abcF" : FailingIter()}:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d["a"] = {"abcF" : FailingIterNext()}:(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s}
+d["a"] = {"abcF" : None}:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d["a"] = {"abcF" : {b"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = {"abcF" : {"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = {"abcF" : FailingMapping()}:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d["a"] = {"abcF" : FailingMappingKey()}:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d["a"] = {"abcF" : FailingNumber()}:(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({%s : 1})
+d["a"] = Mapping({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = Mapping({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = Mapping({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({"abcG" : {%s : 1}})
+d["a"] = Mapping({"abcG" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = Mapping({"abcG" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = Mapping({"abcG" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({"abcG" : Mapping({%s : 1})})
+d["a"] = Mapping({"abcG" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = Mapping({"abcG" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s})
+d["a"] = Mapping({"abcG" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d["a"] = Mapping({"abcG" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s})
+d["a"] = Mapping({"abcG" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d["a"] = Mapping({"abcG" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = Mapping({"abcG" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = Mapping({"abcG" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d["a"] = Mapping({"abcG" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d["a"] = Mapping({"abcG" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using d["a"] = %s
+d["a"] = FailingIter():(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d["a"] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = %s
+d["a"] = None:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d["a"] = {b"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = {"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = FailingMapping():(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d["a"] = FailingMappingKey():(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d["a"] = FailingNumber():(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>> DictionaryUpdate
+>>> kwargs
+>>> iter
+d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+>>> Testing *Iter* using d.update(%s)
+d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing StringToChars using d.update({%s : 1})
+d.update({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update({"abcF" : {%s : 1}})
+d.update({"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update({"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update({"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update({"abcF" : Mapping({%s : 1})})
+d.update({"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update({"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update({"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d.update({"abcF" : %s})
+d.update({"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d.update({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update({"abcF" : %s})
+d.update({"abcF" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d.update({"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update({"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update({"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({%s : 1}))
+d.update(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update(Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update(Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({"abcG" : {%s : 1}}))
+d.update(Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update(Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update(Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({"abcG" : Mapping({%s : 1})}))
+d.update(Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update(Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d.update(Mapping({"abcG" : %s}))
+d.update(Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d.update(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s}))
+d.update(Mapping({"abcG" : None})):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d.update(Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update(Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update(Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using d.update(%s)
+d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update(%s)
+d.update(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
+d.update({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update(FailingNumber()):(<class 'TypeError'>, TypeError("'FailingNumber' object is not iterable",))
+<<< Finished
+>>> Testing StringToChars using d.update(((%s, 0),))
+d.update(((1, 0),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update(((b"\0", 0),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("\0", 0),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {%s : 1}),))
+d.update((("a", {1 : 1}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", {b"\0" : 1}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", {"\0" : 1}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {"abcF" : {%s : 1}}),))
+d.update((("a", {"abcF" : {1 : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", {"abcF" : {b"\0" : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", {"abcF" : {"\0" : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {"abcF" : Mapping({%s : 1})}),))
+d.update((("a", {"abcF" : Mapping({1 : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", {"abcF" : Mapping({b"\0" : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d.update((("a", {"abcF" : %s}),))
+d.update((("a", {"abcF" : FailingIter()}),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d.update((("a", {"abcF" : FailingIterNext()}),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),))
+d.update((("a", {"abcF" : None}),)):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d.update((("a", {"abcF" : {b"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", {"abcF" : {"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", {"abcF" : FailingMapping()}),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update((("a", {"abcF" : FailingMappingKey()}),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update((("a", {"abcF" : FailingNumber()}),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),))
+d.update((("a", Mapping({1 : 1})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", Mapping({b"\0" : 1})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", Mapping({"\0" : 1})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({"abcG" : {%s : 1}})),))
+d.update((("a", Mapping({"abcG" : {1 : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", Mapping({"abcG" : {b"\0" : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", Mapping({"abcG" : {"\0" : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({"abcG" : Mapping({%s : 1})})),))
+d.update((("a", Mapping({"abcG" : Mapping({1 : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", Mapping({"abcG" : Mapping({b"\0" : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),))
+d.update((("a", Mapping({"abcG" : FailingIter()})),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),))
+d.update((("a", Mapping({"abcG" : None})),)):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d.update((("a", Mapping({"abcG" : {b"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", Mapping({"abcG" : {"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", Mapping({"abcG" : FailingMapping()})),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update((("a", Mapping({"abcG" : FailingNumber()})),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using d.update((("a", %s),))
+d.update((("a", FailingIter()),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d.update((("a", FailingIterNext()),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", %s),))
+d.update((("a", None),)):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d.update((("a", {b"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", {"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", FailingMapping()),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update((("a", FailingMappingKey()),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update((("a", FailingNumber()),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>> DictionaryPopItem
+d.popitem(1, 2):(<class 'TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
+>> DictionaryHasKey
+d.has_key():(<class 'TypeError'>, TypeError('has_key() takes exactly one argument (0 given)',))
+> List
+>> ListConstructor
+vim.List(1, 2):(<class 'TypeError'>, TypeError('function takes at most 1 argument (2 given)',))
+vim.List(a=1):(<class 'TypeError'>, TypeError('list constructor does not accept keyword arguments',))
+>>> Testing *Iter* using vim.List(%s)
+vim.List(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+vim.List(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing StringToChars using vim.List([{%s : 1}])
+vim.List([{1 : 1}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([{b"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([{"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using vim.List([{"abcF" : {%s : 1}}])
+vim.List([{"abcF" : {1 : 1}}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([{"abcF" : {b"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([{"abcF" : {"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using vim.List([{"abcF" : Mapping({%s : 1})}])
+vim.List([{"abcF" : Mapping({1 : 1})}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([{"abcF" : Mapping({b"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([{"abcF" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using vim.List([{"abcF" : %s}])
+vim.List([{"abcF" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+vim.List([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}])
+vim.List([{"abcF" : None}]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+vim.List([{"abcF" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([{"abcF" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+vim.List([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+vim.List([{"abcF" : FailingNumber()}]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({%s : 1})])
+vim.List([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([Mapping({b"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([Mapping({"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({"abcG" : {%s : 1}})])
+vim.List([Mapping({"abcG" : {1 : 1}})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([Mapping({"abcG" : {b"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([Mapping({"abcG" : {"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({"abcG" : Mapping({%s : 1})})])
+vim.List([Mapping({"abcG" : Mapping({1 : 1})})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([Mapping({"abcG" : Mapping({b"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})])
+vim.List([Mapping({"abcG" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+vim.List([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})])
+vim.List([Mapping({"abcG" : None})]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+vim.List([Mapping({"abcG" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([Mapping({"abcG" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+vim.List([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+vim.List([Mapping({"abcG" : FailingNumber()})]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using vim.List([%s])
+vim.List([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+vim.List([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([%s])
+vim.List([None]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+vim.List([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+vim.List([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+vim.List([FailingNumber()]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>> ListItem
+l[1000]:(<class 'IndexError'>, IndexError('list index out of range',))
+>> ListAssItem
+ll[1] = 2:(<class 'vim.error'>, error('list is locked',))
+l[1000] = 3:(<class 'IndexError'>, IndexError('list index out of range',))
+>> ListAssSlice
+ll[1:100] = "abcJ":(<class 'vim.error'>, error('list is locked',))
+>>> Testing *Iter* using l[:] = %s
+l[:] = FailingIter():(<class 'NotImplementedError'>, NotImplementedError('iter',))
+l[:] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [{%s : 1}]
+l[:] = [{1 : 1}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [{b"\0" : 1}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [{"\0" : 1}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [{"abcF" : {%s : 1}}]
+l[:] = [{"abcF" : {1 : 1}}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [{"abcF" : {b"\0" : 1}}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [{"abcF" : {"\0" : 1}}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [{"abcF" : Mapping({%s : 1})}]
+l[:] = [{"abcF" : Mapping({1 : 1})}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [{"abcF" : Mapping({b"\0" : 1})}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [{"abcF" : Mapping({"\0" : 1})}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using l[:] = [{"abcF" : %s}]
+l[:] = [{"abcF" : FailingIter()}]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l[:] = [{"abcF" : FailingIterNext()}]:(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}]
+l[:] = [{"abcF" : None}]:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l[:] = [{"abcF" : {b"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [{"abcF" : {"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [{"abcF" : FailingMapping()}]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l[:] = [{"abcF" : FailingMappingKey()}]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l[:] = [{"abcF" : FailingNumber()}]:(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({%s : 1})]
+l[:] = [Mapping({1 : 1})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [Mapping({b"\0" : 1})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [Mapping({"\0" : 1})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({"abcG" : {%s : 1}})]
+l[:] = [Mapping({"abcG" : {1 : 1}})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [Mapping({"abcG" : {b"\0" : 1}})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [Mapping({"abcG" : {"\0" : 1}})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({"abcG" : Mapping({%s : 1})})]
+l[:] = [Mapping({"abcG" : Mapping({1 : 1})})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [Mapping({"abcG" : Mapping({b"\0" : 1})})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})]
+l[:] = [Mapping({"abcG" : FailingIter()})]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l[:] = [Mapping({"abcG" : FailingIterNext()})]:(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})]
+l[:] = [Mapping({"abcG" : None})]:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l[:] = [Mapping({"abcG" : {b"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [Mapping({"abcG" : {"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [Mapping({"abcG" : FailingMapping()})]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l[:] = [Mapping({"abcG" : FailingMappingKey()})]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l[:] = [Mapping({"abcG" : FailingNumber()})]:(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using l[:] = [%s]
+l[:] = [FailingIter()]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l[:] = [FailingIterNext()]:(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [%s]
+l[:] = [None]:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l[:] = [{b"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [{"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [FailingMapping()]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l[:] = [FailingMappingKey()]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l[:] = [FailingNumber()]:(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>> ListConcatInPlace
+>>> Testing *Iter* using l.extend(%s)
+l.extend(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+l.extend(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing StringToChars using l.extend([{%s : 1}])
+l.extend([{1 : 1}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([{b"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([{"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l.extend([{"abcF" : {%s : 1}}])
+l.extend([{"abcF" : {1 : 1}}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([{"abcF" : {b"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([{"abcF" : {"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l.extend([{"abcF" : Mapping({%s : 1})}])
+l.extend([{"abcF" : Mapping({1 : 1})}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([{"abcF" : Mapping({b"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([{"abcF" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using l.extend([{"abcF" : %s}])
+l.extend([{"abcF" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l.extend([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}])
+l.extend([{"abcF" : None}]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l.extend([{"abcF" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([{"abcF" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l.extend([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l.extend([{"abcF" : FailingNumber()}]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({%s : 1})])
+l.extend([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([Mapping({b"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([Mapping({"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({"abcG" : {%s : 1}})])
+l.extend([Mapping({"abcG" : {1 : 1}})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([Mapping({"abcG" : {b"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([Mapping({"abcG" : {"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({"abcG" : Mapping({%s : 1})})])
+l.extend([Mapping({"abcG" : Mapping({1 : 1})})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([Mapping({"abcG" : Mapping({b"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})])
+l.extend([Mapping({"abcG" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l.extend([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})])
+l.extend([Mapping({"abcG" : None})]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l.extend([Mapping({"abcG" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([Mapping({"abcG" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l.extend([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l.extend([Mapping({"abcG" : FailingNumber()})]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using l.extend([%s])
+l.extend([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l.extend([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([%s])
+l.extend([None]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l.extend([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l.extend([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l.extend([FailingNumber()]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>> ListSetattr
+del l.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.List attributes',))
+l.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError('bool',))
+l.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set attribute xxx',))
+> Function
+>> FunctionConstructor
+vim.Function("123"):(<class 'ValueError'>, ValueError('unnamed function 123 does not exist',))
+vim.Function("xxx_non_existent_function_xxx"):(<class 'ValueError'>, ValueError('function xxx_non_existent_function_xxx does not exist',))
+vim.Function("xxx#non#existent#function#xxx"):NOT FAILED
+>> FunctionCall
+>>> Testing StringToChars using f({%s : 1})
+f({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using f({"abcF" : {%s : 1}})
+f({"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f({"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f({"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using f({"abcF" : Mapping({%s : 1})})
+f({"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f({"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f({"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using f({"abcF" : %s})
+f({"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+f({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using f({"abcF" : %s})
+f({"abcF" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+f({"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f({"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+f({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+f({"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using f(Mapping({%s : 1}))
+f(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f(Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f(Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using f(Mapping({"abcG" : {%s : 1}}))
+f(Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f(Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f(Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using f(Mapping({"abcG" : Mapping({%s : 1})}))
+f(Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f(Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f(Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using f(Mapping({"abcG" : %s}))
+f(Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+f(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s}))
+f(Mapping({"abcG" : None})):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+f(Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f(Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+f(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+f(Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using f(%s)
+f(FailingIter()):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+f(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using f(%s)
+f(None):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+f({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+f(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+f(FailingNumber()):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using fd(self={%s : 1})
+fd(self={1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self={b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self={"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using fd(self={"abcF" : {%s : 1}})
+fd(self={"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self={"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self={"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using fd(self={"abcF" : Mapping({%s : 1})})
+fd(self={"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self={"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self={"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using fd(self={"abcF" : %s})
+fd(self={"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+fd(self={"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self={"abcF" : %s})
+fd(self={"abcF" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+fd(self={"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self={"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self={"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+fd(self={"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+fd(self={"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({%s : 1}))
+fd(self=Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self=Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self=Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({"abcG" : {%s : 1}}))
+fd(self=Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self=Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self=Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({"abcG" : Mapping({%s : 1})}))
+fd(self=Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self=Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using fd(self=Mapping({"abcG" : %s}))
+fd(self=Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+fd(self=Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s}))
+fd(self=Mapping({"abcG" : None})):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+fd(self=Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self=Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self=Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+fd(self=Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+fd(self=Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using fd(self=%s)
+fd(self=FailingIter()):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim dictionary',))
+fd(self=FailingIterNext()):(<class 'TypeError'>, TypeError('unable to convert FailingIterNext to vim dictionary',))
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self=%s)
+fd(self=None):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim dictionary',))
+fd(self={b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self={"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self=FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+fd(self=FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+fd(self=FailingNumber()):(<class 'TypeError'>, TypeError('unable to convert FailingNumber to vim dictionary',))
+<<< Finished
+>>> Testing ConvertFromPyMapping using fd(self=%s)
+fd(self=[]):(<class 'AttributeError'>, AttributeError('keys',))
+<<< Finished
+> TabPage
+>> TabPageAttr
+vim.current.tabpage.xxx:(<class 'AttributeError'>, AttributeError("'vim.tabpage' object has no attribute 'xxx'",))
+> TabList
+>> TabListItem
+vim.tabpages[1000]:(<class 'IndexError'>, IndexError('no such tab page',))
+> Window
+>> WindowAttr
+vim.current.window.xxx:(<class 'AttributeError'>, AttributeError("'vim.window' object has no attribute 'xxx'",))
+>> WindowSetattr
+vim.current.window.buffer = 0:(<class 'TypeError'>, TypeError('readonly attribute: buffer',))
+vim.current.window.cursor = (100000000, 100000000):(<class 'vim.error'>, error('cursor position outside buffer',))
+vim.current.window.cursor = True:(<class 'TypeError'>, TypeError('argument must be 2-item sequence, not bool',))
+>>> Testing NumberToLong using vim.current.window.height = %s
+vim.current.window.height = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+vim.current.window.height = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+vim.current.window.height = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+<<< Finished
+>>> Testing NumberToLong using vim.current.window.width = %s
+vim.current.window.width = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+vim.current.window.width = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+vim.current.window.width = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+<<< Finished
+vim.current.window.xxxxxx = True:(<class 'AttributeError'>, AttributeError('xxxxxx',))
+> WinList
+>> WinListItem
+vim.windows[1000]:(<class 'IndexError'>, IndexError('no such window',))
+> Buffer
+>> StringToLine (indirect)
+vim.current.buffer[0] = "\na":(<class 'vim.error'>, error('string cannot contain newlines',))
+vim.current.buffer[0] = b"\na":(<class 'vim.error'>, error('string cannot contain newlines',))
+>> SetBufferLine (indirect)
+vim.current.buffer[0] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+>> SetBufferLineList (indirect)
+vim.current.buffer[:] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+vim.current.buffer[:] = ["\na", "bc"]:(<class 'vim.error'>, error('string cannot contain newlines',))
+>> InsertBufferLines (indirect)
+vim.current.buffer.append(None):(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+vim.current.buffer.append(["\na", "bc"]):(<class 'vim.error'>, error('string cannot contain newlines',))
+vim.current.buffer.append("\nbc"):(<class 'vim.error'>, error('string cannot contain newlines',))
+>> RBItem
+vim.current.buffer[100000000]:(<class 'IndexError'>, IndexError('line number out of range',))
+>> RBAsItem
+vim.current.buffer[100000000] = "":(<class 'IndexError'>, IndexError('line number out of range',))
+>> BufferAttr
+vim.current.buffer.xxx:(<class 'AttributeError'>, AttributeError("'vim.buffer' object has no attribute 'xxx'",))
+>> BufferSetattr
+vim.current.buffer.name = True:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got bool',))
+vim.current.buffer.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',))
+>> BufferMark
+vim.current.buffer.mark(0):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.current.buffer.mark("abcM"):(<class 'ValueError'>, ValueError('mark name must be a single character',))
+vim.current.buffer.mark("!"):(<class 'vim.error'>, error('invalid mark name',))
+>> BufferRange
+vim.current.buffer.range(1, 2, 3):(<class 'TypeError'>, TypeError('function takes exactly 2 arguments (3 given)',))
+> BufMap
+>> BufMapItem
+vim.buffers[100000000]:(<class 'KeyError'>, KeyError(100000000,))
+>>> Testing NumberToLong using vim.buffers[%s]
+vim.buffers[[]]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+vim.buffers[None]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+vim.buffers[-1]:(<class 'ValueError'>, ValueError('number must be greater then zero',))
+vim.buffers[0]:(<class 'ValueError'>, ValueError('number must be greater then zero',))
+<<< Finished
+> Current
+>> CurrentGetattr
+vim.current.xxx:(<class 'AttributeError'>, AttributeError("'vim.currentdata' object has no attribute 'xxx'",))
+>> CurrentSetattr
+vim.current.line = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+vim.current.buffer = True:(<class 'TypeError'>, TypeError('expected vim.Buffer object, but got bool',))
+vim.current.window = True:(<class 'TypeError'>, TypeError('expected vim.Window object, but got bool',))
+vim.current.tabpage = True:(<class 'TypeError'>, TypeError('expected vim.TabPage object, but got bool',))
+vim.current.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',))
+['.']
+'.'
+3,xx
+before
+after
+pythonx/topmodule/__init__.py
+pythonx/topmodule/submodule/__init__.py
+pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py
+vim.command("throw 'abcN'"):(<class 'vim.error'>, error('abcN',))
+Exe("throw 'def'"):(<class 'vim.error'>, error('def',))
+vim.eval("Exe('throw ''ghi''')"):(<class 'vim.error'>, error('ghi',))
+vim.eval("Exe('echoerr ''jkl''')"):(<class 'vim.error'>, error('Vim(echoerr):jkl',))
+vim.eval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',))
+vim.bindeval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',))
diff --git a/src/testdir/test88.in b/src/testdir/test88.in
new file mode 100644 (file)
index 0000000..c2e6a75
--- /dev/null
@@ -0,0 +1,88 @@
+vim: set ft=vim
+
+Tests for correct display (cursor column position) with +conceal and
+tabulators.
+
+STARTTEST
+:so small.vim
+:if !has('conceal')
+   e! test.ok
+   wq! test.out
+:endif
+:" Conceal settings.
+:set conceallevel=2
+:set concealcursor=nc
+:syntax match test /|/ conceal
+:" Save current cursor position. Only works in <expr> mode, can't be used
+:" with :normal because it moves the cursor to the command line. Thanks to ZyX
+:" <zyx.vim@gmail.com> for the idea to use an <expr> mapping.
+:let positions = []
+:nnoremap <expr> GG ":let positions += ['".screenrow().":".screencol()."']\n"
+:" Start test.
+/^start:
+:normal ztj
+GGk
+:" We should end up in the same column when running these commands on the two
+:" lines.
+:normal ft
+GGk
+:normal $
+GGk
+:normal 0j
+GGk
+:normal ft
+GGk
+:normal $
+GGk
+:normal 0j0j
+GGk
+:" Same for next test block.
+:normal ft
+GGk
+:normal $
+GGk
+:normal 0j
+GGk
+:normal ft
+GGk
+:normal $
+GGk
+:normal 0j0j
+GGk
+:" And check W with multiple tabs and conceals in a line.
+:normal W
+GGk
+:normal W
+GGk
+:normal W
+GGk
+:normal $
+GGk
+:normal 0j
+GGk
+:normal W
+GGk
+:normal W
+GGk
+:normal W
+GGk
+:normal $
+GGk
+:set lbr
+:normal $
+GGk
+:" Display result.
+:call append('$', 'end:')
+:call append('$', positions)
+:/^end/,$wq! test.out
+ENDTEST
+
+start:
+.concealed.     text
+|concealed|    text
+
+       .concealed.     text
+       |concealed|     text
+
+.a.    .b.     .c.     .d.
+|a|    |b|     |c|     |d|
diff --git a/src/testdir/test88.ok b/src/testdir/test88.ok
new file mode 100644 (file)
index 0000000..e29698b
--- /dev/null
@@ -0,0 +1,24 @@
+end:
+2:1
+2:17
+2:20
+3:1
+3:17
+3:20
+5:8
+5:25
+5:28
+6:8
+6:25
+6:28
+8:1
+8:9
+8:17
+8:25
+8:27
+9:1
+9:9
+9:17
+9:25
+9:26
+9:26
diff --git a/src/testdir/test89.in b/src/testdir/test89.in
new file mode 100644 (file)
index 0000000..1c3079f
--- /dev/null
@@ -0,0 +1,71 @@
+- Some tests for setting 'number' and 'relativenumber'
+  This is not all that useful now that the options are no longer reset when
+  setting the other.
+- Some tests for findfile() function
+
+STARTTEST
+:so small.vim
+:set hidden nocp nu rnu viminfo+=nviminfo
+:redir @a | set nu? rnu? | redir END
+:e! xx
+:redir @b | set nu? rnu? | redir END
+:e! #
+:$put ='results:'
+:$put a
+:$put b
+:"
+:set nonu nornu
+:setglobal nu
+:setlocal rnu
+:redir @c | setglobal nu? | redir END
+:set nonu nornu
+:setglobal rnu
+:setlocal nu
+:redir @d | setglobal rnu? | redir END
+:$put =':setlocal must NOT reset the other global value'
+:$put c
+:$put d
+:"
+:set nonu nornu
+:setglobal nu
+:setglobal rnu
+:redir @e | setglobal nu? | redir END
+:set nonu nornu
+:setglobal rnu
+:setglobal nu
+:redir @f | setglobal rnu? | redir END
+:$put =':setglobal MUST reset the other global value'
+:$put e
+:$put f
+:"
+:set nonu nornu
+:set nu
+:set rnu
+:redir @g | setglobal nu? | redir END
+:set nonu nornu
+:set rnu
+:set nu
+:redir @h | setglobal rnu? | redir END
+:$put =':set MUST reset the other global value'
+:$put g
+:$put h
+:"
+:let cwd=getcwd()
+:cd ..
+:" Tests may be run from a shadow directory, so an extra cd needs to be done to
+:" get above src/
+:if fnamemodify(getcwd(), ':t') != 'src' | cd ../.. | else | cd .. | endif
+:$put =''
+:$put ='Testing findfile'
+:$put =''
+:set ssl
+:$put =findfile('test19.in','src/test*')
+:exe "cd" cwd
+:cd ..
+:$put =findfile('test19.in','test*')
+:$put =findfile('test19.in','testdir')
+:exe "cd" cwd
+:/^results/,$w! test.out
+:q!
+ENDTEST
+
diff --git a/src/testdir/test89.ok b/src/testdir/test89.ok
new file mode 100644 (file)
index 0000000..9003475
--- /dev/null
@@ -0,0 +1,28 @@
+results:
+
+  number
+  relativenumber
+
+  number
+  relativenumber
+:setlocal must NOT reset the other global value
+
+  number
+
+  relativenumber
+:setglobal MUST reset the other global value
+
+  number
+
+  relativenumber
+:set MUST reset the other global value
+
+  number
+
+  relativenumber
+
+Testing findfile
+
+src/testdir/test19.in
+testdir/test19.in
+testdir/test19.in
diff --git a/src/testdir/test90.in b/src/testdir/test90.in
new file mode 100644 (file)
index 0000000..6bac414
--- /dev/null
@@ -0,0 +1,53 @@
+Tests for sha256() function.    vim: set ft=vim et ts=2 sw=2 :
+
+STARTTEST
+:so small.vim
+:if !has('cryptv') || !exists('*sha256')
+   e! test.ok
+   wq! test.out
+:endif
+:"
+:let testcase='test for empty string: '
+:if sha256("") ==# 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
+: let res='ok'
+:else
+: let res='ng'
+:endif
+:$put =testcase.res
+:"
+:let testcase='test for 1 char: '
+:if sha256("a") ==# 'ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb'
+: let res='ok'
+:else
+: let res='ng'
+:endif
+:$put =testcase.res
+:"
+:let testcase='test for 3 chars: '
+:if sha256("abc") ==# 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'
+: let res='ok'
+:else
+: let res='ng'
+:endif
+:$put =testcase.res
+:"
+:let testcase='test for contains meta char: '
+:if sha256("foo\nbar") ==# '807eff6267f3f926a21d234f7b0cf867a86f47e07a532f15e8cc39ed110ca776'
+: let res='ok'
+:else
+: let res='ng'
+:endif
+:$put =testcase.res
+:"
+:let testcase='test for contains non-ascii char: '
+:if sha256("\xde\xad\xbe\xef") ==# '5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953'
+: let res='ok'
+:else
+: let res='ng'
+:endif
+:$put =testcase.res
+"
+:/^start:/,$wq! test.out
+ENDTEST
+
+start:
diff --git a/src/testdir/test90.ok b/src/testdir/test90.ok
new file mode 100644 (file)
index 0000000..9a8e7fe
--- /dev/null
@@ -0,0 +1,6 @@
+start:
+test for empty string: ok
+test for 1 char: ok
+test for 3 chars: ok
+test for contains meta char: ok
+test for contains non-ascii char: ok
diff --git a/src/testdir/test91.in b/src/testdir/test91.in
new file mode 100644 (file)
index 0000000..e900a52
--- /dev/null
@@ -0,0 +1,111 @@
+Tests for getbufvar(), getwinvar(), gettabvar() and gettabwinvar().
+vim: set ft=vim :
+
+STARTTEST
+:so small.vim
+:so mbyte.vim
+:"
+:" Test for getbufvar()
+:" Use strings to test for memory leaks.
+:let b:var_num = '1234'
+:let def_num = '5678'
+:$put =string(getbufvar(1, 'var_num'))
+:$put =string(getbufvar(1, 'var_num', def_num))
+:$put =string(getbufvar(1, ''))
+:$put =string(getbufvar(1, '', def_num))
+:unlet b:var_num
+:$put =string(getbufvar(1, 'var_num', def_num))
+:$put =string(getbufvar(1, ''))
+:$put =string(getbufvar(1, '', def_num))
+:$put =string(getbufvar(9, ''))
+:$put =string(getbufvar(9, '', def_num))
+:unlet def_num
+:$put =string(getbufvar(1, '&autoindent'))
+:$put =string(getbufvar(1, '&autoindent', 1))
+:"
+:" Open new window with forced option values
+:set fileformats=unix,dos
+:new ++ff=dos ++bin ++enc=iso-8859-2
+:let otherff = getbufvar(bufnr('%'), '&fileformat')
+:let otherbin = getbufvar(bufnr('%'), '&bin')
+:let otherfenc = getbufvar(bufnr('%'), '&fenc')
+:close
+:$put =otherff
+:$put =string(otherbin)
+:$put =otherfenc
+:unlet otherff otherbin otherfenc
+:" test for getwinvar()
+:let w:var_str = "Dance"
+:let def_str = "Chance"
+:$put =string(getwinvar(1, 'var_str'))
+:$put =string(getwinvar(1, 'var_str', def_str))
+:$put =string(getwinvar(1, ''))
+:$put =string(getwinvar(1, '', def_str))
+:unlet w:var_str
+:$put =string(getwinvar(1, 'var_str', def_str))
+:$put =string(getwinvar(1, ''))
+:$put =string(getwinvar(1, '', def_str))
+:$put =string(getwinvar(9, ''))
+:$put =string(getwinvar(9, '', def_str))
+:$put =string(getwinvar(1, '&nu'))
+:$put =string(getwinvar(1, '&nu',  1))
+:unlet def_str
+:"
+:" test for gettabvar()
+:tabnew
+:tabnew
+:let t:var_list = [1, 2, 3]
+:let def_list = [4, 5, 6, 7]
+:tabrewind
+:$put =string(gettabvar(3, 'var_list'))
+:$put =string(gettabvar(3, 'var_list', def_list))
+:$put =string(gettabvar(3, ''))
+:$put =string(gettabvar(3, '', def_list))
+:tablast
+:unlet t:var_list
+:tabrewind
+:$put =string(gettabvar(3, 'var_list', def_list))
+:$put =string(gettabvar(9, ''))
+:$put =string(gettabvar(9, '', def_list))
+:$put =string(gettabvar(3, '&nu'))
+:$put =string(gettabvar(3, '&nu', def_list))
+:unlet def_list
+:tabonly
+:"
+:" test for gettabwinvar()
+:tabnew
+:tabnew
+:tabprev
+:split
+:split
+:wincmd w
+:vert split
+:wincmd w
+:let w:var_dict = {'dict': 'tabwin'}
+:let def_dict = {'dict2': 'newval'}
+:wincmd b
+:tabrewind
+:$put =string(gettabwinvar(2, 3, 'var_dict'))
+:$put =string(gettabwinvar(2, 3, 'var_dict', def_dict))
+:$put =string(gettabwinvar(2, 3, ''))
+:$put =string(gettabwinvar(2, 3, '', def_dict))
+:tabnext
+:3wincmd w
+:unlet w:var_dict
+:tabrewind
+:$put =string(gettabwinvar(2, 3, 'var_dict', def_dict))
+:$put =string(gettabwinvar(2, 3, ''))
+:$put =string(gettabwinvar(2, 3, '', def_dict))
+:$put =string(gettabwinvar(2, 9, ''))
+:$put =string(gettabwinvar(2, 9, '', def_dict))
+:$put =string(gettabwinvar(9, 3, ''))
+:$put =string(gettabwinvar(9, 3, '', def_dict))
+:unlet def_dict
+:$put =string(gettabwinvar(2, 3, '&nux'))
+:$put =string(gettabwinvar(2, 3, '&nux', 1))
+:tabonly
+:"
+:/^start/,$wq! test.out
+ENDTEST
+
+start:
diff --git a/src/testdir/test91.ok b/src/testdir/test91.ok
new file mode 100644 (file)
index 0000000..22e1572
--- /dev/null
@@ -0,0 +1,48 @@
+start:
+'1234'
+'1234'
+{'var_num': '1234'}
+{'var_num': '1234'}
+'5678'
+{}
+{}
+''
+'5678'
+0
+0
+dos
+1
+iso-8859-2
+'Dance'
+'Dance'
+{'var_str': 'Dance'}
+{'var_str': 'Dance'}
+'Chance'
+{}
+{}
+''
+'Chance'
+0
+0
+[1, 2, 3]
+[1, 2, 3]
+''
+[4, 5, 6, 7]
+[4, 5, 6, 7]
+''
+[4, 5, 6, 7]
+''
+[4, 5, 6, 7]
+{'dict': 'tabwin'}
+{'dict': 'tabwin'}
+{'var_dict': {'dict': 'tabwin'}}
+{'var_dict': {'dict': 'tabwin'}}
+{'dict2': 'newval'}
+{}
+{}
+''
+{'dict2': 'newval'}
+''
+{'dict2': 'newval'}
+''
+1
diff --git a/src/testdir/test92.in b/src/testdir/test92.in
new file mode 100644 (file)
index 0000000..e614832
--- /dev/null
@@ -0,0 +1,48 @@
+vim: set ft=vim fenc=utf-8:
+
+Tests if :mksession saves cursor columns correctly in presence of tab and 
+multibyte characters when fileencoding=utf-8.
+
+STARTTEST
+:so mbyte.vim
+:if !has('mksession')
+:  e! test.ok
+:  wq! test.out
+:endif
+:set sessionoptions=buffers splitbelow fileencoding=utf-8
+/^start:
+:vsplit
+j16|:split
+j16|:split
+j16|:split
+j8|:split
+j8|:split
+j16|:split
+j16|:split
+j16|:wincmd l
+/^start:
+:set nowrap
+j16|3zl:split
+j016|3zl:split
+j016|3zl:split
+j08|3zl:split
+j08|3zl:split
+j016|3zl:split
+j016|3zl:split
+j016|3zl:split
+:mksession! test.out
+:new test.out
+:v/\(^ *normal! 0\|^ *exe 'normal!\)/d
+:w
+:qa!
+ENDTEST
+
+start:
+no multibyte chAracter
+       one leaDing tab
+    four leadinG spaces
+two            consecutive tabs
+two    tabs    in one line
+one â€¦ multibyteCharacter
+a â€œb†two multiByte characters
+“câ€1€ three mulTibyte characters
diff --git a/src/testdir/test92.ok b/src/testdir/test92.ok
new file mode 100644 (file)
index 0000000..cca5ec4
--- /dev/null
@@ -0,0 +1,26 @@
+normal! 016|
+normal! 016|
+normal! 016|
+normal! 08|
+normal! 08|
+normal! 016|
+normal! 016|
+normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 8 . '|'
+  normal! 08|
+  exe 'normal! ' . s:c . '|zs' . 8 . '|'
+  normal! 08|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
diff --git a/src/testdir/test93.in b/src/testdir/test93.in
new file mode 100644 (file)
index 0000000..8444ba5
--- /dev/null
@@ -0,0 +1,48 @@
+vim: set ft=vim fenc=latin1:
+
+Tests if :mksession saves cursor columns correctly in presence of tab and 
+multibyte characters when fileencoding=latin1.
+
+STARTTEST
+:so mbyte.vim
+:if !has('mksession')
+:  e! test.ok
+:  wq! test.out
+:endif
+:set sessionoptions=buffers splitbelow fileencoding=latin1
+/^start:
+:vsplit
+j16|:split
+j16|:split
+j16|:split
+j8|:split
+j8|:split
+j16|:split
+j16|:split
+j16|:wincmd l
+/^start:
+:set nowrap
+j16|3zl:split
+j016|3zl:split
+j016|3zl:split
+j08|3zl:split
+j08|3zl:split
+j016|3zl:split
+j016|3zl:split
+j016|3zl:split
+:mksession! test.out
+:new test.out
+:v/\(^ *normal! 0\|^ *exe 'normal!\)/d
+:w
+:qa!
+ENDTEST
+
+start:
+no multibyte chAracter
+       one leaDing tab
+    four leadinG spaces
+two            consecutive tabs
+two    tabs    in one line
+one Ã¤ multibyteCharacter
+aä Ã„  two multiByte characters
+Aäöü  three mulTibyte characters
diff --git a/src/testdir/test93.ok b/src/testdir/test93.ok
new file mode 100644 (file)
index 0000000..cca5ec4
--- /dev/null
@@ -0,0 +1,26 @@
+normal! 016|
+normal! 016|
+normal! 016|
+normal! 08|
+normal! 08|
+normal! 016|
+normal! 016|
+normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 8 . '|'
+  normal! 08|
+  exe 'normal! ' . s:c . '|zs' . 8 . '|'
+  normal! 08|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
diff --git a/src/testdir/test94.in b/src/testdir/test94.in
new file mode 100644 (file)
index 0000000..dfa91d8
--- /dev/null
@@ -0,0 +1,95 @@
+Test for Visual mode and operators
+
+Tests for the two kinds of operations: Those executed with Visual mode
+followed by an operator and those executed via Operator-pending mode. Also
+part of the test are mappings, counts, and repetition with the . command.
+
+Test cases:
+- Visual modes (v V CTRL-V) followed by an operator; count; repeating
+- Visual mode maps; count; repeating
+  - Simple
+  - With an Ex command (custom text object)
+- Operator-pending mode maps
+  - Simple
+  - With Ex command moving the cursor
+  - With Ex command and Visual selection (custom text object)
+- Patch 7.3.879: Properly abort Ex command in Operator-pending mode
+
+STARTTEST
+:so small.vim
+:set nocp viminfo+=nviminfo
+:
+:" User functions
+:function MoveToCap()
+:  call search('\u', 'W')
+:endfunction
+:function SelectInCaps()
+:  let [line1, col1] = searchpos('\u', 'bcnW')
+:  let [line2, col2] = searchpos('.\u', 'nW')
+:  call setpos("'<", [0, line1, col1, 0])
+:  call setpos("'>", [0, line2, col2, 0])
+:  normal! gv
+:endfunction
+:
+:" Visual modes followed by operator
+/^apple
+lvld.l3vd.:
+/^line 1
+Vcnewline\ej.j2Vd.:
+/^xxxx
+\16jlc  \el.l2\16c----\el.:
+:
+:" Visual mode maps (movement and text object)
+:vnoremap W /\u/s-1<CR>
+:vnoremap iW :<C-U>call SelectInCaps()<CR>
+/^Kiwi
+vWcNo\el.fD2vd.:
+/^Jambu
+llviWc-\el.l2vdl.:
+:
+:" Operator-pending mode maps (movement and text object)
+:onoremap W /\u/<CR>
+:onoremap <Leader>W :<C-U>call MoveToCap()<CR>
+:onoremap iW :<C-U>call SelectInCaps()<CR>
+/^Pineapple
+cW-\el.l2.l.:
+/^Juniper
+g?\WfD.:
+/^Lemon
+yiWPlciWNew\efr.:
+:
+:" Patch 7.3.879: Properly abort Operator-pending mode for "dv:<Esc>" etc.
+/^zzzz
+dV:\rdv:\r:set noma | let v:errmsg = ''
+d:\r:set ma | put = v:errmsg =~# '^E21' ? 'ok' : 'failed'
+dv:\edV:\e:set noma | let v:errmsg = ''
+d:\e:set ma | put = v:errmsg =~# '^E21' ? 'failed' : 'ok'
+:/^start:/+2,$w! test.out
+:q!
+ENDTEST
+
+start:
+
+apple banana cherry
+
+line 1 line 1
+line 2 line 2
+line 3 line 3
+line 4 line 4
+line 5 line 5
+line 6 line 6
+
+xxxxxxxxxxxxx
+xxxxxxxxxxxxx
+xxxxxxxxxxxxx
+xxxxxxxxxxxxx
+
+KiwiRaspberryDateWatermelonPeach
+JambuRambutanBananaTangerineMango
+
+PineappleQuinceLoganberryOrangeGrapefruitKiwiZ
+JuniperDurianZ
+LemonNectarineZ
+
+zzzz
+zzzz
diff --git a/src/testdir/test94.ok b/src/testdir/test94.ok
new file mode 100644 (file)
index 0000000..3996f2a
--- /dev/null
@@ -0,0 +1,20 @@
+a y
+
+newline
+newline
+
+    --------x
+    --------x
+xxxx--------x
+xxxx--------x
+
+NoNoberryach
+--ago
+
+----Z
+WhavcreQhevnaZ
+LemonNewNewZ
+
+zzz
+ok
+ok
diff --git a/src/testdir/test95.in b/src/testdir/test95.in
new file mode 100644 (file)
index 0000000..90fa699
--- /dev/null
@@ -0,0 +1,135 @@
+Test for regexp patterns with multi-byte support, using utf-8.
+See test64 for the non-multi-byte tests.
+
+A pattern that gives the expected result produces OK, so that we know it was
+actually tried.
+
+STARTTEST
+:so small.vim
+:so mbyte.vim
+:set nocp encoding=utf-8 viminfo+=nviminfo nomore
+:" tl is a List of Lists with:
+:"    2: test auto/old/new  0: test auto/old  1: test auto/new
+:"    regexp pattern
+:"    text to test the pattern on
+:"    expected match (optional)
+:"    expected submatch 1 (optional)
+:"    expected submatch 2 (optional)
+:"    etc.
+:"  When there is no match use only the first two items.
+:let tl = []
+
+:"""" Multi-byte character tests. These will fail unless vim is compiled
+:"""" with Multibyte (FEAT_MBYTE) or BIG/HUGE features.
+:call add(tl, [2, '[[:alpha:][=a=]]\+', '879 aiaãâaiuvna ', 'aiaãâaiuvna'])
+:call add(tl, [2, '[[=a=]]\+', 'ddaãâbcd', 'aãâ'])                                                         " equivalence classes
+:call add(tl, [2, '[^ม ]\+', 'มม oijasoifjos ifjoisj f osij j à¸¡à¸¡à¸¡à¸¡à¸¡ abcd', 'oijasoifjos'])
+:call add(tl, [2, ' [^ ]\+', 'start à¸¡abcdม ', ' à¸¡abcdม'])
+:call add(tl, [2, '[ม[:alpha:][=a=]]\+', '879 aiaãมâมaiuvna ', 'aiaãมâมaiuvna'])
+
+:" this is not a normal "i" but 0xec
+:call add(tl, [2, '\p\+', 'ìa', 'ìa'])
+:call add(tl, [2, '\p*', 'aã‚', 'aã‚'])
+
+:"""" Test recognition of some character classes
+:call add(tl, [2, '\i\+', '&*¨xx ', 'xx'])
+:call add(tl, [2, '\f\+', '&*\9ffname ', 'fname'])
+
+:"""" Test composing character matching
+:call add(tl, [2, '.ม', 'xม่x yมy', 'yม'])
+:call add(tl, [2, '.ม่', 'xม่x yมy', 'xม่'])
+:call add(tl, [2, "\u05b9", " x\u05b9 ", "x\u05b9"])
+:call add(tl, [2, ".\u05b9", " x\u05b9 ", "x\u05b9"])
+:call add(tl, [2, "\u05b9\u05bb", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
+:call add(tl, [2, ".\u05b9\u05bb", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
+:call add(tl, [2, "\u05bb\u05b9", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
+:call add(tl, [2, ".\u05bb\u05b9", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
+:call add(tl, [2, "\u05b9", " y\u05bb x\u05b9 ", "x\u05b9"])
+:call add(tl, [2, ".\u05b9", " y\u05bb x\u05b9 ", "x\u05b9"])
+:call add(tl, [2, "\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"])
+:call add(tl, [2, ".\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"])
+:call add(tl, [1, "\u05b9\u05bb", " y\u05b9 x\u05b9\u05bb ", "x\u05b9\u05bb"])
+:call add(tl, [2, ".\u05b9\u05bb", " y\u05bb x\u05b9\u05bb ", "x\u05b9\u05bb"])
+
+
+:"""" Test \Z
+:call add(tl, [2, 'ú\Z', 'x'])
+:call add(tl, [2, 'יהוה\Z', 'יהוה', 'יהוה'])
+:call add(tl, [2, 'יְהוָה\Z', 'יהוה', 'יהוה'])
+:call add(tl, [2, 'יהוה\Z', 'יְהוָה', 'יְהוָה'])
+:call add(tl, [2, 'יְהוָה\Z', 'יְהוָה', 'יְהוָה'])
+:call add(tl, [2, '×™Ö°\Z', 'וְיַ', '×™Ö·'])
+:call add(tl, [2, "ק\u200d\u05b9x\\Z", "xק\u200d\u05b9xy", "ק\u200d\u05b9x"])
+:call add(tl, [2, "ק\u200d\u05b9x\\Z", "xק\u200dxy", "ק\u200dx"])
+:call add(tl, [2, "ק\u200dx\\Z", "xק\u200d\u05b9xy", "ק\u200d\u05b9x"])
+:call add(tl, [2, "ק\u200dx\\Z", "xק\u200dxy", "ק\u200dx"])
+:call add(tl, [2, "\u05b9\\Z", "xyz"])
+:call add(tl, [2, "\\Z\u05b9", "xyz"])
+:call add(tl, [2, "\u05b9\\Z", "xy\u05b9z", "y\u05b9"])
+:call add(tl, [2, "\\Z\u05b9", "xy\u05b9z", "y\u05b9"])
+:call add(tl, [1, "\u05b9\\+\\Z", "xy\u05b9z\u05b9 ", "y\u05b9z\u05b9"])
+:call add(tl, [1, "\\Z\u05b9\\+", "xy\u05b9z\u05b9 ", "y\u05b9z\u05b9"])
+
+:"""" Combining different tests and features
+:call add(tl, [2, '[^[=a=]]\+', 'ddaãâbcd', 'dd'])
+
+:"""" Run the tests
+
+:"
+:for t in tl
+:  let re = t[0]
+:  let pat = t[1]
+:  let text = t[2]
+:  let matchidx = 3
+:  for engine in [0, 1, 2]
+:    if engine == 2 && re == 0 || engine == 1 && re == 1
+:      continue
+:    endif
+:    let &regexpengine = engine
+:    try
+:      let l = matchlist(text, pat)
+:    catch
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"'
+:    endtry
+:" check the match itself
+:    if len(l) == 0 && len(t) > matchidx
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"'
+:    elseif len(l) > 0 && len(t) == matchidx
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match'
+:    elseif len(t) > matchidx && l[0] != t[matchidx]
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"'
+:    else
+:      $put ='OK ' . engine . ' - ' . pat
+:    endif
+:    if len(l) > 0
+:"   check all the nine submatches
+:      for i in range(1, 9)
+:        if len(t) <= matchidx + i
+:          let e = ''
+:        else
+:          let e = t[matchidx + i]
+:        endif
+:        if l[i] != e
+:          $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
+:        endif
+:      endfor
+:      unlet i
+:    endif
+:  endfor
+:endfor
+:unlet t tl e l
+
+:" check that 'ambiwidth' does not change the meaning of \p
+:set regexpengine=1 ambiwidth=single
+:$put ='eng 1 ambi single: ' . match(\"\u00EC\", '\p')
+:set regexpengine=1 ambiwidth=double
+:$put ='eng 1 ambi double: ' . match(\"\u00EC\", '\p')
+:set regexpengine=2 ambiwidth=single
+:$put ='eng 2 ambi single: ' . match(\"\u00EC\", '\p')
+:set regexpengine=2 ambiwidth=double
+:$put ='eng 2 ambi double: ' . match(\"\u00EC\", '\p')
+
+:/\%#=1^Results/,$wq! test.out
+ENDTEST
+
+Results of test95:
diff --git a/src/testdir/test95.ok b/src/testdir/test95.ok
new file mode 100644 (file)
index 0000000..c378221
--- /dev/null
@@ -0,0 +1,122 @@
+Results of test95:
+OK 0 - [[:alpha:][=a=]]\+
+OK 1 - [[:alpha:][=a=]]\+
+OK 2 - [[:alpha:][=a=]]\+
+OK 0 - [[=a=]]\+
+OK 1 - [[=a=]]\+
+OK 2 - [[=a=]]\+
+OK 0 - [^ม ]\+
+OK 1 - [^ม ]\+
+OK 2 - [^ม ]\+
+OK 0 -  [^ ]\+
+OK 1 -  [^ ]\+
+OK 2 -  [^ ]\+
+OK 0 - [ม[:alpha:][=a=]]\+
+OK 1 - [ม[:alpha:][=a=]]\+
+OK 2 - [ม[:alpha:][=a=]]\+
+OK 0 - \p\+
+OK 1 - \p\+
+OK 2 - \p\+
+OK 0 - \p*
+OK 1 - \p*
+OK 2 - \p*
+OK 0 - \i\+
+OK 1 - \i\+
+OK 2 - \i\+
+OK 0 - \f\+
+OK 1 - \f\+
+OK 2 - \f\+
+OK 0 - .ม
+OK 1 - .ม
+OK 2 - .ม
+OK 0 - .ม่
+OK 1 - .ม่
+OK 2 - .ม่
+OK 0 - Ö¹
+OK 1 - Ö¹
+OK 2 - Ö¹
+OK 0 - .Ö¹
+OK 1 - .Ö¹
+OK 2 - .Ö¹
+OK 0 - Ö¹Ö»
+OK 1 - Ö¹Ö»
+OK 2 - Ö¹Ö»
+OK 0 - .Ö¹Ö»
+OK 1 - .Ö¹Ö»
+OK 2 - .Ö¹Ö»
+OK 0 - Ö»Ö¹
+OK 1 - Ö»Ö¹
+OK 2 - Ö»Ö¹
+OK 0 - .Ö»Ö¹
+OK 1 - .Ö»Ö¹
+OK 2 - .Ö»Ö¹
+OK 0 - Ö¹
+OK 1 - Ö¹
+OK 2 - Ö¹
+OK 0 - .Ö¹
+OK 1 - .Ö¹
+OK 2 - .Ö¹
+OK 0 - Ö¹
+OK 1 - Ö¹
+OK 2 - Ö¹
+OK 0 - .Ö¹
+OK 1 - .Ö¹
+OK 2 - .Ö¹
+OK 0 - Ö¹Ö»
+OK 2 - Ö¹Ö»
+OK 0 - .Ö¹Ö»
+OK 1 - .Ö¹Ö»
+OK 2 - .Ö¹Ö»
+OK 0 - Ãº\Z
+OK 1 - Ãº\Z
+OK 2 - Ãº\Z
+OK 0 - ×™×”וה\Z
+OK 1 - ×™×”וה\Z
+OK 2 - ×™×”וה\Z
+OK 0 - ×™Ö°×”וָה\Z
+OK 1 - ×™Ö°×”וָה\Z
+OK 2 - ×™Ö°×”וָה\Z
+OK 0 - ×™×”וה\Z
+OK 1 - ×™×”וה\Z
+OK 2 - ×™×”וה\Z
+OK 0 - ×™Ö°×”וָה\Z
+OK 1 - ×™Ö°×”וָה\Z
+OK 2 - ×™Ö°×”וָה\Z
+OK 0 - ×™Ö°\Z
+OK 1 - ×™Ö°\Z
+OK 2 - ×™Ö°\Z
+OK 0 - ×§â€Ö¹x\Z
+OK 1 - ×§â€Ö¹x\Z
+OK 2 - ×§â€Ö¹x\Z
+OK 0 - ×§â€Ö¹x\Z
+OK 1 - ×§â€Ö¹x\Z
+OK 2 - ×§â€Ö¹x\Z
+OK 0 - ×§â€x\Z
+OK 1 - ×§â€x\Z
+OK 2 - ×§â€x\Z
+OK 0 - ×§â€x\Z
+OK 1 - ×§â€x\Z
+OK 2 - ×§â€x\Z
+OK 0 - Ö¹\Z
+OK 1 - Ö¹\Z
+OK 2 - Ö¹\Z
+OK 0 - \ZÖ¹
+OK 1 - \ZÖ¹
+OK 2 - \ZÖ¹
+OK 0 - Ö¹\Z
+OK 1 - Ö¹\Z
+OK 2 - Ö¹\Z
+OK 0 - \ZÖ¹
+OK 1 - \ZÖ¹
+OK 2 - \ZÖ¹
+OK 0 - Ö¹\+\Z
+OK 2 - Ö¹\+\Z
+OK 0 - \ZÖ¹\+
+OK 2 - \ZÖ¹\+
+OK 0 - [^[=a=]]\+
+OK 1 - [^[=a=]]\+
+OK 2 - [^[=a=]]\+
+eng 1 ambi single: 0
+eng 1 ambi double: 0
+eng 2 ambi single: 0
+eng 2 ambi double: 0
diff --git a/src/testdir/test96.in b/src/testdir/test96.in
new file mode 100644 (file)
index 0000000..9d1a2c8
--- /dev/null
@@ -0,0 +1,142 @@
+This will test for problems in quickfix:
+A. incorrectly copying location lists which caused the location list to show a
+   different name than the file that was actually being displayed.
+B. not reusing the window for which the location list window is opened but
+   instead creating new windows.
+C. make sure that the location list window is not reused instead of the window
+   it belongs to.
+
+Note: to debug a problem comment out the last ":b 1" in a test and testing will
+stop at this point.
+
+STARTTEST
+:so small.vim
+: enew
+: w! test.out
+: b 1
+: " Set up the test environment:
+: function! ReadTestProtocol(name)
+:   let base = substitute(a:name, '\v^test://(.*)%(\.[^.]+)?', '\1', '')
+:   let word = substitute(base, '\v(.*)\..*', '\1', '')
+:
+:   setl modifiable
+:   setl noreadonly
+:   setl noswapfile
+:   setl bufhidden=delete
+:   %del _
+:   " For problem 2:
+:   " 'buftype' has to be set to reproduce the constant opening of new windows
+:   setl buftype=nofile
+:
+:   call setline(1, word)
+:
+:   setl nomodified
+:   setl nomodifiable
+:   setl readonly
+:   exe 'doautocmd BufRead ' . substitute(a:name, '\v^test://(.*)', '\1', '')
+: endfunction
+: augroup testgroup
+:   au!
+:   autocmd BufReadCmd test://* call ReadTestProtocol(expand("<amatch>"))
+: augroup END
+: let words = [ "foo", "bar", "baz", "quux", "shmoo", "spam", "eggs" ]
+:
+: let qflist = []
+: for word in words
+:   call add(qflist, {'filename': 'test://' . word . '.txt', 'text': 'file ' . word . '.txt', })
+:   " NOTE: problem 1:
+:   " intentionally not setting 'lnum' so that the quickfix entries are not
+:   " valid
+:   call setloclist(0, qflist, ' ')
+: endfor
+ENDTEST
+
+Test A:
+STARTTEST
+:lrewind
+:enew
+:lopen
+:lnext
+:lnext
+:lnext
+:lnext
+:vert split
+:wincmd L
+:lopen
+:wincmd p
+:lnext
+:"b 1
+:let fileName = expand("%")
+:wincmd p
+:let locationListFileName = substitute(getline(line('.')), '\([^|]*\)|.*', '\1', '')
+:wincmd n
+:wincmd K
+:b test.out
+:let fileName = substitute(fileName, '\\', '/', 'g')
+:let locationListFileName = substitute(locationListFileName, '\\', '/', 'g')
+:call append(line('$'), "Test A:")
+:call append(line('$'), "  - file name displayed: " . fileName)
+:call append(line('$'), "  - quickfix claims that the file name displayed is: " . locationListFileName)
+:w
+:wincmd o
+:b 1
+ENDTEST
+
+Test B:
+STARTTEST
+:lrewind
+:lopen
+:2
+:exe "normal \<CR>"
+:wincmd p
+:3
+:exe "normal \<CR>"
+:wincmd p
+:4
+:exe "normal \<CR>"
+:let numberOfWindowsOpen = winnr('$')
+:wincmd n
+:wincmd K
+:b test.out
+:call append(line('$'), "Test B:")
+:call append(line('$'), "  - number of window open: " . numberOfWindowsOpen)
+:w
+:wincmd o
+:b 1
+ENDTEST
+
+Test C:
+STARTTEST
+:lrewind
+:lopen
+:" Let's move the location list window to the top to check whether it (the first
+:" window found) will be reused when we try to open new windows:
+:wincmd K
+:2
+:exe "normal \<CR>"
+:wincmd p
+:3
+:exe "normal \<CR>"
+:wincmd p
+:4
+:exe "normal \<CR>"
+:1wincmd w
+:let locationListWindowBufType = &buftype
+:2wincmd w
+:let bufferName = expand("%")
+:wincmd n
+:wincmd K
+:b test.out
+:let bufferName = substitute(bufferName, '\\', '/', 'g')
+:call append(line('$'), "Test C:")
+:call append(line('$'), "  - 'buftype' of the location list window: " . locationListWindowBufType)
+:call append(line('$'), "  - buffer displayed in the 2nd window: " . bufferName)
+:w
+:wincmd o
+:b 1
+ENDTEST
+
+STARTTEST
+:qa
+ENDTEST
+
diff --git a/src/testdir/test96.ok b/src/testdir/test96.ok
new file mode 100644 (file)
index 0000000..3498e52
--- /dev/null
@@ -0,0 +1,9 @@
+
+Test A:
+  - file name displayed: test://bar.txt
+  - quickfix claims that the file name displayed is: test://bar.txt
+Test B:
+  - number of window open: 2
+Test C:
+  - 'buftype' of the location list window: quickfix
+  - buffer displayed in the 2nd window: test://quux.txt
diff --git a/src/testdir/test97.in b/src/testdir/test97.in
new file mode 100644 (file)
index 0000000..13e9dd5
--- /dev/null
@@ -0,0 +1,17 @@
+Test whether glob()/globpath() return correct results with certain escaped
+characters.
+
+STARTTEST
+:so small.vim
+:set shell=doesnotexist
+:e test.out
+:put =glob('Xxx\{')
+:put =glob('Xxx\$')
+:w! Xxx{
+:w! Xxx\$
+:put =glob('Xxx\{')
+:put =glob('Xxx\$')
+:w
+:qa!
+ENDTEST
+
diff --git a/src/testdir/test97.ok b/src/testdir/test97.ok
new file mode 100644 (file)
index 0000000..afa96a4
--- /dev/null
@@ -0,0 +1,5 @@
+
+
+
+Xxx{
+Xxx$
diff --git a/src/testdir/test98.in b/src/testdir/test98.in
new file mode 100644 (file)
index 0000000..83ccba0
--- /dev/null
@@ -0,0 +1,43 @@
+Test for 'scrollbind' causing an unexpected scroll of one of the windows.
+STARTTEST
+:so small.vim
+:" We don't want the status line to cause problems:
+:set laststatus=0
+:let g:totalLines = &lines * 20
+:let middle = g:totalLines / 2
+:wincmd n
+:wincmd o
+:for i in range(1, g:totalLines)
+:    call setline(i, 'LINE ' . i)
+:endfor
+:exe string(middle)
+:normal zt
+:normal M
+:aboveleft vert new
+:for i in range(1, g:totalLines)
+:    call setline(i, 'line ' . i)
+:endfor
+:exe string(middle)
+:normal zt
+:normal M
+:" Execute the following two command at once to reproduce the problem.
+:setl scb | wincmd p
+:setl scb
+:wincmd w
+:let topLineLeft = line('w0')
+:wincmd p
+:let topLineRight = line('w0')
+:setl noscrollbind
+:wincmd p
+:setl noscrollbind
+:q!
+:%del _
+:call setline(1, 'Difference between the top lines (left - right): ' . string(topLineLeft - topLineRight))
+:w! test.out
+:brewind
+ENDTEST
+
+STARTTEST
+:qa!
+ENDTEST
+
diff --git a/src/testdir/test98.ok b/src/testdir/test98.ok
new file mode 100644 (file)
index 0000000..356ddd8
--- /dev/null
@@ -0,0 +1 @@
+Difference between the top lines (left - right): 0
index 4004923..ca1600e 100644 (file)
@@ -6,7 +6,7 @@ INPUT
 T_VIOBJNOMUNGE
        if (sv_isa($arg, \"${ntype}\")) {
            IV tmp = SvIV((SV*)SvRV($arg));
-           $var = ($type) tmp;
+           $var = INT2PTR($type, tmp);
            if (!tmp)
                croak(\"$ntype no longer exists\");
        }
index 9a04476..18021c2 100644 (file)
--- a/src/ui.c
+++ b/src/ui.c
 
 #include "vim.h"
 
+#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# include "winclip.pro"
+#endif
+
     void
 ui_write(s, len)
     char_u  *s;
@@ -58,7 +64,7 @@ ui_write(s, len)
 #endif
 }
 
-#if defined(UNIX) || defined(VMS) || defined(PROTO)
+#if defined(UNIX) || defined(VMS) || defined(PROTO) || defined(WIN3264)
 /*
  * When executing an external program, there may be some typed characters that
  * are not consumed by it.  Give them back to ui_inchar() and they are stored
@@ -98,7 +104,7 @@ ui_inchar_undo(s, len)
 #endif
 
 /*
- * ui_inchar(): low level input funcion.
+ * ui_inchar(): low level input function.
  * Get characters from the keyboard.
  * Return the number of characters that are available.
  * If "wtime" == 0 do not wait for characters.
@@ -326,13 +332,7 @@ ui_set_shellsize(mustset)
 {
 #ifdef FEAT_GUI
     if (gui.in_use)
-       gui_set_shellsize(mustset,
-# ifdef WIN3264
-               TRUE
-# else
-               FALSE
-# endif
-               , RESIZE_BOTH);
+       gui_set_shellsize(mustset, TRUE, RESIZE_BOTH);
     else
 #endif
        mch_set_shellsize();
@@ -381,6 +381,8 @@ ui_breakcheck()
 
 #if defined(FEAT_CLIPBOARD) || defined(PROTO)
 
+static void clip_copy_selection __ARGS((VimClipboard *clip));
+
 /*
  * Selection stuff using Visual mode, for cutting and pasting text to other
  * windows.
@@ -423,9 +425,10 @@ clip_init(can_use)
  * this is called whenever VIsual mode is ended.
  */
     void
-clip_update_selection()
+clip_update_selection(clip)
+    VimClipboard    *clip;
 {
-    pos_T    start, end;
+    pos_T          start, end;
 
     /* If visual mode is only due to a redo command ("."), then ignore it */
     if (!redo_VIsual_busy && VIsual_active && (State & NORMAL))
@@ -444,17 +447,17 @@ clip_update_selection()
            start = curwin->w_cursor;
            end = VIsual;
        }
-       if (!equalpos(clip_star.start, start)
-               || !equalpos(clip_star.end, end)
-               || clip_star.vmode != VIsual_mode)
+       if (!equalpos(clip->start, start)
+               || !equalpos(clip->end, end)
+               || clip->vmode != VIsual_mode)
        {
-           clip_clear_selection();
-           clip_star.start = start;
-           clip_star.end = end;
-           clip_star.vmode = VIsual_mode;
-           clip_free_selection(&clip_star);
-           clip_own_selection(&clip_star);
-           clip_gen_set_selection(&clip_star);
+           clip_clear_selection(clip);
+           clip->start = start;
+           clip->end = end;
+           clip->vmode = VIsual_mode;
+           clip_free_selection(clip);
+           clip_own_selection(clip);
+           clip_gen_set_selection(clip);
        }
     }
 }
@@ -469,13 +472,13 @@ clip_own_selection(cbd)
      */
 #ifdef FEAT_X11
     /* Always own the selection, we might have lost it without being
-     * notified. */
+     * notified, e.g. during a ":sh" command. */
     if (cbd->available)
     {
        int was_owned = cbd->owned;
 
        cbd->owned = (clip_gen_own_selection(cbd) == OK);
-       if (!was_owned && cbd == &clip_star)
+       if (!was_owned && (cbd == &clip_star || cbd == &clip_plus))
        {
            /* May have to show a different kind of highlighting for the
             * selected area.  There is no specific redraw command for this,
@@ -483,13 +486,14 @@ clip_own_selection(cbd)
            if (cbd->owned
                    && (get_real_state() == VISUAL
                                            || get_real_state() == SELECTMODE)
-                   && clip_isautosel()
+                   && (cbd == &clip_star ? clip_isautosel_star()
+                                                     : clip_isautosel_plus())
                    && hl_attr(HLF_V) != hl_attr(HLF_VNC))
                redraw_curbuf_later(INVERTED_ALL);
        }
     }
 #else
-    /* Only own the clibpard when we didn't own it yet. */
+    /* Only own the clipboard when we didn't own it yet. */
     if (!cbd->owned && cbd->available)
        cbd->owned = (clip_gen_own_selection(cbd) == OK);
 #endif
@@ -502,12 +506,15 @@ clip_lose_selection(cbd)
 #ifdef FEAT_X11
     int            was_owned = cbd->owned;
 #endif
-    int     visual_selection = (cbd == &clip_star);
+    int     visual_selection = FALSE;
+
+    if (cbd == &clip_star || cbd == &clip_plus)
+       visual_selection = TRUE;
 
     clip_free_selection(cbd);
     cbd->owned = FALSE;
     if (visual_selection)
-       clip_clear_selection();
+       clip_clear_selection(cbd);
     clip_gen_lose_selection(cbd);
 #ifdef FEAT_X11
     if (visual_selection)
@@ -518,7 +525,8 @@ clip_lose_selection(cbd)
        if (was_owned
                && (get_real_state() == VISUAL
                                            || get_real_state() == SELECTMODE)
-               && clip_isautosel()
+               && (cbd == &clip_star ?
+                               clip_isautosel_star() : clip_isautosel_plus())
                && hl_attr(HLF_V) != hl_attr(HLF_VNC))
        {
            update_curbuf(INVERTED_ALL);
@@ -534,18 +542,18 @@ clip_lose_selection(cbd)
 #endif
 }
 
-    void
-clip_copy_selection()
+    static void
+clip_copy_selection(clip)
+    VimClipboard       *clip;
 {
-    if (VIsual_active && (State & NORMAL) && clip_star.available)
+    if (VIsual_active && (State & NORMAL) && clip->available)
     {
-       if (clip_isautosel())
-           clip_update_selection();
-       clip_free_selection(&clip_star);
-       clip_own_selection(&clip_star);
-       if (clip_star.owned)
-           clip_get_selection(&clip_star);
-       clip_gen_set_selection(&clip_star);
+       clip_update_selection(clip);
+       clip_free_selection(clip);
+       clip_own_selection(clip);
+       if (clip->owned)
+           clip_get_selection(clip);
+       clip_gen_set_selection(clip);
     }
 }
 
@@ -555,21 +563,38 @@ clip_copy_selection()
     void
 clip_auto_select()
 {
-    if (clip_isautosel())
-       clip_copy_selection();
+    if (clip_isautosel_star())
+       clip_copy_selection(&clip_star);
+    if (clip_isautosel_plus())
+       clip_copy_selection(&clip_plus);
 }
 
 /*
- * Return TRUE if automatic selection of Visual area is desired.
+ * Return TRUE if automatic selection of Visual area is desired for the *
+ * register.
  */
     int
-clip_isautosel()
+clip_isautosel_star()
 {
     return (
 #ifdef FEAT_GUI
            gui.in_use ? (vim_strchr(p_go, GO_ASEL) != NULL) :
 #endif
-           clip_autoselect);
+           clip_autoselect_star);
+}
+
+/*
+ * Return TRUE if automatic selection of Visual area is desired for the +
+ * register.
+ */
+    int
+clip_isautosel_plus()
+{
+    return (
+#ifdef FEAT_GUI
+           gui.in_use ? (vim_strchr(p_go, GO_ASELPLUS) != NULL) :
+#endif
+           clip_autoselect_plus);
 }
 
 
@@ -657,7 +682,7 @@ clip_start_selection(col, row, repeated_click)
     VimClipboard       *cb = &clip_star;
 
     if (cb->state == SELECT_DONE)
-       clip_clear_selection();
+       clip_clear_selection(cb);
 
     row = check_row(row);
     col = check_col(col);
@@ -749,7 +774,7 @@ clip_process_selection(button, col, row, repeated_click)
        printf("Selection ended: (%u,%u) to (%u,%u)\n", cb->start.lnum,
                cb->start.col, cb->end.lnum, cb->end.col);
 #endif
-       if (clip_isautosel()
+       if (clip_isautosel_star()
                || (
 #ifdef FEAT_GUI
                    gui.in_use ? (vim_strchr(p_go, GO_ASELML) != NULL) :
@@ -932,16 +957,16 @@ clip_may_redraw_selection(row, col, len)
  * Called from outside to clear selected region from the display
  */
     void
-clip_clear_selection()
+clip_clear_selection(cbd)
+    VimClipboard    *cbd;
 {
-    VimClipboard    *cb = &clip_star;
 
-    if (cb->state == SELECT_CLEARED)
+    if (cbd->state == SELECT_CLEARED)
        return;
 
-    clip_invert_area((int)cb->start.lnum, cb->start.col, (int)cb->end.lnum,
-                                                    cb->end.col, CLIP_CLEAR);
-    cb->state = SELECT_CLEARED;
+    clip_invert_area((int)cbd->start.lnum, cbd->start.col, (int)cbd->end.lnum,
+                                                    cbd->end.col, CLIP_CLEAR);
+    cbd->state = SELECT_CLEARED;
 }
 
 /*
@@ -954,7 +979,7 @@ clip_may_clear_selection(row1, row2)
     if (clip_star.state == SELECT_DONE
            && row2 >= clip_star.start.lnum
            && row1 <= clip_star.end.lnum)
-       clip_clear_selection();
+       clip_clear_selection(&clip_star);
 }
 
 /*
@@ -1431,6 +1456,22 @@ clip_gen_request_selection(cbd)
 #endif
 }
 
+    int
+clip_gen_owner_exists(cbd)
+    VimClipboard       *cbd UNUSED;
+{
+#ifdef FEAT_XCLIPBOARD
+# ifdef FEAT_GUI_GTK
+    if (gui.in_use)
+       return clip_gtk_owner_exists(cbd);
+    else
+# endif
+       return clip_x11_owner_exists(cbd);
+#else
+    return TRUE;
+#endif
+}
+
 #endif /* FEAT_CLIPBOARD */
 
 /*****************************************************************************
@@ -1609,7 +1650,7 @@ add_to_input_buf_csi(char_u *str, int len)
 
 #if defined(FEAT_HANGULIN) || defined(PROTO)
     void
-push_raw_key (s, len)
+push_raw_key(s, len)
     char_u  *s;
     int            len;
 {
@@ -1917,6 +1958,7 @@ open_app_context()
 static Atom    vim_atom;       /* Vim's own special selection format */
 #ifdef FEAT_MBYTE
 static Atom    vimenc_atom;    /* Vim's extended selection format */
+static Atom    utf8_atom;
 #endif
 static Atom    compound_text_atom;
 static Atom    text_atom;
@@ -1930,6 +1972,7 @@ x11_setup_atoms(dpy)
     vim_atom          = XInternAtom(dpy, VIM_ATOM_NAME,   False);
 #ifdef FEAT_MBYTE
     vimenc_atom               = XInternAtom(dpy, VIMENC_ATOM_NAME,False);
+    utf8_atom         = XInternAtom(dpy, "UTF8_STRING",   False);
 #endif
     compound_text_atom = XInternAtom(dpy, "COMPOUND_TEXT", False);
     text_atom         = XInternAtom(dpy, "TEXT",          False);
@@ -1944,10 +1987,9 @@ x11_setup_atoms(dpy)
  */
 
 static Boolean clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *));
-
 static void  clip_x11_lose_ownership_cb __ARGS((Widget, Atom *));
-
 static void clip_x11_timestamp_cb __ARGS((Widget w, XtPointer n, XEvent *event, Boolean *cont));
+static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
 
 /*
  * Property callback to get a timestamp for XtOwnSelection.
@@ -1985,8 +2027,17 @@ clip_x11_timestamp_cb(w, n, event, cont)
        return;
 
     /* Get the selection, using the event timestamp. */
-    XtOwnSelection(w, xproperty->atom, xproperty->time,
-           clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb, NULL);
+    if (XtOwnSelection(w, xproperty->atom, xproperty->time,
+           clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
+           NULL) == OK)
+    {
+       /* Set the "owned" flag now, there may have been a call to
+        * lose_ownership_cb in between. */
+       if (xproperty->atom == clip_plus.sel_atom)
+           clip_plus.owned = TRUE;
+       else
+           clip_star.owned = TRUE;
+    }
 }
 
     void
@@ -1997,8 +2048,6 @@ x11_setup_selection(w)
            /*(XtEventHandler)*/clip_x11_timestamp_cb, (XtPointer)NULL);
 }
 
-static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
-
     static void
 clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
                              format)
@@ -2010,7 +2059,7 @@ clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
     long_u     *length;
     int                *format;
 {
-    int                motion_type;
+    int                motion_type = MAUTO;
     long_u     len;
     char_u     *p;
     char       **text_list = NULL;
@@ -2030,7 +2079,6 @@ clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
        *(int *)success = FALSE;
        return;
     }
-    motion_type = MCHAR;
     p = (char_u *)value;
     len = *length;
     if (*type == vim_atom)
@@ -2069,7 +2117,11 @@ clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
     }
 #endif
 
-    else if (*type == compound_text_atom || (
+    else if (*type == compound_text_atom
+#ifdef FEAT_MBYTE
+           || *type == utf8_atom
+#endif
+           || (
 #ifdef FEAT_MBYTE
                enc_dbcs != 0 &&
 #endif
@@ -2083,7 +2135,13 @@ clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
        text_prop.encoding = *type;
        text_prop.format = *format;
        text_prop.nitems = len;
-       status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
+#if defined(FEAT_MBYTE) && defined(X_HAVE_UTF8_STRING)
+       if (*type == utf8_atom)
+           status = Xutf8TextPropertyToTextList(X_DISPLAY, &text_prop,
+                                                        &text_list, &n_text);
+       else
+#endif
+           status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
                                                         &text_list, &n_text);
        if (status != Success || n_text < 1)
        {
@@ -2123,7 +2181,7 @@ clip_x11_request_selection(myShell, dpy, cbd)
 #else
            1
 #endif
-           ; i < 5; i++)
+           ; i < 6; i++)
     {
        switch (i)
        {
@@ -2131,10 +2189,23 @@ clip_x11_request_selection(myShell, dpy, cbd)
            case 0:  type = vimenc_atom;        break;
 #endif
            case 1:  type = vim_atom;           break;
-           case 2:  type = compound_text_atom; break;
-           case 3:  type = text_atom;          break;
+#ifdef FEAT_MBYTE
+           case 2:  type = utf8_atom;          break;
+#endif
+           case 3:  type = compound_text_atom; break;
+           case 4:  type = text_atom;          break;
            default: type = XA_STRING;
        }
+#ifdef FEAT_MBYTE
+       if (type == utf8_atom
+# if defined(X_HAVE_UTF8_STRING)
+               && !enc_utf8
+# endif
+               )
+           /* Only request utf-8 when 'encoding' is utf8 and
+            * Xutf8TextPropertyToTextList is available. */
+           continue;
+#endif
        success = MAYBE;
        XtGetSelectionValue(myShell, cbd->sel_atom, type,
            clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
@@ -2225,18 +2296,23 @@ clip_x11_convert_selection_cb(w, sel_atom, target, type, value, length, format)
     {
        Atom *array;
 
-       if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 6))) == NULL)
+       if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 7))) == NULL)
            return False;
        *value = (XtPointer)array;
        i = 0;
-       array[i++] = XA_STRING;
        array[i++] = targets_atom;
 #ifdef FEAT_MBYTE
        array[i++] = vimenc_atom;
 #endif
        array[i++] = vim_atom;
+#ifdef FEAT_MBYTE
+       if (enc_utf8)
+           array[i++] = utf8_atom;
+#endif
+       array[i++] = XA_STRING;
        array[i++] = text_atom;
        array[i++] = compound_text_atom;
+
        *type = XA_ATOM;
        /* This used to be: *format = sizeof(Atom) * 8; but that caused
         * crashes on 64 bit machines. (Peter Derr) */
@@ -2248,6 +2324,7 @@ clip_x11_convert_selection_cb(w, sel_atom, target, type, value, length, format)
     if (       *target != XA_STRING
 #ifdef FEAT_MBYTE
            && *target != vimenc_atom
+           && *target != utf8_atom
 #endif
            && *target != vim_atom
            && *target != text_atom
@@ -2277,24 +2354,33 @@ clip_x11_convert_selection_cb(w, sel_atom, target, type, value, length, format)
        return False;
     }
 
-    if (*target == XA_STRING)
+    if (*target == XA_STRING
+#ifdef FEAT_MBYTE
+           || (*target == utf8_atom && enc_utf8)
+#endif
+           )
     {
        mch_memmove(result, string, (size_t)(*length));
-       *type = XA_STRING;
+       *type = *target;
     }
-    else if (*target == compound_text_atom
-           || *target == text_atom)
+    else if (*target == compound_text_atom || *target == text_atom)
     {
        XTextProperty   text_prop;
        char            *string_nt = (char *)alloc((unsigned)*length + 1);
+       int             conv_result;
 
        /* create NUL terminated string which XmbTextListToTextProperty wants */
        mch_memmove(string_nt, string, (size_t)*length);
        string_nt[*length] = NUL;
-       XmbTextListToTextProperty(X_DISPLAY, (char **)&string_nt, 1,
-                                             XCompoundTextStyle, &text_prop);
+       conv_result = XmbTextListToTextProperty(X_DISPLAY, (char **)&string_nt,
+                                          1, XCompoundTextStyle, &text_prop);
        vim_free(string_nt);
        XtFree(*value);                 /* replace with COMPOUND text */
+       if (conv_result != Success)
+       {
+           vim_free(string);
+           return False;
+       }
        *value = (XtPointer)(text_prop.value);  /*    from plain text */
        *length = text_prop.nitems;
        *type = compound_text_atom;
@@ -2336,22 +2422,38 @@ clip_x11_lose_ownership_cb(w, sel_atom)
 
     void
 clip_x11_lose_selection(myShell, cbd)
-    Widget     myShell;
+    Widget             myShell;
     VimClipboard       *cbd;
 {
-    XtDisownSelection(myShell, cbd->sel_atom, CurrentTime);
+    XtDisownSelection(myShell, cbd->sel_atom,
+                               XtLastTimestampProcessed(XtDisplay(myShell)));
 }
 
     int
 clip_x11_own_selection(myShell, cbd)
-    Widget     myShell;
+    Widget             myShell;
     VimClipboard       *cbd;
 {
-    /* Get the time by a zero-length append, clip_x11_timestamp_cb will be
-     * called with the current timestamp.  */
-    if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell), cbd->sel_atom,
-           timestamp_atom, 32, PropModeAppend, NULL, 0))
-       return FAIL;
+    /* When using the GUI we have proper timestamps, use the one of the last
+     * event.  When in the console we don't get events (the terminal gets
+     * them), Get the time by a zero-length append, clip_x11_timestamp_cb will
+     * be called with the current timestamp.  */
+#ifdef FEAT_GUI
+    if (gui.in_use)
+    {
+       if (XtOwnSelection(myShell, cbd->sel_atom,
+              XtLastTimestampProcessed(XtDisplay(myShell)),
+              clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
+              NULL) == False)
+           return FAIL;
+    }
+    else
+#endif
+    {
+       if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell),
+                 cbd->sel_atom, timestamp_atom, 32, PropModeAppend, NULL, 0))
+           return FAIL;
+    }
     /* Flush is required in a terminal as nothing else is doing it. */
     XFlush(XtDisplay(myShell));
     return OK;
@@ -2366,6 +2468,13 @@ clip_x11_set_selection(cbd)
     VimClipboard *cbd UNUSED;
 {
 }
+
+    int
+clip_x11_owner_exists(cbd)
+    VimClipboard       *cbd;
+{
+    return XGetSelectionOwner(X_DISPLAY, cbd->sel_atom) != None;
+}
 #endif
 
 #if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11) \
@@ -3064,7 +3173,7 @@ vcol2col(wp, lnum, vcol)
     char_u     *start;
 
     start = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
-    while (count <= vcol && *ptr != NUL)
+    while (count < vcol && *ptr != NUL)
     {
        count += win_lbr_chartabsize(wp, ptr, count, NULL);
        mb_ptr_adv(ptr);
index 376913d..3acfad1 100644 (file)
 #define UH_MAGIC 0x18dade      /* value for uh_magic when in use */
 #define UE_MAGIC 0xabc123      /* value for ue_magic when in use */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"    /* for vim_read(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 static void u_unch_branch __ARGS((u_header_T *uhp));
@@ -220,6 +216,7 @@ u_check(int newhead_may_be_NULL)
 
 /*
  * Save the current line for both the "u" and "U" command.
+ * Careful: may trigger autocommands that reload the buffer.
  * Returns OK or FAIL.
  */
     int
@@ -242,8 +239,9 @@ u_save(top, bot)
     if (undo_off)
        return OK;
 
-    if (top > curbuf->b_ml.ml_line_count ||
-                           top >= bot || bot > curbuf->b_ml.ml_line_count + 1)
+    if (top > curbuf->b_ml.ml_line_count
+           || top >= bot
+           || bot > curbuf->b_ml.ml_line_count + 1)
        return FALSE;   /* rely on caller to do error messages */
 
     if (top + 2 == bot)
@@ -723,7 +721,7 @@ u_compute_hash(hash)
     char_u             *p;
 
     sha256_start(&ctx);
-    for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
+    for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
     {
        p = ml_get(lnum);
        sha256_update(&ctx, p, (UINT32_T)(STRLEN(p) + 1));
@@ -1386,7 +1384,7 @@ u_write_undo(name, forceit, buf, hash)
                char_u  mbuf[UF_START_MAGIC_LEN];
                int     len;
 
-               len = vim_read(fd, mbuf, UF_START_MAGIC_LEN);
+               len = read_eintr(fd, mbuf, UF_START_MAGIC_LEN);
                close(fd);
                if (len < UF_START_MAGIC_LEN
                      || memcmp(mbuf, UF_START_MAGIC, UF_START_MAGIC_LEN) != 0)
@@ -1516,8 +1514,10 @@ u_write_undo(name, forceit, buf, hash)
        write_ok = TRUE;
 #ifdef U_DEBUG
     if (headers_written != buf->b_u_numhead)
-       EMSG3("Written %ld headers, but numhead is %ld",
-                                          headers_written, buf->b_u_numhead);
+    {
+       EMSGN("Written %ld headers, ...", headers_written);
+       EMSGN("... but numhead is %ld", buf->b_u_numhead);
+    }
 #endif
 
 write_error:
@@ -1539,6 +1539,7 @@ write_error:
        /* For systems that support ACL: get the ACL from the original file. */
        acl = mch_get_acl(buf->b_ffname);
        mch_set_acl(file_name, acl);
+       mch_free_acl(acl);
     }
 #endif
 
@@ -1861,6 +1862,7 @@ u_read_undo(name, hash, orig_name)
     curbuf->b_u_seq_cur = seq_cur;
     curbuf->b_u_time_cur = seq_time;
     curbuf->b_u_save_nr_last = last_save_nr;
+    curbuf->b_u_save_nr_cur = last_save_nr;
 
     curbuf->b_u_synced = TRUE;
     vim_free(uhp_table);
@@ -2794,7 +2796,7 @@ ex_undolist(eap)
                                                                uhp->uh_time);
            if (uhp->uh_save_nr > 0)
            {
-               while (STRLEN(IObuff) < 32)
+               while (STRLEN(IObuff) < 33)
                    STRCAT(IObuff, " ");
                vim_snprintf_add((char *)IObuff, IOSIZE,
                                                   "  %3ld", uhp->uh_save_nr);
@@ -2849,7 +2851,7 @@ ex_undolist(eap)
        sort_strings((char_u **)ga.ga_data, ga.ga_len);
 
        msg_start();
-       msg_puts_attr((char_u *)_("number changes  time            saved"),
+       msg_puts_attr((char_u *)_("number changes  when               saved"),
                                                              hl_attr(HLF_T));
        for (i = 0; i < ga.ga_len && !got_int; ++i)
        {
@@ -2879,7 +2881,12 @@ u_add_time(buf, buflen, tt)
     if (time(NULL) - tt >= 100)
     {
        curtime = localtime(&tt);
-       (void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
+       if (time(NULL) - tt < (60L * 60L * 12L))
+           /* within 12 hours */
+           (void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
+       else
+           /* longer ago */
+           (void)strftime((char *)buf, buflen, "%Y/%m/%d %H:%M:%S", curtime);
     }
     else
 #endif
@@ -3299,7 +3306,7 @@ bufIsChanged(buf)
 #ifdef FEAT_QUICKFIX
            !bt_dontwrite(buf) &&
 #endif
-           (buf->b_changed || file_ff_differs(buf));
+           (buf->b_changed || file_ff_differs(buf, TRUE));
 }
 
     int
@@ -3309,7 +3316,7 @@ curbufIsChanged()
 #ifdef FEAT_QUICKFIX
        !bt_dontwrite(curbuf) &&
 #endif
-       (curbuf->b_changed || file_ff_differs(curbuf));
+       (curbuf->b_changed || file_ff_differs(curbuf, TRUE));
 }
 
 #if defined(FEAT_EVAL) || defined(PROTO)
index 79522a4..f063557 100644 (file)
@@ -34,6 +34,7 @@ static char   *mediumVersion = VIM_VERSION_MEDIUM;
 # if (defined(VMS) && defined(VAXC)) || defined(PROTO)
 char   longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__)
                                                      + sizeof(__TIME__) + 3];
+
     void
 make_version()
 {
@@ -54,6 +55,7 @@ char  *longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
 char   *longVersion = VIM_VERSION_LONG;
 #endif
 
+static void list_features __ARGS((void));
 static void version_msg __ARGS((char *s));
 
 static char *(features[]) =
@@ -348,6 +350,7 @@ static char *(features[]) =
 # else
        "-mouse",
 #endif
+
 #if defined(UNIX) || defined(VMS)
 # ifdef FEAT_MOUSE_DEC
        "+mouse_dec",
@@ -369,24 +372,39 @@ static char *(features[]) =
 # else
        "-mouse_netterm",
 # endif
+#endif
+
+#ifdef __QNX__
+# ifdef FEAT_MOUSE_PTERM
+       "+mouse_pterm",
+# else
+       "-mouse_pterm",
+# endif
+#endif
+
+#if defined(UNIX) || defined(VMS)
+# ifdef FEAT_MOUSE_SGR
+       "+mouse_sgr",
+# else
+       "-mouse_sgr",
+# endif
 # ifdef FEAT_SYSMOUSE
        "+mouse_sysmouse",
 # else
        "-mouse_sysmouse",
 # endif
+# ifdef FEAT_MOUSE_URXVT
+       "+mouse_urxvt",
+# else
+       "-mouse_urxvt",
+# endif
 # ifdef FEAT_MOUSE_XTERM
        "+mouse_xterm",
 # else
        "-mouse_xterm",
 # endif
 #endif
-#ifdef __QNX__
-# ifdef FEAT_MOUSE_PTERM
-       "+mouse_pterm",
-# else
-       "-mouse_pterm",
-# endif
-#endif
+
 #ifdef FEAT_MBYTE_IME
 # ifdef DYNAMIC_IME
        "+multi_byte_ime/dyn",
@@ -426,11 +444,6 @@ static char *(features[]) =
        "-ole",
 # endif
 #endif
-#ifdef FEAT_OSFILETYPE
-       "+osfiletype",
-#else
-       "-osfiletype",
-#endif
 #ifdef FEAT_PATH_EXTRA
        "+path_extra",
 #else
@@ -774,6 +787,76 @@ ex_version(eap)
     }
 }
 
+/*
+ * List all features aligned in columns, dictionary style.
+ */
+    static void
+list_features()
+{
+    int                i;
+    int                ncol;
+    int                nrow;
+    int                nfeat = 0;
+    int                width = 0;
+
+    /* Find the length of the longest feature name, use that + 1 as the column
+     * width */
+    for (i = 0; features[i] != NULL; ++i)
+    {
+       int l = (int)STRLEN(features[i]);
+
+       if (l > width)
+           width = l;
+       ++nfeat;
+    }
+    width += 1;
+
+    if (Columns < width)
+    {
+       /* Not enough screen columns - show one per line */
+       for (i = 0; features[i] != NULL; ++i)
+       {
+           version_msg(features[i]);
+           if (msg_col > 0)
+               msg_putchar('\n');
+       }
+       return;
+    }
+
+    /* The rightmost column doesn't need a separator.
+     * Sacrifice it to fit in one more column if possible. */
+    ncol = (int) (Columns + 1) / width;
+    nrow = nfeat / ncol + (nfeat % ncol ? 1 : 0);
+
+    /* i counts columns then rows.  idx counts rows then columns. */
+    for (i = 0; !got_int && i < nrow * ncol; ++i)
+    {
+       int idx = (i / ncol) + (i % ncol) * nrow;
+
+       if (idx < nfeat)
+       {
+           int last_col = (i + 1) % ncol == 0;
+
+           msg_puts((char_u *)features[idx]);
+           if (last_col)
+           {
+               if (msg_col > 0)
+                   msg_putchar('\n');
+           }
+           else
+           {
+               while (msg_col % width)
+                   msg_putchar(' ');
+           }
+       }
+       else
+       {
+           if (msg_col > 0)
+               msg_putchar('\n');
+       }
+    }
+}
+
     void
 list_version()
 {
@@ -833,9 +916,6 @@ list_version()
 # endif
 #endif
 
-#ifdef RISCOS
-    MSG_PUTS(_("\nRISC OS version"));
-#endif
 #ifdef VMS
     MSG_PUTS(_("\nOpenVMS version"));
 # ifdef HAVE_PATHDEF
@@ -974,15 +1054,8 @@ list_version()
 #endif
     version_msg(_("  Features included (+) or not (-):\n"));
 
-    /* print all the features */
-    for (i = 0; features[i] != NULL; ++i)
-    {
-       version_msg(features[i]);
-       if (msg_col > 0)
-           version_msg(" ");
-    }
+    list_features();
 
-    version_msg("\n");
 #ifdef SYS_VIMRC_FILE
     version_msg(_("   system vimrc file: \""));
     version_msg(SYS_VIMRC_FILE);
@@ -1093,6 +1166,21 @@ version_msg(s)
 static void do_intro_line __ARGS((int row, char_u *mesg, int add_version, int attr));
 
 /*
+ * Show the intro message when not editing a file.
+ */
+    void
+maybe_intro_message()
+{
+    if (bufempty()
+           && curbuf->b_fname == NULL
+#ifdef FEAT_WINDOWS
+           && firstwin->w_next == NULL
+#endif
+           && vim_strchr(p_shm, SHM_INTRO) == NULL)
+       intro_message(FALSE);
+}
+
+/*
  * Give an introductory message about Vim.
  * Only used when starting Vim on an empty file, without a file name.
  * Or with the ":intro" command (for Sven :-).
@@ -1262,14 +1350,11 @@ do_intro_line(row, mesg, add_version, attr)
        if (highest_patch())
        {
            /* Check for 9.9x or 9.9xx, alpha/beta version */
-           if (isalpha((int)mediumVersion[3]))
+           if (isalpha((int)vers[3]))
            {
-               if (isalpha((int)mediumVersion[4]))
-                   sprintf((char *)vers + 5, ".%d%s", highest_patch(),
-                                                          mediumVersion + 5);
-               else
-                   sprintf((char *)vers + 4, ".%d%s", highest_patch(),
-                                                          mediumVersion + 4);
+               int len = (isalpha((int)vers[4])) ? 5 : 4;
+               sprintf((char *)vers + len, ".%d%s", highest_patch(),
+                                                        mediumVersion + len);
            }
            else
                sprintf((char *)vers + 3, ".%d", highest_patch());
index e08e115..173d3b0 100644 (file)
 
 #define VIM_VERSION_MAJOR               7
 #define VIM_VERSION_MAJOR_STR          "7"
-#define VIM_VERSION_MINOR               3
-#define VIM_VERSION_MINOR_STR          "3"
+#define VIM_VERSION_MINOR               4
+#define VIM_VERSION_MINOR_STR          "4"
 #define VIM_VERSION_100            (VIM_VERSION_MAJOR * 100 + VIM_VERSION_MINOR)
 
-#define VIM_VERSION_BUILD               277
-#define VIM_VERSION_BUILD_BCD          0x115
-#define VIM_VERSION_BUILD_STR          "277"
+#define VIM_VERSION_BUILD               280
+#define VIM_VERSION_BUILD_BCD          0x118
+#define VIM_VERSION_BUILD_STR          "280"
 #define VIM_VERSION_PATCHLEVEL          0
 #define VIM_VERSION_PATCHLEVEL_STR     "0"
 /* Used by MacOS port should be one of: development, alpha, beta, final */
@@ -33,8 +33,8 @@
  * VIM_VERSION_MEDIUM is used for the startup-screen.
  * VIM_VERSION_LONG is used for the ":version" command and "Vim -h".
  */
-#define VIM_VERSION_NODOT      "vim73"
-#define VIM_VERSION_SHORT      "7.3"
-#define VIM_VERSION_MEDIUM     "7.3"
-#define VIM_VERSION_LONG       "VIM - Vi IMproved 7.3 (2010 Aug 15)"
-#define VIM_VERSION_LONG_DATE  "VIM - Vi IMproved 7.3 (2010 Aug 15, compiled "
+#define VIM_VERSION_NODOT      "vim74"
+#define VIM_VERSION_SHORT      "7.4"
+#define VIM_VERSION_MEDIUM     "7.4"
+#define VIM_VERSION_LONG       "VIM - Vi IMproved 7.4 (2013 Aug 10)"
+#define VIM_VERSION_LONG_DATE  "VIM - Vi IMproved 7.4 (2013 Aug 10, compiled "
index 57fe0ba..a3edae9 100644 (file)
@@ -1,4 +1,4 @@
 CODE PRELOAD EXECUTEONLY
 DATA MULTIPLE SHARED
-DESCRIPTION 'Vim 7.3'
+DESCRIPTION 'Vim 7.4'
 HEAPSIZE 0,0
index b9ce325..3d61f3a 100644 (file)
--- a/src/vim.h
+++ b/src/vim.h
 # endif
 #endif
 
+#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64) \
+       || defined(__EMX__)
+# include "vimio.h"
+#endif
+
 /* ============ the header file puzzle (ca. 50-100 pieces) ========= */
 
 #ifdef HAVE_CONFIG_H   /* GNU autoconf (or something else) was here */
 # endif
 # ifndef FEAT_CLIPBOARD
 #  define FEAT_CLIPBOARD
+#  if defined(FEAT_SMALL) && !defined(FEAT_MOUSE)
+#   define FEAT_MOUSE
+#  endif
 # endif
 #endif
 #if defined(MACOS_X) || defined(MACOS_CLASSIC)
-#  define MACOS
+# define MACOS
 #endif
 #if defined(MACOS_X) && defined(MACOS_CLASSIC)
     Error: To compile for both MACOS X and Classic use a Classic Carbon
     || defined(FEAT_GUI_W32) \
     || defined(FEAT_GUI_W16) \
     || defined(FEAT_GUI_PHOTON)
+# define FEAT_GUI_ENABLED  /* also defined with NO_X11_INCLUDES */
 # if !defined(FEAT_GUI) && !defined(NO_X11_INCLUDES)
 #  define FEAT_GUI
 # endif
 #  define SIZEOF_INT 2
 # endif
 #endif
-#ifdef RISCOS
-# define SIZEOF_INT 4
-#endif
 
 
 #include "feature.h"   /* #defines for optionals and features */
 #endif
 
 #ifdef NO_X11_INCLUDES
-    /* In os_mac_conv.c NO_X11_INCLUDES is defined to avoid X11 headers.
-     * Disable all X11 related things to avoid conflicts. */
+    /* In os_mac_conv.c and os_macosx.m NO_X11_INCLUDES is defined to avoid
+     * X11 headers.  Disable all X11 related things to avoid conflicts. */
 # ifdef FEAT_X11
 #  undef FEAT_X11
 # endif
 # include "os_mac.h"
 #endif
 
-#ifdef RISCOS
-# include "os_riscos.h"
-#endif
-
 #ifdef __QNX__
 # include "os_qnx.h"
 #endif
@@ -475,6 +477,11 @@ typedef unsigned long u8char_T;        /* long should be 32 bits or more */
 # include <sys/stat.h>
 #endif
 
+#if defined(HAVE_ERRNO_H) || defined(DJGPP) || defined(WIN16) \
+       || defined(WIN32) || defined(_WIN64) || defined(__EMX__)
+# include <errno.h>
+#endif
+
 /*
  * Allow other (non-unix) systems to configure themselves now
  * These are also in os_unix.h, because osdef.sh needs them there.
@@ -486,7 +493,7 @@ typedef unsigned long u8char_T;         /* long should be 32 bits or more */
 #  include <string.h>
 # endif
 # if defined(HAVE_STRINGS_H) && !defined(NO_STRINGS_WITH_STRING_H)
-#   include <strings.h>
+#  include <strings.h>
 # endif
 # ifdef HAVE_STAT_H
 #  include <stat.h>
@@ -511,22 +518,22 @@ typedef unsigned long u8char_T;       /* long should be 32 bits or more */
 # include <stdarg.h>
 #endif
 
-# if defined(HAVE_SYS_SELECT_H) && \
+#if defined(HAVE_SYS_SELECT_H) && \
        (!defined(HAVE_SYS_TIME_H) || defined(SYS_SELECT_WITH_SYS_TIME))
-#  include <sys/select.h>
-# endif
+# include <sys/select.h>
+#endif
 
-# ifndef HAVE_SELECT
-#  ifdef HAVE_SYS_POLL_H
-#   include <sys/poll.h>
+#ifndef HAVE_SELECT
+# ifdef HAVE_SYS_POLL_H
+#  include <sys/poll.h>
+#  define HAVE_POLL
+# else
+#  ifdef HAVE_POLL_H
+#   include <poll.h>
 #   define HAVE_POLL
-#  else
-#   ifdef HAVE_POLL_H
-#    include <poll.h>
-#    define HAVE_POLL
-#   endif
 #  endif
 # endif
+#endif
 
 /* ================ end of the header file puzzle =============== */
 
@@ -776,6 +783,10 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
 #define EXPAND_FILETYPE                37
 #define EXPAND_FILES_IN_PATH   38
 #define EXPAND_OWNSYNTAX       39
+#define EXPAND_LOCALES         40
+#define EXPAND_HISTORY         41
+#define EXPAND_USER            42
+#define EXPAND_SYNTIME         43
 
 /* Values for exmode_active (0 is no exmode) */
 #define EXMODE_NORMAL          1
@@ -789,6 +800,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
 #define WILD_PREV              5
 #define WILD_ALL               6
 #define WILD_LONGEST           7
+#define WILD_ALL_KEEP          8
 
 #define WILD_LIST_NOTFOUND     1
 #define WILD_HOME_REPLACE      2
@@ -798,6 +810,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
 #define WILD_KEEP_ALL          32
 #define WILD_SILENT            64
 #define WILD_ESCAPE            128
+#define WILD_ICASE             256
 
 /* Flags for expand_wildcards() */
 #define EW_DIR         0x01    /* include directory names */
@@ -808,6 +821,9 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
 #define EW_SILENT      0x20    /* don't print "1 returned" from shell */
 #define EW_EXEC                0x40    /* executable files */
 #define EW_PATH                0x80    /* search in 'path' too */
+#define EW_ICASE       0x100   /* ignore case */
+#define EW_NOERROR     0x200   /* no error for bad regexp */
+#define EW_NOTWILD     0x400   /* add match with literal name if exists */
 /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
  * is used when executing commands and EW_SILENT for interactive expanding. */
 
@@ -1061,12 +1077,14 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
 #define INSCHAR_DO_COM 2       /* format comments */
 #define INSCHAR_CTRLV  4       /* char typed just after CTRL-V */
 #define INSCHAR_NO_FEX 8       /* don't use 'formatexpr' */
+#define INSCHAR_COM_LIST 16    /* format comments with list/2nd line indent */
 
 /* flags for open_line() */
 #define OPENLINE_DELSPACES  1  /* delete spaces after cursor */
 #define OPENLINE_DO_COM            2   /* format comments */
 #define OPENLINE_KEEPTRAIL  4  /* keep trailing spaces */
 #define OPENLINE_MARKFIX    8  /* fix mark positions */
+#define OPENLINE_COM_LIST  16  /* format comments with list/2nd line indent */
 
 /*
  * There are four history tables:
@@ -1228,6 +1246,7 @@ enum auto_event
     EVENT_CMDWINENTER,         /* after entering the cmdline window */
     EVENT_CMDWINLEAVE,         /* before leaving the cmdline window */
     EVENT_COLORSCHEME,         /* after loading a colorscheme */
+    EVENT_COMPLETEDONE,                /* after finishing insert complete */
     EVENT_FILEAPPENDPOST,      /* after appending to a file */
     EVENT_FILEAPPENDPRE,       /* before appending to a file */
     EVENT_FILEAPPENDCMD,       /* append to a file using command */
@@ -1253,8 +1272,9 @@ enum auto_event
     EVENT_INSERTENTER,         /* when entering Insert mode */
     EVENT_INSERTLEAVE,         /* when leaving Insert mode */
     EVENT_MENUPOPUP,           /* just before popup menu is displayed */
-    EVENT_QUICKFIXCMDPOST,     /* after :make, :grep etc */
-    EVENT_QUICKFIXCMDPRE,      /* before :make, :grep etc */
+    EVENT_QUICKFIXCMDPOST,     /* after :make, :grep etc. */
+    EVENT_QUICKFIXCMDPRE,      /* before :make, :grep etc. */
+    EVENT_QUITPRE,             /* before :quit */
     EVENT_SESSIONLOADPOST,     /* after loading a session file */
     EVENT_STDINREADPOST,       /* after reading from stdin */
     EVENT_STDINREADPRE,                /* before reading from stdin */
@@ -1269,6 +1289,7 @@ enum auto_event
     EVENT_WINENTER,            /* after entering a window */
     EVENT_WINLEAVE,            /* before leaving a window */
     EVENT_ENCODINGCHANGED,     /* after changing the 'encoding' option */
+    EVENT_INSERTCHARPRE,       /* before inserting a char */
     EVENT_CURSORHOLD,          /* cursor in same position for a while */
     EVENT_CURSORHOLDI,         /* idem, in Insert mode */
     EVENT_FUNCUNDEFINED,       /* if calling a function which doesn't exist */
@@ -1283,6 +1304,8 @@ enum auto_event
     EVENT_TABENTER,            /* after entering a tab page */
     EVENT_SHELLCMDPOST,                /* after ":!cmd" */
     EVENT_SHELLFILTERPOST,     /* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
+    EVENT_TEXTCHANGED,         /* text was modified */
+    EVENT_TEXTCHANGEDI,                /* text was modified in Insert mode*/
     NUM_EVENTS                 /* MUST be the last one */
 };
 
@@ -1307,6 +1330,7 @@ typedef enum
     , HLF_M        /* "--More--" message */
     , HLF_CM       /* Mode (e.g., "-- INSERT --") */
     , HLF_N        /* line number for ":number" and ":#" commands */
+    , HLF_CLN      /* current line number */
     , HLF_R        /* return to continue message and yes/no questions */
     , HLF_S        /* status lines */
     , HLF_SNC      /* status lines of not-current windows */
@@ -1344,7 +1368,7 @@ typedef enum
 /* The HL_FLAGS must be in the same order as the HLF_ enums!
  * When changing this also adjust the default for 'highlight'. */
 #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
-                 'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
+                 'n', 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
                  'f', 'F', 'A', 'C', 'D', 'T', '-', '>', \
                  'B', 'P', 'R', 'L', \
                  '+', '=', 'x', 'X', '*', '#', '_', '!', '.', 'o'}
@@ -1423,6 +1447,8 @@ typedef UINT32_TYPEDEF UINT32_T;
 
 #define IOSIZE    (1024+1)     /* file i/o and sprintf buffer size */
 
+#define DIALOG_MSG_SIZE 1000   /* buffer size for dialog_msg() */
+
 #ifdef FEAT_MBYTE
 # define MSG_BUF_LEN 480       /* length of buffer for small messages */
 # define MSG_BUF_CLEN  (MSG_BUF_LEN / 6)    /* cell length (worst case: utf-8
@@ -1605,18 +1631,8 @@ void mch_memmove __ARGS((void *, void *, size_t));
  * (this does not account for maximum name lengths and things like "../dir",
  * thus it is not 100% accurate!)
  */
-#ifdef CASE_INSENSITIVE_FILENAME
-# ifdef BACKSLASH_IN_FILENAME
-#  define fnamecmp(x, y) vim_fnamecmp((x), (y))
-#  define fnamencmp(x, y, n) vim_fnamencmp((x), (y), (size_t)(n))
-# else
-#  define fnamecmp(x, y) MB_STRICMP((x), (y))
-#  define fnamencmp(x, y, n) MB_STRNICMP((x), (y), (n))
-# endif
-#else
-# define fnamecmp(x, y) strcmp((char *)(x), (char *)(y))
-# define fnamencmp(x, y, n) strncmp((char *)(x), (char *)(y), (size_t)(n))
-#endif
+#define fnamecmp(x, y) vim_fnamecmp((char_u *)(x), (char_u *)(y))
+#define fnamencmp(x, y, n) vim_fnamencmp((char_u *)(x), (char_u *)(y), (size_t)(n))
 
 #ifdef HAVE_MEMSET
 # define vim_memset(ptr, c, size)   memset((ptr), (c), (size))
@@ -1640,6 +1656,11 @@ int vim_memcmp __ARGS((void *, void *, size_t));
 # define USE_INPUT_BUF
 #endif
 
+#ifndef EINTR
+# define read_eintr(fd, buf, count) vim_read((fd), (buf), (count))
+# define write_eintr(fd, buf, count) vim_write((fd), (buf), (count))
+#endif
+
 #ifdef MSWIN
 /* On MS-Windows the third argument isn't size_t.  This matters for Win64,
  * where sizeof(size_t)==8, not 4 */
@@ -1683,6 +1704,8 @@ int vim_memcmp __ARGS((void *, void *, size_t));
  * character of up to 6 bytes, or one 16-bit character of up to three bytes
  * plus six following composing characters of three bytes each. */
 # define MB_MAXBYTES   21
+#else
+# define MB_MAXBYTES   1
 #endif
 
 #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
@@ -1842,15 +1865,16 @@ typedef int proftime_T;     /* dummy for function prototypes */
 #define VV_OP          52
 #define VV_SEARCHFORWARD 53
 #define VV_OLDFILES    54
-#define VV_LEN         55      /* number of v: vars */
+#define VV_WINDOWID    55
+#define VV_LEN         56      /* number of v: vars */
 
 #ifdef FEAT_CLIPBOARD
 
 /* VIM_ATOM_NAME is the older Vim-specific selection type for X11.  Still
  * supported for when a mix of Vim versions is used. VIMENC_ATOM_NAME includes
  * the encoding to support Vims using different 'encoding' values. */
-#define VIM_ATOM_NAME "_VIM_TEXT"
-#define VIMENC_ATOM_NAME "_VIMENC_TEXT"
+# define VIM_ATOM_NAME "_VIM_TEXT"
+# define VIMENC_ATOM_NAME "_VIMENC_TEXT"
 
 /* Selection states for modeless selection */
 # define SELECT_CLEARED                0
@@ -1899,7 +1923,7 @@ typedef struct VimClipboard
     GdkAtom     gtk_sel_atom;  /* PRIMARY/CLIPBOARD selection ID */
 # endif
 
-# ifdef MSWIN
+# if defined(MSWIN) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
     int_u      format;         /* Vim's own special clipboard format */
     int_u      format_raw;     /* Vim's raw text clipboard format */
 # endif
@@ -1996,6 +2020,7 @@ typedef int VimClipboard; /* This is required for the prototypes. */
  #pragma warning(disable : 4312)
 #endif
 
+/* Note: a NULL argument for vim_realloc() is not portable, don't use it. */
 #if defined(MEM_PROFILE)
 # define vim_realloc(ptr, size)  mem_realloc((ptr), (size))
 #else
@@ -2098,6 +2123,12 @@ typedef int VimClipboard;        /* This is required for the prototypes. */
 # endif
 #endif
 
+#if defined(FEAT_BROWSE) && defined(GTK_CHECK_VERSION)
+# if GTK_CHECK_VERSION(2,4,0)
+#  define USE_FILE_CHOOSER
+# endif
+#endif
+
 #ifndef FEAT_NETBEANS_INTG
 # undef NBDEBUG
 #endif
@@ -2149,10 +2180,6 @@ typedef int VimClipboard;        /* This is required for the prototypes. */
   /* Borland has the structure stati64 but not _stati64 */
 #  define _stati64 stati64
 # endif
-
-# include <EXTERN.h>
-# include <perl.h>
-# include <XSUB.h>
 #endif
 
 /* values for vim_handle_signal() that are not a signal */
@@ -2193,4 +2220,30 @@ typedef int VimClipboard;        /* This is required for the prototypes. */
 #define MSCR_LEFT      -1
 #define MSCR_RIGHT     -2
 
+#define KEYLEN_PART_KEY -1     /* keylen value for incomplete key-code */
+#define KEYLEN_PART_MAP -2     /* keylen value for incomplete mapping */
+#define KEYLEN_REMOVED  9999   /* keylen value for removed sequence */
+
+/* Return values from win32_fileinfo(). */
+#define FILEINFO_OK         0
+#define FILEINFO_ENC_FAIL    1 /* enc_to_utf16() failed */
+#define FILEINFO_READ_FAIL   2 /* CreateFile() failed */
+#define FILEINFO_INFO_FAIL   3 /* GetFileInformationByHandle() failed */
+
+/* Return value from get_option_value_strict */
+#define SOPT_BOOL      0x01    /* Boolean option */
+#define SOPT_NUM       0x02    /* Number option */
+#define SOPT_STRING    0x04    /* String option */
+#define SOPT_GLOBAL    0x08    /* Option has global value */
+#define SOPT_WIN       0x10    /* Option has window-local value */
+#define SOPT_BUF       0x20    /* Option has buffer-local value */
+#define SOPT_UNSET     0x40    /* Option does not have local value set */
+
+#define SREQ_GLOBAL    0       /* Request global option */
+#define SREQ_WIN       1       /* Request window-local option */
+#define SREQ_BUF       2       /* Request buffer-local option */
+
+/* Character used as separated in autoload function/variable names. */
+#define AUTOLOAD_CHAR '#'
+
 #endif /* VIM__H */
index e9ecd64..50a2bb1 100644 (file)
@@ -91,7 +91,7 @@ BEGIN
        VALUE "FileDescription",        "Vi Improved - A Text Editor\0"
        VALUE "FileVersion",            VIM_VERSION_MAJOR_STR ", " VIM_VERSION_MINOR_STR ", " VIM_VERSION_BUILD_STR ", " VIM_VERSION_PATCHLEVEL_STR  "\0"
        VALUE "InternalName",           "VIM\0"
-       VALUE "LegalCopyright",         "Copyright \251 1996-2008\0"
+       VALUE "LegalCopyright",         "Copyright \251 1996\0"
        VALUE "LegalTrademarks",        "Vim\0"
        VALUE "OriginalFilename",       "VIM.EXE\0"
        VALUE "ProductName",            "Vim\0"
@@ -116,8 +116,8 @@ STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 FONT 8, "Helv"
 BEGIN
     DEFPUSHBUTTON   "Cancel", IDCANCEL, 85, 60, 40, 14
-    CTEXT          "Printing",IDC_PRINTTEXT1,23,15,157,8
-    CTEXT          " ",IDC_PRINTTEXT2,23,25,157,8
-    CTEXT          "Initializing...",IDC_PROGRESS,24,38,157,8
+    CTEXT          "Printing",IDC_PRINTTEXT1,23,15,157,9
+    CTEXT          " ",IDC_PRINTTEXT2,23,25,157,9
+    CTEXT          "Initializing...",IDC_PROGRESS,24,38,157,9
     GROUPBOX       "",IDC_BOX1,19,9,170,47
 END
index 21bc0ee..c982c0f 100644 (file)
@@ -1,5 +1,5 @@
 CODE PRELOAD EXECUTEONLY
 DATA MULTIPLE SHARED
-DESCRIPTION 'Vim 7.3'
+DESCRIPTION 'Vim 7.4'
 STACKSIZE 16000
 HEAPSIZE 10000
index 189bff1..00395e8 100644 (file)
@@ -67,7 +67,7 @@ BEGIN
        VALUE "FileDescription",        "Vi Improved - A Text Editor\0"
        VALUE "FileVersion",            VIM_VERSION_MAJOR_STR ", " VIM_VERSION_MINOR_STR ", " VIM_VERSION_BUILD_STR ", " VIM_VERSION_PATCHLEVEL_STR  "\0"
        VALUE "InternalName",           "VIM\0"
-       VALUE "LegalCopyright",         "Copyright \251 1996-2005\0"
+       VALUE "LegalCopyright",         "Copyright \251 1996\0"
        VALUE "LegalTrademarks",        "Vim\0"
        VALUE "OriginalFilename",       "VIM.EXE\0"
        VALUE "ProductName",            "Vim\0"
index 71a52cd..a4dd030 100644 (file)
@@ -13,4 +13,7 @@
 # define _CRT_NONSTDC_NO_DEPRECATE
 #endif
 
-#include <io.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <io.h>
+#endif
diff --git a/src/winclip.c b/src/winclip.c
new file mode 100644 (file)
index 0000000..0f110ff
--- /dev/null
@@ -0,0 +1,800 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+ * Do ":help uganda"  in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ * See README.txt for an overview of the Vim source code.
+ */
+
+/*
+ * winclip.c
+ *
+ * Routines common to both Win16 and Win32 for clipboard handling.
+ * Also used by Cygwin, using os_unix.c.
+ */
+
+#ifdef WIN16
+# ifdef __BORLANDC__
+#  pragma warn -par
+#  pragma warn -ucp
+#  pragma warn -use
+#  pragma warn -aus
+# endif
+#endif
+
+#include "vimio.h"
+#include "vim.h"
+
+/*
+ * Compile only the clipboard handling features when compiling for cygwin
+ * posix environment.
+ */
+#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
+# define WIN3264
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# include "winclip.pro"
+#endif
+
+/*
+ * When generating prototypes for Win32 on Unix, these lines make the syntax
+ * errors disappear.  They do not need to be correct.
+ */
+#ifdef PROTO
+#define WINAPI
+#define WINBASEAPI
+typedef int DWORD;
+typedef int LPBOOL;
+typedef int LPCSTR;
+typedef int LPCWSTR;
+typedef int LPSTR;
+typedef int LPWSTR;
+typedef int UINT;
+#endif
+
+#if defined(FEAT_MBYTE) || defined(PROTO)
+/*
+ * Convert an UTF-8 string to UTF-16.
+ * "instr[inlen]" is the input.  "inlen" is in bytes.
+ * When "outstr" is NULL only return the number of UTF-16 words produced.
+ * Otherwise "outstr" must be a buffer of sufficient size.
+ * Returns the number of UTF-16 words produced.
+ */
+    int
+utf8_to_utf16(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
+{
+    int                outlen = 0;
+    char_u     *p = instr;
+    int                todo = inlen;
+    int                l;
+    int                ch;
+
+    while (todo > 0)
+    {
+       /* Only convert if we have a complete sequence. */
+       l = utf_ptr2len_len(p, todo);
+       if (l > todo)
+       {
+           /* Return length of incomplete sequence. */
+           if (unconvlenp != NULL)
+               *unconvlenp = todo;
+           break;
+       }
+
+       ch = utf_ptr2char(p);
+       if (ch >= 0x10000)
+       {
+           /* non-BMP character, encoding with surrogate pairs */
+           ++outlen;
+           if (outstr != NULL)
+           {
+               *outstr++ = (0xD800 - (0x10000 >> 10)) + (ch >> 10);
+               *outstr++ = 0xDC00 | (ch & 0x3FF);
+           }
+       }
+       else if (outstr != NULL)
+           *outstr++ = ch;
+       ++outlen;
+       p += l;
+       todo -= l;
+    }
+
+    return outlen;
+}
+
+/*
+ * Convert an UTF-16 string to UTF-8.
+ * The input is "instr[inlen]" with "inlen" in number of UTF-16 words.
+ * When "outstr" is NULL only return the required number of bytes.
+ * Otherwise "outstr" must be a buffer of sufficient size.
+ * Return the number of bytes produced.
+ */
+    int
+utf16_to_utf8(short_u *instr, int inlen, char_u *outstr)
+{
+    int                outlen = 0;
+    int                todo = inlen;
+    short_u    *p = instr;
+    int                l;
+    int                ch, ch2;
+
+    while (todo > 0)
+    {
+       ch = *p;
+       if (ch >= 0xD800 && ch <= 0xDBFF && todo > 1)
+       {
+           /* surrogate pairs handling */
+           ch2 = p[1];
+           if (ch2 >= 0xDC00 && ch2 <= 0xDFFF)
+           {
+               ch = ((ch - 0xD800) << 10) + (ch2 & 0x3FF) + 0x10000;
+               ++p;
+               --todo;
+           }
+       }
+       if (outstr != NULL)
+       {
+           l = utf_char2bytes(ch, outstr);
+           outstr += l;
+       }
+       else
+           l = utf_char2len(ch);
+       ++p;
+       outlen += l;
+       --todo;
+    }
+
+    return outlen;
+}
+
+/*
+ * Call MultiByteToWideChar() and allocate memory for the result.
+ * Returns the result in "*out[*outlen]" with an extra zero appended.
+ * "outlen" is in words.
+ */
+    void
+MultiByteToWideChar_alloc(UINT cp, DWORD flags,
+       LPCSTR in, int inlen,
+       LPWSTR *out, int *outlen)
+{
+    *outlen = MultiByteToWideChar(cp, flags, in, inlen, 0, 0);
+    /* Add one one word to avoid a zero-length alloc(). */
+    *out = (LPWSTR)alloc(sizeof(WCHAR) * (*outlen + 1));
+    if (*out != NULL)
+    {
+       MultiByteToWideChar(cp, flags, in, inlen, *out, *outlen);
+       (*out)[*outlen] = 0;
+    }
+}
+
+/*
+ * Call WideCharToMultiByte() and allocate memory for the result.
+ * Returns the result in "*out[*outlen]" with an extra NUL appended.
+ */
+    void
+WideCharToMultiByte_alloc(UINT cp, DWORD flags,
+       LPCWSTR in, int inlen,
+       LPSTR *out, int *outlen,
+       LPCSTR def, LPBOOL useddef)
+{
+    *outlen = WideCharToMultiByte(cp, flags, in, inlen, NULL, 0, def, useddef);
+    /* Add one one byte to avoid a zero-length alloc(). */
+    *out = (LPSTR)alloc((unsigned)*outlen + 1);
+    if (*out != NULL)
+    {
+       WideCharToMultiByte(cp, flags, in, inlen, *out, *outlen, def, useddef);
+       (*out)[*outlen] = 0;
+    }
+}
+
+#endif /* FEAT_MBYTE */
+
+#ifdef FEAT_CLIPBOARD
+/*
+ * Clipboard stuff, for cutting and pasting text to other windows.
+ */
+
+    void
+win_clip_init(void)
+{
+    clip_init(TRUE);
+
+    /*
+     * Vim's own clipboard format recognises whether the text is char, line,
+     * or rectangular block.  Only useful for copying between two Vims.
+     * "VimClipboard" was used for previous versions, using the first
+     * character to specify MCHAR, MLINE or MBLOCK.
+     */
+    clip_star.format = RegisterClipboardFormat("VimClipboard2");
+    clip_star.format_raw = RegisterClipboardFormat("VimRawBytes");
+}
+
+/* Type used for the clipboard type of Vim's data. */
+typedef struct
+{
+    int type;          /* MCHAR, MBLOCK or MLINE */
+    int txtlen;                /* length of CF_TEXT in bytes */
+    int ucslen;                /* length of CF_UNICODETEXT in words */
+    int rawlen;                /* length of clip_star.format_raw, including encoding,
+                          excluding terminating NUL */
+} VimClipType_t;
+
+/*
+ * Make vim the owner of the current selection.  Return OK upon success.
+ */
+/*ARGSUSED*/
+    int
+clip_mch_own_selection(VimClipboard *cbd)
+{
+    /*
+     * Never actually own the clipboard.  If another application sets the
+     * clipboard, we don't want to think that we still own it.
+     */
+    return FAIL;
+}
+
+/*
+ * Make vim NOT the owner of the current selection.
+ */
+/*ARGSUSED*/
+    void
+clip_mch_lose_selection(VimClipboard *cbd)
+{
+    /* Nothing needs to be done here */
+}
+
+/*
+ * Copy "str[*size]" into allocated memory, changing CR-NL to NL.
+ * Return the allocated result and the size in "*size".
+ * Returns NULL when out of memory.
+ */
+    static char_u *
+crnl_to_nl(const char_u *str, int *size)
+{
+    int                pos = 0;
+    int                str_len = *size;
+    char_u     *ret;
+    char_u     *retp;
+
+    /* Avoid allocating zero bytes, it generates an error message. */
+    ret = lalloc((long_u)(str_len == 0 ? 1 : str_len), TRUE);
+    if (ret != NULL)
+    {
+       retp = ret;
+       for (pos = 0; pos < str_len; ++pos)
+       {
+           if (str[pos] == '\r' && str[pos + 1] == '\n')
+           {
+               ++pos;
+               --(*size);
+           }
+           *retp++ = str[pos];
+       }
+    }
+
+    return ret;
+}
+
+/*
+ * Wait for another process to Close the Clipboard.
+ * Returns TRUE for success.
+ */
+    static int
+vim_open_clipboard(void)
+{
+    int delay = 10;
+
+    while (!OpenClipboard(NULL))
+    {
+       if (delay > 500)
+           return FALSE;  /* waited too long, give up */
+       Sleep(delay);
+       delay *= 2;     /* wait for 10, 20, 40, 80, etc. msec */
+    }
+    return TRUE;
+}
+
+/*
+ * Get the current selection and put it in the clipboard register.
+ *
+ * NOTE: Must use GlobalLock/Unlock here to ensure Win32s compatibility.
+ * On NT/W95 the clipboard data is a fixed global memory object and
+ * so its handle = its pointer.
+ * On Win32s, however, co-operation with the Win16 system means that
+ * the clipboard data is moveable and its handle is not a pointer at all,
+ * so we can't just cast the return value of GetClipboardData to (char_u*).
+ * <VN>
+ */
+    void
+clip_mch_request_selection(VimClipboard *cbd)
+{
+    VimClipType_t      metadata = { -1, -1, -1, -1 };
+    HGLOBAL            hMem = NULL;
+    char_u             *str = NULL;
+#if defined(FEAT_MBYTE) && defined(WIN3264)
+    char_u             *to_free = NULL;
+#endif
+#ifdef FEAT_MBYTE
+    HGLOBAL            rawh = NULL;
+#endif
+    int                        str_size = 0;
+    int                        maxlen;
+    size_t             n;
+
+    /*
+     * Don't pass GetActiveWindow() as an argument to OpenClipboard() because
+     * then we can't paste back into the same window for some reason - webb.
+     */
+    if (!vim_open_clipboard())
+       return;
+
+    /* Check for vim's own clipboard format first.  This only gets the type of
+     * the data, still need to use CF_UNICODETEXT or CF_TEXT for the text. */
+    if (IsClipboardFormatAvailable(cbd->format))
+    {
+       VimClipType_t   *meta_p;
+       HGLOBAL         meta_h;
+
+       /* We have metadata on the clipboard; try to get it. */
+       if ((meta_h = GetClipboardData(cbd->format)) != NULL
+               && (meta_p = (VimClipType_t *)GlobalLock(meta_h)) != NULL)
+       {
+           /* The size of "VimClipType_t" changed, "rawlen" was added later.
+            * Only copy what is available for backwards compatibility. */
+           n = sizeof(VimClipType_t);
+           if (GlobalSize(meta_h) < n)
+               n = GlobalSize(meta_h);
+           memcpy(&metadata, meta_p, n);
+           GlobalUnlock(meta_h);
+       }
+    }
+
+#ifdef FEAT_MBYTE
+    /* Check for Vim's raw clipboard format first.  This is used without
+     * conversion, but only if 'encoding' matches. */
+    if (IsClipboardFormatAvailable(cbd->format_raw)
+                                     && metadata.rawlen > (int)STRLEN(p_enc))
+    {
+       /* We have raw data on the clipboard; try to get it. */
+       if ((rawh = GetClipboardData(cbd->format_raw)) != NULL)
+       {
+           char_u      *rawp;
+
+           rawp = (char_u *)GlobalLock(rawh);
+           if (rawp != NULL && STRCMP(p_enc, rawp) == 0)
+           {
+               n = STRLEN(p_enc) + 1;
+               str = rawp + n;
+               str_size = (int)(metadata.rawlen - n);
+           }
+           else
+           {
+               GlobalUnlock(rawh);
+               rawh = NULL;
+           }
+       }
+    }
+    if (str == NULL)
+    {
+#endif
+
+#if defined(FEAT_MBYTE) && defined(WIN3264)
+    /* Try to get the clipboard in Unicode if it's not an empty string. */
+    if (IsClipboardFormatAvailable(CF_UNICODETEXT) && metadata.ucslen != 0)
+    {
+       HGLOBAL hMemW;
+
+       if ((hMemW = GetClipboardData(CF_UNICODETEXT)) != NULL)
+       {
+           WCHAR *hMemWstr = (WCHAR *)GlobalLock(hMemW);
+
+           /* Use the length of our metadata if possible, but limit it to the
+            * GlobalSize() for safety. */
+           maxlen = (int)(GlobalSize(hMemW) / sizeof(WCHAR));
+           if (metadata.ucslen >= 0)
+           {
+               if (metadata.ucslen > maxlen)
+                   str_size = maxlen;
+               else
+                   str_size = metadata.ucslen;
+           }
+           else
+           {
+               for (str_size = 0; str_size < maxlen; ++str_size)
+                   if (hMemWstr[str_size] == NUL)
+                       break;
+           }
+           to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
+           GlobalUnlock(hMemW);
+       }
+    }
+    else
+#endif
+    /* Get the clipboard in the Active codepage. */
+    if (IsClipboardFormatAvailable(CF_TEXT))
+    {
+       if ((hMem = GetClipboardData(CF_TEXT)) != NULL)
+       {
+           str = (char_u *)GlobalLock(hMem);
+
+           /* The length is either what our metadata says or the strlen().
+            * But limit it to the GlobalSize() for safety. */
+           maxlen = (int)GlobalSize(hMem);
+           if (metadata.txtlen >= 0)
+           {
+               if (metadata.txtlen > maxlen)
+                   str_size = maxlen;
+               else
+                   str_size = metadata.txtlen;
+           }
+           else
+           {
+               for (str_size = 0; str_size < maxlen; ++str_size)
+                   if (str[str_size] == NUL)
+                       break;
+           }
+
+# if defined(FEAT_MBYTE) && defined(WIN3264)
+           /* The text is in the active codepage.  Convert to 'encoding',
+            * going through UTF-16. */
+           acp_to_enc(str, str_size, &to_free, &maxlen);
+           if (to_free != NULL)
+           {
+               str_size = maxlen;
+               str = to_free;
+           }
+# endif
+       }
+    }
+#ifdef FEAT_MBYTE
+    }
+#endif
+
+    if (str != NULL && *str != NUL)
+    {
+       char_u *temp_clipboard;
+
+       /* If the type is not known detect it. */
+       if (metadata.type == -1)
+           metadata.type = MAUTO;
+
+       /* Translate <CR><NL> into <NL>. */
+       temp_clipboard = crnl_to_nl(str, &str_size);
+       if (temp_clipboard != NULL)
+       {
+           clip_yank_selection(metadata.type, temp_clipboard, str_size, cbd);
+           vim_free(temp_clipboard);
+       }
+    }
+
+    /* unlock the global object */
+    if (hMem != NULL)
+       GlobalUnlock(hMem);
+#ifdef FEAT_MBYTE
+    if (rawh != NULL)
+       GlobalUnlock(rawh);
+#endif
+    CloseClipboard();
+#if defined(FEAT_MBYTE) && defined(WIN3264)
+    vim_free(to_free);
+#endif
+}
+
+/*
+ * Send the current selection to the clipboard.
+ */
+    void
+clip_mch_set_selection(VimClipboard *cbd)
+{
+    char_u             *str = NULL;
+    VimClipType_t      metadata;
+    long_u             txtlen;
+    HGLOBAL            hMemRaw = NULL;
+    HGLOBAL            hMem = NULL;
+    HGLOBAL            hMemVim = NULL;
+# if defined(FEAT_MBYTE) && defined(WIN3264)
+    HGLOBAL            hMemW = NULL;
+# endif
+
+    /* If the '*' register isn't already filled in, fill it in now */
+    cbd->owned = TRUE;
+    clip_get_selection(cbd);
+    cbd->owned = FALSE;
+
+    /* Get the text to be put on the clipboard, with CR-LF. */
+    metadata.type = clip_convert_selection(&str, &txtlen, cbd);
+    if (metadata.type < 0)
+       return;
+    metadata.txtlen = (int)txtlen;
+    metadata.ucslen = 0;
+    metadata.rawlen = 0;
+
+#ifdef FEAT_MBYTE
+    /* Always set the raw bytes: 'encoding', NUL and the text.  This is used
+     * when copy/paste from/to Vim with the same 'encoding', so that illegal
+     * bytes can also be copied and no conversion is needed. */
+    {
+       LPSTR lpszMemRaw;
+
+       metadata.rawlen = (int)(txtlen + STRLEN(p_enc) + 1);
+       hMemRaw = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
+                                                        metadata.rawlen + 1);
+       lpszMemRaw = (LPSTR)GlobalLock(hMemRaw);
+       if (lpszMemRaw != NULL)
+       {
+           STRCPY(lpszMemRaw, p_enc);
+           memcpy(lpszMemRaw + STRLEN(p_enc) + 1, str, txtlen + 1);
+           GlobalUnlock(hMemRaw);
+       }
+       else
+           metadata.rawlen = 0;
+    }
+#endif
+
+# if defined(FEAT_MBYTE) && defined(WIN3264)
+    {
+       WCHAR           *out;
+       int             len = metadata.txtlen;
+
+       /* Convert the text to UTF-16. This is put on the clipboard as
+        * CF_UNICODETEXT. */
+       out = (WCHAR *)enc_to_utf16(str, &len);
+       if (out != NULL)
+       {
+           WCHAR *lpszMemW;
+
+           /* Convert the text for CF_TEXT to Active codepage. Otherwise it's
+            * p_enc, which has no relation to the Active codepage. */
+           metadata.txtlen = WideCharToMultiByte(GetACP(), 0, out, len,
+                                                              NULL, 0, 0, 0);
+           vim_free(str);
+           str = (char_u *)alloc((unsigned)(metadata.txtlen == 0 ? 1
+                                                         : metadata.txtlen));
+           if (str == NULL)
+           {
+               vim_free(out);
+               return;         /* out of memory */
+           }
+           WideCharToMultiByte(GetACP(), 0, out, len,
+                                          (LPSTR)str, metadata.txtlen, 0, 0);
+
+           /* Allocate memory for the UTF-16 text, add one NUL word to
+            * terminate the string. */
+           hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
+                                                  (len + 1) * sizeof(WCHAR));
+           lpszMemW = (WCHAR *)GlobalLock(hMemW);
+           if (lpszMemW != NULL)
+           {
+               memcpy(lpszMemW, out, len * sizeof(WCHAR));
+               lpszMemW[len] = NUL;
+               GlobalUnlock(hMemW);
+           }
+           vim_free(out);
+           metadata.ucslen = len;
+       }
+    }
+# endif
+
+    /* Allocate memory for the text, add one NUL byte to terminate the string.
+     */
+    hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, metadata.txtlen + 1);
+    {
+       LPSTR lpszMem = (LPSTR)GlobalLock(hMem);
+
+       if (lpszMem)
+       {
+           vim_strncpy((char_u *)lpszMem, str, metadata.txtlen);
+           GlobalUnlock(hMem);
+       }
+    }
+
+    /* Set up metadata: */
+    {
+       VimClipType_t *lpszMemVim = NULL;
+
+       hMemVim = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE,
+                                                      sizeof(VimClipType_t));
+       lpszMemVim = (VimClipType_t *)GlobalLock(hMemVim);
+       memcpy(lpszMemVim, &metadata, sizeof(metadata));
+       GlobalUnlock(hMemVim);
+    }
+
+    /*
+     * Open the clipboard, clear it and put our text on it.
+     * Always set our Vim format.  Put Unicode and plain text on it.
+     *
+     * Don't pass GetActiveWindow() as an argument to OpenClipboard()
+     * because then we can't paste back into the same window for some
+     * reason - webb.
+     */
+    if (vim_open_clipboard())
+    {
+       if (EmptyClipboard())
+       {
+           SetClipboardData(cbd->format, hMemVim);
+           hMemVim = 0;
+# if defined(FEAT_MBYTE) && defined(WIN3264)
+           if (hMemW != NULL)
+           {
+               if (SetClipboardData(CF_UNICODETEXT, hMemW) != NULL)
+                   hMemW = NULL;
+           }
+# endif
+           /* Always use CF_TEXT.  On Win98 Notepad won't obtain the
+            * CF_UNICODETEXT text, only CF_TEXT. */
+           SetClipboardData(CF_TEXT, hMem);
+           hMem = 0;
+       }
+       CloseClipboard();
+    }
+
+    vim_free(str);
+    /* Free any allocations we didn't give to the clipboard: */
+    if (hMemRaw)
+       GlobalFree(hMemRaw);
+    if (hMem)
+       GlobalFree(hMem);
+# if defined(FEAT_MBYTE) && defined(WIN3264)
+    if (hMemW)
+       GlobalFree(hMemW);
+# endif
+    if (hMemVim)
+       GlobalFree(hMemVim);
+}
+
+#endif /* FEAT_CLIPBOARD */
+
+#if defined(FEAT_MBYTE) || defined(PROTO)
+/*
+ * Note: the following two functions are only guaranteed to work when using
+ * valid MS-Windows codepages or when iconv() is available.
+ */
+
+/*
+ * Convert "str" from 'encoding' to UTF-16.
+ * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
+ * Output is returned as an allocated string.  "*lenp" is set to the length of
+ * the result.  A trailing NUL is always added.
+ * Returns NULL when out of memory.
+ */
+    short_u *
+enc_to_utf16(char_u *str, int *lenp)
+{
+    vimconv_T  conv;
+    WCHAR      *ret;
+    char_u     *allocbuf = NULL;
+    int                len_loc;
+    int                length;
+
+    if (lenp == NULL)
+    {
+       len_loc = (int)STRLEN(str) + 1;
+       lenp = &len_loc;
+    }
+
+    if (enc_codepage > 0)
+    {
+       /* We can do any CP### -> UTF-16 in one pass, and we can do it
+        * without iconv() (convert_* may need iconv). */
+       MultiByteToWideChar_alloc(enc_codepage, 0, (LPCSTR)str, *lenp,
+                                                              &ret, &length);
+    }
+    else
+    {
+       /* Use "latin1" by default, we might be called before we have p_enc
+        * set up.  Convert to utf-8 first, works better with iconv().  Does
+        * nothing if 'encoding' is "utf-8". */
+       conv.vc_type = CONV_NONE;
+       if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
+                                                  (char_u *)"utf-8") == FAIL)
+           return NULL;
+       if (conv.vc_type != CONV_NONE)
+       {
+           str = allocbuf = string_convert(&conv, str, lenp);
+           if (str == NULL)
+               return NULL;
+       }
+       convert_setup(&conv, NULL, NULL);
+
+       length = utf8_to_utf16(str, *lenp, NULL, NULL);
+       ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
+       if (ret != NULL)
+       {
+           utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
+           ret[length] = 0;
+       }
+
+       vim_free(allocbuf);
+    }
+
+    *lenp = length;
+    return (short_u *)ret;
+}
+
+/*
+ * Convert an UTF-16 string to 'encoding'.
+ * Input in "str" with length (counted in wide characters) "*lenp".  When
+ * "lenp" is NULL, use wcslen().
+ * Output is returned as an allocated string.  If "*lenp" is not NULL it is
+ * set to the length of the result.
+ * Returns NULL when out of memory.
+ */
+    char_u *
+utf16_to_enc(short_u *str, int *lenp)
+{
+    vimconv_T  conv;
+    char_u     *utf8_str = NULL, *enc_str = NULL;
+    int                len_loc;
+
+    if (lenp == NULL)
+    {
+       len_loc = (int)wcslen(str) + 1;
+       lenp = &len_loc;
+    }
+
+    if (enc_codepage > 0)
+    {
+       /* We can do any UTF-16 -> CP### in one pass. */
+       int length;
+
+       WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
+                                           (LPSTR *)&enc_str, &length, 0, 0);
+       *lenp = length;
+       return enc_str;
+    }
+
+    /* Avoid allocating zero bytes, it generates an error message. */
+    utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
+    if (utf8_str != NULL)
+    {
+       *lenp = utf16_to_utf8(str, *lenp, utf8_str);
+
+       /* We might be called before we have p_enc set up. */
+       conv.vc_type = CONV_NONE;
+       convert_setup(&conv, (char_u *)"utf-8",
+                                           p_enc? p_enc: (char_u *)"latin1");
+       if (conv.vc_type == CONV_NONE)
+       {
+           /* p_enc is utf-8, so we're done. */
+           enc_str = utf8_str;
+       }
+       else
+       {
+           enc_str = string_convert(&conv, utf8_str, lenp);
+           vim_free(utf8_str);
+       }
+
+       convert_setup(&conv, NULL, NULL);
+    }
+
+    return enc_str;
+}
+#endif /* FEAT_MBYTE */
+
+#if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
+/*
+ * Convert from the active codepage to 'encoding'.
+ * Input is "str[str_size]".
+ * The result is in allocated memory: "out[outlen]".  With terminating NUL.
+ */
+    void
+acp_to_enc(str, str_size, out, outlen)
+    char_u     *str;
+    int                str_size;
+    char_u     **out;
+    int                *outlen;
+
+{
+    LPWSTR     widestr;
+
+    MultiByteToWideChar_alloc(GetACP(), 0, (LPCSTR)str, str_size,
+                                                           &widestr, outlen);
+    if (widestr != NULL)
+    {
+       ++*outlen;      /* Include the 0 after the string */
+       *out = utf16_to_enc((short_u *)widestr, outlen);
+       vim_free(widestr);
+    }
+}
+#endif
index 4b721ea..16e0ee7 100644 (file)
@@ -23,7 +23,7 @@ static void win_rotate __ARGS((int, int));
 static void win_totop __ARGS((int size, int flags));
 static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
 static int last_window __ARGS((void));
-static int one_window __ARGS((void));
+static int close_last_window_tabpage __ARGS((win_T *win, int free_buf, tabpage_T *prev_curtab));
 static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
 static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
 static tabpage_T *alt_tabpage __ARGS((void));
@@ -44,20 +44,19 @@ static int win_alloc_firstwin __ARGS((win_T *oldwin));
 static void new_frame __ARGS((win_T *wp));
 #if defined(FEAT_WINDOWS) || defined(PROTO)
 static tabpage_T *alloc_tabpage __ARGS((void));
-static int leave_tabpage __ARGS((buf_T *new_curbuf));
-static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf));
+static int leave_tabpage __ARGS((buf_T *new_curbuf, int trigger_leave_autocmds));
+static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf, int trigger_enter_autocmds, int trigger_leave_autocmds));
 static void frame_fix_height __ARGS((win_T *wp));
 static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin));
-static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin));
+static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin, int trigger_enter_autocmds, int trigger_leave_autocmds));
 static void win_free __ARGS((win_T *wp, tabpage_T *tp));
 static void frame_append __ARGS((frame_T *after, frame_T *frp));
 static void frame_insert __ARGS((frame_T *before, frame_T *frp));
 static void frame_remove __ARGS((frame_T *frp));
-#ifdef FEAT_VERTSPLIT
-static void win_new_width __ARGS((win_T *wp, int width));
+# ifdef FEAT_VERTSPLIT
 static void win_goto_ver __ARGS((int up, long count));
 static void win_goto_hor __ARGS((int left, long count));
-#endif
+# endif
 static void frame_add_height __ARGS((frame_T *frp, int n));
 static void last_status_rec __ARGS((frame_T *fr, int statusline));
 
@@ -67,10 +66,15 @@ static void clear_snapshot_rec __ARGS((frame_T *fr));
 static int check_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
 static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
 
+static int frame_check_height __ARGS((frame_T *topfrp, int height));
+#ifdef FEAT_VERTSPLIT
+static int frame_check_width __ARGS((frame_T *topfrp, int width));
+#endif
+
 #endif /* FEAT_WINDOWS */
 
 static win_T *win_alloc __ARGS((win_T *after, int hidden));
-static void win_new_height __ARGS((win_T *, int));
+static void set_fraction __ARGS((win_T *wp));
 
 #define URL_SLASH      1               /* path_is_url() has found "://" */
 #define URL_BACKSLASH  2               /* path_is_url() has found ":\\" */
@@ -354,11 +358,11 @@ newwindow:
                                                     && valid_tabpage(oldtab))
                    {
                        newtab = curtab;
-                       goto_tabpage_tp(oldtab);
+                       goto_tabpage_tp(oldtab, TRUE, TRUE);
                        if (curwin == wp)
                            win_close(curwin, FALSE);
                        if (valid_tabpage(newtab))
-                           goto_tabpage_tp(newtab);
+                           goto_tabpage_tp(newtab, TRUE, TRUE);
                    }
                }
                break;
@@ -525,9 +529,7 @@ wingotofile:
                    setpcmark();
                    if (win_split(0, 0) == OK)
                    {
-# ifdef FEAT_SCROLLBIND
-                       curwin->w_p_scb = FALSE;
-# endif
+                       RESET_BINDING(curwin);
                        (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
                                                           ECMD_HIDE, NULL);
                        if (nchar == 'F' && lnum >= 0)
@@ -684,19 +686,19 @@ win_split(size, flags)
 }
 
 /*
- * When "newwin" is NULL: split the current window in two.
- * When "newwin" is not NULL: insert this window at the far
+ * When "new_wp" is NULL: split the current window in two.
+ * When "new_wp" is not NULL: insert this window at the far
  * top/left/right/bottom.
  * return FAIL for failure, OK otherwise
  */
     int
-win_split_ins(size, flags, newwin, dir)
+win_split_ins(size, flags, new_wp, dir)
     int                size;
     int                flags;
-    win_T      *newwin;
+    win_T      *new_wp;
     int                dir;
 {
-    win_T      *wp = newwin;
+    win_T      *wp = new_wp;
     win_T      *oldwin;
     int                new_size = size;
     int                i;
@@ -719,7 +721,7 @@ win_split_ins(size, flags, newwin, dir)
     /* add a status line when p_ls == 1 and splitting the first window */
     if (lastwin == firstwin && p_ls == 1 && oldwin->w_status_height == 0)
     {
-       if (oldwin->w_height <= p_wmh && newwin == NULL)
+       if (oldwin->w_height <= p_wmh && new_wp == NULL)
        {
            EMSG(_(e_noroom));
            return FAIL;
@@ -752,7 +754,7 @@ win_split_ins(size, flags, newwin, dir)
        }
        else
            available = oldwin->w_width;
-       if (available < needed && newwin == NULL)
+       if (available < needed && new_wp == NULL)
        {
            EMSG(_(e_noroom));
            return FAIL;
@@ -816,7 +818,7 @@ win_split_ins(size, flags, newwin, dir)
            available = oldwin->w_height;
            needed += p_wmh;
        }
-       if (available < needed && newwin == NULL)
+       if (available < needed && new_wp == NULL)
        {
            EMSG(_(e_noroom));
            return FAIL;
@@ -889,20 +891,20 @@ win_split_ins(size, flags, newwin, dir)
                        p_sb))))
     {
        /* new window below/right of current one */
-       if (newwin == NULL)
+       if (new_wp == NULL)
            wp = win_alloc(oldwin, FALSE);
        else
            win_append(oldwin, wp);
     }
     else
     {
-       if (newwin == NULL)
+       if (new_wp == NULL)
            wp = win_alloc(oldwin->w_prev, FALSE);
        else
            win_append(oldwin->w_prev, wp);
     }
 
-    if (newwin == NULL)
+    if (new_wp == NULL)
     {
        if (wp == NULL)
            return FAIL;
@@ -973,10 +975,10 @@ win_split_ins(size, flags, newwin, dir)
                frp->fr_parent = curfrp;
     }
 
-    if (newwin == NULL)
+    if (new_wp == NULL)
        frp = wp->w_frame;
     else
-       frp = newwin->w_frame;
+       frp = new_wp->w_frame;
     frp->fr_parent = curfrp->fr_parent;
 
     /* Insert the new frame at the right place in the frame list. */
@@ -985,10 +987,17 @@ win_split_ins(size, flags, newwin, dir)
     else
        frame_append(curfrp, frp);
 
+    /* Set w_fraction now so that the cursor keeps the same relative
+     * vertical position. */
+    if (oldwin->w_height > 0)
+       set_fraction(oldwin);
+    wp->w_fraction = oldwin->w_fraction;
+
 #ifdef FEAT_VERTSPLIT
     if (flags & WSP_VERT)
     {
        wp->w_p_scr = curwin->w_p_scr;
+
        if (need_status)
        {
            win_new_height(oldwin, oldwin->w_height - 1);
@@ -1220,15 +1229,15 @@ win_init(newp, oldp, flags)
     }
     newp->w_tagstackidx = oldp->w_tagstackidx;
     newp->w_tagstacklen = oldp->w_tagstacklen;
-# ifdef FEAT_FOLDING
+#ifdef FEAT_FOLDING
     copyFoldingState(oldp, newp);
-# endif
+#endif
 
     win_init_some(newp, oldp);
 
-# ifdef FEAT_SYN_HL
+#ifdef FEAT_SYN_HL
     check_colorcolumn(newp);
-# endif
+#endif
 }
 
 /*
@@ -2028,7 +2037,11 @@ close_windows(buf, keep_curwin)
 
     for (wp = firstwin; wp != NULL && lastwin != firstwin; )
     {
-       if (wp->w_buffer == buf && (!keep_curwin || wp != curwin))
+       if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
+#ifdef FEAT_AUTOCMD
+               && !(wp->w_closing || wp->w_buffer->b_closing)
+#endif
+               )
        {
            win_close(wp, FALSE);
 
@@ -2045,7 +2058,11 @@ close_windows(buf, keep_curwin)
        nexttp = tp->tp_next;
        if (tp != curtab)
            for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
-               if (wp->w_buffer == buf)
+               if (wp->w_buffer == buf
+#ifdef FEAT_AUTOCMD
+                   && !(wp->w_closing || wp->w_buffer->b_closing)
+#endif
+                   )
                {
                    win_close_othertab(wp, FALSE, tp);
 
@@ -2058,6 +2075,7 @@ close_windows(buf, keep_curwin)
 
     --RedrawingDisabled;
 
+    redraw_tabline = TRUE;
     if (h != tabline_height())
        shell_new_rows();
 }
@@ -2077,7 +2095,7 @@ last_window()
  * Return TRUE if there is only one window other than "aucmd_win" in the
  * current tab page.
  */
-    static int
+    int
 one_window()
 {
 #ifdef FEAT_AUTOCMD
@@ -2100,10 +2118,60 @@ one_window()
 }
 
 /*
+ * Close the possibly last window in a tab page.
+ * Returns TRUE when the window was closed already.
+ */
+    static int
+close_last_window_tabpage(win, free_buf, prev_curtab)
+    win_T      *win;
+    int                free_buf;
+    tabpage_T   *prev_curtab;
+{
+    if (firstwin == lastwin)
+    {
+#ifdef FEAT_AUTOCMD
+       buf_T   *old_curbuf = curbuf;
+#endif
+
+       /*
+        * Closing the last window in a tab page.  First go to another tab
+        * page and then close the window and the tab page.  This avoids that
+        * curwin and curtab are invalid while we are freeing memory, they may
+        * be used in GUI events.
+        * Don't trigger autocommands yet, they may use wrong values, so do
+        * that below.
+        */
+       goto_tabpage_tp(alt_tabpage(), FALSE, TRUE);
+       redraw_tabline = TRUE;
+
+       /* Safety check: Autocommands may have closed the window when jumping
+        * to the other tab page. */
+       if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
+       {
+           int     h = tabline_height();
+
+           win_close_othertab(win, free_buf, prev_curtab);
+           if (h != tabline_height())
+               shell_new_rows();
+       }
+       /* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
+        * that now. */
+#ifdef FEAT_AUTOCMD
+       apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
+       apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+       if (old_curbuf != curbuf)
+           apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+#endif
+       return TRUE;
+    }
+    return FALSE;
+}
+
+/*
  * Close window "win".  Only works for the current tab page.
  * If "free_buf" is TRUE related buffer may be unloaded.
  *
- * called by :quit, :close, :xit, :wq and findtag()
+ * Called by :quit, :close, :xit, :wq and findtag().
  */
     void
 win_close(win, free_buf)
@@ -2126,6 +2194,8 @@ win_close(win, free_buf)
     }
 
 #ifdef FEAT_AUTOCMD
+    if (win->w_closing || (win->w_buffer != NULL && win->w_buffer->b_closing))
+       return; /* window is already being closed */
     if (win == aucmd_win)
     {
        EMSG(_("E813: Cannot close autocmd window"));
@@ -2138,33 +2208,15 @@ win_close(win, free_buf)
     }
 #endif
 
-    /*
-     * When closing the last window in a tab page first go to another tab
-     * page and then close the window and the tab page.  This avoids that
-     * curwin and curtab are not invalid while we are freeing memory, they may
-     * be used in GUI events.
-     */
-    if (firstwin == lastwin)
-    {
-       goto_tabpage_tp(alt_tabpage());
-       redraw_tabline = TRUE;
-
-       /* Safety check: Autocommands may have closed the window when jumping
-        * to the other tab page. */
-       if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
-       {
-           int     h = tabline_height();
-
-           win_close_othertab(win, free_buf, prev_curtab);
-           if (h != tabline_height())
-               shell_new_rows();
-       }
-       return;
-    }
+    /* When closing the last window in a tab page first go to another tab page
+     * and then close the window and the tab page to avoid that curwin and
+     * curtab are invalid while we are freeing memory. */
+    if (close_last_window_tabpage(win, free_buf, prev_curtab))
+      return;
 
     /* When closing the help window, try restoring a snapshot after closing
      * the window.  Otherwise clear the snapshot, it's now invalid. */
-    if (win->w_buffer->b_help)
+    if (win->w_buffer != NULL && win->w_buffer->b_help)
        help_window = TRUE;
     else
        clear_snapshot(curtab, SNAP_HELP_IDX);
@@ -2179,17 +2231,26 @@ win_close(win, free_buf)
        wp = frame2win(win_altframe(win, NULL));
 
        /*
-        * Be careful: If autocommands delete the window, return now.
+        * Be careful: If autocommands delete the window or cause this window
+        * to be the last one left, return now.
         */
        if (wp->w_buffer != curbuf)
        {
            other_buffer = TRUE;
+           win->w_closing = TRUE;
            apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
-           if (!win_valid(win) || last_window())
+           if (!win_valid(win))
+               return;
+           win->w_closing = FALSE;
+           if (last_window())
                return;
        }
+       win->w_closing = TRUE;
        apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
-       if (!win_valid(win) || last_window())
+       if (!win_valid(win))
+           return;
+       win->w_closing = FALSE;
+       if (last_window())
            return;
 # ifdef FEAT_EVAL
        /* autocmds may abort script processing */
@@ -2206,17 +2267,46 @@ win_close(win, free_buf)
        out_flush();
 #endif
 
+#ifdef FEAT_SYN_HL
+    /* Free independent synblock before the buffer is freed. */
+    if (win->w_buffer != NULL)
+       reset_synblock(win);
+#endif
+
     /*
      * Close the link to the buffer.
      */
-    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+    if (win->w_buffer != NULL)
+    {
+#ifdef FEAT_AUTOCMD
+       win->w_closing = TRUE;
+#endif
+       close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
+#ifdef FEAT_AUTOCMD
+       if (win_valid(win))
+           win->w_closing = FALSE;
+#endif
+    }
+
+    if (only_one_window() && win_valid(win) && win->w_buffer == NULL
+           && (last_window() || curtab != prev_curtab
+               || close_last_window_tabpage(win, free_buf, prev_curtab)))
+    {
+       /* Autocommands have close all windows, quit now.  Restore
+        * curwin->w_buffer, otherwise writing viminfo may fail. */
+       if (curwin->w_buffer == NULL)
+           curwin->w_buffer = curbuf;
+       getout(0);
+    }
 
     /* Autocommands may have closed the window already, or closed the only
      * other window or moved to another tab page. */
-    if (!win_valid(win) || last_window() || curtab != prev_curtab)
+    else if (!win_valid(win) || last_window() || curtab != prev_curtab
+           || close_last_window_tabpage(win, free_buf, prev_curtab))
        return;
 
-    /* Free the memory used for the window. */
+    /* Free the memory used for the window and get the window that received
+     * the screen space. */
     wp = win_free_mem(win, &dir, NULL);
 
     /* Make sure curwin isn't invalid.  It can cause severe trouble when
@@ -2267,7 +2357,7 @@ win_close(win, free_buf)
        win_comp_pos();
     if (close_curwin)
     {
-       win_enter_ext(wp, FALSE, TRUE);
+       win_enter_ext(wp, FALSE, TRUE, TRUE, TRUE);
 #ifdef FEAT_AUTOCMD
        if (other_buffer)
            /* careful: after this wp and win may be invalid! */
@@ -2297,7 +2387,7 @@ win_close(win, free_buf)
 
 /*
  * Close window "win" in tab page "tp", which is not the current tab page.
- * This may be the last window ih that tab page and result in closing the tab,
+ * This may be the last window in that tab page and result in closing the tab,
  * thus "tp" may become invalid!
  * Caller must check if buffer is hidden and whether the tabline needs to be
  * updated.
@@ -2313,8 +2403,13 @@ win_close_othertab(win, free_buf, tp)
     tabpage_T   *ptp = NULL;
     int                free_tp = FALSE;
 
+#ifdef FEAT_AUTOCMD
+    if (win->w_closing || win->w_buffer->b_closing)
+       return; /* window is already being closed */
+#endif
+
     /* Close the link to the buffer. */
-    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
 
     /* Careful: Autocommands may have closed the tab page or made it the
      * current tab page.  */
@@ -3241,6 +3336,9 @@ win_init_empty(wp)
     else
        wp->w_farsi = W_CONV;
 #endif
+#ifdef FEAT_SYN_HL
+    wp->w_s = &wp->w_buffer->b_s;
+#endif
 }
 
 /*
@@ -3277,9 +3375,7 @@ win_alloc_aucmd_win()
     if (aucmd_win != NULL)
     {
        win_init_some(aucmd_win, curwin);
-# ifdef FEAT_SCROLLBIND
-       aucmd_win->w_p_scb = FALSE;
-# endif
+       RESET_BINDING(aucmd_win);
        new_frame(aucmd_win);
     }
 }
@@ -3320,10 +3416,8 @@ win_alloc_firstwin(oldwin)
        /* First window in new tab page, initialize it from "oldwin". */
        win_init(curwin, oldwin, 0);
 
-# ifdef FEAT_SCROLLBIND
-       /* We don't want scroll-binding in the first window. */
-       curwin->w_p_scb = FALSE;
-# endif
+       /* We don't want cursor- and scroll-binding in the first window. */
+       RESET_BINDING(curwin);
     }
 #endif
 
@@ -3380,25 +3474,35 @@ win_init_size()
 alloc_tabpage()
 {
     tabpage_T  *tp;
+# ifdef FEAT_GUI
+    int                i;
+# endif
+
 
     tp = (tabpage_T *)alloc_clear((unsigned)sizeof(tabpage_T));
-    if (tp != NULL)
+    if (tp == NULL)
+       return NULL;
+
+# ifdef FEAT_EVAL
+    /* init t: variables */
+    tp->tp_vars = dict_alloc();
+    if (tp->tp_vars == NULL)
     {
-# ifdef FEAT_GUI
-       int     i;
+       vim_free(tp);
+       return NULL;
+    }
+    init_var_dict(tp->tp_vars, &tp->tp_winvar, VAR_SCOPE);
+# endif
 
-       for (i = 0; i < 3; i++)
-           tp->tp_prev_which_scrollbars[i] = -1;
+# ifdef FEAT_GUI
+    for (i = 0; i < 3; i++)
+       tp->tp_prev_which_scrollbars[i] = -1;
 # endif
 # ifdef FEAT_DIFF
-       tp->tp_diff_invalid = TRUE;
+    tp->tp_diff_invalid = TRUE;
 # endif
-#ifdef FEAT_EVAL
-       /* init t: variables */
-       init_var_dict(&tp->tp_vars, &tp->tp_winvar);
-#endif
-       tp->tp_ch_used = p_ch;
-    }
+    tp->tp_ch_used = p_ch;
+
     return tp;
 }
 
@@ -3414,8 +3518,19 @@ free_tabpage(tp)
     for (idx = 0; idx < SNAP_COUNT; ++idx)
        clear_snapshot(tp, idx);
 #ifdef FEAT_EVAL
-    vars_clear(&tp->tp_vars.dv_hashtab);       /* free all t: variables */
+    vars_clear(&tp->tp_vars->dv_hashtab);      /* free all t: variables */
+    hash_init(&tp->tp_vars->dv_hashtab);
+    unref_var_dict(tp->tp_vars);
 #endif
+
+#ifdef FEAT_PYTHON
+    python_tabpage_free(tp);
+#endif
+
+#ifdef FEAT_PYTHON3
+    python3_tabpage_free(tp);
+#endif
+
     vim_free(tp);
 }
 
@@ -3439,7 +3554,7 @@ win_new_tabpage(after)
        return FAIL;
 
     /* Remember the current windows in this Tab page. */
-    if (leave_tabpage(curbuf) == FAIL)
+    if (leave_tabpage(curbuf, TRUE) == FAIL)
     {
        vim_free(newtp);
        return FAIL;
@@ -3484,14 +3599,14 @@ win_new_tabpage(after)
 
        redraw_all_later(CLEAR);
 #ifdef FEAT_AUTOCMD
-       apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
        apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
+       apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
 #endif
        return OK;
     }
 
     /* Failed, get back the previous Tab page */
-    enter_tabpage(curtab, curbuf);
+    enter_tabpage(curtab, curbuf, TRUE, TRUE);
     return FAIL;
 }
 
@@ -3597,14 +3712,15 @@ tabpage_index(ftp)
 
 /*
  * Prepare for leaving the current tab page.
- * When autocomands change "curtab" we don't leave the tab page and return
+ * When autocommands change "curtab" we don't leave the tab page and return
  * FAIL.
  * Careful: When OK is returned need to get a new tab page very very soon!
  */
     static int
-leave_tabpage(new_curbuf)
+leave_tabpage(new_curbuf, trigger_leave_autocmds)
     buf_T      *new_curbuf UNUSED;    /* what is going to be the new curbuf,
                                       NULL if unknown */
+    int                trigger_leave_autocmds UNUSED;
 {
     tabpage_T  *tp = curtab;
 
@@ -3612,18 +3728,21 @@ leave_tabpage(new_curbuf)
     reset_VIsual_and_resel();  /* stop Visual mode */
 #endif
 #ifdef FEAT_AUTOCMD
-    if (new_curbuf != curbuf)
+    if (trigger_leave_autocmds)
     {
-       apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+       if (new_curbuf != curbuf)
+       {
+           apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+           if (curtab != tp)
+               return FAIL;
+       }
+       apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
+       if (curtab != tp)
+           return FAIL;
+       apply_autocmds(EVENT_TABLEAVE, NULL, NULL, FALSE, curbuf);
        if (curtab != tp)
            return FAIL;
     }
-    apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
-    if (curtab != tp)
-       return FAIL;
-    apply_autocmds(EVENT_TABLEAVE, NULL, NULL, FALSE, curbuf);
-    if (curtab != tp)
-       return FAIL;
 #endif
 #if defined(FEAT_GUI)
     /* Remove the scrollbars.  They may be added back later. */
@@ -3644,11 +3763,15 @@ leave_tabpage(new_curbuf)
 /*
  * Start using tab page "tp".
  * Only to be used after leave_tabpage() or freeing the current tab page.
+ * Only trigger *Enter autocommands when trigger_enter_autocmds is TRUE.
+ * Only trigger *Leave autocommands when trigger_leave_autocmds is TRUE.
  */
     static void
-enter_tabpage(tp, old_curbuf)
+enter_tabpage(tp, old_curbuf, trigger_enter_autocmds, trigger_leave_autocmds)
     tabpage_T  *tp;
     buf_T      *old_curbuf UNUSED;
+    int                trigger_enter_autocmds UNUSED;
+    int                trigger_leave_autocmds UNUSED;
 {
     int                old_off = tp->tp_firstwin->w_winrow;
     win_T      *next_prevwin = tp->tp_prevwin;
@@ -3661,16 +3784,10 @@ enter_tabpage(tp, old_curbuf)
     /* We would like doing the TabEnter event first, but we don't have a
      * valid current window yet, which may break some commands.
      * This triggers autocommands, thus may make "tp" invalid. */
-    win_enter_ext(tp->tp_curwin, FALSE, TRUE);
+    win_enter_ext(tp->tp_curwin, FALSE, TRUE,
+                             trigger_enter_autocmds, trigger_leave_autocmds);
     prevwin = next_prevwin;
 
-#ifdef FEAT_AUTOCMD
-    apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
-
-    if (old_curbuf != curbuf)
-       apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
-#endif
-
     last_status(FALSE);                /* status line may appear or disappear */
     (void)win_comp_pos();      /* recompute w_winrow for all windows */
     must_redraw = CLEAR;       /* need to redraw everything */
@@ -3700,6 +3817,17 @@ enter_tabpage(tp, old_curbuf)
     gui_may_update_scrollbars();
 #endif
 
+#ifdef FEAT_AUTOCMD
+    /* Apply autocommands after updating the display, when 'rows' and
+     * 'columns' have been set correctly. */
+    if (trigger_enter_autocmds)
+    {
+       apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+       if (old_curbuf != curbuf)
+           apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+    }
+#endif
+
     redraw_all_later(CLEAR);
 }
 
@@ -3773,7 +3901,7 @@ goto_tabpage(n)
        }
     }
 
-    goto_tabpage_tp(tp);
+    goto_tabpage_tp(tp, TRUE, TRUE);
 
 #ifdef FEAT_GUI_TABLINE
     if (gui_use_tabline())
@@ -3783,21 +3911,28 @@ goto_tabpage(n)
 
 /*
  * Go to tabpage "tp".
+ * Only trigger *Enter autocommands when trigger_enter_autocmds is TRUE.
+ * Only trigger *Leave autocommands when trigger_leave_autocmds is TRUE.
  * Note: doesn't update the GUI tab.
  */
     void
-goto_tabpage_tp(tp)
+goto_tabpage_tp(tp, trigger_enter_autocmds, trigger_leave_autocmds)
     tabpage_T  *tp;
+    int                trigger_enter_autocmds;
+    int                trigger_leave_autocmds;
 {
     /* Don't repeat a message in another tab page. */
     set_keep_msg(NULL, 0);
 
-    if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer) == OK)
+    if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer,
+                                       trigger_leave_autocmds) == OK)
     {
        if (valid_tabpage(tp))
-           enter_tabpage(tp, curbuf);
+           enter_tabpage(tp, curbuf, trigger_enter_autocmds,
+                   trigger_leave_autocmds);
        else
-           enter_tabpage(curtab, curbuf);
+           enter_tabpage(curtab, curbuf, trigger_enter_autocmds,
+                   trigger_leave_autocmds);
     }
 }
 
@@ -3810,7 +3945,7 @@ goto_tabpage_win(tp, wp)
     tabpage_T  *tp;
     win_T      *wp;
 {
-    goto_tabpage_tp(tp);
+    goto_tabpage_tp(tp, TRUE, TRUE);
     if (curtab == tp && win_valid(wp))
     {
        win_enter(wp, TRUE);
@@ -3848,7 +3983,7 @@ tabpage_move(nr)
     }
 
     /* Re-insert it at the specified position. */
-    if (n == 0)
+    if (n <= 0)
     {
        curtab->tp_next = first_tabpage;
        first_tabpage = curtab;
@@ -3906,9 +4041,10 @@ win_goto(wp)
 
 #ifdef FEAT_CONCEAL
     /* Conceal cursor line in previous window, unconceal in current window. */
-    if (win_valid(owp))
+    if (win_valid(owp) && owp->w_p_cole > 0 && !msg_scrolled)
        update_single_line(owp, owp->w_cursor.lnum);
-    update_single_line(curwin, curwin->w_cursor.lnum);
+    if (curwin->w_p_cole > 0 && !msg_scrolled)
+       need_cursor_line_redraw = TRUE;
 #endif
 }
 
@@ -3933,6 +4069,27 @@ win_find_nr(winnr)
 }
 #endif
 
+#if (defined(FEAT_WINDOWS) && (defined(FEAT_PYTHON) || defined(FEAT_PYTHON3))) \
+       || defined(PROTO)
+/*
+ * Find the tabpage for window "win".
+ */
+    tabpage_T *
+win_find_tabpage(win)
+    win_T      *win;
+{
+    win_T      *wp;
+    tabpage_T  *tp;
+
+    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+       for (wp = (tp == curtab ? firstwin : tp->tp_firstwin);
+                                                 wp != NULL; wp = wp->w_next)
+           if (wp == win)
+               return tp;
+    return NULL;
+}
+#endif
+
 #ifdef FEAT_VERTSPLIT
 /*
  * Move to window above or below "count" times.
@@ -4069,7 +4226,7 @@ win_enter(wp, undo_sync)
     win_T      *wp;
     int                undo_sync;
 {
-    win_enter_ext(wp, undo_sync, FALSE);
+    win_enter_ext(wp, undo_sync, FALSE, TRUE, TRUE);
 }
 
 /*
@@ -4078,10 +4235,12 @@ win_enter(wp, undo_sync)
  * been closed and isn't valid.
  */
     static void
-win_enter_ext(wp, undo_sync, curwin_invalid)
+win_enter_ext(wp, undo_sync, curwin_invalid, trigger_enter_autocmds, trigger_leave_autocmds)
     win_T      *wp;
     int                undo_sync;
     int                curwin_invalid;
+    int                trigger_enter_autocmds UNUSED;
+    int                trigger_leave_autocmds UNUSED;
 {
 #ifdef FEAT_AUTOCMD
     int                other_buffer = FALSE;
@@ -4091,7 +4250,7 @@ win_enter_ext(wp, undo_sync, curwin_invalid)
        return;
 
 #ifdef FEAT_AUTOCMD
-    if (!curwin_invalid)
+    if (!curwin_invalid && trigger_leave_autocmds)
     {
        /*
         * Be careful: If autocommands delete the window, return now.
@@ -4160,9 +4319,12 @@ win_enter_ext(wp, undo_sync, curwin_invalid)
     }
 
 #ifdef FEAT_AUTOCMD
-    apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
-    if (other_buffer)
-       apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+    if (trigger_enter_autocmds)
+    {
+       apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
+       if (other_buffer)
+           apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+    }
 #endif
 
 #ifdef FEAT_TITLE
@@ -4271,84 +4433,92 @@ win_alloc(after, hidden)
     win_T      *after UNUSED;
     int                hidden UNUSED;
 {
-    win_T      *newwin;
+    win_T      *new_wp;
 
     /*
      * allocate window structure and linesizes arrays
      */
-    newwin = (win_T *)alloc_clear((unsigned)sizeof(win_T));
-    if (newwin != NULL && win_alloc_lines(newwin) == FAIL)
+    new_wp = (win_T *)alloc_clear((unsigned)sizeof(win_T));
+    if (new_wp == NULL)
+       return NULL;
+
+    if (win_alloc_lines(new_wp) == FAIL)
     {
-       vim_free(newwin);
-       newwin = NULL;
+       vim_free(new_wp);
+       return NULL;
     }
 
-    if (newwin != NULL)
+#ifdef FEAT_EVAL
+    /* init w: variables */
+    new_wp->w_vars = dict_alloc();
+    if (new_wp->w_vars == NULL)
     {
+       win_free_lsize(new_wp);
+       vim_free(new_wp);
+       return NULL;
+    }
+    init_var_dict(new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
+#endif
+
 #ifdef FEAT_AUTOCMD
-       /* Don't execute autocommands while the window is not properly
-        * initialized yet.  gui_create_scrollbar() may trigger a FocusGained
-        * event. */
-       block_autocmds();
+    /* Don't execute autocommands while the window is not properly
+     * initialized yet.  gui_create_scrollbar() may trigger a FocusGained
+     * event. */
+    block_autocmds();
 #endif
-       /*
-        * link the window in the window list
-        */
+    /*
+     * link the window in the window list
+     */
 #ifdef FEAT_WINDOWS
-       if (!hidden)
-           win_append(after, newwin);
+    if (!hidden)
+       win_append(after, new_wp);
 #endif
 #ifdef FEAT_VERTSPLIT
-       newwin->w_wincol = 0;
-       newwin->w_width = Columns;
+    new_wp->w_wincol = 0;
+    new_wp->w_width = Columns;
 #endif
 
-       /* position the display and the cursor at the top of the file. */
-       newwin->w_topline = 1;
+    /* position the display and the cursor at the top of the file. */
+    new_wp->w_topline = 1;
 #ifdef FEAT_DIFF
-       newwin->w_topfill = 0;
+    new_wp->w_topfill = 0;
 #endif
-       newwin->w_botline = 2;
-       newwin->w_cursor.lnum = 1;
+    new_wp->w_botline = 2;
+    new_wp->w_cursor.lnum = 1;
 #ifdef FEAT_SCROLLBIND
-       newwin->w_scbind_pos = 1;
+    new_wp->w_scbind_pos = 1;
 #endif
 
-       /* We won't calculate w_fraction until resizing the window */
-       newwin->w_fraction = 0;
-       newwin->w_prev_fraction_row = -1;
+    /* We won't calculate w_fraction until resizing the window */
+    new_wp->w_fraction = 0;
+    new_wp->w_prev_fraction_row = -1;
 
 #ifdef FEAT_GUI
-       if (gui.in_use)
-       {
-           gui_create_scrollbar(&newwin->w_scrollbars[SBAR_LEFT],
-                   SBAR_LEFT, newwin);
-           gui_create_scrollbar(&newwin->w_scrollbars[SBAR_RIGHT],
-                   SBAR_RIGHT, newwin);
-       }
-#endif
-#ifdef FEAT_EVAL
-       /* init w: variables */
-       init_var_dict(&newwin->w_vars, &newwin->w_winvar);
+    if (gui.in_use)
+    {
+       gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_LEFT],
+               SBAR_LEFT, new_wp);
+       gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_RIGHT],
+               SBAR_RIGHT, new_wp);
+    }
 #endif
 #ifdef FEAT_FOLDING
-       foldInitWin(newwin);
+    foldInitWin(new_wp);
 #endif
 #ifdef FEAT_AUTOCMD
-       unblock_autocmds();
+    unblock_autocmds();
 #endif
 #ifdef FEAT_SEARCH_EXTRA
-       newwin->w_match_head = NULL;
-       newwin->w_next_match_id = 4;
+    new_wp->w_match_head = NULL;
+    new_wp->w_next_match_id = 4;
 #endif
-    }
-    return newwin;
+    return new_wp;
 }
 
 #if defined(FEAT_WINDOWS) || defined(PROTO)
 
 /*
- * remove window 'wp' from the window list and free the structure
+ * Remove window 'wp' from the window list and free the structure.
  */
     static void
 win_free(wp, tp)
@@ -4356,6 +4526,8 @@ win_free(wp, tp)
     tabpage_T  *tp;            /* tab page "win" is in, NULL for current */
 {
     int                i;
+    buf_T      *buf;
+    wininfo_T  *wip;
 
 #ifdef FEAT_FOLDING
     clearFolding(wp);
@@ -4402,7 +4574,9 @@ win_free(wp, tp)
     clear_winopt(&wp->w_allbuf_opt);
 
 #ifdef FEAT_EVAL
-    vars_clear(&wp->w_vars.dv_hashtab);            /* free all w: variables */
+    vars_clear(&wp->w_vars->dv_hashtab);       /* free all w: variables */
+    hash_init(&wp->w_vars->dv_hashtab);
+    unref_var_dict(wp->w_vars);
 #endif
 
     if (prevwin == wp)
@@ -4414,6 +4588,13 @@ win_free(wp, tp)
 
     vim_free(wp->w_localdir);
 
+    /* Remove the window from the b_wininfo lists, it may happen that the
+     * freed memory is re-used for another window. */
+    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+       for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
+           if (wip->wi_win == wp)
+               wip->wi_win = NULL;
+
 #ifdef FEAT_SEARCH_EXTRA
     clear_matches(wp);
 #endif
@@ -4435,7 +4616,6 @@ win_free(wp, tp)
 #endif /* FEAT_GUI */
 
 #ifdef FEAT_SYN_HL
-    reset_synblock(wp);  /* free independent synblock */
     vim_free(wp->w_p_cc_cols);
 #endif
 
@@ -4589,7 +4769,7 @@ shell_new_rows()
     /* First try setting the heights of windows with 'winfixheight'.  If
      * that doesn't result in the right height, forget about that option. */
     frame_new_height(topframe, h, FALSE, TRUE);
-    if (topframe->fr_height != h)
+    if (!frame_check_height(topframe, h))
        frame_new_height(topframe, h, FALSE, FALSE);
 
     (void)win_comp_pos();              /* recompute w_winrow and w_wincol */
@@ -4623,7 +4803,7 @@ shell_new_columns()
     /* First try setting the widths of windows with 'winfixwidth'.  If that
      * doesn't result in the right width, forget about that option. */
     frame_new_width(topframe, (int)Columns, FALSE, TRUE);
-    if (topframe->fr_width != Columns)
+    if (!frame_check_width(topframe, Columns))
        frame_new_width(topframe, (int)Columns, FALSE, FALSE);
 
     (void)win_comp_pos();              /* recompute w_winrow and w_wincol */
@@ -5459,19 +5639,31 @@ win_drag_vsep_line(dragwin, offset)
 
 #endif /* FEAT_WINDOWS */
 
+#define FRACTION_MULT  16384L
+
+/*
+ * Set wp->w_fraction for the current w_wrow and w_height.
+ */
+    static void
+set_fraction(wp)
+    win_T      *wp;
+{
+    wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
+                                   + FRACTION_MULT / 2) / (long)wp->w_height;
+}
+
 /*
  * Set the height of a window.
  * This takes care of the things inside the window, not what happens to the
  * window position, the frame or to other windows.
  */
-    static void
+    void
 win_new_height(wp, height)
     win_T      *wp;
     int                height;
 {
     linenr_T   lnum;
     int                sline, line_size;
-#define FRACTION_MULT  16384L
 
     /* Don't want a negative height.  Happens when splitting a tiny window.
      * Will equalize heights soon to fix it. */
@@ -5481,8 +5673,7 @@ win_new_height(wp, height)
        return;     /* nothing to do */
 
     if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
-       wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
-                                   + FRACTION_MULT / 2) / (long)wp->w_height;
+       set_fraction(wp);
 
     wp->w_height = height;
     wp->w_skipcol = 0;
@@ -5606,7 +5797,7 @@ win_new_height(wp, height)
 /*
  * Set the width of a window.
  */
-    static void
+    void
 win_new_width(wp, width)
     win_T      *wp;
     int                width;
@@ -6193,7 +6384,8 @@ only_one_window()
        return FALSE;
 
     for (wp = firstwin; wp != NULL; wp = wp->w_next)
-       if ((!((wp->w_buffer->b_help && !curbuf->b_help)
+       if (wp->w_buffer != NULL
+               && (!((wp->w_buffer->b_help && !curbuf->b_help)
 # ifdef FEAT_QUICKFIX
                    || wp->w_p_pvw
 # endif
@@ -6399,6 +6591,132 @@ restore_snapshot_rec(sn, fr)
 
 #endif
 
+#if defined(FEAT_EVAL) || defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) \
+       || defined(PROTO)
+/*
+ * Set "win" to be the curwin and "tp" to be the current tab page.
+ * restore_win() MUST be called to undo.
+ * No autocommands will be executed.
+ * When "no_display" is TRUE the display won't be affected, no redraw is
+ * triggered, another tabpage access is limited.
+ * Returns FAIL if switching to "win" failed.
+ */
+    int
+switch_win(save_curwin, save_curtab, win, tp, no_display)
+    win_T      **save_curwin UNUSED;
+    tabpage_T  **save_curtab UNUSED;
+    win_T      *win UNUSED;
+    tabpage_T  *tp UNUSED;
+    int                no_display UNUSED;
+{
+# ifdef FEAT_AUTOCMD
+    block_autocmds();
+# endif
+# ifdef FEAT_WINDOWS
+    *save_curwin = curwin;
+    if (tp != NULL)
+    {
+       *save_curtab = curtab;
+       if (no_display)
+       {
+           curtab->tp_firstwin = firstwin;
+           curtab->tp_lastwin = lastwin;
+           curtab = tp;
+           firstwin = curtab->tp_firstwin;
+           lastwin = curtab->tp_lastwin;
+       }
+       else
+           goto_tabpage_tp(tp, FALSE, FALSE);
+    }
+    if (!win_valid(win))
+    {
+# ifdef FEAT_AUTOCMD
+       unblock_autocmds();
+# endif
+       return FAIL;
+    }
+    curwin = win;
+    curbuf = curwin->w_buffer;
+# endif
+    return OK;
+}
+
+/*
+ * Restore current tabpage and window saved by switch_win(), if still valid.
+ * When "no_display" is TRUE the display won't be affected, no redraw is
+ * triggered.
+ */
+    void
+restore_win(save_curwin, save_curtab, no_display)
+    win_T      *save_curwin UNUSED;
+    tabpage_T  *save_curtab UNUSED;
+    int                no_display UNUSED;
+{
+# ifdef FEAT_WINDOWS
+    if (save_curtab != NULL && valid_tabpage(save_curtab))
+    {
+       if (no_display)
+       {
+           curtab->tp_firstwin = firstwin;
+           curtab->tp_lastwin = lastwin;
+           curtab = save_curtab;
+           firstwin = curtab->tp_firstwin;
+           lastwin = curtab->tp_lastwin;
+       }
+       else
+           goto_tabpage_tp(save_curtab, FALSE, FALSE);
+    }
+    if (win_valid(save_curwin))
+    {
+       curwin = save_curwin;
+       curbuf = curwin->w_buffer;
+    }
+# endif
+# ifdef FEAT_AUTOCMD
+    unblock_autocmds();
+# endif
+}
+
+/*
+ * Make "buf" the current buffer.  restore_buffer() MUST be called to undo.
+ * No autocommands will be executed.  Use aucmd_prepbuf() if there are any.
+ */
+    void
+switch_buffer(save_curbuf, buf)
+    buf_T *buf;
+    buf_T **save_curbuf;
+{
+# ifdef FEAT_AUTOCMD
+    block_autocmds();
+# endif
+    *save_curbuf = curbuf;
+    --curbuf->b_nwindows;
+    curbuf = buf;
+    curwin->w_buffer = buf;
+    ++curbuf->b_nwindows;
+}
+
+/*
+ * Restore the current buffer after using switch_buffer().
+ */
+    void
+restore_buffer(save_curbuf)
+    buf_T *save_curbuf;
+{
+# ifdef FEAT_AUTOCMD
+    unblock_autocmds();
+# endif
+    /* Check for valid buffer, just in case. */
+    if (buf_valid(save_curbuf))
+    {
+       --curbuf->b_nwindows;
+       curwin->w_buffer = save_curbuf;
+       curbuf = save_curbuf;
+       ++curbuf->b_nwindows;
+    }
+}
+#endif
+
 #if (defined(FEAT_GUI) && defined(FEAT_VERTSPLIT)) || defined(PROTO)
 /*
  * Return TRUE if there is any vertically split window.
@@ -6548,7 +6866,7 @@ match_delete(wp, id, perr)
        wp->w_match_head = cur->next;
     else
        prev->next = cur->next;
-    vim_free(cur->match.regprog);
+    vim_regfree(cur->match.regprog);
     vim_free(cur->pattern);
     vim_free(cur);
     redraw_later(SOME_VALID);
@@ -6567,7 +6885,7 @@ clear_matches(wp)
     while (wp->w_match_head != NULL)
     {
        m = wp->w_match_head->next;
-       vim_free(wp->w_match_head->match.regprog);
+       vim_regfree(wp->w_match_head->match.regprog);
        vim_free(wp->w_match_head->pattern);
        vim_free(wp->w_match_head);
        wp->w_match_head = m;
@@ -6591,3 +6909,84 @@ get_match(wp, id)
     return cur;
 }
 #endif
+
+#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) || defined(PROTO)
+    int
+get_win_number(win_T *wp, win_T *first_win)
+{
+    int                i = 1;
+    win_T      *w;
+
+    for (w = first_win; w != NULL && w != wp; w = W_NEXT(w))
+       ++i;
+
+    if (w == NULL)
+       return 0;
+    else
+       return i;
+}
+
+    int
+get_tab_number(tabpage_T *tp UNUSED)
+{
+    int                i = 1;
+# ifdef FEAT_WINDOWS
+    tabpage_T  *t;
+
+    for (t = first_tabpage; t != NULL && t != tp; t = t->tp_next)
+       ++i;
+
+    if (t == NULL)
+       return 0;
+    else
+# endif
+       return i;
+}
+#endif
+
+#ifdef FEAT_WINDOWS
+/*
+ * Return TRUE if "topfrp" and its children are at the right height.
+ */
+    static int
+frame_check_height(topfrp, height)
+    frame_T *topfrp;
+    int            height;
+{
+    frame_T *frp;
+
+    if (topfrp->fr_height != height)
+       return FALSE;
+
+    if (topfrp->fr_layout == FR_ROW)
+       for (frp = topfrp->fr_child; frp != NULL; frp = frp->fr_next)
+           if (frp->fr_height != height)
+               return FALSE;
+
+    return TRUE;
+}
+#endif
+
+#ifdef FEAT_VERTSPLIT
+/*
+ * Return TRUE if "topfrp" and its children are at the right width.
+ */
+    static int
+frame_check_width(topfrp, width)
+    frame_T *topfrp;
+    int            width;
+{
+    frame_T *frp;
+
+    if (topfrp->fr_width != width)
+       return FALSE;
+
+    if (topfrp->fr_layout == FR_COL)
+       for (frp = topfrp->fr_child; frp != NULL; frp = frp->fr_next)
+           if (frp->fr_width != width)
+               return FALSE;
+
+    return TRUE;
+}
+#endif
+
index 89f55ef..e0db10e 100644 (file)
@@ -16,7 +16,6 @@
 #include <sys/types.h>
 #include <netdb.h>
 #include <netinet/in.h>
-#include <errno.h>
 #include <sys/socket.h>
 #ifdef HAVE_LIBGEN_H
 # include <libgen.h>
diff --git a/src/xpm/COPYRIGHT b/src/xpm/COPYRIGHT
new file mode 100644 (file)
index 0000000..446fa4c
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 1989-95 GROUPE BULL
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of GROUPE BULL shall not be
+ * used in advertising or otherwise to promote the sale, use or other dealings
+ * in this Software without prior written authorization from GROUPE BULL.
+ */
+
+Arnaud LE HORS      BULL Research FRANCE -- Koala Project 
+                    (XPM - X PixMap format version 2 & 3)
+    Internet:       lehors@sophia.inria.fr
+Surface Mail:       Arnaud LE HORS, INRIA - Sophia Antipolis, 
+                    2004, route des Lucioles, 06565 Valbonne Cedex -- FRANCE
+ Voice phone:       (33) 93.65.77.71, Fax: (33) 93 65 77 66, Telex: 97 00 50 F
diff --git a/src/xpm/README.txt b/src/xpm/README.txt
new file mode 100644 (file)
index 0000000..586de6c
--- /dev/null
@@ -0,0 +1,26 @@
+This is XPM library compiled for Windows which is intended for use with Vim
+'signs' feature.
+
+Libraries in x86 directory were compiled with MSVC6 and MinGW. Proposed
+commands to compile Vim are:
+
+Any version of MSVC starting from version 6.0:
+nmake -f Make_mvc.mak GUI=yes CSCOPE=yes NETBEANS=yes XPM=e:\hg\xpm\x86
+
+MinGW:
+mingw32-make -f Make_ming.mak GUI=yes CSCOPE=yes XPM=e:/hg/xpm/x86
+
+MinGW 64 for x64:
+mingw32-make -f Make_ming.mak GUI=yes ARCH=x86-64 XPM=E:\HG\xpm\x64
+
+Microsoft Visual C++ on x64 (tested with versions 2008 and 2010):
+nmake -f Make_mvc.mak GUI=yes CSCOPE=yes XPM=E:\HG\xpm\x64
+
+To test, open some file in Vim and execute commands below:
+:exe 'sign define vimxpm icon='.$VIMRUNTIME.'\\vim32x32.xpm'
+:exe 'sign place 1 line=1 name=vimxpm file='.expand('%:p')
+
+
+See COPYRIGHT for XPM licence.
+
+If you have questions please email sergey.khorev@gmail.com.
diff --git a/src/xpm/include/simx.h b/src/xpm/include/simx.h
new file mode 100644 (file)
index 0000000..001cfdb
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 1989-95 GROUPE BULL
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of GROUPE BULL shall not be
+ * used in advertising or otherwise to promote the sale, use or other dealings
+ * in this Software without prior written authorization from GROUPE BULL.
+ */
+
+/*****************************************************************************\
+* simx.h: 0.1a                                                                *
+*                                                                             *
+* This emulates some Xlib functionality for MSW. It's not a general solution, *
+* it is close related to XPM-lib. It is only intended to satisfy what is need *
+* there. Thus allowing to read XPM files under MS windows.                    *
+*                                                                             *
+* Developed by HeDu 3/94 (hedu@cul-ipn.uni-kiel.de)                           *
+\*****************************************************************************/
+
+
+#ifndef _SIMX_H
+#define _SIMX_H
+
+#ifdef FOR_MSW
+
+#include "windows.h"                   /* MS windows GDI types */
+
+/*
+ * minimal portability layer between ansi and KR C
+ */
+/* this comes from xpm.h, and is here again, to avoid complicated
+    includes, since this is included from xpm.h */
+/* these defines get undefed at the end of this file */
+#if __STDC__ || defined(__cplusplus) || defined(c_plusplus)
+ /* ANSI || C++ */
+#define FUNC(f, t, p) extern t f p
+#define LFUNC(f, t, p) static t f p
+#else /* k&R */
+#define FUNC(f, t, p) extern t f()
+#define LFUNC(f, t, p) static t f()
+#endif
+
+
+FUNC(boundCheckingMalloc, void *, (long s));
+FUNC(boundCheckingCalloc, void *, (long num, long s));
+FUNC(boundCheckingRealloc, void *, (void *p, long s));
+
+/* define MSW types for X window types,
+   I don't know much about MSW, but the following defines do the job */
+
+typedef HDC Display;                   /* this should be similar */
+typedef void *Screen;                  /* not used */
+typedef void *Visual;                  /* not used yet, is for GRAY, COLOR,
+                                        * MONO */
+
+typedef void *Colormap;                        /* should be COLORPALETTE, not done
+                                        * yet */
+
+typedef COLORREF Pixel;
+
+#define PIXEL_ALREADY_TYPEDEFED                /* to let xpm.h know about it */
+
+typedef struct {
+    Pixel pixel;
+    BYTE red, green, blue;
+}      XColor;
+
+typedef struct {
+    HBITMAP bitmap;
+    unsigned int width;
+    unsigned int height;
+    unsigned int depth;
+}      XImage;
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+/* some replacements for X... functions */
+
+/* XDefaultXXX */
+    FUNC(XDefaultVisual, Visual *, (Display *display, Screen *screen));
+    FUNC(XDefaultScreen, Screen *, (Display *d));
+    FUNC(XDefaultColormap, Colormap *, (Display *display, Screen *screen));
+    FUNC(XDefaultDepth, int, (Display *d, Screen *s));
+
+/* color related */
+    FUNC(XParseColor, int, (Display *, Colormap *, char *, XColor *));
+    FUNC(XAllocColor, int, (Display *, Colormap *, XColor *));
+    FUNC(XQueryColors, void, (Display *display, Colormap *colormap,
+                             XColor *xcolors, int ncolors));
+    FUNC(XFreeColors, int, (Display *d, Colormap cmap,
+                           unsigned long pixels[],
+                           int npixels, unsigned long planes));
+/* XImage */
+    FUNC(XCreateImage, XImage *, (Display *, Visual *, int depth, int format,
+                                 int x, int y, int width, int height,
+                                 int pad, int foo));
+
+/* free and destroy bitmap */
+    FUNC(XDestroyImage, void /* ? */ , (XImage *));
+/* free only, bitmap remains */
+    FUNC(XImageFree, void, (XImage *));
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* end of extern "C" */
+#endif /* cplusplus */
+
+#define ZPixmap 1                      /* not really used */
+#define XYBitmap 1                     /* not really used */
+
+#ifndef True
+#define True 1
+#define False 0
+#endif
+#ifndef Bool
+typedef BOOL Bool;             /* take MSW bool */
+#endif
+/* make these local here, simx.c gets the same from xpm.h */
+#undef LFUNC
+#undef FUNC
+
+#endif /* def FOR_MSW */
+
+#endif /* _SIMX_H */
diff --git a/src/xpm/include/xpm.h b/src/xpm/include/xpm.h
new file mode 100644 (file)
index 0000000..0e9969b
--- /dev/null
@@ -0,0 +1,501 @@
+/*
+ * Copyright (C) 1989-95 GROUPE BULL
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of GROUPE BULL shall not be
+ * used in advertising or otherwise to promote the sale, use or other dealings
+ * in this Software without prior written authorization from GROUPE BULL.
+ */
+
+/*****************************************************************************\
+* xpm.h:                                                                      *
+*                                                                             *
+*  XPM library                                                                *
+*  Include file                                                               *
+*                                                                             *
+*  Developed by Arnaud Le Hors                                                *
+\*****************************************************************************/
+
+/*
+ * The code related to FOR_MSW has been added by
+ * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
+ */
+
+/*
+ * The code related to AMIGA has been added by
+ * Lorens Younes (d93-hyo@nada.kth.se) 4/96
+ */
+
+#ifndef XPM_h
+#define XPM_h
+
+/*
+ * first some identification numbers:
+ * the version and revision numbers are determined with the following rule:
+ * SO Major number = LIB minor version number.
+ * SO Minor number = LIB sub-minor version number.
+ * e.g: Xpm version 3.2f
+ *      we forget the 3 which is the format number, 2 gives 2, and f gives 6.
+ *      thus we have XpmVersion = 2 and XpmRevision = 6
+ *      which gives  SOXPMLIBREV = 2.6
+ *
+ * Then the XpmIncludeVersion number is built from these numbers.
+ */
+#define XpmFormat 3
+#define XpmVersion 4
+#define XpmRevision 11
+#define XpmIncludeVersion ((XpmFormat * 100 + XpmVersion) * 100 + XpmRevision)
+
+#ifndef XPM_NUMBERS
+
+#ifdef FOR_MSW
+# define SYSV                  /* uses memcpy string.h etc. */
+# include <malloc.h>
+# include "simx.h"             /* defines some X stuff using MSW types */
+#define NEED_STRCASECMP                /* at least for MSVC++ */
+#else /* FOR_MSW */
+# ifdef AMIGA
+#  include "amigax.h"
+# else /* not AMIGA */
+#  include <X11/Xlib.h>
+#  include <X11/Xutil.h>
+# endif /* not AMIGA */
+#endif /* FOR_MSW */
+
+/* let's define Pixel if it is not done yet */
+#if ! defined(_XtIntrinsic_h) && ! defined(PIXEL_ALREADY_TYPEDEFED)
+typedef unsigned long Pixel;   /* Index into colormap */
+# define PIXEL_ALREADY_TYPEDEFED
+#endif
+
+/* make sure we know whether function prototypes are needed or not */
+#ifndef NeedFunctionPrototypes
+# if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
+#  define NeedFunctionPrototypes 1
+# else
+#  define NeedFunctionPrototypes 0
+# endif
+#endif
+
+
+/* Return ErrorStatus codes:
+ * null     if full success
+ * positive if partial success
+ * negative if failure
+ */
+
+#define XpmColorError    1
+#define XpmSuccess       0
+#define XpmOpenFailed   -1
+#define XpmFileInvalid  -2
+#define XpmNoMemory     -3
+#define XpmColorFailed  -4
+
+typedef struct {
+    char *name;                        /* Symbolic color name */
+    char *value;               /* Color value */
+    Pixel pixel;               /* Color pixel */
+}      XpmColorSymbol;
+
+typedef struct {
+    char *name;                        /* name of the extension */
+    unsigned int nlines;       /* number of lines in this extension */
+    char **lines;              /* pointer to the extension array of strings */
+}      XpmExtension;
+
+typedef struct {
+    char *string;              /* characters string */
+    char *symbolic;            /* symbolic name */
+    char *m_color;             /* monochrom default */
+    char *g4_color;            /* 4 level grayscale default */
+    char *g_color;             /* other level grayscale default */
+    char *c_color;             /* color default */
+}      XpmColor;
+
+typedef struct {
+    unsigned int width;                /* image width */
+    unsigned int height;       /* image height */
+    unsigned int cpp;          /* number of characters per pixel */
+    unsigned int ncolors;      /* number of colors */
+    XpmColor *colorTable;      /* list of related colors */
+    unsigned int *data;                /* image data */
+}      XpmImage;
+
+typedef struct {
+    unsigned long valuemask;   /* Specifies which attributes are defined */
+    char *hints_cmt;           /* Comment of the hints section */
+    char *colors_cmt;          /* Comment of the colors section */
+    char *pixels_cmt;          /* Comment of the pixels section */
+    unsigned int x_hotspot;    /* Returns the x hotspot's coordinate */
+    unsigned int y_hotspot;    /* Returns the y hotspot's coordinate */
+    unsigned int nextensions;  /* number of extensions */
+    XpmExtension *extensions;  /* pointer to array of extensions */
+}      XpmInfo;
+
+typedef int (*XpmAllocColorFunc)(
+#if NeedFunctionPrototypes
+    Display*                   /* display */,
+    Colormap                   /* colormap */,
+    char*                      /* colorname */,
+    XColor*                    /* xcolor */,
+    void*                      /* closure */
+#endif
+);
+
+typedef int (*XpmFreeColorsFunc)(
+#if NeedFunctionPrototypes
+    Display*                   /* display */,
+    Colormap                   /* colormap */,
+    Pixel*                     /* pixels */,
+    int                                /* npixels */,
+    void*                      /* closure */
+#endif
+);
+
+typedef struct {
+    unsigned long valuemask;           /* Specifies which attributes are
+                                          defined */
+
+    Visual *visual;                    /* Specifies the visual to use */
+    Colormap colormap;                 /* Specifies the colormap to use */
+    unsigned int depth;                        /* Specifies the depth */
+    unsigned int width;                        /* Returns the width of the created
+                                          pixmap */
+    unsigned int height;               /* Returns the height of the created
+                                          pixmap */
+    unsigned int x_hotspot;            /* Returns the x hotspot's
+                                          coordinate */
+    unsigned int y_hotspot;            /* Returns the y hotspot's
+                                          coordinate */
+    unsigned int cpp;                  /* Specifies the number of char per
+                                          pixel */
+    Pixel *pixels;                     /* List of used color pixels */
+    unsigned int npixels;              /* Number of used pixels */
+    XpmColorSymbol *colorsymbols;      /* List of color symbols to override */
+    unsigned int numsymbols;           /* Number of symbols */
+    char *rgb_fname;                   /* RGB text file name */
+    unsigned int nextensions;          /* Number of extensions */
+    XpmExtension *extensions;          /* List of extensions */
+
+    unsigned int ncolors;               /* Number of colors */
+    XpmColor *colorTable;               /* List of colors */
+/* 3.2 backward compatibility code */
+    char *hints_cmt;                    /* Comment of the hints section */
+    char *colors_cmt;                   /* Comment of the colors section */
+    char *pixels_cmt;                   /* Comment of the pixels section */
+/* end 3.2 bc */
+    unsigned int mask_pixel;            /* Color table index of transparent
+                                           color */
+
+    /* Color Allocation Directives */
+    Bool exactColors;                  /* Only use exact colors for visual */
+    unsigned int closeness;            /* Allowable RGB deviation */
+    unsigned int red_closeness;                /* Allowable red deviation */
+    unsigned int green_closeness;      /* Allowable green deviation */
+    unsigned int blue_closeness;       /* Allowable blue deviation */
+    int color_key;                     /* Use colors from this color set */
+
+    Pixel *alloc_pixels;               /* Returns the list of alloc'ed color
+                                          pixels */
+    int nalloc_pixels;                 /* Returns the number of alloc'ed
+                                          color pixels */
+
+    Bool alloc_close_colors;           /* Specify whether close colors should
+                                          be allocated using XAllocColor
+                                          or not */
+    int bitmap_format;                 /* Specify the format of 1bit depth
+                                          images: ZPixmap or XYBitmap */
+
+    /* Color functions */
+    XpmAllocColorFunc alloc_color;     /* Application color allocator */
+    XpmFreeColorsFunc free_colors;     /* Application color de-allocator */
+    void *color_closure;               /* Application private data to pass to
+                                          alloc_color and free_colors */
+
+}      XpmAttributes;
+
+/* XpmAttributes value masks bits */
+#define XpmVisual         (1L<<0)
+#define XpmColormap       (1L<<1)
+#define XpmDepth          (1L<<2)
+#define XpmSize                   (1L<<3)      /* width & height */
+#define XpmHotspot        (1L<<4)      /* x_hotspot & y_hotspot */
+#define XpmCharsPerPixel   (1L<<5)
+#define XpmColorSymbols           (1L<<6)
+#define XpmRgbFilename    (1L<<7)
+/* 3.2 backward compatibility code */
+#define XpmInfos          (1L<<8)
+#define XpmReturnInfos    XpmInfos
+/* end 3.2 bc */
+#define XpmReturnPixels           (1L<<9)
+#define XpmExtensions      (1L<<10)
+#define XpmReturnExtensions XpmExtensions
+
+#define XpmExactColors     (1L<<11)
+#define XpmCloseness      (1L<<12)
+#define XpmRGBCloseness           (1L<<13)
+#define XpmColorKey       (1L<<14)
+
+#define XpmColorTable      (1L<<15)
+#define XpmReturnColorTable XpmColorTable
+
+#define XpmReturnAllocPixels (1L<<16)
+#define XpmAllocCloseColors (1L<<17)
+#define XpmBitmapFormat    (1L<<18)
+
+#define XpmAllocColor      (1L<<19)
+#define XpmFreeColors      (1L<<20)
+#define XpmColorClosure    (1L<<21)
+
+
+/* XpmInfo value masks bits */
+#define XpmComments        XpmInfos
+#define XpmReturnComments  XpmComments
+
+/* XpmAttributes mask_pixel value when there is no mask */
+#ifndef FOR_MSW
+#define XpmUndefPixel 0x80000000
+#else
+/* int is only 16 bit for MSW */
+#define XpmUndefPixel 0x8000
+#endif
+
+/*
+ * color keys for visual type, they must fit along with the number key of
+ * each related element in xpmColorKeys[] defined in XpmI.h
+ */
+#define XPM_MONO       2
+#define XPM_GREY4      3
+#define XPM_GRAY4      3
+#define XPM_GREY       4
+#define XPM_GRAY       4
+#define XPM_COLOR      5
+
+
+/* macros for forward declarations of functions with prototypes */
+#if NeedFunctionPrototypes
+#define FUNC(f, t, p) extern t f p
+#define LFUNC(f, t, p) static t f p
+#else
+#define FUNC(f, t, p) extern t f()
+#define LFUNC(f, t, p) static t f()
+#endif
+
+
+/*
+ * functions declarations
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */
+/* Same for Amiga! */
+
+#if !defined(FOR_MSW) && !defined(AMIGA)
+    FUNC(XpmCreatePixmapFromData, int, (Display *display,
+                                       Drawable d,
+                                       char **data,
+                                       Pixmap *pixmap_return,
+                                       Pixmap *shapemask_return,
+                                       XpmAttributes *attributes));
+
+    FUNC(XpmCreateDataFromPixmap, int, (Display *display,
+                                       char ***data_return,
+                                       Pixmap pixmap,
+                                       Pixmap shapemask,
+                                       XpmAttributes *attributes));
+
+    FUNC(XpmReadFileToPixmap, int, (Display *display,
+                                   Drawable d,
+                                   char *filename,
+                                   Pixmap *pixmap_return,
+                                   Pixmap *shapemask_return,
+                                   XpmAttributes *attributes));
+
+    FUNC(XpmWriteFileFromPixmap, int, (Display *display,
+                                      char *filename,
+                                      Pixmap pixmap,
+                                      Pixmap shapemask,
+                                      XpmAttributes *attributes));
+#endif
+
+    FUNC(XpmCreateImageFromData, int, (Display *display,
+                                      char **data,
+                                      XImage **image_return,
+                                      XImage **shapemask_return,
+                                      XpmAttributes *attributes));
+
+    FUNC(XpmCreateDataFromImage, int, (Display *display,
+                                      char ***data_return,
+                                      XImage *image,
+                                      XImage *shapeimage,
+                                      XpmAttributes *attributes));
+
+    FUNC(XpmReadFileToImage, int, (Display *display,
+                                  char *filename,
+                                  XImage **image_return,
+                                  XImage **shapeimage_return,
+                                  XpmAttributes *attributes));
+
+    FUNC(XpmWriteFileFromImage, int, (Display *display,
+                                     char *filename,
+                                     XImage *image,
+                                     XImage *shapeimage,
+                                     XpmAttributes *attributes));
+
+    FUNC(XpmCreateImageFromBuffer, int, (Display *display,
+                                        char *buffer,
+                                        XImage **image_return,
+                                        XImage **shapemask_return,
+                                        XpmAttributes *attributes));
+#if !defined(FOR_MSW) && !defined(AMIGA)
+    FUNC(XpmCreatePixmapFromBuffer, int, (Display *display,
+                                         Drawable d,
+                                         char *buffer,
+                                         Pixmap *pixmap_return,
+                                         Pixmap *shapemask_return,
+                                         XpmAttributes *attributes));
+
+    FUNC(XpmCreateBufferFromImage, int, (Display *display,
+                                        char **buffer_return,
+                                        XImage *image,
+                                        XImage *shapeimage,
+                                        XpmAttributes *attributes));
+
+    FUNC(XpmCreateBufferFromPixmap, int, (Display *display,
+                                         char **buffer_return,
+                                         Pixmap pixmap,
+                                         Pixmap shapemask,
+                                         XpmAttributes *attributes));
+#endif
+    FUNC(XpmReadFileToBuffer, int, (char *filename, char **buffer_return));
+    FUNC(XpmWriteFileFromBuffer, int, (char *filename, char *buffer));
+
+    FUNC(XpmReadFileToData, int, (char *filename, char ***data_return));
+    FUNC(XpmWriteFileFromData, int, (char *filename, char **data));
+
+    FUNC(XpmAttributesSize, int, ());
+    FUNC(XpmFreeAttributes, void, (XpmAttributes *attributes));
+    FUNC(XpmFreeExtensions, void, (XpmExtension *extensions,
+                                  int nextensions));
+
+    FUNC(XpmFreeXpmImage, void, (XpmImage *image));
+    FUNC(XpmFreeXpmInfo, void, (XpmInfo *info));
+    FUNC(XpmGetErrorString, char *, (int errcode));
+    FUNC(XpmLibraryVersion, int, ());
+
+    /* XpmImage functions */
+    FUNC(XpmReadFileToXpmImage, int, (char *filename,
+                                     XpmImage *image,
+                                     XpmInfo *info));
+
+    FUNC(XpmWriteFileFromXpmImage, int, (char *filename,
+                                        XpmImage *image,
+                                        XpmInfo *info));
+#if !defined(FOR_MSW) && !defined(AMIGA)
+    FUNC(XpmCreatePixmapFromXpmImage, int, (Display *display,
+                                           Drawable d,
+                                           XpmImage *image,
+                                           Pixmap *pixmap_return,
+                                           Pixmap *shapemask_return,
+                                           XpmAttributes *attributes));
+#endif
+    FUNC(XpmCreateImageFromXpmImage, int, (Display *display,
+                                          XpmImage *image,
+                                          XImage **image_return,
+                                          XImage **shapeimage_return,
+                                          XpmAttributes *attributes));
+
+    FUNC(XpmCreateXpmImageFromImage, int, (Display *display,
+                                          XImage *image,
+                                          XImage *shapeimage,
+                                          XpmImage *xpmimage,
+                                          XpmAttributes *attributes));
+#if !defined(FOR_MSW) && !defined(AMIGA)
+    FUNC(XpmCreateXpmImageFromPixmap, int, (Display *display,
+                                           Pixmap pixmap,
+                                           Pixmap shapemask,
+                                           XpmImage *xpmimage,
+                                           XpmAttributes *attributes));
+#endif
+    FUNC(XpmCreateDataFromXpmImage, int, (char ***data_return,
+                                         XpmImage *image,
+                                         XpmInfo *info));
+
+    FUNC(XpmCreateXpmImageFromData, int, (char **data,
+                                         XpmImage *image,
+                                         XpmInfo *info));
+
+    FUNC(XpmCreateXpmImageFromBuffer, int, (char *buffer,
+                                           XpmImage *image,
+                                           XpmInfo *info));
+
+    FUNC(XpmCreateBufferFromXpmImage, int, (char **buffer_return,
+                                           XpmImage *image,
+                                           XpmInfo *info));
+
+    FUNC(XpmGetParseError, int, (char *filename,
+                                int *linenum_return,
+                                int *charnum_return));
+
+    FUNC(XpmFree, void, (void *ptr));
+
+#ifdef __cplusplus
+} /* for C++ V2.0 */
+#endif
+
+
+/* backward compatibility */
+
+/* for version 3.0c */
+#define XpmPixmapColorError  XpmColorError
+#define XpmPixmapSuccess     XpmSuccess
+#define XpmPixmapOpenFailed  XpmOpenFailed
+#define XpmPixmapFileInvalid XpmFileInvalid
+#define XpmPixmapNoMemory    XpmNoMemory
+#define XpmPixmapColorFailed XpmColorFailed
+
+#define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \
+    XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
+#define XpmWritePixmapFile(dpy, file, pix, mask, att) \
+    XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
+
+/* for version 3.0b */
+#define PixmapColorError  XpmColorError
+#define PixmapSuccess     XpmSuccess
+#define PixmapOpenFailed  XpmOpenFailed
+#define PixmapFileInvalid XpmFileInvalid
+#define PixmapNoMemory    XpmNoMemory
+#define PixmapColorFailed XpmColorFailed
+
+#define ColorSymbol XpmColorSymbol
+
+#define XReadPixmapFile(dpy, d, file, pix, mask, att) \
+    XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
+#define XWritePixmapFile(dpy, file, pix, mask, att) \
+    XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
+#define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \
+    XpmCreatePixmapFromData(dpy, d, data, pix, mask, att)
+#define XCreateDataFromPixmap(dpy, data, pix, mask, att) \
+    XpmCreateDataFromPixmap(dpy, data, pix, mask, att)
+
+#endif /* XPM_NUMBERS */
+#endif
diff --git a/src/xpm/x64/lib/libXpm.a b/src/xpm/x64/lib/libXpm.a
new file mode 100644 (file)
index 0000000..cd8bb7e
Binary files /dev/null and b/src/xpm/x64/lib/libXpm.a differ
diff --git a/src/xpm/x64/lib/libXpm.lib b/src/xpm/x64/lib/libXpm.lib
new file mode 100644 (file)
index 0000000..ea25709
Binary files /dev/null and b/src/xpm/x64/lib/libXpm.lib differ
diff --git a/src/xpm/x86/lib/libXpm.a b/src/xpm/x86/lib/libXpm.a
new file mode 100644 (file)
index 0000000..de633b4
Binary files /dev/null and b/src/xpm/x86/lib/libXpm.a differ
diff --git a/src/xpm/x86/lib/libXpm.lib b/src/xpm/x86/lib/libXpm.lib
new file mode 100644 (file)
index 0000000..97bd7d3
Binary files /dev/null and b/src/xpm/x86/lib/libXpm.lib differ
index 45765e1..7241fb6 100644 (file)
@@ -1,4 +1,5 @@
-/*
+/* vi:set ts=8 sts=4 sw=4:
+ *
  * Load XPM image.
  *
  * This function is placed in separate file because Xpm headers conflict with
 #include "xpm.h"
 
 /*
- * Tries to load Xpm image from file 'filename'.
- * If fails return -1.
- * success - 0 and image and mask BITMAPS
+ * Tries to load an Xpm image from the file "filename".
+ * Returns -1 on failure.
+ * Returns 0 on success and stores image and mask BITMAPS in "hImage" and
+ * "hShape".
  */
     int
 LoadXpmImage(filename, hImage, hShape)
@@ -40,7 +42,7 @@ LoadXpmImage(filename, hImage, hShape)
     HBITMAP *hImage;
     HBITMAP *hShape;
 {
-    XImage         *img;   /* loaded image */
+    XImage         *img;  /* loaded image */
     XImage         *shp;  /* shapeimage */
     XpmAttributes   attr;
     int                    res;
@@ -51,10 +53,13 @@ LoadXpmImage(filename, hImage, hShape)
     DeleteDC(hdc);
     if (res < 0)
        return -1;
-    else
+    if (shp == NULL)
     {
-       *hImage = img->bitmap;
-       *hShape = shp->bitmap;
-       return 0;
+       if (img)
+           XDestroyImage(img);
+       return -1;
     }
+    *hImage = img->bitmap;
+    *hShape = shp->bitmap;
+    return 0;
 }
diff --git a/src/xxd/Make_ming.mak b/src/xxd/Make_ming.mak
new file mode 100644 (file)
index 0000000..5147e89
--- /dev/null
@@ -0,0 +1,28 @@
+# The most simplistic Makefile, for MinGW gcc on MS-DOS
+
+ifndef USEDLL
+USEDLL = no
+endif
+
+ifeq (yes, $(USEDLL))
+DEFINES =
+LIBS    = -lc
+else
+DEFINES =
+LIBS    =
+endif
+
+CC = gcc
+CFLAGS = -O2 -Wall -DWIN32 $(DEFINES)
+
+ifneq (sh.exe, $(SHELL))
+DEL = rm
+else
+DEL = del
+endif
+
+xxd.exe: xxd.c
+       $(CC) $(CFLAGS) -s -o xxd.exe xxd.c $(LIBS)
+
+clean:
+       -$(DEL) xxd.exe
index 41f8a24..e19874a 100644 (file)
@@ -49,6 +49,8 @@
  *         option -b added: 01000101 binary output in normal format.
  * 16.05.00 Added VAXC changes by Stephen P. Wall
  * 16.05.00 Improved MMS file and merge for VMS by Zoltan Arpadffy
+ * 2011 March  Better error handling by Florian Zumbiehl.
+ * 2011 April  Formatting by Bram Moolenaar
  *
  * (c) 1990-1998 by Juergen Weigert (jnweiger@informatik.uni-erlangen.de)
  *
@@ -207,8 +209,9 @@ char osver[] = "";
 
 /* Let's collect some prototypes */
 /* CodeWarrior is really picky about missing prototypes */
-static void exit_with_usage __P((char *));
-static int huntype __P((FILE *, FILE *, FILE *, char *, int, int, long));
+static void exit_with_usage __P((void));
+static void die __P((int));
+static int huntype __P((FILE *, FILE *, FILE *, int, int, long));
 static void xxdline __P((FILE *, char *, int));
 
 #define TRY_SEEK       /* attempt to use lseek, or skip forward by reading */
@@ -223,9 +226,10 @@ char hexxa[] = "0123456789abcdef0123456789ABCDEF", *hexx = hexxa;
 #define HEX_CINCLUDE 2
 #define HEX_BITS 3             /* not hex a dump, but bits: 01111001 */
 
-static void
-exit_with_usage(pname)
-char *pname;
+static char *pname;
+
+  static void
+exit_with_usage()
 {
   fprintf(stderr, "Usage:\n       %s [options] [infile [outfile]]\n", pname);
   fprintf(stderr, "    or\n       %s -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]\n", pname);
@@ -252,6 +256,15 @@ char *pname;
   exit(1);
 }
 
+  static void
+die(ret)
+  int ret;
+{
+  fprintf(stderr, "%s: ", pname);
+  perror(NULL);
+  exit(ret);
+}
+
 /*
  * Max. cols binary characters are decoded from the input stream per line.
  * Two adjacent garbage characters after evaluated data delimit valid data.
@@ -259,12 +272,11 @@ char *pname;
  *
  * The name is historic and came from 'undo type opt h'.
  */
-static int
-huntype(fpi, fpo, fperr, pname, cols, hextype, base_off)
-FILE *fpi, *fpo, *fperr;
-char *pname;
-int cols, hextype;
-long base_off;
+  static int
+huntype(fpi, fpo, fperr, cols, hextype, base_off)
+  FILE *fpi, *fpo, *fperr;
+  int cols, hextype;
+  long base_off;
 {
   int c, ign_garb = 1, n1 = -1, n2 = 0, n3, p = cols;
   long have_off = 0, want_off = 0;
@@ -318,7 +330,8 @@ long base_off;
 
       if (base_off + want_off != have_off)
        {
-         fflush(fpo);
+         if (fflush(fpo) != 0)
+           die(3);
 #ifdef TRY_SEEK
          c = fseek(fpo, base_off + want_off - have_off, 1);
          if (c >= 0)
@@ -330,12 +343,14 @@ long base_off;
              return 5;
            }
          for (; have_off < base_off + want_off; have_off++)
-           putc(0, fpo);
+           if (putc(0, fpo) == EOF)
+             die(3);
        }
 
       if (n2 >= 0 && n1 >= 0)
        {
-         putc((n2 << 4) | n1, fpo);
+         if (putc((n2 << 4) | n1, fpo) == EOF)
+           die(3);
          have_off++;
          want_off++;
          n1 = -1;
@@ -345,6 +360,8 @@ long base_off;
              want_off = 0;
              while ((c = getc(fpi)) != '\n' && c != EOF)
                ;
+             if (c == EOF && ferror(fpi))
+               die(2);
              ign_garb = 1;
            }
        }
@@ -355,15 +372,20 @@ long base_off;
            want_off = 0;
          while ((c = getc(fpi)) != '\n' && c != EOF)
            ;
+         if (c == EOF && ferror(fpi))
+           die(2);
          ign_garb = 1;
        }
     }
-  fflush(fpo);
+  if (fflush(fpo) != 0)
+    die(3);
 #ifdef TRY_SEEK
   fseek(fpo, 0L, 2);
 #endif
-  fclose(fpo);
-  fclose(fpi);
+  if (fclose(fpo) != 0)
+    die(3);
+  if (fclose(fpi) != 0)
+    die(2);
   return 0;
 }
 
@@ -379,11 +401,11 @@ long base_off;
  *
  * If nz is always positive, lines are never suppressed.
  */
-static void
+  static void
 xxdline(fp, l, nz)
-FILE *fp;
-char *l;
-int nz;
+  FILE *fp;
+  char *l;
+  int nz;
 {
   static char z[LLEN+1];
   static int zero_seen = 0;
@@ -398,12 +420,15 @@ int nz;
          if (nz < 0)
            zero_seen--;
          if (zero_seen == 2)
-           fputs(z, fp);
+           if (fputs(z, fp) == EOF)
+             die(3);
          if (zero_seen > 2)
-           fputs("*\n", fp);
+           if (fputs("*\n", fp) == EOF)
+             die(3);
        }
       if (nz >= 0 || zero_seen > 0)
-       fputs(l, fp);
+       if (fputs(l, fp) == EOF)
+         die(3);
       if (nz)
        zero_seen = 0;
     }
@@ -439,10 +464,10 @@ static unsigned char etoa64[] =
     0070,0071,0372,0373,0374,0375,0376,0377
 };
 
-int
+  int
 main(argc, argv)
-int argc;
-char *argv[];
+  int argc;
+  char *argv[];
 {
   FILE *fp, *fpo;
   int c, e, p = 0, relseek = 1, negseek = 0, revert = 0;
@@ -451,8 +476,8 @@ char *argv[];
   int octspergrp = -1; /* number of octets grouped in output */
   int grplen;          /* total chars per octet group */
   long length = -1, n = 0, seekoff = 0;
-  char l[LLEN+1];
-  char *pname, *pp;
+  static char l[LLEN+1];  /* static because it may be too big for stack */
+  char *pp;
 
 #ifdef AMIGA
   /* This program doesn't work when started from the Workbench */
@@ -495,7 +520,7 @@ char *argv[];
          else
            {
              if (!argv[2])
-               exit_with_usage(pname);
+               exit_with_usage();
              cols = (int)strtol(argv[2], NULL, 0);
              argv++;
              argc--;
@@ -508,7 +533,7 @@ char *argv[];
          else
            {
              if (!argv[2])
-               exit_with_usage(pname);
+               exit_with_usage();
              octspergrp = (int)strtol(argv[2], NULL, 0);
              argv++;
              argc--;
@@ -531,7 +556,7 @@ char *argv[];
          else
            {
              if (!argv[2])
-               exit_with_usage(pname);
+               exit_with_usage();
 #ifdef TRY_SEEK
              if (argv[2][0] == '+')
                relseek++;
@@ -550,7 +575,7 @@ char *argv[];
          else
            {
              if (!argv[2])
-               exit_with_usage(pname);
+               exit_with_usage();
              length = strtol(argv[2], (char **)NULL, 0);
              argv++;
              argc--;
@@ -563,7 +588,7 @@ char *argv[];
          break;
        }
       else if (pp[0] == '-' && pp[1])  /* unknown option */
-       exit_with_usage(pname);
+       exit_with_usage();
       else
        break;                          /* not an option */
 
@@ -602,7 +627,7 @@ char *argv[];
     octspergrp = cols;
 
   if (argc > 3)
-    exit_with_usage(pname);
+    exit_with_usage();
 
   if (argc == 1 || (argv[1][0] == '-' && !argv[1][1]))
     BIN_ASSIGN(fp = stdin, !revert);
@@ -640,7 +665,7 @@ char *argv[];
          fprintf(stderr, "%s: sorry, cannot revert this type of hexdump\n", pname);
          return -1;
        }
-      return huntype(fp, fpo, stderr, pname, cols, hextype,
+      return huntype(fp, fpo, stderr, cols, hextype,
                negseek ? -seekoff : seekoff);
     }
 
@@ -664,7 +689,18 @@ char *argv[];
          long s = seekoff;
 
          while (s--)
-           (void)getc(fp);
+           if (getc(fp) == EOF)
+           {
+             if (ferror(fp))
+               {
+                 die(2);
+               }
+             else
+               {
+                 fprintf(stderr, "%s: sorry cannot seek.\n", pname);
+                 return 4;
+               }
+           }
        }
     }
 
@@ -672,54 +708,76 @@ char *argv[];
     {
       if (fp != stdin)
        {
-         fprintf(fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : "");
+         if (fprintf(fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : "") < 0)
+           die(3);
          for (e = 0; (c = argv[1][e]) != 0; e++)
-           putc(isalnum(c) ? c : '_', fpo);
-         fputs("[] = {\n", fpo);
+           if (putc(isalnum(c) ? c : '_', fpo) == EOF)
+             die(3);
+         if (fputs("[] = {\n", fpo) == EOF)
+           die(3);
        }
 
       p = 0;
+      c = 0;
       while ((length < 0 || p < length) && (c = getc(fp)) != EOF)
        {
-         fprintf(fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
-           (p % cols) ? ", " : ",\n  "+2*!p,  c);
+         if (fprintf(fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
+               (p % cols) ? ", " : &",\n  "[2*!p],  c) < 0)
+           die(3);
          p++;
        }
+      if (c == EOF && ferror(fp))
+       die(2);
 
-      if (p)
-       fputs("\n};\n"+3*(fp == stdin), fpo);
+      if (p && fputs("\n", fpo) == EOF)
+       die(3);
+      if (fputs(&"};\n"[3 * (fp == stdin)], fpo) == EOF)
+       die(3);
 
       if (fp != stdin)
        {
-         fprintf(fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : "");
+         if (fprintf(fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : "") < 0)
+           die(3);
          for (e = 0; (c = argv[1][e]) != 0; e++)
-           putc(isalnum(c) ? c : '_', fpo);
-         fprintf(fpo, "_len = %d;\n", p);
+           if (putc(isalnum(c) ? c : '_', fpo) == EOF)
+             die(3);
+         if (fprintf(fpo, "_len = %d;\n", p) < 0)
+           die(3);
        }
 
-      fclose(fp);
-      fclose(fpo);
+      if (fclose(fp))
+       die(2);
+      if (fclose(fpo))
+       die(3);
       return 0;
     }
 
   if (hextype == HEX_POSTSCRIPT)
     {
       p = cols;
+      e = 0;
       while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
        {
-         putchar(hexx[(e >> 4) & 0xf]);
-         putchar(hexx[(e     ) & 0xf]);
+         if (putc(hexx[(e >> 4) & 0xf], fpo) == EOF
+                 || putc(hexx[e & 0xf], fpo) == EOF)
+           die(3);
          n++;
          if (!--p)
            {
-             putchar('\n');
+             if (putc('\n', fpo) == EOF)
+               die(3);
              p = cols;
            }
        }
+      if (e == EOF && ferror(fp))
+       die(2);
       if (p < cols)
-       putchar('\n');
-      fclose(fp);
-      fclose(fpo);
+       if (putc('\n', fpo) == EOF)
+         die(3);
+      if (fclose(fp))
+       die(2);
+      if (fclose(fpo))
+       die(3);
       return 0;
     }
 
@@ -730,6 +788,7 @@ char *argv[];
   else /* hextype == HEX_BITS */
     grplen = 8 * octspergrp + 1;
 
+  e = 0;
   while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
     {
       if (p == 0)
@@ -771,6 +830,8 @@ char *argv[];
          p = 0;
        }
     }
+  if (e == EOF && ferror(fp))
+    die(2);
   if (p)
     {
       l[c = (11 + (grplen * cols - 1)/octspergrp + p)] = '\n'; l[++c] = '\0';
@@ -779,7 +840,11 @@ char *argv[];
   else if (autoskip)
     xxdline(fpo, l, -1);       /* last chance to flush out suppressed lines */
 
-  fclose(fp);
-  fclose(fpo);
+  if (fclose(fp))
+    die(2);
+  if (fclose(fpo))
+    die(3);
   return 0;
 }
+
+/* vi:set ts=8 sw=4 sts=2 cino+={2 cino+=n-2 : */
index 62cd658..9d08010 100644 (file)
@@ -55,8 +55,8 @@ Here are guidelines for removing Vim by hand:
    skip the next step.
 
 5. Delete the distributed files.  If you followed the directions, these will
-   be located in a directory like "C:\vim\vim72".  If the $VIM environment
-   variable is set, the directory will be $VIM\vim72.  Delete the "vim72"
+   be located in a directory like "C:\vim\vim74".  If the $VIM environment
+   variable is set, the directory will be $VIM\vim74.  Delete the "vim74"
    directory and all that is in it.  Warning: If you changed any of the
    distributed files, or added some of your own files, you might want to save
    these first.  But normally you would not have changed or added files here.
index 0e6854b..71fdba4 100755 (executable)
@@ -30,7 +30,7 @@ $ !   Check for the existence of VIM, and die if it isn't there.
 $ !
 $      if f$search ("vim:vim.exe") .eqs. ""
 $      then
-$          write sys$error "Error - Can't run tutoral. VIM not found."
+$          write sys$error "Error - Can't run tutorial. VIM not found."
 $          exit
 $      endif
 $ !